tinybase 4.0.3 → 4.0.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 (165) hide show
  1. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  2. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  3. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  4. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  5. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  6. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  7. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  8. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  9. package/lib/cjs/persisters/persister-file.cjs +1 -1
  10. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  11. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  12. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  13. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  14. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  15. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  16. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  17. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  18. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  19. package/lib/cjs/persisters.cjs +1 -1
  20. package/lib/cjs/persisters.cjs.gz +0 -0
  21. package/lib/cjs/tinybase.cjs +1 -1
  22. package/lib/cjs/tinybase.cjs.gz +0 -0
  23. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  24. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  25. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  26. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  27. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  28. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  29. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  30. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  31. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  32. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  33. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  34. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  35. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  36. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  37. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  38. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  39. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  40. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  41. package/lib/cjs-es6/persisters.cjs +1 -1
  42. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  43. package/lib/cjs-es6/tinybase.cjs +1 -1
  44. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  45. package/lib/debug/persisters/persister-automerge.js +56 -18
  46. package/lib/debug/persisters/persister-browser.js +55 -22
  47. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +106 -62
  48. package/lib/debug/persisters/persister-expo-sqlite.js +111 -62
  49. package/lib/debug/persisters/persister-file.js +51 -18
  50. package/lib/debug/persisters/persister-remote.js +51 -17
  51. package/lib/debug/persisters/persister-sqlite-wasm.js +106 -62
  52. package/lib/debug/persisters/persister-sqlite3.js +111 -62
  53. package/lib/debug/persisters/persister-yjs.js +63 -27
  54. package/lib/debug/persisters.js +49 -17
  55. package/lib/debug/tinybase.js +35 -17
  56. package/lib/es6/persisters/persister-automerge.js +1 -1
  57. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  58. package/lib/es6/persisters/persister-browser.js +1 -1
  59. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  60. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  61. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  62. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  63. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  64. package/lib/es6/persisters/persister-file.js +1 -1
  65. package/lib/es6/persisters/persister-file.js.gz +0 -0
  66. package/lib/es6/persisters/persister-remote.js +1 -1
  67. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  68. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  69. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  70. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  71. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  72. package/lib/es6/persisters/persister-yjs.js +1 -1
  73. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  74. package/lib/es6/persisters.js +1 -1
  75. package/lib/es6/persisters.js.gz +0 -0
  76. package/lib/es6/tinybase.js +1 -1
  77. package/lib/es6/tinybase.js.gz +0 -0
  78. package/lib/persisters/persister-automerge.js +1 -1
  79. package/lib/persisters/persister-automerge.js.gz +0 -0
  80. package/lib/persisters/persister-browser.js +1 -1
  81. package/lib/persisters/persister-browser.js.gz +0 -0
  82. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  83. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  84. package/lib/persisters/persister-expo-sqlite.js +1 -1
  85. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  86. package/lib/persisters/persister-file.js +1 -1
  87. package/lib/persisters/persister-file.js.gz +0 -0
  88. package/lib/persisters/persister-remote.js +1 -1
  89. package/lib/persisters/persister-remote.js.gz +0 -0
  90. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  91. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  92. package/lib/persisters/persister-sqlite3.js +1 -1
  93. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  94. package/lib/persisters/persister-yjs.js +1 -1
  95. package/lib/persisters/persister-yjs.js.gz +0 -0
  96. package/lib/persisters.js +1 -1
  97. package/lib/persisters.js.gz +0 -0
  98. package/lib/tinybase.js +1 -1
  99. package/lib/tinybase.js.gz +0 -0
  100. package/lib/types/persisters/persister-automerge.d.ts +4 -0
  101. package/lib/types/persisters/persister-browser.d.ts +8 -0
  102. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +10 -2
  103. package/lib/types/persisters/persister-expo-sqlite.d.ts +8 -0
  104. package/lib/types/persisters/persister-file.d.ts +8 -1
  105. package/lib/types/persisters/persister-remote.d.ts +4 -0
  106. package/lib/types/persisters/persister-sqlite-wasm.d.ts +8 -0
  107. package/lib/types/persisters/persister-sqlite3.d.ts +8 -0
  108. package/lib/types/persisters/persister-yjs.d.ts +4 -0
  109. package/lib/types/persisters.d.ts +16 -3
  110. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +5 -0
  111. package/lib/types/with-schemas/persisters/persister-browser.d.ts +10 -0
  112. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +12 -2
  113. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +10 -0
  114. package/lib/types/with-schemas/persisters/persister-file.d.ts +9 -1
  115. package/lib/types/with-schemas/persisters/persister-remote.d.ts +5 -0
  116. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +10 -0
  117. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +10 -0
  118. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +5 -0
  119. package/lib/types/with-schemas/persisters.d.ts +17 -3
  120. package/lib/umd/persisters/persister-automerge.js +1 -1
  121. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  122. package/lib/umd/persisters/persister-browser.js +1 -1
  123. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  124. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  125. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  126. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  127. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  128. package/lib/umd/persisters/persister-file.js +1 -1
  129. package/lib/umd/persisters/persister-file.js.gz +0 -0
  130. package/lib/umd/persisters/persister-remote.js +1 -1
  131. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  132. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  133. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  134. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  135. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  136. package/lib/umd/persisters/persister-yjs.js +1 -1
  137. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  138. package/lib/umd/persisters.js +1 -1
  139. package/lib/umd/persisters.js.gz +0 -0
  140. package/lib/umd/tinybase.js +1 -1
  141. package/lib/umd/tinybase.js.gz +0 -0
  142. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  143. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  144. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  145. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  146. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  147. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  148. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  149. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  150. package/lib/umd-es6/persisters/persister-file.js +1 -1
  151. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  152. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  153. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  154. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  155. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  156. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  157. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  158. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  159. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  160. package/lib/umd-es6/persisters.js +1 -1
  161. package/lib/umd-es6/persisters.js.gz +0 -0
  162. package/lib/umd-es6/tinybase.js +1 -1
  163. package/lib/umd-es6/tinybase.js.gz +0 -0
  164. package/package.json +5 -5
  165. package/readme.md +2 -2
@@ -23,11 +23,13 @@ import {DB} from '@vlcn.io/crsqlite-wasm';
23
23
  * store: Store,
24
24
  * db: DB,
25
25
  * configOrStoreTableName?: DatabasePersisterConfig | string,
26
+ * onSqlCommand?: (sql: string, args?: any[]) => void,
27
+ * onIgnoredError?: (error: any) => void,
26
28
  * ): Persister;
27
29
  * ```
28
30
  *
29
- * As well as providing a reference to the Store to persist, you must provide
30
- * a `db` parameter which identifies the database instance.
31
+ * As well as providing a reference to the Store to persist, you must provide a
32
+ * `db` parameter which identifies the database instance.
31
33
  *
32
34
  * A database Persister uses one of two modes: either a JSON serialization of
33
35
  * the whole Store stored in a single row of a table (the default), or a tabular
@@ -45,6 +47,12 @@ import {DB} from '@vlcn.io/crsqlite-wasm';
45
47
  * @param configOrStoreTableName A DatabasePersisterConfig to configure the
46
48
  * persistence mode (or a string to set the `storeTableName` property of the
47
49
  * JSON serialization).
50
+ * @param onSqlCommand An optional handler called every time the Persister
51
+ * executes a SQL command or query. This is suitable for logging persistence
52
+ * behavior in a development environment, since v4.0.4.
53
+ * @param onIgnoredError An optional handler for the errors that the Persister
54
+ * would otherwise ignore when trying to save or load data. This is suitable for
55
+ * debugging persistence issues in a development environment, since v4.0.4.
48
56
  * @returns A reference to the new Persister object.
49
57
  * @example
50
58
  * This example creates a Persister object and persists the Store to a local
@@ -104,4 +112,6 @@ export function createCrSqliteWasmPersister<Schemas extends OptionalSchemas>(
104
112
  store: Store<Schemas>,
105
113
  db: DB,
106
114
  configOrStoreTableName?: DatabasePersisterConfig<Schemas> | string,
115
+ onSqlCommand?: (sql: string, args?: any[]) => void,
116
+ onIgnoredError?: (error: any) => void,
107
117
  ): Persister<Schemas>;
@@ -26,6 +26,8 @@ import {SQLiteDatabase} from 'expo-sqlite';
26
26
  * store: Store,
27
27
  * db: SQLiteDatabase,
28
28
  * configOrStoreTableName?: DatabasePersisterConfig | string,
29
+ * onSqlCommand?: (sql: string, args?: any[]) => void,
30
+ * onIgnoredError?: (error: any) => void,
29
31
  * ): Persister;
30
32
  * ```
31
33
  *
@@ -52,6 +54,12 @@ import {SQLiteDatabase} from 'expo-sqlite';
52
54
  * @param configOrStoreTableName A DatabasePersisterConfig to configure the
53
55
  * persistence mode (or a string to set the `storeTableName` property of the
54
56
  * JSON serialization).
57
+ * @param onSqlCommand An optional handler called every time the Persister
58
+ * executes a SQL command or query. This is suitable for logging persistence
59
+ * behavior in a development environment, since v4.0.4.
60
+ * @param onIgnoredError An optional handler for the errors that the Persister
61
+ * would otherwise ignore when trying to save or load data. This is suitable for
62
+ * debugging persistence issues in a development environment, since v4.0.4.
55
63
  * @returns A reference to the new Persister object.
56
64
  * @example
57
65
  * This example creates a Persister object and persists the Store to a local
@@ -125,4 +133,6 @@ export function createExpoSqlitePersister<Schemas extends OptionalSchemas>(
125
133
  store: Store<Schemas>,
126
134
  db: SQLiteDatabase,
127
135
  configOrStoreTableName?: DatabasePersisterConfig<Schemas> | string,
136
+ onSqlCommand?: (sql: string, args?: any[]) => void,
137
+ onIgnoredError?: (error: any) => void,
128
138
  ): Persister<Schemas>;
@@ -16,13 +16,20 @@ import {Persister} from '../persisters';
16
16
  * This has schema-based typing. The following is a simplified representation:
17
17
  *
18
18
  * ```ts override
19
- * createFilePersister(store: Store, filePath: string): Persister;
19
+ * createFilePersister(
20
+ * store: Store,
21
+ * filePath: string,
22
+ * onIgnoredError?: (error: any) => void,
23
+ * ): Persister;
20
24
  * ```
21
25
  *
22
26
  * As well as providing a reference to the Store to persist, you must provide a
23
27
  * `filePath` parameter which identifies the file to persist it to.
24
28
  * @param store The Store to persist.
25
29
  * @param filePath The location of the local file to persist the Store to.
30
+ * @param onIgnoredError An optional handler for the errors that the Persister
31
+ * would otherwise ignore when trying to save or load data. This is suitable for
32
+ * debugging persistence issues in a development environment, since v4.0.4.
26
33
  * @returns A reference to the new Persister object.
27
34
  * @example
28
35
  * This example creates a Persister object and persists the Store to a local
@@ -45,4 +52,5 @@ import {Persister} from '../persisters';
45
52
  export function createFilePersister<Schemas extends OptionalSchemas>(
46
53
  store: Store<Schemas>,
47
54
  filePath: string,
55
+ onIgnoredError?: (error: any) => void,
48
56
  ): Persister<Schemas>;
@@ -21,6 +21,7 @@ import {Persister} from '../persisters';
21
21
  * loadUrl: string,
22
22
  * saveUrl: string,
23
23
  * autoLoadIntervalSeconds: number,
24
+ * onIgnoredError?: (error: any) => void,
24
25
  * ): Persister;
25
26
  * ```
26
27
  *
@@ -37,6 +38,9 @@ import {Persister} from '../persisters';
37
38
  * @param saveUrl The endpoint that supports a `POST` method to save JSON.
38
39
  * @param autoLoadIntervalSeconds How often to poll the `loadUrl` when
39
40
  * automatically loading changes from the server.
41
+ * @param onIgnoredError An optional handler for the errors that the Persister
42
+ * would otherwise ignore when trying to save or load data. This is suitable for
43
+ * debugging persistence issues in a development environment, since v4.0.4.
40
44
  * @returns A reference to the new Persister object.
41
45
  * @example
42
46
  * This example creates a Persister object and persists the Store to a remote
@@ -66,4 +70,5 @@ export function createRemotePersister<Schemas extends OptionalSchemas>(
66
70
  loadUrl: string,
67
71
  saveUrl: string,
68
72
  autoLoadIntervalSeconds: number,
73
+ onIgnoredError?: (error: any) => void,
69
74
  ): Persister<Schemas>;
@@ -22,6 +22,8 @@ import {OptionalSchemas, Store} from '../store';
22
22
  * sqlite3: any,
23
23
  * db: any,
24
24
  * configOrStoreTableName?: DatabasePersisterConfig | string,
25
+ * onSqlCommand?: (sql: string, args?: any[]) => void,
26
+ * onIgnoredError?: (error: any) => void,
25
27
  * ): Persister;
26
28
  * ```
27
29
  *
@@ -47,6 +49,12 @@ import {OptionalSchemas, Store} from '../store';
47
49
  * @param configOrStoreTableName A DatabasePersisterConfig to configure the
48
50
  * persistence mode (or a string to set the `storeTableName` property of the
49
51
  * JSON serialization).
52
+ * @param onSqlCommand An optional handler called every time the Persister
53
+ * executes a SQL command or query. This is suitable for logging persistence
54
+ * behavior in a development environment, since v4.0.4.
55
+ * @param onIgnoredError An optional handler for the errors that the Persister
56
+ * would otherwise ignore when trying to save or load data. This is suitable for
57
+ * debugging persistence issues in a development environment, since v4.0.4.
50
58
  * @returns A reference to the new Persister object.
51
59
  * @example
52
60
  * This example creates a Persister object and persists the Store to a local
@@ -112,4 +120,6 @@ export function createSqliteWasmPersister<Schemas extends OptionalSchemas>(
112
120
  sqlite3: any,
113
121
  db: any,
114
122
  configOrStoreTableName?: DatabasePersisterConfig<Schemas> | string,
123
+ onSqlCommand?: (sql: string, args?: any[]) => void,
124
+ onIgnoredError?: (error: any) => void,
115
125
  ): Persister<Schemas>;
@@ -22,6 +22,8 @@ import {Database} from 'sqlite3';
22
22
  * store: Store,
23
23
  * db: Database,
24
24
  * configOrStoreTableName?: DatabasePersisterConfig | string,
25
+ * onSqlCommand?: (sql: string, args?: any[]) => void,
26
+ * onIgnoredError?: (error: any) => void,
25
27
  * ): Persister;
26
28
  * ```
27
29
  *
@@ -45,6 +47,12 @@ import {Database} from 'sqlite3';
45
47
  * @param configOrStoreTableName A DatabasePersisterConfig to configure the
46
48
  * persistence mode (or a string to set the `storeTableName` property of the
47
49
  * JSON serialization).
50
+ * @param onSqlCommand An optional handler called every time the Persister
51
+ * executes a SQL command or query. This is suitable for logging persistence
52
+ * behavior in a development environment, since v4.0.4.
53
+ * @param onIgnoredError An optional handler for the errors that the Persister
54
+ * would otherwise ignore when trying to save or load data. This is suitable for
55
+ * debugging persistence issues in a development environment, since v4.0.4.
48
56
  * @returns A reference to the new Persister object.
49
57
  * @example
50
58
  * This example creates a Persister object and persists the Store to a local
@@ -118,4 +126,6 @@ export function createSqlite3Persister<Schemas extends OptionalSchemas>(
118
126
  store: Store<Schemas>,
119
127
  db: Database,
120
128
  configOrStoreTableName?: DatabasePersisterConfig<Schemas> | string,
129
+ onSqlCommand?: (sql: string, args?: any[]) => void,
130
+ onIgnoredError?: (error: any) => void,
121
131
  ): Persister<Schemas>;
@@ -26,6 +26,7 @@ import {Doc as YDoc} from 'yjs';
26
26
  * store: Store,
27
27
  * yDoc: YDoc,
28
28
  * yMapName?: string,
29
+ * onIgnoredError?: (error: any) => void,
29
30
  * ): Persister;
30
31
  * ```
31
32
  *
@@ -35,6 +36,9 @@ import {Doc as YDoc} from 'yjs';
35
36
  * @param yDoc The Yjs document to persist the Store to.
36
37
  * @param yMapName The name of the Y.Map used inside the Yjs document to sync
37
38
  * the Store to (which otherwise will default to 'tinybase').
39
+ * @param onIgnoredError An optional handler for the errors that the Persister
40
+ * would otherwise ignore when trying to save or load data. This is suitable for
41
+ * debugging persistence issues in a development environment, since v4.0.4.
38
42
  * @returns A reference to the new Persister object.
39
43
  * @example
40
44
  * This example creates a Persister object and persists the Store to a Yjs
@@ -112,4 +116,5 @@ export function createYjsPersister<Schemas extends OptionalSchemas>(
112
116
  store: Store<Schemas>,
113
117
  yDoc: YDoc,
114
118
  yMapName?: string,
119
+ onIgnoredError?: (error: any) => void,
115
120
  ): Persister<Schemas>;
@@ -17,6 +17,7 @@
17
17
  * |persister-sqlite3|createSqlite3Persister|SQLite in Node, via [sqlite3](https://github.com/TryGhost/node-sqlite3)|
18
18
  * |persister-sqlite-wasm|createSqliteWasmPersister|SQLite in a browser, via [sqlite-wasm](https://github.com/tomayac/sqlite-wasm)|
19
19
  * |persister-cr-sqlite-wasm|createCrSqliteWasmPersister|SQLite CRDTs, via [cr-sqlite-wasm](https://github.com/vlcn-io/cr-sqlite)|
20
+ * |persister-expo-sqlite|createExpoSqlitePersister|SQLite in React Native, via [expo-sqlite](https://github.com/expo/expo/tree/main/packages/expo-sqlite)|
20
21
  * |persister-yjs|createYjsPersister|Yjs CRDTs, via [yjs](https://github.com/yjs/yjs)|
21
22
  * |persister-automerge|createSqliteWasmPersister|Automerge CRDTs, via [automerge-repo](https://github.com/automerge/automerge-repo)|
22
23
  *
@@ -593,13 +594,21 @@ export type DpcTabularValues = {
593
594
  * that changes are constantly synchronized (allowing basic state preservation
594
595
  * between browser tabs, for example). The framework has some basic provisions
595
596
  * to prevent race conditions - for example it will not attempt to save data if
596
- * it is currently loading it and vice-versa.
597
+ * it is currently loading it and vice-versa - and will sequentially schedule
598
+ * methods that could cause race conditions.
597
599
  *
598
- * Be aware, however, that the default implementations do not provide complex
599
- * synchronization heuristics and you should comprehensively test your
600
+ * That said, be aware that you should always comprehensively test your
600
601
  * persistence strategy to understand the opportunity for data loss (in the case
601
602
  * of trying to save data to a server under poor network conditions, for
602
603
  * example).
604
+ *
605
+ * To help debug such issues, since v4.0.4, the create methods for all Persister
606
+ * objects take an optional `onIgnoredError` argument. This is a handler for the
607
+ * errors that the Persister would otherwise ignore when trying to save or load
608
+ * data (such as when handling corrupted stored data). It's recommended you use
609
+ * this for debugging persistence issues, but only in a development environment.
610
+ * Database-based Persister objects also take an optional `onSqlCommand`
611
+ * argument for logging commands and queries made to the underlying database.
603
612
  * @example
604
613
  * This example creates a Store, persists it to the browser's session storage as
605
614
  * a JSON string, changes the persisted data, updates the Store from it, and
@@ -1134,6 +1143,7 @@ export interface Persister<in out Schemas extends OptionalSchemas> {
1134
1143
  * ) => Promise<void>,
1135
1144
  * addPersisterListener: (listener: PersisterListener) => ListeningHandle,
1136
1145
  * delPersisterListener: (listeningHandle: ListeningHandle) => void,
1146
+ * onIgnoredError?: (error: any) => void,
1137
1147
  * ): Persister;
1138
1148
  * ```
1139
1149
  *
@@ -1167,6 +1177,9 @@ export interface Persister<in out Schemas extends OptionalSchemas> {
1167
1177
  * @param delPersisterListener A function that will unregister the listener from
1168
1178
  * the underlying changes to the persistence layer. It receives whatever was
1169
1179
  * returned from your `addPersisterListener` implementation.
1180
+ * @param onIgnoredError An optional handler for the errors that the Persister
1181
+ * would otherwise ignore when trying to save or load data. This is suitable for
1182
+ * debugging persistence issues in a development environment, since v4.0.4.
1170
1183
  * @returns A reference to the new Persister object.
1171
1184
  * @example
1172
1185
  * This example creates a custom Persister object and persists the Store to a
@@ -1221,4 +1234,5 @@ export function createCustomPersister<
1221
1234
  listener: PersisterListener<Schemas>,
1222
1235
  ) => ListeningHandle,
1223
1236
  delPersisterListener: (listeningHandle: ListeningHandle) => void,
1237
+ onIgnoredError?: (error: any) => void,
1224
1238
  ): Persister<Schemas>;
@@ -1 +1 @@
1
- var t,e;t=this,e=function(t){"use strict";const e=t=>null==t,a=(t,a,s)=>e(t)?s?.():a(t),s=Object,n=s.keys,o=s.freeze,c=(t,e)=>a(t,(t=>t[e])),i=(t,a)=>!e(c(t,a)),r=(t,e)=>(delete t[e],t),d=(t,e)=>((t,e)=>t.map(e))(s.entries(t),(([t,a])=>e(a,t))),u=t=>n(t).length,y=t=>(t=>t instanceof s&&t.constructor==s)(t)&&0==u(t),f=(t,e)=>[t[e].t,t[e].v],l=(t,a,s,n)=>{const o=e(a)?t:((t,e,a)=>(i(t,e)||(t[e]={}),t[e]))(t,a);let c;return d(s,((t,e)=>{n(o,e,t)&&(c=1)})),d(o,((t,e)=>{i(s,e)||(r(o,e),c=1)})),!e(a)&&y(o)&&r(t,a),c};t.createAutomergePersister=(t,s,n="tinybase")=>(s.change((t=>t[n]={})),((t,i,u,h,v)=>{let p,g,w,A=0,L=0,m=0;const S=[],b=async t=>(2!=A&&(A=1,await C.schedule((async()=>{await t(),A=0}))),C),C={load:async(e,a)=>await b((async()=>{try{t.setContent(await i())}catch{t.setContent([e,a])}})),startAutoLoad:async(e={},a={})=>(C.stopAutoLoad(),await C.load(e,a),m=1,w=(t=>{const e=({doc:e})=>t((()=>f(e,n)));return s.on("change",e),e})((async(e,a)=>await b((async()=>{if(a)t.setTransactionChanges(a());else try{t.setContent(e?.()??await i())}catch{}})))),C),stopAutoLoad:()=>{return m&&(t=w,s.removeListener("change",t),w=void 0,m=0),C;var t},save:async o=>(1!=A&&(A=2,await C.schedule((async()=>{try{await(async(t,o)=>s.change((s=>((t,s,n,o)=>{((t,e)=>{y(t[e])&&(t[e]={t:{},v:{}})})(t,s);const[i,u]=f(t,s),h=()=>{v=1};let v=1;if(a(o?.(),(([t,s])=>{v=0,d(t,((t,s)=>v?0:e(t)?r(i,s):a(i[s],(s=>d(t,((t,n)=>v?0:e(t)?r(s,n):a(c(s,n),(a=>d(t,((t,s)=>e(t)?r(a,s):a[s]=t))),h)))),h))),d(s,((t,a)=>v?0:e(t)?r(u,a):u[a]=t))})),v){const[t,e]=n();l(i,void 0,t,((t,e,a)=>l(i,e,a,((t,e,a)=>l(t,e,a,((t,e,a)=>{if(c(t,e)!==a)return t[e]=a,1})))))),l(u,void 0,e,((t,e,a)=>{c(u,e)!==a&&(u[e]=a)}))}})(s,n,t,o))))(t.getContent,o)}catch{}A=0}))),C),startAutoSave:async()=>(await C.stopAutoSave().save(),p=t.addDidFinishTransactionListener(((t,e)=>{const[a,s]=e();y(a)&&y(s)||C.save((()=>[a,s]))})),C),stopAutoSave:()=>(a(p,t.delListener),C),schedule:async(...t)=>(((t,...e)=>{t.push(...e)})(S,...t),await(async()=>{if(!L){for(L=1;!e((t=S,g=t.shift()));)try{await g()}catch{}L=0}var t})(),C),getStore:()=>t,destroy:()=>C.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return o(C)})(t,(async()=>2==u(s.doc[n])?f(s.doc,n):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
+ var t,e;t=this,e=function(t){"use strict";const e=t=>null==t,a=(t,a,s)=>e(t)?s?.():a(t),s=Object,n=s.keys,o=s.freeze,c=(t,e)=>a(t,(t=>t[e])),i=(t,a)=>!e(c(t,a)),r=(t,e)=>(delete t[e],t),d=(t,e)=>((t,e)=>t.map(e))(s.entries(t),(([t,a])=>e(a,t))),u=t=>n(t).length,y=t=>(t=>t instanceof s&&t.constructor==s)(t)&&0==u(t),l=t=>new Map(t),f=(t,e)=>t?.get(e),h=(t,a,s)=>{return e(s)?(n=t,o=a,n?.delete(o),t):t?.set(a,s);var n,o},v=(t,e,a)=>{var s,n;return s=t,n=e,s?.has(n)||h(t,e,a()),f(t,e)},p=l(),g=l(),w=(t,e)=>[t[e].t,t[e].v],A=(t,a,s,n)=>{const o=e(a)?t:((t,e,a)=>(i(t,e)||(t[e]={}),t[e]))(t,a);let c;return d(s,((t,e)=>{n(o,e,t)&&(c=1)})),d(o,((t,e)=>{i(s,e)||(r(o,e),c=1)})),!e(a)&&y(o)&&r(t,a),c};t.createAutomergePersister=(t,s,n="tinybase",i)=>(s.change((t=>t[n]={})),((t,s,n,c,i,r,d=[])=>{let u,l,w,A=0,L=0;v(p,d,(()=>0)),v(g,d,(()=>[]));const m=async t=>(2!=A&&(A=1,await S.schedule((async()=>{await t(),A=0}))),S),S={load:async(e,a)=>await m((async()=>{try{t.setContent(await s())}catch{t.setContent([e,a])}})),startAutoLoad:async(e={},a={})=>(S.stopAutoLoad(),await S.load(e,a),L=1,w=c((async(e,a)=>{if(a){const e=a();await m((async()=>t.setTransactionChanges(e)))}else await m((async()=>{try{t.setContent(e?.()??await s())}catch(t){r?.(t)}}))})),S),stopAutoLoad:()=>(L&&(i(w),w=void 0,L=0),S),save:async e=>(1!=A&&(A=2,await S.schedule((async()=>{try{await n(t.getContent,e)}catch(t){r?.(t)}A=0}))),S),startAutoSave:async()=>(await S.stopAutoSave().save(),u=t.addDidFinishTransactionListener(((t,e)=>{const[a,s]=e();y(a)&&y(s)||S.save((()=>[a,s]))})),S),stopAutoSave:()=>(a(u,t.delListener),S),schedule:async(...t)=>(((t,...e)=>{t.push(...e)})(f(g,d),...t),await(async()=>{if(!f(p,d)){for(h(p,d,1);!e((t=f(g,d),l=t.shift()));)try{await l()}catch(t){r?.(t)}h(p,d,0)}var t})(),S),getStore:()=>t,destroy:()=>S.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return o(S)})(t,(async()=>2==u(s.doc[n])?w(s.doc,n):void 0),(async(t,o)=>s.change((s=>((t,s,n,o)=>{((t,e)=>{y(t[e])&&(t[e]={t:{},v:{}})})(t,s);const[i,u]=w(t,s),l=()=>{f=1};let f=1;if(a(o?.(),(([t,s])=>{f=0,d(t,((t,s)=>f?0:e(t)?r(i,s):a(i[s],(s=>d(t,((t,n)=>f?0:e(t)?r(s,n):a(c(s,n),(a=>d(t,((t,s)=>e(t)?r(a,s):a[s]=t))),l)))),l))),d(s,((t,a)=>f?0:e(t)?r(u,a):u[a]=t))})),f){const[t,e]=n();A(i,void 0,t,((t,e,a)=>A(i,e,a,((t,e,a)=>A(t,e,a,((t,e,a)=>{if(c(t,e)!==a)return t[e]=a,1})))))),A(u,void 0,e,((t,e,a)=>{c(u,e)!==a&&(u[e]=a)}))}})(s,n,t,o)))),(t=>{const e=({doc:e})=>t((()=>w(e,n)));return s.on("change",e),e}),(t=>{s.removeListener("change",t)}),i))},"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 t,e;t=this,e=function(t){"use strict";const e=(t,e)=>t instanceof e,a=t=>null==t,s=Object,n=s.keys,o=s.freeze,r=t=>(t=>e(t,s)&&t.constructor==s)(t)&&0==(t=>n(t).length)(t),i=JSON.parse,c="storage",d=globalThis.window,y=(t,n,y)=>((t,u,l,f,h)=>{let p,v,w,g=0,S=0,A=0;const L=[],m=async t=>(2!=g&&(g=1,await T.schedule((async()=>{await t(),g=0}))),T),T={load:async(e,a)=>await m((async()=>{try{t.setContent(await u())}catch{t.setContent([e,a])}})),startAutoLoad:async(e={},a={})=>(T.stopAutoLoad(),await T.load(e,a),A=1,w=(t=>{const e=e=>{e.storageArea===y&&e.key===n&&t((()=>i(e.newValue)))};return d.addEventListener(c,e),e})((async(e,a)=>await m((async()=>{if(a)t.setTransactionChanges(a());else try{t.setContent(e?.()??await u())}catch{}})))),T),stopAutoLoad:()=>{return A&&(t=w,d.removeEventListener(c,t),w=void 0,A=0),T;var t},save:async a=>(1!=g&&(g=2,await T.schedule((async()=>{try{await(async t=>{return y.setItem(n,(a=t(),JSON.stringify(a,((t,a)=>e(a,Map)?s.fromEntries([...a]):a))));var a})(t.getContent)}catch{}g=0}))),T),startAutoSave:async()=>(await T.stopAutoSave().save(),p=t.addDidFinishTransactionListener(((t,e)=>{const[a,s]=e();r(a)&&r(s)||T.save((()=>[a,s]))})),T),stopAutoSave:()=>{var e,s;return e=p,s=t.delListener,a(e)||s(e),T},schedule:async(...t)=>(((t,...e)=>{t.push(...e)})(L,...t),await(async()=>{if(!S){for(S=1;!a((t=L,v=t.shift()));)try{await v()}catch{}S=0}var t})(),T),getStore:()=>t,destroy:()=>T.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return o(T)})(t,(async()=>i(y.getItem(n))));t.createLocalPersister=(t,e)=>y(t,e,localStorage),t.createSessionPersister=(t,e)=>y(t,e,sessionStorage)},"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterBrowser={});
1
+ var t,e;t=this,e=function(t){"use strict";const e=(t,e)=>t instanceof e,a=t=>null==t,s=Object,n=s.keys,o=s.freeze,r=t=>(t=>e(t,s)&&t.constructor==s)(t)&&0==(t=>n(t).length)(t),i=JSON.parse,c=t=>new Map(t),d=(t,e)=>t?.get(e),y=(t,e,s)=>{return a(s)?(n=t,o=e,n?.delete(o),t):t?.set(e,s);var n,o},u=(t,e,a)=>{var s,n;return s=t,n=e,s?.has(n)||y(t,e,a()),d(t,e)},l=c(),f=c(),w="storage",h=globalThis.window,p=(t,n,c,p)=>((t,e,s,n,i,c,w=[])=>{let h,p,v,g=0,S=0;u(l,w,(()=>0)),u(f,w,(()=>[]));const A=async t=>(2!=g&&(g=1,await L.schedule((async()=>{await t(),g=0}))),L),L={load:async(a,s)=>await A((async()=>{try{t.setContent(await e())}catch{t.setContent([a,s])}})),startAutoLoad:async(a={},s={})=>(L.stopAutoLoad(),await L.load(a,s),S=1,v=n((async(a,s)=>{if(s){const e=s();await A((async()=>t.setTransactionChanges(e)))}else await A((async()=>{try{t.setContent(a?.()??await e())}catch(t){c?.(t)}}))})),L),stopAutoLoad:()=>(S&&(i(v),v=void 0,S=0),L),save:async e=>(1!=g&&(g=2,await L.schedule((async()=>{try{await s(t.getContent,e)}catch(t){c?.(t)}g=0}))),L),startAutoSave:async()=>(await L.stopAutoSave().save(),h=t.addDidFinishTransactionListener(((t,e)=>{const[a,s]=e();r(a)&&r(s)||L.save((()=>[a,s]))})),L),stopAutoSave:()=>{var e,s;return e=h,s=t.delListener,a(e)||s(e),L},schedule:async(...t)=>(((t,...e)=>{t.push(...e)})(d(f,w),...t),await(async()=>{if(!d(l,w)){for(y(l,w,1);!a((t=d(f,w),p=t.shift()));)try{await p()}catch(t){c?.(t)}y(l,w,0)}var t})(),L),getStore:()=>t,destroy:()=>L.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return o(L)})(t,(async()=>i(c.getItem(n))),(async t=>{return c.setItem(n,(a=t(),JSON.stringify(a,((t,a)=>e(a,Map)?s.fromEntries([...a]):a))));var a}),(t=>{const e=e=>{e.storageArea===c&&e.key===n&&t((()=>i(e.newValue)))};return h.addEventListener(w,e),e}),(t=>h.removeEventListener(w,t)),p);t.createLocalPersister=(t,e,a)=>p(t,e,localStorage,a),t.createSessionPersister=(t,e,a)=>p(t,e,sessionStorage,a)},"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterBrowser={});
@@ -1 +1 @@
1
- var a,t;a=this,t=function(a){"use strict";const t=a=>typeof a,e="tinybase",s=",",n=t(""),i=(a,t)=>a.repeat(t),o=(a,t="")=>a.join(t),c=(a,t)=>a.map(t),r=a=>a.length,l=a=>0==r(a),y=(a,t)=>a.filter(t),w=(a,t,e)=>a.slice(t,e),d=(a,...t)=>a.push(...t),u=Promise,E=(a,t)=>a instanceof t,f=a=>null==a,p=(a,t,e)=>f(a)?e?.():t(a),T=a=>t(a)==n,m=async a=>u.all(a),v=(a,t)=>a?.has(t)??!1,A=a=>[...a?.values()??[]],L=(a,t)=>a?.delete(t),h=Object,O=h.keys,R=h.freeze,C=(a=[])=>h.fromEntries(a),S=(...a)=>h.assign({},...a),N=(a,t)=>c(h.entries(a),(([a,e])=>t(e,a))),b=a=>h.values(a),g=a=>r(O(a)),D=a=>(a=>E(a,h)&&a.constructor==h)(a)&&0==g(a),I=a=>new Map(a),F=a=>[...a?.keys()??[]],M=(a,t)=>a?.get(t),$=(a,t)=>c([...a?.entries()??[]],(([a,e])=>t(e,a))),P=(a,t,e)=>f(e)?(L(a,t),a):a?.set(t,e),_=(a,t,e,s=P)=>(N(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!f(((a,t)=>p(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),W=a=>new Set(Array.isArray(a)||f(a)?a:[a]),x=(a,t)=>a?.add(t),B="_",j="_id",H=a=>`"${a.replace(/"/g,'""')}"`,U="FROM pragma_table_",k="WHERE",q=(a,t)=>{const e=I();return[async()=>_(e,C(await m(c(await a("SELECT name "+U+"list WHERE schema='main'AND type='table'AND name IN("+Y(t)+")",t),(async({name:t})=>[t,C(c(await a("SELECT name,type "+U+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,s)=>{return P(e,t,_((o=I,v(n=e,i=t)||P(n,i,o()),M(n,i)),s,((a,t,e)=>{e!=M(a,t)&&P(a,t,e)}),((a,t)=>P(a,t))));var n,i,o}),((a,t)=>P(e,t))),async(t,s)=>((a,t)=>!f(M(M(e,a),t)))(t,s)?C(y(c(await a("SELECT*FROM"+H(t)),(a=>{return[a[s],(t={...a},e=s,delete t[e],t)];var t,e})),(([a,t])=>!f(a)&&!D(t)))):{},async(t,n,i,r,w,u=!1)=>{const E=W();N(i??{},(a=>c(O(a??{}),(a=>x(E,a)))));const p=A(E);if(!u&&w&&l(p)&&v(e,t))return await a("DROP TABLE"+H(t)),void P(e,t);if(l(p)||v(e,t)){const s=M(e,t),i=W(F(s));await m([...c(p,(async e=>{L(i,e)||(await a(`ALTER TABLE${H(t)}ADD${H(e)}`),P(s,e,""))})),...!u&&r?c(A(i),(async e=>{e!=n&&(await a(`ALTER TABLE${H(t)}DROP${H(e)}`),P(s,e))})):[]])}else await a(`CREATE TABLE${H(t)}(${H(n)} PRIMARY KEY ON CONFLICT REPLACE${o(c(p,(a=>s+H(a))))});`),P(e,t,I([[n,""],...c(p,(a=>[a,""]))]));if(u)f(i)?await a("DELETE FROM"+H(t)+"WHERE 1"):await m(N(i,(async(e,s)=>{f(e)?await a("DELETE FROM"+H(t)+k+H(n)+"=?",[s]):l(p)||await J(a,t,n,O(e),[s,...b(e)])})));else if(l(p))v(e,t)&&await a("DELETE FROM"+H(t)+"WHERE 1");else{const s=y(F(M(e,t)),(a=>a!=n)),o=[],r=[];N(i??{},((a,t)=>{d(o,t,...c(s,(t=>a?.[t]))),d(r,t)})),await J(a,t,n,s,o),await a("DELETE FROM"+H(t)+k+H(n)+"NOT IN("+Y(r)+")",r)}}]},J=async(a,t,e,n,l)=>await a("INSERT INTO"+H(t)+"("+H(e)+o(c(n,(a=>s+H(a))))+")VALUES"+i(`,(?${i(",?",r(n))})`,r(l)/(r(n)+1)).substring(1)+"ON CONFLICT("+H(e)+")DO UPDATE SET"+o(c(n,(a=>H(a)+"=excluded."+H(a))),s),l),Y=a=>o(c(a,(()=>"?")),s),z=JSON.parse,K=(a,t,e,s,n)=>{let i,o,c,r=0,l=0,y=0;const w=[],u=async a=>(2!=r&&(r=1,await E.schedule((async()=>{await a(),r=0}))),E),E={load:async(e,s)=>await u((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(E.stopAutoLoad(),await E.load(e,n),y=1,c=s((async(e,s)=>await u((async()=>{if(s)a.setTransactionChanges(s());else try{a.setContent(e?.()??await t())}catch{}})))),E),stopAutoLoad:()=>(y&&(n(c),c=void 0,y=0),E),save:async t=>(1!=r&&(r=2,await E.schedule((async()=>{try{await e(a.getContent,t)}catch{}r=0}))),E),startAutoSave:async()=>(await E.stopAutoSave().save(),i=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();D(e)&&D(s)||E.save((()=>[e,s]))})),E),stopAutoSave:()=>(p(i,a.delListener),E),schedule:async(...a)=>(d(w,...a),await(async()=>{if(!l){for(l=1;!f((a=w,o=a.shift()));)try{await o()}catch{}l=0}var a})(),E),getStore:()=>a,destroy:()=>E.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return R(E)},V="store",G=(a,t,e,s,[n],i)=>{const[o,c,r]=q(t,i),l=K(a,(async()=>(await o(),z((await c(n,j))[B]?.[V]))),(async a=>l.schedule(o,(async()=>{var t;await r(n,j,{[B]:{[V]:(t=a(),JSON.stringify(t,((a,t)=>E(t,Map)?h.fromEntries([...t]):t)))}},!0,!0)}))),e,s);return l},Q=(a,t,e,s,[n,i,[o,c,r]],l)=>{const[w,d,u]=q(t,l),E=async(a,t)=>await m($(i,(async([e,s,n,i],o)=>{const c=a[o];t&&void 0===c||await u(e,s,c,n,i,t)}))),p=async(a,t)=>c?await u(r,j,{[B]:a},!0,!0,t):null;return K(a,(async()=>{await w();const a=await(async()=>C(y(await m($(n,(async([a,t],e)=>[a,await d(e,t)]))),(a=>!D(a[1])))))(),t=await(async()=>o?(await d(r,j))[B]:{})();return D(a)&&f(t)?void 0:[a,t]}),(async(a,t)=>{if(await w(),f(t)){const[t,e]=a();await E(t),await p(e)}else{const[a,e]=t();await E(a,!0),await p(e,!0)}}),e,s)},X="json",Z="autoLoadIntervalSeconds",aa="rowIdColumnName",ta="tableId",ea="tableName",sa={mode:X,[Z]:1},na={load:0,save:0,[ea]:e+"_values"},ia=(a,t,e,s)=>{const n=I();return N(a,((a,i)=>{const o=w(b(S(t,T(a)?{[e]:a}:a)),0,g(t));f(o[0])||s(i,o[0])||P(n,i,o)})),n},oa="pragma ",ca="data_version",ra="schema_version",la=(a,t,s,n,i,o)=>{let c,r;const[l,y,d,u]=(a=>{const t=(a=>S(sa,T(a)?{storeTableName:a}:a??{}))(a),s=t[Z];if(t.mode==X){const{storeTableName:a=e}=t;return[1,s,[a],W(a)]}const{tables:{load:n={},save:i={}}={},values:o={}}=t,c=w(b(S(na,o)),0,g(na)),r=c[2],l=W(r);return[0,s,[ia(n,{[ta]:null,[aa]:j},ta,(a=>x(l,a)&&a==r)),ia(i,{[ea]:null,[aa]:j,deleteEmptyColumns:0,deleteEmptyTable:0},ea,((a,t)=>x(l,t)&&t==r)),c],l]})(t);return(l?G:Q)(a,o?async(a,t)=>(o(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(oa+ca))[0][ca],e=(await s(oa+ra))[0][ra];t==(c??=t)&&e==(r??=e)||(a(),c=t,r=e)}catch{}}),1e3*y),n((t=>u.has(t)?a():0))]),(([a,t])=>{clearInterval(a),c=r=null,i(t)}),d,A(u))};a.createCrSqliteWasmPersister=(a,t,e,s)=>la(a,e,(async(a,e=[])=>await t.execO(a,e)),(a=>t.onUpdate(((t,e,s)=>a(s)))),(a=>a()),s)},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((a="undefined"!=typeof globalThis?globalThis:a||self).TinyBasePersisterCrSqliteWasm={});
1
+ var a,t;a=this,t=function(a){"use strict";const t=a=>typeof a,e="tinybase",s=",",n=t(""),i=(a,t)=>a.repeat(t),c=(a,t="")=>a.join(t),o=(a,t)=>a.map(t),r=a=>a.length,l=a=>0==r(a),y=(a,t)=>a.filter(t),w=(a,t,e)=>a.slice(t,e),E=(a,...t)=>a.push(...t),u=Promise,d=(a,t)=>a instanceof t,f=a=>null==a,p=(a,t,e)=>f(a)?e?.():t(a),T=a=>t(a)==n,m=async a=>u.all(a),v=(a,t)=>a?.has(t)??!1,A=a=>[...a?.values()??[]],L=(a,t)=>a?.delete(t),h=Object,N=h.keys,O=h.freeze,R=(a=[])=>h.fromEntries(a),C=(...a)=>h.assign({},...a),S=(a,t)=>o(h.entries(a),(([a,e])=>t(e,a))),b=a=>h.values(a),g=a=>r(N(a)),D=a=>(a=>d(a,h)&&a.constructor==h)(a)&&0==g(a),I=a=>new Map(a),F=a=>[...a?.keys()??[]],M=(a,t)=>a?.get(t),$=(a,t)=>o([...a?.entries()??[]],(([a,e])=>t(e,a))),P=(a,t,e)=>f(e)?(L(a,t),a):a?.set(t,e),_=(a,t,e)=>(v(a,t)||P(a,t,e()),M(a,t)),B=(a,t,e,s=P)=>(S(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!f(((a,t)=>p(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),W=a=>new Set(Array.isArray(a)||f(a)?a:[a]),x=(a,t)=>a?.add(t),j="_",H="_id",U=a=>`"${a.replace(/"/g,'""')}"`,k="FROM pragma_table_",q="WHERE",J=(a,t,e)=>{const n=I();return[async()=>B(n,R(await m(o(await a("SELECT name "+k+"list WHERE schema='main'AND type='table'AND name IN("+z(t)+")",t),(async({name:t})=>[t,R(o(await a("SELECT name,type "+k+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,e)=>P(n,t,B(_(n,t,I),e,((a,t,e)=>{e!=M(a,t)&&P(a,t,e)}),((a,t)=>P(a,t))))),((a,t)=>P(n,t))),async(t,e)=>((a,t)=>!f(M(M(n,a),t)))(t,e)?R(y(o(await a("SELECT*FROM"+U(t)),(a=>{return[a[e],(t={...a},s=e,delete t[s],t)];var t,s})),(([a,t])=>!f(a)&&!D(t)))):{},async(t,e,i,r,w,u=!1)=>{const d=W();S(i??{},(a=>o(N(a??{}),(a=>x(d,a)))));const p=A(d);if(!u&&w&&l(p)&&v(n,t))return await a("DROP TABLE"+U(t)),void P(n,t);if(l(p)||v(n,t)){const s=M(n,t),i=W(F(s));await m([...o(p,(async e=>{L(i,e)||(await a(`ALTER TABLE${U(t)}ADD${U(e)}`),P(s,e,""))})),...!u&&r?o(A(i),(async n=>{n!=e&&(await a(`ALTER TABLE${U(t)}DROP${U(n)}`),P(s,n))})):[]])}else await a(`CREATE TABLE${U(t)}(${U(e)} PRIMARY KEY ON CONFLICT REPLACE${c(o(p,(a=>s+U(a))))});`),P(n,t,I([[e,""],...o(p,(a=>[a,""]))]));if(u)f(i)?await a("DELETE FROM"+U(t)+"WHERE 1"):await m(S(i,(async(s,n)=>{f(s)?await a("DELETE FROM"+U(t)+q+U(e)+"=?",[n]):l(p)||await Y(a,t,e,N(s),[n,...b(s)])})));else if(l(p))v(n,t)&&await a("DELETE FROM"+U(t)+"WHERE 1");else{const s=y(F(M(n,t)),(a=>a!=e)),c=[],r=[];S(i??{},((a,t)=>{E(c,t,...o(s,(t=>a?.[t]))),E(r,t)})),await Y(a,t,e,s,c),await a("DELETE FROM"+U(t)+q+U(e)+"NOT IN("+z(r)+")",r)}},async t=>{let s;await a("BEGIN");try{s=await t()}catch(a){e?.(a)}return await a("END"),s}]},Y=async(a,t,e,n,l)=>await a("INSERT INTO"+U(t)+"("+U(e)+c(o(n,(a=>s+U(a))))+")VALUES"+i(`,(?${i(",?",r(n))})`,r(l)/(r(n)+1)).substring(1)+"ON CONFLICT("+U(e)+")DO UPDATE SET"+c(o(n,(a=>U(a)+"=excluded."+U(a))),s),l),z=a=>c(o(a,(()=>"?")),s),G=JSON.parse,K=I(),V=I(),Q=(a,t,e,s,n,i,c=[])=>{let o,r,l,y=0,w=0;_(K,c,(()=>0)),_(V,c,(()=>[]));const u=async a=>(2!=y&&(y=1,await d.schedule((async()=>{await a(),y=0}))),d),d={load:async(e,s)=>await u((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(d.stopAutoLoad(),await d.load(e,n),w=1,l=s((async(e,s)=>{if(s){const t=s();await u((async()=>a.setTransactionChanges(t)))}else await u((async()=>{try{a.setContent(e?.()??await t())}catch(a){i?.(a)}}))})),d),stopAutoLoad:()=>(w&&(n(l),l=void 0,w=0),d),save:async t=>(1!=y&&(y=2,await d.schedule((async()=>{try{await e(a.getContent,t)}catch(a){i?.(a)}y=0}))),d),startAutoSave:async()=>(await d.stopAutoSave().save(),o=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();D(e)&&D(s)||d.save((()=>[e,s]))})),d),stopAutoSave:()=>(p(o,a.delListener),d),schedule:async(...a)=>(E(M(V,c),...a),await(async()=>{if(!M(K,c)){for(P(K,c,1);!f((a=M(V,c),r=a.shift()));)try{await r()}catch(a){i?.(a)}P(K,c,0)}var a})(),d),getStore:()=>a,destroy:()=>d.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return O(d)},X="store",Z=(a,t,e,s,n,[i],c,o)=>{const[r,l,y,w]=J(t,c,n);return Q(a,(async()=>await w((async()=>(await r(),G((await l(i,H))[j]?.[X]??"null"))))),(async a=>await w((async()=>{var t;await r(),await y(i,H,{[j]:{[X]:(t=a()??null,JSON.stringify(t,((a,t)=>d(t,Map)?h.fromEntries([...t]):t)))}},!0,!0)}))),e,s,n,o)},aa=(a,t,e,s,n,[i,c,[o,r,l]],w,E)=>{const[u,d,p,T]=J(t,w,n),v=async(a,t)=>await m($(c,(async([e,s,n,i],c)=>{const o=a[c];t&&void 0===o||await p(e,s,o,n,i,t)}))),A=async(a,t)=>r?await p(l,H,{[j]:a},!0,!0,t):null;return Q(a,(async()=>await T((async()=>{await u();const a=await(async()=>R(y(await m($(i,(async([a,t],e)=>[a,await d(e,t)]))),(a=>!D(a[1])))))(),t=await(async()=>o?(await d(l,H))[j]:{})();return D(a)&&f(t)?void 0:[a,t]}))),(async(a,t)=>await T((async()=>{if(await u(),f(t)){const[t,e]=a();await v(t),await A(e)}else{const[a,e]=t();await v(a,!0),await A(e,!0)}}))),e,s,n,E)},ta="json",ea="autoLoadIntervalSeconds",sa="rowIdColumnName",na="tableId",ia="tableName",ca={mode:ta,[ea]:1},oa={load:0,save:0,[ia]:e+"_values"},ra=(a,t,e,s)=>{const n=I();return S(a,((a,i)=>{const c=w(b(C(t,T(a)?{[e]:a}:a)),0,g(t));f(c[0])||s(i,c[0])||P(n,i,c)})),n},la="pragma ",ya="data_version",wa="schema_version",Ea=(a,t,s,n,i,c,o,r)=>{let l,y;const[E,u,d,f]=(a=>{const t=(a=>C(ca,T(a)?{storeTableName:a}:a??{}))(a),s=t[ea];if(t.mode==ta){const{storeTableName:a=e}=t;return[1,s,[a],W(a)]}const{tables:{load:n={},save:i={}}={},values:c={}}=t,o=w(b(C(oa,c)),0,g(oa)),r=o[2],l=W(r);return[0,s,[ra(n,{[na]:null,[sa]:H},na,(a=>x(l,a)&&a==r)),ra(i,{[ia]:null,[sa]:H,deleteEmptyColumns:0,deleteEmptyTable:0},ia,((a,t)=>x(l,t)&&t==r)),o],l]})(t);return(E?Z:aa)(a,c?async(a,t)=>(c(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(la+ya))[0][ya],e=(await s(la+wa))[0][wa];t==(l??=t)&&e==(y??=e)||(a(),l=t,y=e)}catch{}}),1e3*u),n((t=>f.has(t)?a():0))]),(([a,t])=>{clearInterval(a),l=y=null,i(t)}),o,d,A(f),r)};a.createCrSqliteWasmPersister=(a,t,e,s,n)=>Ea(a,e,(async(a,e=[])=>await t.execO(a,e)),(a=>t.onUpdate(((t,e,s)=>a(s)))),(a=>a()),s,n,t)},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((a="undefined"!=typeof globalThis?globalThis:a||self).TinyBasePersisterCrSqliteWasm={});
@@ -1 +1 @@
1
- var a,t;a=this,t=function(a){"use strict";const t=a=>typeof a,e="tinybase",s=",",n=t(""),i=(a,t)=>a.repeat(t),o=(a,t="")=>a.join(t),c=(a,t)=>a.map(t),r=a=>a.length,l=a=>0==r(a),y=(a,t)=>a.filter(t),w=(a,t,e)=>a.slice(t,e),E=(a,...t)=>a.push(...t),d=Promise,u=(a,t)=>a instanceof t,f=a=>null==a,p=(a,t,e)=>f(a)?e?.():t(a),T=a=>t(a)==n,m=async a=>d.all(a),v=(a,t)=>a?.has(t)??!1,A=a=>[...a?.values()??[]],L=(a,t)=>a?.delete(t),h=Object,R=h.keys,N=h.freeze,O=(a=[])=>h.fromEntries(a),S=(...a)=>h.assign({},...a),C=(a,t)=>c(h.entries(a),(([a,e])=>t(e,a))),b=a=>h.values(a),g=a=>r(R(a)),D=a=>(a=>u(a,h)&&a.constructor==h)(a)&&0==g(a),I=a=>new Map(a),F=a=>[...a?.keys()??[]],M=(a,t)=>a?.get(t),$=(a,t)=>c([...a?.entries()??[]],(([a,e])=>t(e,a))),P=(a,t,e)=>f(e)?(L(a,t),a):a?.set(t,e),x=(a,t,e,s=P)=>(C(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!f(((a,t)=>p(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),_=a=>new Set(Array.isArray(a)||f(a)?a:[a]),B=(a,t)=>a?.add(t),j="_",H="_id",W=a=>`"${a.replace(/"/g,'""')}"`,q="FROM pragma_table_",k="WHERE",J=(a,t)=>{const e=I();return[async()=>x(e,O(await m(c(await a("SELECT name "+q+"list WHERE schema='main'AND type='table'AND name IN("+Y(t)+")",t),(async({name:t})=>[t,O(c(await a("SELECT name,type "+q+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,s)=>{return P(e,t,x((o=I,v(n=e,i=t)||P(n,i,o()),M(n,i)),s,((a,t,e)=>{e!=M(a,t)&&P(a,t,e)}),((a,t)=>P(a,t))));var n,i,o}),((a,t)=>P(e,t))),async(t,s)=>((a,t)=>!f(M(M(e,a),t)))(t,s)?O(y(c(await a("SELECT*FROM"+W(t)),(a=>{return[a[s],(t={...a},e=s,delete t[e],t)];var t,e})),(([a,t])=>!f(a)&&!D(t)))):{},async(t,n,i,r,w,d=!1)=>{const u=_();C(i??{},(a=>c(R(a??{}),(a=>B(u,a)))));const p=A(u);if(!d&&w&&l(p)&&v(e,t))return await a("DROP TABLE"+W(t)),void P(e,t);if(l(p)||v(e,t)){const s=M(e,t),i=_(F(s));await m([...c(p,(async e=>{L(i,e)||(await a(`ALTER TABLE${W(t)}ADD${W(e)}`),P(s,e,""))})),...!d&&r?c(A(i),(async e=>{e!=n&&(await a(`ALTER TABLE${W(t)}DROP${W(e)}`),P(s,e))})):[]])}else await a(`CREATE TABLE${W(t)}(${W(n)} PRIMARY KEY ON CONFLICT REPLACE${o(c(p,(a=>s+W(a))))});`),P(e,t,I([[n,""],...c(p,(a=>[a,""]))]));if(d)f(i)?await a("DELETE FROM"+W(t)+"WHERE 1"):await m(C(i,(async(e,s)=>{f(e)?await a("DELETE FROM"+W(t)+k+W(n)+"=?",[s]):l(p)||await U(a,t,n,R(e),[s,...b(e)])})));else if(l(p))v(e,t)&&await a("DELETE FROM"+W(t)+"WHERE 1");else{const s=y(F(M(e,t)),(a=>a!=n)),o=[],r=[];C(i??{},((a,t)=>{E(o,t,...c(s,(t=>a?.[t]))),E(r,t)})),await U(a,t,n,s,o),await a("DELETE FROM"+W(t)+k+W(n)+"NOT IN("+Y(r)+")",r)}}]},U=async(a,t,e,n,l)=>await a("INSERT INTO"+W(t)+"("+W(e)+o(c(n,(a=>s+W(a))))+")VALUES"+i(`,(?${i(",?",r(n))})`,r(l)/(r(n)+1)).substring(1)+"ON CONFLICT("+W(e)+")DO UPDATE SET"+o(c(n,(a=>W(a)+"=excluded."+W(a))),s),l),Y=a=>o(c(a,(()=>"?")),s),z=JSON.parse,K=(a,t,e,s,n)=>{let i,o,c,r=0,l=0,y=0;const w=[],d=async a=>(2!=r&&(r=1,await u.schedule((async()=>{await a(),r=0}))),u),u={load:async(e,s)=>await d((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(u.stopAutoLoad(),await u.load(e,n),y=1,c=s((async(e,s)=>await d((async()=>{if(s)a.setTransactionChanges(s());else try{a.setContent(e?.()??await t())}catch{}})))),u),stopAutoLoad:()=>(y&&(n(c),c=void 0,y=0),u),save:async t=>(1!=r&&(r=2,await u.schedule((async()=>{try{await e(a.getContent,t)}catch{}r=0}))),u),startAutoSave:async()=>(await u.stopAutoSave().save(),i=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();D(e)&&D(s)||u.save((()=>[e,s]))})),u),stopAutoSave:()=>(p(i,a.delListener),u),schedule:async(...a)=>(E(w,...a),await(async()=>{if(!l){for(l=1;!f((a=w,o=a.shift()));)try{await o()}catch{}l=0}var a})(),u),getStore:()=>a,destroy:()=>u.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return N(u)},V="store",G=(a,t,e,s,[n],i)=>{const[o,c,r]=J(t,i),l=K(a,(async()=>(await o(),z((await c(n,H))[j]?.[V]))),(async a=>l.schedule(o,(async()=>{var t;await r(n,H,{[j]:{[V]:(t=a(),JSON.stringify(t,((a,t)=>u(t,Map)?h.fromEntries([...t]):t)))}},!0,!0)}))),e,s);return l},Q=(a,t,e,s,[n,i,[o,c,r]],l)=>{const[w,E,d]=J(t,l),u=async(a,t)=>await m($(i,(async([e,s,n,i],o)=>{const c=a[o];t&&void 0===c||await d(e,s,c,n,i,t)}))),p=async(a,t)=>c?await d(r,H,{[j]:a},!0,!0,t):null;return K(a,(async()=>{await w();const a=await(async()=>O(y(await m($(n,(async([a,t],e)=>[a,await E(e,t)]))),(a=>!D(a[1])))))(),t=await(async()=>o?(await E(r,H))[j]:{})();return D(a)&&f(t)?void 0:[a,t]}),(async(a,t)=>{if(await w(),f(t)){const[t,e]=a();await u(t),await p(e)}else{const[a,e]=t();await u(a,!0),await p(e,!0)}}),e,s)},X="json",Z="autoLoadIntervalSeconds",aa="rowIdColumnName",ta="tableId",ea="tableName",sa={mode:X,[Z]:1},na={load:0,save:0,[ea]:e+"_values"},ia=(a,t,e,s)=>{const n=I();return C(a,((a,i)=>{const o=w(b(S(t,T(a)?{[e]:a}:a)),0,g(t));f(o[0])||s(i,o[0])||P(n,i,o)})),n},oa="pragma ",ca="data_version",ra="schema_version",la=(a,t,s,n,i,o)=>{let c,r;const[l,y,E,d]=(a=>{const t=(a=>S(sa,T(a)?{storeTableName:a}:a??{}))(a),s=t[Z];if(t.mode==X){const{storeTableName:a=e}=t;return[1,s,[a],_(a)]}const{tables:{load:n={},save:i={}}={},values:o={}}=t,c=w(b(S(na,o)),0,g(na)),r=c[2],l=_(r);return[0,s,[ia(n,{[ta]:null,[aa]:H},ta,(a=>B(l,a)&&a==r)),ia(i,{[ea]:null,[aa]:H,deleteEmptyColumns:0,deleteEmptyTable:0},ea,((a,t)=>B(l,t)&&t==r)),c],l]})(t);return(l?G:Q)(a,o?async(a,t)=>(o(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(oa+ca))[0][ca],e=(await s(oa+ra))[0][ra];t==(c??=t)&&e==(r??=e)||(a(),c=t,r=e)}catch{}}),1e3*y),n((t=>d.has(t)?a():0))]),(([a,t])=>{clearInterval(a),c=r=null,i(t)}),E,A(d))};a.createExpoSqlitePersister=(a,t,e,s)=>la(a,e,(async(a,e=[])=>(await t.execAsync([{sql:a,args:e}],!1))[0].rows),(a=>t.onDatabaseChange((({tableName:t})=>a(t)))),(a=>a.remove()),s)},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((a="undefined"!=typeof globalThis?globalThis:a||self).TinyBasePersisterExpoSqlite={});
1
+ var a,t;a=this,t=function(a){"use strict";const t=a=>typeof a,e="tinybase",s=",",n=t(""),i=(a,t)=>a.repeat(t),o=(a,t="")=>a.join(t),c=(a,t)=>a.map(t),r=a=>a.length,l=a=>0==r(a),y=(a,t)=>a.filter(t),w=(a,t,e)=>a.slice(t,e),E=(a,...t)=>a.push(...t),u=Promise,d=(a,t)=>a instanceof t,f=a=>null==a,p=(a,t,e)=>f(a)?e?.():t(a),T=a=>t(a)==n,m=async a=>u.all(a),v=(a,t)=>a?.has(t)??!1,A=a=>[...a?.values()??[]],L=(a,t)=>a?.delete(t),h=Object,N=h.keys,R=h.freeze,O=(a=[])=>h.fromEntries(a),S=(...a)=>h.assign({},...a),C=(a,t)=>c(h.entries(a),(([a,e])=>t(e,a))),b=a=>h.values(a),g=a=>r(N(a)),D=a=>(a=>d(a,h)&&a.constructor==h)(a)&&0==g(a),I=a=>new Map(a),F=a=>[...a?.keys()??[]],M=(a,t)=>a?.get(t),$=(a,t)=>c([...a?.entries()??[]],(([a,e])=>t(e,a))),P=(a,t,e)=>f(e)?(L(a,t),a):a?.set(t,e),x=(a,t,e)=>(v(a,t)||P(a,t,e()),M(a,t)),_=(a,t,e,s=P)=>(C(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!f(((a,t)=>p(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),B=a=>new Set(Array.isArray(a)||f(a)?a:[a]),j=(a,t)=>a?.add(t),H="_",W="_id",q=a=>`"${a.replace(/"/g,'""')}"`,k="FROM pragma_table_",J="WHERE",U=(a,t,e)=>{const n=I();return[async()=>_(n,O(await m(c(await a("SELECT name "+k+"list WHERE schema='main'AND type='table'AND name IN("+z(t)+")",t),(async({name:t})=>[t,O(c(await a("SELECT name,type "+k+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,e)=>P(n,t,_(x(n,t,I),e,((a,t,e)=>{e!=M(a,t)&&P(a,t,e)}),((a,t)=>P(a,t))))),((a,t)=>P(n,t))),async(t,e)=>((a,t)=>!f(M(M(n,a),t)))(t,e)?O(y(c(await a("SELECT*FROM"+q(t)),(a=>{return[a[e],(t={...a},s=e,delete t[s],t)];var t,s})),(([a,t])=>!f(a)&&!D(t)))):{},async(t,e,i,r,w,u=!1)=>{const d=B();C(i??{},(a=>c(N(a??{}),(a=>j(d,a)))));const p=A(d);if(!u&&w&&l(p)&&v(n,t))return await a("DROP TABLE"+q(t)),void P(n,t);if(l(p)||v(n,t)){const s=M(n,t),i=B(F(s));await m([...c(p,(async e=>{L(i,e)||(await a(`ALTER TABLE${q(t)}ADD${q(e)}`),P(s,e,""))})),...!u&&r?c(A(i),(async n=>{n!=e&&(await a(`ALTER TABLE${q(t)}DROP${q(n)}`),P(s,n))})):[]])}else await a(`CREATE TABLE${q(t)}(${q(e)} PRIMARY KEY ON CONFLICT REPLACE${o(c(p,(a=>s+q(a))))});`),P(n,t,I([[e,""],...c(p,(a=>[a,""]))]));if(u)f(i)?await a("DELETE FROM"+q(t)+"WHERE 1"):await m(C(i,(async(s,n)=>{f(s)?await a("DELETE FROM"+q(t)+J+q(e)+"=?",[n]):l(p)||await Y(a,t,e,N(s),[n,...b(s)])})));else if(l(p))v(n,t)&&await a("DELETE FROM"+q(t)+"WHERE 1");else{const s=y(F(M(n,t)),(a=>a!=e)),o=[],r=[];C(i??{},((a,t)=>{E(o,t,...c(s,(t=>a?.[t]))),E(r,t)})),await Y(a,t,e,s,o),await a("DELETE FROM"+q(t)+J+q(e)+"NOT IN("+z(r)+")",r)}},async t=>{let s;await a("BEGIN");try{s=await t()}catch(a){e?.(a)}return await a("END"),s}]},Y=async(a,t,e,n,l)=>await a("INSERT INTO"+q(t)+"("+q(e)+o(c(n,(a=>s+q(a))))+")VALUES"+i(`,(?${i(",?",r(n))})`,r(l)/(r(n)+1)).substring(1)+"ON CONFLICT("+q(e)+")DO UPDATE SET"+o(c(n,(a=>q(a)+"=excluded."+q(a))),s),l),z=a=>o(c(a,(()=>"?")),s),G=JSON.parse,K=I(),V=I(),Q=(a,t,e,s,n,i,o=[])=>{let c,r,l,y=0,w=0;x(K,o,(()=>0)),x(V,o,(()=>[]));const u=async a=>(2!=y&&(y=1,await d.schedule((async()=>{await a(),y=0}))),d),d={load:async(e,s)=>await u((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(d.stopAutoLoad(),await d.load(e,n),w=1,l=s((async(e,s)=>{if(s){const t=s();await u((async()=>a.setTransactionChanges(t)))}else await u((async()=>{try{a.setContent(e?.()??await t())}catch(a){i?.(a)}}))})),d),stopAutoLoad:()=>(w&&(n(l),l=void 0,w=0),d),save:async t=>(1!=y&&(y=2,await d.schedule((async()=>{try{await e(a.getContent,t)}catch(a){i?.(a)}y=0}))),d),startAutoSave:async()=>(await d.stopAutoSave().save(),c=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();D(e)&&D(s)||d.save((()=>[e,s]))})),d),stopAutoSave:()=>(p(c,a.delListener),d),schedule:async(...a)=>(E(M(V,o),...a),await(async()=>{if(!M(K,o)){for(P(K,o,1);!f((a=M(V,o),r=a.shift()));)try{await r()}catch(a){i?.(a)}P(K,o,0)}var a})(),d),getStore:()=>a,destroy:()=>d.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return R(d)},X="store",Z=(a,t,e,s,n,[i],o,c)=>{const[r,l,y,w]=U(t,o,n);return Q(a,(async()=>await w((async()=>(await r(),G((await l(i,W))[H]?.[X]??"null"))))),(async a=>await w((async()=>{var t;await r(),await y(i,W,{[H]:{[X]:(t=a()??null,JSON.stringify(t,((a,t)=>d(t,Map)?h.fromEntries([...t]):t)))}},!0,!0)}))),e,s,n,c)},aa=(a,t,e,s,n,[i,o,[c,r,l]],w,E)=>{const[u,d,p,T]=U(t,w,n),v=async(a,t)=>await m($(o,(async([e,s,n,i],o)=>{const c=a[o];t&&void 0===c||await p(e,s,c,n,i,t)}))),A=async(a,t)=>r?await p(l,W,{[H]:a},!0,!0,t):null;return Q(a,(async()=>await T((async()=>{await u();const a=await(async()=>O(y(await m($(i,(async([a,t],e)=>[a,await d(e,t)]))),(a=>!D(a[1])))))(),t=await(async()=>c?(await d(l,W))[H]:{})();return D(a)&&f(t)?void 0:[a,t]}))),(async(a,t)=>await T((async()=>{if(await u(),f(t)){const[t,e]=a();await v(t),await A(e)}else{const[a,e]=t();await v(a,!0),await A(e,!0)}}))),e,s,n,E)},ta="json",ea="autoLoadIntervalSeconds",sa="rowIdColumnName",na="tableId",ia="tableName",oa={mode:ta,[ea]:1},ca={load:0,save:0,[ia]:e+"_values"},ra=(a,t,e,s)=>{const n=I();return C(a,((a,i)=>{const o=w(b(S(t,T(a)?{[e]:a}:a)),0,g(t));f(o[0])||s(i,o[0])||P(n,i,o)})),n},la="pragma ",ya="data_version",wa="schema_version",Ea=(a,t,s,n,i,o,c,r)=>{let l,y;const[E,u,d,f]=(a=>{const t=(a=>S(oa,T(a)?{storeTableName:a}:a??{}))(a),s=t[ea];if(t.mode==ta){const{storeTableName:a=e}=t;return[1,s,[a],B(a)]}const{tables:{load:n={},save:i={}}={},values:o={}}=t,c=w(b(S(ca,o)),0,g(ca)),r=c[2],l=B(r);return[0,s,[ra(n,{[na]:null,[sa]:W},na,(a=>j(l,a)&&a==r)),ra(i,{[ia]:null,[sa]:W,deleteEmptyColumns:0,deleteEmptyTable:0},ia,((a,t)=>j(l,t)&&t==r)),c],l]})(t);return(E?Z:aa)(a,o?async(a,t)=>(o(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(la+ya))[0][ya],e=(await s(la+wa))[0][wa];t==(l??=t)&&e==(y??=e)||(a(),l=t,y=e)}catch{}}),1e3*u),n((t=>f.has(t)?a():0))]),(([a,t])=>{clearInterval(a),l=y=null,i(t)}),c,d,A(f),r)};a.createExpoSqlitePersister=(a,t,e,s,n)=>Ea(a,e,(async(a,e=[])=>(await t.execAsync([{sql:a,args:e}],!1))[0].rows),(a=>t.onDatabaseChange((({tableName:t})=>a(t)))),(a=>a.remove()),s,n,t)},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((a="undefined"!=typeof globalThis?globalThis:a||self).TinyBasePersisterExpoSqlite={});
@@ -1 +1 @@
1
- var t,e;t=this,e=function(t,e,a){"use strict";const s="utf8",n=(t,e)=>t instanceof e,o=t=>null==t,r=Object,i=r.keys,c=r.freeze,u=t=>(t=>n(t,r)&&t.constructor==r)(t)&&0==(t=>i(t).length)(t),f=JSON.parse;t.createFilePersister=(t,i)=>((t,f,y,d,l)=>{let p,h,w,v=0,g=0,A=0;const S=[],m=async t=>(2!=v&&(v=1,await L.schedule((async()=>{await t(),v=0}))),L),L={load:async(e,a)=>await m((async()=>{try{t.setContent(await f())}catch{t.setContent([e,a])}})),startAutoLoad:async(a={},s={})=>{return L.stopAutoLoad(),await L.load(a,s),A=1,n=async(e,a)=>await m((async()=>{if(a)t.setTransactionChanges(a());else try{t.setContent(e?.()??await f())}catch{}})),w=e.watch(i,(()=>n())),L;var n},stopAutoLoad:()=>{return A&&(t=w,t?.close(),w=void 0,A=0),L;var t},save:async e=>(1!=v&&(v=2,await L.schedule((async()=>{try{await(async t=>{return await a.writeFile(i,(e=t(),JSON.stringify(e,((t,e)=>n(e,Map)?r.fromEntries([...e]):e))),s);var e})(t.getContent)}catch{}v=0}))),L),startAutoSave:async()=>(await L.stopAutoSave().save(),p=t.addDidFinishTransactionListener(((t,e)=>{const[a,s]=e();u(a)&&u(s)||L.save((()=>[a,s]))})),L),stopAutoSave:()=>{var e,a;return e=p,a=t.delListener,o(e)||a(e),L},schedule:async(...t)=>(((t,...e)=>{t.push(...e)})(S,...t),await(async()=>{if(!g){for(g=1;!o((t=S,h=t.shift()));)try{await h()}catch{}g=0}var t})(),L),getStore:()=>t,destroy:()=>L.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return c(L)})(t,(async()=>f(await a.readFile(i,s))))},"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("fs"),require("fs/promises")):"function"==typeof define&&define.amd?define(["exports","fs","fs/promises"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterFile={},t.fs,t["fs/promises"]);
1
+ var t,e;t=this,e=function(t,e,a){"use strict";const s="utf8",n=(t,e)=>t instanceof e,o=t=>null==t,i=Object,r=i.keys,c=i.freeze,u=t=>(t=>n(t,i)&&t.constructor==i)(t)&&0==(t=>r(t).length)(t),f=JSON.parse,y=t=>new Map(t),d=(t,e)=>t?.get(e),l=(t,e,a)=>{return o(a)?(s=t,n=e,s?.delete(n),t):t?.set(e,a);var s,n},p=(t,e,a)=>{var s,n;return s=t,n=e,s?.has(n)||l(t,e,a()),d(t,e)},w=y(),h=y();t.createFilePersister=(t,r,y)=>((t,e,a,s,n,i,r=[])=>{let f,y,v,g=0,A=0;p(w,r,(()=>0)),p(h,r,(()=>[]));const S=async t=>(2!=g&&(g=1,await m.schedule((async()=>{await t(),g=0}))),m),m={load:async(a,s)=>await S((async()=>{try{t.setContent(await e())}catch{t.setContent([a,s])}})),startAutoLoad:async(a={},n={})=>(m.stopAutoLoad(),await m.load(a,n),A=1,v=s((async(a,s)=>{if(s){const e=s();await S((async()=>t.setTransactionChanges(e)))}else await S((async()=>{try{t.setContent(a?.()??await e())}catch(t){i?.(t)}}))})),m),stopAutoLoad:()=>(A&&(n(v),v=void 0,A=0),m),save:async e=>(1!=g&&(g=2,await m.schedule((async()=>{try{await a(t.getContent,e)}catch(t){i?.(t)}g=0}))),m),startAutoSave:async()=>(await m.stopAutoSave().save(),f=t.addDidFinishTransactionListener(((t,e)=>{const[a,s]=e();u(a)&&u(s)||m.save((()=>[a,s]))})),m),stopAutoSave:()=>{var e,a;return e=f,a=t.delListener,o(e)||a(e),m},schedule:async(...t)=>(((t,...e)=>{t.push(...e)})(d(h,r),...t),await(async()=>{if(!d(w,r)){for(l(w,r,1);!o((t=d(h,r),y=t.shift()));)try{await y()}catch(t){i?.(t)}l(w,r,0)}var t})(),m),getStore:()=>t,destroy:()=>m.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return c(m)})(t,(async()=>f(await a.readFile(r,s))),(async t=>{return await a.writeFile(r,(e=t(),JSON.stringify(e,((t,e)=>n(e,Map)?i.fromEntries([...e]):e))),s);var e}),(t=>e.watch(r,(()=>t()))),(t=>t?.close()),y)},"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("fs"),require("fs/promises")):"function"==typeof define&&define.amd?define(["exports","fs","fs/promises"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterFile={},t.fs,t["fs/promises"]);
@@ -1 +1 @@
1
- var t,e;t=this,e=function(t){"use strict";const e=(t,e)=>t instanceof e,a=t=>null==t,s=Object,n=s.keys,o=s.freeze,r=t=>(t=>e(t,s)&&t.constructor==s)(t)&&0==(t=>n(t).length)(t),c=JSON.parse,i=t=>t.headers.get("ETag");t.createRemotePersister=(t,n,d,y)=>{let u;return((t,c,f,h,l)=>{let p,w,v,g=0,A=0,S=0;const T=[],m=async t=>(2!=g&&(g=1,await C.schedule((async()=>{await t(),g=0}))),C),C={load:async(e,a)=>await m((async()=>{try{t.setContent(await c())}catch{t.setContent([e,a])}})),startAutoLoad:async(e={},s={})=>{return C.stopAutoLoad(),await C.load(e,s),S=1,o=async(e,a)=>await m((async()=>{if(a)t.setTransactionChanges(a());else try{t.setContent(e?.()??await c())}catch{}})),v=setInterval((async()=>{const t=await fetch(n,{method:"HEAD"}),e=i(t);a(u)||a(e)||e==u||(u=e,o())}),1e3*y),C;var o},stopAutoLoad:()=>(S&&(clearInterval(v),v=void 0,S=0),C),save:async a=>(1!=g&&(g=2,await C.schedule((async()=>{try{await(async t=>{return await fetch(d,{method:"POST",headers:{"Content-Type":"application/json"},body:(a=t(),JSON.stringify(a,((t,a)=>e(a,Map)?s.fromEntries([...a]):a)))});var a})(t.getContent)}catch{}g=0}))),C),startAutoSave:async()=>(await C.stopAutoSave().save(),p=t.addDidFinishTransactionListener(((t,e)=>{const[a,s]=e();r(a)&&r(s)||C.save((()=>[a,s]))})),C),stopAutoSave:()=>{var e,s;return e=p,s=t.delListener,a(e)||s(e),C},schedule:async(...t)=>(((t,...e)=>{t.push(...e)})(T,...t),await(async()=>{if(!A){for(A=1;!a((t=T,w=t.shift()));)try{await w()}catch{}A=0}var t})(),C),getStore:()=>t,destroy:()=>C.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return o(C)})(t,(async()=>{const t=await fetch(n);return u=i(t),c(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,e)=>t instanceof e,a=t=>null==t,s=Object,n=s.keys,o=s.freeze,r=t=>(t=>e(t,s)&&t.constructor==s)(t)&&0==(t=>n(t).length)(t),c=JSON.parse,i=t=>new Map(t),d=(t,e)=>t?.get(e),y=(t,e,s)=>{return a(s)?(n=t,o=e,n?.delete(o),t):t?.set(e,s);var n,o},u=(t,e,a)=>{var s,n;return s=t,n=e,s?.has(n)||y(t,e,a()),d(t,e)},f=i(),h=i(),l=t=>t.headers.get("ETag");t.createRemotePersister=(t,n,i,p,w)=>{let v;return((t,e,s,n,c,i,l=[])=>{let p,w,v,g=0,A=0;u(f,l,(()=>0)),u(h,l,(()=>[]));const S=async t=>(2!=g&&(g=1,await T.schedule((async()=>{await t(),g=0}))),T),T={load:async(a,s)=>await S((async()=>{try{t.setContent(await e())}catch{t.setContent([a,s])}})),startAutoLoad:async(a={},s={})=>(T.stopAutoLoad(),await T.load(a,s),A=1,v=n((async(a,s)=>{if(s){const e=s();await S((async()=>t.setTransactionChanges(e)))}else await S((async()=>{try{t.setContent(a?.()??await e())}catch(t){i?.(t)}}))})),T),stopAutoLoad:()=>(A&&(c(v),v=void 0,A=0),T),save:async e=>(1!=g&&(g=2,await T.schedule((async()=>{try{await s(t.getContent,e)}catch(t){i?.(t)}g=0}))),T),startAutoSave:async()=>(await T.stopAutoSave().save(),p=t.addDidFinishTransactionListener(((t,e)=>{const[a,s]=e();r(a)&&r(s)||T.save((()=>[a,s]))})),T),stopAutoSave:()=>{var e,s;return e=p,s=t.delListener,a(e)||s(e),T},schedule:async(...t)=>(((t,...e)=>{t.push(...e)})(d(h,l),...t),await(async()=>{if(!d(f,l)){for(y(f,l,1);!a((t=d(h,l),w=t.shift()));)try{await w()}catch(t){i?.(t)}y(f,l,0)}var t})(),T),getStore:()=>t,destroy:()=>T.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return o(T)})(t,(async()=>{const t=await fetch(n);return v=l(t),c(await t.text())}),(async t=>{return await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:(a=t(),JSON.stringify(a,((t,a)=>e(a,Map)?s.fromEntries([...a]):a)))});var a}),(t=>setInterval((async()=>{const e=await fetch(n,{method:"HEAD"}),s=l(e);a(v)||a(s)||s==v||(v=s,t())}),1e3*p)),(t=>clearInterval(t)),w)}},"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 +1 @@
1
- var a,t;a=this,t=function(a){"use strict";const t=a=>typeof a,e="tinybase",s=",",n=t(""),i=(a,t)=>a.repeat(t),o=(a,t="")=>a.join(t),c=(a,t)=>a.map(t),r=a=>a.length,l=a=>0==r(a),y=(a,t)=>a.filter(t),w=(a,t,e)=>a.slice(t,e),u=(a,...t)=>a.push(...t),d=Promise,E=(a,t)=>a instanceof t,p=a=>null==a,f=(a,t,e)=>p(a)?e?.():t(a),m=a=>t(a)==n,T=async a=>d.all(a),v=(a,t)=>a?.has(t)??!1,h=a=>[...a?.values()??[]],A=(a,t)=>a?.delete(t),L=Object,R=L.keys,O=L.freeze,S=(a=[])=>L.fromEntries(a),N=(...a)=>L.assign({},...a),b=(a,t)=>c(L.entries(a),(([a,e])=>t(e,a))),C=a=>L.values(a),g=a=>r(R(a)),D=a=>(a=>E(a,L)&&a.constructor==L)(a)&&0==g(a),I=a=>new Map(a),_=a=>[...a?.keys()??[]],M=(a,t)=>a?.get(t),F=(a,t)=>c([...a?.entries()??[]],(([a,e])=>t(e,a))),$=(a,t,e)=>p(e)?(A(a,t),a):a?.set(t,e),P=(a,t,e,s=$)=>(b(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!p(((a,t)=>f(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),W=a=>new Set(Array.isArray(a)||p(a)?a:[a]),j=(a,t)=>a?.add(t),x="_",B="_id",k=a=>`"${a.replace(/"/g,'""')}"`,q="FROM pragma_table_",H="WHERE",J=(a,t)=>{const e=I();return[async()=>P(e,S(await T(c(await a("SELECT name "+q+"list WHERE schema='main'AND type='table'AND name IN("+V(t)+")",t),(async({name:t})=>[t,S(c(await a("SELECT name,type "+q+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,s)=>{return $(e,t,P((o=I,v(n=e,i=t)||$(n,i,o()),M(n,i)),s,((a,t,e)=>{e!=M(a,t)&&$(a,t,e)}),((a,t)=>$(a,t))));var n,i,o}),((a,t)=>$(e,t))),async(t,s)=>((a,t)=>!p(M(M(e,a),t)))(t,s)?S(y(c(await a("SELECT*FROM"+k(t)),(a=>{return[a[s],(t={...a},e=s,delete t[e],t)];var t,e})),(([a,t])=>!p(a)&&!D(t)))):{},async(t,n,i,r,w,d=!1)=>{const E=W();b(i??{},(a=>c(R(a??{}),(a=>j(E,a)))));const f=h(E);if(!d&&w&&l(f)&&v(e,t))return await a("DROP TABLE"+k(t)),void $(e,t);if(l(f)||v(e,t)){const s=M(e,t),i=W(_(s));await T([...c(f,(async e=>{A(i,e)||(await a(`ALTER TABLE${k(t)}ADD${k(e)}`),$(s,e,""))})),...!d&&r?c(h(i),(async e=>{e!=n&&(await a(`ALTER TABLE${k(t)}DROP${k(e)}`),$(s,e))})):[]])}else await a(`CREATE TABLE${k(t)}(${k(n)} PRIMARY KEY ON CONFLICT REPLACE${o(c(f,(a=>s+k(a))))});`),$(e,t,I([[n,""],...c(f,(a=>[a,""]))]));if(d)p(i)?await a("DELETE FROM"+k(t)+"WHERE 1"):await T(b(i,(async(e,s)=>{p(e)?await a("DELETE FROM"+k(t)+H+k(n)+"=?",[s]):l(f)||await U(a,t,n,R(e),[s,...C(e)])})));else if(l(f))v(e,t)&&await a("DELETE FROM"+k(t)+"WHERE 1");else{const s=y(_(M(e,t)),(a=>a!=n)),o=[],r=[];b(i??{},((a,t)=>{u(o,t,...c(s,(t=>a?.[t]))),u(r,t)})),await U(a,t,n,s,o),await a("DELETE FROM"+k(t)+H+k(n)+"NOT IN("+V(r)+")",r)}}]},U=async(a,t,e,n,l)=>await a("INSERT INTO"+k(t)+"("+k(e)+o(c(n,(a=>s+k(a))))+")VALUES"+i(`,(?${i(",?",r(n))})`,r(l)/(r(n)+1)).substring(1)+"ON CONFLICT("+k(e)+")DO UPDATE SET"+o(c(n,(a=>k(a)+"=excluded."+k(a))),s),l),V=a=>o(c(a,(()=>"?")),s),Y=JSON.parse,z=(a,t,e,s,n)=>{let i,o,c,r=0,l=0,y=0;const w=[],d=async a=>(2!=r&&(r=1,await E.schedule((async()=>{await a(),r=0}))),E),E={load:async(e,s)=>await d((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(E.stopAutoLoad(),await E.load(e,n),y=1,c=s((async(e,s)=>await d((async()=>{if(s)a.setTransactionChanges(s());else try{a.setContent(e?.()??await t())}catch{}})))),E),stopAutoLoad:()=>(y&&(n(c),c=void 0,y=0),E),save:async t=>(1!=r&&(r=2,await E.schedule((async()=>{try{await e(a.getContent,t)}catch{}r=0}))),E),startAutoSave:async()=>(await E.stopAutoSave().save(),i=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();D(e)&&D(s)||E.save((()=>[e,s]))})),E),stopAutoSave:()=>(f(i,a.delListener),E),schedule:async(...a)=>(u(w,...a),await(async()=>{if(!l){for(l=1;!p((a=w,o=a.shift()));)try{await o()}catch{}l=0}var a})(),E),getStore:()=>a,destroy:()=>E.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return O(E)},K="store",G=(a,t,e,s,[n],i)=>{const[o,c,r]=J(t,i),l=z(a,(async()=>(await o(),Y((await c(n,B))[x]?.[K]))),(async a=>l.schedule(o,(async()=>{var t;await r(n,B,{[x]:{[K]:(t=a(),JSON.stringify(t,((a,t)=>E(t,Map)?L.fromEntries([...t]):t)))}},!0,!0)}))),e,s);return l},Q=(a,t,e,s,[n,i,[o,c,r]],l)=>{const[w,u,d]=J(t,l),E=async(a,t)=>await T(F(i,(async([e,s,n,i],o)=>{const c=a[o];t&&void 0===c||await d(e,s,c,n,i,t)}))),f=async(a,t)=>c?await d(r,B,{[x]:a},!0,!0,t):null;return z(a,(async()=>{await w();const a=await(async()=>S(y(await T(F(n,(async([a,t],e)=>[a,await u(e,t)]))),(a=>!D(a[1])))))(),t=await(async()=>o?(await u(r,B))[x]:{})();return D(a)&&p(t)?void 0:[a,t]}),(async(a,t)=>{if(await w(),p(t)){const[t,e]=a();await E(t),await f(e)}else{const[a,e]=t();await E(a,!0),await f(e,!0)}}),e,s)},X="json",Z="autoLoadIntervalSeconds",aa="rowIdColumnName",ta="tableId",ea="tableName",sa={mode:X,[Z]:1},na={load:0,save:0,[ea]:e+"_values"},ia=(a,t,e,s)=>{const n=I();return b(a,((a,i)=>{const o=w(C(N(t,m(a)?{[e]:a}:a)),0,g(t));p(o[0])||s(i,o[0])||$(n,i,o)})),n},oa="pragma ",ca="data_version",ra="schema_version",la=(a,t,s,n,i,o)=>{let c,r;const[l,y,u,d]=(a=>{const t=(a=>N(sa,m(a)?{storeTableName:a}:a??{}))(a),s=t[Z];if(t.mode==X){const{storeTableName:a=e}=t;return[1,s,[a],W(a)]}const{tables:{load:n={},save:i={}}={},values:o={}}=t,c=w(C(N(na,o)),0,g(na)),r=c[2],l=W(r);return[0,s,[ia(n,{[ta]:null,[aa]:B},ta,(a=>j(l,a)&&a==r)),ia(i,{[ea]:null,[aa]:B,deleteEmptyColumns:0,deleteEmptyTable:0},ea,((a,t)=>j(l,t)&&t==r)),c],l]})(t);return(l?G:Q)(a,o?async(a,t)=>(o(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(oa+ca))[0][ca],e=(await s(oa+ra))[0][ra];t==(c??=t)&&e==(r??=e)||(a(),c=t,r=e)}catch{}}),1e3*y),n((t=>d.has(t)?a():0))]),(([a,t])=>{clearInterval(a),c=r=null,i(t)}),u,h(d))};a.createSqliteWasmPersister=(a,t,e,s,n)=>la(a,s,(async(a,t=[])=>e.exec(a,{bind:t,rowMode:"object",returnValue:"resultRows"}).map((a=>({...a})))),(a=>t.capi.sqlite3_update_hook(e,((t,e,s,n)=>a(n)),0)),(()=>t.capi.sqlite3_update_hook(e,(()=>0),0)),n)},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((a="undefined"!=typeof globalThis?globalThis:a||self).TinyBasePersisterSqliteWasm={});
1
+ var a,t;a=this,t=function(a){"use strict";const t=a=>typeof a,e="tinybase",s=",",n=t(""),i=(a,t)=>a.repeat(t),o=(a,t="")=>a.join(t),c=(a,t)=>a.map(t),r=a=>a.length,l=a=>0==r(a),y=(a,t)=>a.filter(t),w=(a,t,e)=>a.slice(t,e),u=(a,...t)=>a.push(...t),d=Promise,E=(a,t)=>a instanceof t,p=a=>null==a,f=(a,t,e)=>p(a)?e?.():t(a),m=a=>t(a)==n,T=async a=>d.all(a),v=(a,t)=>a?.has(t)??!1,h=a=>[...a?.values()??[]],A=(a,t)=>a?.delete(t),L=Object,R=L.keys,N=L.freeze,O=(a=[])=>L.fromEntries(a),S=(...a)=>L.assign({},...a),b=(a,t)=>c(L.entries(a),(([a,e])=>t(e,a))),C=a=>L.values(a),g=a=>r(R(a)),D=a=>(a=>E(a,L)&&a.constructor==L)(a)&&0==g(a),I=a=>new Map(a),_=a=>[...a?.keys()??[]],M=(a,t)=>a?.get(t),F=(a,t)=>c([...a?.entries()??[]],(([a,e])=>t(e,a))),$=(a,t,e)=>p(e)?(A(a,t),a):a?.set(t,e),P=(a,t,e)=>(v(a,t)||$(a,t,e()),M(a,t)),B=(a,t,e,s=$)=>(b(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!p(((a,t)=>f(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),W=a=>new Set(Array.isArray(a)||p(a)?a:[a]),j=(a,t)=>a?.add(t),x="_",k="_id",q=a=>`"${a.replace(/"/g,'""')}"`,H="FROM pragma_table_",J="WHERE",U=(a,t,e)=>{const n=I();return[async()=>B(n,O(await T(c(await a("SELECT name "+H+"list WHERE schema='main'AND type='table'AND name IN("+Y(t)+")",t),(async({name:t})=>[t,O(c(await a("SELECT name,type "+H+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,e)=>$(n,t,B(P(n,t,I),e,((a,t,e)=>{e!=M(a,t)&&$(a,t,e)}),((a,t)=>$(a,t))))),((a,t)=>$(n,t))),async(t,e)=>((a,t)=>!p(M(M(n,a),t)))(t,e)?O(y(c(await a("SELECT*FROM"+q(t)),(a=>{return[a[e],(t={...a},s=e,delete t[s],t)];var t,s})),(([a,t])=>!p(a)&&!D(t)))):{},async(t,e,i,r,w,d=!1)=>{const E=W();b(i??{},(a=>c(R(a??{}),(a=>j(E,a)))));const f=h(E);if(!d&&w&&l(f)&&v(n,t))return await a("DROP TABLE"+q(t)),void $(n,t);if(l(f)||v(n,t)){const s=M(n,t),i=W(_(s));await T([...c(f,(async e=>{A(i,e)||(await a(`ALTER TABLE${q(t)}ADD${q(e)}`),$(s,e,""))})),...!d&&r?c(h(i),(async n=>{n!=e&&(await a(`ALTER TABLE${q(t)}DROP${q(n)}`),$(s,n))})):[]])}else await a(`CREATE TABLE${q(t)}(${q(e)} PRIMARY KEY ON CONFLICT REPLACE${o(c(f,(a=>s+q(a))))});`),$(n,t,I([[e,""],...c(f,(a=>[a,""]))]));if(d)p(i)?await a("DELETE FROM"+q(t)+"WHERE 1"):await T(b(i,(async(s,n)=>{p(s)?await a("DELETE FROM"+q(t)+J+q(e)+"=?",[n]):l(f)||await V(a,t,e,R(s),[n,...C(s)])})));else if(l(f))v(n,t)&&await a("DELETE FROM"+q(t)+"WHERE 1");else{const s=y(_(M(n,t)),(a=>a!=e)),o=[],r=[];b(i??{},((a,t)=>{u(o,t,...c(s,(t=>a?.[t]))),u(r,t)})),await V(a,t,e,s,o),await a("DELETE FROM"+q(t)+J+q(e)+"NOT IN("+Y(r)+")",r)}},async t=>{let s;await a("BEGIN");try{s=await t()}catch(a){e?.(a)}return await a("END"),s}]},V=async(a,t,e,n,l)=>await a("INSERT INTO"+q(t)+"("+q(e)+o(c(n,(a=>s+q(a))))+")VALUES"+i(`,(?${i(",?",r(n))})`,r(l)/(r(n)+1)).substring(1)+"ON CONFLICT("+q(e)+")DO UPDATE SET"+o(c(n,(a=>q(a)+"=excluded."+q(a))),s),l),Y=a=>o(c(a,(()=>"?")),s),z=JSON.parse,G=I(),K=I(),Q=(a,t,e,s,n,i,o=[])=>{let c,r,l,y=0,w=0;P(G,o,(()=>0)),P(K,o,(()=>[]));const d=async a=>(2!=y&&(y=1,await E.schedule((async()=>{await a(),y=0}))),E),E={load:async(e,s)=>await d((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(E.stopAutoLoad(),await E.load(e,n),w=1,l=s((async(e,s)=>{if(s){const t=s();await d((async()=>a.setTransactionChanges(t)))}else await d((async()=>{try{a.setContent(e?.()??await t())}catch(a){i?.(a)}}))})),E),stopAutoLoad:()=>(w&&(n(l),l=void 0,w=0),E),save:async t=>(1!=y&&(y=2,await E.schedule((async()=>{try{await e(a.getContent,t)}catch(a){i?.(a)}y=0}))),E),startAutoSave:async()=>(await E.stopAutoSave().save(),c=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();D(e)&&D(s)||E.save((()=>[e,s]))})),E),stopAutoSave:()=>(f(c,a.delListener),E),schedule:async(...a)=>(u(M(K,o),...a),await(async()=>{if(!M(G,o)){for($(G,o,1);!p((a=M(K,o),r=a.shift()));)try{await r()}catch(a){i?.(a)}$(G,o,0)}var a})(),E),getStore:()=>a,destroy:()=>E.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return N(E)},X="store",Z=(a,t,e,s,n,[i],o,c)=>{const[r,l,y,w]=U(t,o,n);return Q(a,(async()=>await w((async()=>(await r(),z((await l(i,k))[x]?.[X]??"null"))))),(async a=>await w((async()=>{var t;await r(),await y(i,k,{[x]:{[X]:(t=a()??null,JSON.stringify(t,((a,t)=>E(t,Map)?L.fromEntries([...t]):t)))}},!0,!0)}))),e,s,n,c)},aa=(a,t,e,s,n,[i,o,[c,r,l]],w,u)=>{const[d,E,f,m]=U(t,w,n),v=async(a,t)=>await T(F(o,(async([e,s,n,i],o)=>{const c=a[o];t&&void 0===c||await f(e,s,c,n,i,t)}))),h=async(a,t)=>r?await f(l,k,{[x]:a},!0,!0,t):null;return Q(a,(async()=>await m((async()=>{await d();const a=await(async()=>O(y(await T(F(i,(async([a,t],e)=>[a,await E(e,t)]))),(a=>!D(a[1])))))(),t=await(async()=>c?(await E(l,k))[x]:{})();return D(a)&&p(t)?void 0:[a,t]}))),(async(a,t)=>await m((async()=>{if(await d(),p(t)){const[t,e]=a();await v(t),await h(e)}else{const[a,e]=t();await v(a,!0),await h(e,!0)}}))),e,s,n,u)},ta="json",ea="autoLoadIntervalSeconds",sa="rowIdColumnName",na="tableId",ia="tableName",oa={mode:ta,[ea]:1},ca={load:0,save:0,[ia]:e+"_values"},ra=(a,t,e,s)=>{const n=I();return b(a,((a,i)=>{const o=w(C(S(t,m(a)?{[e]:a}:a)),0,g(t));p(o[0])||s(i,o[0])||$(n,i,o)})),n},la="pragma ",ya="data_version",wa="schema_version",ua=(a,t,s,n,i,o,c,r)=>{let l,y;const[u,d,E,p]=(a=>{const t=(a=>S(oa,m(a)?{storeTableName:a}:a??{}))(a),s=t[ea];if(t.mode==ta){const{storeTableName:a=e}=t;return[1,s,[a],W(a)]}const{tables:{load:n={},save:i={}}={},values:o={}}=t,c=w(C(S(ca,o)),0,g(ca)),r=c[2],l=W(r);return[0,s,[ra(n,{[na]:null,[sa]:k},na,(a=>j(l,a)&&a==r)),ra(i,{[ia]:null,[sa]:k,deleteEmptyColumns:0,deleteEmptyTable:0},ia,((a,t)=>j(l,t)&&t==r)),c],l]})(t);return(u?Z:aa)(a,o?async(a,t)=>(o(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(la+ya))[0][ya],e=(await s(la+wa))[0][wa];t==(l??=t)&&e==(y??=e)||(a(),l=t,y=e)}catch{}}),1e3*d),n((t=>p.has(t)?a():0))]),(([a,t])=>{clearInterval(a),l=y=null,i(t)}),c,E,h(p),r)};a.createSqliteWasmPersister=(a,t,e,s,n,i)=>ua(a,s,(async(a,t=[])=>e.exec(a,{bind:t,rowMode:"object",returnValue:"resultRows"}).map((a=>({...a})))),(a=>t.capi.sqlite3_update_hook(e,((t,e,s,n)=>a(n)),0)),(()=>t.capi.sqlite3_update_hook(e,(()=>0),0)),n,i,e)},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((a="undefined"!=typeof globalThis?globalThis:a||self).TinyBasePersisterSqliteWasm={});
@@ -1 +1 @@
1
- var a,t;a=this,t=function(a){"use strict";const t=a=>typeof a,e="tinybase",s=",",n=t(""),i=(a,t)=>a.repeat(t),o=(a,t="")=>a.join(t),c=(a,t)=>a.map(t),r=a=>a.length,l=a=>0==r(a),y=(a,t)=>a.filter(t),w=(a,t,e)=>a.slice(t,e),u=(a,...t)=>a.push(...t),d=Promise,E=(a,t)=>a instanceof t,f=a=>null==a,p=(a,t,e)=>f(a)?e?.():t(a),T=a=>t(a)==n,v=async a=>d.all(a),m=(a,t)=>a?.has(t)??!1,A=a=>[...a?.values()??[]],L=(a,t)=>a?.delete(t),h=Object,R=h.keys,O=h.freeze,S=(a=[])=>h.fromEntries(a),N=(...a)=>h.assign({},...a),C=(a,t)=>c(h.entries(a),(([a,e])=>t(e,a))),g=a=>h.values(a),b=a=>r(R(a)),D=a=>(a=>E(a,h)&&a.constructor==h)(a)&&0==b(a),I=a=>new Map(a),F=a=>[...a?.keys()??[]],M=(a,t)=>a?.get(t),$=(a,t)=>c([...a?.entries()??[]],(([a,e])=>t(e,a))),P=(a,t,e)=>f(e)?(L(a,t),a):a?.set(t,e),_=(a,t,e,s=P)=>(C(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!f(((a,t)=>p(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),B=a=>new Set(Array.isArray(a)||f(a)?a:[a]),j=(a,t)=>a?.add(t),x="_",H="_id",W=a=>`"${a.replace(/"/g,'""')}"`,k="FROM pragma_table_",q="WHERE",J=(a,t)=>{const e=I();return[async()=>_(e,S(await v(c(await a("SELECT name "+k+"list WHERE schema='main'AND type='table'AND name IN("+Y(t)+")",t),(async({name:t})=>[t,S(c(await a("SELECT name,type "+k+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,s)=>{return P(e,t,_((o=I,m(n=e,i=t)||P(n,i,o()),M(n,i)),s,((a,t,e)=>{e!=M(a,t)&&P(a,t,e)}),((a,t)=>P(a,t))));var n,i,o}),((a,t)=>P(e,t))),async(t,s)=>((a,t)=>!f(M(M(e,a),t)))(t,s)?S(y(c(await a("SELECT*FROM"+W(t)),(a=>{return[a[s],(t={...a},e=s,delete t[e],t)];var t,e})),(([a,t])=>!f(a)&&!D(t)))):{},async(t,n,i,r,w,d=!1)=>{const E=B();C(i??{},(a=>c(R(a??{}),(a=>j(E,a)))));const p=A(E);if(!d&&w&&l(p)&&m(e,t))return await a("DROP TABLE"+W(t)),void P(e,t);if(l(p)||m(e,t)){const s=M(e,t),i=B(F(s));await v([...c(p,(async e=>{L(i,e)||(await a(`ALTER TABLE${W(t)}ADD${W(e)}`),P(s,e,""))})),...!d&&r?c(A(i),(async e=>{e!=n&&(await a(`ALTER TABLE${W(t)}DROP${W(e)}`),P(s,e))})):[]])}else await a(`CREATE TABLE${W(t)}(${W(n)} PRIMARY KEY ON CONFLICT REPLACE${o(c(p,(a=>s+W(a))))});`),P(e,t,I([[n,""],...c(p,(a=>[a,""]))]));if(d)f(i)?await a("DELETE FROM"+W(t)+"WHERE 1"):await v(C(i,(async(e,s)=>{f(e)?await a("DELETE FROM"+W(t)+q+W(n)+"=?",[s]):l(p)||await U(a,t,n,R(e),[s,...g(e)])})));else if(l(p))m(e,t)&&await a("DELETE FROM"+W(t)+"WHERE 1");else{const s=y(F(M(e,t)),(a=>a!=n)),o=[],r=[];C(i??{},((a,t)=>{u(o,t,...c(s,(t=>a?.[t]))),u(r,t)})),await U(a,t,n,s,o),await a("DELETE FROM"+W(t)+q+W(n)+"NOT IN("+Y(r)+")",r)}}]},U=async(a,t,e,n,l)=>await a("INSERT INTO"+W(t)+"("+W(e)+o(c(n,(a=>s+W(a))))+")VALUES"+i(`,(?${i(",?",r(n))})`,r(l)/(r(n)+1)).substring(1)+"ON CONFLICT("+W(e)+")DO UPDATE SET"+o(c(n,(a=>W(a)+"=excluded."+W(a))),s),l),Y=a=>o(c(a,(()=>"?")),s),z=JSON.parse,K=(a,t,e,s,n)=>{let i,o,c,r=0,l=0,y=0;const w=[],d=async a=>(2!=r&&(r=1,await E.schedule((async()=>{await a(),r=0}))),E),E={load:async(e,s)=>await d((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(E.stopAutoLoad(),await E.load(e,n),y=1,c=s((async(e,s)=>await d((async()=>{if(s)a.setTransactionChanges(s());else try{a.setContent(e?.()??await t())}catch{}})))),E),stopAutoLoad:()=>(y&&(n(c),c=void 0,y=0),E),save:async t=>(1!=r&&(r=2,await E.schedule((async()=>{try{await e(a.getContent,t)}catch{}r=0}))),E),startAutoSave:async()=>(await E.stopAutoSave().save(),i=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();D(e)&&D(s)||E.save((()=>[e,s]))})),E),stopAutoSave:()=>(p(i,a.delListener),E),schedule:async(...a)=>(u(w,...a),await(async()=>{if(!l){for(l=1;!f((a=w,o=a.shift()));)try{await o()}catch{}l=0}var a})(),E),getStore:()=>a,destroy:()=>E.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return O(E)},V="store",G=(a,t,e,s,[n],i)=>{const[o,c,r]=J(t,i),l=K(a,(async()=>(await o(),z((await c(n,H))[x]?.[V]))),(async a=>l.schedule(o,(async()=>{var t;await r(n,H,{[x]:{[V]:(t=a(),JSON.stringify(t,((a,t)=>E(t,Map)?h.fromEntries([...t]):t)))}},!0,!0)}))),e,s);return l},Q=(a,t,e,s,[n,i,[o,c,r]],l)=>{const[w,u,d]=J(t,l),E=async(a,t)=>await v($(i,(async([e,s,n,i],o)=>{const c=a[o];t&&void 0===c||await d(e,s,c,n,i,t)}))),p=async(a,t)=>c?await d(r,H,{[x]:a},!0,!0,t):null;return K(a,(async()=>{await w();const a=await(async()=>S(y(await v($(n,(async([a,t],e)=>[a,await u(e,t)]))),(a=>!D(a[1])))))(),t=await(async()=>o?(await u(r,H))[x]:{})();return D(a)&&f(t)?void 0:[a,t]}),(async(a,t)=>{if(await w(),f(t)){const[t,e]=a();await E(t),await p(e)}else{const[a,e]=t();await E(a,!0),await p(e,!0)}}),e,s)},X="json",Z="autoLoadIntervalSeconds",aa="rowIdColumnName",ta="tableId",ea="tableName",sa={mode:X,[Z]:1},na={load:0,save:0,[ea]:e+"_values"},ia=(a,t,e,s)=>{const n=I();return C(a,((a,i)=>{const o=w(g(N(t,T(a)?{[e]:a}:a)),0,b(t));f(o[0])||s(i,o[0])||P(n,i,o)})),n},oa="pragma ",ca="data_version",ra="schema_version",la=(a,t,s,n,i,o)=>{let c,r;const[l,y,u,d]=(a=>{const t=(a=>N(sa,T(a)?{storeTableName:a}:a??{}))(a),s=t[Z];if(t.mode==X){const{storeTableName:a=e}=t;return[1,s,[a],B(a)]}const{tables:{load:n={},save:i={}}={},values:o={}}=t,c=w(g(N(na,o)),0,b(na)),r=c[2],l=B(r);return[0,s,[ia(n,{[ta]:null,[aa]:H},ta,(a=>j(l,a)&&a==r)),ia(i,{[ea]:null,[aa]:H,deleteEmptyColumns:0,deleteEmptyTable:0},ea,((a,t)=>j(l,t)&&t==r)),c],l]})(t);return(l?G:Q)(a,o?async(a,t)=>(o(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(oa+ca))[0][ca],e=(await s(oa+ra))[0][ra];t==(c??=t)&&e==(r??=e)||(a(),c=t,r=e)}catch{}}),1e3*y),n((t=>d.has(t)?a():0))]),(([a,t])=>{clearInterval(a),c=r=null,i(t)}),u,A(d))},ya="change";a.createSqlite3Persister=(a,t,e,s)=>la(a,e,(async(a,e=[])=>{return await(s=(s,n)=>t.all(a,e,((a,t)=>a?n(a):s(t.map((a=>({...a})))))),new d(s));var s}),(a=>{const e=(t,e,s)=>a(s);return t.on(ya,e),e}),(a=>t.off(ya,a)),s)},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((a="undefined"!=typeof globalThis?globalThis:a||self).TinyBasePersisterSqlite3={});
1
+ var a,t;a=this,t=function(a){"use strict";const t=a=>typeof a,e="tinybase",s=",",n=t(""),i=(a,t)=>a.repeat(t),c=(a,t="")=>a.join(t),o=(a,t)=>a.map(t),r=a=>a.length,l=a=>0==r(a),y=(a,t)=>a.filter(t),w=(a,t,e)=>a.slice(t,e),u=(a,...t)=>a.push(...t),E=Promise,d=(a,t)=>a instanceof t,f=a=>null==a,p=(a,t,e)=>f(a)?e?.():t(a),T=a=>t(a)==n,m=async a=>E.all(a),v=(a,t)=>a?.has(t)??!1,A=a=>[...a?.values()??[]],L=(a,t)=>a?.delete(t),h=Object,N=h.keys,R=h.freeze,O=(a=[])=>h.fromEntries(a),S=(...a)=>h.assign({},...a),C=(a,t)=>o(h.entries(a),(([a,e])=>t(e,a))),g=a=>h.values(a),b=a=>r(N(a)),D=a=>(a=>d(a,h)&&a.constructor==h)(a)&&0==b(a),I=a=>new Map(a),F=a=>[...a?.keys()??[]],M=(a,t)=>a?.get(t),$=(a,t)=>o([...a?.entries()??[]],(([a,e])=>t(e,a))),P=(a,t,e)=>f(e)?(L(a,t),a):a?.set(t,e),_=(a,t,e)=>(v(a,t)||P(a,t,e()),M(a,t)),B=(a,t,e,s=P)=>(C(t,((t,s)=>e(a,s,t))),((a,t)=>{((a,t)=>{a?.forEach(t)})(a,((a,e)=>t(e)))})(a,(e=>((a,t)=>!f(((a,t)=>p(a,(a=>a[t])))(a,t)))(t,e)?0:s(a,e))),a),j=a=>new Set(Array.isArray(a)||f(a)?a:[a]),x=(a,t)=>a?.add(t),H="_",W="_id",k=a=>`"${a.replace(/"/g,'""')}"`,q="FROM pragma_table_",J="WHERE",U=(a,t,e)=>{const n=I();return[async()=>B(n,O(await m(o(await a("SELECT name "+q+"list WHERE schema='main'AND type='table'AND name IN("+z(t)+")",t),(async({name:t})=>[t,O(o(await a("SELECT name,type "+q+"info(?)",[t]),(({name:a,type:t})=>[a,t])))])))),((a,t,e)=>P(n,t,B(_(n,t,I),e,((a,t,e)=>{e!=M(a,t)&&P(a,t,e)}),((a,t)=>P(a,t))))),((a,t)=>P(n,t))),async(t,e)=>((a,t)=>!f(M(M(n,a),t)))(t,e)?O(y(o(await a("SELECT*FROM"+k(t)),(a=>{return[a[e],(t={...a},s=e,delete t[s],t)];var t,s})),(([a,t])=>!f(a)&&!D(t)))):{},async(t,e,i,r,w,E=!1)=>{const d=j();C(i??{},(a=>o(N(a??{}),(a=>x(d,a)))));const p=A(d);if(!E&&w&&l(p)&&v(n,t))return await a("DROP TABLE"+k(t)),void P(n,t);if(l(p)||v(n,t)){const s=M(n,t),i=j(F(s));await m([...o(p,(async e=>{L(i,e)||(await a(`ALTER TABLE${k(t)}ADD${k(e)}`),P(s,e,""))})),...!E&&r?o(A(i),(async n=>{n!=e&&(await a(`ALTER TABLE${k(t)}DROP${k(n)}`),P(s,n))})):[]])}else await a(`CREATE TABLE${k(t)}(${k(e)} PRIMARY KEY ON CONFLICT REPLACE${c(o(p,(a=>s+k(a))))});`),P(n,t,I([[e,""],...o(p,(a=>[a,""]))]));if(E)f(i)?await a("DELETE FROM"+k(t)+"WHERE 1"):await m(C(i,(async(s,n)=>{f(s)?await a("DELETE FROM"+k(t)+J+k(e)+"=?",[n]):l(p)||await Y(a,t,e,N(s),[n,...g(s)])})));else if(l(p))v(n,t)&&await a("DELETE FROM"+k(t)+"WHERE 1");else{const s=y(F(M(n,t)),(a=>a!=e)),c=[],r=[];C(i??{},((a,t)=>{u(c,t,...o(s,(t=>a?.[t]))),u(r,t)})),await Y(a,t,e,s,c),await a("DELETE FROM"+k(t)+J+k(e)+"NOT IN("+z(r)+")",r)}},async t=>{let s;await a("BEGIN");try{s=await t()}catch(a){e?.(a)}return await a("END"),s}]},Y=async(a,t,e,n,l)=>await a("INSERT INTO"+k(t)+"("+k(e)+c(o(n,(a=>s+k(a))))+")VALUES"+i(`,(?${i(",?",r(n))})`,r(l)/(r(n)+1)).substring(1)+"ON CONFLICT("+k(e)+")DO UPDATE SET"+c(o(n,(a=>k(a)+"=excluded."+k(a))),s),l),z=a=>c(o(a,(()=>"?")),s),G=JSON.parse,K=I(),V=I(),Q=(a,t,e,s,n,i,c=[])=>{let o,r,l,y=0,w=0;_(K,c,(()=>0)),_(V,c,(()=>[]));const E=async a=>(2!=y&&(y=1,await d.schedule((async()=>{await a(),y=0}))),d),d={load:async(e,s)=>await E((async()=>{try{a.setContent(await t())}catch{a.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(d.stopAutoLoad(),await d.load(e,n),w=1,l=s((async(e,s)=>{if(s){const t=s();await E((async()=>a.setTransactionChanges(t)))}else await E((async()=>{try{a.setContent(e?.()??await t())}catch(a){i?.(a)}}))})),d),stopAutoLoad:()=>(w&&(n(l),l=void 0,w=0),d),save:async t=>(1!=y&&(y=2,await d.schedule((async()=>{try{await e(a.getContent,t)}catch(a){i?.(a)}y=0}))),d),startAutoSave:async()=>(await d.stopAutoSave().save(),o=a.addDidFinishTransactionListener(((a,t)=>{const[e,s]=t();D(e)&&D(s)||d.save((()=>[e,s]))})),d),stopAutoSave:()=>(p(o,a.delListener),d),schedule:async(...a)=>(u(M(V,c),...a),await(async()=>{if(!M(K,c)){for(P(K,c,1);!f((a=M(V,c),r=a.shift()));)try{await r()}catch(a){i?.(a)}P(K,c,0)}var a})(),d),getStore:()=>a,destroy:()=>d.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return R(d)},X="store",Z=(a,t,e,s,n,[i],c,o)=>{const[r,l,y,w]=U(t,c,n);return Q(a,(async()=>await w((async()=>(await r(),G((await l(i,W))[H]?.[X]??"null"))))),(async a=>await w((async()=>{var t;await r(),await y(i,W,{[H]:{[X]:(t=a()??null,JSON.stringify(t,((a,t)=>d(t,Map)?h.fromEntries([...t]):t)))}},!0,!0)}))),e,s,n,o)},aa=(a,t,e,s,n,[i,c,[o,r,l]],w,u)=>{const[E,d,p,T]=U(t,w,n),v=async(a,t)=>await m($(c,(async([e,s,n,i],c)=>{const o=a[c];t&&void 0===o||await p(e,s,o,n,i,t)}))),A=async(a,t)=>r?await p(l,W,{[H]:a},!0,!0,t):null;return Q(a,(async()=>await T((async()=>{await E();const a=await(async()=>O(y(await m($(i,(async([a,t],e)=>[a,await d(e,t)]))),(a=>!D(a[1])))))(),t=await(async()=>o?(await d(l,W))[H]:{})();return D(a)&&f(t)?void 0:[a,t]}))),(async(a,t)=>await T((async()=>{if(await E(),f(t)){const[t,e]=a();await v(t),await A(e)}else{const[a,e]=t();await v(a,!0),await A(e,!0)}}))),e,s,n,u)},ta="json",ea="autoLoadIntervalSeconds",sa="rowIdColumnName",na="tableId",ia="tableName",ca={mode:ta,[ea]:1},oa={load:0,save:0,[ia]:e+"_values"},ra=(a,t,e,s)=>{const n=I();return C(a,((a,i)=>{const c=w(g(S(t,T(a)?{[e]:a}:a)),0,b(t));f(c[0])||s(i,c[0])||P(n,i,c)})),n},la="pragma ",ya="data_version",wa="schema_version",ua=(a,t,s,n,i,c,o,r)=>{let l,y;const[u,E,d,f]=(a=>{const t=(a=>S(ca,T(a)?{storeTableName:a}:a??{}))(a),s=t[ea];if(t.mode==ta){const{storeTableName:a=e}=t;return[1,s,[a],j(a)]}const{tables:{load:n={},save:i={}}={},values:c={}}=t,o=w(g(S(oa,c)),0,b(oa)),r=o[2],l=j(r);return[0,s,[ra(n,{[na]:null,[sa]:W},na,(a=>x(l,a)&&a==r)),ra(i,{[ia]:null,[sa]:W,deleteEmptyColumns:0,deleteEmptyTable:0},ia,((a,t)=>x(l,t)&&t==r)),o],l]})(t);return(u?Z:aa)(a,c?async(a,t)=>(c(a,t),await s(a,t)):s,(a=>[setInterval((async()=>{try{const t=(await s(la+ya))[0][ya],e=(await s(la+wa))[0][wa];t==(l??=t)&&e==(y??=e)||(a(),l=t,y=e)}catch{}}),1e3*E),n((t=>f.has(t)?a():0))]),(([a,t])=>{clearInterval(a),l=y=null,i(t)}),o,d,A(f),r)},Ea="change";a.createSqlite3Persister=(a,t,e,s,n)=>ua(a,e,(async(a,e=[])=>{return await(s=(s,n)=>t.all(a,e,((a,t)=>a?n(a):s(t.map((a=>({...a})))))),new E(s));var s}),(a=>{const e=(t,e,s)=>a(s);return t.on(Ea,e),e}),(a=>t.off(Ea,a)),s,n,t)},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((a="undefined"!=typeof globalThis?globalThis:a||self).TinyBasePersisterSqlite3={});
@@ -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),c=Object,i=c.keys,r=c.freeze,d=(t=[])=>c.fromEntries(t),l=(t,e)=>!n(((t,e)=>o(t,(t=>t[e])))(t,e)),u=(t,e)=>((t,e)=>t.map(e))(c.entries(t),(([t,s])=>e(s,t))),y=t=>(t=>t instanceof c&&t.constructor==c)(t)&&0==(t=>s(i(t)))(t),g=(t,e,s)=>(l(t,e)||(t[e]=s()),t[e]),f=(t,e)=>((t,e)=>t?.forEach(e))(t,((t,s)=>e(s,t))),p="t",h="delete",v=t=>[t.get(p),t.get("v")],w=(t,s,a,o)=>{const c=n(s)?t:t.get(s)??t.set(s,new e.Map);let i;return u(a,((t,e)=>{o(c,e,t)&&(i=1)})),c.forEach(((t,e)=>{l(a,e)||(c.delete(e),i=1)})),n(s)||c.size||t.delete(s),i};t.createYjsPersister=(t,c,i="tinybase")=>{const l=c.getMap(i);return((t,i,S,A,b)=>{let j,O,J,L=0,N=0,C=0;const T=[],m=async t=>(2!=L&&(L=1,await z.schedule((async()=>{await t(),L=0}))),z),z={load:async(e,s)=>await m((async()=>{try{t.setContent(await i())}catch{t.setContent([e,s])}})),startAutoLoad:async(e={},n={})=>(z.stopAutoLoad(),await z.load(e,n),C=1,J=(t=>{const e=e=>t(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[c,i]=v(t),r={},l={};return((t,e)=>{t.forEach((({path:t,changes:{keys:e}})=>a(t)==p?o(a(t),(s=>{const n=g(r,s,d),i=c.get(s);o(a(t),(t=>{const s=g(n,t,d),a=i.get(t);f(e,((t,{action:e})=>s[t]=e==h?null:a.get(t)))}),(()=>f(e,((t,{action:e})=>n[t]=e==h?null:i.get(t)?.toJSON()))))}),(()=>f(e,((t,{action:e})=>r[t]=e==h?null:c.get(t)?.toJSON())))):f(e,((t,{action:e})=>l[t]=e==h?null:i.get(t)))))})(e),[r,l]})(l,e)));return l.observeDeep(e),e})((async(e,s)=>await m((async()=>{if(s)t.setTransactionChanges(s());else try{t.setContent(e?.()??await i())}catch{}})))),z),stopAutoLoad:()=>{return C&&(t=J,l.unobserveDeep(t),J=void 0,C=0),z;var t},save:async s=>(1!=L&&(L=2,await z.schedule((async()=>{try{await(async(t,s)=>c.transact((()=>((t,s,a)=>{(t=>{t.size||(t.set(p,new e.Map),t.set("v",new e.Map))})(t);const[c,i]=v(t),r=()=>{d=1};let d=1;if(o(a?.(),(([t,e])=>{d=0,u(t,((t,e)=>d?0:n(t)?c.delete(e):o(c.get(e),(e=>u(t,((t,s)=>d?0:n(t)?e.delete(s):o(e.get(s),(e=>u(t,((t,s)=>n(t)?e.delete(s):e.set(s,t)))),r)))),r))),u(e,((t,e)=>d?0:n(t)?i.delete(e):i.set(e,t)))})),d){const[t,e]=s();w(c,void 0,t,((t,e,s)=>w(c,e,s,((t,e,s)=>w(t,e,s,((t,e,s)=>{if(t.get(e)!==s)return t.set(e,s),1})))))),w(i,void 0,e,((t,e,s)=>{i.get(e)!==s&&i.set(e,s)}))}})(l,t,s))))(t.getContent,s)}catch{}L=0}))),z),startAutoSave:async()=>(await z.stopAutoSave().save(),j=t.addDidFinishTransactionListener(((t,e)=>{const[s,a]=e();y(s)&&y(a)||z.save((()=>[s,a]))})),z),stopAutoSave:()=>(o(j,t.delListener),z),schedule:async(...t)=>(((t,...e)=>{t.push(...e)})(T,...t),await(async()=>{if(!N){for(N=1;!n(O=a(T));)try{await O()}catch{}N=0}})(),z),getStore:()=>t,destroy:()=>z.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return r(z)})(t,(async()=>l.size?[l.get(p).toJSON(),l.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),c=Object,r=c.keys,i=c.freeze,d=(t=[])=>c.fromEntries(t),l=(t,e)=>!n(((t,e)=>o(t,(t=>t[e])))(t,e)),u=(t,e)=>((t,e)=>t.map(e))(c.entries(t),(([t,s])=>e(s,t))),y=t=>(t=>t instanceof c&&t.constructor==c)(t)&&0==(t=>s(r(t)))(t),g=(t,e,s)=>(l(t,e)||(t[e]=s()),t[e]),f=t=>new Map(t),p=(t,e)=>t?.get(e),h=(t,e)=>((t,e)=>t?.forEach(e))(t,((t,s)=>e(s,t))),v=(t,e,s)=>{return n(s)?(a=t,o=e,a?.delete(o),t):t?.set(e,s);var a,o},w=(t,e,s)=>{var a,n;return a=t,n=e,a?.has(n)||v(t,e,s()),p(t,e)},S=f(),A=f(),b="t",j="delete",O=t=>[t.get(b),t.get("v")],J=(t,s,a,o)=>{const c=n(s)?t:t.get(s)??t.set(s,new e.Map);let r;return u(a,((t,e)=>{o(c,e,t)&&(r=1)})),c.forEach(((t,e)=>{l(a,e)||(c.delete(e),r=1)})),n(s)||c.size||t.delete(s),r};t.createYjsPersister=(t,c,r="tinybase",l)=>{const f=c.getMap(r);return((t,e,s,c,r,d,l=[])=>{let u,g,f,h=0,b=0;w(S,l,(()=>0)),w(A,l,(()=>[]));const j=async t=>(2!=h&&(h=1,await O.schedule((async()=>{await t(),h=0}))),O),O={load:async(s,a)=>await j((async()=>{try{t.setContent(await e())}catch{t.setContent([s,a])}})),startAutoLoad:async(s={},a={})=>(O.stopAutoLoad(),await O.load(s,a),b=1,f=c((async(s,a)=>{if(a){const e=a();await j((async()=>t.setTransactionChanges(e)))}else await j((async()=>{try{t.setContent(s?.()??await e())}catch(t){d?.(t)}}))})),O),stopAutoLoad:()=>(b&&(r(f),f=void 0,b=0),O),save:async e=>(1!=h&&(h=2,await O.schedule((async()=>{try{await s(t.getContent,e)}catch(t){d?.(t)}h=0}))),O),startAutoSave:async()=>(await O.stopAutoSave().save(),u=t.addDidFinishTransactionListener(((t,e)=>{const[s,a]=e();y(s)&&y(a)||O.save((()=>[s,a]))})),O),stopAutoSave:()=>(o(u,t.delListener),O),schedule:async(...t)=>(((t,...e)=>{t.push(...e)})(p(A,l),...t),await(async()=>{if(!p(S,l)){for(v(S,l,1);!n(g=a(p(A,l)));)try{await g()}catch(t){d?.(t)}v(S,l,0)}})(),O),getStore:()=>t,destroy:()=>O.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return i(O)})(t,(async()=>f.size?[f.get(b).toJSON(),f.get("v").toJSON()]:void 0),(async(t,s)=>c.transact((()=>((t,s,a)=>{(t=>{t.size||(t.set(b,new e.Map),t.set("v",new e.Map))})(t);const[c,r]=O(t),i=()=>{d=1};let d=1;if(o(a?.(),(([t,e])=>{d=0,u(t,((t,e)=>d?0:n(t)?c.delete(e):o(c.get(e),(e=>u(t,((t,s)=>d?0:n(t)?e.delete(s):o(e.get(s),(e=>u(t,((t,s)=>n(t)?e.delete(s):e.set(s,t)))),i)))),i))),u(e,((t,e)=>d?0:n(t)?r.delete(e):r.set(e,t)))})),d){const[t,e]=s();J(c,void 0,t,((t,e,s)=>J(c,e,s,((t,e,s)=>J(t,e,s,((t,e,s)=>{if(t.get(e)!==s)return t.set(e,s),1})))))),J(r,void 0,e,((t,e,s)=>{r.get(e)!==s&&r.set(e,s)}))}})(f,t,s)))),(t=>{const e=e=>t(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[c,r]=O(t),i={},l={};return((t,e)=>{t.forEach((({path:t,changes:{keys:e}})=>a(t)==b?o(a(t),(s=>{const n=g(i,s,d),r=c.get(s);o(a(t),(t=>{const s=g(n,t,d),a=r.get(t);h(e,((t,{action:e})=>s[t]=e==j?null:a.get(t)))}),(()=>h(e,((t,{action:e})=>n[t]=e==j?null:r.get(t)?.toJSON()))))}),(()=>h(e,((t,{action:e})=>i[t]=e==j?null:c.get(t)?.toJSON())))):h(e,((t,{action:e})=>l[t]=e==j?null:r.get(t)))))})(e),[i,l]})(f,e)));return f.observeDeep(e),e}),(t=>{f.unobserveDeep(t)}),l)}},"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 +1 @@
1
- var t,e;t=this,e=function(t){"use strict";const e=t=>null==t,a=Object,s=a.keys,n=a.freeze,o=t=>(t=>t instanceof a&&t.constructor==a)(t)&&0==(t=>s(t).length)(t);t.createCustomPersister=(t,a,s,i,c)=>{let r,d,u,y=0,f=0,l=0;const h=[],p=async t=>(2!=y&&(y=1,await w.schedule((async()=>{await t(),y=0}))),w),w={load:async(e,s)=>await p((async()=>{try{t.setContent(await a())}catch{t.setContent([e,s])}})),startAutoLoad:async(e={},s={})=>(w.stopAutoLoad(),await w.load(e,s),l=1,u=i((async(e,s)=>await p((async()=>{if(s)t.setTransactionChanges(s());else try{t.setContent(e?.()??await a())}catch{}})))),w),stopAutoLoad:()=>(l&&(c(u),u=void 0,l=0),w),save:async e=>(1!=y&&(y=2,await w.schedule((async()=>{try{await s(t.getContent,e)}catch{}y=0}))),w),startAutoSave:async()=>(await w.stopAutoSave().save(),r=t.addDidFinishTransactionListener(((t,e)=>{const[a,s]=e();o(a)&&o(s)||w.save((()=>[a,s]))})),w),stopAutoSave:()=>{var a,s;return a=r,s=t.delListener,e(a)||s(a),w},schedule:async(...t)=>(((t,...e)=>{t.push(...e)})(h,...t),await(async()=>{if(!f){for(f=1;!e((t=h,d=t.shift()));)try{await d()}catch{}f=0}var t})(),w),getStore:()=>t,destroy:()=>w.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return n(w)}},"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=t=>null==t,a=Object,s=a.keys,n=a.freeze,o=t=>(t=>t instanceof a&&t.constructor==a)(t)&&0==(t=>s(t).length)(t),c=t=>new Map(t),i=(t,e)=>t?.get(e),r=(t,a,s)=>{return e(s)?(n=t,o=a,n?.delete(o),t):t?.set(a,s);var n,o},d=(t,e,a)=>{var s,n;return s=t,n=e,s?.has(n)||r(t,e,a()),i(t,e)},u=c(),y=c();t.createCustomPersister=(t,a,s,c,f,l,h=[])=>{let p,w,v,g=0,A=0;d(u,h,(()=>0)),d(y,h,(()=>[]));const C=async t=>(2!=g&&(g=1,await L.schedule((async()=>{await t(),g=0}))),L),L={load:async(e,s)=>await C((async()=>{try{t.setContent(await a())}catch{t.setContent([e,s])}})),startAutoLoad:async(e={},s={})=>(L.stopAutoLoad(),await L.load(e,s),A=1,v=c((async(e,s)=>{if(s){const e=s();await C((async()=>t.setTransactionChanges(e)))}else await C((async()=>{try{t.setContent(e?.()??await a())}catch(t){l?.(t)}}))})),L),stopAutoLoad:()=>(A&&(f(v),v=void 0,A=0),L),save:async e=>(1!=g&&(g=2,await L.schedule((async()=>{try{await s(t.getContent,e)}catch(t){l?.(t)}g=0}))),L),startAutoSave:async()=>(await L.stopAutoSave().save(),p=t.addDidFinishTransactionListener(((t,e)=>{const[a,s]=e();o(a)&&o(s)||L.save((()=>[a,s]))})),L),stopAutoSave:()=>{var a,s;return a=p,s=t.delListener,e(a)||s(a),L},schedule:async(...t)=>(((t,...e)=>{t.push(...e)})(i(y,h),...t),await(async()=>{if(!i(u,h)){for(r(u,h,1);!e((t=i(y,h),w=t.shift()));)try{await w()}catch(t){l?.(t)}r(u,h,0)}var t})(),L),getStore:()=>t,destroy:()=>L.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return n(L)}},"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={});