@voltro/database 0.83.0 → 0.83.1
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/CHANGELOG.md +75 -0
- package/dist/index.d.ts +16 -3
- package/dist/index.js +522 -522
- package/dist/{replaceInProgress-CncEA_Sx.js → replaceInProgress-Z1aAw3GD.js} +358 -358
- package/dist/sql.js +1378 -1346
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { $ as e, $n as t, $t as n, A as r, An as i, Ar as a, At as o, B as s, Bn as c, Br as l, Bt as u, C as d, Cn as f, Cr as p, Ct as m, D as h, Dn as g, Dr as _, Dt as v, E as ee, En as te, Er as ne, Et as re, F as ie, Fn as ae, Fr as oe, Ft as se, G as ce, Gn as le, Gt as ue, H as de, Hn as fe, Hr as
|
|
2
|
-
import { a as
|
|
3
|
-
import { Cause as
|
|
4
|
-
import { createHash as
|
|
5
|
-
import { AsyncLocalStorage as
|
|
6
|
-
import { TransactionConnection as
|
|
7
|
-
import { ansi as
|
|
8
|
-
import { SqlClient as
|
|
1
|
+
import { $ as e, $n as t, $t as n, A as r, An as i, Ar as a, At as o, B as s, Bn as c, Br as l, Bt as u, C as d, Cn as f, Cr as p, Ct as m, D as h, Dn as g, Dr as _, Dt as v, E as ee, En as te, Er as ne, Et as re, F as ie, Fn as ae, Fr as oe, Ft as se, G as ce, Gn as le, Gt as ue, H as de, Hn as fe, Hr as y, Ht as pe, I as me, In as he, Ir as ge, J as _e, Jn as ve, Jt as ye, K as be, Kn as xe, Kt as Se, L as Ce, Ln as we, Lr as Te, Lt as Ee, M as De, Mn as b, Mr as Oe, Mt as ke, N as Ae, Nn as je, Nr as Me, Nt as Ne, O as Pe, On as Fe, Or as x, Ot as Ie, P as Le, Pn as Re, Pr as S, Pt as ze, Q as Be, Qn as Ve, Qt as He, R as Ue, Rn as We, Rr as Ge, Rt as Ke, S as qe, Sn as Je, Sr as Ye, St as Xe, T as Ze, Tn as Qe, Tr as $e, Tt as et, U as tt, Un as nt, Ur as rt, Ut as it, V as at, Vn as ot, Vr as C, Vt as st, W as ct, Wn as lt, Wt as ut, X as dt, Xn as ft, Xt as pt, Y as mt, Yn as w, Yt as ht, Z as gt, Zn as _t, Zt as vt, _ as yt, _n as bt, _r as xt, _t as St, a as Ct, an as wt, ar as Tt, at as Et, b as Dt, bn as Ot, br as kt, bt as At, c as jt, cn as Mt, cr as Nt, ct as Pt, d as Ft, dn as It, dr as Lt, dt as Rt, en as zt, er as Bt, et as Vt, f as Ht, fn as Ut, fr as Wt, ft as Gt, g as Kt, gn as qt, gr as Jt, gt as Yt, h as Xt, hn as Zt, hr as Qt, ht as $t, i as en, in as tn, ir as nn, it as rn, j as an, jn as on, jr as sn, jt as cn, kn as ln, kr as un, kt as dn, l as fn, ln as pn, lr as mn, lt as hn, m as gn, mn as _n, mr as vn, mt as yn, n as bn, nn as xn, nr as Sn, nt as Cn, o as wn, on as Tn, or as En, ot as Dn, p as On, pn as kn, pr as An, pt as jn, q as Mn, qn as Nn, qt as Pn, r as Fn, rn as In, rr as Ln, rt as Rn, s as zn, sn as T, sr as Bn, st as Vn, t as Hn, tn as Un, tr as Wn, tt as Gn, u as Kn, un as qn, ur as Jn, ut as Yn, v as Xn, vn as Zn, vr as Qn, vt as $n, w as er, wn as tr, wr as nr, wt as E, x as rr, xn as ir, xr as ar, xt as or, y as sr, yn as cr, yr as lr, yt as ur, z as dr, zn as fr, zr as pr, zt as mr } from "./replaceInProgress-Z1aAw3GD.js";
|
|
2
|
+
import { a as hr, i as gr, n as _r, o as vr, r as yr, s as br, t as xr } from "./wire-B28cPjEp.js";
|
|
3
|
+
import { Cause as Sr, Chunk as Cr, Data as wr, Effect as D, Exit as Tr, Metric as O, MetricBoundaries as Er, Option as k, Schedule as Dr, Schema as A, Stream as Or } from "effect";
|
|
4
|
+
import { createHash as kr } from "node:crypto";
|
|
5
|
+
import { AsyncLocalStorage as Ar } from "node:async_hooks";
|
|
6
|
+
import { TransactionConnection as jr } from "@effect/sql/SqlClient";
|
|
7
|
+
import { ansi as j } from "@voltro/logger";
|
|
8
|
+
import { SqlClient as Mr } from "@effect/sql";
|
|
9
9
|
//#region src/actorSnapshot.ts
|
|
10
|
-
var
|
|
10
|
+
var Nr = (e) => typeof e == "string" && e !== "" ? e : null, Pr = async (e, t, n) => {
|
|
11
11
|
if (t != null && t !== "") try {
|
|
12
12
|
let r = (await e.query({
|
|
13
13
|
table: "actors",
|
|
@@ -23,20 +23,20 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
23
23
|
}))[0];
|
|
24
24
|
return r === void 0 ? void 0 : {
|
|
25
25
|
id: t,
|
|
26
|
-
type:
|
|
27
|
-
displayName:
|
|
28
|
-
email:
|
|
26
|
+
type: Nr(r.kind) ?? n,
|
|
27
|
+
displayName: Nr(r.displayName),
|
|
28
|
+
email: Nr(r.email)
|
|
29
29
|
};
|
|
30
30
|
} catch {
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
|
-
},
|
|
33
|
+
}, Fr = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", Ir = (e) => {
|
|
34
34
|
let t = [];
|
|
35
35
|
for (let [n, r] of Object.entries(e.fields)) r.type === "array" && t.push(n);
|
|
36
36
|
return t;
|
|
37
|
-
},
|
|
38
|
-
if (!
|
|
39
|
-
let r =
|
|
37
|
+
}, Lr = (e, t, n) => {
|
|
38
|
+
if (!Fr(n) || !t) return e;
|
|
39
|
+
let r = Ir(t);
|
|
40
40
|
if (r.length === 0) return e;
|
|
41
41
|
let i = { ...e };
|
|
42
42
|
for (let e of r) {
|
|
@@ -44,9 +44,9 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
44
44
|
Array.isArray(t) && (i[e] = JSON.stringify(t));
|
|
45
45
|
}
|
|
46
46
|
return i;
|
|
47
|
-
},
|
|
48
|
-
if (!
|
|
49
|
-
let r =
|
|
47
|
+
}, Rr = (e, t, n) => {
|
|
48
|
+
if (!Fr(n) || !t) return e;
|
|
49
|
+
let r = Ir(t);
|
|
50
50
|
return r.length === 0 ? e : e.map((e) => {
|
|
51
51
|
let t;
|
|
52
52
|
for (let n of r) {
|
|
@@ -58,13 +58,13 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
58
58
|
}
|
|
59
59
|
return t ?? e;
|
|
60
60
|
});
|
|
61
|
-
},
|
|
61
|
+
}, zr = "enc:v1:", Br = "enc:v2:", Vr = (e, t, n) => {
|
|
62
62
|
let r = `${e}:${t}`, i = n == null || n === "" ? void 0 : String(n);
|
|
63
63
|
return i === void 0 ? { column: r } : {
|
|
64
64
|
column: r,
|
|
65
65
|
row: `${r}:${i}`
|
|
66
66
|
};
|
|
67
|
-
},
|
|
67
|
+
}, Hr = (e) => typeof e == "string" && e.startsWith("enc:v2:"), Ur = class extends Error {
|
|
68
68
|
_tag = "FieldDecryptionError";
|
|
69
69
|
table;
|
|
70
70
|
column;
|
|
@@ -72,7 +72,7 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
72
72
|
constructor(e) {
|
|
73
73
|
super(`column "${e.table}.${e.column}" is .encrypted() but could not be decrypted (${e.reason}) — the stored value was most likely encrypted under a different key`), this.name = "FieldDecryptionError", this.table = e.table, this.column = e.column, this.reason = e.reason;
|
|
74
74
|
}
|
|
75
|
-
},
|
|
75
|
+
}, Wr = (e) => typeof e == "object" && !!e && e._tag === "FieldDecryptionError", Gr = (e) => typeof e == "string" && (e.startsWith("enc:v1:") || e.startsWith("enc:v2:")), Kr = (e, t, n) => e.encrypt(JSON.stringify(t), n), qr = /* @__PURE__ */ new Set([
|
|
76
76
|
"text",
|
|
77
77
|
"id",
|
|
78
78
|
"reference",
|
|
@@ -80,51 +80,51 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
80
80
|
"uuid",
|
|
81
81
|
"email",
|
|
82
82
|
"url"
|
|
83
|
-
]),
|
|
83
|
+
]), Jr = (e, t, n, r) => {
|
|
84
84
|
let i = e.decrypt(t, r), a;
|
|
85
85
|
try {
|
|
86
86
|
a = JSON.parse(i);
|
|
87
87
|
} catch {
|
|
88
88
|
return i;
|
|
89
89
|
}
|
|
90
|
-
return typeof a == "string" ? a : n === void 0 ||
|
|
91
|
-
},
|
|
90
|
+
return typeof a == "string" ? a : n === void 0 || qr.has(n) ? i : a;
|
|
91
|
+
}, Yr = (e, t, n, r) => {
|
|
92
92
|
let i = e.decrypt(t, r);
|
|
93
93
|
try {
|
|
94
|
-
return typeof JSON.parse(i) == "string" ? !1 : n === void 0 ||
|
|
94
|
+
return typeof JSON.parse(i) == "string" ? !1 : n === void 0 || qr.has(n) ? !0 : void 0;
|
|
95
95
|
} catch {
|
|
96
96
|
return !0;
|
|
97
97
|
}
|
|
98
|
-
},
|
|
98
|
+
}, Xr = (e, t) => e.fields[t]?.type, Zr = (e) => {
|
|
99
99
|
let t = [];
|
|
100
100
|
for (let [n, r] of Object.entries(e.fields)) r.encrypted === !0 && t.push(n);
|
|
101
101
|
return t;
|
|
102
|
-
},
|
|
102
|
+
}, Qr = "id", $r = (e, t, n, r) => {
|
|
103
103
|
if (!t) return e;
|
|
104
|
-
let i =
|
|
104
|
+
let i = Zr(t);
|
|
105
105
|
if (i.length === 0) return e;
|
|
106
|
-
let a = t.tableName ?? "?", o = r ?? e[
|
|
106
|
+
let a = t.tableName ?? "?", o = r ?? e[Qr], s = { ...e };
|
|
107
107
|
for (let e of i) {
|
|
108
108
|
let t = s[e];
|
|
109
|
-
if (!(t == null ||
|
|
109
|
+
if (!(t == null || Gr(t))) {
|
|
110
110
|
if (!n) throw Error(`column "${a}.${e}" is .encrypted() but no field cipher is registered — set VOLTRO_FIELD_ENCRYPTION_KEY (\`voltro dev\` mints one; \`voltro serve\` refuses to boot without it); in a test, pass \`fieldEncryptionKey\` to makeTestContext`);
|
|
111
|
-
s[e] =
|
|
111
|
+
s[e] = Kr(n, t, Vr(a, e, o));
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
return s;
|
|
115
|
-
},
|
|
115
|
+
}, ei = (e, t, n, r) => {
|
|
116
116
|
if (!t) return e;
|
|
117
|
-
let i =
|
|
117
|
+
let i = Zr(t);
|
|
118
118
|
if (i.length === 0 || !n) return e;
|
|
119
119
|
let a = r?.onError ?? "throw", o = t.tableName ?? "?";
|
|
120
120
|
return e.map((e) => {
|
|
121
121
|
let s;
|
|
122
122
|
for (let c of i) {
|
|
123
123
|
let i = e[c];
|
|
124
|
-
if (
|
|
124
|
+
if (Gr(i)) {
|
|
125
125
|
s ??= { ...e };
|
|
126
126
|
try {
|
|
127
|
-
s[c] =
|
|
127
|
+
s[c] = Jr(n, i, Xr(t, c), Vr(o, c, r?.rowId ?? e[Qr]));
|
|
128
128
|
} catch (e) {
|
|
129
129
|
let t = String(e?.message ?? e);
|
|
130
130
|
if (a === "null") {
|
|
@@ -135,7 +135,7 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
135
135
|
});
|
|
136
136
|
continue;
|
|
137
137
|
}
|
|
138
|
-
throw new
|
|
138
|
+
throw new Ur({
|
|
139
139
|
table: o,
|
|
140
140
|
column: c,
|
|
141
141
|
reason: t
|
|
@@ -145,77 +145,77 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
145
145
|
}
|
|
146
146
|
return s ?? e;
|
|
147
147
|
});
|
|
148
|
-
},
|
|
149
|
-
let t =
|
|
150
|
-
return Object.defineProperty(t,
|
|
148
|
+
}, ti = Symbol.for("@voltro/database/storeRefusal"), ni = (e) => {
|
|
149
|
+
let t = w(e.detail);
|
|
150
|
+
return Object.defineProperty(t, ti, {
|
|
151
151
|
value: e,
|
|
152
152
|
enumerable: !1
|
|
153
153
|
}), t;
|
|
154
|
-
},
|
|
155
|
-
for (let t of
|
|
154
|
+
}, ri = (e) => {
|
|
155
|
+
for (let t of _t(e)) {
|
|
156
156
|
let e = t;
|
|
157
157
|
for (let t = 0; e != null && t < 8; t += 1) {
|
|
158
|
-
let t = e[
|
|
158
|
+
let t = e[ti];
|
|
159
159
|
if (t !== void 0) return t;
|
|
160
160
|
e = e.cause;
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
|
-
},
|
|
163
|
+
}, ii = (e) => {
|
|
164
164
|
let t = (() => {
|
|
165
165
|
switch (e.type) {
|
|
166
|
-
case "id": return e.idScheme?.kind === "numeric" ?
|
|
166
|
+
case "id": return e.idScheme?.kind === "numeric" ? A.Number : A.String;
|
|
167
167
|
case "text":
|
|
168
|
-
case "enum": return
|
|
169
|
-
case "reference": return e.referenceStorage === "numeric" ?
|
|
168
|
+
case "enum": return A.String;
|
|
169
|
+
case "reference": return e.referenceStorage === "numeric" ? A.Number : A.String;
|
|
170
170
|
case "integer":
|
|
171
171
|
case "real":
|
|
172
|
-
case "decimal": return
|
|
173
|
-
case "boolean": return
|
|
172
|
+
case "decimal": return A.Number;
|
|
173
|
+
case "boolean": return A.Boolean;
|
|
174
174
|
case "timestamp":
|
|
175
|
-
case "date": return
|
|
176
|
-
case "bigint": return
|
|
177
|
-
case "bytes": return
|
|
178
|
-
case "array": return
|
|
179
|
-
case "interval": return
|
|
180
|
-
default: return
|
|
175
|
+
case "date": return xr;
|
|
176
|
+
case "bigint": return A.BigInt;
|
|
177
|
+
case "bytes": return A.Uint8ArrayFromBase64;
|
|
178
|
+
case "array": return A.Array(A.Unknown);
|
|
179
|
+
case "interval": return A.String;
|
|
180
|
+
default: return A.Unknown;
|
|
181
181
|
}
|
|
182
182
|
})();
|
|
183
|
-
return e.nullable === !0 ?
|
|
184
|
-
},
|
|
183
|
+
return e.nullable === !0 ? A.NullOr(t) : t;
|
|
184
|
+
}, ai = (e, t) => {
|
|
185
185
|
let n = new Set(t?.omit ?? []), r = {};
|
|
186
|
-
for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] =
|
|
187
|
-
return
|
|
188
|
-
},
|
|
186
|
+
for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] = ii(i));
|
|
187
|
+
return A.Struct(r);
|
|
188
|
+
}, oi = (e) => typeof e == "function" ? e : () => e, si = (e, t) => ({
|
|
189
189
|
kind: "one",
|
|
190
|
-
target:
|
|
190
|
+
target: oi(e),
|
|
191
191
|
...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
|
|
192
192
|
...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
|
|
193
|
-
}),
|
|
193
|
+
}), ci = (e, t) => ({
|
|
194
194
|
kind: "many",
|
|
195
|
-
target:
|
|
195
|
+
target: oi(e),
|
|
196
196
|
...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
|
|
197
197
|
...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
|
|
198
|
-
}),
|
|
198
|
+
}), li = (e, t) => ({
|
|
199
199
|
kind: "manyToMany",
|
|
200
|
-
target:
|
|
201
|
-
through:
|
|
200
|
+
target: oi(e),
|
|
201
|
+
through: oi(t.through),
|
|
202
202
|
sourceKey: t.sourceKey,
|
|
203
203
|
targetKey: t.targetKey
|
|
204
|
-
}),
|
|
205
|
-
one:
|
|
206
|
-
many:
|
|
207
|
-
manyToMany:
|
|
208
|
-
},
|
|
204
|
+
}), ui = {
|
|
205
|
+
one: si,
|
|
206
|
+
many: ci,
|
|
207
|
+
manyToMany: li
|
|
208
|
+
}, di = (e, t) => {
|
|
209
209
|
let n = typeof e == "function" ? e : () => e;
|
|
210
210
|
return {
|
|
211
211
|
source: n,
|
|
212
|
-
relations: t(
|
|
212
|
+
relations: t(ui, n())
|
|
213
213
|
};
|
|
214
|
-
},
|
|
214
|
+
}, fi = (e) => {
|
|
215
215
|
if (typeof e != "object" || !e) return !1;
|
|
216
216
|
let t = e;
|
|
217
217
|
return typeof t.source != "function" || typeof t.relations != "object" || t.relations === null ? !1 : Object.keys(t.relations).length === 0;
|
|
218
|
-
},
|
|
218
|
+
}, pi = (e) => {
|
|
219
219
|
if (typeof e != "object" || !e) return !1;
|
|
220
220
|
let t = e;
|
|
221
221
|
if (typeof t.source != "function" || typeof t.relations != "object" || t.relations === null) return !1;
|
|
@@ -224,35 +224,35 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
224
224
|
let t = e?.kind;
|
|
225
225
|
return t === "one" || t === "many" || t === "manyToMany";
|
|
226
226
|
});
|
|
227
|
-
},
|
|
227
|
+
}, mi = si, hi = ci, gi = li, _i = (e, t, n) => {
|
|
228
228
|
let r = [];
|
|
229
229
|
for (let [n, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && r.push(n);
|
|
230
|
-
if (r.length === 0) throw
|
|
231
|
-
if (r.length > 1) throw
|
|
230
|
+
if (r.length === 0) throw w(`relation '${n}': no reference() column on '${e.tableName}' points at '${t}'. Either add one or pass an explicit { foreignKey: '<column>' }.`);
|
|
231
|
+
if (r.length > 1) throw w(`relation '${n}': multiple reference() columns on '${e.tableName}' point at '${t}' (${r.join(", ")}). Pass an explicit { foreignKey: '<column>' } to disambiguate.`);
|
|
232
232
|
return r[0];
|
|
233
|
-
},
|
|
234
|
-
let t =
|
|
233
|
+
}, vi = (e) => Object.keys(e.fields), yi = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), bi = (e) => {
|
|
234
|
+
let t = vi(e);
|
|
235
235
|
return t.length === 0 ? "<none>" : t.join(", ");
|
|
236
236
|
}, xi = (e, t, n) => {
|
|
237
237
|
let r = `relation '${t}' on '${e.tableName}'`, i = n.target();
|
|
238
238
|
if (n.kind === "manyToMany") {
|
|
239
239
|
let t = n.through();
|
|
240
|
-
for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!
|
|
240
|
+
for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!yi(t, o)) throw w(`${r}: manyToMany ${a} '${o}' is not a column on the junction table '${t.tableName}'. Both keys name columns on the JUNCTION — ${a === "sourceKey" ? `sourceKey points at '${e.tableName}'` : `targetKey points at '${i.tableName}'`}. Columns on '${t.tableName}': ${bi(t)}.`);
|
|
241
241
|
return;
|
|
242
242
|
}
|
|
243
|
-
if (n.sourceKey !== void 0 && n.foreignKey !== void 0) throw
|
|
244
|
-
if (n.sourceKey !== void 0 && !
|
|
245
|
-
let t =
|
|
246
|
-
throw
|
|
243
|
+
if (n.sourceKey !== void 0 && n.foreignKey !== void 0) throw w(`${r}: pass EITHER sourceKey OR foreignKey, not both. sourceKey '${n.sourceKey}' names a column on the source ('${e.tableName}') holding the target's id; foreignKey '${n.foreignKey}' names a column on the target ('${i.tableName}') holding the source's id. With both, foreignKey is ignored.`);
|
|
244
|
+
if (n.sourceKey !== void 0 && !yi(e, n.sourceKey)) {
|
|
245
|
+
let t = yi(i, n.sourceKey);
|
|
246
|
+
throw w(`${r}: sourceKey '${n.sourceKey}' is not a column on the source table '${e.tableName}'.` + (t ? ` It IS a column on the target '${i.tableName}' — you probably want { foreignKey: '${n.sourceKey}' }, which names the column on the TARGET that holds this table's id.` : ` Columns on '${e.tableName}': ${bi(e)}.`));
|
|
247
247
|
}
|
|
248
|
-
if (n.foreignKey !== void 0 && !
|
|
249
|
-
let t =
|
|
250
|
-
throw
|
|
248
|
+
if (n.foreignKey !== void 0 && !yi(i, n.foreignKey)) {
|
|
249
|
+
let t = yi(e, n.foreignKey);
|
|
250
|
+
throw w(`${r}: foreignKey '${n.foreignKey}' is not a column on the target table '${i.tableName}'.` + (t ? ` It IS a column on the source '${e.tableName}' — you want { sourceKey: '${n.foreignKey}' }. foreignKey names the column on the TARGET that points back at this table; sourceKey names the column on THIS table that holds the target's id.` : ` Columns on '${i.tableName}': ${bi(i)}.`));
|
|
251
251
|
}
|
|
252
|
-
}, Si = Symbol.for("@voltro/database/relationsRegistry"), Ci = globalThis,
|
|
253
|
-
let t = e.source(), n =
|
|
252
|
+
}, Si = Symbol.for("@voltro/database/relationsRegistry"), Ci = globalThis, M = Ci[Si] ?? (Ci[Si] = /* @__PURE__ */ new Map()), wi = (e) => {
|
|
253
|
+
let t = e.source(), n = M.get(t.tableName);
|
|
254
254
|
if (n === void 0) {
|
|
255
|
-
|
|
255
|
+
M.set(t.tableName, new Map(Object.entries(e.relations)));
|
|
256
256
|
return;
|
|
257
257
|
}
|
|
258
258
|
for (let [r, i] of Object.entries(e.relations)) {
|
|
@@ -264,26 +264,26 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
264
264
|
}
|
|
265
265
|
}, Ti = (e) => {
|
|
266
266
|
let t = 0;
|
|
267
|
-
for (let n of Object.values(e))
|
|
267
|
+
for (let n of Object.values(e)) pi(n) && (wi(n), t += 1);
|
|
268
268
|
return t;
|
|
269
269
|
}, Ei = (e) => {
|
|
270
|
-
let t =
|
|
270
|
+
let t = M.get(e);
|
|
271
271
|
if (t !== void 0) return Object.fromEntries(t);
|
|
272
|
-
}, Di = (e, t) =>
|
|
272
|
+
}, Di = (e, t) => M.get(e)?.get(t), Oi = () => {
|
|
273
273
|
let e = [];
|
|
274
|
-
for (let [t, n] of
|
|
274
|
+
for (let [t, n] of M) for (let [r, i] of n) e.push({
|
|
275
275
|
source: t,
|
|
276
276
|
name: r,
|
|
277
277
|
relation: i
|
|
278
278
|
});
|
|
279
279
|
return e;
|
|
280
280
|
}, ki = () => {
|
|
281
|
-
for (let [e, t] of
|
|
282
|
-
let n =
|
|
281
|
+
for (let [e, t] of M) {
|
|
282
|
+
let n = ir(e);
|
|
283
283
|
if (n !== void 0) for (let [e, r] of t) xi(n, e, r);
|
|
284
284
|
}
|
|
285
285
|
}, Ai = () => {
|
|
286
|
-
|
|
286
|
+
M.clear();
|
|
287
287
|
}, ji = 4, Mi = (e) => Object.keys(e.fields), Ni = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), Pi = (e, t) => {
|
|
288
288
|
let n = [];
|
|
289
289
|
for (let [r, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && n.push(r);
|
|
@@ -336,7 +336,7 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
336
336
|
}
|
|
337
337
|
return n;
|
|
338
338
|
}, Li = (e) => `${e.table}\u0000${e.hops.map((e) => `${e.table}.${e.foreignKey}<-${e.parentKey}`).join("|")}`, Ri = (e) => {
|
|
339
|
-
let t = e.tables ??
|
|
339
|
+
let t = e.tables ?? Zn(), n = e.relations ?? Oi(), r = e.maxDepth ?? 4, i = new Set(e.exclude ?? []), a = new Map(t.map((e) => [e.tableName, e])), o = [];
|
|
340
340
|
if (!a.has(e.subjectTable)) return {
|
|
341
341
|
subjectTable: e.subjectTable,
|
|
342
342
|
paths: [],
|
|
@@ -409,7 +409,7 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
409
409
|
return t.push(""), t.push(" WHAT THIS CANNOT SEE — a DSAR is only as complete as this list is short:"), n.length > 0 && t.push(` depth-truncated (${n.length}): ${n.map((e) => e.table).join(", ")}`), i.length > 0 && t.push(` excluded (${i.length}): ${[...new Set(i.map((e) => e.table))].join(", ")}`), t.push(r.length === 0 ? " unreachable: none — every registered table is linked to the subject." : ` unreachable (${r.length}): ${r.map((e) => e.table).join(", ")}`), t.push(" Always outside this graph: object storage / uploaded files, external processors,"), t.push(" log and metric sinks, backups, and any subject id embedded in JSON or free text."), t.join("\n");
|
|
410
410
|
}, Bi = (e) => Object.fromEntries(Object.entries(e.updateValues ?? {}).filter(([t, n]) => {
|
|
411
411
|
if (n === void 0) return !1;
|
|
412
|
-
if (t === "id" || e.conflictColumns.includes(t)) throw
|
|
412
|
+
if (t === "id" || e.conflictColumns.includes(t)) throw w(`upsert: updateValues cannot rewrite row identity column '${t}'`);
|
|
413
413
|
return !0;
|
|
414
414
|
})), Vi = (e, t, n) => {
|
|
415
415
|
let r = Bi(n);
|
|
@@ -430,13 +430,13 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
430
430
|
let r = new Set(Hi(e).map(([e]) => e)), i = t.split(".")[0];
|
|
431
431
|
return Object.fromEntries(Object.entries(n ?? {}).filter(([e, t]) => {
|
|
432
432
|
if (t === void 0) return !1;
|
|
433
|
-
if (r.has(e) || e === i) throw
|
|
433
|
+
if (r.has(e) || e === i) throw w(`patchJson: additionalPatch cannot rewrite the primary key or patched JSON column '${e}'`);
|
|
434
434
|
return !0;
|
|
435
435
|
}));
|
|
436
|
-
},
|
|
437
|
-
let [r, ...i] = t.split("."), a =
|
|
436
|
+
}, Ki = (e) => typeof e == "object" && !!e && !Array.isArray(e), qi = (e) => JSON.parse(JSON.stringify(e ?? null)), Ji = (e, t, n) => {
|
|
437
|
+
let [r, ...i] = t.split("."), a = qi(n), o = e[r], s = (e, t) => {
|
|
438
438
|
if (t === i.length) return a;
|
|
439
|
-
let n =
|
|
439
|
+
let n = Ki(e) ? e : {}, r = i[t], o = Object.hasOwn(n, r) ? n[r] : void 0;
|
|
440
440
|
return {
|
|
441
441
|
...n,
|
|
442
442
|
[r]: s(o, t + 1)
|
|
@@ -444,14 +444,14 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
444
444
|
};
|
|
445
445
|
return {
|
|
446
446
|
...e,
|
|
447
|
-
[r]: i.length === 0 ?
|
|
447
|
+
[r]: i.length === 0 ? Ki(o) && Ki(a) ? {
|
|
448
448
|
...o,
|
|
449
449
|
...a
|
|
450
450
|
} : a : s(o, 0)
|
|
451
451
|
};
|
|
452
|
-
},
|
|
453
|
-
let [a, ...o] = n.split("."), s = i ?? e`${e(a)}`, c =
|
|
454
|
-
if ((t === "sqlite" || t === "turso") && (o.some(l) || o.length === 0 &&
|
|
452
|
+
}, Yi = (e, t, n, r, i) => {
|
|
453
|
+
let [a, ...o] = n.split("."), s = i ?? e`${e(a)}`, c = qi(r), l = (e) => /["\\\u0000-\u001f]/.test(e);
|
|
454
|
+
if ((t === "sqlite" || t === "turso") && (o.some(l) || o.length === 0 && Ki(c) && Object.keys(c).some(l))) {
|
|
455
455
|
let t = 0, n = (t) => e`CASE WHEN (SELECT _voltro_json_escape_probe.key FROM json_each(${String.raw`{"\u0061":0}`}) AS _voltro_json_escape_probe) = ${String.raw`\u0061`}
|
|
456
456
|
THEN json_extract('"' || replace(${t}.key, '"', ${String.raw`\"`}) || '"', '$')
|
|
457
457
|
ELSE ${t}.key END`, r = (r) => {
|
|
@@ -493,7 +493,7 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
493
493
|
return t === "mysql" || t === "mariadb" ? e`JSON_SET(${n}, ${o}, JSON_EXTRACT(${i}, '$'))` : t === "mssql" ? a === null ? e`JSON_MODIFY(JSON_MODIFY(${n}, ${o}, 0), ${`strict ${o}`}, NULL)` : typeof a == "boolean" ? e`JSON_MODIFY(${n}, ${o}, CAST(${+!!a} AS bit))` : typeof a == "string" || typeof a == "number" ? e`JSON_MODIFY(${n}, ${o}, ${a})` : e`JSON_MODIFY(${n}, ${o}, JSON_QUERY(${i}))` : e`json_set(${n}, ${o}, json(${i}))`;
|
|
494
494
|
}, v;
|
|
495
495
|
if (o.length === 0) {
|
|
496
|
-
if (!
|
|
496
|
+
if (!Ki(c)) v = g(c);
|
|
497
497
|
else {
|
|
498
498
|
v = h([]);
|
|
499
499
|
for (let [e, t] of Object.entries(c)) v = _(v, [e], g(t), t);
|
|
@@ -507,55 +507,55 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
507
507
|
v = _(v, o, g(c), c);
|
|
508
508
|
}
|
|
509
509
|
return e`${e(a)} = ${v}`;
|
|
510
|
-
},
|
|
510
|
+
}, Xi = class extends Error {
|
|
511
511
|
_tag = "EagerCardinalityError";
|
|
512
512
|
constructor(e) {
|
|
513
513
|
super(e), this.name = "EagerCardinalityError";
|
|
514
514
|
}
|
|
515
|
-
},
|
|
515
|
+
}, Zi = (e) => {
|
|
516
516
|
let { relationName: t, sourceTableName: n, targetTableName: r, foreignKey: i, sourceKey: a } = e, o = r === n;
|
|
517
517
|
return `relation '${t}' on '${n}' is declared \`one\`, but ${r}.${i} matches MORE than one row for the same ${n}.${a} — so there is no single related row to return.` + (o ? ` Because this relation is self-referential, check which side the key is on: \`foreignKey: '${i}'\` means "rows whose ${i} points AT me" (my children — there can be many). If you meant "the row my ${i} points to" (my parent), that is \`sourceKey: '${i}'\`.` : " Use `many(...)` if several are expected, or narrow the key.");
|
|
518
|
-
},
|
|
518
|
+
}, Qi = async (e, t, n, r) => {
|
|
519
519
|
if (e.length === 0) return e;
|
|
520
520
|
let i = Ei(n.tableName);
|
|
521
|
-
if (i === void 0) throw
|
|
521
|
+
if (i === void 0) throw w(`cannot eager-load on '${n.tableName}': no relations registered. Did you forget to declare \`relations(${n.tableName}, ...)\` or import the file that does?`);
|
|
522
522
|
let a = e.map((e) => ({ ...e }));
|
|
523
523
|
for (let [e, o] of Object.entries(t)) {
|
|
524
524
|
let t = i[e];
|
|
525
525
|
if (t === void 0) {
|
|
526
526
|
let t = Object.keys(i).join(", ") || "<none>";
|
|
527
|
-
throw
|
|
527
|
+
throw w(`unknown relation '${e}' on '${n.tableName}'. Registered relations: ${t}.`);
|
|
528
528
|
}
|
|
529
|
-
xi(n, e, t), await
|
|
529
|
+
xi(n, e, t), await $i(a, e, t, o === !0 ? {} : o, n, r);
|
|
530
530
|
}
|
|
531
531
|
return a;
|
|
532
|
-
},
|
|
532
|
+
}, $i = async (e, t, n, r, i, a) => {
|
|
533
533
|
switch (n.kind) {
|
|
534
534
|
case "one":
|
|
535
|
-
await
|
|
535
|
+
await ea(e, t, n, r, i, a);
|
|
536
536
|
return;
|
|
537
537
|
case "many":
|
|
538
|
-
await
|
|
538
|
+
await ta(e, t, n, r, i, a);
|
|
539
539
|
return;
|
|
540
540
|
case "manyToMany":
|
|
541
|
-
await
|
|
541
|
+
await ra(e, t, n, r, i, a);
|
|
542
542
|
return;
|
|
543
543
|
}
|
|
544
|
-
},
|
|
545
|
-
let o = n.target(), s = n.sourceKey ??
|
|
544
|
+
}, ea = async (e, t, n, r, i, a) => {
|
|
545
|
+
let o = n.target(), s = n.sourceKey ?? ia(i, o.tableName);
|
|
546
546
|
if (s !== void 0) {
|
|
547
|
-
let n = N(e, s), i = n.length === 0 ? [] : await
|
|
547
|
+
let n = N(e, s), i = n.length === 0 ? [] : await aa(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
|
|
548
548
|
for (let n of e) {
|
|
549
549
|
let e = n[s];
|
|
550
550
|
n[t] = e == null ? null : c.get(e) ?? null;
|
|
551
551
|
}
|
|
552
|
-
await
|
|
552
|
+
await oa(i, r.with, o, a);
|
|
553
553
|
return;
|
|
554
554
|
}
|
|
555
|
-
let c = n.foreignKey ??
|
|
555
|
+
let c = n.foreignKey ?? _i(o, i.tableName, t), l = n.sourceKey ?? "id", u = N(e, l), d = u.length === 0 ? [] : await aa(o, c, u, r, a), f = /* @__PURE__ */ new Map();
|
|
556
556
|
for (let e of d) {
|
|
557
557
|
let n = e[c];
|
|
558
|
-
if (f.has(n)) throw new
|
|
558
|
+
if (f.has(n)) throw new Xi(Zi({
|
|
559
559
|
relationName: t,
|
|
560
560
|
sourceTableName: i.tableName,
|
|
561
561
|
targetTableName: o.tableName,
|
|
@@ -568,9 +568,9 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
568
568
|
let e = n[l];
|
|
569
569
|
n[t] = e == null ? null : f.get(e) ?? null;
|
|
570
570
|
}
|
|
571
|
-
await
|
|
572
|
-
},
|
|
573
|
-
let o = n.target(), s = n.foreignKey ??
|
|
571
|
+
await oa(d, r.with, o, a);
|
|
572
|
+
}, ta = async (e, t, n, r, i, a) => {
|
|
573
|
+
let o = n.target(), s = n.foreignKey ?? _i(o, i.tableName, t), c = n.sourceKey ?? "id", l = N(e, c), u = na(r), d = l.length === 0 ? [] : await aa(o, s, l, u, a), f = /* @__PURE__ */ new Map();
|
|
574
574
|
for (let e of d) {
|
|
575
575
|
let t = e[s], n = f.get(t);
|
|
576
576
|
n ? n.push(e) : f.set(t, [e]);
|
|
@@ -586,11 +586,11 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
586
586
|
let e = n[c];
|
|
587
587
|
n[t] = f.get(e) ?? [];
|
|
588
588
|
}
|
|
589
|
-
await
|
|
590
|
-
},
|
|
589
|
+
await oa(d, r.with, o, a);
|
|
590
|
+
}, na = (e) => {
|
|
591
591
|
let { limit: t, offset: n, ...r } = e;
|
|
592
592
|
return r;
|
|
593
|
-
},
|
|
593
|
+
}, ra = async (e, t, n, r, i, a) => {
|
|
594
594
|
let o = n.target(), s = n.through(), c = N(e, "id");
|
|
595
595
|
if (c.length === 0) {
|
|
596
596
|
for (let n of e) n[t] = [];
|
|
@@ -612,9 +612,9 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
612
612
|
for (let n of e) n[t] = [];
|
|
613
613
|
return;
|
|
614
614
|
}
|
|
615
|
-
let f = await
|
|
616
|
-
await
|
|
617
|
-
let m = r.junction === void 0 ? void 0 : r.junction === !0 ?
|
|
615
|
+
let f = await aa(o, "id", N(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
|
|
616
|
+
await oa(f, r.with, o, a);
|
|
617
|
+
let m = r.junction === void 0 ? void 0 : r.junction === !0 ? S(s) : r.junction, h = /* @__PURE__ */ new Map();
|
|
618
618
|
for (let e of d) {
|
|
619
619
|
let t = e[n.sourceKey], r = e[n.targetKey], i = p.get(r);
|
|
620
620
|
if (i === void 0) continue;
|
|
@@ -625,7 +625,7 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
625
625
|
o ? o.push(a) : h.set(t, [a]);
|
|
626
626
|
}
|
|
627
627
|
for (let n of e) n[t] = h.get(n.id) ?? [];
|
|
628
|
-
},
|
|
628
|
+
}, ia = (e, t) => {
|
|
629
629
|
for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
|
|
630
630
|
}, N = (e, t) => {
|
|
631
631
|
let n = /* @__PURE__ */ new Set();
|
|
@@ -634,7 +634,7 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
634
634
|
e != null && n.add(e);
|
|
635
635
|
}
|
|
636
636
|
return [...n];
|
|
637
|
-
},
|
|
637
|
+
}, aa = (e, t, n, r, i) => {
|
|
638
638
|
let a = {
|
|
639
639
|
column: t,
|
|
640
640
|
op: "in",
|
|
@@ -648,12 +648,12 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
648
648
|
skip: r.offset,
|
|
649
649
|
projection: void 0
|
|
650
650
|
});
|
|
651
|
-
},
|
|
652
|
-
t !== void 0 && e.length !== 0 && (await
|
|
651
|
+
}, oa = async (e, t, n, r) => {
|
|
652
|
+
t !== void 0 && e.length !== 0 && (await Qi(e, t, n, r)).forEach((t, n) => {
|
|
653
653
|
let r = e[n];
|
|
654
654
|
for (let [e, n] of Object.entries(t)) e in r || (r[e] = n);
|
|
655
655
|
});
|
|
656
|
-
},
|
|
656
|
+
}, sa = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, ca = (e, t, n) => {
|
|
657
657
|
if (e.eager === void 0) return null;
|
|
658
658
|
let r = ua(e.table, e.eager, e.sourceTable);
|
|
659
659
|
if (r === null) return null;
|
|
@@ -662,14 +662,14 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
662
662
|
fragment: i,
|
|
663
663
|
decode: ba(r, n)
|
|
664
664
|
};
|
|
665
|
-
},
|
|
665
|
+
}, P = (e) => e.relation.kind === "one" && e.fkSide === "target", la = (e) => ({
|
|
666
666
|
...e,
|
|
667
667
|
branch: {
|
|
668
668
|
...e.branch,
|
|
669
669
|
limit: 2
|
|
670
670
|
}
|
|
671
671
|
}), ua = (e, t, n) => {
|
|
672
|
-
let r = n ??
|
|
672
|
+
let r = n ?? tr(e), i = Ei(e);
|
|
673
673
|
if (i === void 0) return null;
|
|
674
674
|
let a = [];
|
|
675
675
|
for (let [e, n] of Object.entries(t)) {
|
|
@@ -690,12 +690,12 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
690
690
|
let r = t.sourceKey ?? ha(n, i.tableName);
|
|
691
691
|
if (r !== void 0) o = r, s = "source";
|
|
692
692
|
else try {
|
|
693
|
-
o = t.foreignKey ??
|
|
693
|
+
o = t.foreignKey ?? _i(i, n.tableName, e), s = "target";
|
|
694
694
|
} catch {
|
|
695
695
|
return null;
|
|
696
696
|
}
|
|
697
697
|
} else try {
|
|
698
|
-
o = t.foreignKey ??
|
|
698
|
+
o = t.foreignKey ?? _i(i, n.tableName, e), s = "target";
|
|
699
699
|
} catch {
|
|
700
700
|
return null;
|
|
701
701
|
}
|
|
@@ -726,12 +726,12 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
726
726
|
};
|
|
727
727
|
}, fa = (e, t) => {
|
|
728
728
|
if (e.kind !== "manyToMany" || t.junction === void 0) return;
|
|
729
|
-
let n = e.through(), r = t.junction === !0 ?
|
|
729
|
+
let n = e.through(), r = S(n), i = t.junction === !0 ? r : t.junction, a = i.filter((e) => r.includes(e));
|
|
730
730
|
return {
|
|
731
731
|
through: n,
|
|
732
|
-
requested:
|
|
733
|
-
present:
|
|
734
|
-
dateColumns:
|
|
732
|
+
requested: i,
|
|
733
|
+
present: a,
|
|
734
|
+
dateColumns: a.filter((e) => {
|
|
735
735
|
let t = n.fields[e];
|
|
736
736
|
return t !== void 0 && (t.type === "timestamp" || t.type === "date");
|
|
737
737
|
})
|
|
@@ -764,7 +764,7 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
764
764
|
let r = [], i = [];
|
|
765
765
|
for (let [t, n] of Object.entries(e.fields)) (n.type === "timestamp" || n.type === "date") && r.push(t), n.type === "vector" && i.push(t);
|
|
766
766
|
let a = t.map((e) => {
|
|
767
|
-
let t = xa(e.target, e.children, n), r = e.relation.kind === "one", i =
|
|
767
|
+
let t = xa(e.target, e.children, n), r = e.relation.kind === "one", i = P(e), a = i ? Zi({
|
|
768
768
|
relationName: e.relationName,
|
|
769
769
|
sourceTableName: e.source.tableName,
|
|
770
770
|
targetTableName: e.target.tableName,
|
|
@@ -795,7 +795,7 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
795
795
|
}
|
|
796
796
|
if (e.fromOverFetch) {
|
|
797
797
|
let r = n;
|
|
798
|
-
if (r.length > 1) throw new
|
|
798
|
+
if (r.length > 1) throw new Xi(e.cardinalityMessage);
|
|
799
799
|
t[e.name] = r.length === 0 ? null : e.decode(r[0]);
|
|
800
800
|
continue;
|
|
801
801
|
}
|
|
@@ -823,67 +823,67 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
823
823
|
};
|
|
824
824
|
}, Ca = (e, t, n) => {
|
|
825
825
|
let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = wa(i, t.children, n);
|
|
826
|
-
return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${
|
|
826
|
+
return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${B(e.predicate, i, r)}` : r``}${T(e).length > 0 ? r` ORDER BY ${r.csv(T(e).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)}`}`;
|
|
827
827
|
}, wa = (e, t, n, r) => {
|
|
828
|
-
let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${
|
|
828
|
+
let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${R(ma, i)}::text)`;
|
|
829
829
|
if (t.length === 0 && r === void 0) return a;
|
|
830
830
|
let o = [];
|
|
831
|
-
r !== void 0 && o.push(i`${
|
|
831
|
+
r !== void 0 && o.push(i`${R("_junction", i)}, ${L(e, ma, i)}`);
|
|
832
832
|
for (let r of t) {
|
|
833
833
|
let t = Ta(r, e, n);
|
|
834
834
|
if (t === null) return null;
|
|
835
|
-
o.push(i`${
|
|
835
|
+
o.push(i`${R(r.relationName, i)}, ${t}`);
|
|
836
836
|
}
|
|
837
837
|
return i`${a} || jsonb_build_object(${i.csv(o)})`;
|
|
838
838
|
}, Ta = (e, t, n) => {
|
|
839
839
|
switch (e.relation.kind) {
|
|
840
|
-
case "one": return
|
|
840
|
+
case "one": return P(e) ? Da(la(e), t, n) : Ea(e, t, n);
|
|
841
841
|
case "many": return Da(e, t, n);
|
|
842
842
|
case "manyToMany": return Oa(e, t, n);
|
|
843
843
|
}
|
|
844
844
|
}, Ea = (e, t, n) => {
|
|
845
845
|
let r = n.sql, i = n.nextAlias(), a = wa(i, e.children, n);
|
|
846
846
|
if (a === null) return null;
|
|
847
|
-
let o = e.fkSide === "source" ? r`${
|
|
847
|
+
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);
|
|
848
848
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}${c} LIMIT 1)`;
|
|
849
849
|
}, Da = (e, t, n) => {
|
|
850
850
|
let r = n.sql, i = n.nextAlias(), a = wa(i, e.children, n);
|
|
851
851
|
if (a === null) return null;
|
|
852
|
-
let o = r`${
|
|
852
|
+
let o = r`${L(void 0, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${E(e.branch.where, r)}`, c = Aa(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)}`;
|
|
853
853
|
return r`COALESCE((SELECT jsonb_agg(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), '[]'::jsonb)`;
|
|
854
854
|
}, Oa = (e, t, n) => {
|
|
855
855
|
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = wa(o, e.children, n, e.junction);
|
|
856
856
|
if (c === null) return null;
|
|
857
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${
|
|
858
|
-
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 ${
|
|
859
|
-
}, ka = (e, t, n) => e.present.length === 0 ? n`jsonb_build_object()` : n`jsonb_build_object(${n.csv(e.present.map((e) => n`${
|
|
857
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${E(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`, ${ka(e.junction, s, r)} AS ${r(ma)}`;
|
|
858
|
+
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)`;
|
|
859
|
+
}, ka = (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`))}`, Aa = (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`))}`, ja = (e, t, n) => {
|
|
860
860
|
let r = n.sql, i = n.nextAlias(), a = Ma(i, t.table, t.children, n);
|
|
861
861
|
if (a === null) return null;
|
|
862
|
-
let o = e.predicate ? r` WHERE ${
|
|
862
|
+
let o = e.predicate ? r` WHERE ${B(e.predicate, i, r)}` : r``, s = T(e).length > 0 ? r` ORDER BY ${r.csv(T(e).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)}`;
|
|
863
863
|
return r`SELECT ${a} AS "__row" FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
|
|
864
864
|
}, Ma = (e, t, n, r, i) => {
|
|
865
865
|
let a = r.sql, o = [];
|
|
866
|
-
for (let n of
|
|
867
|
-
let r =
|
|
868
|
-
o.push(a`${
|
|
866
|
+
for (let n of S(t)) {
|
|
867
|
+
let r = L(e, n, a), i = t.fields[n]?.type === "bigint" ? a`CAST(${r} AS TEXT)` : r;
|
|
868
|
+
o.push(a`${R(n, a)}, ${i}`);
|
|
869
869
|
}
|
|
870
870
|
if (i !== void 0) {
|
|
871
871
|
let e = Na(i.projection, i.source, a);
|
|
872
|
-
o.push(a`${
|
|
872
|
+
o.push(a`${R("_junction", a)}, json_object(${e})`);
|
|
873
873
|
}
|
|
874
874
|
for (let t of n) {
|
|
875
875
|
let n = La(t, e, r);
|
|
876
876
|
if (n === null) return null;
|
|
877
|
-
o.push(a`${
|
|
877
|
+
o.push(a`${R(t.relationName, a)}, ${n}`);
|
|
878
878
|
}
|
|
879
879
|
return a`json_object(${a.csv(o)})`;
|
|
880
880
|
}, Na = (e, t, n) => e.present.length === 0 ? n`` : n.csv(e.present.map((r) => {
|
|
881
|
-
let i =
|
|
881
|
+
let i = L(t.alias, t.physical(r), n), a = e.through.fields[r]?.type === "bigint" ? n.onDialectOrElse({
|
|
882
882
|
sqlite: () => n`CAST(${i} AS TEXT)`,
|
|
883
883
|
orElse: () => i
|
|
884
884
|
}) : i;
|
|
885
|
-
return n`${
|
|
886
|
-
})), Pa = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${
|
|
885
|
+
return n`${R(r, n)}, ${a}`;
|
|
886
|
+
})), Pa = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${L(t, e, n)} AS ${n(pa(e))}`))}`, Fa = (e) => ({
|
|
887
887
|
alias: e,
|
|
888
888
|
physical: pa
|
|
889
889
|
}), Ia = (e) => ({
|
|
@@ -891,19 +891,19 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
891
891
|
physical: (e) => e
|
|
892
892
|
}), La = (e, t, n) => {
|
|
893
893
|
switch (e.relation.kind) {
|
|
894
|
-
case "one": return
|
|
894
|
+
case "one": return P(e) ? za(la(e), t, n) : Ra(e, t, n);
|
|
895
895
|
case "many": return za(e, t, n);
|
|
896
896
|
case "manyToMany": return Ba(e, t, n);
|
|
897
897
|
}
|
|
898
898
|
}, Ra = (e, t, n) => {
|
|
899
899
|
let r = n.sql, i = n.nextAlias(), a = Ma(i, e.target, e.children, n);
|
|
900
900
|
if (a === null) return null;
|
|
901
|
-
let o = e.fkSide === "source" ? r`${
|
|
901
|
+
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)}`;
|
|
902
902
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
|
|
903
903
|
}, za = (e, t, n) => {
|
|
904
904
|
let r = n.sql, i = n.nextAlias(), a = Ma(i, e.target, e.children, n);
|
|
905
905
|
if (a === null) return null;
|
|
906
|
-
let o = r`${
|
|
906
|
+
let o = r`${L(void 0, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${E(H(e.branch.where), r)}`, c = Aa(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)}`;
|
|
907
907
|
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('[]'))`;
|
|
908
908
|
}, Ba = (e, t, n) => {
|
|
909
909
|
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Ma(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
|
|
@@ -911,30 +911,30 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
911
911
|
source: Fa(o)
|
|
912
912
|
});
|
|
913
913
|
if (c === null) return null;
|
|
914
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${
|
|
915
|
-
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 ${
|
|
914
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${E(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`` : Pa(e.junction, s, r);
|
|
915
|
+
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('[]'))`;
|
|
916
916
|
}, Va = (e, t, n) => {
|
|
917
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
917
|
+
let r = n.sql, i = n.nextAlias(), a = I(i, t.table, t.children, n);
|
|
918
918
|
if (a === null) return null;
|
|
919
|
-
let o = e.predicate ? r` WHERE ${
|
|
919
|
+
let o = e.predicate ? r` WHERE ${B(e.predicate, i, r)}` : r``, s = T(e).length > 0 ? r` ORDER BY ${r.csv(T(e).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)}`;
|
|
920
920
|
return r`SELECT ${a} AS \`__row\` FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
|
|
921
|
-
},
|
|
921
|
+
}, I = (e, t, n, r, i) => {
|
|
922
922
|
let a = r.sql, o = [];
|
|
923
|
-
for (let n of
|
|
923
|
+
for (let n of S(t)) o.push(a`${R(n, a)}, ${L(e, n, a)}`);
|
|
924
924
|
if (i !== void 0) {
|
|
925
925
|
let e = Na(i.projection, i.source, a);
|
|
926
|
-
o.push(a`${
|
|
926
|
+
o.push(a`${R("_junction", a)}, JSON_OBJECT(${e})`);
|
|
927
927
|
}
|
|
928
928
|
for (let t of n) {
|
|
929
929
|
let n = Ha(t, e, r);
|
|
930
930
|
if (n === null) return null;
|
|
931
|
-
o.push(a`${
|
|
931
|
+
o.push(a`${R(t.relationName, a)}, ${n}`);
|
|
932
932
|
}
|
|
933
933
|
return a`JSON_OBJECT(${a.csv(o)})`;
|
|
934
934
|
}, Ha = (e, t, n) => {
|
|
935
935
|
switch (e.relation.kind) {
|
|
936
936
|
case "one":
|
|
937
|
-
if (
|
|
937
|
+
if (P(e)) {
|
|
938
938
|
let r = la(e);
|
|
939
939
|
return n.dialect === "mariadb" ? Ka(r, t, n) : Wa(r, t, n);
|
|
940
940
|
}
|
|
@@ -943,57 +943,57 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
943
943
|
case "manyToMany": return n.dialect === "mariadb" ? qa(e, t, n) : Ga(e, t, n);
|
|
944
944
|
}
|
|
945
945
|
}, Ua = (e, t, n) => {
|
|
946
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
946
|
+
let r = n.sql, i = n.nextAlias(), a = I(i, e.target, e.children, n);
|
|
947
947
|
if (a === null) return null;
|
|
948
|
-
let o = e.fkSide === "source" ? r`${
|
|
948
|
+
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)}`;
|
|
949
949
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
|
|
950
950
|
}, Wa = (e, t, n) => {
|
|
951
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
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 = r`${
|
|
953
|
+
let o = r`${L(void 0, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${E(H(e.branch.where), r)}`, c = Aa(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)}`;
|
|
954
954
|
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())`;
|
|
955
955
|
}, Ga = (e, t, n) => {
|
|
956
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
956
|
+
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 : {
|
|
957
957
|
projection: e.junction,
|
|
958
958
|
source: Fa(o)
|
|
959
959
|
});
|
|
960
960
|
if (c === null) return null;
|
|
961
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${
|
|
962
|
-
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 ${
|
|
961
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${E(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`` : Pa(e.junction, s, r);
|
|
962
|
+
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())`;
|
|
963
963
|
}, Ka = (e, t, n) => {
|
|
964
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
964
|
+
let r = n.sql, i = n.nextAlias(), a = I(i, e.target, e.children, n);
|
|
965
965
|
if (a === null) return null;
|
|
966
|
-
let o = r`${
|
|
967
|
-
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`${
|
|
968
|
-
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 ${
|
|
969
|
-
return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${
|
|
966
|
+
let o = r`${L(i, e.foreignKey, r)} = ${L(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${E(H(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
|
|
967
|
+
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())`;
|
|
968
|
+
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)}`;
|
|
969
|
+
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())`;
|
|
970
970
|
}, qa = (e, t, n) => {
|
|
971
971
|
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = (t) => e.junction === void 0 ? void 0 : {
|
|
972
972
|
projection: e.junction,
|
|
973
973
|
source: t
|
|
974
|
-
}, l = r`${
|
|
974
|
+
}, 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 ${E(H(e.branch.where), r)}`, f = V(e, s, r, !0), p = e.branch.orderBy ?? [];
|
|
975
975
|
if (e.branch.limit === void 0 && e.branch.offset === void 0) {
|
|
976
|
-
let t =
|
|
977
|
-
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`${
|
|
976
|
+
let t = I(o, e.target, e.children, n, c(Ia(s)));
|
|
977
|
+
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())`;
|
|
978
978
|
}
|
|
979
|
-
let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${
|
|
979
|
+
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)}`, v = e.branch.onJunction === void 0 ? r`` : r` WHERE ${B(H(e.branch.onJunction), s, r)}`, ee = I(o, e.target, e.children, n, c(Fa(o)));
|
|
980
980
|
if (ee === null) return null;
|
|
981
981
|
let te = e.junction === void 0 ? r`` : Pa(e.junction, s, r);
|
|
982
|
-
return r`COALESCE((SELECT JSON_ARRAYAGG(${ee} ORDER BY ${
|
|
982
|
+
return r`COALESCE((SELECT JSON_ARRAYAGG(${ee} 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}${v}) AS ${r(o)} WHERE ${L(o, `__src_${i.sourceKey}`, r)} = ${L(t, "id", r)}${d}${_}), JSON_ARRAY())`;
|
|
983
983
|
}, Ja = (e, t, n) => {
|
|
984
984
|
let r = n.sql, i = n.nextAlias(), a = Ya(i, t.table, t.children, n);
|
|
985
985
|
if (a === null) return null;
|
|
986
|
-
let o = e.predicate ? r` WHERE ${
|
|
986
|
+
let o = e.predicate ? r` WHERE ${B(e.predicate, i, r)}` : r``, s = T(e).length > 0 ? r` ORDER BY ${r.csv(T(e).map((e) => e.direction === "desc" ? r`${L(i, e.column, r)} DESC` : r`${L(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
|
|
987
987
|
if (e.skip !== void 0) {
|
|
988
|
-
let t =
|
|
989
|
-
l = e.take === void 0 ? r`${t} OFFSET ${
|
|
990
|
-
} else e.take !== void 0 && (c = r`TOP ${
|
|
988
|
+
let t = T(e).length > 0 ? s : r` ORDER BY (SELECT NULL)`;
|
|
989
|
+
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`;
|
|
990
|
+
} else e.take !== void 0 && (c = r`TOP ${z(e.take, r)} `);
|
|
991
991
|
let u = e.skip === void 0 ? s : r``;
|
|
992
992
|
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}`;
|
|
993
993
|
}, Ya = (e, t, n, r, i) => {
|
|
994
994
|
let a = r.sql, o = [];
|
|
995
|
-
for (let n of
|
|
996
|
-
if (i !== void 0) for (let e of i.projection.present) o.push(a`${
|
|
995
|
+
for (let n of S(t)) o.push(a`${L(e, n, a)} AS ${a(n)}`);
|
|
996
|
+
if (i !== void 0) for (let e of i.projection.present) o.push(a`${L(i.source.alias, i.source.physical(e), a)} AS ${Xa(`_junction.${e}`, a)}`);
|
|
997
997
|
for (let t of n) {
|
|
998
998
|
let n = Za(t, e, r);
|
|
999
999
|
if (n === null) return null;
|
|
@@ -1002,18 +1002,18 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1002
1002
|
return a.csv(o);
|
|
1003
1003
|
}, Xa = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), Za = (e, t, n) => {
|
|
1004
1004
|
switch (e.relation.kind) {
|
|
1005
|
-
case "one": return
|
|
1005
|
+
case "one": return P(e) ? eo(la(e), t, n) : Qa(e, t, n);
|
|
1006
1006
|
case "many": return eo(e, t, n);
|
|
1007
1007
|
case "manyToMany": return to(e, t, n);
|
|
1008
1008
|
}
|
|
1009
1009
|
}, Qa = (e, t, n) => {
|
|
1010
1010
|
let r = n.sql, i = n.nextAlias(), a = Ya(i, e.target, e.children, n);
|
|
1011
1011
|
if (a === null) return null;
|
|
1012
|
-
let o = e.fkSide === "source" ? r`${
|
|
1012
|
+
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)}`;
|
|
1013
1013
|
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)}`;
|
|
1014
1014
|
}, $a = (e, t, n) => {
|
|
1015
1015
|
if (e.offset !== void 0) {
|
|
1016
|
-
let r = e.orderBy && e.orderBy.length > 0 ? t : n` ORDER BY (SELECT NULL)`, i = e.limit === void 0 ? n`${r} OFFSET ${
|
|
1016
|
+
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`;
|
|
1017
1017
|
return {
|
|
1018
1018
|
top: n``,
|
|
1019
1019
|
pagination: i,
|
|
@@ -1021,36 +1021,36 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1021
1021
|
};
|
|
1022
1022
|
}
|
|
1023
1023
|
return {
|
|
1024
|
-
top: e.limit === void 0 ? n`` : n`TOP ${
|
|
1024
|
+
top: e.limit === void 0 ? n`` : n`TOP ${z(e.limit, n)} `,
|
|
1025
1025
|
pagination: n``,
|
|
1026
1026
|
finalOrder: t
|
|
1027
1027
|
};
|
|
1028
1028
|
}, eo = (e, t, n) => {
|
|
1029
1029
|
let r = n.sql, i = n.nextAlias(), a = Ya(i, e.target, e.children, n);
|
|
1030
1030
|
if (a === null) return null;
|
|
1031
|
-
let o = e.branch.where === void 0 ? r`` : r` AND ${
|
|
1032
|
-
return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${
|
|
1031
|
+
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 } = $a(e.branch, s, r);
|
|
1032
|
+
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)}`;
|
|
1033
1033
|
}, to = (e, t, n) => {
|
|
1034
1034
|
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Ya(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
|
|
1035
1035
|
projection: e.junction,
|
|
1036
1036
|
source: Ia(s)
|
|
1037
1037
|
});
|
|
1038
1038
|
if (c === null) return null;
|
|
1039
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${
|
|
1040
|
-
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 ${
|
|
1041
|
-
},
|
|
1042
|
-
if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw
|
|
1039
|
+
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 } = $a(e.branch, d, r);
|
|
1040
|
+
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)}`;
|
|
1041
|
+
}, 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) => {
|
|
1042
|
+
if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw w(`literalInt: expected non-negative integer, got ${e}`);
|
|
1043
1043
|
return t.unsafe(String(e));
|
|
1044
|
-
},
|
|
1045
|
-
let r =
|
|
1046
|
-
return
|
|
1047
|
-
},
|
|
1044
|
+
}, B = (e, t, n) => {
|
|
1045
|
+
let r = no(e, t);
|
|
1046
|
+
return E(r, n);
|
|
1047
|
+
}, V = (e, t, n, r = !1) => {
|
|
1048
1048
|
let i = e.branch.onJunction;
|
|
1049
|
-
return i === void 0 ? n`` : n` AND ${
|
|
1050
|
-
},
|
|
1051
|
-
if ("not" in e) return { not:
|
|
1052
|
-
if ("and" in e) return { and: e.and.map((e) =>
|
|
1053
|
-
if ("or" in e) return { or: e.or.map((e) =>
|
|
1049
|
+
return i === void 0 ? n`` : n` AND ${B(r ? H(i) : i, t, n)}`;
|
|
1050
|
+
}, no = (e, t) => {
|
|
1051
|
+
if ("not" in e) return { not: no(e.not, t) };
|
|
1052
|
+
if ("and" in e) return { and: e.and.map((e) => no(e, t)) };
|
|
1053
|
+
if ("or" in e) return { or: e.or.map((e) => no(e, t)) };
|
|
1054
1054
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
1055
1055
|
let n = e;
|
|
1056
1056
|
return {
|
|
@@ -1063,57 +1063,57 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1063
1063
|
return {
|
|
1064
1064
|
...n,
|
|
1065
1065
|
column: `${t}.${n.column}`,
|
|
1066
|
-
...
|
|
1066
|
+
...mr(n.value) ? { value: Ke(`${t}.${n.value.column}`) } : {}
|
|
1067
1067
|
};
|
|
1068
|
-
},
|
|
1069
|
-
if ("not" in e) return { not:
|
|
1070
|
-
if ("and" in e) return { and: e.and.map((e) =>
|
|
1071
|
-
if ("or" in e) return { or: e.or.map((e) =>
|
|
1068
|
+
}, H = (e) => {
|
|
1069
|
+
if ("not" in e) return { not: H(e.not) };
|
|
1070
|
+
if ("and" in e) return { and: e.and.map((e) => H(e)) };
|
|
1071
|
+
if ("or" in e) return { or: e.or.map((e) => H(e)) };
|
|
1072
1072
|
if (e.op === "subquery-in" || e.op === "subquery-not-in" || e.op === "exists" || e.op === "not-exists") return e;
|
|
1073
1073
|
let t = e;
|
|
1074
1074
|
return {
|
|
1075
1075
|
...t,
|
|
1076
|
-
value:
|
|
1076
|
+
value: Ee(t.value)
|
|
1077
1077
|
};
|
|
1078
|
-
},
|
|
1079
|
-
e.actors !== void 0 && (
|
|
1080
|
-
},
|
|
1078
|
+
}, ro = Symbol.for("@voltro/database/coreTablesRegistry"), io = globalThis, ao = io[ro] ?? (io[ro] = {}), oo = (e) => {
|
|
1079
|
+
e.actors !== void 0 && (ao.actors = e.actors), e.tenants !== void 0 && (ao.tenants = e.tenants);
|
|
1080
|
+
}, so = (e, t) => () => {
|
|
1081
1081
|
let n = e();
|
|
1082
1082
|
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`);
|
|
1083
1083
|
return n();
|
|
1084
|
-
},
|
|
1085
|
-
id:
|
|
1086
|
-
kind:
|
|
1084
|
+
}, co = () => so(() => ao.actors, "actors"), lo = () => so(() => ao.tenants, "tenants"), uo = b("actors", {
|
|
1085
|
+
id: x(),
|
|
1086
|
+
kind: C().oneOf([
|
|
1087
1087
|
"user",
|
|
1088
1088
|
"serviceAccount",
|
|
1089
1089
|
"apiKey",
|
|
1090
1090
|
"system"
|
|
1091
1091
|
]).safe(),
|
|
1092
|
-
displayName:
|
|
1093
|
-
createdAt:
|
|
1094
|
-
}),
|
|
1092
|
+
displayName: C().nullable().sensitive("fullName"),
|
|
1093
|
+
createdAt: y().default("now")
|
|
1094
|
+
}), fo = (e, t) => ({
|
|
1095
1095
|
...t,
|
|
1096
1096
|
...e,
|
|
1097
1097
|
origin: e.origin ?? "injected"
|
|
1098
|
-
}),
|
|
1098
|
+
}), po = (e, t, n = {}) => ({
|
|
1099
1099
|
table: e,
|
|
1100
1100
|
op: "insert",
|
|
1101
1101
|
old: null,
|
|
1102
1102
|
new: t,
|
|
1103
1103
|
...n
|
|
1104
|
-
}),
|
|
1104
|
+
}), mo = (e, t, n, r = {}) => ({
|
|
1105
1105
|
table: e,
|
|
1106
1106
|
op: "update",
|
|
1107
1107
|
old: t,
|
|
1108
1108
|
new: n,
|
|
1109
1109
|
...r
|
|
1110
|
-
}),
|
|
1110
|
+
}), ho = (e, t, n = {}) => ({
|
|
1111
1111
|
table: e,
|
|
1112
1112
|
op: "delete",
|
|
1113
1113
|
old: t,
|
|
1114
1114
|
new: null,
|
|
1115
1115
|
...n
|
|
1116
|
-
}),
|
|
1116
|
+
}), go = (e, t, n = {}) => {
|
|
1117
1117
|
let { at: r = "2026-01-01T00:00:00.000Z", column: i = "deletedAt", ...a } = n;
|
|
1118
1118
|
return {
|
|
1119
1119
|
table: e,
|
|
@@ -1128,13 +1128,13 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1128
1128
|
},
|
|
1129
1129
|
...a
|
|
1130
1130
|
};
|
|
1131
|
-
},
|
|
1131
|
+
}, _o = (e) => e == null ? "null" : e instanceof Date ? JSON.stringify(e.toISOString()) : typeof e == "bigint" ? JSON.stringify(e.toString()) : Array.isArray(e) ? `[${e.map(_o).join(",")}]` : typeof e == "object" ? `{${Object.entries(e).filter(([, e]) => e !== void 0).sort(([e], [t]) => e < t ? -1 : +(e > t)).map(([e, t]) => `${JSON.stringify(e)}:${_o(t)}`).join(",")}}` : JSON.stringify(e) ?? "null", vo = (e) => kr("sha256").update([
|
|
1132
1132
|
e.pipe,
|
|
1133
1133
|
e.op,
|
|
1134
1134
|
e.key,
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
].join("\0")).digest("hex").slice(0, 32),
|
|
1135
|
+
_o(e.next),
|
|
1136
|
+
_o(e.prev)
|
|
1137
|
+
].join("\0")).digest("hex").slice(0, 32), yo = (e, t) => `${e}:${t}`, bo = (e) => {
|
|
1138
1138
|
let t = e.lastIndexOf(":");
|
|
1139
1139
|
if (t <= 0) return null;
|
|
1140
1140
|
let n = Number(e.slice(t + 1));
|
|
@@ -1142,7 +1142,7 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1142
1142
|
digest: e.slice(0, t),
|
|
1143
1143
|
occurrence: n
|
|
1144
1144
|
};
|
|
1145
|
-
},
|
|
1145
|
+
}, xo = class {
|
|
1146
1146
|
#e = /* @__PURE__ */ new Map();
|
|
1147
1147
|
#t;
|
|
1148
1148
|
#n;
|
|
@@ -1164,7 +1164,7 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1164
1164
|
}
|
|
1165
1165
|
seedFromChangeKeys(e, t) {
|
|
1166
1166
|
for (let n of e) {
|
|
1167
|
-
let e =
|
|
1167
|
+
let e = bo(n);
|
|
1168
1168
|
if (e === null) continue;
|
|
1169
1169
|
let r = this.#e.get(e.digest), i = Math.max(r?.count ?? 0, e.occurrence + 1);
|
|
1170
1170
|
this.#e.set(e.digest, {
|
|
@@ -1185,70 +1185,70 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1185
1185
|
this.#e.delete(e.value);
|
|
1186
1186
|
}
|
|
1187
1187
|
}
|
|
1188
|
-
},
|
|
1189
|
-
let t = Number(e[
|
|
1188
|
+
}, So = "VOLTRO_CHANGE_CLAIMS_TTL_HOURS", Co = 1, wo = (e = process.env) => {
|
|
1189
|
+
let t = Number(e[So]);
|
|
1190
1190
|
return (Number.isFinite(t) && t > 0 ? t : 1) * 2 * 36e5;
|
|
1191
|
-
},
|
|
1192
|
-
let t = e ??
|
|
1191
|
+
}, U = new Ar(), To = (e, t) => U.run(e, t), Eo = () => U.getStore(), Do = (e) => {
|
|
1192
|
+
let t = e ?? U.getStore();
|
|
1193
1193
|
return t === void 0 ? {} : {
|
|
1194
1194
|
...t.traceId === void 0 ? {} : { traceId: t.traceId },
|
|
1195
1195
|
...t.subjectId === void 0 ? {} : { subjectId: t.subjectId },
|
|
1196
1196
|
...t.procedure === void 0 ? {} : { procedure: t.procedure },
|
|
1197
1197
|
...t.via === void 0 ? {} : { via: t.via }
|
|
1198
1198
|
};
|
|
1199
|
-
},
|
|
1200
|
-
let t =
|
|
1201
|
-
return t === void 0 ? e(void 0) :
|
|
1202
|
-
},
|
|
1203
|
-
for (let [t, n] of
|
|
1204
|
-
let r = n.filter((t) => e - t.at <
|
|
1205
|
-
|
|
1206
|
-
}
|
|
1207
|
-
},
|
|
1199
|
+
}, Oo = (e) => {
|
|
1200
|
+
let t = U.getStore();
|
|
1201
|
+
return t === void 0 ? e(void 0) : U.run(t, () => e(t));
|
|
1202
|
+
}, ko = 3e4, Ao = 1e4, W = /* @__PURE__ */ new Map(), G = 0, jo = (e, t, n) => `${e}\u0000${t}\u0000${String(n)}`, Mo = (e) => {
|
|
1203
|
+
for (let [t, n] of W) {
|
|
1204
|
+
let r = n.filter((t) => e - t.at < ko);
|
|
1205
|
+
G -= n.length - r.length, r.length === 0 ? W.delete(t) : r.length !== n.length && W.set(t, r);
|
|
1206
|
+
}
|
|
1207
|
+
}, No = (e, t) => {
|
|
1208
1208
|
if (t.traceId === void 0 && t.subjectId === void 0 && t.procedure === void 0) return;
|
|
1209
1209
|
let n = Date.now();
|
|
1210
|
-
if (
|
|
1211
|
-
let r =
|
|
1212
|
-
r === void 0 ?
|
|
1210
|
+
if (G >= Ao && Mo(n), G >= Ao) return;
|
|
1211
|
+
let r = W.get(e);
|
|
1212
|
+
r === void 0 ? W.set(e, [{
|
|
1213
1213
|
attribution: t,
|
|
1214
1214
|
at: n
|
|
1215
1215
|
}]) : r.push({
|
|
1216
1216
|
attribution: t,
|
|
1217
1217
|
at: n
|
|
1218
|
-
}),
|
|
1219
|
-
},
|
|
1220
|
-
let t =
|
|
1218
|
+
}), G += 1;
|
|
1219
|
+
}, Po = (e) => {
|
|
1220
|
+
let t = W.get(e);
|
|
1221
1221
|
if (t === void 0 || t.length === 0) return;
|
|
1222
1222
|
let n = t.shift();
|
|
1223
|
-
if (--
|
|
1224
|
-
},
|
|
1225
|
-
let t =
|
|
1223
|
+
if (--G, t.length === 0 && W.delete(e), !(Date.now() - n.at >= ko)) return n.attribution;
|
|
1224
|
+
}, Fo = (e) => (W.get(e)?.length ?? 0) > 0, K = /* @__PURE__ */ new Map(), q = /* @__PURE__ */ new Map(), Io = /* @__PURE__ */ new Map(), Lo = 250, Ro = (e) => {
|
|
1225
|
+
let t = q.get(e);
|
|
1226
1226
|
if (t === void 0) return;
|
|
1227
|
-
|
|
1228
|
-
let n =
|
|
1229
|
-
n !== void 0 && (clearTimeout(n),
|
|
1227
|
+
q.delete(e);
|
|
1228
|
+
let n = Io.get(e);
|
|
1229
|
+
n !== void 0 && (clearTimeout(n), Io.delete(e));
|
|
1230
1230
|
for (let e of t) e();
|
|
1231
|
+
}, zo = (e) => {
|
|
1232
|
+
K.set(e, (K.get(e) ?? 0) + 1);
|
|
1231
1233
|
}, Bo = (e) => {
|
|
1232
|
-
|
|
1233
|
-
}, Vo = (e) => {
|
|
1234
|
-
let t = (U.get(e) ?? 0) - 1;
|
|
1234
|
+
let t = (K.get(e) ?? 0) - 1;
|
|
1235
1235
|
if (t > 0) {
|
|
1236
|
-
|
|
1236
|
+
K.set(e, t);
|
|
1237
1237
|
return;
|
|
1238
1238
|
}
|
|
1239
|
-
|
|
1240
|
-
},
|
|
1241
|
-
let i = n == null ? void 0 :
|
|
1239
|
+
K.delete(e), Ro(e);
|
|
1240
|
+
}, Vo = (e, t, n, r) => {
|
|
1241
|
+
let i = n == null ? void 0 : jo(e, t, n), a = () => r(i === void 0 ? void 0 : Po(i));
|
|
1242
1242
|
if (i === void 0) {
|
|
1243
1243
|
a();
|
|
1244
1244
|
return;
|
|
1245
1245
|
}
|
|
1246
|
-
if (
|
|
1246
|
+
if (Fo(i)) {
|
|
1247
1247
|
a();
|
|
1248
1248
|
return;
|
|
1249
1249
|
}
|
|
1250
|
-
let o =
|
|
1251
|
-
if (o === void 0 && (
|
|
1250
|
+
let o = q.get(e);
|
|
1251
|
+
if (o === void 0 && (K.get(e) ?? 0) === 0) {
|
|
1252
1252
|
a();
|
|
1253
1253
|
return;
|
|
1254
1254
|
}
|
|
@@ -1256,91 +1256,91 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1256
1256
|
o.push(a);
|
|
1257
1257
|
return;
|
|
1258
1258
|
}
|
|
1259
|
-
|
|
1260
|
-
let s = setTimeout(() =>
|
|
1261
|
-
typeof s == "object" && typeof s.unref == "function" && s.unref(),
|
|
1262
|
-
},
|
|
1263
|
-
|
|
1264
|
-
for (let e of
|
|
1265
|
-
|
|
1266
|
-
},
|
|
1267
|
-
|
|
1259
|
+
q.set(e, [a]);
|
|
1260
|
+
let s = setTimeout(() => Ro(e), Lo);
|
|
1261
|
+
typeof s == "object" && typeof s.unref == "function" && s.unref(), Io.set(e, s);
|
|
1262
|
+
}, Ho = () => {
|
|
1263
|
+
W.clear(), G = 0, K.clear();
|
|
1264
|
+
for (let e of Io.values()) clearTimeout(e);
|
|
1265
|
+
Io.clear(), q.clear();
|
|
1266
|
+
}, Uo = () => G, Wo = 64, Go = "\0", Ko = 32, qo = (e, ...t) => `${e}_${kr("sha256").update(t.map(String).join(Go)).digest("hex").slice(0, Ko)}`, Jo = (e) => e.length + 1 + Ko, J = /* @__PURE__ */ new Map(), Yo = (e, t) => {
|
|
1267
|
+
J.set(e, {
|
|
1268
1268
|
recorder: t.recorder,
|
|
1269
1269
|
tables: new Set(t.tables),
|
|
1270
1270
|
ownTables: new Set(t.ownTables)
|
|
1271
1271
|
});
|
|
1272
|
-
},
|
|
1273
|
-
|
|
1274
|
-
},
|
|
1275
|
-
let t =
|
|
1276
|
-
if (t !== void 0) return t.n += 1,
|
|
1272
|
+
}, Xo = (e) => {
|
|
1273
|
+
J.delete(e);
|
|
1274
|
+
}, Zo = () => J.clear(), Qo = new Ar(), $o = (e) => Qo.run({ n: 1 }, e), es = (e) => D.suspend(() => {
|
|
1275
|
+
let t = Qo.getStore();
|
|
1276
|
+
if (t !== void 0) return t.n += 1, D.ensuring(e, D.sync(() => {
|
|
1277
1277
|
--t.n;
|
|
1278
1278
|
}));
|
|
1279
1279
|
let n = { n: 1 };
|
|
1280
|
-
return
|
|
1280
|
+
return Qo.enterWith(n), D.ensuring(e, D.sync(() => {
|
|
1281
1281
|
--n.n;
|
|
1282
1282
|
}));
|
|
1283
|
-
}), ts = () => (
|
|
1284
|
-
if (
|
|
1285
|
-
for (let t of
|
|
1283
|
+
}), ts = () => (Qo.getStore()?.n ?? 0) > 0, ns = (e) => {
|
|
1284
|
+
if (J.size === 0 || (Qo.getStore()?.n ?? 0) > 0) return !1;
|
|
1285
|
+
for (let t of J.values()) if (!t.ownTables.has(e) && t.tables.has(e)) return !0;
|
|
1286
1286
|
return !1;
|
|
1287
1287
|
}, rs = async (e, t) => {
|
|
1288
|
-
if (
|
|
1289
|
-
for (let [n, r] of
|
|
1288
|
+
if (J.size !== 0) {
|
|
1289
|
+
for (let [n, r] of J.entries()) if (!r.ownTables.has(t.table) && r.tables.has(t.table)) try {
|
|
1290
1290
|
await r.recorder(e, t);
|
|
1291
1291
|
} catch (e) {
|
|
1292
|
-
let r =
|
|
1292
|
+
let r = Bt(e);
|
|
1293
1293
|
throw r === void 0 ? e : Error(`write recorder '${n}' failed while recording a ${t.op} on '${t.table}': ${r}`, { cause: e });
|
|
1294
1294
|
}
|
|
1295
1295
|
}
|
|
1296
|
-
}, is =
|
|
1296
|
+
}, is = Er.exponential({
|
|
1297
1297
|
start: 5e-4,
|
|
1298
1298
|
factor: 2,
|
|
1299
1299
|
count: 16
|
|
1300
|
-
}), as =
|
|
1301
|
-
let n = `${e}\u0000${t}`, r =
|
|
1300
|
+
}), as = O.counter("voltro_db_queries_total", { description: "Database operations executed, by dialect and operation kind." }), os = O.histogram("voltro_db_query_duration_seconds", is, "Database operation duration in seconds, by dialect and operation kind."), ss = O.counter("voltro_db_errors_total", { description: "Database operations that threw, by dialect and operation kind." }), cs = O.gauge("voltro_db_operations_in_flight", { description: "Database operations currently executing, by dialect. An upper bound on connections the framework holds; NOT the driver pool's waiting count." }), ls = O.counter("voltro_db_eager_fallback_total", { description: "Eager-load queries that degraded from the single-roundtrip JSON-agg path to the multi-query walker, by dialect and reason." }), us = [], ds = /* @__PURE__ */ new Map(), fs = /* @__PURE__ */ new Map(), ps = /* @__PURE__ */ new Map(), ms = (e, t) => {
|
|
1301
|
+
let n = `${e}\u0000${t}`, r = ds.get(n);
|
|
1302
1302
|
if (r !== void 0) return r;
|
|
1303
|
-
let i = (n) =>
|
|
1303
|
+
let i = (n) => O.tagged(O.tagged(n, "dialect", e), "op", t), a = {
|
|
1304
1304
|
count: i(as),
|
|
1305
1305
|
duration: i(os),
|
|
1306
1306
|
errors: i(ss)
|
|
1307
1307
|
};
|
|
1308
|
-
return
|
|
1309
|
-
},
|
|
1310
|
-
|
|
1311
|
-
},
|
|
1312
|
-
let n = Math.max(0, (
|
|
1313
|
-
n === 0 ?
|
|
1314
|
-
let r =
|
|
1315
|
-
r === void 0 && (r =
|
|
1316
|
-
},
|
|
1317
|
-
let t =
|
|
1318
|
-
t.count.unsafeUpdate(1,
|
|
1319
|
-
},
|
|
1308
|
+
return ds.set(n, a), a;
|
|
1309
|
+
}, hs = () => {
|
|
1310
|
+
ds.clear(), fs.clear(), ps.clear();
|
|
1311
|
+
}, gs = () => ds.size + fs.size + ps.size, _s = /* @__PURE__ */ new Map(), vs = (e, t) => {
|
|
1312
|
+
let n = Math.max(0, (_s.get(e) ?? 0) + t);
|
|
1313
|
+
n === 0 ? _s.delete(e) : _s.set(e, n);
|
|
1314
|
+
let r = fs.get(e);
|
|
1315
|
+
r === void 0 && (r = O.tagged(cs, "dialect", e), fs.set(e, r)), r.unsafeUpdate(n, us);
|
|
1316
|
+
}, ys = (e) => _s.get(e) ?? 0, bs = (e) => {
|
|
1317
|
+
let t = ms(String(e.dialect), e.op);
|
|
1318
|
+
t.count.unsafeUpdate(1, us), t.duration.unsafeUpdate(e.durationMs / 1e3, us), e.status === "error" && t.errors.unsafeUpdate(1, us);
|
|
1319
|
+
}, xs = async (e, t, n) => {
|
|
1320
1320
|
let r = performance.now(), i = String(e);
|
|
1321
|
-
|
|
1321
|
+
vs(i, 1);
|
|
1322
1322
|
let a = "ok";
|
|
1323
1323
|
try {
|
|
1324
1324
|
return await n();
|
|
1325
1325
|
} catch (e) {
|
|
1326
1326
|
throw a = "error", e;
|
|
1327
1327
|
} finally {
|
|
1328
|
-
|
|
1328
|
+
vs(i, -1), bs({
|
|
1329
1329
|
dialect: e,
|
|
1330
1330
|
op: t,
|
|
1331
1331
|
durationMs: performance.now() - r,
|
|
1332
1332
|
status: a
|
|
1333
1333
|
});
|
|
1334
1334
|
}
|
|
1335
|
-
},
|
|
1335
|
+
}, Ss = 3e5, Cs = (e) => {
|
|
1336
1336
|
if (e == null || e === "") return;
|
|
1337
1337
|
let t = Number(e);
|
|
1338
1338
|
return Number.isFinite(t) && t >= 0 ? Math.floor(t) : void 0;
|
|
1339
|
-
},
|
|
1340
|
-
let n =
|
|
1339
|
+
}, ws = (e, t = process.env) => Cs(t.VOLTRO_DB_EAGER_FALLBACK_WARN_INTERVAL_MS) ?? Cs(e) ?? 3e5, Ts = (e, t = {}) => {
|
|
1340
|
+
let n = ws(t.warnIntervalMs), r = t.now ?? (() => Date.now()), i = /* @__PURE__ */ new Map();
|
|
1341
1341
|
return (t) => {
|
|
1342
|
-
let a = `${t.dialect} ${t.reason}`, o =
|
|
1343
|
-
o === void 0 && (o =
|
|
1342
|
+
let a = `${t.dialect} ${t.reason}`, o = ps.get(a);
|
|
1343
|
+
o === void 0 && (o = O.tagged(O.tagged(ls, "dialect", String(t.dialect)), "reason", t.reason), ps.set(a, o)), o.unsafeUpdate(1, us);
|
|
1344
1344
|
let s = `${t.table}\u0000${t.reason}`, c = i.get(s), l = c === void 0 || n > 0 && r() - c >= n, u = {
|
|
1345
1345
|
table: t.table,
|
|
1346
1346
|
dialect: String(t.dialect),
|
|
@@ -1354,37 +1354,37 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1354
1354
|
}
|
|
1355
1355
|
i.set(s, r()), e.warn(t.reason === "execute-failed" ? "eager-load JSON-agg statement FAILED and was re-run on the multi-query walker — this query pays both paths on every call. Counted as voltro_db_eager_fallback_total{reason=\"execute-failed\"}." : "eager-load could not be compiled to a single JSON-agg roundtrip and is running on the multi-query walker — one round trip per relation level, on every call. Counted as voltro_db_eager_fallback_total{reason=\"not-compilable\"}.", u);
|
|
1356
1356
|
};
|
|
1357
|
-
},
|
|
1358
|
-
if (
|
|
1359
|
-
throw
|
|
1360
|
-
},
|
|
1361
|
-
let t = 0, n =
|
|
1357
|
+
}, Es = (e) => {
|
|
1358
|
+
if (Tr.isSuccess(e)) return e.value;
|
|
1359
|
+
throw Sr.squash(e.cause);
|
|
1360
|
+
}, Ds = "10 millis", Os = 3, ks = (e) => Dr.exponential(Ds).pipe(Dr.compose(Dr.recurs(Os)), Dr.whileInput(e)), As = async (e) => {
|
|
1361
|
+
let t = 0, n = D.suspend(() => {
|
|
1362
1362
|
let n = ++t;
|
|
1363
|
-
return e.withTransaction(
|
|
1364
|
-
if (
|
|
1365
|
-
let r = t.value, i =
|
|
1363
|
+
return e.withTransaction(D.flatMap(D.serviceOption(jr), (t) => {
|
|
1364
|
+
if (k.isNone(t)) return D.fail(/* @__PURE__ */ Error(`${e.label}: TransactionConnection unexpectedly missing inside withTransaction.`));
|
|
1365
|
+
let r = t.value, i = D.tryPromise({
|
|
1366
1366
|
try: () => e.body(r, n),
|
|
1367
1367
|
catch: (e) => e
|
|
1368
1368
|
});
|
|
1369
|
-
return e.prepare === void 0 ? i :
|
|
1370
|
-
})).pipe(
|
|
1371
|
-
}).pipe(
|
|
1372
|
-
return
|
|
1373
|
-
},
|
|
1369
|
+
return e.prepare === void 0 ? i : D.flatMap(e.prepare(r), () => i);
|
|
1370
|
+
})).pipe(D.catchAllDefect((t) => e.isRetryable(t) ? D.fail(t) : D.die(t)));
|
|
1371
|
+
}).pipe(D.retry(ks(e.isRetryable)), D.withSpan(e.span.name, { attributes: { ...e.span.attributes } }));
|
|
1372
|
+
return xs(e.dialect, "transaction", async () => Es(await e.runPromiseExit(e.wrapProgram === void 0 ? n : e.wrapProgram(n))));
|
|
1373
|
+
}, js = class extends Error {
|
|
1374
1374
|
swallowed;
|
|
1375
1375
|
_tag = "TransactionAborted";
|
|
1376
1376
|
constructor(e, t) {
|
|
1377
1377
|
super(`${e}: a statement failed inside this transaction and the error was caught, but the database had already aborted the transaction — every later statement was refused, and COMMIT would have rolled back ALL of its writes, including the ones that succeeded. Nothing was committed.
|
|
1378
|
-
the caught failure: ${
|
|
1378
|
+
the caught failure: ${Fs(t)}\n to tolerate a failing statement and keep the rest, run it inside \`tx.savepoint(() => …)\` — only that statement is rolled back. To keep all-or-nothing, let the error propagate.`, { cause: t }), this.swallowed = t, this.name = "TransactionAbortedError";
|
|
1379
1379
|
}
|
|
1380
|
-
},
|
|
1380
|
+
}, Ms = (e, t = "transactional()") => {
|
|
1381
1381
|
let n = 0, r, i = (e) => {
|
|
1382
1382
|
r === void 0 && (r = { error: e });
|
|
1383
1383
|
};
|
|
1384
1384
|
return {
|
|
1385
1385
|
track: (a) => r === void 0 ? n > 0 ? a() : a().catch((t) => {
|
|
1386
1386
|
throw e(t) && i(t), t;
|
|
1387
|
-
}) : Promise.reject(new
|
|
1387
|
+
}) : Promise.reject(new js(t, r.error)),
|
|
1388
1388
|
inSavepoint: async (e) => {
|
|
1389
1389
|
n++;
|
|
1390
1390
|
try {
|
|
@@ -1396,7 +1396,7 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1396
1396
|
record: i,
|
|
1397
1397
|
abortedBy: () => r
|
|
1398
1398
|
};
|
|
1399
|
-
},
|
|
1399
|
+
}, Ns = async (e, t) => {
|
|
1400
1400
|
let { tracker: n, name: r, exec: i, spelling: a } = e;
|
|
1401
1401
|
await n.track(() => i(a === "mssql" ? `SAVE TRANSACTION ${r}` : `SAVEPOINT ${r}`));
|
|
1402
1402
|
try {
|
|
@@ -1405,8 +1405,8 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1405
1405
|
} catch (e) {
|
|
1406
1406
|
throw await i(a === "mssql" ? `ROLLBACK TRANSACTION ${r}` : `ROLLBACK TO SAVEPOINT ${r}`).catch((e) => n.record(e)), a === "standard" && await i(`RELEASE SAVEPOINT ${r}`).catch(() => void 0), e;
|
|
1407
1407
|
}
|
|
1408
|
-
},
|
|
1409
|
-
for (let t of
|
|
1408
|
+
}, Ps = (e) => e instanceof js || typeof e == "object" && !!e && e._tag === "TransactionAborted", Fs = (e) => {
|
|
1409
|
+
for (let t of _t(e)) {
|
|
1410
1410
|
let e = t;
|
|
1411
1411
|
for (let t = 0; t < 5 && typeof e == "object" && e; t++) {
|
|
1412
1412
|
let t = e.code, n = e.message;
|
|
@@ -1415,14 +1415,14 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1415
1415
|
}
|
|
1416
1416
|
}
|
|
1417
1417
|
return e instanceof Error ? e.message : String(e);
|
|
1418
|
-
},
|
|
1419
|
-
let t =
|
|
1418
|
+
}, Is = async (e) => {
|
|
1419
|
+
let t = Eo(), n = t === void 0 ? (e) => e() : (e) => To(t, e), r = await As({
|
|
1420
1420
|
...e,
|
|
1421
1421
|
body: (r) => {
|
|
1422
1422
|
let i = e.makeView(r, t);
|
|
1423
1423
|
return n(() => e.work(i)).then((t) => {
|
|
1424
1424
|
let n = i.abortedBy?.();
|
|
1425
|
-
if (n !== void 0) throw e.isRetryable(n.error) ? n.error : new
|
|
1425
|
+
if (n !== void 0) throw e.isRetryable(n.error) ? n.error : new js(e.label, n.error);
|
|
1426
1426
|
return {
|
|
1427
1427
|
result: t,
|
|
1428
1428
|
view: i
|
|
@@ -1434,50 +1434,50 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1434
1434
|
}
|
|
1435
1435
|
});
|
|
1436
1436
|
return r.view.commitEvents(), r.result;
|
|
1437
|
-
},
|
|
1437
|
+
}, Ls = /* @__PURE__ */ new Set([
|
|
1438
1438
|
"1213",
|
|
1439
1439
|
"ER_LOCK_DEADLOCK",
|
|
1440
1440
|
"1205",
|
|
1441
1441
|
"ER_LOCK_WAIT_TIMEOUT",
|
|
1442
1442
|
"1020",
|
|
1443
1443
|
"ER_CHECKREAD"
|
|
1444
|
-
]),
|
|
1444
|
+
]), Rs = /* @__PURE__ */ new Set(["40001", "40P01"]), zs = /* @__PURE__ */ new Set(["1205"]), Bs = /* @__PURE__ */ new Set([
|
|
1445
1445
|
"SQLITE_BUSY",
|
|
1446
1446
|
"5",
|
|
1447
1447
|
"SQLITE_LOCKED",
|
|
1448
1448
|
"6"
|
|
1449
|
-
]),
|
|
1449
|
+
]), Vs = /write-write conflict|write-read conflict|database is locked|table is locked|database is busy/i, Hs = /* @__PURE__ */ new Set([
|
|
1450
1450
|
1213,
|
|
1451
1451
|
1205,
|
|
1452
1452
|
1020
|
|
1453
|
-
]),
|
|
1454
|
-
...Is,
|
|
1453
|
+
]), Us = /* @__PURE__ */ new Set([
|
|
1455
1454
|
...Ls,
|
|
1456
1455
|
...Rs,
|
|
1457
|
-
...zs
|
|
1458
|
-
|
|
1456
|
+
...zs,
|
|
1457
|
+
...Bs
|
|
1458
|
+
]), Ws = (e) => _t(e).some(Gs), Gs = (e) => {
|
|
1459
1459
|
let t = e;
|
|
1460
1460
|
for (let e = 0; e < 6 && typeof t == "object" && t; e++) {
|
|
1461
1461
|
let e = t;
|
|
1462
|
-
if (typeof e.errno == "number" &&
|
|
1462
|
+
if (typeof e.errno == "number" && Hs.has(e.errno) || typeof e.number == "number" && zs.has(String(e.number)) || typeof e.code == "string" && Us.has(e.code) || typeof e.sqlState == "string" && Rs.has(e.sqlState) || typeof e.message == "string" && Vs.test(e.message)) return !0;
|
|
1463
1463
|
t = e.cause;
|
|
1464
1464
|
}
|
|
1465
1465
|
return !1;
|
|
1466
|
-
},
|
|
1467
|
-
id:
|
|
1468
|
-
fields: { expiresAt:
|
|
1466
|
+
}, Ks = "voltro/expires", qs = () => Re({
|
|
1467
|
+
id: Ks,
|
|
1468
|
+
fields: { expiresAt: y().nullable() },
|
|
1469
1469
|
behaviors: { defaultWhere: () => "expiresAt IS NULL OR expiresAt > now()" }
|
|
1470
|
-
}),
|
|
1471
|
-
id:
|
|
1470
|
+
}), Js = "voltro/localFirst", Ys = () => Re({
|
|
1471
|
+
id: Js,
|
|
1472
1472
|
fields: {}
|
|
1473
|
-
}),
|
|
1473
|
+
}), Xs = (e) => e.appliedMixins.some((e) => e.id === Js), Zs = (e) => {
|
|
1474
1474
|
let t = [];
|
|
1475
|
-
for (let n of Object.values(e))
|
|
1475
|
+
for (let n of Object.values(e)) Xs(n) && t.push(n.tableName);
|
|
1476
1476
|
return t;
|
|
1477
|
-
},
|
|
1478
|
-
let i =
|
|
1477
|
+
}, Qs = class extends wr.TaggedError("TableStreamError") {}, $s = 1e3, ec = (e, t, n, r) => {
|
|
1478
|
+
let i = k.match(r, {
|
|
1479
1479
|
onNone: () => e.where,
|
|
1480
|
-
onSome: (n) => e.where ?
|
|
1480
|
+
onSome: (n) => e.where ? dt(e.where, Et(t, n)) : Et(t, n)
|
|
1481
1481
|
});
|
|
1482
1482
|
return {
|
|
1483
1483
|
table: e.table,
|
|
@@ -1492,19 +1492,19 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1492
1492
|
...e.includeDeleted === void 0 ? {} : { includeDeleted: e.includeDeleted },
|
|
1493
1493
|
...e.crossTenant === void 0 ? {} : { crossTenant: e.crossTenant }
|
|
1494
1494
|
};
|
|
1495
|
-
},
|
|
1496
|
-
let n = t.pk ?? "id", r = t.chunkSize ??
|
|
1497
|
-
return
|
|
1498
|
-
let a =
|
|
1499
|
-
try: () => e.query(
|
|
1500
|
-
catch: (e) => new
|
|
1495
|
+
}, tc = (e, t) => {
|
|
1496
|
+
let n = t.pk ?? "id", r = t.chunkSize ?? $s;
|
|
1497
|
+
return Or.paginateChunkEffect(k.none(), (i) => {
|
|
1498
|
+
let a = D.tryPromise({
|
|
1499
|
+
try: () => e.query(ec(t, n, r, i)),
|
|
1500
|
+
catch: (e) => new Qs({
|
|
1501
1501
|
table: t.table,
|
|
1502
1502
|
cause: e
|
|
1503
1503
|
})
|
|
1504
1504
|
});
|
|
1505
|
-
return (t.retry ? a.pipe(
|
|
1505
|
+
return (t.retry ? a.pipe(D.retry(t.retry)) : a).pipe(D.map((e) => [Cr.fromIterable(e), e.length === r && e.length > 0 ? k.some(k.some(e[e.length - 1][n])) : k.none()]));
|
|
1506
1506
|
});
|
|
1507
|
-
},
|
|
1507
|
+
}, nc = (e) => {
|
|
1508
1508
|
let t = e.alpha ?? .5;
|
|
1509
1509
|
if (t < 0 || t > 1) throw Error(`hybridSearch: alpha must be in [0, 1], got ${t}`);
|
|
1510
1510
|
return (n) => {
|
|
@@ -1518,7 +1518,7 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1518
1518
|
queryText: e.vector.query,
|
|
1519
1519
|
distance: e.vector.distance ?? "cosine",
|
|
1520
1520
|
alpha: t
|
|
1521
|
-
}, i =
|
|
1521
|
+
}, i = Ut(n.table, e.fts.indexName, n.fullTextIndexes);
|
|
1522
1522
|
return {
|
|
1523
1523
|
...n,
|
|
1524
1524
|
annClause: r,
|
|
@@ -1531,17 +1531,17 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1531
1531
|
}
|
|
1532
1532
|
};
|
|
1533
1533
|
};
|
|
1534
|
-
},
|
|
1534
|
+
}, rc = async (e, t) => {
|
|
1535
1535
|
let n = e.as ?? "embedding", r = t.row[e.from];
|
|
1536
1536
|
if (typeof r != "string" || r.length === 0) return {};
|
|
1537
1537
|
let i = await t.embed(r);
|
|
1538
1538
|
return { [n]: i };
|
|
1539
|
-
},
|
|
1539
|
+
}, ic = (e) => {
|
|
1540
1540
|
if (!Number.isInteger(e.dimensions) || e.dimensions <= 0) throw Error(`vectorEmbedding: dimensions must be a positive integer, got ${String(e.dimensions)}.`);
|
|
1541
|
-
let t = e.as ?? "embedding", n = (t) =>
|
|
1542
|
-
return
|
|
1541
|
+
let t = e.as ?? "embedding", n = (t) => rc(e, t);
|
|
1542
|
+
return Re({
|
|
1543
1543
|
id: "voltro/vectorEmbedding",
|
|
1544
|
-
fields: { [t]:
|
|
1544
|
+
fields: { [t]: rt(e.dimensions) },
|
|
1545
1545
|
...e.index === !1 ? {} : { indexes: [{
|
|
1546
1546
|
fields: [t],
|
|
1547
1547
|
kind: "hnsw",
|
|
@@ -1556,19 +1556,19 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1556
1556
|
beforeUpdate: n
|
|
1557
1557
|
}
|
|
1558
1558
|
});
|
|
1559
|
-
},
|
|
1559
|
+
}, ac = 63, oc = "br_pr", Y = class extends Error {
|
|
1560
1560
|
_tag = "BranchNameInvalid";
|
|
1561
1561
|
constructor(e) {
|
|
1562
1562
|
super(e), this.name = "BranchNameInvalid";
|
|
1563
1563
|
}
|
|
1564
|
-
},
|
|
1564
|
+
}, sc = (e, t) => {
|
|
1565
1565
|
if (!Number.isInteger(t) || t < 0) throw new Y(`prNumber must be a non-negative integer, got ${String(t)}`);
|
|
1566
1566
|
let n = se(e);
|
|
1567
1567
|
if (n.replace(/_/g, "") === "") throw new Y(`app slug '${e}' has no usable identifier characters`);
|
|
1568
|
-
let r = `${
|
|
1569
|
-
if (r.length >
|
|
1568
|
+
let r = `${oc}${t}_${n}`;
|
|
1569
|
+
if (r.length > ac) throw new Y(`branch namespace '${r}' exceeds the ${ac}-byte identifier limit — use a shorter app slug`);
|
|
1570
1570
|
return r;
|
|
1571
|
-
},
|
|
1571
|
+
}, cc = (e) => e.startsWith(oc), lc = {
|
|
1572
1572
|
requested: {
|
|
1573
1573
|
provision: "provisioning",
|
|
1574
1574
|
destroy: "destroying"
|
|
@@ -1587,18 +1587,18 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1587
1587
|
fail: "failed"
|
|
1588
1588
|
},
|
|
1589
1589
|
destroyed: {}
|
|
1590
|
-
},
|
|
1590
|
+
}, uc = class extends Error {
|
|
1591
1591
|
from;
|
|
1592
1592
|
event;
|
|
1593
1593
|
_tag = "BranchTransitionInvalid";
|
|
1594
1594
|
constructor(e, t) {
|
|
1595
1595
|
super(`invalid branch transition: ${e} --${t}-->`), this.from = e, this.event = t, this.name = "BranchTransitionInvalid";
|
|
1596
1596
|
}
|
|
1597
|
-
},
|
|
1598
|
-
let n =
|
|
1599
|
-
if (n === void 0) throw new
|
|
1597
|
+
}, dc = (e, t) => {
|
|
1598
|
+
let n = lc[e][t];
|
|
1599
|
+
if (n === void 0) throw new uc(e, t);
|
|
1600
1600
|
return n;
|
|
1601
|
-
},
|
|
1601
|
+
}, fc = (e, t, n, r, i = [], a = []) => {
|
|
1602
1602
|
if (n === "copy" && (r === void 0 || r === "")) throw new Y("seed 'copy' requires a parentNamespace to snapshot from");
|
|
1603
1603
|
let o = [{
|
|
1604
1604
|
kind: "create-namespace",
|
|
@@ -1628,13 +1628,13 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1628
1628
|
kind: "seed",
|
|
1629
1629
|
detail: `run boot seeds into ${e}`
|
|
1630
1630
|
}), o;
|
|
1631
|
-
},
|
|
1632
|
-
if (!
|
|
1631
|
+
}, pc = (e) => {
|
|
1632
|
+
if (!cc(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
|
|
1633
1633
|
return [{
|
|
1634
1634
|
kind: "drop-namespace",
|
|
1635
1635
|
detail: e
|
|
1636
1636
|
}];
|
|
1637
|
-
},
|
|
1637
|
+
}, mc = (e) => {
|
|
1638
1638
|
if (e === void 0 || e === "") return !1;
|
|
1639
1639
|
try {
|
|
1640
1640
|
let t = new URL(e).hostname.toLowerCase();
|
|
@@ -1642,27 +1642,27 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1642
1642
|
} catch {
|
|
1643
1643
|
return /\bneon\.(tech|build)\b/i.test(e);
|
|
1644
1644
|
}
|
|
1645
|
-
},
|
|
1645
|
+
}, hc = (e) => e.prefer === void 0 ? e.seed === "copy" && mc(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, gc = (e, t = {}) => [{
|
|
1646
1646
|
kind: "neon-branch-create",
|
|
1647
1647
|
detail: `${t.parentBranch ?? "main"} → ${e} (copy-on-write)`
|
|
1648
|
-
}],
|
|
1649
|
-
if (!
|
|
1648
|
+
}], _c = (e) => {
|
|
1649
|
+
if (!cc(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
|
|
1650
1650
|
return [{
|
|
1651
1651
|
kind: "neon-branch-delete",
|
|
1652
1652
|
detail: e
|
|
1653
1653
|
}];
|
|
1654
|
-
},
|
|
1654
|
+
}, vc = (e) => e.mechanism === "neon-cow" ? gc(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : fc(e.branchId, e.tableNames, e.seed, e.parentNamespace, e.foreignKeys, e.indexNames), yc = (e, t) => e === "neon-cow" ? _c(t) : pc(t), bc = (e, t, n) => {
|
|
1655
1655
|
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);
|
|
1656
1656
|
return {
|
|
1657
1657
|
evict: i,
|
|
1658
1658
|
rejectNew: r.filter((e) => !a.has(e.namespace)).length >= t.maxBranches
|
|
1659
1659
|
};
|
|
1660
|
-
},
|
|
1661
|
-
let n =
|
|
1660
|
+
}, xc = async (e, t) => {
|
|
1661
|
+
let n = sc(e.appSlug, e.prNumber), r = hc({
|
|
1662
1662
|
seed: e.seed,
|
|
1663
1663
|
...e.dbUrl === void 0 ? {} : { dbUrl: e.dbUrl },
|
|
1664
1664
|
...e.prefer === void 0 ? {} : { prefer: e.prefer }
|
|
1665
|
-
}), i =
|
|
1665
|
+
}), i = vc({
|
|
1666
1666
|
mechanism: r,
|
|
1667
1667
|
branchId: n,
|
|
1668
1668
|
tableNames: e.tableNames,
|
|
@@ -1691,15 +1691,15 @@ var Fr = (e) => typeof e == "string" && e !== "" ? e : null, Ir = async (e, t, n
|
|
|
1691
1691
|
mechanism: r,
|
|
1692
1692
|
steps: i
|
|
1693
1693
|
};
|
|
1694
|
-
},
|
|
1695
|
-
let r =
|
|
1694
|
+
}, Sc = async (e, t, n) => {
|
|
1695
|
+
let r = yc(t, e);
|
|
1696
1696
|
return t === "neon-cow" ? await n.neonBranchDelete(e) : await n.dropNamespace(e), r;
|
|
1697
|
-
},
|
|
1697
|
+
}, Cc = (e, t, n) => bc(e, t, n), X = (e) => `"${e.replace(/"/g, "\"\"")}"`, wc = {
|
|
1698
1698
|
cascade: "CASCADE",
|
|
1699
1699
|
restrict: "RESTRICT",
|
|
1700
1700
|
setNull: "SET NULL",
|
|
1701
1701
|
noAction: "NO ACTION"
|
|
1702
|
-
}, Z = (e) => `'${e.replace(/'/g, "''")}'`,
|
|
1702
|
+
}, Z = (e) => `'${e.replace(/'/g, "''")}'`, Tc = (e, t) => {
|
|
1703
1703
|
let n = t.columns.map(Z).join(", ");
|
|
1704
1704
|
return `DO $voltro_branch$
|
|
1705
1705
|
DECLARE derived name;
|
|
@@ -1726,10 +1726,10 @@ BEGIN
|
|
|
1726
1726
|
END IF;
|
|
1727
1727
|
END
|
|
1728
1728
|
$voltro_branch$`;
|
|
1729
|
-
},
|
|
1730
|
-
let n = t.onDelete === void 0 ? "" : ` ON DELETE ${
|
|
1729
|
+
}, Ec = (e, t) => {
|
|
1730
|
+
let n = t.onDelete === void 0 ? "" : ` ON DELETE ${wc[t.onDelete]}`, r = t.onUpdate === void 0 ? "" : ` ON UPDATE ${wc[t.onUpdate]}`;
|
|
1731
1731
|
return `ALTER TABLE ${X(e)}.${X(t.table)} ADD FOREIGN KEY (${X(t.column)}) REFERENCES ${X(e)}.${X(t.targetTable)} (${X(t.targetColumn)})${n}${r}`;
|
|
1732
|
-
},
|
|
1732
|
+
}, Dc = (e) => {
|
|
1733
1733
|
let t = () => {
|
|
1734
1734
|
throw Error("namespace branch executor: Neon ops require a neon-cow executor (use a Neon connection for copy-on-write branches)");
|
|
1735
1735
|
};
|
|
@@ -1737,24 +1737,24 @@ $voltro_branch$`;
|
|
|
1737
1737
|
createNamespace: (t) => e.run(`CREATE SCHEMA IF NOT EXISTS ${X(t)}`),
|
|
1738
1738
|
createTable: (t, n) => e.run(`CREATE TABLE IF NOT EXISTS ${X(t)}.${X(n)} (LIKE ${X(n)} INCLUDING ALL)`),
|
|
1739
1739
|
copyTable: (t, n, r) => e.run(`INSERT INTO ${X(n)}.${X(r)} SELECT * FROM ${X(t)}.${X(r)}`),
|
|
1740
|
-
addForeignKey: (t, n) => e.run(
|
|
1741
|
-
restoreIndexName: (t, n) => e.run(
|
|
1740
|
+
addForeignKey: (t, n) => e.run(Ec(t, n)),
|
|
1741
|
+
restoreIndexName: (t, n) => e.run(Tc(t, n)),
|
|
1742
1742
|
dropNamespace: (t) => e.run(`DROP SCHEMA IF EXISTS ${X(t)} CASCADE`),
|
|
1743
1743
|
neonBranchCreate: t,
|
|
1744
1744
|
neonBranchDelete: t
|
|
1745
1745
|
};
|
|
1746
|
-
},
|
|
1746
|
+
}, Oc = class extends Error {
|
|
1747
1747
|
_tag = "TenantResidencyUnresolved";
|
|
1748
1748
|
constructor(e) {
|
|
1749
1749
|
super(e), this.name = "TenantResidencyUnresolved";
|
|
1750
1750
|
}
|
|
1751
|
-
},
|
|
1751
|
+
}, kc = class extends Error {
|
|
1752
1752
|
region;
|
|
1753
1753
|
_tag = "TenantRegionUnavailable";
|
|
1754
1754
|
constructor(e, t) {
|
|
1755
1755
|
super(t), this.region = e, this.name = "TenantRegionUnavailable";
|
|
1756
1756
|
}
|
|
1757
|
-
},
|
|
1757
|
+
}, Ac, jc = (e) => {
|
|
1758
1758
|
if (e.homes === void 0) throw Error("setResidencyConfig: `homes` is required");
|
|
1759
1759
|
if (e.servableRegions === void 0 || e.servableRegions.length === 0) throw Error("setResidencyConfig: `servableRegions` must be non-empty (which regions this deployment serves)");
|
|
1760
1760
|
let t = /* @__PURE__ */ new Map();
|
|
@@ -1763,55 +1763,55 @@ $voltro_branch$`;
|
|
|
1763
1763
|
if (e !== void 0 && e !== n.region) throw Error(`residency: tenant '${n.tenantId}' is mapped to two regions ('${e}' and '${n.region}')`);
|
|
1764
1764
|
t.set(n.tenantId, n.region);
|
|
1765
1765
|
}
|
|
1766
|
-
return
|
|
1767
|
-
},
|
|
1768
|
-
|
|
1769
|
-
},
|
|
1770
|
-
if (e == null || e === "") throw new
|
|
1766
|
+
return Ac = e, e;
|
|
1767
|
+
}, Mc = () => Ac, Nc = () => {
|
|
1768
|
+
Ac = void 0;
|
|
1769
|
+
}, Pc = (e, t) => {
|
|
1770
|
+
if (e == null || e === "") throw new Oc("residency is on but the request has no resolvable tenant — refusing to bind a store");
|
|
1771
1771
|
let n = t.homes.find((t) => t.tenantId === e);
|
|
1772
|
-
if (n === void 0) throw new
|
|
1772
|
+
if (n === void 0) throw new Oc(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
|
|
1773
1773
|
return n;
|
|
1774
|
-
},
|
|
1775
|
-
let n =
|
|
1774
|
+
}, Fc = (e, t) => t.servableRegions.includes(e), Ic = (e, t) => {
|
|
1775
|
+
let n = Pc(e.tenantId, t), r = ze(n.tenantId);
|
|
1776
1776
|
return {
|
|
1777
1777
|
region: n.region,
|
|
1778
1778
|
namespace: r,
|
|
1779
1779
|
...n.connectionKey === void 0 ? {} : { connectionKey: n.connectionKey }
|
|
1780
1780
|
};
|
|
1781
|
-
},
|
|
1782
|
-
let r =
|
|
1783
|
-
if (!
|
|
1781
|
+
}, Lc = (e, t, n) => {
|
|
1782
|
+
let r = Ic(e, t);
|
|
1783
|
+
if (!Fc(r.region, t)) throw new kc(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
|
|
1784
1784
|
let i = n.get(r.region);
|
|
1785
|
-
if (i === void 0) throw new
|
|
1785
|
+
if (i === void 0) throw new kc(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
|
|
1786
1786
|
return {
|
|
1787
1787
|
store: i,
|
|
1788
1788
|
placement: r
|
|
1789
1789
|
};
|
|
1790
|
-
},
|
|
1791
|
-
let { store: i, placement: a } =
|
|
1790
|
+
}, Rc = async (e, t, n, r) => {
|
|
1791
|
+
let { store: i, placement: a } = Lc(e, t, n);
|
|
1792
1792
|
return await r(i, a), a;
|
|
1793
|
-
},
|
|
1793
|
+
}, zc = (e) => {
|
|
1794
1794
|
if (typeof e == "string") return e;
|
|
1795
1795
|
if ("jsonPath" in e) {
|
|
1796
1796
|
let { column: t, path: n, numeric: r } = e.jsonPath;
|
|
1797
1797
|
return `(json:${t}->${n.join(".")}${r ? "::num" : ""})`;
|
|
1798
1798
|
}
|
|
1799
1799
|
return `(${e.expr})`;
|
|
1800
|
-
}, Q = (e) => e.map(
|
|
1800
|
+
}, Q = (e) => e.map(zc), Bc = (e, t) => {
|
|
1801
1801
|
if (e.length !== t.length) return !1;
|
|
1802
|
-
for (let n = 0; n < e.length; n++) if (
|
|
1802
|
+
for (let n = 0; n < e.length; n++) if (zc(e[n]) !== zc(t[n])) return !1;
|
|
1803
1803
|
return !0;
|
|
1804
|
-
},
|
|
1804
|
+
}, Vc = (e, t) => {
|
|
1805
1805
|
if (e.length >= t.length) return !1;
|
|
1806
|
-
for (let n = 0; n < e.length; n++) if (
|
|
1806
|
+
for (let n = 0; n < e.length; n++) if (zc(e[n]) !== zc(t[n])) return !1;
|
|
1807
1807
|
return !0;
|
|
1808
|
-
},
|
|
1808
|
+
}, Hc = (e) => {
|
|
1809
1809
|
let t = [], n = e.appliedIndexes, r = e.tableName;
|
|
1810
1810
|
for (let e = 0; e < n.length; e++) {
|
|
1811
1811
|
let i = n[e];
|
|
1812
1812
|
for (let a = e + 1; a < n.length; a++) {
|
|
1813
1813
|
let e = n[a];
|
|
1814
|
-
if (
|
|
1814
|
+
if (Bc(i.fields, e.fields)) {
|
|
1815
1815
|
let [n, a] = i.name < e.name ? [i, e] : [e, i];
|
|
1816
1816
|
t.push({
|
|
1817
1817
|
kind: "duplicate-fields",
|
|
@@ -1822,13 +1822,13 @@ $voltro_branch$`;
|
|
|
1822
1822
|
});
|
|
1823
1823
|
continue;
|
|
1824
1824
|
}
|
|
1825
|
-
|
|
1825
|
+
Vc(i.fields, e.fields) ? t.push({
|
|
1826
1826
|
kind: "redundant-prefix",
|
|
1827
1827
|
table: r,
|
|
1828
1828
|
redundant: i,
|
|
1829
1829
|
coveredBy: e,
|
|
1830
1830
|
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).`
|
|
1831
|
-
}) :
|
|
1831
|
+
}) : Vc(e.fields, i.fields) && t.push({
|
|
1832
1832
|
kind: "redundant-prefix",
|
|
1833
1833
|
table: r,
|
|
1834
1834
|
redundant: e,
|
|
@@ -1838,23 +1838,23 @@ $voltro_branch$`;
|
|
|
1838
1838
|
}
|
|
1839
1839
|
}
|
|
1840
1840
|
return t;
|
|
1841
|
-
},
|
|
1841
|
+
}, Uc = (e) => {
|
|
1842
1842
|
let t = [];
|
|
1843
|
-
for (let n of e) t.push(...
|
|
1843
|
+
for (let n of e) t.push(...Hc(n));
|
|
1844
1844
|
return t;
|
|
1845
|
-
},
|
|
1846
|
-
let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n,
|
|
1845
|
+
}, Wc = "\x1B[", Gc = `${Wc}38;2;245;158;11m`, Kc = `${Wc}38;2;16;185;129m`, qc = (e, t) => `${e}${t}${j.reset}`, $ = (e, t, n) => e ? typeof t == "function" ? t(n) : qc(t, n) : n, Jc = (e, t = {}) => {
|
|
1846
|
+
let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n, j.dim, e.padEnd(11)), a = (e) => $(n, (e) => j.bold(j.brand(e)), e), o = (e) => $(n, j.brightRed24, e), s = (e) => $(n, Kc, e), c = (e) => $(n, Gc, e), l = (e) => $(n, j.dim, e), u = `${c("index audit")} ${l("·")} ${$(n, j.bold, e.kind)}`, d = e.redundant.fields.length, f = Q(e.coveredBy.fields.slice(d)), p = (e, t) => {
|
|
1847
1847
|
let n = e.slice(0, t), r = e.slice(t), i = [];
|
|
1848
1848
|
return n.length > 0 && i.push(s(`[${n.join(", ")}]`)), r.length > 0 && i.push(c(`+ [${r.join(", ")}]`)), i.join(" ");
|
|
1849
1849
|
}, m = [];
|
|
1850
|
-
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,
|
|
1851
|
-
},
|
|
1850
|
+
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, j.bold, "both")} B-trees. Pure write overhead, zero read benefit.`), m.push(""), m.push(`${i("fix")}Drop ${o(e.redundant.name)}`), m.push(`${i("")}${l("Keep only if profiling shows the smaller index gives a")}`), m.push(`${i("")}${l("measurable cache-locality boost on a write-heavy hot path.")}`), m.push(`${i("")}${l("Silence with VOLTRO_INDEX_AUDIT=off if intentional.")}`), m.map((e) => `${r}${e}`).join("\n");
|
|
1851
|
+
}, Yc = (e, { apply: t, undo: n }) => ({
|
|
1852
1852
|
name: e,
|
|
1853
1853
|
apply: t,
|
|
1854
1854
|
undo: n
|
|
1855
|
-
}),
|
|
1855
|
+
}), Xc = (e) => {
|
|
1856
1856
|
if (!/^\d{14}_/.test(e.id)) throw Error(`migration "${e.id}": id must start with a 14-digit timestamp followed by "_" (convention: <YYYYMMDDHHMMSS>_<slug>)`);
|
|
1857
|
-
let t = e.steps({ step:
|
|
1857
|
+
let t = e.steps({ step: Yc });
|
|
1858
1858
|
if (t.length === 0) throw Error(`migration "${e.id}": at least one step is required`);
|
|
1859
1859
|
return {
|
|
1860
1860
|
__migration: !0,
|
|
@@ -1862,42 +1862,42 @@ $voltro_branch$`;
|
|
|
1862
1862
|
name: e.name,
|
|
1863
1863
|
steps: t
|
|
1864
1864
|
};
|
|
1865
|
-
},
|
|
1865
|
+
}, Zc = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, Qc = sr.tableName, $c = (e) => kr("sha256").update(`${e.type}\u0000${e.id}`, "utf8").digest("hex"), el = async (e, t) => {
|
|
1866
1866
|
let [n] = await e.query({
|
|
1867
|
-
table:
|
|
1868
|
-
predicate:
|
|
1867
|
+
table: Qc,
|
|
1868
|
+
predicate: Cn("id", $c(t)),
|
|
1869
1869
|
order: [],
|
|
1870
1870
|
take: 1,
|
|
1871
1871
|
skip: void 0,
|
|
1872
1872
|
projection: void 0
|
|
1873
1873
|
}), r = n?.tenantId;
|
|
1874
1874
|
return typeof r == "string" ? r : null;
|
|
1875
|
-
},
|
|
1876
|
-
await e.upsert(
|
|
1877
|
-
id:
|
|
1875
|
+
}, tl = async (e, t, n) => {
|
|
1876
|
+
await e.upsert(Qc, {
|
|
1877
|
+
id: $c(t),
|
|
1878
1878
|
subjectType: t.type,
|
|
1879
1879
|
subjectId: t.id,
|
|
1880
1880
|
tenantId: n,
|
|
1881
1881
|
selectedAt: /* @__PURE__ */ new Date()
|
|
1882
1882
|
}, { conflictColumns: ["id"] });
|
|
1883
|
-
},
|
|
1884
|
-
await e.delete(
|
|
1885
|
-
},
|
|
1886
|
-
let n =
|
|
1883
|
+
}, nl = async (e, t) => {
|
|
1884
|
+
await e.delete(Qc, $c(t));
|
|
1885
|
+
}, rl = "id", il = (e, t) => {
|
|
1886
|
+
let n = ir(e);
|
|
1887
1887
|
if (n === void 0) return t;
|
|
1888
|
-
let r = n.fields[
|
|
1889
|
-
if (r === void 0 || t[
|
|
1888
|
+
let r = n.fields[rl]?.idScheme;
|
|
1889
|
+
if (r === void 0 || t[rl] != null) return t;
|
|
1890
1890
|
if (r.kind === "numeric") {
|
|
1891
|
-
if (!(
|
|
1891
|
+
if (!(rl in t)) return t;
|
|
1892
1892
|
let e = { ...t };
|
|
1893
|
-
return delete e[
|
|
1893
|
+
return delete e[rl], e;
|
|
1894
1894
|
}
|
|
1895
|
-
let i =
|
|
1895
|
+
let i = We(r, e);
|
|
1896
1896
|
return i === null ? t : {
|
|
1897
1897
|
...t,
|
|
1898
|
-
[
|
|
1898
|
+
[rl]: i
|
|
1899
1899
|
};
|
|
1900
|
-
},
|
|
1900
|
+
}, al = (e, t) => t.map((t) => il(e, t)), ol = {
|
|
1901
1901
|
postgres: { maxBindParameters: 65535 },
|
|
1902
1902
|
mysql: { maxBindParameters: 65535 },
|
|
1903
1903
|
mariadb: { maxBindParameters: 65535 },
|
|
@@ -1907,25 +1907,25 @@ $voltro_branch$`;
|
|
|
1907
1907
|
},
|
|
1908
1908
|
sqlite: { maxBindParameters: 32766 },
|
|
1909
1909
|
turso: { maxBindParameters: 32766 }
|
|
1910
|
-
},
|
|
1910
|
+
}, sl = (e) => ol[e], cl = (e) => {
|
|
1911
1911
|
let t = /* @__PURE__ */ new Set();
|
|
1912
1912
|
for (let n of e) for (let e of Object.keys(n)) t.add(e);
|
|
1913
1913
|
return t.size;
|
|
1914
|
-
},
|
|
1914
|
+
}, ll = (e, t) => {
|
|
1915
1915
|
if (t === void 0 || e.length === 0) return [e];
|
|
1916
|
-
let n = Math.max(1,
|
|
1916
|
+
let n = Math.max(1, cl(e)), r = Math.floor(t.maxBindParameters / n), i = t.maxRowsPerStatement ?? Infinity, a = Math.max(1, Math.min(r, i));
|
|
1917
1917
|
if (e.length <= a) return [e];
|
|
1918
1918
|
let o = [];
|
|
1919
1919
|
for (let t = 0; t < e.length; t += a) o.push(e.slice(t, t + a));
|
|
1920
1920
|
return o;
|
|
1921
|
-
},
|
|
1921
|
+
}, ul = (e, t) => {
|
|
1922
1922
|
let n = [], r = t;
|
|
1923
1923
|
for (let [t, i] of Object.entries(e.fields)) {
|
|
1924
1924
|
let e = i;
|
|
1925
1925
|
e.nullable || e.hasDefault || e.idScheme !== void 0 || e.generatedAs !== void 0 || (r[t] === void 0 || r[t] === null) && n.push(t);
|
|
1926
1926
|
}
|
|
1927
1927
|
return n;
|
|
1928
|
-
},
|
|
1928
|
+
}, dl = (e, t, n) => {
|
|
1929
1929
|
let r = n, i = new Set(e === void 0 ? [] : Object.entries(e.fields).filter(([, e]) => e.generatedAs !== void 0).map(([e]) => e)), a = [];
|
|
1930
1930
|
for (let e of t) i.has(e) || (r[e] === void 0 ? a.push({
|
|
1931
1931
|
column: e,
|
|
@@ -1935,36 +1935,36 @@ $voltro_branch$`;
|
|
|
1935
1935
|
reason: "null"
|
|
1936
1936
|
}));
|
|
1937
1937
|
return a;
|
|
1938
|
-
},
|
|
1938
|
+
}, fl = (e, t, n) => e.insert(t.tableName, n), pl = (e, t, n) => e.insertMany(t.tableName, n), ml = (e, t, n, r) => e.upsert(t.tableName, n, {
|
|
1939
1939
|
conflictColumns: r.conflictColumns,
|
|
1940
1940
|
...r.update === void 0 ? {} : { update: r.update },
|
|
1941
1941
|
...r.updateValues === void 0 ? {} : { updateValues: r.updateValues }
|
|
1942
|
-
}),
|
|
1943
|
-
if (e.upsertWithOutcome === void 0) throw
|
|
1942
|
+
}), hl = async (e, t, n, r) => {
|
|
1943
|
+
if (e.upsertWithOutcome === void 0) throw w("upsertRowOutcome: this store does not implement `upsertWithOutcome`. It is provided by the framework's store wrapper, so `ctx.store` has it; a hand-written DataStore must add it.");
|
|
1944
1944
|
return e.upsertWithOutcome(t.tableName, n, {
|
|
1945
1945
|
conflictColumns: r.conflictColumns,
|
|
1946
1946
|
...r.update === void 0 ? {} : { update: r.update },
|
|
1947
1947
|
...r.updateValues === void 0 ? {} : { updateValues: r.updateValues }
|
|
1948
1948
|
});
|
|
1949
|
-
},
|
|
1949
|
+
}, gl = async (e, t, n, r) => e.insertIgnoreWithOutcome(t.tableName, n, { conflictColumns: r.conflictColumns }), _l = (e, t, n, r) => e.updateMany(t.tableName, n, { where: r.where }), vl = 512, yl = (e) => {
|
|
1950
1950
|
e.setMaxListeners(512);
|
|
1951
|
-
},
|
|
1951
|
+
}, bl = (e, t, n) => ({
|
|
1952
1952
|
_tag: "PrimaryKeyConflictError",
|
|
1953
1953
|
table: e,
|
|
1954
1954
|
key: t,
|
|
1955
1955
|
cause: n
|
|
1956
|
-
}),
|
|
1956
|
+
}), xl = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", Sl = {
|
|
1957
1957
|
postgres: 5432,
|
|
1958
1958
|
mysql: 3306,
|
|
1959
1959
|
mariadb: 3306,
|
|
1960
1960
|
mssql: 1433
|
|
1961
|
-
},
|
|
1961
|
+
}, Cl = /* @__PURE__ */ new Set([
|
|
1962
1962
|
"localhost",
|
|
1963
1963
|
"127.0.0.1",
|
|
1964
1964
|
"::1",
|
|
1965
1965
|
"[::1]",
|
|
1966
1966
|
"0.0.0.0"
|
|
1967
|
-
]),
|
|
1967
|
+
]), wl = (e) => {
|
|
1968
1968
|
let t = e.host, n = e.port, r = e.database;
|
|
1969
1969
|
if (e.url !== void 0 && e.url !== "") try {
|
|
1970
1970
|
let i = new URL(e.url);
|
|
@@ -1973,29 +1973,29 @@ $voltro_branch$`;
|
|
|
1973
1973
|
return;
|
|
1974
1974
|
}
|
|
1975
1975
|
if (t === void 0 || t === "" || r === void 0 || r === "") return;
|
|
1976
|
-
let i = n ??
|
|
1976
|
+
let i = n ?? Sl[(e.dialect ?? "").toLowerCase()];
|
|
1977
1977
|
if (i === void 0 || !Number.isFinite(i)) return;
|
|
1978
1978
|
let a = t.toLowerCase();
|
|
1979
1979
|
return {
|
|
1980
|
-
host:
|
|
1980
|
+
host: Cl.has(a) ? "localhost" : a,
|
|
1981
1981
|
port: i,
|
|
1982
1982
|
database: r.toLowerCase()
|
|
1983
1983
|
};
|
|
1984
|
-
},
|
|
1985
|
-
let t =
|
|
1986
|
-
if (t !== void 0) return
|
|
1987
|
-
},
|
|
1984
|
+
}, Tl = (e) => {
|
|
1985
|
+
let t = wl(e);
|
|
1986
|
+
if (t !== void 0) return kr("sha256").update(`${t.host}\u0000${t.port}\u0000${t.database}`).digest("hex").slice(0, 32);
|
|
1987
|
+
}, El = (e, t) => e === void 0 || t === void 0 ? "unknown" : e === t ? "same" : "different", Dl = {
|
|
1988
1988
|
app: 3,
|
|
1989
1989
|
plugin: 2,
|
|
1990
1990
|
framework: 1
|
|
1991
|
-
},
|
|
1991
|
+
}, Ol = /* @__PURE__ */ new Map(), kl = [], Al = () => [...kl], jl = (e) => {
|
|
1992
1992
|
if (!e.table || !e.timeColumn) throw Error("registerRetention: table + timeColumn are required");
|
|
1993
1993
|
if (!Number.isFinite(e.ttlMs) || e.ttlMs <= 0) throw Error(`registerRetention(${e.table}): ttlMs must be a positive number`);
|
|
1994
|
-
let t = e.source ?? "app", n =
|
|
1994
|
+
let t = e.source ?? "app", n = Ol.get(e.table);
|
|
1995
1995
|
if (n !== void 0) {
|
|
1996
1996
|
let r = n.source ?? "app", i = n.ttlMs !== e.ttlMs || n.timeColumn !== e.timeColumn || JSON.stringify(n.activityColumns ?? []) !== JSON.stringify(e.activityColumns ?? []) || JSON.stringify(n.where) !== JSON.stringify(e.where);
|
|
1997
|
-
if (
|
|
1998
|
-
i &&
|
|
1997
|
+
if (Dl[t] < Dl[r]) {
|
|
1998
|
+
i && kl.push({
|
|
1999
1999
|
table: e.table,
|
|
2000
2000
|
kept: {
|
|
2001
2001
|
source: r,
|
|
@@ -2008,7 +2008,7 @@ $voltro_branch$`;
|
|
|
2008
2008
|
});
|
|
2009
2009
|
return;
|
|
2010
2010
|
}
|
|
2011
|
-
i && r !== t &&
|
|
2011
|
+
i && r !== t && kl.push({
|
|
2012
2012
|
table: e.table,
|
|
2013
2013
|
kept: {
|
|
2014
2014
|
source: t,
|
|
@@ -2020,59 +2020,59 @@ $voltro_branch$`;
|
|
|
2020
2020
|
}
|
|
2021
2021
|
});
|
|
2022
2022
|
}
|
|
2023
|
-
|
|
2023
|
+
Ol.set(e.table, {
|
|
2024
2024
|
...e,
|
|
2025
2025
|
source: t
|
|
2026
2026
|
});
|
|
2027
|
-
},
|
|
2028
|
-
|
|
2029
|
-
},
|
|
2030
|
-
let i = new Date(t - e.ttlMs), a = (e.activityColumns ?? []).map((e) =>
|
|
2027
|
+
}, Ml = () => [...Ol.values()], Nl = () => {
|
|
2028
|
+
Ol.clear(), kl.length = 0;
|
|
2029
|
+
}, Pl = async (e, t, n, r = 2e4) => {
|
|
2030
|
+
let i = new Date(t - e.ttlMs), a = (e.activityColumns ?? []).map((e) => ur(Yn(e), Gt(e, i))), o = a.length === 0 ? e.where : dt(...e.where === void 0 ? [] : [e.where], ...a), s = 0;
|
|
2031
2031
|
try {
|
|
2032
2032
|
for (;;) {
|
|
2033
2033
|
let t = await n(e.table, e.timeColumn, i, r, o);
|
|
2034
2034
|
if (s += t, t < r) break;
|
|
2035
2035
|
}
|
|
2036
2036
|
} catch (t) {
|
|
2037
|
-
throw
|
|
2037
|
+
throw D.runSync(O.increment(O.tagged(Il, "table", e.table))), t;
|
|
2038
2038
|
}
|
|
2039
|
-
return s > 0 &&
|
|
2040
|
-
},
|
|
2039
|
+
return s > 0 && D.runSync(O.incrementBy(O.tagged(Fl, "table", e.table), s)), s;
|
|
2040
|
+
}, Fl = O.counter("voltro_retention_swept_rows_total"), Il = O.counter("voltro_retention_sweep_errors_total"), Ll = (e, t) => {
|
|
2041
2041
|
let n = Number(e ?? String(t));
|
|
2042
2042
|
return (Number.isFinite(n) && n > 0 ? n : t) * 36e5;
|
|
2043
|
-
},
|
|
2044
|
-
id:
|
|
2045
|
-
replicaId:
|
|
2046
|
-
streamName:
|
|
2047
|
-
binlogFile:
|
|
2048
|
-
binlogPosition:
|
|
2049
|
-
updatedAt:
|
|
2050
|
-
}).index(["replicaId"]),
|
|
2051
|
-
id:
|
|
2052
|
-
replicaId:
|
|
2053
|
-
streamName:
|
|
2054
|
-
ctVersion:
|
|
2055
|
-
updatedAt:
|
|
2056
|
-
}).index(["replicaId"]),
|
|
2057
|
-
id:
|
|
2058
|
-
startedAt:
|
|
2059
|
-
finishedAt:
|
|
2060
|
-
direction:
|
|
2061
|
-
mode:
|
|
2062
|
-
via:
|
|
2063
|
-
bundle:
|
|
2064
|
-
sourceFingerprint:
|
|
2065
|
-
tablesWritten:
|
|
2066
|
-
rowsWritten:
|
|
2067
|
-
failure:
|
|
2068
|
-
staged:
|
|
2069
|
-
}).renamedFrom("_voltro_data_imports").nonReactive(),
|
|
2043
|
+
}, Rl = "_voltro_cdc_offsets", zl = b(Rl, {
|
|
2044
|
+
id: x({ prefix: "cdcoff" }),
|
|
2045
|
+
replicaId: C(),
|
|
2046
|
+
streamName: C(),
|
|
2047
|
+
binlogFile: C(),
|
|
2048
|
+
binlogPosition: C(),
|
|
2049
|
+
updatedAt: y()
|
|
2050
|
+
}).index(["replicaId"]), Bl = b(Rl, {
|
|
2051
|
+
id: x({ prefix: "cdcoff" }),
|
|
2052
|
+
replicaId: C(),
|
|
2053
|
+
streamName: C(),
|
|
2054
|
+
ctVersion: C(),
|
|
2055
|
+
updatedAt: y()
|
|
2056
|
+
}).index(["replicaId"]), Vl = "_voltro_data_transfers", Hl = b(Vl, {
|
|
2057
|
+
id: x({ prefix: "dimp" }),
|
|
2058
|
+
startedAt: y().default("now"),
|
|
2059
|
+
finishedAt: y().nullable(),
|
|
2060
|
+
direction: C().default("import"),
|
|
2061
|
+
mode: C(),
|
|
2062
|
+
via: C(),
|
|
2063
|
+
bundle: C().nullable(),
|
|
2064
|
+
sourceFingerprint: C().nullable(),
|
|
2065
|
+
tablesWritten: un().default(0),
|
|
2066
|
+
rowsWritten: un().default(0),
|
|
2067
|
+
failure: C().nullable(),
|
|
2068
|
+
staged: Jt().nullable()
|
|
2069
|
+
}).renamedFrom("_voltro_data_imports").nonReactive(), Ul = (e) => {
|
|
2070
2070
|
let t = Number.isFinite(e.startedAt.getTime()) ? e.startedAt.toISOString() : "an unknown time", n = e.direction === "import" ? e.mode : `${e.direction} ${e.mode}`, r = e.failure === null ? e.finishedAt === null ? `${n} — started and never reported finishing` : e.direction === "backup" || e.direction === "restore" ? `${n} — finished${e.rowsWritten > 0 ? ` (${e.rowsWritten} blob(s))` : ""}` : `${n} — ${e.rowsWritten} row(s) across ${e.tablesWritten} table(s)` : `FAILED ${n} — ${e.failure}`, i = e.staged === null ? "" : e.staged ? " · staged (target untouched until the swap)" : " · NOT staged (target emptied first)";
|
|
2071
2071
|
return `${t} · ${r} · via ${e.via}${i}` + (e.bundle === null ? "" : ` · from ${e.bundle}`) + (e.sourceFingerprint === null ? "" : ` · source schema ${e.sourceFingerprint}`);
|
|
2072
|
-
},
|
|
2072
|
+
}, Wl = 255, Gl = (e) => e == null ? "null" : typeof e == "string" || typeof e == "number" || typeof e == "boolean" ? JSON.stringify(e) : Array.isArray(e) ? `[${e.map(Gl).join(",")}]` : typeof e == "object" ? `{${Object.entries(e).filter(([, e]) => e !== void 0).sort(([e], [t]) => e < t ? -1 : +(e > t)).map(([e, t]) => `${JSON.stringify(e)}:${Gl(t)}`).join(",")}}` : JSON.stringify(String(e)), Kl = (e) => {
|
|
2073
2073
|
if (e == null) return null;
|
|
2074
|
-
let t = typeof e == "string" ? e :
|
|
2074
|
+
let t = typeof e == "string" ? e : Gl(e);
|
|
2075
2075
|
return t.length > 255 ? t.slice(0, 255) : t;
|
|
2076
|
-
},
|
|
2076
|
+
}, ql = "postgres";
|
|
2077
2077
|
//#endregion
|
|
2078
|
-
export { i as AUTO_FILLED_COLUMNS,
|
|
2078
|
+
export { i as AUTO_FILLED_COLUMNS, Br as BOUND_ENCRYPTED_PREFIX, ol as BULK_INSERT_LIMITS, Y as BranchNameInvalid, uc as BranchTransitionInvalid, Rl as CDC_OFFSETS_TABLE, So as CHANGE_CLAIM_TTL_ENV, vl as CHANGE_LISTENER_CEILING, Wt as ColumnBuilder, Vl as DATA_TRANSFERS_TABLE, te as DEFAULT_ACQUIRE_TIMEOUT_MS, Co as DEFAULT_CHANGE_CLAIM_TTL_HOURS, Ss as DEFAULT_EAGER_FALLBACK_WARN_INTERVAL_MS, rr as DEFAULT_SOFT_DROP_RETENTION_DAYS, ji as DEFAULT_SUBJECT_GRAPH_DEPTH, zr as ENCRYPTED_PREFIX, ql as ENGINE, Xi as EagerCardinalityError, an as FILE_MIGRATION_PATTERN, qe as FRAMEWORK_LIVE_TABLES, Ur as FieldDecryptionError, Wo as ID_COLUMN_MAX_LENGTH, yr as INITIAL_VERSION, De as IrreversibleMigrationError, mt as MATCHES_NO_ROWS, fe as MAX_IDENTIFIER_LENGTH, Ae as MIGRATION_PHASES, zs as MSSQL_TRANSIENT_NUMBERS, Ls as MYSQL_TRANSIENT_CODES, Le as MigrationExpectationFailed, ie as MigrationNeedsSqlClient, me as MigrationSkipped, xo as OccurrenceCounter, Rs as POSTGRES_TRANSIENT_STATES, Hn as REPLACE_IN_PROGRESS_TABLE, Ce as RewriteUnstableError, Wl as SCOPE_KEY_MAX_LENGTH, An as SELF_REFERENCE_TARGET, Bs as SQLITE_TRANSIENT_CODES, bn as STAGING_STALE_MINUTES, d as STAGING_TABLE_PREFIX, Mr as SqlClient, Qc as TENANT_SELECTIONS_TABLE, Vs as TURSO_TRANSIENT_MESSAGE, Qs as TableStreamError, cn as TenantNamespaceInvalid, ke as TenantNamespaceUnresolved, kc as TenantRegionUnavailable, Oc as TenantResidencyUnresolved, js as TransactionAbortedError, Ue as TransactionBrokenByBodyError, Ks as VOLTRO_EXPIRES_MIXIN_ID, Js as VOLTRO_LOCAL_FIRST_MIXIN_ID, gr as VersionConflict, nt as WARN_IDENTIFIER_LENGTH, fn as _voltroApiKeysTable, zl as _voltroCdcOffsetsTable, Hl as _voltroDataTransfersTable, Kn as _voltroDevicesTable, Ft as _voltroIdempotencyTable, Ht as _voltroKvTable, On as _voltroMigrationPlansTable, gn as _voltroMigrationsTable, Bl as _voltroMssqlCdcOffsetsTable, Xt as _voltroPluginMigrationsTable, Fn as _voltroReplaceInProgressTable, Kt as _voltroReplicaObservationsTable, yt as _voltroSchemaOwnerTable, Xn as _voltroSeedsTable, sr as _voltroTenantSelectionsTable, uo as actorsTable, Cc as admitBranch, er as agedSoftDropSnapshots, En as allEnumRenames, Oi as allRegisteredRelations, Zn as allRegisteredTables, dt as and, Ji as applyJsonPatch, vn as array, gt as arrayContains, Be as arrayHas, e as arrayOverlaps, Qi as attachEagerLoads, Do as attributionFields, jo as attributionKey, Uc as auditAllTableIndexes, Hc as auditTableIndexes, w as authoredError, ft as authoredMessageOf, ye as avg, ht as avgOver, zo as beginLocalWrite, Qt as bigint, Lc as bindResidentStore, Jt as boolean, sc as branchNamespaceName, sl as bulkInsertLimitsFor, xt as bytes, _t as causeBranches, ho as changeDelete, vo as changeDigest, po as changeInsert, go as changeSoftDelete, mo as changeUpdate, ll as chunkRowsForInsert, Po as claimPendingAttribution, Ve as classifyConstraintViolation, Bn as clearEnumRenames, Ho as clearPendingAttribution, Ai as clearRelationsRegistry, Nc as clearResidencyConfig, Nl as clearRetentions, cr as clearTableRegistry, Zo as clearWriteRecorders, H as coercePredicateForSqlite, dn as coercePredicateValue, o as coercePredicateValues, Ee as coerceValueForSqlite, Vt as collectSubqueries, pt as column, Ke as columnRef, ii as columnSchema, cl as columnsPerRow, m as compareDecimal, ca as compileEagerJson, Yi as compileJsonPatch, E as compilePredicate, et as compileRawFragment, re as compileRowProjection, v as compileSelect, yo as composeChangeKey, rc as computeEmbedding, Tl as connectionIdentity, Gn as contains, vt as count, He as countDistinct, Qn as crdtDoc, lr as crdtManagedColumns, kt as crdtManagedColumnsOf, ar as crdtText, Eo as currentWriteAttribution, n as databaseHandle, Ye as date, p as dbEnum, gs as dbMetricTagCacheSizeForTests, ys as dbOperationsInFlight, nr as decimal, Nt as declareEnumRename, Jr as decodeFieldValue, st as decodeRowsForTable, pe as decodeRowsFromSchema, ei as decryptFieldsOnRead, Xc as defineMigration, Re as defineMixin, tt as defineSeed, nl as deleteTenantSelection, zt as denseRank, Ri as deriveSubjectGraph, we as deriveTypeIdPrefix, qo as derivedRowId, Jo as derivedRowIdLength, Ze as describeAgedSoftDropSnapshots, t as describeCharsetRefusal, Bt as describeDriverError, Wn as describeRowBindings, Ul as describeTransferRun, Rr as deserializeArraysOnRead, lt as drainIdentifierWarnings, $e as dropped, Kr as encodeFieldValue, it as encodeRowForSchema, $r as encryptFieldsForWrite, Zr as encryptedColumnsOf, Bo as endLocalWrite, bc as enforceBranchLimits, Ot as ensureTableRegistered, Cn as eq, Ie as escapeLike, Rn as evaluatePredicate, Un as except, rn as exists, qs as expires, fo as externalChangeEvent, Sn as extractDbCause, Vr as fieldBinding, ct as fireSchemaChangeSeeds, ce as fireTenantCreateSeeds, Jc as formatIndexAuditIssue, zi as formatSubjectGraph, Dt as frameworkTables, We as generateId, c as generateSnowflake, ne as geography, _ as geometry, mn as getEnumRenames, Di as getRelation, Ei as getRelations, Mc as getResidencyConfig, ir as getTable, Et as gt, Dn as gte, sa as hasEagerLoads, nc as hybridSearch, x as id, Vn as inSet, Pt as inSubquery, _i as inferForeignKey, gl as insertIgnoreRowOutcome, pl as insertManyRows, fl as insertRow, un as integer, en as interruptedReplaceRefusal, xn as intersect, a as interval, dr as irreversible, s as irreversibleReason, Hr as isBoundCiphertext, cc as isBranchNamespace, mr as isColumnReference, Wi as isCompositeRowKey, fi as isEmptyRelationsSpec, Gr as isEncrypted, Wr as isFieldDecryptionError, at as isFileMigration, Ln as isForeignKeyViolation, ee as isFrameworkOwnedLiveTable, Xs as isLocalFirst, Zc as isMigrationDefinition, g as isMysqlFamily, mc as isNeonConnection, hn as isNotNull, Yn as isNull, xl as isPrimaryKeyConflictError, nn as isQueryTimeout, Yr as isRawEncoding, Fc as isRegionServable, pi as isRelationsSpec, be as isSeedDefinition, h as isSoftDropSnapshotName, Fe as isSqliteFamily, Pe as isStagingTableName, Je as isTableReactive, Ps as isTransactionAbortedError, Ws as isTransientContention, ut as isView, sn as json, Rt as jsonField, on as jsonIndex, Gi as jsonPatchAssignments, In as lag, tn as lead, Al as listRetentionConflicts, Ml as listRetentions, Ys as localFirst, Zs as localFirstTables, Gt as lt, jn as lte, Ts as makeEagerFallbackReporter, Dc as makeNamespaceBranchExecutor, Ms as makeTransactionAbortTracker, hi as many, gi as manyToMany, Oe as materializeFields, wt as max, de as migration, Tn as min, dl as missingConflictColumns, ul as missingRequiredColumns, ae as mixin, yn as neq, dc as nextBranchState, wl as normaliseTarget, qi as normalizeJsonPatchValue, $t as not, Yt as notExists, St as notInSet, $n as notInSubquery, Me as numeric, xs as observeDbOp, wo as occurrenceWindowMs, mi as one, Zi as oneCardinalityMessage, ur as or, T as orderClausesOf, Mt as paginateBy, pn as paginateById, bo as parseChangeKey, Uo as pendingAttributionCount, S as persistedColumns, vc as planBranch, fc as planBranchProvision, pc as planBranchTeardown, yc as planBranchTeardownFor, gc as planNeonBranchProvision, _c as planNeonBranchTeardown, hr as planVersionedUpdate, Jn as pluginRef, Lt as pluginRefSpecOf, bl as primaryKeyConflictError, xc as provisionBranch, Rc as provisionResidentTenant, Ne as qualifyTable, qn as queryFor, ue as queryForView, ln as quoteIdent, yl as raiseChangeListenerCeiling, It as rank, oe as raw, el as readTenantSelection, ge as readableByColumns, Te as real, bs as recordDbOp, ns as recordsTable, Ge as reference, ni as refuseWrite, oo as registerCoreTables, Ti as registerDiscoveredRelations, No as registerPendingAttribution, wi as registerRelations, jl as registerRetention, f as registerTable, Yo as registerWriteRecorder, di as relations, co as requireActors, tr as requireTable, lo as requireTenants, hs as resetDbMetricTagCacheForTests, ot as resetSnowflake, Ic as residentPlacement, Pr as resolveActorSnapshot, hc as resolveBranchMechanism, ws as resolveEagerFallbackWarnIntervalMs, Vo as resolveEchoAttribution, Ut as resolveFullTextIndex, fr as resolveIdScheme, he as resolveMixinGraph, Pc as resolveTenantHome, ze as resolveTenantNamespace, Ll as retentionTtlMsFromEnv, Hi as rowKeyColumns, Ui as rowKeyIdentity, kn as rowNumber, ai as rowSchema, As as runRetryingTransaction, Ns as runSavepoint, Is as runStoreTransaction, To as runWithWriteAttribution, rs as runWriteRecorders, El as sameDatabase, se as sanitizeIdentifierFragment, Kl as scopeKeyOf, pr as selfReference, Lr as serializeArraysForWrite, l as serverOnlyColumns, jc as setResidencyConfig, Mn as setSchemaChangeSeedHook, _e as setTenantCreateSeedHook, Es as settleTransactionExit, vr as settleVersionedUpdate, r as softDropSnapshotStamp, At as spatialPredicate, Ct as stagingLeftoverReport, wn as stagingLeftovers, zn as stagingNamesOf, jt as stagingStaleAfterMs, il as stampGeneratedId, al as stampGeneratedIds, or as startsWith, ri as storeRefusalOf, tc as streamTable, _n as sum, Zt as sumOver, $o as suspendWriteRecorders, es as suspendWriteRecordersEffect, Pl as sweepRetention, b as table, Sc as teardownBranch, $c as tenantSelectionId, C as text, y as timestamp, xr as timestampMs, _r as timestampMsOrNull, ks as transactionRetrySchedule, qt as union, bt as unionAll, Qe as unregisterTable, Xo as unregisterWriteRecorder, _l as updateManyRow, ml as upsertRow, hl as upsertRowOutcome, Vi as upsertUpdatePatch, Bi as upsertUpdateValues, le as validateColumnName, xe as validateIndexName, ki as validateRegisteredRelations, xi as validateRelationConfig, Nn as validateTableName, ve as validateTypeIdPrefix, rt as vector, je as vectorDistanceToOpclass, ic as vectorEmbedding, br as versionColumnOf, Se as view, Pn as viewSql, Xe as walkLeaves, Tt as wireSafeCause, Oo as withCapturedAttribution, ts as writeRecordersSuspended, tl as writeTenantSelection };
|