@multiplatform.one/frappe 6.1.0 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +10 -2
- package/dist/esm/util.mjs.map +1 -1
- package/dist/esm/util.native.js +15 -2
- 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 +10 -2
- 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 +445 -37
- package/src/frappeReactLiveQueryGc.spec.ts +320 -0
- package/src/frappeReactNative.spec.ts +65 -0
- package/src/index.ts +10 -9
- package/src/pacer.ts +1 -1
- 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 +34 -7
- 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/README.md
CHANGED
|
@@ -8,12 +8,16 @@ Real-time sync for Frappe with **TanStack DB integration**, **virtual pagination
|
|
|
8
8
|
|
|
9
9
|
Comprehensive technical reference containing architecture, implementation details, server specification, and production deployment.
|
|
10
10
|
|
|
11
|
+
### Live protocol spec (of record)
|
|
12
|
+
|
|
13
|
+
The wire protocol — change stream ordering, compound cursors, tombstones, idempotency, and Keycloak auth — is specified in `agent-os/specs/2026-08-12-frappe-live-protocol/spec.md` in the [multiplatform.one repo](https://gitlab.com/bitspur/frappe/multiplatform.one). Where this README and the spec disagree, the spec wins.
|
|
14
|
+
|
|
11
15
|
## Core Features
|
|
12
16
|
|
|
13
17
|
### Virtual Pagination
|
|
14
18
|
|
|
15
19
|
- Progressive cache with page islands for efficient large datasets
|
|
16
|
-
- Cursor-based pagination via `
|
|
20
|
+
- Cursor-based pagination via the Frappe Live extension app (`live`)
|
|
17
21
|
- Opt-in via `progressive: true` on subscription queries
|
|
18
22
|
- Automatic consistency across pages
|
|
19
23
|
|
|
@@ -21,7 +25,7 @@ Comprehensive technical reference containing architecture, implementation detail
|
|
|
21
25
|
|
|
22
26
|
- **Version checking** with 409/412 errors (OCC via `If-Match` header)
|
|
23
27
|
- **Three-way merge** conflict resolution with field-level strategies
|
|
24
|
-
- **Idempotency** via `Idempotency-Key` headers
|
|
28
|
+
- **Idempotency** via `Idempotency-Key` headers — the server dedupes replayed create/delete requests (24h retention)
|
|
25
29
|
- **CRDT-like field merging** (sum, max, min, union-set, custom)
|
|
26
30
|
|
|
27
31
|
### Offline Support
|
|
@@ -53,15 +57,33 @@ Comprehensive technical reference containing architecture, implementation detail
|
|
|
53
57
|
npm install @multiplatform.one/frappe
|
|
54
58
|
```
|
|
55
59
|
|
|
60
|
+
## Authentication
|
|
61
|
+
|
|
62
|
+
`auth.token` accepts a string **or an async getter** — pass a getter so rotated tokens are resolved lazily per request (e.g. a Keycloak access token from `@multiplatform.one/keycloak`'s `getKeycloakBearerToken()`):
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
import { AuthType, FrappeApp } from "@multiplatform.one/frappe";
|
|
66
|
+
|
|
67
|
+
const app = new FrappeApp("https://your-instance.frappe.cloud", {
|
|
68
|
+
useToken: true,
|
|
69
|
+
type: AuthType.Bearer,
|
|
70
|
+
token: async () => (await getToken()) ?? "", // empty = guest, no bare header
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The same `Authorization` header authenticates the realtime socket. Browsers cannot set headers on a WebSocket handshake, so on web the client handshakes over Socket.IO polling (the XHR carries the header) and upgrades to websocket afterwards; Node/native attach it to the websocket directly. On `disconnect`, `connect_error`, and every reconnect attempt the token getter is re-resolved into the live socket manager, so subscriptions and rooms survive token expiry mid-session (`updateAuth()` covers explicit rotation). With Keycloak, the bench validates the JWT via the `frappe_keycloak` app — REST and socket connections take the same validation path.
|
|
75
|
+
|
|
56
76
|
## React Hooks
|
|
57
77
|
|
|
58
78
|
### When to Use What
|
|
59
79
|
|
|
60
|
-
| Hook | Use Case
|
|
61
|
-
| ----------------------- |
|
|
62
|
-
| `useFrappeCollection` | Creates a TanStack DB collection backed by a Frappe doctype
|
|
63
|
-
| `useLiveQuery` | Reactive TanStack DB query with `.where()`, `.orderBy()`, etc.
|
|
64
|
-
| `useFrappeInfiniteList` | Infinite scroll with full sync (realtime, offline, CDC)
|
|
80
|
+
| Hook | Use Case | Updates |
|
|
81
|
+
| ----------------------- | ---------------------------------------------------------------------------- | --------------------- |
|
|
82
|
+
| `useFrappeCollection` | Creates a TanStack DB collection backed by a Frappe doctype | Auto-updates |
|
|
83
|
+
| `useLiveQuery` | Reactive TanStack DB query with `.where()`, `.orderBy()`, etc. | Auto-updates |
|
|
84
|
+
| `useFrappeInfiniteList` | Infinite scroll with full sync (realtime, offline, CDC) | Auto-updates |
|
|
85
|
+
| `useLinkSearch` | Debounced backend link search (`frappe.desk.search.search_link`) for pickers | Per query (debounced) |
|
|
86
|
+
| `useLinkTitle` | Resolve a link value's display title (`get_link_title`, session-cached) | On value change |
|
|
65
87
|
|
|
66
88
|
### useFrappeCollection + useLiveQuery
|
|
67
89
|
|
|
@@ -204,14 +226,17 @@ const sync = new SyncModule(db, realtime, {
|
|
|
204
226
|
|
|
205
227
|
## Server Requirements
|
|
206
228
|
|
|
207
|
-
The SDK works with standard Frappe REST API for reads and uses the
|
|
229
|
+
The SDK works with standard Frappe REST API for reads and uses the Frappe Live extension app (`live`, endpoints `live.live.api.*`) for enhanced write operations. The extension provides:
|
|
208
230
|
|
|
209
|
-
- **Idempotent create/delete**
|
|
210
|
-
- **OCC update** via `If-Match` header (409/412 on version mismatch)
|
|
231
|
+
- **Idempotent create/delete** — the server records each successful `create_doc`/`delete_doc` outcome against its `Idempotency-Key` (scoped per user and per endpoint, 24h TTL) and a retry with the same key returns the recorded outcome instead of re-executing. The SDK sends its `client_mutation_id` as this header on every mutation.
|
|
232
|
+
- **OCC update** via `If-Match` header (409/412 on version mismatch) — update retries are guarded by version checking, not idempotency dedup
|
|
211
233
|
- **Cursor-based pagination** via `get_list_with_cursor`
|
|
212
234
|
- **Batch mutations** via `batch_mutations`
|
|
213
|
-
- **CDC endpoints** via `list_since` and `backfill`
|
|
214
|
-
- **Tombstone
|
|
235
|
+
- **CDC endpoints** via `list_since` and `backfill` — one merged change stream of rows + deletions, ordered by an opaque compound `"timestamp|name"` checkpoint that never advances past an undelivered change
|
|
236
|
+
- **Tombstone feed** — names-only deletions sourced from frappe core's `Deleted Document` rows (30-day retention; older cursors full-refresh) plus a `doc_deleted` realtime event after the deleting transaction commits
|
|
237
|
+
- **Permission-checked reads** — the change feed goes through frappe's permission engine; unauthorized doctypes raise instead of leaking rows
|
|
238
|
+
|
|
239
|
+
For Keycloak bearer auth, the bench additionally needs the `frappe_keycloak` app (JWT validation + role mapping on REST and socket connections).
|
|
215
240
|
|
|
216
241
|
## Production Configuration
|
|
217
242
|
|
|
@@ -219,6 +244,7 @@ The SDK works with standard Frappe REST API for reads and uses the `frappe_live`
|
|
|
219
244
|
const sync = new SyncModule(db, realtime, {
|
|
220
245
|
persistKey: "my-app", // Enable IndexedDB persistence
|
|
221
246
|
cdcInterval: 30000, // Periodic CDC every 30s (safety net)
|
|
247
|
+
backfillMaxPages: 20, // Max CDC pages drained per backfill (bounds both drain paths)
|
|
222
248
|
maxCacheSize: 5000, // LRU eviction threshold
|
|
223
249
|
mutationTTL: 24 * 60 * 60 * 1000, // 24hr mutation journal TTL
|
|
224
250
|
enableBatching: false, // Opt-in mutation batching
|
package/dist/cjs/auth.cjs
CHANGED
|
@@ -26,10 +26,10 @@ __export(auth_exports, {
|
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(auth_exports);
|
|
28
28
|
class AuthModule {
|
|
29
|
+
http;
|
|
29
30
|
constructor(http) {
|
|
30
31
|
this.http = http;
|
|
31
32
|
}
|
|
32
|
-
http;
|
|
33
33
|
async loginWithUsernamePassword(input) {
|
|
34
34
|
return this.http.post("/api/method/login", {
|
|
35
35
|
usr: input.username,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","auth_exports","__export","AuthModule","module","exports","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj"],"sources":["../../src/auth.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,YAAA;AAAAC,QAAA,CAAAD,YAAA;EAAAE,UAAA,EAAAA,CAAA,KAAAA;AAAA;AAEOC,MAAM,CAAAC,OAAA,GAAWT,YAAA,CAAAK,YAAA;AAAA,
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","auth_exports","__export","AuthModule","module","exports","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj"],"sources":["../../src/auth.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,YAAA;AAAAC,QAAA,CAAAD,YAAA;EAAAE,UAAA,EAAAA,CAAA,KAAAA;AAAA;AAEOC,MAAM,CAAAC,OAAA,GAAWT,YAAA,CAAAK,YAAA;AAAA,SACLK,kBAAAC,QAAA,EAAAC,WAAA;EAEjB,MAAAD,QAAY,YAAkBC,WAAA;IAC5B,MAAK,IAAAC,SAAO;EACd;AAAA;AAGE,SAAAC,iBAAsBA,CAAAC,MAAA,EAAAC,KAAA;EAAqB,KACzC,IAAKC,CAAA,MAAMA,CAAA,GAAAD,KAAA,CAAAE,MAAA,EAAAD,CAAA;IAAA,IACXE,UAAW,GAAAH,KAAA,CAAAC,CAAA;IACbE,UAAC,CAAAC,UAAA,GAAAD,UAAA,CAAAC,UAAA;IACHD,UAAA,CAAAE,YAAA;IAEA,IAAM,WAAAF,UAAmC,EAAAA,UAAA,CAAAG,QAAA;IACvCC,MAAA,CAAAC,cACc,CAAAT,MAA8B,EAAAI,UAAA,CAAAM,GAAA,EAAAN,UAAA;EAG9C;AAAA;AAGE,SAAAO,aAAiBA,CAAAd,WAAK,EAAAe,UAAoB,EAAAC,WAAA;EAC5C,IAAAD,UAAA,EAAAb,iBAAA,CAAAF,WAAA,CAAAiB,SAAA,EAAAF,UAAA;EAEA,IAAAC,WAAM,EAAAd,iBAA8B,CAAAF,WAAA,EAAAgB,WAAA;EAClC,OAAAhB,WAAY;AAAsE;AAC1E,SACPkB,iBAAAC,GAAA,EAAAN,GAAA,EAAArB,KAAA;EACH,IAAAqB,GAAA,IAAAM,GAAA;IACFR,MAAA,CAAAC,cAAA,CAAAO,GAAA,EAAAN,GAAA","ignoreList":[]}
|
package/dist/cjs/call.cjs
CHANGED
|
@@ -26,10 +26,10 @@ __export(call_exports, {
|
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(call_exports);
|
|
28
28
|
class CallModule {
|
|
29
|
+
http;
|
|
29
30
|
constructor(http) {
|
|
30
31
|
this.http = http;
|
|
31
32
|
}
|
|
32
|
-
http;
|
|
33
33
|
get(method, params) {
|
|
34
34
|
return this.http.get(`/api/method/${method}`, params);
|
|
35
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","call_exports","__export","CallModule","module","exports","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype"],"sources":["../../src/call.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,YAAA;AAAAC,QAAA,CAAAD,YAAA;EAAAE,UAAA,EAAAA,CAAA,KAAAA;AAAA;AAEOC,MAAM,CAAAC,OAAA,GAAWT,YAAA,CAAAK,YAAA;AAAA,
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","call_exports","__export","CallModule","module","exports","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype"],"sources":["../../src/call.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,YAAA;AAAAC,QAAA,CAAAD,YAAA;EAAAE,UAAA,EAAAA,CAAA,KAAAA;AAAA;AAEOC,MAAM,CAAAC,OAAA,GAAWT,YAAA,CAAAK,YAAA;AAAA,SACLK,kBAAAC,QAAA,EAAAC,WAAA;EAEjB,MAAAD,QAAY,YAAkBC,WAAA;IAC5B,MAAK,IAAAC,SAAO;EACd;AAAA;AAGE,SAAAC,iBAAwBA,CAAAC,MAAA,EAAAC,KAAe;EACzC,SAAAC,CAAA,MAAAA,CAAA,GAAAD,KAAA,CAAAE,MAAA,EAAAD,CAAA;IAEA,IAAQE,UAAgB,GAAYH,KAAA,CAAAC,CAAA;IAClCE,UAAO,CAAAC,UAAU,GAAQD,UAAA,CAAAC,UAAqB,IAAI,KAAI;IACxDD,UAAA,CAAAE,YAAA;IAEA,IAAO,OAAgB,IAAAF,UAAY,EAAAA,UAAA,CAAAG,QAAA;IACjCC,MAAA,CAAOC,cAAiB,CAAAT,MAAA,EAAAI,UAAe,CAAAM,GAAM,EAAIN,UAAI;EACvD;AAAA;AAGE,SAAAO,aAAiBA,CAAAd,WAAU,EAAAe,UAAe,EAAAC,WAAc;EAC1D,IAAAD,UAAA,EAAAb,iBAAA,CAAAF,WAAA,CAAAiB,SAAA,EAAAF,UAAA;EACF,IAAAC,WAAA,EAAAd,iBAAA,CAAAF,WAAA,EAAAgB,WAAA","ignoreList":[]}
|
package/dist/cjs/collection.cjs
CHANGED
|
@@ -36,7 +36,8 @@ function frappeCollectionOptions(doctype, config) {
|
|
|
36
36
|
fields,
|
|
37
37
|
filters,
|
|
38
38
|
orderBy,
|
|
39
|
-
limit
|
|
39
|
+
limit,
|
|
40
|
+
onSyncError
|
|
40
41
|
} = config;
|
|
41
42
|
const syncFn = params => {
|
|
42
43
|
const {
|
|
@@ -48,6 +49,7 @@ function frappeCollectionOptions(doctype, config) {
|
|
|
48
49
|
let subscriptionId;
|
|
49
50
|
let storeUnsubscribe;
|
|
50
51
|
let lastKnownNames = /* @__PURE__ */new Set();
|
|
52
|
+
let cancelled = false;
|
|
51
53
|
async function initSync() {
|
|
52
54
|
try {
|
|
53
55
|
const query = {
|
|
@@ -58,6 +60,10 @@ function frappeCollectionOptions(doctype, config) {
|
|
|
58
60
|
limit
|
|
59
61
|
};
|
|
60
62
|
const result = await syncModule.subscribe(query);
|
|
63
|
+
if (cancelled) {
|
|
64
|
+
syncModule.unsubscribe(result.subscriptionId);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
61
67
|
subscriptionId = result.subscriptionId;
|
|
62
68
|
const initialDocs = syncModule.getDocsForSubscription(subscriptionId);
|
|
63
69
|
if (initialDocs.length > 0) {
|
|
@@ -104,13 +110,16 @@ function frappeCollectionOptions(doctype, config) {
|
|
|
104
110
|
lastKnownNames = currentNames;
|
|
105
111
|
});
|
|
106
112
|
} catch (error) {
|
|
113
|
+
if (cancelled) return;
|
|
107
114
|
console.error(`[frappe-collection] Initial sync failed for ${doctype}:`, error);
|
|
115
|
+
onSyncError?.(error);
|
|
108
116
|
} finally {
|
|
109
|
-
markReady();
|
|
117
|
+
if (!cancelled) markReady();
|
|
110
118
|
}
|
|
111
119
|
}
|
|
112
120
|
initSync();
|
|
113
121
|
return () => {
|
|
122
|
+
cancelled = true;
|
|
114
123
|
if (storeUnsubscribe) {
|
|
115
124
|
storeUnsubscribe();
|
|
116
125
|
storeUnsubscribe = void 0;
|
|
@@ -195,6 +204,7 @@ function fixtureCollectionOptions(doctype, config) {
|
|
|
195
204
|
commit,
|
|
196
205
|
markReady
|
|
197
206
|
} = params;
|
|
207
|
+
let cancelled = false;
|
|
198
208
|
async function initSync() {
|
|
199
209
|
try {
|
|
200
210
|
const orderByForFixture = orderBy && !Array.isArray(orderBy) ? {
|
|
@@ -211,6 +221,7 @@ function fixtureCollectionOptions(doctype, config) {
|
|
|
211
221
|
limitStart,
|
|
212
222
|
limit
|
|
213
223
|
});
|
|
224
|
+
if (cancelled) return;
|
|
214
225
|
if (docs.length > 0) {
|
|
215
226
|
begin();
|
|
216
227
|
for (const doc of docs) {
|
|
@@ -226,13 +237,16 @@ function fixtureCollectionOptions(doctype, config) {
|
|
|
226
237
|
commit();
|
|
227
238
|
}
|
|
228
239
|
} catch (error) {
|
|
240
|
+
if (cancelled) return;
|
|
229
241
|
console.error(`[frappe-collection] Fixture sync failed for ${doctype}:`, error);
|
|
230
242
|
} finally {
|
|
231
|
-
markReady();
|
|
243
|
+
if (!cancelled) markReady();
|
|
232
244
|
}
|
|
233
245
|
}
|
|
234
246
|
initSync();
|
|
235
|
-
return () => {
|
|
247
|
+
return () => {
|
|
248
|
+
cancelled = true;
|
|
249
|
+
};
|
|
236
250
|
};
|
|
237
251
|
return {
|
|
238
252
|
id: config.id ?? doctype,
|
|
@@ -39,7 +39,8 @@ function frappeCollectionOptions(doctype, config) {
|
|
|
39
39
|
fields,
|
|
40
40
|
filters,
|
|
41
41
|
orderBy,
|
|
42
|
-
limit
|
|
42
|
+
limit,
|
|
43
|
+
onSyncError
|
|
43
44
|
} = config;
|
|
44
45
|
var syncFn = function syncFn2(params) {
|
|
45
46
|
var {
|
|
@@ -51,6 +52,7 @@ function frappeCollectionOptions(doctype, config) {
|
|
|
51
52
|
var subscriptionId;
|
|
52
53
|
var storeUnsubscribe;
|
|
53
54
|
var lastKnownNames = /* @__PURE__ */new Set();
|
|
55
|
+
var cancelled = false;
|
|
54
56
|
async function initSync() {
|
|
55
57
|
try {
|
|
56
58
|
var query = {
|
|
@@ -61,6 +63,10 @@ function frappeCollectionOptions(doctype, config) {
|
|
|
61
63
|
limit
|
|
62
64
|
};
|
|
63
65
|
var result = await syncModule.subscribe(query);
|
|
66
|
+
if (cancelled) {
|
|
67
|
+
syncModule.unsubscribe(result.subscriptionId);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
64
70
|
subscriptionId = result.subscriptionId;
|
|
65
71
|
var initialDocs = syncModule.getDocsForSubscription(subscriptionId);
|
|
66
72
|
if (initialDocs.length > 0) {
|
|
@@ -166,13 +172,16 @@ function frappeCollectionOptions(doctype, config) {
|
|
|
166
172
|
lastKnownNames = currentNames;
|
|
167
173
|
});
|
|
168
174
|
} catch (error) {
|
|
175
|
+
if (cancelled) return;
|
|
169
176
|
console.error(`[frappe-collection] Initial sync failed for ${doctype}:`, error);
|
|
177
|
+
onSyncError === null || onSyncError === void 0 ? void 0 : onSyncError(error);
|
|
170
178
|
} finally {
|
|
171
|
-
markReady();
|
|
179
|
+
if (!cancelled) markReady();
|
|
172
180
|
}
|
|
173
181
|
}
|
|
174
182
|
initSync();
|
|
175
183
|
return function () {
|
|
184
|
+
cancelled = true;
|
|
176
185
|
if (storeUnsubscribe) {
|
|
177
186
|
storeUnsubscribe();
|
|
178
187
|
storeUnsubscribe = void 0;
|
|
@@ -326,6 +335,7 @@ function fixtureCollectionOptions(doctype, config) {
|
|
|
326
335
|
commit,
|
|
327
336
|
markReady
|
|
328
337
|
} = params;
|
|
338
|
+
var cancelled = false;
|
|
329
339
|
async function initSync() {
|
|
330
340
|
try {
|
|
331
341
|
var orderByForFixture = orderBy && !Array.isArray(orderBy) ? {
|
|
@@ -344,6 +354,7 @@ function fixtureCollectionOptions(doctype, config) {
|
|
|
344
354
|
limitStart,
|
|
345
355
|
limit
|
|
346
356
|
});
|
|
357
|
+
if (cancelled) return;
|
|
347
358
|
if (docs.length > 0) {
|
|
348
359
|
begin();
|
|
349
360
|
var _iteratorNormalCompletion = true,
|
|
@@ -378,13 +389,16 @@ function fixtureCollectionOptions(doctype, config) {
|
|
|
378
389
|
commit();
|
|
379
390
|
}
|
|
380
391
|
} catch (error) {
|
|
392
|
+
if (cancelled) return;
|
|
381
393
|
console.error(`[frappe-collection] Fixture sync failed for ${doctype}:`, error);
|
|
382
394
|
} finally {
|
|
383
|
-
markReady();
|
|
395
|
+
if (!cancelled) markReady();
|
|
384
396
|
}
|
|
385
397
|
}
|
|
386
398
|
initSync();
|
|
387
|
-
return function () {
|
|
399
|
+
return function () {
|
|
400
|
+
cancelled = true;
|
|
401
|
+
};
|
|
388
402
|
};
|
|
389
403
|
return {
|
|
390
404
|
id: (_config_id = config.id) !== null && _config_id !== void 0 ? _config_id : doctype,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","collection_exports","__export","createFixtureCollection","createFrappeCollection","fixtureCollectionOptions","frappeCollectionOptions","module","exports","import_db","require","import_types","doctype","config","_config_id","sync","syncModule","fields","filters","orderBy","limit","syncFn","syncFn2","params","begin","write","commit","markReady","subscriptionId","storeUnsubscribe","lastKnownNames","Set","initSync","query","result","subscribe","initialDocs","getDocsForSubscription","length","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","doc","type","add","name","err","return","subscribeStore","currentDocs","currentNames","map","d","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","doc2","has","_iteratorNormalCompletion1","_didIteratorError1","_iteratorError1","_iterator1","_step1","error","console","
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","collection_exports","__export","createFixtureCollection","createFrappeCollection","fixtureCollectionOptions","frappeCollectionOptions","module","exports","import_db","require","import_types","doctype","config","_config_id","sync","syncModule","fields","filters","orderBy","limit","onSyncError","syncFn","syncFn2","params","begin","write","commit","markReady","subscriptionId","storeUnsubscribe","lastKnownNames","Set","cancelled","initSync","query","result","subscribe","unsubscribe","initialDocs","getDocsForSubscription","length","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","doc","type","add","name","err","return","subscribeStore","currentDocs","currentNames","map","d","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","doc2","has","_iteratorNormalCompletion1","_didIteratorError1","_iteratorError1","_iterator1","_step1","error","console","id","getKey","onInsert","param","transaction","mutations","mutation","_ref","_crypto_randomUUID","_crypto","modified","mutate","mutationId","crypto","randomUUID","call","Math","random","toString","substring","operation","Operation","Create"],"sources":["../../src/collection.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/cjs/core/http.cjs
CHANGED
|
@@ -42,7 +42,22 @@ const defaultRetryConfig = {
|
|
|
42
42
|
retryOnNetworkError: true,
|
|
43
43
|
retryStatusCodes: [408, 429, 500, 502, 503, 504]
|
|
44
44
|
};
|
|
45
|
+
function isAbortError(err, signal) {
|
|
46
|
+
if (signal?.aborted) return true;
|
|
47
|
+
return err instanceof Error && err.name === "AbortError";
|
|
48
|
+
}
|
|
45
49
|
class HttpClient {
|
|
50
|
+
retryConfig;
|
|
51
|
+
// Language preference for Accept-Language header (used in SSR / React Native)
|
|
52
|
+
_language;
|
|
53
|
+
/** Server-bootstrapped CSRF token for React Native cookie auth (see ensureNativeCsrfToken). */
|
|
54
|
+
csrfToken;
|
|
55
|
+
/** True once a native CSRF bootstrap attempt completed (even if it yielded no token). */
|
|
56
|
+
csrfBootstrapDone = false;
|
|
57
|
+
/** In-flight CSRF bootstrap, deduped across concurrent mutating requests. */
|
|
58
|
+
csrfBootstrap;
|
|
59
|
+
baseURL;
|
|
60
|
+
auth;
|
|
46
61
|
constructor(baseURL, auth, retryConfig) {
|
|
47
62
|
this.baseURL = baseURL;
|
|
48
63
|
this.auth = auth;
|
|
@@ -51,11 +66,6 @@ class HttpClient {
|
|
|
51
66
|
...retryConfig
|
|
52
67
|
};
|
|
53
68
|
}
|
|
54
|
-
baseURL;
|
|
55
|
-
auth;
|
|
56
|
-
retryConfig;
|
|
57
|
-
// Language preference for Accept-Language header (used in SSR / React Native)
|
|
58
|
-
_language;
|
|
59
69
|
/** Set language preference for Accept-Language header on all requests. */
|
|
60
70
|
setLanguage(lang) {
|
|
61
71
|
this._language = lang;
|
|
@@ -76,6 +86,71 @@ class HttpClient {
|
|
|
76
86
|
value: lang
|
|
77
87
|
});
|
|
78
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* React Native cookie-auth CSRF bootstrap.
|
|
91
|
+
*
|
|
92
|
+
* RN's fetch sends the OS cookie jar (so cookie-auth sessions work), but
|
|
93
|
+
* JS cannot READ those cookies — the platform `getCookie` shim is an
|
|
94
|
+
* in-memory map that never sees the `sid`/CSRF cookies — so mutating
|
|
95
|
+
* requests would 400 once the session has a CSRF token. Fetch the token
|
|
96
|
+
* from the server instead and cache it per client:
|
|
97
|
+
*
|
|
98
|
+
* 1. `GET /api/method/frappe.sessions.get_csrf_token` — whitelisted on
|
|
99
|
+
* newer frappe versions; cheap JSON round-trip.
|
|
100
|
+
* 2. Fallback: `GET /app` and parse the `frappe.csrf_token = "…"` boot
|
|
101
|
+
* script — works on every frappe (this repo's bench does NOT
|
|
102
|
+
* whitelist the RPC above) and also generates the token server-side
|
|
103
|
+
* when the session lacks one.
|
|
104
|
+
*
|
|
105
|
+
* Resolves undefined when neither source works (e.g. website-only session
|
|
106
|
+
* without desk access); requests then proceed without the header, which
|
|
107
|
+
* frappe accepts for sessions that have no CSRF token yet. The cache is
|
|
108
|
+
* dropped on auth change and on a 400 from a mutating request so a
|
|
109
|
+
* rotated session re-bootstraps.
|
|
110
|
+
*/
|
|
111
|
+
async ensureNativeCsrfToken() {
|
|
112
|
+
if (this.csrfBootstrapDone) return this.csrfToken;
|
|
113
|
+
if (!this.csrfBootstrap) {
|
|
114
|
+
this.csrfBootstrap = this.fetchNativeCsrfToken().then(token => {
|
|
115
|
+
this.csrfToken = token;
|
|
116
|
+
this.csrfBootstrapDone = true;
|
|
117
|
+
}).finally(() => {
|
|
118
|
+
this.csrfBootstrap = void 0;
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
await this.csrfBootstrap;
|
|
122
|
+
return this.csrfToken;
|
|
123
|
+
}
|
|
124
|
+
async fetchNativeCsrfToken() {
|
|
125
|
+
try {
|
|
126
|
+
const rpcUrl = new URL("/api/method/frappe.sessions.get_csrf_token", this.baseURL).toString();
|
|
127
|
+
const res = await fetch(rpcUrl, {
|
|
128
|
+
method: "GET",
|
|
129
|
+
credentials: "include"
|
|
130
|
+
});
|
|
131
|
+
if (res.ok) {
|
|
132
|
+
const payload = await res.json();
|
|
133
|
+
if (typeof payload?.message === "string" && payload.message) return payload.message;
|
|
134
|
+
}
|
|
135
|
+
} catch {}
|
|
136
|
+
try {
|
|
137
|
+
const appUrl = new URL("/app", this.baseURL).toString();
|
|
138
|
+
const res = await fetch(appUrl, {
|
|
139
|
+
method: "GET",
|
|
140
|
+
credentials: "include"
|
|
141
|
+
});
|
|
142
|
+
if (res.ok) {
|
|
143
|
+
const html = await res.text();
|
|
144
|
+
const match = html.match(/frappe\.csrf_token\s*=\s*"([^"]+)"/);
|
|
145
|
+
if (match?.[1]) return match[1];
|
|
146
|
+
}
|
|
147
|
+
} catch {}
|
|
148
|
+
return void 0;
|
|
149
|
+
}
|
|
150
|
+
invalidateNativeCsrfToken() {
|
|
151
|
+
this.csrfToken = void 0;
|
|
152
|
+
this.csrfBootstrapDone = false;
|
|
153
|
+
}
|
|
79
154
|
async getAuthHeaders() {
|
|
80
155
|
if (!this.auth?.useToken) return {};
|
|
81
156
|
const raw = typeof this.auth.token === "function" ? await this.auth.token() : this.auth?.token;
|
|
@@ -165,7 +240,8 @@ class HttpClient {
|
|
|
165
240
|
headers.set("Accept-Language", lang);
|
|
166
241
|
}
|
|
167
242
|
if (!this.auth?.useToken && (0, import_util.isBrowser)() && method !== import_types.HttpMethod.Get) {
|
|
168
|
-
|
|
243
|
+
let csrf = (0, import_platform.getCookie)("frappe-csrf-token") || (0, import_platform.getCookie)("csrf_token") || globalThis.frappe?.csrf_token;
|
|
244
|
+
if (!csrf && import_platform.isNative) csrf = await this.ensureNativeCsrfToken();
|
|
169
245
|
if (csrf) headers.set("X-Frappe-CSRF-Token", csrf);
|
|
170
246
|
}
|
|
171
247
|
const makeRequest = () => {
|
|
@@ -173,7 +249,8 @@ class HttpClient {
|
|
|
173
249
|
method,
|
|
174
250
|
headers,
|
|
175
251
|
credentials: this.auth?.useToken ? "omit" : "include",
|
|
176
|
-
body
|
|
252
|
+
body,
|
|
253
|
+
signal: request?.signal
|
|
177
254
|
});
|
|
178
255
|
};
|
|
179
256
|
let lastError;
|
|
@@ -186,6 +263,9 @@ class HttpClient {
|
|
|
186
263
|
const payload2 = contentType3?.includes("application/json") ? await res.json() : await res.text();
|
|
187
264
|
const message = payload2 && (payload2.message || payload2.exc || payload2._server_messages) || res.statusText;
|
|
188
265
|
const err = new import_types.FrappeError(message, res.status, payload2);
|
|
266
|
+
if (import_platform.isNative && res.status === 400 && !this.auth?.useToken && method !== import_types.HttpMethod.Get) {
|
|
267
|
+
this.invalidateNativeCsrfToken();
|
|
268
|
+
}
|
|
189
269
|
if (this.shouldRetryError(err, attempt)) {
|
|
190
270
|
lastError = err;
|
|
191
271
|
attempt++;
|
|
@@ -205,6 +285,7 @@ class HttpClient {
|
|
|
205
285
|
_res: res
|
|
206
286
|
};
|
|
207
287
|
} catch (err) {
|
|
288
|
+
if (isAbortError(err, request?.signal)) throw err;
|
|
208
289
|
if (this.shouldRetryError(err, attempt)) {
|
|
209
290
|
lastError = err;
|
|
210
291
|
attempt++;
|
|
@@ -218,10 +299,11 @@ class HttpClient {
|
|
|
218
299
|
}
|
|
219
300
|
throw lastError;
|
|
220
301
|
}
|
|
221
|
-
get(path, params, headers) {
|
|
302
|
+
get(path, params, headers, signal) {
|
|
222
303
|
const qs = params ? `?${new URLSearchParams(normalizeParams(params)).toString()}` : "";
|
|
223
304
|
return this.request(import_types.HttpMethod.Get, `${path}${qs}`, {
|
|
224
|
-
headers
|
|
305
|
+
headers,
|
|
306
|
+
signal
|
|
225
307
|
});
|
|
226
308
|
}
|
|
227
309
|
post(path, body, headers) {
|
|
@@ -253,6 +335,7 @@ class HttpClient {
|
|
|
253
335
|
}
|
|
254
336
|
updateAuth(auth) {
|
|
255
337
|
this.auth = auth;
|
|
338
|
+
this.invalidateNativeCsrfToken();
|
|
256
339
|
}
|
|
257
340
|
}
|
|
258
341
|
function normalizeParams(params) {
|