tinybase 3.2.0-beta.0 → 3.2.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.js +1 -1
- package/lib/checkpoints.js.gz +0 -0
- package/lib/cjs/checkpoints.cjs +1 -1
- package/lib/cjs/checkpoints.cjs.gz +0 -0
- package/lib/cjs/indexes.cjs +1 -1
- package/lib/cjs/indexes.cjs.gz +0 -0
- package/lib/cjs/metrics.cjs +1 -1
- package/lib/cjs/metrics.cjs.gz +0 -0
- package/lib/cjs/persisters.cjs +1 -1
- package/lib/cjs/persisters.cjs.gz +0 -0
- package/lib/cjs/queries.cjs +1 -1
- package/lib/cjs/queries.cjs.gz +0 -0
- package/lib/cjs/relationships.cjs +1 -1
- package/lib/cjs/relationships.cjs.gz +0 -0
- package/lib/cjs/store.cjs +1 -1
- package/lib/cjs/store.cjs.gz +0 -0
- package/lib/cjs/tinybase.cjs +1 -1
- package/lib/cjs/tinybase.cjs.gz +0 -0
- package/lib/cjs/tools.cjs +1 -1
- package/lib/cjs/tools.cjs.gz +0 -0
- package/lib/cjs/ui-react.cjs +1 -1
- package/lib/cjs/ui-react.cjs.gz +0 -0
- package/lib/cjs-es6/checkpoints.cjs +1 -1
- package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
- package/lib/cjs-es6/indexes.cjs +1 -1
- package/lib/cjs-es6/indexes.cjs.gz +0 -0
- package/lib/cjs-es6/metrics.cjs +1 -1
- package/lib/cjs-es6/metrics.cjs.gz +0 -0
- package/lib/cjs-es6/persisters.cjs +1 -1
- package/lib/cjs-es6/persisters.cjs.gz +0 -0
- package/lib/cjs-es6/queries.cjs +1 -1
- package/lib/cjs-es6/queries.cjs.gz +0 -0
- package/lib/cjs-es6/relationships.cjs +1 -1
- package/lib/cjs-es6/relationships.cjs.gz +0 -0
- package/lib/cjs-es6/store.cjs +1 -1
- package/lib/cjs-es6/store.cjs.gz +0 -0
- package/lib/cjs-es6/tinybase.cjs +1 -1
- package/lib/cjs-es6/tinybase.cjs.gz +0 -0
- package/lib/cjs-es6/tools.cjs +1 -1
- package/lib/cjs-es6/tools.cjs.gz +0 -0
- package/lib/cjs-es6/ui-react.cjs +1 -1
- package/lib/cjs-es6/ui-react.cjs.gz +0 -0
- package/lib/debug/checkpoints.js +2 -2
- package/lib/debug/indexes.js +2 -2
- package/lib/debug/metrics.js +2 -2
- package/lib/debug/persisters.js +2 -2
- package/lib/debug/queries.js +1 -1
- package/lib/debug/relationships.js +2 -2
- package/lib/debug/store.js +36 -35
- package/lib/debug/tinybase.js +39 -38
- package/lib/debug/tools.js +13 -4
- package/lib/debug/ui-react.js +3 -2
- 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.js +1 -1
- package/lib/es6/persisters.js.gz +0 -0
- package/lib/es6/queries.js +1 -1
- package/lib/es6/queries.js.gz +0 -0
- package/lib/es6/relationships.js +1 -1
- package/lib/es6/relationships.js.gz +0 -0
- 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.js +1 -1
- package/lib/es6/tools.js.gz +0 -0
- 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.js +1 -1
- package/lib/persisters.js.gz +0 -0
- package/lib/queries.js +1 -1
- package/lib/queries.js.gz +0 -0
- package/lib/relationships.js +1 -1
- package/lib/relationships.js.gz +0 -0
- 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.js +1 -1
- package/lib/tools.js.gz +0 -0
- package/lib/types/store.d.ts +84 -21
- package/lib/types/ui-react.d.ts +11 -0
- package/lib/types/with-schemas/store.d.ts +91 -21
- package/lib/types/with-schemas/ui-react.d.ts +12 -0
- package/lib/ui-react.js +1 -1
- package/lib/ui-react.js.gz +0 -0
- 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.js +1 -1
- package/lib/umd/persisters.js.gz +0 -0
- package/lib/umd/queries.js +1 -1
- package/lib/umd/queries.js.gz +0 -0
- package/lib/umd/relationships.js +1 -1
- package/lib/umd/relationships.js.gz +0 -0
- 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.js +1 -1
- package/lib/umd/tools.js.gz +0 -0
- package/lib/umd/ui-react.js +1 -1
- package/lib/umd/ui-react.js.gz +0 -0
- 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.js +1 -1
- package/lib/umd-es6/persisters.js.gz +0 -0
- package/lib/umd-es6/queries.js +1 -1
- package/lib/umd-es6/queries.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.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.js +1 -1
- package/lib/umd-es6/tools.js.gz +0 -0
- package/lib/umd-es6/ui-react.js +1 -1
- package/lib/umd-es6/ui-react.js.gz +0 -0
- package/package.json +50 -26
- package/readme.md +14 -14
package/lib/debug/store.js
CHANGED
|
@@ -32,7 +32,6 @@ const arrayMap = (array, cb) => array.map(cb);
|
|
|
32
32
|
const arrayLength = (array) => array.length;
|
|
33
33
|
const arrayIsEmpty = (array) => arrayLength(array) == 0;
|
|
34
34
|
const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
|
|
35
|
-
const arrayFilter = (array, cb) => array.filter(cb);
|
|
36
35
|
const arraySlice = (array, start, end) => array.slice(start, end);
|
|
37
36
|
const arrayPush = (array, ...values) => array.push(...values);
|
|
38
37
|
const arrayShift = (array) => array.shift();
|
|
@@ -141,7 +140,7 @@ const getPoolFunctions = () => {
|
|
|
141
140
|
const pool = [];
|
|
142
141
|
let nextId = 0;
|
|
143
142
|
return [
|
|
144
|
-
() => arrayShift(pool) ?? EMPTY_STRING + nextId++,
|
|
143
|
+
(reuse) => (reuse ? arrayShift(pool) : null) ?? EMPTY_STRING + nextId++,
|
|
145
144
|
(id) => {
|
|
146
145
|
if (test(INTEGER, id) && arrayLength(pool) < 1e3) {
|
|
147
146
|
arrayPush(pool, id);
|
|
@@ -173,7 +172,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
173
172
|
extraArgsGetter = () => [],
|
|
174
173
|
) => {
|
|
175
174
|
thing ??= getThing();
|
|
176
|
-
const id = getId();
|
|
175
|
+
const id = getId(1);
|
|
177
176
|
mapSet(allListeners, id, [
|
|
178
177
|
listener,
|
|
179
178
|
idSetNode,
|
|
@@ -252,15 +251,9 @@ const setOrDelValue = (store, valueId, value) =>
|
|
|
252
251
|
|
|
253
252
|
const defaultSorter = (sortKey1, sortKey2) => (sortKey1 < sortKey2 ? -1 : 1);
|
|
254
253
|
|
|
255
|
-
const
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
(id2) => !objHas(toBeLikeObject, id2),
|
|
259
|
-
);
|
|
260
|
-
arrayForEach(objIds(toBeLikeObject), (id2) =>
|
|
261
|
-
setId(map, id2, toBeLikeObject[id2]),
|
|
262
|
-
);
|
|
263
|
-
arrayForEach(idsToDelete, (id2) => delId(map, id2));
|
|
254
|
+
const mapMatch = (map, obj, set, del = mapSet) => {
|
|
255
|
+
objMap(obj, (value, id2) => set(map, id2, value));
|
|
256
|
+
mapForEach(map, (id2) => (objHas(obj, id2) ? 0 : del(map, id2)));
|
|
264
257
|
return map;
|
|
265
258
|
};
|
|
266
259
|
const validate = (obj, validateChild, onInvalidObj) => {
|
|
@@ -312,6 +305,7 @@ const createStore = () => {
|
|
|
312
305
|
const valuesListeners = pairNewMap();
|
|
313
306
|
const valueIdsListeners = pairNewMap();
|
|
314
307
|
const valueListeners = pairNewMap();
|
|
308
|
+
const startTransactionListeners = mapNew();
|
|
315
309
|
const finishTransactionListeners = pairNewMap();
|
|
316
310
|
const [addListener, callListeners, delListenerImpl, callListenerImpl] =
|
|
317
311
|
getListenerFunctions(() => store);
|
|
@@ -433,13 +427,13 @@ const createStore = () => {
|
|
|
433
427
|
return values;
|
|
434
428
|
};
|
|
435
429
|
const setValidTablesSchema = (tablesSchema) =>
|
|
436
|
-
|
|
430
|
+
mapMatch(
|
|
437
431
|
tablesSchemaMap,
|
|
438
432
|
tablesSchema,
|
|
439
433
|
(_tablesSchema, tableId, tableSchema) => {
|
|
440
434
|
const rowDefaulted = mapNew();
|
|
441
435
|
const rowNonDefaulted = setNew();
|
|
442
|
-
|
|
436
|
+
mapMatch(
|
|
443
437
|
mapEnsure(tablesSchemaMap, tableId, mapNew),
|
|
444
438
|
tableSchema,
|
|
445
439
|
(tableSchemaMap, cellId, cellSchema) => {
|
|
@@ -459,7 +453,7 @@ const createStore = () => {
|
|
|
459
453
|
},
|
|
460
454
|
);
|
|
461
455
|
const setValidValuesSchema = (valuesSchema) =>
|
|
462
|
-
|
|
456
|
+
mapMatch(
|
|
463
457
|
valuesSchemaMap,
|
|
464
458
|
valuesSchema,
|
|
465
459
|
(_valuesSchema, valueId, valueSchema) => {
|
|
@@ -479,14 +473,14 @@ const createStore = () => {
|
|
|
479
473
|
const setOrDelTables = (tables) =>
|
|
480
474
|
objIsEmpty(tables) ? delTables() : setTables(tables);
|
|
481
475
|
const setValidTables = (tables) =>
|
|
482
|
-
|
|
476
|
+
mapMatch(
|
|
483
477
|
tablesMap,
|
|
484
478
|
tables,
|
|
485
479
|
(_tables, tableId, table) => setValidTable(tableId, table),
|
|
486
480
|
(_tables, tableId) => delValidTable(tableId),
|
|
487
481
|
);
|
|
488
482
|
const setValidTable = (tableId, table) =>
|
|
489
|
-
|
|
483
|
+
mapMatch(
|
|
490
484
|
mapEnsure(tablesMap, tableId, () => {
|
|
491
485
|
tableIdsChanged(tableId, 1);
|
|
492
486
|
return mapNew();
|
|
@@ -496,7 +490,7 @@ const createStore = () => {
|
|
|
496
490
|
(tableMap, rowId) => delValidRow(tableId, tableMap, rowId),
|
|
497
491
|
);
|
|
498
492
|
const setValidRow = (tableId, tableMap, rowId, row, forceDel) =>
|
|
499
|
-
|
|
493
|
+
mapMatch(
|
|
500
494
|
mapEnsure(tableMap, rowId, () => {
|
|
501
495
|
rowIdsChanged(tableId, rowId, 1);
|
|
502
496
|
return mapNew();
|
|
@@ -532,7 +526,7 @@ const createStore = () => {
|
|
|
532
526
|
const setOrDelValues = (values) =>
|
|
533
527
|
objIsEmpty(values) ? delValues() : setValues(values);
|
|
534
528
|
const setValidValues = (values) =>
|
|
535
|
-
|
|
529
|
+
mapMatch(
|
|
536
530
|
valuesMap,
|
|
537
531
|
values,
|
|
538
532
|
(_valuesMap, valueId, value) => setValidValue(valueId, value),
|
|
@@ -548,13 +542,13 @@ const createStore = () => {
|
|
|
548
542
|
mapSet(valuesMap, valueId, value);
|
|
549
543
|
}
|
|
550
544
|
};
|
|
551
|
-
const getNewRowId = (tableId) => {
|
|
545
|
+
const getNewRowId = (tableId, reuse) => {
|
|
552
546
|
const [getId] = mapEnsure(tablePoolFunctions, tableId, getPoolFunctions);
|
|
553
|
-
const rowId = getId();
|
|
547
|
+
const rowId = getId(reuse);
|
|
554
548
|
if (!collHas(mapGet(tablesMap, tableId), rowId)) {
|
|
555
549
|
return rowId;
|
|
556
550
|
}
|
|
557
|
-
return getNewRowId(tableId);
|
|
551
|
+
return getNewRowId(tableId, reuse);
|
|
558
552
|
};
|
|
559
553
|
const getOrCreateTable = (tableId) =>
|
|
560
554
|
mapGet(tablesMap, tableId) ?? setValidTable(tableId, {});
|
|
@@ -886,7 +880,7 @@ const createStore = () => {
|
|
|
886
880
|
tableId,
|
|
887
881
|
rowId,
|
|
888
882
|
);
|
|
889
|
-
const addRow = (tableId, row) =>
|
|
883
|
+
const addRow = (tableId, row, reuseRowIds = true) =>
|
|
890
884
|
transaction(() => {
|
|
891
885
|
let rowId = void 0;
|
|
892
886
|
if (validateRow(tableId, rowId, row)) {
|
|
@@ -894,7 +888,7 @@ const createStore = () => {
|
|
|
894
888
|
setValidRow(
|
|
895
889
|
tableId,
|
|
896
890
|
getOrCreateTable(tableId),
|
|
897
|
-
(rowId = getNewRowId(tableId)),
|
|
891
|
+
(rowId = getNewRowId(tableId, reuseRowIds ? 1 : 0)),
|
|
898
892
|
row,
|
|
899
893
|
);
|
|
900
894
|
}
|
|
@@ -1071,16 +1065,20 @@ const createStore = () => {
|
|
|
1071
1065
|
delValuesSchema();
|
|
1072
1066
|
});
|
|
1073
1067
|
const transaction = (actions, doRollback) => {
|
|
1074
|
-
if (transactions
|
|
1075
|
-
|
|
1068
|
+
if (transactions != -1) {
|
|
1069
|
+
startTransaction();
|
|
1070
|
+
const result = actions();
|
|
1071
|
+
finishTransaction(doRollback);
|
|
1072
|
+
return result;
|
|
1076
1073
|
}
|
|
1077
|
-
startTransaction();
|
|
1078
|
-
const result = actions();
|
|
1079
|
-
finishTransaction(doRollback);
|
|
1080
|
-
return result;
|
|
1081
1074
|
};
|
|
1082
1075
|
const startTransaction = () => {
|
|
1083
|
-
transactions
|
|
1076
|
+
if (transactions != -1) {
|
|
1077
|
+
transactions++;
|
|
1078
|
+
}
|
|
1079
|
+
if (transactions == 1) {
|
|
1080
|
+
callListeners(startTransactionListeners, void 0, false, false);
|
|
1081
|
+
}
|
|
1084
1082
|
return store;
|
|
1085
1083
|
};
|
|
1086
1084
|
const finishTransaction = (doRollback) => {
|
|
@@ -1098,7 +1096,6 @@ const createStore = () => {
|
|
|
1098
1096
|
if (valuesTouched) {
|
|
1099
1097
|
callKeyedValuesListenersForChanges(1);
|
|
1100
1098
|
}
|
|
1101
|
-
transactions = -1;
|
|
1102
1099
|
if (
|
|
1103
1100
|
doRollback?.(
|
|
1104
1101
|
mapToObj(
|
|
@@ -1125,7 +1122,6 @@ const createStore = () => {
|
|
|
1125
1122
|
mapToObj(invalidValues),
|
|
1126
1123
|
)
|
|
1127
1124
|
) {
|
|
1128
|
-
transactions = 1;
|
|
1129
1125
|
collForEach(changedCells, (table, tableId) =>
|
|
1130
1126
|
collForEach(table, (row, rowId) =>
|
|
1131
1127
|
collForEach(row, ([oldCell], cellId) =>
|
|
@@ -1136,7 +1132,6 @@ const createStore = () => {
|
|
|
1136
1132
|
collForEach(changedValues, ([oldValue], valueId) =>
|
|
1137
1133
|
setOrDelValue(store, valueId, oldValue),
|
|
1138
1134
|
);
|
|
1139
|
-
transactions = -1;
|
|
1140
1135
|
cellsTouched = valuesTouched = false;
|
|
1141
1136
|
}
|
|
1142
1137
|
callListeners(
|
|
@@ -1145,6 +1140,7 @@ const createStore = () => {
|
|
|
1145
1140
|
cellsTouched,
|
|
1146
1141
|
valuesTouched,
|
|
1147
1142
|
);
|
|
1143
|
+
transactions = -1;
|
|
1148
1144
|
callInvalidCellListeners(0);
|
|
1149
1145
|
if (cellsTouched) {
|
|
1150
1146
|
callTabularListenersForChanges(0);
|
|
@@ -1237,6 +1233,8 @@ const createStore = () => {
|
|
|
1237
1233
|
[getTableIds],
|
|
1238
1234
|
);
|
|
1239
1235
|
};
|
|
1236
|
+
const addStartTransactionListener = (listener) =>
|
|
1237
|
+
addListener(listener, startTransactionListeners);
|
|
1240
1238
|
const addWillFinishTransactionListener = (listener) =>
|
|
1241
1239
|
addListener(listener, finishTransactionListeners[0]);
|
|
1242
1240
|
const addDidFinishTransactionListener = (listener) =>
|
|
@@ -1263,7 +1261,9 @@ const createStore = () => {
|
|
|
1263
1261
|
valueIds: pairCollSize2(valueIdsListeners),
|
|
1264
1262
|
value: pairCollSize2(valueListeners),
|
|
1265
1263
|
invalidValue: pairCollSize2(invalidValueListeners),
|
|
1266
|
-
transaction:
|
|
1264
|
+
transaction:
|
|
1265
|
+
collSize2(startTransactionListeners) +
|
|
1266
|
+
pairCollSize2(finishTransactionListeners),
|
|
1267
1267
|
});
|
|
1268
1268
|
const store = {
|
|
1269
1269
|
getTables,
|
|
@@ -1321,6 +1321,7 @@ const createStore = () => {
|
|
|
1321
1321
|
forEachCell,
|
|
1322
1322
|
forEachValue,
|
|
1323
1323
|
addSortedRowIdsListener,
|
|
1324
|
+
addStartTransactionListener,
|
|
1324
1325
|
addWillFinishTransactionListener,
|
|
1325
1326
|
addDidFinishTransactionListener,
|
|
1326
1327
|
callListener,
|
package/lib/debug/tinybase.js
CHANGED
|
@@ -48,7 +48,6 @@ const arraySum = (array) => arrayReduce(array, (i, j) => i + j, 0);
|
|
|
48
48
|
const arrayLength = (array) => array.length;
|
|
49
49
|
const arrayIsEmpty = (array) => arrayLength(array) == 0;
|
|
50
50
|
const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
|
|
51
|
-
const arrayFilter = (array, cb) => array.filter(cb);
|
|
52
51
|
const arraySlice = (array, start, end) => array.slice(start, end);
|
|
53
52
|
const arrayClear = (array, to) => array.splice(0, to);
|
|
54
53
|
const arrayPush = (array, ...values) => array.push(...values);
|
|
@@ -335,7 +334,7 @@ const getPoolFunctions = () => {
|
|
|
335
334
|
const pool = [];
|
|
336
335
|
let nextId = 0;
|
|
337
336
|
return [
|
|
338
|
-
() => arrayShift(pool) ?? EMPTY_STRING + nextId++,
|
|
337
|
+
(reuse) => (reuse ? arrayShift(pool) : null) ?? EMPTY_STRING + nextId++,
|
|
339
338
|
(id) => {
|
|
340
339
|
if (test(INTEGER, id) && arrayLength(pool) < 1e3) {
|
|
341
340
|
arrayPush(pool, id);
|
|
@@ -367,7 +366,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
367
366
|
extraArgsGetter = () => [],
|
|
368
367
|
) => {
|
|
369
368
|
thing ??= getThing();
|
|
370
|
-
const id = getId();
|
|
369
|
+
const id = getId(1);
|
|
371
370
|
mapSet(allListeners, id, [
|
|
372
371
|
listener,
|
|
373
372
|
idSetNode,
|
|
@@ -1025,7 +1024,7 @@ const createCustomPersister = (
|
|
|
1025
1024
|
let loads = 0;
|
|
1026
1025
|
let saves = 0;
|
|
1027
1026
|
const persister = {
|
|
1028
|
-
load: async (initialTables, initialValues) => {
|
|
1027
|
+
load: async (initialTables = {}, initialValues = {}) => {
|
|
1029
1028
|
/* istanbul ignore else */
|
|
1030
1029
|
if (loadSave != 2) {
|
|
1031
1030
|
loadSave = 1;
|
|
@@ -1044,7 +1043,7 @@ const createCustomPersister = (
|
|
|
1044
1043
|
}
|
|
1045
1044
|
return persister;
|
|
1046
1045
|
},
|
|
1047
|
-
startAutoLoad: async (initialTables, initialValues) => {
|
|
1046
|
+
startAutoLoad: async (initialTables = {}, initialValues = {}) => {
|
|
1048
1047
|
persister.stopAutoLoad();
|
|
1049
1048
|
await persister.load(initialTables, initialValues);
|
|
1050
1049
|
startListeningToPersisted(persister.load);
|
|
@@ -1239,7 +1238,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
1239
1238
|
addPreStoreListener(
|
|
1240
1239
|
fromStore,
|
|
1241
1240
|
queryId,
|
|
1242
|
-
fromStore.
|
|
1241
|
+
fromStore.addStartTransactionListener(toStore.startTransaction),
|
|
1243
1242
|
fromStore.addDidFinishTransactionListener(() =>
|
|
1244
1243
|
toStore.finishTransaction(),
|
|
1245
1244
|
),
|
|
@@ -1820,15 +1819,9 @@ const pairNew = (value) => [value, value];
|
|
|
1820
1819
|
const pairCollSize2 = (pair, func = collSize2) => func(pair[0]) + func(pair[1]);
|
|
1821
1820
|
const pairNewMap = () => [mapNew(), mapNew()];
|
|
1822
1821
|
|
|
1823
|
-
const
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
(id2) => !objHas(toBeLikeObject, id2),
|
|
1827
|
-
);
|
|
1828
|
-
arrayForEach(objIds(toBeLikeObject), (id2) =>
|
|
1829
|
-
setId(map, id2, toBeLikeObject[id2]),
|
|
1830
|
-
);
|
|
1831
|
-
arrayForEach(idsToDelete, (id2) => delId(map, id2));
|
|
1822
|
+
const mapMatch = (map, obj, set, del = mapSet) => {
|
|
1823
|
+
objMap(obj, (value, id2) => set(map, id2, value));
|
|
1824
|
+
mapForEach(map, (id2) => (objHas(obj, id2) ? 0 : del(map, id2)));
|
|
1832
1825
|
return map;
|
|
1833
1826
|
};
|
|
1834
1827
|
const validate = (obj, validateChild, onInvalidObj) => {
|
|
@@ -1880,6 +1873,7 @@ const createStore = () => {
|
|
|
1880
1873
|
const valuesListeners = pairNewMap();
|
|
1881
1874
|
const valueIdsListeners = pairNewMap();
|
|
1882
1875
|
const valueListeners = pairNewMap();
|
|
1876
|
+
const startTransactionListeners = mapNew();
|
|
1883
1877
|
const finishTransactionListeners = pairNewMap();
|
|
1884
1878
|
const [addListener, callListeners, delListenerImpl, callListenerImpl] =
|
|
1885
1879
|
getListenerFunctions(() => store);
|
|
@@ -2001,13 +1995,13 @@ const createStore = () => {
|
|
|
2001
1995
|
return values;
|
|
2002
1996
|
};
|
|
2003
1997
|
const setValidTablesSchema = (tablesSchema) =>
|
|
2004
|
-
|
|
1998
|
+
mapMatch(
|
|
2005
1999
|
tablesSchemaMap,
|
|
2006
2000
|
tablesSchema,
|
|
2007
2001
|
(_tablesSchema, tableId, tableSchema) => {
|
|
2008
2002
|
const rowDefaulted = mapNew();
|
|
2009
2003
|
const rowNonDefaulted = setNew();
|
|
2010
|
-
|
|
2004
|
+
mapMatch(
|
|
2011
2005
|
mapEnsure(tablesSchemaMap, tableId, mapNew),
|
|
2012
2006
|
tableSchema,
|
|
2013
2007
|
(tableSchemaMap, cellId, cellSchema) => {
|
|
@@ -2027,7 +2021,7 @@ const createStore = () => {
|
|
|
2027
2021
|
},
|
|
2028
2022
|
);
|
|
2029
2023
|
const setValidValuesSchema = (valuesSchema) =>
|
|
2030
|
-
|
|
2024
|
+
mapMatch(
|
|
2031
2025
|
valuesSchemaMap,
|
|
2032
2026
|
valuesSchema,
|
|
2033
2027
|
(_valuesSchema, valueId, valueSchema) => {
|
|
@@ -2047,14 +2041,14 @@ const createStore = () => {
|
|
|
2047
2041
|
const setOrDelTables = (tables) =>
|
|
2048
2042
|
objIsEmpty(tables) ? delTables() : setTables(tables);
|
|
2049
2043
|
const setValidTables = (tables) =>
|
|
2050
|
-
|
|
2044
|
+
mapMatch(
|
|
2051
2045
|
tablesMap,
|
|
2052
2046
|
tables,
|
|
2053
2047
|
(_tables, tableId, table) => setValidTable(tableId, table),
|
|
2054
2048
|
(_tables, tableId) => delValidTable(tableId),
|
|
2055
2049
|
);
|
|
2056
2050
|
const setValidTable = (tableId, table) =>
|
|
2057
|
-
|
|
2051
|
+
mapMatch(
|
|
2058
2052
|
mapEnsure(tablesMap, tableId, () => {
|
|
2059
2053
|
tableIdsChanged(tableId, 1);
|
|
2060
2054
|
return mapNew();
|
|
@@ -2064,7 +2058,7 @@ const createStore = () => {
|
|
|
2064
2058
|
(tableMap, rowId) => delValidRow(tableId, tableMap, rowId),
|
|
2065
2059
|
);
|
|
2066
2060
|
const setValidRow = (tableId, tableMap, rowId, row, forceDel) =>
|
|
2067
|
-
|
|
2061
|
+
mapMatch(
|
|
2068
2062
|
mapEnsure(tableMap, rowId, () => {
|
|
2069
2063
|
rowIdsChanged(tableId, rowId, 1);
|
|
2070
2064
|
return mapNew();
|
|
@@ -2100,7 +2094,7 @@ const createStore = () => {
|
|
|
2100
2094
|
const setOrDelValues = (values) =>
|
|
2101
2095
|
objIsEmpty(values) ? delValues() : setValues(values);
|
|
2102
2096
|
const setValidValues = (values) =>
|
|
2103
|
-
|
|
2097
|
+
mapMatch(
|
|
2104
2098
|
valuesMap,
|
|
2105
2099
|
values,
|
|
2106
2100
|
(_valuesMap, valueId, value) => setValidValue(valueId, value),
|
|
@@ -2116,13 +2110,13 @@ const createStore = () => {
|
|
|
2116
2110
|
mapSet(valuesMap, valueId, value);
|
|
2117
2111
|
}
|
|
2118
2112
|
};
|
|
2119
|
-
const getNewRowId = (tableId) => {
|
|
2113
|
+
const getNewRowId = (tableId, reuse) => {
|
|
2120
2114
|
const [getId] = mapEnsure(tablePoolFunctions, tableId, getPoolFunctions);
|
|
2121
|
-
const rowId = getId();
|
|
2115
|
+
const rowId = getId(reuse);
|
|
2122
2116
|
if (!collHas(mapGet(tablesMap, tableId), rowId)) {
|
|
2123
2117
|
return rowId;
|
|
2124
2118
|
}
|
|
2125
|
-
return getNewRowId(tableId);
|
|
2119
|
+
return getNewRowId(tableId, reuse);
|
|
2126
2120
|
};
|
|
2127
2121
|
const getOrCreateTable = (tableId) =>
|
|
2128
2122
|
mapGet(tablesMap, tableId) ?? setValidTable(tableId, {});
|
|
@@ -2454,7 +2448,7 @@ const createStore = () => {
|
|
|
2454
2448
|
tableId,
|
|
2455
2449
|
rowId,
|
|
2456
2450
|
);
|
|
2457
|
-
const addRow = (tableId, row) =>
|
|
2451
|
+
const addRow = (tableId, row, reuseRowIds = true) =>
|
|
2458
2452
|
transaction(() => {
|
|
2459
2453
|
let rowId = void 0;
|
|
2460
2454
|
if (validateRow(tableId, rowId, row)) {
|
|
@@ -2462,7 +2456,7 @@ const createStore = () => {
|
|
|
2462
2456
|
setValidRow(
|
|
2463
2457
|
tableId,
|
|
2464
2458
|
getOrCreateTable(tableId),
|
|
2465
|
-
(rowId = getNewRowId(tableId)),
|
|
2459
|
+
(rowId = getNewRowId(tableId, reuseRowIds ? 1 : 0)),
|
|
2466
2460
|
row,
|
|
2467
2461
|
);
|
|
2468
2462
|
}
|
|
@@ -2639,16 +2633,20 @@ const createStore = () => {
|
|
|
2639
2633
|
delValuesSchema();
|
|
2640
2634
|
});
|
|
2641
2635
|
const transaction = (actions, doRollback) => {
|
|
2642
|
-
if (transactions
|
|
2643
|
-
|
|
2636
|
+
if (transactions != -1) {
|
|
2637
|
+
startTransaction();
|
|
2638
|
+
const result = actions();
|
|
2639
|
+
finishTransaction(doRollback);
|
|
2640
|
+
return result;
|
|
2644
2641
|
}
|
|
2645
|
-
startTransaction();
|
|
2646
|
-
const result = actions();
|
|
2647
|
-
finishTransaction(doRollback);
|
|
2648
|
-
return result;
|
|
2649
2642
|
};
|
|
2650
2643
|
const startTransaction = () => {
|
|
2651
|
-
transactions
|
|
2644
|
+
if (transactions != -1) {
|
|
2645
|
+
transactions++;
|
|
2646
|
+
}
|
|
2647
|
+
if (transactions == 1) {
|
|
2648
|
+
callListeners(startTransactionListeners, void 0, false, false);
|
|
2649
|
+
}
|
|
2652
2650
|
return store;
|
|
2653
2651
|
};
|
|
2654
2652
|
const finishTransaction = (doRollback) => {
|
|
@@ -2666,7 +2664,6 @@ const createStore = () => {
|
|
|
2666
2664
|
if (valuesTouched) {
|
|
2667
2665
|
callKeyedValuesListenersForChanges(1);
|
|
2668
2666
|
}
|
|
2669
|
-
transactions = -1;
|
|
2670
2667
|
if (
|
|
2671
2668
|
doRollback?.(
|
|
2672
2669
|
mapToObj(
|
|
@@ -2693,7 +2690,6 @@ const createStore = () => {
|
|
|
2693
2690
|
mapToObj(invalidValues),
|
|
2694
2691
|
)
|
|
2695
2692
|
) {
|
|
2696
|
-
transactions = 1;
|
|
2697
2693
|
collForEach(changedCells, (table, tableId) =>
|
|
2698
2694
|
collForEach(table, (row, rowId) =>
|
|
2699
2695
|
collForEach(row, ([oldCell], cellId) =>
|
|
@@ -2704,7 +2700,6 @@ const createStore = () => {
|
|
|
2704
2700
|
collForEach(changedValues, ([oldValue], valueId) =>
|
|
2705
2701
|
setOrDelValue(store, valueId, oldValue),
|
|
2706
2702
|
);
|
|
2707
|
-
transactions = -1;
|
|
2708
2703
|
cellsTouched = valuesTouched = false;
|
|
2709
2704
|
}
|
|
2710
2705
|
callListeners(
|
|
@@ -2713,6 +2708,7 @@ const createStore = () => {
|
|
|
2713
2708
|
cellsTouched,
|
|
2714
2709
|
valuesTouched,
|
|
2715
2710
|
);
|
|
2711
|
+
transactions = -1;
|
|
2716
2712
|
callInvalidCellListeners(0);
|
|
2717
2713
|
if (cellsTouched) {
|
|
2718
2714
|
callTabularListenersForChanges(0);
|
|
@@ -2805,6 +2801,8 @@ const createStore = () => {
|
|
|
2805
2801
|
[getTableIds],
|
|
2806
2802
|
);
|
|
2807
2803
|
};
|
|
2804
|
+
const addStartTransactionListener = (listener) =>
|
|
2805
|
+
addListener(listener, startTransactionListeners);
|
|
2808
2806
|
const addWillFinishTransactionListener = (listener) =>
|
|
2809
2807
|
addListener(listener, finishTransactionListeners[0]);
|
|
2810
2808
|
const addDidFinishTransactionListener = (listener) =>
|
|
@@ -2831,7 +2829,9 @@ const createStore = () => {
|
|
|
2831
2829
|
valueIds: pairCollSize2(valueIdsListeners),
|
|
2832
2830
|
value: pairCollSize2(valueListeners),
|
|
2833
2831
|
invalidValue: pairCollSize2(invalidValueListeners),
|
|
2834
|
-
transaction:
|
|
2832
|
+
transaction:
|
|
2833
|
+
collSize2(startTransactionListeners) +
|
|
2834
|
+
pairCollSize2(finishTransactionListeners),
|
|
2835
2835
|
});
|
|
2836
2836
|
const store = {
|
|
2837
2837
|
getTables,
|
|
@@ -2889,6 +2889,7 @@ const createStore = () => {
|
|
|
2889
2889
|
forEachCell,
|
|
2890
2890
|
forEachValue,
|
|
2891
2891
|
addSortedRowIdsListener,
|
|
2892
|
+
addStartTransactionListener,
|
|
2892
2893
|
addWillFinishTransactionListener,
|
|
2893
2894
|
addDidFinishTransactionListener,
|
|
2894
2895
|
callListener,
|
package/lib/debug/tools.js
CHANGED
|
@@ -1101,8 +1101,8 @@ const getStoreCoreApi = (tablesSchema, valuesSchema, module) => {
|
|
|
1101
1101
|
ROW,
|
|
1102
1102
|
ID + OR_UNDEFINED,
|
|
1103
1103
|
'Add a new Row to ' + getTableDoc(tableId),
|
|
1104
|
-
'row: ' + rowWhenSetType2,
|
|
1105
|
-
TABLE_ID + ', row',
|
|
1104
|
+
'row: ' + rowWhenSetType2 + ', reuseIds?: boolean',
|
|
1105
|
+
TABLE_ID + ', row, reuseIds',
|
|
1106
1106
|
);
|
|
1107
1107
|
addProxyMethod(
|
|
1108
1108
|
0,
|
|
@@ -1465,6 +1465,14 @@ const getStoreCoreApi = (tablesSchema, valuesSchema, module) => {
|
|
|
1465
1465
|
storeInstance,
|
|
1466
1466
|
storeType,
|
|
1467
1467
|
);
|
|
1468
|
+
addProxyListener(
|
|
1469
|
+
'Start' + TRANSACTION,
|
|
1470
|
+
transactionListenerType,
|
|
1471
|
+
REGISTERS_A_LISTENER + ' just before the start of the ' + TRANSACTION_,
|
|
1472
|
+
EMPTY_STRING,
|
|
1473
|
+
EMPTY_STRING,
|
|
1474
|
+
0,
|
|
1475
|
+
);
|
|
1468
1476
|
addProxyListener(
|
|
1469
1477
|
'WillFinish' + TRANSACTION,
|
|
1470
1478
|
transactionListenerType,
|
|
@@ -2139,8 +2147,9 @@ const getStoreUiReactApi = (
|
|
|
2139
2147
|
'store: Store',
|
|
2140
2148
|
'row: ' + rowWhenSetType + ')' + RETURNS_VOID,
|
|
2141
2149
|
'then' + DEPS_SUFFIX,
|
|
2142
|
-
)
|
|
2143
|
-
|
|
2150
|
+
) +
|
|
2151
|
+
', reuseRowIds?: boolean',
|
|
2152
|
+
THEN_AND_THEN_DEPS_IN_CALL + ', reuseRowIds',
|
|
2144
2153
|
);
|
|
2145
2154
|
addProxyHook(
|
|
2146
2155
|
SET + tableName + PARTIAL + ROW + CALLBACK,
|
package/lib/debug/ui-react.js
CHANGED
|
@@ -272,17 +272,18 @@ const useAddRowCallback = (
|
|
|
272
272
|
storeOrStoreId,
|
|
273
273
|
then = getUndefined,
|
|
274
274
|
thenDeps = [],
|
|
275
|
+
reuseRowIds = true,
|
|
275
276
|
) => {
|
|
276
277
|
const store = useStoreOrStoreId(storeOrStoreId);
|
|
277
278
|
return useCallback(
|
|
278
279
|
(parameter) =>
|
|
279
280
|
ifNotUndefined(store, (store2) =>
|
|
280
281
|
ifNotUndefined(getRow(parameter, store2), (row) =>
|
|
281
|
-
then(store2.addRow(tableId, row), store2, row),
|
|
282
|
+
then(store2.addRow(tableId, row, reuseRowIds), store2, row),
|
|
282
283
|
),
|
|
283
284
|
),
|
|
284
285
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
285
|
-
[store, tableId, ...getRowDeps, ...thenDeps],
|
|
286
|
+
[store, tableId, ...getRowDeps, ...thenDeps, reuseRowIds],
|
|
286
287
|
);
|
|
287
288
|
};
|
|
288
289
|
const useSetPartialRowCallback = (
|
package/lib/es6/checkpoints.js
CHANGED
|
@@ -1 +1 @@
|
|
|
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[
|
|
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[l=>{var t;return null!=(t=l?s(e):null)?t:""+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(1);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=
|
|
1
|
+
const e=e=>typeof e,n="",l=e(n),t=e=>n+e,r=(e,n)=>e.every(n),s=(e,n)=>r(e,((l,t)=>0==t||n(e[t-1],l)<=0)),o=(e,n)=>e.sort(n),u=(e,n)=>e.forEach(n),d=e=>e.length,i=(e,...n)=>e.push(...n),a=e=>null==e,c=(e,n,l)=>a(e)?null==l?void 0:l():n(e),v=e=>Array.isArray(e),h=(e,n)=>{var l;return null!=(l=null==e?void 0:e.has(n))&&l},f=e=>a(e)||0==(e=>e.size)(e),I=e=>{var n;return[...null!=(n=null==e?void 0:e.values())?n:[]]},g=e=>e.clear(),S=(e,n)=>null==e?void 0:e.forEach(n),w=(e,n)=>null==e?void 0:e.delete(n),L=e=>new Map(e),p=e=>{var n;return[...null!=(n=null==e?void 0:e.keys())?n:[]]},x=(e,n)=>null==e?void 0:e.get(n),y=(e,n)=>S(e,((e,l)=>n(l,e))),E=(e,n,l)=>a(l)?(w(e,n),e):null==e?void 0:e.set(n,l),R=(e,n,l)=>(h(e,n)||E(e,n,l()),x(e,n)),b=(e,n,l,t,r=0)=>c((l?R:x)(e,n[r],r>d(n)-2?l:L),(s=>{if(r>d(n)-2)return(null==t?void 0:t(s))&&E(e,n[r]),s;const o=b(s,n,l,t,r+1);return f(s)&&E(e,n[r]),o})),T=e=>new Set(v(e)||a(e)?e:[e]),k=(e,n)=>null==e?void 0:e.add(n),z=(t,r)=>e(t)==l?e=>e(t):null!=t?t:()=>null!=r?r:n,A=(e,n)=>e<n?-1:1,C=/^\d+$/,D=Object.freeze,M=(e=>{const l=new WeakMap;return e=>(l.has(e)||l.set(e,(e=>{const l=L(),M=L(),[j,m,O,W,$,q,B,,F,G,H]=((e,n,l)=>{const t=e.hasRow,s=L(),o=L(),i=L(),b=L(),z=L(),A=(n,l,...t)=>{const r=R(z,n,T);return u(t,(n=>k(r,n)&&l&&e.callListener(n))),t},C=(n,...l)=>c(x(z,n),(t=>{u(0==d(l)?I(t):l,(n=>{e.delListener(n),w(t,n)})),f(t)&&E(z,n)})),D=(e,l)=>{E(s,e,l),h(o,e)||(E(o,e,n()),E(i,e,L()),E(b,e,L()))},M=e=>{E(s,e),E(o,e),E(i,e),E(b,e),C(e)};return[()=>e,()=>p(s),e=>y(o,e),e=>h(o,e),e=>x(s,e),e=>x(o,e),(e,n)=>E(o,e,n),D,(n,s,o,c,f)=>{D(n,s);const I=L(),w=L(),p=x(i,n),R=x(b,n),T=n=>{const o=l=>e.getCell(s,n,l),u=x(p,n),i=t(s,n)?l(c(o,n)):void 0;var h,g;if(u===i||v(u)&&v(i)&&(g=i,d(h=u)===d(g)&&r(h,((e,n)=>g[n]===e)))||E(I,n,[u,i]),!a(f)){const e=x(R,n),l=t(s,n)?f(o,n):void 0;e!=l&&E(w,n,l)}},k=e=>{o((()=>{S(I,(([,e],n)=>E(p,n,e))),S(w,((e,n)=>E(R,n,e)))}),I,w,p,R,e),g(I),g(w)};y(p,T),e.hasTable(s)&&u(e.getRowIds(s),(e=>{h(p,e)||T(e)})),k(!0),C(n),A(n,0,e.addRowListener(s,null,((e,n,l)=>T(l))),e.addTableListener(s,(()=>k())))},M,()=>y(z,M),A,C]})(e,L,(e=>{return a(e)?n:v(e)?(l=t,e.map(l)):t(e);var l})),[J,K,N]=(e=>{let l;const[t,r]=(()=>{const e=[];let l=0;return[t=>{var r;return null!=(r=t?e.shift():null)?r:n+l++},n=>{C.test(n)&&d(e)<1e3&&i(e,n)}]})(),s=L();return[(e,r,o,u=[],d=(()=>[]))=>{null!=l||(l=Q);const i=t(1);return E(s,i,[e,r,o,u,d]),k(b(r,null!=o?o:[n],T),i),i},(e,t,...r)=>u(((e,l=[n])=>{const t=[],r=(e,n)=>n==d(l)?i(t,e):null===l[n]?S(e,(e=>r(e,n+1))):u([l[n],null],(l=>r(x(e,l),n+1)));return r(e,0),t})(e,t),(e=>S(e,(e=>x(s,e)[0](l,...null!=t?t:[],...r))))),e=>c(x(s,e),(([,l,t])=>(b(l,null!=t?t:[n],void 0,(n=>(w(n,e),f(n)?1:0))),E(s,e),r(e),t))),e=>c(x(s,e),(([e,,n=[],t,r])=>{const s=(...o)=>{var i,c;const v=d(o);v==d(n)?e(l,...o,...r(o)):a(n[v])?u(null!=(c=null==(i=t[v])?void 0:i.call(t,...o))?c:[],(e=>s(...o,e))):s(...o,n[v])};s()}))]})(),P=(n,l,t)=>{const r=$(n);S(t,((n,t)=>l(t,(l=>S(n,(n=>l(n,(l=>e.forEachCell(r,n,l)))))))))},Q={setIndexDefinition:(e,n,t,r,u,d=A)=>{const i=a(u)?void 0:([e],[n])=>u(e,n);return F(e,n,((n,t,u,v,I,g)=>{let p=0;const R=T(),b=T(),z=q(e);if(S(t,(([e,n],l)=>{const t=T(e),s=T(n);S(t,(e=>w(s,e)?w(t,e):0)),S(t,(e=>{k(R,e),c(x(z,e),(n=>{w(n,l),f(n)&&(E(z,e),p=1)}))})),S(s,(e=>{k(R,e),h(z,e)||(E(z,e,T()),p=1),k(x(z,e),l),a(r)||k(b,e)}))})),n(),f(I)||(g?y(z,(e=>k(b,e))):y(u,(e=>c(x(v,e),(e=>k(b,e))))),S(b,(e=>{const n=(n,l)=>d(x(I,n),x(I,l),e),l=[...x(z,e)];s(l,n)||(E(z,e,T(o(l,n))),k(R,e))}))),(p||g)&&!a(i)){const n=[...z];s(n,i)||(B(e,L(o(n,i))),p=1)}p&&K(l,[e]),S(R,(n=>K(M,[e,n])))}),z(t),c(r,z)),Q},delIndexDefinition:e=>(G(e),Q),getStore:j,getIndexIds:m,forEachIndex:e=>O(((n,l)=>e(n,(e=>P(n,e,l))))),forEachSlice:(e,n)=>P(e,n,q(e)),hasIndex:W,hasSlice:(e,n)=>h(q(e),n),getTableId:$,getSliceIds:e=>p(q(e)),getSliceRowIds:(e,n)=>I(x(q(e),n)),addSliceIdsListener:(e,n)=>J(n,l,[e]),addSliceRowIdsListener:(e,n,l)=>J(l,M,[e,n]),delListener:e=>(N(e),Q),destroy:H,getListenerStats:()=>({})};return D(Q)})(e)),l.get(e))})();export{M 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,n=
|
|
1
|
+
const e=e=>typeof e,n="",t=e(n),l=e(e),r=(e,n)=>e.forEach(n),i=e=>u(e,((e,n)=>e+n),0),o=e=>e.length,u=(e,n,t)=>e.reduce(n,t),s=(e,...n)=>e.push(...n),d=Math.max,a=Math.min,v=isFinite,c=e=>null==e,h=(e,n,t)=>c(e)?null==t?void 0:t():n(e),f=e=>Array.isArray(e),g=()=>{},M=e=>e.size,L=(e,n)=>{var t;return null!=(t=null==e?void 0:e.has(n))&&t},m=e=>c(e)||0==M(e),w=e=>{var n;return[...null!=(n=null==e?void 0:e.values())?n:[]]},y=e=>e.clear(),p=(e,n)=>null==e?void 0:e.forEach(n),b=(e,n)=>null==e?void 0:e.delete(n),x=e=>new Map(e),E=(e,n)=>null==e?void 0:e.get(n),I=(e,n)=>p(e,((e,t)=>n(t,e))),R=(e,n,t)=>c(t)?(b(e,n),e):null==e?void 0:e.set(n,t),S=(e,n,t)=>(L(e,n)||R(e,n,t()),E(e,n)),T=(e,n,t,l,r=0)=>h((t?S:E)(e,n[r],r>o(n)-2?t:x),(i=>{if(r>o(n)-2)return(null==l?void 0:l(i))&&R(e,n[r]),i;const u=T(i,n,t,l,r+1);return m(i)&&R(e,n[r]),u})),k=x([["avg",[(e,n)=>i(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=>d(...e),(e,n)=>d(n,e),(e,n)=>n==e?void 0:e,(e,n,t)=>t==e?void 0:d(n,e)]],["min",[e=>a(...e),(e,n)=>a(n,e),(e,n)=>n==e?void 0:e,(e,n,t)=>t==e?void 0:a(n,e)]],["sum",[e=>i(e),(e,n)=>e+n,(e,n)=>e-n,(e,n,t)=>e-t+n]]]),z=e=>new Set(f(e)||c(e)?e:[e]),A=(e,n)=>null==e?void 0:e.add(n),D=/^\d+$/,N=Object.freeze,j=(i=>{const u=new WeakMap;return i=>(u.has(i)||u.set(i,(i=>{const u=x(),[d,a,j,C,F,O,W,,$,q,B]=((e,t,l)=>{const i=e.hasRow,u=x(),s=x(),d=x(),a=x(),v=x(),g=(n,t,...l)=>{const i=S(v,n,z);return r(l,(n=>A(i,n)&&t&&e.callListener(n))),l},M=(n,...t)=>h(E(v,n),(l=>{r(0==o(t)?w(l):t,(n=>{e.delListener(n),b(l,n)})),m(l)&&R(v,n)})),T=(e,n)=>{R(u,e,n),L(s,e)||(R(s,e,t()),R(d,e,x()),R(a,e,x()))},k=e=>{R(u,e),R(s,e),R(d,e),R(a,e),M(e)};return[()=>e,()=>{return[...null!=(n=null==(e=u)?void 0:e.keys())?n:[]];var e,n},e=>I(s,e),e=>L(s,e),e=>E(u,e),e=>E(s,e),(e,n)=>R(s,e,n),T,(t,l,u,s,v)=>{T(t,l);const h=x(),m=x(),w=E(d,t),b=E(a,t),S=t=>{const r=n=>e.getCell(l,t,n),u=E(w,t),d=i(l,t)?(a=s(r,t),isNaN(a)||c(a)||!0===a||!1===a||a===n?void 0:1*a):void 0;var a,g,M,L;if(u===d||f(u)&&f(d)&&(M=d,o(g=u)===o(M)&&(L=(e,n)=>M[n]===e,g.every(L)))||R(h,t,[u,d]),!c(v)){const e=E(b,t),n=i(l,t)?v(r,t):void 0;e!=n&&R(m,t,n)}},k=e=>{u((()=>{p(h,(([,e],n)=>R(w,n,e))),p(m,((e,n)=>R(b,n,e)))}),h,m,w,b,e),y(h),y(m)};I(w,S),e.hasTable(l)&&r(e.getRowIds(l),(e=>{L(w,e)||S(e)})),k(!0),M(t),g(t,0,e.addRowListener(l,null,((e,n,t)=>S(t))),e.addTableListener(l,(()=>k())))},k,()=>I(v,k),g,M]})(i,g),[G,H,J]=(e=>{let t;const[l,i]=(()=>{const e=[];let t=0;return[l=>{var r;return null!=(r=l?e.shift():null)?r:n+t++},n=>{D.test(n)&&o(e)<1e3&&s(e,n)}]})(),u=x();return[(e,r,i,o=[],s=(()=>[]))=>{null!=t||(t=K);const d=l(1);return R(u,d,[e,r,i,o,s]),A(T(r,null!=i?i:[n],z),d),d},(e,l,...i)=>r(((e,t=[n])=>{const l=[],i=(e,n)=>n==o(t)?s(l,e):null===t[n]?p(e,(e=>i(e,n+1))):r([t[n],null],(t=>i(E(e,t),n+1)));return i(e,0),l})(e,l),(e=>p(e,(e=>E(u,e)[0](t,...null!=l?l:[],...i))))),e=>h(E(u,e),(([,t,l])=>(T(t,null!=l?l:[n],void 0,(n=>(b(n,e),m(n)?1:0))),R(u,e),i(e),l))),e=>h(E(u,e),(([e,,n=[],l,i])=>{const u=(...s)=>{var d,a;const v=o(s);v==o(n)?e(t,...s,...i(s)):c(n[v])?r(null!=(a=null==(d=l[v])?void 0:d.call(l,...s))?a:[],(e=>u(...s,e))):u(...s,n[v])};u()}))]})(),K={setMetricDefinition:(n,r,i,o,s,d,a)=>{var h;const f=e(i)==l?[i,s,d,a]:null!=(h=E(k,i))?h:E(k,"sum");return $(n,r,((e,t,l,r,i,o)=>{const s=O(n),d=M(r);o||(o=c(s)),e();let a=((e,n,t,l,r,i=!1)=>{if(m(t))return;const[o,u,s,d]=r;return i||(i=c(e)),p(l,(([t,l])=>{i||(e=c(t)?null==u?void 0:u(e,l,n++):c(l)?null==s?void 0:s(e,t,n--):null==d?void 0:d(e,l,t,n),i||(i=c(e)))})),i?o(w(t),M(t)):e})(s,d,r,t,f,o);v(a)||(a=void 0),a!=s&&(W(n,a),H(u,[n],a,s))}),(1,e(g=o)==t?e=>e(g):null!=g?g:()=>1)),K;var g},delMetricDefinition:e=>(q(e),K),getStore:d,getMetricIds:a,forEachMetric:j,hasMetric:C,getTableId:F,getMetric:O,addMetricListener:(e,n)=>G(n,u,[e]),delListener:e=>(J(e),K),destroy:B,getListenerStats:()=>({})};return N(K)})(i)),u.get(i))})();export{j as createMetrics};
|
package/lib/es6/metrics.js.gz
CHANGED
|
Binary file
|