@voltro/database 0.81.0 → 0.83.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 +1806 -6
- package/dist/index.d.ts +99 -19
- package/dist/index.js +630 -620
- package/dist/{replaceInProgress-C_aXxOIX.js → replaceInProgress-CncEA_Sx.js} +571 -480
- package/dist/sql.d.ts +282 -35
- package/dist/sql.js +1808 -1542
- package/package.json +2 -2
|
@@ -200,7 +200,7 @@ function f(e) {
|
|
|
200
200
|
idSchemeInput: e
|
|
201
201
|
});
|
|
202
202
|
}
|
|
203
|
-
var p = () => d("text"), m = () => d("integer"),
|
|
203
|
+
var p = () => d("text"), m = () => d("integer"), h = () => d("real"), g = (e, t = 0) => {
|
|
204
204
|
if (!Number.isInteger(e) || e <= 0) throw Error(`decimal(${String(e)}, ${String(t)}): precision must be a positive integer (the total number of significant digits, e.g. decimal(12, 2)).`);
|
|
205
205
|
if (!Number.isInteger(t) || t < 0 || t > e) throw Error(`decimal(${String(e)}, ${String(t)}): scale must be an integer between 0 and precision (${e}).`);
|
|
206
206
|
return new u({
|
|
@@ -211,7 +211,7 @@ var p = () => d("text"), m = () => d("integer"), ee = () => d("real"), h = (e, t
|
|
|
211
211
|
precision: e,
|
|
212
212
|
scale: t
|
|
213
213
|
});
|
|
214
|
-
},
|
|
214
|
+
}, ee = g, te = () => d("bigint"), ne = (e, t) => {
|
|
215
215
|
if (t.length === 0) throw Error(`dbEnum('${e}', []): enum must have at least one value`);
|
|
216
216
|
return {
|
|
217
217
|
name: e,
|
|
@@ -225,25 +225,25 @@ var p = () => d("text"), m = () => d("integer"), ee = () => d("real"), h = (e, t
|
|
|
225
225
|
enumValues: t
|
|
226
226
|
})
|
|
227
227
|
};
|
|
228
|
-
},
|
|
228
|
+
}, _ = () => d("boolean"), v = () => d("timestamp"), re = () => d("date"), y = () => d("json"), b = () => d("bytes"), x = () => new u({
|
|
229
229
|
type: "bytes",
|
|
230
230
|
nullable: !0,
|
|
231
231
|
unique: !1,
|
|
232
232
|
hasDefault: !1,
|
|
233
233
|
crdtManaged: !0
|
|
234
|
-
}),
|
|
234
|
+
}), ie = () => new u({
|
|
235
235
|
type: "bytes",
|
|
236
236
|
nullable: !0,
|
|
237
237
|
unique: !1,
|
|
238
238
|
hasDefault: !1,
|
|
239
239
|
crdtManaged: !0
|
|
240
|
-
}),
|
|
240
|
+
}), S = () => {
|
|
241
241
|
throw Error("selfReference(): the target is resolved by table() — a column built with selfReference() must be declared inside a table({ … }) literal, not read before the table exists");
|
|
242
242
|
};
|
|
243
|
-
function
|
|
244
|
-
return
|
|
243
|
+
function ae(e) {
|
|
244
|
+
return oe(S, e);
|
|
245
245
|
}
|
|
246
|
-
function
|
|
246
|
+
function oe(e, t) {
|
|
247
247
|
return new u({
|
|
248
248
|
type: "reference",
|
|
249
249
|
nullable: !1,
|
|
@@ -259,13 +259,13 @@ function se(e, t) {
|
|
|
259
259
|
...t?.orphanPolicy ? { orphanPolicy: t.orphanPolicy } : {}
|
|
260
260
|
});
|
|
261
261
|
}
|
|
262
|
-
var
|
|
262
|
+
var se = () => new u({
|
|
263
263
|
type: "text",
|
|
264
264
|
nullable: !0,
|
|
265
265
|
unique: !1,
|
|
266
266
|
hasDefault: !1,
|
|
267
267
|
dropped: !0
|
|
268
|
-
}),
|
|
268
|
+
}), ce = (e, t) => {
|
|
269
269
|
if (!Number.isInteger(e) || e <= 0) throw Error(`vector(${String(e)}): dimension must be a positive integer (the embedding length, e.g. vector(1536)).`);
|
|
270
270
|
return new u({
|
|
271
271
|
type: "vector",
|
|
@@ -275,13 +275,13 @@ var ce = () => new u({
|
|
|
275
275
|
vectorDim: e,
|
|
276
276
|
vectorPrecision: t?.precision ?? "float32"
|
|
277
277
|
});
|
|
278
|
-
},
|
|
278
|
+
}, le = (e) => new u({
|
|
279
279
|
type: "array",
|
|
280
280
|
nullable: !1,
|
|
281
281
|
unique: !1,
|
|
282
282
|
hasDefault: !1,
|
|
283
283
|
arrayElement: e.__definition().type
|
|
284
|
-
}),
|
|
284
|
+
}), ue = () => d("interval"), de = (e, t = 4326) => new u({
|
|
285
285
|
type: "text",
|
|
286
286
|
nullable: !1,
|
|
287
287
|
unique: !1,
|
|
@@ -291,7 +291,7 @@ var ce = () => new u({
|
|
|
291
291
|
geomKind: e,
|
|
292
292
|
srid: t
|
|
293
293
|
}
|
|
294
|
-
}),
|
|
294
|
+
}), fe = (e, t = 4326) => new u({
|
|
295
295
|
type: "text",
|
|
296
296
|
nullable: !1,
|
|
297
297
|
unique: !1,
|
|
@@ -301,182 +301,182 @@ var ce = () => new u({
|
|
|
301
301
|
geomKind: e,
|
|
302
302
|
srid: t
|
|
303
303
|
}
|
|
304
|
-
}),
|
|
304
|
+
}), pe = (e) => new u({
|
|
305
305
|
type: "raw",
|
|
306
306
|
nullable: !1,
|
|
307
307
|
unique: !1,
|
|
308
308
|
hasDefault: !1,
|
|
309
309
|
rawDdl: e
|
|
310
|
-
}),
|
|
310
|
+
}), C = (e) => {
|
|
311
311
|
let t = {};
|
|
312
312
|
for (let [n, r] of Object.entries(e)) t[n] = r.__definition();
|
|
313
313
|
return t;
|
|
314
|
-
},
|
|
314
|
+
}, me = /* @__PURE__ */ new WeakMap(), he = (e) => typeof e == "object" && e ? me.get(e) : void 0, ge = (e, t = {}) => {
|
|
315
315
|
let n = p();
|
|
316
|
-
return
|
|
316
|
+
return me.set(n, {
|
|
317
317
|
target: e,
|
|
318
318
|
orphanPolicy: t.orphanPolicy ?? "keep",
|
|
319
319
|
onSoftDelete: t.onSoftDelete ?? !1
|
|
320
320
|
}), n;
|
|
321
|
-
},
|
|
321
|
+
}, w = /* @__PURE__ */ new Map(), _e = (e, t) => {
|
|
322
322
|
if (t.from === t.to) throw Error(`declareEnumRename('${e}'): \`from\` and \`to\` are both '${t.from}' — a rename must change the value.`);
|
|
323
|
-
let n =
|
|
323
|
+
let n = w.get(e) ?? [];
|
|
324
324
|
for (let r of n) {
|
|
325
325
|
if (r.from === t.from && r.to === t.to) return;
|
|
326
326
|
if (r.from === t.from && r.to !== t.to) throw Error(`declareEnumRename('${e}'): value '${t.from}' is already declared as renamed to '${r.to}', cannot also rename it to '${t.to}'.`);
|
|
327
327
|
}
|
|
328
|
-
n.push(t),
|
|
329
|
-
},
|
|
330
|
-
|
|
331
|
-
},
|
|
328
|
+
n.push(t), w.set(e, n);
|
|
329
|
+
}, ve = (e) => w.get(e) ?? [], ye = () => w, be = () => {
|
|
330
|
+
w.clear();
|
|
331
|
+
}, xe = (t) => {
|
|
332
332
|
let r = t;
|
|
333
333
|
for (let t = 0; t < 4 && n.isFiberFailure(r); t++) r = e.squash(r[n.FiberFailureCauseId]);
|
|
334
334
|
return r;
|
|
335
|
-
},
|
|
335
|
+
}, T = (t, r = 0) => {
|
|
336
336
|
if (r >= 4 || !n.isFiberFailure(t)) return [t];
|
|
337
337
|
let i = t[n.FiberFailureCauseId], a = [...e.failures(i), ...e.defects(i)];
|
|
338
338
|
if (a.length === 0) return [e.squash(i)];
|
|
339
339
|
let o = [];
|
|
340
|
-
for (let e of a.slice(0, 8)) o.push(...
|
|
340
|
+
for (let e of a.slice(0, 8)) o.push(...T(e, r + 1));
|
|
341
341
|
return o;
|
|
342
|
-
},
|
|
343
|
-
let t = {}, n = [], r =
|
|
342
|
+
}, Se = (e) => e.dbCode !== void 0 || e.dbErrno !== void 0 || e.dbNumber !== void 0 || e.dbSqlState !== void 0 || e.dbConstraint !== void 0, Ce = (e) => {
|
|
343
|
+
let t = {}, n = [], r = xe(e);
|
|
344
344
|
for (let e = 0; e < 8 && typeof r == "object" && r; e++) {
|
|
345
345
|
let e = r;
|
|
346
346
|
t.dbCode === void 0 && (typeof e.code == "string" || typeof e.code == "number") && (t.dbCode = e.code), t.dbErrno === void 0 && typeof e.errno == "number" && (t.dbErrno = e.errno), t.dbNumber === void 0 && typeof e.number == "number" && (t.dbNumber = e.number), t.dbSqlState === void 0 && typeof e.sqlState == "string" && (t.dbSqlState = e.sqlState), t.dbBindings === void 0 && typeof e.voltroBindings == "string" && (t.dbBindings = e.voltroBindings), t.dbStatement === void 0 && typeof e.sql == "string" && e.sql.includes("?") && (t.dbStatement = e.sql, t.dbPlaceholders = (e.sql.match(/\?/g) ?? []).length), t.dbFatal === void 0 && typeof e.fatal == "boolean" && (t.dbFatal = e.fatal), t.dbConstraint === void 0 && typeof e.constraint == "string" && (t.dbConstraint = e.constraint), t.dbTable === void 0 && typeof e.table == "string" && (t.dbTable = e.table), t.dbColumn === void 0 && typeof e.column == "string" && (t.dbColumn = e.column), t.dbSchema === void 0 && typeof e.schema == "string" && (t.dbSchema = e.schema);
|
|
347
347
|
let i = e.sqlMessage ?? e.detail;
|
|
348
348
|
t.dbMessage === void 0 && typeof i == "string" && (t.dbMessage = i);
|
|
349
349
|
let a = typeof e.constructor == "function" ? e.constructor.name : void 0, o = typeof e._tag == "string" && e._tag || typeof e.name == "string" && e.name || (typeof a == "string" && a !== "Object" ? a : void 0), s = typeof e.message == "string" ? e.message : void 0;
|
|
350
|
-
(o || s) && n.push(`${o || "Error"}${s ? `: ${s.slice(0, 200)}` : ""}`), r =
|
|
350
|
+
(o || s) && n.push(`${o || "Error"}${s ? `: ${s.slice(0, 200)}` : ""}`), r = xe(e.cause);
|
|
351
351
|
}
|
|
352
352
|
return n.length > 0 && (t.dbCauseChain = n.join(" ← "), t.dbMessage === void 0 && (t.dbMessage = n[n.length - 1])), t;
|
|
353
|
-
},
|
|
354
|
-
let t =
|
|
353
|
+
}, we = (e) => {
|
|
354
|
+
let t = T(e).map(Ce);
|
|
355
355
|
if (t.length <= 1) return t[0] ?? {};
|
|
356
|
-
let n = t.find(
|
|
356
|
+
let n = t.find(Se) ?? t[0], r = t.filter((e) => e !== n).map((e) => e.dbCauseChain).filter((e) => typeof e == "string");
|
|
357
357
|
if (r.length === 0) return n;
|
|
358
358
|
let i = typeof n.dbCauseChain == "string" ? n.dbCauseChain : void 0;
|
|
359
359
|
return {
|
|
360
360
|
...n,
|
|
361
361
|
dbCauseChain: [i, ...r].filter(Boolean).join(" ‖ ")
|
|
362
362
|
};
|
|
363
|
-
},
|
|
364
|
-
let n =
|
|
363
|
+
}, Te = (e, t) => {
|
|
364
|
+
let n = De(e);
|
|
365
365
|
if (n !== void 0) return n;
|
|
366
|
-
let r =
|
|
366
|
+
let r = we(e), i = Ne(r, t);
|
|
367
367
|
if (i !== void 0) {
|
|
368
368
|
let e = i.constraint ?? i.column;
|
|
369
369
|
return e === void 0 ? i.kind : `${i.kind}: ${e}`;
|
|
370
370
|
}
|
|
371
|
-
let a = r.dbCode ?? r.dbSqlState ?? r.dbErrno ?? r.dbNumber, o =
|
|
372
|
-
return a !== void 0 &&
|
|
373
|
-
},
|
|
371
|
+
let a = r.dbCode ?? r.dbSqlState ?? r.dbErrno ?? r.dbNumber, o = Ae(e);
|
|
372
|
+
return a !== void 0 && Oe.test(String(a)) ? `${o} (${String(a)})` : o;
|
|
373
|
+
}, Ee = Symbol.for("@voltro/database/authoredMessage"), E = (e, t) => {
|
|
374
374
|
let n = t === void 0 ? Error(e) : Error(e, t);
|
|
375
|
-
return Object.defineProperty(n,
|
|
375
|
+
return Object.defineProperty(n, Ee, {
|
|
376
376
|
value: !0,
|
|
377
377
|
enumerable: !1
|
|
378
378
|
}), n;
|
|
379
|
-
},
|
|
380
|
-
for (let t of
|
|
379
|
+
}, De = (e) => {
|
|
380
|
+
for (let t of T(e)) {
|
|
381
381
|
let e = t;
|
|
382
382
|
for (let t = 0; typeof e == "object" && e && t < 8; t += 1) {
|
|
383
|
-
if (e[
|
|
383
|
+
if (e[Ee] === !0) {
|
|
384
384
|
let t = e.message;
|
|
385
385
|
if (typeof t == "string" && t.length > 0) return t;
|
|
386
386
|
}
|
|
387
387
|
e = e.cause;
|
|
388
388
|
}
|
|
389
389
|
}
|
|
390
|
-
},
|
|
390
|
+
}, Oe = /^[A-Za-z0-9_]{1,32}$/, ke = /^[A-Za-z_][A-Za-z0-9_]{0,63}$/, Ae = (e) => {
|
|
391
391
|
let t = e?._tag, n = e?.name, r = (typeof t == "string" ? t : typeof n == "string" ? n : "").split(/[^A-Za-z0-9_]+/).filter(Boolean).pop();
|
|
392
|
-
return r !== void 0 &&
|
|
393
|
-
},
|
|
392
|
+
return r !== void 0 && ke.test(r) ? r : "unknown";
|
|
393
|
+
}, je = /^[A-Za-z_][A-Za-z0-9_$]*$/, D = (e) => e !== void 0 && e.length <= 128 && je.test(e) ? e : void 0, Me = (e) => e === void 0 ? void 0 : e.split(".").pop() ?? e, O = (e, ...t) => {
|
|
394
394
|
for (let n of t) {
|
|
395
395
|
let t = n.exec(e);
|
|
396
396
|
if (t?.[1] !== void 0) return t[1];
|
|
397
397
|
}
|
|
398
|
-
},
|
|
398
|
+
}, Ne = (e, t) => {
|
|
399
399
|
let n = e.dbCode, r = e.dbErrno, i = e.dbNumber, a = typeof e.dbMessage == "string" ? e.dbMessage : "", o = `${typeof e.dbCauseChain == "string" ? e.dbCauseChain : ""} ${a}`;
|
|
400
400
|
if (n === "23503") {
|
|
401
|
-
let t =
|
|
401
|
+
let t = D(e.dbConstraint);
|
|
402
402
|
return {
|
|
403
403
|
kind: /is still referenced from table/i.test(o) ? "foreignKeyInUse" : "foreignKey",
|
|
404
404
|
...t === void 0 ? {} : { constraint: t }
|
|
405
405
|
};
|
|
406
406
|
}
|
|
407
407
|
if (n === "23505") {
|
|
408
|
-
let t =
|
|
408
|
+
let t = D(e.dbConstraint);
|
|
409
409
|
return {
|
|
410
410
|
kind: "unique",
|
|
411
411
|
...t === void 0 ? {} : { constraint: t }
|
|
412
412
|
};
|
|
413
413
|
}
|
|
414
414
|
if (n === "23502") {
|
|
415
|
-
let t =
|
|
415
|
+
let t = D(e.dbColumn);
|
|
416
416
|
return {
|
|
417
417
|
kind: "notNull",
|
|
418
418
|
...t === void 0 ? {} : { column: t }
|
|
419
419
|
};
|
|
420
420
|
}
|
|
421
421
|
if (n === "23514") {
|
|
422
|
-
let t =
|
|
422
|
+
let t = D(e.dbConstraint);
|
|
423
423
|
return {
|
|
424
424
|
kind: "check",
|
|
425
425
|
...t === void 0 ? {} : { constraint: t }
|
|
426
426
|
};
|
|
427
427
|
}
|
|
428
428
|
if (r === 1452 || r === 1451) {
|
|
429
|
-
let e =
|
|
429
|
+
let e = D(O(o, /CONSTRAINT `([^`]+)`/));
|
|
430
430
|
return {
|
|
431
431
|
kind: r === 1451 ? "foreignKeyInUse" : "foreignKey",
|
|
432
432
|
...e === void 0 ? {} : { constraint: e }
|
|
433
433
|
};
|
|
434
434
|
}
|
|
435
435
|
if (r === 1062) {
|
|
436
|
-
let e =
|
|
436
|
+
let e = D(Me(O(o, /for key '([^']+)'/)));
|
|
437
437
|
return {
|
|
438
438
|
kind: "unique",
|
|
439
439
|
...e === void 0 ? {} : { constraint: e }
|
|
440
440
|
};
|
|
441
441
|
}
|
|
442
442
|
if (r === 1048 || r === 1364) {
|
|
443
|
-
let e =
|
|
443
|
+
let e = D(O(o, /Column '([^']+)' cannot be null/, /Field '([^']+)' doesn't have a default value/));
|
|
444
444
|
return {
|
|
445
445
|
kind: "notNull",
|
|
446
446
|
...e === void 0 ? {} : { column: e }
|
|
447
447
|
};
|
|
448
448
|
}
|
|
449
449
|
if (r === 3819 || r === 4025) {
|
|
450
|
-
let e =
|
|
450
|
+
let e = D(O(o, /Check constraint '([^']+)'/, /CONSTRAINT `([^`]+)` failed/));
|
|
451
451
|
return {
|
|
452
452
|
kind: "check",
|
|
453
453
|
...e === void 0 ? {} : { constraint: e }
|
|
454
454
|
};
|
|
455
455
|
}
|
|
456
456
|
if (i === 547) {
|
|
457
|
-
let e =
|
|
457
|
+
let e = O(o, /(?:FOREIGN KEY|REFERENCE) constraint "([^"]+)"/), t = O(o, /CHECK constraint "([^"]+)"/);
|
|
458
458
|
if (t !== void 0 && e === void 0) {
|
|
459
|
-
let e =
|
|
459
|
+
let e = D(t);
|
|
460
460
|
return {
|
|
461
461
|
kind: "check",
|
|
462
462
|
...e === void 0 ? {} : { constraint: e }
|
|
463
463
|
};
|
|
464
464
|
}
|
|
465
|
-
let n = /REFERENCE constraint/.test(o), r =
|
|
465
|
+
let n = /REFERENCE constraint/.test(o), r = D(e);
|
|
466
466
|
return {
|
|
467
467
|
kind: n ? "foreignKeyInUse" : "foreignKey",
|
|
468
468
|
...r === void 0 ? {} : { constraint: r }
|
|
469
469
|
};
|
|
470
470
|
}
|
|
471
471
|
if (i === 2627 || i === 2601) {
|
|
472
|
-
let e =
|
|
472
|
+
let e = D(O(o, /(?:UNIQUE KEY|PRIMARY KEY) constraint '([^']+)'/, /index '([^']+)'/));
|
|
473
473
|
return {
|
|
474
474
|
kind: "unique",
|
|
475
475
|
...e === void 0 ? {} : { constraint: e }
|
|
476
476
|
};
|
|
477
477
|
}
|
|
478
478
|
if (i === 515) {
|
|
479
|
-
let e =
|
|
479
|
+
let e = D(O(o, /Cannot insert the value NULL into column '([^']+)'/));
|
|
480
480
|
return {
|
|
481
481
|
kind: "notNull",
|
|
482
482
|
...e === void 0 ? {} : { column: e }
|
|
@@ -484,40 +484,40 @@ var ce = () => new u({
|
|
|
484
484
|
}
|
|
485
485
|
if (n === "SQLITE_CONSTRAINT_FOREIGNKEY") return { kind: t === "delete" || t === "deleteMany" || t === "hardDelete" ? "foreignKeyInUse" : "foreignKey" };
|
|
486
486
|
if (n === "SQLITE_CONSTRAINT_UNIQUE" || n === "SQLITE_CONSTRAINT_PRIMARYKEY") {
|
|
487
|
-
let e =
|
|
487
|
+
let e = D(Me(O(o, /UNIQUE constraint failed: ([^,\s]+)/)));
|
|
488
488
|
return {
|
|
489
489
|
kind: "unique",
|
|
490
490
|
...e === void 0 ? {} : { column: e }
|
|
491
491
|
};
|
|
492
492
|
}
|
|
493
493
|
if (n === "SQLITE_CONSTRAINT_NOTNULL") {
|
|
494
|
-
let e =
|
|
494
|
+
let e = D(Me(O(o, /NOT NULL constraint failed: ([^,\s]+)/)));
|
|
495
495
|
return {
|
|
496
496
|
kind: "notNull",
|
|
497
497
|
...e === void 0 ? {} : { column: e }
|
|
498
498
|
};
|
|
499
499
|
}
|
|
500
500
|
if (n === "SQLITE_CONSTRAINT_CHECK") {
|
|
501
|
-
let e =
|
|
501
|
+
let e = D(O(a, /CHECK constraint failed: (.+)$/));
|
|
502
502
|
return {
|
|
503
503
|
kind: "check",
|
|
504
504
|
...e === void 0 ? {} : { constraint: e }
|
|
505
505
|
};
|
|
506
506
|
}
|
|
507
|
-
},
|
|
508
|
-
let t =
|
|
507
|
+
}, Pe = (e) => {
|
|
508
|
+
let t = Ne(e)?.kind;
|
|
509
509
|
return t === "foreignKey" || t === "foreignKeyInUse";
|
|
510
|
-
},
|
|
510
|
+
}, Fe = (e) => {
|
|
511
511
|
let t = e.dbCode, n = e.dbErrno;
|
|
512
512
|
return t === "57014" || n === 3024 || n === 1969 || t === "ETIMEOUT" || t === "SQLITE_INTERRUPT";
|
|
513
|
-
},
|
|
513
|
+
}, Ie = (e) => {
|
|
514
514
|
if (e.dbErrno !== 1366) return;
|
|
515
515
|
let t = `${typeof e.dbCauseChain == "string" ? e.dbCauseChain : ""} ${typeof e.dbMessage == "string" ? e.dbMessage : ""}`;
|
|
516
516
|
if (/Incorrect string value: '\\x(F[0-4])/i.exec(t) === null) return;
|
|
517
|
-
let n =
|
|
517
|
+
let n = O(t, /for column [`']?(?:[^`'.]+[`']?\.[`']?)*([^`'.]+)[`']? at row/);
|
|
518
518
|
return `${n === void 0 ? "the column" : `column '${n}'`} is stored in a character set that cannot hold a 4-byte character (utf8mb3). Declare the store's character set in app.config.ts — store: { dialect: 'mariadb' | 'mysql', charset: 'utf8mb4' } — and run \`voltro db plan\`: every declared table is created with it and converted to it.`;
|
|
519
|
-
},
|
|
520
|
-
let t =
|
|
519
|
+
}, Le = (e) => {
|
|
520
|
+
let t = we(e), n = [
|
|
521
521
|
t.dbCode === void 0 ? void 0 : `code=${String(t.dbCode)}`,
|
|
522
522
|
t.dbErrno === void 0 ? void 0 : `errno=${String(t.dbErrno)}`,
|
|
523
523
|
t.dbNumber === void 0 ? void 0 : `number=${String(t.dbNumber)}`,
|
|
@@ -526,9 +526,9 @@ var ce = () => new u({
|
|
|
526
526
|
t.dbPlaceholders === void 0 ? void 0 : `placeholders=${String(t.dbPlaceholders)}`
|
|
527
527
|
].filter((e) => e !== void 0), r = typeof e?.message == "string" ? e.message : void 0, i = typeof t.dbMessage == "string" ? t.dbMessage : void 0, a = i === void 0 ? void 0 : n.length > 0 || i !== r && i !== `Error: ${String(r)}` ? i : void 0, o = typeof t.dbBindings == "string" ? `\n bindings: ${t.dbBindings}` : "", s = typeof t.dbStatement == "string" ? `\n statement: ${t.dbStatement.length <= 400 ? t.dbStatement : `${t.dbStatement.slice(0, 400)}…`}` : "";
|
|
528
528
|
if (a === void 0 && n.length === 0) return;
|
|
529
|
-
let c =
|
|
529
|
+
let c = Ie(t), l = c === void 0 ? "" : `\n hint: ${c}`;
|
|
530
530
|
return [a, n.length > 0 ? `[${n.join(" ")}]` : void 0].filter((e) => e !== void 0 && e !== "").join(" ") + l + s + o;
|
|
531
|
-
},
|
|
531
|
+
}, Re = (e) => Object.entries(e).map(([e, t]) => `${e}:${ze(t)}`).join(" "), ze = (e) => {
|
|
532
532
|
if (e === null) return "null";
|
|
533
533
|
if (e === void 0) return "undefined";
|
|
534
534
|
if (typeof e == "bigint") return "bigint";
|
|
@@ -538,24 +538,24 @@ var ce = () => new u({
|
|
|
538
538
|
if (globalThis.Buffer !== void 0 && globalThis.Buffer.isBuffer(e)) return "Buffer";
|
|
539
539
|
let t = e.constructor?.name;
|
|
540
540
|
return typeof t == "string" && t !== "" ? t : "Object";
|
|
541
|
-
},
|
|
542
|
-
|
|
543
|
-
},
|
|
544
|
-
let e =
|
|
545
|
-
return
|
|
546
|
-
},
|
|
541
|
+
}, Be = 63, Ve = 60, k = [], A = (e) => {
|
|
542
|
+
k.includes(e) || k.push(e);
|
|
543
|
+
}, He = () => {
|
|
544
|
+
let e = k.slice();
|
|
545
|
+
return k.length = 0, e;
|
|
546
|
+
}, Ue = /^[a-zA-Z_][a-zA-Z0-9_]*$/, We = (e, t) => {
|
|
547
547
|
if (t.length === 0) throw Error(`${e} cannot be empty.`);
|
|
548
|
-
if (!
|
|
549
|
-
},
|
|
550
|
-
if (
|
|
551
|
-
e.length > 60 &&
|
|
552
|
-
},
|
|
553
|
-
if (
|
|
554
|
-
t.length > 60 &&
|
|
555
|
-
},
|
|
556
|
-
if (
|
|
557
|
-
t.length > 60 &&
|
|
558
|
-
},
|
|
548
|
+
if (!Ue.test(t)) throw Error(`${e} '${t}' contains characters outside [A-Za-z0-9_] or starts with a digit. Dialect-portable identifiers must match /^[a-zA-Z_][a-zA-Z0-9_]*$/.`);
|
|
549
|
+
}, j = (e) => {
|
|
550
|
+
if (We("table name", e), e.length > 63) throw Error(`table name '${e}' is ${e.length} chars — exceeds the 63-byte cross-dialect limit (Postgres floor). Shorten the name; long table names also cascade into auto-named indexes and FK constraints that would themselves exceed the limit.`);
|
|
551
|
+
e.length > 60 && A(`table name '${e}' is ${e.length} chars — ${63 - e.length} from the Postgres 63-byte limit. Auto-named indexes on this table will run out of room fast.`);
|
|
552
|
+
}, M = (e, t) => {
|
|
553
|
+
if (We("column name", t), t.length > 63) throw Error(`column '${t}' on table '${e}' is ${t.length} chars — exceeds the 63-byte cross-dialect limit (Postgres floor). Rename it.`);
|
|
554
|
+
t.length > 60 && A(`column '${t}' on table '${e}' is ${t.length} chars — close to the 63-byte limit.`);
|
|
555
|
+
}, N = (e, t, n, r) => {
|
|
556
|
+
if (We("index name", t), t.length > 63) throw Error(n ? `auto-named index '${t}' on table '${e}' is ${t.length} chars — exceeds the 63-byte cross-dialect limit (Postgres floor). Supply an explicit short name: .index('<shortName>', ${JSON.stringify([...r])}).` : `index name '${t}' on table '${e}' is ${t.length} chars — exceeds the 63-byte cross-dialect limit (Postgres floor). Shorten it.`);
|
|
557
|
+
t.length > 60 && A(`index '${t}' on table '${e}' is ${t.length} chars — ${63 - t.length} from the 63-byte limit. ${n ? `Consider .index('<shortName>', ${JSON.stringify([...r])}) before it grows.` : ""}`);
|
|
558
|
+
}, Ge = (e, t) => {
|
|
559
559
|
if (e.length === 0) throw Error(`typeid prefix on table '${t.tableName}' cannot be empty.`);
|
|
560
560
|
if (!/^[a-z][a-z0-9_]*$/.test(e)) {
|
|
561
561
|
let n = t.kind === "derived" ? "the derived prefix doesn't match typeid's required shape — supply an explicit one via id({ prefix: '...' })." : "the prefix must match typeid's required shape /^[a-z][a-z0-9_]*$/.";
|
|
@@ -565,7 +565,7 @@ var ce = () => new u({
|
|
|
565
565
|
let n = t.kind === "derived" ? "shorten the table name, or supply an explicit short prefix via id({ prefix: '...' })." : "pick a shorter prefix.";
|
|
566
566
|
throw Error(`typeid prefix '${e}' on table '${t.tableName}' is ${e.length} chars — exceeds the 63-byte limit; ${n}`);
|
|
567
567
|
}
|
|
568
|
-
e.length > 60 &&
|
|
568
|
+
e.length > 60 && A(`typeid prefix '${e}' on table '${t.tableName}' is ${e.length} chars — close to the 63-byte limit. Generated ids will be even longer (prefix + '_' + 26).`);
|
|
569
569
|
}, Ke = 1704067200000n, qe = 10n, Je = 12n, Ye = (1n << qe) - 1n, Xe = (1n << Je) - 1n, Ze = Je, Qe = 22n, $e = () => {
|
|
570
570
|
let e = process.env.SNOWFLAKE_MACHINE_ID;
|
|
571
571
|
if (e === void 0 || e === "") return 0n;
|
|
@@ -576,33 +576,33 @@ var ce = () => new u({
|
|
|
576
576
|
lastMs: 0n,
|
|
577
577
|
sequence: 0n,
|
|
578
578
|
machineId: $e()
|
|
579
|
-
}),
|
|
580
|
-
|
|
581
|
-
},
|
|
582
|
-
let t =
|
|
583
|
-
for (; t <= e;) t =
|
|
579
|
+
}), tt, nt = () => (tt === void 0 && (tt = et()), tt), rt = () => {
|
|
580
|
+
tt = et();
|
|
581
|
+
}, it = () => BigInt(Date.now()), at = (e) => {
|
|
582
|
+
let t = it();
|
|
583
|
+
for (; t <= e;) t = it();
|
|
584
584
|
return t;
|
|
585
|
-
},
|
|
586
|
-
let e =
|
|
587
|
-
t === e.lastMs ? (e.sequence = e.sequence + 1n & Xe, e.sequence === 0n && (t =
|
|
585
|
+
}, ot = () => {
|
|
586
|
+
let e = nt(), t = it();
|
|
587
|
+
t === e.lastMs ? (e.sequence = e.sequence + 1n & Xe, e.sequence === 0n && (t = at(e.lastMs), e.lastMs = t)) : (e.sequence = 0n, e.lastMs = t);
|
|
588
588
|
let n = t - Ke;
|
|
589
589
|
if (n < 0n) throw Error("Snowflake timestamp before configured epoch (2024-01-01). System clock is wrong.");
|
|
590
590
|
return (n << Qe | e.machineId << Ze | e.sequence).toString();
|
|
591
|
-
},
|
|
591
|
+
}, st = (e) => {
|
|
592
592
|
let t = e.toLowerCase();
|
|
593
593
|
if (t.startsWith("_")) throw Error(`cannot derive a typeid prefix for table '${e}' (table names starting with '_' are not valid typeid prefixes). Pick an explicit prefix via id({ prefix: '...' }) or use a different scheme like id({ scheme: 'numeric' }) for internal tables.`);
|
|
594
594
|
if (!/^[a-z][a-z0-9_]*$/.test(t)) throw Error(`cannot derive a typeid prefix from table name '${e}' (must match [a-z][a-z0-9_]*). Pick an explicit prefix via id({ prefix: '...' }).`);
|
|
595
595
|
let n = t.endsWith("ies") && t.length > 3 ? t.slice(0, -3) + "y" : t.endsWith("ses") || t.endsWith("xes") || t.endsWith("zes") || t.endsWith("shes") || t.endsWith("ches") ? t.slice(0, -2) : t.endsWith("s") && t.length > 1 ? t.slice(0, -1) : t;
|
|
596
|
-
return
|
|
596
|
+
return Ge(n, {
|
|
597
597
|
kind: "derived",
|
|
598
598
|
tableName: e
|
|
599
599
|
}), n;
|
|
600
|
-
},
|
|
600
|
+
}, ct = (e, t) => {
|
|
601
601
|
if (e === void 0) return {
|
|
602
602
|
kind: "typeid",
|
|
603
|
-
prefix:
|
|
603
|
+
prefix: st(t)
|
|
604
604
|
};
|
|
605
|
-
if ("prefix" in e && !("scheme" in e)) return
|
|
605
|
+
if ("prefix" in e && !("scheme" in e)) return Ge(e.prefix, {
|
|
606
606
|
kind: "explicit",
|
|
607
607
|
tableName: t
|
|
608
608
|
}), {
|
|
@@ -612,8 +612,8 @@ var ce = () => new u({
|
|
|
612
612
|
if (!("scheme" in e)) throw Error("invalid id() options: no scheme or prefix");
|
|
613
613
|
switch (e.scheme) {
|
|
614
614
|
case "typeid": {
|
|
615
|
-
let n = e.prefix ??
|
|
616
|
-
return e.prefix !== void 0 &&
|
|
615
|
+
let n = e.prefix ?? st(t);
|
|
616
|
+
return e.prefix !== void 0 && Ge(e.prefix, {
|
|
617
617
|
kind: "explicit",
|
|
618
618
|
tableName: t
|
|
619
619
|
}), {
|
|
@@ -629,22 +629,22 @@ var ce = () => new u({
|
|
|
629
629
|
generate: e.generate
|
|
630
630
|
};
|
|
631
631
|
}
|
|
632
|
-
},
|
|
632
|
+
}, lt = (e, t) => {
|
|
633
633
|
switch (e.kind) {
|
|
634
634
|
case "typeid": return i(e.prefix).toString();
|
|
635
635
|
case "ulid": return a();
|
|
636
636
|
case "numeric": return null;
|
|
637
|
-
case "snowflake": return
|
|
637
|
+
case "snowflake": return ot();
|
|
638
638
|
case "custom": return e.generate(t);
|
|
639
639
|
}
|
|
640
|
-
},
|
|
641
|
-
fields:
|
|
640
|
+
}, ut = (e) => ({
|
|
641
|
+
fields: C(e.fields),
|
|
642
642
|
...e.id === void 0 ? {} : { id: e.id },
|
|
643
643
|
...e.requires === void 0 ? {} : { requires: e.requires },
|
|
644
644
|
...e.indexes === void 0 ? {} : { indexes: e.indexes },
|
|
645
645
|
...e.behaviors === void 0 ? {} : { behaviors: e.behaviors },
|
|
646
646
|
...e.policies === void 0 ? {} : { policies: e.policies }
|
|
647
|
-
}),
|
|
647
|
+
}), dt = ut, ft = (e) => {
|
|
648
648
|
let t = /* @__PURE__ */ new Set(), n = [], r = (e) => {
|
|
649
649
|
let i = e.id ?? e;
|
|
650
650
|
if (!t.has(i)) {
|
|
@@ -654,7 +654,7 @@ var ce = () => new u({
|
|
|
654
654
|
};
|
|
655
655
|
for (let t of e) r(t);
|
|
656
656
|
return n;
|
|
657
|
-
},
|
|
657
|
+
}, pt = (e, ...t) => {
|
|
658
658
|
if (t.length === 0) throw Error(`jsonIndex("${e}"): at least one path segment is required`);
|
|
659
659
|
let n = (r) => ({
|
|
660
660
|
jsonPath: {
|
|
@@ -665,14 +665,14 @@ var ce = () => new u({
|
|
|
665
665
|
numeric: () => n(!0)
|
|
666
666
|
});
|
|
667
667
|
return n(!1);
|
|
668
|
-
},
|
|
668
|
+
}, mt = (e = "cosine", t = "float32") => {
|
|
669
669
|
let n = t === "half" ? "halfvec" : "vector";
|
|
670
670
|
switch (e) {
|
|
671
671
|
case "cosine": return `${n}_cosine_ops`;
|
|
672
672
|
case "l2": return `${n}_l2_ops`;
|
|
673
673
|
case "inner": return `${n}_ip_ops`;
|
|
674
674
|
}
|
|
675
|
-
},
|
|
675
|
+
}, ht = [
|
|
676
676
|
"id",
|
|
677
677
|
"tenantId",
|
|
678
678
|
"createdAt",
|
|
@@ -681,7 +681,7 @@ var ce = () => new u({
|
|
|
681
681
|
"updatedBy",
|
|
682
682
|
"deletedAt",
|
|
683
683
|
"deletedBy"
|
|
684
|
-
],
|
|
684
|
+
], gt = (e) => e.id ?? `<anonymous mixin: ${Object.keys(e.fields).join(", ")}>`, _t = (e, t) => `${e}_${t.join("_")}_idx`, vt = (e, t) => `${e}_${t.join("_")}_uq`, yt = (e, t, n, r, i) => {
|
|
685
685
|
if (n !== "hnsw") return;
|
|
686
686
|
if (r.length !== 1) throw Error(`hnsw index '${t}' on table '${e}' must cover exactly one vector column — got ${r.length} fields. pgvector's HNSW access method indexes a single vector column.`);
|
|
687
687
|
let a = r[0];
|
|
@@ -689,14 +689,14 @@ var ce = () => new u({
|
|
|
689
689
|
let o = i[a];
|
|
690
690
|
if (o === void 0) throw Error(`hnsw index '${t}' on table '${e}' references unknown column '${a}'.`);
|
|
691
691
|
if (o.type !== "vector") throw Error(`hnsw index '${t}' on table '${e}' requires a vector() column — column '${a}' is '${o.type}'. HNSW is the pgvector approximate-nearest-neighbour method and only applies to vectors.`);
|
|
692
|
-
},
|
|
692
|
+
}, bt = (e, t) => {
|
|
693
693
|
let n;
|
|
694
694
|
for (let [r, i] of Object.entries(e)) i.type === "id" && i.idScheme === void 0 && (n === void 0 && (n = { ...e }), n[r] = {
|
|
695
695
|
...i,
|
|
696
|
-
idScheme:
|
|
696
|
+
idScheme: ct(i.idSchemeInput, t)
|
|
697
697
|
});
|
|
698
698
|
return n ?? e;
|
|
699
|
-
},
|
|
699
|
+
}, P = (e) => {
|
|
700
700
|
let t = e.appliedPrimaryKey ?? [];
|
|
701
701
|
return {
|
|
702
702
|
tableName: e.tableName,
|
|
@@ -715,8 +715,8 @@ var ce = () => new u({
|
|
|
715
715
|
...e.validatePatchSchema === void 0 ? {} : { validatePatchSchema: e.validatePatchSchema },
|
|
716
716
|
fullTextIndex: ((t, n, r) => {
|
|
717
717
|
if (n.length === 0) throw Error(`fullTextIndex '${t}' on '${e.tableName}' has no columns.`);
|
|
718
|
-
if (
|
|
719
|
-
return
|
|
718
|
+
if (N(e.tableName, t, !1, n), e.appliedFullText.some((e) => e.name === t)) throw Error(`duplicate full-text index '${t}' on table '${e.tableName}'.`);
|
|
719
|
+
return P({
|
|
720
720
|
...e,
|
|
721
721
|
tableName: e.tableName,
|
|
722
722
|
fields: e.fields,
|
|
@@ -737,27 +737,27 @@ var ce = () => new u({
|
|
|
737
737
|
});
|
|
738
738
|
}),
|
|
739
739
|
with: ((...t) => {
|
|
740
|
-
let n =
|
|
740
|
+
let n = ft(t), r = { ...e.fields }, i = /* @__PURE__ */ new Map();
|
|
741
741
|
for (let e of Object.keys(r)) i.set(e, {
|
|
742
742
|
id: "<table>",
|
|
743
743
|
fields: {}
|
|
744
744
|
});
|
|
745
745
|
for (let t of n) for (let [n, a] of Object.entries(t.fields)) {
|
|
746
746
|
let o = i.get(n);
|
|
747
|
-
if (o !== void 0) throw Error(`mixin collision on column '${n}' in table '${e.tableName}': '${
|
|
748
|
-
|
|
747
|
+
if (o !== void 0) throw Error(`mixin collision on column '${n}' in table '${e.tableName}': '${gt(o)}' and '${gt(t)}' both define it. If they're the same mixin reached via different paths, set a shared 'id' on both. If they're genuinely different concerns, rename one of the columns.`);
|
|
748
|
+
M(e.tableName, n), r[n] = a, i.set(n, t);
|
|
749
749
|
}
|
|
750
750
|
let a = [...e.appliedIndexes];
|
|
751
751
|
for (let t of n) for (let n of t.indexes ?? []) {
|
|
752
|
-
let t = n.name ??
|
|
753
|
-
a.some((e) => e.name === t) || (
|
|
752
|
+
let t = n.name ?? _t(e.tableName, n.fields);
|
|
753
|
+
a.some((e) => e.name === t) || (N(e.tableName, t, n.name === void 0, n.fields), yt(e.tableName, t, n.kind, n.fields, r), a.push({
|
|
754
754
|
name: t,
|
|
755
755
|
fields: n.fields,
|
|
756
756
|
...n.kind === void 0 ? {} : { kind: n.kind },
|
|
757
757
|
...n.kindOptions === void 0 ? {} : { kindOptions: n.kindOptions }
|
|
758
758
|
}));
|
|
759
759
|
}
|
|
760
|
-
return
|
|
760
|
+
return P({
|
|
761
761
|
...e,
|
|
762
762
|
tableName: e.tableName,
|
|
763
763
|
fields: r,
|
|
@@ -774,10 +774,10 @@ var ce = () => new u({
|
|
|
774
774
|
}),
|
|
775
775
|
index: ((...t) => {
|
|
776
776
|
let n, r, i, a = Array.isArray(t[0]);
|
|
777
|
-
if (a ? (r = t[0], i = t[1], n =
|
|
777
|
+
if (a ? (r = t[0], i = t[1], n = _t(e.tableName, r)) : (n = t[0], r = t[1], i = t[2]), r.length === 0) throw Error(`index '${n}' on table '${e.tableName}' has no fields — an index must cover at least one column.`);
|
|
778
778
|
let o = r.filter((e) => typeof e == "string");
|
|
779
|
-
if (
|
|
780
|
-
return
|
|
779
|
+
if (N(e.tableName, n, a, o), yt(e.tableName, n, i?.kind, r, e.fields), e.appliedIndexes.some((e) => e.name === n)) throw t.length === 1 ? Error(`duplicate auto-named index '${n}' on table '${e.tableName}' — you've called .index(${JSON.stringify(r)}) twice. Pass an explicit name to the second one if both are intended (rare).`) : Error(`duplicate index '${n}' on table '${e.tableName}': each index name must be unique within a table.`);
|
|
780
|
+
return P({
|
|
781
781
|
...e,
|
|
782
782
|
tableName: e.tableName,
|
|
783
783
|
fields: e.fields,
|
|
@@ -801,8 +801,8 @@ var ce = () => new u({
|
|
|
801
801
|
expressionIndex: ((t, n, r) => {
|
|
802
802
|
if (n.length === 0) throw Error(`expressionIndex '${t}' on table '${e.tableName}' has no fields — an index must cover at least one column or expression.`);
|
|
803
803
|
let i = n.filter((e) => typeof e == "string");
|
|
804
|
-
if (
|
|
805
|
-
return
|
|
804
|
+
if (N(e.tableName, t, !1, i), yt(e.tableName, t, r?.kind, n, e.fields), e.appliedIndexes.some((e) => e.name === t)) throw Error(`duplicate index '${t}' on table '${e.tableName}': each index name must be unique within a table.`);
|
|
805
|
+
return P({
|
|
806
806
|
...e,
|
|
807
807
|
tableName: e.tableName,
|
|
808
808
|
fields: e.fields,
|
|
@@ -825,9 +825,9 @@ var ce = () => new u({
|
|
|
825
825
|
}),
|
|
826
826
|
unique: ((...t) => {
|
|
827
827
|
let n, r, i, a = Array.isArray(t[0]);
|
|
828
|
-
if (a ? (r = t[0], i = t[1], n =
|
|
829
|
-
if (
|
|
830
|
-
return
|
|
828
|
+
if (a ? (r = t[0], i = t[1], n = vt(e.tableName, r)) : (n = t[0], r = t[1], i = t[2]), r.length === 0) throw Error(`unique '${n}' on table '${e.tableName}' has no fields — a UNIQUE constraint must cover at least one column.`);
|
|
829
|
+
if (N(e.tableName, n, a, r), e.appliedUniques.some((e) => e.name === n)) throw Error(a ? `duplicate auto-named UNIQUE '${n}' on table '${e.tableName}' — you've called .unique(${JSON.stringify(r)}) twice. Pass an explicit name to the second one if both are intended (very rare).` : `duplicate UNIQUE '${n}' on table '${e.tableName}': each constraint name must be unique within a table.`);
|
|
830
|
+
return P({
|
|
831
831
|
...e,
|
|
832
832
|
tableName: e.tableName,
|
|
833
833
|
fields: e.fields,
|
|
@@ -848,10 +848,10 @@ var ce = () => new u({
|
|
|
848
848
|
}),
|
|
849
849
|
uniqueActive: ((...t) => {
|
|
850
850
|
let n, r, i, a = Array.isArray(t[0]);
|
|
851
|
-
if (a ? (r = t[0], i = t[1], n =
|
|
852
|
-
if (
|
|
851
|
+
if (a ? (r = t[0], i = t[1], n = _t(e.tableName, r)) : (n = t[0], r = t[1], i = t[2]), r.length === 0) throw Error(`uniqueActive '${n}' on table '${e.tableName}' has no fields — a partial UNIQUE must cover at least one column.`);
|
|
852
|
+
if (N(e.tableName, n, a, r), e.appliedIndexes.some((e) => e.name === n)) throw Error(`duplicate index '${n}' on table '${e.tableName}': each index name must be unique within a table (uniqueActive shares the index namespace).`);
|
|
853
853
|
let o = i?.where ?? "\"deletedAt\" IS NULL";
|
|
854
|
-
return
|
|
854
|
+
return P({
|
|
855
855
|
...e,
|
|
856
856
|
tableName: e.tableName,
|
|
857
857
|
fields: e.fields,
|
|
@@ -873,8 +873,8 @@ var ce = () => new u({
|
|
|
873
873
|
}),
|
|
874
874
|
check: ((t, n) => {
|
|
875
875
|
if (n.trim().length === 0) throw Error(`CHECK '${t}' on table '${e.tableName}' has an empty expression.`);
|
|
876
|
-
if (
|
|
877
|
-
return
|
|
876
|
+
if (N(e.tableName, t, !1, []), e.appliedChecks.some((e) => e.name === t)) throw Error(`duplicate CHECK '${t}' on table '${e.tableName}': each constraint name must be unique within a table.`);
|
|
877
|
+
return P({
|
|
878
878
|
...e,
|
|
879
879
|
tableName: e.tableName,
|
|
880
880
|
fields: e.fields,
|
|
@@ -896,7 +896,7 @@ var ce = () => new u({
|
|
|
896
896
|
if (t.trim().length === 0) throw Error(`rule on table '${e.tableName}' has an empty name.`);
|
|
897
897
|
let i = e.appliedRules ?? [];
|
|
898
898
|
if (i.some((e) => e.name === t)) throw Error(`duplicate rule '${t}' on table '${e.tableName}': each rule name must be unique within a table.`);
|
|
899
|
-
return
|
|
899
|
+
return P({
|
|
900
900
|
...e,
|
|
901
901
|
appliedRules: [...i, {
|
|
902
902
|
name: t,
|
|
@@ -907,7 +907,7 @@ var ce = () => new u({
|
|
|
907
907
|
}),
|
|
908
908
|
renamedFrom: ((t) => {
|
|
909
909
|
if (t === e.tableName) throw Error(`renamedFrom('${t}') on table '${e.tableName}' names the table itself — drop the marker, there is nothing to rename.`);
|
|
910
|
-
return
|
|
910
|
+
return j(t), P({
|
|
911
911
|
...e,
|
|
912
912
|
previousTableName: t
|
|
913
913
|
});
|
|
@@ -922,7 +922,7 @@ var ce = () => new u({
|
|
|
922
922
|
}
|
|
923
923
|
if (t.length > 0) throw Error(`primaryKey([...]) declared twice on table '${e.tableName}'.`);
|
|
924
924
|
for (let [t, r] of Object.entries(e.fields)) if (r.type === "id" && !n.includes(t)) throw Error(`primaryKey([...]) on table '${e.tableName}' conflicts with the id() column '${t}'. The explicit primary key IS the key — drop the id() column, or include '${t}' in the composite key.`);
|
|
925
|
-
return
|
|
925
|
+
return P({
|
|
926
926
|
...e,
|
|
927
927
|
tableName: e.tableName,
|
|
928
928
|
fields: e.fields,
|
|
@@ -937,7 +937,7 @@ var ce = () => new u({
|
|
|
937
937
|
...e.validatePatchSchema === void 0 ? {} : { validatePatchSchema: e.validatePatchSchema }
|
|
938
938
|
});
|
|
939
939
|
}),
|
|
940
|
-
nonReactive: (() =>
|
|
940
|
+
nonReactive: (() => P({
|
|
941
941
|
...e,
|
|
942
942
|
tableName: e.tableName,
|
|
943
943
|
fields: e.fields,
|
|
@@ -951,7 +951,7 @@ var ce = () => new u({
|
|
|
951
951
|
...e.insertSchema === void 0 ? {} : { insertSchema: e.insertSchema },
|
|
952
952
|
...e.validatePatchSchema === void 0 ? {} : { validatePatchSchema: e.validatePatchSchema }
|
|
953
953
|
})),
|
|
954
|
-
validate: ((t) =>
|
|
954
|
+
validate: ((t) => P({
|
|
955
955
|
...e,
|
|
956
956
|
tableName: e.tableName,
|
|
957
957
|
fields: e.fields,
|
|
@@ -965,7 +965,7 @@ var ce = () => new u({
|
|
|
965
965
|
insertSchema: t,
|
|
966
966
|
...e.validatePatchSchema === void 0 ? {} : { validatePatchSchema: e.validatePatchSchema }
|
|
967
967
|
})),
|
|
968
|
-
validatePatch: ((t) =>
|
|
968
|
+
validatePatch: ((t) => P({
|
|
969
969
|
...e,
|
|
970
970
|
tableName: e.tableName,
|
|
971
971
|
fields: e.fields,
|
|
@@ -980,22 +980,22 @@ var ce = () => new u({
|
|
|
980
980
|
validatePatchSchema: r.partial(t)
|
|
981
981
|
}))
|
|
982
982
|
};
|
|
983
|
-
},
|
|
984
|
-
|
|
983
|
+
}, F = (e, t) => {
|
|
984
|
+
j(e);
|
|
985
985
|
let n = Object.entries(t).flatMap(([e, t]) => {
|
|
986
|
-
let n =
|
|
986
|
+
let n = he(t);
|
|
987
987
|
return n === void 0 ? [] : [{
|
|
988
988
|
column: e,
|
|
989
989
|
...n
|
|
990
990
|
}];
|
|
991
|
-
}), r =
|
|
992
|
-
for (let t of Object.keys(r))
|
|
991
|
+
}), r = bt(C(t), e);
|
|
992
|
+
for (let t of Object.keys(r)) M(e, t);
|
|
993
993
|
let i;
|
|
994
|
-
for (let [t, n] of Object.entries(r)) n.references ===
|
|
994
|
+
for (let [t, n] of Object.entries(r)) n.references === S && (n.references = () => {
|
|
995
995
|
if (i === void 0) throw Error(`selfReference() on '${e}.${t}' read before table() returned`);
|
|
996
996
|
return i;
|
|
997
997
|
});
|
|
998
|
-
return i =
|
|
998
|
+
return i = P({
|
|
999
999
|
appliedPluginRefs: n,
|
|
1000
1000
|
tableName: e,
|
|
1001
1001
|
fields: r,
|
|
@@ -1007,7 +1007,7 @@ var ce = () => new u({
|
|
|
1007
1007
|
appliedChecks: [],
|
|
1008
1008
|
appliedRules: []
|
|
1009
1009
|
}), i;
|
|
1010
|
-
},
|
|
1010
|
+
}, xt = (e) => e === "sqlite" || e === "turso", St = (e) => e === "mysql" || e === "mariadb", I = (e, t) => {
|
|
1011
1011
|
switch (t) {
|
|
1012
1012
|
case "mysql":
|
|
1013
1013
|
case "mariadb": return `\`${e.replace(/`/g, "``")}\``;
|
|
@@ -1016,51 +1016,51 @@ var ce = () => new u({
|
|
|
1016
1016
|
case "sqlite":
|
|
1017
1017
|
case "turso": return `"${e.replace(/"/g, "\"\"")}"`;
|
|
1018
1018
|
}
|
|
1019
|
-
},
|
|
1020
|
-
let t =
|
|
1019
|
+
}, Ct = 1e4, wt = Symbol.for("@voltro/database/tableRegistry"), Tt = globalThis, L = Tt[wt] ?? (Tt[wt] = /* @__PURE__ */ new Map()), Et = (e) => {
|
|
1020
|
+
let t = L.get(e.tableName);
|
|
1021
1021
|
if (t === void 0) {
|
|
1022
|
-
|
|
1022
|
+
L.set(e.tableName, e);
|
|
1023
1023
|
return;
|
|
1024
1024
|
}
|
|
1025
1025
|
if (t !== e) throw Error(`duplicate table '${e.tableName}' registration: two different table descriptors claim the same name. Rename one or import the shared module that defines it.`);
|
|
1026
|
-
},
|
|
1027
|
-
|
|
1028
|
-
},
|
|
1029
|
-
let t =
|
|
1026
|
+
}, Dt = (e) => {
|
|
1027
|
+
L.get(e.tableName) === void 0 && L.set(e.tableName, e);
|
|
1028
|
+
}, R = (e) => L.get(e), Ot = (e) => {
|
|
1029
|
+
let t = L.get(e);
|
|
1030
1030
|
if (t === void 0) throw Error(`table '${e}' is not registered. Register it by wrapping it in \`databaseHandle({ ... })\` (the usual path) or call \`registerTable(t)\` explicitly before this runs. Note a \`queryFor(t)\` query carries its own source table, so eager-loads don't hit this — this error means a reconstructed descriptor or by-name tooling reached an unregistered table.`);
|
|
1031
1031
|
return t;
|
|
1032
|
-
},
|
|
1033
|
-
|
|
1034
|
-
},
|
|
1032
|
+
}, kt = () => [...L.values()], At = (e) => L.delete(e), jt = () => {
|
|
1033
|
+
L.clear();
|
|
1034
|
+
}, Mt = (e) => L.get(e)?.isReactive !== !1, z = (e) => e.order ?? [], Nt = (e) => ({
|
|
1035
1035
|
op: "count",
|
|
1036
1036
|
alias: e ?? "count"
|
|
1037
|
-
}),
|
|
1037
|
+
}), Pt = (e, t) => ({
|
|
1038
1038
|
op: "count-distinct",
|
|
1039
1039
|
column: e,
|
|
1040
1040
|
alias: t ?? `count_distinct_${e}`
|
|
1041
|
-
}),
|
|
1041
|
+
}), Ft = (e, t) => ({
|
|
1042
1042
|
op: "sum",
|
|
1043
1043
|
column: e,
|
|
1044
1044
|
alias: t ?? `sum_${e}`
|
|
1045
|
-
}),
|
|
1045
|
+
}), It = (e, t) => ({
|
|
1046
1046
|
op: "avg",
|
|
1047
1047
|
column: e,
|
|
1048
1048
|
alias: t ?? `avg_${e}`
|
|
1049
|
-
}),
|
|
1049
|
+
}), Lt = (e, t) => ({
|
|
1050
1050
|
op: "min",
|
|
1051
1051
|
column: e,
|
|
1052
1052
|
alias: t ?? `min_${e}`
|
|
1053
|
-
}),
|
|
1053
|
+
}), Rt = (e, t) => ({
|
|
1054
1054
|
op: "max",
|
|
1055
1055
|
column: e,
|
|
1056
1056
|
alias: t ?? `max_${e}`
|
|
1057
|
-
}),
|
|
1057
|
+
}), zt = (e, t) => ({
|
|
1058
1058
|
op: "column",
|
|
1059
1059
|
column: e,
|
|
1060
1060
|
alias: t ?? e
|
|
1061
|
-
}),
|
|
1061
|
+
}), B = (e) => (...t) => {
|
|
1062
1062
|
if (t.length < 2) throw Error(`${e}: requires at least two queries`);
|
|
1063
|
-
return
|
|
1063
|
+
return H({
|
|
1064
1064
|
table: t[0].descriptor.table,
|
|
1065
1065
|
predicate: void 0,
|
|
1066
1066
|
order: [],
|
|
@@ -1072,55 +1072,55 @@ var ce = () => new u({
|
|
|
1072
1072
|
queries: t.map((e) => e.descriptor)
|
|
1073
1073
|
}
|
|
1074
1074
|
});
|
|
1075
|
-
},
|
|
1075
|
+
}, Bt = B("union"), Vt = B("union-all"), Ht = B("intersect"), Ut = B("except"), V = (e) => ({ over: (t) => ({
|
|
1076
1076
|
...e,
|
|
1077
1077
|
window: t
|
|
1078
|
-
}) }),
|
|
1078
|
+
}) }), Wt = (e = "rowNumber") => V({
|
|
1079
1079
|
op: "window-row-number",
|
|
1080
1080
|
alias: e
|
|
1081
|
-
}),
|
|
1081
|
+
}), Gt = (e = "rank") => V({
|
|
1082
1082
|
op: "window-rank",
|
|
1083
1083
|
alias: e
|
|
1084
|
-
}),
|
|
1084
|
+
}), Kt = (e = "denseRank") => V({
|
|
1085
1085
|
op: "window-dense-rank",
|
|
1086
1086
|
alias: e
|
|
1087
|
-
}),
|
|
1087
|
+
}), qt = (e, t = 1, n) => V({
|
|
1088
1088
|
op: "window-lag",
|
|
1089
1089
|
column: e,
|
|
1090
1090
|
alias: n ?? `lag_${e}`,
|
|
1091
1091
|
offset: t
|
|
1092
|
-
}),
|
|
1092
|
+
}), Jt = (e, t = 1, n) => V({
|
|
1093
1093
|
op: "window-lead",
|
|
1094
1094
|
column: e,
|
|
1095
1095
|
alias: n ?? `lead_${e}`,
|
|
1096
1096
|
offset: t
|
|
1097
|
-
}),
|
|
1097
|
+
}), Yt = (e, t) => V({
|
|
1098
1098
|
op: "window-sum-over",
|
|
1099
1099
|
column: e,
|
|
1100
1100
|
alias: t ?? `sum_${e}_over`
|
|
1101
|
-
}),
|
|
1101
|
+
}), Xt = (e, t) => V({
|
|
1102
1102
|
op: "window-avg-over",
|
|
1103
1103
|
column: e,
|
|
1104
1104
|
alias: t ?? `avg_${e}_over`
|
|
1105
|
-
}),
|
|
1106
|
-
let r = n?.find((e) => e.name === t) ??
|
|
1105
|
+
}), Zt = (e, t, n) => {
|
|
1106
|
+
let r = n?.find((e) => e.name === t) ?? R(e)?.appliedFullText?.find((e) => e.name === t);
|
|
1107
1107
|
if (r === void 0) throw Error(`.matching('${t}', ...): no full-text index named '${t}' is declared on table '${e}'. Declare it with \`table(...).fullTextIndex('${t}', [columns])\` first.`);
|
|
1108
1108
|
return {
|
|
1109
1109
|
columns: r.columns,
|
|
1110
1110
|
...r.config === void 0 ? {} : { config: r.config },
|
|
1111
1111
|
...r.weights === void 0 ? {} : { weights: r.weights }
|
|
1112
1112
|
};
|
|
1113
|
-
},
|
|
1113
|
+
}, H = (e) => ({
|
|
1114
1114
|
descriptor: e,
|
|
1115
1115
|
where(t) {
|
|
1116
1116
|
let n = e.predicate ? { and: [e.predicate, t] } : t;
|
|
1117
|
-
return
|
|
1117
|
+
return H({
|
|
1118
1118
|
...e,
|
|
1119
1119
|
predicate: n
|
|
1120
1120
|
});
|
|
1121
1121
|
},
|
|
1122
1122
|
orderBy(t, n = "asc") {
|
|
1123
|
-
return
|
|
1123
|
+
return H({
|
|
1124
1124
|
...e,
|
|
1125
1125
|
order: [...e.order, {
|
|
1126
1126
|
column: t,
|
|
@@ -1129,43 +1129,43 @@ var ce = () => new u({
|
|
|
1129
1129
|
});
|
|
1130
1130
|
},
|
|
1131
1131
|
limit(t) {
|
|
1132
|
-
return
|
|
1132
|
+
return H({
|
|
1133
1133
|
...e,
|
|
1134
1134
|
take: t
|
|
1135
1135
|
});
|
|
1136
1136
|
},
|
|
1137
1137
|
offset(t) {
|
|
1138
|
-
return
|
|
1138
|
+
return H({
|
|
1139
1139
|
...e,
|
|
1140
1140
|
skip: t
|
|
1141
1141
|
});
|
|
1142
1142
|
},
|
|
1143
1143
|
select(...t) {
|
|
1144
|
-
return
|
|
1144
|
+
return H({
|
|
1145
1145
|
...e,
|
|
1146
1146
|
projection: t
|
|
1147
1147
|
});
|
|
1148
1148
|
},
|
|
1149
1149
|
using(t) {
|
|
1150
|
-
return
|
|
1150
|
+
return H({
|
|
1151
1151
|
...e,
|
|
1152
1152
|
usingIndex: t
|
|
1153
1153
|
});
|
|
1154
1154
|
},
|
|
1155
1155
|
withDeleted() {
|
|
1156
|
-
return
|
|
1156
|
+
return H({
|
|
1157
1157
|
...e,
|
|
1158
1158
|
includeDeleted: !0
|
|
1159
1159
|
});
|
|
1160
1160
|
},
|
|
1161
1161
|
forUpdate() {
|
|
1162
|
-
return
|
|
1162
|
+
return H({
|
|
1163
1163
|
...e,
|
|
1164
1164
|
lock: "update"
|
|
1165
1165
|
});
|
|
1166
1166
|
},
|
|
1167
1167
|
unscoped() {
|
|
1168
|
-
return
|
|
1168
|
+
return H({
|
|
1169
1169
|
...e,
|
|
1170
1170
|
crossTenant: !0
|
|
1171
1171
|
});
|
|
@@ -1175,13 +1175,13 @@ var ce = () => new u({
|
|
|
1175
1175
|
...e.eager ?? {},
|
|
1176
1176
|
...t
|
|
1177
1177
|
};
|
|
1178
|
-
return
|
|
1178
|
+
return H({
|
|
1179
1179
|
...e,
|
|
1180
1180
|
eager: n
|
|
1181
1181
|
});
|
|
1182
1182
|
},
|
|
1183
1183
|
count() {
|
|
1184
|
-
return
|
|
1184
|
+
return H({
|
|
1185
1185
|
...e,
|
|
1186
1186
|
projection: void 0,
|
|
1187
1187
|
aggregations: [{
|
|
@@ -1195,29 +1195,30 @@ var ce = () => new u({
|
|
|
1195
1195
|
...t,
|
|
1196
1196
|
alias: e
|
|
1197
1197
|
}));
|
|
1198
|
-
return
|
|
1198
|
+
return H({
|
|
1199
1199
|
...e,
|
|
1200
1200
|
projection: void 0,
|
|
1201
1201
|
aggregations: n
|
|
1202
1202
|
});
|
|
1203
1203
|
},
|
|
1204
|
-
matching(t, n) {
|
|
1205
|
-
let
|
|
1206
|
-
return
|
|
1204
|
+
matching(t, n, r) {
|
|
1205
|
+
let i = Zt(e.table, t, e.fullTextIndexes);
|
|
1206
|
+
return H({
|
|
1207
1207
|
...e,
|
|
1208
1208
|
fullTextSearch: {
|
|
1209
1209
|
indexName: t,
|
|
1210
1210
|
query: n,
|
|
1211
|
-
columns:
|
|
1212
|
-
...r
|
|
1213
|
-
...
|
|
1211
|
+
columns: i.columns,
|
|
1212
|
+
...r?.prefix === !0 ? { prefix: !0 } : {},
|
|
1213
|
+
...i.config === void 0 ? {} : { config: i.config },
|
|
1214
|
+
...i.weights === void 0 ? {} : { weights: i.weights }
|
|
1214
1215
|
}
|
|
1215
1216
|
});
|
|
1216
1217
|
},
|
|
1217
1218
|
rankBy(t) {
|
|
1218
1219
|
let n = e.fullTextSearch;
|
|
1219
1220
|
if (n === void 0) throw Error(".rankBy() requires a preceding .matching(...) clause — there is no full-text search to rank on this query.");
|
|
1220
|
-
return
|
|
1221
|
+
return H({
|
|
1221
1222
|
...e,
|
|
1222
1223
|
fullTextSearch: {
|
|
1223
1224
|
...n,
|
|
@@ -1236,7 +1237,7 @@ var ce = () => new u({
|
|
|
1236
1237
|
distance: r?.distance ?? "cosine",
|
|
1237
1238
|
...e.annClause?.ef === void 0 ? {} : { ef: e.annClause.ef }
|
|
1238
1239
|
};
|
|
1239
|
-
return
|
|
1240
|
+
return H({
|
|
1240
1241
|
...e,
|
|
1241
1242
|
annClause: i
|
|
1242
1243
|
});
|
|
@@ -1248,7 +1249,7 @@ var ce = () => new u({
|
|
|
1248
1249
|
distance: "cosine",
|
|
1249
1250
|
...e.annClause?.ef === void 0 ? {} : { ef: e.annClause.ef }
|
|
1250
1251
|
};
|
|
1251
|
-
return
|
|
1252
|
+
return H({
|
|
1252
1253
|
...e,
|
|
1253
1254
|
annClause: r,
|
|
1254
1255
|
take: n
|
|
@@ -1261,7 +1262,7 @@ var ce = () => new u({
|
|
|
1261
1262
|
column: "",
|
|
1262
1263
|
distance: "cosine"
|
|
1263
1264
|
};
|
|
1264
|
-
return
|
|
1265
|
+
return H({
|
|
1265
1266
|
...e,
|
|
1266
1267
|
annClause: {
|
|
1267
1268
|
...n,
|
|
@@ -1270,22 +1271,22 @@ var ce = () => new u({
|
|
|
1270
1271
|
});
|
|
1271
1272
|
},
|
|
1272
1273
|
use(t) {
|
|
1273
|
-
return
|
|
1274
|
+
return H({ ...t(e) });
|
|
1274
1275
|
},
|
|
1275
1276
|
distinct() {
|
|
1276
|
-
return
|
|
1277
|
+
return H({
|
|
1277
1278
|
...e,
|
|
1278
1279
|
distinct: !0
|
|
1279
1280
|
});
|
|
1280
1281
|
},
|
|
1281
1282
|
distinctOn(t) {
|
|
1282
|
-
return
|
|
1283
|
+
return H({
|
|
1283
1284
|
...e,
|
|
1284
1285
|
distinctOn: [...t]
|
|
1285
1286
|
});
|
|
1286
1287
|
},
|
|
1287
1288
|
as(t) {
|
|
1288
|
-
return
|
|
1289
|
+
return H({
|
|
1289
1290
|
...e,
|
|
1290
1291
|
alias: t
|
|
1291
1292
|
});
|
|
@@ -1295,9 +1296,10 @@ var ce = () => new u({
|
|
|
1295
1296
|
kind: "inner",
|
|
1296
1297
|
table: i,
|
|
1297
1298
|
alias: n,
|
|
1298
|
-
on: r
|
|
1299
|
+
on: r,
|
|
1300
|
+
...typeof t == "string" ? {} : { sourceTable: t }
|
|
1299
1301
|
}];
|
|
1300
|
-
return
|
|
1302
|
+
return H({
|
|
1301
1303
|
...e,
|
|
1302
1304
|
joins: a
|
|
1303
1305
|
});
|
|
@@ -1307,9 +1309,10 @@ var ce = () => new u({
|
|
|
1307
1309
|
kind: "left",
|
|
1308
1310
|
table: i,
|
|
1309
1311
|
alias: n,
|
|
1310
|
-
on: r
|
|
1312
|
+
on: r,
|
|
1313
|
+
...typeof t == "string" ? {} : { sourceTable: t }
|
|
1311
1314
|
}];
|
|
1312
|
-
return
|
|
1315
|
+
return H({
|
|
1313
1316
|
...e,
|
|
1314
1317
|
joins: a
|
|
1315
1318
|
});
|
|
@@ -1319,7 +1322,7 @@ var ce = () => new u({
|
|
|
1319
1322
|
outputKey: e,
|
|
1320
1323
|
source: t
|
|
1321
1324
|
}));
|
|
1322
|
-
return
|
|
1325
|
+
return H({
|
|
1323
1326
|
...e,
|
|
1324
1327
|
projection: void 0,
|
|
1325
1328
|
joinedProjection: n
|
|
@@ -1328,7 +1331,7 @@ var ce = () => new u({
|
|
|
1328
1331
|
withCte(t, n) {
|
|
1329
1332
|
let r = e.ctes ?? [];
|
|
1330
1333
|
if (r.some((e) => e.name === t)) throw Error(`Query.withCte: duplicate CTE name '${t}'`);
|
|
1331
|
-
return
|
|
1334
|
+
return H({
|
|
1332
1335
|
...e,
|
|
1333
1336
|
ctes: [...r, {
|
|
1334
1337
|
name: t,
|
|
@@ -1339,7 +1342,7 @@ var ce = () => new u({
|
|
|
1339
1342
|
recursiveCte(t, n) {
|
|
1340
1343
|
let r = e.ctes ?? [];
|
|
1341
1344
|
if (r.some((e) => e.name === t)) throw Error(`Query.recursiveCte: duplicate CTE name '${t}'`);
|
|
1342
|
-
return
|
|
1345
|
+
return H({
|
|
1343
1346
|
...e,
|
|
1344
1347
|
ctes: [...r, {
|
|
1345
1348
|
name: t,
|
|
@@ -1350,20 +1353,20 @@ var ce = () => new u({
|
|
|
1350
1353
|
},
|
|
1351
1354
|
groupBy(t) {
|
|
1352
1355
|
let n = e.groupBy ? [...e.groupBy, ...t] : [...t];
|
|
1353
|
-
return
|
|
1356
|
+
return H({
|
|
1354
1357
|
...e,
|
|
1355
1358
|
groupBy: n
|
|
1356
1359
|
});
|
|
1357
1360
|
},
|
|
1358
1361
|
having(t) {
|
|
1359
1362
|
let n = e.having ? { and: [e.having, t] } : t;
|
|
1360
|
-
return
|
|
1363
|
+
return H({
|
|
1361
1364
|
...e,
|
|
1362
1365
|
having: n
|
|
1363
1366
|
});
|
|
1364
1367
|
},
|
|
1365
1368
|
exists() {
|
|
1366
|
-
return
|
|
1369
|
+
return H({
|
|
1367
1370
|
...e,
|
|
1368
1371
|
projection: void 0,
|
|
1369
1372
|
aggregations: [{
|
|
@@ -1374,8 +1377,8 @@ var ce = () => new u({
|
|
|
1374
1377
|
});
|
|
1375
1378
|
}
|
|
1376
1379
|
});
|
|
1377
|
-
function
|
|
1378
|
-
return
|
|
1380
|
+
function Qt(e) {
|
|
1381
|
+
return H({
|
|
1379
1382
|
table: e.tableName,
|
|
1380
1383
|
predicate: void 0,
|
|
1381
1384
|
order: [],
|
|
@@ -1386,7 +1389,7 @@ function Zt(e) {
|
|
|
1386
1389
|
sourceTable: e
|
|
1387
1390
|
});
|
|
1388
1391
|
}
|
|
1389
|
-
var
|
|
1392
|
+
var $t = (e, t, n) => en(e, "id", t, n), en = (e, t, n, r, i = "asc") => {
|
|
1390
1393
|
let a = [...e.order.filter((e) => e.column !== t), {
|
|
1391
1394
|
column: t,
|
|
1392
1395
|
direction: i
|
|
@@ -1401,21 +1404,21 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1401
1404
|
order: a,
|
|
1402
1405
|
take: r
|
|
1403
1406
|
};
|
|
1404
|
-
},
|
|
1407
|
+
}, tn = (e) => {
|
|
1405
1408
|
let t = {};
|
|
1406
|
-
for (let [n, r] of Object.entries(e))
|
|
1409
|
+
for (let [n, r] of Object.entries(e)) Et(r), t[n] = Qt(r);
|
|
1407
1410
|
return t;
|
|
1408
|
-
},
|
|
1409
|
-
if (
|
|
1410
|
-
let r =
|
|
1411
|
-
for (let t of Object.keys(r))
|
|
1411
|
+
}, nn = (e) => e.isView === !0, rn = (e, t, n) => {
|
|
1412
|
+
if (j(e), n.trim().length === 0) throw Error(`view('${e}', …): the SELECT body is empty — a view must define a query.`);
|
|
1413
|
+
let r = C(t);
|
|
1414
|
+
for (let t of Object.keys(r)) M(e, t);
|
|
1412
1415
|
return {
|
|
1413
1416
|
tableName: e,
|
|
1414
1417
|
fields: r,
|
|
1415
1418
|
isView: !0,
|
|
1416
1419
|
viewSelect: n
|
|
1417
1420
|
};
|
|
1418
|
-
},
|
|
1421
|
+
}, an = (e) => Qt({
|
|
1419
1422
|
...e,
|
|
1420
1423
|
isReactive: !1,
|
|
1421
1424
|
appliedMixins: [],
|
|
@@ -1423,8 +1426,8 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1423
1426
|
appliedUniques: [],
|
|
1424
1427
|
appliedFullText: [],
|
|
1425
1428
|
appliedChecks: []
|
|
1426
|
-
}),
|
|
1427
|
-
let r = n === null ?
|
|
1429
|
+
}), on = (e, t, n = null) => {
|
|
1430
|
+
let r = n === null ? I(e.tableName, t) : `${I(n, t)}.${I(e.tableName, t)}`, i = e.viewSelect.trim();
|
|
1428
1431
|
switch (t) {
|
|
1429
1432
|
case "postgres":
|
|
1430
1433
|
case "mysql":
|
|
@@ -1433,7 +1436,7 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1433
1436
|
case "sqlite":
|
|
1434
1437
|
case "turso": return `DROP VIEW IF EXISTS ${r};\nCREATE VIEW ${r} AS ${i};`;
|
|
1435
1438
|
}
|
|
1436
|
-
},
|
|
1439
|
+
}, sn = (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, cn = (e) => {
|
|
1437
1440
|
if (e == null || typeof e != "string") return e;
|
|
1438
1441
|
let t = e.trim();
|
|
1439
1442
|
if (t.length === 0) return e;
|
|
@@ -1444,7 +1447,7 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1444
1447
|
} catch {
|
|
1445
1448
|
return e;
|
|
1446
1449
|
}
|
|
1447
|
-
},
|
|
1450
|
+
}, ln = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, un = (e) => {
|
|
1448
1451
|
if (e == null || e instanceof Date) return e;
|
|
1449
1452
|
if (typeof e == "string") {
|
|
1450
1453
|
let t = new Date(e);
|
|
@@ -1455,24 +1458,24 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1455
1458
|
return isNaN(t.getTime()) ? e : t;
|
|
1456
1459
|
}
|
|
1457
1460
|
return e;
|
|
1458
|
-
},
|
|
1461
|
+
}, dn = (e, t, n) => {
|
|
1459
1462
|
if (e == null) return e;
|
|
1460
1463
|
switch (t) {
|
|
1461
|
-
case "boolean": return n === "postgres" ? e :
|
|
1462
|
-
case "vector": return n === "postgres" ?
|
|
1463
|
-
case "json": return n === "postgres" || n === "mysql" || n === "mariadb" ? e :
|
|
1464
|
-
case "array": return n === "postgres" ? e :
|
|
1464
|
+
case "boolean": return n === "postgres" ? e : sn(e);
|
|
1465
|
+
case "vector": return n === "postgres" ? cn(e) : e;
|
|
1466
|
+
case "json": return n === "postgres" || n === "mysql" || n === "mariadb" ? e : cn(e);
|
|
1467
|
+
case "array": return n === "postgres" ? e : cn(e);
|
|
1465
1468
|
case "timestamp":
|
|
1466
|
-
case "date": return n === "sqlite" || n === "turso" ?
|
|
1469
|
+
case "date": return n === "sqlite" || n === "turso" ? un(e) : e;
|
|
1467
1470
|
case "decimal":
|
|
1468
|
-
case "bigint": return
|
|
1471
|
+
case "bigint": return ln(e);
|
|
1469
1472
|
default: return e;
|
|
1470
1473
|
}
|
|
1471
|
-
}, dn = (e, t, n) => {
|
|
1472
|
-
if (e.length === 0) return e;
|
|
1473
|
-
let r = z(t);
|
|
1474
|
-
return r === void 0 ? e : fn(e, r, n);
|
|
1475
1474
|
}, fn = (e, t, n) => {
|
|
1475
|
+
if (e.length === 0) return e;
|
|
1476
|
+
let r = R(t);
|
|
1477
|
+
return r === void 0 ? e : pn(e, r, n);
|
|
1478
|
+
}, pn = (e, t, n) => {
|
|
1476
1479
|
if (e.length === 0) return e;
|
|
1477
1480
|
let r = t.fields, i = [];
|
|
1478
1481
|
for (let [e, t] of Object.entries(r)) i.push({
|
|
@@ -1481,10 +1484,10 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1481
1484
|
});
|
|
1482
1485
|
return e.map((e) => {
|
|
1483
1486
|
let t = { ...e };
|
|
1484
|
-
for (let { key: e, type: r } of i) e in t && (t[e] =
|
|
1487
|
+
for (let { key: e, type: r } of i) e in t && (t[e] = dn(t[e], r, n));
|
|
1485
1488
|
return t;
|
|
1486
1489
|
});
|
|
1487
|
-
},
|
|
1490
|
+
}, mn = (e, t) => {
|
|
1488
1491
|
if (e == null) return e;
|
|
1489
1492
|
switch (t) {
|
|
1490
1493
|
case "json": return JSON.stringify(e);
|
|
@@ -1492,25 +1495,38 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1492
1495
|
case "vector": return typeof e == "string" ? e : JSON.stringify(e);
|
|
1493
1496
|
default: return e;
|
|
1494
1497
|
}
|
|
1495
|
-
},
|
|
1496
|
-
let r =
|
|
1498
|
+
}, hn = (e, t, n = ["json", "array"]) => {
|
|
1499
|
+
let r = R(t);
|
|
1497
1500
|
if (r === void 0) return e;
|
|
1498
1501
|
let i = r.fields, a = null;
|
|
1499
1502
|
for (let [t, r] of Object.entries(i)) if (n.includes(r.type) && t in e) {
|
|
1500
|
-
let n =
|
|
1503
|
+
let n = mn(e[t], r.type);
|
|
1501
1504
|
n !== e[t] && (a === null && (a = { ...e }), a[t] = n);
|
|
1502
1505
|
}
|
|
1503
1506
|
return a ?? e;
|
|
1504
|
-
},
|
|
1507
|
+
}, gn = (e) => {
|
|
1508
|
+
if (e.length === 0) throw RangeError("Column reference must not be empty");
|
|
1509
|
+
return {
|
|
1510
|
+
_tag: "ColumnReference",
|
|
1511
|
+
column: e
|
|
1512
|
+
};
|
|
1513
|
+
}, U = (e) => typeof e == "object" && !!e && "_tag" in e && e._tag === "ColumnReference" && "column" in e && typeof e.column == "string", _n = [
|
|
1514
|
+
"eq",
|
|
1515
|
+
"neq",
|
|
1516
|
+
"gt",
|
|
1517
|
+
"gte",
|
|
1518
|
+
"lt",
|
|
1519
|
+
"lte"
|
|
1520
|
+
], vn = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => vn(e)) : e, yn = /^[A-Za-z_][A-Za-z0-9_]*$/, bn = (e) => "$" + e.map((e) => typeof e == "number" ? `[${e}]` : yn.test(e) ? `.${e}` : `."${e.replace(/"/g, "\\\"")}"`).join(""), xn = (e) => "{" + e.map((e) => {
|
|
1505
1521
|
let t = String(e);
|
|
1506
1522
|
return /^[A-Za-z0-9_]+$/.test(t) ? t : `"${t.replace(/(["\\])/g, "\\$1")}"`;
|
|
1507
1523
|
}).join(",") + "}", W = (e, t, n, r = {}) => {
|
|
1508
|
-
let i =
|
|
1524
|
+
let i = I(e, n), a = r.numeric ?? !1;
|
|
1509
1525
|
if (n === "postgres") {
|
|
1510
|
-
let e = `(${i} #>> '${
|
|
1526
|
+
let e = `(${i} #>> '${xn(t)}'::text[])`;
|
|
1511
1527
|
return a ? `${e}::numeric` : e;
|
|
1512
1528
|
}
|
|
1513
|
-
let o =
|
|
1529
|
+
let o = bn(t);
|
|
1514
1530
|
switch (n) {
|
|
1515
1531
|
case "mysql":
|
|
1516
1532
|
case "mariadb": {
|
|
@@ -1527,32 +1543,35 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1527
1543
|
return a ? `CAST(${e} AS REAL)` : e;
|
|
1528
1544
|
}
|
|
1529
1545
|
}
|
|
1530
|
-
},
|
|
1546
|
+
}, Sn = class extends Error {
|
|
1531
1547
|
_tag = "TenantNamespaceUnresolved";
|
|
1532
1548
|
constructor(e) {
|
|
1533
1549
|
super(e), this.name = "TenantNamespaceUnresolved";
|
|
1534
1550
|
}
|
|
1535
|
-
},
|
|
1551
|
+
}, Cn = class extends Error {
|
|
1536
1552
|
_tag = "TenantNamespaceInvalid";
|
|
1537
1553
|
constructor(e) {
|
|
1538
1554
|
super(e), this.name = "TenantNamespaceInvalid";
|
|
1539
1555
|
}
|
|
1540
|
-
},
|
|
1541
|
-
if (e == null || e === "") throw new
|
|
1542
|
-
let t =
|
|
1543
|
-
if (t.replace(/_/g, "") === "") throw new
|
|
1544
|
-
let n = `${
|
|
1545
|
-
if (n.length >
|
|
1556
|
+
}, wn = 63, Tn = "tenant_", En = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), Dn = (e) => {
|
|
1557
|
+
if (e == null || e === "") throw new Sn("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.");
|
|
1558
|
+
let t = En(e);
|
|
1559
|
+
if (t.replace(/_/g, "") === "") throw new Cn(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
|
|
1560
|
+
let n = `${Tn}${t}`;
|
|
1561
|
+
if (n.length > wn) throw new Cn(`namespace '${n}' for tenant '${e}' exceeds the ${wn}-byte identifier limit. Use a shorter tenant id.`);
|
|
1546
1562
|
return n;
|
|
1547
|
-
}, G = (e, t) => e === null ? t : `${e}.${t}`,
|
|
1548
|
-
if (e === void 0 || t == null || !
|
|
1563
|
+
}, G = (e, t) => e === null ? t : `${e}.${t}`, On = /* @__PURE__ */ new Set(["timestamp", "date"]), kn = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, An = (e, t) => {
|
|
1564
|
+
if (e === void 0 || t == null || !On.has(e) || t instanceof Date) return t;
|
|
1549
1565
|
if (typeof t == "number" && Number.isFinite(t)) return new Date(t);
|
|
1550
|
-
if (typeof t == "string" &&
|
|
1566
|
+
if (typeof t == "string" && kn.test(t)) {
|
|
1551
1567
|
let e = new Date(t);
|
|
1552
1568
|
return Number.isNaN(e.getTime()) ? t : e;
|
|
1553
1569
|
}
|
|
1554
1570
|
return t;
|
|
1555
|
-
},
|
|
1571
|
+
}, jn = (e, t) => e === void 0 || !On.has(e) ? t : t.map((t) => An(e, t)), Mn = (e, t) => {
|
|
1572
|
+
let n = e.lastIndexOf("."), r = n < 0 ? e : e.slice(n + 1), i = n < 0 ? void 0 : e.slice(0, n), a = i === void 0 || i === t.alias || i === t.table, o = a ? void 0 : t.joins?.find((e) => e.alias === i), s = a ? t.table : o?.table, c = a ? t.sourceTable : o?.sourceTable;
|
|
1573
|
+
return (c?.tableName === s ? c : s === void 0 ? void 0 : R(s))?.fields[r];
|
|
1574
|
+
}, Nn = (e, t) => {
|
|
1556
1575
|
let { strings: n, values: r } = e, i = t.unsafe(n[0] ?? "");
|
|
1557
1576
|
for (let e = 0; e < r.length; e++) i = t`${i}${r[e]}${t.unsafe(n[e + 1] ?? "")}`;
|
|
1558
1577
|
return t`${i}`;
|
|
@@ -1561,14 +1580,27 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1561
1580
|
if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => q(e, t, n, r)));
|
|
1562
1581
|
if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => q(e, t, n, r)));
|
|
1563
1582
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
1564
|
-
let r = e, i =
|
|
1583
|
+
let r = e, i = Y(r.subquery, t, n);
|
|
1565
1584
|
return r.op === "subquery-in" ? t`${t(r.column)} IN (${i})` : t`${t(r.column)} NOT IN (${i})`;
|
|
1566
1585
|
}
|
|
1567
1586
|
if (e.op === "exists" || e.op === "not-exists") {
|
|
1568
|
-
let r = e, i =
|
|
1587
|
+
let r = e, i = Y(r.subquery, t, n);
|
|
1569
1588
|
return r.op === "exists" ? t`EXISTS (${i})` : t`NOT EXISTS (${i})`;
|
|
1570
1589
|
}
|
|
1571
|
-
let i = e
|
|
1590
|
+
let i = e;
|
|
1591
|
+
if (U(i.value)) {
|
|
1592
|
+
if (!_n.some((e) => e === i.op) || i.path !== void 0) throw E("Column references require a scalar comparison without a JSON path");
|
|
1593
|
+
let e = t(i.value.column), n = t(i.column);
|
|
1594
|
+
switch (i.op) {
|
|
1595
|
+
case "eq": return t`${n} = ${e}`;
|
|
1596
|
+
case "neq": return t`${n} <> ${e}`;
|
|
1597
|
+
case "gt": return t`${n} > ${e}`;
|
|
1598
|
+
case "gte": return t`${n} >= ${e}`;
|
|
1599
|
+
case "lt": return t`${n} < ${e}`;
|
|
1600
|
+
case "lte": return t`${n} <= ${e}`;
|
|
1601
|
+
}
|
|
1602
|
+
}
|
|
1603
|
+
let a = t(i.column), o = i.path, s = o !== void 0 && o.length > 0, c = () => t.onDialectOrElse({
|
|
1572
1604
|
mysql: () => t.unsafe(W(i.column, o, "mysql")),
|
|
1573
1605
|
mssql: () => t.unsafe(W(i.column, o, "mssql")),
|
|
1574
1606
|
sqlite: () => t.unsafe(W(i.column, o, "sqlite")),
|
|
@@ -1578,21 +1610,27 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1578
1610
|
mssql: () => t.unsafe(W(i.column, o, "mssql", { numeric: !0 })),
|
|
1579
1611
|
sqlite: () => t.unsafe(W(i.column, o, "sqlite", { numeric: !0 })),
|
|
1580
1612
|
orElse: () => t.unsafe(W(i.column, o, "postgres", { numeric: !0 }))
|
|
1581
|
-
}), u = s ? c() : a, d = s ? l() : a, f = (e) => s && e != null ? String(e) : e, p = (e) => s ? Number(e) : e, m = s || r === void 0 ? void 0 :
|
|
1613
|
+
}), u = s ? c() : a, d = s ? l() : a, f = (e) => s && e != null ? String(e) : e, p = (e) => s ? Number(e) : e, m = s || r === void 0 ? void 0 : R(r)?.fields?.[i.column]?.type, h = (e) => {
|
|
1614
|
+
let n = An(m, e);
|
|
1615
|
+
return n instanceof Date ? t.onDialectOrElse({
|
|
1616
|
+
sqlite: () => vn(n),
|
|
1617
|
+
orElse: () => n
|
|
1618
|
+
}) : n;
|
|
1619
|
+
};
|
|
1582
1620
|
switch (i.op) {
|
|
1583
|
-
case "eq": return t`${u} = ${f(
|
|
1584
|
-
case "neq": return t`${u} <> ${f(
|
|
1585
|
-
case "gt": return t`${d} > ${p(i.value)}`;
|
|
1586
|
-
case "gte": return t`${d} >= ${p(i.value)}`;
|
|
1587
|
-
case "lt": return t`${d} < ${p(i.value)}`;
|
|
1588
|
-
case "lte": return t`${d} <= ${p(i.value)}`;
|
|
1621
|
+
case "eq": return t`${u} = ${f(h(i.value))}`;
|
|
1622
|
+
case "neq": return t`${u} <> ${f(h(i.value))}`;
|
|
1623
|
+
case "gt": return t`${d} > ${p(h(i.value))}`;
|
|
1624
|
+
case "gte": return t`${d} >= ${p(h(i.value))}`;
|
|
1625
|
+
case "lt": return t`${d} < ${p(h(i.value))}`;
|
|
1626
|
+
case "lte": return t`${d} <= ${p(h(i.value))}`;
|
|
1589
1627
|
case "in": {
|
|
1590
1628
|
let e = i.value ?? [];
|
|
1591
|
-
return e.length === 0 ? t`FALSE` : t`${u} IN ${t.in(s ? e.map((e) => f(e)) : e)}`;
|
|
1629
|
+
return e.length === 0 ? t`FALSE` : t`${u} IN ${t.in(s ? e.map((e) => f(e)) : e.map(h))}`;
|
|
1592
1630
|
}
|
|
1593
1631
|
case "notIn": {
|
|
1594
1632
|
let e = i.value ?? [];
|
|
1595
|
-
return e.length === 0 ? t`TRUE` : t`${u} NOT IN ${t.in(s ? e.map((e) => f(e)) : e)}`;
|
|
1633
|
+
return e.length === 0 ? t`TRUE` : t`${u} NOT IN ${t.in(s ? e.map((e) => f(e)) : e.map(h))}`;
|
|
1596
1634
|
}
|
|
1597
1635
|
case "contains": {
|
|
1598
1636
|
let e = `%${K(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
|
|
@@ -1640,25 +1678,25 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1640
1678
|
let e = i.value, n = t.unsafe("::geometry"), r = e.bufferMeters === void 0 ? t`${e.geom}${n}` : t`ST_Buffer(${e.geom}::geography, ${e.bufferMeters})::geometry`;
|
|
1641
1679
|
return t.onDialectOrElse({
|
|
1642
1680
|
mysql: () => {
|
|
1643
|
-
throw
|
|
1681
|
+
throw E("@voltro/plugin-postgis: spatial predicates are postgres-only");
|
|
1644
1682
|
},
|
|
1645
1683
|
mssql: () => {
|
|
1646
|
-
throw
|
|
1684
|
+
throw E("@voltro/plugin-postgis: spatial predicates are postgres-only");
|
|
1647
1685
|
},
|
|
1648
1686
|
sqlite: () => {
|
|
1649
|
-
throw
|
|
1687
|
+
throw E("@voltro/plugin-postgis: spatial predicates are postgres-only");
|
|
1650
1688
|
},
|
|
1651
1689
|
orElse: () => e.fn === "ST_DWithin" ? t`ST_DWithin(${a}::geography, ${e.geom}::geography, ${e.distanceMeters})` : e.fn === "&&" ? t`${a}${n} && ${r}` : t`${t.unsafe(e.fn)}(${a}${n}, ${r})`
|
|
1652
1690
|
});
|
|
1653
1691
|
}
|
|
1654
1692
|
}
|
|
1655
|
-
},
|
|
1693
|
+
}, Pn = (e, t) => {
|
|
1656
1694
|
let n = [];
|
|
1657
1695
|
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}`);
|
|
1658
|
-
},
|
|
1696
|
+
}, Fn = (e, t) => t.csv(e.map((e) => {
|
|
1659
1697
|
let n = e.column === void 0 ? t.unsafe("*") : t`${t(e.column)}`;
|
|
1660
1698
|
if (e.op.startsWith("window-")) {
|
|
1661
|
-
let r =
|
|
1699
|
+
let r = Pn(e.window ?? {}, t);
|
|
1662
1700
|
switch (e.op) {
|
|
1663
1701
|
case "window-row-number": return t`ROW_NUMBER() OVER (${r}) AS ${t(e.alias)}`;
|
|
1664
1702
|
case "window-rank": return t`RANK() OVER (${r}) AS ${t(e.alias)}`;
|
|
@@ -1667,7 +1705,7 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1667
1705
|
case "window-lead": return t`LEAD(${n}, ${t.unsafe(String(e.offset ?? 1))}) OVER (${r}) AS ${t(e.alias)}`;
|
|
1668
1706
|
case "window-sum-over": return t`SUM(${n}) OVER (${r}) AS ${t(e.alias)}`;
|
|
1669
1707
|
case "window-avg-over": return t`AVG(${n}) OVER (${r}) AS ${t(e.alias)}`;
|
|
1670
|
-
default: throw
|
|
1708
|
+
default: throw E(`compileAggregateProjection: unknown window op '${e.op}'`);
|
|
1671
1709
|
}
|
|
1672
1710
|
}
|
|
1673
1711
|
switch (e.op) {
|
|
@@ -1678,71 +1716,91 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1678
1716
|
case "min": return t`MIN(${n}) AS ${t(e.alias)}`;
|
|
1679
1717
|
case "max": return t`MAX(${n}) AS ${t(e.alias)}`;
|
|
1680
1718
|
case "column":
|
|
1681
|
-
if (e.column === void 0) throw
|
|
1719
|
+
if (e.column === void 0) throw E(`compileAggregateProjection: 'column' projection requires a column name (alias '${e.alias}')`);
|
|
1682
1720
|
return t`${t(e.column)} AS ${t(e.alias)}`;
|
|
1683
|
-
default: throw
|
|
1721
|
+
default: throw E(`compileAggregateProjection: unknown op '${e.op}'`);
|
|
1684
1722
|
}
|
|
1685
|
-
})),
|
|
1723
|
+
})), In = (e) => `[${e.join(",")}]`, Ln = (e, t) => {
|
|
1686
1724
|
if (e.queryVector === void 0) return null;
|
|
1687
|
-
let n = t(e.column), r =
|
|
1725
|
+
let n = t(e.column), r = In(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
|
|
1688
1726
|
return t.onDialectOrElse({
|
|
1689
1727
|
mysql: () => t`${t.unsafe(a)}(${n}, ${r})`,
|
|
1690
1728
|
mssql: () => t`NULL`,
|
|
1691
1729
|
sqlite: () => t`NULL`,
|
|
1692
1730
|
orElse: () => t`${n} ${t.unsafe(i)} ${r}::vector`
|
|
1693
1731
|
});
|
|
1694
|
-
},
|
|
1732
|
+
}, Rn = (e, t) => {
|
|
1695
1733
|
let n = t.unsafe(e.useGeography ? "::geography" : "::geometry");
|
|
1696
1734
|
return t`ST_Distance(${t(e.column)}${n}, ${e.geom}${n})`;
|
|
1697
|
-
},
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1735
|
+
}, zn = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, J = (e, t) => t`${t(`${e.indexName}_tsv`)}`, Bn = (e, t) => `${t}_${e.indexName}_fts`, Vn = (e) => e.toLowerCase().split(/[^\p{L}\p{N}]+/u).filter((e) => e !== ""), Hn = (e) => {
|
|
1736
|
+
if (e.prefix !== !0) return;
|
|
1737
|
+
let t = Vn(e.query);
|
|
1738
|
+
if (t.length !== 0) return {
|
|
1739
|
+
pg: t.map((e) => `${e}:*`).join(" & "),
|
|
1740
|
+
mysql: t.map((e) => `+${e}*`).join(" "),
|
|
1741
|
+
sqlite: t.map((e) => `"${e}"*`).join(" ")
|
|
1742
|
+
};
|
|
1743
|
+
}, Un = (e, t, n) => {
|
|
1744
|
+
let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${K(e.query)}%`, a = Hn(e), o = () => n.or(e.columns.map((e) => n`LOWER(${n(e)}) LIKE LOWER(${i}) ESCAPE '\\'`));
|
|
1745
|
+
return e.fallback === "like" ? o() : n.onDialectOrElse({
|
|
1746
|
+
mysql: () => a === void 0 ? n`MATCH(${r}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)` : n`MATCH(${r}) AGAINST(${a.mysql} IN BOOLEAN MODE)`,
|
|
1701
1747
|
sqlite: () => {
|
|
1702
|
-
let r = n(
|
|
1703
|
-
return n`${n("id")} IN (SELECT ${n("row_id")} FROM ${r} WHERE ${r} MATCH ${e.query})`;
|
|
1748
|
+
let r = n(Bn(e, t));
|
|
1749
|
+
return n`${n("id")} IN (SELECT ${n("row_id")} FROM ${r} WHERE ${r} MATCH ${a?.sqlite ?? e.query})`;
|
|
1704
1750
|
},
|
|
1705
|
-
mssql:
|
|
1706
|
-
orElse: () => n`${
|
|
1751
|
+
mssql: o,
|
|
1752
|
+
orElse: () => a === void 0 ? n`${J(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})` : n`${J(e, n)} @@ to_tsquery(${e.config ?? "english"}, ${a.pg})`
|
|
1707
1753
|
});
|
|
1708
|
-
},
|
|
1709
|
-
let r = `%${K(e.query)}
|
|
1710
|
-
return n.onDialectOrElse({
|
|
1711
|
-
mysql: () => n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
|
|
1754
|
+
}, Wn = (e, t, n) => {
|
|
1755
|
+
let r = `%${K(e.query)}%`, i = Hn(e), a = () => 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}`);
|
|
1756
|
+
return e.fallback === "like" ? a() : n.onDialectOrElse({
|
|
1757
|
+
mysql: () => i === void 0 ? n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)` : n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${i.mysql} IN BOOLEAN MODE)`,
|
|
1712
1758
|
sqlite: () => {
|
|
1713
|
-
let r = n(
|
|
1714
|
-
return n`COALESCE((SELECT -bm25(${r}) FROM ${r} WHERE ${r} MATCH ${e.query} AND ${r}.${n("row_id")} = ${n("id")}), 0)`;
|
|
1759
|
+
let r = n(Bn(e, t));
|
|
1760
|
+
return n`COALESCE((SELECT -bm25(${r}) FROM ${r} WHERE ${r} MATCH ${i?.sqlite ?? e.query} AND ${r}.${n("row_id")} = ${n("id")}), 0)`;
|
|
1715
1761
|
},
|
|
1716
|
-
mssql:
|
|
1717
|
-
orElse: () => n`ts_rank(${
|
|
1762
|
+
mssql: a,
|
|
1763
|
+
orElse: () => i === void 0 ? n`ts_rank(${J(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))` : n`ts_rank(${J(e, n)}, to_tsquery(${e.config ?? "english"}, ${i.pg}))`
|
|
1718
1764
|
});
|
|
1719
|
-
},
|
|
1765
|
+
}, Gn = (e, t, n, r) => {
|
|
1766
|
+
let i = (e) => t(r && !e.includes(".") ? `${r}.${e}` : e), a = () => n?.length ? t.csv(n.map((e) => t`${i(e)}`)) : r ? t`${t(r)}.*` : t`*`;
|
|
1767
|
+
return !e || !Object.values(e).some((e) => e.type === "bigint") ? a() : t.onDialectOrElse({
|
|
1768
|
+
sqlite: () => t.csv((n?.length ? n : Object.keys(e)).map((n) => e[n]?.type === "bigint" ? t`CAST(${i(n)} AS TEXT) AS ${t(n)}` : t`${i(n)}`)),
|
|
1769
|
+
orElse: a
|
|
1770
|
+
});
|
|
1771
|
+
}, Kn = (e, t, n) => Gn(R(e)?.fields, t, n), Y = (e, t, n = null) => {
|
|
1720
1772
|
if (e.setOp && e.setOp.queries.length >= 2) {
|
|
1721
|
-
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`(${
|
|
1722
|
-
if (
|
|
1723
|
-
if (!Number.isInteger(e.take) || e.take < 0) throw
|
|
1773
|
+
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`(${Y(e, t, n)})`).reduce((e, n, i) => i === 0 ? n : t`${e} ${t.unsafe(r)} ${n}`), a = [];
|
|
1774
|
+
if (z(e).length > 0 && a.push(t` ORDER BY ${t.csv(z(e).map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), e.take !== void 0) {
|
|
1775
|
+
if (!Number.isInteger(e.take) || e.take < 0) throw E(`compileSelect: invalid take ${e.take}`);
|
|
1724
1776
|
a.push(t` LIMIT ${t.unsafe(String(e.take))}`);
|
|
1725
1777
|
}
|
|
1726
1778
|
if (e.skip !== void 0) {
|
|
1727
|
-
if (!Number.isInteger(e.skip) || e.skip < 0) throw
|
|
1779
|
+
if (!Number.isInteger(e.skip) || e.skip < 0) throw E(`compileSelect: invalid skip ${e.skip}`);
|
|
1728
1780
|
a.push(t` OFFSET ${t.unsafe(String(e.skip))}`);
|
|
1729
1781
|
}
|
|
1730
1782
|
return t`${i}${a.reduce((e, n) => t`${e}${n}`, t``)}`;
|
|
1731
1783
|
}
|
|
1732
|
-
let r = e.annClause === void 0 ? null :
|
|
1784
|
+
let r = e.annClause === void 0 ? null : Ln(e.annClause, t);
|
|
1733
1785
|
e.spatialClause !== void 0 && t.onDialectOrElse({
|
|
1734
1786
|
mysql: () => {
|
|
1735
|
-
throw
|
|
1787
|
+
throw E("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
|
|
1736
1788
|
},
|
|
1737
1789
|
mssql: () => {
|
|
1738
|
-
throw
|
|
1790
|
+
throw E("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
|
|
1739
1791
|
},
|
|
1740
1792
|
sqlite: () => {
|
|
1741
|
-
throw
|
|
1793
|
+
throw E("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
|
|
1742
1794
|
},
|
|
1743
1795
|
orElse: () => t``
|
|
1744
1796
|
});
|
|
1745
|
-
let i = e.spatialClause?.projectAs === void 0 ? null :
|
|
1797
|
+
let i = e.spatialClause?.projectAs === void 0 ? null : Rn(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? Fn(e.aggregations, t) : e.joinedProjection && e.joinedProjection.length > 0 ? t.csv(e.joinedProjection.map((n) => {
|
|
1798
|
+
let r = t`${t(n.source)}`;
|
|
1799
|
+
return t`${Mn(n.source, e)?.type === "bigint" ? t.onDialectOrElse({
|
|
1800
|
+
sqlite: () => t`CAST(${r} AS TEXT)`,
|
|
1801
|
+
orElse: () => r
|
|
1802
|
+
}) : r} AS ${t(n.outputKey)}`;
|
|
1803
|
+
})) : Gn((e.sourceTable?.tableName === e.table ? e.sourceTable : R(e.table))?.fields, t, e.projection, (e.joins?.length ?? 0) > 0 ? e.alias ?? e.table : void 0), 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 ? Wn(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({
|
|
1746
1804
|
orElse: () => t`DISTINCT ON (${t.csv(e.distinctOn.map((e) => t`${t(e)}`))}) `,
|
|
1747
1805
|
mysql: () => t`DISTINCT `,
|
|
1748
1806
|
mssql: () => t`DISTINCT `,
|
|
@@ -1750,34 +1808,44 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1750
1808
|
}) : e.distinct ? t`DISTINCT ` : t``, p = e.lock === "update", m = p ? t.onDialectOrElse({
|
|
1751
1809
|
mssql: () => t` WITH (UPDLOCK, ROWLOCK)`,
|
|
1752
1810
|
orElse: () => t``
|
|
1753
|
-
}) : t``,
|
|
1811
|
+
}) : t``, h = p ? t.onDialectOrElse({
|
|
1754
1812
|
mssql: () => t``,
|
|
1755
1813
|
sqlite: () => t``,
|
|
1756
1814
|
orElse: () => t` FOR UPDATE`
|
|
1757
|
-
}) : t``,
|
|
1815
|
+
}) : t``, g = e.alias === void 0 ? t`${t(G(n, e.table))}${m}` : t`${t(G(n, e.table))} AS ${t(e.alias)}${m}`, ee = (e.joins ?? []).map((e) => {
|
|
1758
1816
|
let r = e.kind === "inner" ? "INNER" : "LEFT";
|
|
1759
1817
|
return t` ${t.unsafe(r)} JOIN ${t(G(n, e.table))} AS ${t(e.alias)} ON ${q(e.on, t, n)}`;
|
|
1760
|
-
}),
|
|
1761
|
-
r !== null &&
|
|
1762
|
-
for (let n of
|
|
1763
|
-
|
|
1818
|
+
}), te = ee.length > 0 ? ee.reduce((e, n) => t`${e}${n}`, g) : g, ne = c === void 0 ? null : Un(c, e.table, t), _ = [e.predicate ? q(e.predicate, t, n, e.table) : null, ne].filter((e) => e !== null), v = _.length > 0 ? t` WHERE ${t.and(_)}` : t``, re = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, y = e.having ? t` HAVING ${q(e.having, t, n, e.table)}` : t``, b = e.skip !== void 0, x = [];
|
|
1819
|
+
r !== null && x.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && x.push(e.spatialClause.order === "desc" ? t`${zn(e.spatialClause, t)} DESC` : t`${zn(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && x.push(t`${l} DESC`);
|
|
1820
|
+
for (let n of z(e)) {
|
|
1821
|
+
let r = e.joinedProjection?.find((e) => e.outputKey === n.column)?.source ?? n.column, i = !o && Mn(r, e)?.type === "bigint" ? t.onDialectOrElse({
|
|
1822
|
+
sqlite: () => t`${t(r.includes(".") ? r : `${e.alias ?? e.table}.${r}`)}`,
|
|
1823
|
+
orElse: () => t`${t(n.column)}`
|
|
1824
|
+
}) : t`${t(n.column)}`;
|
|
1825
|
+
x.push(n.direction === "desc" ? t`${i} DESC` : t`${i} ASC`);
|
|
1826
|
+
}
|
|
1827
|
+
let ie = x.length > 0 ? t` ORDER BY ${t.csv(x)}` : b ? t.onDialectOrElse({
|
|
1764
1828
|
mssql: () => t` ORDER BY (SELECT NULL)`,
|
|
1765
1829
|
orElse: () => t``
|
|
1766
|
-
}) : t``,
|
|
1767
|
-
if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw
|
|
1830
|
+
}) : t``, S = (e) => {
|
|
1831
|
+
if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw E(`compileSelect: expected non-negative integer take/skip, got ${e}`);
|
|
1768
1832
|
return t.unsafe(String(e));
|
|
1769
|
-
},
|
|
1833
|
+
}, ae = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${Y(e.descriptor, t, n)})`), oe = (e.ctes ?? []).some((e) => e.recursive === !0), se = ae.length > 0 ? t`WITH ${t.unsafe(oe ? "RECURSIVE " : "")}${t.csv(ae)} ` : t``;
|
|
1770
1834
|
return t.onDialectOrElse({
|
|
1771
1835
|
mssql: () => {
|
|
1772
|
-
let n = e.take !== void 0 && !
|
|
1773
|
-
return t`${
|
|
1836
|
+
let n = e.take !== void 0 && !b ? t`TOP ${S(e.take)} ` : t``, r = b ? t` OFFSET ${S(e.skip)} ROWS FETCH NEXT ${S(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
|
|
1837
|
+
return t`${se}SELECT ${n}${f}${d} FROM ${te}${v}${re}${y}${ie}${r}`;
|
|
1774
1838
|
},
|
|
1775
1839
|
orElse: () => {
|
|
1776
|
-
let n = e.take === void 0 ?
|
|
1777
|
-
|
|
1840
|
+
let n = e.take === void 0 ? b ? t.onDialectOrElse({
|
|
1841
|
+
sqlite: () => t` LIMIT -1`,
|
|
1842
|
+
mysql: () => t` LIMIT 18446744073709551615`,
|
|
1843
|
+
orElse: () => t``
|
|
1844
|
+
}) : t`` : t` LIMIT ${S(e.take)}`, r = b ? t` OFFSET ${S(e.skip)}` : t``;
|
|
1845
|
+
return t`${se}SELECT ${f}${d} FROM ${te}${v}${re}${y}${ie}${n}${r}${h}`;
|
|
1778
1846
|
}
|
|
1779
1847
|
});
|
|
1780
|
-
},
|
|
1848
|
+
}, X = (e, t) => {
|
|
1781
1849
|
let n = (e) => {
|
|
1782
1850
|
if (typeof e != "string" || !/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)$/.test(e)) return null;
|
|
1783
1851
|
let [t = "", n = ""] = e.replace(/^[+-]/, "").split("."), r = t.replace(/^0+/, "") || "0";
|
|
@@ -1795,74 +1863,74 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1795
1863
|
a = t === n ? 0 : t > n ? 1 : -1;
|
|
1796
1864
|
}
|
|
1797
1865
|
return a === 0 ? 0 : (a > 0 ? 1 : -1) * (r.negative ? -1 : 1);
|
|
1798
|
-
},
|
|
1866
|
+
}, qn = (e, t) => ({
|
|
1799
1867
|
column: e,
|
|
1800
1868
|
op: "eq",
|
|
1801
1869
|
value: t
|
|
1802
|
-
}),
|
|
1870
|
+
}), Jn = (e, t) => ({
|
|
1803
1871
|
column: e,
|
|
1804
1872
|
op: "neq",
|
|
1805
1873
|
value: t
|
|
1806
|
-
}),
|
|
1874
|
+
}), Yn = (e, t) => ({
|
|
1807
1875
|
column: e,
|
|
1808
1876
|
op: "gt",
|
|
1809
1877
|
value: t
|
|
1810
|
-
}),
|
|
1878
|
+
}), Xn = (e, t) => ({
|
|
1811
1879
|
column: e,
|
|
1812
1880
|
op: "gte",
|
|
1813
1881
|
value: t
|
|
1814
|
-
}),
|
|
1882
|
+
}), Zn = (e, t) => ({
|
|
1815
1883
|
column: e,
|
|
1816
1884
|
op: "lt",
|
|
1817
1885
|
value: t
|
|
1818
|
-
}),
|
|
1886
|
+
}), Qn = (e, t) => ({
|
|
1819
1887
|
column: e,
|
|
1820
1888
|
op: "lte",
|
|
1821
1889
|
value: t
|
|
1822
|
-
}),
|
|
1890
|
+
}), $n = (e, t) => ({
|
|
1823
1891
|
column: e,
|
|
1824
1892
|
op: "in",
|
|
1825
1893
|
value: t
|
|
1826
|
-
}),
|
|
1894
|
+
}), er = (e, t) => ({
|
|
1827
1895
|
column: e,
|
|
1828
1896
|
op: "notIn",
|
|
1829
1897
|
value: t
|
|
1830
|
-
}),
|
|
1898
|
+
}), tr = (e, t) => ({
|
|
1831
1899
|
column: e,
|
|
1832
1900
|
op: "contains",
|
|
1833
1901
|
value: t
|
|
1834
|
-
}),
|
|
1902
|
+
}), nr = (e, t) => ({
|
|
1835
1903
|
column: e,
|
|
1836
1904
|
op: "startsWith",
|
|
1837
1905
|
value: t
|
|
1838
|
-
}),
|
|
1906
|
+
}), rr = (e, t) => ({
|
|
1839
1907
|
column: e,
|
|
1840
1908
|
op: "arrayContains",
|
|
1841
1909
|
value: t
|
|
1842
|
-
}),
|
|
1910
|
+
}), ir = (e, t) => ({
|
|
1843
1911
|
column: e,
|
|
1844
1912
|
op: "arrayOverlaps",
|
|
1845
1913
|
value: t
|
|
1846
|
-
}),
|
|
1914
|
+
}), ar = (e, t) => ({
|
|
1847
1915
|
column: e,
|
|
1848
1916
|
op: "arrayHas",
|
|
1849
1917
|
value: t
|
|
1850
|
-
}),
|
|
1918
|
+
}), or = {
|
|
1851
1919
|
column: "id",
|
|
1852
1920
|
op: "in",
|
|
1853
1921
|
value: []
|
|
1854
|
-
},
|
|
1922
|
+
}, sr = (e) => ({
|
|
1855
1923
|
column: e,
|
|
1856
1924
|
op: "isNull"
|
|
1857
|
-
}),
|
|
1925
|
+
}), cr = (e) => ({
|
|
1858
1926
|
column: e,
|
|
1859
1927
|
op: "isNotNull"
|
|
1860
|
-
}),
|
|
1928
|
+
}), lr = (e, t) => ({
|
|
1861
1929
|
column: e,
|
|
1862
1930
|
op: "spatial",
|
|
1863
1931
|
value: t
|
|
1864
|
-
}),
|
|
1865
|
-
if (t.length === 0) throw
|
|
1932
|
+
}), ur = (...e) => ({ and: e }), dr = (...e) => ({ or: e }), fr = (e) => ({ not: e }), pr = (e, ...t) => {
|
|
1933
|
+
if (t.length === 0) throw E(`jsonField("${e}"): at least one path segment is required`);
|
|
1866
1934
|
let n = (n, r) => ({
|
|
1867
1935
|
column: e,
|
|
1868
1936
|
path: t,
|
|
@@ -1883,56 +1951,69 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1883
1951
|
isNull: () => n("isNull"),
|
|
1884
1952
|
isNotNull: () => n("isNotNull")
|
|
1885
1953
|
};
|
|
1886
|
-
},
|
|
1954
|
+
}, Z = (e) => "descriptor" in e ? e.descriptor : e, mr = (e, t) => ({
|
|
1887
1955
|
column: e,
|
|
1888
1956
|
op: "subquery-in",
|
|
1889
|
-
subquery:
|
|
1890
|
-
}),
|
|
1957
|
+
subquery: Z(t)
|
|
1958
|
+
}), hr = (e, t) => ({
|
|
1891
1959
|
column: e,
|
|
1892
1960
|
op: "subquery-not-in",
|
|
1893
|
-
subquery:
|
|
1894
|
-
}),
|
|
1961
|
+
subquery: Z(t)
|
|
1962
|
+
}), gr = (e) => ({
|
|
1895
1963
|
op: "exists",
|
|
1896
|
-
subquery:
|
|
1897
|
-
}),
|
|
1964
|
+
subquery: Z(e)
|
|
1965
|
+
}), _r = (e) => ({
|
|
1898
1966
|
op: "not-exists",
|
|
1899
|
-
subquery:
|
|
1900
|
-
}),
|
|
1967
|
+
subquery: Z(e)
|
|
1968
|
+
}), vr = /^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:?\d{2})?)?$/, yr = (e) => {
|
|
1901
1969
|
if (e instanceof Date) return e.getTime();
|
|
1902
|
-
if (typeof e == "string" &&
|
|
1970
|
+
if (typeof e == "string" && vr.test(e)) {
|
|
1903
1971
|
let t = Date.parse(e);
|
|
1904
1972
|
return Number.isNaN(t) ? void 0 : t;
|
|
1905
1973
|
}
|
|
1906
|
-
},
|
|
1974
|
+
}, br = (e, t) => {
|
|
1907
1975
|
if (!(e instanceof Date) && !(t instanceof Date)) return;
|
|
1908
|
-
let n =
|
|
1976
|
+
let n = yr(e), r = yr(t);
|
|
1909
1977
|
return n === void 0 || r === void 0 ? void 0 : [n, r];
|
|
1910
|
-
},
|
|
1978
|
+
}, xr = (e, t) => {
|
|
1911
1979
|
if (e === t) return !0;
|
|
1912
|
-
let n =
|
|
1980
|
+
let n = br(e, t);
|
|
1913
1981
|
return n !== void 0 && n[0] === n[1];
|
|
1914
|
-
},
|
|
1982
|
+
}, Sr = (e, t) => {
|
|
1915
1983
|
if (e == null || t == null) return null;
|
|
1916
|
-
let n =
|
|
1984
|
+
let n = br(e, t);
|
|
1917
1985
|
if (n !== void 0) return n[0] === n[1] ? 0 : n[0] > n[1] ? 1 : -1;
|
|
1918
1986
|
let r = e instanceof Date ? e.getTime() : e, i = t instanceof Date ? t.getTime() : t;
|
|
1919
1987
|
return typeof r == typeof i ? r === i ? 0 : r > i ? 1 : -1 : null;
|
|
1920
|
-
},
|
|
1988
|
+
}, Cr = (e, t, n = null, r = {}) => Q(e, t, n, r) === !0, Q = (e, t, n = null, r = {}) => {
|
|
1921
1989
|
if (!t) return !1;
|
|
1922
|
-
if ("not" in e)
|
|
1990
|
+
if ("not" in e) {
|
|
1991
|
+
let i = Q(e.not, t, n, r);
|
|
1992
|
+
return i === null ? null : !i;
|
|
1993
|
+
}
|
|
1923
1994
|
if ("and" in e) {
|
|
1924
|
-
|
|
1925
|
-
|
|
1995
|
+
let i = !1;
|
|
1996
|
+
for (let a of e.and) {
|
|
1997
|
+
let e = Q(a, t, n, r);
|
|
1998
|
+
if (e === !1) return !1;
|
|
1999
|
+
e === null && (i = !0);
|
|
2000
|
+
}
|
|
2001
|
+
return !i || null;
|
|
1926
2002
|
}
|
|
1927
2003
|
if ("or" in e) {
|
|
1928
|
-
|
|
1929
|
-
|
|
2004
|
+
let i = !1;
|
|
2005
|
+
for (let a of e.or) {
|
|
2006
|
+
let e = Q(a, t, n, r);
|
|
2007
|
+
if (e === !0) return !0;
|
|
2008
|
+
e === null && (i = !0);
|
|
2009
|
+
}
|
|
2010
|
+
return i ? null : !1;
|
|
1930
2011
|
}
|
|
1931
2012
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
1932
2013
|
if (!n) return !1;
|
|
1933
2014
|
let i = n.get(e.subquery);
|
|
1934
2015
|
if (!(i instanceof Set)) return !1;
|
|
1935
|
-
let a = t[e.column], o = r[e.column]?.type === "decimal" ? [...i].some((e) =>
|
|
2016
|
+
let a = t[e.column], o = r[e.column]?.type === "decimal" ? [...i].some((e) => X(a, e) === 0) : i.has(a);
|
|
1936
2017
|
return e.op === "subquery-in" ? o : !o;
|
|
1937
2018
|
}
|
|
1938
2019
|
if (e.op === "exists" || e.op === "not-exists") {
|
|
@@ -1940,42 +2021,46 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1940
2021
|
let t = n.get(e.subquery), r = typeof t == "number" ? t > 0 : t instanceof Set && t.size > 0;
|
|
1941
2022
|
return e.op === "exists" ? r : !r;
|
|
1942
2023
|
}
|
|
1943
|
-
let i = e, a = t[i.column], o =
|
|
2024
|
+
let i = e, a = t[i.column], o = U(i.value) ? i.value : void 0;
|
|
2025
|
+
if (o !== void 0 && (!_n.some((e) => e === i.op) || i.path !== void 0)) throw E("Column references require a scalar comparison without a JSON path");
|
|
2026
|
+
let s = o === void 0 ? i.value : t[o.column];
|
|
2027
|
+
if (o !== void 0 && (a == null || s == null)) return null;
|
|
2028
|
+
let c = r[i.column]?.type === "decimal", l = (e, t) => c && e != null && t != null ? X(e, t) === 0 : xr(e, t), u = c ? X : Sr;
|
|
1944
2029
|
switch (i.op) {
|
|
1945
|
-
case "eq": return
|
|
1946
|
-
case "neq": return !
|
|
1947
|
-
case "gt": return (
|
|
1948
|
-
case "gte": return (
|
|
1949
|
-
case "lt": return (
|
|
1950
|
-
case "lte": return (
|
|
1951
|
-
case "in": return Array.isArray(
|
|
1952
|
-
case "notIn": return Array.isArray(
|
|
1953
|
-
case "contains": return typeof a == "string" && typeof
|
|
1954
|
-
case "startsWith": return typeof a == "string" && typeof
|
|
2030
|
+
case "eq": return l(a, s);
|
|
2031
|
+
case "neq": return !l(a, s);
|
|
2032
|
+
case "gt": return (u(a, s) ?? -1) > 0;
|
|
2033
|
+
case "gte": return (u(a, s) ?? -1) >= 0;
|
|
2034
|
+
case "lt": return (u(a, s) ?? 1) < 0;
|
|
2035
|
+
case "lte": return (u(a, s) ?? 1) <= 0;
|
|
2036
|
+
case "in": return Array.isArray(s) && s.some((e) => l(a, e));
|
|
2037
|
+
case "notIn": return Array.isArray(s) && !s.some((e) => l(a, e));
|
|
2038
|
+
case "contains": return typeof a == "string" && typeof s == "string" && a.toLowerCase().includes(s.toLowerCase());
|
|
2039
|
+
case "startsWith": return typeof a == "string" && typeof s == "string" && a.startsWith(s);
|
|
1955
2040
|
case "arrayContains": {
|
|
1956
2041
|
let e = Array.isArray(a) ? a : [];
|
|
1957
|
-
return (Array.isArray(
|
|
2042
|
+
return (Array.isArray(s) ? s : []).every((t) => e.includes(t));
|
|
1958
2043
|
}
|
|
1959
2044
|
case "arrayOverlaps": {
|
|
1960
2045
|
let e = Array.isArray(a) ? a : [];
|
|
1961
|
-
return (Array.isArray(
|
|
2046
|
+
return (Array.isArray(s) ? s : []).some((t) => e.includes(t));
|
|
1962
2047
|
}
|
|
1963
|
-
case "arrayHas": return Array.isArray(a) && a.includes(
|
|
2048
|
+
case "arrayHas": return Array.isArray(a) && a.includes(s);
|
|
1964
2049
|
case "isNull": return a == null;
|
|
1965
2050
|
case "isNotNull": return a != null;
|
|
1966
|
-
case "spatial": throw
|
|
2051
|
+
case "spatial": throw E("@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.");
|
|
1967
2052
|
}
|
|
1968
|
-
},
|
|
2053
|
+
}, $ = function* (e) {
|
|
1969
2054
|
if ("not" in e) {
|
|
1970
|
-
yield*
|
|
2055
|
+
yield* $(e.not);
|
|
1971
2056
|
return;
|
|
1972
2057
|
}
|
|
1973
2058
|
if ("and" in e) {
|
|
1974
|
-
for (let t of e.and) yield*
|
|
2059
|
+
for (let t of e.and) yield* $(t);
|
|
1975
2060
|
return;
|
|
1976
2061
|
}
|
|
1977
2062
|
if ("or" in e) {
|
|
1978
|
-
for (let t of e.or) yield*
|
|
2063
|
+
for (let t of e.or) yield* $(t);
|
|
1979
2064
|
return;
|
|
1980
2065
|
}
|
|
1981
2066
|
e.op === "subquery-in" || e.op === "subquery-not-in" ? yield {
|
|
@@ -1985,30 +2070,30 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
1985
2070
|
kind: "exists",
|
|
1986
2071
|
descriptor: e.subquery
|
|
1987
2072
|
});
|
|
1988
|
-
},
|
|
2073
|
+
}, wr = function* (e, t = !0) {
|
|
1989
2074
|
if ("not" in e) {
|
|
1990
|
-
yield*
|
|
2075
|
+
yield* wr(e.not, !1);
|
|
1991
2076
|
return;
|
|
1992
2077
|
}
|
|
1993
2078
|
if ("and" in e) {
|
|
1994
|
-
for (let n of e.and) yield*
|
|
2079
|
+
for (let n of e.and) yield* wr(n, t);
|
|
1995
2080
|
return;
|
|
1996
2081
|
}
|
|
1997
2082
|
if ("or" in e) {
|
|
1998
|
-
for (let t of e.or) yield*
|
|
2083
|
+
for (let t of e.or) yield* wr(t, !1);
|
|
1999
2084
|
return;
|
|
2000
2085
|
}
|
|
2001
2086
|
e.op !== "subquery-in" && e.op !== "subquery-not-in" && e.op !== "exists" && e.op !== "not-exists" && (yield {
|
|
2002
2087
|
...e,
|
|
2003
|
-
conjunctive: t
|
|
2088
|
+
conjunctive: t && !U(e.value)
|
|
2004
2089
|
});
|
|
2005
|
-
},
|
|
2090
|
+
}, Tr = (e, t) => ({
|
|
2006
2091
|
name: e,
|
|
2007
2092
|
body: t
|
|
2008
|
-
}),
|
|
2093
|
+
}), Er = (e) => {
|
|
2009
2094
|
if (e.lifecycle === "cron" && !e.cron) throw Error(`seed "${e.id}": lifecycle 'cron' requires a 'cron' field`);
|
|
2010
2095
|
if (e.lifecycle === "onSchemaChange" && (!e.watchedTables || e.watchedTables.length === 0)) throw Error(`seed "${e.id}": lifecycle 'onSchemaChange' requires at least one entry in 'watchedTables'`);
|
|
2011
|
-
let t = e.steps({ step:
|
|
2096
|
+
let t = e.steps({ step: Tr });
|
|
2012
2097
|
if (t.length === 0) throw Error(`seed "${e.id}": at least one step is required`);
|
|
2013
2098
|
return {
|
|
2014
2099
|
__seed: !0,
|
|
@@ -2021,76 +2106,76 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
2021
2106
|
...e.fingerprint === void 0 ? {} : { fingerprint: e.fingerprint },
|
|
2022
2107
|
steps: t
|
|
2023
2108
|
};
|
|
2024
|
-
},
|
|
2025
|
-
|
|
2026
|
-
},
|
|
2027
|
-
|
|
2028
|
-
},
|
|
2029
|
-
let t =
|
|
2109
|
+
}, Dr = (e) => typeof e == "object" && !!e && "__seed" in e && e.__seed === !0, Or = null, kr = null, Ar = (e) => {
|
|
2110
|
+
Or = e;
|
|
2111
|
+
}, jr = (e) => {
|
|
2112
|
+
kr = e;
|
|
2113
|
+
}, Mr = async (e) => {
|
|
2114
|
+
let t = Or;
|
|
2030
2115
|
t !== null && await t(e);
|
|
2031
|
-
},
|
|
2032
|
-
let t =
|
|
2116
|
+
}, Nr = async (e) => {
|
|
2117
|
+
let t = kr;
|
|
2033
2118
|
t !== null && e.changedTables.length !== 0 && await t(e);
|
|
2034
|
-
},
|
|
2119
|
+
}, Pr = ["before-schema", "after-schema"], Fr = (e) => {
|
|
2035
2120
|
if (!e.id || e.id.length === 0) throw Error("migration: `id` is required + must be non-empty");
|
|
2036
2121
|
if (!e.up || !e.down) throw Error(`migration ${e.id}: both \`up\` and \`down\` must be functions`);
|
|
2037
|
-
if (!
|
|
2122
|
+
if (!Pr.includes(e.phase)) throw Error(`migration ${e.id}: \`phase\` is required and must be one of ${Pr.map((e) => `'${e}'`).join(" | ")} — 'before-schema' runs before the declarative apply (a shape change the planner must not compute against), 'after-schema' runs after it (a body that needs the new shape, such as a back-fill into a table this deploy creates)`);
|
|
2038
2123
|
return e;
|
|
2039
|
-
},
|
|
2124
|
+
}, Ir = Symbol.for("voltro.migration.irreversible"), Lr = class extends Error {
|
|
2040
2125
|
migrationId;
|
|
2041
2126
|
reason;
|
|
2042
2127
|
_tag = "IrreversibleMigrationError";
|
|
2043
2128
|
constructor(e, t) {
|
|
2044
2129
|
super(`migration ${e} cannot be rolled back: ${t}`), this.migrationId = e, this.reason = t, this.name = "IrreversibleMigrationError";
|
|
2045
2130
|
}
|
|
2046
|
-
},
|
|
2131
|
+
}, Rr = (e) => {
|
|
2047
2132
|
if (!e || e.trim().length === 0) throw Error("irreversible(): a reason is required");
|
|
2048
|
-
return Object.assign(() => t.fail(new
|
|
2049
|
-
},
|
|
2050
|
-
let t = e[
|
|
2133
|
+
return Object.assign(() => t.fail(new Lr("<unknown>", e)), { [Ir]: e });
|
|
2134
|
+
}, zr = (e) => {
|
|
2135
|
+
let t = e[Ir];
|
|
2051
2136
|
return typeof t == "string" ? t : void 0;
|
|
2052
|
-
},
|
|
2137
|
+
}, Br = class {
|
|
2053
2138
|
reason;
|
|
2054
2139
|
_tag = "MigrationSkipped";
|
|
2055
2140
|
constructor(e) {
|
|
2056
2141
|
this.reason = e;
|
|
2057
2142
|
}
|
|
2058
|
-
},
|
|
2143
|
+
}, Vr = class extends Error {
|
|
2059
2144
|
migrationId;
|
|
2060
2145
|
failed;
|
|
2061
2146
|
_tag = "MigrationExpectationFailed";
|
|
2062
2147
|
constructor(e, t) {
|
|
2063
2148
|
super(`migration ${e}: ${t.length} post-condition(s) did not hold after up():\n` + t.map((e) => ` - ${e}`).join("\n") + "\n The migration is NOT recorded; the next run applies it again."), this.migrationId = e, this.failed = t, this.name = "MigrationExpectationFailed";
|
|
2064
2149
|
}
|
|
2065
|
-
},
|
|
2150
|
+
}, Hr = class extends Error {
|
|
2066
2151
|
migrationId;
|
|
2067
2152
|
dialect;
|
|
2068
2153
|
_tag = "TransactionBrokenByBodyError";
|
|
2069
2154
|
constructor(e, t) {
|
|
2070
2155
|
super(`migration ${e} is transactional, and its body COMMITTED the transaction from inside — on ${t} a DDL statement commits everything before it. The work is in the database and the migration is recorded; it will not run again. What did not hold is the all-or-nothing guarantee. Either mark it \`transactional: false\` (per-statement, resumable through your own idempotency) or move the schema change into \`ctx.schema\` in a migration of its own and keep this one to data.`), this.migrationId = e, this.dialect = t, this.name = "TransactionBrokenByBodyError";
|
|
2071
2156
|
}
|
|
2072
|
-
},
|
|
2157
|
+
}, Ur = class extends Error {
|
|
2073
2158
|
migrationId;
|
|
2074
2159
|
operation;
|
|
2075
2160
|
_tag = "MigrationNeedsSqlClient";
|
|
2076
2161
|
constructor(e, t, n) {
|
|
2077
2162
|
super(`migration ${e}: ${t} — ${n}`), this.migrationId = e, this.operation = t, this.name = "MigrationNeedsSqlClient";
|
|
2078
2163
|
}
|
|
2079
|
-
},
|
|
2164
|
+
}, Wr = class extends Error {
|
|
2080
2165
|
table;
|
|
2081
2166
|
report;
|
|
2082
2167
|
_tag = "RewriteUnstableError";
|
|
2083
2168
|
constructor(e, t) {
|
|
2084
2169
|
super(`rewrite of ${e} did not stabilise after ${t.passes} pass(es): ${t.rewritten} rewritten, ${t.contended} contended on the last pass. Check for concurrent writes and guard values that cannot round-trip exactly before raising maxPasses.`), this.table = e, this.report = t, this.name = "RewriteUnstableError";
|
|
2085
2170
|
}
|
|
2086
|
-
},
|
|
2171
|
+
}, Gr = /^\d{8}_\d{6}_[a-z0-9_]+\.ts$/, Kr = (e) => typeof e == "object" && !!e && "id" in e && "up" in e && "down" in e && typeof e.id == "string" && typeof e.up == "function" && typeof e.down == "function", qr = /* @__PURE__ */ new Set(["voltro_isr_cache"]), Jr = (e) => qr.has(e) || e.startsWith("_voltro_") || e.startsWith("_cloud_") || e.startsWith("cluster_") || e.startsWith("__turso_internal_"), Yr = "_voltro_staging_", Xr = (e) => e.startsWith(Yr), Zr = /__dropped_\d{14}$/, Qr = (e) => Zr.test(e), $r = 7, ei = (e) => {
|
|
2087
2172
|
let t = /__dropped_(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/.exec(e);
|
|
2088
2173
|
if (t === null) return;
|
|
2089
2174
|
let [, n, r, i, a, o, s] = t;
|
|
2090
2175
|
return new Date(Date.UTC(Number(n), Number(r) - 1, Number(i), Number(a), Number(o), Number(s)));
|
|
2091
|
-
},
|
|
2176
|
+
}, ti = (e, t = {}) => {
|
|
2092
2177
|
let n = t.now ?? /* @__PURE__ */ new Date(), r = t.retentionDays ?? 7, i = [], a = (e, t) => {
|
|
2093
|
-
let a =
|
|
2178
|
+
let a = ei(e);
|
|
2094
2179
|
if (a === void 0) return;
|
|
2095
2180
|
let o = Math.floor((n.getTime() - a.getTime()) / 864e5);
|
|
2096
2181
|
o >= r && i.push({
|
|
@@ -2099,143 +2184,149 @@ var Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
|
|
|
2099
2184
|
ageDays: o
|
|
2100
2185
|
});
|
|
2101
2186
|
};
|
|
2102
|
-
for (let t of e.tables) if (a(t.name, t.name), !
|
|
2187
|
+
for (let t of e.tables) if (a(t.name, t.name), !Qr(t.name)) for (let e of t.columns ?? []) a(e.name, `${t.name}.${e.name}`);
|
|
2103
2188
|
return i;
|
|
2104
|
-
},
|
|
2189
|
+
}, ni = (e, t) => {
|
|
2105
2190
|
let n = e.reduce((e, t) => e.ageDays >= t.ageDays ? e : t), r = (/* @__PURE__ */ new Date(Date.now() - t * 864e5)).toISOString().slice(0, 10);
|
|
2106
2191
|
return `${e.length} soft-drop snapshot(s) older than ${t} day(s) still hold the dropped data (oldest: ${n.name}, ${n.ageDays}d) — ${e.map((e) => e.name).join(", ")}. Restore with \`voltro db restore-snapshot\` or reclaim with \`voltro db gc-snapshots --before ${r}\`; the window is \`database.softDropRetentionDays\` in app.config.`;
|
|
2107
|
-
},
|
|
2192
|
+
}, ri = (e, t) => e.filter((e) => !Jr(e.name) || t.has(e.name)), ii = F("_voltro_migrations", {
|
|
2108
2193
|
id: f({ prefix: "mig" }),
|
|
2109
2194
|
name: p(),
|
|
2110
2195
|
hash: p(),
|
|
2111
2196
|
status: p(),
|
|
2112
|
-
appliedAt:
|
|
2197
|
+
appliedAt: v().nullable(),
|
|
2113
2198
|
durationMs: m().nullable(),
|
|
2114
2199
|
errorMessage: p().nullable(),
|
|
2115
2200
|
errorStack: p().nullable(),
|
|
2116
2201
|
workflowRunId: p().nullable(),
|
|
2117
|
-
createdAt:
|
|
2118
|
-
updatedAt:
|
|
2119
|
-
}).index(["status"]),
|
|
2202
|
+
createdAt: v().default("now"),
|
|
2203
|
+
updatedAt: v().default("now").onUpdate("now")
|
|
2204
|
+
}).index(["status"]), ai = F("_voltro_seeds", {
|
|
2120
2205
|
id: f({ prefix: "seed" }),
|
|
2121
2206
|
name: p(),
|
|
2122
2207
|
lifecycle: p(),
|
|
2123
2208
|
fingerprint: p(),
|
|
2124
2209
|
cronSchedule: p().nullable(),
|
|
2125
|
-
watchedTables:
|
|
2126
|
-
nextRunAt:
|
|
2210
|
+
watchedTables: y().nullable(),
|
|
2211
|
+
nextRunAt: v().nullable(),
|
|
2127
2212
|
lastRunStatus: p().nullable(),
|
|
2128
|
-
lastRunAt:
|
|
2213
|
+
lastRunAt: v().nullable(),
|
|
2129
2214
|
lastRunDurationMs: m().nullable(),
|
|
2130
2215
|
lastRunRowsTouched: m().nullable(),
|
|
2131
2216
|
lastError: p().nullable(),
|
|
2132
2217
|
workflowRunId: p().nullable(),
|
|
2133
|
-
createdAt:
|
|
2134
|
-
updatedAt:
|
|
2135
|
-
}).index(["lifecycle"]).index(["nextRunAt"]),
|
|
2218
|
+
createdAt: v().default("now"),
|
|
2219
|
+
updatedAt: v().default("now").onUpdate("now")
|
|
2220
|
+
}).index(["lifecycle"]).index(["nextRunAt"]), oi = F("_voltro_schema_owner", {
|
|
2136
2221
|
id: f({ prefix: "own" }),
|
|
2137
2222
|
appName: p(),
|
|
2138
2223
|
projectName: p().nullable(),
|
|
2139
2224
|
frameworkVersion: p().nullable(),
|
|
2140
|
-
claimedAt:
|
|
2141
|
-
}),
|
|
2225
|
+
claimedAt: v().default("now")
|
|
2226
|
+
}), si = F("_voltro_plugin_migrations", {
|
|
2227
|
+
id: f({ prefix: "plm" }),
|
|
2228
|
+
plugin_name: p(),
|
|
2229
|
+
migration_id: p(),
|
|
2230
|
+
description: p().nullable(),
|
|
2231
|
+
applied_at: p()
|
|
2232
|
+
}), ci = F("_voltro_migration_plans", {
|
|
2142
2233
|
id: f({ prefix: "plan" }),
|
|
2143
2234
|
fingerprint: p(),
|
|
2144
2235
|
liveFingerprint: p().nullable(),
|
|
2145
|
-
operations:
|
|
2146
|
-
rollbackPlan:
|
|
2236
|
+
operations: y(),
|
|
2237
|
+
rollbackPlan: y().nullable(),
|
|
2147
2238
|
appliedBy: p(),
|
|
2148
2239
|
environment: p(),
|
|
2149
2240
|
source: p(),
|
|
2150
2241
|
onlineStrategy: p().nullable(),
|
|
2151
2242
|
durationMs: m(),
|
|
2152
2243
|
notes: p().nullable(),
|
|
2153
|
-
squashedAt:
|
|
2154
|
-
appliedAt:
|
|
2155
|
-
createdAt:
|
|
2156
|
-
updatedAt:
|
|
2157
|
-
}).index(["fingerprint"]).index(["environment"]),
|
|
2244
|
+
squashedAt: v().nullable(),
|
|
2245
|
+
appliedAt: v().default("now"),
|
|
2246
|
+
createdAt: v().default("now"),
|
|
2247
|
+
updatedAt: v().default("now").onUpdate("now")
|
|
2248
|
+
}).index(["fingerprint"]).index(["environment"]), li = F("_voltro_idempotency", {
|
|
2158
2249
|
id: f({ prefix: "idem" }),
|
|
2159
2250
|
scope: p(),
|
|
2160
2251
|
key: p(),
|
|
2161
2252
|
status: p(),
|
|
2162
|
-
response:
|
|
2163
|
-
createdAt:
|
|
2164
|
-
}).unique(["scope", "key"]).index(["createdAt"]),
|
|
2253
|
+
response: y().nullable(),
|
|
2254
|
+
createdAt: v().default("now")
|
|
2255
|
+
}).unique(["scope", "key"]).index(["createdAt"]), ui = F("_voltro_devices", {
|
|
2165
2256
|
id: f({ prefix: "device" }),
|
|
2166
2257
|
tenantId: p(),
|
|
2167
2258
|
name: p(),
|
|
2168
|
-
scopes:
|
|
2259
|
+
scopes: y().nullable(),
|
|
2169
2260
|
pairingHash: p().maxLength(64).nullable(),
|
|
2170
|
-
pairingExpiresAt:
|
|
2261
|
+
pairingExpiresAt: v().nullable(),
|
|
2171
2262
|
accessHash: p().maxLength(64).nullable(),
|
|
2172
|
-
accessExpiresAt:
|
|
2263
|
+
accessExpiresAt: v().nullable(),
|
|
2173
2264
|
refreshHash: p().maxLength(64).nullable(),
|
|
2174
|
-
refreshExpiresAt:
|
|
2265
|
+
refreshExpiresAt: v().nullable(),
|
|
2175
2266
|
previousRefreshHash: p().maxLength(64).nullable(),
|
|
2176
2267
|
generation: m().default(0),
|
|
2177
|
-
pairedAt:
|
|
2178
|
-
lastSeenAt:
|
|
2179
|
-
revokedAt:
|
|
2268
|
+
pairedAt: v().nullable(),
|
|
2269
|
+
lastSeenAt: v().nullable(),
|
|
2270
|
+
revokedAt: v().nullable(),
|
|
2180
2271
|
revokedReason: p().nullable(),
|
|
2181
2272
|
createdBy: p().nullable(),
|
|
2182
|
-
metadata:
|
|
2183
|
-
createdAt:
|
|
2184
|
-
}).index(["tenantId"]).index(["pairingHash"]).index(["accessHash"]).index(["refreshHash"]).index(["previousRefreshHash"]),
|
|
2273
|
+
metadata: y().nullable(),
|
|
2274
|
+
createdAt: v()
|
|
2275
|
+
}).index(["tenantId"]).index(["pairingHash"]).index(["accessHash"]).index(["refreshHash"]).index(["previousRefreshHash"]), di = F("_voltro_tenant_selections", {
|
|
2185
2276
|
id: f({ prefix: "tsel" }),
|
|
2186
2277
|
subjectType: p().maxLength(32),
|
|
2187
2278
|
subjectId: p(),
|
|
2188
2279
|
tenantId: p(),
|
|
2189
|
-
selectedAt:
|
|
2190
|
-
}).primaryKey(["id"]).nonReactive(),
|
|
2280
|
+
selectedAt: v()
|
|
2281
|
+
}).primaryKey(["id"]).nonReactive(), fi = F("_voltro_kv", {
|
|
2191
2282
|
id: f({ prefix: "kv" }),
|
|
2192
2283
|
key: p().unique(),
|
|
2193
2284
|
value: p().nullable(),
|
|
2194
|
-
expiresAt:
|
|
2195
|
-
createdAt:
|
|
2196
|
-
updatedAt:
|
|
2197
|
-
}).index(["expiresAt"]),
|
|
2285
|
+
expiresAt: v().nullable(),
|
|
2286
|
+
createdAt: v().default("now"),
|
|
2287
|
+
updatedAt: v().default("now").onUpdate("now")
|
|
2288
|
+
}).index(["expiresAt"]), pi = F("_voltro_api_keys", {
|
|
2198
2289
|
id: f({ prefix: "apikey" }),
|
|
2199
2290
|
tenantId: p().nullable(),
|
|
2200
2291
|
name: p(),
|
|
2201
2292
|
hashedKey: p().maxLength(64).unique(),
|
|
2202
2293
|
keyPrefix: p(),
|
|
2203
|
-
scopes:
|
|
2204
|
-
lastUsedAt:
|
|
2294
|
+
scopes: y().nullable(),
|
|
2295
|
+
lastUsedAt: v().nullable(),
|
|
2205
2296
|
requestCount: m().default(0),
|
|
2206
|
-
expiresAt:
|
|
2207
|
-
revokedAt:
|
|
2297
|
+
expiresAt: v().nullable(),
|
|
2298
|
+
revokedAt: v().nullable(),
|
|
2208
2299
|
createdBy: p().nullable(),
|
|
2209
2300
|
onBehalfOf: p().nullable(),
|
|
2210
|
-
metadata:
|
|
2211
|
-
createdAt:
|
|
2212
|
-
}).index("byApiKeyTenant", ["tenantId"]),
|
|
2301
|
+
metadata: y().nullable(),
|
|
2302
|
+
createdAt: v().default("now")
|
|
2303
|
+
}).index("byApiKeyTenant", ["tenantId"]), mi = F("_voltro_replica_observations", {
|
|
2213
2304
|
id: f({ prefix: "robs" }),
|
|
2214
2305
|
replicaId: p().maxLength(191),
|
|
2215
|
-
startedAt:
|
|
2306
|
+
startedAt: v(),
|
|
2216
2307
|
version: p().maxLength(64).nullable(),
|
|
2217
2308
|
kind: p().maxLength(64),
|
|
2218
2309
|
payload: p().nullable(),
|
|
2219
2310
|
reachableAt: p().maxLength(255).nullable(),
|
|
2220
|
-
writtenAt:
|
|
2221
|
-
}).unique(["replicaId", "kind"]).index(["kind"]),
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
],
|
|
2311
|
+
writtenAt: v().default("now").onUpdate("now")
|
|
2312
|
+
}).unique(["replicaId", "kind"]).index(["kind"]), hi = [
|
|
2313
|
+
ii,
|
|
2314
|
+
ai,
|
|
2315
|
+
ci
|
|
2316
|
+
], gi = "_voltro_replace_in_progress", _i = F(gi, {
|
|
2226
2317
|
id: f({ prefix: "repl" }),
|
|
2227
|
-
startedAt:
|
|
2318
|
+
startedAt: v().default("now"),
|
|
2228
2319
|
kind: p().default("replace"),
|
|
2229
2320
|
tables: p().nullable(),
|
|
2230
2321
|
capture: p().nullable(),
|
|
2231
2322
|
via: p(),
|
|
2232
2323
|
staging: p().nullable(),
|
|
2233
|
-
heartbeatAt:
|
|
2234
|
-
resumable:
|
|
2235
|
-
}),
|
|
2324
|
+
heartbeatAt: v().nullable(),
|
|
2325
|
+
resumable: _().nullable()
|
|
2326
|
+
}).nonReactive(), vi = 30, yi = (e, t) => {
|
|
2236
2327
|
let n = typeof t == "number" && Number.isFinite(t) && t > 0 ? t : 30, r = Number(e.VOLTRO_STAGING_STALE_MINUTES);
|
|
2237
2328
|
return (Number.isFinite(r) && r > 0 ? r : n) * 6e4;
|
|
2238
|
-
},
|
|
2329
|
+
}, bi = (e) => e == null || String(e).length === 0 ? [] : String(e).split(",").map((e) => e.trim()).filter((e) => e.length > 0), xi = (e) => {
|
|
2239
2330
|
let t = e.filter((e) => e.kind !== "staging");
|
|
2240
2331
|
if (t.length !== 0) return `refusing to start: a destructive data operation did not finish.
|
|
2241
2332
|
${t.map((e) => {
|
|
@@ -2250,7 +2341,7 @@ ${t.map((e) => {
|
|
|
2250
2341
|
|
|
2251
2342
|
When the data is back, or you have decided the current state is correct, clear the marker:
|
|
2252
2343
|
voltro data clear-replace-marker --yes`;
|
|
2253
|
-
},
|
|
2344
|
+
}, Si = (e, t, n) => {
|
|
2254
2345
|
let r = e.filter((e) => e.kind === "staging");
|
|
2255
2346
|
return {
|
|
2256
2347
|
all: r,
|
|
@@ -2260,7 +2351,7 @@ ${t.map((e) => {
|
|
|
2260
2351
|
return Number.isFinite(r) ? t - r >= n : !1;
|
|
2261
2352
|
})
|
|
2262
2353
|
};
|
|
2263
|
-
},
|
|
2354
|
+
}, Ci = (e, t) => {
|
|
2264
2355
|
if (e.all.length === 0) return;
|
|
2265
2356
|
let n = new Set(e.droppable.map((e) => e.id));
|
|
2266
2357
|
return `staged data-import leftovers:
|
|
@@ -2271,4 +2362,4 @@ ${e.all.map((e) => {
|
|
|
2271
2362
|
a reason to refuse the boot — it is a reason to know the disk is holding a copy of a bundle.`;
|
|
2272
2363
|
};
|
|
2273
2364
|
//#endregion
|
|
2274
|
-
export {
|
|
2365
|
+
export { ir as $, Ie as $n, tn as $t, ei as A, ht as An, ue as Ar, jn as At, zr as B, ot as Bn, p as Br, dn as Bt, Yr as C, Et as Cn, ne as Cr, X as Ct, Qr as D, St as Dn, fe as Dr, Y as Dt, Jr as E, Ct as En, de as Er, Kn as Et, Ur as F, ut as Fn, c as Fr, En as Ft, Mr as G, M as Gn, an as Gt, Fr as H, Be as Hn, ce as Hr, fn as Ht, Br as I, ft as In, h as Ir, W as It, Ar as J, Ge as Jn, It as Jt, Dr as K, N as Kn, rn as Kt, Wr as L, st as Ln, oe as Lr, vn as Lt, Lr as M, F as Mn, C as Mr, Sn as Mt, Pr as N, mt as Nn, ee as Nr, G as Nt, Xr as O, xt as On, f as Or, K as Ot, Vr as P, dt as Pn, pe as Pr, Dn as Pt, ar as Q, Ne as Qn, Pt as Qt, Hr as R, lt as Rn, ae as Rr, gn as Rt, qr as S, Mt as Sn, re as Sr, wr as St, ni as T, At as Tn, se as Tr, Nn as Tt, Er as U, Ve as Un, hn as Ut, Kr as V, rt as Vn, v as Vr, pn as Vt, Nr as W, He as Wn, nn as Wt, ur as X, De as Xn, zt as Xt, or as Y, E as Yn, Xt as Yt, rr as Z, T as Zn, Nt as Zt, oi as _, Vt as _n, b as _r, er as _t, Ci as a, Rt as an, Te as ar, Yn as at, hi as b, Dt as bn, s as br, lr as bt, yi as c, en as cn, _e as cr, mr as ct, li as d, Gt as dn, he as dr, pr as dt, Kt as en, Le as er, $ as et, fi as f, Zt as fn, u as fr, Zn as ft, mi as g, Bt as gn, _ as gr, _r as gt, si as h, Yt as hn, te as hr, fr as ht, xi as i, Jt as in, Fe as ir, gr as it, Gr as j, pt as jn, y as jr, Cn as jt, ri as k, I as kn, m as kr, An as kt, pi as l, $t as ln, ve as lr, cr as lt, ii as m, Ft as mn, le as mr, Jn as mt, vi as n, Ht as nn, we as nr, qn as nt, Si as o, Lt as on, ye as or, Xn as ot, ci as p, Wt as pn, S as pr, Qn as pt, jr as q, j as qn, on as qt, _i as r, qt as rn, Pe as rr, Cr as rt, bi as s, z as sn, be as sr, $n as st, gi as t, Ut as tn, Re as tr, tr as tt, ui as u, Qt as un, ge as ur, sr as ut, ai as v, kt as vn, ie as vr, hr as vt, ti as w, Ot as wn, g as wr, q as wt, $r as x, R as xn, x as xr, nr as xt, di as y, jt as yn, l as yr, dr as yt, Rr as z, ct as zn, o as zr, U as zt };
|