@voltro/database 0.27.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
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, Ft as d, G as f, H as p, I as m, It as h, J as g, K as _, L as ee, Lt as v, M as te, Mt as y, N as b, Nt as ne, O as x, Ot as re, P as ie, Pt as ae, Q as oe, R as S, Rt as se, S as ce, St as le, T as ue, Tt as de, U as fe, V as pe, W as me, X as he, Y as ge, Z as _e, _ as ve, _t as ye, a as be, at as xe, b as Se, bt as Ce, c as we, ct as Te, d as Ee, dt as De, et as Oe, f as ke, ft as Ae, g as je, gt as Me, h as Ne, ht as Pe, i as Fe, it as Ie, j as Le, jt as Re, k as ze, kt as C, l as Be, lt as Ve, m as He, mt as Ue, n as We, nt as Ge, o as Ke, ot as qe, p as Je, pt as Ye, q as Xe, rt as Ze, s as w, st as Qe, t as $e, tt as et, u as tt, ut as nt, v as rt, vt as it, w as at, wt as ot, x as st, xt as ct, y as lt, yt as ut, z as dt } from "./frameworkLiveTables-CS_Hyhgz.js";
2
- import { timestampMs as ft, timestampMsOrNull as pt } from "./wire.js";
3
- import { Cause as mt, Chunk as ht, Data as gt, Effect as _t, Exit as vt, Option as T, Schema as E, Stream as yt } from "effect";
4
- import { AsyncLocalStorage as bt } from "node:async_hooks";
5
- import { ansi as D } from "@voltro/logger";
6
- import { SqlClient as xt } from "@effect/sql";
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, Ft as d, G as f, H as p, I as m, It as h, J as g, K as _, L as ee, Lt as v, M as te, Mt as ne, N as y, Nt as re, O as b, Ot as ie, P as ae, Pt as oe, Q as se, R as x, Rt as ce, S as le, St as ue, T as de, Tt as fe, U as pe, V as me, W as he, X as ge, Y as _e, Z as ve, _ as ye, _t as be, a as xe, at as Se, b as Ce, bt as we, c as Te, ct as Ee, d as De, dt as Oe, et as ke, f as Ae, ft as je, g as Me, gt as Ne, h as Pe, ht as Fe, i as Ie, it as Le, j as Re, jt as ze, k as Be, kt as S, l as Ve, lt as He, m as Ue, mt as We, n as Ge, nt as Ke, o as qe, ot as Je, p as Ye, pt as Xe, q as Ze, rt as Qe, s as C, st as $e, t as et, tt, u as nt, ut as rt, v as it, vt as at, w as ot, wt as st, x as ct, xt as lt, y as ut, yt as dt, z as ft } from "./frameworkLiveTables-CS_Hyhgz.js";
2
+ import { timestampMs as pt, timestampMsOrNull as mt } from "./wire.js";
3
+ import { Cause as ht, Chunk as gt, Data as _t, Effect as vt, Exit as yt, Option as bt, Schema as w, Stream as xt } from "effect";
4
+ import { AsyncLocalStorage as St } from "node:async_hooks";
5
+ import { ansi as T } from "@voltro/logger";
6
+ import { SqlClient as Ct } from "@effect/sql";
7
7
  //#region src/actorSnapshot.ts
8
- var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n) => {
8
+ var wt = (e) => typeof e == "string" && e !== "" ? e : null, Tt = async (e, t, n) => {
9
9
  if (!(t == null || t === "")) try {
10
10
  let r = (await e.query({
11
11
  table: "actors",
@@ -21,20 +21,20 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
21
21
  }))[0];
22
22
  return r === void 0 ? void 0 : {
23
23
  id: t,
24
- type: St(r.kind) ?? n,
25
- displayName: St(r.displayName),
26
- email: St(r.email)
24
+ type: wt(r.kind) ?? n,
25
+ displayName: wt(r.displayName),
26
+ email: wt(r.email)
27
27
  };
28
28
  } catch {
29
29
  return;
30
30
  }
31
- }, wt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", Tt = (e) => {
31
+ }, Et = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", Dt = (e) => {
32
32
  let t = [];
33
33
  for (let [n, r] of Object.entries(e.fields)) r.type === "array" && t.push(n);
34
34
  return t;
35
- }, Et = (e, t, n) => {
36
- if (!wt(n) || !t) return e;
37
- let r = Tt(t);
35
+ }, Ot = (e, t, n) => {
36
+ if (!Et(n) || !t) return e;
37
+ let r = Dt(t);
38
38
  if (r.length === 0) return e;
39
39
  let i = { ...e };
40
40
  for (let e of r) {
@@ -42,9 +42,9 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
42
42
  Array.isArray(t) && (i[e] = JSON.stringify(t));
43
43
  }
44
44
  return i;
45
- }, Dt = (e, t, n) => {
46
- if (!wt(n) || !t) return e;
47
- let r = Tt(t);
45
+ }, kt = (e, t, n) => {
46
+ if (!Et(n) || !t) return e;
47
+ let r = Dt(t);
48
48
  return r.length === 0 ? e : e.map((e) => {
49
49
  let t;
50
50
  for (let n of r) {
@@ -56,7 +56,7 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
56
56
  }
57
57
  return t ?? e;
58
58
  });
59
- }, Ot = "enc:v1:", kt = class extends Error {
59
+ }, At = "enc:v1:", jt = class extends Error {
60
60
  _tag = "FieldDecryptionError";
61
61
  table;
62
62
  column;
@@ -64,33 +64,33 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
64
64
  constructor(e) {
65
65
  super(`column "${e.table}.${e.column}" is .encrypted() but could not be decrypted (${e.reason}) — the stored value was most likely encrypted under a different key`), this.name = "FieldDecryptionError", this.table = e.table, this.column = e.column, this.reason = e.reason;
66
66
  }
67
- }, At = (e) => typeof e == "object" && !!e && e._tag === "FieldDecryptionError", jt = (e) => typeof e == "string" && e.startsWith("enc:v1:"), Mt = (e) => {
67
+ }, Mt = (e) => typeof e == "object" && !!e && e._tag === "FieldDecryptionError", Nt = (e) => typeof e == "string" && e.startsWith("enc:v1:"), Pt = (e) => {
68
68
  let t = [];
69
69
  for (let [n, r] of Object.entries(e.fields)) r.encrypted === !0 && t.push(n);
70
70
  return t;
71
- }, Nt = (e, t, n) => {
71
+ }, Ft = (e, t, n) => {
72
72
  if (!t) return e;
73
- let r = Mt(t);
73
+ let r = Pt(t);
74
74
  if (r.length === 0) return e;
75
75
  let i = { ...e };
76
76
  for (let e of r) {
77
77
  let r = i[e];
78
- if (!(r == null || jt(r))) {
78
+ if (!(r == null || Nt(r))) {
79
79
  if (!n) throw Error(`column "${t.tableName ?? "?"}.${e}" is .encrypted() but no field cipher is registered — wire @voltro/plugin-governance's fieldEncryption (key via the Secrets-Resolver)`);
80
80
  i[e] = n.encrypt(JSON.stringify(r));
81
81
  }
82
82
  }
83
83
  return i;
84
- }, Pt = (e, t, n, r) => {
84
+ }, It = (e, t, n, r) => {
85
85
  if (!t) return e;
86
- let i = Mt(t);
86
+ let i = Pt(t);
87
87
  if (i.length === 0 || !n) return e;
88
88
  let a = r?.onError ?? "throw", o = t.tableName ?? "?";
89
89
  return e.map((e) => {
90
90
  let t;
91
91
  for (let s of i) {
92
92
  let i = e[s];
93
- if (jt(i)) {
93
+ if (Nt(i)) {
94
94
  t ??= { ...e };
95
95
  try {
96
96
  t[s] = JSON.parse(n.decrypt(i));
@@ -104,7 +104,7 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
104
104
  });
105
105
  continue;
106
106
  }
107
- throw new kt({
107
+ throw new jt({
108
108
  table: o,
109
109
  column: s,
110
110
  reason: n
@@ -114,62 +114,62 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
114
114
  }
115
115
  return t ?? e;
116
116
  });
117
- }, Ft = (e) => {
117
+ }, Lt = (e) => {
118
118
  let t = (() => {
119
119
  switch (e.type) {
120
120
  case "id":
121
121
  case "reference":
122
122
  case "text":
123
- case "enum": return E.String;
123
+ case "enum": return w.String;
124
124
  case "integer":
125
125
  case "real":
126
- case "decimal": return E.Number;
127
- case "boolean": return E.Boolean;
126
+ case "decimal": return w.Number;
127
+ case "boolean": return w.Boolean;
128
128
  case "timestamp":
129
- case "date": return ft;
130
- case "bigint": return E.BigInt;
131
- case "bytes": return E.Uint8ArrayFromSelf;
132
- case "array": return E.Array(E.Unknown);
133
- case "interval": return E.String;
134
- default: return E.Unknown;
129
+ case "date": return pt;
130
+ case "bigint": return w.BigInt;
131
+ case "bytes": return w.Uint8ArrayFromSelf;
132
+ case "array": return w.Array(w.Unknown);
133
+ case "interval": return w.String;
134
+ default: return w.Unknown;
135
135
  }
136
136
  })();
137
- return e.nullable === !0 ? E.NullOr(t) : t;
138
- }, It = (e, t) => {
137
+ return e.nullable === !0 ? w.NullOr(t) : t;
138
+ }, Rt = (e, t) => {
139
139
  let n = new Set(t?.omit ?? []), r = {};
140
- for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] = Ft(i));
141
- return E.Struct(r);
142
- }, Lt = (e) => typeof e == "function" ? e : () => e, Rt = (e, t) => ({
140
+ for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] = Lt(i));
141
+ return w.Struct(r);
142
+ }, zt = (e) => typeof e == "function" ? e : () => e, Bt = (e, t) => ({
143
143
  kind: "one",
144
- target: Lt(e),
144
+ target: zt(e),
145
145
  ...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
146
146
  ...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
147
- }), zt = (e, t) => ({
147
+ }), Vt = (e, t) => ({
148
148
  kind: "many",
149
- target: Lt(e),
149
+ target: zt(e),
150
150
  ...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
151
151
  ...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
152
- }), Bt = (e, t) => ({
152
+ }), Ht = (e, t) => ({
153
153
  kind: "manyToMany",
154
- target: Lt(e),
155
- through: Lt(t.through),
154
+ target: zt(e),
155
+ through: zt(t.through),
156
156
  sourceKey: t.sourceKey,
157
157
  targetKey: t.targetKey
158
- }), Vt = {
159
- one: Rt,
160
- many: zt,
161
- manyToMany: Bt
162
- }, Ht = (e, t) => {
158
+ }), Ut = {
159
+ one: Bt,
160
+ many: Vt,
161
+ manyToMany: Ht
162
+ }, Wt = (e, t) => {
163
163
  let n = typeof e == "function" ? e : () => e;
164
164
  return {
165
165
  source: n,
166
- relations: t(Vt, n())
166
+ relations: t(Ut, n())
167
167
  };
168
- }, Ut = (e) => {
168
+ }, Gt = (e) => {
169
169
  if (typeof e != "object" || !e) return !1;
170
170
  let t = e;
171
171
  return typeof t.source != "function" || typeof t.relations != "object" || t.relations === null ? !1 : Object.keys(t.relations).length === 0;
172
- }, Wt = (e) => {
172
+ }, Kt = (e) => {
173
173
  if (typeof e != "object" || !e) return !1;
174
174
  let t = e;
175
175
  if (typeof t.source != "function" || typeof t.relations != "object" || t.relations === null) return !1;
@@ -178,35 +178,35 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
178
178
  let t = e?.kind;
179
179
  return t === "one" || t === "many" || t === "manyToMany";
180
180
  });
181
- }, Gt = Rt, Kt = zt, qt = Bt, O = (e, t, n) => {
181
+ }, qt = Bt, Jt = Vt, Yt = Ht, E = (e, t, n) => {
182
182
  let r = [];
183
183
  for (let [n, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && r.push(n);
184
184
  if (r.length === 0) throw Error(`relation '${n}': no reference() column on '${e.tableName}' points at '${t}'. Either add one or pass an explicit { foreignKey: '<column>' }.`);
185
185
  if (r.length > 1) throw Error(`relation '${n}': multiple reference() columns on '${e.tableName}' point at '${t}' (${r.join(", ")}). Pass an explicit { foreignKey: '<column>' } to disambiguate.`);
186
186
  return r[0];
187
- }, Jt = (e) => Object.keys(e.fields), Yt = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), Xt = (e) => {
188
- let t = Jt(e);
187
+ }, Xt = (e) => Object.keys(e.fields), D = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), Zt = (e) => {
188
+ let t = Xt(e);
189
189
  return t.length === 0 ? "<none>" : t.join(", ");
190
- }, Zt = (e, t, n) => {
190
+ }, Qt = (e, t, n) => {
191
191
  let r = `relation '${t}' on '${e.tableName}'`, i = n.target();
192
192
  if (n.kind === "manyToMany") {
193
193
  let t = n.through();
194
- for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!Yt(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}': ${Xt(t)}.`);
194
+ for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!D(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}': ${Zt(t)}.`);
195
195
  return;
196
196
  }
197
197
  if (n.sourceKey !== void 0 && n.foreignKey !== void 0) throw Error(`${r}: pass EITHER sourceKey OR foreignKey, not both. sourceKey '${n.sourceKey}' names a column on the source ('${e.tableName}') holding the target's id; foreignKey '${n.foreignKey}' names a column on the target ('${i.tableName}') holding the source's id. With both, foreignKey is ignored.`);
198
- if (n.sourceKey !== void 0 && !Yt(e, n.sourceKey)) {
199
- let t = Yt(i, n.sourceKey);
200
- throw Error(`${r}: sourceKey '${n.sourceKey}' is not a column on the source table '${e.tableName}'.` + (t ? ` It IS a column on the target '${i.tableName}' — you probably want { foreignKey: '${n.sourceKey}' }, which names the column on the TARGET that holds this table's id.` : ` Columns on '${e.tableName}': ${Xt(e)}.`));
198
+ if (n.sourceKey !== void 0 && !D(e, n.sourceKey)) {
199
+ let t = D(i, n.sourceKey);
200
+ throw Error(`${r}: sourceKey '${n.sourceKey}' is not a column on the source table '${e.tableName}'.` + (t ? ` It IS a column on the target '${i.tableName}' — you probably want { foreignKey: '${n.sourceKey}' }, which names the column on the TARGET that holds this table's id.` : ` Columns on '${e.tableName}': ${Zt(e)}.`));
201
201
  }
202
- if (n.foreignKey !== void 0 && !Yt(i, n.foreignKey)) {
203
- let t = Yt(e, n.foreignKey);
204
- throw Error(`${r}: foreignKey '${n.foreignKey}' is not a column on the target table '${i.tableName}'.` + (t ? ` It IS a column on the source '${e.tableName}' — you want { sourceKey: '${n.foreignKey}' }. foreignKey names the column on the TARGET that points back at this table; sourceKey names the column on THIS table that holds the target's id.` : ` Columns on '${i.tableName}': ${Xt(i)}.`));
202
+ if (n.foreignKey !== void 0 && !D(i, n.foreignKey)) {
203
+ let t = D(e, n.foreignKey);
204
+ throw Error(`${r}: foreignKey '${n.foreignKey}' is not a column on the target table '${i.tableName}'.` + (t ? ` It IS a column on the source '${e.tableName}' — you want { sourceKey: '${n.foreignKey}' }. foreignKey names the column on the TARGET that points back at this table; sourceKey names the column on THIS table that holds the target's id.` : ` Columns on '${i.tableName}': ${Zt(i)}.`));
205
205
  }
206
- }, Qt = Symbol.for("@voltro/database/relationsRegistry"), $t = globalThis, k = $t[Qt] ?? ($t[Qt] = /* @__PURE__ */ new Map()), en = (e) => {
207
- let t = e.source(), n = k.get(t.tableName);
206
+ }, $t = Symbol.for("@voltro/database/relationsRegistry"), en = globalThis, O = en[$t] ?? (en[$t] = /* @__PURE__ */ new Map()), tn = (e) => {
207
+ let t = e.source(), n = O.get(t.tableName);
208
208
  if (n === void 0) {
209
- k.set(t.tableName, new Map(Object.entries(e.relations)));
209
+ O.set(t.tableName, new Map(Object.entries(e.relations)));
210
210
  return;
211
211
  }
212
212
  for (let [r, i] of Object.entries(e.relations)) {
@@ -216,29 +216,29 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
216
216
  n.set(r, i);
217
217
  }
218
218
  }
219
- }, tn = (e) => {
219
+ }, nn = (e) => {
220
220
  let t = 0;
221
- for (let n of Object.values(e)) Wt(n) && (en(n), t += 1);
221
+ for (let n of Object.values(e)) Kt(n) && (tn(n), t += 1);
222
222
  return t;
223
- }, nn = (e) => {
224
- let t = k.get(e);
223
+ }, rn = (e) => {
224
+ let t = O.get(e);
225
225
  if (t !== void 0) return Object.fromEntries(t);
226
- }, rn = (e, t) => k.get(e)?.get(t), an = () => {
226
+ }, an = (e, t) => O.get(e)?.get(t), on = () => {
227
227
  let e = [];
228
- for (let [t, n] of k) for (let [r, i] of n) e.push({
228
+ for (let [t, n] of O) for (let [r, i] of n) e.push({
229
229
  source: t,
230
230
  name: r,
231
231
  relation: i
232
232
  });
233
233
  return e;
234
- }, on = () => {
235
- for (let [e, t] of k) {
236
- let n = S(e);
237
- if (n !== void 0) for (let [e, r] of t) Zt(n, e, r);
238
- }
239
234
  }, sn = () => {
240
- k.clear();
241
- }, cn = (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, ln = (e) => {
235
+ for (let [e, t] of O) {
236
+ let n = x(e);
237
+ if (n !== void 0) for (let [e, r] of t) Qt(n, e, r);
238
+ }
239
+ }, cn = () => {
240
+ O.clear();
241
+ }, ln = (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, un = (e) => {
242
242
  if (e == null || typeof e != "string") return e;
243
243
  let t = e.trim();
244
244
  if (t.length === 0) return e;
@@ -249,7 +249,7 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
249
249
  } catch {
250
250
  return e;
251
251
  }
252
- }, un = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, dn = (e) => {
252
+ }, dn = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, fn = (e) => {
253
253
  if (e == null || e instanceof Date) return e;
254
254
  if (typeof e == "string") {
255
255
  let t = new Date(e);
@@ -260,21 +260,21 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
260
260
  return isNaN(t.getTime()) ? e : t;
261
261
  }
262
262
  return e;
263
- }, fn = (e, t, n) => {
263
+ }, pn = (e, t, n) => {
264
264
  if (e == null) return e;
265
265
  switch (t) {
266
- case "boolean": return n === "postgres" ? e : cn(e);
266
+ case "boolean": return n === "postgres" ? e : ln(e);
267
267
  case "json":
268
- case "array": return n === "postgres" ? e : ln(e);
268
+ case "array": return n === "postgres" ? e : un(e);
269
269
  case "timestamp":
270
- case "date": return n === "sqlite" || n === "turso" ? dn(e) : e;
270
+ case "date": return n === "sqlite" || n === "turso" ? fn(e) : e;
271
271
  case "decimal":
272
- case "bigint": return un(e);
272
+ case "bigint": return dn(e);
273
273
  default: return e;
274
274
  }
275
- }, pn = (e, t, n) => {
275
+ }, mn = (e, t, n) => {
276
276
  if (e.length === 0) return e;
277
- let r = S(t);
277
+ let r = x(t);
278
278
  if (r === void 0) return e;
279
279
  let i = r.fields, a = [];
280
280
  for (let [e, t] of Object.entries(i)) a.push({
@@ -283,36 +283,36 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
283
283
  });
284
284
  return e.map((e) => {
285
285
  let t = { ...e };
286
- for (let { key: e, type: r } of a) e in t && (t[e] = fn(t[e], r, n));
286
+ for (let { key: e, type: r } of a) e in t && (t[e] = pn(t[e], r, n));
287
287
  return t;
288
288
  });
289
- }, mn = (e, t) => {
289
+ }, hn = (e, t) => {
290
290
  if (e == null) return e;
291
291
  switch (t) {
292
292
  case "json":
293
293
  case "array": return typeof e == "string" ? e : JSON.stringify(e);
294
294
  default: return e;
295
295
  }
296
- }, hn = (e, t, n = ["json", "array"]) => {
297
- let r = S(t);
296
+ }, gn = (e, t, n = ["json", "array"]) => {
297
+ let r = x(t);
298
298
  if (r === void 0) return e;
299
299
  let i = r.fields, a = null;
300
300
  for (let [t, r] of Object.entries(i)) if (n.includes(r.type) && t in e) {
301
- let n = mn(e[t], r.type);
301
+ let n = hn(e[t], r.type);
302
302
  n !== e[t] && (a === null && (a = { ...e }), a[t] = n);
303
303
  }
304
304
  return a ?? e;
305
- }, gn = class extends Error {
305
+ }, _n = class extends Error {
306
306
  _tag = "EagerCardinalityError";
307
307
  constructor(e) {
308
308
  super(e), this.name = "EagerCardinalityError";
309
309
  }
310
- }, _n = (e) => {
310
+ }, vn = (e) => {
311
311
  let { relationName: t, sourceTableName: n, targetTableName: r, foreignKey: i, sourceKey: a } = e, o = r === n;
312
312
  return `relation '${t}' on '${n}' is declared \`one\`, but ${r}.${i} matches MORE than one row for the same ${n}.${a} — so there is no single related row to return.` + (o ? ` Because this relation is self-referential, check which side the key is on: \`foreignKey: '${i}'\` means "rows whose ${i} points AT me" (my children — there can be many). If you meant "the row my ${i} points to" (my parent), that is \`sourceKey: '${i}'\`.` : " Use `many(...)` if several are expected, or narrow the key.");
313
- }, vn = async (e, t, n, r) => {
313
+ }, yn = async (e, t, n, r) => {
314
314
  if (e.length === 0) return e;
315
- let i = nn(n.tableName);
315
+ let i = rn(n.tableName);
316
316
  if (i === void 0) throw Error(`cannot eager-load on '${n.tableName}': no relations registered. Did you forget to declare \`relations(${n.tableName}, ...)\` or import the file that does?`);
317
317
  let a = e.map((e) => ({ ...e }));
318
318
  for (let [e, o] of Object.entries(t)) {
@@ -321,36 +321,36 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
321
321
  let t = Object.keys(i).join(", ") || "<none>";
322
322
  throw Error(`unknown relation '${e}' on '${n.tableName}'. Registered relations: ${t}.`);
323
323
  }
324
- Zt(n, e, t), await yn(a, e, t, o === !0 ? {} : o, n, r);
324
+ Qt(n, e, t), await bn(a, e, t, o === !0 ? {} : o, n, r);
325
325
  }
326
326
  return a;
327
- }, yn = async (e, t, n, r, i, a) => {
327
+ }, bn = async (e, t, n, r, i, a) => {
328
328
  switch (n.kind) {
329
329
  case "one":
330
- await bn(e, t, n, r, i, a);
330
+ await xn(e, t, n, r, i, a);
331
331
  return;
332
332
  case "many":
333
- await xn(e, t, n, r, i, a);
333
+ await Sn(e, t, n, r, i, a);
334
334
  return;
335
335
  case "manyToMany":
336
- await Cn(e, t, n, r, i, a);
336
+ await wn(e, t, n, r, i, a);
337
337
  return;
338
338
  }
339
- }, bn = async (e, t, n, r, i, a) => {
340
- let o = n.target(), s = n.sourceKey ?? wn(i, o.tableName);
339
+ }, xn = async (e, t, n, r, i, a) => {
340
+ let o = n.target(), s = n.sourceKey ?? Tn(i, o.tableName);
341
341
  if (s !== void 0) {
342
- let n = A(e, s), i = n.length === 0 ? [] : await Tn(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
342
+ let n = k(e, s), i = n.length === 0 ? [] : await En(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
343
343
  for (let n of e) {
344
344
  let e = n[s];
345
345
  n[t] = e == null ? null : c.get(e) ?? null;
346
346
  }
347
- await En(i, r.with, o, a);
347
+ await Dn(i, r.with, o, a);
348
348
  return;
349
349
  }
350
- let c = n.foreignKey ?? O(o, i.tableName, t), l = n.sourceKey ?? "id", u = A(e, l), d = u.length === 0 ? [] : await Tn(o, c, u, r, a), f = /* @__PURE__ */ new Map();
350
+ let c = n.foreignKey ?? E(o, i.tableName, t), l = n.sourceKey ?? "id", u = k(e, l), d = u.length === 0 ? [] : await En(o, c, u, r, a), f = /* @__PURE__ */ new Map();
351
351
  for (let e of d) {
352
352
  let n = e[c];
353
- if (f.has(n)) throw new gn(_n({
353
+ if (f.has(n)) throw new _n(vn({
354
354
  relationName: t,
355
355
  sourceTableName: i.tableName,
356
356
  targetTableName: o.tableName,
@@ -363,9 +363,9 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
363
363
  let e = n[l];
364
364
  n[t] = e == null ? null : f.get(e) ?? null;
365
365
  }
366
- await En(d, r.with, o, a);
367
- }, xn = async (e, t, n, r, i, a) => {
368
- let o = n.target(), s = n.foreignKey ?? O(o, i.tableName, t), c = n.sourceKey ?? "id", l = A(e, c), u = Sn(r), d = l.length === 0 ? [] : await Tn(o, s, l, u, a), f = /* @__PURE__ */ new Map();
366
+ await Dn(d, r.with, o, a);
367
+ }, Sn = async (e, t, n, r, i, a) => {
368
+ let o = n.target(), s = n.foreignKey ?? E(o, i.tableName, t), c = n.sourceKey ?? "id", l = k(e, c), u = Cn(r), d = l.length === 0 ? [] : await En(o, s, l, u, a), f = /* @__PURE__ */ new Map();
369
369
  for (let e of d) {
370
370
  let t = e[s], n = f.get(t);
371
371
  n ? n.push(e) : f.set(t, [e]);
@@ -381,12 +381,12 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
381
381
  let e = n[c];
382
382
  n[t] = f.get(e) ?? [];
383
383
  }
384
- await En(d, r.with, o, a);
385
- }, Sn = (e) => {
384
+ await Dn(d, r.with, o, a);
385
+ }, Cn = (e) => {
386
386
  let { limit: t, offset: n, ...r } = e;
387
387
  return r;
388
- }, Cn = async (e, t, n, r, i, a) => {
389
- let o = n.target(), s = n.through(), c = A(e, "id");
388
+ }, wn = async (e, t, n, r, i, a) => {
389
+ let o = n.target(), s = n.through(), c = k(e, "id");
390
390
  if (c.length === 0) {
391
391
  for (let n of e) n[t] = [];
392
392
  return;
@@ -407,8 +407,8 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
407
407
  for (let n of e) n[t] = [];
408
408
  return;
409
409
  }
410
- let f = await Tn(o, "id", A(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
411
- await En(f, r.with, o, a);
410
+ let f = await En(o, "id", k(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
411
+ await Dn(f, r.with, o, a);
412
412
  let m = r.junction === void 0 ? void 0 : r.junction === !0 ? Object.keys(s.fields) : r.junction, h = /* @__PURE__ */ new Map();
413
413
  for (let e of d) {
414
414
  let t = e[n.sourceKey], r = e[n.targetKey], i = p.get(r);
@@ -420,16 +420,16 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
420
420
  o ? o.push(a) : h.set(t, [a]);
421
421
  }
422
422
  for (let n of e) n[t] = h.get(n.id) ?? [];
423
- }, wn = (e, t) => {
423
+ }, Tn = (e, t) => {
424
424
  for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
425
- }, A = (e, t) => {
425
+ }, k = (e, t) => {
426
426
  let n = /* @__PURE__ */ new Set();
427
427
  for (let r of e) {
428
428
  let e = r[t];
429
429
  e != null && n.add(e);
430
430
  }
431
431
  return [...n];
432
- }, Tn = (e, t, n, r, i) => {
432
+ }, En = (e, t, n, r, i) => {
433
433
  let a = {
434
434
  column: t,
435
435
  op: "in",
@@ -443,63 +443,63 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
443
443
  skip: r.offset,
444
444
  projection: void 0
445
445
  });
446
- }, En = async (e, t, n, r) => {
447
- t !== void 0 && e.length !== 0 && (await vn(e, t, n, r)).forEach((t, n) => {
446
+ }, Dn = async (e, t, n, r) => {
447
+ t !== void 0 && e.length !== 0 && (await yn(e, t, n, r)).forEach((t, n) => {
448
448
  let r = e[n];
449
449
  for (let [e, n] of Object.entries(t)) e in r || (r[e] = n);
450
450
  });
451
- }, Dn = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, On = class extends Error {
451
+ }, On = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, kn = class extends Error {
452
452
  _tag = "TenantNamespaceUnresolved";
453
453
  constructor(e) {
454
454
  super(e), this.name = "TenantNamespaceUnresolved";
455
455
  }
456
- }, kn = class extends Error {
456
+ }, An = class extends Error {
457
457
  _tag = "TenantNamespaceInvalid";
458
458
  constructor(e) {
459
459
  super(e), this.name = "TenantNamespaceInvalid";
460
460
  }
461
- }, An = 63, jn = "tenant_", Mn = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), Nn = (e) => {
462
- if (e == null || e === "") throw new On("namespace isolation is on but the request has no resolvable tenant (subject.tenantId is null/empty). Refusing to run against a shared/default namespace — this would be a cross-tenant read. Authenticate with a tenant-scoped subject, or disable namespace isolation for this surface.");
463
- let t = Mn(e);
464
- if (t.replace(/_/g, "") === "") throw new kn(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
465
- let n = `${jn}${t}`;
466
- if (n.length > An) throw new kn(`namespace '${n}' for tenant '${e}' exceeds the ${An}-byte identifier limit. Use a shorter tenant id.`);
461
+ }, jn = 63, Mn = "tenant_", Nn = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), Pn = (e) => {
462
+ if (e == null || e === "") throw new kn("namespace isolation is on but the request has no resolvable tenant (subject.tenantId is null/empty). Refusing to run against a shared/default namespace — this would be a cross-tenant read. Authenticate with a tenant-scoped subject, or disable namespace isolation for this surface.");
463
+ let t = Nn(e);
464
+ if (t.replace(/_/g, "") === "") throw new An(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
465
+ let n = `${Mn}${t}`;
466
+ if (n.length > jn) throw new An(`namespace '${n}' for tenant '${e}' exceeds the ${jn}-byte identifier limit. Use a shorter tenant id.`);
467
467
  return n;
468
- }, Pn = (e, t) => e === null ? t : `${e}.${t}`, Fn = /* @__PURE__ */ new Set(["timestamp", "date"]), In = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, Ln = (e, t) => {
469
- if (e === void 0 || t == null || !Fn.has(e) || t instanceof Date) return t;
468
+ }, Fn = (e, t) => e === null ? t : `${e}.${t}`, In = /* @__PURE__ */ new Set(["timestamp", "date"]), Ln = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, Rn = (e, t) => {
469
+ if (e === void 0 || t == null || !In.has(e) || t instanceof Date) return t;
470
470
  if (typeof t == "number" && Number.isFinite(t)) return new Date(t);
471
- if (typeof t == "string" && In.test(t)) {
471
+ if (typeof t == "string" && Ln.test(t)) {
472
472
  let e = new Date(t);
473
473
  return Number.isNaN(e.getTime()) ? t : e;
474
474
  }
475
475
  return t;
476
- }, Rn = (e, t) => e === void 0 || !Fn.has(e) ? t : t.map((t) => Ln(e, t)), zn = (e, t) => {
476
+ }, zn = (e, t) => e === void 0 || !In.has(e) ? t : t.map((t) => Rn(e, t)), Bn = (e, t) => {
477
477
  let { strings: n, values: r } = e, i = t.unsafe(n[0] ?? "");
478
478
  for (let e = 0; e < r.length; e++) i = t`${i}${r[e]}${t.unsafe(n[e + 1] ?? "")}`;
479
479
  return t`${i}`;
480
- }, j = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), M = (e, t, n = null, r) => {
481
- if ("not" in e) return t`NOT (${M(e.not, t, n, r)})`;
482
- if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => M(e, t, n, r)));
483
- if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => M(e, t, n, r)));
480
+ }, A = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), j = (e, t, n = null, r) => {
481
+ if ("not" in e) return t`NOT (${j(e.not, t, n, r)})`;
482
+ if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => j(e, t, n, r)));
483
+ if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => j(e, t, n, r)));
484
484
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
485
- let r = e, i = N(r.subquery, t, n);
485
+ let r = e, i = M(r.subquery, t, n);
486
486
  return r.op === "subquery-in" ? t`${t(r.column)} IN (${i})` : t`${t(r.column)} NOT IN (${i})`;
487
487
  }
488
488
  if (e.op === "exists" || e.op === "not-exists") {
489
- let r = e, i = N(r.subquery, t, n);
489
+ let r = e, i = M(r.subquery, t, n);
490
490
  return r.op === "exists" ? t`EXISTS (${i})` : t`NOT EXISTS (${i})`;
491
491
  }
492
492
  let i = e, a = t(i.column), o = i.path, s = o !== void 0 && o.length > 0, c = () => t.onDialectOrElse({
493
- mysql: () => t.unsafe(w(i.column, o, "mysql")),
494
- mssql: () => t.unsafe(w(i.column, o, "mssql")),
495
- sqlite: () => t.unsafe(w(i.column, o, "sqlite")),
496
- orElse: () => t.unsafe(w(i.column, o, "postgres"))
493
+ mysql: () => t.unsafe(C(i.column, o, "mysql")),
494
+ mssql: () => t.unsafe(C(i.column, o, "mssql")),
495
+ sqlite: () => t.unsafe(C(i.column, o, "sqlite")),
496
+ orElse: () => t.unsafe(C(i.column, o, "postgres"))
497
497
  }), l = () => t.onDialectOrElse({
498
- mysql: () => t.unsafe(w(i.column, o, "mysql", { numeric: !0 })),
499
- mssql: () => t.unsafe(w(i.column, o, "mssql", { numeric: !0 })),
500
- sqlite: () => t.unsafe(w(i.column, o, "sqlite", { numeric: !0 })),
501
- orElse: () => t.unsafe(w(i.column, o, "postgres", { numeric: !0 }))
502
- }), u = s ? c() : a, d = s ? l() : a, f = (e) => s && e != null ? String(e) : e, p = (e) => s ? Number(e) : e, m = s || r === void 0 ? void 0 : S(r)?.fields?.[i.column]?.type, h = (e) => Ln(m, e);
498
+ mysql: () => t.unsafe(C(i.column, o, "mysql", { numeric: !0 })),
499
+ mssql: () => t.unsafe(C(i.column, o, "mssql", { numeric: !0 })),
500
+ sqlite: () => t.unsafe(C(i.column, o, "sqlite", { numeric: !0 })),
501
+ orElse: () => t.unsafe(C(i.column, o, "postgres", { numeric: !0 }))
502
+ }), u = s ? c() : a, d = s ? l() : a, f = (e) => s && e != null ? String(e) : e, p = (e) => s ? Number(e) : e, m = s || r === void 0 ? void 0 : x(r)?.fields?.[i.column]?.type, h = (e) => Rn(m, e);
503
503
  switch (i.op) {
504
504
  case "eq": return t`${u} = ${f(h(i.value))}`;
505
505
  case "neq": return t`${u} <> ${f(h(i.value))}`;
@@ -516,7 +516,7 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
516
516
  return e.length === 0 ? t`TRUE` : t`${u} NOT IN ${t.in(s ? e.map((e) => f(e)) : e)}`;
517
517
  }
518
518
  case "contains": {
519
- let e = `%${j(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
519
+ let e = `%${A(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
520
520
  return t.onDialectOrElse({
521
521
  mysql: () => t`LOWER(${u}) LIKE LOWER(${e})`,
522
522
  mssql: () => t`LOWER(${u}) LIKE LOWER(${e})`,
@@ -525,7 +525,7 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
525
525
  });
526
526
  }
527
527
  case "startsWith": {
528
- let e = `${j(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
528
+ let e = `${A(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
529
529
  return t.onDialectOrElse({
530
530
  mysql: () => t`${u} LIKE ${e}`,
531
531
  orElse: () => t`${u} LIKE ${e} ESCAPE '\\'`
@@ -573,13 +573,13 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
573
573
  });
574
574
  }
575
575
  }
576
- }, Bn = (e, t) => {
576
+ }, Vn = (e, t) => {
577
577
  let n = [];
578
578
  return e.partitionBy && e.partitionBy.length > 0 && n.push(t`PARTITION BY ${t.csv(e.partitionBy.map((e) => t`${t(e)}`))}`), e.orderBy && e.orderBy.length > 0 && n.push(t`ORDER BY ${t.csv(e.orderBy.map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), n.length === 0 ? t`` : n.length === 1 ? n[0] : n.reduce((e, n, r) => r === 0 ? n : t`${e} ${n}`);
579
- }, Vn = (e, t) => t.csv(e.map((e) => {
579
+ }, Hn = (e, t) => t.csv(e.map((e) => {
580
580
  let n = e.column === void 0 ? t.unsafe("*") : t`${t(e.column)}`;
581
581
  if (e.op.startsWith("window-")) {
582
- let r = Bn(e.window ?? {}, t);
582
+ let r = Vn(e.window ?? {}, t);
583
583
  switch (e.op) {
584
584
  case "window-row-number": return t`ROW_NUMBER() OVER (${r}) AS ${t(e.alias)}`;
585
585
  case "window-rank": return t`RANK() OVER (${r}) AS ${t(e.alias)}`;
@@ -603,43 +603,43 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
603
603
  return t`${t(e.column)} AS ${t(e.alias)}`;
604
604
  default: throw Error(`compileAggregateProjection: unknown op '${e.op}'`);
605
605
  }
606
- })), Hn = (e) => `[${e.join(",")}]`, Un = (e, t) => {
606
+ })), Un = (e) => `[${e.join(",")}]`, Wn = (e, t) => {
607
607
  if (e.queryVector === void 0) return null;
608
- let n = t(e.column), r = Hn(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
608
+ let n = t(e.column), r = Un(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
609
609
  return t.onDialectOrElse({
610
610
  mysql: () => t`${t.unsafe(a)}(${n}, ${r})`,
611
611
  mssql: () => t`NULL`,
612
612
  sqlite: () => t`NULL`,
613
613
  orElse: () => t`${n} ${t.unsafe(i)} ${r}::vector`
614
614
  });
615
- }, Wn = (e, t) => {
615
+ }, Gn = (e, t) => {
616
616
  let n = t.unsafe(e.useGeography ? "::geography" : "::geometry");
617
617
  return t`ST_Distance(${t(e.column)}${n}, ${e.geom}${n})`;
618
- }, Gn = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, Kn = (e, t) => t`${t(`${e.indexName}_tsv`)}`, qn = (e, t) => `${t}_${e.indexName}_fts`, Jn = (e, t, n) => {
619
- let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${j(e.query)}%`;
618
+ }, Kn = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, qn = (e, t) => t`${t(`${e.indexName}_tsv`)}`, Jn = (e, t) => `${t}_${e.indexName}_fts`, Yn = (e, t, n) => {
619
+ let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${A(e.query)}%`;
620
620
  return n.onDialectOrElse({
621
621
  mysql: () => n`MATCH(${r}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
622
622
  sqlite: () => {
623
- let r = n(qn(e, t));
623
+ let r = n(Jn(e, t));
624
624
  return n`${n("id")} IN (SELECT ${n("row_id")} FROM ${r} WHERE ${r} MATCH ${e.query})`;
625
625
  },
626
626
  mssql: () => n.or(e.columns.map((e) => n`LOWER(${n(e)}) LIKE LOWER(${i}) ESCAPE '\\'`)),
627
- orElse: () => n`${Kn(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
627
+ orElse: () => n`${qn(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
628
628
  });
629
- }, Yn = (e, t, n) => {
630
- let r = `%${j(e.query)}%`;
629
+ }, Xn = (e, t, n) => {
630
+ let r = `%${A(e.query)}%`;
631
631
  return n.onDialectOrElse({
632
632
  mysql: () => n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
633
633
  sqlite: () => {
634
- let r = n(qn(e, t));
634
+ let r = n(Jn(e, t));
635
635
  return n`COALESCE((SELECT -bm25(${r}) FROM ${r} WHERE ${r} MATCH ${e.query} AND ${r}.${n("row_id")} = ${n("id")}), 0)`;
636
636
  },
637
637
  mssql: () => e.columns.map((e) => n`(CASE WHEN LOWER(${n(e)}) LIKE LOWER(${r}) ESCAPE '\\' THEN 1 ELSE 0 END)`).reduce((e, t, r) => r === 0 ? t : n`${e} + ${t}`),
638
- orElse: () => n`ts_rank(${Kn(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
638
+ orElse: () => n`ts_rank(${qn(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
639
639
  });
640
- }, N = (e, t, n = null) => {
640
+ }, M = (e, t, n = null) => {
641
641
  if (e.setOp && e.setOp.queries.length >= 2) {
642
- let r = e.setOp.kind === "union" ? "UNION" : e.setOp.kind === "union-all" ? "UNION ALL" : e.setOp.kind === "intersect" ? "INTERSECT" : "EXCEPT", i = e.setOp.queries.map((e) => t`(${N(e, t, n)})`).reduce((e, n, i) => i === 0 ? n : t`${e} ${t.unsafe(r)} ${n}`), a = [];
642
+ let r = e.setOp.kind === "union" ? "UNION" : e.setOp.kind === "union-all" ? "UNION ALL" : e.setOp.kind === "intersect" ? "INTERSECT" : "EXCEPT", i = e.setOp.queries.map((e) => t`(${M(e, t, n)})`).reduce((e, n, i) => i === 0 ? n : t`${e} ${t.unsafe(r)} ${n}`), a = [];
643
643
  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) {
644
644
  if (!Number.isInteger(e.take) || e.take < 0) throw Error(`compileSelect: invalid take ${e.take}`);
645
645
  a.push(t` LIMIT ${t.unsafe(String(e.take))}`);
@@ -650,7 +650,7 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
650
650
  }
651
651
  return t`${i}${a.reduce((e, n) => t`${e}${n}`, t``)}`;
652
652
  }
653
- let r = e.annClause === void 0 ? null : Un(e.annClause, t);
653
+ let r = e.annClause === void 0 ? null : Wn(e.annClause, t);
654
654
  e.spatialClause !== void 0 && t.onDialectOrElse({
655
655
  mysql: () => {
656
656
  throw Error("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
@@ -663,57 +663,57 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
663
663
  },
664
664
  orElse: () => t``
665
665
  });
666
- let i = e.spatialClause?.projectAs === void 0 ? null : Wn(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? Vn(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 ? Yn(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({
666
+ let i = e.spatialClause?.projectAs === void 0 ? null : Gn(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? Hn(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 ? Xn(c, e.table, t) : null, u = l !== null && c?.rank !== void 0 ? t`${s}, ${l} AS ${t(c.rank.alias)}` : s, d = i !== null && !o && e.spatialClause?.projectAs !== void 0 ? t`${u}, ${i} AS ${t(e.spatialClause.projectAs)}` : u, f = e.distinctOn && e.distinctOn.length > 0 ? t.onDialectOrElse({
667
667
  orElse: () => t`DISTINCT ON (${t.csv(e.distinctOn.map((e) => t`${t(e)}`))}) `,
668
668
  mysql: () => t`DISTINCT `,
669
669
  mssql: () => t`DISTINCT `,
670
670
  sqlite: () => t`DISTINCT `
671
- }) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(Pn(n, e.table))}` : t`${t(Pn(n, e.table))} AS ${t(e.alias)}`, m = (e.joins ?? []).map((e) => {
671
+ }) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(Fn(n, e.table))}` : t`${t(Fn(n, e.table))} AS ${t(e.alias)}`, m = (e.joins ?? []).map((e) => {
672
672
  let r = e.kind === "inner" ? "INNER" : "LEFT";
673
- return t` ${t.unsafe(r)} JOIN ${t(Pn(n, e.table))} AS ${t(e.alias)} ON ${M(e.on, t, n)}`;
674
- }), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null : Jn(c, e.table, t), _ = [e.predicate ? M(e.predicate, t, n, e.table) : null, g].filter((e) => e !== null), ee = _.length > 0 ? t` WHERE ${t.and(_)}` : t``, v = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, te = e.having ? t` HAVING ${M(e.having, t, n, e.table)}` : t``, y = e.skip !== void 0, b = [];
675
- r !== null && b.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && b.push(e.spatialClause.order === "desc" ? t`${Gn(e.spatialClause, t)} DESC` : t`${Gn(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && b.push(t`${l} DESC`);
676
- for (let n of e.order) b.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
677
- let ne = b.length > 0 ? t` ORDER BY ${t.csv(b)}` : y ? t.onDialectOrElse({
673
+ return t` ${t.unsafe(r)} JOIN ${t(Fn(n, e.table))} AS ${t(e.alias)} ON ${j(e.on, t, n)}`;
674
+ }), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null : Yn(c, e.table, t), _ = [e.predicate ? j(e.predicate, t, n, e.table) : null, g].filter((e) => e !== null), ee = _.length > 0 ? t` WHERE ${t.and(_)}` : t``, v = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, te = e.having ? t` HAVING ${j(e.having, t, n, e.table)}` : t``, ne = e.skip !== void 0, y = [];
675
+ r !== null && y.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && y.push(e.spatialClause.order === "desc" ? t`${Kn(e.spatialClause, t)} DESC` : t`${Kn(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && y.push(t`${l} DESC`);
676
+ for (let n of e.order) y.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
677
+ let re = y.length > 0 ? t` ORDER BY ${t.csv(y)}` : ne ? t.onDialectOrElse({
678
678
  mssql: () => t` ORDER BY (SELECT NULL)`,
679
679
  orElse: () => t``
680
- }) : t``, x = (e) => {
680
+ }) : t``, b = (e) => {
681
681
  if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`compileSelect: expected non-negative integer take/skip, got ${e}`);
682
682
  return t.unsafe(String(e));
683
- }, re = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${N(e.descriptor, t, n)})`), ie = (e.ctes ?? []).some((e) => e.recursive === !0), ae = re.length > 0 ? t`WITH ${t.unsafe(ie ? "RECURSIVE " : "")}${t.csv(re)} ` : t``;
683
+ }, ie = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${M(e.descriptor, t, n)})`), ae = (e.ctes ?? []).some((e) => e.recursive === !0), oe = ie.length > 0 ? t`WITH ${t.unsafe(ae ? "RECURSIVE " : "")}${t.csv(ie)} ` : t``;
684
684
  return t.onDialectOrElse({
685
685
  mssql: () => {
686
- let n = e.take !== void 0 && !y ? t`TOP ${x(e.take)} ` : t``, r = y ? t` OFFSET ${x(e.skip)} ROWS FETCH NEXT ${x(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
687
- return t`${ae}SELECT ${n}${f}${d} FROM ${h}${ee}${v}${te}${ne}${r}`;
686
+ let n = e.take !== void 0 && !ne ? t`TOP ${b(e.take)} ` : t``, r = ne ? t` OFFSET ${b(e.skip)} ROWS FETCH NEXT ${b(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
687
+ return t`${oe}SELECT ${n}${f}${d} FROM ${h}${ee}${v}${te}${re}${r}`;
688
688
  },
689
689
  orElse: () => {
690
- let n = e.take === void 0 ? t`` : t` LIMIT ${x(e.take)}`, r = y ? t` OFFSET ${x(e.skip)}` : t``;
691
- return t`${ae}SELECT ${f}${d} FROM ${h}${ee}${v}${te}${ne}${n}${r}`;
690
+ let n = e.take === void 0 ? t`` : t` LIMIT ${b(e.take)}`, r = ne ? t` OFFSET ${b(e.skip)}` : t``;
691
+ return t`${oe}SELECT ${f}${d} FROM ${h}${ee}${v}${te}${re}${n}${r}`;
692
692
  }
693
693
  });
694
- }, Xn = (e, t, n) => {
694
+ }, Zn = (e, t, n) => {
695
695
  if (e.eager === void 0) return null;
696
- let r = Qn(e.table, e.eager, e.sourceTable);
696
+ let r = $n(e.table, e.eager, e.sourceTable);
697
697
  if (r === null) return null;
698
- let i = ar(n, e, r, ir(t, n));
698
+ let i = or(n, e, r, ar(t, n));
699
699
  return i === null ? null : {
700
700
  fragment: i,
701
- decode: cr(r, n)
701
+ decode: lr(r, n)
702
702
  };
703
- }, P = (e) => e.relation.kind === "one" && e.fkSide === "target", Zn = (e) => ({
703
+ }, N = (e) => e.relation.kind === "one" && e.fkSide === "target", Qn = (e) => ({
704
704
  ...e,
705
705
  branch: {
706
706
  ...e.branch,
707
707
  limit: 2
708
708
  }
709
- }), Qn = (e, t, n) => {
710
- let r = n ?? pe(e), i = nn(e);
709
+ }), $n = (e, t, n) => {
710
+ let r = n ?? me(e), i = rn(e);
711
711
  if (i === void 0) return null;
712
712
  let a = [];
713
713
  for (let [e, n] of Object.entries(t)) {
714
714
  let t = i[e];
715
715
  if (t === void 0) return null;
716
- let o = $n(e, t, r, n === !0 ? {} : n);
716
+ let o = er(e, t, r, n === !0 ? {} : n);
717
717
  if (o === null) return null;
718
718
  a.push(o);
719
719
  }
@@ -721,30 +721,30 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
721
721
  table: r,
722
722
  children: a
723
723
  };
724
- }, $n = (e, t, n, r) => {
724
+ }, er = (e, t, n, r) => {
725
725
  let i = t.target(), a = (t.kind === "manyToMany" ? void 0 : t.sourceKey) ?? "id", o, s;
726
726
  if (t.kind === "manyToMany") o = t.targetKey, s = "target";
727
727
  else if (t.kind === "one") {
728
- let r = t.sourceKey ?? rr(n, i.tableName);
728
+ let r = t.sourceKey ?? ir(n, i.tableName);
729
729
  if (r !== void 0) o = r, s = "source";
730
730
  else try {
731
- o = t.foreignKey ?? O(i, n.tableName, e), s = "target";
731
+ o = t.foreignKey ?? E(i, n.tableName, e), s = "target";
732
732
  } catch {
733
733
  return null;
734
734
  }
735
735
  } else try {
736
- o = t.foreignKey ?? O(i, n.tableName, e), s = "target";
736
+ o = t.foreignKey ?? E(i, n.tableName, e), s = "target";
737
737
  } catch {
738
738
  return null;
739
739
  }
740
740
  let c = r.with === void 0 ? [] : (() => {
741
- let e = nn(i.tableName);
741
+ let e = rn(i.tableName);
742
742
  if (e === void 0 && Object.keys(r.with).length > 0) return null;
743
743
  let t = [];
744
744
  for (let [n, a] of Object.entries(r.with)) {
745
745
  let r = e?.[n];
746
746
  if (r === void 0) return null;
747
- let o = $n(n, r, i, a === !0 ? {} : a);
747
+ let o = er(n, r, i, a === !0 ? {} : a);
748
748
  if (o === null) return null;
749
749
  t.push(o);
750
750
  }
@@ -760,9 +760,9 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
760
760
  fkSide: s,
761
761
  branch: r,
762
762
  children: c,
763
- junction: er(t, r)
763
+ junction: tr(t, r)
764
764
  };
765
- }, er = (e, t) => {
765
+ }, tr = (e, t) => {
766
766
  if (e.kind !== "manyToMany" || t.junction === void 0) return;
767
767
  let n = e.through(), r = t.junction === !0 ? Object.keys(n.fields) : t.junction, i = r.filter((e) => e in n.fields);
768
768
  return {
@@ -774,35 +774,35 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
774
774
  return t !== void 0 && (t.type === "timestamp" || t.type === "date");
775
775
  })
776
776
  };
777
- }, tr = (e) => `__j_${e}`, nr = "__j", rr = (e, t) => {
777
+ }, nr = (e) => `__j_${e}`, rr = "__j", ir = (e, t) => {
778
778
  for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
779
- }, ir = (e, t) => {
779
+ }, ar = (e, t) => {
780
780
  let n = 0;
781
781
  return {
782
782
  sql: e,
783
783
  dialect: t,
784
784
  nextAlias: () => `__a${n++}`
785
785
  };
786
- }, ar = (e, t, n, r) => {
786
+ }, or = (e, t, n, r) => {
787
787
  switch (e) {
788
- case "postgres": return dr(t, n, r);
788
+ case "postgres": return fr(t, n, r);
789
789
  case "sqlite":
790
- case "turso": return yr(t, n, r);
790
+ case "turso": return br(t, n, r);
791
791
  case "mysql":
792
- case "mariadb": return kr(t, n, r);
793
- case "mssql": return Ir(t, n, r);
792
+ case "mariadb": return Ar(t, n, r);
793
+ case "mssql": return Lr(t, n, r);
794
794
  }
795
- }, or = (e, t) => t === "mssql" && !sr.test(e) ? /* @__PURE__ */ new Date(`${e}Z`) : new Date(e), sr = /(?:Z|[+-]\d{2}:?\d{2})$/, cr = (e, t) => {
796
- let n = lr(e.table, e.children, t);
795
+ }, sr = (e, t) => t === "mssql" && !cr.test(e) ? /* @__PURE__ */ new Date(`${e}Z`) : new Date(e), cr = /(?:Z|[+-]\d{2}:?\d{2})$/, lr = (e, t) => {
796
+ let n = ur(e.table, e.children, t);
797
797
  return (e) => e.map((e) => {
798
798
  let t = e.__row, r = typeof t == "string" ? JSON.parse(t) : t;
799
799
  return n(r);
800
800
  });
801
- }, lr = (e, t, n) => {
801
+ }, ur = (e, t, n) => {
802
802
  let r = [];
803
803
  for (let [t, n] of Object.entries(e.fields)) (n.type === "timestamp" || n.type === "date") && r.push(t);
804
804
  let i = t.map((e) => {
805
- let t = lr(e.target, e.children, n), r = e.relation.kind === "one", i = P(e), a = i ? _n({
805
+ let t = ur(e.target, e.children, n), r = e.relation.kind === "one", i = N(e), a = i ? vn({
806
806
  relationName: e.relationName,
807
807
  sourceTableName: e.source.tableName,
808
808
  targetTableName: e.target.tableName,
@@ -815,14 +815,14 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
815
815
  isSingle: r,
816
816
  fromOverFetch: i,
817
817
  cardinalityMessage: a,
818
- junction: ur(e.junction, n)
818
+ junction: dr(e.junction, n)
819
819
  };
820
820
  });
821
821
  return (e) => {
822
822
  let t = { ...e };
823
823
  for (let e of r) {
824
824
  let r = t[e];
825
- typeof r == "string" && (t[e] = or(r, n));
825
+ typeof r == "string" && (t[e] = sr(r, n));
826
826
  }
827
827
  for (let e of i) {
828
828
  let n = t[e.name];
@@ -832,7 +832,7 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
832
832
  }
833
833
  if (e.fromOverFetch) {
834
834
  let r = n;
835
- if (r.length > 1) throw new gn(e.cardinalityMessage);
835
+ if (r.length > 1) throw new _n(e.cardinalityMessage);
836
836
  t[e.name] = r.length === 0 ? null : e.decode(r[0]);
837
837
  continue;
838
838
  }
@@ -844,204 +844,204 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
844
844
  }
845
845
  return t;
846
846
  };
847
- }, ur = (e, t) => {
847
+ }, dr = (e, t) => {
848
848
  if (e === void 0) return;
849
849
  let n = new Set(e.dateColumns), r = e.requested;
850
850
  return (e) => {
851
851
  let i = e._junction ?? {}, a = {};
852
852
  for (let e of r) {
853
853
  let r = i[e];
854
- a[e] = n.has(e) && typeof r == "string" ? or(r, t) : r;
854
+ a[e] = n.has(e) && typeof r == "string" ? sr(r, t) : r;
855
855
  }
856
856
  return {
857
857
  ...e,
858
858
  _junction: a
859
859
  };
860
860
  };
861
- }, dr = (e, t, n) => {
862
- let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = fr(i, t.children, n);
863
- return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${B(e.predicate, i, r)}` : r``}${e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${L(i, e.column, r)} DESC` : r`${L(i, e.column, r)} ASC`))}` : r``}${e.take === void 0 ? r`` : r` LIMIT ${z(e.take, r)}`}${e.skip === void 0 ? r`` : r` OFFSET ${z(e.skip, r)}`}`;
864
- }, fr = (e, t, n, r) => {
865
- let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${R(nr, i)}::text)`;
861
+ }, fr = (e, t, n) => {
862
+ let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = pr(i, t.children, n);
863
+ return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${z(e.predicate, i, r)}` : r``}${e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${I(i, e.column, r)} DESC` : r`${I(i, e.column, r)} ASC`))}` : r``}${e.take === void 0 ? r`` : r` LIMIT ${R(e.take, r)}`}${e.skip === void 0 ? r`` : r` OFFSET ${R(e.skip, r)}`}`;
864
+ }, pr = (e, t, n, r) => {
865
+ let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${L(rr, i)}::text)`;
866
866
  if (t.length === 0 && r === void 0) return a;
867
867
  let o = [];
868
- r !== void 0 && o.push(i`${R("_junction", i)}, ${L(e, nr, i)}`);
868
+ r !== void 0 && o.push(i`${L("_junction", i)}, ${I(e, rr, i)}`);
869
869
  for (let r of t) {
870
- let t = pr(r, e, n);
870
+ let t = mr(r, e, n);
871
871
  if (t === null) return null;
872
- o.push(i`${R(r.relationName, i)}, ${t}`);
872
+ o.push(i`${L(r.relationName, i)}, ${t}`);
873
873
  }
874
874
  return i`${a} || jsonb_build_object(${i.csv(o)})`;
875
- }, pr = (e, t, n) => {
875
+ }, mr = (e, t, n) => {
876
876
  switch (e.relation.kind) {
877
- case "one": return P(e) ? hr(Zn(e), t, n) : mr(e, t, n);
878
- case "many": return hr(e, t, n);
879
- case "manyToMany": return gr(e, t, n);
877
+ case "one": return N(e) ? gr(Qn(e), t, n) : hr(e, t, n);
878
+ case "many": return gr(e, t, n);
879
+ case "manyToMany": return _r(e, t, n);
880
880
  }
881
- }, mr = (e, t, n) => {
882
- let r = n.sql, i = n.nextAlias(), a = fr(i, e.children, n);
881
+ }, hr = (e, t, n) => {
882
+ let r = n.sql, i = n.nextAlias(), a = pr(i, e.children, n);
883
883
  if (a === null) return null;
884
- let o = e.fkSide === "source" ? r`${L(i, "id", r)} = ${L(t, e.foreignKey, r)}` : r`${L(i, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${B(e.branch.where, i, r)}`, c = F(i, e.branch.orderBy, r);
884
+ let o = e.fkSide === "source" ? r`${I(i, "id", r)} = ${I(t, e.foreignKey, r)}` : r`${I(i, e.foreignKey, r)} = ${I(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${z(e.branch.where, i, r)}`, c = P(i, e.branch.orderBy, r);
885
885
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}${c} LIMIT 1)`;
886
- }, hr = (e, t, n) => {
887
- let r = n.sql, i = n.nextAlias(), a = fr(i, e.children, n);
886
+ }, gr = (e, t, n) => {
887
+ let r = n.sql, i = n.nextAlias(), a = pr(i, e.children, n);
888
888
  if (a === null) return null;
889
- let o = r`${L(void 0, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${M(e.branch.where, r)}`, c = vr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${z(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${z(e.branch.offset, r)}`;
889
+ let o = r`${I(void 0, e.foreignKey, r)} = ${I(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${j(e.branch.where, r)}`, c = yr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${R(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${R(e.branch.offset, r)}`;
890
890
  return r`COALESCE((SELECT jsonb_agg(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), '[]'::jsonb)`;
891
- }, gr = (e, t, n) => {
892
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = fr(o, e.children, n, e.junction);
891
+ }, _r = (e, t, n) => {
892
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = pr(o, e.children, n, e.junction);
893
893
  if (c === null) return null;
894
- let l = e.branch.where === void 0 ? r`` : r` AND ${M(e.branch.where, r)}`, u = V(e, s, r), d = F(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${z(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${z(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : r`, ${_r(e.junction, s, r)} AS ${r(nr)}`;
895
- return r`COALESCE((SELECT jsonb_agg(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${L(o, "id", r)} = ${L(s, i.targetKey, r)} WHERE ${L(s, i.sourceKey, r)} = ${L(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), '[]'::jsonb)`;
896
- }, _r = (e, t, n) => e.present.length === 0 ? n`jsonb_build_object()` : n`jsonb_build_object(${n.csv(e.present.map((e) => n`${R(e, n)}, ${L(t, e, n)}`))})`, F = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${L(e, t.column, n)} DESC` : n`${L(e, t.column, n)} ASC`))}`, vr = (e, t) => e === void 0 || e.length === 0 ? t`` : t` ORDER BY ${t.csv(e.map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`, yr = (e, t, n) => {
897
- let r = n.sql, i = n.nextAlias(), a = br(i, t.table, t.children, n);
894
+ let l = e.branch.where === void 0 ? r`` : r` AND ${j(e.branch.where, r)}`, u = B(e, s, r), d = P(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${R(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${R(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : r`, ${vr(e.junction, s, r)} AS ${r(rr)}`;
895
+ return r`COALESCE((SELECT jsonb_agg(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${I(o, "id", r)} = ${I(s, i.targetKey, r)} WHERE ${I(s, i.sourceKey, r)} = ${I(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), '[]'::jsonb)`;
896
+ }, vr = (e, t, n) => e.present.length === 0 ? n`jsonb_build_object()` : n`jsonb_build_object(${n.csv(e.present.map((e) => n`${L(e, n)}, ${I(t, e, n)}`))})`, P = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${I(e, t.column, n)} DESC` : n`${I(e, t.column, n)} ASC`))}`, yr = (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`))}`, br = (e, t, n) => {
897
+ let r = n.sql, i = n.nextAlias(), a = xr(i, t.table, t.children, n);
898
898
  if (a === null) return null;
899
- let o = e.predicate ? r` WHERE ${B(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${L(i, e.column, r)} DESC` : r`${L(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${z(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${z(e.skip, r)}`;
899
+ let o = e.predicate ? r` WHERE ${z(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${I(i, e.column, r)} DESC` : r`${I(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${R(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${R(e.skip, r)}`;
900
900
  return r`SELECT ${a} AS "__row" FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
901
- }, br = (e, t, n, r, i) => {
901
+ }, xr = (e, t, n, r, i) => {
902
902
  let a = r.sql, o = [];
903
- for (let n of Object.keys(t.fields)) o.push(a`${R(n, a)}, ${L(e, n, a)}`);
903
+ for (let n of Object.keys(t.fields)) o.push(a`${L(n, a)}, ${I(e, n, a)}`);
904
904
  if (i !== void 0) {
905
- let e = xr(i.projection, i.source, a);
906
- o.push(a`${R("_junction", a)}, json_object(${e})`);
905
+ let e = Sr(i.projection, i.source, a);
906
+ o.push(a`${L("_junction", a)}, json_object(${e})`);
907
907
  }
908
908
  for (let t of n) {
909
- let n = Tr(t, e, r);
909
+ let n = Er(t, e, r);
910
910
  if (n === null) return null;
911
- o.push(a`${R(t.relationName, a)}, ${n}`);
911
+ o.push(a`${L(t.relationName, a)}, ${n}`);
912
912
  }
913
913
  return a`json_object(${a.csv(o)})`;
914
- }, xr = (e, t, n) => e.present.length === 0 ? n`` : n.csv(e.present.map((e) => n`${R(e, n)}, ${L(t.alias, t.physical(e), n)}`)), Sr = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${L(t, e, n)} AS ${n(tr(e))}`))}`, Cr = (e) => ({
914
+ }, Sr = (e, t, n) => e.present.length === 0 ? n`` : n.csv(e.present.map((e) => n`${L(e, n)}, ${I(t.alias, t.physical(e), n)}`)), Cr = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${I(t, e, n)} AS ${n(nr(e))}`))}`, wr = (e) => ({
915
915
  alias: e,
916
- physical: tr
917
- }), wr = (e) => ({
916
+ physical: nr
917
+ }), Tr = (e) => ({
918
918
  alias: e,
919
919
  physical: (e) => e
920
- }), Tr = (e, t, n) => {
920
+ }), Er = (e, t, n) => {
921
921
  switch (e.relation.kind) {
922
- case "one": return P(e) ? Dr(Zn(e), t, n) : Er(e, t, n);
923
- case "many": return Dr(e, t, n);
924
- case "manyToMany": return Or(e, t, n);
922
+ case "one": return N(e) ? Or(Qn(e), t, n) : Dr(e, t, n);
923
+ case "many": return Or(e, t, n);
924
+ case "manyToMany": return kr(e, t, n);
925
925
  }
926
- }, Er = (e, t, n) => {
927
- let r = n.sql, i = n.nextAlias(), a = br(i, e.target, e.children, n);
926
+ }, Dr = (e, t, n) => {
927
+ let r = n.sql, i = n.nextAlias(), a = xr(i, e.target, e.children, n);
928
928
  if (a === null) return null;
929
- let o = e.fkSide === "source" ? r`${L(i, "id", r)} = ${L(t, e.foreignKey, r)}` : r`${L(i, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`;
929
+ let o = e.fkSide === "source" ? r`${I(i, "id", r)} = ${I(t, e.foreignKey, r)}` : r`${I(i, e.foreignKey, r)} = ${I(t, e.sourceKey, r)}`;
930
930
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
931
- }, Dr = (e, t, n) => {
932
- let r = n.sql, i = n.nextAlias(), a = br(i, e.target, e.children, n);
931
+ }, Or = (e, t, n) => {
932
+ let r = n.sql, i = n.nextAlias(), a = xr(i, e.target, e.children, n);
933
933
  if (a === null) return null;
934
- let o = r`${L(void 0, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${M(H(e.branch.where), r)}`, c = vr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${z(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${z(e.branch.offset, r)}`;
934
+ let o = r`${I(void 0, e.foreignKey, r)} = ${I(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${j(V(e.branch.where), r)}`, c = yr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${R(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${R(e.branch.offset, r)}`;
935
935
  return r`COALESCE((SELECT json_group_array(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), json('[]'))`;
936
- }, Or = (e, t, n) => {
937
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = br(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
936
+ }, kr = (e, t, n) => {
937
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = xr(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
938
938
  projection: e.junction,
939
- source: Cr(o)
939
+ source: wr(o)
940
940
  });
941
941
  if (c === null) return null;
942
- let l = e.branch.where === void 0 ? r`` : r` AND ${M(H(e.branch.where), r)}`, u = V(e, s, r, !0), d = F(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${z(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${z(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : Sr(e.junction, s, r);
943
- return r`COALESCE((SELECT json_group_array(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${L(o, "id", r)} = ${L(s, i.targetKey, r)} WHERE ${L(s, i.sourceKey, r)} = ${L(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), json('[]'))`;
944
- }, kr = (e, t, n) => {
945
- let r = n.sql, i = n.nextAlias(), a = I(i, t.table, t.children, n);
942
+ let l = e.branch.where === void 0 ? r`` : r` AND ${j(V(e.branch.where), r)}`, u = B(e, s, r, !0), d = P(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${R(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${R(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : Cr(e.junction, s, r);
943
+ return r`COALESCE((SELECT json_group_array(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${I(o, "id", r)} = ${I(s, i.targetKey, r)} WHERE ${I(s, i.sourceKey, r)} = ${I(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), json('[]'))`;
944
+ }, Ar = (e, t, n) => {
945
+ let r = n.sql, i = n.nextAlias(), a = F(i, t.table, t.children, n);
946
946
  if (a === null) return null;
947
- let o = e.predicate ? r` WHERE ${B(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${L(i, e.column, r)} DESC` : r`${L(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${z(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${z(e.skip, r)}`;
947
+ let o = e.predicate ? r` WHERE ${z(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${I(i, e.column, r)} DESC` : r`${I(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${R(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${R(e.skip, r)}`;
948
948
  return r`SELECT ${a} AS \`__row\` FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
949
- }, I = (e, t, n, r, i) => {
949
+ }, F = (e, t, n, r, i) => {
950
950
  let a = r.sql, o = [];
951
- for (let n of Object.keys(t.fields)) o.push(a`${R(n, a)}, ${L(e, n, a)}`);
951
+ for (let n of Object.keys(t.fields)) o.push(a`${L(n, a)}, ${I(e, n, a)}`);
952
952
  if (i !== void 0) {
953
- let e = xr(i.projection, i.source, a);
954
- o.push(a`${R("_junction", a)}, JSON_OBJECT(${e})`);
953
+ let e = Sr(i.projection, i.source, a);
954
+ o.push(a`${L("_junction", a)}, JSON_OBJECT(${e})`);
955
955
  }
956
956
  for (let t of n) {
957
- let n = Ar(t, e, r);
957
+ let n = jr(t, e, r);
958
958
  if (n === null) return null;
959
- o.push(a`${R(t.relationName, a)}, ${n}`);
959
+ o.push(a`${L(t.relationName, a)}, ${n}`);
960
960
  }
961
961
  return a`JSON_OBJECT(${a.csv(o)})`;
962
- }, Ar = (e, t, n) => {
962
+ }, jr = (e, t, n) => {
963
963
  switch (e.relation.kind) {
964
964
  case "one":
965
- if (P(e)) {
966
- let r = Zn(e);
967
- return n.dialect === "mariadb" ? Pr(r, t, n) : Mr(r, t, n);
965
+ if (N(e)) {
966
+ let r = Qn(e);
967
+ return n.dialect === "mariadb" ? Fr(r, t, n) : Nr(r, t, n);
968
968
  }
969
- return jr(e, t, n);
970
- case "many": return n.dialect === "mariadb" ? Pr(e, t, n) : Mr(e, t, n);
971
- case "manyToMany": return n.dialect === "mariadb" ? Fr(e, t, n) : Nr(e, t, n);
969
+ return Mr(e, t, n);
970
+ case "many": return n.dialect === "mariadb" ? Fr(e, t, n) : Nr(e, t, n);
971
+ case "manyToMany": return n.dialect === "mariadb" ? Ir(e, t, n) : Pr(e, t, n);
972
972
  }
973
- }, jr = (e, t, n) => {
974
- let r = n.sql, i = n.nextAlias(), a = I(i, e.target, e.children, n);
973
+ }, Mr = (e, t, n) => {
974
+ let r = n.sql, i = n.nextAlias(), a = F(i, e.target, e.children, n);
975
975
  if (a === null) return null;
976
- let o = e.fkSide === "source" ? r`${L(i, "id", r)} = ${L(t, e.foreignKey, r)}` : r`${L(i, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`;
976
+ let o = e.fkSide === "source" ? r`${I(i, "id", r)} = ${I(t, e.foreignKey, r)}` : r`${I(i, e.foreignKey, r)} = ${I(t, e.sourceKey, r)}`;
977
977
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
978
- }, Mr = (e, t, n) => {
979
- let r = n.sql, i = n.nextAlias(), a = I(i, e.target, e.children, n);
978
+ }, Nr = (e, t, n) => {
979
+ let r = n.sql, i = n.nextAlias(), a = F(i, e.target, e.children, n);
980
980
  if (a === null) return null;
981
- let o = r`${L(void 0, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${M(H(e.branch.where), r)}`, c = vr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${z(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${z(e.branch.offset, r)}`;
981
+ let o = r`${I(void 0, e.foreignKey, r)} = ${I(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${j(V(e.branch.where), r)}`, c = yr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${R(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${R(e.branch.offset, r)}`;
982
982
  return r`COALESCE((SELECT JSON_ARRAYAGG(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), JSON_ARRAY())`;
983
- }, Nr = (e, t, n) => {
984
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = I(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
983
+ }, Pr = (e, t, n) => {
984
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = F(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
985
985
  projection: e.junction,
986
- source: Cr(o)
986
+ source: wr(o)
987
987
  });
988
988
  if (c === null) return null;
989
- let l = e.branch.where === void 0 ? r`` : r` AND ${M(H(e.branch.where), r)}`, u = V(e, s, r, !0), d = F(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${z(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${z(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : Sr(e.junction, s, r);
990
- return r`COALESCE((SELECT JSON_ARRAYAGG(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${L(o, "id", r)} = ${L(s, i.targetKey, r)} WHERE ${L(s, i.sourceKey, r)} = ${L(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), JSON_ARRAY())`;
991
- }, Pr = (e, t, n) => {
992
- let r = n.sql, i = n.nextAlias(), a = I(i, e.target, e.children, n);
993
- if (a === null) return null;
994
- let o = r`${L(i, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${M(H(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
995
- if (!(e.branch.limit !== void 0 || e.branch.offset !== void 0)) return r`COALESCE((SELECT JSON_ARRAYAGG(${a}${c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${L(i, e.column, r)} DESC` : r`${L(i, e.column, r)} ASC`))}` : r``}) FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}), JSON_ARRAY())`;
996
- let l = c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${r(e.column)} DESC` : r`${r(e.column)} ASC`))}` : r` ORDER BY ${r("id")}`, u = e.branch.limit, d = e.branch.offset, f = u !== void 0 && d !== void 0 ? r` AND ${L(i, "rn", r)} > ${z(d, r)} AND ${L(i, "rn", r)} <= ${z(d + u, r)}` : u === void 0 ? r` AND ${L(i, "rn", r)} > ${z(d, r)}` : r` AND ${L(i, "rn", r)} <= ${z(u, r)}`;
997
- return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${L(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())`;
989
+ let l = e.branch.where === void 0 ? r`` : r` AND ${j(V(e.branch.where), r)}`, u = B(e, s, r, !0), d = P(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${R(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${R(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : Cr(e.junction, s, r);
990
+ return r`COALESCE((SELECT JSON_ARRAYAGG(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${I(o, "id", r)} = ${I(s, i.targetKey, r)} WHERE ${I(s, i.sourceKey, r)} = ${I(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), JSON_ARRAY())`;
998
991
  }, Fr = (e, t, n) => {
992
+ let r = n.sql, i = n.nextAlias(), a = F(i, e.target, e.children, n);
993
+ if (a === null) return null;
994
+ let o = r`${I(i, e.foreignKey, r)} = ${I(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${j(V(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
995
+ if (!(e.branch.limit !== void 0 || e.branch.offset !== void 0)) return r`COALESCE((SELECT JSON_ARRAYAGG(${a}${c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${I(i, e.column, r)} DESC` : r`${I(i, e.column, r)} ASC`))}` : r``}) FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}), JSON_ARRAY())`;
996
+ let l = c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${r(e.column)} DESC` : r`${r(e.column)} ASC`))}` : r` ORDER BY ${r("id")}`, u = e.branch.limit, d = e.branch.offset, f = u !== void 0 && d !== void 0 ? r` AND ${I(i, "rn", r)} > ${R(d, r)} AND ${I(i, "rn", r)} <= ${R(d + u, r)}` : u === void 0 ? r` AND ${I(i, "rn", r)} > ${R(d, r)}` : r` AND ${I(i, "rn", r)} <= ${R(u, r)}`;
997
+ return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${I(i, "rn", r)}) FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY ${r(e.foreignKey)}${l}) AS rn FROM ${r(e.target.tableName)}) AS ${r(i)} WHERE ${o}${s}${f}), JSON_ARRAY())`;
998
+ }, Ir = (e, t, n) => {
999
999
  let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = (t) => e.junction === void 0 ? void 0 : {
1000
1000
  projection: e.junction,
1001
1001
  source: t
1002
- }, l = r`${L(s, i.sourceKey, r)} = ${L(t, "id", r)}`, u = r`${L(o, "id", r)} = ${L(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${M(H(e.branch.where), r)}`, f = V(e, s, r, !0), p = e.branch.orderBy ?? [];
1002
+ }, l = r`${I(s, i.sourceKey, r)} = ${I(t, "id", r)}`, u = r`${I(o, "id", r)} = ${I(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${j(V(e.branch.where), r)}`, f = B(e, s, r, !0), p = e.branch.orderBy ?? [];
1003
1003
  if (!(e.branch.limit !== void 0 || e.branch.offset !== void 0)) {
1004
- let t = I(o, e.target, e.children, n, c(wr(s)));
1005
- return t === null ? null : r`COALESCE((SELECT JSON_ARRAYAGG(${t}${p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${L(o, e.column, r)} DESC` : r`${L(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())`;
1004
+ let t = F(o, e.target, e.children, n, c(Tr(s)));
1005
+ return t === null ? null : r`COALESCE((SELECT JSON_ARRAYAGG(${t}${p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${I(o, e.column, r)} DESC` : r`${I(o, e.column, r)} ASC`))}` : r``}) FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u} WHERE ${l}${f}${d}), JSON_ARRAY())`;
1006
1006
  }
1007
- let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${L(o, e.column, r)} DESC` : r`${L(o, e.column, r)} ASC`))}` : r` ORDER BY ${L(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, _ = h !== void 0 && g !== void 0 ? r` AND ${L(o, "rn", r)} > ${z(g, r)} AND ${L(o, "rn", r)} <= ${z(g + h, r)}` : h === void 0 ? r` AND ${L(o, "rn", r)} > ${z(g, r)}` : r` AND ${L(o, "rn", r)} <= ${z(h, r)}`, ee = e.branch.onJunction === void 0 ? r`` : r` WHERE ${B(H(e.branch.onJunction), s, r)}`, v = I(o, e.target, e.children, n, c(Cr(o)));
1007
+ let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${I(o, e.column, r)} DESC` : r`${I(o, e.column, r)} ASC`))}` : r` ORDER BY ${I(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, _ = h !== void 0 && g !== void 0 ? r` AND ${I(o, "rn", r)} > ${R(g, r)} AND ${I(o, "rn", r)} <= ${R(g + h, r)}` : h === void 0 ? r` AND ${I(o, "rn", r)} > ${R(g, r)}` : r` AND ${I(o, "rn", r)} <= ${R(h, r)}`, ee = e.branch.onJunction === void 0 ? r`` : r` WHERE ${z(V(e.branch.onJunction), s, r)}`, v = F(o, e.target, e.children, n, c(wr(o)));
1008
1008
  if (v === null) return null;
1009
- let te = e.junction === void 0 ? r`` : Sr(e.junction, s, r);
1010
- return r`COALESCE((SELECT JSON_ARRAYAGG(${v} ORDER BY ${L(o, "rn", r)}) FROM (SELECT ${r(o)}.*${te}, ${L(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${L(s, i.sourceKey, r)}${m}) AS rn FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u}${ee}) AS ${r(o)} WHERE ${L(o, `__src_${i.sourceKey}`, r)} = ${L(t, "id", r)}${d}${_}), JSON_ARRAY())`;
1011
- }, Ir = (e, t, n) => {
1012
- let r = n.sql, i = n.nextAlias(), a = Lr(i, t.table, t.children, n);
1009
+ let te = e.junction === void 0 ? r`` : Cr(e.junction, s, r);
1010
+ return r`COALESCE((SELECT JSON_ARRAYAGG(${v} ORDER BY ${I(o, "rn", r)}) FROM (SELECT ${r(o)}.*${te}, ${I(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${I(s, i.sourceKey, r)}${m}) AS rn FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u}${ee}) AS ${r(o)} WHERE ${I(o, `__src_${i.sourceKey}`, r)} = ${I(t, "id", r)}${d}${_}), JSON_ARRAY())`;
1011
+ }, Lr = (e, t, n) => {
1012
+ let r = n.sql, i = n.nextAlias(), a = Rr(i, t.table, t.children, n);
1013
1013
  if (a === null) return null;
1014
- let o = e.predicate ? r` WHERE ${B(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${L(i, e.column, r)} DESC` : r`${L(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
1014
+ let o = e.predicate ? r` WHERE ${z(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${I(i, e.column, r)} DESC` : r`${I(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
1015
1015
  if (e.skip !== void 0) {
1016
1016
  let t = e.order.length > 0 ? s : r` ORDER BY (SELECT NULL)`;
1017
- l = e.take === void 0 ? r`${t} OFFSET ${z(e.skip, r)} ROWS` : r`${t} OFFSET ${z(e.skip, r)} ROWS FETCH NEXT ${z(e.take, r)} ROWS ONLY`;
1018
- } else e.take !== void 0 && (c = r`TOP ${z(e.take, r)} `);
1017
+ l = e.take === void 0 ? r`${t} OFFSET ${R(e.skip, r)} ROWS` : r`${t} OFFSET ${R(e.skip, r)} ROWS FETCH NEXT ${R(e.take, r)} ROWS ONLY`;
1018
+ } else e.take !== void 0 && (c = r`TOP ${R(e.take, r)} `);
1019
1019
  let u = e.skip === void 0 ? s : r``;
1020
1020
  return r`SELECT ${c}(SELECT ${a} FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER) AS ${r("__row")} FROM ${r(t.table.tableName)} AS ${r(i)}${o}${u}${l}`;
1021
- }, Lr = (e, t, n, r, i) => {
1021
+ }, Rr = (e, t, n, r, i) => {
1022
1022
  let a = r.sql, o = [];
1023
- for (let n of Object.keys(t.fields)) o.push(a`${L(e, n, a)} AS ${a(n)}`);
1024
- if (i !== void 0) for (let e of i.projection.present) o.push(a`${L(i.source.alias, i.source.physical(e), a)} AS ${Rr(`_junction.${e}`, a)}`);
1023
+ for (let n of Object.keys(t.fields)) o.push(a`${I(e, n, a)} AS ${a(n)}`);
1024
+ if (i !== void 0) for (let e of i.projection.present) o.push(a`${I(i.source.alias, i.source.physical(e), a)} AS ${zr(`_junction.${e}`, a)}`);
1025
1025
  for (let t of n) {
1026
- let n = zr(t, e, r);
1026
+ let n = Br(t, e, r);
1027
1027
  if (n === null) return null;
1028
1028
  o.push(n);
1029
1029
  }
1030
1030
  return a.csv(o);
1031
- }, Rr = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), zr = (e, t, n) => {
1031
+ }, zr = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), Br = (e, t, n) => {
1032
1032
  switch (e.relation.kind) {
1033
- case "one": return P(e) ? Hr(Zn(e), t, n) : Br(e, t, n);
1034
- case "many": return Hr(e, t, n);
1035
- case "manyToMany": return Ur(e, t, n);
1033
+ case "one": return N(e) ? Ur(Qn(e), t, n) : Vr(e, t, n);
1034
+ case "many": return Ur(e, t, n);
1035
+ case "manyToMany": return Wr(e, t, n);
1036
1036
  }
1037
- }, Br = (e, t, n) => {
1038
- let r = n.sql, i = n.nextAlias(), a = Lr(i, e.target, e.children, n);
1037
+ }, Vr = (e, t, n) => {
1038
+ let r = n.sql, i = n.nextAlias(), a = Rr(i, e.target, e.children, n);
1039
1039
  if (a === null) return null;
1040
- let o = e.fkSide === "source" ? r`${L(i, "id", r)} = ${L(t, e.foreignKey, r)}` : r`${L(i, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`;
1040
+ let o = e.fkSide === "source" ? r`${I(i, "id", r)} = ${I(t, e.foreignKey, r)}` : r`${I(i, e.foreignKey, r)} = ${I(t, e.sourceKey, r)}`;
1041
1041
  return r`JSON_QUERY((SELECT TOP 1 ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER)) AS ${r(e.relationName)}`;
1042
- }, Vr = (e, t, n) => {
1042
+ }, Hr = (e, t, n) => {
1043
1043
  if (e.offset !== void 0) {
1044
- let r = e.orderBy && e.orderBy.length > 0 ? t : n` ORDER BY (SELECT NULL)`, i = e.limit === void 0 ? n`${r} OFFSET ${z(e.offset, n)} ROWS` : n`${r} OFFSET ${z(e.offset, n)} ROWS FETCH NEXT ${z(e.limit, n)} ROWS ONLY`;
1044
+ let r = e.orderBy && e.orderBy.length > 0 ? t : n` ORDER BY (SELECT NULL)`, i = e.limit === void 0 ? n`${r} OFFSET ${R(e.offset, n)} ROWS` : n`${r} OFFSET ${R(e.offset, n)} ROWS FETCH NEXT ${R(e.limit, n)} ROWS ONLY`;
1045
1045
  return {
1046
1046
  top: n``,
1047
1047
  pagination: i,
@@ -1049,33 +1049,33 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1049
1049
  };
1050
1050
  }
1051
1051
  return {
1052
- top: e.limit === void 0 ? n`` : n`TOP ${z(e.limit, n)} `,
1052
+ top: e.limit === void 0 ? n`` : n`TOP ${R(e.limit, n)} `,
1053
1053
  pagination: n``,
1054
1054
  finalOrder: t
1055
1055
  };
1056
- }, Hr = (e, t, n) => {
1057
- let r = n.sql, i = n.nextAlias(), a = Lr(i, e.target, e.children, n);
1058
- if (a === null) return null;
1059
- let o = e.branch.where === void 0 ? r`` : r` AND ${B(e.branch.where, i, r)}`, s = F(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } = Vr(e.branch, s, r);
1060
- return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${L(i, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
1061
1056
  }, Ur = (e, t, n) => {
1062
- 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 : {
1057
+ let r = n.sql, i = n.nextAlias(), a = Rr(i, e.target, e.children, n);
1058
+ if (a === null) return null;
1059
+ let o = e.branch.where === void 0 ? r`` : r` AND ${z(e.branch.where, i, r)}`, s = P(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } = Hr(e.branch, s, r);
1060
+ return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${I(i, e.foreignKey, r)} = ${I(t, e.sourceKey, r)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
1061
+ }, Wr = (e, t, n) => {
1062
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Rr(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1063
1063
  projection: e.junction,
1064
- source: wr(s)
1064
+ source: Tr(s)
1065
1065
  });
1066
1066
  if (c === null) return null;
1067
- let l = e.branch.where === void 0 ? r`` : r` AND ${B(e.branch.where, o, r)}`, u = V(e, s, r), d = F(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } = Vr(e.branch, d, r);
1068
- return r`ISNULL(JSON_QUERY((SELECT ${f}${c} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${L(o, "id", r)} = ${L(s, i.targetKey, r)} WHERE ${L(s, i.sourceKey, r)} = ${L(t, "id", r)}${u}${l}${m}${p} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
1069
- }, L = (e, t, n) => e === void 0 ? n`${n(t)}` : n`${n(e)}.${n(t)}`, R = (e, t) => t.unsafe(`'${e.replace(/'/g, "''")}'`), z = (e, t) => {
1067
+ let l = e.branch.where === void 0 ? r`` : r` AND ${z(e.branch.where, o, r)}`, u = B(e, s, r), d = P(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } = Hr(e.branch, d, r);
1068
+ return r`ISNULL(JSON_QUERY((SELECT ${f}${c} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${I(o, "id", r)} = ${I(s, i.targetKey, r)} WHERE ${I(s, i.sourceKey, r)} = ${I(t, "id", r)}${u}${l}${m}${p} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
1069
+ }, I = (e, t, n) => e === void 0 ? n`${n(t)}` : n`${n(e)}.${n(t)}`, L = (e, t) => t.unsafe(`'${e.replace(/'/g, "''")}'`), R = (e, t) => {
1070
1070
  if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`literalInt: expected non-negative integer, got ${e}`);
1071
1071
  return t.unsafe(String(e));
1072
- }, B = (e, t, n) => M(Wr(e, t), n), V = (e, t, n, r = !1) => {
1072
+ }, z = (e, t, n) => j(Gr(e, t), n), B = (e, t, n, r = !1) => {
1073
1073
  let i = e.branch.onJunction;
1074
- return i === void 0 ? n`` : n` AND ${B(r ? H(i) : i, t, n)}`;
1075
- }, Wr = (e, t) => {
1076
- if ("not" in e) return { not: Wr(e.not, t) };
1077
- if ("and" in e) return { and: e.and.map((e) => Wr(e, t)) };
1078
- if ("or" in e) return { or: e.or.map((e) => Wr(e, t)) };
1074
+ return i === void 0 ? n`` : n` AND ${z(r ? V(i) : i, t, n)}`;
1075
+ }, Gr = (e, t) => {
1076
+ if ("not" in e) return { not: Gr(e.not, t) };
1077
+ if ("and" in e) return { and: e.and.map((e) => Gr(e, t)) };
1078
+ if ("or" in e) return { or: e.or.map((e) => Gr(e, t)) };
1079
1079
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
1080
1080
  let n = e;
1081
1081
  return {
@@ -1089,23 +1089,23 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1089
1089
  ...n,
1090
1090
  column: `${t}.${n.column}`
1091
1091
  };
1092
- }, H = (e) => {
1093
- if ("not" in e) return { not: H(e.not) };
1094
- if ("and" in e) return { and: e.and.map((e) => H(e)) };
1095
- if ("or" in e) return { or: e.or.map((e) => H(e)) };
1092
+ }, V = (e) => {
1093
+ if ("not" in e) return { not: V(e.not) };
1094
+ if ("and" in e) return { and: e.and.map((e) => V(e)) };
1095
+ if ("or" in e) return { or: e.or.map((e) => V(e)) };
1096
1096
  if (e.op === "subquery-in" || e.op === "subquery-not-in" || e.op === "exists" || e.op === "not-exists") return e;
1097
1097
  let t = e;
1098
1098
  return {
1099
1099
  ...t,
1100
- value: Gr(t.value)
1100
+ value: Kr(t.value)
1101
1101
  };
1102
- }, Gr = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => Gr(e)) : e, Kr = Symbol.for("@voltro/database/coreTablesRegistry"), qr = globalThis, Jr = qr[Kr] ?? (qr[Kr] = {}), Yr = (e) => {
1103
- e.actors !== void 0 && (Jr.actors = e.actors), e.tenants !== void 0 && (Jr.tenants = e.tenants);
1104
- }, Xr = (e, t) => () => {
1102
+ }, Kr = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => Kr(e)) : e, qr = Symbol.for("@voltro/database/coreTablesRegistry"), Jr = globalThis, Yr = Jr[qr] ?? (Jr[qr] = {}), Xr = (e) => {
1103
+ e.actors !== void 0 && (Yr.actors = e.actors), e.tenants !== void 0 && (Yr.tenants = e.tenants);
1104
+ }, Zr = (e, t) => () => {
1105
1105
  let n = e();
1106
1106
  if (n === void 0) throw Error(`core '${t}' table not registered; expected the framework CLI or your migrate step to call registerCoreTables({ ${t}: () => ${t}Table }) before the database handle is constructed`);
1107
1107
  return n();
1108
- }, Zr = () => Xr(() => Jr.actors, "actors"), Qr = () => Xr(() => Jr.tenants, "tenants"), $r = _("actors", {
1108
+ }, Qr = () => Zr(() => Yr.actors, "actors"), $r = () => Zr(() => Yr.tenants, "tenants"), ei = _("actors", {
1109
1109
  id: l(),
1110
1110
  kind: h().oneOf([
1111
1111
  "user",
@@ -1115,73 +1115,73 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1115
1115
  ]),
1116
1116
  displayName: h().nullable(),
1117
1117
  createdAt: v().default("now")
1118
- }), ei = (e, t) => ({
1118
+ }), ti = (e, t) => ({
1119
1119
  column: e,
1120
1120
  op: "eq",
1121
1121
  value: t
1122
- }), ti = (e, t) => ({
1122
+ }), ni = (e, t) => ({
1123
1123
  column: e,
1124
1124
  op: "neq",
1125
1125
  value: t
1126
- }), ni = (e, t) => ({
1126
+ }), ri = (e, t) => ({
1127
1127
  column: e,
1128
1128
  op: "gt",
1129
1129
  value: t
1130
- }), ri = (e, t) => ({
1130
+ }), ii = (e, t) => ({
1131
1131
  column: e,
1132
1132
  op: "gte",
1133
1133
  value: t
1134
- }), ii = (e, t) => ({
1134
+ }), ai = (e, t) => ({
1135
1135
  column: e,
1136
1136
  op: "lt",
1137
1137
  value: t
1138
- }), ai = (e, t) => ({
1138
+ }), oi = (e, t) => ({
1139
1139
  column: e,
1140
1140
  op: "lte",
1141
1141
  value: t
1142
- }), oi = (e, t) => ({
1142
+ }), si = (e, t) => ({
1143
1143
  column: e,
1144
1144
  op: "in",
1145
1145
  value: t
1146
- }), si = (e, t) => ({
1146
+ }), ci = (e, t) => ({
1147
1147
  column: e,
1148
1148
  op: "notIn",
1149
1149
  value: t
1150
- }), ci = (e, t) => ({
1150
+ }), li = (e, t) => ({
1151
1151
  column: e,
1152
1152
  op: "contains",
1153
1153
  value: t
1154
- }), li = (e, t) => ({
1154
+ }), ui = (e, t) => ({
1155
1155
  column: e,
1156
1156
  op: "startsWith",
1157
1157
  value: t
1158
- }), ui = (e, t) => ({
1158
+ }), di = (e, t) => ({
1159
1159
  column: e,
1160
1160
  op: "arrayContains",
1161
1161
  value: t
1162
- }), di = (e, t) => ({
1162
+ }), fi = (e, t) => ({
1163
1163
  column: e,
1164
1164
  op: "arrayOverlaps",
1165
1165
  value: t
1166
- }), fi = (e, t) => ({
1166
+ }), pi = (e, t) => ({
1167
1167
  column: e,
1168
1168
  op: "arrayHas",
1169
1169
  value: t
1170
- }), pi = {
1170
+ }), mi = {
1171
1171
  column: "id",
1172
1172
  op: "in",
1173
1173
  value: []
1174
- }, mi = (e) => ({
1174
+ }, hi = (e) => ({
1175
1175
  column: e,
1176
1176
  op: "isNull"
1177
- }), hi = (e) => ({
1177
+ }), gi = (e) => ({
1178
1178
  column: e,
1179
1179
  op: "isNotNull"
1180
- }), gi = (e, t) => ({
1180
+ }), _i = (e, t) => ({
1181
1181
  column: e,
1182
1182
  op: "spatial",
1183
1183
  value: t
1184
- }), _i = (...e) => ({ and: e }), vi = (...e) => ({ or: e }), yi = (e) => ({ not: e }), bi = (e, ...t) => {
1184
+ }), vi = (...e) => ({ and: e }), yi = (...e) => ({ or: e }), bi = (e) => ({ not: e }), xi = (e, ...t) => {
1185
1185
  if (t.length === 0) throw Error(`jsonField("${e}"): at least one path segment is required`);
1186
1186
  let n = (n, r) => ({
1187
1187
  column: e,
@@ -1203,29 +1203,29 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1203
1203
  isNull: () => n("isNull"),
1204
1204
  isNotNull: () => n("isNotNull")
1205
1205
  };
1206
- }, xi = (e) => "descriptor" in e ? e.descriptor : e, Si = (e, t) => ({
1206
+ }, Si = (e) => "descriptor" in e ? e.descriptor : e, Ci = (e, t) => ({
1207
1207
  column: e,
1208
1208
  op: "subquery-in",
1209
- subquery: xi(t)
1210
- }), Ci = (e, t) => ({
1209
+ subquery: Si(t)
1210
+ }), wi = (e, t) => ({
1211
1211
  column: e,
1212
1212
  op: "subquery-not-in",
1213
- subquery: xi(t)
1214
- }), wi = (e) => ({
1215
- op: "exists",
1216
- subquery: xi(e)
1213
+ subquery: Si(t)
1217
1214
  }), Ti = (e) => ({
1215
+ op: "exists",
1216
+ subquery: Si(e)
1217
+ }), Ei = (e) => ({
1218
1218
  op: "not-exists",
1219
- subquery: xi(e)
1220
- }), Ei = (e, t) => e == null || t == null ? null : typeof e == typeof t ? e === t ? 0 : e > t ? 1 : -1 : null, Di = (e, t, n = null) => {
1219
+ subquery: Si(e)
1220
+ }), Di = (e, t) => e == null || t == null ? null : typeof e == typeof t ? e === t ? 0 : e > t ? 1 : -1 : null, Oi = (e, t, n = null) => {
1221
1221
  if (!t) return !1;
1222
- if ("not" in e) return !Di(e.not, t, n);
1222
+ if ("not" in e) return !Oi(e.not, t, n);
1223
1223
  if ("and" in e) {
1224
- for (let r of e.and) if (!Di(r, t, n)) return !1;
1224
+ for (let r of e.and) if (!Oi(r, t, n)) return !1;
1225
1225
  return !0;
1226
1226
  }
1227
1227
  if ("or" in e) {
1228
- for (let r of e.or) if (Di(r, t, n)) return !0;
1228
+ for (let r of e.or) if (Oi(r, t, n)) return !0;
1229
1229
  return !1;
1230
1230
  }
1231
1231
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
@@ -1244,10 +1244,10 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1244
1244
  switch (r.op) {
1245
1245
  case "eq": return i === r.value;
1246
1246
  case "neq": return i !== r.value;
1247
- case "gt": return (Ei(i, r.value) ?? -1) > 0;
1248
- case "gte": return (Ei(i, r.value) ?? -1) >= 0;
1249
- case "lt": return (Ei(i, r.value) ?? 1) < 0;
1250
- case "lte": return (Ei(i, r.value) ?? 1) <= 0;
1247
+ case "gt": return (Di(i, r.value) ?? -1) > 0;
1248
+ case "gte": return (Di(i, r.value) ?? -1) >= 0;
1249
+ case "lt": return (Di(i, r.value) ?? 1) < 0;
1250
+ case "lte": return (Di(i, r.value) ?? 1) <= 0;
1251
1251
  case "in": return Array.isArray(r.value) && r.value.includes(i);
1252
1252
  case "notIn": return Array.isArray(r.value) && !r.value.includes(i);
1253
1253
  case "contains": return typeof i == "string" && typeof r.value == "string" && i.toLowerCase().includes(r.value.toLowerCase());
@@ -1265,17 +1265,17 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1265
1265
  case "isNotNull": return i != null;
1266
1266
  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.");
1267
1267
  }
1268
- }, Oi = function* (e) {
1268
+ }, ki = function* (e) {
1269
1269
  if ("not" in e) {
1270
- yield* Oi(e.not);
1270
+ yield* ki(e.not);
1271
1271
  return;
1272
1272
  }
1273
1273
  if ("and" in e) {
1274
- for (let t of e.and) yield* Oi(t);
1274
+ for (let t of e.and) yield* ki(t);
1275
1275
  return;
1276
1276
  }
1277
1277
  if ("or" in e) {
1278
- for (let t of e.or) yield* Oi(t);
1278
+ for (let t of e.or) yield* ki(t);
1279
1279
  return;
1280
1280
  }
1281
1281
  e.op === "subquery-in" || e.op === "subquery-not-in" ? yield {
@@ -1285,83 +1285,116 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1285
1285
  kind: "exists",
1286
1286
  descriptor: e.subquery
1287
1287
  });
1288
- }, ki = function* (e, t = !0) {
1288
+ }, Ai = function* (e, t = !0) {
1289
1289
  if ("not" in e) {
1290
- yield* ki(e.not, !1);
1290
+ yield* Ai(e.not, !1);
1291
1291
  return;
1292
1292
  }
1293
1293
  if ("and" in e) {
1294
- for (let n of e.and) yield* ki(n, t);
1294
+ for (let n of e.and) yield* Ai(n, t);
1295
1295
  return;
1296
1296
  }
1297
1297
  if ("or" in e) {
1298
- for (let t of e.or) yield* ki(t, !1);
1298
+ for (let t of e.or) yield* Ai(t, !1);
1299
1299
  return;
1300
1300
  }
1301
1301
  e.op === "subquery-in" || e.op === "subquery-not-in" || e.op === "exists" || e.op === "not-exists" || (yield {
1302
1302
  ...e,
1303
1303
  conjunctive: t
1304
1304
  });
1305
- }, U = new bt(), Ai = (e, t) => U.run(e, t), ji = () => U.getStore(), Mi = (e) => {
1306
- let t = e ?? U.getStore();
1305
+ }, ji = (e, t, n = {}) => ({
1306
+ table: e,
1307
+ op: "insert",
1308
+ old: null,
1309
+ new: t,
1310
+ ...n
1311
+ }), Mi = (e, t, n, r = {}) => ({
1312
+ table: e,
1313
+ op: "update",
1314
+ old: t,
1315
+ new: n,
1316
+ ...r
1317
+ }), Ni = (e, t, n = {}) => ({
1318
+ table: e,
1319
+ op: "delete",
1320
+ old: t,
1321
+ new: null,
1322
+ ...n
1323
+ }), Pi = (e, t, n = {}) => {
1324
+ let { at: r = "2026-01-01T00:00:00.000Z", column: i = "deletedAt", ...a } = n;
1325
+ return {
1326
+ table: e,
1327
+ op: "update",
1328
+ old: {
1329
+ ...t,
1330
+ [i]: null
1331
+ },
1332
+ new: {
1333
+ ...t,
1334
+ [i]: r
1335
+ },
1336
+ ...a
1337
+ };
1338
+ }, H = new St(), Fi = (e, t) => H.run(e, t), Ii = () => H.getStore(), Li = (e) => {
1339
+ let t = e ?? H.getStore();
1307
1340
  return t === void 0 ? {} : {
1308
1341
  ...t.traceId === void 0 ? {} : { traceId: t.traceId },
1309
1342
  ...t.subjectId === void 0 ? {} : { subjectId: t.subjectId },
1310
1343
  ...t.procedure === void 0 ? {} : { procedure: t.procedure }
1311
1344
  };
1312
- }, Ni = (e) => {
1313
- let t = U.getStore();
1314
- return t === void 0 ? e(void 0) : U.run(t, () => e(t));
1315
- }, Pi = 3e4, Fi = 1e4, W = /* @__PURE__ */ new Map(), G = 0, Ii = (e, t, n) => `${e}\u0000${t}\u0000${String(n)}`, Li = (e) => {
1316
- for (let [t, n] of W) {
1317
- let r = n.filter((t) => e - t.at < Pi);
1318
- G -= n.length - r.length, r.length === 0 ? W.delete(t) : r.length !== n.length && W.set(t, r);
1319
- }
1320
- }, Ri = (e, t) => {
1345
+ }, Ri = (e) => {
1346
+ let t = H.getStore();
1347
+ return t === void 0 ? e(void 0) : H.run(t, () => e(t));
1348
+ }, zi = 3e4, Bi = 1e4, U = /* @__PURE__ */ new Map(), W = 0, Vi = (e, t, n) => `${e}\u0000${t}\u0000${String(n)}`, Hi = (e) => {
1349
+ for (let [t, n] of U) {
1350
+ let r = n.filter((t) => e - t.at < zi);
1351
+ W -= n.length - r.length, r.length === 0 ? U.delete(t) : r.length !== n.length && U.set(t, r);
1352
+ }
1353
+ }, Ui = (e, t) => {
1321
1354
  if (t.traceId === void 0 && t.subjectId === void 0 && t.procedure === void 0) return;
1322
1355
  let n = Date.now();
1323
- if (G >= Fi && Li(n), G >= Fi) return;
1324
- let r = W.get(e);
1325
- r === void 0 ? W.set(e, [{
1356
+ if (W >= Bi && Hi(n), W >= Bi) return;
1357
+ let r = U.get(e);
1358
+ r === void 0 ? U.set(e, [{
1326
1359
  attribution: t,
1327
1360
  at: n
1328
1361
  }]) : r.push({
1329
1362
  attribution: t,
1330
1363
  at: n
1331
- }), G += 1;
1332
- }, zi = (e) => {
1333
- let t = W.get(e);
1364
+ }), W += 1;
1365
+ }, Wi = (e) => {
1366
+ let t = U.get(e);
1334
1367
  if (t === void 0 || t.length === 0) return;
1335
1368
  let n = t.shift();
1336
- if (--G, t.length === 0 && W.delete(e), !(Date.now() - n.at >= Pi)) return n.attribution;
1337
- }, Bi = (e) => (W.get(e)?.length ?? 0) > 0, K = /* @__PURE__ */ new Map(), q = /* @__PURE__ */ new Map(), J = /* @__PURE__ */ new Map(), Vi = 250, Hi = (e) => {
1338
- let t = q.get(e);
1369
+ if (--W, t.length === 0 && U.delete(e), !(Date.now() - n.at >= zi)) return n.attribution;
1370
+ }, Gi = (e) => (U.get(e)?.length ?? 0) > 0, G = /* @__PURE__ */ new Map(), K = /* @__PURE__ */ new Map(), q = /* @__PURE__ */ new Map(), Ki = 250, qi = (e) => {
1371
+ let t = K.get(e);
1339
1372
  if (t === void 0) return;
1340
- q.delete(e);
1341
- let n = J.get(e);
1342
- n !== void 0 && (clearTimeout(n), J.delete(e));
1373
+ K.delete(e);
1374
+ let n = q.get(e);
1375
+ n !== void 0 && (clearTimeout(n), q.delete(e));
1343
1376
  for (let e of t) e();
1344
- }, Ui = (e) => {
1345
- K.set(e, (K.get(e) ?? 0) + 1);
1346
- }, Wi = (e) => {
1347
- let t = (K.get(e) ?? 0) - 1;
1377
+ }, Ji = (e) => {
1378
+ G.set(e, (G.get(e) ?? 0) + 1);
1379
+ }, Yi = (e) => {
1380
+ let t = (G.get(e) ?? 0) - 1;
1348
1381
  if (t > 0) {
1349
- K.set(e, t);
1382
+ G.set(e, t);
1350
1383
  return;
1351
1384
  }
1352
- K.delete(e), Hi(e);
1353
- }, Gi = (e, t, n, r) => {
1354
- let i = n == null ? void 0 : Ii(e, t, n), a = () => r(i === void 0 ? void 0 : zi(i));
1385
+ G.delete(e), qi(e);
1386
+ }, Xi = (e, t, n, r) => {
1387
+ let i = n == null ? void 0 : Vi(e, t, n), a = () => r(i === void 0 ? void 0 : Wi(i));
1355
1388
  if (i === void 0) {
1356
1389
  a();
1357
1390
  return;
1358
1391
  }
1359
- if (Bi(i)) {
1392
+ if (Gi(i)) {
1360
1393
  a();
1361
1394
  return;
1362
1395
  }
1363
- let o = q.get(e);
1364
- if (o === void 0 && (K.get(e) ?? 0) === 0) {
1396
+ let o = K.get(e);
1397
+ if (o === void 0 && (G.get(e) ?? 0) === 0) {
1365
1398
  a();
1366
1399
  return;
1367
1400
  }
@@ -1369,38 +1402,38 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1369
1402
  o.push(a);
1370
1403
  return;
1371
1404
  }
1372
- q.set(e, [a]);
1373
- let s = setTimeout(() => Hi(e), Vi);
1374
- typeof s == "object" && typeof s.unref == "function" && s.unref(), J.set(e, s);
1375
- }, Ki = () => {
1376
- W.clear(), G = 0, K.clear();
1377
- for (let e of J.values()) clearTimeout(e);
1378
- J.clear(), q.clear();
1379
- }, qi = () => G, Y = /* @__PURE__ */ new Map(), Ji = (e, t) => {
1380
- Y.set(e, {
1405
+ K.set(e, [a]);
1406
+ let s = setTimeout(() => qi(e), Ki);
1407
+ typeof s == "object" && typeof s.unref == "function" && s.unref(), q.set(e, s);
1408
+ }, Zi = () => {
1409
+ U.clear(), W = 0, G.clear();
1410
+ for (let e of q.values()) clearTimeout(e);
1411
+ q.clear(), K.clear();
1412
+ }, Qi = () => W, J = /* @__PURE__ */ new Map(), $i = (e, t) => {
1413
+ J.set(e, {
1381
1414
  recorder: t.recorder,
1382
1415
  tables: new Set(t.tables),
1383
1416
  ownTables: new Set(t.ownTables)
1384
1417
  });
1385
- }, Yi = (e) => {
1386
- Y.delete(e);
1387
- }, Xi = () => Y.clear(), Zi = (e) => {
1388
- if (Y.size === 0) return !1;
1389
- for (let t of Y.values()) if (!t.ownTables.has(e) && t.tables.has(e)) return !0;
1418
+ }, ea = (e) => {
1419
+ J.delete(e);
1420
+ }, ta = () => J.clear(), na = (e) => {
1421
+ if (J.size === 0) return !1;
1422
+ for (let t of J.values()) if (!t.ownTables.has(e) && t.tables.has(e)) return !0;
1390
1423
  return !1;
1391
- }, Qi = async (e, t) => {
1392
- if (Y.size !== 0) for (let n of Y.values()) n.ownTables.has(t.table) || n.tables.has(t.table) && await n.recorder(e, t);
1393
- }, $i = (e) => {
1394
- if (vt.isSuccess(e)) return e.value;
1395
- throw mt.squash(e.cause);
1396
- }, ea = class extends E.TaggedError()("VersionConflict", {
1397
- table: E.String,
1398
- id: E.String,
1399
- expected: E.Number,
1400
- actual: E.NullOr(E.Number)
1401
- }) {}, ta = (e) => {
1424
+ }, ra = async (e, t) => {
1425
+ if (J.size !== 0) for (let n of J.values()) n.ownTables.has(t.table) || n.tables.has(t.table) && await n.recorder(e, t);
1426
+ }, ia = (e) => {
1427
+ if (yt.isSuccess(e)) return e.value;
1428
+ throw ht.squash(e.cause);
1429
+ }, aa = class extends w.TaggedError()("VersionConflict", {
1430
+ table: w.String,
1431
+ id: w.String,
1432
+ expected: w.Number,
1433
+ actual: w.NullOr(w.Number)
1434
+ }) {}, oa = (e) => {
1402
1435
  for (let [t, n] of Object.entries(e)) if (n?.definition?.versionColumn === !0) return t;
1403
- }, na = (e) => {
1436
+ }, sa = (e) => {
1404
1437
  let { versionColumn: t, patch: n } = e;
1405
1438
  if (t === void 0) return {
1406
1439
  nextVersion: void 0,
@@ -1413,21 +1446,21 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1413
1446
  expected: i,
1414
1447
  patch: a
1415
1448
  };
1416
- }, ra = (e) => {
1417
- if (e.expected !== void 0 && !(e.current !== null && e.current === e.expected)) return new ea({
1449
+ }, ca = (e) => {
1450
+ if (e.expected !== void 0 && !(e.current !== null && e.current === e.expected)) return new aa({
1418
1451
  table: e.table,
1419
1452
  id: e.id,
1420
1453
  expected: e.expected,
1421
1454
  actual: e.current
1422
1455
  });
1423
- }, ia = 1, aa = "voltro/expires", oa = () => g({
1424
- id: aa,
1456
+ }, la = 1, ua = "voltro/expires", da = () => g({
1457
+ id: ua,
1425
1458
  fields: { expiresAt: v().nullable() },
1426
1459
  behaviors: { defaultWhere: () => "expiresAt IS NULL OR expiresAt > now()" }
1427
- }), sa = class extends gt.TaggedError("TableStreamError") {}, ca = 1e3, la = (e, t, n, r) => {
1428
- let i = T.match(r, {
1460
+ }), fa = class extends _t.TaggedError("TableStreamError") {}, pa = 1e3, ma = (e, t, n, r) => {
1461
+ let i = bt.match(r, {
1429
1462
  onNone: () => e.where,
1430
- onSome: (n) => e.where ? _i(e.where, ni(t, n)) : ni(t, n)
1463
+ onSome: (n) => e.where ? vi(e.where, ri(t, n)) : ri(t, n)
1431
1464
  });
1432
1465
  return {
1433
1466
  table: e.table,
@@ -1442,19 +1475,19 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1442
1475
  ...e.includeDeleted === void 0 ? {} : { includeDeleted: e.includeDeleted },
1443
1476
  ...e.crossTenant === void 0 ? {} : { crossTenant: e.crossTenant }
1444
1477
  };
1445
- }, ua = (e, t) => {
1446
- let n = t.pk ?? "id", r = t.chunkSize ?? ca;
1447
- return yt.paginateChunkEffect(T.none(), (i) => {
1448
- let a = _t.tryPromise({
1449
- try: () => e.query(la(t, n, r, i)),
1450
- catch: (e) => new sa({
1478
+ }, ha = (e, t) => {
1479
+ let n = t.pk ?? "id", r = t.chunkSize ?? pa;
1480
+ return xt.paginateChunkEffect(bt.none(), (i) => {
1481
+ let a = vt.tryPromise({
1482
+ try: () => e.query(ma(t, n, r, i)),
1483
+ catch: (e) => new fa({
1451
1484
  table: t.table,
1452
1485
  cause: e
1453
1486
  })
1454
1487
  });
1455
- return (t.retry ? a.pipe(_t.retry(t.retry)) : a).pipe(_t.map((e) => [ht.fromIterable(e), e.length === r && e.length > 0 ? T.some(T.some(e[e.length - 1][n])) : T.none()]));
1488
+ return (t.retry ? a.pipe(vt.retry(t.retry)) : a).pipe(vt.map((e) => [gt.fromIterable(e), e.length === r && e.length > 0 ? bt.some(bt.some(e[e.length - 1][n])) : bt.none()]));
1456
1489
  });
1457
- }, da = (e) => {
1490
+ }, ga = (e) => {
1458
1491
  let t = e.alpha ?? .5;
1459
1492
  if (t < 0 || t > 1) throw Error(`hybridSearch: alpha must be in [0, 1], got ${t}`);
1460
1493
  return (n) => {
@@ -1468,7 +1501,7 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1468
1501
  queryText: e.vector.query,
1469
1502
  distance: e.vector.distance ?? "cosine",
1470
1503
  alpha: t
1471
- }, i = ze(n.table, e.fts.indexName, n.fullTextIndexes);
1504
+ }, i = Be(n.table, e.fts.indexName, n.fullTextIndexes);
1472
1505
  return {
1473
1506
  ...n,
1474
1507
  annClause: r,
@@ -1481,17 +1514,17 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1481
1514
  }
1482
1515
  };
1483
1516
  };
1484
- }, fa = async (e, t) => {
1517
+ }, _a = async (e, t) => {
1485
1518
  let n = e.as ?? "embedding", r = t.row[e.from];
1486
1519
  if (typeof r != "string" || r.length === 0) return {};
1487
1520
  let i = await t.embed(r);
1488
1521
  return { [n]: i };
1489
- }, pa = (e) => {
1522
+ }, va = (e) => {
1490
1523
  if (!Number.isInteger(e.dimensions) || e.dimensions <= 0) throw Error(`vectorEmbedding: dimensions must be a positive integer, got ${String(e.dimensions)}.`);
1491
- let t = e.as ?? "embedding", n = (t) => fa(e, t);
1524
+ let t = e.as ?? "embedding", n = (t) => _a(e, t);
1492
1525
  return g({
1493
1526
  id: "voltro/vectorEmbedding",
1494
- fields: { [t]: se(e.dimensions) },
1527
+ fields: { [t]: ce(e.dimensions) },
1495
1528
  ...e.index === !1 ? {} : { indexes: [{
1496
1529
  fields: [t],
1497
1530
  kind: "hnsw",
@@ -1506,19 +1539,19 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1506
1539
  beforeUpdate: n
1507
1540
  }
1508
1541
  });
1509
- }, ma = 63, ha = "br_pr", X = class extends Error {
1542
+ }, ya = 63, ba = "br_pr", Y = class extends Error {
1510
1543
  _tag = "BranchNameInvalid";
1511
1544
  constructor(e) {
1512
1545
  super(e), this.name = "BranchNameInvalid";
1513
1546
  }
1514
- }, ga = (e, t) => {
1515
- if (!Number.isInteger(t) || t < 0) throw new X(`prNumber must be a non-negative integer, got ${String(t)}`);
1516
- let n = Mn(e);
1517
- if (n.replace(/_/g, "") === "") throw new X(`app slug '${e}' has no usable identifier characters`);
1518
- let r = `${ha}${t}_${n}`;
1519
- if (r.length > ma) throw new X(`branch namespace '${r}' exceeds the ${ma}-byte identifier limit — use a shorter app slug`);
1547
+ }, xa = (e, t) => {
1548
+ if (!Number.isInteger(t) || t < 0) throw new Y(`prNumber must be a non-negative integer, got ${String(t)}`);
1549
+ let n = Nn(e);
1550
+ if (n.replace(/_/g, "") === "") throw new Y(`app slug '${e}' has no usable identifier characters`);
1551
+ let r = `${ba}${t}_${n}`;
1552
+ if (r.length > ya) throw new Y(`branch namespace '${r}' exceeds the ${ya}-byte identifier limit — use a shorter app slug`);
1520
1553
  return r;
1521
- }, _a = (e) => e.startsWith(ha), va = {
1554
+ }, Sa = (e) => e.startsWith(ba), Ca = {
1522
1555
  requested: {
1523
1556
  provision: "provisioning",
1524
1557
  destroy: "destroying"
@@ -1537,19 +1570,19 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1537
1570
  fail: "failed"
1538
1571
  },
1539
1572
  destroyed: {}
1540
- }, ya = class extends Error {
1573
+ }, wa = class extends Error {
1541
1574
  from;
1542
1575
  event;
1543
1576
  _tag = "BranchTransitionInvalid";
1544
1577
  constructor(e, t) {
1545
1578
  super(`invalid branch transition: ${e} --${t}-->`), this.from = e, this.event = t, this.name = "BranchTransitionInvalid";
1546
1579
  }
1547
- }, ba = (e, t) => {
1548
- let n = va[e][t];
1549
- if (n === void 0) throw new ya(e, t);
1580
+ }, Ta = (e, t) => {
1581
+ let n = Ca[e][t];
1582
+ if (n === void 0) throw new wa(e, t);
1550
1583
  return n;
1551
- }, xa = (e, t, n, r) => {
1552
- if (n === "copy" && (r === void 0 || r === "")) throw new X("seed 'copy' requires a parentNamespace to snapshot from");
1584
+ }, Ea = (e, t, n, r) => {
1585
+ if (n === "copy" && (r === void 0 || r === "")) throw new Y("seed 'copy' requires a parentNamespace to snapshot from");
1553
1586
  let i = [{
1554
1587
  kind: "create-namespace",
1555
1588
  detail: e
@@ -1569,13 +1602,13 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1569
1602
  detail: `run boot seeds into ${e}`
1570
1603
  });
1571
1604
  return i;
1572
- }, Sa = (e) => {
1573
- if (!_a(e)) throw new X(`refusing to plan teardown of '${e}' — not a branch namespace`);
1605
+ }, Da = (e) => {
1606
+ if (!Sa(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
1574
1607
  return [{
1575
1608
  kind: "drop-namespace",
1576
1609
  detail: e
1577
1610
  }];
1578
- }, Ca = (e) => {
1611
+ }, Oa = (e) => {
1579
1612
  if (e === void 0 || e === "") return !1;
1580
1613
  try {
1581
1614
  let t = new URL(e).hostname.toLowerCase();
@@ -1583,27 +1616,27 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1583
1616
  } catch {
1584
1617
  return /\bneon\.(tech|build)\b/i.test(e);
1585
1618
  }
1586
- }, wa = (e) => e.prefer === void 0 ? e.seed === "copy" && Ca(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, Ta = (e, t = {}) => [{
1619
+ }, ka = (e) => e.prefer === void 0 ? e.seed === "copy" && Oa(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, Aa = (e, t = {}) => [{
1587
1620
  kind: "neon-branch-create",
1588
1621
  detail: `${t.parentBranch ?? "main"} → ${e} (copy-on-write)`
1589
- }], Ea = (e) => {
1590
- if (!_a(e)) throw new X(`refusing to plan teardown of '${e}' — not a branch namespace`);
1622
+ }], ja = (e) => {
1623
+ if (!Sa(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
1591
1624
  return [{
1592
1625
  kind: "neon-branch-delete",
1593
1626
  detail: e
1594
1627
  }];
1595
- }, Da = (e) => e.mechanism === "neon-cow" ? Ta(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : xa(e.branchId, e.tableNames, e.seed, e.parentNamespace), Oa = (e, t) => e === "neon-cow" ? Ea(t) : Sa(t), ka = (e, t, n) => {
1628
+ }, Ma = (e) => e.mechanism === "neon-cow" ? Aa(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : Ea(e.branchId, e.tableNames, e.seed, e.parentNamespace), Na = (e, t) => e === "neon-cow" ? ja(t) : Da(t), Pa = (e, t, n) => {
1596
1629
  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);
1597
1630
  return {
1598
1631
  evict: i,
1599
1632
  rejectNew: r.filter((e) => !a.has(e.namespace)).length >= t.maxBranches
1600
1633
  };
1601
- }, Aa = async (e, t) => {
1602
- let n = ga(e.appSlug, e.prNumber), r = wa({
1634
+ }, Fa = async (e, t) => {
1635
+ let n = xa(e.appSlug, e.prNumber), r = ka({
1603
1636
  seed: e.seed,
1604
1637
  ...e.dbUrl === void 0 ? {} : { dbUrl: e.dbUrl },
1605
1638
  ...e.prefer === void 0 ? {} : { prefer: e.prefer }
1606
- }), i = Da({
1639
+ }), i = Ma({
1607
1640
  mechanism: r,
1608
1641
  branchId: n,
1609
1642
  tableNames: e.tableNames,
@@ -1628,33 +1661,33 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1628
1661
  mechanism: r,
1629
1662
  steps: i
1630
1663
  };
1631
- }, ja = async (e, t, n) => {
1632
- let r = Oa(t, e);
1664
+ }, Ia = async (e, t, n) => {
1665
+ let r = Na(t, e);
1633
1666
  return t === "neon-cow" ? await n.neonBranchDelete(e) : await n.dropNamespace(e), r;
1634
- }, Ma = (e, t, n) => ka(e, t, n), Z = (e) => `"${e.replace(/"/g, "\"\"")}"`, Na = (e) => {
1667
+ }, La = (e, t, n) => Pa(e, t, n), X = (e) => `"${e.replace(/"/g, "\"\"")}"`, Ra = (e) => {
1635
1668
  let t = () => {
1636
1669
  throw Error("namespace branch executor: Neon ops require a neon-cow executor (use a Neon connection for copy-on-write branches)");
1637
1670
  };
1638
1671
  return {
1639
- createNamespace: (t) => e.run(`CREATE SCHEMA IF NOT EXISTS ${Z(t)}`),
1640
- createTable: (t, n) => e.run(`CREATE TABLE IF NOT EXISTS ${Z(t)}.${Z(n)} (LIKE ${Z(n)} INCLUDING ALL)`),
1641
- copyTable: (t, n, r) => e.run(`INSERT INTO ${Z(n)}.${Z(r)} SELECT * FROM ${Z(t)}.${Z(r)}`),
1642
- dropNamespace: (t) => e.run(`DROP SCHEMA IF EXISTS ${Z(t)} CASCADE`),
1672
+ createNamespace: (t) => e.run(`CREATE SCHEMA IF NOT EXISTS ${X(t)}`),
1673
+ createTable: (t, n) => e.run(`CREATE TABLE IF NOT EXISTS ${X(t)}.${X(n)} (LIKE ${X(n)} INCLUDING ALL)`),
1674
+ copyTable: (t, n, r) => e.run(`INSERT INTO ${X(n)}.${X(r)} SELECT * FROM ${X(t)}.${X(r)}`),
1675
+ dropNamespace: (t) => e.run(`DROP SCHEMA IF EXISTS ${X(t)} CASCADE`),
1643
1676
  neonBranchCreate: t,
1644
1677
  neonBranchDelete: t
1645
1678
  };
1646
- }, Pa = class extends Error {
1679
+ }, za = class extends Error {
1647
1680
  _tag = "TenantResidencyUnresolved";
1648
1681
  constructor(e) {
1649
1682
  super(e), this.name = "TenantResidencyUnresolved";
1650
1683
  }
1651
- }, Fa = class extends Error {
1684
+ }, Ba = class extends Error {
1652
1685
  region;
1653
1686
  _tag = "TenantRegionUnavailable";
1654
1687
  constructor(e, t) {
1655
1688
  super(t), this.region = e, this.name = "TenantRegionUnavailable";
1656
1689
  }
1657
- }, Ia, La = (e) => {
1690
+ }, Va, Ha = (e) => {
1658
1691
  if (e.homes === void 0) throw Error("setResidencyConfig: `homes` is required");
1659
1692
  if (e.servableRegions === void 0 || e.servableRegions.length === 0) throw Error("setResidencyConfig: `servableRegions` must be non-empty (which regions this deployment serves)");
1660
1693
  let t = /* @__PURE__ */ new Map();
@@ -1663,98 +1696,98 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1663
1696
  if (e !== void 0 && e !== n.region) throw Error(`residency: tenant '${n.tenantId}' is mapped to two regions ('${e}' and '${n.region}')`);
1664
1697
  t.set(n.tenantId, n.region);
1665
1698
  }
1666
- return Ia = e, e;
1667
- }, Ra = () => Ia, za = () => {
1668
- Ia = void 0;
1669
- }, Ba = (e, t) => {
1670
- if (e == null || e === "") throw new Pa("residency is on but the request has no resolvable tenant — refusing to bind a store");
1699
+ return Va = e, e;
1700
+ }, Ua = () => Va, Wa = () => {
1701
+ Va = void 0;
1702
+ }, Ga = (e, t) => {
1703
+ if (e == null || e === "") throw new za("residency is on but the request has no resolvable tenant — refusing to bind a store");
1671
1704
  let n = t.homes.find((t) => t.tenantId === e);
1672
- if (n === void 0) throw new Pa(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
1705
+ if (n === void 0) throw new za(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
1673
1706
  return n;
1674
- }, Va = (e, t) => t.servableRegions.includes(e), Ha = (e, t) => {
1675
- let n = Ba(e.tenantId, t), r = Nn(n.tenantId);
1707
+ }, Ka = (e, t) => t.servableRegions.includes(e), qa = (e, t) => {
1708
+ let n = Ga(e.tenantId, t), r = Pn(n.tenantId);
1676
1709
  return {
1677
1710
  region: n.region,
1678
1711
  namespace: r,
1679
1712
  ...n.connectionKey === void 0 ? {} : { connectionKey: n.connectionKey }
1680
1713
  };
1681
- }, Ua = (e, t, n) => {
1682
- let r = Ha(e, t);
1683
- if (!Va(r.region, t)) throw new Fa(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
1714
+ }, Ja = (e, t, n) => {
1715
+ let r = qa(e, t);
1716
+ if (!Ka(r.region, t)) throw new Ba(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
1684
1717
  let i = n.get(r.region);
1685
- if (i === void 0) throw new Fa(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
1718
+ if (i === void 0) throw new Ba(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
1686
1719
  return {
1687
1720
  store: i,
1688
1721
  placement: r
1689
1722
  };
1690
- }, Wa = async (e, t, n, r) => {
1691
- let { store: i, placement: a } = Ua(e, t, n);
1723
+ }, Ya = async (e, t, n, r) => {
1724
+ let { store: i, placement: a } = Ja(e, t, n);
1692
1725
  return await r(i, a), a;
1693
- }, Ga = (e) => {
1726
+ }, Xa = (e) => {
1694
1727
  if (typeof e == "string") return e;
1695
1728
  if ("jsonPath" in e) {
1696
1729
  let { column: t, path: n, numeric: r } = e.jsonPath;
1697
1730
  return `(json:${t}->${n.join(".")}${r ? "::num" : ""})`;
1698
1731
  }
1699
1732
  return `(${e.expr})`;
1700
- }, Q = (e) => e.map(Ga), Ka = (e, t) => {
1733
+ }, Z = (e) => e.map(Xa), Za = (e, t) => {
1701
1734
  if (e.length !== t.length) return !1;
1702
- for (let n = 0; n < e.length; n++) if (Ga(e[n]) !== Ga(t[n])) return !1;
1735
+ for (let n = 0; n < e.length; n++) if (Xa(e[n]) !== Xa(t[n])) return !1;
1703
1736
  return !0;
1704
- }, qa = (e, t) => {
1737
+ }, Qa = (e, t) => {
1705
1738
  if (e.length >= t.length) return !1;
1706
- for (let n = 0; n < e.length; n++) if (Ga(e[n]) !== Ga(t[n])) return !1;
1739
+ for (let n = 0; n < e.length; n++) if (Xa(e[n]) !== Xa(t[n])) return !1;
1707
1740
  return !0;
1708
- }, Ja = (e) => {
1741
+ }, $a = (e) => {
1709
1742
  let t = [], n = e.appliedIndexes, r = e.tableName;
1710
1743
  for (let e = 0; e < n.length; e++) {
1711
1744
  let i = n[e];
1712
1745
  for (let a = e + 1; a < n.length; a++) {
1713
1746
  let e = n[a];
1714
- if (Ka(i.fields, e.fields)) {
1747
+ if (Za(i.fields, e.fields)) {
1715
1748
  let [n, a] = i.name < e.name ? [i, e] : [e, i];
1716
1749
  t.push({
1717
1750
  kind: "duplicate-fields",
1718
1751
  table: r,
1719
1752
  redundant: n,
1720
1753
  coveredBy: a,
1721
- message: `'${r}' has two indexes on the same fields [${Q(i.fields).join(", ")}]: '${i.name}' and '${e.name}'. The B-tree engine builds both, costing write throughput + disk space for no read benefit. Drop '${n.name}' (or '${a.name}' if you prefer the other name). Applies to every supported dialect (Postgres / MySQL / MariaDB / MSSQL / SQLite).`
1754
+ message: `'${r}' has two indexes on the same fields [${Z(i.fields).join(", ")}]: '${i.name}' and '${e.name}'. The B-tree engine builds both, costing write throughput + disk space for no read benefit. Drop '${n.name}' (or '${a.name}' if you prefer the other name). Applies to every supported dialect (Postgres / MySQL / MariaDB / MSSQL / SQLite).`
1722
1755
  });
1723
1756
  continue;
1724
1757
  }
1725
- qa(i.fields, e.fields) ? t.push({
1758
+ Qa(i.fields, e.fields) ? t.push({
1726
1759
  kind: "redundant-prefix",
1727
1760
  table: r,
1728
1761
  redundant: i,
1729
1762
  coveredBy: e,
1730
- message: `'${r}' index '${i.name}' on [${Q(i.fields).join(", ")}] is a leading prefix of '${e.name}' on [${Q(e.fields).join(", ")}]. Every B-tree dialect we support (Postgres / MySQL / MariaDB / MSSQL / SQLite) can serve a [${Q(i.fields).join(", ")}] query from '${e.name}' too via the leading-prefix rule, so '${i.name}' adds write cost without read benefit. Drop '${i.name}' — unless you specifically need a smaller index for cache locality on a write-heavy table (rare; profile first).`
1731
- }) : qa(e.fields, i.fields) && t.push({
1763
+ 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).`
1764
+ }) : Qa(e.fields, i.fields) && t.push({
1732
1765
  kind: "redundant-prefix",
1733
1766
  table: r,
1734
1767
  redundant: e,
1735
1768
  coveredBy: i,
1736
- message: `'${r}' index '${e.name}' on [${Q(e.fields).join(", ")}] is a leading prefix of '${i.name}' on [${Q(i.fields).join(", ")}]. Every B-tree dialect we support (Postgres / MySQL / MariaDB / MSSQL / SQLite) can serve a [${Q(e.fields).join(", ")}] query from '${i.name}' too via the leading-prefix rule, so '${e.name}' adds write cost without read benefit. Drop '${e.name}' — unless you specifically need a smaller index for cache locality on a write-heavy table (rare; profile first).`
1769
+ message: `'${r}' index '${e.name}' on [${Z(e.fields).join(", ")}] is a leading prefix of '${i.name}' on [${Z(i.fields).join(", ")}]. Every B-tree dialect we support (Postgres / MySQL / MariaDB / MSSQL / SQLite) can serve a [${Z(e.fields).join(", ")}] query from '${i.name}' too via the leading-prefix rule, so '${e.name}' adds write cost without read benefit. Drop '${e.name}' — unless you specifically need a smaller index for cache locality on a write-heavy table (rare; profile first).`
1737
1770
  });
1738
1771
  }
1739
1772
  }
1740
1773
  return t;
1741
- }, Ya = (e) => {
1774
+ }, eo = (e) => {
1742
1775
  let t = [];
1743
- for (let n of e) t.push(...Ja(n));
1776
+ for (let n of e) t.push(...$a(n));
1744
1777
  return t;
1745
- }, Xa = "\x1B[", Za = `${Xa}38;2;245;158;11m`, Qa = `${Xa}38;2;16;185;129m`, $a = (e, t) => `${e}${t}${D.reset}`, $ = (e, t, n) => e ? typeof t == "function" ? t(n) : $a(t, n) : n, eo = (e, t = {}) => {
1746
- let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n, D.dim, e.padEnd(11)), a = (e) => $(n, (e) => D.bold(D.brand(e)), e), o = (e) => $(n, D.brightRed24, e), s = (e) => $(n, Qa, e), c = (e) => $(n, Za, e), l = (e) => $(n, D.dim, e), u = `${c("index audit")} ${l("·")} ${$(n, D.bold, e.kind)}`, d = e.redundant.fields.length, f = Q(e.coveredBy.fields.slice(d)), p = (e, t) => {
1778
+ }, to = "\x1B[", no = `${to}38;2;245;158;11m`, ro = `${to}38;2;16;185;129m`, io = (e, t) => `${e}${t}${T.reset}`, Q = (e, t, n) => e ? typeof t == "function" ? t(n) : io(t, n) : n, ao = (e, t = {}) => {
1779
+ let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => Q(n, T.dim, e.padEnd(11)), a = (e) => Q(n, (e) => T.bold(T.brand(e)), e), o = (e) => Q(n, T.brightRed24, e), s = (e) => Q(n, ro, e), c = (e) => Q(n, no, e), l = (e) => Q(n, T.dim, e), u = `${c("index audit")} ${l("·")} ${Q(n, T.bold, e.kind)}`, d = e.redundant.fields.length, f = Z(e.coveredBy.fields.slice(d)), p = (e, t) => {
1747
1780
  let n = e.slice(0, t), r = e.slice(t), i = [];
1748
1781
  return n.length > 0 && i.push(s(`[${n.join(", ")}]`)), r.length > 0 && i.push(c(`+ [${r.join(", ")}]`)), i.join(" ");
1749
1782
  }, m = [];
1750
- return m.push(u), m.push(""), m.push(`${i("table")}${a(e.table)}`), m.push(""), m.push(`${i("redundant")}${o(e.redundant.name)}`), m.push(`${i("")}${p(Q(e.redundant.fields), d)}`), m.push(""), m.push(`${i("covered by")}${s(e.coveredBy.name)}`), m.push(`${i("")}${p(Q(e.coveredBy.fields), d)}`), f.length > 0 && m.push(`${i("")}${l(`└ extra columns: ${f.join(", ")}`)}`), m.push(""), e.kind === "redundant-prefix" ? (m.push(`${i("why")}B-tree indexes serve queries that filter on a LEADING PREFIX of`), m.push(`${i("")}their column list. The wider index already covers every`), m.push(`${i("")}query the narrower one can serve.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)) : (m.push(`${i("why")}Two indexes on the same columns under different names.`), m.push(`${i("")}The B-tree engine builds both — same coverage, double cost.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)), m.push(""), m.push(`${i("cost")}Every ${a("INSERT")} / ${a("UPDATE")} / ${a("DELETE")} on this table writes`), m.push(`${i("")}to ${$(n, D.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");
1751
- }, to = (e, t) => ({
1783
+ 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, T.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");
1784
+ }, oo = (e, t) => ({
1752
1785
  name: e,
1753
1786
  body: t
1754
- }), no = (e) => {
1787
+ }), so = (e) => {
1755
1788
  if (e.lifecycle === "cron" && !e.cron) throw Error(`seed "${e.id}": lifecycle 'cron' requires a 'cron' field`);
1756
1789
  if (e.lifecycle === "onSchemaChange" && (!e.watchedTables || e.watchedTables.length === 0)) throw Error(`seed "${e.id}": lifecycle 'onSchemaChange' requires at least one entry in 'watchedTables'`);
1757
- let t = e.steps({ step: to });
1790
+ let t = e.steps({ step: oo });
1758
1791
  if (t.length === 0) throw Error(`seed "${e.id}": at least one step is required`);
1759
1792
  return {
1760
1793
  __seed: !0,
@@ -1766,13 +1799,13 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1766
1799
  ...e.fingerprint === void 0 ? {} : { fingerprint: e.fingerprint },
1767
1800
  steps: t
1768
1801
  };
1769
- }, ro = (e) => typeof e == "object" && !!e && "__seed" in e && e.__seed === !0, io = (e, { apply: t, undo: n }) => ({
1802
+ }, co = (e) => typeof e == "object" && !!e && "__seed" in e && e.__seed === !0, lo = (e, { apply: t, undo: n }) => ({
1770
1803
  name: e,
1771
1804
  apply: t,
1772
1805
  undo: n
1773
- }), ao = (e) => {
1806
+ }), uo = (e) => {
1774
1807
  if (!/^\d{14}_/.test(e.id)) throw Error(`migration "${e.id}": id must start with a 14-digit timestamp followed by "_" (convention: <YYYYMMDDHHMMSS>_<slug>)`);
1775
- let t = e.steps({ step: io });
1808
+ let t = e.steps({ step: lo });
1776
1809
  if (t.length === 0) throw Error(`migration "${e.id}": at least one step is required`);
1777
1810
  return {
1778
1811
  __migration: !0,
@@ -1780,7 +1813,7 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1780
1813
  name: e.name,
1781
1814
  steps: t
1782
1815
  };
1783
- }, oo = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, so = _("_voltro_migrations", {
1816
+ }, fo = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, po = _("_voltro_migrations", {
1784
1817
  id: l({ prefix: "mig" }),
1785
1818
  name: h(),
1786
1819
  hash: h(),
@@ -1792,13 +1825,13 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1792
1825
  workflowRunId: h().nullable(),
1793
1826
  createdAt: v().default("now"),
1794
1827
  updatedAt: v().default("now").onUpdate("now")
1795
- }).index(["status"]), co = _("_voltro_seeds", {
1828
+ }).index(["status"]), mo = _("_voltro_seeds", {
1796
1829
  id: l({ prefix: "seed" }),
1797
1830
  name: h(),
1798
1831
  lifecycle: h(),
1799
1832
  fingerprint: h(),
1800
1833
  cronSchedule: h().nullable(),
1801
- watchedTables: C().nullable(),
1834
+ watchedTables: S().nullable(),
1802
1835
  nextRunAt: v().nullable(),
1803
1836
  lastRunStatus: h().nullable(),
1804
1837
  lastRunAt: v().nullable(),
@@ -1808,12 +1841,12 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1808
1841
  workflowRunId: h().nullable(),
1809
1842
  createdAt: v().default("now"),
1810
1843
  updatedAt: v().default("now").onUpdate("now")
1811
- }).index(["lifecycle"]).index(["nextRunAt"]), lo = _("_voltro_migration_plans", {
1844
+ }).index(["lifecycle"]).index(["nextRunAt"]), ho = _("_voltro_migration_plans", {
1812
1845
  id: l({ prefix: "plan" }),
1813
1846
  fingerprint: h(),
1814
1847
  liveFingerprint: h().nullable(),
1815
- operations: C(),
1816
- rollbackPlan: C().nullable(),
1848
+ operations: S(),
1849
+ rollbackPlan: S().nullable(),
1817
1850
  appliedBy: h(),
1818
1851
  environment: h(),
1819
1852
  source: h(),
@@ -1824,101 +1857,101 @@ var St = (e) => typeof e == "string" && e !== "" ? e : null, Ct = async (e, t, n
1824
1857
  appliedAt: v().default("now"),
1825
1858
  createdAt: v().default("now"),
1826
1859
  updatedAt: v().default("now").onUpdate("now")
1827
- }).index(["fingerprint"]).index(["environment"]), uo = _("_voltro_idempotency", {
1860
+ }).index(["fingerprint"]).index(["environment"]), go = _("_voltro_idempotency", {
1828
1861
  id: l({ prefix: "idem" }),
1829
1862
  scope: h(),
1830
1863
  key: h(),
1831
1864
  status: h(),
1832
- response: C().nullable(),
1865
+ response: S().nullable(),
1833
1866
  createdAt: v().default("now")
1834
- }).unique(["scope", "key"]).index(["createdAt"]), fo = _("_voltro_kv", {
1867
+ }).unique(["scope", "key"]).index(["createdAt"]), _o = _("_voltro_kv", {
1835
1868
  id: l({ prefix: "kv" }),
1836
1869
  key: h().unique(),
1837
1870
  value: h().nullable(),
1838
1871
  expiresAt: v().nullable(),
1839
1872
  createdAt: v().default("now"),
1840
1873
  updatedAt: v().default("now").onUpdate("now")
1841
- }).index(["expiresAt"]), po = _("_voltro_api_keys", {
1874
+ }).index(["expiresAt"]), vo = _("_voltro_api_keys", {
1842
1875
  id: l({ prefix: "apikey" }),
1843
1876
  tenantId: h().nullable(),
1844
1877
  name: h(),
1845
1878
  hashedKey: h().maxLength(64).unique(),
1846
1879
  keyPrefix: h(),
1847
- scopes: C().nullable(),
1880
+ scopes: S().nullable(),
1848
1881
  lastUsedAt: v().nullable(),
1849
1882
  requestCount: s().default(0),
1850
1883
  expiresAt: v().nullable(),
1851
1884
  revokedAt: v().nullable(),
1852
1885
  createdBy: h().nullable(),
1853
1886
  onBehalfOf: h().nullable(),
1854
- metadata: C().nullable(),
1887
+ metadata: S().nullable(),
1855
1888
  createdAt: v().default("now")
1856
- }).index("byApiKeyTenant", ["tenantId"]), mo = [
1857
- so,
1858
- co,
1859
- lo
1860
- ], ho = "id", go = (e, t) => {
1861
- let n = S(e);
1889
+ }).index("byApiKeyTenant", ["tenantId"]), yo = [
1890
+ po,
1891
+ mo,
1892
+ ho
1893
+ ], $ = "id", bo = (e, t) => {
1894
+ let n = x(e);
1862
1895
  if (n === void 0) return t;
1863
- let r = n.fields[ho]?.idScheme;
1864
- if (r === void 0 || t[ho] != null) return t;
1896
+ let r = n.fields[$]?.idScheme;
1897
+ if (r === void 0 || t[$] != null) return t;
1865
1898
  if (r.kind === "numeric") {
1866
- if (!(ho in t)) return t;
1899
+ if (!($ in t)) return t;
1867
1900
  let e = { ...t };
1868
- return delete e[ho], e;
1901
+ return delete e[$], e;
1869
1902
  }
1870
- let i = oe(r, e);
1903
+ let i = se(r, e);
1871
1904
  return i === null ? t : {
1872
1905
  ...t,
1873
- [ho]: i
1906
+ [$]: i
1874
1907
  };
1875
- }, _o = (e, t) => t.map((t) => go(e, t)), vo = (e, t) => {
1908
+ }, xo = (e, t) => t.map((t) => bo(e, t)), So = (e, t) => {
1876
1909
  let n = [], r = t;
1877
1910
  for (let [t, i] of Object.entries(e.fields)) {
1878
1911
  let e = i;
1879
1912
  e.nullable || e.hasDefault || e.idScheme !== void 0 || e.generatedAs !== void 0 || (r[t] === void 0 || r[t] === null) && n.push(t);
1880
1913
  }
1881
1914
  return n;
1882
- }, yo = (e, t) => {
1915
+ }, Co = (e, t) => {
1883
1916
  let n = t;
1884
1917
  return e.filter((e) => n[e] === void 0 || n[e] === null);
1885
- }, bo = (e, t, n) => e.insert(t.tableName, n), xo = (e, t, n, r) => e.upsert(t.tableName, n, {
1918
+ }, wo = (e, t, n) => e.insert(t.tableName, n), To = (e, t, n, r) => e.upsert(t.tableName, n, {
1886
1919
  conflictColumns: r.conflictColumns,
1887
1920
  ...r.update === void 0 ? {} : { update: r.update }
1888
- }), So = (e, t, n, r) => e.updateMany(t.tableName, n, { where: r.where }), Co = 512, wo = (e) => {
1921
+ }), Eo = (e, t, n, r) => e.updateMany(t.tableName, n, { where: r.where }), Do = 512, Oo = (e) => {
1889
1922
  e.setMaxListeners(512);
1890
- }, To = (e, t, n) => ({
1923
+ }, ko = (e, t, n) => ({
1891
1924
  _tag: "PrimaryKeyConflictError",
1892
1925
  table: e,
1893
1926
  key: t,
1894
1927
  cause: n
1895
- }), Eo = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", Do = /* @__PURE__ */ new Map(), Oo = (e) => {
1928
+ }), Ao = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", jo = /* @__PURE__ */ new Map(), Mo = (e) => {
1896
1929
  if (!e.table || !e.timeColumn) throw Error("registerRetention: table + timeColumn are required");
1897
1930
  if (!Number.isFinite(e.ttlMs) || e.ttlMs <= 0) throw Error(`registerRetention(${e.table}): ttlMs must be a positive number`);
1898
- Do.set(e.table, e);
1899
- }, ko = () => [...Do.values()], Ao = () => Do.clear(), jo = async (e, t, n, r = 2e4) => {
1931
+ jo.set(e.table, e);
1932
+ }, No = () => [...jo.values()], Po = () => jo.clear(), Fo = async (e, t, n, r = 2e4) => {
1900
1933
  let i = new Date(t - e.ttlMs), a = 0;
1901
1934
  for (;;) {
1902
1935
  let t = await n(e.table, e.timeColumn, i, r, e.where);
1903
1936
  if (a += t, t < r) break;
1904
1937
  }
1905
1938
  return a;
1906
- }, Mo = (e, t) => {
1939
+ }, Io = (e, t) => {
1907
1940
  let n = Number(e ?? String(t));
1908
1941
  return (Number.isFinite(n) && n > 0 ? n : t) * 36e5;
1909
- }, No = "_voltro_cdc_offsets", Po = _(No, {
1942
+ }, Lo = "_voltro_cdc_offsets", Ro = _(Lo, {
1910
1943
  id: l({ prefix: "cdcoff" }),
1911
1944
  replicaId: h(),
1912
1945
  streamName: h(),
1913
1946
  binlogFile: h(),
1914
1947
  binlogPosition: h(),
1915
1948
  updatedAt: v()
1916
- }).index(["replicaId"]), Fo = _(No, {
1949
+ }).index(["replicaId"]), zo = _(Lo, {
1917
1950
  id: l({ prefix: "cdcoff" }),
1918
1951
  replicaId: h(),
1919
1952
  streamName: h(),
1920
1953
  ctVersion: h(),
1921
1954
  updatedAt: v()
1922
- }).index(["replicaId"]), Io = "postgres";
1955
+ }).index(["replicaId"]), Bo = "postgres";
1923
1956
  //#endregion
1924
- export { me as AUTO_FILLED_COLUMNS, X as BranchNameInvalid, ya as BranchTransitionInvalid, No as CDC_OFFSETS_TABLE, Co as CHANGE_LISTENER_CEILING, Pe as ColumnBuilder, Ot as ENCRYPTED_PREFIX, Io as ENGINE, gn as EagerCardinalityError, Fe as FILE_MIGRATION_PATTERN, $e as FRAMEWORK_LIVE_TABLES, kt as FieldDecryptionError, ia as INITIAL_VERSION, pi as MATCHES_NO_ROWS, Ge as MAX_IDENTIFIER_LENGTH, xt as SqlClient, sa as TableStreamError, kn as TenantNamespaceInvalid, On as TenantNamespaceUnresolved, Fa as TenantRegionUnavailable, Pa as TenantResidencyUnresolved, aa as VOLTRO_EXPIRES_MIXIN_ID, ea as VersionConflict, Ze as WARN_IDENTIFIER_LENGTH, po as _voltroApiKeysTable, Po as _voltroCdcOffsetsTable, uo as _voltroIdempotencyTable, fo as _voltroKvTable, lo as _voltroMigrationPlansTable, so as _voltroMigrationsTable, Fo as _voltroMssqlCdcOffsetsTable, co as _voltroSeedsTable, $r as actorsTable, Ma as admitBranch, Ve as allEnumRenames, an as allRegisteredRelations, u as allRegisteredTables, _i as and, Me as array, ui as arrayContains, fi as arrayHas, di as arrayOverlaps, vn as attachEagerLoads, Mi as attributionFields, Ii as attributionKey, Ya as auditAllTableIndexes, Ja as auditTableIndexes, ke as avg, Je as avgOver, Ui as beginLocalWrite, ye as bigint, Ua as bindResidentStore, it as boolean, ga as branchNamespaceName, ut as bytes, zi as claimPendingAttribution, nt as clearEnumRenames, Ki as clearPendingAttribution, sn as clearRelationsRegistry, za as clearResidencyConfig, Ao as clearRetentions, m as clearTableRegistry, Xi as clearWriteRecorders, Ln as coercePredicateValue, Rn as coercePredicateValues, Oi as collectSubqueries, He as column, Ft as columnSchema, Xn as compileEagerJson, M as compilePredicate, zn as compileRawFragment, N as compileSelect, fa as computeEmbedding, ci as contains, Ne as count, je as countDistinct, ji as currentWriteAttribution, ve as databaseHandle, Ce as date, ct as dbEnum, le as decimal, De as declareEnumRename, pn as decodeRowsFromSchema, Pt as decryptFieldsOnRead, ao as defineMigration, g as defineMixin, no as defineSeed, rt as denseRank, _e as deriveTypeIdPrefix, Dt as deserializeArraysOnRead, Ie as drainIdentifierWarnings, a as dropped, hn as encodeRowForSchema, Nt as encryptFieldsForWrite, Mt as encryptedColumnsOf, Wi as endLocalWrite, ka as enforceBranchLimits, ee as ensureTableRegistered, ei as eq, j as escapeLike, Di as evaluatePredicate, lt as except, wi as exists, oa as expires, eo as formatIndexAuditIssue, mo as frameworkTables, oe as generateId, Oe as generateSnowflake, ot as geography, de as geometry, Ae as getEnumRenames, rn as getRelation, nn as getRelations, Ra as getResidencyConfig, S as getTable, ni as gt, ri as gte, Dn as hasEagerLoads, da as hybridSearch, l as id, oi as inSet, Si as inSubquery, O as inferForeignKey, bo as insertRow, s as integer, Se as intersect, re as interval, _a as isBranchNamespace, Ut as isEmptyRelationsSpec, jt as isEncrypted, At as isFieldDecryptionError, be as isFileMigration, We as isFrameworkOwnedLiveTable, oo as isMigrationDefinition, Ca as isNeonConnection, hi as isNotNull, mi as isNull, Eo as isPrimaryKeyConflictError, Va as isRegionServable, Wt as isRelationsSpec, ro as isSeedDefinition, p as isSqliteFamily, dt as isTableReactive, we as isView, C as json, bi as jsonField, f as jsonIndex, st as lag, ce as lead, ko as listRetentions, ii as lt, ai as lte, Na as makeNamespaceBranchExecutor, Kt as many, qt as manyToMany, n as materializeFields, i as max, Ke as migration, at as min, yo as missingConflictColumns, vo as missingRequiredColumns, ge as mixin, ti as neq, ba as nextBranchState, yi as not, Ti as notExists, si as notInSet, Ci as notInSubquery, Re as numeric, Gt as one, _n as oneCardinalityMessage, vi as or, ue as paginateBy, c as paginateById, qi as pendingAttributionCount, Da as planBranch, xa as planBranchProvision, Sa as planBranchTeardown, Oa as planBranchTeardownFor, Ta as planNeonBranchProvision, Ea as planNeonBranchTeardown, na as planVersionedUpdate, Ye as pluginRef, Ue as pluginRefSpecOf, To as primaryKeyConflictError, Aa as provisionBranch, Wa as provisionResidentTenant, Pn as qualifyTable, o as queryFor, Be as queryForView, fe as quoteIdent, wo as raiseChangeListenerCeiling, x as rank, y as raw, ne as real, Zi as recordsTable, ae as reference, Yr as registerCoreTables, tn as registerDiscoveredRelations, Ri as registerPendingAttribution, en as registerRelations, Oo as registerRetention, r as registerTable, Ji as registerWriteRecorder, Ht as relations, Zr as requireActors, pe as requireTable, Qr as requireTenants, et as resetSnowflake, Ha as residentPlacement, Ct as resolveActorSnapshot, wa as resolveBranchMechanism, Gi as resolveEchoAttribution, ze as resolveFullTextIndex, e as resolveIdScheme, he as resolveMixinGraph, Ba as resolveTenantHome, Nn as resolveTenantNamespace, Mo as retentionTtlMsFromEnv, t as rowNumber, It as rowSchema, Ai as runWithWriteAttribution, Qi as runWriteRecorders, Mn as sanitizeIdentifierFragment, Et as serializeArraysForWrite, d as serverOnlyColumns, La as setResidencyConfig, $i as settleTransactionExit, ra as settleVersionedUpdate, gi as spatialPredicate, go as stampGeneratedId, _o as stampGeneratedIds, li as startsWith, ua as streamTable, Le as sum, te as sumOver, jo as sweepRetention, _ as table, ja as teardownBranch, h as text, v as timestamp, ft as timestampMs, pt as timestampMsOrNull, b as union, ie as unionAll, Yi as unregisterWriteRecorder, So as updateManyRow, xo as upsertRow, xe as validateColumnName, qe as validateIndexName, on as validateRegisteredRelations, Zt as validateRelationConfig, Qe as validateTableName, Te as validateTypeIdPrefix, se as vector, Xe as vectorDistanceToOpclass, pa as vectorEmbedding, ta as versionColumnOf, tt as view, Ee as viewSql, ki as walkLeaves, Ni as withCapturedAttribution };
1957
+ export { he as AUTO_FILLED_COLUMNS, Y as BranchNameInvalid, wa as BranchTransitionInvalid, Lo as CDC_OFFSETS_TABLE, Do as CHANGE_LISTENER_CEILING, Fe as ColumnBuilder, At as ENCRYPTED_PREFIX, Bo as ENGINE, _n as EagerCardinalityError, Ie as FILE_MIGRATION_PATTERN, et as FRAMEWORK_LIVE_TABLES, jt as FieldDecryptionError, la as INITIAL_VERSION, mi as MATCHES_NO_ROWS, Ke as MAX_IDENTIFIER_LENGTH, Ct as SqlClient, fa as TableStreamError, An as TenantNamespaceInvalid, kn as TenantNamespaceUnresolved, Ba as TenantRegionUnavailable, za as TenantResidencyUnresolved, ua as VOLTRO_EXPIRES_MIXIN_ID, aa as VersionConflict, Qe as WARN_IDENTIFIER_LENGTH, vo as _voltroApiKeysTable, Ro as _voltroCdcOffsetsTable, go as _voltroIdempotencyTable, _o as _voltroKvTable, ho as _voltroMigrationPlansTable, po as _voltroMigrationsTable, zo as _voltroMssqlCdcOffsetsTable, mo as _voltroSeedsTable, ei as actorsTable, La as admitBranch, He as allEnumRenames, on as allRegisteredRelations, u as allRegisteredTables, vi as and, Ne as array, di as arrayContains, pi as arrayHas, fi as arrayOverlaps, yn as attachEagerLoads, Li as attributionFields, Vi as attributionKey, eo as auditAllTableIndexes, $a as auditTableIndexes, Ae as avg, Ye as avgOver, Ji as beginLocalWrite, be as bigint, Ja as bindResidentStore, at as boolean, xa as branchNamespaceName, dt as bytes, Ni as changeDelete, ji as changeInsert, Pi as changeSoftDelete, Mi as changeUpdate, Wi as claimPendingAttribution, rt as clearEnumRenames, Zi as clearPendingAttribution, cn as clearRelationsRegistry, Wa as clearResidencyConfig, Po as clearRetentions, m as clearTableRegistry, ta as clearWriteRecorders, Rn as coercePredicateValue, zn as coercePredicateValues, ki as collectSubqueries, Ue as column, Lt as columnSchema, Zn as compileEagerJson, j as compilePredicate, Bn as compileRawFragment, M as compileSelect, _a as computeEmbedding, li as contains, Pe as count, Me as countDistinct, Ii as currentWriteAttribution, ye as databaseHandle, we as date, lt as dbEnum, ue as decimal, Oe as declareEnumRename, mn as decodeRowsFromSchema, It as decryptFieldsOnRead, uo as defineMigration, g as defineMixin, so as defineSeed, it as denseRank, ve as deriveTypeIdPrefix, kt as deserializeArraysOnRead, Le as drainIdentifierWarnings, a as dropped, gn as encodeRowForSchema, Ft as encryptFieldsForWrite, Pt as encryptedColumnsOf, Yi as endLocalWrite, Pa as enforceBranchLimits, ee as ensureTableRegistered, ti as eq, A as escapeLike, Oi as evaluatePredicate, ut as except, Ti as exists, da as expires, ao as formatIndexAuditIssue, yo as frameworkTables, se as generateId, ke as generateSnowflake, st as geography, fe as geometry, je as getEnumRenames, an as getRelation, rn as getRelations, Ua as getResidencyConfig, x as getTable, ri as gt, ii as gte, On as hasEagerLoads, ga as hybridSearch, l as id, si as inSet, Ci as inSubquery, E as inferForeignKey, wo as insertRow, s as integer, Ce as intersect, ie as interval, Sa as isBranchNamespace, Gt as isEmptyRelationsSpec, Nt as isEncrypted, Mt as isFieldDecryptionError, xe as isFileMigration, Ge as isFrameworkOwnedLiveTable, fo as isMigrationDefinition, Oa as isNeonConnection, gi as isNotNull, hi as isNull, Ao as isPrimaryKeyConflictError, Ka as isRegionServable, Kt as isRelationsSpec, co as isSeedDefinition, p as isSqliteFamily, ft as isTableReactive, Te as isView, S as json, xi as jsonField, f as jsonIndex, ct as lag, le as lead, No as listRetentions, ai as lt, oi as lte, Ra as makeNamespaceBranchExecutor, Jt as many, Yt as manyToMany, n as materializeFields, i as max, qe as migration, ot as min, Co as missingConflictColumns, So as missingRequiredColumns, _e as mixin, ni as neq, Ta as nextBranchState, bi as not, Ei as notExists, ci as notInSet, wi as notInSubquery, ze as numeric, qt as one, vn as oneCardinalityMessage, yi as or, de as paginateBy, c as paginateById, Qi as pendingAttributionCount, Ma as planBranch, Ea as planBranchProvision, Da as planBranchTeardown, Na as planBranchTeardownFor, Aa as planNeonBranchProvision, ja as planNeonBranchTeardown, sa as planVersionedUpdate, Xe as pluginRef, We as pluginRefSpecOf, ko as primaryKeyConflictError, Fa as provisionBranch, Ya as provisionResidentTenant, Fn as qualifyTable, o as queryFor, Ve as queryForView, pe as quoteIdent, Oo as raiseChangeListenerCeiling, b as rank, ne as raw, re as real, na as recordsTable, oe as reference, Xr as registerCoreTables, nn as registerDiscoveredRelations, Ui as registerPendingAttribution, tn as registerRelations, Mo as registerRetention, r as registerTable, $i as registerWriteRecorder, Wt as relations, Qr as requireActors, me as requireTable, $r as requireTenants, tt as resetSnowflake, qa as residentPlacement, Tt as resolveActorSnapshot, ka as resolveBranchMechanism, Xi as resolveEchoAttribution, Be as resolveFullTextIndex, e as resolveIdScheme, ge as resolveMixinGraph, Ga as resolveTenantHome, Pn as resolveTenantNamespace, Io as retentionTtlMsFromEnv, t as rowNumber, Rt as rowSchema, Fi as runWithWriteAttribution, ra as runWriteRecorders, Nn as sanitizeIdentifierFragment, Ot as serializeArraysForWrite, d as serverOnlyColumns, Ha as setResidencyConfig, ia as settleTransactionExit, ca as settleVersionedUpdate, _i as spatialPredicate, bo as stampGeneratedId, xo as stampGeneratedIds, ui as startsWith, ha as streamTable, Re as sum, te as sumOver, Fo as sweepRetention, _ as table, Ia as teardownBranch, h as text, v as timestamp, pt as timestampMs, mt as timestampMsOrNull, y as union, ae as unionAll, ea as unregisterWriteRecorder, Eo as updateManyRow, To as upsertRow, Se as validateColumnName, Je as validateIndexName, sn as validateRegisteredRelations, Qt as validateRelationConfig, $e as validateTableName, Ee as validateTypeIdPrefix, ce as vector, Ze as vectorDistanceToOpclass, va as vectorEmbedding, oa as versionColumnOf, nt as view, De as viewSql, Ai as walkLeaves, Ri as withCapturedAttribution };