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