tinybase 2.0.0-beta.2 → 2.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/lib/checkpoints.js +1 -1
  2. package/lib/checkpoints.js.gz +0 -0
  3. package/lib/debug/checkpoints.js +1 -4
  4. package/lib/debug/indexes.js +1 -3
  5. package/lib/debug/metrics.js +1 -4
  6. package/lib/debug/queries.d.ts +61 -296
  7. package/lib/debug/queries.js +59 -201
  8. package/lib/debug/relationships.js +1 -4
  9. package/lib/debug/store.d.ts +112 -90
  10. package/lib/debug/store.js +90 -149
  11. package/lib/debug/tinybase.js +130 -333
  12. package/lib/debug/ui-react.d.ts +81 -81
  13. package/lib/debug/ui-react.js +138 -173
  14. package/lib/indexes.js +1 -1
  15. package/lib/indexes.js.gz +0 -0
  16. package/lib/metrics.js +1 -1
  17. package/lib/metrics.js.gz +0 -0
  18. package/lib/queries.d.ts +61 -296
  19. package/lib/queries.js +1 -1
  20. package/lib/queries.js.gz +0 -0
  21. package/lib/relationships.js +1 -1
  22. package/lib/relationships.js.gz +0 -0
  23. package/lib/store.d.ts +112 -90
  24. package/lib/store.js +1 -1
  25. package/lib/store.js.gz +0 -0
  26. package/lib/tinybase.js +1 -1
  27. package/lib/tinybase.js.gz +0 -0
  28. package/lib/ui-react.d.ts +81 -81
  29. package/lib/ui-react.js +1 -1
  30. package/lib/ui-react.js.gz +0 -0
  31. package/lib/umd/checkpoints.js +1 -1
  32. package/lib/umd/checkpoints.js.gz +0 -0
  33. package/lib/umd/indexes.js +1 -1
  34. package/lib/umd/indexes.js.gz +0 -0
  35. package/lib/umd/metrics.js +1 -1
  36. package/lib/umd/metrics.js.gz +0 -0
  37. package/lib/umd/queries.js +1 -1
  38. package/lib/umd/queries.js.gz +0 -0
  39. package/lib/umd/relationships.js +1 -1
  40. package/lib/umd/relationships.js.gz +0 -0
  41. package/lib/umd/store.js +1 -1
  42. package/lib/umd/store.js.gz +0 -0
  43. package/lib/umd/tinybase.js +1 -1
  44. package/lib/umd/tinybase.js.gz +0 -0
  45. package/lib/umd/ui-react.js +1 -1
  46. package/lib/umd/ui-react.js.gz +0 -0
  47. package/package.json +9 -9
  48. package/readme.md +2 -2
package/lib/store.d.ts CHANGED
@@ -94,7 +94,7 @@ export type Cell = string | number | boolean;
94
94
  *
95
95
  * This is used when describing a Cell that is present _or_ that is not present
96
96
  * - such as when it has been deleted, or when describing a previous state where
97
- * the Cell value has since been added.
97
+ * the Cell value has since been added.
98
98
  *
99
99
  * @category Store
100
100
  */
@@ -293,14 +293,17 @@ export type RowIdsListener = (store: Store, tableId: Id) => void;
293
293
  *
294
294
  * When called, a SortedRowIdsListener is given a reference to the Store, the Id
295
295
  * of the Table whose Row Ids sorting changed, the Cell Id being used to sort
296
- * them, and whether descending or not. It also receives the sorted array of Ids
297
- * itself, so that you can use them in the listener without the additional cost
298
- * of an explicit call to getSortedRowIds.
296
+ * them, whether descending or not, and the offset and limit of the number of
297
+ * Ids returned, for pagination purposes. It also receives the sorted array of
298
+ * Ids itself, so that you can use them in the listener without the additional
299
+ * cost of an explicit call to getSortedRowIds.
299
300
  *
300
301
  * @param store A reference to the Store that changed.
301
302
  * @param tableId The Id of the Table whose sorted Row Ids changed.
302
303
  * @param cellId The Id of the Cell whose values were used for the sorting.
303
304
  * @param descending Whether the sorting was in descending order.
305
+ * @param offset The number of Row Ids skipped.
306
+ * @param limit The maximum number of Row Ids returned.
304
307
  * @param sortedRowIds The sorted Row Ids themselves.
305
308
  * @category Listener
306
309
  * @since v2.0.0
@@ -310,6 +313,8 @@ export type SortedRowIdsListener = (
310
313
  tableId: Id,
311
314
  cellId: Id | undefined,
312
315
  descending: boolean,
316
+ offset: number,
317
+ limit: number | undefined,
313
318
  sortedRowIds: Ids,
314
319
  ) => void;
315
320
 
@@ -827,9 +832,7 @@ export interface Store {
827
832
  * The getTableIds method returns the Ids of every Table in the Store.
828
833
  *
829
834
  * Note that this returns a copy of, rather than a reference, to the list of
830
- * Ids, so changes made to the list are not made to the Store itself. Since
831
- * v2.0.0, the order is significant: this method will return the Ids in the
832
- * order in which each Table was added.
835
+ * Ids, so changes made to the list are not made to the Store itself.
833
836
  *
834
837
  * @returns An array of the Ids of every Table in the Store.
835
838
  * @example
@@ -894,9 +897,7 @@ export interface Store {
894
897
  * The getRowIds method returns the Ids of every Row in a given Table.
895
898
  *
896
899
  * Note that this returns a copy of, rather than a reference, to the list of
897
- * Ids, so changes made to the list are not made to the Store itself. Since
898
- * v2.0.0, the order is significant: this method will return the Ids in the
899
- * order in which each Row was added.
900
+ * Ids, so changes made to the list are not made to the Store itself.
900
901
  *
901
902
  * @param tableId The Id of the Table in the Store.
902
903
  * @returns An array of the Ids of every Row in the Table.
@@ -931,7 +932,9 @@ export interface Store {
931
932
  * sorted according to the values in a specified Cell.
932
933
  *
933
934
  * The sorting of the rows is alphanumeric, and you can indicate whether it
934
- * should be in descending order.
935
+ * should be in descending order. The `offset` and `limit` parameters are used
936
+ * to paginate results, but default to `0` and `undefined` to return all
937
+ * available Row Ids if not specified.
935
938
  *
936
939
  * Note that every call to this method will perform the sorting afresh - there
937
940
  * is no caching of the results - and so you are advised to memoize the
@@ -945,6 +948,10 @@ export interface Store {
945
948
  * @param cellId The Id of the Cell whose values are used for the sorting, or
946
949
  * `undefined` to by sort the Row Id itself.
947
950
  * @param descending Whether the sorting should be in descending order.
951
+ * @param offset The number of Row Ids to skip for pagination purposes, if
952
+ * any.
953
+ * @param limit The maximum number of Row Ids to return, or `undefined` for
954
+ * all.
948
955
  * @returns An array of the sorted Ids of every Row in the Table.
949
956
  * @example
950
957
  * This example retrieves sorted Row Ids in a Table.
@@ -974,6 +981,25 @@ export interface Store {
974
981
  * // -> ['cujo', 'fido', 'felix']
975
982
  * ```
976
983
  * @example
984
+ * This example retrieves two pages of Row Ids in a Table.
985
+ *
986
+ * ```js
987
+ * const store = createStore().setTables({
988
+ * pets: {
989
+ * fido: {price: 6},
990
+ * felix: {price: 5},
991
+ * mickey: {price: 2},
992
+ * tom: {price: 4},
993
+ * carnaby: {price: 3},
994
+ * lowly: {price: 1},
995
+ * },
996
+ * });
997
+ * console.log(store.getSortedRowIds('pets', 'price', false, 0, 2));
998
+ * // -> ['lowly', 'mickey']
999
+ * console.log(store.getSortedRowIds('pets', 'price', false, 2, 2));
1000
+ * // -> ['carnaby', 'tom']
1001
+ * ```
1002
+ * @example
977
1003
  * This example retrieves Row Ids sorted by their own value, since the
978
1004
  * `cellId` parameter is undefined.
979
1005
  *
@@ -1000,7 +1026,13 @@ export interface Store {
1000
1026
  * @category Getter
1001
1027
  * @since v2.0.0
1002
1028
  */
1003
- getSortedRowIds(tableId: Id, cellId?: Id, descending?: boolean): Ids;
1029
+ getSortedRowIds(
1030
+ tableId: Id,
1031
+ cellId?: Id,
1032
+ descending?: boolean,
1033
+ offset?: number,
1034
+ limit?: number,
1035
+ ): Ids;
1004
1036
 
1005
1037
  /**
1006
1038
  * The getRow method returns an object containing the entire data of a single
@@ -1044,9 +1076,7 @@ export interface Store {
1044
1076
  * given Table.
1045
1077
  *
1046
1078
  * Note that this returns a copy of, rather than a reference, to the list of
1047
- * Ids, so changes made to the list are not made to the Store itself. Since
1048
- * v2.0.0, the order is significant: this method will return the Ids in the
1049
- * order in which each Cell was added.
1079
+ * Ids, so changes made to the list are not made to the Store itself.
1050
1080
  *
1051
1081
  * @param tableId The Id of the Table in the Store.
1052
1082
  * @param rowId The Id of the Row in the Table.
@@ -2212,12 +2242,6 @@ export interface Store {
2212
2242
  * removed. To listen to all changes in the Store, use the addTablesListener
2213
2243
  * method.
2214
2244
  *
2215
- * Since v2.0.0, you can use the optional `trackReorder` parameter to
2216
- * additionally track when the set of Ids has not changed, but the order has -
2217
- * for example when a Table from the middle of the Store is removed and then
2218
- * added back within the same transaction. This behavior is disabled by
2219
- * default due to the potential performance cost of detecting such changes.
2220
- *
2221
2245
  * Use the optional mutator parameter to indicate that there is code in the
2222
2246
  * listener that will mutate Store data. If set to `false` (or omitted), such
2223
2247
  * mutations will be silently ignored. All relevant mutator listeners (with
@@ -2228,9 +2252,6 @@ export interface Store {
2228
2252
  *
2229
2253
  * @param listener The function that will be called whenever the Table Ids in
2230
2254
  * the Store change.
2231
- * @param trackReorder An optional boolean that indicates that the listener
2232
- * should be called if the set of Ids remains the same but their order
2233
- * changes.
2234
2255
  * @param mutator An optional boolean that indicates that the listener mutates
2235
2256
  * Store data.
2236
2257
  * @returns A unique Id for the listener that can later be used to call it
@@ -2260,7 +2281,6 @@ export interface Store {
2260
2281
  * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
2261
2282
  * const listenerId = store.addTableIdsListener(
2262
2283
  * (store) => store.setCell('meta', 'update', 'store', true),
2263
- * false, // track reorder
2264
2284
  * true, // mutator
2265
2285
  * );
2266
2286
  *
@@ -2272,11 +2292,7 @@ export interface Store {
2272
2292
  * ```
2273
2293
  * @category Listener
2274
2294
  */
2275
- addTableIdsListener(
2276
- listener: TableIdsListener,
2277
- trackReorder?: boolean,
2278
- mutator?: boolean,
2279
- ): Id;
2295
+ addTableIdsListener(listener: TableIdsListener, mutator?: boolean): Id;
2280
2296
 
2281
2297
  /**
2282
2298
  * The addTableListener method registers a listener function with the Store
@@ -2389,12 +2405,6 @@ export interface Store {
2389
2405
  * method's first parameter) or changes to any Table (by providing a `null`
2390
2406
  * wildcard).
2391
2407
  *
2392
- * Since v2.0.0, you can use the optional `trackReorder` parameter to
2393
- * additionally track when the set of Ids has not changed, but the order has -
2394
- * for example when a Row from the middle of the Table is removed and then
2395
- * added back within the same transaction. This behavior is disabled by
2396
- * default due to the potential performance cost of detecting such changes.
2397
- *
2398
2408
  * Use the optional mutator parameter to indicate that there is code in the
2399
2409
  * listener that will mutate Store data. If set to `false` (or omitted), such
2400
2410
  * mutations will be silently ignored. All relevant mutator listeners (with
@@ -2406,9 +2416,6 @@ export interface Store {
2406
2416
  * @param tableId The Id of the Table to listen to, or `null` as a wildcard.
2407
2417
  * @param listener The function that will be called whenever the Row Ids in
2408
2418
  * the Table change.
2409
- * @param trackReorder An optional boolean that indicates that the listener
2410
- * should be called if the set of Ids remains the same but their order
2411
- * changes.
2412
2419
  * @param mutator An optional boolean that indicates that the listener mutates
2413
2420
  * Store data.
2414
2421
  * @returns A unique Id for the listener that can later be used to call it
@@ -2431,36 +2438,6 @@ export interface Store {
2431
2438
  * store.delListener(listenerId);
2432
2439
  * ```
2433
2440
  * @example
2434
- * This example registers a listener that responds to a change of order in the
2435
- * rows of a specific Table, even though the set of Ids themselves has not
2436
- * changed.
2437
- *
2438
- * ```js
2439
- * const store = createStore().setTables({
2440
- * pets: {
2441
- * fido: {species: 'dog'},
2442
- * felix: {species: 'cat'},
2443
- * },
2444
- * });
2445
- * const listenerId = store.addRowIdsListener(
2446
- * 'pets',
2447
- * (store) => {
2448
- * console.log('Row Ids or order for pets table changed');
2449
- * console.log(store.getRowIds('pets'));
2450
- * },
2451
- * true, // track reorder
2452
- * );
2453
- *
2454
- * store.transaction(() => {
2455
- * store.delRow('pets', 'fido');
2456
- * store.setRow('pets', 'fido', {species: 'dog'});
2457
- * });
2458
- * // -> 'Row Ids or order for pets table changed'
2459
- * // -> ['felix', 'fido']
2460
- *
2461
- * store.delListener(listenerId);
2462
- * ```
2463
- * @example
2464
2441
  * This example registers a listener that responds to any change to the Row
2465
2442
  * Ids of any Table.
2466
2443
  *
@@ -2489,7 +2466,6 @@ export interface Store {
2489
2466
  * const listenerId = store.addRowIdsListener(
2490
2467
  * 'pets',
2491
2468
  * (store, tableId) => store.setCell('meta', 'update', tableId, true),
2492
- * false, // track reorder
2493
2469
  * true, // mutator
2494
2470
  * );
2495
2471
  *
@@ -2504,20 +2480,21 @@ export interface Store {
2504
2480
  addRowIdsListener(
2505
2481
  tableId: IdOrNull,
2506
2482
  listener: RowIdsListener,
2507
- trackReorder?: boolean,
2508
2483
  mutator?: boolean,
2509
2484
  ): Id;
2510
2485
 
2511
2486
  /**
2512
2487
  * The addSortedRowIdsListener method registers a listener function with the
2513
- * Store that will be called whenever sorted Row Ids in a Table change.
2488
+ * Store that will be called whenever sorted (and optionally, paginated) Row
2489
+ * Ids in a Table change.
2514
2490
  *
2515
2491
  * The provided listener is a SortedRowIdsListener function, and will be
2516
2492
  * called with a reference to the Store, the Id of the Table whose Row Ids
2517
- * sorting changed, the Cell Id being used to sort them, and whether
2518
- * descending or not. It also receives the sorted array of Ids itself, so that
2519
- * you can use them in the listener without the additional cost of an explicit
2520
- * call to getSortedRowIds.
2493
+ * sorting changed, the Cell Id being used to sort them, whether descending or
2494
+ * not, and the offset and limit of the number of Ids returned, for pagination
2495
+ * purposes. It also receives the sorted array of Ids itself, so that you can
2496
+ * use them in the listener without the additional cost of an explicit call to
2497
+ * getSortedRowIds.
2521
2498
  *
2522
2499
  * Such a listener is called when a Row is added or removed, but also when a
2523
2500
  * value in the specified Cell (somewhere in the Table) has changed enough to
@@ -2527,6 +2504,11 @@ export interface Store {
2527
2504
  * of detecting changes to the sorting). You can only listen to a single
2528
2505
  * specified Table, sorted by a single specified Cell.
2529
2506
  *
2507
+ * The sorting of the rows is alphanumeric, and you can indicate whether it
2508
+ * should be in descending order. The `offset` and `limit` parameters are used
2509
+ * to paginate results, but default to `0` and `undefined` to return all
2510
+ * available Row Ids if not specified.
2511
+ *
2530
2512
  * Use the optional mutator parameter to indicate that there is code in the
2531
2513
  * listener that will mutate Store data. If set to `false` (or omitted), such
2532
2514
  * mutations will be silently ignored. All relevant mutator listeners (with
@@ -2539,6 +2521,10 @@ export interface Store {
2539
2521
  * @param cellId The Id of the Cell whose values are used for the sorting, or
2540
2522
  * `undefined` to by sort the Row Id itself.
2541
2523
  * @param descending Whether the sorting should be in descending order.
2524
+ * @param offset The number of Row Ids to skip for pagination purposes, if
2525
+ * any.
2526
+ * @param limit The maximum number of Row Ids to return, or `undefined` for
2527
+ * all.
2542
2528
  * @param listener The function that will be called whenever the sorted Row
2543
2529
  * Ids in the Table change.
2544
2530
  * @param mutator An optional boolean that indicates that the listener mutates
@@ -2563,7 +2549,9 @@ export interface Store {
2563
2549
  * 'pets',
2564
2550
  * 'species',
2565
2551
  * false,
2566
- * (store, tableId, cellId, descending, sortedRowIds) => {
2552
+ * 0,
2553
+ * undefined,
2554
+ * (store, tableId, cellId, descending, offset, limit, sortedRowIds) => {
2567
2555
  * console.log(`Sorted Row Ids for ${tableId} table changed`);
2568
2556
  * console.log(sortedRowIds);
2569
2557
  * // ^ cheaper than calling getSortedRowIds again
@@ -2577,6 +2565,43 @@ export interface Store {
2577
2565
  * store.delListener(listenerId);
2578
2566
  * ```
2579
2567
  * @example
2568
+ * This 111example registers a listener that responds to any change to a
2569
+ * paginated section of the sorted Row Ids of a specific Table.
2570
+ *
2571
+ * ```js
2572
+ * const store = createStore().setTables({
2573
+ * pets: {
2574
+ * fido: {price: 6},
2575
+ * felix: {price: 5},
2576
+ * mickey: {price: 2},
2577
+ * tom: {price: 4},
2578
+ * carnaby: {price: 3},
2579
+ * lowly: {price: 1},
2580
+ * },
2581
+ * });
2582
+ *
2583
+ * const listenerId = store.addSortedRowIdsListener(
2584
+ * 'pets',
2585
+ * 'price',
2586
+ * false,
2587
+ * 0,
2588
+ * 3,
2589
+ * (store, tableId, cellId, descending, offset, limit, sortedRowIds) => {
2590
+ * console.log(`First three sorted Row Ids for ${tableId} table changed`);
2591
+ * console.log(sortedRowIds);
2592
+ * // ^ cheaper than calling getSortedRowIds again
2593
+ * },
2594
+ * );
2595
+ * console.log(store.getSortedRowIds('pets', 'price', false, 0, 3));
2596
+ * // -> ['lowly', 'mickey', 'carnaby']
2597
+ *
2598
+ * store.setCell('pets', 'carnaby', 'price', 4.5);
2599
+ * // -> 'First three sorted Row Ids for pets table changed'
2600
+ * // -> ['lowly', 'mickey', 'tom']
2601
+ *
2602
+ * store.delListener(listenerId);
2603
+ * ```
2604
+ * @example
2580
2605
  * This example registers a listener that responds to any change to the sorted
2581
2606
  * Row Ids of a specific Table. The Row Ids are sorted by their own value,
2582
2607
  * since the `cellId` parameter is explicitly undefined.
@@ -2595,7 +2620,9 @@ export interface Store {
2595
2620
  * 'pets',
2596
2621
  * undefined,
2597
2622
  * false,
2598
- * (store, tableId, cellId, descending, sortedRowIds) => {
2623
+ * 0,
2624
+ * undefined,
2625
+ * (store, tableId, cellId, descending, offset, limit, sortedRowIds) => {
2599
2626
  * console.log(`Sorted Row Ids for ${tableId} table changed`);
2600
2627
  * console.log(sortedRowIds);
2601
2628
  * // ^ cheaper than calling getSortedRowIds again
@@ -2627,7 +2654,9 @@ export interface Store {
2627
2654
  * 'pets',
2628
2655
  * 'species',
2629
2656
  * false,
2630
- * (store, tableId, cellId, descending, sortedRowIds) => {
2657
+ * 0,
2658
+ * undefined,
2659
+ * (store, tableId, cellId, descending, offset, limit, sortedRowIds) => {
2631
2660
  * console.log(`Sorted Row Ids for ${tableId} table changed`);
2632
2661
  * console.log(sortedRowIds);
2633
2662
  * // ^ cheaper than calling getSortedRowIds again
@@ -2655,6 +2684,8 @@ export interface Store {
2655
2684
  * 'pets',
2656
2685
  * 'species',
2657
2686
  * false,
2687
+ * 0,
2688
+ * undefined,
2658
2689
  * (store, tableId) => store.setCell('meta', 'sorted', tableId, true),
2659
2690
  * true, // mutator
2660
2691
  * );
@@ -2672,6 +2703,8 @@ export interface Store {
2672
2703
  tableId: Id,
2673
2704
  cellId: Id | undefined,
2674
2705
  descending: boolean,
2706
+ offset: number,
2707
+ limit: number | undefined,
2675
2708
  listener: SortedRowIdsListener,
2676
2709
  mutator?: boolean,
2677
2710
  ): Id;
@@ -2806,12 +2839,6 @@ export interface Store {
2806
2839
  * Table, any Row in a specific Table, a specific Row in any Table, or any Row
2807
2840
  * in any Table.
2808
2841
  *
2809
- * Since v2.0.0, you can use the optional `trackReorder` parameter to
2810
- * additionally track when the set of Ids has not changed, but the order has -
2811
- * for example when a Cell from the middle of the Row is removed and then
2812
- * added back within the same transaction. This behavior is disabled by
2813
- * default due to the potential performance cost of detecting such changes.
2814
- *
2815
2842
  * Use the optional mutator parameter to indicate that there is code in the
2816
2843
  * listener that will mutate Store data. If set to `false` (or omitted), such
2817
2844
  * mutations will be silently ignored. All relevant mutator listeners (with
@@ -2824,9 +2851,6 @@ export interface Store {
2824
2851
  * @param rowId The Id of the Row to listen to, or `null` as a wildcard.
2825
2852
  * @param listener The function that will be called whenever the Cell Ids in
2826
2853
  * the Row change.
2827
- * @param trackReorder An optional boolean that indicates that the listener
2828
- * should be called if the set of Ids remains the same but their order
2829
- * changes.
2830
2854
  * @param mutator An optional boolean that indicates that the listener mutates
2831
2855
  * Store data.
2832
2856
  * @returns A unique Id for the listener that can later be used to call it
@@ -2883,7 +2907,6 @@ export interface Store {
2883
2907
  * 'fido',
2884
2908
  * (store, tableId, rowId) =>
2885
2909
  * store.setCell('meta', 'update', `${tableId}_${rowId}`, true),
2886
- * false, // track reorder
2887
2910
  * true, // mutator
2888
2911
  * );
2889
2912
  *
@@ -2899,7 +2922,6 @@ export interface Store {
2899
2922
  tableId: IdOrNull,
2900
2923
  rowId: IdOrNull,
2901
2924
  listener: CellIdsListener,
2902
- trackReorder?: boolean,
2903
2925
  mutator?: boolean,
2904
2926
  ): Id;
2905
2927
 
package/lib/store.js CHANGED
@@ -1 +1 @@
1
- const e=e=>typeof e,t=e(""),n=e(!0),s=e(0),r=e(e),l=(e,t)=>e.every(t),o=(e,t)=>i(e)===i(t)&&l(e,((e,n)=>t[n]===e)),a=(e,t)=>e.forEach(t),d=(e,t)=>e.map(t),i=e=>e.length,c=(e,t,n)=>e.reduce(t,n),u=(e,...t)=>e.push(...t),f=e=>JSON.stringify(e,((e,t)=>v(t,Map)?c([...t],((e,[t,n])=>(e[t]=n,e)),{}):t)),h=JSON.parse,T=isFinite,v=(e,t)=>e instanceof t,b=e=>null==e,g=(e,t,n)=>b(e)?n?.():t(e),w=e=>e==t||e==n,L=e=>e.size,p=(R=L,e=>c(y(e),((e,t)=>e+R(t)),0));var R;const C=(e,t)=>e?.has(t)??!1,S=e=>b(e)||0==L(e),y=e=>[...e?.values()??[]],I=e=>e.clear(),E=(e,t)=>e?.forEach(t),J=(e,t)=>e?.delete(t),m=e=>new Map(e),F=e=>[...e?.keys()??[]],z=(e,t)=>e?.get(t),O=(e,t)=>E(e,((e,n)=>t(n,e))),k=(e,t,n)=>b(n)?(J(e,t),e):e?.set(t,n),M=(e,t,n)=>(C(e,t)||k(e,t,n()),z(e,t)),N=(e,t,n)=>{const s={},r=t??(e=>e);return E(e,((e,t)=>g(r(e),(e=>n?.(e)?0:s[t]=e)))),s},j=(e,t)=>{const n=m(),s=t??(e=>e);return E(e,((e,t)=>n.set(t,s(e)))),n},x=e=>j(e,j),D=(e,t,n,s,r=0)=>g((n?M:z)(e,t[r],r>i(t)-2?n:m),(l=>{if(r>i(t)-2)return s?.(l)&&k(e,t[r]),l;const o=D(l,t,n,s,r+1);return S(l)&&k(e,t[r]),o})),P=Object,W=P.keys,q=P.isFrozen,A=P.freeze,B=(e,t)=>!b(((e,t)=>g(e,(e=>e[t])))(e,t)),G=(e,t)=>delete e[t],H=(e,t)=>a(P.entries(e),(([e,n])=>t(n,e))),K=e=>{return t=W(e),0==i(t);var t},Q=e=>new Set(e),U=(e,t)=>e?.add(t),V=(e,t=[""])=>{const n=[],s=(e,r)=>r==i(t)?u(n,e):null===t[r]?E(e,(e=>s(e,r+1))):a([t[r],null],(t=>s(z(e,t),r+1)));return s(e,0),n},X=e=>[e,e],Y=e=>0==((e,t=p)=>t(e[0])+t(e[1]))(e),Z=()=>[m(),m()],$=()=>[Z(),Z()],_=t=>{const n=e(t);return w(n)||n==s&&T(t)?n:void 0},ee=e=>""+e,te=(e,t,n,s=k)=>{const r=(l=F(e),o=e=>!B(t,e),l.filter(o));var l,o;return a(W(t),(s=>n(e,s,t[s]))),a(r,(t=>s(e,t))),e},ne=(e,t,n)=>b(e)||!(e=>v(e,P)&&e.constructor==P)(e)||K(e)||q(e)?(n?.(),!1):(H(e,((n,s)=>{t(n,s)||G(e,s)})),!K(e)),se=(e,t,n)=>k(e,t,z(e,t)==-n?void 0:n),re=()=>{let t,n,c=0,T=0;const v=m(),p=m(),R=m(),y=m(),P=m(),W=m(),q=m(),le=m(),oe=Z(),ae=$(),de=Z(),ie=$(),ce=Z(),ue=Z(),fe=$(),he=Z(),Te=Z(),ve=Z(),[be,ge,we,Le,pe]=(e=>{let t,n=0;const s=[],r=m();return[(l,o,a)=>{t??=e();const d=s.pop()??""+n++;return k(r,d,[l,o,a]),U(D(o,a??[""],Q),d),d},(e,n,...s)=>a(V(e,n),(e=>E(e,(e=>z(r,e)[0](t,...n??[],...s))))),e=>g(z(r,e),(([,t,n])=>(D(t,n??[""],void 0,(t=>(J(t,e),S(t)?1:0))),k(r,e),i(s)<1e3&&u(s,e),n))),(e,t)=>!l(V(e,t),b),(e,n,s)=>g(z(r,e),(([e,,r=[]])=>{const l=(...o)=>{const d=i(o);d==i(r)?e(t,...o,...s(o)):b(r[d])?a(n[d](...o),(e=>l(...o,e))):l(...o,r[d])};l()}))]})((()=>st)),Re=(e,n)=>(!t||C(W,n)||qe(n))&&ne(e,((e,t)=>Ce(n,t,e)),(()=>qe(n))),Ce=(e,t,n,s)=>ne(s?n:ye(n,e,t),((s,r)=>g(Se(e,t,r,s),(e=>(n[r]=e,!0)),(()=>!1))),(()=>qe(e,t))),Se=(e,n,s,r)=>t?g(z(z(W,e),s),(t=>_(r)!=t.type?qe(e,n,s,r,t.default):r),(()=>qe(e,n,s,r))):b(_(r))?qe(e,n,s,r):r,ye=(e,t,n)=>(g(z(q,t),(([s,r])=>{E(s,((t,n)=>{B(e,n)||(e[n]=t)})),E(r,(s=>{B(e,s)||qe(t,n,s)}))})),e),Ie=e=>te(W,e,((e,t,n)=>{const s=m(),r=Q();te(M(W,t,m),n,((e,t,n)=>{k(e,t,n),g(n.default,(e=>k(s,t,e)),(()=>U(r,t)))})),k(q,t,[s,r])}),((e,t)=>{k(W,t),k(q,t)})),Ee=e=>te(le,e,((e,t,n)=>Je(t,n)),((e,t)=>Me(t))),Je=(e,t)=>te(M(le,e,(()=>(xe(e,1),m()))),t,((t,n,s)=>me(e,t,n,s)),((t,n)=>Ne(e,t,n))),me=(e,t,n,s,r)=>te(M(t,n,(()=>(De(e,n,1),m()))),s,((t,s,r)=>Fe(e,n,t,s,r)),((s,l)=>je(e,t,n,s,l,r))),Fe=(e,t,n,s,r)=>{C(n,s)||Pe(e,t,s,1);const l=z(n,s);r!==l&&(We(e,t,s,l,r),k(n,s,r))},ze=(e,t,n,s,r)=>g(z(t,n),(t=>Fe(e,n,t,s,r)),(()=>me(e,t,n,ye({[s]:r},e,n)))),Oe=e=>{const t=""+c++;return C(e,t)?Oe(e):t},ke=e=>z(le,e)??Je(e,{}),Me=e=>Je(e,{}),Ne=(e,t,n)=>me(e,t,n,{},!0),je=(e,t,n,s,r,l)=>{const o=z(z(q,e)?.[0],r);if(!b(o)&&!l)return Fe(e,n,s,r,o);const a=t=>{We(e,n,t,z(s,t)),Pe(e,n,t,-1),k(s,t)};b(o)?a(r):O(s,a),S(s)&&(De(e,n,-1),S(k(t,n))&&(xe(e,-1),k(le,e)))},xe=(e,t)=>se(S(v)?k(v,null,Le(ae[0][1])||Le(ae[1][1])?Ue():0):v,e,t),De=(e,t,n)=>se(M(p,e,(()=>m([[null,Le(ie[0][1],[e])||Le(ie[1][1],[e])?Ve(e):0]]))),t,n),Pe=(e,t,n,s)=>se(M(M(R,e,m),t,(()=>m([[null,Le(fe[0][1],[e,t])||Le(fe[1][1],[e,t])?Ye(e,t):0]]))),n,s),We=(e,t,n,s,r)=>M(M(M(y,e,m),t,m),n,(()=>[s,0]))[1]=r,qe=(e,t,n,s,r)=>(u(M(M(M(P,e,m),t,m),n,(()=>[])),s),r),Ae=(e,t,n)=>g(z(z(z(y,e),t),n),(([e,t])=>[!0,e,t]),(()=>[!1,...X(Ze(e,t,n))])),Be=e=>S(P)||S(Te[e])?0:E(e?j(P,x):P,((t,n)=>E(t,((t,s)=>E(t,((t,r)=>ge(Te[e],[n,s,r],t))))))),Ge=(e,t,n,s)=>L(t)>1?(ge(e[0],s),ge(e[1],s),1):S(t)||0==z(t,null)||o(z(t,null),n(...s??[]))?void 0:(ge(e[1],s),1),He=e=>{const t=S(ce[e]),n=Y(fe[e])&&Y(ie[e])&&t&&Y(ae[e]),s=S(he[e])&&S(ue[e])&&S(de[e])&&S(oe[e]);if(!n||!s){const r=e?[j(v),x(p),j(R,x),j(y,x)]:[v,p,R,y];if(!n){E(r[2],((t,n)=>E(t,((t,s)=>Ge(fe[e],t,Ye,[n,s])))));const n=Q();E(r[1],((s,r)=>{Ge(ie[e],s,Ve,[r])&&!t&&(ge(ce[e],[r,null]),U(n,r))})),t||E(r[3],((t,s)=>{if(!C(n,s)){const n=Q();E(t,(e=>E(e,(([t,s],r)=>s!==t?U(n,r):J(e,r))))),E(n,(t=>ge(ce[e],[s,t])))}})),Ge(ae[e],r[0],Ue)}if(!s){let t;E(r[3],((n,s)=>{let r;E(n,((n,l)=>{let o;E(n,(([n,a],d)=>{a!==n&&(ge(he[e],[s,l,d],a,n,Ae),t=r=o=1)})),o&&ge(ue[e],[s,l],Ae)})),r&&ge(de[e],[s],Ae)})),t&&ge(oe[e],void 0,Ae)}}},Ke=(e,...t)=>(et((()=>e(...d(t,ee)))),st),Qe=()=>N(le,(e=>N(e,N))),Ue=()=>F(le),Ve=e=>F(z(le,ee(e))),Xe=(e,t,n)=>{const s=[];return O(z(le,ee(e)),((e,n)=>u(s,[b(t)?e:z(n,ee(t)),e]))),d(s.sort((([e],[t])=>(e<t?-1:1)*(n?-1:1))),(([,e])=>e))},Ye=(e,t)=>F(z(z(le,ee(e)),ee(t))),Ze=(e,t,n)=>z(z(z(le,ee(e)),ee(t)),ee(n)),$e=e=>Ke((()=>(e=>ne(e,Re,qe))(e)?Ee(e):0)),_e=()=>Ke((()=>Ee({}))),et=(e,t)=>{if(-1==T)return;tt();const n=e?.();return nt(t),n},tt=()=>(T++,st),nt=e=>(T>0&&(T--,0==T&&(n=!S(y),T=1,Be(1),n&&He(1),T=-1,e?.(N(y,(e=>N(e,(e=>N(e,(e=>[...e]),(([e,t])=>e===t))),K)),K),N(P,(e=>N(e,N))))&&(T=1,E(y,((e,t)=>E(e,((e,n)=>E(e,(([e],s)=>((e,t,n,s,r)=>b(r)?e.delCell(t,n,s,!0):e.setCell(t,n,s,r))(st,t,n,s,e))))))),T=-1,n=!1),ge(ve[0],void 0,n),Be(0),n&&He(0),ge(ve[1],void 0,n),T=0,a([y,P,v,p,R],I))),st),st={getTables:Qe,getTableIds:Ue,getTable:e=>N(z(le,ee(e)),N),getRowIds:Ve,getSortedRowIds:Xe,getRow:(e,t)=>N(z(z(le,ee(e)),ee(t))),getCellIds:Ye,getCell:Ze,hasTables:()=>!S(le),hasTable:e=>C(le,ee(e)),hasRow:(e,t)=>C(z(le,ee(e)),ee(t)),hasCell:(e,t,n)=>C(z(z(le,ee(e)),ee(t)),ee(n)),getJson:()=>f(le),getSchemaJson:()=>f(W),setTables:$e,setTable:(e,t)=>Ke((e=>Re(t,e)?Je(e,t):0),e),setRow:(e,t,n)=>Ke(((e,t)=>Ce(ee(e),ee(t),n)?me(ee(e),ke(ee(e)),ee(t),n):0),e,t),addRow:(e,t,n)=>et((()=>{e=ee(e);const s=Ce(e,void 0,t),r=s||n?Oe(z(le,e)):void 0;return s&&me(e,ke(e),r,t),r})),setPartialRow:(e,t,n)=>Ke(((e,t)=>{if(Ce(e,t,n,1)){const s=ke(e);H(n,((n,r)=>ze(e,s,t,r,n)))}}),e,t),setCell:(t,n,s,l)=>Ke(((t,n,s)=>g(Se(t,n,s,e(l)==r?l(Ze(t,n,s)):l),(e=>ze(t,ke(t),n,s,e)))),t,n,s),setJson:e=>{try{"{}"===e?_e():$e(h(e))}catch{}return st},setSchema:e=>Ke((()=>{if((t=(e=>ne(e,(e=>ne(e,(e=>{if(!ne(e,((e,t)=>["type","default"].includes(t))))return!1;const t=e.type;return!(!w(t)&&t!=s||(_(e.default)!=t&&G(e,"default"),0))})))))(e))&&(Ie(e),!S(le))){const e=Qe();_e(),$e(e)}})),delTables:_e,delTable:e=>Ke((e=>C(le,e)?Me(e):0),e),delRow:(e,t)=>Ke(((e,t)=>g(z(le,e),(n=>C(n,t)?Ne(e,n,t):0))),e,t),delCell:(e,t,n,s)=>Ke(((e,t,n)=>g(z(le,e),(r=>g(z(r,t),(l=>C(l,n)?je(e,r,t,l,n,s):0))))),e,t,n),delSchema:()=>Ke((()=>{Ie({}),t=!1})),transaction:et,startTransaction:tt,finishTransaction:nt,forEachTable:e=>E(le,((t,n)=>e(n,(e=>E(t,((t,n)=>e(n,(e=>O(t,e))))))))),forEachRow:(e,t)=>E(z(le,ee(e)),((e,n)=>t(n,(t=>O(e,t))))),forEachCell:(e,t,n)=>O(z(z(le,ee(e)),ee(t)),n),addTablesListener:(e,t)=>be(e,oe[t?1:0]),addTableIdsListener:(e,t,n)=>be(e,ae[n?1:0][t?1:0]),addTableListener:(e,t,n)=>be(t,de[n?1:0],[e]),addRowIdsListener:(e,t,n,s)=>be(t,ie[s?1:0][n?1:0],[e]),addSortedRowIdsListener:(e,t,n,s,r)=>{let l=Xe(e,t,n);return be((()=>{const r=Xe(e,t,n);o(r,l)||(l=r,s(st,e,t,n,l))}),ce[r?1:0],[e,t])},addRowListener:(e,t,n,s)=>be(n,ue[s?1:0],[e,t]),addCellIdsListener:(e,t,n,s,r)=>be(n,fe[r?1:0][s?1:0],[e,t]),addCellListener:(e,t,n,s,r)=>be(s,he[r?1:0],[e,t,n]),addInvalidCellListener:(e,t,n,s,r)=>be(s,Te[r?1:0],[e,t,n]),addWillFinishTransactionListener:e=>be(e,ve[0]),addDidFinishTransactionListener:e=>be(e,ve[1]),callListener:e=>(pe(e,[Ue,Ve,Ye],(e=>b(e[2])?[]:X(Ze(...e)))),st),delListener:e=>(we(e),st),getListenerStats:()=>({}),createStore:re};return A(st)};export{re as createStore};
1
+ const e=e=>typeof e,t=e(""),n=e(!0),s=e(0),r=e(e),l=(e,t)=>e.forEach(t),o=(e,t)=>e.map(t),a=e=>e.length,i=(e,t,n)=>e.slice(t,n),c=(e,...t)=>e.push(...t),d=e=>JSON.stringify(e,((e,t)=>{return h(t,Map)?(n=[...t],s=(e,[t,n])=>(e[t]=n,e),r={},n.reduce(s,r)):t;var n,s,r})),u=JSON.parse,f=isFinite,h=(e,t)=>e instanceof t,T=e=>null==e,v=(e,t,n)=>T(e)?n?.():t(e),b=e=>e==t||e==n,g=(e,t)=>e?.has(t)??!1,w=e=>T(e)||0==(e=>e.size)(e),p=e=>e.clear(),R=(e,t)=>e?.forEach(t),C=(e,t)=>e?.delete(t),S=e=>new Map(e),y=e=>[...e?.keys()??[]],I=(e,t)=>e?.get(t),L=(e,t)=>R(e,((e,n)=>t(n,e))),E=(e,t,n)=>T(n)?(C(e,t),e):e?.set(t,n),J=(e,t,n)=>(g(e,t)||E(e,t,n()),I(e,t)),m=(e,t,n)=>{const s={},r=t??(e=>e);return R(e,((e,t)=>v(r(e),(e=>n?.(e)?0:s[t]=e)))),s},F=(e,t)=>{const n=S(),s=t??(e=>e);return R(e,((e,t)=>n.set(t,s(e)))),n},z=e=>F(e,F),O=(e,t,n,s,r=0)=>v((n?J:I)(e,t[r],r>a(t)-2?n:S),(l=>{if(r>a(t)-2)return s?.(l)&&E(e,t[r]),l;const o=O(l,t,n,s,r+1);return w(l)&&E(e,t[r]),o})),k=Object,M=k.keys,N=k.isFrozen,j=k.freeze,x=(e,t)=>!T(((e,t)=>v(e,(e=>e[t])))(e,t)),D=(e,t)=>delete e[t],P=(e,t)=>l(k.entries(e),(([e,n])=>t(n,e))),W=e=>{return t=M(e),0==a(t);var t},q=e=>new Set(e),A=(e,t)=>e?.add(t),B=e=>{let t,n=0;const s=[],r=S();return[(l,o,a)=>{t??=e();const i=s.pop()??""+n++;return E(r,i,[l,o,a]),A(O(o,a??[""],q),i),i},(e,n,...s)=>l(((e,t=[""])=>{const n=[],s=(e,r)=>r==a(t)?c(n,e):null===t[r]?R(e,(e=>s(e,r+1))):l([t[r],null],(t=>s(I(e,t),r+1)));return s(e,0),n})(e,n),(e=>R(e,(e=>I(r,e)[0](t,...n??[],...s))))),e=>v(I(r,e),(([,t,n])=>(O(t,n??[""],void 0,(t=>(C(t,e),w(t)?1:0))),E(r,e),a(s)<1e3&&c(s,e),n))),(e,n,s)=>v(I(r,e),(([e,,r=[]])=>{const o=(...i)=>{const c=a(i);c==a(r)?e(t,...i,...s(i)):T(r[c])?l(n[c](...i),(e=>o(...i,e))):o(...i,r[c])};o()}))]},G=e=>[e,e],H=()=>[S(),S()],K=t=>{const n=e(t);return b(n)||n==s&&f(t)?n:void 0},Q=e=>""+e,U=(e,t,n,s=E)=>{const r=(o=y(e),a=e=>!x(t,e),o.filter(a));var o,a;return l(M(t),(s=>n(e,s,t[s]))),l(r,(t=>s(e,t))),e},V=(e,t,n)=>T(e)||!(e=>h(e,k)&&e.constructor==k)(e)||W(e)||N(e)?(n?.(),!1):(P(e,((n,s)=>{t(n,s)||D(e,s)})),!W(e)),X=(e,t,n)=>E(e,t,I(e,t)==-n?void 0:n),Y=()=>{let t,n,f=0,h=0;const O=S(),k=S(),M=S(),N=S(),Z=S(),$=S(),_=S(),ee=S(),te=H(),ne=H(),se=H(),re=H(),le=H(),oe=H(),ae=H(),ie=H(),ce=H(),de=H(),[ue,fe,he,Te]=B((()=>Ze)),ve=(e,n)=>(!t||g($,n)||Ne(n))&&V(e,((e,t)=>be(n,t,e)),(()=>Ne(n))),be=(e,t,n,s)=>V(s?n:we(n,e,t),((s,r)=>v(ge(e,t,r,s),(e=>(n[r]=e,!0)),(()=>!1))),(()=>Ne(e,t))),ge=(e,n,s,r)=>t?v(I(I($,e),s),(t=>K(r)!=t.type?Ne(e,n,s,r,t.default):r),(()=>Ne(e,n,s,r))):T(K(r))?Ne(e,n,s,r):r,we=(e,t,n)=>(v(I(_,t),(([s,r])=>{R(s,((t,n)=>{x(e,n)||(e[n]=t)})),R(r,(s=>{x(e,s)||Ne(t,n,s)}))})),e),pe=e=>U($,e,((e,t,n)=>{const s=S(),r=q();U(J($,t,S),n,((e,t,n)=>{E(e,t,n),v(n.default,(e=>E(s,t,e)),(()=>A(r,t)))})),E(_,t,[s,r])}),((e,t)=>{E($,t),E(_,t)})),Re=e=>U(ee,e,((e,t,n)=>Ce(t,n)),((e,t)=>Je(t))),Ce=(e,t)=>U(J(ee,e,(()=>(ze(e,1),S()))),t,((t,n,s)=>Se(e,t,n,s)),((t,n)=>me(e,t,n))),Se=(e,t,n,s,r)=>U(J(t,n,(()=>(Oe(e,n,1),S()))),s,((t,s,r)=>ye(e,n,t,s,r)),((s,l)=>Fe(e,t,n,s,l,r))),ye=(e,t,n,s,r)=>{g(n,s)||ke(e,t,s,1);const l=I(n,s);r!==l&&(Me(e,t,s,l,r),E(n,s,r))},Ie=(e,t,n,s,r)=>v(I(t,n),(t=>ye(e,n,t,s,r)),(()=>Se(e,t,n,we({[s]:r},e,n)))),Le=e=>{const t=""+f++;return g(e,t)?Le(e):t},Ee=e=>I(ee,e)??Ce(e,{}),Je=e=>Ce(e,{}),me=(e,t,n)=>Se(e,t,n,{},!0),Fe=(e,t,n,s,r,l)=>{const o=I(I(_,e)?.[0],r);if(!T(o)&&!l)return ye(e,n,s,r,o);const a=t=>{Me(e,n,t,I(s,t)),ke(e,n,t,-1),E(s,t)};T(o)?a(r):L(s,a),w(s)&&(Oe(e,n,-1),w(E(t,n))&&(ze(e,-1),E(ee,e)))},ze=(e,t)=>X(O,e,t),Oe=(e,t,n)=>X(J(k,e,S),t,n),ke=(e,t,n,s)=>X(J(J(M,e,S),t,S),n,s),Me=(e,t,n,s,r)=>J(J(J(N,e,S),t,S),n,(()=>[s,0]))[1]=r,Ne=(e,t,n,s,r)=>(c(J(J(J(Z,e,S),t,S),n,(()=>[])),s),r),je=(e,t,n)=>v(I(I(I(N,e),t),n),(([e,t])=>[!0,e,t]),(()=>[!1,...G(Ke(e,t,n))])),xe=e=>w(Z)||w(ce[e])?0:R(e?F(Z,z):Z,((t,n)=>R(t,((t,s)=>R(t,((t,r)=>fe(ce[e],[n,s,r],t))))))),De=(e,t,n)=>{if(!w(t))return fe(e,n),1},Pe=e=>{const t=w(le[e]),n=w(ae[e])&&w(re[e])&&t&&w(ne[e]),s=w(ie[e])&&w(oe[e])&&w(se[e])&&w(te[e]);if(!n||!s){const r=e?[F(O),z(k),F(M,z),F(N,z)]:[O,k,M,N];if(!n){R(r[2],((t,n)=>R(t,((t,s)=>De(ae[e],t,[n,s])))));const n=q();R(r[1],((s,r)=>{De(re[e],s,[r])&&!t&&(fe(le[e],[r,null]),A(n,r))})),t||R(r[3],((t,s)=>{if(!g(n,s)){const n=q();R(t,(e=>R(e,(([t,s],r)=>s!==t?A(n,r):C(e,r))))),R(n,(t=>fe(le[e],[s,t])))}})),De(ne[e],r[0])}if(!s){let t;R(r[3],((n,s)=>{let r;R(n,((n,l)=>{let o;R(n,(([n,a],i)=>{a!==n&&(fe(ie[e],[s,l,i],a,n,je),t=r=o=1)})),o&&fe(oe[e],[s,l],je)})),r&&fe(se[e],[s],je)})),t&&fe(te[e],void 0,je)}}},We=(e,...t)=>(Ve((()=>e(...o(t,Q)))),Ze),qe=()=>m(ee,(e=>m(e,m))),Ae=()=>y(ee),Be=e=>y(I(ee,Q(e))),Ge=(e,t,n,s=0,r)=>{const l=[];return L(I(ee,Q(e)),((e,n)=>c(l,[T(t)?e:I(n,Q(t)),e]))),o(i(l.sort((([e],[t])=>(e<t?-1:1)*(n?-1:1))),s,T(r)?r:s+r),(([,e])=>e))},He=(e,t)=>y(I(I(ee,Q(e)),Q(t))),Ke=(e,t,n)=>I(I(I(ee,Q(e)),Q(t)),Q(n)),Qe=e=>We((()=>(e=>V(e,ve,Ne))(e)?Re(e):0)),Ue=()=>We((()=>Re({}))),Ve=(e,t)=>{if(-1==h)return;Xe();const n=e?.();return Ye(t),n},Xe=()=>(h++,Ze),Ye=e=>(h>0&&(h--,0==h&&(n=!w(N),h=1,xe(1),n&&Pe(1),h=-1,e?.(m(N,(e=>m(e,(e=>m(e,(e=>[...e]),(([e,t])=>e===t))),W)),W),m(Z,(e=>m(e,m))))&&(h=1,R(N,((e,t)=>R(e,((e,n)=>R(e,(([e],s)=>((e,t,n,s,r)=>T(r)?e.delCell(t,n,s,!0):e.setCell(t,n,s,r))(Ze,t,n,s,e))))))),h=-1,n=!1),fe(de[0],void 0,n),xe(0),n&&Pe(0),fe(de[1],void 0,n),h=0,l([N,Z,O,k,M],p))),Ze),Ze={getTables:qe,getTableIds:Ae,getTable:e=>m(I(ee,Q(e)),m),getRowIds:Be,getSortedRowIds:Ge,getRow:(e,t)=>m(I(I(ee,Q(e)),Q(t))),getCellIds:He,getCell:Ke,hasTables:()=>!w(ee),hasTable:e=>g(ee,Q(e)),hasRow:(e,t)=>g(I(ee,Q(e)),Q(t)),hasCell:(e,t,n)=>g(I(I(ee,Q(e)),Q(t)),Q(n)),getJson:()=>d(ee),getSchemaJson:()=>d($),setTables:Qe,setTable:(e,t)=>We((e=>ve(t,e)?Ce(e,t):0),e),setRow:(e,t,n)=>We(((e,t)=>be(Q(e),Q(t),n)?Se(Q(e),Ee(Q(e)),Q(t),n):0),e,t),addRow:(e,t,n)=>Ve((()=>{e=Q(e);const s=be(e,void 0,t),r=s||n?Le(I(ee,e)):void 0;return s&&Se(e,Ee(e),r,t),r})),setPartialRow:(e,t,n)=>We(((e,t)=>{if(be(e,t,n,1)){const s=Ee(e);P(n,((n,r)=>Ie(e,s,t,r,n)))}}),e,t),setCell:(t,n,s,l)=>We(((t,n,s)=>v(ge(t,n,s,e(l)==r?l(Ke(t,n,s)):l),(e=>Ie(t,Ee(t),n,s,e)))),t,n,s),setJson:e=>{try{"{}"===e?Ue():Qe(u(e))}catch{}return Ze},setSchema:e=>We((()=>{if((t=(e=>V(e,(e=>V(e,(e=>{if(!V(e,((e,t)=>["type","default"].includes(t))))return!1;const t=e.type;return!(!b(t)&&t!=s||(K(e.default)!=t&&D(e,"default"),0))})))))(e))&&(pe(e),!w(ee))){const e=qe();Ue(),Qe(e)}})),delTables:Ue,delTable:e=>We((e=>g(ee,e)?Je(e):0),e),delRow:(e,t)=>We(((e,t)=>v(I(ee,e),(n=>g(n,t)?me(e,n,t):0))),e,t),delCell:(e,t,n,s)=>We(((e,t,n)=>v(I(ee,e),(r=>v(I(r,t),(l=>g(l,n)?Fe(e,r,t,l,n,s):0))))),e,t,n),delSchema:()=>We((()=>{pe({}),t=!1})),transaction:Ve,startTransaction:Xe,finishTransaction:Ye,forEachTable:e=>R(ee,((t,n)=>e(n,(e=>R(t,((t,n)=>e(n,(e=>L(t,e))))))))),forEachRow:(e,t)=>R(I(ee,Q(e)),((e,n)=>t(n,(t=>L(e,t))))),forEachCell:(e,t,n)=>L(I(I(ee,Q(e)),Q(t)),n),addSortedRowIdsListener:(e,t,n,s,r,l,o)=>{let i=Ge(e,t,n,s,r);return ue((()=>{const o=Ge(e,t,n,s,r);var c,d,u;d=i,a(c=o)===a(d)&&(u=(e,t)=>d[t]===e,c.every(u))||(i=o,l(Ze,e,t,n,s,r,i))}),le[o?1:0],[e,t])},addWillFinishTransactionListener:e=>ue(e,de[0]),addDidFinishTransactionListener:e=>ue(e,de[1]),callListener:e=>(Te(e,[Ae,Be,He],(e=>T(e[2])?[]:G(Ke(...e)))),Ze),delListener:e=>(he(e),Ze),getListenerStats:()=>({}),createStore:Y};return P({Tables:[0,te],TableIds:[0,ne],Table:[1,se],RowIds:[1,re],Row:[2,oe],CellIds:[2,ae],Cell:[3,ie],InvalidCell:[3,ce]},(([e,t],n)=>{Ze["add"+n+"Listener"]=(...n)=>ue(n[e],t[n[e+1]?1:0],e>0?i(n,0,e):void 0)})),j(Ze)};export{Y 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),l=(e,t)=>e.includes(t),i=(e,t)=>e.every(t),d=(e,t)=>f(e)===f(t)&&i(e,((e,s)=>t[s]===e)),c=(e,t)=>i(e,((s,n)=>0==n||t(e[n-1],s)<=0)),u=(e,t)=>e.sort(t),h=(e,t)=>e.forEach(t),R=(e,t)=>e.map(t),g=e=>L(e,((e,t)=>e+t),0),f=e=>e.length,w=e=>0==f(e),L=(e,t,s)=>e.reduce(t,s),I=(e,...t)=>e.push(...t),v=e=>e.pop(),T=e=>JSON.stringify(e,((e,t)=>y(t,Map)?L([...t],((e,[t,s])=>(e[t]=s,e)),{}):t)),S=JSON.parse,b=Math.max,p=Math.min,C=isFinite,y=(e,t)=>e instanceof t,E=e=>null==e,m=(e,t,s)=>E(e)?s?.():t(e),k=e=>e==n||e==o,M=e=>s(e)==a,D=()=>{},x=e=>e.size,A=(F=x,e=>L(z(e),((e,t)=>e+F(t)),0));var F;const J=(e,t)=>e?.has(t)??!1,Q=e=>E(e)||0==x(e),z=e=>[...e?.values()??[]],N=e=>e.clear(),O=(e,t)=>e?.forEach(t),j=(e,t)=>e?.delete(t),W=e=>new Map(e),P=e=>[...e?.keys()??[]],B=(e,t)=>e?.get(t),H=(e,t)=>O(e,((e,s)=>t(s,e))),q=(e,t,s)=>E(s)?(j(e,t),e):e?.set(t,s),G=(e,t,s)=>(J(e,t)||q(e,t,s()),B(e,t)),K=(e,t,s)=>{const n={},o=t??(e=>e);return O(e,((e,t)=>m(o(e),(e=>s?.(e)?0:n[t]=e)))),n},U=(e,t)=>{const s=W(),n=t??(e=>e);return O(e,((e,t)=>s.set(t,n(e)))),s},V=e=>U(e,U),X=(e,t,s,n,o=0)=>m((s?G:B)(e,t[o],o>f(t)-2?s:W),(r=>{if(o>f(t)-2)return n?.(r)&&q(e,t[o]),r;const a=X(r,t,s,n,o+1);return Q(r)&&q(e,t[o]),a})),Y=e=>new Set(e),Z=(e,t)=>e?.add(t),$=(e,t,s)=>{const n=e.hasRow,o=W(),r=W(),a=W(),l=W(),i=W(),d=(t,s,...n)=>{const o=G(i,t,Y);return h(n,(t=>Z(o,t)&&s&&e.callListener(t))),n},c=(t,...s)=>m(B(i,t),(n=>{h(w(s)?z(n):s,(t=>{e.delListener(t),j(n,t)})),Q(n)&&q(i,t)})),u=(e,s)=>{q(o,e,s),J(r,e)||(q(r,e,t()),q(a,e,W()),q(l,e,W()))},R=e=>{q(o,e),q(r,e),q(a,e),q(l,e),c(e)};return[()=>e,()=>P(o),e=>H(r,e),e=>J(r,e),e=>B(o,e),e=>B(r,e),(e,t)=>q(r,e,t),u,(t,o,r,i,R)=>{u(t,o);const g=W(),f=W(),w=B(a,t),L=B(l,t),I=t=>{const r=s=>e.getCell(o,t,s),a=B(w,t),l=n(o,t)?s(i(r,t)):void 0;if(a!=l&&q(g,t,[a,l]),!E(R)){const e=B(L,t),s=n(o,t)?R(r,t):void 0;e!=s&&q(f,t,s)}},v=e=>{r((()=>{O(g,(([,e],t)=>q(w,t,e))),O(f,((e,t)=>q(L,t,e)))}),g,f,w,L,e),N(g),N(f)};H(w,I),e.hasTable(o)&&h(e.getRowIds(o),(e=>{J(w,e)||I(e)})),v(!0),c(t),d(t,0,e.addRowListener(o,null,((e,t,s)=>I(s))),e.addTableListener(o,(()=>v())))},R,()=>H(i,R),d,c]},_=(e,t)=>s(e)==n?t=>t(e):e??(()=>t??""),ee=e=>{const t=new WeakMap;return s=>(t.has(s)||t.set(s,e(s)),t.get(s))},te=(e,t=[""])=>{const s=[],n=(e,o)=>o==f(t)?I(s,e):null===t[o]?O(e,(e=>n(e,o+1))):h([t[o],null],(t=>n(B(e,t),o+1)));return n(e,0),s},se=e=>{let t,s=0;const n=[],o=W();return[(r,a,l)=>{t??=e();const i=v(n)??""+s++;return q(o,i,[r,a,l]),Z(X(a,l??[""],Y),i),i},(e,s,...n)=>h(te(e,s),(e=>O(e,(e=>B(o,e)[0](t,...s??[],...n))))),e=>m(B(o,e),(([,t,s])=>(X(t,s??[""],void 0,(t=>(j(t,e),Q(t)?1:0))),q(o,e),f(n)<1e3&&I(n,e),s))),(e,t)=>!i(te(e,t),E),(e,s,n)=>m(B(o,e),(([e,,o=[]])=>{const r=(...a)=>{const l=f(a);l==f(o)?e(t,...a,...n(a)):E(o[l])?h(s[l](...a),(e=>r(...a,e))):r(...a,o[l])};r()}))]},ne=Object,oe=ne.keys,re=ne.isFrozen,ae=ne.freeze,le=(e,t)=>!E(((e,t)=>m(e,(e=>e[t])))(e,t)),ie=(e,t)=>delete e[t],de=(e,t)=>h(ne.entries(e),(([e,s])=>t(s,e))),ce=e=>w(oe(e)),ue=e=>{const t=s(e);return k(t)||t==r&&C(e)?t:void 0},he=(e,t,s,n,o)=>E(o)?e.delCell(t,s,n,!0):e.setCell(t,s,n,o),Re=ee((e=>{let t,s,n,o=100,r=W(),a=1;const i=W(),d=W(),[c,u,R]=se((()=>j)),g=W(),L=W(),T=[],S=[],b=(t,s)=>{a=0,e.transaction((()=>O(B(g,s),((s,n)=>O(s,((s,o)=>O(s,((s,r)=>he(e,n,o,r,s[t]))))))))),a=1},p=e=>{q(g,e),q(L,e),u(d,[e])},C=(e,t)=>h(((e,t)=>e.splice(0,t))(e,t??f(e)),p),y=()=>C(T,f(T)-o),k=e.addCellListener(null,null,null,((e,s,o,l,i,d)=>{if(a){m(t,(()=>{I(T,t),y(),C(S),t=void 0,n=1}));const e=G(r,s,W),a=G(e,o,W),c=G(a,l,(()=>[d,void 0]));c[1]=i,c[0]===i&&Q(q(a,l))&&Q(q(e,o))&&Q(q(r,s))&&(t=v(T),n=1),A()}})),M=(e="")=>(E(t)&&(t=""+s++,q(g,t,r),z(t,e),r=W(),n=1),t),D=()=>{w(T)||(S.unshift(M()),b(0,t),t=v(T),n=1)},x=()=>{w(S)||(I(T,t),t=S.shift(),b(1,t),n=1)},A=()=>{n&&(u(i),n=0)},F=e=>{const t=M(e);return A(),t},z=(e,t)=>(N(e)&&B(L,e)!==t&&(q(L,e,t),u(d,[e])),j),N=e=>J(g,e),j={setSize:e=>(o=e,y(),j),addCheckpoint:F,setCheckpoint:z,getStore:()=>e,getCheckpointIds:()=>[[...T],t,[...S]],forEachCheckpoint:e=>H(L,e),hasCheckpoint:N,getCheckpoint:e=>B(L,e),goBackward:()=>(D(),A(),j),goForward:()=>(x(),A(),j),goTo:e=>{const s=l(T,e)?D:l(S,e)?x:null;for(;!E(s)&&e!=t;)s();return A(),j},addCheckpointIdsListener:e=>c(e,i),addCheckpointListener:(e,t)=>c(t,d,[e]),delListener:e=>(R(e),j),clear:()=>(C(T),C(S),E(t)||p(t),t=void 0,s=0,F(),j),destroy:()=>{e.delListener(k)},getListenerStats:()=>({})};return ae(j.clear())})),ge=(e,t)=>e<t?-1:1,fe=e=>""+e,we=ee((e=>{const t=W(),s=W(),[n,o,r,a,l,i,d,,h,R,g]=$(e,W,(e=>E(e)?"":e+"")),[f,w,L]=se((()=>v)),I=(t,s,n)=>{const o=l(t);O(n,((t,n)=>s(n,(s=>O(t,(t=>s(t,(s=>e.forEachCell(o,t,s)))))))))},v={setIndexDefinition:(e,n,o,r,a,l=ge)=>{const R=E(a)?void 0:([e],[t])=>a(e,t);return h(e,n,((n,o,a,h,g,f)=>{let L=0;const I=Y(),v=Y(),T=i(e);if(O(o,(([e,t],s)=>{E(e)||(Z(I,e),m(B(T,e),(t=>{j(t,s),Q(t)&&(q(T,e),L=1)}))),E(t)||(Z(I,t),J(T,t)||(q(T,t,Y()),L=1),Z(B(T,t),s),E(r)||Z(v,t))})),n(),Q(g)||(f?H(T,(e=>Z(v,e))):H(a,(e=>m(B(h,e),(e=>Z(v,e))))),O(v,(e=>{const t=(t,s)=>l(B(g,t),B(g,s),e),s=[...B(T,e)];c(s,t)||(q(T,e,Y(u(s,t))),Z(I,e))}))),(L||f)&&!E(R)){const t=[...T];c(t,R)||(d(e,W(u(t,R))),L=1)}L&&w(t,[e]),O(I,(t=>w(s,[e,t])))}),_(o),m(r,_)),v},delIndexDefinition:e=>(R(e),v),getStore:n,getIndexIds:o,forEachIndex:e=>r(((t,s)=>e(t,(e=>I(t,e,s))))),forEachSlice:(e,t)=>I(e,t,i(e)),hasIndex:a,hasSlice:(e,t)=>J(i(e),t),getTableId:l,getSliceIds:e=>P(i(e)),getSliceRowIds:(e,t)=>z(B(i(e),t)),addSliceIdsListener:(e,s)=>f(s,t,[e]),addSliceRowIdsListener:(e,t,n)=>f(n,s,[e,t]),delListener:e=>(L(e),v),destroy:g,getListenerStats:()=>({})};return ae(v)})),Le=W([["avg",[(e,t)=>g(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=>p(...e),(e,t)=>p(t,e),(e,t)=>t==e?void 0:e,(e,t,s)=>s==e?void 0:p(t,e)]],["sum",[e=>g(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,s)=>e-s+t]]]),Ie=(e,t,s,n,o,r=!1)=>{if(Q(s))return;const[a,l,i,d]=o;return r||=E(e),O(n,(([s,n])=>{r||(e=E(s)?l?.(e,n,t++):E(n)?i?.(e,s,t--):d?.(e,n,s,t),r||=E(e))})),r?a(z(s),x(s)):e},ve=ee((e=>{const t=W(),[s,n,o,r,a,l,i,,d,c,u]=$(e,D,(e=>isNaN(e)||E(e)||!0===e||!1===e||""===e?void 0:1*e)),[h,R,g]=se((()=>f)),f={setMetricDefinition:(e,s,n,o,r,a,c)=>{const u=M(n)?[n,r,a,c]:B(Le,n)??B(Le,"sum");return d(e,s,((s,n,o,r,a,d)=>{const c=l(e),h=x(r);d||=E(c),s();let g=Ie(c,h,r,n,u,d);C(g)||(g=void 0),g!=c&&(i(e,g),R(t,[e],g,c))}),_(o,1)),f},delMetricDefinition:e=>(c(e),f),getStore:s,getMetricIds:n,forEachMetric:o,hasMetric:r,getTableId:a,getMetric:l,addMetricListener:(e,s)=>h(s,t,[e]),delListener:e=>(g(e),f),destroy:u,getListenerStats:()=>({})};return ae(f)})),Te=(e,t,s,n,o)=>{let r,a=0;const l={load:async s=>{if(2!=a){a=1;const n=await t();E(n)||""==n?e.setTables(s):e.setJson(n),a=0}return l},startAutoLoad:async e=>(l.stopAutoLoad(),await l.load(e),n(l.load),l),stopAutoLoad:()=>(o(),l),save:async()=>(1!=a&&(a=2,await s(e.getJson()),a=0),l),startAutoSave:async()=>(await l.stopAutoSave().save(),r=e.addTablesListener((()=>l.save())),l),stopAutoSave:()=>(m(r,e.delListener),l),getStore:()=>e,destroy:()=>l.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return ae(l)},Se=globalThis.window,be=(e,t,s)=>{let n;return Te(e,(async()=>s.getItem(t)),(async e=>s.setItem(t,e)),(e=>{n=n=>{n.storageArea===s&&n.key===t&&e()},Se.addEventListener("storage",n)}),(()=>{Se.removeEventListener("storage",n),n=void 0}))},pe=(e,t)=>be(e,t,localStorage),Ce=(e,t)=>be(e,t,sessionStorage),ye=(s,n)=>{let o;return Te(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}))},Ee=e=>e.headers.get("ETag"),me=(e,t,s,n)=>{let o,r;return Te(e,(async()=>{const e=await fetch(t);return r=Ee(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=Ee(s);E(r)||E(n)||n==r||(r=n,e())}),1e3*n)}),(()=>{m(o,clearInterval),o=void 0}))},ke=ee((e=>{const t=e.createStore,[s,n,o,r,a,,,l,,c,g,L,v]=$(e,(()=>!0),D),T=t(),S=t(),b=t(),p=W(),C=(e,t,...s)=>h(s,(s=>Z(G(G(p,t,W),e,Y),s))),y=e=>h([b,S,T],(t=>t.delTable(e))),k=(e,t,s)=>C(t,e,t.addWillFinishTransactionListener(s.startTransaction),t.addDidFinishTransactionListener((()=>s.finishTransaction()))),A={setQueryDefinition:(t,s,n)=>{let o;l(t,s),y(t);const r=[],a=[[null,[s,null,null,[],W()]]],c=[],g=[],p=[],D=[];n({select:(e,t)=>{const s=M(e)?[f(r)+"",e]:[E(t)?e:t,s=>s(e,t)];return I(r,s),{as:e=>s[0]=e}},join:(e,t,s)=>{const n=E(s)||M(t)?null:t,o=E(n)?t:s,r=[e,[e,n,M(o)?o:e=>e(o),[],W()]];return I(a,r),{as:e=>r[0]=e}},where:(e,t,s)=>I(c,M(e)?e:E(s)?s=>s(e)===t:n=>n(e,t)===s),group:(e,t,s,n,o)=>{const r=[e,[e,M(t)?[t,s,n,o]:B(Le,t)??[(e,t)=>t]]];return I(g,r),{as:e=>r[0]=e}},having:(e,t)=>I(p,M(e)?e:s=>s(e)===t),order:(e,t)=>I(D,[M(e)?e:t=>t(e)??0,t]),limit:(e,t)=>{o=E(t)?[0,e]:[e,t]}});const F=W(r);if(Q(F))return A;const z=W(a);H(z,((e,[,t])=>m(B(z,t),(({3:t})=>E(e)?0:I(t,e)))));const K=W(g);let U=T,V=S;if(w(D)&&E(o))V=b;else{k(t,V,b);const e=(e,t)=>{const n=B(s,e)??[],o=B(s,t)??[],r=D.findIndex(((e,t)=>n[t]!==o[t]));return r<0?0:ge(n[r],o[r])*(D[r][1]?-1:1)},s=W(),n=W();C(V,t,w(D)?V.addRowIdsListener(t,(()=>N(n))):V.addRowListener(t,null,((e,o,r)=>{let a=null;if(V.hasRow(t,r)){const e=B(s,r)??[],o=V.getRow(t,r),l=e=>o[e];if(a=R(D,(([e])=>e(l,r))),d(e,a))return void(B(n,r)&&b.setRow(t,r,o))}q(s,r,a),N(n)})),V.addTableListener(t,(()=>{if(Q(n)&&(b.delTable(t),V.hasTable(t))){const s=V.getTable(t);h(u(oe(s),e),(e=>q(n,e,0))),h(m(o,(([e,t])=>{return s=P(n),o=e,r=e+t,s.slice(o,r);var s,o,r}),(()=>P(n))),(e=>{b.setRow(t,e,s[e]),q(n,e,1)}))}})))}if(Q(K)&&w(p))U=V;else{k(t,U,V);const e=W();H(K,((t,[s,n])=>Z(G(e,s,Y),[t,n])));const s=Y();H(F,(t=>J(e,t)?0:Z(s,t)));const n=W(),o=(s,n,o,r)=>m(s,(([s,a,l,d])=>{H(n,((t,[n])=>{const a=G(s,t,W),l=B(a,o),i=r?void 0:n;if(l!==i){const s=Y([[l,i]]),n=x(a);q(a,o,i),O(B(e,t),(([e,t])=>{const o=Ie(d[e],n,a,s,t);d[e]=E(ue(o))?null:o}))}})),(Q(a)||!i(p,(e=>e((e=>d[e]))))?V.delRow:V.setRow)(t,l,d)}));C(U,t,U.addRowListener(t,null,((r,a,l,i)=>{const d=[],c=[],u=W(),h=U.hasRow(t,l);let R=!h;O(s,(e=>{const[s,n,o]=i(t,l,e);I(d,n),I(c,o),R||=s})),H(e,(e=>{const[s,,n]=i(t,l,e);(R||s)&&q(u,e,[n])})),R&&o(X(n,d,void 0,(([,e,s])=>{if(j(e,l),Q(e))return V.delRow(t,s),1})),u,l,1),h&&o(X(n,c,(()=>{const e={};return O(s,(s=>e[s]=U.getCell(t,l,s))),[W(),Y(),V.addRow(t,e,1),e]}),(([,e])=>{Z(e,l)})),u,l)})))}k(t,e,U);const $=(n,o,r,a)=>{const l=t=>e.getCell(o,r,t);h(a,(s=>{const[o,,r,a,i]=B(z,s),d=r?.(l,n),[c,u]=B(i,n)??[];d!=c&&(E(u)||v(t,u),q(i,n,E(d)?null:[d,...L(t,1,e.addRowListener(o,d,(()=>$(n,o,d,a))))]))})),(n=>{const o=(t,o)=>e.getCell(...E(o)?[s,n,t]:t===s?[s,n,o]:[B(z,t)?.[0],B(B(z,t)?.[4],n)?.[0],o]);U.transaction((()=>i(c,(e=>e(o)))?H(F,((e,s)=>he(U,t,n,e,s(o,n)))):U.delRow(t,n)))})(n)},{3:_}=B(z,null);return U.transaction((()=>L(t,1,e.addRowListener(s,null,((n,o,r)=>{e.hasRow(s,r)?$(r,s,r,_):(U.delRow(t,r),O(z,(({4:e})=>m(B(e,r),(([,s])=>{v(t,s),q(e,r)})))))}))))),A},delQueryDefinition:e=>(H(B(p,e),((e,t)=>O(t,(t=>e.delListener(t))))),y(e),c(e),A),getStore:s,getQueryIds:n,forEachQuery:o,hasQuery:r,getTableId:a,getResultTable:e=>b.getTable(e),getResultRowIds:e=>b.getRowIds(e),getResultSortedRowIds:(e,t,s)=>b.getSortedRowIds(e,t,s),getResultRow:(e,t)=>b.getRow(e,t),getResultCellIds:(e,t)=>b.getCellIds(e,t),getResultCell:(e,t,s)=>b.getCell(e,t,s),hasResultTable:e=>b.hasTable(e),hasResultRow:(e,t)=>b.hasRow(e,t),hasResultCell:(e,t,s)=>b.hasCell(e,t,s),forEachResultTable:e=>b.forEachTable(e),forEachResultRow:(e,t)=>b.forEachRow(e,t),forEachResultCell:(e,t,s)=>b.forEachCell(e,t,s),addResultTableListener:(e,t)=>b.addTableListener(e,((e,...s)=>t(A,...s))),addResultRowIdsListener:(e,t,s)=>b.addRowIdsListener(e,((e,...s)=>t(A,...s)),s),addResultSortedRowIdsListener:(e,t,s,n)=>b.addSortedRowIdsListener(e,t,s,((e,...t)=>n(A,...t))),addResultRowListener:(e,t,s)=>b.addRowListener(e,t,((e,...t)=>s(A,...t))),addResultCellIdsListener:(e,t,s)=>b.addCellIdsListener(e,t,((e,...t)=>s(A,...t))),addResultCellListener:(e,t,s,n)=>b.addCellListener(e,t,s,((e,...t)=>n(A,...t))),delListener:e=>(b.delListener(e),A),destroy:g,getListenerStats:()=>{const{tables:e,tableIds:t,transaction:s,...n}=b.getListenerStats();return n}};return ae(A)})),Me=ee((e=>{const t=W(),s=W(),n=W(),o=W(),[r,a,l,i,d,c,,,u,h,R]=$(e,(()=>[W(),W(),W(),W()]),(e=>E(e)?void 0:e+"")),[g,f,w]=se((()=>T)),L=(e,t,s)=>m(c(e),(([n,,o])=>{if(!J(o,t)){const r=Y();if(d(e)!=v(e))Z(r,t);else{let e=t;for(;!E(e)&&!J(r,e);)Z(r,e),e=B(n,e)}if(s)return r;q(o,t,r)}return B(o,t)})),I=(e,t)=>m(c(e),(([,,e])=>q(e,t))),v=e=>B(t,e),T={setRelationshipDefinition:(e,r,a,l)=>(q(t,e,a),u(e,r,((t,r)=>{const a=Y(),l=Y(),i=Y(),[d,u]=c(e);O(r,(([t,s],n)=>{E(t)||(Z(l,t),m(B(u,t),(e=>{j(e,n),Q(e)&&q(u,t)}))),E(s)||(Z(l,s),J(u,s)||q(u,s,Y()),Z(B(u,s),n)),Z(a,n),q(d,n,s),H(B(o,e),(t=>{J(L(e,t),n)&&Z(i,t)}))})),t(),O(a,(t=>f(s,[e,t]))),O(l,(t=>f(n,[e,t]))),O(i,(t=>{I(e,t),f(o,[e,t])}))}),_(l)),T),delRelationshipDefinition:e=>(q(t,e),h(e),T),getStore:r,getRelationshipIds:a,forEachRelationship:t=>l((s=>t(s,(t=>e.forEachRow(d(s),t))))),hasRelationship:i,getLocalTableId:d,getRemoteTableId:v,getRemoteRowId:(e,t)=>B(c(e)?.[0],t),getLocalRowIds:(e,t)=>z(B(c(e)?.[1],t)),getLinkedRowIds:(e,t)=>E(c(e))?[t]:z(L(e,t,!0)),addRemoteRowIdListener:(e,t,n)=>g(n,s,[e,t]),addLocalRowIdsListener:(e,t,s)=>g(s,n,[e,t]),addLinkedRowIdsListener:(e,t,s)=>(L(e,t),g(s,o,[e,t])),delListener:e=>(I(...w(e)),T),destroy:R,getListenerStats:()=>({})};return ae(T)})),De=e=>[e,e],xe=e=>0==((e,t=A)=>t(e[0])+t(e[1]))(e),Ae=()=>[W(),W()],Fe=()=>[Ae(),Ae()],Je=(e,t,s,n=q)=>{const o=(r=P(e),a=e=>!le(t,e),r.filter(a));var r,a;return h(oe(t),(n=>s(e,n,t[n]))),h(o,(t=>n(e,t))),e},Qe=(e,t,s)=>E(e)||!(e=>y(e,ne)&&e.constructor==ne)(e)||ce(e)||re(e)?(s?.(),!1):(de(e,((s,n)=>{t(s,n)||ie(e,n)})),!ce(e)),ze=(e,t,s)=>q(e,t,B(e,t)==-s?void 0:s),Ne=()=>{let e,t,s=0,n=0;const o=W(),a=W(),i=W(),c=W(),g=W(),f=W(),w=W(),L=W(),v=Ae(),b=Fe(),p=Ae(),C=Fe(),y=Ae(),D=Ae(),A=Fe(),F=Ae(),z=Ae(),X=Ae(),[$,_,ee,te,ne]=se((()=>nt)),oe=(t,s)=>(!e||J(f,s)||We(s))&&Qe(t,((e,t)=>re(s,t,e)),(()=>We(s))),re=(e,t,s,n)=>Qe(n?s:we(s,e,t),((n,o)=>m(Re(e,t,o,n),(e=>(s[o]=e,!0)),(()=>!1))),(()=>We(e,t))),Re=(t,s,n,o)=>e?m(B(B(f,t),n),(e=>ue(o)!=e.type?We(t,s,n,o,e.default):o),(()=>We(t,s,n,o))):E(ue(o))?We(t,s,n,o):o,we=(e,t,s)=>(m(B(w,t),(([n,o])=>{O(n,((t,s)=>{le(e,s)||(e[s]=t)})),O(o,(n=>{le(e,n)||We(t,s,n)}))})),e),Le=e=>Je(f,e,((e,t,s)=>{const n=W(),o=Y();Je(G(f,t,W),s,((e,t,s)=>{q(e,t,s),m(s.default,(e=>q(n,t,e)),(()=>Z(o,t)))})),q(w,t,[n,o])}),((e,t)=>{q(f,t),q(w,t)})),Ie=e=>Je(L,e,((e,t,s)=>ve(t,s)),((e,t)=>ye(t))),ve=(e,t)=>Je(G(L,e,(()=>(ke(e,1),W()))),t,((t,s,n)=>Te(e,t,s,n)),((t,s)=>Ee(e,t,s))),Te=(e,t,s,n,o)=>Je(G(t,s,(()=>(Me(e,s,1),W()))),n,((t,n,o)=>Se(e,s,t,n,o)),((n,r)=>me(e,t,s,n,r,o))),Se=(e,t,s,n,o)=>{J(s,n)||Oe(e,t,n,1);const r=B(s,n);o!==r&&(je(e,t,n,r,o),q(s,n,o))},be=(e,t,s,n,o)=>m(B(t,s),(t=>Se(e,s,t,n,o)),(()=>Te(e,t,s,we({[n]:o},e,s)))),pe=e=>{const t=""+s++;return J(e,t)?pe(e):t},Ce=e=>B(L,e)??ve(e,{}),ye=e=>ve(e,{}),Ee=(e,t,s)=>Te(e,t,s,{},!0),me=(e,t,s,n,o,r)=>{const a=B(B(w,e)?.[0],o);if(!E(a)&&!r)return Se(e,s,n,o,a);const l=t=>{je(e,s,t,B(n,t)),Oe(e,s,t,-1),q(n,t)};E(a)?l(o):H(n,l),Q(n)&&(Me(e,s,-1),Q(q(t,s))&&(ke(e,-1),q(L,e)))},ke=(e,t)=>ze(Q(o)?q(o,null,te(b[0][1])||te(b[1][1])?Ue():0):o,e,t),Me=(e,t,s)=>ze(G(a,e,(()=>W([[null,te(C[0][1],[e])||te(C[1][1],[e])?Ve(e):0]]))),t,s),Oe=(e,t,s,n)=>ze(G(G(i,e,W),t,(()=>W([[null,te(A[0][1],[e,t])||te(A[1][1],[e,t])?Ye(e,t):0]]))),s,n),je=(e,t,s,n,o)=>G(G(G(c,e,W),t,W),s,(()=>[n,0]))[1]=o,We=(e,t,s,n,o)=>(I(G(G(G(g,e,W),t,W),s,(()=>[])),n),o),Pe=(e,t,s)=>m(B(B(B(c,e),t),s),(([e,t])=>[!0,e,t]),(()=>[!1,...De(Ze(e,t,s))])),Be=e=>Q(g)||Q(z[e])?0:O(e?U(g,V):g,((t,s)=>O(t,((t,n)=>O(t,((t,o)=>_(z[e],[s,n,o],t))))))),He=(e,t,s,n)=>x(t)>1?(_(e[0],n),_(e[1],n),1):Q(t)||0==B(t,null)||d(B(t,null),s(...n??[]))?void 0:(_(e[1],n),1),qe=e=>{const t=Q(y[e]),s=xe(A[e])&&xe(C[e])&&t&&xe(b[e]),n=Q(F[e])&&Q(D[e])&&Q(p[e])&&Q(v[e]);if(!s||!n){const r=e?[U(o),V(a),U(i,V),U(c,V)]:[o,a,i,c];if(!s){O(r[2],((t,s)=>O(t,((t,n)=>He(A[e],t,Ye,[s,n])))));const s=Y();O(r[1],((n,o)=>{He(C[e],n,Ve,[o])&&!t&&(_(y[e],[o,null]),Z(s,o))})),t||O(r[3],((t,n)=>{if(!J(s,n)){const s=Y();O(t,(e=>O(e,(([t,n],o)=>n!==t?Z(s,o):j(e,o))))),O(s,(t=>_(y[e],[n,t])))}})),He(b[e],r[0],Ue)}if(!n){let t;O(r[3],((s,n)=>{let o;O(s,((s,r)=>{let a;O(s,(([s,l],i)=>{l!==s&&(_(F[e],[n,r,i],l,s,Pe),t=o=a=1)})),a&&_(D[e],[n,r],Pe)})),o&&_(p[e],[n],Pe)})),t&&_(v[e],void 0,Pe)}}},Ge=(e,...t)=>(et((()=>e(...R(t,fe)))),nt),Ke=()=>K(L,(e=>K(e,K))),Ue=()=>P(L),Ve=e=>P(B(L,fe(e))),Xe=(e,t,s)=>{const n=[];return H(B(L,fe(e)),((e,s)=>I(n,[E(t)?e:B(s,fe(t)),e]))),R(u(n,(([e],[t])=>ge(e,t)*(s?-1:1))),(([,e])=>e))},Ye=(e,t)=>P(B(B(L,fe(e)),fe(t))),Ze=(e,t,s)=>B(B(B(L,fe(e)),fe(t)),fe(s)),$e=e=>Ge((()=>(e=>Qe(e,oe,We))(e)?Ie(e):0)),_e=()=>Ge((()=>Ie({}))),et=(e,t)=>{if(-1==n)return;tt();const s=e?.();return st(t),s},tt=()=>(n++,nt),st=e=>(n>0&&(n--,0==n&&(t=!Q(c),n=1,Be(1),t&&qe(1),n=-1,e?.(K(c,(e=>K(e,(e=>K(e,(e=>[...e]),(([e,t])=>e===t))),ce)),ce),K(g,(e=>K(e,K))))&&(n=1,O(c,((e,t)=>O(e,((e,s)=>O(e,(([e],n)=>he(nt,t,s,n,e))))))),n=-1,t=!1),_(X[0],void 0,t),Be(0),t&&qe(0),_(X[1],void 0,t),n=0,h([c,g,o,a,i],N))),nt),nt={getTables:Ke,getTableIds:Ue,getTable:e=>K(B(L,fe(e)),K),getRowIds:Ve,getSortedRowIds:Xe,getRow:(e,t)=>K(B(B(L,fe(e)),fe(t))),getCellIds:Ye,getCell:Ze,hasTables:()=>!Q(L),hasTable:e=>J(L,fe(e)),hasRow:(e,t)=>J(B(L,fe(e)),fe(t)),hasCell:(e,t,s)=>J(B(B(L,fe(e)),fe(t)),fe(s)),getJson:()=>T(L),getSchemaJson:()=>T(f),setTables:$e,setTable:(e,t)=>Ge((e=>oe(t,e)?ve(e,t):0),e),setRow:(e,t,s)=>Ge(((e,t)=>re(fe(e),fe(t),s)?Te(fe(e),Ce(fe(e)),fe(t),s):0),e,t),addRow:(e,t,s)=>et((()=>{e=fe(e);const n=re(e,void 0,t),o=n||s?pe(B(L,e)):void 0;return n&&Te(e,Ce(e),o,t),o})),setPartialRow:(e,t,s)=>Ge(((e,t)=>{if(re(e,t,s,1)){const n=Ce(e);de(s,((s,o)=>be(e,n,t,o,s)))}}),e,t),setCell:(e,t,s,n)=>Ge(((e,t,s)=>m(Re(e,t,s,M(n)?n(Ze(e,t,s)):n),(n=>be(e,Ce(e),t,s,n)))),e,t,s),setJson:e=>{try{"{}"===e?_e():$e(S(e))}catch{}return nt},setSchema:t=>Ge((()=>{if((e=(e=>Qe(e,(e=>Qe(e,(e=>{if(!Qe(e,((e,t)=>l(["type","default"],t))))return!1;const t=e.type;return!(!k(t)&&t!=r||(ue(e.default)!=t&&ie(e,"default"),0))})))))(t))&&(Le(t),!Q(L))){const e=Ke();_e(),$e(e)}})),delTables:_e,delTable:e=>Ge((e=>J(L,e)?ye(e):0),e),delRow:(e,t)=>Ge(((e,t)=>m(B(L,e),(s=>J(s,t)?Ee(e,s,t):0))),e,t),delCell:(e,t,s,n)=>Ge(((e,t,s)=>m(B(L,e),(o=>m(B(o,t),(r=>J(r,s)?me(e,o,t,r,s,n):0))))),e,t,s),delSchema:()=>Ge((()=>{Le({}),e=!1})),transaction:et,startTransaction:tt,finishTransaction:st,forEachTable:e=>O(L,((t,s)=>e(s,(e=>O(t,((t,s)=>e(s,(e=>H(t,e))))))))),forEachRow:(e,t)=>O(B(L,fe(e)),((e,s)=>t(s,(t=>H(e,t))))),forEachCell:(e,t,s)=>H(B(B(L,fe(e)),fe(t)),s),addTablesListener:(e,t)=>$(e,v[t?1:0]),addTableIdsListener:(e,t,s)=>$(e,b[s?1:0][t?1:0]),addTableListener:(e,t,s)=>$(t,p[s?1:0],[e]),addRowIdsListener:(e,t,s,n)=>$(t,C[n?1:0][s?1:0],[e]),addSortedRowIdsListener:(e,t,s,n,o)=>{let r=Xe(e,t,s);return $((()=>{const o=Xe(e,t,s);d(o,r)||(r=o,n(nt,e,t,s,r))}),y[o?1:0],[e,t])},addRowListener:(e,t,s,n)=>$(s,D[n?1:0],[e,t]),addCellIdsListener:(e,t,s,n,o)=>$(s,A[o?1:0][n?1:0],[e,t]),addCellListener:(e,t,s,n,o)=>$(n,F[o?1:0],[e,t,s]),addInvalidCellListener:(e,t,s,n,o)=>$(n,z[o?1:0],[e,t,s]),addWillFinishTransactionListener:e=>$(e,X[0]),addDidFinishTransactionListener:e=>$(e,X[1]),callListener:e=>(ne(e,[Ue,Ve,Ye],(e=>E(e[2])?[]:De(Ze(...e)))),nt),delListener:e=>(ee(e),nt),getListenerStats:()=>({}),createStore:Ne};return ae(nt)};export{Re as createCheckpoints,Te as createCustomPersister,ye as createFilePersister,we as createIndexes,pe as createLocalPersister,ve as createMetrics,ke as createQueries,Me as createRelationships,me as createRemotePersister,Ce as createSessionPersister,Ne as createStore,ge as defaultSorter,fe as id};
1
+ import{promises as e,watch as t}from"fs";const n=e=>typeof e,s=n(""),o=n(!0),r=n(0),a=n(n),i=(e,t)=>e.includes(t),l=(e,t)=>e.every(t),d=(e,t)=>l(e,((n,s)=>0==s||t(e[s-1],n)<=0)),c=(e,t)=>e.sort(t),u=(e,t)=>e.forEach(t),h=(e,t)=>e.map(t),f=e=>L(e,((e,t)=>e+t),0),g=e=>e.length,w=e=>0==g(e),L=(e,t,n)=>e.reduce(t,n),R=(e,t,n)=>e.slice(t,n),v=(e,...t)=>e.push(...t),I=e=>e.pop(),S=e=>JSON.stringify(e,((e,t)=>C(t,Map)?L([...t],((e,[t,n])=>(e[t]=n,e)),{}):t)),p=JSON.parse,T=Math.max,y=Math.min,b=isFinite,C=(e,t)=>e instanceof t,m=e=>null==e,E=(e,t,n)=>m(e)?n?.():t(e),k=e=>e==s||e==o,M=e=>n(e)==a,D=()=>{},A=e=>e.size,x=(e,t)=>e?.has(t)??!1,F=e=>m(e)||0==A(e),J=e=>[...e?.values()??[]],Q=e=>e.clear(),z=(e,t)=>e?.forEach(t),N=(e,t)=>e?.delete(t),O=e=>new Map(e),j=e=>[...e?.keys()??[]],W=(e,t)=>e?.get(t),P=(e,t)=>z(e,((e,n)=>t(n,e))),B=(e,t,n)=>m(n)?(N(e,t),e):e?.set(t,n),H=(e,t,n)=>(x(e,t)||B(e,t,n()),W(e,t)),q=(e,t,n)=>{const s={},o=t??(e=>e);return z(e,((e,t)=>E(o(e),(e=>n?.(e)?0:s[t]=e)))),s},G=(e,t)=>{const n=O(),s=t??(e=>e);return z(e,((e,t)=>n.set(t,s(e)))),n},K=e=>G(e,G),U=(e,t,n,s,o=0)=>E((n?H:W)(e,t[o],o>g(t)-2?n:O),(r=>{if(o>g(t)-2)return s?.(r)&&B(e,t[o]),r;const a=U(r,t,n,s,o+1);return F(r)&&B(e,t[o]),a})),V=e=>new Set(e),X=(e,t)=>e?.add(t),Y=(e,t,n)=>{const s=e.hasRow,o=O(),r=O(),a=O(),i=O(),l=O(),d=(t,n,...s)=>{const o=H(l,t,V);return u(s,(t=>X(o,t)&&n&&e.callListener(t))),s},c=(t,...n)=>E(W(l,t),(s=>{u(w(n)?J(s):n,(t=>{e.delListener(t),N(s,t)})),F(s)&&B(l,t)})),h=(e,n)=>{B(o,e,n),x(r,e)||(B(r,e,t()),B(a,e,O()),B(i,e,O()))},f=e=>{B(o,e),B(r,e),B(a,e),B(i,e),c(e)};return[()=>e,()=>j(o),e=>P(r,e),e=>x(r,e),e=>W(o,e),e=>W(r,e),(e,t)=>B(r,e,t),h,(t,o,r,l,f)=>{h(t,o);const g=O(),w=O(),L=W(a,t),R=W(i,t),v=t=>{const r=n=>e.getCell(o,t,n),a=W(L,t),i=s(o,t)?n(l(r,t)):void 0;if(a!=i&&B(g,t,[a,i]),!m(f)){const e=W(R,t),n=s(o,t)?f(r,t):void 0;e!=n&&B(w,t,n)}},I=e=>{r((()=>{z(g,(([,e],t)=>B(L,t,e))),z(w,((e,t)=>B(R,t,e)))}),g,w,L,R,e),Q(g),Q(w)};P(L,v),e.hasTable(o)&&u(e.getRowIds(o),(e=>{x(L,e)||v(e)})),I(!0),c(t),d(t,0,e.addRowListener(o,null,((e,t,n)=>v(n))),e.addTableListener(o,(()=>I())))},f,()=>P(l,f),d,c]},Z=(e,t)=>n(e)==s?t=>t(e):e??(()=>t??""),$=e=>{const t=new WeakMap;return n=>(t.has(n)||t.set(n,e(n)),t.get(n))},_=e=>{let t,n=0;const s=[],o=O();return[(r,a,i)=>{t??=e();const l=I(s)??""+n++;return B(o,l,[r,a,i]),X(U(a,i??[""],V),l),l},(e,n,...s)=>u(((e,t=[""])=>{const n=[],s=(e,o)=>o==g(t)?v(n,e):null===t[o]?z(e,(e=>s(e,o+1))):u([t[o],null],(t=>s(W(e,t),o+1)));return s(e,0),n})(e,n),(e=>z(e,(e=>W(o,e)[0](t,...n??[],...s))))),e=>E(W(o,e),(([,t,n])=>(U(t,n??[""],void 0,(t=>(N(t,e),F(t)?1:0))),B(o,e),g(s)<1e3&&v(s,e),n))),(e,n,s)=>E(W(o,e),(([e,,o=[]])=>{const r=(...a)=>{const i=g(a);i==g(o)?e(t,...a,...s(a)):m(o[i])?u(n[i](...a),(e=>r(...a,e))):r(...a,o[i])};r()}))]},ee=Object,te=ee.keys,ne=ee.isFrozen,se=ee.freeze,oe=(e,t)=>!m(((e,t)=>E(e,(e=>e[t])))(e,t)),re=(e,t)=>delete e[t],ae=(e,t)=>u(ee.entries(e),(([e,n])=>t(n,e))),ie=e=>w(te(e)),le=e=>{const t=n(e);return k(t)||t==r&&b(e)?t:void 0},de=(e,t,n,s,o)=>m(o)?e.delCell(t,n,s,!0):e.setCell(t,n,s,o),ce=$((e=>{let t,n,s,o=100,r=O(),a=1;const l=O(),d=O(),[c,h,f]=_((()=>q)),L=O(),R=O(),S=[],p=[],T=(t,n)=>{a=0,e.transaction((()=>z(W(L,n),((n,s)=>z(n,((n,o)=>z(n,((n,r)=>de(e,s,o,r,n[t]))))))))),a=1},y=e=>{B(L,e),B(R,e),h(d,[e])},b=(e,t)=>u(((e,t)=>e.splice(0,t))(e,t??g(e)),y),C=()=>b(S,g(S)-o),k=e.addCellListener(null,null,null,((e,n,o,i,l,d)=>{if(a){E(t,(()=>{v(S,t),C(),b(p),t=void 0,s=1}));const e=H(r,n,O),a=H(e,o,O),c=H(a,i,(()=>[d,void 0]));c[1]=l,c[0]===l&&F(B(a,i))&&F(B(e,o))&&F(B(r,n))&&(t=I(S),s=1),J()}})),M=(e="")=>(m(t)&&(t=""+n++,B(L,t,r),N(t,e),r=O(),s=1),t),D=()=>{w(S)||(p.unshift(M()),T(0,t),t=I(S),s=1)},A=()=>{w(p)||(v(S,t),t=p.shift(),T(1,t),s=1)},J=()=>{s&&(h(l),s=0)},Q=e=>{const t=M(e);return J(),t},N=(e,t)=>(j(e)&&W(R,e)!==t&&(B(R,e,t),h(d,[e])),q),j=e=>x(L,e),q={setSize:e=>(o=e,C(),q),addCheckpoint:Q,setCheckpoint:N,getStore:()=>e,getCheckpointIds:()=>[[...S],t,[...p]],forEachCheckpoint:e=>P(R,e),hasCheckpoint:j,getCheckpoint:e=>W(R,e),goBackward:()=>(D(),J(),q),goForward:()=>(A(),J(),q),goTo:e=>{const n=i(S,e)?D:i(p,e)?A:null;for(;!m(n)&&e!=t;)n();return J(),q},addCheckpointIdsListener:e=>c(e,l),addCheckpointListener:(e,t)=>c(t,d,[e]),delListener:e=>(f(e),q),clear:()=>(b(S),b(p),m(t)||y(t),t=void 0,n=0,Q(),q),destroy:()=>{e.delListener(k)},getListenerStats:()=>({})};return se(q.clear())})),ue=(e,t)=>e<t?-1:1,he=e=>""+e,fe=$((e=>{const t=O(),n=O(),[s,o,r,a,i,l,u,,h,f,g]=Y(e,O,(e=>m(e)?"":e+"")),[w,L,R]=_((()=>I)),v=(t,n,s)=>{const o=i(t);z(s,((t,s)=>n(s,(n=>z(t,(t=>n(t,(n=>e.forEachCell(o,t,n)))))))))},I={setIndexDefinition:(e,s,o,r,a,i=ue)=>{const f=m(a)?void 0:([e],[t])=>a(e,t);return h(e,s,((s,o,a,h,g,w)=>{let R=0;const v=V(),I=V(),S=l(e);if(z(o,(([e,t],n)=>{m(e)||(X(v,e),E(W(S,e),(t=>{N(t,n),F(t)&&(B(S,e),R=1)}))),m(t)||(X(v,t),x(S,t)||(B(S,t,V()),R=1),X(W(S,t),n),m(r)||X(I,t))})),s(),F(g)||(w?P(S,(e=>X(I,e))):P(a,(e=>E(W(h,e),(e=>X(I,e))))),z(I,(e=>{const t=(t,n)=>i(W(g,t),W(g,n),e),n=[...W(S,e)];d(n,t)||(B(S,e,V(c(n,t))),X(v,e))}))),(R||w)&&!m(f)){const t=[...S];d(t,f)||(u(e,O(c(t,f))),R=1)}R&&L(t,[e]),z(v,(t=>L(n,[e,t])))}),Z(o),E(r,Z)),I},delIndexDefinition:e=>(f(e),I),getStore:s,getIndexIds:o,forEachIndex:e=>r(((t,n)=>e(t,(e=>v(t,e,n))))),forEachSlice:(e,t)=>v(e,t,l(e)),hasIndex:a,hasSlice:(e,t)=>x(l(e),t),getTableId:i,getSliceIds:e=>j(l(e)),getSliceRowIds:(e,t)=>J(W(l(e),t)),addSliceIdsListener:(e,n)=>w(n,t,[e]),addSliceRowIdsListener:(e,t,s)=>w(s,n,[e,t]),delListener:e=>(R(e),I),destroy:g,getListenerStats:()=>({})};return se(I)})),ge=O([["avg",[(e,t)=>f(e)/t,(e,t,n)=>e+(t-e)/(n+1),(e,t,n)=>e+(e-t)/(n-1),(e,t,n,s)=>e+(t-n)/s]],["max",[e=>T(...e),(e,t)=>T(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:T(t,e)]],["min",[e=>y(...e),(e,t)=>y(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:y(t,e)]],["sum",[e=>f(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,n)=>e-n+t]]]),we=(e,t,n,s,o,r=!1)=>{if(F(n))return;const[a,i,l,d]=o;return r||=m(e),z(s,(([n,s])=>{r||(e=m(n)?i?.(e,s,t++):m(s)?l?.(e,n,t--):d?.(e,s,n,t),r||=m(e))})),r?a(J(n),A(n)):e},Le=$((e=>{const t=O(),[n,s,o,r,a,i,l,,d,c,u]=Y(e,D,(e=>isNaN(e)||m(e)||!0===e||!1===e||""===e?void 0:1*e)),[h,f,g]=_((()=>w)),w={setMetricDefinition:(e,n,s,o,r,a,c)=>{const u=M(s)?[s,r,a,c]:W(ge,s)??W(ge,"sum");return d(e,n,((n,s,o,r,a,d)=>{const c=i(e),h=A(r);d||=m(c),n();let g=we(c,h,r,s,u,d);b(g)||(g=void 0),g!=c&&(l(e,g),f(t,[e],g,c))}),Z(o,1)),w},delMetricDefinition:e=>(c(e),w),getStore:n,getMetricIds:s,forEachMetric:o,hasMetric:r,getTableId:a,getMetric:i,addMetricListener:(e,n)=>h(n,t,[e]),delListener:e=>(g(e),w),destroy:u,getListenerStats:()=>({})};return se(w)})),Re=(e,t,n,s,o)=>{let r,a=0;const i={load:async n=>{if(2!=a){a=1;const s=await t();m(s)||""==s?e.setTables(n):e.setJson(s),a=0}return i},startAutoLoad:async e=>(i.stopAutoLoad(),await i.load(e),s(i.load),i),stopAutoLoad:()=>(o(),i),save:async()=>(1!=a&&(a=2,await n(e.getJson()),a=0),i),startAutoSave:async()=>(await i.stopAutoSave().save(),r=e.addTablesListener((()=>i.save())),i),stopAutoSave:()=>(E(r,e.delListener),i),getStore:()=>e,destroy:()=>i.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return se(i)},ve=globalThis.window,Ie=(e,t,n)=>{let s;return Re(e,(async()=>n.getItem(t)),(async e=>n.setItem(t,e)),(e=>{s=s=>{s.storageArea===n&&s.key===t&&e()},ve.addEventListener("storage",s)}),(()=>{ve.removeEventListener("storage",s),s=void 0}))},Se=(e,t)=>Ie(e,t,localStorage),pe=(e,t)=>Ie(e,t,sessionStorage),Te=(n,s)=>{let o;return Re(n,(async()=>{try{return await e.readFile(s,"utf8")}catch{}}),(async t=>{try{await e.writeFile(s,t,"utf8")}catch{}}),(e=>{o=t(s,e)}),(()=>{o?.close(),o=void 0}))},ye=e=>e.headers.get("ETag"),be=(e,t,n,s)=>{let o,r;return Re(e,(async()=>{const e=await fetch(t);return r=ye(e),e.text()}),(async e=>await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:e})),(e=>{o=setInterval((async()=>{const n=await fetch(t,{method:"HEAD"}),s=ye(n);m(r)||m(s)||s==r||(r=s,e())}),1e3*s)}),(()=>{E(o,clearInterval),o=void 0}))},Ce=$((e=>{const t=e.createStore,[n,s,o,r,a,,,i,,d,c,h,f]=Y(e,(()=>!0),D),L=t(),I=t(),S=O(),p=(e,t,...n)=>u(n,(n=>X(H(H(S,t,O),e,V),n))),T=e=>u([I,L],(t=>t.delTable(e))),y=(e,t,n)=>p(t,e,t.addWillFinishTransactionListener(n.startTransaction),t.addDidFinishTransactionListener((()=>n.finishTransaction()))),b={setQueryDefinition:(t,n,s)=>{i(t,n),T(t);const o=[],r=[[null,[n,null,null,[],O()]]],a=[],d=[],c=[];s({select:(e,t)=>{const n=M(e)?[g(o)+"",e]:[m(t)?e:t,n=>n(e,t)];return v(o,n),{as:e=>n[0]=e}},join:(e,t,n)=>{const s=m(n)||M(t)?null:t,o=m(s)?t:n,a=[e,[e,s,M(o)?o:e=>e(o),[],O()]];return v(r,a),{as:e=>a[0]=e}},where:(e,t,n)=>v(a,M(e)?e:m(n)?n=>n(e)===t:s=>s(e,t)===n),group:(e,t,n,s,o)=>{const r=[e,[e,M(t)?[t,n,s,o]:W(ge,t)??[(e,t)=>t]]];return v(d,r),{as:e=>r[0]=e}},having:(e,t)=>v(c,M(e)?e:n=>n(e)===t)});const R=O(o);if(F(R))return b;const S=O(r);P(S,((e,[,t])=>E(W(S,t),(({3:t})=>m(e)?0:v(t,e)))));const C=O(d);let k=L;if(F(C)&&w(c))k=I;else{y(t,k,I);const e=O();P(C,((t,[n,s])=>X(H(e,n,V),[t,s])));const n=V();P(R,(t=>x(e,t)?0:X(n,t)));const s=O(),o=(n,s,o,r)=>E(n,(([n,a,i,d])=>{P(s,((t,[s])=>{const a=H(n,t,O),i=W(a,o),l=r?void 0:s;if(i!==l){const n=V([[i,l]]),s=A(a);B(a,o,l),z(W(e,t),(([e,t])=>{const o=we(d[e],s,a,n,t);d[e]=m(le(o))?null:o}))}})),(F(a)||!l(c,(e=>e((e=>d[e]))))?I.delRow:I.setRow)(t,i,d)}));p(k,t,k.addRowListener(t,null,((r,a,i,l)=>{const d=[],c=[],u=O(),h=k.hasRow(t,i);let f=!h;z(n,(e=>{const[n,s,o]=l(t,i,e);v(d,s),v(c,o),f||=n})),P(e,(e=>{const[n,,s]=l(t,i,e);(f||n)&&B(u,e,[s])})),f&&o(U(s,d,void 0,(([,e,n])=>{if(N(e,i),F(e))return I.delRow(t,n),1})),u,i,1),h&&o(U(s,c,(()=>{const e={};return z(n,(n=>e[n]=k.getCell(t,i,n))),[O(),V(),I.addRow(t,e,1),e]}),(([,e])=>{X(e,i)})),u,i)})))}y(t,e,k);const D=(s,o,r,i)=>{const d=t=>e.getCell(o,r,t);u(i,(n=>{const[o,,r,a,i]=W(S,n),l=r?.(d,s),[c,u]=W(i,s)??[];l!=c&&(m(u)||f(t,u),B(i,s,m(l)?null:[l,...h(t,1,e.addRowListener(o,l,(()=>D(s,o,l,a))))]))})),(s=>{const o=(t,o)=>e.getCell(...m(o)?[n,s,t]:t===n?[n,s,o]:[W(S,t)?.[0],W(W(S,t)?.[4],s)?.[0],o]);k.transaction((()=>l(a,(e=>e(o)))?P(R,((e,n)=>de(k,t,s,e,n(o,s)))):k.delRow(t,s)))})(s)},{3:J}=W(S,null);return k.transaction((()=>h(t,1,e.addRowListener(n,null,((s,o,r)=>{e.hasRow(n,r)?D(r,n,r,J):(k.delRow(t,r),z(S,(({4:e})=>E(W(e,r),(([,n])=>{f(t,n),B(e,r)})))))}))))),b},delQueryDefinition:e=>(P(W(S,e),((e,t)=>z(t,(t=>e.delListener(t))))),T(e),d(e),b),getStore:n,getQueryIds:s,forEachQuery:o,hasQuery:r,getTableId:a,delListener:e=>(I.delListener(e),b),destroy:c,getListenerStats:()=>{const{tables:e,tableIds:t,transaction:n,...s}=I.getListenerStats();return s}};return ae({Table:[1,1],RowIds:[0,1],SortedRowIds:[0,5],Row:[1,2],CellIds:[0,2],Cell:[1,3]},(([e,t],n)=>{u(e?["get","has","forEach"]:["get"],(e=>b[e+"Result"+n]=(...t)=>I[e+n](...t))),b["addResult"+n+"Listener"]=(...e)=>I["add"+n+"Listener"](...R(e,0,t),((n,...s)=>e[t](b,...s)))})),se(b)})),me=$((e=>{const t=O(),n=O(),s=O(),o=O(),[r,a,i,l,d,c,,,u,h,f]=Y(e,(()=>[O(),O(),O(),O()]),(e=>m(e)?void 0:e+"")),[g,w,L]=_((()=>S)),R=(e,t,n)=>E(c(e),(([s,,o])=>{if(!x(o,t)){const r=V();if(d(e)!=I(e))X(r,t);else{let e=t;for(;!m(e)&&!x(r,e);)X(r,e),e=W(s,e)}if(n)return r;B(o,t,r)}return W(o,t)})),v=(e,t)=>E(c(e),(([,,e])=>B(e,t))),I=e=>W(t,e),S={setRelationshipDefinition:(e,r,a,i)=>(B(t,e,a),u(e,r,((t,r)=>{const a=V(),i=V(),l=V(),[d,u]=c(e);z(r,(([t,n],s)=>{m(t)||(X(i,t),E(W(u,t),(e=>{N(e,s),F(e)&&B(u,t)}))),m(n)||(X(i,n),x(u,n)||B(u,n,V()),X(W(u,n),s)),X(a,s),B(d,s,n),P(W(o,e),(t=>{x(R(e,t),s)&&X(l,t)}))})),t(),z(a,(t=>w(n,[e,t]))),z(i,(t=>w(s,[e,t]))),z(l,(t=>{v(e,t),w(o,[e,t])}))}),Z(i)),S),delRelationshipDefinition:e=>(B(t,e),h(e),S),getStore:r,getRelationshipIds:a,forEachRelationship:t=>i((n=>t(n,(t=>e.forEachRow(d(n),t))))),hasRelationship:l,getLocalTableId:d,getRemoteTableId:I,getRemoteRowId:(e,t)=>W(c(e)?.[0],t),getLocalRowIds:(e,t)=>J(W(c(e)?.[1],t)),getLinkedRowIds:(e,t)=>m(c(e))?[t]:J(R(e,t,!0)),addRemoteRowIdListener:(e,t,s)=>g(s,n,[e,t]),addLocalRowIdsListener:(e,t,n)=>g(n,s,[e,t]),addLinkedRowIdsListener:(e,t,n)=>(R(e,t),g(n,o,[e,t])),delListener:e=>(v(...L(e)),S),destroy:f,getListenerStats:()=>({})};return se(S)})),Ee=e=>[e,e],ke=()=>[O(),O()],Me=(e,t,n,s=B)=>{const o=(r=j(e),a=e=>!oe(t,e),r.filter(a));var r,a;return u(te(t),(s=>n(e,s,t[s]))),u(o,(t=>s(e,t))),e},De=(e,t,n)=>m(e)||!(e=>C(e,ee)&&e.constructor==ee)(e)||ie(e)||ne(e)?(n?.(),!1):(ae(e,((n,s)=>{t(n,s)||re(e,s)})),!ie(e)),Ae=(e,t,n)=>B(e,t,W(e,t)==-n?void 0:n),xe=()=>{let e,t,n=0,s=0;const o=O(),a=O(),d=O(),f=O(),w=O(),L=O(),I=O(),T=O(),y=ke(),b=ke(),C=ke(),D=ke(),A=ke(),J=ke(),U=ke(),Y=ke(),Z=ke(),$=ke(),[ee,te,ne,ce]=_((()=>tt)),fe=(t,n)=>(!e||x(L,n)||Oe(n))&&De(t,((e,t)=>ge(n,t,e)),(()=>Oe(n))),ge=(e,t,n,s)=>De(s?n:Le(n,e,t),((s,o)=>E(we(e,t,o,s),(e=>(n[o]=e,!0)),(()=>!1))),(()=>Oe(e,t))),we=(t,n,s,o)=>e?E(W(W(L,t),s),(e=>le(o)!=e.type?Oe(t,n,s,o,e.default):o),(()=>Oe(t,n,s,o))):m(le(o))?Oe(t,n,s,o):o,Le=(e,t,n)=>(E(W(I,t),(([s,o])=>{z(s,((t,n)=>{oe(e,n)||(e[n]=t)})),z(o,(s=>{oe(e,s)||Oe(t,n,s)}))})),e),Re=e=>Me(L,e,((e,t,n)=>{const s=O(),o=V();Me(H(L,t,O),n,((e,t,n)=>{B(e,t,n),E(n.default,(e=>B(s,t,e)),(()=>X(o,t)))})),B(I,t,[s,o])}),((e,t)=>{B(L,t),B(I,t)})),ve=e=>Me(T,e,((e,t,n)=>Ie(t,n)),((e,t)=>Ce(t))),Ie=(e,t)=>Me(H(T,e,(()=>(Je(e,1),O()))),t,((t,n,s)=>Se(e,t,n,s)),((t,n)=>me(e,t,n))),Se=(e,t,n,s,o)=>Me(H(t,n,(()=>(Qe(e,n,1),O()))),s,((t,s,o)=>pe(e,n,t,s,o)),((s,r)=>Fe(e,t,n,s,r,o))),pe=(e,t,n,s,o)=>{x(n,s)||ze(e,t,s,1);const r=W(n,s);o!==r&&(Ne(e,t,s,r,o),B(n,s,o))},Te=(e,t,n,s,o)=>E(W(t,n),(t=>pe(e,n,t,s,o)),(()=>Se(e,t,n,Le({[s]:o},e,n)))),ye=e=>{const t=""+n++;return x(e,t)?ye(e):t},be=e=>W(T,e)??Ie(e,{}),Ce=e=>Ie(e,{}),me=(e,t,n)=>Se(e,t,n,{},!0),Fe=(e,t,n,s,o,r)=>{const a=W(W(I,e)?.[0],o);if(!m(a)&&!r)return pe(e,n,s,o,a);const i=t=>{Ne(e,n,t,W(s,t)),ze(e,n,t,-1),B(s,t)};m(a)?i(o):P(s,i),F(s)&&(Qe(e,n,-1),F(B(t,n))&&(Je(e,-1),B(T,e)))},Je=(e,t)=>Ae(o,e,t),Qe=(e,t,n)=>Ae(H(a,e,O),t,n),ze=(e,t,n,s)=>Ae(H(H(d,e,O),t,O),n,s),Ne=(e,t,n,s,o)=>H(H(H(f,e,O),t,O),n,(()=>[s,0]))[1]=o,Oe=(e,t,n,s,o)=>(v(H(H(H(w,e,O),t,O),n,(()=>[])),s),o),je=(e,t,n)=>E(W(W(W(f,e),t),n),(([e,t])=>[!0,e,t]),(()=>[!1,...Ee(Xe(e,t,n))])),We=e=>F(w)||F(Z[e])?0:z(e?G(w,K):w,((t,n)=>z(t,((t,s)=>z(t,((t,o)=>te(Z[e],[n,s,o],t))))))),Pe=(e,t,n)=>{if(!F(t))return te(e,n),1},Be=e=>{const t=F(A[e]),n=F(U[e])&&F(D[e])&&t&&F(b[e]),s=F(Y[e])&&F(J[e])&&F(C[e])&&F(y[e]);if(!n||!s){const r=e?[G(o),K(a),G(d,K),G(f,K)]:[o,a,d,f];if(!n){z(r[2],((t,n)=>z(t,((t,s)=>Pe(U[e],t,[n,s])))));const n=V();z(r[1],((s,o)=>{Pe(D[e],s,[o])&&!t&&(te(A[e],[o,null]),X(n,o))})),t||z(r[3],((t,s)=>{if(!x(n,s)){const n=V();z(t,(e=>z(e,(([t,s],o)=>s!==t?X(n,o):N(e,o))))),z(n,(t=>te(A[e],[s,t])))}})),Pe(b[e],r[0])}if(!s){let t;z(r[3],((n,s)=>{let o;z(n,((n,r)=>{let a;z(n,(([n,i],l)=>{i!==n&&(te(Y[e],[s,r,l],i,n,je),t=o=a=1)})),a&&te(J[e],[s,r],je)})),o&&te(C[e],[s],je)})),t&&te(y[e],void 0,je)}}},He=(e,...t)=>($e((()=>e(...h(t,he)))),tt),qe=()=>q(T,(e=>q(e,q))),Ge=()=>j(T),Ke=e=>j(W(T,he(e))),Ue=(e,t,n,s=0,o)=>{const r=[];return P(W(T,he(e)),((e,n)=>v(r,[m(t)?e:W(n,he(t)),e]))),h(R(c(r,(([e],[t])=>ue(e,t)*(n?-1:1))),s,m(o)?o:s+o),(([,e])=>e))},Ve=(e,t)=>j(W(W(T,he(e)),he(t))),Xe=(e,t,n)=>W(W(W(T,he(e)),he(t)),he(n)),Ye=e=>He((()=>(e=>De(e,fe,Oe))(e)?ve(e):0)),Ze=()=>He((()=>ve({}))),$e=(e,t)=>{if(-1==s)return;_e();const n=e?.();return et(t),n},_e=()=>(s++,tt),et=e=>(s>0&&(s--,0==s&&(t=!F(f),s=1,We(1),t&&Be(1),s=-1,e?.(q(f,(e=>q(e,(e=>q(e,(e=>[...e]),(([e,t])=>e===t))),ie)),ie),q(w,(e=>q(e,q))))&&(s=1,z(f,((e,t)=>z(e,((e,n)=>z(e,(([e],s)=>de(tt,t,n,s,e))))))),s=-1,t=!1),te($[0],void 0,t),We(0),t&&Be(0),te($[1],void 0,t),s=0,u([f,w,o,a,d],Q))),tt),tt={getTables:qe,getTableIds:Ge,getTable:e=>q(W(T,he(e)),q),getRowIds:Ke,getSortedRowIds:Ue,getRow:(e,t)=>q(W(W(T,he(e)),he(t))),getCellIds:Ve,getCell:Xe,hasTables:()=>!F(T),hasTable:e=>x(T,he(e)),hasRow:(e,t)=>x(W(T,he(e)),he(t)),hasCell:(e,t,n)=>x(W(W(T,he(e)),he(t)),he(n)),getJson:()=>S(T),getSchemaJson:()=>S(L),setTables:Ye,setTable:(e,t)=>He((e=>fe(t,e)?Ie(e,t):0),e),setRow:(e,t,n)=>He(((e,t)=>ge(he(e),he(t),n)?Se(he(e),be(he(e)),he(t),n):0),e,t),addRow:(e,t,n)=>$e((()=>{e=he(e);const s=ge(e,void 0,t),o=s||n?ye(W(T,e)):void 0;return s&&Se(e,be(e),o,t),o})),setPartialRow:(e,t,n)=>He(((e,t)=>{if(ge(e,t,n,1)){const s=be(e);ae(n,((n,o)=>Te(e,s,t,o,n)))}}),e,t),setCell:(e,t,n,s)=>He(((e,t,n)=>E(we(e,t,n,M(s)?s(Xe(e,t,n)):s),(s=>Te(e,be(e),t,n,s)))),e,t,n),setJson:e=>{try{"{}"===e?Ze():Ye(p(e))}catch{}return tt},setSchema:t=>He((()=>{if((e=(e=>De(e,(e=>De(e,(e=>{if(!De(e,((e,t)=>i(["type","default"],t))))return!1;const t=e.type;return!(!k(t)&&t!=r||(le(e.default)!=t&&re(e,"default"),0))})))))(t))&&(Re(t),!F(T))){const e=qe();Ze(),Ye(e)}})),delTables:Ze,delTable:e=>He((e=>x(T,e)?Ce(e):0),e),delRow:(e,t)=>He(((e,t)=>E(W(T,e),(n=>x(n,t)?me(e,n,t):0))),e,t),delCell:(e,t,n,s)=>He(((e,t,n)=>E(W(T,e),(o=>E(W(o,t),(r=>x(r,n)?Fe(e,o,t,r,n,s):0))))),e,t,n),delSchema:()=>He((()=>{Re({}),e=!1})),transaction:$e,startTransaction:_e,finishTransaction:et,forEachTable:e=>z(T,((t,n)=>e(n,(e=>z(t,((t,n)=>e(n,(e=>P(t,e))))))))),forEachRow:(e,t)=>z(W(T,he(e)),((e,n)=>t(n,(t=>P(e,t))))),forEachCell:(e,t,n)=>P(W(W(T,he(e)),he(t)),n),addSortedRowIdsListener:(e,t,n,s,o,r,a)=>{let i=Ue(e,t,n,s,o);return ee((()=>{const a=Ue(e,t,n,s,o);var d,c;c=i,g(d=a)===g(c)&&l(d,((e,t)=>c[t]===e))||(i=a,r(tt,e,t,n,s,o,i))}),A[a?1:0],[e,t])},addWillFinishTransactionListener:e=>ee(e,$[0]),addDidFinishTransactionListener:e=>ee(e,$[1]),callListener:e=>(ce(e,[Ge,Ke,Ve],(e=>m(e[2])?[]:Ee(Xe(...e)))),tt),delListener:e=>(ne(e),tt),getListenerStats:()=>({}),createStore:xe};return ae({Tables:[0,y],TableIds:[0,b],Table:[1,C],RowIds:[1,D],Row:[2,J],CellIds:[2,U],Cell:[3,Y],InvalidCell:[3,Z]},(([e,t],n)=>{tt["add"+n+"Listener"]=(...n)=>ee(n[e],t[n[e+1]?1:0],e>0?R(n,0,e):void 0)})),se(tt)};export{ce as createCheckpoints,Re as createCustomPersister,Te as createFilePersister,fe as createIndexes,Se as createLocalPersister,Le as createMetrics,Ce as createQueries,me as createRelationships,be as createRemotePersister,pe as createSessionPersister,xe as createStore,ue as defaultSorter,he as id};
Binary file