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.
@@ -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) => validate(tables, validateTable);
245
+ const validateTables = (tables) =>
246
+ validate(tables, validateTable, cellInvalid);
245
247
  const validateTable = (table, tableId) =>
246
- (!hasSchema || collHas(schemaMap, tableId)) &&
247
- validate(table, (row, rowId) => validateRow(tableId, rowId, row));
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
- if (!collIsEmpty(invalidCellListeners[mutator])) {
427
- collForEach(
428
- mutator
429
- ? mapClone(invalidCells, (table) => mapClone(table, mapClone))
430
- : invalidCells,
431
- (rows, tableId) =>
432
- collForEach(rows, (cells, rowId) =>
433
- collForEach(cells, (invalidCell, cellId) =>
434
- callListeners(
435
- invalidCellListeners[mutator],
436
- [tableId, rowId, cellId],
437
- invalidCell,
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
- const emptyIdListeners =
446
- collIsEmpty(cellIdsListeners[mutator]) &&
447
- collIsEmpty(rowIdsListeners[mutator]) &&
448
- collIsEmpty(tableIdsListeners[mutator]);
449
- const emptyOtherListeners =
450
- collIsEmpty(cellListeners[mutator]) &&
451
- collIsEmpty(rowListeners[mutator]) &&
452
- collIsEmpty(tableListeners[mutator]) &&
453
- collIsEmpty(tablesListeners[mutator]);
454
- if (emptyIdListeners && emptyOtherListeners) {
455
- return;
456
- }
457
- const changes = mutator
458
- ? [
459
- mapClone(changedTableIds),
460
- mapClone(changedRowIds, mapClone),
461
- mapClone(changedCellIds, (table) => mapClone(table, mapClone)),
462
- mapClone(changedCells, (table) => mapClone(table, mapClone)),
463
- ]
464
- : [changedTableIds, changedRowIds, changedCellIds, changedCells];
465
- if (!emptyIdListeners) {
466
- collForEach(changes[2], (rowCellIds, tableId) =>
467
- collForEach(rowCellIds, (changedIds, rowId) => {
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(cellIdsListeners[mutator], [tableId, rowId]);
481
+ callListeners(rowIdsListeners[mutator], [tableId]);
470
482
  }
471
- }),
472
- );
473
- collForEach(changes[1], (changedIds, tableId) => {
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
- if (!emptyOtherListeners) {
483
- let tablesChanged;
484
- collForEach(changes[3], (rows, tableId) => {
485
- let tableChanged;
486
- collForEach(rows, (cells, rowId) => {
487
- let rowChanged;
488
- collForEach(cells, (oldCell, cellId) => {
489
- const newCell = getCell(tableId, rowId, cellId);
490
- if (newCell !== oldCell) {
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
- cellListeners[mutator],
493
- [tableId, rowId, cellId],
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 (rowChanged) {
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 (tableChanged) {
510
- callListeners(tableListeners[mutator], [tableId], getCellChange);
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
- validateTables(tables)
538
- ? transaction(() => setValidTables(tables))
539
- : transaction();
540
- return store;
541
- };
542
- const setTable = (tableId, table) => {
543
- validateTable(table, tableId)
544
- ? transaction(() => setValidTable(tableId, table))
545
- : transaction();
546
- return store;
547
- };
548
- const setRow = (tableId, rowId, row) => {
549
- validateRow(tableId, rowId, row)
550
- ? setValidRowTransaction(tableId, rowId, row)
551
- : transaction();
552
- return store;
553
- };
554
- const addRow = (tableId, row) => {
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
- : transaction();
563
- return rowId;
564
- };
565
- const setPartialRow = (tableId, rowId, partialRow) => {
566
- validateRow(tableId, rowId, partialRow, 1)
567
- ? transaction(() => {
568
- const table = getOrCreateTable(tableId);
569
- objForEach(partialRow, (cell, cellId) =>
570
- setCellIntoDefaultRow(tableId, table, rowId, cellId, cell),
571
- );
572
- })
573
- : transaction();
574
- return store;
575
- };
576
- const setCell = (tableId, rowId, cellId, cell) => {
577
- ifNotUndefined(
578
- getValidatedCell(
579
- tableId,
580
- rowId,
581
- cellId,
582
- isFunction(cell) ? cell(getCell(tableId, rowId, cellId)) : cell,
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
- if ((hasSchema = validateSchema(schema))) {
606
- setValidSchema(schema);
607
- if (!collIsEmpty(tablesMap)) {
608
- const tables = getTables();
609
- delTables();
610
- setTables(tables);
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
- return store;
632
- };
633
- const delCell = (tableId, rowId, cellId, forceDel) => {
634
- ifNotUndefined(mapGet(tablesMap, tableId), (tableMap) =>
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
- return store;
644
- };
645
- const delSchema = () => {
646
- setValidSchema({});
647
- hasSchema = false;
648
- return store;
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;
@@ -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) => validate(tables, validateTable);
1271
+ const validateTables = (tables) =>
1272
+ validate(tables, validateTable, cellInvalid);
1271
1273
  const validateTable = (table, tableId) =>
1272
- (!hasSchema || collHas(schemaMap, tableId)) &&
1273
- validate(table, (row, rowId) => validateRow(tableId, rowId, row));
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
- if (!collIsEmpty(invalidCellListeners[mutator])) {
1453
- collForEach(
1454
- mutator
1455
- ? mapClone(invalidCells, (table) => mapClone(table, mapClone))
1456
- : invalidCells,
1457
- (rows, tableId) =>
1458
- collForEach(rows, (cells, rowId) =>
1459
- collForEach(cells, (invalidCell, cellId) =>
1460
- callListeners(
1461
- invalidCellListeners[mutator],
1462
- [tableId, rowId, cellId],
1463
- invalidCell,
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
- const emptyIdListeners =
1472
- collIsEmpty(cellIdsListeners[mutator]) &&
1473
- collIsEmpty(rowIdsListeners[mutator]) &&
1474
- collIsEmpty(tableIdsListeners[mutator]);
1475
- const emptyOtherListeners =
1476
- collIsEmpty(cellListeners[mutator]) &&
1477
- collIsEmpty(rowListeners[mutator]) &&
1478
- collIsEmpty(tableListeners[mutator]) &&
1479
- collIsEmpty(tablesListeners[mutator]);
1480
- if (emptyIdListeners && emptyOtherListeners) {
1481
- return;
1482
- }
1483
- const changes = mutator
1484
- ? [
1485
- mapClone(changedTableIds),
1486
- mapClone(changedRowIds, mapClone),
1487
- mapClone(changedCellIds, (table) => mapClone(table, mapClone)),
1488
- mapClone(changedCells, (table) => mapClone(table, mapClone)),
1489
- ]
1490
- : [changedTableIds, changedRowIds, changedCellIds, changedCells];
1491
- if (!emptyIdListeners) {
1492
- collForEach(changes[2], (rowCellIds, tableId) =>
1493
- collForEach(rowCellIds, (changedIds, rowId) => {
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(cellIdsListeners[mutator], [tableId, rowId]);
1507
+ callListeners(rowIdsListeners[mutator], [tableId]);
1496
1508
  }
1497
- }),
1498
- );
1499
- collForEach(changes[1], (changedIds, tableId) => {
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
- if (!emptyOtherListeners) {
1509
- let tablesChanged;
1510
- collForEach(changes[3], (rows, tableId) => {
1511
- let tableChanged;
1512
- collForEach(rows, (cells, rowId) => {
1513
- let rowChanged;
1514
- collForEach(cells, (oldCell, cellId) => {
1515
- const newCell = getCell(tableId, rowId, cellId);
1516
- if (newCell !== oldCell) {
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
- cellListeners[mutator],
1519
- [tableId, rowId, cellId],
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 (rowChanged) {
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 (tableChanged) {
1536
- callListeners(tableListeners[mutator], [tableId], getCellChange);
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
- validateTables(tables)
1564
- ? transaction(() => setValidTables(tables))
1565
- : transaction();
1566
- return store;
1567
- };
1568
- const setTable = (tableId, table) => {
1569
- validateTable(table, tableId)
1570
- ? transaction(() => setValidTable(tableId, table))
1571
- : transaction();
1572
- return store;
1573
- };
1574
- const setRow = (tableId, rowId, row) => {
1575
- validateRow(tableId, rowId, row)
1576
- ? setValidRowTransaction(tableId, rowId, row)
1577
- : transaction();
1578
- return store;
1579
- };
1580
- const addRow = (tableId, row) => {
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
- : transaction();
1589
- return rowId;
1590
- };
1591
- const setPartialRow = (tableId, rowId, partialRow) => {
1592
- validateRow(tableId, rowId, partialRow, 1)
1593
- ? transaction(() => {
1594
- const table = getOrCreateTable(tableId);
1595
- objForEach(partialRow, (cell, cellId) =>
1596
- setCellIntoDefaultRow(tableId, table, rowId, cellId, cell),
1597
- );
1598
- })
1599
- : transaction();
1600
- return store;
1601
- };
1602
- const setCell = (tableId, rowId, cellId, cell) => {
1603
- ifNotUndefined(
1604
- getValidatedCell(
1605
- tableId,
1606
- rowId,
1607
- cellId,
1608
- isFunction(cell) ? cell(getCell(tableId, rowId, cellId)) : cell,
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
- if ((hasSchema = validateSchema(schema))) {
1632
- setValidSchema(schema);
1633
- if (!collIsEmpty(tablesMap)) {
1634
- const tables = getTables();
1635
- delTables();
1636
- setTables(tables);
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
- return store;
1658
- };
1659
- const delCell = (tableId, rowId, cellId, forceDel) => {
1660
- ifNotUndefined(mapGet(tablesMap, tableId), (tableMap) =>
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
- return store;
1670
- };
1671
- const delSchema = () => {
1672
- setValidSchema({});
1673
- hasSchema = false;
1674
- return store;
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),c=e=>e.slice(1),d=(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=>new Set(e),A=(e,t,s)=>a(s)<2?((e,t)=>e?.add(t))(o(s)?e:m(e,s[0],q()),t):A(m(e,s[0],y()),t,c(s)),B=e=>{const t=(s,n,...r)=>g(s,(s=>o(r)?e(s,n):l([r[0],null],(e=>t(v(s,e),n,...c(r))))));return t},D=(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},G=t=>{const s=e(t);return T(s)||s==n&&f(t)?s:void 0},H=(e,t)=>!(b(e)||!(e=>h(e,k)&&e.constructor==k)(e)||M(e))&&(P(e,((s,n)=>{t(s,n)||x(e,n)})),!(e=>o(F(e)))(e)),K=(e,t,s)=>J(e,t,v(e,t)==-s?void 0:s),Q=()=>{let t,s=0,o=0;const c=y(),f=y(),h=y(),k=y(),F=y(),M=y(),Q=y(),U=y(),V=I(q),W=I(q),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 c=n.pop()??""+s++;return J(r,c,[l,a,o]),A(a,c,o),c},(e,s=[],...n)=>B(R)(e,(e=>g(v(r,e),(([e])=>e(t,...s,...n)))),...s),e=>g(v(r,e),(([,t,s])=>(B(C)(t,e,...s),J(r,e),a(n)<1e3&&d(n,e),s)),(()=>[])),(e,s,n)=>g(v(r,e),(([e,,r])=>{const o=(...c)=>{const d=a(c);d==a(r)?e(t,...c,...n(c)):b(r[d])?l(s[d](...c),(e=>o(...c,e))):o(...c,r[d])};o()}))]})((()=>Pe)),le=(e,s)=>(!t||w(M,s))&&H(e,((e,t)=>ae(s,t,e))),ae=(e,t,s,n)=>H(n?s:ce(s,e),((n,r)=>g(oe(e,t,r,n),(e=>(s[r]=e,!0)),(()=>!1)))),oe=(e,s,n,r)=>t?g(v(v(M,e),n),(t=>G(r)!=t.type?ve(e,s,n,r,t.default):r)):b(G(r))?ve(e,s,n,r):r,ce=(e,t)=>(g(v(Q,t),(t=>P(t,((t,s)=>{j(e,s)||(e[s]=t)})))),e),de=e=>D(M,e,((e,t,s)=>{const n={};D(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=>D(U,e,((e,t,s)=>ue(t,s)),((e,t)=>pe(t))),ue=(e,t)=>D(m(U,e,y(),(()=>Ce(e,1))),t,((t,s,n)=>fe(e,t,s,n)),((t,s)=>Le(e,t,s))),fe=(e,t,s,n,r)=>D(m(t,s,y(),(()=>ye(e,s,1))),n,((t,n,r)=>he(e,s,t,n,r)),((n,l)=>Re(e,t,s,n,l,r))),he=(e,t,s,n,r)=>{w(s,n)||Ie(e,t,n,1);const l=v(s,n);r!==l&&(Se(e,t,n,l),J(s,n,r))},be=(e,t,s)=>xe((()=>fe(e,we(e),t,s))),ge=(e,t,s,n,r)=>g(v(t,s),(t=>he(e,s,t,n,r)),(()=>fe(e,t,s,ce({[n]:r},e)))),Te=e=>{const t=""+s++;return w(e,t)?Te(e):t},we=e=>v(U,e)??ue(e,{}),pe=e=>ue(e,{}),Le=(e,t,s)=>fe(e,t,s,{},!0),Re=(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=>{Se(e,s,t,v(n,t)),Ie(e,s,t,-1),J(n,t)};b(a)?o(r):E(n,o),p(n)&&(ye(e,s,-1),p(J(t,s))&&(Ce(e,-1),J(U,e)))},Ce=(e,t)=>K(c,e,t),ye=(e,t,s)=>K(m(f,e,y()),t,s),Ie=(e,t,s,n)=>K(m(m(h,e,y()),t,y()),s,n),Se=(e,t,s,n)=>m(m(m(k,e,y()),t,y()),s,n),ve=(e,t,s,n,r)=>(d(m(m(m(F,e,y()),t,y()),s,[]),n),r),Ee=(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]},Je=e=>{p(ee[e])||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)))))))},me=e=>{const t=p($[e])&&p(Y[e])&&p(W[e]),s=p(_[e])&&p(Z[e])&&p(X[e])&&p(V[e]);if(t&&s)return;const n=e?[O(c),O(f,O),O(h,(e=>O(e,O))),O(k,(e=>O(e,O)))]:[c,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 c=Me(n,l,o);c!==s&&(se(_[e],[n,l,o],c,s,Ee),t=r=a=1)})),a&&se(Z[e],[n,l],Ee)})),r&&se(X[e],[n],Ee)})),t&&se(V[e],[],Ee)}},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=>((e=>H(e,le))(e)?xe((()=>ie(e))):xe(),Pe),je=()=>(xe((()=>ie({}))),Pe),xe=e=>{if(-1==o)return;o++;const t=e?.();return o--,0==o&&(o=1,Je(1),me(1),o=-1,Je(0),me(0),o=0,l([k,F,c,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)=>(le(t,e)?xe((()=>ue(e,t))):xe(),Pe),setRow:(e,t,s)=>(ae(e,t,s)?be(e,t,s):xe(),Pe),addRow:(e,t)=>{let s;return ae(e,s,t)?be(e,s=Te(v(U,e)),t):xe(),s},setPartialRow:(e,t,s)=>(ae(e,t,s,1)?xe((()=>{const n=we(e);P(s,((s,r)=>ge(e,n,t,r,s)))})):xe(),Pe),setCell:(t,s,n,l)=>(g(oe(t,s,n,e(l)==r?l(Me(t,s,n)):l),(e=>xe((()=>ge(t,we(t),s,n,e)))),xe),Pe),setJson:e=>{try{"{}"===e?je():Ne(u(e))}catch{}return Pe},setSchema:e=>{if((t=(e=>H(e,(e=>H(e,(e=>{if(!H(e,((e,t)=>["type","default"].includes(t))))return!1;const t=e.type;return!(!T(t)&&t!=n||(G(e.default)!=t&&x(e,"default"),0))})))))(e))&&(de(e),!p(U))){const e=ze();je(),Ne(e)}return Pe},delTables:je,delTable:e=>(w(U,e)&&xe((()=>pe(e))),Pe),delRow:(e,t)=>(g(v(U,e),(s=>{w(s,t)&&xe((()=>Le(e,s,t)))})),Pe),delCell:(e,t,s,n)=>(g(v(U,e),(r=>g(v(r,t),(l=>{w(l,s)&&xe((()=>Re(e,r,t,l,s,n)))})))),Pe),delSchema:()=>(de({}),t=!1,Pe),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{Q as createStore};
1
+ const e=e=>typeof e,t=e(""),s=e(!0),n=e(0),r=e(e),l=(e,t)=>e.forEach(t),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};
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),D=(e,t,s)=>c(s)<2?((e,t)=>e?.add(t))(i(s)?e:x(e,s[0],A()),t):D(x(e,s[0],I()),t,u(s)),G=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},H=(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},K=e=>{const s=t(e);return w(s)||s==r&&p(e)?s:void 0},Q=(e,t)=>!(g(e)||!(e=>T(e,k)&&e.constructor==k)(e)||N(e)||(q(e,((s,n)=>{t(s,n)||B(e,n)})),(e=>i(F(e)))(e))),U=(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(),V=I(),W=m(A),X=m(A),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]),D(o,d,a),d},(e,s=[],...n)=>G(S)(e,(e=>y(J(r,e),(([e])=>e(t,...s,...n)))),...s),e=>y(J(r,e),(([,t,s])=>(G(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))&&Q(t,((e,t)=>de(s,t,e))),de=(e,t,s,n)=>Q(n?s:ie(s,e),((n,r)=>y(ce(e,t,r,n),(e=>(s[r]=e,!0)),(()=>!1)))),ce=(t,s,n,r)=>e?y(J(J(F,t),n),(e=>K(r)!=e.type?Ee(t,s,n,r,e.default):r)):g(K(r))?Ee(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=>H(F,e,((e,t,s)=>{const n={};H(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=>H(V,e,((e,t,s)=>he(t,s)),((e,t)=>Le(t))),he=(e,t)=>H(x(V,e,I(),(()=>Se(e,1))),t,((t,s,n)=>be(e,t,s,n)),((t,s)=>Re(e,t,s))),be=(e,t,s,n,r)=>H(x(t,s,I(),(()=>ve(e,s,1))),n,((t,n,r)=>pe(e,s,t,n,r)),((n,l)=>Ce(e,t,s,n,l,r))),pe=(e,t,s,n,r)=>{L(s,n)||Ie(e,t,n,1);const l=J(s,n);r!==l&&(me(e,t,n,l),j(s,n,r))},Te=(e,t,s)=>_e((()=>be(e,we(e),t,s))),ge=(e,t,s,n,r)=>y(J(t,s),(t=>pe(e,s,t,n,r)),(()=>be(e,t,s,ie({[n]:r},e)))),ye=e=>{const t=""+s++;return L(e,t)?ye(e):t},we=e=>J(V,e)??he(e,{}),Le=e=>he(e,{}),Re=(e,t,s)=>be(e,t,s,{},!0),Ce=(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=>{me(e,s,t,J(n,t)),Ie(e,s,t,-1),j(n,t)};g(o)?a(r):O(n,a),R(n)&&(ve(e,s,-1),R(j(t,s))&&(Se(e,-1),j(V,e)))},Se=(e,t)=>U(i,e,t),ve=(e,t,s)=>U(x(u,e,I()),t,s),Ie=(e,t,s,n)=>U(x(x(p,e,I()),t,I()),s,n),me=(e,t,s,n)=>x(x(x(T,e,I()),t,I()),s,n),Ee=(e,t,s,n,r)=>(f(x(x(x(k,e,I()),t,I()),s,[]),n),r),Je=(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]},Oe=e=>{R(se[e])||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)))))))},je=e=>{const t=R(ee[e])&&R(Z[e])&&R(X[e]),s=R(te[e])&&R($[e])&&R(Y[e])&&R(W[e]);if(t&&s)return;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,Je),t=r=o=1)})),o&&re($[e],[n,l],Je)})),r&&re(Y[e],[n],Je)})),t&&re(W[e],[],Je)}},xe=()=>z(V,(e=>z(e,z))),ze=()=>E(V),Me=e=>E(J(V,e)),ke=(e,t)=>E(J(J(V,e),t)),Fe=(e,t,s)=>J(J(J(V,e),t),s),Ne=e=>((e=>Q(e,ae))(e)?_e((()=>fe(e))):_e(),Be),Pe=()=>(_e((()=>fe({}))),Be),_e=e=>{if(-1==n)return;n++;const t=e?.();return n--,0==n&&(n=1,Oe(1),je(1),n=-1,Oe(0),je(0),n=0,d([T,k,i,u,p],C)),t},Be={getTables:xe,getTableIds:ze,getTable:e=>z(J(V,e),z),getRowIds:Me,getRow:(e,t)=>z(J(J(V,e),t)),getCellIds:ke,getCell:Fe,hasTables:()=>!R(V),hasTable:e=>L(V,e),hasRow:(e,t)=>L(J(V,e),t),hasCell:(e,t,s)=>L(J(J(V,e),t),s),getJson:()=>h(V),getSchemaJson:()=>h(F),setTables:Ne,setTable:(e,t)=>(ae(t,e)?_e((()=>he(e,t))):_e(),Be),setRow:(e,t,s)=>(de(e,t,s)?Te(e,t,s):_e(),Be),addRow:(e,t)=>{let s;return de(e,s,t)?Te(e,s=ye(J(V,e)),t):_e(),s},setPartialRow:(e,t,s)=>(de(e,t,s,1)?_e((()=>{const n=we(e);q(s,((s,r)=>ge(e,n,t,r,s)))})):_e(),Be),setCell:(e,s,n,r)=>(y(ce(e,s,n,t(r)==l?r(Fe(e,s,n)):r),(t=>_e((()=>ge(e,we(e),s,n,t)))),_e),Be),setJson:e=>{try{"{}"===e?Pe():Ne(b(e))}catch{}return Be},setSchema:t=>{if((e=(e=>Q(e,(e=>Q(e,(e=>{if(!Q(e,((e,t)=>[o,a].includes(t))))return!1;const t=e.type;return!(!w(t)&&t!=r||(K(e.default)!=t&&B(e,a),0))})))))(t))&&(ue(t),!R(V))){const e=xe();Pe(),Ne(e)}return Be},delTables:Pe,delTable:e=>(L(V,e)&&_e((()=>Le(e))),Be),delRow:(e,t)=>(y(J(V,e),(s=>{L(s,t)&&_e((()=>Re(e,s,t)))})),Be),delCell:(e,t,s,n)=>(y(J(V,e),(r=>y(J(r,t),(l=>{L(l,s)&&_e((()=>Ce(e,r,t,l,s,n)))})))),Be),delSchema:()=>(ue({}),e=!1,Be),transaction:_e,forEachTable:e=>S(V,((t,s)=>e(s,(e=>S(t,((t,s)=>e(s,(e=>O(t,e))))))))),forEachRow:(e,t)=>S(J(V,e),((e,s)=>t(s,(t=>O(e,t))))),forEachCell:(e,t,s)=>O(J(J(V,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={});
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={});
Binary file
@@ -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);
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tinybase",
3
- "version": "1.1.0-beta.0",
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.1",
76
- "@typescript-eslint/parser": "^5.10.1",
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.17.0",
83
- "esbuild": "^0.14.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.2",
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&#x27;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&#x27;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.6kB</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.7kB</td><td>57.3kB</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>971</td><td>971</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>1,061</td><td>1,061</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>393</td><td>393</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>347</td><td>347</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">1,738</td></tr><tr><th class="right">Assertions</th><td colspan="3">8,379</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.0">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&#x27;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>
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&#x27;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&#x27;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&#x27;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>