@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
package/src/sync/realtime.ts
CHANGED
|
@@ -10,16 +10,34 @@ export class RealtimeHandler {
|
|
|
10
10
|
private reconnectAttempts = 0;
|
|
11
11
|
private reconnectTimer: ReturnType<typeof setTimeout> | undefined;
|
|
12
12
|
private hasConnected = false;
|
|
13
|
+
/** Live socket state: true between `connected` and `disconnect` events. */
|
|
14
|
+
private connected = false;
|
|
13
15
|
private connectionConfig: Required<ConnectionConfig>;
|
|
16
|
+
/** Refcount of active subscriptions per doctype — drives doctype room membership. */
|
|
17
|
+
private watchedDoctypes = new Map<string, number>();
|
|
18
|
+
/** In-flight authoritative fetches, deduping concurrent doc_update/list_update pairs. */
|
|
19
|
+
private inflightFetches = new Map<string, Promise<void>>();
|
|
20
|
+
private readonly db: DbModule;
|
|
21
|
+
private readonly realtime: RealtimeModule | undefined;
|
|
22
|
+
private readonly normalizedCache: NormalizedCache;
|
|
23
|
+
private readonly subscriptionManager: SubscriptionManager;
|
|
24
|
+
private readonly rehydrationManager: RehydrationManager | undefined;
|
|
25
|
+
private readonly options: SyncOptions;
|
|
14
26
|
|
|
15
27
|
constructor(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
28
|
+
db: DbModule,
|
|
29
|
+
realtime: RealtimeModule | undefined,
|
|
30
|
+
normalizedCache: NormalizedCache,
|
|
31
|
+
subscriptionManager: SubscriptionManager,
|
|
32
|
+
rehydrationManager: RehydrationManager | undefined,
|
|
33
|
+
options: SyncOptions = {},
|
|
22
34
|
) {
|
|
35
|
+
this.db = db;
|
|
36
|
+
this.realtime = realtime;
|
|
37
|
+
this.normalizedCache = normalizedCache;
|
|
38
|
+
this.subscriptionManager = subscriptionManager;
|
|
39
|
+
this.rehydrationManager = rehydrationManager;
|
|
40
|
+
this.options = options;
|
|
23
41
|
this.connectionConfig = {
|
|
24
42
|
reconnectBaseDelay: options.connectionConfig?.reconnectBaseDelay ?? 1000,
|
|
25
43
|
reconnectMaxDelay: options.connectionConfig?.reconnectMaxDelay ?? 30000,
|
|
@@ -32,10 +50,50 @@ export class RealtimeHandler {
|
|
|
32
50
|
|
|
33
51
|
/**
|
|
34
52
|
* Sets up realtime event handlers for document changes.
|
|
53
|
+
*
|
|
54
|
+
* Real Frappe (v15) wire protocol, verified live against a stock bench
|
|
55
|
+
* (see .test-evidence/storybook-rubric/p-results/frappe-realtime-live-e2e.md):
|
|
56
|
+
* - `doc_update` `{doctype, name, modified}` — emitted to the per-doc room
|
|
57
|
+
* `doc:{doctype}/{name}` on every save.
|
|
58
|
+
* - `list_update` `{doctype, name, user}` — emitted to the doctype room
|
|
59
|
+
* `doctype:{doctype}` on every save of a non-single, non-child doctype.
|
|
60
|
+
* - Deletion emits the SAME two events (payload indistinguishable from an
|
|
61
|
+
* update) — there is NO `doc_deleted` event. Deletions are detected here
|
|
62
|
+
* opportunistically when the authoritative re-fetch 404s, but the durable
|
|
63
|
+
* deletion signal remains the tombstone/CDC backfill (`Deleted Document`
|
|
64
|
+
* doctype maintained by the `live` app's on_trash hook).
|
|
65
|
+
*
|
|
66
|
+
* Both real events funnel into the same fetch-and-reconcile path, deduped
|
|
67
|
+
* so a doc_update/list_update pair for the same doc costs one fetch.
|
|
35
68
|
*/
|
|
36
69
|
private setupRealtimeHandlers() {
|
|
37
70
|
if (!this.realtime) return;
|
|
38
71
|
|
|
72
|
+
this.realtime?.on("doc_update", async (payload) => {
|
|
73
|
+
if (this.options.onRealtimeEvent)
|
|
74
|
+
this.options.onRealtimeEvent({
|
|
75
|
+
type: RealtimeEventType.DocUpdate,
|
|
76
|
+
payload,
|
|
77
|
+
});
|
|
78
|
+
return this.onDocChanged(payload as { doctype: string; name: string });
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
this.realtime?.on("list_update", async (payload) => {
|
|
82
|
+
if (this.options.onRealtimeEvent)
|
|
83
|
+
this.options.onRealtimeEvent({
|
|
84
|
+
type: RealtimeEventType.ListUpdate,
|
|
85
|
+
payload,
|
|
86
|
+
});
|
|
87
|
+
return this.onDocChanged(payload as { doctype: string; name: string });
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// `doc_deleted` is emitted by the `live` server app's on_trash hook
|
|
91
|
+
// (live.live.tombstones.notify_deletion) to the doctype room after
|
|
92
|
+
// commit — it gives subscribed clients an explicit deletion signal
|
|
93
|
+
// (payload {doctype, name, deleted_at}) without the 404 probe below.
|
|
94
|
+
// `doc_changed` remains a forward-compat no-op from the designed wire
|
|
95
|
+
// protocol (src/core/wire.ts); stock frappe never emits it and the
|
|
96
|
+
// dedup map absorbs doubles if a server ever does.
|
|
39
97
|
this.realtime?.on("doc_changed", async (payload) => {
|
|
40
98
|
if (this.options.onRealtimeEvent)
|
|
41
99
|
this.options.onRealtimeEvent({
|
|
@@ -87,6 +145,7 @@ export class RealtimeHandler {
|
|
|
87
145
|
*/
|
|
88
146
|
private onConnected() {
|
|
89
147
|
this.hasConnected = true;
|
|
148
|
+
this.connected = true;
|
|
90
149
|
this.reconnectAttempts = 0;
|
|
91
150
|
|
|
92
151
|
// Clear any pending reconnection timers
|
|
@@ -104,6 +163,9 @@ export class RealtimeHandler {
|
|
|
104
163
|
this.options.onBackfillAll();
|
|
105
164
|
}
|
|
106
165
|
|
|
166
|
+
// Let store subscribers re-read connection state (reconnect indicators)
|
|
167
|
+
this.options.onStoreChange?.();
|
|
168
|
+
|
|
107
169
|
console.debug("[RealtimeHandler] Connected to realtime server");
|
|
108
170
|
}
|
|
109
171
|
|
|
@@ -112,6 +174,8 @@ export class RealtimeHandler {
|
|
|
112
174
|
*/
|
|
113
175
|
private onDisconnected() {
|
|
114
176
|
console.debug("[RealtimeHandler] Disconnected from realtime server");
|
|
177
|
+
this.connected = false;
|
|
178
|
+
this.options.onStoreChange?.();
|
|
115
179
|
|
|
116
180
|
// Only attempt reconnection if we've successfully connected before
|
|
117
181
|
if (this.hasConnected) {
|
|
@@ -120,16 +184,18 @@ export class RealtimeHandler {
|
|
|
120
184
|
}
|
|
121
185
|
|
|
122
186
|
/**
|
|
123
|
-
*
|
|
187
|
+
* No-op placeholder retained for the disconnect backoff schedule below.
|
|
188
|
+
* Transport reconnect is owned by Socket.IO inside RealtimeModule; this
|
|
189
|
+
* layer only tracks attempts for logging / future health hooks.
|
|
124
190
|
*/
|
|
125
191
|
private attemptConnection() {
|
|
126
192
|
if (!this.realtime) return;
|
|
127
|
-
// RealtimeModule handles reconnection internally via its reconnection config.
|
|
128
|
-
// Handlers are already attached in the constructor via setupRealtimeHandlers().
|
|
129
193
|
}
|
|
130
194
|
|
|
131
195
|
/**
|
|
132
|
-
* Schedules a reconnection
|
|
196
|
+
* Schedules a reconnection *watchdog* tick with exponential backoff and jitter.
|
|
197
|
+
* Does not open sockets — RealtimeModule already reconnects. Kept so disconnect
|
|
198
|
+
* storms remain observable (and existing unit tests stay meaningful).
|
|
133
199
|
*/
|
|
134
200
|
private scheduleReconnection() {
|
|
135
201
|
// Clear any existing timer
|
|
@@ -175,12 +241,67 @@ export class RealtimeHandler {
|
|
|
175
241
|
);
|
|
176
242
|
}
|
|
177
243
|
|
|
244
|
+
/**
|
|
245
|
+
* Join the realtime doctype room for a doctype (refcounted). Called by the
|
|
246
|
+
* sync module whenever a subscription for the doctype is added. Room
|
|
247
|
+
* membership survives reconnects — RealtimeModule re-joins tracked rooms on
|
|
248
|
+
* every `connect`.
|
|
249
|
+
*
|
|
250
|
+
* Note: only doctype-level rooms are joined. `list_update` fires for every
|
|
251
|
+
* save of a regular doctype, which covers doc updates too; per-doc rooms
|
|
252
|
+
* would only add coverage for single/read-only doctypes.
|
|
253
|
+
*/
|
|
254
|
+
watchDoctype(doctype: string): void {
|
|
255
|
+
const count = (this.watchedDoctypes.get(doctype) ?? 0) + 1;
|
|
256
|
+
this.watchedDoctypes.set(doctype, count);
|
|
257
|
+
if (count === 1 && this.realtime) {
|
|
258
|
+
Promise.resolve(this.realtime.subscribeList(doctype)).catch((err) =>
|
|
259
|
+
console.warn(`[RealtimeHandler] Failed to join doctype room ${doctype}:`, err),
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/** Release one reference to a doctype room; leaves the room on the last one. */
|
|
265
|
+
unwatchDoctype(doctype: string): void {
|
|
266
|
+
const count = (this.watchedDoctypes.get(doctype) ?? 0) - 1;
|
|
267
|
+
if (count > 0) {
|
|
268
|
+
this.watchedDoctypes.set(doctype, count);
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
this.watchedDoctypes.delete(doctype);
|
|
272
|
+
this.realtime?.unsubscribeList(doctype);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/** Leave all doctype rooms (used by cache resets/disposal). */
|
|
276
|
+
unwatchAll(): void {
|
|
277
|
+
if (this.realtime) {
|
|
278
|
+
for (const doctype of this.watchedDoctypes.keys()) {
|
|
279
|
+
this.realtime.unsubscribeList(doctype);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
this.watchedDoctypes.clear();
|
|
283
|
+
}
|
|
284
|
+
|
|
178
285
|
/**
|
|
179
286
|
* Realtime handler: authoritative document changed.
|
|
180
287
|
* Fetches document via REST with current user context to respect permissions,
|
|
181
288
|
* updates cache, and reconciles subscription membership.
|
|
289
|
+
*
|
|
290
|
+
* Concurrent events for the same document (frappe emits doc_update AND
|
|
291
|
+
* list_update per save) share a single in-flight fetch.
|
|
182
292
|
*/
|
|
183
|
-
private
|
|
293
|
+
private onDocChanged(payload: { doctype: string; name: string }): Promise<void> {
|
|
294
|
+
const key = `${payload?.doctype}\0${payload?.name}`;
|
|
295
|
+
const inflight = this.inflightFetches.get(key);
|
|
296
|
+
if (inflight) return inflight;
|
|
297
|
+
const fetchPromise = this.fetchAndReconcile(payload).finally(() => {
|
|
298
|
+
this.inflightFetches.delete(key);
|
|
299
|
+
});
|
|
300
|
+
this.inflightFetches.set(key, fetchPromise);
|
|
301
|
+
return fetchPromise;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
private async fetchAndReconcile(payload: { doctype: string; name: string }) {
|
|
184
305
|
try {
|
|
185
306
|
// Fetch authoritative document to respect permissions and server-only fields
|
|
186
307
|
const document = await this.db.getDoc<any>(payload.doctype, payload.name);
|
|
@@ -195,9 +316,21 @@ export class RealtimeHandler {
|
|
|
195
316
|
for (const subscription of subscriptionsNeedingRehydration) {
|
|
196
317
|
this.rehydrationManager?.scheduleRehydration(subscription, RehydrationReason.RemoteCreate);
|
|
197
318
|
}
|
|
319
|
+
|
|
320
|
+
// Cache/membership changed without a local mutation or backfill —
|
|
321
|
+
// notify the store so live queries re-render the patched rows.
|
|
322
|
+
this.options.onStoreChange?.();
|
|
198
323
|
} catch (err) {
|
|
199
|
-
//
|
|
200
|
-
//
|
|
324
|
+
// Frappe emits a plain doc_update/list_update on deletion (no doc_deleted
|
|
325
|
+
// event exists) — a 404 on the authoritative re-fetch means the document
|
|
326
|
+
// is gone (deleted, or read access revoked): evict it. The tombstone/CDC
|
|
327
|
+
// backfill remains the durable deletion signal for events missed offline.
|
|
328
|
+
if ((err as { status?: number })?.status === 404) {
|
|
329
|
+
await this.onDocDeleted(payload);
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
// Other failures (network, transient server errors): skip this update —
|
|
333
|
+
// the next backfill will catch any missed changes
|
|
201
334
|
console.warn(
|
|
202
335
|
`Failed to fetch document ${payload?.doctype}/${payload?.name} during realtime update:`,
|
|
203
336
|
err,
|
|
@@ -227,6 +360,9 @@ export class RealtimeHandler {
|
|
|
227
360
|
for (const subscription of affectedSubscriptions) {
|
|
228
361
|
this.rehydrationManager?.scheduleRehydration(subscription, RehydrationReason.Delete);
|
|
229
362
|
}
|
|
363
|
+
|
|
364
|
+
// Row evicted — notify the store so live queries drop it immediately.
|
|
365
|
+
this.options.onStoreChange?.();
|
|
230
366
|
} catch (err) {
|
|
231
367
|
console.warn(`Failed to process doc_deleted for ${payload?.doctype}/${payload?.name}:`, err);
|
|
232
368
|
}
|
|
@@ -243,6 +379,16 @@ export class RealtimeHandler {
|
|
|
243
379
|
return this.hasConnected;
|
|
244
380
|
}
|
|
245
381
|
|
|
382
|
+
/**
|
|
383
|
+
* Live connection snapshot for reconnect indicators.
|
|
384
|
+
* `connected` tracks the socket right now; `everConnected` distinguishes
|
|
385
|
+
* "reconnecting" (was up, dropped) from "never had realtime" (fixtures,
|
|
386
|
+
* SSR, no realtime module).
|
|
387
|
+
*/
|
|
388
|
+
getConnectionState(): { connected: boolean; everConnected: boolean } {
|
|
389
|
+
return { connected: this.connected, everConnected: this.hasConnected };
|
|
390
|
+
}
|
|
391
|
+
|
|
246
392
|
/**
|
|
247
393
|
* Disposes of resources and clears timers.
|
|
248
394
|
*/
|
|
@@ -252,6 +398,8 @@ export class RealtimeHandler {
|
|
|
252
398
|
this.reconnectTimer = undefined;
|
|
253
399
|
}
|
|
254
400
|
|
|
401
|
+
this.unwatchAll();
|
|
402
|
+
|
|
255
403
|
if (this.realtime) {
|
|
256
404
|
this.realtime?.disconnect();
|
|
257
405
|
}
|
package/src/sync/rehydration.ts
CHANGED
|
@@ -32,13 +32,26 @@ export class RehydrationManager {
|
|
|
32
32
|
private readonly processDebouncer = new Debouncer(() => this.processQueue(), { wait: 100 });
|
|
33
33
|
/** Maps temporary IDs to server-assigned IDs for optimistic creates */
|
|
34
34
|
private temporaryIdMap = new Map<string, string>();
|
|
35
|
+
private readonly db: DbModule;
|
|
36
|
+
private readonly cache: NormalizedCache;
|
|
37
|
+
private readonly subscriptionManager: SubscriptionManager;
|
|
38
|
+
private readonly mutationJournal: MutationJournal;
|
|
39
|
+
/** Notifies the sync store after rehydration mutates cache/membership. */
|
|
40
|
+
private readonly onChange?: () => void;
|
|
35
41
|
|
|
36
42
|
constructor(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
db: DbModule,
|
|
44
|
+
cache: NormalizedCache,
|
|
45
|
+
subscriptionManager: SubscriptionManager,
|
|
46
|
+
mutationJournal: MutationJournal,
|
|
47
|
+
onChange?: () => void,
|
|
48
|
+
) {
|
|
49
|
+
this.db = db;
|
|
50
|
+
this.cache = cache;
|
|
51
|
+
this.subscriptionManager = subscriptionManager;
|
|
52
|
+
this.mutationJournal = mutationJournal;
|
|
53
|
+
this.onChange = onChange;
|
|
54
|
+
}
|
|
42
55
|
|
|
43
56
|
/**
|
|
44
57
|
* Schedules a rehydration task for a subscription based on the reason.
|
|
@@ -171,15 +184,20 @@ export class RehydrationManager {
|
|
|
171
184
|
});
|
|
172
185
|
|
|
173
186
|
// Process each task
|
|
187
|
+
let anyExecuted = false;
|
|
174
188
|
for (const task of tasks) {
|
|
175
189
|
try {
|
|
176
190
|
await this.executeRehydration(task);
|
|
177
191
|
this.rehydrationQueue.delete(task.subscriptionId);
|
|
192
|
+
anyExecuted = true;
|
|
178
193
|
} catch (error) {
|
|
179
194
|
console.error(`Rehydration failed for ${task.subscriptionId}:`, error);
|
|
180
195
|
// Keep in queue for retry
|
|
181
196
|
}
|
|
182
197
|
}
|
|
198
|
+
// Rehydration refreshed cache/membership outside a mutate/backfill call —
|
|
199
|
+
// notify store listeners so live queries pick up the reconciled page.
|
|
200
|
+
if (anyExecuted) this.onChange?.();
|
|
183
201
|
}
|
|
184
202
|
|
|
185
203
|
/**
|
package/src/sync/storage.ts
CHANGED
|
@@ -73,11 +73,12 @@ export class PlatformStorageKV implements KVStorage {
|
|
|
73
73
|
*/
|
|
74
74
|
export class IndexedDBKV implements KVStorage {
|
|
75
75
|
private dbPromise: Promise<IDBDatabase>;
|
|
76
|
+
private readonly dbName: string;
|
|
77
|
+
private readonly store: string;
|
|
76
78
|
|
|
77
|
-
constructor(
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
) {
|
|
79
|
+
constructor(dbName = "frappe-sync", store = "kv") {
|
|
80
|
+
this.dbName = dbName;
|
|
81
|
+
this.store = store;
|
|
81
82
|
this.dbPromise = new Promise((resolve, reject) => {
|
|
82
83
|
if (typeof indexedDB === "undefined") {
|
|
83
84
|
reject(new Error("IndexedDB not available in this environment"));
|
|
@@ -534,6 +534,100 @@ describe("SubscriptionManager", () => {
|
|
|
534
534
|
expect(subscription.tombstones?.has("doc2")).toBe(true);
|
|
535
535
|
});
|
|
536
536
|
|
|
537
|
+
it("should drain follow-up pages while the server reports has_more", async () => {
|
|
538
|
+
const result = await subscriptionManager.subscribe({
|
|
539
|
+
doctype: "TestDoc",
|
|
540
|
+
fields: ["*"],
|
|
541
|
+
});
|
|
542
|
+
const subscription = subscriptionManager.getSubscription(result.subscriptionId)!;
|
|
543
|
+
(filters.matchesFilters as any).mockReturnValue(true);
|
|
544
|
+
|
|
545
|
+
mockDb.backfill
|
|
546
|
+
.mockResolvedValueOnce({
|
|
547
|
+
rows: [{ name: "doc4", doctype: "TestDoc", modified: "2024-01-02T10:00:00" }],
|
|
548
|
+
deleted: [],
|
|
549
|
+
checkpoint: "2024-01-02T10:00:00|doc4",
|
|
550
|
+
has_more: true,
|
|
551
|
+
})
|
|
552
|
+
.mockResolvedValueOnce({
|
|
553
|
+
rows: [{ name: "doc5", doctype: "TestDoc", modified: "2024-01-02T11:00:00" }],
|
|
554
|
+
deleted: [{ name: "doc2" }],
|
|
555
|
+
checkpoint: "2024-01-02T11:00:00|doc5",
|
|
556
|
+
has_more: true,
|
|
557
|
+
})
|
|
558
|
+
.mockResolvedValueOnce({
|
|
559
|
+
rows: [],
|
|
560
|
+
deleted: [],
|
|
561
|
+
checkpoint: "2024-01-02T11:00:00|doc5",
|
|
562
|
+
has_more: false,
|
|
563
|
+
});
|
|
564
|
+
|
|
565
|
+
await subscriptionManager.backfillSub(subscription);
|
|
566
|
+
|
|
567
|
+
expect(mockDb.backfill).toHaveBeenCalledTimes(3);
|
|
568
|
+
// Each follow-up call resumes from the cursor of the previous page
|
|
569
|
+
expect(mockDb.backfill.mock.calls[1][0].modifiedAfter).toBe("2024-01-02T10:00:00|doc4");
|
|
570
|
+
expect(mockDb.backfill.mock.calls[2][0].modifiedAfter).toBe("2024-01-02T11:00:00|doc5");
|
|
571
|
+
// All drained pages are applied: rows joined, tombstone evicted
|
|
572
|
+
expect(subscription.docIds).toEqual(expect.arrayContaining(["doc4", "doc5"]));
|
|
573
|
+
expect(subscription.tombstones?.has("doc2")).toBe(true);
|
|
574
|
+
expect(subscription.checkpoint).toBe("2024-01-02T11:00:00|doc5");
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
it("should stop draining at the configured page cap", async () => {
|
|
578
|
+
subscriptionManager = new SubscriptionManager(mockDb, mockNormalizedCache, {
|
|
579
|
+
backfillMaxPages: 2,
|
|
580
|
+
});
|
|
581
|
+
const result = await subscriptionManager.subscribe({
|
|
582
|
+
doctype: "TestDoc",
|
|
583
|
+
fields: ["*"],
|
|
584
|
+
});
|
|
585
|
+
const subscription = subscriptionManager.getSubscription(result.subscriptionId)!;
|
|
586
|
+
|
|
587
|
+
let page = 0;
|
|
588
|
+
mockDb.backfill.mockImplementation(async () => {
|
|
589
|
+
page++;
|
|
590
|
+
return {
|
|
591
|
+
rows: [{ name: `doc-${page}`, doctype: "TestDoc", modified: `2024-01-0${page}` }],
|
|
592
|
+
deleted: [],
|
|
593
|
+
checkpoint: `2024-01-0${page}|doc-${page}`,
|
|
594
|
+
has_more: true,
|
|
595
|
+
};
|
|
596
|
+
});
|
|
597
|
+
|
|
598
|
+
await subscriptionManager.backfillSub(subscription);
|
|
599
|
+
|
|
600
|
+
expect(mockDb.backfill).toHaveBeenCalledTimes(2);
|
|
601
|
+
});
|
|
602
|
+
|
|
603
|
+
it("should plumb backfillMaxPages into the BackfillManager drain path", () => {
|
|
604
|
+
subscriptionManager = new SubscriptionManager(mockDb, mockNormalizedCache, {
|
|
605
|
+
backfillMaxPages: 7,
|
|
606
|
+
});
|
|
607
|
+
|
|
608
|
+
// One knob bounds both drain paths: the option must reach the
|
|
609
|
+
// BackfillManager (incrementalBackfill) as its maxPages cap.
|
|
610
|
+
const backfillManager = (subscriptionManager as any).backfillManager;
|
|
611
|
+
expect(backfillManager.options.maxPages).toBe(7);
|
|
612
|
+
});
|
|
613
|
+
|
|
614
|
+
it("should not drain when the server omits has_more (legacy servers)", async () => {
|
|
615
|
+
const result = await subscriptionManager.subscribe({
|
|
616
|
+
doctype: "TestDoc",
|
|
617
|
+
fields: ["*"],
|
|
618
|
+
});
|
|
619
|
+
const subscription = subscriptionManager.getSubscription(result.subscriptionId)!;
|
|
620
|
+
|
|
621
|
+
mockDb.backfill.mockResolvedValue({
|
|
622
|
+
rows: [{ name: "doc4", doctype: "TestDoc", modified: "2024-01-02T10:00:00" }],
|
|
623
|
+
checkpoint: "2024-01-02T10:00:00",
|
|
624
|
+
});
|
|
625
|
+
|
|
626
|
+
await subscriptionManager.backfillSub(subscription);
|
|
627
|
+
|
|
628
|
+
expect(mockDb.backfill).toHaveBeenCalledTimes(1);
|
|
629
|
+
});
|
|
630
|
+
|
|
537
631
|
it("should reconcile membership with filters", async () => {
|
|
538
632
|
const result = await subscriptionManager.subscribe({
|
|
539
633
|
doctype: "TestDoc",
|