@voltro/database 0.33.0 → 0.35.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.
@@ -322,29 +322,29 @@ var r = (e) => {
322
322
  throw Error(`typeid prefix '${e}' on table '${t.tableName}' is ${e.length} chars — exceeds the 63-byte limit; ${n}`);
323
323
  }
324
324
  e.length > 60 && _(`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).`);
325
- }, C = 1704067200000n, w = 10n, T = 12n, E = (1n << w) - 1n, D = (1n << T) - 1n, De = T, Oe = 22n, ke = () => {
325
+ }, De = 1704067200000n, Oe = 10n, C = 12n, w = (1n << Oe) - 1n, T = (1n << C) - 1n, ke = C, Ae = 22n, je = () => {
326
326
  let e = process.env.SNOWFLAKE_MACHINE_ID;
327
327
  if (e === void 0 || e === "") return 0n;
328
328
  let t = BigInt(e);
329
- if (t < 0n || t > E) throw Error(`SNOWFLAKE_MACHINE_ID out of range: ${e}. Must be 0..${E}.`);
329
+ if (t < 0n || t > w) throw Error(`SNOWFLAKE_MACHINE_ID out of range: ${e}. Must be 0..${w}.`);
330
330
  return t;
331
- }, O = () => ({
331
+ }, E = () => ({
332
332
  lastMs: 0n,
333
333
  sequence: 0n,
334
- machineId: ke()
335
- }), k, Ae = () => (k === void 0 && (k = O()), k), je = () => {
336
- k = O();
337
- }, A = () => BigInt(Date.now()), Me = (e) => {
338
- let t = A();
339
- for (; t <= e;) t = A();
334
+ machineId: je()
335
+ }), D, Me = () => (D === void 0 && (D = E()), D), Ne = () => {
336
+ D = E();
337
+ }, O = () => BigInt(Date.now()), Pe = (e) => {
338
+ let t = O();
339
+ for (; t <= e;) t = O();
340
340
  return t;
341
- }, j = () => {
342
- let e = Ae(), t = A();
343
- t === e.lastMs ? (e.sequence = e.sequence + 1n & D, e.sequence === 0n && (t = Me(e.lastMs), e.lastMs = t)) : (e.sequence = 0n, e.lastMs = t);
344
- let n = t - C;
341
+ }, k = () => {
342
+ let e = Me(), t = O();
343
+ t === e.lastMs ? (e.sequence = e.sequence + 1n & T, e.sequence === 0n && (t = Pe(e.lastMs), e.lastMs = t)) : (e.sequence = 0n, e.lastMs = t);
344
+ let n = t - De;
345
345
  if (n < 0n) throw Error("Snowflake timestamp before configured epoch (2024-01-01). System clock is wrong.");
346
- return (n << Oe | e.machineId << De | e.sequence).toString();
347
- }, M = (e) => {
346
+ return (n << Ae | e.machineId << ke | e.sequence).toString();
347
+ }, A = (e) => {
348
348
  let t = e.toLowerCase();
349
349
  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.`);
350
350
  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: '...' }).`);
@@ -353,10 +353,10 @@ var r = (e) => {
353
353
  kind: "derived",
354
354
  tableName: e
355
355
  }), n;
356
- }, N = (e, t) => {
356
+ }, j = (e, t) => {
357
357
  if (e === void 0) return {
358
358
  kind: "typeid",
359
- prefix: M(t)
359
+ prefix: A(t)
360
360
  };
361
361
  if ("prefix" in e && !("scheme" in e)) return S(e.prefix, {
362
362
  kind: "explicit",
@@ -368,7 +368,7 @@ var r = (e) => {
368
368
  if (!("scheme" in e)) throw Error("invalid id() options: no scheme or prefix");
369
369
  switch (e.scheme) {
370
370
  case "typeid": {
371
- let n = e.prefix ?? M(t);
371
+ let n = e.prefix ?? A(t);
372
372
  return e.prefix !== void 0 && S(e.prefix, {
373
373
  kind: "explicit",
374
374
  tableName: t
@@ -385,22 +385,22 @@ var r = (e) => {
385
385
  generate: e.generate
386
386
  };
387
387
  }
388
- }, Ne = (n, r) => {
388
+ }, Fe = (n, r) => {
389
389
  switch (n.kind) {
390
390
  case "typeid": return e(n.prefix).toString();
391
391
  case "ulid": return t();
392
392
  case "numeric": return null;
393
- case "snowflake": return j();
393
+ case "snowflake": return k();
394
394
  case "custom": return n.generate(r);
395
395
  }
396
- }, P = (e) => ({
396
+ }, M = (e) => ({
397
397
  fields: f(e.fields),
398
398
  ...e.id === void 0 ? {} : { id: e.id },
399
399
  ...e.requires === void 0 ? {} : { requires: e.requires },
400
400
  ...e.indexes === void 0 ? {} : { indexes: e.indexes },
401
401
  ...e.behaviors === void 0 ? {} : { behaviors: e.behaviors },
402
402
  ...e.policies === void 0 ? {} : { policies: e.policies }
403
- }), Pe = P, F = (e) => {
403
+ }), Ie = M, N = (e) => {
404
404
  let t = /* @__PURE__ */ new Set(), n = [], r = (e) => {
405
405
  let i = e.id ?? e;
406
406
  if (!t.has(i)) {
@@ -410,7 +410,7 @@ var r = (e) => {
410
410
  };
411
411
  for (let t of e) r(t);
412
412
  return n;
413
- }, Fe = (e, ...t) => {
413
+ }, Le = (e, ...t) => {
414
414
  if (t.length === 0) throw Error(`jsonIndex("${e}"): at least one path segment is required`);
415
415
  let n = (r) => ({
416
416
  jsonPath: {
@@ -421,14 +421,14 @@ var r = (e) => {
421
421
  numeric: () => n(!0)
422
422
  });
423
423
  return n(!1);
424
- }, Ie = (e = "cosine", t = "float32") => {
424
+ }, Re = (e = "cosine", t = "float32") => {
425
425
  let n = t === "half" ? "halfvec" : "vector";
426
426
  switch (e) {
427
427
  case "cosine": return `${n}_cosine_ops`;
428
428
  case "l2": return `${n}_l2_ops`;
429
429
  case "inner": return `${n}_ip_ops`;
430
430
  }
431
- }, Le = [
431
+ }, ze = [
432
432
  "id",
433
433
  "tenantId",
434
434
  "createdAt",
@@ -437,7 +437,7 @@ var r = (e) => {
437
437
  "updatedBy",
438
438
  "deletedAt",
439
439
  "deletedBy"
440
- ], I = (e) => e.id ?? `<anonymous mixin: ${Object.keys(e.fields).join(", ")}>`, L = (e, t) => `${e}_${t.join("_")}_idx`, Re = (e, t) => `${e}_${t.join("_")}_uq`, R = (e, t, n, r, i) => {
440
+ ], P = (e) => e.id ?? `<anonymous mixin: ${Object.keys(e.fields).join(", ")}>`, F = (e, t) => `${e}_${t.join("_")}_idx`, Be = (e, t) => `${e}_${t.join("_")}_uq`, I = (e, t, n, r, i) => {
441
441
  if (n !== "hnsw") return;
442
442
  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.`);
443
443
  let a = r[0];
@@ -445,14 +445,14 @@ var r = (e) => {
445
445
  let o = i[a];
446
446
  if (o === void 0) throw Error(`hnsw index '${t}' on table '${e}' references unknown column '${a}'.`);
447
447
  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.`);
448
- }, z = (e, t) => {
448
+ }, Ve = (e, t) => {
449
449
  let n;
450
450
  for (let [r, i] of Object.entries(e)) i.type === "id" && i.idScheme === void 0 && (n === void 0 && (n = { ...e }), n[r] = {
451
451
  ...i,
452
- idScheme: N(i.idSchemeInput, t)
452
+ idScheme: j(i.idSchemeInput, t)
453
453
  });
454
454
  return n ?? e;
455
- }, B = (e) => {
455
+ }, L = (e) => {
456
456
  let t = e.appliedPrimaryKey ?? [];
457
457
  return {
458
458
  tableName: e.tableName,
@@ -472,7 +472,7 @@ var r = (e) => {
472
472
  fullTextIndex: ((t, n, r) => {
473
473
  if (n.length === 0) throw Error(`fullTextIndex '${t}' on '${e.tableName}' has no columns.`);
474
474
  if (x(e.tableName, t, !1, n), e.appliedFullText.some((e) => e.name === t)) throw Error(`duplicate full-text index '${t}' on table '${e.tableName}'.`);
475
- return B({
475
+ return L({
476
476
  ...e,
477
477
  tableName: e.tableName,
478
478
  fields: e.fields,
@@ -493,27 +493,27 @@ var r = (e) => {
493
493
  });
494
494
  }),
495
495
  with: ((...t) => {
496
- let n = F(t), r = { ...e.fields }, i = /* @__PURE__ */ new Map();
496
+ let n = N(t), r = { ...e.fields }, i = /* @__PURE__ */ new Map();
497
497
  for (let e of Object.keys(r)) i.set(e, {
498
498
  id: "<table>",
499
499
  fields: {}
500
500
  });
501
501
  for (let t of n) for (let [n, a] of Object.entries(t.fields)) {
502
502
  let o = i.get(n);
503
- if (o !== void 0) throw Error(`mixin collision on column '${n}' in table '${e.tableName}': '${I(o)}' and '${I(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.`);
503
+ if (o !== void 0) throw Error(`mixin collision on column '${n}' in table '${e.tableName}': '${P(o)}' and '${P(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.`);
504
504
  b(e.tableName, n), r[n] = a, i.set(n, t);
505
505
  }
506
506
  let a = [...e.appliedIndexes];
507
507
  for (let t of n) for (let n of t.indexes ?? []) {
508
- let t = n.name ?? L(e.tableName, n.fields);
509
- a.some((e) => e.name === t) || (x(e.tableName, t, n.name === void 0, n.fields), R(e.tableName, t, n.kind, n.fields, r), a.push({
508
+ let t = n.name ?? F(e.tableName, n.fields);
509
+ a.some((e) => e.name === t) || (x(e.tableName, t, n.name === void 0, n.fields), I(e.tableName, t, n.kind, n.fields, r), a.push({
510
510
  name: t,
511
511
  fields: n.fields,
512
512
  ...n.kind === void 0 ? {} : { kind: n.kind },
513
513
  ...n.kindOptions === void 0 ? {} : { kindOptions: n.kindOptions }
514
514
  }));
515
515
  }
516
- return B({
516
+ return L({
517
517
  ...e,
518
518
  tableName: e.tableName,
519
519
  fields: r,
@@ -530,10 +530,10 @@ var r = (e) => {
530
530
  }),
531
531
  index: ((...t) => {
532
532
  let n, r, i, a = Array.isArray(t[0]);
533
- if (a ? (r = t[0], i = t[1], n = L(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.`);
533
+ if (a ? (r = t[0], i = t[1], n = F(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.`);
534
534
  let o = r.filter((e) => typeof e == "string");
535
- if (x(e.tableName, n, a, o), R(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.`);
536
- return B({
535
+ if (x(e.tableName, n, a, o), I(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.`);
536
+ return L({
537
537
  ...e,
538
538
  tableName: e.tableName,
539
539
  fields: e.fields,
@@ -557,8 +557,8 @@ var r = (e) => {
557
557
  expressionIndex: ((t, n, r) => {
558
558
  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.`);
559
559
  let i = n.filter((e) => typeof e == "string");
560
- if (x(e.tableName, t, !1, i), R(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.`);
561
- return B({
560
+ if (x(e.tableName, t, !1, i), I(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.`);
561
+ return L({
562
562
  ...e,
563
563
  tableName: e.tableName,
564
564
  fields: e.fields,
@@ -581,9 +581,9 @@ var r = (e) => {
581
581
  }),
582
582
  unique: ((...t) => {
583
583
  let n, r, i, a = Array.isArray(t[0]);
584
- if (a ? (r = t[0], i = t[1], n = Re(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.`);
584
+ if (a ? (r = t[0], i = t[1], n = Be(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.`);
585
585
  if (x(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.`);
586
- return B({
586
+ return L({
587
587
  ...e,
588
588
  tableName: e.tableName,
589
589
  fields: e.fields,
@@ -604,10 +604,10 @@ var r = (e) => {
604
604
  }),
605
605
  uniqueActive: ((...t) => {
606
606
  let n, r, i, a = Array.isArray(t[0]);
607
- if (a ? (r = t[0], i = t[1], n = L(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.`);
607
+ if (a ? (r = t[0], i = t[1], n = F(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.`);
608
608
  if (x(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).`);
609
609
  let o = i?.where ?? "\"deletedAt\" IS NULL";
610
- return B({
610
+ return L({
611
611
  ...e,
612
612
  tableName: e.tableName,
613
613
  fields: e.fields,
@@ -630,7 +630,7 @@ var r = (e) => {
630
630
  check: ((t, n) => {
631
631
  if (n.trim().length === 0) throw Error(`CHECK '${t}' on table '${e.tableName}' has an empty expression.`);
632
632
  if (x(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.`);
633
- return B({
633
+ return L({
634
634
  ...e,
635
635
  tableName: e.tableName,
636
636
  fields: e.fields,
@@ -652,7 +652,7 @@ var r = (e) => {
652
652
  if (t.trim().length === 0) throw Error(`rule on table '${e.tableName}' has an empty name.`);
653
653
  let i = e.appliedRules ?? [];
654
654
  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.`);
655
- return B({
655
+ return L({
656
656
  ...e,
657
657
  appliedRules: [...i, {
658
658
  name: t,
@@ -663,7 +663,7 @@ var r = (e) => {
663
663
  }),
664
664
  renamedFrom: ((t) => {
665
665
  if (t === e.tableName) throw Error(`renamedFrom('${t}') on table '${e.tableName}' names the table itself — drop the marker, there is nothing to rename.`);
666
- return y(t), B({
666
+ return y(t), L({
667
667
  ...e,
668
668
  previousTableName: t
669
669
  });
@@ -678,7 +678,7 @@ var r = (e) => {
678
678
  }
679
679
  if (t.length > 0) throw Error(`primaryKey([...]) declared twice on table '${e.tableName}'.`);
680
680
  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}'. A composite primary key IS the key — drop the id() column, or include '${t}' in the composite key.`);
681
- return B({
681
+ return L({
682
682
  ...e,
683
683
  tableName: e.tableName,
684
684
  fields: e.fields,
@@ -693,7 +693,7 @@ var r = (e) => {
693
693
  ...e.validatePatchSchema === void 0 ? {} : { validatePatchSchema: e.validatePatchSchema }
694
694
  });
695
695
  }),
696
- nonReactive: (() => B({
696
+ nonReactive: (() => L({
697
697
  ...e,
698
698
  tableName: e.tableName,
699
699
  fields: e.fields,
@@ -707,7 +707,7 @@ var r = (e) => {
707
707
  ...e.insertSchema === void 0 ? {} : { insertSchema: e.insertSchema },
708
708
  ...e.validatePatchSchema === void 0 ? {} : { validatePatchSchema: e.validatePatchSchema }
709
709
  })),
710
- validate: ((t) => B({
710
+ validate: ((t) => L({
711
711
  ...e,
712
712
  tableName: e.tableName,
713
713
  fields: e.fields,
@@ -721,7 +721,7 @@ var r = (e) => {
721
721
  insertSchema: t,
722
722
  ...e.validatePatchSchema === void 0 ? {} : { validatePatchSchema: e.validatePatchSchema }
723
723
  })),
724
- validatePatch: ((t) => B({
724
+ validatePatch: ((t) => L({
725
725
  ...e,
726
726
  tableName: e.tableName,
727
727
  fields: e.fields,
@@ -736,7 +736,7 @@ var r = (e) => {
736
736
  validatePatchSchema: n.partial(t)
737
737
  }))
738
738
  };
739
- }, ze = (e, t) => {
739
+ }, R = (e, t) => {
740
740
  y(e);
741
741
  let n = Object.entries(t).flatMap(([e, t]) => {
742
742
  let n = m(t);
@@ -744,9 +744,9 @@ var r = (e) => {
744
744
  column: e,
745
745
  ...n
746
746
  }];
747
- }), r = z(f(t), e);
747
+ }), r = Ve(f(t), e);
748
748
  for (let t of Object.keys(r)) b(e, t);
749
- return B({
749
+ return L({
750
750
  appliedPluginRefs: n,
751
751
  tableName: e,
752
752
  fields: r,
@@ -758,7 +758,7 @@ var r = (e) => {
758
758
  appliedChecks: [],
759
759
  appliedRules: []
760
760
  });
761
- }, Be = (e) => e === "sqlite" || e === "turso", V = (e, t) => {
761
+ }, He = (e) => e === "sqlite" || e === "turso", z = (e, t) => {
762
762
  switch (t) {
763
763
  case "mysql":
764
764
  case "mariadb": return `\`${e}\``;
@@ -767,51 +767,51 @@ var r = (e) => {
767
767
  case "sqlite":
768
768
  case "turso": return `"${e}"`;
769
769
  }
770
- }, H = Symbol.for("@voltro/database/tableRegistry"), U = globalThis, W = U[H] ?? (U[H] = /* @__PURE__ */ new Map()), G = (e) => {
771
- let t = W.get(e.tableName);
770
+ }, Ue = 1e4, B = Symbol.for("@voltro/database/tableRegistry"), V = globalThis, H = V[B] ?? (V[B] = /* @__PURE__ */ new Map()), U = (e) => {
771
+ let t = H.get(e.tableName);
772
772
  if (t === void 0) {
773
- W.set(e.tableName, e);
773
+ H.set(e.tableName, e);
774
774
  return;
775
775
  }
776
776
  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.`);
777
- }, Ve = (e) => {
778
- W.get(e.tableName) === void 0 && W.set(e.tableName, e);
779
- }, K = (e) => W.get(e), He = (e) => {
780
- let t = W.get(e);
777
+ }, We = (e) => {
778
+ H.get(e.tableName) === void 0 && H.set(e.tableName, e);
779
+ }, W = (e) => H.get(e), Ge = (e) => {
780
+ let t = H.get(e);
781
781
  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.`);
782
782
  return t;
783
- }, Ue = () => [...W.values()], We = () => {
784
- W.clear();
785
- }, Ge = (e) => W.get(e)?.isReactive !== !1, Ke = (e) => e.order ?? [], qe = (e) => ({
783
+ }, Ke = () => [...H.values()], qe = () => {
784
+ H.clear();
785
+ }, Je = (e) => H.get(e)?.isReactive !== !1, Ye = (e) => e.order ?? [], Xe = (e) => ({
786
786
  op: "count",
787
787
  alias: e ?? "count"
788
- }), Je = (e, t) => ({
788
+ }), Ze = (e, t) => ({
789
789
  op: "count-distinct",
790
790
  column: e,
791
791
  alias: t ?? `count_distinct_${e}`
792
- }), Ye = (e, t) => ({
792
+ }), Qe = (e, t) => ({
793
793
  op: "sum",
794
794
  column: e,
795
795
  alias: t ?? `sum_${e}`
796
- }), Xe = (e, t) => ({
796
+ }), $e = (e, t) => ({
797
797
  op: "avg",
798
798
  column: e,
799
799
  alias: t ?? `avg_${e}`
800
- }), Ze = (e, t) => ({
800
+ }), et = (e, t) => ({
801
801
  op: "min",
802
802
  column: e,
803
803
  alias: t ?? `min_${e}`
804
- }), Qe = (e, t) => ({
804
+ }), tt = (e, t) => ({
805
805
  op: "max",
806
806
  column: e,
807
807
  alias: t ?? `max_${e}`
808
- }), $e = (e, t) => ({
808
+ }), nt = (e, t) => ({
809
809
  op: "column",
810
810
  column: e,
811
811
  alias: t ?? e
812
- }), q = (e) => (...t) => {
812
+ }), G = (e) => (...t) => {
813
813
  if (t.length < 2) throw Error(`${e}: requires at least two queries`);
814
- return X({
814
+ return J({
815
815
  table: t[0].descriptor.table,
816
816
  predicate: void 0,
817
817
  order: [],
@@ -823,55 +823,55 @@ var r = (e) => {
823
823
  queries: t.map((e) => e.descriptor)
824
824
  }
825
825
  });
826
- }, et = q("union"), tt = q("union-all"), nt = q("intersect"), rt = q("except"), J = (e) => ({ over: (t) => ({
826
+ }, rt = G("union"), it = G("union-all"), at = G("intersect"), ot = G("except"), K = (e) => ({ over: (t) => ({
827
827
  ...e,
828
828
  window: t
829
- }) }), it = (e = "rowNumber") => J({
829
+ }) }), st = (e = "rowNumber") => K({
830
830
  op: "window-row-number",
831
831
  alias: e
832
- }), at = (e = "rank") => J({
832
+ }), ct = (e = "rank") => K({
833
833
  op: "window-rank",
834
834
  alias: e
835
- }), ot = (e = "denseRank") => J({
835
+ }), lt = (e = "denseRank") => K({
836
836
  op: "window-dense-rank",
837
837
  alias: e
838
- }), st = (e, t = 1, n) => J({
838
+ }), ut = (e, t = 1, n) => K({
839
839
  op: "window-lag",
840
840
  column: e,
841
841
  alias: n ?? `lag_${e}`,
842
842
  offset: t
843
- }), ct = (e, t = 1, n) => J({
843
+ }), dt = (e, t = 1, n) => K({
844
844
  op: "window-lead",
845
845
  column: e,
846
846
  alias: n ?? `lead_${e}`,
847
847
  offset: t
848
- }), lt = (e, t) => J({
848
+ }), ft = (e, t) => K({
849
849
  op: "window-sum-over",
850
850
  column: e,
851
851
  alias: t ?? `sum_${e}_over`
852
- }), ut = (e, t) => J({
852
+ }), pt = (e, t) => K({
853
853
  op: "window-avg-over",
854
854
  column: e,
855
855
  alias: t ?? `avg_${e}_over`
856
- }), Y = (e, t, n) => {
857
- let r = n?.find((e) => e.name === t) ?? K(e)?.appliedFullText?.find((e) => e.name === t);
856
+ }), q = (e, t, n) => {
857
+ let r = n?.find((e) => e.name === t) ?? W(e)?.appliedFullText?.find((e) => e.name === t);
858
858
  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.`);
859
859
  return {
860
860
  columns: r.columns,
861
861
  ...r.config === void 0 ? {} : { config: r.config },
862
862
  ...r.weights === void 0 ? {} : { weights: r.weights }
863
863
  };
864
- }, X = (e) => ({
864
+ }, J = (e) => ({
865
865
  descriptor: e,
866
866
  where(t) {
867
867
  let n = e.predicate ? { and: [e.predicate, t] } : t;
868
- return X({
868
+ return J({
869
869
  ...e,
870
870
  predicate: n
871
871
  });
872
872
  },
873
873
  orderBy(t, n = "asc") {
874
- return X({
874
+ return J({
875
875
  ...e,
876
876
  order: [...e.order, {
877
877
  column: t,
@@ -880,37 +880,37 @@ var r = (e) => {
880
880
  });
881
881
  },
882
882
  limit(t) {
883
- return X({
883
+ return J({
884
884
  ...e,
885
885
  take: t
886
886
  });
887
887
  },
888
888
  offset(t) {
889
- return X({
889
+ return J({
890
890
  ...e,
891
891
  skip: t
892
892
  });
893
893
  },
894
894
  select(...t) {
895
- return X({
895
+ return J({
896
896
  ...e,
897
897
  projection: t
898
898
  });
899
899
  },
900
900
  using(t) {
901
- return X({
901
+ return J({
902
902
  ...e,
903
903
  usingIndex: t
904
904
  });
905
905
  },
906
906
  withDeleted() {
907
- return X({
907
+ return J({
908
908
  ...e,
909
909
  includeDeleted: !0
910
910
  });
911
911
  },
912
912
  unscoped() {
913
- return X({
913
+ return J({
914
914
  ...e,
915
915
  crossTenant: !0
916
916
  });
@@ -920,13 +920,13 @@ var r = (e) => {
920
920
  ...e.eager ?? {},
921
921
  ...t
922
922
  };
923
- return X({
923
+ return J({
924
924
  ...e,
925
925
  eager: n
926
926
  });
927
927
  },
928
928
  count() {
929
- return X({
929
+ return J({
930
930
  ...e,
931
931
  projection: void 0,
932
932
  aggregations: [{
@@ -940,15 +940,15 @@ var r = (e) => {
940
940
  ...t,
941
941
  alias: e
942
942
  }));
943
- return X({
943
+ return J({
944
944
  ...e,
945
945
  projection: void 0,
946
946
  aggregations: n
947
947
  });
948
948
  },
949
949
  matching(t, n) {
950
- let r = Y(e.table, t, e.fullTextIndexes);
951
- return X({
950
+ let r = q(e.table, t, e.fullTextIndexes);
951
+ return J({
952
952
  ...e,
953
953
  fullTextSearch: {
954
954
  indexName: t,
@@ -962,7 +962,7 @@ var r = (e) => {
962
962
  rankBy(t) {
963
963
  let n = e.fullTextSearch;
964
964
  if (n === void 0) throw Error(".rankBy() requires a preceding .matching(...) clause — there is no full-text search to rank on this query.");
965
- return X({
965
+ return J({
966
966
  ...e,
967
967
  fullTextSearch: {
968
968
  ...n,
@@ -981,7 +981,7 @@ var r = (e) => {
981
981
  distance: r?.distance ?? "cosine",
982
982
  ...e.annClause?.ef === void 0 ? {} : { ef: e.annClause.ef }
983
983
  };
984
- return X({
984
+ return J({
985
985
  ...e,
986
986
  annClause: i
987
987
  });
@@ -993,7 +993,7 @@ var r = (e) => {
993
993
  distance: "cosine",
994
994
  ...e.annClause?.ef === void 0 ? {} : { ef: e.annClause.ef }
995
995
  };
996
- return X({
996
+ return J({
997
997
  ...e,
998
998
  annClause: r,
999
999
  take: n
@@ -1006,7 +1006,7 @@ var r = (e) => {
1006
1006
  column: "",
1007
1007
  distance: "cosine"
1008
1008
  };
1009
- return X({
1009
+ return J({
1010
1010
  ...e,
1011
1011
  annClause: {
1012
1012
  ...n,
@@ -1015,22 +1015,22 @@ var r = (e) => {
1015
1015
  });
1016
1016
  },
1017
1017
  use(t) {
1018
- return X({ ...t(e) });
1018
+ return J({ ...t(e) });
1019
1019
  },
1020
1020
  distinct() {
1021
- return X({
1021
+ return J({
1022
1022
  ...e,
1023
1023
  distinct: !0
1024
1024
  });
1025
1025
  },
1026
1026
  distinctOn(t) {
1027
- return X({
1027
+ return J({
1028
1028
  ...e,
1029
1029
  distinctOn: [...t]
1030
1030
  });
1031
1031
  },
1032
1032
  as(t) {
1033
- return X({
1033
+ return J({
1034
1034
  ...e,
1035
1035
  alias: t
1036
1036
  });
@@ -1042,7 +1042,7 @@ var r = (e) => {
1042
1042
  alias: n,
1043
1043
  on: r
1044
1044
  }];
1045
- return X({
1045
+ return J({
1046
1046
  ...e,
1047
1047
  joins: a
1048
1048
  });
@@ -1054,7 +1054,7 @@ var r = (e) => {
1054
1054
  alias: n,
1055
1055
  on: r
1056
1056
  }];
1057
- return X({
1057
+ return J({
1058
1058
  ...e,
1059
1059
  joins: a
1060
1060
  });
@@ -1064,7 +1064,7 @@ var r = (e) => {
1064
1064
  outputKey: e,
1065
1065
  source: t
1066
1066
  }));
1067
- return X({
1067
+ return J({
1068
1068
  ...e,
1069
1069
  projection: void 0,
1070
1070
  joinedProjection: n
@@ -1073,7 +1073,7 @@ var r = (e) => {
1073
1073
  withCte(t, n) {
1074
1074
  let r = e.ctes ?? [];
1075
1075
  if (r.some((e) => e.name === t)) throw Error(`Query.withCte: duplicate CTE name '${t}'`);
1076
- return X({
1076
+ return J({
1077
1077
  ...e,
1078
1078
  ctes: [...r, {
1079
1079
  name: t,
@@ -1084,7 +1084,7 @@ var r = (e) => {
1084
1084
  recursiveCte(t, n) {
1085
1085
  let r = e.ctes ?? [];
1086
1086
  if (r.some((e) => e.name === t)) throw Error(`Query.recursiveCte: duplicate CTE name '${t}'`);
1087
- return X({
1087
+ return J({
1088
1088
  ...e,
1089
1089
  ctes: [...r, {
1090
1090
  name: t,
@@ -1095,20 +1095,20 @@ var r = (e) => {
1095
1095
  },
1096
1096
  groupBy(t) {
1097
1097
  let n = e.groupBy ? [...e.groupBy, ...t] : [...t];
1098
- return X({
1098
+ return J({
1099
1099
  ...e,
1100
1100
  groupBy: n
1101
1101
  });
1102
1102
  },
1103
1103
  having(t) {
1104
1104
  let n = e.having ? { and: [e.having, t] } : t;
1105
- return X({
1105
+ return J({
1106
1106
  ...e,
1107
1107
  having: n
1108
1108
  });
1109
1109
  },
1110
1110
  exists() {
1111
- return X({
1111
+ return J({
1112
1112
  ...e,
1113
1113
  projection: void 0,
1114
1114
  aggregations: [{
@@ -1119,8 +1119,8 @@ var r = (e) => {
1119
1119
  });
1120
1120
  }
1121
1121
  });
1122
- function Z(e) {
1123
- return X({
1122
+ function Y(e) {
1123
+ return J({
1124
1124
  table: e.tableName,
1125
1125
  predicate: void 0,
1126
1126
  order: [],
@@ -1131,7 +1131,7 @@ function Z(e) {
1131
1131
  sourceTable: e
1132
1132
  });
1133
1133
  }
1134
- var dt = (e, t, n) => Q(e, "id", t, n), Q = (e, t, n, r, i = "asc") => {
1134
+ var mt = (e, t, n) => X(e, "id", t, n), X = (e, t, n, r, i = "asc") => {
1135
1135
  let a = [...e.order.filter((e) => e.column !== t), {
1136
1136
  column: t,
1137
1137
  direction: i
@@ -1146,11 +1146,11 @@ var dt = (e, t, n) => Q(e, "id", t, n), Q = (e, t, n, r, i = "asc") => {
1146
1146
  order: a,
1147
1147
  take: r
1148
1148
  };
1149
- }, ft = (e) => {
1149
+ }, ht = (e) => {
1150
1150
  let t = {};
1151
- for (let [n, r] of Object.entries(e)) G(r), t[n] = Z(r);
1151
+ for (let [n, r] of Object.entries(e)) U(r), t[n] = Y(r);
1152
1152
  return t;
1153
- }, pt = (e) => e.isView === !0, mt = (e, t, n) => {
1153
+ }, gt = (e) => e.isView === !0, _t = (e, t, n) => {
1154
1154
  if (y(e), n.trim().length === 0) throw Error(`view('${e}', …): the SELECT body is empty — a view must define a query.`);
1155
1155
  let r = f(t);
1156
1156
  for (let t of Object.keys(r)) b(e, t);
@@ -1160,7 +1160,7 @@ var dt = (e, t, n) => Q(e, "id", t, n), Q = (e, t, n, r, i = "asc") => {
1160
1160
  isView: !0,
1161
1161
  viewSelect: n
1162
1162
  };
1163
- }, ht = (e) => Z({
1163
+ }, vt = (e) => Y({
1164
1164
  ...e,
1165
1165
  isReactive: !1,
1166
1166
  appliedMixins: [],
@@ -1168,8 +1168,8 @@ var dt = (e, t, n) => Q(e, "id", t, n), Q = (e, t, n, r, i = "asc") => {
1168
1168
  appliedUniques: [],
1169
1169
  appliedFullText: [],
1170
1170
  appliedChecks: []
1171
- }), gt = (e, t, n = null) => {
1172
- let r = n === null ? V(e.tableName, t) : `${V(n, t)}.${V(e.tableName, t)}`, i = e.viewSelect.trim();
1171
+ }), yt = (e, t, n = null) => {
1172
+ let r = n === null ? z(e.tableName, t) : `${z(n, t)}.${z(e.tableName, t)}`, i = e.viewSelect.trim();
1173
1173
  switch (t) {
1174
1174
  case "postgres":
1175
1175
  case "mysql":
@@ -1178,16 +1178,16 @@ var dt = (e, t, n) => Q(e, "id", t, n), Q = (e, t, n, r, i = "asc") => {
1178
1178
  case "sqlite":
1179
1179
  case "turso": return `DROP VIEW IF EXISTS ${r};\nCREATE VIEW ${r} AS ${i};`;
1180
1180
  }
1181
- }, _t = /^[A-Za-z_][A-Za-z0-9_]*$/, vt = (e) => "$" + e.map((e) => typeof e == "number" ? `[${e}]` : _t.test(e) ? `.${e}` : `."${e.replace(/"/g, "\\\"")}"`).join(""), yt = (e) => "{" + e.map((e) => {
1181
+ }, bt = /^[A-Za-z_][A-Za-z0-9_]*$/, xt = (e) => "$" + e.map((e) => typeof e == "number" ? `[${e}]` : bt.test(e) ? `.${e}` : `."${e.replace(/"/g, "\\\"")}"`).join(""), St = (e) => "{" + e.map((e) => {
1182
1182
  let t = String(e);
1183
1183
  return /^[A-Za-z0-9_]+$/.test(t) ? t : `"${t.replace(/(["\\])/g, "\\$1")}"`;
1184
- }).join(",") + "}", bt = (e, t, n, r = {}) => {
1185
- let i = V(e, n), a = r.numeric ?? !1;
1184
+ }).join(",") + "}", Ct = (e, t, n, r = {}) => {
1185
+ let i = z(e, n), a = r.numeric ?? !1;
1186
1186
  if (n === "postgres") {
1187
- let e = `(${i} #>> '${yt(t)}'::text[])`;
1187
+ let e = `(${i} #>> '${St(t)}'::text[])`;
1188
1188
  return a ? `${e}::numeric` : e;
1189
1189
  }
1190
- let o = vt(t);
1190
+ let o = xt(t);
1191
1191
  switch (n) {
1192
1192
  case "mysql":
1193
1193
  case "mariadb": {
@@ -1204,10 +1204,39 @@ var dt = (e, t, n) => Q(e, "id", t, n), Q = (e, t, n, r, i = "asc") => {
1204
1204
  return a ? `CAST(${e} AS REAL)` : e;
1205
1205
  }
1206
1206
  }
1207
- }, xt = (e) => {
1207
+ }, wt = (e, t) => ({
1208
+ name: e,
1209
+ body: t
1210
+ }), Tt = (e) => {
1211
+ if (e.lifecycle === "cron" && !e.cron) throw Error(`seed "${e.id}": lifecycle 'cron' requires a 'cron' field`);
1212
+ if (e.lifecycle === "onSchemaChange" && (!e.watchedTables || e.watchedTables.length === 0)) throw Error(`seed "${e.id}": lifecycle 'onSchemaChange' requires at least one entry in 'watchedTables'`);
1213
+ let t = e.steps({ step: wt });
1214
+ if (t.length === 0) throw Error(`seed "${e.id}": at least one step is required`);
1215
+ return {
1216
+ __seed: !0,
1217
+ id: e.id,
1218
+ name: e.name,
1219
+ lifecycle: e.lifecycle,
1220
+ ...e.cron === void 0 ? {} : { cron: e.cron },
1221
+ ...e.timezone === void 0 ? {} : { timezone: e.timezone },
1222
+ ...e.watchedTables === void 0 ? {} : { watchedTables: e.watchedTables },
1223
+ ...e.fingerprint === void 0 ? {} : { fingerprint: e.fingerprint },
1224
+ steps: t
1225
+ };
1226
+ }, Et = (e) => typeof e == "object" && !!e && "__seed" in e && e.__seed === !0, Z = null, Q = null, Dt = (e) => {
1227
+ Z = e;
1228
+ }, Ot = (e) => {
1229
+ Q = e;
1230
+ }, kt = async (e) => {
1231
+ let t = Z;
1232
+ t !== null && await t(e);
1233
+ }, At = async (e) => {
1234
+ let t = Q;
1235
+ t === null || e.changedTables.length === 0 || await t(e);
1236
+ }, jt = (e) => {
1208
1237
  if (!e.id || e.id.length === 0) throw Error("migration: `id` is required + must be non-empty");
1209
1238
  if (!e.up || !e.down) throw Error(`migration ${e.id}: both \`up\` and \`down\` must be functions`);
1210
1239
  return e;
1211
- }, St = /^\d{8}_\d{6}_[a-z0-9_]+\.ts$/, Ct = (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", $ = /* @__PURE__ */ new Set(["voltro_isr_cache"]), wt = (e) => $.has(e) || e.startsWith("_voltro_") || e.startsWith("_cloud_") || e.startsWith("cluster_"), Tt = /__dropped_\d{14}$/, Et = (e) => Tt.test(e);
1240
+ }, Mt = /^\d{8}_\d{6}_[a-z0-9_]+\.ts$/, Nt = (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", $ = /* @__PURE__ */ new Set(["voltro_isr_cache"]), Pt = (e) => $.has(e) || e.startsWith("_voltro_") || e.startsWith("_cloud_") || e.startsWith("cluster_"), Ft = /__dropped_\d{14}$/, It = (e) => Ft.test(e);
1212
1241
  //#endregion
1213
- export { Ne as $, Y as A, te as At, Ge as B, c as Bt, Qe as C, ce as Ct, dt as D, he as Dt, Q as E, de as Et, tt as F, _e as Ft, Le as G, He as H, fe as Ht, Ue as I, i as It, Ie as J, Fe as K, We as L, ne as Lt, Ye as M, le as Mt, lt as N, f as Nt, Z as O, ge as Ot, et as P, re as Pt, M as Q, Ve as R, d as Rt, ct as S, u as St, Ke as T, l as Tt, Be as U, G as V, se as Vt, V as W, P as X, Pe as Y, F as Z, ft as _, pe as _t, Ct as a, Te as at, nt as b, ue as bt, pt as c, y as ct, gt as d, Se as dt, N as et, Xe as f, ye as ft, Je as g, o as gt, qe as h, m as ht, St as i, we as it, it as j, me as jt, at as k, ee as kt, ht as l, S as lt, $e as m, ve as mt, wt as n, je as nt, xt as o, b as ot, ut as p, be as pt, ze as q, Et as r, Ce as rt, bt as s, x as st, $ as t, j as tt, mt as u, xe as ut, ot as v, ie as vt, Ze as w, ae as wt, st as x, a as xt, rt as y, oe as yt, K as z, r as zt };
1242
+ export { Le as $, et as A, ce as At, rt as B, f as Bt, ht as C, o as Ct, ut as D, ue as Dt, at as E, oe as Et, ct as F, ge as Ft, W as G, d as Gt, Ke as H, _e as Ht, q as I, ee as It, Ge as J, se as Jt, Je as K, r as Kt, st as L, te as Lt, X as M, l as Mt, mt as N, de as Nt, dt as O, a as Ot, Y as P, he as Pt, ze as Q, Qe as R, me as Rt, Ze as S, m as St, ot as T, ie as Tt, qe as U, i as Ut, it as V, re as Vt, We as W, ne as Wt, He as X, Ue as Y, fe as Yt, z as Z, yt as _, xe as _t, Nt as a, A as at, nt as b, be as bt, At as c, k as ct, Ot as d, we as dt, R as et, Dt as f, Te as ft, _t as g, S as gt, vt as h, y as ht, Mt as i, N as it, Ye as j, ae as jt, tt as k, u as kt, kt as l, Ne as lt, gt as m, x as mt, Pt as n, Ie as nt, jt as o, Fe as ot, Ct as p, b as pt, U as q, c as qt, It as r, M as rt, Tt as s, j as st, $ as t, Re as tt, Et as u, Ce as ut, $e as v, Se as vt, lt as w, pe as wt, Xe as x, ve as xt, pt as y, ye as yt, ft as z, le as zt };