@voltro/database 0.11.0 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +50 -0
- package/dist/index.d.ts +140 -20
- package/dist/index.js +540 -497
- package/dist/sql.d.ts +2 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { $ as e, A as t, At as n, B as r, C as i, Ct as a, D as o, Dt as s, E as c, Et as l, F as u, G as d, H as f, I as p, J as m, K as h, L as g, M as
|
|
2
|
-
import { timestampMs as
|
|
3
|
-
import { Chunk as
|
|
4
|
-
import { ansi as
|
|
1
|
+
import { $ as e, A as t, At as n, B as r, C as i, Ct as a, D as o, Dt as s, E as c, Et as l, F as u, G as d, H as f, I as p, J as m, K as h, L as g, M as ee, N as te, O as _, Ot as v, P as y, Q as b, R as ne, S as x, St as S, T as re, Tt as ie, U as ae, V as C, W as oe, X as se, Y as ce, Z as le, _ as ue, _t as de, a as fe, at as pe, b as me, bt as w, c as he, ct as ge, d as _e, dt as ve, et as ye, f as be, ft as xe, g as Se, gt as Ce, h as we, ht as Te, i as T, it as Ee, j as De, k as Oe, kt as E, l as ke, lt as Ae, m as je, mt as Me, n as Ne, nt as Pe, o as Fe, ot as Ie, p as Le, pt as Re, q as ze, r as Be, rt as Ve, s as He, st as Ue, t as We, tt as Ge, u as Ke, ut as qe, v as Je, vt as Ye, w as Xe, wt as Ze, x as Qe, xt as $e, y as et, yt as D, z as tt } from "./fileBased-Cc-F1oFv.js";
|
|
2
|
+
import { timestampMs as nt, timestampMsOrNull as rt } from "./wire.js";
|
|
3
|
+
import { Chunk as it, Data as at, Effect as ot, Option as O, Schema as k, Stream as st } from "effect";
|
|
4
|
+
import { ansi as A } from "@voltro/logger";
|
|
5
5
|
//#region src/arrayCodec.ts
|
|
6
|
-
var
|
|
6
|
+
var ct = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", lt = (e) => {
|
|
7
7
|
let t = [];
|
|
8
8
|
for (let [n, r] of Object.entries(e.fields)) r.type === "array" && t.push(n);
|
|
9
9
|
return t;
|
|
10
|
-
},
|
|
11
|
-
if (!
|
|
12
|
-
let r =
|
|
10
|
+
}, ut = (e, t, n) => {
|
|
11
|
+
if (!ct(n) || !t) return e;
|
|
12
|
+
let r = lt(t);
|
|
13
13
|
if (r.length === 0) return e;
|
|
14
14
|
let i = { ...e };
|
|
15
15
|
for (let e of r) {
|
|
@@ -17,9 +17,9 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
17
17
|
Array.isArray(t) && (i[e] = JSON.stringify(t));
|
|
18
18
|
}
|
|
19
19
|
return i;
|
|
20
|
-
},
|
|
21
|
-
if (!
|
|
22
|
-
let r =
|
|
20
|
+
}, dt = (e, t, n) => {
|
|
21
|
+
if (!ct(n) || !t) return e;
|
|
22
|
+
let r = lt(t);
|
|
23
23
|
return r.length === 0 ? e : e.map((e) => {
|
|
24
24
|
let t;
|
|
25
25
|
for (let n of r) {
|
|
@@ -31,86 +31,116 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
31
31
|
}
|
|
32
32
|
return t ?? e;
|
|
33
33
|
});
|
|
34
|
-
},
|
|
34
|
+
}, ft = "enc:v1:", pt = class extends Error {
|
|
35
|
+
_tag = "FieldDecryptionError";
|
|
36
|
+
table;
|
|
37
|
+
column;
|
|
38
|
+
reason;
|
|
39
|
+
constructor(e) {
|
|
40
|
+
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;
|
|
41
|
+
}
|
|
42
|
+
}, mt = (e) => typeof e == "object" && !!e && e._tag === "FieldDecryptionError", ht = (e) => typeof e == "string" && e.startsWith("enc:v1:"), gt = (e) => {
|
|
35
43
|
let t = [];
|
|
36
44
|
for (let [n, r] of Object.entries(e.fields)) r.encrypted === !0 && t.push(n);
|
|
37
45
|
return t;
|
|
38
|
-
},
|
|
46
|
+
}, _t = (e, t, n) => {
|
|
39
47
|
if (!t) return e;
|
|
40
|
-
let r =
|
|
48
|
+
let r = gt(t);
|
|
41
49
|
if (r.length === 0) return e;
|
|
42
50
|
let i = { ...e };
|
|
43
51
|
for (let e of r) {
|
|
44
52
|
let r = i[e];
|
|
45
|
-
if (!(r == null ||
|
|
53
|
+
if (!(r == null || ht(r))) {
|
|
46
54
|
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)`);
|
|
47
55
|
i[e] = n.encrypt(JSON.stringify(r));
|
|
48
56
|
}
|
|
49
57
|
}
|
|
50
58
|
return i;
|
|
51
|
-
},
|
|
59
|
+
}, vt = (e, t, n, r) => {
|
|
52
60
|
if (!t) return e;
|
|
53
|
-
let
|
|
54
|
-
|
|
61
|
+
let i = gt(t);
|
|
62
|
+
if (i.length === 0 || !n) return e;
|
|
63
|
+
let a = r?.onError ?? "throw", o = t.tableName ?? "?";
|
|
64
|
+
return e.map((e) => {
|
|
55
65
|
let t;
|
|
56
|
-
for (let
|
|
57
|
-
let
|
|
58
|
-
|
|
66
|
+
for (let s of i) {
|
|
67
|
+
let i = e[s];
|
|
68
|
+
if (ht(i)) {
|
|
69
|
+
t ??= { ...e };
|
|
70
|
+
try {
|
|
71
|
+
t[s] = JSON.parse(n.decrypt(i));
|
|
72
|
+
} catch (e) {
|
|
73
|
+
let n = String(e?.message ?? e);
|
|
74
|
+
if (a === "null") {
|
|
75
|
+
t[s] = null, r?.warn?.({
|
|
76
|
+
table: o,
|
|
77
|
+
column: s,
|
|
78
|
+
reason: n
|
|
79
|
+
});
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
throw new pt({
|
|
83
|
+
table: o,
|
|
84
|
+
column: s,
|
|
85
|
+
reason: n
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
59
89
|
}
|
|
60
90
|
return t ?? e;
|
|
61
91
|
});
|
|
62
|
-
},
|
|
92
|
+
}, yt = (e) => {
|
|
63
93
|
let t = (() => {
|
|
64
94
|
switch (e.type) {
|
|
65
95
|
case "id":
|
|
66
96
|
case "reference":
|
|
67
97
|
case "text":
|
|
68
|
-
case "enum": return
|
|
98
|
+
case "enum": return k.String;
|
|
69
99
|
case "integer":
|
|
70
100
|
case "real":
|
|
71
|
-
case "decimal": return
|
|
72
|
-
case "boolean": return
|
|
101
|
+
case "decimal": return k.Number;
|
|
102
|
+
case "boolean": return k.Boolean;
|
|
73
103
|
case "timestamp":
|
|
74
|
-
case "date": return
|
|
75
|
-
case "bigint": return
|
|
76
|
-
case "bytes": return
|
|
77
|
-
case "array": return
|
|
78
|
-
case "interval": return
|
|
79
|
-
default: return
|
|
104
|
+
case "date": return nt;
|
|
105
|
+
case "bigint": return k.BigInt;
|
|
106
|
+
case "bytes": return k.Uint8ArrayFromSelf;
|
|
107
|
+
case "array": return k.Array(k.Unknown);
|
|
108
|
+
case "interval": return k.String;
|
|
109
|
+
default: return k.Unknown;
|
|
80
110
|
}
|
|
81
111
|
})();
|
|
82
|
-
return e.nullable === !0 ?
|
|
83
|
-
},
|
|
112
|
+
return e.nullable === !0 ? k.NullOr(t) : t;
|
|
113
|
+
}, bt = (e, t) => {
|
|
84
114
|
let n = new Set(t?.omit ?? []), r = {};
|
|
85
|
-
for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] =
|
|
86
|
-
return
|
|
87
|
-
},
|
|
115
|
+
for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] = yt(i));
|
|
116
|
+
return k.Struct(r);
|
|
117
|
+
}, xt = (e) => typeof e == "function" ? e : () => e, St = (e, t) => ({
|
|
88
118
|
kind: "one",
|
|
89
|
-
target:
|
|
119
|
+
target: xt(e),
|
|
90
120
|
...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
|
|
91
121
|
...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
|
|
92
|
-
}),
|
|
122
|
+
}), Ct = (e, t) => ({
|
|
93
123
|
kind: "many",
|
|
94
|
-
target:
|
|
124
|
+
target: xt(e),
|
|
95
125
|
...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
|
|
96
126
|
...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
|
|
97
|
-
}),
|
|
127
|
+
}), wt = (e, t) => ({
|
|
98
128
|
kind: "manyToMany",
|
|
99
|
-
target:
|
|
100
|
-
through:
|
|
129
|
+
target: xt(e),
|
|
130
|
+
through: xt(t.through),
|
|
101
131
|
sourceKey: t.sourceKey,
|
|
102
132
|
targetKey: t.targetKey
|
|
103
|
-
}),
|
|
104
|
-
one:
|
|
105
|
-
many:
|
|
106
|
-
manyToMany:
|
|
107
|
-
},
|
|
133
|
+
}), Tt = {
|
|
134
|
+
one: St,
|
|
135
|
+
many: Ct,
|
|
136
|
+
manyToMany: wt
|
|
137
|
+
}, Et = (e, t) => {
|
|
108
138
|
let n = typeof e == "function" ? e : () => e;
|
|
109
139
|
return {
|
|
110
140
|
source: n,
|
|
111
|
-
relations: t(
|
|
141
|
+
relations: t(Tt, n())
|
|
112
142
|
};
|
|
113
|
-
},
|
|
143
|
+
}, Dt = (e) => {
|
|
114
144
|
if (typeof e != "object" || !e) return !1;
|
|
115
145
|
let t = e;
|
|
116
146
|
if (typeof t.source != "function" || typeof t.relations != "object" || t.relations === null) return !1;
|
|
@@ -119,64 +149,64 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
119
149
|
let t = e?.kind;
|
|
120
150
|
return t === "one" || t === "many" || t === "manyToMany";
|
|
121
151
|
});
|
|
122
|
-
},
|
|
152
|
+
}, Ot = St, kt = Ct, At = wt, j = (e, t, n) => {
|
|
123
153
|
let r = [];
|
|
124
154
|
for (let [n, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && r.push(n);
|
|
125
155
|
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>' }.`);
|
|
126
156
|
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.`);
|
|
127
157
|
return r[0];
|
|
128
|
-
},
|
|
129
|
-
let t =
|
|
158
|
+
}, jt = (e) => Object.keys(e.fields), M = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), Mt = (e) => {
|
|
159
|
+
let t = jt(e);
|
|
130
160
|
return t.length === 0 ? "<none>" : t.join(", ");
|
|
131
|
-
},
|
|
161
|
+
}, Nt = (e, t, n) => {
|
|
132
162
|
let r = `relation '${t}' on '${e.tableName}'`, i = n.target();
|
|
133
163
|
if (n.kind === "manyToMany") {
|
|
134
164
|
let t = n.through();
|
|
135
|
-
for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!
|
|
165
|
+
for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!M(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}': ${Mt(t)}.`);
|
|
136
166
|
return;
|
|
137
167
|
}
|
|
138
168
|
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.`);
|
|
139
|
-
if (n.sourceKey !== void 0 && !
|
|
140
|
-
let t =
|
|
141
|
-
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}': ${
|
|
169
|
+
if (n.sourceKey !== void 0 && !M(e, n.sourceKey)) {
|
|
170
|
+
let t = M(i, n.sourceKey);
|
|
171
|
+
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}': ${Mt(e)}.`));
|
|
142
172
|
}
|
|
143
|
-
if (n.foreignKey !== void 0 && !
|
|
144
|
-
let t =
|
|
145
|
-
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}': ${
|
|
173
|
+
if (n.foreignKey !== void 0 && !M(i, n.foreignKey)) {
|
|
174
|
+
let t = M(e, n.foreignKey);
|
|
175
|
+
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}': ${Mt(i)}.`));
|
|
146
176
|
}
|
|
147
|
-
},
|
|
148
|
-
let t = e.source(), n =
|
|
177
|
+
}, Pt = Symbol.for("@voltro/database/relationsRegistry"), Ft = globalThis, N = Ft[Pt] ?? (Ft[Pt] = /* @__PURE__ */ new Map()), It = (e) => {
|
|
178
|
+
let t = e.source(), n = N.get(t.tableName);
|
|
149
179
|
if (n === void 0) {
|
|
150
|
-
|
|
180
|
+
N.set(t.tableName, new Map(Object.entries(e.relations)));
|
|
151
181
|
return;
|
|
152
182
|
}
|
|
153
183
|
for (let [r, i] of Object.entries(e.relations)) {
|
|
154
184
|
if (n.has(r)) throw Error(`duplicate relation '${r}' on '${t.tableName}': two relations() blocks both declare it. Pick distinct names or merge them into one block.`);
|
|
155
185
|
n.set(r, i);
|
|
156
186
|
}
|
|
157
|
-
},
|
|
187
|
+
}, Lt = (e) => {
|
|
158
188
|
let t = 0;
|
|
159
|
-
for (let n of Object.values(e))
|
|
189
|
+
for (let n of Object.values(e)) Dt(n) && (It(n), t += 1);
|
|
160
190
|
return t;
|
|
161
|
-
},
|
|
162
|
-
let t =
|
|
191
|
+
}, Rt = (e) => {
|
|
192
|
+
let t = N.get(e);
|
|
163
193
|
if (t !== void 0) return Object.fromEntries(t);
|
|
164
|
-
},
|
|
194
|
+
}, zt = (e, t) => N.get(e)?.get(t), Bt = () => {
|
|
165
195
|
let e = [];
|
|
166
|
-
for (let [t, n] of
|
|
196
|
+
for (let [t, n] of N) for (let [r, i] of n) e.push({
|
|
167
197
|
source: t,
|
|
168
198
|
name: r,
|
|
169
199
|
relation: i
|
|
170
200
|
});
|
|
171
201
|
return e;
|
|
172
|
-
},
|
|
173
|
-
for (let [e, t] of
|
|
202
|
+
}, Vt = () => {
|
|
203
|
+
for (let [e, t] of N) {
|
|
174
204
|
let n = u(e);
|
|
175
|
-
if (n !== void 0) for (let [e, r] of t)
|
|
205
|
+
if (n !== void 0) for (let [e, r] of t) Nt(n, e, r);
|
|
176
206
|
}
|
|
177
|
-
},
|
|
178
|
-
|
|
179
|
-
},
|
|
207
|
+
}, Ht = () => {
|
|
208
|
+
N.clear();
|
|
209
|
+
}, Ut = (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, Wt = (e) => {
|
|
180
210
|
if (e == null || typeof e != "string") return e;
|
|
181
211
|
let t = e.trim();
|
|
182
212
|
if (t.length === 0) return e;
|
|
@@ -187,7 +217,7 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
187
217
|
} catch {
|
|
188
218
|
return e;
|
|
189
219
|
}
|
|
190
|
-
},
|
|
220
|
+
}, Gt = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, Kt = (e) => {
|
|
191
221
|
if (e == null || e instanceof Date) return e;
|
|
192
222
|
if (typeof e == "string") {
|
|
193
223
|
let t = new Date(e);
|
|
@@ -198,19 +228,19 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
198
228
|
return isNaN(t.getTime()) ? e : t;
|
|
199
229
|
}
|
|
200
230
|
return e;
|
|
201
|
-
},
|
|
231
|
+
}, qt = (e, t, n) => {
|
|
202
232
|
if (e == null) return e;
|
|
203
233
|
switch (t) {
|
|
204
|
-
case "boolean": return n === "postgres" ? e :
|
|
234
|
+
case "boolean": return n === "postgres" ? e : Ut(e);
|
|
205
235
|
case "json":
|
|
206
|
-
case "array": return n === "postgres" ? e :
|
|
236
|
+
case "array": return n === "postgres" ? e : Wt(e);
|
|
207
237
|
case "timestamp":
|
|
208
|
-
case "date": return n === "sqlite" || n === "turso" ?
|
|
238
|
+
case "date": return n === "sqlite" || n === "turso" ? Kt(e) : e;
|
|
209
239
|
case "decimal":
|
|
210
|
-
case "bigint": return
|
|
240
|
+
case "bigint": return Gt(e);
|
|
211
241
|
default: return e;
|
|
212
242
|
}
|
|
213
|
-
},
|
|
243
|
+
}, Jt = (e, t, n) => {
|
|
214
244
|
if (e.length === 0) return e;
|
|
215
245
|
let r = u(t);
|
|
216
246
|
if (r === void 0) return e;
|
|
@@ -221,36 +251,36 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
221
251
|
});
|
|
222
252
|
return e.map((e) => {
|
|
223
253
|
let t = { ...e };
|
|
224
|
-
for (let { key: e, type: r } of a) e in t && (t[e] =
|
|
254
|
+
for (let { key: e, type: r } of a) e in t && (t[e] = qt(t[e], r, n));
|
|
225
255
|
return t;
|
|
226
256
|
});
|
|
227
|
-
},
|
|
257
|
+
}, Yt = (e, t) => {
|
|
228
258
|
if (e == null) return e;
|
|
229
259
|
switch (t) {
|
|
230
260
|
case "json":
|
|
231
261
|
case "array": return typeof e == "string" ? e : JSON.stringify(e);
|
|
232
262
|
default: return e;
|
|
233
263
|
}
|
|
234
|
-
},
|
|
264
|
+
}, Xt = (e, t, n = ["json", "array"]) => {
|
|
235
265
|
let r = u(t);
|
|
236
266
|
if (r === void 0) return e;
|
|
237
267
|
let i = r.fields, a = null;
|
|
238
268
|
for (let [t, r] of Object.entries(i)) if (n.includes(r.type) && t in e) {
|
|
239
|
-
let n =
|
|
269
|
+
let n = Yt(e[t], r.type);
|
|
240
270
|
n !== e[t] && (a === null && (a = { ...e }), a[t] = n);
|
|
241
271
|
}
|
|
242
272
|
return a ?? e;
|
|
243
|
-
},
|
|
273
|
+
}, Zt = class extends Error {
|
|
244
274
|
_tag = "EagerCardinalityError";
|
|
245
275
|
constructor(e) {
|
|
246
276
|
super(e), this.name = "EagerCardinalityError";
|
|
247
277
|
}
|
|
248
|
-
},
|
|
278
|
+
}, Qt = (e) => {
|
|
249
279
|
let { relationName: t, sourceTableName: n, targetTableName: r, foreignKey: i, sourceKey: a } = e, o = r === n;
|
|
250
280
|
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.");
|
|
251
|
-
},
|
|
281
|
+
}, $t = async (e, t, n, r) => {
|
|
252
282
|
if (e.length === 0) return e;
|
|
253
|
-
let i =
|
|
283
|
+
let i = Rt(n.tableName);
|
|
254
284
|
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?`);
|
|
255
285
|
let a = e.map((e) => ({ ...e }));
|
|
256
286
|
for (let [e, o] of Object.entries(t)) {
|
|
@@ -259,36 +289,36 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
259
289
|
let t = Object.keys(i).join(", ") || "<none>";
|
|
260
290
|
throw Error(`unknown relation '${e}' on '${n.tableName}'. Registered relations: ${t}.`);
|
|
261
291
|
}
|
|
262
|
-
|
|
292
|
+
Nt(n, e, t), await en(a, e, t, o === !0 ? {} : o, n, r);
|
|
263
293
|
}
|
|
264
294
|
return a;
|
|
265
|
-
},
|
|
295
|
+
}, en = async (e, t, n, r, i, a) => {
|
|
266
296
|
switch (n.kind) {
|
|
267
297
|
case "one":
|
|
268
|
-
await
|
|
298
|
+
await tn(e, t, n, r, i, a);
|
|
269
299
|
return;
|
|
270
300
|
case "many":
|
|
271
|
-
await
|
|
301
|
+
await nn(e, t, n, r, i, a);
|
|
272
302
|
return;
|
|
273
303
|
case "manyToMany":
|
|
274
|
-
await
|
|
304
|
+
await an(e, t, n, r, i, a);
|
|
275
305
|
return;
|
|
276
306
|
}
|
|
277
|
-
},
|
|
278
|
-
let o = n.target(), s = n.sourceKey ??
|
|
307
|
+
}, tn = async (e, t, n, r, i, a) => {
|
|
308
|
+
let o = n.target(), s = n.sourceKey ?? on(i, o.tableName);
|
|
279
309
|
if (s !== void 0) {
|
|
280
|
-
let n =
|
|
310
|
+
let n = P(e, s), i = n.length === 0 ? [] : await sn(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
|
|
281
311
|
for (let n of e) {
|
|
282
312
|
let e = n[s];
|
|
283
313
|
n[t] = e == null ? null : c.get(e) ?? null;
|
|
284
314
|
}
|
|
285
|
-
await
|
|
315
|
+
await F(i, r.with, o, a);
|
|
286
316
|
return;
|
|
287
317
|
}
|
|
288
|
-
let c = n.foreignKey ??
|
|
318
|
+
let c = n.foreignKey ?? j(o, i.tableName, t), l = n.sourceKey ?? "id", u = P(e, l), d = u.length === 0 ? [] : await sn(o, c, u, r, a), f = /* @__PURE__ */ new Map();
|
|
289
319
|
for (let e of d) {
|
|
290
320
|
let n = e[c];
|
|
291
|
-
if (f.has(n)) throw new
|
|
321
|
+
if (f.has(n)) throw new Zt(Qt({
|
|
292
322
|
relationName: t,
|
|
293
323
|
sourceTableName: i.tableName,
|
|
294
324
|
targetTableName: o.tableName,
|
|
@@ -301,9 +331,9 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
301
331
|
let e = n[l];
|
|
302
332
|
n[t] = e == null ? null : f.get(e) ?? null;
|
|
303
333
|
}
|
|
304
|
-
await
|
|
305
|
-
},
|
|
306
|
-
let o = n.target(), s = n.foreignKey ??
|
|
334
|
+
await F(d, r.with, o, a);
|
|
335
|
+
}, nn = async (e, t, n, r, i, a) => {
|
|
336
|
+
let o = n.target(), s = n.foreignKey ?? j(o, i.tableName, t), c = n.sourceKey ?? "id", l = P(e, c), u = rn(r), d = l.length === 0 ? [] : await sn(o, s, l, u, a), f = /* @__PURE__ */ new Map();
|
|
307
337
|
for (let e of d) {
|
|
308
338
|
let t = e[s], n = f.get(t);
|
|
309
339
|
n ? n.push(e) : f.set(t, [e]);
|
|
@@ -319,12 +349,12 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
319
349
|
let e = n[c];
|
|
320
350
|
n[t] = f.get(e) ?? [];
|
|
321
351
|
}
|
|
322
|
-
await
|
|
323
|
-
},
|
|
352
|
+
await F(d, r.with, o, a);
|
|
353
|
+
}, rn = (e) => {
|
|
324
354
|
let { limit: t, offset: n, ...r } = e;
|
|
325
355
|
return r;
|
|
326
|
-
},
|
|
327
|
-
let o = n.target(), s = n.through(), c =
|
|
356
|
+
}, an = async (e, t, n, r, i, a) => {
|
|
357
|
+
let o = n.target(), s = n.through(), c = P(e, "id");
|
|
328
358
|
if (c.length === 0) {
|
|
329
359
|
for (let n of e) n[t] = [];
|
|
330
360
|
return;
|
|
@@ -345,8 +375,8 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
345
375
|
for (let n of e) n[t] = [];
|
|
346
376
|
return;
|
|
347
377
|
}
|
|
348
|
-
let f = await
|
|
349
|
-
await
|
|
378
|
+
let f = await sn(o, "id", P(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
|
|
379
|
+
await F(f, r.with, o, a);
|
|
350
380
|
let m = r.junction === void 0 ? void 0 : r.junction === !0 ? Object.keys(s.fields) : r.junction, h = /* @__PURE__ */ new Map();
|
|
351
381
|
for (let e of d) {
|
|
352
382
|
let t = e[n.sourceKey], r = e[n.targetKey], i = p.get(r);
|
|
@@ -358,16 +388,16 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
358
388
|
o ? o.push(a) : h.set(t, [a]);
|
|
359
389
|
}
|
|
360
390
|
for (let n of e) n[t] = h.get(n.id) ?? [];
|
|
361
|
-
},
|
|
391
|
+
}, on = (e, t) => {
|
|
362
392
|
for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
|
|
363
|
-
},
|
|
393
|
+
}, P = (e, t) => {
|
|
364
394
|
let n = /* @__PURE__ */ new Set();
|
|
365
395
|
for (let r of e) {
|
|
366
396
|
let e = r[t];
|
|
367
397
|
e != null && n.add(e);
|
|
368
398
|
}
|
|
369
399
|
return [...n];
|
|
370
|
-
},
|
|
400
|
+
}, sn = (e, t, n, r, i) => {
|
|
371
401
|
let a = {
|
|
372
402
|
column: t,
|
|
373
403
|
op: "in",
|
|
@@ -381,33 +411,33 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
381
411
|
skip: r.offset,
|
|
382
412
|
projection: void 0
|
|
383
413
|
});
|
|
384
|
-
},
|
|
385
|
-
t !== void 0 && e.length !== 0 && (await
|
|
414
|
+
}, F = async (e, t, n, r) => {
|
|
415
|
+
t !== void 0 && e.length !== 0 && (await $t(e, t, n, r)).forEach((t, n) => {
|
|
386
416
|
let r = e[n];
|
|
387
417
|
for (let [e, n] of Object.entries(t)) e in r || (r[e] = n);
|
|
388
418
|
});
|
|
389
|
-
},
|
|
419
|
+
}, cn = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, ln = class extends Error {
|
|
390
420
|
_tag = "TenantNamespaceUnresolved";
|
|
391
421
|
constructor(e) {
|
|
392
422
|
super(e), this.name = "TenantNamespaceUnresolved";
|
|
393
423
|
}
|
|
394
|
-
},
|
|
424
|
+
}, un = class extends Error {
|
|
395
425
|
_tag = "TenantNamespaceInvalid";
|
|
396
426
|
constructor(e) {
|
|
397
427
|
super(e), this.name = "TenantNamespaceInvalid";
|
|
398
428
|
}
|
|
399
|
-
},
|
|
400
|
-
if (e == null || e === "") throw new
|
|
401
|
-
let t =
|
|
402
|
-
if (t.replace(/_/g, "") === "") throw new
|
|
403
|
-
let n = `${
|
|
404
|
-
if (n.length >
|
|
429
|
+
}, dn = 63, fn = "tenant_", pn = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), mn = (e) => {
|
|
430
|
+
if (e == null || e === "") throw new ln("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.");
|
|
431
|
+
let t = pn(e);
|
|
432
|
+
if (t.replace(/_/g, "") === "") throw new un(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
|
|
433
|
+
let n = `${fn}${t}`;
|
|
434
|
+
if (n.length > dn) throw new un(`namespace '${n}' for tenant '${e}' exceeds the ${dn}-byte identifier limit. Use a shorter tenant id.`);
|
|
405
435
|
return n;
|
|
406
|
-
},
|
|
436
|
+
}, hn = (e, t) => e === null ? t : `${e}.${t}`, gn = (e, t) => {
|
|
407
437
|
let { strings: n, values: r } = e, i = t.unsafe(n[0] ?? "");
|
|
408
438
|
for (let e = 0; e < r.length; e++) i = t`${i}${r[e]}${t.unsafe(n[e + 1] ?? "")}`;
|
|
409
439
|
return t`${i}`;
|
|
410
|
-
},
|
|
440
|
+
}, I = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), L = (e, t, n = null) => {
|
|
411
441
|
if ("not" in e) return t`NOT (${L(e.not, t, n)})`;
|
|
412
442
|
if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => L(e, t, n)));
|
|
413
443
|
if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => L(e, t, n)));
|
|
@@ -420,15 +450,15 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
420
450
|
return r.op === "exists" ? t`EXISTS (${i})` : t`NOT EXISTS (${i})`;
|
|
421
451
|
}
|
|
422
452
|
let r = e, i = t(r.column), a = r.path, o = a !== void 0 && a.length > 0, s = () => t.onDialectOrElse({
|
|
423
|
-
mysql: () => t.unsafe(
|
|
424
|
-
mssql: () => t.unsafe(
|
|
425
|
-
sqlite: () => t.unsafe(
|
|
426
|
-
orElse: () => t.unsafe(
|
|
453
|
+
mysql: () => t.unsafe(T(r.column, a, "mysql")),
|
|
454
|
+
mssql: () => t.unsafe(T(r.column, a, "mssql")),
|
|
455
|
+
sqlite: () => t.unsafe(T(r.column, a, "sqlite")),
|
|
456
|
+
orElse: () => t.unsafe(T(r.column, a, "postgres"))
|
|
427
457
|
}), c = () => t.onDialectOrElse({
|
|
428
|
-
mysql: () => t.unsafe(
|
|
429
|
-
mssql: () => t.unsafe(
|
|
430
|
-
sqlite: () => t.unsafe(
|
|
431
|
-
orElse: () => t.unsafe(
|
|
458
|
+
mysql: () => t.unsafe(T(r.column, a, "mysql", { numeric: !0 })),
|
|
459
|
+
mssql: () => t.unsafe(T(r.column, a, "mssql", { numeric: !0 })),
|
|
460
|
+
sqlite: () => t.unsafe(T(r.column, a, "sqlite", { numeric: !0 })),
|
|
461
|
+
orElse: () => t.unsafe(T(r.column, a, "postgres", { numeric: !0 }))
|
|
432
462
|
}), l = o ? s() : i, u = o ? c() : i, d = (e) => o && e != null ? String(e) : e, f = (e) => o ? Number(e) : e;
|
|
433
463
|
switch (r.op) {
|
|
434
464
|
case "eq": return t`${l} = ${d(r.value)}`;
|
|
@@ -446,7 +476,7 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
446
476
|
return e.length === 0 ? t`TRUE` : t`${l} NOT IN ${t.in(o ? e.map((e) => d(e)) : e)}`;
|
|
447
477
|
}
|
|
448
478
|
case "contains": {
|
|
449
|
-
let e = `%${
|
|
479
|
+
let e = `%${I(typeof r.value == "string" ? r.value : String(r.value ?? ""))}%`;
|
|
450
480
|
return t.onDialectOrElse({
|
|
451
481
|
mysql: () => t`LOWER(${l}) LIKE LOWER(${e})`,
|
|
452
482
|
mssql: () => t`LOWER(${l}) LIKE LOWER(${e})`,
|
|
@@ -496,13 +526,13 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
496
526
|
});
|
|
497
527
|
}
|
|
498
528
|
}
|
|
499
|
-
},
|
|
529
|
+
}, _n = (e, t) => {
|
|
500
530
|
let n = [];
|
|
501
531
|
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}`);
|
|
502
|
-
},
|
|
532
|
+
}, vn = (e, t) => t.csv(e.map((e) => {
|
|
503
533
|
let n = e.column === void 0 ? t.unsafe("*") : t`${t(e.column)}`;
|
|
504
534
|
if (e.op.startsWith("window-")) {
|
|
505
|
-
let r =
|
|
535
|
+
let r = _n(e.window ?? {}, t);
|
|
506
536
|
switch (e.op) {
|
|
507
537
|
case "window-row-number": return t`ROW_NUMBER() OVER (${r}) AS ${t(e.alias)}`;
|
|
508
538
|
case "window-rank": return t`RANK() OVER (${r}) AS ${t(e.alias)}`;
|
|
@@ -526,39 +556,39 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
526
556
|
return t`${t(e.column)} AS ${t(e.alias)}`;
|
|
527
557
|
default: throw Error(`compileAggregateProjection: unknown op '${e.op}'`);
|
|
528
558
|
}
|
|
529
|
-
})),
|
|
559
|
+
})), yn = (e) => `[${e.join(",")}]`, bn = (e, t) => {
|
|
530
560
|
if (e.queryVector === void 0) return null;
|
|
531
|
-
let n = t(e.column), r =
|
|
561
|
+
let n = t(e.column), r = yn(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
|
|
532
562
|
return t.onDialectOrElse({
|
|
533
563
|
mysql: () => t`${t.unsafe(a)}(${n}, ${r})`,
|
|
534
564
|
mssql: () => t`NULL`,
|
|
535
565
|
sqlite: () => t`NULL`,
|
|
536
566
|
orElse: () => t`${n} ${t.unsafe(i)} ${r}::vector`
|
|
537
567
|
});
|
|
538
|
-
},
|
|
568
|
+
}, xn = (e, t) => {
|
|
539
569
|
let n = t.unsafe(e.useGeography ? "::geography" : "::geometry");
|
|
540
570
|
return t`ST_Distance(${t(e.column)}${n}, ${e.geom}${n})`;
|
|
541
|
-
},
|
|
542
|
-
let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${
|
|
571
|
+
}, Sn = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, Cn = (e, t) => t`${t(`${e.indexName}_tsv`)}`, wn = (e, t) => `${t}_${e.indexName}_fts`, Tn = (e, t, n) => {
|
|
572
|
+
let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${I(e.query)}%`;
|
|
543
573
|
return n.onDialectOrElse({
|
|
544
574
|
mysql: () => n`MATCH(${r}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
|
|
545
575
|
sqlite: () => {
|
|
546
|
-
let r = n(
|
|
576
|
+
let r = n(wn(e, t));
|
|
547
577
|
return n`${n("id")} IN (SELECT ${n("row_id")} FROM ${r} WHERE ${r} MATCH ${e.query})`;
|
|
548
578
|
},
|
|
549
579
|
mssql: () => n.or(e.columns.map((e) => n`LOWER(${n(e)}) LIKE LOWER(${i}) ESCAPE '\\'`)),
|
|
550
|
-
orElse: () => n`${
|
|
580
|
+
orElse: () => n`${Cn(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
|
|
551
581
|
});
|
|
552
|
-
},
|
|
553
|
-
let r = `%${
|
|
582
|
+
}, En = (e, t, n) => {
|
|
583
|
+
let r = `%${I(e.query)}%`;
|
|
554
584
|
return n.onDialectOrElse({
|
|
555
585
|
mysql: () => n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
|
|
556
586
|
sqlite: () => {
|
|
557
|
-
let r = n(
|
|
587
|
+
let r = n(wn(e, t));
|
|
558
588
|
return n`COALESCE((SELECT -bm25(${r}) FROM ${r} WHERE ${r} MATCH ${e.query} AND ${r}.${n("row_id")} = ${n("id")}), 0)`;
|
|
559
589
|
},
|
|
560
590
|
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}`),
|
|
561
|
-
orElse: () => n`ts_rank(${
|
|
591
|
+
orElse: () => n`ts_rank(${Cn(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
|
|
562
592
|
});
|
|
563
593
|
}, R = (e, t, n = null) => {
|
|
564
594
|
if (e.setOp && e.setOp.queries.length >= 2) {
|
|
@@ -573,7 +603,7 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
573
603
|
}
|
|
574
604
|
return t`${i}${a.reduce((e, n) => t`${e}${n}`, t``)}`;
|
|
575
605
|
}
|
|
576
|
-
let r = e.annClause === void 0 ? null :
|
|
606
|
+
let r = e.annClause === void 0 ? null : bn(e.annClause, t);
|
|
577
607
|
e.spatialClause !== void 0 && t.onDialectOrElse({
|
|
578
608
|
mysql: () => {
|
|
579
609
|
throw Error("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
|
|
@@ -586,57 +616,57 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
586
616
|
},
|
|
587
617
|
orElse: () => t``
|
|
588
618
|
});
|
|
589
|
-
let i = e.spatialClause?.projectAs === void 0 ? null :
|
|
619
|
+
let i = e.spatialClause?.projectAs === void 0 ? null : xn(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? vn(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 ? En(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({
|
|
590
620
|
orElse: () => t`DISTINCT ON (${t.csv(e.distinctOn.map((e) => t`${t(e)}`))}) `,
|
|
591
621
|
mysql: () => t`DISTINCT `,
|
|
592
622
|
mssql: () => t`DISTINCT `,
|
|
593
623
|
sqlite: () => t`DISTINCT `
|
|
594
|
-
}) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(
|
|
624
|
+
}) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(hn(n, e.table))}` : t`${t(hn(n, e.table))} AS ${t(e.alias)}`, m = (e.joins ?? []).map((e) => {
|
|
595
625
|
let r = e.kind === "inner" ? "INNER" : "LEFT";
|
|
596
|
-
return t` ${t.unsafe(r)} JOIN ${t(
|
|
597
|
-
}), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null :
|
|
598
|
-
r !== null &&
|
|
599
|
-
for (let n of e.order)
|
|
600
|
-
let
|
|
626
|
+
return t` ${t.unsafe(r)} JOIN ${t(hn(n, e.table))} AS ${t(e.alias)} ON ${L(e.on, t, n)}`;
|
|
627
|
+
}), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null : Tn(c, e.table, t), ee = [e.predicate ? L(e.predicate, t, n) : null, g].filter((e) => e !== null), te = ee.length > 0 ? t` WHERE ${t.and(ee)}` : t``, _ = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, v = e.having ? t` HAVING ${L(e.having, t, n)}` : t``, y = e.skip !== void 0, b = [];
|
|
628
|
+
r !== null && b.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && b.push(e.spatialClause.order === "desc" ? t`${Sn(e.spatialClause, t)} DESC` : t`${Sn(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && b.push(t`${l} DESC`);
|
|
629
|
+
for (let n of e.order) b.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
|
|
630
|
+
let ne = b.length > 0 ? t` ORDER BY ${t.csv(b)}` : y ? t.onDialectOrElse({
|
|
601
631
|
mssql: () => t` ORDER BY (SELECT NULL)`,
|
|
602
632
|
orElse: () => t``
|
|
603
|
-
}) : t``,
|
|
633
|
+
}) : t``, x = (e) => {
|
|
604
634
|
if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`compileSelect: expected non-negative integer take/skip, got ${e}`);
|
|
605
635
|
return t.unsafe(String(e));
|
|
606
|
-
},
|
|
636
|
+
}, S = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${R(e.descriptor, t, n)})`), re = (e.ctes ?? []).some((e) => e.recursive === !0), ie = S.length > 0 ? t`WITH ${t.unsafe(re ? "RECURSIVE " : "")}${t.csv(S)} ` : t``;
|
|
607
637
|
return t.onDialectOrElse({
|
|
608
638
|
mssql: () => {
|
|
609
|
-
let n = e.take !== void 0 && !
|
|
610
|
-
return t`${
|
|
639
|
+
let n = e.take !== void 0 && !y ? t`TOP ${x(e.take)} ` : t``, r = y ? t` OFFSET ${x(e.skip)} ROWS FETCH NEXT ${x(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
|
|
640
|
+
return t`${ie}SELECT ${n}${f}${d} FROM ${h}${te}${_}${v}${ne}${r}`;
|
|
611
641
|
},
|
|
612
642
|
orElse: () => {
|
|
613
|
-
let n = e.take === void 0 ? t`` : t` LIMIT ${
|
|
614
|
-
return t`${
|
|
643
|
+
let n = e.take === void 0 ? t`` : t` LIMIT ${x(e.take)}`, r = y ? t` OFFSET ${x(e.skip)}` : t``;
|
|
644
|
+
return t`${ie}SELECT ${f}${d} FROM ${h}${te}${_}${v}${ne}${n}${r}`;
|
|
615
645
|
}
|
|
616
646
|
});
|
|
617
|
-
},
|
|
647
|
+
}, Dn = (e, t, n) => {
|
|
618
648
|
if (e.eager === void 0) return null;
|
|
619
|
-
let r =
|
|
649
|
+
let r = kn(e.table, e.eager, e.sourceTable);
|
|
620
650
|
if (r === null) return null;
|
|
621
|
-
let i =
|
|
651
|
+
let i = In(n, e, r, Fn(t, n));
|
|
622
652
|
return i === null ? null : {
|
|
623
653
|
fragment: i,
|
|
624
|
-
decode:
|
|
654
|
+
decode: zn(r, n)
|
|
625
655
|
};
|
|
626
|
-
}, z = (e) => e.relation.kind === "one" && e.fkSide === "target",
|
|
656
|
+
}, z = (e) => e.relation.kind === "one" && e.fkSide === "target", On = (e) => ({
|
|
627
657
|
...e,
|
|
628
658
|
branch: {
|
|
629
659
|
...e.branch,
|
|
630
660
|
limit: 2
|
|
631
661
|
}
|
|
632
|
-
}),
|
|
633
|
-
let r = n ?? g(e), i =
|
|
662
|
+
}), kn = (e, t, n) => {
|
|
663
|
+
let r = n ?? g(e), i = Rt(e);
|
|
634
664
|
if (i === void 0) return null;
|
|
635
665
|
let a = [];
|
|
636
666
|
for (let [e, n] of Object.entries(t)) {
|
|
637
667
|
let t = i[e];
|
|
638
668
|
if (t === void 0) return null;
|
|
639
|
-
let o =
|
|
669
|
+
let o = An(e, t, r, n === !0 ? {} : n);
|
|
640
670
|
if (o === null) return null;
|
|
641
671
|
a.push(o);
|
|
642
672
|
}
|
|
@@ -644,30 +674,30 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
644
674
|
table: r,
|
|
645
675
|
children: a
|
|
646
676
|
};
|
|
647
|
-
},
|
|
677
|
+
}, An = (e, t, n, r) => {
|
|
648
678
|
let i = t.target(), a = (t.kind === "manyToMany" ? void 0 : t.sourceKey) ?? "id", o, s;
|
|
649
679
|
if (t.kind === "manyToMany") o = t.targetKey, s = "target";
|
|
650
680
|
else if (t.kind === "one") {
|
|
651
|
-
let r = t.sourceKey ??
|
|
681
|
+
let r = t.sourceKey ?? Pn(n, i.tableName);
|
|
652
682
|
if (r !== void 0) o = r, s = "source";
|
|
653
683
|
else try {
|
|
654
|
-
o = t.foreignKey ??
|
|
684
|
+
o = t.foreignKey ?? j(i, n.tableName, e), s = "target";
|
|
655
685
|
} catch {
|
|
656
686
|
return null;
|
|
657
687
|
}
|
|
658
688
|
} else try {
|
|
659
|
-
o = t.foreignKey ??
|
|
689
|
+
o = t.foreignKey ?? j(i, n.tableName, e), s = "target";
|
|
660
690
|
} catch {
|
|
661
691
|
return null;
|
|
662
692
|
}
|
|
663
693
|
let c = r.with === void 0 ? [] : (() => {
|
|
664
|
-
let e =
|
|
694
|
+
let e = Rt(i.tableName);
|
|
665
695
|
if (e === void 0 && Object.keys(r.with).length > 0) return null;
|
|
666
696
|
let t = [];
|
|
667
697
|
for (let [n, a] of Object.entries(r.with)) {
|
|
668
698
|
let r = e?.[n];
|
|
669
699
|
if (r === void 0) return null;
|
|
670
|
-
let o =
|
|
700
|
+
let o = An(n, r, i, a === !0 ? {} : a);
|
|
671
701
|
if (o === null) return null;
|
|
672
702
|
t.push(o);
|
|
673
703
|
}
|
|
@@ -683,9 +713,9 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
683
713
|
fkSide: s,
|
|
684
714
|
branch: r,
|
|
685
715
|
children: c,
|
|
686
|
-
junction:
|
|
716
|
+
junction: jn(t, r)
|
|
687
717
|
};
|
|
688
|
-
},
|
|
718
|
+
}, jn = (e, t) => {
|
|
689
719
|
if (e.kind !== "manyToMany" || t.junction === void 0) return;
|
|
690
720
|
let n = e.through(), r = t.junction === !0 ? Object.keys(n.fields) : t.junction, i = r.filter((e) => e in n.fields);
|
|
691
721
|
return {
|
|
@@ -697,35 +727,35 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
697
727
|
return t !== void 0 && (t.type === "timestamp" || t.type === "date");
|
|
698
728
|
})
|
|
699
729
|
};
|
|
700
|
-
},
|
|
730
|
+
}, Mn = (e) => `__j_${e}`, Nn = "__j", Pn = (e, t) => {
|
|
701
731
|
for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
|
|
702
|
-
},
|
|
732
|
+
}, Fn = (e, t) => {
|
|
703
733
|
let n = 0;
|
|
704
734
|
return {
|
|
705
735
|
sql: e,
|
|
706
736
|
dialect: t,
|
|
707
737
|
nextAlias: () => `__a${n++}`
|
|
708
738
|
};
|
|
709
|
-
},
|
|
739
|
+
}, In = (e, t, n, r) => {
|
|
710
740
|
switch (e) {
|
|
711
|
-
case "postgres": return
|
|
741
|
+
case "postgres": return Hn(t, n, r);
|
|
712
742
|
case "sqlite":
|
|
713
|
-
case "turso": return
|
|
743
|
+
case "turso": return Xn(t, n, r);
|
|
714
744
|
case "mysql":
|
|
715
|
-
case "mariadb": return
|
|
716
|
-
case "mssql": return
|
|
745
|
+
case "mariadb": return or(t, n, r);
|
|
746
|
+
case "mssql": return pr(t, n, r);
|
|
717
747
|
}
|
|
718
|
-
},
|
|
719
|
-
let n =
|
|
748
|
+
}, Ln = (e, t) => t === "mssql" && !Rn.test(e) ? /* @__PURE__ */ new Date(`${e}Z`) : new Date(e), Rn = /(?:Z|[+-]\d{2}:?\d{2})$/, zn = (e, t) => {
|
|
749
|
+
let n = Bn(e.table, e.children, t);
|
|
720
750
|
return (e) => e.map((e) => {
|
|
721
751
|
let t = e.__row, r = typeof t == "string" ? JSON.parse(t) : t;
|
|
722
752
|
return n(r);
|
|
723
753
|
});
|
|
724
|
-
},
|
|
754
|
+
}, Bn = (e, t, n) => {
|
|
725
755
|
let r = [];
|
|
726
756
|
for (let [t, n] of Object.entries(e.fields)) (n.type === "timestamp" || n.type === "date") && r.push(t);
|
|
727
757
|
let i = t.map((e) => {
|
|
728
|
-
let t =
|
|
758
|
+
let t = Bn(e.target, e.children, n), r = e.relation.kind === "one", i = z(e), a = i ? Qt({
|
|
729
759
|
relationName: e.relationName,
|
|
730
760
|
sourceTableName: e.source.tableName,
|
|
731
761
|
targetTableName: e.target.tableName,
|
|
@@ -738,14 +768,14 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
738
768
|
isSingle: r,
|
|
739
769
|
fromOverFetch: i,
|
|
740
770
|
cardinalityMessage: a,
|
|
741
|
-
junction:
|
|
771
|
+
junction: Vn(e.junction, n)
|
|
742
772
|
};
|
|
743
773
|
});
|
|
744
774
|
return (e) => {
|
|
745
775
|
let t = { ...e };
|
|
746
776
|
for (let e of r) {
|
|
747
777
|
let r = t[e];
|
|
748
|
-
typeof r == "string" && (t[e] =
|
|
778
|
+
typeof r == "string" && (t[e] = Ln(r, n));
|
|
749
779
|
}
|
|
750
780
|
for (let e of i) {
|
|
751
781
|
let n = t[e.name];
|
|
@@ -755,7 +785,7 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
755
785
|
}
|
|
756
786
|
if (e.fromOverFetch) {
|
|
757
787
|
let r = n;
|
|
758
|
-
if (r.length > 1) throw new
|
|
788
|
+
if (r.length > 1) throw new Zt(e.cardinalityMessage);
|
|
759
789
|
t[e.name] = r.length === 0 ? null : e.decode(r[0]);
|
|
760
790
|
continue;
|
|
761
791
|
}
|
|
@@ -767,104 +797,104 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
767
797
|
}
|
|
768
798
|
return t;
|
|
769
799
|
};
|
|
770
|
-
},
|
|
800
|
+
}, Vn = (e, t) => {
|
|
771
801
|
if (e === void 0) return;
|
|
772
802
|
let n = new Set(e.dateColumns), r = e.requested;
|
|
773
803
|
return (e) => {
|
|
774
804
|
let i = e._junction ?? {}, a = {};
|
|
775
805
|
for (let e of r) {
|
|
776
806
|
let r = i[e];
|
|
777
|
-
a[e] = n.has(e) && typeof r == "string" ?
|
|
807
|
+
a[e] = n.has(e) && typeof r == "string" ? Ln(r, t) : r;
|
|
778
808
|
}
|
|
779
809
|
return {
|
|
780
810
|
...e,
|
|
781
811
|
_junction: a
|
|
782
812
|
};
|
|
783
813
|
};
|
|
784
|
-
},
|
|
785
|
-
let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s =
|
|
814
|
+
}, Hn = (e, t, n) => {
|
|
815
|
+
let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = Un(i, t.children, n);
|
|
786
816
|
return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${G(e.predicate, i, r)}` : r``}${e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${H(i, e.column, r)} DESC` : r`${H(i, e.column, r)} ASC`))}` : r``}${e.take === void 0 ? r`` : r` LIMIT ${W(e.take, r)}`}${e.skip === void 0 ? r`` : r` OFFSET ${W(e.skip, r)}`}`;
|
|
787
|
-
},
|
|
788
|
-
let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${U(
|
|
817
|
+
}, Un = (e, t, n, r) => {
|
|
818
|
+
let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${U(Nn, i)}::text)`;
|
|
789
819
|
if (t.length === 0 && r === void 0) return a;
|
|
790
820
|
let o = [];
|
|
791
|
-
r !== void 0 && o.push(i`${U("_junction", i)}, ${H(e,
|
|
821
|
+
r !== void 0 && o.push(i`${U("_junction", i)}, ${H(e, Nn, i)}`);
|
|
792
822
|
for (let r of t) {
|
|
793
|
-
let t =
|
|
823
|
+
let t = Wn(r, e, n);
|
|
794
824
|
if (t === null) return null;
|
|
795
825
|
o.push(i`${U(r.relationName, i)}, ${t}`);
|
|
796
826
|
}
|
|
797
827
|
return i`${a} || jsonb_build_object(${i.csv(o)})`;
|
|
798
|
-
},
|
|
828
|
+
}, Wn = (e, t, n) => {
|
|
799
829
|
switch (e.relation.kind) {
|
|
800
|
-
case "one": return z(e) ?
|
|
801
|
-
case "many": return
|
|
802
|
-
case "manyToMany": return
|
|
830
|
+
case "one": return z(e) ? Kn(On(e), t, n) : Gn(e, t, n);
|
|
831
|
+
case "many": return Kn(e, t, n);
|
|
832
|
+
case "manyToMany": return qn(e, t, n);
|
|
803
833
|
}
|
|
804
|
-
},
|
|
805
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
834
|
+
}, Gn = (e, t, n) => {
|
|
835
|
+
let r = n.sql, i = n.nextAlias(), a = Un(i, e.children, n);
|
|
806
836
|
if (a === null) return null;
|
|
807
837
|
let o = e.fkSide === "source" ? r`${H(i, "id", r)} = ${H(t, e.foreignKey, r)}` : r`${H(i, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${G(e.branch.where, i, r)}`, c = B(i, e.branch.orderBy, r);
|
|
808
838
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}${c} LIMIT 1)`;
|
|
809
|
-
},
|
|
810
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
839
|
+
}, Kn = (e, t, n) => {
|
|
840
|
+
let r = n.sql, i = n.nextAlias(), a = Un(i, e.children, n);
|
|
811
841
|
if (a === null) return null;
|
|
812
|
-
let o = r`${H(void 0, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(e.branch.where, r)}`, c =
|
|
842
|
+
let o = r`${H(void 0, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(e.branch.where, r)}`, c = Yn(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`;
|
|
813
843
|
return r`COALESCE((SELECT jsonb_agg(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), '[]'::jsonb)`;
|
|
814
|
-
},
|
|
815
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
844
|
+
}, qn = (e, t, n) => {
|
|
845
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Un(o, e.children, n, e.junction);
|
|
816
846
|
if (c === null) return null;
|
|
817
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${L(e.branch.where, r)}`, u = K(e, s, r), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : r`, ${
|
|
847
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${L(e.branch.where, r)}`, u = K(e, s, r), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : r`, ${Jn(e.junction, s, r)} AS ${r(Nn)}`;
|
|
818
848
|
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 ${H(o, "id", r)} = ${H(s, i.targetKey, r)} WHERE ${H(s, i.sourceKey, r)} = ${H(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), '[]'::jsonb)`;
|
|
819
|
-
},
|
|
820
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
849
|
+
}, Jn = (e, t, n) => e.present.length === 0 ? n`jsonb_build_object()` : n`jsonb_build_object(${n.csv(e.present.map((e) => n`${U(e, n)}, ${H(t, e, n)}`))})`, B = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${H(e, t.column, n)} DESC` : n`${H(e, t.column, n)} ASC`))}`, Yn = (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`))}`, Xn = (e, t, n) => {
|
|
850
|
+
let r = n.sql, i = n.nextAlias(), a = Zn(i, t.table, t.children, n);
|
|
821
851
|
if (a === null) return null;
|
|
822
852
|
let o = e.predicate ? r` WHERE ${G(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${H(i, e.column, r)} DESC` : r`${H(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${W(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${W(e.skip, r)}`;
|
|
823
853
|
return r`SELECT ${a} AS "__row" FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
|
|
824
|
-
},
|
|
854
|
+
}, Zn = (e, t, n, r, i) => {
|
|
825
855
|
let a = r.sql, o = [];
|
|
826
856
|
for (let n of Object.keys(t.fields)) o.push(a`${U(n, a)}, ${H(e, n, a)}`);
|
|
827
857
|
if (i !== void 0) {
|
|
828
|
-
let e =
|
|
858
|
+
let e = Qn(i.projection, i.source, a);
|
|
829
859
|
o.push(a`${U("_junction", a)}, json_object(${e})`);
|
|
830
860
|
}
|
|
831
861
|
for (let t of n) {
|
|
832
|
-
let n =
|
|
862
|
+
let n = nr(t, e, r);
|
|
833
863
|
if (n === null) return null;
|
|
834
864
|
o.push(a`${U(t.relationName, a)}, ${n}`);
|
|
835
865
|
}
|
|
836
866
|
return a`json_object(${a.csv(o)})`;
|
|
837
|
-
},
|
|
867
|
+
}, Qn = (e, t, n) => e.present.length === 0 ? n`` : n.csv(e.present.map((e) => n`${U(e, n)}, ${H(t.alias, t.physical(e), n)}`)), $n = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${H(t, e, n)} AS ${n(Mn(e))}`))}`, er = (e) => ({
|
|
838
868
|
alias: e,
|
|
839
|
-
physical:
|
|
840
|
-
}),
|
|
869
|
+
physical: Mn
|
|
870
|
+
}), tr = (e) => ({
|
|
841
871
|
alias: e,
|
|
842
872
|
physical: (e) => e
|
|
843
|
-
}),
|
|
873
|
+
}), nr = (e, t, n) => {
|
|
844
874
|
switch (e.relation.kind) {
|
|
845
|
-
case "one": return z(e) ?
|
|
846
|
-
case "many": return
|
|
847
|
-
case "manyToMany": return
|
|
875
|
+
case "one": return z(e) ? ir(On(e), t, n) : rr(e, t, n);
|
|
876
|
+
case "many": return ir(e, t, n);
|
|
877
|
+
case "manyToMany": return ar(e, t, n);
|
|
848
878
|
}
|
|
849
|
-
},
|
|
850
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
879
|
+
}, rr = (e, t, n) => {
|
|
880
|
+
let r = n.sql, i = n.nextAlias(), a = Zn(i, e.target, e.children, n);
|
|
851
881
|
if (a === null) return null;
|
|
852
882
|
let o = e.fkSide === "source" ? r`${H(i, "id", r)} = ${H(t, e.foreignKey, r)}` : r`${H(i, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`;
|
|
853
883
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
|
|
854
|
-
},
|
|
855
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
884
|
+
}, ir = (e, t, n) => {
|
|
885
|
+
let r = n.sql, i = n.nextAlias(), a = Zn(i, e.target, e.children, n);
|
|
856
886
|
if (a === null) return null;
|
|
857
|
-
let o = r`${H(void 0, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, c =
|
|
887
|
+
let o = r`${H(void 0, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, c = Yn(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`;
|
|
858
888
|
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('[]'))`;
|
|
859
|
-
},
|
|
860
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
889
|
+
}, ar = (e, t, n) => {
|
|
890
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Zn(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
|
|
861
891
|
projection: e.junction,
|
|
862
|
-
source:
|
|
892
|
+
source: er(o)
|
|
863
893
|
});
|
|
864
894
|
if (c === null) return null;
|
|
865
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, u = K(e, s, r, !0), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` :
|
|
895
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, u = K(e, s, r, !0), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : $n(e.junction, s, r);
|
|
866
896
|
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 ${H(o, "id", r)} = ${H(s, i.targetKey, r)} WHERE ${H(s, i.sourceKey, r)} = ${H(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), json('[]'))`;
|
|
867
|
-
},
|
|
897
|
+
}, or = (e, t, n) => {
|
|
868
898
|
let r = n.sql, i = n.nextAlias(), a = V(i, t.table, t.children, n);
|
|
869
899
|
if (a === null) return null;
|
|
870
900
|
let o = e.predicate ? r` WHERE ${G(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${H(i, e.column, r)} DESC` : r`${H(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${W(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${W(e.skip, r)}`;
|
|
@@ -873,66 +903,66 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
873
903
|
let a = r.sql, o = [];
|
|
874
904
|
for (let n of Object.keys(t.fields)) o.push(a`${U(n, a)}, ${H(e, n, a)}`);
|
|
875
905
|
if (i !== void 0) {
|
|
876
|
-
let e =
|
|
906
|
+
let e = Qn(i.projection, i.source, a);
|
|
877
907
|
o.push(a`${U("_junction", a)}, JSON_OBJECT(${e})`);
|
|
878
908
|
}
|
|
879
909
|
for (let t of n) {
|
|
880
|
-
let n =
|
|
910
|
+
let n = sr(t, e, r);
|
|
881
911
|
if (n === null) return null;
|
|
882
912
|
o.push(a`${U(t.relationName, a)}, ${n}`);
|
|
883
913
|
}
|
|
884
914
|
return a`JSON_OBJECT(${a.csv(o)})`;
|
|
885
|
-
},
|
|
915
|
+
}, sr = (e, t, n) => {
|
|
886
916
|
switch (e.relation.kind) {
|
|
887
917
|
case "one":
|
|
888
918
|
if (z(e)) {
|
|
889
|
-
let r =
|
|
890
|
-
return n.dialect === "mariadb" ?
|
|
919
|
+
let r = On(e);
|
|
920
|
+
return n.dialect === "mariadb" ? dr(r, t, n) : lr(r, t, n);
|
|
891
921
|
}
|
|
892
|
-
return
|
|
893
|
-
case "many": return n.dialect === "mariadb" ?
|
|
894
|
-
case "manyToMany": return n.dialect === "mariadb" ?
|
|
922
|
+
return cr(e, t, n);
|
|
923
|
+
case "many": return n.dialect === "mariadb" ? dr(e, t, n) : lr(e, t, n);
|
|
924
|
+
case "manyToMany": return n.dialect === "mariadb" ? fr(e, t, n) : ur(e, t, n);
|
|
895
925
|
}
|
|
896
|
-
},
|
|
926
|
+
}, cr = (e, t, n) => {
|
|
897
927
|
let r = n.sql, i = n.nextAlias(), a = V(i, e.target, e.children, n);
|
|
898
928
|
if (a === null) return null;
|
|
899
929
|
let o = e.fkSide === "source" ? r`${H(i, "id", r)} = ${H(t, e.foreignKey, r)}` : r`${H(i, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`;
|
|
900
930
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
|
|
901
|
-
},
|
|
931
|
+
}, lr = (e, t, n) => {
|
|
902
932
|
let r = n.sql, i = n.nextAlias(), a = V(i, e.target, e.children, n);
|
|
903
933
|
if (a === null) return null;
|
|
904
|
-
let o = r`${H(void 0, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, c =
|
|
934
|
+
let o = r`${H(void 0, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, c = Yn(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`;
|
|
905
935
|
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())`;
|
|
906
|
-
},
|
|
936
|
+
}, ur = (e, t, n) => {
|
|
907
937
|
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = V(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
|
|
908
938
|
projection: e.junction,
|
|
909
|
-
source:
|
|
939
|
+
source: er(o)
|
|
910
940
|
});
|
|
911
941
|
if (c === null) return null;
|
|
912
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, u = K(e, s, r, !0), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` :
|
|
942
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, u = K(e, s, r, !0), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${W(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${W(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : $n(e.junction, s, r);
|
|
913
943
|
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 ${H(o, "id", r)} = ${H(s, i.targetKey, r)} WHERE ${H(s, i.sourceKey, r)} = ${H(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), JSON_ARRAY())`;
|
|
914
|
-
},
|
|
944
|
+
}, dr = (e, t, n) => {
|
|
915
945
|
let r = n.sql, i = n.nextAlias(), a = V(i, e.target, e.children, n);
|
|
916
946
|
if (a === null) return null;
|
|
917
947
|
let o = r`${H(i, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
|
|
918
948
|
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`${H(i, e.column, r)} DESC` : r`${H(i, e.column, r)} ASC`))}` : r``}) FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}), JSON_ARRAY())`;
|
|
919
949
|
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 ${H(i, "rn", r)} > ${W(d, r)} AND ${H(i, "rn", r)} <= ${W(d + u, r)}` : u === void 0 ? r` AND ${H(i, "rn", r)} > ${W(d, r)}` : r` AND ${H(i, "rn", r)} <= ${W(u, r)}`;
|
|
920
950
|
return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${H(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())`;
|
|
921
|
-
},
|
|
951
|
+
}, fr = (e, t, n) => {
|
|
922
952
|
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = (t) => e.junction === void 0 ? void 0 : {
|
|
923
953
|
projection: e.junction,
|
|
924
954
|
source: t
|
|
925
955
|
}, l = r`${H(s, i.sourceKey, r)} = ${H(t, "id", r)}`, u = r`${H(o, "id", r)} = ${H(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${L(q(e.branch.where), r)}`, f = K(e, s, r, !0), p = e.branch.orderBy ?? [];
|
|
926
956
|
if (!(e.branch.limit !== void 0 || e.branch.offset !== void 0)) {
|
|
927
|
-
let t = V(o, e.target, e.children, n, c(
|
|
957
|
+
let t = V(o, e.target, e.children, n, c(tr(s)));
|
|
928
958
|
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`${H(o, e.column, r)} DESC` : r`${H(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())`;
|
|
929
959
|
}
|
|
930
|
-
let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${H(o, e.column, r)} DESC` : r`${H(o, e.column, r)} ASC`))}` : r` ORDER BY ${H(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset,
|
|
931
|
-
if (
|
|
932
|
-
let
|
|
933
|
-
return r`COALESCE((SELECT JSON_ARRAYAGG(${
|
|
934
|
-
},
|
|
935
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
960
|
+
let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${H(o, e.column, r)} DESC` : r`${H(o, e.column, r)} ASC`))}` : r` ORDER BY ${H(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, ee = h !== void 0 && g !== void 0 ? r` AND ${H(o, "rn", r)} > ${W(g, r)} AND ${H(o, "rn", r)} <= ${W(g + h, r)}` : h === void 0 ? r` AND ${H(o, "rn", r)} > ${W(g, r)}` : r` AND ${H(o, "rn", r)} <= ${W(h, r)}`, te = e.branch.onJunction === void 0 ? r`` : r` WHERE ${G(q(e.branch.onJunction), s, r)}`, _ = V(o, e.target, e.children, n, c(er(o)));
|
|
961
|
+
if (_ === null) return null;
|
|
962
|
+
let v = e.junction === void 0 ? r`` : $n(e.junction, s, r);
|
|
963
|
+
return r`COALESCE((SELECT JSON_ARRAYAGG(${_} ORDER BY ${H(o, "rn", r)}) FROM (SELECT ${r(o)}.*${v}, ${H(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${H(s, i.sourceKey, r)}${m}) AS rn FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u}${te}) AS ${r(o)} WHERE ${H(o, `__src_${i.sourceKey}`, r)} = ${H(t, "id", r)}${d}${ee}), JSON_ARRAY())`;
|
|
964
|
+
}, pr = (e, t, n) => {
|
|
965
|
+
let r = n.sql, i = n.nextAlias(), a = mr(i, t.table, t.children, n);
|
|
936
966
|
if (a === null) return null;
|
|
937
967
|
let o = e.predicate ? r` WHERE ${G(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${H(i, e.column, r)} DESC` : r`${H(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
|
|
938
968
|
if (e.skip !== void 0) {
|
|
@@ -941,28 +971,28 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
941
971
|
} else e.take !== void 0 && (c = r`TOP ${W(e.take, r)} `);
|
|
942
972
|
let u = e.skip === void 0 ? s : r``;
|
|
943
973
|
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}`;
|
|
944
|
-
},
|
|
974
|
+
}, mr = (e, t, n, r, i) => {
|
|
945
975
|
let a = r.sql, o = [];
|
|
946
976
|
for (let n of Object.keys(t.fields)) o.push(a`${H(e, n, a)} AS ${a(n)}`);
|
|
947
|
-
if (i !== void 0) for (let e of i.projection.present) o.push(a`${H(i.source.alias, i.source.physical(e), a)} AS ${
|
|
977
|
+
if (i !== void 0) for (let e of i.projection.present) o.push(a`${H(i.source.alias, i.source.physical(e), a)} AS ${hr(`_junction.${e}`, a)}`);
|
|
948
978
|
for (let t of n) {
|
|
949
|
-
let n =
|
|
979
|
+
let n = gr(t, e, r);
|
|
950
980
|
if (n === null) return null;
|
|
951
981
|
o.push(n);
|
|
952
982
|
}
|
|
953
983
|
return a.csv(o);
|
|
954
|
-
},
|
|
984
|
+
}, hr = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), gr = (e, t, n) => {
|
|
955
985
|
switch (e.relation.kind) {
|
|
956
|
-
case "one": return z(e) ?
|
|
957
|
-
case "many": return
|
|
958
|
-
case "manyToMany": return
|
|
986
|
+
case "one": return z(e) ? yr(On(e), t, n) : _r(e, t, n);
|
|
987
|
+
case "many": return yr(e, t, n);
|
|
988
|
+
case "manyToMany": return br(e, t, n);
|
|
959
989
|
}
|
|
960
|
-
},
|
|
961
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
990
|
+
}, _r = (e, t, n) => {
|
|
991
|
+
let r = n.sql, i = n.nextAlias(), a = mr(i, e.target, e.children, n);
|
|
962
992
|
if (a === null) return null;
|
|
963
993
|
let o = e.fkSide === "source" ? r`${H(i, "id", r)} = ${H(t, e.foreignKey, r)}` : r`${H(i, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}`;
|
|
964
994
|
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)}`;
|
|
965
|
-
},
|
|
995
|
+
}, vr = (e, t, n) => {
|
|
966
996
|
if (e.offset !== void 0) {
|
|
967
997
|
let r = e.orderBy && e.orderBy.length > 0 ? t : n` ORDER BY (SELECT NULL)`, i = e.limit === void 0 ? n`${r} OFFSET ${W(e.offset, n)} ROWS` : n`${r} OFFSET ${W(e.offset, n)} ROWS FETCH NEXT ${W(e.limit, n)} ROWS ONLY`;
|
|
968
998
|
return {
|
|
@@ -976,29 +1006,29 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
976
1006
|
pagination: n``,
|
|
977
1007
|
finalOrder: t
|
|
978
1008
|
};
|
|
979
|
-
},
|
|
980
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1009
|
+
}, yr = (e, t, n) => {
|
|
1010
|
+
let r = n.sql, i = n.nextAlias(), a = mr(i, e.target, e.children, n);
|
|
981
1011
|
if (a === null) return null;
|
|
982
|
-
let o = e.branch.where === void 0 ? r`` : r` AND ${G(e.branch.where, i, r)}`, s = B(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } =
|
|
1012
|
+
let o = e.branch.where === void 0 ? r`` : r` AND ${G(e.branch.where, i, r)}`, s = B(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } = vr(e.branch, s, r);
|
|
983
1013
|
return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${H(i, e.foreignKey, r)} = ${H(t, e.sourceKey, r)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
|
|
984
|
-
},
|
|
985
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
1014
|
+
}, br = (e, t, n) => {
|
|
1015
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = mr(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
|
|
986
1016
|
projection: e.junction,
|
|
987
|
-
source:
|
|
1017
|
+
source: tr(s)
|
|
988
1018
|
});
|
|
989
1019
|
if (c === null) return null;
|
|
990
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${G(e.branch.where, o, r)}`, u = K(e, s, r), d = B(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } =
|
|
1020
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${G(e.branch.where, o, r)}`, u = K(e, s, r), d = B(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } = vr(e.branch, d, r);
|
|
991
1021
|
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 ${H(o, "id", r)} = ${H(s, i.targetKey, r)} WHERE ${H(s, i.sourceKey, r)} = ${H(t, "id", r)}${u}${l}${m}${p} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
|
|
992
1022
|
}, H = (e, t, n) => e === void 0 ? n`${n(t)}` : n`${n(e)}.${n(t)}`, U = (e, t) => t.unsafe(`'${e.replace(/'/g, "''")}'`), W = (e, t) => {
|
|
993
1023
|
if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`literalInt: expected non-negative integer, got ${e}`);
|
|
994
1024
|
return t.unsafe(String(e));
|
|
995
|
-
}, G = (e, t, n) => L(
|
|
1025
|
+
}, G = (e, t, n) => L(xr(e, t), n), K = (e, t, n, r = !1) => {
|
|
996
1026
|
let i = e.branch.onJunction;
|
|
997
1027
|
return i === void 0 ? n`` : n` AND ${G(r ? q(i) : i, t, n)}`;
|
|
998
|
-
},
|
|
999
|
-
if ("not" in e) return { not:
|
|
1000
|
-
if ("and" in e) return { and: e.and.map((e) =>
|
|
1001
|
-
if ("or" in e) return { or: e.or.map((e) =>
|
|
1028
|
+
}, xr = (e, t) => {
|
|
1029
|
+
if ("not" in e) return { not: xr(e.not, t) };
|
|
1030
|
+
if ("and" in e) return { and: e.and.map((e) => xr(e, t)) };
|
|
1031
|
+
if ("or" in e) return { or: e.or.map((e) => xr(e, t)) };
|
|
1002
1032
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
1003
1033
|
let n = e;
|
|
1004
1034
|
return {
|
|
@@ -1020,83 +1050,83 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1020
1050
|
let t = e;
|
|
1021
1051
|
return {
|
|
1022
1052
|
...t,
|
|
1023
|
-
value:
|
|
1053
|
+
value: Sr(t.value)
|
|
1024
1054
|
};
|
|
1025
|
-
},
|
|
1026
|
-
e.actors !== void 0 && (
|
|
1027
|
-
},
|
|
1055
|
+
}, Sr = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => Sr(e)) : e, Cr = Symbol.for("@voltro/database/coreTablesRegistry"), wr = globalThis, Tr = wr[Cr] ?? (wr[Cr] = {}), Er = (e) => {
|
|
1056
|
+
e.actors !== void 0 && (Tr.actors = e.actors), e.tenants !== void 0 && (Tr.tenants = e.tenants);
|
|
1057
|
+
}, Dr = (e, t) => () => {
|
|
1028
1058
|
let n = e();
|
|
1029
1059
|
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`);
|
|
1030
1060
|
return n();
|
|
1031
|
-
},
|
|
1032
|
-
id:
|
|
1033
|
-
kind:
|
|
1061
|
+
}, Or = () => Dr(() => Tr.actors, "actors"), kr = () => Dr(() => Tr.tenants, "tenants"), Ar = C("actors", {
|
|
1062
|
+
id: D(),
|
|
1063
|
+
kind: v().oneOf([
|
|
1034
1064
|
"user",
|
|
1035
1065
|
"serviceAccount",
|
|
1036
1066
|
"apiKey",
|
|
1037
1067
|
"system"
|
|
1038
1068
|
]),
|
|
1039
|
-
displayName:
|
|
1040
|
-
createdAt:
|
|
1041
|
-
}),
|
|
1069
|
+
displayName: v().nullable(),
|
|
1070
|
+
createdAt: E().default("now")
|
|
1071
|
+
}), jr = (e, t) => ({
|
|
1042
1072
|
column: e,
|
|
1043
1073
|
op: "eq",
|
|
1044
1074
|
value: t
|
|
1045
|
-
}),
|
|
1075
|
+
}), Mr = (e, t) => ({
|
|
1046
1076
|
column: e,
|
|
1047
1077
|
op: "neq",
|
|
1048
1078
|
value: t
|
|
1049
|
-
}),
|
|
1079
|
+
}), Nr = (e, t) => ({
|
|
1050
1080
|
column: e,
|
|
1051
1081
|
op: "gt",
|
|
1052
1082
|
value: t
|
|
1053
|
-
}),
|
|
1083
|
+
}), Pr = (e, t) => ({
|
|
1054
1084
|
column: e,
|
|
1055
1085
|
op: "gte",
|
|
1056
1086
|
value: t
|
|
1057
|
-
}),
|
|
1087
|
+
}), Fr = (e, t) => ({
|
|
1058
1088
|
column: e,
|
|
1059
1089
|
op: "lt",
|
|
1060
1090
|
value: t
|
|
1061
|
-
}),
|
|
1091
|
+
}), Ir = (e, t) => ({
|
|
1062
1092
|
column: e,
|
|
1063
1093
|
op: "lte",
|
|
1064
1094
|
value: t
|
|
1065
|
-
}),
|
|
1095
|
+
}), Lr = (e, t) => ({
|
|
1066
1096
|
column: e,
|
|
1067
1097
|
op: "in",
|
|
1068
1098
|
value: t
|
|
1069
|
-
}),
|
|
1099
|
+
}), Rr = (e, t) => ({
|
|
1070
1100
|
column: e,
|
|
1071
1101
|
op: "notIn",
|
|
1072
1102
|
value: t
|
|
1073
|
-
}),
|
|
1103
|
+
}), zr = (e, t) => ({
|
|
1074
1104
|
column: e,
|
|
1075
1105
|
op: "contains",
|
|
1076
1106
|
value: t
|
|
1077
|
-
}),
|
|
1107
|
+
}), Br = (e, t) => ({
|
|
1078
1108
|
column: e,
|
|
1079
1109
|
op: "arrayContains",
|
|
1080
1110
|
value: t
|
|
1081
|
-
}),
|
|
1111
|
+
}), Vr = (e, t) => ({
|
|
1082
1112
|
column: e,
|
|
1083
1113
|
op: "arrayOverlaps",
|
|
1084
1114
|
value: t
|
|
1085
|
-
}),
|
|
1115
|
+
}), Hr = (e, t) => ({
|
|
1086
1116
|
column: e,
|
|
1087
1117
|
op: "arrayHas",
|
|
1088
1118
|
value: t
|
|
1089
|
-
}),
|
|
1119
|
+
}), Ur = (e) => ({
|
|
1090
1120
|
column: e,
|
|
1091
1121
|
op: "isNull"
|
|
1092
|
-
}),
|
|
1122
|
+
}), Wr = (e) => ({
|
|
1093
1123
|
column: e,
|
|
1094
1124
|
op: "isNotNull"
|
|
1095
|
-
}),
|
|
1125
|
+
}), Gr = (e, t) => ({
|
|
1096
1126
|
column: e,
|
|
1097
1127
|
op: "spatial",
|
|
1098
1128
|
value: t
|
|
1099
|
-
}),
|
|
1129
|
+
}), Kr = (...e) => ({ and: e }), qr = (...e) => ({ or: e }), Jr = (e) => ({ not: e }), Yr = (e, ...t) => {
|
|
1100
1130
|
if (t.length === 0) throw Error(`jsonField("${e}"): at least one path segment is required`);
|
|
1101
1131
|
let n = (n, r) => ({
|
|
1102
1132
|
column: e,
|
|
@@ -1117,29 +1147,29 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1117
1147
|
isNull: () => n("isNull"),
|
|
1118
1148
|
isNotNull: () => n("isNotNull")
|
|
1119
1149
|
};
|
|
1120
|
-
},
|
|
1150
|
+
}, Xr = (e) => "descriptor" in e ? e.descriptor : e, Zr = (e, t) => ({
|
|
1121
1151
|
column: e,
|
|
1122
1152
|
op: "subquery-in",
|
|
1123
|
-
subquery:
|
|
1124
|
-
}),
|
|
1153
|
+
subquery: Xr(t)
|
|
1154
|
+
}), Qr = (e, t) => ({
|
|
1125
1155
|
column: e,
|
|
1126
1156
|
op: "subquery-not-in",
|
|
1127
|
-
subquery:
|
|
1128
|
-
}),
|
|
1157
|
+
subquery: Xr(t)
|
|
1158
|
+
}), $r = (e) => ({
|
|
1129
1159
|
op: "exists",
|
|
1130
|
-
subquery:
|
|
1131
|
-
}),
|
|
1160
|
+
subquery: Xr(e)
|
|
1161
|
+
}), ei = (e) => ({
|
|
1132
1162
|
op: "not-exists",
|
|
1133
|
-
subquery:
|
|
1134
|
-
}),
|
|
1163
|
+
subquery: Xr(e)
|
|
1164
|
+
}), ti = (e, t) => e == null || t == null ? null : typeof e == typeof t ? e === t ? 0 : e > t ? 1 : -1 : null, ni = (e, t, n = null) => {
|
|
1135
1165
|
if (!t) return !1;
|
|
1136
|
-
if ("not" in e) return !
|
|
1166
|
+
if ("not" in e) return !ni(e.not, t, n);
|
|
1137
1167
|
if ("and" in e) {
|
|
1138
|
-
for (let r of e.and) if (!
|
|
1168
|
+
for (let r of e.and) if (!ni(r, t, n)) return !1;
|
|
1139
1169
|
return !0;
|
|
1140
1170
|
}
|
|
1141
1171
|
if ("or" in e) {
|
|
1142
|
-
for (let r of e.or) if (
|
|
1172
|
+
for (let r of e.or) if (ni(r, t, n)) return !0;
|
|
1143
1173
|
return !1;
|
|
1144
1174
|
}
|
|
1145
1175
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
@@ -1158,10 +1188,10 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1158
1188
|
switch (r.op) {
|
|
1159
1189
|
case "eq": return i === r.value;
|
|
1160
1190
|
case "neq": return i !== r.value;
|
|
1161
|
-
case "gt": return (
|
|
1162
|
-
case "gte": return (
|
|
1163
|
-
case "lt": return (
|
|
1164
|
-
case "lte": return (
|
|
1191
|
+
case "gt": return (ti(i, r.value) ?? -1) > 0;
|
|
1192
|
+
case "gte": return (ti(i, r.value) ?? -1) >= 0;
|
|
1193
|
+
case "lt": return (ti(i, r.value) ?? 1) < 0;
|
|
1194
|
+
case "lte": return (ti(i, r.value) ?? 1) <= 0;
|
|
1165
1195
|
case "in": return Array.isArray(r.value) && r.value.includes(i);
|
|
1166
1196
|
case "notIn": return Array.isArray(r.value) && !r.value.includes(i);
|
|
1167
1197
|
case "contains": return typeof i == "string" && typeof r.value == "string" && i.toLowerCase().includes(r.value.toLowerCase());
|
|
@@ -1178,17 +1208,17 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1178
1208
|
case "isNotNull": return i != null;
|
|
1179
1209
|
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.");
|
|
1180
1210
|
}
|
|
1181
|
-
},
|
|
1211
|
+
}, ri = function* (e) {
|
|
1182
1212
|
if ("not" in e) {
|
|
1183
|
-
yield*
|
|
1213
|
+
yield* ri(e.not);
|
|
1184
1214
|
return;
|
|
1185
1215
|
}
|
|
1186
1216
|
if ("and" in e) {
|
|
1187
|
-
for (let t of e.and) yield*
|
|
1217
|
+
for (let t of e.and) yield* ri(t);
|
|
1188
1218
|
return;
|
|
1189
1219
|
}
|
|
1190
1220
|
if ("or" in e) {
|
|
1191
|
-
for (let t of e.or) yield*
|
|
1221
|
+
for (let t of e.or) yield* ri(t);
|
|
1192
1222
|
return;
|
|
1193
1223
|
}
|
|
1194
1224
|
e.op === "subquery-in" || e.op === "subquery-not-in" ? yield {
|
|
@@ -1198,27 +1228,27 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1198
1228
|
kind: "exists",
|
|
1199
1229
|
descriptor: e.subquery
|
|
1200
1230
|
});
|
|
1201
|
-
},
|
|
1231
|
+
}, ii = function* (e, t = !0) {
|
|
1202
1232
|
if ("not" in e) {
|
|
1203
|
-
yield*
|
|
1233
|
+
yield* ii(e.not, !1);
|
|
1204
1234
|
return;
|
|
1205
1235
|
}
|
|
1206
1236
|
if ("and" in e) {
|
|
1207
|
-
for (let n of e.and) yield*
|
|
1237
|
+
for (let n of e.and) yield* ii(n, t);
|
|
1208
1238
|
return;
|
|
1209
1239
|
}
|
|
1210
1240
|
if ("or" in e) {
|
|
1211
|
-
for (let t of e.or) yield*
|
|
1241
|
+
for (let t of e.or) yield* ii(t, !1);
|
|
1212
1242
|
return;
|
|
1213
1243
|
}
|
|
1214
1244
|
e.op === "subquery-in" || e.op === "subquery-not-in" || e.op === "exists" || e.op === "not-exists" || (yield {
|
|
1215
1245
|
...e,
|
|
1216
1246
|
conjunctive: t
|
|
1217
1247
|
});
|
|
1218
|
-
},
|
|
1219
|
-
let i =
|
|
1248
|
+
}, ai = class extends at.TaggedError("TableStreamError") {}, oi = 1e3, si = (e, t, n, r) => {
|
|
1249
|
+
let i = O.match(r, {
|
|
1220
1250
|
onNone: () => e.where,
|
|
1221
|
-
onSome: (n) => e.where ?
|
|
1251
|
+
onSome: (n) => e.where ? Kr(e.where, Nr(t, n)) : Nr(t, n)
|
|
1222
1252
|
});
|
|
1223
1253
|
return {
|
|
1224
1254
|
table: e.table,
|
|
@@ -1233,19 +1263,19 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1233
1263
|
...e.includeDeleted === void 0 ? {} : { includeDeleted: e.includeDeleted },
|
|
1234
1264
|
...e.crossTenant === void 0 ? {} : { crossTenant: e.crossTenant }
|
|
1235
1265
|
};
|
|
1236
|
-
},
|
|
1237
|
-
let n = t.pk ?? "id", r = t.chunkSize ??
|
|
1238
|
-
return
|
|
1239
|
-
let a =
|
|
1240
|
-
try: () => e.query(
|
|
1241
|
-
catch: (e) => new
|
|
1266
|
+
}, ci = (e, t) => {
|
|
1267
|
+
let n = t.pk ?? "id", r = t.chunkSize ?? oi;
|
|
1268
|
+
return st.paginateChunkEffect(O.none(), (i) => {
|
|
1269
|
+
let a = ot.tryPromise({
|
|
1270
|
+
try: () => e.query(si(t, n, r, i)),
|
|
1271
|
+
catch: (e) => new ai({
|
|
1242
1272
|
table: t.table,
|
|
1243
1273
|
cause: e
|
|
1244
1274
|
})
|
|
1245
1275
|
});
|
|
1246
|
-
return (t.retry ? a.pipe(
|
|
1276
|
+
return (t.retry ? a.pipe(ot.retry(t.retry)) : a).pipe(ot.map((e) => [it.fromIterable(e), e.length === r && e.length > 0 ? O.some(O.some(e[e.length - 1][n])) : O.none()]));
|
|
1247
1277
|
});
|
|
1248
|
-
},
|
|
1278
|
+
}, li = (e) => {
|
|
1249
1279
|
let t = e.alpha ?? .5;
|
|
1250
1280
|
if (t < 0 || t > 1) throw Error(`hybridSearch: alpha must be in [0, 1], got ${t}`);
|
|
1251
1281
|
return (n) => {
|
|
@@ -1272,15 +1302,15 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1272
1302
|
}
|
|
1273
1303
|
};
|
|
1274
1304
|
};
|
|
1275
|
-
},
|
|
1305
|
+
}, ui = async (e, t) => {
|
|
1276
1306
|
let n = e.as ?? "embedding", r = t.row[e.from];
|
|
1277
1307
|
if (typeof r != "string" || r.length === 0) return {};
|
|
1278
1308
|
let i = await t.embed(r);
|
|
1279
1309
|
return { [n]: i };
|
|
1280
|
-
},
|
|
1310
|
+
}, di = (e) => {
|
|
1281
1311
|
if (!Number.isInteger(e.dimensions) || e.dimensions <= 0) throw Error(`vectorEmbedding: dimensions must be a positive integer, got ${String(e.dimensions)}.`);
|
|
1282
|
-
let t = e.as ?? "embedding", r = (t) =>
|
|
1283
|
-
return
|
|
1312
|
+
let t = e.as ?? "embedding", r = (t) => ui(e, t);
|
|
1313
|
+
return ae({
|
|
1284
1314
|
id: "voltro/vectorEmbedding",
|
|
1285
1315
|
fields: { [t]: n(e.dimensions) },
|
|
1286
1316
|
...e.index === !1 ? {} : { indexes: [{
|
|
@@ -1297,19 +1327,19 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1297
1327
|
beforeUpdate: r
|
|
1298
1328
|
}
|
|
1299
1329
|
});
|
|
1300
|
-
},
|
|
1330
|
+
}, fi = 63, pi = "br_pr", J = class extends Error {
|
|
1301
1331
|
_tag = "BranchNameInvalid";
|
|
1302
1332
|
constructor(e) {
|
|
1303
1333
|
super(e), this.name = "BranchNameInvalid";
|
|
1304
1334
|
}
|
|
1305
|
-
},
|
|
1335
|
+
}, mi = (e, t) => {
|
|
1306
1336
|
if (!Number.isInteger(t) || t < 0) throw new J(`prNumber must be a non-negative integer, got ${String(t)}`);
|
|
1307
|
-
let n =
|
|
1337
|
+
let n = pn(e);
|
|
1308
1338
|
if (n.replace(/_/g, "") === "") throw new J(`app slug '${e}' has no usable identifier characters`);
|
|
1309
|
-
let r = `${
|
|
1310
|
-
if (r.length >
|
|
1339
|
+
let r = `${pi}${t}_${n}`;
|
|
1340
|
+
if (r.length > fi) throw new J(`branch namespace '${r}' exceeds the ${fi}-byte identifier limit — use a shorter app slug`);
|
|
1311
1341
|
return r;
|
|
1312
|
-
},
|
|
1342
|
+
}, hi = (e) => e.startsWith(pi), gi = {
|
|
1313
1343
|
requested: {
|
|
1314
1344
|
provision: "provisioning",
|
|
1315
1345
|
destroy: "destroying"
|
|
@@ -1328,18 +1358,18 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1328
1358
|
fail: "failed"
|
|
1329
1359
|
},
|
|
1330
1360
|
destroyed: {}
|
|
1331
|
-
},
|
|
1361
|
+
}, _i = class extends Error {
|
|
1332
1362
|
from;
|
|
1333
1363
|
event;
|
|
1334
1364
|
_tag = "BranchTransitionInvalid";
|
|
1335
1365
|
constructor(e, t) {
|
|
1336
1366
|
super(`invalid branch transition: ${e} --${t}-->`), this.from = e, this.event = t, this.name = "BranchTransitionInvalid";
|
|
1337
1367
|
}
|
|
1338
|
-
},
|
|
1339
|
-
let n =
|
|
1340
|
-
if (n === void 0) throw new
|
|
1368
|
+
}, vi = (e, t) => {
|
|
1369
|
+
let n = gi[e][t];
|
|
1370
|
+
if (n === void 0) throw new _i(e, t);
|
|
1341
1371
|
return n;
|
|
1342
|
-
},
|
|
1372
|
+
}, yi = (e, t, n, r) => {
|
|
1343
1373
|
if (n === "copy" && (r === void 0 || r === "")) throw new J("seed 'copy' requires a parentNamespace to snapshot from");
|
|
1344
1374
|
let i = [{
|
|
1345
1375
|
kind: "create-namespace",
|
|
@@ -1360,13 +1390,13 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1360
1390
|
detail: `run boot seeds into ${e}`
|
|
1361
1391
|
});
|
|
1362
1392
|
return i;
|
|
1363
|
-
},
|
|
1364
|
-
if (!
|
|
1393
|
+
}, bi = (e) => {
|
|
1394
|
+
if (!hi(e)) throw new J(`refusing to plan teardown of '${e}' — not a branch namespace`);
|
|
1365
1395
|
return [{
|
|
1366
1396
|
kind: "drop-namespace",
|
|
1367
1397
|
detail: e
|
|
1368
1398
|
}];
|
|
1369
|
-
},
|
|
1399
|
+
}, xi = (e) => {
|
|
1370
1400
|
if (e === void 0 || e === "") return !1;
|
|
1371
1401
|
try {
|
|
1372
1402
|
let t = new URL(e).hostname.toLowerCase();
|
|
@@ -1374,27 +1404,27 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1374
1404
|
} catch {
|
|
1375
1405
|
return /\bneon\.(tech|build)\b/i.test(e);
|
|
1376
1406
|
}
|
|
1377
|
-
},
|
|
1407
|
+
}, Si = (e) => e.prefer === void 0 ? e.seed === "copy" && xi(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, Ci = (e, t = {}) => [{
|
|
1378
1408
|
kind: "neon-branch-create",
|
|
1379
1409
|
detail: `${t.parentBranch ?? "main"} → ${e} (copy-on-write)`
|
|
1380
|
-
}],
|
|
1381
|
-
if (!
|
|
1410
|
+
}], wi = (e) => {
|
|
1411
|
+
if (!hi(e)) throw new J(`refusing to plan teardown of '${e}' — not a branch namespace`);
|
|
1382
1412
|
return [{
|
|
1383
1413
|
kind: "neon-branch-delete",
|
|
1384
1414
|
detail: e
|
|
1385
1415
|
}];
|
|
1386
|
-
},
|
|
1416
|
+
}, Ti = (e) => e.mechanism === "neon-cow" ? Ci(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : yi(e.branchId, e.tableNames, e.seed, e.parentNamespace), Ei = (e, t) => e === "neon-cow" ? wi(t) : bi(t), Di = (e, t, n) => {
|
|
1387
1417
|
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);
|
|
1388
1418
|
return {
|
|
1389
1419
|
evict: i,
|
|
1390
1420
|
rejectNew: r.filter((e) => !a.has(e.namespace)).length >= t.maxBranches
|
|
1391
1421
|
};
|
|
1392
|
-
},
|
|
1393
|
-
let n =
|
|
1422
|
+
}, Oi = async (e, t) => {
|
|
1423
|
+
let n = mi(e.appSlug, e.prNumber), r = Si({
|
|
1394
1424
|
seed: e.seed,
|
|
1395
1425
|
...e.dbUrl === void 0 ? {} : { dbUrl: e.dbUrl },
|
|
1396
1426
|
...e.prefer === void 0 ? {} : { prefer: e.prefer }
|
|
1397
|
-
}), i =
|
|
1427
|
+
}), i = Ti({
|
|
1398
1428
|
mechanism: r,
|
|
1399
1429
|
branchId: n,
|
|
1400
1430
|
tableNames: e.tableNames,
|
|
@@ -1419,10 +1449,10 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1419
1449
|
mechanism: r,
|
|
1420
1450
|
steps: i
|
|
1421
1451
|
};
|
|
1422
|
-
},
|
|
1423
|
-
let r =
|
|
1452
|
+
}, ki = async (e, t, n) => {
|
|
1453
|
+
let r = Ei(t, e);
|
|
1424
1454
|
return t === "neon-cow" ? await n.neonBranchDelete(e) : await n.dropNamespace(e), r;
|
|
1425
|
-
},
|
|
1455
|
+
}, Ai = (e, t, n) => Di(e, t, n), Y = (e) => `"${e.replace(/"/g, "\"\"")}"`, ji = (e) => {
|
|
1426
1456
|
let t = () => {
|
|
1427
1457
|
throw Error("namespace branch executor: Neon ops require a neon-cow executor (use a Neon connection for copy-on-write branches)");
|
|
1428
1458
|
};
|
|
@@ -1434,18 +1464,18 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1434
1464
|
neonBranchCreate: t,
|
|
1435
1465
|
neonBranchDelete: t
|
|
1436
1466
|
};
|
|
1437
|
-
},
|
|
1467
|
+
}, Mi = class extends Error {
|
|
1438
1468
|
_tag = "TenantResidencyUnresolved";
|
|
1439
1469
|
constructor(e) {
|
|
1440
1470
|
super(e), this.name = "TenantResidencyUnresolved";
|
|
1441
1471
|
}
|
|
1442
|
-
},
|
|
1472
|
+
}, Ni = class extends Error {
|
|
1443
1473
|
region;
|
|
1444
1474
|
_tag = "TenantRegionUnavailable";
|
|
1445
1475
|
constructor(e, t) {
|
|
1446
1476
|
super(t), this.region = e, this.name = "TenantRegionUnavailable";
|
|
1447
1477
|
}
|
|
1448
|
-
},
|
|
1478
|
+
}, Pi, Fi = (e) => {
|
|
1449
1479
|
if (e.homes === void 0) throw Error("setResidencyConfig: `homes` is required");
|
|
1450
1480
|
if (e.servableRegions === void 0 || e.servableRegions.length === 0) throw Error("setResidencyConfig: `servableRegions` must be non-empty (which regions this deployment serves)");
|
|
1451
1481
|
let t = /* @__PURE__ */ new Map();
|
|
@@ -1454,32 +1484,32 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1454
1484
|
if (e !== void 0 && e !== n.region) throw Error(`residency: tenant '${n.tenantId}' is mapped to two regions ('${e}' and '${n.region}')`);
|
|
1455
1485
|
t.set(n.tenantId, n.region);
|
|
1456
1486
|
}
|
|
1457
|
-
return
|
|
1458
|
-
},
|
|
1459
|
-
|
|
1460
|
-
},
|
|
1461
|
-
if (e == null || e === "") throw new
|
|
1487
|
+
return Pi = e, e;
|
|
1488
|
+
}, Ii = () => Pi, Li = () => {
|
|
1489
|
+
Pi = void 0;
|
|
1490
|
+
}, Ri = (e, t) => {
|
|
1491
|
+
if (e == null || e === "") throw new Mi("residency is on but the request has no resolvable tenant — refusing to bind a store");
|
|
1462
1492
|
let n = t.homes.find((t) => t.tenantId === e);
|
|
1463
|
-
if (n === void 0) throw new
|
|
1493
|
+
if (n === void 0) throw new Mi(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
|
|
1464
1494
|
return n;
|
|
1465
|
-
},
|
|
1466
|
-
let n =
|
|
1495
|
+
}, zi = (e, t) => t.servableRegions.includes(e), Bi = (e, t) => {
|
|
1496
|
+
let n = Ri(e.tenantId, t), r = mn(n.tenantId);
|
|
1467
1497
|
return {
|
|
1468
1498
|
region: n.region,
|
|
1469
1499
|
namespace: r,
|
|
1470
1500
|
...n.connectionKey === void 0 ? {} : { connectionKey: n.connectionKey }
|
|
1471
1501
|
};
|
|
1472
|
-
},
|
|
1473
|
-
let r =
|
|
1474
|
-
if (!
|
|
1502
|
+
}, Vi = (e, t, n) => {
|
|
1503
|
+
let r = Bi(e, t);
|
|
1504
|
+
if (!zi(r.region, t)) throw new Ni(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
|
|
1475
1505
|
let i = n.get(r.region);
|
|
1476
|
-
if (i === void 0) throw new
|
|
1506
|
+
if (i === void 0) throw new Ni(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
|
|
1477
1507
|
return {
|
|
1478
1508
|
store: i,
|
|
1479
1509
|
placement: r
|
|
1480
1510
|
};
|
|
1481
|
-
},
|
|
1482
|
-
let { store: i, placement: a } =
|
|
1511
|
+
}, Hi = async (e, t, n, r) => {
|
|
1512
|
+
let { store: i, placement: a } = Vi(e, t, n);
|
|
1483
1513
|
return await r(i, a), a;
|
|
1484
1514
|
}, X = (e) => {
|
|
1485
1515
|
if (typeof e == "string") return e;
|
|
@@ -1488,21 +1518,21 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1488
1518
|
return `(json:${t}->${n.join(".")}${r ? "::num" : ""})`;
|
|
1489
1519
|
}
|
|
1490
1520
|
return `(${e.expr})`;
|
|
1491
|
-
}, Z = (e) => e.map(X),
|
|
1521
|
+
}, Z = (e) => e.map(X), Ui = (e, t) => {
|
|
1492
1522
|
if (e.length !== t.length) return !1;
|
|
1493
1523
|
for (let n = 0; n < e.length; n++) if (X(e[n]) !== X(t[n])) return !1;
|
|
1494
1524
|
return !0;
|
|
1495
|
-
},
|
|
1525
|
+
}, Wi = (e, t) => {
|
|
1496
1526
|
if (e.length >= t.length) return !1;
|
|
1497
1527
|
for (let n = 0; n < e.length; n++) if (X(e[n]) !== X(t[n])) return !1;
|
|
1498
1528
|
return !0;
|
|
1499
|
-
},
|
|
1529
|
+
}, Gi = (e) => {
|
|
1500
1530
|
let t = [], n = e.appliedIndexes, r = e.tableName;
|
|
1501
1531
|
for (let e = 0; e < n.length; e++) {
|
|
1502
1532
|
let i = n[e];
|
|
1503
1533
|
for (let a = e + 1; a < n.length; a++) {
|
|
1504
1534
|
let e = n[a];
|
|
1505
|
-
if (
|
|
1535
|
+
if (Ui(i.fields, e.fields)) {
|
|
1506
1536
|
let [n, a] = i.name < e.name ? [i, e] : [e, i];
|
|
1507
1537
|
t.push({
|
|
1508
1538
|
kind: "duplicate-fields",
|
|
@@ -1513,13 +1543,13 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1513
1543
|
});
|
|
1514
1544
|
continue;
|
|
1515
1545
|
}
|
|
1516
|
-
|
|
1546
|
+
Wi(i.fields, e.fields) ? t.push({
|
|
1517
1547
|
kind: "redundant-prefix",
|
|
1518
1548
|
table: r,
|
|
1519
1549
|
redundant: i,
|
|
1520
1550
|
coveredBy: e,
|
|
1521
1551
|
message: `'${r}' index '${i.name}' on [${Z(i.fields).join(", ")}] is a leading prefix of '${e.name}' on [${Z(e.fields).join(", ")}]. Every B-tree dialect we support (Postgres / MySQL / MariaDB / MSSQL / SQLite) can serve a [${Z(i.fields).join(", ")}] query from '${e.name}' too via the leading-prefix rule, so '${i.name}' adds write cost without read benefit. Drop '${i.name}' — unless you specifically need a smaller index for cache locality on a write-heavy table (rare; profile first).`
|
|
1522
|
-
}) :
|
|
1552
|
+
}) : Wi(e.fields, i.fields) && t.push({
|
|
1523
1553
|
kind: "redundant-prefix",
|
|
1524
1554
|
table: r,
|
|
1525
1555
|
redundant: e,
|
|
@@ -1529,23 +1559,23 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1529
1559
|
}
|
|
1530
1560
|
}
|
|
1531
1561
|
return t;
|
|
1532
|
-
},
|
|
1562
|
+
}, Ki = (e) => {
|
|
1533
1563
|
let t = [];
|
|
1534
|
-
for (let n of e) t.push(...
|
|
1564
|
+
for (let n of e) t.push(...Gi(n));
|
|
1535
1565
|
return t;
|
|
1536
|
-
},
|
|
1537
|
-
let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => Q(n,
|
|
1566
|
+
}, qi = "\x1B[", Ji = `${qi}38;2;245;158;11m`, Yi = `${qi}38;2;16;185;129m`, Xi = (e, t) => `${e}${t}${A.reset}`, Q = (e, t, n) => e ? typeof t == "function" ? t(n) : Xi(t, n) : n, Zi = (e, t = {}) => {
|
|
1567
|
+
let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => Q(n, A.dim, e.padEnd(11)), a = (e) => Q(n, (e) => A.bold(A.brand(e)), e), o = (e) => Q(n, A.brightRed24, e), s = (e) => Q(n, Yi, e), c = (e) => Q(n, Ji, e), l = (e) => Q(n, A.dim, e), u = `${c("index audit")} ${l("·")} ${Q(n, A.bold, e.kind)}`, d = e.redundant.fields.length, f = Z(e.coveredBy.fields.slice(d)), p = (e, t) => {
|
|
1538
1568
|
let n = e.slice(0, t), r = e.slice(t), i = [];
|
|
1539
1569
|
return n.length > 0 && i.push(s(`[${n.join(", ")}]`)), r.length > 0 && i.push(c(`+ [${r.join(", ")}]`)), i.join(" ");
|
|
1540
1570
|
}, m = [];
|
|
1541
|
-
return m.push(u), m.push(""), m.push(`${i("table")}${a(e.table)}`), m.push(""), m.push(`${i("redundant")}${o(e.redundant.name)}`), m.push(`${i("")}${p(Z(e.redundant.fields), d)}`), m.push(""), m.push(`${i("covered by")}${s(e.coveredBy.name)}`), m.push(`${i("")}${p(Z(e.coveredBy.fields), d)}`), f.length > 0 && m.push(`${i("")}${l(`└ extra columns: ${f.join(", ")}`)}`), m.push(""), e.kind === "redundant-prefix" ? (m.push(`${i("why")}B-tree indexes serve queries that filter on a LEADING PREFIX of`), m.push(`${i("")}their column list. The wider index already covers every`), m.push(`${i("")}query the narrower one can serve.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)) : (m.push(`${i("why")}Two indexes on the same columns under different names.`), m.push(`${i("")}The B-tree engine builds both — same coverage, double cost.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)), m.push(""), m.push(`${i("cost")}Every ${a("INSERT")} / ${a("UPDATE")} / ${a("DELETE")} on this table writes`), m.push(`${i("")}to ${Q(n,
|
|
1542
|
-
},
|
|
1571
|
+
return m.push(u), m.push(""), m.push(`${i("table")}${a(e.table)}`), m.push(""), m.push(`${i("redundant")}${o(e.redundant.name)}`), m.push(`${i("")}${p(Z(e.redundant.fields), d)}`), m.push(""), m.push(`${i("covered by")}${s(e.coveredBy.name)}`), m.push(`${i("")}${p(Z(e.coveredBy.fields), d)}`), f.length > 0 && m.push(`${i("")}${l(`└ extra columns: ${f.join(", ")}`)}`), m.push(""), e.kind === "redundant-prefix" ? (m.push(`${i("why")}B-tree indexes serve queries that filter on a LEADING PREFIX of`), m.push(`${i("")}their column list. The wider index already covers every`), m.push(`${i("")}query the narrower one can serve.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)) : (m.push(`${i("why")}Two indexes on the same columns under different names.`), m.push(`${i("")}The B-tree engine builds both — same coverage, double cost.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)), m.push(""), m.push(`${i("cost")}Every ${a("INSERT")} / ${a("UPDATE")} / ${a("DELETE")} on this table writes`), m.push(`${i("")}to ${Q(n, A.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");
|
|
1572
|
+
}, Qi = (e, t) => ({
|
|
1543
1573
|
name: e,
|
|
1544
1574
|
body: t
|
|
1545
|
-
}),
|
|
1575
|
+
}), $i = (e) => {
|
|
1546
1576
|
if (e.lifecycle === "cron" && !e.cron) throw Error(`seed "${e.id}": lifecycle 'cron' requires a 'cron' field`);
|
|
1547
1577
|
if (e.lifecycle === "onSchemaChange" && (!e.watchedTables || e.watchedTables.length === 0)) throw Error(`seed "${e.id}": lifecycle 'onSchemaChange' requires at least one entry in 'watchedTables'`);
|
|
1548
|
-
let t = e.steps({ step:
|
|
1578
|
+
let t = e.steps({ step: Qi });
|
|
1549
1579
|
if (t.length === 0) throw Error(`seed "${e.id}": at least one step is required`);
|
|
1550
1580
|
return {
|
|
1551
1581
|
__seed: !0,
|
|
@@ -1557,13 +1587,13 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1557
1587
|
...e.fingerprint === void 0 ? {} : { fingerprint: e.fingerprint },
|
|
1558
1588
|
steps: t
|
|
1559
1589
|
};
|
|
1560
|
-
},
|
|
1590
|
+
}, ea = (e) => typeof e == "object" && !!e && "__seed" in e && e.__seed === !0, ta = (e, { apply: t, undo: n }) => ({
|
|
1561
1591
|
name: e,
|
|
1562
1592
|
apply: t,
|
|
1563
1593
|
undo: n
|
|
1564
|
-
}),
|
|
1594
|
+
}), na = (e) => {
|
|
1565
1595
|
if (!/^\d{14}_/.test(e.id)) throw Error(`migration "${e.id}": id must start with a 14-digit timestamp followed by "_" (convention: <YYYYMMDDHHMMSS>_<slug>)`);
|
|
1566
|
-
let t = e.steps({ step:
|
|
1596
|
+
let t = e.steps({ step: ta });
|
|
1567
1597
|
if (t.length === 0) throw Error(`migration "${e.id}": at least one step is required`);
|
|
1568
1598
|
return {
|
|
1569
1599
|
__migration: !0,
|
|
@@ -1571,80 +1601,80 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1571
1601
|
name: e.name,
|
|
1572
1602
|
steps: t
|
|
1573
1603
|
};
|
|
1574
|
-
},
|
|
1575
|
-
id:
|
|
1576
|
-
name:
|
|
1577
|
-
hash:
|
|
1578
|
-
status:
|
|
1579
|
-
appliedAt:
|
|
1580
|
-
durationMs:
|
|
1581
|
-
errorMessage:
|
|
1582
|
-
errorStack:
|
|
1583
|
-
workflowRunId:
|
|
1584
|
-
createdAt:
|
|
1585
|
-
updatedAt:
|
|
1586
|
-
}).index(["status"]).reactive(),
|
|
1587
|
-
id:
|
|
1588
|
-
name:
|
|
1589
|
-
lifecycle:
|
|
1590
|
-
fingerprint:
|
|
1591
|
-
cronSchedule:
|
|
1592
|
-
watchedTables:
|
|
1593
|
-
nextRunAt:
|
|
1594
|
-
lastRunStatus:
|
|
1595
|
-
lastRunAt:
|
|
1596
|
-
lastRunDurationMs:
|
|
1597
|
-
lastRunRowsTouched:
|
|
1598
|
-
lastError:
|
|
1599
|
-
workflowRunId:
|
|
1600
|
-
createdAt:
|
|
1601
|
-
updatedAt:
|
|
1602
|
-
}).index(["lifecycle"]).index(["nextRunAt"]).reactive(),
|
|
1603
|
-
id:
|
|
1604
|
-
fingerprint:
|
|
1605
|
-
operations:
|
|
1606
|
-
rollbackPlan:
|
|
1607
|
-
appliedBy:
|
|
1608
|
-
environment:
|
|
1609
|
-
source:
|
|
1610
|
-
onlineStrategy:
|
|
1611
|
-
durationMs:
|
|
1612
|
-
notes:
|
|
1613
|
-
squashedAt:
|
|
1614
|
-
appliedAt:
|
|
1615
|
-
createdAt:
|
|
1616
|
-
updatedAt:
|
|
1617
|
-
}).index(["fingerprint"]).index(["environment"]).reactive(),
|
|
1618
|
-
id:
|
|
1619
|
-
scope:
|
|
1620
|
-
key:
|
|
1621
|
-
status:
|
|
1622
|
-
response:
|
|
1623
|
-
createdAt:
|
|
1624
|
-
}).unique(["scope", "key"]).index(["createdAt"]).reactive(),
|
|
1625
|
-
id:
|
|
1626
|
-
key:
|
|
1627
|
-
value:
|
|
1628
|
-
expiresAt:
|
|
1629
|
-
createdAt:
|
|
1630
|
-
updatedAt:
|
|
1631
|
-
}).index(["expiresAt"]).reactive(),
|
|
1632
|
-
id:
|
|
1633
|
-
tenantId:
|
|
1634
|
-
name:
|
|
1635
|
-
hashedKey:
|
|
1636
|
-
keyPrefix:
|
|
1637
|
-
scopes:
|
|
1638
|
-
lastUsedAt:
|
|
1639
|
-
expiresAt:
|
|
1640
|
-
revokedAt:
|
|
1641
|
-
createdBy:
|
|
1642
|
-
createdAt:
|
|
1643
|
-
}).index("byTenant", ["tenantId"]).reactive(),
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
], $ = "id",
|
|
1604
|
+
}, ra = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, ia = C("_voltro_migrations", {
|
|
1605
|
+
id: D({ prefix: "mig" }),
|
|
1606
|
+
name: v(),
|
|
1607
|
+
hash: v(),
|
|
1608
|
+
status: v(),
|
|
1609
|
+
appliedAt: E().nullable(),
|
|
1610
|
+
durationMs: w().nullable(),
|
|
1611
|
+
errorMessage: v().nullable(),
|
|
1612
|
+
errorStack: v().nullable(),
|
|
1613
|
+
workflowRunId: v().nullable(),
|
|
1614
|
+
createdAt: E().default("now"),
|
|
1615
|
+
updatedAt: E().default("now").onUpdate("now")
|
|
1616
|
+
}).index(["status"]).reactive(), aa = C("_voltro_seeds", {
|
|
1617
|
+
id: D({ prefix: "seed" }),
|
|
1618
|
+
name: v(),
|
|
1619
|
+
lifecycle: v(),
|
|
1620
|
+
fingerprint: v(),
|
|
1621
|
+
cronSchedule: v().nullable(),
|
|
1622
|
+
watchedTables: S().nullable(),
|
|
1623
|
+
nextRunAt: E().nullable(),
|
|
1624
|
+
lastRunStatus: v().nullable(),
|
|
1625
|
+
lastRunAt: E().nullable(),
|
|
1626
|
+
lastRunDurationMs: w().nullable(),
|
|
1627
|
+
lastRunRowsTouched: w().nullable(),
|
|
1628
|
+
lastError: v().nullable(),
|
|
1629
|
+
workflowRunId: v().nullable(),
|
|
1630
|
+
createdAt: E().default("now"),
|
|
1631
|
+
updatedAt: E().default("now").onUpdate("now")
|
|
1632
|
+
}).index(["lifecycle"]).index(["nextRunAt"]).reactive(), oa = C("_voltro_migration_plans", {
|
|
1633
|
+
id: D({ prefix: "plan" }),
|
|
1634
|
+
fingerprint: v(),
|
|
1635
|
+
operations: S(),
|
|
1636
|
+
rollbackPlan: S().nullable(),
|
|
1637
|
+
appliedBy: v(),
|
|
1638
|
+
environment: v(),
|
|
1639
|
+
source: v(),
|
|
1640
|
+
onlineStrategy: v().nullable(),
|
|
1641
|
+
durationMs: w(),
|
|
1642
|
+
notes: v().nullable(),
|
|
1643
|
+
squashedAt: E().nullable(),
|
|
1644
|
+
appliedAt: E().default("now"),
|
|
1645
|
+
createdAt: E().default("now"),
|
|
1646
|
+
updatedAt: E().default("now").onUpdate("now")
|
|
1647
|
+
}).index(["fingerprint"]).index(["environment"]).reactive(), sa = C("_voltro_idempotency", {
|
|
1648
|
+
id: D({ prefix: "idem" }),
|
|
1649
|
+
scope: v(),
|
|
1650
|
+
key: v(),
|
|
1651
|
+
status: v(),
|
|
1652
|
+
response: S().nullable(),
|
|
1653
|
+
createdAt: E().default("now")
|
|
1654
|
+
}).unique(["scope", "key"]).index(["createdAt"]).reactive(), ca = C("_voltro_kv", {
|
|
1655
|
+
id: D({ prefix: "kv" }),
|
|
1656
|
+
key: v().unique(),
|
|
1657
|
+
value: v().nullable(),
|
|
1658
|
+
expiresAt: E().nullable(),
|
|
1659
|
+
createdAt: E().default("now"),
|
|
1660
|
+
updatedAt: E().default("now").onUpdate("now")
|
|
1661
|
+
}).index(["expiresAt"]).reactive(), la = C("_voltro_api_keys", {
|
|
1662
|
+
id: D({ prefix: "apikey" }),
|
|
1663
|
+
tenantId: v().nullable(),
|
|
1664
|
+
name: v(),
|
|
1665
|
+
hashedKey: v().unique(),
|
|
1666
|
+
keyPrefix: v(),
|
|
1667
|
+
scopes: S().nullable(),
|
|
1668
|
+
lastUsedAt: E().nullable(),
|
|
1669
|
+
expiresAt: E().nullable(),
|
|
1670
|
+
revokedAt: E().nullable(),
|
|
1671
|
+
createdBy: v().nullable(),
|
|
1672
|
+
createdAt: E().default("now")
|
|
1673
|
+
}).index("byTenant", ["tenantId"]).reactive(), ua = [
|
|
1674
|
+
ia,
|
|
1675
|
+
aa,
|
|
1676
|
+
oa
|
|
1677
|
+
], $ = "id", da = (e, t) => {
|
|
1648
1678
|
let n = u(e);
|
|
1649
1679
|
if (n === void 0) return t;
|
|
1650
1680
|
let r = n.fields[$]?.idScheme;
|
|
@@ -1654,45 +1684,58 @@ var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1654
1684
|
let e = { ...t };
|
|
1655
1685
|
return delete e[$], e;
|
|
1656
1686
|
}
|
|
1657
|
-
let i =
|
|
1687
|
+
let i = ze(r, e);
|
|
1658
1688
|
return i === null ? t : {
|
|
1659
1689
|
...t,
|
|
1660
1690
|
[$]: i
|
|
1661
1691
|
};
|
|
1662
|
-
},
|
|
1692
|
+
}, fa = (e, t) => t.map((t) => da(e, t)), pa = (e, t) => {
|
|
1693
|
+
let n = [], r = t;
|
|
1694
|
+
for (let [t, i] of Object.entries(e.fields)) {
|
|
1695
|
+
let e = i;
|
|
1696
|
+
e.nullable || e.hasDefault || e.idScheme !== void 0 || (r[t] === void 0 || r[t] === null) && n.push(t);
|
|
1697
|
+
}
|
|
1698
|
+
return n;
|
|
1699
|
+
}, ma = (e, t) => {
|
|
1700
|
+
let n = t;
|
|
1701
|
+
return e.filter((e) => n[e] === void 0 || n[e] === null);
|
|
1702
|
+
}, ha = (e, t, n) => e.insert(t.tableName, n), ga = (e, t, n, r) => e.upsert(t.tableName, n, {
|
|
1703
|
+
conflictColumns: r.conflictColumns,
|
|
1704
|
+
...r.update === void 0 ? {} : { update: r.update }
|
|
1705
|
+
}), _a = 512, va = (e) => {
|
|
1663
1706
|
e.setMaxListeners(512);
|
|
1664
|
-
},
|
|
1707
|
+
}, ya = (e, t, n) => ({
|
|
1665
1708
|
_tag: "PrimaryKeyConflictError",
|
|
1666
1709
|
table: e,
|
|
1667
1710
|
key: t,
|
|
1668
1711
|
cause: n
|
|
1669
|
-
}),
|
|
1712
|
+
}), ba = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", xa = /* @__PURE__ */ new Map(), Sa = (e) => {
|
|
1670
1713
|
if (!e.table || !e.timeColumn) throw Error("registerRetention: table + timeColumn are required");
|
|
1671
1714
|
if (!Number.isFinite(e.ttlMs) || e.ttlMs <= 0) throw Error(`registerRetention(${e.table}): ttlMs must be a positive number`);
|
|
1672
|
-
|
|
1673
|
-
},
|
|
1715
|
+
xa.set(e.table, e);
|
|
1716
|
+
}, Ca = () => [...xa.values()], wa = () => xa.clear(), Ta = async (e, t, n, r = 2e4) => {
|
|
1674
1717
|
let i = new Date(t - e.ttlMs), a = 0;
|
|
1675
1718
|
for (;;) {
|
|
1676
1719
|
let t = await n(e.table, e.timeColumn, i, r, e.where);
|
|
1677
1720
|
if (a += t, t < r) break;
|
|
1678
1721
|
}
|
|
1679
1722
|
return a;
|
|
1680
|
-
},
|
|
1723
|
+
}, Ea = (e, t) => {
|
|
1681
1724
|
let n = Number(e ?? String(t));
|
|
1682
1725
|
return (Number.isFinite(n) && n > 0 ? n : t) * 36e5;
|
|
1683
|
-
},
|
|
1684
|
-
id:
|
|
1685
|
-
replicaId:
|
|
1686
|
-
streamName:
|
|
1687
|
-
binlogFile:
|
|
1688
|
-
binlogPosition:
|
|
1689
|
-
updatedAt:
|
|
1690
|
-
}).index(["replicaId"]),
|
|
1691
|
-
id:
|
|
1692
|
-
replicaId:
|
|
1693
|
-
streamName:
|
|
1694
|
-
ctVersion:
|
|
1695
|
-
updatedAt:
|
|
1696
|
-
}).index(["replicaId"]),
|
|
1726
|
+
}, Da = "_voltro_cdc_offsets", Oa = C(Da, {
|
|
1727
|
+
id: D({ prefix: "cdcoff" }),
|
|
1728
|
+
replicaId: v(),
|
|
1729
|
+
streamName: v(),
|
|
1730
|
+
binlogFile: v(),
|
|
1731
|
+
binlogPosition: v(),
|
|
1732
|
+
updatedAt: E()
|
|
1733
|
+
}).index(["replicaId"]), ka = C(Da, {
|
|
1734
|
+
id: D({ prefix: "cdcoff" }),
|
|
1735
|
+
replicaId: v(),
|
|
1736
|
+
streamName: v(),
|
|
1737
|
+
ctVersion: v(),
|
|
1738
|
+
updatedAt: E()
|
|
1739
|
+
}).index(["replicaId"]), Aa = "postgres";
|
|
1697
1740
|
//#endregion
|
|
1698
|
-
export { J as BranchNameInvalid,
|
|
1741
|
+
export { J as BranchNameInvalid, _i as BranchTransitionInvalid, Da as CDC_OFFSETS_TABLE, _a as CHANGE_LISTENER_CEILING, ge as ColumnBuilder, ft as ENCRYPTED_PREFIX, Aa as ENGINE, Zt as EagerCardinalityError, We as FILE_MIGRATION_PATTERN, pt as FieldDecryptionError, le as MAX_IDENTIFIER_LENGTH, ai as TableStreamError, un as TenantNamespaceInvalid, ln as TenantNamespaceUnresolved, Ni as TenantRegionUnavailable, Mi as TenantResidencyUnresolved, b as WARN_IDENTIFIER_LENGTH, la as _voltroApiKeysTable, Oa as _voltroCdcOffsetsTable, sa as _voltroIdempotencyTable, ca as _voltroKvTable, oa as _voltroMigrationPlansTable, ia as _voltroMigrationsTable, ka as _voltroMssqlCdcOffsetsTable, aa as _voltroSeedsTable, Ar as actorsTable, Ai as admitBranch, Ee as allEnumRenames, Bt as allRegisteredRelations, ee as allRegisteredTables, Kr as and, Ae as array, Br as arrayContains, Hr as arrayHas, Vr as arrayOverlaps, $t as attachEagerLoads, Ki as auditAllTableIndexes, Gi as auditTableIndexes, ke as avg, Ke as avgOver, qe as bigint, Vi as bindResidentStore, ve as boolean, mi as branchNamespaceName, xe as bytes, pe as clearEnumRenames, Ht as clearRelationsRegistry, Li as clearResidencyConfig, wa as clearRetentions, te as clearTableRegistry, ri as collectSubqueries, _e as column, yt as columnSchema, Dn as compileEagerJson, L as compilePredicate, gn as compileRawFragment, R as compileSelect, ui as computeEmbedding, zr as contains, be as count, Le as countDistinct, je as databaseHandle, Re as date, Me as dbEnum, Te as decimal, Ie as declareEnumRename, Jt as decodeRowsFromSchema, vt as decryptFieldsOnRead, na as defineMigration, ae as defineMixin, $i as defineSeed, we as denseRank, h as deriveTypeIdPrefix, dt as deserializeArraysOnRead, e as drainIdentifierWarnings, Ce as dropped, Xt as encodeRowForSchema, _t as encryptFieldsForWrite, gt as encryptedColumnsOf, Di as enforceBranchLimits, y as ensureTableRegistered, jr as eq, I as escapeLike, ni as evaluatePredicate, Se as except, $r as exists, Zi as formatIndexAuditIssue, ua as frameworkTables, ze as generateId, ce as generateSnowflake, de as geography, Ye as geometry, Ue as getEnumRenames, zt as getRelation, Rt as getRelations, Ii as getResidencyConfig, u as getTable, Nr as gt, Pr as gte, cn as hasEagerLoads, li as hybridSearch, D as id, Lr as inSet, Zr as inSubquery, j as inferForeignKey, ha as insertRow, w as integer, ue as intersect, $e as interval, hi as isBranchNamespace, ht as isEncrypted, mt as isFieldDecryptionError, Ne as isFileMigration, ra as isMigrationDefinition, xi as isNeonConnection, Wr as isNotNull, Ur as isNull, ba as isPrimaryKeyConflictError, zi as isRegionServable, Dt as isRelationsSpec, ea as isSeedDefinition, ne as isSqliteFamily, fe as isView, S as json, Yr as jsonField, r as jsonIndex, Je as lag, et as lead, Ca as listRetentions, Fr as lt, Ir as lte, ji as makeNamespaceBranchExecutor, kt as many, At as manyToMany, a as materializeFields, me as max, Be as migration, Qe as min, ma as missingConflictColumns, pa as missingRequiredColumns, oe as mixin, Mr as neq, vi as nextBranchState, Jr as not, ei as notExists, Rr as notInSet, Qr as notInSubquery, Ze as numeric, Ot as one, Qt as oneCardinalityMessage, qr as or, x as paginateBy, i as paginateById, Ti as planBranch, yi as planBranchProvision, bi as planBranchTeardown, Ei as planBranchTeardownFor, Ci as planNeonBranchProvision, wi as planNeonBranchTeardown, ya as primaryKeyConflictError, Oi as provisionBranch, Hi as provisionResidentTenant, hn as qualifyTable, Xe as queryFor, Fe as queryForView, tt as quoteIdent, va as raiseChangeListenerCeiling, re as rank, ie as raw, l as real, s as reference, Er as registerCoreTables, Lt as registerDiscoveredRelations, It as registerRelations, Sa as registerRetention, p as registerTable, Et as relations, Or as requireActors, g as requireTable, kr as requireTenants, se as resetSnowflake, Bi as residentPlacement, Si as resolveBranchMechanism, c as resolveFullTextIndex, m as resolveIdScheme, d as resolveMixinGraph, Ri as resolveTenantHome, mn as resolveTenantNamespace, Ea as retentionTtlMsFromEnv, o as rowNumber, bt as rowSchema, pn as sanitizeIdentifierFragment, ut as serializeArraysForWrite, Fi as setResidencyConfig, Gr as spatialPredicate, da as stampGeneratedId, fa as stampGeneratedIds, ci as streamTable, _ as sum, Oe as sumOver, Ta as sweepRetention, C as table, ki as teardownBranch, v as text, E as timestamp, nt as timestampMs, rt as timestampMsOrNull, t as union, De as unionAll, ga as upsertRow, ye as validateColumnName, Ge as validateIndexName, Vt as validateRegisteredRelations, Nt as validateRelationConfig, Pe as validateTableName, Ve as validateTypeIdPrefix, n as vector, f as vectorDistanceToOpclass, di as vectorEmbedding, He as view, he as viewSql, ii as walkLeaves };
|