@voltro/database 0.77.0 → 0.78.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"), h = () => d("real"), g = (e, t = 0) => {
203
+ var p = () => d("text"), m = () => d("integer"), h = () => d("real"), ee = (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"), h = () => d("real"), g = (e, t
211
211
  precision: e,
212
212
  scale: t
213
213
  });
214
- }, ee = g, te = () => d("bigint"), ne = (e, t) => {
214
+ }, te = ee, ne = () => d("bigint"), re = (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"), h = () => d("real"), g = (e, t
225
225
  enumValues: t
226
226
  })
227
227
  };
228
- }, _ = () => d("boolean"), v = () => d("timestamp"), re = () => d("date"), y = () => d("json"), b = () => d("bytes"), x = () => new u({
228
+ }, g = () => d("boolean"), _ = () => d("timestamp"), ie = () => d("date"), v = () => d("json"), y = () => d("bytes"), b = () => new u({
229
229
  type: "bytes",
230
230
  nullable: !0,
231
231
  unique: !1,
232
232
  hasDefault: !1,
233
233
  crdtManaged: !0
234
- }), ie = () => new u({
234
+ }), ae = () => new u({
235
235
  type: "bytes",
236
236
  nullable: !0,
237
237
  unique: !1,
238
238
  hasDefault: !1,
239
239
  crdtManaged: !0
240
- }), S = () => {
240
+ }), x = () => {
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 ae(e) {
244
- return oe(S, e);
243
+ function oe(e) {
244
+ return se(x, e);
245
245
  }
246
- function oe(e, t) {
246
+ function se(e, t) {
247
247
  return new u({
248
248
  type: "reference",
249
249
  nullable: !1,
@@ -259,13 +259,13 @@ function oe(e, t) {
259
259
  ...t?.orphanPolicy ? { orphanPolicy: t.orphanPolicy } : {}
260
260
  });
261
261
  }
262
- var se = () => new u({
262
+ var ce = () => new u({
263
263
  type: "text",
264
264
  nullable: !0,
265
265
  unique: !1,
266
266
  hasDefault: !1,
267
267
  dropped: !0
268
- }), ce = (e, t) => {
268
+ }), le = (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 se = () => new u({
275
275
  vectorDim: e,
276
276
  vectorPrecision: t?.precision ?? "float32"
277
277
  });
278
- }, le = (e) => new u({
278
+ }, ue = (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
- }), ue = () => d("interval"), de = (e, t = 4326) => new u({
284
+ }), de = () => d("interval"), fe = (e, t = 4326) => new u({
285
285
  type: "text",
286
286
  nullable: !1,
287
287
  unique: !1,
@@ -291,7 +291,7 @@ var se = () => new u({
291
291
  geomKind: e,
292
292
  srid: t
293
293
  }
294
- }), fe = (e, t = 4326) => new u({
294
+ }), pe = (e, t = 4326) => new u({
295
295
  type: "text",
296
296
  nullable: !1,
297
297
  unique: !1,
@@ -301,182 +301,182 @@ var se = () => new u({
301
301
  geomKind: e,
302
302
  srid: t
303
303
  }
304
- }), pe = (e) => new u({
304
+ }), me = (e) => new u({
305
305
  type: "raw",
306
306
  nullable: !1,
307
307
  unique: !1,
308
308
  hasDefault: !1,
309
309
  rawDdl: e
310
- }), C = (e) => {
310
+ }), S = (e) => {
311
311
  let t = {};
312
312
  for (let [n, r] of Object.entries(e)) t[n] = r.__definition();
313
313
  return t;
314
- }, me = /* @__PURE__ */ new WeakMap(), he = (e) => typeof e == "object" && e ? me.get(e) : void 0, ge = (e, t = {}) => {
314
+ }, he = /* @__PURE__ */ new WeakMap(), ge = (e) => typeof e == "object" && e ? he.get(e) : void 0, _e = (e, t = {}) => {
315
315
  let n = p();
316
- return me.set(n, {
316
+ return he.set(n, {
317
317
  target: e,
318
318
  orphanPolicy: t.orphanPolicy ?? "keep",
319
319
  onSoftDelete: t.onSoftDelete ?? !1
320
320
  }), n;
321
- }, w = /* @__PURE__ */ new Map(), _e = (e, t) => {
321
+ }, C = /* @__PURE__ */ new Map(), ve = (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 = w.get(e) ?? [];
323
+ let n = C.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), w.set(e, n);
329
- }, ve = (e) => w.get(e) ?? [], ye = () => w, be = () => {
330
- w.clear();
331
- }, xe = (t) => {
328
+ n.push(t), C.set(e, n);
329
+ }, ye = (e) => C.get(e) ?? [], be = () => C, xe = () => {
330
+ C.clear();
331
+ }, Se = (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
- }, T = (t, r = 0) => {
335
+ }, w = (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(...T(e, r + 1));
340
+ for (let e of a.slice(0, 8)) o.push(...w(e, r + 1));
341
341
  return o;
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);
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);
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 = xe(e.cause);
350
+ (o || s) && n.push(`${o || "Error"}${s ? `: ${s.slice(0, 200)}` : ""}`), r = Se(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
- }, we = (e) => {
354
- let t = T(e).map(Ce);
353
+ }, Te = (e) => {
354
+ let t = w(e).map(we);
355
355
  if (t.length <= 1) return t[0] ?? {};
356
- let n = t.find(Se) ?? t[0], r = t.filter((e) => e !== n).map((e) => e.dbCauseChain).filter((e) => typeof e == "string");
356
+ let n = t.find(Ce) ?? 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
- }, Te = (e, t) => {
364
- let n = De(e);
363
+ }, Ee = (e, t) => {
364
+ let n = Oe(e);
365
365
  if (n !== void 0) return n;
366
- let r = we(e), i = Ne(r, t);
366
+ let r = Te(e), i = Pe(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 = 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) => {
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) => {
374
374
  let n = t === void 0 ? Error(e) : Error(e, t);
375
- return Object.defineProperty(n, Ee, {
375
+ return Object.defineProperty(n, De, {
376
376
  value: !0,
377
377
  enumerable: !1
378
378
  }), n;
379
- }, De = (e) => {
380
- for (let t of T(e)) {
379
+ }, Oe = (e) => {
380
+ for (let t of w(e)) {
381
381
  let e = t;
382
382
  for (let t = 0; typeof e == "object" && e && t < 8; t += 1) {
383
- if (e[Ee] === !0) {
383
+ if (e[De] === !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
- }, Oe = /^[A-Za-z0-9_]{1,32}$/, ke = /^[A-Za-z_][A-Za-z0-9_]{0,63}$/, Ae = (e) => {
390
+ }, ke = /^[A-Za-z0-9_]{1,32}$/, Ae = /^[A-Za-z_][A-Za-z0-9_]{0,63}$/, je = (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 && 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) => {
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) => {
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
- }, Ne = (e, t) => {
398
+ }, Pe = (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 = D(e.dbConstraint);
401
+ let t = E(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 = D(e.dbConstraint);
408
+ let t = E(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 = D(e.dbColumn);
415
+ let t = E(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 = D(e.dbConstraint);
422
+ let t = E(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 = D(O(o, /CONSTRAINT `([^`]+)`/));
429
+ let e = E(D(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 = D(Me(O(o, /for key '([^']+)'/)));
436
+ let e = E(Ne(D(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 = D(O(o, /Column '([^']+)' cannot be null/, /Field '([^']+)' doesn't have a default value/));
443
+ let e = E(D(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 = D(O(o, /Check constraint '([^']+)'/, /CONSTRAINT `([^`]+)` failed/));
450
+ let e = E(D(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 = O(o, /(?:FOREIGN KEY|REFERENCE) constraint "([^"]+)"/), t = O(o, /CHECK constraint "([^"]+)"/);
457
+ let e = D(o, /(?:FOREIGN KEY|REFERENCE) constraint "([^"]+)"/), t = D(o, /CHECK constraint "([^"]+)"/);
458
458
  if (t !== void 0 && e === void 0) {
459
- let e = D(t);
459
+ let e = E(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 = D(e);
465
+ let n = /REFERENCE constraint/.test(o), r = E(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 = D(O(o, /(?:UNIQUE KEY|PRIMARY KEY) constraint '([^']+)'/, /index '([^']+)'/));
472
+ let e = E(D(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 = D(O(o, /Cannot insert the value NULL into column '([^']+)'/));
479
+ let e = E(D(o, /Cannot insert the value NULL into column '([^']+)'/));
480
480
  return {
481
481
  kind: "notNull",
482
482
  ...e === void 0 ? {} : { column: e }
@@ -484,34 +484,34 @@ var se = () => 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 = D(Me(O(o, /UNIQUE constraint failed: ([^,\s]+)/)));
487
+ let e = E(Ne(D(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 = D(Me(O(o, /NOT NULL constraint failed: ([^,\s]+)/)));
494
+ let e = E(Ne(D(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 = D(O(a, /CHECK constraint failed: (.+)$/));
501
+ let e = E(D(a, /CHECK constraint failed: (.+)$/));
502
502
  return {
503
503
  kind: "check",
504
504
  ...e === void 0 ? {} : { constraint: e }
505
505
  };
506
506
  }
507
- }, Pe = (e) => {
508
- let t = Ne(e)?.kind;
509
- return t === "foreignKey" || t === "foreignKeyInUse";
510
507
  }, Fe = (e) => {
508
+ let t = Pe(e)?.kind;
509
+ return t === "foreignKey" || t === "foreignKeyInUse";
510
+ }, Ie = (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
- }, Ie = (e) => {
514
- let t = we(e), n = [
513
+ }, Le = (e) => {
514
+ let t = Te(e), n = [
515
515
  t.dbCode === void 0 ? void 0 : `code=${String(t.dbCode)}`,
516
516
  t.dbErrno === void 0 ? void 0 : `errno=${String(t.dbErrno)}`,
517
517
  t.dbNumber === void 0 ? void 0 : `number=${String(t.dbNumber)}`,
@@ -520,7 +520,7 @@ var se = () => new u({
520
520
  t.dbPlaceholders === void 0 ? void 0 : `placeholders=${String(t.dbPlaceholders)}`
521
521
  ].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)}…`}` : "";
522
522
  if (a !== void 0 || n.length !== 0) return [a, n.length > 0 ? `[${n.join(" ")}]` : void 0].filter((e) => e !== void 0 && e !== "").join(" ") + s + o;
523
- }, Le = (e) => Object.entries(e).map(([e, t]) => `${e}:${Re(t)}`).join(" "), Re = (e) => {
523
+ }, Re = (e) => Object.entries(e).map(([e, t]) => `${e}:${ze(t)}`).join(" "), ze = (e) => {
524
524
  if (e === null) return "null";
525
525
  if (e === void 0) return "undefined";
526
526
  if (typeof e == "bigint") return "bigint";
@@ -530,24 +530,24 @@ var se = () => new u({
530
530
  if (globalThis.Buffer !== void 0 && globalThis.Buffer.isBuffer(e)) return "Buffer";
531
531
  let t = e.constructor?.name;
532
532
  return typeof t == "string" && t !== "" ? t : "Object";
533
- }, ze = 63, Be = 60, k = [], A = (e) => {
534
- k.includes(e) || k.push(e);
535
- }, Ve = () => {
536
- let e = k.slice();
537
- return k.length = 0, e;
538
- }, He = /^[a-zA-Z_][a-zA-Z0-9_]*$/, Ue = (e, t) => {
533
+ }, Be = 63, Ve = 60, O = [], k = (e) => {
534
+ O.includes(e) || O.push(e);
535
+ }, He = () => {
536
+ let e = O.slice();
537
+ return O.length = 0, e;
538
+ }, Ue = /^[a-zA-Z_][a-zA-Z0-9_]*$/, We = (e, t) => {
539
539
  if (t.length === 0) throw Error(`${e} cannot be empty.`);
540
- if (!He.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_]*$/.`);
541
- }, j = (e) => {
542
- if (Ue("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.`);
543
- 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.`);
544
- }, M = (e, t) => {
545
- if (Ue("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.`);
546
- t.length > 60 && A(`column '${t}' on table '${e}' is ${t.length} chars — close to the 63-byte limit.`);
547
- }, N = (e, t, n, r) => {
548
- if (Ue("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.`);
549
- 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.` : ""}`);
550
- }, P = (e, t) => {
540
+ 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_]*$/.`);
541
+ }, A = (e) => {
542
+ 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.`);
543
+ 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.`);
544
+ }, j = (e, t) => {
545
+ 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.`);
546
+ t.length > 60 && k(`column '${t}' on table '${e}' is ${t.length} chars — close to the 63-byte limit.`);
547
+ }, M = (e, t, n, r) => {
548
+ 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.`);
549
+ 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.` : ""}`);
550
+ }, N = (e, t) => {
551
551
  if (e.length === 0) throw Error(`typeid prefix on table '${t.tableName}' cannot be empty.`);
552
552
  if (!/^[a-z][a-z0-9_]*$/.test(e)) {
553
553
  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_]*$/.";
@@ -557,44 +557,44 @@ var se = () => new u({
557
557
  let n = t.kind === "derived" ? "shorten the table name, or supply an explicit short prefix via id({ prefix: '...' })." : "pick a shorter prefix.";
558
558
  throw Error(`typeid prefix '${e}' on table '${t.tableName}' is ${e.length} chars — exceeds the 63-byte limit; ${n}`);
559
559
  }
560
- 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).`);
561
- }, We = 1704067200000n, Ge = 10n, Ke = 12n, qe = (1n << Ge) - 1n, Je = (1n << Ke) - 1n, Ye = Ke, Xe = 22n, Ze = () => {
560
+ 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).`);
561
+ }, Ge = 1704067200000n, Ke = 10n, qe = 12n, Je = (1n << Ke) - 1n, Ye = (1n << qe) - 1n, Xe = qe, Ze = 22n, Qe = () => {
562
562
  let e = process.env.SNOWFLAKE_MACHINE_ID;
563
563
  if (e === void 0 || e === "") return 0n;
564
564
  let t = BigInt(e);
565
- if (t < 0n || t > qe) throw Error(`SNOWFLAKE_MACHINE_ID out of range: ${e}. Must be 0..${qe}.`);
565
+ if (t < 0n || t > Je) throw Error(`SNOWFLAKE_MACHINE_ID out of range: ${e}. Must be 0..${Je}.`);
566
566
  return t;
567
- }, Qe = () => ({
567
+ }, $e = () => ({
568
568
  lastMs: 0n,
569
569
  sequence: 0n,
570
- machineId: Ze()
571
- }), F, $e = () => (F === void 0 && (F = Qe()), F), et = () => {
572
- F = Qe();
573
- }, tt = () => BigInt(Date.now()), nt = (e) => {
574
- let t = tt();
575
- for (; t <= e;) t = tt();
570
+ machineId: Qe()
571
+ }), P, et = () => (P === void 0 && (P = $e()), P), tt = () => {
572
+ P = $e();
573
+ }, nt = () => BigInt(Date.now()), rt = (e) => {
574
+ let t = nt();
575
+ for (; t <= e;) t = nt();
576
576
  return t;
577
- }, rt = () => {
578
- let e = $e(), t = tt();
579
- t === e.lastMs ? (e.sequence = e.sequence + 1n & Je, e.sequence === 0n && (t = nt(e.lastMs), e.lastMs = t)) : (e.sequence = 0n, e.lastMs = t);
580
- let n = t - We;
577
+ }, it = () => {
578
+ let e = et(), t = nt();
579
+ t === e.lastMs ? (e.sequence = e.sequence + 1n & Ye, e.sequence === 0n && (t = rt(e.lastMs), e.lastMs = t)) : (e.sequence = 0n, e.lastMs = t);
580
+ let n = t - Ge;
581
581
  if (n < 0n) throw Error("Snowflake timestamp before configured epoch (2024-01-01). System clock is wrong.");
582
- return (n << Xe | e.machineId << Ye | e.sequence).toString();
583
- }, it = (e) => {
582
+ return (n << Ze | e.machineId << Xe | e.sequence).toString();
583
+ }, at = (e) => {
584
584
  let t = e.toLowerCase();
585
585
  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.`);
586
586
  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: '...' }).`);
587
587
  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;
588
- return P(n, {
588
+ return N(n, {
589
589
  kind: "derived",
590
590
  tableName: e
591
591
  }), n;
592
- }, at = (e, t) => {
592
+ }, ot = (e, t) => {
593
593
  if (e === void 0) return {
594
594
  kind: "typeid",
595
- prefix: it(t)
595
+ prefix: at(t)
596
596
  };
597
- if ("prefix" in e && !("scheme" in e)) return P(e.prefix, {
597
+ if ("prefix" in e && !("scheme" in e)) return N(e.prefix, {
598
598
  kind: "explicit",
599
599
  tableName: t
600
600
  }), {
@@ -604,8 +604,8 @@ var se = () => new u({
604
604
  if (!("scheme" in e)) throw Error("invalid id() options: no scheme or prefix");
605
605
  switch (e.scheme) {
606
606
  case "typeid": {
607
- let n = e.prefix ?? it(t);
608
- return e.prefix !== void 0 && P(e.prefix, {
607
+ let n = e.prefix ?? at(t);
608
+ return e.prefix !== void 0 && N(e.prefix, {
609
609
  kind: "explicit",
610
610
  tableName: t
611
611
  }), {
@@ -621,22 +621,22 @@ var se = () => new u({
621
621
  generate: e.generate
622
622
  };
623
623
  }
624
- }, ot = (e, t) => {
624
+ }, st = (e, t) => {
625
625
  switch (e.kind) {
626
626
  case "typeid": return i(e.prefix).toString();
627
627
  case "ulid": return a();
628
628
  case "numeric": return null;
629
- case "snowflake": return rt();
629
+ case "snowflake": return it();
630
630
  case "custom": return e.generate(t);
631
631
  }
632
- }, st = (e) => ({
633
- fields: C(e.fields),
632
+ }, ct = (e) => ({
633
+ fields: S(e.fields),
634
634
  ...e.id === void 0 ? {} : { id: e.id },
635
635
  ...e.requires === void 0 ? {} : { requires: e.requires },
636
636
  ...e.indexes === void 0 ? {} : { indexes: e.indexes },
637
637
  ...e.behaviors === void 0 ? {} : { behaviors: e.behaviors },
638
638
  ...e.policies === void 0 ? {} : { policies: e.policies }
639
- }), ct = st, lt = (e) => {
639
+ }), lt = ct, ut = (e) => {
640
640
  let t = /* @__PURE__ */ new Set(), n = [], r = (e) => {
641
641
  let i = e.id ?? e;
642
642
  if (!t.has(i)) {
@@ -646,7 +646,7 @@ var se = () => new u({
646
646
  };
647
647
  for (let t of e) r(t);
648
648
  return n;
649
- }, ut = (e, ...t) => {
649
+ }, dt = (e, ...t) => {
650
650
  if (t.length === 0) throw Error(`jsonIndex("${e}"): at least one path segment is required`);
651
651
  let n = (r) => ({
652
652
  jsonPath: {
@@ -657,14 +657,14 @@ var se = () => new u({
657
657
  numeric: () => n(!0)
658
658
  });
659
659
  return n(!1);
660
- }, dt = (e = "cosine", t = "float32") => {
660
+ }, ft = (e = "cosine", t = "float32") => {
661
661
  let n = t === "half" ? "halfvec" : "vector";
662
662
  switch (e) {
663
663
  case "cosine": return `${n}_cosine_ops`;
664
664
  case "l2": return `${n}_l2_ops`;
665
665
  case "inner": return `${n}_ip_ops`;
666
666
  }
667
- }, ft = [
667
+ }, pt = [
668
668
  "id",
669
669
  "tenantId",
670
670
  "createdAt",
@@ -673,7 +673,7 @@ var se = () => new u({
673
673
  "updatedBy",
674
674
  "deletedAt",
675
675
  "deletedBy"
676
- ], pt = (e) => e.id ?? `<anonymous mixin: ${Object.keys(e.fields).join(", ")}>`, mt = (e, t) => `${e}_${t.join("_")}_idx`, ht = (e, t) => `${e}_${t.join("_")}_uq`, gt = (e, t, n, r, i) => {
676
+ ], mt = (e) => e.id ?? `<anonymous mixin: ${Object.keys(e.fields).join(", ")}>`, ht = (e, t) => `${e}_${t.join("_")}_idx`, gt = (e, t) => `${e}_${t.join("_")}_uq`, _t = (e, t, n, r, i) => {
677
677
  if (n !== "hnsw") return;
678
678
  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.`);
679
679
  let a = r[0];
@@ -681,14 +681,14 @@ var se = () => new u({
681
681
  let o = i[a];
682
682
  if (o === void 0) throw Error(`hnsw index '${t}' on table '${e}' references unknown column '${a}'.`);
683
683
  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.`);
684
- }, _t = (e, t) => {
684
+ }, vt = (e, t) => {
685
685
  let n;
686
686
  for (let [r, i] of Object.entries(e)) i.type === "id" && i.idScheme === void 0 && (n === void 0 && (n = { ...e }), n[r] = {
687
687
  ...i,
688
- idScheme: at(i.idSchemeInput, t)
688
+ idScheme: ot(i.idSchemeInput, t)
689
689
  });
690
690
  return n ?? e;
691
- }, I = (e) => {
691
+ }, F = (e) => {
692
692
  let t = e.appliedPrimaryKey ?? [];
693
693
  return {
694
694
  tableName: e.tableName,
@@ -707,8 +707,8 @@ var se = () => new u({
707
707
  ...e.validatePatchSchema === void 0 ? {} : { validatePatchSchema: e.validatePatchSchema },
708
708
  fullTextIndex: ((t, n, r) => {
709
709
  if (n.length === 0) throw Error(`fullTextIndex '${t}' on '${e.tableName}' has no columns.`);
710
- 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}'.`);
711
- return I({
710
+ 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}'.`);
711
+ return F({
712
712
  ...e,
713
713
  tableName: e.tableName,
714
714
  fields: e.fields,
@@ -729,27 +729,27 @@ var se = () => new u({
729
729
  });
730
730
  }),
731
731
  with: ((...t) => {
732
- let n = lt(t), r = { ...e.fields }, i = /* @__PURE__ */ new Map();
732
+ let n = ut(t), r = { ...e.fields }, i = /* @__PURE__ */ new Map();
733
733
  for (let e of Object.keys(r)) i.set(e, {
734
734
  id: "<table>",
735
735
  fields: {}
736
736
  });
737
737
  for (let t of n) for (let [n, a] of Object.entries(t.fields)) {
738
738
  let o = i.get(n);
739
- if (o !== void 0) throw Error(`mixin collision on column '${n}' in table '${e.tableName}': '${pt(o)}' and '${pt(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.`);
740
- M(e.tableName, n), r[n] = a, i.set(n, t);
739
+ if (o !== void 0) throw Error(`mixin collision on column '${n}' in table '${e.tableName}': '${mt(o)}' and '${mt(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.`);
740
+ j(e.tableName, n), r[n] = a, i.set(n, t);
741
741
  }
742
742
  let a = [...e.appliedIndexes];
743
743
  for (let t of n) for (let n of t.indexes ?? []) {
744
- let t = n.name ?? mt(e.tableName, n.fields);
745
- a.some((e) => e.name === t) || (N(e.tableName, t, n.name === void 0, n.fields), gt(e.tableName, t, n.kind, n.fields, r), a.push({
744
+ let t = n.name ?? ht(e.tableName, n.fields);
745
+ a.some((e) => e.name === t) || (M(e.tableName, t, n.name === void 0, n.fields), _t(e.tableName, t, n.kind, n.fields, r), a.push({
746
746
  name: t,
747
747
  fields: n.fields,
748
748
  ...n.kind === void 0 ? {} : { kind: n.kind },
749
749
  ...n.kindOptions === void 0 ? {} : { kindOptions: n.kindOptions }
750
750
  }));
751
751
  }
752
- return I({
752
+ return F({
753
753
  ...e,
754
754
  tableName: e.tableName,
755
755
  fields: r,
@@ -766,10 +766,10 @@ var se = () => new u({
766
766
  }),
767
767
  index: ((...t) => {
768
768
  let n, r, i, a = Array.isArray(t[0]);
769
- if (a ? (r = t[0], i = t[1], n = mt(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.`);
769
+ if (a ? (r = t[0], i = t[1], n = ht(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.`);
770
770
  let o = r.filter((e) => typeof e == "string");
771
- if (N(e.tableName, n, a, o), gt(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.`);
772
- return I({
771
+ if (M(e.tableName, n, a, o), _t(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.`);
772
+ return F({
773
773
  ...e,
774
774
  tableName: e.tableName,
775
775
  fields: e.fields,
@@ -793,8 +793,8 @@ var se = () => new u({
793
793
  expressionIndex: ((t, n, r) => {
794
794
  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.`);
795
795
  let i = n.filter((e) => typeof e == "string");
796
- if (N(e.tableName, t, !1, i), gt(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.`);
797
- return I({
796
+ if (M(e.tableName, t, !1, i), _t(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.`);
797
+ return F({
798
798
  ...e,
799
799
  tableName: e.tableName,
800
800
  fields: e.fields,
@@ -817,9 +817,9 @@ var se = () => new u({
817
817
  }),
818
818
  unique: ((...t) => {
819
819
  let n, r, i, a = Array.isArray(t[0]);
820
- if (a ? (r = t[0], i = t[1], n = ht(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.`);
821
- 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.`);
822
- return I({
820
+ 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(`unique '${n}' on table '${e.tableName}' has no fields — a UNIQUE constraint must cover at least one column.`);
821
+ 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.`);
822
+ return F({
823
823
  ...e,
824
824
  tableName: e.tableName,
825
825
  fields: e.fields,
@@ -840,10 +840,10 @@ var se = () => new u({
840
840
  }),
841
841
  uniqueActive: ((...t) => {
842
842
  let n, r, i, a = Array.isArray(t[0]);
843
- if (a ? (r = t[0], i = t[1], n = mt(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.`);
844
- 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).`);
843
+ if (a ? (r = t[0], i = t[1], n = ht(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.`);
844
+ 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).`);
845
845
  let o = i?.where ?? "\"deletedAt\" IS NULL";
846
- return I({
846
+ return F({
847
847
  ...e,
848
848
  tableName: e.tableName,
849
849
  fields: e.fields,
@@ -865,8 +865,8 @@ var se = () => new u({
865
865
  }),
866
866
  check: ((t, n) => {
867
867
  if (n.trim().length === 0) throw Error(`CHECK '${t}' on table '${e.tableName}' has an empty expression.`);
868
- 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.`);
869
- return I({
868
+ 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.`);
869
+ return F({
870
870
  ...e,
871
871
  tableName: e.tableName,
872
872
  fields: e.fields,
@@ -888,7 +888,7 @@ var se = () => new u({
888
888
  if (t.trim().length === 0) throw Error(`rule on table '${e.tableName}' has an empty name.`);
889
889
  let i = e.appliedRules ?? [];
890
890
  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.`);
891
- return I({
891
+ return F({
892
892
  ...e,
893
893
  appliedRules: [...i, {
894
894
  name: t,
@@ -899,7 +899,7 @@ var se = () => new u({
899
899
  }),
900
900
  renamedFrom: ((t) => {
901
901
  if (t === e.tableName) throw Error(`renamedFrom('${t}') on table '${e.tableName}' names the table itself — drop the marker, there is nothing to rename.`);
902
- return j(t), I({
902
+ return A(t), F({
903
903
  ...e,
904
904
  previousTableName: t
905
905
  });
@@ -914,7 +914,7 @@ var se = () => new u({
914
914
  }
915
915
  if (t.length > 0) throw Error(`primaryKey([...]) declared twice on table '${e.tableName}'.`);
916
916
  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.`);
917
- return I({
917
+ return F({
918
918
  ...e,
919
919
  tableName: e.tableName,
920
920
  fields: e.fields,
@@ -929,7 +929,7 @@ var se = () => new u({
929
929
  ...e.validatePatchSchema === void 0 ? {} : { validatePatchSchema: e.validatePatchSchema }
930
930
  });
931
931
  }),
932
- nonReactive: (() => I({
932
+ nonReactive: (() => F({
933
933
  ...e,
934
934
  tableName: e.tableName,
935
935
  fields: e.fields,
@@ -943,7 +943,7 @@ var se = () => new u({
943
943
  ...e.insertSchema === void 0 ? {} : { insertSchema: e.insertSchema },
944
944
  ...e.validatePatchSchema === void 0 ? {} : { validatePatchSchema: e.validatePatchSchema }
945
945
  })),
946
- validate: ((t) => I({
946
+ validate: ((t) => F({
947
947
  ...e,
948
948
  tableName: e.tableName,
949
949
  fields: e.fields,
@@ -957,7 +957,7 @@ var se = () => new u({
957
957
  insertSchema: t,
958
958
  ...e.validatePatchSchema === void 0 ? {} : { validatePatchSchema: e.validatePatchSchema }
959
959
  })),
960
- validatePatch: ((t) => I({
960
+ validatePatch: ((t) => F({
961
961
  ...e,
962
962
  tableName: e.tableName,
963
963
  fields: e.fields,
@@ -972,22 +972,22 @@ var se = () => new u({
972
972
  validatePatchSchema: r.partial(t)
973
973
  }))
974
974
  };
975
- }, L = (e, t) => {
976
- j(e);
975
+ }, I = (e, t) => {
976
+ A(e);
977
977
  let n = Object.entries(t).flatMap(([e, t]) => {
978
- let n = he(t);
978
+ let n = ge(t);
979
979
  return n === void 0 ? [] : [{
980
980
  column: e,
981
981
  ...n
982
982
  }];
983
- }), r = _t(C(t), e);
984
- for (let t of Object.keys(r)) M(e, t);
983
+ }), r = vt(S(t), e);
984
+ for (let t of Object.keys(r)) j(e, t);
985
985
  let i;
986
- for (let [t, n] of Object.entries(r)) n.references === S && (n.references = () => {
986
+ for (let [t, n] of Object.entries(r)) n.references === x && (n.references = () => {
987
987
  if (i === void 0) throw Error(`selfReference() on '${e}.${t}' read before table() returned`);
988
988
  return i;
989
989
  });
990
- return i = I({
990
+ return i = F({
991
991
  appliedPluginRefs: n,
992
992
  tableName: e,
993
993
  fields: r,
@@ -999,7 +999,7 @@ var se = () => new u({
999
999
  appliedChecks: [],
1000
1000
  appliedRules: []
1001
1001
  }), i;
1002
- }, vt = (e) => e === "sqlite" || e === "turso", yt = (e) => e === "mysql" || e === "mariadb", R = (e, t) => {
1002
+ }, yt = (e) => e === "sqlite" || e === "turso", bt = (e) => e === "mysql" || e === "mariadb", L = (e, t) => {
1003
1003
  switch (t) {
1004
1004
  case "mysql":
1005
1005
  case "mariadb": return `\`${e.replace(/`/g, "``")}\``;
@@ -1008,51 +1008,51 @@ var se = () => new u({
1008
1008
  case "sqlite":
1009
1009
  case "turso": return `"${e.replace(/"/g, "\"\"")}"`;
1010
1010
  }
1011
- }, bt = 1e4, xt = Symbol.for("@voltro/database/tableRegistry"), St = globalThis, z = St[xt] ?? (St[xt] = /* @__PURE__ */ new Map()), Ct = (e) => {
1012
- let t = z.get(e.tableName);
1011
+ }, xt = 1e4, St = Symbol.for("@voltro/database/tableRegistry"), Ct = globalThis, R = Ct[St] ?? (Ct[St] = /* @__PURE__ */ new Map()), wt = (e) => {
1012
+ let t = R.get(e.tableName);
1013
1013
  if (t === void 0) {
1014
- z.set(e.tableName, e);
1014
+ R.set(e.tableName, e);
1015
1015
  return;
1016
1016
  }
1017
1017
  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.`);
1018
- }, wt = (e) => {
1019
- z.get(e.tableName) === void 0 && z.set(e.tableName, e);
1020
- }, B = (e) => z.get(e), Tt = (e) => {
1021
- let t = z.get(e);
1018
+ }, Tt = (e) => {
1019
+ R.get(e.tableName) === void 0 && R.set(e.tableName, e);
1020
+ }, z = (e) => R.get(e), Et = (e) => {
1021
+ let t = R.get(e);
1022
1022
  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.`);
1023
1023
  return t;
1024
- }, Et = () => [...z.values()], Dt = (e) => z.delete(e), Ot = () => {
1025
- z.clear();
1026
- }, kt = (e) => z.get(e)?.isReactive !== !1, V = (e) => e.order ?? [], At = (e) => ({
1024
+ }, Dt = () => [...R.values()], Ot = (e) => R.delete(e), kt = () => {
1025
+ R.clear();
1026
+ }, At = (e) => R.get(e)?.isReactive !== !1, B = (e) => e.order ?? [], jt = (e) => ({
1027
1027
  op: "count",
1028
1028
  alias: e ?? "count"
1029
- }), jt = (e, t) => ({
1029
+ }), Mt = (e, t) => ({
1030
1030
  op: "count-distinct",
1031
1031
  column: e,
1032
1032
  alias: t ?? `count_distinct_${e}`
1033
- }), Mt = (e, t) => ({
1033
+ }), Nt = (e, t) => ({
1034
1034
  op: "sum",
1035
1035
  column: e,
1036
1036
  alias: t ?? `sum_${e}`
1037
- }), Nt = (e, t) => ({
1037
+ }), Pt = (e, t) => ({
1038
1038
  op: "avg",
1039
1039
  column: e,
1040
1040
  alias: t ?? `avg_${e}`
1041
- }), Pt = (e, t) => ({
1041
+ }), Ft = (e, t) => ({
1042
1042
  op: "min",
1043
1043
  column: e,
1044
1044
  alias: t ?? `min_${e}`
1045
- }), Ft = (e, t) => ({
1045
+ }), It = (e, t) => ({
1046
1046
  op: "max",
1047
1047
  column: e,
1048
1048
  alias: t ?? `max_${e}`
1049
- }), It = (e, t) => ({
1049
+ }), Lt = (e, t) => ({
1050
1050
  op: "column",
1051
1051
  column: e,
1052
1052
  alias: t ?? e
1053
- }), H = (e) => (...t) => {
1053
+ }), V = (e) => (...t) => {
1054
1054
  if (t.length < 2) throw Error(`${e}: requires at least two queries`);
1055
- return W({
1055
+ return U({
1056
1056
  table: t[0].descriptor.table,
1057
1057
  predicate: void 0,
1058
1058
  order: [],
@@ -1064,55 +1064,55 @@ var se = () => new u({
1064
1064
  queries: t.map((e) => e.descriptor)
1065
1065
  }
1066
1066
  });
1067
- }, Lt = H("union"), Rt = H("union-all"), zt = H("intersect"), Bt = H("except"), U = (e) => ({ over: (t) => ({
1067
+ }, Rt = V("union"), zt = V("union-all"), Bt = V("intersect"), Vt = V("except"), H = (e) => ({ over: (t) => ({
1068
1068
  ...e,
1069
1069
  window: t
1070
- }) }), Vt = (e = "rowNumber") => U({
1070
+ }) }), Ht = (e = "rowNumber") => H({
1071
1071
  op: "window-row-number",
1072
1072
  alias: e
1073
- }), Ht = (e = "rank") => U({
1073
+ }), Ut = (e = "rank") => H({
1074
1074
  op: "window-rank",
1075
1075
  alias: e
1076
- }), Ut = (e = "denseRank") => U({
1076
+ }), Wt = (e = "denseRank") => H({
1077
1077
  op: "window-dense-rank",
1078
1078
  alias: e
1079
- }), Wt = (e, t = 1, n) => U({
1079
+ }), Gt = (e, t = 1, n) => H({
1080
1080
  op: "window-lag",
1081
1081
  column: e,
1082
1082
  alias: n ?? `lag_${e}`,
1083
1083
  offset: t
1084
- }), Gt = (e, t = 1, n) => U({
1084
+ }), Kt = (e, t = 1, n) => H({
1085
1085
  op: "window-lead",
1086
1086
  column: e,
1087
1087
  alias: n ?? `lead_${e}`,
1088
1088
  offset: t
1089
- }), Kt = (e, t) => U({
1089
+ }), qt = (e, t) => H({
1090
1090
  op: "window-sum-over",
1091
1091
  column: e,
1092
1092
  alias: t ?? `sum_${e}_over`
1093
- }), qt = (e, t) => U({
1093
+ }), Jt = (e, t) => H({
1094
1094
  op: "window-avg-over",
1095
1095
  column: e,
1096
1096
  alias: t ?? `avg_${e}_over`
1097
- }), Jt = (e, t, n) => {
1098
- let r = n?.find((e) => e.name === t) ?? B(e)?.appliedFullText?.find((e) => e.name === t);
1097
+ }), Yt = (e, t, n) => {
1098
+ let r = n?.find((e) => e.name === t) ?? z(e)?.appliedFullText?.find((e) => e.name === t);
1099
1099
  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.`);
1100
1100
  return {
1101
1101
  columns: r.columns,
1102
1102
  ...r.config === void 0 ? {} : { config: r.config },
1103
1103
  ...r.weights === void 0 ? {} : { weights: r.weights }
1104
1104
  };
1105
- }, W = (e) => ({
1105
+ }, U = (e) => ({
1106
1106
  descriptor: e,
1107
1107
  where(t) {
1108
1108
  let n = e.predicate ? { and: [e.predicate, t] } : t;
1109
- return W({
1109
+ return U({
1110
1110
  ...e,
1111
1111
  predicate: n
1112
1112
  });
1113
1113
  },
1114
1114
  orderBy(t, n = "asc") {
1115
- return W({
1115
+ return U({
1116
1116
  ...e,
1117
1117
  order: [...e.order, {
1118
1118
  column: t,
@@ -1121,43 +1121,43 @@ var se = () => new u({
1121
1121
  });
1122
1122
  },
1123
1123
  limit(t) {
1124
- return W({
1124
+ return U({
1125
1125
  ...e,
1126
1126
  take: t
1127
1127
  });
1128
1128
  },
1129
1129
  offset(t) {
1130
- return W({
1130
+ return U({
1131
1131
  ...e,
1132
1132
  skip: t
1133
1133
  });
1134
1134
  },
1135
1135
  select(...t) {
1136
- return W({
1136
+ return U({
1137
1137
  ...e,
1138
1138
  projection: t
1139
1139
  });
1140
1140
  },
1141
1141
  using(t) {
1142
- return W({
1142
+ return U({
1143
1143
  ...e,
1144
1144
  usingIndex: t
1145
1145
  });
1146
1146
  },
1147
1147
  withDeleted() {
1148
- return W({
1148
+ return U({
1149
1149
  ...e,
1150
1150
  includeDeleted: !0
1151
1151
  });
1152
1152
  },
1153
1153
  forUpdate() {
1154
- return W({
1154
+ return U({
1155
1155
  ...e,
1156
1156
  lock: "update"
1157
1157
  });
1158
1158
  },
1159
1159
  unscoped() {
1160
- return W({
1160
+ return U({
1161
1161
  ...e,
1162
1162
  crossTenant: !0
1163
1163
  });
@@ -1167,13 +1167,13 @@ var se = () => new u({
1167
1167
  ...e.eager ?? {},
1168
1168
  ...t
1169
1169
  };
1170
- return W({
1170
+ return U({
1171
1171
  ...e,
1172
1172
  eager: n
1173
1173
  });
1174
1174
  },
1175
1175
  count() {
1176
- return W({
1176
+ return U({
1177
1177
  ...e,
1178
1178
  projection: void 0,
1179
1179
  aggregations: [{
@@ -1187,15 +1187,15 @@ var se = () => new u({
1187
1187
  ...t,
1188
1188
  alias: e
1189
1189
  }));
1190
- return W({
1190
+ return U({
1191
1191
  ...e,
1192
1192
  projection: void 0,
1193
1193
  aggregations: n
1194
1194
  });
1195
1195
  },
1196
1196
  matching(t, n) {
1197
- let r = Jt(e.table, t, e.fullTextIndexes);
1198
- return W({
1197
+ let r = Yt(e.table, t, e.fullTextIndexes);
1198
+ return U({
1199
1199
  ...e,
1200
1200
  fullTextSearch: {
1201
1201
  indexName: t,
@@ -1209,7 +1209,7 @@ var se = () => new u({
1209
1209
  rankBy(t) {
1210
1210
  let n = e.fullTextSearch;
1211
1211
  if (n === void 0) throw Error(".rankBy() requires a preceding .matching(...) clause — there is no full-text search to rank on this query.");
1212
- return W({
1212
+ return U({
1213
1213
  ...e,
1214
1214
  fullTextSearch: {
1215
1215
  ...n,
@@ -1228,7 +1228,7 @@ var se = () => new u({
1228
1228
  distance: r?.distance ?? "cosine",
1229
1229
  ...e.annClause?.ef === void 0 ? {} : { ef: e.annClause.ef }
1230
1230
  };
1231
- return W({
1231
+ return U({
1232
1232
  ...e,
1233
1233
  annClause: i
1234
1234
  });
@@ -1240,7 +1240,7 @@ var se = () => new u({
1240
1240
  distance: "cosine",
1241
1241
  ...e.annClause?.ef === void 0 ? {} : { ef: e.annClause.ef }
1242
1242
  };
1243
- return W({
1243
+ return U({
1244
1244
  ...e,
1245
1245
  annClause: r,
1246
1246
  take: n
@@ -1253,7 +1253,7 @@ var se = () => new u({
1253
1253
  column: "",
1254
1254
  distance: "cosine"
1255
1255
  };
1256
- return W({
1256
+ return U({
1257
1257
  ...e,
1258
1258
  annClause: {
1259
1259
  ...n,
@@ -1262,22 +1262,22 @@ var se = () => new u({
1262
1262
  });
1263
1263
  },
1264
1264
  use(t) {
1265
- return W({ ...t(e) });
1265
+ return U({ ...t(e) });
1266
1266
  },
1267
1267
  distinct() {
1268
- return W({
1268
+ return U({
1269
1269
  ...e,
1270
1270
  distinct: !0
1271
1271
  });
1272
1272
  },
1273
1273
  distinctOn(t) {
1274
- return W({
1274
+ return U({
1275
1275
  ...e,
1276
1276
  distinctOn: [...t]
1277
1277
  });
1278
1278
  },
1279
1279
  as(t) {
1280
- return W({
1280
+ return U({
1281
1281
  ...e,
1282
1282
  alias: t
1283
1283
  });
@@ -1289,7 +1289,7 @@ var se = () => new u({
1289
1289
  alias: n,
1290
1290
  on: r
1291
1291
  }];
1292
- return W({
1292
+ return U({
1293
1293
  ...e,
1294
1294
  joins: a
1295
1295
  });
@@ -1301,7 +1301,7 @@ var se = () => new u({
1301
1301
  alias: n,
1302
1302
  on: r
1303
1303
  }];
1304
- return W({
1304
+ return U({
1305
1305
  ...e,
1306
1306
  joins: a
1307
1307
  });
@@ -1311,7 +1311,7 @@ var se = () => new u({
1311
1311
  outputKey: e,
1312
1312
  source: t
1313
1313
  }));
1314
- return W({
1314
+ return U({
1315
1315
  ...e,
1316
1316
  projection: void 0,
1317
1317
  joinedProjection: n
@@ -1320,7 +1320,7 @@ var se = () => new u({
1320
1320
  withCte(t, n) {
1321
1321
  let r = e.ctes ?? [];
1322
1322
  if (r.some((e) => e.name === t)) throw Error(`Query.withCte: duplicate CTE name '${t}'`);
1323
- return W({
1323
+ return U({
1324
1324
  ...e,
1325
1325
  ctes: [...r, {
1326
1326
  name: t,
@@ -1331,7 +1331,7 @@ var se = () => new u({
1331
1331
  recursiveCte(t, n) {
1332
1332
  let r = e.ctes ?? [];
1333
1333
  if (r.some((e) => e.name === t)) throw Error(`Query.recursiveCte: duplicate CTE name '${t}'`);
1334
- return W({
1334
+ return U({
1335
1335
  ...e,
1336
1336
  ctes: [...r, {
1337
1337
  name: t,
@@ -1342,20 +1342,20 @@ var se = () => new u({
1342
1342
  },
1343
1343
  groupBy(t) {
1344
1344
  let n = e.groupBy ? [...e.groupBy, ...t] : [...t];
1345
- return W({
1345
+ return U({
1346
1346
  ...e,
1347
1347
  groupBy: n
1348
1348
  });
1349
1349
  },
1350
1350
  having(t) {
1351
1351
  let n = e.having ? { and: [e.having, t] } : t;
1352
- return W({
1352
+ return U({
1353
1353
  ...e,
1354
1354
  having: n
1355
1355
  });
1356
1356
  },
1357
1357
  exists() {
1358
- return W({
1358
+ return U({
1359
1359
  ...e,
1360
1360
  projection: void 0,
1361
1361
  aggregations: [{
@@ -1366,8 +1366,8 @@ var se = () => new u({
1366
1366
  });
1367
1367
  }
1368
1368
  });
1369
- function Yt(e) {
1370
- return W({
1369
+ function Xt(e) {
1370
+ return U({
1371
1371
  table: e.tableName,
1372
1372
  predicate: void 0,
1373
1373
  order: [],
@@ -1378,7 +1378,7 @@ function Yt(e) {
1378
1378
  sourceTable: e
1379
1379
  });
1380
1380
  }
1381
- var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1381
+ var Zt = (e, t, n) => Qt(e, "id", t, n), Qt = (e, t, n, r, i = "asc") => {
1382
1382
  let a = [...e.order.filter((e) => e.column !== t), {
1383
1383
  column: t,
1384
1384
  direction: i
@@ -1393,21 +1393,21 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1393
1393
  order: a,
1394
1394
  take: r
1395
1395
  };
1396
- }, Qt = (e) => {
1396
+ }, $t = (e) => {
1397
1397
  let t = {};
1398
- for (let [n, r] of Object.entries(e)) Ct(r), t[n] = Yt(r);
1398
+ for (let [n, r] of Object.entries(e)) wt(r), t[n] = Xt(r);
1399
1399
  return t;
1400
- }, $t = (e) => e.isView === !0, en = (e, t, n) => {
1401
- if (j(e), n.trim().length === 0) throw Error(`view('${e}', …): the SELECT body is empty — a view must define a query.`);
1402
- let r = C(t);
1403
- for (let t of Object.keys(r)) M(e, t);
1400
+ }, en = (e) => e.isView === !0, tn = (e, t, n) => {
1401
+ if (A(e), n.trim().length === 0) throw Error(`view('${e}', …): the SELECT body is empty — a view must define a query.`);
1402
+ let r = S(t);
1403
+ for (let t of Object.keys(r)) j(e, t);
1404
1404
  return {
1405
1405
  tableName: e,
1406
1406
  fields: r,
1407
1407
  isView: !0,
1408
1408
  viewSelect: n
1409
1409
  };
1410
- }, tn = (e) => Yt({
1410
+ }, nn = (e) => Xt({
1411
1411
  ...e,
1412
1412
  isReactive: !1,
1413
1413
  appliedMixins: [],
@@ -1415,8 +1415,8 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1415
1415
  appliedUniques: [],
1416
1416
  appliedFullText: [],
1417
1417
  appliedChecks: []
1418
- }), nn = (e, t, n = null) => {
1419
- let r = n === null ? R(e.tableName, t) : `${R(n, t)}.${R(e.tableName, t)}`, i = e.viewSelect.trim();
1418
+ }), rn = (e, t, n = null) => {
1419
+ let r = n === null ? L(e.tableName, t) : `${L(n, t)}.${L(e.tableName, t)}`, i = e.viewSelect.trim();
1420
1420
  switch (t) {
1421
1421
  case "postgres":
1422
1422
  case "mysql":
@@ -1425,7 +1425,7 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1425
1425
  case "sqlite":
1426
1426
  case "turso": return `DROP VIEW IF EXISTS ${r};\nCREATE VIEW ${r} AS ${i};`;
1427
1427
  }
1428
- }, rn = (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, an = (e) => {
1428
+ }, an = (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, on = (e) => {
1429
1429
  if (e == null || typeof e != "string") return e;
1430
1430
  let t = e.trim();
1431
1431
  if (t.length === 0) return e;
@@ -1436,7 +1436,7 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1436
1436
  } catch {
1437
1437
  return e;
1438
1438
  }
1439
- }, on = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, sn = (e) => {
1439
+ }, sn = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, cn = (e) => {
1440
1440
  if (e == null || e instanceof Date) return e;
1441
1441
  if (typeof e == "string") {
1442
1442
  let t = new Date(e);
@@ -1447,24 +1447,24 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1447
1447
  return isNaN(t.getTime()) ? e : t;
1448
1448
  }
1449
1449
  return e;
1450
- }, cn = (e, t, n) => {
1450
+ }, ln = (e, t, n) => {
1451
1451
  if (e == null) return e;
1452
1452
  switch (t) {
1453
- case "boolean": return n === "postgres" ? e : rn(e);
1454
- case "vector": return n === "postgres" ? an(e) : e;
1455
- case "json": return n === "postgres" || n === "mysql" || n === "mariadb" ? e : an(e);
1456
- case "array": return n === "postgres" ? e : an(e);
1453
+ case "boolean": return n === "postgres" ? e : an(e);
1454
+ case "vector": return n === "postgres" ? on(e) : e;
1455
+ case "json": return n === "postgres" || n === "mysql" || n === "mariadb" ? e : on(e);
1456
+ case "array": return n === "postgres" ? e : on(e);
1457
1457
  case "timestamp":
1458
- case "date": return n === "sqlite" || n === "turso" ? sn(e) : e;
1458
+ case "date": return n === "sqlite" || n === "turso" ? cn(e) : e;
1459
1459
  case "decimal":
1460
- case "bigint": return on(e);
1460
+ case "bigint": return sn(e);
1461
1461
  default: return e;
1462
1462
  }
1463
- }, ln = (e, t, n) => {
1464
- if (e.length === 0) return e;
1465
- let r = B(t);
1466
- return r === void 0 ? e : un(e, r, n);
1467
1463
  }, un = (e, t, n) => {
1464
+ if (e.length === 0) return e;
1465
+ let r = z(t);
1466
+ return r === void 0 ? e : dn(e, r, n);
1467
+ }, dn = (e, t, n) => {
1468
1468
  if (e.length === 0) return e;
1469
1469
  let r = t.fields, i = [];
1470
1470
  for (let [e, t] of Object.entries(r)) i.push({
@@ -1473,10 +1473,10 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1473
1473
  });
1474
1474
  return e.map((e) => {
1475
1475
  let t = { ...e };
1476
- for (let { key: e, type: r } of i) e in t && (t[e] = cn(t[e], r, n));
1476
+ for (let { key: e, type: r } of i) e in t && (t[e] = ln(t[e], r, n));
1477
1477
  return t;
1478
1478
  });
1479
- }, dn = (e, t) => {
1479
+ }, fn = (e, t) => {
1480
1480
  if (e == null) return e;
1481
1481
  switch (t) {
1482
1482
  case "json": return JSON.stringify(e);
@@ -1484,25 +1484,25 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1484
1484
  case "vector": return typeof e == "string" ? e : JSON.stringify(e);
1485
1485
  default: return e;
1486
1486
  }
1487
- }, fn = (e, t, n = ["json", "array"]) => {
1488
- let r = B(t);
1487
+ }, pn = (e, t, n = ["json", "array"]) => {
1488
+ let r = z(t);
1489
1489
  if (r === void 0) return e;
1490
1490
  let i = r.fields, a = null;
1491
1491
  for (let [t, r] of Object.entries(i)) if (n.includes(r.type) && t in e) {
1492
- let n = dn(e[t], r.type);
1492
+ let n = fn(e[t], r.type);
1493
1493
  n !== e[t] && (a === null && (a = { ...e }), a[t] = n);
1494
1494
  }
1495
1495
  return a ?? e;
1496
- }, pn = /^[A-Za-z_][A-Za-z0-9_]*$/, mn = (e) => "$" + e.map((e) => typeof e == "number" ? `[${e}]` : pn.test(e) ? `.${e}` : `."${e.replace(/"/g, "\\\"")}"`).join(""), hn = (e) => "{" + e.map((e) => {
1496
+ }, mn = /^[A-Za-z_][A-Za-z0-9_]*$/, hn = (e) => "$" + e.map((e) => typeof e == "number" ? `[${e}]` : mn.test(e) ? `.${e}` : `."${e.replace(/"/g, "\\\"")}"`).join(""), gn = (e) => "{" + e.map((e) => {
1497
1497
  let t = String(e);
1498
1498
  return /^[A-Za-z0-9_]+$/.test(t) ? t : `"${t.replace(/(["\\])/g, "\\$1")}"`;
1499
- }).join(",") + "}", G = (e, t, n, r = {}) => {
1500
- let i = R(e, n), a = r.numeric ?? !1;
1499
+ }).join(",") + "}", W = (e, t, n, r = {}) => {
1500
+ let i = L(e, n), a = r.numeric ?? !1;
1501
1501
  if (n === "postgres") {
1502
- let e = `(${i} #>> '${hn(t)}'::text[])`;
1502
+ let e = `(${i} #>> '${gn(t)}'::text[])`;
1503
1503
  return a ? `${e}::numeric` : e;
1504
1504
  }
1505
- let o = mn(t);
1505
+ let o = hn(t);
1506
1506
  switch (n) {
1507
1507
  case "mysql":
1508
1508
  case "mariadb": {
@@ -1519,58 +1519,58 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1519
1519
  return a ? `CAST(${e} AS REAL)` : e;
1520
1520
  }
1521
1521
  }
1522
- }, gn = class extends Error {
1522
+ }, _n = class extends Error {
1523
1523
  _tag = "TenantNamespaceUnresolved";
1524
1524
  constructor(e) {
1525
1525
  super(e), this.name = "TenantNamespaceUnresolved";
1526
1526
  }
1527
- }, _n = class extends Error {
1527
+ }, vn = class extends Error {
1528
1528
  _tag = "TenantNamespaceInvalid";
1529
1529
  constructor(e) {
1530
1530
  super(e), this.name = "TenantNamespaceInvalid";
1531
1531
  }
1532
- }, vn = 63, yn = "tenant_", bn = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), xn = (e) => {
1533
- if (e == null || e === "") throw new gn("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.");
1534
- let t = bn(e);
1535
- if (t.replace(/_/g, "") === "") throw new _n(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
1536
- let n = `${yn}${t}`;
1537
- if (n.length > vn) throw new _n(`namespace '${n}' for tenant '${e}' exceeds the ${vn}-byte identifier limit. Use a shorter tenant id.`);
1532
+ }, yn = 63, bn = "tenant_", xn = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), Sn = (e) => {
1533
+ if (e == null || e === "") throw new _n("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.");
1534
+ let t = xn(e);
1535
+ if (t.replace(/_/g, "") === "") throw new vn(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
1536
+ let n = `${bn}${t}`;
1537
+ if (n.length > yn) throw new vn(`namespace '${n}' for tenant '${e}' exceeds the ${yn}-byte identifier limit. Use a shorter tenant id.`);
1538
1538
  return n;
1539
- }, K = (e, t) => e === null ? t : `${e}.${t}`, Sn = /* @__PURE__ */ new Set(["timestamp", "date"]), Cn = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, wn = (e, t) => {
1540
- if (e === void 0 || t == null || !Sn.has(e) || t instanceof Date) return t;
1539
+ }, G = (e, t) => e === null ? t : `${e}.${t}`, Cn = /* @__PURE__ */ new Set(["timestamp", "date"]), wn = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, Tn = (e, t) => {
1540
+ if (e === void 0 || t == null || !Cn.has(e) || t instanceof Date) return t;
1541
1541
  if (typeof t == "number" && Number.isFinite(t)) return new Date(t);
1542
- if (typeof t == "string" && Cn.test(t)) {
1542
+ if (typeof t == "string" && wn.test(t)) {
1543
1543
  let e = new Date(t);
1544
1544
  return Number.isNaN(e.getTime()) ? t : e;
1545
1545
  }
1546
1546
  return t;
1547
- }, Tn = (e, t) => e === void 0 || !Sn.has(e) ? t : t.map((t) => wn(e, t)), En = (e, t) => {
1547
+ }, En = (e, t) => e === void 0 || !Cn.has(e) ? t : t.map((t) => Tn(e, t)), Dn = (e, t) => {
1548
1548
  let { strings: n, values: r } = e, i = t.unsafe(n[0] ?? "");
1549
1549
  for (let e = 0; e < r.length; e++) i = t`${i}${r[e]}${t.unsafe(n[e + 1] ?? "")}`;
1550
1550
  return t`${i}`;
1551
- }, q = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), J = (e, t, n = null, r) => {
1552
- if ("not" in e) return t`NOT (${J(e.not, t, n, r)})`;
1553
- if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => J(e, t, n, r)));
1554
- if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => J(e, t, n, r)));
1551
+ }, K = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), q = (e, t, n = null, r) => {
1552
+ if ("not" in e) return t`NOT (${q(e.not, t, n, r)})`;
1553
+ if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => q(e, t, n, r)));
1554
+ if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => q(e, t, n, r)));
1555
1555
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
1556
- let r = e, i = Y(r.subquery, t, n);
1556
+ let r = e, i = J(r.subquery, t, n);
1557
1557
  return r.op === "subquery-in" ? t`${t(r.column)} IN (${i})` : t`${t(r.column)} NOT IN (${i})`;
1558
1558
  }
1559
1559
  if (e.op === "exists" || e.op === "not-exists") {
1560
- let r = e, i = Y(r.subquery, t, n);
1560
+ let r = e, i = J(r.subquery, t, n);
1561
1561
  return r.op === "exists" ? t`EXISTS (${i})` : t`NOT EXISTS (${i})`;
1562
1562
  }
1563
1563
  let i = e, a = t(i.column), o = i.path, s = o !== void 0 && o.length > 0, c = () => t.onDialectOrElse({
1564
- mysql: () => t.unsafe(G(i.column, o, "mysql")),
1565
- mssql: () => t.unsafe(G(i.column, o, "mssql")),
1566
- sqlite: () => t.unsafe(G(i.column, o, "sqlite")),
1567
- orElse: () => t.unsafe(G(i.column, o, "postgres"))
1564
+ mysql: () => t.unsafe(W(i.column, o, "mysql")),
1565
+ mssql: () => t.unsafe(W(i.column, o, "mssql")),
1566
+ sqlite: () => t.unsafe(W(i.column, o, "sqlite")),
1567
+ orElse: () => t.unsafe(W(i.column, o, "postgres"))
1568
1568
  }), l = () => t.onDialectOrElse({
1569
- mysql: () => t.unsafe(G(i.column, o, "mysql", { numeric: !0 })),
1570
- mssql: () => t.unsafe(G(i.column, o, "mssql", { numeric: !0 })),
1571
- sqlite: () => t.unsafe(G(i.column, o, "sqlite", { numeric: !0 })),
1572
- orElse: () => t.unsafe(G(i.column, o, "postgres", { numeric: !0 }))
1573
- }), 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 : B(r)?.fields?.[i.column]?.type, h = (e) => wn(m, e);
1569
+ mysql: () => t.unsafe(W(i.column, o, "mysql", { numeric: !0 })),
1570
+ mssql: () => t.unsafe(W(i.column, o, "mssql", { numeric: !0 })),
1571
+ sqlite: () => t.unsafe(W(i.column, o, "sqlite", { numeric: !0 })),
1572
+ orElse: () => t.unsafe(W(i.column, o, "postgres", { numeric: !0 }))
1573
+ }), 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, h = (e) => Tn(m, e);
1574
1574
  switch (i.op) {
1575
1575
  case "eq": return t`${u} = ${f(h(i.value))}`;
1576
1576
  case "neq": return t`${u} <> ${f(h(i.value))}`;
@@ -1587,7 +1587,7 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1587
1587
  return e.length === 0 ? t`TRUE` : t`${u} NOT IN ${t.in(s ? e.map((e) => f(e)) : e)}`;
1588
1588
  }
1589
1589
  case "contains": {
1590
- let e = `%${q(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
1590
+ let e = `%${K(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
1591
1591
  return t.onDialectOrElse({
1592
1592
  mysql: () => t`LOWER(${u}) LIKE LOWER(${e})`,
1593
1593
  mssql: () => t`LOWER(${u}) LIKE LOWER(${e})`,
@@ -1596,7 +1596,7 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1596
1596
  });
1597
1597
  }
1598
1598
  case "startsWith": {
1599
- let e = `${q(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
1599
+ let e = `${K(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
1600
1600
  return t.onDialectOrElse({
1601
1601
  mysql: () => t`${u} LIKE ${e}`,
1602
1602
  orElse: () => t`${u} LIKE ${e} ESCAPE '\\'`
@@ -1632,25 +1632,25 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1632
1632
  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`;
1633
1633
  return t.onDialectOrElse({
1634
1634
  mysql: () => {
1635
- throw E("@voltro/plugin-postgis: spatial predicates are postgres-only");
1635
+ throw T("@voltro/plugin-postgis: spatial predicates are postgres-only");
1636
1636
  },
1637
1637
  mssql: () => {
1638
- throw E("@voltro/plugin-postgis: spatial predicates are postgres-only");
1638
+ throw T("@voltro/plugin-postgis: spatial predicates are postgres-only");
1639
1639
  },
1640
1640
  sqlite: () => {
1641
- throw E("@voltro/plugin-postgis: spatial predicates are postgres-only");
1641
+ throw T("@voltro/plugin-postgis: spatial predicates are postgres-only");
1642
1642
  },
1643
1643
  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})`
1644
1644
  });
1645
1645
  }
1646
1646
  }
1647
- }, Dn = (e, t) => {
1647
+ }, On = (e, t) => {
1648
1648
  let n = [];
1649
1649
  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}`);
1650
- }, On = (e, t) => t.csv(e.map((e) => {
1650
+ }, kn = (e, t) => t.csv(e.map((e) => {
1651
1651
  let n = e.column === void 0 ? t.unsafe("*") : t`${t(e.column)}`;
1652
1652
  if (e.op.startsWith("window-")) {
1653
- let r = Dn(e.window ?? {}, t);
1653
+ let r = On(e.window ?? {}, t);
1654
1654
  switch (e.op) {
1655
1655
  case "window-row-number": return t`ROW_NUMBER() OVER (${r}) AS ${t(e.alias)}`;
1656
1656
  case "window-rank": return t`RANK() OVER (${r}) AS ${t(e.alias)}`;
@@ -1659,7 +1659,7 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1659
1659
  case "window-lead": return t`LEAD(${n}, ${t.unsafe(String(e.offset ?? 1))}) OVER (${r}) AS ${t(e.alias)}`;
1660
1660
  case "window-sum-over": return t`SUM(${n}) OVER (${r}) AS ${t(e.alias)}`;
1661
1661
  case "window-avg-over": return t`AVG(${n}) OVER (${r}) AS ${t(e.alias)}`;
1662
- default: throw E(`compileAggregateProjection: unknown window op '${e.op}'`);
1662
+ default: throw T(`compileAggregateProjection: unknown window op '${e.op}'`);
1663
1663
  }
1664
1664
  }
1665
1665
  switch (e.op) {
@@ -1670,71 +1670,71 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1670
1670
  case "min": return t`MIN(${n}) AS ${t(e.alias)}`;
1671
1671
  case "max": return t`MAX(${n}) AS ${t(e.alias)}`;
1672
1672
  case "column":
1673
- if (e.column === void 0) throw E(`compileAggregateProjection: 'column' projection requires a column name (alias '${e.alias}')`);
1673
+ if (e.column === void 0) throw T(`compileAggregateProjection: 'column' projection requires a column name (alias '${e.alias}')`);
1674
1674
  return t`${t(e.column)} AS ${t(e.alias)}`;
1675
- default: throw E(`compileAggregateProjection: unknown op '${e.op}'`);
1675
+ default: throw T(`compileAggregateProjection: unknown op '${e.op}'`);
1676
1676
  }
1677
- })), kn = (e) => `[${e.join(",")}]`, An = (e, t) => {
1677
+ })), An = (e) => `[${e.join(",")}]`, jn = (e, t) => {
1678
1678
  if (e.queryVector === void 0) return null;
1679
- let n = t(e.column), r = kn(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
1679
+ let n = t(e.column), r = An(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
1680
1680
  return t.onDialectOrElse({
1681
1681
  mysql: () => t`${t.unsafe(a)}(${n}, ${r})`,
1682
1682
  mssql: () => t`NULL`,
1683
1683
  sqlite: () => t`NULL`,
1684
1684
  orElse: () => t`${n} ${t.unsafe(i)} ${r}::vector`
1685
1685
  });
1686
- }, jn = (e, t) => {
1686
+ }, Mn = (e, t) => {
1687
1687
  let n = t.unsafe(e.useGeography ? "::geography" : "::geometry");
1688
1688
  return t`ST_Distance(${t(e.column)}${n}, ${e.geom}${n})`;
1689
- }, Mn = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, Nn = (e, t) => t`${t(`${e.indexName}_tsv`)}`, Pn = (e, t) => `${t}_${e.indexName}_fts`, Fn = (e, t, n) => {
1690
- let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${q(e.query)}%`;
1689
+ }, Nn = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, Pn = (e, t) => t`${t(`${e.indexName}_tsv`)}`, Fn = (e, t) => `${t}_${e.indexName}_fts`, In = (e, t, n) => {
1690
+ let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${K(e.query)}%`;
1691
1691
  return n.onDialectOrElse({
1692
1692
  mysql: () => n`MATCH(${r}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
1693
1693
  sqlite: () => {
1694
- let r = n(Pn(e, t));
1694
+ let r = n(Fn(e, t));
1695
1695
  return n`${n("id")} IN (SELECT ${n("row_id")} FROM ${r} WHERE ${r} MATCH ${e.query})`;
1696
1696
  },
1697
1697
  mssql: () => n.or(e.columns.map((e) => n`LOWER(${n(e)}) LIKE LOWER(${i}) ESCAPE '\\'`)),
1698
- orElse: () => n`${Nn(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
1698
+ orElse: () => n`${Pn(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
1699
1699
  });
1700
- }, In = (e, t, n) => {
1701
- let r = `%${q(e.query)}%`;
1700
+ }, Ln = (e, t, n) => {
1701
+ let r = `%${K(e.query)}%`;
1702
1702
  return n.onDialectOrElse({
1703
1703
  mysql: () => n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
1704
1704
  sqlite: () => {
1705
- let r = n(Pn(e, t));
1705
+ let r = n(Fn(e, t));
1706
1706
  return n`COALESCE((SELECT -bm25(${r}) FROM ${r} WHERE ${r} MATCH ${e.query} AND ${r}.${n("row_id")} = ${n("id")}), 0)`;
1707
1707
  },
1708
1708
  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}`),
1709
- orElse: () => n`ts_rank(${Nn(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
1709
+ orElse: () => n`ts_rank(${Pn(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
1710
1710
  });
1711
- }, Y = (e, t, n = null) => {
1711
+ }, J = (e, t, n = null) => {
1712
1712
  if (e.setOp && e.setOp.queries.length >= 2) {
1713
- 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 = [];
1714
- if (V(e).length > 0 && a.push(t` ORDER BY ${t.csv(V(e).map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), e.take !== void 0) {
1715
- if (!Number.isInteger(e.take) || e.take < 0) throw E(`compileSelect: invalid take ${e.take}`);
1713
+ 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 = [];
1714
+ 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) {
1715
+ if (!Number.isInteger(e.take) || e.take < 0) throw T(`compileSelect: invalid take ${e.take}`);
1716
1716
  a.push(t` LIMIT ${t.unsafe(String(e.take))}`);
1717
1717
  }
1718
1718
  if (e.skip !== void 0) {
1719
- if (!Number.isInteger(e.skip) || e.skip < 0) throw E(`compileSelect: invalid skip ${e.skip}`);
1719
+ if (!Number.isInteger(e.skip) || e.skip < 0) throw T(`compileSelect: invalid skip ${e.skip}`);
1720
1720
  a.push(t` OFFSET ${t.unsafe(String(e.skip))}`);
1721
1721
  }
1722
1722
  return t`${i}${a.reduce((e, n) => t`${e}${n}`, t``)}`;
1723
1723
  }
1724
- let r = e.annClause === void 0 ? null : An(e.annClause, t);
1724
+ let r = e.annClause === void 0 ? null : jn(e.annClause, t);
1725
1725
  e.spatialClause !== void 0 && t.onDialectOrElse({
1726
1726
  mysql: () => {
1727
- throw E("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
1727
+ throw T("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
1728
1728
  },
1729
1729
  mssql: () => {
1730
- throw E("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
1730
+ throw T("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
1731
1731
  },
1732
1732
  sqlite: () => {
1733
- throw E("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
1733
+ throw T("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
1734
1734
  },
1735
1735
  orElse: () => t``
1736
1736
  });
1737
- let i = e.spatialClause?.projectAs === void 0 ? null : jn(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? On(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 ? In(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({
1737
+ let i = e.spatialClause?.projectAs === void 0 ? null : Mn(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? kn(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 ? Ln(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({
1738
1738
  orElse: () => t`DISTINCT ON (${t.csv(e.distinctOn.map((e) => t`${t(e)}`))}) `,
1739
1739
  mysql: () => t`DISTINCT `,
1740
1740
  mssql: () => t`DISTINCT `,
@@ -1746,30 +1746,30 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1746
1746
  mssql: () => t``,
1747
1747
  sqlite: () => t``,
1748
1748
  orElse: () => t` FOR UPDATE`
1749
- }) : t``, g = e.alias === void 0 ? t`${t(K(n, e.table))}${m}` : t`${t(K(n, e.table))} AS ${t(e.alias)}${m}`, ee = (e.joins ?? []).map((e) => {
1749
+ }) : t``, ee = 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) => {
1750
1750
  let r = e.kind === "inner" ? "INNER" : "LEFT";
1751
- return t` ${t.unsafe(r)} JOIN ${t(K(n, e.table))} AS ${t(e.alias)} ON ${J(e.on, t, n)}`;
1752
- }), te = ee.length > 0 ? ee.reduce((e, n) => t`${e}${n}`, g) : g, ne = c === void 0 ? null : Fn(c, e.table, t), _ = [e.predicate ? J(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 ${J(e.having, t, n, e.table)}` : t``, b = e.skip !== void 0, x = [];
1753
- r !== null && x.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && x.push(e.spatialClause.order === "desc" ? t`${Mn(e.spatialClause, t)} DESC` : t`${Mn(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && x.push(t`${l} DESC`);
1754
- for (let n of V(e)) x.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
1755
- let ie = x.length > 0 ? t` ORDER BY ${t.csv(x)}` : b ? t.onDialectOrElse({
1751
+ return t` ${t.unsafe(r)} JOIN ${t(G(n, e.table))} AS ${t(e.alias)} ON ${q(e.on, t, n)}`;
1752
+ }), ne = te.length > 0 ? te.reduce((e, n) => t`${e}${n}`, ee) : ee, re = c === void 0 ? null : In(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 = [];
1753
+ r !== null && b.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && b.push(e.spatialClause.order === "desc" ? t`${Nn(e.spatialClause, t)} DESC` : t`${Nn(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && b.push(t`${l} DESC`);
1754
+ for (let n of B(e)) b.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
1755
+ let ae = b.length > 0 ? t` ORDER BY ${t.csv(b)}` : y ? t.onDialectOrElse({
1756
1756
  mssql: () => t` ORDER BY (SELECT NULL)`,
1757
1757
  orElse: () => t``
1758
- }) : t``, S = (e) => {
1759
- if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw E(`compileSelect: expected non-negative integer take/skip, got ${e}`);
1758
+ }) : t``, x = (e) => {
1759
+ if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw T(`compileSelect: expected non-negative integer take/skip, got ${e}`);
1760
1760
  return t.unsafe(String(e));
1761
- }, 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``;
1761
+ }, 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``;
1762
1762
  return t.onDialectOrElse({
1763
1763
  mssql: () => {
1764
- 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``;
1765
- return t`${se}SELECT ${n}${f}${d} FROM ${te}${v}${re}${y}${ie}${r}`;
1764
+ 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``;
1765
+ return t`${ce}SELECT ${n}${f}${d} FROM ${ne}${_}${ie}${v}${ae}${r}`;
1766
1766
  },
1767
1767
  orElse: () => {
1768
- let n = e.take === void 0 ? t`` : t` LIMIT ${S(e.take)}`, r = b ? t` OFFSET ${S(e.skip)}` : t``;
1769
- return t`${se}SELECT ${f}${d} FROM ${te}${v}${re}${y}${ie}${n}${r}${h}`;
1768
+ let n = e.take === void 0 ? t`` : t` LIMIT ${x(e.take)}`, r = y ? t` OFFSET ${x(e.skip)}` : t``;
1769
+ return t`${ce}SELECT ${f}${d} FROM ${ne}${_}${ie}${v}${ae}${n}${r}${h}`;
1770
1770
  }
1771
1771
  });
1772
- }, X = (e, t) => {
1772
+ }, Y = (e, t) => {
1773
1773
  let n = (e) => {
1774
1774
  if (typeof e != "string" || !/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)$/.test(e)) return null;
1775
1775
  let [t = "", n = ""] = e.replace(/^[+-]/, "").split("."), r = t.replace(/^0+/, "") || "0";
@@ -1787,74 +1787,74 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1787
1787
  a = t === n ? 0 : t > n ? 1 : -1;
1788
1788
  }
1789
1789
  return a === 0 ? 0 : (a > 0 ? 1 : -1) * (r.negative ? -1 : 1);
1790
- }, Ln = (e, t) => ({
1790
+ }, Rn = (e, t) => ({
1791
1791
  column: e,
1792
1792
  op: "eq",
1793
1793
  value: t
1794
- }), Rn = (e, t) => ({
1794
+ }), zn = (e, t) => ({
1795
1795
  column: e,
1796
1796
  op: "neq",
1797
1797
  value: t
1798
- }), zn = (e, t) => ({
1798
+ }), Bn = (e, t) => ({
1799
1799
  column: e,
1800
1800
  op: "gt",
1801
1801
  value: t
1802
- }), Bn = (e, t) => ({
1802
+ }), Vn = (e, t) => ({
1803
1803
  column: e,
1804
1804
  op: "gte",
1805
1805
  value: t
1806
- }), Vn = (e, t) => ({
1806
+ }), Hn = (e, t) => ({
1807
1807
  column: e,
1808
1808
  op: "lt",
1809
1809
  value: t
1810
- }), Hn = (e, t) => ({
1810
+ }), Un = (e, t) => ({
1811
1811
  column: e,
1812
1812
  op: "lte",
1813
1813
  value: t
1814
- }), Un = (e, t) => ({
1814
+ }), Wn = (e, t) => ({
1815
1815
  column: e,
1816
1816
  op: "in",
1817
1817
  value: t
1818
- }), Wn = (e, t) => ({
1818
+ }), Gn = (e, t) => ({
1819
1819
  column: e,
1820
1820
  op: "notIn",
1821
1821
  value: t
1822
- }), Gn = (e, t) => ({
1822
+ }), Kn = (e, t) => ({
1823
1823
  column: e,
1824
1824
  op: "contains",
1825
1825
  value: t
1826
- }), Kn = (e, t) => ({
1826
+ }), qn = (e, t) => ({
1827
1827
  column: e,
1828
1828
  op: "startsWith",
1829
1829
  value: t
1830
- }), qn = (e, t) => ({
1830
+ }), Jn = (e, t) => ({
1831
1831
  column: e,
1832
1832
  op: "arrayContains",
1833
1833
  value: t
1834
- }), Jn = (e, t) => ({
1834
+ }), Yn = (e, t) => ({
1835
1835
  column: e,
1836
1836
  op: "arrayOverlaps",
1837
1837
  value: t
1838
- }), Yn = (e, t) => ({
1838
+ }), Xn = (e, t) => ({
1839
1839
  column: e,
1840
1840
  op: "arrayHas",
1841
1841
  value: t
1842
- }), Xn = {
1842
+ }), Zn = {
1843
1843
  column: "id",
1844
1844
  op: "in",
1845
1845
  value: []
1846
- }, Zn = (e) => ({
1846
+ }, Qn = (e) => ({
1847
1847
  column: e,
1848
1848
  op: "isNull"
1849
- }), Qn = (e) => ({
1849
+ }), $n = (e) => ({
1850
1850
  column: e,
1851
1851
  op: "isNotNull"
1852
- }), $n = (e, t) => ({
1852
+ }), er = (e, t) => ({
1853
1853
  column: e,
1854
1854
  op: "spatial",
1855
1855
  value: t
1856
- }), er = (...e) => ({ and: e }), tr = (...e) => ({ or: e }), nr = (e) => ({ not: e }), rr = (e, ...t) => {
1857
- if (t.length === 0) throw E(`jsonField("${e}"): at least one path segment is required`);
1856
+ }), tr = (...e) => ({ and: e }), nr = (...e) => ({ or: e }), rr = (e) => ({ not: e }), ir = (e, ...t) => {
1857
+ if (t.length === 0) throw T(`jsonField("${e}"): at least one path segment is required`);
1858
1858
  let n = (n, r) => ({
1859
1859
  column: e,
1860
1860
  path: t,
@@ -1875,56 +1875,56 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1875
1875
  isNull: () => n("isNull"),
1876
1876
  isNotNull: () => n("isNotNull")
1877
1877
  };
1878
- }, Z = (e) => "descriptor" in e ? e.descriptor : e, ir = (e, t) => ({
1878
+ }, X = (e) => "descriptor" in e ? e.descriptor : e, ar = (e, t) => ({
1879
1879
  column: e,
1880
1880
  op: "subquery-in",
1881
- subquery: Z(t)
1882
- }), ar = (e, t) => ({
1881
+ subquery: X(t)
1882
+ }), or = (e, t) => ({
1883
1883
  column: e,
1884
1884
  op: "subquery-not-in",
1885
- subquery: Z(t)
1886
- }), or = (e) => ({
1887
- op: "exists",
1888
- subquery: Z(e)
1885
+ subquery: X(t)
1889
1886
  }), sr = (e) => ({
1887
+ op: "exists",
1888
+ subquery: X(e)
1889
+ }), cr = (e) => ({
1890
1890
  op: "not-exists",
1891
- subquery: Z(e)
1892
- }), cr = /^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:?\d{2})?)?$/, lr = (e) => {
1891
+ subquery: X(e)
1892
+ }), lr = /^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:?\d{2})?)?$/, ur = (e) => {
1893
1893
  if (e instanceof Date) return e.getTime();
1894
- if (typeof e == "string" && cr.test(e)) {
1894
+ if (typeof e == "string" && lr.test(e)) {
1895
1895
  let t = Date.parse(e);
1896
1896
  return Number.isNaN(t) ? void 0 : t;
1897
1897
  }
1898
- }, ur = (e, t) => {
1898
+ }, dr = (e, t) => {
1899
1899
  if (!(e instanceof Date) && !(t instanceof Date)) return;
1900
- let n = lr(e), r = lr(t);
1900
+ let n = ur(e), r = ur(t);
1901
1901
  return n === void 0 || r === void 0 ? void 0 : [n, r];
1902
- }, dr = (e, t) => {
1902
+ }, fr = (e, t) => {
1903
1903
  if (e === t) return !0;
1904
- let n = ur(e, t);
1904
+ let n = dr(e, t);
1905
1905
  return n !== void 0 && n[0] === n[1];
1906
- }, fr = (e, t) => {
1906
+ }, pr = (e, t) => {
1907
1907
  if (e == null || t == null) return null;
1908
- let n = ur(e, t);
1908
+ let n = dr(e, t);
1909
1909
  if (n !== void 0) return n[0] === n[1] ? 0 : n[0] > n[1] ? 1 : -1;
1910
1910
  let r = e instanceof Date ? e.getTime() : e, i = t instanceof Date ? t.getTime() : t;
1911
1911
  return typeof r == typeof i ? r === i ? 0 : r > i ? 1 : -1 : null;
1912
- }, Q = (e, t, n = null, r = {}) => {
1912
+ }, Z = (e, t, n = null, r = {}) => {
1913
1913
  if (!t) return !1;
1914
- if ("not" in e) return !Q(e.not, t, n, r);
1914
+ if ("not" in e) return !Z(e.not, t, n, r);
1915
1915
  if ("and" in e) {
1916
- for (let i of e.and) if (!Q(i, t, n, r)) return !1;
1916
+ for (let i of e.and) if (!Z(i, t, n, r)) return !1;
1917
1917
  return !0;
1918
1918
  }
1919
1919
  if ("or" in e) {
1920
- for (let i of e.or) if (Q(i, t, n, r)) return !0;
1920
+ for (let i of e.or) if (Z(i, t, n, r)) return !0;
1921
1921
  return !1;
1922
1922
  }
1923
1923
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
1924
1924
  if (!n) return !1;
1925
1925
  let i = n.get(e.subquery);
1926
1926
  if (!(i instanceof Set)) return !1;
1927
- let a = t[e.column], o = r[e.column]?.type === "decimal" ? [...i].some((e) => X(a, e) === 0) : i.has(a);
1927
+ let a = t[e.column], o = r[e.column]?.type === "decimal" ? [...i].some((e) => Y(a, e) === 0) : i.has(a);
1928
1928
  return e.op === "subquery-in" ? o : !o;
1929
1929
  }
1930
1930
  if (e.op === "exists" || e.op === "not-exists") {
@@ -1932,7 +1932,7 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1932
1932
  let t = n.get(e.subquery), r = typeof t == "number" ? t > 0 : t instanceof Set && t.size > 0;
1933
1933
  return e.op === "exists" ? r : !r;
1934
1934
  }
1935
- let i = e, a = t[i.column], o = r[i.column]?.type === "decimal", s = (e, t) => o && e != null && t != null ? X(e, t) === 0 : dr(e, t), c = o ? X : fr;
1935
+ 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 : fr(e, t), c = o ? Y : pr;
1936
1936
  switch (i.op) {
1937
1937
  case "eq": return s(a, i.value);
1938
1938
  case "neq": return !s(a, i.value);
@@ -1955,19 +1955,19 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1955
1955
  case "arrayHas": return Array.isArray(a) && a.includes(i.value);
1956
1956
  case "isNull": return a == null;
1957
1957
  case "isNotNull": return a != null;
1958
- 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.");
1958
+ 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.");
1959
1959
  }
1960
- }, $ = function* (e) {
1960
+ }, Q = function* (e) {
1961
1961
  if ("not" in e) {
1962
- yield* $(e.not);
1962
+ yield* Q(e.not);
1963
1963
  return;
1964
1964
  }
1965
1965
  if ("and" in e) {
1966
- for (let t of e.and) yield* $(t);
1966
+ for (let t of e.and) yield* Q(t);
1967
1967
  return;
1968
1968
  }
1969
1969
  if ("or" in e) {
1970
- for (let t of e.or) yield* $(t);
1970
+ for (let t of e.or) yield* Q(t);
1971
1971
  return;
1972
1972
  }
1973
1973
  e.op === "subquery-in" || e.op === "subquery-not-in" ? yield {
@@ -1977,17 +1977,17 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
1977
1977
  kind: "exists",
1978
1978
  descriptor: e.subquery
1979
1979
  });
1980
- }, pr = function* (e, t = !0) {
1980
+ }, $ = function* (e, t = !0) {
1981
1981
  if ("not" in e) {
1982
- yield* pr(e.not, !1);
1982
+ yield* $(e.not, !1);
1983
1983
  return;
1984
1984
  }
1985
1985
  if ("and" in e) {
1986
- for (let n of e.and) yield* pr(n, t);
1986
+ for (let n of e.and) yield* $(n, t);
1987
1987
  return;
1988
1988
  }
1989
1989
  if ("or" in e) {
1990
- for (let t of e.or) yield* pr(t, !1);
1990
+ for (let t of e.or) yield* $(t, !1);
1991
1991
  return;
1992
1992
  }
1993
1993
  e.op !== "subquery-in" && e.op !== "subquery-not-in" && e.op !== "exists" && e.op !== "not-exists" && (yield {
@@ -2023,65 +2023,66 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
2023
2023
  }, Sr = async (e) => {
2024
2024
  let t = vr;
2025
2025
  t !== null && e.changedTables.length !== 0 && await t(e);
2026
- }, Cr = (e) => {
2026
+ }, Cr = ["before-schema", "after-schema"], wr = (e) => {
2027
2027
  if (!e.id || e.id.length === 0) throw Error("migration: `id` is required + must be non-empty");
2028
2028
  if (!e.up || !e.down) throw Error(`migration ${e.id}: both \`up\` and \`down\` must be functions`);
2029
+ if (!Cr.includes(e.phase)) throw Error(`migration ${e.id}: \`phase\` is required and must be one of ${Cr.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)`);
2029
2030
  return e;
2030
- }, wr = Symbol.for("voltro.migration.irreversible"), Tr = class extends Error {
2031
+ }, Tr = Symbol.for("voltro.migration.irreversible"), Er = class extends Error {
2031
2032
  migrationId;
2032
2033
  reason;
2033
2034
  _tag = "IrreversibleMigrationError";
2034
2035
  constructor(e, t) {
2035
2036
  super(`migration ${e} cannot be rolled back: ${t}`), this.migrationId = e, this.reason = t, this.name = "IrreversibleMigrationError";
2036
2037
  }
2037
- }, Er = (e) => {
2038
- if (!e || e.trim().length === 0) throw Error("irreversible(): a reason is required");
2039
- return Object.assign(() => t.fail(new Tr("<unknown>", e)), { [wr]: e });
2040
2038
  }, Dr = (e) => {
2041
- let t = e[wr];
2039
+ if (!e || e.trim().length === 0) throw Error("irreversible(): a reason is required");
2040
+ return Object.assign(() => t.fail(new Er("<unknown>", e)), { [Tr]: e });
2041
+ }, Or = (e) => {
2042
+ let t = e[Tr];
2042
2043
  return typeof t == "string" ? t : void 0;
2043
- }, Or = class {
2044
+ }, kr = class {
2044
2045
  reason;
2045
2046
  _tag = "MigrationSkipped";
2046
2047
  constructor(e) {
2047
2048
  this.reason = e;
2048
2049
  }
2049
- }, kr = class extends Error {
2050
+ }, Ar = class extends Error {
2050
2051
  migrationId;
2051
2052
  failed;
2052
2053
  _tag = "MigrationExpectationFailed";
2053
2054
  constructor(e, t) {
2054
2055
  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";
2055
2056
  }
2056
- }, Ar = class extends Error {
2057
+ }, jr = class extends Error {
2057
2058
  migrationId;
2058
2059
  dialect;
2059
2060
  _tag = "TransactionBrokenByBodyError";
2060
2061
  constructor(e, t) {
2061
2062
  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";
2062
2063
  }
2063
- }, jr = class extends Error {
2064
+ }, Mr = class extends Error {
2064
2065
  migrationId;
2065
2066
  operation;
2066
2067
  _tag = "MigrationNeedsSqlClient";
2067
2068
  constructor(e, t, n) {
2068
2069
  super(`migration ${e}: ${t} — ${n}`), this.migrationId = e, this.operation = t, this.name = "MigrationNeedsSqlClient";
2069
2070
  }
2070
- }, Mr = class extends Error {
2071
+ }, Nr = class extends Error {
2071
2072
  table;
2072
2073
  report;
2073
2074
  _tag = "RewriteUnstableError";
2074
2075
  constructor(e, t) {
2075
2076
  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";
2076
2077
  }
2077
- }, Nr = /^\d{8}_\d{6}_[a-z0-9_]+\.ts$/, Pr = (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", Fr = /* @__PURE__ */ new Set(["voltro_isr_cache"]), Ir = (e) => Fr.has(e) || e.startsWith("_voltro_") || e.startsWith("_cloud_") || e.startsWith("cluster_") || e.startsWith("__turso_internal_"), Lr = "_voltro_staging_", Rr = (e) => e.startsWith(Lr), zr = /__dropped_\d{14}$/, Br = (e) => zr.test(e), Vr = 7, Hr = (e) => {
2078
+ }, Pr = /^\d{8}_\d{6}_[a-z0-9_]+\.ts$/, Fr = (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", Ir = /* @__PURE__ */ new Set(["voltro_isr_cache"]), Lr = (e) => Ir.has(e) || e.startsWith("_voltro_") || e.startsWith("_cloud_") || e.startsWith("cluster_") || e.startsWith("__turso_internal_"), Rr = "_voltro_staging_", zr = (e) => e.startsWith(Rr), Br = /__dropped_\d{14}$/, Vr = (e) => Br.test(e), Hr = 7, Ur = (e) => {
2078
2079
  let t = /__dropped_(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/.exec(e);
2079
2080
  if (t === null) return;
2080
2081
  let [, n, r, i, a, o, s] = t;
2081
2082
  return new Date(Date.UTC(Number(n), Number(r) - 1, Number(i), Number(a), Number(o), Number(s)));
2082
- }, Ur = (e, t = {}) => {
2083
+ }, Wr = (e, t = {}) => {
2083
2084
  let n = t.now ?? /* @__PURE__ */ new Date(), r = t.retentionDays ?? 7, i = [], a = (e, t) => {
2084
- let a = Hr(e);
2085
+ let a = Ur(e);
2085
2086
  if (a === void 0) return;
2086
2087
  let o = Math.floor((n.getTime() - a.getTime()) / 864e5);
2087
2088
  o >= r && i.push({
@@ -2090,137 +2091,137 @@ var Xt = (e, t, n) => Zt(e, "id", t, n), Zt = (e, t, n, r, i = "asc") => {
2090
2091
  ageDays: o
2091
2092
  });
2092
2093
  };
2093
- for (let t of e.tables) if (a(t.name, t.name), !Br(t.name)) for (let e of t.columns ?? []) a(e.name, `${t.name}.${e.name}`);
2094
+ for (let t of e.tables) if (a(t.name, t.name), !Vr(t.name)) for (let e of t.columns ?? []) a(e.name, `${t.name}.${e.name}`);
2094
2095
  return i;
2095
- }, Wr = (e, t) => {
2096
+ }, Gr = (e, t) => {
2096
2097
  let n = e.reduce((e, t) => e.ageDays >= t.ageDays ? e : t), r = (/* @__PURE__ */ new Date(Date.now() - t * 864e5)).toISOString().slice(0, 10);
2097
2098
  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.`;
2098
- }, Gr = (e, t) => e.filter((e) => !Ir(e.name) || t.has(e.name)), Kr = L("_voltro_migrations", {
2099
+ }, Kr = (e, t) => e.filter((e) => !Lr(e.name) || t.has(e.name)), qr = I("_voltro_migrations", {
2099
2100
  id: f({ prefix: "mig" }),
2100
2101
  name: p(),
2101
2102
  hash: p(),
2102
2103
  status: p(),
2103
- appliedAt: v().nullable(),
2104
+ appliedAt: _().nullable(),
2104
2105
  durationMs: m().nullable(),
2105
2106
  errorMessage: p().nullable(),
2106
2107
  errorStack: p().nullable(),
2107
2108
  workflowRunId: p().nullable(),
2108
- createdAt: v().default("now"),
2109
- updatedAt: v().default("now").onUpdate("now")
2110
- }).index(["status"]), qr = L("_voltro_seeds", {
2109
+ createdAt: _().default("now"),
2110
+ updatedAt: _().default("now").onUpdate("now")
2111
+ }).index(["status"]), Jr = I("_voltro_seeds", {
2111
2112
  id: f({ prefix: "seed" }),
2112
2113
  name: p(),
2113
2114
  lifecycle: p(),
2114
2115
  fingerprint: p(),
2115
2116
  cronSchedule: p().nullable(),
2116
- watchedTables: y().nullable(),
2117
- nextRunAt: v().nullable(),
2117
+ watchedTables: v().nullable(),
2118
+ nextRunAt: _().nullable(),
2118
2119
  lastRunStatus: p().nullable(),
2119
- lastRunAt: v().nullable(),
2120
+ lastRunAt: _().nullable(),
2120
2121
  lastRunDurationMs: m().nullable(),
2121
2122
  lastRunRowsTouched: m().nullable(),
2122
2123
  lastError: p().nullable(),
2123
2124
  workflowRunId: p().nullable(),
2124
- createdAt: v().default("now"),
2125
- updatedAt: v().default("now").onUpdate("now")
2126
- }).index(["lifecycle"]).index(["nextRunAt"]), Jr = L("_voltro_migration_plans", {
2125
+ createdAt: _().default("now"),
2126
+ updatedAt: _().default("now").onUpdate("now")
2127
+ }).index(["lifecycle"]).index(["nextRunAt"]), Yr = I("_voltro_migration_plans", {
2127
2128
  id: f({ prefix: "plan" }),
2128
2129
  fingerprint: p(),
2129
2130
  liveFingerprint: p().nullable(),
2130
- operations: y(),
2131
- rollbackPlan: y().nullable(),
2131
+ operations: v(),
2132
+ rollbackPlan: v().nullable(),
2132
2133
  appliedBy: p(),
2133
2134
  environment: p(),
2134
2135
  source: p(),
2135
2136
  onlineStrategy: p().nullable(),
2136
2137
  durationMs: m(),
2137
2138
  notes: p().nullable(),
2138
- squashedAt: v().nullable(),
2139
- appliedAt: v().default("now"),
2140
- createdAt: v().default("now"),
2141
- updatedAt: v().default("now").onUpdate("now")
2142
- }).index(["fingerprint"]).index(["environment"]), Yr = L("_voltro_idempotency", {
2139
+ squashedAt: _().nullable(),
2140
+ appliedAt: _().default("now"),
2141
+ createdAt: _().default("now"),
2142
+ updatedAt: _().default("now").onUpdate("now")
2143
+ }).index(["fingerprint"]).index(["environment"]), Xr = I("_voltro_idempotency", {
2143
2144
  id: f({ prefix: "idem" }),
2144
2145
  scope: p(),
2145
2146
  key: p(),
2146
2147
  status: p(),
2147
- response: y().nullable(),
2148
- createdAt: v().default("now")
2149
- }).unique(["scope", "key"]).index(["createdAt"]), Xr = L("_voltro_devices", {
2148
+ response: v().nullable(),
2149
+ createdAt: _().default("now")
2150
+ }).unique(["scope", "key"]).index(["createdAt"]), Zr = I("_voltro_devices", {
2150
2151
  id: f({ prefix: "device" }),
2151
2152
  tenantId: p(),
2152
2153
  name: p(),
2153
- scopes: y().nullable(),
2154
+ scopes: v().nullable(),
2154
2155
  pairingHash: p().maxLength(64).nullable(),
2155
- pairingExpiresAt: v().nullable(),
2156
+ pairingExpiresAt: _().nullable(),
2156
2157
  accessHash: p().maxLength(64).nullable(),
2157
- accessExpiresAt: v().nullable(),
2158
+ accessExpiresAt: _().nullable(),
2158
2159
  refreshHash: p().maxLength(64).nullable(),
2159
- refreshExpiresAt: v().nullable(),
2160
+ refreshExpiresAt: _().nullable(),
2160
2161
  previousRefreshHash: p().maxLength(64).nullable(),
2161
2162
  generation: m().default(0),
2162
- pairedAt: v().nullable(),
2163
- lastSeenAt: v().nullable(),
2164
- revokedAt: v().nullable(),
2163
+ pairedAt: _().nullable(),
2164
+ lastSeenAt: _().nullable(),
2165
+ revokedAt: _().nullable(),
2165
2166
  revokedReason: p().nullable(),
2166
2167
  createdBy: p().nullable(),
2167
- metadata: y().nullable(),
2168
- createdAt: v()
2169
- }).index(["tenantId"]).index(["pairingHash"]).index(["accessHash"]).index(["refreshHash"]).index(["previousRefreshHash"]), Zr = L("_voltro_tenant_selections", {
2168
+ metadata: v().nullable(),
2169
+ createdAt: _()
2170
+ }).index(["tenantId"]).index(["pairingHash"]).index(["accessHash"]).index(["refreshHash"]).index(["previousRefreshHash"]), Qr = I("_voltro_tenant_selections", {
2170
2171
  id: f({ prefix: "tsel" }),
2171
2172
  subjectType: p().maxLength(32),
2172
2173
  subjectId: p(),
2173
2174
  tenantId: p(),
2174
- selectedAt: v()
2175
- }).primaryKey(["id"]).nonReactive(), Qr = L("_voltro_kv", {
2175
+ selectedAt: _()
2176
+ }).primaryKey(["id"]).nonReactive(), $r = I("_voltro_kv", {
2176
2177
  id: f({ prefix: "kv" }),
2177
2178
  key: p().unique(),
2178
2179
  value: p().nullable(),
2179
- expiresAt: v().nullable(),
2180
- createdAt: v().default("now"),
2181
- updatedAt: v().default("now").onUpdate("now")
2182
- }).index(["expiresAt"]), $r = L("_voltro_api_keys", {
2180
+ expiresAt: _().nullable(),
2181
+ createdAt: _().default("now"),
2182
+ updatedAt: _().default("now").onUpdate("now")
2183
+ }).index(["expiresAt"]), ei = I("_voltro_api_keys", {
2183
2184
  id: f({ prefix: "apikey" }),
2184
2185
  tenantId: p().nullable(),
2185
2186
  name: p(),
2186
2187
  hashedKey: p().maxLength(64).unique(),
2187
2188
  keyPrefix: p(),
2188
- scopes: y().nullable(),
2189
- lastUsedAt: v().nullable(),
2189
+ scopes: v().nullable(),
2190
+ lastUsedAt: _().nullable(),
2190
2191
  requestCount: m().default(0),
2191
- expiresAt: v().nullable(),
2192
- revokedAt: v().nullable(),
2192
+ expiresAt: _().nullable(),
2193
+ revokedAt: _().nullable(),
2193
2194
  createdBy: p().nullable(),
2194
2195
  onBehalfOf: p().nullable(),
2195
- metadata: y().nullable(),
2196
- createdAt: v().default("now")
2197
- }).index("byApiKeyTenant", ["tenantId"]), ei = L("_voltro_replica_observations", {
2196
+ metadata: v().nullable(),
2197
+ createdAt: _().default("now")
2198
+ }).index("byApiKeyTenant", ["tenantId"]), ti = I("_voltro_replica_observations", {
2198
2199
  id: f({ prefix: "robs" }),
2199
2200
  replicaId: p().maxLength(191),
2200
- startedAt: v(),
2201
+ startedAt: _(),
2201
2202
  version: p().maxLength(64).nullable(),
2202
2203
  kind: p().maxLength(64),
2203
2204
  payload: p().nullable(),
2204
2205
  reachableAt: p().maxLength(255).nullable(),
2205
- writtenAt: v().default("now").onUpdate("now")
2206
- }).unique(["replicaId", "kind"]).index(["kind"]), ti = [
2207
- Kr,
2206
+ writtenAt: _().default("now").onUpdate("now")
2207
+ }).unique(["replicaId", "kind"]).index(["kind"]), ni = [
2208
2208
  qr,
2209
- Jr
2210
- ], ni = "_voltro_replace_in_progress", ri = L(ni, {
2209
+ Jr,
2210
+ Yr
2211
+ ], ri = "_voltro_replace_in_progress", ii = I(ri, {
2211
2212
  id: f({ prefix: "repl" }),
2212
- startedAt: v().default("now"),
2213
+ startedAt: _().default("now"),
2213
2214
  kind: p().default("replace"),
2214
2215
  tables: p().nullable(),
2215
2216
  capture: p().nullable(),
2216
2217
  via: p(),
2217
2218
  staging: p().nullable(),
2218
- heartbeatAt: v().nullable(),
2219
- resumable: _().nullable()
2220
- }), ii = 30, ai = (e, t) => {
2219
+ heartbeatAt: _().nullable(),
2220
+ resumable: g().nullable()
2221
+ }), ai = 30, oi = (e, t) => {
2221
2222
  let n = typeof t == "number" && Number.isFinite(t) && t > 0 ? t : 30, r = Number(e.VOLTRO_STAGING_STALE_MINUTES);
2222
2223
  return (Number.isFinite(r) && r > 0 ? r : n) * 6e4;
2223
- }, oi = (e) => e == null || String(e).length === 0 ? [] : String(e).split(",").map((e) => e.trim()).filter((e) => e.length > 0), si = (e) => {
2224
+ }, si = (e) => e == null || String(e).length === 0 ? [] : String(e).split(",").map((e) => e.trim()).filter((e) => e.length > 0), ci = (e) => {
2224
2225
  let t = e.filter((e) => e.kind !== "staging");
2225
2226
  if (t.length !== 0) return `refusing to start: a destructive data operation did not finish.
2226
2227
  ${t.map((e) => {
@@ -2235,7 +2236,7 @@ ${t.map((e) => {
2235
2236
 
2236
2237
  When the data is back, or you have decided the current state is correct, clear the marker:
2237
2238
  voltro data clear-replace-marker --yes`;
2238
- }, ci = (e, t, n) => {
2239
+ }, li = (e, t, n) => {
2239
2240
  let r = e.filter((e) => e.kind === "staging");
2240
2241
  return {
2241
2242
  all: r,
@@ -2245,7 +2246,7 @@ ${t.map((e) => {
2245
2246
  return Number.isFinite(r) ? t - r >= n : !1;
2246
2247
  })
2247
2248
  };
2248
- }, li = (e, t) => {
2249
+ }, ui = (e, t) => {
2249
2250
  if (e.all.length === 0) return;
2250
2251
  let n = new Set(e.droppable.map((e) => e.id));
2251
2252
  return `staged data-import leftovers:
@@ -2256,4 +2257,4 @@ ${e.all.map((e) => {
2256
2257
  a reason to refuse the boot — it is a reason to know the disk is holding a copy of a bundle.`;
2257
2258
  };
2258
2259
  //#endregion
2259
- export { Ln as $, be as $n, Pt as $t, Tr as A, it as An, ae as Ar, xn as At, hr as B, j as Bn, nn as Bt, Wr as C, ft as Cn, y as Cr, Y as Ct, Gr as D, ct as Dn, c as Dr, _n as Dt, Rr as E, dt as En, pe as Er, Tn as Et, Ar as F, ze as Fn, ln as Ft, yr as G, Ne as Gn, jt as Gt, xr as H, E as Hn, qt as Ht, Er as I, Be as In, fn as It, qn as J, we as Jn, Bt as Jt, Xn as K, Ie as Kn, Qt as Kt, Dr as L, Ve as Ln, $t as Lt, jr as M, at as Mn, p as Mr, G as Mt, Or as N, rt as Nn, v as Nr, cn as Nt, Hr as O, st as On, h as Or, gn as Ot, Mr as P, et as Pn, ce as Pr, un as Pt, Gn as Q, ye as Qn, Ft as Qt, Pr as R, M as Rn, tn as Rt, Ur as S, R as Sn, ue as Sr, En as St, Br as T, L as Tn, ee as Tr, wn as Tt, gr as U, De as Un, It as Ut, Sr as V, P as Vn, Nt as Vt, br as W, T as Wn, At as Wt, Jn as X, Fe as Xn, Wt as Xt, Yn as Y, Pe as Yn, zt as Yt, $ as Z, Te as Zn, Gt as Zt, Zr as _, Tt as _n, se as _r, $n as _t, li as a, Jt as an, S as ar, ir as at, Fr as b, yt as bn, f as br, X as bt, ai as c, Kt as cn, _ as cr, rr as ct, Yr as d, Et as dn, l as dr, Rn as dt, V as en, _e as er, Q as et, Qr as f, Ot as fn, s as fr, nr as ft, qr as g, Ct as gn, g as gr, tr as gt, ei as h, kt as hn, ne as hr, ar as ht, si as i, Ht as in, u as ir, Un as it, kr as j, ot as jn, o as jr, bn as jt, Nr as k, lt as kn, oe as kr, K as kt, $r as l, Lt as ln, b as lr, Vn as lt, Kr as m, B as mn, re as mr, Wn as mt, ii as n, Xt as nn, ge as nr, zn as nt, ci as o, Vt as on, le as or, Qn as ot, Jr as p, wt as pn, x as pr, sr as pt, er as q, Le as qn, Ut as qt, ri as r, Yt as rn, he as rr, Bn as rt, oi as s, Mt as sn, te as sr, Zn as st, ni as t, Zt as tn, ve as tr, or as tt, Xr as u, Rt as un, ie as ur, Hn as ut, ti as v, Dt as vn, de as vr, Kn as vt, Ir as w, ut as wn, C as wr, q as wt, Lr as x, vt as xn, m as xr, J as xt, Vr as y, bt as yn, fe as yr, pr as yt, Cr as z, N as zn, en as zt };
2260
+ export { Kn as $, be as $n, It as $t, Er as A, ut as An, se as Ar, G as At, wr as B, M as Bn, tn as Bt, Gr as C, L as Cn, de as Cr, Dn as Ct, Kr as D, ft as Dn, me as Dr, En as Dt, zr as E, I as En, te as Er, Tn as Et, Nr as F, tt as Fn, le as Fr, dn as Ft, br as G, w as Gn, jt as Gt, Sr as H, N as Hn, Pt as Ht, jr as I, Be as In, un as It, tr as J, Re as Jn, Wt as Jt, yr as K, Pe as Kn, Mt as Kt, Dr as L, Ve as Ln, pn as Lt, Ar as M, st as Mn, o as Mr, xn as Mt, Mr as N, ot as Nn, p as Nr, W as Nt, Ur as O, lt as On, c as Or, vn as Ot, kr as P, it as Pn, _ as Pr, ln as Pt, Q, Ee as Qn, Kt as Qt, Or as R, He as Rn, en as Rt, Wr as S, yt as Sn, m as Sr, q as St, Vr as T, dt as Tn, S as Tr, K as Tt, xr as U, T as Un, Jt as Ut, hr as V, A as Vn, rn as Vt, gr as W, Oe as Wn, Lt as Wt, Xn as X, Fe as Xn, Bt as Xt, Jn as Y, Te as Yn, Vt as Yt, Yn as Z, Ie as Zn, Gt as Zt, Qr as _, wt as _n, ee as _r, nr as _t, ui as a, Ut as an, u as ar, Wn as at, Ir as b, xt as bn, pe as br, $ as bt, oi as c, Nt as cn, ne as cr, Qn as ct, Xr as d, zt as dn, ae as dr, Un as dt, Ft as en, xe as er, Rn as et, $r as f, Dt as fn, l as fr, zn as ft, Jr as g, At as gn, re as gr, or as gt, ti as h, z as hn, ie as hr, Gn as ht, ci as i, Xt as in, ge as ir, Vn as it, Cr as j, at as jn, oe as jr, Sn as jt, Pr as k, ct as kn, h as kr, _n as kt, ei as l, qt as ln, g as lr, ir as lt, qr as m, Tt as mn, b as mr, cr as mt, ai as n, Qt as nn, ye as nr, sr as nt, li as o, Yt as on, x as or, ar as ot, Yr as p, kt as pn, s as pr, rr as pt, Zn as q, Le as qn, $t as qt, ii as r, Zt as rn, _e as rr, Bn as rt, si as s, Ht as sn, ue as sr, $n as st, ri as t, B as tn, ve as tr, Z as tt, Zr as u, Rt as un, y as ur, Hn as ut, ni as v, Et as vn, ce as vr, er as vt, Lr as w, pt as wn, v as wr, J as wt, Rr as x, bt as xn, f as xr, Y as xt, Hr as y, Ot as yn, fe as yr, qn as yt, Fr as z, j as zn, nn as zt };