@multiplatform.one/frappe 6.6.0 → 7.0.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 +1 -1
- package/dist/cjs/auth.native.js.map +1 -1
- package/dist/cjs/call.native.js.map +1 -1
- package/dist/cjs/collection.native.js.map +1 -1
- package/dist/cjs/common/types.native.js.map +1 -1
- package/dist/cjs/core/http.cjs +45 -1
- package/dist/cjs/core/http.native.js +72 -1
- package/dist/cjs/core/http.native.js.map +1 -1
- package/dist/cjs/core/types.native.js.map +1 -1
- package/dist/cjs/core/wire.native.js.map +1 -1
- package/dist/cjs/db.native.js.map +1 -1
- package/dist/cjs/devtools/FrappeDevtoolsPanel.native.js.map +1 -1
- package/dist/cjs/devtools/index.native.js.map +1 -1
- package/dist/cjs/devtools/plugin.native.js.map +1 -1
- package/dist/cjs/devtools/theme.native.js.map +1 -1
- package/dist/cjs/doctype.cjs +15 -2
- package/dist/cjs/doctype.native.js +22 -5
- package/dist/cjs/doctype.native.js.map +1 -1
- package/dist/cjs/file.native.js.map +1 -1
- package/dist/cjs/fixtureDb.native.js.map +1 -1
- package/dist/cjs/fixtures.native.js.map +1 -1
- package/dist/cjs/frappeApp.native.js.map +1 -1
- package/dist/cjs/frappeReact.cjs +55 -1
- package/dist/cjs/frappeReact.native.js +67 -2
- package/dist/cjs/frappeReact.native.js.map +1 -1
- package/dist/cjs/index.cjs +8 -0
- package/dist/cjs/index.native.js +10 -2
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/optimistic.cjs +32 -2
- package/dist/cjs/optimistic.native.js +34 -1
- package/dist/cjs/optimistic.native.js.map +1 -1
- package/dist/cjs/pacer.native.js.map +1 -1
- package/dist/cjs/plugin/index.native.js.map +1 -1
- package/dist/cjs/realtime.cjs +234 -11
- package/dist/cjs/realtime.native.js +368 -18
- package/dist/cjs/realtime.native.js.map +1 -1
- package/dist/cjs/sync/backfill.native.js.map +1 -1
- package/dist/cjs/sync/filters.native.js.map +1 -1
- package/dist/cjs/sync/index.cjs +45 -1
- package/dist/cjs/sync/index.native.js +71 -1
- package/dist/cjs/sync/index.native.js.map +1 -1
- package/dist/cjs/sync/merge.native.js.map +1 -1
- package/dist/cjs/sync/mutationEngine.cjs +51 -15
- package/dist/cjs/sync/mutationEngine.native.js +69 -16
- package/dist/cjs/sync/mutationEngine.native.js.map +1 -1
- package/dist/cjs/sync/mutationJournal.cjs +8 -0
- package/dist/cjs/sync/mutationJournal.native.js +10 -0
- package/dist/cjs/sync/mutationJournal.native.js.map +1 -1
- package/dist/cjs/sync/normalizedCache.native.js.map +1 -1
- package/dist/cjs/sync/persistence.native.js.map +1 -1
- package/dist/cjs/sync/realtime.native.js.map +1 -1
- package/dist/cjs/sync/rehydration.native.js.map +1 -1
- package/dist/cjs/sync/storage.native.js.map +1 -1
- package/dist/cjs/sync/subscriptionManager.native.js.map +1 -1
- package/dist/cjs/sync/types.native.js.map +1 -1
- package/dist/cjs/sync/virtualPageManager.native.js.map +1 -1
- package/dist/cjs/useLiveQuery.native.js.map +1 -1
- package/dist/cjs/util.native.js.map +1 -1
- package/dist/esm/auth.native.js.map +1 -1
- package/dist/esm/call.native.js.map +1 -1
- package/dist/esm/collection.native.js +1 -1
- package/dist/esm/collection.native.js.map +1 -1
- package/dist/esm/common/types.native.js.map +1 -1
- package/dist/esm/core/http.mjs +45 -2
- package/dist/esm/core/http.mjs.map +1 -1
- package/dist/esm/core/http.native.js +74 -4
- package/dist/esm/core/http.native.js.map +1 -1
- package/dist/esm/core/types.native.js.map +1 -1
- package/dist/esm/core/wire.native.js.map +1 -1
- package/dist/esm/db.native.js +1 -1
- package/dist/esm/db.native.js.map +1 -1
- package/dist/esm/devtools/FrappeDevtoolsPanel.native.js +2 -2
- package/dist/esm/devtools/FrappeDevtoolsPanel.native.js.map +1 -1
- package/dist/esm/devtools/index.native.js +2 -2
- package/dist/esm/devtools/index.native.js.map +1 -1
- package/dist/esm/devtools/plugin.native.js +1 -1
- package/dist/esm/devtools/plugin.native.js.map +1 -1
- package/dist/esm/devtools/theme.native.js.map +1 -1
- package/dist/esm/doctype.mjs +15 -2
- package/dist/esm/doctype.mjs.map +1 -1
- package/dist/esm/doctype.native.js +23 -6
- package/dist/esm/doctype.native.js.map +1 -1
- package/dist/esm/file.native.js.map +1 -1
- package/dist/esm/fixtureDb.native.js +1 -1
- package/dist/esm/fixtureDb.native.js.map +1 -1
- package/dist/esm/fixtures.native.js.map +1 -1
- package/dist/esm/frappeApp.native.js +7 -7
- package/dist/esm/frappeApp.native.js.map +1 -1
- package/dist/esm/frappeReact.mjs +55 -3
- package/dist/esm/frappeReact.mjs.map +1 -1
- package/dist/esm/frappeReact.native.js +73 -10
- package/dist/esm/frappeReact.native.js.map +1 -1
- package/dist/esm/index.mjs +5 -5
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +22 -22
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/optimistic.mjs +27 -1
- package/dist/esm/optimistic.mjs.map +1 -1
- package/dist/esm/optimistic.native.js +30 -1
- package/dist/esm/optimistic.native.js.map +1 -1
- package/dist/esm/pacer.mjs.map +1 -1
- package/dist/esm/pacer.native.js +4 -4
- package/dist/esm/pacer.native.js.map +1 -1
- package/dist/esm/plugin/index.native.js.map +1 -1
- package/dist/esm/realtime.mjs +234 -11
- package/dist/esm/realtime.mjs.map +1 -1
- package/dist/esm/realtime.native.js +369 -19
- package/dist/esm/realtime.native.js.map +1 -1
- package/dist/esm/sync/backfill.native.js +1 -1
- package/dist/esm/sync/backfill.native.js.map +1 -1
- package/dist/esm/sync/filters.native.js.map +1 -1
- package/dist/esm/sync/index.mjs +45 -1
- package/dist/esm/sync/index.mjs.map +1 -1
- package/dist/esm/sync/index.native.js +79 -9
- package/dist/esm/sync/index.native.js.map +1 -1
- package/dist/esm/sync/merge.native.js.map +1 -1
- package/dist/esm/sync/mutationEngine.mjs +51 -15
- package/dist/esm/sync/mutationEngine.mjs.map +1 -1
- package/dist/esm/sync/mutationEngine.native.js +73 -20
- package/dist/esm/sync/mutationEngine.native.js.map +1 -1
- package/dist/esm/sync/mutationJournal.mjs +8 -0
- package/dist/esm/sync/mutationJournal.mjs.map +1 -1
- package/dist/esm/sync/mutationJournal.native.js +11 -1
- package/dist/esm/sync/mutationJournal.native.js.map +1 -1
- package/dist/esm/sync/normalizedCache.native.js.map +1 -1
- package/dist/esm/sync/persistence.native.js +2 -2
- package/dist/esm/sync/persistence.native.js.map +1 -1
- package/dist/esm/sync/realtime.native.js +1 -1
- package/dist/esm/sync/realtime.native.js.map +1 -1
- package/dist/esm/sync/rehydration.native.js +1 -1
- package/dist/esm/sync/rehydration.native.js.map +1 -1
- package/dist/esm/sync/storage.native.js.map +1 -1
- package/dist/esm/sync/subscriptionManager.native.js +4 -4
- package/dist/esm/sync/subscriptionManager.native.js.map +1 -1
- package/dist/esm/sync/types.mjs.map +1 -1
- package/dist/esm/sync/types.native.js.map +1 -1
- package/dist/esm/sync/virtualPageManager.native.js +1 -1
- package/dist/esm/sync/virtualPageManager.native.js.map +1 -1
- package/dist/esm/useLiveQuery.native.js.map +1 -1
- package/dist/esm/util.native.js.map +1 -1
- package/dist/jsx/core/http.mjs +45 -2
- package/dist/jsx/core/http.mjs.map +1 -1
- package/dist/jsx/core/http.native.js +72 -1
- package/dist/jsx/core/http.native.js.map +1 -1
- package/dist/jsx/doctype.mjs +15 -2
- package/dist/jsx/doctype.mjs.map +1 -1
- package/dist/jsx/doctype.native.js +22 -5
- package/dist/jsx/doctype.native.js.map +1 -1
- package/dist/jsx/frappeReact.mjs +55 -3
- package/dist/jsx/frappeReact.mjs.map +1 -1
- package/dist/jsx/frappeReact.native.js +66 -1
- package/dist/jsx/frappeReact.native.js.map +1 -1
- package/dist/jsx/index.js +5 -5
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +5 -5
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +8 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/optimistic.mjs +27 -1
- package/dist/jsx/optimistic.mjs.map +1 -1
- package/dist/jsx/optimistic.native.js +34 -1
- package/dist/jsx/optimistic.native.js.map +1 -1
- package/dist/jsx/pacer.mjs.map +1 -1
- package/dist/jsx/pacer.native.js.map +1 -1
- package/dist/jsx/realtime.mjs +234 -11
- package/dist/jsx/realtime.mjs.map +1 -1
- package/dist/jsx/realtime.native.js +368 -18
- package/dist/jsx/realtime.native.js.map +1 -1
- package/dist/jsx/sync/index.mjs +45 -1
- package/dist/jsx/sync/index.mjs.map +1 -1
- package/dist/jsx/sync/index.native.js +71 -1
- package/dist/jsx/sync/index.native.js.map +1 -1
- package/dist/jsx/sync/mutationEngine.mjs +51 -15
- package/dist/jsx/sync/mutationEngine.mjs.map +1 -1
- package/dist/jsx/sync/mutationEngine.native.js +69 -16
- package/dist/jsx/sync/mutationEngine.native.js.map +1 -1
- package/dist/jsx/sync/mutationJournal.mjs +8 -0
- package/dist/jsx/sync/mutationJournal.mjs.map +1 -1
- package/dist/jsx/sync/mutationJournal.native.js +10 -0
- package/dist/jsx/sync/mutationJournal.native.js.map +1 -1
- package/dist/jsx/sync/types.mjs.map +1 -1
- package/dist/jsx/sync/types.native.js.map +1 -1
- package/package.json +8 -8
- package/src/core/http.spec.ts +81 -0
- package/src/core/http.ts +80 -3
- package/src/doctype.spec.ts +82 -3
- package/src/doctype.ts +51 -7
- package/src/frappeReact.ts +126 -4
- package/src/index.ts +28 -3
- package/src/optimistic.spec.ts +113 -2
- package/src/optimistic.ts +95 -0
- package/src/pacer.ts +8 -0
- package/src/realtime.spec.ts +62 -0
- package/src/realtime.ts +440 -14
- package/src/realtimeSse.spec.ts +547 -0
- package/src/sync/index.ts +44 -1
- package/src/sync/mutationEngine.spec.ts +7 -2
- package/src/sync/mutationEngine.ts +83 -27
- package/src/sync/mutationJournal.ts +9 -0
- package/src/sync/mutations.spec.ts +1 -1
- package/src/sync/syncModule.spec.ts +255 -1
- package/src/sync/types.ts +20 -0
- package/types/core/http.d.ts +11 -0
- package/types/core/http.d.ts.map +1 -1
- package/types/doctype.d.ts +7 -0
- package/types/doctype.d.ts.map +1 -1
- package/types/frappeReact.d.ts +50 -2
- package/types/frappeReact.d.ts.map +1 -1
- package/types/index.d.ts +8 -6
- package/types/index.d.ts.map +1 -1
- package/types/optimistic.d.ts +38 -0
- package/types/optimistic.d.ts.map +1 -1
- package/types/pacer.d.ts +8 -0
- package/types/pacer.d.ts.map +1 -1
- package/types/realtime.d.ts +183 -1
- package/types/realtime.d.ts.map +1 -1
- package/types/sync/index.d.ts +16 -1
- package/types/sync/index.d.ts.map +1 -1
- package/types/sync/mutationEngine.d.ts +7 -0
- package/types/sync/mutationEngine.d.ts.map +1 -1
- package/types/sync/mutationJournal.d.ts +6 -0
- package/types/sync/mutationJournal.d.ts.map +1 -1
- package/types/sync/types.d.ts +20 -0
- package/types/sync/types.d.ts.map +1 -1
package/types/frappeReact.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Collection } from "@tanstack/db";
|
|
2
2
|
import { type FrappeCollectionOptionsConfig } from "./collection";
|
|
3
3
|
import { SyncModule } from "./sync";
|
|
4
|
+
import type { DebugMutationEntry } from "./sync/types";
|
|
4
5
|
/**
|
|
5
6
|
* Configuration for creating a Frappe collection with connection details.
|
|
6
7
|
*/
|
|
@@ -13,6 +14,20 @@ export interface UseFrappeCollectionConfig {
|
|
|
13
14
|
* behind a reverse proxy so the base URL port is used.
|
|
14
15
|
*/
|
|
15
16
|
socketPort?: number;
|
|
17
|
+
/**
|
|
18
|
+
* Dial the realtime socket at this origin instead of deriving it from
|
|
19
|
+
* `baseURL` + `socketPort` — for dev servers that proxy `/socket.io` on
|
|
20
|
+
* their own origin (same-origin socket). See
|
|
21
|
+
* `RealtimeConfig.socketBaseURL`.
|
|
22
|
+
*/
|
|
23
|
+
socketBaseURL?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Frappe site name — the Socket.IO namespace the realtime connection must
|
|
26
|
+
* join. Required whenever the `baseURL` hostname is not the bench site
|
|
27
|
+
* name (e.g. baseURL http://127.0.0.1:8000 serving site "localhost"). See
|
|
28
|
+
* `RealtimeConfig.siteName`.
|
|
29
|
+
*/
|
|
30
|
+
siteName?: string;
|
|
16
31
|
/** Authentication configuration */
|
|
17
32
|
auth?: {
|
|
18
33
|
useToken?: boolean;
|
|
@@ -37,6 +52,14 @@ export interface UseFrappeCollectionConfig {
|
|
|
37
52
|
* Intended for devtools integration — not part of the public API.
|
|
38
53
|
*/
|
|
39
54
|
export declare function __getActiveSyncModule(): SyncModule | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Public accessor for the shared SyncModule behind a connection config —
|
|
57
|
+
* the seam consumers use to issue engine mutations that a collection can't
|
|
58
|
+
* express (e.g. custom-transport writes via `mutation.execute`). Returns
|
|
59
|
+
* the same refcounted instance the collection hooks use, or undefined
|
|
60
|
+
* during SSR.
|
|
61
|
+
*/
|
|
62
|
+
export declare function getFrappeSyncModule(config: UseFrappeCollectionConfig | undefined): SyncModule | undefined;
|
|
40
63
|
/**
|
|
41
64
|
* React hook that returns a TanStack DB Collection backed by a Frappe doctype.
|
|
42
65
|
*
|
|
@@ -114,6 +137,31 @@ export declare function useFrappeDoctypeEvents(config: UseFrappeCollectionConfig
|
|
|
114
137
|
type: string;
|
|
115
138
|
payload?: unknown;
|
|
116
139
|
}) => void, enabled?: boolean): void;
|
|
140
|
+
/** Result of {@link useFrappePendingMutations}. */
|
|
141
|
+
export interface UseFrappePendingMutationsResult {
|
|
142
|
+
/** All live ledger entries (pending + failed), submission order. */
|
|
143
|
+
entries: DebugMutationEntry[];
|
|
144
|
+
/** Entries still awaiting a server ack. */
|
|
145
|
+
pending: DebugMutationEntry[];
|
|
146
|
+
/** Entries the server rejected — rollback already ran; show these. */
|
|
147
|
+
failed: DebugMutationEntry[];
|
|
148
|
+
/** Re-issues every pending/failed entry with its ORIGINAL mutation id
|
|
149
|
+
* (idempotent on the server via Idempotency-Key). */
|
|
150
|
+
retry: () => Promise<void>;
|
|
151
|
+
/** Drops one failed entry without retrying (clears the error surface). */
|
|
152
|
+
dismiss: (id: string) => void;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* React hook exposing the mutation ledger for a connection (optionally
|
|
156
|
+
* scoped to one doctype): which optimistic writes are still in flight and
|
|
157
|
+
* which the server rejected. This is the state behind the rejected-write
|
|
158
|
+
* UI contract — a surface that initiated a write renders `failed` entries
|
|
159
|
+
* inline (e.g. via frappe-ui's `SyncErrorNotice`) with `retry`/`dismiss`.
|
|
160
|
+
*
|
|
161
|
+
* Reactive: re-reads on every store emit, but only re-renders when the
|
|
162
|
+
* ledger signature (ids × status × retryCount) actually changes.
|
|
163
|
+
*/
|
|
164
|
+
export declare function useFrappePendingMutations(config: UseFrappeCollectionConfig | undefined, doctype?: string): UseFrappePendingMutationsResult;
|
|
117
165
|
/**
|
|
118
166
|
* Configuration for the useInfiniteScroll hook
|
|
119
167
|
*/
|
|
@@ -170,7 +218,7 @@ export interface UseInfiniteScrollResult {
|
|
|
170
218
|
*
|
|
171
219
|
* return (
|
|
172
220
|
* <div>
|
|
173
|
-
* {data.map(pokemon => <PokemonCard key={pokemon.name} {
|
|
221
|
+
* {data.map(pokemon => <PokemonCard key={pokemon.name} pokemon={pokemon} />)}
|
|
174
222
|
* <div ref={sentinelRef}>
|
|
175
223
|
* {isLoadingMore ? <Spinner /> : hasMore ? "Scroll for more" : "No more items"}
|
|
176
224
|
* </div>
|
|
@@ -254,7 +302,7 @@ export interface UseFrappeInfiniteListResult<TDoc> {
|
|
|
254
302
|
*
|
|
255
303
|
* return (
|
|
256
304
|
* <div>
|
|
257
|
-
* {items.map(pokemon => <PokemonCard key={pokemon.name} {
|
|
305
|
+
* {items.map(pokemon => <PokemonCard key={pokemon.name} pokemon={pokemon} />)}
|
|
258
306
|
* <div ref={sentinelRef}>
|
|
259
307
|
* {hasMore ? <Spinner /> : "No more pokemon"}
|
|
260
308
|
* </div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frappeReact.d.ts","sourceRoot":"","sources":["../src/frappeReact.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,cAAc,CAAC;AAMtB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"frappeReact.d.ts","sourceRoot":"","sources":["../src/frappeReact.ts"],"names":[],"mappings":"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"}
|
package/types/index.d.ts
CHANGED
|
@@ -10,13 +10,15 @@ export { AuthModule } from "./auth";
|
|
|
10
10
|
export { CallModule } from "./call";
|
|
11
11
|
export { DbModule } from "./db";
|
|
12
12
|
export { FileModule } from "./file";
|
|
13
|
-
export { RealtimeModule } from "./realtime";
|
|
13
|
+
export { RealtimeModule, RealtimePlatform } from "./realtime";
|
|
14
|
+
export type { RealtimeConfig, RealtimeTransport, RealtimeSSEConfig, SSEFrame, SSEMappedEvent, SSEMessageEventLike, SSEEventSourceLike, SSEEventSourceConstructor, DocRoom, ListRoom, } from "./realtime";
|
|
14
15
|
export { SyncModule } from "./sync";
|
|
15
16
|
export { createFrappeCollection, frappeCollectionOptions, createFixtureCollection, fixtureCollectionOptions, } from "./collection";
|
|
16
17
|
export type { FrappeCollectionOptionsConfig, FixtureCollectionOptionsConfig } from "./collection";
|
|
17
|
-
export { createOptimisticAction } from "./optimistic";
|
|
18
|
-
export {
|
|
19
|
-
export
|
|
18
|
+
export { createOptimisticAction, isOptimisticTempId, newOptimisticTempId, OPTIMISTIC_TEMP_PREFIX, runOptimisticRpc, } from "./optimistic";
|
|
19
|
+
export type { OptimisticRpcContext, OptimisticRpcOptions } from "./optimistic";
|
|
20
|
+
export { useFrappeCollection, useFrappeConnection, useFrappeDoctypeEvents, useFrappePendingMutations, useInfiniteScroll, useFrappeInfiniteList, getFrappeSyncModule, __getActiveSyncModule, } from "./frappeReact";
|
|
21
|
+
export type { FrappeConnectionState, UseFrappeCollectionConfig, UseFrappePendingMutationsResult, UseInfiniteScrollConfig, UseInfiniteScrollResult, UseFrappeInfiniteListConfig, UseFrappeInfiniteListResult, } from "./frappeReact";
|
|
20
22
|
export type { SyncRealtimeEvent } from "./sync";
|
|
21
23
|
export { useDebouncedSearch, useThrottledPagination, createRateLimitedBatch } from "./pacer";
|
|
22
24
|
export type { DebouncedSearchOptions, DebouncedSearchResult, FrappeConnectionConfig, ThrottledPaginationOptions, ThrottledPaginationResult, RateLimitedBatchOptions, RateLimitedBatchHandle, } from "./pacer";
|
|
@@ -32,8 +34,8 @@ export type { BackfillArgs, BackfillResponse, CursorPaginationArgs, CursorPagina
|
|
|
32
34
|
export { useDocTypeMeta, useLinkSearch, useLinkTitle, useDocTypeSearch, parseDependsOn, parseFormLayout, } from "./doctype";
|
|
33
35
|
export type { DocTypeMeta, DocTypeField, DocTypePermission, FormSection, FormColumn, FrappeFieldType, LinkSearchResult, LinkSearchOptions, DocTypeSearchResult, } from "./doctype";
|
|
34
36
|
export type { FrappeDocValue, FrappeDocData, FrappeDoc, ChildTableRow } from "./common/types";
|
|
35
|
-
export type { SyncOptions, PageBoundaries, RehydrationStrategy, Mutation, ConnectionConfig, TabCoordinationConfig, TabMessage, FrappeDebugState, DebugSubscription, DebugMutationEntry, PageIsland, } from "./sync/types";
|
|
36
|
-
export { Order } from "./sync/types";
|
|
37
|
+
export type { SyncOptions, PageBoundaries, RehydrationStrategy, Mutation, CreateMutation, UpdateMutation, DeleteMutation, ConnectionConfig, TabCoordinationConfig, TabMessage, FrappeDebugState, DebugSubscription, DebugMutationEntry, PageIsland, } from "./sync/types";
|
|
38
|
+
export { Order, Operation } from "./sync/types";
|
|
37
39
|
export { MergeStrategy, FieldMergeStrategy } from "./sync/merge";
|
|
38
40
|
export type { FieldMergeStrategyOrFunction, MergeConfig, MergeResult } from "./sync/merge";
|
|
39
41
|
export { matchesFilters, validateFilters, normalizeFilters, extractFilterFields, extractSingleName, formatFilter, hasServerOnlyOperators, canEvaluateClientSide, isTreeOperator, getClientEvaluationBlockers, FilterOperator, } from "./sync/filters";
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/types/optimistic.d.ts
CHANGED
|
@@ -35,4 +35,42 @@ export { tanstackCreateOptimisticAction as createOptimisticAction };
|
|
|
35
35
|
* await tx.isPersisted.promise;
|
|
36
36
|
* ```
|
|
37
37
|
*/
|
|
38
|
+
/** Prefix shared with the MutationEngine's synthesized create identities. */
|
|
39
|
+
export declare const OPTIMISTIC_TEMP_PREFIX = "tmp_";
|
|
40
|
+
/** Issues a client-only identity for an optimistic record (`tmp_<uuid>`). */
|
|
41
|
+
export declare function newOptimisticTempId(): string;
|
|
42
|
+
/** True when a document name is a client-issued optimistic identity. */
|
|
43
|
+
export declare function isOptimisticTempId(name: unknown): name is string;
|
|
44
|
+
export interface OptimisticRpcContext {
|
|
45
|
+
/** Client-only identity for the optimistic record (`tmp_<uuid>`). */
|
|
46
|
+
tempId: string;
|
|
47
|
+
}
|
|
48
|
+
export interface OptimisticRpcOptions<TAck> {
|
|
49
|
+
/**
|
|
50
|
+
* Apply the mutation locally, synchronously, before the request is sent.
|
|
51
|
+
* Returns the undo that restores the exact pre-apply state (rollback).
|
|
52
|
+
* The applied record should use `ctx.tempId` as its identity and carry a
|
|
53
|
+
* pending marker for the UI.
|
|
54
|
+
*/
|
|
55
|
+
apply: (ctx: OptimisticRpcContext) => (() => void) | undefined | void;
|
|
56
|
+
/** The server RPC. */
|
|
57
|
+
send: (ctx: OptimisticRpcContext) => Promise<TAck>;
|
|
58
|
+
/**
|
|
59
|
+
* Converge on ack: replace the `ctx.tempId` record with the server's
|
|
60
|
+
* authoritative record (dedupe by server identity — a racing refetch may
|
|
61
|
+
* already have delivered it).
|
|
62
|
+
*/
|
|
63
|
+
reconcile?: (ack: TAck, ctx: OptimisticRpcContext) => void;
|
|
64
|
+
/**
|
|
65
|
+
* Visible-error surface for the rollback path (house `notify()` or an
|
|
66
|
+
* inline error slot). Runs after the apply-phase undo.
|
|
67
|
+
*/
|
|
68
|
+
onError?: (error: unknown, ctx: OptimisticRpcContext) => void;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Runs one mutation through the optimistic lifecycle:
|
|
72
|
+
* apply (local, immediate) → send → reconcile on ack, or undo + onError on
|
|
73
|
+
* failure (the error rethrows).
|
|
74
|
+
*/
|
|
75
|
+
export declare function runOptimisticRpc<TAck>(options: OptimisticRpcOptions<TAck>): Promise<TAck>;
|
|
38
76
|
//# sourceMappingURL=optimistic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optimistic.d.ts","sourceRoot":"","sources":["../src/optimistic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAExF,OAAO,EAAE,8BAA8B,IAAI,sBAAsB,EAAE,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG"}
|
|
1
|
+
{"version":3,"file":"optimistic.d.ts","sourceRoot":"","sources":["../src/optimistic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAExF,OAAO,EAAE,8BAA8B,IAAI,sBAAsB,EAAE,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AA8BH,6EAA6E;AAC7E,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAE7C,6EAA6E;AAC7E,wBAAgB,mBAAmB,IAAI,MAAM,CAM5C;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAEhE;AAED,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB,CAAC,IAAI;IACxC;;;;;OAKG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IACtE,sBAAsB;IACtB,IAAI,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC3D;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC/D;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAe/F"}
|
package/types/pacer.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Collection } from "@tanstack/db";
|
|
2
2
|
import type { FrappeDoc, FrappeDocData } from "./common/types";
|
|
3
|
+
import type { FixtureProvider } from "./fixtures";
|
|
3
4
|
import type { SyncModule } from "./sync";
|
|
4
5
|
/**
|
|
5
6
|
* Options for `useDebouncedSearch`.
|
|
@@ -47,6 +48,13 @@ export interface FrappeConnectionConfig {
|
|
|
47
48
|
token?: string | (() => string | Promise<string>);
|
|
48
49
|
type?: string;
|
|
49
50
|
};
|
|
51
|
+
/**
|
|
52
|
+
* Fixture provider for story / test hosts. Consumers already forward it
|
|
53
|
+
* (frappe-ui's FrappeProvider builds this config from its own context), and
|
|
54
|
+
* `useDocTypeMeta` reads doctype metadata from it before reaching for the
|
|
55
|
+
* network.
|
|
56
|
+
*/
|
|
57
|
+
fixtures?: FixtureProvider;
|
|
50
58
|
}
|
|
51
59
|
/**
|
|
52
60
|
* Debounced search hook for Frappe doctypes.
|
package/types/pacer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pacer.d.ts","sourceRoot":"","sources":["../src/pacer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/C,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"pacer.d.ts","sourceRoot":"","sources":["../src/pacer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/C,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAOzC;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,IAAI,SAAS,aAAa;IAChE,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1C,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,IAAI,SAAS,aAAa;IAC/D,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,2DAA2D;IAC3D,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3B,6CAA6C;IAC7C,WAAW,EAAE,OAAO,CAAC;IACrB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,SAAS,aAAa,EAC3D,MAAM,EAAE,sBAAsB,GAAG,SAAS,EAC1C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,sBAAsB,CAAC,IAAI,CAAC,GACrC,qBAAqB,CAAC,IAAI,CAAC,CAsF7B;AAMD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB,CAAC,IAAI,SAAS,aAAa;IACnE,iEAAiE;IACjE,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,SAAS,aAAa,EAC/D,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,SAAS,EAChD,OAAO,CAAC,EAAE,0BAA0B,GACnC,yBAAyB,CAAC,IAAI,CAAC,CA2BjC;AAMD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,UAAU,EAAE,UAAU,CAAC;CACxB;AAUD;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,IAAI,SAAS,aAAa;IAChE,qCAAqC;IACrC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAClD,kDAAkD;IAClD,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE;QACpB,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;KACzD,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,SAAS,aAAa,EAC/D,OAAO,EAAE,uBAAuB,GAC/B,sBAAsB,CAAC,IAAI,CAAC,CA+D9B"}
|
package/types/realtime.d.ts
CHANGED
|
@@ -6,6 +6,90 @@ export declare enum RealtimePlatform {
|
|
|
6
6
|
Web = "web",
|
|
7
7
|
ReactNative = "react-native"
|
|
8
8
|
}
|
|
9
|
+
export type RealtimeTransport = "socketio" | "sse";
|
|
10
|
+
/** One SSE frame as received off the wire (before any mapping). */
|
|
11
|
+
export interface SSEFrame {
|
|
12
|
+
/** SSE event type — the `event:` classification line, or `"message"` for unnamed frames. */
|
|
13
|
+
type: string;
|
|
14
|
+
/** Raw `data:` payload (SSE data is always a string). */
|
|
15
|
+
data: string;
|
|
16
|
+
/** The stream's last `id:` line as of this frame (empty when the server sent none). */
|
|
17
|
+
lastEventId: string;
|
|
18
|
+
}
|
|
19
|
+
/** One handler-map delivery produced by `RealtimeSSEConfig.mapFrame`. */
|
|
20
|
+
export interface SSEMappedEvent {
|
|
21
|
+
event: string;
|
|
22
|
+
payload: unknown;
|
|
23
|
+
}
|
|
24
|
+
/** Minimal structural slice of a WHATWG `MessageEvent` the SSE transport reads. */
|
|
25
|
+
export interface SSEMessageEventLike {
|
|
26
|
+
type?: string;
|
|
27
|
+
data?: unknown;
|
|
28
|
+
lastEventId?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Minimal structural slice of the WHATWG EventSource interface used by the
|
|
32
|
+
* SSE transport. The global browser/Node implementation satisfies it, and so
|
|
33
|
+
* do the common polyfills (`eventsource` on npm, `react-native-sse`).
|
|
34
|
+
*/
|
|
35
|
+
export interface SSEEventSourceLike {
|
|
36
|
+
addEventListener(type: string, listener: (event: SSEMessageEventLike) => void): void;
|
|
37
|
+
removeEventListener(type: string, listener: (event: SSEMessageEventLike) => void): void;
|
|
38
|
+
close(): void;
|
|
39
|
+
}
|
|
40
|
+
export type SSEEventSourceConstructor = new (url: string, init?: {
|
|
41
|
+
withCredentials?: boolean;
|
|
42
|
+
}) => SSEEventSourceLike;
|
|
43
|
+
export interface RealtimeSSEConfig {
|
|
44
|
+
/** Absolute stream URL. Wins over `path` when both are set. */
|
|
45
|
+
url?: string;
|
|
46
|
+
/**
|
|
47
|
+
* Stream path resolved against `baseURL` (e.g.
|
|
48
|
+
* `"/api/method/shc.events.stream"` for the SHC daemon). One of `url` or
|
|
49
|
+
* `path` is REQUIRED: SSE endpoints are server-specific — a real Frappe
|
|
50
|
+
* bench has none at all — so a framework default would only ever 404, and
|
|
51
|
+
* `connect()` throws a descriptive error instead of guessing.
|
|
52
|
+
*/
|
|
53
|
+
path?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Browser EventSource credential mode: send cookies on the stream request.
|
|
56
|
+
* This is the primary browser auth path — EventSource cannot set request
|
|
57
|
+
* headers, so header-based token auth is impossible there (see
|
|
58
|
+
* `queryParams` for the token alternative).
|
|
59
|
+
*/
|
|
60
|
+
withCredentials?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Injectable EventSource constructor for runtimes without a global one
|
|
63
|
+
* (React Native, Node < 22, GJS) — e.g. the `eventsource` npm package or
|
|
64
|
+
* `react-native-sse`. When omitted the global `EventSource` is used, and
|
|
65
|
+
* `connect()` throws an error naming this option when neither exists.
|
|
66
|
+
*/
|
|
67
|
+
EventSource?: SSEEventSourceConstructor;
|
|
68
|
+
/**
|
|
69
|
+
* Named SSE event types (`event:` classification lines) to listen for, in
|
|
70
|
+
* addition to unnamed `"message"` frames and handler-registered names.
|
|
71
|
+
* EventSource only dispatches a NAMED event when a listener for that exact
|
|
72
|
+
* type is attached, so `mapFrame`-driven apps — whose handler names differ
|
|
73
|
+
* from the wire's frame types — must list the server's classifications
|
|
74
|
+
* here (e.g. `["docker", "audit", "error", "event"]` for the SHC daemon).
|
|
75
|
+
*/
|
|
76
|
+
events?: string[];
|
|
77
|
+
/**
|
|
78
|
+
* Translate one SSE frame into zero or more handler deliveries. Return
|
|
79
|
+
* `null`/`undefined` to drop the frame. When omitted, the default mapping
|
|
80
|
+
* delivers under the frame's `event:` type name with `JSON.parse(data)` as
|
|
81
|
+
* the payload (falling back to the raw string when the data isn't JSON).
|
|
82
|
+
*/
|
|
83
|
+
mapFrame?: (frame: SSEFrame) => SSEMappedEvent[] | null | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* Extra query parameters appended to the stream URL — the token-auth path
|
|
86
|
+
* for SSE (headers are off-limits in browsers, see `withCredentials`).
|
|
87
|
+
* Values may be getters; they are re-resolved every time the EventSource
|
|
88
|
+
* is (re)created, so a rotated token is picked up by `updateAuth()`'s
|
|
89
|
+
* reconnect.
|
|
90
|
+
*/
|
|
91
|
+
queryParams?: Record<string, string | (() => string | Promise<string>)>;
|
|
92
|
+
}
|
|
9
93
|
export interface RealtimeConfig {
|
|
10
94
|
auth?: AuthConfig;
|
|
11
95
|
baseURL: string;
|
|
@@ -22,6 +106,23 @@ export interface RealtimeConfig {
|
|
|
22
106
|
* `/socket.io` to the SocketIO backend.
|
|
23
107
|
*/
|
|
24
108
|
socketPort?: number;
|
|
109
|
+
/**
|
|
110
|
+
* Dial the Socket.IO connection at this origin instead of deriving host and
|
|
111
|
+
* port from `baseURL` + `socketPort`.
|
|
112
|
+
*
|
|
113
|
+
* Built for dev servers that proxy `/socket.io` on their own origin (e.g.
|
|
114
|
+
* apps/one's `frappeSocketioDevProxy`): pointing the socket at the PAGE
|
|
115
|
+
* origin makes the handshake same-origin, so the browser stops blocking the
|
|
116
|
+
* cross-origin polling response (the reflected allow-origin is the proxy's
|
|
117
|
+
* injected bench origin, not the page's). Only the connection target
|
|
118
|
+
* changes — the namespace still comes from `siteName` (falling back to the
|
|
119
|
+
* `baseURL` hostname), because Frappe resolves the site server-side from
|
|
120
|
+
* the proxy-injected headers, not from where the client dialed.
|
|
121
|
+
*
|
|
122
|
+
* Wins over `socketPort` when both are set. Omit in production, where the
|
|
123
|
+
* reverse proxy already serves `/socket.io` on the `baseURL` origin.
|
|
124
|
+
*/
|
|
125
|
+
socketBaseURL?: string;
|
|
25
126
|
/**
|
|
26
127
|
* Frappe site name, used as the Socket.IO namespace.
|
|
27
128
|
*
|
|
@@ -37,14 +138,49 @@ export interface RealtimeConfig {
|
|
|
37
138
|
siteName?: string;
|
|
38
139
|
platform?: RealtimePlatform;
|
|
39
140
|
socketOptions?: Partial<ManagerOptions & SocketOptions>;
|
|
141
|
+
/**
|
|
142
|
+
* Wire transport for realtime events.
|
|
143
|
+
*
|
|
144
|
+
* - `"socketio"` (default): Frappe's real realtime server — Socket.IO with
|
|
145
|
+
* doc/doctype rooms and two-way subscribe emits. Omitting `transport`
|
|
146
|
+
* keeps this exact behavior.
|
|
147
|
+
* - `"sse"`: a one-way `text/event-stream` endpoint consumed via
|
|
148
|
+
* EventSource. Built for Frappe-wire-compatible servers that serve
|
|
149
|
+
* realtime as SSE instead of Socket.IO (e.g. the SHC daemon's
|
|
150
|
+
* `GET /api/method/shc.events.stream`). Requires `sse.url` or `sse.path`.
|
|
151
|
+
* Room subscriptions become client-side bookkeeping (nothing can be
|
|
152
|
+
* emitted upstream) and `sse.mapFrame` decides how server frames fan out
|
|
153
|
+
* to handler events. Missed-event resume via the `Last-Event-ID` header
|
|
154
|
+
* is native EventSource behavior and is not reimplemented here.
|
|
155
|
+
*/
|
|
156
|
+
transport?: RealtimeTransport;
|
|
157
|
+
/** SSE transport options — only read when `transport` is `"sse"`. */
|
|
158
|
+
sse?: RealtimeSSEConfig;
|
|
40
159
|
}
|
|
160
|
+
export type DocRoom = {
|
|
161
|
+
doctype: string;
|
|
162
|
+
name: string;
|
|
163
|
+
};
|
|
164
|
+
export type ListRoom = {
|
|
165
|
+
doctype: string;
|
|
166
|
+
filters?: Record<string, unknown>;
|
|
167
|
+
};
|
|
41
168
|
export declare class RealtimeModule {
|
|
42
169
|
private socket;
|
|
170
|
+
/** Live EventSource when the `"sse"` transport is active. */
|
|
171
|
+
private eventSource;
|
|
43
172
|
private handlerMap;
|
|
44
173
|
/** Tracks events with socket listeners attached to prevent duplicates. */
|
|
45
174
|
private attachedSocketEvents;
|
|
46
175
|
/** Stored socket event handler references for proper cleanup. */
|
|
47
176
|
private socketEventHandlers;
|
|
177
|
+
/** Tracks SSE event types with listeners attached to prevent duplicates. */
|
|
178
|
+
private attachedSseEvents;
|
|
179
|
+
/** Stored SSE listener references for proper cleanup. */
|
|
180
|
+
private sseListeners;
|
|
181
|
+
/** One-shot debug notices for SSE's one-way limitations. */
|
|
182
|
+
private sseRoomNoticeLogged;
|
|
183
|
+
private sseEmitNoticeLogged;
|
|
48
184
|
/** Active doc rooms — re-emitted on every (re)connect. */
|
|
49
185
|
private docRooms;
|
|
50
186
|
/** Active list rooms — re-emitted on every (re)connect. */
|
|
@@ -70,10 +206,46 @@ export declare class RealtimeModule {
|
|
|
70
206
|
*/
|
|
71
207
|
private refreshSocketAuth;
|
|
72
208
|
private resolveHealthyWaiters;
|
|
209
|
+
private isSSE;
|
|
73
210
|
private waitUntilHealthy;
|
|
74
211
|
private ensureConnected;
|
|
75
212
|
private resubscribeRooms;
|
|
76
|
-
|
|
213
|
+
/**
|
|
214
|
+
* Open the realtime transport now. Room-driven auto-connect
|
|
215
|
+
* (subscribeDoc/subscribeList) remains the primary lifecycle in both
|
|
216
|
+
* transports — this is public for SSE consumers that use no doc/list room
|
|
217
|
+
* bookkeeping: a one-way stream has nothing to emit on join, so nothing
|
|
218
|
+
* else would ever open it. Idempotent while a transport exists or a
|
|
219
|
+
* connect is in flight.
|
|
220
|
+
*/
|
|
221
|
+
connect(): Promise<void>;
|
|
222
|
+
/**
|
|
223
|
+
* SSE branch of connect(): construct an EventSource against the configured
|
|
224
|
+
* stream URL. EventSource connects at construction, auto-reconnects on
|
|
225
|
+
* failure, and resumes missed frames itself by sending the stream's last
|
|
226
|
+
* `id:` as the `Last-Event-ID` request header — none of that is
|
|
227
|
+
* reimplemented here.
|
|
228
|
+
*/
|
|
229
|
+
private connectSSE;
|
|
230
|
+
private buildSSEURL;
|
|
231
|
+
private initSSEHandlers;
|
|
232
|
+
private attachSSEListener;
|
|
233
|
+
private detachSSEListener;
|
|
234
|
+
private isCoreSSEType;
|
|
235
|
+
/**
|
|
236
|
+
* Single entry point for everything the EventSource dispatches. Dataless
|
|
237
|
+
* events are transport lifecycle (`open`/`error` as plain Events); anything
|
|
238
|
+
* carrying `data` is a server frame — including frames the server
|
|
239
|
+
* classified `event: error`, which arrive as MessageEvents WITH data and
|
|
240
|
+
* must not be mistaken for connection errors.
|
|
241
|
+
*/
|
|
242
|
+
private handleSSEEvent;
|
|
243
|
+
/**
|
|
244
|
+
* Logged once: SSE is one-way, so doc/list room membership can't be sent
|
|
245
|
+
* upstream — rooms are recorded client-side (see getDocRooms/getListRooms)
|
|
246
|
+
* for mapFrame-driven filtering and for a future two-way transport.
|
|
247
|
+
*/
|
|
248
|
+
private logSSERoomNoticeOnce;
|
|
77
249
|
/**
|
|
78
250
|
* Tear down the socket without clearing app handlers or room subscriptions.
|
|
79
251
|
* Used by auth refresh so listeners/rooms survive credential rotation.
|
|
@@ -117,5 +289,15 @@ export declare class RealtimeModule {
|
|
|
117
289
|
updateAuth(auth: AuthConfig): Promise<void>;
|
|
118
290
|
emit(event: string, data: unknown): void;
|
|
119
291
|
getSocket(): Socket<import("@socket.io/component-emitter").DefaultEventsMap, import("@socket.io/component-emitter").DefaultEventsMap> | undefined;
|
|
292
|
+
/** Live EventSource when the SSE transport is connected (undefined otherwise). */
|
|
293
|
+
getEventSource(): SSEEventSourceLike | undefined;
|
|
294
|
+
/**
|
|
295
|
+
* Doc rooms recorded by subscribeDoc. Under SSE these are client-side
|
|
296
|
+
* bookkeeping only (nothing is emitted upstream) — mapFrame-driven apps
|
|
297
|
+
* consult them to filter or route frames.
|
|
298
|
+
*/
|
|
299
|
+
getDocRooms(): DocRoom[];
|
|
300
|
+
/** List rooms recorded by subscribeList — same client-side semantics as getDocRooms. */
|
|
301
|
+
getListRooms(): ListRoom[];
|
|
120
302
|
}
|
|
121
303
|
//# sourceMappingURL=realtime.d.ts.map
|
package/types/realtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAEjD,oBAAY,gBAAgB;IAC1B,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,WAAW,iBAAiB;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"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"}
|
package/types/sync/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { FrappeDoc, FrappeDocData } from "../common/types";
|
|
2
2
|
import type { DbModule } from "../db";
|
|
3
3
|
import type { RealtimeModule } from "../realtime";
|
|
4
|
-
import type { BackfillArgs, SyncOptions, FrappeDebugState, Mutation, RealtimeEventType, SubscriptionQuery } from "./types";
|
|
4
|
+
import type { BackfillArgs, DebugMutationEntry, SyncOptions, FrappeDebugState, Mutation, RealtimeEventType, SubscriptionQuery } from "./types";
|
|
5
5
|
/** Realtime event forwarded to `subscribeRealtimeEvents` listeners. */
|
|
6
6
|
export interface SyncRealtimeEvent {
|
|
7
7
|
type: RealtimeEventType;
|
|
@@ -107,6 +107,21 @@ export declare class SyncModule {
|
|
|
107
107
|
* Replays pending mutations with error handling.
|
|
108
108
|
*/
|
|
109
109
|
replayPending(): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Public read of the mutation ledger: journal entries still awaiting the
|
|
112
|
+
* server (`Status.Pending`) or rejected by it (`Status.Failed`), ordered
|
|
113
|
+
* by submission sequence. Confirmed entries are dropped from the journal
|
|
114
|
+
* and never appear here. Read inside a `subscribeStore` callback for a
|
|
115
|
+
* reactive pending/error surface (see `useFrappePendingMutations`).
|
|
116
|
+
*/
|
|
117
|
+
getMutationEntries(doctype?: string): DebugMutationEntry[];
|
|
118
|
+
/**
|
|
119
|
+
* Drops a failed (or still-pending) ledger entry without retrying it —
|
|
120
|
+
* the "dismiss" half of the rejected-write contract. The optimistic
|
|
121
|
+
* rollback already ran when the mutation failed; this only clears the
|
|
122
|
+
* error affordance.
|
|
123
|
+
*/
|
|
124
|
+
dismissMutation(id: string): void;
|
|
110
125
|
/** Reads a single document from the local cache. */
|
|
111
126
|
getDocFromCache<T extends FrappeDocData = FrappeDocData>(doctype: string, name: string): T | undefined;
|
|
112
127
|
/** Returns subscription metadata by id. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAUlD,OAAO,KAAK,EACV,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAUlD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAElB,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAyB;IAC/C,0DAA0D;IAC1D,OAAO,CAAC,sBAAsB,CAAiD;IAC/E,OAAO,CAAC,mBAAmB,CAAsB;IACjD,sEAAsE;IACtE,OAAO,CAAC,cAAc,CAAiB;IACvC,wDAAwD;IACxD,OAAO,CAAC,eAAe,CAAkB;IACzC,+CAA+C;IAC/C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,gEAAgE;IAChE,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,6DAA6D;IAC7D,OAAO,CAAC,YAAY,CAAC,CAAa;IAClC,OAAO,CAAC,kBAAkB,CAAC,CAAa;IACxC,OAAO,CAAC,qBAAqB,CAAC,CAAa;IAC3C,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,6CAA6C;IAC7C,OAAO,CAAC,iBAAiB,CAAC,CAAiC;IAC3D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;gBAE1B,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAE,OAAO,GAAE,WAAgB;IA2E9E;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;;;;;;;OAQG;IACG,SAAS,CAAC,IAAI,SAAS,aAAa,EAAE,KAAK,EAAE,iBAAiB;IAepE;;OAEG;IACH,WAAW,CAAC,cAAc,EAAE,MAAM;IAO5B,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC;IAgB9C;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,YAAY;IAKjC;;OAEG;IACG,aAAa;IAKnB;;;;;;OAMG;IACH,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAkB1D;;;;;OAKG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM;IAK1B,oDAAoD;IACpD,eAAe,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,EACrD,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,SAAS;IAIhB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,EAAE,MAAM;IAI1B;;OAEG;IACH,sBAAsB,CAAC,IAAI,SAAS,aAAa,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE;IAIjF;;;OAGG;IACG,OAAO,CAAC,IAAI,SAAS,aAAa,EACtC,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IAM7B;;;OAGG;IACG,YAAY,CAAC,IAAI,SAAS,aAAa,EAC3C,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IAU7B;;OAEG;IACH,WAAW,CAAC,cAAc,EAAE,MAAM;IAIlC,+EAA+E;IACzE,WAAW,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE;IAQ3D,8DAA8D;IAC9D,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAOhD;;;;;OAKG;IACH,uBAAuB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI;IAOjF;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAInC,6CAA6C;IAC7C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIrC;;;;;;OAMG;IACH,kBAAkB,IAAI;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE;IAIpE,mFAAmF;IACnF,OAAO,CAAC,IAAI;IASZ,kEAAkE;IAClE,UAAU;IAYV,uCAAuC;IACjC,OAAO;IA+Bb;;;OAGG;IACH,OAAO,IAAI,gBAAgB;IA0E3B;;OAEG;IACH,QAAQ,IAAI,OAAO;CAGpB"}
|
|
@@ -43,6 +43,13 @@ export declare class MutationEngine {
|
|
|
43
43
|
private handleOptimisticCreate;
|
|
44
44
|
private handleServerCreate;
|
|
45
45
|
private handleServerUpdate;
|
|
46
|
+
/**
|
|
47
|
+
* Applies the local side of a delete: cache eviction, subscription
|
|
48
|
+
* membership removal, and gap-filling rehydration. Runs before the server
|
|
49
|
+
* call (mutate() body) so the row disappears immediately; the journal
|
|
50
|
+
* snapshot restores it if the server rejects.
|
|
51
|
+
*/
|
|
52
|
+
private applyOptimisticDelete;
|
|
46
53
|
private handleServerDelete;
|
|
47
54
|
private handleTemporaryToRealMapping;
|
|
48
55
|
private refetchAffectedDocs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutationEngine.d.ts","sourceRoot":"","sources":["../../src/sync/mutationEngine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAiB,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,OAAO,KAAK,EAAE,eAAe,EAAW,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAUjE,OAAO,KAAK,EAGV,WAAW,EACX,QAAQ,EAIT,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"mutationEngine.d.ts","sourceRoot":"","sources":["../../src/sync/mutationEngine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAiB,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,OAAO,KAAK,EAAE,eAAe,EAAW,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAUjE,OAAO,KAAK,EAGV,WAAW,EACX,QAAQ,EAIT,MAAM,SAAS,CAAC;AAqBjB,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,wBAAwB,CAA6B;IAC7D,OAAO,CAAC,sBAAsB,CAAkC;IAChE,8CAA8C;IAC9C,OAAO,CAAC,YAAY,CAA6C;IACjE,qCAAqC;IACrC,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;gBAGpC,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EAChC,mBAAmB,EAAE,mBAAmB,EACxC,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,GAAE,WAAgB;IAc3B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;YACW,UAAU;IAmFxB;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC,MAAM,CAAC,IAAI,SAAS,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;YA2InD,sBAAsB;YAgBtB,sBAAsB;YA0DtB,kBAAkB;YAwClB,kBAAkB;IAoBhC;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;YAef,kBAAkB;IAahC,OAAO,CAAC,4BAA4B;YAuBtB,mBAAmB;YAwBnB,mBAAmB;IA4BjC;;;OAGG;YACW,uBAAuB;YA6CvB,kBAAkB;YAwBlB,cAAc;IAyD5B;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,4BAA4B;IA6DpC,OAAO,CAAC,gCAAgC;IAkCxC,OAAO,CAAC,eAAe;IAoBvB;;;;;;;;;;;;;;;;OAgBG;IACG,aAAa;IA0GnB;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgD3B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAWxB,2CAA2C;IAC3C,2BAA2B,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIlD,qCAAqC;IACrC,sBAAsB;IAKtB;;OAEG;IACH,OAAO;CAMR"}
|
|
@@ -39,6 +39,12 @@ export declare class MutationJournal {
|
|
|
39
39
|
message: string;
|
|
40
40
|
[key: string]: unknown;
|
|
41
41
|
}): void;
|
|
42
|
+
/**
|
|
43
|
+
* Drops an entry without confirming it — the "dismiss" affordance for a
|
|
44
|
+
* failed mutation the user chose not to retry. Unlike `confirm` this makes
|
|
45
|
+
* no claim the write reached the server.
|
|
46
|
+
*/
|
|
47
|
+
remove(id: string): void;
|
|
42
48
|
listPending(): {
|
|
43
49
|
id: string;
|
|
44
50
|
entry: Pending;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutationJournal.d.ts","sourceRoot":"","sources":["../../src/sync/mutationJournal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AAEzD,MAAM,WAAW,OAAO;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC5D,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAC,CAAiC;IACtD,OAAO,CAAC,kBAAkB,CAAU;IACpC,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAU;gBAEd,OAAO,CAAC,EAAE,sBAAsB;IAgB5C,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAU9B,GAAG,CAAC,EAAE,EAAE,MAAM;IAUd,OAAO,CAAC,EAAE,EAAE,MAAM;IAOlB,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;IAS1E,WAAW;YACkB,MAAM;eAAS,OAAO;;IAcnD,aAAa,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAStD,cAAc;IAWd,eAAe;IAOf,KAAK;IAKL,OAAO;IAKP,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,qBAAqB;CAI9B"}
|
|
1
|
+
{"version":3,"file":"mutationJournal.d.ts","sourceRoot":"","sources":["../../src/sync/mutationJournal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AAEzD,MAAM,WAAW,OAAO;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC5D,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAC,CAAiC;IACtD,OAAO,CAAC,kBAAkB,CAAU;IACpC,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAU;gBAEd,OAAO,CAAC,EAAE,sBAAsB;IAgB5C,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAU9B,GAAG,CAAC,EAAE,EAAE,MAAM;IAUd,OAAO,CAAC,EAAE,EAAE,MAAM;IAOlB,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;IAS1E;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM;IAIjB,WAAW;YACkB,MAAM;eAAS,OAAO;;IAcnD,aAAa,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAStD,cAAc;IAWd,eAAe;IAOf,KAAK;IAKL,OAAO;IAKP,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,qBAAqB;CAI9B"}
|
package/types/sync/types.d.ts
CHANGED
|
@@ -104,6 +104,18 @@ export interface CreateMutation<D extends FrappeDocData> {
|
|
|
104
104
|
* this single field.
|
|
105
105
|
*/
|
|
106
106
|
temporaryName?: string;
|
|
107
|
+
/**
|
|
108
|
+
* Custom server transport. When set, the engine performs the write via
|
|
109
|
+
* this function instead of `db.createDoc` — everything else (optimistic
|
|
110
|
+
* apply, journal, temp→real remap, rollback, ledger) is unchanged. Used
|
|
111
|
+
* for desk RPCs whose server-side behavior a plain REST insert cannot
|
|
112
|
+
* reproduce (e.g. `frappe.desk.form.utils.add_comment` inserts with
|
|
113
|
+
* ignore_permissions and extracts inline images). Must resolve with the
|
|
114
|
+
* created document (the ack the remap needs). Mutations carrying a
|
|
115
|
+
* transport skip request batching, and a journal replay after a page
|
|
116
|
+
* refresh falls back to the REST path (functions don't persist).
|
|
117
|
+
*/
|
|
118
|
+
execute?: () => Promise<FrappeDoc<D>>;
|
|
107
119
|
}
|
|
108
120
|
export interface UpdateMutation<Data extends FrappeDocData> {
|
|
109
121
|
mutationId: string;
|
|
@@ -114,6 +126,12 @@ export interface UpdateMutation<Data extends FrappeDocData> {
|
|
|
114
126
|
doctype: string;
|
|
115
127
|
name: string;
|
|
116
128
|
}[];
|
|
129
|
+
/**
|
|
130
|
+
* Custom server transport (see {@link CreateMutation.execute}). May
|
|
131
|
+
* resolve with the updated document to seed the cache; resolving void
|
|
132
|
+
* keeps the optimistic value until the realtime echo reconciles.
|
|
133
|
+
*/
|
|
134
|
+
execute?: () => Promise<FrappeDoc<Data> | void>;
|
|
117
135
|
}
|
|
118
136
|
export interface DeleteMutation<Data extends FrappeDocData> {
|
|
119
137
|
mutationId: string;
|
|
@@ -124,6 +142,8 @@ export interface DeleteMutation<Data extends FrappeDocData> {
|
|
|
124
142
|
doctype: string;
|
|
125
143
|
name: string;
|
|
126
144
|
}[];
|
|
145
|
+
/** Custom server transport (see {@link CreateMutation.execute}). */
|
|
146
|
+
execute?: () => Promise<void>;
|
|
127
147
|
}
|
|
128
148
|
export type Mutation<Data extends FrappeDocData> = CreateMutation<Data> | UpdateMutation<Data> | DeleteMutation<Data>;
|
|
129
149
|
export declare enum BackfillScope {
|