document-dataply 0.0.10-alpha.7 → 0.0.10-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -125,8 +125,8 @@ var require_cjs = __commonJS({
125
125
  * @param b Value b.
126
126
  * @returns Negative if a < b, 0 if equal, positive if a > b (based on primary field only).
127
127
  */
128
- primaryAsc(a, b) {
129
- return this.asc(a, b);
128
+ primaryAsc(a, b2) {
129
+ return this.asc(a, b2);
130
130
  }
131
131
  isPrimarySame(value, than) {
132
132
  return this.primaryAsc(value, than) === 0;
@@ -139,16 +139,16 @@ var require_cjs = __commonJS({
139
139
  }
140
140
  };
141
141
  var NumericComparator = class extends ValueComparator2 {
142
- asc(a, b) {
143
- return a - b;
142
+ asc(a, b2) {
143
+ return a - b2;
144
144
  }
145
145
  match(value) {
146
146
  return value.toString();
147
147
  }
148
148
  };
149
149
  var StringComparator = class extends ValueComparator2 {
150
- asc(a, b) {
151
- return a.localeCompare(b);
150
+ asc(a, b2) {
151
+ return a.localeCompare(b2);
152
152
  }
153
153
  match(value) {
154
154
  return value;
@@ -965,11 +965,11 @@ var require_cjs = __commonJS({
965
965
  readQueue;
966
966
  writeQueue;
967
967
  static async CatchError(promise) {
968
- return await promise.then((v) => [void 0, v]).catch((err) => [err]);
968
+ return await promise.then((v2) => [void 0, v2]).catch((err) => [err]);
969
969
  }
970
- static IsRangeOverlap(a, b) {
970
+ static IsRangeOverlap(a, b2) {
971
971
  const [start1, end1] = a;
972
- const [start2, end2] = b;
972
+ const [start2, end2] = b2;
973
973
  if (end1 <= start2 || end2 <= start1) {
974
974
  return false;
975
975
  }
@@ -1005,10 +1005,10 @@ var require_cjs = __commonJS({
1005
1005
  rangeOverlapping(tasks, range) {
1006
1006
  return Array.from(tasks.values()).some((t) => _Ryoiki.IsRangeOverlap(t.range, range));
1007
1007
  }
1008
- isSameRange(a, b) {
1008
+ isSameRange(a, b2) {
1009
1009
  const [a1, a2] = a;
1010
- const [b1, b2] = b;
1011
- return a1 === b1 && a2 === b2;
1010
+ const [b1, b22] = b2;
1011
+ return a1 === b1 && a2 === b22;
1012
1012
  }
1013
1013
  fetchUnitAndRun(queue, workspaces) {
1014
1014
  for (const [id, unit] of queue) {
@@ -1071,9 +1071,9 @@ var require_cjs = __commonJS({
1071
1071
  if (timeoutId !== null) {
1072
1072
  clearTimeout(timeoutId);
1073
1073
  }
1074
- const [err, v] = await _Ryoiki.CatchError(task(id));
1074
+ const [err, v2] = await _Ryoiki.CatchError(task(id));
1075
1075
  if (err) reject(err);
1076
- else resolve(v);
1076
+ else resolve(v2);
1077
1077
  };
1078
1078
  const fetch = () => {
1079
1079
  this.fetchUnitAndRun(this.readQueue, this.readings);
@@ -1640,23 +1640,23 @@ var require_cjs = __commonJS({
1640
1640
  isInitialized = false;
1641
1641
  isDestroyed = false;
1642
1642
  verifierMap = {
1643
- gt: (nv, v) => this.comparator.isHigher(nv, v),
1644
- gte: (nv, v) => this.comparator.isHigher(nv, v) || this.comparator.isSame(nv, v),
1645
- lt: (nv, v) => this.comparator.isLower(nv, v),
1646
- lte: (nv, v) => this.comparator.isLower(nv, v) || this.comparator.isSame(nv, v),
1647
- equal: (nv, v) => this.comparator.isSame(nv, v),
1648
- notEqual: (nv, v) => this.comparator.isSame(nv, v) === false,
1649
- or: (nv, v) => this.ensureValues(v).some((v2) => this.comparator.isSame(nv, v2)),
1650
- primaryGt: (nv, v) => this.comparator.isPrimaryHigher(nv, v),
1651
- primaryGte: (nv, v) => this.comparator.isPrimaryHigher(nv, v) || this.comparator.isPrimarySame(nv, v),
1652
- primaryLt: (nv, v) => this.comparator.isPrimaryLower(nv, v),
1653
- primaryLte: (nv, v) => this.comparator.isPrimaryLower(nv, v) || this.comparator.isPrimarySame(nv, v),
1654
- primaryEqual: (nv, v) => this.comparator.isPrimarySame(nv, v),
1655
- primaryNotEqual: (nv, v) => this.comparator.isPrimarySame(nv, v) === false,
1656
- primaryOr: (nv, v) => this.ensureValues(v).some((v2) => this.comparator.isPrimarySame(nv, v2)),
1657
- like: (nv, v) => {
1643
+ gt: (nv, v2) => this.comparator.isHigher(nv, v2),
1644
+ gte: (nv, v2) => this.comparator.isHigher(nv, v2) || this.comparator.isSame(nv, v2),
1645
+ lt: (nv, v2) => this.comparator.isLower(nv, v2),
1646
+ lte: (nv, v2) => this.comparator.isLower(nv, v2) || this.comparator.isSame(nv, v2),
1647
+ equal: (nv, v2) => this.comparator.isSame(nv, v2),
1648
+ notEqual: (nv, v2) => this.comparator.isSame(nv, v2) === false,
1649
+ or: (nv, v2) => this.ensureValues(v2).some((v22) => this.comparator.isSame(nv, v22)),
1650
+ primaryGt: (nv, v2) => this.comparator.isPrimaryHigher(nv, v2),
1651
+ primaryGte: (nv, v2) => this.comparator.isPrimaryHigher(nv, v2) || this.comparator.isPrimarySame(nv, v2),
1652
+ primaryLt: (nv, v2) => this.comparator.isPrimaryLower(nv, v2),
1653
+ primaryLte: (nv, v2) => this.comparator.isPrimaryLower(nv, v2) || this.comparator.isPrimarySame(nv, v2),
1654
+ primaryEqual: (nv, v2) => this.comparator.isPrimarySame(nv, v2),
1655
+ primaryNotEqual: (nv, v2) => this.comparator.isPrimarySame(nv, v2) === false,
1656
+ primaryOr: (nv, v2) => this.ensureValues(v2).some((v22) => this.comparator.isPrimarySame(nv, v22)),
1657
+ like: (nv, v2) => {
1658
1658
  const nodeValue = this.comparator.match(nv);
1659
- const value = v;
1659
+ const value = v2;
1660
1660
  if (!this._cachedRegexp.has(value)) {
1661
1661
  const pattern = value.replace(/%/g, ".*").replace(/_/g, ".");
1662
1662
  const regexp2 = new RegExp(`^${pattern}$`, "i");
@@ -1669,28 +1669,28 @@ var require_cjs = __commonJS({
1669
1669
  searchConfigs = {
1670
1670
  gt: {
1671
1671
  asc: {
1672
- start: (tx, v) => tx.findUpperBoundLeaf(v[0]),
1672
+ start: (tx, v2) => tx.findUpperBoundLeaf(v2[0]),
1673
1673
  end: () => null,
1674
1674
  direction: 1,
1675
1675
  earlyTerminate: false
1676
1676
  },
1677
1677
  desc: {
1678
1678
  start: (tx) => tx.rightestNode(),
1679
- end: (tx, v) => tx.findOuterBoundaryLeaf(v[0], -1),
1679
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(v2[0], -1),
1680
1680
  direction: -1,
1681
1681
  earlyTerminate: true
1682
1682
  }
1683
1683
  },
1684
1684
  gte: {
1685
1685
  asc: {
1686
- start: (tx, v) => tx.findLowerBoundLeaf(v[0]),
1686
+ start: (tx, v2) => tx.findLowerBoundLeaf(v2[0]),
1687
1687
  end: () => null,
1688
1688
  direction: 1,
1689
1689
  earlyTerminate: false
1690
1690
  },
1691
1691
  desc: {
1692
1692
  start: (tx) => tx.rightestNode(),
1693
- end: (tx, v) => tx.findOuterBoundaryLeaf(v[0], -1),
1693
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(v2[0], -1),
1694
1694
  direction: -1,
1695
1695
  earlyTerminate: true
1696
1696
  }
@@ -1698,12 +1698,12 @@ var require_cjs = __commonJS({
1698
1698
  lt: {
1699
1699
  asc: {
1700
1700
  start: (tx) => tx.leftestNode(),
1701
- end: (tx, v) => tx.findOuterBoundaryLeaf(v[0], 1),
1701
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(v2[0], 1),
1702
1702
  direction: 1,
1703
1703
  earlyTerminate: true
1704
1704
  },
1705
1705
  desc: {
1706
- start: (tx, v) => tx.findLowerBoundLeaf(v[0]),
1706
+ start: (tx, v2) => tx.findLowerBoundLeaf(v2[0]),
1707
1707
  end: () => null,
1708
1708
  direction: -1,
1709
1709
  earlyTerminate: false
@@ -1712,12 +1712,12 @@ var require_cjs = __commonJS({
1712
1712
  lte: {
1713
1713
  asc: {
1714
1714
  start: (tx) => tx.leftestNode(),
1715
- end: (tx, v) => tx.findOuterBoundaryLeaf(v[0], 1),
1715
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(v2[0], 1),
1716
1716
  direction: 1,
1717
1717
  earlyTerminate: true
1718
1718
  },
1719
1719
  desc: {
1720
- start: (tx, v) => tx.findUpperBoundLeaf(v[0]),
1720
+ start: (tx, v2) => tx.findUpperBoundLeaf(v2[0]),
1721
1721
  end: () => null,
1722
1722
  direction: -1,
1723
1723
  earlyTerminate: false
@@ -1725,14 +1725,14 @@ var require_cjs = __commonJS({
1725
1725
  },
1726
1726
  equal: {
1727
1727
  asc: {
1728
- start: (tx, v) => tx.findLowerBoundLeaf(v[0]),
1729
- end: (tx, v) => tx.findOuterBoundaryLeaf(v[0], 1),
1728
+ start: (tx, v2) => tx.findLowerBoundLeaf(v2[0]),
1729
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(v2[0], 1),
1730
1730
  direction: 1,
1731
1731
  earlyTerminate: true
1732
1732
  },
1733
1733
  desc: {
1734
- start: (tx, v) => tx.findOuterBoundaryLeaf(v[0], 1),
1735
- end: (tx, v) => tx.findOuterBoundaryLeaf(v[0], -1),
1734
+ start: (tx, v2) => tx.findOuterBoundaryLeaf(v2[0], 1),
1735
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(v2[0], -1),
1736
1736
  direction: -1,
1737
1737
  earlyTerminate: true
1738
1738
  }
@@ -1753,42 +1753,42 @@ var require_cjs = __commonJS({
1753
1753
  },
1754
1754
  or: {
1755
1755
  asc: {
1756
- start: (tx, v) => tx.findLowerBoundLeaf(tx.lowestValue(v)),
1757
- end: (tx, v) => tx.findOuterBoundaryLeaf(tx.highestValue(v), 1),
1756
+ start: (tx, v2) => tx.findLowerBoundLeaf(tx.lowestValue(v2)),
1757
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(tx.highestValue(v2), 1),
1758
1758
  direction: 1,
1759
1759
  earlyTerminate: false
1760
1760
  },
1761
1761
  desc: {
1762
- start: (tx, v) => tx.findOuterBoundaryLeaf(tx.highestValue(v), 1),
1763
- end: (tx, v) => tx.findOuterBoundaryLeaf(tx.lowestValue(v), -1),
1762
+ start: (tx, v2) => tx.findOuterBoundaryLeaf(tx.highestValue(v2), 1),
1763
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(tx.lowestValue(v2), -1),
1764
1764
  direction: -1,
1765
1765
  earlyTerminate: false
1766
1766
  }
1767
1767
  },
1768
1768
  primaryGt: {
1769
1769
  asc: {
1770
- start: (tx, v) => tx.findUpperBoundLeaf(v[0]),
1770
+ start: (tx, v2) => tx.findUpperBoundLeaf(v2[0]),
1771
1771
  end: () => null,
1772
1772
  direction: 1,
1773
1773
  earlyTerminate: false
1774
1774
  },
1775
1775
  desc: {
1776
1776
  start: (tx) => tx.rightestNode(),
1777
- end: (tx, v) => tx.findOuterBoundaryLeaf(v[0], -1),
1777
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(v2[0], -1),
1778
1778
  direction: -1,
1779
1779
  earlyTerminate: true
1780
1780
  }
1781
1781
  },
1782
1782
  primaryGte: {
1783
1783
  asc: {
1784
- start: (tx, v) => tx.findLowerBoundLeaf(v[0]),
1784
+ start: (tx, v2) => tx.findLowerBoundLeaf(v2[0]),
1785
1785
  end: () => null,
1786
1786
  direction: 1,
1787
1787
  earlyTerminate: false
1788
1788
  },
1789
1789
  desc: {
1790
1790
  start: (tx) => tx.rightestNode(),
1791
- end: (tx, v) => tx.findOuterBoundaryLeaf(v[0], -1),
1791
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(v2[0], -1),
1792
1792
  direction: -1,
1793
1793
  earlyTerminate: true
1794
1794
  }
@@ -1796,12 +1796,12 @@ var require_cjs = __commonJS({
1796
1796
  primaryLt: {
1797
1797
  asc: {
1798
1798
  start: (tx) => tx.leftestNode(),
1799
- end: (tx, v) => tx.findOuterBoundaryLeaf(v[0], 1),
1799
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(v2[0], 1),
1800
1800
  direction: 1,
1801
1801
  earlyTerminate: true
1802
1802
  },
1803
1803
  desc: {
1804
- start: (tx, v) => tx.findLowerBoundLeaf(v[0]),
1804
+ start: (tx, v2) => tx.findLowerBoundLeaf(v2[0]),
1805
1805
  end: () => null,
1806
1806
  direction: -1,
1807
1807
  earlyTerminate: false
@@ -1810,12 +1810,12 @@ var require_cjs = __commonJS({
1810
1810
  primaryLte: {
1811
1811
  asc: {
1812
1812
  start: (tx) => tx.leftestNode(),
1813
- end: (tx, v) => tx.findOuterBoundaryLeaf(v[0], 1),
1813
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(v2[0], 1),
1814
1814
  direction: 1,
1815
1815
  earlyTerminate: true
1816
1816
  },
1817
1817
  desc: {
1818
- start: (tx, v) => tx.findUpperBoundLeaf(v[0]),
1818
+ start: (tx, v2) => tx.findUpperBoundLeaf(v2[0]),
1819
1819
  end: () => null,
1820
1820
  direction: -1,
1821
1821
  earlyTerminate: false
@@ -1823,14 +1823,14 @@ var require_cjs = __commonJS({
1823
1823
  },
1824
1824
  primaryEqual: {
1825
1825
  asc: {
1826
- start: (tx, v) => tx.findLowerBoundLeaf(v[0]),
1827
- end: (tx, v) => tx.findOuterBoundaryLeaf(v[0], 1),
1826
+ start: (tx, v2) => tx.findLowerBoundLeaf(v2[0]),
1827
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(v2[0], 1),
1828
1828
  direction: 1,
1829
1829
  earlyTerminate: true
1830
1830
  },
1831
1831
  desc: {
1832
- start: (tx, v) => tx.findUpperBoundLeaf(v[0]),
1833
- end: (tx, v) => tx.findOuterBoundaryLeaf(v[0], -1),
1832
+ start: (tx, v2) => tx.findUpperBoundLeaf(v2[0]),
1833
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(v2[0], -1),
1834
1834
  direction: -1,
1835
1835
  earlyTerminate: true
1836
1836
  }
@@ -1851,14 +1851,14 @@ var require_cjs = __commonJS({
1851
1851
  },
1852
1852
  primaryOr: {
1853
1853
  asc: {
1854
- start: (tx, v) => tx.findLowerBoundLeaf(tx.lowestPrimaryValue(v)),
1855
- end: (tx, v) => tx.findOuterBoundaryLeaf(tx.highestPrimaryValue(v), 1),
1854
+ start: (tx, v2) => tx.findLowerBoundLeaf(tx.lowestPrimaryValue(v2)),
1855
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(tx.highestPrimaryValue(v2), 1),
1856
1856
  direction: 1,
1857
1857
  earlyTerminate: false
1858
1858
  },
1859
1859
  desc: {
1860
- start: (tx, v) => tx.findUpperBoundLeaf(tx.highestPrimaryValue(v)),
1861
- end: (tx, v) => tx.findOuterBoundaryLeaf(tx.lowestPrimaryValue(v), -1),
1860
+ start: (tx, v2) => tx.findUpperBoundLeaf(tx.highestPrimaryValue(v2)),
1861
+ end: (tx, v2) => tx.findOuterBoundaryLeaf(tx.lowestPrimaryValue(v2), -1),
1862
1862
  direction: -1,
1863
1863
  earlyTerminate: false
1864
1864
  }
@@ -2085,27 +2085,27 @@ var require_cjs = __commonJS({
2085
2085
  this.comparator = comparator;
2086
2086
  this.option = option ?? {};
2087
2087
  }
2088
- ensureValues(v) {
2089
- if (!Array.isArray(v)) {
2090
- v = [v];
2088
+ ensureValues(v2) {
2089
+ if (!Array.isArray(v2)) {
2090
+ v2 = [v2];
2091
2091
  }
2092
- return v;
2092
+ return v2;
2093
2093
  }
2094
- lowestValue(v) {
2094
+ lowestValue(v2) {
2095
2095
  const i = 0;
2096
- return [...v].sort((a, b) => this.comparator.asc(a, b))[i];
2096
+ return [...v2].sort((a, b2) => this.comparator.asc(a, b2))[i];
2097
2097
  }
2098
- highestValue(v) {
2099
- const i = v.length - 1;
2100
- return [...v].sort((a, b) => this.comparator.asc(a, b))[i];
2098
+ highestValue(v2) {
2099
+ const i = v2.length - 1;
2100
+ return [...v2].sort((a, b2) => this.comparator.asc(a, b2))[i];
2101
2101
  }
2102
- lowestPrimaryValue(v) {
2102
+ lowestPrimaryValue(v2) {
2103
2103
  const i = 0;
2104
- return [...v].sort((a, b) => this.comparator.primaryAsc(a, b))[i];
2104
+ return [...v2].sort((a, b2) => this.comparator.primaryAsc(a, b2))[i];
2105
2105
  }
2106
- highestPrimaryValue(v) {
2107
- const i = v.length - 1;
2108
- return [...v].sort((a, b) => this.comparator.primaryAsc(a, b))[i];
2106
+ highestPrimaryValue(v2) {
2107
+ const i = v2.length - 1;
2108
+ return [...v2].sort((a, b2) => this.comparator.primaryAsc(a, b2))[i];
2109
2109
  }
2110
2110
  /**
2111
2111
  * Returns the result entries of the transaction.
@@ -2299,13 +2299,13 @@ var require_cjs = __commonJS({
2299
2299
  const midValue = parentNode.values[mid];
2300
2300
  parentNode.values = parentNode.values.slice(0, mid);
2301
2301
  parentNode.keys = parentNode.keys.slice(0, mid + 1);
2302
- for (const k of parentNode.keys) {
2303
- const n = this._cloneNode(this.getNode(k));
2302
+ for (const k2 of parentNode.keys) {
2303
+ const n = this._cloneNode(this.getNode(k2));
2304
2304
  n.parent = parentNode.id;
2305
2305
  this._updateNode(n);
2306
2306
  }
2307
- for (const k of newSiblingNodeRecursive.keys) {
2308
- const n = this._cloneNode(this.getNode(k));
2307
+ for (const k2 of newSiblingNodeRecursive.keys) {
2308
+ const n = this._cloneNode(this.getNode(k2));
2309
2309
  n.parent = newSiblingNodeRecursive.id;
2310
2310
  this._updateNode(n);
2311
2311
  }
@@ -2519,11 +2519,11 @@ var require_cjs = __commonJS({
2519
2519
  let count = 0;
2520
2520
  const intersection = filterValues && filterValues.size > 0 ? filterValues : null;
2521
2521
  for (const pair of generator) {
2522
- const [k, v] = pair;
2523
- if (intersection && !intersection.has(k)) {
2522
+ const [k2, v2] = pair;
2523
+ if (intersection && !intersection.has(k2)) {
2524
2524
  continue;
2525
2525
  }
2526
- if (this.verify(v, condition)) {
2526
+ if (this.verify(v2, condition)) {
2527
2527
  yield pair;
2528
2528
  count++;
2529
2529
  if (limit !== void 0 && count >= limit) {
@@ -2571,7 +2571,7 @@ var require_cjs = __commonJS({
2571
2571
  }
2572
2572
  batchInsert(entries) {
2573
2573
  if (entries.length === 0) return;
2574
- const sorted = [...entries].sort((a, b) => this.comparator.asc(a[1], b[1]));
2574
+ const sorted = [...entries].sort((a, b2) => this.comparator.asc(a[1], b2[1]));
2575
2575
  let currentLeaf = null;
2576
2576
  let modified = false;
2577
2577
  for (const [key, value] of sorted) {
@@ -2979,11 +2979,11 @@ var require_cjs = __commonJS({
2979
2979
  readQueue;
2980
2980
  writeQueue;
2981
2981
  static async CatchError(promise) {
2982
- return await promise.then((v) => [void 0, v]).catch((err) => [err]);
2982
+ return await promise.then((v2) => [void 0, v2]).catch((err) => [err]);
2983
2983
  }
2984
- static IsRangeOverlap(a, b) {
2984
+ static IsRangeOverlap(a, b2) {
2985
2985
  const [start1, end1] = a;
2986
- const [start2, end2] = b;
2986
+ const [start2, end2] = b2;
2987
2987
  if (end1 <= start2 || end2 <= start1) {
2988
2988
  return false;
2989
2989
  }
@@ -3019,10 +3019,10 @@ var require_cjs = __commonJS({
3019
3019
  rangeOverlapping(tasks, range) {
3020
3020
  return Array.from(tasks.values()).some((t) => _Ryoiki2.IsRangeOverlap(t.range, range));
3021
3021
  }
3022
- isSameRange(a, b) {
3022
+ isSameRange(a, b2) {
3023
3023
  const [a1, a2] = a;
3024
- const [b1, b2] = b;
3025
- return a1 === b1 && a2 === b2;
3024
+ const [b1, b22] = b2;
3025
+ return a1 === b1 && a2 === b22;
3026
3026
  }
3027
3027
  fetchUnitAndRun(queue, workspaces) {
3028
3028
  for (const [id, unit] of queue) {
@@ -3085,9 +3085,9 @@ var require_cjs = __commonJS({
3085
3085
  if (timeoutId !== null) {
3086
3086
  clearTimeout(timeoutId);
3087
3087
  }
3088
- const [err, v] = await _Ryoiki2.CatchError(task(id));
3088
+ const [err, v2] = await _Ryoiki2.CatchError(task(id));
3089
3089
  if (err) reject(err);
3090
- else resolve(v);
3090
+ else resolve(v2);
3091
3091
  };
3092
3092
  const fetch = () => {
3093
3093
  this.fetchUnitAndRun(this.readQueue, this.readings);
@@ -3385,13 +3385,13 @@ var require_cjs = __commonJS({
3385
3385
  const midValue = parentNode.values[mid];
3386
3386
  parentNode.values = parentNode.values.slice(0, mid);
3387
3387
  parentNode.keys = parentNode.keys.slice(0, mid + 1);
3388
- for (const k of parentNode.keys) {
3389
- const n = this._cloneNode(await this.getNode(k));
3388
+ for (const k2 of parentNode.keys) {
3389
+ const n = this._cloneNode(await this.getNode(k2));
3390
3390
  n.parent = parentNode.id;
3391
3391
  await this._updateNode(n);
3392
3392
  }
3393
- for (const k of newSiblingNodeRecursive.keys) {
3394
- const n = this._cloneNode(await this.getNode(k));
3393
+ for (const k2 of newSiblingNodeRecursive.keys) {
3394
+ const n = this._cloneNode(await this.getNode(k2));
3395
3395
  n.parent = newSiblingNodeRecursive.id;
3396
3396
  await this._updateNode(n);
3397
3397
  }
@@ -3614,11 +3614,11 @@ var require_cjs = __commonJS({
3614
3614
  let count = 0;
3615
3615
  const intersection = filterValues && filterValues.size > 0 ? filterValues : null;
3616
3616
  for await (const pair of generator) {
3617
- const [k, v] = pair;
3618
- if (intersection && !intersection.has(k)) {
3617
+ const [k2, v2] = pair;
3618
+ if (intersection && !intersection.has(k2)) {
3619
3619
  continue;
3620
3620
  }
3621
- if (this.verify(v, condition)) {
3621
+ if (this.verify(v2, condition)) {
3622
3622
  yield pair;
3623
3623
  count++;
3624
3624
  if (limit !== void 0 && count >= limit) {
@@ -3669,7 +3669,7 @@ var require_cjs = __commonJS({
3669
3669
  async batchInsert(entries) {
3670
3670
  if (entries.length === 0) return;
3671
3671
  return this.writeLock(0, async () => {
3672
- const sorted = [...entries].sort((a, b) => this.comparator.asc(a[1], b[1]));
3672
+ const sorted = [...entries].sort((a, b2) => this.comparator.asc(a[1], b2[1]));
3673
3673
  let currentLeaf = null;
3674
3674
  let modified = false;
3675
3675
  for (const [key, value] of sorted) {
@@ -4208,11 +4208,11 @@ var require_cjs = __commonJS({
4208
4208
  readQueue;
4209
4209
  writeQueue;
4210
4210
  static async CatchError(promise) {
4211
- return await promise.then((v) => [void 0, v]).catch((err) => [err]);
4211
+ return await promise.then((v2) => [void 0, v2]).catch((err) => [err]);
4212
4212
  }
4213
- static IsRangeOverlap(a, b) {
4213
+ static IsRangeOverlap(a, b2) {
4214
4214
  const [start1, end1] = a;
4215
- const [start2, end2] = b;
4215
+ const [start2, end2] = b2;
4216
4216
  if (end1 <= start2 || end2 <= start1) {
4217
4217
  return false;
4218
4218
  }
@@ -4248,10 +4248,10 @@ var require_cjs = __commonJS({
4248
4248
  rangeOverlapping(tasks, range) {
4249
4249
  return Array.from(tasks.values()).some((t) => _Ryoiki3.IsRangeOverlap(t.range, range));
4250
4250
  }
4251
- isSameRange(a, b) {
4251
+ isSameRange(a, b2) {
4252
4252
  const [a1, a2] = a;
4253
- const [b1, b2] = b;
4254
- return a1 === b1 && a2 === b2;
4253
+ const [b1, b22] = b2;
4254
+ return a1 === b1 && a2 === b22;
4255
4255
  }
4256
4256
  fetchUnitAndRun(queue, workspaces) {
4257
4257
  for (const [id, unit] of queue) {
@@ -4314,9 +4314,9 @@ var require_cjs = __commonJS({
4314
4314
  if (timeoutId !== null) {
4315
4315
  clearTimeout(timeoutId);
4316
4316
  }
4317
- const [err, v] = await _Ryoiki3.CatchError(task(id));
4317
+ const [err, v2] = await _Ryoiki3.CatchError(task(id));
4318
4318
  if (err) reject(err);
4319
- else resolve(v);
4319
+ else resolve(v2);
4320
4320
  };
4321
4321
  const fetch = () => {
4322
4322
  this.fetchUnitAndRun(this.readQueue, this.readings);
@@ -5721,11 +5721,11 @@ var require_cjs = __commonJS({
5721
5721
  readQueue;
5722
5722
  writeQueue;
5723
5723
  static async CatchError(promise) {
5724
- return await promise.then((v) => [void 0, v]).catch((err) => [err]);
5724
+ return await promise.then((v2) => [void 0, v2]).catch((err) => [err]);
5725
5725
  }
5726
- static IsRangeOverlap(a, b) {
5726
+ static IsRangeOverlap(a, b2) {
5727
5727
  const [start1, end1] = a;
5728
- const [start2, end2] = b;
5728
+ const [start2, end2] = b2;
5729
5729
  if (end1 <= start2 || end2 <= start1) {
5730
5730
  return false;
5731
5731
  }
@@ -5761,10 +5761,10 @@ var require_cjs = __commonJS({
5761
5761
  rangeOverlapping(tasks, range) {
5762
5762
  return Array.from(tasks.values()).some((t) => _Ryoiki4.IsRangeOverlap(t.range, range));
5763
5763
  }
5764
- isSameRange(a, b) {
5764
+ isSameRange(a, b2) {
5765
5765
  const [a1, a2] = a;
5766
- const [b1, b2] = b;
5767
- return a1 === b1 && a2 === b2;
5766
+ const [b1, b22] = b2;
5767
+ return a1 === b1 && a2 === b22;
5768
5768
  }
5769
5769
  fetchUnitAndRun(queue, workspaces) {
5770
5770
  for (const [id, unit] of queue) {
@@ -5827,9 +5827,9 @@ var require_cjs = __commonJS({
5827
5827
  if (timeoutId !== null) {
5828
5828
  clearTimeout(timeoutId);
5829
5829
  }
5830
- const [err, v] = await _Ryoiki4.CatchError(task(id));
5830
+ const [err, v2] = await _Ryoiki4.CatchError(task(id));
5831
5831
  if (err) reject(err);
5832
- else resolve(v);
5832
+ else resolve(v2);
5833
5833
  };
5834
5834
  const fetch = () => {
5835
5835
  this.fetchUnitAndRun(this.readQueue, this.readings);
@@ -6465,7 +6465,7 @@ var require_cjs = __commonJS({
6465
6465
  (function makeTable() {
6466
6466
  for (let i = 0; i < 256; i++) {
6467
6467
  let c = i;
6468
- for (let k = 0; k < 8; k++) {
6468
+ for (let k2 = 0; k2 < 8; k2++) {
6469
6469
  c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;
6470
6470
  }
6471
6471
  CRC_TABLE[i] = c;
@@ -8149,7 +8149,7 @@ var require_cjs = __commonJS({
8149
8149
  if (this.fd === null) {
8150
8150
  this.open();
8151
8151
  }
8152
- const sortedPageIds = Array.from(pages.keys()).sort((a, b) => a - b);
8152
+ const sortedPageIds = Array.from(pages.keys()).sort((a, b2) => a - b2);
8153
8153
  for (const pageId of sortedPageIds) {
8154
8154
  const data = pages.get(pageId);
8155
8155
  this.view.setUint32(0, pageId, true);
@@ -8330,7 +8330,7 @@ var require_cjs = __commonJS({
8330
8330
  return;
8331
8331
  }
8332
8332
  const snapshot = new Map(this.dirtyPages);
8333
- const sortedPageIds = Array.from(snapshot.keys()).sort((a, b) => a - b);
8333
+ const sortedPageIds = Array.from(snapshot.keys()).sort((a, b2) => a - b2);
8334
8334
  for (const pageId of sortedPageIds) {
8335
8335
  const data = snapshot.get(pageId);
8336
8336
  const position = pageId * this.pageSize;
@@ -8347,7 +8347,7 @@ var require_cjs = __commonJS({
8347
8347
  if (pages.size === 0) {
8348
8348
  return;
8349
8349
  }
8350
- const sortedPageIds = Array.from(pages.keys()).sort((a, b) => a - b);
8350
+ const sortedPageIds = Array.from(pages.keys()).sort((a, b2) => a - b2);
8351
8351
  for (const pageId of sortedPageIds) {
8352
8352
  const data = pages.get(pageId);
8353
8353
  const position = pageId * this.pageSize;
@@ -9494,7 +9494,7 @@ var require_cjs = __commonJS({
9494
9494
  async fetchRowsByRids(collections, itemsCount, tx) {
9495
9495
  const result = new Array(itemsCount).fill(null);
9496
9496
  if (itemsCount === 0) return result;
9497
- const sortedPageIds = Array.from(collections.keys()).sort((a, b) => a - b);
9497
+ const sortedPageIds = Array.from(collections.keys()).sort((a, b2) => a - b2);
9498
9498
  await Promise.all(sortedPageIds.map(async (pageId) => {
9499
9499
  const items = collections.get(pageId);
9500
9500
  const page = await this.pfs.get(pageId, tx);
@@ -10394,12 +10394,12 @@ var import_dataply4 = __toESM(require_cjs());
10394
10394
  // src/core/bptree/documentComparator.ts
10395
10395
  var import_dataply = __toESM(require_cjs());
10396
10396
  var DocumentValueComparator = class extends import_dataply.ValueComparator {
10397
- primaryAsc(a, b) {
10398
- return this._compareValue(a.v, b.v);
10397
+ primaryAsc(a, b2) {
10398
+ return this._compareValue(a.v, b2.v);
10399
10399
  }
10400
- asc(a, b) {
10401
- const diff = this._compareValue(a.v, b.v);
10402
- return diff === 0 ? a.k - b.k : diff;
10400
+ asc(a, b2) {
10401
+ const diff = this._compareValue(a.v, b2.v);
10402
+ return diff === 0 ? a.k - b2.k : diff;
10403
10403
  }
10404
10404
  match(value) {
10405
10405
  return value.v + "";
@@ -10407,24 +10407,24 @@ var DocumentValueComparator = class extends import_dataply.ValueComparator {
10407
10407
  /**
10408
10408
  * 두 Primitive 값을 비교합니다.
10409
10409
  */
10410
- _compareDiff(a, b) {
10411
- if (typeof a === "string" && typeof b === "string") {
10412
- return a.localeCompare(b);
10410
+ _compareDiff(a, b2) {
10411
+ if (typeof a === "string" && typeof b2 === "string") {
10412
+ return a.localeCompare(b2);
10413
10413
  }
10414
- return +a - +b;
10414
+ return +a - +b2;
10415
10415
  }
10416
10416
  /**
10417
10417
  * 두 v 값을 비교합니다. v는 Primitive 또는 Primitive[] (복합 인덱스)일 수 있습니다.
10418
10418
  * 배열인 경우 element-by-element로 비교합니다.
10419
10419
  */
10420
- _compareValue(a, b) {
10420
+ _compareValue(a, b2) {
10421
10421
  const aArr = Array.isArray(a);
10422
- const bArr = Array.isArray(b);
10422
+ const bArr = Array.isArray(b2);
10423
10423
  if (!aArr && !bArr) {
10424
- return this._compareDiff(a, b);
10424
+ return this._compareDiff(a, b2);
10425
10425
  }
10426
10426
  const aList = aArr ? a : [a];
10427
- const bList = bArr ? b : [b];
10427
+ const bList = bArr ? b2 : [b2];
10428
10428
  const len = Math.min(aList.length, bList.length);
10429
10429
  for (let i = 0; i < len; i++) {
10430
10430
  const diff = this._compareDiff(aList[i], bList[i]);
@@ -10703,7 +10703,7 @@ var Optimizer = class {
10703
10703
  );
10704
10704
  if (candidate) {
10705
10705
  const hasUncoveredFilters = ![...queryFields].every(
10706
- (f) => candidate.coveredFields.includes(f)
10706
+ (f2) => candidate.coveredFields.includes(f2)
10707
10707
  );
10708
10708
  candidates.push({
10709
10709
  ...candidate,
@@ -10750,10 +10750,10 @@ var Optimizer = class {
10750
10750
  rollback();
10751
10751
  return null;
10752
10752
  }
10753
- candidates.sort((a, b) => {
10754
- if (a.cost !== b.cost) return a.cost - b.cost;
10753
+ candidates.sort((a, b2) => {
10754
+ if (a.cost !== b2.cost) return a.cost - b2.cost;
10755
10755
  const aConfig = this.api.indexManager.registeredIndices.get(a.indexName);
10756
- const bConfig = this.api.indexManager.registeredIndices.get(b.indexName);
10756
+ const bConfig = this.api.indexManager.registeredIndices.get(b2.indexName);
10757
10757
  const aFieldCount = aConfig ? Array.isArray(aConfig.fields) ? aConfig.fields.length : 1 : 0;
10758
10758
  const bFieldCount = bConfig ? Array.isArray(bConfig.fields) ? bConfig.fields.length : 1 : 0;
10759
10759
  return aFieldCount - bFieldCount;
@@ -10767,7 +10767,7 @@ var Optimizer = class {
10767
10767
  let isSubset = false;
10768
10768
  for (let j = 0, oLen = others.length; j < oLen; j++) {
10769
10769
  const better = others[j];
10770
- if (candidate.coveredFields.every((f) => better.coveredFields.includes(f))) {
10770
+ if (candidate.coveredFields.every((f2) => better.coveredFields.includes(f2))) {
10771
10771
  isSubset = true;
10772
10772
  break;
10773
10773
  }
@@ -10889,19 +10889,19 @@ var QueryManager = class {
10889
10889
  for (const operator in conditions) {
10890
10890
  const before = operator;
10891
10891
  const after = this.operatorConverters[before];
10892
- const v = conditions[before];
10892
+ const v2 = conditions[before];
10893
10893
  if (!after) {
10894
10894
  if (before === "match") {
10895
- newConditions[before] = v;
10895
+ newConditions[before] = v2;
10896
10896
  }
10897
10897
  continue;
10898
10898
  }
10899
- if (before === "or" && Array.isArray(v)) {
10900
- newConditions[after] = v.map((val) => ({ v: val }));
10899
+ if (before === "or" && Array.isArray(v2)) {
10900
+ newConditions[after] = v2.map((val) => ({ v: val }));
10901
10901
  } else if (before === "like") {
10902
- newConditions[after] = v;
10902
+ newConditions[after] = v2;
10903
10903
  } else {
10904
- newConditions[after] = { v };
10904
+ newConditions[after] = { v: v2 };
10905
10905
  }
10906
10906
  }
10907
10907
  }
@@ -11094,29 +11094,29 @@ var QueryManager = class {
11094
11094
  const rawResults = await this.api.selectMany(new Float64Array(pks), false, tx);
11095
11095
  let chunkTotalSize = 0;
11096
11096
  for (let j = 0, len = rawResults.length; j < len; j++) {
11097
- const s = rawResults[j];
11098
- if (!s) continue;
11099
- const doc = JSON.parse(s);
11100
- chunkTotalSize += s.length * 2;
11097
+ const s2 = rawResults[j];
11098
+ if (!s2) continue;
11099
+ const doc = JSON.parse(s2);
11100
+ chunkTotalSize += s2.length * 2;
11101
11101
  if (isFts && !this.verifyFts(doc, ftsConditions)) continue;
11102
11102
  if (isCompositeVerify && this.verifyCompositeConditions(doc, compositeVerifyConditions) === false) continue;
11103
11103
  if (isVerifyOthers) {
11104
11104
  const flatDoc = this.api.flattenDocument(doc);
11105
11105
  let passed = true;
11106
- for (let k = 0, kLen = verifyOthers.length; k < kLen; k++) {
11107
- const other = verifyOthers[k];
11106
+ for (let k2 = 0, kLen = verifyOthers.length; k2 < kLen; k2++) {
11107
+ const other = verifyOthers[k2];
11108
11108
  const coveredFields = other.coveredFields;
11109
11109
  let fieldValue;
11110
11110
  if (coveredFields && coveredFields.length > 1) {
11111
11111
  const values = [];
11112
11112
  let hasMissing = false;
11113
- for (let f = 0, fLen = coveredFields.length; f < fLen; f++) {
11114
- const v = flatDoc[coveredFields[f]];
11115
- if (v === void 0) {
11113
+ for (let f2 = 0, fLen = coveredFields.length; f2 < fLen; f2++) {
11114
+ const v2 = flatDoc[coveredFields[f2]];
11115
+ if (v2 === void 0) {
11116
11116
  hasMissing = true;
11117
11117
  break;
11118
11118
  }
11119
- values.push(v);
11119
+ values.push(v2);
11120
11120
  }
11121
11121
  if (hasMissing) {
11122
11122
  passed = false;
@@ -11222,9 +11222,9 @@ var QueryManager = class {
11222
11222
  const topK = limit === Infinity ? Infinity : offset + limit;
11223
11223
  let heap = null;
11224
11224
  if (topK !== Infinity) {
11225
- heap = new BinaryHeap((a, b) => {
11225
+ heap = new BinaryHeap((a, b2) => {
11226
11226
  const aVal = a[orderByField] ?? a._id;
11227
- const bVal = b[orderByField] ?? b._id;
11227
+ const bVal = b2[orderByField] ?? b2._id;
11228
11228
  const cmp = aVal < bVal ? -1 : aVal > bVal ? 1 : 0;
11229
11229
  return sortOrder === "asc" ? -cmp : cmp;
11230
11230
  });
@@ -11256,9 +11256,9 @@ var QueryManager = class {
11256
11256
  }
11257
11257
  }
11258
11258
  const finalDocs = heap ? heap.toArray() : results;
11259
- finalDocs.sort((a, b) => {
11259
+ finalDocs.sort((a, b2) => {
11260
11260
  const aVal = a[orderByField] ?? a._id;
11261
- const bVal = b[orderByField] ?? b._id;
11261
+ const bVal = b2[orderByField] ?? b2._id;
11262
11262
  const cmp = aVal < bVal ? -1 : aVal > bVal ? 1 : 0;
11263
11263
  return sortOrder === "asc" ? cmp : -cmp;
11264
11264
  });
@@ -11596,8 +11596,8 @@ var IndexManager = class {
11596
11596
  const stream = idTree.whereStream({
11597
11597
  primaryGte: { v: 0 }
11598
11598
  });
11599
- for await (const [k, complexValue] of stream) {
11600
- const doc = await this.api.getDocument(k, tx2);
11599
+ for await (const [k2, complexValue] of stream) {
11600
+ const doc = await this.api.getDocument(k2, tx2);
11601
11601
  if (!doc) continue;
11602
11602
  const flatDoc = this.api.flattenDocument(doc);
11603
11603
  for (let i = 0, len = backfillTargets.length; i < len; i++) {
@@ -11608,23 +11608,23 @@ var IndexManager = class {
11608
11608
  const btx = indexTxMap[indexName];
11609
11609
  if (config.type === "fts") {
11610
11610
  const primaryField = this.getPrimaryField(config);
11611
- const v = flatDoc[primaryField];
11612
- if (v === void 0 || typeof v !== "string") continue;
11611
+ const v2 = flatDoc[primaryField];
11612
+ if (v2 === void 0 || typeof v2 !== "string") continue;
11613
11613
  const ftsConfig = this.getFtsConfig(config);
11614
- const tokens = ftsConfig ? tokenize(v, ftsConfig) : [v];
11614
+ const tokens = ftsConfig ? tokenize(v2, ftsConfig) : [v2];
11615
11615
  const batchInsertData = [];
11616
11616
  for (let i2 = 0, len2 = tokens.length; i2 < len2; i2++) {
11617
11617
  const token = tokens[i2];
11618
- const keyToInsert = this.getTokenKey(k, token);
11619
- const entry = { k, v: token };
11618
+ const keyToInsert = this.getTokenKey(k2, token);
11619
+ const entry = { k: k2, v: token };
11620
11620
  batchInsertData.push([keyToInsert, entry]);
11621
11621
  }
11622
11622
  await btx.batchInsert(batchInsertData);
11623
11623
  } else {
11624
11624
  const indexVal = this.getIndexValue(config, flatDoc);
11625
11625
  if (indexVal === void 0) continue;
11626
- const entry = { k, v: indexVal };
11627
- const batchInsertData = [[k, entry]];
11626
+ const entry = { k: k2, v: indexVal };
11627
+ const batchInsertData = [[k2, entry]];
11628
11628
  await btx.batchInsert(batchInsertData);
11629
11629
  }
11630
11630
  }
@@ -11740,14 +11740,14 @@ var IndexManager = class {
11740
11740
  getIndexValue(config, flatDoc) {
11741
11741
  if (config.type !== "btree") return void 0;
11742
11742
  if (config.fields.length === 1) {
11743
- const v = flatDoc[config.fields[0]];
11744
- return v === void 0 ? void 0 : v;
11743
+ const v2 = flatDoc[config.fields[0]];
11744
+ return v2 === void 0 ? void 0 : v2;
11745
11745
  }
11746
11746
  const values = [];
11747
11747
  for (let i = 0, len = config.fields.length; i < len; i++) {
11748
- const v = flatDoc[config.fields[i]];
11749
- if (v === void 0) return void 0;
11750
- values.push(v);
11748
+ const v2 = flatDoc[config.fields[i]];
11749
+ if (v2 === void 0) return void 0;
11750
+ values.push(v2);
11751
11751
  }
11752
11752
  return values;
11753
11753
  }
@@ -11771,6 +11771,64 @@ async function catchPromise(promise) {
11771
11771
  return promise.then((res) => [void 0, res]).catch((reason) => [reason]);
11772
11772
  }
11773
11773
 
11774
+ // src/utils/DeadlineChunker.ts
11775
+ var DeadlineChunker = class {
11776
+ /**
11777
+ * 이벤트 루프를 막을 최대 허용 시간
11778
+ */
11779
+ targetMs;
11780
+ /**
11781
+ * 현재 chunk size
11782
+ */
11783
+ chunkSize;
11784
+ /**
11785
+ * Exponential Weighted Moving Average
11786
+ */
11787
+ ewmaMs;
11788
+ /**
11789
+ * EWMA 평활화 계수
11790
+ */
11791
+ alpha;
11792
+ constructor(targetMs = 14) {
11793
+ this.targetMs = targetMs;
11794
+ this.chunkSize = 50;
11795
+ this.ewmaMs = null;
11796
+ this.alpha = 0.3;
11797
+ }
11798
+ /**
11799
+ * EWMA 평활화 계수를 사용하여 평균 처리 시간을 업데이트합니다.
11800
+ */
11801
+ _updateEstimate(elapsed, count) {
11802
+ const msPerItem = elapsed / count;
11803
+ this.ewmaMs = this.ewmaMs === null ? msPerItem : this.alpha * msPerItem + (1 - this.alpha) * this.ewmaMs;
11804
+ }
11805
+ /**
11806
+ * 현재 chunk size를 업데이트합니다.
11807
+ */
11808
+ _nextChunkSize() {
11809
+ if (!this.ewmaMs || this.ewmaMs === 0) return this.chunkSize;
11810
+ const next = Math.floor(this.targetMs / this.ewmaMs);
11811
+ return Math.max(1, Math.min(next, 5e3));
11812
+ }
11813
+ /**
11814
+ * 주어진 items를 chunk로 분할하여 처리합니다.
11815
+ */
11816
+ async processInChunks(items, processFn) {
11817
+ let i = 0;
11818
+ let len = items.length;
11819
+ while (i < len) {
11820
+ const chunk = items.slice(i, i + this.chunkSize);
11821
+ const start = performance.now();
11822
+ await processFn(chunk);
11823
+ const elapsed = performance.now() - start;
11824
+ this._updateEstimate(elapsed, chunk.length);
11825
+ this.chunkSize = this._nextChunkSize();
11826
+ i += chunk.length;
11827
+ await new Promise((resolve) => setImmediate(resolve));
11828
+ }
11829
+ }
11830
+ };
11831
+
11774
11832
  // src/core/MutationManager.ts
11775
11833
  var MutationManager = class {
11776
11834
  constructor(api) {
@@ -11799,10 +11857,10 @@ var MutationManager = class {
11799
11857
  if (!tree) continue;
11800
11858
  if (config.type === "fts") {
11801
11859
  const primaryField = this.api.indexManager.getPrimaryField(config);
11802
- const v = flattenDocument[primaryField];
11803
- if (v === void 0 || typeof v !== "string") continue;
11860
+ const v2 = flattenDocument[primaryField];
11861
+ if (v2 === void 0 || typeof v2 !== "string") continue;
11804
11862
  const ftsConfig = this.api.indexManager.getFtsConfig(config);
11805
- const tokens = ftsConfig ? tokenize(v, ftsConfig) : [v];
11863
+ const tokens = ftsConfig ? tokenize(v2, ftsConfig) : [v2];
11806
11864
  for (let i = 0, len = tokens.length; i < len; i++) {
11807
11865
  const token = tokens[i];
11808
11866
  const keyToInsert = this.api.indexManager.getTokenKey(dpk, token);
@@ -11854,9 +11912,9 @@ var MutationManager = class {
11854
11912
  const ftsConfig = this.api.indexManager.getFtsConfig(config);
11855
11913
  for (let i = 0, len = flattenedData.length; i < len; i++) {
11856
11914
  const item = flattenedData[i];
11857
- const v = item.data[primaryField];
11858
- if (v === void 0 || typeof v !== "string") continue;
11859
- const tokens = ftsConfig ? tokenize(v, ftsConfig) : [v];
11915
+ const v2 = item.data[primaryField];
11916
+ if (v2 === void 0 || typeof v2 !== "string") continue;
11917
+ const tokens = ftsConfig ? tokenize(v2, ftsConfig) : [v2];
11860
11918
  for (let j = 0, tLen = tokens.length; j < tLen; j++) {
11861
11919
  const token = tokens[j];
11862
11920
  batchInsertData.push([this.api.indexManager.getTokenKey(item.pk, token), { k: item.pk, v: token }]);
@@ -11870,10 +11928,13 @@ var MutationManager = class {
11870
11928
  batchInsertData.push([item.pk, { k: item.pk, v: indexVal }]);
11871
11929
  }
11872
11930
  }
11873
- const [error] = await catchPromise(treeTx.batchInsert(batchInsertData));
11874
- if (error) {
11875
- throw error;
11876
- }
11931
+ const chunker = new DeadlineChunker();
11932
+ await chunker.processInChunks(batchInsertData, async (chunk) => {
11933
+ const [error] = await catchPromise(treeTx.batchInsert(chunk));
11934
+ if (error) {
11935
+ throw error;
11936
+ }
11937
+ });
11877
11938
  const res = await treeTx.commit();
11878
11939
  if (!res.success) {
11879
11940
  throw res.error;
@@ -11987,10 +12048,10 @@ var MutationManager = class {
11987
12048
  if (!config) continue;
11988
12049
  if (config.type === "fts") {
11989
12050
  const primaryField = this.api.indexManager.getPrimaryField(config);
11990
- const v = flatDoc[primaryField];
11991
- if (v === void 0 || typeof v !== "string") continue;
12051
+ const v2 = flatDoc[primaryField];
12052
+ if (v2 === void 0 || typeof v2 !== "string") continue;
11992
12053
  const ftsConfig = this.api.indexManager.getFtsConfig(config);
11993
- const tokens = ftsConfig ? tokenize(v, ftsConfig) : [v];
12054
+ const tokens = ftsConfig ? tokenize(v2, ftsConfig) : [v2];
11994
12055
  for (let j = 0, jLen = tokens.length; j < jLen; j++) {
11995
12056
  await tree.delete(this.api.indexManager.getTokenKey(pk, tokens[j]), { k: pk, v: tokens[j] });
11996
12057
  }
@@ -12076,6 +12137,657 @@ var DocumentFormatter = class {
12076
12137
  }
12077
12138
  };
12078
12139
 
12140
+ // node_modules/croner/dist/croner.js
12141
+ function T(s2) {
12142
+ return Date.UTC(s2.y, s2.m - 1, s2.d, s2.h, s2.i, s2.s);
12143
+ }
12144
+ function D(s2, e) {
12145
+ return s2.y === e.y && s2.m === e.m && s2.d === e.d && s2.h === e.h && s2.i === e.i && s2.s === e.s;
12146
+ }
12147
+ function A(s2, e) {
12148
+ let t = new Date(Date.parse(s2));
12149
+ if (isNaN(t)) throw new Error("Invalid ISO8601 passed to timezone parser.");
12150
+ let r = s2.substring(9);
12151
+ return r.includes("Z") || r.includes("+") || r.includes("-") ? b(t.getUTCFullYear(), t.getUTCMonth() + 1, t.getUTCDate(), t.getUTCHours(), t.getUTCMinutes(), t.getUTCSeconds(), "Etc/UTC") : b(t.getFullYear(), t.getMonth() + 1, t.getDate(), t.getHours(), t.getMinutes(), t.getSeconds(), e);
12152
+ }
12153
+ function v(s2, e, t) {
12154
+ return k(A(s2, e), t);
12155
+ }
12156
+ function k(s2, e) {
12157
+ let t = new Date(T(s2)), r = g(t, s2.tz), n = T(s2), i = T(r), a = n - i, o = new Date(t.getTime() + a), h = g(o, s2.tz);
12158
+ if (D(h, s2)) {
12159
+ let u = new Date(o.getTime() - 36e5), d = g(u, s2.tz);
12160
+ return D(d, s2) ? u : o;
12161
+ }
12162
+ let l = new Date(o.getTime() + T(s2) - T(h)), y = g(l, s2.tz);
12163
+ if (D(y, s2)) return l;
12164
+ if (e) throw new Error("Invalid date passed to fromTZ()");
12165
+ return o.getTime() > l.getTime() ? o : l;
12166
+ }
12167
+ function g(s2, e) {
12168
+ let t, r;
12169
+ try {
12170
+ t = new Intl.DateTimeFormat("en-US", { timeZone: e, year: "numeric", month: "numeric", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric", hour12: false }), r = t.formatToParts(s2);
12171
+ } catch (i) {
12172
+ let a = i instanceof Error ? i.message : String(i);
12173
+ throw new RangeError(`toTZ: Invalid timezone '${e}' or date. Please provide a valid IANA timezone (e.g., 'America/New_York', 'Europe/Stockholm'). Original error: ${a}`);
12174
+ }
12175
+ let n = { year: 0, month: 0, day: 0, hour: 0, minute: 0, second: 0 };
12176
+ for (let i of r) (i.type === "year" || i.type === "month" || i.type === "day" || i.type === "hour" || i.type === "minute" || i.type === "second") && (n[i.type] = parseInt(i.value, 10));
12177
+ if (isNaN(n.year) || isNaN(n.month) || isNaN(n.day) || isNaN(n.hour) || isNaN(n.minute) || isNaN(n.second)) throw new Error(`toTZ: Failed to parse all date components from timezone '${e}'. This may indicate an invalid date or timezone configuration. Parsed components: ${JSON.stringify(n)}`);
12178
+ return n.hour === 24 && (n.hour = 0), { y: n.year, m: n.month, d: n.day, h: n.hour, i: n.minute, s: n.second, tz: e };
12179
+ }
12180
+ function b(s2, e, t, r, n, i, a) {
12181
+ return { y: s2, m: e, d: t, h: r, i: n, s: i, tz: a };
12182
+ }
12183
+ var O = [1, 2, 4, 8, 16];
12184
+ var C = class {
12185
+ pattern;
12186
+ timezone;
12187
+ mode;
12188
+ alternativeWeekdays;
12189
+ sloppyRanges;
12190
+ second;
12191
+ minute;
12192
+ hour;
12193
+ day;
12194
+ month;
12195
+ dayOfWeek;
12196
+ year;
12197
+ lastDayOfMonth;
12198
+ lastWeekday;
12199
+ nearestWeekdays;
12200
+ starDOM;
12201
+ starDOW;
12202
+ starYear;
12203
+ useAndLogic;
12204
+ constructor(e, t, r) {
12205
+ this.pattern = e, this.timezone = t, this.mode = r?.mode ?? "auto", this.alternativeWeekdays = r?.alternativeWeekdays ?? false, this.sloppyRanges = r?.sloppyRanges ?? false, this.second = Array(60).fill(0), this.minute = Array(60).fill(0), this.hour = Array(24).fill(0), this.day = Array(31).fill(0), this.month = Array(12).fill(0), this.dayOfWeek = Array(7).fill(0), this.year = Array(1e4).fill(0), this.lastDayOfMonth = false, this.lastWeekday = false, this.nearestWeekdays = Array(31).fill(0), this.starDOM = false, this.starDOW = false, this.starYear = false, this.useAndLogic = false, this.parse();
12206
+ }
12207
+ parse() {
12208
+ if (!(typeof this.pattern == "string" || this.pattern instanceof String)) throw new TypeError("CronPattern: Pattern has to be of type string.");
12209
+ this.pattern.indexOf("@") >= 0 && (this.pattern = this.handleNicknames(this.pattern).trim());
12210
+ let e = this.pattern.match(/\S+/g) || [""], t = e.length;
12211
+ if (e.length < 5 || e.length > 7) throw new TypeError("CronPattern: invalid configuration format ('" + this.pattern + "'), exactly five, six, or seven space separated parts are required.");
12212
+ if (this.mode !== "auto") {
12213
+ let n;
12214
+ switch (this.mode) {
12215
+ case "5-part":
12216
+ n = 5;
12217
+ break;
12218
+ case "6-part":
12219
+ n = 6;
12220
+ break;
12221
+ case "7-part":
12222
+ n = 7;
12223
+ break;
12224
+ case "5-or-6-parts":
12225
+ n = [5, 6];
12226
+ break;
12227
+ case "6-or-7-parts":
12228
+ n = [6, 7];
12229
+ break;
12230
+ default:
12231
+ n = 0;
12232
+ }
12233
+ if (!(Array.isArray(n) ? n.includes(t) : t === n)) {
12234
+ let a = Array.isArray(n) ? n.join(" or ") : n.toString();
12235
+ throw new TypeError(`CronPattern: mode '${this.mode}' requires exactly ${a} parts, but pattern '${this.pattern}' has ${t} parts.`);
12236
+ }
12237
+ }
12238
+ if (e.length === 5 && e.unshift("0"), e.length === 6 && e.push("*"), e[3].toUpperCase() === "LW" ? (this.lastWeekday = true, e[3] = "") : e[3].toUpperCase().indexOf("L") >= 0 && (e[3] = e[3].replace(/L/gi, ""), this.lastDayOfMonth = true), e[3] == "*" && (this.starDOM = true), e[6] == "*" && (this.starYear = true), e[4].length >= 3 && (e[4] = this.replaceAlphaMonths(e[4])), e[5].length >= 3 && (e[5] = this.alternativeWeekdays ? this.replaceAlphaDaysQuartz(e[5]) : this.replaceAlphaDays(e[5])), e[5].startsWith("+") && (this.useAndLogic = true, e[5] = e[5].substring(1), e[5] === "")) throw new TypeError("CronPattern: Day-of-week field cannot be empty after '+' modifier.");
12239
+ switch (e[5] == "*" && (this.starDOW = true), this.pattern.indexOf("?") >= 0 && (e[0] = e[0].replace(/\?/g, "*"), e[1] = e[1].replace(/\?/g, "*"), e[2] = e[2].replace(/\?/g, "*"), e[3] = e[3].replace(/\?/g, "*"), e[4] = e[4].replace(/\?/g, "*"), e[5] = e[5].replace(/\?/g, "*"), e[6] && (e[6] = e[6].replace(/\?/g, "*"))), this.mode) {
12240
+ case "5-part":
12241
+ e[0] = "0", e[6] = "*";
12242
+ break;
12243
+ case "6-part":
12244
+ e[6] = "*";
12245
+ break;
12246
+ case "5-or-6-parts":
12247
+ e[6] = "*";
12248
+ break;
12249
+ case "6-or-7-parts":
12250
+ break;
12251
+ case "7-part":
12252
+ case "auto":
12253
+ break;
12254
+ }
12255
+ this.throwAtIllegalCharacters(e), this.partToArray("second", e[0], 0, 1), this.partToArray("minute", e[1], 0, 1), this.partToArray("hour", e[2], 0, 1), this.partToArray("day", e[3], -1, 1), this.partToArray("month", e[4], -1, 1);
12256
+ let r = this.alternativeWeekdays ? -1 : 0;
12257
+ this.partToArray("dayOfWeek", e[5], r, 63), this.partToArray("year", e[6], 0, 1), !this.alternativeWeekdays && this.dayOfWeek[7] && (this.dayOfWeek[0] = this.dayOfWeek[7]);
12258
+ }
12259
+ partToArray(e, t, r, n) {
12260
+ let i = this[e], a = e === "day" && this.lastDayOfMonth, o = e === "day" && this.lastWeekday;
12261
+ if (t === "" && !a && !o) throw new TypeError("CronPattern: configuration entry " + e + " (" + t + ") is empty, check for trailing spaces.");
12262
+ if (t === "*") return i.fill(n);
12263
+ let h = t.split(",");
12264
+ if (h.length > 1) for (let l = 0; l < h.length; l++) this.partToArray(e, h[l], r, n);
12265
+ else t.indexOf("-") !== -1 && t.indexOf("/") !== -1 ? this.handleRangeWithStepping(t, e, r, n) : t.indexOf("-") !== -1 ? this.handleRange(t, e, r, n) : t.indexOf("/") !== -1 ? this.handleStepping(t, e, r, n) : t !== "" && this.handleNumber(t, e, r, n);
12266
+ }
12267
+ throwAtIllegalCharacters(e) {
12268
+ for (let t = 0; t < e.length; t++) if ((t === 3 ? /[^/*0-9,\-WwLl]+/ : t === 5 ? /[^/*0-9,\-#Ll]+/ : /[^/*0-9,\-]+/).test(e[t])) throw new TypeError("CronPattern: configuration entry " + t + " (" + e[t] + ") contains illegal characters.");
12269
+ }
12270
+ handleNumber(e, t, r, n) {
12271
+ let i = this.extractNth(e, t), a = e.toUpperCase().includes("W");
12272
+ if (t !== "day" && a) throw new TypeError("CronPattern: Nearest weekday modifier (W) only allowed in day-of-month.");
12273
+ a && (t = "nearestWeekdays");
12274
+ let o = parseInt(i[0], 10) + r;
12275
+ if (isNaN(o)) throw new TypeError("CronPattern: " + t + " is not a number: '" + e + "'");
12276
+ this.setPart(t, o, i[1] || n);
12277
+ }
12278
+ setPart(e, t, r) {
12279
+ if (!Object.prototype.hasOwnProperty.call(this, e)) throw new TypeError("CronPattern: Invalid part specified: " + e);
12280
+ if (e === "dayOfWeek") {
12281
+ if (t === 7 && (t = 0), t < 0 || t > 6) throw new RangeError("CronPattern: Invalid value for dayOfWeek: " + t);
12282
+ this.setNthWeekdayOfMonth(t, r);
12283
+ return;
12284
+ }
12285
+ if (e === "second" || e === "minute") {
12286
+ if (t < 0 || t >= 60) throw new RangeError("CronPattern: Invalid value for " + e + ": " + t);
12287
+ } else if (e === "hour") {
12288
+ if (t < 0 || t >= 24) throw new RangeError("CronPattern: Invalid value for " + e + ": " + t);
12289
+ } else if (e === "day" || e === "nearestWeekdays") {
12290
+ if (t < 0 || t >= 31) throw new RangeError("CronPattern: Invalid value for " + e + ": " + t);
12291
+ } else if (e === "month") {
12292
+ if (t < 0 || t >= 12) throw new RangeError("CronPattern: Invalid value for " + e + ": " + t);
12293
+ } else if (e === "year" && (t < 1 || t >= 1e4)) throw new RangeError("CronPattern: Invalid value for " + e + ": " + t + " (supported range: 1-9999)");
12294
+ this[e][t] = r;
12295
+ }
12296
+ validateNotNaN(e, t) {
12297
+ if (isNaN(e)) throw new TypeError(t);
12298
+ }
12299
+ validateRange(e, t, r, n, i) {
12300
+ if (e > t) throw new TypeError("CronPattern: From value is larger than to value: '" + i + "'");
12301
+ if (r !== void 0) {
12302
+ if (r === 0) throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");
12303
+ if (r > this[n].length) throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part (" + this[n].length + ")");
12304
+ }
12305
+ }
12306
+ handleRangeWithStepping(e, t, r, n) {
12307
+ if (e.toUpperCase().includes("W")) throw new TypeError("CronPattern: Syntax error, W is not allowed in ranges with stepping.");
12308
+ let i = this.extractNth(e, t), a = i[0].match(/^(\d+)-(\d+)\/(\d+)$/);
12309
+ if (a === null) throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '" + e + "'");
12310
+ let [, o, h, l] = a, y = parseInt(o, 10) + r, u = parseInt(h, 10) + r, d = parseInt(l, 10);
12311
+ this.validateNotNaN(y, "CronPattern: Syntax error, illegal lower range (NaN)"), this.validateNotNaN(u, "CronPattern: Syntax error, illegal upper range (NaN)"), this.validateNotNaN(d, "CronPattern: Syntax error, illegal stepping: (NaN)"), this.validateRange(y, u, d, t, e);
12312
+ for (let c = y; c <= u; c += d) this.setPart(t, c, i[1] || n);
12313
+ }
12314
+ extractNth(e, t) {
12315
+ let r = e, n;
12316
+ if (r.includes("#")) {
12317
+ if (t !== "dayOfWeek") throw new Error("CronPattern: nth (#) only allowed in day-of-week field");
12318
+ n = r.split("#")[1], r = r.split("#")[0];
12319
+ } else if (r.toUpperCase().endsWith("L")) {
12320
+ if (t !== "dayOfWeek") throw new Error("CronPattern: L modifier only allowed in day-of-week field (use L alone for day-of-month)");
12321
+ n = "L", r = r.slice(0, -1);
12322
+ }
12323
+ return [r, n];
12324
+ }
12325
+ handleRange(e, t, r, n) {
12326
+ if (e.toUpperCase().includes("W")) throw new TypeError("CronPattern: Syntax error, W is not allowed in a range.");
12327
+ let i = this.extractNth(e, t), a = i[0].split("-");
12328
+ if (a.length !== 2) throw new TypeError("CronPattern: Syntax error, illegal range: '" + e + "'");
12329
+ let o = parseInt(a[0], 10) + r, h = parseInt(a[1], 10) + r;
12330
+ this.validateNotNaN(o, "CronPattern: Syntax error, illegal lower range (NaN)"), this.validateNotNaN(h, "CronPattern: Syntax error, illegal upper range (NaN)"), this.validateRange(o, h, void 0, t, e);
12331
+ for (let l = o; l <= h; l++) this.setPart(t, l, i[1] || n);
12332
+ }
12333
+ handleStepping(e, t, r, n) {
12334
+ if (e.toUpperCase().includes("W")) throw new TypeError("CronPattern: Syntax error, W is not allowed in parts with stepping.");
12335
+ let i = this.extractNth(e, t), a = i[0].split("/");
12336
+ if (a.length !== 2) throw new TypeError("CronPattern: Syntax error, illegal stepping: '" + e + "'");
12337
+ if (this.sloppyRanges) a[0] === "" && (a[0] = "*");
12338
+ else {
12339
+ if (a[0] === "") throw new TypeError("CronPattern: Syntax error, stepping with missing prefix ('" + e + "') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.");
12340
+ if (a[0] !== "*") throw new TypeError("CronPattern: Syntax error, stepping with numeric prefix ('" + e + "') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.");
12341
+ }
12342
+ let o = 0;
12343
+ a[0] !== "*" && (o = parseInt(a[0], 10) + r);
12344
+ let h = parseInt(a[1], 10);
12345
+ this.validateNotNaN(h, "CronPattern: Syntax error, illegal stepping: (NaN)"), this.validateRange(0, this[t].length - 1, h, t, e);
12346
+ for (let l = o; l < this[t].length; l += h) this.setPart(t, l, i[1] || n);
12347
+ }
12348
+ replaceAlphaDays(e) {
12349
+ return e.replace(/-sun/gi, "-7").replace(/sun/gi, "0").replace(/mon/gi, "1").replace(/tue/gi, "2").replace(/wed/gi, "3").replace(/thu/gi, "4").replace(/fri/gi, "5").replace(/sat/gi, "6");
12350
+ }
12351
+ replaceAlphaDaysQuartz(e) {
12352
+ return e.replace(/sun/gi, "1").replace(/mon/gi, "2").replace(/tue/gi, "3").replace(/wed/gi, "4").replace(/thu/gi, "5").replace(/fri/gi, "6").replace(/sat/gi, "7");
12353
+ }
12354
+ replaceAlphaMonths(e) {
12355
+ return e.replace(/jan/gi, "1").replace(/feb/gi, "2").replace(/mar/gi, "3").replace(/apr/gi, "4").replace(/may/gi, "5").replace(/jun/gi, "6").replace(/jul/gi, "7").replace(/aug/gi, "8").replace(/sep/gi, "9").replace(/oct/gi, "10").replace(/nov/gi, "11").replace(/dec/gi, "12");
12356
+ }
12357
+ handleNicknames(e) {
12358
+ let t = e.trim().toLowerCase();
12359
+ if (t === "@yearly" || t === "@annually") return "0 0 1 1 *";
12360
+ if (t === "@monthly") return "0 0 1 * *";
12361
+ if (t === "@weekly") return "0 0 * * 0";
12362
+ if (t === "@daily" || t === "@midnight") return "0 0 * * *";
12363
+ if (t === "@hourly") return "0 * * * *";
12364
+ if (t === "@reboot") throw new TypeError("CronPattern: @reboot is not supported in this environment. This is an event-based trigger that requires system startup detection.");
12365
+ return e;
12366
+ }
12367
+ setNthWeekdayOfMonth(e, t) {
12368
+ if (typeof t != "number" && t.toUpperCase() === "L") this.dayOfWeek[e] = this.dayOfWeek[e] | 32;
12369
+ else if (t === 63) this.dayOfWeek[e] = 63;
12370
+ else if (t < 6 && t > 0) this.dayOfWeek[e] = this.dayOfWeek[e] | O[t - 1];
12371
+ else throw new TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`);
12372
+ }
12373
+ };
12374
+ var P = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
12375
+ var f = [["month", "year", 0], ["day", "month", -1], ["hour", "day", 0], ["minute", "hour", 0], ["second", "minute", 0]];
12376
+ var m = class s {
12377
+ tz;
12378
+ ms;
12379
+ second;
12380
+ minute;
12381
+ hour;
12382
+ day;
12383
+ month;
12384
+ year;
12385
+ constructor(e, t) {
12386
+ if (this.tz = t, e && e instanceof Date) if (!isNaN(e)) this.fromDate(e);
12387
+ else throw new TypeError("CronDate: Invalid date passed to CronDate constructor");
12388
+ else if (e == null) this.fromDate(/* @__PURE__ */ new Date());
12389
+ else if (e && typeof e == "string") this.fromString(e);
12390
+ else if (e instanceof s) this.fromCronDate(e);
12391
+ else throw new TypeError("CronDate: Invalid type (" + typeof e + ") passed to CronDate constructor");
12392
+ }
12393
+ getLastDayOfMonth(e, t) {
12394
+ return t !== 1 ? P[t] : new Date(Date.UTC(e, t + 1, 0)).getUTCDate();
12395
+ }
12396
+ getLastWeekday(e, t) {
12397
+ let r = this.getLastDayOfMonth(e, t), i = new Date(Date.UTC(e, t, r)).getUTCDay();
12398
+ return i === 0 ? r - 2 : i === 6 ? r - 1 : r;
12399
+ }
12400
+ getNearestWeekday(e, t, r) {
12401
+ let n = this.getLastDayOfMonth(e, t);
12402
+ if (r > n) return -1;
12403
+ let a = new Date(Date.UTC(e, t, r)).getUTCDay();
12404
+ return a === 0 ? r === n ? r - 2 : r + 1 : a === 6 ? r === 1 ? r + 2 : r - 1 : r;
12405
+ }
12406
+ isNthWeekdayOfMonth(e, t, r, n) {
12407
+ let a = new Date(Date.UTC(e, t, r)).getUTCDay(), o = 0;
12408
+ for (let h = 1; h <= r; h++) new Date(Date.UTC(e, t, h)).getUTCDay() === a && o++;
12409
+ if (n & 63 && O[o - 1] & n) return true;
12410
+ if (n & 32) {
12411
+ let h = this.getLastDayOfMonth(e, t);
12412
+ for (let l = r + 1; l <= h; l++) if (new Date(Date.UTC(e, t, l)).getUTCDay() === a) return false;
12413
+ return true;
12414
+ }
12415
+ return false;
12416
+ }
12417
+ fromDate(e) {
12418
+ if (this.tz !== void 0) if (typeof this.tz == "number") this.ms = e.getUTCMilliseconds(), this.second = e.getUTCSeconds(), this.minute = e.getUTCMinutes() + this.tz, this.hour = e.getUTCHours(), this.day = e.getUTCDate(), this.month = e.getUTCMonth(), this.year = e.getUTCFullYear(), this.apply();
12419
+ else try {
12420
+ let t = g(e, this.tz);
12421
+ this.ms = e.getMilliseconds(), this.second = t.s, this.minute = t.i, this.hour = t.h, this.day = t.d, this.month = t.m - 1, this.year = t.y;
12422
+ } catch (t) {
12423
+ let r = t instanceof Error ? t.message : String(t);
12424
+ throw new TypeError(`CronDate: Failed to convert date to timezone '${this.tz}'. This may happen with invalid timezone names or dates. Original error: ${r}`);
12425
+ }
12426
+ else this.ms = e.getMilliseconds(), this.second = e.getSeconds(), this.minute = e.getMinutes(), this.hour = e.getHours(), this.day = e.getDate(), this.month = e.getMonth(), this.year = e.getFullYear();
12427
+ }
12428
+ fromCronDate(e) {
12429
+ this.tz = e.tz, this.year = e.year, this.month = e.month, this.day = e.day, this.hour = e.hour, this.minute = e.minute, this.second = e.second, this.ms = e.ms;
12430
+ }
12431
+ apply() {
12432
+ if (this.month > 11 || this.month < 0 || this.day > P[this.month] || this.day < 1 || this.hour > 59 || this.minute > 59 || this.second > 59 || this.hour < 0 || this.minute < 0 || this.second < 0) {
12433
+ let e = new Date(Date.UTC(this.year, this.month, this.day, this.hour, this.minute, this.second, this.ms));
12434
+ return this.ms = e.getUTCMilliseconds(), this.second = e.getUTCSeconds(), this.minute = e.getUTCMinutes(), this.hour = e.getUTCHours(), this.day = e.getUTCDate(), this.month = e.getUTCMonth(), this.year = e.getUTCFullYear(), true;
12435
+ } else return false;
12436
+ }
12437
+ fromString(e) {
12438
+ if (typeof this.tz == "number") {
12439
+ let t = v(e);
12440
+ this.ms = t.getUTCMilliseconds(), this.second = t.getUTCSeconds(), this.minute = t.getUTCMinutes(), this.hour = t.getUTCHours(), this.day = t.getUTCDate(), this.month = t.getUTCMonth(), this.year = t.getUTCFullYear(), this.apply();
12441
+ } else return this.fromDate(v(e, this.tz));
12442
+ }
12443
+ findNext(e, t, r, n) {
12444
+ return this._findMatch(e, t, r, n, 1);
12445
+ }
12446
+ _findMatch(e, t, r, n, i) {
12447
+ let a = this[t], o;
12448
+ r.lastDayOfMonth && (o = this.getLastDayOfMonth(this.year, this.month));
12449
+ let h = !r.starDOW && t == "day" ? new Date(Date.UTC(this.year, this.month, 1, 0, 0, 0, 0)).getUTCDay() : void 0, l = this[t] + n, y = i === 1 ? (u) => u < r[t].length : (u) => u >= 0;
12450
+ for (let u = l; y(u); u += i) {
12451
+ let d = r[t][u];
12452
+ if (t === "day" && !d) {
12453
+ for (let c = 0; c < r.nearestWeekdays.length; c++) if (r.nearestWeekdays[c]) {
12454
+ let M = this.getNearestWeekday(this.year, this.month, c - n);
12455
+ if (M === -1) continue;
12456
+ if (M === u - n) {
12457
+ d = 1;
12458
+ break;
12459
+ }
12460
+ }
12461
+ }
12462
+ if (t === "day" && r.lastWeekday) {
12463
+ let c = this.getLastWeekday(this.year, this.month);
12464
+ u - n === c && (d = 1);
12465
+ }
12466
+ if (t === "day" && r.lastDayOfMonth && u - n == o && (d = 1), t === "day" && !r.starDOW) {
12467
+ let c = r.dayOfWeek[(h + (u - n - 1)) % 7];
12468
+ if (c && c & 63) c = this.isNthWeekdayOfMonth(this.year, this.month, u - n, c) ? 1 : 0;
12469
+ else if (c) throw new Error(`CronDate: Invalid value for dayOfWeek encountered. ${c}`);
12470
+ r.useAndLogic ? d = d && c : !e.domAndDow && !r.starDOM ? d = d || c : d = d && c;
12471
+ }
12472
+ if (d) return this[t] = u - n, a !== this[t] ? 2 : 1;
12473
+ }
12474
+ return 3;
12475
+ }
12476
+ recurse(e, t, r) {
12477
+ if (r === 0 && !e.starYear) {
12478
+ if (this.year >= 0 && this.year < e.year.length && e.year[this.year] === 0) {
12479
+ let i = -1;
12480
+ for (let a = this.year + 1; a < e.year.length && a < 1e4; a++) if (e.year[a] === 1) {
12481
+ i = a;
12482
+ break;
12483
+ }
12484
+ if (i === -1) return null;
12485
+ this.year = i, this.month = 0, this.day = 1, this.hour = 0, this.minute = 0, this.second = 0, this.ms = 0;
12486
+ }
12487
+ if (this.year >= 1e4) return null;
12488
+ }
12489
+ let n = this.findNext(t, f[r][0], e, f[r][2]);
12490
+ if (n > 1) {
12491
+ let i = r + 1;
12492
+ for (; i < f.length; ) this[f[i][0]] = -f[i][2], i++;
12493
+ if (n === 3) {
12494
+ if (this[f[r][1]]++, this[f[r][0]] = -f[r][2], this.apply(), r === 0 && !e.starYear) {
12495
+ for (; this.year >= 0 && this.year < e.year.length && e.year[this.year] === 0 && this.year < 1e4; ) this.year++;
12496
+ if (this.year >= 1e4 || this.year >= e.year.length) return null;
12497
+ }
12498
+ return this.recurse(e, t, 0);
12499
+ } else if (this.apply()) return this.recurse(e, t, r - 1);
12500
+ }
12501
+ return r += 1, r >= f.length ? this : (e.starYear ? this.year >= 3e3 : this.year >= 1e4) ? null : this.recurse(e, t, r);
12502
+ }
12503
+ increment(e, t, r) {
12504
+ return this.second += t.interval !== void 0 && t.interval > 1 && r ? t.interval : 1, this.ms = 0, this.apply(), this.recurse(e, t, 0);
12505
+ }
12506
+ decrement(e, t) {
12507
+ return this.second -= t.interval !== void 0 && t.interval > 1 ? t.interval : 1, this.ms = 0, this.apply(), this.recurseBackward(e, t, 0, 0);
12508
+ }
12509
+ recurseBackward(e, t, r, n = 0) {
12510
+ if (n > 1e4) return null;
12511
+ if (r === 0 && !e.starYear) {
12512
+ if (this.year >= 0 && this.year < e.year.length && e.year[this.year] === 0) {
12513
+ let a = -1;
12514
+ for (let o = this.year - 1; o >= 0; o--) if (e.year[o] === 1) {
12515
+ a = o;
12516
+ break;
12517
+ }
12518
+ if (a === -1) return null;
12519
+ this.year = a, this.month = 11, this.day = 31, this.hour = 23, this.minute = 59, this.second = 59, this.ms = 0;
12520
+ }
12521
+ if (this.year < 0) return null;
12522
+ }
12523
+ let i = this.findPrevious(t, f[r][0], e, f[r][2]);
12524
+ if (i > 1) {
12525
+ let a = r + 1;
12526
+ for (; a < f.length; ) {
12527
+ let o = f[a][0], h = f[a][2], l = this.getMaxPatternValue(o, e, h);
12528
+ this[o] = l, a++;
12529
+ }
12530
+ if (i === 3) {
12531
+ if (this[f[r][1]]--, r === 0) {
12532
+ let y = this.getLastDayOfMonth(this.year, this.month);
12533
+ this.day > y && (this.day = y);
12534
+ }
12535
+ if (r === 1) if (this.day <= 0) this.day = 1;
12536
+ else {
12537
+ let y = this.year, u = this.month;
12538
+ for (; u < 0; ) u += 12, y--;
12539
+ for (; u > 11; ) u -= 12, y++;
12540
+ let d = u !== 1 ? P[u] : new Date(Date.UTC(y, u + 1, 0)).getUTCDate();
12541
+ this.day > d && (this.day = d);
12542
+ }
12543
+ this.apply();
12544
+ let o = f[r][0], h = f[r][2], l = this.getMaxPatternValue(o, e, h);
12545
+ if (o === "day") {
12546
+ let y = this.getLastDayOfMonth(this.year, this.month);
12547
+ this[o] = Math.min(l, y);
12548
+ } else this[o] = l;
12549
+ if (this.apply(), r === 0) {
12550
+ let y = f[1][2], u = this.getMaxPatternValue("day", e, y), d = this.getLastDayOfMonth(this.year, this.month), c = Math.min(u, d);
12551
+ c !== this.day && (this.day = c, this.hour = this.getMaxPatternValue("hour", e, f[2][2]), this.minute = this.getMaxPatternValue("minute", e, f[3][2]), this.second = this.getMaxPatternValue("second", e, f[4][2]));
12552
+ }
12553
+ if (r === 0 && !e.starYear) {
12554
+ for (; this.year >= 0 && this.year < e.year.length && e.year[this.year] === 0; ) this.year--;
12555
+ if (this.year < 0) return null;
12556
+ }
12557
+ return this.recurseBackward(e, t, 0, n + 1);
12558
+ } else if (this.apply()) return this.recurseBackward(e, t, r - 1, n + 1);
12559
+ }
12560
+ return r += 1, r >= f.length ? this : this.year < 0 ? null : this.recurseBackward(e, t, r, n + 1);
12561
+ }
12562
+ getMaxPatternValue(e, t, r) {
12563
+ if (e === "day" && t.lastDayOfMonth) return this.getLastDayOfMonth(this.year, this.month);
12564
+ if (e === "day" && !t.starDOW) return this.getLastDayOfMonth(this.year, this.month);
12565
+ for (let n = t[e].length - 1; n >= 0; n--) if (t[e][n]) return n - r;
12566
+ return t[e].length - 1 - r;
12567
+ }
12568
+ findPrevious(e, t, r, n) {
12569
+ return this._findMatch(e, t, r, n, -1);
12570
+ }
12571
+ getDate(e) {
12572
+ return e || this.tz === void 0 ? new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.ms) : typeof this.tz == "number" ? new Date(Date.UTC(this.year, this.month, this.day, this.hour, this.minute - this.tz, this.second, this.ms)) : k(b(this.year, this.month + 1, this.day, this.hour, this.minute, this.second, this.tz), false);
12573
+ }
12574
+ getTime() {
12575
+ return this.getDate(false).getTime();
12576
+ }
12577
+ match(e, t) {
12578
+ if (!e.starYear && (this.year < 0 || this.year >= e.year.length || e.year[this.year] === 0)) return false;
12579
+ for (let r = 0; r < f.length; r++) {
12580
+ let n = f[r][0], i = f[r][2], a = this[n];
12581
+ if (a + i < 0 || a + i >= e[n].length) return false;
12582
+ let o = e[n][a + i];
12583
+ if (n === "day") {
12584
+ if (!o) {
12585
+ for (let h = 0; h < e.nearestWeekdays.length; h++) if (e.nearestWeekdays[h]) {
12586
+ let l = this.getNearestWeekday(this.year, this.month, h - i);
12587
+ if (l !== -1 && l === a) {
12588
+ o = 1;
12589
+ break;
12590
+ }
12591
+ }
12592
+ }
12593
+ if (e.lastWeekday) {
12594
+ let h = this.getLastWeekday(this.year, this.month);
12595
+ a === h && (o = 1);
12596
+ }
12597
+ if (e.lastDayOfMonth) {
12598
+ let h = this.getLastDayOfMonth(this.year, this.month);
12599
+ a === h && (o = 1);
12600
+ }
12601
+ if (!e.starDOW) {
12602
+ let h = new Date(Date.UTC(this.year, this.month, 1, 0, 0, 0, 0)).getUTCDay(), l = e.dayOfWeek[(h + (a - 1)) % 7];
12603
+ l && l & 63 && (l = this.isNthWeekdayOfMonth(this.year, this.month, a, l) ? 1 : 0), e.useAndLogic ? o = o && l : !t.domAndDow && !e.starDOM ? o = o || l : o = o && l;
12604
+ }
12605
+ }
12606
+ if (!o) return false;
12607
+ }
12608
+ return true;
12609
+ }
12610
+ };
12611
+ function R(s2) {
12612
+ if (s2 === void 0 && (s2 = {}), delete s2.name, s2.legacyMode !== void 0 && s2.domAndDow === void 0 ? s2.domAndDow = !s2.legacyMode : s2.domAndDow === void 0 && (s2.domAndDow = false), s2.legacyMode = !s2.domAndDow, s2.paused = s2.paused === void 0 ? false : s2.paused, s2.maxRuns = s2.maxRuns === void 0 ? 1 / 0 : s2.maxRuns, s2.catch = s2.catch === void 0 ? false : s2.catch, s2.interval = s2.interval === void 0 ? 0 : parseInt(s2.interval.toString(), 10), s2.utcOffset = s2.utcOffset === void 0 ? void 0 : parseInt(s2.utcOffset.toString(), 10), s2.dayOffset = s2.dayOffset === void 0 ? 0 : parseInt(s2.dayOffset.toString(), 10), s2.unref = s2.unref === void 0 ? false : s2.unref, s2.mode = s2.mode === void 0 ? "auto" : s2.mode, s2.alternativeWeekdays = s2.alternativeWeekdays === void 0 ? false : s2.alternativeWeekdays, s2.sloppyRanges = s2.sloppyRanges === void 0 ? false : s2.sloppyRanges, !["auto", "5-part", "6-part", "7-part", "5-or-6-parts", "6-or-7-parts"].includes(s2.mode)) throw new Error("CronOptions: mode must be one of 'auto', '5-part', '6-part', '7-part', '5-or-6-parts', or '6-or-7-parts'.");
12613
+ if (s2.startAt && (s2.startAt = new m(s2.startAt, s2.timezone)), s2.stopAt && (s2.stopAt = new m(s2.stopAt, s2.timezone)), s2.interval !== null) {
12614
+ if (isNaN(s2.interval)) throw new Error("CronOptions: Supplied value for interval is not a number");
12615
+ if (s2.interval < 0) throw new Error("CronOptions: Supplied value for interval can not be negative");
12616
+ }
12617
+ if (s2.utcOffset !== void 0) {
12618
+ if (isNaN(s2.utcOffset)) throw new Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");
12619
+ if (s2.utcOffset < -870 || s2.utcOffset > 870) throw new Error("CronOptions: utcOffset out of bounds.");
12620
+ if (s2.utcOffset !== void 0 && s2.timezone) throw new Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.");
12621
+ }
12622
+ if (s2.unref !== true && s2.unref !== false) throw new Error("CronOptions: Unref should be either true, false or undefined(false).");
12623
+ if (s2.dayOffset !== void 0 && s2.dayOffset !== 0 && isNaN(s2.dayOffset)) throw new Error("CronOptions: Invalid value passed for dayOffset, should be a number representing days to offset.");
12624
+ return s2;
12625
+ }
12626
+ function p(s2) {
12627
+ return Object.prototype.toString.call(s2) === "[object Function]" || typeof s2 == "function" || s2 instanceof Function;
12628
+ }
12629
+ function _(s2) {
12630
+ return p(s2);
12631
+ }
12632
+ function x(s2) {
12633
+ typeof Deno < "u" && typeof Deno.unrefTimer < "u" ? Deno.unrefTimer(s2) : s2 && typeof s2.unref < "u" && s2.unref();
12634
+ }
12635
+ var W = 30 * 1e3;
12636
+ var w = [];
12637
+ var E = class {
12638
+ name;
12639
+ options;
12640
+ _states;
12641
+ fn;
12642
+ getTz() {
12643
+ return this.options.timezone || this.options.utcOffset;
12644
+ }
12645
+ applyDayOffset(e) {
12646
+ if (this.options.dayOffset !== void 0 && this.options.dayOffset !== 0) {
12647
+ let t = this.options.dayOffset * 24 * 60 * 60 * 1e3;
12648
+ return new Date(e.getTime() + t);
12649
+ }
12650
+ return e;
12651
+ }
12652
+ constructor(e, t, r) {
12653
+ let n, i;
12654
+ if (p(t)) i = t;
12655
+ else if (typeof t == "object") n = t;
12656
+ else if (t !== void 0) throw new Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");
12657
+ if (p(r)) i = r;
12658
+ else if (typeof r == "object") n = r;
12659
+ else if (r !== void 0) throw new Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");
12660
+ if (this.name = n?.name, this.options = R(n), this._states = { kill: false, blocking: false, previousRun: void 0, currentRun: void 0, once: void 0, currentTimeout: void 0, maxRuns: n ? n.maxRuns : void 0, paused: n ? n.paused : false, pattern: new C("* * * * *", void 0, { mode: "auto" }) }, e && (e instanceof Date || typeof e == "string" && e.indexOf(":") > 0) ? this._states.once = new m(e, this.getTz()) : this._states.pattern = new C(e, this.options.timezone, { mode: this.options.mode, alternativeWeekdays: this.options.alternativeWeekdays, sloppyRanges: this.options.sloppyRanges }), this.name) {
12661
+ if (w.find((o) => o.name === this.name)) throw new Error("Cron: Tried to initialize new named job '" + this.name + "', but name already taken.");
12662
+ w.push(this);
12663
+ }
12664
+ return i !== void 0 && _(i) && (this.fn = i, this.schedule()), this;
12665
+ }
12666
+ nextRun(e) {
12667
+ let t = this._next(e);
12668
+ return t ? this.applyDayOffset(t.getDate(false)) : null;
12669
+ }
12670
+ nextRuns(e, t) {
12671
+ this._states.maxRuns !== void 0 && e > this._states.maxRuns && (e = this._states.maxRuns);
12672
+ let r = t || this._states.currentRun || void 0;
12673
+ return this._enumerateRuns(e, r, "next");
12674
+ }
12675
+ previousRuns(e, t) {
12676
+ return this._enumerateRuns(e, t || void 0, "previous");
12677
+ }
12678
+ _enumerateRuns(e, t, r) {
12679
+ let n = [], i = t ? new m(t, this.getTz()) : null, a = r === "next" ? this._next : this._previous;
12680
+ for (; e--; ) {
12681
+ let o = a.call(this, i);
12682
+ if (!o) break;
12683
+ let h = o.getDate(false);
12684
+ n.push(this.applyDayOffset(h)), i = o;
12685
+ }
12686
+ return n;
12687
+ }
12688
+ match(e) {
12689
+ if (this._states.once) {
12690
+ let r = new m(e, this.getTz());
12691
+ r.ms = 0;
12692
+ let n = new m(this._states.once, this.getTz());
12693
+ return n.ms = 0, r.getTime() === n.getTime();
12694
+ }
12695
+ let t = new m(e, this.getTz());
12696
+ return t.ms = 0, t.match(this._states.pattern, this.options);
12697
+ }
12698
+ getPattern() {
12699
+ if (!this._states.once) return this._states.pattern ? this._states.pattern.pattern : void 0;
12700
+ }
12701
+ getOnce() {
12702
+ return this._states.once ? this._states.once.getDate() : null;
12703
+ }
12704
+ isRunning() {
12705
+ let e = this.nextRun(this._states.currentRun), t = !this._states.paused, r = this.fn !== void 0, n = !this._states.kill;
12706
+ return t && r && n && e !== null;
12707
+ }
12708
+ isStopped() {
12709
+ return this._states.kill;
12710
+ }
12711
+ isBusy() {
12712
+ return this._states.blocking;
12713
+ }
12714
+ currentRun() {
12715
+ return this._states.currentRun ? this._states.currentRun.getDate() : null;
12716
+ }
12717
+ previousRun() {
12718
+ return this._states.previousRun ? this._states.previousRun.getDate() : null;
12719
+ }
12720
+ msToNext(e) {
12721
+ let t = this._next(e);
12722
+ return t ? e instanceof m || e instanceof Date ? t.getTime() - e.getTime() : t.getTime() - new m(e).getTime() : null;
12723
+ }
12724
+ stop() {
12725
+ this._states.kill = true, this._states.currentTimeout && clearTimeout(this._states.currentTimeout);
12726
+ let e = w.indexOf(this);
12727
+ e >= 0 && w.splice(e, 1);
12728
+ }
12729
+ pause() {
12730
+ return this._states.paused = true, !this._states.kill;
12731
+ }
12732
+ resume() {
12733
+ return this._states.paused = false, !this._states.kill;
12734
+ }
12735
+ schedule(e) {
12736
+ if (e && this.fn) throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");
12737
+ e && (this.fn = e);
12738
+ let t = this.msToNext(), r = this.nextRun(this._states.currentRun);
12739
+ return t == null || isNaN(t) || r === null ? this : (t > W && (t = W), this._states.currentTimeout = setTimeout(() => this._checkTrigger(r), t), this._states.currentTimeout && this.options.unref && x(this._states.currentTimeout), this);
12740
+ }
12741
+ async _trigger(e) {
12742
+ this._states.blocking = true, this._states.currentRun = new m(void 0, this.getTz());
12743
+ try {
12744
+ if (this.options.catch) try {
12745
+ this.fn !== void 0 && await this.fn(this, this.options.context);
12746
+ } catch (t) {
12747
+ if (p(this.options.catch)) try {
12748
+ this.options.catch(t, this);
12749
+ } catch {
12750
+ }
12751
+ }
12752
+ else this.fn !== void 0 && await this.fn(this, this.options.context);
12753
+ } finally {
12754
+ this._states.previousRun = new m(e, this.getTz()), this._states.blocking = false;
12755
+ }
12756
+ }
12757
+ async trigger() {
12758
+ await this._trigger();
12759
+ }
12760
+ runsLeft() {
12761
+ return this._states.maxRuns;
12762
+ }
12763
+ _checkTrigger(e) {
12764
+ let t = /* @__PURE__ */ new Date(), r = !this._states.paused && t.getTime() >= e.getTime(), n = this._states.blocking && this.options.protect;
12765
+ r && !n ? (this._states.maxRuns !== void 0 && this._states.maxRuns--, this._trigger()) : r && n && p(this.options.protect) && setTimeout(() => this.options.protect(this), 0), this.schedule();
12766
+ }
12767
+ _next(e) {
12768
+ let t = !!(e || this._states.currentRun), r = false;
12769
+ !e && this.options.startAt && this.options.interval && ([e, t] = this._calculatePreviousRun(e, t), r = !e), e = new m(e, this.getTz()), this.options.startAt && e && e.getTime() < this.options.startAt.getTime() && (e = this.options.startAt);
12770
+ let n = this._states.once || new m(e, this.getTz());
12771
+ return !r && n !== this._states.once && (n = n.increment(this._states.pattern, this.options, t)), this._states.once && this._states.once.getTime() <= e.getTime() || n === null || this._states.maxRuns !== void 0 && this._states.maxRuns <= 0 || this._states.kill || this.options.stopAt && n.getTime() >= this.options.stopAt.getTime() ? null : n;
12772
+ }
12773
+ _previous(e) {
12774
+ let t = new m(e, this.getTz());
12775
+ this.options.stopAt && t.getTime() > this.options.stopAt.getTime() && (t = this.options.stopAt);
12776
+ let r = new m(t, this.getTz());
12777
+ return this._states.once ? this._states.once.getTime() < t.getTime() ? this._states.once : null : (r = r.decrement(this._states.pattern, this.options), r === null || this.options.startAt && r.getTime() < this.options.startAt.getTime() ? null : r);
12778
+ }
12779
+ _calculatePreviousRun(e, t) {
12780
+ let r = new m(void 0, this.getTz()), n = e;
12781
+ if (this.options.startAt.getTime() <= r.getTime()) {
12782
+ n = this.options.startAt;
12783
+ let i = n.getTime() + this.options.interval * 1e3;
12784
+ for (; i <= r.getTime(); ) n = new m(n, this.getTz()).increment(this._states.pattern, this.options, true), i = n.getTime() + this.options.interval * 1e3;
12785
+ t = true;
12786
+ }
12787
+ return n === null && (n = void 0), [n, t];
12788
+ }
12789
+ };
12790
+
12079
12791
  // src/core/AnalysisProvider.ts
12080
12792
  var AnalysisProvider = class {
12081
12793
  constructor(api) {
@@ -12102,8 +12814,8 @@ var IntervalAnalysisProvider = class extends AnalysisProvider {
12102
12814
  const pks = await this.api.queryManager.getKeys({});
12103
12815
  const total = pks.length;
12104
12816
  if (total === 0) return [];
12105
- const k = "rate" in sampleOptions && sampleOptions.rate != null ? Math.ceil(total * Math.min(Math.max(sampleOptions.rate, 0), 1)) : sampleOptions.count;
12106
- const sampleCount = Math.min(Math.max(k, 0), total);
12817
+ const k2 = "rate" in sampleOptions && sampleOptions.rate != null ? Math.ceil(total * Math.min(Math.max(sampleOptions.rate, 0), 1)) : sampleOptions.count;
12818
+ const sampleCount = Math.min(Math.max(k2, 0), total);
12107
12819
  if (sampleCount === 0) return [];
12108
12820
  for (let i = 0; i < sampleCount; i++) {
12109
12821
  const j = i + Math.floor(Math.random() * (total - i));
@@ -12128,7 +12840,7 @@ var FTSTermCount = class extends IntervalAnalysisProvider {
12128
12840
  termCount = {};
12129
12841
  sampleSize = 0;
12130
12842
  async serialize(tx) {
12131
- const docs = await this.sample({ count: 1e3 }, tx);
12843
+ const docs = await this.sample({ count: this.api.analysisManager.sampleSize }, tx);
12132
12844
  this.termCount = {};
12133
12845
  this.sampleSize = docs.length;
12134
12846
  if (docs.length === 0) return JSON.stringify({ _sampleSize: 0 });
@@ -12144,10 +12856,10 @@ var FTSTermCount = class extends IntervalAnalysisProvider {
12144
12856
  const flatDoc = this.api.flattenDocument(doc);
12145
12857
  for (const [indexName, config] of ftsIndices) {
12146
12858
  const primaryField = this.api.indexManager.getPrimaryField(config);
12147
- const v = flatDoc[primaryField];
12148
- if (typeof v === "string" && v.length > 0) {
12859
+ const v2 = flatDoc[primaryField];
12860
+ if (typeof v2 === "string" && v2.length > 0) {
12149
12861
  const ftsConfig = this.api.indexManager.getFtsConfig(config);
12150
- const tokens = ftsConfig ? tokenize(v, ftsConfig) : [v];
12862
+ const tokens = ftsConfig ? tokenize(v2, ftsConfig) : [v2];
12151
12863
  const tokenizerStrategy = ftsConfig ? ftsConfig.tokenizer === "ngram" ? `${ftsConfig.gramSize}gram` : ftsConfig.tokenizer : "whitespace";
12152
12864
  if (!this.termCount[primaryField]) {
12153
12865
  this.termCount[primaryField] = {};
@@ -12168,7 +12880,7 @@ var FTSTermCount = class extends IntervalAnalysisProvider {
12168
12880
  optimizedTermCount[field] = {};
12169
12881
  for (const strategy in this.termCount[field]) {
12170
12882
  const tokenMap = this.termCount[field][strategy];
12171
- const sorted = Object.entries(tokenMap).sort((a, b) => b[1] - a[1]).slice(0, 1e3);
12883
+ const sorted = Object.entries(tokenMap).sort((a, b2) => b2[1] - a[1]).slice(0, 1e3);
12172
12884
  optimizedTermCount[field][strategy] = {};
12173
12885
  for (let i = 0, len = sorted.length; i < len; i++) {
12174
12886
  optimizedTermCount[field][strategy][sorted[i][0]] = sorted[i][1];
@@ -12235,10 +12947,26 @@ var BuiltinAnalysisProviders = [
12235
12947
 
12236
12948
  // src/core/AnalysisManager.ts
12237
12949
  var AnalysisManager = class {
12238
- constructor(api) {
12950
+ constructor(api, schedule, sampleSize) {
12239
12951
  this.api = api;
12952
+ this.sampleSize = sampleSize;
12953
+ this.cron = new E(schedule, async () => {
12954
+ if (this.flushing) return;
12955
+ await this.api.flushAnalysis();
12956
+ });
12240
12957
  }
12241
12958
  providers = /* @__PURE__ */ new Map();
12959
+ cron = null;
12960
+ flushing = false;
12961
+ /**
12962
+ * Stop the background analysis cron job.
12963
+ */
12964
+ close() {
12965
+ if (this.cron && this.cron.isRunning()) {
12966
+ this.cron.stop();
12967
+ this.cron = null;
12968
+ }
12969
+ }
12242
12970
  /**
12243
12971
  * Register all built-in analysis providers.
12244
12972
  * Each provider class is instantiated with the API reference and registered.
@@ -12289,6 +13017,14 @@ var AnalysisManager = class {
12289
13017
  }
12290
13018
  }
12291
13019
  }
13020
+ /**
13021
+ * Trigger the background analysis cron job.
13022
+ */
13023
+ triggerCron() {
13024
+ if (this.cron && !this.cron.isRunning()) {
13025
+ this.cron.trigger();
13026
+ }
13027
+ }
12292
13028
  /**
12293
13029
  * Notify all realtime providers that documents were inserted.
12294
13030
  * Data is persisted immediately after each provider processes the mutation.
@@ -12339,11 +13075,16 @@ var AnalysisManager = class {
12339
13075
  * @param tx The transaction to use (must be a write transaction)
12340
13076
  */
12341
13077
  async flush(tx) {
13078
+ if (this.flushing) {
13079
+ throw new Error("Cannot flush analysis while analysis is already flushing.");
13080
+ }
13081
+ this.flushing = true;
12342
13082
  for (const [name, provider] of this.providers) {
12343
13083
  if (provider instanceof IntervalAnalysisProvider) {
12344
13084
  await this.setAnalysisData(name, await provider.serialize(tx), tx);
12345
13085
  }
12346
13086
  }
13087
+ this.flushing = false;
12347
13088
  }
12348
13089
  /**
12349
13090
  * Get the analysis header row.
@@ -12476,7 +13217,14 @@ var DocumentDataplyAPI = class extends import_dataply4.DataplyAPI {
12476
13217
  this.mutationManager = new MutationManager(this);
12477
13218
  this.metadataManager = new MetadataManager(this);
12478
13219
  this.documentFormatter = new DocumentFormatter();
12479
- this.analysisManager = new AnalysisManager(this);
13220
+ this.analysisManager = new AnalysisManager(
13221
+ this,
13222
+ options.analysisSchedule ?? "* */1 * * *",
13223
+ options.analysisSampleSize ?? 1e3
13224
+ );
13225
+ this.hook.onceAfter("close", async () => {
13226
+ this.analysisManager.close();
13227
+ });
12480
13228
  this.hook.onceAfter("init", async (tx, isNewlyCreated) => {
12481
13229
  if (isNewlyCreated) {
12482
13230
  await this.initializeDocumentFile(tx);
@@ -12488,6 +13236,7 @@ var DocumentDataplyAPI = class extends import_dataply4.DataplyAPI {
12488
13236
  await this.indexManager.initializeIndices(metadata, isNewlyCreated, tx);
12489
13237
  this.analysisManager.registerBuiltinProviders();
12490
13238
  await this.analysisManager.initializeProviders(tx);
13239
+ this.analysisManager.triggerCron();
12491
13240
  this._initialized = true;
12492
13241
  return tx;
12493
13242
  });