tinybase 2.0.0-beta.4 → 2.0.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.
@@ -49,6 +49,7 @@ const arraySlice = (array, start, end) => array.slice(start, end);
49
49
  const arrayClear = (array, to) => array.splice(0, to);
50
50
  const arrayPush = (array, ...values) => array.push(...values);
51
51
  const arrayPop = (array) => array.pop();
52
+ const arrayShift = (array) => array.shift();
52
53
 
53
54
  const jsonString = (obj) =>
54
55
  JSON.stringify(obj, (_key, value) =>
@@ -295,6 +296,20 @@ const getCreateFunction = (getFunction) => {
295
296
  };
296
297
  };
297
298
 
299
+ const INTEGER = /^\d+$/;
300
+ const getPoolFunctions = () => {
301
+ const pool = [];
302
+ let nextId = 0;
303
+ return [
304
+ () => arrayShift(pool) ?? EMPTY_STRING + nextId++,
305
+ (id) => {
306
+ if (INTEGER.test(id) && arrayLength(pool) < 1e3) {
307
+ arrayPush(pool, id);
308
+ }
309
+ },
310
+ ];
311
+ };
312
+
298
313
  const getWildcardedLeaves = (deepIdSet, path = [EMPTY_STRING]) => {
299
314
  const leaves = [];
300
315
  const deep = (node, p) =>
@@ -308,12 +323,11 @@ const getWildcardedLeaves = (deepIdSet, path = [EMPTY_STRING]) => {
308
323
  };
309
324
  const getListenerFunctions = (getThing) => {
310
325
  let thing;
311
- let nextId = 0;
312
- const listenerPool = [];
326
+ const [getId, releaseId] = getPoolFunctions();
313
327
  const allListeners = mapNew();
314
328
  const addListener = (listener, idSetNode, path) => {
315
329
  thing ??= getThing();
316
- const id = arrayPop(listenerPool) ?? EMPTY_STRING + nextId++;
330
+ const id = getId();
317
331
  mapSet(allListeners, id, [listener, idSetNode, path]);
318
332
  setAdd(visitTree(idSetNode, path ?? [EMPTY_STRING], setNew), id);
319
333
  return id;
@@ -331,9 +345,7 @@ const getListenerFunctions = (getThing) => {
331
345
  return collIsEmpty(idSet) ? 1 : 0;
332
346
  });
333
347
  mapSet(allListeners, id);
334
- if (arrayLength(listenerPool) < 1e3) {
335
- arrayPush(listenerPool, id);
336
- }
348
+ releaseId(id);
337
349
  return idOrNulls;
338
350
  });
339
351
  const callListener = (id, idNullGetters, extraArgsGetter) =>
@@ -470,7 +482,7 @@ const createCheckpoints = getCreateFunction((store) => {
470
482
  const goForwardImpl = () => {
471
483
  if (!arrayIsEmpty(forwardIds)) {
472
484
  arrayPush(backwardIds, currentId);
473
- currentId = forwardIds.shift();
485
+ currentId = arrayShift(forwardIds);
474
486
  updateStore(1, currentId);
475
487
  checkpointsChanged = 1;
476
488
  }
@@ -1123,10 +1135,16 @@ const createQueries = getCreateFunction((store) => {
1123
1135
  ),
1124
1136
  );
1125
1137
  const resetPreStores = (queryId) => {
1126
- mapForEach(mapGet(preStoreListenerIds, queryId), (preStore2, listenerIds) =>
1127
- collForEach(listenerIds, (listenerId) =>
1128
- preStore2.delListener(listenerId),
1129
- ),
1138
+ ifNotUndefined(
1139
+ mapGet(preStoreListenerIds, queryId),
1140
+ (queryPreStoreListenerIds) => {
1141
+ mapForEach(queryPreStoreListenerIds, (preStore2, listenerIds) =>
1142
+ collForEach(listenerIds, (listenerId) =>
1143
+ preStore2.delListener(listenerId),
1144
+ ),
1145
+ );
1146
+ collClear(queryPreStoreListenerIds);
1147
+ },
1130
1148
  );
1131
1149
  arrayForEach([resultStore, preStore], (store2) => store2.delTable(queryId));
1132
1150
  };
@@ -1286,12 +1304,18 @@ const createQueries = getCreateFunction((store) => {
1286
1304
  }
1287
1305
  },
1288
1306
  );
1289
- (collIsEmpty(selectedRowIds) ||
1307
+ if (
1308
+ collIsEmpty(selectedRowIds) ||
1290
1309
  !arrayEvery(havings, (having2) =>
1291
1310
  having2((cellId) => groupRow[cellId]),
1292
1311
  )
1293
- ? resultStore.delRow
1294
- : resultStore.setRow)(queryId, groupRowId, groupRow);
1312
+ ) {
1313
+ resultStore.delRow(queryId, groupRowId);
1314
+ } else if (isUndefined(groupRowId)) {
1315
+ leaf[2] = resultStore.addRow(queryId, groupRow);
1316
+ } else {
1317
+ resultStore.setRow(queryId, groupRowId, groupRow);
1318
+ }
1295
1319
  },
1296
1320
  );
1297
1321
  addPreStoreListener(
@@ -1331,18 +1355,10 @@ const createQueries = getCreateFunction((store) => {
1331
1355
  });
1332
1356
  if (changedLeaf) {
1333
1357
  writeGroupRow(
1334
- visitTree(
1335
- tree,
1336
- oldPath,
1337
- void 0,
1338
- ([, selectedRowIds, groupRowId]) => {
1339
- collDel(selectedRowIds, selectedRowId);
1340
- if (collIsEmpty(selectedRowIds)) {
1341
- resultStore.delRow(queryId, groupRowId);
1342
- return 1;
1343
- }
1344
- },
1345
- ),
1358
+ visitTree(tree, oldPath, void 0, ([, selectedRowIds]) => {
1359
+ collDel(selectedRowIds, selectedRowId);
1360
+ return collIsEmpty(selectedRowIds);
1361
+ }),
1346
1362
  changedGroupedSelectedCells,
1347
1363
  selectedRowId,
1348
1364
  1,
@@ -1365,12 +1381,7 @@ const createQueries = getCreateFunction((store) => {
1365
1381
  selectedCellId,
1366
1382
  )),
1367
1383
  );
1368
- return [
1369
- mapNew(),
1370
- setNew(),
1371
- resultStore.addRow(queryId, groupRow, 1),
1372
- groupRow,
1373
- ];
1384
+ return [mapNew(), setNew(), void 0, groupRow];
1374
1385
  },
1375
1386
  ([, selectedRowIds]) => {
1376
1387
  setAdd(selectedRowIds, selectedRowId);
@@ -1750,7 +1761,6 @@ const idsChanged = (changedIds, id2, added) =>
1750
1761
  const createStore = () => {
1751
1762
  let hasSchema;
1752
1763
  let cellsTouched;
1753
- let nextRowId = 0;
1754
1764
  let transactions = 0;
1755
1765
  const changedTableIds = mapNew();
1756
1766
  const changedRowIds = mapNew();
@@ -1759,6 +1769,7 @@ const createStore = () => {
1759
1769
  const invalidCells = mapNew();
1760
1770
  const schemaMap = mapNew();
1761
1771
  const schemaRowCache = mapNew();
1772
+ const tablePoolFunctions = mapNew();
1762
1773
  const tablesMap = mapNew();
1763
1774
  const tablesListeners = pairNewMap();
1764
1775
  const tableIdsListeners = pairNewMap();
@@ -1921,18 +1932,26 @@ const createStore = () => {
1921
1932
  addDefaultsToRow({[cellId]: validCell}, tableId, rowId),
1922
1933
  ),
1923
1934
  );
1924
- const getNewRowId = (tableMap) => {
1925
- const rowId = EMPTY_STRING + nextRowId++;
1926
- if (!collHas(tableMap, rowId)) {
1935
+ const getNewRowId = (tableId) => {
1936
+ const [getId] = mapEnsure(tablePoolFunctions, tableId, getPoolFunctions);
1937
+ const rowId = getId();
1938
+ if (!collHas(mapGet(tablesMap, tableId), rowId)) {
1927
1939
  return rowId;
1928
1940
  }
1929
- return getNewRowId(tableMap);
1941
+ return getNewRowId(tableId);
1930
1942
  };
1931
1943
  const getOrCreateTable = (tableId) =>
1932
1944
  mapGet(tablesMap, tableId) ?? setValidTable(tableId, {});
1933
1945
  const delValidTable = (tableId) => setValidTable(tableId, {});
1934
- const delValidRow = (tableId, tableMap, rowId) =>
1946
+ const delValidRow = (tableId, tableMap, rowId) => {
1947
+ const [, releaseId] = mapEnsure(
1948
+ tablePoolFunctions,
1949
+ tableId,
1950
+ getPoolFunctions,
1951
+ );
1952
+ releaseId(rowId);
1935
1953
  setValidRow(tableId, tableMap, rowId, {}, true);
1954
+ };
1936
1955
  const delValidCell = (tableId, table, rowId, row, cellId, forceDel) => {
1937
1956
  const defaultCell = mapGet(mapGet(schemaRowCache, tableId)?.[0], cellId);
1938
1957
  if (!isUndefined(defaultCell) && !forceDel) {
@@ -2178,16 +2197,17 @@ const createStore = () => {
2178
2197
  tableId,
2179
2198
  rowId,
2180
2199
  );
2181
- const addRow = (tableId, row, forceId) =>
2200
+ const addRow = (tableId, row) =>
2182
2201
  transaction(() => {
2183
- tableId = id(tableId);
2184
- const isValidRow = validateRow(tableId, void 0, row);
2185
- const rowId =
2186
- isValidRow || forceId
2187
- ? getNewRowId(mapGet(tablesMap, tableId))
2188
- : void 0;
2189
- if (isValidRow) {
2190
- setValidRow(tableId, getOrCreateTable(tableId), rowId, row);
2202
+ let rowId = void 0;
2203
+ if (validateRow(tableId, rowId, row)) {
2204
+ tableId = id(tableId);
2205
+ setValidRow(
2206
+ tableId,
2207
+ getOrCreateTable(tableId),
2208
+ (rowId = getNewRowId(tableId)),
2209
+ row,
2210
+ );
2191
2211
  }
2192
2212
  return rowId;
2193
2213
  });
@@ -14,6 +14,7 @@
14
14
  * @see Building UIs With Metrics guide
15
15
  * @see Building UIs With Indexes guide
16
16
  * @see Building UIs With Relationships guide
17
+ * @see Building UIs With Queries guide
17
18
  * @see Building UIs With Checkpoints guide
18
19
  * @see Countries demo
19
20
  * @see Todo App demos
package/lib/indexes.js CHANGED
@@ -1 +1 @@
1
- const e=e=>typeof e,t=e(""),n=(e,t)=>((e,t)=>e.every(t))(e,((n,s)=>0==s||t(e[s-1],n)<=0)),s=(e,t)=>e.sort(t),o=(e,t)=>e.forEach(t),r=e=>e.length,c=(e,...t)=>e.push(...t),l=e=>null==e,d=(e,t,n)=>l(e)?n?.():t(e),i=(e,t)=>e?.has(t)??!1,a=e=>l(e)||0==(e=>e.size)(e),u=e=>[...e?.values()??[]],h=e=>e.clear(),f=(e,t)=>e?.forEach(t),I=(e,t)=>e?.delete(t),g=e=>new Map(e),S=e=>[...e?.keys()??[]],w=(e,t)=>e?.get(t),L=(e,t)=>f(e,((e,n)=>t(n,e))),p=(e,t,n)=>l(n)?(I(e,t),e):e?.set(t,n),v=(e,t,n)=>(i(e,t)||p(e,t,n()),w(e,t)),x=(e,t,n,s,o=0)=>d((n?v:w)(e,t[o],o>r(t)-2?n:g),(c=>{if(o>r(t)-2)return s?.(c)&&p(e,t[o]),c;const l=x(c,t,n,s,o+1);return a(c)&&p(e,t[o]),l})),E=e=>new Set(e),R=(e,t)=>e?.add(t),b=(e,t,n)=>{const s=e.hasRow,c=g(),x=g(),b=g(),y=g(),T=g(),k=(t,n,...s)=>{const r=v(T,t,E);return o(s,(t=>R(r,t)&&n&&e.callListener(t))),s},z=(t,...n)=>d(w(T,t),(s=>{o(0==r(n)?u(s):n,(t=>{e.delListener(t),I(s,t)})),a(s)&&p(T,t)})),C=(e,n)=>{p(c,e,n),i(x,e)||(p(x,e,t()),p(b,e,g()),p(y,e,g()))},D=e=>{p(c,e),p(x,e),p(b,e),p(y,e),z(e)};return[()=>e,()=>S(c),e=>L(x,e),e=>i(x,e),e=>w(c,e),e=>w(x,e),(e,t)=>p(x,e,t),C,(t,r,c,d,a)=>{C(t,r);const u=g(),I=g(),S=w(b,t),v=w(y,t),x=t=>{const o=n=>e.getCell(r,t,n),c=w(S,t),i=s(r,t)?n(d(o,t)):void 0;if(c!=i&&p(u,t,[c,i]),!l(a)){const e=w(v,t),n=s(r,t)?a(o,t):void 0;e!=n&&p(I,t,n)}},E=e=>{c((()=>{f(u,(([,e],t)=>p(S,t,e))),f(I,((e,t)=>p(v,t,e)))}),u,I,S,v,e),h(u),h(I)};L(S,x),e.hasTable(r)&&o(e.getRowIds(r),(e=>{i(S,e)||x(e)})),E(!0),z(t),k(t,0,e.addRowListener(r,null,((e,t,n)=>x(n))),e.addTableListener(r,(()=>E())))},D,()=>L(T,D),k,z]},y=(n,s)=>e(n)==t?e=>e(n):n??(()=>s??""),T=(e,t)=>e<t?-1:1,k=e=>{let t,n=0;const s=[],i=g();return[(o,r,c)=>{t??=e();const l=s.pop()??""+n++;return p(i,l,[o,r,c]),R(x(r,c??[""],E),l),l},(e,n,...s)=>o(((e,t=[""])=>{const n=[],s=(e,l)=>l==r(t)?c(n,e):null===t[l]?f(e,(e=>s(e,l+1))):o([t[l],null],(t=>s(w(e,t),l+1)));return s(e,0),n})(e,n),(e=>f(e,(e=>w(i,e)[0](t,...n??[],...s))))),e=>d(w(i,e),(([,t,n])=>(x(t,n??[""],void 0,(t=>(I(t,e),a(t)?1:0))),p(i,e),r(s)<1e3&&c(s,e),n))),(e,n,s)=>d(w(i,e),(([e,,c=[]])=>{const d=(...i)=>{const a=r(i);a==r(c)?e(t,...i,...s(i)):l(c[a])?o(n[a](...i),(e=>d(...i,e))):d(...i,c[a])};d()}))]},z=Object.freeze,C=(e=>{const t=new WeakMap;return n=>(t.has(n)||t.set(n,e(n)),t.get(n))})((e=>{const t=g(),o=g(),[r,c,h,v,x,C,D,,M,j,O]=b(e,g,(e=>l(e)?"":e+"")),[W,m,q]=k((()=>B)),A=(t,n,s)=>{const o=x(t);f(s,((t,s)=>n(s,(n=>f(t,(t=>n(t,(n=>e.forEachCell(o,t,n)))))))))},B={setIndexDefinition:(e,r,c,u,h,S=T)=>{const v=l(h)?void 0:([e],[t])=>h(e,t);return M(e,r,((r,c,h,x,b,y)=>{let T=0;const k=E(),z=E(),M=C(e);if(f(c,(([e,t],n)=>{l(e)||(R(k,e),d(w(M,e),(t=>{I(t,n),a(t)&&(p(M,e),T=1)}))),l(t)||(R(k,t),i(M,t)||(p(M,t,E()),T=1),R(w(M,t),n),l(u)||R(z,t))})),r(),a(b)||(y?L(M,(e=>R(z,e))):L(h,(e=>d(w(x,e),(e=>R(z,e))))),f(z,(e=>{const t=(t,n)=>S(w(b,t),w(b,n),e),o=[...w(M,e)];n(o,t)||(p(M,e,E(s(o,t))),R(k,e))}))),(T||y)&&!l(v)){const t=[...M];n(t,v)||(D(e,g(s(t,v))),T=1)}T&&m(t,[e]),f(k,(t=>m(o,[e,t])))}),y(c),d(u,y)),B},delIndexDefinition:e=>(j(e),B),getStore:r,getIndexIds:c,forEachIndex:e=>h(((t,n)=>e(t,(e=>A(t,e,n))))),forEachSlice:(e,t)=>A(e,t,C(e)),hasIndex:v,hasSlice:(e,t)=>i(C(e),t),getTableId:x,getSliceIds:e=>S(C(e)),getSliceRowIds:(e,t)=>u(w(C(e),t)),addSliceIdsListener:(e,n)=>W(n,t,[e]),addSliceRowIdsListener:(e,t,n)=>W(n,o,[e,t]),delListener:e=>(q(e),B),destroy:O,getListenerStats:()=>({})};return z(B)}));export{C as createIndexes};
1
+ const e=e=>typeof e,t=e(""),n=(e,t)=>((e,t)=>e.every(t))(e,((n,s)=>0==s||t(e[s-1],n)<=0)),s=(e,t)=>e.sort(t),r=(e,t)=>e.forEach(t),o=e=>e.length,c=(e,...t)=>e.push(...t),l=e=>null==e,d=(e,t,n)=>l(e)?n?.():t(e),i=(e,t)=>e?.has(t)??!1,a=e=>l(e)||0==(e=>e.size)(e),u=e=>[...e?.values()??[]],h=e=>e.clear(),f=(e,t)=>e?.forEach(t),I=(e,t)=>e?.delete(t),g=e=>new Map(e),S=e=>[...e?.keys()??[]],w=(e,t)=>e?.get(t),L=(e,t)=>f(e,((e,n)=>t(n,e))),v=(e,t,n)=>l(n)?(I(e,t),e):e?.set(t,n),x=(e,t,n)=>(i(e,t)||v(e,t,n()),w(e,t)),p=(e,t,n,s,r=0)=>d((n?x:w)(e,t[r],r>o(t)-2?n:g),(c=>{if(r>o(t)-2)return s?.(c)&&v(e,t[r]),c;const l=p(c,t,n,s,r+1);return a(c)&&v(e,t[r]),l})),E=e=>new Set(e),R=(e,t)=>e?.add(t),b=(e,t,n)=>{const s=e.hasRow,c=g(),p=g(),b=g(),y=g(),T=g(),k=(t,n,...s)=>{const o=x(T,t,E);return r(s,(t=>R(o,t)&&n&&e.callListener(t))),s},z=(t,...n)=>d(w(T,t),(s=>{r(0==o(n)?u(s):n,(t=>{e.delListener(t),I(s,t)})),a(s)&&v(T,t)})),C=(e,n)=>{v(c,e,n),i(p,e)||(v(p,e,t()),v(b,e,g()),v(y,e,g()))},D=e=>{v(c,e),v(p,e),v(b,e),v(y,e),z(e)};return[()=>e,()=>S(c),e=>L(p,e),e=>i(p,e),e=>w(c,e),e=>w(p,e),(e,t)=>v(p,e,t),C,(t,o,c,d,a)=>{C(t,o);const u=g(),I=g(),S=w(b,t),x=w(y,t),p=t=>{const r=n=>e.getCell(o,t,n),c=w(S,t),i=s(o,t)?n(d(r,t)):void 0;if(c!=i&&v(u,t,[c,i]),!l(a)){const e=w(x,t),n=s(o,t)?a(r,t):void 0;e!=n&&v(I,t,n)}},E=e=>{c((()=>{f(u,(([,e],t)=>v(S,t,e))),f(I,((e,t)=>v(x,t,e)))}),u,I,S,x,e),h(u),h(I)};L(S,p),e.hasTable(o)&&r(e.getRowIds(o),(e=>{i(S,e)||p(e)})),E(!0),z(t),k(t,0,e.addRowListener(o,null,((e,t,n)=>p(n))),e.addTableListener(o,(()=>E())))},D,()=>L(T,D),k,z]},y=(n,s)=>e(n)==t?e=>e(n):n??(()=>s??""),T=(e,t)=>e<t?-1:1,k=/^\d+$/,z=e=>{let t;const[n,s]=(()=>{const e=[];let t=0;return[()=>e.shift()??""+t++,t=>{k.test(t)&&o(e)<1e3&&c(e,t)}]})(),i=g();return[(s,r,o)=>{t??=e();const c=n();return v(i,c,[s,r,o]),R(p(r,o??[""],E),c),c},(e,n,...s)=>r(((e,t=[""])=>{const n=[],s=(e,l)=>l==o(t)?c(n,e):null===t[l]?f(e,(e=>s(e,l+1))):r([t[l],null],(t=>s(w(e,t),l+1)));return s(e,0),n})(e,n),(e=>f(e,(e=>w(i,e)[0](t,...n??[],...s))))),e=>d(w(i,e),(([,t,n])=>(p(t,n??[""],void 0,(t=>(I(t,e),a(t)?1:0))),v(i,e),s(e),n))),(e,n,s)=>d(w(i,e),(([e,,c=[]])=>{const d=(...i)=>{const a=o(i);a==o(c)?e(t,...i,...s(i)):l(c[a])?r(n[a](...i),(e=>d(...i,e))):d(...i,c[a])};d()}))]},C=Object.freeze,D=(e=>{const t=new WeakMap;return n=>(t.has(n)||t.set(n,e(n)),t.get(n))})((e=>{const t=g(),r=g(),[o,c,h,x,p,k,D,,M,j,O]=b(e,g,(e=>l(e)?"":e+"")),[W,$,m]=z((()=>A)),q=(t,n,s)=>{const r=p(t);f(s,((t,s)=>n(s,(n=>f(t,(t=>n(t,(n=>e.forEachCell(r,t,n)))))))))},A={setIndexDefinition:(e,o,c,u,h,S=T)=>{const x=l(h)?void 0:([e],[t])=>h(e,t);return M(e,o,((o,c,h,p,b,y)=>{let T=0;const z=E(),C=E(),M=k(e);if(f(c,(([e,t],n)=>{l(e)||(R(z,e),d(w(M,e),(t=>{I(t,n),a(t)&&(v(M,e),T=1)}))),l(t)||(R(z,t),i(M,t)||(v(M,t,E()),T=1),R(w(M,t),n),l(u)||R(C,t))})),o(),a(b)||(y?L(M,(e=>R(C,e))):L(h,(e=>d(w(p,e),(e=>R(C,e))))),f(C,(e=>{const t=(t,n)=>S(w(b,t),w(b,n),e),r=[...w(M,e)];n(r,t)||(v(M,e,E(s(r,t))),R(z,e))}))),(T||y)&&!l(x)){const t=[...M];n(t,x)||(D(e,g(s(t,x))),T=1)}T&&$(t,[e]),f(z,(t=>$(r,[e,t])))}),y(c),d(u,y)),A},delIndexDefinition:e=>(j(e),A),getStore:o,getIndexIds:c,forEachIndex:e=>h(((t,n)=>e(t,(e=>q(t,e,n))))),forEachSlice:(e,t)=>q(e,t,k(e)),hasIndex:x,hasSlice:(e,t)=>i(k(e),t),getTableId:p,getSliceIds:e=>S(k(e)),getSliceRowIds:(e,t)=>u(w(k(e),t)),addSliceIdsListener:(e,n)=>W(n,t,[e]),addSliceRowIdsListener:(e,t,n)=>W(n,r,[e,t]),delListener:e=>(m(e),A),destroy:O,getListenerStats:()=>({})};return C(A)}));export{D 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(""),n=e(e),r=(e,t)=>e.forEach(t),s=e=>o(e,((e,t)=>e+t),0),i=e=>e.length,o=(e,t,n)=>e.reduce(t,n),c=(e,...t)=>e.push(...t),a=Math.max,d=Math.min,l=isFinite,u=e=>null==e,h=(e,t,n)=>u(e)?n?.():t(e),g=()=>{},v=e=>e.size,M=(e,t)=>e?.has(t)??!1,f=e=>u(e)||0==v(e),p=e=>[...e?.values()??[]],L=e=>e.clear(),m=(e,t)=>e?.forEach(t),w=(e,t)=>e?.delete(t),b=e=>new Map(e),x=(e,t)=>e?.get(t),y=(e,t)=>m(e,((e,n)=>t(n,e))),E=(e,t,n)=>u(n)?(w(e,t),e):e?.set(t,n),I=(e,t,n)=>(M(e,t)||E(e,t,n()),x(e,t)),R=(e,t,n,r,s=0)=>h((n?I:x)(e,t[s],s>i(t)-2?n:b),(o=>{if(s>i(t)-2)return r?.(o)&&E(e,t[s]),o;const c=R(o,t,n,r,s+1);return f(o)&&E(e,t[s]),c})),S=b([["avg",[(e,t)=>s(e)/t,(e,t,n)=>e+(t-e)/(n+1),(e,t,n)=>e+(e-t)/(n-1),(e,t,n,r)=>e+(t-n)/r]],["max",[e=>a(...e),(e,t)=>a(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:a(t,e)]],["min",[e=>d(...e),(e,t)=>d(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:d(t,e)]],["sum",[e=>s(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,n)=>e-n+t]]]),T=e=>new Set(e),k=(e,t)=>e?.add(t),z=(e,t,n)=>{const s=e.hasRow,o=b(),c=b(),a=b(),d=b(),l=b(),g=(t,n,...s)=>{const i=I(l,t,T);return r(s,(t=>k(i,t)&&n&&e.callListener(t))),s},v=(t,...n)=>h(x(l,t),(s=>{r(0==i(n)?p(s):n,(t=>{e.delListener(t),w(s,t)})),f(s)&&E(l,t)})),R=(e,n)=>{E(o,e,n),M(c,e)||(E(c,e,t()),E(a,e,b()),E(d,e,b()))},S=e=>{E(o,e),E(c,e),E(a,e),E(d,e),v(e)};return[()=>e,()=>[...o?.keys()??[]],e=>y(c,e),e=>M(c,e),e=>x(o,e),e=>x(c,e),(e,t)=>E(c,e,t),R,(t,i,o,c,l)=>{R(t,i);const h=b(),f=b(),p=x(a,t),w=x(d,t),I=t=>{const r=n=>e.getCell(i,t,n),o=x(p,t),a=s(i,t)?n(c(r,t)):void 0;if(o!=a&&E(h,t,[o,a]),!u(l)){const e=x(w,t),n=s(i,t)?l(r,t):void 0;e!=n&&E(f,t,n)}},S=e=>{o((()=>{m(h,(([,e],t)=>E(p,t,e))),m(f,((e,t)=>E(w,t,e)))}),h,f,p,w,e),L(h),L(f)};y(p,I),e.hasTable(i)&&r(e.getRowIds(i),(e=>{M(p,e)||I(e)})),S(!0),v(t),g(t,0,e.addRowListener(i,null,((e,t,n)=>I(n))),e.addTableListener(i,(()=>S())))},S,()=>y(l,S),g,v]},D=(n,r)=>e(n)==t?e=>e(n):n??(()=>r??""),N=e=>{let t,n=0;const s=[],o=b();return[(r,i,c)=>{t??=e();const a=s.pop()??""+n++;return E(o,a,[r,i,c]),k(R(i,c??[""],T),a),a},(e,n,...s)=>r(((e,t=[""])=>{const n=[],s=(e,o)=>o==i(t)?c(n,e):null===t[o]?m(e,(e=>s(e,o+1))):r([t[o],null],(t=>s(x(e,t),o+1)));return s(e,0),n})(e,n),(e=>m(e,(e=>x(o,e)[0](t,...n??[],...s))))),e=>h(x(o,e),(([,t,n])=>(R(t,n??[""],void 0,(t=>(w(t,e),f(t)?1:0))),E(o,e),i(s)<1e3&&c(s,e),n))),(e,n,s)=>h(x(o,e),(([e,,o=[]])=>{const c=(...a)=>{const d=i(a);d==i(o)?e(t,...a,...s(a)):u(o[d])?r(n[d](...a),(e=>c(...a,e))):c(...a,o[d])};c()}))]},j=Object.freeze,C=(e=>{const t=new WeakMap;return n=>(t.has(n)||t.set(n,e(n)),t.get(n))})((t=>{const r=b(),[s,i,o,c,a,d,h,,M,L,w]=z(t,g,(e=>isNaN(e)||u(e)||!0===e||!1===e||""===e?void 0:1*e)),[y,E,I]=N((()=>R)),R={setMetricDefinition:(t,s,i,o,c,a,g)=>{const L=e(i)==n?[i,c,a,g]:x(S,i)??x(S,"sum");return M(t,s,((e,n,s,i,o,c)=>{const a=d(t),g=v(i);c||=u(a),e();let M=((e,t,n,r,s,i=!1)=>{if(f(n))return;const[o,c,a,d]=s;return i||=u(e),m(r,(([n,r])=>{i||(e=u(n)?c?.(e,r,t++):u(r)?a?.(e,n,t--):d?.(e,r,n,t),i||=u(e))})),i?o(p(n),v(n)):e})(a,g,i,n,L,c);l(M)||(M=void 0),M!=a&&(h(t,M),E(r,[t],M,a))}),D(o,1)),R},delMetricDefinition:e=>(L(e),R),getStore:s,getMetricIds:i,forEachMetric:o,hasMetric:c,getTableId:a,getMetric:d,addMetricListener:(e,t)=>y(t,r,[e]),delListener:e=>(I(e),R),destroy:w,getListenerStats:()=>({})};return j(R)}));export{C as createMetrics};
1
+ const e=e=>typeof e,t=e(""),n=e(e),r=(e,t)=>e.forEach(t),s=e=>o(e,((e,t)=>e+t),0),i=e=>e.length,o=(e,t,n)=>e.reduce(t,n),c=(e,...t)=>e.push(...t),a=Math.max,d=Math.min,l=isFinite,u=e=>null==e,h=(e,t,n)=>u(e)?n?.():t(e),f=()=>{},g=e=>e.size,v=(e,t)=>e?.has(t)??!1,M=e=>u(e)||0==g(e),L=e=>[...e?.values()??[]],m=e=>e.clear(),w=(e,t)=>e?.forEach(t),p=(e,t)=>e?.delete(t),b=e=>new Map(e),x=(e,t)=>e?.get(t),y=(e,t)=>w(e,((e,n)=>t(n,e))),E=(e,t,n)=>u(n)?(p(e,t),e):e?.set(t,n),I=(e,t,n)=>(v(e,t)||E(e,t,n()),x(e,t)),R=(e,t,n,r,s=0)=>h((n?I:x)(e,t[s],s>i(t)-2?n:b),(o=>{if(s>i(t)-2)return r?.(o)&&E(e,t[s]),o;const c=R(o,t,n,r,s+1);return M(o)&&E(e,t[s]),c})),S=b([["avg",[(e,t)=>s(e)/t,(e,t,n)=>e+(t-e)/(n+1),(e,t,n)=>e+(e-t)/(n-1),(e,t,n,r)=>e+(t-n)/r]],["max",[e=>a(...e),(e,t)=>a(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:a(t,e)]],["min",[e=>d(...e),(e,t)=>d(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:d(t,e)]],["sum",[e=>s(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,n)=>e-n+t]]]),T=e=>new Set(e),k=(e,t)=>e?.add(t),z=(e,t,n)=>{const s=e.hasRow,o=b(),c=b(),a=b(),d=b(),l=b(),f=(t,n,...s)=>{const i=I(l,t,T);return r(s,(t=>k(i,t)&&n&&e.callListener(t))),s},g=(t,...n)=>h(x(l,t),(s=>{r(0==i(n)?L(s):n,(t=>{e.delListener(t),p(s,t)})),M(s)&&E(l,t)})),R=(e,n)=>{E(o,e,n),v(c,e)||(E(c,e,t()),E(a,e,b()),E(d,e,b()))},S=e=>{E(o,e),E(c,e),E(a,e),E(d,e),g(e)};return[()=>e,()=>[...o?.keys()??[]],e=>y(c,e),e=>v(c,e),e=>x(o,e),e=>x(c,e),(e,t)=>E(c,e,t),R,(t,i,o,c,l)=>{R(t,i);const h=b(),M=b(),L=x(a,t),p=x(d,t),I=t=>{const r=n=>e.getCell(i,t,n),o=x(L,t),a=s(i,t)?n(c(r,t)):void 0;if(o!=a&&E(h,t,[o,a]),!u(l)){const e=x(p,t),n=s(i,t)?l(r,t):void 0;e!=n&&E(M,t,n)}},S=e=>{o((()=>{w(h,(([,e],t)=>E(L,t,e))),w(M,((e,t)=>E(p,t,e)))}),h,M,L,p,e),m(h),m(M)};y(L,I),e.hasTable(i)&&r(e.getRowIds(i),(e=>{v(L,e)||I(e)})),S(!0),g(t),f(t,0,e.addRowListener(i,null,((e,t,n)=>I(n))),e.addTableListener(i,(()=>S())))},S,()=>y(l,S),f,g]},D=(n,r)=>e(n)==t?e=>e(n):n??(()=>r??""),N=/^\d+$/,j=e=>{let t;const[n,s]=(()=>{const e=[];let t=0;return[()=>e.shift()??""+t++,t=>{N.test(t)&&i(e)<1e3&&c(e,t)}]})(),o=b();return[(r,s,i)=>{t??=e();const c=n();return E(o,c,[r,s,i]),k(R(s,i??[""],T),c),c},(e,n,...s)=>r(((e,t=[""])=>{const n=[],s=(e,o)=>o==i(t)?c(n,e):null===t[o]?w(e,(e=>s(e,o+1))):r([t[o],null],(t=>s(x(e,t),o+1)));return s(e,0),n})(e,n),(e=>w(e,(e=>x(o,e)[0](t,...n??[],...s))))),e=>h(x(o,e),(([,t,n])=>(R(t,n??[""],void 0,(t=>(p(t,e),M(t)?1:0))),E(o,e),s(e),n))),(e,n,s)=>h(x(o,e),(([e,,o=[]])=>{const c=(...a)=>{const d=i(a);d==i(o)?e(t,...a,...s(a)):u(o[d])?r(n[d](...a),(e=>c(...a,e))):c(...a,o[d])};c()}))]},C=Object.freeze,F=(e=>{const t=new WeakMap;return n=>(t.has(n)||t.set(n,e(n)),t.get(n))})((t=>{const r=b(),[s,i,o,c,a,d,h,,v,m,p]=z(t,f,(e=>isNaN(e)||u(e)||!0===e||!1===e||""===e?void 0:1*e)),[y,E,I]=j((()=>R)),R={setMetricDefinition:(t,s,i,o,c,a,f)=>{const m=e(i)==n?[i,c,a,f]:x(S,i)??x(S,"sum");return v(t,s,((e,n,s,i,o,c)=>{const a=d(t),f=g(i);c||=u(a),e();let v=((e,t,n,r,s,i=!1)=>{if(M(n))return;const[o,c,a,d]=s;return i||=u(e),w(r,(([n,r])=>{i||(e=u(n)?c?.(e,r,t++):u(r)?a?.(e,n,t--):d?.(e,r,n,t),i||=u(e))})),i?o(L(n),g(n)):e})(a,f,i,n,m,c);l(v)||(v=void 0),v!=a&&(h(t,v),E(r,[t],v,a))}),D(o,1)),R},delMetricDefinition:e=>(m(e),R),getStore:s,getMetricIds:i,forEachMetric:o,hasMetric:c,getTableId:a,getMetric:d,addMetricListener:(e,t)=>y(t,r,[e]),delListener:e=>(I(e),R),destroy:p,getListenerStats:()=>({})};return C(R)}));export{F as createMetrics};
package/lib/metrics.js.gz CHANGED
Binary file
package/lib/queries.d.ts CHANGED
@@ -2,10 +2,10 @@
2
2
  * The queries module of the TinyBase project provides the ability to create and
3
3
  * track queries of the data in Store objects.
4
4
  *
5
- * The main entry point to this module is the createQueries function, which
6
- * returns a new Queries object. From there, you can create new query
7
- * definitions, access the results of those directly, and register listeners for
8
- * when they change.
5
+ * The main entry point to using the queries module is the createQueries
6
+ * function, which returns a new Queries object. That object in turn has methods
7
+ * that let you create new query definitions, access their results directly, and
8
+ * register listeners for when those results change.
9
9
  *
10
10
  * @packageDocumentation
11
11
  * @module queries
@@ -385,18 +385,18 @@ export type GetTableCell = {
385
385
  * The Select type describes a function that lets you specify a Cell or
386
386
  * calculated value for including into the query's result.
387
387
  *
388
- * The Select function is provided as an parameter in the `build` parameter of
389
- * the setQueryDefinition method. A query definition must call the Select
390
- * function at least once, otherwise it will be meaningless and return no data.
388
+ * The Select function is provided to the third `query` parameter of the
389
+ * setQueryDefinition method. A query definition must call the Select function
390
+ * at least once, otherwise it will be meaningless and return no data.
391
391
  *
392
392
  * @example
393
393
  * This example shows a query that selects two Cells from the main query Table.
394
394
  *
395
395
  * ```js
396
396
  * const store = createStore().setTable('pets', {
397
- * fido: {species: 'dog', color: 'brown'},
398
- * felix: {species: 'cat', color: 'black'},
399
- * cujo: {species: 'dog', color: 'black'},
397
+ * fido: {species: 'dog', color: 'brown', legs: 4},
398
+ * felix: {species: 'cat', color: 'black', legs: 4},
399
+ * cujo: {species: 'dog', color: 'black', legs: 4},
400
400
  * });
401
401
  *
402
402
  * const queries = createQueries(store);
@@ -572,9 +572,9 @@ export type SelectedAs = {
572
572
 
573
573
  /**
574
574
  * The Join type describes a function that lets you specify a Cell or calculated
575
- * value to join the main query Table to others, by Row Id.
575
+ * value to join the main query Table to other Tables, by their Row Id.
576
576
  *
577
- * The Join function is provided as an parameter in the `build` parameter of the
577
+ * The Join function is provided to the third `query` parameter of the
578
578
  * setQueryDefinition method.
579
579
  *
580
580
  * You can join zero, one, or many Tables. You can join the same underlying
@@ -856,8 +856,8 @@ export type JoinedAs = {as: (joinedTableId: Id) => void};
856
856
  * The Where type describes a function that lets you specify conditions to
857
857
  * filter results, based on the underlying Cells of the main or joined Tables.
858
858
  *
859
- * The Where function is provided as an parameter in the `build` parameter of
860
- * the setQueryDefinition method.
859
+ * The Where function is provided to the third `query` parameter of the
860
+ * setQueryDefinition method.
861
861
  *
862
862
  * If you do not specify a Where clause, you should expect every non-empty Row
863
863
  * of the main Table to appear in the query's results.
@@ -867,10 +867,10 @@ export type JoinedAs = {as: (joinedTableId: Id) => void};
867
867
  * wish to create an 'or' expression, use the single parameter version of the
868
868
  * type that allows arbitrary programmatic conditions.
869
869
  *
870
- * The Where clause differs from the Having clause in that the former describes
871
- * conditions that should be met by underlying Cell values (whether selected or
872
- * not), and the latter describes conditions based on calculated and aggregated
873
- * values - after Group clauses have been applied.
870
+ * The Where keyword differs from the Having keyword in that the former
871
+ * describes conditions that should be met by underlying Cell values (whether
872
+ * selected or not), and the latter describes conditions based on calculated and
873
+ * aggregated values - after Group clauses have been applied.
874
874
  *
875
875
  * @example
876
876
  * This example shows a query that filters the results from a single Table by
@@ -1006,8 +1006,8 @@ export type Where = {
1006
1006
  * The Group type describes a function that lets you specify that the values of
1007
1007
  * a Cell in multiple result Rows should be aggregated together.
1008
1008
  *
1009
- * The Group function is provided as an parameter in the `build` parameter of
1010
- * the setQueryDefinition method. When called, it should refer to a Cell Id (or
1009
+ * The Group function is provided to the third `query` parameter of the
1010
+ * setQueryDefinition method. When called, it should refer to a Cell Id (or
1011
1011
  * aliased Id) specified in one of the Select functions, and indicate how the
1012
1012
  * values should be aggregated.
1013
1013
  *
@@ -1225,18 +1225,18 @@ export type GroupedAs = {as: (groupedCellId: Id) => void};
1225
1225
  * The Having type describes a function that lets you specify conditions to
1226
1226
  * filter results, based on the grouped Cells resulting from a Group clause.
1227
1227
  *
1228
- * The Having function is provided as an parameter in the `build` parameter of
1229
- * the setQueryDefinition method.
1228
+ * The Having function is provided to the third `query` parameter of the
1229
+ * setQueryDefinition method.
1230
1230
  *
1231
1231
  * A Having condition has to be true for a Row to be included in the results.
1232
1232
  * Each Having class is additive, as though combined with a logical 'and'. If
1233
1233
  * you wish to create an 'or' expression, use the single parameter version of
1234
1234
  * the type that allows arbitrary programmatic conditions.
1235
1235
  *
1236
- * The Where clause differs from the Having clause in that the former describes
1237
- * conditions that should be met by underlying Cell values (whether selected or
1238
- * not), and the latter describes conditions based on calculated and aggregated
1239
- * values - after Group clauses have been applied.
1236
+ * The Where keyword differs from the Having keyword in that the former
1237
+ * describes conditions that should be met by underlying Cell values (whether
1238
+ * selected or not), and the latter describes conditions based on calculated and
1239
+ * aggregated values - after Group clauses have been applied.
1240
1240
  *
1241
1241
  * Whilst it is technically possible to use a Having clause even if the results
1242
1242
  * have not been grouped with a Group clause, you should expect it to be less
@@ -1269,8 +1269,8 @@ export type GroupedAs = {as: (groupedCellId: Id) => void};
1269
1269
  * queries.forEachResultRow('query', (rowId) => {
1270
1270
  * console.log({[rowId]: queries.getResultRow('query', rowId)});
1271
1271
  * });
1272
- * // -> {1: {species: 'cat', minPrice: 3, maxPrice: 4}}
1273
- * // -> {2: {species: 'parrot', minPrice: 3, maxPrice: 3}}
1272
+ * // -> {0: {species: 'cat', minPrice: 3, maxPrice: 4}}
1273
+ * // -> {1: {species: 'parrot', minPrice: 3, maxPrice: 3}}
1274
1274
  * ```
1275
1275
  * @example
1276
1276
  * This example shows a query that filters the results from a grouped Table with
@@ -1421,7 +1421,9 @@ export type Having = {
1421
1421
  * queries.delListener(listenerId);
1422
1422
  * queries.destroy();
1423
1423
  * ```
1424
- * @see Queries guides
1424
+ * @see Making Queries guides
1425
+ * @see Car Analysis demo
1426
+ * @see Movie Database demo
1425
1427
  * @category Queries
1426
1428
  * @since v2.0.0
1427
1429
  */
@@ -1436,11 +1438,11 @@ export interface Queries {
1436
1438
  * The definition must specify this 'main' Table (by its Id) to be aggregated.
1437
1439
  * Other Tables can be joined to that using Join clauses.
1438
1440
  *
1439
- * The third `build` parameter is a callback that you provide to define the
1440
- * query. That callback is provided with a `builders` object that contains the
1441
- * named 'keywords' for the query, like `select`, `join`, and so on. You can
1442
- * see how that is used in the simple example below. The following five
1443
- * clause types are supported:
1441
+ * The third `query` parameter is a callback that you provide to define the
1442
+ * query. That callback is provided with a `keywords` object that contains the
1443
+ * functions you use to define the query, like `select`, `join`, and so on.
1444
+ * You can see how that is used in the simple example below. The following
1445
+ * five clause types are supported:
1444
1446
  *
1445
1447
  * - The Select type describes a function that lets you specify a Cell or
1446
1448
  * calculated value for including into the query's result.
@@ -1456,14 +1458,14 @@ export interface Queries {
1456
1458
  *
1457
1459
  * Full documentation and examples are provided in the sections for each of
1458
1460
  * those clause types.
1459
- *
1461
+ *
1460
1462
  * Additionally, you can use the getResultSortedRowIds method and
1461
1463
  * addResultSortedRowIdsListener method to sort and paginate the results.
1462
1464
  *
1463
1465
  * @param queryId The Id of the query to define.
1464
1466
  * @param tableId The Id of the main Table the query will be based on.
1465
- * @param build A callback which can take a `builders` object and which uses
1466
- the clause functions it contains to define the query.
1467
+ * @param query A callback which can take a `keywords` object and which uses
1468
+ the functions it contains to define the query.
1467
1469
  * @returns A reference to the Queries object.
1468
1470
  * @example
1469
1471
  * This example creates a Store, creates a Queries object, and defines a
@@ -1492,7 +1494,7 @@ export interface Queries {
1492
1494
  setQueryDefinition(
1493
1495
  queryId: Id,
1494
1496
  tableId: Id,
1495
- build: (builders: {
1497
+ query: (keywords: {
1496
1498
  select: Select;
1497
1499
  join: Join;
1498
1500
  where: Where;
package/lib/queries.js CHANGED
@@ -1 +1 @@
1
- const e=e=>typeof e,t=e(""),n=e(!0),s=e(0),r=e(e),o=(e,t)=>e.every(t),l=(e,t)=>e.forEach(t),a=e=>c(e,((e,t)=>e+t),0),i=e=>e.length,d=e=>0==i(e),c=(e,t,n)=>e.reduce(t,n),u=(e,...t)=>e.push(...t),h=Math.max,w=Math.min,R=isFinite,g=e=>null==e,f=(e,t,n)=>g(e)?n?.():t(e),L=t=>e(t)==r,v=()=>{},y=e=>e.size,T=(e,t)=>e?.has(t)??!1,b=e=>g(e)||0==y(e),C=e=>[...e?.values()??[]],I=e=>e.clear(),p=(e,t)=>e?.forEach(t),S=(e,t)=>e?.delete(t),m=e=>new Map(e),Q=(e,t)=>e?.get(t),E=(e,t)=>p(e,((e,n)=>t(n,e))),M=(e,t,n)=>g(n)?(S(e,t),e):e?.set(t,n),x=(e,t,n)=>(T(e,t)||M(e,t,n()),Q(e,t)),D=(e,t,n,s,r=0)=>f((n?x:Q)(e,t[r],r>i(t)-2?n:m),(o=>{if(r>i(t)-2)return s?.(o)&&M(e,t[r]),o;const l=D(o,t,n,s,r+1);return b(o)&&M(e,t[r]),l})),F=e=>new Set(e),j=(e,t)=>e?.add(t),k=m([["avg",[(e,t)=>a(e)/t,(e,t,n)=>e+(t-e)/(n+1),(e,t,n)=>e+(e-t)/(n-1),(e,t,n,s)=>e+(t-n)/s]],["max",[e=>h(...e),(e,t)=>h(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:h(t,e)]],["min",[e=>w(...e),(e,t)=>w(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:w(t,e)]],["sum",[e=>a(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,n)=>e-n+t]]]),z=r=>{const o=e(r);return(e=>e==t||e==n)(o)||o==s&&R(r)?o:void 0},W=Object,O=W.freeze,q=(e=>{const t=new WeakMap;return n=>(t.has(n)||t.set(n,e(n)),t.get(n))})((e=>{const t=e.createStore,[n,s,r,a,c,,,h,,w,R,q,A]=((e,t,n)=>{const s=e.hasRow,r=m(),o=m(),a=m(),i=m(),c=m(),u=(t,n,...s)=>{const r=x(c,t,F);return l(s,(t=>j(r,t)&&n&&e.callListener(t))),s},h=(t,...n)=>f(Q(c,t),(s=>{l(d(n)?C(s):n,(t=>{e.delListener(t),S(s,t)})),b(s)&&M(c,t)})),w=(e,n)=>{M(r,e,n),T(o,e)||(M(o,e,t()),M(a,e,m()),M(i,e,m()))},R=e=>{M(r,e),M(o,e),M(a,e),M(i,e),h(e)};return[()=>e,()=>[...r?.keys()??[]],e=>E(o,e),e=>T(o,e),e=>Q(r,e),e=>Q(o,e),(e,t)=>M(o,e,t),w,(t,r,o,d,c)=>{w(t,r);const R=m(),f=m(),L=Q(a,t),v=Q(i,t),y=t=>{const o=n=>e.getCell(r,t,n),l=Q(L,t),a=s(r,t)?n(d(o,t)):void 0;if(l!=a&&M(R,t,[l,a]),!g(c)){const e=Q(v,t),n=s(r,t)?c(o,t):void 0;e!=n&&M(f,t,n)}},b=e=>{o((()=>{p(R,(([,e],t)=>M(L,t,e))),p(f,((e,t)=>M(v,t,e)))}),R,f,L,v,e),I(R),I(f)};E(L,y),e.hasTable(r)&&l(e.getRowIds(r),(e=>{T(L,e)||y(e)})),b(!0),h(t),u(t,0,e.addRowListener(r,null,((e,t,n)=>y(n))),e.addTableListener(r,(()=>b())))},R,()=>E(c,R),u,h]})(e,(()=>!0),v),B=t(),G=t(),H=m(),J=(e,t,...n)=>l(n,(n=>j(x(x(H,t,m),e,F),n))),K=e=>{E(Q(H,e),((e,t)=>p(t,(t=>e.delListener(t))))),l([G,B],(t=>t.delTable(e)))},N=(e,t,n)=>J(t,e,t.addWillFinishTransactionListener(n.startTransaction),t.addDidFinishTransactionListener((()=>n.finishTransaction()))),P={setQueryDefinition:(t,n,s)=>{h(t,n),K(t);const r=[],a=[[null,[n,null,null,[],m()]]],c=[],w=[],R=[];s({select:(e,t)=>{const n=L(e)?[i(r)+"",e]:[g(t)?e:t,n=>n(e,t)];return u(r,n),{as:e=>n[0]=e}},join:(e,t,n)=>{const s=g(n)||L(t)?null:t,r=g(s)?t:n,o=[e,[e,s,L(r)?r:e=>e(r),[],m()]];return u(a,o),{as:e=>o[0]=e}},where:(e,t,n)=>u(c,L(e)?e:g(n)?n=>n(e)===t:s=>s(e,t)===n),group:(e,t,n,s,r)=>{const o=[e,[e,L(t)?[t,n,s,r]:Q(k,t)??[(e,t)=>t]]];return u(w,o),{as:e=>o[0]=e}},having:(e,t)=>u(R,L(e)?e:n=>n(e)===t)});const v=m(r);if(b(v))return P;const I=m(a);E(I,((e,[,t])=>f(Q(I,t),(({3:t})=>g(e)?0:u(t,e)))));const W=m(w);let O=B;if(b(W)&&d(R))O=G;else{N(t,O,G);const e=m();E(W,((t,[n,s])=>j(x(e,n,F),[t,s])));const n=F();E(v,(t=>T(e,t)?0:j(n,t)));const s=m(),r=(n,s,r,l)=>f(n,(([n,a,i,d])=>{E(s,((t,[s])=>{const o=x(n,t,m),a=Q(o,r),i=l?void 0:s;if(a!==i){const n=F([[a,i]]),s=y(o);M(o,r,i),p(Q(e,t),(([e,t])=>{const r=((e,t,n,s,r,o=!1)=>{if(b(n))return;const[l,a,i,d]=r;return o||=g(e),p(s,(([n,s])=>{o||(e=g(n)?a?.(e,s,t++):g(s)?i?.(e,n,t--):d?.(e,s,n,t),o||=g(e))})),o?l(C(n),y(n)):e})(d[e],s,o,n,t);d[e]=g(z(r))?null:r}))}})),(b(a)||!o(R,(e=>e((e=>d[e]))))?G.delRow:G.setRow)(t,i,d)}));J(O,t,O.addRowListener(t,null,((o,l,a,i)=>{const d=[],c=[],h=m(),w=O.hasRow(t,a);let R=!w;p(n,(e=>{const[n,s,r]=i(t,a,e);u(d,s),u(c,r),R||=n})),E(e,(e=>{const[n,,s]=i(t,a,e);(R||n)&&M(h,e,[s])})),R&&r(D(s,d,void 0,(([,e,n])=>{if(S(e,a),b(e))return G.delRow(t,n),1})),h,a,1),w&&r(D(s,c,(()=>{const e={};return p(n,(n=>e[n]=O.getCell(t,a,n))),[m(),F(),G.addRow(t,e,1),e]}),(([,e])=>{j(e,a)})),h,a)})))}N(t,e,O);const H=s=>{const r=(t,r)=>e.getCell(...g(r)?[n,s,t]:t===n?[n,s,r]:[Q(I,t)?.[0],Q(Q(I,t)?.[4],s)?.[0],r]);O.transaction((()=>o(c,(e=>e(r)))?E(v,((e,n)=>((e,t,n,s,r)=>g(r)?e.delCell(t,n,s,!0):e.setCell(t,n,s,r))(O,t,s,e,n(r,s)))):O.delRow(t,s)))},U=(n,s,r,o)=>{const a=t=>e.getCell(s,r,t);l(o,(s=>{const[r,,o,l,i]=Q(I,s),d=o?.(a,n),[c,u]=Q(i,n)??[];d!=c&&(g(u)||A(t,u),M(i,n,g(d)?null:[d,...q(t,1,e.addRowListener(r,d,(()=>U(n,r,d,l))))]))})),H(n)},{3:V}=Q(I,null);return O.transaction((()=>q(t,1,e.addRowListener(n,null,((s,r,o)=>{e.hasRow(n,o)?U(o,n,o,V):(O.delRow(t,o),p(I,(({4:e})=>f(Q(e,o),(([,n])=>{A(t,n),M(e,o)})))))}))))),P},delQueryDefinition:e=>(K(e),w(e),P),getStore:n,getQueryIds:s,forEachQuery:r,hasQuery:a,getTableId:c,delListener:e=>(G.delListener(e),P),destroy:R,getListenerStats:()=>{const{tables:e,tableIds:t,transaction:n,...s}=G.getListenerStats();return s}};var U,V;return U={Table:[1,1],RowIds:[0,1],SortedRowIds:[0,5],Row:[1,2],CellIds:[0,2],Cell:[1,3]},V=([e,t],n)=>{l(e?["get","has","forEach"]:["get"],(e=>P[e+"Result"+n]=(...t)=>G[e+n](...t))),P["addResult"+n+"Listener"]=(...e)=>{return G["add"+n+"Listener"](...(s=e,r=0,o=t,s.slice(r,o)),((n,...s)=>e[t](P,...s)));var s,r,o}},l(W.entries(U),(([e,t])=>V(t,e))),O(P)}));export{q as createQueries};
1
+ const e=e=>typeof e,t=e(""),n=e(!0),s=e(0),r=e(e),o=(e,t)=>e.every(t),l=(e,t)=>e.forEach(t),a=e=>c(e,((e,t)=>e+t),0),i=e=>e.length,d=e=>0==i(e),c=(e,t,n)=>e.reduce(t,n),u=(e,...t)=>e.push(...t),h=Math.max,w=Math.min,g=isFinite,R=e=>null==e,v=(e,t,n)=>R(e)?n?.():t(e),L=t=>e(t)==r,f=()=>{},y=e=>e.size,T=(e,t)=>e?.has(t)??!1,b=e=>R(e)||0==y(e),C=e=>[...e?.values()??[]],I=e=>e.clear(),p=(e,t)=>e?.forEach(t),S=(e,t)=>e?.delete(t),m=e=>new Map(e),Q=(e,t)=>e?.get(t),E=(e,t)=>p(e,((e,n)=>t(n,e))),M=(e,t,n)=>R(n)?(S(e,t),e):e?.set(t,n),x=(e,t,n)=>(T(e,t)||M(e,t,n()),Q(e,t)),D=(e,t,n,s,r=0)=>v((n?x:Q)(e,t[r],r>i(t)-2?n:m),(o=>{if(r>i(t)-2)return s?.(o)&&M(e,t[r]),o;const l=D(o,t,n,s,r+1);return b(o)&&M(e,t[r]),l})),F=e=>new Set(e),j=(e,t)=>e?.add(t),k=m([["avg",[(e,t)=>a(e)/t,(e,t,n)=>e+(t-e)/(n+1),(e,t,n)=>e+(e-t)/(n-1),(e,t,n,s)=>e+(t-n)/s]],["max",[e=>h(...e),(e,t)=>h(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:h(t,e)]],["min",[e=>w(...e),(e,t)=>w(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:w(t,e)]],["sum",[e=>a(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,n)=>e-n+t]]]),z=r=>{const o=e(r);return(e=>e==t||e==n)(o)||o==s&&g(r)?o:void 0},W=Object,O=W.freeze,q=(e=>{const t=new WeakMap;return n=>(t.has(n)||t.set(n,e(n)),t.get(n))})((e=>{const t=e.createStore,[n,s,r,a,c,,,h,,w,g,q,A]=((e,t,n)=>{const s=e.hasRow,r=m(),o=m(),a=m(),i=m(),c=m(),u=(t,n,...s)=>{const r=x(c,t,F);return l(s,(t=>j(r,t)&&n&&e.callListener(t))),s},h=(t,...n)=>v(Q(c,t),(s=>{l(d(n)?C(s):n,(t=>{e.delListener(t),S(s,t)})),b(s)&&M(c,t)})),w=(e,n)=>{M(r,e,n),T(o,e)||(M(o,e,t()),M(a,e,m()),M(i,e,m()))},g=e=>{M(r,e),M(o,e),M(a,e),M(i,e),h(e)};return[()=>e,()=>[...r?.keys()??[]],e=>E(o,e),e=>T(o,e),e=>Q(r,e),e=>Q(o,e),(e,t)=>M(o,e,t),w,(t,r,o,d,c)=>{w(t,r);const g=m(),v=m(),L=Q(a,t),f=Q(i,t),y=t=>{const o=n=>e.getCell(r,t,n),l=Q(L,t),a=s(r,t)?n(d(o,t)):void 0;if(l!=a&&M(g,t,[l,a]),!R(c)){const e=Q(f,t),n=s(r,t)?c(o,t):void 0;e!=n&&M(v,t,n)}},b=e=>{o((()=>{p(g,(([,e],t)=>M(L,t,e))),p(v,((e,t)=>M(f,t,e)))}),g,v,L,f,e),I(g),I(v)};E(L,y),e.hasTable(r)&&l(e.getRowIds(r),(e=>{T(L,e)||y(e)})),b(!0),h(t),u(t,0,e.addRowListener(r,null,((e,t,n)=>y(n))),e.addTableListener(r,(()=>b())))},g,()=>E(c,g),u,h]})(e,(()=>!0),f),B=t(),G=t(),H=m(),J=(e,t,...n)=>l(n,(n=>j(x(x(H,t,m),e,F),n))),K=e=>{v(Q(H,e),(e=>{E(e,((e,t)=>p(t,(t=>e.delListener(t))))),I(e)})),l([G,B],(t=>t.delTable(e)))},N=(e,t,n)=>J(t,e,t.addWillFinishTransactionListener(n.startTransaction),t.addDidFinishTransactionListener((()=>n.finishTransaction()))),P={setQueryDefinition:(t,n,s)=>{h(t,n),K(t);const r=[],a=[[null,[n,null,null,[],m()]]],c=[],w=[],g=[];s({select:(e,t)=>{const n=L(e)?[i(r)+"",e]:[R(t)?e:t,n=>n(e,t)];return u(r,n),{as:e=>n[0]=e}},join:(e,t,n)=>{const s=R(n)||L(t)?null:t,r=R(s)?t:n,o=[e,[e,s,L(r)?r:e=>e(r),[],m()]];return u(a,o),{as:e=>o[0]=e}},where:(e,t,n)=>u(c,L(e)?e:R(n)?n=>n(e)===t:s=>s(e,t)===n),group:(e,t,n,s,r)=>{const o=[e,[e,L(t)?[t,n,s,r]:Q(k,t)??[(e,t)=>t]]];return u(w,o),{as:e=>o[0]=e}},having:(e,t)=>u(g,L(e)?e:n=>n(e)===t)});const f=m(r);if(b(f))return P;const I=m(a);E(I,((e,[,t])=>v(Q(I,t),(({3:t})=>R(e)?0:u(t,e)))));const W=m(w);let O=B;if(b(W)&&d(g))O=G;else{N(t,O,G);const e=m();E(W,((t,[n,s])=>j(x(e,n,F),[t,s])));const n=F();E(f,(t=>T(e,t)?0:j(n,t)));const s=m(),r=(n,s,r,l)=>v(n,(([a,i,d,c])=>{E(s,((t,[n])=>{const s=x(a,t,m),o=Q(s,r),i=l?void 0:n;if(o!==i){const n=F([[o,i]]),l=y(s);M(s,r,i),p(Q(e,t),(([e,t])=>{const r=((e,t,n,s,r,o=!1)=>{if(b(n))return;const[l,a,i,d]=r;return o||=R(e),p(s,(([n,s])=>{o||(e=R(n)?a?.(e,s,t++):R(s)?i?.(e,n,t--):d?.(e,s,n,t),o||=R(e))})),o?l(C(n),y(n)):e})(c[e],l,s,n,t);c[e]=R(z(r))?null:r}))}})),b(i)||!o(g,(e=>e((e=>c[e]))))?G.delRow(t,d):R(d)?n[2]=G.addRow(t,c):G.setRow(t,d,c)}));J(O,t,O.addRowListener(t,null,((o,l,a,i)=>{const d=[],c=[],h=m(),w=O.hasRow(t,a);let g=!w;p(n,(e=>{const[n,s,r]=i(t,a,e);u(d,s),u(c,r),g||=n})),E(e,(e=>{const[n,,s]=i(t,a,e);(g||n)&&M(h,e,[s])})),g&&r(D(s,d,void 0,(([,e])=>(S(e,a),b(e)))),h,a,1),w&&r(D(s,c,(()=>{const e={};return p(n,(n=>e[n]=O.getCell(t,a,n))),[m(),F(),void 0,e]}),(([,e])=>{j(e,a)})),h,a)})))}N(t,e,O);const H=s=>{const r=(t,r)=>e.getCell(...R(r)?[n,s,t]:t===n?[n,s,r]:[Q(I,t)?.[0],Q(Q(I,t)?.[4],s)?.[0],r]);O.transaction((()=>o(c,(e=>e(r)))?E(f,((e,n)=>((e,t,n,s,r)=>R(r)?e.delCell(t,n,s,!0):e.setCell(t,n,s,r))(O,t,s,e,n(r,s)))):O.delRow(t,s)))},U=(n,s,r,o)=>{const a=t=>e.getCell(s,r,t);l(o,(s=>{const[r,,o,l,i]=Q(I,s),d=o?.(a,n),[c,u]=Q(i,n)??[];d!=c&&(R(u)||A(t,u),M(i,n,R(d)?null:[d,...q(t,1,e.addRowListener(r,d,(()=>U(n,r,d,l))))]))})),H(n)},{3:V}=Q(I,null);return O.transaction((()=>q(t,1,e.addRowListener(n,null,((s,r,o)=>{e.hasRow(n,o)?U(o,n,o,V):(O.delRow(t,o),p(I,(({4:e})=>v(Q(e,o),(([,n])=>{A(t,n),M(e,o)})))))}))))),P},delQueryDefinition:e=>(K(e),w(e),P),getStore:n,getQueryIds:s,forEachQuery:r,hasQuery:a,getTableId:c,delListener:e=>(G.delListener(e),P),destroy:g,getListenerStats:()=>{const{tables:e,tableIds:t,transaction:n,...s}=G.getListenerStats();return s}};var U,V;return U={Table:[1,1],RowIds:[0,1],SortedRowIds:[0,5],Row:[1,2],CellIds:[0,2],Cell:[1,3]},V=([e,t],n)=>{l(e?["get","has","forEach"]:["get"],(e=>P[e+"Result"+n]=(...t)=>G[e+n](...t))),P["addResult"+n+"Listener"]=(...e)=>{return G["add"+n+"Listener"](...(s=e,r=0,o=t,s.slice(r,o)),((n,...s)=>e[t](P,...s)));var s,r,o}},l(W.entries(U),(([e,t])=>V(t,e))),O(P)}));export{q as createQueries};
package/lib/queries.js.gz CHANGED
Binary file
@@ -1 +1 @@
1
- const e=e=>typeof e,t=e(""),n=(e,t)=>e.forEach(t),o=e=>e.length,s=(e,...t)=>e.push(...t),r=e=>null==e,i=(e,t,n)=>r(e)?n?.():t(e),a=(e,t)=>e?.has(t)??!1,l=e=>r(e)||0==(e=>e.size)(e),d=e=>[...e?.values()??[]],c=e=>e.clear(),R=(e,t)=>e?.forEach(t),u=(e,t)=>e?.delete(t),h=e=>new Map(e),f=(e,t)=>e?.get(t),L=(e,t)=>R(e,((e,n)=>t(n,e))),g=(e,t,n)=>r(n)?(u(e,t),e):e?.set(t,n),w=(e,t,n)=>(a(e,t)||g(e,t,n()),f(e,t)),p=(e,t,n,s,r=0)=>i((n?w:f)(e,t[r],r>o(t)-2?n:h),(i=>{if(r>o(t)-2)return s?.(i)&&g(e,t[r]),i;const a=p(i,t,n,s,r+1);return l(i)&&g(e,t[r]),a})),I=e=>new Set(e),b=(e,t)=>e?.add(t),v=(e,t,s)=>{const p=e.hasRow,v=h(),k=h(),E=h(),T=h(),m=h(),y=(t,o,...s)=>{const r=w(m,t,I);return n(s,(t=>b(r,t)&&o&&e.callListener(t))),s},S=(t,...s)=>i(f(m,t),(r=>{n(0==o(s)?d(r):s,(t=>{e.delListener(t),u(r,t)})),l(r)&&g(m,t)})),z=(e,n)=>{g(v,e,n),a(k,e)||(g(k,e,t()),g(E,e,h()),g(T,e,h()))},D=e=>{g(v,e),g(k,e),g(E,e),g(T,e),S(e)};return[()=>e,()=>[...v?.keys()??[]],e=>L(k,e),e=>a(k,e),e=>f(v,e),e=>f(k,e),(e,t)=>g(k,e,t),z,(t,o,i,l,d)=>{z(t,o);const u=h(),w=h(),I=f(E,t),b=f(T,t),v=t=>{const n=n=>e.getCell(o,t,n),i=f(I,t),a=p(o,t)?s(l(n,t)):void 0;if(i!=a&&g(u,t,[i,a]),!r(d)){const e=f(b,t),s=p(o,t)?d(n,t):void 0;e!=s&&g(w,t,s)}},k=e=>{i((()=>{R(u,(([,e],t)=>g(I,t,e))),R(w,((e,t)=>g(b,t,e)))}),u,w,I,b,e),c(u),c(w)};L(I,v),e.hasTable(o)&&n(e.getRowIds(o),(e=>{a(I,e)||v(e)})),k(!0),S(t),y(t,0,e.addRowListener(o,null,((e,t,n)=>v(n))),e.addTableListener(o,(()=>k())))},D,()=>L(m,D),y,S]},k=(n,o)=>e(n)==t?e=>e(n):n??(()=>o??""),E=e=>{let t,a=0;const d=[],c=h();return[(n,o,s)=>{t??=e();const r=d.pop()??""+a++;return g(c,r,[n,o,s]),b(p(o,s??[""],I),r),r},(e,r,...i)=>n(((e,t=[""])=>{const r=[],i=(e,a)=>a==o(t)?s(r,e):null===t[a]?R(e,(e=>i(e,a+1))):n([t[a],null],(t=>i(f(e,t),a+1)));return i(e,0),r})(e,r),(e=>R(e,(e=>f(c,e)[0](t,...r??[],...i))))),e=>i(f(c,e),(([,t,n])=>(p(t,n??[""],void 0,(t=>(u(t,e),l(t)?1:0))),g(c,e),o(d)<1e3&&s(d,e),n))),(e,s,a)=>i(f(c,e),(([e,,i=[]])=>{const l=(...d)=>{const c=o(d);c==o(i)?e(t,...d,...a(d)):r(i[c])?n(s[c](...d),(e=>l(...d,e))):l(...d,i[c])};l()}))]},T=Object.freeze,m=(e=>{const t=new WeakMap;return n=>(t.has(n)||t.set(n,e(n)),t.get(n))})((e=>{const t=h(),n=h(),o=h(),s=h(),[c,w,p,m,y,S,,,z,D,M]=v(e,(()=>[h(),h(),h(),h()]),(e=>r(e)?void 0:e+"")),[j,x,C]=E((()=>A)),O=(e,t,n)=>i(S(e),(([o,,s])=>{if(!a(s,t)){const i=I();if(y(e)!=q(e))b(i,t);else{let e=t;for(;!r(e)&&!a(i,e);)b(i,e),e=f(o,e)}if(n)return i;g(s,t,i)}return f(s,t)})),W=(e,t)=>i(S(e),(([,,e])=>g(e,t))),q=e=>f(t,e),A={setRelationshipDefinition:(e,d,c,h)=>(g(t,e,c),z(e,d,((t,d)=>{const c=I(),h=I(),w=I(),[p,v]=S(e);R(d,(([t,n],o)=>{r(t)||(b(h,t),i(f(v,t),(e=>{u(e,o),l(e)&&g(v,t)}))),r(n)||(b(h,n),a(v,n)||g(v,n,I()),b(f(v,n),o)),b(c,o),g(p,o,n),L(f(s,e),(t=>{a(O(e,t),o)&&b(w,t)}))})),t(),R(c,(t=>x(n,[e,t]))),R(h,(t=>x(o,[e,t]))),R(w,(t=>{W(e,t),x(s,[e,t])}))}),k(h)),A),delRelationshipDefinition:e=>(g(t,e),D(e),A),getStore:c,getRelationshipIds:w,forEachRelationship:t=>p((n=>t(n,(t=>e.forEachRow(y(n),t))))),hasRelationship:m,getLocalTableId:y,getRemoteTableId:q,getRemoteRowId:(e,t)=>f(S(e)?.[0],t),getLocalRowIds:(e,t)=>d(f(S(e)?.[1],t)),getLinkedRowIds:(e,t)=>r(S(e))?[t]:d(O(e,t,!0)),addRemoteRowIdListener:(e,t,o)=>j(o,n,[e,t]),addLocalRowIdsListener:(e,t,n)=>j(n,o,[e,t]),addLinkedRowIdsListener:(e,t,n)=>(O(e,t),j(n,s,[e,t])),delListener:e=>(W(...C(e)),A),destroy:M,getListenerStats:()=>({})};return T(A)}));export{m as createRelationships};
1
+ const e=e=>typeof e,t=e(""),n=(e,t)=>e.forEach(t),s=e=>e.length,o=(e,...t)=>e.push(...t),r=e=>null==e,i=(e,t,n)=>r(e)?n?.():t(e),l=(e,t)=>e?.has(t)??!1,a=e=>r(e)||0==(e=>e.size)(e),d=e=>[...e?.values()??[]],c=e=>e.clear(),u=(e,t)=>e?.forEach(t),R=(e,t)=>e?.delete(t),h=e=>new Map(e),f=(e,t)=>e?.get(t),L=(e,t)=>u(e,((e,n)=>t(n,e))),g=(e,t,n)=>r(n)?(R(e,t),e):e?.set(t,n),w=(e,t,n)=>(l(e,t)||g(e,t,n()),f(e,t)),p=(e,t,n,o,r=0)=>i((n?w:f)(e,t[r],r>s(t)-2?n:h),(i=>{if(r>s(t)-2)return o?.(i)&&g(e,t[r]),i;const l=p(i,t,n,o,r+1);return a(i)&&g(e,t[r]),l})),I=e=>new Set(e),b=(e,t)=>e?.add(t),v=(e,t,o)=>{const p=e.hasRow,v=h(),k=h(),E=h(),T=h(),m=h(),y=(t,s,...o)=>{const r=w(m,t,I);return n(o,(t=>b(r,t)&&s&&e.callListener(t))),o},S=(t,...o)=>i(f(m,t),(r=>{n(0==s(o)?d(r):o,(t=>{e.delListener(t),R(r,t)})),a(r)&&g(m,t)})),z=(e,n)=>{g(v,e,n),l(k,e)||(g(k,e,t()),g(E,e,h()),g(T,e,h()))},D=e=>{g(v,e),g(k,e),g(E,e),g(T,e),S(e)};return[()=>e,()=>[...v?.keys()??[]],e=>L(k,e),e=>l(k,e),e=>f(v,e),e=>f(k,e),(e,t)=>g(k,e,t),z,(t,s,i,a,d)=>{z(t,s);const R=h(),w=h(),I=f(E,t),b=f(T,t),v=t=>{const n=n=>e.getCell(s,t,n),i=f(I,t),l=p(s,t)?o(a(n,t)):void 0;if(i!=l&&g(R,t,[i,l]),!r(d)){const e=f(b,t),o=p(s,t)?d(n,t):void 0;e!=o&&g(w,t,o)}},k=e=>{i((()=>{u(R,(([,e],t)=>g(I,t,e))),u(w,((e,t)=>g(b,t,e)))}),R,w,I,b,e),c(R),c(w)};L(I,v),e.hasTable(s)&&n(e.getRowIds(s),(e=>{l(I,e)||v(e)})),k(!0),S(t),y(t,0,e.addRowListener(s,null,((e,t,n)=>v(n))),e.addTableListener(s,(()=>k())))},D,()=>L(m,D),y,S]},k=(n,s)=>e(n)==t?e=>e(n):n??(()=>s??""),E=/^\d+$/,T=e=>{let t;const[l,d]=(()=>{const e=[];let t=0;return[()=>e.shift()??""+t++,t=>{E.test(t)&&s(e)<1e3&&o(e,t)}]})(),c=h();return[(n,s,o)=>{t??=e();const r=l();return g(c,r,[n,s,o]),b(p(s,o??[""],I),r),r},(e,r,...i)=>n(((e,t=[""])=>{const r=[],i=(e,l)=>l==s(t)?o(r,e):null===t[l]?u(e,(e=>i(e,l+1))):n([t[l],null],(t=>i(f(e,t),l+1)));return i(e,0),r})(e,r),(e=>u(e,(e=>f(c,e)[0](t,...r??[],...i))))),e=>i(f(c,e),(([,t,n])=>(p(t,n??[""],void 0,(t=>(R(t,e),a(t)?1:0))),g(c,e),d(e),n))),(e,o,l)=>i(f(c,e),(([e,,i=[]])=>{const a=(...d)=>{const c=s(d);c==s(i)?e(t,...d,...l(d)):r(i[c])?n(o[c](...d),(e=>a(...d,e))):a(...d,i[c])};a()}))]},m=Object.freeze,y=(e=>{const t=new WeakMap;return n=>(t.has(n)||t.set(n,e(n)),t.get(n))})((e=>{const t=h(),n=h(),s=h(),o=h(),[c,w,p,E,y,S,,,z,D,M]=v(e,(()=>[h(),h(),h(),h()]),(e=>r(e)?void 0:e+"")),[j,x,C]=T((()=>q)),O=(e,t,n)=>i(S(e),(([s,,o])=>{if(!l(o,t)){const i=I();if(y(e)!=$(e))b(i,t);else{let e=t;for(;!r(e)&&!l(i,e);)b(i,e),e=f(s,e)}if(n)return i;g(o,t,i)}return f(o,t)})),W=(e,t)=>i(S(e),(([,,e])=>g(e,t))),$=e=>f(t,e),q={setRelationshipDefinition:(e,d,c,h)=>(g(t,e,c),z(e,d,((t,d)=>{const c=I(),h=I(),w=I(),[p,v]=S(e);u(d,(([t,n],s)=>{r(t)||(b(h,t),i(f(v,t),(e=>{R(e,s),a(e)&&g(v,t)}))),r(n)||(b(h,n),l(v,n)||g(v,n,I()),b(f(v,n),s)),b(c,s),g(p,s,n),L(f(o,e),(t=>{l(O(e,t),s)&&b(w,t)}))})),t(),u(c,(t=>x(n,[e,t]))),u(h,(t=>x(s,[e,t]))),u(w,(t=>{W(e,t),x(o,[e,t])}))}),k(h)),q),delRelationshipDefinition:e=>(g(t,e),D(e),q),getStore:c,getRelationshipIds:w,forEachRelationship:t=>p((n=>t(n,(t=>e.forEachRow(y(n),t))))),hasRelationship:E,getLocalTableId:y,getRemoteTableId:$,getRemoteRowId:(e,t)=>f(S(e)?.[0],t),getLocalRowIds:(e,t)=>d(f(S(e)?.[1],t)),getLinkedRowIds:(e,t)=>r(S(e))?[t]:d(O(e,t,!0)),addRemoteRowIdListener:(e,t,s)=>j(s,n,[e,t]),addLocalRowIdsListener:(e,t,n)=>j(n,s,[e,t]),addLinkedRowIdsListener:(e,t,n)=>(O(e,t),j(n,o,[e,t])),delListener:e=>(W(...C(e)),q),destroy:M,getListenerStats:()=>({})};return m(q)}));export{y as createRelationships};
Binary file
package/lib/store.js CHANGED
@@ -1 +1 @@
1
- const e=e=>typeof e,t=e(""),n=e(!0),s=e(0),r=e(e),l=(e,t)=>e.forEach(t),o=(e,t)=>e.map(t),a=e=>e.length,i=(e,t,n)=>e.slice(t,n),c=(e,...t)=>e.push(...t),d=e=>JSON.stringify(e,((e,t)=>{return h(t,Map)?(n=[...t],s=(e,[t,n])=>(e[t]=n,e),r={},n.reduce(s,r)):t;var n,s,r})),u=JSON.parse,f=isFinite,h=(e,t)=>e instanceof t,T=e=>null==e,v=(e,t,n)=>T(e)?n?.():t(e),b=e=>e==t||e==n,g=(e,t)=>e?.has(t)??!1,w=e=>T(e)||0==(e=>e.size)(e),p=e=>e.clear(),R=(e,t)=>e?.forEach(t),C=(e,t)=>e?.delete(t),S=e=>new Map(e),y=e=>[...e?.keys()??[]],I=(e,t)=>e?.get(t),L=(e,t)=>R(e,((e,n)=>t(n,e))),E=(e,t,n)=>T(n)?(C(e,t),e):e?.set(t,n),J=(e,t,n)=>(g(e,t)||E(e,t,n()),I(e,t)),m=(e,t,n)=>{const s={},r=t??(e=>e);return R(e,((e,t)=>v(r(e),(e=>n?.(e)?0:s[t]=e)))),s},F=(e,t)=>{const n=S(),s=t??(e=>e);return R(e,((e,t)=>n.set(t,s(e)))),n},z=e=>F(e,F),O=(e,t,n,s,r=0)=>v((n?J:I)(e,t[r],r>a(t)-2?n:S),(l=>{if(r>a(t)-2)return s?.(l)&&E(e,t[r]),l;const o=O(l,t,n,s,r+1);return w(l)&&E(e,t[r]),o})),k=Object,M=k.keys,N=k.isFrozen,j=k.freeze,x=(e,t)=>!T(((e,t)=>v(e,(e=>e[t])))(e,t)),D=(e,t)=>delete e[t],P=(e,t)=>l(k.entries(e),(([e,n])=>t(n,e))),W=e=>{return t=M(e),0==a(t);var t},q=e=>new Set(e),A=(e,t)=>e?.add(t),B=e=>{let t,n=0;const s=[],r=S();return[(l,o,a)=>{t??=e();const i=s.pop()??""+n++;return E(r,i,[l,o,a]),A(O(o,a??[""],q),i),i},(e,n,...s)=>l(((e,t=[""])=>{const n=[],s=(e,r)=>r==a(t)?c(n,e):null===t[r]?R(e,(e=>s(e,r+1))):l([t[r],null],(t=>s(I(e,t),r+1)));return s(e,0),n})(e,n),(e=>R(e,(e=>I(r,e)[0](t,...n??[],...s))))),e=>v(I(r,e),(([,t,n])=>(O(t,n??[""],void 0,(t=>(C(t,e),w(t)?1:0))),E(r,e),a(s)<1e3&&c(s,e),n))),(e,n,s)=>v(I(r,e),(([e,,r=[]])=>{const o=(...i)=>{const c=a(i);c==a(r)?e(t,...i,...s(i)):T(r[c])?l(n[c](...i),(e=>o(...i,e))):o(...i,r[c])};o()}))]},G=e=>[e,e],H=()=>[S(),S()],K=t=>{const n=e(t);return b(n)||n==s&&f(t)?n:void 0},Q=e=>""+e,U=(e,t,n,s=E)=>{const r=(o=y(e),a=e=>!x(t,e),o.filter(a));var o,a;return l(M(t),(s=>n(e,s,t[s]))),l(r,(t=>s(e,t))),e},V=(e,t,n)=>T(e)||!(e=>h(e,k)&&e.constructor==k)(e)||W(e)||N(e)?(n?.(),!1):(P(e,((n,s)=>{t(n,s)||D(e,s)})),!W(e)),X=(e,t,n)=>E(e,t,I(e,t)==-n?void 0:n),Y=()=>{let t,n,f=0,h=0;const O=S(),k=S(),M=S(),N=S(),Z=S(),$=S(),_=S(),ee=S(),te=H(),ne=H(),se=H(),re=H(),le=H(),oe=H(),ae=H(),ie=H(),ce=H(),de=H(),[ue,fe,he,Te]=B((()=>Ze)),ve=(e,n)=>(!t||g($,n)||Ne(n))&&V(e,((e,t)=>be(n,t,e)),(()=>Ne(n))),be=(e,t,n,s)=>V(s?n:we(n,e,t),((s,r)=>v(ge(e,t,r,s),(e=>(n[r]=e,!0)),(()=>!1))),(()=>Ne(e,t))),ge=(e,n,s,r)=>t?v(I(I($,e),s),(t=>K(r)!=t.type?Ne(e,n,s,r,t.default):r),(()=>Ne(e,n,s,r))):T(K(r))?Ne(e,n,s,r):r,we=(e,t,n)=>(v(I(_,t),(([s,r])=>{R(s,((t,n)=>{x(e,n)||(e[n]=t)})),R(r,(s=>{x(e,s)||Ne(t,n,s)}))})),e),pe=e=>U($,e,((e,t,n)=>{const s=S(),r=q();U(J($,t,S),n,((e,t,n)=>{E(e,t,n),v(n.default,(e=>E(s,t,e)),(()=>A(r,t)))})),E(_,t,[s,r])}),((e,t)=>{E($,t),E(_,t)})),Re=e=>U(ee,e,((e,t,n)=>Ce(t,n)),((e,t)=>Je(t))),Ce=(e,t)=>U(J(ee,e,(()=>(ze(e,1),S()))),t,((t,n,s)=>Se(e,t,n,s)),((t,n)=>me(e,t,n))),Se=(e,t,n,s,r)=>U(J(t,n,(()=>(Oe(e,n,1),S()))),s,((t,s,r)=>ye(e,n,t,s,r)),((s,l)=>Fe(e,t,n,s,l,r))),ye=(e,t,n,s,r)=>{g(n,s)||ke(e,t,s,1);const l=I(n,s);r!==l&&(Me(e,t,s,l,r),E(n,s,r))},Ie=(e,t,n,s,r)=>v(I(t,n),(t=>ye(e,n,t,s,r)),(()=>Se(e,t,n,we({[s]:r},e,n)))),Le=e=>{const t=""+f++;return g(e,t)?Le(e):t},Ee=e=>I(ee,e)??Ce(e,{}),Je=e=>Ce(e,{}),me=(e,t,n)=>Se(e,t,n,{},!0),Fe=(e,t,n,s,r,l)=>{const o=I(I(_,e)?.[0],r);if(!T(o)&&!l)return ye(e,n,s,r,o);const a=t=>{Me(e,n,t,I(s,t)),ke(e,n,t,-1),E(s,t)};T(o)?a(r):L(s,a),w(s)&&(Oe(e,n,-1),w(E(t,n))&&(ze(e,-1),E(ee,e)))},ze=(e,t)=>X(O,e,t),Oe=(e,t,n)=>X(J(k,e,S),t,n),ke=(e,t,n,s)=>X(J(J(M,e,S),t,S),n,s),Me=(e,t,n,s,r)=>J(J(J(N,e,S),t,S),n,(()=>[s,0]))[1]=r,Ne=(e,t,n,s,r)=>(c(J(J(J(Z,e,S),t,S),n,(()=>[])),s),r),je=(e,t,n)=>v(I(I(I(N,e),t),n),(([e,t])=>[!0,e,t]),(()=>[!1,...G(Ke(e,t,n))])),xe=e=>w(Z)||w(ce[e])?0:R(e?F(Z,z):Z,((t,n)=>R(t,((t,s)=>R(t,((t,r)=>fe(ce[e],[n,s,r],t))))))),De=(e,t,n)=>{if(!w(t))return fe(e,n),1},Pe=e=>{const t=w(le[e]),n=w(ae[e])&&w(re[e])&&t&&w(ne[e]),s=w(ie[e])&&w(oe[e])&&w(se[e])&&w(te[e]);if(!n||!s){const r=e?[F(O),z(k),F(M,z),F(N,z)]:[O,k,M,N];if(!n){R(r[2],((t,n)=>R(t,((t,s)=>De(ae[e],t,[n,s])))));const n=q();R(r[1],((s,r)=>{De(re[e],s,[r])&&!t&&(fe(le[e],[r,null]),A(n,r))})),t||R(r[3],((t,s)=>{if(!g(n,s)){const n=q();R(t,(e=>R(e,(([t,s],r)=>s!==t?A(n,r):C(e,r))))),R(n,(t=>fe(le[e],[s,t])))}})),De(ne[e],r[0])}if(!s){let t;R(r[3],((n,s)=>{let r;R(n,((n,l)=>{let o;R(n,(([n,a],i)=>{a!==n&&(fe(ie[e],[s,l,i],a,n,je),t=r=o=1)})),o&&fe(oe[e],[s,l],je)})),r&&fe(se[e],[s],je)})),t&&fe(te[e],void 0,je)}}},We=(e,...t)=>(Ve((()=>e(...o(t,Q)))),Ze),qe=()=>m(ee,(e=>m(e,m))),Ae=()=>y(ee),Be=e=>y(I(ee,Q(e))),Ge=(e,t,n,s=0,r)=>{const l=[];return L(I(ee,Q(e)),((e,n)=>c(l,[T(t)?e:I(n,Q(t)),e]))),o(i(l.sort((([e],[t])=>(e<t?-1:1)*(n?-1:1))),s,T(r)?r:s+r),(([,e])=>e))},He=(e,t)=>y(I(I(ee,Q(e)),Q(t))),Ke=(e,t,n)=>I(I(I(ee,Q(e)),Q(t)),Q(n)),Qe=e=>We((()=>(e=>V(e,ve,Ne))(e)?Re(e):0)),Ue=()=>We((()=>Re({}))),Ve=(e,t)=>{if(-1==h)return;Xe();const n=e?.();return Ye(t),n},Xe=()=>(h++,Ze),Ye=e=>(h>0&&(h--,0==h&&(n=!w(N),h=1,xe(1),n&&Pe(1),h=-1,e?.(m(N,(e=>m(e,(e=>m(e,(e=>[...e]),(([e,t])=>e===t))),W)),W),m(Z,(e=>m(e,m))))&&(h=1,R(N,((e,t)=>R(e,((e,n)=>R(e,(([e],s)=>((e,t,n,s,r)=>T(r)?e.delCell(t,n,s,!0):e.setCell(t,n,s,r))(Ze,t,n,s,e))))))),h=-1,n=!1),fe(de[0],void 0,n),xe(0),n&&Pe(0),fe(de[1],void 0,n),h=0,l([N,Z,O,k,M],p))),Ze),Ze={getTables:qe,getTableIds:Ae,getTable:e=>m(I(ee,Q(e)),m),getRowIds:Be,getSortedRowIds:Ge,getRow:(e,t)=>m(I(I(ee,Q(e)),Q(t))),getCellIds:He,getCell:Ke,hasTables:()=>!w(ee),hasTable:e=>g(ee,Q(e)),hasRow:(e,t)=>g(I(ee,Q(e)),Q(t)),hasCell:(e,t,n)=>g(I(I(ee,Q(e)),Q(t)),Q(n)),getJson:()=>d(ee),getSchemaJson:()=>d($),setTables:Qe,setTable:(e,t)=>We((e=>ve(t,e)?Ce(e,t):0),e),setRow:(e,t,n)=>We(((e,t)=>be(Q(e),Q(t),n)?Se(Q(e),Ee(Q(e)),Q(t),n):0),e,t),addRow:(e,t,n)=>Ve((()=>{e=Q(e);const s=be(e,void 0,t),r=s||n?Le(I(ee,e)):void 0;return s&&Se(e,Ee(e),r,t),r})),setPartialRow:(e,t,n)=>We(((e,t)=>{if(be(e,t,n,1)){const s=Ee(e);P(n,((n,r)=>Ie(e,s,t,r,n)))}}),e,t),setCell:(t,n,s,l)=>We(((t,n,s)=>v(ge(t,n,s,e(l)==r?l(Ke(t,n,s)):l),(e=>Ie(t,Ee(t),n,s,e)))),t,n,s),setJson:e=>{try{"{}"===e?Ue():Qe(u(e))}catch{}return Ze},setSchema:e=>We((()=>{if((t=(e=>V(e,(e=>V(e,(e=>{if(!V(e,((e,t)=>["type","default"].includes(t))))return!1;const t=e.type;return!(!b(t)&&t!=s||(K(e.default)!=t&&D(e,"default"),0))})))))(e))&&(pe(e),!w(ee))){const e=qe();Ue(),Qe(e)}})),delTables:Ue,delTable:e=>We((e=>g(ee,e)?Je(e):0),e),delRow:(e,t)=>We(((e,t)=>v(I(ee,e),(n=>g(n,t)?me(e,n,t):0))),e,t),delCell:(e,t,n,s)=>We(((e,t,n)=>v(I(ee,e),(r=>v(I(r,t),(l=>g(l,n)?Fe(e,r,t,l,n,s):0))))),e,t,n),delSchema:()=>We((()=>{pe({}),t=!1})),transaction:Ve,startTransaction:Xe,finishTransaction:Ye,forEachTable:e=>R(ee,((t,n)=>e(n,(e=>R(t,((t,n)=>e(n,(e=>L(t,e))))))))),forEachRow:(e,t)=>R(I(ee,Q(e)),((e,n)=>t(n,(t=>L(e,t))))),forEachCell:(e,t,n)=>L(I(I(ee,Q(e)),Q(t)),n),addSortedRowIdsListener:(e,t,n,s,r,l,o)=>{let i=Ge(e,t,n,s,r);return ue((()=>{const o=Ge(e,t,n,s,r);var c,d,u;d=i,a(c=o)===a(d)&&(u=(e,t)=>d[t]===e,c.every(u))||(i=o,l(Ze,e,t,n,s,r,i))}),le[o?1:0],[e,t])},addWillFinishTransactionListener:e=>ue(e,de[0]),addDidFinishTransactionListener:e=>ue(e,de[1]),callListener:e=>(Te(e,[Ae,Be,He],(e=>T(e[2])?[]:G(Ke(...e)))),Ze),delListener:e=>(he(e),Ze),getListenerStats:()=>({}),createStore:Y};return P({Tables:[0,te],TableIds:[0,ne],Table:[1,se],RowIds:[1,re],Row:[2,oe],CellIds:[2,ae],Cell:[3,ie],InvalidCell:[3,ce]},(([e,t],n)=>{Ze["add"+n+"Listener"]=(...n)=>ue(n[e],t[n[e+1]?1:0],e>0?i(n,0,e):void 0)})),j(Ze)};export{Y as createStore};
1
+ const e=e=>typeof e,t=e(""),s=e(!0),n=e(0),r=e(e),l=(e,t)=>e.forEach(t),o=(e,t)=>e.map(t),a=e=>e.length,c=(e,t,s)=>e.slice(t,s),i=(e,...t)=>e.push(...t),d=e=>JSON.stringify(e,((e,t)=>{return h(t,Map)?(s=[...t],n=(e,[t,s])=>(e[t]=s,e),r={},s.reduce(n,r)):t;var s,n,r})),u=JSON.parse,f=isFinite,h=(e,t)=>e instanceof t,T=e=>null==e,b=(e,t,s)=>T(e)?s?.():t(e),g=e=>e==t||e==s,w=(e,t)=>e?.has(t)??!1,v=e=>T(e)||0==(e=>e.size)(e),R=e=>e.clear(),C=(e,t)=>e?.forEach(t),p=(e,t)=>e?.delete(t),S=e=>new Map(e),y=e=>[...e?.keys()??[]],I=(e,t)=>e?.get(t),L=(e,t)=>C(e,((e,s)=>t(s,e))),E=(e,t,s)=>T(s)?(p(e,t),e):e?.set(t,s),J=(e,t,s)=>(w(e,t)||E(e,t,s()),I(e,t)),m=(e,t,s)=>{const n={},r=t??(e=>e);return C(e,((e,t)=>b(r(e),(e=>s?.(e)?0:n[t]=e)))),n},F=(e,t)=>{const s=S(),n=t??(e=>e);return C(e,((e,t)=>s.set(t,n(e)))),s},z=e=>F(e,F),O=(e,t,s,n,r=0)=>b((s?J:I)(e,t[r],r>a(t)-2?s:S),(l=>{if(r>a(t)-2)return n?.(l)&&E(e,t[r]),l;const o=O(l,t,s,n,r+1);return v(l)&&E(e,t[r]),o})),k=Object,M=k.keys,N=k.isFrozen,j=k.freeze,x=(e,t)=>!T(((e,t)=>b(e,(e=>e[t])))(e,t)),D=(e,t)=>delete e[t],P=(e,t)=>l(k.entries(e),(([e,s])=>t(s,e))),W=e=>{return t=M(e),0==a(t);var t},$=e=>new Set(e),q=(e,t)=>e?.add(t),A=/^\d+$/,B=()=>{const e=[];let t=0;return[()=>e.shift()??""+t++,t=>{A.test(t)&&a(e)<1e3&&i(e,t)}]},G=e=>{let t;const[s,n]=B(),r=S();return[(n,l,o)=>{t??=e();const a=s();return E(r,a,[n,l,o]),q(O(l,o??[""],$),a),a},(e,s,...n)=>l(((e,t=[""])=>{const s=[],n=(e,r)=>r==a(t)?i(s,e):null===t[r]?C(e,(e=>n(e,r+1))):l([t[r],null],(t=>n(I(e,t),r+1)));return n(e,0),s})(e,s),(e=>C(e,(e=>I(r,e)[0](t,...s??[],...n))))),e=>b(I(r,e),(([,t,s])=>(O(t,s??[""],void 0,(t=>(p(t,e),v(t)?1:0))),E(r,e),n(e),s))),(e,s,n)=>b(I(r,e),(([e,,r=[]])=>{const o=(...c)=>{const i=a(c);i==a(r)?e(t,...c,...n(c)):T(r[i])?l(s[i](...c),(e=>o(...c,e))):o(...c,r[i])};o()}))]},H=e=>[e,e],K=()=>[S(),S()],Q=t=>{const s=e(t);return g(s)||s==n&&f(t)?s:void 0},U=e=>""+e,V=(e,t,s,n=E)=>{const r=(o=y(e),a=e=>!x(t,e),o.filter(a));var o,a;return l(M(t),(n=>s(e,n,t[n]))),l(r,(t=>n(e,t))),e},X=(e,t,s)=>T(e)||!(e=>h(e,k)&&e.constructor==k)(e)||W(e)||N(e)?(s?.(),!1):(P(e,((s,n)=>{t(s,n)||D(e,n)})),!W(e)),Y=(e,t,s)=>E(e,t,I(e,t)==-s?void 0:s),Z=()=>{let t,s,f=0;const h=S(),O=S(),k=S(),M=S(),N=S(),A=S(),_=S(),ee=S(),te=S(),se=K(),ne=K(),re=K(),le=K(),oe=K(),ae=K(),ce=K(),ie=K(),de=K(),ue=K(),[fe,he,Te,be]=G((()=>Ze)),ge=(e,s)=>(!t||w(A,s)||je(s))&&X(e,((e,t)=>we(s,t,e)),(()=>je(s))),we=(e,t,s,n)=>X(n?s:Re(s,e,t),((n,r)=>b(ve(e,t,r,n),(e=>(s[r]=e,!0)),(()=>!1))),(()=>je(e,t))),ve=(e,s,n,r)=>t?b(I(I(A,e),n),(t=>Q(r)!=t.type?je(e,s,n,r,t.default):r),(()=>je(e,s,n,r))):T(Q(r))?je(e,s,n,r):r,Re=(e,t,s)=>(b(I(_,t),(([n,r])=>{C(n,((t,s)=>{x(e,s)||(e[s]=t)})),C(r,(n=>{x(e,n)||je(t,s,n)}))})),e),Ce=e=>V(A,e,((e,t,s)=>{const n=S(),r=$();V(J(A,t,S),s,((e,t,s)=>{E(e,t,s),b(s.default,(e=>E(n,t,e)),(()=>q(r,t)))})),E(_,t,[n,r])}),((e,t)=>{E(A,t),E(_,t)})),pe=e=>V(te,e,((e,t,s)=>Se(t,s)),((e,t)=>me(t))),Se=(e,t)=>V(J(te,e,(()=>(Oe(e,1),S()))),t,((t,s,n)=>ye(e,t,s,n)),((t,s)=>Fe(e,t,s))),ye=(e,t,s,n,r)=>V(J(t,s,(()=>(ke(e,s,1),S()))),n,((t,n,r)=>Ie(e,s,t,n,r)),((n,l)=>ze(e,t,s,n,l,r))),Ie=(e,t,s,n,r)=>{w(s,n)||Me(e,t,n,1);const l=I(s,n);r!==l&&(Ne(e,t,n,l,r),E(s,n,r))},Le=(e,t,s,n,r)=>b(I(t,s),(t=>Ie(e,s,t,n,r)),(()=>ye(e,t,s,Re({[n]:r},e,s)))),Ee=e=>{const[t]=J(ee,e,B),s=t();return w(I(te,e),s)?Ee(e):s},Je=e=>I(te,e)??Se(e,{}),me=e=>Se(e,{}),Fe=(e,t,s)=>{const[,n]=J(ee,e,B);n(s),ye(e,t,s,{},!0)},ze=(e,t,s,n,r,l)=>{const o=I(I(_,e)?.[0],r);if(!T(o)&&!l)return Ie(e,s,n,r,o);const a=t=>{Ne(e,s,t,I(n,t)),Me(e,s,t,-1),E(n,t)};T(o)?a(r):L(n,a),v(n)&&(ke(e,s,-1),v(E(t,s))&&(Oe(e,-1),E(te,e)))},Oe=(e,t)=>Y(h,e,t),ke=(e,t,s)=>Y(J(O,e,S),t,s),Me=(e,t,s,n)=>Y(J(J(k,e,S),t,S),s,n),Ne=(e,t,s,n,r)=>J(J(J(M,e,S),t,S),s,(()=>[n,0]))[1]=r,je=(e,t,s,n,r)=>(i(J(J(J(N,e,S),t,S),s,(()=>[])),n),r),xe=(e,t,s)=>b(I(I(I(M,e),t),s),(([e,t])=>[!0,e,t]),(()=>[!1,...H(Ke(e,t,s))])),De=e=>v(N)||v(de[e])?0:C(e?F(N,z):N,((t,s)=>C(t,((t,n)=>C(t,((t,r)=>he(de[e],[s,n,r],t))))))),Pe=(e,t,s)=>{if(!v(t))return he(e,s),1},We=e=>{const t=v(oe[e]),s=v(ce[e])&&v(le[e])&&t&&v(ne[e]),n=v(ie[e])&&v(ae[e])&&v(re[e])&&v(se[e]);if(!s||!n){const r=e?[F(h),z(O),F(k,z),F(M,z)]:[h,O,k,M];if(!s){C(r[2],((t,s)=>C(t,((t,n)=>Pe(ce[e],t,[s,n])))));const s=$();C(r[1],((n,r)=>{Pe(le[e],n,[r])&&!t&&(he(oe[e],[r,null]),q(s,r))})),t||C(r[3],((t,n)=>{if(!w(s,n)){const s=$();C(t,(e=>C(e,(([t,n],r)=>n!==t?q(s,r):p(e,r))))),C(s,(t=>he(oe[e],[n,t])))}})),Pe(ne[e],r[0])}if(!n){let t;C(r[3],((s,n)=>{let r;C(s,((s,l)=>{let o;C(s,(([s,a],c)=>{a!==s&&(he(ie[e],[n,l,c],a,s,xe),t=r=o=1)})),o&&he(ae[e],[n,l],xe)})),r&&he(re[e],[n],xe)})),t&&he(se[e],void 0,xe)}}},$e=(e,...t)=>(Ve((()=>e(...o(t,U)))),Ze),qe=()=>m(te,(e=>m(e,m))),Ae=()=>y(te),Be=e=>y(I(te,U(e))),Ge=(e,t,s,n=0,r)=>{const l=[];return L(I(te,U(e)),((e,s)=>i(l,[T(t)?e:I(s,U(t)),e]))),o(c(l.sort((([e],[t])=>(e<t?-1:1)*(s?-1:1))),n,T(r)?r:n+r),(([,e])=>e))},He=(e,t)=>y(I(I(te,U(e)),U(t))),Ke=(e,t,s)=>I(I(I(te,U(e)),U(t)),U(s)),Qe=e=>$e((()=>(e=>X(e,ge,je))(e)?pe(e):0)),Ue=()=>$e((()=>pe({}))),Ve=(e,t)=>{if(-1==f)return;Xe();const s=e?.();return Ye(t),s},Xe=()=>(f++,Ze),Ye=e=>(f>0&&(f--,0==f&&(s=!v(M),f=1,De(1),s&&We(1),f=-1,e?.(m(M,(e=>m(e,(e=>m(e,(e=>[...e]),(([e,t])=>e===t))),W)),W),m(N,(e=>m(e,m))))&&(f=1,C(M,((e,t)=>C(e,((e,s)=>C(e,(([e],n)=>((e,t,s,n,r)=>T(r)?e.delCell(t,s,n,!0):e.setCell(t,s,n,r))(Ze,t,s,n,e))))))),f=-1,s=!1),he(ue[0],void 0,s),De(0),s&&We(0),he(ue[1],void 0,s),f=0,l([M,N,h,O,k],R))),Ze),Ze={getTables:qe,getTableIds:Ae,getTable:e=>m(I(te,U(e)),m),getRowIds:Be,getSortedRowIds:Ge,getRow:(e,t)=>m(I(I(te,U(e)),U(t))),getCellIds:He,getCell:Ke,hasTables:()=>!v(te),hasTable:e=>w(te,U(e)),hasRow:(e,t)=>w(I(te,U(e)),U(t)),hasCell:(e,t,s)=>w(I(I(te,U(e)),U(t)),U(s)),getJson:()=>d(te),getSchemaJson:()=>d(A),setTables:Qe,setTable:(e,t)=>$e((e=>ge(t,e)?Se(e,t):0),e),setRow:(e,t,s)=>$e(((e,t)=>we(U(e),U(t),s)?ye(U(e),Je(U(e)),U(t),s):0),e,t),addRow:(e,t)=>Ve((()=>{let s;return we(e,s,t)&&(e=U(e),ye(e,Je(e),s=Ee(e),t)),s})),setPartialRow:(e,t,s)=>$e(((e,t)=>{if(we(e,t,s,1)){const n=Je(e);P(s,((s,r)=>Le(e,n,t,r,s)))}}),e,t),setCell:(t,s,n,l)=>$e(((t,s,n)=>b(ve(t,s,n,e(l)==r?l(Ke(t,s,n)):l),(e=>Le(t,Je(t),s,n,e)))),t,s,n),setJson:e=>{try{"{}"===e?Ue():Qe(u(e))}catch{}return Ze},setSchema:e=>$e((()=>{if((t=(e=>X(e,(e=>X(e,(e=>{if(!X(e,((e,t)=>["type","default"].includes(t))))return!1;const t=e.type;return!(!g(t)&&t!=n||(Q(e.default)!=t&&D(e,"default"),0))})))))(e))&&(Ce(e),!v(te))){const e=qe();Ue(),Qe(e)}})),delTables:Ue,delTable:e=>$e((e=>w(te,e)?me(e):0),e),delRow:(e,t)=>$e(((e,t)=>b(I(te,e),(s=>w(s,t)?Fe(e,s,t):0))),e,t),delCell:(e,t,s,n)=>$e(((e,t,s)=>b(I(te,e),(r=>b(I(r,t),(l=>w(l,s)?ze(e,r,t,l,s,n):0))))),e,t,s),delSchema:()=>$e((()=>{Ce({}),t=!1})),transaction:Ve,startTransaction:Xe,finishTransaction:Ye,forEachTable:e=>C(te,((t,s)=>e(s,(e=>C(t,((t,s)=>e(s,(e=>L(t,e))))))))),forEachRow:(e,t)=>C(I(te,U(e)),((e,s)=>t(s,(t=>L(e,t))))),forEachCell:(e,t,s)=>L(I(I(te,U(e)),U(t)),s),addSortedRowIdsListener:(e,t,s,n,r,l,o)=>{let c=Ge(e,t,s,n,r);return fe((()=>{const o=Ge(e,t,s,n,r);var i,d,u;d=c,a(i=o)===a(d)&&(u=(e,t)=>d[t]===e,i.every(u))||(c=o,l(Ze,e,t,s,n,r,c))}),oe[o?1:0],[e,t])},addWillFinishTransactionListener:e=>fe(e,ue[0]),addDidFinishTransactionListener:e=>fe(e,ue[1]),callListener:e=>(be(e,[Ae,Be,He],(e=>T(e[2])?[]:H(Ke(...e)))),Ze),delListener:e=>(Te(e),Ze),getListenerStats:()=>({}),createStore:Z};return P({Tables:[0,se],TableIds:[0,ne],Table:[1,re],RowIds:[1,le],Row:[2,ae],CellIds:[2,ce],Cell:[3,ie],InvalidCell:[3,de]},(([e,t],s)=>{Ze["add"+s+"Listener"]=(...s)=>fe(s[e],t[s[e+1]?1:0],e>0?c(s,0,e):void 0)})),j(Ze)};export{Z as createStore};
package/lib/store.js.gz CHANGED
Binary file