tinybase 3.0.0-beta.0 → 3.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.
Files changed (110) hide show
  1. package/bin/cli.js +1 -1
  2. package/lib/checkpoints.d.ts +18 -3
  3. package/lib/checkpoints.js +1 -1
  4. package/lib/checkpoints.js.gz +0 -0
  5. package/lib/debug/checkpoints.d.ts +18 -3
  6. package/lib/debug/checkpoints.js +97 -49
  7. package/lib/debug/indexes.js +31 -16
  8. package/lib/debug/metrics.js +31 -16
  9. package/lib/debug/persisters.d.ts +33 -23
  10. package/lib/debug/persisters.js +10 -5
  11. package/lib/debug/queries.js +2 -2
  12. package/lib/debug/relationships.js +31 -16
  13. package/lib/debug/store.d.ts +2053 -381
  14. package/lib/debug/store.js +444 -106
  15. package/lib/debug/tinybase.js +512 -138
  16. package/lib/debug/tools.d.ts +109 -38
  17. package/lib/debug/tools.js +759 -453
  18. package/lib/debug/ui-react.d.ts +1218 -138
  19. package/lib/debug/ui-react.js +163 -12
  20. package/lib/es6/checkpoints.d.ts +18 -3
  21. package/lib/es6/checkpoints.js +1 -1
  22. package/lib/es6/checkpoints.js.gz +0 -0
  23. package/lib/es6/indexes.js +1 -1
  24. package/lib/es6/indexes.js.gz +0 -0
  25. package/lib/es6/metrics.js +1 -1
  26. package/lib/es6/metrics.js.gz +0 -0
  27. package/lib/es6/persisters.d.ts +33 -23
  28. package/lib/es6/persisters.js +1 -1
  29. package/lib/es6/persisters.js.gz +0 -0
  30. package/lib/es6/relationships.js +1 -1
  31. package/lib/es6/relationships.js.gz +0 -0
  32. package/lib/es6/store.d.ts +2053 -381
  33. package/lib/es6/store.js +1 -1
  34. package/lib/es6/store.js.gz +0 -0
  35. package/lib/es6/tinybase.js +1 -1
  36. package/lib/es6/tinybase.js.gz +0 -0
  37. package/lib/es6/tools.d.ts +109 -38
  38. package/lib/es6/tools.js +1 -1
  39. package/lib/es6/tools.js.gz +0 -0
  40. package/lib/es6/ui-react.d.ts +1218 -138
  41. package/lib/es6/ui-react.js +1 -1
  42. package/lib/es6/ui-react.js.gz +0 -0
  43. package/lib/indexes.js +1 -1
  44. package/lib/indexes.js.gz +0 -0
  45. package/lib/metrics.js +1 -1
  46. package/lib/metrics.js.gz +0 -0
  47. package/lib/persisters.d.ts +33 -23
  48. package/lib/persisters.js +1 -1
  49. package/lib/persisters.js.gz +0 -0
  50. package/lib/relationships.js +1 -1
  51. package/lib/relationships.js.gz +0 -0
  52. package/lib/store.d.ts +2053 -381
  53. package/lib/store.js +1 -1
  54. package/lib/store.js.gz +0 -0
  55. package/lib/tinybase.js +1 -1
  56. package/lib/tinybase.js.gz +0 -0
  57. package/lib/tools.d.ts +109 -38
  58. package/lib/tools.js +1 -1
  59. package/lib/tools.js.gz +0 -0
  60. package/lib/ui-react.d.ts +1218 -138
  61. package/lib/ui-react.js +1 -1
  62. package/lib/ui-react.js.gz +0 -0
  63. package/lib/umd/checkpoints.d.ts +18 -3
  64. package/lib/umd/checkpoints.js +1 -1
  65. package/lib/umd/checkpoints.js.gz +0 -0
  66. package/lib/umd/indexes.js +1 -1
  67. package/lib/umd/indexes.js.gz +0 -0
  68. package/lib/umd/metrics.js +1 -1
  69. package/lib/umd/metrics.js.gz +0 -0
  70. package/lib/umd/persisters.d.ts +33 -23
  71. package/lib/umd/persisters.js +1 -1
  72. package/lib/umd/persisters.js.gz +0 -0
  73. package/lib/umd/relationships.js +1 -1
  74. package/lib/umd/relationships.js.gz +0 -0
  75. package/lib/umd/store.d.ts +2053 -381
  76. package/lib/umd/store.js +1 -1
  77. package/lib/umd/store.js.gz +0 -0
  78. package/lib/umd/tinybase.js +1 -1
  79. package/lib/umd/tinybase.js.gz +0 -0
  80. package/lib/umd/tools.d.ts +109 -38
  81. package/lib/umd/tools.js +1 -1
  82. package/lib/umd/tools.js.gz +0 -0
  83. package/lib/umd/ui-react.d.ts +1218 -138
  84. package/lib/umd/ui-react.js +1 -1
  85. package/lib/umd/ui-react.js.gz +0 -0
  86. package/lib/umd-es6/checkpoints.d.ts +18 -3
  87. package/lib/umd-es6/checkpoints.js +1 -1
  88. package/lib/umd-es6/checkpoints.js.gz +0 -0
  89. package/lib/umd-es6/indexes.js +1 -1
  90. package/lib/umd-es6/indexes.js.gz +0 -0
  91. package/lib/umd-es6/metrics.js +1 -1
  92. package/lib/umd-es6/metrics.js.gz +0 -0
  93. package/lib/umd-es6/persisters.d.ts +33 -23
  94. package/lib/umd-es6/persisters.js +1 -1
  95. package/lib/umd-es6/persisters.js.gz +0 -0
  96. package/lib/umd-es6/relationships.js +1 -1
  97. package/lib/umd-es6/relationships.js.gz +0 -0
  98. package/lib/umd-es6/store.d.ts +2053 -381
  99. package/lib/umd-es6/store.js +1 -1
  100. package/lib/umd-es6/store.js.gz +0 -0
  101. package/lib/umd-es6/tinybase.js +1 -1
  102. package/lib/umd-es6/tinybase.js.gz +0 -0
  103. package/lib/umd-es6/tools.d.ts +109 -38
  104. package/lib/umd-es6/tools.js +1 -1
  105. package/lib/umd-es6/tools.js.gz +0 -0
  106. package/lib/umd-es6/ui-react.d.ts +1218 -138
  107. package/lib/umd-es6/ui-react.js +1 -1
  108. package/lib/umd-es6/ui-react.js.gz +0 -0
  109. package/package.json +20 -20
  110. package/readme.md +27 -16
@@ -14,6 +14,9 @@ const SORTED_ROW_IDS = 'SortedRowIds';
14
14
  const ROW = 'Row';
15
15
  const CELL_IDS = 'CellIds';
16
16
  const CELL = 'Cell';
17
+ const VALUES = 'Values';
18
+ const VALUE_IDS = 'ValueIds';
19
+ const VALUE = 'Value';
17
20
 
18
21
  const arrayMap = (array, cb) => array.map(cb);
19
22
  const arrayLength = (array) => array.length;
@@ -64,7 +67,11 @@ const useCheckpointsOrCheckpointsId = (checkpointsOrCheckpointsId) =>
64
67
 
65
68
  const {useCallback, useEffect, useMemo: useMemo$1, useRef, useState} = React;
66
69
  const useCreate = (store, create, createDeps = []) => {
67
- const thing = useMemo$1(() => create(store), [store, ...createDeps]);
70
+ const thing = useMemo$1(
71
+ () => create(store),
72
+ // eslint-disable-next-line react-hooks/exhaustive-deps
73
+ [store, ...createDeps],
74
+ );
68
75
  useEffect(() => () => thing.destroy(), [thing]);
69
76
  return thing;
70
77
  };
@@ -78,6 +85,7 @@ const useListenable = (
78
85
  const [, rerender] = useState();
79
86
  const getResult = useCallback(
80
87
  () => thing?.[GET + listenable]?.(...args) ?? defaulted,
88
+ /* eslint-disable-next-line react-hooks/exhaustive-deps */
81
89
  [thing, ...args],
82
90
  );
83
91
  const [initialResult] = useState(getResult);
@@ -130,6 +138,7 @@ const useSetCallback = (
130
138
  then(store2['set' + settable](...args, value), value),
131
139
  ),
132
140
  ),
141
+ // eslint-disable-next-line react-hooks/exhaustive-deps
133
142
  [store, settable, ...getDeps, ...thenDeps, ...args],
134
143
  );
135
144
  };
@@ -143,6 +152,7 @@ const useDel = (
143
152
  const store = useStoreOrStoreId(storeOrStoreId);
144
153
  return useCallback(
145
154
  () => then(store?.['del' + deletable](...args)),
155
+ // eslint-disable-next-line react-hooks/exhaustive-deps
146
156
  [store, deletable, ...thenDeps, ...args],
147
157
  );
148
158
  };
@@ -150,6 +160,7 @@ const useCheckpointAction = (checkpointsOrCheckpointsId, action, arg) => {
150
160
  const checkpoints = useCheckpointsOrCheckpointsId(checkpointsOrCheckpointsId);
151
161
  return useCallback(
152
162
  () => checkpoints?.[action](arg),
163
+ // eslint-disable-next-line react-hooks/exhaustive-deps
153
164
  [checkpoints, action, arg],
154
165
  );
155
166
  };
@@ -195,6 +206,12 @@ const useCell = (tableId, rowId, cellId, storeOrStoreId) =>
195
206
  [tableId, rowId, cellId],
196
207
  4,
197
208
  );
209
+ const useValues = (storeOrStoreId) =>
210
+ useListenable(VALUES, useStoreOrStoreId(storeOrStoreId), {});
211
+ const useValueIds = (storeOrStoreId) =>
212
+ useListenable(VALUE_IDS, useStoreOrStoreId(storeOrStoreId), [], []);
213
+ const useValue = (valueId, storeOrStoreId) =>
214
+ useListenable(VALUE, useStoreOrStoreId(storeOrStoreId), void 0, [valueId]);
198
215
  const useSetTablesCallback = (
199
216
  getTables,
200
217
  getTablesDeps,
@@ -262,6 +279,7 @@ const useAddRowCallback = (
262
279
  then(store2.addRow(tableId, row), store2, row),
263
280
  ),
264
281
  ),
282
+ // eslint-disable-next-line react-hooks/exhaustive-deps
265
283
  [store, tableId, ...getRowDeps, ...thenDeps],
266
284
  );
267
285
  };
@@ -305,6 +323,53 @@ const useSetCellCallback = (
305
323
  rowId,
306
324
  cellId,
307
325
  );
326
+ const useSetValuesCallback = (
327
+ getValues,
328
+ getValuesDeps,
329
+ storeOrStoreId,
330
+ then,
331
+ thenDeps,
332
+ ) =>
333
+ useSetCallback(
334
+ storeOrStoreId,
335
+ VALUES,
336
+ getValues,
337
+ getValuesDeps,
338
+ then,
339
+ thenDeps,
340
+ );
341
+ const useSetPartialValuesCallback = (
342
+ getPartialValues,
343
+ getPartialValuesDeps,
344
+ storeOrStoreId,
345
+ then,
346
+ thenDeps,
347
+ ) =>
348
+ useSetCallback(
349
+ storeOrStoreId,
350
+ 'PartialValues',
351
+ getPartialValues,
352
+ getPartialValuesDeps,
353
+ then,
354
+ thenDeps,
355
+ );
356
+ const useSetValueCallback = (
357
+ valueId,
358
+ getValue,
359
+ getValueDeps,
360
+ storeOrStoreId,
361
+ then,
362
+ thenDeps,
363
+ ) =>
364
+ useSetCallback(
365
+ storeOrStoreId,
366
+ VALUE,
367
+ getValue,
368
+ getValueDeps,
369
+ then,
370
+ thenDeps,
371
+ valueId,
372
+ );
308
373
  const useDelTablesCallback = (storeOrStoreId, then, thenDeps) =>
309
374
  useDel(storeOrStoreId, TABLES, then, thenDeps);
310
375
  const useDelTableCallback = (tableId, storeOrStoreId, then, thenDeps) =>
@@ -330,6 +395,10 @@ const useDelCellCallback = (
330
395
  cellId,
331
396
  forceDel,
332
397
  );
398
+ const useDelValuesCallback = (storeOrStoreId, then, thenDeps) =>
399
+ useDel(storeOrStoreId, VALUES, then, thenDeps);
400
+ const useDelValueCallback = (valueId, storeOrStoreId, then, thenDeps) =>
401
+ useDel(storeOrStoreId, VALUE, then, thenDeps, valueId);
333
402
  const useTablesListener = (listener, listenerDeps, mutator, storeOrStoreId) =>
334
403
  useListener(
335
404
  TABLES,
@@ -446,6 +515,39 @@ const useCellListener = (
446
515
  [tableId, rowId, cellId],
447
516
  mutator,
448
517
  );
518
+ const useValuesListener = (listener, listenerDeps, mutator, storeOrStoreId) =>
519
+ useListener(
520
+ VALUES,
521
+ useStoreOrStoreId(storeOrStoreId),
522
+ listener,
523
+ listenerDeps,
524
+ [],
525
+ mutator,
526
+ );
527
+ const useValueIdsListener = (listener, listenerDeps, mutator, storeOrStoreId) =>
528
+ useListener(
529
+ VALUE_IDS,
530
+ useStoreOrStoreId(storeOrStoreId),
531
+ listener,
532
+ listenerDeps,
533
+ [],
534
+ mutator,
535
+ );
536
+ const useValueListener = (
537
+ valueId,
538
+ listener,
539
+ listenerDeps,
540
+ mutator,
541
+ storeOrStoreId,
542
+ ) =>
543
+ useListener(
544
+ VALUE,
545
+ useStoreOrStoreId(storeOrStoreId),
546
+ listener,
547
+ listenerDeps,
548
+ [valueId],
549
+ mutator,
550
+ );
449
551
  const useCreateMetrics = (store, create, createDeps) =>
450
552
  useCreate(store, create, createDeps);
451
553
  const useMetric = (metricId, metricsOrMetricsId) =>
@@ -747,6 +849,7 @@ const useSetCheckpointCallback = (
747
849
  const label = getCheckpoint(parameter);
748
850
  then(checkpoints2.addCheckpoint(label), checkpoints2, label);
749
851
  }),
852
+ // eslint-disable-next-line react-hooks/exhaustive-deps
750
853
  [checkpoints, ...getCheckpointDeps, ...thenDeps],
751
854
  );
752
855
  };
@@ -769,6 +872,7 @@ const useGoToCallback = (
769
872
  then(checkpoints2.goTo(checkpointId), checkpointId),
770
873
  ),
771
874
  ),
875
+ // eslint-disable-next-line react-hooks/exhaustive-deps
772
876
  [checkpoints, ...getCheckpointIdDeps, ...thenDeps],
773
877
  );
774
878
  };
@@ -826,17 +930,25 @@ const useCreatePersister = (
826
930
  thenDeps = [],
827
931
  ) => {
828
932
  const [, setDone] = useState();
829
- const persister = useMemo$1(() => create(store), [store, ...createDeps]);
830
- useEffect(() => {
831
- (async () => {
832
- await then?.(persister);
833
- setDone(1);
834
- return;
835
- })();
836
- return () => {
837
- persister.destroy();
838
- };
839
- }, [persister, ...thenDeps]);
933
+ const persister = useMemo$1(
934
+ () => create(store),
935
+ // eslint-disable-next-line react-hooks/exhaustive-deps
936
+ [store, ...createDeps],
937
+ );
938
+ useEffect(
939
+ () => {
940
+ (async () => {
941
+ await then?.(persister);
942
+ setDone(1);
943
+ return;
944
+ })();
945
+ return () => {
946
+ persister.destroy();
947
+ };
948
+ },
949
+ // eslint-disable-next-line react-hooks/exhaustive-deps
950
+ [persister, ...thenDeps],
951
+ );
840
952
  return persister;
841
953
  };
842
954
 
@@ -1083,6 +1195,32 @@ const TablesView = ({
1083
1195
  ),
1084
1196
  separator,
1085
1197
  );
1198
+ const ValueView = ({valueId, store, debugIds}) =>
1199
+ wrap(
1200
+ EMPTY_STRING + (useValue(valueId, store) ?? EMPTY_STRING),
1201
+ void 0,
1202
+ debugIds,
1203
+ valueId,
1204
+ );
1205
+ const ValuesView = ({
1206
+ store,
1207
+ valueComponent: Value = ValueView,
1208
+ getValueComponentProps,
1209
+ separator,
1210
+ debugIds,
1211
+ }) =>
1212
+ wrap(
1213
+ arrayMap(useValueIds(store), (valueId) =>
1214
+ /* @__PURE__ */ createElement(Value, {
1215
+ ...getProps(getValueComponentProps, valueId),
1216
+ key: valueId,
1217
+ valueId,
1218
+ store,
1219
+ debugIds,
1220
+ }),
1221
+ ),
1222
+ separator,
1223
+ );
1086
1224
  const MetricView = ({metricId, metrics, debugIds}) =>
1087
1225
  wrap(
1088
1226
  useMetric(metricId, metrics) ?? EMPTY_STRING,
@@ -1263,6 +1401,8 @@ export {
1263
1401
  SortedTableView,
1264
1402
  TableView,
1265
1403
  TablesView,
1404
+ ValueView,
1405
+ ValuesView,
1266
1406
  tableView,
1267
1407
  useAddRowCallback,
1268
1408
  useCell,
@@ -1285,6 +1425,8 @@ export {
1285
1425
  useDelRowCallback,
1286
1426
  useDelTableCallback,
1287
1427
  useDelTablesCallback,
1428
+ useDelValueCallback,
1429
+ useDelValuesCallback,
1288
1430
  useGoBackwardCallback,
1289
1431
  useGoForwardCallback,
1290
1432
  useGoToCallback,
@@ -1320,9 +1462,12 @@ export {
1320
1462
  useSetCellCallback,
1321
1463
  useSetCheckpointCallback,
1322
1464
  useSetPartialRowCallback,
1465
+ useSetPartialValuesCallback,
1323
1466
  useSetRowCallback,
1324
1467
  useSetTableCallback,
1325
1468
  useSetTablesCallback,
1469
+ useSetValueCallback,
1470
+ useSetValuesCallback,
1326
1471
  useSliceIds,
1327
1472
  useSliceIdsListener,
1328
1473
  useSliceRowIds,
@@ -1337,4 +1482,10 @@ export {
1337
1482
  useTables,
1338
1483
  useTablesListener,
1339
1484
  useUndoInformation,
1485
+ useValue,
1486
+ useValueIds,
1487
+ useValueIdsListener,
1488
+ useValueListener,
1489
+ useValues,
1490
+ useValuesListener,
1340
1491
  };
@@ -115,6 +115,8 @@ export type CheckpointsListenerStats = {
115
115
  * method), and add listeners for when the list checkpoints changes (with the
116
116
  * addCheckpointIdsListener method).
117
117
  *
118
+ * Checkpoints work for both changes to tabular data and to keyed value data.
119
+ *
118
120
  * Every checkpoint can be given a label which can be used to describe the
119
121
  * actions that changed the Store before this checkpoint. This can be useful for
120
122
  * interfaces that let users 'Undo [last action]'.
@@ -127,7 +129,9 @@ export type CheckpointsListenerStats = {
127
129
  * registering and removing a listener for them.
128
130
  *
129
131
  * ```js
130
- * const store = createStore().setTables({pets: {fido: {sold: false}}});
132
+ * const store = createStore()
133
+ * .setTables({pets: {fido: {sold: false}}})
134
+ * .setValue('open', true);
131
135
  *
132
136
  * const checkpoints = createCheckpoints(store);
133
137
  * checkpoints.setSize(200);
@@ -145,14 +149,25 @@ export type CheckpointsListenerStats = {
145
149
  * console.log(checkpoints.getCheckpointIds());
146
150
  * // -> [[], '0', ['1']]
147
151
  *
152
+ * store.setValue('open', false);
153
+ * checkpoints.addCheckpoint('closed');
154
+ * console.log(checkpoints.getCheckpointIds());
155
+ * // -> [['0'], '2', []]
156
+ *
157
+ * checkpoints.goBackward();
158
+ * console.log(store.getValue('open'));
159
+ * // -> true
160
+ * console.log(checkpoints.getCheckpointIds());
161
+ * // -> [[], '0', ['2']]
162
+ *
148
163
  * const listenerId = checkpoints.addCheckpointIdsListener(() => {
149
164
  * console.log(checkpoints.getCheckpointIds());
150
165
  * });
151
166
  * store.setCell('pets', 'fido', 'species', 'dog');
152
167
  * // -> [['0'], undefined, []]
153
168
  * checkpoints.addCheckpoint();
154
- * // -> [['0'], '2', []]
155
- * // Previous redo of checkpoint '1' is now not possible.
169
+ * // -> [['0'], '3', []]
170
+ * // Previous redo of checkpoints '1' and '2' are now not possible.
156
171
  *
157
172
  * checkpoints.delListener(listenerId);
158
173
  * checkpoints.destroy();
@@ -1 +1 @@
1
- const e=(e,n)=>e.includes(n),n=(e,n)=>e.forEach(n),t=e=>e.length,l=e=>0==t(e),r=(e,...n)=>e.push(...n),o=e=>e.pop(),s=e=>e.shift(),u=e=>null==e,i=(e,n,t)=>u(e)?null==t?void 0:t():n(e),d=(e,n)=>{var t;return null!=(t=null==e?void 0:e.has(n))&&t},c=e=>u(e)||0==(e=>e.size)(e),a=(e,n)=>null==e?void 0:e.forEach(n),h=(e,n)=>null==e?void 0:e.delete(n),p=e=>new Map(e),v=(e,n)=>null==e?void 0:e.get(n),C=(e,n,t)=>u(t)?(h(e,n),e):null==e?void 0:e.set(n,t),g=(e,n,t)=>(d(e,n)||C(e,n,t()),v(e,n)),k=(e,n,l,r,o=0)=>i((l?g:v)(e,n[o],o>t(n)-2?l:p),(s=>{if(o>t(n)-2)return(null==r?void 0:r(s))&&C(e,n[o]),s;const u=k(s,n,l,r,o+1);return c(s)&&C(e,n[o]),u})),f=e=>new Set(Array.isArray(e)||u(e)?e:[e]),L=/^\d+$/,w=Object.freeze,S=(S=>{const y=new WeakMap;return S=>(y.has(S)||y.set(S,(S=>{let y,z,E,A=100,I=p(),M=1;const b=p(),j=p(),[x,B,F]=(e=>{let l;const[o,d]=(()=>{const e=[];let n=0;return[()=>{var t;return null!=(t=s(e))?t:""+n++},n=>{L.test(n)&&t(e)<1e3&&r(e,n)}]})(),g=p();return[(e,n,t)=>{null!=l||(l=V);const r=o();var s,u;return C(g,r,[e,n,t]),u=r,null==(s=k(n,null!=t?t:[""],f))||s.add(u),r},(e,o,...s)=>n(((e,l=[""])=>{const o=[],s=(e,u)=>u==t(l)?r(o,e):null===l[u]?a(e,(e=>s(e,u+1))):n([l[u],null],(n=>s(v(e,n),u+1)));return s(e,0),o})(e,o),(e=>a(e,(e=>v(g,e)[0](l,...null!=o?o:[],...s))))),e=>i(v(g,e),(([,n,t])=>(k(n,null!=t?t:[""],void 0,(n=>(h(n,e),c(n)?1:0))),C(g,e),d(e),t))),(e,r,o)=>i(v(g,e),(([e,,s=[]])=>{const i=(...d)=>{const c=t(d);c==t(s)?e(l,...d,...o(d)):u(s[c])?n(r[c](...d),(e=>i(...d,e))):i(...d,s[c])};i()}))]})(),O=p(),T=p(),W=[],$=[],m=(e,n)=>{M=0,S.transaction((()=>a(v(O,n),((n,t)=>a(n,((n,l)=>a(n,((n,r)=>((e,n,t,l,r)=>u(r)?e.delCell(n,t,l,!0):e.setCell(n,t,l,r))(S,t,l,r,n[e]))))))))),M=1},q=e=>{C(O,e),C(T,e),B(j,[e])},D=(e,l)=>n(((e,n)=>e.splice(0,n))(e,null!=l?l:t(e)),q),G=()=>D(W,t(W)-A),H=S.addCellListener(null,null,null,((e,n,t,l,s,u)=>{if(M){i(y,(()=>{r(W,y),G(),D($),y=void 0,E=1}));const e=g(I,n,p),d=g(e,t,p),a=g(d,l,(()=>[u,void 0]));a[1]=s,a[0]===s&&c(C(d,l))&&c(C(e,t))&&c(C(I,n))&&(y=o(W),E=1),P()}})),J=(e="")=>(u(y)&&(y=""+z++,C(O,y,I),R(y,e),I=p(),E=1),y),K=()=>{l(W)||(((e,...n)=>{e.unshift(...n)})($,J()),m(0,y),y=o(W),E=1)},N=()=>{l($)||(r(W,y),y=s($),m(1,y),E=1)},P=()=>{E&&(B(b),E=0)},Q=e=>{const n=J(e);return P(),n},R=(e,n)=>(U(e)&&v(T,e)!==n&&(C(T,e,n),B(j,[e])),V),U=e=>d(O,e),V={setSize:e=>(A=e,G(),V),addCheckpoint:Q,setCheckpoint:R,getStore:()=>S,getCheckpointIds:()=>[[...W],y,[...$]],forEachCheckpoint:e=>{return n=e,a(T,((e,t)=>n(t,e)));var n},hasCheckpoint:U,getCheckpoint:e=>v(T,e),goBackward:()=>(K(),P(),V),goForward:()=>(N(),P(),V),goTo:n=>{const t=e(W,n)?K:e($,n)?N:null;for(;!u(t)&&n!=y;)t();return P(),V},addCheckpointIdsListener:e=>x(e,b),addCheckpointListener:(e,n)=>x(n,j,[e]),delListener:e=>(F(e),V),clear:()=>(D(W),D($),u(y)||q(y),y=void 0,z=0,Q(),V),destroy:()=>{S.delListener(H)},getListenerStats:()=>({})};return w(V.clear())})(S)),y.get(S))})();export{S as createCheckpoints};
1
+ const e=(e,n)=>e.includes(n),n=(e,n)=>e.forEach(n),l=e=>e.length,t=e=>0==l(e),r=(e,...n)=>e.push(...n),o=e=>e.pop(),s=e=>e.shift(),u=e=>null==e,i=(e,n,l)=>u(e)?null==l?void 0:l():n(e),d=(e,n)=>{var l;return null!=(l=null==e?void 0:e.has(n))&&l},a=e=>u(e)||0==(e=>e.size)(e),c=(e,n)=>null==e?void 0:e.forEach(n),h=(e,n)=>null==e?void 0:e.delete(n),v=e=>new Map(e),p=(e,n)=>null==e?void 0:e.get(n),C=(e,n,l)=>u(l)?(h(e,n),e):null==e?void 0:e.set(n,l),f=(e,n,l)=>(d(e,n)||C(e,n,l()),p(e,n)),g=(e,n,t,r,o=0)=>i((t?f:p)(e,n[o],o>l(n)-2?t:v),(s=>{if(o>l(n)-2)return(null==r?void 0:r(s))&&C(e,n[o]),s;const u=g(s,n,t,r,o+1);return a(s)&&C(e,n[o]),u})),k=e=>new Set(Array.isArray(e)||u(e)?e:[e]),L=/^\d+$/,w=Object.freeze,S=(S=>{const y=new WeakMap;return S=>(y.has(S)||y.set(S,(S=>{let y,z,E,V=100,A=v(),I=v(),M=1;const b=v(),j=v(),[x,B,F]=(e=>{let t;const[o,d]=(()=>{const e=[];let n=0;return[()=>{var l;return null!=(l=s(e))?l:""+n++},n=>{L.test(n)&&l(e)<1e3&&r(e,n)}]})(),f=v();return[(e,n,l,r=[],s=(()=>[]))=>{null!=t||(t=_);const u=o();var i,d;return C(f,u,[e,n,l,r,s]),d=u,null==(i=g(n,null!=l?l:[""],k))||i.add(d),u},(e,o,...s)=>n(((e,t=[""])=>{const o=[],s=(e,u)=>u==l(t)?r(o,e):null===t[u]?c(e,(e=>s(e,u+1))):n([t[u],null],(n=>s(p(e,n),u+1)));return s(e,0),o})(e,o),(e=>c(e,(e=>p(f,e)[0](t,...null!=o?o:[],...s))))),e=>i(p(f,e),(([,n,l])=>(g(n,null!=l?l:[""],void 0,(n=>(h(n,e),a(n)?1:0))),C(f,e),d(e),l))),e=>i(p(f,e),(([e,,r=[],o,s])=>{const i=(...d)=>{var a,c;const h=l(d);h==l(r)?e(t,...d,...s(d)):u(r[h])?n(null!=(c=null==(a=o[h])?void 0:a.call(o,...d))?c:[],(e=>i(...d,e))):i(...d,r[h])};i()}))]})(),O=v(),T=v(),W=[],$=[],m=(e,n)=>{M=0,S.transaction((()=>{const[l,t]=p(O,n);c(l,((n,l)=>c(n,((n,t)=>c(n,((n,r)=>((e,n,l,t,r)=>u(r)?e.delCell(n,l,t,!0):e.setCell(n,l,t,r))(S,l,t,r,n[e]))))))),c(t,((n,l)=>((e,n,l)=>u(l)?e.delValue(n):e.setValue(n,l))(S,l,n[e])))})),M=1},q=e=>{C(O,e),C(T,e),B(j,[e])},D=(e,t)=>n(((e,n)=>e.splice(0,n))(e,null!=t?t:l(e)),q),G=()=>D(W,l(W)-V),H=()=>i(y,(()=>{r(W,y),G(),D($),y=void 0,E=1})),J=()=>{y=o(W),E=1},K=S.addCellListener(null,null,null,((e,n,l,t,r,o)=>{if(M){H();const e=f(A,n,v),s=f(e,l,v),u=f(s,t,(()=>[o,void 0]));u[1]=r,u[0]===r&&a(C(s,t))&&a(C(e,l))&&a(C(A,n))&&J(),U()}})),N=S.addValueListener(null,((e,n,l,t)=>{if(M){H();const e=f(I,n,(()=>[t,void 0]));e[1]=l,e[0]===l&&a(C(I,n))&&J(),U()}})),P=(e="")=>(u(y)&&(y=""+z++,C(O,y,[A,I]),Y(y,e),A=v(),I=v(),E=1),y),Q=()=>{t(W)||(((e,...n)=>{e.unshift(...n)})($,P()),m(0,y),y=o(W),E=1)},R=()=>{t($)||(r(W,y),y=s($),m(1,y),E=1)},U=()=>{E&&(B(b),E=0)},X=e=>{const n=P(e);return U(),n},Y=(e,n)=>(Z(e)&&p(T,e)!==n&&(C(T,e,n),B(j,[e])),_),Z=e=>d(O,e),_={setSize:e=>(V=e,G(),_),addCheckpoint:X,setCheckpoint:Y,getStore:()=>S,getCheckpointIds:()=>[[...W],y,[...$]],forEachCheckpoint:e=>{return n=e,c(T,((e,l)=>n(l,e)));var n},hasCheckpoint:Z,getCheckpoint:e=>p(T,e),goBackward:()=>(Q(),U(),_),goForward:()=>(R(),U(),_),goTo:n=>{const l=e(W,n)?Q:e($,n)?R:null;for(;!u(l)&&n!=y;)l();return U(),_},addCheckpointIdsListener:e=>x(e,b),addCheckpointListener:(e,n)=>x(n,j,[e]),delListener:e=>(F(e),_),clear:()=>(D(W),D($),u(y)||q(y),y=void 0,z=0,X(),_),destroy:()=>{S.delListener(K),S.delListener(N)},getListenerStats:()=>({})};return w(_.clear())})(S)),y.get(S))})();export{S as createCheckpoints};
Binary file
@@ -1 +1 @@
1
- const e=e=>typeof e,n=e(""),t=e=>""+e,l=(e,n)=>e.every(n),r=(e,n)=>l(e,((t,l)=>0==l||n(e[l-1],t)<=0)),s=(e,n)=>e.sort(n),o=(e,n)=>e.forEach(n),d=e=>e.length,u=(e,...n)=>e.push(...n),i=e=>null==e,a=(e,n,t)=>i(e)?null==t?void 0:t():n(e),c=e=>Array.isArray(e),v=(e,n)=>{var t;return null!=(t=null==e?void 0:e.has(n))&&t},h=e=>i(e)||0==(e=>e.size)(e),f=e=>{var n;return[...null!=(n=null==e?void 0:e.values())?n:[]]},I=e=>e.clear(),g=(e,n)=>null==e?void 0:e.forEach(n),S=(e,n)=>null==e?void 0:e.delete(n),w=e=>new Map(e),L=e=>{var n;return[...null!=(n=null==e?void 0:e.keys())?n:[]]},p=(e,n)=>null==e?void 0:e.get(n),x=(e,n)=>g(e,((e,t)=>n(t,e))),y=(e,n,t)=>i(t)?(S(e,n),e):null==e?void 0:e.set(n,t),E=(e,n,t)=>(v(e,n)||y(e,n,t()),p(e,n)),R=(e,n,t,l,r=0)=>a((t?E:p)(e,n[r],r>d(n)-2?t:w),(s=>{if(r>d(n)-2)return(null==l?void 0:l(s))&&y(e,n[r]),s;const o=R(s,n,t,l,r+1);return h(s)&&y(e,n[r]),o})),b=e=>new Set(c(e)||i(e)?e:[e]),T=(e,n)=>null==e?void 0:e.add(n),k=(t,l)=>e(t)==n?e=>e(t):null!=t?t:()=>null!=l?l:"",z=(e,n)=>e<n?-1:1,A=/^\d+$/,C=Object.freeze,D=(e=>{const n=new WeakMap;return e=>(n.has(e)||n.set(e,(e=>{const n=w(),D=w(),[M,j,m,O,W,$,q,,B,F,G]=((e,n,t)=>{const r=e.hasRow,s=w(),u=w(),R=w(),k=w(),z=w(),A=(n,t,...l)=>{const r=E(z,n,b);return o(l,(n=>T(r,n)&&t&&e.callListener(n))),l},C=(n,...t)=>a(p(z,n),(l=>{o(0==d(t)?f(l):t,(n=>{e.delListener(n),S(l,n)})),h(l)&&y(z,n)})),D=(e,t)=>{y(s,e,t),v(u,e)||(y(u,e,n()),y(R,e,w()),y(k,e,w()))},M=e=>{y(s,e),y(u,e),y(R,e),y(k,e),C(e)};return[()=>e,()=>L(s),e=>x(u,e),e=>v(u,e),e=>p(s,e),e=>p(u,e),(e,n)=>y(u,e,n),D,(n,s,u,a,h)=>{D(n,s);const f=w(),S=w(),L=p(R,n),E=p(k,n),b=n=>{const o=t=>e.getCell(s,n,t),u=p(L,n),v=r(s,n)?t(a(o,n)):void 0;var I,g;if(u===v||c(u)&&c(v)&&(g=v,d(I=u)===d(g)&&l(I,((e,n)=>g[n]===e)))||y(f,n,[u,v]),!i(h)){const e=p(E,n),t=r(s,n)?h(o,n):void 0;e!=t&&y(S,n,t)}},T=e=>{u((()=>{g(f,(([,e],n)=>y(L,n,e))),g(S,((e,n)=>y(E,n,e)))}),f,S,L,E,e),I(f),I(S)};x(L,b),e.hasTable(s)&&o(e.getRowIds(s),(e=>{v(L,e)||b(e)})),T(!0),C(n),A(n,0,e.addRowListener(s,null,((e,n,t)=>b(t))),e.addTableListener(s,(()=>T())))},M,()=>x(z,M),A,C]})(e,w,(e=>{return i(e)?"":c(e)?(n=t,e.map(n)):t(e);var n})),[H,J,K]=(e=>{let n;const[t,l]=(()=>{const e=[];let n=0;return[()=>{var t;return null!=(t=e.shift())?t:""+n++},n=>{A.test(n)&&d(e)<1e3&&u(e,n)}]})(),r=w();return[(e,l,s)=>{null!=n||(n=P);const o=t();return y(r,o,[e,l,s]),T(R(l,null!=s?s:[""],b),o),o},(e,t,...l)=>o(((e,n=[""])=>{const t=[],l=(e,r)=>r==d(n)?u(t,e):null===n[r]?g(e,(e=>l(e,r+1))):o([n[r],null],(n=>l(p(e,n),r+1)));return l(e,0),t})(e,t),(e=>g(e,(e=>p(r,e)[0](n,...null!=t?t:[],...l))))),e=>a(p(r,e),(([,n,t])=>(R(n,null!=t?t:[""],void 0,(n=>(S(n,e),h(n)?1:0))),y(r,e),l(e),t))),(e,t,l)=>a(p(r,e),(([e,,r=[]])=>{const s=(...u)=>{const a=d(u);a==d(r)?e(n,...u,...l(u)):i(r[a])?o(t[a](...u),(e=>s(...u,e))):s(...u,r[a])};s()}))]})(),N=(n,t,l)=>{const r=W(n);g(l,((n,l)=>t(l,(t=>g(n,(n=>t(n,(t=>e.forEachCell(r,n,t)))))))))},P={setIndexDefinition:(e,t,l,o,d,u=z)=>{const c=i(d)?void 0:([e],[n])=>d(e,n);return B(e,t,((t,l,d,f,I,L)=>{let E=0;const R=b(),k=b(),z=$(e);if(g(l,(([e,n],t)=>{const l=b(e),r=b(n);g(l,(e=>S(r,e)?S(l,e):0)),g(l,(e=>{T(R,e),a(p(z,e),(n=>{S(n,t),h(n)&&(y(z,e),E=1)}))})),g(r,(e=>{T(R,e),v(z,e)||(y(z,e,b()),E=1),T(p(z,e),t),i(o)||T(k,e)}))})),t(),h(I)||(L?x(z,(e=>T(k,e))):x(d,(e=>a(p(f,e),(e=>T(k,e))))),g(k,(e=>{const n=(n,t)=>u(p(I,n),p(I,t),e),t=[...p(z,e)];r(t,n)||(y(z,e,b(s(t,n))),T(R,e))}))),(E||L)&&!i(c)){const n=[...z];r(n,c)||(q(e,w(s(n,c))),E=1)}E&&J(n,[e]),g(R,(n=>J(D,[e,n])))}),k(l),a(o,k)),P},delIndexDefinition:e=>(F(e),P),getStore:M,getIndexIds:j,forEachIndex:e=>m(((n,t)=>e(n,(e=>N(n,e,t))))),forEachSlice:(e,n)=>N(e,n,$(e)),hasIndex:O,hasSlice:(e,n)=>v($(e),n),getTableId:W,getSliceIds:e=>L($(e)),getSliceRowIds:(e,n)=>f(p($(e),n)),addSliceIdsListener:(e,t)=>H(t,n,[e]),addSliceRowIdsListener:(e,n,t)=>H(t,D,[e,n]),delListener:e=>(K(e),P),destroy:G,getListenerStats:()=>({})};return C(P)})(e)),n.get(e))})();export{D as createIndexes};
1
+ const e=e=>typeof e,n=e(""),l=e=>""+e,t=(e,n)=>e.every(n),r=(e,n)=>t(e,((l,t)=>0==t||n(e[t-1],l)<=0)),s=(e,n)=>e.sort(n),o=(e,n)=>e.forEach(n),u=e=>e.length,d=(e,...n)=>e.push(...n),i=e=>null==e,a=(e,n,l)=>i(e)?null==l?void 0:l():n(e),c=e=>Array.isArray(e),v=(e,n)=>{var l;return null!=(l=null==e?void 0:e.has(n))&&l},h=e=>i(e)||0==(e=>e.size)(e),f=e=>{var n;return[...null!=(n=null==e?void 0:e.values())?n:[]]},I=e=>e.clear(),g=(e,n)=>null==e?void 0:e.forEach(n),S=(e,n)=>null==e?void 0:e.delete(n),w=e=>new Map(e),L=e=>{var n;return[...null!=(n=null==e?void 0:e.keys())?n:[]]},p=(e,n)=>null==e?void 0:e.get(n),x=(e,n)=>g(e,((e,l)=>n(l,e))),y=(e,n,l)=>i(l)?(S(e,n),e):null==e?void 0:e.set(n,l),E=(e,n,l)=>(v(e,n)||y(e,n,l()),p(e,n)),R=(e,n,l,t,r=0)=>a((l?E:p)(e,n[r],r>u(n)-2?l:w),(s=>{if(r>u(n)-2)return(null==t?void 0:t(s))&&y(e,n[r]),s;const o=R(s,n,l,t,r+1);return h(s)&&y(e,n[r]),o})),b=e=>new Set(c(e)||i(e)?e:[e]),T=(e,n)=>null==e?void 0:e.add(n),k=(l,t)=>e(l)==n?e=>e(l):null!=l?l:()=>null!=t?t:"",z=(e,n)=>e<n?-1:1,A=/^\d+$/,C=Object.freeze,D=(e=>{const n=new WeakMap;return e=>(n.has(e)||n.set(e,(e=>{const n=w(),D=w(),[M,j,m,O,W,$,q,,B,F,G]=((e,n,l)=>{const r=e.hasRow,s=w(),d=w(),R=w(),k=w(),z=w(),A=(n,l,...t)=>{const r=E(z,n,b);return o(t,(n=>T(r,n)&&l&&e.callListener(n))),t},C=(n,...l)=>a(p(z,n),(t=>{o(0==u(l)?f(t):l,(n=>{e.delListener(n),S(t,n)})),h(t)&&y(z,n)})),D=(e,l)=>{y(s,e,l),v(d,e)||(y(d,e,n()),y(R,e,w()),y(k,e,w()))},M=e=>{y(s,e),y(d,e),y(R,e),y(k,e),C(e)};return[()=>e,()=>L(s),e=>x(d,e),e=>v(d,e),e=>p(s,e),e=>p(d,e),(e,n)=>y(d,e,n),D,(n,s,d,a,h)=>{D(n,s);const f=w(),S=w(),L=p(R,n),E=p(k,n),b=n=>{const o=l=>e.getCell(s,n,l),d=p(L,n),v=r(s,n)?l(a(o,n)):void 0;var I,g;if(d===v||c(d)&&c(v)&&(g=v,u(I=d)===u(g)&&t(I,((e,n)=>g[n]===e)))||y(f,n,[d,v]),!i(h)){const e=p(E,n),l=r(s,n)?h(o,n):void 0;e!=l&&y(S,n,l)}},T=e=>{d((()=>{g(f,(([,e],n)=>y(L,n,e))),g(S,((e,n)=>y(E,n,e)))}),f,S,L,E,e),I(f),I(S)};x(L,b),e.hasTable(s)&&o(e.getRowIds(s),(e=>{v(L,e)||b(e)})),T(!0),C(n),A(n,0,e.addRowListener(s,null,((e,n,l)=>b(l))),e.addTableListener(s,(()=>T())))},M,()=>x(z,M),A,C]})(e,w,(e=>{return i(e)?"":c(e)?(n=l,e.map(n)):l(e);var n})),[H,J,K]=(e=>{let n;const[l,t]=(()=>{const e=[];let n=0;return[()=>{var l;return null!=(l=e.shift())?l:""+n++},n=>{A.test(n)&&u(e)<1e3&&d(e,n)}]})(),r=w();return[(e,t,s,o=[],u=(()=>[]))=>{null!=n||(n=P);const d=l();return y(r,d,[e,t,s,o,u]),T(R(t,null!=s?s:[""],b),d),d},(e,l,...t)=>o(((e,n=[""])=>{const l=[],t=(e,r)=>r==u(n)?d(l,e):null===n[r]?g(e,(e=>t(e,r+1))):o([n[r],null],(n=>t(p(e,n),r+1)));return t(e,0),l})(e,l),(e=>g(e,(e=>p(r,e)[0](n,...null!=l?l:[],...t))))),e=>a(p(r,e),(([,n,l])=>(R(n,null!=l?l:[""],void 0,(n=>(S(n,e),h(n)?1:0))),y(r,e),t(e),l))),e=>a(p(r,e),(([e,,l=[],t,r])=>{const s=(...d)=>{var a,c;const v=u(d);v==u(l)?e(n,...d,...r(d)):i(l[v])?o(null!=(c=null==(a=t[v])?void 0:a.call(t,...d))?c:[],(e=>s(...d,e))):s(...d,l[v])};s()}))]})(),N=(n,l,t)=>{const r=W(n);g(t,((n,t)=>l(t,(l=>g(n,(n=>l(n,(l=>e.forEachCell(r,n,l)))))))))},P={setIndexDefinition:(e,l,t,o,u,d=z)=>{const c=i(u)?void 0:([e],[n])=>u(e,n);return B(e,l,((l,t,u,f,I,L)=>{let E=0;const R=b(),k=b(),z=$(e);if(g(t,(([e,n],l)=>{const t=b(e),r=b(n);g(t,(e=>S(r,e)?S(t,e):0)),g(t,(e=>{T(R,e),a(p(z,e),(n=>{S(n,l),h(n)&&(y(z,e),E=1)}))})),g(r,(e=>{T(R,e),v(z,e)||(y(z,e,b()),E=1),T(p(z,e),l),i(o)||T(k,e)}))})),l(),h(I)||(L?x(z,(e=>T(k,e))):x(u,(e=>a(p(f,e),(e=>T(k,e))))),g(k,(e=>{const n=(n,l)=>d(p(I,n),p(I,l),e),l=[...p(z,e)];r(l,n)||(y(z,e,b(s(l,n))),T(R,e))}))),(E||L)&&!i(c)){const n=[...z];r(n,c)||(q(e,w(s(n,c))),E=1)}E&&J(n,[e]),g(R,(n=>J(D,[e,n])))}),k(t),a(o,k)),P},delIndexDefinition:e=>(F(e),P),getStore:M,getIndexIds:j,forEachIndex:e=>m(((n,l)=>e(n,(e=>N(n,e,l))))),forEachSlice:(e,n)=>N(e,n,$(e)),hasIndex:O,hasSlice:(e,n)=>v($(e),n),getTableId:W,getSliceIds:e=>L($(e)),getSliceRowIds:(e,n)=>f(p($(e),n)),addSliceIdsListener:(e,l)=>H(l,n,[e]),addSliceRowIdsListener:(e,n,l)=>H(l,D,[e,n]),delListener:e=>(K(e),P),destroy:G,getListenerStats:()=>({})};return C(P)})(e)),n.get(e))})();export{D as createIndexes};
Binary file
@@ -1 +1 @@
1
- const e=e=>typeof e,t=e(""),n=e(e),l=(e,t)=>e.forEach(t),r=e=>o(e,((e,t)=>e+t),0),i=e=>e.length,o=(e,t,n)=>e.reduce(t,n),u=(e,...t)=>e.push(...t),s=Math.max,d=Math.min,a=isFinite,c=e=>null==e,v=(e,t,n)=>c(e)?null==n?void 0:n():t(e),h=e=>Array.isArray(e),f=()=>{},g=e=>e.size,M=(e,t)=>{var n;return null!=(n=null==e?void 0:e.has(t))&&n},L=e=>c(e)||0==g(e),m=e=>{var t;return[...null!=(t=null==e?void 0:e.values())?t:[]]},w=e=>e.clear(),y=(e,t)=>null==e?void 0:e.forEach(t),p=(e,t)=>null==e?void 0:e.delete(t),b=e=>new Map(e),x=(e,t)=>null==e?void 0:e.get(t),E=(e,t)=>y(e,((e,n)=>t(n,e))),I=(e,t,n)=>c(n)?(p(e,t),e):null==e?void 0:e.set(t,n),R=(e,t,n)=>(M(e,t)||I(e,t,n()),x(e,t)),S=(e,t,n,l,r=0)=>v((n?R:x)(e,t[r],r>i(t)-2?n:b),(o=>{if(r>i(t)-2)return(null==l?void 0:l(o))&&I(e,t[r]),o;const u=S(o,t,n,l,r+1);return L(o)&&I(e,t[r]),u})),T=b([["avg",[(e,t)=>r(e)/t,(e,t,n)=>e+(t-e)/(n+1),(e,t,n)=>e+(e-t)/(n-1),(e,t,n,l)=>e+(t-n)/l]],["max",[e=>s(...e),(e,t)=>s(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:s(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=>r(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,n)=>e-n+t]]]),k=e=>new Set(h(e)||c(e)?e:[e]),z=(e,t)=>null==e?void 0:e.add(t),A=/^\d+$/,D=Object.freeze,N=(r=>{const o=new WeakMap;return r=>(o.has(r)||o.set(r,(r=>{const o=b(),[s,d,N,j,C,F,O,,W,$,q]=((e,t,n)=>{const r=e.hasRow,o=b(),u=b(),s=b(),d=b(),a=b(),f=(t,n,...r)=>{const i=R(a,t,k);return l(r,(t=>z(i,t)&&n&&e.callListener(t))),r},g=(t,...n)=>v(x(a,t),(r=>{l(0==i(n)?m(r):n,(t=>{e.delListener(t),p(r,t)})),L(r)&&I(a,t)})),S=(e,n)=>{I(o,e,n),M(u,e)||(I(u,e,t()),I(s,e,b()),I(d,e,b()))},T=e=>{I(o,e),I(u,e),I(s,e),I(d,e),g(e)};return[()=>e,()=>{return[...null!=(t=null==(e=o)?void 0:e.keys())?t:[]];var e,t},e=>E(u,e),e=>M(u,e),e=>x(o,e),e=>x(u,e),(e,t)=>I(u,e,t),S,(t,n,o,u,a)=>{S(t,n);const v=b(),L=b(),m=x(s,t),p=x(d,t),R=t=>{const l=l=>e.getCell(n,t,l),o=x(m,t),s=r(n,t)?(d=u(l,t),isNaN(d)||c(d)||!0===d||!1===d||""===d?void 0:1*d):void 0;var d,f,g,M;if(o===s||h(o)&&h(s)&&(g=s,i(f=o)===i(g)&&(M=(e,t)=>g[t]===e,f.every(M)))||I(v,t,[o,s]),!c(a)){const e=x(p,t),i=r(n,t)?a(l,t):void 0;e!=i&&I(L,t,i)}},T=e=>{o((()=>{y(v,(([,e],t)=>I(m,t,e))),y(L,((e,t)=>I(p,t,e)))}),v,L,m,p,e),w(v),w(L)};E(m,R),e.hasTable(n)&&l(e.getRowIds(n),(e=>{M(m,e)||R(e)})),T(!0),g(t),f(t,0,e.addRowListener(n,null,((e,t,n)=>R(n))),e.addTableListener(n,(()=>T())))},T,()=>E(a,T),f,g]})(r,f),[B,G,H]=(e=>{let t;const[n,r]=(()=>{const e=[];let t=0;return[()=>{var n;return null!=(n=e.shift())?n:""+t++},t=>{A.test(t)&&i(e)<1e3&&u(e,t)}]})(),o=b();return[(e,l,r)=>{null!=t||(t=J);const i=n();return I(o,i,[e,l,r]),z(S(l,null!=r?r:[""],k),i),i},(e,n,...r)=>l(((e,t=[""])=>{const n=[],r=(e,o)=>o==i(t)?u(n,e):null===t[o]?y(e,(e=>r(e,o+1))):l([t[o],null],(t=>r(x(e,t),o+1)));return r(e,0),n})(e,n),(e=>y(e,(e=>x(o,e)[0](t,...null!=n?n:[],...r))))),e=>v(x(o,e),(([,t,n])=>(S(t,null!=n?n:[""],void 0,(t=>(p(t,e),L(t)?1:0))),I(o,e),r(e),n))),(e,n,r)=>v(x(o,e),(([e,,o=[]])=>{const u=(...s)=>{const d=i(s);d==i(o)?e(t,...s,...r(s)):c(o[d])?l(n[d](...s),(e=>u(...s,e))):u(...s,o[d])};u()}))]})(),J={setMetricDefinition:(l,r,i,u,s,d,v)=>{var h;const f=e(i)==n?[i,s,d,v]:null!=(h=x(T,i))?h:x(T,"sum");return W(l,r,((e,t,n,r,i,u)=>{const s=F(l),d=g(r);u||(u=c(s)),e();let v=((e,t,n,l,r,i=!1)=>{if(L(n))return;const[o,u,s,d]=r;return i||(i=c(e)),y(l,(([n,l])=>{i||(e=c(n)?null==u?void 0:u(e,l,t++):c(l)?null==s?void 0:s(e,n,t--):null==d?void 0:d(e,l,n,t),i||(i=c(e)))})),i?o(m(n),g(n)):e})(s,d,r,t,f,u);a(v)||(v=void 0),v!=s&&(O(l,v),G(o,[l],v,s))}),(1,e(M=u)==t?e=>e(M):null!=M?M:()=>1)),J;var M},delMetricDefinition:e=>($(e),J),getStore:s,getMetricIds:d,forEachMetric:N,hasMetric:j,getTableId:C,getMetric:F,addMetricListener:(e,t)=>B(t,o,[e]),delListener:e=>(H(e),J),destroy:q,getListenerStats:()=>({})};return D(J)})(r)),o.get(r))})();export{N as createMetrics};
1
+ const e=e=>typeof e,n=e(""),t=e(e),l=(e,n)=>e.forEach(n),r=e=>o(e,((e,n)=>e+n),0),i=e=>e.length,o=(e,n,t)=>e.reduce(n,t),u=(e,...n)=>e.push(...n),s=Math.max,d=Math.min,a=isFinite,v=e=>null==e,c=(e,n,t)=>v(e)?null==t?void 0:t():n(e),h=e=>Array.isArray(e),f=()=>{},g=e=>e.size,M=(e,n)=>{var t;return null!=(t=null==e?void 0:e.has(n))&&t},L=e=>v(e)||0==g(e),m=e=>{var n;return[...null!=(n=null==e?void 0:e.values())?n:[]]},w=e=>e.clear(),y=(e,n)=>null==e?void 0:e.forEach(n),p=(e,n)=>null==e?void 0:e.delete(n),b=e=>new Map(e),x=(e,n)=>null==e?void 0:e.get(n),E=(e,n)=>y(e,((e,t)=>n(t,e))),I=(e,n,t)=>v(t)?(p(e,n),e):null==e?void 0:e.set(n,t),R=(e,n,t)=>(M(e,n)||I(e,n,t()),x(e,n)),S=(e,n,t,l,r=0)=>c((t?R:x)(e,n[r],r>i(n)-2?t:b),(o=>{if(r>i(n)-2)return(null==l?void 0:l(o))&&I(e,n[r]),o;const u=S(o,n,t,l,r+1);return L(o)&&I(e,n[r]),u})),T=b([["avg",[(e,n)=>r(e)/n,(e,n,t)=>e+(n-e)/(t+1),(e,n,t)=>e+(e-n)/(t-1),(e,n,t,l)=>e+(n-t)/l]],["max",[e=>s(...e),(e,n)=>s(n,e),(e,n)=>n==e?void 0:e,(e,n,t)=>t==e?void 0:s(n,e)]],["min",[e=>d(...e),(e,n)=>d(n,e),(e,n)=>n==e?void 0:e,(e,n,t)=>t==e?void 0:d(n,e)]],["sum",[e=>r(e),(e,n)=>e+n,(e,n)=>e-n,(e,n,t)=>e-t+n]]]),k=e=>new Set(h(e)||v(e)?e:[e]),z=(e,n)=>null==e?void 0:e.add(n),A=/^\d+$/,D=Object.freeze,N=(r=>{const o=new WeakMap;return r=>(o.has(r)||o.set(r,(r=>{const o=b(),[s,d,N,j,C,F,O,,W,$,q]=((e,n,t)=>{const r=e.hasRow,o=b(),u=b(),s=b(),d=b(),a=b(),f=(n,t,...r)=>{const i=R(a,n,k);return l(r,(n=>z(i,n)&&t&&e.callListener(n))),r},g=(n,...t)=>c(x(a,n),(r=>{l(0==i(t)?m(r):t,(n=>{e.delListener(n),p(r,n)})),L(r)&&I(a,n)})),S=(e,t)=>{I(o,e,t),M(u,e)||(I(u,e,n()),I(s,e,b()),I(d,e,b()))},T=e=>{I(o,e),I(u,e),I(s,e),I(d,e),g(e)};return[()=>e,()=>{return[...null!=(n=null==(e=o)?void 0:e.keys())?n:[]];var e,n},e=>E(u,e),e=>M(u,e),e=>x(o,e),e=>x(u,e),(e,n)=>I(u,e,n),S,(n,t,o,u,a)=>{S(n,t);const c=b(),L=b(),m=x(s,n),p=x(d,n),R=n=>{const l=l=>e.getCell(t,n,l),o=x(m,n),s=r(t,n)?(d=u(l,n),isNaN(d)||v(d)||!0===d||!1===d||""===d?void 0:1*d):void 0;var d,f,g,M;if(o===s||h(o)&&h(s)&&(g=s,i(f=o)===i(g)&&(M=(e,n)=>g[n]===e,f.every(M)))||I(c,n,[o,s]),!v(a)){const e=x(p,n),i=r(t,n)?a(l,n):void 0;e!=i&&I(L,n,i)}},T=e=>{o((()=>{y(c,(([,e],n)=>I(m,n,e))),y(L,((e,n)=>I(p,n,e)))}),c,L,m,p,e),w(c),w(L)};E(m,R),e.hasTable(t)&&l(e.getRowIds(t),(e=>{M(m,e)||R(e)})),T(!0),g(n),f(n,0,e.addRowListener(t,null,((e,n,t)=>R(t))),e.addTableListener(t,(()=>T())))},T,()=>E(a,T),f,g]})(r,f),[B,G,H]=(e=>{let n;const[t,r]=(()=>{const e=[];let n=0;return[()=>{var t;return null!=(t=e.shift())?t:""+n++},n=>{A.test(n)&&i(e)<1e3&&u(e,n)}]})(),o=b();return[(e,l,r,i=[],u=(()=>[]))=>{null!=n||(n=J);const s=t();return I(o,s,[e,l,r,i,u]),z(S(l,null!=r?r:[""],k),s),s},(e,t,...r)=>l(((e,n=[""])=>{const t=[],r=(e,o)=>o==i(n)?u(t,e):null===n[o]?y(e,(e=>r(e,o+1))):l([n[o],null],(n=>r(x(e,n),o+1)));return r(e,0),t})(e,t),(e=>y(e,(e=>x(o,e)[0](n,...null!=t?t:[],...r))))),e=>c(x(o,e),(([,n,t])=>(S(n,null!=t?t:[""],void 0,(n=>(p(n,e),L(n)?1:0))),I(o,e),r(e),t))),e=>c(x(o,e),(([e,,t=[],r,o])=>{const u=(...s)=>{var d,a;const c=i(s);c==i(t)?e(n,...s,...o(s)):v(t[c])?l(null!=(a=null==(d=r[c])?void 0:d.call(r,...s))?a:[],(e=>u(...s,e))):u(...s,t[c])};u()}))]})(),J={setMetricDefinition:(l,r,i,u,s,d,c)=>{var h;const f=e(i)==t?[i,s,d,c]:null!=(h=x(T,i))?h:x(T,"sum");return W(l,r,((e,n,t,r,i,u)=>{const s=F(l),d=g(r);u||(u=v(s)),e();let c=((e,n,t,l,r,i=!1)=>{if(L(t))return;const[o,u,s,d]=r;return i||(i=v(e)),y(l,(([t,l])=>{i||(e=v(t)?null==u?void 0:u(e,l,n++):v(l)?null==s?void 0:s(e,t,n--):null==d?void 0:d(e,l,t,n),i||(i=v(e)))})),i?o(m(t),g(t)):e})(s,d,r,n,f,u);a(c)||(c=void 0),c!=s&&(O(l,c),G(o,[l],c,s))}),(1,e(M=u)==n?e=>e(M):null!=M?M:()=>1)),J;var M},delMetricDefinition:e=>($(e),J),getStore:s,getMetricIds:d,forEachMetric:N,hasMetric:j,getTableId:C,getMetric:F,addMetricListener:(e,n)=>B(n,o,[e]),delListener:e=>(H(e),J),destroy:q,getListenerStats:()=>({})};return D(J)})(r)),o.get(r))})();export{N as createMetrics};
Binary file
@@ -27,7 +27,7 @@
27
27
  * @module persisters
28
28
  */
29
29
 
30
- import {Store, Tables} from './store.d';
30
+ import {Store, Tables, Values} from './store.d';
31
31
  import {Callback} from './common.d';
32
32
 
33
33
  /**
@@ -105,9 +105,9 @@ export type PersisterStats = {
105
105
  *
106
106
  * await persister.save();
107
107
  * console.log(sessionStorage.getItem('pets'));
108
- * // -> '{"pets":{"fido":{"species":"dog"}}}'
108
+ * // -> '[{"pets":{"fido":{"species":"dog"}}},{}]'
109
109
  *
110
- * sessionStorage.setItem('pets', '{"pets":{"toto":{"species":"dog"}}}');
110
+ * sessionStorage.setItem('pets', '[{"pets":{"toto":{"species":"dog"}}},{}]');
111
111
  * await persister.load();
112
112
  * console.log(store.getTables());
113
113
  * // -> {pets: {toto: {species: 'dog'}}}
@@ -130,10 +130,10 @@ export type PersisterStats = {
130
130
  * store.setTables({pets: {felix: {species: 'cat'}}});
131
131
  * // ...
132
132
  * console.log(sessionStorage.getItem('pets'));
133
- * // -> '{"pets":{"felix":{"species":"cat"}}}'
133
+ * // -> '[{"pets":{"felix":{"species":"cat"}}},{}]'
134
134
  *
135
135
  * // In another browser tab:
136
- * sessionStorage.setItem('pets', '{"pets":{"toto":{"species":"dog"}}}');
136
+ * sessionStorage.setItem('pets', '[{"pets":{"toto":{"species":"dog"}}},{}]');
137
137
  * // -> StorageEvent('storage', {storageArea: sessionStorage, key: 'pets'})
138
138
  *
139
139
  * // ...
@@ -163,6 +163,8 @@ export interface Persister {
163
163
  *
164
164
  * @param initialTables An optional Tables object used when the underlying
165
165
  * storage has not previously been populated.
166
+ * @param initialValues An optional Values object used when the underlying
167
+ * storage has not previously been populated, since v3.0.0.
166
168
  * @returns A Promise containing a reference to the Persister object.
167
169
  * @example
168
170
  * This example creates an empty Store, and loads data into it from the
@@ -170,7 +172,7 @@ export interface Persister {
170
172
  * previously populated.
171
173
  *
172
174
  * ```js
173
- * sessionStorage.setItem('pets', '{"pets":{"fido":{"species":"dog"}}}');
175
+ * sessionStorage.setItem('pets', '[{"pets":{"fido":{"species":"dog"}}},{}]');
174
176
  *
175
177
  * const store = createStore();
176
178
  * const persister = createSessionPersister(store, 'pets');
@@ -195,7 +197,7 @@ export interface Persister {
195
197
  * console.log(store.getTables());
196
198
  * // -> {pets: {fido: {species: 'dog'}}}
197
199
  *
198
- * sessionStorage.setItem('pets', '{"pets":{"toto":{"species":"dog"}}}');
200
+ * sessionStorage.setItem('pets', '[{"pets":{"toto":{"species":"dog"}}},{}]');
199
201
  * await persister.load({pets: {fido: {species: 'dog'}}});
200
202
  * console.log(store.getTables());
201
203
  * // -> {pets: {toto: {species: 'dog'}}}
@@ -204,7 +206,7 @@ export interface Persister {
204
206
  * ```
205
207
  * @category Load
206
208
  */
207
- load(initialTables?: Tables): Promise<Persister>;
209
+ load(initialTables?: Tables, initialValues?: Values): Promise<Persister>;
208
210
 
209
211
  /**
210
212
  * The startAutoLoad method gets persisted data from storage, and loads it
@@ -229,6 +231,8 @@ export interface Persister {
229
231
  *
230
232
  * @param initialTables An optional Tables object used when the underlying
231
233
  * storage has not previously been populated.
234
+ * @param initialValues An optional Values object used when the underlying
235
+ * storage has not previously been populated, since v3.0.0.
232
236
  * @returns A Promise containing a reference to the Persister object.
233
237
  * @example
234
238
  * This example creates an empty Store, and loads data into it from the
@@ -246,7 +250,7 @@ export interface Persister {
246
250
  * // -> {pets: {fido: {species: 'dog'}}}
247
251
  *
248
252
  * // In another browser tab:
249
- * sessionStorage.setItem('pets', '{"pets":{"toto":{"species":"dog"}}}');
253
+ * sessionStorage.setItem('pets', '[{"pets":{"toto":{"species":"dog"}}},{}]');
250
254
  * // -> StorageEvent('storage', {storageArea: sessionStorage, key: 'pets'})
251
255
  *
252
256
  * // ...
@@ -258,7 +262,10 @@ export interface Persister {
258
262
  * ```
259
263
  * @category Load
260
264
  */
261
- startAutoLoad(initialTables?: Tables): Promise<Persister>;
265
+ startAutoLoad(
266
+ initialTables?: Tables,
267
+ initialValues?: Values,
268
+ ): Promise<Persister>;
262
269
 
263
270
  /**
264
271
  * The stopAutoLoad method stops the automatic loading of data from storage
@@ -279,7 +286,7 @@ export interface Persister {
279
286
  * await persister.startAutoLoad();
280
287
  *
281
288
  * // In another browser tab:
282
- * sessionStorage.setItem('pets', '{"pets":{"toto":{"species":"dog"}}}');
289
+ * sessionStorage.setItem('pets', '[{"pets":{"toto":{"species":"dog"}}},{}]');
283
290
  * // -> StorageEvent('storage', {storageArea: sessionStorage, key: 'pets'})
284
291
  * // ...
285
292
  * console.log(store.getTables());
@@ -288,7 +295,10 @@ export interface Persister {
288
295
  * persister.stopAutoLoad();
289
296
  *
290
297
  * // In another browser tab:
291
- * sessionStorage.setItem('pets', '{"pets":{"felix":{"species":"cat"}}}');
298
+ * sessionStorage.setItem(
299
+ * 'pets',
300
+ * '[{"pets":{"felix":{"species":"cat"}}},{}]',
301
+ * );
292
302
  * // -> StorageEvent('storage', {storageArea: sessionStorage, key: 'pets'})
293
303
  * // ...
294
304
  * console.log(store.getTables());
@@ -322,7 +332,7 @@ export interface Persister {
322
332
  *
323
333
  * await persister.save();
324
334
  * console.log(sessionStorage.getItem('pets'));
325
- * // -> '{"pets":{"fido":{"species":"dog"}}}'
335
+ * // -> '[{"pets":{"fido":{"species":"dog"}}},{}]'
326
336
  *
327
337
  * persister.destroy();
328
338
  * sessionStorage.clear();
@@ -356,12 +366,12 @@ export interface Persister {
356
366
  *
357
367
  * await persister.startAutoSave();
358
368
  * console.log(sessionStorage.getItem('pets'));
359
- * // -> '{"pets":{"fido":{"species":"dog"}}}'
369
+ * // -> '[{"pets":{"fido":{"species":"dog"}}},{}]'
360
370
  *
361
371
  * store.setTables({pets: {toto: {species: 'dog'}}});
362
372
  * // ...
363
373
  * console.log(sessionStorage.getItem('pets'));
364
- * // -> '{"pets":{"toto":{"species":"dog"}}}'
374
+ * // -> '[{"pets":{"toto":{"species":"dog"}}},{}]'
365
375
  *
366
376
  * sessionStorage.clear();
367
377
  * ```
@@ -391,14 +401,14 @@ export interface Persister {
391
401
  * store.setTables({pets: {toto: {species: 'dog'}}});
392
402
  * // ...
393
403
  * console.log(sessionStorage.getItem('pets'));
394
- * // -> '{"pets":{"toto":{"species":"dog"}}}'
404
+ * // -> '[{"pets":{"toto":{"species":"dog"}}},{}]'
395
405
  *
396
406
  * persister.stopAutoSave();
397
407
  *
398
408
  * store.setTables({pets: {felix: {species: 'cat'}}});
399
409
  * // ...
400
410
  * console.log(sessionStorage.getItem('pets'));
401
- * // -> '{"pets":{"toto":{"species":"dog"}}}'
411
+ * // -> '[{"pets":{"toto":{"species":"dog"}}},{}]'
402
412
  * // Store change has not been automatically saved.
403
413
  *
404
414
  * sessionStorage.clear();
@@ -423,7 +433,7 @@ export interface Persister {
423
433
  * persister.getStore().setTables({pets: {fido: {species: 'dog'}}});
424
434
  * // ...
425
435
  * console.log(sessionStorage.getItem('pets'));
426
- * // -> '{"pets":{"fido":{"species":"dog"}}}'
436
+ * // -> '[{"pets":{"fido":{"species":"dog"}}},{}]'
427
437
  *
428
438
  * sessionStorage.clear();
429
439
  * ```
@@ -493,7 +503,7 @@ export interface Persister {
493
503
  * store.setTables({pets: {felix: {species: 'cat'}}});
494
504
  * // ...
495
505
  *
496
- * sessionStorage.setItem('pets', '{"pets":{"toto":{"species":"dog"}}}');
506
+ * sessionStorage.setItem('pets', '[{"pets":{"toto":{"species":"dog"}}},{}]');
497
507
  * // -> StorageEvent('storage', {storageArea: sessionStorage, key: 'pets'})
498
508
  * // ...
499
509
  *
@@ -529,7 +539,7 @@ export interface Persister {
529
539
  *
530
540
  * await persister.save();
531
541
  * console.log(sessionStorage.getItem('pets'));
532
- * // -> '{"pets":{"fido":{"species":"dog"}}}'
542
+ * // -> '[{"pets":{"fido":{"species":"dog"}}},{}]'
533
543
  *
534
544
  * persister.destroy();
535
545
  * sessionStorage.clear();
@@ -562,7 +572,7 @@ export function createSessionPersister(
562
572
  *
563
573
  * await persister.save();
564
574
  * console.log(localStorage.getItem('pets'));
565
- * // -> '{"pets":{"fido":{"species":"dog"}}}'
575
+ * // -> '[{"pets":{"fido":{"species":"dog"}}},{}]'
566
576
  *
567
577
  * persister.destroy();
568
578
  * localStorage.clear();
@@ -696,9 +706,9 @@ export function createFilePersister(store: Store, filePath: string): Persister;
696
706
  *
697
707
  * await persister.save();
698
708
  * console.log(storeJson);
699
- * // -> '{"pets":{"fido":{"species":"dog"}}}'
709
+ * // -> '[{"pets":{"fido":{"species":"dog"}}},{}]'
700
710
  *
701
- * storeJson = '{"pets":{"fido":{"species":"dog","color":"brown"}}}';
711
+ * storeJson = '[{"pets":{"fido":{"species":"dog","color":"brown"}}},{}]';
702
712
  * await persister.load();
703
713
  *
704
714
  * console.log(store.getTables());