@voltro/database 0.40.0 → 0.42.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 +171 -0
- package/dist/{frameworkLiveTables-BS6FuivX.js → frameworkLiveTables-XPFqj8n3.js} +247 -247
- package/dist/index.d.ts +162 -0
- package/dist/index.js +815 -657
- package/dist/sql.d.ts +44 -4
- package/dist/sql.js +854 -796
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { $ as e, A as t, At as n, B as r, Bt as i, C as a, Ct as o, D as s, Dt as c, E as l, Et as u, F as d, Ft as f, G as p, Gt as m, H as h, Ht as g, I as _, It as
|
|
2
|
-
import { timestampMs as
|
|
3
|
-
import { Cause as
|
|
4
|
-
import { AsyncLocalStorage as
|
|
5
|
-
import { TransactionConnection as
|
|
6
|
-
import { ansi as
|
|
7
|
-
import { SqlClient as
|
|
8
|
-
import { createHash as
|
|
1
|
+
import { $ as e, A as t, At as n, B as r, Bt as i, C as a, Ct as o, D as s, Dt as c, E as l, Et as u, F as d, Ft as f, G as p, Gt as m, H as h, Ht as g, I as _, It as ee, J as v, Jt as y, K as te, Kt as b, L as ne, Lt as x, M as re, Mt as ie, N as ae, Nt as oe, O as se, Ot as ce, P as le, Pt as ue, Q as de, R as fe, Rt as S, S as pe, St as me, T as he, Tt as ge, U as _e, Ut as ve, V as ye, Vt as be, W as xe, Wt as Se, X as Ce, Xt as we, Y as Te, Yt as C, Z as Ee, _ as De, _t as Oe, a as ke, at as Ae, b as je, bt as Me, c as Ne, ct as Pe, d as Fe, dt as Ie, et as Le, f as Re, ft as ze, g as Be, gt as Ve, h as He, ht as Ue, i as We, it as Ge, j as w, jt as Ke, k as qe, kt as Je, l as Ye, lt as Xe, m as Ze, mt as Qe, n as $e, nt as et, o as tt, ot as nt, p as T, pt as rt, q as it, qt as at, rt as ot, s as st, st as ct, t as lt, tt as E, u as ut, ut as dt, v as ft, vt as pt, w as mt, wt as ht, x as gt, xt as _t, y as vt, yt, z as bt, zt as xt } from "./frameworkLiveTables-XPFqj8n3.js";
|
|
2
|
+
import { timestampMs as St, timestampMsOrNull as Ct } from "./wire.js";
|
|
3
|
+
import { Cause as wt, Chunk as Tt, Data as Et, Effect as D, Exit as Dt, Metric as O, MetricBoundaries as Ot, Option as k, Runtime as kt, Schedule as At, Schema as A, Stream as jt } from "effect";
|
|
4
|
+
import { AsyncLocalStorage as Mt } from "node:async_hooks";
|
|
5
|
+
import { TransactionConnection as Nt } from "@effect/sql/SqlClient";
|
|
6
|
+
import { ansi as j } from "@voltro/logger";
|
|
7
|
+
import { SqlClient as Pt } from "@effect/sql";
|
|
8
|
+
import { createHash as Ft } from "node:crypto";
|
|
9
9
|
//#region src/actorSnapshot.ts
|
|
10
|
-
var
|
|
10
|
+
var It = (e) => typeof e == "string" && e !== "" ? e : null, Lt = 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 Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = 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: It(r.kind) ?? n,
|
|
27
|
+
displayName: It(r.displayName),
|
|
28
|
+
email: It(r.email)
|
|
29
29
|
};
|
|
30
30
|
} catch {
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
|
-
},
|
|
33
|
+
}, Rt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", zt = (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
|
+
}, Bt = (e, t, n) => {
|
|
38
|
+
if (!Rt(n) || !t) return e;
|
|
39
|
+
let r = zt(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 Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = 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
|
+
}, Vt = (e, t, n) => {
|
|
48
|
+
if (!Rt(n) || !t) return e;
|
|
49
|
+
let r = zt(t);
|
|
50
50
|
return r.length === 0 ? e : e.map((e) => {
|
|
51
51
|
let t;
|
|
52
52
|
for (let n of r) {
|
|
@@ -58,7 +58,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
58
58
|
}
|
|
59
59
|
return t ?? e;
|
|
60
60
|
});
|
|
61
|
-
},
|
|
61
|
+
}, Ht = "enc:v1:", Ut = class extends Error {
|
|
62
62
|
_tag = "FieldDecryptionError";
|
|
63
63
|
table;
|
|
64
64
|
column;
|
|
@@ -66,112 +66,270 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
66
66
|
constructor(e) {
|
|
67
67
|
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;
|
|
68
68
|
}
|
|
69
|
-
},
|
|
69
|
+
}, Wt = (e) => typeof e == "object" && !!e && e._tag === "FieldDecryptionError", Gt = (e) => typeof e == "string" && e.startsWith("enc:v1:"), Kt = (e, t) => e.encrypt(JSON.stringify(t)), qt = /* @__PURE__ */ new Set([
|
|
70
|
+
"text",
|
|
71
|
+
"id",
|
|
72
|
+
"reference",
|
|
73
|
+
"enum",
|
|
74
|
+
"uuid",
|
|
75
|
+
"email",
|
|
76
|
+
"url"
|
|
77
|
+
]), Jt = (e, t, n) => {
|
|
78
|
+
let r = e.decrypt(t), i;
|
|
79
|
+
try {
|
|
80
|
+
i = JSON.parse(r);
|
|
81
|
+
} catch {
|
|
82
|
+
return r;
|
|
83
|
+
}
|
|
84
|
+
return typeof i == "string" ? i : n === void 0 || qt.has(n) ? r : i;
|
|
85
|
+
}, Yt = (e, t, n) => {
|
|
86
|
+
let r = e.decrypt(t);
|
|
87
|
+
try {
|
|
88
|
+
return typeof JSON.parse(r) == "string" ? !1 : n === void 0 || qt.has(n) ? !0 : void 0;
|
|
89
|
+
} catch {
|
|
90
|
+
return !0;
|
|
91
|
+
}
|
|
92
|
+
}, Xt = (e, t) => e.fields[t]?.type, Zt = (e) => {
|
|
70
93
|
let t = [];
|
|
71
94
|
for (let [n, r] of Object.entries(e.fields)) r.encrypted === !0 && t.push(n);
|
|
72
95
|
return t;
|
|
73
|
-
},
|
|
96
|
+
}, Qt = (e, t, n) => {
|
|
74
97
|
if (!t) return e;
|
|
75
|
-
let r =
|
|
98
|
+
let r = Zt(t);
|
|
76
99
|
if (r.length === 0) return e;
|
|
77
100
|
let i = { ...e };
|
|
78
101
|
for (let e of r) {
|
|
79
102
|
let r = i[e];
|
|
80
|
-
if (!(r == null ||
|
|
103
|
+
if (!(r == null || Gt(r))) {
|
|
81
104
|
if (!n) throw Error(`column "${t.tableName ?? "?"}.${e}" is .encrypted() but no field cipher is registered — wire @voltro/plugin-governance's fieldEncryption (key via the Secrets-Resolver)`);
|
|
82
|
-
i[e] = n
|
|
105
|
+
i[e] = Kt(n, r);
|
|
83
106
|
}
|
|
84
107
|
}
|
|
85
108
|
return i;
|
|
86
|
-
},
|
|
109
|
+
}, $t = (e, t, n, r) => {
|
|
87
110
|
if (!t) return e;
|
|
88
|
-
let i =
|
|
111
|
+
let i = Zt(t);
|
|
89
112
|
if (i.length === 0 || !n) return e;
|
|
90
113
|
let a = r?.onError ?? "throw", o = t.tableName ?? "?";
|
|
91
114
|
return e.map((e) => {
|
|
92
|
-
let
|
|
93
|
-
for (let
|
|
94
|
-
let i = e[
|
|
95
|
-
if (
|
|
96
|
-
|
|
115
|
+
let s;
|
|
116
|
+
for (let c of i) {
|
|
117
|
+
let i = e[c];
|
|
118
|
+
if (Gt(i)) {
|
|
119
|
+
s ??= { ...e };
|
|
97
120
|
try {
|
|
98
|
-
|
|
121
|
+
s[c] = Jt(n, i, Xt(t, c));
|
|
99
122
|
} catch (e) {
|
|
100
|
-
let
|
|
123
|
+
let t = String(e?.message ?? e);
|
|
101
124
|
if (a === "null") {
|
|
102
|
-
|
|
125
|
+
s[c] = null, r?.warn?.({
|
|
103
126
|
table: o,
|
|
104
|
-
column:
|
|
105
|
-
reason:
|
|
127
|
+
column: c,
|
|
128
|
+
reason: t
|
|
106
129
|
});
|
|
107
130
|
continue;
|
|
108
131
|
}
|
|
109
|
-
throw new
|
|
132
|
+
throw new Ut({
|
|
110
133
|
table: o,
|
|
111
|
-
column:
|
|
112
|
-
reason:
|
|
134
|
+
column: c,
|
|
135
|
+
reason: t
|
|
113
136
|
});
|
|
114
137
|
}
|
|
115
138
|
}
|
|
116
139
|
}
|
|
117
|
-
return
|
|
140
|
+
return s ?? e;
|
|
118
141
|
});
|
|
119
|
-
},
|
|
142
|
+
}, en = (e) => {
|
|
143
|
+
let t = e;
|
|
144
|
+
for (let e = 0; e < 4 && kt.isFiberFailure(t); e++) t = wt.squash(t[kt.FiberFailureCauseId]);
|
|
145
|
+
return t;
|
|
146
|
+
}, tn = (e) => {
|
|
147
|
+
let t = {}, n = [], r = en(e);
|
|
148
|
+
for (let e = 0; e < 8 && typeof r == "object" && r; e++) {
|
|
149
|
+
let e = r;
|
|
150
|
+
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.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);
|
|
151
|
+
let i = e.sqlMessage ?? e.detail;
|
|
152
|
+
t.dbMessage === void 0 && typeof i == "string" && (t.dbMessage = i);
|
|
153
|
+
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;
|
|
154
|
+
(o || s) && n.push(`${o || "Error"}${s ? `: ${s.slice(0, 200)}` : ""}`), r = e.cause;
|
|
155
|
+
}
|
|
156
|
+
return n.length > 0 && (t.dbCauseChain = n.join(" ← "), t.dbMessage === void 0 && (t.dbMessage = n[n.length - 1])), t;
|
|
157
|
+
}, nn = /^[A-Za-z_][A-Za-z0-9_$]*$/, M = (e) => e !== void 0 && e.length <= 128 && nn.test(e) ? e : void 0, rn = (e) => e === void 0 ? void 0 : e.split(".").pop() ?? e, N = (e, ...t) => {
|
|
158
|
+
for (let n of t) {
|
|
159
|
+
let t = n.exec(e);
|
|
160
|
+
if (t?.[1] !== void 0) return t[1];
|
|
161
|
+
}
|
|
162
|
+
}, an = (e, t) => {
|
|
163
|
+
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}`;
|
|
164
|
+
if (n === "23503") {
|
|
165
|
+
let t = M(e.dbConstraint);
|
|
166
|
+
return {
|
|
167
|
+
kind: /is still referenced from table/i.test(o) ? "foreignKeyInUse" : "foreignKey",
|
|
168
|
+
...t === void 0 ? {} : { constraint: t }
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
if (n === "23505") {
|
|
172
|
+
let t = M(e.dbConstraint);
|
|
173
|
+
return {
|
|
174
|
+
kind: "unique",
|
|
175
|
+
...t === void 0 ? {} : { constraint: t }
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
if (n === "23502") {
|
|
179
|
+
let t = M(e.dbColumn);
|
|
180
|
+
return {
|
|
181
|
+
kind: "notNull",
|
|
182
|
+
...t === void 0 ? {} : { column: t }
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
if (n === "23514") {
|
|
186
|
+
let t = M(e.dbConstraint);
|
|
187
|
+
return {
|
|
188
|
+
kind: "check",
|
|
189
|
+
...t === void 0 ? {} : { constraint: t }
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
if (r === 1452 || r === 1451) {
|
|
193
|
+
let e = M(N(o, /CONSTRAINT `([^`]+)`/));
|
|
194
|
+
return {
|
|
195
|
+
kind: r === 1451 ? "foreignKeyInUse" : "foreignKey",
|
|
196
|
+
...e === void 0 ? {} : { constraint: e }
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
if (r === 1062) {
|
|
200
|
+
let e = M(rn(N(o, /for key '([^']+)'/)));
|
|
201
|
+
return {
|
|
202
|
+
kind: "unique",
|
|
203
|
+
...e === void 0 ? {} : { constraint: e }
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
if (r === 1048 || r === 1364) {
|
|
207
|
+
let e = M(N(o, /Column '([^']+)' cannot be null/, /Field '([^']+)' doesn't have a default value/));
|
|
208
|
+
return {
|
|
209
|
+
kind: "notNull",
|
|
210
|
+
...e === void 0 ? {} : { column: e }
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
if (r === 3819 || r === 4025) {
|
|
214
|
+
let e = M(N(o, /Check constraint '([^']+)'/, /CONSTRAINT `([^`]+)` failed/));
|
|
215
|
+
return {
|
|
216
|
+
kind: "check",
|
|
217
|
+
...e === void 0 ? {} : { constraint: e }
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
if (i === 547) {
|
|
221
|
+
let e = N(o, /(?:FOREIGN KEY|REFERENCE) constraint "([^"]+)"/), t = N(o, /CHECK constraint "([^"]+)"/);
|
|
222
|
+
if (t !== void 0 && e === void 0) {
|
|
223
|
+
let e = M(t);
|
|
224
|
+
return {
|
|
225
|
+
kind: "check",
|
|
226
|
+
...e === void 0 ? {} : { constraint: e }
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
let n = /REFERENCE constraint/.test(o), r = M(e);
|
|
230
|
+
return {
|
|
231
|
+
kind: n ? "foreignKeyInUse" : "foreignKey",
|
|
232
|
+
...r === void 0 ? {} : { constraint: r }
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
if (i === 2627 || i === 2601) {
|
|
236
|
+
let e = M(N(o, /(?:UNIQUE KEY|PRIMARY KEY) constraint '([^']+)'/, /index '([^']+)'/));
|
|
237
|
+
return {
|
|
238
|
+
kind: "unique",
|
|
239
|
+
...e === void 0 ? {} : { constraint: e }
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
if (i === 515) {
|
|
243
|
+
let e = M(N(o, /Cannot insert the value NULL into column '([^']+)'/));
|
|
244
|
+
return {
|
|
245
|
+
kind: "notNull",
|
|
246
|
+
...e === void 0 ? {} : { column: e }
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
if (n === "SQLITE_CONSTRAINT_FOREIGNKEY") return { kind: t === "delete" || t === "deleteMany" || t === "hardDelete" ? "foreignKeyInUse" : "foreignKey" };
|
|
250
|
+
if (n === "SQLITE_CONSTRAINT_UNIQUE" || n === "SQLITE_CONSTRAINT_PRIMARYKEY") {
|
|
251
|
+
let e = M(rn(N(o, /UNIQUE constraint failed: ([^,\s]+)/)));
|
|
252
|
+
return {
|
|
253
|
+
kind: "unique",
|
|
254
|
+
...e === void 0 ? {} : { column: e }
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
if (n === "SQLITE_CONSTRAINT_NOTNULL") {
|
|
258
|
+
let e = M(rn(N(o, /NOT NULL constraint failed: ([^,\s]+)/)));
|
|
259
|
+
return {
|
|
260
|
+
kind: "notNull",
|
|
261
|
+
...e === void 0 ? {} : { column: e }
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
if (n === "SQLITE_CONSTRAINT_CHECK") {
|
|
265
|
+
let e = M(N(a, /CHECK constraint failed: (.+)$/));
|
|
266
|
+
return {
|
|
267
|
+
kind: "check",
|
|
268
|
+
...e === void 0 ? {} : { constraint: e }
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
}, on = (e) => {
|
|
272
|
+
let t = an(e)?.kind;
|
|
273
|
+
return t === "foreignKey" || t === "foreignKeyInUse";
|
|
274
|
+
}, sn = (e) => {
|
|
275
|
+
let t = e.dbCode, n = e.dbErrno;
|
|
276
|
+
return t === "57014" || n === 3024 || n === 1969 || t === "ETIMEOUT" || t === "SQLITE_INTERRUPT";
|
|
277
|
+
}, cn = (e) => {
|
|
120
278
|
let t = (() => {
|
|
121
279
|
switch (e.type) {
|
|
122
280
|
case "id":
|
|
123
281
|
case "reference":
|
|
124
282
|
case "text":
|
|
125
|
-
case "enum": return
|
|
283
|
+
case "enum": return A.String;
|
|
126
284
|
case "integer":
|
|
127
285
|
case "real":
|
|
128
|
-
case "decimal": return
|
|
129
|
-
case "boolean": return
|
|
286
|
+
case "decimal": return A.Number;
|
|
287
|
+
case "boolean": return A.Boolean;
|
|
130
288
|
case "timestamp":
|
|
131
|
-
case "date": return
|
|
132
|
-
case "bigint": return
|
|
133
|
-
case "bytes": return
|
|
134
|
-
case "array": return
|
|
135
|
-
case "interval": return
|
|
136
|
-
default: return
|
|
289
|
+
case "date": return St;
|
|
290
|
+
case "bigint": return A.BigInt;
|
|
291
|
+
case "bytes": return A.Uint8ArrayFromBase64;
|
|
292
|
+
case "array": return A.Array(A.Unknown);
|
|
293
|
+
case "interval": return A.String;
|
|
294
|
+
default: return A.Unknown;
|
|
137
295
|
}
|
|
138
296
|
})();
|
|
139
|
-
return e.nullable === !0 ?
|
|
140
|
-
},
|
|
297
|
+
return e.nullable === !0 ? A.NullOr(t) : t;
|
|
298
|
+
}, ln = (e, t) => {
|
|
141
299
|
let n = new Set(t?.omit ?? []), r = {};
|
|
142
|
-
for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] =
|
|
143
|
-
return
|
|
144
|
-
},
|
|
300
|
+
for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] = cn(i));
|
|
301
|
+
return A.Struct(r);
|
|
302
|
+
}, un = (e) => typeof e == "function" ? e : () => e, dn = (e, t) => ({
|
|
145
303
|
kind: "one",
|
|
146
|
-
target:
|
|
304
|
+
target: un(e),
|
|
147
305
|
...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
|
|
148
306
|
...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
|
|
149
|
-
}),
|
|
307
|
+
}), fn = (e, t) => ({
|
|
150
308
|
kind: "many",
|
|
151
|
-
target:
|
|
309
|
+
target: un(e),
|
|
152
310
|
...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
|
|
153
311
|
...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
|
|
154
|
-
}),
|
|
312
|
+
}), pn = (e, t) => ({
|
|
155
313
|
kind: "manyToMany",
|
|
156
|
-
target:
|
|
157
|
-
through:
|
|
314
|
+
target: un(e),
|
|
315
|
+
through: un(t.through),
|
|
158
316
|
sourceKey: t.sourceKey,
|
|
159
317
|
targetKey: t.targetKey
|
|
160
|
-
}),
|
|
161
|
-
one:
|
|
162
|
-
many:
|
|
163
|
-
manyToMany:
|
|
164
|
-
},
|
|
318
|
+
}), mn = {
|
|
319
|
+
one: dn,
|
|
320
|
+
many: fn,
|
|
321
|
+
manyToMany: pn
|
|
322
|
+
}, hn = (e, t) => {
|
|
165
323
|
let n = typeof e == "function" ? e : () => e;
|
|
166
324
|
return {
|
|
167
325
|
source: n,
|
|
168
|
-
relations: t(
|
|
326
|
+
relations: t(mn, n())
|
|
169
327
|
};
|
|
170
|
-
},
|
|
328
|
+
}, gn = (e) => {
|
|
171
329
|
if (typeof e != "object" || !e) return !1;
|
|
172
330
|
let t = e;
|
|
173
331
|
return typeof t.source != "function" || typeof t.relations != "object" || t.relations === null ? !1 : Object.keys(t.relations).length === 0;
|
|
174
|
-
},
|
|
332
|
+
}, _n = (e) => {
|
|
175
333
|
if (typeof e != "object" || !e) return !1;
|
|
176
334
|
let t = e;
|
|
177
335
|
if (typeof t.source != "function" || typeof t.relations != "object" || t.relations === null) return !1;
|
|
@@ -180,32 +338,32 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
180
338
|
let t = e?.kind;
|
|
181
339
|
return t === "one" || t === "many" || t === "manyToMany";
|
|
182
340
|
});
|
|
183
|
-
},
|
|
341
|
+
}, vn = dn, yn = fn, bn = pn, xn = (e, t, n) => {
|
|
184
342
|
let r = [];
|
|
185
343
|
for (let [n, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && r.push(n);
|
|
186
344
|
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>' }.`);
|
|
187
345
|
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.`);
|
|
188
346
|
return r[0];
|
|
189
|
-
},
|
|
190
|
-
let t =
|
|
347
|
+
}, Sn = (e) => Object.keys(e.fields), Cn = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), wn = (e) => {
|
|
348
|
+
let t = Sn(e);
|
|
191
349
|
return t.length === 0 ? "<none>" : t.join(", ");
|
|
192
|
-
},
|
|
350
|
+
}, Tn = (e, t, n) => {
|
|
193
351
|
let r = `relation '${t}' on '${e.tableName}'`, i = n.target();
|
|
194
352
|
if (n.kind === "manyToMany") {
|
|
195
353
|
let t = n.through();
|
|
196
|
-
for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!
|
|
354
|
+
for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!Cn(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}': ${wn(t)}.`);
|
|
197
355
|
return;
|
|
198
356
|
}
|
|
199
357
|
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.`);
|
|
200
|
-
if (n.sourceKey !== void 0 && !
|
|
201
|
-
let t =
|
|
202
|
-
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}': ${
|
|
358
|
+
if (n.sourceKey !== void 0 && !Cn(e, n.sourceKey)) {
|
|
359
|
+
let t = Cn(i, n.sourceKey);
|
|
360
|
+
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}': ${wn(e)}.`));
|
|
203
361
|
}
|
|
204
|
-
if (n.foreignKey !== void 0 && !
|
|
205
|
-
let t =
|
|
206
|
-
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}': ${
|
|
362
|
+
if (n.foreignKey !== void 0 && !Cn(i, n.foreignKey)) {
|
|
363
|
+
let t = Cn(e, n.foreignKey);
|
|
364
|
+
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}': ${wn(i)}.`));
|
|
207
365
|
}
|
|
208
|
-
},
|
|
366
|
+
}, En = Symbol.for("@voltro/database/relationsRegistry"), Dn = globalThis, P = Dn[En] ?? (Dn[En] = /* @__PURE__ */ new Map()), On = (e) => {
|
|
209
367
|
let t = e.source(), n = P.get(t.tableName);
|
|
210
368
|
if (n === void 0) {
|
|
211
369
|
P.set(t.tableName, new Map(Object.entries(e.relations)));
|
|
@@ -218,14 +376,14 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
218
376
|
n.set(r, i);
|
|
219
377
|
}
|
|
220
378
|
}
|
|
221
|
-
},
|
|
379
|
+
}, kn = (e) => {
|
|
222
380
|
let t = 0;
|
|
223
|
-
for (let n of Object.values(e))
|
|
381
|
+
for (let n of Object.values(e)) _n(n) && (On(n), t += 1);
|
|
224
382
|
return t;
|
|
225
|
-
},
|
|
383
|
+
}, An = (e) => {
|
|
226
384
|
let t = P.get(e);
|
|
227
385
|
if (t !== void 0) return Object.fromEntries(t);
|
|
228
|
-
},
|
|
386
|
+
}, jn = (e, t) => P.get(e)?.get(t), Mn = () => {
|
|
229
387
|
let e = [];
|
|
230
388
|
for (let [t, n] of P) for (let [r, i] of n) e.push({
|
|
231
389
|
source: t,
|
|
@@ -233,18 +391,18 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
233
391
|
relation: i
|
|
234
392
|
});
|
|
235
393
|
return e;
|
|
236
|
-
},
|
|
394
|
+
}, Nn = () => {
|
|
237
395
|
for (let [e, t] of P) {
|
|
238
396
|
let n = p(e);
|
|
239
|
-
if (n !== void 0) for (let [e, r] of t)
|
|
397
|
+
if (n !== void 0) for (let [e, r] of t) Tn(n, e, r);
|
|
240
398
|
}
|
|
241
|
-
},
|
|
399
|
+
}, Pn = () => {
|
|
242
400
|
P.clear();
|
|
243
|
-
},
|
|
401
|
+
}, Fn = 4, In = (e) => Object.keys(e.fields), Ln = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), Rn = (e, t) => {
|
|
244
402
|
let n = [];
|
|
245
403
|
for (let [r, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && n.push(r);
|
|
246
404
|
return n;
|
|
247
|
-
},
|
|
405
|
+
}, zn = (e, t) => {
|
|
248
406
|
let n = [];
|
|
249
407
|
for (let r of t) {
|
|
250
408
|
if (r.source !== e) continue;
|
|
@@ -261,7 +419,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
261
419
|
} catch {
|
|
262
420
|
continue;
|
|
263
421
|
}
|
|
264
|
-
if (!
|
|
422
|
+
if (!Ln(e, t.sourceKey)) continue;
|
|
265
423
|
n.push({
|
|
266
424
|
table: e.tableName,
|
|
267
425
|
foreignKey: t.sourceKey,
|
|
@@ -270,24 +428,24 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
270
428
|
continue;
|
|
271
429
|
}
|
|
272
430
|
if (t.sourceKey !== void 0) continue;
|
|
273
|
-
let a =
|
|
274
|
-
o === void 0 || !
|
|
431
|
+
let a = Rn(i, e), o = t.foreignKey ?? (a.length === 1 ? a[0] : void 0);
|
|
432
|
+
o === void 0 || !Ln(i, o) || n.push({
|
|
275
433
|
table: i.tableName,
|
|
276
434
|
foreignKey: o,
|
|
277
435
|
parentKey: "id"
|
|
278
436
|
});
|
|
279
437
|
}
|
|
280
438
|
return n;
|
|
281
|
-
},
|
|
439
|
+
}, Bn = (e, t) => {
|
|
282
440
|
let n = [];
|
|
283
|
-
for (let r of t) if (r.tableName !== e) for (let t of
|
|
441
|
+
for (let r of t) if (r.tableName !== e) for (let t of Rn(r, e)) n.push({
|
|
284
442
|
table: r.tableName,
|
|
285
443
|
foreignKey: t,
|
|
286
444
|
parentKey: "id"
|
|
287
445
|
});
|
|
288
446
|
return n;
|
|
289
|
-
},
|
|
290
|
-
let t = e.tables ?? h(), n = e.relations ??
|
|
447
|
+
}, Vn = (e) => `${e.table}\u0000${e.hops.map((e) => `${e.table}.${e.foreignKey}<-${e.parentKey}`).join("|")}`, Hn = (e) => {
|
|
448
|
+
let t = e.tables ?? h(), n = e.relations ?? Mn(), r = e.maxDepth ?? 4, i = new Set(e.exclude ?? []), a = new Map(t.map((e) => [e.tableName, e])), o = [];
|
|
291
449
|
if (!a.has(e.subjectTable)) return {
|
|
292
450
|
subjectTable: e.subjectTable,
|
|
293
451
|
paths: [],
|
|
@@ -302,11 +460,11 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
302
460
|
hops: [],
|
|
303
461
|
depth: 0,
|
|
304
462
|
via: "relation"
|
|
305
|
-
}, c = [s], l = /* @__PURE__ */ new Set([
|
|
463
|
+
}, c = [s], l = /* @__PURE__ */ new Set([Vn(s)]), u = /* @__PURE__ */ new Set(), d = [s];
|
|
306
464
|
for (let e = 1; e <= r; e++) {
|
|
307
465
|
let r = [];
|
|
308
466
|
for (let a of d) {
|
|
309
|
-
let s =
|
|
467
|
+
let s = zn(a.table, n), d = Bn(a.table, t), f = [...s.map((e) => [e, "relation"]), ...d.map((e) => [e, "reference"])];
|
|
310
468
|
for (let [t, n] of f) {
|
|
311
469
|
if (i.has(t.table)) {
|
|
312
470
|
o.push({
|
|
@@ -324,7 +482,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
324
482
|
hops: [...a.hops, t],
|
|
325
483
|
depth: e,
|
|
326
484
|
via: n
|
|
327
|
-
}, f =
|
|
485
|
+
}, f = Vn(d);
|
|
328
486
|
l.has(f) || (l.add(f), c.push(d), r.push(d));
|
|
329
487
|
}
|
|
330
488
|
}
|
|
@@ -334,7 +492,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
334
492
|
}
|
|
335
493
|
d = r;
|
|
336
494
|
}
|
|
337
|
-
for (let e of d) (
|
|
495
|
+
for (let e of d) (zn(e.table, n).length > 0 || Bn(e.table, t).length > 0) && o.push({
|
|
338
496
|
kind: "depth-truncated",
|
|
339
497
|
table: e.table,
|
|
340
498
|
detail: `stopped at maxDepth ${r}; tables linked FROM '${e.table}' were not explored`
|
|
@@ -343,14 +501,14 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
343
501
|
for (let n of t) f.has(n.tableName) || i.has(n.tableName) || o.push({
|
|
344
502
|
kind: "unreachable",
|
|
345
503
|
table: n.tableName,
|
|
346
|
-
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: ${
|
|
504
|
+
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: ${In(n).join(", ")}`
|
|
347
505
|
});
|
|
348
506
|
return {
|
|
349
507
|
subjectTable: e.subjectTable,
|
|
350
508
|
paths: c,
|
|
351
509
|
limitations: o
|
|
352
510
|
};
|
|
353
|
-
},
|
|
511
|
+
}, Un = (e) => {
|
|
354
512
|
let t = [`subject graph · ${e.subjectTable} · ${e.paths.length} table(s) reachable`];
|
|
355
513
|
for (let n of e.paths) {
|
|
356
514
|
let r = n.hops.length === 0 ? `${e.subjectTable} (the subject row itself)` : [e.subjectTable, ...n.hops.map((e) => `${e.table}.${e.foreignKey}`)].join(" → ");
|
|
@@ -358,7 +516,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
358
516
|
}
|
|
359
517
|
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");
|
|
360
518
|
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");
|
|
361
|
-
},
|
|
519
|
+
}, Wn = (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, Gn = (e) => {
|
|
362
520
|
if (e == null || typeof e != "string") return e;
|
|
363
521
|
let t = e.trim();
|
|
364
522
|
if (t.length === 0) return e;
|
|
@@ -369,7 +527,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
369
527
|
} catch {
|
|
370
528
|
return e;
|
|
371
529
|
}
|
|
372
|
-
},
|
|
530
|
+
}, Kn = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, qn = (e) => {
|
|
373
531
|
if (e == null || e instanceof Date) return e;
|
|
374
532
|
if (typeof e == "string") {
|
|
375
533
|
let t = new Date(e);
|
|
@@ -380,19 +538,19 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
380
538
|
return isNaN(t.getTime()) ? e : t;
|
|
381
539
|
}
|
|
382
540
|
return e;
|
|
383
|
-
},
|
|
541
|
+
}, Jn = (e, t, n) => {
|
|
384
542
|
if (e == null) return e;
|
|
385
543
|
switch (t) {
|
|
386
|
-
case "boolean": return n === "postgres" ? e :
|
|
544
|
+
case "boolean": return n === "postgres" ? e : Wn(e);
|
|
387
545
|
case "json":
|
|
388
|
-
case "array": return n === "postgres" ? e :
|
|
546
|
+
case "array": return n === "postgres" ? e : Gn(e);
|
|
389
547
|
case "timestamp":
|
|
390
|
-
case "date": return n === "sqlite" || n === "turso" ?
|
|
548
|
+
case "date": return n === "sqlite" || n === "turso" ? qn(e) : e;
|
|
391
549
|
case "decimal":
|
|
392
|
-
case "bigint": return
|
|
550
|
+
case "bigint": return Kn(e);
|
|
393
551
|
default: return e;
|
|
394
552
|
}
|
|
395
|
-
},
|
|
553
|
+
}, Yn = (e, t, n) => {
|
|
396
554
|
if (e.length === 0) return e;
|
|
397
555
|
let r = p(t);
|
|
398
556
|
if (r === void 0) return e;
|
|
@@ -403,36 +561,36 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
403
561
|
});
|
|
404
562
|
return e.map((e) => {
|
|
405
563
|
let t = { ...e };
|
|
406
|
-
for (let { key: e, type: r } of a) e in t && (t[e] =
|
|
564
|
+
for (let { key: e, type: r } of a) e in t && (t[e] = Jn(t[e], r, n));
|
|
407
565
|
return t;
|
|
408
566
|
});
|
|
409
|
-
},
|
|
567
|
+
}, Xn = (e, t) => {
|
|
410
568
|
if (e == null) return e;
|
|
411
569
|
switch (t) {
|
|
412
570
|
case "json":
|
|
413
571
|
case "array": return typeof e == "string" ? e : JSON.stringify(e);
|
|
414
572
|
default: return e;
|
|
415
573
|
}
|
|
416
|
-
},
|
|
574
|
+
}, Zn = (e, t, n = ["json", "array"]) => {
|
|
417
575
|
let r = p(t);
|
|
418
576
|
if (r === void 0) return e;
|
|
419
577
|
let i = r.fields, a = null;
|
|
420
578
|
for (let [t, r] of Object.entries(i)) if (n.includes(r.type) && t in e) {
|
|
421
|
-
let n =
|
|
579
|
+
let n = Xn(e[t], r.type);
|
|
422
580
|
n !== e[t] && (a === null && (a = { ...e }), a[t] = n);
|
|
423
581
|
}
|
|
424
582
|
return a ?? e;
|
|
425
|
-
},
|
|
583
|
+
}, Qn = class extends Error {
|
|
426
584
|
_tag = "EagerCardinalityError";
|
|
427
585
|
constructor(e) {
|
|
428
586
|
super(e), this.name = "EagerCardinalityError";
|
|
429
587
|
}
|
|
430
|
-
},
|
|
588
|
+
}, $n = (e) => {
|
|
431
589
|
let { relationName: t, sourceTableName: n, targetTableName: r, foreignKey: i, sourceKey: a } = e, o = r === n;
|
|
432
590
|
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.");
|
|
433
|
-
},
|
|
591
|
+
}, er = async (e, t, n, r) => {
|
|
434
592
|
if (e.length === 0) return e;
|
|
435
|
-
let i =
|
|
593
|
+
let i = An(n.tableName);
|
|
436
594
|
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?`);
|
|
437
595
|
let a = e.map((e) => ({ ...e }));
|
|
438
596
|
for (let [e, o] of Object.entries(t)) {
|
|
@@ -441,36 +599,36 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
441
599
|
let t = Object.keys(i).join(", ") || "<none>";
|
|
442
600
|
throw Error(`unknown relation '${e}' on '${n.tableName}'. Registered relations: ${t}.`);
|
|
443
601
|
}
|
|
444
|
-
|
|
602
|
+
Tn(n, e, t), await tr(a, e, t, o === !0 ? {} : o, n, r);
|
|
445
603
|
}
|
|
446
604
|
return a;
|
|
447
|
-
},
|
|
605
|
+
}, tr = async (e, t, n, r, i, a) => {
|
|
448
606
|
switch (n.kind) {
|
|
449
607
|
case "one":
|
|
450
|
-
await
|
|
608
|
+
await nr(e, t, n, r, i, a);
|
|
451
609
|
return;
|
|
452
610
|
case "many":
|
|
453
|
-
await
|
|
611
|
+
await rr(e, t, n, r, i, a);
|
|
454
612
|
return;
|
|
455
613
|
case "manyToMany":
|
|
456
|
-
await
|
|
614
|
+
await ar(e, t, n, r, i, a);
|
|
457
615
|
return;
|
|
458
616
|
}
|
|
459
|
-
},
|
|
460
|
-
let o = n.target(), s = n.sourceKey ??
|
|
617
|
+
}, nr = async (e, t, n, r, i, a) => {
|
|
618
|
+
let o = n.target(), s = n.sourceKey ?? or(i, o.tableName);
|
|
461
619
|
if (s !== void 0) {
|
|
462
|
-
let n =
|
|
620
|
+
let n = sr(e, s), i = n.length === 0 ? [] : await cr(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
|
|
463
621
|
for (let n of e) {
|
|
464
622
|
let e = n[s];
|
|
465
623
|
n[t] = e == null ? null : c.get(e) ?? null;
|
|
466
624
|
}
|
|
467
|
-
await
|
|
625
|
+
await lr(i, r.with, o, a);
|
|
468
626
|
return;
|
|
469
627
|
}
|
|
470
|
-
let c = n.foreignKey ??
|
|
628
|
+
let c = n.foreignKey ?? xn(o, i.tableName, t), l = n.sourceKey ?? "id", u = sr(e, l), d = u.length === 0 ? [] : await cr(o, c, u, r, a), f = /* @__PURE__ */ new Map();
|
|
471
629
|
for (let e of d) {
|
|
472
630
|
let n = e[c];
|
|
473
|
-
if (f.has(n)) throw new
|
|
631
|
+
if (f.has(n)) throw new Qn($n({
|
|
474
632
|
relationName: t,
|
|
475
633
|
sourceTableName: i.tableName,
|
|
476
634
|
targetTableName: o.tableName,
|
|
@@ -483,9 +641,9 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
483
641
|
let e = n[l];
|
|
484
642
|
n[t] = e == null ? null : f.get(e) ?? null;
|
|
485
643
|
}
|
|
486
|
-
await
|
|
487
|
-
},
|
|
488
|
-
let o = n.target(), s = n.foreignKey ??
|
|
644
|
+
await lr(d, r.with, o, a);
|
|
645
|
+
}, rr = async (e, t, n, r, i, a) => {
|
|
646
|
+
let o = n.target(), s = n.foreignKey ?? xn(o, i.tableName, t), c = n.sourceKey ?? "id", l = sr(e, c), u = ir(r), d = l.length === 0 ? [] : await cr(o, s, l, u, a), f = /* @__PURE__ */ new Map();
|
|
489
647
|
for (let e of d) {
|
|
490
648
|
let t = e[s], n = f.get(t);
|
|
491
649
|
n ? n.push(e) : f.set(t, [e]);
|
|
@@ -501,12 +659,12 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
501
659
|
let e = n[c];
|
|
502
660
|
n[t] = f.get(e) ?? [];
|
|
503
661
|
}
|
|
504
|
-
await
|
|
505
|
-
},
|
|
662
|
+
await lr(d, r.with, o, a);
|
|
663
|
+
}, ir = (e) => {
|
|
506
664
|
let { limit: t, offset: n, ...r } = e;
|
|
507
665
|
return r;
|
|
508
|
-
},
|
|
509
|
-
let o = n.target(), s = n.through(), c =
|
|
666
|
+
}, ar = async (e, t, n, r, i, a) => {
|
|
667
|
+
let o = n.target(), s = n.through(), c = sr(e, "id");
|
|
510
668
|
if (c.length === 0) {
|
|
511
669
|
for (let n of e) n[t] = [];
|
|
512
670
|
return;
|
|
@@ -527,8 +685,8 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
527
685
|
for (let n of e) n[t] = [];
|
|
528
686
|
return;
|
|
529
687
|
}
|
|
530
|
-
let f = await
|
|
531
|
-
await
|
|
688
|
+
let f = await cr(o, "id", sr(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
|
|
689
|
+
await lr(f, r.with, o, a);
|
|
532
690
|
let m = r.junction === void 0 ? void 0 : r.junction === !0 ? Object.keys(s.fields) : r.junction, h = /* @__PURE__ */ new Map();
|
|
533
691
|
for (let e of d) {
|
|
534
692
|
let t = e[n.sourceKey], r = e[n.targetKey], i = p.get(r);
|
|
@@ -540,16 +698,16 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
540
698
|
o ? o.push(a) : h.set(t, [a]);
|
|
541
699
|
}
|
|
542
700
|
for (let n of e) n[t] = h.get(n.id) ?? [];
|
|
543
|
-
},
|
|
701
|
+
}, or = (e, t) => {
|
|
544
702
|
for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
|
|
545
|
-
},
|
|
703
|
+
}, sr = (e, t) => {
|
|
546
704
|
let n = /* @__PURE__ */ new Set();
|
|
547
705
|
for (let r of e) {
|
|
548
706
|
let e = r[t];
|
|
549
707
|
e != null && n.add(e);
|
|
550
708
|
}
|
|
551
709
|
return [...n];
|
|
552
|
-
},
|
|
710
|
+
}, cr = (e, t, n, r, i) => {
|
|
553
711
|
let a = {
|
|
554
712
|
column: t,
|
|
555
713
|
op: "in",
|
|
@@ -563,50 +721,50 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
563
721
|
skip: r.offset,
|
|
564
722
|
projection: void 0
|
|
565
723
|
});
|
|
566
|
-
},
|
|
567
|
-
t !== void 0 && e.length !== 0 && (await
|
|
724
|
+
}, lr = async (e, t, n, r) => {
|
|
725
|
+
t !== void 0 && e.length !== 0 && (await er(e, t, n, r)).forEach((t, n) => {
|
|
568
726
|
let r = e[n];
|
|
569
727
|
for (let [e, n] of Object.entries(t)) e in r || (r[e] = n);
|
|
570
728
|
});
|
|
571
|
-
},
|
|
729
|
+
}, ur = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, dr = class extends Error {
|
|
572
730
|
_tag = "TenantNamespaceUnresolved";
|
|
573
731
|
constructor(e) {
|
|
574
732
|
super(e), this.name = "TenantNamespaceUnresolved";
|
|
575
733
|
}
|
|
576
|
-
},
|
|
734
|
+
}, fr = class extends Error {
|
|
577
735
|
_tag = "TenantNamespaceInvalid";
|
|
578
736
|
constructor(e) {
|
|
579
737
|
super(e), this.name = "TenantNamespaceInvalid";
|
|
580
738
|
}
|
|
581
|
-
},
|
|
582
|
-
if (e == null || e === "") throw new
|
|
583
|
-
let t =
|
|
584
|
-
if (t.replace(/_/g, "") === "") throw new
|
|
585
|
-
let n = `${
|
|
586
|
-
if (n.length >
|
|
739
|
+
}, pr = 63, mr = "tenant_", hr = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), gr = (e) => {
|
|
740
|
+
if (e == null || e === "") throw new dr("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.");
|
|
741
|
+
let t = hr(e);
|
|
742
|
+
if (t.replace(/_/g, "") === "") throw new fr(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
|
|
743
|
+
let n = `${mr}${t}`;
|
|
744
|
+
if (n.length > pr) throw new fr(`namespace '${n}' for tenant '${e}' exceeds the ${pr}-byte identifier limit. Use a shorter tenant id.`);
|
|
587
745
|
return n;
|
|
588
|
-
},
|
|
589
|
-
if (e === void 0 || t == null || !
|
|
746
|
+
}, _r = (e, t) => e === null ? t : `${e}.${t}`, vr = /* @__PURE__ */ new Set(["timestamp", "date"]), yr = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, br = (e, t) => {
|
|
747
|
+
if (e === void 0 || t == null || !vr.has(e) || t instanceof Date) return t;
|
|
590
748
|
if (typeof t == "number" && Number.isFinite(t)) return new Date(t);
|
|
591
|
-
if (typeof t == "string" &&
|
|
749
|
+
if (typeof t == "string" && yr.test(t)) {
|
|
592
750
|
let e = new Date(t);
|
|
593
751
|
return Number.isNaN(e.getTime()) ? t : e;
|
|
594
752
|
}
|
|
595
753
|
return t;
|
|
596
|
-
},
|
|
754
|
+
}, xr = (e, t) => e === void 0 || !vr.has(e) ? t : t.map((t) => br(e, t)), Sr = (e, t) => {
|
|
597
755
|
let { strings: n, values: r } = e, i = t.unsafe(n[0] ?? "");
|
|
598
756
|
for (let e = 0; e < r.length; e++) i = t`${i}${r[e]}${t.unsafe(n[e + 1] ?? "")}`;
|
|
599
757
|
return t`${i}`;
|
|
600
|
-
},
|
|
758
|
+
}, Cr = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), F = (e, t, n = null, r) => {
|
|
601
759
|
if ("not" in e) return t`NOT (${F(e.not, t, n, r)})`;
|
|
602
760
|
if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => F(e, t, n, r)));
|
|
603
761
|
if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => F(e, t, n, r)));
|
|
604
762
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
605
|
-
let r = e, i =
|
|
763
|
+
let r = e, i = Pr(r.subquery, t, n);
|
|
606
764
|
return r.op === "subquery-in" ? t`${t(r.column)} IN (${i})` : t`${t(r.column)} NOT IN (${i})`;
|
|
607
765
|
}
|
|
608
766
|
if (e.op === "exists" || e.op === "not-exists") {
|
|
609
|
-
let r = e, i =
|
|
767
|
+
let r = e, i = Pr(r.subquery, t, n);
|
|
610
768
|
return r.op === "exists" ? t`EXISTS (${i})` : t`NOT EXISTS (${i})`;
|
|
611
769
|
}
|
|
612
770
|
let i = e, a = t(i.column), o = i.path, s = o !== void 0 && o.length > 0, c = () => t.onDialectOrElse({
|
|
@@ -619,7 +777,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
619
777
|
mssql: () => t.unsafe(T(i.column, o, "mssql", { numeric: !0 })),
|
|
620
778
|
sqlite: () => t.unsafe(T(i.column, o, "sqlite", { numeric: !0 })),
|
|
621
779
|
orElse: () => t.unsafe(T(i.column, o, "postgres", { numeric: !0 }))
|
|
622
|
-
}), u = s ? c() : a, d = s ? l() : a, f = (e) => s && e != null ? String(e) : e, m = (e) => s ? Number(e) : e, h = s || r === void 0 ? void 0 : p(r)?.fields?.[i.column]?.type, g = (e) =>
|
|
780
|
+
}), u = s ? c() : a, d = s ? l() : a, f = (e) => s && e != null ? String(e) : e, m = (e) => s ? Number(e) : e, h = s || r === void 0 ? void 0 : p(r)?.fields?.[i.column]?.type, g = (e) => br(h, e);
|
|
623
781
|
switch (i.op) {
|
|
624
782
|
case "eq": return t`${u} = ${f(g(i.value))}`;
|
|
625
783
|
case "neq": return t`${u} <> ${f(g(i.value))}`;
|
|
@@ -636,7 +794,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
636
794
|
return e.length === 0 ? t`TRUE` : t`${u} NOT IN ${t.in(s ? e.map((e) => f(e)) : e)}`;
|
|
637
795
|
}
|
|
638
796
|
case "contains": {
|
|
639
|
-
let e = `%${
|
|
797
|
+
let e = `%${Cr(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
|
|
640
798
|
return t.onDialectOrElse({
|
|
641
799
|
mysql: () => t`LOWER(${u}) LIKE LOWER(${e})`,
|
|
642
800
|
mssql: () => t`LOWER(${u}) LIKE LOWER(${e})`,
|
|
@@ -645,7 +803,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
645
803
|
});
|
|
646
804
|
}
|
|
647
805
|
case "startsWith": {
|
|
648
|
-
let e = `${
|
|
806
|
+
let e = `${Cr(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
|
|
649
807
|
return t.onDialectOrElse({
|
|
650
808
|
mysql: () => t`${u} LIKE ${e}`,
|
|
651
809
|
orElse: () => t`${u} LIKE ${e} ESCAPE '\\'`
|
|
@@ -693,13 +851,13 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
693
851
|
});
|
|
694
852
|
}
|
|
695
853
|
}
|
|
696
|
-
},
|
|
854
|
+
}, wr = (e, t) => {
|
|
697
855
|
let n = [];
|
|
698
856
|
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}`);
|
|
699
|
-
},
|
|
857
|
+
}, Tr = (e, t) => t.csv(e.map((e) => {
|
|
700
858
|
let n = e.column === void 0 ? t.unsafe("*") : t`${t(e.column)}`;
|
|
701
859
|
if (e.op.startsWith("window-")) {
|
|
702
|
-
let r =
|
|
860
|
+
let r = wr(e.window ?? {}, t);
|
|
703
861
|
switch (e.op) {
|
|
704
862
|
case "window-row-number": return t`ROW_NUMBER() OVER (${r}) AS ${t(e.alias)}`;
|
|
705
863
|
case "window-rank": return t`RANK() OVER (${r}) AS ${t(e.alias)}`;
|
|
@@ -723,43 +881,43 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
723
881
|
return t`${t(e.column)} AS ${t(e.alias)}`;
|
|
724
882
|
default: throw Error(`compileAggregateProjection: unknown op '${e.op}'`);
|
|
725
883
|
}
|
|
726
|
-
})),
|
|
884
|
+
})), Er = (e) => `[${e.join(",")}]`, Dr = (e, t) => {
|
|
727
885
|
if (e.queryVector === void 0) return null;
|
|
728
|
-
let n = t(e.column), r =
|
|
886
|
+
let n = t(e.column), r = Er(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
|
|
729
887
|
return t.onDialectOrElse({
|
|
730
888
|
mysql: () => t`${t.unsafe(a)}(${n}, ${r})`,
|
|
731
889
|
mssql: () => t`NULL`,
|
|
732
890
|
sqlite: () => t`NULL`,
|
|
733
891
|
orElse: () => t`${n} ${t.unsafe(i)} ${r}::vector`
|
|
734
892
|
});
|
|
735
|
-
},
|
|
893
|
+
}, Or = (e, t) => {
|
|
736
894
|
let n = t.unsafe(e.useGeography ? "::geography" : "::geometry");
|
|
737
895
|
return t`ST_Distance(${t(e.column)}${n}, ${e.geom}${n})`;
|
|
738
|
-
},
|
|
739
|
-
let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${
|
|
896
|
+
}, kr = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, Ar = (e, t) => t`${t(`${e.indexName}_tsv`)}`, jr = (e, t) => `${t}_${e.indexName}_fts`, Mr = (e, t, n) => {
|
|
897
|
+
let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${Cr(e.query)}%`;
|
|
740
898
|
return n.onDialectOrElse({
|
|
741
899
|
mysql: () => n`MATCH(${r}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
|
|
742
900
|
sqlite: () => {
|
|
743
|
-
let r = n(
|
|
901
|
+
let r = n(jr(e, t));
|
|
744
902
|
return n`${n("id")} IN (SELECT ${n("row_id")} FROM ${r} WHERE ${r} MATCH ${e.query})`;
|
|
745
903
|
},
|
|
746
904
|
mssql: () => n.or(e.columns.map((e) => n`LOWER(${n(e)}) LIKE LOWER(${i}) ESCAPE '\\'`)),
|
|
747
|
-
orElse: () => n`${
|
|
905
|
+
orElse: () => n`${Ar(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
|
|
748
906
|
});
|
|
749
|
-
},
|
|
750
|
-
let r = `%${
|
|
907
|
+
}, Nr = (e, t, n) => {
|
|
908
|
+
let r = `%${Cr(e.query)}%`;
|
|
751
909
|
return n.onDialectOrElse({
|
|
752
910
|
mysql: () => n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
|
|
753
911
|
sqlite: () => {
|
|
754
|
-
let r = n(
|
|
912
|
+
let r = n(jr(e, t));
|
|
755
913
|
return n`COALESCE((SELECT -bm25(${r}) FROM ${r} WHERE ${r} MATCH ${e.query} AND ${r}.${n("row_id")} = ${n("id")}), 0)`;
|
|
756
914
|
},
|
|
757
915
|
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}`),
|
|
758
|
-
orElse: () => n`ts_rank(${
|
|
916
|
+
orElse: () => n`ts_rank(${Ar(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
|
|
759
917
|
});
|
|
760
|
-
},
|
|
918
|
+
}, Pr = (e, t, n = null) => {
|
|
761
919
|
if (e.setOp && e.setOp.queries.length >= 2) {
|
|
762
|
-
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`(${
|
|
920
|
+
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`(${Pr(e, t, n)})`).reduce((e, n, i) => i === 0 ? n : t`${e} ${t.unsafe(r)} ${n}`), a = [];
|
|
763
921
|
if (w(e).length > 0 && a.push(t` ORDER BY ${t.csv(w(e).map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), e.take !== void 0) {
|
|
764
922
|
if (!Number.isInteger(e.take) || e.take < 0) throw Error(`compileSelect: invalid take ${e.take}`);
|
|
765
923
|
a.push(t` LIMIT ${t.unsafe(String(e.take))}`);
|
|
@@ -770,7 +928,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
770
928
|
}
|
|
771
929
|
return t`${i}${a.reduce((e, n) => t`${e}${n}`, t``)}`;
|
|
772
930
|
}
|
|
773
|
-
let r = e.annClause === void 0 ? null :
|
|
931
|
+
let r = e.annClause === void 0 ? null : Dr(e.annClause, t);
|
|
774
932
|
e.spatialClause !== void 0 && t.onDialectOrElse({
|
|
775
933
|
mysql: () => {
|
|
776
934
|
throw Error("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
|
|
@@ -783,57 +941,57 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
783
941
|
},
|
|
784
942
|
orElse: () => t``
|
|
785
943
|
});
|
|
786
|
-
let i = e.spatialClause?.projectAs === void 0 ? null :
|
|
944
|
+
let i = e.spatialClause?.projectAs === void 0 ? null : Or(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? Tr(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 ? Nr(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({
|
|
787
945
|
orElse: () => t`DISTINCT ON (${t.csv(e.distinctOn.map((e) => t`${t(e)}`))}) `,
|
|
788
946
|
mysql: () => t`DISTINCT `,
|
|
789
947
|
mssql: () => t`DISTINCT `,
|
|
790
948
|
sqlite: () => t`DISTINCT `
|
|
791
|
-
}) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(
|
|
949
|
+
}) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(_r(n, e.table))}` : t`${t(_r(n, e.table))} AS ${t(e.alias)}`, m = (e.joins ?? []).map((e) => {
|
|
792
950
|
let r = e.kind === "inner" ? "INNER" : "LEFT";
|
|
793
|
-
return t` ${t.unsafe(r)} JOIN ${t(
|
|
794
|
-
}), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null :
|
|
795
|
-
r !== null &&
|
|
796
|
-
for (let n of w(e))
|
|
797
|
-
let
|
|
951
|
+
return t` ${t.unsafe(r)} JOIN ${t(_r(n, e.table))} AS ${t(e.alias)} ON ${F(e.on, t, n)}`;
|
|
952
|
+
}), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null : Mr(c, e.table, t), _ = [e.predicate ? F(e.predicate, t, n, e.table) : null, g].filter((e) => e !== null), ee = _.length > 0 ? t` WHERE ${t.and(_)}` : t``, v = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, y = e.having ? t` HAVING ${F(e.having, t, n, e.table)}` : t``, te = e.skip !== void 0, b = [];
|
|
953
|
+
r !== null && b.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && b.push(e.spatialClause.order === "desc" ? t`${kr(e.spatialClause, t)} DESC` : t`${kr(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && b.push(t`${l} DESC`);
|
|
954
|
+
for (let n of w(e)) b.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
|
|
955
|
+
let ne = b.length > 0 ? t` ORDER BY ${t.csv(b)}` : te ? t.onDialectOrElse({
|
|
798
956
|
mssql: () => t` ORDER BY (SELECT NULL)`,
|
|
799
957
|
orElse: () => t``
|
|
800
|
-
}) : t``,
|
|
958
|
+
}) : t``, x = (e) => {
|
|
801
959
|
if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`compileSelect: expected non-negative integer take/skip, got ${e}`);
|
|
802
960
|
return t.unsafe(String(e));
|
|
803
|
-
},
|
|
961
|
+
}, re = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${Pr(e.descriptor, t, n)})`), ie = (e.ctes ?? []).some((e) => e.recursive === !0), ae = re.length > 0 ? t`WITH ${t.unsafe(ie ? "RECURSIVE " : "")}${t.csv(re)} ` : t``;
|
|
804
962
|
return t.onDialectOrElse({
|
|
805
963
|
mssql: () => {
|
|
806
|
-
let n = e.take !== void 0 && !
|
|
807
|
-
return t`${
|
|
964
|
+
let n = e.take !== void 0 && !te ? t`TOP ${x(e.take)} ` : t``, r = te ? t` OFFSET ${x(e.skip)} ROWS FETCH NEXT ${x(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
|
|
965
|
+
return t`${ae}SELECT ${n}${f}${d} FROM ${h}${ee}${v}${y}${ne}${r}`;
|
|
808
966
|
},
|
|
809
967
|
orElse: () => {
|
|
810
|
-
let n = e.take === void 0 ? t`` : t` LIMIT ${
|
|
811
|
-
return t`${
|
|
968
|
+
let n = e.take === void 0 ? t`` : t` LIMIT ${x(e.take)}`, r = te ? t` OFFSET ${x(e.skip)}` : t``;
|
|
969
|
+
return t`${ae}SELECT ${f}${d} FROM ${h}${ee}${v}${y}${ne}${n}${r}`;
|
|
812
970
|
}
|
|
813
971
|
});
|
|
814
|
-
},
|
|
972
|
+
}, Fr = (e, t, n) => {
|
|
815
973
|
if (e.eager === void 0) return null;
|
|
816
|
-
let r =
|
|
974
|
+
let r = Rr(e.table, e.eager, e.sourceTable);
|
|
817
975
|
if (r === null) return null;
|
|
818
|
-
let i =
|
|
976
|
+
let i = Gr(n, e, r, Wr(t, n));
|
|
819
977
|
return i === null ? null : {
|
|
820
978
|
fragment: i,
|
|
821
|
-
decode:
|
|
979
|
+
decode: Jr(r, n)
|
|
822
980
|
};
|
|
823
|
-
},
|
|
981
|
+
}, Ir = (e) => e.relation.kind === "one" && e.fkSide === "target", Lr = (e) => ({
|
|
824
982
|
...e,
|
|
825
983
|
branch: {
|
|
826
984
|
...e.branch,
|
|
827
985
|
limit: 2
|
|
828
986
|
}
|
|
829
|
-
}),
|
|
830
|
-
let r = n ??
|
|
987
|
+
}), Rr = (e, t, n) => {
|
|
988
|
+
let r = n ?? v(e), i = An(e);
|
|
831
989
|
if (i === void 0) return null;
|
|
832
990
|
let a = [];
|
|
833
991
|
for (let [e, n] of Object.entries(t)) {
|
|
834
992
|
let t = i[e];
|
|
835
993
|
if (t === void 0) return null;
|
|
836
|
-
let o =
|
|
994
|
+
let o = zr(e, t, r, n === !0 ? {} : n);
|
|
837
995
|
if (o === null) return null;
|
|
838
996
|
a.push(o);
|
|
839
997
|
}
|
|
@@ -841,30 +999,30 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
841
999
|
table: r,
|
|
842
1000
|
children: a
|
|
843
1001
|
};
|
|
844
|
-
},
|
|
1002
|
+
}, zr = (e, t, n, r) => {
|
|
845
1003
|
let i = t.target(), a = (t.kind === "manyToMany" ? void 0 : t.sourceKey) ?? "id", o, s;
|
|
846
1004
|
if (t.kind === "manyToMany") o = t.targetKey, s = "target";
|
|
847
1005
|
else if (t.kind === "one") {
|
|
848
|
-
let r = t.sourceKey ??
|
|
1006
|
+
let r = t.sourceKey ?? Ur(n, i.tableName);
|
|
849
1007
|
if (r !== void 0) o = r, s = "source";
|
|
850
1008
|
else try {
|
|
851
|
-
o = t.foreignKey ??
|
|
1009
|
+
o = t.foreignKey ?? xn(i, n.tableName, e), s = "target";
|
|
852
1010
|
} catch {
|
|
853
1011
|
return null;
|
|
854
1012
|
}
|
|
855
1013
|
} else try {
|
|
856
|
-
o = t.foreignKey ??
|
|
1014
|
+
o = t.foreignKey ?? xn(i, n.tableName, e), s = "target";
|
|
857
1015
|
} catch {
|
|
858
1016
|
return null;
|
|
859
1017
|
}
|
|
860
1018
|
let c = r.with === void 0 ? [] : (() => {
|
|
861
|
-
let e =
|
|
1019
|
+
let e = An(i.tableName);
|
|
862
1020
|
if (e === void 0 && Object.keys(r.with).length > 0) return null;
|
|
863
1021
|
let t = [];
|
|
864
1022
|
for (let [n, a] of Object.entries(r.with)) {
|
|
865
1023
|
let r = e?.[n];
|
|
866
1024
|
if (r === void 0) return null;
|
|
867
|
-
let o =
|
|
1025
|
+
let o = zr(n, r, i, a === !0 ? {} : a);
|
|
868
1026
|
if (o === null) return null;
|
|
869
1027
|
t.push(o);
|
|
870
1028
|
}
|
|
@@ -880,9 +1038,9 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
880
1038
|
fkSide: s,
|
|
881
1039
|
branch: r,
|
|
882
1040
|
children: c,
|
|
883
|
-
junction:
|
|
1041
|
+
junction: Br(t, r)
|
|
884
1042
|
};
|
|
885
|
-
},
|
|
1043
|
+
}, Br = (e, t) => {
|
|
886
1044
|
if (e.kind !== "manyToMany" || t.junction === void 0) return;
|
|
887
1045
|
let n = e.through(), r = t.junction === !0 ? Object.keys(n.fields) : t.junction, i = r.filter((e) => e in n.fields);
|
|
888
1046
|
return {
|
|
@@ -894,35 +1052,35 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
894
1052
|
return t !== void 0 && (t.type === "timestamp" || t.type === "date");
|
|
895
1053
|
})
|
|
896
1054
|
};
|
|
897
|
-
},
|
|
1055
|
+
}, Vr = (e) => `__j_${e}`, Hr = "__j", Ur = (e, t) => {
|
|
898
1056
|
for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
|
|
899
|
-
},
|
|
1057
|
+
}, Wr = (e, t) => {
|
|
900
1058
|
let n = 0;
|
|
901
1059
|
return {
|
|
902
1060
|
sql: e,
|
|
903
1061
|
dialect: t,
|
|
904
1062
|
nextAlias: () => `__a${n++}`
|
|
905
1063
|
};
|
|
906
|
-
},
|
|
1064
|
+
}, Gr = (e, t, n, r) => {
|
|
907
1065
|
switch (e) {
|
|
908
|
-
case "postgres": return
|
|
1066
|
+
case "postgres": return Zr(t, n, r);
|
|
909
1067
|
case "sqlite":
|
|
910
|
-
case "turso": return
|
|
1068
|
+
case "turso": return ai(t, n, r);
|
|
911
1069
|
case "mysql":
|
|
912
|
-
case "mariadb": return
|
|
913
|
-
case "mssql": return
|
|
1070
|
+
case "mariadb": return hi(t, n, r);
|
|
1071
|
+
case "mssql": return Si(t, n, r);
|
|
914
1072
|
}
|
|
915
|
-
},
|
|
916
|
-
let n =
|
|
1073
|
+
}, Kr = (e, t) => t === "mssql" && !qr.test(e) ? /* @__PURE__ */ new Date(`${e}Z`) : new Date(e), qr = /(?:Z|[+-]\d{2}:?\d{2})$/, Jr = (e, t) => {
|
|
1074
|
+
let n = Yr(e.table, e.children, t);
|
|
917
1075
|
return (e) => e.map((e) => {
|
|
918
1076
|
let t = e.__row, r = typeof t == "string" ? JSON.parse(t) : t;
|
|
919
1077
|
return n(r);
|
|
920
1078
|
});
|
|
921
|
-
},
|
|
1079
|
+
}, Yr = (e, t, n) => {
|
|
922
1080
|
let r = [];
|
|
923
1081
|
for (let [t, n] of Object.entries(e.fields)) (n.type === "timestamp" || n.type === "date") && r.push(t);
|
|
924
1082
|
let i = t.map((e) => {
|
|
925
|
-
let t =
|
|
1083
|
+
let t = Yr(e.target, e.children, n), r = e.relation.kind === "one", i = Ir(e), a = i ? $n({
|
|
926
1084
|
relationName: e.relationName,
|
|
927
1085
|
sourceTableName: e.source.tableName,
|
|
928
1086
|
targetTableName: e.target.tableName,
|
|
@@ -935,14 +1093,14 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
935
1093
|
isSingle: r,
|
|
936
1094
|
fromOverFetch: i,
|
|
937
1095
|
cardinalityMessage: a,
|
|
938
|
-
junction:
|
|
1096
|
+
junction: Xr(e.junction, n)
|
|
939
1097
|
};
|
|
940
1098
|
});
|
|
941
1099
|
return (e) => {
|
|
942
1100
|
let t = { ...e };
|
|
943
1101
|
for (let e of r) {
|
|
944
1102
|
let r = t[e];
|
|
945
|
-
typeof r == "string" && (t[e] =
|
|
1103
|
+
typeof r == "string" && (t[e] = Kr(r, n));
|
|
946
1104
|
}
|
|
947
1105
|
for (let e of i) {
|
|
948
1106
|
let n = t[e.name];
|
|
@@ -952,7 +1110,7 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
952
1110
|
}
|
|
953
1111
|
if (e.fromOverFetch) {
|
|
954
1112
|
let r = n;
|
|
955
|
-
if (r.length > 1) throw new
|
|
1113
|
+
if (r.length > 1) throw new Qn(e.cardinalityMessage);
|
|
956
1114
|
t[e.name] = r.length === 0 ? null : e.decode(r[0]);
|
|
957
1115
|
continue;
|
|
958
1116
|
}
|
|
@@ -964,104 +1122,104 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
964
1122
|
}
|
|
965
1123
|
return t;
|
|
966
1124
|
};
|
|
967
|
-
},
|
|
1125
|
+
}, Xr = (e, t) => {
|
|
968
1126
|
if (e === void 0) return;
|
|
969
1127
|
let n = new Set(e.dateColumns), r = e.requested;
|
|
970
1128
|
return (e) => {
|
|
971
1129
|
let i = e._junction ?? {}, a = {};
|
|
972
1130
|
for (let e of r) {
|
|
973
1131
|
let r = i[e];
|
|
974
|
-
a[e] = n.has(e) && typeof r == "string" ?
|
|
1132
|
+
a[e] = n.has(e) && typeof r == "string" ? Kr(r, t) : r;
|
|
975
1133
|
}
|
|
976
1134
|
return {
|
|
977
1135
|
...e,
|
|
978
1136
|
_junction: a
|
|
979
1137
|
};
|
|
980
1138
|
};
|
|
981
|
-
},
|
|
982
|
-
let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s =
|
|
1139
|
+
}, Zr = (e, t, n) => {
|
|
1140
|
+
let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = Qr(i, t.children, n);
|
|
983
1141
|
return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${V(e.predicate, i, r)}` : r``}${w(e).length > 0 ? r` ORDER BY ${r.csv(w(e).map((e) => e.direction === "desc" ? r`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``}${e.take === void 0 ? r`` : r` LIMIT ${B(e.take, r)}`}${e.skip === void 0 ? r`` : r` OFFSET ${B(e.skip, r)}`}`;
|
|
984
|
-
},
|
|
985
|
-
let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${z(
|
|
1142
|
+
}, Qr = (e, t, n, r) => {
|
|
1143
|
+
let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${z(Hr, i)}::text)`;
|
|
986
1144
|
if (t.length === 0 && r === void 0) return a;
|
|
987
1145
|
let o = [];
|
|
988
|
-
r !== void 0 && o.push(i`${z("_junction", i)}, ${R(e,
|
|
1146
|
+
r !== void 0 && o.push(i`${z("_junction", i)}, ${R(e, Hr, i)}`);
|
|
989
1147
|
for (let r of t) {
|
|
990
|
-
let t =
|
|
1148
|
+
let t = $r(r, e, n);
|
|
991
1149
|
if (t === null) return null;
|
|
992
1150
|
o.push(i`${z(r.relationName, i)}, ${t}`);
|
|
993
1151
|
}
|
|
994
1152
|
return i`${a} || jsonb_build_object(${i.csv(o)})`;
|
|
995
|
-
},
|
|
1153
|
+
}, $r = (e, t, n) => {
|
|
996
1154
|
switch (e.relation.kind) {
|
|
997
|
-
case "one": return
|
|
998
|
-
case "many": return
|
|
999
|
-
case "manyToMany": return
|
|
1155
|
+
case "one": return Ir(e) ? ti(Lr(e), t, n) : ei(e, t, n);
|
|
1156
|
+
case "many": return ti(e, t, n);
|
|
1157
|
+
case "manyToMany": return ni(e, t, n);
|
|
1000
1158
|
}
|
|
1001
|
-
},
|
|
1002
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1159
|
+
}, ei = (e, t, n) => {
|
|
1160
|
+
let r = n.sql, i = n.nextAlias(), a = Qr(i, e.children, n);
|
|
1003
1161
|
if (a === null) return null;
|
|
1004
1162
|
let o = e.fkSide === "source" ? r`${R(i, "id", r)} = ${R(t, e.foreignKey, r)}` : r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${V(e.branch.where, i, r)}`, c = I(i, e.branch.orderBy, r);
|
|
1005
1163
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}${c} LIMIT 1)`;
|
|
1006
|
-
},
|
|
1007
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1164
|
+
}, ti = (e, t, n) => {
|
|
1165
|
+
let r = n.sql, i = n.nextAlias(), a = Qr(i, e.children, n);
|
|
1008
1166
|
if (a === null) return null;
|
|
1009
|
-
let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${F(e.branch.where, r)}`, c =
|
|
1167
|
+
let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${F(e.branch.where, r)}`, c = ii(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`;
|
|
1010
1168
|
return r`COALESCE((SELECT jsonb_agg(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), '[]'::jsonb)`;
|
|
1011
|
-
},
|
|
1012
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
1169
|
+
}, ni = (e, t, n) => {
|
|
1170
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Qr(o, e.children, n, e.junction);
|
|
1013
1171
|
if (c === null) return null;
|
|
1014
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${F(e.branch.where, r)}`, u =
|
|
1172
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${F(e.branch.where, r)}`, u = Ai(e, s, r), d = I(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : r`, ${ri(e.junction, s, r)} AS ${r(Hr)}`;
|
|
1015
1173
|
return r`COALESCE((SELECT jsonb_agg(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${R(o, "id", r)} = ${R(s, i.targetKey, r)} WHERE ${R(s, i.sourceKey, r)} = ${R(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), '[]'::jsonb)`;
|
|
1016
|
-
},
|
|
1017
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1174
|
+
}, ri = (e, t, n) => e.present.length === 0 ? n`jsonb_build_object()` : n`jsonb_build_object(${n.csv(e.present.map((e) => n`${z(e, n)}, ${R(t, e, n)}`))})`, I = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${R(e, t.column, n)} DESC` : n`${R(e, t.column, n)} ASC`))}`, ii = (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`))}`, ai = (e, t, n) => {
|
|
1175
|
+
let r = n.sql, i = n.nextAlias(), a = oi(i, t.table, t.children, n);
|
|
1018
1176
|
if (a === null) return null;
|
|
1019
1177
|
let o = e.predicate ? r` WHERE ${V(e.predicate, i, r)}` : r``, s = w(e).length > 0 ? r` ORDER BY ${r.csv(w(e).map((e) => e.direction === "desc" ? r`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${B(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${B(e.skip, r)}`;
|
|
1020
1178
|
return r`SELECT ${a} AS "__row" FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
|
|
1021
|
-
},
|
|
1179
|
+
}, oi = (e, t, n, r, i) => {
|
|
1022
1180
|
let a = r.sql, o = [];
|
|
1023
1181
|
for (let n of Object.keys(t.fields)) o.push(a`${z(n, a)}, ${R(e, n, a)}`);
|
|
1024
1182
|
if (i !== void 0) {
|
|
1025
|
-
let e =
|
|
1183
|
+
let e = si(i.projection, i.source, a);
|
|
1026
1184
|
o.push(a`${z("_junction", a)}, json_object(${e})`);
|
|
1027
1185
|
}
|
|
1028
1186
|
for (let t of n) {
|
|
1029
|
-
let n =
|
|
1187
|
+
let n = di(t, e, r);
|
|
1030
1188
|
if (n === null) return null;
|
|
1031
1189
|
o.push(a`${z(t.relationName, a)}, ${n}`);
|
|
1032
1190
|
}
|
|
1033
1191
|
return a`json_object(${a.csv(o)})`;
|
|
1034
|
-
},
|
|
1192
|
+
}, si = (e, t, n) => e.present.length === 0 ? n`` : n.csv(e.present.map((e) => n`${z(e, n)}, ${R(t.alias, t.physical(e), n)}`)), ci = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${R(t, e, n)} AS ${n(Vr(e))}`))}`, li = (e) => ({
|
|
1035
1193
|
alias: e,
|
|
1036
|
-
physical:
|
|
1037
|
-
}),
|
|
1194
|
+
physical: Vr
|
|
1195
|
+
}), ui = (e) => ({
|
|
1038
1196
|
alias: e,
|
|
1039
1197
|
physical: (e) => e
|
|
1040
|
-
}),
|
|
1198
|
+
}), di = (e, t, n) => {
|
|
1041
1199
|
switch (e.relation.kind) {
|
|
1042
|
-
case "one": return
|
|
1043
|
-
case "many": return
|
|
1044
|
-
case "manyToMany": return
|
|
1200
|
+
case "one": return Ir(e) ? pi(Lr(e), t, n) : fi(e, t, n);
|
|
1201
|
+
case "many": return pi(e, t, n);
|
|
1202
|
+
case "manyToMany": return mi(e, t, n);
|
|
1045
1203
|
}
|
|
1046
|
-
},
|
|
1047
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1204
|
+
}, fi = (e, t, n) => {
|
|
1205
|
+
let r = n.sql, i = n.nextAlias(), a = oi(i, e.target, e.children, n);
|
|
1048
1206
|
if (a === null) return null;
|
|
1049
1207
|
let o = e.fkSide === "source" ? r`${R(i, "id", r)} = ${R(t, e.foreignKey, r)}` : r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`;
|
|
1050
1208
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
|
|
1051
|
-
},
|
|
1052
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1209
|
+
}, pi = (e, t, n) => {
|
|
1210
|
+
let r = n.sql, i = n.nextAlias(), a = oi(i, e.target, e.children, n);
|
|
1053
1211
|
if (a === null) return null;
|
|
1054
|
-
let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, c =
|
|
1212
|
+
let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, c = ii(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`;
|
|
1055
1213
|
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('[]'))`;
|
|
1056
|
-
},
|
|
1057
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
1214
|
+
}, mi = (e, t, n) => {
|
|
1215
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = oi(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
|
|
1058
1216
|
projection: e.junction,
|
|
1059
|
-
source:
|
|
1217
|
+
source: li(o)
|
|
1060
1218
|
});
|
|
1061
1219
|
if (c === null) return null;
|
|
1062
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, u =
|
|
1220
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, u = Ai(e, s, r, !0), d = I(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : ci(e.junction, s, r);
|
|
1063
1221
|
return r`COALESCE((SELECT json_group_array(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${R(o, "id", r)} = ${R(s, i.targetKey, r)} WHERE ${R(s, i.sourceKey, r)} = ${R(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), json('[]'))`;
|
|
1064
|
-
},
|
|
1222
|
+
}, hi = (e, t, n) => {
|
|
1065
1223
|
let r = n.sql, i = n.nextAlias(), a = L(i, t.table, t.children, n);
|
|
1066
1224
|
if (a === null) return null;
|
|
1067
1225
|
let o = e.predicate ? r` WHERE ${V(e.predicate, i, r)}` : r``, s = w(e).length > 0 ? r` ORDER BY ${r.csv(w(e).map((e) => e.direction === "desc" ? r`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${B(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${B(e.skip, r)}`;
|
|
@@ -1070,66 +1228,66 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1070
1228
|
let a = r.sql, o = [];
|
|
1071
1229
|
for (let n of Object.keys(t.fields)) o.push(a`${z(n, a)}, ${R(e, n, a)}`);
|
|
1072
1230
|
if (i !== void 0) {
|
|
1073
|
-
let e =
|
|
1231
|
+
let e = si(i.projection, i.source, a);
|
|
1074
1232
|
o.push(a`${z("_junction", a)}, JSON_OBJECT(${e})`);
|
|
1075
1233
|
}
|
|
1076
1234
|
for (let t of n) {
|
|
1077
|
-
let n =
|
|
1235
|
+
let n = gi(t, e, r);
|
|
1078
1236
|
if (n === null) return null;
|
|
1079
1237
|
o.push(a`${z(t.relationName, a)}, ${n}`);
|
|
1080
1238
|
}
|
|
1081
1239
|
return a`JSON_OBJECT(${a.csv(o)})`;
|
|
1082
|
-
},
|
|
1240
|
+
}, gi = (e, t, n) => {
|
|
1083
1241
|
switch (e.relation.kind) {
|
|
1084
1242
|
case "one":
|
|
1085
|
-
if (
|
|
1086
|
-
let r =
|
|
1087
|
-
return n.dialect === "mariadb" ?
|
|
1243
|
+
if (Ir(e)) {
|
|
1244
|
+
let r = Lr(e);
|
|
1245
|
+
return n.dialect === "mariadb" ? bi(r, t, n) : vi(r, t, n);
|
|
1088
1246
|
}
|
|
1089
|
-
return
|
|
1090
|
-
case "many": return n.dialect === "mariadb" ?
|
|
1091
|
-
case "manyToMany": return n.dialect === "mariadb" ?
|
|
1247
|
+
return _i(e, t, n);
|
|
1248
|
+
case "many": return n.dialect === "mariadb" ? bi(e, t, n) : vi(e, t, n);
|
|
1249
|
+
case "manyToMany": return n.dialect === "mariadb" ? xi(e, t, n) : yi(e, t, n);
|
|
1092
1250
|
}
|
|
1093
|
-
},
|
|
1251
|
+
}, _i = (e, t, n) => {
|
|
1094
1252
|
let r = n.sql, i = n.nextAlias(), a = L(i, e.target, e.children, n);
|
|
1095
1253
|
if (a === null) return null;
|
|
1096
1254
|
let o = e.fkSide === "source" ? r`${R(i, "id", r)} = ${R(t, e.foreignKey, r)}` : r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`;
|
|
1097
1255
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
|
|
1098
|
-
},
|
|
1256
|
+
}, vi = (e, t, n) => {
|
|
1099
1257
|
let r = n.sql, i = n.nextAlias(), a = L(i, e.target, e.children, n);
|
|
1100
1258
|
if (a === null) return null;
|
|
1101
|
-
let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, c =
|
|
1259
|
+
let o = r`${R(void 0, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, c = ii(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`;
|
|
1102
1260
|
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())`;
|
|
1103
|
-
},
|
|
1261
|
+
}, yi = (e, t, n) => {
|
|
1104
1262
|
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = L(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
|
|
1105
1263
|
projection: e.junction,
|
|
1106
|
-
source:
|
|
1264
|
+
source: li(o)
|
|
1107
1265
|
});
|
|
1108
1266
|
if (c === null) return null;
|
|
1109
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, u =
|
|
1267
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, u = Ai(e, s, r, !0), d = I(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${B(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${B(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : ci(e.junction, s, r);
|
|
1110
1268
|
return r`COALESCE((SELECT JSON_ARRAYAGG(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${R(o, "id", r)} = ${R(s, i.targetKey, r)} WHERE ${R(s, i.sourceKey, r)} = ${R(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), JSON_ARRAY())`;
|
|
1111
|
-
},
|
|
1269
|
+
}, bi = (e, t, n) => {
|
|
1112
1270
|
let r = n.sql, i = n.nextAlias(), a = L(i, e.target, e.children, n);
|
|
1113
1271
|
if (a === null) return null;
|
|
1114
1272
|
let o = r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
|
|
1115
1273
|
if (e.branch.limit === void 0 && e.branch.offset === void 0) return r`COALESCE((SELECT JSON_ARRAYAGG(${a}${c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``}) FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}), JSON_ARRAY())`;
|
|
1116
1274
|
let l = c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${r(e.column)} DESC` : r`${r(e.column)} ASC`))}` : r` ORDER BY ${r("id")}`, u = e.branch.limit, d = e.branch.offset, f = u !== void 0 && d !== void 0 ? r` AND ${R(i, "rn", r)} > ${B(d, r)} AND ${R(i, "rn", r)} <= ${B(d + u, r)}` : u === void 0 ? r` AND ${R(i, "rn", r)} > ${B(d, r)}` : r` AND ${R(i, "rn", r)} <= ${B(u, r)}`;
|
|
1117
1275
|
return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${R(i, "rn", r)}) FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY ${r(e.foreignKey)}${l}) AS rn FROM ${r(e.target.tableName)}) AS ${r(i)} WHERE ${o}${s}${f}), JSON_ARRAY())`;
|
|
1118
|
-
},
|
|
1276
|
+
}, xi = (e, t, n) => {
|
|
1119
1277
|
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = (t) => e.junction === void 0 ? void 0 : {
|
|
1120
1278
|
projection: e.junction,
|
|
1121
1279
|
source: t
|
|
1122
|
-
}, l = r`${R(s, i.sourceKey, r)} = ${R(t, "id", r)}`, u = r`${R(o, "id", r)} = ${R(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, f =
|
|
1280
|
+
}, l = r`${R(s, i.sourceKey, r)} = ${R(t, "id", r)}`, u = r`${R(o, "id", r)} = ${R(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${F(H(e.branch.where), r)}`, f = Ai(e, s, r, !0), p = e.branch.orderBy ?? [];
|
|
1123
1281
|
if (e.branch.limit === void 0 && e.branch.offset === void 0) {
|
|
1124
|
-
let t = L(o, e.target, e.children, n, c(
|
|
1282
|
+
let t = L(o, e.target, e.children, n, c(ui(s)));
|
|
1125
1283
|
return t === null ? null : r`COALESCE((SELECT JSON_ARRAYAGG(${t}${p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${R(o, e.column, r)} DESC` : r`${R(o, e.column, r)} ASC`))}` : r``}) FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u} WHERE ${l}${f}${d}), JSON_ARRAY())`;
|
|
1126
1284
|
}
|
|
1127
|
-
let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${R(o, e.column, r)} DESC` : r`${R(o, e.column, r)} ASC`))}` : r` ORDER BY ${R(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, _ = h !== void 0 && g !== void 0 ? r` AND ${R(o, "rn", r)} > ${B(g, r)} AND ${R(o, "rn", r)} <= ${B(g + h, r)}` : h === void 0 ? r` AND ${R(o, "rn", r)} > ${B(g, r)}` : r` AND ${R(o, "rn", r)} <= ${B(h, r)}`,
|
|
1128
|
-
if (
|
|
1129
|
-
let
|
|
1130
|
-
return r`COALESCE((SELECT JSON_ARRAYAGG(${
|
|
1131
|
-
},
|
|
1132
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1285
|
+
let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${R(o, e.column, r)} DESC` : r`${R(o, e.column, r)} ASC`))}` : r` ORDER BY ${R(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, _ = h !== void 0 && g !== void 0 ? r` AND ${R(o, "rn", r)} > ${B(g, r)} AND ${R(o, "rn", r)} <= ${B(g + h, r)}` : h === void 0 ? r` AND ${R(o, "rn", r)} > ${B(g, r)}` : r` AND ${R(o, "rn", r)} <= ${B(h, r)}`, ee = e.branch.onJunction === void 0 ? r`` : r` WHERE ${V(H(e.branch.onJunction), s, r)}`, v = L(o, e.target, e.children, n, c(li(o)));
|
|
1286
|
+
if (v === null) return null;
|
|
1287
|
+
let y = e.junction === void 0 ? r`` : ci(e.junction, s, r);
|
|
1288
|
+
return r`COALESCE((SELECT JSON_ARRAYAGG(${v} ORDER BY ${R(o, "rn", r)}) FROM (SELECT ${r(o)}.*${y}, ${R(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${R(s, i.sourceKey, r)}${m}) AS rn FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u}${ee}) AS ${r(o)} WHERE ${R(o, `__src_${i.sourceKey}`, r)} = ${R(t, "id", r)}${d}${_}), JSON_ARRAY())`;
|
|
1289
|
+
}, Si = (e, t, n) => {
|
|
1290
|
+
let r = n.sql, i = n.nextAlias(), a = Ci(i, t.table, t.children, n);
|
|
1133
1291
|
if (a === null) return null;
|
|
1134
1292
|
let o = e.predicate ? r` WHERE ${V(e.predicate, i, r)}` : r``, s = w(e).length > 0 ? r` ORDER BY ${r.csv(w(e).map((e) => e.direction === "desc" ? r`${R(i, e.column, r)} DESC` : r`${R(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
|
|
1135
1293
|
if (e.skip !== void 0) {
|
|
@@ -1138,28 +1296,28 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1138
1296
|
} else e.take !== void 0 && (c = r`TOP ${B(e.take, r)} `);
|
|
1139
1297
|
let u = e.skip === void 0 ? s : r``;
|
|
1140
1298
|
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}`;
|
|
1141
|
-
},
|
|
1299
|
+
}, Ci = (e, t, n, r, i) => {
|
|
1142
1300
|
let a = r.sql, o = [];
|
|
1143
1301
|
for (let n of Object.keys(t.fields)) o.push(a`${R(e, n, a)} AS ${a(n)}`);
|
|
1144
|
-
if (i !== void 0) for (let e of i.projection.present) o.push(a`${R(i.source.alias, i.source.physical(e), a)} AS ${
|
|
1302
|
+
if (i !== void 0) for (let e of i.projection.present) o.push(a`${R(i.source.alias, i.source.physical(e), a)} AS ${wi(`_junction.${e}`, a)}`);
|
|
1145
1303
|
for (let t of n) {
|
|
1146
|
-
let n =
|
|
1304
|
+
let n = Ti(t, e, r);
|
|
1147
1305
|
if (n === null) return null;
|
|
1148
1306
|
o.push(n);
|
|
1149
1307
|
}
|
|
1150
1308
|
return a.csv(o);
|
|
1151
|
-
},
|
|
1309
|
+
}, wi = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), Ti = (e, t, n) => {
|
|
1152
1310
|
switch (e.relation.kind) {
|
|
1153
|
-
case "one": return
|
|
1154
|
-
case "many": return
|
|
1155
|
-
case "manyToMany": return
|
|
1311
|
+
case "one": return Ir(e) ? Oi(Lr(e), t, n) : Ei(e, t, n);
|
|
1312
|
+
case "many": return Oi(e, t, n);
|
|
1313
|
+
case "manyToMany": return ki(e, t, n);
|
|
1156
1314
|
}
|
|
1157
|
-
},
|
|
1158
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1315
|
+
}, Ei = (e, t, n) => {
|
|
1316
|
+
let r = n.sql, i = n.nextAlias(), a = Ci(i, e.target, e.children, n);
|
|
1159
1317
|
if (a === null) return null;
|
|
1160
1318
|
let o = e.fkSide === "source" ? r`${R(i, "id", r)} = ${R(t, e.foreignKey, r)}` : r`${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}`;
|
|
1161
1319
|
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)}`;
|
|
1162
|
-
},
|
|
1320
|
+
}, Di = (e, t, n) => {
|
|
1163
1321
|
if (e.offset !== void 0) {
|
|
1164
1322
|
let r = e.orderBy && e.orderBy.length > 0 ? t : n` ORDER BY (SELECT NULL)`, i = e.limit === void 0 ? n`${r} OFFSET ${B(e.offset, n)} ROWS` : n`${r} OFFSET ${B(e.offset, n)} ROWS FETCH NEXT ${B(e.limit, n)} ROWS ONLY`;
|
|
1165
1323
|
return {
|
|
@@ -1173,29 +1331,29 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1173
1331
|
pagination: n``,
|
|
1174
1332
|
finalOrder: t
|
|
1175
1333
|
};
|
|
1176
|
-
},
|
|
1177
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1334
|
+
}, Oi = (e, t, n) => {
|
|
1335
|
+
let r = n.sql, i = n.nextAlias(), a = Ci(i, e.target, e.children, n);
|
|
1178
1336
|
if (a === null) return null;
|
|
1179
|
-
let o = e.branch.where === void 0 ? r`` : r` AND ${V(e.branch.where, i, r)}`, s = I(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } =
|
|
1337
|
+
let o = e.branch.where === void 0 ? r`` : r` AND ${V(e.branch.where, i, r)}`, s = I(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } = Di(e.branch, s, r);
|
|
1180
1338
|
return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${R(i, e.foreignKey, r)} = ${R(t, e.sourceKey, r)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
|
|
1181
|
-
},
|
|
1182
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
1339
|
+
}, ki = (e, t, n) => {
|
|
1340
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Ci(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
|
|
1183
1341
|
projection: e.junction,
|
|
1184
|
-
source:
|
|
1342
|
+
source: ui(s)
|
|
1185
1343
|
});
|
|
1186
1344
|
if (c === null) return null;
|
|
1187
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${V(e.branch.where, o, r)}`, u =
|
|
1345
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${V(e.branch.where, o, r)}`, u = Ai(e, s, r), d = I(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } = Di(e.branch, d, r);
|
|
1188
1346
|
return r`ISNULL(JSON_QUERY((SELECT ${f}${c} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${R(o, "id", r)} = ${R(s, i.targetKey, r)} WHERE ${R(s, i.sourceKey, r)} = ${R(t, "id", r)}${u}${l}${m}${p} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
|
|
1189
1347
|
}, R = (e, t, n) => e === void 0 ? n`${n(t)}` : n`${n(e)}.${n(t)}`, z = (e, t) => t.unsafe(`'${e.replace(/'/g, "''")}'`), B = (e, t) => {
|
|
1190
1348
|
if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`literalInt: expected non-negative integer, got ${e}`);
|
|
1191
1349
|
return t.unsafe(String(e));
|
|
1192
|
-
}, V = (e, t, n) => F(
|
|
1350
|
+
}, V = (e, t, n) => F(ji(e, t), n), Ai = (e, t, n, r = !1) => {
|
|
1193
1351
|
let i = e.branch.onJunction;
|
|
1194
1352
|
return i === void 0 ? n`` : n` AND ${V(r ? H(i) : i, t, n)}`;
|
|
1195
|
-
},
|
|
1196
|
-
if ("not" in e) return { not:
|
|
1197
|
-
if ("and" in e) return { and: e.and.map((e) =>
|
|
1198
|
-
if ("or" in e) return { or: e.or.map((e) =>
|
|
1353
|
+
}, ji = (e, t) => {
|
|
1354
|
+
if ("not" in e) return { not: ji(e.not, t) };
|
|
1355
|
+
if ("and" in e) return { and: e.and.map((e) => ji(e, t)) };
|
|
1356
|
+
if ("or" in e) return { or: e.or.map((e) => ji(e, t)) };
|
|
1199
1357
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
1200
1358
|
let n = e;
|
|
1201
1359
|
return {
|
|
@@ -1217,91 +1375,91 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1217
1375
|
let t = e;
|
|
1218
1376
|
return {
|
|
1219
1377
|
...t,
|
|
1220
|
-
value:
|
|
1378
|
+
value: Mi(t.value)
|
|
1221
1379
|
};
|
|
1222
|
-
},
|
|
1223
|
-
e.actors !== void 0 && (
|
|
1224
|
-
},
|
|
1380
|
+
}, Mi = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => Mi(e)) : e, Ni = Symbol.for("@voltro/database/coreTablesRegistry"), Pi = globalThis, Fi = Pi[Ni] ?? (Pi[Ni] = {}), Ii = (e) => {
|
|
1381
|
+
e.actors !== void 0 && (Fi.actors = e.actors), e.tenants !== void 0 && (Fi.tenants = e.tenants);
|
|
1382
|
+
}, Li = (e, t) => () => {
|
|
1225
1383
|
let n = e();
|
|
1226
1384
|
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`);
|
|
1227
1385
|
return n();
|
|
1228
|
-
},
|
|
1229
|
-
id:
|
|
1230
|
-
kind:
|
|
1386
|
+
}, Ri = () => Li(() => Fi.actors, "actors"), zi = () => Li(() => Fi.tenants, "tenants"), Bi = E("actors", {
|
|
1387
|
+
id: x(),
|
|
1388
|
+
kind: y().oneOf([
|
|
1231
1389
|
"user",
|
|
1232
1390
|
"serviceAccount",
|
|
1233
1391
|
"apiKey",
|
|
1234
1392
|
"system"
|
|
1235
1393
|
]),
|
|
1236
|
-
displayName:
|
|
1237
|
-
createdAt:
|
|
1238
|
-
}),
|
|
1394
|
+
displayName: y().nullable(),
|
|
1395
|
+
createdAt: C().default("now")
|
|
1396
|
+
}), Vi = (e, t) => ({
|
|
1239
1397
|
column: e,
|
|
1240
1398
|
op: "eq",
|
|
1241
1399
|
value: t
|
|
1242
|
-
}),
|
|
1400
|
+
}), Hi = (e, t) => ({
|
|
1243
1401
|
column: e,
|
|
1244
1402
|
op: "neq",
|
|
1245
1403
|
value: t
|
|
1246
|
-
}),
|
|
1404
|
+
}), Ui = (e, t) => ({
|
|
1247
1405
|
column: e,
|
|
1248
1406
|
op: "gt",
|
|
1249
1407
|
value: t
|
|
1250
|
-
}),
|
|
1408
|
+
}), Wi = (e, t) => ({
|
|
1251
1409
|
column: e,
|
|
1252
1410
|
op: "gte",
|
|
1253
1411
|
value: t
|
|
1254
|
-
}),
|
|
1412
|
+
}), Gi = (e, t) => ({
|
|
1255
1413
|
column: e,
|
|
1256
1414
|
op: "lt",
|
|
1257
1415
|
value: t
|
|
1258
|
-
}),
|
|
1416
|
+
}), Ki = (e, t) => ({
|
|
1259
1417
|
column: e,
|
|
1260
1418
|
op: "lte",
|
|
1261
1419
|
value: t
|
|
1262
|
-
}),
|
|
1420
|
+
}), qi = (e, t) => ({
|
|
1263
1421
|
column: e,
|
|
1264
1422
|
op: "in",
|
|
1265
1423
|
value: t
|
|
1266
|
-
}),
|
|
1424
|
+
}), Ji = (e, t) => ({
|
|
1267
1425
|
column: e,
|
|
1268
1426
|
op: "notIn",
|
|
1269
1427
|
value: t
|
|
1270
|
-
}),
|
|
1428
|
+
}), Yi = (e, t) => ({
|
|
1271
1429
|
column: e,
|
|
1272
1430
|
op: "contains",
|
|
1273
1431
|
value: t
|
|
1274
|
-
}),
|
|
1432
|
+
}), Xi = (e, t) => ({
|
|
1275
1433
|
column: e,
|
|
1276
1434
|
op: "startsWith",
|
|
1277
1435
|
value: t
|
|
1278
|
-
}),
|
|
1436
|
+
}), Zi = (e, t) => ({
|
|
1279
1437
|
column: e,
|
|
1280
1438
|
op: "arrayContains",
|
|
1281
1439
|
value: t
|
|
1282
|
-
}),
|
|
1440
|
+
}), Qi = (e, t) => ({
|
|
1283
1441
|
column: e,
|
|
1284
1442
|
op: "arrayOverlaps",
|
|
1285
1443
|
value: t
|
|
1286
|
-
}),
|
|
1444
|
+
}), $i = (e, t) => ({
|
|
1287
1445
|
column: e,
|
|
1288
1446
|
op: "arrayHas",
|
|
1289
1447
|
value: t
|
|
1290
|
-
}),
|
|
1448
|
+
}), ea = {
|
|
1291
1449
|
column: "id",
|
|
1292
1450
|
op: "in",
|
|
1293
1451
|
value: []
|
|
1294
|
-
},
|
|
1452
|
+
}, ta = (e) => ({
|
|
1295
1453
|
column: e,
|
|
1296
1454
|
op: "isNull"
|
|
1297
|
-
}),
|
|
1455
|
+
}), na = (e) => ({
|
|
1298
1456
|
column: e,
|
|
1299
1457
|
op: "isNotNull"
|
|
1300
|
-
}),
|
|
1458
|
+
}), ra = (e, t) => ({
|
|
1301
1459
|
column: e,
|
|
1302
1460
|
op: "spatial",
|
|
1303
1461
|
value: t
|
|
1304
|
-
}),
|
|
1462
|
+
}), ia = (...e) => ({ and: e }), aa = (...e) => ({ or: e }), oa = (e) => ({ not: e }), sa = (e, ...t) => {
|
|
1305
1463
|
if (t.length === 0) throw Error(`jsonField("${e}"): at least one path segment is required`);
|
|
1306
1464
|
let n = (n, r) => ({
|
|
1307
1465
|
column: e,
|
|
@@ -1323,33 +1481,33 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1323
1481
|
isNull: () => n("isNull"),
|
|
1324
1482
|
isNotNull: () => n("isNotNull")
|
|
1325
1483
|
};
|
|
1326
|
-
},
|
|
1484
|
+
}, ca = (e) => "descriptor" in e ? e.descriptor : e, la = (e, t) => ({
|
|
1327
1485
|
column: e,
|
|
1328
1486
|
op: "subquery-in",
|
|
1329
|
-
subquery:
|
|
1330
|
-
}),
|
|
1487
|
+
subquery: ca(t)
|
|
1488
|
+
}), ua = (e, t) => ({
|
|
1331
1489
|
column: e,
|
|
1332
1490
|
op: "subquery-not-in",
|
|
1333
|
-
subquery:
|
|
1334
|
-
}),
|
|
1491
|
+
subquery: ca(t)
|
|
1492
|
+
}), da = (e) => ({
|
|
1335
1493
|
op: "exists",
|
|
1336
|
-
subquery:
|
|
1337
|
-
}),
|
|
1494
|
+
subquery: ca(e)
|
|
1495
|
+
}), fa = (e) => ({
|
|
1338
1496
|
op: "not-exists",
|
|
1339
|
-
subquery:
|
|
1340
|
-
}),
|
|
1497
|
+
subquery: ca(e)
|
|
1498
|
+
}), pa = (e, t) => e === t || e instanceof Date && t instanceof Date && e.getTime() === t.getTime(), ma = (e, t) => {
|
|
1341
1499
|
if (e == null || t == null) return null;
|
|
1342
1500
|
let n = e instanceof Date ? e.getTime() : e, r = t instanceof Date ? t.getTime() : t;
|
|
1343
1501
|
return typeof n == typeof r ? n === r ? 0 : n > r ? 1 : -1 : null;
|
|
1344
|
-
},
|
|
1502
|
+
}, ha = (e, t, n = null) => {
|
|
1345
1503
|
if (!t) return !1;
|
|
1346
|
-
if ("not" in e) return
|
|
1504
|
+
if ("not" in e) return !ha(e.not, t, n);
|
|
1347
1505
|
if ("and" in e) {
|
|
1348
|
-
for (let r of e.and) if (
|
|
1506
|
+
for (let r of e.and) if (!ha(r, t, n)) return !1;
|
|
1349
1507
|
return !0;
|
|
1350
1508
|
}
|
|
1351
1509
|
if ("or" in e) {
|
|
1352
|
-
for (let r of e.or) if (
|
|
1510
|
+
for (let r of e.or) if (ha(r, t, n)) return !0;
|
|
1353
1511
|
return !1;
|
|
1354
1512
|
}
|
|
1355
1513
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
@@ -1366,14 +1524,14 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1366
1524
|
}
|
|
1367
1525
|
let r = e, i = t[r.column];
|
|
1368
1526
|
switch (r.op) {
|
|
1369
|
-
case "eq": return
|
|
1370
|
-
case "neq": return !
|
|
1371
|
-
case "gt": return (
|
|
1372
|
-
case "gte": return (
|
|
1373
|
-
case "lt": return (
|
|
1374
|
-
case "lte": return (
|
|
1375
|
-
case "in": return Array.isArray(r.value) && r.value.some((e) =>
|
|
1376
|
-
case "notIn": return Array.isArray(r.value) && !r.value.some((e) =>
|
|
1527
|
+
case "eq": return pa(i, r.value);
|
|
1528
|
+
case "neq": return !pa(i, r.value);
|
|
1529
|
+
case "gt": return (ma(i, r.value) ?? -1) > 0;
|
|
1530
|
+
case "gte": return (ma(i, r.value) ?? -1) >= 0;
|
|
1531
|
+
case "lt": return (ma(i, r.value) ?? 1) < 0;
|
|
1532
|
+
case "lte": return (ma(i, r.value) ?? 1) <= 0;
|
|
1533
|
+
case "in": return Array.isArray(r.value) && r.value.some((e) => pa(i, e));
|
|
1534
|
+
case "notIn": return Array.isArray(r.value) && !r.value.some((e) => pa(i, e));
|
|
1377
1535
|
case "contains": return typeof i == "string" && typeof r.value == "string" && i.toLowerCase().includes(r.value.toLowerCase());
|
|
1378
1536
|
case "startsWith": return typeof i == "string" && typeof r.value == "string" && i.startsWith(r.value);
|
|
1379
1537
|
case "arrayContains": {
|
|
@@ -1389,17 +1547,17 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1389
1547
|
case "isNotNull": return i != null;
|
|
1390
1548
|
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.");
|
|
1391
1549
|
}
|
|
1392
|
-
},
|
|
1550
|
+
}, ga = function* (e) {
|
|
1393
1551
|
if ("not" in e) {
|
|
1394
|
-
yield*
|
|
1552
|
+
yield* ga(e.not);
|
|
1395
1553
|
return;
|
|
1396
1554
|
}
|
|
1397
1555
|
if ("and" in e) {
|
|
1398
|
-
for (let t of e.and) yield*
|
|
1556
|
+
for (let t of e.and) yield* ga(t);
|
|
1399
1557
|
return;
|
|
1400
1558
|
}
|
|
1401
1559
|
if ("or" in e) {
|
|
1402
|
-
for (let t of e.or) yield*
|
|
1560
|
+
for (let t of e.or) yield* ga(t);
|
|
1403
1561
|
return;
|
|
1404
1562
|
}
|
|
1405
1563
|
e.op === "subquery-in" || e.op === "subquery-not-in" ? yield {
|
|
@@ -1409,46 +1567,46 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1409
1567
|
kind: "exists",
|
|
1410
1568
|
descriptor: e.subquery
|
|
1411
1569
|
});
|
|
1412
|
-
},
|
|
1570
|
+
}, _a = function* (e, t = !0) {
|
|
1413
1571
|
if ("not" in e) {
|
|
1414
|
-
yield*
|
|
1572
|
+
yield* _a(e.not, !1);
|
|
1415
1573
|
return;
|
|
1416
1574
|
}
|
|
1417
1575
|
if ("and" in e) {
|
|
1418
|
-
for (let n of e.and) yield*
|
|
1576
|
+
for (let n of e.and) yield* _a(n, t);
|
|
1419
1577
|
return;
|
|
1420
1578
|
}
|
|
1421
1579
|
if ("or" in e) {
|
|
1422
|
-
for (let t of e.or) yield*
|
|
1580
|
+
for (let t of e.or) yield* _a(t, !1);
|
|
1423
1581
|
return;
|
|
1424
1582
|
}
|
|
1425
1583
|
e.op !== "subquery-in" && e.op !== "subquery-not-in" && e.op !== "exists" && e.op !== "not-exists" && (yield {
|
|
1426
1584
|
...e,
|
|
1427
1585
|
conjunctive: t
|
|
1428
1586
|
});
|
|
1429
|
-
},
|
|
1587
|
+
}, va = (e, t) => ({
|
|
1430
1588
|
...t,
|
|
1431
1589
|
...e,
|
|
1432
1590
|
origin: e.origin ?? "injected"
|
|
1433
|
-
}),
|
|
1591
|
+
}), ya = (e, t, n = {}) => ({
|
|
1434
1592
|
table: e,
|
|
1435
1593
|
op: "insert",
|
|
1436
1594
|
old: null,
|
|
1437
1595
|
new: t,
|
|
1438
1596
|
...n
|
|
1439
|
-
}),
|
|
1597
|
+
}), ba = (e, t, n, r = {}) => ({
|
|
1440
1598
|
table: e,
|
|
1441
1599
|
op: "update",
|
|
1442
1600
|
old: t,
|
|
1443
1601
|
new: n,
|
|
1444
1602
|
...r
|
|
1445
|
-
}),
|
|
1603
|
+
}), xa = (e, t, n = {}) => ({
|
|
1446
1604
|
table: e,
|
|
1447
1605
|
op: "delete",
|
|
1448
1606
|
old: t,
|
|
1449
1607
|
new: null,
|
|
1450
1608
|
...n
|
|
1451
|
-
}),
|
|
1609
|
+
}), Sa = (e, t, n = {}) => {
|
|
1452
1610
|
let { at: r = "2026-01-01T00:00:00.000Z", column: i = "deletedAt", ...a } = n;
|
|
1453
1611
|
return {
|
|
1454
1612
|
table: e,
|
|
@@ -1463,26 +1621,26 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1463
1621
|
},
|
|
1464
1622
|
...a
|
|
1465
1623
|
};
|
|
1466
|
-
},
|
|
1467
|
-
let t = e ??
|
|
1624
|
+
}, Ca = new Mt(), wa = (e, t) => Ca.run(e, t), Ta = () => Ca.getStore(), Ea = (e) => {
|
|
1625
|
+
let t = e ?? Ca.getStore();
|
|
1468
1626
|
return t === void 0 ? {} : {
|
|
1469
1627
|
...t.traceId === void 0 ? {} : { traceId: t.traceId },
|
|
1470
1628
|
...t.subjectId === void 0 ? {} : { subjectId: t.subjectId },
|
|
1471
1629
|
...t.procedure === void 0 ? {} : { procedure: t.procedure },
|
|
1472
1630
|
...t.via === void 0 ? {} : { via: t.via }
|
|
1473
1631
|
};
|
|
1474
|
-
},
|
|
1475
|
-
let t =
|
|
1476
|
-
return t === void 0 ? e(void 0) :
|
|
1477
|
-
},
|
|
1632
|
+
}, Da = (e) => {
|
|
1633
|
+
let t = Ca.getStore();
|
|
1634
|
+
return t === void 0 ? e(void 0) : Ca.run(t, () => e(t));
|
|
1635
|
+
}, Oa = 3e4, ka = 1e4, U = /* @__PURE__ */ new Map(), W = 0, Aa = (e, t, n) => `${e}\u0000${t}\u0000${String(n)}`, ja = (e) => {
|
|
1478
1636
|
for (let [t, n] of U) {
|
|
1479
|
-
let r = n.filter((t) => e - t.at <
|
|
1637
|
+
let r = n.filter((t) => e - t.at < Oa);
|
|
1480
1638
|
W -= n.length - r.length, r.length === 0 ? U.delete(t) : r.length !== n.length && U.set(t, r);
|
|
1481
1639
|
}
|
|
1482
|
-
},
|
|
1640
|
+
}, Ma = (e, t) => {
|
|
1483
1641
|
if (t.traceId === void 0 && t.subjectId === void 0 && t.procedure === void 0) return;
|
|
1484
1642
|
let n = Date.now();
|
|
1485
|
-
if (W >=
|
|
1643
|
+
if (W >= ka && ja(n), W >= ka) return;
|
|
1486
1644
|
let r = U.get(e);
|
|
1487
1645
|
r === void 0 ? U.set(e, [{
|
|
1488
1646
|
attribution: t,
|
|
@@ -1491,34 +1649,34 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1491
1649
|
attribution: t,
|
|
1492
1650
|
at: n
|
|
1493
1651
|
}), W += 1;
|
|
1494
|
-
},
|
|
1652
|
+
}, Na = (e) => {
|
|
1495
1653
|
let t = U.get(e);
|
|
1496
1654
|
if (t === void 0 || t.length === 0) return;
|
|
1497
1655
|
let n = t.shift();
|
|
1498
|
-
if (--W, t.length === 0 && U.delete(e), !(Date.now() - n.at >=
|
|
1499
|
-
},
|
|
1656
|
+
if (--W, t.length === 0 && U.delete(e), !(Date.now() - n.at >= Oa)) return n.attribution;
|
|
1657
|
+
}, Pa = (e) => (U.get(e)?.length ?? 0) > 0, G = /* @__PURE__ */ new Map(), K = /* @__PURE__ */ new Map(), Fa = /* @__PURE__ */ new Map(), Ia = 250, La = (e) => {
|
|
1500
1658
|
let t = K.get(e);
|
|
1501
1659
|
if (t === void 0) return;
|
|
1502
1660
|
K.delete(e);
|
|
1503
|
-
let n =
|
|
1504
|
-
n !== void 0 && (clearTimeout(n),
|
|
1661
|
+
let n = Fa.get(e);
|
|
1662
|
+
n !== void 0 && (clearTimeout(n), Fa.delete(e));
|
|
1505
1663
|
for (let e of t) e();
|
|
1506
|
-
},
|
|
1664
|
+
}, Ra = (e) => {
|
|
1507
1665
|
G.set(e, (G.get(e) ?? 0) + 1);
|
|
1508
|
-
},
|
|
1666
|
+
}, za = (e) => {
|
|
1509
1667
|
let t = (G.get(e) ?? 0) - 1;
|
|
1510
1668
|
if (t > 0) {
|
|
1511
1669
|
G.set(e, t);
|
|
1512
1670
|
return;
|
|
1513
1671
|
}
|
|
1514
|
-
G.delete(e),
|
|
1515
|
-
},
|
|
1516
|
-
let i = n == null ? void 0 :
|
|
1672
|
+
G.delete(e), La(e);
|
|
1673
|
+
}, Ba = (e, t, n, r) => {
|
|
1674
|
+
let i = n == null ? void 0 : Aa(e, t, n), a = () => r(i === void 0 ? void 0 : Na(i));
|
|
1517
1675
|
if (i === void 0) {
|
|
1518
1676
|
a();
|
|
1519
1677
|
return;
|
|
1520
1678
|
}
|
|
1521
|
-
if (
|
|
1679
|
+
if (Pa(i)) {
|
|
1522
1680
|
a();
|
|
1523
1681
|
return;
|
|
1524
1682
|
}
|
|
@@ -1532,74 +1690,74 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1532
1690
|
return;
|
|
1533
1691
|
}
|
|
1534
1692
|
K.set(e, [a]);
|
|
1535
|
-
let s = setTimeout(() =>
|
|
1536
|
-
typeof s == "object" && typeof s.unref == "function" && s.unref(),
|
|
1537
|
-
},
|
|
1693
|
+
let s = setTimeout(() => La(e), Ia);
|
|
1694
|
+
typeof s == "object" && typeof s.unref == "function" && s.unref(), Fa.set(e, s);
|
|
1695
|
+
}, Va = () => {
|
|
1538
1696
|
U.clear(), W = 0, G.clear();
|
|
1539
|
-
for (let e of
|
|
1540
|
-
|
|
1541
|
-
},
|
|
1697
|
+
for (let e of Fa.values()) clearTimeout(e);
|
|
1698
|
+
Fa.clear(), K.clear();
|
|
1699
|
+
}, Ha = () => W, q = /* @__PURE__ */ new Map(), Ua = (e, t) => {
|
|
1542
1700
|
q.set(e, {
|
|
1543
1701
|
recorder: t.recorder,
|
|
1544
1702
|
tables: new Set(t.tables),
|
|
1545
1703
|
ownTables: new Set(t.ownTables)
|
|
1546
1704
|
});
|
|
1547
|
-
},
|
|
1705
|
+
}, Wa = (e) => {
|
|
1548
1706
|
q.delete(e);
|
|
1549
|
-
},
|
|
1707
|
+
}, Ga = () => q.clear(), Ka = (e) => {
|
|
1550
1708
|
if (q.size === 0) return !1;
|
|
1551
1709
|
for (let t of q.values()) if (!t.ownTables.has(e) && t.tables.has(e)) return !0;
|
|
1552
1710
|
return !1;
|
|
1553
|
-
},
|
|
1711
|
+
}, qa = async (e, t) => {
|
|
1554
1712
|
if (q.size !== 0) for (let n of q.values()) n.ownTables.has(t.table) || n.tables.has(t.table) && await n.recorder(e, t);
|
|
1555
|
-
},
|
|
1713
|
+
}, Ja = Ot.exponential({
|
|
1556
1714
|
start: 5e-4,
|
|
1557
1715
|
factor: 2,
|
|
1558
1716
|
count: 16
|
|
1559
|
-
}),
|
|
1560
|
-
let n = `${e}\u0000${t}`, r =
|
|
1717
|
+
}), Ya = O.counter("voltro_db_queries_total", { description: "Database operations executed, by dialect and operation kind." }), Xa = O.histogram("voltro_db_query_duration_seconds", Ja, "Database operation duration in seconds, by dialect and operation kind."), Za = O.counter("voltro_db_errors_total", { description: "Database operations that threw, by dialect and operation kind." }), Qa = O.gauge("voltro_db_operations_in_flight", { description: "Database operations currently executing, by dialect. An upper bound on connections the framework holds; NOT the driver pool's waiting count." }), $a = O.counter("voltro_db_eager_fallback_total", { description: "Eager-load queries that degraded from the single-roundtrip JSON-agg path to the multi-query walker, by dialect and reason." }), eo = [], to = /* @__PURE__ */ new Map(), no = /* @__PURE__ */ new Map(), ro = /* @__PURE__ */ new Map(), io = (e, t) => {
|
|
1718
|
+
let n = `${e}\u0000${t}`, r = to.get(n);
|
|
1561
1719
|
if (r !== void 0) return r;
|
|
1562
|
-
let i = (n) =>
|
|
1563
|
-
count: i(
|
|
1564
|
-
duration: i(
|
|
1565
|
-
errors: i(
|
|
1720
|
+
let i = (n) => O.tagged(O.tagged(n, "dialect", e), "op", t), a = {
|
|
1721
|
+
count: i(Ya),
|
|
1722
|
+
duration: i(Xa),
|
|
1723
|
+
errors: i(Za)
|
|
1566
1724
|
};
|
|
1567
|
-
return
|
|
1568
|
-
},
|
|
1569
|
-
|
|
1570
|
-
},
|
|
1571
|
-
let n = Math.max(0, (
|
|
1572
|
-
n === 0 ?
|
|
1573
|
-
let r =
|
|
1574
|
-
r === void 0 && (r =
|
|
1575
|
-
},
|
|
1576
|
-
let t =
|
|
1577
|
-
t.count.unsafeUpdate(1,
|
|
1578
|
-
},
|
|
1725
|
+
return to.set(n, a), a;
|
|
1726
|
+
}, ao = () => {
|
|
1727
|
+
to.clear(), no.clear(), ro.clear();
|
|
1728
|
+
}, oo = () => to.size + no.size + ro.size, so = /* @__PURE__ */ new Map(), co = (e, t) => {
|
|
1729
|
+
let n = Math.max(0, (so.get(e) ?? 0) + t);
|
|
1730
|
+
n === 0 ? so.delete(e) : so.set(e, n);
|
|
1731
|
+
let r = no.get(e);
|
|
1732
|
+
r === void 0 && (r = O.tagged(Qa, "dialect", e), no.set(e, r)), r.unsafeUpdate(n, eo);
|
|
1733
|
+
}, lo = (e) => so.get(e) ?? 0, uo = (e) => {
|
|
1734
|
+
let t = io(String(e.dialect), e.op);
|
|
1735
|
+
t.count.unsafeUpdate(1, eo), t.duration.unsafeUpdate(e.durationMs / 1e3, eo), e.status === "error" && t.errors.unsafeUpdate(1, eo);
|
|
1736
|
+
}, fo = async (e, t, n) => {
|
|
1579
1737
|
let r = performance.now(), i = String(e);
|
|
1580
|
-
|
|
1738
|
+
co(i, 1);
|
|
1581
1739
|
let a = "ok";
|
|
1582
1740
|
try {
|
|
1583
1741
|
return await n();
|
|
1584
1742
|
} catch (e) {
|
|
1585
1743
|
throw a = "error", e;
|
|
1586
1744
|
} finally {
|
|
1587
|
-
|
|
1745
|
+
co(i, -1), uo({
|
|
1588
1746
|
dialect: e,
|
|
1589
1747
|
op: t,
|
|
1590
1748
|
durationMs: performance.now() - r,
|
|
1591
1749
|
status: a
|
|
1592
1750
|
});
|
|
1593
1751
|
}
|
|
1594
|
-
},
|
|
1752
|
+
}, po = 3e5, mo = (e) => {
|
|
1595
1753
|
if (e == null || e === "") return;
|
|
1596
1754
|
let t = Number(e);
|
|
1597
1755
|
return Number.isFinite(t) && t >= 0 ? Math.floor(t) : void 0;
|
|
1598
|
-
},
|
|
1599
|
-
let n =
|
|
1756
|
+
}, ho = (e, t = process.env) => mo(t.VOLTRO_DB_EAGER_FALLBACK_WARN_INTERVAL_MS) ?? mo(e) ?? 3e5, go = (e, t = {}) => {
|
|
1757
|
+
let n = ho(t.warnIntervalMs), r = t.now ?? (() => Date.now()), i = /* @__PURE__ */ new Map();
|
|
1600
1758
|
return (t) => {
|
|
1601
|
-
let a = `${t.dialect} ${t.reason}`, o =
|
|
1602
|
-
o === void 0 && (o =
|
|
1759
|
+
let a = `${t.dialect} ${t.reason}`, o = ro.get(a);
|
|
1760
|
+
o === void 0 && (o = O.tagged(O.tagged($a, "dialect", String(t.dialect)), "reason", t.reason), ro.set(a, o)), o.unsafeUpdate(1, eo);
|
|
1603
1761
|
let s = `${t.table}\u0000${t.reason}`, c = i.get(s), l = c === void 0 || n > 0 && r() - c >= n, u = {
|
|
1604
1762
|
table: t.table,
|
|
1605
1763
|
dialect: String(t.dialect),
|
|
@@ -1613,24 +1771,24 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1613
1771
|
}
|
|
1614
1772
|
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);
|
|
1615
1773
|
};
|
|
1616
|
-
},
|
|
1617
|
-
if (
|
|
1618
|
-
throw
|
|
1619
|
-
},
|
|
1620
|
-
let t = 0, n =
|
|
1774
|
+
}, _o = (e) => {
|
|
1775
|
+
if (Dt.isSuccess(e)) return e.value;
|
|
1776
|
+
throw wt.squash(e.cause);
|
|
1777
|
+
}, vo = "10 millis", yo = 3, bo = async (e) => {
|
|
1778
|
+
let t = 0, n = D.suspend(() => {
|
|
1621
1779
|
let n = ++t;
|
|
1622
|
-
return e.withTransaction(
|
|
1623
|
-
if (
|
|
1624
|
-
let r = t.value, i =
|
|
1780
|
+
return e.withTransaction(D.flatMap(D.serviceOption(Nt), (t) => {
|
|
1781
|
+
if (k.isNone(t)) return D.fail(/* @__PURE__ */ Error(`${e.label}: TransactionConnection unexpectedly missing inside withTransaction.`));
|
|
1782
|
+
let r = t.value, i = D.tryPromise({
|
|
1625
1783
|
try: () => e.body(r, n),
|
|
1626
1784
|
catch: (e) => e
|
|
1627
1785
|
});
|
|
1628
|
-
return e.prepare === void 0 ? i :
|
|
1629
|
-
})).pipe(
|
|
1630
|
-
}), r =
|
|
1631
|
-
return
|
|
1632
|
-
},
|
|
1633
|
-
let t =
|
|
1786
|
+
return e.prepare === void 0 ? i : D.flatMap(e.prepare(r), () => i);
|
|
1787
|
+
})).pipe(D.catchAllDefect((t) => e.isRetryable(t) ? D.fail(t) : D.die(t)));
|
|
1788
|
+
}), r = At.exponential(vo).pipe(At.compose(At.recurs(yo)), At.whileInput(e.isRetryable)), i = n.pipe(D.retry(r), D.withSpan(e.span.name, { attributes: { ...e.span.attributes } }));
|
|
1789
|
+
return fo(e.dialect, "transaction", async () => _o(await e.runPromiseExit(e.wrapProgram === void 0 ? i : e.wrapProgram(i))));
|
|
1790
|
+
}, xo = async (e) => {
|
|
1791
|
+
let t = Ta(), n = t === void 0 ? (e) => e() : (e) => wa(t, e), r = await bo({
|
|
1634
1792
|
...e,
|
|
1635
1793
|
body: (r) => {
|
|
1636
1794
|
let i = e.makeView(r, t);
|
|
@@ -1641,14 +1799,14 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1641
1799
|
}
|
|
1642
1800
|
});
|
|
1643
1801
|
return r.view.commitEvents(), r.result;
|
|
1644
|
-
},
|
|
1645
|
-
table:
|
|
1646
|
-
id:
|
|
1647
|
-
expected:
|
|
1648
|
-
actual:
|
|
1649
|
-
}) {},
|
|
1802
|
+
}, So = class extends A.TaggedError()("VersionConflict", {
|
|
1803
|
+
table: A.String,
|
|
1804
|
+
id: A.String,
|
|
1805
|
+
expected: A.Number,
|
|
1806
|
+
actual: A.NullOr(A.Number)
|
|
1807
|
+
}) {}, Co = (e) => {
|
|
1650
1808
|
for (let [t, n] of Object.entries(e)) if (n?.definition?.versionColumn === !0) return t;
|
|
1651
|
-
},
|
|
1809
|
+
}, wo = (e) => {
|
|
1652
1810
|
let { versionColumn: t, patch: n } = e;
|
|
1653
1811
|
if (t === void 0) return {
|
|
1654
1812
|
nextVersion: void 0,
|
|
@@ -1661,28 +1819,28 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1661
1819
|
expected: i,
|
|
1662
1820
|
patch: a
|
|
1663
1821
|
};
|
|
1664
|
-
},
|
|
1665
|
-
if (e.expected !== void 0 && (e.current === null || e.current !== e.expected)) return new
|
|
1822
|
+
}, To = (e) => {
|
|
1823
|
+
if (e.expected !== void 0 && (e.current === null || e.current !== e.expected)) return new So({
|
|
1666
1824
|
table: e.table,
|
|
1667
1825
|
id: e.id,
|
|
1668
1826
|
expected: e.expected,
|
|
1669
1827
|
actual: e.current
|
|
1670
1828
|
});
|
|
1671
|
-
},
|
|
1672
|
-
id:
|
|
1673
|
-
fields: { expiresAt:
|
|
1829
|
+
}, Eo = 1, Do = "voltro/expires", Oo = () => ot({
|
|
1830
|
+
id: Do,
|
|
1831
|
+
fields: { expiresAt: C().nullable() },
|
|
1674
1832
|
behaviors: { defaultWhere: () => "expiresAt IS NULL OR expiresAt > now()" }
|
|
1675
|
-
}),
|
|
1676
|
-
id:
|
|
1833
|
+
}), ko = "voltro/localFirst", Ao = () => ot({
|
|
1834
|
+
id: ko,
|
|
1677
1835
|
fields: {}
|
|
1678
|
-
}),
|
|
1836
|
+
}), jo = (e) => e.appliedMixins.some((e) => e.id === ko), Mo = (e) => {
|
|
1679
1837
|
let t = [];
|
|
1680
|
-
for (let n of Object.values(e))
|
|
1838
|
+
for (let n of Object.values(e)) jo(n) && t.push(n.tableName);
|
|
1681
1839
|
return t;
|
|
1682
|
-
},
|
|
1683
|
-
let i =
|
|
1840
|
+
}, No = class extends Et.TaggedError("TableStreamError") {}, Po = 1e3, Fo = (e, t, n, r) => {
|
|
1841
|
+
let i = k.match(r, {
|
|
1684
1842
|
onNone: () => e.where,
|
|
1685
|
-
onSome: (n) => e.where ?
|
|
1843
|
+
onSome: (n) => e.where ? ia(e.where, Ui(t, n)) : Ui(t, n)
|
|
1686
1844
|
});
|
|
1687
1845
|
return {
|
|
1688
1846
|
table: e.table,
|
|
@@ -1697,19 +1855,19 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1697
1855
|
...e.includeDeleted === void 0 ? {} : { includeDeleted: e.includeDeleted },
|
|
1698
1856
|
...e.crossTenant === void 0 ? {} : { crossTenant: e.crossTenant }
|
|
1699
1857
|
};
|
|
1700
|
-
},
|
|
1701
|
-
let n = t.pk ?? "id", r = t.chunkSize ??
|
|
1702
|
-
return
|
|
1703
|
-
let a =
|
|
1704
|
-
try: () => e.query(
|
|
1705
|
-
catch: (e) => new
|
|
1858
|
+
}, Io = (e, t) => {
|
|
1859
|
+
let n = t.pk ?? "id", r = t.chunkSize ?? Po;
|
|
1860
|
+
return jt.paginateChunkEffect(k.none(), (i) => {
|
|
1861
|
+
let a = D.tryPromise({
|
|
1862
|
+
try: () => e.query(Fo(t, n, r, i)),
|
|
1863
|
+
catch: (e) => new No({
|
|
1706
1864
|
table: t.table,
|
|
1707
1865
|
cause: e
|
|
1708
1866
|
})
|
|
1709
1867
|
});
|
|
1710
|
-
return (t.retry ? a.pipe(
|
|
1868
|
+
return (t.retry ? a.pipe(D.retry(t.retry)) : a).pipe(D.map((e) => [Tt.fromIterable(e), e.length === r && e.length > 0 ? k.some(k.some(e[e.length - 1][n])) : k.none()]));
|
|
1711
1869
|
});
|
|
1712
|
-
},
|
|
1870
|
+
}, Lo = (e) => {
|
|
1713
1871
|
let t = e.alpha ?? .5;
|
|
1714
1872
|
if (t < 0 || t > 1) throw Error(`hybridSearch: alpha must be in [0, 1], got ${t}`);
|
|
1715
1873
|
return (n) => {
|
|
@@ -1736,17 +1894,17 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1736
1894
|
}
|
|
1737
1895
|
};
|
|
1738
1896
|
};
|
|
1739
|
-
},
|
|
1897
|
+
}, Ro = async (e, t) => {
|
|
1740
1898
|
let n = e.as ?? "embedding", r = t.row[e.from];
|
|
1741
1899
|
if (typeof r != "string" || r.length === 0) return {};
|
|
1742
1900
|
let i = await t.embed(r);
|
|
1743
1901
|
return { [n]: i };
|
|
1744
|
-
},
|
|
1902
|
+
}, zo = (e) => {
|
|
1745
1903
|
if (!Number.isInteger(e.dimensions) || e.dimensions <= 0) throw Error(`vectorEmbedding: dimensions must be a positive integer, got ${String(e.dimensions)}.`);
|
|
1746
|
-
let t = e.as ?? "embedding", n = (t) =>
|
|
1747
|
-
return
|
|
1904
|
+
let t = e.as ?? "embedding", n = (t) => Ro(e, t);
|
|
1905
|
+
return ot({
|
|
1748
1906
|
id: "voltro/vectorEmbedding",
|
|
1749
|
-
fields: { [t]:
|
|
1907
|
+
fields: { [t]: we(e.dimensions) },
|
|
1750
1908
|
...e.index === !1 ? {} : { indexes: [{
|
|
1751
1909
|
fields: [t],
|
|
1752
1910
|
kind: "hnsw",
|
|
@@ -1761,19 +1919,19 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1761
1919
|
beforeUpdate: n
|
|
1762
1920
|
}
|
|
1763
1921
|
});
|
|
1764
|
-
},
|
|
1922
|
+
}, Bo = 63, Vo = "br_pr", J = class extends Error {
|
|
1765
1923
|
_tag = "BranchNameInvalid";
|
|
1766
1924
|
constructor(e) {
|
|
1767
1925
|
super(e), this.name = "BranchNameInvalid";
|
|
1768
1926
|
}
|
|
1769
|
-
},
|
|
1927
|
+
}, Ho = (e, t) => {
|
|
1770
1928
|
if (!Number.isInteger(t) || t < 0) throw new J(`prNumber must be a non-negative integer, got ${String(t)}`);
|
|
1771
|
-
let n =
|
|
1929
|
+
let n = hr(e);
|
|
1772
1930
|
if (n.replace(/_/g, "") === "") throw new J(`app slug '${e}' has no usable identifier characters`);
|
|
1773
|
-
let r = `${
|
|
1774
|
-
if (r.length >
|
|
1931
|
+
let r = `${Vo}${t}_${n}`;
|
|
1932
|
+
if (r.length > Bo) throw new J(`branch namespace '${r}' exceeds the ${Bo}-byte identifier limit — use a shorter app slug`);
|
|
1775
1933
|
return r;
|
|
1776
|
-
},
|
|
1934
|
+
}, Uo = (e) => e.startsWith(Vo), Wo = {
|
|
1777
1935
|
requested: {
|
|
1778
1936
|
provision: "provisioning",
|
|
1779
1937
|
destroy: "destroying"
|
|
@@ -1792,18 +1950,18 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1792
1950
|
fail: "failed"
|
|
1793
1951
|
},
|
|
1794
1952
|
destroyed: {}
|
|
1795
|
-
},
|
|
1953
|
+
}, Go = class extends Error {
|
|
1796
1954
|
from;
|
|
1797
1955
|
event;
|
|
1798
1956
|
_tag = "BranchTransitionInvalid";
|
|
1799
1957
|
constructor(e, t) {
|
|
1800
1958
|
super(`invalid branch transition: ${e} --${t}-->`), this.from = e, this.event = t, this.name = "BranchTransitionInvalid";
|
|
1801
1959
|
}
|
|
1802
|
-
},
|
|
1803
|
-
let n =
|
|
1804
|
-
if (n === void 0) throw new
|
|
1960
|
+
}, Ko = (e, t) => {
|
|
1961
|
+
let n = Wo[e][t];
|
|
1962
|
+
if (n === void 0) throw new Go(e, t);
|
|
1805
1963
|
return n;
|
|
1806
|
-
},
|
|
1964
|
+
}, qo = (e, t, n, r, i = [], a = []) => {
|
|
1807
1965
|
if (n === "copy" && (r === void 0 || r === "")) throw new J("seed 'copy' requires a parentNamespace to snapshot from");
|
|
1808
1966
|
let o = [{
|
|
1809
1967
|
kind: "create-namespace",
|
|
@@ -1833,13 +1991,13 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1833
1991
|
kind: "seed",
|
|
1834
1992
|
detail: `run boot seeds into ${e}`
|
|
1835
1993
|
}), o;
|
|
1836
|
-
},
|
|
1837
|
-
if (!
|
|
1994
|
+
}, Jo = (e) => {
|
|
1995
|
+
if (!Uo(e)) throw new J(`refusing to plan teardown of '${e}' — not a branch namespace`);
|
|
1838
1996
|
return [{
|
|
1839
1997
|
kind: "drop-namespace",
|
|
1840
1998
|
detail: e
|
|
1841
1999
|
}];
|
|
1842
|
-
},
|
|
2000
|
+
}, Yo = (e) => {
|
|
1843
2001
|
if (e === void 0 || e === "") return !1;
|
|
1844
2002
|
try {
|
|
1845
2003
|
let t = new URL(e).hostname.toLowerCase();
|
|
@@ -1847,27 +2005,27 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1847
2005
|
} catch {
|
|
1848
2006
|
return /\bneon\.(tech|build)\b/i.test(e);
|
|
1849
2007
|
}
|
|
1850
|
-
},
|
|
2008
|
+
}, Xo = (e) => e.prefer === void 0 ? e.seed === "copy" && Yo(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, Zo = (e, t = {}) => [{
|
|
1851
2009
|
kind: "neon-branch-create",
|
|
1852
2010
|
detail: `${t.parentBranch ?? "main"} → ${e} (copy-on-write)`
|
|
1853
|
-
}],
|
|
1854
|
-
if (!
|
|
2011
|
+
}], Qo = (e) => {
|
|
2012
|
+
if (!Uo(e)) throw new J(`refusing to plan teardown of '${e}' — not a branch namespace`);
|
|
1855
2013
|
return [{
|
|
1856
2014
|
kind: "neon-branch-delete",
|
|
1857
2015
|
detail: e
|
|
1858
2016
|
}];
|
|
1859
|
-
},
|
|
2017
|
+
}, $o = (e) => e.mechanism === "neon-cow" ? Zo(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : qo(e.branchId, e.tableNames, e.seed, e.parentNamespace, e.foreignKeys, e.indexNames), es = (e, t) => e === "neon-cow" ? Qo(t) : Jo(t), ts = (e, t, n) => {
|
|
1860
2018
|
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);
|
|
1861
2019
|
return {
|
|
1862
2020
|
evict: i,
|
|
1863
2021
|
rejectNew: r.filter((e) => !a.has(e.namespace)).length >= t.maxBranches
|
|
1864
2022
|
};
|
|
1865
|
-
},
|
|
1866
|
-
let n =
|
|
2023
|
+
}, ns = async (e, t) => {
|
|
2024
|
+
let n = Ho(e.appSlug, e.prNumber), r = Xo({
|
|
1867
2025
|
seed: e.seed,
|
|
1868
2026
|
...e.dbUrl === void 0 ? {} : { dbUrl: e.dbUrl },
|
|
1869
2027
|
...e.prefer === void 0 ? {} : { prefer: e.prefer }
|
|
1870
|
-
}), i =
|
|
2028
|
+
}), i = $o({
|
|
1871
2029
|
mechanism: r,
|
|
1872
2030
|
branchId: n,
|
|
1873
2031
|
tableNames: e.tableNames,
|
|
@@ -1896,15 +2054,15 @@ var Nt = (e) => typeof e == "string" && e !== "" ? e : null, Pt = async (e, t, n
|
|
|
1896
2054
|
mechanism: r,
|
|
1897
2055
|
steps: i
|
|
1898
2056
|
};
|
|
1899
|
-
},
|
|
1900
|
-
let r =
|
|
2057
|
+
}, rs = async (e, t, n) => {
|
|
2058
|
+
let r = es(t, e);
|
|
1901
2059
|
return t === "neon-cow" ? await n.neonBranchDelete(e) : await n.dropNamespace(e), r;
|
|
1902
|
-
},
|
|
2060
|
+
}, is = (e, t, n) => ts(e, t, n), Y = (e) => `"${e.replace(/"/g, "\"\"")}"`, as = {
|
|
1903
2061
|
cascade: "CASCADE",
|
|
1904
2062
|
restrict: "RESTRICT",
|
|
1905
2063
|
setNull: "SET NULL",
|
|
1906
2064
|
noAction: "NO ACTION"
|
|
1907
|
-
}, X = (e) => `'${e.replace(/'/g, "''")}'`,
|
|
2065
|
+
}, X = (e) => `'${e.replace(/'/g, "''")}'`, os = (e, t) => {
|
|
1908
2066
|
let n = t.columns.map(X).join(", ");
|
|
1909
2067
|
return `DO $voltro_branch$
|
|
1910
2068
|
DECLARE derived name;
|
|
@@ -1931,10 +2089,10 @@ BEGIN
|
|
|
1931
2089
|
END IF;
|
|
1932
2090
|
END
|
|
1933
2091
|
$voltro_branch$`;
|
|
1934
|
-
},
|
|
1935
|
-
let n = t.onDelete === void 0 ? "" : ` ON DELETE ${
|
|
2092
|
+
}, ss = (e, t) => {
|
|
2093
|
+
let n = t.onDelete === void 0 ? "" : ` ON DELETE ${as[t.onDelete]}`, r = t.onUpdate === void 0 ? "" : ` ON UPDATE ${as[t.onUpdate]}`;
|
|
1936
2094
|
return `ALTER TABLE ${Y(e)}.${Y(t.table)} ADD FOREIGN KEY (${Y(t.column)}) REFERENCES ${Y(e)}.${Y(t.targetTable)} (${Y(t.targetColumn)})${n}${r}`;
|
|
1937
|
-
},
|
|
2095
|
+
}, cs = (e) => {
|
|
1938
2096
|
let t = () => {
|
|
1939
2097
|
throw Error("namespace branch executor: Neon ops require a neon-cow executor (use a Neon connection for copy-on-write branches)");
|
|
1940
2098
|
};
|
|
@@ -1942,24 +2100,24 @@ $voltro_branch$`;
|
|
|
1942
2100
|
createNamespace: (t) => e.run(`CREATE SCHEMA IF NOT EXISTS ${Y(t)}`),
|
|
1943
2101
|
createTable: (t, n) => e.run(`CREATE TABLE IF NOT EXISTS ${Y(t)}.${Y(n)} (LIKE ${Y(n)} INCLUDING ALL)`),
|
|
1944
2102
|
copyTable: (t, n, r) => e.run(`INSERT INTO ${Y(n)}.${Y(r)} SELECT * FROM ${Y(t)}.${Y(r)}`),
|
|
1945
|
-
addForeignKey: (t, n) => e.run(
|
|
1946
|
-
restoreIndexName: (t, n) => e.run(
|
|
2103
|
+
addForeignKey: (t, n) => e.run(ss(t, n)),
|
|
2104
|
+
restoreIndexName: (t, n) => e.run(os(t, n)),
|
|
1947
2105
|
dropNamespace: (t) => e.run(`DROP SCHEMA IF EXISTS ${Y(t)} CASCADE`),
|
|
1948
2106
|
neonBranchCreate: t,
|
|
1949
2107
|
neonBranchDelete: t
|
|
1950
2108
|
};
|
|
1951
|
-
},
|
|
2109
|
+
}, ls = class extends Error {
|
|
1952
2110
|
_tag = "TenantResidencyUnresolved";
|
|
1953
2111
|
constructor(e) {
|
|
1954
2112
|
super(e), this.name = "TenantResidencyUnresolved";
|
|
1955
2113
|
}
|
|
1956
|
-
},
|
|
2114
|
+
}, us = class extends Error {
|
|
1957
2115
|
region;
|
|
1958
2116
|
_tag = "TenantRegionUnavailable";
|
|
1959
2117
|
constructor(e, t) {
|
|
1960
2118
|
super(t), this.region = e, this.name = "TenantRegionUnavailable";
|
|
1961
2119
|
}
|
|
1962
|
-
},
|
|
2120
|
+
}, ds, fs = (e) => {
|
|
1963
2121
|
if (e.homes === void 0) throw Error("setResidencyConfig: `homes` is required");
|
|
1964
2122
|
if (e.servableRegions === void 0 || e.servableRegions.length === 0) throw Error("setResidencyConfig: `servableRegions` must be non-empty (which regions this deployment serves)");
|
|
1965
2123
|
let t = /* @__PURE__ */ new Map();
|
|
@@ -1968,32 +2126,32 @@ $voltro_branch$`;
|
|
|
1968
2126
|
if (e !== void 0 && e !== n.region) throw Error(`residency: tenant '${n.tenantId}' is mapped to two regions ('${e}' and '${n.region}')`);
|
|
1969
2127
|
t.set(n.tenantId, n.region);
|
|
1970
2128
|
}
|
|
1971
|
-
return
|
|
1972
|
-
},
|
|
1973
|
-
|
|
1974
|
-
},
|
|
1975
|
-
if (e == null || e === "") throw new
|
|
2129
|
+
return ds = e, e;
|
|
2130
|
+
}, ps = () => ds, ms = () => {
|
|
2131
|
+
ds = void 0;
|
|
2132
|
+
}, hs = (e, t) => {
|
|
2133
|
+
if (e == null || e === "") throw new ls("residency is on but the request has no resolvable tenant — refusing to bind a store");
|
|
1976
2134
|
let n = t.homes.find((t) => t.tenantId === e);
|
|
1977
|
-
if (n === void 0) throw new
|
|
2135
|
+
if (n === void 0) throw new ls(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
|
|
1978
2136
|
return n;
|
|
1979
|
-
},
|
|
1980
|
-
let n =
|
|
2137
|
+
}, gs = (e, t) => t.servableRegions.includes(e), _s = (e, t) => {
|
|
2138
|
+
let n = hs(e.tenantId, t), r = gr(n.tenantId);
|
|
1981
2139
|
return {
|
|
1982
2140
|
region: n.region,
|
|
1983
2141
|
namespace: r,
|
|
1984
2142
|
...n.connectionKey === void 0 ? {} : { connectionKey: n.connectionKey }
|
|
1985
2143
|
};
|
|
1986
|
-
},
|
|
1987
|
-
let r =
|
|
1988
|
-
if (!
|
|
2144
|
+
}, vs = (e, t, n) => {
|
|
2145
|
+
let r = _s(e, t);
|
|
2146
|
+
if (!gs(r.region, t)) throw new us(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
|
|
1989
2147
|
let i = n.get(r.region);
|
|
1990
|
-
if (i === void 0) throw new
|
|
2148
|
+
if (i === void 0) throw new us(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
|
|
1991
2149
|
return {
|
|
1992
2150
|
store: i,
|
|
1993
2151
|
placement: r
|
|
1994
2152
|
};
|
|
1995
|
-
},
|
|
1996
|
-
let { store: i, placement: a } =
|
|
2153
|
+
}, ys = async (e, t, n, r) => {
|
|
2154
|
+
let { store: i, placement: a } = vs(e, t, n);
|
|
1997
2155
|
return await r(i, a), a;
|
|
1998
2156
|
}, Z = (e) => {
|
|
1999
2157
|
if (typeof e == "string") return e;
|
|
@@ -2002,21 +2160,21 @@ $voltro_branch$`;
|
|
|
2002
2160
|
return `(json:${t}->${n.join(".")}${r ? "::num" : ""})`;
|
|
2003
2161
|
}
|
|
2004
2162
|
return `(${e.expr})`;
|
|
2005
|
-
}, Q = (e) => e.map(Z),
|
|
2163
|
+
}, Q = (e) => e.map(Z), bs = (e, t) => {
|
|
2006
2164
|
if (e.length !== t.length) return !1;
|
|
2007
2165
|
for (let n = 0; n < e.length; n++) if (Z(e[n]) !== Z(t[n])) return !1;
|
|
2008
2166
|
return !0;
|
|
2009
|
-
},
|
|
2167
|
+
}, xs = (e, t) => {
|
|
2010
2168
|
if (e.length >= t.length) return !1;
|
|
2011
2169
|
for (let n = 0; n < e.length; n++) if (Z(e[n]) !== Z(t[n])) return !1;
|
|
2012
2170
|
return !0;
|
|
2013
|
-
},
|
|
2171
|
+
}, Ss = (e) => {
|
|
2014
2172
|
let t = [], n = e.appliedIndexes, r = e.tableName;
|
|
2015
2173
|
for (let e = 0; e < n.length; e++) {
|
|
2016
2174
|
let i = n[e];
|
|
2017
2175
|
for (let a = e + 1; a < n.length; a++) {
|
|
2018
2176
|
let e = n[a];
|
|
2019
|
-
if (
|
|
2177
|
+
if (bs(i.fields, e.fields)) {
|
|
2020
2178
|
let [n, a] = i.name < e.name ? [i, e] : [e, i];
|
|
2021
2179
|
t.push({
|
|
2022
2180
|
kind: "duplicate-fields",
|
|
@@ -2027,13 +2185,13 @@ $voltro_branch$`;
|
|
|
2027
2185
|
});
|
|
2028
2186
|
continue;
|
|
2029
2187
|
}
|
|
2030
|
-
|
|
2188
|
+
xs(i.fields, e.fields) ? t.push({
|
|
2031
2189
|
kind: "redundant-prefix",
|
|
2032
2190
|
table: r,
|
|
2033
2191
|
redundant: i,
|
|
2034
2192
|
coveredBy: e,
|
|
2035
2193
|
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).`
|
|
2036
|
-
}) :
|
|
2194
|
+
}) : xs(e.fields, i.fields) && t.push({
|
|
2037
2195
|
kind: "redundant-prefix",
|
|
2038
2196
|
table: r,
|
|
2039
2197
|
redundant: e,
|
|
@@ -2043,23 +2201,23 @@ $voltro_branch$`;
|
|
|
2043
2201
|
}
|
|
2044
2202
|
}
|
|
2045
2203
|
return t;
|
|
2046
|
-
},
|
|
2204
|
+
}, Cs = (e) => {
|
|
2047
2205
|
let t = [];
|
|
2048
|
-
for (let n of e) t.push(...
|
|
2206
|
+
for (let n of e) t.push(...Ss(n));
|
|
2049
2207
|
return t;
|
|
2050
|
-
},
|
|
2051
|
-
let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n,
|
|
2208
|
+
}, ws = "\x1B[", Ts = `${ws}38;2;245;158;11m`, Es = `${ws}38;2;16;185;129m`, Ds = (e, t) => `${e}${t}${j.reset}`, $ = (e, t, n) => e ? typeof t == "function" ? t(n) : Ds(t, n) : n, Os = (e, t = {}) => {
|
|
2209
|
+
let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n, j.dim, e.padEnd(11)), a = (e) => $(n, (e) => j.bold(j.brand(e)), e), o = (e) => $(n, j.brightRed24, e), s = (e) => $(n, Es, e), c = (e) => $(n, Ts, e), l = (e) => $(n, j.dim, e), u = `${c("index audit")} ${l("·")} ${$(n, j.bold, e.kind)}`, d = e.redundant.fields.length, f = Q(e.coveredBy.fields.slice(d)), p = (e, t) => {
|
|
2052
2210
|
let n = e.slice(0, t), r = e.slice(t), i = [];
|
|
2053
2211
|
return n.length > 0 && i.push(s(`[${n.join(", ")}]`)), r.length > 0 && i.push(c(`+ [${r.join(", ")}]`)), i.join(" ");
|
|
2054
2212
|
}, m = [];
|
|
2055
|
-
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,
|
|
2056
|
-
},
|
|
2213
|
+
return m.push(u), m.push(""), m.push(`${i("table")}${a(e.table)}`), m.push(""), m.push(`${i("redundant")}${o(e.redundant.name)}`), m.push(`${i("")}${p(Q(e.redundant.fields), d)}`), m.push(""), m.push(`${i("covered by")}${s(e.coveredBy.name)}`), m.push(`${i("")}${p(Q(e.coveredBy.fields), d)}`), f.length > 0 && m.push(`${i("")}${l(`└ extra columns: ${f.join(", ")}`)}`), m.push(""), e.kind === "redundant-prefix" ? (m.push(`${i("why")}B-tree indexes serve queries that filter on a LEADING PREFIX of`), m.push(`${i("")}their column list. The wider index already covers every`), m.push(`${i("")}query the narrower one can serve.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)) : (m.push(`${i("why")}Two indexes on the same columns under different names.`), m.push(`${i("")}The B-tree engine builds both — same coverage, double cost.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)), m.push(""), m.push(`${i("cost")}Every ${a("INSERT")} / ${a("UPDATE")} / ${a("DELETE")} on this table writes`), m.push(`${i("")}to ${$(n, j.bold, "both")} B-trees. Pure write overhead, zero read benefit.`), m.push(""), m.push(`${i("fix")}Drop ${o(e.redundant.name)}`), m.push(`${i("")}${l("Keep only if profiling shows the smaller index gives a")}`), m.push(`${i("")}${l("measurable cache-locality boost on a write-heavy hot path.")}`), m.push(`${i("")}${l("Silence with VOLTRO_INDEX_AUDIT=off if intentional.")}`), m.map((e) => `${r}${e}`).join("\n");
|
|
2214
|
+
}, ks = (e, { apply: t, undo: n }) => ({
|
|
2057
2215
|
name: e,
|
|
2058
2216
|
apply: t,
|
|
2059
2217
|
undo: n
|
|
2060
|
-
}),
|
|
2218
|
+
}), As = (e) => {
|
|
2061
2219
|
if (!/^\d{14}_/.test(e.id)) throw Error(`migration "${e.id}": id must start with a 14-digit timestamp followed by "_" (convention: <YYYYMMDDHHMMSS>_<slug>)`);
|
|
2062
|
-
let t = e.steps({ step:
|
|
2220
|
+
let t = e.steps({ step: ks });
|
|
2063
2221
|
if (t.length === 0) throw Error(`migration "${e.id}": at least one step is required`);
|
|
2064
2222
|
return {
|
|
2065
2223
|
__migration: !0,
|
|
@@ -2067,99 +2225,99 @@ $voltro_branch$`;
|
|
|
2067
2225
|
name: e.name,
|
|
2068
2226
|
steps: t
|
|
2069
2227
|
};
|
|
2070
|
-
},
|
|
2071
|
-
id:
|
|
2072
|
-
name:
|
|
2073
|
-
hash:
|
|
2074
|
-
status:
|
|
2075
|
-
appliedAt:
|
|
2228
|
+
}, js = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, Ms = E("_voltro_migrations", {
|
|
2229
|
+
id: x({ prefix: "mig" }),
|
|
2230
|
+
name: y(),
|
|
2231
|
+
hash: y(),
|
|
2232
|
+
status: y(),
|
|
2233
|
+
appliedAt: C().nullable(),
|
|
2076
2234
|
durationMs: S().nullable(),
|
|
2077
|
-
errorMessage:
|
|
2078
|
-
errorStack:
|
|
2079
|
-
workflowRunId:
|
|
2080
|
-
createdAt:
|
|
2081
|
-
updatedAt:
|
|
2082
|
-
}).index(["status"]),
|
|
2083
|
-
id:
|
|
2084
|
-
name:
|
|
2085
|
-
lifecycle:
|
|
2086
|
-
fingerprint:
|
|
2087
|
-
cronSchedule:
|
|
2088
|
-
watchedTables:
|
|
2089
|
-
nextRunAt:
|
|
2090
|
-
lastRunStatus:
|
|
2091
|
-
lastRunAt:
|
|
2235
|
+
errorMessage: y().nullable(),
|
|
2236
|
+
errorStack: y().nullable(),
|
|
2237
|
+
workflowRunId: y().nullable(),
|
|
2238
|
+
createdAt: C().default("now"),
|
|
2239
|
+
updatedAt: C().default("now").onUpdate("now")
|
|
2240
|
+
}).index(["status"]), Ns = E("_voltro_seeds", {
|
|
2241
|
+
id: x({ prefix: "seed" }),
|
|
2242
|
+
name: y(),
|
|
2243
|
+
lifecycle: y(),
|
|
2244
|
+
fingerprint: y(),
|
|
2245
|
+
cronSchedule: y().nullable(),
|
|
2246
|
+
watchedTables: i().nullable(),
|
|
2247
|
+
nextRunAt: C().nullable(),
|
|
2248
|
+
lastRunStatus: y().nullable(),
|
|
2249
|
+
lastRunAt: C().nullable(),
|
|
2092
2250
|
lastRunDurationMs: S().nullable(),
|
|
2093
2251
|
lastRunRowsTouched: S().nullable(),
|
|
2094
|
-
lastError:
|
|
2095
|
-
workflowRunId:
|
|
2096
|
-
createdAt:
|
|
2097
|
-
updatedAt:
|
|
2098
|
-
}).index(["lifecycle"]).index(["nextRunAt"]),
|
|
2099
|
-
id:
|
|
2100
|
-
fingerprint:
|
|
2101
|
-
liveFingerprint:
|
|
2102
|
-
operations:
|
|
2103
|
-
rollbackPlan:
|
|
2104
|
-
appliedBy:
|
|
2105
|
-
environment:
|
|
2106
|
-
source:
|
|
2107
|
-
onlineStrategy:
|
|
2252
|
+
lastError: y().nullable(),
|
|
2253
|
+
workflowRunId: y().nullable(),
|
|
2254
|
+
createdAt: C().default("now"),
|
|
2255
|
+
updatedAt: C().default("now").onUpdate("now")
|
|
2256
|
+
}).index(["lifecycle"]).index(["nextRunAt"]), Ps = E("_voltro_migration_plans", {
|
|
2257
|
+
id: x({ prefix: "plan" }),
|
|
2258
|
+
fingerprint: y(),
|
|
2259
|
+
liveFingerprint: y().nullable(),
|
|
2260
|
+
operations: i(),
|
|
2261
|
+
rollbackPlan: i().nullable(),
|
|
2262
|
+
appliedBy: y(),
|
|
2263
|
+
environment: y(),
|
|
2264
|
+
source: y(),
|
|
2265
|
+
onlineStrategy: y().nullable(),
|
|
2108
2266
|
durationMs: S(),
|
|
2109
|
-
notes:
|
|
2110
|
-
squashedAt:
|
|
2111
|
-
appliedAt:
|
|
2112
|
-
createdAt:
|
|
2113
|
-
updatedAt:
|
|
2114
|
-
}).index(["fingerprint"]).index(["environment"]),
|
|
2115
|
-
id:
|
|
2116
|
-
scope:
|
|
2117
|
-
key:
|
|
2118
|
-
status:
|
|
2119
|
-
response:
|
|
2120
|
-
createdAt:
|
|
2121
|
-
}).unique(["scope", "key"]).index(["createdAt"]),
|
|
2122
|
-
id:
|
|
2123
|
-
key:
|
|
2124
|
-
value:
|
|
2125
|
-
expiresAt:
|
|
2126
|
-
createdAt:
|
|
2127
|
-
updatedAt:
|
|
2128
|
-
}).index(["expiresAt"]),
|
|
2129
|
-
id:
|
|
2130
|
-
tenantId:
|
|
2131
|
-
name:
|
|
2132
|
-
hashedKey:
|
|
2133
|
-
keyPrefix:
|
|
2134
|
-
scopes:
|
|
2135
|
-
lastUsedAt:
|
|
2267
|
+
notes: y().nullable(),
|
|
2268
|
+
squashedAt: C().nullable(),
|
|
2269
|
+
appliedAt: C().default("now"),
|
|
2270
|
+
createdAt: C().default("now"),
|
|
2271
|
+
updatedAt: C().default("now").onUpdate("now")
|
|
2272
|
+
}).index(["fingerprint"]).index(["environment"]), Fs = E("_voltro_idempotency", {
|
|
2273
|
+
id: x({ prefix: "idem" }),
|
|
2274
|
+
scope: y(),
|
|
2275
|
+
key: y(),
|
|
2276
|
+
status: y(),
|
|
2277
|
+
response: i().nullable(),
|
|
2278
|
+
createdAt: C().default("now")
|
|
2279
|
+
}).unique(["scope", "key"]).index(["createdAt"]), Is = E("_voltro_kv", {
|
|
2280
|
+
id: x({ prefix: "kv" }),
|
|
2281
|
+
key: y().unique(),
|
|
2282
|
+
value: y().nullable(),
|
|
2283
|
+
expiresAt: C().nullable(),
|
|
2284
|
+
createdAt: C().default("now"),
|
|
2285
|
+
updatedAt: C().default("now").onUpdate("now")
|
|
2286
|
+
}).index(["expiresAt"]), Ls = E("_voltro_api_keys", {
|
|
2287
|
+
id: x({ prefix: "apikey" }),
|
|
2288
|
+
tenantId: y().nullable(),
|
|
2289
|
+
name: y(),
|
|
2290
|
+
hashedKey: y().maxLength(64).unique(),
|
|
2291
|
+
keyPrefix: y(),
|
|
2292
|
+
scopes: i().nullable(),
|
|
2293
|
+
lastUsedAt: C().nullable(),
|
|
2136
2294
|
requestCount: S().default(0),
|
|
2137
|
-
expiresAt:
|
|
2138
|
-
revokedAt:
|
|
2139
|
-
createdBy:
|
|
2140
|
-
onBehalfOf:
|
|
2141
|
-
metadata:
|
|
2142
|
-
createdAt:
|
|
2143
|
-
}).index("byApiKeyTenant", ["tenantId"]),
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
],
|
|
2295
|
+
expiresAt: C().nullable(),
|
|
2296
|
+
revokedAt: C().nullable(),
|
|
2297
|
+
createdBy: y().nullable(),
|
|
2298
|
+
onBehalfOf: y().nullable(),
|
|
2299
|
+
metadata: i().nullable(),
|
|
2300
|
+
createdAt: C().default("now")
|
|
2301
|
+
}).index("byApiKeyTenant", ["tenantId"]), Rs = [
|
|
2302
|
+
Ms,
|
|
2303
|
+
Ns,
|
|
2304
|
+
Ps
|
|
2305
|
+
], zs = "id", Bs = (e, t) => {
|
|
2148
2306
|
let n = p(e);
|
|
2149
2307
|
if (n === void 0) return t;
|
|
2150
|
-
let r = n.fields[
|
|
2151
|
-
if (r === void 0 || t[
|
|
2308
|
+
let r = n.fields[zs]?.idScheme;
|
|
2309
|
+
if (r === void 0 || t[zs] != null) return t;
|
|
2152
2310
|
if (r.kind === "numeric") {
|
|
2153
|
-
if (!(
|
|
2311
|
+
if (!(zs in t)) return t;
|
|
2154
2312
|
let e = { ...t };
|
|
2155
|
-
return delete e[
|
|
2313
|
+
return delete e[zs], e;
|
|
2156
2314
|
}
|
|
2157
|
-
let i =
|
|
2315
|
+
let i = ct(r, e);
|
|
2158
2316
|
return i === null ? t : {
|
|
2159
2317
|
...t,
|
|
2160
|
-
[
|
|
2318
|
+
[zs]: i
|
|
2161
2319
|
};
|
|
2162
|
-
},
|
|
2320
|
+
}, Vs = (e, t) => t.map((t) => Bs(e, t)), Hs = {
|
|
2163
2321
|
postgres: { maxBindParameters: 65535 },
|
|
2164
2322
|
mysql: { maxBindParameters: 65535 },
|
|
2165
2323
|
mariadb: { maxBindParameters: 65535 },
|
|
@@ -2169,49 +2327,49 @@ $voltro_branch$`;
|
|
|
2169
2327
|
},
|
|
2170
2328
|
sqlite: { maxBindParameters: 32766 },
|
|
2171
2329
|
turso: { maxBindParameters: 32766 }
|
|
2172
|
-
},
|
|
2330
|
+
}, Us = (e) => Hs[e], Ws = (e) => {
|
|
2173
2331
|
let t = /* @__PURE__ */ new Set();
|
|
2174
2332
|
for (let n of e) for (let e of Object.keys(n)) t.add(e);
|
|
2175
2333
|
return t.size;
|
|
2176
|
-
},
|
|
2334
|
+
}, Gs = (e, t) => {
|
|
2177
2335
|
if (t === void 0 || e.length === 0) return [e];
|
|
2178
|
-
let n = Math.max(1,
|
|
2336
|
+
let n = Math.max(1, Ws(e)), r = Math.floor(t.maxBindParameters / n), i = t.maxRowsPerStatement ?? Infinity, a = Math.max(1, Math.min(r, i));
|
|
2179
2337
|
if (e.length <= a) return [e];
|
|
2180
2338
|
let o = [];
|
|
2181
2339
|
for (let t = 0; t < e.length; t += a) o.push(e.slice(t, t + a));
|
|
2182
2340
|
return o;
|
|
2183
|
-
},
|
|
2341
|
+
}, Ks = (e, t) => {
|
|
2184
2342
|
let n = [], r = t;
|
|
2185
2343
|
for (let [t, i] of Object.entries(e.fields)) {
|
|
2186
2344
|
let e = i;
|
|
2187
2345
|
e.nullable || e.hasDefault || e.idScheme !== void 0 || e.generatedAs !== void 0 || (r[t] === void 0 || r[t] === null) && n.push(t);
|
|
2188
2346
|
}
|
|
2189
2347
|
return n;
|
|
2190
|
-
},
|
|
2348
|
+
}, qs = (e, t) => {
|
|
2191
2349
|
let n = t;
|
|
2192
2350
|
return e.filter((e) => n[e] === void 0 || n[e] === null);
|
|
2193
|
-
},
|
|
2351
|
+
}, Js = (e, t, n) => e.insert(t.tableName, n), Ys = (e, t, n, r) => e.upsert(t.tableName, n, {
|
|
2194
2352
|
conflictColumns: r.conflictColumns,
|
|
2195
2353
|
...r.update === void 0 ? {} : { update: r.update }
|
|
2196
|
-
}),
|
|
2354
|
+
}), Xs = (e, t, n, r) => e.updateMany(t.tableName, n, { where: r.where }), Zs = 512, Qs = (e) => {
|
|
2197
2355
|
e.setMaxListeners(512);
|
|
2198
|
-
},
|
|
2356
|
+
}, $s = (e, t, n) => ({
|
|
2199
2357
|
_tag: "PrimaryKeyConflictError",
|
|
2200
2358
|
table: e,
|
|
2201
2359
|
key: t,
|
|
2202
2360
|
cause: n
|
|
2203
|
-
}),
|
|
2361
|
+
}), ec = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", tc = {
|
|
2204
2362
|
postgres: 5432,
|
|
2205
2363
|
mysql: 3306,
|
|
2206
2364
|
mariadb: 3306,
|
|
2207
2365
|
mssql: 1433
|
|
2208
|
-
},
|
|
2366
|
+
}, nc = /* @__PURE__ */ new Set([
|
|
2209
2367
|
"localhost",
|
|
2210
2368
|
"127.0.0.1",
|
|
2211
2369
|
"::1",
|
|
2212
2370
|
"[::1]",
|
|
2213
2371
|
"0.0.0.0"
|
|
2214
|
-
]),
|
|
2372
|
+
]), rc = (e) => {
|
|
2215
2373
|
let t = e.host, n = e.port, r = e.database;
|
|
2216
2374
|
if (e.url !== void 0 && e.url !== "") try {
|
|
2217
2375
|
let i = new URL(e.url);
|
|
@@ -2220,29 +2378,29 @@ $voltro_branch$`;
|
|
|
2220
2378
|
return;
|
|
2221
2379
|
}
|
|
2222
2380
|
if (t === void 0 || t === "" || r === void 0 || r === "") return;
|
|
2223
|
-
let i = n ??
|
|
2381
|
+
let i = n ?? tc[(e.dialect ?? "").toLowerCase()];
|
|
2224
2382
|
if (i === void 0 || !Number.isFinite(i)) return;
|
|
2225
2383
|
let a = t.toLowerCase();
|
|
2226
2384
|
return {
|
|
2227
|
-
host:
|
|
2385
|
+
host: nc.has(a) ? "localhost" : a,
|
|
2228
2386
|
port: i,
|
|
2229
2387
|
database: r.toLowerCase()
|
|
2230
2388
|
};
|
|
2231
|
-
},
|
|
2232
|
-
let t =
|
|
2233
|
-
if (t !== void 0) return
|
|
2234
|
-
},
|
|
2389
|
+
}, ic = (e) => {
|
|
2390
|
+
let t = rc(e);
|
|
2391
|
+
if (t !== void 0) return Ft("sha256").update(`${t.host}\u0000${t.port}\u0000${t.database}`).digest("hex").slice(0, 32);
|
|
2392
|
+
}, ac = (e, t) => e === void 0 || t === void 0 ? "unknown" : e === t ? "same" : "different", oc = {
|
|
2235
2393
|
app: 3,
|
|
2236
2394
|
plugin: 2,
|
|
2237
2395
|
framework: 1
|
|
2238
|
-
},
|
|
2396
|
+
}, sc = /* @__PURE__ */ new Map(), cc = [], lc = () => [...cc], uc = (e) => {
|
|
2239
2397
|
if (!e.table || !e.timeColumn) throw Error("registerRetention: table + timeColumn are required");
|
|
2240
2398
|
if (!Number.isFinite(e.ttlMs) || e.ttlMs <= 0) throw Error(`registerRetention(${e.table}): ttlMs must be a positive number`);
|
|
2241
|
-
let t = e.source ?? "app", n =
|
|
2399
|
+
let t = e.source ?? "app", n = sc.get(e.table);
|
|
2242
2400
|
if (n !== void 0) {
|
|
2243
2401
|
let r = n.source ?? "app", i = n.ttlMs !== e.ttlMs || n.where !== void 0 != (e.where !== void 0);
|
|
2244
|
-
if (
|
|
2245
|
-
i &&
|
|
2402
|
+
if (oc[t] < oc[r]) {
|
|
2403
|
+
i && cc.push({
|
|
2246
2404
|
table: e.table,
|
|
2247
2405
|
kept: {
|
|
2248
2406
|
source: r,
|
|
@@ -2255,7 +2413,7 @@ $voltro_branch$`;
|
|
|
2255
2413
|
});
|
|
2256
2414
|
return;
|
|
2257
2415
|
}
|
|
2258
|
-
i && r !== t &&
|
|
2416
|
+
i && r !== t && cc.push({
|
|
2259
2417
|
table: e.table,
|
|
2260
2418
|
kept: {
|
|
2261
2419
|
source: t,
|
|
@@ -2267,35 +2425,35 @@ $voltro_branch$`;
|
|
|
2267
2425
|
}
|
|
2268
2426
|
});
|
|
2269
2427
|
}
|
|
2270
|
-
|
|
2428
|
+
sc.set(e.table, {
|
|
2271
2429
|
...e,
|
|
2272
2430
|
source: t
|
|
2273
2431
|
});
|
|
2274
|
-
},
|
|
2275
|
-
|
|
2276
|
-
},
|
|
2432
|
+
}, dc = () => [...sc.values()], fc = () => {
|
|
2433
|
+
sc.clear(), cc.length = 0;
|
|
2434
|
+
}, pc = async (e, t, n, r = 2e4) => {
|
|
2277
2435
|
let i = new Date(t - e.ttlMs), a = 0;
|
|
2278
2436
|
for (;;) {
|
|
2279
2437
|
let t = await n(e.table, e.timeColumn, i, r, e.where);
|
|
2280
2438
|
if (a += t, t < r) break;
|
|
2281
2439
|
}
|
|
2282
2440
|
return a;
|
|
2283
|
-
},
|
|
2441
|
+
}, mc = (e, t) => {
|
|
2284
2442
|
let n = Number(e ?? String(t));
|
|
2285
2443
|
return (Number.isFinite(n) && n > 0 ? n : t) * 36e5;
|
|
2286
|
-
},
|
|
2287
|
-
id:
|
|
2288
|
-
replicaId:
|
|
2289
|
-
streamName:
|
|
2290
|
-
binlogFile:
|
|
2291
|
-
binlogPosition:
|
|
2292
|
-
updatedAt:
|
|
2293
|
-
}).index(["replicaId"]),
|
|
2294
|
-
id:
|
|
2295
|
-
replicaId:
|
|
2296
|
-
streamName:
|
|
2297
|
-
ctVersion:
|
|
2298
|
-
updatedAt:
|
|
2299
|
-
}).index(["replicaId"]),
|
|
2444
|
+
}, hc = "_voltro_cdc_offsets", gc = E(hc, {
|
|
2445
|
+
id: x({ prefix: "cdcoff" }),
|
|
2446
|
+
replicaId: y(),
|
|
2447
|
+
streamName: y(),
|
|
2448
|
+
binlogFile: y(),
|
|
2449
|
+
binlogPosition: y(),
|
|
2450
|
+
updatedAt: C()
|
|
2451
|
+
}).index(["replicaId"]), _c = E(hc, {
|
|
2452
|
+
id: x({ prefix: "cdcoff" }),
|
|
2453
|
+
replicaId: y(),
|
|
2454
|
+
streamName: y(),
|
|
2455
|
+
ctVersion: y(),
|
|
2456
|
+
updatedAt: C()
|
|
2457
|
+
}).index(["replicaId"]), vc = "postgres";
|
|
2300
2458
|
//#endregion
|
|
2301
|
-
export {
|
|
2459
|
+
export { e as AUTO_FILLED_COLUMNS, Hs as BULK_INSERT_LIMITS, J as BranchNameInvalid, Go as BranchTransitionInvalid, hc as CDC_OFFSETS_TABLE, Zs as CHANGE_LISTENER_CEILING, ht as ColumnBuilder, Te as DEFAULT_ACQUIRE_TIMEOUT_MS, po as DEFAULT_EAGER_FALLBACK_WARN_INTERVAL_MS, Fn as DEFAULT_SUBJECT_GRAPH_DEPTH, Ht as ENCRYPTED_PREFIX, vc as ENGINE, Qn as EagerCardinalityError, We as FILE_MIGRATION_PATTERN, lt as FRAMEWORK_LIVE_TABLES, Ut as FieldDecryptionError, Eo as INITIAL_VERSION, ea as MATCHES_NO_ROWS, Ie as MAX_IDENTIFIER_LENGTH, Pt as SqlClient, No as TableStreamError, fr as TenantNamespaceInvalid, dr as TenantNamespaceUnresolved, us as TenantRegionUnavailable, ls as TenantResidencyUnresolved, Do as VOLTRO_EXPIRES_MIXIN_ID, ko as VOLTRO_LOCAL_FIRST_MIXIN_ID, So as VersionConflict, ze as WARN_IDENTIFIER_LENGTH, Ls as _voltroApiKeysTable, gc as _voltroCdcOffsetsTable, Fs as _voltroIdempotencyTable, Is as _voltroKvTable, Ps as _voltroMigrationPlansTable, Ms as _voltroMigrationsTable, _c as _voltroMssqlCdcOffsetsTable, Ns as _voltroSeedsTable, Bi as actorsTable, is as admitBranch, pt as allEnumRenames, Mn as allRegisteredRelations, h as allRegisteredTables, ia as and, ge as array, Zi as arrayContains, $i as arrayHas, Qi as arrayOverlaps, er as attachEagerLoads, Ea as attributionFields, Aa as attributionKey, Cs as auditAllTableIndexes, Ss as auditTableIndexes, ft as avg, vt as avgOver, Ra as beginLocalWrite, u as bigint, vs as bindResidentStore, c as boolean, Ho as branchNamespaceName, Us as bulkInsertLimitsFor, ce as bytes, xa as changeDelete, ya as changeInsert, Sa as changeSoftDelete, ba as changeUpdate, Gs as chunkRowsForInsert, Na as claimPendingAttribution, an as classifyConstraintViolation, yt as clearEnumRenames, Va as clearPendingAttribution, Pn as clearRelationsRegistry, ms as clearResidencyConfig, fc as clearRetentions, _e as clearTableRegistry, Ga as clearWriteRecorders, br as coercePredicateValue, xr as coercePredicateValues, ga as collectSubqueries, je as column, cn as columnSchema, Ws as columnsPerRow, Fr as compileEagerJson, F as compilePredicate, Sr as compileRawFragment, Pr as compileSelect, Ro as computeEmbedding, ic as connectionIdentity, Yi as contains, gt as count, pe as countDistinct, Je as crdtManagedColumns, n as crdtText, Ta as currentWriteAttribution, a as databaseHandle, Ke as date, ie as dbEnum, oo as dbMetricTagCacheSizeForTests, lo as dbOperationsInFlight, oe as decimal, Me as declareEnumRename, Jt as decodeFieldValue, Yn as decodeRowsFromSchema, $t as decryptFieldsOnRead, As as defineMigration, ot as defineMixin, st as defineSeed, mt as denseRank, Hn as deriveSubjectGraph, nt as deriveTypeIdPrefix, Vt as deserializeArraysOnRead, rt as drainIdentifierWarnings, ue as dropped, Kt as encodeFieldValue, Zn as encodeRowForSchema, Qt as encryptFieldsForWrite, Zt as encryptedColumnsOf, za as endLocalWrite, ts as enforceBranchLimits, xe as ensureTableRegistered, Vi as eq, Cr as escapeLike, ha as evaluatePredicate, he as except, da as exists, Oo as expires, va as externalChangeEvent, tn as extractDbCause, Ne as fireSchemaChangeSeeds, Ye as fireTenantCreateSeeds, Os as formatIndexAuditIssue, Un as formatSubjectGraph, Rs as frameworkTables, ct as generateId, Xe as generateSnowflake, f as geography, ee as geometry, _t as getEnumRenames, jn as getRelation, An as getRelations, ps as getResidencyConfig, p as getTable, Ui as gt, Wi as gte, ur as hasEagerLoads, Lo as hybridSearch, x as id, qi as inSet, la as inSubquery, xn as inferForeignKey, Js as insertRow, S as integer, l as intersect, xt as interval, Uo as isBranchNamespace, gn as isEmptyRelationsSpec, Gt as isEncrypted, Wt as isFieldDecryptionError, ke as isFileMigration, on as isForeignKeyViolation, $e as isFrameworkOwnedLiveTable, jo as isLocalFirst, js as isMigrationDefinition, Ce as isMysqlFamily, Yo as isNeonConnection, na as isNotNull, ta as isNull, ec as isPrimaryKeyConflictError, sn as isQueryTimeout, Yt as isRawEncoding, gs as isRegionServable, _n as isRelationsSpec, ut as isSeedDefinition, Ee as isSqliteFamily, te as isTableReactive, Ze as isView, i as json, sa as jsonField, Le as jsonIndex, s as lag, se as lead, lc as listRetentionConflicts, dc as listRetentions, Ao as localFirst, Mo as localFirstTables, Gi as lt, Ki as lte, go as makeEagerFallbackReporter, cs as makeNamespaceBranchExecutor, yn as many, bn as manyToMany, be as materializeFields, qe as max, tt as migration, t as min, qs as missingConflictColumns, Ks as missingRequiredColumns, Ge as mixin, Hi as neq, Ko as nextBranchState, rc as normaliseTarget, oa as not, fa as notExists, Ji as notInSet, ua as notInSubquery, g as numeric, fo as observeDbOp, vn as one, $n as oneCardinalityMessage, aa as or, w as orderClausesOf, re as paginateBy, ae as paginateById, Ha as pendingAttributionCount, $o as planBranch, qo as planBranchProvision, Jo as planBranchTeardown, es as planBranchTeardownFor, Zo as planNeonBranchProvision, Qo as planNeonBranchTeardown, wo as planVersionedUpdate, me as pluginRef, o as pluginRefSpecOf, $s as primaryKeyConflictError, ns as provisionBranch, ys as provisionResidentTenant, _r as qualifyTable, le as queryFor, He as queryForView, de as quoteIdent, Qs as raiseChangeListenerCeiling, d as rank, ve as raw, Se as readableByColumns, m as real, uo as recordDbOp, Ka as recordsTable, b as reference, Ii as registerCoreTables, kn as registerDiscoveredRelations, Ma as registerPendingAttribution, On as registerRelations, uc as registerRetention, it as registerTable, Ua as registerWriteRecorder, hn as relations, Ri as requireActors, v as requireTable, zi as requireTenants, ao as resetDbMetricTagCacheForTests, dt as resetSnowflake, _s as residentPlacement, Lt as resolveActorSnapshot, Xo as resolveBranchMechanism, ho as resolveEagerFallbackWarnIntervalMs, Ba as resolveEchoAttribution, _ as resolveFullTextIndex, Pe as resolveIdScheme, Ae as resolveMixinGraph, hs as resolveTenantHome, gr as resolveTenantNamespace, mc as retentionTtlMsFromEnv, ne as rowNumber, ln as rowSchema, bo as runRetryingTransaction, xo as runStoreTransaction, wa as runWithWriteAttribution, qa as runWriteRecorders, ac as sameDatabase, hr as sanitizeIdentifierFragment, Bt as serializeArraysForWrite, at as serverOnlyColumns, fs as setResidencyConfig, Fe as setSchemaChangeSeedHook, Re as setTenantCreateSeedHook, _o as settleTransactionExit, To as settleVersionedUpdate, ra as spatialPredicate, Bs as stampGeneratedId, Vs as stampGeneratedIds, Xi as startsWith, Io as streamTable, fe as sum, bt as sumOver, pc as sweepRetention, E as table, rs as teardownBranch, y as text, C as timestamp, St as timestampMs, Ct as timestampMsOrNull, r as union, ye as unionAll, Wa as unregisterWriteRecorder, Xs as updateManyRow, Ys as upsertRow, Qe as validateColumnName, Ue as validateIndexName, Nn as validateRegisteredRelations, Tn as validateRelationConfig, Ve as validateTableName, Oe as validateTypeIdPrefix, we as vector, et as vectorDistanceToOpclass, zo as vectorEmbedding, Co as versionColumnOf, Be as view, De as viewSql, _a as walkLeaves, Da as withCapturedAttribution };
|