@voltro/database 0.4.0 → 0.5.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,14 +1,14 @@
1
- import { $ as e, A as t, B as n, C as r, Ct as i, D as a, Dt as o, E as s, Et as c, F as l, G as u, H as d, I as f, J as p, K as m, L as h, M as g, N as _, O as ee, Ot as v, P as y, Q as b, R as x, S as te, St as S, T as C, Tt as ne, U as re, V as ie, W as ae, X as oe, Y as se, Z as ce, _ as le, _t as ue, a as de, at as fe, b as pe, bt as me, c as he, ct as ge, d as _e, dt as ve, et as ye, f as be, ft as xe, g as Se, gt as Ce, h as we, ht as Te, i as w, it as Ee, j as De, k as Oe, kt as ke, l as Ae, lt as je, m as Me, mt as Ne, n as Pe, nt as Fe, o as Ie, ot as Le, p as Re, pt as ze, q as Be, r as Ve, rt as He, s as Ue, st as We, t as Ge, tt as Ke, u as qe, ut as Je, v as Ye, vt as T, w as Xe, wt as Ze, x as Qe, xt as E, y as $e, yt as D, z as et } from "./fileBased-CRXgPJkv.js";
2
- import { Chunk as tt, Data as nt, Effect as rt, Option as O, Stream as it } from "effect";
1
+ import { $ as e, A as t, At as n, B as r, C as i, Ct as a, D as o, Dt as s, E as c, Et as l, F as u, G as d, H as f, I as p, J as m, K as h, L as g, M as _, N as ee, O as te, Ot as v, P as y, Q as b, R as ne, S as x, St as S, T as re, Tt as ie, U as ae, V as C, W as oe, X as se, Y as ce, Z as le, _ as ue, _t as de, a as fe, at as pe, b as me, bt as w, c as he, ct as ge, d as _e, dt as ve, et as ye, f as be, ft as xe, g as Se, gt as Ce, h as we, ht as Te, i as T, it as Ee, j as De, k as Oe, kt as E, l as ke, lt as Ae, m as je, mt as Me, n as Ne, nt as Pe, o as Fe, ot as Ie, p as Le, pt as Re, q as ze, r as Be, rt as Ve, s as He, st as Ue, t as We, tt as Ge, u as Ke, ut as qe, v as Je, vt as Ye, w as Xe, wt as Ze, x as Qe, xt as $e, y as et, yt as D, z as tt } from "./fileBased-Cc-F1oFv.js";
2
+ import { Chunk as nt, Data as rt, Effect as it, Option as O, Stream as at } from "effect";
3
3
  import { ansi as k } from "@voltro/logger";
4
4
  //#region src/arrayCodec.ts
5
- var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", ot = (e) => {
5
+ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", st = (e) => {
6
6
  let t = [];
7
7
  for (let [n, r] of Object.entries(e.fields)) r.type === "array" && t.push(n);
8
8
  return t;
9
- }, st = (e, t, n) => {
10
- if (!at(n) || !t) return e;
11
- let r = ot(t);
9
+ }, ct = (e, t, n) => {
10
+ if (!ot(n) || !t) return e;
11
+ let r = st(t);
12
12
  if (r.length === 0) return e;
13
13
  let i = { ...e };
14
14
  for (let e of r) {
@@ -16,9 +16,9 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
16
16
  Array.isArray(t) && (i[e] = JSON.stringify(t));
17
17
  }
18
18
  return i;
19
- }, ct = (e, t, n) => {
20
- if (!at(n) || !t) return e;
21
- let r = ot(t);
19
+ }, lt = (e, t, n) => {
20
+ if (!ot(n) || !t) return e;
21
+ let r = st(t);
22
22
  return r.length === 0 ? e : e.map((e) => {
23
23
  let t;
24
24
  for (let n of r) {
@@ -30,61 +30,61 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
30
30
  }
31
31
  return t ?? e;
32
32
  });
33
- }, lt = "enc:v1:", ut = (e) => typeof e == "string" && e.startsWith("enc:v1:"), dt = (e) => {
33
+ }, ut = "enc:v1:", dt = (e) => typeof e == "string" && e.startsWith("enc:v1:"), ft = (e) => {
34
34
  let t = [];
35
35
  for (let [n, r] of Object.entries(e.fields)) r.encrypted === !0 && t.push(n);
36
36
  return t;
37
- }, ft = (e, t, n) => {
37
+ }, pt = (e, t, n) => {
38
38
  if (!t) return e;
39
- let r = dt(t);
39
+ let r = ft(t);
40
40
  if (r.length === 0) return e;
41
41
  let i = { ...e };
42
42
  for (let e of r) {
43
43
  let r = i[e];
44
- if (!(r == null || ut(r))) {
44
+ if (!(r == null || dt(r))) {
45
45
  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)`);
46
46
  i[e] = n.encrypt(JSON.stringify(r));
47
47
  }
48
48
  }
49
49
  return i;
50
- }, pt = (e, t, n) => {
50
+ }, mt = (e, t, n) => {
51
51
  if (!t) return e;
52
- let r = dt(t);
52
+ let r = ft(t);
53
53
  return r.length === 0 || !n ? e : e.map((e) => {
54
54
  let t;
55
55
  for (let i of r) {
56
56
  let r = e[i];
57
- ut(r) && (t ??= { ...e }, t[i] = JSON.parse(n.decrypt(r)));
57
+ dt(r) && (t ??= { ...e }, t[i] = JSON.parse(n.decrypt(r)));
58
58
  }
59
59
  return t ?? e;
60
60
  });
61
- }, mt = (e) => typeof e == "function" ? e : () => e, ht = (e, t) => ({
61
+ }, ht = (e) => typeof e == "function" ? e : () => e, gt = (e, t) => ({
62
62
  kind: "one",
63
- target: mt(e),
63
+ target: ht(e),
64
64
  ...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
65
65
  ...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
66
- }), gt = (e, t) => ({
66
+ }), _t = (e, t) => ({
67
67
  kind: "many",
68
- target: mt(e),
68
+ target: ht(e),
69
69
  ...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
70
70
  ...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
71
- }), _t = (e, t) => ({
71
+ }), vt = (e, t) => ({
72
72
  kind: "manyToMany",
73
- target: mt(e),
74
- through: mt(t.through),
73
+ target: ht(e),
74
+ through: ht(t.through),
75
75
  sourceKey: t.sourceKey,
76
76
  targetKey: t.targetKey
77
- }), vt = {
78
- one: ht,
79
- many: gt,
80
- manyToMany: _t
81
- }, yt = (e, t) => {
77
+ }), yt = {
78
+ one: gt,
79
+ many: _t,
80
+ manyToMany: vt
81
+ }, bt = (e, t) => {
82
82
  let n = typeof e == "function" ? e : () => e;
83
83
  return {
84
84
  source: n,
85
- relations: t(vt, n())
85
+ relations: t(yt, n())
86
86
  };
87
- }, bt = (e) => {
87
+ }, xt = (e) => {
88
88
  if (typeof e != "object" || !e) return !1;
89
89
  let t = e;
90
90
  if (typeof t.source != "function" || typeof t.relations != "object" || t.relations === null) return !1;
@@ -93,13 +93,13 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
93
93
  let t = e?.kind;
94
94
  return t === "one" || t === "many" || t === "manyToMany";
95
95
  });
96
- }, xt = ht, St = gt, Ct = _t, A = (e, t, n) => {
96
+ }, St = gt, Ct = _t, wt = vt, A = (e, t, n) => {
97
97
  let r = [];
98
98
  for (let [n, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && r.push(n);
99
99
  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>' }.`);
100
100
  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.`);
101
101
  return r[0];
102
- }, wt = Symbol.for("@voltro/database/relationsRegistry"), Tt = globalThis, j = Tt[wt] ?? (Tt[wt] = /* @__PURE__ */ new Map()), Et = (e) => {
102
+ }, Tt = Symbol.for("@voltro/database/relationsRegistry"), Et = globalThis, j = Et[Tt] ?? (Et[Tt] = /* @__PURE__ */ new Map()), Dt = (e) => {
103
103
  let t = e.source(), n = j.get(t.tableName);
104
104
  if (n === void 0) {
105
105
  j.set(t.tableName, new Map(Object.entries(e.relations)));
@@ -109,14 +109,14 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
109
109
  if (n.has(r)) throw Error(`duplicate relation '${r}' on '${t.tableName}': two relations() blocks both declare it. Pick distinct names or merge them into one block.`);
110
110
  n.set(r, i);
111
111
  }
112
- }, Dt = (e) => {
112
+ }, Ot = (e) => {
113
113
  let t = 0;
114
- for (let n of Object.values(e)) bt(n) && (Et(n), t += 1);
114
+ for (let n of Object.values(e)) xt(n) && (Dt(n), t += 1);
115
115
  return t;
116
116
  }, M = (e) => {
117
117
  let t = j.get(e);
118
118
  if (t !== void 0) return Object.fromEntries(t);
119
- }, Ot = (e, t) => j.get(e)?.get(t), kt = () => {
119
+ }, kt = (e, t) => j.get(e)?.get(t), At = () => {
120
120
  let e = [];
121
121
  for (let [t, n] of j) for (let [r, i] of n) e.push({
122
122
  source: t,
@@ -124,9 +124,9 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
124
124
  relation: i
125
125
  });
126
126
  return e;
127
- }, At = () => {
127
+ }, jt = () => {
128
128
  j.clear();
129
- }, jt = (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, Mt = (e) => {
129
+ }, Mt = (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, Nt = (e) => {
130
130
  if (e == null || typeof e != "string") return e;
131
131
  let t = e.trim();
132
132
  if (t.length === 0) return e;
@@ -137,7 +137,7 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
137
137
  } catch {
138
138
  return e;
139
139
  }
140
- }, Nt = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, Pt = (e) => {
140
+ }, Pt = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, Ft = (e) => {
141
141
  if (e == null || e instanceof Date) return e;
142
142
  if (typeof e == "string") {
143
143
  let t = new Date(e);
@@ -148,21 +148,21 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
148
148
  return isNaN(t.getTime()) ? e : t;
149
149
  }
150
150
  return e;
151
- }, Ft = (e, t, n) => {
151
+ }, It = (e, t, n) => {
152
152
  if (e == null) return e;
153
153
  switch (t) {
154
- case "boolean": return n === "postgres" ? e : jt(e);
154
+ case "boolean": return n === "postgres" ? e : Mt(e);
155
155
  case "json":
156
- case "array": return n === "postgres" ? e : Mt(e);
156
+ case "array": return n === "postgres" ? e : Nt(e);
157
157
  case "timestamp":
158
- case "date": return n === "sqlite" || n === "turso" ? Pt(e) : e;
158
+ case "date": return n === "sqlite" || n === "turso" ? Ft(e) : e;
159
159
  case "decimal":
160
- case "bigint": return Nt(e);
160
+ case "bigint": return Pt(e);
161
161
  default: return e;
162
162
  }
163
- }, It = (e, t, n) => {
163
+ }, Lt = (e, t, n) => {
164
164
  if (e.length === 0) return e;
165
- let r = y(t);
165
+ let r = u(t);
166
166
  if (r === void 0) return e;
167
167
  let i = r.fields, a = [];
168
168
  for (let [e, t] of Object.entries(i)) a.push({
@@ -171,26 +171,26 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
171
171
  });
172
172
  return e.map((e) => {
173
173
  let t = { ...e };
174
- for (let { key: e, type: r } of a) e in t && (t[e] = Ft(t[e], r, n));
174
+ for (let { key: e, type: r } of a) e in t && (t[e] = It(t[e], r, n));
175
175
  return t;
176
176
  });
177
- }, Lt = (e, t) => {
177
+ }, Rt = (e, t) => {
178
178
  if (e == null) return e;
179
179
  switch (t) {
180
180
  case "json":
181
181
  case "array": return typeof e == "string" ? e : JSON.stringify(e);
182
182
  default: return e;
183
183
  }
184
- }, Rt = (e, t, n = ["json", "array"]) => {
185
- let r = y(t);
184
+ }, zt = (e, t, n = ["json", "array"]) => {
185
+ let r = u(t);
186
186
  if (r === void 0) return e;
187
187
  let i = r.fields, a = null;
188
188
  for (let [t, r] of Object.entries(i)) if (n.includes(r.type) && t in e) {
189
- let n = Lt(e[t], r.type);
189
+ let n = Rt(e[t], r.type);
190
190
  n !== e[t] && (a === null && (a = { ...e }), a[t] = n);
191
191
  }
192
192
  return a ?? e;
193
- }, zt = async (e, t, n, r) => {
193
+ }, Bt = async (e, t, n, r) => {
194
194
  if (e.length === 0) return e;
195
195
  let i = M(n.tableName);
196
196
  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?`);
@@ -201,23 +201,23 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
201
201
  let t = Object.keys(i).join(", ") || "<none>";
202
202
  throw Error(`unknown relation '${e}' on '${n.tableName}'. Registered relations: ${t}.`);
203
203
  }
204
- await Bt(a, e, t, o === !0 ? {} : o, n, r);
204
+ await Vt(a, e, t, o === !0 ? {} : o, n, r);
205
205
  }
206
206
  return a;
207
- }, Bt = async (e, t, n, r, i, a) => {
207
+ }, Vt = async (e, t, n, r, i, a) => {
208
208
  switch (n.kind) {
209
209
  case "one":
210
- await Vt(e, t, n, r, i, a);
210
+ await Ht(e, t, n, r, i, a);
211
211
  return;
212
212
  case "many":
213
- await Ht(e, t, n, r, i, a);
213
+ await Ut(e, t, n, r, i, a);
214
214
  return;
215
215
  case "manyToMany":
216
- await Wt(e, t, n, r, i, a);
216
+ await Gt(e, t, n, r, i, a);
217
217
  return;
218
218
  }
219
- }, Vt = async (e, t, n, r, i, a) => {
220
- let o = n.target(), s = n.sourceKey ?? Gt(i, o.tableName);
219
+ }, Ht = async (e, t, n, r, i, a) => {
220
+ let o = n.target(), s = n.sourceKey ?? Kt(i, o.tableName);
221
221
  if (s !== void 0) {
222
222
  let n = N(e, s), i = n.length === 0 ? [] : await P(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
223
223
  for (let n of e) {
@@ -234,8 +234,8 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
234
234
  n[t] = e == null ? null : f.get(e) ?? null;
235
235
  }
236
236
  await F(d, r.with, o, a);
237
- }, Ht = async (e, t, n, r, i, a) => {
238
- let o = n.target(), s = n.foreignKey ?? A(o, i.tableName, t), c = n.sourceKey ?? "id", l = N(e, c), u = Ut(r), d = l.length === 0 ? [] : await P(o, s, l, u, a), f = /* @__PURE__ */ new Map();
237
+ }, Ut = async (e, t, n, r, i, a) => {
238
+ let o = n.target(), s = n.foreignKey ?? A(o, i.tableName, t), c = n.sourceKey ?? "id", l = N(e, c), u = Wt(r), d = l.length === 0 ? [] : await P(o, s, l, u, a), f = /* @__PURE__ */ new Map();
239
239
  for (let e of d) {
240
240
  let t = e[s], n = f.get(t);
241
241
  n ? n.push(e) : f.set(t, [e]);
@@ -252,10 +252,10 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
252
252
  n[t] = f.get(e) ?? [];
253
253
  }
254
254
  await F(d, r.with, o, a);
255
- }, Ut = (e) => {
255
+ }, Wt = (e) => {
256
256
  let { limit: t, offset: n, ...r } = e;
257
257
  return r;
258
- }, Wt = async (e, t, n, r, i, a) => {
258
+ }, Gt = async (e, t, n, r, i, a) => {
259
259
  let o = n.target(), s = n.through(), c = N(e, "id");
260
260
  if (c.length === 0) {
261
261
  for (let n of e) n[t] = [];
@@ -286,7 +286,7 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
286
286
  }
287
287
  for (let n of e) n[t] = m.get(n.id) ?? [];
288
288
  await F(f, r.with, o, a);
289
- }, Gt = (e, t) => {
289
+ }, Kt = (e, t) => {
290
290
  for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
291
291
  }, N = (e, t) => {
292
292
  let n = /* @__PURE__ */ new Set();
@@ -310,28 +310,28 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
310
310
  projection: void 0
311
311
  });
312
312
  }, F = async (e, t, n, r) => {
313
- t !== void 0 && e.length !== 0 && (await zt(e, t, n, r)).forEach((t, n) => {
313
+ t !== void 0 && e.length !== 0 && (await Bt(e, t, n, r)).forEach((t, n) => {
314
314
  let r = e[n];
315
315
  for (let [e, n] of Object.entries(t)) e in r || (r[e] = n);
316
316
  });
317
- }, Kt = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, qt = class extends Error {
317
+ }, qt = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, Jt = class extends Error {
318
318
  _tag = "TenantNamespaceUnresolved";
319
319
  constructor(e) {
320
320
  super(e), this.name = "TenantNamespaceUnresolved";
321
321
  }
322
- }, Jt = class extends Error {
322
+ }, Yt = class extends Error {
323
323
  _tag = "TenantNamespaceInvalid";
324
324
  constructor(e) {
325
325
  super(e), this.name = "TenantNamespaceInvalid";
326
326
  }
327
- }, Yt = 63, Xt = "tenant_", Zt = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), Qt = (e) => {
328
- if (e == null || e === "") throw new qt("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.");
329
- let t = Zt(e);
330
- if (t.replace(/_/g, "") === "") throw new Jt(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
331
- let n = `${Xt}${t}`;
332
- if (n.length > Yt) throw new Jt(`namespace '${n}' for tenant '${e}' exceeds the ${Yt}-byte identifier limit. Use a shorter tenant id.`);
327
+ }, Xt = 63, Zt = "tenant_", Qt = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), $t = (e) => {
328
+ if (e == null || e === "") throw new Jt("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.");
329
+ let t = Qt(e);
330
+ if (t.replace(/_/g, "") === "") throw new Yt(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
331
+ let n = `${Zt}${t}`;
332
+ if (n.length > Xt) throw new Yt(`namespace '${n}' for tenant '${e}' exceeds the ${Xt}-byte identifier limit. Use a shorter tenant id.`);
333
333
  return n;
334
- }, I = (e, t) => e === null ? t : `${e}.${t}`, $t = (e, t) => {
334
+ }, I = (e, t) => e === null ? t : `${e}.${t}`, en = (e, t) => {
335
335
  let { strings: n, values: r } = e, i = t.unsafe(n[0] ?? "");
336
336
  for (let e = 0; e < r.length; e++) i = t`${i}${r[e]}${t.unsafe(n[e + 1] ?? "")}`;
337
337
  return t`${i}`;
@@ -348,15 +348,15 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
348
348
  return r.op === "exists" ? t`EXISTS (${i})` : t`NOT EXISTS (${i})`;
349
349
  }
350
350
  let r = e, i = t(r.column), a = r.path, o = a !== void 0 && a.length > 0, s = () => t.onDialectOrElse({
351
- mysql: () => t.unsafe(w(r.column, a, "mysql")),
352
- mssql: () => t.unsafe(w(r.column, a, "mssql")),
353
- sqlite: () => t.unsafe(w(r.column, a, "sqlite")),
354
- orElse: () => t.unsafe(w(r.column, a, "postgres"))
351
+ mysql: () => t.unsafe(T(r.column, a, "mysql")),
352
+ mssql: () => t.unsafe(T(r.column, a, "mssql")),
353
+ sqlite: () => t.unsafe(T(r.column, a, "sqlite")),
354
+ orElse: () => t.unsafe(T(r.column, a, "postgres"))
355
355
  }), c = () => t.onDialectOrElse({
356
- mysql: () => t.unsafe(w(r.column, a, "mysql", { numeric: !0 })),
357
- mssql: () => t.unsafe(w(r.column, a, "mssql", { numeric: !0 })),
358
- sqlite: () => t.unsafe(w(r.column, a, "sqlite", { numeric: !0 })),
359
- orElse: () => t.unsafe(w(r.column, a, "postgres", { numeric: !0 }))
356
+ mysql: () => t.unsafe(T(r.column, a, "mysql", { numeric: !0 })),
357
+ mssql: () => t.unsafe(T(r.column, a, "mssql", { numeric: !0 })),
358
+ sqlite: () => t.unsafe(T(r.column, a, "sqlite", { numeric: !0 })),
359
+ orElse: () => t.unsafe(T(r.column, a, "postgres", { numeric: !0 }))
360
360
  }), l = o ? s() : i, u = o ? c() : i, d = (e) => o && e != null ? String(e) : e, f = (e) => o ? Number(e) : e;
361
361
  switch (r.op) {
362
362
  case "eq": return t`${l} = ${d(r.value)}`;
@@ -424,13 +424,13 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
424
424
  });
425
425
  }
426
426
  }
427
- }, en = (e, t) => {
427
+ }, tn = (e, t) => {
428
428
  let n = [];
429
429
  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}`);
430
- }, tn = (e, t) => t.csv(e.map((e) => {
430
+ }, nn = (e, t) => t.csv(e.map((e) => {
431
431
  let n = e.column === void 0 ? t.unsafe("*") : t`${t(e.column)}`;
432
432
  if (e.op.startsWith("window-")) {
433
- let r = en(e.window ?? {}, t);
433
+ let r = tn(e.window ?? {}, t);
434
434
  switch (e.op) {
435
435
  case "window-row-number": return t`ROW_NUMBER() OVER (${r}) AS ${t(e.alias)}`;
436
436
  case "window-rank": return t`RANK() OVER (${r}) AS ${t(e.alias)}`;
@@ -454,39 +454,39 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
454
454
  return t`${t(e.column)} AS ${t(e.alias)}`;
455
455
  default: throw Error(`compileAggregateProjection: unknown op '${e.op}'`);
456
456
  }
457
- })), nn = (e) => `[${e.join(",")}]`, rn = (e, t) => {
457
+ })), rn = (e) => `[${e.join(",")}]`, an = (e, t) => {
458
458
  if (e.queryVector === void 0) return null;
459
- let n = t(e.column), r = nn(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
459
+ let n = t(e.column), r = rn(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
460
460
  return t.onDialectOrElse({
461
461
  mysql: () => t`${t.unsafe(a)}(${n}, ${r})`,
462
462
  mssql: () => t`NULL`,
463
463
  sqlite: () => t`NULL`,
464
464
  orElse: () => t`${n} ${t.unsafe(i)} ${r}::vector`
465
465
  });
466
- }, an = (e, t) => {
466
+ }, on = (e, t) => {
467
467
  let n = t.unsafe(e.useGeography ? "::geography" : "::geometry");
468
468
  return t`ST_Distance(${t(e.column)}${n}, ${e.geom}${n})`;
469
- }, on = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, sn = (e, t) => t`${t(`${e.indexName}_tsv`)}`, cn = (e, t) => `${t}_${e.indexName}_fts`, ln = (e, t, n) => {
469
+ }, sn = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, cn = (e, t) => t`${t(`${e.indexName}_tsv`)}`, ln = (e, t) => `${t}_${e.indexName}_fts`, un = (e, t, n) => {
470
470
  let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${L(e.query)}%`;
471
471
  return n.onDialectOrElse({
472
472
  mysql: () => n`MATCH(${r}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
473
473
  sqlite: () => {
474
- let r = n(cn(e, t));
474
+ let r = n(ln(e, t));
475
475
  return n`${n("id")} IN (SELECT ${n("row_id")} FROM ${r} WHERE ${r} MATCH ${e.query})`;
476
476
  },
477
477
  mssql: () => n.or(e.columns.map((e) => n`LOWER(${n(e)}) LIKE LOWER(${i}) ESCAPE '\\'`)),
478
- orElse: () => n`${sn(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
478
+ orElse: () => n`${cn(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
479
479
  });
480
- }, un = (e, t, n) => {
480
+ }, dn = (e, t, n) => {
481
481
  let r = `%${L(e.query)}%`;
482
482
  return n.onDialectOrElse({
483
483
  mysql: () => n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
484
484
  sqlite: () => {
485
- let r = n(cn(e, t));
485
+ let r = n(ln(e, t));
486
486
  return n`COALESCE((SELECT -bm25(${r}) FROM ${r} WHERE ${r} MATCH ${e.query} AND ${r}.${n("row_id")} = ${n("id")}), 0)`;
487
487
  },
488
488
  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}`),
489
- orElse: () => n`ts_rank(${sn(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
489
+ orElse: () => n`ts_rank(${cn(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
490
490
  });
491
491
  }, z = (e, t, n = null) => {
492
492
  if (e.setOp && e.setOp.queries.length >= 2) {
@@ -501,7 +501,7 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
501
501
  }
502
502
  return t`${i}${a.reduce((e, n) => t`${e}${n}`, t``)}`;
503
503
  }
504
- let r = e.annClause === void 0 ? null : rn(e.annClause, t);
504
+ let r = e.annClause === void 0 ? null : an(e.annClause, t);
505
505
  e.spatialClause !== void 0 && t.onDialectOrElse({
506
506
  mysql: () => {
507
507
  throw Error("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
@@ -514,7 +514,7 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
514
514
  },
515
515
  orElse: () => t``
516
516
  });
517
- let i = e.spatialClause?.projectAs === void 0 ? null : an(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? tn(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 ? un(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({
517
+ let i = e.spatialClause?.projectAs === void 0 ? null : on(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? nn(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 ? dn(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({
518
518
  orElse: () => t`DISTINCT ON (${t.csv(e.distinctOn.map((e) => t`${t(e)}`))}) `,
519
519
  mysql: () => t`DISTINCT `,
520
520
  mssql: () => t`DISTINCT `,
@@ -522,43 +522,43 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
522
522
  }) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(I(n, e.table))}` : t`${t(I(n, e.table))} AS ${t(e.alias)}`, m = (e.joins ?? []).map((e) => {
523
523
  let r = e.kind === "inner" ? "INNER" : "LEFT";
524
524
  return t` ${t.unsafe(r)} JOIN ${t(I(n, e.table))} AS ${t(e.alias)} ON ${R(e.on, t, n)}`;
525
- }), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null : ln(c, e.table, t), _ = [e.predicate ? R(e.predicate, t, n) : null, g].filter((e) => e !== null), ee = _.length > 0 ? t` WHERE ${t.and(_)}` : t``, v = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, y = e.having ? t` HAVING ${R(e.having, t, n)}` : t``, b = e.skip !== void 0, x = [];
526
- r !== null && x.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && x.push(e.spatialClause.order === "desc" ? t`${on(e.spatialClause, t)} DESC` : t`${on(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && x.push(t`${l} DESC`);
527
- for (let n of e.order) x.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
528
- let te = x.length > 0 ? t` ORDER BY ${t.csv(x)}` : b ? t.onDialectOrElse({
525
+ }), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null : un(c, e.table, t), _ = [e.predicate ? R(e.predicate, t, n) : null, g].filter((e) => e !== null), ee = _.length > 0 ? t` WHERE ${t.and(_)}` : t``, te = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, v = e.having ? t` HAVING ${R(e.having, t, n)}` : t``, y = e.skip !== void 0, b = [];
526
+ r !== null && b.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && b.push(e.spatialClause.order === "desc" ? t`${sn(e.spatialClause, t)} DESC` : t`${sn(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && b.push(t`${l} DESC`);
527
+ for (let n of e.order) b.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
528
+ let ne = b.length > 0 ? t` ORDER BY ${t.csv(b)}` : y ? t.onDialectOrElse({
529
529
  mssql: () => t` ORDER BY (SELECT NULL)`,
530
530
  orElse: () => t``
531
- }) : t``, S = (e) => {
531
+ }) : t``, x = (e) => {
532
532
  if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`compileSelect: expected non-negative integer take/skip, got ${e}`);
533
533
  return t.unsafe(String(e));
534
- }, C = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${z(e.descriptor, t, n)})`), ne = (e.ctes ?? []).some((e) => e.recursive === !0), re = C.length > 0 ? t`WITH ${t.unsafe(ne ? "RECURSIVE " : "")}${t.csv(C)} ` : t``;
534
+ }, S = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${z(e.descriptor, t, n)})`), re = (e.ctes ?? []).some((e) => e.recursive === !0), ie = S.length > 0 ? t`WITH ${t.unsafe(re ? "RECURSIVE " : "")}${t.csv(S)} ` : t``;
535
535
  return t.onDialectOrElse({
536
536
  mssql: () => {
537
- let n = e.take !== void 0 && !b ? t`TOP ${S(e.take)} ` : t``, r = b ? t` OFFSET ${S(e.skip)} ROWS FETCH NEXT ${S(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
538
- return t`${re}SELECT ${n}${f}${d} FROM ${h}${ee}${v}${y}${te}${r}`;
537
+ 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``;
538
+ return t`${ie}SELECT ${n}${f}${d} FROM ${h}${ee}${te}${v}${ne}${r}`;
539
539
  },
540
540
  orElse: () => {
541
- let n = e.take === void 0 ? t`` : t` LIMIT ${S(e.take)}`, r = b ? t` OFFSET ${S(e.skip)}` : t``;
542
- return t`${re}SELECT ${f}${d} FROM ${h}${ee}${v}${y}${te}${n}${r}`;
541
+ let n = e.take === void 0 ? t`` : t` LIMIT ${x(e.take)}`, r = y ? t` OFFSET ${x(e.skip)}` : t``;
542
+ return t`${ie}SELECT ${f}${d} FROM ${h}${ee}${te}${v}${ne}${n}${r}`;
543
543
  }
544
544
  });
545
- }, dn = (e, t, n) => {
545
+ }, fn = (e, t, n) => {
546
546
  if (e.eager === void 0) return null;
547
- let r = fn(e.table, e.eager, e.sourceTable);
547
+ let r = pn(e.table, e.eager, e.sourceTable);
548
548
  if (r === null) return null;
549
- let i = gn(n, e, r, hn(t, n));
549
+ let i = _n(n, e, r, gn(t, n));
550
550
  return i === null ? null : {
551
551
  fragment: i,
552
- decode: _n(r)
552
+ decode: vn(r)
553
553
  };
554
- }, fn = (e, t, n) => {
555
- let r = n ?? f(e), i = M(e);
554
+ }, pn = (e, t, n) => {
555
+ let r = n ?? g(e), i = M(e);
556
556
  if (i === void 0) return null;
557
557
  let a = [];
558
558
  for (let [e, n] of Object.entries(t)) {
559
559
  let t = i[e];
560
560
  if (t === void 0) return null;
561
- let o = pn(e, t, r, n === !0 ? {} : n);
561
+ let o = mn(e, t, r, n === !0 ? {} : n);
562
562
  if (o === null) return null;
563
563
  a.push(o);
564
564
  }
@@ -566,11 +566,11 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
566
566
  table: r,
567
567
  children: a
568
568
  };
569
- }, pn = (e, t, n, r) => {
569
+ }, mn = (e, t, n, r) => {
570
570
  let i = t.target(), a = (t.kind === "manyToMany" ? void 0 : t.sourceKey) ?? "id", o, s;
571
571
  if (t.kind === "manyToMany") o = t.targetKey, s = "target";
572
572
  else if (t.kind === "one") {
573
- let r = mn(n, i.tableName);
573
+ let r = hn(n, i.tableName);
574
574
  if (r !== void 0) o = r, s = "source";
575
575
  else try {
576
576
  o = t.foreignKey ?? A(i, n.tableName, e), s = "target";
@@ -589,7 +589,7 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
589
589
  for (let [n, a] of Object.entries(r.with)) {
590
590
  let r = e?.[n];
591
591
  if (r === void 0) return null;
592
- let o = pn(n, r, i, a === !0 ? {} : a);
592
+ let o = mn(n, r, i, a === !0 ? {} : a);
593
593
  if (o === null) return null;
594
594
  t.push(o);
595
595
  }
@@ -606,35 +606,35 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
606
606
  branch: r,
607
607
  children: c
608
608
  };
609
- }, mn = (e, t) => {
610
- for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
611
609
  }, hn = (e, t) => {
610
+ for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
611
+ }, gn = (e, t) => {
612
612
  let n = 0;
613
613
  return {
614
614
  sql: e,
615
615
  dialect: t,
616
616
  nextAlias: () => `__a${n++}`
617
617
  };
618
- }, gn = (e, t, n, r) => {
618
+ }, _n = (e, t, n, r) => {
619
619
  switch (e) {
620
- case "postgres": return yn(t, n, r);
620
+ case "postgres": return bn(t, n, r);
621
621
  case "sqlite":
622
- case "turso": return Tn(t, n, r);
622
+ case "turso": return Dn(t, n, r);
623
623
  case "mysql":
624
- case "mariadb": return jn(t, n, r);
625
- case "mssql": return Rn(t, n, r);
624
+ case "mariadb": return Mn(t, n, r);
625
+ case "mssql": return zn(t, n, r);
626
626
  }
627
- }, _n = (e) => {
628
- let t = vn(e.table, e.children);
627
+ }, vn = (e) => {
628
+ let t = yn(e.table, e.children);
629
629
  return (e) => e.map((e) => {
630
630
  let n = e.__row, r = typeof n == "string" ? JSON.parse(n) : n;
631
631
  return t(r);
632
632
  });
633
- }, vn = (e, t) => {
633
+ }, yn = (e, t) => {
634
634
  let n = [];
635
635
  for (let [t, r] of Object.entries(e.fields)) (r.type === "timestamp" || r.type === "date") && n.push(t);
636
636
  let r = t.map((e) => {
637
- let t = vn(e.target, e.children), n = e.relation.kind === "one";
637
+ let t = yn(e.target, e.children), n = e.relation.kind === "one";
638
638
  return {
639
639
  name: e.relationName,
640
640
  decode: t,
@@ -657,76 +657,76 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
657
657
  }
658
658
  return t;
659
659
  };
660
- }, yn = (e, t, n) => {
661
- let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = B(i, t.children, n);
660
+ }, bn = (e, t, n) => {
661
+ let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = xn(i, t.children, n);
662
662
  return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${K(e.predicate, i, r)}` : r``}${e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${U(i, e.column, r)} DESC` : r`${U(i, e.column, r)} ASC`))}` : r``}${e.take === void 0 ? r`` : r` LIMIT ${G(e.take, r)}`}${e.skip === void 0 ? r`` : r` OFFSET ${G(e.skip, r)}`}`;
663
- }, B = (e, t, n) => {
663
+ }, xn = (e, t, n) => {
664
664
  let r = n.sql, i = r`to_jsonb(${r(e)}.*)`;
665
665
  if (t.length === 0) return i;
666
666
  let a = [];
667
667
  for (let i of t) {
668
- let t = bn(i, e, n);
668
+ let t = Sn(i, e, n);
669
669
  if (t === null) return null;
670
670
  a.push(r`${W(i.relationName, r)}, ${t}`);
671
671
  }
672
672
  return r`${i} || jsonb_build_object(${r.csv(a)})`;
673
- }, bn = (e, t, n) => {
673
+ }, Sn = (e, t, n) => {
674
674
  switch (n.sql, e.relation.kind) {
675
- case "one": return xn(e, t, n);
676
- case "many": return Sn(e, t, n);
677
- case "manyToMany": return Cn(e, t, n);
675
+ case "one": return Cn(e, t, n);
676
+ case "many": return wn(e, t, n);
677
+ case "manyToMany": return Tn(e, t, n);
678
678
  }
679
- }, xn = (e, t, n) => {
680
- let r = n.sql, i = n.nextAlias(), a = B(i, e.children, n);
679
+ }, Cn = (e, t, n) => {
680
+ let r = n.sql, i = n.nextAlias(), a = xn(i, e.children, n);
681
681
  if (a === null) return null;
682
- let o = e.fkSide === "source" ? r`${U(i, "id", r)} = ${U(t, e.foreignKey, r)}` : r`${U(i, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${K(e.branch.where, i, r)}`, c = V(i, e.branch.orderBy, r);
682
+ let o = e.fkSide === "source" ? r`${U(i, "id", r)} = ${U(t, e.foreignKey, r)}` : r`${U(i, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${K(e.branch.where, i, r)}`, c = B(i, e.branch.orderBy, r);
683
683
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}${c} LIMIT 1)`;
684
- }, Sn = (e, t, n) => {
685
- let r = n.sql, i = n.nextAlias(), a = B(i, e.children, n);
684
+ }, wn = (e, t, n) => {
685
+ let r = n.sql, i = n.nextAlias(), a = xn(i, e.children, n);
686
686
  if (a === null) return null;
687
- let o = r`${U(void 0, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${R(e.branch.where, r)}`, c = wn(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
687
+ let o = r`${U(void 0, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${R(e.branch.where, r)}`, c = En(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
688
688
  return r`COALESCE((SELECT jsonb_agg(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), '[]'::jsonb)`;
689
- }, Cn = (e, t, n) => {
690
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = B(o, e.children, n);
689
+ }, Tn = (e, t, n) => {
690
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = xn(o, e.children, n);
691
691
  if (c === null) return null;
692
- let l = e.branch.where === void 0 ? r`` : r` AND ${R(e.branch.where, r)}`, u = q(e, s, r), d = V(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
692
+ let l = e.branch.where === void 0 ? r`` : r` AND ${R(e.branch.where, r)}`, u = q(e, s, r), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
693
693
  return r`COALESCE((SELECT jsonb_agg(${c}) FROM (SELECT ${r(o)}.* FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${U(o, "id", r)} = ${U(s, i.targetKey, r)} WHERE ${U(s, i.sourceKey, r)} = ${U(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), '[]'::jsonb)`;
694
- }, V = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${U(e, t.column, n)} DESC` : n`${U(e, t.column, n)} ASC`))}`, wn = (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`))}`, Tn = (e, t, n) => {
695
- let r = n.sql, i = n.nextAlias(), a = En(i, t.table, t.children, n);
694
+ }, B = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${U(e, t.column, n)} DESC` : n`${U(e, t.column, n)} ASC`))}`, En = (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`))}`, Dn = (e, t, n) => {
695
+ let r = n.sql, i = n.nextAlias(), a = V(i, t.table, t.children, n);
696
696
  if (a === null) return null;
697
697
  let o = e.predicate ? r` WHERE ${K(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${U(i, e.column, r)} DESC` : r`${U(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${G(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${G(e.skip, r)}`;
698
698
  return r`SELECT ${a} AS "__row" FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
699
- }, En = (e, t, n, r) => {
699
+ }, V = (e, t, n, r) => {
700
700
  let i = r.sql, a = [];
701
701
  for (let n of Object.keys(t.fields)) a.push(i`${W(n, i)}, ${U(e, n, i)}`);
702
702
  for (let t of n) {
703
- let n = Dn(t, e, r);
703
+ let n = On(t, e, r);
704
704
  if (n === null) return null;
705
705
  a.push(i`${W(t.relationName, i)}, ${n}`);
706
706
  }
707
707
  return i`json_object(${i.csv(a)})`;
708
- }, Dn = (e, t, n) => {
708
+ }, On = (e, t, n) => {
709
709
  switch (e.relation.kind) {
710
- case "one": return On(e, t, n);
711
- case "many": return kn(e, t, n);
712
- case "manyToMany": return An(e, t, n);
710
+ case "one": return kn(e, t, n);
711
+ case "many": return An(e, t, n);
712
+ case "manyToMany": return jn(e, t, n);
713
713
  }
714
- }, On = (e, t, n) => {
715
- let r = n.sql, i = n.nextAlias(), a = En(i, e.target, e.children, n);
714
+ }, kn = (e, t, n) => {
715
+ let r = n.sql, i = n.nextAlias(), a = V(i, e.target, e.children, n);
716
716
  if (a === null) return null;
717
717
  let o = e.fkSide === "source" ? r`${U(i, "id", r)} = ${U(t, e.foreignKey, r)}` : r`${U(i, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`;
718
718
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
719
- }, kn = (e, t, n) => {
720
- let r = n.sql, i = n.nextAlias(), a = En(i, e.target, e.children, n);
719
+ }, An = (e, t, n) => {
720
+ let r = n.sql, i = n.nextAlias(), a = V(i, e.target, e.children, n);
721
721
  if (a === null) return null;
722
- let o = r`${U(void 0, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, c = wn(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
722
+ let o = r`${U(void 0, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, c = En(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
723
723
  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('[]'))`;
724
- }, An = (e, t, n) => {
725
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = En(o, e.target, e.children, n);
724
+ }, jn = (e, t, n) => {
725
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = V(o, e.target, e.children, n);
726
726
  if (c === null) return null;
727
- let l = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, u = q(e, s, r, !0), d = V(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
727
+ let l = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, u = q(e, s, r, !0), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
728
728
  return r`COALESCE((SELECT json_group_array(${c}) FROM (SELECT ${r(o)}.* FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${U(o, "id", r)} = ${U(s, i.targetKey, r)} WHERE ${U(s, i.sourceKey, r)} = ${U(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), json('[]'))`;
729
- }, jn = (e, t, n) => {
729
+ }, Mn = (e, t, n) => {
730
730
  let r = n.sql, i = n.nextAlias(), a = H(i, t.table, t.children, n);
731
731
  if (a === null) return null;
732
732
  let o = e.predicate ? r` WHERE ${K(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${U(i, e.column, r)} DESC` : r`${U(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${G(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${G(e.skip, r)}`;
@@ -735,48 +735,48 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
735
735
  let i = r.sql, a = [];
736
736
  for (let n of Object.keys(t.fields)) a.push(i`${W(n, i)}, ${U(e, n, i)}`);
737
737
  for (let t of n) {
738
- let n = Mn(t, e, r);
738
+ let n = Nn(t, e, r);
739
739
  if (n === null) return null;
740
740
  a.push(i`${W(t.relationName, i)}, ${n}`);
741
741
  }
742
742
  return i`JSON_OBJECT(${i.csv(a)})`;
743
- }, Mn = (e, t, n) => {
743
+ }, Nn = (e, t, n) => {
744
744
  switch (e.relation.kind) {
745
- case "one": return Nn(e, t, n);
746
- case "many": return n.dialect === "mariadb" ? In(e, t, n) : Pn(e, t, n);
747
- case "manyToMany": return n.dialect === "mariadb" ? Ln(e, t, n) : Fn(e, t, n);
745
+ case "one": return Pn(e, t, n);
746
+ case "many": return n.dialect === "mariadb" ? Ln(e, t, n) : Fn(e, t, n);
747
+ case "manyToMany": return n.dialect === "mariadb" ? Rn(e, t, n) : In(e, t, n);
748
748
  }
749
- }, Nn = (e, t, n) => {
749
+ }, Pn = (e, t, n) => {
750
750
  let r = n.sql, i = n.nextAlias(), a = H(i, e.target, e.children, n);
751
751
  if (a === null) return null;
752
752
  let o = e.fkSide === "source" ? r`${U(i, "id", r)} = ${U(t, e.foreignKey, r)}` : r`${U(i, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`;
753
753
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
754
- }, Pn = (e, t, n) => {
754
+ }, Fn = (e, t, n) => {
755
755
  let r = n.sql, i = n.nextAlias(), a = H(i, e.target, e.children, n);
756
756
  if (a === null) return null;
757
- let o = r`${U(void 0, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, c = wn(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
757
+ let o = r`${U(void 0, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, c = En(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
758
758
  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())`;
759
- }, Fn = (e, t, n) => {
759
+ }, In = (e, t, n) => {
760
760
  let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = H(o, e.target, e.children, n);
761
761
  if (c === null) return null;
762
- let l = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, u = q(e, s, r, !0), d = V(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
762
+ let l = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, u = q(e, s, r, !0), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
763
763
  return r`COALESCE((SELECT JSON_ARRAYAGG(${c}) FROM (SELECT ${r(o)}.* FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${U(o, "id", r)} = ${U(s, i.targetKey, r)} WHERE ${U(s, i.sourceKey, r)} = ${U(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), JSON_ARRAY())`;
764
- }, In = (e, t, n) => {
764
+ }, Ln = (e, t, n) => {
765
765
  let r = n.sql, i = n.nextAlias(), a = H(i, e.target, e.children, n);
766
766
  if (a === null) return null;
767
767
  let o = r`${U(i, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
768
768
  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`${U(i, e.column, r)} DESC` : r`${U(i, e.column, r)} ASC`))}` : r``}) FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}), JSON_ARRAY())`;
769
769
  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 ${U(i, "rn", r)} > ${G(d, r)} AND ${U(i, "rn", r)} <= ${G(d + u, r)}` : u === void 0 ? r` AND ${U(i, "rn", r)} > ${G(d, r)}` : r` AND ${U(i, "rn", r)} <= ${G(u, r)}`;
770
770
  return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${U(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())`;
771
- }, Ln = (e, t, n) => {
771
+ }, Rn = (e, t, n) => {
772
772
  let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = H(o, e.target, e.children, n);
773
773
  if (c === null) return null;
774
774
  let l = r`${U(s, i.sourceKey, r)} = ${U(t, "id", r)}`, u = r`${U(o, "id", r)} = ${U(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, f = q(e, s, r, !0), p = e.branch.orderBy ?? [];
775
775
  if (!(e.branch.limit !== void 0 || e.branch.offset !== void 0)) return r`COALESCE((SELECT JSON_ARRAYAGG(${c}${p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${U(o, e.column, r)} DESC` : r`${U(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())`;
776
- let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${U(o, e.column, r)} DESC` : r`${U(o, e.column, r)} ASC`))}` : r` ORDER BY ${U(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, _ = n.nextAlias(), ee = h !== void 0 && g !== void 0 ? r` AND ${U(_, "rn", r)} > ${G(g, r)} AND ${U(_, "rn", r)} <= ${G(g + h, r)}` : h === void 0 ? r` AND ${U(_, "rn", r)} > ${G(g, r)}` : r` AND ${U(_, "rn", r)} <= ${G(h, r)}`, v = e.branch.onJunction === void 0 ? r`` : r` WHERE ${K(J(e.branch.onJunction), s, r)}`;
777
- return r`COALESCE((SELECT JSON_ARRAYAGG(${c} ORDER BY ${U(_, "rn", r)}) FROM (SELECT ${r(o)}.*, ${U(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${U(s, i.sourceKey, r)}${m}) AS rn FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u}${v}) AS ${r(_)} WHERE ${U(_, `__src_${i.sourceKey}`, r)} = ${U(t, "id", r)}${d}${ee}), JSON_ARRAY())`;
778
- }, Rn = (e, t, n) => {
779
- let r = n.sql, i = n.nextAlias(), a = zn(i, t.table, t.children, n);
776
+ let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${U(o, e.column, r)} DESC` : r`${U(o, e.column, r)} ASC`))}` : r` ORDER BY ${U(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, _ = n.nextAlias(), ee = h !== void 0 && g !== void 0 ? r` AND ${U(_, "rn", r)} > ${G(g, r)} AND ${U(_, "rn", r)} <= ${G(g + h, r)}` : h === void 0 ? r` AND ${U(_, "rn", r)} > ${G(g, r)}` : r` AND ${U(_, "rn", r)} <= ${G(h, r)}`, te = e.branch.onJunction === void 0 ? r`` : r` WHERE ${K(J(e.branch.onJunction), s, r)}`;
777
+ return r`COALESCE((SELECT JSON_ARRAYAGG(${c} ORDER BY ${U(_, "rn", r)}) FROM (SELECT ${r(o)}.*, ${U(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${U(s, i.sourceKey, r)}${m}) AS rn FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u}${te}) AS ${r(_)} WHERE ${U(_, `__src_${i.sourceKey}`, r)} = ${U(t, "id", r)}${d}${ee}), JSON_ARRAY())`;
778
+ }, zn = (e, t, n) => {
779
+ let r = n.sql, i = n.nextAlias(), a = Bn(i, t.table, t.children, n);
780
780
  if (a === null) return null;
781
781
  let o = e.predicate ? r` WHERE ${K(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${U(i, e.column, r)} DESC` : r`${U(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
782
782
  if (e.skip !== void 0) {
@@ -785,28 +785,28 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
785
785
  } else e.take !== void 0 && (c = r`TOP ${G(e.take, r)} `);
786
786
  let u = e.skip === void 0 ? s : r``;
787
787
  return r`SELECT [__row] = (SELECT ${c}${a} FROM ${r(t.table.tableName)} AS ${r(i)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER)`;
788
- }, zn = (e, t, n, r) => {
788
+ }, Bn = (e, t, n, r) => {
789
789
  let i = r.sql, a = [];
790
790
  for (let n of Object.keys(t.fields)) a.push(i`${U(e, n, i)} AS ${i(n)}`);
791
791
  for (let t of n) {
792
- let n = Bn(t, e, r);
792
+ let n = Vn(t, e, r);
793
793
  if (n === null) return null;
794
794
  a.push(n);
795
795
  }
796
796
  return i.csv(a);
797
- }, Bn = (e, t, n) => {
797
+ }, Vn = (e, t, n) => {
798
798
  let r = n.sql;
799
799
  switch (e.relation.kind) {
800
800
  case "one": {
801
- let i = n.nextAlias(), a = zn(i, e.target, e.children, n);
801
+ let i = n.nextAlias(), a = Bn(i, e.target, e.children, n);
802
802
  if (a === null) return null;
803
803
  let o = e.fkSide === "source" ? r`${U(i, "id", r)} = ${U(t, e.foreignKey, r)}` : r`${U(i, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`;
804
804
  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)}`;
805
805
  }
806
806
  case "many": {
807
- let i = n.nextAlias(), a = zn(i, e.target, e.children, n);
807
+ let i = n.nextAlias(), a = Bn(i, e.target, e.children, n);
808
808
  if (a === null) return null;
809
- let o = e.branch.where === void 0 ? r`` : r` AND ${K(e.branch.where, i, r)}`, s = V(i, e.branch.orderBy, r), c = r``, l = r``;
809
+ let o = e.branch.where === void 0 ? r`` : r` AND ${K(e.branch.where, i, r)}`, s = B(i, e.branch.orderBy, r), c = r``, l = r``;
810
810
  if (e.branch.offset !== void 0) {
811
811
  let t = e.branch.orderBy && e.branch.orderBy.length > 0 ? s : r` ORDER BY (SELECT NULL)`;
812
812
  l = e.branch.limit === void 0 ? r`${t} OFFSET ${G(e.branch.offset, r)} ROWS` : r`${t} OFFSET ${G(e.branch.offset, r)} ROWS FETCH NEXT ${G(e.branch.limit, r)} ROWS ONLY`;
@@ -815,9 +815,9 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
815
815
  return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${U(i, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
816
816
  }
817
817
  case "manyToMany": {
818
- let i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = zn(o, e.target, e.children, n);
818
+ let i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Bn(o, e.target, e.children, n);
819
819
  if (c === null) return null;
820
- let l = e.branch.where === void 0 ? r`` : r` AND ${K(e.branch.where, o, r)}`, u = q(e, s, r), d = V(o, e.branch.orderBy, r), f = r``, p = r``;
820
+ let l = e.branch.where === void 0 ? r`` : r` AND ${K(e.branch.where, o, r)}`, u = q(e, s, r), d = B(o, e.branch.orderBy, r), f = r``, p = r``;
821
821
  if (e.branch.offset !== void 0) {
822
822
  let t = e.branch.orderBy && e.branch.orderBy.length > 0 ? d : r` ORDER BY (SELECT NULL)`;
823
823
  p = e.branch.limit === void 0 ? r`${t} OFFSET ${G(e.branch.offset, r)} ROWS` : r`${t} OFFSET ${G(e.branch.offset, r)} ROWS FETCH NEXT ${G(e.branch.limit, r)} ROWS ONLY`;
@@ -829,13 +829,13 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
829
829
  }, U = (e, t, n) => e === void 0 ? n`${n(t)}` : n`${n(e)}.${n(t)}`, W = (e, t) => t.unsafe(`'${e.replace(/'/g, "''")}'`), G = (e, t) => {
830
830
  if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`literalInt: expected non-negative integer, got ${e}`);
831
831
  return t.unsafe(String(e));
832
- }, K = (e, t, n) => R(Vn(e, t), n), q = (e, t, n, r = !1) => {
832
+ }, K = (e, t, n) => R(Hn(e, t), n), q = (e, t, n, r = !1) => {
833
833
  let i = e.branch.onJunction;
834
834
  return i === void 0 ? n`` : n` AND ${K(r ? J(i) : i, t, n)}`;
835
- }, Vn = (e, t) => {
836
- if ("not" in e) return { not: Vn(e.not, t) };
837
- if ("and" in e) return { and: e.and.map((e) => Vn(e, t)) };
838
- if ("or" in e) return { or: e.or.map((e) => Vn(e, t)) };
835
+ }, Hn = (e, t) => {
836
+ if ("not" in e) return { not: Hn(e.not, t) };
837
+ if ("and" in e) return { and: e.and.map((e) => Hn(e, t)) };
838
+ if ("or" in e) return { or: e.or.map((e) => Hn(e, t)) };
839
839
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
840
840
  let n = e;
841
841
  return {
@@ -857,83 +857,83 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
857
857
  let t = e;
858
858
  return {
859
859
  ...t,
860
- value: Hn(t.value)
860
+ value: Un(t.value)
861
861
  };
862
- }, Hn = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => Hn(e)) : e, Un = Symbol.for("@voltro/database/coreTablesRegistry"), Wn = globalThis, Gn = Wn[Un] ?? (Wn[Un] = {}), Kn = (e) => {
863
- e.actors !== void 0 && (Gn.actors = e.actors), e.tenants !== void 0 && (Gn.tenants = e.tenants);
864
- }, qn = (e, t) => () => {
862
+ }, Un = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => Un(e)) : e, Wn = Symbol.for("@voltro/database/coreTablesRegistry"), Gn = globalThis, Kn = Gn[Wn] ?? (Gn[Wn] = {}), qn = (e) => {
863
+ e.actors !== void 0 && (Kn.actors = e.actors), e.tenants !== void 0 && (Kn.tenants = e.tenants);
864
+ }, Jn = (e, t) => () => {
865
865
  let n = e();
866
866
  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`);
867
867
  return n();
868
- }, Jn = () => qn(() => Gn.actors, "actors"), Yn = () => qn(() => Gn.tenants, "tenants"), Xn = n("actors", {
869
- id: T(),
870
- kind: o().oneOf([
868
+ }, Yn = () => Jn(() => Kn.actors, "actors"), Xn = () => Jn(() => Kn.tenants, "tenants"), Zn = C("actors", {
869
+ id: D(),
870
+ kind: v().oneOf([
871
871
  "user",
872
872
  "serviceAccount",
873
873
  "apiKey",
874
874
  "system"
875
875
  ]),
876
- displayName: o().nullable(),
877
- createdAt: v().default("now")
878
- }), Zn = (e, t) => ({
876
+ displayName: v().nullable(),
877
+ createdAt: E().default("now")
878
+ }), Qn = (e, t) => ({
879
879
  column: e,
880
880
  op: "eq",
881
881
  value: t
882
- }), Qn = (e, t) => ({
882
+ }), $n = (e, t) => ({
883
883
  column: e,
884
884
  op: "neq",
885
885
  value: t
886
- }), $n = (e, t) => ({
886
+ }), er = (e, t) => ({
887
887
  column: e,
888
888
  op: "gt",
889
889
  value: t
890
- }), er = (e, t) => ({
890
+ }), tr = (e, t) => ({
891
891
  column: e,
892
892
  op: "gte",
893
893
  value: t
894
- }), tr = (e, t) => ({
894
+ }), nr = (e, t) => ({
895
895
  column: e,
896
896
  op: "lt",
897
897
  value: t
898
- }), nr = (e, t) => ({
898
+ }), rr = (e, t) => ({
899
899
  column: e,
900
900
  op: "lte",
901
901
  value: t
902
- }), rr = (e, t) => ({
902
+ }), ir = (e, t) => ({
903
903
  column: e,
904
904
  op: "in",
905
905
  value: t
906
- }), ir = (e, t) => ({
906
+ }), ar = (e, t) => ({
907
907
  column: e,
908
908
  op: "notIn",
909
909
  value: t
910
- }), ar = (e, t) => ({
910
+ }), or = (e, t) => ({
911
911
  column: e,
912
912
  op: "contains",
913
913
  value: t
914
- }), or = (e, t) => ({
914
+ }), sr = (e, t) => ({
915
915
  column: e,
916
916
  op: "arrayContains",
917
917
  value: t
918
- }), sr = (e, t) => ({
918
+ }), cr = (e, t) => ({
919
919
  column: e,
920
920
  op: "arrayOverlaps",
921
921
  value: t
922
- }), cr = (e, t) => ({
922
+ }), lr = (e, t) => ({
923
923
  column: e,
924
924
  op: "arrayHas",
925
925
  value: t
926
- }), lr = (e) => ({
926
+ }), ur = (e) => ({
927
927
  column: e,
928
928
  op: "isNull"
929
- }), ur = (e) => ({
929
+ }), dr = (e) => ({
930
930
  column: e,
931
931
  op: "isNotNull"
932
- }), dr = (e, t) => ({
932
+ }), fr = (e, t) => ({
933
933
  column: e,
934
934
  op: "spatial",
935
935
  value: t
936
- }), fr = (...e) => ({ and: e }), pr = (...e) => ({ or: e }), mr = (e) => ({ not: e }), hr = (e, ...t) => {
936
+ }), pr = (...e) => ({ and: e }), mr = (...e) => ({ or: e }), hr = (e) => ({ not: e }), gr = (e, ...t) => {
937
937
  if (t.length === 0) throw Error(`jsonField("${e}"): at least one path segment is required`);
938
938
  let n = (n, r) => ({
939
939
  column: e,
@@ -954,29 +954,29 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
954
954
  isNull: () => n("isNull"),
955
955
  isNotNull: () => n("isNotNull")
956
956
  };
957
- }, gr = (e) => "descriptor" in e ? e.descriptor : e, _r = (e, t) => ({
957
+ }, _r = (e) => "descriptor" in e ? e.descriptor : e, vr = (e, t) => ({
958
958
  column: e,
959
959
  op: "subquery-in",
960
- subquery: gr(t)
961
- }), vr = (e, t) => ({
960
+ subquery: _r(t)
961
+ }), yr = (e, t) => ({
962
962
  column: e,
963
963
  op: "subquery-not-in",
964
- subquery: gr(t)
965
- }), yr = (e) => ({
966
- op: "exists",
967
- subquery: gr(e)
964
+ subquery: _r(t)
968
965
  }), br = (e) => ({
966
+ op: "exists",
967
+ subquery: _r(e)
968
+ }), xr = (e) => ({
969
969
  op: "not-exists",
970
- subquery: gr(e)
971
- }), xr = (e, t) => e == null || t == null ? null : typeof e == typeof t ? e === t ? 0 : e > t ? 1 : -1 : null, Sr = (e, t, n = null) => {
970
+ subquery: _r(e)
971
+ }), Sr = (e, t) => e == null || t == null ? null : typeof e == typeof t ? e === t ? 0 : e > t ? 1 : -1 : null, Cr = (e, t, n = null) => {
972
972
  if (!t) return !1;
973
- if ("not" in e) return !Sr(e.not, t, n);
973
+ if ("not" in e) return !Cr(e.not, t, n);
974
974
  if ("and" in e) {
975
- for (let r of e.and) if (!Sr(r, t, n)) return !1;
975
+ for (let r of e.and) if (!Cr(r, t, n)) return !1;
976
976
  return !0;
977
977
  }
978
978
  if ("or" in e) {
979
- for (let r of e.or) if (Sr(r, t, n)) return !0;
979
+ for (let r of e.or) if (Cr(r, t, n)) return !0;
980
980
  return !1;
981
981
  }
982
982
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
@@ -995,10 +995,10 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
995
995
  switch (r.op) {
996
996
  case "eq": return i === r.value;
997
997
  case "neq": return i !== r.value;
998
- case "gt": return (xr(i, r.value) ?? -1) > 0;
999
- case "gte": return (xr(i, r.value) ?? -1) >= 0;
1000
- case "lt": return (xr(i, r.value) ?? 1) < 0;
1001
- case "lte": return (xr(i, r.value) ?? 1) <= 0;
998
+ case "gt": return (Sr(i, r.value) ?? -1) > 0;
999
+ case "gte": return (Sr(i, r.value) ?? -1) >= 0;
1000
+ case "lt": return (Sr(i, r.value) ?? 1) < 0;
1001
+ case "lte": return (Sr(i, r.value) ?? 1) <= 0;
1002
1002
  case "in": return Array.isArray(r.value) && r.value.includes(i);
1003
1003
  case "notIn": return Array.isArray(r.value) && !r.value.includes(i);
1004
1004
  case "contains": return typeof i == "string" && typeof r.value == "string" && i.toLowerCase().includes(r.value.toLowerCase());
@@ -1015,17 +1015,17 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1015
1015
  case "isNotNull": return i != null;
1016
1016
  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.");
1017
1017
  }
1018
- }, Cr = function* (e) {
1018
+ }, wr = function* (e) {
1019
1019
  if ("not" in e) {
1020
- yield* Cr(e.not);
1020
+ yield* wr(e.not);
1021
1021
  return;
1022
1022
  }
1023
1023
  if ("and" in e) {
1024
- for (let t of e.and) yield* Cr(t);
1024
+ for (let t of e.and) yield* wr(t);
1025
1025
  return;
1026
1026
  }
1027
1027
  if ("or" in e) {
1028
- for (let t of e.or) yield* Cr(t);
1028
+ for (let t of e.or) yield* wr(t);
1029
1029
  return;
1030
1030
  }
1031
1031
  e.op === "subquery-in" || e.op === "subquery-not-in" ? yield {
@@ -1035,27 +1035,27 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1035
1035
  kind: "exists",
1036
1036
  descriptor: e.subquery
1037
1037
  });
1038
- }, wr = function* (e, t = !0) {
1038
+ }, Tr = function* (e, t = !0) {
1039
1039
  if ("not" in e) {
1040
- yield* wr(e.not, !1);
1040
+ yield* Tr(e.not, !1);
1041
1041
  return;
1042
1042
  }
1043
1043
  if ("and" in e) {
1044
- for (let n of e.and) yield* wr(n, t);
1044
+ for (let n of e.and) yield* Tr(n, t);
1045
1045
  return;
1046
1046
  }
1047
1047
  if ("or" in e) {
1048
- for (let t of e.or) yield* wr(t, !1);
1048
+ for (let t of e.or) yield* Tr(t, !1);
1049
1049
  return;
1050
1050
  }
1051
1051
  e.op === "subquery-in" || e.op === "subquery-not-in" || e.op === "exists" || e.op === "not-exists" || (yield {
1052
1052
  ...e,
1053
1053
  conjunctive: t
1054
1054
  });
1055
- }, Tr = class extends nt.TaggedError("TableStreamError") {}, Er = 1e3, Dr = (e, t, n, r) => {
1055
+ }, Er = class extends rt.TaggedError("TableStreamError") {}, Dr = 1e3, Or = (e, t, n, r) => {
1056
1056
  let i = O.match(r, {
1057
1057
  onNone: () => e.where,
1058
- onSome: (n) => e.where ? fr(e.where, $n(t, n)) : $n(t, n)
1058
+ onSome: (n) => e.where ? pr(e.where, er(t, n)) : er(t, n)
1059
1059
  });
1060
1060
  return {
1061
1061
  table: e.table,
@@ -1070,19 +1070,19 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1070
1070
  ...e.includeDeleted === void 0 ? {} : { includeDeleted: e.includeDeleted },
1071
1071
  ...e.crossTenant === void 0 ? {} : { crossTenant: e.crossTenant }
1072
1072
  };
1073
- }, Or = (e, t) => {
1074
- let n = t.pk ?? "id", r = t.chunkSize ?? Er;
1075
- return it.paginateChunkEffect(O.none(), (i) => {
1076
- let a = rt.tryPromise({
1077
- try: () => e.query(Dr(t, n, r, i)),
1078
- catch: (e) => new Tr({
1073
+ }, kr = (e, t) => {
1074
+ let n = t.pk ?? "id", r = t.chunkSize ?? Dr;
1075
+ return at.paginateChunkEffect(O.none(), (i) => {
1076
+ let a = it.tryPromise({
1077
+ try: () => e.query(Or(t, n, r, i)),
1078
+ catch: (e) => new Er({
1079
1079
  table: t.table,
1080
1080
  cause: e
1081
1081
  })
1082
1082
  });
1083
- return (t.retry ? a.pipe(rt.retry(t.retry)) : a).pipe(rt.map((e) => [tt.fromIterable(e), e.length === r && e.length > 0 ? O.some(O.some(e[e.length - 1][n])) : O.none()]));
1083
+ return (t.retry ? a.pipe(it.retry(t.retry)) : a).pipe(it.map((e) => [nt.fromIterable(e), e.length === r && e.length > 0 ? O.some(O.some(e[e.length - 1][n])) : O.none()]));
1084
1084
  });
1085
- }, kr = (e) => {
1085
+ }, Ar = (e) => {
1086
1086
  let t = e.alpha ?? .5;
1087
1087
  if (t < 0 || t > 1) throw Error(`hybridSearch: alpha must be in [0, 1], got ${t}`);
1088
1088
  return (n) => {
@@ -1096,7 +1096,7 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1096
1096
  queryText: e.vector.query,
1097
1097
  distance: e.vector.distance ?? "cosine",
1098
1098
  alpha: t
1099
- }, i = C(n.table, e.fts.indexName, n.fullTextIndexes);
1099
+ }, i = c(n.table, e.fts.indexName, n.fullTextIndexes);
1100
1100
  return {
1101
1101
  ...n,
1102
1102
  annClause: r,
@@ -1109,17 +1109,17 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1109
1109
  }
1110
1110
  };
1111
1111
  };
1112
- }, Ar = async (e, t) => {
1112
+ }, jr = async (e, t) => {
1113
1113
  let n = e.as ?? "embedding", r = t.row[e.from];
1114
1114
  if (typeof r != "string" || r.length === 0) return {};
1115
1115
  let i = await t.embed(r);
1116
1116
  return { [n]: i };
1117
- }, jr = (e) => {
1117
+ }, Mr = (e) => {
1118
1118
  if (!Number.isInteger(e.dimensions) || e.dimensions <= 0) throw Error(`vectorEmbedding: dimensions must be a positive integer, got ${String(e.dimensions)}.`);
1119
- let t = e.as ?? "embedding", n = (t) => Ar(e, t);
1120
- return d({
1119
+ let t = e.as ?? "embedding", r = (t) => jr(e, t);
1120
+ return ae({
1121
1121
  id: "voltro/vectorEmbedding",
1122
- fields: { [t]: ke(e.dimensions) },
1122
+ fields: { [t]: n(e.dimensions) },
1123
1123
  ...e.index === !1 ? {} : { indexes: [{
1124
1124
  fields: [t],
1125
1125
  kind: "hnsw",
@@ -1130,23 +1130,23 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1130
1130
  } }
1131
1131
  }] },
1132
1132
  behaviors: {
1133
- beforeInsert: n,
1134
- beforeUpdate: n
1133
+ beforeInsert: r,
1134
+ beforeUpdate: r
1135
1135
  }
1136
1136
  });
1137
- }, Mr = 63, Nr = "br_pr", Y = class extends Error {
1137
+ }, Nr = 63, Pr = "br_pr", Y = class extends Error {
1138
1138
  _tag = "BranchNameInvalid";
1139
1139
  constructor(e) {
1140
1140
  super(e), this.name = "BranchNameInvalid";
1141
1141
  }
1142
- }, Pr = (e, t) => {
1142
+ }, Fr = (e, t) => {
1143
1143
  if (!Number.isInteger(t) || t < 0) throw new Y(`prNumber must be a non-negative integer, got ${String(t)}`);
1144
- let n = Zt(e);
1144
+ let n = Qt(e);
1145
1145
  if (n.replace(/_/g, "") === "") throw new Y(`app slug '${e}' has no usable identifier characters`);
1146
- let r = `${Nr}${t}_${n}`;
1147
- if (r.length > Mr) throw new Y(`branch namespace '${r}' exceeds the ${Mr}-byte identifier limit — use a shorter app slug`);
1146
+ let r = `${Pr}${t}_${n}`;
1147
+ if (r.length > Nr) throw new Y(`branch namespace '${r}' exceeds the ${Nr}-byte identifier limit — use a shorter app slug`);
1148
1148
  return r;
1149
- }, Fr = (e) => e.startsWith(Nr), Ir = {
1149
+ }, Ir = (e) => e.startsWith(Pr), Lr = {
1150
1150
  requested: {
1151
1151
  provision: "provisioning",
1152
1152
  destroy: "destroying"
@@ -1165,18 +1165,18 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1165
1165
  fail: "failed"
1166
1166
  },
1167
1167
  destroyed: {}
1168
- }, Lr = class extends Error {
1168
+ }, Rr = class extends Error {
1169
1169
  from;
1170
1170
  event;
1171
1171
  _tag = "BranchTransitionInvalid";
1172
1172
  constructor(e, t) {
1173
1173
  super(`invalid branch transition: ${e} --${t}-->`), this.from = e, this.event = t, this.name = "BranchTransitionInvalid";
1174
1174
  }
1175
- }, Rr = (e, t) => {
1176
- let n = Ir[e][t];
1177
- if (n === void 0) throw new Lr(e, t);
1175
+ }, zr = (e, t) => {
1176
+ let n = Lr[e][t];
1177
+ if (n === void 0) throw new Rr(e, t);
1178
1178
  return n;
1179
- }, zr = (e, t, n, r) => {
1179
+ }, Br = (e, t, n, r) => {
1180
1180
  if (n === "copy" && (r === void 0 || r === "")) throw new Y("seed 'copy' requires a parentNamespace to snapshot from");
1181
1181
  let i = [{
1182
1182
  kind: "create-namespace",
@@ -1197,13 +1197,13 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1197
1197
  detail: `run boot seeds into ${e}`
1198
1198
  });
1199
1199
  return i;
1200
- }, Br = (e) => {
1201
- if (!Fr(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
1200
+ }, Vr = (e) => {
1201
+ if (!Ir(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
1202
1202
  return [{
1203
1203
  kind: "drop-namespace",
1204
1204
  detail: e
1205
1205
  }];
1206
- }, Vr = (e) => {
1206
+ }, Hr = (e) => {
1207
1207
  if (e === void 0 || e === "") return !1;
1208
1208
  try {
1209
1209
  let t = new URL(e).hostname.toLowerCase();
@@ -1211,27 +1211,27 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1211
1211
  } catch {
1212
1212
  return /\bneon\.(tech|build)\b/i.test(e);
1213
1213
  }
1214
- }, Hr = (e) => e.prefer === void 0 ? e.seed === "copy" && Vr(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, Ur = (e, t = {}) => [{
1214
+ }, Ur = (e) => e.prefer === void 0 ? e.seed === "copy" && Hr(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, Wr = (e, t = {}) => [{
1215
1215
  kind: "neon-branch-create",
1216
1216
  detail: `${t.parentBranch ?? "main"} → ${e} (copy-on-write)`
1217
- }], Wr = (e) => {
1218
- if (!Fr(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
1217
+ }], Gr = (e) => {
1218
+ if (!Ir(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
1219
1219
  return [{
1220
1220
  kind: "neon-branch-delete",
1221
1221
  detail: e
1222
1222
  }];
1223
- }, Gr = (e) => e.mechanism === "neon-cow" ? Ur(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : zr(e.branchId, e.tableNames, e.seed, e.parentNamespace), Kr = (e, t) => e === "neon-cow" ? Wr(t) : Br(t), qr = (e, t, n) => {
1223
+ }, Kr = (e) => e.mechanism === "neon-cow" ? Wr(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : Br(e.branchId, e.tableNames, e.seed, e.parentNamespace), qr = (e, t) => e === "neon-cow" ? Gr(t) : Vr(t), Jr = (e, t, n) => {
1224
1224
  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);
1225
1225
  return {
1226
1226
  evict: i,
1227
1227
  rejectNew: r.filter((e) => !a.has(e.namespace)).length >= t.maxBranches
1228
1228
  };
1229
- }, Jr = async (e, t) => {
1230
- let n = Pr(e.appSlug, e.prNumber), r = Hr({
1229
+ }, Yr = async (e, t) => {
1230
+ let n = Fr(e.appSlug, e.prNumber), r = Ur({
1231
1231
  seed: e.seed,
1232
1232
  ...e.dbUrl === void 0 ? {} : { dbUrl: e.dbUrl },
1233
1233
  ...e.prefer === void 0 ? {} : { prefer: e.prefer }
1234
- }), i = Gr({
1234
+ }), i = Kr({
1235
1235
  mechanism: r,
1236
1236
  branchId: n,
1237
1237
  tableNames: e.tableNames,
@@ -1256,10 +1256,10 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1256
1256
  mechanism: r,
1257
1257
  steps: i
1258
1258
  };
1259
- }, Yr = async (e, t, n) => {
1260
- let r = Kr(t, e);
1259
+ }, Xr = async (e, t, n) => {
1260
+ let r = qr(t, e);
1261
1261
  return t === "neon-cow" ? await n.neonBranchDelete(e) : await n.dropNamespace(e), r;
1262
- }, Xr = (e, t, n) => qr(e, t, n), X = (e) => `"${e.replace(/"/g, "\"\"")}"`, Zr = (e) => {
1262
+ }, Zr = (e, t, n) => Jr(e, t, n), X = (e) => `"${e.replace(/"/g, "\"\"")}"`, Qr = (e) => {
1263
1263
  let t = () => {
1264
1264
  throw Error("namespace branch executor: Neon ops require a neon-cow executor (use a Neon connection for copy-on-write branches)");
1265
1265
  };
@@ -1271,18 +1271,18 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1271
1271
  neonBranchCreate: t,
1272
1272
  neonBranchDelete: t
1273
1273
  };
1274
- }, Qr = class extends Error {
1274
+ }, $r = class extends Error {
1275
1275
  _tag = "TenantResidencyUnresolved";
1276
1276
  constructor(e) {
1277
1277
  super(e), this.name = "TenantResidencyUnresolved";
1278
1278
  }
1279
- }, $r = class extends Error {
1279
+ }, ei = class extends Error {
1280
1280
  region;
1281
1281
  _tag = "TenantRegionUnavailable";
1282
1282
  constructor(e, t) {
1283
1283
  super(t), this.region = e, this.name = "TenantRegionUnavailable";
1284
1284
  }
1285
- }, ei, ti = (e) => {
1285
+ }, ti, ni = (e) => {
1286
1286
  if (e.homes === void 0) throw Error("setResidencyConfig: `homes` is required");
1287
1287
  if (e.servableRegions === void 0 || e.servableRegions.length === 0) throw Error("setResidencyConfig: `servableRegions` must be non-empty (which regions this deployment serves)");
1288
1288
  let t = /* @__PURE__ */ new Map();
@@ -1291,32 +1291,32 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1291
1291
  if (e !== void 0 && e !== n.region) throw Error(`residency: tenant '${n.tenantId}' is mapped to two regions ('${e}' and '${n.region}')`);
1292
1292
  t.set(n.tenantId, n.region);
1293
1293
  }
1294
- return ei = e, e;
1295
- }, ni = () => ei, ri = () => {
1296
- ei = void 0;
1297
- }, ii = (e, t) => {
1298
- if (e == null || e === "") throw new Qr("residency is on but the request has no resolvable tenant — refusing to bind a store");
1294
+ return ti = e, e;
1295
+ }, ri = () => ti, ii = () => {
1296
+ ti = void 0;
1297
+ }, ai = (e, t) => {
1298
+ if (e == null || e === "") throw new $r("residency is on but the request has no resolvable tenant — refusing to bind a store");
1299
1299
  let n = t.homes.find((t) => t.tenantId === e);
1300
- if (n === void 0) throw new Qr(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
1300
+ if (n === void 0) throw new $r(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
1301
1301
  return n;
1302
- }, ai = (e, t) => t.servableRegions.includes(e), oi = (e, t) => {
1303
- let n = ii(e.tenantId, t), r = Qt(n.tenantId);
1302
+ }, oi = (e, t) => t.servableRegions.includes(e), si = (e, t) => {
1303
+ let n = ai(e.tenantId, t), r = $t(n.tenantId);
1304
1304
  return {
1305
1305
  region: n.region,
1306
1306
  namespace: r,
1307
1307
  ...n.connectionKey === void 0 ? {} : { connectionKey: n.connectionKey }
1308
1308
  };
1309
- }, si = (e, t, n) => {
1310
- let r = oi(e, t);
1311
- if (!ai(r.region, t)) throw new $r(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
1309
+ }, ci = (e, t, n) => {
1310
+ let r = si(e, t);
1311
+ if (!oi(r.region, t)) throw new ei(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
1312
1312
  let i = n.get(r.region);
1313
- if (i === void 0) throw new $r(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
1313
+ if (i === void 0) throw new ei(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
1314
1314
  return {
1315
1315
  store: i,
1316
1316
  placement: r
1317
1317
  };
1318
- }, ci = async (e, t, n, r) => {
1319
- let { store: i, placement: a } = si(e, t, n);
1318
+ }, li = async (e, t, n, r) => {
1319
+ let { store: i, placement: a } = ci(e, t, n);
1320
1320
  return await r(i, a), a;
1321
1321
  }, Z = (e) => {
1322
1322
  if (typeof e == "string") return e;
@@ -1325,21 +1325,21 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1325
1325
  return `(json:${t}->${n.join(".")}${r ? "::num" : ""})`;
1326
1326
  }
1327
1327
  return `(${e.expr})`;
1328
- }, Q = (e) => e.map(Z), li = (e, t) => {
1328
+ }, Q = (e) => e.map(Z), ui = (e, t) => {
1329
1329
  if (e.length !== t.length) return !1;
1330
1330
  for (let n = 0; n < e.length; n++) if (Z(e[n]) !== Z(t[n])) return !1;
1331
1331
  return !0;
1332
- }, ui = (e, t) => {
1332
+ }, di = (e, t) => {
1333
1333
  if (e.length >= t.length) return !1;
1334
1334
  for (let n = 0; n < e.length; n++) if (Z(e[n]) !== Z(t[n])) return !1;
1335
1335
  return !0;
1336
- }, di = (e) => {
1336
+ }, fi = (e) => {
1337
1337
  let t = [], n = e.appliedIndexes, r = e.tableName;
1338
1338
  for (let e = 0; e < n.length; e++) {
1339
1339
  let i = n[e];
1340
1340
  for (let a = e + 1; a < n.length; a++) {
1341
1341
  let e = n[a];
1342
- if (li(i.fields, e.fields)) {
1342
+ if (ui(i.fields, e.fields)) {
1343
1343
  let [n, a] = i.name < e.name ? [i, e] : [e, i];
1344
1344
  t.push({
1345
1345
  kind: "duplicate-fields",
@@ -1350,13 +1350,13 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1350
1350
  });
1351
1351
  continue;
1352
1352
  }
1353
- ui(i.fields, e.fields) ? t.push({
1353
+ di(i.fields, e.fields) ? t.push({
1354
1354
  kind: "redundant-prefix",
1355
1355
  table: r,
1356
1356
  redundant: i,
1357
1357
  coveredBy: e,
1358
1358
  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).`
1359
- }) : ui(e.fields, i.fields) && t.push({
1359
+ }) : di(e.fields, i.fields) && t.push({
1360
1360
  kind: "redundant-prefix",
1361
1361
  table: r,
1362
1362
  redundant: e,
@@ -1366,23 +1366,23 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1366
1366
  }
1367
1367
  }
1368
1368
  return t;
1369
- }, fi = (e) => {
1369
+ }, pi = (e) => {
1370
1370
  let t = [];
1371
- for (let n of e) t.push(...di(n));
1371
+ for (let n of e) t.push(...fi(n));
1372
1372
  return t;
1373
- }, pi = "\x1B[", mi = `${pi}38;2;245;158;11m`, hi = `${pi}38;2;16;185;129m`, gi = (e, t) => `${e}${t}${k.reset}`, $ = (e, t, n) => e ? typeof t == "function" ? t(n) : gi(t, n) : n, _i = (e, t = {}) => {
1374
- let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n, k.dim, e.padEnd(11)), a = (e) => $(n, (e) => k.bold(k.brand(e)), e), o = (e) => $(n, k.brightRed24, e), s = (e) => $(n, hi, e), c = (e) => $(n, mi, e), l = (e) => $(n, k.dim, e), u = `${c("index audit")} ${l("·")} ${$(n, k.bold, e.kind)}`, d = e.redundant.fields.length, f = Q(e.coveredBy.fields.slice(d)), p = (e, t) => {
1373
+ }, mi = "\x1B[", hi = `${mi}38;2;245;158;11m`, gi = `${mi}38;2;16;185;129m`, _i = (e, t) => `${e}${t}${k.reset}`, $ = (e, t, n) => e ? typeof t == "function" ? t(n) : _i(t, n) : n, vi = (e, t = {}) => {
1374
+ let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n, k.dim, e.padEnd(11)), a = (e) => $(n, (e) => k.bold(k.brand(e)), e), o = (e) => $(n, k.brightRed24, e), s = (e) => $(n, gi, e), c = (e) => $(n, hi, e), l = (e) => $(n, k.dim, e), u = `${c("index audit")} ${l("·")} ${$(n, k.bold, e.kind)}`, d = e.redundant.fields.length, f = Q(e.coveredBy.fields.slice(d)), p = (e, t) => {
1375
1375
  let n = e.slice(0, t), r = e.slice(t), i = [];
1376
1376
  return n.length > 0 && i.push(s(`[${n.join(", ")}]`)), r.length > 0 && i.push(c(`+ [${r.join(", ")}]`)), i.join(" ");
1377
1377
  }, m = [];
1378
1378
  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, k.bold, "both")} B-trees. Pure write overhead, zero read benefit.`), m.push(""), m.push(`${i("fix")}Drop ${o(e.redundant.name)}`), m.push(`${i("")}${l("Keep only if profiling shows the smaller index gives a")}`), m.push(`${i("")}${l("measurable cache-locality boost on a write-heavy hot path.")}`), m.push(`${i("")}${l("Silence with VOLTRO_INDEX_AUDIT=off if intentional.")}`), m.map((e) => `${r}${e}`).join("\n");
1379
- }, vi = (e, t) => ({
1379
+ }, yi = (e, t) => ({
1380
1380
  name: e,
1381
1381
  body: t
1382
- }), yi = (e) => {
1382
+ }), bi = (e) => {
1383
1383
  if (e.lifecycle === "cron" && !e.cron) throw Error(`seed "${e.id}": lifecycle 'cron' requires a 'cron' field`);
1384
1384
  if (e.lifecycle === "onSchemaChange" && (!e.watchedTables || e.watchedTables.length === 0)) throw Error(`seed "${e.id}": lifecycle 'onSchemaChange' requires at least one entry in 'watchedTables'`);
1385
- let t = e.steps({ step: vi });
1385
+ let t = e.steps({ step: yi });
1386
1386
  if (t.length === 0) throw Error(`seed "${e.id}": at least one step is required`);
1387
1387
  return {
1388
1388
  __seed: !0,
@@ -1394,13 +1394,13 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1394
1394
  ...e.fingerprint === void 0 ? {} : { fingerprint: e.fingerprint },
1395
1395
  steps: t
1396
1396
  };
1397
- }, bi = (e) => typeof e == "object" && !!e && "__seed" in e && e.__seed === !0, xi = (e, { apply: t, undo: n }) => ({
1397
+ }, xi = (e) => typeof e == "object" && !!e && "__seed" in e && e.__seed === !0, Si = (e, { apply: t, undo: n }) => ({
1398
1398
  name: e,
1399
1399
  apply: t,
1400
1400
  undo: n
1401
- }), Si = (e) => {
1401
+ }), Ci = (e) => {
1402
1402
  if (!/^\d{14}_/.test(e.id)) throw Error(`migration "${e.id}": id must start with a 14-digit timestamp followed by "_" (convention: <YYYYMMDDHHMMSS>_<slug>)`);
1403
- let t = e.steps({ step: xi });
1403
+ let t = e.steps({ step: Si });
1404
1404
  if (t.length === 0) throw Error(`migration "${e.id}": at least one step is required`);
1405
1405
  return {
1406
1406
  __migration: !0,
@@ -1408,111 +1408,111 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1408
1408
  name: e.name,
1409
1409
  steps: t
1410
1410
  };
1411
- }, Ci = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, wi = n("_voltro_migrations", {
1412
- id: T({ prefix: "mig" }),
1413
- name: o(),
1414
- hash: o(),
1415
- status: o(),
1416
- appliedAt: v().nullable(),
1417
- durationMs: D().nullable(),
1418
- errorMessage: o().nullable(),
1419
- errorStack: o().nullable(),
1420
- workflowRunId: o().nullable(),
1421
- createdAt: v().default("now"),
1422
- updatedAt: v().default("now").onUpdate("now")
1423
- }).index(["status"]).reactive(), Ti = n("_voltro_seeds", {
1424
- id: T({ prefix: "seed" }),
1425
- name: o(),
1426
- lifecycle: o(),
1427
- fingerprint: o(),
1428
- cronSchedule: o().nullable(),
1429
- watchedTables: E().nullable(),
1430
- nextRunAt: v().nullable(),
1431
- lastRunStatus: o().nullable(),
1432
- lastRunAt: v().nullable(),
1433
- lastRunDurationMs: D().nullable(),
1434
- lastRunRowsTouched: D().nullable(),
1435
- lastError: o().nullable(),
1436
- workflowRunId: o().nullable(),
1437
- createdAt: v().default("now"),
1438
- updatedAt: v().default("now").onUpdate("now")
1439
- }).index(["lifecycle"]).index(["nextRunAt"]).reactive(), Ei = n("_voltro_migration_plans", {
1440
- id: T({ prefix: "plan" }),
1441
- fingerprint: o(),
1442
- operations: E(),
1443
- rollbackPlan: E().nullable(),
1444
- appliedBy: o(),
1445
- environment: o(),
1446
- source: o(),
1447
- onlineStrategy: o().nullable(),
1448
- durationMs: D(),
1449
- notes: o().nullable(),
1450
- squashedAt: v().nullable(),
1451
- appliedAt: v().default("now"),
1452
- createdAt: v().default("now"),
1453
- updatedAt: v().default("now").onUpdate("now")
1454
- }).index(["fingerprint"]).index(["environment"]).reactive(), Di = n("_voltro_idempotency", {
1455
- id: T({ prefix: "idem" }),
1456
- scope: o(),
1457
- key: o(),
1458
- status: o(),
1459
- response: E().nullable(),
1460
- createdAt: v().default("now")
1461
- }).unique(["scope", "key"]).index(["createdAt"]).reactive(), Oi = n("_voltro_kv", {
1462
- id: T({ prefix: "kv" }),
1463
- key: o().unique(),
1464
- value: o().nullable(),
1465
- expiresAt: v().nullable(),
1466
- createdAt: v().default("now"),
1467
- updatedAt: v().default("now").onUpdate("now")
1468
- }).index(["expiresAt"]).reactive(), ki = n("_voltro_api_keys", {
1469
- id: T({ prefix: "apikey" }),
1470
- tenantId: o().nullable(),
1471
- name: o(),
1472
- hashedKey: o().unique(),
1473
- keyPrefix: o(),
1474
- scopes: E().nullable(),
1475
- lastUsedAt: v().nullable(),
1476
- expiresAt: v().nullable(),
1477
- revokedAt: v().nullable(),
1478
- createdBy: o().nullable(),
1479
- createdAt: v().default("now")
1480
- }).index("byTenant", ["tenantId"]).reactive(), Ai = [
1481
- wi,
1411
+ }, wi = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, Ti = C("_voltro_migrations", {
1412
+ id: D({ prefix: "mig" }),
1413
+ name: v(),
1414
+ hash: v(),
1415
+ status: v(),
1416
+ appliedAt: E().nullable(),
1417
+ durationMs: w().nullable(),
1418
+ errorMessage: v().nullable(),
1419
+ errorStack: v().nullable(),
1420
+ workflowRunId: v().nullable(),
1421
+ createdAt: E().default("now"),
1422
+ updatedAt: E().default("now").onUpdate("now")
1423
+ }).index(["status"]).reactive(), Ei = C("_voltro_seeds", {
1424
+ id: D({ prefix: "seed" }),
1425
+ name: v(),
1426
+ lifecycle: v(),
1427
+ fingerprint: v(),
1428
+ cronSchedule: v().nullable(),
1429
+ watchedTables: S().nullable(),
1430
+ nextRunAt: E().nullable(),
1431
+ lastRunStatus: v().nullable(),
1432
+ lastRunAt: E().nullable(),
1433
+ lastRunDurationMs: w().nullable(),
1434
+ lastRunRowsTouched: w().nullable(),
1435
+ lastError: v().nullable(),
1436
+ workflowRunId: v().nullable(),
1437
+ createdAt: E().default("now"),
1438
+ updatedAt: E().default("now").onUpdate("now")
1439
+ }).index(["lifecycle"]).index(["nextRunAt"]).reactive(), Di = C("_voltro_migration_plans", {
1440
+ id: D({ prefix: "plan" }),
1441
+ fingerprint: v(),
1442
+ operations: S(),
1443
+ rollbackPlan: S().nullable(),
1444
+ appliedBy: v(),
1445
+ environment: v(),
1446
+ source: v(),
1447
+ onlineStrategy: v().nullable(),
1448
+ durationMs: w(),
1449
+ notes: v().nullable(),
1450
+ squashedAt: E().nullable(),
1451
+ appliedAt: E().default("now"),
1452
+ createdAt: E().default("now"),
1453
+ updatedAt: E().default("now").onUpdate("now")
1454
+ }).index(["fingerprint"]).index(["environment"]).reactive(), Oi = C("_voltro_idempotency", {
1455
+ id: D({ prefix: "idem" }),
1456
+ scope: v(),
1457
+ key: v(),
1458
+ status: v(),
1459
+ response: S().nullable(),
1460
+ createdAt: E().default("now")
1461
+ }).unique(["scope", "key"]).index(["createdAt"]).reactive(), ki = C("_voltro_kv", {
1462
+ id: D({ prefix: "kv" }),
1463
+ key: v().unique(),
1464
+ value: v().nullable(),
1465
+ expiresAt: E().nullable(),
1466
+ createdAt: E().default("now"),
1467
+ updatedAt: E().default("now").onUpdate("now")
1468
+ }).index(["expiresAt"]).reactive(), Ai = C("_voltro_api_keys", {
1469
+ id: D({ prefix: "apikey" }),
1470
+ tenantId: v().nullable(),
1471
+ name: v(),
1472
+ hashedKey: v().unique(),
1473
+ keyPrefix: v(),
1474
+ scopes: S().nullable(),
1475
+ lastUsedAt: E().nullable(),
1476
+ expiresAt: E().nullable(),
1477
+ revokedAt: E().nullable(),
1478
+ createdBy: v().nullable(),
1479
+ createdAt: E().default("now")
1480
+ }).index("byTenant", ["tenantId"]).reactive(), ji = [
1482
1481
  Ti,
1483
- Ei
1484
- ], ji = (e, t, n) => ({
1482
+ Ei,
1483
+ Di
1484
+ ], Mi = (e, t, n) => ({
1485
1485
  _tag: "PrimaryKeyConflictError",
1486
1486
  table: e,
1487
1487
  key: t,
1488
1488
  cause: n
1489
- }), Mi = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", Ni = /* @__PURE__ */ new Map(), Pi = (e) => {
1489
+ }), Ni = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", Pi = /* @__PURE__ */ new Map(), Fi = (e) => {
1490
1490
  if (!e.table || !e.timeColumn) throw Error("registerRetention: table + timeColumn are required");
1491
1491
  if (!Number.isFinite(e.ttlMs) || e.ttlMs <= 0) throw Error(`registerRetention(${e.table}): ttlMs must be a positive number`);
1492
- Ni.set(e.table, e);
1493
- }, Fi = () => [...Ni.values()], Ii = () => Ni.clear(), Li = async (e, t, n, r = 2e4) => {
1492
+ Pi.set(e.table, e);
1493
+ }, Ii = () => [...Pi.values()], Li = () => Pi.clear(), Ri = async (e, t, n, r = 2e4) => {
1494
1494
  let i = new Date(t - e.ttlMs), a = 0;
1495
1495
  for (;;) {
1496
1496
  let t = await n(e.table, e.timeColumn, i, r, e.where);
1497
1497
  if (a += t, t < r) break;
1498
1498
  }
1499
1499
  return a;
1500
- }, Ri = (e, t) => {
1500
+ }, zi = (e, t) => {
1501
1501
  let n = Number(e ?? String(t));
1502
1502
  return (Number.isFinite(n) && n > 0 ? n : t) * 36e5;
1503
- }, zi = "_voltro_cdc_offsets", Bi = n(zi, {
1504
- id: T({ prefix: "cdcoff" }),
1505
- replicaId: o(),
1506
- streamName: o(),
1507
- binlogFile: o(),
1508
- binlogPosition: o(),
1509
- updatedAt: v()
1510
- }).index(["replicaId"]), Vi = n(zi, {
1511
- id: T({ prefix: "cdcoff" }),
1512
- replicaId: o(),
1513
- streamName: o(),
1514
- ctVersion: o(),
1515
- updatedAt: v()
1516
- }).index(["replicaId"]), Hi = "postgres";
1503
+ }, Bi = "_voltro_cdc_offsets", Vi = C(Bi, {
1504
+ id: D({ prefix: "cdcoff" }),
1505
+ replicaId: v(),
1506
+ streamName: v(),
1507
+ binlogFile: v(),
1508
+ binlogPosition: v(),
1509
+ updatedAt: E()
1510
+ }).index(["replicaId"]), Hi = C(Bi, {
1511
+ id: D({ prefix: "cdcoff" }),
1512
+ replicaId: v(),
1513
+ streamName: v(),
1514
+ ctVersion: v(),
1515
+ updatedAt: E()
1516
+ }).index(["replicaId"]), Ui = "postgres";
1517
1517
  //#endregion
1518
- export { Y as BranchNameInvalid, Lr as BranchTransitionInvalid, zi as CDC_OFFSETS_TABLE, We as ColumnBuilder, lt as ENCRYPTED_PREFIX, Hi as ENGINE, Ge as FILE_MIGRATION_PATTERN, oe as MAX_IDENTIFIER_LENGTH, Tr as TableStreamError, Jt as TenantNamespaceInvalid, qt as TenantNamespaceUnresolved, $r as TenantRegionUnavailable, Qr as TenantResidencyUnresolved, ce as WARN_IDENTIFIER_LENGTH, ki as _voltroApiKeysTable, Bi as _voltroCdcOffsetsTable, Di as _voltroIdempotencyTable, Oi as _voltroKvTable, Ei as _voltroMigrationPlansTable, wi as _voltroMigrationsTable, Vi as _voltroMssqlCdcOffsetsTable, Ti as _voltroSeedsTable, Xn as actorsTable, Xr as admitBranch, He as allEnumRenames, kt as allRegisteredRelations, De as allRegisteredTables, fr as and, ge as array, or as arrayContains, cr as arrayHas, sr as arrayOverlaps, zt as attachEagerLoads, fi as auditAllTableIndexes, di as auditTableIndexes, Ae as avg, qe as avgOver, je as bigint, si as bindResidentStore, Je as boolean, Pr as branchNamespaceName, ve as bytes, Ee as clearEnumRenames, At as clearRelationsRegistry, ri as clearResidencyConfig, Ii as clearRetentions, g as clearTableRegistry, Cr as collectSubqueries, _e as column, dn as compileEagerJson, R as compilePredicate, $t as compileRawFragment, z as compileSelect, Ar as computeEmbedding, ar as contains, be as count, Re as countDistinct, Me as databaseHandle, xe as date, ze as dbEnum, Ne as decimal, fe as declareEnumRename, It as decodeRowsFromSchema, pt as decryptFieldsOnRead, Si as defineMigration, d as defineMixin, yi as defineSeed, we as denseRank, u as deriveTypeIdPrefix, ct as deserializeArraysOnRead, b as drainIdentifierWarnings, Te as dropped, Rt as encodeRowForSchema, ft as encryptFieldsForWrite, dt as encryptedColumnsOf, qr as enforceBranchLimits, _ as ensureTableRegistered, Zn as eq, L as escapeLike, Sr as evaluatePredicate, Se as except, yr as exists, _i as formatIndexAuditIssue, Ai as frameworkTables, m as generateId, p as generateSnowflake, Ce as geography, ue as geometry, Le as getEnumRenames, Ot as getRelation, M as getRelations, ni as getResidencyConfig, y as getTable, $n as gt, er as gte, Kt as hasEagerLoads, kr as hybridSearch, T as id, rr as inSet, _r as inSubquery, A as inferForeignKey, D as integer, le as intersect, me as interval, Fr as isBranchNamespace, ut as isEncrypted, Pe as isFileMigration, Ci as isMigrationDefinition, Vr as isNeonConnection, ur as isNotNull, lr as isNull, Mi as isPrimaryKeyConflictError, ai as isRegionServable, bt as isRelationsSpec, bi as isSeedDefinition, h as isSqliteFamily, de as isView, E as json, hr as jsonField, et as jsonIndex, Ye as lag, $e as lead, Fi as listRetentions, tr as lt, nr as lte, Zr as makeNamespaceBranchExecutor, St as many, Ct as manyToMany, S as materializeFields, pe as max, Ve as migration, Qe as min, re as mixin, Qn as neq, Rr as nextBranchState, mr as not, br as notExists, ir as notInSet, vr as notInSubquery, i as numeric, xt as one, pr as or, te as paginateById, Gr as planBranch, zr as planBranchProvision, Br as planBranchTeardown, Kr as planBranchTeardownFor, Ur as planNeonBranchProvision, Wr as planNeonBranchTeardown, ji as primaryKeyConflictError, Jr as provisionBranch, ci as provisionResidentTenant, I as qualifyTable, r as queryFor, Ie as queryForView, x as quoteIdent, Xe as rank, Ze as raw, ne as real, c as reference, Kn as registerCoreTables, Dt as registerDiscoveredRelations, Et as registerRelations, Pi as registerRetention, l as registerTable, yt as relations, Jn as requireActors, f as requireTable, Yn as requireTenants, se as resetSnowflake, oi as residentPlacement, Hr as resolveBranchMechanism, C as resolveFullTextIndex, Be as resolveIdScheme, ae as resolveMixinGraph, ii as resolveTenantHome, Qt as resolveTenantNamespace, Ri as retentionTtlMsFromEnv, s as rowNumber, Zt as sanitizeIdentifierFragment, st as serializeArraysForWrite, ti as setResidencyConfig, dr as spatialPredicate, Or as streamTable, a as sum, ee as sumOver, Li as sweepRetention, n as table, Yr as teardownBranch, o as text, v as timestamp, Oe as union, t as unionAll, e as validateColumnName, ye as validateIndexName, Ke as validateTableName, Fe as validateTypeIdPrefix, ke as vector, ie as vectorDistanceToOpclass, jr as vectorEmbedding, Ue as view, he as viewSql, wr as walkLeaves };
1518
+ export { Y as BranchNameInvalid, Rr as BranchTransitionInvalid, Bi as CDC_OFFSETS_TABLE, ge as ColumnBuilder, ut as ENCRYPTED_PREFIX, Ui as ENGINE, We as FILE_MIGRATION_PATTERN, le as MAX_IDENTIFIER_LENGTH, Er as TableStreamError, Yt as TenantNamespaceInvalid, Jt as TenantNamespaceUnresolved, ei as TenantRegionUnavailable, $r as TenantResidencyUnresolved, b as WARN_IDENTIFIER_LENGTH, Ai as _voltroApiKeysTable, Vi as _voltroCdcOffsetsTable, Oi as _voltroIdempotencyTable, ki as _voltroKvTable, Di as _voltroMigrationPlansTable, Ti as _voltroMigrationsTable, Hi as _voltroMssqlCdcOffsetsTable, Ei as _voltroSeedsTable, Zn as actorsTable, Zr as admitBranch, Ee as allEnumRenames, At as allRegisteredRelations, _ as allRegisteredTables, pr as and, Ae as array, sr as arrayContains, lr as arrayHas, cr as arrayOverlaps, Bt as attachEagerLoads, pi as auditAllTableIndexes, fi as auditTableIndexes, ke as avg, Ke as avgOver, qe as bigint, ci as bindResidentStore, ve as boolean, Fr as branchNamespaceName, xe as bytes, pe as clearEnumRenames, jt as clearRelationsRegistry, ii as clearResidencyConfig, Li as clearRetentions, ee as clearTableRegistry, wr as collectSubqueries, _e as column, fn as compileEagerJson, R as compilePredicate, en as compileRawFragment, z as compileSelect, jr as computeEmbedding, or as contains, be as count, Le as countDistinct, je as databaseHandle, Re as date, Me as dbEnum, Te as decimal, Ie as declareEnumRename, Lt as decodeRowsFromSchema, mt as decryptFieldsOnRead, Ci as defineMigration, ae as defineMixin, bi as defineSeed, we as denseRank, h as deriveTypeIdPrefix, lt as deserializeArraysOnRead, e as drainIdentifierWarnings, Ce as dropped, zt as encodeRowForSchema, pt as encryptFieldsForWrite, ft as encryptedColumnsOf, Jr as enforceBranchLimits, y as ensureTableRegistered, Qn as eq, L as escapeLike, Cr as evaluatePredicate, Se as except, br as exists, vi as formatIndexAuditIssue, ji as frameworkTables, ze as generateId, ce as generateSnowflake, de as geography, Ye as geometry, Ue as getEnumRenames, kt as getRelation, M as getRelations, ri as getResidencyConfig, u as getTable, er as gt, tr as gte, qt as hasEagerLoads, Ar as hybridSearch, D as id, ir as inSet, vr as inSubquery, A as inferForeignKey, w as integer, ue as intersect, $e as interval, Ir as isBranchNamespace, dt as isEncrypted, Ne as isFileMigration, wi as isMigrationDefinition, Hr as isNeonConnection, dr as isNotNull, ur as isNull, Ni as isPrimaryKeyConflictError, oi as isRegionServable, xt as isRelationsSpec, xi as isSeedDefinition, ne as isSqliteFamily, fe as isView, S as json, gr as jsonField, r as jsonIndex, Je as lag, et as lead, Ii as listRetentions, nr as lt, rr as lte, Qr as makeNamespaceBranchExecutor, Ct as many, wt as manyToMany, a as materializeFields, me as max, Be as migration, Qe as min, oe as mixin, $n as neq, zr as nextBranchState, hr as not, xr as notExists, ar as notInSet, yr as notInSubquery, Ze as numeric, St as one, mr as or, x as paginateBy, i as paginateById, Kr as planBranch, Br as planBranchProvision, Vr as planBranchTeardown, qr as planBranchTeardownFor, Wr as planNeonBranchProvision, Gr as planNeonBranchTeardown, Mi as primaryKeyConflictError, Yr as provisionBranch, li as provisionResidentTenant, I as qualifyTable, Xe as queryFor, Fe as queryForView, tt as quoteIdent, re as rank, ie as raw, l as real, s as reference, qn as registerCoreTables, Ot as registerDiscoveredRelations, Dt as registerRelations, Fi as registerRetention, p as registerTable, bt as relations, Yn as requireActors, g as requireTable, Xn as requireTenants, se as resetSnowflake, si as residentPlacement, Ur as resolveBranchMechanism, c as resolveFullTextIndex, m as resolveIdScheme, d as resolveMixinGraph, ai as resolveTenantHome, $t as resolveTenantNamespace, zi as retentionTtlMsFromEnv, o as rowNumber, Qt as sanitizeIdentifierFragment, ct as serializeArraysForWrite, ni as setResidencyConfig, fr as spatialPredicate, kr as streamTable, te as sum, Oe as sumOver, Ri as sweepRetention, C as table, Xr as teardownBranch, v as text, E as timestamp, t as union, De as unionAll, ye as validateColumnName, Ge as validateIndexName, Pe as validateTableName, Ve as validateTypeIdPrefix, n as vector, f as vectorDistanceToOpclass, Mr as vectorEmbedding, He as view, he as viewSql, Tr as walkLeaves };