@voltro/database 0.64.0 → 0.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +161 -0
- package/dist/{frameworkLiveTables-BURogL9N.js → frameworkLiveTables-CWbTSnjk.js} +34 -21
- package/dist/index.d.ts +136 -20
- package/dist/index.js +887 -770
- package/dist/sql.d.ts +21 -6
- package/dist/sql.js +783 -688
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { $ as e, $t as t, A as n, At as r, B as i, Bt as a, C as o, Ct as s, D as c, Dt as l, E as u, Et as d, F as f, Ft as p, G as m, Gt as h, H as g, Ht 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, $t as t, A as n, At as r, B as i, Bt as a, C as o, Ct as s, D as c, Dt as l, E as u, Et as d, F as f, Ft as p, G as m, Gt as h, H as g, Ht as _, I as v, It as ee, J as te, Jt as y, K as ne, Kt as re, L as b, Lt as ie, M as x, Mt as ae, N as oe, Nt as se, O as ce, Ot as le, P as ue, Pt as de, Q as fe, Qt as pe, R as me, Rt as he, S as ge, St as _e, T as ve, Tt as ye, U as be, Ut as xe, V as Se, Vt as Ce, W as we, Wt as Te, X as Ee, Xt as S, Y as De, Yt as Oe, Z as C, Zt as ke, _ as Ae, _t as je, a as Me, an as w, at as Ne, b as Pe, bt as Fe, c as Ie, ct as T, d as Le, dt as Re, en as ze, et as Be, f as Ve, ft as He, g as Ue, gt as We, h as Ge, ht as Ke, i as qe, in as Je, it as Ye, j as Xe, jt as Ze, k as Qe, kt as $e, l as et, lt as tt, m as nt, mt as rt, n as it, nn as at, nt as ot, o as st, on as E, ot as ct, p as lt, pt as ut, q as dt, qt as D, r as ft, rn as pt, rt as mt, s as ht, sn as gt, st as _t, t as vt, tn as yt, tt as bt, u as xt, ut as St, v as Ct, vt as wt, w as Tt, wt as Et, x as Dt, xt as Ot, y as O, yt as kt, z as At, zt as jt } from "./frameworkLiveTables-CWbTSnjk.js";
|
|
2
|
+
import { a as Mt, i as Nt, n as Pt, o as Ft, r as It, s as Lt, t as Rt } from "./wire-B28cPjEp.js";
|
|
3
|
+
import { Cause as zt, Chunk as Bt, Data as Vt, Effect as k, Exit as Ht, Metric as A, MetricBoundaries as Ut, Option as j, Runtime as Wt, Schedule as Gt, Schema as M, Stream as Kt } from "effect";
|
|
4
|
+
import { createHash as qt } from "node:crypto";
|
|
5
|
+
import { AsyncLocalStorage as Jt } from "node:async_hooks";
|
|
6
|
+
import { TransactionConnection as Yt } from "@effect/sql/SqlClient";
|
|
7
|
+
import { ansi as N } from "@voltro/logger";
|
|
8
|
+
import { SqlClient as Xt } from "@effect/sql";
|
|
9
9
|
//#region src/actorSnapshot.ts
|
|
10
|
-
var
|
|
10
|
+
var Zt = (e) => typeof e == "string" && e !== "" ? e : null, Qt = 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 Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = 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: Zt(r.kind) ?? n,
|
|
27
|
+
displayName: Zt(r.displayName),
|
|
28
|
+
email: Zt(r.email)
|
|
29
29
|
};
|
|
30
30
|
} catch {
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
|
-
},
|
|
33
|
+
}, $t = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", en = (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
|
+
}, tn = (e, t, n) => {
|
|
38
|
+
if (!$t(n) || !t) return e;
|
|
39
|
+
let r = en(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 Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = 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
|
+
}, nn = (e, t, n) => {
|
|
48
|
+
if (!$t(n) || !t) return e;
|
|
49
|
+
let r = en(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 Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
58
58
|
}
|
|
59
59
|
return t ?? e;
|
|
60
60
|
});
|
|
61
|
-
},
|
|
61
|
+
}, rn = "enc:v1:", an = "enc:v2:", on = (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
|
+
}, sn = (e) => typeof e == "string" && e.startsWith("enc:v2:"), cn = class extends Error {
|
|
68
68
|
_tag = "FieldDecryptionError";
|
|
69
69
|
table;
|
|
70
70
|
column;
|
|
@@ -72,7 +72,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = 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
|
+
}, ln = (e) => typeof e == "object" && !!e && e._tag === "FieldDecryptionError", un = (e) => typeof e == "string" && (e.startsWith("enc:v1:") || e.startsWith("enc:v2:")), dn = (e, t, n) => e.encrypt(JSON.stringify(t), n), fn = /* @__PURE__ */ new Set([
|
|
76
76
|
"text",
|
|
77
77
|
"id",
|
|
78
78
|
"reference",
|
|
@@ -80,51 +80,51 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
80
80
|
"uuid",
|
|
81
81
|
"email",
|
|
82
82
|
"url"
|
|
83
|
-
]),
|
|
83
|
+
]), pn = (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 || fn.has(n) ? i : a;
|
|
91
|
+
}, mn = (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 || fn.has(n) ? !0 : void 0;
|
|
95
95
|
} catch {
|
|
96
96
|
return !0;
|
|
97
97
|
}
|
|
98
|
-
},
|
|
98
|
+
}, hn = (e, t) => e.fields[t]?.type, gn = (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
|
+
}, _n = "id", vn = (e, t, n, r) => {
|
|
103
103
|
if (!t) return e;
|
|
104
|
-
let i =
|
|
104
|
+
let i = gn(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[_n], s = { ...e };
|
|
107
107
|
for (let e of i) {
|
|
108
108
|
let t = s[e];
|
|
109
|
-
if (!(t == null ||
|
|
109
|
+
if (!(t == null || un(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)`);
|
|
111
|
-
s[e] =
|
|
111
|
+
s[e] = dn(n, t, on(a, e, o));
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
return s;
|
|
115
|
-
},
|
|
115
|
+
}, yn = (e, t, n, r) => {
|
|
116
116
|
if (!t) return e;
|
|
117
|
-
let i =
|
|
117
|
+
let i = gn(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 (un(i)) {
|
|
125
125
|
s ??= { ...e };
|
|
126
126
|
try {
|
|
127
|
-
s[c] =
|
|
127
|
+
s[c] = pn(n, i, hn(t, c), on(o, c, r?.rowId ?? e[_n]));
|
|
128
128
|
} catch (e) {
|
|
129
129
|
let t = String(e?.message ?? e);
|
|
130
130
|
if (a === "null") {
|
|
@@ -135,7 +135,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
135
135
|
});
|
|
136
136
|
continue;
|
|
137
137
|
}
|
|
138
|
-
throw new
|
|
138
|
+
throw new cn({
|
|
139
139
|
table: o,
|
|
140
140
|
column: c,
|
|
141
141
|
reason: t
|
|
@@ -145,30 +145,30 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
145
145
|
}
|
|
146
146
|
return s ?? e;
|
|
147
147
|
});
|
|
148
|
-
},
|
|
148
|
+
}, bn = (e) => {
|
|
149
149
|
let t = e;
|
|
150
|
-
for (let e = 0; e < 4 &&
|
|
150
|
+
for (let e = 0; e < 4 && Wt.isFiberFailure(t); e++) t = zt.squash(t[Wt.FiberFailureCauseId]);
|
|
151
151
|
return t;
|
|
152
|
-
},
|
|
153
|
-
if (t >= 4 || !
|
|
154
|
-
let n = e[
|
|
155
|
-
if (r.length === 0) return [
|
|
152
|
+
}, xn = (e, t = 0) => {
|
|
153
|
+
if (t >= 4 || !Wt.isFiberFailure(e)) return [e];
|
|
154
|
+
let n = e[Wt.FiberFailureCauseId], r = [...zt.failures(n), ...zt.defects(n)];
|
|
155
|
+
if (r.length === 0) return [zt.squash(n)];
|
|
156
156
|
let i = [];
|
|
157
|
-
for (let e of r.slice(0, 8)) i.push(...
|
|
157
|
+
for (let e of r.slice(0, 8)) i.push(...xn(e, t + 1));
|
|
158
158
|
return i;
|
|
159
159
|
}, Sn = (e) => e.dbCode !== void 0 || e.dbErrno !== void 0 || e.dbNumber !== void 0 || e.dbSqlState !== void 0 || e.dbConstraint !== void 0, Cn = (e) => {
|
|
160
|
-
let t = {}, n = [], r =
|
|
160
|
+
let t = {}, n = [], r = bn(e);
|
|
161
161
|
for (let e = 0; e < 8 && typeof r == "object" && r; e++) {
|
|
162
162
|
let e = r;
|
|
163
163
|
t.dbCode === void 0 && (typeof e.code == "string" || typeof e.code == "number") && (t.dbCode = e.code), t.dbErrno === void 0 && typeof e.errno == "number" && (t.dbErrno = e.errno), t.dbNumber === void 0 && typeof e.number == "number" && (t.dbNumber = e.number), t.dbSqlState === void 0 && typeof e.sqlState == "string" && (t.dbSqlState = e.sqlState), t.dbBindings === void 0 && typeof e.voltroBindings == "string" && (t.dbBindings = e.voltroBindings), t.dbStatement === void 0 && typeof e.sql == "string" && e.sql.includes("?") && (t.dbStatement = e.sql, t.dbPlaceholders = (e.sql.match(/\?/g) ?? []).length), t.dbFatal === void 0 && typeof e.fatal == "boolean" && (t.dbFatal = e.fatal), t.dbConstraint === void 0 && typeof e.constraint == "string" && (t.dbConstraint = e.constraint), t.dbTable === void 0 && typeof e.table == "string" && (t.dbTable = e.table), t.dbColumn === void 0 && typeof e.column == "string" && (t.dbColumn = e.column), t.dbSchema === void 0 && typeof e.schema == "string" && (t.dbSchema = e.schema);
|
|
164
164
|
let i = e.sqlMessage ?? e.detail;
|
|
165
165
|
t.dbMessage === void 0 && typeof i == "string" && (t.dbMessage = i);
|
|
166
166
|
let a = typeof e.constructor == "function" ? e.constructor.name : void 0, o = typeof e._tag == "string" && e._tag || typeof e.name == "string" && e.name || (typeof a == "string" && a !== "Object" ? a : void 0), s = typeof e.message == "string" ? e.message : void 0;
|
|
167
|
-
(o || s) && n.push(`${o || "Error"}${s ? `: ${s.slice(0, 200)}` : ""}`), r =
|
|
167
|
+
(o || s) && n.push(`${o || "Error"}${s ? `: ${s.slice(0, 200)}` : ""}`), r = bn(e.cause);
|
|
168
168
|
}
|
|
169
169
|
return n.length > 0 && (t.dbCauseChain = n.join(" ← "), t.dbMessage === void 0 && (t.dbMessage = n[n.length - 1])), t;
|
|
170
170
|
}, wn = (e) => {
|
|
171
|
-
let t =
|
|
171
|
+
let t = xn(e).map(Cn);
|
|
172
172
|
if (t.length <= 1) return t[0] ?? {};
|
|
173
173
|
let n = t.find(Sn) ?? t[0], r = t.filter((e) => e !== n).map((e) => e.dbCauseChain).filter((e) => typeof e == "string");
|
|
174
174
|
if (r.length === 0) return n;
|
|
@@ -177,12 +177,23 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
177
177
|
...n,
|
|
178
178
|
dbCauseChain: [i, ...r].filter(Boolean).join(" ‖ ")
|
|
179
179
|
};
|
|
180
|
-
}, Tn =
|
|
180
|
+
}, Tn = (e, t) => {
|
|
181
|
+
let n = wn(e), r = jn(n, t);
|
|
182
|
+
if (r !== void 0) {
|
|
183
|
+
let e = r.constraint ?? r.column;
|
|
184
|
+
return e === void 0 ? r.kind : `${r.kind}: ${e}`;
|
|
185
|
+
}
|
|
186
|
+
let i = n.dbCode ?? n.dbSqlState ?? n.dbErrno ?? n.dbNumber, a = On(e);
|
|
187
|
+
return i !== void 0 && En.test(String(i)) ? `${a} (${String(i)})` : a;
|
|
188
|
+
}, En = /^[A-Za-z0-9_]{1,32}$/, Dn = /^[A-Za-z_][A-Za-z0-9_]{0,63}$/, On = (e) => {
|
|
189
|
+
let t = e?._tag, n = e?.name, r = (typeof t == "string" ? t : typeof n == "string" ? n : "").split(/[^A-Za-z0-9_]+/).filter(Boolean).pop();
|
|
190
|
+
return r !== void 0 && Dn.test(r) ? r : "unknown";
|
|
191
|
+
}, kn = /^[A-Za-z_][A-Za-z0-9_$]*$/, P = (e) => e !== void 0 && e.length <= 128 && kn.test(e) ? e : void 0, An = (e) => e === void 0 ? void 0 : e.split(".").pop() ?? e, F = (e, ...t) => {
|
|
181
192
|
for (let n of t) {
|
|
182
193
|
let t = n.exec(e);
|
|
183
194
|
if (t?.[1] !== void 0) return t[1];
|
|
184
195
|
}
|
|
185
|
-
},
|
|
196
|
+
}, jn = (e, t) => {
|
|
186
197
|
let n = e.dbCode, r = e.dbErrno, i = e.dbNumber, a = typeof e.dbMessage == "string" ? e.dbMessage : "", o = `${typeof e.dbCauseChain == "string" ? e.dbCauseChain : ""} ${a}`;
|
|
187
198
|
if (n === "23503") {
|
|
188
199
|
let t = P(e.dbConstraint);
|
|
@@ -220,7 +231,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
220
231
|
};
|
|
221
232
|
}
|
|
222
233
|
if (r === 1062) {
|
|
223
|
-
let e = P(
|
|
234
|
+
let e = P(An(F(o, /for key '([^']+)'/)));
|
|
224
235
|
return {
|
|
225
236
|
kind: "unique",
|
|
226
237
|
...e === void 0 ? {} : { constraint: e }
|
|
@@ -271,14 +282,14 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
271
282
|
}
|
|
272
283
|
if (n === "SQLITE_CONSTRAINT_FOREIGNKEY") return { kind: t === "delete" || t === "deleteMany" || t === "hardDelete" ? "foreignKeyInUse" : "foreignKey" };
|
|
273
284
|
if (n === "SQLITE_CONSTRAINT_UNIQUE" || n === "SQLITE_CONSTRAINT_PRIMARYKEY") {
|
|
274
|
-
let e = P(
|
|
285
|
+
let e = P(An(F(o, /UNIQUE constraint failed: ([^,\s]+)/)));
|
|
275
286
|
return {
|
|
276
287
|
kind: "unique",
|
|
277
288
|
...e === void 0 ? {} : { column: e }
|
|
278
289
|
};
|
|
279
290
|
}
|
|
280
291
|
if (n === "SQLITE_CONSTRAINT_NOTNULL") {
|
|
281
|
-
let e = P(
|
|
292
|
+
let e = P(An(F(o, /NOT NULL constraint failed: ([^,\s]+)/)));
|
|
282
293
|
return {
|
|
283
294
|
kind: "notNull",
|
|
284
295
|
...e === void 0 ? {} : { column: e }
|
|
@@ -291,13 +302,13 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
291
302
|
...e === void 0 ? {} : { constraint: e }
|
|
292
303
|
};
|
|
293
304
|
}
|
|
294
|
-
},
|
|
295
|
-
let t =
|
|
305
|
+
}, Mn = (e) => {
|
|
306
|
+
let t = jn(e)?.kind;
|
|
296
307
|
return t === "foreignKey" || t === "foreignKeyInUse";
|
|
297
|
-
},
|
|
308
|
+
}, Nn = (e) => {
|
|
298
309
|
let t = e.dbCode, n = e.dbErrno;
|
|
299
310
|
return t === "57014" || n === 3024 || n === 1969 || t === "ETIMEOUT" || t === "SQLITE_INTERRUPT";
|
|
300
|
-
},
|
|
311
|
+
}, Pn = (e) => {
|
|
301
312
|
let t = wn(e), n = [
|
|
302
313
|
t.dbCode === void 0 ? void 0 : `code=${String(t.dbCode)}`,
|
|
303
314
|
t.dbErrno === void 0 ? void 0 : `errno=${String(t.dbErrno)}`,
|
|
@@ -307,7 +318,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
307
318
|
t.dbPlaceholders === void 0 ? void 0 : `placeholders=${String(t.dbPlaceholders)}`
|
|
308
319
|
].filter((e) => e !== void 0), r = typeof e?.message == "string" ? e.message : void 0, i = typeof t.dbMessage == "string" ? t.dbMessage : void 0, a = i === void 0 ? void 0 : n.length > 0 || i !== r && i !== `Error: ${String(r)}` ? i : void 0, o = typeof t.dbBindings == "string" ? `\n bindings: ${t.dbBindings}` : "", s = typeof t.dbStatement == "string" ? `\n statement: ${t.dbStatement.length <= 400 ? t.dbStatement : `${t.dbStatement.slice(0, 400)}…`}` : "";
|
|
309
320
|
if (a !== void 0 || n.length !== 0) return [a, n.length > 0 ? `[${n.join(" ")}]` : void 0].filter((e) => e !== void 0 && e !== "").join(" ") + s + o;
|
|
310
|
-
},
|
|
321
|
+
}, Fn = (e) => Object.entries(e).map(([e, t]) => `${e}:${In(t)}`).join(" "), In = (e) => {
|
|
311
322
|
if (e === null) return "null";
|
|
312
323
|
if (e === void 0) return "undefined";
|
|
313
324
|
if (typeof e == "bigint") return "bigint";
|
|
@@ -317,77 +328,77 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
317
328
|
if (globalThis.Buffer !== void 0 && globalThis.Buffer.isBuffer(e)) return "Buffer";
|
|
318
329
|
let t = e.constructor?.name;
|
|
319
330
|
return typeof t == "string" && t !== "" ? t : "Object";
|
|
320
|
-
},
|
|
331
|
+
}, Ln = Symbol.for("@voltro/database/storeRefusal"), Rn = (e) => {
|
|
321
332
|
let t = Error(e.detail);
|
|
322
|
-
return Object.defineProperty(t,
|
|
333
|
+
return Object.defineProperty(t, Ln, {
|
|
323
334
|
value: e,
|
|
324
335
|
enumerable: !1
|
|
325
336
|
}), t;
|
|
326
|
-
},
|
|
327
|
-
for (let t of
|
|
337
|
+
}, zn = (e) => {
|
|
338
|
+
for (let t of xn(e)) {
|
|
328
339
|
let e = t;
|
|
329
340
|
for (let t = 0; e != null && t < 8; t += 1) {
|
|
330
|
-
let t = e[
|
|
341
|
+
let t = e[Ln];
|
|
331
342
|
if (t !== void 0) return t;
|
|
332
343
|
e = e.cause;
|
|
333
344
|
}
|
|
334
345
|
}
|
|
335
|
-
},
|
|
346
|
+
}, Bn = (e) => {
|
|
336
347
|
let t = (() => {
|
|
337
348
|
switch (e.type) {
|
|
338
|
-
case "id":
|
|
339
|
-
case "reference":
|
|
349
|
+
case "id": return e.idScheme?.kind === "numeric" ? M.Number : M.String;
|
|
340
350
|
case "text":
|
|
341
|
-
case "enum": return
|
|
351
|
+
case "enum": return M.String;
|
|
352
|
+
case "reference": return e.referenceStorage === "numeric" ? M.Number : M.String;
|
|
342
353
|
case "integer":
|
|
343
354
|
case "real":
|
|
344
|
-
case "decimal": return
|
|
345
|
-
case "boolean": return
|
|
355
|
+
case "decimal": return M.Number;
|
|
356
|
+
case "boolean": return M.Boolean;
|
|
346
357
|
case "timestamp":
|
|
347
|
-
case "date": return
|
|
348
|
-
case "bigint": return
|
|
349
|
-
case "bytes": return
|
|
350
|
-
case "array": return
|
|
351
|
-
case "interval": return
|
|
352
|
-
default: return
|
|
358
|
+
case "date": return Rt;
|
|
359
|
+
case "bigint": return M.BigInt;
|
|
360
|
+
case "bytes": return M.Uint8ArrayFromBase64;
|
|
361
|
+
case "array": return M.Array(M.Unknown);
|
|
362
|
+
case "interval": return M.String;
|
|
363
|
+
default: return M.Unknown;
|
|
353
364
|
}
|
|
354
365
|
})();
|
|
355
|
-
return e.nullable === !0 ?
|
|
356
|
-
},
|
|
366
|
+
return e.nullable === !0 ? M.NullOr(t) : t;
|
|
367
|
+
}, Vn = (e, t) => {
|
|
357
368
|
let n = new Set(t?.omit ?? []), r = {};
|
|
358
|
-
for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] =
|
|
359
|
-
return
|
|
360
|
-
},
|
|
369
|
+
for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] = Bn(i));
|
|
370
|
+
return M.Struct(r);
|
|
371
|
+
}, Hn = (e) => typeof e == "function" ? e : () => e, Un = (e, t) => ({
|
|
361
372
|
kind: "one",
|
|
362
|
-
target:
|
|
373
|
+
target: Hn(e),
|
|
363
374
|
...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
|
|
364
375
|
...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
|
|
365
|
-
}),
|
|
376
|
+
}), Wn = (e, t) => ({
|
|
366
377
|
kind: "many",
|
|
367
|
-
target:
|
|
378
|
+
target: Hn(e),
|
|
368
379
|
...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
|
|
369
380
|
...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
|
|
370
|
-
}),
|
|
381
|
+
}), Gn = (e, t) => ({
|
|
371
382
|
kind: "manyToMany",
|
|
372
|
-
target:
|
|
373
|
-
through:
|
|
383
|
+
target: Hn(e),
|
|
384
|
+
through: Hn(t.through),
|
|
374
385
|
sourceKey: t.sourceKey,
|
|
375
386
|
targetKey: t.targetKey
|
|
376
|
-
}),
|
|
377
|
-
one:
|
|
378
|
-
many:
|
|
379
|
-
manyToMany:
|
|
380
|
-
},
|
|
387
|
+
}), Kn = {
|
|
388
|
+
one: Un,
|
|
389
|
+
many: Wn,
|
|
390
|
+
manyToMany: Gn
|
|
391
|
+
}, qn = (e, t) => {
|
|
381
392
|
let n = typeof e == "function" ? e : () => e;
|
|
382
393
|
return {
|
|
383
394
|
source: n,
|
|
384
|
-
relations: t(
|
|
395
|
+
relations: t(Kn, n())
|
|
385
396
|
};
|
|
386
|
-
},
|
|
397
|
+
}, Jn = (e) => {
|
|
387
398
|
if (typeof e != "object" || !e) return !1;
|
|
388
399
|
let t = e;
|
|
389
400
|
return typeof t.source != "function" || typeof t.relations != "object" || t.relations === null ? !1 : Object.keys(t.relations).length === 0;
|
|
390
|
-
},
|
|
401
|
+
}, Yn = (e) => {
|
|
391
402
|
if (typeof e != "object" || !e) return !1;
|
|
392
403
|
let t = e;
|
|
393
404
|
if (typeof t.source != "function" || typeof t.relations != "object" || t.relations === null) return !1;
|
|
@@ -396,32 +407,32 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
396
407
|
let t = e?.kind;
|
|
397
408
|
return t === "one" || t === "many" || t === "manyToMany";
|
|
398
409
|
});
|
|
399
|
-
},
|
|
410
|
+
}, Xn = Un, Zn = Wn, Qn = Gn, $n = (e, t, n) => {
|
|
400
411
|
let r = [];
|
|
401
412
|
for (let [n, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && r.push(n);
|
|
402
413
|
if (r.length === 0) throw Error(`relation '${n}': no reference() column on '${e.tableName}' points at '${t}'. Either add one or pass an explicit { foreignKey: '<column>' }.`);
|
|
403
414
|
if (r.length > 1) throw Error(`relation '${n}': multiple reference() columns on '${e.tableName}' point at '${t}' (${r.join(", ")}). Pass an explicit { foreignKey: '<column>' } to disambiguate.`);
|
|
404
415
|
return r[0];
|
|
405
|
-
},
|
|
406
|
-
let t =
|
|
416
|
+
}, er = (e) => Object.keys(e.fields), tr = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), nr = (e) => {
|
|
417
|
+
let t = er(e);
|
|
407
418
|
return t.length === 0 ? "<none>" : t.join(", ");
|
|
408
|
-
},
|
|
419
|
+
}, rr = (e, t, n) => {
|
|
409
420
|
let r = `relation '${t}' on '${e.tableName}'`, i = n.target();
|
|
410
421
|
if (n.kind === "manyToMany") {
|
|
411
422
|
let t = n.through();
|
|
412
|
-
for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!
|
|
423
|
+
for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!tr(t, o)) throw Error(`${r}: manyToMany ${a} '${o}' is not a column on the junction table '${t.tableName}'. Both keys name columns on the JUNCTION — ${a === "sourceKey" ? `sourceKey points at '${e.tableName}'` : `targetKey points at '${i.tableName}'`}. Columns on '${t.tableName}': ${nr(t)}.`);
|
|
413
424
|
return;
|
|
414
425
|
}
|
|
415
426
|
if (n.sourceKey !== void 0 && n.foreignKey !== void 0) throw Error(`${r}: pass EITHER sourceKey OR foreignKey, not both. sourceKey '${n.sourceKey}' names a column on the source ('${e.tableName}') holding the target's id; foreignKey '${n.foreignKey}' names a column on the target ('${i.tableName}') holding the source's id. With both, foreignKey is ignored.`);
|
|
416
|
-
if (n.sourceKey !== void 0 && !
|
|
417
|
-
let t =
|
|
418
|
-
throw Error(`${r}: sourceKey '${n.sourceKey}' is not a column on the source table '${e.tableName}'.` + (t ? ` It IS a column on the target '${i.tableName}' — you probably want { foreignKey: '${n.sourceKey}' }, which names the column on the TARGET that holds this table's id.` : ` Columns on '${e.tableName}': ${
|
|
427
|
+
if (n.sourceKey !== void 0 && !tr(e, n.sourceKey)) {
|
|
428
|
+
let t = tr(i, n.sourceKey);
|
|
429
|
+
throw Error(`${r}: sourceKey '${n.sourceKey}' is not a column on the source table '${e.tableName}'.` + (t ? ` It IS a column on the target '${i.tableName}' — you probably want { foreignKey: '${n.sourceKey}' }, which names the column on the TARGET that holds this table's id.` : ` Columns on '${e.tableName}': ${nr(e)}.`));
|
|
419
430
|
}
|
|
420
|
-
if (n.foreignKey !== void 0 && !
|
|
421
|
-
let t =
|
|
422
|
-
throw Error(`${r}: foreignKey '${n.foreignKey}' is not a column on the target table '${i.tableName}'.` + (t ? ` It IS a column on the source '${e.tableName}' — you want { sourceKey: '${n.foreignKey}' }. foreignKey names the column on the TARGET that points back at this table; sourceKey names the column on THIS table that holds the target's id.` : ` Columns on '${i.tableName}': ${
|
|
431
|
+
if (n.foreignKey !== void 0 && !tr(i, n.foreignKey)) {
|
|
432
|
+
let t = tr(e, n.foreignKey);
|
|
433
|
+
throw Error(`${r}: foreignKey '${n.foreignKey}' is not a column on the target table '${i.tableName}'.` + (t ? ` It IS a column on the source '${e.tableName}' — you want { sourceKey: '${n.foreignKey}' }. foreignKey names the column on the TARGET that points back at this table; sourceKey names the column on THIS table that holds the target's id.` : ` Columns on '${i.tableName}': ${nr(i)}.`));
|
|
423
434
|
}
|
|
424
|
-
},
|
|
435
|
+
}, ir = Symbol.for("@voltro/database/relationsRegistry"), ar = globalThis, I = ar[ir] ?? (ar[ir] = /* @__PURE__ */ new Map()), or = (e) => {
|
|
425
436
|
let t = e.source(), n = I.get(t.tableName);
|
|
426
437
|
if (n === void 0) {
|
|
427
438
|
I.set(t.tableName, new Map(Object.entries(e.relations)));
|
|
@@ -434,14 +445,14 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
434
445
|
n.set(r, i);
|
|
435
446
|
}
|
|
436
447
|
}
|
|
437
|
-
},
|
|
448
|
+
}, sr = (e) => {
|
|
438
449
|
let t = 0;
|
|
439
|
-
for (let n of Object.values(e))
|
|
450
|
+
for (let n of Object.values(e)) Yn(n) && (or(n), t += 1);
|
|
440
451
|
return t;
|
|
441
|
-
},
|
|
452
|
+
}, cr = (e) => {
|
|
442
453
|
let t = I.get(e);
|
|
443
454
|
if (t !== void 0) return Object.fromEntries(t);
|
|
444
|
-
},
|
|
455
|
+
}, lr = (e, t) => I.get(e)?.get(t), ur = () => {
|
|
445
456
|
let e = [];
|
|
446
457
|
for (let [t, n] of I) for (let [r, i] of n) e.push({
|
|
447
458
|
source: t,
|
|
@@ -449,18 +460,18 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
449
460
|
relation: i
|
|
450
461
|
});
|
|
451
462
|
return e;
|
|
452
|
-
},
|
|
463
|
+
}, dr = () => {
|
|
453
464
|
for (let [e, t] of I) {
|
|
454
|
-
let n =
|
|
455
|
-
if (n !== void 0) for (let [e, r] of t)
|
|
465
|
+
let n = C(e);
|
|
466
|
+
if (n !== void 0) for (let [e, r] of t) rr(n, e, r);
|
|
456
467
|
}
|
|
457
|
-
},
|
|
468
|
+
}, fr = () => {
|
|
458
469
|
I.clear();
|
|
459
|
-
},
|
|
470
|
+
}, pr = 4, mr = (e) => Object.keys(e.fields), hr = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), gr = (e, t) => {
|
|
460
471
|
let n = [];
|
|
461
472
|
for (let [r, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && n.push(r);
|
|
462
473
|
return n;
|
|
463
|
-
},
|
|
474
|
+
}, _r = (e, t) => {
|
|
464
475
|
let n = [];
|
|
465
476
|
for (let r of t) {
|
|
466
477
|
if (r.source !== e) continue;
|
|
@@ -477,7 +488,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
477
488
|
} catch {
|
|
478
489
|
continue;
|
|
479
490
|
}
|
|
480
|
-
if (!
|
|
491
|
+
if (!hr(e, t.sourceKey)) continue;
|
|
481
492
|
n.push({
|
|
482
493
|
table: e.tableName,
|
|
483
494
|
foreignKey: t.sourceKey,
|
|
@@ -486,24 +497,29 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
486
497
|
continue;
|
|
487
498
|
}
|
|
488
499
|
if (t.sourceKey !== void 0) continue;
|
|
489
|
-
let a =
|
|
490
|
-
o === void 0 || !
|
|
500
|
+
let a = gr(i, e), o = t.foreignKey ?? (a.length === 1 ? a[0] : void 0);
|
|
501
|
+
if (o === void 0 || !hr(i, o)) continue;
|
|
502
|
+
let s = i.fields[o];
|
|
503
|
+
n.push({
|
|
491
504
|
table: i.tableName,
|
|
492
505
|
foreignKey: o,
|
|
493
|
-
parentKey: "id"
|
|
506
|
+
parentKey: s?.referenceColumn ?? "id"
|
|
494
507
|
});
|
|
495
508
|
}
|
|
496
509
|
return n;
|
|
497
|
-
},
|
|
510
|
+
}, vr = (e, t) => {
|
|
498
511
|
let n = [];
|
|
499
|
-
for (let r of t) if (r.tableName !== e) for (let t of
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
512
|
+
for (let r of t) if (r.tableName !== e) for (let t of gr(r, e)) {
|
|
513
|
+
let e = r.fields[t];
|
|
514
|
+
n.push({
|
|
515
|
+
table: r.tableName,
|
|
516
|
+
foreignKey: t,
|
|
517
|
+
parentKey: e?.referenceColumn ?? "id"
|
|
518
|
+
});
|
|
519
|
+
}
|
|
504
520
|
return n;
|
|
505
|
-
},
|
|
506
|
-
let t = e.tables ??
|
|
521
|
+
}, yr = (e) => `${e.table}\u0000${e.hops.map((e) => `${e.table}.${e.foreignKey}<-${e.parentKey}`).join("|")}`, br = (e) => {
|
|
522
|
+
let t = e.tables ?? te(), n = e.relations ?? ur(), r = e.maxDepth ?? 4, i = new Set(e.exclude ?? []), a = new Map(t.map((e) => [e.tableName, e])), o = [];
|
|
507
523
|
if (!a.has(e.subjectTable)) return {
|
|
508
524
|
subjectTable: e.subjectTable,
|
|
509
525
|
paths: [],
|
|
@@ -518,11 +534,11 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
518
534
|
hops: [],
|
|
519
535
|
depth: 0,
|
|
520
536
|
via: "relation"
|
|
521
|
-
}, c = [s], l = /* @__PURE__ */ new Set([
|
|
537
|
+
}, c = [s], l = /* @__PURE__ */ new Set([yr(s)]), u = /* @__PURE__ */ new Set(), d = [s];
|
|
522
538
|
for (let e = 1; e <= r; e++) {
|
|
523
539
|
let r = [];
|
|
524
540
|
for (let a of d) {
|
|
525
|
-
let s =
|
|
541
|
+
let s = _r(a.table, n), d = vr(a.table, t), f = [...s.map((e) => [e, "relation"]), ...d.map((e) => [e, "reference"])];
|
|
526
542
|
for (let [t, n] of f) {
|
|
527
543
|
if (i.has(t.table)) {
|
|
528
544
|
o.push({
|
|
@@ -540,7 +556,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
540
556
|
hops: [...a.hops, t],
|
|
541
557
|
depth: e,
|
|
542
558
|
via: n
|
|
543
|
-
}, f =
|
|
559
|
+
}, f = yr(d);
|
|
544
560
|
l.has(f) || (l.add(f), c.push(d), r.push(d));
|
|
545
561
|
}
|
|
546
562
|
}
|
|
@@ -550,7 +566,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
550
566
|
}
|
|
551
567
|
d = r;
|
|
552
568
|
}
|
|
553
|
-
for (let e of d) (
|
|
569
|
+
for (let e of d) (_r(e.table, n).length > 0 || vr(e.table, t).length > 0) && o.push({
|
|
554
570
|
kind: "depth-truncated",
|
|
555
571
|
table: e.table,
|
|
556
572
|
detail: `stopped at maxDepth ${r}; tables linked FROM '${e.table}' were not explored`
|
|
@@ -559,14 +575,14 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
559
575
|
for (let n of t) f.has(n.tableName) || i.has(n.tableName) || o.push({
|
|
560
576
|
kind: "unreachable",
|
|
561
577
|
table: n.tableName,
|
|
562
|
-
detail: `no relation() and no reference() column links '${n.tableName}' to '${e.subjectTable}'. If it holds subject data through a plain column, a polymorphic (type,id) pair, JSON or free text, add an explicit subjectScopes entry — this derivation cannot see it. Columns: ${
|
|
578
|
+
detail: `no relation() and no reference() column links '${n.tableName}' to '${e.subjectTable}'. If it holds subject data through a plain column, a polymorphic (type,id) pair, JSON or free text, add an explicit subjectScopes entry — this derivation cannot see it. Columns: ${mr(n).join(", ")}`
|
|
563
579
|
});
|
|
564
580
|
return {
|
|
565
581
|
subjectTable: e.subjectTable,
|
|
566
582
|
paths: c,
|
|
567
583
|
limitations: o
|
|
568
584
|
};
|
|
569
|
-
},
|
|
585
|
+
}, xr = (e) => {
|
|
570
586
|
let t = [`subject graph · ${e.subjectTable} · ${e.paths.length} table(s) reachable`];
|
|
571
587
|
for (let n of e.paths) {
|
|
572
588
|
let r = n.hops.length === 0 ? `${e.subjectTable} (the subject row itself)` : [e.subjectTable, ...n.hops.map((e) => `${e.table}.${e.foreignKey}`)].join(" → ");
|
|
@@ -574,7 +590,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
574
590
|
}
|
|
575
591
|
let n = e.limitations.filter((e) => e.kind === "depth-truncated"), r = e.limitations.filter((e) => e.kind === "unreachable"), i = e.limitations.filter((e) => e.kind === "excluded");
|
|
576
592
|
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");
|
|
577
|
-
},
|
|
593
|
+
}, Sr = (e) => e == null || typeof e == "boolean" ? e : typeof e == "number" ? e !== 0 : typeof e == "bigint" ? e !== 0n : typeof e == "string" ? e === "1" || e.toLowerCase() === "true" : e, Cr = (e) => {
|
|
578
594
|
if (e == null || typeof e != "string") return e;
|
|
579
595
|
let t = e.trim();
|
|
580
596
|
if (t.length === 0) return e;
|
|
@@ -585,7 +601,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
585
601
|
} catch {
|
|
586
602
|
return e;
|
|
587
603
|
}
|
|
588
|
-
},
|
|
604
|
+
}, wr = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, Tr = (e) => {
|
|
589
605
|
if (e == null || e instanceof Date) return e;
|
|
590
606
|
if (typeof e == "string") {
|
|
591
607
|
let t = new Date(e);
|
|
@@ -596,21 +612,21 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
596
612
|
return isNaN(t.getTime()) ? e : t;
|
|
597
613
|
}
|
|
598
614
|
return e;
|
|
599
|
-
},
|
|
615
|
+
}, Er = (e, t, n) => {
|
|
600
616
|
if (e == null) return e;
|
|
601
617
|
switch (t) {
|
|
602
|
-
case "boolean": return n === "postgres" ? e :
|
|
618
|
+
case "boolean": return n === "postgres" ? e : Sr(e);
|
|
603
619
|
case "json":
|
|
604
|
-
case "array": return n === "postgres" ? e :
|
|
620
|
+
case "array": return n === "postgres" ? e : Cr(e);
|
|
605
621
|
case "timestamp":
|
|
606
|
-
case "date": return n === "sqlite" || n === "turso" ?
|
|
622
|
+
case "date": return n === "sqlite" || n === "turso" ? Tr(e) : e;
|
|
607
623
|
case "decimal":
|
|
608
|
-
case "bigint": return
|
|
624
|
+
case "bigint": return wr(e);
|
|
609
625
|
default: return e;
|
|
610
626
|
}
|
|
611
|
-
},
|
|
627
|
+
}, Dr = (e, t, n) => {
|
|
612
628
|
if (e.length === 0) return e;
|
|
613
|
-
let r =
|
|
629
|
+
let r = C(t);
|
|
614
630
|
if (r === void 0) return e;
|
|
615
631
|
let i = r.fields, a = [];
|
|
616
632
|
for (let [e, t] of Object.entries(i)) a.push({
|
|
@@ -619,36 +635,136 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
619
635
|
});
|
|
620
636
|
return e.map((e) => {
|
|
621
637
|
let t = { ...e };
|
|
622
|
-
for (let { key: e, type: r } of a) e in t && (t[e] =
|
|
638
|
+
for (let { key: e, type: r } of a) e in t && (t[e] = Er(t[e], r, n));
|
|
623
639
|
return t;
|
|
624
640
|
});
|
|
625
|
-
},
|
|
641
|
+
}, Or = (e, t) => {
|
|
626
642
|
if (e == null) return e;
|
|
627
643
|
switch (t) {
|
|
628
644
|
case "json":
|
|
629
645
|
case "array": return typeof e == "string" ? e : JSON.stringify(e);
|
|
630
646
|
default: return e;
|
|
631
647
|
}
|
|
632
|
-
},
|
|
633
|
-
let r =
|
|
648
|
+
}, kr = (e, t, n = ["json", "array"]) => {
|
|
649
|
+
let r = C(t);
|
|
634
650
|
if (r === void 0) return e;
|
|
635
651
|
let i = r.fields, a = null;
|
|
636
652
|
for (let [t, r] of Object.entries(i)) if (n.includes(r.type) && t in e) {
|
|
637
|
-
let n =
|
|
653
|
+
let n = Or(e[t], r.type);
|
|
638
654
|
n !== e[t] && (a === null && (a = { ...e }), a[t] = n);
|
|
639
655
|
}
|
|
640
656
|
return a ?? e;
|
|
641
|
-
},
|
|
657
|
+
}, Ar = (e) => Object.fromEntries(Object.entries(e.updateValues ?? {}).filter(([t, n]) => {
|
|
658
|
+
if (n === void 0) return !1;
|
|
659
|
+
if (t === "id" || e.conflictColumns.includes(t)) throw Error(`upsert: updateValues cannot rewrite row identity column '${t}'`);
|
|
660
|
+
return !0;
|
|
661
|
+
})), jr = (e, t, n) => {
|
|
662
|
+
let r = Ar(n);
|
|
663
|
+
if (typeof n.update == "function") return {
|
|
664
|
+
...n.update(t),
|
|
665
|
+
...r
|
|
666
|
+
};
|
|
667
|
+
let i = n.update ?? Object.keys(e).filter((e) => e !== "id" && !n.conflictColumns.includes(e));
|
|
668
|
+
return {
|
|
669
|
+
...Object.fromEntries(i.filter((t) => t in e).map((t) => [t, e[t]])),
|
|
670
|
+
...r
|
|
671
|
+
};
|
|
672
|
+
}, Mr = (e) => typeof e == "string" ? [["id", e]] : Object.entries(e).map(([e, t]) => [e, t]), Nr = (e) => {
|
|
673
|
+
if (typeof e == "string") return e;
|
|
674
|
+
let t = Object.entries(e);
|
|
675
|
+
return t.length === 1 ? String(t[0][1]) : t.slice().sort(([e], [t]) => e < t ? -1 : +(e > t)).map(([e, t]) => `${e}=${String(t)}`).join("\0");
|
|
676
|
+
}, Pr = (e) => typeof e != "string", Fr = (e, t, n) => {
|
|
677
|
+
let r = new Set(Mr(e).map(([e]) => e)), i = t.split(".")[0];
|
|
678
|
+
return Object.fromEntries(Object.entries(n ?? {}).filter(([e, t]) => {
|
|
679
|
+
if (t === void 0) return !1;
|
|
680
|
+
if (r.has(e) || e === i) throw Error(`patchJson: additionalPatch cannot rewrite the primary key or patched JSON column '${e}'`);
|
|
681
|
+
return !0;
|
|
682
|
+
}));
|
|
683
|
+
}, Ir = (e) => typeof e == "object" && !!e && !Array.isArray(e), Lr = (e) => JSON.parse(JSON.stringify(e ?? null)), Rr = (e, t, n) => {
|
|
684
|
+
let [r, ...i] = t.split("."), a = Lr(n), o = e[r], s = (e, t) => {
|
|
685
|
+
if (t === i.length) return a;
|
|
686
|
+
let n = Ir(e) ? e : {}, r = i[t], o = Object.hasOwn(n, r) ? n[r] : void 0;
|
|
687
|
+
return {
|
|
688
|
+
...n,
|
|
689
|
+
[r]: s(o, t + 1)
|
|
690
|
+
};
|
|
691
|
+
};
|
|
692
|
+
return {
|
|
693
|
+
...e,
|
|
694
|
+
[r]: i.length === 0 ? Ir(o) && Ir(a) ? {
|
|
695
|
+
...o,
|
|
696
|
+
...a
|
|
697
|
+
} : a : s(o, 0)
|
|
698
|
+
};
|
|
699
|
+
}, zr = (e, t, n, r, i) => {
|
|
700
|
+
let [a, ...o] = n.split("."), s = i ?? e`${e(a)}`, c = Lr(r), l = (e) => /["\\\u0000-\u001f]/.test(e);
|
|
701
|
+
if ((t === "sqlite" || t === "turso") && (o.some(l) || o.length === 0 && Ir(c) && Object.keys(c).some(l))) {
|
|
702
|
+
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`}
|
|
703
|
+
THEN json_extract('"' || replace(${t}.key, '"', ${String.raw`\"`}) || '"', '$')
|
|
704
|
+
ELSE ${t}.key END`, r = (r) => {
|
|
705
|
+
let i = e`CASE WHEN json_type(${s}) = 'object' THEN ${s} ELSE '{}' END`;
|
|
706
|
+
for (let a of r) {
|
|
707
|
+
let r = e(`_voltro_json_${t++}`);
|
|
708
|
+
i = e`COALESCE((SELECT ${r}.value FROM json_each(${i}) AS ${r} WHERE ${n(r)} = ${a} AND ${r}.type = 'object'), '{}')`;
|
|
709
|
+
}
|
|
710
|
+
return i;
|
|
711
|
+
}, i = (r, i, a) => {
|
|
712
|
+
let o = e(`_voltro_json_${t++}`), s = e(`_voltro_json_${t++}`);
|
|
713
|
+
return e`(SELECT json_group_object(${s}.k, json(${s}.v)) FROM (
|
|
714
|
+
SELECT ${n(o)} AS k, CASE ${o}.type
|
|
715
|
+
WHEN 'true' THEN 'true' WHEN 'false' THEN 'false'
|
|
716
|
+
WHEN 'object' THEN ${o}.value WHEN 'array' THEN ${o}.value
|
|
717
|
+
ELSE json_quote(${o}.value) END AS v
|
|
718
|
+
FROM json_each(${r}) AS ${o} WHERE ${n(o)} <> ${i}
|
|
719
|
+
UNION ALL SELECT ${i}, ${a}
|
|
720
|
+
) AS ${s})`;
|
|
721
|
+
}, l;
|
|
722
|
+
if (o.length === 0) {
|
|
723
|
+
l = r([]);
|
|
724
|
+
for (let [t, n] of Object.entries(c)) l = i(l, t, e`${JSON.stringify(n)}`);
|
|
725
|
+
} else {
|
|
726
|
+
l = e`${JSON.stringify(c)}`;
|
|
727
|
+
for (let e = o.length - 1; e >= 0; e--) l = i(r(o.slice(0, e)), o[e], l);
|
|
728
|
+
}
|
|
729
|
+
return e`${e(a)} = ${l}`;
|
|
730
|
+
}
|
|
731
|
+
let u = (e) => "$" + e.map((e) => `.${JSON.stringify(e)}`).join(""), d = (t) => e`ARRAY[${e.csv(t.map((t) => e`${t}`))}]::text[]`, f = (n) => n.length === 0 ? s : t === "postgres" ? e`${s} #> ${d(n)}` : t === "mssql" ? e`JSON_QUERY(${s}, ${u(n)})` : t === "mysql" || t === "mariadb" ? e`JSON_EXTRACT(${s}, ${u(n)})` : e`json_extract(${s}, ${u(n)})`, p = (n) => t === "postgres" ? e`jsonb_typeof(${f(n)}) = 'object'` : t === "mssql" ? e`LEFT(LTRIM(${f(n)}), 1) = '{'` : t === "mysql" || t === "mariadb" ? e`JSON_TYPE(${f(n)}) = 'OBJECT'` : e`json_type(${s}, ${u(n)}) = 'object'`, m = t === "postgres" ? e`'{}'::jsonb` : e`'{}'`, h = (t) => {
|
|
732
|
+
let n = Array.from({ length: t.length + 1 }, (e, n) => p(t.slice(0, n)));
|
|
733
|
+
return e`CASE WHEN ${e.and(n)} THEN ${f(t)} ELSE ${m} END`;
|
|
734
|
+
}, g = (n) => {
|
|
735
|
+
let r = JSON.stringify(n);
|
|
736
|
+
return t === "postgres" ? e`${r}::jsonb` : e`${r}`;
|
|
737
|
+
}, _ = (n, r, i, a) => {
|
|
738
|
+
if (t === "postgres") return e`jsonb_set(${n}, ${d(r)}, ${i}, true)`;
|
|
739
|
+
let o = u(r);
|
|
740
|
+
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}))`;
|
|
741
|
+
}, v;
|
|
742
|
+
if (o.length === 0) {
|
|
743
|
+
if (!Ir(c)) v = g(c);
|
|
744
|
+
else {
|
|
745
|
+
v = h([]);
|
|
746
|
+
for (let [e, t] of Object.entries(c)) v = _(v, [e], g(t), t);
|
|
747
|
+
}
|
|
748
|
+
} else {
|
|
749
|
+
v = h([]);
|
|
750
|
+
for (let e = 1; e < o.length; e++) {
|
|
751
|
+
let t = o.slice(0, e);
|
|
752
|
+
v = _(v, t, h(t));
|
|
753
|
+
}
|
|
754
|
+
v = _(v, o, g(c), c);
|
|
755
|
+
}
|
|
756
|
+
return e`${e(a)} = ${v}`;
|
|
757
|
+
}, Br = class extends Error {
|
|
642
758
|
_tag = "EagerCardinalityError";
|
|
643
759
|
constructor(e) {
|
|
644
760
|
super(e), this.name = "EagerCardinalityError";
|
|
645
761
|
}
|
|
646
|
-
},
|
|
762
|
+
}, Vr = (e) => {
|
|
647
763
|
let { relationName: t, sourceTableName: n, targetTableName: r, foreignKey: i, sourceKey: a } = e, o = r === n;
|
|
648
764
|
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.");
|
|
649
|
-
},
|
|
765
|
+
}, Hr = async (e, t, n, r) => {
|
|
650
766
|
if (e.length === 0) return e;
|
|
651
|
-
let i =
|
|
767
|
+
let i = cr(n.tableName);
|
|
652
768
|
if (i === void 0) throw Error(`cannot eager-load on '${n.tableName}': no relations registered. Did you forget to declare \`relations(${n.tableName}, ...)\` or import the file that does?`);
|
|
653
769
|
let a = e.map((e) => ({ ...e }));
|
|
654
770
|
for (let [e, o] of Object.entries(t)) {
|
|
@@ -657,36 +773,36 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
657
773
|
let t = Object.keys(i).join(", ") || "<none>";
|
|
658
774
|
throw Error(`unknown relation '${e}' on '${n.tableName}'. Registered relations: ${t}.`);
|
|
659
775
|
}
|
|
660
|
-
|
|
776
|
+
rr(n, e, t), await Ur(a, e, t, o === !0 ? {} : o, n, r);
|
|
661
777
|
}
|
|
662
778
|
return a;
|
|
663
|
-
},
|
|
779
|
+
}, Ur = async (e, t, n, r, i, a) => {
|
|
664
780
|
switch (n.kind) {
|
|
665
781
|
case "one":
|
|
666
|
-
await
|
|
782
|
+
await Wr(e, t, n, r, i, a);
|
|
667
783
|
return;
|
|
668
784
|
case "many":
|
|
669
|
-
await
|
|
785
|
+
await Gr(e, t, n, r, i, a);
|
|
670
786
|
return;
|
|
671
787
|
case "manyToMany":
|
|
672
|
-
await
|
|
788
|
+
await qr(e, t, n, r, i, a);
|
|
673
789
|
return;
|
|
674
790
|
}
|
|
675
|
-
},
|
|
676
|
-
let o = n.target(), s = n.sourceKey ??
|
|
791
|
+
}, Wr = async (e, t, n, r, i, a) => {
|
|
792
|
+
let o = n.target(), s = n.sourceKey ?? Jr(i, o.tableName);
|
|
677
793
|
if (s !== void 0) {
|
|
678
|
-
let n =
|
|
794
|
+
let n = Yr(e, s), i = n.length === 0 ? [] : await Xr(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
|
|
679
795
|
for (let n of e) {
|
|
680
796
|
let e = n[s];
|
|
681
797
|
n[t] = e == null ? null : c.get(e) ?? null;
|
|
682
798
|
}
|
|
683
|
-
await
|
|
799
|
+
await Zr(i, r.with, o, a);
|
|
684
800
|
return;
|
|
685
801
|
}
|
|
686
|
-
let c = n.foreignKey ??
|
|
802
|
+
let c = n.foreignKey ?? $n(o, i.tableName, t), l = n.sourceKey ?? "id", u = Yr(e, l), d = u.length === 0 ? [] : await Xr(o, c, u, r, a), f = /* @__PURE__ */ new Map();
|
|
687
803
|
for (let e of d) {
|
|
688
804
|
let n = e[c];
|
|
689
|
-
if (f.has(n)) throw new
|
|
805
|
+
if (f.has(n)) throw new Br(Vr({
|
|
690
806
|
relationName: t,
|
|
691
807
|
sourceTableName: i.tableName,
|
|
692
808
|
targetTableName: o.tableName,
|
|
@@ -699,9 +815,9 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
699
815
|
let e = n[l];
|
|
700
816
|
n[t] = e == null ? null : f.get(e) ?? null;
|
|
701
817
|
}
|
|
702
|
-
await
|
|
703
|
-
},
|
|
704
|
-
let o = n.target(), s = n.foreignKey ??
|
|
818
|
+
await Zr(d, r.with, o, a);
|
|
819
|
+
}, Gr = async (e, t, n, r, i, a) => {
|
|
820
|
+
let o = n.target(), s = n.foreignKey ?? $n(o, i.tableName, t), c = n.sourceKey ?? "id", l = Yr(e, c), u = Kr(r), d = l.length === 0 ? [] : await Xr(o, s, l, u, a), f = /* @__PURE__ */ new Map();
|
|
705
821
|
for (let e of d) {
|
|
706
822
|
let t = e[s], n = f.get(t);
|
|
707
823
|
n ? n.push(e) : f.set(t, [e]);
|
|
@@ -717,12 +833,12 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
717
833
|
let e = n[c];
|
|
718
834
|
n[t] = f.get(e) ?? [];
|
|
719
835
|
}
|
|
720
|
-
await
|
|
721
|
-
},
|
|
836
|
+
await Zr(d, r.with, o, a);
|
|
837
|
+
}, Kr = (e) => {
|
|
722
838
|
let { limit: t, offset: n, ...r } = e;
|
|
723
839
|
return r;
|
|
724
|
-
},
|
|
725
|
-
let o = n.target(), s = n.through(), c =
|
|
840
|
+
}, qr = async (e, t, n, r, i, a) => {
|
|
841
|
+
let o = n.target(), s = n.through(), c = Yr(e, "id");
|
|
726
842
|
if (c.length === 0) {
|
|
727
843
|
for (let n of e) n[t] = [];
|
|
728
844
|
return;
|
|
@@ -743,8 +859,8 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
743
859
|
for (let n of e) n[t] = [];
|
|
744
860
|
return;
|
|
745
861
|
}
|
|
746
|
-
let f = await
|
|
747
|
-
await
|
|
862
|
+
let f = await Xr(o, "id", Yr(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
|
|
863
|
+
await Zr(f, r.with, o, a);
|
|
748
864
|
let m = r.junction === void 0 ? void 0 : r.junction === !0 ? Object.keys(s.fields) : r.junction, h = /* @__PURE__ */ new Map();
|
|
749
865
|
for (let e of d) {
|
|
750
866
|
let t = e[n.sourceKey], r = e[n.targetKey], i = p.get(r);
|
|
@@ -756,16 +872,16 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
756
872
|
o ? o.push(a) : h.set(t, [a]);
|
|
757
873
|
}
|
|
758
874
|
for (let n of e) n[t] = h.get(n.id) ?? [];
|
|
759
|
-
},
|
|
875
|
+
}, Jr = (e, t) => {
|
|
760
876
|
for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
|
|
761
|
-
},
|
|
877
|
+
}, Yr = (e, t) => {
|
|
762
878
|
let n = /* @__PURE__ */ new Set();
|
|
763
879
|
for (let r of e) {
|
|
764
880
|
let e = r[t];
|
|
765
881
|
e != null && n.add(e);
|
|
766
882
|
}
|
|
767
883
|
return [...n];
|
|
768
|
-
},
|
|
884
|
+
}, Xr = (e, t, n, r, i) => {
|
|
769
885
|
let a = {
|
|
770
886
|
column: t,
|
|
771
887
|
op: "in",
|
|
@@ -779,63 +895,63 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
779
895
|
skip: r.offset,
|
|
780
896
|
projection: void 0
|
|
781
897
|
});
|
|
782
|
-
},
|
|
783
|
-
t !== void 0 && e.length !== 0 && (await
|
|
898
|
+
}, Zr = async (e, t, n, r) => {
|
|
899
|
+
t !== void 0 && e.length !== 0 && (await Hr(e, t, n, r)).forEach((t, n) => {
|
|
784
900
|
let r = e[n];
|
|
785
901
|
for (let [e, n] of Object.entries(t)) e in r || (r[e] = n);
|
|
786
902
|
});
|
|
787
|
-
},
|
|
903
|
+
}, Qr = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, $r = class extends Error {
|
|
788
904
|
_tag = "TenantNamespaceUnresolved";
|
|
789
905
|
constructor(e) {
|
|
790
906
|
super(e), this.name = "TenantNamespaceUnresolved";
|
|
791
907
|
}
|
|
792
|
-
},
|
|
908
|
+
}, ei = class extends Error {
|
|
793
909
|
_tag = "TenantNamespaceInvalid";
|
|
794
910
|
constructor(e) {
|
|
795
911
|
super(e), this.name = "TenantNamespaceInvalid";
|
|
796
912
|
}
|
|
797
|
-
},
|
|
798
|
-
if (e == null || e === "") throw new
|
|
799
|
-
let t =
|
|
800
|
-
if (t.replace(/_/g, "") === "") throw new
|
|
801
|
-
let n = `${
|
|
802
|
-
if (n.length >
|
|
913
|
+
}, ti = 63, ni = "tenant_", ri = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), ii = (e) => {
|
|
914
|
+
if (e == null || e === "") throw new $r("namespace isolation is on but the request has no resolvable tenant (subject.tenantId is null/empty). Refusing to run against a shared/default namespace — this would be a cross-tenant read. Authenticate with a tenant-scoped subject, or disable namespace isolation for this surface.");
|
|
915
|
+
let t = ri(e);
|
|
916
|
+
if (t.replace(/_/g, "") === "") throw new ei(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
|
|
917
|
+
let n = `${ni}${t}`;
|
|
918
|
+
if (n.length > ti) throw new ei(`namespace '${n}' for tenant '${e}' exceeds the ${ti}-byte identifier limit. Use a shorter tenant id.`);
|
|
803
919
|
return n;
|
|
804
|
-
},
|
|
805
|
-
if (e === void 0 || t == null || !
|
|
920
|
+
}, ai = (e, t) => e === null ? t : `${e}.${t}`, oi = /* @__PURE__ */ new Set(["timestamp", "date"]), si = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, ci = (e, t) => {
|
|
921
|
+
if (e === void 0 || t == null || !oi.has(e) || t instanceof Date) return t;
|
|
806
922
|
if (typeof t == "number" && Number.isFinite(t)) return new Date(t);
|
|
807
|
-
if (typeof t == "string" &&
|
|
923
|
+
if (typeof t == "string" && si.test(t)) {
|
|
808
924
|
let e = new Date(t);
|
|
809
925
|
return Number.isNaN(e.getTime()) ? t : e;
|
|
810
926
|
}
|
|
811
927
|
return t;
|
|
812
|
-
},
|
|
928
|
+
}, li = (e, t) => e === void 0 || !oi.has(e) ? t : t.map((t) => ci(e, t)), ui = (e, t) => {
|
|
813
929
|
let { strings: n, values: r } = e, i = t.unsafe(n[0] ?? "");
|
|
814
930
|
for (let e = 0; e < r.length; e++) i = t`${i}${r[e]}${t.unsafe(n[e + 1] ?? "")}`;
|
|
815
931
|
return t`${i}`;
|
|
816
|
-
},
|
|
932
|
+
}, di = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), L = (e, t, n = null, r) => {
|
|
817
933
|
if ("not" in e) return t`NOT (${L(e.not, t, n, r)})`;
|
|
818
934
|
if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => L(e, t, n, r)));
|
|
819
935
|
if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => L(e, t, n, r)));
|
|
820
936
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
821
|
-
let r = e, i =
|
|
937
|
+
let r = e, i = Si(r.subquery, t, n);
|
|
822
938
|
return r.op === "subquery-in" ? t`${t(r.column)} IN (${i})` : t`${t(r.column)} NOT IN (${i})`;
|
|
823
939
|
}
|
|
824
940
|
if (e.op === "exists" || e.op === "not-exists") {
|
|
825
|
-
let r = e, i =
|
|
941
|
+
let r = e, i = Si(r.subquery, t, n);
|
|
826
942
|
return r.op === "exists" ? t`EXISTS (${i})` : t`NOT EXISTS (${i})`;
|
|
827
943
|
}
|
|
828
944
|
let i = e, a = t(i.column), o = i.path, s = o !== void 0 && o.length > 0, c = () => t.onDialectOrElse({
|
|
829
|
-
mysql: () => t.unsafe(
|
|
830
|
-
mssql: () => t.unsafe(
|
|
831
|
-
sqlite: () => t.unsafe(
|
|
832
|
-
orElse: () => t.unsafe(
|
|
945
|
+
mysql: () => t.unsafe(O(i.column, o, "mysql")),
|
|
946
|
+
mssql: () => t.unsafe(O(i.column, o, "mssql")),
|
|
947
|
+
sqlite: () => t.unsafe(O(i.column, o, "sqlite")),
|
|
948
|
+
orElse: () => t.unsafe(O(i.column, o, "postgres"))
|
|
833
949
|
}), l = () => t.onDialectOrElse({
|
|
834
|
-
mysql: () => t.unsafe(
|
|
835
|
-
mssql: () => t.unsafe(
|
|
836
|
-
sqlite: () => t.unsafe(
|
|
837
|
-
orElse: () => t.unsafe(
|
|
838
|
-
}), u = s ? c() : a, d = s ? l() : a, f = (e) => s && e != null ? String(e) : e, p = (e) => s ? Number(e) : e, m = s || r === void 0 ? void 0 :
|
|
950
|
+
mysql: () => t.unsafe(O(i.column, o, "mysql", { numeric: !0 })),
|
|
951
|
+
mssql: () => t.unsafe(O(i.column, o, "mssql", { numeric: !0 })),
|
|
952
|
+
sqlite: () => t.unsafe(O(i.column, o, "sqlite", { numeric: !0 })),
|
|
953
|
+
orElse: () => t.unsafe(O(i.column, o, "postgres", { numeric: !0 }))
|
|
954
|
+
}), u = s ? c() : a, d = s ? l() : a, f = (e) => s && e != null ? String(e) : e, p = (e) => s ? Number(e) : e, m = s || r === void 0 ? void 0 : C(r)?.fields?.[i.column]?.type, h = (e) => ci(m, e);
|
|
839
955
|
switch (i.op) {
|
|
840
956
|
case "eq": return t`${u} = ${f(h(i.value))}`;
|
|
841
957
|
case "neq": return t`${u} <> ${f(h(i.value))}`;
|
|
@@ -852,7 +968,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
852
968
|
return e.length === 0 ? t`TRUE` : t`${u} NOT IN ${t.in(s ? e.map((e) => f(e)) : e)}`;
|
|
853
969
|
}
|
|
854
970
|
case "contains": {
|
|
855
|
-
let e = `%${
|
|
971
|
+
let e = `%${di(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
|
|
856
972
|
return t.onDialectOrElse({
|
|
857
973
|
mysql: () => t`LOWER(${u}) LIKE LOWER(${e})`,
|
|
858
974
|
mssql: () => t`LOWER(${u}) LIKE LOWER(${e})`,
|
|
@@ -861,7 +977,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
861
977
|
});
|
|
862
978
|
}
|
|
863
979
|
case "startsWith": {
|
|
864
|
-
let e = `${
|
|
980
|
+
let e = `${di(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
|
|
865
981
|
return t.onDialectOrElse({
|
|
866
982
|
mysql: () => t`${u} LIKE ${e}`,
|
|
867
983
|
orElse: () => t`${u} LIKE ${e} ESCAPE '\\'`
|
|
@@ -909,13 +1025,13 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
909
1025
|
});
|
|
910
1026
|
}
|
|
911
1027
|
}
|
|
912
|
-
},
|
|
1028
|
+
}, fi = (e, t) => {
|
|
913
1029
|
let n = [];
|
|
914
1030
|
return e.partitionBy && e.partitionBy.length > 0 && n.push(t`PARTITION BY ${t.csv(e.partitionBy.map((e) => t`${t(e)}`))}`), e.orderBy && e.orderBy.length > 0 && n.push(t`ORDER BY ${t.csv(e.orderBy.map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), n.length === 0 ? t`` : n.length === 1 ? n[0] : n.reduce((e, n, r) => r === 0 ? n : t`${e} ${n}`);
|
|
915
|
-
},
|
|
1031
|
+
}, pi = (e, t) => t.csv(e.map((e) => {
|
|
916
1032
|
let n = e.column === void 0 ? t.unsafe("*") : t`${t(e.column)}`;
|
|
917
1033
|
if (e.op.startsWith("window-")) {
|
|
918
|
-
let r =
|
|
1034
|
+
let r = fi(e.window ?? {}, t);
|
|
919
1035
|
switch (e.op) {
|
|
920
1036
|
case "window-row-number": return t`ROW_NUMBER() OVER (${r}) AS ${t(e.alias)}`;
|
|
921
1037
|
case "window-rank": return t`RANK() OVER (${r}) AS ${t(e.alias)}`;
|
|
@@ -939,44 +1055,44 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
939
1055
|
return t`${t(e.column)} AS ${t(e.alias)}`;
|
|
940
1056
|
default: throw Error(`compileAggregateProjection: unknown op '${e.op}'`);
|
|
941
1057
|
}
|
|
942
|
-
})),
|
|
1058
|
+
})), mi = (e) => `[${e.join(",")}]`, hi = (e, t) => {
|
|
943
1059
|
if (e.queryVector === void 0) return null;
|
|
944
|
-
let n = t(e.column), r =
|
|
1060
|
+
let n = t(e.column), r = mi(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
|
|
945
1061
|
return t.onDialectOrElse({
|
|
946
1062
|
mysql: () => t`${t.unsafe(a)}(${n}, ${r})`,
|
|
947
1063
|
mssql: () => t`NULL`,
|
|
948
1064
|
sqlite: () => t`NULL`,
|
|
949
1065
|
orElse: () => t`${n} ${t.unsafe(i)} ${r}::vector`
|
|
950
1066
|
});
|
|
951
|
-
},
|
|
1067
|
+
}, gi = (e, t) => {
|
|
952
1068
|
let n = t.unsafe(e.useGeography ? "::geography" : "::geometry");
|
|
953
1069
|
return t`ST_Distance(${t(e.column)}${n}, ${e.geom}${n})`;
|
|
954
|
-
},
|
|
955
|
-
let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${
|
|
1070
|
+
}, _i = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, vi = (e, t) => t`${t(`${e.indexName}_tsv`)}`, yi = (e, t) => `${t}_${e.indexName}_fts`, bi = (e, t, n) => {
|
|
1071
|
+
let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${di(e.query)}%`;
|
|
956
1072
|
return n.onDialectOrElse({
|
|
957
1073
|
mysql: () => n`MATCH(${r}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
|
|
958
1074
|
sqlite: () => {
|
|
959
|
-
let r = n(
|
|
1075
|
+
let r = n(yi(e, t));
|
|
960
1076
|
return n`${n("id")} IN (SELECT ${n("row_id")} FROM ${r} WHERE ${r} MATCH ${e.query})`;
|
|
961
1077
|
},
|
|
962
1078
|
mssql: () => n.or(e.columns.map((e) => n`LOWER(${n(e)}) LIKE LOWER(${i}) ESCAPE '\\'`)),
|
|
963
|
-
orElse: () => n`${
|
|
1079
|
+
orElse: () => n`${vi(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
|
|
964
1080
|
});
|
|
965
|
-
},
|
|
966
|
-
let r = `%${
|
|
1081
|
+
}, xi = (e, t, n) => {
|
|
1082
|
+
let r = `%${di(e.query)}%`;
|
|
967
1083
|
return n.onDialectOrElse({
|
|
968
1084
|
mysql: () => n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
|
|
969
1085
|
sqlite: () => {
|
|
970
|
-
let r = n(
|
|
1086
|
+
let r = n(yi(e, t));
|
|
971
1087
|
return n`COALESCE((SELECT -bm25(${r}) FROM ${r} WHERE ${r} MATCH ${e.query} AND ${r}.${n("row_id")} = ${n("id")}), 0)`;
|
|
972
1088
|
},
|
|
973
1089
|
mssql: () => e.columns.map((e) => n`(CASE WHEN LOWER(${n(e)}) LIKE LOWER(${r}) ESCAPE '\\' THEN 1 ELSE 0 END)`).reduce((e, t, r) => r === 0 ? t : n`${e} + ${t}`),
|
|
974
|
-
orElse: () => n`ts_rank(${
|
|
1090
|
+
orElse: () => n`ts_rank(${vi(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
|
|
975
1091
|
});
|
|
976
|
-
},
|
|
1092
|
+
}, Si = (e, t, n = null) => {
|
|
977
1093
|
if (e.setOp && e.setOp.queries.length >= 2) {
|
|
978
|
-
let r = e.setOp.kind === "union" ? "UNION" : e.setOp.kind === "union-all" ? "UNION ALL" : e.setOp.kind === "intersect" ? "INTERSECT" : "EXCEPT", i = e.setOp.queries.map((e) => t`(${
|
|
979
|
-
if (
|
|
1094
|
+
let r = e.setOp.kind === "union" ? "UNION" : e.setOp.kind === "union-all" ? "UNION ALL" : e.setOp.kind === "intersect" ? "INTERSECT" : "EXCEPT", i = e.setOp.queries.map((e) => t`(${Si(e, t, n)})`).reduce((e, n, i) => i === 0 ? n : t`${e} ${t.unsafe(r)} ${n}`), a = [];
|
|
1095
|
+
if (b(e).length > 0 && a.push(t` ORDER BY ${t.csv(b(e).map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), e.take !== void 0) {
|
|
980
1096
|
if (!Number.isInteger(e.take) || e.take < 0) throw Error(`compileSelect: invalid take ${e.take}`);
|
|
981
1097
|
a.push(t` LIMIT ${t.unsafe(String(e.take))}`);
|
|
982
1098
|
}
|
|
@@ -986,7 +1102,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
986
1102
|
}
|
|
987
1103
|
return t`${i}${a.reduce((e, n) => t`${e}${n}`, t``)}`;
|
|
988
1104
|
}
|
|
989
|
-
let r = e.annClause === void 0 ? null :
|
|
1105
|
+
let r = e.annClause === void 0 ? null : hi(e.annClause, t);
|
|
990
1106
|
e.spatialClause !== void 0 && t.onDialectOrElse({
|
|
991
1107
|
mysql: () => {
|
|
992
1108
|
throw Error("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
|
|
@@ -999,7 +1115,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
999
1115
|
},
|
|
1000
1116
|
orElse: () => t``
|
|
1001
1117
|
});
|
|
1002
|
-
let i = e.spatialClause?.projectAs === void 0 ? null :
|
|
1118
|
+
let i = e.spatialClause?.projectAs === void 0 ? null : gi(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? pi(e.aggregations, t) : e.joinedProjection && e.joinedProjection.length > 0 ? t.csv(e.joinedProjection.map((e) => t`${t(e.source)} AS ${t(e.outputKey)}`)) : e.projection && e.projection.length > 0 ? t.csv(e.projection.map((e) => t`${t(e)}`)) : t`*`, o = (e.aggregations && e.aggregations.length > 0) === !0, s = r !== null && !o ? t`${a}, ${r} AS ${t("distance")}` : a, c = e.fullTextSearch, l = c?.rank !== void 0 && !o ? xi(c, e.table, t) : null, u = l !== null && c?.rank !== void 0 ? t`${s}, ${l} AS ${t(c.rank.alias)}` : s, d = i !== null && !o && e.spatialClause?.projectAs !== void 0 ? t`${u}, ${i} AS ${t(e.spatialClause.projectAs)}` : u, f = e.distinctOn && e.distinctOn.length > 0 ? t.onDialectOrElse({
|
|
1003
1119
|
orElse: () => t`DISTINCT ON (${t.csv(e.distinctOn.map((e) => t`${t(e)}`))}) `,
|
|
1004
1120
|
mysql: () => t`DISTINCT `,
|
|
1005
1121
|
mssql: () => t`DISTINCT `,
|
|
@@ -1011,52 +1127,52 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1011
1127
|
mssql: () => t``,
|
|
1012
1128
|
sqlite: () => t``,
|
|
1013
1129
|
orElse: () => t` FOR UPDATE`
|
|
1014
|
-
}) : t``, g = e.alias === void 0 ? t`${t(
|
|
1130
|
+
}) : t``, g = e.alias === void 0 ? t`${t(ai(n, e.table))}${m}` : t`${t(ai(n, e.table))} AS ${t(e.alias)}${m}`, _ = (e.joins ?? []).map((e) => {
|
|
1015
1131
|
let r = e.kind === "inner" ? "INNER" : "LEFT";
|
|
1016
|
-
return t` ${t.unsafe(r)} JOIN ${t(
|
|
1017
|
-
}),
|
|
1018
|
-
r !== null &&
|
|
1019
|
-
for (let n of
|
|
1020
|
-
let
|
|
1132
|
+
return t` ${t.unsafe(r)} JOIN ${t(ai(n, e.table))} AS ${t(e.alias)} ON ${L(e.on, t, n)}`;
|
|
1133
|
+
}), v = _.length > 0 ? _.reduce((e, n) => t`${e}${n}`, g) : g, ee = c === void 0 ? null : bi(c, e.table, t), te = [e.predicate ? L(e.predicate, t, n, e.table) : null, ee].filter((e) => e !== null), y = te.length > 0 ? t` WHERE ${t.and(te)}` : t``, ne = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, re = e.having ? t` HAVING ${L(e.having, t, n, e.table)}` : t``, ie = e.skip !== void 0, x = [];
|
|
1134
|
+
r !== null && x.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && x.push(e.spatialClause.order === "desc" ? t`${_i(e.spatialClause, t)} DESC` : t`${_i(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && x.push(t`${l} DESC`);
|
|
1135
|
+
for (let n of b(e)) x.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
|
|
1136
|
+
let ae = x.length > 0 ? t` ORDER BY ${t.csv(x)}` : ie ? t.onDialectOrElse({
|
|
1021
1137
|
mssql: () => t` ORDER BY (SELECT NULL)`,
|
|
1022
1138
|
orElse: () => t``
|
|
1023
|
-
}) : t``,
|
|
1139
|
+
}) : t``, oe = (e) => {
|
|
1024
1140
|
if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`compileSelect: expected non-negative integer take/skip, got ${e}`);
|
|
1025
1141
|
return t.unsafe(String(e));
|
|
1026
|
-
},
|
|
1142
|
+
}, se = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${Si(e.descriptor, t, n)})`), ce = (e.ctes ?? []).some((e) => e.recursive === !0), le = se.length > 0 ? t`WITH ${t.unsafe(ce ? "RECURSIVE " : "")}${t.csv(se)} ` : t``;
|
|
1027
1143
|
return t.onDialectOrElse({
|
|
1028
1144
|
mssql: () => {
|
|
1029
|
-
let n = e.take !== void 0 && !
|
|
1030
|
-
return t`${
|
|
1145
|
+
let n = e.take !== void 0 && !ie ? t`TOP ${oe(e.take)} ` : t``, r = ie ? t` OFFSET ${oe(e.skip)} ROWS FETCH NEXT ${oe(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
|
|
1146
|
+
return t`${le}SELECT ${n}${f}${d} FROM ${v}${y}${ne}${re}${ae}${r}`;
|
|
1031
1147
|
},
|
|
1032
1148
|
orElse: () => {
|
|
1033
|
-
let n = e.take === void 0 ? t`` : t` LIMIT ${
|
|
1034
|
-
return t`${
|
|
1149
|
+
let n = e.take === void 0 ? t`` : t` LIMIT ${oe(e.take)}`, r = ie ? t` OFFSET ${oe(e.skip)}` : t``;
|
|
1150
|
+
return t`${le}SELECT ${f}${d} FROM ${v}${y}${ne}${re}${ae}${n}${r}${h}`;
|
|
1035
1151
|
}
|
|
1036
1152
|
});
|
|
1037
|
-
},
|
|
1153
|
+
}, Ci = (e, t, n) => {
|
|
1038
1154
|
if (e.eager === void 0) return null;
|
|
1039
|
-
let r =
|
|
1155
|
+
let r = Ei(e.table, e.eager, e.sourceTable);
|
|
1040
1156
|
if (r === null) return null;
|
|
1041
|
-
let i =
|
|
1157
|
+
let i = Ni(n, e, r, Mi(t, n));
|
|
1042
1158
|
return i === null ? null : {
|
|
1043
1159
|
fragment: i,
|
|
1044
|
-
decode:
|
|
1160
|
+
decode: Ii(r, n)
|
|
1045
1161
|
};
|
|
1046
|
-
},
|
|
1162
|
+
}, wi = (e) => e.relation.kind === "one" && e.fkSide === "target", Ti = (e) => ({
|
|
1047
1163
|
...e,
|
|
1048
1164
|
branch: {
|
|
1049
1165
|
...e.branch,
|
|
1050
1166
|
limit: 2
|
|
1051
1167
|
}
|
|
1052
|
-
}),
|
|
1053
|
-
let r = n ??
|
|
1168
|
+
}), Ei = (e, t, n) => {
|
|
1169
|
+
let r = n ?? Be(e), i = cr(e);
|
|
1054
1170
|
if (i === void 0) return null;
|
|
1055
1171
|
let a = [];
|
|
1056
1172
|
for (let [e, n] of Object.entries(t)) {
|
|
1057
1173
|
let t = i[e];
|
|
1058
1174
|
if (t === void 0) return null;
|
|
1059
|
-
let o =
|
|
1175
|
+
let o = Di(e, t, r, n === !0 ? {} : n);
|
|
1060
1176
|
if (o === null) return null;
|
|
1061
1177
|
a.push(o);
|
|
1062
1178
|
}
|
|
@@ -1064,30 +1180,30 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1064
1180
|
table: r,
|
|
1065
1181
|
children: a
|
|
1066
1182
|
};
|
|
1067
|
-
},
|
|
1183
|
+
}, Di = (e, t, n, r) => {
|
|
1068
1184
|
let i = t.target(), a = (t.kind === "manyToMany" ? void 0 : t.sourceKey) ?? "id", o, s;
|
|
1069
1185
|
if (t.kind === "manyToMany") o = t.targetKey, s = "target";
|
|
1070
1186
|
else if (t.kind === "one") {
|
|
1071
|
-
let r = t.sourceKey ??
|
|
1187
|
+
let r = t.sourceKey ?? ji(n, i.tableName);
|
|
1072
1188
|
if (r !== void 0) o = r, s = "source";
|
|
1073
1189
|
else try {
|
|
1074
|
-
o = t.foreignKey ??
|
|
1190
|
+
o = t.foreignKey ?? $n(i, n.tableName, e), s = "target";
|
|
1075
1191
|
} catch {
|
|
1076
1192
|
return null;
|
|
1077
1193
|
}
|
|
1078
1194
|
} else try {
|
|
1079
|
-
o = t.foreignKey ??
|
|
1195
|
+
o = t.foreignKey ?? $n(i, n.tableName, e), s = "target";
|
|
1080
1196
|
} catch {
|
|
1081
1197
|
return null;
|
|
1082
1198
|
}
|
|
1083
1199
|
let c = r.with === void 0 ? [] : (() => {
|
|
1084
|
-
let e =
|
|
1200
|
+
let e = cr(i.tableName);
|
|
1085
1201
|
if (e === void 0 && Object.keys(r.with).length > 0) return null;
|
|
1086
1202
|
let t = [];
|
|
1087
1203
|
for (let [n, a] of Object.entries(r.with)) {
|
|
1088
1204
|
let r = e?.[n];
|
|
1089
1205
|
if (r === void 0) return null;
|
|
1090
|
-
let o =
|
|
1206
|
+
let o = Di(n, r, i, a === !0 ? {} : a);
|
|
1091
1207
|
if (o === null) return null;
|
|
1092
1208
|
t.push(o);
|
|
1093
1209
|
}
|
|
@@ -1103,9 +1219,9 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1103
1219
|
fkSide: s,
|
|
1104
1220
|
branch: r,
|
|
1105
1221
|
children: c,
|
|
1106
|
-
junction:
|
|
1222
|
+
junction: Oi(t, r)
|
|
1107
1223
|
};
|
|
1108
|
-
},
|
|
1224
|
+
}, Oi = (e, t) => {
|
|
1109
1225
|
if (e.kind !== "manyToMany" || t.junction === void 0) return;
|
|
1110
1226
|
let n = e.through(), r = t.junction === !0 ? Object.keys(n.fields) : t.junction, i = r.filter((e) => e in n.fields);
|
|
1111
1227
|
return {
|
|
@@ -1117,35 +1233,35 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1117
1233
|
return t !== void 0 && (t.type === "timestamp" || t.type === "date");
|
|
1118
1234
|
})
|
|
1119
1235
|
};
|
|
1120
|
-
},
|
|
1236
|
+
}, ki = (e) => `__j_${e}`, Ai = "__j", ji = (e, t) => {
|
|
1121
1237
|
for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
|
|
1122
|
-
},
|
|
1238
|
+
}, Mi = (e, t) => {
|
|
1123
1239
|
let n = 0;
|
|
1124
1240
|
return {
|
|
1125
1241
|
sql: e,
|
|
1126
1242
|
dialect: t,
|
|
1127
1243
|
nextAlias: () => `__a${n++}`
|
|
1128
1244
|
};
|
|
1129
|
-
},
|
|
1245
|
+
}, Ni = (e, t, n, r) => {
|
|
1130
1246
|
switch (e) {
|
|
1131
|
-
case "postgres": return
|
|
1247
|
+
case "postgres": return zi(t, n, r);
|
|
1132
1248
|
case "sqlite":
|
|
1133
|
-
case "turso": return
|
|
1249
|
+
case "turso": return qi(t, n, r);
|
|
1134
1250
|
case "mysql":
|
|
1135
|
-
case "mariadb": return
|
|
1136
|
-
case "mssql": return
|
|
1251
|
+
case "mariadb": return ra(t, n, r);
|
|
1252
|
+
case "mssql": return ua(t, n, r);
|
|
1137
1253
|
}
|
|
1138
|
-
},
|
|
1139
|
-
let n =
|
|
1254
|
+
}, Pi = (e, t) => t === "mssql" && !Fi.test(e) ? /* @__PURE__ */ new Date(`${e}Z`) : new Date(e), Fi = /(?:Z|[+-]\d{2}:?\d{2})$/, Ii = (e, t) => {
|
|
1255
|
+
let n = Li(e.table, e.children, t);
|
|
1140
1256
|
return (e) => e.map((e) => {
|
|
1141
1257
|
let t = e.__row, r = typeof t == "string" ? JSON.parse(t) : t;
|
|
1142
1258
|
return n(r);
|
|
1143
1259
|
});
|
|
1144
|
-
},
|
|
1260
|
+
}, Li = (e, t, n) => {
|
|
1145
1261
|
let r = [];
|
|
1146
1262
|
for (let [t, n] of Object.entries(e.fields)) (n.type === "timestamp" || n.type === "date") && r.push(t);
|
|
1147
1263
|
let i = t.map((e) => {
|
|
1148
|
-
let t =
|
|
1264
|
+
let t = Li(e.target, e.children, n), r = e.relation.kind === "one", i = wi(e), a = i ? Vr({
|
|
1149
1265
|
relationName: e.relationName,
|
|
1150
1266
|
sourceTableName: e.source.tableName,
|
|
1151
1267
|
targetTableName: e.target.tableName,
|
|
@@ -1158,14 +1274,14 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1158
1274
|
isSingle: r,
|
|
1159
1275
|
fromOverFetch: i,
|
|
1160
1276
|
cardinalityMessage: a,
|
|
1161
|
-
junction:
|
|
1277
|
+
junction: Ri(e.junction, n)
|
|
1162
1278
|
};
|
|
1163
1279
|
});
|
|
1164
1280
|
return (e) => {
|
|
1165
1281
|
let t = { ...e };
|
|
1166
1282
|
for (let e of r) {
|
|
1167
1283
|
let r = t[e];
|
|
1168
|
-
typeof r == "string" && (t[e] =
|
|
1284
|
+
typeof r == "string" && (t[e] = Pi(r, n));
|
|
1169
1285
|
}
|
|
1170
1286
|
for (let e of i) {
|
|
1171
1287
|
let n = t[e.name];
|
|
@@ -1175,7 +1291,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1175
1291
|
}
|
|
1176
1292
|
if (e.fromOverFetch) {
|
|
1177
1293
|
let r = n;
|
|
1178
|
-
if (r.length > 1) throw new
|
|
1294
|
+
if (r.length > 1) throw new Br(e.cardinalityMessage);
|
|
1179
1295
|
t[e.name] = r.length === 0 ? null : e.decode(r[0]);
|
|
1180
1296
|
continue;
|
|
1181
1297
|
}
|
|
@@ -1187,202 +1303,202 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1187
1303
|
}
|
|
1188
1304
|
return t;
|
|
1189
1305
|
};
|
|
1190
|
-
},
|
|
1306
|
+
}, Ri = (e, t) => {
|
|
1191
1307
|
if (e === void 0) return;
|
|
1192
1308
|
let n = new Set(e.dateColumns), r = e.requested;
|
|
1193
1309
|
return (e) => {
|
|
1194
1310
|
let i = e._junction ?? {}, a = {};
|
|
1195
1311
|
for (let e of r) {
|
|
1196
1312
|
let r = i[e];
|
|
1197
|
-
a[e] = n.has(e) && typeof r == "string" ?
|
|
1313
|
+
a[e] = n.has(e) && typeof r == "string" ? Pi(r, t) : r;
|
|
1198
1314
|
}
|
|
1199
1315
|
return {
|
|
1200
1316
|
...e,
|
|
1201
1317
|
_junction: a
|
|
1202
1318
|
};
|
|
1203
1319
|
};
|
|
1204
|
-
},
|
|
1205
|
-
let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s =
|
|
1206
|
-
return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``}${
|
|
1207
|
-
},
|
|
1208
|
-
let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${V(
|
|
1320
|
+
}, zi = (e, t, n) => {
|
|
1321
|
+
let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = Bi(i, t.children, n);
|
|
1322
|
+
return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``}${b(e).length > 0 ? r` ORDER BY ${r.csv(b(e).map((e) => e.direction === "desc" ? r`${B(i, e.column, r)} DESC` : r`${B(i, e.column, r)} ASC`))}` : r``}${e.take === void 0 ? r`` : r` LIMIT ${H(e.take, r)}`}${e.skip === void 0 ? r`` : r` OFFSET ${H(e.skip, r)}`}`;
|
|
1323
|
+
}, Bi = (e, t, n, r) => {
|
|
1324
|
+
let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${V(Ai, i)}::text)`;
|
|
1209
1325
|
if (t.length === 0 && r === void 0) return a;
|
|
1210
1326
|
let o = [];
|
|
1211
|
-
r !== void 0 && o.push(i`${V("_junction", i)}, ${B(e,
|
|
1327
|
+
r !== void 0 && o.push(i`${V("_junction", i)}, ${B(e, Ai, i)}`);
|
|
1212
1328
|
for (let r of t) {
|
|
1213
|
-
let t =
|
|
1329
|
+
let t = Vi(r, e, n);
|
|
1214
1330
|
if (t === null) return null;
|
|
1215
1331
|
o.push(i`${V(r.relationName, i)}, ${t}`);
|
|
1216
1332
|
}
|
|
1217
1333
|
return i`${a} || jsonb_build_object(${i.csv(o)})`;
|
|
1218
|
-
},
|
|
1334
|
+
}, Vi = (e, t, n) => {
|
|
1219
1335
|
switch (e.relation.kind) {
|
|
1220
|
-
case "one": return
|
|
1221
|
-
case "many": return
|
|
1222
|
-
case "manyToMany": return
|
|
1336
|
+
case "one": return wi(e) ? Ui(Ti(e), t, n) : Hi(e, t, n);
|
|
1337
|
+
case "many": return Ui(e, t, n);
|
|
1338
|
+
case "manyToMany": return Wi(e, t, n);
|
|
1223
1339
|
}
|
|
1224
|
-
},
|
|
1225
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1340
|
+
}, Hi = (e, t, n) => {
|
|
1341
|
+
let r = n.sql, i = n.nextAlias(), a = Bi(i, e.children, n);
|
|
1226
1342
|
if (a === null) return null;
|
|
1227
1343
|
let o = e.fkSide === "source" ? r`${B(i, "id", r)} = ${B(t, e.foreignKey, r)}` : r`${B(i, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${U(e.branch.where, i, r)}`, c = R(i, e.branch.orderBy, r);
|
|
1228
1344
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}${c} LIMIT 1)`;
|
|
1229
|
-
},
|
|
1230
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1345
|
+
}, Ui = (e, t, n) => {
|
|
1346
|
+
let r = n.sql, i = n.nextAlias(), a = Bi(i, e.children, n);
|
|
1231
1347
|
if (a === null) return null;
|
|
1232
|
-
let o = r`${B(void 0, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(e.branch.where, r)}`, c =
|
|
1348
|
+
let o = r`${B(void 0, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(e.branch.where, r)}`, c = Ki(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`;
|
|
1233
1349
|
return r`COALESCE((SELECT jsonb_agg(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), '[]'::jsonb)`;
|
|
1234
|
-
},
|
|
1235
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
1350
|
+
}, Wi = (e, t, n) => {
|
|
1351
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Bi(o, e.children, n, e.junction);
|
|
1236
1352
|
if (c === null) return null;
|
|
1237
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${L(e.branch.where, r)}`, u =
|
|
1353
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${L(e.branch.where, r)}`, u = va(e, s, r), d = R(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : r`, ${Gi(e.junction, s, r)} AS ${r(Ai)}`;
|
|
1238
1354
|
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 ${B(o, "id", r)} = ${B(s, i.targetKey, r)} WHERE ${B(s, i.sourceKey, r)} = ${B(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), '[]'::jsonb)`;
|
|
1239
|
-
},
|
|
1240
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1355
|
+
}, Gi = (e, t, n) => e.present.length === 0 ? n`jsonb_build_object()` : n`jsonb_build_object(${n.csv(e.present.map((e) => n`${V(e, n)}, ${B(t, e, n)}`))})`, R = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${B(e, t.column, n)} DESC` : n`${B(e, t.column, n)} ASC`))}`, Ki = (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`))}`, qi = (e, t, n) => {
|
|
1356
|
+
let r = n.sql, i = n.nextAlias(), a = Ji(i, t.table, t.children, n);
|
|
1241
1357
|
if (a === null) return null;
|
|
1242
|
-
let o = e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``, s =
|
|
1358
|
+
let o = e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``, s = b(e).length > 0 ? r` ORDER BY ${r.csv(b(e).map((e) => e.direction === "desc" ? r`${B(i, e.column, r)} DESC` : r`${B(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${H(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${H(e.skip, r)}`;
|
|
1243
1359
|
return r`SELECT ${a} AS "__row" FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
|
|
1244
|
-
},
|
|
1360
|
+
}, Ji = (e, t, n, r, i) => {
|
|
1245
1361
|
let a = r.sql, o = [];
|
|
1246
1362
|
for (let n of Object.keys(t.fields)) o.push(a`${V(n, a)}, ${B(e, n, a)}`);
|
|
1247
1363
|
if (i !== void 0) {
|
|
1248
|
-
let e =
|
|
1364
|
+
let e = Yi(i.projection, i.source, a);
|
|
1249
1365
|
o.push(a`${V("_junction", a)}, json_object(${e})`);
|
|
1250
1366
|
}
|
|
1251
1367
|
for (let t of n) {
|
|
1252
|
-
let n =
|
|
1368
|
+
let n = $i(t, e, r);
|
|
1253
1369
|
if (n === null) return null;
|
|
1254
1370
|
o.push(a`${V(t.relationName, a)}, ${n}`);
|
|
1255
1371
|
}
|
|
1256
1372
|
return a`json_object(${a.csv(o)})`;
|
|
1257
|
-
},
|
|
1373
|
+
}, Yi = (e, t, n) => e.present.length === 0 ? n`` : n.csv(e.present.map((e) => n`${V(e, n)}, ${B(t.alias, t.physical(e), n)}`)), Xi = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${B(t, e, n)} AS ${n(ki(e))}`))}`, Zi = (e) => ({
|
|
1258
1374
|
alias: e,
|
|
1259
|
-
physical:
|
|
1260
|
-
}),
|
|
1375
|
+
physical: ki
|
|
1376
|
+
}), Qi = (e) => ({
|
|
1261
1377
|
alias: e,
|
|
1262
1378
|
physical: (e) => e
|
|
1263
|
-
}),
|
|
1379
|
+
}), $i = (e, t, n) => {
|
|
1264
1380
|
switch (e.relation.kind) {
|
|
1265
|
-
case "one": return
|
|
1266
|
-
case "many": return
|
|
1267
|
-
case "manyToMany": return
|
|
1381
|
+
case "one": return wi(e) ? ta(Ti(e), t, n) : ea(e, t, n);
|
|
1382
|
+
case "many": return ta(e, t, n);
|
|
1383
|
+
case "manyToMany": return na(e, t, n);
|
|
1268
1384
|
}
|
|
1269
|
-
},
|
|
1270
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1385
|
+
}, ea = (e, t, n) => {
|
|
1386
|
+
let r = n.sql, i = n.nextAlias(), a = Ji(i, e.target, e.children, n);
|
|
1271
1387
|
if (a === null) return null;
|
|
1272
1388
|
let o = e.fkSide === "source" ? r`${B(i, "id", r)} = ${B(t, e.foreignKey, r)}` : r`${B(i, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`;
|
|
1273
1389
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
|
|
1274
|
-
},
|
|
1275
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1390
|
+
}, ta = (e, t, n) => {
|
|
1391
|
+
let r = n.sql, i = n.nextAlias(), a = Ji(i, e.target, e.children, n);
|
|
1276
1392
|
if (a === null) return null;
|
|
1277
|
-
let o = r`${B(void 0, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, c =
|
|
1393
|
+
let o = r`${B(void 0, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, c = Ki(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`;
|
|
1278
1394
|
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('[]'))`;
|
|
1279
|
-
},
|
|
1280
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
1395
|
+
}, na = (e, t, n) => {
|
|
1396
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Ji(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
|
|
1281
1397
|
projection: e.junction,
|
|
1282
|
-
source:
|
|
1398
|
+
source: Zi(o)
|
|
1283
1399
|
});
|
|
1284
1400
|
if (c === null) return null;
|
|
1285
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, u =
|
|
1401
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, u = va(e, s, r, !0), d = R(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : Xi(e.junction, s, r);
|
|
1286
1402
|
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 ${B(o, "id", r)} = ${B(s, i.targetKey, r)} WHERE ${B(s, i.sourceKey, r)} = ${B(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), json('[]'))`;
|
|
1287
|
-
},
|
|
1403
|
+
}, ra = (e, t, n) => {
|
|
1288
1404
|
let r = n.sql, i = n.nextAlias(), a = z(i, t.table, t.children, n);
|
|
1289
1405
|
if (a === null) return null;
|
|
1290
|
-
let o = e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``, s =
|
|
1406
|
+
let o = e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``, s = b(e).length > 0 ? r` ORDER BY ${r.csv(b(e).map((e) => e.direction === "desc" ? r`${B(i, e.column, r)} DESC` : r`${B(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${H(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${H(e.skip, r)}`;
|
|
1291
1407
|
return r`SELECT ${a} AS \`__row\` FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
|
|
1292
1408
|
}, z = (e, t, n, r, i) => {
|
|
1293
1409
|
let a = r.sql, o = [];
|
|
1294
1410
|
for (let n of Object.keys(t.fields)) o.push(a`${V(n, a)}, ${B(e, n, a)}`);
|
|
1295
1411
|
if (i !== void 0) {
|
|
1296
|
-
let e =
|
|
1412
|
+
let e = Yi(i.projection, i.source, a);
|
|
1297
1413
|
o.push(a`${V("_junction", a)}, JSON_OBJECT(${e})`);
|
|
1298
1414
|
}
|
|
1299
1415
|
for (let t of n) {
|
|
1300
|
-
let n =
|
|
1416
|
+
let n = ia(t, e, r);
|
|
1301
1417
|
if (n === null) return null;
|
|
1302
1418
|
o.push(a`${V(t.relationName, a)}, ${n}`);
|
|
1303
1419
|
}
|
|
1304
1420
|
return a`JSON_OBJECT(${a.csv(o)})`;
|
|
1305
|
-
},
|
|
1421
|
+
}, ia = (e, t, n) => {
|
|
1306
1422
|
switch (e.relation.kind) {
|
|
1307
1423
|
case "one":
|
|
1308
|
-
if (
|
|
1309
|
-
let r =
|
|
1310
|
-
return n.dialect === "mariadb" ?
|
|
1424
|
+
if (wi(e)) {
|
|
1425
|
+
let r = Ti(e);
|
|
1426
|
+
return n.dialect === "mariadb" ? ca(r, t, n) : oa(r, t, n);
|
|
1311
1427
|
}
|
|
1312
|
-
return
|
|
1313
|
-
case "many": return n.dialect === "mariadb" ?
|
|
1314
|
-
case "manyToMany": return n.dialect === "mariadb" ?
|
|
1428
|
+
return aa(e, t, n);
|
|
1429
|
+
case "many": return n.dialect === "mariadb" ? ca(e, t, n) : oa(e, t, n);
|
|
1430
|
+
case "manyToMany": return n.dialect === "mariadb" ? la(e, t, n) : sa(e, t, n);
|
|
1315
1431
|
}
|
|
1316
|
-
},
|
|
1432
|
+
}, aa = (e, t, n) => {
|
|
1317
1433
|
let r = n.sql, i = n.nextAlias(), a = z(i, e.target, e.children, n);
|
|
1318
1434
|
if (a === null) return null;
|
|
1319
1435
|
let o = e.fkSide === "source" ? r`${B(i, "id", r)} = ${B(t, e.foreignKey, r)}` : r`${B(i, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`;
|
|
1320
1436
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
|
|
1321
|
-
},
|
|
1437
|
+
}, oa = (e, t, n) => {
|
|
1322
1438
|
let r = n.sql, i = n.nextAlias(), a = z(i, e.target, e.children, n);
|
|
1323
1439
|
if (a === null) return null;
|
|
1324
|
-
let o = r`${B(void 0, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, c =
|
|
1440
|
+
let o = r`${B(void 0, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, c = Ki(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`;
|
|
1325
1441
|
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())`;
|
|
1326
|
-
},
|
|
1442
|
+
}, sa = (e, t, n) => {
|
|
1327
1443
|
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = z(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
|
|
1328
1444
|
projection: e.junction,
|
|
1329
|
-
source:
|
|
1445
|
+
source: Zi(o)
|
|
1330
1446
|
});
|
|
1331
1447
|
if (c === null) return null;
|
|
1332
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, u =
|
|
1448
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, u = va(e, s, r, !0), d = R(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${H(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${H(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : Xi(e.junction, s, r);
|
|
1333
1449
|
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 ${B(o, "id", r)} = ${B(s, i.targetKey, r)} WHERE ${B(s, i.sourceKey, r)} = ${B(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), JSON_ARRAY())`;
|
|
1334
|
-
},
|
|
1450
|
+
}, ca = (e, t, n) => {
|
|
1335
1451
|
let r = n.sql, i = n.nextAlias(), a = z(i, e.target, e.children, n);
|
|
1336
1452
|
if (a === null) return null;
|
|
1337
1453
|
let o = r`${B(i, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
|
|
1338
1454
|
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`${B(i, e.column, r)} DESC` : r`${B(i, e.column, r)} ASC`))}` : r``}) FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}), JSON_ARRAY())`;
|
|
1339
1455
|
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 ${B(i, "rn", r)} > ${H(d, r)} AND ${B(i, "rn", r)} <= ${H(d + u, r)}` : u === void 0 ? r` AND ${B(i, "rn", r)} > ${H(d, r)}` : r` AND ${B(i, "rn", r)} <= ${H(u, r)}`;
|
|
1340
1456
|
return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${B(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())`;
|
|
1341
|
-
},
|
|
1457
|
+
}, la = (e, t, n) => {
|
|
1342
1458
|
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = (t) => e.junction === void 0 ? void 0 : {
|
|
1343
1459
|
projection: e.junction,
|
|
1344
1460
|
source: t
|
|
1345
|
-
}, l = r`${B(s, i.sourceKey, r)} = ${B(t, "id", r)}`, u = r`${B(o, "id", r)} = ${B(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, f =
|
|
1461
|
+
}, l = r`${B(s, i.sourceKey, r)} = ${B(t, "id", r)}`, u = r`${B(o, "id", r)} = ${B(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${L(W(e.branch.where), r)}`, f = va(e, s, r, !0), p = e.branch.orderBy ?? [];
|
|
1346
1462
|
if (e.branch.limit === void 0 && e.branch.offset === void 0) {
|
|
1347
|
-
let t = z(o, e.target, e.children, n, c(
|
|
1463
|
+
let t = z(o, e.target, e.children, n, c(Qi(s)));
|
|
1348
1464
|
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`${B(o, e.column, r)} DESC` : r`${B(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())`;
|
|
1349
1465
|
}
|
|
1350
|
-
let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${B(o, e.column, r)} DESC` : r`${B(o, e.column, r)} ASC`))}` : r` ORDER BY ${B(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset,
|
|
1351
|
-
if (
|
|
1352
|
-
let
|
|
1353
|
-
return r`COALESCE((SELECT JSON_ARRAYAGG(${
|
|
1354
|
-
},
|
|
1355
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1466
|
+
let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${B(o, e.column, r)} DESC` : r`${B(o, e.column, r)} ASC`))}` : r` ORDER BY ${B(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, _ = h !== void 0 && g !== void 0 ? r` AND ${B(o, "rn", r)} > ${H(g, r)} AND ${B(o, "rn", r)} <= ${H(g + h, r)}` : h === void 0 ? r` AND ${B(o, "rn", r)} > ${H(g, r)}` : r` AND ${B(o, "rn", r)} <= ${H(h, r)}`, v = e.branch.onJunction === void 0 ? r`` : r` WHERE ${U(W(e.branch.onJunction), s, r)}`, ee = z(o, e.target, e.children, n, c(Zi(o)));
|
|
1467
|
+
if (ee === null) return null;
|
|
1468
|
+
let te = e.junction === void 0 ? r`` : Xi(e.junction, s, r);
|
|
1469
|
+
return r`COALESCE((SELECT JSON_ARRAYAGG(${ee} ORDER BY ${B(o, "rn", r)}) FROM (SELECT ${r(o)}.*${te}, ${B(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${B(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 ${B(o, `__src_${i.sourceKey}`, r)} = ${B(t, "id", r)}${d}${_}), JSON_ARRAY())`;
|
|
1470
|
+
}, ua = (e, t, n) => {
|
|
1471
|
+
let r = n.sql, i = n.nextAlias(), a = da(i, t.table, t.children, n);
|
|
1356
1472
|
if (a === null) return null;
|
|
1357
|
-
let o = e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``, s =
|
|
1473
|
+
let o = e.predicate ? r` WHERE ${U(e.predicate, i, r)}` : r``, s = b(e).length > 0 ? r` ORDER BY ${r.csv(b(e).map((e) => e.direction === "desc" ? r`${B(i, e.column, r)} DESC` : r`${B(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
|
|
1358
1474
|
if (e.skip !== void 0) {
|
|
1359
|
-
let t =
|
|
1475
|
+
let t = b(e).length > 0 ? s : r` ORDER BY (SELECT NULL)`;
|
|
1360
1476
|
l = e.take === void 0 ? r`${t} OFFSET ${H(e.skip, r)} ROWS` : r`${t} OFFSET ${H(e.skip, r)} ROWS FETCH NEXT ${H(e.take, r)} ROWS ONLY`;
|
|
1361
1477
|
} else e.take !== void 0 && (c = r`TOP ${H(e.take, r)} `);
|
|
1362
1478
|
let u = e.skip === void 0 ? s : r``;
|
|
1363
1479
|
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}`;
|
|
1364
|
-
},
|
|
1480
|
+
}, da = (e, t, n, r, i) => {
|
|
1365
1481
|
let a = r.sql, o = [];
|
|
1366
1482
|
for (let n of Object.keys(t.fields)) o.push(a`${B(e, n, a)} AS ${a(n)}`);
|
|
1367
|
-
if (i !== void 0) for (let e of i.projection.present) o.push(a`${B(i.source.alias, i.source.physical(e), a)} AS ${
|
|
1483
|
+
if (i !== void 0) for (let e of i.projection.present) o.push(a`${B(i.source.alias, i.source.physical(e), a)} AS ${fa(`_junction.${e}`, a)}`);
|
|
1368
1484
|
for (let t of n) {
|
|
1369
|
-
let n =
|
|
1485
|
+
let n = pa(t, e, r);
|
|
1370
1486
|
if (n === null) return null;
|
|
1371
1487
|
o.push(n);
|
|
1372
1488
|
}
|
|
1373
1489
|
return a.csv(o);
|
|
1374
|
-
},
|
|
1490
|
+
}, fa = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), pa = (e, t, n) => {
|
|
1375
1491
|
switch (e.relation.kind) {
|
|
1376
|
-
case "one": return
|
|
1377
|
-
case "many": return
|
|
1378
|
-
case "manyToMany": return
|
|
1492
|
+
case "one": return wi(e) ? ga(Ti(e), t, n) : ma(e, t, n);
|
|
1493
|
+
case "many": return ga(e, t, n);
|
|
1494
|
+
case "manyToMany": return _a(e, t, n);
|
|
1379
1495
|
}
|
|
1380
|
-
},
|
|
1381
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1496
|
+
}, ma = (e, t, n) => {
|
|
1497
|
+
let r = n.sql, i = n.nextAlias(), a = da(i, e.target, e.children, n);
|
|
1382
1498
|
if (a === null) return null;
|
|
1383
1499
|
let o = e.fkSide === "source" ? r`${B(i, "id", r)} = ${B(t, e.foreignKey, r)}` : r`${B(i, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}`;
|
|
1384
1500
|
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)}`;
|
|
1385
|
-
},
|
|
1501
|
+
}, ha = (e, t, n) => {
|
|
1386
1502
|
if (e.offset !== void 0) {
|
|
1387
1503
|
let r = e.orderBy && e.orderBy.length > 0 ? t : n` ORDER BY (SELECT NULL)`, i = e.limit === void 0 ? n`${r} OFFSET ${H(e.offset, n)} ROWS` : n`${r} OFFSET ${H(e.offset, n)} ROWS FETCH NEXT ${H(e.limit, n)} ROWS ONLY`;
|
|
1388
1504
|
return {
|
|
@@ -1396,29 +1512,29 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1396
1512
|
pagination: n``,
|
|
1397
1513
|
finalOrder: t
|
|
1398
1514
|
};
|
|
1399
|
-
},
|
|
1400
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1515
|
+
}, ga = (e, t, n) => {
|
|
1516
|
+
let r = n.sql, i = n.nextAlias(), a = da(i, e.target, e.children, n);
|
|
1401
1517
|
if (a === null) return null;
|
|
1402
|
-
let o = e.branch.where === void 0 ? r`` : r` AND ${U(e.branch.where, i, r)}`, s = R(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } =
|
|
1518
|
+
let o = e.branch.where === void 0 ? r`` : r` AND ${U(e.branch.where, i, r)}`, s = R(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } = ha(e.branch, s, r);
|
|
1403
1519
|
return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${B(i, e.foreignKey, r)} = ${B(t, e.sourceKey, r)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
|
|
1404
|
-
},
|
|
1405
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
1520
|
+
}, _a = (e, t, n) => {
|
|
1521
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = da(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
|
|
1406
1522
|
projection: e.junction,
|
|
1407
|
-
source:
|
|
1523
|
+
source: Qi(s)
|
|
1408
1524
|
});
|
|
1409
1525
|
if (c === null) return null;
|
|
1410
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${U(e.branch.where, o, r)}`, u =
|
|
1526
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${U(e.branch.where, o, r)}`, u = va(e, s, r), d = R(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } = ha(e.branch, d, r);
|
|
1411
1527
|
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 ${B(o, "id", r)} = ${B(s, i.targetKey, r)} WHERE ${B(s, i.sourceKey, r)} = ${B(t, "id", r)}${u}${l}${m}${p} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
|
|
1412
1528
|
}, B = (e, t, n) => e === void 0 ? n`${n(t)}` : n`${n(e)}.${n(t)}`, V = (e, t) => t.unsafe(`'${e.replace(/'/g, "''")}'`), H = (e, t) => {
|
|
1413
1529
|
if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`literalInt: expected non-negative integer, got ${e}`);
|
|
1414
1530
|
return t.unsafe(String(e));
|
|
1415
|
-
}, U = (e, t, n) => L(
|
|
1531
|
+
}, U = (e, t, n) => L(ya(e, t), n), va = (e, t, n, r = !1) => {
|
|
1416
1532
|
let i = e.branch.onJunction;
|
|
1417
1533
|
return i === void 0 ? n`` : n` AND ${U(r ? W(i) : i, t, n)}`;
|
|
1418
|
-
},
|
|
1419
|
-
if ("not" in e) return { not:
|
|
1420
|
-
if ("and" in e) return { and: e.and.map((e) =>
|
|
1421
|
-
if ("or" in e) return { or: e.or.map((e) =>
|
|
1534
|
+
}, ya = (e, t) => {
|
|
1535
|
+
if ("not" in e) return { not: ya(e.not, t) };
|
|
1536
|
+
if ("and" in e) return { and: e.and.map((e) => ya(e, t)) };
|
|
1537
|
+
if ("or" in e) return { or: e.or.map((e) => ya(e, t)) };
|
|
1422
1538
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
1423
1539
|
let n = e;
|
|
1424
1540
|
return {
|
|
@@ -1440,91 +1556,91 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1440
1556
|
let t = e;
|
|
1441
1557
|
return {
|
|
1442
1558
|
...t,
|
|
1443
|
-
value:
|
|
1559
|
+
value: ba(t.value)
|
|
1444
1560
|
};
|
|
1445
|
-
},
|
|
1446
|
-
e.actors !== void 0 && (
|
|
1447
|
-
},
|
|
1561
|
+
}, ba = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => ba(e)) : e, xa = Symbol.for("@voltro/database/coreTablesRegistry"), Sa = globalThis, Ca = Sa[xa] ?? (Sa[xa] = {}), wa = (e) => {
|
|
1562
|
+
e.actors !== void 0 && (Ca.actors = e.actors), e.tenants !== void 0 && (Ca.tenants = e.tenants);
|
|
1563
|
+
}, Ta = (e, t) => () => {
|
|
1448
1564
|
let n = e();
|
|
1449
1565
|
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`);
|
|
1450
1566
|
return n();
|
|
1451
|
-
},
|
|
1452
|
-
id:
|
|
1453
|
-
kind:
|
|
1567
|
+
}, Ea = () => Ta(() => Ca.actors, "actors"), Da = () => Ta(() => Ca.tenants, "tenants"), Oa = T("actors", {
|
|
1568
|
+
id: D(),
|
|
1569
|
+
kind: w().oneOf([
|
|
1454
1570
|
"user",
|
|
1455
1571
|
"serviceAccount",
|
|
1456
1572
|
"apiKey",
|
|
1457
1573
|
"system"
|
|
1458
1574
|
]),
|
|
1459
|
-
displayName:
|
|
1460
|
-
createdAt:
|
|
1461
|
-
}),
|
|
1575
|
+
displayName: w().nullable(),
|
|
1576
|
+
createdAt: E().default("now")
|
|
1577
|
+
}), ka = (e, t) => ({
|
|
1462
1578
|
column: e,
|
|
1463
1579
|
op: "eq",
|
|
1464
1580
|
value: t
|
|
1465
|
-
}),
|
|
1581
|
+
}), Aa = (e, t) => ({
|
|
1466
1582
|
column: e,
|
|
1467
1583
|
op: "neq",
|
|
1468
1584
|
value: t
|
|
1469
|
-
}),
|
|
1585
|
+
}), ja = (e, t) => ({
|
|
1470
1586
|
column: e,
|
|
1471
1587
|
op: "gt",
|
|
1472
1588
|
value: t
|
|
1473
|
-
}),
|
|
1589
|
+
}), Ma = (e, t) => ({
|
|
1474
1590
|
column: e,
|
|
1475
1591
|
op: "gte",
|
|
1476
1592
|
value: t
|
|
1477
|
-
}),
|
|
1593
|
+
}), Na = (e, t) => ({
|
|
1478
1594
|
column: e,
|
|
1479
1595
|
op: "lt",
|
|
1480
1596
|
value: t
|
|
1481
|
-
}),
|
|
1597
|
+
}), Pa = (e, t) => ({
|
|
1482
1598
|
column: e,
|
|
1483
1599
|
op: "lte",
|
|
1484
1600
|
value: t
|
|
1485
|
-
}),
|
|
1601
|
+
}), Fa = (e, t) => ({
|
|
1486
1602
|
column: e,
|
|
1487
1603
|
op: "in",
|
|
1488
1604
|
value: t
|
|
1489
|
-
}),
|
|
1605
|
+
}), Ia = (e, t) => ({
|
|
1490
1606
|
column: e,
|
|
1491
1607
|
op: "notIn",
|
|
1492
1608
|
value: t
|
|
1493
|
-
}),
|
|
1609
|
+
}), La = (e, t) => ({
|
|
1494
1610
|
column: e,
|
|
1495
1611
|
op: "contains",
|
|
1496
1612
|
value: t
|
|
1497
|
-
}),
|
|
1613
|
+
}), Ra = (e, t) => ({
|
|
1498
1614
|
column: e,
|
|
1499
1615
|
op: "startsWith",
|
|
1500
1616
|
value: t
|
|
1501
|
-
}),
|
|
1617
|
+
}), za = (e, t) => ({
|
|
1502
1618
|
column: e,
|
|
1503
1619
|
op: "arrayContains",
|
|
1504
1620
|
value: t
|
|
1505
|
-
}),
|
|
1621
|
+
}), Ba = (e, t) => ({
|
|
1506
1622
|
column: e,
|
|
1507
1623
|
op: "arrayOverlaps",
|
|
1508
1624
|
value: t
|
|
1509
|
-
}),
|
|
1625
|
+
}), Va = (e, t) => ({
|
|
1510
1626
|
column: e,
|
|
1511
1627
|
op: "arrayHas",
|
|
1512
1628
|
value: t
|
|
1513
|
-
}),
|
|
1629
|
+
}), Ha = {
|
|
1514
1630
|
column: "id",
|
|
1515
1631
|
op: "in",
|
|
1516
1632
|
value: []
|
|
1517
|
-
},
|
|
1633
|
+
}, Ua = (e) => ({
|
|
1518
1634
|
column: e,
|
|
1519
1635
|
op: "isNull"
|
|
1520
|
-
}),
|
|
1636
|
+
}), Wa = (e) => ({
|
|
1521
1637
|
column: e,
|
|
1522
1638
|
op: "isNotNull"
|
|
1523
|
-
}),
|
|
1639
|
+
}), Ga = (e, t) => ({
|
|
1524
1640
|
column: e,
|
|
1525
1641
|
op: "spatial",
|
|
1526
1642
|
value: t
|
|
1527
|
-
}),
|
|
1643
|
+
}), Ka = (...e) => ({ and: e }), qa = (...e) => ({ or: e }), Ja = (e) => ({ not: e }), Ya = (e, ...t) => {
|
|
1528
1644
|
if (t.length === 0) throw Error(`jsonField("${e}"): at least one path segment is required`);
|
|
1529
1645
|
let n = (n, r) => ({
|
|
1530
1646
|
column: e,
|
|
@@ -1546,33 +1662,33 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1546
1662
|
isNull: () => n("isNull"),
|
|
1547
1663
|
isNotNull: () => n("isNotNull")
|
|
1548
1664
|
};
|
|
1549
|
-
},
|
|
1665
|
+
}, Xa = (e) => "descriptor" in e ? e.descriptor : e, Za = (e, t) => ({
|
|
1550
1666
|
column: e,
|
|
1551
1667
|
op: "subquery-in",
|
|
1552
|
-
subquery:
|
|
1553
|
-
}),
|
|
1668
|
+
subquery: Xa(t)
|
|
1669
|
+
}), Qa = (e, t) => ({
|
|
1554
1670
|
column: e,
|
|
1555
1671
|
op: "subquery-not-in",
|
|
1556
|
-
subquery:
|
|
1557
|
-
}),
|
|
1672
|
+
subquery: Xa(t)
|
|
1673
|
+
}), $a = (e) => ({
|
|
1558
1674
|
op: "exists",
|
|
1559
|
-
subquery:
|
|
1560
|
-
}),
|
|
1675
|
+
subquery: Xa(e)
|
|
1676
|
+
}), eo = (e) => ({
|
|
1561
1677
|
op: "not-exists",
|
|
1562
|
-
subquery:
|
|
1563
|
-
}),
|
|
1678
|
+
subquery: Xa(e)
|
|
1679
|
+
}), to = (e, t) => e === t || e instanceof Date && t instanceof Date && e.getTime() === t.getTime(), no = (e, t) => {
|
|
1564
1680
|
if (e == null || t == null) return null;
|
|
1565
1681
|
let n = e instanceof Date ? e.getTime() : e, r = t instanceof Date ? t.getTime() : t;
|
|
1566
1682
|
return typeof n == typeof r ? n === r ? 0 : n > r ? 1 : -1 : null;
|
|
1567
|
-
},
|
|
1683
|
+
}, ro = (e, t, n = null) => {
|
|
1568
1684
|
if (!t) return !1;
|
|
1569
|
-
if ("not" in e) return !
|
|
1685
|
+
if ("not" in e) return !ro(e.not, t, n);
|
|
1570
1686
|
if ("and" in e) {
|
|
1571
|
-
for (let r of e.and) if (!
|
|
1687
|
+
for (let r of e.and) if (!ro(r, t, n)) return !1;
|
|
1572
1688
|
return !0;
|
|
1573
1689
|
}
|
|
1574
1690
|
if ("or" in e) {
|
|
1575
|
-
for (let r of e.or) if (
|
|
1691
|
+
for (let r of e.or) if (ro(r, t, n)) return !0;
|
|
1576
1692
|
return !1;
|
|
1577
1693
|
}
|
|
1578
1694
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
@@ -1589,14 +1705,14 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1589
1705
|
}
|
|
1590
1706
|
let r = e, i = t[r.column];
|
|
1591
1707
|
switch (r.op) {
|
|
1592
|
-
case "eq": return
|
|
1593
|
-
case "neq": return !
|
|
1594
|
-
case "gt": return (
|
|
1595
|
-
case "gte": return (
|
|
1596
|
-
case "lt": return (
|
|
1597
|
-
case "lte": return (
|
|
1598
|
-
case "in": return Array.isArray(r.value) && r.value.some((e) =>
|
|
1599
|
-
case "notIn": return Array.isArray(r.value) && !r.value.some((e) =>
|
|
1708
|
+
case "eq": return to(i, r.value);
|
|
1709
|
+
case "neq": return !to(i, r.value);
|
|
1710
|
+
case "gt": return (no(i, r.value) ?? -1) > 0;
|
|
1711
|
+
case "gte": return (no(i, r.value) ?? -1) >= 0;
|
|
1712
|
+
case "lt": return (no(i, r.value) ?? 1) < 0;
|
|
1713
|
+
case "lte": return (no(i, r.value) ?? 1) <= 0;
|
|
1714
|
+
case "in": return Array.isArray(r.value) && r.value.some((e) => to(i, e));
|
|
1715
|
+
case "notIn": return Array.isArray(r.value) && !r.value.some((e) => to(i, e));
|
|
1600
1716
|
case "contains": return typeof i == "string" && typeof r.value == "string" && i.toLowerCase().includes(r.value.toLowerCase());
|
|
1601
1717
|
case "startsWith": return typeof i == "string" && typeof r.value == "string" && i.startsWith(r.value);
|
|
1602
1718
|
case "arrayContains": {
|
|
@@ -1612,17 +1728,17 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1612
1728
|
case "isNotNull": return i != null;
|
|
1613
1729
|
case "spatial": throw Error("@voltro/plugin-postgis: spatial predicates (ST_DWithin / ST_Contains / ST_Within / ST_Intersects / bbox &&) are not evaluable in-memory — use them in one-shot ctx.store.query reads, not reactive subscriptions.");
|
|
1614
1730
|
}
|
|
1615
|
-
},
|
|
1731
|
+
}, io = function* (e) {
|
|
1616
1732
|
if ("not" in e) {
|
|
1617
|
-
yield*
|
|
1733
|
+
yield* io(e.not);
|
|
1618
1734
|
return;
|
|
1619
1735
|
}
|
|
1620
1736
|
if ("and" in e) {
|
|
1621
|
-
for (let t of e.and) yield*
|
|
1737
|
+
for (let t of e.and) yield* io(t);
|
|
1622
1738
|
return;
|
|
1623
1739
|
}
|
|
1624
1740
|
if ("or" in e) {
|
|
1625
|
-
for (let t of e.or) yield*
|
|
1741
|
+
for (let t of e.or) yield* io(t);
|
|
1626
1742
|
return;
|
|
1627
1743
|
}
|
|
1628
1744
|
e.op === "subquery-in" || e.op === "subquery-not-in" ? yield {
|
|
@@ -1632,46 +1748,46 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1632
1748
|
kind: "exists",
|
|
1633
1749
|
descriptor: e.subquery
|
|
1634
1750
|
});
|
|
1635
|
-
},
|
|
1751
|
+
}, ao = function* (e, t = !0) {
|
|
1636
1752
|
if ("not" in e) {
|
|
1637
|
-
yield*
|
|
1753
|
+
yield* ao(e.not, !1);
|
|
1638
1754
|
return;
|
|
1639
1755
|
}
|
|
1640
1756
|
if ("and" in e) {
|
|
1641
|
-
for (let n of e.and) yield*
|
|
1757
|
+
for (let n of e.and) yield* ao(n, t);
|
|
1642
1758
|
return;
|
|
1643
1759
|
}
|
|
1644
1760
|
if ("or" in e) {
|
|
1645
|
-
for (let t of e.or) yield*
|
|
1761
|
+
for (let t of e.or) yield* ao(t, !1);
|
|
1646
1762
|
return;
|
|
1647
1763
|
}
|
|
1648
1764
|
e.op !== "subquery-in" && e.op !== "subquery-not-in" && e.op !== "exists" && e.op !== "not-exists" && (yield {
|
|
1649
1765
|
...e,
|
|
1650
1766
|
conjunctive: t
|
|
1651
1767
|
});
|
|
1652
|
-
},
|
|
1768
|
+
}, oo = (e, t) => ({
|
|
1653
1769
|
...t,
|
|
1654
1770
|
...e,
|
|
1655
1771
|
origin: e.origin ?? "injected"
|
|
1656
|
-
}),
|
|
1772
|
+
}), so = (e, t, n = {}) => ({
|
|
1657
1773
|
table: e,
|
|
1658
1774
|
op: "insert",
|
|
1659
1775
|
old: null,
|
|
1660
1776
|
new: t,
|
|
1661
1777
|
...n
|
|
1662
|
-
}),
|
|
1778
|
+
}), co = (e, t, n, r = {}) => ({
|
|
1663
1779
|
table: e,
|
|
1664
1780
|
op: "update",
|
|
1665
1781
|
old: t,
|
|
1666
1782
|
new: n,
|
|
1667
1783
|
...r
|
|
1668
|
-
}),
|
|
1784
|
+
}), lo = (e, t, n = {}) => ({
|
|
1669
1785
|
table: e,
|
|
1670
1786
|
op: "delete",
|
|
1671
1787
|
old: t,
|
|
1672
1788
|
new: null,
|
|
1673
1789
|
...n
|
|
1674
|
-
}),
|
|
1790
|
+
}), uo = (e, t, n = {}) => {
|
|
1675
1791
|
let { at: r = "2026-01-01T00:00:00.000Z", column: i = "deletedAt", ...a } = n;
|
|
1676
1792
|
return {
|
|
1677
1793
|
table: e,
|
|
@@ -1686,13 +1802,13 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1686
1802
|
},
|
|
1687
1803
|
...a
|
|
1688
1804
|
};
|
|
1689
|
-
},
|
|
1805
|
+
}, fo = (e) => e == null ? "null" : e instanceof Date ? JSON.stringify(e.toISOString()) : typeof e == "bigint" ? JSON.stringify(e.toString()) : Array.isArray(e) ? `[${e.map(fo).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)}:${fo(t)}`).join(",")}}` : JSON.stringify(e) ?? "null", po = (e) => qt("sha256").update([
|
|
1690
1806
|
e.pipe,
|
|
1691
1807
|
e.op,
|
|
1692
1808
|
e.key,
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
].join("\0")).digest("hex").slice(0, 32),
|
|
1809
|
+
fo(e.next),
|
|
1810
|
+
fo(e.prev)
|
|
1811
|
+
].join("\0")).digest("hex").slice(0, 32), mo = (e, t) => `${e}:${t}`, ho = (e) => {
|
|
1696
1812
|
let t = e.lastIndexOf(":");
|
|
1697
1813
|
if (t <= 0) return null;
|
|
1698
1814
|
let n = Number(e.slice(t + 1));
|
|
@@ -1700,7 +1816,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1700
1816
|
digest: e.slice(0, t),
|
|
1701
1817
|
occurrence: n
|
|
1702
1818
|
};
|
|
1703
|
-
},
|
|
1819
|
+
}, go = class {
|
|
1704
1820
|
#e = /* @__PURE__ */ new Map();
|
|
1705
1821
|
#t;
|
|
1706
1822
|
#n;
|
|
@@ -1722,7 +1838,7 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1722
1838
|
}
|
|
1723
1839
|
seedFromChangeKeys(e, t) {
|
|
1724
1840
|
for (let n of e) {
|
|
1725
|
-
let e =
|
|
1841
|
+
let e = ho(n);
|
|
1726
1842
|
if (e === null) continue;
|
|
1727
1843
|
let r = this.#e.get(e.digest), i = Math.max(r?.count ?? 0, e.occurrence + 1);
|
|
1728
1844
|
this.#e.set(e.digest, {
|
|
@@ -1743,29 +1859,29 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1743
1859
|
this.#e.delete(e.value);
|
|
1744
1860
|
}
|
|
1745
1861
|
}
|
|
1746
|
-
},
|
|
1747
|
-
let t = Number(e[
|
|
1862
|
+
}, _o = "VOLTRO_CHANGE_CLAIMS_TTL_HOURS", vo = 1, yo = (e = process.env) => {
|
|
1863
|
+
let t = Number(e[_o]);
|
|
1748
1864
|
return (Number.isFinite(t) && t > 0 ? t : 1) * 2 * 36e5;
|
|
1749
|
-
},
|
|
1750
|
-
let t = e ??
|
|
1865
|
+
}, bo = new Jt(), xo = (e, t) => bo.run(e, t), So = () => bo.getStore(), Co = (e) => {
|
|
1866
|
+
let t = e ?? bo.getStore();
|
|
1751
1867
|
return t === void 0 ? {} : {
|
|
1752
1868
|
...t.traceId === void 0 ? {} : { traceId: t.traceId },
|
|
1753
1869
|
...t.subjectId === void 0 ? {} : { subjectId: t.subjectId },
|
|
1754
1870
|
...t.procedure === void 0 ? {} : { procedure: t.procedure },
|
|
1755
1871
|
...t.via === void 0 ? {} : { via: t.via }
|
|
1756
1872
|
};
|
|
1757
|
-
},
|
|
1758
|
-
let t =
|
|
1759
|
-
return t === void 0 ? e(void 0) :
|
|
1760
|
-
},
|
|
1873
|
+
}, wo = (e) => {
|
|
1874
|
+
let t = bo.getStore();
|
|
1875
|
+
return t === void 0 ? e(void 0) : bo.run(t, () => e(t));
|
|
1876
|
+
}, To = 3e4, Eo = 1e4, G = /* @__PURE__ */ new Map(), K = 0, Do = (e, t, n) => `${e}\u0000${t}\u0000${String(n)}`, Oo = (e) => {
|
|
1761
1877
|
for (let [t, n] of G) {
|
|
1762
|
-
let r = n.filter((t) => e - t.at <
|
|
1878
|
+
let r = n.filter((t) => e - t.at < To);
|
|
1763
1879
|
K -= n.length - r.length, r.length === 0 ? G.delete(t) : r.length !== n.length && G.set(t, r);
|
|
1764
1880
|
}
|
|
1765
|
-
},
|
|
1881
|
+
}, ko = (e, t) => {
|
|
1766
1882
|
if (t.traceId === void 0 && t.subjectId === void 0 && t.procedure === void 0) return;
|
|
1767
1883
|
let n = Date.now();
|
|
1768
|
-
if (K >=
|
|
1884
|
+
if (K >= Eo && Oo(n), K >= Eo) return;
|
|
1769
1885
|
let r = G.get(e);
|
|
1770
1886
|
r === void 0 ? G.set(e, [{
|
|
1771
1887
|
attribution: t,
|
|
@@ -1774,38 +1890,38 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1774
1890
|
attribution: t,
|
|
1775
1891
|
at: n
|
|
1776
1892
|
}), K += 1;
|
|
1777
|
-
},
|
|
1893
|
+
}, Ao = (e) => {
|
|
1778
1894
|
let t = G.get(e);
|
|
1779
1895
|
if (t === void 0 || t.length === 0) return;
|
|
1780
1896
|
let n = t.shift();
|
|
1781
|
-
if (--K, t.length === 0 && G.delete(e), !(Date.now() - n.at >=
|
|
1782
|
-
},
|
|
1783
|
-
let t =
|
|
1897
|
+
if (--K, t.length === 0 && G.delete(e), !(Date.now() - n.at >= To)) return n.attribution;
|
|
1898
|
+
}, jo = (e) => (G.get(e)?.length ?? 0) > 0, q = /* @__PURE__ */ new Map(), Mo = /* @__PURE__ */ new Map(), No = /* @__PURE__ */ new Map(), Po = 250, Fo = (e) => {
|
|
1899
|
+
let t = Mo.get(e);
|
|
1784
1900
|
if (t === void 0) return;
|
|
1785
|
-
|
|
1786
|
-
let n =
|
|
1787
|
-
n !== void 0 && (clearTimeout(n),
|
|
1901
|
+
Mo.delete(e);
|
|
1902
|
+
let n = No.get(e);
|
|
1903
|
+
n !== void 0 && (clearTimeout(n), No.delete(e));
|
|
1788
1904
|
for (let e of t) e();
|
|
1789
|
-
},
|
|
1905
|
+
}, Io = (e) => {
|
|
1790
1906
|
q.set(e, (q.get(e) ?? 0) + 1);
|
|
1791
|
-
},
|
|
1907
|
+
}, Lo = (e) => {
|
|
1792
1908
|
let t = (q.get(e) ?? 0) - 1;
|
|
1793
1909
|
if (t > 0) {
|
|
1794
1910
|
q.set(e, t);
|
|
1795
1911
|
return;
|
|
1796
1912
|
}
|
|
1797
|
-
q.delete(e),
|
|
1798
|
-
},
|
|
1799
|
-
let i = n == null ? void 0 :
|
|
1913
|
+
q.delete(e), Fo(e);
|
|
1914
|
+
}, Ro = (e, t, n, r) => {
|
|
1915
|
+
let i = n == null ? void 0 : Do(e, t, n), a = () => r(i === void 0 ? void 0 : Ao(i));
|
|
1800
1916
|
if (i === void 0) {
|
|
1801
1917
|
a();
|
|
1802
1918
|
return;
|
|
1803
1919
|
}
|
|
1804
|
-
if (
|
|
1920
|
+
if (jo(i)) {
|
|
1805
1921
|
a();
|
|
1806
1922
|
return;
|
|
1807
1923
|
}
|
|
1808
|
-
let o =
|
|
1924
|
+
let o = Mo.get(e);
|
|
1809
1925
|
if (o === void 0 && (q.get(e) ?? 0) === 0) {
|
|
1810
1926
|
a();
|
|
1811
1927
|
return;
|
|
@@ -1814,91 +1930,91 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1814
1930
|
o.push(a);
|
|
1815
1931
|
return;
|
|
1816
1932
|
}
|
|
1817
|
-
|
|
1818
|
-
let s = setTimeout(() =>
|
|
1819
|
-
typeof s == "object" && typeof s.unref == "function" && s.unref(),
|
|
1820
|
-
},
|
|
1933
|
+
Mo.set(e, [a]);
|
|
1934
|
+
let s = setTimeout(() => Fo(e), Po);
|
|
1935
|
+
typeof s == "object" && typeof s.unref == "function" && s.unref(), No.set(e, s);
|
|
1936
|
+
}, zo = () => {
|
|
1821
1937
|
G.clear(), K = 0, q.clear();
|
|
1822
|
-
for (let e of
|
|
1823
|
-
|
|
1824
|
-
},
|
|
1938
|
+
for (let e of No.values()) clearTimeout(e);
|
|
1939
|
+
No.clear(), Mo.clear();
|
|
1940
|
+
}, Bo = () => K, Vo = 64, Ho = "\0", Uo = 32, Wo = (e, ...t) => `${e}_${qt("sha256").update(t.map(String).join(Ho)).digest("hex").slice(0, Uo)}`, Go = (e) => e.length + 1 + Uo, J = /* @__PURE__ */ new Map(), Ko = (e, t) => {
|
|
1825
1941
|
J.set(e, {
|
|
1826
1942
|
recorder: t.recorder,
|
|
1827
1943
|
tables: new Set(t.tables),
|
|
1828
1944
|
ownTables: new Set(t.ownTables)
|
|
1829
1945
|
});
|
|
1830
|
-
},
|
|
1946
|
+
}, qo = (e) => {
|
|
1831
1947
|
J.delete(e);
|
|
1832
|
-
},
|
|
1833
|
-
let t =
|
|
1834
|
-
if (t !== void 0) return t.n += 1,
|
|
1948
|
+
}, Jo = () => J.clear(), Yo = new Jt(), Xo = (e) => Yo.run({ n: 1 }, e), Zo = (e) => k.suspend(() => {
|
|
1949
|
+
let t = Yo.getStore();
|
|
1950
|
+
if (t !== void 0) return t.n += 1, k.ensuring(e, k.sync(() => {
|
|
1835
1951
|
--t.n;
|
|
1836
1952
|
}));
|
|
1837
1953
|
let n = { n: 1 };
|
|
1838
|
-
return
|
|
1954
|
+
return Yo.enterWith(n), k.ensuring(e, k.sync(() => {
|
|
1839
1955
|
--n.n;
|
|
1840
1956
|
}));
|
|
1841
|
-
}),
|
|
1842
|
-
if (J.size === 0 || (
|
|
1957
|
+
}), Qo = () => (Yo.getStore()?.n ?? 0) > 0, $o = (e) => {
|
|
1958
|
+
if (J.size === 0 || (Yo.getStore()?.n ?? 0) > 0) return !1;
|
|
1843
1959
|
for (let t of J.values()) if (!t.ownTables.has(e) && t.tables.has(e)) return !0;
|
|
1844
1960
|
return !1;
|
|
1845
|
-
},
|
|
1961
|
+
}, es = async (e, t) => {
|
|
1846
1962
|
if (J.size !== 0) {
|
|
1847
1963
|
for (let [n, r] of J.entries()) if (!r.ownTables.has(t.table) && r.tables.has(t.table)) try {
|
|
1848
1964
|
await r.recorder(e, t);
|
|
1849
1965
|
} catch (e) {
|
|
1850
|
-
let r =
|
|
1966
|
+
let r = Pn(e);
|
|
1851
1967
|
throw r === void 0 ? e : Error(`write recorder '${n}' failed while recording a ${t.op} on '${t.table}': ${r}`, { cause: e });
|
|
1852
1968
|
}
|
|
1853
1969
|
}
|
|
1854
|
-
},
|
|
1970
|
+
}, ts = Ut.exponential({
|
|
1855
1971
|
start: 5e-4,
|
|
1856
1972
|
factor: 2,
|
|
1857
1973
|
count: 16
|
|
1858
|
-
}),
|
|
1859
|
-
let n = `${e}\u0000${t}`, r =
|
|
1974
|
+
}), ns = A.counter("voltro_db_queries_total", { description: "Database operations executed, by dialect and operation kind." }), rs = A.histogram("voltro_db_query_duration_seconds", ts, "Database operation duration in seconds, by dialect and operation kind."), is = A.counter("voltro_db_errors_total", { description: "Database operations that threw, by dialect and operation kind." }), as = A.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." }), os = A.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." }), ss = [], cs = /* @__PURE__ */ new Map(), ls = /* @__PURE__ */ new Map(), us = /* @__PURE__ */ new Map(), ds = (e, t) => {
|
|
1975
|
+
let n = `${e}\u0000${t}`, r = cs.get(n);
|
|
1860
1976
|
if (r !== void 0) return r;
|
|
1861
|
-
let i = (n) =>
|
|
1862
|
-
count: i(
|
|
1863
|
-
duration: i(
|
|
1864
|
-
errors: i(
|
|
1977
|
+
let i = (n) => A.tagged(A.tagged(n, "dialect", e), "op", t), a = {
|
|
1978
|
+
count: i(ns),
|
|
1979
|
+
duration: i(rs),
|
|
1980
|
+
errors: i(is)
|
|
1865
1981
|
};
|
|
1866
|
-
return
|
|
1867
|
-
},
|
|
1868
|
-
|
|
1869
|
-
},
|
|
1870
|
-
let n = Math.max(0, (
|
|
1871
|
-
n === 0 ?
|
|
1872
|
-
let r =
|
|
1873
|
-
r === void 0 && (r =
|
|
1874
|
-
},
|
|
1875
|
-
let t =
|
|
1876
|
-
t.count.unsafeUpdate(1,
|
|
1877
|
-
},
|
|
1982
|
+
return cs.set(n, a), a;
|
|
1983
|
+
}, fs = () => {
|
|
1984
|
+
cs.clear(), ls.clear(), us.clear();
|
|
1985
|
+
}, ps = () => cs.size + ls.size + us.size, ms = /* @__PURE__ */ new Map(), hs = (e, t) => {
|
|
1986
|
+
let n = Math.max(0, (ms.get(e) ?? 0) + t);
|
|
1987
|
+
n === 0 ? ms.delete(e) : ms.set(e, n);
|
|
1988
|
+
let r = ls.get(e);
|
|
1989
|
+
r === void 0 && (r = A.tagged(as, "dialect", e), ls.set(e, r)), r.unsafeUpdate(n, ss);
|
|
1990
|
+
}, gs = (e) => ms.get(e) ?? 0, _s = (e) => {
|
|
1991
|
+
let t = ds(String(e.dialect), e.op);
|
|
1992
|
+
t.count.unsafeUpdate(1, ss), t.duration.unsafeUpdate(e.durationMs / 1e3, ss), e.status === "error" && t.errors.unsafeUpdate(1, ss);
|
|
1993
|
+
}, vs = async (e, t, n) => {
|
|
1878
1994
|
let r = performance.now(), i = String(e);
|
|
1879
|
-
|
|
1995
|
+
hs(i, 1);
|
|
1880
1996
|
let a = "ok";
|
|
1881
1997
|
try {
|
|
1882
1998
|
return await n();
|
|
1883
1999
|
} catch (e) {
|
|
1884
2000
|
throw a = "error", e;
|
|
1885
2001
|
} finally {
|
|
1886
|
-
|
|
2002
|
+
hs(i, -1), _s({
|
|
1887
2003
|
dialect: e,
|
|
1888
2004
|
op: t,
|
|
1889
2005
|
durationMs: performance.now() - r,
|
|
1890
2006
|
status: a
|
|
1891
2007
|
});
|
|
1892
2008
|
}
|
|
1893
|
-
},
|
|
2009
|
+
}, ys = 3e5, bs = (e) => {
|
|
1894
2010
|
if (e == null || e === "") return;
|
|
1895
2011
|
let t = Number(e);
|
|
1896
2012
|
return Number.isFinite(t) && t >= 0 ? Math.floor(t) : void 0;
|
|
1897
|
-
},
|
|
1898
|
-
let n =
|
|
2013
|
+
}, xs = (e, t = process.env) => bs(t.VOLTRO_DB_EAGER_FALLBACK_WARN_INTERVAL_MS) ?? bs(e) ?? 3e5, Ss = (e, t = {}) => {
|
|
2014
|
+
let n = xs(t.warnIntervalMs), r = t.now ?? (() => Date.now()), i = /* @__PURE__ */ new Map();
|
|
1899
2015
|
return (t) => {
|
|
1900
|
-
let a = `${t.dialect} ${t.reason}`, o =
|
|
1901
|
-
o === void 0 && (o =
|
|
2016
|
+
let a = `${t.dialect} ${t.reason}`, o = us.get(a);
|
|
2017
|
+
o === void 0 && (o = A.tagged(A.tagged(os, "dialect", String(t.dialect)), "reason", t.reason), us.set(a, o)), o.unsafeUpdate(1, ss);
|
|
1902
2018
|
let s = `${t.table}\u0000${t.reason}`, c = i.get(s), l = c === void 0 || n > 0 && r() - c >= n, u = {
|
|
1903
2019
|
table: t.table,
|
|
1904
2020
|
dialect: String(t.dialect),
|
|
@@ -1912,24 +2028,24 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1912
2028
|
}
|
|
1913
2029
|
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);
|
|
1914
2030
|
};
|
|
1915
|
-
},
|
|
1916
|
-
if (
|
|
1917
|
-
throw
|
|
1918
|
-
},
|
|
1919
|
-
let t = 0, n =
|
|
2031
|
+
}, Cs = (e) => {
|
|
2032
|
+
if (Ht.isSuccess(e)) return e.value;
|
|
2033
|
+
throw zt.squash(e.cause);
|
|
2034
|
+
}, ws = "10 millis", Ts = 3, Es = async (e) => {
|
|
2035
|
+
let t = 0, n = k.suspend(() => {
|
|
1920
2036
|
let n = ++t;
|
|
1921
|
-
return e.withTransaction(
|
|
1922
|
-
if (
|
|
1923
|
-
let r = t.value, i =
|
|
2037
|
+
return e.withTransaction(k.flatMap(k.serviceOption(Yt), (t) => {
|
|
2038
|
+
if (j.isNone(t)) return k.fail(/* @__PURE__ */ Error(`${e.label}: TransactionConnection unexpectedly missing inside withTransaction.`));
|
|
2039
|
+
let r = t.value, i = k.tryPromise({
|
|
1924
2040
|
try: () => e.body(r, n),
|
|
1925
2041
|
catch: (e) => e
|
|
1926
2042
|
});
|
|
1927
|
-
return e.prepare === void 0 ? i :
|
|
1928
|
-
})).pipe(
|
|
1929
|
-
}), r =
|
|
1930
|
-
return
|
|
1931
|
-
},
|
|
1932
|
-
let t =
|
|
2043
|
+
return e.prepare === void 0 ? i : k.flatMap(e.prepare(r), () => i);
|
|
2044
|
+
})).pipe(k.catchAllDefect((t) => e.isRetryable(t) ? k.fail(t) : k.die(t)));
|
|
2045
|
+
}), r = Gt.exponential(ws).pipe(Gt.compose(Gt.recurs(Ts)), Gt.whileInput(e.isRetryable)), i = n.pipe(k.retry(r), k.withSpan(e.span.name, { attributes: { ...e.span.attributes } }));
|
|
2046
|
+
return vs(e.dialect, "transaction", async () => Cs(await e.runPromiseExit(e.wrapProgram === void 0 ? i : e.wrapProgram(i))));
|
|
2047
|
+
}, Ds = async (e) => {
|
|
2048
|
+
let t = So(), n = t === void 0 ? (e) => e() : (e) => xo(t, e), r = await Es({
|
|
1933
2049
|
...e,
|
|
1934
2050
|
body: (r) => {
|
|
1935
2051
|
let i = e.makeView(r, t);
|
|
@@ -1940,50 +2056,50 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1940
2056
|
}
|
|
1941
2057
|
});
|
|
1942
2058
|
return r.view.commitEvents(), r.result;
|
|
1943
|
-
},
|
|
2059
|
+
}, Os = /* @__PURE__ */ new Set([
|
|
1944
2060
|
"1213",
|
|
1945
2061
|
"ER_LOCK_DEADLOCK",
|
|
1946
2062
|
"1205",
|
|
1947
2063
|
"ER_LOCK_WAIT_TIMEOUT",
|
|
1948
2064
|
"1020",
|
|
1949
2065
|
"ER_CHECKREAD"
|
|
1950
|
-
]),
|
|
2066
|
+
]), ks = /* @__PURE__ */ new Set(["40001", "40P01"]), As = /* @__PURE__ */ new Set(["1205"]), js = /* @__PURE__ */ new Set([
|
|
1951
2067
|
"SQLITE_BUSY",
|
|
1952
2068
|
"5",
|
|
1953
2069
|
"SQLITE_LOCKED",
|
|
1954
2070
|
"6"
|
|
1955
|
-
]),
|
|
2071
|
+
]), Ms = /write-write conflict|write-read conflict|database is locked|table is locked|database is busy/i, Ns = /* @__PURE__ */ new Set([
|
|
1956
2072
|
1213,
|
|
1957
2073
|
1205,
|
|
1958
2074
|
1020
|
|
1959
|
-
]),
|
|
1960
|
-
...
|
|
1961
|
-
...
|
|
1962
|
-
...
|
|
1963
|
-
...
|
|
1964
|
-
]),
|
|
2075
|
+
]), Ps = /* @__PURE__ */ new Set([
|
|
2076
|
+
...Os,
|
|
2077
|
+
...ks,
|
|
2078
|
+
...As,
|
|
2079
|
+
...js
|
|
2080
|
+
]), Fs = (e) => xn(e).some(Is), Is = (e) => {
|
|
1965
2081
|
let t = e;
|
|
1966
2082
|
for (let e = 0; e < 6 && typeof t == "object" && t; e++) {
|
|
1967
2083
|
let e = t;
|
|
1968
|
-
if (typeof e.errno == "number" &&
|
|
2084
|
+
if (typeof e.errno == "number" && Ns.has(e.errno) || typeof e.number == "number" && As.has(String(e.number)) || typeof e.code == "string" && Ps.has(e.code) || typeof e.sqlState == "string" && ks.has(e.sqlState) || typeof e.message == "string" && Ms.test(e.message)) return !0;
|
|
1969
2085
|
t = e.cause;
|
|
1970
2086
|
}
|
|
1971
2087
|
return !1;
|
|
1972
|
-
},
|
|
1973
|
-
id:
|
|
1974
|
-
fields: { expiresAt:
|
|
2088
|
+
}, Ls = "voltro/expires", Rs = () => St({
|
|
2089
|
+
id: Ls,
|
|
2090
|
+
fields: { expiresAt: E().nullable() },
|
|
1975
2091
|
behaviors: { defaultWhere: () => "expiresAt IS NULL OR expiresAt > now()" }
|
|
1976
|
-
}),
|
|
1977
|
-
id:
|
|
2092
|
+
}), zs = "voltro/localFirst", Bs = () => St({
|
|
2093
|
+
id: zs,
|
|
1978
2094
|
fields: {}
|
|
1979
|
-
}),
|
|
2095
|
+
}), Vs = (e) => e.appliedMixins.some((e) => e.id === zs), Hs = (e) => {
|
|
1980
2096
|
let t = [];
|
|
1981
|
-
for (let n of Object.values(e))
|
|
2097
|
+
for (let n of Object.values(e)) Vs(n) && t.push(n.tableName);
|
|
1982
2098
|
return t;
|
|
1983
|
-
},
|
|
1984
|
-
let i =
|
|
2099
|
+
}, Us = class extends Vt.TaggedError("TableStreamError") {}, Ws = 1e3, Gs = (e, t, n, r) => {
|
|
2100
|
+
let i = j.match(r, {
|
|
1985
2101
|
onNone: () => e.where,
|
|
1986
|
-
onSome: (n) => e.where ?
|
|
2102
|
+
onSome: (n) => e.where ? Ka(e.where, ja(t, n)) : ja(t, n)
|
|
1987
2103
|
});
|
|
1988
2104
|
return {
|
|
1989
2105
|
table: e.table,
|
|
@@ -1998,19 +2114,19 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
1998
2114
|
...e.includeDeleted === void 0 ? {} : { includeDeleted: e.includeDeleted },
|
|
1999
2115
|
...e.crossTenant === void 0 ? {} : { crossTenant: e.crossTenant }
|
|
2000
2116
|
};
|
|
2001
|
-
},
|
|
2002
|
-
let n = t.pk ?? "id", r = t.chunkSize ??
|
|
2003
|
-
return
|
|
2004
|
-
let a =
|
|
2005
|
-
try: () => e.query(
|
|
2006
|
-
catch: (e) => new
|
|
2117
|
+
}, Ks = (e, t) => {
|
|
2118
|
+
let n = t.pk ?? "id", r = t.chunkSize ?? Ws;
|
|
2119
|
+
return Kt.paginateChunkEffect(j.none(), (i) => {
|
|
2120
|
+
let a = k.tryPromise({
|
|
2121
|
+
try: () => e.query(Gs(t, n, r, i)),
|
|
2122
|
+
catch: (e) => new Us({
|
|
2007
2123
|
table: t.table,
|
|
2008
2124
|
cause: e
|
|
2009
2125
|
})
|
|
2010
2126
|
});
|
|
2011
|
-
return (t.retry ? a.pipe(
|
|
2127
|
+
return (t.retry ? a.pipe(k.retry(t.retry)) : a).pipe(k.map((e) => [Bt.fromIterable(e), e.length === r && e.length > 0 ? j.some(j.some(e[e.length - 1][n])) : j.none()]));
|
|
2012
2128
|
});
|
|
2013
|
-
},
|
|
2129
|
+
}, qs = (e) => {
|
|
2014
2130
|
let t = e.alpha ?? .5;
|
|
2015
2131
|
if (t < 0 || t > 1) throw Error(`hybridSearch: alpha must be in [0, 1], got ${t}`);
|
|
2016
2132
|
return (n) => {
|
|
@@ -2037,17 +2153,17 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
2037
2153
|
}
|
|
2038
2154
|
};
|
|
2039
2155
|
};
|
|
2040
|
-
},
|
|
2156
|
+
}, Js = async (e, t) => {
|
|
2041
2157
|
let n = e.as ?? "embedding", r = t.row[e.from];
|
|
2042
2158
|
if (typeof r != "string" || r.length === 0) return {};
|
|
2043
2159
|
let i = await t.embed(r);
|
|
2044
2160
|
return { [n]: i };
|
|
2045
|
-
},
|
|
2161
|
+
}, Ys = (e) => {
|
|
2046
2162
|
if (!Number.isInteger(e.dimensions) || e.dimensions <= 0) throw Error(`vectorEmbedding: dimensions must be a positive integer, got ${String(e.dimensions)}.`);
|
|
2047
|
-
let t = e.as ?? "embedding", n = (t) =>
|
|
2048
|
-
return
|
|
2163
|
+
let t = e.as ?? "embedding", n = (t) => Js(e, t);
|
|
2164
|
+
return St({
|
|
2049
2165
|
id: "voltro/vectorEmbedding",
|
|
2050
|
-
fields: { [t]:
|
|
2166
|
+
fields: { [t]: gt(e.dimensions) },
|
|
2051
2167
|
...e.index === !1 ? {} : { indexes: [{
|
|
2052
2168
|
fields: [t],
|
|
2053
2169
|
kind: "hnsw",
|
|
@@ -2062,19 +2178,19 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
2062
2178
|
beforeUpdate: n
|
|
2063
2179
|
}
|
|
2064
2180
|
});
|
|
2065
|
-
},
|
|
2181
|
+
}, Xs = 63, Zs = "br_pr", Y = class extends Error {
|
|
2066
2182
|
_tag = "BranchNameInvalid";
|
|
2067
2183
|
constructor(e) {
|
|
2068
2184
|
super(e), this.name = "BranchNameInvalid";
|
|
2069
2185
|
}
|
|
2070
|
-
},
|
|
2186
|
+
}, Qs = (e, t) => {
|
|
2071
2187
|
if (!Number.isInteger(t) || t < 0) throw new Y(`prNumber must be a non-negative integer, got ${String(t)}`);
|
|
2072
|
-
let n =
|
|
2188
|
+
let n = ri(e);
|
|
2073
2189
|
if (n.replace(/_/g, "") === "") throw new Y(`app slug '${e}' has no usable identifier characters`);
|
|
2074
|
-
let r = `${
|
|
2075
|
-
if (r.length >
|
|
2190
|
+
let r = `${Zs}${t}_${n}`;
|
|
2191
|
+
if (r.length > Xs) throw new Y(`branch namespace '${r}' exceeds the ${Xs}-byte identifier limit — use a shorter app slug`);
|
|
2076
2192
|
return r;
|
|
2077
|
-
},
|
|
2193
|
+
}, $s = (e) => e.startsWith(Zs), ec = {
|
|
2078
2194
|
requested: {
|
|
2079
2195
|
provision: "provisioning",
|
|
2080
2196
|
destroy: "destroying"
|
|
@@ -2093,18 +2209,18 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
2093
2209
|
fail: "failed"
|
|
2094
2210
|
},
|
|
2095
2211
|
destroyed: {}
|
|
2096
|
-
},
|
|
2212
|
+
}, tc = class extends Error {
|
|
2097
2213
|
from;
|
|
2098
2214
|
event;
|
|
2099
2215
|
_tag = "BranchTransitionInvalid";
|
|
2100
2216
|
constructor(e, t) {
|
|
2101
2217
|
super(`invalid branch transition: ${e} --${t}-->`), this.from = e, this.event = t, this.name = "BranchTransitionInvalid";
|
|
2102
2218
|
}
|
|
2103
|
-
},
|
|
2104
|
-
let n =
|
|
2105
|
-
if (n === void 0) throw new
|
|
2219
|
+
}, nc = (e, t) => {
|
|
2220
|
+
let n = ec[e][t];
|
|
2221
|
+
if (n === void 0) throw new tc(e, t);
|
|
2106
2222
|
return n;
|
|
2107
|
-
},
|
|
2223
|
+
}, rc = (e, t, n, r, i = [], a = []) => {
|
|
2108
2224
|
if (n === "copy" && (r === void 0 || r === "")) throw new Y("seed 'copy' requires a parentNamespace to snapshot from");
|
|
2109
2225
|
let o = [{
|
|
2110
2226
|
kind: "create-namespace",
|
|
@@ -2134,13 +2250,13 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
2134
2250
|
kind: "seed",
|
|
2135
2251
|
detail: `run boot seeds into ${e}`
|
|
2136
2252
|
}), o;
|
|
2137
|
-
},
|
|
2138
|
-
if (
|
|
2253
|
+
}, ic = (e) => {
|
|
2254
|
+
if (!$s(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
|
|
2139
2255
|
return [{
|
|
2140
2256
|
kind: "drop-namespace",
|
|
2141
2257
|
detail: e
|
|
2142
2258
|
}];
|
|
2143
|
-
},
|
|
2259
|
+
}, ac = (e) => {
|
|
2144
2260
|
if (e === void 0 || e === "") return !1;
|
|
2145
2261
|
try {
|
|
2146
2262
|
let t = new URL(e).hostname.toLowerCase();
|
|
@@ -2148,27 +2264,27 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
2148
2264
|
} catch {
|
|
2149
2265
|
return /\bneon\.(tech|build)\b/i.test(e);
|
|
2150
2266
|
}
|
|
2151
|
-
},
|
|
2267
|
+
}, oc = (e) => e.prefer === void 0 ? e.seed === "copy" && ac(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, sc = (e, t = {}) => [{
|
|
2152
2268
|
kind: "neon-branch-create",
|
|
2153
2269
|
detail: `${t.parentBranch ?? "main"} → ${e} (copy-on-write)`
|
|
2154
|
-
}],
|
|
2155
|
-
if (
|
|
2270
|
+
}], cc = (e) => {
|
|
2271
|
+
if (!$s(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
|
|
2156
2272
|
return [{
|
|
2157
2273
|
kind: "neon-branch-delete",
|
|
2158
2274
|
detail: e
|
|
2159
2275
|
}];
|
|
2160
|
-
},
|
|
2276
|
+
}, lc = (e) => e.mechanism === "neon-cow" ? sc(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : rc(e.branchId, e.tableNames, e.seed, e.parentNamespace, e.foreignKeys, e.indexNames), uc = (e, t) => e === "neon-cow" ? cc(t) : ic(t), dc = (e, t, n) => {
|
|
2161
2277
|
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);
|
|
2162
2278
|
return {
|
|
2163
2279
|
evict: i,
|
|
2164
2280
|
rejectNew: r.filter((e) => !a.has(e.namespace)).length >= t.maxBranches
|
|
2165
2281
|
};
|
|
2166
|
-
},
|
|
2167
|
-
let n =
|
|
2282
|
+
}, fc = async (e, t) => {
|
|
2283
|
+
let n = Qs(e.appSlug, e.prNumber), r = oc({
|
|
2168
2284
|
seed: e.seed,
|
|
2169
2285
|
...e.dbUrl === void 0 ? {} : { dbUrl: e.dbUrl },
|
|
2170
2286
|
...e.prefer === void 0 ? {} : { prefer: e.prefer }
|
|
2171
|
-
}), i =
|
|
2287
|
+
}), i = lc({
|
|
2172
2288
|
mechanism: r,
|
|
2173
2289
|
branchId: n,
|
|
2174
2290
|
tableNames: e.tableNames,
|
|
@@ -2197,15 +2313,15 @@ var Qt = (e) => typeof e == "string" && e !== "" ? e : null, $t = async (e, t, n
|
|
|
2197
2313
|
mechanism: r,
|
|
2198
2314
|
steps: i
|
|
2199
2315
|
};
|
|
2200
|
-
},
|
|
2201
|
-
let r =
|
|
2316
|
+
}, pc = async (e, t, n) => {
|
|
2317
|
+
let r = uc(t, e);
|
|
2202
2318
|
return t === "neon-cow" ? await n.neonBranchDelete(e) : await n.dropNamespace(e), r;
|
|
2203
|
-
},
|
|
2319
|
+
}, mc = (e, t, n) => dc(e, t, n), X = (e) => `"${e.replace(/"/g, "\"\"")}"`, hc = {
|
|
2204
2320
|
cascade: "CASCADE",
|
|
2205
2321
|
restrict: "RESTRICT",
|
|
2206
2322
|
setNull: "SET NULL",
|
|
2207
2323
|
noAction: "NO ACTION"
|
|
2208
|
-
}, Z = (e) => `'${e.replace(/'/g, "''")}'`,
|
|
2324
|
+
}, Z = (e) => `'${e.replace(/'/g, "''")}'`, gc = (e, t) => {
|
|
2209
2325
|
let n = t.columns.map(Z).join(", ");
|
|
2210
2326
|
return `DO $voltro_branch$
|
|
2211
2327
|
DECLARE derived name;
|
|
@@ -2232,10 +2348,10 @@ BEGIN
|
|
|
2232
2348
|
END IF;
|
|
2233
2349
|
END
|
|
2234
2350
|
$voltro_branch$`;
|
|
2235
|
-
},
|
|
2236
|
-
let n = t.onDelete === void 0 ? "" : ` ON DELETE ${
|
|
2351
|
+
}, _c = (e, t) => {
|
|
2352
|
+
let n = t.onDelete === void 0 ? "" : ` ON DELETE ${hc[t.onDelete]}`, r = t.onUpdate === void 0 ? "" : ` ON UPDATE ${hc[t.onUpdate]}`;
|
|
2237
2353
|
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}`;
|
|
2238
|
-
},
|
|
2354
|
+
}, vc = (e) => {
|
|
2239
2355
|
let t = () => {
|
|
2240
2356
|
throw Error("namespace branch executor: Neon ops require a neon-cow executor (use a Neon connection for copy-on-write branches)");
|
|
2241
2357
|
};
|
|
@@ -2243,24 +2359,24 @@ $voltro_branch$`;
|
|
|
2243
2359
|
createNamespace: (t) => e.run(`CREATE SCHEMA IF NOT EXISTS ${X(t)}`),
|
|
2244
2360
|
createTable: (t, n) => e.run(`CREATE TABLE IF NOT EXISTS ${X(t)}.${X(n)} (LIKE ${X(n)} INCLUDING ALL)`),
|
|
2245
2361
|
copyTable: (t, n, r) => e.run(`INSERT INTO ${X(n)}.${X(r)} SELECT * FROM ${X(t)}.${X(r)}`),
|
|
2246
|
-
addForeignKey: (t, n) => e.run(
|
|
2247
|
-
restoreIndexName: (t, n) => e.run(
|
|
2362
|
+
addForeignKey: (t, n) => e.run(_c(t, n)),
|
|
2363
|
+
restoreIndexName: (t, n) => e.run(gc(t, n)),
|
|
2248
2364
|
dropNamespace: (t) => e.run(`DROP SCHEMA IF EXISTS ${X(t)} CASCADE`),
|
|
2249
2365
|
neonBranchCreate: t,
|
|
2250
2366
|
neonBranchDelete: t
|
|
2251
2367
|
};
|
|
2252
|
-
},
|
|
2368
|
+
}, yc = class extends Error {
|
|
2253
2369
|
_tag = "TenantResidencyUnresolved";
|
|
2254
2370
|
constructor(e) {
|
|
2255
2371
|
super(e), this.name = "TenantResidencyUnresolved";
|
|
2256
2372
|
}
|
|
2257
|
-
},
|
|
2373
|
+
}, bc = class extends Error {
|
|
2258
2374
|
region;
|
|
2259
2375
|
_tag = "TenantRegionUnavailable";
|
|
2260
2376
|
constructor(e, t) {
|
|
2261
2377
|
super(t), this.region = e, this.name = "TenantRegionUnavailable";
|
|
2262
2378
|
}
|
|
2263
|
-
},
|
|
2379
|
+
}, xc, Sc = (e) => {
|
|
2264
2380
|
if (e.homes === void 0) throw Error("setResidencyConfig: `homes` is required");
|
|
2265
2381
|
if (e.servableRegions === void 0 || e.servableRegions.length === 0) throw Error("setResidencyConfig: `servableRegions` must be non-empty (which regions this deployment serves)");
|
|
2266
2382
|
let t = /* @__PURE__ */ new Map();
|
|
@@ -2269,55 +2385,55 @@ $voltro_branch$`;
|
|
|
2269
2385
|
if (e !== void 0 && e !== n.region) throw Error(`residency: tenant '${n.tenantId}' is mapped to two regions ('${e}' and '${n.region}')`);
|
|
2270
2386
|
t.set(n.tenantId, n.region);
|
|
2271
2387
|
}
|
|
2272
|
-
return
|
|
2273
|
-
},
|
|
2274
|
-
|
|
2275
|
-
},
|
|
2276
|
-
if (e == null || e === "") throw new
|
|
2388
|
+
return xc = e, e;
|
|
2389
|
+
}, Cc = () => xc, wc = () => {
|
|
2390
|
+
xc = void 0;
|
|
2391
|
+
}, Tc = (e, t) => {
|
|
2392
|
+
if (e == null || e === "") throw new yc("residency is on but the request has no resolvable tenant — refusing to bind a store");
|
|
2277
2393
|
let n = t.homes.find((t) => t.tenantId === e);
|
|
2278
|
-
if (n === void 0) throw new
|
|
2394
|
+
if (n === void 0) throw new yc(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
|
|
2279
2395
|
return n;
|
|
2280
|
-
},
|
|
2281
|
-
let n =
|
|
2396
|
+
}, Ec = (e, t) => t.servableRegions.includes(e), Dc = (e, t) => {
|
|
2397
|
+
let n = Tc(e.tenantId, t), r = ii(n.tenantId);
|
|
2282
2398
|
return {
|
|
2283
2399
|
region: n.region,
|
|
2284
2400
|
namespace: r,
|
|
2285
2401
|
...n.connectionKey === void 0 ? {} : { connectionKey: n.connectionKey }
|
|
2286
2402
|
};
|
|
2287
|
-
},
|
|
2288
|
-
let r =
|
|
2289
|
-
if (!
|
|
2403
|
+
}, Oc = (e, t, n) => {
|
|
2404
|
+
let r = Dc(e, t);
|
|
2405
|
+
if (!Ec(r.region, t)) throw new bc(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
|
|
2290
2406
|
let i = n.get(r.region);
|
|
2291
|
-
if (i === void 0) throw new
|
|
2407
|
+
if (i === void 0) throw new bc(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
|
|
2292
2408
|
return {
|
|
2293
2409
|
store: i,
|
|
2294
2410
|
placement: r
|
|
2295
2411
|
};
|
|
2296
|
-
},
|
|
2297
|
-
let { store: i, placement: a } =
|
|
2412
|
+
}, kc = async (e, t, n, r) => {
|
|
2413
|
+
let { store: i, placement: a } = Oc(e, t, n);
|
|
2298
2414
|
return await r(i, a), a;
|
|
2299
|
-
},
|
|
2415
|
+
}, Ac = (e) => {
|
|
2300
2416
|
if (typeof e == "string") return e;
|
|
2301
2417
|
if ("jsonPath" in e) {
|
|
2302
2418
|
let { column: t, path: n, numeric: r } = e.jsonPath;
|
|
2303
2419
|
return `(json:${t}->${n.join(".")}${r ? "::num" : ""})`;
|
|
2304
2420
|
}
|
|
2305
2421
|
return `(${e.expr})`;
|
|
2306
|
-
}, Q = (e) => e.map(
|
|
2422
|
+
}, Q = (e) => e.map(Ac), jc = (e, t) => {
|
|
2307
2423
|
if (e.length !== t.length) return !1;
|
|
2308
|
-
for (let n = 0; n < e.length; n++) if (
|
|
2424
|
+
for (let n = 0; n < e.length; n++) if (Ac(e[n]) !== Ac(t[n])) return !1;
|
|
2309
2425
|
return !0;
|
|
2310
|
-
},
|
|
2426
|
+
}, Mc = (e, t) => {
|
|
2311
2427
|
if (e.length >= t.length) return !1;
|
|
2312
|
-
for (let n = 0; n < e.length; n++) if (
|
|
2428
|
+
for (let n = 0; n < e.length; n++) if (Ac(e[n]) !== Ac(t[n])) return !1;
|
|
2313
2429
|
return !0;
|
|
2314
|
-
},
|
|
2430
|
+
}, Nc = (e) => {
|
|
2315
2431
|
let t = [], n = e.appliedIndexes, r = e.tableName;
|
|
2316
2432
|
for (let e = 0; e < n.length; e++) {
|
|
2317
2433
|
let i = n[e];
|
|
2318
2434
|
for (let a = e + 1; a < n.length; a++) {
|
|
2319
2435
|
let e = n[a];
|
|
2320
|
-
if (
|
|
2436
|
+
if (jc(i.fields, e.fields)) {
|
|
2321
2437
|
let [n, a] = i.name < e.name ? [i, e] : [e, i];
|
|
2322
2438
|
t.push({
|
|
2323
2439
|
kind: "duplicate-fields",
|
|
@@ -2328,13 +2444,13 @@ $voltro_branch$`;
|
|
|
2328
2444
|
});
|
|
2329
2445
|
continue;
|
|
2330
2446
|
}
|
|
2331
|
-
|
|
2447
|
+
Mc(i.fields, e.fields) ? t.push({
|
|
2332
2448
|
kind: "redundant-prefix",
|
|
2333
2449
|
table: r,
|
|
2334
2450
|
redundant: i,
|
|
2335
2451
|
coveredBy: e,
|
|
2336
2452
|
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).`
|
|
2337
|
-
}) :
|
|
2453
|
+
}) : Mc(e.fields, i.fields) && t.push({
|
|
2338
2454
|
kind: "redundant-prefix",
|
|
2339
2455
|
table: r,
|
|
2340
2456
|
redundant: e,
|
|
@@ -2344,23 +2460,23 @@ $voltro_branch$`;
|
|
|
2344
2460
|
}
|
|
2345
2461
|
}
|
|
2346
2462
|
return t;
|
|
2347
|
-
},
|
|
2463
|
+
}, Pc = (e) => {
|
|
2348
2464
|
let t = [];
|
|
2349
|
-
for (let n of e) t.push(...
|
|
2465
|
+
for (let n of e) t.push(...Nc(n));
|
|
2350
2466
|
return t;
|
|
2351
|
-
},
|
|
2352
|
-
let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n,
|
|
2467
|
+
}, Fc = "\x1B[", Ic = `${Fc}38;2;245;158;11m`, Lc = `${Fc}38;2;16;185;129m`, Rc = (e, t) => `${e}${t}${N.reset}`, $ = (e, t, n) => e ? typeof t == "function" ? t(n) : Rc(t, n) : n, zc = (e, t = {}) => {
|
|
2468
|
+
let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n, N.dim, e.padEnd(11)), a = (e) => $(n, (e) => N.bold(N.brand(e)), e), o = (e) => $(n, N.brightRed24, e), s = (e) => $(n, Lc, e), c = (e) => $(n, Ic, e), l = (e) => $(n, N.dim, e), u = `${c("index audit")} ${l("·")} ${$(n, N.bold, e.kind)}`, d = e.redundant.fields.length, f = Q(e.coveredBy.fields.slice(d)), p = (e, t) => {
|
|
2353
2469
|
let n = e.slice(0, t), r = e.slice(t), i = [];
|
|
2354
2470
|
return n.length > 0 && i.push(s(`[${n.join(", ")}]`)), r.length > 0 && i.push(c(`+ [${r.join(", ")}]`)), i.join(" ");
|
|
2355
2471
|
}, m = [];
|
|
2356
|
-
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,
|
|
2357
|
-
},
|
|
2472
|
+
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, N.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");
|
|
2473
|
+
}, Bc = (e, { apply: t, undo: n }) => ({
|
|
2358
2474
|
name: e,
|
|
2359
2475
|
apply: t,
|
|
2360
2476
|
undo: n
|
|
2361
|
-
}),
|
|
2477
|
+
}), Vc = (e) => {
|
|
2362
2478
|
if (!/^\d{14}_/.test(e.id)) throw Error(`migration "${e.id}": id must start with a 14-digit timestamp followed by "_" (convention: <YYYYMMDDHHMMSS>_<slug>)`);
|
|
2363
|
-
let t = e.steps({ step:
|
|
2479
|
+
let t = e.steps({ step: Bc });
|
|
2364
2480
|
if (t.length === 0) throw Error(`migration "${e.id}": at least one step is required`);
|
|
2365
2481
|
return {
|
|
2366
2482
|
__migration: !0,
|
|
@@ -2368,106 +2484,106 @@ $voltro_branch$`;
|
|
|
2368
2484
|
name: e.name,
|
|
2369
2485
|
steps: t
|
|
2370
2486
|
};
|
|
2371
|
-
},
|
|
2372
|
-
id:
|
|
2373
|
-
name:
|
|
2374
|
-
hash:
|
|
2375
|
-
status:
|
|
2376
|
-
appliedAt:
|
|
2377
|
-
durationMs:
|
|
2378
|
-
errorMessage:
|
|
2379
|
-
errorStack:
|
|
2380
|
-
workflowRunId:
|
|
2381
|
-
createdAt:
|
|
2382
|
-
updatedAt:
|
|
2383
|
-
}).index(["status"]),
|
|
2384
|
-
id:
|
|
2385
|
-
name:
|
|
2386
|
-
lifecycle:
|
|
2387
|
-
fingerprint:
|
|
2388
|
-
cronSchedule:
|
|
2389
|
-
watchedTables:
|
|
2390
|
-
nextRunAt:
|
|
2391
|
-
lastRunStatus:
|
|
2392
|
-
lastRunAt:
|
|
2393
|
-
lastRunDurationMs:
|
|
2394
|
-
lastRunRowsTouched:
|
|
2395
|
-
lastError:
|
|
2396
|
-
workflowRunId:
|
|
2397
|
-
createdAt:
|
|
2398
|
-
updatedAt:
|
|
2399
|
-
}).index(["lifecycle"]).index(["nextRunAt"]),
|
|
2400
|
-
id:
|
|
2401
|
-
fingerprint:
|
|
2402
|
-
liveFingerprint:
|
|
2403
|
-
operations:
|
|
2404
|
-
rollbackPlan:
|
|
2405
|
-
appliedBy:
|
|
2406
|
-
environment:
|
|
2407
|
-
source:
|
|
2408
|
-
onlineStrategy:
|
|
2409
|
-
durationMs:
|
|
2410
|
-
notes:
|
|
2411
|
-
squashedAt:
|
|
2412
|
-
appliedAt:
|
|
2413
|
-
createdAt:
|
|
2414
|
-
updatedAt:
|
|
2415
|
-
}).index(["fingerprint"]).index(["environment"]),
|
|
2416
|
-
id:
|
|
2417
|
-
scope:
|
|
2418
|
-
key:
|
|
2419
|
-
status:
|
|
2420
|
-
response:
|
|
2421
|
-
createdAt:
|
|
2422
|
-
}).unique(["scope", "key"]).index(["createdAt"]),
|
|
2423
|
-
id:
|
|
2424
|
-
key:
|
|
2425
|
-
value:
|
|
2426
|
-
expiresAt:
|
|
2427
|
-
createdAt:
|
|
2428
|
-
updatedAt:
|
|
2429
|
-
}).index(["expiresAt"]),
|
|
2430
|
-
id:
|
|
2431
|
-
tenantId:
|
|
2432
|
-
name:
|
|
2433
|
-
hashedKey:
|
|
2434
|
-
keyPrefix:
|
|
2435
|
-
scopes:
|
|
2436
|
-
lastUsedAt:
|
|
2437
|
-
requestCount:
|
|
2438
|
-
expiresAt:
|
|
2439
|
-
revokedAt:
|
|
2440
|
-
createdBy:
|
|
2441
|
-
onBehalfOf:
|
|
2442
|
-
metadata:
|
|
2443
|
-
createdAt:
|
|
2444
|
-
}).index("byApiKeyTenant", ["tenantId"]),
|
|
2445
|
-
id:
|
|
2446
|
-
replicaId:
|
|
2447
|
-
startedAt:
|
|
2448
|
-
version:
|
|
2449
|
-
kind:
|
|
2450
|
-
payload:
|
|
2451
|
-
reachableAt:
|
|
2452
|
-
writtenAt:
|
|
2453
|
-
}).unique(["replicaId", "kind"]).index(["kind"]),
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
],
|
|
2458
|
-
id:
|
|
2459
|
-
startedAt:
|
|
2460
|
-
kind:
|
|
2461
|
-
tables:
|
|
2462
|
-
capture:
|
|
2463
|
-
via:
|
|
2464
|
-
staging:
|
|
2465
|
-
heartbeatAt:
|
|
2487
|
+
}, Hc = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, Uc = T("_voltro_migrations", {
|
|
2488
|
+
id: D({ prefix: "mig" }),
|
|
2489
|
+
name: w(),
|
|
2490
|
+
hash: w(),
|
|
2491
|
+
status: w(),
|
|
2492
|
+
appliedAt: E().nullable(),
|
|
2493
|
+
durationMs: y().nullable(),
|
|
2494
|
+
errorMessage: w().nullable(),
|
|
2495
|
+
errorStack: w().nullable(),
|
|
2496
|
+
workflowRunId: w().nullable(),
|
|
2497
|
+
createdAt: E().default("now"),
|
|
2498
|
+
updatedAt: E().default("now").onUpdate("now")
|
|
2499
|
+
}).index(["status"]), Wc = T("_voltro_seeds", {
|
|
2500
|
+
id: D({ prefix: "seed" }),
|
|
2501
|
+
name: w(),
|
|
2502
|
+
lifecycle: w(),
|
|
2503
|
+
fingerprint: w(),
|
|
2504
|
+
cronSchedule: w().nullable(),
|
|
2505
|
+
watchedTables: S().nullable(),
|
|
2506
|
+
nextRunAt: E().nullable(),
|
|
2507
|
+
lastRunStatus: w().nullable(),
|
|
2508
|
+
lastRunAt: E().nullable(),
|
|
2509
|
+
lastRunDurationMs: y().nullable(),
|
|
2510
|
+
lastRunRowsTouched: y().nullable(),
|
|
2511
|
+
lastError: w().nullable(),
|
|
2512
|
+
workflowRunId: w().nullable(),
|
|
2513
|
+
createdAt: E().default("now"),
|
|
2514
|
+
updatedAt: E().default("now").onUpdate("now")
|
|
2515
|
+
}).index(["lifecycle"]).index(["nextRunAt"]), Gc = T("_voltro_migration_plans", {
|
|
2516
|
+
id: D({ prefix: "plan" }),
|
|
2517
|
+
fingerprint: w(),
|
|
2518
|
+
liveFingerprint: w().nullable(),
|
|
2519
|
+
operations: S(),
|
|
2520
|
+
rollbackPlan: S().nullable(),
|
|
2521
|
+
appliedBy: w(),
|
|
2522
|
+
environment: w(),
|
|
2523
|
+
source: w(),
|
|
2524
|
+
onlineStrategy: w().nullable(),
|
|
2525
|
+
durationMs: y(),
|
|
2526
|
+
notes: w().nullable(),
|
|
2527
|
+
squashedAt: E().nullable(),
|
|
2528
|
+
appliedAt: E().default("now"),
|
|
2529
|
+
createdAt: E().default("now"),
|
|
2530
|
+
updatedAt: E().default("now").onUpdate("now")
|
|
2531
|
+
}).index(["fingerprint"]).index(["environment"]), Kc = T("_voltro_idempotency", {
|
|
2532
|
+
id: D({ prefix: "idem" }),
|
|
2533
|
+
scope: w(),
|
|
2534
|
+
key: w(),
|
|
2535
|
+
status: w(),
|
|
2536
|
+
response: S().nullable(),
|
|
2537
|
+
createdAt: E().default("now")
|
|
2538
|
+
}).unique(["scope", "key"]).index(["createdAt"]), qc = T("_voltro_kv", {
|
|
2539
|
+
id: D({ prefix: "kv" }),
|
|
2540
|
+
key: w().unique(),
|
|
2541
|
+
value: w().nullable(),
|
|
2542
|
+
expiresAt: E().nullable(),
|
|
2543
|
+
createdAt: E().default("now"),
|
|
2544
|
+
updatedAt: E().default("now").onUpdate("now")
|
|
2545
|
+
}).index(["expiresAt"]), Jc = T("_voltro_api_keys", {
|
|
2546
|
+
id: D({ prefix: "apikey" }),
|
|
2547
|
+
tenantId: w().nullable(),
|
|
2548
|
+
name: w(),
|
|
2549
|
+
hashedKey: w().maxLength(64).unique(),
|
|
2550
|
+
keyPrefix: w(),
|
|
2551
|
+
scopes: S().nullable(),
|
|
2552
|
+
lastUsedAt: E().nullable(),
|
|
2553
|
+
requestCount: y().default(0),
|
|
2554
|
+
expiresAt: E().nullable(),
|
|
2555
|
+
revokedAt: E().nullable(),
|
|
2556
|
+
createdBy: w().nullable(),
|
|
2557
|
+
onBehalfOf: w().nullable(),
|
|
2558
|
+
metadata: S().nullable(),
|
|
2559
|
+
createdAt: E().default("now")
|
|
2560
|
+
}).index("byApiKeyTenant", ["tenantId"]), Yc = T("_voltro_replica_observations", {
|
|
2561
|
+
id: D({ prefix: "robs" }),
|
|
2562
|
+
replicaId: w().maxLength(191),
|
|
2563
|
+
startedAt: E(),
|
|
2564
|
+
version: w().maxLength(64).nullable(),
|
|
2565
|
+
kind: w().maxLength(64),
|
|
2566
|
+
payload: w().nullable(),
|
|
2567
|
+
reachableAt: w().maxLength(255).nullable(),
|
|
2568
|
+
writtenAt: E().default("now").onUpdate("now")
|
|
2569
|
+
}).unique(["replicaId", "kind"]).index(["kind"]), Xc = [
|
|
2570
|
+
Uc,
|
|
2571
|
+
Wc,
|
|
2572
|
+
Gc
|
|
2573
|
+
], Zc = "_voltro_replace_in_progress", Qc = T(Zc, {
|
|
2574
|
+
id: D({ prefix: "repl" }),
|
|
2575
|
+
startedAt: E().default("now"),
|
|
2576
|
+
kind: w().default("replace"),
|
|
2577
|
+
tables: w().nullable(),
|
|
2578
|
+
capture: w().nullable(),
|
|
2579
|
+
via: w(),
|
|
2580
|
+
staging: w().nullable(),
|
|
2581
|
+
heartbeatAt: E().nullable(),
|
|
2466
2582
|
resumable: p().nullable()
|
|
2467
|
-
}),
|
|
2583
|
+
}), $c = 30, el = (e, t) => {
|
|
2468
2584
|
let n = typeof t == "number" && Number.isFinite(t) && t > 0 ? t : 30, r = Number(e.VOLTRO_STAGING_STALE_MINUTES);
|
|
2469
2585
|
return (Number.isFinite(r) && r > 0 ? r : n) * 6e4;
|
|
2470
|
-
},
|
|
2586
|
+
}, tl = (e) => e == null || String(e).length === 0 ? [] : String(e).split(",").map((e) => e.trim()).filter((e) => e.length > 0), nl = (e) => {
|
|
2471
2587
|
let t = e.filter((e) => e.kind !== "staging");
|
|
2472
2588
|
if (t.length !== 0) return `refusing to start: a destructive data operation did not finish.
|
|
2473
2589
|
${t.map((e) => {
|
|
@@ -2482,7 +2598,7 @@ ${t.map((e) => {
|
|
|
2482
2598
|
|
|
2483
2599
|
When the data is back, or you have decided the current state is correct, clear the marker:
|
|
2484
2600
|
voltro data clear-replace-marker --yes`;
|
|
2485
|
-
},
|
|
2601
|
+
}, rl = (e, t, n) => {
|
|
2486
2602
|
let r = e.filter((e) => e.kind === "staging");
|
|
2487
2603
|
return {
|
|
2488
2604
|
all: r,
|
|
@@ -2492,7 +2608,7 @@ ${t.map((e) => {
|
|
|
2492
2608
|
return Number.isFinite(r) ? t - r >= n : !1;
|
|
2493
2609
|
})
|
|
2494
2610
|
};
|
|
2495
|
-
},
|
|
2611
|
+
}, il = (e, t) => {
|
|
2496
2612
|
if (e.all.length === 0) return;
|
|
2497
2613
|
let n = new Set(e.droppable.map((e) => e.id));
|
|
2498
2614
|
return `staged data-import leftovers:
|
|
@@ -2501,22 +2617,22 @@ ${e.all.map((e) => {
|
|
|
2501
2617
|
return n.has(e.id) ? ` - ${a} — DROPPED: the run is not resumable and has been silent long enough that nothing is loading into them.` : e.resumable ? ` - ${a} — KEPT: the run was started \`--no-atomic\`, so these ARE its resume point. Re-run the same\n bundle to continue from them, or drop them with: voltro data clear-staging --yes` : ` - ${a} — KEPT: still beating, so an import is loading into them right now.`;
|
|
2502
2618
|
}).join("\n")}\n The target of a staged \`replace\` is untouched until one short swap at the end, so none of this is
|
|
2503
2619
|
a reason to refuse the boot — it is a reason to know the disk is holding a copy of a bundle.`;
|
|
2504
|
-
},
|
|
2505
|
-
let n =
|
|
2620
|
+
}, al = "id", ol = (e, t) => {
|
|
2621
|
+
let n = C(e);
|
|
2506
2622
|
if (n === void 0) return t;
|
|
2507
|
-
let r = n.fields[
|
|
2508
|
-
if (r === void 0 || t[
|
|
2623
|
+
let r = n.fields[al]?.idScheme;
|
|
2624
|
+
if (r === void 0 || t[al] != null) return t;
|
|
2509
2625
|
if (r.kind === "numeric") {
|
|
2510
|
-
if (!(
|
|
2626
|
+
if (!(al in t)) return t;
|
|
2511
2627
|
let e = { ...t };
|
|
2512
|
-
return delete e[
|
|
2628
|
+
return delete e[al], e;
|
|
2513
2629
|
}
|
|
2514
|
-
let i =
|
|
2630
|
+
let i = rt(r, e);
|
|
2515
2631
|
return i === null ? t : {
|
|
2516
2632
|
...t,
|
|
2517
|
-
[
|
|
2633
|
+
[al]: i
|
|
2518
2634
|
};
|
|
2519
|
-
},
|
|
2635
|
+
}, sl = (e, t) => t.map((t) => ol(e, t)), cl = {
|
|
2520
2636
|
postgres: { maxBindParameters: 65535 },
|
|
2521
2637
|
mysql: { maxBindParameters: 65535 },
|
|
2522
2638
|
mariadb: { maxBindParameters: 65535 },
|
|
@@ -2526,25 +2642,25 @@ ${e.all.map((e) => {
|
|
|
2526
2642
|
},
|
|
2527
2643
|
sqlite: { maxBindParameters: 32766 },
|
|
2528
2644
|
turso: { maxBindParameters: 32766 }
|
|
2529
|
-
},
|
|
2645
|
+
}, ll = (e) => cl[e], ul = (e) => {
|
|
2530
2646
|
let t = /* @__PURE__ */ new Set();
|
|
2531
2647
|
for (let n of e) for (let e of Object.keys(n)) t.add(e);
|
|
2532
2648
|
return t.size;
|
|
2533
|
-
},
|
|
2649
|
+
}, dl = (e, t) => {
|
|
2534
2650
|
if (t === void 0 || e.length === 0) return [e];
|
|
2535
|
-
let n = Math.max(1,
|
|
2651
|
+
let n = Math.max(1, ul(e)), r = Math.floor(t.maxBindParameters / n), i = t.maxRowsPerStatement ?? Infinity, a = Math.max(1, Math.min(r, i));
|
|
2536
2652
|
if (e.length <= a) return [e];
|
|
2537
2653
|
let o = [];
|
|
2538
2654
|
for (let t = 0; t < e.length; t += a) o.push(e.slice(t, t + a));
|
|
2539
2655
|
return o;
|
|
2540
|
-
},
|
|
2656
|
+
}, fl = (e, t) => {
|
|
2541
2657
|
let n = [], r = t;
|
|
2542
2658
|
for (let [t, i] of Object.entries(e.fields)) {
|
|
2543
2659
|
let e = i;
|
|
2544
2660
|
e.nullable || e.hasDefault || e.idScheme !== void 0 || e.generatedAs !== void 0 || (r[t] === void 0 || r[t] === null) && n.push(t);
|
|
2545
2661
|
}
|
|
2546
2662
|
return n;
|
|
2547
|
-
},
|
|
2663
|
+
}, pl = (e, t, n) => {
|
|
2548
2664
|
let r = n, i = new Set(e === void 0 ? [] : Object.entries(e.fields).filter(([, e]) => e.generatedAs !== void 0).map(([e]) => e)), a = [];
|
|
2549
2665
|
for (let e of t) i.has(e) || (r[e] === void 0 ? a.push({
|
|
2550
2666
|
column: e,
|
|
@@ -2554,28 +2670,29 @@ ${e.all.map((e) => {
|
|
|
2554
2670
|
reason: "null"
|
|
2555
2671
|
}));
|
|
2556
2672
|
return a;
|
|
2557
|
-
},
|
|
2673
|
+
}, ml = (e, t, n) => e.insert(t.tableName, n), hl = (e, t, n, r) => e.upsert(t.tableName, n, {
|
|
2558
2674
|
conflictColumns: r.conflictColumns,
|
|
2559
|
-
...r.update === void 0 ? {} : { update: r.update }
|
|
2560
|
-
|
|
2675
|
+
...r.update === void 0 ? {} : { update: r.update },
|
|
2676
|
+
...r.updateValues === void 0 ? {} : { updateValues: r.updateValues }
|
|
2677
|
+
}), gl = (e, t, n, r) => e.updateMany(t.tableName, n, { where: r.where }), _l = 512, vl = (e) => {
|
|
2561
2678
|
e.setMaxListeners(512);
|
|
2562
|
-
},
|
|
2679
|
+
}, yl = (e, t, n) => ({
|
|
2563
2680
|
_tag: "PrimaryKeyConflictError",
|
|
2564
2681
|
table: e,
|
|
2565
2682
|
key: t,
|
|
2566
2683
|
cause: n
|
|
2567
|
-
}),
|
|
2684
|
+
}), bl = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", xl = {
|
|
2568
2685
|
postgres: 5432,
|
|
2569
2686
|
mysql: 3306,
|
|
2570
2687
|
mariadb: 3306,
|
|
2571
2688
|
mssql: 1433
|
|
2572
|
-
},
|
|
2689
|
+
}, Sl = /* @__PURE__ */ new Set([
|
|
2573
2690
|
"localhost",
|
|
2574
2691
|
"127.0.0.1",
|
|
2575
2692
|
"::1",
|
|
2576
2693
|
"[::1]",
|
|
2577
2694
|
"0.0.0.0"
|
|
2578
|
-
]),
|
|
2695
|
+
]), Cl = (e) => {
|
|
2579
2696
|
let t = e.host, n = e.port, r = e.database;
|
|
2580
2697
|
if (e.url !== void 0 && e.url !== "") try {
|
|
2581
2698
|
let i = new URL(e.url);
|
|
@@ -2584,29 +2701,29 @@ ${e.all.map((e) => {
|
|
|
2584
2701
|
return;
|
|
2585
2702
|
}
|
|
2586
2703
|
if (t === void 0 || t === "" || r === void 0 || r === "") return;
|
|
2587
|
-
let i = n ??
|
|
2704
|
+
let i = n ?? xl[(e.dialect ?? "").toLowerCase()];
|
|
2588
2705
|
if (i === void 0 || !Number.isFinite(i)) return;
|
|
2589
2706
|
let a = t.toLowerCase();
|
|
2590
2707
|
return {
|
|
2591
|
-
host:
|
|
2708
|
+
host: Sl.has(a) ? "localhost" : a,
|
|
2592
2709
|
port: i,
|
|
2593
2710
|
database: r.toLowerCase()
|
|
2594
2711
|
};
|
|
2595
|
-
},
|
|
2596
|
-
let t =
|
|
2597
|
-
if (t !== void 0) return
|
|
2598
|
-
},
|
|
2712
|
+
}, wl = (e) => {
|
|
2713
|
+
let t = Cl(e);
|
|
2714
|
+
if (t !== void 0) return qt("sha256").update(`${t.host}\u0000${t.port}\u0000${t.database}`).digest("hex").slice(0, 32);
|
|
2715
|
+
}, Tl = (e, t) => e === void 0 || t === void 0 ? "unknown" : e === t ? "same" : "different", El = {
|
|
2599
2716
|
app: 3,
|
|
2600
2717
|
plugin: 2,
|
|
2601
2718
|
framework: 1
|
|
2602
|
-
},
|
|
2719
|
+
}, Dl = /* @__PURE__ */ new Map(), Ol = [], kl = () => [...Ol], Al = (e) => {
|
|
2603
2720
|
if (!e.table || !e.timeColumn) throw Error("registerRetention: table + timeColumn are required");
|
|
2604
2721
|
if (!Number.isFinite(e.ttlMs) || e.ttlMs <= 0) throw Error(`registerRetention(${e.table}): ttlMs must be a positive number`);
|
|
2605
|
-
let t = e.source ?? "app", n =
|
|
2722
|
+
let t = e.source ?? "app", n = Dl.get(e.table);
|
|
2606
2723
|
if (n !== void 0) {
|
|
2607
2724
|
let r = n.source ?? "app", i = n.ttlMs !== e.ttlMs || n.where !== void 0 != (e.where !== void 0);
|
|
2608
|
-
if (
|
|
2609
|
-
i &&
|
|
2725
|
+
if (El[t] < El[r]) {
|
|
2726
|
+
i && Ol.push({
|
|
2610
2727
|
table: e.table,
|
|
2611
2728
|
kept: {
|
|
2612
2729
|
source: r,
|
|
@@ -2619,7 +2736,7 @@ ${e.all.map((e) => {
|
|
|
2619
2736
|
});
|
|
2620
2737
|
return;
|
|
2621
2738
|
}
|
|
2622
|
-
i && r !== t &&
|
|
2739
|
+
i && r !== t && Ol.push({
|
|
2623
2740
|
table: e.table,
|
|
2624
2741
|
kept: {
|
|
2625
2742
|
source: t,
|
|
@@ -2631,13 +2748,13 @@ ${e.all.map((e) => {
|
|
|
2631
2748
|
}
|
|
2632
2749
|
});
|
|
2633
2750
|
}
|
|
2634
|
-
|
|
2751
|
+
Dl.set(e.table, {
|
|
2635
2752
|
...e,
|
|
2636
2753
|
source: t
|
|
2637
2754
|
});
|
|
2638
|
-
},
|
|
2639
|
-
|
|
2640
|
-
},
|
|
2755
|
+
}, jl = () => [...Dl.values()], Ml = () => {
|
|
2756
|
+
Dl.clear(), Ol.length = 0;
|
|
2757
|
+
}, Nl = async (e, t, n, r = 2e4) => {
|
|
2641
2758
|
let i = new Date(t - e.ttlMs), a = 0;
|
|
2642
2759
|
try {
|
|
2643
2760
|
for (;;) {
|
|
@@ -2645,45 +2762,45 @@ ${e.all.map((e) => {
|
|
|
2645
2762
|
if (a += t, t < r) break;
|
|
2646
2763
|
}
|
|
2647
2764
|
} catch (t) {
|
|
2648
|
-
throw
|
|
2765
|
+
throw k.runSync(A.increment(A.tagged(Fl, "table", e.table))), t;
|
|
2649
2766
|
}
|
|
2650
|
-
return a > 0 &&
|
|
2651
|
-
},
|
|
2767
|
+
return a > 0 && k.runSync(A.incrementBy(A.tagged(Pl, "table", e.table), a)), a;
|
|
2768
|
+
}, Pl = A.counter("voltro_retention_swept_rows_total"), Fl = A.counter("voltro_retention_sweep_errors_total"), Il = (e, t) => {
|
|
2652
2769
|
let n = Number(e ?? String(t));
|
|
2653
2770
|
return (Number.isFinite(n) && n > 0 ? n : t) * 36e5;
|
|
2654
|
-
},
|
|
2655
|
-
id:
|
|
2656
|
-
replicaId:
|
|
2657
|
-
streamName:
|
|
2658
|
-
binlogFile:
|
|
2659
|
-
binlogPosition:
|
|
2660
|
-
updatedAt:
|
|
2661
|
-
}).index(["replicaId"]),
|
|
2662
|
-
id:
|
|
2663
|
-
replicaId:
|
|
2664
|
-
streamName:
|
|
2665
|
-
ctVersion:
|
|
2666
|
-
updatedAt:
|
|
2667
|
-
}).index(["replicaId"]),
|
|
2668
|
-
id:
|
|
2669
|
-
startedAt:
|
|
2670
|
-
finishedAt:
|
|
2671
|
-
direction:
|
|
2672
|
-
mode:
|
|
2673
|
-
via:
|
|
2674
|
-
bundle:
|
|
2675
|
-
sourceFingerprint:
|
|
2676
|
-
tablesWritten:
|
|
2677
|
-
rowsWritten:
|
|
2678
|
-
failure:
|
|
2771
|
+
}, Ll = "_voltro_cdc_offsets", Rl = T(Ll, {
|
|
2772
|
+
id: D({ prefix: "cdcoff" }),
|
|
2773
|
+
replicaId: w(),
|
|
2774
|
+
streamName: w(),
|
|
2775
|
+
binlogFile: w(),
|
|
2776
|
+
binlogPosition: w(),
|
|
2777
|
+
updatedAt: E()
|
|
2778
|
+
}).index(["replicaId"]), zl = T(Ll, {
|
|
2779
|
+
id: D({ prefix: "cdcoff" }),
|
|
2780
|
+
replicaId: w(),
|
|
2781
|
+
streamName: w(),
|
|
2782
|
+
ctVersion: w(),
|
|
2783
|
+
updatedAt: E()
|
|
2784
|
+
}).index(["replicaId"]), Bl = "_voltro_data_transfers", Vl = T(Bl, {
|
|
2785
|
+
id: D({ prefix: "dimp" }),
|
|
2786
|
+
startedAt: E().default("now"),
|
|
2787
|
+
finishedAt: E().nullable(),
|
|
2788
|
+
direction: w().default("import"),
|
|
2789
|
+
mode: w(),
|
|
2790
|
+
via: w(),
|
|
2791
|
+
bundle: w().nullable(),
|
|
2792
|
+
sourceFingerprint: w().nullable(),
|
|
2793
|
+
tablesWritten: y().default(0),
|
|
2794
|
+
rowsWritten: y().default(0),
|
|
2795
|
+
failure: w().nullable(),
|
|
2679
2796
|
staged: p().nullable()
|
|
2680
|
-
}).renamedFrom("_voltro_data_imports").nonReactive(),
|
|
2797
|
+
}).renamedFrom("_voltro_data_imports").nonReactive(), Hl = (e) => {
|
|
2681
2798
|
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)";
|
|
2682
2799
|
return `${t} · ${r} · via ${e.via}${i}` + (e.bundle === null ? "" : ` · from ${e.bundle}`) + (e.sourceFingerprint === null ? "" : ` · source schema ${e.sourceFingerprint}`);
|
|
2683
|
-
},
|
|
2800
|
+
}, Ul = 255, Wl = (e) => e == null ? "null" : typeof e == "string" || typeof e == "number" || typeof e == "boolean" ? JSON.stringify(e) : Array.isArray(e) ? `[${e.map(Wl).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)}:${Wl(t)}`).join(",")}}` : JSON.stringify(String(e)), Gl = (e) => {
|
|
2684
2801
|
if (e == null) return null;
|
|
2685
|
-
let t = typeof e == "string" ? e :
|
|
2802
|
+
let t = typeof e == "string" ? e : Wl(e);
|
|
2686
2803
|
return t.length > 255 ? t.slice(0, 255) : t;
|
|
2687
|
-
},
|
|
2804
|
+
}, Kl = "postgres";
|
|
2688
2805
|
//#endregion
|
|
2689
|
-
export {
|
|
2806
|
+
export { ct as AUTO_FILLED_COLUMNS, an as BOUND_ENCRYPTED_PREFIX, cl as BULK_INSERT_LIMITS, Y as BranchNameInvalid, tc as BranchTransitionInvalid, Ll as CDC_OFFSETS_TABLE, _o as CHANGE_CLAIM_TTL_ENV, _l as CHANGE_LISTENER_CEILING, Ze as ColumnBuilder, Bl as DATA_TRANSFERS_TABLE, ot as DEFAULT_ACQUIRE_TIMEOUT_MS, vo as DEFAULT_CHANGE_CLAIM_TTL_HOURS, ys as DEFAULT_EAGER_FALLBACK_WARN_INTERVAL_MS, vt as DEFAULT_SOFT_DROP_RETENTION_DAYS, pr as DEFAULT_SUBJECT_GRAPH_DEPTH, rn as ENCRYPTED_PREFIX, Kl as ENGINE, Br as EagerCardinalityError, xt as FILE_MIGRATION_PATTERN, it as FRAMEWORK_LIVE_TABLES, cn as FieldDecryptionError, Vo as ID_COLUMN_MAX_LENGTH, It as INITIAL_VERSION, Ha as MATCHES_NO_ROWS, wt as MAX_IDENTIFIER_LENGTH, As as MSSQL_TRANSIENT_NUMBERS, Os as MYSQL_TRANSIENT_CODES, go as OccurrenceCounter, ks as POSTGRES_TRANSIENT_STATES, Zc as REPLACE_IN_PROGRESS_TABLE, Ul as SCOPE_KEY_MAX_LENGTH, ae as SELF_REFERENCE_TARGET, js as SQLITE_TRANSIENT_CODES, $c as STAGING_STALE_MINUTES, ft as STAGING_TABLE_PREFIX, Xt as SqlClient, Ms as TURSO_TRANSIENT_MESSAGE, Us as TableStreamError, ei as TenantNamespaceInvalid, $r as TenantNamespaceUnresolved, bc as TenantRegionUnavailable, yc as TenantResidencyUnresolved, Ls as VOLTRO_EXPIRES_MIXIN_ID, zs as VOLTRO_LOCAL_FIRST_MIXIN_ID, Nt as VersionConflict, kt as WARN_IDENTIFIER_LENGTH, Jc as _voltroApiKeysTable, Rl as _voltroCdcOffsetsTable, Vl as _voltroDataTransfersTable, Kc as _voltroIdempotencyTable, qc as _voltroKvTable, Gc as _voltroMigrationPlansTable, Uc as _voltroMigrationsTable, zl as _voltroMssqlCdcOffsetsTable, Qc as _voltroReplaceInProgressTable, Yc as _voltroReplicaObservationsTable, Wc as _voltroSeedsTable, Oa as actorsTable, mc as admitBranch, qe as agedSoftDropSnapshots, ye as allEnumRenames, ur as allRegisteredRelations, te as allRegisteredTables, Ka as and, Rr as applyJsonPatch, se as array, za as arrayContains, Va as arrayHas, Ba as arrayOverlaps, Hr as attachEagerLoads, Co as attributionFields, Do as attributionKey, Pc as auditAllTableIndexes, Nc as auditTableIndexes, Tt as avg, ve as avgOver, Io as beginLocalWrite, de as bigint, Oc as bindResidentStore, p as boolean, Qs as branchNamespaceName, ll as bulkInsertLimitsFor, ee as bytes, xn as causeBranches, lo as changeDelete, po as changeDigest, so as changeInsert, uo as changeSoftDelete, co as changeUpdate, dl as chunkRowsForInsert, Ao as claimPendingAttribution, jn as classifyConstraintViolation, d as clearEnumRenames, zo as clearPendingAttribution, fr as clearRelationsRegistry, wc as clearResidencyConfig, Ml as clearRetentions, De as clearTableRegistry, Jo as clearWriteRecorders, W as coercePredicateForSqlite, ci as coercePredicateValue, li as coercePredicateValues, ba as coerceValueForSqlite, io as collectSubqueries, u as column, Bn as columnSchema, ul as columnsPerRow, Ci as compileEagerJson, zr as compileJsonPatch, L as compilePredicate, ui as compileRawFragment, Si as compileSelect, mo as composeChangeKey, Js as computeEmbedding, wl as connectionIdentity, La as contains, c as count, ce as countDistinct, ie as crdtDoc, he as crdtManagedColumns, jt as crdtManagedColumnsOf, a as crdtText, So as currentWriteAttribution, Qe as databaseHandle, Ce as date, _ as dbEnum, ps as dbMetricTagCacheSizeForTests, gs as dbOperationsInFlight, xe as decimal, l as declareEnumRename, pn as decodeFieldValue, Dr as decodeRowsFromSchema, yn as decryptFieldsOnRead, Vc as defineMigration, St as defineMixin, lt as defineSeed, n as denseRank, br as deriveSubjectGraph, ut as deriveTypeIdPrefix, Wo as derivedRowId, Go as derivedRowIdLength, Me as describeAgedSoftDropSnapshots, Pn as describeDriverError, Fn as describeRowBindings, Hl as describeTransferRun, nn as deserializeArraysOnRead, Fe as drainIdentifierWarnings, Te as dropped, dn as encodeFieldValue, kr as encodeRowForSchema, vn as encryptFieldsForWrite, gn as encryptedColumnsOf, Lo as endLocalWrite, dc as enforceBranchLimits, Ee as ensureTableRegistered, ka as eq, di as escapeLike, ro as evaluatePredicate, Xe as except, $a as exists, Rs as expires, oo as externalChangeEvent, wn as extractDbCause, on as fieldBinding, nt as fireSchemaChangeSeeds, Ge as fireTenantCreateSeeds, zc as formatIndexAuditIssue, xr as formatSubjectGraph, Xc as frameworkTables, rt as generateId, We as generateSnowflake, h as geography, re as geometry, le as getEnumRenames, lr as getRelation, cr as getRelations, Cc as getResidencyConfig, C as getTable, ja as gt, Ma as gte, Qr as hasEagerLoads, qs as hybridSearch, D as id, Fa as inSet, Za as inSubquery, $n as inferForeignKey, ml as insertRow, y as integer, nl as interruptedReplaceRefusal, x as intersect, Oe as interval, sn as isBoundCiphertext, $s as isBranchNamespace, Pr as isCompositeRowKey, Jn as isEmptyRelationsSpec, un as isEncrypted, ln as isFieldDecryptionError, Le as isFileMigration, Mn as isForeignKeyViolation, st as isFrameworkOwnedLiveTable, Vs as isLocalFirst, Hc as isMigrationDefinition, mt as isMysqlFamily, ac as isNeonConnection, Wa as isNotNull, Ua as isNull, bl as isPrimaryKeyConflictError, Nn as isQueryTimeout, mn as isRawEncoding, Ec as isRegionServable, Yn as isRelationsSpec, Ue as isSeedDefinition, ht as isSoftDropSnapshotName, Ye as isSqliteFamily, Ie as isStagingTableName, fe as isTableReactive, Fs as isTransientContention, Pe as isView, S as json, Ya as jsonField, _t as jsonIndex, Fr as jsonPatchAssignments, oe as lag, ue as lead, kl as listRetentionConflicts, jl as listRetentions, Bs as localFirst, Hs as localFirstTables, Na as lt, Pa as lte, Ss as makeEagerFallbackReporter, vc as makeNamespaceBranchExecutor, Zn as many, Qn as manyToMany, ke as materializeFields, f as max, Ve as migration, v as min, pl as missingConflictColumns, fl as missingRequiredColumns, Re as mixin, Aa as neq, nc as nextBranchState, Cl as normaliseTarget, Lr as normalizeJsonPatchValue, Ja as not, eo as notExists, Ia as notInSet, Qa as notInSubquery, pe as numeric, vs as observeDbOp, yo as occurrenceWindowMs, Xn as one, Vr as oneCardinalityMessage, qa as or, b as orderClausesOf, me as paginateBy, At as paginateById, ho as parseChangeKey, Bo as pendingAttributionCount, lc as planBranch, rc as planBranchProvision, ic as planBranchTeardown, uc as planBranchTeardownFor, sc as planNeonBranchProvision, cc as planNeonBranchTeardown, Mt as planVersionedUpdate, $e as pluginRef, r as pluginRefSpecOf, yl as primaryKeyConflictError, fc as provisionBranch, kc as provisionResidentTenant, ai as qualifyTable, i as queryFor, Dt as queryForView, Ne as quoteIdent, vl as raiseChangeListenerCeiling, Se as rank, t as raw, ze as readableByColumns, yt as real, _s as recordDbOp, $o as recordsTable, at as reference, Rn as refuseWrite, wa as registerCoreTables, sr as registerDiscoveredRelations, ko as registerPendingAttribution, or as registerRelations, Al as registerRetention, e as registerTable, Ko as registerWriteRecorder, qn as relations, Ea as requireActors, Be as requireTable, Da as requireTenants, fs as resetDbMetricTagCacheForTests, je as resetSnowflake, Dc as residentPlacement, Qt as resolveActorSnapshot, oc as resolveBranchMechanism, xs as resolveEagerFallbackWarnIntervalMs, Ro as resolveEchoAttribution, g as resolveFullTextIndex, Ke as resolveIdScheme, He as resolveMixinGraph, Tc as resolveTenantHome, ii as resolveTenantNamespace, Il as retentionTtlMsFromEnv, Mr as rowKeyColumns, Nr as rowKeyIdentity, be as rowNumber, Vn as rowSchema, Es as runRetryingTransaction, Ds as runStoreTransaction, xo as runWithWriteAttribution, es as runWriteRecorders, Tl as sameDatabase, ri as sanitizeIdentifierFragment, Gl as scopeKeyOf, pt as selfReference, tn as serializeArraysForWrite, Je as serverOnlyColumns, Sc as setResidencyConfig, Ae as setSchemaChangeSeedHook, Ct as setTenantCreateSeedHook, Cs as settleTransactionExit, Ft as settleVersionedUpdate, et as softDropSnapshotStamp, Ga as spatialPredicate, il as stagingLeftoverReport, rl as stagingLeftovers, tl as stagingNamesOf, el as stagingStaleAfterMs, ol as stampGeneratedId, sl as stampGeneratedIds, Ra as startsWith, zn as storeRefusalOf, Ks as streamTable, we as sum, m as sumOver, Xo as suspendWriteRecorders, Zo as suspendWriteRecordersEffect, Nl as sweepRetention, T as table, pc as teardownBranch, w as text, E as timestamp, Rt as timestampMs, Pt as timestampMsOrNull, ne as union, dt as unionAll, bt as unregisterTable, qo as unregisterWriteRecorder, gl as updateManyRow, hl as upsertRow, jr as upsertUpdatePatch, Ar as upsertUpdateValues, Ot as validateColumnName, _e as validateIndexName, dr as validateRegisteredRelations, rr as validateRelationConfig, s as validateTableName, Et as validateTypeIdPrefix, gt as vector, tt as vectorDistanceToOpclass, Ys as vectorEmbedding, Lt as versionColumnOf, ge as view, o as viewSql, ao as walkLeaves, Tn as wireSafeCause, wo as withCapturedAttribution, Qo as writeRecordersSuspended };
|