@multiplatform.one/frappe 6.1.0 → 6.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 (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,5 +1,21 @@
1
1
  import { RealtimeEventType, RehydrationReason } from "./types.mjs";
2
2
  class RealtimeHandler {
3
+ reconnectAttempts = 0;
4
+ reconnectTimer;
5
+ hasConnected = false;
6
+ /** Live socket state: true between `connected` and `disconnect` events. */
7
+ connected = false;
8
+ connectionConfig;
9
+ /** Refcount of active subscriptions per doctype — drives doctype room membership. */
10
+ watchedDoctypes = /* @__PURE__ */new Map();
11
+ /** In-flight authoritative fetches, deduping concurrent doc_update/list_update pairs. */
12
+ inflightFetches = /* @__PURE__ */new Map();
13
+ db;
14
+ realtime;
15
+ normalizedCache;
16
+ subscriptionManager;
17
+ rehydrationManager;
18
+ options;
3
19
  constructor(db, realtime, normalizedCache, subscriptionManager, rehydrationManager, options = {}) {
4
20
  this.db = db;
5
21
  this.realtime = realtime;
@@ -16,21 +32,40 @@ class RealtimeHandler {
16
32
  this.setupRealtimeHandlers();
17
33
  this.setupConnectionManagement();
18
34
  }
19
- db;
20
- realtime;
21
- normalizedCache;
22
- subscriptionManager;
23
- rehydrationManager;
24
- options;
25
- reconnectAttempts = 0;
26
- reconnectTimer;
27
- hasConnected = false;
28
- connectionConfig;
29
35
  /**
30
36
  * Sets up realtime event handlers for document changes.
37
+ *
38
+ * Real Frappe (v15) wire protocol, verified live against a stock bench
39
+ * (see .test-evidence/storybook-rubric/p-results/frappe-realtime-live-e2e.md):
40
+ * - `doc_update` `{doctype, name, modified}` — emitted to the per-doc room
41
+ * `doc:{doctype}/{name}` on every save.
42
+ * - `list_update` `{doctype, name, user}` — emitted to the doctype room
43
+ * `doctype:{doctype}` on every save of a non-single, non-child doctype.
44
+ * - Deletion emits the SAME two events (payload indistinguishable from an
45
+ * update) — there is NO `doc_deleted` event. Deletions are detected here
46
+ * opportunistically when the authoritative re-fetch 404s, but the durable
47
+ * deletion signal remains the tombstone/CDC backfill (`Deleted Document`
48
+ * doctype maintained by the `live` app's on_trash hook).
49
+ *
50
+ * Both real events funnel into the same fetch-and-reconcile path, deduped
51
+ * so a doc_update/list_update pair for the same doc costs one fetch.
31
52
  */
32
53
  setupRealtimeHandlers() {
33
54
  if (!this.realtime) return;
55
+ this.realtime?.on("doc_update", async payload => {
56
+ if (this.options.onRealtimeEvent) this.options.onRealtimeEvent({
57
+ type: RealtimeEventType.DocUpdate,
58
+ payload
59
+ });
60
+ return this.onDocChanged(payload);
61
+ });
62
+ this.realtime?.on("list_update", async payload => {
63
+ if (this.options.onRealtimeEvent) this.options.onRealtimeEvent({
64
+ type: RealtimeEventType.ListUpdate,
65
+ payload
66
+ });
67
+ return this.onDocChanged(payload);
68
+ });
34
69
  this.realtime?.on("doc_changed", async payload => {
35
70
  if (this.options.onRealtimeEvent) this.options.onRealtimeEvent({
36
71
  type: RealtimeEventType.DocChanged,
@@ -72,6 +107,7 @@ class RealtimeHandler {
72
107
  */
73
108
  onConnected() {
74
109
  this.hasConnected = true;
110
+ this.connected = true;
75
111
  this.reconnectAttempts = 0;
76
112
  if (this.reconnectTimer) {
77
113
  clearTimeout(this.reconnectTimer);
@@ -85,6 +121,7 @@ class RealtimeHandler {
85
121
  if (this.options.onBackfillAll) {
86
122
  this.options.onBackfillAll();
87
123
  }
124
+ this.options.onStoreChange?.();
88
125
  console.debug("[RealtimeHandler] Connected to realtime server");
89
126
  }
90
127
  /**
@@ -92,18 +129,24 @@ class RealtimeHandler {
92
129
  */
93
130
  onDisconnected() {
94
131
  console.debug("[RealtimeHandler] Disconnected from realtime server");
132
+ this.connected = false;
133
+ this.options.onStoreChange?.();
95
134
  if (this.hasConnected) {
96
135
  this.scheduleReconnection();
97
136
  }
98
137
  }
99
138
  /**
100
- * Attempts to connect to the realtime server.
139
+ * No-op placeholder retained for the disconnect backoff schedule below.
140
+ * Transport reconnect is owned by Socket.IO inside RealtimeModule; this
141
+ * layer only tracks attempts for logging / future health hooks.
101
142
  */
102
143
  attemptConnection() {
103
144
  if (!this.realtime) return;
104
145
  }
105
146
  /**
106
- * Schedules a reconnection attempt with exponential backoff and jitter.
147
+ * Schedules a reconnection *watchdog* tick with exponential backoff and jitter.
148
+ * Does not open sockets — RealtimeModule already reconnects. Kept so disconnect
149
+ * storms remain observable (and existing unit tests stay meaningful).
107
150
  */
108
151
  scheduleReconnection() {
109
152
  if (this.reconnectTimer) {
@@ -129,12 +172,61 @@ class RealtimeHandler {
129
172
  delay = Math.round(delay + jitter);
130
173
  return Math.max(this.connectionConfig.reconnectBaseDelay, Math.min(delay, this.connectionConfig.reconnectMaxDelay));
131
174
  }
175
+ /**
176
+ * Join the realtime doctype room for a doctype (refcounted). Called by the
177
+ * sync module whenever a subscription for the doctype is added. Room
178
+ * membership survives reconnects — RealtimeModule re-joins tracked rooms on
179
+ * every `connect`.
180
+ *
181
+ * Note: only doctype-level rooms are joined. `list_update` fires for every
182
+ * save of a regular doctype, which covers doc updates too; per-doc rooms
183
+ * would only add coverage for single/read-only doctypes.
184
+ */
185
+ watchDoctype(doctype) {
186
+ const count = (this.watchedDoctypes.get(doctype) ?? 0) + 1;
187
+ this.watchedDoctypes.set(doctype, count);
188
+ if (count === 1 && this.realtime) {
189
+ Promise.resolve(this.realtime.subscribeList(doctype)).catch(err => console.warn(`[RealtimeHandler] Failed to join doctype room ${doctype}:`, err));
190
+ }
191
+ }
192
+ /** Release one reference to a doctype room; leaves the room on the last one. */
193
+ unwatchDoctype(doctype) {
194
+ const count = (this.watchedDoctypes.get(doctype) ?? 0) - 1;
195
+ if (count > 0) {
196
+ this.watchedDoctypes.set(doctype, count);
197
+ return;
198
+ }
199
+ this.watchedDoctypes.delete(doctype);
200
+ this.realtime?.unsubscribeList(doctype);
201
+ }
202
+ /** Leave all doctype rooms (used by cache resets/disposal). */
203
+ unwatchAll() {
204
+ if (this.realtime) {
205
+ for (const doctype of this.watchedDoctypes.keys()) {
206
+ this.realtime.unsubscribeList(doctype);
207
+ }
208
+ }
209
+ this.watchedDoctypes.clear();
210
+ }
132
211
  /**
133
212
  * Realtime handler: authoritative document changed.
134
213
  * Fetches document via REST with current user context to respect permissions,
135
214
  * updates cache, and reconciles subscription membership.
215
+ *
216
+ * Concurrent events for the same document (frappe emits doc_update AND
217
+ * list_update per save) share a single in-flight fetch.
136
218
  */
137
- async onDocChanged(payload) {
219
+ onDocChanged(payload) {
220
+ const key = `${payload?.doctype}\0${payload?.name}`;
221
+ const inflight = this.inflightFetches.get(key);
222
+ if (inflight) return inflight;
223
+ const fetchPromise = this.fetchAndReconcile(payload).finally(() => {
224
+ this.inflightFetches.delete(key);
225
+ });
226
+ this.inflightFetches.set(key, fetchPromise);
227
+ return fetchPromise;
228
+ }
229
+ async fetchAndReconcile(payload) {
138
230
  try {
139
231
  const document = await this.db.getDoc(payload.doctype, payload.name);
140
232
  this.normalizedCache.upsert(document);
@@ -142,7 +234,12 @@ class RealtimeHandler {
142
234
  for (const subscription of subscriptionsNeedingRehydration) {
143
235
  this.rehydrationManager?.scheduleRehydration(subscription, RehydrationReason.RemoteCreate);
144
236
  }
237
+ this.options.onStoreChange?.();
145
238
  } catch (err) {
239
+ if (err?.status === 404) {
240
+ await this.onDocDeleted(payload);
241
+ return;
242
+ }
146
243
  console.warn(`Failed to fetch document ${payload?.doctype}/${payload?.name} during realtime update:`, err);
147
244
  }
148
245
  }
@@ -159,6 +256,7 @@ class RealtimeHandler {
159
256
  for (const subscription of affectedSubscriptions) {
160
257
  this.rehydrationManager?.scheduleRehydration(subscription, RehydrationReason.Delete);
161
258
  }
259
+ this.options.onStoreChange?.();
162
260
  } catch (err) {
163
261
  console.warn(`Failed to process doc_deleted for ${payload?.doctype}/${payload?.name}:`, err);
164
262
  }
@@ -172,6 +270,18 @@ class RealtimeHandler {
172
270
  getIsConnected() {
173
271
  return this.hasConnected;
174
272
  }
273
+ /**
274
+ * Live connection snapshot for reconnect indicators.
275
+ * `connected` tracks the socket right now; `everConnected` distinguishes
276
+ * "reconnecting" (was up, dropped) from "never had realtime" (fixtures,
277
+ * SSR, no realtime module).
278
+ */
279
+ getConnectionState() {
280
+ return {
281
+ connected: this.connected,
282
+ everConnected: this.hasConnected
283
+ };
284
+ }
175
285
  /**
176
286
  * Disposes of resources and clears timers.
177
287
  */
@@ -180,6 +290,7 @@ class RealtimeHandler {
180
290
  clearTimeout(this.reconnectTimer);
181
291
  this.reconnectTimer = void 0;
182
292
  }
293
+ this.unwatchAll();
183
294
  if (this.realtime) {
184
295
  this.realtime?.disconnect();
185
296
  }
@@ -1 +1 @@
1
- {"version":3,"names":["RealtimeEventType","RehydrationReason","RealtimeHandler","constructor","db","realtime","normalizedCache","subscriptionManager","rehydrationManager","options","connectionConfig","reconnectBaseDelay","reconnectMaxDelay","reconnectJitter","exponentialBackoff","setupRealtimeHandlers","setupConnectionManagement","reconnectAttempts","reconnectTimer","hasConnected","on","payload","onRealtimeEvent","type","DocChanged","onDocChanged","DocDeleted","onDocDeleted","PermEpochBump","onResetCache","onConnected","onDisconnected","attemptConnection","clearTimeout","Connected","onBackfillAll","console","debug","scheduleReconnection","delay","calculateReconnectDelay","setTimeout","Math","min","jitterRange","jitter","random","round","max","document","getDoc","doctype","name","upsert","subscriptionsNeedingRehydration","updateSubscriptionMembership","subscription","scheduleRehydration","RemoteCreate","err","warn","remove","affectedSubscriptions","removeFromAllSubscriptions","Delete","isRealtimeHealthy","isHealthy","getIsConnected","dispose","disconnect"],"sources":["../../../src/sync/realtime.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["RealtimeEventType","RehydrationReason","RealtimeHandler","reconnectAttempts","reconnectTimer","hasConnected","connected","connectionConfig","watchedDoctypes","Map","inflightFetches","db","realtime","normalizedCache","subscriptionManager","rehydrationManager","options","constructor","reconnectBaseDelay","reconnectMaxDelay","reconnectJitter","exponentialBackoff","setupRealtimeHandlers","setupConnectionManagement","on","payload","onRealtimeEvent","type","DocUpdate","onDocChanged","ListUpdate","DocChanged","DocDeleted","onDocDeleted","PermEpochBump","onResetCache","onConnected","onDisconnected","attemptConnection","clearTimeout","Connected","onBackfillAll","onStoreChange","console","debug","scheduleReconnection","delay","calculateReconnectDelay","setTimeout","Math","min","jitterRange","jitter","random","round","max","watchDoctype","doctype","count","get","set","Promise","resolve","subscribeList","catch","err","warn","unwatchDoctype","delete","unsubscribeList","unwatchAll","keys","clear","key","name","inflight","fetchPromise","fetchAndReconcile","finally","document","getDoc","upsert","subscriptionsNeedingRehydration","updateSubscriptionMembership","subscription","scheduleRehydration","RemoteCreate","status","remove","affectedSubscriptions","removeFromAllSubscriptions","Delete","isRealtimeHealthy","isHealthy","getIsConnected","getConnectionState","everConnected","dispose","disconnect"],"sources":["../../../src/sync/realtime.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -68,24 +68,25 @@ var RealtimeHandler = /* @__PURE__ */function () {
68
68
  _class_call_check(this, RealtimeHandler2);
69
69
  var _ref, _ref1, _ref2, _ref3;
70
70
  var _options_connectionConfig, _options_connectionConfig1, _options_connectionConfig2, _options_connectionConfig3;
71
+ _define_property(this, "reconnectAttempts", 0);
72
+ _define_property(this, "reconnectTimer", void 0);
73
+ _define_property(this, "hasConnected", false);
74
+ _define_property(this, "connected", false);
75
+ _define_property(this, "connectionConfig", void 0);
76
+ _define_property(this, "watchedDoctypes", /* @__PURE__ */new Map());
77
+ _define_property(this, "inflightFetches", /* @__PURE__ */new Map());
71
78
  _define_property(this, "db", void 0);
72
79
  _define_property(this, "realtime", void 0);
73
80
  _define_property(this, "normalizedCache", void 0);
74
81
  _define_property(this, "subscriptionManager", void 0);
75
82
  _define_property(this, "rehydrationManager", void 0);
76
83
  _define_property(this, "options", void 0);
77
- _define_property(this, "reconnectAttempts", void 0);
78
- _define_property(this, "reconnectTimer", void 0);
79
- _define_property(this, "hasConnected", void 0);
80
- _define_property(this, "connectionConfig", void 0);
81
84
  this.db = db;
82
85
  this.realtime = realtime;
83
86
  this.normalizedCache = normalizedCache;
84
87
  this.subscriptionManager = subscriptionManager;
85
88
  this.rehydrationManager = rehydrationManager;
86
89
  this.options = options;
87
- this.reconnectAttempts = 0;
88
- this.hasConnected = false;
89
90
  this.connectionConfig = {
90
91
  reconnectBaseDelay: (_ref = (_options_connectionConfig = options.connectionConfig) === null || _options_connectionConfig === void 0 ? void 0 : _options_connectionConfig.reconnectBaseDelay) !== null && _ref !== void 0 ? _ref : 1e3,
91
92
  reconnectMaxDelay: (_ref1 = (_options_connectionConfig1 = options.connectionConfig) === null || _options_connectionConfig1 === void 0 ? void 0 : _options_connectionConfig1.reconnectMaxDelay) !== null && _ref1 !== void 0 ? _ref1 : 3e4,
@@ -100,26 +101,55 @@ var RealtimeHandler = /* @__PURE__ */function () {
100
101
  value: (
101
102
  /**
102
103
  * Sets up realtime event handlers for document changes.
104
+ *
105
+ * Real Frappe (v15) wire protocol, verified live against a stock bench
106
+ * (see .test-evidence/storybook-rubric/p-results/frappe-realtime-live-e2e.md):
107
+ * - `doc_update` `{doctype, name, modified}` — emitted to the per-doc room
108
+ * `doc:{doctype}/{name}` on every save.
109
+ * - `list_update` `{doctype, name, user}` — emitted to the doctype room
110
+ * `doctype:{doctype}` on every save of a non-single, non-child doctype.
111
+ * - Deletion emits the SAME two events (payload indistinguishable from an
112
+ * update) — there is NO `doc_deleted` event. Deletions are detected here
113
+ * opportunistically when the authoritative re-fetch 404s, but the durable
114
+ * deletion signal remains the tombstone/CDC backfill (`Deleted Document`
115
+ * doctype maintained by the `live` app's on_trash hook).
116
+ *
117
+ * Both real events funnel into the same fetch-and-reconcile path, deduped
118
+ * so a doc_update/list_update pair for the same doc costs one fetch.
103
119
  */
104
120
  function setupRealtimeHandlers() {
105
121
  var _this = this;
106
- var _this_realtime, _this_realtime1, _this_realtime2, _this_realtime3, _this_realtime4;
122
+ var _this_realtime, _this_realtime1, _this_realtime2, _this_realtime3, _this_realtime4, _this_realtime5, _this_realtime6;
107
123
  if (!this.realtime) return;
108
- (_this_realtime = this.realtime) === null || _this_realtime === void 0 ? void 0 : _this_realtime.on("doc_changed", async function (payload) {
124
+ (_this_realtime = this.realtime) === null || _this_realtime === void 0 ? void 0 : _this_realtime.on("doc_update", async function (payload) {
125
+ if (_this.options.onRealtimeEvent) _this.options.onRealtimeEvent({
126
+ type: import_types.RealtimeEventType.DocUpdate,
127
+ payload
128
+ });
129
+ return _this.onDocChanged(payload);
130
+ });
131
+ (_this_realtime1 = this.realtime) === null || _this_realtime1 === void 0 ? void 0 : _this_realtime1.on("list_update", async function (payload) {
132
+ if (_this.options.onRealtimeEvent) _this.options.onRealtimeEvent({
133
+ type: import_types.RealtimeEventType.ListUpdate,
134
+ payload
135
+ });
136
+ return _this.onDocChanged(payload);
137
+ });
138
+ (_this_realtime2 = this.realtime) === null || _this_realtime2 === void 0 ? void 0 : _this_realtime2.on("doc_changed", async function (payload) {
109
139
  if (_this.options.onRealtimeEvent) _this.options.onRealtimeEvent({
110
140
  type: import_types.RealtimeEventType.DocChanged,
111
141
  payload
112
142
  });
113
143
  return _this.onDocChanged(payload);
114
144
  });
115
- (_this_realtime1 = this.realtime) === null || _this_realtime1 === void 0 ? void 0 : _this_realtime1.on("doc_deleted", async function (payload) {
145
+ (_this_realtime3 = this.realtime) === null || _this_realtime3 === void 0 ? void 0 : _this_realtime3.on("doc_deleted", async function (payload) {
116
146
  if (_this.options.onRealtimeEvent) _this.options.onRealtimeEvent({
117
147
  type: import_types.RealtimeEventType.DocDeleted,
118
148
  payload
119
149
  });
120
150
  return _this.onDocDeleted(payload);
121
151
  });
122
- (_this_realtime2 = this.realtime) === null || _this_realtime2 === void 0 ? void 0 : _this_realtime2.on("perm_epoch_bump", function () {
152
+ (_this_realtime4 = this.realtime) === null || _this_realtime4 === void 0 ? void 0 : _this_realtime4.on("perm_epoch_bump", function () {
123
153
  if (_this.options.onRealtimeEvent) _this.options.onRealtimeEvent({
124
154
  type: import_types.RealtimeEventType.PermEpochBump
125
155
  });
@@ -127,10 +157,10 @@ var RealtimeHandler = /* @__PURE__ */function () {
127
157
  _this.options.onResetCache();
128
158
  }
129
159
  });
130
- (_this_realtime3 = this.realtime) === null || _this_realtime3 === void 0 ? void 0 : _this_realtime3.on("connected", function () {
160
+ (_this_realtime5 = this.realtime) === null || _this_realtime5 === void 0 ? void 0 : _this_realtime5.on("connected", function () {
131
161
  _this.onConnected();
132
162
  });
133
- (_this_realtime4 = this.realtime) === null || _this_realtime4 === void 0 ? void 0 : _this_realtime4.on("disconnect", function () {
163
+ (_this_realtime6 = this.realtime) === null || _this_realtime6 === void 0 ? void 0 : _this_realtime6.on("disconnect", function () {
134
164
  _this.onDisconnected();
135
165
  });
136
166
  })
@@ -151,7 +181,9 @@ var RealtimeHandler = /* @__PURE__ */function () {
151
181
  * Handles successful connection.
152
182
  */
153
183
  function onConnected() {
184
+ var _this_options_onStoreChange, _this_options;
154
185
  this.hasConnected = true;
186
+ this.connected = true;
155
187
  this.reconnectAttempts = 0;
156
188
  if (this.reconnectTimer) {
157
189
  clearTimeout(this.reconnectTimer);
@@ -165,6 +197,7 @@ var RealtimeHandler = /* @__PURE__ */function () {
165
197
  if (this.options.onBackfillAll) {
166
198
  this.options.onBackfillAll();
167
199
  }
200
+ (_this_options_onStoreChange = (_this_options = this.options).onStoreChange) === null || _this_options_onStoreChange === void 0 ? void 0 : _this_options_onStoreChange.call(_this_options);
168
201
  console.debug("[RealtimeHandler] Connected to realtime server");
169
202
  })
170
203
  }, {
@@ -174,7 +207,10 @@ var RealtimeHandler = /* @__PURE__ */function () {
174
207
  * Handles disconnection with automatic reconnection.
175
208
  */
176
209
  function onDisconnected() {
210
+ var _this_options_onStoreChange, _this_options;
177
211
  console.debug("[RealtimeHandler] Disconnected from realtime server");
212
+ this.connected = false;
213
+ (_this_options_onStoreChange = (_this_options = this.options).onStoreChange) === null || _this_options_onStoreChange === void 0 ? void 0 : _this_options_onStoreChange.call(_this_options);
178
214
  if (this.hasConnected) {
179
215
  this.scheduleReconnection();
180
216
  }
@@ -183,18 +219,20 @@ var RealtimeHandler = /* @__PURE__ */function () {
183
219
  key: "attemptConnection",
184
220
  value: (
185
221
  /**
186
- * Attempts to connect to the realtime server.
222
+ * No-op placeholder retained for the disconnect backoff schedule below.
223
+ * Transport reconnect is owned by Socket.IO inside RealtimeModule; this
224
+ * layer only tracks attempts for logging / future health hooks.
187
225
  */
188
226
  function attemptConnection() {
189
227
  if (!this.realtime) return;
190
228
  })
191
229
  }, {
192
230
  key: "scheduleReconnection",
193
- value:
194
- // RealtimeModule handles reconnection internally via its reconnection config.
195
- // Handlers are already attached in the constructor via setupRealtimeHandlers().
231
+ value: (
196
232
  /**
197
- * Schedules a reconnection attempt with exponential backoff and jitter.
233
+ * Schedules a reconnection *watchdog* tick with exponential backoff and jitter.
234
+ * Does not open sockets — RealtimeModule already reconnects. Kept so disconnect
235
+ * storms remain observable (and existing unit tests stay meaningful).
198
236
  */
199
237
  function scheduleReconnection() {
200
238
  var _this = this;
@@ -207,7 +245,7 @@ var RealtimeHandler = /* @__PURE__ */function () {
207
245
  _this.reconnectAttempts++;
208
246
  _this.attemptConnection();
209
247
  }, delay);
210
- }
248
+ })
211
249
  }, {
212
250
  key: "calculateReconnectDelay",
213
251
  value: (
@@ -224,6 +262,72 @@ var RealtimeHandler = /* @__PURE__ */function () {
224
262
  delay = Math.round(delay + jitter);
225
263
  return Math.max(this.connectionConfig.reconnectBaseDelay, Math.min(delay, this.connectionConfig.reconnectMaxDelay));
226
264
  })
265
+ }, {
266
+ /**
267
+ * Join the realtime doctype room for a doctype (refcounted). Called by the
268
+ * sync module whenever a subscription for the doctype is added. Room
269
+ * membership survives reconnects — RealtimeModule re-joins tracked rooms on
270
+ * every `connect`.
271
+ *
272
+ * Note: only doctype-level rooms are joined. `list_update` fires for every
273
+ * save of a regular doctype, which covers doc updates too; per-doc rooms
274
+ * would only add coverage for single/read-only doctypes.
275
+ */
276
+ key: "watchDoctype",
277
+ value: function watchDoctype(doctype) {
278
+ var _this_watchedDoctypes_get;
279
+ var count = ((_this_watchedDoctypes_get = this.watchedDoctypes.get(doctype)) !== null && _this_watchedDoctypes_get !== void 0 ? _this_watchedDoctypes_get : 0) + 1;
280
+ this.watchedDoctypes.set(doctype, count);
281
+ if (count === 1 && this.realtime) {
282
+ Promise.resolve(this.realtime.subscribeList(doctype)).catch(function (err) {
283
+ return console.warn(`[RealtimeHandler] Failed to join doctype room ${doctype}:`, err);
284
+ });
285
+ }
286
+ }
287
+ }, {
288
+ /** Release one reference to a doctype room; leaves the room on the last one. */
289
+ key: "unwatchDoctype",
290
+ value: function unwatchDoctype(doctype) {
291
+ var _this_watchedDoctypes_get;
292
+ var _this_realtime;
293
+ var count = ((_this_watchedDoctypes_get = this.watchedDoctypes.get(doctype)) !== null && _this_watchedDoctypes_get !== void 0 ? _this_watchedDoctypes_get : 0) - 1;
294
+ if (count > 0) {
295
+ this.watchedDoctypes.set(doctype, count);
296
+ return;
297
+ }
298
+ this.watchedDoctypes.delete(doctype);
299
+ (_this_realtime = this.realtime) === null || _this_realtime === void 0 ? void 0 : _this_realtime.unsubscribeList(doctype);
300
+ }
301
+ }, {
302
+ /** Leave all doctype rooms (used by cache resets/disposal). */
303
+ key: "unwatchAll",
304
+ value: function unwatchAll() {
305
+ if (this.realtime) {
306
+ var _iteratorNormalCompletion = true,
307
+ _didIteratorError = false,
308
+ _iteratorError = void 0;
309
+ try {
310
+ for (var _iterator = this.watchedDoctypes.keys()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
311
+ var doctype = _step.value;
312
+ this.realtime.unsubscribeList(doctype);
313
+ }
314
+ } catch (err) {
315
+ _didIteratorError = true;
316
+ _iteratorError = err;
317
+ } finally {
318
+ try {
319
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
320
+ _iterator.return();
321
+ }
322
+ } finally {
323
+ if (_didIteratorError) {
324
+ throw _iteratorError;
325
+ }
326
+ }
327
+ }
328
+ }
329
+ this.watchedDoctypes.clear();
330
+ }
227
331
  }, {
228
332
  key: "onDocChanged",
229
333
  value: (
@@ -231,9 +335,26 @@ var RealtimeHandler = /* @__PURE__ */function () {
231
335
  * Realtime handler: authoritative document changed.
232
336
  * Fetches document via REST with current user context to respect permissions,
233
337
  * updates cache, and reconciles subscription membership.
338
+ *
339
+ * Concurrent events for the same document (frappe emits doc_update AND
340
+ * list_update per save) share a single in-flight fetch.
234
341
  */
235
- async function onDocChanged(payload) {
342
+ function onDocChanged(payload) {
343
+ var _this = this;
344
+ var key = `${payload === null || payload === void 0 ? void 0 : payload.doctype}\0${payload === null || payload === void 0 ? void 0 : payload.name}`;
345
+ var inflight = this.inflightFetches.get(key);
346
+ if (inflight) return inflight;
347
+ var fetchPromise = this.fetchAndReconcile(payload).finally(function () {
348
+ _this.inflightFetches.delete(key);
349
+ });
350
+ this.inflightFetches.set(key, fetchPromise);
351
+ return fetchPromise;
352
+ })
353
+ }, {
354
+ key: "fetchAndReconcile",
355
+ value: async function fetchAndReconcile(payload) {
236
356
  try {
357
+ var _this_options_onStoreChange, _this_options;
237
358
  var document = await this.db.getDoc(payload.doctype, payload.name);
238
359
  this.normalizedCache.upsert(document);
239
360
  var subscriptionsNeedingRehydration = this.subscriptionManager.updateSubscriptionMembership(document);
@@ -260,10 +381,15 @@ var RealtimeHandler = /* @__PURE__ */function () {
260
381
  }
261
382
  }
262
383
  }
384
+ (_this_options_onStoreChange = (_this_options = this.options).onStoreChange) === null || _this_options_onStoreChange === void 0 ? void 0 : _this_options_onStoreChange.call(_this_options);
263
385
  } catch (err) {
386
+ if ((err === null || err === void 0 ? void 0 : err.status) === 404) {
387
+ await this.onDocDeleted(payload);
388
+ return;
389
+ }
264
390
  console.warn(`Failed to fetch document ${payload === null || payload === void 0 ? void 0 : payload.doctype}/${payload === null || payload === void 0 ? void 0 : payload.name} during realtime update:`, err);
265
391
  }
266
- })
392
+ }
267
393
  }, {
268
394
  key: "onDocDeleted",
269
395
  value: (
@@ -272,6 +398,7 @@ var RealtimeHandler = /* @__PURE__ */function () {
272
398
  */
273
399
  async function onDocDeleted(payload) {
274
400
  try {
401
+ var _this_options_onStoreChange, _this_options;
275
402
  this.normalizedCache.remove({
276
403
  doctype: payload.doctype,
277
404
  name: payload.name
@@ -300,6 +427,7 @@ var RealtimeHandler = /* @__PURE__ */function () {
300
427
  }
301
428
  }
302
429
  }
430
+ (_this_options_onStoreChange = (_this_options = this.options).onStoreChange) === null || _this_options_onStoreChange === void 0 ? void 0 : _this_options_onStoreChange.call(_this_options);
303
431
  } catch (err) {
304
432
  console.warn(`Failed to process doc_deleted for ${payload === null || payload === void 0 ? void 0 : payload.doctype}/${payload === null || payload === void 0 ? void 0 : payload.name}:`, err);
305
433
  }
@@ -319,6 +447,20 @@ var RealtimeHandler = /* @__PURE__ */function () {
319
447
  value: function getIsConnected() {
320
448
  return this.hasConnected;
321
449
  }
450
+ }, {
451
+ /**
452
+ * Live connection snapshot for reconnect indicators.
453
+ * `connected` tracks the socket right now; `everConnected` distinguishes
454
+ * "reconnecting" (was up, dropped) from "never had realtime" (fixtures,
455
+ * SSR, no realtime module).
456
+ */
457
+ key: "getConnectionState",
458
+ value: function getConnectionState() {
459
+ return {
460
+ connected: this.connected,
461
+ everConnected: this.hasConnected
462
+ };
463
+ }
322
464
  }, {
323
465
  /**
324
466
  * Disposes of resources and clears timers.
@@ -329,6 +471,7 @@ var RealtimeHandler = /* @__PURE__ */function () {
329
471
  clearTimeout(this.reconnectTimer);
330
472
  this.reconnectTimer = void 0;
331
473
  }
474
+ this.unwatchAll();
332
475
  if (this.realtime) {
333
476
  var _this_realtime;
334
477
  (_this_realtime = this.realtime) === null || _this_realtime === void 0 ? void 0 : _this_realtime.disconnect();