tinybase 9.4.0-beta.1 → 9.4.0

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 (239) hide show
  1. package/@types/persisters/index.d.ts +4 -0
  2. package/@types/persisters/persister-durable-object-sql-storage/index.d.ts +9 -2
  3. package/@types/persisters/persister-durable-object-sql-storage/with-schemas/index.d.ts +9 -2
  4. package/@types/persisters/with-schemas/index.d.ts +4 -0
  5. package/@types/queries/index.d.ts +4 -0
  6. package/@types/queries/with-schemas/index.d.ts +4 -0
  7. package/@types/synchronizers/synchronizer-ws-client/index.d.ts +7 -3
  8. package/@types/synchronizers/synchronizer-ws-client/with-schemas/index.d.ts +7 -3
  9. package/@types/synchronizers/synchronizer-ws-server/index.d.ts +9 -3
  10. package/@types/synchronizers/synchronizer-ws-server/with-schemas/index.d.ts +9 -3
  11. package/@types/synchronizers/synchronizer-ws-server-simple/index.d.ts +6 -3
  12. package/@types/synchronizers/synchronizer-ws-server-simple/with-schemas/index.d.ts +6 -3
  13. package/@types/ui-react-dom/index.d.ts +10 -10
  14. package/@types/ui-react-dom/with-schemas/index.d.ts +10 -10
  15. package/@types/ui-react-dom-charts/index.d.ts +7 -7
  16. package/@types/ui-react-dom-charts/with-schemas/index.d.ts +7 -7
  17. package/@types/ui-react-inspector/index.d.ts +1 -1
  18. package/@types/ui-react-inspector/with-schemas/index.d.ts +1 -1
  19. package/@types/ui-solid-dom/index.d.ts +10 -10
  20. package/@types/ui-solid-dom/with-schemas/index.d.ts +10 -10
  21. package/@types/ui-solid-inspector/index.d.ts +1 -1
  22. package/@types/ui-solid-inspector/with-schemas/index.d.ts +1 -1
  23. package/@types/ui-svelte-dom/index.d.ts +10 -10
  24. package/@types/ui-svelte-dom/with-schemas/index.d.ts +10 -10
  25. package/@types/ui-svelte-inspector/index.d.ts +1 -1
  26. package/@types/ui-svelte-inspector/with-schemas/index.d.ts +1 -1
  27. package/index.js +191 -74
  28. package/min/index.js +1 -1
  29. package/min/index.js.gz +0 -0
  30. package/min/omni/index.js +1 -1
  31. package/min/omni/index.js.gz +0 -0
  32. package/min/omni/with-schemas/index.js +1 -1
  33. package/min/omni/with-schemas/index.js.gz +0 -0
  34. package/min/persisters/index.js +1 -1
  35. package/min/persisters/index.js.gz +0 -0
  36. package/min/persisters/persister-automerge/index.js +1 -1
  37. package/min/persisters/persister-automerge/index.js.gz +0 -0
  38. package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
  39. package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
  40. package/min/persisters/persister-browser/index.js +1 -1
  41. package/min/persisters/persister-browser/index.js.gz +0 -0
  42. package/min/persisters/persister-browser/with-schemas/index.js +1 -1
  43. package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
  44. package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  45. package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  46. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  47. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  48. package/min/persisters/persister-durable-object-sql-storage/index.js +1 -1
  49. package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
  50. package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -1
  51. package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
  52. package/min/persisters/persister-durable-object-storage/index.js +1 -1
  53. package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
  54. package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
  55. package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
  56. package/min/persisters/persister-electric-sql/index.js +1 -1
  57. package/min/persisters/persister-electric-sql/index.js.gz +0 -0
  58. package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  59. package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  60. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  61. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  62. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  63. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  64. package/min/persisters/persister-file/index.js +1 -1
  65. package/min/persisters/persister-file/index.js.gz +0 -0
  66. package/min/persisters/persister-file/with-schemas/index.js +1 -1
  67. package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
  68. package/min/persisters/persister-indexed-db/index.js +1 -1
  69. package/min/persisters/persister-indexed-db/index.js.gz +0 -0
  70. package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
  71. package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
  72. package/min/persisters/persister-libsql/index.js +1 -1
  73. package/min/persisters/persister-libsql/index.js.gz +0 -0
  74. package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  75. package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  76. package/min/persisters/persister-partykit-client/index.js +1 -1
  77. package/min/persisters/persister-partykit-client/index.js.gz +0 -0
  78. package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
  79. package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
  80. package/min/persisters/persister-pglite/index.js +1 -1
  81. package/min/persisters/persister-pglite/index.js.gz +0 -0
  82. package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
  83. package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
  84. package/min/persisters/persister-postgres/index.js +1 -1
  85. package/min/persisters/persister-postgres/index.js.gz +0 -0
  86. package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
  87. package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
  88. package/min/persisters/persister-powersync/index.js +1 -1
  89. package/min/persisters/persister-powersync/index.js.gz +0 -0
  90. package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  91. package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  92. package/min/persisters/persister-react-native-mmkv/index.js +1 -1
  93. package/min/persisters/persister-react-native-mmkv/index.js.gz +0 -0
  94. package/min/persisters/persister-react-native-mmkv/with-schemas/index.js +1 -1
  95. package/min/persisters/persister-react-native-mmkv/with-schemas/index.js.gz +0 -0
  96. package/min/persisters/persister-react-native-sqlite/index.js +1 -1
  97. package/min/persisters/persister-react-native-sqlite/index.js.gz +0 -0
  98. package/min/persisters/persister-react-native-sqlite/with-schemas/index.js +1 -1
  99. package/min/persisters/persister-react-native-sqlite/with-schemas/index.js.gz +0 -0
  100. package/min/persisters/persister-remote/index.js +1 -1
  101. package/min/persisters/persister-remote/index.js.gz +0 -0
  102. package/min/persisters/persister-remote/with-schemas/index.js +1 -1
  103. package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
  104. package/min/persisters/persister-sqlite-bun/index.js +1 -1
  105. package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
  106. package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
  107. package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
  108. package/min/persisters/persister-sqlite-wasm/index.js +1 -1
  109. package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  110. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  111. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  112. package/min/persisters/persister-sqlite3/index.js +1 -1
  113. package/min/persisters/persister-sqlite3/index.js.gz +0 -0
  114. package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  115. package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  116. package/min/persisters/persister-yjs/index.js +1 -1
  117. package/min/persisters/persister-yjs/index.js.gz +0 -0
  118. package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
  119. package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
  120. package/min/persisters/with-schemas/index.js +1 -1
  121. package/min/persisters/with-schemas/index.js.gz +0 -0
  122. package/min/queries/index.js +1 -1
  123. package/min/queries/index.js.gz +0 -0
  124. package/min/queries/with-schemas/index.js +1 -1
  125. package/min/queries/with-schemas/index.js.gz +0 -0
  126. package/min/synchronizers/index.js +1 -1
  127. package/min/synchronizers/index.js.gz +0 -0
  128. package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
  129. package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
  130. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
  131. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
  132. package/min/synchronizers/synchronizer-local/index.js +1 -1
  133. package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
  134. package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  135. package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
  136. package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  137. package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  138. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  139. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  140. package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  141. package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  142. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  143. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  144. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
  145. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
  146. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
  147. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
  148. package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
  149. package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
  150. package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
  151. package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
  152. package/min/synchronizers/with-schemas/index.js +1 -1
  153. package/min/synchronizers/with-schemas/index.js.gz +0 -0
  154. package/min/ui-react-inspector/index.js +1 -1
  155. package/min/ui-react-inspector/index.js.gz +0 -0
  156. package/min/ui-react-inspector/with-schemas/index.js +1 -1
  157. package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
  158. package/min/ui-solid-inspector/index.js +1 -1
  159. package/min/ui-solid-inspector/index.js.gz +0 -0
  160. package/min/ui-solid-inspector/with-schemas/index.js +1 -1
  161. package/min/ui-solid-inspector/with-schemas/index.js.gz +0 -0
  162. package/min/ui-svelte-inspector/index.js +1 -1
  163. package/min/ui-svelte-inspector/index.js.gz +0 -0
  164. package/min/ui-svelte-inspector/with-schemas/index.js +1 -1
  165. package/min/ui-svelte-inspector/with-schemas/index.js.gz +0 -0
  166. package/min/with-schemas/index.js +1 -1
  167. package/min/with-schemas/index.js.gz +0 -0
  168. package/omni/index.js +606 -179
  169. package/omni/with-schemas/index.js +606 -179
  170. package/package.json +12 -8
  171. package/persisters/index.js +49 -10
  172. package/persisters/persister-automerge/index.js +29 -5
  173. package/persisters/persister-automerge/with-schemas/index.js +29 -5
  174. package/persisters/persister-browser/index.js +29 -5
  175. package/persisters/persister-browser/with-schemas/index.js +29 -5
  176. package/persisters/persister-cr-sqlite-wasm/index.js +29 -5
  177. package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +29 -5
  178. package/persisters/persister-durable-object-sql-storage/index.js +44 -8
  179. package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +44 -8
  180. package/persisters/persister-durable-object-storage/index.js +31 -5
  181. package/persisters/persister-durable-object-storage/with-schemas/index.js +31 -5
  182. package/persisters/persister-electric-sql/index.js +29 -5
  183. package/persisters/persister-electric-sql/with-schemas/index.js +29 -5
  184. package/persisters/persister-expo-sqlite/index.js +29 -5
  185. package/persisters/persister-expo-sqlite/with-schemas/index.js +29 -5
  186. package/persisters/persister-file/index.js +31 -5
  187. package/persisters/persister-file/with-schemas/index.js +31 -5
  188. package/persisters/persister-indexed-db/index.js +29 -5
  189. package/persisters/persister-indexed-db/with-schemas/index.js +29 -5
  190. package/persisters/persister-libsql/index.js +29 -5
  191. package/persisters/persister-libsql/with-schemas/index.js +29 -5
  192. package/persisters/persister-partykit-client/index.js +31 -5
  193. package/persisters/persister-partykit-client/with-schemas/index.js +31 -5
  194. package/persisters/persister-pglite/index.js +49 -10
  195. package/persisters/persister-pglite/with-schemas/index.js +49 -10
  196. package/persisters/persister-postgres/index.js +49 -10
  197. package/persisters/persister-postgres/with-schemas/index.js +49 -10
  198. package/persisters/persister-powersync/index.js +29 -5
  199. package/persisters/persister-powersync/with-schemas/index.js +29 -5
  200. package/persisters/persister-react-native-mmkv/index.js +31 -5
  201. package/persisters/persister-react-native-mmkv/with-schemas/index.js +31 -5
  202. package/persisters/persister-react-native-sqlite/index.js +29 -5
  203. package/persisters/persister-react-native-sqlite/with-schemas/index.js +29 -5
  204. package/persisters/persister-remote/index.js +31 -5
  205. package/persisters/persister-remote/with-schemas/index.js +31 -5
  206. package/persisters/persister-sqlite-bun/index.js +29 -5
  207. package/persisters/persister-sqlite-bun/with-schemas/index.js +29 -5
  208. package/persisters/persister-sqlite-wasm/index.js +29 -5
  209. package/persisters/persister-sqlite-wasm/with-schemas/index.js +29 -5
  210. package/persisters/persister-sqlite3/index.js +29 -5
  211. package/persisters/persister-sqlite3/with-schemas/index.js +29 -5
  212. package/persisters/persister-yjs/index.js +29 -5
  213. package/persisters/persister-yjs/with-schemas/index.js +29 -5
  214. package/persisters/with-schemas/index.js +49 -10
  215. package/queries/index.js +205 -74
  216. package/queries/with-schemas/index.js +205 -74
  217. package/readme.md +14 -14
  218. package/releases.md +84 -67
  219. package/synchronizers/index.js +31 -5
  220. package/synchronizers/synchronizer-broadcast-channel/index.js +39 -13
  221. package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +39 -13
  222. package/synchronizers/synchronizer-local/index.js +31 -5
  223. package/synchronizers/synchronizer-local/with-schemas/index.js +31 -5
  224. package/synchronizers/synchronizer-ws-client/index.js +220 -61
  225. package/synchronizers/synchronizer-ws-client/with-schemas/index.js +220 -61
  226. package/synchronizers/synchronizer-ws-server/index.js +253 -73
  227. package/synchronizers/synchronizer-ws-server/with-schemas/index.js +253 -73
  228. package/synchronizers/synchronizer-ws-server-durable-object/index.js +88 -40
  229. package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +88 -40
  230. package/synchronizers/synchronizer-ws-server-simple/index.js +184 -60
  231. package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +184 -60
  232. package/synchronizers/with-schemas/index.js +31 -5
  233. package/ui-react-inspector/index.js +29 -5
  234. package/ui-react-inspector/with-schemas/index.js +29 -5
  235. package/ui-solid-inspector/index.js +29 -5
  236. package/ui-solid-inspector/with-schemas/index.js +29 -5
  237. package/ui-svelte-inspector/index.js +29 -5
  238. package/ui-svelte-inspector/with-schemas/index.js +29 -5
  239. package/with-schemas/index.js +191 -74
@@ -826,11 +826,35 @@ const createCustomPersister = (
826
826
  initialContent,
827
827
  startSaveFirst = false,
828
828
  ) => {
829
- const [call1, call2] = startSaveFirst
830
- ? [startAutoSave, startAutoLoad]
831
- : [startAutoLoad, startAutoSave];
832
- await call1(initialContent);
833
- await call2(initialContent);
829
+ const [call1, call2, stop1, stop2] = startSaveFirst
830
+ ? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
831
+ : [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
832
+ const start1 = call1(initialContent);
833
+ const generation1 = startSaveFirst
834
+ ? autoSaveGeneration
835
+ : autoLoadGeneration;
836
+ await start1;
837
+ const start2 = call2(initialContent);
838
+ const generation2 = startSaveFirst
839
+ ? autoLoadGeneration
840
+ : autoSaveGeneration;
841
+ try {
842
+ await start2;
843
+ } catch (error) {
844
+ if (
845
+ generation2 ==
846
+ (startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
847
+ ) {
848
+ await tryCatchIgnore(stop2);
849
+ }
850
+ if (
851
+ generation1 ==
852
+ (startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
853
+ ) {
854
+ await tryCatchIgnore(stop1);
855
+ }
856
+ throw error;
857
+ }
834
858
  return persister;
835
859
  };
836
860
  const stopAutoPersisting = async (stopSaveFirst = false) => {
@@ -828,11 +828,35 @@ const createCustomPersister = (
828
828
  initialContent,
829
829
  startSaveFirst = false,
830
830
  ) => {
831
- const [call1, call2] = startSaveFirst
832
- ? [startAutoSave, startAutoLoad]
833
- : [startAutoLoad, startAutoSave];
834
- await call1(initialContent);
835
- await call2(initialContent);
831
+ const [call1, call2, stop1, stop2] = startSaveFirst
832
+ ? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
833
+ : [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
834
+ const start1 = call1(initialContent);
835
+ const generation1 = startSaveFirst
836
+ ? autoSaveGeneration
837
+ : autoLoadGeneration;
838
+ await start1;
839
+ const start2 = call2(initialContent);
840
+ const generation2 = startSaveFirst
841
+ ? autoLoadGeneration
842
+ : autoSaveGeneration;
843
+ try {
844
+ await start2;
845
+ } catch (error) {
846
+ if (
847
+ generation2 ==
848
+ (startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
849
+ ) {
850
+ await tryCatchIgnore(stop2);
851
+ }
852
+ if (
853
+ generation1 ==
854
+ (startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
855
+ ) {
856
+ await tryCatchIgnore(stop1);
857
+ }
858
+ throw error;
859
+ }
836
860
  return persister;
837
861
  };
838
862
  const stopAutoPersisting = async (stopSaveFirst = false) => {
@@ -828,11 +828,35 @@ const createCustomPersister = (
828
828
  initialContent,
829
829
  startSaveFirst = false,
830
830
  ) => {
831
- const [call1, call2] = startSaveFirst
832
- ? [startAutoSave, startAutoLoad]
833
- : [startAutoLoad, startAutoSave];
834
- await call1(initialContent);
835
- await call2(initialContent);
831
+ const [call1, call2, stop1, stop2] = startSaveFirst
832
+ ? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
833
+ : [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
834
+ const start1 = call1(initialContent);
835
+ const generation1 = startSaveFirst
836
+ ? autoSaveGeneration
837
+ : autoLoadGeneration;
838
+ await start1;
839
+ const start2 = call2(initialContent);
840
+ const generation2 = startSaveFirst
841
+ ? autoLoadGeneration
842
+ : autoSaveGeneration;
843
+ try {
844
+ await start2;
845
+ } catch (error) {
846
+ if (
847
+ generation2 ==
848
+ (startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
849
+ ) {
850
+ await tryCatchIgnore(stop2);
851
+ }
852
+ if (
853
+ generation1 ==
854
+ (startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
855
+ ) {
856
+ await tryCatchIgnore(stop1);
857
+ }
858
+ throw error;
859
+ }
836
860
  return persister;
837
861
  };
838
862
  const stopAutoPersisting = async (stopSaveFirst = false) => {
@@ -169,6 +169,8 @@ const tryCatch = async (action, onError) => {
169
169
  onError?.(error);
170
170
  }
171
171
  };
172
+ const tryCatchIgnore = (action, onIgnoredError) =>
173
+ tryCatch(action, (error) => void tryCatch(() => onIgnoredError?.(error)));
172
174
  const tryCatchSync = (action, onError) => {
173
175
  try {
174
176
  return action();
@@ -653,11 +655,35 @@ const createCustomPersister = (
653
655
  initialContent,
654
656
  startSaveFirst = false,
655
657
  ) => {
656
- const [call1, call2] = startSaveFirst
657
- ? [startAutoSave, startAutoLoad]
658
- : [startAutoLoad, startAutoSave];
659
- await call1(initialContent);
660
- await call2(initialContent);
658
+ const [call1, call2, stop1, stop2] = startSaveFirst
659
+ ? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
660
+ : [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
661
+ const start1 = call1(initialContent);
662
+ const generation1 = startSaveFirst
663
+ ? autoSaveGeneration
664
+ : autoLoadGeneration;
665
+ await start1;
666
+ const start2 = call2(initialContent);
667
+ const generation2 = startSaveFirst
668
+ ? autoLoadGeneration
669
+ : autoSaveGeneration;
670
+ try {
671
+ await start2;
672
+ } catch (error) {
673
+ if (
674
+ generation2 ==
675
+ (startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
676
+ ) {
677
+ await tryCatchIgnore(stop2);
678
+ }
679
+ if (
680
+ generation1 ==
681
+ (startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
682
+ ) {
683
+ await tryCatchIgnore(stop1);
684
+ }
685
+ throw error;
686
+ }
661
687
  return persister;
662
688
  };
663
689
  const stopAutoPersisting = async (stopSaveFirst = false) => {
@@ -169,6 +169,8 @@ const tryCatch = async (action, onError) => {
169
169
  onError?.(error);
170
170
  }
171
171
  };
172
+ const tryCatchIgnore = (action, onIgnoredError) =>
173
+ tryCatch(action, (error) => void tryCatch(() => onIgnoredError?.(error)));
172
174
  const tryCatchSync = (action, onError) => {
173
175
  try {
174
176
  return action();
@@ -653,11 +655,35 @@ const createCustomPersister = (
653
655
  initialContent,
654
656
  startSaveFirst = false,
655
657
  ) => {
656
- const [call1, call2] = startSaveFirst
657
- ? [startAutoSave, startAutoLoad]
658
- : [startAutoLoad, startAutoSave];
659
- await call1(initialContent);
660
- await call2(initialContent);
658
+ const [call1, call2, stop1, stop2] = startSaveFirst
659
+ ? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
660
+ : [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
661
+ const start1 = call1(initialContent);
662
+ const generation1 = startSaveFirst
663
+ ? autoSaveGeneration
664
+ : autoLoadGeneration;
665
+ await start1;
666
+ const start2 = call2(initialContent);
667
+ const generation2 = startSaveFirst
668
+ ? autoLoadGeneration
669
+ : autoSaveGeneration;
670
+ try {
671
+ await start2;
672
+ } catch (error) {
673
+ if (
674
+ generation2 ==
675
+ (startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
676
+ ) {
677
+ await tryCatchIgnore(stop2);
678
+ }
679
+ if (
680
+ generation1 ==
681
+ (startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
682
+ ) {
683
+ await tryCatchIgnore(stop1);
684
+ }
685
+ throw error;
686
+ }
661
687
  return persister;
662
688
  };
663
689
  const stopAutoPersisting = async (stopSaveFirst = false) => {
@@ -613,11 +613,35 @@ const createCustomPersister = (
613
613
  initialContent,
614
614
  startSaveFirst = false,
615
615
  ) => {
616
- const [call1, call2] = startSaveFirst
617
- ? [startAutoSave, startAutoLoad]
618
- : [startAutoLoad, startAutoSave];
619
- await call1(initialContent);
620
- await call2(initialContent);
616
+ const [call1, call2, stop1, stop2] = startSaveFirst
617
+ ? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
618
+ : [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
619
+ const start1 = call1(initialContent);
620
+ const generation1 = startSaveFirst
621
+ ? autoSaveGeneration
622
+ : autoLoadGeneration;
623
+ await start1;
624
+ const start2 = call2(initialContent);
625
+ const generation2 = startSaveFirst
626
+ ? autoLoadGeneration
627
+ : autoSaveGeneration;
628
+ try {
629
+ await start2;
630
+ } catch (error) {
631
+ if (
632
+ generation2 ==
633
+ (startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
634
+ ) {
635
+ await tryCatchIgnore(stop2);
636
+ }
637
+ if (
638
+ generation1 ==
639
+ (startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
640
+ ) {
641
+ await tryCatchIgnore(stop1);
642
+ }
643
+ throw error;
644
+ }
621
645
  return persister;
622
646
  };
623
647
  const stopAutoPersisting = async (stopSaveFirst = false) => {
@@ -613,11 +613,35 @@ const createCustomPersister = (
613
613
  initialContent,
614
614
  startSaveFirst = false,
615
615
  ) => {
616
- const [call1, call2] = startSaveFirst
617
- ? [startAutoSave, startAutoLoad]
618
- : [startAutoLoad, startAutoSave];
619
- await call1(initialContent);
620
- await call2(initialContent);
616
+ const [call1, call2, stop1, stop2] = startSaveFirst
617
+ ? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
618
+ : [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
619
+ const start1 = call1(initialContent);
620
+ const generation1 = startSaveFirst
621
+ ? autoSaveGeneration
622
+ : autoLoadGeneration;
623
+ await start1;
624
+ const start2 = call2(initialContent);
625
+ const generation2 = startSaveFirst
626
+ ? autoLoadGeneration
627
+ : autoSaveGeneration;
628
+ try {
629
+ await start2;
630
+ } catch (error) {
631
+ if (
632
+ generation2 ==
633
+ (startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
634
+ ) {
635
+ await tryCatchIgnore(stop2);
636
+ }
637
+ if (
638
+ generation1 ==
639
+ (startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
640
+ ) {
641
+ await tryCatchIgnore(stop1);
642
+ }
643
+ throw error;
644
+ }
621
645
  return persister;
622
646
  };
623
647
  const stopAutoPersisting = async (stopSaveFirst = false) => {
@@ -826,11 +826,35 @@ const createCustomPersister = (
826
826
  initialContent,
827
827
  startSaveFirst = false,
828
828
  ) => {
829
- const [call1, call2] = startSaveFirst
830
- ? [startAutoSave, startAutoLoad]
831
- : [startAutoLoad, startAutoSave];
832
- await call1(initialContent);
833
- await call2(initialContent);
829
+ const [call1, call2, stop1, stop2] = startSaveFirst
830
+ ? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
831
+ : [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
832
+ const start1 = call1(initialContent);
833
+ const generation1 = startSaveFirst
834
+ ? autoSaveGeneration
835
+ : autoLoadGeneration;
836
+ await start1;
837
+ const start2 = call2(initialContent);
838
+ const generation2 = startSaveFirst
839
+ ? autoLoadGeneration
840
+ : autoSaveGeneration;
841
+ try {
842
+ await start2;
843
+ } catch (error) {
844
+ if (
845
+ generation2 ==
846
+ (startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
847
+ ) {
848
+ await tryCatchIgnore(stop2);
849
+ }
850
+ if (
851
+ generation1 ==
852
+ (startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
853
+ ) {
854
+ await tryCatchIgnore(stop1);
855
+ }
856
+ throw error;
857
+ }
834
858
  return persister;
835
859
  };
836
860
  const stopAutoPersisting = async (stopSaveFirst = false) => {
@@ -826,11 +826,35 @@ const createCustomPersister = (
826
826
  initialContent,
827
827
  startSaveFirst = false,
828
828
  ) => {
829
- const [call1, call2] = startSaveFirst
830
- ? [startAutoSave, startAutoLoad]
831
- : [startAutoLoad, startAutoSave];
832
- await call1(initialContent);
833
- await call2(initialContent);
829
+ const [call1, call2, stop1, stop2] = startSaveFirst
830
+ ? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
831
+ : [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
832
+ const start1 = call1(initialContent);
833
+ const generation1 = startSaveFirst
834
+ ? autoSaveGeneration
835
+ : autoLoadGeneration;
836
+ await start1;
837
+ const start2 = call2(initialContent);
838
+ const generation2 = startSaveFirst
839
+ ? autoLoadGeneration
840
+ : autoSaveGeneration;
841
+ try {
842
+ await start2;
843
+ } catch (error) {
844
+ if (
845
+ generation2 ==
846
+ (startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
847
+ ) {
848
+ await tryCatchIgnore(stop2);
849
+ }
850
+ if (
851
+ generation1 ==
852
+ (startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
853
+ ) {
854
+ await tryCatchIgnore(stop1);
855
+ }
856
+ throw error;
857
+ }
834
858
  return persister;
835
859
  };
836
860
  const stopAutoPersisting = async (stopSaveFirst = false) => {
@@ -62,6 +62,8 @@ const tryCatch = async (action, onError) => {
62
62
  onError?.(error);
63
63
  }
64
64
  };
65
+ const tryCatchIgnore = (action, onIgnoredError) =>
66
+ tryCatch(action, (error) => void tryCatch(() => onIgnoredError?.(error)));
65
67
  const tryCatchSync = (action, onError) => {
66
68
  try {
67
69
  return action();
@@ -638,11 +640,35 @@ const createCustomPersister = (
638
640
  initialContent,
639
641
  startSaveFirst = false,
640
642
  ) => {
641
- const [call1, call2] = startSaveFirst
642
- ? [startAutoSave, startAutoLoad]
643
- : [startAutoLoad, startAutoSave];
644
- await call1(initialContent);
645
- await call2(initialContent);
643
+ const [call1, call2, stop1, stop2] = startSaveFirst
644
+ ? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
645
+ : [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
646
+ const start1 = call1(initialContent);
647
+ const generation1 = startSaveFirst
648
+ ? autoSaveGeneration
649
+ : autoLoadGeneration;
650
+ await start1;
651
+ const start2 = call2(initialContent);
652
+ const generation2 = startSaveFirst
653
+ ? autoLoadGeneration
654
+ : autoSaveGeneration;
655
+ try {
656
+ await start2;
657
+ } catch (error) {
658
+ if (
659
+ generation2 ==
660
+ (startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
661
+ ) {
662
+ await tryCatchIgnore(stop2);
663
+ }
664
+ if (
665
+ generation1 ==
666
+ (startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
667
+ ) {
668
+ await tryCatchIgnore(stop1);
669
+ }
670
+ throw error;
671
+ }
646
672
  return persister;
647
673
  };
648
674
  const stopAutoPersisting = async (stopSaveFirst = false) => {
@@ -62,6 +62,8 @@ const tryCatch = async (action, onError) => {
62
62
  onError?.(error);
63
63
  }
64
64
  };
65
+ const tryCatchIgnore = (action, onIgnoredError) =>
66
+ tryCatch(action, (error) => void tryCatch(() => onIgnoredError?.(error)));
65
67
  const tryCatchSync = (action, onError) => {
66
68
  try {
67
69
  return action();
@@ -638,11 +640,35 @@ const createCustomPersister = (
638
640
  initialContent,
639
641
  startSaveFirst = false,
640
642
  ) => {
641
- const [call1, call2] = startSaveFirst
642
- ? [startAutoSave, startAutoLoad]
643
- : [startAutoLoad, startAutoSave];
644
- await call1(initialContent);
645
- await call2(initialContent);
643
+ const [call1, call2, stop1, stop2] = startSaveFirst
644
+ ? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
645
+ : [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
646
+ const start1 = call1(initialContent);
647
+ const generation1 = startSaveFirst
648
+ ? autoSaveGeneration
649
+ : autoLoadGeneration;
650
+ await start1;
651
+ const start2 = call2(initialContent);
652
+ const generation2 = startSaveFirst
653
+ ? autoLoadGeneration
654
+ : autoSaveGeneration;
655
+ try {
656
+ await start2;
657
+ } catch (error) {
658
+ if (
659
+ generation2 ==
660
+ (startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
661
+ ) {
662
+ await tryCatchIgnore(stop2);
663
+ }
664
+ if (
665
+ generation1 ==
666
+ (startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
667
+ ) {
668
+ await tryCatchIgnore(stop1);
669
+ }
670
+ throw error;
671
+ }
646
672
  return persister;
647
673
  };
648
674
  const stopAutoPersisting = async (stopSaveFirst = false) => {
@@ -830,11 +830,35 @@ const createCustomPersister = (
830
830
  initialContent,
831
831
  startSaveFirst = false,
832
832
  ) => {
833
- const [call1, call2] = startSaveFirst
834
- ? [startAutoSave, startAutoLoad]
835
- : [startAutoLoad, startAutoSave];
836
- await call1(initialContent);
837
- await call2(initialContent);
833
+ const [call1, call2, stop1, stop2] = startSaveFirst
834
+ ? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
835
+ : [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
836
+ const start1 = call1(initialContent);
837
+ const generation1 = startSaveFirst
838
+ ? autoSaveGeneration
839
+ : autoLoadGeneration;
840
+ await start1;
841
+ const start2 = call2(initialContent);
842
+ const generation2 = startSaveFirst
843
+ ? autoLoadGeneration
844
+ : autoSaveGeneration;
845
+ try {
846
+ await start2;
847
+ } catch (error) {
848
+ if (
849
+ generation2 ==
850
+ (startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
851
+ ) {
852
+ await tryCatchIgnore(stop2);
853
+ }
854
+ if (
855
+ generation1 ==
856
+ (startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
857
+ ) {
858
+ await tryCatchIgnore(stop1);
859
+ }
860
+ throw error;
861
+ }
838
862
  return persister;
839
863
  };
840
864
  const stopAutoPersisting = async (stopSaveFirst = false) => {
@@ -1546,6 +1570,8 @@ const createTabularPersister = (
1546
1570
  const TABLE_CREATED = 'c';
1547
1571
  const DATA_CHANGED = 'd';
1548
1572
  const EVENT_REGEX = /^([cd]:)(.+)/;
1573
+ const SIMPLE_TABLE_NAME = /^[A-Za-z0-9_]+$/;
1574
+ const POSTGRES_IDENTIFIER_SIZE = 63;
1549
1575
  const listenerResourcesByThing = mapNew();
1550
1576
  const createCustomPostgreSqlPersister = (
1551
1577
  store,
@@ -1618,17 +1644,30 @@ const createCustomPostgreSqlPersister = (
1618
1644
  );
1619
1645
  const addDataChangedTriggers = (tableName, dataChangedFunction) =>
1620
1646
  promiseAll(
1621
- arrayMap([INSERT, DELETE, UPDATE], (action, newOrOldOrBoth) =>
1622
- createTrigger(
1647
+ arrayMap([INSERT, DELETE, UPDATE], (action, newOrOldOrBoth) => {
1648
+ const legacyTriggerId = arrayJoin(
1649
+ [TINYBASE, DATA_CHANGED, configHash, tableName, action],
1650
+ '_',
1651
+ );
1652
+ return createTrigger(
1623
1653
  OR_REPLACE,
1624
- escapeIds(TINYBASE, DATA_CHANGED, configHash, tableName, action),
1654
+ test(SIMPLE_TABLE_NAME, tableName) &&
1655
+ size(legacyTriggerId) <= POSTGRES_IDENTIFIER_SIZE
1656
+ ? escapeId(legacyTriggerId)
1657
+ : escapeIds(
1658
+ TINYBASE,
1659
+ DATA_CHANGED,
1660
+ configHash,
1661
+ action,
1662
+ EMPTY_STRING + getHash(tableName),
1663
+ ),
1625
1664
  `AFTER ${action} ON${escapeId(tableName)}FOR EACH ROW WHEN(${when(
1626
1665
  tableName,
1627
1666
  newOrOldOrBoth,
1628
1667
  )})`,
1629
1668
  dataChangedFunction,
1630
- ),
1631
- ),
1669
+ );
1670
+ }),
1632
1671
  );
1633
1672
  const dropFunctions = async (functionNames) => {
1634
1673
  if (!isEmpty(functionNames)) {
@@ -830,11 +830,35 @@ const createCustomPersister = (
830
830
  initialContent,
831
831
  startSaveFirst = false,
832
832
  ) => {
833
- const [call1, call2] = startSaveFirst
834
- ? [startAutoSave, startAutoLoad]
835
- : [startAutoLoad, startAutoSave];
836
- await call1(initialContent);
837
- await call2(initialContent);
833
+ const [call1, call2, stop1, stop2] = startSaveFirst
834
+ ? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
835
+ : [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
836
+ const start1 = call1(initialContent);
837
+ const generation1 = startSaveFirst
838
+ ? autoSaveGeneration
839
+ : autoLoadGeneration;
840
+ await start1;
841
+ const start2 = call2(initialContent);
842
+ const generation2 = startSaveFirst
843
+ ? autoLoadGeneration
844
+ : autoSaveGeneration;
845
+ try {
846
+ await start2;
847
+ } catch (error) {
848
+ if (
849
+ generation2 ==
850
+ (startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
851
+ ) {
852
+ await tryCatchIgnore(stop2);
853
+ }
854
+ if (
855
+ generation1 ==
856
+ (startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
857
+ ) {
858
+ await tryCatchIgnore(stop1);
859
+ }
860
+ throw error;
861
+ }
838
862
  return persister;
839
863
  };
840
864
  const stopAutoPersisting = async (stopSaveFirst = false) => {
@@ -1546,6 +1570,8 @@ const createTabularPersister = (
1546
1570
  const TABLE_CREATED = 'c';
1547
1571
  const DATA_CHANGED = 'd';
1548
1572
  const EVENT_REGEX = /^([cd]:)(.+)/;
1573
+ const SIMPLE_TABLE_NAME = /^[A-Za-z0-9_]+$/;
1574
+ const POSTGRES_IDENTIFIER_SIZE = 63;
1549
1575
  const listenerResourcesByThing = mapNew();
1550
1576
  const createCustomPostgreSqlPersister = (
1551
1577
  store,
@@ -1618,17 +1644,30 @@ const createCustomPostgreSqlPersister = (
1618
1644
  );
1619
1645
  const addDataChangedTriggers = (tableName, dataChangedFunction) =>
1620
1646
  promiseAll(
1621
- arrayMap([INSERT, DELETE, UPDATE], (action, newOrOldOrBoth) =>
1622
- createTrigger(
1647
+ arrayMap([INSERT, DELETE, UPDATE], (action, newOrOldOrBoth) => {
1648
+ const legacyTriggerId = arrayJoin(
1649
+ [TINYBASE, DATA_CHANGED, configHash, tableName, action],
1650
+ '_',
1651
+ );
1652
+ return createTrigger(
1623
1653
  OR_REPLACE,
1624
- escapeIds(TINYBASE, DATA_CHANGED, configHash, tableName, action),
1654
+ test(SIMPLE_TABLE_NAME, tableName) &&
1655
+ size(legacyTriggerId) <= POSTGRES_IDENTIFIER_SIZE
1656
+ ? escapeId(legacyTriggerId)
1657
+ : escapeIds(
1658
+ TINYBASE,
1659
+ DATA_CHANGED,
1660
+ configHash,
1661
+ action,
1662
+ EMPTY_STRING + getHash(tableName),
1663
+ ),
1625
1664
  `AFTER ${action} ON${escapeId(tableName)}FOR EACH ROW WHEN(${when(
1626
1665
  tableName,
1627
1666
  newOrOldOrBoth,
1628
1667
  )})`,
1629
1668
  dataChangedFunction,
1630
- ),
1631
- ),
1669
+ );
1670
+ }),
1632
1671
  );
1633
1672
  const dropFunctions = async (functionNames) => {
1634
1673
  if (!isEmpty(functionNames)) {