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.
- package/bin/cli.js +1 -1
- package/lib/checkpoints.d.ts +18 -3
- package/lib/checkpoints.js +1 -1
- package/lib/checkpoints.js.gz +0 -0
- package/lib/debug/checkpoints.d.ts +18 -3
- package/lib/debug/checkpoints.js +97 -49
- package/lib/debug/indexes.js +31 -16
- package/lib/debug/metrics.js +31 -16
- package/lib/debug/persisters.d.ts +33 -23
- package/lib/debug/persisters.js +10 -5
- package/lib/debug/queries.js +2 -2
- package/lib/debug/relationships.js +31 -16
- package/lib/debug/store.d.ts +2053 -381
- package/lib/debug/store.js +444 -106
- package/lib/debug/tinybase.js +512 -138
- package/lib/debug/tools.d.ts +109 -38
- package/lib/debug/tools.js +759 -453
- package/lib/debug/ui-react.d.ts +1218 -138
- package/lib/debug/ui-react.js +163 -12
- package/lib/es6/checkpoints.d.ts +18 -3
- package/lib/es6/checkpoints.js +1 -1
- package/lib/es6/checkpoints.js.gz +0 -0
- package/lib/es6/indexes.js +1 -1
- package/lib/es6/indexes.js.gz +0 -0
- package/lib/es6/metrics.js +1 -1
- package/lib/es6/metrics.js.gz +0 -0
- package/lib/es6/persisters.d.ts +33 -23
- package/lib/es6/persisters.js +1 -1
- package/lib/es6/persisters.js.gz +0 -0
- package/lib/es6/relationships.js +1 -1
- package/lib/es6/relationships.js.gz +0 -0
- package/lib/es6/store.d.ts +2053 -381
- package/lib/es6/store.js +1 -1
- package/lib/es6/store.js.gz +0 -0
- package/lib/es6/tinybase.js +1 -1
- package/lib/es6/tinybase.js.gz +0 -0
- package/lib/es6/tools.d.ts +109 -38
- package/lib/es6/tools.js +1 -1
- package/lib/es6/tools.js.gz +0 -0
- package/lib/es6/ui-react.d.ts +1218 -138
- package/lib/es6/ui-react.js +1 -1
- package/lib/es6/ui-react.js.gz +0 -0
- package/lib/indexes.js +1 -1
- package/lib/indexes.js.gz +0 -0
- package/lib/metrics.js +1 -1
- package/lib/metrics.js.gz +0 -0
- package/lib/persisters.d.ts +33 -23
- package/lib/persisters.js +1 -1
- package/lib/persisters.js.gz +0 -0
- package/lib/relationships.js +1 -1
- package/lib/relationships.js.gz +0 -0
- package/lib/store.d.ts +2053 -381
- package/lib/store.js +1 -1
- package/lib/store.js.gz +0 -0
- package/lib/tinybase.js +1 -1
- package/lib/tinybase.js.gz +0 -0
- package/lib/tools.d.ts +109 -38
- package/lib/tools.js +1 -1
- package/lib/tools.js.gz +0 -0
- package/lib/ui-react.d.ts +1218 -138
- package/lib/ui-react.js +1 -1
- package/lib/ui-react.js.gz +0 -0
- package/lib/umd/checkpoints.d.ts +18 -3
- package/lib/umd/checkpoints.js +1 -1
- package/lib/umd/checkpoints.js.gz +0 -0
- package/lib/umd/indexes.js +1 -1
- package/lib/umd/indexes.js.gz +0 -0
- package/lib/umd/metrics.js +1 -1
- package/lib/umd/metrics.js.gz +0 -0
- package/lib/umd/persisters.d.ts +33 -23
- package/lib/umd/persisters.js +1 -1
- package/lib/umd/persisters.js.gz +0 -0
- package/lib/umd/relationships.js +1 -1
- package/lib/umd/relationships.js.gz +0 -0
- package/lib/umd/store.d.ts +2053 -381
- package/lib/umd/store.js +1 -1
- package/lib/umd/store.js.gz +0 -0
- package/lib/umd/tinybase.js +1 -1
- package/lib/umd/tinybase.js.gz +0 -0
- package/lib/umd/tools.d.ts +109 -38
- package/lib/umd/tools.js +1 -1
- package/lib/umd/tools.js.gz +0 -0
- package/lib/umd/ui-react.d.ts +1218 -138
- package/lib/umd/ui-react.js +1 -1
- package/lib/umd/ui-react.js.gz +0 -0
- package/lib/umd-es6/checkpoints.d.ts +18 -3
- package/lib/umd-es6/checkpoints.js +1 -1
- package/lib/umd-es6/checkpoints.js.gz +0 -0
- package/lib/umd-es6/indexes.js +1 -1
- package/lib/umd-es6/indexes.js.gz +0 -0
- package/lib/umd-es6/metrics.js +1 -1
- package/lib/umd-es6/metrics.js.gz +0 -0
- package/lib/umd-es6/persisters.d.ts +33 -23
- package/lib/umd-es6/persisters.js +1 -1
- package/lib/umd-es6/persisters.js.gz +0 -0
- package/lib/umd-es6/relationships.js +1 -1
- package/lib/umd-es6/relationships.js.gz +0 -0
- package/lib/umd-es6/store.d.ts +2053 -381
- package/lib/umd-es6/store.js +1 -1
- package/lib/umd-es6/store.js.gz +0 -0
- package/lib/umd-es6/tinybase.js +1 -1
- package/lib/umd-es6/tinybase.js.gz +0 -0
- package/lib/umd-es6/tools.d.ts +109 -38
- package/lib/umd-es6/tools.js +1 -1
- package/lib/umd-es6/tools.js.gz +0 -0
- package/lib/umd-es6/ui-react.d.ts +1218 -138
- package/lib/umd-es6/ui-react.js +1 -1
- package/lib/umd-es6/ui-react.js.gz +0 -0
- package/package.json +20 -20
- package/readme.md +27 -16
package/lib/debug/ui-react.js
CHANGED
|
@@ -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(
|
|
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(
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
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
|
};
|
package/lib/es6/checkpoints.d.ts
CHANGED
|
@@ -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()
|
|
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'], '
|
|
155
|
-
* // Previous redo of
|
|
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();
|
package/lib/es6/checkpoints.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=(e,n)=>e.includes(n),n=(e,n)=>e.forEach(n),
|
|
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
|
package/lib/es6/indexes.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=e=>typeof e,n=e(""),
|
|
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};
|
package/lib/es6/indexes.js.gz
CHANGED
|
Binary file
|
package/lib/es6/metrics.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=e=>typeof e,
|
|
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};
|
package/lib/es6/metrics.js.gz
CHANGED
|
Binary file
|
package/lib/es6/persisters.d.ts
CHANGED
|
@@ -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(
|
|
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(
|
|
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());
|