tinybase 4.0.0-beta.2 → 4.0.0-beta.4

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 (142) hide show
  1. package/lib/cjs/persister-automerge.cjs +1 -0
  2. package/lib/cjs/persister-automerge.cjs.gz +0 -0
  3. package/lib/cjs/persister-browser.cjs +1 -1
  4. package/lib/cjs/persister-browser.cjs.gz +0 -0
  5. package/lib/cjs/persister-file.cjs +1 -1
  6. package/lib/cjs/persister-file.cjs.gz +0 -0
  7. package/lib/cjs/persister-remote.cjs +1 -1
  8. package/lib/cjs/persister-remote.cjs.gz +0 -0
  9. package/lib/cjs/persister-yjs.cjs +1 -1
  10. package/lib/cjs/persister-yjs.cjs.gz +0 -0
  11. package/lib/cjs/persisters.cjs +1 -1
  12. package/lib/cjs/persisters.cjs.gz +0 -0
  13. package/lib/cjs/queries.cjs +1 -1
  14. package/lib/cjs/queries.cjs.gz +0 -0
  15. package/lib/cjs/store.cjs +1 -1
  16. package/lib/cjs/store.cjs.gz +0 -0
  17. package/lib/cjs/tinybase.cjs +1 -1
  18. package/lib/cjs/tinybase.cjs.gz +0 -0
  19. package/lib/cjs/tools.cjs +1 -1
  20. package/lib/cjs/tools.cjs.gz +0 -0
  21. package/lib/cjs-es6/persister-automerge.cjs +1 -0
  22. package/lib/cjs-es6/persister-automerge.cjs.gz +0 -0
  23. package/lib/cjs-es6/persister-browser.cjs +1 -1
  24. package/lib/cjs-es6/persister-browser.cjs.gz +0 -0
  25. package/lib/cjs-es6/persister-file.cjs +1 -1
  26. package/lib/cjs-es6/persister-file.cjs.gz +0 -0
  27. package/lib/cjs-es6/persister-remote.cjs +1 -1
  28. package/lib/cjs-es6/persister-remote.cjs.gz +0 -0
  29. package/lib/cjs-es6/persister-yjs.cjs +1 -1
  30. package/lib/cjs-es6/persister-yjs.cjs.gz +0 -0
  31. package/lib/cjs-es6/persisters.cjs +1 -1
  32. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  33. package/lib/cjs-es6/queries.cjs +1 -1
  34. package/lib/cjs-es6/queries.cjs.gz +0 -0
  35. package/lib/cjs-es6/store.cjs +1 -1
  36. package/lib/cjs-es6/store.cjs.gz +0 -0
  37. package/lib/cjs-es6/tinybase.cjs +1 -1
  38. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  39. package/lib/cjs-es6/tools.cjs +1 -1
  40. package/lib/cjs-es6/tools.cjs.gz +0 -0
  41. package/lib/debug/persister-automerge.js +257 -0
  42. package/lib/debug/persister-browser.js +2 -2
  43. package/lib/debug/persister-file.js +2 -2
  44. package/lib/debug/persister-remote.js +2 -2
  45. package/lib/debug/persister-yjs.js +3 -3
  46. package/lib/debug/persisters.js +2 -2
  47. package/lib/debug/queries.js +1 -1
  48. package/lib/debug/store.js +27 -13
  49. package/lib/debug/tinybase.js +30 -16
  50. package/lib/debug/tools.js +50 -2
  51. package/lib/es6/persister-automerge.js +1 -0
  52. package/lib/es6/persister-automerge.js.gz +0 -0
  53. package/lib/es6/persister-browser.js +1 -1
  54. package/lib/es6/persister-browser.js.gz +0 -0
  55. package/lib/es6/persister-file.js +1 -1
  56. package/lib/es6/persister-file.js.gz +0 -0
  57. package/lib/es6/persister-remote.js +1 -1
  58. package/lib/es6/persister-remote.js.gz +0 -0
  59. package/lib/es6/persister-yjs.js +1 -1
  60. package/lib/es6/persister-yjs.js.gz +0 -0
  61. package/lib/es6/persisters.js +1 -1
  62. package/lib/es6/persisters.js.gz +0 -0
  63. package/lib/es6/queries.js +1 -1
  64. package/lib/es6/queries.js.gz +0 -0
  65. package/lib/es6/store.js +1 -1
  66. package/lib/es6/store.js.gz +0 -0
  67. package/lib/es6/tinybase.js +1 -1
  68. package/lib/es6/tinybase.js.gz +0 -0
  69. package/lib/es6/tools.js +1 -1
  70. package/lib/es6/tools.js.gz +0 -0
  71. package/lib/persister-automerge.js +1 -0
  72. package/lib/persister-automerge.js.gz +0 -0
  73. package/lib/persister-browser.js +1 -1
  74. package/lib/persister-browser.js.gz +0 -0
  75. package/lib/persister-file.js +1 -1
  76. package/lib/persister-file.js.gz +0 -0
  77. package/lib/persister-remote.js +1 -1
  78. package/lib/persister-remote.js.gz +0 -0
  79. package/lib/persister-yjs.js +1 -1
  80. package/lib/persister-yjs.js.gz +0 -0
  81. package/lib/persisters.js +1 -1
  82. package/lib/persisters.js.gz +0 -0
  83. package/lib/queries.js +1 -1
  84. package/lib/queries.js.gz +0 -0
  85. package/lib/store.js +1 -1
  86. package/lib/store.js.gz +0 -0
  87. package/lib/tinybase.js +1 -1
  88. package/lib/tinybase.js.gz +0 -0
  89. package/lib/tools.js +1 -1
  90. package/lib/tools.js.gz +0 -0
  91. package/lib/types/persister-automerge.d.ts +110 -0
  92. package/lib/types/persister-yjs.d.ts +3 -2
  93. package/lib/types/persisters.d.ts +8 -8
  94. package/lib/types/store.d.ts +53 -0
  95. package/lib/types/tools.d.ts +4 -4
  96. package/lib/types/with-schemas/persister-automerge.d.ts +120 -0
  97. package/lib/types/with-schemas/persister-yjs.d.ts +3 -2
  98. package/lib/types/with-schemas/persisters.d.ts +8 -8
  99. package/lib/types/with-schemas/store.d.ts +59 -0
  100. package/lib/types/with-schemas/tools.d.ts +4 -4
  101. package/lib/umd/persister-automerge.js +1 -0
  102. package/lib/umd/persister-automerge.js.gz +0 -0
  103. package/lib/umd/persister-browser.js +1 -1
  104. package/lib/umd/persister-browser.js.gz +0 -0
  105. package/lib/umd/persister-file.js +1 -1
  106. package/lib/umd/persister-file.js.gz +0 -0
  107. package/lib/umd/persister-remote.js +1 -1
  108. package/lib/umd/persister-remote.js.gz +0 -0
  109. package/lib/umd/persister-yjs.js +1 -1
  110. package/lib/umd/persister-yjs.js.gz +0 -0
  111. package/lib/umd/persisters.js +1 -1
  112. package/lib/umd/persisters.js.gz +0 -0
  113. package/lib/umd/queries.js +1 -1
  114. package/lib/umd/queries.js.gz +0 -0
  115. package/lib/umd/store.js +1 -1
  116. package/lib/umd/store.js.gz +0 -0
  117. package/lib/umd/tinybase.js +1 -1
  118. package/lib/umd/tinybase.js.gz +0 -0
  119. package/lib/umd/tools.js +1 -1
  120. package/lib/umd/tools.js.gz +0 -0
  121. package/lib/umd-es6/persister-automerge.js +1 -0
  122. package/lib/umd-es6/persister-automerge.js.gz +0 -0
  123. package/lib/umd-es6/persister-browser.js +1 -1
  124. package/lib/umd-es6/persister-browser.js.gz +0 -0
  125. package/lib/umd-es6/persister-file.js +1 -1
  126. package/lib/umd-es6/persister-file.js.gz +0 -0
  127. package/lib/umd-es6/persister-remote.js +1 -1
  128. package/lib/umd-es6/persister-remote.js.gz +0 -0
  129. package/lib/umd-es6/persister-yjs.js +1 -1
  130. package/lib/umd-es6/persister-yjs.js.gz +0 -0
  131. package/lib/umd-es6/persisters.js +1 -1
  132. package/lib/umd-es6/persisters.js.gz +0 -0
  133. package/lib/umd-es6/queries.js +1 -1
  134. package/lib/umd-es6/queries.js.gz +0 -0
  135. package/lib/umd-es6/store.js +1 -1
  136. package/lib/umd-es6/store.js.gz +0 -0
  137. package/lib/umd-es6/tinybase.js +1 -1
  138. package/lib/umd-es6/tinybase.js.gz +0 -0
  139. package/lib/umd-es6/tools.js +1 -1
  140. package/lib/umd-es6/tools.js.gz +0 -0
  141. package/package.json +56 -26
  142. package/readme.md +3 -3
@@ -5239,6 +5239,51 @@ export interface Store {
5239
5239
  mutator?: boolean,
5240
5240
  ): Id;
5241
5241
 
5242
+ /**
5243
+ * The addStartTransactionListener method registers a listener function with
5244
+ * the Store that will be called at the start of a transaction.
5245
+ *
5246
+ * The provided TransactionListener will receive a reference to the Store and
5247
+ * two booleans to indicate whether Cell or Value data has been touched during
5248
+ * the transaction. Since this is called at the start, they will both be
5249
+ * `false`!
5250
+ *
5251
+ * Note that a TransactionListener added to the Store with this method can
5252
+ * mutate the Store, and its changes will be treated as part of the
5253
+ * transaction that is starting.
5254
+ *
5255
+ * @returns A unique Id for the listener that can later be used to remove it.
5256
+ * @example
5257
+ * This example registers a listener that is called at start end of the
5258
+ * transaction, just before its listeners will be called.
5259
+ *
5260
+ * ```js
5261
+ * const store = createStore()
5262
+ * .setTables({
5263
+ * pets: {fido: {species: 'dog', color: 'brown'}},
5264
+ * })
5265
+ * .setValues({open: true, employees: 3});
5266
+ * const listenerId = store.addStartTransactionListener(
5267
+ * (store, cellsTouched, valuesTouched) => {
5268
+ * console.log('Transaction started');
5269
+ * },
5270
+ * );
5271
+ *
5272
+ * store.transaction(() =>
5273
+ * store.setCell('pets', 'fido', 'color', 'brown').setValue('employees', 3),
5274
+ * );
5275
+ * // -> 'Transaction started'
5276
+ *
5277
+ * store.callListener(listenerId);
5278
+ * // -> 'Transaction started'
5279
+ *
5280
+ * store.delListener(listenerId);
5281
+ * ```
5282
+ * @category Listener
5283
+ * @since v3.2.0
5284
+ */
5285
+ addStartTransactionListener(listener: TransactionListener): Id;
5286
+
5242
5287
  /**
5243
5288
  * The addWillFinishTransactionListener method registers a listener function
5244
5289
  * with the Store that will be called just before other non-mutating listeners
@@ -5259,6 +5304,11 @@ export interface Store {
5259
5304
  * value of `cellsTouched` and `valuesTouched` in the listener will be `false`
5260
5305
  * because all changes have been reverted.
5261
5306
  *
5307
+ * Note that a TransactionListener added to the Store with this method can
5308
+ * mutate the Store itself, and its changes will be treated as part of the
5309
+ * transaction that is starting (and may fire non-mutating listeners after
5310
+ * this).
5311
+ *
5262
5312
  * @returns A unique Id for the listener that can later be used to remove it.
5263
5313
  * @example
5264
5314
  * This example registers a listener that is called at the end of the
@@ -5353,6 +5403,9 @@ export interface Store {
5353
5403
  * value of `cellsTouched` and `valuesTouched` in the listener will be `false`
5354
5404
  * because all changes have been reverted.
5355
5405
  *
5406
+ * Note that a TransactionListener added to the Store with this method
5407
+ * _cannot_ mutate the Store itself, and attempts to do so will fail silently.
5408
+ *
5356
5409
  * @returns A unique Id for the listener that can later be used to remove it.
5357
5410
  * @example
5358
5411
  * This example registers a listener that is called at the end of the
@@ -429,11 +429,11 @@ export interface Tools {
429
429
  * ).getPrettyStoreApi('shop');
430
430
  *
431
431
  * const dTsLines = dTs.split('\n');
432
- * console.log(dTsLines[5]);
432
+ * console.log(dTsLines[17]);
433
433
  * // -> `export type Tables = {pets?: {[rowId: Id]: {price?: number}}};`
434
434
  *
435
435
  * const tsLines = ts.split('\n');
436
- * console.log(tsLines[79]);
436
+ * console.log(tsLines[81]);
437
437
  * // -> ' hasPetsTable: (): boolean => store.hasTable(PETS),'
438
438
  * ```
439
439
  * @example
@@ -450,11 +450,11 @@ export interface Tools {
450
450
  * ).getPrettyStoreApi('shop');
451
451
  *
452
452
  * const dTsLines = dTs.split('\n');
453
- * console.log(dTsLines[5]);
453
+ * console.log(dTsLines[17]);
454
454
  * // -> 'export type Tables = {pets?: {[rowId: Id]: {price: number}}};'
455
455
  *
456
456
  * const tsLines = ts.split('\n');
457
- * console.log(tsLines[81]);
457
+ * console.log(tsLines[83]);
458
458
  * // -> ' hasPetsTable: (): boolean => store.hasTable(PETS),'
459
459
  * ```
460
460
  * @category Modelling
@@ -0,0 +1,120 @@
1
+ /**
2
+ * The persister-automerge module of the TinyBase project provides a way to save
3
+ * and load Store data, to and from an Automerge document.
4
+ *
5
+ * A single entry point, the createAutomergePersister function, is provided,
6
+ * which returns a new Persister object that can bind a Store to a provided
7
+ * Automerge document handle (and in turn, its document).
8
+ *
9
+ * @see Synchronizing Data guide
10
+ * @packageDocumentation
11
+ * @module persister-automerge
12
+ * @since v4.0
13
+ */
14
+
15
+ import {OptionalSchemas, Store} from './store';
16
+ import {DocHandle} from 'automerge-repo';
17
+ import {Persister} from './persisters';
18
+
19
+ /**
20
+ * The createAutomergePersister function creates a Persister object that can
21
+ * persist the Store to an Automerge document.
22
+ *
23
+ * This has schema-based typing. The following is a simplified representation:
24
+ *
25
+ * ```ts override
26
+ * createAutomergePersister(
27
+ * store: Store,
28
+ * docHandle: DocHandle<any>,
29
+ * docMapName?: string,
30
+ * ): Persister;
31
+ * ```
32
+ *
33
+ * As well as providing a reference to the Store to persist, you must provide
34
+ * the Automerge document handler to persist it with.
35
+ *
36
+ * @param store The Store to persist.
37
+ * @param docHandle The Automerge document handler to persist the Store with.
38
+ * @param docMapName The name of the map used inside the Automerge document to
39
+ * sync the Store to (which otherwise will default to 'tinybase').
40
+ * @returns A reference to the new Persister object.
41
+ * @example
42
+ * This example creates a Persister object and persists the Store to an
43
+ * Automerge document.
44
+ *
45
+ * ```js
46
+ * const docHandler = new AutomergeRepo.Repo({network: []}).create();
47
+ * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
48
+ * const persister = createAutomergePersister(store, docHandler);
49
+ *
50
+ * await persister.save();
51
+ * // Store will be saved to the document.
52
+ *
53
+ * console.log(docHandler.doc);
54
+ * // -> {tinybase: {t: {pets: {fido: {species: 'dog'}}}, v: {}}}
55
+ *
56
+ * persister.destroy();
57
+ * ```
58
+ * @example
59
+ * This more complex example uses Automerge networking to keep two Store objects
60
+ * (each with their own Persister objects and Automerge documents) in sync with
61
+ * each other using a network.
62
+ *
63
+ * ```js
64
+ * // Bind the first Store to a network-enabled automerge-repo
65
+ * const repo1 = new AutomergeRepo.Repo({
66
+ * network: [new BroadcastChannelNetworkAdapter()],
67
+ * });
68
+ * const docHandler1 = repo1.create();
69
+ * await docHandler1.value();
70
+ * const store1 = createStore();
71
+ * const persister1 = createAutomergePersister(store1, docHandler1);
72
+ * await persister1.startAutoLoad();
73
+ * await persister1.startAutoSave();
74
+ *
75
+ * // Bind the second Store to a different network-enabled automerge-repo
76
+ * const repo2 = new AutomergeRepo.Repo({
77
+ * network: [new BroadcastChannelNetworkAdapter()],
78
+ * });
79
+ * const docHandler2 = repo2.find(docHandler1.documentId);
80
+ * await docHandler2.value();
81
+ * const store2 = createStore();
82
+ * const persister2 = createAutomergePersister(store2, docHandler2);
83
+ * await persister2.startAutoLoad();
84
+ * await persister2.startAutoSave();
85
+ *
86
+ * // A function that waits briefly and then for the documents to synchronize
87
+ * // with each other, merely for the purposes of sequentiality in this example.
88
+ * const syncDocsWait = async () => {
89
+ * await new Promise((resolve) => setTimeout(() => resolve(0), 10));
90
+ * await docHandler1.value();
91
+ * await docHandler2.value();
92
+ * };
93
+ *
94
+ * // Wait for the documents to synchronize in their initial state.
95
+ * await syncDocsWait();
96
+ *
97
+ * // Make a change to each of the two Stores.
98
+ * store1.setTables({pets: {fido: {species: 'dog'}}});
99
+ * store2.setValues({open: true});
100
+ *
101
+ * // Wait for the documents to synchronize in their new state.
102
+ * await syncDocsWait();
103
+ *
104
+ * // Ensure the Stores are in sync.
105
+ * console.log(store1.getContent());
106
+ * // -> [{pets: {fido: {species: 'dog'}}}, {open: true}]
107
+ * console.log(store2.getContent());
108
+ * // -> [{pets: {fido: {species: 'dog'}}}, {open: true}]
109
+ *
110
+ * persister1.destroy();
111
+ * persister2.destroy();
112
+ * ```
113
+ * @category Creation
114
+ * @since v4.0
115
+ */
116
+ export function createAutomergePersister<Schemas extends OptionalSchemas>(
117
+ store: Store<Schemas>,
118
+ docHandle: DocHandle<any>,
119
+ docMapName?: string,
120
+ ): Persister<Schemas>;
@@ -36,18 +36,19 @@ import {Doc as YDoc} from 'yjs';
36
36
  * @param store The Store to persist.
37
37
  * @param yDoc The Yjs document to persist the Store to.
38
38
  * @param yMapName The name of the Y.Map used inside the Yjs document to sync
39
- * the Store too (which otherwise will default to 'tinybase').
39
+ * the Store to (which otherwise will default to 'tinybase').
40
40
  * @returns A reference to the new Persister object.
41
41
  * @example
42
42
  * This example creates a Persister object and persists the Store to a Yjs
43
43
  * document.
44
+ *
44
45
  * ```js
45
46
  * const doc = new Y.Doc();
46
47
  * const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
47
48
  * const persister = createYjsPersister(store, doc);
48
49
  *
49
50
  * await persister.save();
50
- * // Store JSON will be saved to the document.
51
+ * // Store will be saved to the document.
51
52
  *
52
53
  * console.log(doc.toJSON());
53
54
  * // -> {tinybase: {t: {pets: {fido: {species: 'dog'}}}, v: {}}}
@@ -635,14 +635,14 @@ export interface Persister<in out Schemas extends OptionalSchemas> {
635
635
  * covers. See those implementations for ideas on how to implement your own
636
636
  * Persister types.
637
637
  *
638
- * This API changed in v4.0. Any custom persisters created on previous
639
- * versions should be upgraded. Most notably, the `setPersisted` function
640
- * parameter is provided with a `getContent` function to get the content from
641
- * the Store itself, rather than being passed pre-serialized JSON. It also
642
- * receives information about the changes made during a transaction. The
643
- * `getPersisted` function must return the content (or nothing) rather than
644
- * JSON. `addPersisterListener` has been renamed `addPersisterListener`, and
645
- * `addPersisterListener` has been renamed `delPersisterListener`.
638
+ * This API changed in v4.0. Any custom persisters created on previous versions
639
+ * should be upgraded. Most notably, the `setPersisted` function parameter is
640
+ * provided with a `getContent` function to get the content from the Store
641
+ * itself, rather than being passed pre-serialized JSON. It also receives
642
+ * information about the changes made during a transaction. The `getPersisted`
643
+ * function must return the content (or nothing) rather than JSON.
644
+ * `startListeningToPersisted` has been renamed `addPersisterListener`, and
645
+ * `stopListeningToPersisted` has been renamed `delPersisterListener`.
646
646
  *
647
647
  * @param store The Store to persist.
648
648
  * @param getPersisted An asynchronous function which will fetch content from
@@ -6432,6 +6432,57 @@ export interface Store<in out Schemas extends OptionalSchemas> {
6432
6432
  mutator?: boolean,
6433
6433
  ): Id;
6434
6434
 
6435
+ /**
6436
+ * The addStartTransactionListener method registers a listener function with
6437
+ * the Store that will be called at the start of a transaction.
6438
+ *
6439
+ * This has schema-based typing. The following is a simplified representation:
6440
+ *
6441
+ * ```ts override
6442
+ * addStartTransactionListener(listener: TransactionListener): Id;
6443
+ * ```
6444
+ *
6445
+ * The provided TransactionListener will receive a reference to the Store and
6446
+ * two booleans to indicate whether Cell or Value data has been touched during
6447
+ * the transaction. Since this is called at the start, they will both be
6448
+ * `false`!
6449
+ *
6450
+ * Note that a TransactionListener added to the Store with this method can
6451
+ * mutate the Store, and its changes will be treated as part of the
6452
+ * transaction that is starting.
6453
+ *
6454
+ * @returns A unique Id for the listener that can later be used to remove it.
6455
+ * @example
6456
+ * This example registers a listener that is called at start end of the
6457
+ * transaction, just before its listeners will be called.
6458
+ *
6459
+ * ```js
6460
+ * const store = createStore()
6461
+ * .setTables({
6462
+ * pets: {fido: {species: 'dog', color: 'brown'}},
6463
+ * })
6464
+ * .setValues({open: true, employees: 3});
6465
+ * const listenerId = store.addStartTransactionListener(
6466
+ * (store, cellsTouched, valuesTouched) => {
6467
+ * console.log('Transaction started');
6468
+ * },
6469
+ * );
6470
+ *
6471
+ * store.transaction(() =>
6472
+ * store.setCell('pets', 'fido', 'color', 'brown').setValue('employees', 3),
6473
+ * );
6474
+ * // -> 'Transaction started'
6475
+ *
6476
+ * store.callListener(listenerId);
6477
+ * // -> 'Transaction started'
6478
+ *
6479
+ * store.delListener(listenerId);
6480
+ * ```
6481
+ * @category Listener
6482
+ * @since v3.2.0
6483
+ */
6484
+ addStartTransactionListener(listener: TransactionListener<Schemas>): Id;
6485
+
6435
6486
  /**
6436
6487
  * The addWillFinishTransactionListener method registers a listener function
6437
6488
  * with the Store that will be called just before other non-mutating listeners
@@ -6458,6 +6509,11 @@ export interface Store<in out Schemas extends OptionalSchemas> {
6458
6509
  * value of `cellsTouched` and `valuesTouched` in the listener will be `false`
6459
6510
  * because all changes have been reverted.
6460
6511
  *
6512
+ * Note that a TransactionListener added to the Store with this method can
6513
+ * mutate the Store itself, and its changes will be treated as part of the
6514
+ * transaction that is starting (and may fire non-mutating listeners after
6515
+ * this).
6516
+ *
6461
6517
  * @returns A unique Id for the listener that can later be used to remove it.
6462
6518
  * @example
6463
6519
  * This example registers a listener that is called at the end of the
@@ -6558,6 +6614,9 @@ export interface Store<in out Schemas extends OptionalSchemas> {
6558
6614
  * value of `cellsTouched` and `valuesTouched` in the listener will be `false`
6559
6615
  * because all changes have been reverted.
6560
6616
  *
6617
+ * Note that a TransactionListener added to the Store with this method
6618
+ * _cannot_ mutate the Store itself, and attempts to do so will fail silently.
6619
+ *
6561
6620
  * @returns A unique Id for the listener that can later be used to remove it.
6562
6621
  * @example
6563
6622
  * This example registers a listener that is called at the end of the
@@ -428,11 +428,11 @@ export interface Tools<in out Schemas extends OptionalSchemas> {
428
428
  * ).getPrettyStoreApi('shop');
429
429
  *
430
430
  * const dTsLines = dTs.split('\n');
431
- * console.log(dTsLines[5]);
431
+ * console.log(dTsLines[17]);
432
432
  * // -> `export type Tables = {pets?: {[rowId: Id]: {price?: number}}};`
433
433
  *
434
434
  * const tsLines = ts.split('\n');
435
- * console.log(tsLines[79]);
435
+ * console.log(tsLines[81]);
436
436
  * // -> ' hasPetsTable: (): boolean => store.hasTable(PETS),'
437
437
  * ```
438
438
  * @example
@@ -449,11 +449,11 @@ export interface Tools<in out Schemas extends OptionalSchemas> {
449
449
  * ).getPrettyStoreApi('shop');
450
450
  *
451
451
  * const dTsLines = dTs.split('\n');
452
- * console.log(dTsLines[5]);
452
+ * console.log(dTsLines[17]);
453
453
  * // -> 'export type Tables = {pets?: {[rowId: Id]: {price: number}}};'
454
454
  *
455
455
  * const tsLines = ts.split('\n');
456
- * console.log(tsLines[81]);
456
+ * console.log(tsLines[83]);
457
457
  * // -> ' hasPetsTable: (): boolean => store.hasTable(PETS),'
458
458
  * ```
459
459
  * @category Modelling
@@ -0,0 +1 @@
1
+ var t,e;t=this,e=function(t){"use strict";const e=t=>t.length,a=t=>null==t,n=(t,e,n)=>a(t)?n?.():e(t),o=Object,s=o.keys,r=o.freeze,i=(t,e)=>n(t,(t=>t[e])),c=(t,e)=>!a(i(t,e)),d=(t,e)=>delete t[e],u=(t,e)=>((t,e)=>t.map(e))(o.entries(t),(([t,a])=>e(a,t))),y=t=>{return(t=>t instanceof o&&t.constructor==o)(t)&&(a=s(t),0==e(a));var a},l=(t,e)=>[t[e].t,t[e].v],f=(t,e,n,o)=>{const s=a(e)?t:((t,e,a)=>(c(t,e)||(t[e]={}),t[e]))(t,e);let r;return u(n,((t,e)=>{o(s,e,t)&&(r=1)})),u(s,((t,e)=>{c(n,e)||(d(s,e),r=1)})),!a(e)&&y(s)&&d(t,e),r};t.createAutomergePersister=(t,o,c="tinybase")=>(o.change((t=>t[c]={})),((t,e,s,v,p)=>{let g,h,A=0,w=!1;const L=async t=>{2!=A&&(A=1,await t(),A=0)},m={load:async(a={},n={})=>(await L((async()=>{let o;try{o=await e()}catch{}t.setContent(o??[a,n])})),m),startAutoLoad:async(a={},n={})=>(m.stopAutoLoad(),await m.load(a,n),w=!0,h=(a=>{const n=({doc:a})=>(async(a,n)=>{await L((async()=>{if(n)t.setTransactionChanges(n());else try{t.setContent(a?.()??await e())}catch{}}))})((()=>l(a,c)));return o.on("change",n),n})(),m),stopAutoLoad:()=>{return w&&(t=h,o.removeListener("change",t),h=void 0,w=!1),m;var t},save:async e=>(1!=A&&(A=2,await(async(t,e)=>{o.change((o=>((t,e,o,s)=>{((t,e)=>{y(t[e])&&(t[e]={t:{},v:{}})})(t,e);const[r,c]=l(t,e),v=()=>{p=1};let p=1;if(n(s?.(),(([t,e])=>{p=0,u(t,((t,e)=>p?0:a(t)?d(r,e):n(r[e],(e=>u(t,((t,o)=>p?0:a(t)?d(e,o):n(i(e,o),(e=>u(t,((t,n)=>a(t)?d(e,n):e[n]=t))),v)))),v))),u(e,((t,e)=>p?0:a(t)?d(c,e):c[e]=t))})),p){const[t,e]=o();f(r,void 0,t,((t,e,a)=>f(r,e,a,((t,e,a)=>f(t,e,a,((t,e,a)=>{if(i(t,e)!==a)return t[e]=a,1})))))),f(c,void 0,e,((t,e,a)=>{i(c,e)!==a&&(c[e]=a)}))}})(o,c,t,e)))})(t.getContent,e),A=0),m),startAutoSave:async()=>(await m.stopAutoSave().save(),g=t.addDidFinishTransactionListener(((t,e)=>m.save(e))),m),stopAutoSave:()=>(n(g,t.delListener),m),getStore:()=>t,destroy:()=>m.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return r(m)})(t,(async()=>2==e(s(o.doc[c]))?l(o.doc,c):void 0)))},"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterAutomerge={});
@@ -1 +1 @@
1
- var e,t;e=this,t=function(e){"use strict";const t=Object.freeze,a="storage",s=globalThis.window,n=(e,n,o)=>((e,r,i,c,d)=>{let u,l,y=0,f=!1;const p=async e=>{2!=y&&(y=1,await e(),y=0)},v={load:async(t,a)=>(await p((async()=>{let s;try{s=await r()}catch{}e.setContent(s??[t,a])})),v),startAutoLoad:async(t,i)=>(v.stopAutoLoad(),await v.load(t,i),f=!0,l=(t=>{const i=t=>{t.storageArea===o&&t.key===n&&(async(t,a)=>{await p((async()=>{if(a)e.setTransactionChanges(a());else try{e.setContent(t?.()??await r())}catch{}}))})((()=>JSON.parse(t.newValue)))};return s.addEventListener(a,i),i})(),v),stopAutoLoad:()=>{return f&&(e=l,s.removeEventListener(a,e),l=void 0,f=!1),v;var e},save:async t=>(1!=y&&(y=2,await(async e=>{return o.setItem(n,(t=e(),JSON.stringify(t,((e,t)=>{return t instanceof Map?(a=(e,[t,a])=>(e[t]=a,e),s={},[...t].reduce(a,s)):t;var a,s}))));var t})(e.getContent),y=0),v),startAutoSave:async()=>(await v.stopAutoSave().save(),u=e.addDidFinishTransactionListener(((e,t)=>v.save(t))),v),stopAutoSave:()=>{var t,a;return t=u,a=e.delListener,null==t||a(t),v},getStore:()=>e,destroy:()=>v.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return t(v)})(e,(async()=>JSON.parse(o.getItem(n))));e.createLocalPersister=(e,t)=>n(e,t,localStorage),e.createSessionPersister=(e,t)=>n(e,t,sessionStorage)},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBasePersisterBrowser={});
1
+ var e,t;e=this,t=function(e){"use strict";const t=Object.freeze,a="storage",s=globalThis.window,n=(e,n,o)=>((e,r,i,c,d)=>{let u,l,y=0,f=!1;const p=async e=>{2!=y&&(y=1,await e(),y=0)},v={load:async(t={},a={})=>(await p((async()=>{let s;try{s=await r()}catch{}e.setContent(s??[t,a])})),v),startAutoLoad:async(t={},i={})=>(v.stopAutoLoad(),await v.load(t,i),f=!0,l=(t=>{const i=t=>{t.storageArea===o&&t.key===n&&(async(t,a)=>{await p((async()=>{if(a)e.setTransactionChanges(a());else try{e.setContent(t?.()??await r())}catch{}}))})((()=>JSON.parse(t.newValue)))};return s.addEventListener(a,i),i})(),v),stopAutoLoad:()=>{return f&&(e=l,s.removeEventListener(a,e),l=void 0,f=!1),v;var e},save:async t=>(1!=y&&(y=2,await(async e=>{return o.setItem(n,(t=e(),JSON.stringify(t,((e,t)=>{return t instanceof Map?(a=(e,[t,a])=>(e[t]=a,e),s={},[...t].reduce(a,s)):t;var a,s}))));var t})(e.getContent),y=0),v),startAutoSave:async()=>(await v.stopAutoSave().save(),u=e.addDidFinishTransactionListener(((e,t)=>v.save(t))),v),stopAutoSave:()=>{var t,a;return t=u,a=e.delListener,null==t||a(t),v},getStore:()=>e,destroy:()=>v.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return t(v)})(e,(async()=>JSON.parse(o.getItem(n))));e.createLocalPersister=(e,t)=>n(e,t,localStorage),e.createSessionPersister=(e,t)=>n(e,t,sessionStorage)},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBasePersisterBrowser={});
Binary file
@@ -1 +1 @@
1
- var t,e;t=this,e=function(t,e,a){"use strict";const s="utf8",r=Object.freeze;t.createFilePersister=(t,o)=>((t,n,i,c,u)=>{let d,f,y=0,l=!1;const p=async t=>{2!=y&&(y=1,await t(),y=0)},v={load:async(e,a)=>(await p((async()=>{let s;try{s=await n()}catch{}t.setContent(s??[e,a])})),v),startAutoLoad:async(e,s)=>{return v.stopAutoLoad(),await v.load(e,s),l=!0,r=async(e,a)=>{await p((async()=>{if(a)t.setTransactionChanges(a());else try{t.setContent(e?.()??await n())}catch{}}))},f=a.watch(o,(()=>r())),v;var r},stopAutoLoad:()=>{return l&&(t=f,t?.close(),f=void 0,l=!1),v;var t},save:async a=>(1!=y&&(y=2,await(async t=>{try{await e.writeFile(o,(a=t(),JSON.stringify(a,((t,e)=>{return e instanceof Map?(a=(t,[e,a])=>(t[e]=a,t),s={},[...e].reduce(a,s)):e;var a,s}))),s)}catch{}var a})(t.getContent),y=0),v),startAutoSave:async()=>(await v.stopAutoSave().save(),d=t.addDidFinishTransactionListener(((t,e)=>v.save(e))),v),stopAutoSave:()=>{var e,a;return e=d,a=t.delListener,null==e||a(e),v},getStore:()=>t,destroy:()=>v.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return r(v)})(t,(async()=>JSON.parse(await e.readFile(o,s))))},"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("fs/promises"),require("fs")):"function"==typeof define&&define.amd?define(["exports","fs/promises","fs"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterFile={},t["fs/promises"],t.fs);
1
+ var t,e;t=this,e=function(t,e,a){"use strict";const s="utf8",r=Object.freeze;t.createFilePersister=(t,o)=>((t,n,i,c,u)=>{let d,f,y=0,l=!1;const p=async t=>{2!=y&&(y=1,await t(),y=0)},v={load:async(e={},a={})=>(await p((async()=>{let s;try{s=await n()}catch{}t.setContent(s??[e,a])})),v),startAutoLoad:async(e={},s={})=>{return v.stopAutoLoad(),await v.load(e,s),l=!0,r=async(e,a)=>{await p((async()=>{if(a)t.setTransactionChanges(a());else try{t.setContent(e?.()??await n())}catch{}}))},f=a.watch(o,(()=>r())),v;var r},stopAutoLoad:()=>{return l&&(t=f,t?.close(),f=void 0,l=!1),v;var t},save:async a=>(1!=y&&(y=2,await(async t=>{try{await e.writeFile(o,(a=t(),JSON.stringify(a,((t,e)=>{return e instanceof Map?(a=(t,[e,a])=>(t[e]=a,t),s={},[...e].reduce(a,s)):e;var a,s}))),s)}catch{}var a})(t.getContent),y=0),v),startAutoSave:async()=>(await v.stopAutoSave().save(),d=t.addDidFinishTransactionListener(((t,e)=>v.save(e))),v),stopAutoSave:()=>{var e,a;return e=d,a=t.delListener,null==e||a(e),v},getStore:()=>t,destroy:()=>v.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return r(v)})(t,(async()=>JSON.parse(await e.readFile(o,s))))},"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("fs/promises"),require("fs")):"function"==typeof define&&define.amd?define(["exports","fs/promises","fs"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterFile={},t["fs/promises"],t.fs);
Binary file
@@ -1 +1 @@
1
- var t,e;t=this,e=function(t){"use strict";const e=t=>null==t,a=Object.freeze,s=t=>t.headers.get("ETag");t.createRemotePersister=(t,n,o,r)=>{let i;return((t,c,d,u,y)=>{let f,l,p=0,v=!1;const h=async t=>{2!=p&&(p=1,await t(),p=0)},w={load:async(e,a)=>(await h((async()=>{let s;try{s=await c()}catch{}t.setContent(s??[e,a])})),w),startAutoLoad:async(a,o)=>{return w.stopAutoLoad(),await w.load(a,o),v=!0,d=async(e,a)=>{await h((async()=>{if(a)t.setTransactionChanges(a());else try{t.setContent(e?.()??await c())}catch{}}))},l=setInterval((async()=>{const t=await fetch(n,{method:"HEAD"}),a=s(t);e(i)||e(a)||a==i||(i=a,d())}),1e3*r),w;var d},stopAutoLoad:()=>(v&&(clearInterval(l),l=void 0,v=!1),w),save:async e=>(1!=p&&(p=2,await(async t=>{return await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:(e=t(),JSON.stringify(e,((t,e)=>{return e instanceof Map?(a=(t,[e,a])=>(t[e]=a,t),s={},[...e].reduce(a,s)):e;var a,s})))});var e})(t.getContent),p=0),w),startAutoSave:async()=>(await w.stopAutoSave().save(),f=t.addDidFinishTransactionListener(((t,e)=>w.save(e))),w),stopAutoSave:()=>{var a,s;return a=f,s=t.delListener,e(a)||s(a),w},getStore:()=>t,destroy:()=>w.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return a(w)})(t,(async()=>{const t=await fetch(n);return i=s(t),JSON.parse(await t.text())}))}},"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterRemote={});
1
+ var t,e;t=this,e=function(t){"use strict";const e=t=>null==t,a=Object.freeze,s=t=>t.headers.get("ETag");t.createRemotePersister=(t,n,o,r)=>{let i;return((t,c,d,u,y)=>{let f,l,p=0,v=!1;const h=async t=>{2!=p&&(p=1,await t(),p=0)},w={load:async(e={},a={})=>(await h((async()=>{let s;try{s=await c()}catch{}t.setContent(s??[e,a])})),w),startAutoLoad:async(a={},o={})=>{return w.stopAutoLoad(),await w.load(a,o),v=!0,d=async(e,a)=>{await h((async()=>{if(a)t.setTransactionChanges(a());else try{t.setContent(e?.()??await c())}catch{}}))},l=setInterval((async()=>{const t=await fetch(n,{method:"HEAD"}),a=s(t);e(i)||e(a)||a==i||(i=a,d())}),1e3*r),w;var d},stopAutoLoad:()=>(v&&(clearInterval(l),l=void 0,v=!1),w),save:async e=>(1!=p&&(p=2,await(async t=>{return await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:(e=t(),JSON.stringify(e,((t,e)=>{return e instanceof Map?(a=(t,[e,a])=>(t[e]=a,t),s={},[...e].reduce(a,s)):e;var a,s})))});var e})(t.getContent),p=0),w),startAutoSave:async()=>(await w.stopAutoSave().save(),f=t.addDidFinishTransactionListener(((t,e)=>w.save(e))),w),stopAutoSave:()=>{var a,s;return a=f,s=t.delListener,e(a)||s(a),w},getStore:()=>t,destroy:()=>w.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return a(w)})(t,(async()=>{const t=await fetch(n);return i=s(t),JSON.parse(await t.text())}))}},"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterRemote={});
Binary file
@@ -1 +1 @@
1
- var t,e;t=this,e=function(t,e){"use strict";const s=t=>t.length,a=t=>t.shift(),n=t=>null==t,o=(t,e,s)=>n(t)?s?.():e(t),i=Object,r=i.freeze,c=()=>({}),d=(t,e)=>!n(((t,e)=>o(t,(t=>t[e])))(t,e)),l=(t,e)=>((t,e)=>t.map(e))(i.entries(t),(([t,s])=>e(s,t))),u=(t,e,s)=>(d(t,e)||(t[e]=s()),t[e]),g=(t,e)=>((t,e)=>t?.forEach(e))(t,((t,s)=>e(s,t))),y="delete",p=t=>[t.get("t"),t.get("v")],f=(t,s,a,o)=>{const i=n(s)?t:t.get(s)??t.set(s,new e.Map);let r;return l(a,((t,e)=>{o(i,e,t)&&(r=1)})),i.forEach(((t,e)=>{d(a,e)||(i.delete(e),r=1)})),n(s)||i.size||t.delete(s),r};t.createYjsPersister=(t,i,d="tinybase")=>{const v=i.getMap(d);return((t,d,h,S,w)=>{let A,b,j=0,O=!1;const J=async t=>{2!=j&&(j=1,await t(),j=0)},L={load:async(e,s)=>(await J((async()=>{let a;try{a=await d()}catch{}t.setContent(a??[e,s])})),L),startAutoLoad:async(e,n)=>(L.stopAutoLoad(),await L.load(e,n),O=!0,b=(e=>{const n=e=>(async(e,s)=>{await J((async()=>{if(s)t.setTransactionChanges(s());else try{t.setContent(e?.()??await d())}catch{}}))})(void 0,(()=>((t,e)=>{if(1==s(e)&&(n=e[0].path,0==s(n)))return[t.get("t").toJSON(),t.get("v").toJSON()];var n;const[i,r]=p(t),d={},l={};return((t,e)=>{t.forEach((({path:t,changes:{keys:e}})=>"t"==a(t)?o(a(t),(s=>{const n=u(d,s,c),r=i.get(s);o(a(t),(t=>{const s=u(n,t,c),a=r.get(t);g(e,((t,{action:e})=>s[t]=e==y?null:a.get(t)))}),(()=>g(e,((t,{action:e})=>n[t]=e==y?null:r.get(t)?.toJSON()))))}),(()=>g(e,((t,{action:e})=>d[t]=e==y?null:i.get(t)?.toJSON())))):g(e,((t,{action:e})=>l[t]=e==y?null:r.get(t)))))})(e),[d,l]})(v,e)));return v.observeDeep(n),n})(),L),stopAutoLoad:()=>{return O&&(t=b,v.unobserveDeep(t),b=void 0,O=!1),L;var t},save:async s=>(1!=j&&(j=2,await(async(t,s)=>i.transact((()=>((t,s,a)=>{(t=>{t.size||(t.set("t",new e.Map),t.set("v",new e.Map))})(t);const[i,r]=p(t),c=()=>{d=1};let d=1;if(o(a?.(),(([t,e])=>{d=0,l(t,((t,e)=>d?0:n(t)?i.delete(e):o(i.get(e),(e=>l(t,((t,s)=>d?0:n(t)?e.delete(s):o(e.get(s),(e=>l(t,((t,s)=>n(t)?e.delete(s):e.set(s,t)))),c)))),c))),l(e,((t,e)=>d?0:n(t)?r.delete(e):r.set(e,t)))})),d){const[t,e]=s();f(i,void 0,t,((t,e,s)=>f(i,e,s,((t,e,s)=>f(t,e,s,((t,e,s)=>{if(t.get(e)!==s)return t.set(e,s),1})))))),f(r,void 0,e,((t,e,s)=>{r.get(e)!==s&&r.set(e,s)}))}})(v,t,s))))(t.getContent,s),j=0),L),startAutoSave:async()=>(await L.stopAutoSave().save(),A=t.addDidFinishTransactionListener(((t,e)=>L.save(e))),L),stopAutoSave:()=>(o(A,t.delListener),L),getStore:()=>t,destroy:()=>L.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return r(L)})(t,(async()=>v.size?[v.get("t").toJSON(),v.get("v").toJSON()]:void 0))}},"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("yjs")):"function"==typeof define&&define.amd?define(["exports","yjs"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterYjs={},t.yjs);
1
+ var t,e;t=this,e=function(t,e){"use strict";const s=t=>t.length,a=t=>t.shift(),n=t=>null==t,o=(t,e,s)=>n(t)?s?.():e(t),i=Object,r=i.freeze,c=()=>({}),d=(t,e)=>!n(((t,e)=>o(t,(t=>t[e])))(t,e)),l=(t,e)=>((t,e)=>t.map(e))(i.entries(t),(([t,s])=>e(s,t))),u=(t,e,s)=>(d(t,e)||(t[e]=s()),t[e]),g=(t,e)=>((t,e)=>t?.forEach(e))(t,((t,s)=>e(s,t))),y="t",p="delete",f=t=>[t.get(y),t.get("v")],v=(t,s,a,o)=>{const i=n(s)?t:t.get(s)??t.set(s,new e.Map);let r;return l(a,((t,e)=>{o(i,e,t)&&(r=1)})),i.forEach(((t,e)=>{d(a,e)||(i.delete(e),r=1)})),n(s)||i.size||t.delete(s),r};t.createYjsPersister=(t,i,d="tinybase")=>{const h=i.getMap(d);return((t,d,S,w,A)=>{let b,j,O=0,J=!1;const L=async t=>{2!=O&&(O=1,await t(),O=0)},N={load:async(e={},s={})=>(await L((async()=>{let a;try{a=await d()}catch{}t.setContent(a??[e,s])})),N),startAutoLoad:async(e={},n={})=>(N.stopAutoLoad(),await N.load(e,n),J=!0,j=(e=>{const n=e=>(async(e,s)=>{await L((async()=>{if(s)t.setTransactionChanges(s());else try{t.setContent(e?.()??await d())}catch{}}))})(void 0,(()=>((t,e)=>{if(1==s(e)&&(n=e[0].path,0==s(n)))return[t.get("t").toJSON(),t.get("v").toJSON()];var n;const[i,r]=f(t),d={},l={};return((t,e)=>{t.forEach((({path:t,changes:{keys:e}})=>a(t)==y?o(a(t),(s=>{const n=u(d,s,c),r=i.get(s);o(a(t),(t=>{const s=u(n,t,c),a=r.get(t);g(e,((t,{action:e})=>s[t]=e==p?null:a.get(t)))}),(()=>g(e,((t,{action:e})=>n[t]=e==p?null:r.get(t)?.toJSON()))))}),(()=>g(e,((t,{action:e})=>d[t]=e==p?null:i.get(t)?.toJSON())))):g(e,((t,{action:e})=>l[t]=e==p?null:r.get(t)))))})(e),[d,l]})(h,e)));return h.observeDeep(n),n})(),N),stopAutoLoad:()=>{return J&&(t=j,h.unobserveDeep(t),j=void 0,J=!1),N;var t},save:async s=>(1!=O&&(O=2,await(async(t,s)=>i.transact((()=>((t,s,a)=>{(t=>{t.size||(t.set(y,new e.Map),t.set("v",new e.Map))})(t);const[i,r]=f(t),c=()=>{d=1};let d=1;if(o(a?.(),(([t,e])=>{d=0,l(t,((t,e)=>d?0:n(t)?i.delete(e):o(i.get(e),(e=>l(t,((t,s)=>d?0:n(t)?e.delete(s):o(e.get(s),(e=>l(t,((t,s)=>n(t)?e.delete(s):e.set(s,t)))),c)))),c))),l(e,((t,e)=>d?0:n(t)?r.delete(e):r.set(e,t)))})),d){const[t,e]=s();v(i,void 0,t,((t,e,s)=>v(i,e,s,((t,e,s)=>v(t,e,s,((t,e,s)=>{if(t.get(e)!==s)return t.set(e,s),1})))))),v(r,void 0,e,((t,e,s)=>{r.get(e)!==s&&r.set(e,s)}))}})(h,t,s))))(t.getContent,s),O=0),N),startAutoSave:async()=>(await N.stopAutoSave().save(),b=t.addDidFinishTransactionListener(((t,e)=>N.save(e))),N),stopAutoSave:()=>(o(b,t.delListener),N),getStore:()=>t,destroy:()=>N.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return r(N)})(t,(async()=>h.size?[h.get(y).toJSON(),h.get("v").toJSON()]:void 0))}},"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("yjs")):"function"==typeof define&&define.amd?define(["exports","yjs"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterYjs={},t.yjs);
Binary file
@@ -1 +1 @@
1
- var t,e;t=this,e=function(t){"use strict";const e=Object.freeze;t.createCustomPersister=(t,a,s,o,n)=>{let i,r,c=0,d=!1;const u=async t=>{2!=c&&(c=1,await t(),c=0)},y={load:async(e,s)=>(await u((async()=>{let o;try{o=await a()}catch{}t.setContent(o??[e,s])})),y),startAutoLoad:async(e,s)=>(y.stopAutoLoad(),await y.load(e,s),d=!0,r=o((async(e,s)=>{await u((async()=>{if(s)t.setTransactionChanges(s());else try{t.setContent(e?.()??await a())}catch{}}))})),y),stopAutoLoad:()=>(d&&(n(r),r=void 0,d=!1),y),save:async e=>(1!=c&&(c=2,await s(t.getContent,e),c=0),y),startAutoSave:async()=>(await y.stopAutoSave().save(),i=t.addDidFinishTransactionListener(((t,e)=>y.save(e))),y),stopAutoSave:()=>{var e,a;return e=i,a=t.delListener,null==e||a(e),y},getStore:()=>t,destroy:()=>y.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return e(y)}},"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisters={});
1
+ var t,e;t=this,e=function(t){"use strict";const e=Object.freeze;t.createCustomPersister=(t,a,s,o,n)=>{let i,r,c=0,d=!1;const u=async t=>{2!=c&&(c=1,await t(),c=0)},y={load:async(e={},s={})=>(await u((async()=>{let o;try{o=await a()}catch{}t.setContent(o??[e,s])})),y),startAutoLoad:async(e={},s={})=>(y.stopAutoLoad(),await y.load(e,s),d=!0,r=o((async(e,s)=>{await u((async()=>{if(s)t.setTransactionChanges(s());else try{t.setContent(e?.()??await a())}catch{}}))})),y),stopAutoLoad:()=>(d&&(n(r),r=void 0,d=!1),y),save:async e=>(1!=c&&(c=2,await s(t.getContent,e),c=0),y),startAutoSave:async()=>(await y.stopAutoSave().save(),i=t.addDidFinishTransactionListener(((t,e)=>y.save(e))),y),stopAutoSave:()=>{var e,a;return e=i,a=t.delListener,null==e||a(e),y},getStore:()=>t,destroy:()=>y.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return e(y)}},"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisters={});
Binary file
@@ -1 +1 @@
1
- var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,n=t(""),s=t(!0),r=t(0),o=t(t),i="Listener",a="Result",l="Ids",d="Row",c=d+l,u="Sorted"+d+l,f="Cell",h=f+l,g=(e,t)=>e.every(t),v=(e,t)=>e.forEach(t),w=e=>R(e,((e,t)=>e+t),0),y=e=>e.length,L=e=>0==y(e),R=(e,t,n)=>e.reduce(t,n),p=(e,...t)=>e.push(...t),T=Math.max,b=Math.min,m=isFinite,C=e=>null==e,Q=(e,t,n)=>C(e)?n?.():t(e),S=e=>t(e)==o,x=e=>Array.isArray(e),I=()=>{},E=Object,M=E.freeze,j=e=>e.size,D=(e,t)=>e?.has(t)??!1,F=e=>C(e)||0==j(e),k=e=>[...e?.values()??[]],z=e=>e.clear(),A=(e,t)=>e?.forEach(t),W=(e,t)=>e?.delete(t),B=e=>new Map(e),O=(e,t)=>e?.get(t),q=(e,t)=>A(e,((e,n)=>t(n,e))),G=(e,t,n)=>C(n)?(W(e,t),e):e?.set(t,n),H=(e,t,n)=>(D(e,t)||G(e,t,n()),O(e,t)),J=(e,t,n,s,r=0)=>Q((n?H:O)(e,t[r],r>y(t)-2?n:B),(o=>{if(r>y(t)-2)return s?.(o)&&G(e,t[r]),o;const i=J(o,t,n,s,r+1);return F(o)&&G(e,t[r]),i})),K=e=>new Set(x(e)||C(e)?e:[e]),N=(e,t)=>e?.add(t),P=B([["avg",[(e,t)=>w(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=>b(...e),(e,t)=>b(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:b(t,e)]],["sum",[e=>w(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,n)=>e-n+t]]]),U=(e=>{const o=new WeakMap;return e=>(o.has(e)||o.set(e,(e=>{const o=e.createStore,[l,w,R,T,b,,,U,,V,X,Y,Z]=((e,t,n)=>{const s=e.hasRow,r=B(),o=B(),i=B(),a=B(),l=B(),d=(t,n,...s)=>{const r=H(l,t,K);return v(s,(t=>N(r,t)&&n&&e.callListener(t))),s},c=(t,...n)=>Q(O(l,t),(s=>{v(L(n)?k(s):n,(t=>{e.delListener(t),W(s,t)})),F(s)&&G(l,t)})),u=(e,t)=>{G(r,e,t),D(o,e)||(G(o,e,!0),G(i,e,B()),G(a,e,B()))},f=e=>{G(r,e),G(o,e),G(i,e),G(a,e),c(e)};return[()=>e,()=>{return e=r,[...e?.keys()??[]];var e},e=>q(o,e),e=>D(o,e),e=>O(r,e),e=>O(o,e),(e,t)=>G(o,e,t),u,(t,r,o,l,f)=>{u(t,r);const h=B(),w=B(),L=O(i,t),R=O(a,t),p=t=>{const o=n=>e.getCell(r,t,n),i=O(L,t),a=s(r,t)?n(l(o,t)):void 0;var d,c;if(i===a||x(i)&&x(a)&&(c=a,y(d=i)===y(c)&&g(d,((e,t)=>c[t]===e)))||G(h,t,[i,a]),!C(f)){const e=O(R,t),n=s(r,t)?f(o,t):void 0;e!=n&&G(w,t,n)}},T=e=>{o((()=>{A(h,(([,e],t)=>G(L,t,e))),A(w,((e,t)=>G(R,t,e)))}),h,w,L,R,e),z(h),z(w)};q(L,p),e.hasTable(r)&&v(e.getRowIds(r),(e=>{D(L,e)||p(e)})),T(!0),c(t),d(t,0,e.addRowListener(r,null,((e,t,n)=>p(n))),e.addTableListener(r,(()=>T())))},f,()=>q(l,f),d,c]})(e,0,I),$=o(),_=o(),ee=B(),te=(e,t,...n)=>v(n,(n=>N(H(H(ee,t,B),e,K),n))),ne=e=>{Q(O(ee,e),(e=>{q(e,((e,t)=>A(t,(t=>e.delListener(t))))),z(e)})),v([_,$],(t=>t.delTable(e)))},se=(e,t,n)=>te(t,e,t.addWillFinishTransactionListener(n.startTransaction),t.addDidFinishTransactionListener((()=>n.finishTransaction()))),re={setQueryDefinition:(o,i,a)=>{U(o,i),ne(o);const l=[],d=[[null,[i,null,null,[],B()]]],c=[],u=[],f=[];a({select:(e,t)=>{const n=S(e)?[y(l)+"",e]:[C(t)?e:t,n=>n(e,t)];return p(l,n),{as:e=>n[0]=e}},join:(e,t,n)=>{const s=C(n)||S(t)?null:t,r=C(s)?t:n,o=[e,[e,s,S(r)?r:e=>e(r),[],B()]];return p(d,o),{as:e=>o[0]=e}},where:(e,t,n)=>p(c,S(e)?e:C(n)?n=>n(e)===t:s=>s(e,t)===n),group:(e,t,n,s,r)=>{const o=[e,[e,S(t)?[t,n,s,r]:O(P,t)??[(e,t)=>t]]];return p(u,o),{as:e=>o[0]=e}},having:(e,t)=>p(f,S(e)?e:n=>n(e)===t)});const h=B(l);if(F(h))return re;const w=B(d);q(w,((e,[,t])=>Q(O(w,t),(({3:t})=>C(e)?0:p(t,e)))));const R=B(u);let T=$;if(F(R)&&L(f))T=_;else{se(o,T,_);const e=B();q(R,((t,[n,s])=>N(H(e,n,K),[t,s])));const i=K();q(h,(t=>D(e,t)?0:N(i,t)));const a=B(),l=(i,a,l,d)=>Q(i,(([c,u,h,v])=>{q(a,((o,[i])=>{const a=H(c,o,B),u=O(a,l),f=d?void 0:i;if(u!==f){const i=K([[u,f]]),d=j(a);G(a,l,f),A(O(e,o),(([e,o])=>{const l=((e,t,n,s,r,o=!1)=>{if(F(n))return;const[i,a,l,d]=r;return o||=C(e),A(s,(([n,s])=>{o||(e=C(n)?a?.(e,s,t++):C(s)?l?.(e,n,t--):d?.(e,s,n,t),o||=C(e))})),o?i(k(n),j(n)):e})(v[e],d,a,i,o);v[e]=C((e=>{const o=t(e);return(e=>e==n||e==s)(o)||o==r&&m(e)?o:void 0})(l))?null:l}))}})),F(u)||!g(f,(e=>e((e=>v[e]))))?_.delRow(o,h):C(h)?i[2]=_.addRow(o,v):_.setRow(o,h,v)}));te(T,o,T.addRowListener(o,null,((t,n,s,r)=>{const d=[],c=[],u=B(),f=T.hasRow(o,s);let h=!f;A(i,(e=>{const[t,n,i]=r(o,s,e);p(d,n),p(c,i),h||=t})),q(e,(e=>{const[t,,n]=r(o,s,e);(h||t)&&G(u,e,[n])})),h&&l(J(a,d,void 0,(([,e])=>(W(e,s),F(e)))),u,s,1),f&&l(J(a,c,(()=>{const e={};return A(i,(t=>e[t]=T.getCell(o,s,t))),[B(),K(),void 0,e]}),(([,e])=>{N(e,s)})),u,s)})))}se(o,e,T);const b=(t,n,s,r)=>{const a=t=>e.getCell(n,s,t);v(r,(n=>{const[s,,r,i,l]=O(w,n),d=r?.(a,t),[c,u]=O(l,t)??[];d!=c&&(C(u)||Z(o,u),G(l,t,C(d)?null:[d,...Y(o,1,e.addRowListener(s,d,(()=>b(t,s,d,i))))]))})),(t=>{const n=(n,s)=>e.getCell(...C(s)?[i,t,n]:n===i?[i,t,s]:[O(w,n)?.[0],O(O(w,n)?.[4],t)?.[0],s]);T.transaction((()=>g(c,(e=>e(n)))?q(h,((e,s)=>((e,t,n,s,r)=>C(r)?e.delCell(t,n,s,!0):e.setCell(t,n,s,r))(T,o,t,e,s(n,t)))):T.delRow(o,t)))})(t)},{3:x}=O(w,null);return T.transaction((()=>Y(o,1,e.addRowListener(i,null,((t,n,s)=>{e.hasRow(i,s)?b(s,i,s,x):(T.delRow(o,s),A(w,(({4:e})=>Q(O(e,s),(([,t])=>{Z(o,t),G(e,s)})))))}))))),re},delQueryDefinition:e=>(ne(e),V(e),re),getStore:l,getQueryIds:w,forEachQuery:R,hasQuery:T,getTableId:b,delListener:e=>(_.delListener(e),re),destroy:X,getListenerStats:()=>{const{tables:e,tableIds:t,transaction:n,...s}=_.getListenerStats();return s}};var oe,ie;return oe={Table:[1,1],[c]:[0,1],[u]:[0,5],[d]:[1,2],[h]:[0,2],[f]:[1,3]},ie=([e,t],n)=>{v(e?["get","has","forEach"]:["get"],(e=>re[e+a+n]=(...t)=>_[e+n](...t))),re["add"+a+n+i]=(...e)=>{return _["add"+n+i](...(s=e,0,r=t,s.slice(0,r)),((n,...s)=>e[t](re,...s)));var s,r}},((e,t)=>{e.map(t)})(E.entries(oe),(([e,t])=>ie(t,e))),M(re)})(e)),o.get(e))})();e.createQueries=U},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseQueries={});
1
+ var e,t;e=this,t=function(e){"use strict";const t=e=>typeof e,n=t(""),s=t(!0),r=t(0),o=t(t),a="Listener",i="Result",l="Ids",d="Row",c=d+l,u="Sorted"+d+l,f="Cell",h=f+l,g=(e,t)=>e.every(t),v=(e,t)=>e.forEach(t),w=e=>R(e,((e,t)=>e+t),0),y=e=>e.length,L=e=>0==y(e),R=(e,t,n)=>e.reduce(t,n),p=(e,...t)=>e.push(...t),T=Math.max,b=Math.min,m=isFinite,C=e=>null==e,Q=(e,t,n)=>C(e)?n?.():t(e),S=e=>t(e)==o,x=e=>Array.isArray(e),I=()=>{},E=Object,M=E.freeze,j=e=>e.size,D=(e,t)=>e?.has(t)??!1,k=e=>C(e)||0==j(e),z=e=>[...e?.values()??[]],A=e=>e.clear(),F=(e,t)=>e?.forEach(t),B=(e,t)=>e?.delete(t),O=e=>new Map(e),W=(e,t)=>e?.get(t),q=(e,t)=>F(e,((e,n)=>t(n,e))),G=(e,t,n)=>C(n)?(B(e,t),e):e?.set(t,n),H=(e,t,n)=>(D(e,t)||G(e,t,n()),W(e,t)),J=(e,t,n,s,r=0)=>Q((n?H:W)(e,t[r],r>y(t)-2?n:O),(o=>{if(r>y(t)-2)return s?.(o)&&G(e,t[r]),o;const a=J(o,t,n,s,r+1);return k(o)&&G(e,t[r]),a})),K=e=>new Set(x(e)||C(e)?e:[e]),N=(e,t)=>e?.add(t),P=O([["avg",[(e,t)=>w(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=>b(...e),(e,t)=>b(t,e),(e,t)=>t==e?void 0:e,(e,t,n)=>n==e?void 0:b(t,e)]],["sum",[e=>w(e),(e,t)=>e+t,(e,t)=>e-t,(e,t,n)=>e-n+t]]]),U=(e=>{const o=new WeakMap;return e=>(o.has(e)||o.set(e,(e=>{const o=e.createStore,[l,w,R,T,b,,,U,,V,X,Y,Z]=((e,t,n)=>{const s=e.hasRow,r=O(),o=O(),a=O(),i=O(),l=O(),d=(t,n,...s)=>{const r=H(l,t,K);return v(s,(t=>N(r,t)&&n&&e.callListener(t))),s},c=(t,...n)=>Q(W(l,t),(s=>{v(L(n)?z(s):n,(t=>{e.delListener(t),B(s,t)})),k(s)&&G(l,t)})),u=(e,t)=>{G(r,e,t),D(o,e)||(G(o,e,!0),G(a,e,O()),G(i,e,O()))},f=e=>{G(r,e),G(o,e),G(a,e),G(i,e),c(e)};return[()=>e,()=>{return e=r,[...e?.keys()??[]];var e},e=>q(o,e),e=>D(o,e),e=>W(r,e),e=>W(o,e),(e,t)=>G(o,e,t),u,(t,r,o,l,f)=>{u(t,r);const h=O(),w=O(),L=W(a,t),R=W(i,t),p=t=>{const o=n=>e.getCell(r,t,n),a=W(L,t),i=s(r,t)?n(l(o,t)):void 0;var d,c;if(a===i||x(a)&&x(i)&&(c=i,y(d=a)===y(c)&&g(d,((e,t)=>c[t]===e)))||G(h,t,[a,i]),!C(f)){const e=W(R,t),n=s(r,t)?f(o,t):void 0;e!=n&&G(w,t,n)}},T=e=>{o((()=>{F(h,(([,e],t)=>G(L,t,e))),F(w,((e,t)=>G(R,t,e)))}),h,w,L,R,e),A(h),A(w)};q(L,p),e.hasTable(r)&&v(e.getRowIds(r),(e=>{D(L,e)||p(e)})),T(!0),c(t),d(t,0,e.addRowListener(r,null,((e,t,n)=>p(n))),e.addTableListener(r,(()=>T())))},f,()=>q(l,f),d,c]})(e,0,I),$=o(),_=o(),ee=O(),te=(e,t,...n)=>v(n,(n=>N(H(H(ee,t,O),e,K),n))),ne=e=>{Q(W(ee,e),(e=>{q(e,((e,t)=>F(t,(t=>e.delListener(t))))),A(e)})),v([_,$],(t=>t.delTable(e)))},se=(e,t,n)=>te(t,e,t.addStartTransactionListener(n.startTransaction),t.addDidFinishTransactionListener((()=>n.finishTransaction()))),re={setQueryDefinition:(o,a,i)=>{U(o,a),ne(o);const l=[],d=[[null,[a,null,null,[],O()]]],c=[],u=[],f=[];i({select:(e,t)=>{const n=S(e)?[y(l)+"",e]:[C(t)?e:t,n=>n(e,t)];return p(l,n),{as:e=>n[0]=e}},join:(e,t,n)=>{const s=C(n)||S(t)?null:t,r=C(s)?t:n,o=[e,[e,s,S(r)?r:e=>e(r),[],O()]];return p(d,o),{as:e=>o[0]=e}},where:(e,t,n)=>p(c,S(e)?e:C(n)?n=>n(e)===t:s=>s(e,t)===n),group:(e,t,n,s,r)=>{const o=[e,[e,S(t)?[t,n,s,r]:W(P,t)??[(e,t)=>t]]];return p(u,o),{as:e=>o[0]=e}},having:(e,t)=>p(f,S(e)?e:n=>n(e)===t)});const h=O(l);if(k(h))return re;const w=O(d);q(w,((e,[,t])=>Q(W(w,t),(({3:t})=>C(e)?0:p(t,e)))));const R=O(u);let T=$;if(k(R)&&L(f))T=_;else{se(o,T,_);const e=O();q(R,((t,[n,s])=>N(H(e,n,K),[t,s])));const a=K();q(h,(t=>D(e,t)?0:N(a,t)));const i=O(),l=(a,i,l,d)=>Q(a,(([c,u,h,v])=>{q(i,((o,[a])=>{const i=H(c,o,O),u=W(i,l),f=d?void 0:a;if(u!==f){const a=K([[u,f]]),d=j(i);G(i,l,f),F(W(e,o),(([e,o])=>{const l=((e,t,n,s,r,o=!1)=>{if(k(n))return;const[a,i,l,d]=r;return o||=C(e),F(s,(([n,s])=>{o||(e=C(n)?i?.(e,s,t++):C(s)?l?.(e,n,t--):d?.(e,s,n,t),o||=C(e))})),o?a(z(n),j(n)):e})(v[e],d,i,a,o);v[e]=C((e=>{const o=t(e);return(e=>e==n||e==s)(o)||o==r&&m(e)?o:void 0})(l))?null:l}))}})),k(u)||!g(f,(e=>e((e=>v[e]))))?_.delRow(o,h):C(h)?a[2]=_.addRow(o,v):_.setRow(o,h,v)}));te(T,o,T.addRowListener(o,null,((t,n,s,r)=>{const d=[],c=[],u=O(),f=T.hasRow(o,s);let h=!f;F(a,(e=>{const[t,n,a]=r(o,s,e);p(d,n),p(c,a),h||=t})),q(e,(e=>{const[t,,n]=r(o,s,e);(h||t)&&G(u,e,[n])})),h&&l(J(i,d,void 0,(([,e])=>(B(e,s),k(e)))),u,s,1),f&&l(J(i,c,(()=>{const e={};return F(a,(t=>e[t]=T.getCell(o,s,t))),[O(),K(),void 0,e]}),(([,e])=>{N(e,s)})),u,s)})))}se(o,e,T);const b=(t,n,s,r)=>{const i=t=>e.getCell(n,s,t);v(r,(n=>{const[s,,r,a,l]=W(w,n),d=r?.(i,t),[c,u]=W(l,t)??[];d!=c&&(C(u)||Z(o,u),G(l,t,C(d)?null:[d,...Y(o,1,e.addRowListener(s,d,(()=>b(t,s,d,a))))]))})),(t=>{const n=(n,s)=>e.getCell(...C(s)?[a,t,n]:n===a?[a,t,s]:[W(w,n)?.[0],W(W(w,n)?.[4],t)?.[0],s]);T.transaction((()=>g(c,(e=>e(n)))?q(h,((e,s)=>((e,t,n,s,r)=>C(r)?e.delCell(t,n,s,!0):e.setCell(t,n,s,r))(T,o,t,e,s(n,t)))):T.delRow(o,t)))})(t)},{3:x}=W(w,null);return T.transaction((()=>Y(o,1,e.addRowListener(a,null,((t,n,s)=>{e.hasRow(a,s)?b(s,a,s,x):(T.delRow(o,s),F(w,(({4:e})=>Q(W(e,s),(([,t])=>{Z(o,t),G(e,s)})))))}))))),re},delQueryDefinition:e=>(ne(e),V(e),re),getStore:l,getQueryIds:w,forEachQuery:R,hasQuery:T,getTableId:b,delListener:e=>(_.delListener(e),re),destroy:X,getListenerStats:()=>{const{tables:e,tableIds:t,transaction:n,...s}=_.getListenerStats();return s}};var oe,ae;return oe={Table:[1,1],[c]:[0,1],[u]:[0,5],[d]:[1,2],[h]:[0,2],[f]:[1,3]},ae=([e,t],n)=>{v(e?["get","has","forEach"]:["get"],(e=>re[e+i+n]=(...t)=>_[e+n](...t))),re["add"+i+n+a]=(...e)=>{return _["add"+n+a](...(s=e,0,r=t,s.slice(0,r)),((n,...s)=>e[t](re,...s)));var s,r}},((e,t)=>{e.map(t)})(E.entries(oe),(([e,t])=>ae(t,e))),M(re)})(e)),o.get(e))})();e.createQueries=U},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBaseQueries={});
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="",n=t(s),l=t(!0),a=t(0),r=t(t),o="type",c="default",i="Ids",d="Table",u=d+"s",h=d+i,f="Row"+i,g="Cell",T=g+i,V="Value",b=V+"s",v=V+i,S=e=>s+e,y=(e,t)=>e.forEach(t),C=(e,t)=>e.map(t),w=e=>e.length,p=(e,t,s)=>e.slice(t,s),I=(e,...t)=>e.push(...t),R=e=>JSON.stringify(e,((e,t)=>{return L(t,Map)?(s=(e,[t,s])=>(e[t]=s,e),n={},[...t].reduce(s,n)):t;var s,n})),m=JSON.parse,J=isFinite,L=(e,t)=>e instanceof t,E=e=>null==e,F=(e,t,s)=>E(e)?s?.():t(e),x=e=>e==n||e==l,z=e=>t(e)==r,O=Object,j=O.keys,k=O.isFrozen,A=O.freeze,M=e=>L(e,O)&&e.constructor==O,N=(e,t)=>!E(((e,t)=>F(e,(e=>e[t])))(e,t)),P=(e,t)=>delete e[t],B=(e,t)=>C(O.entries(e),(([e,s])=>t(s,e))),D=e=>{return M(e)&&(t=j(e),0==w(t));var t},W=(e,t)=>e?.has(t)??!1,$=e=>E(e)||0==(e=>e.size)(e),q=e=>e.clear(),G=(e,t)=>e?.forEach(t),H=(e,t)=>e?.delete(t),K=e=>new Map(e),Q=e=>[...e?.keys()??[]],U=(e,t)=>e?.get(t),X=(e,t)=>G(e,((e,s)=>t(s,e))),Y=(e,t,s)=>E(s)?(H(e,t),e):e?.set(t,s),Z=(e,t,s)=>(W(e,t)||Y(e,t,s()),U(e,t)),_=(e,t,s)=>{const n={};return G(e,((e,l)=>{const a=t?t(e,l):e;!s?.(a,e)&&(n[l]=a)})),n},ee=(e,t,s)=>_(e,(e=>_(e,t,s)),D),te=(e,t,s)=>_(e,(e=>ee(e,t,s)),D),se=(e,t)=>{const s=K();return G(e,((e,n)=>s.set(n,t?.(e)??e))),s},ne=e=>se(e,se),le=e=>se(e,ne),ae=(e,t,s,n,l=0)=>F((s?Z:U)(e,t[l],l>w(t)-2?s:K),(a=>{if(l>w(t)-2)return n?.(a)&&Y(e,t[l]),a;const r=ae(a,t,s,n,l+1);return $(a)&&Y(e,t[l]),r})),re=e=>new Set(Array.isArray(e)||E(e)?e:[e]),oe=(e,t)=>e?.add(t),ce=/^\d+$/,ie=()=>{const e=[];let t=0;return[n=>(n?e.shift():null)??s+t++,t=>{ce.test(t)&&w(e)<1e3&&I(e,t)}]},de=e=>[e,e],ue=()=>[K(),K()],he=e=>[...e],fe=([e,t])=>e===t,ge=e=>{const s=t(e);return x(s)||s==a&&J(e)?s:void 0},Te=(e,t,s,n,l)=>E(l)?e.delCell(t,s,n,!0):e.setCell(t,s,n,l),Ve=(e,t,s)=>E(s)?e.delValue(t):e.setValue(t,s),be=(e,t,s,n=Y)=>(B(t,((t,n)=>s(e,n,t))),X(e,(s=>N(t,s)?0:n(e,s))),e),ve=(e,t,s)=>E(e)||!M(e)||D(e)||k(e)?(s?.(),!1):(B(e,((s,n)=>{t(s,n)||P(e,n)})),!D(e)),Se=(e,t,s)=>Y(e,t,U(e,t)==-s?void 0:s),ye=()=>{let e,t,n,l,r=0;const i=K(),J=K(),L=K(),O=K(),j=K(),k=K(),M=K(),ce=K(),Ce=K(),we=K(),pe=K(),Ie=K(),Re=re(),me=K(),Je=K(),Le=K(),Ee=ue(),Fe=ue(),xe=ue(),ze=ue(),Oe=ue(),je=ue(),ke=ue(),Ae=ue(),Me=ue(),Ne=ue(),Pe=ue(),Be=ue(),De=ue(),We=ue(),[$e,qe,Ge,He]=(e=>{let t;const[n,l]=ie(),a=K();return[(e,l,r,o=[],c=(()=>[]))=>{t??=as;const i=n(1);return Y(a,i,[e,l,r,o,c]),oe(ae(l,r??[s],re),i),i},(e,n,...l)=>y(((e,t=[s])=>{const n=[],l=(e,s)=>s==w(t)?I(n,e):null===t[s]?G(e,(e=>l(e,s+1))):y([t[s],null],(t=>l(U(e,t),s+1)));return l(e,0),n})(e,n),(e=>G(e,(e=>U(a,e)[0](t,...n??[],...l))))),e=>F(U(a,e),(([,t,n])=>(ae(t,n??[s],void 0,(t=>(H(t,e),$(t)?1:0))),Y(a,e),l(e),n))),e=>F(U(a,e),(([e,,s=[],n,l])=>{const a=(...r)=>{const o=w(r);o==w(s)?e(t,...r,...l(r)):E(s[o])?y(n[o]?.(...r)??[],(e=>a(...r,e))):a(...r,s[o])};a()}))]})(),Ke=e=>{if(!ve(e,((e,t)=>[o,c].includes(t))))return!1;const t=e[o];return!(!x(t)&&t!=a||(ge(e[c])!=t&&P(e,c),0))},Qe=(t,s)=>(!e||W(Ce,s)||It(s))&&ve(t,((e,t)=>Ue(s,t,e)),(()=>It(s))),Ue=(e,t,s,n)=>ve(n?s:_e(s,e,t),((n,l)=>F(Xe(e,t,l,n),(e=>(s[l]=e,!0)),(()=>!1))),(()=>It(e,t))),Xe=(t,s,n,l)=>e?F(U(U(Ce,t),n),(e=>ge(l)!=e[o]?It(t,s,n,l,e[c]):l),(()=>It(t,s,n,l))):E(ge(l))?It(t,s,n,l):l,Ye=(e,t)=>ve(t?e:et(e),((t,s)=>F(Ze(s,t),(t=>(e[s]=t,!0)),(()=>!1))),(()=>Rt())),Ze=(e,s)=>t?F(U(pe,e),(t=>ge(s)!=t[o]?Rt(e,s,t[c]):s),(()=>Rt(e,s))):E(ge(s))?Rt(e,s):s,_e=(e,t,s)=>(F(U(we,t),(([n,l])=>{G(n,((t,s)=>{N(e,s)||(e[s]=t)})),G(l,(n=>{N(e,n)||It(t,s,n)}))})),e),et=e=>(t&&(G(Ie,((t,s)=>{N(e,s)||(e[s]=t)})),G(Re,(t=>{N(e,t)||Rt(t)}))),e),tt=e=>be(Ce,e,((e,t,s)=>{const n=K(),l=re();be(Z(Ce,t,K),s,((e,t,s)=>{Y(e,t,s),F(s[c],(e=>Y(n,t,e)),(()=>oe(l,t)))})),Y(we,t,[n,l])}),((e,t)=>{Y(Ce,t),Y(we,t)})),st=e=>be(pe,e,((e,t,s)=>{Y(pe,t,s),F(s[c],(e=>Y(Ie,t,e)),(()=>oe(Re,t)))}),((e,t)=>{Y(pe,t),Y(Ie,t),H(Re,t)})),nt=e=>D(e)?Xt():Gt(e),lt=e=>be(Je,e,((e,t,s)=>at(t,s)),((e,t)=>gt(t))),at=(e,t)=>be(Z(Je,e,(()=>(vt(e,1),K()))),t,((t,s,n)=>rt(e,t,s,n)),((t,s)=>Tt(e,t,s))),rt=(e,t,s,n,l)=>be(Z(t,s,(()=>(St(e,s,1),K()))),n,((t,n,l)=>ot(e,s,t,n,l)),((n,a)=>Vt(e,t,s,n,a,l))),ot=(e,t,s,n,l)=>{W(s,n)||yt(e,t,n,1);const a=U(s,n);l!==a&&(Ct(e,t,n,a,l),Y(s,n,l))},ct=(e,t,s,n,l)=>F(U(t,s),(t=>ot(e,s,t,n,l)),(()=>rt(e,t,s,_e({[n]:l},e,s)))),it=e=>D(e)?_t():Ht(e),dt=e=>be(Le,e,((e,t,s)=>ut(t,s)),((e,t)=>bt(t))),ut=(e,t)=>{W(Le,e)||wt(e,1);const s=U(Le,e);t!==s&&(pt(e,s,t),Y(Le,e,t))},ht=(e,t)=>{const[s]=Z(me,e,ie),n=s(t);return W(U(Je,e),n)?ht(e,t):n},ft=e=>U(Je,e)??at(e,{}),gt=e=>at(e,{}),Tt=(e,t,s)=>{const[,n]=Z(me,e,ie);n(s),rt(e,t,s,{},!0)},Vt=(e,t,s,n,l,a)=>{const r=U(U(we,e)?.[0],l);if(!E(r)&&!a)return ot(e,s,n,l,r);const o=t=>{Ct(e,s,t,U(n,t)),yt(e,s,t,-1),Y(n,t)};E(r)?o(l):X(n,o),$(n)&&(St(e,s,-1),$(Y(t,s))&&(vt(e,-1),Y(Je,e),Y(me,e)))},bt=e=>{const t=U(Ie,e);if(!E(t))return ut(e,t);pt(e,U(Le,e)),wt(e,-1),Y(Le,e)},vt=(e,t)=>Se(i,e,t),St=(e,t,s)=>Se(Z(J,e,K),t,s),yt=(e,t,s,n)=>Se(Z(Z(L,e,K),t,K),s,n),Ct=(e,t,s,n,l)=>Z(Z(Z(O,e,K),t,K),s,(()=>[n,0]))[1]=l,wt=(e,t)=>Se(j,e,t),pt=(e,t,s)=>Z(k,e,(()=>[t,0]))[1]=s,It=(e,t,s,n,l)=>(I(Z(Z(Z(M,e,K),t,K),s,(()=>[])),n),l),Rt=(e,t,s)=>(I(Z(ce,e,(()=>[])),t),s),mt=(e,t,s)=>F(U(U(U(O,e),t),s),(([e,t])=>[!0,e,t]),(()=>[!1,...de(Dt(e,t,s))])),Jt=e=>F(U(k,e),(([e,t])=>[!0,e,t]),(()=>[!1,...de(qt(e))])),Lt=e=>$(M)||$(Me[e])?0:G(e?le(M):M,((t,s)=>G(t,((t,n)=>G(t,((t,l)=>qe(Me[e],[s,n,l],t))))))),Et=e=>$(ce)||$(Ne[e])?0:G(e?se(ce):ce,((t,s)=>qe(Ne[e],[s],t))),Ft=(e,t,s)=>{if(!$(t))return qe(e,s),1},xt=e=>{const t=$(Oe[e]),s=$(ke[e])&&$(ze[e])&&t&&$(Fe[e]),n=$(Ae[e])&&$(je[e])&&$(xe[e])&&$(Ee[e]);if(!s||!n){const l=e?[se(i),ne(J),le(L),le(O)]:[i,J,L,O];if(!s){G(l[2],((t,s)=>G(t,((t,n)=>Ft(ke[e],t,[s,n])))));const s=re();G(l[1],((n,l)=>{Ft(ze[e],n,[l])&&!t&&(qe(Oe[e],[l,null]),oe(s,l))})),t||G(l[3],((t,n)=>{if(!W(s,n)){const s=re();G(t,(e=>G(e,(([t,n],l)=>n!==t?oe(s,l):H(e,l))))),G(s,(t=>qe(Oe[e],[n,t])))}})),Ft(Fe[e],l[0])}if(!n){let t;G(l[3],((s,n)=>{let l;G(s,((s,a)=>{let r;G(s,(([s,o],c)=>{o!==s&&(qe(Ae[e],[n,a,c],o,s,mt),t=l=r=1)})),r&&qe(je[e],[n,a],mt)})),l&&qe(xe[e],[n],mt)})),t&&qe(Ee[e],void 0,mt)}}},zt=e=>{const t=$(Be[e]),s=$(De[e])&&$(Pe[e]);if(!t||!s){const n=e?[se(j),se(k)]:[j,k];if(t||Ft(Be[e],n[0]),!s){let t;G(n[1],(([s,n],l)=>{n!==s&&(qe(De[e],[l],n,s,Jt),t=1)})),t&&qe(Pe[e],void 0,Jt)}}},Ot=(e,...t)=>(ss((()=>e(...C(t,S)))),as),jt=()=>[_(O,((e,t)=>-1===U(i,t)?null:_(e,((e,s)=>-1===U(U(J,t),s)?null:_(e,(([,e])=>e??null),((e,t)=>fe(t)))),D)),D),_(k,(([,e])=>e??null),((e,t)=>fe(t)))],kt=()=>({cellsTouched:n,valuesTouched:l,changedCells:te(O,he,fe),invalidCells:te(M),changedValues:_(k,he,fe),invalidValues:_(ce),changedTableIds:_(i),changedRowIds:ee(J),changedCellIds:te(L),changedValueIds:_(j)}),At=()=>te(Je),Mt=()=>Q(Je),Nt=e=>Q(U(Je,S(e))),Pt=(e,t,s,n=0,l)=>{return C(p((r=U(Je,S(e)),o=(e,s)=>[E(t)?s:U(e,S(t)),s],a=([e],[t])=>(e<t?-1:1)*(s?-1:1),C([...r?.entries()??[]],(([e,t])=>o(t,e))).sort(a)),n,E(l)?l:n+l),(([,e])=>e));var a,r,o},Bt=(e,t)=>Q(U(U(Je,S(e)),S(t))),Dt=(e,t,s)=>U(U(U(Je,S(e)),S(t)),S(s)),Wt=()=>_(Le),$t=()=>Q(Le),qt=e=>U(Le,S(e)),Gt=e=>Ot((()=>(e=>ve(e,Qe,It))(e)?lt(e):0)),Ht=e=>Ot((()=>Ye(e)?dt(e):0)),Kt=e=>{try{nt(m(e))}catch{}return as},Qt=t=>Ot((()=>{if((e=ve(t,(e=>ve(e,Ke))))&&(tt(t),!$(Je))){const e=At();Xt(),Gt(e)}})),Ut=e=>Ot((()=>{if(t=(e=>ve(e,Ke))(e)){const s=Wt();ts(),_t(),t=!0,st(e),Ht(s)}})),Xt=()=>Ot((()=>lt({}))),Yt=e=>Ot((e=>W(Je,e)?gt(e):0),e),Zt=(e,t)=>Ot(((e,t)=>F(U(Je,e),(s=>W(s,t)?Tt(e,s,t):0))),e,t),_t=()=>Ot((()=>dt({}))),es=()=>Ot((()=>{tt({}),e=!1})),ts=()=>Ot((()=>{st({}),t=!1})),ss=(e,t)=>{if(-1==r)return;ns();const s=e();return ls(t),s},ns=()=>(r++,as),ls=e=>(r>0&&(r--,0==r&&(n=!$(O),l=!$(k),r=1,Lt(1),n&&xt(1),Et(1),l&&zt(1),r=-1,e?.(jt,kt)&&(r=1,G(O,((e,t)=>G(e,((e,s)=>G(e,(([e],n)=>Te(as,t,s,n,e))))))),G(k,(([e],t)=>Ve(as,t,e))),r=-1,n=l=!1),qe(We[0],void 0,jt,kt),Lt(0),n&&xt(0),Et(0),l&&zt(0),qe(We[1],void 0,jt,kt),r=0,y([i,J,L,O,M,j,k,ce],q))),as),as={getContent:()=>[At(),Wt()],getTables:At,getTableIds:Mt,getTable:e=>ee(U(Je,S(e))),getRowIds:Nt,getSortedRowIds:Pt,getRow:(e,t)=>_(U(U(Je,S(e)),S(t))),getCellIds:Bt,getCell:Dt,getValues:Wt,getValueIds:$t,getValue:qt,hasTables:()=>!$(Je),hasTable:e=>W(Je,S(e)),hasRow:(e,t)=>W(U(Je,S(e)),S(t)),hasCell:(e,t,s)=>W(U(U(Je,S(e)),S(t)),S(s)),hasValues:()=>!$(Le),hasValue:e=>W(Le,S(e)),getTablesJson:()=>R(Je),getValuesJson:()=>R(Le),getJson:()=>R([Je,Le]),getTablesSchemaJson:()=>R(Ce),getValuesSchemaJson:()=>R(pe),getSchemaJson:()=>R([Ce,pe]),setContent:([e,t])=>Ot((()=>{Gt(e),Ht(t)})),setTables:Gt,setTable:(e,t)=>Ot((e=>Qe(t,e)?at(e,t):0),e),setRow:(e,t,s)=>Ot(((e,t)=>Ue(e,t,s)?rt(e,ft(e),t,s):0),e,t),addRow:(e,t,s=!0)=>ss((()=>{let n;return Ue(e,n,t)&&(e=S(e),rt(e,ft(e),n=ht(e,s?1:0),t)),n})),setPartialRow:(e,t,s)=>Ot(((e,t)=>{if(Ue(e,t,s,1)){const n=ft(e);B(s,((s,l)=>ct(e,n,t,l,s)))}}),e,t),setCell:(e,t,s,n)=>Ot(((e,t,s)=>F(Xe(e,t,s,z(n)?n(Dt(e,t,s)):n),(n=>ct(e,ft(e),t,s,n)))),e,t,s),setValues:Ht,setPartialValues:e=>Ot((()=>Ye(e,1)?B(e,((e,t)=>ut(t,e))):0)),setValue:(e,t)=>Ot((e=>F(Ze(e,z(t)?t(qt(e)):t),(t=>ut(e,t)))),e),setTransactionChanges:e=>Ot((()=>{B(e[0],((e,t)=>E(e)?Yt(t):B(e,((e,s)=>E(e)?Zt(t,s):B(e,((e,n)=>Te(as,t,s,n,e))))))),B(e[1],((e,t)=>Ve(as,t,e)))})),setTablesJson:Kt,setValuesJson:e=>{try{it(m(e))}catch{}return as},setJson:e=>{try{const[t,s]=m(e);nt(t),it(s)}catch{Kt(e)}return as},setTablesSchema:Qt,setValuesSchema:Ut,setSchema:(e,t)=>Ot((()=>{Qt(e),Ut(t)})),delTables:Xt,delTable:Yt,delRow:Zt,delCell:(e,t,s,n)=>Ot(((e,t,s)=>F(U(Je,e),(l=>F(U(l,t),(a=>W(a,s)?Vt(e,l,t,a,s,n):0))))),e,t,s),delValues:_t,delValue:e=>Ot((e=>W(Le,e)?bt(e):0),e),delTablesSchema:es,delValuesSchema:ts,delSchema:()=>Ot((()=>{es(),ts()})),transaction:ss,startTransaction:ns,finishTransaction:ls,forEachTable:e=>G(Je,((t,s)=>e(s,(e=>G(t,((t,s)=>e(s,(e=>X(t,e))))))))),forEachRow:(e,t)=>G(U(Je,S(e)),((e,s)=>t(s,(t=>X(e,t))))),forEachCell:(e,t,s)=>X(U(U(Je,S(e)),S(t)),s),forEachValue:e=>X(Le,e),addSortedRowIdsListener:(e,t,s,n,l,a,r)=>{let o=Pt(e,t,s,n,l);return $e((()=>{const r=Pt(e,t,s,n,l);var c,i,d;i=o,w(c=r)===w(i)&&(d=(e,t)=>i[t]===e,c.every(d))||(o=r,a(as,e,t,s,n,l,o))}),Oe[r?1:0],[e,t],[Mt])},addWillFinishTransactionListener:e=>$e(e,We[0]),addDidFinishTransactionListener:e=>$e(e,We[1]),callListener:e=>(He(e),as),delListener:e=>(Ge(e),as),getListenerStats:()=>({}),createStore:ye};return B({[u]:[0,Ee],[h]:[0,Fe],[d]:[1,xe,[Mt]],[f]:[1,ze,[Mt]],Row:[2,je,[Mt,Nt]],[T]:[2,ke,[Mt,Nt]],[g]:[3,Ae,[Mt,Nt,Bt],e=>de(Dt(...e))],InvalidCell:[3,Me],[b]:[0,Pe],[v]:[0,Be],[V]:[1,De,[$t],e=>de(qt(e[0]))],InvalidValue:[1,Ne]},(([e,t,s,n],l)=>{as["add"+l+"Listener"]=(...l)=>$e(l[e],t[l[e+1]?1:0],e>0?p(l,0,e):void 0,s,n)})),A(as)};e.createStore=ye},"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="",n=t(s),l=t(!0),a=t(0),r=t(t),o="type",c="default",i="Ids",d="Table",u=d+"s",h=d+i,f="Row"+i,g="Cell",T=g+i,V="Value",b=V+"s",v=V+i,S=e=>s+e,y=(e,t)=>e.forEach(t),C=(e,t)=>e.map(t),w=e=>e.length,p=(e,t,s)=>e.slice(t,s),I=(e,...t)=>e.push(...t),R=e=>JSON.stringify(e,((e,t)=>{return L(t,Map)?(s=(e,[t,s])=>(e[t]=s,e),n={},[...t].reduce(s,n)):t;var s,n})),m=JSON.parse,J=isFinite,L=(e,t)=>e instanceof t,E=e=>null==e,F=(e,t,s)=>E(e)?s?.():t(e),x=e=>e==n||e==l,z=e=>t(e)==r,O=Object,j=O.keys,k=O.isFrozen,A=O.freeze,M=e=>L(e,O)&&e.constructor==O,N=(e,t)=>!E(((e,t)=>F(e,(e=>e[t])))(e,t)),P=(e,t)=>delete e[t],B=(e,t)=>C(O.entries(e),(([e,s])=>t(s,e))),D=e=>{return M(e)&&(t=j(e),0==w(t));var t},W=(e,t)=>e?.has(t)??!1,$=e=>E(e)||0==(e=>e.size)(e),q=e=>e.clear(),G=(e,t)=>e?.forEach(t),H=(e,t)=>e?.delete(t),K=e=>new Map(e),Q=e=>[...e?.keys()??[]],U=(e,t)=>e?.get(t),X=(e,t)=>G(e,((e,s)=>t(s,e))),Y=(e,t,s)=>E(s)?(H(e,t),e):e?.set(t,s),Z=(e,t,s)=>(W(e,t)||Y(e,t,s()),U(e,t)),_=(e,t,s)=>{const n={};return G(e,((e,l)=>{const a=t?t(e,l):e;!s?.(a,e)&&(n[l]=a)})),n},ee=(e,t,s)=>_(e,(e=>_(e,t,s)),D),te=(e,t,s)=>_(e,(e=>ee(e,t,s)),D),se=(e,t)=>{const s=K();return G(e,((e,n)=>s.set(n,t?.(e)??e))),s},ne=e=>se(e,se),le=e=>se(e,ne),ae=(e,t,s,n,l=0)=>F((s?Z:U)(e,t[l],l>w(t)-2?s:K),(a=>{if(l>w(t)-2)return n?.(a)&&Y(e,t[l]),a;const r=ae(a,t,s,n,l+1);return $(a)&&Y(e,t[l]),r})),re=e=>new Set(Array.isArray(e)||E(e)?e:[e]),oe=(e,t)=>e?.add(t),ce=/^\d+$/,ie=()=>{const e=[];let t=0;return[n=>(n?e.shift():null)??s+t++,t=>{ce.test(t)&&w(e)<1e3&&I(e,t)}]},de=e=>[e,e],ue=()=>[K(),K()],he=e=>[...e],fe=([e,t])=>e===t,ge=e=>{const s=t(e);return x(s)||s==a&&J(e)?s:void 0},Te=(e,t,s,n,l)=>E(l)?e.delCell(t,s,n,!0):e.setCell(t,s,n,l),Ve=(e,t,s)=>E(s)?e.delValue(t):e.setValue(t,s),be=(e,t,s,n=Y)=>(B(t,((t,n)=>s(e,n,t))),X(e,(s=>N(t,s)?0:n(e,s))),e),ve=(e,t,s)=>E(e)||!M(e)||D(e)||k(e)?(s?.(),!1):(B(e,((s,n)=>{t(s,n)||P(e,n)})),!D(e)),Se=(e,t,s)=>Y(e,t,U(e,t)==-s?void 0:s),ye=()=>{let e,t,n=!1,l=!1,r=0;const i=K(),J=K(),L=K(),O=K(),j=K(),k=K(),M=K(),ce=K(),Ce=K(),we=K(),pe=K(),Ie=K(),Re=re(),me=K(),Je=K(),Le=K(),Ee=ue(),Fe=ue(),xe=ue(),ze=ue(),Oe=ue(),je=ue(),ke=ue(),Ae=ue(),Me=ue(),Ne=ue(),Pe=ue(),Be=ue(),De=ue(),We=K(),$e=ue(),[qe,Ge,He,Ke]=(e=>{let t;const[n,l]=ie(),a=K();return[(e,l,r,o=[],c=(()=>[]))=>{t??=rs;const i=n(1);return Y(a,i,[e,l,r,o,c]),oe(ae(l,r??[s],re),i),i},(e,n,...l)=>y(((e,t=[s])=>{const n=[],l=(e,s)=>s==w(t)?I(n,e):null===t[s]?G(e,(e=>l(e,s+1))):y([t[s],null],(t=>l(U(e,t),s+1)));return l(e,0),n})(e,n),(e=>G(e,(e=>U(a,e)[0](t,...n??[],...l))))),e=>F(U(a,e),(([,t,n])=>(ae(t,n??[s],void 0,(t=>(H(t,e),$(t)?1:0))),Y(a,e),l(e),n))),e=>F(U(a,e),(([e,,s=[],n,l])=>{const a=(...r)=>{const o=w(r);o==w(s)?e(t,...r,...l(r)):E(s[o])?y(n[o]?.(...r)??[],(e=>a(...r,e))):a(...r,s[o])};a()}))]})(),Qe=e=>{if(!ve(e,((e,t)=>[o,c].includes(t))))return!1;const t=e[o];return!(!x(t)&&t!=a||(ge(e[c])!=t&&P(e,c),0))},Ue=(t,s)=>(!e||W(Ce,s)||Rt(s))&&ve(t,((e,t)=>Xe(s,t,e)),(()=>Rt(s))),Xe=(e,t,s,n)=>ve(n?s:et(s,e,t),((n,l)=>F(Ye(e,t,l,n),(e=>(s[l]=e,!0)),(()=>!1))),(()=>Rt(e,t))),Ye=(t,s,n,l)=>e?F(U(U(Ce,t),n),(e=>ge(l)!=e[o]?Rt(t,s,n,l,e[c]):l),(()=>Rt(t,s,n,l))):E(ge(l))?Rt(t,s,n,l):l,Ze=(e,t)=>ve(t?e:tt(e),((t,s)=>F(_e(s,t),(t=>(e[s]=t,!0)),(()=>!1))),(()=>mt())),_e=(e,s)=>t?F(U(pe,e),(t=>ge(s)!=t[o]?mt(e,s,t[c]):s),(()=>mt(e,s))):E(ge(s))?mt(e,s):s,et=(e,t,s)=>(F(U(we,t),(([n,l])=>{G(n,((t,s)=>{N(e,s)||(e[s]=t)})),G(l,(n=>{N(e,n)||Rt(t,s,n)}))})),e),tt=e=>(t&&(G(Ie,((t,s)=>{N(e,s)||(e[s]=t)})),G(Re,(t=>{N(e,t)||mt(t)}))),e),st=e=>be(Ce,e,((e,t,s)=>{const n=K(),l=re();be(Z(Ce,t,K),s,((e,t,s)=>{Y(e,t,s),F(s[c],(e=>Y(n,t,e)),(()=>oe(l,t)))})),Y(we,t,[n,l])}),((e,t)=>{Y(Ce,t),Y(we,t)})),nt=e=>be(pe,e,((e,t,s)=>{Y(pe,t,s),F(s[c],(e=>Y(Ie,t,e)),(()=>oe(Re,t)))}),((e,t)=>{Y(pe,t),Y(Ie,t),H(Re,t)})),lt=e=>D(e)?Yt():Ht(e),at=e=>be(Je,e,((e,t,s)=>rt(t,s)),((e,t)=>Tt(t))),rt=(e,t)=>be(Z(Je,e,(()=>(St(e,1),K()))),t,((t,s,n)=>ot(e,t,s,n)),((t,s)=>Vt(e,t,s))),ot=(e,t,s,n,l)=>be(Z(t,s,(()=>(yt(e,s,1),K()))),n,((t,n,l)=>ct(e,s,t,n,l)),((n,a)=>bt(e,t,s,n,a,l))),ct=(e,t,s,n,l)=>{W(s,n)||Ct(e,t,n,1);const a=U(s,n);l!==a&&(wt(e,t,n,a,l),Y(s,n,l))},it=(e,t,s,n,l)=>F(U(t,s),(t=>ct(e,s,t,n,l)),(()=>ot(e,t,s,et({[n]:l},e,s)))),dt=e=>D(e)?es():Kt(e),ut=e=>be(Le,e,((e,t,s)=>ht(t,s)),((e,t)=>vt(t))),ht=(e,t)=>{W(Le,e)||pt(e,1);const s=U(Le,e);t!==s&&(It(e,s,t),Y(Le,e,t))},ft=(e,t)=>{const[s]=Z(me,e,ie),n=s(t);return W(U(Je,e),n)?ft(e,t):n},gt=e=>U(Je,e)??rt(e,{}),Tt=e=>rt(e,{}),Vt=(e,t,s)=>{const[,n]=Z(me,e,ie);n(s),ot(e,t,s,{},!0)},bt=(e,t,s,n,l,a)=>{const r=U(U(we,e)?.[0],l);if(!E(r)&&!a)return ct(e,s,n,l,r);const o=t=>{wt(e,s,t,U(n,t)),Ct(e,s,t,-1),Y(n,t)};E(r)?o(l):X(n,o),$(n)&&(yt(e,s,-1),$(Y(t,s))&&(St(e,-1),Y(Je,e),Y(me,e)))},vt=e=>{const t=U(Ie,e);if(!E(t))return ht(e,t);It(e,U(Le,e)),pt(e,-1),Y(Le,e)},St=(e,t)=>Se(i,e,t),yt=(e,t,s)=>Se(Z(J,e,K),t,s),Ct=(e,t,s,n)=>Se(Z(Z(L,e,K),t,K),s,n),wt=(e,t,s,n,l)=>Z(Z(Z(O,e,K),t,K),s,(()=>[n,0]))[1]=l,pt=(e,t)=>Se(j,e,t),It=(e,t,s)=>Z(k,e,(()=>[t,0]))[1]=s,Rt=(e,t,s,n,l)=>(I(Z(Z(Z(M,e,K),t,K),s,(()=>[])),n),l),mt=(e,t,s)=>(I(Z(ce,e,(()=>[])),t),s),Jt=(e,t,s)=>F(U(U(U(O,e),t),s),(([e,t])=>[!0,e,t]),(()=>[!1,...de(Wt(e,t,s))])),Lt=e=>F(U(k,e),(([e,t])=>[!0,e,t]),(()=>[!1,...de(Gt(e))])),Et=e=>$(M)||$(Me[e])?0:G(e?le(M):M,((t,s)=>G(t,((t,n)=>G(t,((t,l)=>Ge(Me[e],[s,n,l],t))))))),Ft=e=>$(ce)||$(Ne[e])?0:G(e?se(ce):ce,((t,s)=>Ge(Ne[e],[s],t))),xt=(e,t,s)=>{if(!$(t))return Ge(e,s),1},zt=e=>{const t=$(Oe[e]),s=$(ke[e])&&$(ze[e])&&t&&$(Fe[e]),n=$(Ae[e])&&$(je[e])&&$(xe[e])&&$(Ee[e]);if(!s||!n){const l=e?[se(i),ne(J),le(L),le(O)]:[i,J,L,O];if(!s){G(l[2],((t,s)=>G(t,((t,n)=>xt(ke[e],t,[s,n])))));const s=re();G(l[1],((n,l)=>{xt(ze[e],n,[l])&&!t&&(Ge(Oe[e],[l,null]),oe(s,l))})),t||G(l[3],((t,n)=>{if(!W(s,n)){const s=re();G(t,(e=>G(e,(([t,n],l)=>n!==t?oe(s,l):H(e,l))))),G(s,(t=>Ge(Oe[e],[n,t])))}})),xt(Fe[e],l[0])}if(!n){let t;G(l[3],((s,n)=>{let l;G(s,((s,a)=>{let r;G(s,(([s,o],c)=>{o!==s&&(Ge(Ae[e],[n,a,c],o,s,Jt),t=l=r=1)})),r&&Ge(je[e],[n,a],Jt)})),l&&Ge(xe[e],[n],Jt)})),t&&Ge(Ee[e],void 0,Jt)}}},Ot=e=>{const t=$(Be[e]),s=$(De[e])&&$(Pe[e]);if(!t||!s){const n=e?[se(j),se(k)]:[j,k];if(t||xt(Be[e],n[0]),!s){let t;G(n[1],(([s,n],l)=>{n!==s&&(Ge(De[e],[l],n,s,Lt),t=1)})),t&&Ge(Pe[e],void 0,Lt)}}},jt=(e,...t)=>(ns((()=>e(...C(t,S)))),rs),kt=()=>[_(O,((e,t)=>-1===U(i,t)?null:_(e,((e,s)=>-1===U(U(J,t),s)?null:_(e,(([,e])=>e??null),((e,t)=>fe(t)))),D)),D),_(k,(([,e])=>e??null),((e,t)=>fe(t)))],At=()=>({cellsTouched:n,valuesTouched:l,changedCells:te(O,he,fe),invalidCells:te(M),changedValues:_(k,he,fe),invalidValues:_(ce),changedTableIds:_(i),changedRowIds:ee(J),changedCellIds:te(L),changedValueIds:_(j)}),Mt=()=>te(Je),Nt=()=>Q(Je),Pt=e=>Q(U(Je,S(e))),Bt=(e,t,s,n=0,l)=>{return C(p((r=U(Je,S(e)),o=(e,s)=>[E(t)?s:U(e,S(t)),s],a=([e],[t])=>(e<t?-1:1)*(s?-1:1),C([...r?.entries()??[]],(([e,t])=>o(t,e))).sort(a)),n,E(l)?l:n+l),(([,e])=>e));var a,r,o},Dt=(e,t)=>Q(U(U(Je,S(e)),S(t))),Wt=(e,t,s)=>U(U(U(Je,S(e)),S(t)),S(s)),$t=()=>_(Le),qt=()=>Q(Le),Gt=e=>U(Le,S(e)),Ht=e=>jt((()=>(e=>ve(e,Ue,Rt))(e)?at(e):0)),Kt=e=>jt((()=>Ze(e)?ut(e):0)),Qt=e=>{try{lt(m(e))}catch{}return rs},Ut=t=>jt((()=>{if((e=ve(t,(e=>ve(e,Qe))))&&(st(t),!$(Je))){const e=Mt();Yt(),Ht(e)}})),Xt=e=>jt((()=>{if(t=(e=>ve(e,Qe))(e)){const s=$t();ss(),es(),t=!0,nt(e),Kt(s)}})),Yt=()=>jt((()=>at({}))),Zt=e=>jt((e=>W(Je,e)?Tt(e):0),e),_t=(e,t)=>jt(((e,t)=>F(U(Je,e),(s=>W(s,t)?Vt(e,s,t):0))),e,t),es=()=>jt((()=>ut({}))),ts=()=>jt((()=>{st({}),e=!1})),ss=()=>jt((()=>{nt({}),t=!1})),ns=(e,t)=>{if(-1!=r){ls();const s=e();return as(t),s}},ls=()=>(-1!=r&&r++,1==r&&Ge(We,void 0,kt,At),rs),as=e=>(r>0&&(r--,0==r&&(n=!$(O),l=!$(k),r=1,Et(1),n&&zt(1),Ft(1),l&&Ot(1),e?.(kt,At)&&(G(O,((e,t)=>G(e,((e,s)=>G(e,(([e],n)=>Te(rs,t,s,n,e))))))),G(k,(([e],t)=>Ve(rs,t,e))),n=l=!1),Ge($e[0],void 0,kt,At),r=-1,Et(0),n&&zt(0),Ft(0),l&&Ot(0),Ge($e[1],void 0,kt,At),r=0,n=l=!1,y([i,J,L,O,M,j,k,ce],q))),rs),rs={getContent:()=>[Mt(),$t()],getTables:Mt,getTableIds:Nt,getTable:e=>ee(U(Je,S(e))),getRowIds:Pt,getSortedRowIds:Bt,getRow:(e,t)=>_(U(U(Je,S(e)),S(t))),getCellIds:Dt,getCell:Wt,getValues:$t,getValueIds:qt,getValue:Gt,hasTables:()=>!$(Je),hasTable:e=>W(Je,S(e)),hasRow:(e,t)=>W(U(Je,S(e)),S(t)),hasCell:(e,t,s)=>W(U(U(Je,S(e)),S(t)),S(s)),hasValues:()=>!$(Le),hasValue:e=>W(Le,S(e)),getTablesJson:()=>R(Je),getValuesJson:()=>R(Le),getJson:()=>R([Je,Le]),getTablesSchemaJson:()=>R(Ce),getValuesSchemaJson:()=>R(pe),getSchemaJson:()=>R([Ce,pe]),setContent:([e,t])=>jt((()=>{Ht(e),Kt(t)})),setTables:Ht,setTable:(e,t)=>jt((e=>Ue(t,e)?rt(e,t):0),e),setRow:(e,t,s)=>jt(((e,t)=>Xe(e,t,s)?ot(e,gt(e),t,s):0),e,t),addRow:(e,t,s=!0)=>ns((()=>{let n;return Xe(e,n,t)&&(e=S(e),ot(e,gt(e),n=ft(e,s?1:0),t)),n})),setPartialRow:(e,t,s)=>jt(((e,t)=>{if(Xe(e,t,s,1)){const n=gt(e);B(s,((s,l)=>it(e,n,t,l,s)))}}),e,t),setCell:(e,t,s,n)=>jt(((e,t,s)=>F(Ye(e,t,s,z(n)?n(Wt(e,t,s)):n),(n=>it(e,gt(e),t,s,n)))),e,t,s),setValues:Kt,setPartialValues:e=>jt((()=>Ze(e,1)?B(e,((e,t)=>ht(t,e))):0)),setValue:(e,t)=>jt((e=>F(_e(e,z(t)?t(Gt(e)):t),(t=>ht(e,t)))),e),setTransactionChanges:e=>jt((()=>{B(e[0],((e,t)=>E(e)?Zt(t):B(e,((e,s)=>E(e)?_t(t,s):B(e,((e,n)=>Te(rs,t,s,n,e))))))),B(e[1],((e,t)=>Ve(rs,t,e)))})),setTablesJson:Qt,setValuesJson:e=>{try{dt(m(e))}catch{}return rs},setJson:e=>{try{const[t,s]=m(e);lt(t),dt(s)}catch{Qt(e)}return rs},setTablesSchema:Ut,setValuesSchema:Xt,setSchema:(e,t)=>jt((()=>{Ut(e),Xt(t)})),delTables:Yt,delTable:Zt,delRow:_t,delCell:(e,t,s,n)=>jt(((e,t,s)=>F(U(Je,e),(l=>F(U(l,t),(a=>W(a,s)?bt(e,l,t,a,s,n):0))))),e,t,s),delValues:es,delValue:e=>jt((e=>W(Le,e)?vt(e):0),e),delTablesSchema:ts,delValuesSchema:ss,delSchema:()=>jt((()=>{ts(),ss()})),transaction:ns,startTransaction:ls,finishTransaction:as,forEachTable:e=>G(Je,((t,s)=>e(s,(e=>G(t,((t,s)=>e(s,(e=>X(t,e))))))))),forEachRow:(e,t)=>G(U(Je,S(e)),((e,s)=>t(s,(t=>X(e,t))))),forEachCell:(e,t,s)=>X(U(U(Je,S(e)),S(t)),s),forEachValue:e=>X(Le,e),addSortedRowIdsListener:(e,t,s,n,l,a,r)=>{let o=Bt(e,t,s,n,l);return qe((()=>{const r=Bt(e,t,s,n,l);var c,i,d;i=o,w(c=r)===w(i)&&(d=(e,t)=>i[t]===e,c.every(d))||(o=r,a(rs,e,t,s,n,l,o))}),Oe[r?1:0],[e,t],[Nt])},addStartTransactionListener:e=>qe(e,We),addWillFinishTransactionListener:e=>qe(e,$e[0]),addDidFinishTransactionListener:e=>qe(e,$e[1]),callListener:e=>(Ke(e),rs),delListener:e=>(He(e),rs),getListenerStats:()=>({}),createStore:ye};return B({[u]:[0,Ee],[h]:[0,Fe],[d]:[1,xe,[Nt]],[f]:[1,ze,[Nt]],Row:[2,je,[Nt,Pt]],[T]:[2,ke,[Nt,Pt]],[g]:[3,Ae,[Nt,Pt,Dt],e=>de(Wt(...e))],InvalidCell:[3,Me],[b]:[0,Pe],[v]:[0,Be],[V]:[1,De,[qt],e=>de(Gt(e[0]))],InvalidValue:[1,Ne]},(([e,t,s,n],l)=>{rs["add"+l+"Listener"]=(...l)=>qe(l[e],t[l[e+1]?1:0],e>0?p(l,0,e):void 0,s,n)})),A(rs)};e.createStore=ye},"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