tinybase 1.1.0-beta.0 → 1.1.0-beta.1
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/lib/debug/store.js +173 -178
- package/lib/debug/tinybase.js +173 -178
- 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/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/package.json +6 -6
- package/readme.md +1 -1
package/lib/debug/store.js
CHANGED
|
@@ -188,8 +188,9 @@ const getCellType = (cell) => {
|
|
|
188
188
|
? type
|
|
189
189
|
: void 0;
|
|
190
190
|
};
|
|
191
|
-
const validate = (obj, validateChild) => {
|
|
192
|
-
if (isUndefined(obj) || !isObject(obj) || objFrozen(obj)) {
|
|
191
|
+
const validate = (obj, validateChild, onInvalidObj) => {
|
|
192
|
+
if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
|
|
193
|
+
onInvalidObj?.();
|
|
193
194
|
return false;
|
|
194
195
|
}
|
|
195
196
|
objForEach(obj, (child, id) => {
|
|
@@ -241,10 +242,15 @@ const createStore = () => {
|
|
|
241
242
|
return true;
|
|
242
243
|
}),
|
|
243
244
|
);
|
|
244
|
-
const validateTables = (tables) =>
|
|
245
|
+
const validateTables = (tables) =>
|
|
246
|
+
validate(tables, validateTable, cellInvalid);
|
|
245
247
|
const validateTable = (table, tableId) =>
|
|
246
|
-
(!hasSchema || collHas(schemaMap, tableId)) &&
|
|
247
|
-
validate(
|
|
248
|
+
(!hasSchema || collHas(schemaMap, tableId) || cellInvalid(tableId)) &&
|
|
249
|
+
validate(
|
|
250
|
+
table,
|
|
251
|
+
(row, rowId) => validateRow(tableId, rowId, row),
|
|
252
|
+
() => cellInvalid(tableId),
|
|
253
|
+
);
|
|
248
254
|
const validateRow = (tableId, rowId, row, skipDefaults) =>
|
|
249
255
|
validate(
|
|
250
256
|
skipDefaults ? row : addDefaultsToRow(row, tableId),
|
|
@@ -257,6 +263,7 @@ const createStore = () => {
|
|
|
257
263
|
},
|
|
258
264
|
() => false,
|
|
259
265
|
),
|
|
266
|
+
() => cellInvalid(tableId, rowId),
|
|
260
267
|
);
|
|
261
268
|
const getValidatedCell = (tableId, rowId, cellId, cell) =>
|
|
262
269
|
hasSchema
|
|
@@ -266,6 +273,7 @@ const createStore = () => {
|
|
|
266
273
|
getCellType(cell) != cellSchema[TYPE]
|
|
267
274
|
? cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
|
|
268
275
|
: cell,
|
|
276
|
+
() => cellInvalid(tableId, rowId, cellId, cell),
|
|
269
277
|
)
|
|
270
278
|
: isUndefined(getCellType(cell))
|
|
271
279
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
@@ -341,10 +349,6 @@ const createStore = () => {
|
|
|
341
349
|
mapSet(rowMap, cellId, newCell);
|
|
342
350
|
}
|
|
343
351
|
};
|
|
344
|
-
const setValidRowTransaction = (tableId, rowId, row) =>
|
|
345
|
-
transaction(() =>
|
|
346
|
-
setValidRow(tableId, getOrCreateTable(tableId), rowId, row),
|
|
347
|
-
);
|
|
348
352
|
const setCellIntoDefaultRow = (tableId, tableMap, rowId, cellId, validCell) =>
|
|
349
353
|
ifNotUndefined(
|
|
350
354
|
mapGet(tableMap, rowId),
|
|
@@ -422,99 +426,106 @@ const createStore = () => {
|
|
|
422
426
|
? [true, mapGet(changedRow, cellId), newCell]
|
|
423
427
|
: [false, newCell, newCell];
|
|
424
428
|
};
|
|
425
|
-
const callInvalidCellListeners = (mutator) =>
|
|
426
|
-
|
|
427
|
-
collForEach(
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
429
|
+
const callInvalidCellListeners = (mutator) =>
|
|
430
|
+
!collIsEmpty(invalidCells) && !collIsEmpty(invalidCellListeners[mutator])
|
|
431
|
+
? collForEach(
|
|
432
|
+
mutator
|
|
433
|
+
? mapClone(invalidCells, (table) => mapClone(table, mapClone))
|
|
434
|
+
: invalidCells,
|
|
435
|
+
(rows, tableId) =>
|
|
436
|
+
collForEach(rows, (cells, rowId) =>
|
|
437
|
+
collForEach(cells, (invalidCell, cellId) =>
|
|
438
|
+
callListeners(
|
|
439
|
+
invalidCellListeners[mutator],
|
|
440
|
+
[tableId, rowId, cellId],
|
|
441
|
+
invalidCell,
|
|
442
|
+
),
|
|
438
443
|
),
|
|
439
444
|
),
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
}
|
|
443
|
-
};
|
|
445
|
+
)
|
|
446
|
+
: 0;
|
|
444
447
|
const callListenersForChanges = (mutator) => {
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
collIsEmpty(
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
448
|
+
let emptyIdListeners, emptyOtherListeners;
|
|
449
|
+
if (
|
|
450
|
+
!collIsEmpty(changedCells) &&
|
|
451
|
+
!(
|
|
452
|
+
(emptyIdListeners =
|
|
453
|
+
collIsEmpty(cellIdsListeners[mutator]) &&
|
|
454
|
+
collIsEmpty(rowIdsListeners[mutator]) &&
|
|
455
|
+
collIsEmpty(tableIdsListeners[mutator])) &&
|
|
456
|
+
(emptyOtherListeners =
|
|
457
|
+
collIsEmpty(cellListeners[mutator]) &&
|
|
458
|
+
collIsEmpty(rowListeners[mutator]) &&
|
|
459
|
+
collIsEmpty(tableListeners[mutator]) &&
|
|
460
|
+
collIsEmpty(tablesListeners[mutator]))
|
|
461
|
+
)
|
|
462
|
+
) {
|
|
463
|
+
const changes = mutator
|
|
464
|
+
? [
|
|
465
|
+
mapClone(changedTableIds),
|
|
466
|
+
mapClone(changedRowIds, mapClone),
|
|
467
|
+
mapClone(changedCellIds, (table) => mapClone(table, mapClone)),
|
|
468
|
+
mapClone(changedCells, (table) => mapClone(table, mapClone)),
|
|
469
|
+
]
|
|
470
|
+
: [changedTableIds, changedRowIds, changedCellIds, changedCells];
|
|
471
|
+
if (!emptyIdListeners) {
|
|
472
|
+
collForEach(changes[2], (rowCellIds, tableId) =>
|
|
473
|
+
collForEach(rowCellIds, (changedIds, rowId) => {
|
|
474
|
+
if (!collIsEmpty(changedIds)) {
|
|
475
|
+
callListeners(cellIdsListeners[mutator], [tableId, rowId]);
|
|
476
|
+
}
|
|
477
|
+
}),
|
|
478
|
+
);
|
|
479
|
+
collForEach(changes[1], (changedIds, tableId) => {
|
|
468
480
|
if (!collIsEmpty(changedIds)) {
|
|
469
|
-
callListeners(
|
|
481
|
+
callListeners(rowIdsListeners[mutator], [tableId]);
|
|
470
482
|
}
|
|
471
|
-
})
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
if (!collIsEmpty(changedIds)) {
|
|
475
|
-
callListeners(rowIdsListeners[mutator], [tableId]);
|
|
483
|
+
});
|
|
484
|
+
if (!collIsEmpty(changes[0])) {
|
|
485
|
+
callListeners(tableIdsListeners[mutator]);
|
|
476
486
|
}
|
|
477
|
-
});
|
|
478
|
-
if (!collIsEmpty(changes[0])) {
|
|
479
|
-
callListeners(tableIdsListeners[mutator]);
|
|
480
487
|
}
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
488
|
+
if (!emptyOtherListeners) {
|
|
489
|
+
let tablesChanged;
|
|
490
|
+
collForEach(changes[3], (rows, tableId) => {
|
|
491
|
+
let tableChanged;
|
|
492
|
+
collForEach(rows, (cells, rowId) => {
|
|
493
|
+
let rowChanged;
|
|
494
|
+
collForEach(cells, (oldCell, cellId) => {
|
|
495
|
+
const newCell = getCell(tableId, rowId, cellId);
|
|
496
|
+
if (newCell !== oldCell) {
|
|
497
|
+
callListeners(
|
|
498
|
+
cellListeners[mutator],
|
|
499
|
+
[tableId, rowId, cellId],
|
|
500
|
+
newCell,
|
|
501
|
+
oldCell,
|
|
502
|
+
getCellChange,
|
|
503
|
+
);
|
|
504
|
+
tablesChanged = tableChanged = rowChanged = 1;
|
|
505
|
+
}
|
|
506
|
+
});
|
|
507
|
+
if (rowChanged) {
|
|
491
508
|
callListeners(
|
|
492
|
-
|
|
493
|
-
[tableId, rowId
|
|
494
|
-
newCell,
|
|
495
|
-
oldCell,
|
|
509
|
+
rowListeners[mutator],
|
|
510
|
+
[tableId, rowId],
|
|
496
511
|
getCellChange,
|
|
497
512
|
);
|
|
498
|
-
tablesChanged = tableChanged = rowChanged = 1;
|
|
499
513
|
}
|
|
500
514
|
});
|
|
501
|
-
if (
|
|
502
|
-
callListeners(
|
|
503
|
-
rowListeners[mutator],
|
|
504
|
-
[tableId, rowId],
|
|
505
|
-
getCellChange,
|
|
506
|
-
);
|
|
515
|
+
if (tableChanged) {
|
|
516
|
+
callListeners(tableListeners[mutator], [tableId], getCellChange);
|
|
507
517
|
}
|
|
508
518
|
});
|
|
509
|
-
if (
|
|
510
|
-
callListeners(
|
|
519
|
+
if (tablesChanged) {
|
|
520
|
+
callListeners(tablesListeners[mutator], [], getCellChange);
|
|
511
521
|
}
|
|
512
|
-
});
|
|
513
|
-
if (tablesChanged) {
|
|
514
|
-
callListeners(tablesListeners[mutator], [], getCellChange);
|
|
515
522
|
}
|
|
516
523
|
}
|
|
517
524
|
};
|
|
525
|
+
const fluentTransaction = (actions) => {
|
|
526
|
+
transaction(actions);
|
|
527
|
+
return store;
|
|
528
|
+
};
|
|
518
529
|
const getTables = () =>
|
|
519
530
|
mapToObj(tablesMap, (tableMap) => mapToObj(tableMap, mapToObj));
|
|
520
531
|
const getTableIds = () => mapKeys(tablesMap);
|
|
@@ -533,56 +544,52 @@ const createStore = () => {
|
|
|
533
544
|
collHas(mapGet(mapGet(tablesMap, tableId), rowId), cellId);
|
|
534
545
|
const getJson = () => jsonString(tablesMap);
|
|
535
546
|
const getSchemaJson = () => jsonString(schemaMap);
|
|
536
|
-
const setTables = (tables) =>
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
let rowId = void 0;
|
|
556
|
-
validateRow(tableId, rowId, row)
|
|
557
|
-
? setValidRowTransaction(
|
|
547
|
+
const setTables = (tables) =>
|
|
548
|
+
fluentTransaction(() =>
|
|
549
|
+
validateTables(tables) ? setValidTables(tables) : 0,
|
|
550
|
+
);
|
|
551
|
+
const setTable = (tableId, table) =>
|
|
552
|
+
fluentTransaction(() =>
|
|
553
|
+
validateTable(table, tableId) ? setValidTable(tableId, table) : 0,
|
|
554
|
+
);
|
|
555
|
+
const setRow = (tableId, rowId, row) =>
|
|
556
|
+
fluentTransaction(() =>
|
|
557
|
+
validateRow(tableId, rowId, row)
|
|
558
|
+
? setValidRow(tableId, getOrCreateTable(tableId), rowId, row)
|
|
559
|
+
: 0,
|
|
560
|
+
);
|
|
561
|
+
const addRow = (tableId, row) =>
|
|
562
|
+
transaction(() => {
|
|
563
|
+
let rowId = void 0;
|
|
564
|
+
if (validateRow(tableId, rowId, row)) {
|
|
565
|
+
setValidRow(
|
|
558
566
|
tableId,
|
|
567
|
+
getOrCreateTable(tableId),
|
|
559
568
|
(rowId = getNewRowId(mapGet(tablesMap, tableId))),
|
|
560
569
|
row,
|
|
561
|
-
)
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
const setPartialRow = (tableId, rowId, partialRow) =>
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
(validCell) =>
|
|
585
|
-
transaction(() =>
|
|
570
|
+
);
|
|
571
|
+
}
|
|
572
|
+
return rowId;
|
|
573
|
+
});
|
|
574
|
+
const setPartialRow = (tableId, rowId, partialRow) =>
|
|
575
|
+
fluentTransaction(() => {
|
|
576
|
+
if (validateRow(tableId, rowId, partialRow, 1)) {
|
|
577
|
+
const table = getOrCreateTable(tableId);
|
|
578
|
+
objForEach(partialRow, (cell, cellId) =>
|
|
579
|
+
setCellIntoDefaultRow(tableId, table, rowId, cellId, cell),
|
|
580
|
+
);
|
|
581
|
+
}
|
|
582
|
+
});
|
|
583
|
+
const setCell = (tableId, rowId, cellId, cell) =>
|
|
584
|
+
fluentTransaction(() =>
|
|
585
|
+
ifNotUndefined(
|
|
586
|
+
getValidatedCell(
|
|
587
|
+
tableId,
|
|
588
|
+
rowId,
|
|
589
|
+
cellId,
|
|
590
|
+
isFunction(cell) ? cell(getCell(tableId, rowId, cellId)) : cell,
|
|
591
|
+
),
|
|
592
|
+
(validCell) =>
|
|
586
593
|
setCellIntoDefaultRow(
|
|
587
594
|
tableId,
|
|
588
595
|
getOrCreateTable(tableId),
|
|
@@ -590,63 +597,51 @@ const createStore = () => {
|
|
|
590
597
|
cellId,
|
|
591
598
|
validCell,
|
|
592
599
|
),
|
|
593
|
-
|
|
594
|
-
transaction,
|
|
600
|
+
),
|
|
595
601
|
);
|
|
596
|
-
return store;
|
|
597
|
-
};
|
|
598
602
|
const setJson = (json) => {
|
|
599
603
|
try {
|
|
600
604
|
json === EMPTY_OBJECT ? delTables() : setTables(jsonParse(json));
|
|
601
605
|
} catch {}
|
|
602
606
|
return store;
|
|
603
607
|
};
|
|
604
|
-
const setSchema = (schema) =>
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
return store;
|
|
614
|
-
};
|
|
615
|
-
const delTables = () => {
|
|
616
|
-
transaction(() => setValidTables({}));
|
|
617
|
-
return store;
|
|
618
|
-
};
|
|
619
|
-
const delTable = (tableId) => {
|
|
620
|
-
if (collHas(tablesMap, tableId)) {
|
|
621
|
-
transaction(() => delValidTable(tableId));
|
|
622
|
-
}
|
|
623
|
-
return store;
|
|
624
|
-
};
|
|
625
|
-
const delRow = (tableId, rowId) => {
|
|
626
|
-
ifNotUndefined(mapGet(tablesMap, tableId), (tableMap) => {
|
|
627
|
-
if (collHas(tableMap, rowId)) {
|
|
628
|
-
transaction(() => delValidRow(tableId, tableMap, rowId));
|
|
608
|
+
const setSchema = (schema) =>
|
|
609
|
+
fluentTransaction(() => {
|
|
610
|
+
if ((hasSchema = validateSchema(schema))) {
|
|
611
|
+
setValidSchema(schema);
|
|
612
|
+
if (!collIsEmpty(tablesMap)) {
|
|
613
|
+
const tables = getTables();
|
|
614
|
+
delTables();
|
|
615
|
+
setTables(tables);
|
|
616
|
+
}
|
|
629
617
|
}
|
|
630
618
|
});
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
ifNotUndefined(mapGet(tableMap, rowId), (rowMap) => {
|
|
636
|
-
if (collHas(rowMap, cellId)) {
|
|
637
|
-
transaction(() =>
|
|
638
|
-
delValidCell(tableId, tableMap, rowId, rowMap, cellId, forceDel),
|
|
639
|
-
);
|
|
640
|
-
}
|
|
641
|
-
}),
|
|
619
|
+
const delTables = () => fluentTransaction(() => setValidTables({}));
|
|
620
|
+
const delTable = (tableId) =>
|
|
621
|
+
fluentTransaction(() =>
|
|
622
|
+
collHas(tablesMap, tableId) ? delValidTable(tableId) : 0,
|
|
642
623
|
);
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
624
|
+
const delRow = (tableId, rowId) =>
|
|
625
|
+
fluentTransaction(() =>
|
|
626
|
+
ifNotUndefined(mapGet(tablesMap, tableId), (tableMap) =>
|
|
627
|
+
collHas(tableMap, rowId) ? delValidRow(tableId, tableMap, rowId) : 0,
|
|
628
|
+
),
|
|
629
|
+
);
|
|
630
|
+
const delCell = (tableId, rowId, cellId, forceDel) =>
|
|
631
|
+
fluentTransaction(() =>
|
|
632
|
+
ifNotUndefined(mapGet(tablesMap, tableId), (tableMap) =>
|
|
633
|
+
ifNotUndefined(mapGet(tableMap, rowId), (rowMap) =>
|
|
634
|
+
collHas(rowMap, cellId)
|
|
635
|
+
? delValidCell(tableId, tableMap, rowId, rowMap, cellId, forceDel)
|
|
636
|
+
: 0,
|
|
637
|
+
),
|
|
638
|
+
),
|
|
639
|
+
);
|
|
640
|
+
const delSchema = () =>
|
|
641
|
+
fluentTransaction(() => {
|
|
642
|
+
setValidSchema({});
|
|
643
|
+
hasSchema = false;
|
|
644
|
+
});
|
|
650
645
|
const transaction = (actions) => {
|
|
651
646
|
if (transactions == -1) {
|
|
652
647
|
return;
|
package/lib/debug/tinybase.js
CHANGED
|
@@ -1214,8 +1214,9 @@ const getCellType = (cell) => {
|
|
|
1214
1214
|
? type
|
|
1215
1215
|
: void 0;
|
|
1216
1216
|
};
|
|
1217
|
-
const validate = (obj, validateChild) => {
|
|
1218
|
-
if (isUndefined(obj) || !isObject(obj) || objFrozen(obj)) {
|
|
1217
|
+
const validate = (obj, validateChild, onInvalidObj) => {
|
|
1218
|
+
if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
|
|
1219
|
+
onInvalidObj?.();
|
|
1219
1220
|
return false;
|
|
1220
1221
|
}
|
|
1221
1222
|
objForEach(obj, (child, id) => {
|
|
@@ -1267,10 +1268,15 @@ const createStore = () => {
|
|
|
1267
1268
|
return true;
|
|
1268
1269
|
}),
|
|
1269
1270
|
);
|
|
1270
|
-
const validateTables = (tables) =>
|
|
1271
|
+
const validateTables = (tables) =>
|
|
1272
|
+
validate(tables, validateTable, cellInvalid);
|
|
1271
1273
|
const validateTable = (table, tableId) =>
|
|
1272
|
-
(!hasSchema || collHas(schemaMap, tableId)) &&
|
|
1273
|
-
validate(
|
|
1274
|
+
(!hasSchema || collHas(schemaMap, tableId) || cellInvalid(tableId)) &&
|
|
1275
|
+
validate(
|
|
1276
|
+
table,
|
|
1277
|
+
(row, rowId) => validateRow(tableId, rowId, row),
|
|
1278
|
+
() => cellInvalid(tableId),
|
|
1279
|
+
);
|
|
1274
1280
|
const validateRow = (tableId, rowId, row, skipDefaults) =>
|
|
1275
1281
|
validate(
|
|
1276
1282
|
skipDefaults ? row : addDefaultsToRow(row, tableId),
|
|
@@ -1283,6 +1289,7 @@ const createStore = () => {
|
|
|
1283
1289
|
},
|
|
1284
1290
|
() => false,
|
|
1285
1291
|
),
|
|
1292
|
+
() => cellInvalid(tableId, rowId),
|
|
1286
1293
|
);
|
|
1287
1294
|
const getValidatedCell = (tableId, rowId, cellId, cell) =>
|
|
1288
1295
|
hasSchema
|
|
@@ -1292,6 +1299,7 @@ const createStore = () => {
|
|
|
1292
1299
|
getCellType(cell) != cellSchema[TYPE]
|
|
1293
1300
|
? cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
|
|
1294
1301
|
: cell,
|
|
1302
|
+
() => cellInvalid(tableId, rowId, cellId, cell),
|
|
1295
1303
|
)
|
|
1296
1304
|
: isUndefined(getCellType(cell))
|
|
1297
1305
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
@@ -1367,10 +1375,6 @@ const createStore = () => {
|
|
|
1367
1375
|
mapSet(rowMap, cellId, newCell);
|
|
1368
1376
|
}
|
|
1369
1377
|
};
|
|
1370
|
-
const setValidRowTransaction = (tableId, rowId, row) =>
|
|
1371
|
-
transaction(() =>
|
|
1372
|
-
setValidRow(tableId, getOrCreateTable(tableId), rowId, row),
|
|
1373
|
-
);
|
|
1374
1378
|
const setCellIntoDefaultRow = (tableId, tableMap, rowId, cellId, validCell) =>
|
|
1375
1379
|
ifNotUndefined(
|
|
1376
1380
|
mapGet(tableMap, rowId),
|
|
@@ -1448,99 +1452,106 @@ const createStore = () => {
|
|
|
1448
1452
|
? [true, mapGet(changedRow, cellId), newCell]
|
|
1449
1453
|
: [false, newCell, newCell];
|
|
1450
1454
|
};
|
|
1451
|
-
const callInvalidCellListeners = (mutator) =>
|
|
1452
|
-
|
|
1453
|
-
collForEach(
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1455
|
+
const callInvalidCellListeners = (mutator) =>
|
|
1456
|
+
!collIsEmpty(invalidCells) && !collIsEmpty(invalidCellListeners[mutator])
|
|
1457
|
+
? collForEach(
|
|
1458
|
+
mutator
|
|
1459
|
+
? mapClone(invalidCells, (table) => mapClone(table, mapClone))
|
|
1460
|
+
: invalidCells,
|
|
1461
|
+
(rows, tableId) =>
|
|
1462
|
+
collForEach(rows, (cells, rowId) =>
|
|
1463
|
+
collForEach(cells, (invalidCell, cellId) =>
|
|
1464
|
+
callListeners(
|
|
1465
|
+
invalidCellListeners[mutator],
|
|
1466
|
+
[tableId, rowId, cellId],
|
|
1467
|
+
invalidCell,
|
|
1468
|
+
),
|
|
1464
1469
|
),
|
|
1465
1470
|
),
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
}
|
|
1469
|
-
};
|
|
1471
|
+
)
|
|
1472
|
+
: 0;
|
|
1470
1473
|
const callListenersForChanges = (mutator) => {
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
collIsEmpty(
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1474
|
+
let emptyIdListeners, emptyOtherListeners;
|
|
1475
|
+
if (
|
|
1476
|
+
!collIsEmpty(changedCells) &&
|
|
1477
|
+
!(
|
|
1478
|
+
(emptyIdListeners =
|
|
1479
|
+
collIsEmpty(cellIdsListeners[mutator]) &&
|
|
1480
|
+
collIsEmpty(rowIdsListeners[mutator]) &&
|
|
1481
|
+
collIsEmpty(tableIdsListeners[mutator])) &&
|
|
1482
|
+
(emptyOtherListeners =
|
|
1483
|
+
collIsEmpty(cellListeners[mutator]) &&
|
|
1484
|
+
collIsEmpty(rowListeners[mutator]) &&
|
|
1485
|
+
collIsEmpty(tableListeners[mutator]) &&
|
|
1486
|
+
collIsEmpty(tablesListeners[mutator]))
|
|
1487
|
+
)
|
|
1488
|
+
) {
|
|
1489
|
+
const changes = mutator
|
|
1490
|
+
? [
|
|
1491
|
+
mapClone(changedTableIds),
|
|
1492
|
+
mapClone(changedRowIds, mapClone),
|
|
1493
|
+
mapClone(changedCellIds, (table) => mapClone(table, mapClone)),
|
|
1494
|
+
mapClone(changedCells, (table) => mapClone(table, mapClone)),
|
|
1495
|
+
]
|
|
1496
|
+
: [changedTableIds, changedRowIds, changedCellIds, changedCells];
|
|
1497
|
+
if (!emptyIdListeners) {
|
|
1498
|
+
collForEach(changes[2], (rowCellIds, tableId) =>
|
|
1499
|
+
collForEach(rowCellIds, (changedIds, rowId) => {
|
|
1500
|
+
if (!collIsEmpty(changedIds)) {
|
|
1501
|
+
callListeners(cellIdsListeners[mutator], [tableId, rowId]);
|
|
1502
|
+
}
|
|
1503
|
+
}),
|
|
1504
|
+
);
|
|
1505
|
+
collForEach(changes[1], (changedIds, tableId) => {
|
|
1494
1506
|
if (!collIsEmpty(changedIds)) {
|
|
1495
|
-
callListeners(
|
|
1507
|
+
callListeners(rowIdsListeners[mutator], [tableId]);
|
|
1496
1508
|
}
|
|
1497
|
-
})
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
if (!collIsEmpty(changedIds)) {
|
|
1501
|
-
callListeners(rowIdsListeners[mutator], [tableId]);
|
|
1509
|
+
});
|
|
1510
|
+
if (!collIsEmpty(changes[0])) {
|
|
1511
|
+
callListeners(tableIdsListeners[mutator]);
|
|
1502
1512
|
}
|
|
1503
|
-
});
|
|
1504
|
-
if (!collIsEmpty(changes[0])) {
|
|
1505
|
-
callListeners(tableIdsListeners[mutator]);
|
|
1506
1513
|
}
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1514
|
+
if (!emptyOtherListeners) {
|
|
1515
|
+
let tablesChanged;
|
|
1516
|
+
collForEach(changes[3], (rows, tableId) => {
|
|
1517
|
+
let tableChanged;
|
|
1518
|
+
collForEach(rows, (cells, rowId) => {
|
|
1519
|
+
let rowChanged;
|
|
1520
|
+
collForEach(cells, (oldCell, cellId) => {
|
|
1521
|
+
const newCell = getCell(tableId, rowId, cellId);
|
|
1522
|
+
if (newCell !== oldCell) {
|
|
1523
|
+
callListeners(
|
|
1524
|
+
cellListeners[mutator],
|
|
1525
|
+
[tableId, rowId, cellId],
|
|
1526
|
+
newCell,
|
|
1527
|
+
oldCell,
|
|
1528
|
+
getCellChange,
|
|
1529
|
+
);
|
|
1530
|
+
tablesChanged = tableChanged = rowChanged = 1;
|
|
1531
|
+
}
|
|
1532
|
+
});
|
|
1533
|
+
if (rowChanged) {
|
|
1517
1534
|
callListeners(
|
|
1518
|
-
|
|
1519
|
-
[tableId, rowId
|
|
1520
|
-
newCell,
|
|
1521
|
-
oldCell,
|
|
1535
|
+
rowListeners[mutator],
|
|
1536
|
+
[tableId, rowId],
|
|
1522
1537
|
getCellChange,
|
|
1523
1538
|
);
|
|
1524
|
-
tablesChanged = tableChanged = rowChanged = 1;
|
|
1525
1539
|
}
|
|
1526
1540
|
});
|
|
1527
|
-
if (
|
|
1528
|
-
callListeners(
|
|
1529
|
-
rowListeners[mutator],
|
|
1530
|
-
[tableId, rowId],
|
|
1531
|
-
getCellChange,
|
|
1532
|
-
);
|
|
1541
|
+
if (tableChanged) {
|
|
1542
|
+
callListeners(tableListeners[mutator], [tableId], getCellChange);
|
|
1533
1543
|
}
|
|
1534
1544
|
});
|
|
1535
|
-
if (
|
|
1536
|
-
callListeners(
|
|
1545
|
+
if (tablesChanged) {
|
|
1546
|
+
callListeners(tablesListeners[mutator], [], getCellChange);
|
|
1537
1547
|
}
|
|
1538
|
-
});
|
|
1539
|
-
if (tablesChanged) {
|
|
1540
|
-
callListeners(tablesListeners[mutator], [], getCellChange);
|
|
1541
1548
|
}
|
|
1542
1549
|
}
|
|
1543
1550
|
};
|
|
1551
|
+
const fluentTransaction = (actions) => {
|
|
1552
|
+
transaction(actions);
|
|
1553
|
+
return store;
|
|
1554
|
+
};
|
|
1544
1555
|
const getTables = () =>
|
|
1545
1556
|
mapToObj(tablesMap, (tableMap) => mapToObj(tableMap, mapToObj));
|
|
1546
1557
|
const getTableIds = () => mapKeys(tablesMap);
|
|
@@ -1559,56 +1570,52 @@ const createStore = () => {
|
|
|
1559
1570
|
collHas(mapGet(mapGet(tablesMap, tableId), rowId), cellId);
|
|
1560
1571
|
const getJson = () => jsonString(tablesMap);
|
|
1561
1572
|
const getSchemaJson = () => jsonString(schemaMap);
|
|
1562
|
-
const setTables = (tables) =>
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
let rowId = void 0;
|
|
1582
|
-
validateRow(tableId, rowId, row)
|
|
1583
|
-
? setValidRowTransaction(
|
|
1573
|
+
const setTables = (tables) =>
|
|
1574
|
+
fluentTransaction(() =>
|
|
1575
|
+
validateTables(tables) ? setValidTables(tables) : 0,
|
|
1576
|
+
);
|
|
1577
|
+
const setTable = (tableId, table) =>
|
|
1578
|
+
fluentTransaction(() =>
|
|
1579
|
+
validateTable(table, tableId) ? setValidTable(tableId, table) : 0,
|
|
1580
|
+
);
|
|
1581
|
+
const setRow = (tableId, rowId, row) =>
|
|
1582
|
+
fluentTransaction(() =>
|
|
1583
|
+
validateRow(tableId, rowId, row)
|
|
1584
|
+
? setValidRow(tableId, getOrCreateTable(tableId), rowId, row)
|
|
1585
|
+
: 0,
|
|
1586
|
+
);
|
|
1587
|
+
const addRow = (tableId, row) =>
|
|
1588
|
+
transaction(() => {
|
|
1589
|
+
let rowId = void 0;
|
|
1590
|
+
if (validateRow(tableId, rowId, row)) {
|
|
1591
|
+
setValidRow(
|
|
1584
1592
|
tableId,
|
|
1593
|
+
getOrCreateTable(tableId),
|
|
1585
1594
|
(rowId = getNewRowId(mapGet(tablesMap, tableId))),
|
|
1586
1595
|
row,
|
|
1587
|
-
)
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
const setPartialRow = (tableId, rowId, partialRow) =>
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
(validCell) =>
|
|
1611
|
-
transaction(() =>
|
|
1596
|
+
);
|
|
1597
|
+
}
|
|
1598
|
+
return rowId;
|
|
1599
|
+
});
|
|
1600
|
+
const setPartialRow = (tableId, rowId, partialRow) =>
|
|
1601
|
+
fluentTransaction(() => {
|
|
1602
|
+
if (validateRow(tableId, rowId, partialRow, 1)) {
|
|
1603
|
+
const table = getOrCreateTable(tableId);
|
|
1604
|
+
objForEach(partialRow, (cell, cellId) =>
|
|
1605
|
+
setCellIntoDefaultRow(tableId, table, rowId, cellId, cell),
|
|
1606
|
+
);
|
|
1607
|
+
}
|
|
1608
|
+
});
|
|
1609
|
+
const setCell = (tableId, rowId, cellId, cell) =>
|
|
1610
|
+
fluentTransaction(() =>
|
|
1611
|
+
ifNotUndefined(
|
|
1612
|
+
getValidatedCell(
|
|
1613
|
+
tableId,
|
|
1614
|
+
rowId,
|
|
1615
|
+
cellId,
|
|
1616
|
+
isFunction(cell) ? cell(getCell(tableId, rowId, cellId)) : cell,
|
|
1617
|
+
),
|
|
1618
|
+
(validCell) =>
|
|
1612
1619
|
setCellIntoDefaultRow(
|
|
1613
1620
|
tableId,
|
|
1614
1621
|
getOrCreateTable(tableId),
|
|
@@ -1616,63 +1623,51 @@ const createStore = () => {
|
|
|
1616
1623
|
cellId,
|
|
1617
1624
|
validCell,
|
|
1618
1625
|
),
|
|
1619
|
-
|
|
1620
|
-
transaction,
|
|
1626
|
+
),
|
|
1621
1627
|
);
|
|
1622
|
-
return store;
|
|
1623
|
-
};
|
|
1624
1628
|
const setJson = (json) => {
|
|
1625
1629
|
try {
|
|
1626
1630
|
json === EMPTY_OBJECT ? delTables() : setTables(jsonParse(json));
|
|
1627
1631
|
} catch {}
|
|
1628
1632
|
return store;
|
|
1629
1633
|
};
|
|
1630
|
-
const setSchema = (schema) =>
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
return store;
|
|
1640
|
-
};
|
|
1641
|
-
const delTables = () => {
|
|
1642
|
-
transaction(() => setValidTables({}));
|
|
1643
|
-
return store;
|
|
1644
|
-
};
|
|
1645
|
-
const delTable = (tableId) => {
|
|
1646
|
-
if (collHas(tablesMap, tableId)) {
|
|
1647
|
-
transaction(() => delValidTable(tableId));
|
|
1648
|
-
}
|
|
1649
|
-
return store;
|
|
1650
|
-
};
|
|
1651
|
-
const delRow = (tableId, rowId) => {
|
|
1652
|
-
ifNotUndefined(mapGet(tablesMap, tableId), (tableMap) => {
|
|
1653
|
-
if (collHas(tableMap, rowId)) {
|
|
1654
|
-
transaction(() => delValidRow(tableId, tableMap, rowId));
|
|
1634
|
+
const setSchema = (schema) =>
|
|
1635
|
+
fluentTransaction(() => {
|
|
1636
|
+
if ((hasSchema = validateSchema(schema))) {
|
|
1637
|
+
setValidSchema(schema);
|
|
1638
|
+
if (!collIsEmpty(tablesMap)) {
|
|
1639
|
+
const tables = getTables();
|
|
1640
|
+
delTables();
|
|
1641
|
+
setTables(tables);
|
|
1642
|
+
}
|
|
1655
1643
|
}
|
|
1656
1644
|
});
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
ifNotUndefined(mapGet(tableMap, rowId), (rowMap) => {
|
|
1662
|
-
if (collHas(rowMap, cellId)) {
|
|
1663
|
-
transaction(() =>
|
|
1664
|
-
delValidCell(tableId, tableMap, rowId, rowMap, cellId, forceDel),
|
|
1665
|
-
);
|
|
1666
|
-
}
|
|
1667
|
-
}),
|
|
1645
|
+
const delTables = () => fluentTransaction(() => setValidTables({}));
|
|
1646
|
+
const delTable = (tableId) =>
|
|
1647
|
+
fluentTransaction(() =>
|
|
1648
|
+
collHas(tablesMap, tableId) ? delValidTable(tableId) : 0,
|
|
1668
1649
|
);
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1650
|
+
const delRow = (tableId, rowId) =>
|
|
1651
|
+
fluentTransaction(() =>
|
|
1652
|
+
ifNotUndefined(mapGet(tablesMap, tableId), (tableMap) =>
|
|
1653
|
+
collHas(tableMap, rowId) ? delValidRow(tableId, tableMap, rowId) : 0,
|
|
1654
|
+
),
|
|
1655
|
+
);
|
|
1656
|
+
const delCell = (tableId, rowId, cellId, forceDel) =>
|
|
1657
|
+
fluentTransaction(() =>
|
|
1658
|
+
ifNotUndefined(mapGet(tablesMap, tableId), (tableMap) =>
|
|
1659
|
+
ifNotUndefined(mapGet(tableMap, rowId), (rowMap) =>
|
|
1660
|
+
collHas(rowMap, cellId)
|
|
1661
|
+
? delValidCell(tableId, tableMap, rowId, rowMap, cellId, forceDel)
|
|
1662
|
+
: 0,
|
|
1663
|
+
),
|
|
1664
|
+
),
|
|
1665
|
+
);
|
|
1666
|
+
const delSchema = () =>
|
|
1667
|
+
fluentTransaction(() => {
|
|
1668
|
+
setValidSchema({});
|
|
1669
|
+
hasSchema = false;
|
|
1670
|
+
});
|
|
1676
1671
|
const transaction = (actions) => {
|
|
1677
1672
|
if (transactions == -1) {
|
|
1678
1673
|
return;
|
package/lib/store.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=e=>typeof e,t=e(""),s=e(!0),n=e(0),r=e(e),l=(e,t)=>e.forEach(t),a=e=>e.length,o=e=>0==a(e),
|
|
1
|
+
const e=e=>typeof e,t=e(""),s=e(!0),n=e(0),r=e(e),l=(e,t)=>e.forEach(t),a=e=>e.length,o=e=>0==a(e),d=e=>e.slice(1),c=(e,t)=>e.push(t),i=e=>JSON.stringify(e,((e,t)=>{return h(t,Map)?(s=[...t],n=(e,[t,s])=>(e[t]=s,e),r={},s.reduce(n,r)):t;var s,n,r})),u=JSON.parse,f=isFinite,h=(e,t)=>e instanceof t,b=e=>null==e,g=(e,t,s)=>b(e)?s?.():t(e),T=e=>e==t||e==s,w=(e,t)=>e?.has(t)??!1,p=e=>b(e)||0==(e=>e.size)(e),L=e=>e.clear(),R=(e,t)=>e?.forEach(t),C=(e,t)=>e?.delete(t),y=e=>new Map(e),I=(e=y)=>[e(),e()],S=e=>[...e?.keys()??[]],v=(e,t)=>e?.get(t),E=(e,t)=>R(e,((e,s)=>t(s,e))),J=(e,t,s)=>b(s)?(C(e,t),e):e?.set(t,s),m=(e,t,s,n)=>(w(e,t)||(n?.(s),e.set(t,s)),v(e,t)),z=(e,t)=>{const s={},n=t??(e=>e);return R(e,((e,t)=>s[t]=n(e))),s},O=(e,t)=>{const s=y(),n=t??(e=>e);return R(e,((e,t)=>s.set(t,n(e)))),s},k=Object,F=k.keys,M=k.isFrozen,N=k.freeze,j=(e,t)=>!b(((e,t)=>g(e,(e=>e[t])))(e,t)),x=(e,t)=>delete e[t],P=(e,t)=>l(k.entries(e),(([e,s])=>t(s,e))),q=e=>o(F(e)),A=e=>new Set(e),B=(e,t,s)=>a(s)<2?((e,t)=>e?.add(t))(o(s)?e:m(e,s[0],A()),t):B(m(e,s[0],y()),t,d(s)),D=e=>{const t=(s,n,...r)=>g(s,(s=>o(r)?e(s,n):l([r[0],null],(e=>t(v(s,e),n,...d(r))))));return t},G=(e,t,s,n=J)=>{const r=(a=S(e),o=e=>!j(t,e),a.filter(o));var a,o;return l(F(t),(n=>s(e,n,t[n]))),l(r,(t=>n(e,t))),e},H=t=>{const s=e(t);return T(s)||s==n&&f(t)?s:void 0},K=(e,t,s)=>b(e)||!(e=>h(e,k)&&e.constructor==k)(e)||q(e)||M(e)?(s?.(),!1):(P(e,((s,n)=>{t(s,n)||x(e,n)})),!q(e)),Q=(e,t,s)=>J(e,t,v(e,t)==-s?void 0:s),U=()=>{let t,s=0,o=0;const d=y(),f=y(),h=y(),k=y(),F=y(),M=y(),q=y(),U=y(),V=I(A),W=I(A),X=I(),Y=I(),Z=I(),$=I(),_=I(),ee=I(),[te,se,ne,re]=(e=>{let t,s=0;const n=[],r=y();return[(l,a,o=[])=>{t??=e();const d=n.pop()??""+s++;return J(r,d,[l,a,o]),B(a,d,o),d},(e,s=[],...n)=>D(R)(e,(e=>g(v(r,e),(([e])=>e(t,...s,...n)))),...s),e=>g(v(r,e),(([,t,s])=>(D(C)(t,e,...s),J(r,e),a(n)<1e3&&c(n,e),s)),(()=>[])),(e,s,n)=>g(v(r,e),(([e,,r])=>{const o=(...d)=>{const c=a(d);c==a(r)?e(t,...d,...n(d)):b(r[c])?l(s[c](...d),(e=>o(...d,e))):o(...d,r[c])};o()}))]})((()=>Pe)),le=(e,s)=>(!t||w(M,s)||Se(s))&&K(e,((e,t)=>ae(s,t,e)),(()=>Se(s))),ae=(e,t,s,n)=>K(n?s:de(s,e),((n,r)=>g(oe(e,t,r,n),(e=>(s[r]=e,!0)),(()=>!1))),(()=>Se(e,t))),oe=(e,s,n,r)=>t?g(v(v(M,e),n),(t=>H(r)!=t.type?Se(e,s,n,r,t.default):r),(()=>Se(e,s,n,r))):b(H(r))?Se(e,s,n,r):r,de=(e,t)=>(g(v(q,t),(t=>P(t,((t,s)=>{j(e,s)||(e[s]=t)})))),e),ce=e=>G(M,e,((e,t,s)=>{const n={};G(m(M,t,y()),s,((e,t,s)=>{J(e,t,s),g(s.default,(e=>n[t]=e))})),J(q,t,n)}),((e,t)=>{J(M,t),J(q,t)})),ie=e=>G(U,e,((e,t,s)=>ue(t,s)),((e,t)=>we(t))),ue=(e,t)=>G(m(U,e,y(),(()=>Re(e,1))),t,((t,s,n)=>fe(e,t,s,n)),((t,s)=>pe(e,t,s))),fe=(e,t,s,n,r)=>G(m(t,s,y(),(()=>Ce(e,s,1))),n,((t,n,r)=>he(e,s,t,n,r)),((n,l)=>Le(e,t,s,n,l,r))),he=(e,t,s,n,r)=>{w(s,n)||ye(e,t,n,1);const l=v(s,n);r!==l&&(Ie(e,t,n,l),J(s,n,r))},be=(e,t,s,n,r)=>g(v(t,s),(t=>he(e,s,t,n,r)),(()=>fe(e,t,s,de({[n]:r},e)))),ge=e=>{const t=""+s++;return w(e,t)?ge(e):t},Te=e=>v(U,e)??ue(e,{}),we=e=>ue(e,{}),pe=(e,t,s)=>fe(e,t,s,{},!0),Le=(e,t,s,n,r,l)=>{const a=v(q,e)?.[r];if(!b(a)&&!l)return he(e,s,n,r,a);const o=t=>{Ie(e,s,t,v(n,t)),ye(e,s,t,-1),J(n,t)};b(a)?o(r):E(n,o),p(n)&&(Ce(e,s,-1),p(J(t,s))&&(Re(e,-1),J(U,e)))},Re=(e,t)=>Q(d,e,t),Ce=(e,t,s)=>Q(m(f,e,y()),t,s),ye=(e,t,s,n)=>Q(m(m(h,e,y()),t,y()),s,n),Ie=(e,t,s,n)=>m(m(m(k,e,y()),t,y()),s,n),Se=(e,t,s,n,r)=>(c(m(m(m(F,e,y()),t,y()),s,[]),n),r),ve=(e,t,s)=>{const n=v(v(k,e),t),r=Me(e,t,s);return w(n,s)?[!0,v(n,s),r]:[!1,r,r]},Ee=e=>p(F)||p(ee[e])?0:R(e?O(F,(e=>O(e,O))):F,((t,s)=>R(t,((t,n)=>R(t,((t,r)=>se(ee[e],[s,n,r],t))))))),Je=e=>{let t,s;if(!(p(k)||(t=p($[e])&&p(Y[e])&&p(W[e]))&&(s=p(_[e])&&p(Z[e])&&p(X[e])&&p(V[e])))){const n=e?[O(d),O(f,O),O(h,(e=>O(e,O))),O(k,(e=>O(e,O)))]:[d,f,h,k];if(t||(R(n[2],((t,s)=>R(t,((t,n)=>{p(t)||se($[e],[s,n])})))),R(n[1],((t,s)=>{p(t)||se(Y[e],[s])})),p(n[0])||se(W[e])),!s){let t;R(n[3],((s,n)=>{let r;R(s,((s,l)=>{let a;R(s,((s,o)=>{const d=Me(n,l,o);d!==s&&(se(_[e],[n,l,o],d,s,ve),t=r=a=1)})),a&&se(Z[e],[n,l],ve)})),r&&se(X[e],[n],ve)})),t&&se(V[e],[],ve)}}},me=e=>(xe(e),Pe),ze=()=>z(U,(e=>z(e,z))),Oe=()=>S(U),ke=e=>S(v(U,e)),Fe=(e,t)=>S(v(v(U,e),t)),Me=(e,t,s)=>v(v(v(U,e),t),s),Ne=e=>me((()=>(e=>K(e,le,Se))(e)?ie(e):0)),je=()=>me((()=>ie({}))),xe=e=>{if(-1==o)return;o++;const t=e?.();return o--,0==o&&(o=1,Ee(1),Je(1),o=-1,Ee(0),Je(0),o=0,l([k,F,d,f,h],L)),t},Pe={getTables:ze,getTableIds:Oe,getTable:e=>z(v(U,e),z),getRowIds:ke,getRow:(e,t)=>z(v(v(U,e),t)),getCellIds:Fe,getCell:Me,hasTables:()=>!p(U),hasTable:e=>w(U,e),hasRow:(e,t)=>w(v(U,e),t),hasCell:(e,t,s)=>w(v(v(U,e),t),s),getJson:()=>i(U),getSchemaJson:()=>i(M),setTables:Ne,setTable:(e,t)=>me((()=>le(t,e)?ue(e,t):0)),setRow:(e,t,s)=>me((()=>ae(e,t,s)?fe(e,Te(e),t,s):0)),addRow:(e,t)=>xe((()=>{let s;return ae(e,s,t)&&fe(e,Te(e),s=ge(v(U,e)),t),s})),setPartialRow:(e,t,s)=>me((()=>{if(ae(e,t,s,1)){const n=Te(e);P(s,((s,r)=>be(e,n,t,r,s)))}})),setCell:(t,s,n,l)=>me((()=>g(oe(t,s,n,e(l)==r?l(Me(t,s,n)):l),(e=>be(t,Te(t),s,n,e))))),setJson:e=>{try{"{}"===e?je():Ne(u(e))}catch{}return Pe},setSchema:e=>me((()=>{if((t=(e=>K(e,(e=>K(e,(e=>{if(!K(e,((e,t)=>["type","default"].includes(t))))return!1;const t=e.type;return!(!T(t)&&t!=n||(H(e.default)!=t&&x(e,"default"),0))})))))(e))&&(ce(e),!p(U))){const e=ze();je(),Ne(e)}})),delTables:je,delTable:e=>me((()=>w(U,e)?we(e):0)),delRow:(e,t)=>me((()=>g(v(U,e),(s=>w(s,t)?pe(e,s,t):0)))),delCell:(e,t,s,n)=>me((()=>g(v(U,e),(r=>g(v(r,t),(l=>w(l,s)?Le(e,r,t,l,s,n):0)))))),delSchema:()=>me((()=>{ce({}),t=!1})),transaction:xe,forEachTable:e=>R(U,((t,s)=>e(s,(e=>R(t,((t,s)=>e(s,(e=>E(t,e))))))))),forEachRow:(e,t)=>R(v(U,e),((e,s)=>t(s,(t=>E(e,t))))),forEachCell:(e,t,s)=>E(v(v(U,e),t),s),addTablesListener:(e,t)=>te(e,V[t?1:0]),addTableIdsListener:(e,t)=>te(e,W[t?1:0]),addTableListener:(e,t,s)=>te(t,X[s?1:0],[e]),addRowIdsListener:(e,t,s)=>te(t,Y[s?1:0],[e]),addRowListener:(e,t,s,n)=>te(s,Z[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n)=>te(s,$[n?1:0],[e,t]),addCellListener:(e,t,s,n,r)=>te(n,_[r?1:0],[e,t,s]),addInvalidCellListener:(e,t,s,n,r)=>te(n,ee[r?1:0],[e,t,s]),callListener:e=>(re(e,[Oe,ke,Fe],(e=>b(e[2])?[]:[,,].fill(Me(...e)))),Pe),delListener:e=>(ne(e),Pe),getListenerStats:()=>({})};return N(Pe)};export{U as createStore};
|
package/lib/store.js.gz
CHANGED
|
Binary file
|
package/lib/tinybase.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{promises as e,watch as t}from"fs";const s=e=>typeof e,n=s(""),o=s(!0),r=s(0),a=s(s),i=(e,t)=>e.includes(t),d=(e,t)=>e.every(((s,n)=>0==n||t(e[n-1],s)<=0)),l=(e,t)=>e.sort(t),c=(e,t)=>e.forEach(t),u=e=>f(e,((e,t)=>e+t),0),h=e=>e.length,g=e=>0==h(e),f=(e,t,s)=>e.reduce(t,s),L=e=>e.slice(1),w=(e,t)=>e.push(t),v=e=>e.pop(),p=e=>JSON.stringify(e,((e,t)=>T(t,Map)?f([...t],((e,[t,s])=>(e[t]=s,e)),{}):t)),I=JSON.parse,S=Math.max,y=Math.min,R=isFinite,T=(e,t)=>e instanceof t,b=e=>null==e,C=(e,t,s)=>b(e)?s?.():t(e),m=e=>e==n||e==o,E=e=>s(e)==a,k=()=>{},M=e=>e.size,A=(e,t)=>e?.has(t)??!1,x=e=>b(e)||0==M(e),D=e=>[...e?.values()??[]],J=e=>e.clear(),F=(e,t)=>e?.forEach(t),z=(e,t)=>e?.delete(t),N=e=>new Map(e),O=(e=N)=>[e(),e()],j=e=>[...e?.keys()??[]],P=(e,t)=>e?.get(t),B=(e,t)=>F(e,((e,s)=>t(s,e))),H=(e,t,s)=>b(s)?(z(e,t),e):e?.set(t,s),W=(e,t,s,n)=>(A(e,t)||(n?.(s),e.set(t,s)),P(e,t)),q=(e,t)=>{const s={},n=t??(e=>e);return F(e,((e,t)=>s[t]=n(e))),s},G=(e,t)=>{const s=N(),n=t??(e=>e);return F(e,((e,t)=>s.set(t,n(e)))),s},K=e=>new Set(e),Q=(e,t)=>e?.add(t),U=(e,t,s)=>{const n=e.hasRow,o=N(),r=N(),a=N(),i=N(),d=N(),l=t=>C(P(d,t),(s=>{F(s,e.delListener),H(d,t)})),u=e=>{H(o,e),H(r,e),H(a,e),H(i,e),l(e)};return[()=>e,()=>j(o),e=>B(r,e),e=>A(r,e),e=>P(o,e),e=>P(r,e),(e,t)=>H(r,e,t),(u,h,g,f,L)=>{const w=N(),v=N();H(o,u,h),A(r,u)||(H(r,u,t()),H(a,u,N()),H(i,u,N()));const p=P(a,u),I=P(i,u),S=t=>{const o=s=>e.getCell(h,t,s),r=P(p,t),a=n(h,t)?s(f(o,t)):void 0;if(r!=a&&H(w,t,[r,a]),!b(L)){const e=P(I,t),s=n(h,t)?L(o,t):void 0;e!=s&&H(v,t,s)}},y=e=>{g((()=>{F(w,(([,e],t)=>H(p,t,e))),F(v,((e,t)=>H(I,t,e)))}),w,v,p,I,e),J(w),J(v)};B(p,S),e.hasTable(h)&&c(e.getRowIds(h),(e=>{A(p,e)||S(e)})),y(!0),l(u),H(d,u,K([e.addRowListener(h,null,((e,t,s)=>S(s))),e.addTableListener(h,(()=>y()))]))},u,()=>B(d,u)]},V=(e,t)=>s(e)==n?t=>t(e):e??(()=>t??""),X=e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))},Y=(e,t,s)=>h(s)<2?Q(g(s)?e:W(e,s[0],K()),t):Y(W(e,s[0],N()),t,L(s)),Z=e=>{const t=(s,n,...o)=>C(s,(s=>g(o)?e(s,n):c([o[0],null],(e=>t(P(s,e),n,...L(o))))));return t},$=e=>{let t,s=0;const n=[],o=N();return[(r,a,i=[])=>{t??=e();const d=v(n)??""+s++;return H(o,d,[r,a,i]),Y(a,d,i),d},(e,s=[],...n)=>Z(F)(e,(e=>C(P(o,e),(([e])=>e(t,...s,...n)))),...s),e=>C(P(o,e),(([,t,s])=>(Z(z)(t,e,...s),H(o,e),h(n)<1e3&&w(n,e),s)),(()=>[])),(e,s,n)=>C(P(o,e),(([e,,o])=>{const r=(...a)=>{const i=h(a);i==h(o)?e(t,...a,...n(a)):b(o[i])?c(s[i](...a),(e=>r(...a,e))):r(...a,o[i])};r()}))]},_=Object,ee=_.keys,te=_.isFrozen,se=_.freeze,ne=(e,t)=>!b(((e,t)=>C(e,(e=>e[t])))(e,t)),oe=(e,t)=>delete e[t],re=(e,t)=>c(_.entries(e),(([e,s])=>t(s,e))),ae=X((e=>{let t,s,n,o=100,r=N(),a=1;const d=K(),l=N(),[u,f,L]=$((()=>G)),p=N(),I=N(),S=[],y=[],R=(t,s)=>{a=0,e.transaction((()=>F(P(p,s),((s,n)=>F(s,((s,o)=>F(s,((s,r)=>b(s[t])?e.delCell(n,o,r,!0):e.setCell(n,o,r,s[t]))))))))),a=1},T=e=>{H(p,e),H(I,e),f(l,[e])},m=(e,t)=>c(((e,t)=>e.splice(0,t))(e,t??h(e)),T),E=()=>m(S,h(S)-o),k=e.addCellListener(null,null,null,((e,s,o,i,d,l)=>{if(a){C(t,(()=>{w(S,t),E(),m(y),t=void 0,n=1}));const e=W(r,s,N()),a=W(e,o,N()),c=W(a,i,[void 0,void 0],(e=>e[0]=l));c[1]=d,c[0]===c[1]&&x(H(a,i))&&x(H(e,o))&&x(H(r,s))&&(t=v(S),n=1),z()}})),M=(e="")=>(b(t)&&(t=""+s++,H(p,t,r),j(t,e),r=N(),n=1),t),D=()=>{g(S)||(y.unshift(M()),R(0,t),t=v(S),n=1)},J=()=>{g(y)||(w(S,t),t=y.shift(),R(1,t),n=1)},z=()=>{n&&(f(d),n=0)},O=e=>{const t=M(e);return z(),t},j=(e,t)=>(q(e)&&P(I,e)!==t&&(H(I,e,t),f(l,[e])),G),q=e=>A(p,e),G={setSize:e=>(o=e,E(),G),addCheckpoint:O,setCheckpoint:j,getStore:()=>e,getCheckpointIds:()=>[[...S],t,[...y]],forEachCheckpoint:e=>B(I,e),hasCheckpoint:q,getCheckpoint:e=>P(I,e),goBackward:()=>(D(),z(),G),goForward:()=>(J(),z(),G),goTo:e=>{const s=i(S,e)?D:i(y,e)?J:null;for(;!b(s)&&e!=t;)s();return z(),G},addCheckpointIdsListener:e=>u(e,d),addCheckpointListener:(e,t)=>u(t,l,[e]),delListener:e=>(L(e),G),clear:()=>(m(S),m(y),b(t)||T(t),t=void 0,s=0,O(),G),destroy:()=>{e.delListener(k)},getListenerStats:()=>({})};return se(G.clear())})),ie=(e,t)=>e<t?-1:1,de=X((e=>{const t=N(),s=N(),[n,o,r,a,i,c,u,h,g,f]=U(e,N,(e=>b(e)?"":e+"")),[L,w,v]=$((()=>I)),p=(t,s,n)=>{const o=i(t);F(n,((t,n)=>s(n,(s=>F(t,(t=>s(t,(s=>e.forEachCell(o,t,s)))))))))},I={setIndexDefinition:(e,n,o,r,a,i=ie)=>{const g=b(a)?void 0:([e],[t])=>a(e,t);return h(e,n,((n,o,a,h,f,L)=>{let v=0;const p=K(),I=K(),S=c(e);if(F(o,(([e,t],s)=>{b(e)||(Q(p,e),C(P(S,e),(t=>{z(t,s),x(t)&&(H(S,e),v=1)}))),b(t)||(Q(p,t),A(S,t)||(H(S,t,K()),v=1),Q(P(S,t),s),b(r)||Q(I,t))})),n(),x(f)||(L?B(S,(e=>Q(I,e))):B(a,(e=>C(P(h,e),(e=>Q(I,e))))),F(I,(e=>{const t=(t,s)=>i(P(f,t),P(f,s),e),s=[...P(S,e)];d(s,t)||(H(S,e,K(l(s,t))),Q(p,e))}))),(v||L)&&!b(g)){const t=[...S];d(t,g)||(u(e,N(l(t,g))),v=1)}v&&w(t,[e]),F(p,(t=>w(s,[e,t])))}),V(o),C(r,V)),I},delIndexDefinition:e=>(g(e),I),getStore:n,getIndexIds:o,forEachIndex:e=>r(((t,s)=>e(t,(e=>p(t,e,s))))),forEachSlice:(e,t)=>p(e,t,c(e)),hasIndex:a,hasSlice:(e,t)=>A(c(e),t),getTableId:i,getSliceIds:e=>j(c(e)),getSliceRowIds:(e,t)=>D(P(c(e),t)),addSliceIdsListener:(e,s)=>L(s,t,[e]),addSliceRowIdsListener:(e,t,n)=>L(n,s,[e,t]),delListener:e=>(v(e),I),destroy:f,getListenerStats:()=>({})};return se(I)})),le=N([["avg",[(e,t)=>u(e)/t,(e,t,s)=>e+(t-e)/(s+1),(e,t,s)=>e+(e-t)/(s-1),(e,t,s,n)=>e+(t-s)/n]],["max",[e=>S(...e),(e,t)=>S(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:S(t,e)]],["min",[e=>y(...e),(e,t)=>y(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:y(t,e)]],["sum",[e=>u(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,s)=>e-s+t]]]),ce=X((e=>{const t=N(),[s,n,o,r,a,i,d,l,c,u]=U(e,k,(e=>isNaN(e)||b(e)||!0===e||!1===e||""===e?void 0:1*e)),[h,g,f]=$((()=>L)),L={setMetricDefinition:(e,s,n,o,r,a,c)=>{const u=E(n)?[n,r,a,c]:P(le,n)??P(le,"sum");return l(e,s,((s,n,o,r,a,l)=>{let c=i(e),h=M(r);const[f,L,w,v]=u;l=l||b(c),F(n,(([e,t])=>{l||(c=b(e)?L?.(c,t,h++):b(t)?w?.(c,e,h--):v?.(c,t,e,h)),l=l||b(c)})),s(),x(r)?c=void 0:l&&(c=f(D(r),M(r))),R(c)||(c=void 0);const p=i(e);c!=p&&(d(e,c),g(t,[e],c,p))}),V(o,1)),L},delMetricDefinition:e=>(c(e),L),getStore:s,getMetricIds:n,forEachMetric:o,hasMetric:r,getTableId:a,getMetric:i,addMetricListener:(e,s)=>h(s,t,[e]),delListener:e=>(f(e),L),destroy:u,getListenerStats:()=>({})};return se(L)})),ue=(e,t,s,n,o)=>{let r,a=0;const i={load:async s=>{if(2!=a){a=1;const n=await t();b(n)||""==n?e.setTables(s):e.setJson(n),a=0}return i},startAutoLoad:async e=>(i.stopAutoLoad(),await i.load(e),n(i.load),i),stopAutoLoad:()=>(o(),i),save:async()=>(1!=a&&(a=2,await s(e.getJson()),a=0),i),startAutoSave:async()=>(await i.stopAutoSave().save(),r=e.addTablesListener((()=>i.save())),i),stopAutoSave:()=>(C(r,e.delListener),i),getStore:()=>e,destroy:()=>i.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return se(i)},he=globalThis.window,ge=(e,t,s)=>{let n;return ue(e,(async()=>s.getItem(t)),(async e=>s.setItem(t,e)),(e=>{n=n=>{n.storageArea===s&&n.key===t&&e()},he.addEventListener("storage",n)}),(()=>{he.removeEventListener("storage",n),n=void 0}))},fe=(e,t)=>ge(e,t,localStorage),Le=(e,t)=>ge(e,t,sessionStorage),we=(s,n)=>{let o;return ue(s,(async()=>{try{return await e.readFile(n,"utf8")}catch{}}),(async t=>{try{await e.writeFile(n,t,"utf8")}catch{}}),(e=>{o=t(n,e)}),(()=>{o?.close(),o=void 0}))},ve=e=>e.headers.get("ETag"),pe=(e,t,s,n)=>{let o,r;return ue(e,(async()=>{const e=await fetch(t);return r=ve(e),e.text()}),(async e=>await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:e})),(e=>{o=setInterval((async()=>{const s=await fetch(t,{method:"HEAD"}),n=ve(s);b(r)||b(n)||n==r||(r=n,e())}),1e3*n)}),(()=>{C(o,clearInterval),o=void 0}))},Ie=X((e=>{const t=N(),s=N(),n=N(),o=N(),[r,a,i,d,l,c,u,h,g,f]=U(e,(()=>[N(),N(),N(),N()]),(e=>b(e)?void 0:e+"")),[L,w,v]=$((()=>y)),p=(e,t,s)=>C(c(e),(([n,,o])=>{if(!A(o,t)){const r=K();if(l(e)!=S(e))Q(r,t);else{let e=t;for(;!b(e)&&!A(r,e);)Q(r,e),e=P(n,e)}if(s)return r;H(o,t,r)}return P(o,t)})),I=(e,t)=>C(c(e),(([,,e])=>H(e,t))),S=e=>P(t,e),y={setRelationshipDefinition:(e,r,a,i)=>(H(t,e,a),h(e,r,((t,r)=>{const a=K(),i=K(),d=K(),[l,u]=c(e);F(r,(([t,s],n)=>{b(t)||(Q(i,t),C(P(u,t),(e=>{z(e,n),x(e)&&H(u,t)}))),b(s)||(Q(i,s),A(u,s)||H(u,s,K()),Q(P(u,s),n)),Q(a,n),H(l,n,s),B(P(o,e),(t=>{A(p(e,t),n)&&Q(d,t)}))})),t(),F(a,(t=>w(s,[e,t]))),F(i,(t=>w(n,[e,t]))),F(d,(t=>{I(e,t),w(o,[e,t])}))}),V(i)),y),delRelationshipDefinition:e=>(H(t,e),g(e),y),getStore:r,getRelationshipIds:a,forEachRelationship:t=>i((s=>t(s,(t=>e.forEachRow(l(s),t))))),hasRelationship:d,getLocalTableId:l,getRemoteTableId:S,getRemoteRowId:(e,t)=>P(c(e)?.[0],t),getLocalRowIds:(e,t)=>D(P(c(e)?.[1],t)),getLinkedRowIds:(e,t)=>b(c(e))?[t]:D(p(e,t,!0)),addRemoteRowIdListener:(e,t,n)=>L(n,s,[e,t]),addLocalRowIdsListener:(e,t,s)=>L(s,n,[e,t]),addLinkedRowIdsListener:(e,t,s)=>(p(e,t),L(s,o,[e,t])),delListener:e=>(I(...v(e)),y),destroy:f,getListenerStats:()=>({})};return se(y)})),Se=(e,t,s,n=H)=>{const o=(r=j(e),a=e=>!ne(t,e),r.filter(a));var r,a;return c(ee(t),(n=>s(e,n,t[n]))),c(o,(t=>n(e,t))),e},ye=e=>{const t=s(e);return m(t)||t==r&&R(e)?t:void 0},Re=(e,t)=>!(b(e)||!(e=>T(e,_)&&e.constructor==_)(e)||te(e))&&(re(e,((s,n)=>{t(s,n)||oe(e,n)})),!(e=>g(ee(e)))(e)),Te=(e,t,s)=>H(e,t,P(e,t)==-s?void 0:s),be=()=>{let e,t=0,s=0;const n=N(),o=N(),a=N(),d=N(),l=N(),u=N(),h=N(),g=N(),f=O(K),L=O(K),v=O(),S=O(),y=O(),R=O(),T=O(),k=O(),[M,D,z,Q]=$((()=>Fe)),U=(t,s)=>(!e||A(u,s))&&Re(t,((e,t)=>V(s,t,e))),V=(e,t,s,n)=>Re(n?s:Y(s,e),((n,o)=>C(X(e,t,o,n),(e=>(s[o]=e,!0)),(()=>!1)))),X=(t,s,n,o)=>e?C(P(P(u,t),n),(e=>ye(o)!=e.type?pe(t,s,n,o,e.default):o)):b(ye(o))?pe(t,s,n,o):o,Y=(e,t)=>(C(P(h,t),(t=>re(t,((t,s)=>{ne(e,s)||(e[s]=t)})))),e),Z=e=>Se(u,e,((e,t,s)=>{const n={};Se(W(u,t,N()),s,((e,t,s)=>{H(e,t,s),C(s.default,(e=>n[t]=e))})),H(h,t,n)}),((e,t)=>{H(u,t),H(h,t)})),_=e=>Se(g,e,((e,t,s)=>ee(t,s)),((e,t)=>ue(t))),ee=(e,t)=>Se(W(g,e,N(),(()=>fe(e,1))),t,((t,s,n)=>te(e,t,s,n)),((t,s)=>he(e,t,s))),te=(e,t,s,n,o)=>Se(W(t,s,N(),(()=>Le(e,s,1))),n,((t,n,o)=>ae(e,s,t,n,o)),((n,r)=>ge(e,t,s,n,r,o))),ae=(e,t,s,n,o)=>{A(s,n)||we(e,t,n,1);const r=P(s,n);o!==r&&(ve(e,t,n,r),H(s,n,o))},ie=(e,t,s)=>Je((()=>te(e,ce(e),t,s))),de=(e,t,s,n,o)=>C(P(t,s),(t=>ae(e,s,t,n,o)),(()=>te(e,t,s,Y({[n]:o},e)))),le=e=>{const s=""+t++;return A(e,s)?le(e):s},ce=e=>P(g,e)??ee(e,{}),ue=e=>ee(e,{}),he=(e,t,s)=>te(e,t,s,{},!0),ge=(e,t,s,n,o,r)=>{const a=P(h,e)?.[o];if(!b(a)&&!r)return ae(e,s,n,o,a);const i=t=>{ve(e,s,t,P(n,t)),we(e,s,t,-1),H(n,t)};b(a)?i(o):B(n,i),x(n)&&(Le(e,s,-1),x(H(t,s))&&(fe(e,-1),H(g,e)))},fe=(e,t)=>Te(n,e,t),Le=(e,t,s)=>Te(W(o,e,N()),t,s),we=(e,t,s,n)=>Te(W(W(a,e,N()),t,N()),s,n),ve=(e,t,s,n)=>W(W(W(d,e,N()),t,N()),s,n),pe=(e,t,s,n,o)=>(w(W(W(W(l,e,N()),t,N()),s,[]),n),o),Ie=(e,t,s)=>{const n=P(P(d,e),t),o=Ae(e,t,s);return A(n,s)?[!0,P(n,s),o]:[!1,o,o]},be=e=>{x(k[e])||F(e?G(l,(e=>G(e,G))):l,((t,s)=>F(t,((t,n)=>F(t,((t,o)=>D(k[e],[s,n,o],t)))))))},Ce=e=>{const t=x(R[e])&&x(S[e])&&x(L[e]),s=x(T[e])&&x(y[e])&&x(v[e])&&x(f[e]);if(t&&s)return;const r=e?[G(n),G(o,G),G(a,(e=>G(e,G))),G(d,(e=>G(e,G)))]:[n,o,a,d];if(t||(F(r[2],((t,s)=>F(t,((t,n)=>{x(t)||D(R[e],[s,n])})))),F(r[1],((t,s)=>{x(t)||D(S[e],[s])})),x(r[0])||D(L[e])),!s){let t;F(r[3],((s,n)=>{let o;F(s,((s,r)=>{let a;F(s,((s,i)=>{const d=Ae(n,r,i);d!==s&&(D(T[e],[n,r,i],d,s,Ie),t=o=a=1)})),a&&D(y[e],[n,r],Ie)})),o&&D(v[e],[n],Ie)})),t&&D(f[e],[],Ie)}},me=()=>q(g,(e=>q(e,q))),Ee=()=>j(g),ke=e=>j(P(g,e)),Me=(e,t)=>j(P(P(g,e),t)),Ae=(e,t,s)=>P(P(P(g,e),t),s),xe=e=>((e=>Re(e,U))(e)?Je((()=>_(e))):Je(),Fe),De=()=>(Je((()=>_({}))),Fe),Je=e=>{if(-1==s)return;s++;const t=e?.();return s--,0==s&&(s=1,be(1),Ce(1),s=-1,be(0),Ce(0),s=0,c([d,l,n,o,a],J)),t},Fe={getTables:me,getTableIds:Ee,getTable:e=>q(P(g,e),q),getRowIds:ke,getRow:(e,t)=>q(P(P(g,e),t)),getCellIds:Me,getCell:Ae,hasTables:()=>!x(g),hasTable:e=>A(g,e),hasRow:(e,t)=>A(P(g,e),t),hasCell:(e,t,s)=>A(P(P(g,e),t),s),getJson:()=>p(g),getSchemaJson:()=>p(u),setTables:xe,setTable:(e,t)=>(U(t,e)?Je((()=>ee(e,t))):Je(),Fe),setRow:(e,t,s)=>(V(e,t,s)?ie(e,t,s):Je(),Fe),addRow:(e,t)=>{let s;return V(e,s,t)?ie(e,s=le(P(g,e)),t):Je(),s},setPartialRow:(e,t,s)=>(V(e,t,s,1)?Je((()=>{const n=ce(e);re(s,((s,o)=>de(e,n,t,o,s)))})):Je(),Fe),setCell:(e,t,s,n)=>(C(X(e,t,s,E(n)?n(Ae(e,t,s)):n),(n=>Je((()=>de(e,ce(e),t,s,n)))),Je),Fe),setJson:e=>{try{"{}"===e?De():xe(I(e))}catch{}return Fe},setSchema:t=>{if((e=(e=>Re(e,(e=>Re(e,(e=>{if(!Re(e,((e,t)=>i(["type","default"],t))))return!1;const t=e.type;return!(!m(t)&&t!=r||(ye(e.default)!=t&&oe(e,"default"),0))})))))(t))&&(Z(t),!x(g))){const e=me();De(),xe(e)}return Fe},delTables:De,delTable:e=>(A(g,e)&&Je((()=>ue(e))),Fe),delRow:(e,t)=>(C(P(g,e),(s=>{A(s,t)&&Je((()=>he(e,s,t)))})),Fe),delCell:(e,t,s,n)=>(C(P(g,e),(o=>C(P(o,t),(r=>{A(r,s)&&Je((()=>ge(e,o,t,r,s,n)))})))),Fe),delSchema:()=>(Z({}),e=!1,Fe),transaction:Je,forEachTable:e=>F(g,((t,s)=>e(s,(e=>F(t,((t,s)=>e(s,(e=>B(t,e))))))))),forEachRow:(e,t)=>F(P(g,e),((e,s)=>t(s,(t=>B(e,t))))),forEachCell:(e,t,s)=>B(P(P(g,e),t),s),addTablesListener:(e,t)=>M(e,f[t?1:0]),addTableIdsListener:(e,t)=>M(e,L[t?1:0]),addTableListener:(e,t,s)=>M(t,v[s?1:0],[e]),addRowIdsListener:(e,t,s)=>M(t,S[s?1:0],[e]),addRowListener:(e,t,s,n)=>M(s,y[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n)=>M(s,R[n?1:0],[e,t]),addCellListener:(e,t,s,n,o)=>M(n,T[o?1:0],[e,t,s]),addInvalidCellListener:(e,t,s,n,o)=>M(n,k[o?1:0],[e,t,s]),callListener:e=>(Q(e,[Ee,ke,Me],(e=>b(e[2])?[]:[,,].fill(Ae(...e)))),Fe),delListener:e=>(z(e),Fe),getListenerStats:()=>({})};return se(Fe)};export{ae as createCheckpoints,ue as createCustomPersister,we as createFilePersister,de as createIndexes,fe as createLocalPersister,ce as createMetrics,Ie as createRelationships,pe as createRemotePersister,Le as createSessionPersister,be as createStore,ie as defaultSorter};
|
|
1
|
+
import{promises as e,watch as t}from"fs";const s=e=>typeof e,n=s(""),o=s(!0),a=s(0),r=s(s),i=(e,t)=>e.includes(t),d=(e,t)=>e.every(((s,n)=>0==n||t(e[n-1],s)<=0)),l=(e,t)=>e.sort(t),c=(e,t)=>e.forEach(t),u=e=>f(e,((e,t)=>e+t),0),h=e=>e.length,g=e=>0==h(e),f=(e,t,s)=>e.reduce(t,s),L=e=>e.slice(1),w=(e,t)=>e.push(t),v=e=>e.pop(),p=e=>JSON.stringify(e,((e,t)=>T(t,Map)?f([...t],((e,[t,s])=>(e[t]=s,e)),{}):t)),I=JSON.parse,S=Math.max,y=Math.min,R=isFinite,T=(e,t)=>e instanceof t,b=e=>null==e,C=(e,t,s)=>b(e)?s?.():t(e),m=e=>e==n||e==o,E=e=>s(e)==r,k=()=>{},M=e=>e.size,A=(e,t)=>e?.has(t)??!1,x=e=>b(e)||0==M(e),D=e=>[...e?.values()??[]],J=e=>e.clear(),F=(e,t)=>e?.forEach(t),z=(e,t)=>e?.delete(t),N=e=>new Map(e),O=(e=N)=>[e(),e()],j=e=>[...e?.keys()??[]],P=(e,t)=>e?.get(t),B=(e,t)=>F(e,((e,s)=>t(s,e))),H=(e,t,s)=>b(s)?(z(e,t),e):e?.set(t,s),W=(e,t,s,n)=>(A(e,t)||(n?.(s),e.set(t,s)),P(e,t)),q=(e,t)=>{const s={},n=t??(e=>e);return F(e,((e,t)=>s[t]=n(e))),s},G=(e,t)=>{const s=N(),n=t??(e=>e);return F(e,((e,t)=>s.set(t,n(e)))),s},K=e=>new Set(e),Q=(e,t)=>e?.add(t),U=(e,t,s)=>{const n=e.hasRow,o=N(),a=N(),r=N(),i=N(),d=N(),l=t=>C(P(d,t),(s=>{F(s,e.delListener),H(d,t)})),u=e=>{H(o,e),H(a,e),H(r,e),H(i,e),l(e)};return[()=>e,()=>j(o),e=>B(a,e),e=>A(a,e),e=>P(o,e),e=>P(a,e),(e,t)=>H(a,e,t),(u,h,g,f,L)=>{const w=N(),v=N();H(o,u,h),A(a,u)||(H(a,u,t()),H(r,u,N()),H(i,u,N()));const p=P(r,u),I=P(i,u),S=t=>{const o=s=>e.getCell(h,t,s),a=P(p,t),r=n(h,t)?s(f(o,t)):void 0;if(a!=r&&H(w,t,[a,r]),!b(L)){const e=P(I,t),s=n(h,t)?L(o,t):void 0;e!=s&&H(v,t,s)}},y=e=>{g((()=>{F(w,(([,e],t)=>H(p,t,e))),F(v,((e,t)=>H(I,t,e)))}),w,v,p,I,e),J(w),J(v)};B(p,S),e.hasTable(h)&&c(e.getRowIds(h),(e=>{A(p,e)||S(e)})),y(!0),l(u),H(d,u,K([e.addRowListener(h,null,((e,t,s)=>S(s))),e.addTableListener(h,(()=>y()))]))},u,()=>B(d,u)]},V=(e,t)=>s(e)==n?t=>t(e):e??(()=>t??""),X=e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))},Y=(e,t,s)=>h(s)<2?Q(g(s)?e:W(e,s[0],K()),t):Y(W(e,s[0],N()),t,L(s)),Z=e=>{const t=(s,n,...o)=>C(s,(s=>g(o)?e(s,n):c([o[0],null],(e=>t(P(s,e),n,...L(o))))));return t},$=e=>{let t,s=0;const n=[],o=N();return[(a,r,i=[])=>{t??=e();const d=v(n)??""+s++;return H(o,d,[a,r,i]),Y(r,d,i),d},(e,s=[],...n)=>Z(F)(e,(e=>C(P(o,e),(([e])=>e(t,...s,...n)))),...s),e=>C(P(o,e),(([,t,s])=>(Z(z)(t,e,...s),H(o,e),h(n)<1e3&&w(n,e),s)),(()=>[])),(e,s,n)=>C(P(o,e),(([e,,o])=>{const a=(...r)=>{const i=h(r);i==h(o)?e(t,...r,...n(r)):b(o[i])?c(s[i](...r),(e=>a(...r,e))):a(...r,o[i])};a()}))]},_=Object,ee=_.keys,te=_.isFrozen,se=_.freeze,ne=(e,t)=>!b(((e,t)=>C(e,(e=>e[t])))(e,t)),oe=(e,t)=>delete e[t],ae=(e,t)=>c(_.entries(e),(([e,s])=>t(s,e))),re=e=>g(ee(e)),ie=X((e=>{let t,s,n,o=100,a=N(),r=1;const d=K(),l=N(),[u,f,L]=$((()=>G)),p=N(),I=N(),S=[],y=[],R=(t,s)=>{r=0,e.transaction((()=>F(P(p,s),((s,n)=>F(s,((s,o)=>F(s,((s,a)=>b(s[t])?e.delCell(n,o,a,!0):e.setCell(n,o,a,s[t]))))))))),r=1},T=e=>{H(p,e),H(I,e),f(l,[e])},m=(e,t)=>c(((e,t)=>e.splice(0,t))(e,t??h(e)),T),E=()=>m(S,h(S)-o),k=e.addCellListener(null,null,null,((e,s,o,i,d,l)=>{if(r){C(t,(()=>{w(S,t),E(),m(y),t=void 0,n=1}));const e=W(a,s,N()),r=W(e,o,N()),c=W(r,i,[void 0,void 0],(e=>e[0]=l));c[1]=d,c[0]===c[1]&&x(H(r,i))&&x(H(e,o))&&x(H(a,s))&&(t=v(S),n=1),z()}})),M=(e="")=>(b(t)&&(t=""+s++,H(p,t,a),j(t,e),a=N(),n=1),t),D=()=>{g(S)||(y.unshift(M()),R(0,t),t=v(S),n=1)},J=()=>{g(y)||(w(S,t),t=y.shift(),R(1,t),n=1)},z=()=>{n&&(f(d),n=0)},O=e=>{const t=M(e);return z(),t},j=(e,t)=>(q(e)&&P(I,e)!==t&&(H(I,e,t),f(l,[e])),G),q=e=>A(p,e),G={setSize:e=>(o=e,E(),G),addCheckpoint:O,setCheckpoint:j,getStore:()=>e,getCheckpointIds:()=>[[...S],t,[...y]],forEachCheckpoint:e=>B(I,e),hasCheckpoint:q,getCheckpoint:e=>P(I,e),goBackward:()=>(D(),z(),G),goForward:()=>(J(),z(),G),goTo:e=>{const s=i(S,e)?D:i(y,e)?J:null;for(;!b(s)&&e!=t;)s();return z(),G},addCheckpointIdsListener:e=>u(e,d),addCheckpointListener:(e,t)=>u(t,l,[e]),delListener:e=>(L(e),G),clear:()=>(m(S),m(y),b(t)||T(t),t=void 0,s=0,O(),G),destroy:()=>{e.delListener(k)},getListenerStats:()=>({})};return se(G.clear())})),de=(e,t)=>e<t?-1:1,le=X((e=>{const t=N(),s=N(),[n,o,a,r,i,c,u,h,g,f]=U(e,N,(e=>b(e)?"":e+"")),[L,w,v]=$((()=>I)),p=(t,s,n)=>{const o=i(t);F(n,((t,n)=>s(n,(s=>F(t,(t=>s(t,(s=>e.forEachCell(o,t,s)))))))))},I={setIndexDefinition:(e,n,o,a,r,i=de)=>{const g=b(r)?void 0:([e],[t])=>r(e,t);return h(e,n,((n,o,r,h,f,L)=>{let v=0;const p=K(),I=K(),S=c(e);if(F(o,(([e,t],s)=>{b(e)||(Q(p,e),C(P(S,e),(t=>{z(t,s),x(t)&&(H(S,e),v=1)}))),b(t)||(Q(p,t),A(S,t)||(H(S,t,K()),v=1),Q(P(S,t),s),b(a)||Q(I,t))})),n(),x(f)||(L?B(S,(e=>Q(I,e))):B(r,(e=>C(P(h,e),(e=>Q(I,e))))),F(I,(e=>{const t=(t,s)=>i(P(f,t),P(f,s),e),s=[...P(S,e)];d(s,t)||(H(S,e,K(l(s,t))),Q(p,e))}))),(v||L)&&!b(g)){const t=[...S];d(t,g)||(u(e,N(l(t,g))),v=1)}v&&w(t,[e]),F(p,(t=>w(s,[e,t])))}),V(o),C(a,V)),I},delIndexDefinition:e=>(g(e),I),getStore:n,getIndexIds:o,forEachIndex:e=>a(((t,s)=>e(t,(e=>p(t,e,s))))),forEachSlice:(e,t)=>p(e,t,c(e)),hasIndex:r,hasSlice:(e,t)=>A(c(e),t),getTableId:i,getSliceIds:e=>j(c(e)),getSliceRowIds:(e,t)=>D(P(c(e),t)),addSliceIdsListener:(e,s)=>L(s,t,[e]),addSliceRowIdsListener:(e,t,n)=>L(n,s,[e,t]),delListener:e=>(v(e),I),destroy:f,getListenerStats:()=>({})};return se(I)})),ce=N([["avg",[(e,t)=>u(e)/t,(e,t,s)=>e+(t-e)/(s+1),(e,t,s)=>e+(e-t)/(s-1),(e,t,s,n)=>e+(t-s)/n]],["max",[e=>S(...e),(e,t)=>S(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:S(t,e)]],["min",[e=>y(...e),(e,t)=>y(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:y(t,e)]],["sum",[e=>u(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,s)=>e-s+t]]]),ue=X((e=>{const t=N(),[s,n,o,a,r,i,d,l,c,u]=U(e,k,(e=>isNaN(e)||b(e)||!0===e||!1===e||""===e?void 0:1*e)),[h,g,f]=$((()=>L)),L={setMetricDefinition:(e,s,n,o,a,r,c)=>{const u=E(n)?[n,a,r,c]:P(ce,n)??P(ce,"sum");return l(e,s,((s,n,o,a,r,l)=>{let c=i(e),h=M(a);const[f,L,w,v]=u;l=l||b(c),F(n,(([e,t])=>{l||(c=b(e)?L?.(c,t,h++):b(t)?w?.(c,e,h--):v?.(c,t,e,h)),l=l||b(c)})),s(),x(a)?c=void 0:l&&(c=f(D(a),M(a))),R(c)||(c=void 0);const p=i(e);c!=p&&(d(e,c),g(t,[e],c,p))}),V(o,1)),L},delMetricDefinition:e=>(c(e),L),getStore:s,getMetricIds:n,forEachMetric:o,hasMetric:a,getTableId:r,getMetric:i,addMetricListener:(e,s)=>h(s,t,[e]),delListener:e=>(f(e),L),destroy:u,getListenerStats:()=>({})};return se(L)})),he=(e,t,s,n,o)=>{let a,r=0;const i={load:async s=>{if(2!=r){r=1;const n=await t();b(n)||""==n?e.setTables(s):e.setJson(n),r=0}return i},startAutoLoad:async e=>(i.stopAutoLoad(),await i.load(e),n(i.load),i),stopAutoLoad:()=>(o(),i),save:async()=>(1!=r&&(r=2,await s(e.getJson()),r=0),i),startAutoSave:async()=>(await i.stopAutoSave().save(),a=e.addTablesListener((()=>i.save())),i),stopAutoSave:()=>(C(a,e.delListener),i),getStore:()=>e,destroy:()=>i.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return se(i)},ge=globalThis.window,fe=(e,t,s)=>{let n;return he(e,(async()=>s.getItem(t)),(async e=>s.setItem(t,e)),(e=>{n=n=>{n.storageArea===s&&n.key===t&&e()},ge.addEventListener("storage",n)}),(()=>{ge.removeEventListener("storage",n),n=void 0}))},Le=(e,t)=>fe(e,t,localStorage),we=(e,t)=>fe(e,t,sessionStorage),ve=(s,n)=>{let o;return he(s,(async()=>{try{return await e.readFile(n,"utf8")}catch{}}),(async t=>{try{await e.writeFile(n,t,"utf8")}catch{}}),(e=>{o=t(n,e)}),(()=>{o?.close(),o=void 0}))},pe=e=>e.headers.get("ETag"),Ie=(e,t,s,n)=>{let o,a;return he(e,(async()=>{const e=await fetch(t);return a=pe(e),e.text()}),(async e=>await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:e})),(e=>{o=setInterval((async()=>{const s=await fetch(t,{method:"HEAD"}),n=pe(s);b(a)||b(n)||n==a||(a=n,e())}),1e3*n)}),(()=>{C(o,clearInterval),o=void 0}))},Se=X((e=>{const t=N(),s=N(),n=N(),o=N(),[a,r,i,d,l,c,u,h,g,f]=U(e,(()=>[N(),N(),N(),N()]),(e=>b(e)?void 0:e+"")),[L,w,v]=$((()=>y)),p=(e,t,s)=>C(c(e),(([n,,o])=>{if(!A(o,t)){const a=K();if(l(e)!=S(e))Q(a,t);else{let e=t;for(;!b(e)&&!A(a,e);)Q(a,e),e=P(n,e)}if(s)return a;H(o,t,a)}return P(o,t)})),I=(e,t)=>C(c(e),(([,,e])=>H(e,t))),S=e=>P(t,e),y={setRelationshipDefinition:(e,a,r,i)=>(H(t,e,r),h(e,a,((t,a)=>{const r=K(),i=K(),d=K(),[l,u]=c(e);F(a,(([t,s],n)=>{b(t)||(Q(i,t),C(P(u,t),(e=>{z(e,n),x(e)&&H(u,t)}))),b(s)||(Q(i,s),A(u,s)||H(u,s,K()),Q(P(u,s),n)),Q(r,n),H(l,n,s),B(P(o,e),(t=>{A(p(e,t),n)&&Q(d,t)}))})),t(),F(r,(t=>w(s,[e,t]))),F(i,(t=>w(n,[e,t]))),F(d,(t=>{I(e,t),w(o,[e,t])}))}),V(i)),y),delRelationshipDefinition:e=>(H(t,e),g(e),y),getStore:a,getRelationshipIds:r,forEachRelationship:t=>i((s=>t(s,(t=>e.forEachRow(l(s),t))))),hasRelationship:d,getLocalTableId:l,getRemoteTableId:S,getRemoteRowId:(e,t)=>P(c(e)?.[0],t),getLocalRowIds:(e,t)=>D(P(c(e)?.[1],t)),getLinkedRowIds:(e,t)=>b(c(e))?[t]:D(p(e,t,!0)),addRemoteRowIdListener:(e,t,n)=>L(n,s,[e,t]),addLocalRowIdsListener:(e,t,s)=>L(s,n,[e,t]),addLinkedRowIdsListener:(e,t,s)=>(p(e,t),L(s,o,[e,t])),delListener:e=>(I(...v(e)),y),destroy:f,getListenerStats:()=>({})};return se(y)})),ye=(e,t,s,n=H)=>{const o=(a=j(e),r=e=>!ne(t,e),a.filter(r));var a,r;return c(ee(t),(n=>s(e,n,t[n]))),c(o,(t=>n(e,t))),e},Re=e=>{const t=s(e);return m(t)||t==a&&R(e)?t:void 0},Te=(e,t,s)=>b(e)||!(e=>T(e,_)&&e.constructor==_)(e)||re(e)||te(e)?(s?.(),!1):(ae(e,((s,n)=>{t(s,n)||oe(e,n)})),!re(e)),be=(e,t,s)=>H(e,t,P(e,t)==-s?void 0:s),Ce=()=>{let e,t=0,s=0;const n=N(),o=N(),r=N(),d=N(),l=N(),u=N(),h=N(),g=N(),f=O(K),L=O(K),v=O(),S=O(),y=O(),R=O(),T=O(),k=O(),[M,D,z,Q]=$((()=>Fe)),U=(t,s)=>(!e||A(u,s)||ve(s))&&Te(t,((e,t)=>V(s,t,e)),(()=>ve(s))),V=(e,t,s,n)=>Te(n?s:Y(s,e),((n,o)=>C(X(e,t,o,n),(e=>(s[o]=e,!0)),(()=>!1))),(()=>ve(e,t))),X=(t,s,n,o)=>e?C(P(P(u,t),n),(e=>Re(o)!=e.type?ve(t,s,n,o,e.default):o),(()=>ve(t,s,n,o))):b(Re(o))?ve(t,s,n,o):o,Y=(e,t)=>(C(P(h,t),(t=>ae(t,((t,s)=>{ne(e,s)||(e[s]=t)})))),e),Z=e=>ye(u,e,((e,t,s)=>{const n={};ye(W(u,t,N()),s,((e,t,s)=>{H(e,t,s),C(s.default,(e=>n[t]=e))})),H(h,t,n)}),((e,t)=>{H(u,t),H(h,t)})),_=e=>ye(g,e,((e,t,s)=>ee(t,s)),((e,t)=>ce(t))),ee=(e,t)=>ye(W(g,e,N(),(()=>ge(e,1))),t,((t,s,n)=>te(e,t,s,n)),((t,s)=>ue(e,t,s))),te=(e,t,s,n,o)=>ye(W(t,s,N(),(()=>fe(e,s,1))),n,((t,n,o)=>re(e,s,t,n,o)),((n,a)=>he(e,t,s,n,a,o))),re=(e,t,s,n,o)=>{A(s,n)||Le(e,t,n,1);const a=P(s,n);o!==a&&(we(e,t,n,a),H(s,n,o))},ie=(e,t,s,n,o)=>C(P(t,s),(t=>re(e,s,t,n,o)),(()=>te(e,t,s,Y({[n]:o},e)))),de=e=>{const s=""+t++;return A(e,s)?de(e):s},le=e=>P(g,e)??ee(e,{}),ce=e=>ee(e,{}),ue=(e,t,s)=>te(e,t,s,{},!0),he=(e,t,s,n,o,a)=>{const r=P(h,e)?.[o];if(!b(r)&&!a)return re(e,s,n,o,r);const i=t=>{we(e,s,t,P(n,t)),Le(e,s,t,-1),H(n,t)};b(r)?i(o):B(n,i),x(n)&&(fe(e,s,-1),x(H(t,s))&&(ge(e,-1),H(g,e)))},ge=(e,t)=>be(n,e,t),fe=(e,t,s)=>be(W(o,e,N()),t,s),Le=(e,t,s,n)=>be(W(W(r,e,N()),t,N()),s,n),we=(e,t,s,n)=>W(W(W(d,e,N()),t,N()),s,n),ve=(e,t,s,n,o)=>(w(W(W(W(l,e,N()),t,N()),s,[]),n),o),pe=(e,t,s)=>{const n=P(P(d,e),t),o=Ae(e,t,s);return A(n,s)?[!0,P(n,s),o]:[!1,o,o]},Ie=e=>x(l)||x(k[e])?0:F(e?G(l,(e=>G(e,G))):l,((t,s)=>F(t,((t,n)=>F(t,((t,o)=>D(k[e],[s,n,o],t))))))),Se=e=>{let t,s;if(!(x(d)||(t=x(R[e])&&x(S[e])&&x(L[e]))&&(s=x(T[e])&&x(y[e])&&x(v[e])&&x(f[e])))){const a=e?[G(n),G(o,G),G(r,(e=>G(e,G))),G(d,(e=>G(e,G)))]:[n,o,r,d];if(t||(F(a[2],((t,s)=>F(t,((t,n)=>{x(t)||D(R[e],[s,n])})))),F(a[1],((t,s)=>{x(t)||D(S[e],[s])})),x(a[0])||D(L[e])),!s){let t;F(a[3],((s,n)=>{let o;F(s,((s,a)=>{let r;F(s,((s,i)=>{const d=Ae(n,a,i);d!==s&&(D(T[e],[n,a,i],d,s,pe),t=o=r=1)})),r&&D(y[e],[n,a],pe)})),o&&D(v[e],[n],pe)})),t&&D(f[e],[],pe)}}},Ce=e=>(Je(e),Fe),me=()=>q(g,(e=>q(e,q))),Ee=()=>j(g),ke=e=>j(P(g,e)),Me=(e,t)=>j(P(P(g,e),t)),Ae=(e,t,s)=>P(P(P(g,e),t),s),xe=e=>Ce((()=>(e=>Te(e,U,ve))(e)?_(e):0)),De=()=>Ce((()=>_({}))),Je=e=>{if(-1==s)return;s++;const t=e?.();return s--,0==s&&(s=1,Ie(1),Se(1),s=-1,Ie(0),Se(0),s=0,c([d,l,n,o,r],J)),t},Fe={getTables:me,getTableIds:Ee,getTable:e=>q(P(g,e),q),getRowIds:ke,getRow:(e,t)=>q(P(P(g,e),t)),getCellIds:Me,getCell:Ae,hasTables:()=>!x(g),hasTable:e=>A(g,e),hasRow:(e,t)=>A(P(g,e),t),hasCell:(e,t,s)=>A(P(P(g,e),t),s),getJson:()=>p(g),getSchemaJson:()=>p(u),setTables:xe,setTable:(e,t)=>Ce((()=>U(t,e)?ee(e,t):0)),setRow:(e,t,s)=>Ce((()=>V(e,t,s)?te(e,le(e),t,s):0)),addRow:(e,t)=>Je((()=>{let s;return V(e,s,t)&&te(e,le(e),s=de(P(g,e)),t),s})),setPartialRow:(e,t,s)=>Ce((()=>{if(V(e,t,s,1)){const n=le(e);ae(s,((s,o)=>ie(e,n,t,o,s)))}})),setCell:(e,t,s,n)=>Ce((()=>C(X(e,t,s,E(n)?n(Ae(e,t,s)):n),(n=>ie(e,le(e),t,s,n))))),setJson:e=>{try{"{}"===e?De():xe(I(e))}catch{}return Fe},setSchema:t=>Ce((()=>{if((e=(e=>Te(e,(e=>Te(e,(e=>{if(!Te(e,((e,t)=>i(["type","default"],t))))return!1;const t=e.type;return!(!m(t)&&t!=a||(Re(e.default)!=t&&oe(e,"default"),0))})))))(t))&&(Z(t),!x(g))){const e=me();De(),xe(e)}})),delTables:De,delTable:e=>Ce((()=>A(g,e)?ce(e):0)),delRow:(e,t)=>Ce((()=>C(P(g,e),(s=>A(s,t)?ue(e,s,t):0)))),delCell:(e,t,s,n)=>Ce((()=>C(P(g,e),(o=>C(P(o,t),(a=>A(a,s)?he(e,o,t,a,s,n):0)))))),delSchema:()=>Ce((()=>{Z({}),e=!1})),transaction:Je,forEachTable:e=>F(g,((t,s)=>e(s,(e=>F(t,((t,s)=>e(s,(e=>B(t,e))))))))),forEachRow:(e,t)=>F(P(g,e),((e,s)=>t(s,(t=>B(e,t))))),forEachCell:(e,t,s)=>B(P(P(g,e),t),s),addTablesListener:(e,t)=>M(e,f[t?1:0]),addTableIdsListener:(e,t)=>M(e,L[t?1:0]),addTableListener:(e,t,s)=>M(t,v[s?1:0],[e]),addRowIdsListener:(e,t,s)=>M(t,S[s?1:0],[e]),addRowListener:(e,t,s,n)=>M(s,y[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n)=>M(s,R[n?1:0],[e,t]),addCellListener:(e,t,s,n,o)=>M(n,T[o?1:0],[e,t,s]),addInvalidCellListener:(e,t,s,n,o)=>M(n,k[o?1:0],[e,t,s]),callListener:e=>(Q(e,[Ee,ke,Me],(e=>b(e[2])?[]:[,,].fill(Ae(...e)))),Fe),delListener:e=>(z(e),Fe),getListenerStats:()=>({})};return se(Fe)};export{ie as createCheckpoints,he as createCustomPersister,ve as createFilePersister,le as createIndexes,Le as createLocalPersister,ue as createMetrics,Se as createRelationships,Ie as createRemotePersister,we as createSessionPersister,Ce as createStore,de as defaultSorter};
|
package/lib/tinybase.js.gz
CHANGED
|
Binary file
|
package/lib/umd/store.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,s=t(""),n=t(!0),r=t(0),l=t(t),o="type",a="default",d=(e,t)=>e.forEach(t),c=e=>e.length,i=e=>0==c(e),u=e=>e.slice(1),f=(e,t)=>e.push(t),h=e=>JSON.stringify(e,((e,t)=>{return T(t,Map)?(s=[...t],n=(e,[t,s])=>(e[t]=s,e),r={},s.reduce(n,r)):t;var s,n,r})),b=JSON.parse,p=isFinite,T=(e,t)=>e instanceof t,g=e=>null==e,y=(e,t,s)=>g(e)?s?.():t(e),w=e=>e==s||e==n,L=(e,t)=>e?.has(t)??!1,R=e=>g(e)||0==(e=>e.size)(e),C=e=>e.clear(),S=(e,t)=>e?.forEach(t),v=(e,t)=>e?.delete(t),I=e=>new Map(e),m=(e=I)=>[e(),e()],E=e=>[...e?.keys()??[]],J=(e,t)=>e?.get(t),O=(e,t)=>S(e,((e,s)=>t(s,e))),j=(e,t,s)=>g(s)?(v(e,t),e):e?.set(t,s),x=(e,t,s,n)=>(L(e,t)||(n?.(s),e.set(t,s)),J(e,t)),z=(e,t)=>{const s={},n=t??(e=>e);return S(e,((e,t)=>s[t]=n(e))),s},M=(e,t)=>{const s=I(),n=t??(e=>e);return S(e,((e,t)=>s.set(t,n(e)))),s},k=Object,F=k.keys,N=k.isFrozen,P=k.freeze,_=(e,t)=>!g(((e,t)=>y(e,(e=>e[t])))(e,t)),B=(e,t)=>delete e[t],q=(e,t)=>d(k.entries(e),(([e,s])=>t(s,e))),A=e=>new Set(e),
|
|
1
|
+
var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,s=t(""),n=t(!0),r=t(0),l=t(t),o="type",a="default",d=(e,t)=>e.forEach(t),c=e=>e.length,i=e=>0==c(e),u=e=>e.slice(1),f=(e,t)=>e.push(t),h=e=>JSON.stringify(e,((e,t)=>{return T(t,Map)?(s=[...t],n=(e,[t,s])=>(e[t]=s,e),r={},s.reduce(n,r)):t;var s,n,r})),b=JSON.parse,p=isFinite,T=(e,t)=>e instanceof t,g=e=>null==e,y=(e,t,s)=>g(e)?s?.():t(e),w=e=>e==s||e==n,L=(e,t)=>e?.has(t)??!1,R=e=>g(e)||0==(e=>e.size)(e),C=e=>e.clear(),S=(e,t)=>e?.forEach(t),v=(e,t)=>e?.delete(t),I=e=>new Map(e),m=(e=I)=>[e(),e()],E=e=>[...e?.keys()??[]],J=(e,t)=>e?.get(t),O=(e,t)=>S(e,((e,s)=>t(s,e))),j=(e,t,s)=>g(s)?(v(e,t),e):e?.set(t,s),x=(e,t,s,n)=>(L(e,t)||(n?.(s),e.set(t,s)),J(e,t)),z=(e,t)=>{const s={},n=t??(e=>e);return S(e,((e,t)=>s[t]=n(e))),s},M=(e,t)=>{const s=I(),n=t??(e=>e);return S(e,((e,t)=>s.set(t,n(e)))),s},k=Object,F=k.keys,N=k.isFrozen,P=k.freeze,_=(e,t)=>!g(((e,t)=>y(e,(e=>e[t])))(e,t)),B=(e,t)=>delete e[t],q=(e,t)=>d(k.entries(e),(([e,s])=>t(s,e))),A=e=>i(F(e)),D=e=>new Set(e),G=(e,t,s)=>c(s)<2?((e,t)=>e?.add(t))(i(s)?e:x(e,s[0],D()),t):G(x(e,s[0],I()),t,u(s)),H=e=>{const t=(s,n,...r)=>y(s,(s=>i(r)?e(s,n):d([r[0],null],(e=>t(J(s,e),n,...u(r))))));return t},K=(e,t,s,n=j)=>{const r=(l=E(e),o=e=>!_(t,e),l.filter(o));var l,o;return d(F(t),(n=>s(e,n,t[n]))),d(r,(t=>n(e,t))),e},Q=e=>{const s=t(e);return w(s)||s==r&&p(e)?s:void 0},U=(e,t,s)=>g(e)||!(e=>T(e,k)&&e.constructor==k)(e)||A(e)||N(e)?(s?.(),!1):(q(e,((s,n)=>{t(s,n)||B(e,n)})),!A(e)),V=(e,t,s)=>j(e,t,J(e,t)==-s?void 0:s);e.createStore=()=>{let e,s=0,n=0;const i=I(),u=I(),p=I(),T=I(),k=I(),F=I(),N=I(),A=I(),W=m(D),X=m(D),Y=m(),Z=m(),$=m(),ee=m(),te=m(),se=m(),[ne,re,le,oe]=(e=>{let t,s=0;const n=[],r=I();return[(l,o,a=[])=>{t??=e();const d=n.pop()??""+s++;return j(r,d,[l,o,a]),G(o,d,a),d},(e,s=[],...n)=>H(S)(e,(e=>y(J(r,e),(([e])=>e(t,...s,...n)))),...s),e=>y(J(r,e),(([,t,s])=>(H(v)(t,e,...s),j(r,e),c(n)<1e3&&f(n,e),s)),(()=>[])),(e,s,n)=>y(J(r,e),(([e,,r])=>{const l=(...o)=>{const a=c(o);a==c(r)?e(t,...o,...n(o)):g(r[a])?d(s[a](...o),(e=>l(...o,e))):l(...o,r[a])};l()}))]})((()=>Be)),ae=(t,s)=>(!e||L(F,s)||me(s))&&U(t,((e,t)=>de(s,t,e)),(()=>me(s))),de=(e,t,s,n)=>U(n?s:ie(s,e),((n,r)=>y(ce(e,t,r,n),(e=>(s[r]=e,!0)),(()=>!1))),(()=>me(e,t))),ce=(t,s,n,r)=>e?y(J(J(F,t),n),(e=>Q(r)!=e.type?me(t,s,n,r,e.default):r),(()=>me(t,s,n,r))):g(Q(r))?me(t,s,n,r):r,ie=(e,t)=>(y(J(N,t),(t=>q(t,((t,s)=>{_(e,s)||(e[s]=t)})))),e),ue=e=>K(F,e,((e,t,s)=>{const n={};K(x(F,t,I()),s,((e,t,s)=>{j(e,t,s),y(s.default,(e=>n[t]=e))})),j(N,t,n)}),((e,t)=>{j(F,t),j(N,t)})),fe=e=>K(A,e,((e,t,s)=>he(t,s)),((e,t)=>we(t))),he=(e,t)=>K(x(A,e,I(),(()=>Ce(e,1))),t,((t,s,n)=>be(e,t,s,n)),((t,s)=>Le(e,t,s))),be=(e,t,s,n,r)=>K(x(t,s,I(),(()=>Se(e,s,1))),n,((t,n,r)=>pe(e,s,t,n,r)),((n,l)=>Re(e,t,s,n,l,r))),pe=(e,t,s,n,r)=>{L(s,n)||ve(e,t,n,1);const l=J(s,n);r!==l&&(Ie(e,t,n,l),j(s,n,r))},Te=(e,t,s,n,r)=>y(J(t,s),(t=>pe(e,s,t,n,r)),(()=>be(e,t,s,ie({[n]:r},e)))),ge=e=>{const t=""+s++;return L(e,t)?ge(e):t},ye=e=>J(A,e)??he(e,{}),we=e=>he(e,{}),Le=(e,t,s)=>be(e,t,s,{},!0),Re=(e,t,s,n,r,l)=>{const o=J(N,e)?.[r];if(!g(o)&&!l)return pe(e,s,n,r,o);const a=t=>{Ie(e,s,t,J(n,t)),ve(e,s,t,-1),j(n,t)};g(o)?a(r):O(n,a),R(n)&&(Se(e,s,-1),R(j(t,s))&&(Ce(e,-1),j(A,e)))},Ce=(e,t)=>V(i,e,t),Se=(e,t,s)=>V(x(u,e,I()),t,s),ve=(e,t,s,n)=>V(x(x(p,e,I()),t,I()),s,n),Ie=(e,t,s,n)=>x(x(x(T,e,I()),t,I()),s,n),me=(e,t,s,n,r)=>(f(x(x(x(k,e,I()),t,I()),s,[]),n),r),Ee=(e,t,s)=>{const n=J(J(T,e),t),r=Fe(e,t,s);return L(n,s)?[!0,J(n,s),r]:[!1,r,r]},Je=e=>R(k)||R(se[e])?0:S(e?M(k,(e=>M(e,M))):k,((t,s)=>S(t,((t,n)=>S(t,((t,r)=>re(se[e],[s,n,r],t))))))),Oe=e=>{let t,s;if(!(R(T)||(t=R(ee[e])&&R(Z[e])&&R(X[e]))&&(s=R(te[e])&&R($[e])&&R(Y[e])&&R(W[e])))){const n=e?[M(i),M(u,M),M(p,(e=>M(e,M))),M(T,(e=>M(e,M)))]:[i,u,p,T];if(t||(S(n[2],((t,s)=>S(t,((t,n)=>{R(t)||re(ee[e],[s,n])})))),S(n[1],((t,s)=>{R(t)||re(Z[e],[s])})),R(n[0])||re(X[e])),!s){let t;S(n[3],((s,n)=>{let r;S(s,((s,l)=>{let o;S(s,((s,a)=>{const d=Fe(n,l,a);d!==s&&(re(te[e],[n,l,a],d,s,Ee),t=r=o=1)})),o&&re($[e],[n,l],Ee)})),r&&re(Y[e],[n],Ee)})),t&&re(W[e],[],Ee)}}},je=e=>(_e(e),Be),xe=()=>z(A,(e=>z(e,z))),ze=()=>E(A),Me=e=>E(J(A,e)),ke=(e,t)=>E(J(J(A,e),t)),Fe=(e,t,s)=>J(J(J(A,e),t),s),Ne=e=>je((()=>(e=>U(e,ae,me))(e)?fe(e):0)),Pe=()=>je((()=>fe({}))),_e=e=>{if(-1==n)return;n++;const t=e?.();return n--,0==n&&(n=1,Je(1),Oe(1),n=-1,Je(0),Oe(0),n=0,d([T,k,i,u,p],C)),t},Be={getTables:xe,getTableIds:ze,getTable:e=>z(J(A,e),z),getRowIds:Me,getRow:(e,t)=>z(J(J(A,e),t)),getCellIds:ke,getCell:Fe,hasTables:()=>!R(A),hasTable:e=>L(A,e),hasRow:(e,t)=>L(J(A,e),t),hasCell:(e,t,s)=>L(J(J(A,e),t),s),getJson:()=>h(A),getSchemaJson:()=>h(F),setTables:Ne,setTable:(e,t)=>je((()=>ae(t,e)?he(e,t):0)),setRow:(e,t,s)=>je((()=>de(e,t,s)?be(e,ye(e),t,s):0)),addRow:(e,t)=>_e((()=>{let s;return de(e,s,t)&&be(e,ye(e),s=ge(J(A,e)),t),s})),setPartialRow:(e,t,s)=>je((()=>{if(de(e,t,s,1)){const n=ye(e);q(s,((s,r)=>Te(e,n,t,r,s)))}})),setCell:(e,s,n,r)=>je((()=>y(ce(e,s,n,t(r)==l?r(Fe(e,s,n)):r),(t=>Te(e,ye(e),s,n,t))))),setJson:e=>{try{"{}"===e?Pe():Ne(b(e))}catch{}return Be},setSchema:t=>je((()=>{if((e=(e=>U(e,(e=>U(e,(e=>{if(!U(e,((e,t)=>[o,a].includes(t))))return!1;const t=e.type;return!(!w(t)&&t!=r||(Q(e.default)!=t&&B(e,a),0))})))))(t))&&(ue(t),!R(A))){const e=xe();Pe(),Ne(e)}})),delTables:Pe,delTable:e=>je((()=>L(A,e)?we(e):0)),delRow:(e,t)=>je((()=>y(J(A,e),(s=>L(s,t)?Le(e,s,t):0)))),delCell:(e,t,s,n)=>je((()=>y(J(A,e),(r=>y(J(r,t),(l=>L(l,s)?Re(e,r,t,l,s,n):0)))))),delSchema:()=>je((()=>{ue({}),e=!1})),transaction:_e,forEachTable:e=>S(A,((t,s)=>e(s,(e=>S(t,((t,s)=>e(s,(e=>O(t,e))))))))),forEachRow:(e,t)=>S(J(A,e),((e,s)=>t(s,(t=>O(e,t))))),forEachCell:(e,t,s)=>O(J(J(A,e),t),s),addTablesListener:(e,t)=>ne(e,W[t?1:0]),addTableIdsListener:(e,t)=>ne(e,X[t?1:0]),addTableListener:(e,t,s)=>ne(t,Y[s?1:0],[e]),addRowIdsListener:(e,t,s)=>ne(t,Z[s?1:0],[e]),addRowListener:(e,t,s,n)=>ne(s,$[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n)=>ne(s,ee[n?1:0],[e,t]),addCellListener:(e,t,s,n,r)=>ne(n,te[r?1:0],[e,t,s]),addInvalidCellListener:(e,t,s,n,r)=>ne(n,se[r?1:0],[e,t,s]),callListener:e=>(oe(e,[ze,Me,ke],(e=>g(e[2])?[]:[,,].fill(Fe(...e)))),Be),delListener:e=>(le(e),Be),getListenerStats:()=>({})};return P(Be)},Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseStore={});
|
package/lib/umd/store.js.gz
CHANGED
|
Binary file
|
package/lib/umd/tinybase.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e,t;e=this,t=function(e,t){"use strict";const s=e=>typeof e,n="",o=s(n),r=s(!0),a=s(0),i=s(s),d="type",l="default",c="utf8",u=(e,t)=>e.includes(t),f=(e,t)=>e.every(((s,n)=>0==n||t(e[n-1],s)<=0)),h=(e,t)=>e.sort(t),g=(e,t)=>e.forEach(t),p=e=>v(e,((e,t)=>e+t),0),L=e=>e.length,w=e=>0==L(e),v=(e,t,s)=>e.reduce(t,s),I=e=>e.slice(1),y=(e,t)=>e.push(t),S=e=>e.pop(),R=e=>JSON.stringify(e,((e,t)=>k(t,Map)?v([...t],((e,[t,s])=>(e[t]=s,e)),{}):t)),T=JSON.parse,b=Math.max,C=Math.min,m=isFinite,k=(e,t)=>e instanceof t,E=e=>null==e,M=(e,t,s)=>E(e)?s?.():t(e),x=e=>e==o||e==r,A=e=>s(e)==i,P=()=>{},D=e=>e.size,J=(e,t)=>e?.has(t)??!1,F=e=>E(e)||0==D(e),O=e=>[...e?.values()??[]],j=e=>e.clear(),z=(e,t)=>e?.forEach(t),N=(e,t)=>e?.delete(t),B=e=>new Map(e),_=(e=B)=>[e(),e()],q=e=>[...e?.keys()??[]],H=(e,t)=>e?.get(t),W=(e,t)=>z(e,((e,s)=>t(s,e))),G=(e,t,s)=>E(s)?(N(e,t),e):e?.set(t,s),K=(e,t,s,n)=>(J(e,t)||(n?.(s),e.set(t,s)),H(e,t)),Q=(e,t)=>{const s={},n=t??(e=>e);return z(e,((e,t)=>s[t]=n(e))),s},U=(e,t)=>{const s=B(),n=t??(e=>e);return z(e,((e,t)=>s.set(t,n(e)))),s},V=e=>new Set(e),X=(e,t)=>e?.add(t),Y=(e,t,s)=>{const n=e.hasRow,o=B(),r=B(),a=B(),i=B(),d=B(),l=t=>M(H(d,t),(s=>{z(s,e.delListener),G(d,t)})),c=e=>{G(o,e),G(r,e),G(a,e),G(i,e),l(e)};return[()=>e,()=>q(o),e=>W(r,e),e=>J(r,e),e=>H(o,e),e=>H(r,e),(e,t)=>G(r,e,t),(c,u,f,h,p)=>{const L=B(),w=B();G(o,c,u),J(r,c)||(G(r,c,t()),G(a,c,B()),G(i,c,B()));const v=H(a,c),I=H(i,c),y=t=>{const o=s=>e.getCell(u,t,s),r=H(v,t),a=n(u,t)?s(h(o,t)):void 0;if(r!=a&&G(L,t,[r,a]),!E(p)){const e=H(I,t),s=n(u,t)?p(o,t):void 0;e!=s&&G(w,t,s)}},S=e=>{f((()=>{z(L,(([,e],t)=>G(v,t,e))),z(w,((e,t)=>G(I,t,e)))}),L,w,v,I,e),j(L),j(w)};W(v,y),e.hasTable(u)&&g(e.getRowIds(u),(e=>{J(v,e)||y(e)})),S(!0),l(c),G(d,c,V([e.addRowListener(u,null,((e,t,s)=>y(s))),e.addTableListener(u,(()=>S()))]))},c,()=>W(d,c)]},Z=(e,t)=>s(e)==o?t=>t(e):e??(()=>t??n),$=e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))},ee=(e,t,s)=>L(s)<2?X(w(s)?e:K(e,s[0],V()),t):ee(K(e,s[0],B()),t,I(s)),te=e=>{const t=(s,n,...o)=>M(s,(s=>w(o)?e(s,n):g([o[0],null],(e=>t(H(s,e),n,...I(o))))));return t},se=e=>{let t,s=0;const n=[],o=B();return[(r,a,i=[])=>{t??=e();const d=S(n)??""+s++;return G(o,d,[r,a,i]),ee(a,d,i),d},(e,s=[],...n)=>te(z)(e,(e=>M(H(o,e),(([e])=>e(t,...s,...n)))),...s),e=>M(H(o,e),(([,t,s])=>(te(N)(t,e,...s),G(o,e),L(n)<1e3&&y(n,e),s)),(()=>[])),(e,s,n)=>M(H(o,e),(([e,,o])=>{const r=(...a)=>{const i=L(a);i==L(o)?e(t,...a,...n(a)):E(o[i])?g(s[i](...a),(e=>r(...a,e))):r(...a,o[i])};r()}))]},ne=Object,oe=ne.keys,re=ne.isFrozen,ae=ne.freeze,ie=(e,t)=>!E(((e,t)=>M(e,(e=>e[t])))(e,t)),de=(e,t)=>delete e[t],le=(e,t)=>g(ne.entries(e),(([e,s])=>t(s,e))),ce=$((e=>{let t,s,n,o=100,r=B(),a=1;const i=V(),d=B(),[l,c,f]=se((()=>N)),h=B(),p=B(),v=[],I=[],R=(t,s)=>{a=0,e.transaction((()=>z(H(h,s),((s,n)=>z(s,((s,o)=>z(s,((s,r)=>E(s[t])?e.delCell(n,o,r,!0):e.setCell(n,o,r,s[t]))))))))),a=1},T=e=>{G(h,e),G(p,e),c(d,[e])},b=(e,t)=>g(((e,t)=>e.splice(0,t))(e,t??L(e)),T),C=()=>b(v,L(v)-o),m=e.addCellListener(null,null,null,((e,s,o,i,d,l)=>{if(a){M(t,(()=>{y(v,t),C(),b(I),t=void 0,n=1}));const e=K(r,s,B()),a=K(e,o,B()),c=K(a,i,[void 0,void 0],(e=>e[0]=l));c[1]=d,c[0]===c[1]&&F(G(a,i))&&F(G(e,o))&&F(G(r,s))&&(t=S(v),n=1),P()}})),k=(e="")=>(E(t)&&(t=""+s++,G(h,t,r),O(t,e),r=B(),n=1),t),x=()=>{w(v)||(I.unshift(k()),R(0,t),t=S(v),n=1)},A=()=>{w(I)||(y(v,t),t=I.shift(),R(1,t),n=1)},P=()=>{n&&(c(i),n=0)},D=e=>{const t=k(e);return P(),t},O=(e,t)=>(j(e)&&H(p,e)!==t&&(G(p,e,t),c(d,[e])),N),j=e=>J(h,e),N={setSize:e=>(o=e,C(),N),addCheckpoint:D,setCheckpoint:O,getStore:()=>e,getCheckpointIds:()=>[[...v],t,[...I]],forEachCheckpoint:e=>W(p,e),hasCheckpoint:j,getCheckpoint:e=>H(p,e),goBackward:()=>(x(),P(),N),goForward:()=>(A(),P(),N),goTo:e=>{const s=u(v,e)?x:u(I,e)?A:null;for(;!E(s)&&e!=t;)s();return P(),N},addCheckpointIdsListener:e=>l(e,i),addCheckpointListener:(e,t)=>l(t,d,[e]),delListener:e=>(f(e),N),clear:()=>(b(v),b(I),E(t)||T(t),t=void 0,s=0,D(),N),destroy:()=>{e.delListener(m)},getListenerStats:()=>({})};return ae(N.clear())})),ue=(e,t)=>e<t?-1:1,fe=$((e=>{const t=B(),s=B(),[o,r,a,i,d,l,c,u,g,p]=Y(e,B,(e=>E(e)?n:e+n)),[L,w,v]=se((()=>y)),I=(t,s,n)=>{const o=d(t);z(n,((t,n)=>s(n,(s=>z(t,(t=>s(t,(s=>e.forEachCell(o,t,s)))))))))},y={setIndexDefinition:(e,n,o,r,a,i=ue)=>{const d=E(a)?void 0:([e],[t])=>a(e,t);return u(e,n,((n,o,a,u,g,p)=>{let L=0;const v=V(),I=V(),y=l(e);if(z(o,(([e,t],s)=>{E(e)||(X(v,e),M(H(y,e),(t=>{N(t,s),F(t)&&(G(y,e),L=1)}))),E(t)||(X(v,t),J(y,t)||(G(y,t,V()),L=1),X(H(y,t),s),E(r)||X(I,t))})),n(),F(g)||(p?W(y,(e=>X(I,e))):W(a,(e=>M(H(u,e),(e=>X(I,e))))),z(I,(e=>{const t=(t,s)=>i(H(g,t),H(g,s),e),s=[...H(y,e)];f(s,t)||(G(y,e,V(h(s,t))),X(v,e))}))),(L||p)&&!E(d)){const t=[...y];f(t,d)||(c(e,B(h(t,d))),L=1)}L&&w(t,[e]),z(v,(t=>w(s,[e,t])))}),Z(o),M(r,Z)),y},delIndexDefinition:e=>(g(e),y),getStore:o,getIndexIds:r,forEachIndex:e=>a(((t,s)=>e(t,(e=>I(t,e,s))))),forEachSlice:(e,t)=>I(e,t,l(e)),hasIndex:i,hasSlice:(e,t)=>J(l(e),t),getTableId:d,getSliceIds:e=>q(l(e)),getSliceRowIds:(e,t)=>O(H(l(e),t)),addSliceIdsListener:(e,s)=>L(s,t,[e]),addSliceRowIdsListener:(e,t,n)=>L(n,s,[e,t]),delListener:e=>(v(e),y),destroy:p,getListenerStats:()=>({})};return ae(y)})),he=B([["avg",[(e,t)=>p(e)/t,(e,t,s)=>e+(t-e)/(s+1),(e,t,s)=>e+(e-t)/(s-1),(e,t,s,n)=>e+(t-s)/n]],["max",[e=>b(...e),(e,t)=>b(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:b(t,e)]],["min",[e=>C(...e),(e,t)=>C(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:C(t,e)]],["sum",[e=>p(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,s)=>e-s+t]]]),ge=$((e=>{const t=B(),[s,o,r,a,i,d,l,c,u,f]=Y(e,P,(e=>isNaN(e)||E(e)||!0===e||!1===e||e===n?void 0:1*e)),[h,g,p]=se((()=>L)),L={setMetricDefinition:(e,s,n,o,r,a,i)=>{const u=A(n)?[n,r,a,i]:H(he,n)??H(he,"sum");return c(e,s,((s,n,o,r,a,i)=>{let c=d(e),f=D(r);const[h,p,L,w]=u;i=i||E(c),z(n,(([e,t])=>{i||(c=E(e)?p?.(c,t,f++):E(t)?L?.(c,e,f--):w?.(c,t,e,f)),i=i||E(c)})),s(),F(r)?c=void 0:i&&(c=h(O(r),D(r))),m(c)||(c=void 0);const v=d(e);c!=v&&(l(e,c),g(t,[e],c,v))}),Z(o,1)),L},delMetricDefinition:e=>(u(e),L),getStore:s,getMetricIds:o,forEachMetric:r,hasMetric:a,getTableId:i,getMetric:d,addMetricListener:(e,s)=>h(s,t,[e]),delListener:e=>(p(e),L),destroy:f,getListenerStats:()=>({})};return ae(L)})),pe=(e,t,s,n,o)=>{let r,a=0;const i={load:async s=>{if(2!=a){a=1;const n=await t();E(n)||""==n?e.setTables(s):e.setJson(n),a=0}return i},startAutoLoad:async e=>(i.stopAutoLoad(),await i.load(e),n(i.load),i),stopAutoLoad:()=>(o(),i),save:async()=>(1!=a&&(a=2,await s(e.getJson()),a=0),i),startAutoSave:async()=>(await i.stopAutoSave().save(),r=e.addTablesListener((()=>i.save())),i),stopAutoSave:()=>(M(r,e.delListener),i),getStore:()=>e,destroy:()=>i.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return ae(i)},Le="storage",we=globalThis.window,ve=(e,t,s)=>{let n;return pe(e,(async()=>s.getItem(t)),(async e=>s.setItem(t,e)),(e=>{n=n=>{n.storageArea===s&&n.key===t&&e()},we.addEventListener(Le,n)}),(()=>{we.removeEventListener(Le,n),n=void 0}))},Ie=e=>e.headers.get("ETag"),ye=$((e=>{const t=B(),s=B(),o=B(),r=B(),[a,i,d,l,c,u,f,h,g,p]=Y(e,(()=>[B(),B(),B(),B()]),(e=>E(e)?void 0:e+n)),[L,w,v]=se((()=>R)),I=(e,t,s)=>M(u(e),(([n,,o])=>{if(!J(o,t)){const r=V();if(c(e)!=S(e))X(r,t);else{let e=t;for(;!E(e)&&!J(r,e);)X(r,e),e=H(n,e)}if(s)return r;G(o,t,r)}return H(o,t)})),y=(e,t)=>M(u(e),(([,,e])=>G(e,t))),S=e=>H(t,e),R={setRelationshipDefinition:(e,n,a,i)=>(G(t,e,a),h(e,n,((t,n)=>{const a=V(),i=V(),d=V(),[l,c]=u(e);z(n,(([t,s],n)=>{E(t)||(X(i,t),M(H(c,t),(e=>{N(e,n),F(e)&&G(c,t)}))),E(s)||(X(i,s),J(c,s)||G(c,s,V()),X(H(c,s),n)),X(a,n),G(l,n,s),W(H(r,e),(t=>{J(I(e,t),n)&&X(d,t)}))})),t(),z(a,(t=>w(s,[e,t]))),z(i,(t=>w(o,[e,t]))),z(d,(t=>{y(e,t),w(r,[e,t])}))}),Z(i)),R),delRelationshipDefinition:e=>(G(t,e),g(e),R),getStore:a,getRelationshipIds:i,forEachRelationship:t=>d((s=>t(s,(t=>e.forEachRow(c(s),t))))),hasRelationship:l,getLocalTableId:c,getRemoteTableId:S,getRemoteRowId:(e,t)=>H(u(e)?.[0],t),getLocalRowIds:(e,t)=>O(H(u(e)?.[1],t)),getLinkedRowIds:(e,t)=>E(u(e))?[t]:O(I(e,t,!0)),addRemoteRowIdListener:(e,t,n)=>L(n,s,[e,t]),addLocalRowIdsListener:(e,t,s)=>L(s,o,[e,t]),addLinkedRowIdsListener:(e,t,s)=>(I(e,t),L(s,r,[e,t])),delListener:e=>(y(...v(e)),R),destroy:p,getListenerStats:()=>({})};return ae(R)})),Se=(e,t,s,n=G)=>{const o=(r=q(e),a=e=>!ie(t,e),r.filter(a));var r,a;return g(oe(t),(n=>s(e,n,t[n]))),g(o,(t=>n(e,t))),e},Re=e=>{const t=s(e);return x(t)||t==a&&m(e)?t:void 0},Te=(e,t)=>!(E(e)||!(e=>k(e,ne)&&e.constructor==ne)(e)||re(e)||(le(e,((s,n)=>{t(s,n)||de(e,n)})),(e=>w(oe(e)))(e))),be=(e,t,s)=>G(e,t,H(e,t)==-s?void 0:s);e.createCheckpoints=ce,e.createCustomPersister=pe,e.createFilePersister=(e,s)=>{let n;return pe(e,(async()=>{try{return await t.promises.readFile(s,c)}catch{}}),(async e=>{try{await t.promises.writeFile(s,e,c)}catch{}}),(e=>{n=t.watch(s,e)}),(()=>{n?.close(),n=void 0}))},e.createIndexes=fe,e.createLocalPersister=(e,t)=>ve(e,t,localStorage),e.createMetrics=ge,e.createRelationships=ye,e.createRemotePersister=(e,t,s,n)=>{let o,r;return pe(e,(async()=>{const e=await fetch(t);return r=Ie(e),e.text()}),(async e=>await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:e})),(e=>{o=setInterval((async()=>{const s=await fetch(t,{method:"HEAD"}),n=Ie(s);E(r)||E(n)||n==r||(r=n,e())}),1e3*n)}),(()=>{M(o,clearInterval),o=void 0}))},e.createSessionPersister=(e,t)=>ve(e,t,sessionStorage),e.createStore=()=>{let e,t=0,s=0;const n=B(),o=B(),r=B(),i=B(),c=B(),f=B(),h=B(),p=B(),L=_(V),w=_(V),v=_(),I=_(),S=_(),b=_(),C=_(),m=_(),[k,P,D,O]=se((()=>Oe)),N=(t,s)=>(!e||J(f,s))&&Te(t,((e,t)=>X(s,t,e))),X=(e,t,s,n)=>Te(n?s:Z(s,e),((n,o)=>M(Y(e,t,o,n),(e=>(s[o]=e,!0)),(()=>!1)))),Y=(t,s,n,o)=>e?M(H(H(f,t),n),(e=>Re(o)!=e.type?ye(t,s,n,o,e.default):o)):E(Re(o))?ye(t,s,n,o):o,Z=(e,t)=>(M(H(h,t),(t=>le(t,((t,s)=>{ie(e,s)||(e[s]=t)})))),e),$=e=>Se(f,e,((e,t,s)=>{const n={};Se(K(f,t,B()),s,((e,t,s)=>{G(e,t,s),M(s.default,(e=>n[t]=e))})),G(h,t,n)}),((e,t)=>{G(f,t),G(h,t)})),ee=e=>Se(p,e,((e,t,s)=>te(t,s)),((e,t)=>he(t))),te=(e,t)=>Se(K(p,e,B(),(()=>Le(e,1))),t,((t,s,n)=>ne(e,t,s,n)),((t,s)=>ge(e,t,s))),ne=(e,t,s,n,o)=>Se(K(t,s,B(),(()=>we(e,s,1))),n,((t,n,o)=>oe(e,s,t,n,o)),((n,r)=>pe(e,t,s,n,r,o))),oe=(e,t,s,n,o)=>{J(s,n)||ve(e,t,n,1);const r=H(s,n);o!==r&&(Ie(e,t,n,r),G(s,n,o))},re=(e,t,s)=>Fe((()=>ne(e,fe(e),t,s))),ce=(e,t,s,n,o)=>M(H(t,s),(t=>oe(e,s,t,n,o)),(()=>ne(e,t,s,Z({[n]:o},e)))),ue=e=>{const s=""+t++;return J(e,s)?ue(e):s},fe=e=>H(p,e)??te(e,{}),he=e=>te(e,{}),ge=(e,t,s)=>ne(e,t,s,{},!0),pe=(e,t,s,n,o,r)=>{const a=H(h,e)?.[o];if(!E(a)&&!r)return oe(e,s,n,o,a);const i=t=>{Ie(e,s,t,H(n,t)),ve(e,s,t,-1),G(n,t)};E(a)?i(o):W(n,i),F(n)&&(we(e,s,-1),F(G(t,s))&&(Le(e,-1),G(p,e)))},Le=(e,t)=>be(n,e,t),we=(e,t,s)=>be(K(o,e,B()),t,s),ve=(e,t,s,n)=>be(K(K(r,e,B()),t,B()),s,n),Ie=(e,t,s,n)=>K(K(K(i,e,B()),t,B()),s,n),ye=(e,t,s,n,o)=>(y(K(K(K(c,e,B()),t,B()),s,[]),n),o),Ce=(e,t,s)=>{const n=H(H(i,e),t),o=Pe(e,t,s);return J(n,s)?[!0,H(n,s),o]:[!1,o,o]},me=e=>{F(m[e])||z(e?U(c,(e=>U(e,U))):c,((t,s)=>z(t,((t,n)=>z(t,((t,o)=>P(m[e],[s,n,o],t)))))))},ke=e=>{const t=F(b[e])&&F(I[e])&&F(w[e]),s=F(C[e])&&F(S[e])&&F(v[e])&&F(L[e]);if(t&&s)return;const a=e?[U(n),U(o,U),U(r,(e=>U(e,U))),U(i,(e=>U(e,U)))]:[n,o,r,i];if(t||(z(a[2],((t,s)=>z(t,((t,n)=>{F(t)||P(b[e],[s,n])})))),z(a[1],((t,s)=>{F(t)||P(I[e],[s])})),F(a[0])||P(w[e])),!s){let t;z(a[3],((s,n)=>{let o;z(s,((s,r)=>{let a;z(s,((s,i)=>{const d=Pe(n,r,i);d!==s&&(P(C[e],[n,r,i],d,s,Ce),t=o=a=1)})),a&&P(S[e],[n,r],Ce)})),o&&P(v[e],[n],Ce)})),t&&P(L[e],[],Ce)}},Ee=()=>Q(p,(e=>Q(e,Q))),Me=()=>q(p),xe=e=>q(H(p,e)),Ae=(e,t)=>q(H(H(p,e),t)),Pe=(e,t,s)=>H(H(H(p,e),t),s),De=e=>((e=>Te(e,N))(e)?Fe((()=>ee(e))):Fe(),Oe),Je=()=>(Fe((()=>ee({}))),Oe),Fe=e=>{if(-1==s)return;s++;const t=e?.();return s--,0==s&&(s=1,me(1),ke(1),s=-1,me(0),ke(0),s=0,g([i,c,n,o,r],j)),t},Oe={getTables:Ee,getTableIds:Me,getTable:e=>Q(H(p,e),Q),getRowIds:xe,getRow:(e,t)=>Q(H(H(p,e),t)),getCellIds:Ae,getCell:Pe,hasTables:()=>!F(p),hasTable:e=>J(p,e),hasRow:(e,t)=>J(H(p,e),t),hasCell:(e,t,s)=>J(H(H(p,e),t),s),getJson:()=>R(p),getSchemaJson:()=>R(f),setTables:De,setTable:(e,t)=>(N(t,e)?Fe((()=>te(e,t))):Fe(),Oe),setRow:(e,t,s)=>(X(e,t,s)?re(e,t,s):Fe(),Oe),addRow:(e,t)=>{let s;return X(e,s,t)?re(e,s=ue(H(p,e)),t):Fe(),s},setPartialRow:(e,t,s)=>(X(e,t,s,1)?Fe((()=>{const n=fe(e);le(s,((s,o)=>ce(e,n,t,o,s)))})):Fe(),Oe),setCell:(e,t,s,n)=>(M(Y(e,t,s,A(n)?n(Pe(e,t,s)):n),(n=>Fe((()=>ce(e,fe(e),t,s,n)))),Fe),Oe),setJson:e=>{try{"{}"===e?Je():De(T(e))}catch{}return Oe},setSchema:t=>{if((e=(e=>Te(e,(e=>Te(e,(e=>{if(!Te(e,((e,t)=>u([d,l],t))))return!1;const t=e.type;return!(!x(t)&&t!=a||(Re(e.default)!=t&&de(e,l),0))})))))(t))&&($(t),!F(p))){const e=Ee();Je(),De(e)}return Oe},delTables:Je,delTable:e=>(J(p,e)&&Fe((()=>he(e))),Oe),delRow:(e,t)=>(M(H(p,e),(s=>{J(s,t)&&Fe((()=>ge(e,s,t)))})),Oe),delCell:(e,t,s,n)=>(M(H(p,e),(o=>M(H(o,t),(r=>{J(r,s)&&Fe((()=>pe(e,o,t,r,s,n)))})))),Oe),delSchema:()=>($({}),e=!1,Oe),transaction:Fe,forEachTable:e=>z(p,((t,s)=>e(s,(e=>z(t,((t,s)=>e(s,(e=>W(t,e))))))))),forEachRow:(e,t)=>z(H(p,e),((e,s)=>t(s,(t=>W(e,t))))),forEachCell:(e,t,s)=>W(H(H(p,e),t),s),addTablesListener:(e,t)=>k(e,L[t?1:0]),addTableIdsListener:(e,t)=>k(e,w[t?1:0]),addTableListener:(e,t,s)=>k(t,v[s?1:0],[e]),addRowIdsListener:(e,t,s)=>k(t,I[s?1:0],[e]),addRowListener:(e,t,s,n)=>k(s,S[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n)=>k(s,b[n?1:0],[e,t]),addCellListener:(e,t,s,n,o)=>k(n,C[o?1:0],[e,t,s]),addInvalidCellListener:(e,t,s,n,o)=>k(n,m[o?1:0],[e,t,s]),callListener:e=>(O(e,[Me,xe,Ae],(e=>E(e[2])?[]:[,,].fill(Pe(...e)))),Oe),delListener:e=>(D(e),Oe),getListenerStats:()=>({})};return ae(Oe)},e.defaultSorter=ue,Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("fs")):"function"==typeof define&&define.amd?define(["exports","fs"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBase={},e.fs);
|
|
1
|
+
var e,t;e=this,t=function(e,t){"use strict";const s=e=>typeof e,n="",o=s(n),r=s(!0),a=s(0),i=s(s),d="type",l="default",c="utf8",u=(e,t)=>e.includes(t),f=(e,t)=>e.every(((s,n)=>0==n||t(e[n-1],s)<=0)),h=(e,t)=>e.sort(t),g=(e,t)=>e.forEach(t),p=e=>v(e,((e,t)=>e+t),0),L=e=>e.length,w=e=>0==L(e),v=(e,t,s)=>e.reduce(t,s),I=e=>e.slice(1),y=(e,t)=>e.push(t),S=e=>e.pop(),R=e=>JSON.stringify(e,((e,t)=>k(t,Map)?v([...t],((e,[t,s])=>(e[t]=s,e)),{}):t)),T=JSON.parse,b=Math.max,C=Math.min,m=isFinite,k=(e,t)=>e instanceof t,E=e=>null==e,M=(e,t,s)=>E(e)?s?.():t(e),x=e=>e==o||e==r,A=e=>s(e)==i,P=()=>{},D=e=>e.size,J=(e,t)=>e?.has(t)??!1,F=e=>E(e)||0==D(e),O=e=>[...e?.values()??[]],j=e=>e.clear(),z=(e,t)=>e?.forEach(t),N=(e,t)=>e?.delete(t),B=e=>new Map(e),_=(e=B)=>[e(),e()],q=e=>[...e?.keys()??[]],H=(e,t)=>e?.get(t),W=(e,t)=>z(e,((e,s)=>t(s,e))),G=(e,t,s)=>E(s)?(N(e,t),e):e?.set(t,s),K=(e,t,s,n)=>(J(e,t)||(n?.(s),e.set(t,s)),H(e,t)),Q=(e,t)=>{const s={},n=t??(e=>e);return z(e,((e,t)=>s[t]=n(e))),s},U=(e,t)=>{const s=B(),n=t??(e=>e);return z(e,((e,t)=>s.set(t,n(e)))),s},V=e=>new Set(e),X=(e,t)=>e?.add(t),Y=(e,t,s)=>{const n=e.hasRow,o=B(),r=B(),a=B(),i=B(),d=B(),l=t=>M(H(d,t),(s=>{z(s,e.delListener),G(d,t)})),c=e=>{G(o,e),G(r,e),G(a,e),G(i,e),l(e)};return[()=>e,()=>q(o),e=>W(r,e),e=>J(r,e),e=>H(o,e),e=>H(r,e),(e,t)=>G(r,e,t),(c,u,f,h,p)=>{const L=B(),w=B();G(o,c,u),J(r,c)||(G(r,c,t()),G(a,c,B()),G(i,c,B()));const v=H(a,c),I=H(i,c),y=t=>{const o=s=>e.getCell(u,t,s),r=H(v,t),a=n(u,t)?s(h(o,t)):void 0;if(r!=a&&G(L,t,[r,a]),!E(p)){const e=H(I,t),s=n(u,t)?p(o,t):void 0;e!=s&&G(w,t,s)}},S=e=>{f((()=>{z(L,(([,e],t)=>G(v,t,e))),z(w,((e,t)=>G(I,t,e)))}),L,w,v,I,e),j(L),j(w)};W(v,y),e.hasTable(u)&&g(e.getRowIds(u),(e=>{J(v,e)||y(e)})),S(!0),l(c),G(d,c,V([e.addRowListener(u,null,((e,t,s)=>y(s))),e.addTableListener(u,(()=>S()))]))},c,()=>W(d,c)]},Z=(e,t)=>s(e)==o?t=>t(e):e??(()=>t??n),$=e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))},ee=(e,t,s)=>L(s)<2?X(w(s)?e:K(e,s[0],V()),t):ee(K(e,s[0],B()),t,I(s)),te=e=>{const t=(s,n,...o)=>M(s,(s=>w(o)?e(s,n):g([o[0],null],(e=>t(H(s,e),n,...I(o))))));return t},se=e=>{let t,s=0;const n=[],o=B();return[(r,a,i=[])=>{t??=e();const d=S(n)??""+s++;return G(o,d,[r,a,i]),ee(a,d,i),d},(e,s=[],...n)=>te(z)(e,(e=>M(H(o,e),(([e])=>e(t,...s,...n)))),...s),e=>M(H(o,e),(([,t,s])=>(te(N)(t,e,...s),G(o,e),L(n)<1e3&&y(n,e),s)),(()=>[])),(e,s,n)=>M(H(o,e),(([e,,o])=>{const r=(...a)=>{const i=L(a);i==L(o)?e(t,...a,...n(a)):E(o[i])?g(s[i](...a),(e=>r(...a,e))):r(...a,o[i])};r()}))]},ne=Object,oe=ne.keys,re=ne.isFrozen,ae=ne.freeze,ie=(e,t)=>!E(((e,t)=>M(e,(e=>e[t])))(e,t)),de=(e,t)=>delete e[t],le=(e,t)=>g(ne.entries(e),(([e,s])=>t(s,e))),ce=e=>w(oe(e)),ue=$((e=>{let t,s,n,o=100,r=B(),a=1;const i=V(),d=B(),[l,c,f]=se((()=>N)),h=B(),p=B(),v=[],I=[],R=(t,s)=>{a=0,e.transaction((()=>z(H(h,s),((s,n)=>z(s,((s,o)=>z(s,((s,r)=>E(s[t])?e.delCell(n,o,r,!0):e.setCell(n,o,r,s[t]))))))))),a=1},T=e=>{G(h,e),G(p,e),c(d,[e])},b=(e,t)=>g(((e,t)=>e.splice(0,t))(e,t??L(e)),T),C=()=>b(v,L(v)-o),m=e.addCellListener(null,null,null,((e,s,o,i,d,l)=>{if(a){M(t,(()=>{y(v,t),C(),b(I),t=void 0,n=1}));const e=K(r,s,B()),a=K(e,o,B()),c=K(a,i,[void 0,void 0],(e=>e[0]=l));c[1]=d,c[0]===c[1]&&F(G(a,i))&&F(G(e,o))&&F(G(r,s))&&(t=S(v),n=1),P()}})),k=(e="")=>(E(t)&&(t=""+s++,G(h,t,r),O(t,e),r=B(),n=1),t),x=()=>{w(v)||(I.unshift(k()),R(0,t),t=S(v),n=1)},A=()=>{w(I)||(y(v,t),t=I.shift(),R(1,t),n=1)},P=()=>{n&&(c(i),n=0)},D=e=>{const t=k(e);return P(),t},O=(e,t)=>(j(e)&&H(p,e)!==t&&(G(p,e,t),c(d,[e])),N),j=e=>J(h,e),N={setSize:e=>(o=e,C(),N),addCheckpoint:D,setCheckpoint:O,getStore:()=>e,getCheckpointIds:()=>[[...v],t,[...I]],forEachCheckpoint:e=>W(p,e),hasCheckpoint:j,getCheckpoint:e=>H(p,e),goBackward:()=>(x(),P(),N),goForward:()=>(A(),P(),N),goTo:e=>{const s=u(v,e)?x:u(I,e)?A:null;for(;!E(s)&&e!=t;)s();return P(),N},addCheckpointIdsListener:e=>l(e,i),addCheckpointListener:(e,t)=>l(t,d,[e]),delListener:e=>(f(e),N),clear:()=>(b(v),b(I),E(t)||T(t),t=void 0,s=0,D(),N),destroy:()=>{e.delListener(m)},getListenerStats:()=>({})};return ae(N.clear())})),fe=(e,t)=>e<t?-1:1,he=$((e=>{const t=B(),s=B(),[o,r,a,i,d,l,c,u,g,p]=Y(e,B,(e=>E(e)?n:e+n)),[L,w,v]=se((()=>y)),I=(t,s,n)=>{const o=d(t);z(n,((t,n)=>s(n,(s=>z(t,(t=>s(t,(s=>e.forEachCell(o,t,s)))))))))},y={setIndexDefinition:(e,n,o,r,a,i=fe)=>{const d=E(a)?void 0:([e],[t])=>a(e,t);return u(e,n,((n,o,a,u,g,p)=>{let L=0;const v=V(),I=V(),y=l(e);if(z(o,(([e,t],s)=>{E(e)||(X(v,e),M(H(y,e),(t=>{N(t,s),F(t)&&(G(y,e),L=1)}))),E(t)||(X(v,t),J(y,t)||(G(y,t,V()),L=1),X(H(y,t),s),E(r)||X(I,t))})),n(),F(g)||(p?W(y,(e=>X(I,e))):W(a,(e=>M(H(u,e),(e=>X(I,e))))),z(I,(e=>{const t=(t,s)=>i(H(g,t),H(g,s),e),s=[...H(y,e)];f(s,t)||(G(y,e,V(h(s,t))),X(v,e))}))),(L||p)&&!E(d)){const t=[...y];f(t,d)||(c(e,B(h(t,d))),L=1)}L&&w(t,[e]),z(v,(t=>w(s,[e,t])))}),Z(o),M(r,Z)),y},delIndexDefinition:e=>(g(e),y),getStore:o,getIndexIds:r,forEachIndex:e=>a(((t,s)=>e(t,(e=>I(t,e,s))))),forEachSlice:(e,t)=>I(e,t,l(e)),hasIndex:i,hasSlice:(e,t)=>J(l(e),t),getTableId:d,getSliceIds:e=>q(l(e)),getSliceRowIds:(e,t)=>O(H(l(e),t)),addSliceIdsListener:(e,s)=>L(s,t,[e]),addSliceRowIdsListener:(e,t,n)=>L(n,s,[e,t]),delListener:e=>(v(e),y),destroy:p,getListenerStats:()=>({})};return ae(y)})),ge=B([["avg",[(e,t)=>p(e)/t,(e,t,s)=>e+(t-e)/(s+1),(e,t,s)=>e+(e-t)/(s-1),(e,t,s,n)=>e+(t-s)/n]],["max",[e=>b(...e),(e,t)=>b(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:b(t,e)]],["min",[e=>C(...e),(e,t)=>C(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:C(t,e)]],["sum",[e=>p(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,s)=>e-s+t]]]),pe=$((e=>{const t=B(),[s,o,r,a,i,d,l,c,u,f]=Y(e,P,(e=>isNaN(e)||E(e)||!0===e||!1===e||e===n?void 0:1*e)),[h,g,p]=se((()=>L)),L={setMetricDefinition:(e,s,n,o,r,a,i)=>{const u=A(n)?[n,r,a,i]:H(ge,n)??H(ge,"sum");return c(e,s,((s,n,o,r,a,i)=>{let c=d(e),f=D(r);const[h,p,L,w]=u;i=i||E(c),z(n,(([e,t])=>{i||(c=E(e)?p?.(c,t,f++):E(t)?L?.(c,e,f--):w?.(c,t,e,f)),i=i||E(c)})),s(),F(r)?c=void 0:i&&(c=h(O(r),D(r))),m(c)||(c=void 0);const v=d(e);c!=v&&(l(e,c),g(t,[e],c,v))}),Z(o,1)),L},delMetricDefinition:e=>(u(e),L),getStore:s,getMetricIds:o,forEachMetric:r,hasMetric:a,getTableId:i,getMetric:d,addMetricListener:(e,s)=>h(s,t,[e]),delListener:e=>(p(e),L),destroy:f,getListenerStats:()=>({})};return ae(L)})),Le=(e,t,s,n,o)=>{let r,a=0;const i={load:async s=>{if(2!=a){a=1;const n=await t();E(n)||""==n?e.setTables(s):e.setJson(n),a=0}return i},startAutoLoad:async e=>(i.stopAutoLoad(),await i.load(e),n(i.load),i),stopAutoLoad:()=>(o(),i),save:async()=>(1!=a&&(a=2,await s(e.getJson()),a=0),i),startAutoSave:async()=>(await i.stopAutoSave().save(),r=e.addTablesListener((()=>i.save())),i),stopAutoSave:()=>(M(r,e.delListener),i),getStore:()=>e,destroy:()=>i.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return ae(i)},we="storage",ve=globalThis.window,Ie=(e,t,s)=>{let n;return Le(e,(async()=>s.getItem(t)),(async e=>s.setItem(t,e)),(e=>{n=n=>{n.storageArea===s&&n.key===t&&e()},ve.addEventListener(we,n)}),(()=>{ve.removeEventListener(we,n),n=void 0}))},ye=e=>e.headers.get("ETag"),Se=$((e=>{const t=B(),s=B(),o=B(),r=B(),[a,i,d,l,c,u,f,h,g,p]=Y(e,(()=>[B(),B(),B(),B()]),(e=>E(e)?void 0:e+n)),[L,w,v]=se((()=>R)),I=(e,t,s)=>M(u(e),(([n,,o])=>{if(!J(o,t)){const r=V();if(c(e)!=S(e))X(r,t);else{let e=t;for(;!E(e)&&!J(r,e);)X(r,e),e=H(n,e)}if(s)return r;G(o,t,r)}return H(o,t)})),y=(e,t)=>M(u(e),(([,,e])=>G(e,t))),S=e=>H(t,e),R={setRelationshipDefinition:(e,n,a,i)=>(G(t,e,a),h(e,n,((t,n)=>{const a=V(),i=V(),d=V(),[l,c]=u(e);z(n,(([t,s],n)=>{E(t)||(X(i,t),M(H(c,t),(e=>{N(e,n),F(e)&&G(c,t)}))),E(s)||(X(i,s),J(c,s)||G(c,s,V()),X(H(c,s),n)),X(a,n),G(l,n,s),W(H(r,e),(t=>{J(I(e,t),n)&&X(d,t)}))})),t(),z(a,(t=>w(s,[e,t]))),z(i,(t=>w(o,[e,t]))),z(d,(t=>{y(e,t),w(r,[e,t])}))}),Z(i)),R),delRelationshipDefinition:e=>(G(t,e),g(e),R),getStore:a,getRelationshipIds:i,forEachRelationship:t=>d((s=>t(s,(t=>e.forEachRow(c(s),t))))),hasRelationship:l,getLocalTableId:c,getRemoteTableId:S,getRemoteRowId:(e,t)=>H(u(e)?.[0],t),getLocalRowIds:(e,t)=>O(H(u(e)?.[1],t)),getLinkedRowIds:(e,t)=>E(u(e))?[t]:O(I(e,t,!0)),addRemoteRowIdListener:(e,t,n)=>L(n,s,[e,t]),addLocalRowIdsListener:(e,t,s)=>L(s,o,[e,t]),addLinkedRowIdsListener:(e,t,s)=>(I(e,t),L(s,r,[e,t])),delListener:e=>(y(...v(e)),R),destroy:p,getListenerStats:()=>({})};return ae(R)})),Re=(e,t,s,n=G)=>{const o=(r=q(e),a=e=>!ie(t,e),r.filter(a));var r,a;return g(oe(t),(n=>s(e,n,t[n]))),g(o,(t=>n(e,t))),e},Te=e=>{const t=s(e);return x(t)||t==a&&m(e)?t:void 0},be=(e,t,s)=>E(e)||!(e=>k(e,ne)&&e.constructor==ne)(e)||ce(e)||re(e)?(s?.(),!1):(le(e,((s,n)=>{t(s,n)||de(e,n)})),!ce(e)),Ce=(e,t,s)=>G(e,t,H(e,t)==-s?void 0:s);e.createCheckpoints=ue,e.createCustomPersister=Le,e.createFilePersister=(e,s)=>{let n;return Le(e,(async()=>{try{return await t.promises.readFile(s,c)}catch{}}),(async e=>{try{await t.promises.writeFile(s,e,c)}catch{}}),(e=>{n=t.watch(s,e)}),(()=>{n?.close(),n=void 0}))},e.createIndexes=he,e.createLocalPersister=(e,t)=>Ie(e,t,localStorage),e.createMetrics=pe,e.createRelationships=Se,e.createRemotePersister=(e,t,s,n)=>{let o,r;return Le(e,(async()=>{const e=await fetch(t);return r=ye(e),e.text()}),(async e=>await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:e})),(e=>{o=setInterval((async()=>{const s=await fetch(t,{method:"HEAD"}),n=ye(s);E(r)||E(n)||n==r||(r=n,e())}),1e3*n)}),(()=>{M(o,clearInterval),o=void 0}))},e.createSessionPersister=(e,t)=>Ie(e,t,sessionStorage),e.createStore=()=>{let e,t=0,s=0;const n=B(),o=B(),r=B(),i=B(),c=B(),f=B(),h=B(),p=B(),L=_(V),w=_(V),v=_(),I=_(),S=_(),b=_(),C=_(),m=_(),[k,P,D,O]=se((()=>Oe)),N=(t,s)=>(!e||J(f,s)||Ie(s))&&be(t,((e,t)=>X(s,t,e)),(()=>Ie(s))),X=(e,t,s,n)=>be(n?s:Z(s,e),((n,o)=>M(Y(e,t,o,n),(e=>(s[o]=e,!0)),(()=>!1))),(()=>Ie(e,t))),Y=(t,s,n,o)=>e?M(H(H(f,t),n),(e=>Te(o)!=e.type?Ie(t,s,n,o,e.default):o),(()=>Ie(t,s,n,o))):E(Te(o))?Ie(t,s,n,o):o,Z=(e,t)=>(M(H(h,t),(t=>le(t,((t,s)=>{ie(e,s)||(e[s]=t)})))),e),$=e=>Re(f,e,((e,t,s)=>{const n={};Re(K(f,t,B()),s,((e,t,s)=>{G(e,t,s),M(s.default,(e=>n[t]=e))})),G(h,t,n)}),((e,t)=>{G(f,t),G(h,t)})),ee=e=>Re(p,e,((e,t,s)=>te(t,s)),((e,t)=>fe(t))),te=(e,t)=>Re(K(p,e,B(),(()=>pe(e,1))),t,((t,s,n)=>ne(e,t,s,n)),((t,s)=>he(e,t,s))),ne=(e,t,s,n,o)=>Re(K(t,s,B(),(()=>Le(e,s,1))),n,((t,n,o)=>oe(e,s,t,n,o)),((n,r)=>ge(e,t,s,n,r,o))),oe=(e,t,s,n,o)=>{J(s,n)||we(e,t,n,1);const r=H(s,n);o!==r&&(ve(e,t,n,r),G(s,n,o))},re=(e,t,s,n,o)=>M(H(t,s),(t=>oe(e,s,t,n,o)),(()=>ne(e,t,s,Z({[n]:o},e)))),ce=e=>{const s=""+t++;return J(e,s)?ce(e):s},ue=e=>H(p,e)??te(e,{}),fe=e=>te(e,{}),he=(e,t,s)=>ne(e,t,s,{},!0),ge=(e,t,s,n,o,r)=>{const a=H(h,e)?.[o];if(!E(a)&&!r)return oe(e,s,n,o,a);const i=t=>{ve(e,s,t,H(n,t)),we(e,s,t,-1),G(n,t)};E(a)?i(o):W(n,i),F(n)&&(Le(e,s,-1),F(G(t,s))&&(pe(e,-1),G(p,e)))},pe=(e,t)=>Ce(n,e,t),Le=(e,t,s)=>Ce(K(o,e,B()),t,s),we=(e,t,s,n)=>Ce(K(K(r,e,B()),t,B()),s,n),ve=(e,t,s,n)=>K(K(K(i,e,B()),t,B()),s,n),Ie=(e,t,s,n,o)=>(y(K(K(K(c,e,B()),t,B()),s,[]),n),o),ye=(e,t,s)=>{const n=H(H(i,e),t),o=Pe(e,t,s);return J(n,s)?[!0,H(n,s),o]:[!1,o,o]},Se=e=>F(c)||F(m[e])?0:z(e?U(c,(e=>U(e,U))):c,((t,s)=>z(t,((t,n)=>z(t,((t,o)=>P(m[e],[s,n,o],t))))))),me=e=>{let t,s;if(!(F(i)||(t=F(b[e])&&F(I[e])&&F(w[e]))&&(s=F(C[e])&&F(S[e])&&F(v[e])&&F(L[e])))){const a=e?[U(n),U(o,U),U(r,(e=>U(e,U))),U(i,(e=>U(e,U)))]:[n,o,r,i];if(t||(z(a[2],((t,s)=>z(t,((t,n)=>{F(t)||P(b[e],[s,n])})))),z(a[1],((t,s)=>{F(t)||P(I[e],[s])})),F(a[0])||P(w[e])),!s){let t;z(a[3],((s,n)=>{let o;z(s,((s,r)=>{let a;z(s,((s,i)=>{const d=Pe(n,r,i);d!==s&&(P(C[e],[n,r,i],d,s,ye),t=o=a=1)})),a&&P(S[e],[n,r],ye)})),o&&P(v[e],[n],ye)})),t&&P(L[e],[],ye)}}},ke=e=>(Fe(e),Oe),Ee=()=>Q(p,(e=>Q(e,Q))),Me=()=>q(p),xe=e=>q(H(p,e)),Ae=(e,t)=>q(H(H(p,e),t)),Pe=(e,t,s)=>H(H(H(p,e),t),s),De=e=>ke((()=>(e=>be(e,N,Ie))(e)?ee(e):0)),Je=()=>ke((()=>ee({}))),Fe=e=>{if(-1==s)return;s++;const t=e?.();return s--,0==s&&(s=1,Se(1),me(1),s=-1,Se(0),me(0),s=0,g([i,c,n,o,r],j)),t},Oe={getTables:Ee,getTableIds:Me,getTable:e=>Q(H(p,e),Q),getRowIds:xe,getRow:(e,t)=>Q(H(H(p,e),t)),getCellIds:Ae,getCell:Pe,hasTables:()=>!F(p),hasTable:e=>J(p,e),hasRow:(e,t)=>J(H(p,e),t),hasCell:(e,t,s)=>J(H(H(p,e),t),s),getJson:()=>R(p),getSchemaJson:()=>R(f),setTables:De,setTable:(e,t)=>ke((()=>N(t,e)?te(e,t):0)),setRow:(e,t,s)=>ke((()=>X(e,t,s)?ne(e,ue(e),t,s):0)),addRow:(e,t)=>Fe((()=>{let s;return X(e,s,t)&&ne(e,ue(e),s=ce(H(p,e)),t),s})),setPartialRow:(e,t,s)=>ke((()=>{if(X(e,t,s,1)){const n=ue(e);le(s,((s,o)=>re(e,n,t,o,s)))}})),setCell:(e,t,s,n)=>ke((()=>M(Y(e,t,s,A(n)?n(Pe(e,t,s)):n),(n=>re(e,ue(e),t,s,n))))),setJson:e=>{try{"{}"===e?Je():De(T(e))}catch{}return Oe},setSchema:t=>ke((()=>{if((e=(e=>be(e,(e=>be(e,(e=>{if(!be(e,((e,t)=>u([d,l],t))))return!1;const t=e.type;return!(!x(t)&&t!=a||(Te(e.default)!=t&&de(e,l),0))})))))(t))&&($(t),!F(p))){const e=Ee();Je(),De(e)}})),delTables:Je,delTable:e=>ke((()=>J(p,e)?fe(e):0)),delRow:(e,t)=>ke((()=>M(H(p,e),(s=>J(s,t)?he(e,s,t):0)))),delCell:(e,t,s,n)=>ke((()=>M(H(p,e),(o=>M(H(o,t),(r=>J(r,s)?ge(e,o,t,r,s,n):0)))))),delSchema:()=>ke((()=>{$({}),e=!1})),transaction:Fe,forEachTable:e=>z(p,((t,s)=>e(s,(e=>z(t,((t,s)=>e(s,(e=>W(t,e))))))))),forEachRow:(e,t)=>z(H(p,e),((e,s)=>t(s,(t=>W(e,t))))),forEachCell:(e,t,s)=>W(H(H(p,e),t),s),addTablesListener:(e,t)=>k(e,L[t?1:0]),addTableIdsListener:(e,t)=>k(e,w[t?1:0]),addTableListener:(e,t,s)=>k(t,v[s?1:0],[e]),addRowIdsListener:(e,t,s)=>k(t,I[s?1:0],[e]),addRowListener:(e,t,s,n)=>k(s,S[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n)=>k(s,b[n?1:0],[e,t]),addCellListener:(e,t,s,n,o)=>k(n,C[o?1:0],[e,t,s]),addInvalidCellListener:(e,t,s,n,o)=>k(n,m[o?1:0],[e,t,s]),callListener:e=>(O(e,[Me,xe,Ae],(e=>E(e[2])?[]:[,,].fill(Pe(...e)))),Oe),delListener:e=>(D(e),Oe),getListenerStats:()=>({})};return ae(Oe)},e.defaultSorter=fe,Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("fs")):"function"==typeof define&&define.amd?define(["exports","fs"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBase={},e.fs);
|
package/lib/umd/tinybase.js.gz
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tinybase",
|
|
3
|
-
"version": "1.1.0-beta.
|
|
3
|
+
"version": "1.1.0-beta.1",
|
|
4
4
|
"author": "jamesgpearce",
|
|
5
5
|
"repository": "github:tinyplex/tinybase",
|
|
6
6
|
"license": "MIT",
|
|
@@ -72,15 +72,15 @@
|
|
|
72
72
|
"@types/react-dom": "^17.0.11",
|
|
73
73
|
"@types/react-test-renderer": "^17.0.1",
|
|
74
74
|
"@types/tmp": "^0.2.3",
|
|
75
|
-
"@typescript-eslint/eslint-plugin": "^5.10.
|
|
76
|
-
"@typescript-eslint/parser": "^5.10.
|
|
75
|
+
"@typescript-eslint/eslint-plugin": "^5.10.2",
|
|
76
|
+
"@typescript-eslint/parser": "^5.10.2",
|
|
77
77
|
"asciichart": "^1.5.25",
|
|
78
78
|
"babel-eslint": "^10.1.0",
|
|
79
79
|
"babel-jest": "^27.4.6",
|
|
80
80
|
"babel-preset-minify": "^0.5.1",
|
|
81
81
|
"country-flag-emoji-json": "^2.0.0",
|
|
82
|
-
"cspell": "^5.
|
|
83
|
-
"esbuild": "^0.14.
|
|
82
|
+
"cspell": "^5.18.0",
|
|
83
|
+
"esbuild": "^0.14.16",
|
|
84
84
|
"eslint": "^8.8.0",
|
|
85
85
|
"eslint-config-prettier": "^8.3.0",
|
|
86
86
|
"eslint-plugin-jest": "^26.0.0",
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"jest-puppeteer": "^6.0.3",
|
|
96
96
|
"less": "^4.1.2",
|
|
97
97
|
"prettier": "^2.5.1",
|
|
98
|
-
"puppeteer": "^13.1.
|
|
98
|
+
"puppeteer": "^13.1.3",
|
|
99
99
|
"react": "^17.0.2",
|
|
100
100
|
"react-dom": "^17.0.2",
|
|
101
101
|
"react-test-renderer": "^17.0.2",
|
package/readme.md
CHANGED
|
@@ -192,4 +192,4 @@ console.log(store.getCell('pets', 'felix', 'sold'));
|
|
|
192
192
|
// -> false
|
|
193
193
|
```
|
|
194
194
|
|
|
195
|
-
<section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://tinybase.org/api/store"><code>store</code></a> module alone, you'll only add a gzipped <em>2.7kB</em> to your app. You can incrementally add the other modules as you need more functionality, or get it all for <em>5.8kB</em>. The <code>ui-react</code> adaptor is just another <em>2.6kB</em>, and everything is fast.</p><p>Life's easy when you have zero dependencies.</p><p>Read more about how TinyBase is structured in the <a href="https://tinybase.org/guides/how-tinybase-is-built/architecture">Architecture</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>.js.gz</th><th>.js</th><th>debug.js</th><th>.d.ts</th></tr><tr><th class="right"><a href="https://tinybase.org/api/store">store</a></th><td>2.7kB</td><td>6.2kB</td><td>25.
|
|
195
|
+
<section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://tinybase.org/api/store"><code>store</code></a> module alone, you'll only add a gzipped <em>2.7kB</em> to your app. You can incrementally add the other modules as you need more functionality, or get it all for <em>5.8kB</em>. The <code>ui-react</code> adaptor is just another <em>2.6kB</em>, and everything is fast.</p><p>Life's easy when you have zero dependencies.</p><p>Read more about how TinyBase is structured in the <a href="https://tinybase.org/guides/how-tinybase-is-built/architecture">Architecture</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>.js.gz</th><th>.js</th><th>debug.js</th><th>.d.ts</th></tr><tr><th class="right"><a href="https://tinybase.org/api/store">store</a></th><td>2.7kB</td><td>6.2kB</td><td>25.9kB</td><td>93.7kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/indexes">indexes</a></th><td>1.6kB</td><td>3.2kB</td><td>14.1kB</td><td>32.9kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/metrics">metrics</a></th><td>1.5kB</td><td>3.1kB</td><td>12.6kB</td><td>29.1kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/relationships">relationships</a></th><td>1.6kB</td><td>3.2kB</td><td>14.8kB</td><td>42.1kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/checkpoints">checkpoints</a></th><td>1.3kB</td><td>2.5kB</td><td>10.4kB</td><td>33.0kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/persisters">persisters</a></th><td>0.8kB</td><td>1.6kB</td><td>4.9kB</td><td>26.7kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/common">common</a></th><td>0.1kB</td><td>0.1kB</td><td>0.1kB</td><td>3.5kB</td></tr><tr><th class="right"><a href="https://tinybase.org/api/tinybase">tinybase</a></th><td>5.8kB</td><td>13.8kB</td><td>57.6kB</td><td>0.3kB</td></tr></tbody></table></div><section><h2 id="well-tested-and-documented">Well tested and documented.</h2><p>TinyBase has <em>100.0%</em> test coverage, including the code throughout the documentation - even on this page! The guides, demos, and API examples are designed to make it as easy as possible to get up and running.</p><p>Read more about how TinyBase is tested in the Unit <a href="https://tinybase.org/guides/how-tinybase-is-built/testing">Testing</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>Total</th><th>Tested</th><th>Coverage</th></tr><tr><th class="right">Lines</th><td>965</td><td>965</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>1,053</td><td>1,053</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>399</td><td>399</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>353</td><td>352</td><td>99.7%</td></tr><tr><th class="right">Tests</th><td colspan="3">1,754</td></tr><tr><th class="right">Assertions</th><td colspan="3">8,767</td></tr></tbody></table></div><hr><p><a id="start" href="https://tinybase.org/guides/the-basics/getting-started">Get started</a></p><p><a href="https://tinybase.org/demos">Try the demos</a></p><p><a href="https://tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section><h2 id="follow">Follow</h2><ul><li>News and updates on <a href="https://twitter.com/tinybasejs">Twitter</a> and <a href="https://facebook.com/tinybasejs">Facebook</a>.</li><li><a href="https://github.com/tinyplex/tinybase/issues">Issues</a> and <a href="https://github.com/tinyplex/tinybase/releases">release notes</a> on <a href="https://github.com/tinyplex/tinybase">GitHub</a></li><li>Packages on <a href="https://www.npmjs.com/package/tinybase/v/1.1.0-beta.1">NPM</a>.</li></ul></section><section><h2 id="about">About</h2><p>Building TinyBase was an interesting exercise in API design, minification, and documentation. It's not <a href="https://www.linkedin.com/in/jamespearce">my day job</a>, but I do intend to maintain it, so please provide feedback. I could not have done this without these great <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and I hope you enjoy using it!</p></section>
|