@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.
@@ -200,7 +200,7 @@ function f(e) {
200
200
  idSchemeInput: e
201
201
  });
202
202
  }
203
- var p = () => d("text"), m = () => d("integer"), ee = () => d("real"), h = (e, t = 0) => {
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
- }, te = h, ne = () => d("bigint"), re = (e, t) => {
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
- }, g = () => d("boolean"), _ = () => d("timestamp"), ie = () => d("date"), v = () => d("json"), y = () => d("bytes"), b = () => new u({
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
- }), ae = () => new u({
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
- }), x = () => {
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 oe(e) {
244
- return se(x, e);
243
+ function ae(e) {
244
+ return oe(S, e);
245
245
  }
246
- function se(e, t) {
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 ce = () => new u({
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
- }), le = (e, t) => {
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
- }, ue = (e) => new u({
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
- }), de = () => d("interval"), fe = (e, t = 4326) => new u({
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
- }), pe = (e, t = 4326) => new u({
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
- }), me = (e) => new u({
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
- }), S = (e) => {
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
- }, he = /* @__PURE__ */ new WeakMap(), ge = (e) => typeof e == "object" && e ? he.get(e) : void 0, _e = (e, t = {}) => {
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 he.set(n, {
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
- }, C = /* @__PURE__ */ new Map(), ve = (e, t) => {
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 = C.get(e) ?? [];
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), C.set(e, n);
329
- }, ye = (e) => C.get(e) ?? [], be = () => C, xe = () => {
330
- C.clear();
331
- }, Se = (t) => {
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
- }, w = (t, r = 0) => {
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(...w(e, r + 1));
340
+ for (let e of a.slice(0, 8)) o.push(...T(e, r + 1));
341
341
  return o;
342
- }, Ce = (e) => e.dbCode !== void 0 || e.dbErrno !== void 0 || e.dbNumber !== void 0 || e.dbSqlState !== void 0 || e.dbConstraint !== void 0, we = (e) => {
343
- let t = {}, n = [], r = Se(e);
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 = Se(e.cause);
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
- }, Te = (e) => {
354
- let t = w(e).map(we);
353
+ }, we = (e) => {
354
+ let t = T(e).map(Ce);
355
355
  if (t.length <= 1) return t[0] ?? {};
356
- let n = t.find(Ce) ?? t[0], r = t.filter((e) => e !== n).map((e) => e.dbCauseChain).filter((e) => typeof e == "string");
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
- }, Ee = (e, t) => {
364
- let n = Oe(e);
363
+ }, Te = (e, t) => {
364
+ let n = De(e);
365
365
  if (n !== void 0) return n;
366
- let r = Te(e), i = Pe(r, t);
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 = je(e);
372
- return a !== void 0 && ke.test(String(a)) ? `${o} (${String(a)})` : o;
373
- }, De = Symbol.for("@voltro/database/authoredMessage"), T = (e, t) => {
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, De, {
375
+ return Object.defineProperty(n, Ee, {
376
376
  value: !0,
377
377
  enumerable: !1
378
378
  }), n;
379
- }, Oe = (e) => {
380
- for (let t of w(e)) {
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[De] === !0) {
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
- }, ke = /^[A-Za-z0-9_]{1,32}$/, Ae = /^[A-Za-z_][A-Za-z0-9_]{0,63}$/, je = (e) => {
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 && Ae.test(r) ? r : "unknown";
393
- }, Me = /^[A-Za-z_][A-Za-z0-9_$]*$/, E = (e) => e !== void 0 && e.length <= 128 && Me.test(e) ? e : void 0, Ne = (e) => e === void 0 ? void 0 : e.split(".").pop() ?? e, D = (e, ...t) => {
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
- }, Pe = (e, t) => {
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 = E(e.dbConstraint);
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 = E(e.dbConstraint);
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 = E(e.dbColumn);
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 = E(e.dbConstraint);
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 = E(D(o, /CONSTRAINT `([^`]+)`/));
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 = E(Ne(D(o, /for key '([^']+)'/)));
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 = E(D(o, /Column '([^']+)' cannot be null/, /Field '([^']+)' doesn't have a default value/));
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 = E(D(o, /Check constraint '([^']+)'/, /CONSTRAINT `([^`]+)` failed/));
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 = D(o, /(?:FOREIGN KEY|REFERENCE) constraint "([^"]+)"/), t = D(o, /CHECK constraint "([^"]+)"/);
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 = E(t);
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 = E(e);
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 = E(D(o, /(?:UNIQUE KEY|PRIMARY KEY) constraint '([^']+)'/, /index '([^']+)'/));
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 = E(D(o, /Cannot insert the value NULL into column '([^']+)'/));
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 = E(Ne(D(o, /UNIQUE constraint failed: ([^,\s]+)/)));
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 = E(Ne(D(o, /NOT NULL constraint failed: ([^,\s]+)/)));
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 = E(D(a, /CHECK constraint failed: (.+)$/));
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
- }, Fe = (e) => {
508
- let t = Pe(e)?.kind;
507
+ }, Pe = (e) => {
508
+ let t = Ne(e)?.kind;
509
509
  return t === "foreignKey" || t === "foreignKeyInUse";
510
- }, Ie = (e) => {
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
- }, Le = (e) => {
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 = D(t, /for column [`']?(?:[^`'.]+[`']?\.[`']?)*([^`'.]+)[`']? at row/);
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
- }, Re = (e) => {
520
- let t = Te(e), n = [
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 = Le(t), l = c === void 0 ? "" : `\n hint: ${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
- }, ze = (e) => Object.entries(e).map(([e, t]) => `${e}:${Be(t)}`).join(" "), Be = (e) => {
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
- }, Ve = 63, He = 60, O = [], k = (e) => {
542
- O.includes(e) || O.push(e);
543
- }, Ue = () => {
544
- let e = O.slice();
545
- return O.length = 0, e;
546
- }, We = /^[a-zA-Z_][a-zA-Z0-9_]*$/, Ge = (e, t) => {
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 (!We.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
- }, A = (e) => {
550
- if (Ge("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 && k(`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
- }, j = (e, t) => {
553
- if (Ge("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 && k(`column '${t}' on table '${e}' is ${t.length} chars — close to the 63-byte limit.`);
555
- }, M = (e, t, n, r) => {
556
- if (Ge("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 && k(`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
- }, N = (e, t) => {
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 && k(`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).`);
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
- }), P, tt = () => (P === void 0 && (P = et()), P), nt = () => {
580
- P = et();
581
- }, rt = () => BigInt(Date.now()), it = (e) => {
582
- let t = rt();
583
- for (; t <= e;) t = rt();
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
- }, at = () => {
586
- let e = tt(), t = rt();
587
- t === e.lastMs ? (e.sequence = e.sequence + 1n & Xe, e.sequence === 0n && (t = it(e.lastMs), e.lastMs = t)) : (e.sequence = 0n, e.lastMs = 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
- }, ot = (e) => {
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 N(n, {
596
+ return Ge(n, {
597
597
  kind: "derived",
598
598
  tableName: e
599
599
  }), n;
600
- }, st = (e, t) => {
600
+ }, ct = (e, t) => {
601
601
  if (e === void 0) return {
602
602
  kind: "typeid",
603
- prefix: ot(t)
603
+ prefix: st(t)
604
604
  };
605
- if ("prefix" in e && !("scheme" in e)) return N(e.prefix, {
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 ?? ot(t);
616
- return e.prefix !== void 0 && N(e.prefix, {
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
- }, ct = (e, t) => {
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 at();
637
+ case "snowflake": return ot();
638
638
  case "custom": return e.generate(t);
639
639
  }
640
- }, lt = (e) => ({
641
- fields: S(e.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
- }), ut = lt, dt = (e) => {
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
- }, ft = (e, ...t) => {
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
- }, pt = (e = "cosine", t = "float32") => {
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
- }, mt = [
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
- ], ht = (e) => e.id ?? `<anonymous mixin: ${Object.keys(e.fields).join(", ")}>`, gt = (e, t) => `${e}_${t.join("_")}_idx`, _t = (e, t) => `${e}_${t.join("_")}_uq`, vt = (e, t, n, r, i) => {
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
- }, yt = (e, t) => {
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: st(i.idSchemeInput, t)
696
+ idScheme: ct(i.idSchemeInput, t)
697
697
  });
698
698
  return n ?? e;
699
- }, F = (e) => {
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 (M(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 F({
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 = dt(t), r = { ...e.fields }, i = /* @__PURE__ */ new Map();
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}': '${ht(o)}' and '${ht(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
- j(e.tableName, n), r[n] = a, i.set(n, t);
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 ?? gt(e.tableName, n.fields);
753
- a.some((e) => e.name === t) || (M(e.tableName, t, n.name === void 0, n.fields), vt(e.tableName, t, n.kind, n.fields, r), a.push({
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 F({
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 = gt(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.`);
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 (M(e.tableName, n, a, o), vt(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 F({
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 (M(e.tableName, t, !1, i), vt(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 F({
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 = _t(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 (M(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 F({
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 = gt(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 (M(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).`);
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 F({
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 (M(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 F({
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 F({
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 A(t), F({
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 F({
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: (() => F({
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) => F({
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) => F({
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
- }, I = (e, t) => {
984
- A(e);
983
+ }, F = (e, t) => {
984
+ j(e);
985
985
  let n = Object.entries(t).flatMap(([e, t]) => {
986
- let n = ge(t);
986
+ let n = he(t);
987
987
  return n === void 0 ? [] : [{
988
988
  column: e,
989
989
  ...n
990
990
  }];
991
- }), r = yt(S(t), e);
992
- for (let t of Object.keys(r)) j(e, t);
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 === x && (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 = F({
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
- }, bt = (e) => e === "sqlite" || e === "turso", xt = (e) => e === "mysql" || e === "mariadb", L = (e, t) => {
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
- }, St = 1e4, Ct = Symbol.for("@voltro/database/tableRegistry"), wt = globalThis, R = wt[Ct] ?? (wt[Ct] = /* @__PURE__ */ new Map()), Tt = (e) => {
1020
- let t = R.get(e.tableName);
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
- R.set(e.tableName, e);
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
- }, Et = (e) => {
1027
- R.get(e.tableName) === void 0 && R.set(e.tableName, e);
1028
- }, z = (e) => R.get(e), Dt = (e) => {
1029
- let t = R.get(e);
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
- }, Ot = () => [...R.values()], kt = (e) => R.delete(e), At = () => {
1033
- R.clear();
1034
- }, jt = (e) => R.get(e)?.isReactive !== !1, B = (e) => e.order ?? [], Mt = (e) => ({
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
- }), Nt = (e, t) => ({
1037
+ }), Pt = (e, t) => ({
1038
1038
  op: "count-distinct",
1039
1039
  column: e,
1040
1040
  alias: t ?? `count_distinct_${e}`
1041
- }), Pt = (e, t) => ({
1041
+ }), Ft = (e, t) => ({
1042
1042
  op: "sum",
1043
1043
  column: e,
1044
1044
  alias: t ?? `sum_${e}`
1045
- }), Ft = (e, t) => ({
1045
+ }), It = (e, t) => ({
1046
1046
  op: "avg",
1047
1047
  column: e,
1048
1048
  alias: t ?? `avg_${e}`
1049
- }), It = (e, t) => ({
1049
+ }), Lt = (e, t) => ({
1050
1050
  op: "min",
1051
1051
  column: e,
1052
1052
  alias: t ?? `min_${e}`
1053
- }), Lt = (e, t) => ({
1053
+ }), Rt = (e, t) => ({
1054
1054
  op: "max",
1055
1055
  column: e,
1056
1056
  alias: t ?? `max_${e}`
1057
- }), Rt = (e, t) => ({
1057
+ }), zt = (e, t) => ({
1058
1058
  op: "column",
1059
1059
  column: e,
1060
1060
  alias: t ?? e
1061
- }), V = (e) => (...t) => {
1061
+ }), B = (e) => (...t) => {
1062
1062
  if (t.length < 2) throw Error(`${e}: requires at least two queries`);
1063
- return U({
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
- }, zt = V("union"), Bt = V("union-all"), Vt = V("intersect"), Ht = V("except"), H = (e) => ({ over: (t) => ({
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
- }) }), Ut = (e = "rowNumber") => H({
1078
+ }) }), Wt = (e = "rowNumber") => V({
1079
1079
  op: "window-row-number",
1080
1080
  alias: e
1081
- }), Wt = (e = "rank") => H({
1081
+ }), Gt = (e = "rank") => V({
1082
1082
  op: "window-rank",
1083
1083
  alias: e
1084
- }), Gt = (e = "denseRank") => H({
1084
+ }), Kt = (e = "denseRank") => V({
1085
1085
  op: "window-dense-rank",
1086
1086
  alias: e
1087
- }), Kt = (e, t = 1, n) => H({
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
- }), qt = (e, t = 1, n) => H({
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
- }), Jt = (e, t) => H({
1097
+ }), Yt = (e, t) => V({
1098
1098
  op: "window-sum-over",
1099
1099
  column: e,
1100
1100
  alias: t ?? `sum_${e}_over`
1101
- }), Yt = (e, t) => H({
1101
+ }), Xt = (e, t) => V({
1102
1102
  op: "window-avg-over",
1103
1103
  column: e,
1104
1104
  alias: t ?? `avg_${e}_over`
1105
- }), Xt = (e, t, n) => {
1106
- let r = n?.find((e) => e.name === t) ?? z(e)?.appliedFullText?.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
- }, U = (e) => ({
1113
+ }, H = (e) => ({
1114
1114
  descriptor: e,
1115
1115
  where(t) {
1116
1116
  let n = e.predicate ? { and: [e.predicate, t] } : t;
1117
- return U({
1117
+ return H({
1118
1118
  ...e,
1119
1119
  predicate: n
1120
1120
  });
1121
1121
  },
1122
1122
  orderBy(t, n = "asc") {
1123
- return U({
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 U({
1132
+ return H({
1133
1133
  ...e,
1134
1134
  take: t
1135
1135
  });
1136
1136
  },
1137
1137
  offset(t) {
1138
- return U({
1138
+ return H({
1139
1139
  ...e,
1140
1140
  skip: t
1141
1141
  });
1142
1142
  },
1143
1143
  select(...t) {
1144
- return U({
1144
+ return H({
1145
1145
  ...e,
1146
1146
  projection: t
1147
1147
  });
1148
1148
  },
1149
1149
  using(t) {
1150
- return U({
1150
+ return H({
1151
1151
  ...e,
1152
1152
  usingIndex: t
1153
1153
  });
1154
1154
  },
1155
1155
  withDeleted() {
1156
- return U({
1156
+ return H({
1157
1157
  ...e,
1158
1158
  includeDeleted: !0
1159
1159
  });
1160
1160
  },
1161
1161
  forUpdate() {
1162
- return U({
1162
+ return H({
1163
1163
  ...e,
1164
1164
  lock: "update"
1165
1165
  });
1166
1166
  },
1167
1167
  unscoped() {
1168
- return U({
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 U({
1178
+ return H({
1179
1179
  ...e,
1180
1180
  eager: n
1181
1181
  });
1182
1182
  },
1183
1183
  count() {
1184
- return U({
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 U({
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 r = Xt(e.table, t, e.fullTextIndexes);
1206
- return U({
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: r.columns,
1212
- ...r.config === void 0 ? {} : { config: r.config },
1213
- ...r.weights === void 0 ? {} : { weights: r.weights }
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 U({
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 U({
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 U({
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 U({
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 U({ ...t(e) });
1274
+ return H({ ...t(e) });
1274
1275
  },
1275
1276
  distinct() {
1276
- return U({
1277
+ return H({
1277
1278
  ...e,
1278
1279
  distinct: !0
1279
1280
  });
1280
1281
  },
1281
1282
  distinctOn(t) {
1282
- return U({
1283
+ return H({
1283
1284
  ...e,
1284
1285
  distinctOn: [...t]
1285
1286
  });
1286
1287
  },
1287
1288
  as(t) {
1288
- return U({
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 U({
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 U({
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 U({
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 U({
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 U({
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 U({
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 U({
1363
+ return H({
1361
1364
  ...e,
1362
1365
  having: n
1363
1366
  });
1364
1367
  },
1365
1368
  exists() {
1366
- return U({
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 Zt(e) {
1378
- return U({
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 Qt = (e, t, n) => $t(e, "id", t, n), $t = (e, t, n, r, i = "asc") => {
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
- }, en = (e) => {
1407
+ }, tn = (e) => {
1405
1408
  let t = {};
1406
- for (let [n, r] of Object.entries(e)) Tt(r), t[n] = Zt(r);
1409
+ for (let [n, r] of Object.entries(e)) Et(r), t[n] = Qt(r);
1407
1410
  return t;
1408
- }, tn = (e) => e.isView === !0, nn = (e, t, n) => {
1409
- if (A(e), n.trim().length === 0) throw Error(`view('${e}', …): the SELECT body is empty — a view must define a query.`);
1410
- let r = S(t);
1411
- for (let t of Object.keys(r)) j(e, t);
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
- }, rn = (e) => Zt({
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
- }), an = (e, t, n = null) => {
1427
- let r = n === null ? L(e.tableName, t) : `${L(n, t)}.${L(e.tableName, t)}`, i = e.viewSelect.trim();
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
- }, on = (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, sn = (e) => {
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
- }, cn = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, ln = (e) => {
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
- }, un = (e, t, n) => {
1461
+ }, dn = (e, t, n) => {
1459
1462
  if (e == null) return e;
1460
1463
  switch (t) {
1461
- case "boolean": return n === "postgres" ? e : on(e);
1462
- case "vector": return n === "postgres" ? sn(e) : e;
1463
- case "json": return n === "postgres" || n === "mysql" || n === "mariadb" ? e : sn(e);
1464
- case "array": return n === "postgres" ? e : sn(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" ? ln(e) : e;
1469
+ case "date": return n === "sqlite" || n === "turso" ? un(e) : e;
1467
1470
  case "decimal":
1468
- case "bigint": return cn(e);
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] = un(t[e], r, n));
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
- }, pn = (e, t) => {
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
- }, mn = (e, t, n = ["json", "array"]) => {
1496
- let r = z(t);
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 = pn(e[t], r.type);
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
- }, hn = /^[A-Za-z_][A-Za-z0-9_]*$/, gn = (e) => "$" + e.map((e) => typeof e == "number" ? `[${e}]` : hn.test(e) ? `.${e}` : `."${e.replace(/"/g, "\\\"")}"`).join(""), _n = (e) => "{" + e.map((e) => {
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 = L(e, n), a = r.numeric ?? !1;
1524
+ let i = I(e, n), a = r.numeric ?? !1;
1509
1525
  if (n === "postgres") {
1510
- let e = `(${i} #>> '${_n(t)}'::text[])`;
1526
+ let e = `(${i} #>> '${xn(t)}'::text[])`;
1511
1527
  return a ? `${e}::numeric` : e;
1512
1528
  }
1513
- let o = gn(t);
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
- }, vn = class extends Error {
1546
+ }, Sn = class extends Error {
1531
1547
  _tag = "TenantNamespaceUnresolved";
1532
1548
  constructor(e) {
1533
1549
  super(e), this.name = "TenantNamespaceUnresolved";
1534
1550
  }
1535
- }, yn = class extends Error {
1551
+ }, Cn = class extends Error {
1536
1552
  _tag = "TenantNamespaceInvalid";
1537
1553
  constructor(e) {
1538
1554
  super(e), this.name = "TenantNamespaceInvalid";
1539
1555
  }
1540
- }, bn = 63, xn = "tenant_", Sn = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), Cn = (e) => {
1541
- if (e == null || e === "") throw new vn("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.");
1542
- let t = Sn(e);
1543
- if (t.replace(/_/g, "") === "") throw new yn(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
1544
- let n = `${xn}${t}`;
1545
- if (n.length > bn) throw new yn(`namespace '${n}' for tenant '${e}' exceeds the ${bn}-byte identifier limit. Use a shorter tenant id.`);
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}`, wn = /* @__PURE__ */ new Set(["timestamp", "date"]), Tn = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, En = (e, t) => {
1548
- if (e === void 0 || t == null || !wn.has(e) || t instanceof Date) return t;
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" && Tn.test(t)) {
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
- }, Dn = (e, t) => e === void 0 || !wn.has(e) ? t : t.map((t) => En(e, t)), On = (e, t) => {
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 = J(r.subquery, t, n);
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 = J(r.subquery, t, n);
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, a = t(i.column), o = i.path, s = o !== void 0 && o.length > 0, c = () => t.onDialectOrElse({
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 : z(r)?.fields?.[i.column]?.type, ee = (e) => En(m, e);
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(ee(i.value))}`;
1584
- case "neq": return t`${u} <> ${f(ee(i.value))}`;
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 T("@voltro/plugin-postgis: spatial predicates are postgres-only");
1681
+ throw E("@voltro/plugin-postgis: spatial predicates are postgres-only");
1644
1682
  },
1645
1683
  mssql: () => {
1646
- throw T("@voltro/plugin-postgis: spatial predicates are postgres-only");
1684
+ throw E("@voltro/plugin-postgis: spatial predicates are postgres-only");
1647
1685
  },
1648
1686
  sqlite: () => {
1649
- throw T("@voltro/plugin-postgis: spatial predicates are postgres-only");
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
- }, kn = (e, t) => {
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
- }, An = (e, t) => t.csv(e.map((e) => {
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 = kn(e.window ?? {}, t);
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 T(`compileAggregateProjection: unknown window op '${e.op}'`);
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 T(`compileAggregateProjection: 'column' projection requires a column name (alias '${e.alias}')`);
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 T(`compileAggregateProjection: unknown op '${e.op}'`);
1721
+ default: throw E(`compileAggregateProjection: unknown op '${e.op}'`);
1684
1722
  }
1685
- })), jn = (e) => `[${e.join(",")}]`, Mn = (e, t) => {
1723
+ })), In = (e) => `[${e.join(",")}]`, Ln = (e, t) => {
1686
1724
  if (e.queryVector === void 0) return null;
1687
- let n = t(e.column), r = jn(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
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
- }, Nn = (e, t) => {
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
- }, Pn = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, Fn = (e, t) => t`${t(`${e.indexName}_tsv`)}`, In = (e, t) => `${t}_${e.indexName}_fts`, Ln = (e, t, n) => {
1698
- let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${K(e.query)}%`;
1699
- return n.onDialectOrElse({
1700
- mysql: () => n`MATCH(${r}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
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(In(e, t));
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: () => n.or(e.columns.map((e) => n`LOWER(${n(e)}) LIKE LOWER(${i}) ESCAPE '\\'`)),
1706
- orElse: () => n`${Fn(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
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
- }, Rn = (e, t, n) => {
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(In(e, t));
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: () => 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}`),
1717
- orElse: () => n`ts_rank(${Fn(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
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
- }, J = (e, t, n = null) => {
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`(${J(e, t, n)})`).reduce((e, n, i) => i === 0 ? n : t`${e} ${t.unsafe(r)} ${n}`), a = [];
1722
- if (B(e).length > 0 && a.push(t` ORDER BY ${t.csv(B(e).map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), e.take !== void 0) {
1723
- if (!Number.isInteger(e.take) || e.take < 0) throw T(`compileSelect: invalid take ${e.take}`);
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 T(`compileSelect: invalid skip ${e.skip}`);
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 : Mn(e.annClause, t);
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 T("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
1787
+ throw E("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
1736
1788
  },
1737
1789
  mssql: () => {
1738
- throw T("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
1790
+ throw E("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
1739
1791
  },
1740
1792
  sqlite: () => {
1741
- throw T("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
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 : Nn(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? An(e.aggregations, t) : e.joinedProjection && e.joinedProjection.length > 0 ? t.csv(e.joinedProjection.map((e) => t`${t(e.source)} AS ${t(e.outputKey)}`)) : e.projection && e.projection.length > 0 ? t.csv(e.projection.map((e) => t`${t(e)}`)) : t`*`, o = (e.aggregations && e.aggregations.length > 0) === !0, s = r !== null && !o ? t`${a}, ${r} AS ${t("distance")}` : a, c = e.fullTextSearch, l = c?.rank !== void 0 && !o ? Rn(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({
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``, ee = p ? t.onDialectOrElse({
1811
+ }) : t``, h = p ? t.onDialectOrElse({
1754
1812
  mssql: () => t``,
1755
1813
  sqlite: () => t``,
1756
1814
  orElse: () => t` FOR UPDATE`
1757
- }) : t``, h = e.alias === void 0 ? t`${t(G(n, e.table))}${m}` : t`${t(G(n, e.table))} AS ${t(e.alias)}${m}`, te = (e.joins ?? []).map((e) => {
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
- }), ne = te.length > 0 ? te.reduce((e, n) => t`${e}${n}`, h) : h, re = c === void 0 ? null : Ln(c, e.table, t), g = [e.predicate ? q(e.predicate, t, n, e.table) : null, re].filter((e) => e !== null), _ = g.length > 0 ? t` WHERE ${t.and(g)}` : t``, ie = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, v = e.having ? t` HAVING ${q(e.having, t, n, e.table)}` : t``, y = e.skip !== void 0, b = [];
1761
- r !== null && b.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && b.push(e.spatialClause.order === "desc" ? t`${Pn(e.spatialClause, t)} DESC` : t`${Pn(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && b.push(t`${l} DESC`);
1762
- for (let n of B(e)) b.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
1763
- let ae = b.length > 0 ? t` ORDER BY ${t.csv(b)}` : y ? t.onDialectOrElse({
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``, x = (e) => {
1767
- if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw T(`compileSelect: expected non-negative integer take/skip, got ${e}`);
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
- }, oe = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${J(e.descriptor, t, n)})`), se = (e.ctes ?? []).some((e) => e.recursive === !0), ce = oe.length > 0 ? t`WITH ${t.unsafe(se ? "RECURSIVE " : "")}${t.csv(oe)} ` : t``;
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 && !y ? t`TOP ${x(e.take)} ` : t``, r = y ? t` OFFSET ${x(e.skip)} ROWS FETCH NEXT ${x(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
1773
- return t`${ce}SELECT ${n}${f}${d} FROM ${ne}${_}${ie}${v}${ae}${r}`;
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 ? t`` : t` LIMIT ${x(e.take)}`, r = y ? t` OFFSET ${x(e.skip)}` : t``;
1777
- return t`${ce}SELECT ${f}${d} FROM ${ne}${_}${ie}${v}${ae}${n}${r}${ee}`;
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
- }, Y = (e, t) => {
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
- }, zn = (e, t) => ({
1866
+ }, qn = (e, t) => ({
1799
1867
  column: e,
1800
1868
  op: "eq",
1801
1869
  value: t
1802
- }), Bn = (e, t) => ({
1870
+ }), Jn = (e, t) => ({
1803
1871
  column: e,
1804
1872
  op: "neq",
1805
1873
  value: t
1806
- }), Vn = (e, t) => ({
1874
+ }), Yn = (e, t) => ({
1807
1875
  column: e,
1808
1876
  op: "gt",
1809
1877
  value: t
1810
- }), Hn = (e, t) => ({
1878
+ }), Xn = (e, t) => ({
1811
1879
  column: e,
1812
1880
  op: "gte",
1813
1881
  value: t
1814
- }), Un = (e, t) => ({
1882
+ }), Zn = (e, t) => ({
1815
1883
  column: e,
1816
1884
  op: "lt",
1817
1885
  value: t
1818
- }), Wn = (e, t) => ({
1886
+ }), Qn = (e, t) => ({
1819
1887
  column: e,
1820
1888
  op: "lte",
1821
1889
  value: t
1822
- }), Gn = (e, t) => ({
1890
+ }), $n = (e, t) => ({
1823
1891
  column: e,
1824
1892
  op: "in",
1825
1893
  value: t
1826
- }), Kn = (e, t) => ({
1894
+ }), er = (e, t) => ({
1827
1895
  column: e,
1828
1896
  op: "notIn",
1829
1897
  value: t
1830
- }), qn = (e, t) => ({
1898
+ }), tr = (e, t) => ({
1831
1899
  column: e,
1832
1900
  op: "contains",
1833
1901
  value: t
1834
- }), Jn = (e, t) => ({
1902
+ }), nr = (e, t) => ({
1835
1903
  column: e,
1836
1904
  op: "startsWith",
1837
1905
  value: t
1838
- }), Yn = (e, t) => ({
1906
+ }), rr = (e, t) => ({
1839
1907
  column: e,
1840
1908
  op: "arrayContains",
1841
1909
  value: t
1842
- }), Xn = (e, t) => ({
1910
+ }), ir = (e, t) => ({
1843
1911
  column: e,
1844
1912
  op: "arrayOverlaps",
1845
1913
  value: t
1846
- }), Zn = (e, t) => ({
1914
+ }), ar = (e, t) => ({
1847
1915
  column: e,
1848
1916
  op: "arrayHas",
1849
1917
  value: t
1850
- }), Qn = {
1918
+ }), or = {
1851
1919
  column: "id",
1852
1920
  op: "in",
1853
1921
  value: []
1854
- }, $n = (e) => ({
1922
+ }, sr = (e) => ({
1855
1923
  column: e,
1856
1924
  op: "isNull"
1857
- }), er = (e) => ({
1925
+ }), cr = (e) => ({
1858
1926
  column: e,
1859
1927
  op: "isNotNull"
1860
- }), tr = (e, t) => ({
1928
+ }), lr = (e, t) => ({
1861
1929
  column: e,
1862
1930
  op: "spatial",
1863
1931
  value: t
1864
- }), nr = (...e) => ({ and: e }), rr = (...e) => ({ or: e }), ir = (e) => ({ not: e }), ar = (e, ...t) => {
1865
- if (t.length === 0) throw T(`jsonField("${e}"): at least one path segment is required`);
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
- }, X = (e) => "descriptor" in e ? e.descriptor : e, or = (e, t) => ({
1954
+ }, Z = (e) => "descriptor" in e ? e.descriptor : e, mr = (e, t) => ({
1887
1955
  column: e,
1888
1956
  op: "subquery-in",
1889
- subquery: X(t)
1890
- }), sr = (e, t) => ({
1957
+ subquery: Z(t)
1958
+ }), hr = (e, t) => ({
1891
1959
  column: e,
1892
1960
  op: "subquery-not-in",
1893
- subquery: X(t)
1894
- }), cr = (e) => ({
1961
+ subquery: Z(t)
1962
+ }), gr = (e) => ({
1895
1963
  op: "exists",
1896
- subquery: X(e)
1897
- }), lr = (e) => ({
1964
+ subquery: Z(e)
1965
+ }), _r = (e) => ({
1898
1966
  op: "not-exists",
1899
- subquery: X(e)
1900
- }), ur = /^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:?\d{2})?)?$/, dr = (e) => {
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" && ur.test(e)) {
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
- }, fr = (e, t) => {
1974
+ }, br = (e, t) => {
1907
1975
  if (!(e instanceof Date) && !(t instanceof Date)) return;
1908
- let n = dr(e), r = dr(t);
1976
+ let n = yr(e), r = yr(t);
1909
1977
  return n === void 0 || r === void 0 ? void 0 : [n, r];
1910
- }, pr = (e, t) => {
1978
+ }, xr = (e, t) => {
1911
1979
  if (e === t) return !0;
1912
- let n = fr(e, t);
1980
+ let n = br(e, t);
1913
1981
  return n !== void 0 && n[0] === n[1];
1914
- }, mr = (e, t) => {
1982
+ }, Sr = (e, t) => {
1915
1983
  if (e == null || t == null) return null;
1916
- let n = fr(e, t);
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
- }, Z = (e, t, n = null, r = {}) => {
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) return !Z(e.not, t, n, r);
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
- for (let i of e.and) if (!Z(i, t, n, r)) return !1;
1925
- return !0;
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
- for (let i of e.or) if (Z(i, t, n, r)) return !0;
1929
- return !1;
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) => Y(a, e) === 0) : i.has(a);
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 = r[i.column]?.type === "decimal", s = (e, t) => o && e != null && t != null ? Y(e, t) === 0 : pr(e, t), c = o ? Y : mr;
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 s(a, i.value);
1946
- case "neq": return !s(a, i.value);
1947
- case "gt": return (c(a, i.value) ?? -1) > 0;
1948
- case "gte": return (c(a, i.value) ?? -1) >= 0;
1949
- case "lt": return (c(a, i.value) ?? 1) < 0;
1950
- case "lte": return (c(a, i.value) ?? 1) <= 0;
1951
- case "in": return Array.isArray(i.value) && i.value.some((e) => s(a, e));
1952
- case "notIn": return Array.isArray(i.value) && !i.value.some((e) => s(a, e));
1953
- case "contains": return typeof a == "string" && typeof i.value == "string" && a.toLowerCase().includes(i.value.toLowerCase());
1954
- case "startsWith": return typeof a == "string" && typeof i.value == "string" && a.startsWith(i.value);
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(i.value) ? i.value : []).every((t) => e.includes(t));
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(i.value) ? i.value : []).some((t) => e.includes(t));
2046
+ return (Array.isArray(s) ? s : []).some((t) => e.includes(t));
1962
2047
  }
1963
- case "arrayHas": return Array.isArray(a) && a.includes(i.value);
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 T("@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.");
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
- }, Q = function* (e) {
2053
+ }, $ = function* (e) {
1969
2054
  if ("not" in e) {
1970
- yield* Q(e.not);
2055
+ yield* $(e.not);
1971
2056
  return;
1972
2057
  }
1973
2058
  if ("and" in e) {
1974
- for (let t of e.and) yield* Q(t);
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* Q(t);
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
- }, $ = function* (e, t = !0) {
2073
+ }, wr = function* (e, t = !0) {
1989
2074
  if ("not" in e) {
1990
- yield* $(e.not, !1);
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* $(n, t);
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* $(t, !1);
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
- }, hr = (e, t) => ({
2090
+ }, Tr = (e, t) => ({
2006
2091
  name: e,
2007
2092
  body: t
2008
- }), gr = (e) => {
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: hr });
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
- }, _r = (e) => typeof e == "object" && !!e && "__seed" in e && e.__seed === !0, vr = null, yr = null, br = (e) => {
2025
- vr = e;
2026
- }, xr = (e) => {
2027
- yr = e;
2028
- }, Sr = async (e) => {
2029
- let t = vr;
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
- }, Cr = async (e) => {
2032
- let t = yr;
2116
+ }, Nr = async (e) => {
2117
+ let t = kr;
2033
2118
  t !== null && e.changedTables.length !== 0 && await t(e);
2034
- }, wr = ["before-schema", "after-schema"], Tr = (e) => {
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 (!wr.includes(e.phase)) throw Error(`migration ${e.id}: \`phase\` is required and must be one of ${wr.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)`);
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
- }, Er = Symbol.for("voltro.migration.irreversible"), Dr = class extends Error {
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
- }, Or = (e) => {
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 Dr("<unknown>", e)), { [Er]: e });
2049
- }, kr = (e) => {
2050
- let t = e[Er];
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
- }, Ar = class {
2137
+ }, Br = class {
2053
2138
  reason;
2054
2139
  _tag = "MigrationSkipped";
2055
2140
  constructor(e) {
2056
2141
  this.reason = e;
2057
2142
  }
2058
- }, jr = class extends Error {
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
- }, Mr = class extends Error {
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
- }, Nr = class extends Error {
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
- }, Pr = class extends Error {
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
- }, Fr = /^\d{8}_\d{6}_[a-z0-9_]+\.ts$/, Ir = (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", Lr = /* @__PURE__ */ new Set(["voltro_isr_cache"]), Rr = (e) => Lr.has(e) || e.startsWith("_voltro_") || e.startsWith("_cloud_") || e.startsWith("cluster_") || e.startsWith("__turso_internal_"), zr = "_voltro_staging_", Br = (e) => e.startsWith(zr), Vr = /__dropped_\d{14}$/, Hr = (e) => Vr.test(e), Ur = 7, Wr = (e) => {
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
- }, Gr = (e, t = {}) => {
2176
+ }, ti = (e, t = {}) => {
2092
2177
  let n = t.now ?? /* @__PURE__ */ new Date(), r = t.retentionDays ?? 7, i = [], a = (e, t) => {
2093
- let a = Wr(e);
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), !Hr(t.name)) for (let e of t.columns ?? []) a(e.name, `${t.name}.${e.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
- }, Kr = (e, t) => {
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
- }, qr = (e, t) => e.filter((e) => !Rr(e.name) || t.has(e.name)), Jr = I("_voltro_migrations", {
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: _().nullable(),
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: _().default("now"),
2118
- updatedAt: _().default("now").onUpdate("now")
2119
- }).index(["status"]), Yr = I("_voltro_seeds", {
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: v().nullable(),
2126
- nextRunAt: _().nullable(),
2210
+ watchedTables: y().nullable(),
2211
+ nextRunAt: v().nullable(),
2127
2212
  lastRunStatus: p().nullable(),
2128
- lastRunAt: _().nullable(),
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: _().default("now"),
2134
- updatedAt: _().default("now").onUpdate("now")
2135
- }).index(["lifecycle"]).index(["nextRunAt"]), Xr = I("_voltro_schema_owner", {
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: _().default("now")
2141
- }), Zr = I("_voltro_migration_plans", {
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: v(),
2146
- rollbackPlan: v().nullable(),
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: _().nullable(),
2154
- appliedAt: _().default("now"),
2155
- createdAt: _().default("now"),
2156
- updatedAt: _().default("now").onUpdate("now")
2157
- }).index(["fingerprint"]).index(["environment"]), Qr = I("_voltro_idempotency", {
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: v().nullable(),
2163
- createdAt: _().default("now")
2164
- }).unique(["scope", "key"]).index(["createdAt"]), $r = I("_voltro_devices", {
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: v().nullable(),
2259
+ scopes: y().nullable(),
2169
2260
  pairingHash: p().maxLength(64).nullable(),
2170
- pairingExpiresAt: _().nullable(),
2261
+ pairingExpiresAt: v().nullable(),
2171
2262
  accessHash: p().maxLength(64).nullable(),
2172
- accessExpiresAt: _().nullable(),
2263
+ accessExpiresAt: v().nullable(),
2173
2264
  refreshHash: p().maxLength(64).nullable(),
2174
- refreshExpiresAt: _().nullable(),
2265
+ refreshExpiresAt: v().nullable(),
2175
2266
  previousRefreshHash: p().maxLength(64).nullable(),
2176
2267
  generation: m().default(0),
2177
- pairedAt: _().nullable(),
2178
- lastSeenAt: _().nullable(),
2179
- revokedAt: _().nullable(),
2268
+ pairedAt: v().nullable(),
2269
+ lastSeenAt: v().nullable(),
2270
+ revokedAt: v().nullable(),
2180
2271
  revokedReason: p().nullable(),
2181
2272
  createdBy: p().nullable(),
2182
- metadata: v().nullable(),
2183
- createdAt: _()
2184
- }).index(["tenantId"]).index(["pairingHash"]).index(["accessHash"]).index(["refreshHash"]).index(["previousRefreshHash"]), ei = I("_voltro_tenant_selections", {
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(), ti = I("_voltro_kv", {
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: _().nullable(),
2195
- createdAt: _().default("now"),
2196
- updatedAt: _().default("now").onUpdate("now")
2197
- }).index(["expiresAt"]), ni = I("_voltro_api_keys", {
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: v().nullable(),
2204
- lastUsedAt: _().nullable(),
2294
+ scopes: y().nullable(),
2295
+ lastUsedAt: v().nullable(),
2205
2296
  requestCount: m().default(0),
2206
- expiresAt: _().nullable(),
2207
- revokedAt: _().nullable(),
2297
+ expiresAt: v().nullable(),
2298
+ revokedAt: v().nullable(),
2208
2299
  createdBy: p().nullable(),
2209
2300
  onBehalfOf: p().nullable(),
2210
- metadata: v().nullable(),
2211
- createdAt: _().default("now")
2212
- }).index("byApiKeyTenant", ["tenantId"]), ri = I("_voltro_replica_observations", {
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: _().default("now").onUpdate("now")
2221
- }).unique(["replicaId", "kind"]).index(["kind"]), ii = [
2222
- Jr,
2223
- Yr,
2224
- Zr
2225
- ], ai = "_voltro_replace_in_progress", oi = I(ai, {
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: _().default("now"),
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: _().nullable(),
2234
- resumable: g().nullable()
2235
- }), si = 30, ci = (e, t) => {
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
- }, li = (e) => e == null || String(e).length === 0 ? [] : String(e).split(",").map((e) => e.trim()).filter((e) => e.length > 0), ui = (e) => {
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
- }, di = (e, t, n) => {
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
- }, fi = (e, t) => {
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 { Q as $, Ie as $n, qt as $t, Fr as A, lt as An, c as Ar, vn as At, Ir as B, j as Bn, rn as Bt, Gr as C, bt as Cn, f as Cr, q as Ct, Br as D, I as Dn, S as Dr, En as Dt, Hr as E, ft as En, v as Er, K as Et, Ar as F, at as Fn, p as Fr, un as Ft, _r as G, Oe as Gn, Rt as Gt, gr as H, A as Hn, an as Ht, Pr as I, nt as In, _ as Ir, fn as It, Qn as J, Le as Jn, en as Jt, xr as K, w as Kn, Mt as Kt, Mr as L, Ve as Ln, le as Lr, dn as Lt, wr as M, ot as Mn, se as Mr, Cn as Mt, jr as N, ct as Nn, oe as Nr, Sn as Nt, qr as O, pt as On, te as Or, Dn as Ot, Nr as P, st as Pn, o as Pr, W as Pt, Xn as Q, Fe as Qn, Kt as Qt, Or as R, He as Rn, mn as Rt, zr as S, xt as Sn, pe as Sr, Y as St, Rr as T, mt as Tn, de as Tr, J as Tt, Cr as U, N as Un, Ft as Ut, Tr as V, M as Vn, nn as Vt, Sr as W, T as Wn, Yt as Wt, Yn as X, ze as Xn, Ht as Xt, nr as Y, Re as Yn, Gt as Yt, Zn as Z, Te as Zn, Vt as Zt, Yr as _, jt as _n, ie as _r, sr as _t, fi as a, Zt as an, _e as ar, Hn as at, Ur as b, kt as bn, ce as br, Jn as bt, ci as c, Ut as cn, x as cr, er as ct, Qr as d, zt as dn, g as dr, Un as dt, Lt as en, Ee as er, qn as et, ti as f, Bt as fn, y as fr, Wn as ft, Xr as g, z as gn, b as gr, Kn as gt, ri as h, Et as hn, s as hr, lr as ht, ui as i, Qt as in, ye as ir, Vn as it, Dr as j, dt as jn, ee as jr, G as jt, Wr as k, ut as kn, me as kr, yn as kt, ni as l, Pt as ln, ue as lr, $n as lt, Jr as m, At as mn, l as mr, ir as mt, si as n, B as nn, xe as nr, Z as nt, di as o, Wt as on, ge as or, Gn as ot, Zr as p, Ot as pn, ae as pr, Bn as pt, br as q, Pe as qn, Nt as qt, oi as r, $t as rn, ve as rr, cr as rt, li as s, Xt as sn, u as sr, or as st, ai as t, It as tn, be as tr, zn as tt, $r as u, Jt as un, ne as ur, ar as ut, ei as v, Tt as vn, re as vr, rr as vt, Kr as w, L as wn, m as wr, On as wt, Lr as x, St as xn, fe as xr, $ as xt, ii as y, Dt as yn, h as yr, tr as yt, kr as z, Ue as zn, tn as zt };
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 };