@multiplatform.one/frappe 6.0.4 → 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.
- package/README.md +38 -12
- package/dist/cjs/auth.cjs +1 -1
- package/dist/cjs/auth.native.js.map +1 -1
- package/dist/cjs/call.cjs +1 -1
- package/dist/cjs/call.native.js.map +1 -1
- package/dist/cjs/collection.cjs +18 -4
- package/dist/cjs/collection.native.js +18 -4
- package/dist/cjs/collection.native.js.map +1 -1
- package/dist/cjs/core/http.cjs +92 -9
- package/dist/cjs/core/http.native.js +96 -7
- package/dist/cjs/core/http.native.js.map +1 -1
- package/dist/cjs/db.cjs +7 -7
- package/dist/cjs/db.native.js +4 -4
- package/dist/cjs/db.native.js.map +1 -1
- package/dist/cjs/doctype.cjs +97 -39
- package/dist/cjs/doctype.native.js +116 -46
- package/dist/cjs/doctype.native.js.map +1 -1
- package/dist/cjs/file.cjs +1 -1
- package/dist/cjs/file.native.js.map +1 -1
- package/dist/cjs/fixtureDb.cjs +3 -2
- package/dist/cjs/fixtureDb.native.js +2 -1
- package/dist/cjs/fixtureDb.native.js.map +1 -1
- package/dist/cjs/frappeApp.cjs +15 -14
- package/dist/cjs/frappeApp.native.js +16 -14
- package/dist/cjs/frappeApp.native.js.map +1 -1
- package/dist/cjs/frappeReact.cjs +198 -18
- package/dist/cjs/frappeReact.native.js +241 -18
- package/dist/cjs/frappeReact.native.js.map +1 -1
- package/dist/cjs/index.cjs +9 -4
- package/dist/cjs/index.native.js +9 -4
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/pacer.cjs +2 -2
- package/dist/cjs/pacer.native.js +2 -2
- package/dist/cjs/pacer.native.js.map +1 -1
- package/dist/cjs/realtime.cjs +186 -46
- package/dist/cjs/realtime.native.js +268 -48
- package/dist/cjs/realtime.native.js.map +1 -1
- package/dist/cjs/sync/backfill.cjs +32 -27
- package/dist/cjs/sync/backfill.native.js +49 -43
- package/dist/cjs/sync/backfill.native.js.map +1 -1
- package/dist/cjs/sync/index.cjs +90 -24
- package/dist/cjs/sync/index.native.js +112 -10
- package/dist/cjs/sync/index.native.js.map +1 -1
- package/dist/cjs/sync/merge.cjs +0 -3
- package/dist/cjs/sync/merge.native.js +0 -3
- package/dist/cjs/sync/merge.native.js.map +1 -1
- package/dist/cjs/sync/mutationEngine.cjs +25 -19
- package/dist/cjs/sync/mutationEngine.native.js +16 -13
- package/dist/cjs/sync/mutationEngine.native.js.map +1 -1
- package/dist/cjs/sync/mutationJournal.cjs +9 -4
- package/dist/cjs/sync/mutationJournal.native.js +7 -4
- package/dist/cjs/sync/mutationJournal.native.js.map +1 -1
- package/dist/cjs/sync/normalizedCache.cjs +7 -3
- package/dist/cjs/sync/normalizedCache.native.js +7 -2
- package/dist/cjs/sync/normalizedCache.native.js.map +1 -1
- package/dist/cjs/sync/persistence.cjs +63 -31
- package/dist/cjs/sync/persistence.native.js +120 -63
- package/dist/cjs/sync/persistence.native.js.map +1 -1
- package/dist/cjs/sync/realtime.cjs +124 -13
- package/dist/cjs/sync/realtime.native.js +163 -20
- package/dist/cjs/sync/realtime.native.js.map +1 -1
- package/dist/cjs/sync/rehydration.cjs +16 -10
- package/dist/cjs/sync/rehydration.native.js +16 -14
- package/dist/cjs/sync/rehydration.native.js.map +1 -1
- package/dist/cjs/sync/storage.cjs +3 -3
- package/dist/cjs/sync/storage.native.js +1 -1
- package/dist/cjs/sync/storage.native.js.map +1 -1
- package/dist/cjs/sync/subscriptionManager.cjs +255 -65
- package/dist/cjs/sync/subscriptionManager.native.js +330 -93
- package/dist/cjs/sync/subscriptionManager.native.js.map +1 -1
- package/dist/cjs/sync/types.cjs +2 -0
- package/dist/cjs/sync/types.native.js +2 -0
- package/dist/cjs/sync/types.native.js.map +1 -1
- package/dist/cjs/sync/virtualPageManager.cjs +9 -9
- package/dist/cjs/sync/virtualPageManager.native.js +5 -9
- package/dist/cjs/sync/virtualPageManager.native.js.map +1 -1
- package/dist/cjs/useLiveQuery.cjs +52 -0
- package/dist/cjs/useLiveQuery.native.js +59 -0
- package/dist/cjs/useLiveQuery.native.js.map +1 -0
- package/dist/cjs/util.cjs +11 -2
- package/dist/cjs/util.native.js +16 -2
- package/dist/cjs/util.native.js.map +1 -1
- package/dist/esm/auth.mjs +1 -1
- package/dist/esm/auth.mjs.map +1 -1
- package/dist/esm/auth.native.js.map +1 -1
- package/dist/esm/call.mjs +1 -1
- package/dist/esm/call.mjs.map +1 -1
- package/dist/esm/call.native.js.map +1 -1
- package/dist/esm/collection.mjs +18 -4
- package/dist/esm/collection.mjs.map +1 -1
- package/dist/esm/collection.native.js +18 -4
- package/dist/esm/collection.native.js.map +1 -1
- package/dist/esm/core/http.mjs +93 -10
- package/dist/esm/core/http.mjs.map +1 -1
- package/dist/esm/core/http.native.js +97 -8
- package/dist/esm/core/http.native.js.map +1 -1
- package/dist/esm/db.mjs +7 -7
- package/dist/esm/db.mjs.map +1 -1
- package/dist/esm/db.native.js +4 -4
- package/dist/esm/db.native.js.map +1 -1
- package/dist/esm/doctype.mjs +96 -39
- package/dist/esm/doctype.mjs.map +1 -1
- package/dist/esm/doctype.native.js +115 -46
- package/dist/esm/doctype.native.js.map +1 -1
- package/dist/esm/file.mjs +1 -1
- package/dist/esm/file.mjs.map +1 -1
- package/dist/esm/file.native.js.map +1 -1
- package/dist/esm/fixtureDb.mjs +3 -2
- package/dist/esm/fixtureDb.mjs.map +1 -1
- package/dist/esm/fixtureDb.native.js +2 -1
- package/dist/esm/fixtureDb.native.js.map +1 -1
- package/dist/esm/frappeApp.mjs +15 -14
- package/dist/esm/frappeApp.mjs.map +1 -1
- package/dist/esm/frappeApp.native.js +16 -14
- package/dist/esm/frappeApp.native.js.map +1 -1
- package/dist/esm/frappeReact.mjs +197 -19
- package/dist/esm/frappeReact.mjs.map +1 -1
- package/dist/esm/frappeReact.native.js +240 -19
- package/dist/esm/frappeReact.native.js.map +1 -1
- package/dist/esm/index.mjs +5 -4
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +5 -4
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/pacer.mjs +1 -1
- package/dist/esm/pacer.native.js +1 -1
- package/dist/esm/realtime.mjs +187 -47
- package/dist/esm/realtime.mjs.map +1 -1
- package/dist/esm/realtime.native.js +269 -49
- package/dist/esm/realtime.native.js.map +1 -1
- package/dist/esm/sync/backfill.mjs +32 -27
- package/dist/esm/sync/backfill.mjs.map +1 -1
- package/dist/esm/sync/backfill.native.js +49 -43
- package/dist/esm/sync/backfill.native.js.map +1 -1
- package/dist/esm/sync/index.mjs +90 -24
- package/dist/esm/sync/index.mjs.map +1 -1
- package/dist/esm/sync/index.native.js +112 -10
- package/dist/esm/sync/index.native.js.map +1 -1
- package/dist/esm/sync/merge.mjs +1 -1
- package/dist/esm/sync/merge.mjs.map +1 -1
- package/dist/esm/sync/merge.native.js +1 -1
- package/dist/esm/sync/merge.native.js.map +1 -1
- package/dist/esm/sync/mutationEngine.mjs +25 -19
- package/dist/esm/sync/mutationEngine.mjs.map +1 -1
- package/dist/esm/sync/mutationEngine.native.js +16 -13
- package/dist/esm/sync/mutationEngine.native.js.map +1 -1
- package/dist/esm/sync/mutationJournal.mjs +9 -4
- package/dist/esm/sync/mutationJournal.mjs.map +1 -1
- package/dist/esm/sync/mutationJournal.native.js +7 -4
- package/dist/esm/sync/mutationJournal.native.js.map +1 -1
- package/dist/esm/sync/normalizedCache.mjs +7 -3
- package/dist/esm/sync/normalizedCache.mjs.map +1 -1
- package/dist/esm/sync/normalizedCache.native.js +7 -2
- package/dist/esm/sync/normalizedCache.native.js.map +1 -1
- package/dist/esm/sync/persistence.mjs +64 -32
- package/dist/esm/sync/persistence.mjs.map +1 -1
- package/dist/esm/sync/persistence.native.js +121 -64
- package/dist/esm/sync/persistence.native.js.map +1 -1
- package/dist/esm/sync/realtime.mjs +124 -13
- package/dist/esm/sync/realtime.mjs.map +1 -1
- package/dist/esm/sync/realtime.native.js +163 -20
- package/dist/esm/sync/realtime.native.js.map +1 -1
- package/dist/esm/sync/rehydration.mjs +16 -10
- package/dist/esm/sync/rehydration.mjs.map +1 -1
- package/dist/esm/sync/rehydration.native.js +16 -14
- package/dist/esm/sync/rehydration.native.js.map +1 -1
- package/dist/esm/sync/storage.mjs +3 -3
- package/dist/esm/sync/storage.mjs.map +1 -1
- package/dist/esm/sync/storage.native.js +1 -1
- package/dist/esm/sync/storage.native.js.map +1 -1
- package/dist/esm/sync/subscriptionManager.mjs +255 -65
- package/dist/esm/sync/subscriptionManager.mjs.map +1 -1
- package/dist/esm/sync/subscriptionManager.native.js +330 -93
- package/dist/esm/sync/subscriptionManager.native.js.map +1 -1
- package/dist/esm/sync/types.mjs +2 -0
- package/dist/esm/sync/types.mjs.map +1 -1
- package/dist/esm/sync/types.native.js +2 -0
- package/dist/esm/sync/types.native.js.map +1 -1
- package/dist/esm/sync/virtualPageManager.mjs +9 -9
- package/dist/esm/sync/virtualPageManager.mjs.map +1 -1
- package/dist/esm/sync/virtualPageManager.native.js +5 -9
- package/dist/esm/sync/virtualPageManager.native.js.map +1 -1
- package/dist/esm/useLiveQuery.mjs +26 -0
- package/dist/esm/useLiveQuery.mjs.map +1 -0
- package/dist/esm/useLiveQuery.native.js +30 -0
- package/dist/esm/useLiveQuery.native.js.map +1 -0
- package/dist/esm/util.mjs +11 -3
- package/dist/esm/util.mjs.map +1 -1
- package/dist/esm/util.native.js +16 -3
- package/dist/esm/util.native.js.map +1 -1
- package/dist/jsx/auth.mjs +1 -1
- package/dist/jsx/auth.mjs.map +1 -1
- package/dist/jsx/auth.native.js.map +1 -1
- package/dist/jsx/call.mjs +1 -1
- package/dist/jsx/call.mjs.map +1 -1
- package/dist/jsx/call.native.js.map +1 -1
- package/dist/jsx/collection.mjs +18 -4
- package/dist/jsx/collection.mjs.map +1 -1
- package/dist/jsx/collection.native.js +18 -4
- package/dist/jsx/collection.native.js.map +1 -1
- package/dist/jsx/core/http.mjs +93 -10
- package/dist/jsx/core/http.mjs.map +1 -1
- package/dist/jsx/core/http.native.js +96 -7
- package/dist/jsx/core/http.native.js.map +1 -1
- package/dist/jsx/db.mjs +7 -7
- package/dist/jsx/db.mjs.map +1 -1
- package/dist/jsx/db.native.js +4 -4
- package/dist/jsx/db.native.js.map +1 -1
- package/dist/jsx/doctype.mjs +96 -39
- package/dist/jsx/doctype.mjs.map +1 -1
- package/dist/jsx/doctype.native.js +116 -46
- package/dist/jsx/doctype.native.js.map +1 -1
- package/dist/jsx/file.mjs +1 -1
- package/dist/jsx/file.mjs.map +1 -1
- package/dist/jsx/file.native.js.map +1 -1
- package/dist/jsx/fixtureDb.mjs +3 -2
- package/dist/jsx/fixtureDb.mjs.map +1 -1
- package/dist/jsx/fixtureDb.native.js +2 -1
- package/dist/jsx/fixtureDb.native.js.map +1 -1
- package/dist/jsx/frappeApp.mjs +15 -14
- package/dist/jsx/frappeApp.mjs.map +1 -1
- package/dist/jsx/frappeApp.native.js +16 -14
- package/dist/jsx/frappeApp.native.js.map +1 -1
- package/dist/jsx/frappeReact.mjs +197 -19
- package/dist/jsx/frappeReact.mjs.map +1 -1
- package/dist/jsx/frappeReact.native.js +241 -18
- package/dist/jsx/frappeReact.native.js.map +1 -1
- package/dist/jsx/index.js +5 -4
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +5 -4
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +9 -4
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/pacer.mjs +1 -1
- package/dist/jsx/pacer.native.js +2 -2
- package/dist/jsx/pacer.native.js.map +1 -1
- package/dist/jsx/realtime.mjs +187 -47
- package/dist/jsx/realtime.mjs.map +1 -1
- package/dist/jsx/realtime.native.js +268 -48
- package/dist/jsx/realtime.native.js.map +1 -1
- package/dist/jsx/sync/backfill.mjs +32 -27
- package/dist/jsx/sync/backfill.mjs.map +1 -1
- package/dist/jsx/sync/backfill.native.js +49 -43
- package/dist/jsx/sync/backfill.native.js.map +1 -1
- package/dist/jsx/sync/index.mjs +90 -24
- package/dist/jsx/sync/index.mjs.map +1 -1
- package/dist/jsx/sync/index.native.js +112 -10
- package/dist/jsx/sync/index.native.js.map +1 -1
- package/dist/jsx/sync/merge.mjs +1 -1
- package/dist/jsx/sync/merge.mjs.map +1 -1
- package/dist/jsx/sync/merge.native.js +0 -3
- package/dist/jsx/sync/merge.native.js.map +1 -1
- package/dist/jsx/sync/mutationEngine.mjs +25 -19
- package/dist/jsx/sync/mutationEngine.mjs.map +1 -1
- package/dist/jsx/sync/mutationEngine.native.js +16 -13
- package/dist/jsx/sync/mutationEngine.native.js.map +1 -1
- package/dist/jsx/sync/mutationJournal.mjs +9 -4
- package/dist/jsx/sync/mutationJournal.mjs.map +1 -1
- package/dist/jsx/sync/mutationJournal.native.js +7 -4
- package/dist/jsx/sync/mutationJournal.native.js.map +1 -1
- package/dist/jsx/sync/normalizedCache.mjs +7 -3
- package/dist/jsx/sync/normalizedCache.mjs.map +1 -1
- package/dist/jsx/sync/normalizedCache.native.js +7 -2
- package/dist/jsx/sync/normalizedCache.native.js.map +1 -1
- package/dist/jsx/sync/persistence.mjs +64 -32
- package/dist/jsx/sync/persistence.mjs.map +1 -1
- package/dist/jsx/sync/persistence.native.js +120 -63
- package/dist/jsx/sync/persistence.native.js.map +1 -1
- package/dist/jsx/sync/realtime.mjs +124 -13
- package/dist/jsx/sync/realtime.mjs.map +1 -1
- package/dist/jsx/sync/realtime.native.js +163 -20
- package/dist/jsx/sync/realtime.native.js.map +1 -1
- package/dist/jsx/sync/rehydration.mjs +16 -10
- package/dist/jsx/sync/rehydration.mjs.map +1 -1
- package/dist/jsx/sync/rehydration.native.js +16 -14
- package/dist/jsx/sync/rehydration.native.js.map +1 -1
- package/dist/jsx/sync/storage.mjs +3 -3
- package/dist/jsx/sync/storage.mjs.map +1 -1
- package/dist/jsx/sync/storage.native.js +1 -1
- package/dist/jsx/sync/storage.native.js.map +1 -1
- package/dist/jsx/sync/subscriptionManager.mjs +255 -65
- package/dist/jsx/sync/subscriptionManager.mjs.map +1 -1
- package/dist/jsx/sync/subscriptionManager.native.js +330 -93
- package/dist/jsx/sync/subscriptionManager.native.js.map +1 -1
- package/dist/jsx/sync/types.mjs +2 -0
- package/dist/jsx/sync/types.mjs.map +1 -1
- package/dist/jsx/sync/types.native.js +2 -0
- package/dist/jsx/sync/types.native.js.map +1 -1
- package/dist/jsx/sync/virtualPageManager.mjs +9 -9
- package/dist/jsx/sync/virtualPageManager.mjs.map +1 -1
- package/dist/jsx/sync/virtualPageManager.native.js +5 -9
- package/dist/jsx/sync/virtualPageManager.native.js.map +1 -1
- package/dist/jsx/useLiveQuery.mjs +26 -0
- package/dist/jsx/useLiveQuery.mjs.map +1 -0
- package/dist/jsx/useLiveQuery.native.js +59 -0
- package/dist/jsx/useLiveQuery.native.js.map +1 -0
- package/dist/jsx/util.mjs +11 -3
- package/dist/jsx/util.mjs.map +1 -1
- package/dist/jsx/util.native.js +16 -2
- package/dist/jsx/util.native.js.map +1 -1
- package/package.json +20 -17
- package/src/auth.ts +5 -1
- package/src/call.ts +5 -1
- package/src/collection.spec.ts +55 -0
- package/src/collection.ts +33 -4
- package/src/core/http.spec.ts +66 -0
- package/src/core/http.ts +115 -9
- package/src/core/httpNative.spec.ts +234 -0
- package/src/core/types.ts +2 -0
- package/src/db.spec.ts +91 -51
- package/src/db.ts +27 -8
- package/src/doctype.spec.ts +247 -39
- package/src/doctype.ts +203 -53
- package/src/file.ts +5 -1
- package/src/fixtureDb.ts +13 -2
- package/src/frappeApp.ts +18 -19
- package/src/frappeReact.spec.ts +565 -1
- package/src/frappeReact.ts +446 -38
- package/src/frappeReactLiveQueryGc.spec.ts +320 -0
- package/src/frappeReactNative.spec.ts +65 -0
- package/src/index.ts +10 -9
- package/src/pacer.ts +2 -2
- package/src/realtime.spec.ts +464 -20
- package/src/realtime.ts +284 -46
- package/src/sync/backfill.spec.ts +43 -0
- package/src/sync/backfill.ts +59 -39
- package/src/sync/debug.spec.ts +36 -0
- package/src/sync/filterValidation.spec.ts +197 -0
- package/src/sync/index.ts +98 -7
- package/src/sync/merge.ts +3 -3
- package/src/sync/mutationEngine.spec.ts +36 -4
- package/src/sync/mutationEngine.ts +30 -11
- package/src/sync/mutationJournal.ts +18 -4
- package/src/sync/normalizedCache.spec.ts +102 -0
- package/src/sync/normalizedCache.ts +19 -3
- package/src/sync/offlineRestore.spec.ts +423 -0
- package/src/sync/persistence.spec.ts +39 -7
- package/src/sync/persistence.ts +90 -18
- package/src/sync/persistenceGjs.spec.ts +143 -0
- package/src/sync/persistenceNative.spec.ts +139 -0
- package/src/sync/realtime.spec.ts +18 -1
- package/src/sync/realtime.ts +161 -13
- package/src/sync/rehydration.ts +23 -5
- package/src/sync/storage.ts +5 -4
- package/src/sync/subscriptionManager.spec.ts +94 -0
- package/src/sync/subscriptionManager.ts +304 -82
- package/src/sync/syncModule.spec.ts +137 -0
- package/src/sync/types.ts +39 -0
- package/src/sync/virtualPageManager.ts +8 -4
- package/src/useLiveQuery.ts +58 -0
- package/src/util.spec.ts +35 -4
- package/src/util.ts +37 -2
- package/types/auth.d.ts +13 -0
- package/types/auth.d.ts.map +1 -0
- package/types/call.d.ts +10 -0
- package/types/call.d.ts.map +1 -0
- package/types/collection.d.ts +127 -0
- package/types/collection.d.ts.map +1 -0
- package/types/common/types.d.ts +35 -0
- package/types/common/types.d.ts.map +1 -0
- package/types/core/http.d.ts +86 -0
- package/types/core/http.d.ts.map +1 -0
- package/types/core/types.d.ts +74 -0
- package/types/core/types.d.ts.map +1 -0
- package/types/core/wire.d.ts +405 -0
- package/types/core/wire.d.ts.map +1 -0
- package/types/db.d.ts +244 -0
- package/types/db.d.ts.map +1 -0
- package/types/devtools/FrappeDevtoolsPanel.d.ts +7 -0
- package/types/devtools/FrappeDevtoolsPanel.d.ts.map +1 -0
- package/types/devtools/index.d.ts +4 -0
- package/types/devtools/index.d.ts.map +1 -0
- package/types/devtools/plugin.d.ts +9 -0
- package/types/devtools/plugin.d.ts.map +1 -0
- package/types/devtools/theme.d.ts +15 -0
- package/types/devtools/theme.d.ts.map +1 -0
- package/types/doctype.d.ts +256 -0
- package/types/doctype.d.ts.map +1 -0
- package/types/file.d.ts +15 -0
- package/types/file.d.ts.map +1 -0
- package/types/fixtureDb.d.ts +76 -0
- package/types/fixtureDb.d.ts.map +1 -0
- package/types/fixtures.d.ts +55 -0
- package/types/fixtures.d.ts.map +1 -0
- package/types/frappeApp.d.ts +45 -0
- package/types/frappeApp.d.ts.map +1 -0
- package/types/frappeReact.d.ts +270 -0
- package/types/frappeReact.d.ts.map +1 -0
- package/types/index.d.ts +44 -0
- package/types/index.d.ts.map +1 -0
- package/types/optimistic.d.ts +38 -0
- package/types/optimistic.d.ts.map +1 -0
- package/types/pacer.d.ts +193 -0
- package/types/pacer.d.ts.map +1 -0
- package/types/plugin/index.d.ts +11 -0
- package/types/plugin/index.d.ts.map +1 -0
- package/types/realtime.d.ts +121 -0
- package/types/realtime.d.ts.map +1 -0
- package/types/sync/backfill.d.ts +60 -0
- package/types/sync/backfill.d.ts.map +1 -0
- package/types/sync/filters.d.ts +101 -0
- package/types/sync/filters.d.ts.map +1 -0
- package/types/sync/index.d.ts +181 -0
- package/types/sync/index.d.ts.map +1 -0
- package/types/sync/merge.d.ts +59 -0
- package/types/sync/merge.d.ts.map +1 -0
- package/types/sync/mutationEngine.d.ts +117 -0
- package/types/sync/mutationEngine.d.ts.map +1 -0
- package/types/sync/mutationJournal.d.ts +60 -0
- package/types/sync/mutationJournal.d.ts.map +1 -0
- package/types/sync/normalizedCache.d.ts +59 -0
- package/types/sync/normalizedCache.d.ts.map +1 -0
- package/types/sync/persistence.d.ts +185 -0
- package/types/sync/persistence.d.ts.map +1 -0
- package/types/sync/realtime.d.ts +121 -0
- package/types/sync/realtime.d.ts.map +1 -0
- package/types/sync/rehydration.d.ts +109 -0
- package/types/sync/rehydration.d.ts.map +1 -0
- package/types/sync/storage.d.ts +65 -0
- package/types/sync/storage.d.ts.map +1 -0
- package/types/sync/subscriptionManager.d.ts +161 -0
- package/types/sync/subscriptionManager.d.ts.map +1 -0
- package/types/sync/types.d.ts +435 -0
- package/types/sync/types.d.ts.map +1 -0
- package/types/sync/virtualPageManager.d.ts +190 -0
- package/types/sync/virtualPageManager.d.ts.map +1 -0
- package/types/useLiveQuery.d.ts +16 -0
- package/types/useLiveQuery.d.ts.map +1 -0
- package/types/util.d.ts +24 -0
- package/types/util.d.ts.map +1 -0
- package/dist/cjs/auth.spec.cjs +0 -322
- package/dist/cjs/auth.spec.native.js +0 -329
- package/dist/cjs/auth.spec.native.js.map +0 -1
- package/dist/cjs/call.spec.cjs +0 -427
- package/dist/cjs/call.spec.native.js +0 -430
- package/dist/cjs/call.spec.native.js.map +0 -1
- package/dist/cjs/collection.spec.cjs +0 -186
- package/dist/cjs/collection.spec.native.js +0 -216
- package/dist/cjs/collection.spec.native.js.map +0 -1
- package/dist/cjs/common/types.spec.cjs +0 -266
- package/dist/cjs/common/types.spec.native.js +0 -271
- package/dist/cjs/common/types.spec.native.js.map +0 -1
- package/dist/cjs/core/http.spec.cjs +0 -1259
- package/dist/cjs/core/http.spec.native.js +0 -1401
- package/dist/cjs/core/http.spec.native.js.map +0 -1
- package/dist/cjs/core/wire.spec.cjs +0 -478
- package/dist/cjs/core/wire.spec.native.js +0 -482
- package/dist/cjs/core/wire.spec.native.js.map +0 -1
- package/dist/cjs/db.spec.cjs +0 -862
- package/dist/cjs/db.spec.native.js +0 -865
- package/dist/cjs/db.spec.native.js.map +0 -1
- package/dist/cjs/doctype.spec.cjs +0 -460
- package/dist/cjs/doctype.spec.native.js +0 -538
- package/dist/cjs/doctype.spec.native.js.map +0 -1
- package/dist/cjs/file.spec.cjs +0 -315
- package/dist/cjs/file.spec.native.js +0 -342
- package/dist/cjs/file.spec.native.js.map +0 -1
- package/dist/cjs/frappeApp.spec.cjs +0 -306
- package/dist/cjs/frappeApp.spec.native.js +0 -308
- package/dist/cjs/frappeApp.spec.native.js.map +0 -1
- package/dist/cjs/frappeReact.spec.cjs +0 -531
- package/dist/cjs/frappeReact.spec.native.js +0 -670
- package/dist/cjs/frappeReact.spec.native.js.map +0 -1
- package/dist/cjs/optimistic.spec.cjs +0 -11
- package/dist/cjs/optimistic.spec.native.js +0 -19
- package/dist/cjs/optimistic.spec.native.js.map +0 -1
- package/dist/cjs/pacer.spec.cjs +0 -470
- package/dist/cjs/pacer.spec.native.js +0 -537
- package/dist/cjs/pacer.spec.native.js.map +0 -1
- package/dist/cjs/realtime.spec.cjs +0 -326
- package/dist/cjs/realtime.spec.native.js +0 -392
- package/dist/cjs/realtime.spec.native.js.map +0 -1
- package/dist/cjs/sync/backfill.spec.cjs +0 -586
- package/dist/cjs/sync/backfill.spec.native.js +0 -712
- package/dist/cjs/sync/backfill.spec.native.js.map +0 -1
- package/dist/cjs/sync/debug.spec.cjs +0 -125
- package/dist/cjs/sync/debug.spec.native.js +0 -133
- package/dist/cjs/sync/debug.spec.native.js.map +0 -1
- package/dist/cjs/sync/filters.spec.cjs +0 -168
- package/dist/cjs/sync/filters.spec.native.js +0 -173
- package/dist/cjs/sync/filters.spec.native.js.map +0 -1
- package/dist/cjs/sync/merge.spec.cjs +0 -908
- package/dist/cjs/sync/merge.spec.native.js +0 -937
- package/dist/cjs/sync/merge.spec.native.js.map +0 -1
- package/dist/cjs/sync/multiOrderBy.spec.cjs +0 -165
- package/dist/cjs/sync/multiOrderBy.spec.native.js +0 -229
- package/dist/cjs/sync/multiOrderBy.spec.native.js.map +0 -1
- package/dist/cjs/sync/mutationEngine.spec.cjs +0 -1158
- package/dist/cjs/sync/mutationEngine.spec.native.js +0 -1173
- package/dist/cjs/sync/mutationEngine.spec.native.js.map +0 -1
- package/dist/cjs/sync/mutationJournal.spec.cjs +0 -330
- package/dist/cjs/sync/mutationJournal.spec.native.js +0 -333
- package/dist/cjs/sync/mutationJournal.spec.native.js.map +0 -1
- package/dist/cjs/sync/mutations.spec.cjs +0 -327
- package/dist/cjs/sync/mutations.spec.native.js +0 -330
- package/dist/cjs/sync/mutations.spec.native.js.map +0 -1
- package/dist/cjs/sync/normalizedCache.spec.cjs +0 -302
- package/dist/cjs/sync/normalizedCache.spec.native.js +0 -311
- package/dist/cjs/sync/normalizedCache.spec.native.js.map +0 -1
- package/dist/cjs/sync/persistence.spec.cjs +0 -562
- package/dist/cjs/sync/persistence.spec.native.js +0 -572
- package/dist/cjs/sync/persistence.spec.native.js.map +0 -1
- package/dist/cjs/sync/realtime.spec.cjs +0 -499
- package/dist/cjs/sync/realtime.spec.native.js +0 -512
- package/dist/cjs/sync/realtime.spec.native.js.map +0 -1
- package/dist/cjs/sync/rehydration.spec.cjs +0 -731
- package/dist/cjs/sync/rehydration.spec.native.js +0 -736
- package/dist/cjs/sync/rehydration.spec.native.js.map +0 -1
- package/dist/cjs/sync/storage.spec.cjs +0 -446
- package/dist/cjs/sync/storage.spec.native.js +0 -470
- package/dist/cjs/sync/storage.spec.native.js.map +0 -1
- package/dist/cjs/sync/subscriptionManager.spec.cjs +0 -1102
- package/dist/cjs/sync/subscriptionManager.spec.native.js +0 -1136
- package/dist/cjs/sync/subscriptionManager.spec.native.js.map +0 -1
- package/dist/cjs/sync/subscriptions.spec.cjs +0 -937
- package/dist/cjs/sync/subscriptions.spec.native.js +0 -969
- package/dist/cjs/sync/subscriptions.spec.native.js.map +0 -1
- package/dist/cjs/sync/syncModule.spec.cjs +0 -206
- package/dist/cjs/sync/syncModule.spec.native.js +0 -222
- package/dist/cjs/sync/syncModule.spec.native.js.map +0 -1
- package/dist/cjs/sync/types.spec.cjs +0 -246
- package/dist/cjs/sync/types.spec.native.js +0 -256
- package/dist/cjs/sync/types.spec.native.js.map +0 -1
- package/dist/cjs/sync/virtualPageManager.spec.cjs +0 -801
- package/dist/cjs/sync/virtualPageManager.spec.native.js +0 -873
- package/dist/cjs/sync/virtualPageManager.spec.native.js.map +0 -1
- package/dist/cjs/util.spec.cjs +0 -43
- package/dist/cjs/util.spec.native.js +0 -48
- package/dist/cjs/util.spec.native.js.map +0 -1
- package/dist/esm/auth.spec.mjs +0 -323
- package/dist/esm/auth.spec.mjs.map +0 -1
- package/dist/esm/auth.spec.native.js +0 -327
- package/dist/esm/auth.spec.native.js.map +0 -1
- package/dist/esm/call.spec.mjs +0 -428
- package/dist/esm/call.spec.mjs.map +0 -1
- package/dist/esm/call.spec.native.js +0 -428
- package/dist/esm/call.spec.native.js.map +0 -1
- package/dist/esm/collection.spec.mjs +0 -187
- package/dist/esm/collection.spec.mjs.map +0 -1
- package/dist/esm/collection.spec.native.js +0 -214
- package/dist/esm/collection.spec.native.js.map +0 -1
- package/dist/esm/common/types.spec.mjs +0 -267
- package/dist/esm/common/types.spec.mjs.map +0 -1
- package/dist/esm/common/types.spec.native.js +0 -269
- package/dist/esm/common/types.spec.native.js.map +0 -1
- package/dist/esm/core/http.spec.mjs +0 -1260
- package/dist/esm/core/http.spec.mjs.map +0 -1
- package/dist/esm/core/http.spec.native.js +0 -1399
- package/dist/esm/core/http.spec.native.js.map +0 -1
- package/dist/esm/core/wire.spec.mjs +0 -479
- package/dist/esm/core/wire.spec.mjs.map +0 -1
- package/dist/esm/core/wire.spec.native.js +0 -480
- package/dist/esm/core/wire.spec.native.js.map +0 -1
- package/dist/esm/db.spec.mjs +0 -863
- package/dist/esm/db.spec.mjs.map +0 -1
- package/dist/esm/db.spec.native.js +0 -863
- package/dist/esm/db.spec.native.js.map +0 -1
- package/dist/esm/doctype.spec.mjs +0 -461
- package/dist/esm/doctype.spec.mjs.map +0 -1
- package/dist/esm/doctype.spec.native.js +0 -536
- package/dist/esm/doctype.spec.native.js.map +0 -1
- package/dist/esm/file.spec.mjs +0 -316
- package/dist/esm/file.spec.mjs.map +0 -1
- package/dist/esm/file.spec.native.js +0 -340
- package/dist/esm/file.spec.native.js.map +0 -1
- package/dist/esm/frappeApp.spec.mjs +0 -307
- package/dist/esm/frappeApp.spec.mjs.map +0 -1
- package/dist/esm/frappeApp.spec.native.js +0 -306
- package/dist/esm/frappeApp.spec.native.js.map +0 -1
- package/dist/esm/frappeReact.spec.mjs +0 -532
- package/dist/esm/frappeReact.spec.mjs.map +0 -1
- package/dist/esm/frappeReact.spec.native.js +0 -668
- package/dist/esm/frappeReact.spec.native.js.map +0 -1
- package/dist/esm/optimistic.spec.mjs +0 -12
- package/dist/esm/optimistic.spec.mjs.map +0 -1
- package/dist/esm/optimistic.spec.native.js +0 -17
- package/dist/esm/optimistic.spec.native.js.map +0 -1
- package/dist/esm/pacer.spec.mjs +0 -447
- package/dist/esm/pacer.spec.mjs.map +0 -1
- package/dist/esm/pacer.spec.native.js +0 -511
- package/dist/esm/pacer.spec.native.js.map +0 -1
- package/dist/esm/realtime.spec.mjs +0 -327
- package/dist/esm/realtime.spec.mjs.map +0 -1
- package/dist/esm/realtime.spec.native.js +0 -390
- package/dist/esm/realtime.spec.native.js.map +0 -1
- package/dist/esm/sync/backfill.spec.mjs +0 -563
- package/dist/esm/sync/backfill.spec.mjs.map +0 -1
- package/dist/esm/sync/backfill.spec.native.js +0 -686
- package/dist/esm/sync/backfill.spec.native.js.map +0 -1
- package/dist/esm/sync/debug.spec.mjs +0 -102
- package/dist/esm/sync/debug.spec.mjs.map +0 -1
- package/dist/esm/sync/debug.spec.native.js +0 -107
- package/dist/esm/sync/debug.spec.native.js.map +0 -1
- package/dist/esm/sync/filters.spec.mjs +0 -169
- package/dist/esm/sync/filters.spec.mjs.map +0 -1
- package/dist/esm/sync/filters.spec.native.js +0 -171
- package/dist/esm/sync/filters.spec.native.js.map +0 -1
- package/dist/esm/sync/merge.spec.mjs +0 -909
- package/dist/esm/sync/merge.spec.mjs.map +0 -1
- package/dist/esm/sync/merge.spec.native.js +0 -935
- package/dist/esm/sync/merge.spec.native.js.map +0 -1
- package/dist/esm/sync/multiOrderBy.spec.mjs +0 -166
- package/dist/esm/sync/multiOrderBy.spec.mjs.map +0 -1
- package/dist/esm/sync/multiOrderBy.spec.native.js +0 -227
- package/dist/esm/sync/multiOrderBy.spec.native.js.map +0 -1
- package/dist/esm/sync/mutationEngine.spec.mjs +0 -1159
- package/dist/esm/sync/mutationEngine.spec.mjs.map +0 -1
- package/dist/esm/sync/mutationEngine.spec.native.js +0 -1171
- package/dist/esm/sync/mutationEngine.spec.native.js.map +0 -1
- package/dist/esm/sync/mutationJournal.spec.mjs +0 -331
- package/dist/esm/sync/mutationJournal.spec.mjs.map +0 -1
- package/dist/esm/sync/mutationJournal.spec.native.js +0 -331
- package/dist/esm/sync/mutationJournal.spec.native.js.map +0 -1
- package/dist/esm/sync/mutations.spec.mjs +0 -328
- package/dist/esm/sync/mutations.spec.mjs.map +0 -1
- package/dist/esm/sync/mutations.spec.native.js +0 -328
- package/dist/esm/sync/mutations.spec.native.js.map +0 -1
- package/dist/esm/sync/normalizedCache.spec.mjs +0 -303
- package/dist/esm/sync/normalizedCache.spec.mjs.map +0 -1
- package/dist/esm/sync/normalizedCache.spec.native.js +0 -309
- package/dist/esm/sync/normalizedCache.spec.native.js.map +0 -1
- package/dist/esm/sync/persistence.spec.mjs +0 -563
- package/dist/esm/sync/persistence.spec.mjs.map +0 -1
- package/dist/esm/sync/persistence.spec.native.js +0 -570
- package/dist/esm/sync/persistence.spec.native.js.map +0 -1
- package/dist/esm/sync/realtime.spec.mjs +0 -500
- package/dist/esm/sync/realtime.spec.mjs.map +0 -1
- package/dist/esm/sync/realtime.spec.native.js +0 -510
- package/dist/esm/sync/realtime.spec.native.js.map +0 -1
- package/dist/esm/sync/rehydration.spec.mjs +0 -732
- package/dist/esm/sync/rehydration.spec.mjs.map +0 -1
- package/dist/esm/sync/rehydration.spec.native.js +0 -734
- package/dist/esm/sync/rehydration.spec.native.js.map +0 -1
- package/dist/esm/sync/storage.spec.mjs +0 -423
- package/dist/esm/sync/storage.spec.mjs.map +0 -1
- package/dist/esm/sync/storage.spec.native.js +0 -444
- package/dist/esm/sync/storage.spec.native.js.map +0 -1
- package/dist/esm/sync/subscriptionManager.spec.mjs +0 -1079
- package/dist/esm/sync/subscriptionManager.spec.mjs.map +0 -1
- package/dist/esm/sync/subscriptionManager.spec.native.js +0 -1110
- package/dist/esm/sync/subscriptionManager.spec.native.js.map +0 -1
- package/dist/esm/sync/subscriptions.spec.mjs +0 -914
- package/dist/esm/sync/subscriptions.spec.mjs.map +0 -1
- package/dist/esm/sync/subscriptions.spec.native.js +0 -943
- package/dist/esm/sync/subscriptions.spec.native.js.map +0 -1
- package/dist/esm/sync/syncModule.spec.mjs +0 -207
- package/dist/esm/sync/syncModule.spec.mjs.map +0 -1
- package/dist/esm/sync/syncModule.spec.native.js +0 -220
- package/dist/esm/sync/syncModule.spec.native.js.map +0 -1
- package/dist/esm/sync/types.spec.mjs +0 -247
- package/dist/esm/sync/types.spec.mjs.map +0 -1
- package/dist/esm/sync/types.spec.native.js +0 -254
- package/dist/esm/sync/types.spec.native.js.map +0 -1
- package/dist/esm/sync/virtualPageManager.spec.mjs +0 -802
- package/dist/esm/sync/virtualPageManager.spec.mjs.map +0 -1
- package/dist/esm/sync/virtualPageManager.spec.native.js +0 -871
- package/dist/esm/sync/virtualPageManager.spec.native.js.map +0 -1
- package/dist/esm/util.spec.mjs +0 -20
- package/dist/esm/util.spec.mjs.map +0 -1
- package/dist/esm/util.spec.native.js +0 -22
- package/dist/esm/util.spec.native.js.map +0 -1
- package/dist/jsx/auth.spec.mjs +0 -323
- package/dist/jsx/auth.spec.mjs.map +0 -1
- package/dist/jsx/auth.spec.native.js +0 -329
- package/dist/jsx/auth.spec.native.js.map +0 -1
- package/dist/jsx/call.spec.mjs +0 -428
- package/dist/jsx/call.spec.mjs.map +0 -1
- package/dist/jsx/call.spec.native.js +0 -430
- package/dist/jsx/call.spec.native.js.map +0 -1
- package/dist/jsx/collection.spec.mjs +0 -187
- package/dist/jsx/collection.spec.mjs.map +0 -1
- package/dist/jsx/collection.spec.native.js +0 -216
- package/dist/jsx/collection.spec.native.js.map +0 -1
- package/dist/jsx/common/types.spec.mjs +0 -267
- package/dist/jsx/common/types.spec.mjs.map +0 -1
- package/dist/jsx/common/types.spec.native.js +0 -271
- package/dist/jsx/common/types.spec.native.js.map +0 -1
- package/dist/jsx/core/http.spec.mjs +0 -1260
- package/dist/jsx/core/http.spec.mjs.map +0 -1
- package/dist/jsx/core/http.spec.native.js +0 -1401
- package/dist/jsx/core/http.spec.native.js.map +0 -1
- package/dist/jsx/core/wire.spec.mjs +0 -479
- package/dist/jsx/core/wire.spec.mjs.map +0 -1
- package/dist/jsx/core/wire.spec.native.js +0 -482
- package/dist/jsx/core/wire.spec.native.js.map +0 -1
- package/dist/jsx/db.spec.mjs +0 -863
- package/dist/jsx/db.spec.mjs.map +0 -1
- package/dist/jsx/db.spec.native.js +0 -865
- package/dist/jsx/db.spec.native.js.map +0 -1
- package/dist/jsx/doctype.spec.mjs +0 -461
- package/dist/jsx/doctype.spec.mjs.map +0 -1
- package/dist/jsx/doctype.spec.native.js +0 -538
- package/dist/jsx/doctype.spec.native.js.map +0 -1
- package/dist/jsx/file.spec.mjs +0 -316
- package/dist/jsx/file.spec.mjs.map +0 -1
- package/dist/jsx/file.spec.native.js +0 -342
- package/dist/jsx/file.spec.native.js.map +0 -1
- package/dist/jsx/frappeApp.spec.mjs +0 -307
- package/dist/jsx/frappeApp.spec.mjs.map +0 -1
- package/dist/jsx/frappeApp.spec.native.js +0 -308
- package/dist/jsx/frappeApp.spec.native.js.map +0 -1
- package/dist/jsx/frappeReact.spec.mjs +0 -532
- package/dist/jsx/frappeReact.spec.mjs.map +0 -1
- package/dist/jsx/frappeReact.spec.native.js +0 -670
- package/dist/jsx/frappeReact.spec.native.js.map +0 -1
- package/dist/jsx/optimistic.spec.mjs +0 -12
- package/dist/jsx/optimistic.spec.mjs.map +0 -1
- package/dist/jsx/optimistic.spec.native.js +0 -19
- package/dist/jsx/optimistic.spec.native.js.map +0 -1
- package/dist/jsx/pacer.spec.mjs +0 -447
- package/dist/jsx/pacer.spec.mjs.map +0 -1
- package/dist/jsx/pacer.spec.native.js +0 -537
- package/dist/jsx/pacer.spec.native.js.map +0 -1
- package/dist/jsx/realtime.spec.mjs +0 -327
- package/dist/jsx/realtime.spec.mjs.map +0 -1
- package/dist/jsx/realtime.spec.native.js +0 -392
- package/dist/jsx/realtime.spec.native.js.map +0 -1
- package/dist/jsx/sync/backfill.spec.mjs +0 -563
- package/dist/jsx/sync/backfill.spec.mjs.map +0 -1
- package/dist/jsx/sync/backfill.spec.native.js +0 -712
- package/dist/jsx/sync/backfill.spec.native.js.map +0 -1
- package/dist/jsx/sync/debug.spec.mjs +0 -102
- package/dist/jsx/sync/debug.spec.mjs.map +0 -1
- package/dist/jsx/sync/debug.spec.native.js +0 -133
- package/dist/jsx/sync/debug.spec.native.js.map +0 -1
- package/dist/jsx/sync/filters.spec.mjs +0 -169
- package/dist/jsx/sync/filters.spec.mjs.map +0 -1
- package/dist/jsx/sync/filters.spec.native.js +0 -173
- package/dist/jsx/sync/filters.spec.native.js.map +0 -1
- package/dist/jsx/sync/merge.spec.mjs +0 -909
- package/dist/jsx/sync/merge.spec.mjs.map +0 -1
- package/dist/jsx/sync/merge.spec.native.js +0 -937
- package/dist/jsx/sync/merge.spec.native.js.map +0 -1
- package/dist/jsx/sync/multiOrderBy.spec.mjs +0 -166
- package/dist/jsx/sync/multiOrderBy.spec.mjs.map +0 -1
- package/dist/jsx/sync/multiOrderBy.spec.native.js +0 -229
- package/dist/jsx/sync/multiOrderBy.spec.native.js.map +0 -1
- package/dist/jsx/sync/mutationEngine.spec.mjs +0 -1159
- package/dist/jsx/sync/mutationEngine.spec.mjs.map +0 -1
- package/dist/jsx/sync/mutationEngine.spec.native.js +0 -1173
- package/dist/jsx/sync/mutationEngine.spec.native.js.map +0 -1
- package/dist/jsx/sync/mutationJournal.spec.mjs +0 -331
- package/dist/jsx/sync/mutationJournal.spec.mjs.map +0 -1
- package/dist/jsx/sync/mutationJournal.spec.native.js +0 -333
- package/dist/jsx/sync/mutationJournal.spec.native.js.map +0 -1
- package/dist/jsx/sync/mutations.spec.mjs +0 -328
- package/dist/jsx/sync/mutations.spec.mjs.map +0 -1
- package/dist/jsx/sync/mutations.spec.native.js +0 -330
- package/dist/jsx/sync/mutations.spec.native.js.map +0 -1
- package/dist/jsx/sync/normalizedCache.spec.mjs +0 -303
- package/dist/jsx/sync/normalizedCache.spec.mjs.map +0 -1
- package/dist/jsx/sync/normalizedCache.spec.native.js +0 -311
- package/dist/jsx/sync/normalizedCache.spec.native.js.map +0 -1
- package/dist/jsx/sync/persistence.spec.mjs +0 -563
- package/dist/jsx/sync/persistence.spec.mjs.map +0 -1
- package/dist/jsx/sync/persistence.spec.native.js +0 -572
- package/dist/jsx/sync/persistence.spec.native.js.map +0 -1
- package/dist/jsx/sync/realtime.spec.mjs +0 -500
- package/dist/jsx/sync/realtime.spec.mjs.map +0 -1
- package/dist/jsx/sync/realtime.spec.native.js +0 -512
- package/dist/jsx/sync/realtime.spec.native.js.map +0 -1
- package/dist/jsx/sync/rehydration.spec.mjs +0 -732
- package/dist/jsx/sync/rehydration.spec.mjs.map +0 -1
- package/dist/jsx/sync/rehydration.spec.native.js +0 -736
- package/dist/jsx/sync/rehydration.spec.native.js.map +0 -1
- package/dist/jsx/sync/storage.spec.mjs +0 -423
- package/dist/jsx/sync/storage.spec.mjs.map +0 -1
- package/dist/jsx/sync/storage.spec.native.js +0 -470
- package/dist/jsx/sync/storage.spec.native.js.map +0 -1
- package/dist/jsx/sync/subscriptionManager.spec.mjs +0 -1079
- package/dist/jsx/sync/subscriptionManager.spec.mjs.map +0 -1
- package/dist/jsx/sync/subscriptionManager.spec.native.js +0 -1136
- package/dist/jsx/sync/subscriptionManager.spec.native.js.map +0 -1
- package/dist/jsx/sync/subscriptions.spec.mjs +0 -914
- package/dist/jsx/sync/subscriptions.spec.mjs.map +0 -1
- package/dist/jsx/sync/subscriptions.spec.native.js +0 -969
- package/dist/jsx/sync/subscriptions.spec.native.js.map +0 -1
- package/dist/jsx/sync/syncModule.spec.mjs +0 -207
- package/dist/jsx/sync/syncModule.spec.mjs.map +0 -1
- package/dist/jsx/sync/syncModule.spec.native.js +0 -222
- package/dist/jsx/sync/syncModule.spec.native.js.map +0 -1
- package/dist/jsx/sync/types.spec.mjs +0 -247
- package/dist/jsx/sync/types.spec.mjs.map +0 -1
- package/dist/jsx/sync/types.spec.native.js +0 -256
- package/dist/jsx/sync/types.spec.native.js.map +0 -1
- package/dist/jsx/sync/virtualPageManager.spec.mjs +0 -802
- package/dist/jsx/sync/virtualPageManager.spec.mjs.map +0 -1
- package/dist/jsx/sync/virtualPageManager.spec.native.js +0 -873
- package/dist/jsx/sync/virtualPageManager.spec.native.js.map +0 -1
- package/dist/jsx/util.spec.mjs +0 -20
- package/dist/jsx/util.spec.mjs.map +0 -1
- package/dist/jsx/util.spec.native.js +0 -48
- 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
|
-
*
|
|
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
|
|
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
|
-
|
|
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","
|
|
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("
|
|
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
|
-
(
|
|
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
|
-
(
|
|
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
|
-
(
|
|
160
|
+
(_this_realtime5 = this.realtime) === null || _this_realtime5 === void 0 ? void 0 : _this_realtime5.on("connected", function () {
|
|
131
161
|
_this.onConnected();
|
|
132
162
|
});
|
|
133
|
-
(
|
|
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
|
-
*
|
|
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
|
|
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
|
-
|
|
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();
|