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
@@ -1245,11 +1245,35 @@ const createCustomPersister = (
1245
1245
  initialContent,
1246
1246
  startSaveFirst = false,
1247
1247
  ) => {
1248
- const [call1, call2] = startSaveFirst
1249
- ? [startAutoSave, startAutoLoad]
1250
- : [startAutoLoad, startAutoSave];
1251
- await call1(initialContent);
1252
- await call2(initialContent);
1248
+ const [call1, call2, stop1, stop2] = startSaveFirst
1249
+ ? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
1250
+ : [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
1251
+ const start1 = call1(initialContent);
1252
+ const generation1 = startSaveFirst
1253
+ ? autoSaveGeneration
1254
+ : autoLoadGeneration;
1255
+ await start1;
1256
+ const start2 = call2(initialContent);
1257
+ const generation2 = startSaveFirst
1258
+ ? autoLoadGeneration
1259
+ : autoSaveGeneration;
1260
+ try {
1261
+ await start2;
1262
+ } catch (error) {
1263
+ if (
1264
+ generation2 ==
1265
+ (startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
1266
+ ) {
1267
+ await tryCatchIgnore(stop2);
1268
+ }
1269
+ if (
1270
+ generation1 ==
1271
+ (startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
1272
+ ) {
1273
+ await tryCatchIgnore(stop1);
1274
+ }
1275
+ throw error;
1276
+ }
1253
1277
  return persister;
1254
1278
  };
1255
1279
  const stopAutoPersisting = async (stopSaveFirst = false) => {
@@ -261,6 +261,7 @@ const collForEach = (coll, cb) => coll?.forEach(cb);
261
261
  const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
262
262
 
263
263
  const ERROR_HLC = 13;
264
+ const ERROR_QUERY_SELECT_ALL_CYCLE = 16;
264
265
  const errorNew = (code, details) =>
265
266
  new Error(
266
267
  TINYBASE +
@@ -4477,7 +4478,50 @@ const createQueries = getCreateFunction((store) => {
4477
4478
  const preStoreListenerIds = mapNew();
4478
4479
  const sourceStoreListenerIds = mapNew();
4479
4480
  const selectAllListenerIds = mapNew();
4481
+ const selectAllRetryListenerIds = mapNew();
4482
+ const selectAllQuerySources = mapNew();
4480
4483
  const referencedQueryIds = mapNew();
4484
+ const assertNoMappedSelectAllCycle = (queryId, nextQuerySources) => {
4485
+ const getQuerySources = (sourceQueryId) =>
4486
+ sourceQueryId === queryId
4487
+ ? nextQuerySources
4488
+ : mapGet(selectAllQuerySources, sourceQueryId);
4489
+ const reachesQuery = (
4490
+ sourceQueryId,
4491
+ targetQueryId,
4492
+ visitedQueryIds = setNew(),
4493
+ ) => {
4494
+ if (sourceQueryId === targetQueryId) {
4495
+ return true;
4496
+ }
4497
+ if (collHas(visitedQueryIds, sourceQueryId)) {
4498
+ return false;
4499
+ }
4500
+ setAdd(visitedQueryIds, sourceQueryId);
4501
+ return !collEvery(
4502
+ getQuerySources(sourceQueryId),
4503
+ (_changesCellId, nextQueryId) =>
4504
+ !reachesQuery(nextQueryId, targetQueryId, visitedQueryIds),
4505
+ );
4506
+ };
4507
+ const hasMappedCycle = (sourceQueryId, querySources) =>
4508
+ !collEvery(
4509
+ querySources,
4510
+ (changesCellId, nextQueryId) =>
4511
+ !changesCellId || !reachesQuery(nextQueryId, sourceQueryId),
4512
+ );
4513
+ if (
4514
+ hasMappedCycle(queryId, nextQuerySources) ||
4515
+ !collEvery(
4516
+ selectAllQuerySources,
4517
+ (querySources, sourceQueryId) =>
4518
+ sourceQueryId === queryId ||
4519
+ !hasMappedCycle(sourceQueryId, querySources),
4520
+ )
4521
+ ) {
4522
+ errorThrow(ERROR_QUERY_SELECT_ALL_CYCLE);
4523
+ }
4524
+ };
4481
4525
  const {
4482
4526
  _: [, addListener, callListeners],
4483
4527
  delListener: delListenerImpl,
@@ -4551,6 +4595,30 @@ const createQueries = getCreateFunction((store) => {
4551
4595
  resetStoreListeners(mapGet(sourceStoreListenerIds, queryId));
4552
4596
  mapSet(sourceStoreListenerIds, queryId);
4553
4597
  };
4598
+ const clearSelectAllRetryListeners = (queryId) =>
4599
+ ifNotUndefined(
4600
+ mapGet(selectAllRetryListenerIds, queryId),
4601
+ (listenerIds) => {
4602
+ mapForEach(listenerIds, (sourceStore, listenerIdsByTableId) =>
4603
+ mapForEach(listenerIdsByTableId, (_sourceTableId, listenerId) =>
4604
+ sourceStore.delListener(listenerId),
4605
+ ),
4606
+ );
4607
+ mapSet(selectAllRetryListenerIds, queryId);
4608
+ },
4609
+ );
4610
+ const addSelectAllRetryListener = (queryId, sourceStore, sourceTableId) => {
4611
+ const listenerIdsByTableId = mapEnsure(
4612
+ mapEnsure(selectAllRetryListenerIds, queryId, mapNew),
4613
+ sourceStore,
4614
+ mapNew,
4615
+ );
4616
+ mapEnsure(listenerIdsByTableId, sourceTableId, () =>
4617
+ sourceStore.addTableListener(sourceTableId, () =>
4618
+ setQueryDefinitionImpl(queryId),
4619
+ ),
4620
+ );
4621
+ };
4554
4622
  const syncSelectAllListeners = (queryId, nextSources = mapNew()) => {
4555
4623
  const listenerIds = mapEnsure(selectAllListenerIds, queryId, mapNew);
4556
4624
  mapForEach(listenerIds, (sourceStore, listenerIdsByTableId) => {
@@ -4569,7 +4637,13 @@ const createQueries = getCreateFunction((store) => {
4569
4637
  collForEach(tableIds, (sourceTableId) =>
4570
4638
  mapEnsure(listenerIdsByTableId, sourceTableId, () =>
4571
4639
  sourceStore.addTableCellIdsListener(sourceTableId, () =>
4572
- setQueryDefinitionImpl(queryId),
4640
+ tryCatchSync(
4641
+ () => setQueryDefinitionImpl(queryId),
4642
+ (error) => {
4643
+ addSelectAllRetryListener(queryId, sourceStore, sourceTableId);
4644
+ throw error;
4645
+ },
4646
+ ),
4573
4647
  ),
4574
4648
  ),
4575
4649
  );
@@ -4728,6 +4802,10 @@ const createQueries = getCreateFunction((store) => {
4728
4802
  isFunction(prefixOrMapper)
4729
4803
  ? prefixOrMapper
4730
4804
  : (cellId) => (prefixOrMapper ?? EMPTY_STRING) + cellId,
4805
+ isFunction(prefixOrMapper) ||
4806
+ (!isUndefined(prefixOrMapper) && prefixOrMapper !== EMPTY_STRING)
4807
+ ? 1
4808
+ : 0,
4731
4809
  ]);
4732
4810
  };
4733
4811
  const join = (arg1, arg2, arg3, arg4) => {
@@ -4801,28 +4879,49 @@ const createQueries = getCreateFunction((store) => {
4801
4879
  getSelectedOrGroupedCell(arg1) === arg2,
4802
4880
  );
4803
4881
  build({select, selectAll, join, where, group, having, param});
4804
- resultStore2.delTable(queryId);
4805
- if (isEmpty(selectionEntries)) {
4806
- commit?.();
4807
- return queries;
4808
- }
4809
4882
  const joins = mapNew(joinEntries);
4810
4883
  mapForEach(joins, (joinAlias, [, fromJoinAlias]) =>
4811
4884
  ifNotUndefined(mapGet(joins, fromJoinAlias), ({3: toJoinAliases2}) =>
4812
4885
  isUndefined(joinAlias) ? 0 : arrayPush(toJoinAliases2, joinAlias),
4813
4886
  ),
4814
4887
  );
4815
- const groups = mapNew(groupEntries);
4816
- const hasGroupsOrHavings = !collIsEmpty(groups) || !isEmpty(havings);
4817
- const selectEntries = [];
4818
- const selectAllSources = stagedDefinition[3];
4888
+ const isRootSelectAll = (joinedTableId) => isUndefined(joinedTableId);
4819
4889
  const getSelectAllJoin = (joinedTableId) =>
4820
4890
  mapGet(
4821
4891
  joins,
4822
- isUndefined(joinedTableId) || joinedTableId === tableId
4823
- ? void 0
4824
- : joinedTableId,
4892
+ isRootSelectAll(joinedTableId) ? void 0 : joinedTableId,
4825
4893
  );
4894
+ const nextSelectAllQuerySources = stagedDefinition[5];
4895
+ arrayForEach(
4896
+ selectionEntries,
4897
+ ([selectAll2, selectedOrJoinedTableId, , changesCellId = 0]) =>
4898
+ selectAll2
4899
+ ? ifNotUndefined(
4900
+ getSelectAllJoin(selectedOrJoinedTableId),
4901
+ ([sourceQueryId, , , , , sourceStore]) =>
4902
+ sourceStore === store
4903
+ ? 0
4904
+ : mapSet(
4905
+ nextSelectAllQuerySources,
4906
+ sourceQueryId,
4907
+ mapGet(nextSelectAllQuerySources, sourceQueryId) ||
4908
+ changesCellId
4909
+ ? 1
4910
+ : 0,
4911
+ ),
4912
+ )
4913
+ : 0,
4914
+ );
4915
+ assertNoMappedSelectAllCycle(queryId, nextSelectAllQuerySources);
4916
+ resultStore2.delTable(queryId);
4917
+ if (isEmpty(selectionEntries)) {
4918
+ commit?.();
4919
+ return queries;
4920
+ }
4921
+ const groups = mapNew(groupEntries);
4922
+ const hasGroupsOrHavings = !collIsEmpty(groups) || !isEmpty(havings);
4923
+ const selectEntries = [];
4924
+ const selectAllSources = stagedDefinition[3];
4826
4925
  arrayForEach(
4827
4926
  selectionEntries,
4828
4927
  ([selectAll2, selectedOrJoinedTableId, clauseOrMapper]) => {
@@ -4840,11 +4939,7 @@ const createQueries = getCreateFunction((store) => {
4840
4939
  (cellId) =>
4841
4940
  arrayPush(selectEntries, [
4842
4941
  clauseOrMapper(cellId),
4843
- (getTableCell) =>
4844
- isUndefined(selectedOrJoinedTableId) ||
4845
- selectedOrJoinedTableId === tableId
4846
- ? getTableCell(cellId)
4847
- : getTableCell(selectedOrJoinedTableId, cellId),
4942
+ getUndefined,
4848
4943
  ]),
4849
4944
  );
4850
4945
  },
@@ -5041,67 +5136,74 @@ const createQueries = getCreateFunction((store) => {
5041
5136
  joinedCellId,
5042
5137
  );
5043
5138
  };
5139
+ const writeSelectAllRow = () => {
5140
+ const resultRow = objNew();
5141
+ arrayForEach(
5142
+ selectionEntries,
5143
+ ([selectAll2, selectedOrJoinedTableId, clauseOrMapper]) => {
5144
+ if (selectAll2) {
5145
+ ifNotUndefined(
5146
+ getSelectAllJoin(selectedOrJoinedTableId),
5147
+ ([realTableId, , , , remoteIdPairs, sourceStore]) => {
5148
+ const sourceRowId = isRootSelectAll(
5149
+ selectedOrJoinedTableId,
5150
+ )
5151
+ ? rootRowId
5152
+ : mapGet(remoteIdPairs, rootRowId)?.[0];
5153
+ ifNotUndefined(sourceRowId, (sourceRowId2) =>
5154
+ arrayForEach(
5155
+ arraySort(
5156
+ sourceStore.getCellIds(realTableId, sourceRowId2),
5157
+ ),
5158
+ (cellId) =>
5159
+ objSet(
5160
+ resultRow,
5161
+ clauseOrMapper(cellId),
5162
+ sourceStore.getCell(
5163
+ realTableId,
5164
+ sourceRowId2,
5165
+ cellId,
5166
+ ),
5167
+ ),
5168
+ ),
5169
+ );
5170
+ },
5171
+ );
5172
+ } else {
5173
+ const selectedCell = clauseOrMapper(getJoinCell, rootRowId);
5174
+ const selectedCellId = selectedOrJoinedTableId;
5175
+ if (isUndefined(selectedCell)) {
5176
+ objDel(resultRow, selectedCellId);
5177
+ } else {
5178
+ objSet(resultRow, selectedCellId, selectedCell);
5179
+ }
5180
+ }
5181
+ },
5182
+ );
5183
+ if (objIsEmpty(resultRow)) {
5184
+ selectJoinWhereStore.delRow(queryId, rootRowId);
5185
+ } else {
5186
+ selectJoinWhereStore.setRow(queryId, rootRowId, resultRow);
5187
+ }
5188
+ };
5044
5189
  selectJoinWhereStore.transaction(() => {
5045
5190
  if (!arrayEvery(wheres, (where2) => where2(getJoinCell))) {
5046
5191
  selectJoinWhereStore.delRow(queryId, rootRowId);
5047
5192
  } else if (hasGroupsOrHavings) {
5048
- mapForEach(selects, (asCellId, tableCellGetter) =>
5049
- selectJoinWhereStore._[5](
5050
- queryId,
5051
- rootRowId,
5052
- asCellId,
5053
- tableCellGetter(getJoinCell, rootRowId),
5054
- ),
5055
- );
5056
- } else if (hasSelectAll) {
5057
- const resultRow = objNew();
5058
- arrayForEach(
5059
- selectionEntries,
5060
- ([selectAll2, selectedOrJoinedTableId, clauseOrMapper]) => {
5061
- if (selectAll2) {
5062
- ifNotUndefined(
5063
- getSelectAllJoin(selectedOrJoinedTableId),
5064
- ([realTableId, , , , remoteIdPairs, sourceStore]) => {
5065
- const sourceRowId =
5066
- isUndefined(selectedOrJoinedTableId) ||
5067
- selectedOrJoinedTableId === tableId
5068
- ? rootRowId
5069
- : mapGet(remoteIdPairs, rootRowId)?.[0];
5070
- ifNotUndefined(sourceRowId, (sourceRowId2) =>
5071
- arrayForEach(
5072
- arraySort(
5073
- sourceStore.getCellIds(realTableId, sourceRowId2),
5074
- ),
5075
- (cellId) =>
5076
- objSet(
5077
- resultRow,
5078
- clauseOrMapper(cellId),
5079
- sourceStore.getCell(
5080
- realTableId,
5081
- sourceRowId2,
5082
- cellId,
5083
- ),
5084
- ),
5085
- ),
5086
- );
5087
- },
5088
- );
5089
- } else {
5090
- const selectedCell = clauseOrMapper(getJoinCell, rootRowId);
5091
- const selectedCellId = selectedOrJoinedTableId;
5092
- if (isUndefined(selectedCell)) {
5093
- objDel(resultRow, selectedCellId);
5094
- } else {
5095
- objSet(resultRow, selectedCellId, selectedCell);
5096
- }
5097
- }
5098
- },
5099
- );
5100
- if (objIsEmpty(resultRow)) {
5101
- selectJoinWhereStore.delRow(queryId, rootRowId);
5193
+ if (hasSelectAll) {
5194
+ writeSelectAllRow();
5102
5195
  } else {
5103
- selectJoinWhereStore.setRow(queryId, rootRowId, resultRow);
5196
+ mapForEach(selects, (asCellId, tableCellGetter) =>
5197
+ selectJoinWhereStore._[5](
5198
+ queryId,
5199
+ rootRowId,
5200
+ asCellId,
5201
+ tableCellGetter(getJoinCell, rootRowId),
5202
+ ),
5203
+ );
5104
5204
  }
5205
+ } else if (hasSelectAll) {
5206
+ writeSelectAllRow();
5105
5207
  } else {
5106
5208
  mapForEach(selects, (asCellId, tableCellGetter) =>
5107
5209
  selectJoinWhereStore._[5](
@@ -5231,7 +5333,14 @@ const createQueries = getCreateFunction((store) => {
5231
5333
  }),
5232
5334
  );
5233
5335
  const setQueryDefinitionImpl = (queryId, definition) => {
5234
- const stagedDefinition = [mapNew(), mapNew(), void 0, mapNew(), setNew()];
5336
+ const stagedDefinition = [
5337
+ mapNew(),
5338
+ mapNew(),
5339
+ void 0,
5340
+ mapNew(),
5341
+ setNew(),
5342
+ mapNew(),
5343
+ ];
5235
5344
  let committed = false;
5236
5345
  tryCatchSync(
5237
5346
  () =>
@@ -5253,11 +5362,17 @@ const createQueries = getCreateFunction((store) => {
5253
5362
  );
5254
5363
  mapSet(preStores, queryId, stagedDefinition[2]);
5255
5364
  syncSelectAllListeners(queryId, stagedDefinition[3]);
5365
+ clearSelectAllRetryListeners(queryId);
5256
5366
  mapSet(
5257
5367
  referencedQueryIds,
5258
5368
  queryId,
5259
5369
  collIsEmpty(stagedDefinition[4]) ? void 0 : stagedDefinition[4],
5260
5370
  );
5371
+ mapSet(
5372
+ selectAllQuerySources,
5373
+ queryId,
5374
+ collIsEmpty(stagedDefinition[5]) ? void 0 : stagedDefinition[5],
5375
+ );
5261
5376
  committed = true;
5262
5377
  }),
5263
5378
  (error) => {
@@ -5308,7 +5423,9 @@ const createQueries = getCreateFunction((store) => {
5308
5423
  resetPreStores(queryId);
5309
5424
  resetSourceStores(queryId);
5310
5425
  syncSelectAllListeners(queryId);
5426
+ clearSelectAllRetryListeners(queryId);
5311
5427
  mapSet(referencedQueryIds, queryId);
5428
+ mapSet(selectAllQuerySources, queryId);
5312
5429
  delDefinition(queryId);
5313
5430
  cleanStores();
5314
5431
  return queries;