tinybase 1.2.1 → 1.3.0-beta.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.
@@ -81,10 +81,9 @@ const mapForEach = (map, cb) =>
81
81
  collForEach(map, (value, key) => cb(key, value));
82
82
  const mapSet = (map, key, value) =>
83
83
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
84
- const mapEnsure = (map, key, defaultValue, onWillAdd) => {
84
+ const mapEnsure = (map, key, getDefaultValue) => {
85
85
  if (!collHas(map, key)) {
86
- onWillAdd?.(defaultValue);
87
- map.set(key, defaultValue);
86
+ map.set(key, getDefaultValue());
88
87
  }
89
88
  return mapGet(map, key);
90
89
  };
@@ -236,11 +235,11 @@ const getCreateFunction = (getFunction) => {
236
235
  const addDeepSet = (deepSet, value, ids) =>
237
236
  arrayLength(ids) < 2
238
237
  ? setAdd(
239
- arrayIsEmpty(ids) ? deepSet : mapEnsure(deepSet, ids[0], setNew()),
238
+ arrayIsEmpty(ids) ? deepSet : mapEnsure(deepSet, ids[0], setNew),
240
239
  value,
241
240
  )
242
241
  : addDeepSet(
243
- mapEnsure(deepSet, ids[0], mapNew()),
242
+ mapEnsure(deepSet, ids[0], mapNew),
244
243
  value,
245
244
  arrayFromSecond(ids),
246
245
  );
@@ -375,16 +374,11 @@ const createCheckpoints = getCreateFunction((store) => {
375
374
  currentId = void 0;
376
375
  checkpointsChanged = 1;
377
376
  });
378
- const table = mapEnsure(delta, tableId, mapNew());
379
- const row = mapEnsure(table, rowId, mapNew());
380
- const oldNew = mapEnsure(
381
- row,
382
- cellId,
383
- [void 0, void 0],
384
- (addOldNew) => (addOldNew[0] = oldCell),
385
- );
377
+ const table = mapEnsure(delta, tableId, mapNew);
378
+ const row = mapEnsure(table, rowId, mapNew);
379
+ const oldNew = mapEnsure(row, cellId, () => [oldCell, void 0]);
386
380
  oldNew[1] = newCell;
387
- if (oldNew[0] === oldNew[1]) {
381
+ if (oldNew[0] === newCell) {
388
382
  if (collIsEmpty(mapSet(row, cellId))) {
389
383
  if (collIsEmpty(mapSet(table, rowId))) {
390
384
  if (collIsEmpty(mapSet(delta, tableId))) {
@@ -1236,6 +1230,7 @@ const idsChanged = (ids, id, added) =>
1236
1230
  mapSet(ids, id, mapGet(ids, id) == -added ? void 0 : added);
1237
1231
  const createStore = () => {
1238
1232
  let hasSchema;
1233
+ let cellsTouched;
1239
1234
  let nextRowId = 0;
1240
1235
  let transactions = 0;
1241
1236
  const changedTableIds = mapNew();
@@ -1254,6 +1249,7 @@ const createStore = () => {
1254
1249
  const cellIdsListeners = mapNewPair();
1255
1250
  const cellListeners = mapNewPair();
1256
1251
  const invalidCellListeners = mapNewPair();
1252
+ const finishTransactionListeners = mapNewPair(setNew);
1257
1253
  const [addListener, callListeners, delListenerImpl, callListenerImpl] =
1258
1254
  getListenerFunctions(() => store);
1259
1255
  const validateSchema = (schema) =>
@@ -1336,7 +1332,7 @@ const createStore = () => {
1336
1332
  const rowDefaulted = mapNew();
1337
1333
  const rowNonDefaulted = setNew();
1338
1334
  transformMap(
1339
- mapEnsure(schemaMap, tableId, mapNew()),
1335
+ mapEnsure(schemaMap, tableId, mapNew),
1340
1336
  tableSchema,
1341
1337
  (tableSchemaMap, cellId, cellSchema) => {
1342
1338
  mapSet(tableSchemaMap, cellId, cellSchema);
@@ -1363,18 +1359,20 @@ const createStore = () => {
1363
1359
  );
1364
1360
  const setValidTable = (tableId, table) =>
1365
1361
  transformMap(
1366
- mapEnsure(tablesMap, tableId, mapNew(), () =>
1367
- tableIdsChanged(tableId, 1),
1368
- ),
1362
+ mapEnsure(tablesMap, tableId, () => {
1363
+ tableIdsChanged(tableId, 1);
1364
+ return mapNew();
1365
+ }),
1369
1366
  table,
1370
1367
  (tableMap, rowId, row) => setValidRow(tableId, tableMap, rowId, row),
1371
1368
  (tableMap, rowId) => delValidRow(tableId, tableMap, rowId),
1372
1369
  );
1373
1370
  const setValidRow = (tableId, tableMap, rowId, newRow, forceDel) =>
1374
1371
  transformMap(
1375
- mapEnsure(tableMap, rowId, mapNew(), () =>
1376
- rowIdsChanged(tableId, rowId, 1),
1377
- ),
1372
+ mapEnsure(tableMap, rowId, () => {
1373
+ rowIdsChanged(tableId, rowId, 1);
1374
+ return mapNew();
1375
+ }),
1378
1376
  newRow,
1379
1377
  (rowMap, cellId, cell) =>
1380
1378
  setValidCell(tableId, rowId, rowMap, cellId, cell),
@@ -1437,25 +1435,25 @@ const createStore = () => {
1437
1435
  const tableIdsChanged = (tableId, added) =>
1438
1436
  idsChanged(changedTableIds, tableId, added);
1439
1437
  const rowIdsChanged = (tableId, rowId, added) =>
1440
- idsChanged(mapEnsure(changedRowIds, tableId, mapNew()), rowId, added);
1438
+ idsChanged(mapEnsure(changedRowIds, tableId, mapNew), rowId, added);
1441
1439
  const cellIdsChanged = (tableId, rowId, cellId, added) =>
1442
1440
  idsChanged(
1443
- mapEnsure(mapEnsure(changedCellIds, tableId, mapNew()), rowId, mapNew()),
1441
+ mapEnsure(mapEnsure(changedCellIds, tableId, mapNew), rowId, mapNew),
1444
1442
  cellId,
1445
1443
  added,
1446
1444
  );
1447
1445
  const cellChanged = (tableId, rowId, cellId, oldCell, newCell) =>
1448
1446
  (mapEnsure(
1449
- mapEnsure(mapEnsure(changedCells, tableId, mapNew()), rowId, mapNew()),
1447
+ mapEnsure(mapEnsure(changedCells, tableId, mapNew), rowId, mapNew),
1450
1448
  cellId,
1451
- [oldCell],
1449
+ () => [oldCell, 0],
1452
1450
  )[1] = newCell);
1453
1451
  const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
1454
1452
  arrayPush(
1455
1453
  mapEnsure(
1456
- mapEnsure(mapEnsure(invalidCells, tableId, mapNew()), rowId, mapNew()),
1454
+ mapEnsure(mapEnsure(invalidCells, tableId, mapNew), rowId, mapNew),
1457
1455
  cellId,
1458
- [],
1456
+ () => [],
1459
1457
  ),
1460
1458
  invalidCell,
1461
1459
  );
@@ -1484,75 +1482,73 @@ const createStore = () => {
1484
1482
  )
1485
1483
  : 0;
1486
1484
  const callListenersForChanges = (mutator) => {
1487
- if (!collIsEmpty(changedCells)) {
1488
- const emptyIdListeners =
1489
- collIsEmpty(cellIdsListeners[mutator]) &&
1490
- collIsEmpty(rowIdsListeners[mutator]) &&
1491
- collIsEmpty(tableIdsListeners[mutator]);
1492
- const emptyOtherListeners =
1493
- collIsEmpty(cellListeners[mutator]) &&
1494
- collIsEmpty(rowListeners[mutator]) &&
1495
- collIsEmpty(tableListeners[mutator]) &&
1496
- collIsEmpty(tablesListeners[mutator]);
1497
- if (!(emptyIdListeners && emptyOtherListeners)) {
1498
- const changes = mutator
1499
- ? [
1500
- mapClone(changedTableIds),
1501
- mapClone2(changedRowIds),
1502
- mapClone(changedCellIds, mapClone2),
1503
- mapClone(changedCells, mapClone2),
1504
- ]
1505
- : [changedTableIds, changedRowIds, changedCellIds, changedCells];
1506
- if (!emptyIdListeners) {
1507
- collForEach(changes[2], (rowCellIds, tableId) =>
1508
- collForEach(rowCellIds, (changedIds, rowId) => {
1509
- if (!collIsEmpty(changedIds)) {
1510
- callListeners(cellIdsListeners[mutator], [tableId, rowId]);
1511
- }
1512
- }),
1513
- );
1514
- collForEach(changes[1], (changedIds, tableId) => {
1485
+ const emptyIdListeners =
1486
+ collIsEmpty(cellIdsListeners[mutator]) &&
1487
+ collIsEmpty(rowIdsListeners[mutator]) &&
1488
+ collIsEmpty(tableIdsListeners[mutator]);
1489
+ const emptyOtherListeners =
1490
+ collIsEmpty(cellListeners[mutator]) &&
1491
+ collIsEmpty(rowListeners[mutator]) &&
1492
+ collIsEmpty(tableListeners[mutator]) &&
1493
+ collIsEmpty(tablesListeners[mutator]);
1494
+ if (!(emptyIdListeners && emptyOtherListeners)) {
1495
+ const changes = mutator
1496
+ ? [
1497
+ mapClone(changedTableIds),
1498
+ mapClone2(changedRowIds),
1499
+ mapClone(changedCellIds, mapClone2),
1500
+ mapClone(changedCells, mapClone2),
1501
+ ]
1502
+ : [changedTableIds, changedRowIds, changedCellIds, changedCells];
1503
+ if (!emptyIdListeners) {
1504
+ collForEach(changes[2], (rowCellIds, tableId) =>
1505
+ collForEach(rowCellIds, (changedIds, rowId) => {
1515
1506
  if (!collIsEmpty(changedIds)) {
1516
- callListeners(rowIdsListeners[mutator], [tableId]);
1507
+ callListeners(cellIdsListeners[mutator], [tableId, rowId]);
1517
1508
  }
1518
- });
1519
- if (!collIsEmpty(changes[0])) {
1520
- callListeners(tableIdsListeners[mutator]);
1509
+ }),
1510
+ );
1511
+ collForEach(changes[1], (changedIds, tableId) => {
1512
+ if (!collIsEmpty(changedIds)) {
1513
+ callListeners(rowIdsListeners[mutator], [tableId]);
1521
1514
  }
1515
+ });
1516
+ if (!collIsEmpty(changes[0])) {
1517
+ callListeners(tableIdsListeners[mutator]);
1522
1518
  }
1523
- if (!emptyOtherListeners) {
1524
- let tablesChanged;
1525
- collForEach(changes[3], (rows, tableId) => {
1526
- let tableChanged;
1527
- collForEach(rows, (cells, rowId) => {
1528
- let rowChanged;
1529
- collForEach(cells, ([oldCell, newCell], cellId) => {
1530
- if (newCell !== oldCell) {
1531
- callListeners(
1532
- cellListeners[mutator],
1533
- [tableId, rowId, cellId],
1534
- newCell,
1535
- oldCell,
1536
- getCellChange,
1537
- );
1538
- tablesChanged = tableChanged = rowChanged = 1;
1539
- }
1540
- });
1541
- if (rowChanged) {
1519
+ }
1520
+ if (!emptyOtherListeners) {
1521
+ let tablesChanged;
1522
+ collForEach(changes[3], (rows, tableId) => {
1523
+ let tableChanged;
1524
+ collForEach(rows, (cells, rowId) => {
1525
+ let rowChanged;
1526
+ collForEach(cells, ([oldCell, newCell], cellId) => {
1527
+ if (newCell !== oldCell) {
1542
1528
  callListeners(
1543
- rowListeners[mutator],
1544
- [tableId, rowId],
1529
+ cellListeners[mutator],
1530
+ [tableId, rowId, cellId],
1531
+ newCell,
1532
+ oldCell,
1545
1533
  getCellChange,
1546
1534
  );
1535
+ tablesChanged = tableChanged = rowChanged = 1;
1547
1536
  }
1548
1537
  });
1549
- if (tableChanged) {
1550
- callListeners(tableListeners[mutator], [tableId], getCellChange);
1538
+ if (rowChanged) {
1539
+ callListeners(
1540
+ rowListeners[mutator],
1541
+ [tableId, rowId],
1542
+ getCellChange,
1543
+ );
1551
1544
  }
1552
1545
  });
1553
- if (tablesChanged) {
1554
- callListeners(tablesListeners[mutator], [], getCellChange);
1546
+ if (tableChanged) {
1547
+ callListeners(tableListeners[mutator], [tableId], getCellChange);
1555
1548
  }
1549
+ });
1550
+ if (tablesChanged) {
1551
+ callListeners(tablesListeners[mutator], [], getCellChange);
1556
1552
  }
1557
1553
  }
1558
1554
  }
@@ -1681,61 +1677,79 @@ const createStore = () => {
1681
1677
  if (transactions == -1) {
1682
1678
  return;
1683
1679
  }
1684
- transactions++;
1680
+ startTransaction();
1685
1681
  const result = actions?.();
1686
- transactions--;
1687
- if (transactions == 0) {
1688
- transactions = 1;
1689
- callInvalidCellListeners(1);
1690
- callListenersForChanges(1);
1691
- transactions = -1;
1692
- if (
1693
- doRollback?.(
1694
- mapToObj(
1695
- changedCells,
1696
- (table) =>
1697
- mapToObj(
1698
- table,
1699
- (row) =>
1700
- mapToObj(
1701
- row,
1702
- (cells) => [...cells],
1703
- ([oldCell, newCell]) => oldCell === newCell,
1704
- ),
1705
- objIsEmpty,
1706
- ),
1707
- objIsEmpty,
1708
- ),
1709
- mapToObj(invalidCells, (map) => mapToObj(map, mapToObj)),
1710
- )
1711
- ) {
1682
+ finishTransaction(doRollback);
1683
+ return result;
1684
+ };
1685
+ const startTransaction = () => {
1686
+ transactions++;
1687
+ return store;
1688
+ };
1689
+ const finishTransaction = (doRollback) => {
1690
+ if (transactions > 0) {
1691
+ transactions--;
1692
+ if (transactions == 0) {
1693
+ cellsTouched = !collIsEmpty(changedCells);
1712
1694
  transactions = 1;
1713
- collForEach(changedCells, (table, tableId) =>
1714
- collForEach(table, (row, rowId) =>
1715
- collForEach(row, ([oldCell], cellId) =>
1716
- isUndefined(oldCell)
1717
- ? delCell(tableId, rowId, cellId, true)
1718
- : setCell(tableId, rowId, cellId, oldCell),
1695
+ callInvalidCellListeners(1);
1696
+ if (cellsTouched) {
1697
+ callListenersForChanges(1);
1698
+ }
1699
+ transactions = -1;
1700
+ if (
1701
+ doRollback?.(
1702
+ mapToObj(
1703
+ changedCells,
1704
+ (table) =>
1705
+ mapToObj(
1706
+ table,
1707
+ (row) =>
1708
+ mapToObj(
1709
+ row,
1710
+ (cells) => [...cells],
1711
+ ([oldCell, newCell]) => oldCell === newCell,
1712
+ ),
1713
+ objIsEmpty,
1714
+ ),
1715
+ objIsEmpty,
1719
1716
  ),
1720
- ),
1717
+ mapToObj(invalidCells, (map) => mapToObj(map, mapToObj)),
1718
+ )
1719
+ ) {
1720
+ transactions = 1;
1721
+ collForEach(changedCells, (table, tableId) =>
1722
+ collForEach(table, (row, rowId) =>
1723
+ collForEach(row, ([oldCell], cellId) =>
1724
+ isUndefined(oldCell)
1725
+ ? delCell(tableId, rowId, cellId, true)
1726
+ : setCell(tableId, rowId, cellId, oldCell),
1727
+ ),
1728
+ ),
1729
+ );
1730
+ transactions = -1;
1731
+ cellsTouched = false;
1732
+ }
1733
+ callListeners(finishTransactionListeners[0], [], cellsTouched);
1734
+ callInvalidCellListeners(0);
1735
+ if (cellsTouched) {
1736
+ callListenersForChanges(0);
1737
+ }
1738
+ callListeners(finishTransactionListeners[1], [], cellsTouched);
1739
+ transactions = 0;
1740
+ arrayForEach(
1741
+ [
1742
+ changedCells,
1743
+ invalidCells,
1744
+ changedTableIds,
1745
+ changedRowIds,
1746
+ changedCellIds,
1747
+ ],
1748
+ collClear,
1721
1749
  );
1722
- transactions = -1;
1723
1750
  }
1724
- callInvalidCellListeners(0);
1725
- callListenersForChanges(0);
1726
- transactions = 0;
1727
- arrayForEach(
1728
- [
1729
- changedCells,
1730
- invalidCells,
1731
- changedTableIds,
1732
- changedRowIds,
1733
- changedCellIds,
1734
- ],
1735
- collClear,
1736
- );
1737
1751
  }
1738
- return result;
1752
+ return store;
1739
1753
  };
1740
1754
  const forEachTable = (tableCallback) =>
1741
1755
  collForEach(tablesMap, (tableMap, tableId) =>
@@ -1777,6 +1791,10 @@ const createStore = () => {
1777
1791
  rowId,
1778
1792
  cellId,
1779
1793
  ]);
1794
+ const addWillFinishTransactionListener = (listener) =>
1795
+ addListener(listener, finishTransactionListeners[0]);
1796
+ const addDidFinishTransactionListener = (listener) =>
1797
+ addListener(listener, finishTransactionListeners[1]);
1780
1798
  const callListener = (listenerId) => {
1781
1799
  callListenerImpl(listenerId, [getTableIds, getRowIds, getCellIds], (ids) =>
1782
1800
  isUndefined(ids[2]) ? [] : arrayPair(getCell(...ids)),
@@ -1795,6 +1813,7 @@ const createStore = () => {
1795
1813
  row: collPairSize(rowListeners, collSize3),
1796
1814
  cellIds: collPairSize(cellIdsListeners, collSize3),
1797
1815
  cell: collPairSize(cellListeners, collSize4),
1816
+ invalidCell: collPairSize(invalidCellListeners, collSize4),
1798
1817
  });
1799
1818
  const store = {
1800
1819
  getTables,
@@ -1824,6 +1843,8 @@ const createStore = () => {
1824
1843
  delCell,
1825
1844
  delSchema,
1826
1845
  transaction,
1846
+ startTransaction,
1847
+ finishTransaction,
1827
1848
  forEachTable,
1828
1849
  forEachRow,
1829
1850
  forEachCell,
@@ -1835,6 +1856,8 @@ const createStore = () => {
1835
1856
  addCellIdsListener,
1836
1857
  addCellListener,
1837
1858
  addInvalidCellListener,
1859
+ addWillFinishTransactionListener,
1860
+ addDidFinishTransactionListener,
1838
1861
  callListener,
1839
1862
  delListener,
1840
1863
  getListenerStats,
package/lib/indexes.js CHANGED
@@ -1 +1 @@
1
- const e=e=>typeof e,t=e(""),s=(e,t)=>e.every(((s,n)=>0==n||t(e[n-1],s)<=0)),n=(e,t)=>e.sort(t),o=(e,t)=>e.forEach(t),r=e=>e.length,c=e=>0==r(e),d=e=>e.slice(1),l=e=>null==e,i=(e,t,s)=>l(e)?s?.():t(e),a=(e,t)=>e?.has(t)??!1,h=e=>l(e)||0==(e=>e.size)(e),u=e=>e.clear(),I=(e,t)=>e?.forEach(t),f=(e,t)=>e?.delete(t),g=e=>new Map(e),S=e=>[...e?.keys()??[]],w=(e,t)=>e?.get(t),p=(e,t)=>I(e,((e,s)=>t(s,e))),L=(e,t,s)=>l(s)?(f(e,t),e):e?.set(t,s),x=(e,t,s,n)=>(a(e,t)||(n?.(s),e.set(t,s)),w(e,t)),v=e=>new Set(e),E=(e,t)=>e?.add(t),R=(s,n)=>e(s)==t?e=>e(s):s??(()=>n??""),b=(e,t)=>e<t?-1:1,y=(e,t,s)=>r(s)<2?E(c(s)?e:x(e,s[0],v()),t):y(x(e,s[0],g()),t,d(s)),T=e=>{const t=(s,n,...r)=>i(s,(s=>c(r)?e(s,n):o([r[0],null],(e=>t(w(s,e),n,...d(r))))));return t},k=Object.freeze,z=(e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))})((e=>{const t=g(),c=g(),[d,x,z,C,D,M,j,O,W,m]=((e,t,s)=>{const n=e.hasRow,r=g(),c=g(),d=g(),h=g(),f=g(),x=t=>i(w(f,t),(s=>{I(s,e.delListener),L(f,t)})),E=e=>{L(r,e),L(c,e),L(d,e),L(h,e),x(e)};return[()=>e,()=>S(r),e=>p(c,e),e=>a(c,e),e=>w(r,e),e=>w(c,e),(e,t)=>L(c,e,t),(i,S,E,R,b)=>{const y=g(),T=g();L(r,i,S),a(c,i)||(L(c,i,t()),L(d,i,g()),L(h,i,g()));const k=w(d,i),z=w(h,i),C=t=>{const o=s=>e.getCell(S,t,s),r=w(k,t),c=n(S,t)?s(R(o,t)):void 0;if(r!=c&&L(y,t,[r,c]),!l(b)){const e=w(z,t),s=n(S,t)?b(o,t):void 0;e!=s&&L(T,t,s)}},D=e=>{E((()=>{I(y,(([,e],t)=>L(k,t,e))),I(T,((e,t)=>L(z,t,e)))}),y,T,k,z,e),u(y),u(T)};p(k,C),e.hasTable(S)&&o(e.getRowIds(S),(e=>{a(k,e)||C(e)})),D(!0),x(i),L(f,i,v([e.addRowListener(S,null,((e,t,s)=>C(s))),e.addTableListener(S,(()=>D()))]))},E,()=>p(f,E)]})(e,g,(e=>l(e)?"":e+"")),[q,A,B]=(e=>{let t,s=0;const n=[],c=g();return[(o,r,d=[])=>{t??=e();const l=n.pop()??""+s++;return L(c,l,[o,r,d]),y(r,l,d),l},(e,s=[],...n)=>T(I)(e,(e=>i(w(c,e),(([e])=>e(t,...s,...n)))),...s),e=>i(w(c,e),(([,t,s])=>(T(f)(t,e,...s),L(c,e),r(n)<1e3&&n.push(e),s)),(()=>[])),(e,s,n)=>i(w(c,e),(([e,,c])=>{const d=(...i)=>{const a=r(i);a==r(c)?e(t,...i,...n(i)):l(c[a])?o(s[a](...i),(e=>d(...i,e))):d(...i,c[a])};d()}))]})((()=>G)),F=(t,s,n)=>{const o=D(t);I(n,((t,n)=>s(n,(s=>I(t,(t=>s(t,(s=>e.forEachCell(o,t,s)))))))))},G={setIndexDefinition:(e,o,r,d,u,S=b)=>{const x=l(u)?void 0:([e],[t])=>u(e,t);return O(e,o,((o,r,u,R,b,y)=>{let T=0;const k=v(),z=v(),C=M(e);if(I(r,(([e,t],s)=>{l(e)||(E(k,e),i(w(C,e),(t=>{f(t,s),h(t)&&(L(C,e),T=1)}))),l(t)||(E(k,t),a(C,t)||(L(C,t,v()),T=1),E(w(C,t),s),l(d)||E(z,t))})),o(),h(b)||(y?p(C,(e=>E(z,e))):p(u,(e=>i(w(R,e),(e=>E(z,e))))),I(z,(e=>{const t=(t,s)=>S(w(b,t),w(b,s),e),o=[...w(C,e)];s(o,t)||(L(C,e,v(n(o,t))),E(k,e))}))),(T||y)&&!l(x)){const t=[...C];s(t,x)||(j(e,g(n(t,x))),T=1)}T&&A(t,[e]),I(k,(t=>A(c,[e,t])))}),R(r),i(d,R)),G},delIndexDefinition:e=>(W(e),G),getStore:d,getIndexIds:x,forEachIndex:e=>z(((t,s)=>e(t,(e=>F(t,e,s))))),forEachSlice:(e,t)=>F(e,t,M(e)),hasIndex:C,hasSlice:(e,t)=>a(M(e),t),getTableId:D,getSliceIds:e=>S(M(e)),getSliceRowIds:(e,t)=>[...w(M(e),t)?.values()??[]],addSliceIdsListener:(e,s)=>q(s,t,[e]),addSliceRowIdsListener:(e,t,s)=>q(s,c,[e,t]),delListener:e=>(B(e),G),destroy:m,getListenerStats:()=>({})};return k(G)}));export{z as createIndexes};
1
+ const e=e=>typeof e,t=e(""),s=(e,t)=>e.every(((s,n)=>0==n||t(e[n-1],s)<=0)),n=(e,t)=>e.sort(t),o=(e,t)=>e.forEach(t),r=e=>e.length,c=e=>0==r(e),d=e=>e.slice(1),l=e=>null==e,i=(e,t,s)=>l(e)?s?.():t(e),a=(e,t)=>e?.has(t)??!1,h=e=>l(e)||0==(e=>e.size)(e),u=e=>e.clear(),I=(e,t)=>e?.forEach(t),f=(e,t)=>e?.delete(t),g=e=>new Map(e),S=e=>[...e?.keys()??[]],w=(e,t)=>e?.get(t),p=(e,t)=>I(e,((e,s)=>t(s,e))),L=(e,t,s)=>l(s)?(f(e,t),e):e?.set(t,s),x=(e,t,s)=>(a(e,t)||e.set(t,s()),w(e,t)),v=e=>new Set(e),E=(e,t)=>e?.add(t),R=(s,n)=>e(s)==t?e=>e(s):s??(()=>n??""),b=(e,t)=>e<t?-1:1,y=(e,t,s)=>r(s)<2?E(c(s)?e:x(e,s[0],v),t):y(x(e,s[0],g),t,d(s)),T=e=>{const t=(s,n,...r)=>i(s,(s=>c(r)?e(s,n):o([r[0],null],(e=>t(w(s,e),n,...d(r))))));return t},k=Object.freeze,z=(e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))})((e=>{const t=g(),c=g(),[d,x,z,C,D,M,j,O,W,m]=((e,t,s)=>{const n=e.hasRow,r=g(),c=g(),d=g(),h=g(),f=g(),x=t=>i(w(f,t),(s=>{I(s,e.delListener),L(f,t)})),E=e=>{L(r,e),L(c,e),L(d,e),L(h,e),x(e)};return[()=>e,()=>S(r),e=>p(c,e),e=>a(c,e),e=>w(r,e),e=>w(c,e),(e,t)=>L(c,e,t),(i,S,E,R,b)=>{const y=g(),T=g();L(r,i,S),a(c,i)||(L(c,i,t()),L(d,i,g()),L(h,i,g()));const k=w(d,i),z=w(h,i),C=t=>{const o=s=>e.getCell(S,t,s),r=w(k,t),c=n(S,t)?s(R(o,t)):void 0;if(r!=c&&L(y,t,[r,c]),!l(b)){const e=w(z,t),s=n(S,t)?b(o,t):void 0;e!=s&&L(T,t,s)}},D=e=>{E((()=>{I(y,(([,e],t)=>L(k,t,e))),I(T,((e,t)=>L(z,t,e)))}),y,T,k,z,e),u(y),u(T)};p(k,C),e.hasTable(S)&&o(e.getRowIds(S),(e=>{a(k,e)||C(e)})),D(!0),x(i),L(f,i,v([e.addRowListener(S,null,((e,t,s)=>C(s))),e.addTableListener(S,(()=>D()))]))},E,()=>p(f,E)]})(e,g,(e=>l(e)?"":e+"")),[q,A,B]=(e=>{let t,s=0;const n=[],c=g();return[(o,r,d=[])=>{t??=e();const l=n.pop()??""+s++;return L(c,l,[o,r,d]),y(r,l,d),l},(e,s=[],...n)=>T(I)(e,(e=>i(w(c,e),(([e])=>e(t,...s,...n)))),...s),e=>i(w(c,e),(([,t,s])=>(T(f)(t,e,...s),L(c,e),r(n)<1e3&&n.push(e),s)),(()=>[])),(e,s,n)=>i(w(c,e),(([e,,c])=>{const d=(...i)=>{const a=r(i);a==r(c)?e(t,...i,...n(i)):l(c[a])?o(s[a](...i),(e=>d(...i,e))):d(...i,c[a])};d()}))]})((()=>G)),F=(t,s,n)=>{const o=D(t);I(n,((t,n)=>s(n,(s=>I(t,(t=>s(t,(s=>e.forEachCell(o,t,s)))))))))},G={setIndexDefinition:(e,o,r,d,u,S=b)=>{const x=l(u)?void 0:([e],[t])=>u(e,t);return O(e,o,((o,r,u,R,b,y)=>{let T=0;const k=v(),z=v(),C=M(e);if(I(r,(([e,t],s)=>{l(e)||(E(k,e),i(w(C,e),(t=>{f(t,s),h(t)&&(L(C,e),T=1)}))),l(t)||(E(k,t),a(C,t)||(L(C,t,v()),T=1),E(w(C,t),s),l(d)||E(z,t))})),o(),h(b)||(y?p(C,(e=>E(z,e))):p(u,(e=>i(w(R,e),(e=>E(z,e))))),I(z,(e=>{const t=(t,s)=>S(w(b,t),w(b,s),e),o=[...w(C,e)];s(o,t)||(L(C,e,v(n(o,t))),E(k,e))}))),(T||y)&&!l(x)){const t=[...C];s(t,x)||(j(e,g(n(t,x))),T=1)}T&&A(t,[e]),I(k,(t=>A(c,[e,t])))}),R(r),i(d,R)),G},delIndexDefinition:e=>(W(e),G),getStore:d,getIndexIds:x,forEachIndex:e=>z(((t,s)=>e(t,(e=>F(t,e,s))))),forEachSlice:(e,t)=>F(e,t,M(e)),hasIndex:C,hasSlice:(e,t)=>a(M(e),t),getTableId:D,getSliceIds:e=>S(M(e)),getSliceRowIds:(e,t)=>[...w(M(e),t)?.values()??[]],addSliceIdsListener:(e,s)=>q(s,t,[e]),addSliceRowIdsListener:(e,t,s)=>q(s,c,[e,t]),delListener:e=>(B(e),G),destroy:m,getListenerStats:()=>({})};return k(G)}));export{z as createIndexes};
package/lib/indexes.js.gz CHANGED
Binary file
package/lib/metrics.js CHANGED
@@ -1 +1 @@
1
- const e=e=>typeof e,t=e(""),s=e(e),n=(e,t)=>e.forEach(t),o=e=>c(e,((e,t)=>e+t),0),i=e=>e.length,r=e=>0==i(e),c=(e,t,s)=>e.reduce(t,s),a=e=>e.slice(1),d=Math.max,l=Math.min,u=isFinite,h=e=>null==e,v=(e,t,s)=>h(e)?s?.():t(e),g=()=>{},M=e=>e.size,f=(e,t)=>e?.has(t)??!1,p=e=>e.clear(),m=(e,t)=>e?.forEach(t),w=(e,t)=>e?.delete(t),L=e=>new Map(e),b=(e,t)=>e?.get(t),x=(e,t)=>m(e,((e,s)=>t(s,e))),y=(e,t,s)=>h(s)?(w(e,t),e):e?.set(t,s),E=(e,t,s,n)=>(f(e,t)||(n?.(s),e.set(t,s)),b(e,t)),I=e=>new Set(e),R=(s,n)=>e(s)==t?e=>e(s):s??(()=>n??""),S=(e,t,s)=>i(s)<2?((e,t)=>e?.add(t))(r(s)?e:E(e,s[0],I()),t):S(E(e,s[0],L()),t,a(s)),T=e=>{const t=(s,o,...i)=>v(s,(s=>r(i)?e(s,o):n([i[0],null],(e=>t(b(s,e),o,...a(i))))));return t},k=Object.freeze,z=L([["avg",[(e,t)=>o(e)/t,(e,t,s)=>e+(t-e)/(s+1),(e,t,s)=>e+(e-t)/(s-1),(e,t,s,n)=>e+(t-s)/n]],["max",[e=>d(...e),(e,t)=>d(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:d(t,e)]],["min",[e=>l(...e),(e,t)=>l(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:l(t,e)]],["sum",[e=>o(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,s)=>e-s+t]]]),D=(e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))})((t=>{const o=L(),[r,c,a,d,l,E,D,N,j,C]=((e,t,s)=>{const o=e.hasRow,i=L(),r=L(),c=L(),a=L(),d=L(),l=t=>v(b(d,t),(s=>{m(s,e.delListener),y(d,t)})),u=e=>{y(i,e),y(r,e),y(c,e),y(a,e),l(e)};return[()=>e,()=>[...i?.keys()??[]],e=>x(r,e),e=>f(r,e),e=>b(i,e),e=>b(r,e),(e,t)=>y(r,e,t),(u,v,g,M,w)=>{const E=L(),R=L();y(i,u,v),f(r,u)||(y(r,u,t()),y(c,u,L()),y(a,u,L()));const S=b(c,u),T=b(a,u),k=t=>{const n=s=>e.getCell(v,t,s),i=b(S,t),r=o(v,t)?s(M(n,t)):void 0;if(i!=r&&y(E,t,[i,r]),!h(w)){const e=b(T,t),s=o(v,t)?w(n,t):void 0;e!=s&&y(R,t,s)}},z=e=>{g((()=>{m(E,(([,e],t)=>y(S,t,e))),m(R,((e,t)=>y(T,t,e)))}),E,R,S,T,e),p(E),p(R)};x(S,k),e.hasTable(v)&&n(e.getRowIds(v),(e=>{f(S,e)||k(e)})),z(!0),l(u),y(d,u,I([e.addRowListener(v,null,((e,t,s)=>k(s))),e.addTableListener(v,(()=>z()))]))},u,()=>x(d,u)]})(t,g,(e=>isNaN(e)||h(e)||!0===e||!1===e||""===e?void 0:1*e)),[F,O,W]=(e=>{let t,s=0;const o=[],r=L();return[(n,i,c=[])=>{t??=e();const a=o.pop()??""+s++;return y(r,a,[n,i,c]),S(i,a,c),a},(e,s=[],...n)=>T(m)(e,(e=>v(b(r,e),(([e])=>e(t,...s,...n)))),...s),e=>v(b(r,e),(([,t,s])=>(T(w)(t,e,...s),y(r,e),i(o)<1e3&&o.push(e),s)),(()=>[])),(e,s,o)=>v(b(r,e),(([e,,r])=>{const c=(...a)=>{const d=i(a);d==i(r)?e(t,...a,...o(a)):h(r[d])?n(s[d](...a),(e=>c(...a,e))):c(...a,r[d])};c()}))]})((()=>q)),q={setMetricDefinition:(t,n,i,r,c,a,d)=>{const l=e(i)==s?[i,c,a,d]:b(z,i)??b(z,"sum");return N(t,n,((e,s,n,i,r,c)=>{let a=E(t),d=M(i);const[v,g,f,p]=l;var w;c=c||h(a),m(s,(([e,t])=>{c||(a=h(e)?g?.(a,t,d++):h(t)?f?.(a,e,d--):p?.(a,t,e,d)),c=c||h(a)})),e(),h(w=i)||0==M(w)?a=void 0:c&&(a=v((e=>[...e?.values()??[]])(i),M(i))),u(a)||(a=void 0);const L=E(t);a!=L&&(D(t,a),O(o,[t],a,L))}),R(r,1)),q},delMetricDefinition:e=>(j(e),q),getStore:r,getMetricIds:c,forEachMetric:a,hasMetric:d,getTableId:l,getMetric:E,addMetricListener:(e,t)=>F(t,o,[e]),delListener:e=>(W(e),q),destroy:C,getListenerStats:()=>({})};return k(q)}));export{D as createMetrics};
1
+ const e=e=>typeof e,t=e(""),s=e(e),n=(e,t)=>e.forEach(t),o=e=>c(e,((e,t)=>e+t),0),i=e=>e.length,r=e=>0==i(e),c=(e,t,s)=>e.reduce(t,s),a=e=>e.slice(1),d=Math.max,l=Math.min,u=isFinite,h=e=>null==e,v=(e,t,s)=>h(e)?s?.():t(e),g=()=>{},M=e=>e.size,f=(e,t)=>e?.has(t)??!1,p=e=>e.clear(),m=(e,t)=>e?.forEach(t),w=(e,t)=>e?.delete(t),L=e=>new Map(e),b=(e,t)=>e?.get(t),x=(e,t)=>m(e,((e,s)=>t(s,e))),y=(e,t,s)=>h(s)?(w(e,t),e):e?.set(t,s),E=(e,t,s)=>(f(e,t)||e.set(t,s()),b(e,t)),I=e=>new Set(e),R=(s,n)=>e(s)==t?e=>e(s):s??(()=>n??""),S=(e,t,s)=>i(s)<2?((e,t)=>e?.add(t))(r(s)?e:E(e,s[0],I),t):S(E(e,s[0],L),t,a(s)),T=e=>{const t=(s,o,...i)=>v(s,(s=>r(i)?e(s,o):n([i[0],null],(e=>t(b(s,e),o,...a(i))))));return t},k=Object.freeze,z=L([["avg",[(e,t)=>o(e)/t,(e,t,s)=>e+(t-e)/(s+1),(e,t,s)=>e+(e-t)/(s-1),(e,t,s,n)=>e+(t-s)/n]],["max",[e=>d(...e),(e,t)=>d(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:d(t,e)]],["min",[e=>l(...e),(e,t)=>l(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:l(t,e)]],["sum",[e=>o(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,s)=>e-s+t]]]),D=(e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))})((t=>{const o=L(),[r,c,a,d,l,E,D,N,j,C]=((e,t,s)=>{const o=e.hasRow,i=L(),r=L(),c=L(),a=L(),d=L(),l=t=>v(b(d,t),(s=>{m(s,e.delListener),y(d,t)})),u=e=>{y(i,e),y(r,e),y(c,e),y(a,e),l(e)};return[()=>e,()=>[...i?.keys()??[]],e=>x(r,e),e=>f(r,e),e=>b(i,e),e=>b(r,e),(e,t)=>y(r,e,t),(u,v,g,M,w)=>{const E=L(),R=L();y(i,u,v),f(r,u)||(y(r,u,t()),y(c,u,L()),y(a,u,L()));const S=b(c,u),T=b(a,u),k=t=>{const n=s=>e.getCell(v,t,s),i=b(S,t),r=o(v,t)?s(M(n,t)):void 0;if(i!=r&&y(E,t,[i,r]),!h(w)){const e=b(T,t),s=o(v,t)?w(n,t):void 0;e!=s&&y(R,t,s)}},z=e=>{g((()=>{m(E,(([,e],t)=>y(S,t,e))),m(R,((e,t)=>y(T,t,e)))}),E,R,S,T,e),p(E),p(R)};x(S,k),e.hasTable(v)&&n(e.getRowIds(v),(e=>{f(S,e)||k(e)})),z(!0),l(u),y(d,u,I([e.addRowListener(v,null,((e,t,s)=>k(s))),e.addTableListener(v,(()=>z()))]))},u,()=>x(d,u)]})(t,g,(e=>isNaN(e)||h(e)||!0===e||!1===e||""===e?void 0:1*e)),[F,O,W]=(e=>{let t,s=0;const o=[],r=L();return[(n,i,c=[])=>{t??=e();const a=o.pop()??""+s++;return y(r,a,[n,i,c]),S(i,a,c),a},(e,s=[],...n)=>T(m)(e,(e=>v(b(r,e),(([e])=>e(t,...s,...n)))),...s),e=>v(b(r,e),(([,t,s])=>(T(w)(t,e,...s),y(r,e),i(o)<1e3&&o.push(e),s)),(()=>[])),(e,s,o)=>v(b(r,e),(([e,,r])=>{const c=(...a)=>{const d=i(a);d==i(r)?e(t,...a,...o(a)):h(r[d])?n(s[d](...a),(e=>c(...a,e))):c(...a,r[d])};c()}))]})((()=>q)),q={setMetricDefinition:(t,n,i,r,c,a,d)=>{const l=e(i)==s?[i,c,a,d]:b(z,i)??b(z,"sum");return N(t,n,((e,s,n,i,r,c)=>{let a=E(t),d=M(i);const[v,g,f,p]=l;var w;c=c||h(a),m(s,(([e,t])=>{c||(a=h(e)?g?.(a,t,d++):h(t)?f?.(a,e,d--):p?.(a,t,e,d)),c=c||h(a)})),e(),h(w=i)||0==M(w)?a=void 0:c&&(a=v((e=>[...e?.values()??[]])(i),M(i))),u(a)||(a=void 0);const L=E(t);a!=L&&(D(t,a),O(o,[t],a,L))}),R(r,1)),q},delMetricDefinition:e=>(j(e),q),getStore:r,getMetricIds:c,forEachMetric:a,hasMetric:d,getTableId:l,getMetric:E,addMetricListener:(e,t)=>F(t,o,[e]),delListener:e=>(W(e),q),destroy:C,getListenerStats:()=>({})};return k(q)}));export{D as createMetrics};
package/lib/metrics.js.gz CHANGED
Binary file
@@ -1 +1 @@
1
- const e=e=>typeof e,t=e(""),o=(e,t)=>e.forEach(t),s=e=>e.length,n=e=>0==s(e),i=e=>e.slice(1),r=e=>null==e,a=(e,t,o)=>r(e)?o?.():t(e),d=(e,t)=>e?.has(t)??!1,l=e=>[...e?.values()??[]],c=e=>e.clear(),R=(e,t)=>e?.forEach(t),h=(e,t)=>e?.delete(t),f=e=>new Map(e),g=(e,t)=>e?.get(t),u=(e,t)=>R(e,((e,o)=>t(o,e))),w=(e,t,o)=>r(o)?(h(e,t),e):e?.set(t,o),L=(e,t,o,s)=>(d(e,t)||(s?.(o),e.set(t,o)),g(e,t)),p=e=>new Set(e),I=(e,t)=>e?.add(t),b=(o,s)=>e(o)==t?e=>e(o):o??(()=>s??""),v=(e,t,o)=>s(o)<2?I(n(o)?e:L(e,o[0],p()),t):v(L(e,o[0],f()),t,i(o)),k=e=>{const t=(s,r,...d)=>a(s,(s=>n(d)?e(s,r):o([d[0],null],(e=>t(g(s,e),r,...i(d))))));return t},E=Object.freeze,T=(e=>{const t=new WeakMap;return o=>(t.has(o)||t.set(o,e(o)),t.get(o))})((e=>{const t=f(),n=f(),i=f(),L=f(),[T,m,y,S,z,D,M,j,x,C]=((e,t,s)=>{const n=e.hasRow,i=f(),l=f(),h=f(),L=f(),I=f(),b=t=>a(g(I,t),(o=>{R(o,e.delListener),w(I,t)})),v=e=>{w(i,e),w(l,e),w(h,e),w(L,e),b(e)};return[()=>e,()=>[...i?.keys()??[]],e=>u(l,e),e=>d(l,e),e=>g(i,e),e=>g(l,e),(e,t)=>w(l,e,t),(a,v,k,E,T)=>{const m=f(),y=f();w(i,a,v),d(l,a)||(w(l,a,t()),w(h,a,f()),w(L,a,f()));const S=g(h,a),z=g(L,a),D=t=>{const o=o=>e.getCell(v,t,o),i=g(S,t),a=n(v,t)?s(E(o,t)):void 0;if(i!=a&&w(m,t,[i,a]),!r(T)){const e=g(z,t),s=n(v,t)?T(o,t):void 0;e!=s&&w(y,t,s)}},M=e=>{k((()=>{R(m,(([,e],t)=>w(S,t,e))),R(y,((e,t)=>w(z,t,e)))}),m,y,S,z,e),c(m),c(y)};u(S,D),e.hasTable(v)&&o(e.getRowIds(v),(e=>{d(S,e)||D(e)})),M(!0),b(a),w(I,a,p([e.addRowListener(v,null,((e,t,o)=>D(o))),e.addTableListener(v,(()=>M()))]))},v,()=>u(I,v)]})(e,(()=>[f(),f(),f(),f()]),(e=>r(e)?void 0:e+"")),[O,W,q]=(e=>{let t,n=0;const i=[],d=f();return[(o,s,r=[])=>{t??=e();const a=i.pop()??""+n++;return w(d,a,[o,s,r]),v(s,a,r),a},(e,o=[],...s)=>k(R)(e,(e=>a(g(d,e),(([e])=>e(t,...o,...s)))),...o),e=>a(g(d,e),(([,t,o])=>(k(h)(t,e,...o),w(d,e),s(i)<1e3&&i.push(e),o)),(()=>[])),(e,n,i)=>a(g(d,e),(([e,,a])=>{const d=(...l)=>{const c=s(l);c==s(a)?e(t,...l,...i(l)):r(a[c])?o(n[c](...l),(e=>d(...l,e))):d(...l,a[c])};d()}))]})((()=>G)),A=(e,t,o)=>a(D(e),(([s,,n])=>{if(!d(n,t)){const i=p();if(z(e)!=F(e))I(i,t);else{let e=t;for(;!r(e)&&!d(i,e);)I(i,e),e=g(s,e)}if(o)return i;w(n,t,i)}return g(n,t)})),B=(e,t)=>a(D(e),(([,,e])=>w(e,t))),F=e=>g(t,e),G={setRelationshipDefinition:(e,o,s,l)=>(w(t,e,s),j(e,o,((t,o)=>{const s=p(),l=p(),c=p(),[f,b]=D(e);R(o,(([t,o],n)=>{r(t)||(I(l,t),a(g(b,t),(e=>{var o;h(e,n),(r(o=e)||0==(e=>e.size)(o))&&w(b,t)}))),r(o)||(I(l,o),d(b,o)||w(b,o,p()),I(g(b,o),n)),I(s,n),w(f,n,o),u(g(L,e),(t=>{d(A(e,t),n)&&I(c,t)}))})),t(),R(s,(t=>W(n,[e,t]))),R(l,(t=>W(i,[e,t]))),R(c,(t=>{B(e,t),W(L,[e,t])}))}),b(l)),G),delRelationshipDefinition:e=>(w(t,e),x(e),G),getStore:T,getRelationshipIds:m,forEachRelationship:t=>y((o=>t(o,(t=>e.forEachRow(z(o),t))))),hasRelationship:S,getLocalTableId:z,getRemoteTableId:F,getRemoteRowId:(e,t)=>g(D(e)?.[0],t),getLocalRowIds:(e,t)=>l(g(D(e)?.[1],t)),getLinkedRowIds:(e,t)=>r(D(e))?[t]:l(A(e,t,!0)),addRemoteRowIdListener:(e,t,o)=>O(o,n,[e,t]),addLocalRowIdsListener:(e,t,o)=>O(o,i,[e,t]),addLinkedRowIdsListener:(e,t,o)=>(A(e,t),O(o,L,[e,t])),delListener:e=>(B(...q(e)),G),destroy:C,getListenerStats:()=>({})};return E(G)}));export{T as createRelationships};
1
+ const e=e=>typeof e,t=e(""),o=(e,t)=>e.forEach(t),s=e=>e.length,n=e=>0==s(e),i=e=>e.slice(1),r=e=>null==e,a=(e,t,o)=>r(e)?o?.():t(e),d=(e,t)=>e?.has(t)??!1,l=e=>[...e?.values()??[]],c=e=>e.clear(),R=(e,t)=>e?.forEach(t),h=(e,t)=>e?.delete(t),f=e=>new Map(e),g=(e,t)=>e?.get(t),u=(e,t)=>R(e,((e,o)=>t(o,e))),w=(e,t,o)=>r(o)?(h(e,t),e):e?.set(t,o),L=(e,t,o)=>(d(e,t)||e.set(t,o()),g(e,t)),p=e=>new Set(e),I=(e,t)=>e?.add(t),b=(o,s)=>e(o)==t?e=>e(o):o??(()=>s??""),v=(e,t,o)=>s(o)<2?I(n(o)?e:L(e,o[0],p),t):v(L(e,o[0],f),t,i(o)),k=e=>{const t=(s,r,...d)=>a(s,(s=>n(d)?e(s,r):o([d[0],null],(e=>t(g(s,e),r,...i(d))))));return t},E=Object.freeze,T=(e=>{const t=new WeakMap;return o=>(t.has(o)||t.set(o,e(o)),t.get(o))})((e=>{const t=f(),n=f(),i=f(),L=f(),[T,m,y,S,z,D,M,j,x,C]=((e,t,s)=>{const n=e.hasRow,i=f(),l=f(),h=f(),L=f(),I=f(),b=t=>a(g(I,t),(o=>{R(o,e.delListener),w(I,t)})),v=e=>{w(i,e),w(l,e),w(h,e),w(L,e),b(e)};return[()=>e,()=>[...i?.keys()??[]],e=>u(l,e),e=>d(l,e),e=>g(i,e),e=>g(l,e),(e,t)=>w(l,e,t),(a,v,k,E,T)=>{const m=f(),y=f();w(i,a,v),d(l,a)||(w(l,a,t()),w(h,a,f()),w(L,a,f()));const S=g(h,a),z=g(L,a),D=t=>{const o=o=>e.getCell(v,t,o),i=g(S,t),a=n(v,t)?s(E(o,t)):void 0;if(i!=a&&w(m,t,[i,a]),!r(T)){const e=g(z,t),s=n(v,t)?T(o,t):void 0;e!=s&&w(y,t,s)}},M=e=>{k((()=>{R(m,(([,e],t)=>w(S,t,e))),R(y,((e,t)=>w(z,t,e)))}),m,y,S,z,e),c(m),c(y)};u(S,D),e.hasTable(v)&&o(e.getRowIds(v),(e=>{d(S,e)||D(e)})),M(!0),b(a),w(I,a,p([e.addRowListener(v,null,((e,t,o)=>D(o))),e.addTableListener(v,(()=>M()))]))},v,()=>u(I,v)]})(e,(()=>[f(),f(),f(),f()]),(e=>r(e)?void 0:e+"")),[O,W,q]=(e=>{let t,n=0;const i=[],d=f();return[(o,s,r=[])=>{t??=e();const a=i.pop()??""+n++;return w(d,a,[o,s,r]),v(s,a,r),a},(e,o=[],...s)=>k(R)(e,(e=>a(g(d,e),(([e])=>e(t,...o,...s)))),...o),e=>a(g(d,e),(([,t,o])=>(k(h)(t,e,...o),w(d,e),s(i)<1e3&&i.push(e),o)),(()=>[])),(e,n,i)=>a(g(d,e),(([e,,a])=>{const d=(...l)=>{const c=s(l);c==s(a)?e(t,...l,...i(l)):r(a[c])?o(n[c](...l),(e=>d(...l,e))):d(...l,a[c])};d()}))]})((()=>G)),A=(e,t,o)=>a(D(e),(([s,,n])=>{if(!d(n,t)){const i=p();if(z(e)!=F(e))I(i,t);else{let e=t;for(;!r(e)&&!d(i,e);)I(i,e),e=g(s,e)}if(o)return i;w(n,t,i)}return g(n,t)})),B=(e,t)=>a(D(e),(([,,e])=>w(e,t))),F=e=>g(t,e),G={setRelationshipDefinition:(e,o,s,l)=>(w(t,e,s),j(e,o,((t,o)=>{const s=p(),l=p(),c=p(),[f,b]=D(e);R(o,(([t,o],n)=>{r(t)||(I(l,t),a(g(b,t),(e=>{var o;h(e,n),(r(o=e)||0==(e=>e.size)(o))&&w(b,t)}))),r(o)||(I(l,o),d(b,o)||w(b,o,p()),I(g(b,o),n)),I(s,n),w(f,n,o),u(g(L,e),(t=>{d(A(e,t),n)&&I(c,t)}))})),t(),R(s,(t=>W(n,[e,t]))),R(l,(t=>W(i,[e,t]))),R(c,(t=>{B(e,t),W(L,[e,t])}))}),b(l)),G),delRelationshipDefinition:e=>(w(t,e),x(e),G),getStore:T,getRelationshipIds:m,forEachRelationship:t=>y((o=>t(o,(t=>e.forEachRow(z(o),t))))),hasRelationship:S,getLocalTableId:z,getRemoteTableId:F,getRemoteRowId:(e,t)=>g(D(e)?.[0],t),getLocalRowIds:(e,t)=>l(g(D(e)?.[1],t)),getLinkedRowIds:(e,t)=>r(D(e))?[t]:l(A(e,t,!0)),addRemoteRowIdListener:(e,t,o)=>O(o,n,[e,t]),addLocalRowIdsListener:(e,t,o)=>O(o,i,[e,t]),addLinkedRowIdsListener:(e,t,o)=>(A(e,t),O(o,L,[e,t])),delListener:e=>(B(...q(e)),G),destroy:C,getListenerStats:()=>({})};return E(G)}));export{T as createRelationships};
Binary file