@multiplatform.one/frappe 6.1.0 → 6.3.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 (792) hide show
  1. package/README.md +38 -12
  2. package/dist/cjs/auth.cjs +1 -1
  3. package/dist/cjs/auth.native.js.map +1 -1
  4. package/dist/cjs/call.cjs +1 -1
  5. package/dist/cjs/call.native.js.map +1 -1
  6. package/dist/cjs/collection.cjs +18 -4
  7. package/dist/cjs/collection.native.js +18 -4
  8. package/dist/cjs/collection.native.js.map +1 -1
  9. package/dist/cjs/core/http.cjs +92 -9
  10. package/dist/cjs/core/http.native.js +96 -7
  11. package/dist/cjs/core/http.native.js.map +1 -1
  12. package/dist/cjs/db.cjs +7 -7
  13. package/dist/cjs/db.native.js +4 -4
  14. package/dist/cjs/db.native.js.map +1 -1
  15. package/dist/cjs/doctype.cjs +97 -39
  16. package/dist/cjs/doctype.native.js +116 -46
  17. package/dist/cjs/doctype.native.js.map +1 -1
  18. package/dist/cjs/file.cjs +1 -1
  19. package/dist/cjs/file.native.js.map +1 -1
  20. package/dist/cjs/fixtureDb.cjs +3 -2
  21. package/dist/cjs/fixtureDb.native.js +2 -1
  22. package/dist/cjs/fixtureDb.native.js.map +1 -1
  23. package/dist/cjs/frappeApp.cjs +15 -14
  24. package/dist/cjs/frappeApp.native.js +16 -14
  25. package/dist/cjs/frappeApp.native.js.map +1 -1
  26. package/dist/cjs/frappeReact.cjs +198 -18
  27. package/dist/cjs/frappeReact.native.js +241 -18
  28. package/dist/cjs/frappeReact.native.js.map +1 -1
  29. package/dist/cjs/index.cjs +9 -4
  30. package/dist/cjs/index.native.js +9 -4
  31. package/dist/cjs/index.native.js.map +1 -1
  32. package/dist/cjs/pacer.cjs +2 -2
  33. package/dist/cjs/pacer.native.js +2 -2
  34. package/dist/cjs/pacer.native.js.map +1 -1
  35. package/dist/cjs/realtime.cjs +186 -46
  36. package/dist/cjs/realtime.native.js +268 -48
  37. package/dist/cjs/realtime.native.js.map +1 -1
  38. package/dist/cjs/sync/backfill.cjs +32 -27
  39. package/dist/cjs/sync/backfill.native.js +49 -43
  40. package/dist/cjs/sync/backfill.native.js.map +1 -1
  41. package/dist/cjs/sync/index.cjs +90 -24
  42. package/dist/cjs/sync/index.native.js +112 -10
  43. package/dist/cjs/sync/index.native.js.map +1 -1
  44. package/dist/cjs/sync/merge.cjs +0 -3
  45. package/dist/cjs/sync/merge.native.js +0 -3
  46. package/dist/cjs/sync/merge.native.js.map +1 -1
  47. package/dist/cjs/sync/mutationEngine.cjs +25 -19
  48. package/dist/cjs/sync/mutationEngine.native.js +16 -13
  49. package/dist/cjs/sync/mutationEngine.native.js.map +1 -1
  50. package/dist/cjs/sync/mutationJournal.cjs +9 -4
  51. package/dist/cjs/sync/mutationJournal.native.js +7 -4
  52. package/dist/cjs/sync/mutationJournal.native.js.map +1 -1
  53. package/dist/cjs/sync/normalizedCache.cjs +7 -3
  54. package/dist/cjs/sync/normalizedCache.native.js +7 -2
  55. package/dist/cjs/sync/normalizedCache.native.js.map +1 -1
  56. package/dist/cjs/sync/persistence.cjs +63 -31
  57. package/dist/cjs/sync/persistence.native.js +120 -63
  58. package/dist/cjs/sync/persistence.native.js.map +1 -1
  59. package/dist/cjs/sync/realtime.cjs +124 -13
  60. package/dist/cjs/sync/realtime.native.js +163 -20
  61. package/dist/cjs/sync/realtime.native.js.map +1 -1
  62. package/dist/cjs/sync/rehydration.cjs +16 -10
  63. package/dist/cjs/sync/rehydration.native.js +16 -14
  64. package/dist/cjs/sync/rehydration.native.js.map +1 -1
  65. package/dist/cjs/sync/storage.cjs +3 -3
  66. package/dist/cjs/sync/storage.native.js +1 -1
  67. package/dist/cjs/sync/storage.native.js.map +1 -1
  68. package/dist/cjs/sync/subscriptionManager.cjs +255 -65
  69. package/dist/cjs/sync/subscriptionManager.native.js +330 -93
  70. package/dist/cjs/sync/subscriptionManager.native.js.map +1 -1
  71. package/dist/cjs/sync/types.cjs +2 -0
  72. package/dist/cjs/sync/types.native.js +2 -0
  73. package/dist/cjs/sync/types.native.js.map +1 -1
  74. package/dist/cjs/sync/virtualPageManager.cjs +9 -9
  75. package/dist/cjs/sync/virtualPageManager.native.js +5 -9
  76. package/dist/cjs/sync/virtualPageManager.native.js.map +1 -1
  77. package/dist/cjs/useLiveQuery.cjs +52 -0
  78. package/dist/cjs/useLiveQuery.native.js +59 -0
  79. package/dist/cjs/useLiveQuery.native.js.map +1 -0
  80. package/dist/cjs/util.cjs +11 -2
  81. package/dist/cjs/util.native.js +16 -2
  82. package/dist/cjs/util.native.js.map +1 -1
  83. package/dist/esm/auth.mjs +1 -1
  84. package/dist/esm/auth.mjs.map +1 -1
  85. package/dist/esm/auth.native.js.map +1 -1
  86. package/dist/esm/call.mjs +1 -1
  87. package/dist/esm/call.mjs.map +1 -1
  88. package/dist/esm/call.native.js.map +1 -1
  89. package/dist/esm/collection.mjs +18 -4
  90. package/dist/esm/collection.mjs.map +1 -1
  91. package/dist/esm/collection.native.js +18 -4
  92. package/dist/esm/collection.native.js.map +1 -1
  93. package/dist/esm/core/http.mjs +93 -10
  94. package/dist/esm/core/http.mjs.map +1 -1
  95. package/dist/esm/core/http.native.js +97 -8
  96. package/dist/esm/core/http.native.js.map +1 -1
  97. package/dist/esm/db.mjs +7 -7
  98. package/dist/esm/db.mjs.map +1 -1
  99. package/dist/esm/db.native.js +4 -4
  100. package/dist/esm/db.native.js.map +1 -1
  101. package/dist/esm/doctype.mjs +96 -39
  102. package/dist/esm/doctype.mjs.map +1 -1
  103. package/dist/esm/doctype.native.js +115 -46
  104. package/dist/esm/doctype.native.js.map +1 -1
  105. package/dist/esm/file.mjs +1 -1
  106. package/dist/esm/file.mjs.map +1 -1
  107. package/dist/esm/file.native.js.map +1 -1
  108. package/dist/esm/fixtureDb.mjs +3 -2
  109. package/dist/esm/fixtureDb.mjs.map +1 -1
  110. package/dist/esm/fixtureDb.native.js +2 -1
  111. package/dist/esm/fixtureDb.native.js.map +1 -1
  112. package/dist/esm/frappeApp.mjs +15 -14
  113. package/dist/esm/frappeApp.mjs.map +1 -1
  114. package/dist/esm/frappeApp.native.js +16 -14
  115. package/dist/esm/frappeApp.native.js.map +1 -1
  116. package/dist/esm/frappeReact.mjs +197 -19
  117. package/dist/esm/frappeReact.mjs.map +1 -1
  118. package/dist/esm/frappeReact.native.js +240 -19
  119. package/dist/esm/frappeReact.native.js.map +1 -1
  120. package/dist/esm/index.mjs +5 -4
  121. package/dist/esm/index.mjs.map +1 -1
  122. package/dist/esm/index.native.js +5 -4
  123. package/dist/esm/index.native.js.map +1 -1
  124. package/dist/esm/pacer.mjs +1 -1
  125. package/dist/esm/pacer.native.js +1 -1
  126. package/dist/esm/realtime.mjs +187 -47
  127. package/dist/esm/realtime.mjs.map +1 -1
  128. package/dist/esm/realtime.native.js +269 -49
  129. package/dist/esm/realtime.native.js.map +1 -1
  130. package/dist/esm/sync/backfill.mjs +32 -27
  131. package/dist/esm/sync/backfill.mjs.map +1 -1
  132. package/dist/esm/sync/backfill.native.js +49 -43
  133. package/dist/esm/sync/backfill.native.js.map +1 -1
  134. package/dist/esm/sync/index.mjs +90 -24
  135. package/dist/esm/sync/index.mjs.map +1 -1
  136. package/dist/esm/sync/index.native.js +112 -10
  137. package/dist/esm/sync/index.native.js.map +1 -1
  138. package/dist/esm/sync/merge.mjs +1 -1
  139. package/dist/esm/sync/merge.mjs.map +1 -1
  140. package/dist/esm/sync/merge.native.js +1 -1
  141. package/dist/esm/sync/merge.native.js.map +1 -1
  142. package/dist/esm/sync/mutationEngine.mjs +25 -19
  143. package/dist/esm/sync/mutationEngine.mjs.map +1 -1
  144. package/dist/esm/sync/mutationEngine.native.js +16 -13
  145. package/dist/esm/sync/mutationEngine.native.js.map +1 -1
  146. package/dist/esm/sync/mutationJournal.mjs +9 -4
  147. package/dist/esm/sync/mutationJournal.mjs.map +1 -1
  148. package/dist/esm/sync/mutationJournal.native.js +7 -4
  149. package/dist/esm/sync/mutationJournal.native.js.map +1 -1
  150. package/dist/esm/sync/normalizedCache.mjs +7 -3
  151. package/dist/esm/sync/normalizedCache.mjs.map +1 -1
  152. package/dist/esm/sync/normalizedCache.native.js +7 -2
  153. package/dist/esm/sync/normalizedCache.native.js.map +1 -1
  154. package/dist/esm/sync/persistence.mjs +64 -32
  155. package/dist/esm/sync/persistence.mjs.map +1 -1
  156. package/dist/esm/sync/persistence.native.js +121 -64
  157. package/dist/esm/sync/persistence.native.js.map +1 -1
  158. package/dist/esm/sync/realtime.mjs +124 -13
  159. package/dist/esm/sync/realtime.mjs.map +1 -1
  160. package/dist/esm/sync/realtime.native.js +163 -20
  161. package/dist/esm/sync/realtime.native.js.map +1 -1
  162. package/dist/esm/sync/rehydration.mjs +16 -10
  163. package/dist/esm/sync/rehydration.mjs.map +1 -1
  164. package/dist/esm/sync/rehydration.native.js +16 -14
  165. package/dist/esm/sync/rehydration.native.js.map +1 -1
  166. package/dist/esm/sync/storage.mjs +3 -3
  167. package/dist/esm/sync/storage.mjs.map +1 -1
  168. package/dist/esm/sync/storage.native.js +1 -1
  169. package/dist/esm/sync/storage.native.js.map +1 -1
  170. package/dist/esm/sync/subscriptionManager.mjs +255 -65
  171. package/dist/esm/sync/subscriptionManager.mjs.map +1 -1
  172. package/dist/esm/sync/subscriptionManager.native.js +330 -93
  173. package/dist/esm/sync/subscriptionManager.native.js.map +1 -1
  174. package/dist/esm/sync/types.mjs +2 -0
  175. package/dist/esm/sync/types.mjs.map +1 -1
  176. package/dist/esm/sync/types.native.js +2 -0
  177. package/dist/esm/sync/types.native.js.map +1 -1
  178. package/dist/esm/sync/virtualPageManager.mjs +9 -9
  179. package/dist/esm/sync/virtualPageManager.mjs.map +1 -1
  180. package/dist/esm/sync/virtualPageManager.native.js +5 -9
  181. package/dist/esm/sync/virtualPageManager.native.js.map +1 -1
  182. package/dist/esm/useLiveQuery.mjs +26 -0
  183. package/dist/esm/useLiveQuery.mjs.map +1 -0
  184. package/dist/esm/useLiveQuery.native.js +30 -0
  185. package/dist/esm/useLiveQuery.native.js.map +1 -0
  186. package/dist/esm/util.mjs +10 -2
  187. package/dist/esm/util.mjs.map +1 -1
  188. package/dist/esm/util.native.js +15 -2
  189. package/dist/esm/util.native.js.map +1 -1
  190. package/dist/jsx/auth.mjs +1 -1
  191. package/dist/jsx/auth.mjs.map +1 -1
  192. package/dist/jsx/auth.native.js.map +1 -1
  193. package/dist/jsx/call.mjs +1 -1
  194. package/dist/jsx/call.mjs.map +1 -1
  195. package/dist/jsx/call.native.js.map +1 -1
  196. package/dist/jsx/collection.mjs +18 -4
  197. package/dist/jsx/collection.mjs.map +1 -1
  198. package/dist/jsx/collection.native.js +18 -4
  199. package/dist/jsx/collection.native.js.map +1 -1
  200. package/dist/jsx/core/http.mjs +93 -10
  201. package/dist/jsx/core/http.mjs.map +1 -1
  202. package/dist/jsx/core/http.native.js +96 -7
  203. package/dist/jsx/core/http.native.js.map +1 -1
  204. package/dist/jsx/db.mjs +7 -7
  205. package/dist/jsx/db.mjs.map +1 -1
  206. package/dist/jsx/db.native.js +4 -4
  207. package/dist/jsx/db.native.js.map +1 -1
  208. package/dist/jsx/doctype.mjs +96 -39
  209. package/dist/jsx/doctype.mjs.map +1 -1
  210. package/dist/jsx/doctype.native.js +116 -46
  211. package/dist/jsx/doctype.native.js.map +1 -1
  212. package/dist/jsx/file.mjs +1 -1
  213. package/dist/jsx/file.mjs.map +1 -1
  214. package/dist/jsx/file.native.js.map +1 -1
  215. package/dist/jsx/fixtureDb.mjs +3 -2
  216. package/dist/jsx/fixtureDb.mjs.map +1 -1
  217. package/dist/jsx/fixtureDb.native.js +2 -1
  218. package/dist/jsx/fixtureDb.native.js.map +1 -1
  219. package/dist/jsx/frappeApp.mjs +15 -14
  220. package/dist/jsx/frappeApp.mjs.map +1 -1
  221. package/dist/jsx/frappeApp.native.js +16 -14
  222. package/dist/jsx/frappeApp.native.js.map +1 -1
  223. package/dist/jsx/frappeReact.mjs +197 -19
  224. package/dist/jsx/frappeReact.mjs.map +1 -1
  225. package/dist/jsx/frappeReact.native.js +241 -18
  226. package/dist/jsx/frappeReact.native.js.map +1 -1
  227. package/dist/jsx/index.js +5 -4
  228. package/dist/jsx/index.js.map +1 -1
  229. package/dist/jsx/index.mjs +5 -4
  230. package/dist/jsx/index.mjs.map +1 -1
  231. package/dist/jsx/index.native.js +9 -4
  232. package/dist/jsx/index.native.js.map +1 -1
  233. package/dist/jsx/pacer.mjs +1 -1
  234. package/dist/jsx/pacer.native.js +2 -2
  235. package/dist/jsx/pacer.native.js.map +1 -1
  236. package/dist/jsx/realtime.mjs +187 -47
  237. package/dist/jsx/realtime.mjs.map +1 -1
  238. package/dist/jsx/realtime.native.js +268 -48
  239. package/dist/jsx/realtime.native.js.map +1 -1
  240. package/dist/jsx/sync/backfill.mjs +32 -27
  241. package/dist/jsx/sync/backfill.mjs.map +1 -1
  242. package/dist/jsx/sync/backfill.native.js +49 -43
  243. package/dist/jsx/sync/backfill.native.js.map +1 -1
  244. package/dist/jsx/sync/index.mjs +90 -24
  245. package/dist/jsx/sync/index.mjs.map +1 -1
  246. package/dist/jsx/sync/index.native.js +112 -10
  247. package/dist/jsx/sync/index.native.js.map +1 -1
  248. package/dist/jsx/sync/merge.mjs +1 -1
  249. package/dist/jsx/sync/merge.mjs.map +1 -1
  250. package/dist/jsx/sync/merge.native.js +0 -3
  251. package/dist/jsx/sync/merge.native.js.map +1 -1
  252. package/dist/jsx/sync/mutationEngine.mjs +25 -19
  253. package/dist/jsx/sync/mutationEngine.mjs.map +1 -1
  254. package/dist/jsx/sync/mutationEngine.native.js +16 -13
  255. package/dist/jsx/sync/mutationEngine.native.js.map +1 -1
  256. package/dist/jsx/sync/mutationJournal.mjs +9 -4
  257. package/dist/jsx/sync/mutationJournal.mjs.map +1 -1
  258. package/dist/jsx/sync/mutationJournal.native.js +7 -4
  259. package/dist/jsx/sync/mutationJournal.native.js.map +1 -1
  260. package/dist/jsx/sync/normalizedCache.mjs +7 -3
  261. package/dist/jsx/sync/normalizedCache.mjs.map +1 -1
  262. package/dist/jsx/sync/normalizedCache.native.js +7 -2
  263. package/dist/jsx/sync/normalizedCache.native.js.map +1 -1
  264. package/dist/jsx/sync/persistence.mjs +64 -32
  265. package/dist/jsx/sync/persistence.mjs.map +1 -1
  266. package/dist/jsx/sync/persistence.native.js +120 -63
  267. package/dist/jsx/sync/persistence.native.js.map +1 -1
  268. package/dist/jsx/sync/realtime.mjs +124 -13
  269. package/dist/jsx/sync/realtime.mjs.map +1 -1
  270. package/dist/jsx/sync/realtime.native.js +163 -20
  271. package/dist/jsx/sync/realtime.native.js.map +1 -1
  272. package/dist/jsx/sync/rehydration.mjs +16 -10
  273. package/dist/jsx/sync/rehydration.mjs.map +1 -1
  274. package/dist/jsx/sync/rehydration.native.js +16 -14
  275. package/dist/jsx/sync/rehydration.native.js.map +1 -1
  276. package/dist/jsx/sync/storage.mjs +3 -3
  277. package/dist/jsx/sync/storage.mjs.map +1 -1
  278. package/dist/jsx/sync/storage.native.js +1 -1
  279. package/dist/jsx/sync/storage.native.js.map +1 -1
  280. package/dist/jsx/sync/subscriptionManager.mjs +255 -65
  281. package/dist/jsx/sync/subscriptionManager.mjs.map +1 -1
  282. package/dist/jsx/sync/subscriptionManager.native.js +330 -93
  283. package/dist/jsx/sync/subscriptionManager.native.js.map +1 -1
  284. package/dist/jsx/sync/types.mjs +2 -0
  285. package/dist/jsx/sync/types.mjs.map +1 -1
  286. package/dist/jsx/sync/types.native.js +2 -0
  287. package/dist/jsx/sync/types.native.js.map +1 -1
  288. package/dist/jsx/sync/virtualPageManager.mjs +9 -9
  289. package/dist/jsx/sync/virtualPageManager.mjs.map +1 -1
  290. package/dist/jsx/sync/virtualPageManager.native.js +5 -9
  291. package/dist/jsx/sync/virtualPageManager.native.js.map +1 -1
  292. package/dist/jsx/useLiveQuery.mjs +26 -0
  293. package/dist/jsx/useLiveQuery.mjs.map +1 -0
  294. package/dist/jsx/useLiveQuery.native.js +59 -0
  295. package/dist/jsx/useLiveQuery.native.js.map +1 -0
  296. package/dist/jsx/util.mjs +10 -2
  297. package/dist/jsx/util.mjs.map +1 -1
  298. package/dist/jsx/util.native.js +16 -2
  299. package/dist/jsx/util.native.js.map +1 -1
  300. package/package.json +20 -17
  301. package/src/auth.ts +5 -1
  302. package/src/call.ts +5 -1
  303. package/src/collection.spec.ts +55 -0
  304. package/src/collection.ts +33 -4
  305. package/src/core/http.spec.ts +66 -0
  306. package/src/core/http.ts +115 -9
  307. package/src/core/httpNative.spec.ts +234 -0
  308. package/src/core/types.ts +2 -0
  309. package/src/db.spec.ts +91 -51
  310. package/src/db.ts +27 -8
  311. package/src/doctype.spec.ts +247 -39
  312. package/src/doctype.ts +203 -53
  313. package/src/file.ts +5 -1
  314. package/src/fixtureDb.ts +13 -2
  315. package/src/frappeApp.ts +18 -19
  316. package/src/frappeReact.spec.ts +565 -1
  317. package/src/frappeReact.ts +445 -37
  318. package/src/frappeReactLiveQueryGc.spec.ts +320 -0
  319. package/src/frappeReactNative.spec.ts +65 -0
  320. package/src/index.ts +10 -9
  321. package/src/pacer.ts +1 -1
  322. package/src/realtime.spec.ts +464 -20
  323. package/src/realtime.ts +284 -46
  324. package/src/sync/backfill.spec.ts +43 -0
  325. package/src/sync/backfill.ts +59 -39
  326. package/src/sync/debug.spec.ts +36 -0
  327. package/src/sync/filterValidation.spec.ts +197 -0
  328. package/src/sync/index.ts +98 -7
  329. package/src/sync/merge.ts +3 -3
  330. package/src/sync/mutationEngine.spec.ts +36 -4
  331. package/src/sync/mutationEngine.ts +30 -11
  332. package/src/sync/mutationJournal.ts +18 -4
  333. package/src/sync/normalizedCache.spec.ts +102 -0
  334. package/src/sync/normalizedCache.ts +19 -3
  335. package/src/sync/offlineRestore.spec.ts +423 -0
  336. package/src/sync/persistence.spec.ts +39 -7
  337. package/src/sync/persistence.ts +90 -18
  338. package/src/sync/persistenceGjs.spec.ts +143 -0
  339. package/src/sync/persistenceNative.spec.ts +139 -0
  340. package/src/sync/realtime.spec.ts +18 -1
  341. package/src/sync/realtime.ts +161 -13
  342. package/src/sync/rehydration.ts +23 -5
  343. package/src/sync/storage.ts +5 -4
  344. package/src/sync/subscriptionManager.spec.ts +94 -0
  345. package/src/sync/subscriptionManager.ts +304 -82
  346. package/src/sync/syncModule.spec.ts +137 -0
  347. package/src/sync/types.ts +39 -0
  348. package/src/sync/virtualPageManager.ts +8 -4
  349. package/src/useLiveQuery.ts +58 -0
  350. package/src/util.spec.ts +35 -4
  351. package/src/util.ts +34 -7
  352. package/types/auth.d.ts +13 -0
  353. package/types/auth.d.ts.map +1 -0
  354. package/types/call.d.ts +10 -0
  355. package/types/call.d.ts.map +1 -0
  356. package/types/collection.d.ts +127 -0
  357. package/types/collection.d.ts.map +1 -0
  358. package/types/common/types.d.ts +35 -0
  359. package/types/common/types.d.ts.map +1 -0
  360. package/types/core/http.d.ts +86 -0
  361. package/types/core/http.d.ts.map +1 -0
  362. package/types/core/types.d.ts +74 -0
  363. package/types/core/types.d.ts.map +1 -0
  364. package/types/core/wire.d.ts +405 -0
  365. package/types/core/wire.d.ts.map +1 -0
  366. package/types/db.d.ts +244 -0
  367. package/types/db.d.ts.map +1 -0
  368. package/types/devtools/FrappeDevtoolsPanel.d.ts +7 -0
  369. package/types/devtools/FrappeDevtoolsPanel.d.ts.map +1 -0
  370. package/types/devtools/index.d.ts +4 -0
  371. package/types/devtools/index.d.ts.map +1 -0
  372. package/types/devtools/plugin.d.ts +9 -0
  373. package/types/devtools/plugin.d.ts.map +1 -0
  374. package/types/devtools/theme.d.ts +15 -0
  375. package/types/devtools/theme.d.ts.map +1 -0
  376. package/types/doctype.d.ts +256 -0
  377. package/types/doctype.d.ts.map +1 -0
  378. package/types/file.d.ts +15 -0
  379. package/types/file.d.ts.map +1 -0
  380. package/types/fixtureDb.d.ts +76 -0
  381. package/types/fixtureDb.d.ts.map +1 -0
  382. package/types/fixtures.d.ts +55 -0
  383. package/types/fixtures.d.ts.map +1 -0
  384. package/types/frappeApp.d.ts +45 -0
  385. package/types/frappeApp.d.ts.map +1 -0
  386. package/types/frappeReact.d.ts +270 -0
  387. package/types/frappeReact.d.ts.map +1 -0
  388. package/types/index.d.ts +44 -0
  389. package/types/index.d.ts.map +1 -0
  390. package/types/optimistic.d.ts +38 -0
  391. package/types/optimistic.d.ts.map +1 -0
  392. package/types/pacer.d.ts +193 -0
  393. package/types/pacer.d.ts.map +1 -0
  394. package/types/plugin/index.d.ts +11 -0
  395. package/types/plugin/index.d.ts.map +1 -0
  396. package/types/realtime.d.ts +121 -0
  397. package/types/realtime.d.ts.map +1 -0
  398. package/types/sync/backfill.d.ts +60 -0
  399. package/types/sync/backfill.d.ts.map +1 -0
  400. package/types/sync/filters.d.ts +101 -0
  401. package/types/sync/filters.d.ts.map +1 -0
  402. package/types/sync/index.d.ts +181 -0
  403. package/types/sync/index.d.ts.map +1 -0
  404. package/types/sync/merge.d.ts +59 -0
  405. package/types/sync/merge.d.ts.map +1 -0
  406. package/types/sync/mutationEngine.d.ts +117 -0
  407. package/types/sync/mutationEngine.d.ts.map +1 -0
  408. package/types/sync/mutationJournal.d.ts +60 -0
  409. package/types/sync/mutationJournal.d.ts.map +1 -0
  410. package/types/sync/normalizedCache.d.ts +59 -0
  411. package/types/sync/normalizedCache.d.ts.map +1 -0
  412. package/types/sync/persistence.d.ts +185 -0
  413. package/types/sync/persistence.d.ts.map +1 -0
  414. package/types/sync/realtime.d.ts +121 -0
  415. package/types/sync/realtime.d.ts.map +1 -0
  416. package/types/sync/rehydration.d.ts +109 -0
  417. package/types/sync/rehydration.d.ts.map +1 -0
  418. package/types/sync/storage.d.ts +65 -0
  419. package/types/sync/storage.d.ts.map +1 -0
  420. package/types/sync/subscriptionManager.d.ts +161 -0
  421. package/types/sync/subscriptionManager.d.ts.map +1 -0
  422. package/types/sync/types.d.ts +435 -0
  423. package/types/sync/types.d.ts.map +1 -0
  424. package/types/sync/virtualPageManager.d.ts +190 -0
  425. package/types/sync/virtualPageManager.d.ts.map +1 -0
  426. package/types/useLiveQuery.d.ts +16 -0
  427. package/types/useLiveQuery.d.ts.map +1 -0
  428. package/types/util.d.ts +24 -0
  429. package/types/util.d.ts.map +1 -0
  430. package/dist/cjs/auth.spec.cjs +0 -322
  431. package/dist/cjs/auth.spec.native.js +0 -329
  432. package/dist/cjs/auth.spec.native.js.map +0 -1
  433. package/dist/cjs/call.spec.cjs +0 -427
  434. package/dist/cjs/call.spec.native.js +0 -430
  435. package/dist/cjs/call.spec.native.js.map +0 -1
  436. package/dist/cjs/collection.spec.cjs +0 -186
  437. package/dist/cjs/collection.spec.native.js +0 -216
  438. package/dist/cjs/collection.spec.native.js.map +0 -1
  439. package/dist/cjs/common/types.spec.cjs +0 -266
  440. package/dist/cjs/common/types.spec.native.js +0 -271
  441. package/dist/cjs/common/types.spec.native.js.map +0 -1
  442. package/dist/cjs/core/http.spec.cjs +0 -1259
  443. package/dist/cjs/core/http.spec.native.js +0 -1401
  444. package/dist/cjs/core/http.spec.native.js.map +0 -1
  445. package/dist/cjs/core/wire.spec.cjs +0 -478
  446. package/dist/cjs/core/wire.spec.native.js +0 -482
  447. package/dist/cjs/core/wire.spec.native.js.map +0 -1
  448. package/dist/cjs/db.spec.cjs +0 -862
  449. package/dist/cjs/db.spec.native.js +0 -865
  450. package/dist/cjs/db.spec.native.js.map +0 -1
  451. package/dist/cjs/doctype.spec.cjs +0 -460
  452. package/dist/cjs/doctype.spec.native.js +0 -538
  453. package/dist/cjs/doctype.spec.native.js.map +0 -1
  454. package/dist/cjs/file.spec.cjs +0 -315
  455. package/dist/cjs/file.spec.native.js +0 -342
  456. package/dist/cjs/file.spec.native.js.map +0 -1
  457. package/dist/cjs/frappeApp.spec.cjs +0 -306
  458. package/dist/cjs/frappeApp.spec.native.js +0 -308
  459. package/dist/cjs/frappeApp.spec.native.js.map +0 -1
  460. package/dist/cjs/frappeReact.spec.cjs +0 -531
  461. package/dist/cjs/frappeReact.spec.native.js +0 -670
  462. package/dist/cjs/frappeReact.spec.native.js.map +0 -1
  463. package/dist/cjs/optimistic.spec.cjs +0 -11
  464. package/dist/cjs/optimistic.spec.native.js +0 -19
  465. package/dist/cjs/optimistic.spec.native.js.map +0 -1
  466. package/dist/cjs/pacer.spec.cjs +0 -470
  467. package/dist/cjs/pacer.spec.native.js +0 -537
  468. package/dist/cjs/pacer.spec.native.js.map +0 -1
  469. package/dist/cjs/realtime.spec.cjs +0 -326
  470. package/dist/cjs/realtime.spec.native.js +0 -392
  471. package/dist/cjs/realtime.spec.native.js.map +0 -1
  472. package/dist/cjs/sync/backfill.spec.cjs +0 -586
  473. package/dist/cjs/sync/backfill.spec.native.js +0 -712
  474. package/dist/cjs/sync/backfill.spec.native.js.map +0 -1
  475. package/dist/cjs/sync/debug.spec.cjs +0 -125
  476. package/dist/cjs/sync/debug.spec.native.js +0 -133
  477. package/dist/cjs/sync/debug.spec.native.js.map +0 -1
  478. package/dist/cjs/sync/filters.spec.cjs +0 -168
  479. package/dist/cjs/sync/filters.spec.native.js +0 -173
  480. package/dist/cjs/sync/filters.spec.native.js.map +0 -1
  481. package/dist/cjs/sync/merge.spec.cjs +0 -908
  482. package/dist/cjs/sync/merge.spec.native.js +0 -937
  483. package/dist/cjs/sync/merge.spec.native.js.map +0 -1
  484. package/dist/cjs/sync/multiOrderBy.spec.cjs +0 -165
  485. package/dist/cjs/sync/multiOrderBy.spec.native.js +0 -229
  486. package/dist/cjs/sync/multiOrderBy.spec.native.js.map +0 -1
  487. package/dist/cjs/sync/mutationEngine.spec.cjs +0 -1158
  488. package/dist/cjs/sync/mutationEngine.spec.native.js +0 -1173
  489. package/dist/cjs/sync/mutationEngine.spec.native.js.map +0 -1
  490. package/dist/cjs/sync/mutationJournal.spec.cjs +0 -330
  491. package/dist/cjs/sync/mutationJournal.spec.native.js +0 -333
  492. package/dist/cjs/sync/mutationJournal.spec.native.js.map +0 -1
  493. package/dist/cjs/sync/mutations.spec.cjs +0 -327
  494. package/dist/cjs/sync/mutations.spec.native.js +0 -330
  495. package/dist/cjs/sync/mutations.spec.native.js.map +0 -1
  496. package/dist/cjs/sync/normalizedCache.spec.cjs +0 -302
  497. package/dist/cjs/sync/normalizedCache.spec.native.js +0 -311
  498. package/dist/cjs/sync/normalizedCache.spec.native.js.map +0 -1
  499. package/dist/cjs/sync/persistence.spec.cjs +0 -562
  500. package/dist/cjs/sync/persistence.spec.native.js +0 -572
  501. package/dist/cjs/sync/persistence.spec.native.js.map +0 -1
  502. package/dist/cjs/sync/realtime.spec.cjs +0 -499
  503. package/dist/cjs/sync/realtime.spec.native.js +0 -512
  504. package/dist/cjs/sync/realtime.spec.native.js.map +0 -1
  505. package/dist/cjs/sync/rehydration.spec.cjs +0 -731
  506. package/dist/cjs/sync/rehydration.spec.native.js +0 -736
  507. package/dist/cjs/sync/rehydration.spec.native.js.map +0 -1
  508. package/dist/cjs/sync/storage.spec.cjs +0 -446
  509. package/dist/cjs/sync/storage.spec.native.js +0 -470
  510. package/dist/cjs/sync/storage.spec.native.js.map +0 -1
  511. package/dist/cjs/sync/subscriptionManager.spec.cjs +0 -1102
  512. package/dist/cjs/sync/subscriptionManager.spec.native.js +0 -1136
  513. package/dist/cjs/sync/subscriptionManager.spec.native.js.map +0 -1
  514. package/dist/cjs/sync/subscriptions.spec.cjs +0 -937
  515. package/dist/cjs/sync/subscriptions.spec.native.js +0 -969
  516. package/dist/cjs/sync/subscriptions.spec.native.js.map +0 -1
  517. package/dist/cjs/sync/syncModule.spec.cjs +0 -206
  518. package/dist/cjs/sync/syncModule.spec.native.js +0 -222
  519. package/dist/cjs/sync/syncModule.spec.native.js.map +0 -1
  520. package/dist/cjs/sync/types.spec.cjs +0 -246
  521. package/dist/cjs/sync/types.spec.native.js +0 -256
  522. package/dist/cjs/sync/types.spec.native.js.map +0 -1
  523. package/dist/cjs/sync/virtualPageManager.spec.cjs +0 -801
  524. package/dist/cjs/sync/virtualPageManager.spec.native.js +0 -873
  525. package/dist/cjs/sync/virtualPageManager.spec.native.js.map +0 -1
  526. package/dist/cjs/util.spec.cjs +0 -43
  527. package/dist/cjs/util.spec.native.js +0 -48
  528. package/dist/cjs/util.spec.native.js.map +0 -1
  529. package/dist/esm/auth.spec.mjs +0 -323
  530. package/dist/esm/auth.spec.mjs.map +0 -1
  531. package/dist/esm/auth.spec.native.js +0 -327
  532. package/dist/esm/auth.spec.native.js.map +0 -1
  533. package/dist/esm/call.spec.mjs +0 -428
  534. package/dist/esm/call.spec.mjs.map +0 -1
  535. package/dist/esm/call.spec.native.js +0 -428
  536. package/dist/esm/call.spec.native.js.map +0 -1
  537. package/dist/esm/collection.spec.mjs +0 -187
  538. package/dist/esm/collection.spec.mjs.map +0 -1
  539. package/dist/esm/collection.spec.native.js +0 -214
  540. package/dist/esm/collection.spec.native.js.map +0 -1
  541. package/dist/esm/common/types.spec.mjs +0 -267
  542. package/dist/esm/common/types.spec.mjs.map +0 -1
  543. package/dist/esm/common/types.spec.native.js +0 -269
  544. package/dist/esm/common/types.spec.native.js.map +0 -1
  545. package/dist/esm/core/http.spec.mjs +0 -1260
  546. package/dist/esm/core/http.spec.mjs.map +0 -1
  547. package/dist/esm/core/http.spec.native.js +0 -1399
  548. package/dist/esm/core/http.spec.native.js.map +0 -1
  549. package/dist/esm/core/wire.spec.mjs +0 -479
  550. package/dist/esm/core/wire.spec.mjs.map +0 -1
  551. package/dist/esm/core/wire.spec.native.js +0 -480
  552. package/dist/esm/core/wire.spec.native.js.map +0 -1
  553. package/dist/esm/db.spec.mjs +0 -863
  554. package/dist/esm/db.spec.mjs.map +0 -1
  555. package/dist/esm/db.spec.native.js +0 -863
  556. package/dist/esm/db.spec.native.js.map +0 -1
  557. package/dist/esm/doctype.spec.mjs +0 -461
  558. package/dist/esm/doctype.spec.mjs.map +0 -1
  559. package/dist/esm/doctype.spec.native.js +0 -536
  560. package/dist/esm/doctype.spec.native.js.map +0 -1
  561. package/dist/esm/file.spec.mjs +0 -316
  562. package/dist/esm/file.spec.mjs.map +0 -1
  563. package/dist/esm/file.spec.native.js +0 -340
  564. package/dist/esm/file.spec.native.js.map +0 -1
  565. package/dist/esm/frappeApp.spec.mjs +0 -307
  566. package/dist/esm/frappeApp.spec.mjs.map +0 -1
  567. package/dist/esm/frappeApp.spec.native.js +0 -306
  568. package/dist/esm/frappeApp.spec.native.js.map +0 -1
  569. package/dist/esm/frappeReact.spec.mjs +0 -532
  570. package/dist/esm/frappeReact.spec.mjs.map +0 -1
  571. package/dist/esm/frappeReact.spec.native.js +0 -668
  572. package/dist/esm/frappeReact.spec.native.js.map +0 -1
  573. package/dist/esm/optimistic.spec.mjs +0 -12
  574. package/dist/esm/optimistic.spec.mjs.map +0 -1
  575. package/dist/esm/optimistic.spec.native.js +0 -17
  576. package/dist/esm/optimistic.spec.native.js.map +0 -1
  577. package/dist/esm/pacer.spec.mjs +0 -447
  578. package/dist/esm/pacer.spec.mjs.map +0 -1
  579. package/dist/esm/pacer.spec.native.js +0 -511
  580. package/dist/esm/pacer.spec.native.js.map +0 -1
  581. package/dist/esm/realtime.spec.mjs +0 -327
  582. package/dist/esm/realtime.spec.mjs.map +0 -1
  583. package/dist/esm/realtime.spec.native.js +0 -390
  584. package/dist/esm/realtime.spec.native.js.map +0 -1
  585. package/dist/esm/sync/backfill.spec.mjs +0 -563
  586. package/dist/esm/sync/backfill.spec.mjs.map +0 -1
  587. package/dist/esm/sync/backfill.spec.native.js +0 -686
  588. package/dist/esm/sync/backfill.spec.native.js.map +0 -1
  589. package/dist/esm/sync/debug.spec.mjs +0 -102
  590. package/dist/esm/sync/debug.spec.mjs.map +0 -1
  591. package/dist/esm/sync/debug.spec.native.js +0 -107
  592. package/dist/esm/sync/debug.spec.native.js.map +0 -1
  593. package/dist/esm/sync/filters.spec.mjs +0 -169
  594. package/dist/esm/sync/filters.spec.mjs.map +0 -1
  595. package/dist/esm/sync/filters.spec.native.js +0 -171
  596. package/dist/esm/sync/filters.spec.native.js.map +0 -1
  597. package/dist/esm/sync/merge.spec.mjs +0 -909
  598. package/dist/esm/sync/merge.spec.mjs.map +0 -1
  599. package/dist/esm/sync/merge.spec.native.js +0 -935
  600. package/dist/esm/sync/merge.spec.native.js.map +0 -1
  601. package/dist/esm/sync/multiOrderBy.spec.mjs +0 -166
  602. package/dist/esm/sync/multiOrderBy.spec.mjs.map +0 -1
  603. package/dist/esm/sync/multiOrderBy.spec.native.js +0 -227
  604. package/dist/esm/sync/multiOrderBy.spec.native.js.map +0 -1
  605. package/dist/esm/sync/mutationEngine.spec.mjs +0 -1159
  606. package/dist/esm/sync/mutationEngine.spec.mjs.map +0 -1
  607. package/dist/esm/sync/mutationEngine.spec.native.js +0 -1171
  608. package/dist/esm/sync/mutationEngine.spec.native.js.map +0 -1
  609. package/dist/esm/sync/mutationJournal.spec.mjs +0 -331
  610. package/dist/esm/sync/mutationJournal.spec.mjs.map +0 -1
  611. package/dist/esm/sync/mutationJournal.spec.native.js +0 -331
  612. package/dist/esm/sync/mutationJournal.spec.native.js.map +0 -1
  613. package/dist/esm/sync/mutations.spec.mjs +0 -328
  614. package/dist/esm/sync/mutations.spec.mjs.map +0 -1
  615. package/dist/esm/sync/mutations.spec.native.js +0 -328
  616. package/dist/esm/sync/mutations.spec.native.js.map +0 -1
  617. package/dist/esm/sync/normalizedCache.spec.mjs +0 -303
  618. package/dist/esm/sync/normalizedCache.spec.mjs.map +0 -1
  619. package/dist/esm/sync/normalizedCache.spec.native.js +0 -309
  620. package/dist/esm/sync/normalizedCache.spec.native.js.map +0 -1
  621. package/dist/esm/sync/persistence.spec.mjs +0 -563
  622. package/dist/esm/sync/persistence.spec.mjs.map +0 -1
  623. package/dist/esm/sync/persistence.spec.native.js +0 -570
  624. package/dist/esm/sync/persistence.spec.native.js.map +0 -1
  625. package/dist/esm/sync/realtime.spec.mjs +0 -500
  626. package/dist/esm/sync/realtime.spec.mjs.map +0 -1
  627. package/dist/esm/sync/realtime.spec.native.js +0 -510
  628. package/dist/esm/sync/realtime.spec.native.js.map +0 -1
  629. package/dist/esm/sync/rehydration.spec.mjs +0 -732
  630. package/dist/esm/sync/rehydration.spec.mjs.map +0 -1
  631. package/dist/esm/sync/rehydration.spec.native.js +0 -734
  632. package/dist/esm/sync/rehydration.spec.native.js.map +0 -1
  633. package/dist/esm/sync/storage.spec.mjs +0 -423
  634. package/dist/esm/sync/storage.spec.mjs.map +0 -1
  635. package/dist/esm/sync/storage.spec.native.js +0 -444
  636. package/dist/esm/sync/storage.spec.native.js.map +0 -1
  637. package/dist/esm/sync/subscriptionManager.spec.mjs +0 -1079
  638. package/dist/esm/sync/subscriptionManager.spec.mjs.map +0 -1
  639. package/dist/esm/sync/subscriptionManager.spec.native.js +0 -1110
  640. package/dist/esm/sync/subscriptionManager.spec.native.js.map +0 -1
  641. package/dist/esm/sync/subscriptions.spec.mjs +0 -914
  642. package/dist/esm/sync/subscriptions.spec.mjs.map +0 -1
  643. package/dist/esm/sync/subscriptions.spec.native.js +0 -943
  644. package/dist/esm/sync/subscriptions.spec.native.js.map +0 -1
  645. package/dist/esm/sync/syncModule.spec.mjs +0 -207
  646. package/dist/esm/sync/syncModule.spec.mjs.map +0 -1
  647. package/dist/esm/sync/syncModule.spec.native.js +0 -220
  648. package/dist/esm/sync/syncModule.spec.native.js.map +0 -1
  649. package/dist/esm/sync/types.spec.mjs +0 -247
  650. package/dist/esm/sync/types.spec.mjs.map +0 -1
  651. package/dist/esm/sync/types.spec.native.js +0 -254
  652. package/dist/esm/sync/types.spec.native.js.map +0 -1
  653. package/dist/esm/sync/virtualPageManager.spec.mjs +0 -802
  654. package/dist/esm/sync/virtualPageManager.spec.mjs.map +0 -1
  655. package/dist/esm/sync/virtualPageManager.spec.native.js +0 -871
  656. package/dist/esm/sync/virtualPageManager.spec.native.js.map +0 -1
  657. package/dist/esm/util.spec.mjs +0 -20
  658. package/dist/esm/util.spec.mjs.map +0 -1
  659. package/dist/esm/util.spec.native.js +0 -22
  660. package/dist/esm/util.spec.native.js.map +0 -1
  661. package/dist/jsx/auth.spec.mjs +0 -323
  662. package/dist/jsx/auth.spec.mjs.map +0 -1
  663. package/dist/jsx/auth.spec.native.js +0 -329
  664. package/dist/jsx/auth.spec.native.js.map +0 -1
  665. package/dist/jsx/call.spec.mjs +0 -428
  666. package/dist/jsx/call.spec.mjs.map +0 -1
  667. package/dist/jsx/call.spec.native.js +0 -430
  668. package/dist/jsx/call.spec.native.js.map +0 -1
  669. package/dist/jsx/collection.spec.mjs +0 -187
  670. package/dist/jsx/collection.spec.mjs.map +0 -1
  671. package/dist/jsx/collection.spec.native.js +0 -216
  672. package/dist/jsx/collection.spec.native.js.map +0 -1
  673. package/dist/jsx/common/types.spec.mjs +0 -267
  674. package/dist/jsx/common/types.spec.mjs.map +0 -1
  675. package/dist/jsx/common/types.spec.native.js +0 -271
  676. package/dist/jsx/common/types.spec.native.js.map +0 -1
  677. package/dist/jsx/core/http.spec.mjs +0 -1260
  678. package/dist/jsx/core/http.spec.mjs.map +0 -1
  679. package/dist/jsx/core/http.spec.native.js +0 -1401
  680. package/dist/jsx/core/http.spec.native.js.map +0 -1
  681. package/dist/jsx/core/wire.spec.mjs +0 -479
  682. package/dist/jsx/core/wire.spec.mjs.map +0 -1
  683. package/dist/jsx/core/wire.spec.native.js +0 -482
  684. package/dist/jsx/core/wire.spec.native.js.map +0 -1
  685. package/dist/jsx/db.spec.mjs +0 -863
  686. package/dist/jsx/db.spec.mjs.map +0 -1
  687. package/dist/jsx/db.spec.native.js +0 -865
  688. package/dist/jsx/db.spec.native.js.map +0 -1
  689. package/dist/jsx/doctype.spec.mjs +0 -461
  690. package/dist/jsx/doctype.spec.mjs.map +0 -1
  691. package/dist/jsx/doctype.spec.native.js +0 -538
  692. package/dist/jsx/doctype.spec.native.js.map +0 -1
  693. package/dist/jsx/file.spec.mjs +0 -316
  694. package/dist/jsx/file.spec.mjs.map +0 -1
  695. package/dist/jsx/file.spec.native.js +0 -342
  696. package/dist/jsx/file.spec.native.js.map +0 -1
  697. package/dist/jsx/frappeApp.spec.mjs +0 -307
  698. package/dist/jsx/frappeApp.spec.mjs.map +0 -1
  699. package/dist/jsx/frappeApp.spec.native.js +0 -308
  700. package/dist/jsx/frappeApp.spec.native.js.map +0 -1
  701. package/dist/jsx/frappeReact.spec.mjs +0 -532
  702. package/dist/jsx/frappeReact.spec.mjs.map +0 -1
  703. package/dist/jsx/frappeReact.spec.native.js +0 -670
  704. package/dist/jsx/frappeReact.spec.native.js.map +0 -1
  705. package/dist/jsx/optimistic.spec.mjs +0 -12
  706. package/dist/jsx/optimistic.spec.mjs.map +0 -1
  707. package/dist/jsx/optimistic.spec.native.js +0 -19
  708. package/dist/jsx/optimistic.spec.native.js.map +0 -1
  709. package/dist/jsx/pacer.spec.mjs +0 -447
  710. package/dist/jsx/pacer.spec.mjs.map +0 -1
  711. package/dist/jsx/pacer.spec.native.js +0 -537
  712. package/dist/jsx/pacer.spec.native.js.map +0 -1
  713. package/dist/jsx/realtime.spec.mjs +0 -327
  714. package/dist/jsx/realtime.spec.mjs.map +0 -1
  715. package/dist/jsx/realtime.spec.native.js +0 -392
  716. package/dist/jsx/realtime.spec.native.js.map +0 -1
  717. package/dist/jsx/sync/backfill.spec.mjs +0 -563
  718. package/dist/jsx/sync/backfill.spec.mjs.map +0 -1
  719. package/dist/jsx/sync/backfill.spec.native.js +0 -712
  720. package/dist/jsx/sync/backfill.spec.native.js.map +0 -1
  721. package/dist/jsx/sync/debug.spec.mjs +0 -102
  722. package/dist/jsx/sync/debug.spec.mjs.map +0 -1
  723. package/dist/jsx/sync/debug.spec.native.js +0 -133
  724. package/dist/jsx/sync/debug.spec.native.js.map +0 -1
  725. package/dist/jsx/sync/filters.spec.mjs +0 -169
  726. package/dist/jsx/sync/filters.spec.mjs.map +0 -1
  727. package/dist/jsx/sync/filters.spec.native.js +0 -173
  728. package/dist/jsx/sync/filters.spec.native.js.map +0 -1
  729. package/dist/jsx/sync/merge.spec.mjs +0 -909
  730. package/dist/jsx/sync/merge.spec.mjs.map +0 -1
  731. package/dist/jsx/sync/merge.spec.native.js +0 -937
  732. package/dist/jsx/sync/merge.spec.native.js.map +0 -1
  733. package/dist/jsx/sync/multiOrderBy.spec.mjs +0 -166
  734. package/dist/jsx/sync/multiOrderBy.spec.mjs.map +0 -1
  735. package/dist/jsx/sync/multiOrderBy.spec.native.js +0 -229
  736. package/dist/jsx/sync/multiOrderBy.spec.native.js.map +0 -1
  737. package/dist/jsx/sync/mutationEngine.spec.mjs +0 -1159
  738. package/dist/jsx/sync/mutationEngine.spec.mjs.map +0 -1
  739. package/dist/jsx/sync/mutationEngine.spec.native.js +0 -1173
  740. package/dist/jsx/sync/mutationEngine.spec.native.js.map +0 -1
  741. package/dist/jsx/sync/mutationJournal.spec.mjs +0 -331
  742. package/dist/jsx/sync/mutationJournal.spec.mjs.map +0 -1
  743. package/dist/jsx/sync/mutationJournal.spec.native.js +0 -333
  744. package/dist/jsx/sync/mutationJournal.spec.native.js.map +0 -1
  745. package/dist/jsx/sync/mutations.spec.mjs +0 -328
  746. package/dist/jsx/sync/mutations.spec.mjs.map +0 -1
  747. package/dist/jsx/sync/mutations.spec.native.js +0 -330
  748. package/dist/jsx/sync/mutations.spec.native.js.map +0 -1
  749. package/dist/jsx/sync/normalizedCache.spec.mjs +0 -303
  750. package/dist/jsx/sync/normalizedCache.spec.mjs.map +0 -1
  751. package/dist/jsx/sync/normalizedCache.spec.native.js +0 -311
  752. package/dist/jsx/sync/normalizedCache.spec.native.js.map +0 -1
  753. package/dist/jsx/sync/persistence.spec.mjs +0 -563
  754. package/dist/jsx/sync/persistence.spec.mjs.map +0 -1
  755. package/dist/jsx/sync/persistence.spec.native.js +0 -572
  756. package/dist/jsx/sync/persistence.spec.native.js.map +0 -1
  757. package/dist/jsx/sync/realtime.spec.mjs +0 -500
  758. package/dist/jsx/sync/realtime.spec.mjs.map +0 -1
  759. package/dist/jsx/sync/realtime.spec.native.js +0 -512
  760. package/dist/jsx/sync/realtime.spec.native.js.map +0 -1
  761. package/dist/jsx/sync/rehydration.spec.mjs +0 -732
  762. package/dist/jsx/sync/rehydration.spec.mjs.map +0 -1
  763. package/dist/jsx/sync/rehydration.spec.native.js +0 -736
  764. package/dist/jsx/sync/rehydration.spec.native.js.map +0 -1
  765. package/dist/jsx/sync/storage.spec.mjs +0 -423
  766. package/dist/jsx/sync/storage.spec.mjs.map +0 -1
  767. package/dist/jsx/sync/storage.spec.native.js +0 -470
  768. package/dist/jsx/sync/storage.spec.native.js.map +0 -1
  769. package/dist/jsx/sync/subscriptionManager.spec.mjs +0 -1079
  770. package/dist/jsx/sync/subscriptionManager.spec.mjs.map +0 -1
  771. package/dist/jsx/sync/subscriptionManager.spec.native.js +0 -1136
  772. package/dist/jsx/sync/subscriptionManager.spec.native.js.map +0 -1
  773. package/dist/jsx/sync/subscriptions.spec.mjs +0 -914
  774. package/dist/jsx/sync/subscriptions.spec.mjs.map +0 -1
  775. package/dist/jsx/sync/subscriptions.spec.native.js +0 -969
  776. package/dist/jsx/sync/subscriptions.spec.native.js.map +0 -1
  777. package/dist/jsx/sync/syncModule.spec.mjs +0 -207
  778. package/dist/jsx/sync/syncModule.spec.mjs.map +0 -1
  779. package/dist/jsx/sync/syncModule.spec.native.js +0 -222
  780. package/dist/jsx/sync/syncModule.spec.native.js.map +0 -1
  781. package/dist/jsx/sync/types.spec.mjs +0 -247
  782. package/dist/jsx/sync/types.spec.mjs.map +0 -1
  783. package/dist/jsx/sync/types.spec.native.js +0 -256
  784. package/dist/jsx/sync/types.spec.native.js.map +0 -1
  785. package/dist/jsx/sync/virtualPageManager.spec.mjs +0 -802
  786. package/dist/jsx/sync/virtualPageManager.spec.mjs.map +0 -1
  787. package/dist/jsx/sync/virtualPageManager.spec.native.js +0 -873
  788. package/dist/jsx/sync/virtualPageManager.spec.native.js.map +0 -1
  789. package/dist/jsx/util.spec.mjs +0 -20
  790. package/dist/jsx/util.spec.mjs.map +0 -1
  791. package/dist/jsx/util.spec.native.js +0 -48
  792. package/dist/jsx/util.spec.native.js.map +0 -1
@@ -1,1159 +0,0 @@
1
- import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
- import { MutationEngine } from "./mutationEngine.mjs";
3
- import { RehydrationReason } from "./types.mjs";
4
- import { Operation, Status } from "./types.mjs";
5
- describe("MutationEngine", () => {
6
- let mutationEngine;
7
- let mockDb;
8
- let mockRealtime;
9
- let mockNormalizedCache;
10
- let mockMutationJournal;
11
- let mockSubscriptionManager;
12
- let mockRehydrationManager;
13
- const mockDoc = {
14
- name: "test-doc",
15
- doctype: "TestDoc",
16
- title: "Test Document",
17
- modified: "2024-01-01T10:00:00",
18
- creation: "2024-01-01T09:00:00",
19
- owner: "test-user",
20
- modified_by: "test-user"
21
- };
22
- beforeEach(() => {
23
- vi.useFakeTimers();
24
- const mockCall = {
25
- post: vi.fn().mockResolvedValue({
26
- results: []
27
- })
28
- };
29
- mockDb = {
30
- getDoc: vi.fn().mockResolvedValue(mockDoc),
31
- createDoc: vi.fn().mockResolvedValue({
32
- ...mockDoc,
33
- name: "real-doc"
34
- }),
35
- updateDoc: vi.fn().mockResolvedValue({
36
- ...mockDoc,
37
- title: "Updated"
38
- }),
39
- deleteDoc: vi.fn().mockResolvedValue(void 0),
40
- call: mockCall
41
- };
42
- mockRealtime = {
43
- isHealthy: vi.fn().mockReturnValue(true)
44
- };
45
- mockNormalizedCache = {
46
- get: vi.fn().mockReturnValue(mockDoc),
47
- upsert: vi.fn(),
48
- remove: vi.fn()
49
- };
50
- mockMutationJournal = {
51
- add: vi.fn(),
52
- confirm: vi.fn(),
53
- fail: vi.fn(),
54
- get: vi.fn().mockReturnValue({
55
- doctype: "TestDoc",
56
- docname: "test-doc",
57
- values: mockDoc,
58
- operation: Operation.Update,
59
- version: "2024-01-01T10:00:00",
60
- status: Status.Pending,
61
- snapshot: mockDoc
62
- }),
63
- listPending: vi.fn().mockReturnValue([])
64
- };
65
- const mockSubscription = {
66
- id: "sub1",
67
- query: {
68
- doctype: "TestDoc",
69
- fields: ["*"],
70
- filters: {},
71
- limit: 20
72
- },
73
- docIds: ["doc1", "doc2"],
74
- checkpoint: "checkpoint1",
75
- metadata: {}
76
- };
77
- mockSubscriptionManager = {
78
- getAllSubscriptions: vi.fn().mockReturnValue(/* @__PURE__ */new Map([["sub1", mockSubscription]])),
79
- updateSubscriptionMembership: vi.fn().mockReturnValue([]),
80
- removeFromAllSubscriptions: vi.fn().mockReturnValue(["sub1"]),
81
- insertDocumentIntoSubscription: vi.fn()
82
- };
83
- mockRehydrationManager = {
84
- scheduleRehydration: vi.fn(),
85
- registerTempIdMapping: vi.fn()
86
- };
87
- Object.defineProperty(global, "crypto", {
88
- value: {
89
- randomUUID: vi.fn().mockReturnValue("uuid-12345")
90
- },
91
- writable: true
92
- });
93
- Object.defineProperty(global, "navigator", {
94
- value: {
95
- onLine: true
96
- },
97
- writable: true
98
- });
99
- vi.spyOn(console, "warn").mockImplementation(() => {});
100
- vi.spyOn(console, "error").mockImplementation(() => {});
101
- });
102
- afterEach(() => {
103
- vi.restoreAllMocks();
104
- vi.useRealTimers();
105
- });
106
- describe("constructor", () => {
107
- it("should initialize with default options", () => {
108
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager);
109
- expect(mutationEngine).toBeDefined();
110
- });
111
- it("should initialize with custom options", () => {
112
- const options = {
113
- batchSize: 20,
114
- batchDelay: 200,
115
- versionField: "timestamp"
116
- };
117
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, options);
118
- expect(mutationEngine).toBeDefined();
119
- });
120
- it("should handle missing realtime module", () => {
121
- mutationEngine = new MutationEngine(mockDb, void 0, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager);
122
- expect(mutationEngine).toBeDefined();
123
- });
124
- });
125
- describe("mutate", () => {
126
- beforeEach(() => {
127
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, {});
128
- });
129
- describe("create mutations", () => {
130
- it("should handle create mutations successfully", async () => {
131
- const mutation = {
132
- mutationId: "mut1",
133
- operation: Operation.Create,
134
- doc: {
135
- doctype: "TestDoc",
136
- name: "temp-doc",
137
- title: "New Document"
138
- },
139
- version: void 0,
140
- affected: []
141
- };
142
- await mutationEngine.mutate(mutation);
143
- expect(mockNormalizedCache.upsert).toHaveBeenCalledWith(expect.objectContaining({
144
- doctype: "TestDoc",
145
- name: "temp-doc",
146
- title: "New Document"
147
- }));
148
- expect(mockDb.createDoc).toHaveBeenCalledWith(expect.objectContaining({
149
- doctype: "TestDoc"
150
- }));
151
- expect(mockMutationJournal.confirm).toHaveBeenCalledWith("mut1");
152
- });
153
- it("should handle create without provided name", async () => {
154
- const mutation = {
155
- mutationId: "mut2",
156
- operation: Operation.Create,
157
- doc: {
158
- doctype: "TestDoc",
159
- title: "New Document"
160
- },
161
- version: void 0,
162
- affected: []
163
- };
164
- await mutationEngine.mutate(mutation);
165
- expect(mockNormalizedCache.upsert).toHaveBeenCalledWith(expect.objectContaining({
166
- doctype: "TestDoc",
167
- name: expect.stringContaining("tmp_"),
168
- title: "New Document"
169
- }));
170
- });
171
- it("should handle temporary to real ID mapping", async () => {
172
- const mutation = {
173
- mutationId: "mut3",
174
- operation: Operation.Create,
175
- doc: {
176
- doctype: "TestDoc",
177
- name: "temp-doc",
178
- title: "New Document"
179
- },
180
- version: void 0,
181
- affected: []
182
- };
183
- mockDb.createDoc.mockResolvedValue({
184
- ...mockDoc,
185
- name: "real-doc-123"
186
- });
187
- await mutationEngine.mutate(mutation);
188
- expect(mockRehydrationManager.registerTempIdMapping).toHaveBeenCalledWith("temp-doc", "real-doc-123");
189
- expect(mockNormalizedCache.remove).toHaveBeenCalledWith({
190
- doctype: "TestDoc",
191
- name: "temp-doc"
192
- });
193
- });
194
- it("should schedule rehydration for affected subscriptions", async () => {
195
- const mutation = {
196
- mutationId: "mut4",
197
- operation: Operation.Create,
198
- doc: {
199
- doctype: "TestDoc",
200
- name: "temp-doc",
201
- title: "New Document"
202
- },
203
- version: void 0,
204
- affected: []
205
- };
206
- await mutationEngine.mutate(mutation);
207
- expect(mockRehydrationManager.scheduleRehydration).toHaveBeenCalledWith(expect.any(Object), RehydrationReason.Create);
208
- });
209
- });
210
- describe("update mutations", () => {
211
- it("should handle update mutations successfully", async () => {
212
- const mutation = {
213
- mutationId: "mut5",
214
- operation: Operation.Update,
215
- doc: {
216
- doctype: "TestDoc",
217
- name: "test-doc",
218
- title: "Updated Title"
219
- },
220
- version: "2024-01-01T10:00:00",
221
- affected: []
222
- };
223
- await mutationEngine.mutate(mutation);
224
- expect(mockNormalizedCache.upsert).toHaveBeenCalledWith(expect.objectContaining({
225
- doctype: "TestDoc",
226
- name: "test-doc",
227
- title: "Updated Title"
228
- }));
229
- expect(mockDb.updateDoc).toHaveBeenCalledWith(expect.objectContaining({
230
- doctype: "TestDoc",
231
- name: "test-doc",
232
- title: "Updated Title"
233
- }));
234
- expect(mockMutationJournal.confirm).toHaveBeenCalledWith("mut5");
235
- });
236
- it("should throw error for update without docname", async () => {
237
- const mutation = {
238
- mutationId: "mut6",
239
- operation: Operation.Update,
240
- doc: {
241
- doctype: "TestDoc",
242
- title: "Updated Title"
243
- },
244
- version: void 0,
245
- affected: []
246
- };
247
- await expect(mutationEngine.mutate(mutation)).rejects.toThrow("docname is required for update/delete operations");
248
- });
249
- it("should determine version from cached document", async () => {
250
- const mutation = {
251
- mutationId: "mut7",
252
- operation: Operation.Update,
253
- doc: {
254
- doctype: "TestDoc",
255
- name: "test-doc",
256
- title: "Updated Title"
257
- },
258
- version: void 0,
259
- affected: []
260
- };
261
- await mutationEngine.mutate(mutation);
262
- expect(mockDb.updateDoc).toHaveBeenCalledWith(expect.objectContaining({
263
- doctype: "TestDoc",
264
- name: "test-doc"
265
- }));
266
- });
267
- it("should fetch document for version when not cached", async () => {
268
- mockNormalizedCache.get.mockReturnValue(void 0);
269
- mockDb.getDoc.mockResolvedValue({
270
- doctype: "TestDoc",
271
- name: "test-doc",
272
- title: "Original Title",
273
- modified: "2024-01-01T10:00:00"
274
- });
275
- const mutation = {
276
- mutationId: "mut8",
277
- operation: Operation.Update,
278
- doc: {
279
- doctype: "TestDoc",
280
- name: "test-doc",
281
- title: "Updated Title"
282
- },
283
- version: void 0,
284
- affected: []
285
- };
286
- await mutationEngine.mutate(mutation);
287
- expect(mockDb.getDoc).toHaveBeenCalledWith("TestDoc", "test-doc");
288
- expect(mockNormalizedCache.upsert).toHaveBeenCalled();
289
- });
290
- it("should handle preflight fetch failures gracefully", async () => {
291
- mockNormalizedCache.get.mockReturnValue(void 0);
292
- mockDb.getDoc.mockRejectedValue(new Error("Network error"));
293
- const mutation = {
294
- mutationId: "mut9",
295
- operation: Operation.Update,
296
- doc: {
297
- doctype: "TestDoc",
298
- name: "test-doc",
299
- title: "Updated Title"
300
- },
301
- version: void 0,
302
- affected: []
303
- };
304
- await mutationEngine.mutate(mutation);
305
- expect(mockDb.updateDoc).toHaveBeenCalledWith(expect.objectContaining({
306
- doctype: "TestDoc",
307
- name: "test-doc"
308
- }));
309
- });
310
- });
311
- describe("delete mutations", () => {
312
- it("should handle delete mutations successfully", async () => {
313
- const mutation = {
314
- mutationId: "mut10",
315
- operation: Operation.Delete,
316
- doc: {
317
- doctype: "TestDoc",
318
- name: "test-doc"
319
- },
320
- version: "2024-01-01T10:00:00",
321
- affected: []
322
- };
323
- await mutationEngine.mutate(mutation);
324
- expect(mockNormalizedCache.remove).toHaveBeenCalledWith({
325
- doctype: "TestDoc",
326
- name: "test-doc"
327
- });
328
- expect(mockSubscriptionManager.removeFromAllSubscriptions).toHaveBeenCalledWith("TestDoc", "test-doc");
329
- expect(mockDb.deleteDoc).toHaveBeenCalledWith(expect.objectContaining({
330
- doctype: "TestDoc",
331
- name: "test-doc"
332
- }));
333
- expect(mockMutationJournal.confirm).toHaveBeenCalledWith("mut10");
334
- });
335
- it("should schedule rehydration for affected subscriptions", async () => {
336
- const mockSubscription = {
337
- id: "sub1",
338
- query: {
339
- doctype: "TestDoc",
340
- fields: ["*"],
341
- filters: {},
342
- limit: 20
343
- },
344
- docIds: ["test-doc", "doc2"],
345
- checkpoint: "checkpoint1",
346
- metadata: {}
347
- };
348
- mockSubscriptionManager.getAllSubscriptions.mockReturnValue(/* @__PURE__ */new Map([["sub1", mockSubscription]]));
349
- const mutation = {
350
- mutationId: "mut11",
351
- operation: Operation.Delete,
352
- doc: {
353
- doctype: "TestDoc",
354
- name: "test-doc"
355
- },
356
- version: void 0,
357
- affected: []
358
- };
359
- await mutationEngine.mutate(mutation);
360
- expect(mockRehydrationManager.scheduleRehydration).toHaveBeenCalledWith(expect.any(Object), RehydrationReason.Delete);
361
- });
362
- it("should throw error for delete without docname", async () => {
363
- const mutation = {
364
- mutationId: "mut12",
365
- operation: Operation.Delete,
366
- doc: {
367
- doctype: "TestDoc"
368
- },
369
- version: void 0,
370
- affected: []
371
- };
372
- await expect(mutationEngine.mutate(mutation)).rejects.toThrow("docname is required for update/delete operations");
373
- });
374
- });
375
- describe("callback integration", () => {
376
- it("should call mutation lifecycle callbacks", async () => {
377
- const callbacks = {
378
- onMutationStart: vi.fn(),
379
- onMutationSuccess: vi.fn(),
380
- onOptimisticApply: vi.fn()
381
- };
382
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, callbacks);
383
- const mutation = {
384
- mutationId: "mut13",
385
- operation: Operation.Update,
386
- doc: {
387
- doctype: "TestDoc",
388
- name: "test-doc",
389
- title: "Updated"
390
- },
391
- version: void 0,
392
- affected: []
393
- };
394
- await mutationEngine.mutate(mutation);
395
- expect(callbacks.onMutationStart).toHaveBeenCalledWith(mutation);
396
- expect(callbacks.onMutationSuccess).toHaveBeenCalledWith(mutation);
397
- expect(callbacks.onOptimisticApply).toHaveBeenCalledWith({
398
- doctype: "TestDoc",
399
- name: "test-doc",
400
- operation: Operation.Update
401
- });
402
- });
403
- });
404
- describe("realtime integration", () => {
405
- it("should refetch documents when realtime is unhealthy", async () => {
406
- mockRealtime.isHealthy.mockReturnValue(false);
407
- const mutation = {
408
- mutationId: "mut14",
409
- operation: Operation.Update,
410
- doc: {
411
- doctype: "TestDoc",
412
- name: "test-doc",
413
- title: "Updated"
414
- },
415
- version: void 0,
416
- affected: [{
417
- doctype: "RelatedDoc",
418
- name: "related-doc"
419
- }]
420
- };
421
- await mutationEngine.mutate(mutation);
422
- expect(mockDb.getDoc).toHaveBeenCalledWith("TestDoc", "test-doc");
423
- expect(mockDb.getDoc).toHaveBeenCalledWith("RelatedDoc", "related-doc");
424
- });
425
- it("should not refetch when realtime is healthy", async () => {
426
- mockRealtime.isHealthy.mockReturnValue(true);
427
- mockDb.getDoc.mockClear();
428
- const mutation = {
429
- mutationId: "mut15",
430
- operation: Operation.Update,
431
- doc: {
432
- doctype: "TestDoc",
433
- name: "test-doc",
434
- title: "Updated"
435
- },
436
- version: "2024-01-01T10:00:00",
437
- affected: []
438
- };
439
- await mutationEngine.mutate(mutation);
440
- expect(mockDb.getDoc).not.toHaveBeenCalled();
441
- });
442
- });
443
- });
444
- describe("error handling", () => {
445
- beforeEach(() => {
446
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, {
447
- onMutationError: vi.fn(),
448
- onConflict: vi.fn()
449
- });
450
- });
451
- it("should handle server errors", async () => {
452
- const error = new Error("Server error");
453
- mockDb.createDoc.mockRejectedValue(error);
454
- const mutation = {
455
- mutationId: "mut16",
456
- operation: Operation.Create,
457
- doc: {
458
- doctype: "TestDoc",
459
- name: "temp-doc",
460
- title: "New Document"
461
- },
462
- version: void 0,
463
- affected: []
464
- };
465
- await expect(mutationEngine.mutate(mutation)).rejects.toThrow("Server error");
466
- expect(mockMutationJournal.fail).toHaveBeenCalledWith("mut16");
467
- });
468
- it("should handle conflict errors (409)", async () => {
469
- const error = {
470
- status: 409
471
- };
472
- mockDb.updateDoc.mockRejectedValue(error);
473
- const mutation = {
474
- mutationId: "mut17",
475
- operation: Operation.Update,
476
- doc: {
477
- doctype: "TestDoc",
478
- name: "test-doc",
479
- title: "Updated"
480
- },
481
- version: "2024-01-01T09:00:00",
482
- affected: []
483
- };
484
- await expect(mutationEngine.mutate(mutation)).rejects.toEqual(error);
485
- expect(mockDb.getDoc).toHaveBeenCalledWith("TestDoc", "test-doc");
486
- });
487
- it("should handle snapshot rollback on error", async () => {
488
- const error = new Error("Update failed");
489
- mockDb.updateDoc.mockRejectedValue(error);
490
- const mutation = {
491
- mutationId: "mut18",
492
- operation: Operation.Update,
493
- doc: {
494
- doctype: "TestDoc",
495
- name: "test-doc",
496
- title: "Updated"
497
- },
498
- version: void 0,
499
- affected: []
500
- };
501
- await expect(mutationEngine.mutate(mutation)).rejects.toThrow("Update failed");
502
- expect(mockNormalizedCache.upsert).toHaveBeenCalledWith(mockDoc);
503
- });
504
- it("should not rollback when offline", async () => {
505
- Object.defineProperty(global, "navigator", {
506
- value: {
507
- onLine: false
508
- },
509
- writable: true
510
- });
511
- const error = new Error("Network error");
512
- mockDb.updateDoc.mockRejectedValue(error);
513
- const mutation = {
514
- mutationId: "mut19",
515
- operation: Operation.Update,
516
- doc: {
517
- doctype: "TestDoc",
518
- name: "test-doc",
519
- title: "Updated"
520
- },
521
- version: void 0,
522
- affected: []
523
- };
524
- await expect(mutationEngine.mutate(mutation)).rejects.toThrow("Network error");
525
- const upsertCalls = mockNormalizedCache.upsert.mock.calls;
526
- const rollbackCall = upsertCalls.find(call => call[0] === mockDoc && upsertCalls.indexOf(call) > 0
527
- // Not the initial optimistic update
528
- );
529
- expect(rollbackCall).toBeUndefined();
530
- });
531
- it("should handle failed create mutations", async () => {
532
- const error = new Error("Create failed");
533
- mockDb.createDoc.mockRejectedValue(error);
534
- const subscription = {
535
- id: "sub1",
536
- query: {
537
- doctype: "TestDoc"
538
- },
539
- docIds: ["temp-doc", "other-doc"]
540
- };
541
- mockSubscriptionManager.getAllSubscriptions.mockReturnValue(/* @__PURE__ */new Map([["sub1", subscription]]));
542
- const mutation = {
543
- mutationId: "mut20",
544
- operation: Operation.Create,
545
- doc: {
546
- doctype: "TestDoc",
547
- name: "temp-doc",
548
- title: "New Document"
549
- },
550
- version: void 0,
551
- affected: []
552
- };
553
- await expect(mutationEngine.mutate(mutation)).rejects.toThrow("Create failed");
554
- expect(subscription.docIds).toEqual(["other-doc"]);
555
- });
556
- });
557
- describe("replayPending", () => {
558
- beforeEach(() => {
559
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, {
560
- onReplayStart: vi.fn(),
561
- onReplayComplete: vi.fn(),
562
- onConflict: vi.fn(),
563
- onMutationError: vi.fn()
564
- });
565
- });
566
- it("should replay pending create mutations", async () => {
567
- const pendingEntry = {
568
- doctype: "TestDoc",
569
- docname: "test-doc",
570
- values: {
571
- doctype: "TestDoc",
572
- name: "test-doc",
573
- title: "Test"
574
- },
575
- operation: Operation.Create,
576
- version: void 0,
577
- status: Status.Pending
578
- };
579
- mockMutationJournal.listPending.mockReturnValue([{
580
- id: "mut21",
581
- entry: pendingEntry
582
- }]);
583
- await mutationEngine.replayPending();
584
- expect(mockDb.createDoc).toHaveBeenCalledWith(expect.objectContaining({
585
- doctype: "TestDoc",
586
- client_mutation_id: "mut21"
587
- }));
588
- expect(mockMutationJournal.confirm).toHaveBeenCalledWith("mut21");
589
- });
590
- it("should replay pending update mutations", async () => {
591
- const pendingEntry = {
592
- doctype: "TestDoc",
593
- docname: "test-doc",
594
- values: {
595
- doctype: "TestDoc",
596
- name: "test-doc",
597
- title: "Updated"
598
- },
599
- operation: Operation.Update,
600
- version: "2024-01-01T10:00:00",
601
- status: Status.Pending
602
- };
603
- mockMutationJournal.listPending.mockReturnValue([{
604
- id: "mut22",
605
- entry: pendingEntry
606
- }]);
607
- await mutationEngine.replayPending();
608
- expect(mockDb.updateDoc).toHaveBeenCalledWith(expect.objectContaining({
609
- doctype: "TestDoc",
610
- name: "test-doc",
611
- client_mutation_id: "mut22",
612
- base_modified: "2024-01-01T10:00:00"
613
- }));
614
- expect(mockMutationJournal.confirm).toHaveBeenCalledWith("mut22");
615
- });
616
- it("should replay pending delete mutations", async () => {
617
- const pendingEntry = {
618
- doctype: "TestDoc",
619
- docname: "test-doc",
620
- values: void 0,
621
- operation: Operation.Delete,
622
- version: void 0,
623
- status: Status.Pending
624
- };
625
- mockMutationJournal.listPending.mockReturnValue([{
626
- id: "mut23",
627
- entry: pendingEntry
628
- }]);
629
- await mutationEngine.replayPending();
630
- expect(mockDb.deleteDoc).toHaveBeenCalledWith(expect.objectContaining({
631
- doctype: "TestDoc",
632
- name: "test-doc",
633
- client_mutation_id: "mut23"
634
- }));
635
- expect(mockMutationJournal.confirm).toHaveBeenCalledWith("mut23");
636
- });
637
- it("should handle replay conflicts", async () => {
638
- const pendingEntry = {
639
- doctype: "TestDoc",
640
- docname: "test-doc",
641
- values: {
642
- doctype: "TestDoc",
643
- name: "test-doc",
644
- title: "Updated"
645
- },
646
- operation: Operation.Update,
647
- version: "2024-01-01T10:00:00",
648
- status: Status.Pending
649
- };
650
- mockMutationJournal.listPending.mockReturnValue([{
651
- id: "mut24",
652
- entry: pendingEntry
653
- }]);
654
- mockDb.updateDoc.mockRejectedValue({
655
- status: 409
656
- });
657
- await mutationEngine.replayPending();
658
- const options = mutationEngine;
659
- expect(options.options.onConflict).toHaveBeenCalledWith({
660
- doctype: "TestDoc",
661
- name: "test-doc"
662
- });
663
- });
664
- it("should handle replay auth errors", async () => {
665
- const pendingEntry = {
666
- doctype: "TestDoc",
667
- docname: "test-doc",
668
- values: {
669
- doctype: "TestDoc",
670
- name: "test-doc",
671
- title: "Updated"
672
- },
673
- operation: Operation.Update,
674
- version: void 0,
675
- status: Status.Pending
676
- };
677
- mockMutationJournal.listPending.mockReturnValue([{
678
- id: "mut25",
679
- entry: pendingEntry
680
- }]);
681
- mockDb.updateDoc.mockRejectedValue({
682
- status: 401
683
- });
684
- await mutationEngine.replayPending();
685
- expect(mockMutationJournal.confirm).not.toHaveBeenCalledWith("mut25");
686
- expect(mockMutationJournal.fail).not.toHaveBeenCalledWith("mut25");
687
- });
688
- it("should handle permanent replay errors", async () => {
689
- const pendingEntry = {
690
- doctype: "TestDoc",
691
- docname: "test-doc",
692
- values: {
693
- doctype: "TestDoc",
694
- name: "test-doc",
695
- title: "Updated"
696
- },
697
- operation: Operation.Update,
698
- version: void 0,
699
- status: Status.Pending
700
- };
701
- mockMutationJournal.listPending.mockReturnValue([{
702
- id: "mut26",
703
- entry: pendingEntry
704
- }]);
705
- mockDb.updateDoc.mockRejectedValue({
706
- status: 400
707
- });
708
- await mutationEngine.replayPending();
709
- expect(mockMutationJournal.fail).toHaveBeenCalledWith("mut26");
710
- });
711
- it("should call replay callbacks", async () => {
712
- mockMutationJournal.listPending.mockReturnValue([]);
713
- await mutationEngine.replayPending();
714
- const options = mutationEngine;
715
- expect(options.options.onReplayStart).toHaveBeenCalled();
716
- expect(options.options.onReplayComplete).toHaveBeenCalledWith({
717
- anyFailed: false
718
- });
719
- });
720
- });
721
- describe("temporary ID management", () => {
722
- beforeEach(() => {
723
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, {});
724
- });
725
- it("should return temporary ID mappings", () => {
726
- const tempMap = mutationEngine.getTemporaryIdToRealNameMap();
727
- expect(tempMap).toBeInstanceOf(Map);
728
- });
729
- it("should clear temporary mappings", () => {
730
- const tempMap = mutationEngine.getTemporaryIdToRealNameMap();
731
- tempMap.set("temp1", "real1");
732
- mutationEngine.clearTemporaryMappings();
733
- expect(tempMap.size).toBe(0);
734
- });
735
- });
736
- describe("cleanup and disposal", () => {
737
- beforeEach(() => {
738
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, {});
739
- });
740
- it("should dispose of resources", () => {
741
- const tempMap = mutationEngine.getTemporaryIdToRealNameMap();
742
- tempMap.set("temp1", "real1");
743
- mutationEngine.dispose();
744
- expect(tempMap.size).toBe(0);
745
- });
746
- });
747
- describe("edge cases", () => {
748
- beforeEach(() => {
749
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, {});
750
- });
751
- it("should handle missing crypto.randomUUID", async () => {
752
- global.crypto = void 0;
753
- const mutation = {
754
- mutationId: "no-crypto",
755
- operation: Operation.Create,
756
- doc: {
757
- doctype: "TestDoc",
758
- title: "New Document"
759
- },
760
- version: void 0,
761
- affected: []
762
- };
763
- mockSubscriptionManager.getAllSubscriptions = vi.fn().mockReturnValue(/* @__PURE__ */new Map());
764
- await expect(mutationEngine.mutate(mutation)).resolves.not.toThrow();
765
- });
766
- it("should handle undefined navigator", async () => {
767
- global.navigator = void 0;
768
- const error = new Error("Update failed");
769
- mockDb.updateDoc.mockRejectedValue(error);
770
- const mutation = {
771
- mutationId: "no-navigator",
772
- operation: Operation.Update,
773
- doc: {
774
- doctype: "TestDoc",
775
- name: "test-doc",
776
- title: "Updated"
777
- },
778
- version: void 0,
779
- affected: []
780
- };
781
- await expect(mutationEngine.mutate(mutation)).rejects.toThrow("Update failed");
782
- expect(mockNormalizedCache.upsert).toHaveBeenCalledTimes(2);
783
- expect(mockNormalizedCache.upsert).toHaveBeenLastCalledWith(mockDoc);
784
- });
785
- it("should handle custom version fields", async () => {
786
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, {
787
- versionFields: {
788
- TestDoc: "timestamp"
789
- }
790
- });
791
- const docWithTimestamp = {
792
- ...mockDoc,
793
- timestamp: "2024-01-01T12:00:00"
794
- };
795
- mockNormalizedCache.get.mockReturnValue(docWithTimestamp);
796
- const mutation = {
797
- mutationId: "custom-version",
798
- operation: Operation.Update,
799
- doc: {
800
- doctype: "TestDoc",
801
- name: "test-doc",
802
- title: "Updated"
803
- },
804
- version: void 0,
805
- affected: []
806
- };
807
- await mutationEngine.mutate(mutation);
808
- expect(mockDb.updateDoc).toHaveBeenCalledWith(expect.objectContaining({
809
- doctype: "TestDoc",
810
- name: "test-doc"
811
- }));
812
- });
813
- });
814
- describe("buildMergeConfig", () => {
815
- it("should apply field merge config via handleConflict auto-merge", async () => {
816
- const onConflict = vi.fn();
817
- const baseDoc = {
818
- ...mockDoc,
819
- priority: 5
820
- };
821
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, {
822
- fieldMergeConfig: {
823
- TestDoc: {
824
- priority: "max"
825
- }
826
- },
827
- onConflict,
828
- onMutationError: vi.fn()
829
- });
830
- mockNormalizedCache.get.mockReturnValue(baseDoc);
831
- mockMutationJournal.get.mockReturnValue({
832
- doctype: "TestDoc",
833
- docname: "test-doc",
834
- values: {
835
- ...baseDoc,
836
- priority: 8
837
- },
838
- operation: Operation.Update,
839
- version: "2024-01-01T10:00:00",
840
- status: Status.Pending,
841
- snapshot: baseDoc
842
- });
843
- mockDb.updateDoc.mockRejectedValueOnce({
844
- status: 409
845
- }).mockResolvedValueOnce({
846
- ...baseDoc,
847
- priority: 10
848
- });
849
- const serverDoc = {
850
- ...baseDoc,
851
- priority: 10,
852
- modified: "2024-01-01T11:00:00"
853
- };
854
- mockDb.getDoc.mockResolvedValue(serverDoc);
855
- const mutation = {
856
- mutationId: "merge-test",
857
- operation: Operation.Update,
858
- doc: {
859
- doctype: "TestDoc",
860
- name: "test-doc",
861
- priority: 8
862
- },
863
- version: "2024-01-01T10:00:00",
864
- affected: []
865
- };
866
- await expect(mutationEngine.mutate(mutation)).rejects.toEqual({
867
- status: 409
868
- });
869
- expect(mockDb.updateDoc).toHaveBeenCalledTimes(2);
870
- const retryCall = mockDb.updateDoc.mock.calls[1][0];
871
- expect(retryCall.priority).toBe(10);
872
- expect(mockMutationJournal.confirm).toHaveBeenCalledWith("merge-test");
873
- expect(onConflict).not.toHaveBeenCalled();
874
- });
875
- });
876
- describe("handleConflict auto-merge", () => {
877
- it("should auto-merge disjoint updates", async () => {
878
- const onConflict = vi.fn();
879
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, {
880
- onConflict,
881
- onMutationError: vi.fn()
882
- });
883
- const baseDoc = {
884
- ...mockDoc,
885
- title: "Original Title",
886
- status: "Draft"
887
- };
888
- mockNormalizedCache.get.mockReturnValue(baseDoc);
889
- mockMutationJournal.get.mockReturnValue({
890
- doctype: "TestDoc",
891
- docname: "test-doc",
892
- values: {
893
- ...baseDoc,
894
- title: "Client Title"
895
- },
896
- operation: Operation.Update,
897
- version: "2024-01-01T10:00:00",
898
- status: Status.Pending,
899
- snapshot: baseDoc
900
- });
901
- mockDb.updateDoc.mockRejectedValueOnce({
902
- status: 409
903
- }).mockResolvedValueOnce({
904
- ...mockDoc
905
- });
906
- const serverDoc = {
907
- ...baseDoc,
908
- status: "Approved",
909
- modified: "2024-01-01T11:00:00"
910
- };
911
- mockDb.getDoc.mockResolvedValue(serverDoc);
912
- const mutation = {
913
- mutationId: "disjoint-test",
914
- operation: Operation.Update,
915
- doc: {
916
- doctype: "TestDoc",
917
- name: "test-doc",
918
- title: "Client Title"
919
- },
920
- version: "2024-01-01T10:00:00",
921
- affected: []
922
- };
923
- await expect(mutationEngine.mutate(mutation)).rejects.toEqual({
924
- status: 409
925
- });
926
- expect(mockDb.updateDoc).toHaveBeenCalledTimes(2);
927
- const retryCall = mockDb.updateDoc.mock.calls[1][0];
928
- expect(retryCall.title).toBe("Client Title");
929
- expect(retryCall.status).toBe("Approved");
930
- expect(mockMutationJournal.confirm).toHaveBeenCalledWith("disjoint-test");
931
- expect(onConflict).not.toHaveBeenCalled();
932
- });
933
- it("should delegate overlapping conflicts to onConflict", async () => {
934
- const onConflict = vi.fn();
935
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, {
936
- onConflict,
937
- onMutationError: vi.fn()
938
- });
939
- const baseDoc = {
940
- ...mockDoc,
941
- title: "Original Title"
942
- };
943
- mockNormalizedCache.get.mockReturnValue(baseDoc);
944
- mockMutationJournal.get.mockReturnValue({
945
- doctype: "TestDoc",
946
- docname: "test-doc",
947
- values: {
948
- ...baseDoc,
949
- title: "Client Title"
950
- },
951
- operation: Operation.Update,
952
- version: "2024-01-01T10:00:00",
953
- status: Status.Pending,
954
- snapshot: baseDoc
955
- });
956
- mockDb.updateDoc.mockRejectedValue({
957
- status: 409
958
- });
959
- const serverDoc = {
960
- ...baseDoc,
961
- title: "Server Title",
962
- modified: "2024-01-01T11:00:00"
963
- };
964
- mockDb.getDoc.mockResolvedValue(serverDoc);
965
- const mutation = {
966
- mutationId: "overlap-test",
967
- operation: Operation.Update,
968
- doc: {
969
- doctype: "TestDoc",
970
- name: "test-doc",
971
- title: "Client Title"
972
- },
973
- version: "2024-01-01T10:00:00",
974
- affected: []
975
- };
976
- await expect(mutationEngine.mutate(mutation)).rejects.toEqual({
977
- status: 409
978
- });
979
- expect(onConflict).toHaveBeenCalledWith({
980
- doctype: "TestDoc",
981
- name: "test-doc"
982
- });
983
- expect(mockDb.updateDoc).toHaveBeenCalledTimes(1);
984
- });
985
- });
986
- describe("onRetry callback", () => {
987
- it("should call onRetry for each pending mutation during replay", async () => {
988
- const onRetry = vi.fn();
989
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, {
990
- onRetry,
991
- onReplayStart: vi.fn(),
992
- onReplayComplete: vi.fn()
993
- });
994
- const pendingEntries = [{
995
- id: "retry-1",
996
- entry: {
997
- doctype: "TestDoc",
998
- docname: "doc-1",
999
- values: {
1000
- doctype: "TestDoc",
1001
- name: "doc-1",
1002
- title: "Doc 1"
1003
- },
1004
- operation: Operation.Update,
1005
- version: "2024-01-01T10:00:00",
1006
- status: Status.Pending
1007
- }
1008
- }, {
1009
- id: "retry-2",
1010
- entry: {
1011
- doctype: "TestDoc",
1012
- docname: "doc-2",
1013
- values: {
1014
- doctype: "TestDoc",
1015
- name: "doc-2",
1016
- title: "Doc 2"
1017
- },
1018
- operation: Operation.Create,
1019
- version: void 0,
1020
- status: Status.Pending
1021
- }
1022
- }];
1023
- mockMutationJournal.listPending.mockReturnValue(pendingEntries);
1024
- const replayPromise = mutationEngine.replayPending();
1025
- await vi.advanceTimersByTimeAsync(1e3);
1026
- await replayPromise;
1027
- expect(onRetry).toHaveBeenCalledTimes(2);
1028
- expect(onRetry).toHaveBeenCalledWith({
1029
- id: "retry-1",
1030
- operation: Operation.Update
1031
- });
1032
- expect(onRetry).toHaveBeenCalledWith({
1033
- id: "retry-2",
1034
- operation: Operation.Create
1035
- });
1036
- });
1037
- });
1038
- describe("batch mutations", () => {
1039
- it("should batch mutations and flush after batchDelay", async () => {
1040
- mockDb.batchMutations = vi.fn().mockResolvedValue([{
1041
- success: true,
1042
- data: {
1043
- ...mockDoc,
1044
- name: "test-doc-1",
1045
- title: "Title 1"
1046
- }
1047
- }, {
1048
- success: true,
1049
- data: {
1050
- ...mockDoc,
1051
- name: "test-doc-2",
1052
- title: "Title 2"
1053
- }
1054
- }, {
1055
- success: true,
1056
- data: {
1057
- ...mockDoc,
1058
- name: "test-doc-3",
1059
- title: "Title 3"
1060
- }
1061
- }]);
1062
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, {
1063
- enableBatching: true,
1064
- batchDelay: 50,
1065
- batchMaxSize: 10
1066
- });
1067
- mockNormalizedCache.get.mockImplementation(ref => ({
1068
- ...mockDoc,
1069
- name: ref.name,
1070
- modified: "2024-01-01T10:00:00"
1071
- }));
1072
- const mutations = [1, 2, 3].map(i => ({
1073
- mutationId: `batch-${i}`,
1074
- operation: Operation.Update,
1075
- doc: {
1076
- doctype: "TestDoc",
1077
- name: `test-doc-${i}`,
1078
- title: `Title ${i}`
1079
- },
1080
- version: "2024-01-01T10:00:00",
1081
- affected: []
1082
- }));
1083
- const promises = mutations.map(m => mutationEngine.mutate(m));
1084
- await vi.advanceTimersByTimeAsync(100);
1085
- await Promise.all(promises);
1086
- expect(mockDb.batchMutations).toHaveBeenCalledTimes(1);
1087
- expect(mockDb.batchMutations).toHaveBeenCalledWith(expect.objectContaining({
1088
- mutations: expect.arrayContaining([expect.objectContaining({
1089
- type: "update",
1090
- doctype: "TestDoc",
1091
- name: "test-doc-1"
1092
- }), expect.objectContaining({
1093
- type: "update",
1094
- doctype: "TestDoc",
1095
- name: "test-doc-2"
1096
- }), expect.objectContaining({
1097
- type: "update",
1098
- doctype: "TestDoc",
1099
- name: "test-doc-3"
1100
- })])
1101
- }));
1102
- });
1103
- it("should flush immediately when batchMaxSize is reached and keep remaining pending", async () => {
1104
- mockDb.batchMutations = vi.fn().mockResolvedValueOnce([{
1105
- success: true,
1106
- data: {
1107
- ...mockDoc,
1108
- name: "test-doc-1"
1109
- }
1110
- }, {
1111
- success: true,
1112
- data: {
1113
- ...mockDoc,
1114
- name: "test-doc-2"
1115
- }
1116
- }, {
1117
- success: true,
1118
- data: {
1119
- ...mockDoc,
1120
- name: "test-doc-3"
1121
- }
1122
- }]).mockResolvedValueOnce([{
1123
- success: true,
1124
- data: {
1125
- ...mockDoc,
1126
- name: "test-doc-4"
1127
- }
1128
- }]);
1129
- mutationEngine = new MutationEngine(mockDb, mockRealtime, mockNormalizedCache, mockMutationJournal, mockSubscriptionManager, mockRehydrationManager, {
1130
- enableBatching: true,
1131
- batchDelay: 50,
1132
- batchMaxSize: 3
1133
- });
1134
- mockNormalizedCache.get.mockImplementation(ref => ({
1135
- ...mockDoc,
1136
- name: ref.name,
1137
- modified: "2024-01-01T10:00:00"
1138
- }));
1139
- const mutations = [1, 2, 3, 4].map(i => ({
1140
- mutationId: `batch-${i}`,
1141
- operation: Operation.Update,
1142
- doc: {
1143
- doctype: "TestDoc",
1144
- name: `test-doc-${i}`,
1145
- title: `Title ${i}`
1146
- },
1147
- version: "2024-01-01T10:00:00",
1148
- affected: []
1149
- }));
1150
- const promises = mutations.map(m => mutationEngine.mutate(m));
1151
- await vi.advanceTimersByTimeAsync(100);
1152
- await Promise.all(promises);
1153
- expect(mockDb.batchMutations).toHaveBeenCalledTimes(2);
1154
- expect(mockDb.batchMutations.mock.calls[0][0].mutations).toHaveLength(3);
1155
- expect(mockDb.batchMutations.mock.calls[1][0].mutations).toHaveLength(1);
1156
- });
1157
- });
1158
- });
1159
- //# sourceMappingURL=mutationEngine.spec.mjs.map