@voltro/database 0.24.0 → 0.25.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,4 +1,4 @@
1
- import { $ as e, A as t, At as n, B as r, C as i, Ct as a, D as o, Dt as s, E as c, Et as l, F as u, Ft as d, G as f, H as p, I as m, It as h, J as g, K as _, L as ee, M as te, Mt as ne, N as v, Nt as y, O as re, Ot as b, P as ie, Pt as x, Q as ae, R as S, S as oe, St as se, T as ce, Tt as C, U as le, V as ue, W as de, X as fe, Y as pe, Z as me, _ as he, _t as ge, a as _e, at as ve, b as ye, bt as be, c as xe, ct as Se, d as Ce, dt as we, et as Te, f as Ee, ft as De, g as Oe, gt as ke, h as Ae, ht as je, i as Me, it as Ne, j as Pe, jt as Fe, k as Ie, kt as Le, l as Re, lt as ze, m as Be, mt as Ve, n as He, nt as Ue, o as We, ot as Ge, p as Ke, pt as qe, q as Je, rt as Ye, s as w, st as Xe, t as Ze, tt as Qe, u as $e, ut as et, v as tt, vt as nt, w as rt, wt as T, x as it, xt as at, y as ot, yt as st, z as ct } from "./frameworkLiveTables-BvPIm2cD.js";
1
+ import { $ as e, A as t, At as n, B as r, C as i, Ct as a, D as o, Dt as s, E as c, Et as l, F as u, Ft as d, G as f, H as p, I as m, It as h, J as g, K as _, L as ee, M as v, Mt as te, N as ne, Nt as y, O as re, Ot as b, P as ie, Pt as x, Q as ae, R as S, S as oe, St as se, T as ce, Tt as C, U as le, V as ue, W as de, X as fe, Y as pe, Z as me, _ as he, _t as ge, a as _e, at as ve, b as ye, bt as be, c as xe, ct as Se, d as Ce, dt as we, et as Te, f as Ee, ft as De, g as Oe, gt as ke, h as Ae, ht as je, i as Me, it as Ne, j as Pe, jt as Fe, k as Ie, kt as Le, l as Re, lt as ze, m as Be, mt as Ve, n as He, nt as Ue, o as We, ot as Ge, p as Ke, pt as qe, q as Je, rt as Ye, s as w, st as Xe, t as Ze, tt as Qe, u as $e, ut as et, v as tt, vt as nt, w as rt, wt as T, x as it, xt as at, y as ot, yt as st, z as ct } from "./frameworkLiveTables-BQwB8K6R.js";
2
2
  import { timestampMs as lt, timestampMsOrNull as ut } from "./wire.js";
3
3
  import { Cause as dt, Chunk as ft, Data as pt, Effect as mt, Exit as ht, Option as gt, Schema as E, Stream as _t } from "effect";
4
4
  import { AsyncLocalStorage as vt } from "node:async_hooks";
@@ -316,15 +316,15 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
316
316
  }, hn = async (e, t, n, r, i, a) => {
317
317
  let o = n.target(), s = n.sourceKey ?? yn(i, o.tableName);
318
318
  if (s !== void 0) {
319
- let n = j(e, s), i = n.length === 0 ? [] : await bn(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
319
+ let n = bn(e, s), i = n.length === 0 ? [] : await xn(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
320
320
  for (let n of e) {
321
321
  let e = n[s];
322
322
  n[t] = e == null ? null : c.get(e) ?? null;
323
323
  }
324
- await xn(i, r.with, o, a);
324
+ await Sn(i, r.with, o, a);
325
325
  return;
326
326
  }
327
- let c = n.foreignKey ?? O(o, i.tableName, t), l = n.sourceKey ?? "id", u = j(e, l), d = u.length === 0 ? [] : await bn(o, c, u, r, a), f = /* @__PURE__ */ new Map();
327
+ let c = n.foreignKey ?? O(o, i.tableName, t), l = n.sourceKey ?? "id", u = bn(e, l), d = u.length === 0 ? [] : await xn(o, c, u, r, a), f = /* @__PURE__ */ new Map();
328
328
  for (let e of d) {
329
329
  let n = e[c];
330
330
  if (f.has(n)) throw new dn(fn({
@@ -340,9 +340,9 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
340
340
  let e = n[l];
341
341
  n[t] = e == null ? null : f.get(e) ?? null;
342
342
  }
343
- await xn(d, r.with, o, a);
343
+ await Sn(d, r.with, o, a);
344
344
  }, gn = async (e, t, n, r, i, a) => {
345
- let o = n.target(), s = n.foreignKey ?? O(o, i.tableName, t), c = n.sourceKey ?? "id", l = j(e, c), u = _n(r), d = l.length === 0 ? [] : await bn(o, s, l, u, a), f = /* @__PURE__ */ new Map();
345
+ let o = n.target(), s = n.foreignKey ?? O(o, i.tableName, t), c = n.sourceKey ?? "id", l = bn(e, c), u = _n(r), d = l.length === 0 ? [] : await xn(o, s, l, u, a), f = /* @__PURE__ */ new Map();
346
346
  for (let e of d) {
347
347
  let t = e[s], n = f.get(t);
348
348
  n ? n.push(e) : f.set(t, [e]);
@@ -358,12 +358,12 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
358
358
  let e = n[c];
359
359
  n[t] = f.get(e) ?? [];
360
360
  }
361
- await xn(d, r.with, o, a);
361
+ await Sn(d, r.with, o, a);
362
362
  }, _n = (e) => {
363
363
  let { limit: t, offset: n, ...r } = e;
364
364
  return r;
365
365
  }, vn = async (e, t, n, r, i, a) => {
366
- let o = n.target(), s = n.through(), c = j(e, "id");
366
+ let o = n.target(), s = n.through(), c = bn(e, "id");
367
367
  if (c.length === 0) {
368
368
  for (let n of e) n[t] = [];
369
369
  return;
@@ -384,8 +384,8 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
384
384
  for (let n of e) n[t] = [];
385
385
  return;
386
386
  }
387
- let f = await bn(o, "id", j(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
388
- await xn(f, r.with, o, a);
387
+ let f = await xn(o, "id", bn(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
388
+ await Sn(f, r.with, o, a);
389
389
  let m = r.junction === void 0 ? void 0 : r.junction === !0 ? Object.keys(s.fields) : r.junction, h = /* @__PURE__ */ new Map();
390
390
  for (let e of d) {
391
391
  let t = e[n.sourceKey], r = e[n.targetKey], i = p.get(r);
@@ -399,14 +399,14 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
399
399
  for (let n of e) n[t] = h.get(n.id) ?? [];
400
400
  }, yn = (e, t) => {
401
401
  for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
402
- }, j = (e, t) => {
402
+ }, bn = (e, t) => {
403
403
  let n = /* @__PURE__ */ new Set();
404
404
  for (let r of e) {
405
405
  let e = r[t];
406
406
  e != null && n.add(e);
407
407
  }
408
408
  return [...n];
409
- }, bn = (e, t, n, r, i) => {
409
+ }, xn = (e, t, n, r, i) => {
410
410
  let a = {
411
411
  column: t,
412
412
  op: "in",
@@ -420,50 +420,50 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
420
420
  skip: r.offset,
421
421
  projection: void 0
422
422
  });
423
- }, xn = async (e, t, n, r) => {
423
+ }, Sn = async (e, t, n, r) => {
424
424
  t !== void 0 && e.length !== 0 && (await pn(e, t, n, r)).forEach((t, n) => {
425
425
  let r = e[n];
426
426
  for (let [e, n] of Object.entries(t)) e in r || (r[e] = n);
427
427
  });
428
- }, Sn = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, Cn = class extends Error {
428
+ }, Cn = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, wn = class extends Error {
429
429
  _tag = "TenantNamespaceUnresolved";
430
430
  constructor(e) {
431
431
  super(e), this.name = "TenantNamespaceUnresolved";
432
432
  }
433
- }, wn = class extends Error {
433
+ }, Tn = class extends Error {
434
434
  _tag = "TenantNamespaceInvalid";
435
435
  constructor(e) {
436
436
  super(e), this.name = "TenantNamespaceInvalid";
437
437
  }
438
- }, Tn = 63, En = "tenant_", Dn = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), On = (e) => {
439
- if (e == null || e === "") throw new Cn("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.");
440
- let t = Dn(e);
441
- if (t.replace(/_/g, "") === "") throw new wn(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
442
- let n = `${En}${t}`;
443
- if (n.length > Tn) throw new wn(`namespace '${n}' for tenant '${e}' exceeds the ${Tn}-byte identifier limit. Use a shorter tenant id.`);
438
+ }, En = 63, Dn = "tenant_", On = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), kn = (e) => {
439
+ if (e == null || e === "") throw new wn("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.");
440
+ let t = On(e);
441
+ if (t.replace(/_/g, "") === "") throw new Tn(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
442
+ let n = `${Dn}${t}`;
443
+ if (n.length > En) throw new Tn(`namespace '${n}' for tenant '${e}' exceeds the ${En}-byte identifier limit. Use a shorter tenant id.`);
444
444
  return n;
445
- }, kn = (e, t) => e === null ? t : `${e}.${t}`, An = /* @__PURE__ */ new Set(["timestamp", "date"]), jn = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, Mn = (e, t) => {
446
- if (e === void 0 || t == null || !An.has(e) || t instanceof Date) return t;
445
+ }, An = (e, t) => e === null ? t : `${e}.${t}`, jn = /* @__PURE__ */ new Set(["timestamp", "date"]), Mn = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, Nn = (e, t) => {
446
+ if (e === void 0 || t == null || !jn.has(e) || t instanceof Date) return t;
447
447
  if (typeof t == "number" && Number.isFinite(t)) return new Date(t);
448
- if (typeof t == "string" && jn.test(t)) {
448
+ if (typeof t == "string" && Mn.test(t)) {
449
449
  let e = new Date(t);
450
450
  return Number.isNaN(e.getTime()) ? t : e;
451
451
  }
452
452
  return t;
453
- }, Nn = (e, t) => e === void 0 || !An.has(e) ? t : t.map((t) => Mn(e, t)), Pn = (e, t) => {
453
+ }, Pn = (e, t) => e === void 0 || !jn.has(e) ? t : t.map((t) => Nn(e, t)), Fn = (e, t) => {
454
454
  let { strings: n, values: r } = e, i = t.unsafe(n[0] ?? "");
455
455
  for (let e = 0; e < r.length; e++) i = t`${i}${r[e]}${t.unsafe(n[e + 1] ?? "")}`;
456
456
  return t`${i}`;
457
- }, M = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), N = (e, t, n = null, r) => {
458
- if ("not" in e) return t`NOT (${N(e.not, t, n, r)})`;
459
- if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => N(e, t, n, r)));
460
- if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => N(e, t, n, r)));
457
+ }, j = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), M = (e, t, n = null, r) => {
458
+ if ("not" in e) return t`NOT (${M(e.not, t, n, r)})`;
459
+ if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => M(e, t, n, r)));
460
+ if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => M(e, t, n, r)));
461
461
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
462
- let r = e, i = P(r.subquery, t, n);
462
+ let r = e, i = N(r.subquery, t, n);
463
463
  return r.op === "subquery-in" ? t`${t(r.column)} IN (${i})` : t`${t(r.column)} NOT IN (${i})`;
464
464
  }
465
465
  if (e.op === "exists" || e.op === "not-exists") {
466
- let r = e, i = P(r.subquery, t, n);
466
+ let r = e, i = N(r.subquery, t, n);
467
467
  return r.op === "exists" ? t`EXISTS (${i})` : t`NOT EXISTS (${i})`;
468
468
  }
469
469
  let i = e, a = t(i.column), o = i.path, s = o !== void 0 && o.length > 0, c = () => t.onDialectOrElse({
@@ -476,7 +476,7 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
476
476
  mssql: () => t.unsafe(w(i.column, o, "mssql", { numeric: !0 })),
477
477
  sqlite: () => t.unsafe(w(i.column, o, "sqlite", { numeric: !0 })),
478
478
  orElse: () => t.unsafe(w(i.column, o, "postgres", { numeric: !0 }))
479
- }), u = s ? c() : a, d = s ? l() : a, f = (e) => s && e != null ? String(e) : e, p = (e) => s ? Number(e) : e, m = s || r === void 0 ? void 0 : S(r)?.fields?.[i.column]?.type, h = (e) => Mn(m, e);
479
+ }), u = s ? c() : a, d = s ? l() : a, f = (e) => s && e != null ? String(e) : e, p = (e) => s ? Number(e) : e, m = s || r === void 0 ? void 0 : S(r)?.fields?.[i.column]?.type, h = (e) => Nn(m, e);
480
480
  switch (i.op) {
481
481
  case "eq": return t`${u} = ${f(h(i.value))}`;
482
482
  case "neq": return t`${u} <> ${f(h(i.value))}`;
@@ -493,7 +493,7 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
493
493
  return e.length === 0 ? t`TRUE` : t`${u} NOT IN ${t.in(s ? e.map((e) => f(e)) : e)}`;
494
494
  }
495
495
  case "contains": {
496
- let e = `%${M(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
496
+ let e = `%${j(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
497
497
  return t.onDialectOrElse({
498
498
  mysql: () => t`LOWER(${u}) LIKE LOWER(${e})`,
499
499
  mssql: () => t`LOWER(${u}) LIKE LOWER(${e})`,
@@ -502,7 +502,7 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
502
502
  });
503
503
  }
504
504
  case "startsWith": {
505
- let e = `${M(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
505
+ let e = `${j(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
506
506
  return t.onDialectOrElse({
507
507
  mysql: () => t`${u} LIKE ${e}`,
508
508
  orElse: () => t`${u} LIKE ${e} ESCAPE '\\'`
@@ -550,13 +550,13 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
550
550
  });
551
551
  }
552
552
  }
553
- }, Fn = (e, t) => {
553
+ }, In = (e, t) => {
554
554
  let n = [];
555
555
  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}`);
556
- }, In = (e, t) => t.csv(e.map((e) => {
556
+ }, Ln = (e, t) => t.csv(e.map((e) => {
557
557
  let n = e.column === void 0 ? t.unsafe("*") : t`${t(e.column)}`;
558
558
  if (e.op.startsWith("window-")) {
559
- let r = Fn(e.window ?? {}, t);
559
+ let r = In(e.window ?? {}, t);
560
560
  switch (e.op) {
561
561
  case "window-row-number": return t`ROW_NUMBER() OVER (${r}) AS ${t(e.alias)}`;
562
562
  case "window-rank": return t`RANK() OVER (${r}) AS ${t(e.alias)}`;
@@ -580,43 +580,43 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
580
580
  return t`${t(e.column)} AS ${t(e.alias)}`;
581
581
  default: throw Error(`compileAggregateProjection: unknown op '${e.op}'`);
582
582
  }
583
- })), Ln = (e) => `[${e.join(",")}]`, Rn = (e, t) => {
583
+ })), Rn = (e) => `[${e.join(",")}]`, zn = (e, t) => {
584
584
  if (e.queryVector === void 0) return null;
585
- let n = t(e.column), r = Ln(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
585
+ 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";
586
586
  return t.onDialectOrElse({
587
587
  mysql: () => t`${t.unsafe(a)}(${n}, ${r})`,
588
588
  mssql: () => t`NULL`,
589
589
  sqlite: () => t`NULL`,
590
590
  orElse: () => t`${n} ${t.unsafe(i)} ${r}::vector`
591
591
  });
592
- }, zn = (e, t) => {
592
+ }, Bn = (e, t) => {
593
593
  let n = t.unsafe(e.useGeography ? "::geography" : "::geometry");
594
594
  return t`ST_Distance(${t(e.column)}${n}, ${e.geom}${n})`;
595
- }, Bn = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, Vn = (e, t) => t`${t(`${e.indexName}_tsv`)}`, Hn = (e, t) => `${t}_${e.indexName}_fts`, Un = (e, t, n) => {
596
- let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${M(e.query)}%`;
595
+ }, Vn = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, Hn = (e, t) => t`${t(`${e.indexName}_tsv`)}`, Un = (e, t) => `${t}_${e.indexName}_fts`, Wn = (e, t, n) => {
596
+ let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${j(e.query)}%`;
597
597
  return n.onDialectOrElse({
598
598
  mysql: () => n`MATCH(${r}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
599
599
  sqlite: () => {
600
- let r = n(Hn(e, t));
600
+ let r = n(Un(e, t));
601
601
  return n`${n("id")} IN (SELECT ${n("row_id")} FROM ${r} WHERE ${r} MATCH ${e.query})`;
602
602
  },
603
603
  mssql: () => n.or(e.columns.map((e) => n`LOWER(${n(e)}) LIKE LOWER(${i}) ESCAPE '\\'`)),
604
- orElse: () => n`${Vn(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
604
+ orElse: () => n`${Hn(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
605
605
  });
606
- }, Wn = (e, t, n) => {
607
- let r = `%${M(e.query)}%`;
606
+ }, Gn = (e, t, n) => {
607
+ let r = `%${j(e.query)}%`;
608
608
  return n.onDialectOrElse({
609
609
  mysql: () => n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
610
610
  sqlite: () => {
611
- let r = n(Hn(e, t));
611
+ let r = n(Un(e, t));
612
612
  return n`COALESCE((SELECT -bm25(${r}) FROM ${r} WHERE ${r} MATCH ${e.query} AND ${r}.${n("row_id")} = ${n("id")}), 0)`;
613
613
  },
614
614
  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}`),
615
- orElse: () => n`ts_rank(${Vn(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
615
+ orElse: () => n`ts_rank(${Hn(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
616
616
  });
617
- }, P = (e, t, n = null) => {
617
+ }, N = (e, t, n = null) => {
618
618
  if (e.setOp && e.setOp.queries.length >= 2) {
619
- let r = e.setOp.kind === "union" ? "UNION" : e.setOp.kind === "union-all" ? "UNION ALL" : e.setOp.kind === "intersect" ? "INTERSECT" : "EXCEPT", i = e.setOp.queries.map((e) => t`(${P(e, t, n)})`).reduce((e, n, i) => i === 0 ? n : t`${e} ${t.unsafe(r)} ${n}`), a = [];
619
+ let r = e.setOp.kind === "union" ? "UNION" : e.setOp.kind === "union-all" ? "UNION ALL" : e.setOp.kind === "intersect" ? "INTERSECT" : "EXCEPT", i = e.setOp.queries.map((e) => t`(${N(e, t, n)})`).reduce((e, n, i) => i === 0 ? n : t`${e} ${t.unsafe(r)} ${n}`), a = [];
620
620
  if (e.order.length > 0 && a.push(t` ORDER BY ${t.csv(e.order.map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), e.take !== void 0) {
621
621
  if (!Number.isInteger(e.take) || e.take < 0) throw Error(`compileSelect: invalid take ${e.take}`);
622
622
  a.push(t` LIMIT ${t.unsafe(String(e.take))}`);
@@ -627,7 +627,7 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
627
627
  }
628
628
  return t`${i}${a.reduce((e, n) => t`${e}${n}`, t``)}`;
629
629
  }
630
- let r = e.annClause === void 0 ? null : Rn(e.annClause, t);
630
+ let r = e.annClause === void 0 ? null : zn(e.annClause, t);
631
631
  e.spatialClause !== void 0 && t.onDialectOrElse({
632
632
  mysql: () => {
633
633
  throw Error("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
@@ -640,57 +640,57 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
640
640
  },
641
641
  orElse: () => t``
642
642
  });
643
- let i = e.spatialClause?.projectAs === void 0 ? null : zn(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? In(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 ? Wn(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({
643
+ let i = e.spatialClause?.projectAs === void 0 ? null : Bn(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? Ln(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 ? Gn(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({
644
644
  orElse: () => t`DISTINCT ON (${t.csv(e.distinctOn.map((e) => t`${t(e)}`))}) `,
645
645
  mysql: () => t`DISTINCT `,
646
646
  mssql: () => t`DISTINCT `,
647
647
  sqlite: () => t`DISTINCT `
648
- }) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(kn(n, e.table))}` : t`${t(kn(n, e.table))} AS ${t(e.alias)}`, m = (e.joins ?? []).map((e) => {
648
+ }) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(An(n, e.table))}` : t`${t(An(n, e.table))} AS ${t(e.alias)}`, m = (e.joins ?? []).map((e) => {
649
649
  let r = e.kind === "inner" ? "INNER" : "LEFT";
650
- return t` ${t.unsafe(r)} JOIN ${t(kn(n, e.table))} AS ${t(e.alias)} ON ${N(e.on, t, n)}`;
651
- }), 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 ? N(e.predicate, t, n, e.table) : 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``, ne = e.having ? t` HAVING ${N(e.having, t, n, e.table)}` : t``, v = e.skip !== void 0, y = [];
652
- r !== null && y.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && y.push(e.spatialClause.order === "desc" ? t`${Bn(e.spatialClause, t)} DESC` : t`${Bn(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && y.push(t`${l} DESC`);
650
+ return t` ${t.unsafe(r)} JOIN ${t(An(n, e.table))} AS ${t(e.alias)} ON ${M(e.on, t, n)}`;
651
+ }), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null : Wn(c, e.table, t), _ = [e.predicate ? M(e.predicate, t, n, e.table) : null, g].filter((e) => e !== null), ee = _.length > 0 ? t` WHERE ${t.and(_)}` : t``, v = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, te = e.having ? t` HAVING ${M(e.having, t, n, e.table)}` : t``, ne = e.skip !== void 0, y = [];
652
+ r !== null && y.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && y.push(e.spatialClause.order === "desc" ? t`${Vn(e.spatialClause, t)} DESC` : t`${Vn(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && y.push(t`${l} DESC`);
653
653
  for (let n of e.order) y.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
654
- let re = y.length > 0 ? t` ORDER BY ${t.csv(y)}` : v ? t.onDialectOrElse({
654
+ let re = y.length > 0 ? t` ORDER BY ${t.csv(y)}` : ne ? t.onDialectOrElse({
655
655
  mssql: () => t` ORDER BY (SELECT NULL)`,
656
656
  orElse: () => t``
657
657
  }) : t``, b = (e) => {
658
658
  if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`compileSelect: expected non-negative integer take/skip, got ${e}`);
659
659
  return t.unsafe(String(e));
660
- }, ie = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${P(e.descriptor, t, n)})`), x = (e.ctes ?? []).some((e) => e.recursive === !0), ae = ie.length > 0 ? t`WITH ${t.unsafe(x ? "RECURSIVE " : "")}${t.csv(ie)} ` : t``;
660
+ }, ie = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${N(e.descriptor, t, n)})`), x = (e.ctes ?? []).some((e) => e.recursive === !0), ae = ie.length > 0 ? t`WITH ${t.unsafe(x ? "RECURSIVE " : "")}${t.csv(ie)} ` : t``;
661
661
  return t.onDialectOrElse({
662
662
  mssql: () => {
663
- let n = e.take !== void 0 && !v ? t`TOP ${b(e.take)} ` : t``, r = v ? t` OFFSET ${b(e.skip)} ROWS FETCH NEXT ${b(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
664
- return t`${ae}SELECT ${n}${f}${d} FROM ${h}${ee}${te}${ne}${re}${r}`;
663
+ let n = e.take !== void 0 && !ne ? t`TOP ${b(e.take)} ` : t``, r = ne ? t` OFFSET ${b(e.skip)} ROWS FETCH NEXT ${b(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
664
+ return t`${ae}SELECT ${n}${f}${d} FROM ${h}${ee}${v}${te}${re}${r}`;
665
665
  },
666
666
  orElse: () => {
667
- let n = e.take === void 0 ? t`` : t` LIMIT ${b(e.take)}`, r = v ? t` OFFSET ${b(e.skip)}` : t``;
668
- return t`${ae}SELECT ${f}${d} FROM ${h}${ee}${te}${ne}${re}${n}${r}`;
667
+ let n = e.take === void 0 ? t`` : t` LIMIT ${b(e.take)}`, r = ne ? t` OFFSET ${b(e.skip)}` : t``;
668
+ return t`${ae}SELECT ${f}${d} FROM ${h}${ee}${v}${te}${re}${n}${r}`;
669
669
  }
670
670
  });
671
- }, Gn = (e, t, n) => {
671
+ }, Kn = (e, t, n) => {
672
672
  if (e.eager === void 0) return null;
673
- let r = qn(e.table, e.eager, e.sourceTable);
673
+ let r = Jn(e.table, e.eager, e.sourceTable);
674
674
  if (r === null) return null;
675
- let i = er(n, e, r, $n(t, n));
675
+ let i = tr(n, e, r, er(t, n));
676
676
  return i === null ? null : {
677
677
  fragment: i,
678
- decode: rr(r, n)
678
+ decode: ir(r, n)
679
679
  };
680
- }, F = (e) => e.relation.kind === "one" && e.fkSide === "target", Kn = (e) => ({
680
+ }, P = (e) => e.relation.kind === "one" && e.fkSide === "target", qn = (e) => ({
681
681
  ...e,
682
682
  branch: {
683
683
  ...e.branch,
684
684
  limit: 2
685
685
  }
686
- }), qn = (e, t, n) => {
686
+ }), Jn = (e, t, n) => {
687
687
  let r = n ?? ue(e), i = Zt(e);
688
688
  if (i === void 0) return null;
689
689
  let a = [];
690
690
  for (let [e, n] of Object.entries(t)) {
691
691
  let t = i[e];
692
692
  if (t === void 0) return null;
693
- let o = Jn(e, t, r, n === !0 ? {} : n);
693
+ let o = Yn(e, t, r, n === !0 ? {} : n);
694
694
  if (o === null) return null;
695
695
  a.push(o);
696
696
  }
@@ -698,11 +698,11 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
698
698
  table: r,
699
699
  children: a
700
700
  };
701
- }, Jn = (e, t, n, r) => {
701
+ }, Yn = (e, t, n, r) => {
702
702
  let i = t.target(), a = (t.kind === "manyToMany" ? void 0 : t.sourceKey) ?? "id", o, s;
703
703
  if (t.kind === "manyToMany") o = t.targetKey, s = "target";
704
704
  else if (t.kind === "one") {
705
- let r = t.sourceKey ?? Qn(n, i.tableName);
705
+ let r = t.sourceKey ?? $n(n, i.tableName);
706
706
  if (r !== void 0) o = r, s = "source";
707
707
  else try {
708
708
  o = t.foreignKey ?? O(i, n.tableName, e), s = "target";
@@ -721,7 +721,7 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
721
721
  for (let [n, a] of Object.entries(r.with)) {
722
722
  let r = e?.[n];
723
723
  if (r === void 0) return null;
724
- let o = Jn(n, r, i, a === !0 ? {} : a);
724
+ let o = Yn(n, r, i, a === !0 ? {} : a);
725
725
  if (o === null) return null;
726
726
  t.push(o);
727
727
  }
@@ -737,9 +737,9 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
737
737
  fkSide: s,
738
738
  branch: r,
739
739
  children: c,
740
- junction: Yn(t, r)
740
+ junction: Xn(t, r)
741
741
  };
742
- }, Yn = (e, t) => {
742
+ }, Xn = (e, t) => {
743
743
  if (e.kind !== "manyToMany" || t.junction === void 0) return;
744
744
  let n = e.through(), r = t.junction === !0 ? Object.keys(n.fields) : t.junction, i = r.filter((e) => e in n.fields);
745
745
  return {
@@ -751,35 +751,35 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
751
751
  return t !== void 0 && (t.type === "timestamp" || t.type === "date");
752
752
  })
753
753
  };
754
- }, Xn = (e) => `__j_${e}`, Zn = "__j", Qn = (e, t) => {
754
+ }, Zn = (e) => `__j_${e}`, Qn = "__j", $n = (e, t) => {
755
755
  for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
756
- }, $n = (e, t) => {
756
+ }, er = (e, t) => {
757
757
  let n = 0;
758
758
  return {
759
759
  sql: e,
760
760
  dialect: t,
761
761
  nextAlias: () => `__a${n++}`
762
762
  };
763
- }, er = (e, t, n, r) => {
763
+ }, tr = (e, t, n, r) => {
764
764
  switch (e) {
765
- case "postgres": return or(t, n, r);
765
+ case "postgres": return sr(t, n, r);
766
766
  case "sqlite":
767
- case "turso": return mr(t, n, r);
767
+ case "turso": return hr(t, n, r);
768
768
  case "mysql":
769
- case "mariadb": return wr(t, n, r);
770
- case "mssql": return jr(t, n, r);
769
+ case "mariadb": return Tr(t, n, r);
770
+ case "mssql": return Mr(t, n, r);
771
771
  }
772
- }, tr = (e, t) => t === "mssql" && !nr.test(e) ? /* @__PURE__ */ new Date(`${e}Z`) : new Date(e), nr = /(?:Z|[+-]\d{2}:?\d{2})$/, rr = (e, t) => {
773
- let n = ir(e.table, e.children, t);
772
+ }, nr = (e, t) => t === "mssql" && !rr.test(e) ? /* @__PURE__ */ new Date(`${e}Z`) : new Date(e), rr = /(?:Z|[+-]\d{2}:?\d{2})$/, ir = (e, t) => {
773
+ let n = ar(e.table, e.children, t);
774
774
  return (e) => e.map((e) => {
775
775
  let t = e.__row, r = typeof t == "string" ? JSON.parse(t) : t;
776
776
  return n(r);
777
777
  });
778
- }, ir = (e, t, n) => {
778
+ }, ar = (e, t, n) => {
779
779
  let r = [];
780
780
  for (let [t, n] of Object.entries(e.fields)) (n.type === "timestamp" || n.type === "date") && r.push(t);
781
781
  let i = t.map((e) => {
782
- let t = ir(e.target, e.children, n), r = e.relation.kind === "one", i = F(e), a = i ? fn({
782
+ let t = ar(e.target, e.children, n), r = e.relation.kind === "one", i = P(e), a = i ? fn({
783
783
  relationName: e.relationName,
784
784
  sourceTableName: e.source.tableName,
785
785
  targetTableName: e.target.tableName,
@@ -792,14 +792,14 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
792
792
  isSingle: r,
793
793
  fromOverFetch: i,
794
794
  cardinalityMessage: a,
795
- junction: ar(e.junction, n)
795
+ junction: or(e.junction, n)
796
796
  };
797
797
  });
798
798
  return (e) => {
799
799
  let t = { ...e };
800
800
  for (let e of r) {
801
801
  let r = t[e];
802
- typeof r == "string" && (t[e] = tr(r, n));
802
+ typeof r == "string" && (t[e] = nr(r, n));
803
803
  }
804
804
  for (let e of i) {
805
805
  let n = t[e.name];
@@ -821,204 +821,204 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
821
821
  }
822
822
  return t;
823
823
  };
824
- }, ar = (e, t) => {
824
+ }, or = (e, t) => {
825
825
  if (e === void 0) return;
826
826
  let n = new Set(e.dateColumns), r = e.requested;
827
827
  return (e) => {
828
828
  let i = e._junction ?? {}, a = {};
829
829
  for (let e of r) {
830
830
  let r = i[e];
831
- a[e] = n.has(e) && typeof r == "string" ? tr(r, t) : r;
831
+ a[e] = n.has(e) && typeof r == "string" ? nr(r, t) : r;
832
832
  }
833
833
  return {
834
834
  ...e,
835
835
  _junction: a
836
836
  };
837
837
  };
838
- }, or = (e, t, n) => {
839
- let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = sr(i, t.children, n);
840
- return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${V(e.predicate, i, r)}` : r``}${e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``}${e.take === void 0 ? r`` : r` LIMIT ${B(e.take, r)}`}${e.skip === void 0 ? r`` : r` OFFSET ${B(e.skip, r)}`}`;
841
- }, sr = (e, t, n, r) => {
842
- let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${z(Zn, i)}::text)`;
838
+ }, sr = (e, t, n) => {
839
+ let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = cr(i, t.children, n);
840
+ return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${B(e.predicate, i, r)}` : r``}${e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${L(i, e.column, r)} DESC` : r`${L(i, e.column, r)} ASC`))}` : r``}${e.take === void 0 ? r`` : r` LIMIT ${z(e.take, r)}`}${e.skip === void 0 ? r`` : r` OFFSET ${z(e.skip, r)}`}`;
841
+ }, cr = (e, t, n, r) => {
842
+ let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${R(Qn, i)}::text)`;
843
843
  if (t.length === 0 && r === void 0) return a;
844
844
  let o = [];
845
- r !== void 0 && o.push(i`${z("_junction", i)}, ${R(e, Zn, i)}`);
845
+ r !== void 0 && o.push(i`${R("_junction", i)}, ${L(e, Qn, i)}`);
846
846
  for (let r of t) {
847
- let t = cr(r, e, n);
847
+ let t = lr(r, e, n);
848
848
  if (t === null) return null;
849
- o.push(i`${z(r.relationName, i)}, ${t}`);
849
+ o.push(i`${R(r.relationName, i)}, ${t}`);
850
850
  }
851
851
  return i`${a} || jsonb_build_object(${i.csv(o)})`;
852
- }, cr = (e, t, n) => {
852
+ }, lr = (e, t, n) => {
853
853
  switch (e.relation.kind) {
854
- case "one": return F(e) ? ur(Kn(e), t, n) : lr(e, t, n);
855
- case "many": return ur(e, t, n);
856
- case "manyToMany": return dr(e, t, n);
854
+ case "one": return P(e) ? dr(qn(e), t, n) : ur(e, t, n);
855
+ case "many": return dr(e, t, n);
856
+ case "manyToMany": return fr(e, t, n);
857
857
  }
858
- }, lr = (e, t, n) => {
859
- let r = n.sql, i = n.nextAlias(), a = sr(i, e.children, n);
858
+ }, ur = (e, t, n) => {
859
+ let r = n.sql, i = n.nextAlias(), a = cr(i, e.children, n);
860
860
  if (a === null) return null;
861
- let o = e.fkSide === "source" ? r`${R(i, "id", r)} = ${R(t, e.foreignKey, r)}` : r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${V(e.branch.where, i, r)}`, c = I(i, e.branch.orderBy, r);
861
+ let o = e.fkSide === "source" ? r`${L(i, "id", r)} = ${L(t, e.foreignKey, r)}` : r`${L(i, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${B(e.branch.where, i, r)}`, c = F(i, e.branch.orderBy, r);
862
862
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}${c} LIMIT 1)`;
863
- }, ur = (e, t, n) => {
864
- let r = n.sql, i = n.nextAlias(), a = sr(i, e.children, n);
863
+ }, dr = (e, t, n) => {
864
+ let r = n.sql, i = n.nextAlias(), a = cr(i, e.children, n);
865
865
  if (a === null) return null;
866
- let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${N(e.branch.where, r)}`, c = pr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`;
866
+ let o = r`${L(void 0, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${M(e.branch.where, r)}`, c = mr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${z(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${z(e.branch.offset, r)}`;
867
867
  return r`COALESCE((SELECT jsonb_agg(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), '[]'::jsonb)`;
868
- }, dr = (e, t, n) => {
869
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = sr(o, e.children, n, e.junction);
868
+ }, fr = (e, t, n) => {
869
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = cr(o, e.children, n, e.junction);
870
870
  if (c === null) return null;
871
- let l = e.branch.where === void 0 ? r`` : r` AND ${N(e.branch.where, r)}`, u = H(e, s, r), d = I(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : r`, ${fr(e.junction, s, r)} AS ${r(Zn)}`;
872
- return r`COALESCE((SELECT jsonb_agg(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${R(o, "id", r)} = ${R(s, i.targetKey, r)} WHERE ${R(s, i.sourceKey, r)} = ${R(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), '[]'::jsonb)`;
873
- }, fr = (e, t, n) => e.present.length === 0 ? n`jsonb_build_object()` : n`jsonb_build_object(${n.csv(e.present.map((e) => n`${z(e, n)}, ${R(t, e, n)}`))})`, I = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${R(e, t.column, n)} DESC` : n`${R(e, t.column, n)} ASC`))}`, pr = (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`))}`, mr = (e, t, n) => {
874
- let r = n.sql, i = n.nextAlias(), a = hr(i, t.table, t.children, n);
871
+ let l = e.branch.where === void 0 ? r`` : r` AND ${M(e.branch.where, r)}`, u = V(e, s, r), d = F(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${z(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${z(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : r`, ${pr(e.junction, s, r)} AS ${r(Qn)}`;
872
+ return r`COALESCE((SELECT jsonb_agg(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${L(o, "id", r)} = ${L(s, i.targetKey, r)} WHERE ${L(s, i.sourceKey, r)} = ${L(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), '[]'::jsonb)`;
873
+ }, pr = (e, t, n) => e.present.length === 0 ? n`jsonb_build_object()` : n`jsonb_build_object(${n.csv(e.present.map((e) => n`${R(e, n)}, ${L(t, e, n)}`))})`, F = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${L(e, t.column, n)} DESC` : n`${L(e, t.column, n)} ASC`))}`, mr = (e, t) => e === void 0 || e.length === 0 ? t`` : t` ORDER BY ${t.csv(e.map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`, hr = (e, t, n) => {
874
+ let r = n.sql, i = n.nextAlias(), a = gr(i, t.table, t.children, n);
875
875
  if (a === null) return null;
876
- let o = e.predicate ? r` WHERE ${V(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${B(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${B(e.skip, r)}`;
876
+ let o = e.predicate ? r` WHERE ${B(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${L(i, e.column, r)} DESC` : r`${L(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${z(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${z(e.skip, r)}`;
877
877
  return r`SELECT ${a} AS "__row" FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
878
- }, hr = (e, t, n, r, i) => {
878
+ }, gr = (e, t, n, r, i) => {
879
879
  let a = r.sql, o = [];
880
- for (let n of Object.keys(t.fields)) o.push(a`${z(n, a)}, ${R(e, n, a)}`);
880
+ for (let n of Object.keys(t.fields)) o.push(a`${R(n, a)}, ${L(e, n, a)}`);
881
881
  if (i !== void 0) {
882
- let e = gr(i.projection, i.source, a);
883
- o.push(a`${z("_junction", a)}, json_object(${e})`);
882
+ let e = _r(i.projection, i.source, a);
883
+ o.push(a`${R("_junction", a)}, json_object(${e})`);
884
884
  }
885
885
  for (let t of n) {
886
- let n = br(t, e, r);
886
+ let n = xr(t, e, r);
887
887
  if (n === null) return null;
888
- o.push(a`${z(t.relationName, a)}, ${n}`);
888
+ o.push(a`${R(t.relationName, a)}, ${n}`);
889
889
  }
890
890
  return a`json_object(${a.csv(o)})`;
891
- }, gr = (e, t, n) => e.present.length === 0 ? n`` : n.csv(e.present.map((e) => n`${z(e, n)}, ${R(t.alias, t.physical(e), n)}`)), _r = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${R(t, e, n)} AS ${n(Xn(e))}`))}`, vr = (e) => ({
891
+ }, _r = (e, t, n) => e.present.length === 0 ? n`` : n.csv(e.present.map((e) => n`${R(e, n)}, ${L(t.alias, t.physical(e), n)}`)), vr = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${L(t, e, n)} AS ${n(Zn(e))}`))}`, yr = (e) => ({
892
892
  alias: e,
893
- physical: Xn
894
- }), yr = (e) => ({
893
+ physical: Zn
894
+ }), br = (e) => ({
895
895
  alias: e,
896
896
  physical: (e) => e
897
- }), br = (e, t, n) => {
897
+ }), xr = (e, t, n) => {
898
898
  switch (e.relation.kind) {
899
- case "one": return F(e) ? Sr(Kn(e), t, n) : xr(e, t, n);
900
- case "many": return Sr(e, t, n);
901
- case "manyToMany": return Cr(e, t, n);
899
+ case "one": return P(e) ? Cr(qn(e), t, n) : Sr(e, t, n);
900
+ case "many": return Cr(e, t, n);
901
+ case "manyToMany": return wr(e, t, n);
902
902
  }
903
- }, xr = (e, t, n) => {
904
- let r = n.sql, i = n.nextAlias(), a = hr(i, e.target, e.children, n);
903
+ }, Sr = (e, t, n) => {
904
+ let r = n.sql, i = n.nextAlias(), a = gr(i, e.target, e.children, n);
905
905
  if (a === null) return null;
906
- let o = e.fkSide === "source" ? r`${R(i, "id", r)} = ${R(t, e.foreignKey, r)}` : r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`;
906
+ let o = e.fkSide === "source" ? r`${L(i, "id", r)} = ${L(t, e.foreignKey, r)}` : r`${L(i, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`;
907
907
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
908
- }, Sr = (e, t, n) => {
909
- let r = n.sql, i = n.nextAlias(), a = hr(i, e.target, e.children, n);
908
+ }, Cr = (e, t, n) => {
909
+ let r = n.sql, i = n.nextAlias(), a = gr(i, e.target, e.children, n);
910
910
  if (a === null) return null;
911
- let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${N(U(e.branch.where), r)}`, c = pr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`;
911
+ let o = r`${L(void 0, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${M(H(e.branch.where), r)}`, c = mr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${z(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${z(e.branch.offset, r)}`;
912
912
  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('[]'))`;
913
- }, Cr = (e, t, n) => {
914
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = hr(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
913
+ }, wr = (e, t, n) => {
914
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = gr(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
915
915
  projection: e.junction,
916
- source: vr(o)
916
+ source: yr(o)
917
917
  });
918
918
  if (c === null) return null;
919
- let l = e.branch.where === void 0 ? r`` : r` AND ${N(U(e.branch.where), r)}`, u = H(e, s, r, !0), d = I(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : _r(e.junction, s, r);
920
- return r`COALESCE((SELECT json_group_array(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${R(o, "id", r)} = ${R(s, i.targetKey, r)} WHERE ${R(s, i.sourceKey, r)} = ${R(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), json('[]'))`;
921
- }, wr = (e, t, n) => {
922
- let r = n.sql, i = n.nextAlias(), a = L(i, t.table, t.children, n);
919
+ let l = e.branch.where === void 0 ? r`` : r` AND ${M(H(e.branch.where), r)}`, u = V(e, s, r, !0), d = F(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${z(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${z(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : vr(e.junction, s, r);
920
+ return r`COALESCE((SELECT json_group_array(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${L(o, "id", r)} = ${L(s, i.targetKey, r)} WHERE ${L(s, i.sourceKey, r)} = ${L(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), json('[]'))`;
921
+ }, Tr = (e, t, n) => {
922
+ let r = n.sql, i = n.nextAlias(), a = I(i, t.table, t.children, n);
923
923
  if (a === null) return null;
924
- let o = e.predicate ? r` WHERE ${V(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${B(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${B(e.skip, r)}`;
924
+ let o = e.predicate ? r` WHERE ${B(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${L(i, e.column, r)} DESC` : r`${L(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${z(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${z(e.skip, r)}`;
925
925
  return r`SELECT ${a} AS \`__row\` FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
926
- }, L = (e, t, n, r, i) => {
926
+ }, I = (e, t, n, r, i) => {
927
927
  let a = r.sql, o = [];
928
- for (let n of Object.keys(t.fields)) o.push(a`${z(n, a)}, ${R(e, n, a)}`);
928
+ for (let n of Object.keys(t.fields)) o.push(a`${R(n, a)}, ${L(e, n, a)}`);
929
929
  if (i !== void 0) {
930
- let e = gr(i.projection, i.source, a);
931
- o.push(a`${z("_junction", a)}, JSON_OBJECT(${e})`);
930
+ let e = _r(i.projection, i.source, a);
931
+ o.push(a`${R("_junction", a)}, JSON_OBJECT(${e})`);
932
932
  }
933
933
  for (let t of n) {
934
- let n = Tr(t, e, r);
934
+ let n = Er(t, e, r);
935
935
  if (n === null) return null;
936
- o.push(a`${z(t.relationName, a)}, ${n}`);
936
+ o.push(a`${R(t.relationName, a)}, ${n}`);
937
937
  }
938
938
  return a`JSON_OBJECT(${a.csv(o)})`;
939
- }, Tr = (e, t, n) => {
939
+ }, Er = (e, t, n) => {
940
940
  switch (e.relation.kind) {
941
941
  case "one":
942
- if (F(e)) {
943
- let r = Kn(e);
944
- return n.dialect === "mariadb" ? kr(r, t, n) : Dr(r, t, n);
942
+ if (P(e)) {
943
+ let r = qn(e);
944
+ return n.dialect === "mariadb" ? Ar(r, t, n) : Or(r, t, n);
945
945
  }
946
- return Er(e, t, n);
947
- case "many": return n.dialect === "mariadb" ? kr(e, t, n) : Dr(e, t, n);
948
- case "manyToMany": return n.dialect === "mariadb" ? Ar(e, t, n) : Or(e, t, n);
946
+ return Dr(e, t, n);
947
+ case "many": return n.dialect === "mariadb" ? Ar(e, t, n) : Or(e, t, n);
948
+ case "manyToMany": return n.dialect === "mariadb" ? jr(e, t, n) : kr(e, t, n);
949
949
  }
950
- }, Er = (e, t, n) => {
951
- let r = n.sql, i = n.nextAlias(), a = L(i, e.target, e.children, n);
950
+ }, Dr = (e, t, n) => {
951
+ let r = n.sql, i = n.nextAlias(), a = I(i, e.target, e.children, n);
952
952
  if (a === null) return null;
953
- let o = e.fkSide === "source" ? r`${R(i, "id", r)} = ${R(t, e.foreignKey, r)}` : r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`;
953
+ let o = e.fkSide === "source" ? r`${L(i, "id", r)} = ${L(t, e.foreignKey, r)}` : r`${L(i, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`;
954
954
  return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
955
- }, Dr = (e, t, n) => {
956
- let r = n.sql, i = n.nextAlias(), a = L(i, e.target, e.children, n);
955
+ }, Or = (e, t, n) => {
956
+ let r = n.sql, i = n.nextAlias(), a = I(i, e.target, e.children, n);
957
957
  if (a === null) return null;
958
- let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${N(U(e.branch.where), r)}`, c = pr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`;
958
+ let o = r`${L(void 0, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${M(H(e.branch.where), r)}`, c = mr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${z(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${z(e.branch.offset, r)}`;
959
959
  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())`;
960
- }, Or = (e, t, n) => {
961
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = L(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
960
+ }, kr = (e, t, n) => {
961
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = I(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
962
962
  projection: e.junction,
963
- source: vr(o)
963
+ source: yr(o)
964
964
  });
965
965
  if (c === null) return null;
966
- let l = e.branch.where === void 0 ? r`` : r` AND ${N(U(e.branch.where), r)}`, u = H(e, s, r, !0), d = I(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : _r(e.junction, s, r);
967
- return r`COALESCE((SELECT JSON_ARRAYAGG(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${R(o, "id", r)} = ${R(s, i.targetKey, r)} WHERE ${R(s, i.sourceKey, r)} = ${R(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), JSON_ARRAY())`;
968
- }, kr = (e, t, n) => {
969
- let r = n.sql, i = n.nextAlias(), a = L(i, e.target, e.children, n);
970
- if (a === null) return null;
971
- let o = r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${N(U(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
972
- if (!(e.branch.limit !== void 0 || e.branch.offset !== void 0)) return r`COALESCE((SELECT JSON_ARRAYAGG(${a}${c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``}) FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}), JSON_ARRAY())`;
973
- let l = c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${r(e.column)} DESC` : r`${r(e.column)} ASC`))}` : r` ORDER BY ${r("id")}`, u = e.branch.limit, d = e.branch.offset, f = u !== void 0 && d !== void 0 ? r` AND ${R(i, "rn", r)} > ${B(d, r)} AND ${R(i, "rn", r)} <= ${B(d + u, r)}` : u === void 0 ? r` AND ${R(i, "rn", r)} > ${B(d, r)}` : r` AND ${R(i, "rn", r)} <= ${B(u, r)}`;
974
- return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${R(i, "rn", r)}) FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY ${r(e.foreignKey)}${l}) AS rn FROM ${r(e.target.tableName)}) AS ${r(i)} WHERE ${o}${s}${f}), JSON_ARRAY())`;
966
+ let l = e.branch.where === void 0 ? r`` : r` AND ${M(H(e.branch.where), r)}`, u = V(e, s, r, !0), d = F(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${z(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${z(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : vr(e.junction, s, r);
967
+ return r`COALESCE((SELECT JSON_ARRAYAGG(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${L(o, "id", r)} = ${L(s, i.targetKey, r)} WHERE ${L(s, i.sourceKey, r)} = ${L(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), JSON_ARRAY())`;
975
968
  }, Ar = (e, t, n) => {
969
+ let r = n.sql, i = n.nextAlias(), a = I(i, e.target, e.children, n);
970
+ if (a === null) return null;
971
+ let o = r`${L(i, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${M(H(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
972
+ if (!(e.branch.limit !== void 0 || e.branch.offset !== void 0)) return r`COALESCE((SELECT JSON_ARRAYAGG(${a}${c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${L(i, e.column, r)} DESC` : r`${L(i, e.column, r)} ASC`))}` : r``}) FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}), JSON_ARRAY())`;
973
+ let l = c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${r(e.column)} DESC` : r`${r(e.column)} ASC`))}` : r` ORDER BY ${r("id")}`, u = e.branch.limit, d = e.branch.offset, f = u !== void 0 && d !== void 0 ? r` AND ${L(i, "rn", r)} > ${z(d, r)} AND ${L(i, "rn", r)} <= ${z(d + u, r)}` : u === void 0 ? r` AND ${L(i, "rn", r)} > ${z(d, r)}` : r` AND ${L(i, "rn", r)} <= ${z(u, r)}`;
974
+ return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${L(i, "rn", r)}) FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY ${r(e.foreignKey)}${l}) AS rn FROM ${r(e.target.tableName)}) AS ${r(i)} WHERE ${o}${s}${f}), JSON_ARRAY())`;
975
+ }, jr = (e, t, n) => {
976
976
  let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = (t) => e.junction === void 0 ? void 0 : {
977
977
  projection: e.junction,
978
978
  source: t
979
- }, l = r`${R(s, i.sourceKey, r)} = ${R(t, "id", r)}`, u = r`${R(o, "id", r)} = ${R(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${N(U(e.branch.where), r)}`, f = H(e, s, r, !0), p = e.branch.orderBy ?? [];
979
+ }, l = r`${L(s, i.sourceKey, r)} = ${L(t, "id", r)}`, u = r`${L(o, "id", r)} = ${L(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${M(H(e.branch.where), r)}`, f = V(e, s, r, !0), p = e.branch.orderBy ?? [];
980
980
  if (!(e.branch.limit !== void 0 || e.branch.offset !== void 0)) {
981
- let t = L(o, e.target, e.children, n, c(yr(s)));
982
- return t === null ? null : r`COALESCE((SELECT JSON_ARRAYAGG(${t}${p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${R(o, e.column, r)} DESC` : r`${R(o, e.column, r)} ASC`))}` : r``}) FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u} WHERE ${l}${f}${d}), JSON_ARRAY())`;
983
- }
984
- let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${R(o, e.column, r)} DESC` : r`${R(o, e.column, r)} ASC`))}` : r` ORDER BY ${R(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, _ = h !== void 0 && g !== void 0 ? r` AND ${R(o, "rn", r)} > ${B(g, r)} AND ${R(o, "rn", r)} <= ${B(g + h, r)}` : h === void 0 ? r` AND ${R(o, "rn", r)} > ${B(g, r)}` : r` AND ${R(o, "rn", r)} <= ${B(h, r)}`, ee = e.branch.onJunction === void 0 ? r`` : r` WHERE ${V(U(e.branch.onJunction), s, r)}`, te = L(o, e.target, e.children, n, c(vr(o)));
985
- if (te === null) return null;
986
- let ne = e.junction === void 0 ? r`` : _r(e.junction, s, r);
987
- return r`COALESCE((SELECT JSON_ARRAYAGG(${te} ORDER BY ${R(o, "rn", r)}) FROM (SELECT ${r(o)}.*${ne}, ${R(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${R(s, i.sourceKey, r)}${m}) AS rn FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u}${ee}) AS ${r(o)} WHERE ${R(o, `__src_${i.sourceKey}`, r)} = ${R(t, "id", r)}${d}${_}), JSON_ARRAY())`;
988
- }, jr = (e, t, n) => {
989
- let r = n.sql, i = n.nextAlias(), a = Mr(i, t.table, t.children, n);
981
+ let t = I(o, e.target, e.children, n, c(br(s)));
982
+ return t === null ? null : r`COALESCE((SELECT JSON_ARRAYAGG(${t}${p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${L(o, e.column, r)} DESC` : r`${L(o, e.column, r)} ASC`))}` : r``}) FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u} WHERE ${l}${f}${d}), JSON_ARRAY())`;
983
+ }
984
+ let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${L(o, e.column, r)} DESC` : r`${L(o, e.column, r)} ASC`))}` : r` ORDER BY ${L(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, _ = h !== void 0 && g !== void 0 ? r` AND ${L(o, "rn", r)} > ${z(g, r)} AND ${L(o, "rn", r)} <= ${z(g + h, r)}` : h === void 0 ? r` AND ${L(o, "rn", r)} > ${z(g, r)}` : r` AND ${L(o, "rn", r)} <= ${z(h, r)}`, ee = e.branch.onJunction === void 0 ? r`` : r` WHERE ${B(H(e.branch.onJunction), s, r)}`, v = I(o, e.target, e.children, n, c(yr(o)));
985
+ if (v === null) return null;
986
+ let te = e.junction === void 0 ? r`` : vr(e.junction, s, r);
987
+ return r`COALESCE((SELECT JSON_ARRAYAGG(${v} ORDER BY ${L(o, "rn", r)}) FROM (SELECT ${r(o)}.*${te}, ${L(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${L(s, i.sourceKey, r)}${m}) AS rn FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u}${ee}) AS ${r(o)} WHERE ${L(o, `__src_${i.sourceKey}`, r)} = ${L(t, "id", r)}${d}${_}), JSON_ARRAY())`;
988
+ }, Mr = (e, t, n) => {
989
+ let r = n.sql, i = n.nextAlias(), a = Nr(i, t.table, t.children, n);
990
990
  if (a === null) return null;
991
- let o = e.predicate ? r` WHERE ${V(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
991
+ let o = e.predicate ? r` WHERE ${B(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${L(i, e.column, r)} DESC` : r`${L(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
992
992
  if (e.skip !== void 0) {
993
993
  let t = e.order.length > 0 ? s : r` ORDER BY (SELECT NULL)`;
994
- l = e.take === void 0 ? r`${t} OFFSET ${B(e.skip, r)} ROWS` : r`${t} OFFSET ${B(e.skip, r)} ROWS FETCH NEXT ${B(e.take, r)} ROWS ONLY`;
995
- } else e.take !== void 0 && (c = r`TOP ${B(e.take, r)} `);
994
+ l = e.take === void 0 ? r`${t} OFFSET ${z(e.skip, r)} ROWS` : r`${t} OFFSET ${z(e.skip, r)} ROWS FETCH NEXT ${z(e.take, r)} ROWS ONLY`;
995
+ } else e.take !== void 0 && (c = r`TOP ${z(e.take, r)} `);
996
996
  let u = e.skip === void 0 ? s : r``;
997
997
  return r`SELECT ${c}(SELECT ${a} FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER) AS ${r("__row")} FROM ${r(t.table.tableName)} AS ${r(i)}${o}${u}${l}`;
998
- }, Mr = (e, t, n, r, i) => {
998
+ }, Nr = (e, t, n, r, i) => {
999
999
  let a = r.sql, o = [];
1000
- for (let n of Object.keys(t.fields)) o.push(a`${R(e, n, a)} AS ${a(n)}`);
1001
- if (i !== void 0) for (let e of i.projection.present) o.push(a`${R(i.source.alias, i.source.physical(e), a)} AS ${Nr(`_junction.${e}`, a)}`);
1000
+ for (let n of Object.keys(t.fields)) o.push(a`${L(e, n, a)} AS ${a(n)}`);
1001
+ if (i !== void 0) for (let e of i.projection.present) o.push(a`${L(i.source.alias, i.source.physical(e), a)} AS ${Pr(`_junction.${e}`, a)}`);
1002
1002
  for (let t of n) {
1003
- let n = Pr(t, e, r);
1003
+ let n = Fr(t, e, r);
1004
1004
  if (n === null) return null;
1005
1005
  o.push(n);
1006
1006
  }
1007
1007
  return a.csv(o);
1008
- }, Nr = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), Pr = (e, t, n) => {
1008
+ }, Pr = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), Fr = (e, t, n) => {
1009
1009
  switch (e.relation.kind) {
1010
- case "one": return F(e) ? Lr(Kn(e), t, n) : Fr(e, t, n);
1011
- case "many": return Lr(e, t, n);
1012
- case "manyToMany": return Rr(e, t, n);
1010
+ case "one": return P(e) ? Rr(qn(e), t, n) : Ir(e, t, n);
1011
+ case "many": return Rr(e, t, n);
1012
+ case "manyToMany": return zr(e, t, n);
1013
1013
  }
1014
- }, Fr = (e, t, n) => {
1015
- let r = n.sql, i = n.nextAlias(), a = Mr(i, e.target, e.children, n);
1014
+ }, Ir = (e, t, n) => {
1015
+ let r = n.sql, i = n.nextAlias(), a = Nr(i, e.target, e.children, n);
1016
1016
  if (a === null) return null;
1017
- let o = e.fkSide === "source" ? r`${R(i, "id", r)} = ${R(t, e.foreignKey, r)}` : r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`;
1017
+ let o = e.fkSide === "source" ? r`${L(i, "id", r)} = ${L(t, e.foreignKey, r)}` : r`${L(i, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`;
1018
1018
  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)}`;
1019
- }, Ir = (e, t, n) => {
1019
+ }, Lr = (e, t, n) => {
1020
1020
  if (e.offset !== void 0) {
1021
- let r = e.orderBy && e.orderBy.length > 0 ? t : n` ORDER BY (SELECT NULL)`, i = e.limit === void 0 ? n`${r} OFFSET ${B(e.offset, n)} ROWS` : n`${r} OFFSET ${B(e.offset, n)} ROWS FETCH NEXT ${B(e.limit, n)} ROWS ONLY`;
1021
+ let r = e.orderBy && e.orderBy.length > 0 ? t : n` ORDER BY (SELECT NULL)`, i = e.limit === void 0 ? n`${r} OFFSET ${z(e.offset, n)} ROWS` : n`${r} OFFSET ${z(e.offset, n)} ROWS FETCH NEXT ${z(e.limit, n)} ROWS ONLY`;
1022
1022
  return {
1023
1023
  top: n``,
1024
1024
  pagination: i,
@@ -1026,33 +1026,33 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1026
1026
  };
1027
1027
  }
1028
1028
  return {
1029
- top: e.limit === void 0 ? n`` : n`TOP ${B(e.limit, n)} `,
1029
+ top: e.limit === void 0 ? n`` : n`TOP ${z(e.limit, n)} `,
1030
1030
  pagination: n``,
1031
1031
  finalOrder: t
1032
1032
  };
1033
- }, Lr = (e, t, n) => {
1034
- let r = n.sql, i = n.nextAlias(), a = Mr(i, e.target, e.children, n);
1035
- if (a === null) return null;
1036
- let o = e.branch.where === void 0 ? r`` : r` AND ${V(e.branch.where, i, r)}`, s = I(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } = Ir(e.branch, s, r);
1037
- return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
1038
1033
  }, Rr = (e, t, n) => {
1039
- let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Mr(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1034
+ let r = n.sql, i = n.nextAlias(), a = Nr(i, e.target, e.children, n);
1035
+ if (a === null) return null;
1036
+ let o = e.branch.where === void 0 ? r`` : r` AND ${B(e.branch.where, i, r)}`, s = F(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } = Lr(e.branch, s, r);
1037
+ return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${L(i, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
1038
+ }, zr = (e, t, n) => {
1039
+ let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Nr(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
1040
1040
  projection: e.junction,
1041
- source: yr(s)
1041
+ source: br(s)
1042
1042
  });
1043
1043
  if (c === null) return null;
1044
- let l = e.branch.where === void 0 ? r`` : r` AND ${V(e.branch.where, o, r)}`, u = H(e, s, r), d = I(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } = Ir(e.branch, d, r);
1045
- return r`ISNULL(JSON_QUERY((SELECT ${f}${c} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${R(o, "id", r)} = ${R(s, i.targetKey, r)} WHERE ${R(s, i.sourceKey, r)} = ${R(t, "id", r)}${u}${l}${m}${p} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
1046
- }, R = (e, t, n) => e === void 0 ? n`${n(t)}` : n`${n(e)}.${n(t)}`, z = (e, t) => t.unsafe(`'${e.replace(/'/g, "''")}'`), B = (e, t) => {
1044
+ let l = e.branch.where === void 0 ? r`` : r` AND ${B(e.branch.where, o, r)}`, u = V(e, s, r), d = F(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } = Lr(e.branch, d, r);
1045
+ return r`ISNULL(JSON_QUERY((SELECT ${f}${c} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${L(o, "id", r)} = ${L(s, i.targetKey, r)} WHERE ${L(s, i.sourceKey, r)} = ${L(t, "id", r)}${u}${l}${m}${p} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
1046
+ }, L = (e, t, n) => e === void 0 ? n`${n(t)}` : n`${n(e)}.${n(t)}`, R = (e, t) => t.unsafe(`'${e.replace(/'/g, "''")}'`), z = (e, t) => {
1047
1047
  if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`literalInt: expected non-negative integer, got ${e}`);
1048
1048
  return t.unsafe(String(e));
1049
- }, V = (e, t, n) => N(zr(e, t), n), H = (e, t, n, r = !1) => {
1049
+ }, B = (e, t, n) => M(Br(e, t), n), V = (e, t, n, r = !1) => {
1050
1050
  let i = e.branch.onJunction;
1051
- return i === void 0 ? n`` : n` AND ${V(r ? U(i) : i, t, n)}`;
1052
- }, zr = (e, t) => {
1053
- if ("not" in e) return { not: zr(e.not, t) };
1054
- if ("and" in e) return { and: e.and.map((e) => zr(e, t)) };
1055
- if ("or" in e) return { or: e.or.map((e) => zr(e, t)) };
1051
+ return i === void 0 ? n`` : n` AND ${B(r ? H(i) : i, t, n)}`;
1052
+ }, Br = (e, t) => {
1053
+ if ("not" in e) return { not: Br(e.not, t) };
1054
+ if ("and" in e) return { and: e.and.map((e) => Br(e, t)) };
1055
+ if ("or" in e) return { or: e.or.map((e) => Br(e, t)) };
1056
1056
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
1057
1057
  let n = e;
1058
1058
  return {
@@ -1066,23 +1066,23 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1066
1066
  ...n,
1067
1067
  column: `${t}.${n.column}`
1068
1068
  };
1069
- }, U = (e) => {
1070
- if ("not" in e) return { not: U(e.not) };
1071
- if ("and" in e) return { and: e.and.map((e) => U(e)) };
1072
- if ("or" in e) return { or: e.or.map((e) => U(e)) };
1069
+ }, H = (e) => {
1070
+ if ("not" in e) return { not: H(e.not) };
1071
+ if ("and" in e) return { and: e.and.map((e) => H(e)) };
1072
+ if ("or" in e) return { or: e.or.map((e) => H(e)) };
1073
1073
  if (e.op === "subquery-in" || e.op === "subquery-not-in" || e.op === "exists" || e.op === "not-exists") return e;
1074
1074
  let t = e;
1075
1075
  return {
1076
1076
  ...t,
1077
- value: Br(t.value)
1077
+ value: Vr(t.value)
1078
1078
  };
1079
- }, Br = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => Br(e)) : e, Vr = Symbol.for("@voltro/database/coreTablesRegistry"), Hr = globalThis, Ur = Hr[Vr] ?? (Hr[Vr] = {}), Wr = (e) => {
1080
- e.actors !== void 0 && (Ur.actors = e.actors), e.tenants !== void 0 && (Ur.tenants = e.tenants);
1081
- }, Gr = (e, t) => () => {
1079
+ }, Vr = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => Vr(e)) : e, Hr = Symbol.for("@voltro/database/coreTablesRegistry"), Ur = globalThis, Wr = Ur[Hr] ?? (Ur[Hr] = {}), Gr = (e) => {
1080
+ e.actors !== void 0 && (Wr.actors = e.actors), e.tenants !== void 0 && (Wr.tenants = e.tenants);
1081
+ }, Kr = (e, t) => () => {
1082
1082
  let n = e();
1083
1083
  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`);
1084
1084
  return n();
1085
- }, Kr = () => Gr(() => Ur.actors, "actors"), qr = () => Gr(() => Ur.tenants, "tenants"), Jr = _("actors", {
1085
+ }, qr = () => Kr(() => Wr.actors, "actors"), Jr = () => Kr(() => Wr.tenants, "tenants"), Yr = _("actors", {
1086
1086
  id: T(),
1087
1087
  kind: x().oneOf([
1088
1088
  "user",
@@ -1092,73 +1092,73 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1092
1092
  ]),
1093
1093
  displayName: x().nullable(),
1094
1094
  createdAt: d().default("now")
1095
- }), Yr = (e, t) => ({
1095
+ }), Xr = (e, t) => ({
1096
1096
  column: e,
1097
1097
  op: "eq",
1098
1098
  value: t
1099
- }), Xr = (e, t) => ({
1099
+ }), Zr = (e, t) => ({
1100
1100
  column: e,
1101
1101
  op: "neq",
1102
1102
  value: t
1103
- }), Zr = (e, t) => ({
1103
+ }), Qr = (e, t) => ({
1104
1104
  column: e,
1105
1105
  op: "gt",
1106
1106
  value: t
1107
- }), Qr = (e, t) => ({
1107
+ }), $r = (e, t) => ({
1108
1108
  column: e,
1109
1109
  op: "gte",
1110
1110
  value: t
1111
- }), $r = (e, t) => ({
1111
+ }), ei = (e, t) => ({
1112
1112
  column: e,
1113
1113
  op: "lt",
1114
1114
  value: t
1115
- }), ei = (e, t) => ({
1115
+ }), ti = (e, t) => ({
1116
1116
  column: e,
1117
1117
  op: "lte",
1118
1118
  value: t
1119
- }), ti = (e, t) => ({
1119
+ }), ni = (e, t) => ({
1120
1120
  column: e,
1121
1121
  op: "in",
1122
1122
  value: t
1123
- }), ni = (e, t) => ({
1123
+ }), ri = (e, t) => ({
1124
1124
  column: e,
1125
1125
  op: "notIn",
1126
1126
  value: t
1127
- }), ri = (e, t) => ({
1127
+ }), ii = (e, t) => ({
1128
1128
  column: e,
1129
1129
  op: "contains",
1130
1130
  value: t
1131
- }), ii = (e, t) => ({
1131
+ }), ai = (e, t) => ({
1132
1132
  column: e,
1133
1133
  op: "startsWith",
1134
1134
  value: t
1135
- }), ai = (e, t) => ({
1135
+ }), oi = (e, t) => ({
1136
1136
  column: e,
1137
1137
  op: "arrayContains",
1138
1138
  value: t
1139
- }), oi = (e, t) => ({
1139
+ }), si = (e, t) => ({
1140
1140
  column: e,
1141
1141
  op: "arrayOverlaps",
1142
1142
  value: t
1143
- }), si = (e, t) => ({
1143
+ }), ci = (e, t) => ({
1144
1144
  column: e,
1145
1145
  op: "arrayHas",
1146
1146
  value: t
1147
- }), ci = {
1147
+ }), li = {
1148
1148
  column: "id",
1149
1149
  op: "in",
1150
1150
  value: []
1151
- }, li = (e) => ({
1151
+ }, ui = (e) => ({
1152
1152
  column: e,
1153
1153
  op: "isNull"
1154
- }), ui = (e) => ({
1154
+ }), di = (e) => ({
1155
1155
  column: e,
1156
1156
  op: "isNotNull"
1157
- }), di = (e, t) => ({
1157
+ }), fi = (e, t) => ({
1158
1158
  column: e,
1159
1159
  op: "spatial",
1160
1160
  value: t
1161
- }), fi = (...e) => ({ and: e }), pi = (...e) => ({ or: e }), mi = (e) => ({ not: e }), hi = (e, ...t) => {
1161
+ }), pi = (...e) => ({ and: e }), mi = (...e) => ({ or: e }), hi = (e) => ({ not: e }), gi = (e, ...t) => {
1162
1162
  if (t.length === 0) throw Error(`jsonField("${e}"): at least one path segment is required`);
1163
1163
  let n = (n, r) => ({
1164
1164
  column: e,
@@ -1180,29 +1180,29 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1180
1180
  isNull: () => n("isNull"),
1181
1181
  isNotNull: () => n("isNotNull")
1182
1182
  };
1183
- }, gi = (e) => "descriptor" in e ? e.descriptor : e, _i = (e, t) => ({
1183
+ }, _i = (e) => "descriptor" in e ? e.descriptor : e, vi = (e, t) => ({
1184
1184
  column: e,
1185
1185
  op: "subquery-in",
1186
- subquery: gi(t)
1187
- }), vi = (e, t) => ({
1186
+ subquery: _i(t)
1187
+ }), yi = (e, t) => ({
1188
1188
  column: e,
1189
1189
  op: "subquery-not-in",
1190
- subquery: gi(t)
1191
- }), yi = (e) => ({
1192
- op: "exists",
1193
- subquery: gi(e)
1190
+ subquery: _i(t)
1194
1191
  }), bi = (e) => ({
1192
+ op: "exists",
1193
+ subquery: _i(e)
1194
+ }), xi = (e) => ({
1195
1195
  op: "not-exists",
1196
- subquery: gi(e)
1197
- }), xi = (e, t) => e == null || t == null ? null : typeof e == typeof t ? e === t ? 0 : e > t ? 1 : -1 : null, Si = (e, t, n = null) => {
1196
+ subquery: _i(e)
1197
+ }), Si = (e, t) => e == null || t == null ? null : typeof e == typeof t ? e === t ? 0 : e > t ? 1 : -1 : null, Ci = (e, t, n = null) => {
1198
1198
  if (!t) return !1;
1199
- if ("not" in e) return !Si(e.not, t, n);
1199
+ if ("not" in e) return !Ci(e.not, t, n);
1200
1200
  if ("and" in e) {
1201
- for (let r of e.and) if (!Si(r, t, n)) return !1;
1201
+ for (let r of e.and) if (!Ci(r, t, n)) return !1;
1202
1202
  return !0;
1203
1203
  }
1204
1204
  if ("or" in e) {
1205
- for (let r of e.or) if (Si(r, t, n)) return !0;
1205
+ for (let r of e.or) if (Ci(r, t, n)) return !0;
1206
1206
  return !1;
1207
1207
  }
1208
1208
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
@@ -1221,10 +1221,10 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1221
1221
  switch (r.op) {
1222
1222
  case "eq": return i === r.value;
1223
1223
  case "neq": return i !== r.value;
1224
- case "gt": return (xi(i, r.value) ?? -1) > 0;
1225
- case "gte": return (xi(i, r.value) ?? -1) >= 0;
1226
- case "lt": return (xi(i, r.value) ?? 1) < 0;
1227
- case "lte": return (xi(i, r.value) ?? 1) <= 0;
1224
+ case "gt": return (Si(i, r.value) ?? -1) > 0;
1225
+ case "gte": return (Si(i, r.value) ?? -1) >= 0;
1226
+ case "lt": return (Si(i, r.value) ?? 1) < 0;
1227
+ case "lte": return (Si(i, r.value) ?? 1) <= 0;
1228
1228
  case "in": return Array.isArray(r.value) && r.value.includes(i);
1229
1229
  case "notIn": return Array.isArray(r.value) && !r.value.includes(i);
1230
1230
  case "contains": return typeof i == "string" && typeof r.value == "string" && i.toLowerCase().includes(r.value.toLowerCase());
@@ -1242,17 +1242,17 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1242
1242
  case "isNotNull": return i != null;
1243
1243
  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.");
1244
1244
  }
1245
- }, Ci = function* (e) {
1245
+ }, wi = function* (e) {
1246
1246
  if ("not" in e) {
1247
- yield* Ci(e.not);
1247
+ yield* wi(e.not);
1248
1248
  return;
1249
1249
  }
1250
1250
  if ("and" in e) {
1251
- for (let t of e.and) yield* Ci(t);
1251
+ for (let t of e.and) yield* wi(t);
1252
1252
  return;
1253
1253
  }
1254
1254
  if ("or" in e) {
1255
- for (let t of e.or) yield* Ci(t);
1255
+ for (let t of e.or) yield* wi(t);
1256
1256
  return;
1257
1257
  }
1258
1258
  e.op === "subquery-in" || e.op === "subquery-not-in" ? yield {
@@ -1262,83 +1262,83 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1262
1262
  kind: "exists",
1263
1263
  descriptor: e.subquery
1264
1264
  });
1265
- }, wi = function* (e, t = !0) {
1265
+ }, Ti = function* (e, t = !0) {
1266
1266
  if ("not" in e) {
1267
- yield* wi(e.not, !1);
1267
+ yield* Ti(e.not, !1);
1268
1268
  return;
1269
1269
  }
1270
1270
  if ("and" in e) {
1271
- for (let n of e.and) yield* wi(n, t);
1271
+ for (let n of e.and) yield* Ti(n, t);
1272
1272
  return;
1273
1273
  }
1274
1274
  if ("or" in e) {
1275
- for (let t of e.or) yield* wi(t, !1);
1275
+ for (let t of e.or) yield* Ti(t, !1);
1276
1276
  return;
1277
1277
  }
1278
1278
  e.op === "subquery-in" || e.op === "subquery-not-in" || e.op === "exists" || e.op === "not-exists" || (yield {
1279
1279
  ...e,
1280
1280
  conjunctive: t
1281
1281
  });
1282
- }, W = new vt(), Ti = (e, t) => W.run(e, t), Ei = () => W.getStore(), Di = (e) => {
1283
- let t = e ?? W.getStore();
1282
+ }, U = new vt(), Ei = (e, t) => U.run(e, t), Di = () => U.getStore(), Oi = (e) => {
1283
+ let t = e ?? U.getStore();
1284
1284
  return t === void 0 ? {} : {
1285
1285
  ...t.traceId === void 0 ? {} : { traceId: t.traceId },
1286
1286
  ...t.subjectId === void 0 ? {} : { subjectId: t.subjectId },
1287
1287
  ...t.procedure === void 0 ? {} : { procedure: t.procedure }
1288
1288
  };
1289
- }, Oi = (e) => {
1290
- let t = W.getStore();
1291
- return t === void 0 ? e(void 0) : W.run(t, () => e(t));
1292
- }, ki = 3e4, Ai = 1e4, G = /* @__PURE__ */ new Map(), K = 0, ji = (e, t, n) => `${e}\u0000${t}\u0000${String(n)}`, Mi = (e) => {
1293
- for (let [t, n] of G) {
1294
- let r = n.filter((t) => e - t.at < ki);
1295
- K -= n.length - r.length, r.length === 0 ? G.delete(t) : r.length !== n.length && G.set(t, r);
1296
- }
1297
- }, Ni = (e, t) => {
1289
+ }, ki = (e) => {
1290
+ let t = U.getStore();
1291
+ return t === void 0 ? e(void 0) : U.run(t, () => e(t));
1292
+ }, Ai = 3e4, ji = 1e4, W = /* @__PURE__ */ new Map(), G = 0, Mi = (e, t, n) => `${e}\u0000${t}\u0000${String(n)}`, Ni = (e) => {
1293
+ for (let [t, n] of W) {
1294
+ let r = n.filter((t) => e - t.at < Ai);
1295
+ G -= n.length - r.length, r.length === 0 ? W.delete(t) : r.length !== n.length && W.set(t, r);
1296
+ }
1297
+ }, Pi = (e, t) => {
1298
1298
  if (t.traceId === void 0 && t.subjectId === void 0 && t.procedure === void 0) return;
1299
1299
  let n = Date.now();
1300
- if (K >= Ai && Mi(n), K >= Ai) return;
1301
- let r = G.get(e);
1302
- r === void 0 ? G.set(e, [{
1300
+ if (G >= ji && Ni(n), G >= ji) return;
1301
+ let r = W.get(e);
1302
+ r === void 0 ? W.set(e, [{
1303
1303
  attribution: t,
1304
1304
  at: n
1305
1305
  }]) : r.push({
1306
1306
  attribution: t,
1307
1307
  at: n
1308
- }), K += 1;
1309
- }, Pi = (e) => {
1310
- let t = G.get(e);
1308
+ }), G += 1;
1309
+ }, Fi = (e) => {
1310
+ let t = W.get(e);
1311
1311
  if (t === void 0 || t.length === 0) return;
1312
1312
  let n = t.shift();
1313
- if (--K, t.length === 0 && G.delete(e), !(Date.now() - n.at >= ki)) return n.attribution;
1314
- }, Fi = (e) => (G.get(e)?.length ?? 0) > 0, q = /* @__PURE__ */ new Map(), J = /* @__PURE__ */ new Map(), Ii = /* @__PURE__ */ new Map(), Li = 250, Ri = (e) => {
1315
- let t = J.get(e);
1313
+ if (--G, t.length === 0 && W.delete(e), !(Date.now() - n.at >= Ai)) return n.attribution;
1314
+ }, Ii = (e) => (W.get(e)?.length ?? 0) > 0, K = /* @__PURE__ */ new Map(), q = /* @__PURE__ */ new Map(), Li = /* @__PURE__ */ new Map(), Ri = 250, zi = (e) => {
1315
+ let t = q.get(e);
1316
1316
  if (t === void 0) return;
1317
- J.delete(e);
1318
- let n = Ii.get(e);
1319
- n !== void 0 && (clearTimeout(n), Ii.delete(e));
1317
+ q.delete(e);
1318
+ let n = Li.get(e);
1319
+ n !== void 0 && (clearTimeout(n), Li.delete(e));
1320
1320
  for (let e of t) e();
1321
- }, zi = (e) => {
1322
- q.set(e, (q.get(e) ?? 0) + 1);
1323
1321
  }, Bi = (e) => {
1324
- let t = (q.get(e) ?? 0) - 1;
1322
+ K.set(e, (K.get(e) ?? 0) + 1);
1323
+ }, Vi = (e) => {
1324
+ let t = (K.get(e) ?? 0) - 1;
1325
1325
  if (t > 0) {
1326
- q.set(e, t);
1326
+ K.set(e, t);
1327
1327
  return;
1328
1328
  }
1329
- q.delete(e), Ri(e);
1330
- }, Vi = (e, t, n, r) => {
1331
- let i = n == null ? void 0 : ji(e, t, n), a = () => r(i === void 0 ? void 0 : Pi(i));
1329
+ K.delete(e), zi(e);
1330
+ }, Hi = (e, t, n, r) => {
1331
+ let i = n == null ? void 0 : Mi(e, t, n), a = () => r(i === void 0 ? void 0 : Fi(i));
1332
1332
  if (i === void 0) {
1333
1333
  a();
1334
1334
  return;
1335
1335
  }
1336
- if (Fi(i)) {
1336
+ if (Ii(i)) {
1337
1337
  a();
1338
1338
  return;
1339
1339
  }
1340
- let o = J.get(e);
1341
- if (o === void 0 && (q.get(e) ?? 0) === 0) {
1340
+ let o = q.get(e);
1341
+ if (o === void 0 && (K.get(e) ?? 0) === 0) {
1342
1342
  a();
1343
1343
  return;
1344
1344
  }
@@ -1346,34 +1346,65 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1346
1346
  o.push(a);
1347
1347
  return;
1348
1348
  }
1349
- J.set(e, [a]);
1350
- let s = setTimeout(() => Ri(e), Li);
1351
- typeof s == "object" && typeof s.unref == "function" && s.unref(), Ii.set(e, s);
1352
- }, Hi = () => {
1353
- G.clear(), K = 0, q.clear();
1354
- for (let e of Ii.values()) clearTimeout(e);
1355
- Ii.clear(), J.clear();
1356
- }, Ui = () => K, Y = /* @__PURE__ */ new Map(), Wi = (e, t) => {
1357
- Y.set(e, {
1349
+ q.set(e, [a]);
1350
+ let s = setTimeout(() => zi(e), Ri);
1351
+ typeof s == "object" && typeof s.unref == "function" && s.unref(), Li.set(e, s);
1352
+ }, Ui = () => {
1353
+ W.clear(), G = 0, K.clear();
1354
+ for (let e of Li.values()) clearTimeout(e);
1355
+ Li.clear(), q.clear();
1356
+ }, Wi = () => G, J = /* @__PURE__ */ new Map(), Gi = (e, t) => {
1357
+ J.set(e, {
1358
1358
  recorder: t.recorder,
1359
1359
  tables: new Set(t.tables),
1360
1360
  ownTables: new Set(t.ownTables)
1361
1361
  });
1362
- }, Gi = (e) => {
1363
- Y.delete(e);
1364
- }, Ki = () => Y.clear(), qi = (e) => {
1365
- if (Y.size === 0) return !1;
1366
- for (let t of Y.values()) if (!t.ownTables.has(e) && t.tables.has(e)) return !0;
1362
+ }, Ki = (e) => {
1363
+ J.delete(e);
1364
+ }, qi = () => J.clear(), Ji = (e) => {
1365
+ if (J.size === 0) return !1;
1366
+ for (let t of J.values()) if (!t.ownTables.has(e) && t.tables.has(e)) return !0;
1367
1367
  return !1;
1368
- }, Ji = async (e, t) => {
1369
- if (Y.size !== 0) for (let n of Y.values()) n.ownTables.has(t.table) || n.tables.has(t.table) && await n.recorder(e, t);
1370
- }, Yi = (e) => {
1368
+ }, Yi = async (e, t) => {
1369
+ if (J.size !== 0) for (let n of J.values()) n.ownTables.has(t.table) || n.tables.has(t.table) && await n.recorder(e, t);
1370
+ }, Xi = (e) => {
1371
1371
  if (ht.isSuccess(e)) return e.value;
1372
1372
  throw dt.squash(e.cause);
1373
- }, Xi = class extends pt.TaggedError("TableStreamError") {}, Zi = 1e3, Qi = (e, t, n, r) => {
1373
+ }, Zi = class extends E.TaggedError()("VersionConflict", {
1374
+ table: E.String,
1375
+ id: E.String,
1376
+ expected: E.Number,
1377
+ actual: E.NullOr(E.Number)
1378
+ }) {}, Qi = (e) => {
1379
+ for (let [t, n] of Object.entries(e)) if (n?.definition?.versionColumn === !0) return t;
1380
+ }, $i = (e) => {
1381
+ let { versionColumn: t, patch: n } = e;
1382
+ if (t === void 0) return {
1383
+ nextVersion: void 0,
1384
+ expected: void 0,
1385
+ patch: { ...n }
1386
+ };
1387
+ let r = n[t], i = typeof r == "number" && Number.isFinite(r) ? r : void 0, a = { ...n };
1388
+ return delete a[t], {
1389
+ nextVersion: i === void 0 ? void 0 : i + 1,
1390
+ expected: i,
1391
+ patch: a
1392
+ };
1393
+ }, ea = (e) => {
1394
+ if (e.expected !== void 0 && !(e.current !== null && e.current === e.expected)) return new Zi({
1395
+ table: e.table,
1396
+ id: e.id,
1397
+ expected: e.expected,
1398
+ actual: e.current
1399
+ });
1400
+ }, ta = 1, na = "voltro/expires", ra = () => g({
1401
+ id: na,
1402
+ fields: { expiresAt: d().nullable() },
1403
+ behaviors: { defaultWhere: () => "expiresAt IS NULL OR expiresAt > now()" }
1404
+ }), ia = class extends pt.TaggedError("TableStreamError") {}, aa = 1e3, oa = (e, t, n, r) => {
1374
1405
  let i = gt.match(r, {
1375
1406
  onNone: () => e.where,
1376
- onSome: (n) => e.where ? fi(e.where, Zr(t, n)) : Zr(t, n)
1407
+ onSome: (n) => e.where ? pi(e.where, Qr(t, n)) : Qr(t, n)
1377
1408
  });
1378
1409
  return {
1379
1410
  table: e.table,
@@ -1388,19 +1419,19 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1388
1419
  ...e.includeDeleted === void 0 ? {} : { includeDeleted: e.includeDeleted },
1389
1420
  ...e.crossTenant === void 0 ? {} : { crossTenant: e.crossTenant }
1390
1421
  };
1391
- }, $i = (e, t) => {
1392
- let n = t.pk ?? "id", r = t.chunkSize ?? Zi;
1422
+ }, sa = (e, t) => {
1423
+ let n = t.pk ?? "id", r = t.chunkSize ?? aa;
1393
1424
  return _t.paginateChunkEffect(gt.none(), (i) => {
1394
1425
  let a = mt.tryPromise({
1395
- try: () => e.query(Qi(t, n, r, i)),
1396
- catch: (e) => new Xi({
1426
+ try: () => e.query(oa(t, n, r, i)),
1427
+ catch: (e) => new ia({
1397
1428
  table: t.table,
1398
1429
  cause: e
1399
1430
  })
1400
1431
  });
1401
1432
  return (t.retry ? a.pipe(mt.retry(t.retry)) : a).pipe(mt.map((e) => [ft.fromIterable(e), e.length === r && e.length > 0 ? gt.some(gt.some(e[e.length - 1][n])) : gt.none()]));
1402
1433
  });
1403
- }, ea = (e) => {
1434
+ }, ca = (e) => {
1404
1435
  let t = e.alpha ?? .5;
1405
1436
  if (t < 0 || t > 1) throw Error(`hybridSearch: alpha must be in [0, 1], got ${t}`);
1406
1437
  return (n) => {
@@ -1427,14 +1458,14 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1427
1458
  }
1428
1459
  };
1429
1460
  };
1430
- }, ta = async (e, t) => {
1461
+ }, la = async (e, t) => {
1431
1462
  let n = e.as ?? "embedding", r = t.row[e.from];
1432
1463
  if (typeof r != "string" || r.length === 0) return {};
1433
1464
  let i = await t.embed(r);
1434
1465
  return { [n]: i };
1435
- }, na = (e) => {
1466
+ }, ua = (e) => {
1436
1467
  if (!Number.isInteger(e.dimensions) || e.dimensions <= 0) throw Error(`vectorEmbedding: dimensions must be a positive integer, got ${String(e.dimensions)}.`);
1437
- let t = e.as ?? "embedding", n = (t) => ta(e, t);
1468
+ let t = e.as ?? "embedding", n = (t) => la(e, t);
1438
1469
  return g({
1439
1470
  id: "voltro/vectorEmbedding",
1440
1471
  fields: { [t]: h(e.dimensions) },
@@ -1452,19 +1483,19 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1452
1483
  beforeUpdate: n
1453
1484
  }
1454
1485
  });
1455
- }, ra = 63, ia = "br_pr", X = class extends Error {
1486
+ }, da = 63, fa = "br_pr", Y = class extends Error {
1456
1487
  _tag = "BranchNameInvalid";
1457
1488
  constructor(e) {
1458
1489
  super(e), this.name = "BranchNameInvalid";
1459
1490
  }
1460
- }, aa = (e, t) => {
1461
- if (!Number.isInteger(t) || t < 0) throw new X(`prNumber must be a non-negative integer, got ${String(t)}`);
1462
- let n = Dn(e);
1463
- if (n.replace(/_/g, "") === "") throw new X(`app slug '${e}' has no usable identifier characters`);
1464
- let r = `${ia}${t}_${n}`;
1465
- if (r.length > ra) throw new X(`branch namespace '${r}' exceeds the ${ra}-byte identifier limit — use a shorter app slug`);
1491
+ }, pa = (e, t) => {
1492
+ if (!Number.isInteger(t) || t < 0) throw new Y(`prNumber must be a non-negative integer, got ${String(t)}`);
1493
+ let n = On(e);
1494
+ if (n.replace(/_/g, "") === "") throw new Y(`app slug '${e}' has no usable identifier characters`);
1495
+ let r = `${fa}${t}_${n}`;
1496
+ if (r.length > da) throw new Y(`branch namespace '${r}' exceeds the ${da}-byte identifier limit — use a shorter app slug`);
1466
1497
  return r;
1467
- }, oa = (e) => e.startsWith(ia), sa = {
1498
+ }, ma = (e) => e.startsWith(fa), ha = {
1468
1499
  requested: {
1469
1500
  provision: "provisioning",
1470
1501
  destroy: "destroying"
@@ -1483,19 +1514,19 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1483
1514
  fail: "failed"
1484
1515
  },
1485
1516
  destroyed: {}
1486
- }, ca = class extends Error {
1517
+ }, ga = class extends Error {
1487
1518
  from;
1488
1519
  event;
1489
1520
  _tag = "BranchTransitionInvalid";
1490
1521
  constructor(e, t) {
1491
1522
  super(`invalid branch transition: ${e} --${t}-->`), this.from = e, this.event = t, this.name = "BranchTransitionInvalid";
1492
1523
  }
1493
- }, la = (e, t) => {
1494
- let n = sa[e][t];
1495
- if (n === void 0) throw new ca(e, t);
1524
+ }, _a = (e, t) => {
1525
+ let n = ha[e][t];
1526
+ if (n === void 0) throw new ga(e, t);
1496
1527
  return n;
1497
- }, ua = (e, t, n, r) => {
1498
- if (n === "copy" && (r === void 0 || r === "")) throw new X("seed 'copy' requires a parentNamespace to snapshot from");
1528
+ }, va = (e, t, n, r) => {
1529
+ if (n === "copy" && (r === void 0 || r === "")) throw new Y("seed 'copy' requires a parentNamespace to snapshot from");
1499
1530
  let i = [{
1500
1531
  kind: "create-namespace",
1501
1532
  detail: e
@@ -1515,13 +1546,13 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1515
1546
  detail: `run boot seeds into ${e}`
1516
1547
  });
1517
1548
  return i;
1518
- }, da = (e) => {
1519
- if (!oa(e)) throw new X(`refusing to plan teardown of '${e}' — not a branch namespace`);
1549
+ }, ya = (e) => {
1550
+ if (!ma(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
1520
1551
  return [{
1521
1552
  kind: "drop-namespace",
1522
1553
  detail: e
1523
1554
  }];
1524
- }, fa = (e) => {
1555
+ }, ba = (e) => {
1525
1556
  if (e === void 0 || e === "") return !1;
1526
1557
  try {
1527
1558
  let t = new URL(e).hostname.toLowerCase();
@@ -1529,27 +1560,27 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1529
1560
  } catch {
1530
1561
  return /\bneon\.(tech|build)\b/i.test(e);
1531
1562
  }
1532
- }, pa = (e) => e.prefer === void 0 ? e.seed === "copy" && fa(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, ma = (e, t = {}) => [{
1563
+ }, xa = (e) => e.prefer === void 0 ? e.seed === "copy" && ba(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, Sa = (e, t = {}) => [{
1533
1564
  kind: "neon-branch-create",
1534
1565
  detail: `${t.parentBranch ?? "main"} → ${e} (copy-on-write)`
1535
- }], ha = (e) => {
1536
- if (!oa(e)) throw new X(`refusing to plan teardown of '${e}' — not a branch namespace`);
1566
+ }], Ca = (e) => {
1567
+ if (!ma(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
1537
1568
  return [{
1538
1569
  kind: "neon-branch-delete",
1539
1570
  detail: e
1540
1571
  }];
1541
- }, ga = (e) => e.mechanism === "neon-cow" ? ma(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : ua(e.branchId, e.tableNames, e.seed, e.parentNamespace), _a = (e, t) => e === "neon-cow" ? ha(t) : da(t), va = (e, t, n) => {
1572
+ }, wa = (e) => e.mechanism === "neon-cow" ? Sa(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : va(e.branchId, e.tableNames, e.seed, e.parentNamespace), Ta = (e, t) => e === "neon-cow" ? Ca(t) : ya(t), Ea = (e, t, n) => {
1542
1573
  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);
1543
1574
  return {
1544
1575
  evict: i,
1545
1576
  rejectNew: r.filter((e) => !a.has(e.namespace)).length >= t.maxBranches
1546
1577
  };
1547
- }, ya = async (e, t) => {
1548
- let n = aa(e.appSlug, e.prNumber), r = pa({
1578
+ }, Da = async (e, t) => {
1579
+ let n = pa(e.appSlug, e.prNumber), r = xa({
1549
1580
  seed: e.seed,
1550
1581
  ...e.dbUrl === void 0 ? {} : { dbUrl: e.dbUrl },
1551
1582
  ...e.prefer === void 0 ? {} : { prefer: e.prefer }
1552
- }), i = ga({
1583
+ }), i = wa({
1553
1584
  mechanism: r,
1554
1585
  branchId: n,
1555
1586
  tableNames: e.tableNames,
@@ -1574,33 +1605,33 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1574
1605
  mechanism: r,
1575
1606
  steps: i
1576
1607
  };
1577
- }, ba = async (e, t, n) => {
1578
- let r = _a(t, e);
1608
+ }, Oa = async (e, t, n) => {
1609
+ let r = Ta(t, e);
1579
1610
  return t === "neon-cow" ? await n.neonBranchDelete(e) : await n.dropNamespace(e), r;
1580
- }, xa = (e, t, n) => va(e, t, n), Z = (e) => `"${e.replace(/"/g, "\"\"")}"`, Sa = (e) => {
1611
+ }, ka = (e, t, n) => Ea(e, t, n), X = (e) => `"${e.replace(/"/g, "\"\"")}"`, Aa = (e) => {
1581
1612
  let t = () => {
1582
1613
  throw Error("namespace branch executor: Neon ops require a neon-cow executor (use a Neon connection for copy-on-write branches)");
1583
1614
  };
1584
1615
  return {
1585
- createNamespace: (t) => e.run(`CREATE SCHEMA IF NOT EXISTS ${Z(t)}`),
1586
- createTable: (t, n) => e.run(`CREATE TABLE IF NOT EXISTS ${Z(t)}.${Z(n)} (LIKE ${Z(n)} INCLUDING ALL)`),
1587
- copyTable: (t, n, r) => e.run(`INSERT INTO ${Z(n)}.${Z(r)} SELECT * FROM ${Z(t)}.${Z(r)}`),
1588
- dropNamespace: (t) => e.run(`DROP SCHEMA IF EXISTS ${Z(t)} CASCADE`),
1616
+ createNamespace: (t) => e.run(`CREATE SCHEMA IF NOT EXISTS ${X(t)}`),
1617
+ createTable: (t, n) => e.run(`CREATE TABLE IF NOT EXISTS ${X(t)}.${X(n)} (LIKE ${X(n)} INCLUDING ALL)`),
1618
+ copyTable: (t, n, r) => e.run(`INSERT INTO ${X(n)}.${X(r)} SELECT * FROM ${X(t)}.${X(r)}`),
1619
+ dropNamespace: (t) => e.run(`DROP SCHEMA IF EXISTS ${X(t)} CASCADE`),
1589
1620
  neonBranchCreate: t,
1590
1621
  neonBranchDelete: t
1591
1622
  };
1592
- }, Ca = class extends Error {
1623
+ }, ja = class extends Error {
1593
1624
  _tag = "TenantResidencyUnresolved";
1594
1625
  constructor(e) {
1595
1626
  super(e), this.name = "TenantResidencyUnresolved";
1596
1627
  }
1597
- }, wa = class extends Error {
1628
+ }, Ma = class extends Error {
1598
1629
  region;
1599
1630
  _tag = "TenantRegionUnavailable";
1600
1631
  constructor(e, t) {
1601
1632
  super(t), this.region = e, this.name = "TenantRegionUnavailable";
1602
1633
  }
1603
- }, Ta, Ea = (e) => {
1634
+ }, Na, Pa = (e) => {
1604
1635
  if (e.homes === void 0) throw Error("setResidencyConfig: `homes` is required");
1605
1636
  if (e.servableRegions === void 0 || e.servableRegions.length === 0) throw Error("setResidencyConfig: `servableRegions` must be non-empty (which regions this deployment serves)");
1606
1637
  let t = /* @__PURE__ */ new Map();
@@ -1609,98 +1640,98 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1609
1640
  if (e !== void 0 && e !== n.region) throw Error(`residency: tenant '${n.tenantId}' is mapped to two regions ('${e}' and '${n.region}')`);
1610
1641
  t.set(n.tenantId, n.region);
1611
1642
  }
1612
- return Ta = e, e;
1613
- }, Da = () => Ta, Oa = () => {
1614
- Ta = void 0;
1615
- }, ka = (e, t) => {
1616
- if (e == null || e === "") throw new Ca("residency is on but the request has no resolvable tenant — refusing to bind a store");
1643
+ return Na = e, e;
1644
+ }, Fa = () => Na, Ia = () => {
1645
+ Na = void 0;
1646
+ }, La = (e, t) => {
1647
+ if (e == null || e === "") throw new ja("residency is on but the request has no resolvable tenant — refusing to bind a store");
1617
1648
  let n = t.homes.find((t) => t.tenantId === e);
1618
- if (n === void 0) throw new Ca(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
1649
+ if (n === void 0) throw new ja(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
1619
1650
  return n;
1620
- }, Aa = (e, t) => t.servableRegions.includes(e), ja = (e, t) => {
1621
- let n = ka(e.tenantId, t), r = On(n.tenantId);
1651
+ }, Ra = (e, t) => t.servableRegions.includes(e), za = (e, t) => {
1652
+ let n = La(e.tenantId, t), r = kn(n.tenantId);
1622
1653
  return {
1623
1654
  region: n.region,
1624
1655
  namespace: r,
1625
1656
  ...n.connectionKey === void 0 ? {} : { connectionKey: n.connectionKey }
1626
1657
  };
1627
- }, Ma = (e, t, n) => {
1628
- let r = ja(e, t);
1629
- if (!Aa(r.region, t)) throw new wa(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
1658
+ }, Ba = (e, t, n) => {
1659
+ let r = za(e, t);
1660
+ if (!Ra(r.region, t)) throw new Ma(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
1630
1661
  let i = n.get(r.region);
1631
- if (i === void 0) throw new wa(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
1662
+ if (i === void 0) throw new Ma(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
1632
1663
  return {
1633
1664
  store: i,
1634
1665
  placement: r
1635
1666
  };
1636
- }, Na = async (e, t, n, r) => {
1637
- let { store: i, placement: a } = Ma(e, t, n);
1667
+ }, Va = async (e, t, n, r) => {
1668
+ let { store: i, placement: a } = Ba(e, t, n);
1638
1669
  return await r(i, a), a;
1639
- }, Pa = (e) => {
1670
+ }, Ha = (e) => {
1640
1671
  if (typeof e == "string") return e;
1641
1672
  if ("jsonPath" in e) {
1642
1673
  let { column: t, path: n, numeric: r } = e.jsonPath;
1643
1674
  return `(json:${t}->${n.join(".")}${r ? "::num" : ""})`;
1644
1675
  }
1645
1676
  return `(${e.expr})`;
1646
- }, Q = (e) => e.map(Pa), Fa = (e, t) => {
1677
+ }, Z = (e) => e.map(Ha), Ua = (e, t) => {
1647
1678
  if (e.length !== t.length) return !1;
1648
- for (let n = 0; n < e.length; n++) if (Pa(e[n]) !== Pa(t[n])) return !1;
1679
+ for (let n = 0; n < e.length; n++) if (Ha(e[n]) !== Ha(t[n])) return !1;
1649
1680
  return !0;
1650
- }, Ia = (e, t) => {
1681
+ }, Wa = (e, t) => {
1651
1682
  if (e.length >= t.length) return !1;
1652
- for (let n = 0; n < e.length; n++) if (Pa(e[n]) !== Pa(t[n])) return !1;
1683
+ for (let n = 0; n < e.length; n++) if (Ha(e[n]) !== Ha(t[n])) return !1;
1653
1684
  return !0;
1654
- }, La = (e) => {
1685
+ }, Ga = (e) => {
1655
1686
  let t = [], n = e.appliedIndexes, r = e.tableName;
1656
1687
  for (let e = 0; e < n.length; e++) {
1657
1688
  let i = n[e];
1658
1689
  for (let a = e + 1; a < n.length; a++) {
1659
1690
  let e = n[a];
1660
- if (Fa(i.fields, e.fields)) {
1691
+ if (Ua(i.fields, e.fields)) {
1661
1692
  let [n, a] = i.name < e.name ? [i, e] : [e, i];
1662
1693
  t.push({
1663
1694
  kind: "duplicate-fields",
1664
1695
  table: r,
1665
1696
  redundant: n,
1666
1697
  coveredBy: a,
1667
- message: `'${r}' has two indexes on the same fields [${Q(i.fields).join(", ")}]: '${i.name}' and '${e.name}'. The B-tree engine builds both, costing write throughput + disk space for no read benefit. Drop '${n.name}' (or '${a.name}' if you prefer the other name). Applies to every supported dialect (Postgres / MySQL / MariaDB / MSSQL / SQLite).`
1698
+ message: `'${r}' has two indexes on the same fields [${Z(i.fields).join(", ")}]: '${i.name}' and '${e.name}'. The B-tree engine builds both, costing write throughput + disk space for no read benefit. Drop '${n.name}' (or '${a.name}' if you prefer the other name). Applies to every supported dialect (Postgres / MySQL / MariaDB / MSSQL / SQLite).`
1668
1699
  });
1669
1700
  continue;
1670
1701
  }
1671
- Ia(i.fields, e.fields) ? t.push({
1702
+ Wa(i.fields, e.fields) ? t.push({
1672
1703
  kind: "redundant-prefix",
1673
1704
  table: r,
1674
1705
  redundant: i,
1675
1706
  coveredBy: e,
1676
- 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).`
1677
- }) : Ia(e.fields, i.fields) && t.push({
1707
+ message: `'${r}' index '${i.name}' on [${Z(i.fields).join(", ")}] is a leading prefix of '${e.name}' on [${Z(e.fields).join(", ")}]. Every B-tree dialect we support (Postgres / MySQL / MariaDB / MSSQL / SQLite) can serve a [${Z(i.fields).join(", ")}] query from '${e.name}' too via the leading-prefix rule, so '${i.name}' adds write cost without read benefit. Drop '${i.name}' — unless you specifically need a smaller index for cache locality on a write-heavy table (rare; profile first).`
1708
+ }) : Wa(e.fields, i.fields) && t.push({
1678
1709
  kind: "redundant-prefix",
1679
1710
  table: r,
1680
1711
  redundant: e,
1681
1712
  coveredBy: i,
1682
- message: `'${r}' index '${e.name}' on [${Q(e.fields).join(", ")}] is a leading prefix of '${i.name}' on [${Q(i.fields).join(", ")}]. Every B-tree dialect we support (Postgres / MySQL / MariaDB / MSSQL / SQLite) can serve a [${Q(e.fields).join(", ")}] query from '${i.name}' too via the leading-prefix rule, so '${e.name}' adds write cost without read benefit. Drop '${e.name}' — unless you specifically need a smaller index for cache locality on a write-heavy table (rare; profile first).`
1713
+ message: `'${r}' index '${e.name}' on [${Z(e.fields).join(", ")}] is a leading prefix of '${i.name}' on [${Z(i.fields).join(", ")}]. Every B-tree dialect we support (Postgres / MySQL / MariaDB / MSSQL / SQLite) can serve a [${Z(e.fields).join(", ")}] query from '${i.name}' too via the leading-prefix rule, so '${e.name}' adds write cost without read benefit. Drop '${e.name}' — unless you specifically need a smaller index for cache locality on a write-heavy table (rare; profile first).`
1683
1714
  });
1684
1715
  }
1685
1716
  }
1686
1717
  return t;
1687
- }, Ra = (e) => {
1718
+ }, Ka = (e) => {
1688
1719
  let t = [];
1689
- for (let n of e) t.push(...La(n));
1720
+ for (let n of e) t.push(...Ga(n));
1690
1721
  return t;
1691
- }, za = "\x1B[", Ba = `${za}38;2;245;158;11m`, Va = `${za}38;2;16;185;129m`, Ha = (e, t) => `${e}${t}${D.reset}`, $ = (e, t, n) => e ? typeof t == "function" ? t(n) : Ha(t, n) : n, Ua = (e, t = {}) => {
1692
- let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n, D.dim, e.padEnd(11)), a = (e) => $(n, (e) => D.bold(D.brand(e)), e), o = (e) => $(n, D.brightRed24, e), s = (e) => $(n, Va, e), c = (e) => $(n, Ba, e), l = (e) => $(n, D.dim, e), u = `${c("index audit")} ${l("·")} ${$(n, D.bold, e.kind)}`, d = e.redundant.fields.length, f = Q(e.coveredBy.fields.slice(d)), p = (e, t) => {
1722
+ }, qa = "\x1B[", Ja = `${qa}38;2;245;158;11m`, Ya = `${qa}38;2;16;185;129m`, Xa = (e, t) => `${e}${t}${D.reset}`, Q = (e, t, n) => e ? typeof t == "function" ? t(n) : Xa(t, n) : n, Za = (e, t = {}) => {
1723
+ let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => Q(n, D.dim, e.padEnd(11)), a = (e) => Q(n, (e) => D.bold(D.brand(e)), e), o = (e) => Q(n, D.brightRed24, e), s = (e) => Q(n, Ya, e), c = (e) => Q(n, Ja, e), l = (e) => Q(n, D.dim, e), u = `${c("index audit")} ${l("·")} ${Q(n, D.bold, e.kind)}`, d = e.redundant.fields.length, f = Z(e.coveredBy.fields.slice(d)), p = (e, t) => {
1693
1724
  let n = e.slice(0, t), r = e.slice(t), i = [];
1694
1725
  return n.length > 0 && i.push(s(`[${n.join(", ")}]`)), r.length > 0 && i.push(c(`+ [${r.join(", ")}]`)), i.join(" ");
1695
1726
  }, m = [];
1696
- return m.push(u), m.push(""), m.push(`${i("table")}${a(e.table)}`), m.push(""), m.push(`${i("redundant")}${o(e.redundant.name)}`), m.push(`${i("")}${p(Q(e.redundant.fields), d)}`), m.push(""), m.push(`${i("covered by")}${s(e.coveredBy.name)}`), m.push(`${i("")}${p(Q(e.coveredBy.fields), d)}`), f.length > 0 && m.push(`${i("")}${l(`└ extra columns: ${f.join(", ")}`)}`), m.push(""), e.kind === "redundant-prefix" ? (m.push(`${i("why")}B-tree indexes serve queries that filter on a LEADING PREFIX of`), m.push(`${i("")}their column list. The wider index already covers every`), m.push(`${i("")}query the narrower one can serve.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)) : (m.push(`${i("why")}Two indexes on the same columns under different names.`), m.push(`${i("")}The B-tree engine builds both — same coverage, double cost.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)), m.push(""), m.push(`${i("cost")}Every ${a("INSERT")} / ${a("UPDATE")} / ${a("DELETE")} on this table writes`), m.push(`${i("")}to ${$(n, D.bold, "both")} B-trees. Pure write overhead, zero read benefit.`), m.push(""), m.push(`${i("fix")}Drop ${o(e.redundant.name)}`), m.push(`${i("")}${l("Keep only if profiling shows the smaller index gives a")}`), m.push(`${i("")}${l("measurable cache-locality boost on a write-heavy hot path.")}`), m.push(`${i("")}${l("Silence with VOLTRO_INDEX_AUDIT=off if intentional.")}`), m.map((e) => `${r}${e}`).join("\n");
1697
- }, Wa = (e, t) => ({
1727
+ return m.push(u), m.push(""), m.push(`${i("table")}${a(e.table)}`), m.push(""), m.push(`${i("redundant")}${o(e.redundant.name)}`), m.push(`${i("")}${p(Z(e.redundant.fields), d)}`), m.push(""), m.push(`${i("covered by")}${s(e.coveredBy.name)}`), m.push(`${i("")}${p(Z(e.coveredBy.fields), d)}`), f.length > 0 && m.push(`${i("")}${l(`└ extra columns: ${f.join(", ")}`)}`), m.push(""), e.kind === "redundant-prefix" ? (m.push(`${i("why")}B-tree indexes serve queries that filter on a LEADING PREFIX of`), m.push(`${i("")}their column list. The wider index already covers every`), m.push(`${i("")}query the narrower one can serve.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)) : (m.push(`${i("why")}Two indexes on the same columns under different names.`), m.push(`${i("")}The B-tree engine builds both — same coverage, double cost.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)), m.push(""), m.push(`${i("cost")}Every ${a("INSERT")} / ${a("UPDATE")} / ${a("DELETE")} on this table writes`), m.push(`${i("")}to ${Q(n, D.bold, "both")} B-trees. Pure write overhead, zero read benefit.`), m.push(""), m.push(`${i("fix")}Drop ${o(e.redundant.name)}`), m.push(`${i("")}${l("Keep only if profiling shows the smaller index gives a")}`), m.push(`${i("")}${l("measurable cache-locality boost on a write-heavy hot path.")}`), m.push(`${i("")}${l("Silence with VOLTRO_INDEX_AUDIT=off if intentional.")}`), m.map((e) => `${r}${e}`).join("\n");
1728
+ }, Qa = (e, t) => ({
1698
1729
  name: e,
1699
1730
  body: t
1700
- }), Ga = (e) => {
1731
+ }), $a = (e) => {
1701
1732
  if (e.lifecycle === "cron" && !e.cron) throw Error(`seed "${e.id}": lifecycle 'cron' requires a 'cron' field`);
1702
1733
  if (e.lifecycle === "onSchemaChange" && (!e.watchedTables || e.watchedTables.length === 0)) throw Error(`seed "${e.id}": lifecycle 'onSchemaChange' requires at least one entry in 'watchedTables'`);
1703
- let t = e.steps({ step: Wa });
1734
+ let t = e.steps({ step: Qa });
1704
1735
  if (t.length === 0) throw Error(`seed "${e.id}": at least one step is required`);
1705
1736
  return {
1706
1737
  __seed: !0,
@@ -1712,13 +1743,13 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1712
1743
  ...e.fingerprint === void 0 ? {} : { fingerprint: e.fingerprint },
1713
1744
  steps: t
1714
1745
  };
1715
- }, Ka = (e) => typeof e == "object" && !!e && "__seed" in e && e.__seed === !0, qa = (e, { apply: t, undo: n }) => ({
1746
+ }, eo = (e) => typeof e == "object" && !!e && "__seed" in e && e.__seed === !0, to = (e, { apply: t, undo: n }) => ({
1716
1747
  name: e,
1717
1748
  apply: t,
1718
1749
  undo: n
1719
- }), Ja = (e) => {
1750
+ }), no = (e) => {
1720
1751
  if (!/^\d{14}_/.test(e.id)) throw Error(`migration "${e.id}": id must start with a 14-digit timestamp followed by "_" (convention: <YYYYMMDDHHMMSS>_<slug>)`);
1721
- let t = e.steps({ step: qa });
1752
+ let t = e.steps({ step: to });
1722
1753
  if (t.length === 0) throw Error(`migration "${e.id}": at least one step is required`);
1723
1754
  return {
1724
1755
  __migration: !0,
@@ -1726,7 +1757,7 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1726
1757
  name: e.name,
1727
1758
  steps: t
1728
1759
  };
1729
- }, Ya = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, Xa = _("_voltro_migrations", {
1760
+ }, ro = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, io = _("_voltro_migrations", {
1730
1761
  id: T({ prefix: "mig" }),
1731
1762
  name: x(),
1732
1763
  hash: x(),
@@ -1738,7 +1769,7 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1738
1769
  workflowRunId: x().nullable(),
1739
1770
  createdAt: d().default("now"),
1740
1771
  updatedAt: d().default("now").onUpdate("now")
1741
- }).index(["status"]), Za = _("_voltro_seeds", {
1772
+ }).index(["status"]), ao = _("_voltro_seeds", {
1742
1773
  id: T({ prefix: "seed" }),
1743
1774
  name: x(),
1744
1775
  lifecycle: x(),
@@ -1754,7 +1785,7 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1754
1785
  workflowRunId: x().nullable(),
1755
1786
  createdAt: d().default("now"),
1756
1787
  updatedAt: d().default("now").onUpdate("now")
1757
- }).index(["lifecycle"]).index(["nextRunAt"]), Qa = _("_voltro_migration_plans", {
1788
+ }).index(["lifecycle"]).index(["nextRunAt"]), oo = _("_voltro_migration_plans", {
1758
1789
  id: T({ prefix: "plan" }),
1759
1790
  fingerprint: x(),
1760
1791
  liveFingerprint: x().nullable(),
@@ -1770,21 +1801,21 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1770
1801
  appliedAt: d().default("now"),
1771
1802
  createdAt: d().default("now"),
1772
1803
  updatedAt: d().default("now").onUpdate("now")
1773
- }).index(["fingerprint"]).index(["environment"]), $a = _("_voltro_idempotency", {
1804
+ }).index(["fingerprint"]).index(["environment"]), so = _("_voltro_idempotency", {
1774
1805
  id: T({ prefix: "idem" }),
1775
1806
  scope: x(),
1776
1807
  key: x(),
1777
1808
  status: x(),
1778
1809
  response: s().nullable(),
1779
1810
  createdAt: d().default("now")
1780
- }).unique(["scope", "key"]).index(["createdAt"]), eo = _("_voltro_kv", {
1811
+ }).unique(["scope", "key"]).index(["createdAt"]), co = _("_voltro_kv", {
1781
1812
  id: T({ prefix: "kv" }),
1782
1813
  key: x().unique(),
1783
1814
  value: x().nullable(),
1784
1815
  expiresAt: d().nullable(),
1785
1816
  createdAt: d().default("now"),
1786
1817
  updatedAt: d().default("now").onUpdate("now")
1787
- }).index(["expiresAt"]), to = _("_voltro_api_keys", {
1818
+ }).index(["expiresAt"]), lo = _("_voltro_api_keys", {
1788
1819
  id: T({ prefix: "apikey" }),
1789
1820
  tenantId: x().nullable(),
1790
1821
  name: x(),
@@ -1799,72 +1830,72 @@ var bt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
1799
1830
  onBehalfOf: x().nullable(),
1800
1831
  metadata: s().nullable(),
1801
1832
  createdAt: d().default("now")
1802
- }).index("byApiKeyTenant", ["tenantId"]), no = [
1803
- Xa,
1804
- Za,
1805
- Qa
1806
- ], ro = "id", io = (e, t) => {
1833
+ }).index("byApiKeyTenant", ["tenantId"]), uo = [
1834
+ io,
1835
+ ao,
1836
+ oo
1837
+ ], $ = "id", fo = (e, t) => {
1807
1838
  let n = S(e);
1808
1839
  if (n === void 0) return t;
1809
- let r = n.fields[ro]?.idScheme;
1810
- if (r === void 0 || t[ro] != null) return t;
1840
+ let r = n.fields[$]?.idScheme;
1841
+ if (r === void 0 || t[$] != null) return t;
1811
1842
  if (r.kind === "numeric") {
1812
- if (!(ro in t)) return t;
1843
+ if (!($ in t)) return t;
1813
1844
  let e = { ...t };
1814
- return delete e[ro], e;
1845
+ return delete e[$], e;
1815
1846
  }
1816
1847
  let i = ae(r, e);
1817
1848
  return i === null ? t : {
1818
1849
  ...t,
1819
- [ro]: i
1850
+ [$]: i
1820
1851
  };
1821
- }, ao = (e, t) => t.map((t) => io(e, t)), oo = (e, t) => {
1852
+ }, po = (e, t) => t.map((t) => fo(e, t)), mo = (e, t) => {
1822
1853
  let n = [], r = t;
1823
1854
  for (let [t, i] of Object.entries(e.fields)) {
1824
1855
  let e = i;
1825
1856
  e.nullable || e.hasDefault || e.idScheme !== void 0 || e.generatedAs !== void 0 || (r[t] === void 0 || r[t] === null) && n.push(t);
1826
1857
  }
1827
1858
  return n;
1828
- }, so = (e, t) => {
1859
+ }, ho = (e, t) => {
1829
1860
  let n = t;
1830
1861
  return e.filter((e) => n[e] === void 0 || n[e] === null);
1831
- }, co = (e, t, n) => e.insert(t.tableName, n), lo = (e, t, n, r) => e.upsert(t.tableName, n, {
1862
+ }, go = (e, t, n) => e.insert(t.tableName, n), _o = (e, t, n, r) => e.upsert(t.tableName, n, {
1832
1863
  conflictColumns: r.conflictColumns,
1833
1864
  ...r.update === void 0 ? {} : { update: r.update }
1834
- }), uo = (e, t, n, r) => e.updateMany(t.tableName, n, { where: r.where }), fo = 512, po = (e) => {
1865
+ }), vo = (e, t, n, r) => e.updateMany(t.tableName, n, { where: r.where }), yo = 512, bo = (e) => {
1835
1866
  e.setMaxListeners(512);
1836
- }, mo = (e, t, n) => ({
1867
+ }, xo = (e, t, n) => ({
1837
1868
  _tag: "PrimaryKeyConflictError",
1838
1869
  table: e,
1839
1870
  key: t,
1840
1871
  cause: n
1841
- }), ho = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", go = /* @__PURE__ */ new Map(), _o = (e) => {
1872
+ }), So = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", Co = /* @__PURE__ */ new Map(), wo = (e) => {
1842
1873
  if (!e.table || !e.timeColumn) throw Error("registerRetention: table + timeColumn are required");
1843
1874
  if (!Number.isFinite(e.ttlMs) || e.ttlMs <= 0) throw Error(`registerRetention(${e.table}): ttlMs must be a positive number`);
1844
- go.set(e.table, e);
1845
- }, vo = () => [...go.values()], yo = () => go.clear(), bo = async (e, t, n, r = 2e4) => {
1875
+ Co.set(e.table, e);
1876
+ }, To = () => [...Co.values()], Eo = () => Co.clear(), Do = async (e, t, n, r = 2e4) => {
1846
1877
  let i = new Date(t - e.ttlMs), a = 0;
1847
1878
  for (;;) {
1848
1879
  let t = await n(e.table, e.timeColumn, i, r, e.where);
1849
1880
  if (a += t, t < r) break;
1850
1881
  }
1851
1882
  return a;
1852
- }, xo = (e, t) => {
1883
+ }, Oo = (e, t) => {
1853
1884
  let n = Number(e ?? String(t));
1854
1885
  return (Number.isFinite(n) && n > 0 ? n : t) * 36e5;
1855
- }, So = "_voltro_cdc_offsets", Co = _(So, {
1886
+ }, ko = "_voltro_cdc_offsets", Ao = _(ko, {
1856
1887
  id: T({ prefix: "cdcoff" }),
1857
1888
  replicaId: x(),
1858
1889
  streamName: x(),
1859
1890
  binlogFile: x(),
1860
1891
  binlogPosition: x(),
1861
1892
  updatedAt: d()
1862
- }).index(["replicaId"]), wo = _(So, {
1893
+ }).index(["replicaId"]), jo = _(ko, {
1863
1894
  id: T({ prefix: "cdcoff" }),
1864
1895
  replicaId: x(),
1865
1896
  streamName: x(),
1866
1897
  ctVersion: x(),
1867
1898
  updatedAt: d()
1868
- }).index(["replicaId"]), To = "postgres";
1899
+ }).index(["replicaId"]), Mo = "postgres";
1869
1900
  //#endregion
1870
- export { de as AUTO_FILLED_COLUMNS, X as BranchNameInvalid, ca as BranchTransitionInvalid, So as CDC_OFFSETS_TABLE, fo as CHANGE_LISTENER_CEILING, qe as ColumnBuilder, wt as ENCRYPTED_PREFIX, To as ENGINE, dn as EagerCardinalityError, Me as FILE_MIGRATION_PATTERN, Ze as FRAMEWORK_LIVE_TABLES, Tt as FieldDecryptionError, ci as MATCHES_NO_ROWS, Ue as MAX_IDENTIFIER_LENGTH, yt as SqlClient, Xi as TableStreamError, wn as TenantNamespaceInvalid, Cn as TenantNamespaceUnresolved, wa as TenantRegionUnavailable, Ca as TenantResidencyUnresolved, Ye as WARN_IDENTIFIER_LENGTH, to as _voltroApiKeysTable, Co as _voltroCdcOffsetsTable, $a as _voltroIdempotencyTable, eo as _voltroKvTable, Qa as _voltroMigrationPlansTable, Xa as _voltroMigrationsTable, wo as _voltroMssqlCdcOffsetsTable, Za as _voltroSeedsTable, Jr as actorsTable, xa as admitBranch, ze as allEnumRenames, $t as allRegisteredRelations, u as allRegisteredTables, fi as and, Ve as array, ai as arrayContains, si as arrayHas, oi as arrayOverlaps, pn as attachEagerLoads, Di as attributionFields, ji as attributionKey, Ra as auditAllTableIndexes, La as auditTableIndexes, Ee as avg, Ke as avgOver, zi as beginLocalWrite, je as bigint, Ma as bindResidentStore, ke as boolean, aa as branchNamespaceName, ge as bytes, Pi as claimPendingAttribution, et as clearEnumRenames, Hi as clearPendingAttribution, tn as clearRelationsRegistry, Oa as clearResidencyConfig, yo as clearRetentions, m as clearTableRegistry, Ki as clearWriteRecorders, Mn as coercePredicateValue, Nn as coercePredicateValues, Ci as collectSubqueries, Be as column, jt as columnSchema, Gn as compileEagerJson, N as compilePredicate, Pn as compileRawFragment, P as compileSelect, ta as computeEmbedding, ri as contains, Ae as count, Oe as countDistinct, Ei as currentWriteAttribution, he as databaseHandle, nt as date, st as dbEnum, be as decimal, we as declareEnumRename, cn as decodeRowsFromSchema, At as decryptFieldsOnRead, Ja as defineMigration, g as defineMixin, Ga as defineSeed, tt as denseRank, me as deriveTypeIdPrefix, Ct as deserializeArraysOnRead, Ne as drainIdentifierWarnings, at as dropped, un as encodeRowForSchema, kt as encryptFieldsForWrite, Ot as encryptedColumnsOf, Bi as endLocalWrite, va as enforceBranchLimits, ee as ensureTableRegistered, Yr as eq, M as escapeLike, Si as evaluatePredicate, ot as except, yi as exists, Ua as formatIndexAuditIssue, no as frameworkTables, ae as generateId, Te as generateSnowflake, se as geography, a as geometry, De as getEnumRenames, Qt as getRelation, Zt as getRelations, Da as getResidencyConfig, S as getTable, Zr as gt, Qr as gte, Sn as hasEagerLoads, ea as hybridSearch, T as id, ti as inSet, _i as inSubquery, O as inferForeignKey, co as insertRow, C as integer, ye as intersect, l as interval, oa as isBranchNamespace, zt as isEmptyRelationsSpec, Dt as isEncrypted, Et as isFieldDecryptionError, _e as isFileMigration, He as isFrameworkOwnedLiveTable, Ya as isMigrationDefinition, fa as isNeonConnection, ui as isNotNull, li as isNull, ho as isPrimaryKeyConflictError, Aa as isRegionServable, Bt as isRelationsSpec, Ka as isSeedDefinition, p as isSqliteFamily, ct as isTableReactive, xe as isView, s as json, hi as jsonField, f as jsonIndex, it as lag, oe as lead, vo as listRetentions, $r as lt, ei as lte, Sa as makeNamespaceBranchExecutor, Ht as many, Ut as manyToMany, b as materializeFields, i as max, We as migration, rt as min, so as missingConflictColumns, oo as missingRequiredColumns, pe as mixin, Xr as neq, la as nextBranchState, mi as not, bi as notExists, ni as notInSet, vi as notInSubquery, Le as numeric, Vt as one, fn as oneCardinalityMessage, pi as or, ce as paginateBy, c as paginateById, Ui as pendingAttributionCount, ga as planBranch, ua as planBranchProvision, da as planBranchTeardown, _a as planBranchTeardownFor, ma as planNeonBranchProvision, ha as planNeonBranchTeardown, mo as primaryKeyConflictError, ya as provisionBranch, Na as provisionResidentTenant, kn as qualifyTable, o as queryFor, Re as queryForView, le as quoteIdent, po as raiseChangeListenerCeiling, re as rank, n as raw, Fe as real, qi as recordsTable, ne as reference, Wr as registerCoreTables, Xt as registerDiscoveredRelations, Ni as registerPendingAttribution, Yt as registerRelations, _o as registerRetention, r as registerTable, Wi as registerWriteRecorder, Rt as relations, Kr as requireActors, ue as requireTable, qr as requireTenants, Qe as resetSnowflake, ja as residentPlacement, pa as resolveBranchMechanism, Vi as resolveEchoAttribution, Ie as resolveFullTextIndex, e as resolveIdScheme, fe as resolveMixinGraph, ka as resolveTenantHome, On as resolveTenantNamespace, xo as retentionTtlMsFromEnv, t as rowNumber, Mt as rowSchema, Ti as runWithWriteAttribution, Ji as runWriteRecorders, Dn as sanitizeIdentifierFragment, St as serializeArraysForWrite, y as serverOnlyColumns, Ea as setResidencyConfig, Yi as settleTransactionExit, di as spatialPredicate, io as stampGeneratedId, ao as stampGeneratedIds, ii as startsWith, $i as streamTable, Pe as sum, te as sumOver, bo as sweepRetention, _ as table, ba as teardownBranch, x as text, d as timestamp, lt as timestampMs, ut as timestampMsOrNull, v as union, ie as unionAll, Gi as unregisterWriteRecorder, uo as updateManyRow, lo as upsertRow, ve as validateColumnName, Ge as validateIndexName, en as validateRegisteredRelations, Kt as validateRelationConfig, Xe as validateTableName, Se as validateTypeIdPrefix, h as vector, Je as vectorDistanceToOpclass, na as vectorEmbedding, $e as view, Ce as viewSql, wi as walkLeaves, Oi as withCapturedAttribution };
1901
+ export { de as AUTO_FILLED_COLUMNS, Y as BranchNameInvalid, ga as BranchTransitionInvalid, ko as CDC_OFFSETS_TABLE, yo as CHANGE_LISTENER_CEILING, qe as ColumnBuilder, wt as ENCRYPTED_PREFIX, Mo as ENGINE, dn as EagerCardinalityError, Me as FILE_MIGRATION_PATTERN, Ze as FRAMEWORK_LIVE_TABLES, Tt as FieldDecryptionError, ta as INITIAL_VERSION, li as MATCHES_NO_ROWS, Ue as MAX_IDENTIFIER_LENGTH, yt as SqlClient, ia as TableStreamError, Tn as TenantNamespaceInvalid, wn as TenantNamespaceUnresolved, Ma as TenantRegionUnavailable, ja as TenantResidencyUnresolved, na as VOLTRO_EXPIRES_MIXIN_ID, Zi as VersionConflict, Ye as WARN_IDENTIFIER_LENGTH, lo as _voltroApiKeysTable, Ao as _voltroCdcOffsetsTable, so as _voltroIdempotencyTable, co as _voltroKvTable, oo as _voltroMigrationPlansTable, io as _voltroMigrationsTable, jo as _voltroMssqlCdcOffsetsTable, ao as _voltroSeedsTable, Yr as actorsTable, ka as admitBranch, ze as allEnumRenames, $t as allRegisteredRelations, u as allRegisteredTables, pi as and, Ve as array, oi as arrayContains, ci as arrayHas, si as arrayOverlaps, pn as attachEagerLoads, Oi as attributionFields, Mi as attributionKey, Ka as auditAllTableIndexes, Ga as auditTableIndexes, Ee as avg, Ke as avgOver, Bi as beginLocalWrite, je as bigint, Ba as bindResidentStore, ke as boolean, pa as branchNamespaceName, ge as bytes, Fi as claimPendingAttribution, et as clearEnumRenames, Ui as clearPendingAttribution, tn as clearRelationsRegistry, Ia as clearResidencyConfig, Eo as clearRetentions, m as clearTableRegistry, qi as clearWriteRecorders, Nn as coercePredicateValue, Pn as coercePredicateValues, wi as collectSubqueries, Be as column, jt as columnSchema, Kn as compileEagerJson, M as compilePredicate, Fn as compileRawFragment, N as compileSelect, la as computeEmbedding, ii as contains, Ae as count, Oe as countDistinct, Di as currentWriteAttribution, he as databaseHandle, nt as date, st as dbEnum, be as decimal, we as declareEnumRename, cn as decodeRowsFromSchema, At as decryptFieldsOnRead, no as defineMigration, g as defineMixin, $a as defineSeed, tt as denseRank, me as deriveTypeIdPrefix, Ct as deserializeArraysOnRead, Ne as drainIdentifierWarnings, at as dropped, un as encodeRowForSchema, kt as encryptFieldsForWrite, Ot as encryptedColumnsOf, Vi as endLocalWrite, Ea as enforceBranchLimits, ee as ensureTableRegistered, Xr as eq, j as escapeLike, Ci as evaluatePredicate, ot as except, bi as exists, ra as expires, Za as formatIndexAuditIssue, uo as frameworkTables, ae as generateId, Te as generateSnowflake, se as geography, a as geometry, De as getEnumRenames, Qt as getRelation, Zt as getRelations, Fa as getResidencyConfig, S as getTable, Qr as gt, $r as gte, Cn as hasEagerLoads, ca as hybridSearch, T as id, ni as inSet, vi as inSubquery, O as inferForeignKey, go as insertRow, C as integer, ye as intersect, l as interval, ma as isBranchNamespace, zt as isEmptyRelationsSpec, Dt as isEncrypted, Et as isFieldDecryptionError, _e as isFileMigration, He as isFrameworkOwnedLiveTable, ro as isMigrationDefinition, ba as isNeonConnection, di as isNotNull, ui as isNull, So as isPrimaryKeyConflictError, Ra as isRegionServable, Bt as isRelationsSpec, eo as isSeedDefinition, p as isSqliteFamily, ct as isTableReactive, xe as isView, s as json, gi as jsonField, f as jsonIndex, it as lag, oe as lead, To as listRetentions, ei as lt, ti as lte, Aa as makeNamespaceBranchExecutor, Ht as many, Ut as manyToMany, b as materializeFields, i as max, We as migration, rt as min, ho as missingConflictColumns, mo as missingRequiredColumns, pe as mixin, Zr as neq, _a as nextBranchState, hi as not, xi as notExists, ri as notInSet, yi as notInSubquery, Le as numeric, Vt as one, fn as oneCardinalityMessage, mi as or, ce as paginateBy, c as paginateById, Wi as pendingAttributionCount, wa as planBranch, va as planBranchProvision, ya as planBranchTeardown, Ta as planBranchTeardownFor, Sa as planNeonBranchProvision, Ca as planNeonBranchTeardown, $i as planVersionedUpdate, xo as primaryKeyConflictError, Da as provisionBranch, Va as provisionResidentTenant, An as qualifyTable, o as queryFor, Re as queryForView, le as quoteIdent, bo as raiseChangeListenerCeiling, re as rank, n as raw, Fe as real, Ji as recordsTable, te as reference, Gr as registerCoreTables, Xt as registerDiscoveredRelations, Pi as registerPendingAttribution, Yt as registerRelations, wo as registerRetention, r as registerTable, Gi as registerWriteRecorder, Rt as relations, qr as requireActors, ue as requireTable, Jr as requireTenants, Qe as resetSnowflake, za as residentPlacement, xa as resolveBranchMechanism, Hi as resolveEchoAttribution, Ie as resolveFullTextIndex, e as resolveIdScheme, fe as resolveMixinGraph, La as resolveTenantHome, kn as resolveTenantNamespace, Oo as retentionTtlMsFromEnv, t as rowNumber, Mt as rowSchema, Ei as runWithWriteAttribution, Yi as runWriteRecorders, On as sanitizeIdentifierFragment, St as serializeArraysForWrite, y as serverOnlyColumns, Pa as setResidencyConfig, Xi as settleTransactionExit, ea as settleVersionedUpdate, fi as spatialPredicate, fo as stampGeneratedId, po as stampGeneratedIds, ai as startsWith, sa as streamTable, Pe as sum, v as sumOver, Do as sweepRetention, _ as table, Oa as teardownBranch, x as text, d as timestamp, lt as timestampMs, ut as timestampMsOrNull, ne as union, ie as unionAll, Ki as unregisterWriteRecorder, vo as updateManyRow, _o as upsertRow, ve as validateColumnName, Ge as validateIndexName, en as validateRegisteredRelations, Kt as validateRelationConfig, Xe as validateTableName, Se as validateTypeIdPrefix, h as vector, Je as vectorDistanceToOpclass, ua as vectorEmbedding, Qi as versionColumnOf, $e as view, Ce as viewSql, Ti as walkLeaves, ki as withCapturedAttribution };