@voltro/database 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +50 -0
- package/dist/{fileBased-CRXgPJkv.js → fileBased-Cc-F1oFv.js} +143 -143
- package/dist/index.d.ts +56 -3
- package/dist/index.js +405 -405
- package/dist/sql.d.ts +1 -1
- package/dist/sql.js +671 -629
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { $ as e, A as t,
|
|
2
|
-
import { Chunk 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 _, N as ee, O as te, 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 { Chunk as nt, Data as rt, Effect as it, Option as O, Stream as at } from "effect";
|
|
3
3
|
import { ansi as k } from "@voltro/logger";
|
|
4
4
|
//#region src/arrayCodec.ts
|
|
5
|
-
var
|
|
5
|
+
var ot = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", st = (e) => {
|
|
6
6
|
let t = [];
|
|
7
7
|
for (let [n, r] of Object.entries(e.fields)) r.type === "array" && t.push(n);
|
|
8
8
|
return t;
|
|
9
|
-
},
|
|
10
|
-
if (!
|
|
11
|
-
let r =
|
|
9
|
+
}, ct = (e, t, n) => {
|
|
10
|
+
if (!ot(n) || !t) return e;
|
|
11
|
+
let r = st(t);
|
|
12
12
|
if (r.length === 0) return e;
|
|
13
13
|
let i = { ...e };
|
|
14
14
|
for (let e of r) {
|
|
@@ -16,9 +16,9 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
16
16
|
Array.isArray(t) && (i[e] = JSON.stringify(t));
|
|
17
17
|
}
|
|
18
18
|
return i;
|
|
19
|
-
},
|
|
20
|
-
if (!
|
|
21
|
-
let r =
|
|
19
|
+
}, lt = (e, t, n) => {
|
|
20
|
+
if (!ot(n) || !t) return e;
|
|
21
|
+
let r = st(t);
|
|
22
22
|
return r.length === 0 ? e : e.map((e) => {
|
|
23
23
|
let t;
|
|
24
24
|
for (let n of r) {
|
|
@@ -30,61 +30,61 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
30
30
|
}
|
|
31
31
|
return t ?? e;
|
|
32
32
|
});
|
|
33
|
-
},
|
|
33
|
+
}, ut = "enc:v1:", dt = (e) => typeof e == "string" && e.startsWith("enc:v1:"), ft = (e) => {
|
|
34
34
|
let t = [];
|
|
35
35
|
for (let [n, r] of Object.entries(e.fields)) r.encrypted === !0 && t.push(n);
|
|
36
36
|
return t;
|
|
37
|
-
},
|
|
37
|
+
}, pt = (e, t, n) => {
|
|
38
38
|
if (!t) return e;
|
|
39
|
-
let r =
|
|
39
|
+
let r = ft(t);
|
|
40
40
|
if (r.length === 0) return e;
|
|
41
41
|
let i = { ...e };
|
|
42
42
|
for (let e of r) {
|
|
43
43
|
let r = i[e];
|
|
44
|
-
if (!(r == null ||
|
|
44
|
+
if (!(r == null || dt(r))) {
|
|
45
45
|
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)`);
|
|
46
46
|
i[e] = n.encrypt(JSON.stringify(r));
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
return i;
|
|
50
|
-
},
|
|
50
|
+
}, mt = (e, t, n) => {
|
|
51
51
|
if (!t) return e;
|
|
52
|
-
let r =
|
|
52
|
+
let r = ft(t);
|
|
53
53
|
return r.length === 0 || !n ? e : e.map((e) => {
|
|
54
54
|
let t;
|
|
55
55
|
for (let i of r) {
|
|
56
56
|
let r = e[i];
|
|
57
|
-
|
|
57
|
+
dt(r) && (t ??= { ...e }, t[i] = JSON.parse(n.decrypt(r)));
|
|
58
58
|
}
|
|
59
59
|
return t ?? e;
|
|
60
60
|
});
|
|
61
|
-
},
|
|
61
|
+
}, ht = (e) => typeof e == "function" ? e : () => e, gt = (e, t) => ({
|
|
62
62
|
kind: "one",
|
|
63
|
-
target:
|
|
63
|
+
target: ht(e),
|
|
64
64
|
...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
|
|
65
65
|
...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
|
|
66
|
-
}),
|
|
66
|
+
}), _t = (e, t) => ({
|
|
67
67
|
kind: "many",
|
|
68
|
-
target:
|
|
68
|
+
target: ht(e),
|
|
69
69
|
...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
|
|
70
70
|
...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
|
|
71
|
-
}),
|
|
71
|
+
}), vt = (e, t) => ({
|
|
72
72
|
kind: "manyToMany",
|
|
73
|
-
target:
|
|
74
|
-
through:
|
|
73
|
+
target: ht(e),
|
|
74
|
+
through: ht(t.through),
|
|
75
75
|
sourceKey: t.sourceKey,
|
|
76
76
|
targetKey: t.targetKey
|
|
77
|
-
}),
|
|
78
|
-
one:
|
|
79
|
-
many:
|
|
80
|
-
manyToMany:
|
|
81
|
-
},
|
|
77
|
+
}), yt = {
|
|
78
|
+
one: gt,
|
|
79
|
+
many: _t,
|
|
80
|
+
manyToMany: vt
|
|
81
|
+
}, bt = (e, t) => {
|
|
82
82
|
let n = typeof e == "function" ? e : () => e;
|
|
83
83
|
return {
|
|
84
84
|
source: n,
|
|
85
|
-
relations: t(
|
|
85
|
+
relations: t(yt, n())
|
|
86
86
|
};
|
|
87
|
-
},
|
|
87
|
+
}, xt = (e) => {
|
|
88
88
|
if (typeof e != "object" || !e) return !1;
|
|
89
89
|
let t = e;
|
|
90
90
|
if (typeof t.source != "function" || typeof t.relations != "object" || t.relations === null) return !1;
|
|
@@ -93,13 +93,13 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
93
93
|
let t = e?.kind;
|
|
94
94
|
return t === "one" || t === "many" || t === "manyToMany";
|
|
95
95
|
});
|
|
96
|
-
},
|
|
96
|
+
}, St = gt, Ct = _t, wt = vt, A = (e, t, n) => {
|
|
97
97
|
let r = [];
|
|
98
98
|
for (let [n, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && r.push(n);
|
|
99
99
|
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>' }.`);
|
|
100
100
|
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.`);
|
|
101
101
|
return r[0];
|
|
102
|
-
},
|
|
102
|
+
}, Tt = Symbol.for("@voltro/database/relationsRegistry"), Et = globalThis, j = Et[Tt] ?? (Et[Tt] = /* @__PURE__ */ new Map()), Dt = (e) => {
|
|
103
103
|
let t = e.source(), n = j.get(t.tableName);
|
|
104
104
|
if (n === void 0) {
|
|
105
105
|
j.set(t.tableName, new Map(Object.entries(e.relations)));
|
|
@@ -109,14 +109,14 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
109
109
|
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.`);
|
|
110
110
|
n.set(r, i);
|
|
111
111
|
}
|
|
112
|
-
},
|
|
112
|
+
}, Ot = (e) => {
|
|
113
113
|
let t = 0;
|
|
114
|
-
for (let n of Object.values(e))
|
|
114
|
+
for (let n of Object.values(e)) xt(n) && (Dt(n), t += 1);
|
|
115
115
|
return t;
|
|
116
116
|
}, M = (e) => {
|
|
117
117
|
let t = j.get(e);
|
|
118
118
|
if (t !== void 0) return Object.fromEntries(t);
|
|
119
|
-
},
|
|
119
|
+
}, kt = (e, t) => j.get(e)?.get(t), At = () => {
|
|
120
120
|
let e = [];
|
|
121
121
|
for (let [t, n] of j) for (let [r, i] of n) e.push({
|
|
122
122
|
source: t,
|
|
@@ -124,9 +124,9 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
124
124
|
relation: i
|
|
125
125
|
});
|
|
126
126
|
return e;
|
|
127
|
-
},
|
|
127
|
+
}, jt = () => {
|
|
128
128
|
j.clear();
|
|
129
|
-
},
|
|
129
|
+
}, Mt = (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, Nt = (e) => {
|
|
130
130
|
if (e == null || typeof e != "string") return e;
|
|
131
131
|
let t = e.trim();
|
|
132
132
|
if (t.length === 0) return e;
|
|
@@ -137,7 +137,7 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
137
137
|
} catch {
|
|
138
138
|
return e;
|
|
139
139
|
}
|
|
140
|
-
},
|
|
140
|
+
}, Pt = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, Ft = (e) => {
|
|
141
141
|
if (e == null || e instanceof Date) return e;
|
|
142
142
|
if (typeof e == "string") {
|
|
143
143
|
let t = new Date(e);
|
|
@@ -148,21 +148,21 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
148
148
|
return isNaN(t.getTime()) ? e : t;
|
|
149
149
|
}
|
|
150
150
|
return e;
|
|
151
|
-
},
|
|
151
|
+
}, It = (e, t, n) => {
|
|
152
152
|
if (e == null) return e;
|
|
153
153
|
switch (t) {
|
|
154
|
-
case "boolean": return n === "postgres" ? e :
|
|
154
|
+
case "boolean": return n === "postgres" ? e : Mt(e);
|
|
155
155
|
case "json":
|
|
156
|
-
case "array": return n === "postgres" ? e :
|
|
156
|
+
case "array": return n === "postgres" ? e : Nt(e);
|
|
157
157
|
case "timestamp":
|
|
158
|
-
case "date": return n === "sqlite" || n === "turso" ?
|
|
158
|
+
case "date": return n === "sqlite" || n === "turso" ? Ft(e) : e;
|
|
159
159
|
case "decimal":
|
|
160
|
-
case "bigint": return
|
|
160
|
+
case "bigint": return Pt(e);
|
|
161
161
|
default: return e;
|
|
162
162
|
}
|
|
163
|
-
},
|
|
163
|
+
}, Lt = (e, t, n) => {
|
|
164
164
|
if (e.length === 0) return e;
|
|
165
|
-
let r =
|
|
165
|
+
let r = u(t);
|
|
166
166
|
if (r === void 0) return e;
|
|
167
167
|
let i = r.fields, a = [];
|
|
168
168
|
for (let [e, t] of Object.entries(i)) a.push({
|
|
@@ -171,26 +171,26 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
171
171
|
});
|
|
172
172
|
return e.map((e) => {
|
|
173
173
|
let t = { ...e };
|
|
174
|
-
for (let { key: e, type: r } of a) e in t && (t[e] =
|
|
174
|
+
for (let { key: e, type: r } of a) e in t && (t[e] = It(t[e], r, n));
|
|
175
175
|
return t;
|
|
176
176
|
});
|
|
177
|
-
},
|
|
177
|
+
}, Rt = (e, t) => {
|
|
178
178
|
if (e == null) return e;
|
|
179
179
|
switch (t) {
|
|
180
180
|
case "json":
|
|
181
181
|
case "array": return typeof e == "string" ? e : JSON.stringify(e);
|
|
182
182
|
default: return e;
|
|
183
183
|
}
|
|
184
|
-
},
|
|
185
|
-
let r =
|
|
184
|
+
}, zt = (e, t, n = ["json", "array"]) => {
|
|
185
|
+
let r = u(t);
|
|
186
186
|
if (r === void 0) return e;
|
|
187
187
|
let i = r.fields, a = null;
|
|
188
188
|
for (let [t, r] of Object.entries(i)) if (n.includes(r.type) && t in e) {
|
|
189
|
-
let n =
|
|
189
|
+
let n = Rt(e[t], r.type);
|
|
190
190
|
n !== e[t] && (a === null && (a = { ...e }), a[t] = n);
|
|
191
191
|
}
|
|
192
192
|
return a ?? e;
|
|
193
|
-
},
|
|
193
|
+
}, Bt = async (e, t, n, r) => {
|
|
194
194
|
if (e.length === 0) return e;
|
|
195
195
|
let i = M(n.tableName);
|
|
196
196
|
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?`);
|
|
@@ -201,23 +201,23 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
201
201
|
let t = Object.keys(i).join(", ") || "<none>";
|
|
202
202
|
throw Error(`unknown relation '${e}' on '${n.tableName}'. Registered relations: ${t}.`);
|
|
203
203
|
}
|
|
204
|
-
await
|
|
204
|
+
await Vt(a, e, t, o === !0 ? {} : o, n, r);
|
|
205
205
|
}
|
|
206
206
|
return a;
|
|
207
|
-
},
|
|
207
|
+
}, Vt = async (e, t, n, r, i, a) => {
|
|
208
208
|
switch (n.kind) {
|
|
209
209
|
case "one":
|
|
210
|
-
await
|
|
210
|
+
await Ht(e, t, n, r, i, a);
|
|
211
211
|
return;
|
|
212
212
|
case "many":
|
|
213
|
-
await
|
|
213
|
+
await Ut(e, t, n, r, i, a);
|
|
214
214
|
return;
|
|
215
215
|
case "manyToMany":
|
|
216
|
-
await
|
|
216
|
+
await Gt(e, t, n, r, i, a);
|
|
217
217
|
return;
|
|
218
218
|
}
|
|
219
|
-
},
|
|
220
|
-
let o = n.target(), s = n.sourceKey ??
|
|
219
|
+
}, Ht = async (e, t, n, r, i, a) => {
|
|
220
|
+
let o = n.target(), s = n.sourceKey ?? Kt(i, o.tableName);
|
|
221
221
|
if (s !== void 0) {
|
|
222
222
|
let n = N(e, s), i = n.length === 0 ? [] : await P(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
|
|
223
223
|
for (let n of e) {
|
|
@@ -234,8 +234,8 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
234
234
|
n[t] = e == null ? null : f.get(e) ?? null;
|
|
235
235
|
}
|
|
236
236
|
await F(d, r.with, o, a);
|
|
237
|
-
},
|
|
238
|
-
let o = n.target(), s = n.foreignKey ?? A(o, i.tableName, t), c = n.sourceKey ?? "id", l = N(e, c), u =
|
|
237
|
+
}, Ut = async (e, t, n, r, i, a) => {
|
|
238
|
+
let o = n.target(), s = n.foreignKey ?? A(o, i.tableName, t), c = n.sourceKey ?? "id", l = N(e, c), u = Wt(r), d = l.length === 0 ? [] : await P(o, s, l, u, a), f = /* @__PURE__ */ new Map();
|
|
239
239
|
for (let e of d) {
|
|
240
240
|
let t = e[s], n = f.get(t);
|
|
241
241
|
n ? n.push(e) : f.set(t, [e]);
|
|
@@ -252,10 +252,10 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
252
252
|
n[t] = f.get(e) ?? [];
|
|
253
253
|
}
|
|
254
254
|
await F(d, r.with, o, a);
|
|
255
|
-
},
|
|
255
|
+
}, Wt = (e) => {
|
|
256
256
|
let { limit: t, offset: n, ...r } = e;
|
|
257
257
|
return r;
|
|
258
|
-
},
|
|
258
|
+
}, Gt = async (e, t, n, r, i, a) => {
|
|
259
259
|
let o = n.target(), s = n.through(), c = N(e, "id");
|
|
260
260
|
if (c.length === 0) {
|
|
261
261
|
for (let n of e) n[t] = [];
|
|
@@ -286,7 +286,7 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
286
286
|
}
|
|
287
287
|
for (let n of e) n[t] = m.get(n.id) ?? [];
|
|
288
288
|
await F(f, r.with, o, a);
|
|
289
|
-
},
|
|
289
|
+
}, Kt = (e, t) => {
|
|
290
290
|
for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
|
|
291
291
|
}, N = (e, t) => {
|
|
292
292
|
let n = /* @__PURE__ */ new Set();
|
|
@@ -310,28 +310,28 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
310
310
|
projection: void 0
|
|
311
311
|
});
|
|
312
312
|
}, F = async (e, t, n, r) => {
|
|
313
|
-
t !== void 0 && e.length !== 0 && (await
|
|
313
|
+
t !== void 0 && e.length !== 0 && (await Bt(e, t, n, r)).forEach((t, n) => {
|
|
314
314
|
let r = e[n];
|
|
315
315
|
for (let [e, n] of Object.entries(t)) e in r || (r[e] = n);
|
|
316
316
|
});
|
|
317
|
-
},
|
|
317
|
+
}, qt = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, Jt = class extends Error {
|
|
318
318
|
_tag = "TenantNamespaceUnresolved";
|
|
319
319
|
constructor(e) {
|
|
320
320
|
super(e), this.name = "TenantNamespaceUnresolved";
|
|
321
321
|
}
|
|
322
|
-
},
|
|
322
|
+
}, Yt = class extends Error {
|
|
323
323
|
_tag = "TenantNamespaceInvalid";
|
|
324
324
|
constructor(e) {
|
|
325
325
|
super(e), this.name = "TenantNamespaceInvalid";
|
|
326
326
|
}
|
|
327
|
-
},
|
|
328
|
-
if (e == null || e === "") throw new
|
|
329
|
-
let t =
|
|
330
|
-
if (t.replace(/_/g, "") === "") throw new
|
|
331
|
-
let n = `${
|
|
332
|
-
if (n.length >
|
|
327
|
+
}, Xt = 63, Zt = "tenant_", Qt = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), $t = (e) => {
|
|
328
|
+
if (e == null || e === "") throw new Jt("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.");
|
|
329
|
+
let t = Qt(e);
|
|
330
|
+
if (t.replace(/_/g, "") === "") throw new Yt(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
|
|
331
|
+
let n = `${Zt}${t}`;
|
|
332
|
+
if (n.length > Xt) throw new Yt(`namespace '${n}' for tenant '${e}' exceeds the ${Xt}-byte identifier limit. Use a shorter tenant id.`);
|
|
333
333
|
return n;
|
|
334
|
-
}, I = (e, t) => e === null ? t : `${e}.${t}`,
|
|
334
|
+
}, I = (e, t) => e === null ? t : `${e}.${t}`, en = (e, t) => {
|
|
335
335
|
let { strings: n, values: r } = e, i = t.unsafe(n[0] ?? "");
|
|
336
336
|
for (let e = 0; e < r.length; e++) i = t`${i}${r[e]}${t.unsafe(n[e + 1] ?? "")}`;
|
|
337
337
|
return t`${i}`;
|
|
@@ -348,15 +348,15 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
348
348
|
return r.op === "exists" ? t`EXISTS (${i})` : t`NOT EXISTS (${i})`;
|
|
349
349
|
}
|
|
350
350
|
let r = e, i = t(r.column), a = r.path, o = a !== void 0 && a.length > 0, s = () => t.onDialectOrElse({
|
|
351
|
-
mysql: () => t.unsafe(
|
|
352
|
-
mssql: () => t.unsafe(
|
|
353
|
-
sqlite: () => t.unsafe(
|
|
354
|
-
orElse: () => t.unsafe(
|
|
351
|
+
mysql: () => t.unsafe(T(r.column, a, "mysql")),
|
|
352
|
+
mssql: () => t.unsafe(T(r.column, a, "mssql")),
|
|
353
|
+
sqlite: () => t.unsafe(T(r.column, a, "sqlite")),
|
|
354
|
+
orElse: () => t.unsafe(T(r.column, a, "postgres"))
|
|
355
355
|
}), c = () => t.onDialectOrElse({
|
|
356
|
-
mysql: () => t.unsafe(
|
|
357
|
-
mssql: () => t.unsafe(
|
|
358
|
-
sqlite: () => t.unsafe(
|
|
359
|
-
orElse: () => t.unsafe(
|
|
356
|
+
mysql: () => t.unsafe(T(r.column, a, "mysql", { numeric: !0 })),
|
|
357
|
+
mssql: () => t.unsafe(T(r.column, a, "mssql", { numeric: !0 })),
|
|
358
|
+
sqlite: () => t.unsafe(T(r.column, a, "sqlite", { numeric: !0 })),
|
|
359
|
+
orElse: () => t.unsafe(T(r.column, a, "postgres", { numeric: !0 }))
|
|
360
360
|
}), l = o ? s() : i, u = o ? c() : i, d = (e) => o && e != null ? String(e) : e, f = (e) => o ? Number(e) : e;
|
|
361
361
|
switch (r.op) {
|
|
362
362
|
case "eq": return t`${l} = ${d(r.value)}`;
|
|
@@ -424,13 +424,13 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
424
424
|
});
|
|
425
425
|
}
|
|
426
426
|
}
|
|
427
|
-
},
|
|
427
|
+
}, tn = (e, t) => {
|
|
428
428
|
let n = [];
|
|
429
429
|
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}`);
|
|
430
|
-
},
|
|
430
|
+
}, nn = (e, t) => t.csv(e.map((e) => {
|
|
431
431
|
let n = e.column === void 0 ? t.unsafe("*") : t`${t(e.column)}`;
|
|
432
432
|
if (e.op.startsWith("window-")) {
|
|
433
|
-
let r =
|
|
433
|
+
let r = tn(e.window ?? {}, t);
|
|
434
434
|
switch (e.op) {
|
|
435
435
|
case "window-row-number": return t`ROW_NUMBER() OVER (${r}) AS ${t(e.alias)}`;
|
|
436
436
|
case "window-rank": return t`RANK() OVER (${r}) AS ${t(e.alias)}`;
|
|
@@ -454,39 +454,39 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
454
454
|
return t`${t(e.column)} AS ${t(e.alias)}`;
|
|
455
455
|
default: throw Error(`compileAggregateProjection: unknown op '${e.op}'`);
|
|
456
456
|
}
|
|
457
|
-
})),
|
|
457
|
+
})), rn = (e) => `[${e.join(",")}]`, an = (e, t) => {
|
|
458
458
|
if (e.queryVector === void 0) return null;
|
|
459
|
-
let n = t(e.column), r =
|
|
459
|
+
let n = t(e.column), r = rn(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
|
|
460
460
|
return t.onDialectOrElse({
|
|
461
461
|
mysql: () => t`${t.unsafe(a)}(${n}, ${r})`,
|
|
462
462
|
mssql: () => t`NULL`,
|
|
463
463
|
sqlite: () => t`NULL`,
|
|
464
464
|
orElse: () => t`${n} ${t.unsafe(i)} ${r}::vector`
|
|
465
465
|
});
|
|
466
|
-
},
|
|
466
|
+
}, on = (e, t) => {
|
|
467
467
|
let n = t.unsafe(e.useGeography ? "::geography" : "::geometry");
|
|
468
468
|
return t`ST_Distance(${t(e.column)}${n}, ${e.geom}${n})`;
|
|
469
|
-
},
|
|
469
|
+
}, sn = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, cn = (e, t) => t`${t(`${e.indexName}_tsv`)}`, ln = (e, t) => `${t}_${e.indexName}_fts`, un = (e, t, n) => {
|
|
470
470
|
let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${L(e.query)}%`;
|
|
471
471
|
return n.onDialectOrElse({
|
|
472
472
|
mysql: () => n`MATCH(${r}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
|
|
473
473
|
sqlite: () => {
|
|
474
|
-
let r = n(
|
|
474
|
+
let r = n(ln(e, t));
|
|
475
475
|
return n`${n("id")} IN (SELECT ${n("row_id")} FROM ${r} WHERE ${r} MATCH ${e.query})`;
|
|
476
476
|
},
|
|
477
477
|
mssql: () => n.or(e.columns.map((e) => n`LOWER(${n(e)}) LIKE LOWER(${i}) ESCAPE '\\'`)),
|
|
478
|
-
orElse: () => n`${
|
|
478
|
+
orElse: () => n`${cn(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
|
|
479
479
|
});
|
|
480
|
-
},
|
|
480
|
+
}, dn = (e, t, n) => {
|
|
481
481
|
let r = `%${L(e.query)}%`;
|
|
482
482
|
return n.onDialectOrElse({
|
|
483
483
|
mysql: () => n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
|
|
484
484
|
sqlite: () => {
|
|
485
|
-
let r = n(
|
|
485
|
+
let r = n(ln(e, t));
|
|
486
486
|
return n`COALESCE((SELECT -bm25(${r}) FROM ${r} WHERE ${r} MATCH ${e.query} AND ${r}.${n("row_id")} = ${n("id")}), 0)`;
|
|
487
487
|
},
|
|
488
488
|
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}`),
|
|
489
|
-
orElse: () => n`ts_rank(${
|
|
489
|
+
orElse: () => n`ts_rank(${cn(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
|
|
490
490
|
});
|
|
491
491
|
}, z = (e, t, n = null) => {
|
|
492
492
|
if (e.setOp && e.setOp.queries.length >= 2) {
|
|
@@ -501,7 +501,7 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
501
501
|
}
|
|
502
502
|
return t`${i}${a.reduce((e, n) => t`${e}${n}`, t``)}`;
|
|
503
503
|
}
|
|
504
|
-
let r = e.annClause === void 0 ? null :
|
|
504
|
+
let r = e.annClause === void 0 ? null : an(e.annClause, t);
|
|
505
505
|
e.spatialClause !== void 0 && t.onDialectOrElse({
|
|
506
506
|
mysql: () => {
|
|
507
507
|
throw Error("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
|
|
@@ -514,7 +514,7 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
514
514
|
},
|
|
515
515
|
orElse: () => t``
|
|
516
516
|
});
|
|
517
|
-
let i = e.spatialClause?.projectAs === void 0 ? null :
|
|
517
|
+
let i = e.spatialClause?.projectAs === void 0 ? null : on(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? nn(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 ? dn(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({
|
|
518
518
|
orElse: () => t`DISTINCT ON (${t.csv(e.distinctOn.map((e) => t`${t(e)}`))}) `,
|
|
519
519
|
mysql: () => t`DISTINCT `,
|
|
520
520
|
mssql: () => t`DISTINCT `,
|
|
@@ -522,43 +522,43 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
522
522
|
}) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(I(n, e.table))}` : t`${t(I(n, e.table))} AS ${t(e.alias)}`, m = (e.joins ?? []).map((e) => {
|
|
523
523
|
let r = e.kind === "inner" ? "INNER" : "LEFT";
|
|
524
524
|
return t` ${t.unsafe(r)} JOIN ${t(I(n, e.table))} AS ${t(e.alias)} ON ${R(e.on, t, n)}`;
|
|
525
|
-
}), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null :
|
|
526
|
-
r !== null &&
|
|
527
|
-
for (let n of e.order)
|
|
528
|
-
let
|
|
525
|
+
}), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null : un(c, e.table, t), _ = [e.predicate ? R(e.predicate, t, n) : null, g].filter((e) => e !== null), ee = _.length > 0 ? t` WHERE ${t.and(_)}` : t``, te = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, v = e.having ? t` HAVING ${R(e.having, t, n)}` : t``, y = e.skip !== void 0, b = [];
|
|
526
|
+
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`);
|
|
527
|
+
for (let n of e.order) b.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
|
|
528
|
+
let ne = b.length > 0 ? t` ORDER BY ${t.csv(b)}` : y ? t.onDialectOrElse({
|
|
529
529
|
mssql: () => t` ORDER BY (SELECT NULL)`,
|
|
530
530
|
orElse: () => t``
|
|
531
|
-
}) : t``,
|
|
531
|
+
}) : t``, x = (e) => {
|
|
532
532
|
if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`compileSelect: expected non-negative integer take/skip, got ${e}`);
|
|
533
533
|
return t.unsafe(String(e));
|
|
534
|
-
},
|
|
534
|
+
}, S = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${z(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``;
|
|
535
535
|
return t.onDialectOrElse({
|
|
536
536
|
mssql: () => {
|
|
537
|
-
let n = e.take !== void 0 && !
|
|
538
|
-
return t`${
|
|
537
|
+
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``;
|
|
538
|
+
return t`${ie}SELECT ${n}${f}${d} FROM ${h}${ee}${te}${v}${ne}${r}`;
|
|
539
539
|
},
|
|
540
540
|
orElse: () => {
|
|
541
|
-
let n = e.take === void 0 ? t`` : t` LIMIT ${
|
|
542
|
-
return t`${
|
|
541
|
+
let n = e.take === void 0 ? t`` : t` LIMIT ${x(e.take)}`, r = y ? t` OFFSET ${x(e.skip)}` : t``;
|
|
542
|
+
return t`${ie}SELECT ${f}${d} FROM ${h}${ee}${te}${v}${ne}${n}${r}`;
|
|
543
543
|
}
|
|
544
544
|
});
|
|
545
|
-
},
|
|
545
|
+
}, fn = (e, t, n) => {
|
|
546
546
|
if (e.eager === void 0) return null;
|
|
547
|
-
let r =
|
|
547
|
+
let r = pn(e.table, e.eager, e.sourceTable);
|
|
548
548
|
if (r === null) return null;
|
|
549
|
-
let i =
|
|
549
|
+
let i = _n(n, e, r, gn(t, n));
|
|
550
550
|
return i === null ? null : {
|
|
551
551
|
fragment: i,
|
|
552
|
-
decode:
|
|
552
|
+
decode: vn(r)
|
|
553
553
|
};
|
|
554
|
-
},
|
|
555
|
-
let r = n ??
|
|
554
|
+
}, pn = (e, t, n) => {
|
|
555
|
+
let r = n ?? g(e), i = M(e);
|
|
556
556
|
if (i === void 0) return null;
|
|
557
557
|
let a = [];
|
|
558
558
|
for (let [e, n] of Object.entries(t)) {
|
|
559
559
|
let t = i[e];
|
|
560
560
|
if (t === void 0) return null;
|
|
561
|
-
let o =
|
|
561
|
+
let o = mn(e, t, r, n === !0 ? {} : n);
|
|
562
562
|
if (o === null) return null;
|
|
563
563
|
a.push(o);
|
|
564
564
|
}
|
|
@@ -566,11 +566,11 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
566
566
|
table: r,
|
|
567
567
|
children: a
|
|
568
568
|
};
|
|
569
|
-
},
|
|
569
|
+
}, mn = (e, t, n, r) => {
|
|
570
570
|
let i = t.target(), a = (t.kind === "manyToMany" ? void 0 : t.sourceKey) ?? "id", o, s;
|
|
571
571
|
if (t.kind === "manyToMany") o = t.targetKey, s = "target";
|
|
572
572
|
else if (t.kind === "one") {
|
|
573
|
-
let r =
|
|
573
|
+
let r = hn(n, i.tableName);
|
|
574
574
|
if (r !== void 0) o = r, s = "source";
|
|
575
575
|
else try {
|
|
576
576
|
o = t.foreignKey ?? A(i, n.tableName, e), s = "target";
|
|
@@ -589,7 +589,7 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
589
589
|
for (let [n, a] of Object.entries(r.with)) {
|
|
590
590
|
let r = e?.[n];
|
|
591
591
|
if (r === void 0) return null;
|
|
592
|
-
let o =
|
|
592
|
+
let o = mn(n, r, i, a === !0 ? {} : a);
|
|
593
593
|
if (o === null) return null;
|
|
594
594
|
t.push(o);
|
|
595
595
|
}
|
|
@@ -606,35 +606,35 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
606
606
|
branch: r,
|
|
607
607
|
children: c
|
|
608
608
|
};
|
|
609
|
-
}, mn = (e, t) => {
|
|
610
|
-
for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
|
|
611
609
|
}, hn = (e, t) => {
|
|
610
|
+
for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
|
|
611
|
+
}, gn = (e, t) => {
|
|
612
612
|
let n = 0;
|
|
613
613
|
return {
|
|
614
614
|
sql: e,
|
|
615
615
|
dialect: t,
|
|
616
616
|
nextAlias: () => `__a${n++}`
|
|
617
617
|
};
|
|
618
|
-
},
|
|
618
|
+
}, _n = (e, t, n, r) => {
|
|
619
619
|
switch (e) {
|
|
620
|
-
case "postgres": return
|
|
620
|
+
case "postgres": return bn(t, n, r);
|
|
621
621
|
case "sqlite":
|
|
622
|
-
case "turso": return
|
|
622
|
+
case "turso": return Dn(t, n, r);
|
|
623
623
|
case "mysql":
|
|
624
|
-
case "mariadb": return
|
|
625
|
-
case "mssql": return
|
|
624
|
+
case "mariadb": return Mn(t, n, r);
|
|
625
|
+
case "mssql": return zn(t, n, r);
|
|
626
626
|
}
|
|
627
|
-
},
|
|
628
|
-
let t =
|
|
627
|
+
}, vn = (e) => {
|
|
628
|
+
let t = yn(e.table, e.children);
|
|
629
629
|
return (e) => e.map((e) => {
|
|
630
630
|
let n = e.__row, r = typeof n == "string" ? JSON.parse(n) : n;
|
|
631
631
|
return t(r);
|
|
632
632
|
});
|
|
633
|
-
},
|
|
633
|
+
}, yn = (e, t) => {
|
|
634
634
|
let n = [];
|
|
635
635
|
for (let [t, r] of Object.entries(e.fields)) (r.type === "timestamp" || r.type === "date") && n.push(t);
|
|
636
636
|
let r = t.map((e) => {
|
|
637
|
-
let t =
|
|
637
|
+
let t = yn(e.target, e.children), n = e.relation.kind === "one";
|
|
638
638
|
return {
|
|
639
639
|
name: e.relationName,
|
|
640
640
|
decode: t,
|
|
@@ -657,76 +657,76 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
657
657
|
}
|
|
658
658
|
return t;
|
|
659
659
|
};
|
|
660
|
-
},
|
|
661
|
-
let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s =
|
|
660
|
+
}, bn = (e, t, n) => {
|
|
661
|
+
let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = xn(i, t.children, n);
|
|
662
662
|
return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${K(e.predicate, i, r)}` : r``}${e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${U(i, e.column, r)} DESC` : r`${U(i, e.column, r)} ASC`))}` : r``}${e.take === void 0 ? r`` : r` LIMIT ${G(e.take, r)}`}${e.skip === void 0 ? r`` : r` OFFSET ${G(e.skip, r)}`}`;
|
|
663
|
-
},
|
|
663
|
+
}, xn = (e, t, n) => {
|
|
664
664
|
let r = n.sql, i = r`to_jsonb(${r(e)}.*)`;
|
|
665
665
|
if (t.length === 0) return i;
|
|
666
666
|
let a = [];
|
|
667
667
|
for (let i of t) {
|
|
668
|
-
let t =
|
|
668
|
+
let t = Sn(i, e, n);
|
|
669
669
|
if (t === null) return null;
|
|
670
670
|
a.push(r`${W(i.relationName, r)}, ${t}`);
|
|
671
671
|
}
|
|
672
672
|
return r`${i} || jsonb_build_object(${r.csv(a)})`;
|
|
673
|
-
},
|
|
673
|
+
}, Sn = (e, t, n) => {
|
|
674
674
|
switch (n.sql, e.relation.kind) {
|
|
675
|
-
case "one": return
|
|
676
|
-
case "many": return
|
|
677
|
-
case "manyToMany": return
|
|
675
|
+
case "one": return Cn(e, t, n);
|
|
676
|
+
case "many": return wn(e, t, n);
|
|
677
|
+
case "manyToMany": return Tn(e, t, n);
|
|
678
678
|
}
|
|
679
|
-
},
|
|
680
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
679
|
+
}, Cn = (e, t, n) => {
|
|
680
|
+
let r = n.sql, i = n.nextAlias(), a = xn(i, e.children, n);
|
|
681
681
|
if (a === null) return null;
|
|
682
|
-
let o = e.fkSide === "source" ? r`${U(i, "id", r)} = ${U(t, e.foreignKey, r)}` : r`${U(i, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${K(e.branch.where, i, r)}`, c =
|
|
682
|
+
let o = e.fkSide === "source" ? r`${U(i, "id", r)} = ${U(t, e.foreignKey, r)}` : r`${U(i, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${K(e.branch.where, i, r)}`, c = B(i, e.branch.orderBy, r);
|
|
683
683
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}${c} LIMIT 1)`;
|
|
684
|
-
},
|
|
685
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
684
|
+
}, wn = (e, t, n) => {
|
|
685
|
+
let r = n.sql, i = n.nextAlias(), a = xn(i, e.children, n);
|
|
686
686
|
if (a === null) return null;
|
|
687
|
-
let o = r`${U(void 0, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${R(e.branch.where, r)}`, c =
|
|
687
|
+
let o = r`${U(void 0, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${R(e.branch.where, r)}`, c = En(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
|
|
688
688
|
return r`COALESCE((SELECT jsonb_agg(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), '[]'::jsonb)`;
|
|
689
|
-
},
|
|
690
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
689
|
+
}, Tn = (e, t, n) => {
|
|
690
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = xn(o, e.children, n);
|
|
691
691
|
if (c === null) return null;
|
|
692
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${R(e.branch.where, r)}`, u = q(e, s, r), d =
|
|
692
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${R(e.branch.where, r)}`, u = q(e, s, r), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
|
|
693
693
|
return r`COALESCE((SELECT jsonb_agg(${c}) FROM (SELECT ${r(o)}.* FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${U(o, "id", r)} = ${U(s, i.targetKey, r)} WHERE ${U(s, i.sourceKey, r)} = ${U(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), '[]'::jsonb)`;
|
|
694
|
-
},
|
|
695
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
694
|
+
}, B = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${U(e, t.column, n)} DESC` : n`${U(e, t.column, n)} ASC`))}`, En = (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`))}`, Dn = (e, t, n) => {
|
|
695
|
+
let r = n.sql, i = n.nextAlias(), a = V(i, t.table, t.children, n);
|
|
696
696
|
if (a === null) return null;
|
|
697
697
|
let o = e.predicate ? r` WHERE ${K(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${U(i, e.column, r)} DESC` : r`${U(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${G(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${G(e.skip, r)}`;
|
|
698
698
|
return r`SELECT ${a} AS "__row" FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
|
|
699
|
-
},
|
|
699
|
+
}, V = (e, t, n, r) => {
|
|
700
700
|
let i = r.sql, a = [];
|
|
701
701
|
for (let n of Object.keys(t.fields)) a.push(i`${W(n, i)}, ${U(e, n, i)}`);
|
|
702
702
|
for (let t of n) {
|
|
703
|
-
let n =
|
|
703
|
+
let n = On(t, e, r);
|
|
704
704
|
if (n === null) return null;
|
|
705
705
|
a.push(i`${W(t.relationName, i)}, ${n}`);
|
|
706
706
|
}
|
|
707
707
|
return i`json_object(${i.csv(a)})`;
|
|
708
|
-
},
|
|
708
|
+
}, On = (e, t, n) => {
|
|
709
709
|
switch (e.relation.kind) {
|
|
710
|
-
case "one": return
|
|
711
|
-
case "many": return
|
|
712
|
-
case "manyToMany": return
|
|
710
|
+
case "one": return kn(e, t, n);
|
|
711
|
+
case "many": return An(e, t, n);
|
|
712
|
+
case "manyToMany": return jn(e, t, n);
|
|
713
713
|
}
|
|
714
|
-
},
|
|
715
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
714
|
+
}, kn = (e, t, n) => {
|
|
715
|
+
let r = n.sql, i = n.nextAlias(), a = V(i, e.target, e.children, n);
|
|
716
716
|
if (a === null) return null;
|
|
717
717
|
let o = e.fkSide === "source" ? r`${U(i, "id", r)} = ${U(t, e.foreignKey, r)}` : r`${U(i, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`;
|
|
718
718
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
|
|
719
|
-
},
|
|
720
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
719
|
+
}, An = (e, t, n) => {
|
|
720
|
+
let r = n.sql, i = n.nextAlias(), a = V(i, e.target, e.children, n);
|
|
721
721
|
if (a === null) return null;
|
|
722
|
-
let o = r`${U(void 0, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, c =
|
|
722
|
+
let o = r`${U(void 0, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, c = En(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
|
|
723
723
|
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('[]'))`;
|
|
724
|
-
},
|
|
725
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
724
|
+
}, jn = (e, t, n) => {
|
|
725
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = V(o, e.target, e.children, n);
|
|
726
726
|
if (c === null) return null;
|
|
727
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, u = q(e, s, r, !0), d =
|
|
727
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, u = q(e, s, r, !0), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
|
|
728
728
|
return r`COALESCE((SELECT json_group_array(${c}) FROM (SELECT ${r(o)}.* FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${U(o, "id", r)} = ${U(s, i.targetKey, r)} WHERE ${U(s, i.sourceKey, r)} = ${U(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), json('[]'))`;
|
|
729
|
-
},
|
|
729
|
+
}, Mn = (e, t, n) => {
|
|
730
730
|
let r = n.sql, i = n.nextAlias(), a = H(i, t.table, t.children, n);
|
|
731
731
|
if (a === null) return null;
|
|
732
732
|
let o = e.predicate ? r` WHERE ${K(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${U(i, e.column, r)} DESC` : r`${U(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${G(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${G(e.skip, r)}`;
|
|
@@ -735,48 +735,48 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
735
735
|
let i = r.sql, a = [];
|
|
736
736
|
for (let n of Object.keys(t.fields)) a.push(i`${W(n, i)}, ${U(e, n, i)}`);
|
|
737
737
|
for (let t of n) {
|
|
738
|
-
let n =
|
|
738
|
+
let n = Nn(t, e, r);
|
|
739
739
|
if (n === null) return null;
|
|
740
740
|
a.push(i`${W(t.relationName, i)}, ${n}`);
|
|
741
741
|
}
|
|
742
742
|
return i`JSON_OBJECT(${i.csv(a)})`;
|
|
743
|
-
},
|
|
743
|
+
}, Nn = (e, t, n) => {
|
|
744
744
|
switch (e.relation.kind) {
|
|
745
|
-
case "one": return
|
|
746
|
-
case "many": return n.dialect === "mariadb" ?
|
|
747
|
-
case "manyToMany": return n.dialect === "mariadb" ?
|
|
745
|
+
case "one": return Pn(e, t, n);
|
|
746
|
+
case "many": return n.dialect === "mariadb" ? Ln(e, t, n) : Fn(e, t, n);
|
|
747
|
+
case "manyToMany": return n.dialect === "mariadb" ? Rn(e, t, n) : In(e, t, n);
|
|
748
748
|
}
|
|
749
|
-
},
|
|
749
|
+
}, Pn = (e, t, n) => {
|
|
750
750
|
let r = n.sql, i = n.nextAlias(), a = H(i, e.target, e.children, n);
|
|
751
751
|
if (a === null) return null;
|
|
752
752
|
let o = e.fkSide === "source" ? r`${U(i, "id", r)} = ${U(t, e.foreignKey, r)}` : r`${U(i, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`;
|
|
753
753
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
|
|
754
|
-
},
|
|
754
|
+
}, Fn = (e, t, n) => {
|
|
755
755
|
let r = n.sql, i = n.nextAlias(), a = H(i, e.target, e.children, n);
|
|
756
756
|
if (a === null) return null;
|
|
757
|
-
let o = r`${U(void 0, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, c =
|
|
757
|
+
let o = r`${U(void 0, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, c = En(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
|
|
758
758
|
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())`;
|
|
759
|
-
},
|
|
759
|
+
}, In = (e, t, n) => {
|
|
760
760
|
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = H(o, e.target, e.children, n);
|
|
761
761
|
if (c === null) return null;
|
|
762
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, u = q(e, s, r, !0), d =
|
|
762
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, u = q(e, s, r, !0), d = B(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${G(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${G(e.branch.offset, r)}`;
|
|
763
763
|
return r`COALESCE((SELECT JSON_ARRAYAGG(${c}) FROM (SELECT ${r(o)}.* FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${U(o, "id", r)} = ${U(s, i.targetKey, r)} WHERE ${U(s, i.sourceKey, r)} = ${U(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), JSON_ARRAY())`;
|
|
764
|
-
},
|
|
764
|
+
}, Ln = (e, t, n) => {
|
|
765
765
|
let r = n.sql, i = n.nextAlias(), a = H(i, e.target, e.children, n);
|
|
766
766
|
if (a === null) return null;
|
|
767
767
|
let o = r`${U(i, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
|
|
768
768
|
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`${U(i, e.column, r)} DESC` : r`${U(i, e.column, r)} ASC`))}` : r``}) FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}), JSON_ARRAY())`;
|
|
769
769
|
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 ${U(i, "rn", r)} > ${G(d, r)} AND ${U(i, "rn", r)} <= ${G(d + u, r)}` : u === void 0 ? r` AND ${U(i, "rn", r)} > ${G(d, r)}` : r` AND ${U(i, "rn", r)} <= ${G(u, r)}`;
|
|
770
770
|
return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${U(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())`;
|
|
771
|
-
},
|
|
771
|
+
}, Rn = (e, t, n) => {
|
|
772
772
|
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = H(o, e.target, e.children, n);
|
|
773
773
|
if (c === null) return null;
|
|
774
774
|
let l = r`${U(s, i.sourceKey, r)} = ${U(t, "id", r)}`, u = r`${U(o, "id", r)} = ${U(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${R(J(e.branch.where), r)}`, f = q(e, s, r, !0), p = e.branch.orderBy ?? [];
|
|
775
775
|
if (!(e.branch.limit !== void 0 || e.branch.offset !== void 0)) return r`COALESCE((SELECT JSON_ARRAYAGG(${c}${p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${U(o, e.column, r)} DESC` : r`${U(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())`;
|
|
776
|
-
let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${U(o, e.column, r)} DESC` : r`${U(o, e.column, r)} ASC`))}` : r` ORDER BY ${U(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, _ = n.nextAlias(), ee = h !== void 0 && g !== void 0 ? r` AND ${U(_, "rn", r)} > ${G(g, r)} AND ${U(_, "rn", r)} <= ${G(g + h, r)}` : h === void 0 ? r` AND ${U(_, "rn", r)} > ${G(g, r)}` : r` AND ${U(_, "rn", r)} <= ${G(h, r)}`,
|
|
777
|
-
return r`COALESCE((SELECT JSON_ARRAYAGG(${c} ORDER BY ${U(_, "rn", r)}) FROM (SELECT ${r(o)}.*, ${U(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${U(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}${
|
|
778
|
-
},
|
|
779
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
776
|
+
let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${U(o, e.column, r)} DESC` : r`${U(o, e.column, r)} ASC`))}` : r` ORDER BY ${U(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, _ = n.nextAlias(), ee = h !== void 0 && g !== void 0 ? r` AND ${U(_, "rn", r)} > ${G(g, r)} AND ${U(_, "rn", r)} <= ${G(g + h, r)}` : h === void 0 ? r` AND ${U(_, "rn", r)} > ${G(g, r)}` : r` AND ${U(_, "rn", r)} <= ${G(h, r)}`, te = e.branch.onJunction === void 0 ? r`` : r` WHERE ${K(J(e.branch.onJunction), s, r)}`;
|
|
777
|
+
return r`COALESCE((SELECT JSON_ARRAYAGG(${c} ORDER BY ${U(_, "rn", r)}) FROM (SELECT ${r(o)}.*, ${U(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${U(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(_)} WHERE ${U(_, `__src_${i.sourceKey}`, r)} = ${U(t, "id", r)}${d}${ee}), JSON_ARRAY())`;
|
|
778
|
+
}, zn = (e, t, n) => {
|
|
779
|
+
let r = n.sql, i = n.nextAlias(), a = Bn(i, t.table, t.children, n);
|
|
780
780
|
if (a === null) return null;
|
|
781
781
|
let o = e.predicate ? r` WHERE ${K(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${U(i, e.column, r)} DESC` : r`${U(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
|
|
782
782
|
if (e.skip !== void 0) {
|
|
@@ -785,28 +785,28 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
785
785
|
} else e.take !== void 0 && (c = r`TOP ${G(e.take, r)} `);
|
|
786
786
|
let u = e.skip === void 0 ? s : r``;
|
|
787
787
|
return r`SELECT [__row] = (SELECT ${c}${a} FROM ${r(t.table.tableName)} AS ${r(i)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER)`;
|
|
788
|
-
},
|
|
788
|
+
}, Bn = (e, t, n, r) => {
|
|
789
789
|
let i = r.sql, a = [];
|
|
790
790
|
for (let n of Object.keys(t.fields)) a.push(i`${U(e, n, i)} AS ${i(n)}`);
|
|
791
791
|
for (let t of n) {
|
|
792
|
-
let n =
|
|
792
|
+
let n = Vn(t, e, r);
|
|
793
793
|
if (n === null) return null;
|
|
794
794
|
a.push(n);
|
|
795
795
|
}
|
|
796
796
|
return i.csv(a);
|
|
797
|
-
},
|
|
797
|
+
}, Vn = (e, t, n) => {
|
|
798
798
|
let r = n.sql;
|
|
799
799
|
switch (e.relation.kind) {
|
|
800
800
|
case "one": {
|
|
801
|
-
let i = n.nextAlias(), a =
|
|
801
|
+
let i = n.nextAlias(), a = Bn(i, e.target, e.children, n);
|
|
802
802
|
if (a === null) return null;
|
|
803
803
|
let o = e.fkSide === "source" ? r`${U(i, "id", r)} = ${U(t, e.foreignKey, r)}` : r`${U(i, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}`;
|
|
804
804
|
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)}`;
|
|
805
805
|
}
|
|
806
806
|
case "many": {
|
|
807
|
-
let i = n.nextAlias(), a =
|
|
807
|
+
let i = n.nextAlias(), a = Bn(i, e.target, e.children, n);
|
|
808
808
|
if (a === null) return null;
|
|
809
|
-
let o = e.branch.where === void 0 ? r`` : r` AND ${K(e.branch.where, i, r)}`, s =
|
|
809
|
+
let o = e.branch.where === void 0 ? r`` : r` AND ${K(e.branch.where, i, r)}`, s = B(i, e.branch.orderBy, r), c = r``, l = r``;
|
|
810
810
|
if (e.branch.offset !== void 0) {
|
|
811
811
|
let t = e.branch.orderBy && e.branch.orderBy.length > 0 ? s : r` ORDER BY (SELECT NULL)`;
|
|
812
812
|
l = e.branch.limit === void 0 ? r`${t} OFFSET ${G(e.branch.offset, r)} ROWS` : r`${t} OFFSET ${G(e.branch.offset, r)} ROWS FETCH NEXT ${G(e.branch.limit, r)} ROWS ONLY`;
|
|
@@ -815,9 +815,9 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
815
815
|
return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${U(i, e.foreignKey, r)} = ${U(t, e.sourceKey, r)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
|
|
816
816
|
}
|
|
817
817
|
case "manyToMany": {
|
|
818
|
-
let i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
818
|
+
let i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Bn(o, e.target, e.children, n);
|
|
819
819
|
if (c === null) return null;
|
|
820
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${K(e.branch.where, o, r)}`, u = q(e, s, r), d =
|
|
820
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${K(e.branch.where, o, r)}`, u = q(e, s, r), d = B(o, e.branch.orderBy, r), f = r``, p = r``;
|
|
821
821
|
if (e.branch.offset !== void 0) {
|
|
822
822
|
let t = e.branch.orderBy && e.branch.orderBy.length > 0 ? d : r` ORDER BY (SELECT NULL)`;
|
|
823
823
|
p = e.branch.limit === void 0 ? r`${t} OFFSET ${G(e.branch.offset, r)} ROWS` : r`${t} OFFSET ${G(e.branch.offset, r)} ROWS FETCH NEXT ${G(e.branch.limit, r)} ROWS ONLY`;
|
|
@@ -829,13 +829,13 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
829
829
|
}, U = (e, t, n) => e === void 0 ? n`${n(t)}` : n`${n(e)}.${n(t)}`, W = (e, t) => t.unsafe(`'${e.replace(/'/g, "''")}'`), G = (e, t) => {
|
|
830
830
|
if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`literalInt: expected non-negative integer, got ${e}`);
|
|
831
831
|
return t.unsafe(String(e));
|
|
832
|
-
}, K = (e, t, n) => R(
|
|
832
|
+
}, K = (e, t, n) => R(Hn(e, t), n), q = (e, t, n, r = !1) => {
|
|
833
833
|
let i = e.branch.onJunction;
|
|
834
834
|
return i === void 0 ? n`` : n` AND ${K(r ? J(i) : i, t, n)}`;
|
|
835
|
-
},
|
|
836
|
-
if ("not" in e) return { not:
|
|
837
|
-
if ("and" in e) return { and: e.and.map((e) =>
|
|
838
|
-
if ("or" in e) return { or: e.or.map((e) =>
|
|
835
|
+
}, Hn = (e, t) => {
|
|
836
|
+
if ("not" in e) return { not: Hn(e.not, t) };
|
|
837
|
+
if ("and" in e) return { and: e.and.map((e) => Hn(e, t)) };
|
|
838
|
+
if ("or" in e) return { or: e.or.map((e) => Hn(e, t)) };
|
|
839
839
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
840
840
|
let n = e;
|
|
841
841
|
return {
|
|
@@ -857,83 +857,83 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
857
857
|
let t = e;
|
|
858
858
|
return {
|
|
859
859
|
...t,
|
|
860
|
-
value:
|
|
860
|
+
value: Un(t.value)
|
|
861
861
|
};
|
|
862
|
-
},
|
|
863
|
-
e.actors !== void 0 && (
|
|
864
|
-
},
|
|
862
|
+
}, Un = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => Un(e)) : e, Wn = Symbol.for("@voltro/database/coreTablesRegistry"), Gn = globalThis, Kn = Gn[Wn] ?? (Gn[Wn] = {}), qn = (e) => {
|
|
863
|
+
e.actors !== void 0 && (Kn.actors = e.actors), e.tenants !== void 0 && (Kn.tenants = e.tenants);
|
|
864
|
+
}, Jn = (e, t) => () => {
|
|
865
865
|
let n = e();
|
|
866
866
|
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`);
|
|
867
867
|
return n();
|
|
868
|
-
},
|
|
869
|
-
id:
|
|
870
|
-
kind:
|
|
868
|
+
}, Yn = () => Jn(() => Kn.actors, "actors"), Xn = () => Jn(() => Kn.tenants, "tenants"), Zn = C("actors", {
|
|
869
|
+
id: D(),
|
|
870
|
+
kind: v().oneOf([
|
|
871
871
|
"user",
|
|
872
872
|
"serviceAccount",
|
|
873
873
|
"apiKey",
|
|
874
874
|
"system"
|
|
875
875
|
]),
|
|
876
|
-
displayName:
|
|
877
|
-
createdAt:
|
|
878
|
-
}),
|
|
876
|
+
displayName: v().nullable(),
|
|
877
|
+
createdAt: E().default("now")
|
|
878
|
+
}), Qn = (e, t) => ({
|
|
879
879
|
column: e,
|
|
880
880
|
op: "eq",
|
|
881
881
|
value: t
|
|
882
|
-
}),
|
|
882
|
+
}), $n = (e, t) => ({
|
|
883
883
|
column: e,
|
|
884
884
|
op: "neq",
|
|
885
885
|
value: t
|
|
886
|
-
}),
|
|
886
|
+
}), er = (e, t) => ({
|
|
887
887
|
column: e,
|
|
888
888
|
op: "gt",
|
|
889
889
|
value: t
|
|
890
|
-
}),
|
|
890
|
+
}), tr = (e, t) => ({
|
|
891
891
|
column: e,
|
|
892
892
|
op: "gte",
|
|
893
893
|
value: t
|
|
894
|
-
}),
|
|
894
|
+
}), nr = (e, t) => ({
|
|
895
895
|
column: e,
|
|
896
896
|
op: "lt",
|
|
897
897
|
value: t
|
|
898
|
-
}),
|
|
898
|
+
}), rr = (e, t) => ({
|
|
899
899
|
column: e,
|
|
900
900
|
op: "lte",
|
|
901
901
|
value: t
|
|
902
|
-
}),
|
|
902
|
+
}), ir = (e, t) => ({
|
|
903
903
|
column: e,
|
|
904
904
|
op: "in",
|
|
905
905
|
value: t
|
|
906
|
-
}),
|
|
906
|
+
}), ar = (e, t) => ({
|
|
907
907
|
column: e,
|
|
908
908
|
op: "notIn",
|
|
909
909
|
value: t
|
|
910
|
-
}),
|
|
910
|
+
}), or = (e, t) => ({
|
|
911
911
|
column: e,
|
|
912
912
|
op: "contains",
|
|
913
913
|
value: t
|
|
914
|
-
}),
|
|
914
|
+
}), sr = (e, t) => ({
|
|
915
915
|
column: e,
|
|
916
916
|
op: "arrayContains",
|
|
917
917
|
value: t
|
|
918
|
-
}),
|
|
918
|
+
}), cr = (e, t) => ({
|
|
919
919
|
column: e,
|
|
920
920
|
op: "arrayOverlaps",
|
|
921
921
|
value: t
|
|
922
|
-
}),
|
|
922
|
+
}), lr = (e, t) => ({
|
|
923
923
|
column: e,
|
|
924
924
|
op: "arrayHas",
|
|
925
925
|
value: t
|
|
926
|
-
}),
|
|
926
|
+
}), ur = (e) => ({
|
|
927
927
|
column: e,
|
|
928
928
|
op: "isNull"
|
|
929
|
-
}),
|
|
929
|
+
}), dr = (e) => ({
|
|
930
930
|
column: e,
|
|
931
931
|
op: "isNotNull"
|
|
932
|
-
}),
|
|
932
|
+
}), fr = (e, t) => ({
|
|
933
933
|
column: e,
|
|
934
934
|
op: "spatial",
|
|
935
935
|
value: t
|
|
936
|
-
}),
|
|
936
|
+
}), pr = (...e) => ({ and: e }), mr = (...e) => ({ or: e }), hr = (e) => ({ not: e }), gr = (e, ...t) => {
|
|
937
937
|
if (t.length === 0) throw Error(`jsonField("${e}"): at least one path segment is required`);
|
|
938
938
|
let n = (n, r) => ({
|
|
939
939
|
column: e,
|
|
@@ -954,29 +954,29 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
954
954
|
isNull: () => n("isNull"),
|
|
955
955
|
isNotNull: () => n("isNotNull")
|
|
956
956
|
};
|
|
957
|
-
},
|
|
957
|
+
}, _r = (e) => "descriptor" in e ? e.descriptor : e, vr = (e, t) => ({
|
|
958
958
|
column: e,
|
|
959
959
|
op: "subquery-in",
|
|
960
|
-
subquery:
|
|
961
|
-
}),
|
|
960
|
+
subquery: _r(t)
|
|
961
|
+
}), yr = (e, t) => ({
|
|
962
962
|
column: e,
|
|
963
963
|
op: "subquery-not-in",
|
|
964
|
-
subquery:
|
|
965
|
-
}), yr = (e) => ({
|
|
966
|
-
op: "exists",
|
|
967
|
-
subquery: gr(e)
|
|
964
|
+
subquery: _r(t)
|
|
968
965
|
}), br = (e) => ({
|
|
966
|
+
op: "exists",
|
|
967
|
+
subquery: _r(e)
|
|
968
|
+
}), xr = (e) => ({
|
|
969
969
|
op: "not-exists",
|
|
970
|
-
subquery:
|
|
971
|
-
}),
|
|
970
|
+
subquery: _r(e)
|
|
971
|
+
}), Sr = (e, t) => e == null || t == null ? null : typeof e == typeof t ? e === t ? 0 : e > t ? 1 : -1 : null, Cr = (e, t, n = null) => {
|
|
972
972
|
if (!t) return !1;
|
|
973
|
-
if ("not" in e) return !
|
|
973
|
+
if ("not" in e) return !Cr(e.not, t, n);
|
|
974
974
|
if ("and" in e) {
|
|
975
|
-
for (let r of e.and) if (!
|
|
975
|
+
for (let r of e.and) if (!Cr(r, t, n)) return !1;
|
|
976
976
|
return !0;
|
|
977
977
|
}
|
|
978
978
|
if ("or" in e) {
|
|
979
|
-
for (let r of e.or) if (
|
|
979
|
+
for (let r of e.or) if (Cr(r, t, n)) return !0;
|
|
980
980
|
return !1;
|
|
981
981
|
}
|
|
982
982
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
@@ -995,10 +995,10 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
995
995
|
switch (r.op) {
|
|
996
996
|
case "eq": return i === r.value;
|
|
997
997
|
case "neq": return i !== r.value;
|
|
998
|
-
case "gt": return (
|
|
999
|
-
case "gte": return (
|
|
1000
|
-
case "lt": return (
|
|
1001
|
-
case "lte": return (
|
|
998
|
+
case "gt": return (Sr(i, r.value) ?? -1) > 0;
|
|
999
|
+
case "gte": return (Sr(i, r.value) ?? -1) >= 0;
|
|
1000
|
+
case "lt": return (Sr(i, r.value) ?? 1) < 0;
|
|
1001
|
+
case "lte": return (Sr(i, r.value) ?? 1) <= 0;
|
|
1002
1002
|
case "in": return Array.isArray(r.value) && r.value.includes(i);
|
|
1003
1003
|
case "notIn": return Array.isArray(r.value) && !r.value.includes(i);
|
|
1004
1004
|
case "contains": return typeof i == "string" && typeof r.value == "string" && i.toLowerCase().includes(r.value.toLowerCase());
|
|
@@ -1015,17 +1015,17 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1015
1015
|
case "isNotNull": return i != null;
|
|
1016
1016
|
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.");
|
|
1017
1017
|
}
|
|
1018
|
-
},
|
|
1018
|
+
}, wr = function* (e) {
|
|
1019
1019
|
if ("not" in e) {
|
|
1020
|
-
yield*
|
|
1020
|
+
yield* wr(e.not);
|
|
1021
1021
|
return;
|
|
1022
1022
|
}
|
|
1023
1023
|
if ("and" in e) {
|
|
1024
|
-
for (let t of e.and) yield*
|
|
1024
|
+
for (let t of e.and) yield* wr(t);
|
|
1025
1025
|
return;
|
|
1026
1026
|
}
|
|
1027
1027
|
if ("or" in e) {
|
|
1028
|
-
for (let t of e.or) yield*
|
|
1028
|
+
for (let t of e.or) yield* wr(t);
|
|
1029
1029
|
return;
|
|
1030
1030
|
}
|
|
1031
1031
|
e.op === "subquery-in" || e.op === "subquery-not-in" ? yield {
|
|
@@ -1035,27 +1035,27 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1035
1035
|
kind: "exists",
|
|
1036
1036
|
descriptor: e.subquery
|
|
1037
1037
|
});
|
|
1038
|
-
},
|
|
1038
|
+
}, Tr = function* (e, t = !0) {
|
|
1039
1039
|
if ("not" in e) {
|
|
1040
|
-
yield*
|
|
1040
|
+
yield* Tr(e.not, !1);
|
|
1041
1041
|
return;
|
|
1042
1042
|
}
|
|
1043
1043
|
if ("and" in e) {
|
|
1044
|
-
for (let n of e.and) yield*
|
|
1044
|
+
for (let n of e.and) yield* Tr(n, t);
|
|
1045
1045
|
return;
|
|
1046
1046
|
}
|
|
1047
1047
|
if ("or" in e) {
|
|
1048
|
-
for (let t of e.or) yield*
|
|
1048
|
+
for (let t of e.or) yield* Tr(t, !1);
|
|
1049
1049
|
return;
|
|
1050
1050
|
}
|
|
1051
1051
|
e.op === "subquery-in" || e.op === "subquery-not-in" || e.op === "exists" || e.op === "not-exists" || (yield {
|
|
1052
1052
|
...e,
|
|
1053
1053
|
conjunctive: t
|
|
1054
1054
|
});
|
|
1055
|
-
},
|
|
1055
|
+
}, Er = class extends rt.TaggedError("TableStreamError") {}, Dr = 1e3, Or = (e, t, n, r) => {
|
|
1056
1056
|
let i = O.match(r, {
|
|
1057
1057
|
onNone: () => e.where,
|
|
1058
|
-
onSome: (n) => e.where ?
|
|
1058
|
+
onSome: (n) => e.where ? pr(e.where, er(t, n)) : er(t, n)
|
|
1059
1059
|
});
|
|
1060
1060
|
return {
|
|
1061
1061
|
table: e.table,
|
|
@@ -1070,19 +1070,19 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1070
1070
|
...e.includeDeleted === void 0 ? {} : { includeDeleted: e.includeDeleted },
|
|
1071
1071
|
...e.crossTenant === void 0 ? {} : { crossTenant: e.crossTenant }
|
|
1072
1072
|
};
|
|
1073
|
-
},
|
|
1074
|
-
let n = t.pk ?? "id", r = t.chunkSize ??
|
|
1075
|
-
return
|
|
1076
|
-
let a =
|
|
1077
|
-
try: () => e.query(
|
|
1078
|
-
catch: (e) => new
|
|
1073
|
+
}, kr = (e, t) => {
|
|
1074
|
+
let n = t.pk ?? "id", r = t.chunkSize ?? Dr;
|
|
1075
|
+
return at.paginateChunkEffect(O.none(), (i) => {
|
|
1076
|
+
let a = it.tryPromise({
|
|
1077
|
+
try: () => e.query(Or(t, n, r, i)),
|
|
1078
|
+
catch: (e) => new Er({
|
|
1079
1079
|
table: t.table,
|
|
1080
1080
|
cause: e
|
|
1081
1081
|
})
|
|
1082
1082
|
});
|
|
1083
|
-
return (t.retry ? a.pipe(
|
|
1083
|
+
return (t.retry ? a.pipe(it.retry(t.retry)) : a).pipe(it.map((e) => [nt.fromIterable(e), e.length === r && e.length > 0 ? O.some(O.some(e[e.length - 1][n])) : O.none()]));
|
|
1084
1084
|
});
|
|
1085
|
-
},
|
|
1085
|
+
}, Ar = (e) => {
|
|
1086
1086
|
let t = e.alpha ?? .5;
|
|
1087
1087
|
if (t < 0 || t > 1) throw Error(`hybridSearch: alpha must be in [0, 1], got ${t}`);
|
|
1088
1088
|
return (n) => {
|
|
@@ -1096,7 +1096,7 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1096
1096
|
queryText: e.vector.query,
|
|
1097
1097
|
distance: e.vector.distance ?? "cosine",
|
|
1098
1098
|
alpha: t
|
|
1099
|
-
}, i =
|
|
1099
|
+
}, i = c(n.table, e.fts.indexName, n.fullTextIndexes);
|
|
1100
1100
|
return {
|
|
1101
1101
|
...n,
|
|
1102
1102
|
annClause: r,
|
|
@@ -1109,17 +1109,17 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1109
1109
|
}
|
|
1110
1110
|
};
|
|
1111
1111
|
};
|
|
1112
|
-
},
|
|
1112
|
+
}, jr = async (e, t) => {
|
|
1113
1113
|
let n = e.as ?? "embedding", r = t.row[e.from];
|
|
1114
1114
|
if (typeof r != "string" || r.length === 0) return {};
|
|
1115
1115
|
let i = await t.embed(r);
|
|
1116
1116
|
return { [n]: i };
|
|
1117
|
-
},
|
|
1117
|
+
}, Mr = (e) => {
|
|
1118
1118
|
if (!Number.isInteger(e.dimensions) || e.dimensions <= 0) throw Error(`vectorEmbedding: dimensions must be a positive integer, got ${String(e.dimensions)}.`);
|
|
1119
|
-
let t = e.as ?? "embedding",
|
|
1120
|
-
return
|
|
1119
|
+
let t = e.as ?? "embedding", r = (t) => jr(e, t);
|
|
1120
|
+
return ae({
|
|
1121
1121
|
id: "voltro/vectorEmbedding",
|
|
1122
|
-
fields: { [t]:
|
|
1122
|
+
fields: { [t]: n(e.dimensions) },
|
|
1123
1123
|
...e.index === !1 ? {} : { indexes: [{
|
|
1124
1124
|
fields: [t],
|
|
1125
1125
|
kind: "hnsw",
|
|
@@ -1130,23 +1130,23 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1130
1130
|
} }
|
|
1131
1131
|
}] },
|
|
1132
1132
|
behaviors: {
|
|
1133
|
-
beforeInsert:
|
|
1134
|
-
beforeUpdate:
|
|
1133
|
+
beforeInsert: r,
|
|
1134
|
+
beforeUpdate: r
|
|
1135
1135
|
}
|
|
1136
1136
|
});
|
|
1137
|
-
},
|
|
1137
|
+
}, Nr = 63, Pr = "br_pr", Y = class extends Error {
|
|
1138
1138
|
_tag = "BranchNameInvalid";
|
|
1139
1139
|
constructor(e) {
|
|
1140
1140
|
super(e), this.name = "BranchNameInvalid";
|
|
1141
1141
|
}
|
|
1142
|
-
},
|
|
1142
|
+
}, Fr = (e, t) => {
|
|
1143
1143
|
if (!Number.isInteger(t) || t < 0) throw new Y(`prNumber must be a non-negative integer, got ${String(t)}`);
|
|
1144
|
-
let n =
|
|
1144
|
+
let n = Qt(e);
|
|
1145
1145
|
if (n.replace(/_/g, "") === "") throw new Y(`app slug '${e}' has no usable identifier characters`);
|
|
1146
|
-
let r = `${
|
|
1147
|
-
if (r.length >
|
|
1146
|
+
let r = `${Pr}${t}_${n}`;
|
|
1147
|
+
if (r.length > Nr) throw new Y(`branch namespace '${r}' exceeds the ${Nr}-byte identifier limit — use a shorter app slug`);
|
|
1148
1148
|
return r;
|
|
1149
|
-
},
|
|
1149
|
+
}, Ir = (e) => e.startsWith(Pr), Lr = {
|
|
1150
1150
|
requested: {
|
|
1151
1151
|
provision: "provisioning",
|
|
1152
1152
|
destroy: "destroying"
|
|
@@ -1165,18 +1165,18 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1165
1165
|
fail: "failed"
|
|
1166
1166
|
},
|
|
1167
1167
|
destroyed: {}
|
|
1168
|
-
},
|
|
1168
|
+
}, Rr = class extends Error {
|
|
1169
1169
|
from;
|
|
1170
1170
|
event;
|
|
1171
1171
|
_tag = "BranchTransitionInvalid";
|
|
1172
1172
|
constructor(e, t) {
|
|
1173
1173
|
super(`invalid branch transition: ${e} --${t}-->`), this.from = e, this.event = t, this.name = "BranchTransitionInvalid";
|
|
1174
1174
|
}
|
|
1175
|
-
},
|
|
1176
|
-
let n =
|
|
1177
|
-
if (n === void 0) throw new
|
|
1175
|
+
}, zr = (e, t) => {
|
|
1176
|
+
let n = Lr[e][t];
|
|
1177
|
+
if (n === void 0) throw new Rr(e, t);
|
|
1178
1178
|
return n;
|
|
1179
|
-
},
|
|
1179
|
+
}, Br = (e, t, n, r) => {
|
|
1180
1180
|
if (n === "copy" && (r === void 0 || r === "")) throw new Y("seed 'copy' requires a parentNamespace to snapshot from");
|
|
1181
1181
|
let i = [{
|
|
1182
1182
|
kind: "create-namespace",
|
|
@@ -1197,13 +1197,13 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1197
1197
|
detail: `run boot seeds into ${e}`
|
|
1198
1198
|
});
|
|
1199
1199
|
return i;
|
|
1200
|
-
},
|
|
1201
|
-
if (!
|
|
1200
|
+
}, Vr = (e) => {
|
|
1201
|
+
if (!Ir(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
|
|
1202
1202
|
return [{
|
|
1203
1203
|
kind: "drop-namespace",
|
|
1204
1204
|
detail: e
|
|
1205
1205
|
}];
|
|
1206
|
-
},
|
|
1206
|
+
}, Hr = (e) => {
|
|
1207
1207
|
if (e === void 0 || e === "") return !1;
|
|
1208
1208
|
try {
|
|
1209
1209
|
let t = new URL(e).hostname.toLowerCase();
|
|
@@ -1211,27 +1211,27 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1211
1211
|
} catch {
|
|
1212
1212
|
return /\bneon\.(tech|build)\b/i.test(e);
|
|
1213
1213
|
}
|
|
1214
|
-
},
|
|
1214
|
+
}, Ur = (e) => e.prefer === void 0 ? e.seed === "copy" && Hr(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, Wr = (e, t = {}) => [{
|
|
1215
1215
|
kind: "neon-branch-create",
|
|
1216
1216
|
detail: `${t.parentBranch ?? "main"} → ${e} (copy-on-write)`
|
|
1217
|
-
}],
|
|
1218
|
-
if (!
|
|
1217
|
+
}], Gr = (e) => {
|
|
1218
|
+
if (!Ir(e)) throw new Y(`refusing to plan teardown of '${e}' — not a branch namespace`);
|
|
1219
1219
|
return [{
|
|
1220
1220
|
kind: "neon-branch-delete",
|
|
1221
1221
|
detail: e
|
|
1222
1222
|
}];
|
|
1223
|
-
},
|
|
1223
|
+
}, Kr = (e) => e.mechanism === "neon-cow" ? Wr(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : Br(e.branchId, e.tableNames, e.seed, e.parentNamespace), qr = (e, t) => e === "neon-cow" ? Gr(t) : Vr(t), Jr = (e, t, n) => {
|
|
1224
1224
|
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);
|
|
1225
1225
|
return {
|
|
1226
1226
|
evict: i,
|
|
1227
1227
|
rejectNew: r.filter((e) => !a.has(e.namespace)).length >= t.maxBranches
|
|
1228
1228
|
};
|
|
1229
|
-
},
|
|
1230
|
-
let n =
|
|
1229
|
+
}, Yr = async (e, t) => {
|
|
1230
|
+
let n = Fr(e.appSlug, e.prNumber), r = Ur({
|
|
1231
1231
|
seed: e.seed,
|
|
1232
1232
|
...e.dbUrl === void 0 ? {} : { dbUrl: e.dbUrl },
|
|
1233
1233
|
...e.prefer === void 0 ? {} : { prefer: e.prefer }
|
|
1234
|
-
}), i =
|
|
1234
|
+
}), i = Kr({
|
|
1235
1235
|
mechanism: r,
|
|
1236
1236
|
branchId: n,
|
|
1237
1237
|
tableNames: e.tableNames,
|
|
@@ -1256,10 +1256,10 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1256
1256
|
mechanism: r,
|
|
1257
1257
|
steps: i
|
|
1258
1258
|
};
|
|
1259
|
-
},
|
|
1260
|
-
let r =
|
|
1259
|
+
}, Xr = async (e, t, n) => {
|
|
1260
|
+
let r = qr(t, e);
|
|
1261
1261
|
return t === "neon-cow" ? await n.neonBranchDelete(e) : await n.dropNamespace(e), r;
|
|
1262
|
-
},
|
|
1262
|
+
}, Zr = (e, t, n) => Jr(e, t, n), X = (e) => `"${e.replace(/"/g, "\"\"")}"`, Qr = (e) => {
|
|
1263
1263
|
let t = () => {
|
|
1264
1264
|
throw Error("namespace branch executor: Neon ops require a neon-cow executor (use a Neon connection for copy-on-write branches)");
|
|
1265
1265
|
};
|
|
@@ -1271,18 +1271,18 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1271
1271
|
neonBranchCreate: t,
|
|
1272
1272
|
neonBranchDelete: t
|
|
1273
1273
|
};
|
|
1274
|
-
},
|
|
1274
|
+
}, $r = class extends Error {
|
|
1275
1275
|
_tag = "TenantResidencyUnresolved";
|
|
1276
1276
|
constructor(e) {
|
|
1277
1277
|
super(e), this.name = "TenantResidencyUnresolved";
|
|
1278
1278
|
}
|
|
1279
|
-
},
|
|
1279
|
+
}, ei = class extends Error {
|
|
1280
1280
|
region;
|
|
1281
1281
|
_tag = "TenantRegionUnavailable";
|
|
1282
1282
|
constructor(e, t) {
|
|
1283
1283
|
super(t), this.region = e, this.name = "TenantRegionUnavailable";
|
|
1284
1284
|
}
|
|
1285
|
-
},
|
|
1285
|
+
}, ti, ni = (e) => {
|
|
1286
1286
|
if (e.homes === void 0) throw Error("setResidencyConfig: `homes` is required");
|
|
1287
1287
|
if (e.servableRegions === void 0 || e.servableRegions.length === 0) throw Error("setResidencyConfig: `servableRegions` must be non-empty (which regions this deployment serves)");
|
|
1288
1288
|
let t = /* @__PURE__ */ new Map();
|
|
@@ -1291,32 +1291,32 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1291
1291
|
if (e !== void 0 && e !== n.region) throw Error(`residency: tenant '${n.tenantId}' is mapped to two regions ('${e}' and '${n.region}')`);
|
|
1292
1292
|
t.set(n.tenantId, n.region);
|
|
1293
1293
|
}
|
|
1294
|
-
return
|
|
1295
|
-
},
|
|
1296
|
-
|
|
1297
|
-
},
|
|
1298
|
-
if (e == null || e === "") throw new
|
|
1294
|
+
return ti = e, e;
|
|
1295
|
+
}, ri = () => ti, ii = () => {
|
|
1296
|
+
ti = void 0;
|
|
1297
|
+
}, ai = (e, t) => {
|
|
1298
|
+
if (e == null || e === "") throw new $r("residency is on but the request has no resolvable tenant — refusing to bind a store");
|
|
1299
1299
|
let n = t.homes.find((t) => t.tenantId === e);
|
|
1300
|
-
if (n === void 0) throw new
|
|
1300
|
+
if (n === void 0) throw new $r(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
|
|
1301
1301
|
return n;
|
|
1302
|
-
},
|
|
1303
|
-
let n =
|
|
1302
|
+
}, oi = (e, t) => t.servableRegions.includes(e), si = (e, t) => {
|
|
1303
|
+
let n = ai(e.tenantId, t), r = $t(n.tenantId);
|
|
1304
1304
|
return {
|
|
1305
1305
|
region: n.region,
|
|
1306
1306
|
namespace: r,
|
|
1307
1307
|
...n.connectionKey === void 0 ? {} : { connectionKey: n.connectionKey }
|
|
1308
1308
|
};
|
|
1309
|
-
},
|
|
1310
|
-
let r =
|
|
1311
|
-
if (!
|
|
1309
|
+
}, ci = (e, t, n) => {
|
|
1310
|
+
let r = si(e, t);
|
|
1311
|
+
if (!oi(r.region, t)) throw new ei(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
|
|
1312
1312
|
let i = n.get(r.region);
|
|
1313
|
-
if (i === void 0) throw new
|
|
1313
|
+
if (i === void 0) throw new ei(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
|
|
1314
1314
|
return {
|
|
1315
1315
|
store: i,
|
|
1316
1316
|
placement: r
|
|
1317
1317
|
};
|
|
1318
|
-
},
|
|
1319
|
-
let { store: i, placement: a } =
|
|
1318
|
+
}, li = async (e, t, n, r) => {
|
|
1319
|
+
let { store: i, placement: a } = ci(e, t, n);
|
|
1320
1320
|
return await r(i, a), a;
|
|
1321
1321
|
}, Z = (e) => {
|
|
1322
1322
|
if (typeof e == "string") return e;
|
|
@@ -1325,21 +1325,21 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1325
1325
|
return `(json:${t}->${n.join(".")}${r ? "::num" : ""})`;
|
|
1326
1326
|
}
|
|
1327
1327
|
return `(${e.expr})`;
|
|
1328
|
-
}, Q = (e) => e.map(Z),
|
|
1328
|
+
}, Q = (e) => e.map(Z), ui = (e, t) => {
|
|
1329
1329
|
if (e.length !== t.length) return !1;
|
|
1330
1330
|
for (let n = 0; n < e.length; n++) if (Z(e[n]) !== Z(t[n])) return !1;
|
|
1331
1331
|
return !0;
|
|
1332
|
-
},
|
|
1332
|
+
}, di = (e, t) => {
|
|
1333
1333
|
if (e.length >= t.length) return !1;
|
|
1334
1334
|
for (let n = 0; n < e.length; n++) if (Z(e[n]) !== Z(t[n])) return !1;
|
|
1335
1335
|
return !0;
|
|
1336
|
-
},
|
|
1336
|
+
}, fi = (e) => {
|
|
1337
1337
|
let t = [], n = e.appliedIndexes, r = e.tableName;
|
|
1338
1338
|
for (let e = 0; e < n.length; e++) {
|
|
1339
1339
|
let i = n[e];
|
|
1340
1340
|
for (let a = e + 1; a < n.length; a++) {
|
|
1341
1341
|
let e = n[a];
|
|
1342
|
-
if (
|
|
1342
|
+
if (ui(i.fields, e.fields)) {
|
|
1343
1343
|
let [n, a] = i.name < e.name ? [i, e] : [e, i];
|
|
1344
1344
|
t.push({
|
|
1345
1345
|
kind: "duplicate-fields",
|
|
@@ -1350,13 +1350,13 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1350
1350
|
});
|
|
1351
1351
|
continue;
|
|
1352
1352
|
}
|
|
1353
|
-
|
|
1353
|
+
di(i.fields, e.fields) ? t.push({
|
|
1354
1354
|
kind: "redundant-prefix",
|
|
1355
1355
|
table: r,
|
|
1356
1356
|
redundant: i,
|
|
1357
1357
|
coveredBy: e,
|
|
1358
1358
|
message: `'${r}' index '${i.name}' on [${Q(i.fields).join(", ")}] is a leading prefix of '${e.name}' on [${Q(e.fields).join(", ")}]. Every B-tree dialect we support (Postgres / MySQL / MariaDB / MSSQL / SQLite) can serve a [${Q(i.fields).join(", ")}] query from '${e.name}' too via the leading-prefix rule, so '${i.name}' adds write cost without read benefit. Drop '${i.name}' — unless you specifically need a smaller index for cache locality on a write-heavy table (rare; profile first).`
|
|
1359
|
-
}) :
|
|
1359
|
+
}) : di(e.fields, i.fields) && t.push({
|
|
1360
1360
|
kind: "redundant-prefix",
|
|
1361
1361
|
table: r,
|
|
1362
1362
|
redundant: e,
|
|
@@ -1366,23 +1366,23 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1366
1366
|
}
|
|
1367
1367
|
}
|
|
1368
1368
|
return t;
|
|
1369
|
-
},
|
|
1369
|
+
}, pi = (e) => {
|
|
1370
1370
|
let t = [];
|
|
1371
|
-
for (let n of e) t.push(...
|
|
1371
|
+
for (let n of e) t.push(...fi(n));
|
|
1372
1372
|
return t;
|
|
1373
|
-
},
|
|
1374
|
-
let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n, k.dim, e.padEnd(11)), a = (e) => $(n, (e) => k.bold(k.brand(e)), e), o = (e) => $(n, k.brightRed24, e), s = (e) => $(n,
|
|
1373
|
+
}, mi = "\x1B[", hi = `${mi}38;2;245;158;11m`, gi = `${mi}38;2;16;185;129m`, _i = (e, t) => `${e}${t}${k.reset}`, $ = (e, t, n) => e ? typeof t == "function" ? t(n) : _i(t, n) : n, vi = (e, t = {}) => {
|
|
1374
|
+
let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => $(n, k.dim, e.padEnd(11)), a = (e) => $(n, (e) => k.bold(k.brand(e)), e), o = (e) => $(n, k.brightRed24, e), s = (e) => $(n, gi, e), c = (e) => $(n, hi, e), l = (e) => $(n, k.dim, e), u = `${c("index audit")} ${l("·")} ${$(n, k.bold, e.kind)}`, d = e.redundant.fields.length, f = Q(e.coveredBy.fields.slice(d)), p = (e, t) => {
|
|
1375
1375
|
let n = e.slice(0, t), r = e.slice(t), i = [];
|
|
1376
1376
|
return n.length > 0 && i.push(s(`[${n.join(", ")}]`)), r.length > 0 && i.push(c(`+ [${r.join(", ")}]`)), i.join(" ");
|
|
1377
1377
|
}, m = [];
|
|
1378
1378
|
return m.push(u), m.push(""), m.push(`${i("table")}${a(e.table)}`), m.push(""), m.push(`${i("redundant")}${o(e.redundant.name)}`), m.push(`${i("")}${p(Q(e.redundant.fields), d)}`), m.push(""), m.push(`${i("covered by")}${s(e.coveredBy.name)}`), m.push(`${i("")}${p(Q(e.coveredBy.fields), d)}`), f.length > 0 && m.push(`${i("")}${l(`└ extra columns: ${f.join(", ")}`)}`), m.push(""), e.kind === "redundant-prefix" ? (m.push(`${i("why")}B-tree indexes serve queries that filter on a LEADING PREFIX of`), m.push(`${i("")}their column list. The wider index already covers every`), m.push(`${i("")}query the narrower one can serve.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)) : (m.push(`${i("why")}Two indexes on the same columns under different names.`), m.push(`${i("")}The B-tree engine builds both — same coverage, double cost.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)), m.push(""), m.push(`${i("cost")}Every ${a("INSERT")} / ${a("UPDATE")} / ${a("DELETE")} on this table writes`), m.push(`${i("")}to ${$(n, k.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");
|
|
1379
|
-
},
|
|
1379
|
+
}, yi = (e, t) => ({
|
|
1380
1380
|
name: e,
|
|
1381
1381
|
body: t
|
|
1382
|
-
}),
|
|
1382
|
+
}), bi = (e) => {
|
|
1383
1383
|
if (e.lifecycle === "cron" && !e.cron) throw Error(`seed "${e.id}": lifecycle 'cron' requires a 'cron' field`);
|
|
1384
1384
|
if (e.lifecycle === "onSchemaChange" && (!e.watchedTables || e.watchedTables.length === 0)) throw Error(`seed "${e.id}": lifecycle 'onSchemaChange' requires at least one entry in 'watchedTables'`);
|
|
1385
|
-
let t = e.steps({ step:
|
|
1385
|
+
let t = e.steps({ step: yi });
|
|
1386
1386
|
if (t.length === 0) throw Error(`seed "${e.id}": at least one step is required`);
|
|
1387
1387
|
return {
|
|
1388
1388
|
__seed: !0,
|
|
@@ -1394,13 +1394,13 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1394
1394
|
...e.fingerprint === void 0 ? {} : { fingerprint: e.fingerprint },
|
|
1395
1395
|
steps: t
|
|
1396
1396
|
};
|
|
1397
|
-
},
|
|
1397
|
+
}, xi = (e) => typeof e == "object" && !!e && "__seed" in e && e.__seed === !0, Si = (e, { apply: t, undo: n }) => ({
|
|
1398
1398
|
name: e,
|
|
1399
1399
|
apply: t,
|
|
1400
1400
|
undo: n
|
|
1401
|
-
}),
|
|
1401
|
+
}), Ci = (e) => {
|
|
1402
1402
|
if (!/^\d{14}_/.test(e.id)) throw Error(`migration "${e.id}": id must start with a 14-digit timestamp followed by "_" (convention: <YYYYMMDDHHMMSS>_<slug>)`);
|
|
1403
|
-
let t = e.steps({ step:
|
|
1403
|
+
let t = e.steps({ step: Si });
|
|
1404
1404
|
if (t.length === 0) throw Error(`migration "${e.id}": at least one step is required`);
|
|
1405
1405
|
return {
|
|
1406
1406
|
__migration: !0,
|
|
@@ -1408,111 +1408,111 @@ var at = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1408
1408
|
name: e.name,
|
|
1409
1409
|
steps: t
|
|
1410
1410
|
};
|
|
1411
|
-
},
|
|
1412
|
-
id:
|
|
1413
|
-
name:
|
|
1414
|
-
hash:
|
|
1415
|
-
status:
|
|
1416
|
-
appliedAt:
|
|
1417
|
-
durationMs:
|
|
1418
|
-
errorMessage:
|
|
1419
|
-
errorStack:
|
|
1420
|
-
workflowRunId:
|
|
1421
|
-
createdAt:
|
|
1422
|
-
updatedAt:
|
|
1423
|
-
}).index(["status"]).reactive(),
|
|
1424
|
-
id:
|
|
1425
|
-
name:
|
|
1426
|
-
lifecycle:
|
|
1427
|
-
fingerprint:
|
|
1428
|
-
cronSchedule:
|
|
1429
|
-
watchedTables:
|
|
1430
|
-
nextRunAt:
|
|
1431
|
-
lastRunStatus:
|
|
1432
|
-
lastRunAt:
|
|
1433
|
-
lastRunDurationMs:
|
|
1434
|
-
lastRunRowsTouched:
|
|
1435
|
-
lastError:
|
|
1436
|
-
workflowRunId:
|
|
1437
|
-
createdAt:
|
|
1438
|
-
updatedAt:
|
|
1439
|
-
}).index(["lifecycle"]).index(["nextRunAt"]).reactive(),
|
|
1440
|
-
id:
|
|
1441
|
-
fingerprint:
|
|
1442
|
-
operations:
|
|
1443
|
-
rollbackPlan:
|
|
1444
|
-
appliedBy:
|
|
1445
|
-
environment:
|
|
1446
|
-
source:
|
|
1447
|
-
onlineStrategy:
|
|
1448
|
-
durationMs:
|
|
1449
|
-
notes:
|
|
1450
|
-
squashedAt:
|
|
1451
|
-
appliedAt:
|
|
1452
|
-
createdAt:
|
|
1453
|
-
updatedAt:
|
|
1454
|
-
}).index(["fingerprint"]).index(["environment"]).reactive(),
|
|
1455
|
-
id:
|
|
1456
|
-
scope:
|
|
1457
|
-
key:
|
|
1458
|
-
status:
|
|
1459
|
-
response:
|
|
1460
|
-
createdAt:
|
|
1461
|
-
}).unique(["scope", "key"]).index(["createdAt"]).reactive(),
|
|
1462
|
-
id:
|
|
1463
|
-
key:
|
|
1464
|
-
value:
|
|
1465
|
-
expiresAt:
|
|
1466
|
-
createdAt:
|
|
1467
|
-
updatedAt:
|
|
1468
|
-
}).index(["expiresAt"]).reactive(),
|
|
1469
|
-
id:
|
|
1470
|
-
tenantId:
|
|
1471
|
-
name:
|
|
1472
|
-
hashedKey:
|
|
1473
|
-
keyPrefix:
|
|
1474
|
-
scopes:
|
|
1475
|
-
lastUsedAt:
|
|
1476
|
-
expiresAt:
|
|
1477
|
-
revokedAt:
|
|
1478
|
-
createdBy:
|
|
1479
|
-
createdAt:
|
|
1480
|
-
}).index("byTenant", ["tenantId"]).reactive(),
|
|
1481
|
-
wi,
|
|
1411
|
+
}, wi = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, Ti = C("_voltro_migrations", {
|
|
1412
|
+
id: D({ prefix: "mig" }),
|
|
1413
|
+
name: v(),
|
|
1414
|
+
hash: v(),
|
|
1415
|
+
status: v(),
|
|
1416
|
+
appliedAt: E().nullable(),
|
|
1417
|
+
durationMs: w().nullable(),
|
|
1418
|
+
errorMessage: v().nullable(),
|
|
1419
|
+
errorStack: v().nullable(),
|
|
1420
|
+
workflowRunId: v().nullable(),
|
|
1421
|
+
createdAt: E().default("now"),
|
|
1422
|
+
updatedAt: E().default("now").onUpdate("now")
|
|
1423
|
+
}).index(["status"]).reactive(), Ei = C("_voltro_seeds", {
|
|
1424
|
+
id: D({ prefix: "seed" }),
|
|
1425
|
+
name: v(),
|
|
1426
|
+
lifecycle: v(),
|
|
1427
|
+
fingerprint: v(),
|
|
1428
|
+
cronSchedule: v().nullable(),
|
|
1429
|
+
watchedTables: S().nullable(),
|
|
1430
|
+
nextRunAt: E().nullable(),
|
|
1431
|
+
lastRunStatus: v().nullable(),
|
|
1432
|
+
lastRunAt: E().nullable(),
|
|
1433
|
+
lastRunDurationMs: w().nullable(),
|
|
1434
|
+
lastRunRowsTouched: w().nullable(),
|
|
1435
|
+
lastError: v().nullable(),
|
|
1436
|
+
workflowRunId: v().nullable(),
|
|
1437
|
+
createdAt: E().default("now"),
|
|
1438
|
+
updatedAt: E().default("now").onUpdate("now")
|
|
1439
|
+
}).index(["lifecycle"]).index(["nextRunAt"]).reactive(), Di = C("_voltro_migration_plans", {
|
|
1440
|
+
id: D({ prefix: "plan" }),
|
|
1441
|
+
fingerprint: v(),
|
|
1442
|
+
operations: S(),
|
|
1443
|
+
rollbackPlan: S().nullable(),
|
|
1444
|
+
appliedBy: v(),
|
|
1445
|
+
environment: v(),
|
|
1446
|
+
source: v(),
|
|
1447
|
+
onlineStrategy: v().nullable(),
|
|
1448
|
+
durationMs: w(),
|
|
1449
|
+
notes: v().nullable(),
|
|
1450
|
+
squashedAt: E().nullable(),
|
|
1451
|
+
appliedAt: E().default("now"),
|
|
1452
|
+
createdAt: E().default("now"),
|
|
1453
|
+
updatedAt: E().default("now").onUpdate("now")
|
|
1454
|
+
}).index(["fingerprint"]).index(["environment"]).reactive(), Oi = C("_voltro_idempotency", {
|
|
1455
|
+
id: D({ prefix: "idem" }),
|
|
1456
|
+
scope: v(),
|
|
1457
|
+
key: v(),
|
|
1458
|
+
status: v(),
|
|
1459
|
+
response: S().nullable(),
|
|
1460
|
+
createdAt: E().default("now")
|
|
1461
|
+
}).unique(["scope", "key"]).index(["createdAt"]).reactive(), ki = C("_voltro_kv", {
|
|
1462
|
+
id: D({ prefix: "kv" }),
|
|
1463
|
+
key: v().unique(),
|
|
1464
|
+
value: v().nullable(),
|
|
1465
|
+
expiresAt: E().nullable(),
|
|
1466
|
+
createdAt: E().default("now"),
|
|
1467
|
+
updatedAt: E().default("now").onUpdate("now")
|
|
1468
|
+
}).index(["expiresAt"]).reactive(), Ai = C("_voltro_api_keys", {
|
|
1469
|
+
id: D({ prefix: "apikey" }),
|
|
1470
|
+
tenantId: v().nullable(),
|
|
1471
|
+
name: v(),
|
|
1472
|
+
hashedKey: v().unique(),
|
|
1473
|
+
keyPrefix: v(),
|
|
1474
|
+
scopes: S().nullable(),
|
|
1475
|
+
lastUsedAt: E().nullable(),
|
|
1476
|
+
expiresAt: E().nullable(),
|
|
1477
|
+
revokedAt: E().nullable(),
|
|
1478
|
+
createdBy: v().nullable(),
|
|
1479
|
+
createdAt: E().default("now")
|
|
1480
|
+
}).index("byTenant", ["tenantId"]).reactive(), ji = [
|
|
1482
1481
|
Ti,
|
|
1483
|
-
Ei
|
|
1484
|
-
|
|
1482
|
+
Ei,
|
|
1483
|
+
Di
|
|
1484
|
+
], Mi = (e, t, n) => ({
|
|
1485
1485
|
_tag: "PrimaryKeyConflictError",
|
|
1486
1486
|
table: e,
|
|
1487
1487
|
key: t,
|
|
1488
1488
|
cause: n
|
|
1489
|
-
}),
|
|
1489
|
+
}), Ni = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", Pi = /* @__PURE__ */ new Map(), Fi = (e) => {
|
|
1490
1490
|
if (!e.table || !e.timeColumn) throw Error("registerRetention: table + timeColumn are required");
|
|
1491
1491
|
if (!Number.isFinite(e.ttlMs) || e.ttlMs <= 0) throw Error(`registerRetention(${e.table}): ttlMs must be a positive number`);
|
|
1492
|
-
|
|
1493
|
-
},
|
|
1492
|
+
Pi.set(e.table, e);
|
|
1493
|
+
}, Ii = () => [...Pi.values()], Li = () => Pi.clear(), Ri = async (e, t, n, r = 2e4) => {
|
|
1494
1494
|
let i = new Date(t - e.ttlMs), a = 0;
|
|
1495
1495
|
for (;;) {
|
|
1496
1496
|
let t = await n(e.table, e.timeColumn, i, r, e.where);
|
|
1497
1497
|
if (a += t, t < r) break;
|
|
1498
1498
|
}
|
|
1499
1499
|
return a;
|
|
1500
|
-
},
|
|
1500
|
+
}, zi = (e, t) => {
|
|
1501
1501
|
let n = Number(e ?? String(t));
|
|
1502
1502
|
return (Number.isFinite(n) && n > 0 ? n : t) * 36e5;
|
|
1503
|
-
},
|
|
1504
|
-
id:
|
|
1505
|
-
replicaId:
|
|
1506
|
-
streamName:
|
|
1507
|
-
binlogFile:
|
|
1508
|
-
binlogPosition:
|
|
1509
|
-
updatedAt:
|
|
1510
|
-
}).index(["replicaId"]),
|
|
1511
|
-
id:
|
|
1512
|
-
replicaId:
|
|
1513
|
-
streamName:
|
|
1514
|
-
ctVersion:
|
|
1515
|
-
updatedAt:
|
|
1516
|
-
}).index(["replicaId"]),
|
|
1503
|
+
}, Bi = "_voltro_cdc_offsets", Vi = C(Bi, {
|
|
1504
|
+
id: D({ prefix: "cdcoff" }),
|
|
1505
|
+
replicaId: v(),
|
|
1506
|
+
streamName: v(),
|
|
1507
|
+
binlogFile: v(),
|
|
1508
|
+
binlogPosition: v(),
|
|
1509
|
+
updatedAt: E()
|
|
1510
|
+
}).index(["replicaId"]), Hi = C(Bi, {
|
|
1511
|
+
id: D({ prefix: "cdcoff" }),
|
|
1512
|
+
replicaId: v(),
|
|
1513
|
+
streamName: v(),
|
|
1514
|
+
ctVersion: v(),
|
|
1515
|
+
updatedAt: E()
|
|
1516
|
+
}).index(["replicaId"]), Ui = "postgres";
|
|
1517
1517
|
//#endregion
|
|
1518
|
-
export { Y as BranchNameInvalid,
|
|
1518
|
+
export { Y as BranchNameInvalid, Rr as BranchTransitionInvalid, Bi as CDC_OFFSETS_TABLE, ge as ColumnBuilder, ut as ENCRYPTED_PREFIX, Ui as ENGINE, We as FILE_MIGRATION_PATTERN, le as MAX_IDENTIFIER_LENGTH, Er as TableStreamError, Yt as TenantNamespaceInvalid, Jt as TenantNamespaceUnresolved, ei as TenantRegionUnavailable, $r as TenantResidencyUnresolved, b as WARN_IDENTIFIER_LENGTH, Ai as _voltroApiKeysTable, Vi as _voltroCdcOffsetsTable, Oi as _voltroIdempotencyTable, ki as _voltroKvTable, Di as _voltroMigrationPlansTable, Ti as _voltroMigrationsTable, Hi as _voltroMssqlCdcOffsetsTable, Ei as _voltroSeedsTable, Zn as actorsTable, Zr as admitBranch, Ee as allEnumRenames, At as allRegisteredRelations, _ as allRegisteredTables, pr as and, Ae as array, sr as arrayContains, lr as arrayHas, cr as arrayOverlaps, Bt as attachEagerLoads, pi as auditAllTableIndexes, fi as auditTableIndexes, ke as avg, Ke as avgOver, qe as bigint, ci as bindResidentStore, ve as boolean, Fr as branchNamespaceName, xe as bytes, pe as clearEnumRenames, jt as clearRelationsRegistry, ii as clearResidencyConfig, Li as clearRetentions, ee as clearTableRegistry, wr as collectSubqueries, _e as column, fn as compileEagerJson, R as compilePredicate, en as compileRawFragment, z as compileSelect, jr as computeEmbedding, or as contains, be as count, Le as countDistinct, je as databaseHandle, Re as date, Me as dbEnum, Te as decimal, Ie as declareEnumRename, Lt as decodeRowsFromSchema, mt as decryptFieldsOnRead, Ci as defineMigration, ae as defineMixin, bi as defineSeed, we as denseRank, h as deriveTypeIdPrefix, lt as deserializeArraysOnRead, e as drainIdentifierWarnings, Ce as dropped, zt as encodeRowForSchema, pt as encryptFieldsForWrite, ft as encryptedColumnsOf, Jr as enforceBranchLimits, y as ensureTableRegistered, Qn as eq, L as escapeLike, Cr as evaluatePredicate, Se as except, br as exists, vi as formatIndexAuditIssue, ji as frameworkTables, ze as generateId, ce as generateSnowflake, de as geography, Ye as geometry, Ue as getEnumRenames, kt as getRelation, M as getRelations, ri as getResidencyConfig, u as getTable, er as gt, tr as gte, qt as hasEagerLoads, Ar as hybridSearch, D as id, ir as inSet, vr as inSubquery, A as inferForeignKey, w as integer, ue as intersect, $e as interval, Ir as isBranchNamespace, dt as isEncrypted, Ne as isFileMigration, wi as isMigrationDefinition, Hr as isNeonConnection, dr as isNotNull, ur as isNull, Ni as isPrimaryKeyConflictError, oi as isRegionServable, xt as isRelationsSpec, xi as isSeedDefinition, ne as isSqliteFamily, fe as isView, S as json, gr as jsonField, r as jsonIndex, Je as lag, et as lead, Ii as listRetentions, nr as lt, rr as lte, Qr as makeNamespaceBranchExecutor, Ct as many, wt as manyToMany, a as materializeFields, me as max, Be as migration, Qe as min, oe as mixin, $n as neq, zr as nextBranchState, hr as not, xr as notExists, ar as notInSet, yr as notInSubquery, Ze as numeric, St as one, mr as or, x as paginateBy, i as paginateById, Kr as planBranch, Br as planBranchProvision, Vr as planBranchTeardown, qr as planBranchTeardownFor, Wr as planNeonBranchProvision, Gr as planNeonBranchTeardown, Mi as primaryKeyConflictError, Yr as provisionBranch, li as provisionResidentTenant, I as qualifyTable, Xe as queryFor, Fe as queryForView, tt as quoteIdent, re as rank, ie as raw, l as real, s as reference, qn as registerCoreTables, Ot as registerDiscoveredRelations, Dt as registerRelations, Fi as registerRetention, p as registerTable, bt as relations, Yn as requireActors, g as requireTable, Xn as requireTenants, se as resetSnowflake, si as residentPlacement, Ur as resolveBranchMechanism, c as resolveFullTextIndex, m as resolveIdScheme, d as resolveMixinGraph, ai as resolveTenantHome, $t as resolveTenantNamespace, zi as retentionTtlMsFromEnv, o as rowNumber, Qt as sanitizeIdentifierFragment, ct as serializeArraysForWrite, ni as setResidencyConfig, fr as spatialPredicate, kr as streamTable, te as sum, Oe as sumOver, Ri as sweepRetention, C as table, Xr as teardownBranch, v as text, E as timestamp, t as union, De as unionAll, ye as validateColumnName, Ge as validateIndexName, Pe as validateTableName, Ve as validateTypeIdPrefix, n as vector, f as vectorDistanceToOpclass, Mr as vectorEmbedding, He as view, he as viewSql, Tr as walkLeaves };
|