@ontahi/react 1.0.0-alpha.11 → 1.0.0-alpha.13
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 +154 -5
- package/dist/actions/fetch-operation-bridge-adapter.d.ts +10 -3
- package/dist/actions/fetch-operation-bridge-adapter.d.ts.map +1 -1
- package/dist/actions/fetch-operation-bridge-adapter.js +92 -29
- package/dist/actions/fetch-operation-bridge-adapter.js.map +1 -1
- package/dist/actions/operation-bridge.d.ts +2 -0
- package/dist/actions/operation-bridge.d.ts.map +1 -1
- package/dist/actions/operation-bridge.js.map +1 -1
- package/dist/graph/canonical-request-invalidation.d.ts +14 -0
- package/dist/graph/canonical-request-invalidation.d.ts.map +1 -0
- package/dist/graph/canonical-request-invalidation.js +42 -0
- package/dist/graph/canonical-request-invalidation.js.map +1 -0
- package/dist/graph/context.d.ts +10 -3
- package/dist/graph/context.d.ts.map +1 -1
- package/dist/graph/context.js +39 -4
- package/dist/graph/context.js.map +1 -1
- package/dist/graph/executor.d.ts +19 -1
- package/dist/graph/executor.d.ts.map +1 -1
- package/dist/graph/executor.js.map +1 -1
- package/dist/graph/fetch-graph-client.d.ts +20 -4
- package/dist/graph/fetch-graph-client.d.ts.map +1 -1
- package/dist/graph/fetch-graph-client.js +87 -17
- package/dist/graph/fetch-graph-client.js.map +1 -1
- package/dist/graph/fetch-graph-runtime.d.ts +9 -4
- package/dist/graph/fetch-graph-runtime.d.ts.map +1 -1
- package/dist/graph/fetch-graph-runtime.js +83 -6
- package/dist/graph/fetch-graph-runtime.js.map +1 -1
- package/dist/graph/fetch-runtime-transport.d.ts +4 -4
- package/dist/graph/fetch-runtime-transport.d.ts.map +1 -1
- package/dist/graph/fetch-runtime-transport.js +11 -14
- package/dist/graph/fetch-runtime-transport.js.map +1 -1
- package/dist/graph/graph-hooks.d.ts +3 -1
- package/dist/graph/graph-hooks.d.ts.map +1 -1
- package/dist/graph/graph-hooks.js +167 -40
- package/dist/graph/graph-hooks.js.map +1 -1
- package/dist/graph/index.d.ts +5 -0
- package/dist/graph/index.d.ts.map +1 -1
- package/dist/graph/index.js +5 -0
- package/dist/graph/index.js.map +1 -1
- package/dist/graph/model-command-hooks.d.ts +2 -0
- package/dist/graph/model-command-hooks.d.ts.map +1 -0
- package/dist/graph/model-command-hooks.js +9 -0
- package/dist/graph/model-command-hooks.js.map +1 -0
- package/dist/graph/operation-hooks.d.ts +4 -2
- package/dist/graph/operation-hooks.d.ts.map +1 -1
- package/dist/graph/operation-hooks.js +95 -11
- package/dist/graph/operation-hooks.js.map +1 -1
- package/dist/graph/operation-types.d.ts +5 -1
- package/dist/graph/operation-types.d.ts.map +1 -1
- package/dist/graph/operation-types.js.map +1 -1
- package/dist/graph/runtime-graph-client.d.ts +13 -0
- package/dist/graph/runtime-graph-client.d.ts.map +1 -0
- package/dist/graph/runtime-graph-client.js +35 -0
- package/dist/graph/runtime-graph-client.js.map +1 -0
- package/dist/graph/semantic-invalidation.d.ts +27 -0
- package/dist/graph/semantic-invalidation.d.ts.map +1 -0
- package/dist/graph/semantic-invalidation.js +55 -0
- package/dist/graph/semantic-invalidation.js.map +1 -0
- package/dist/graph/websocket-runtime-transport.d.ts +32 -0
- package/dist/graph/websocket-runtime-transport.d.ts.map +1 -0
- package/dist/graph/websocket-runtime-transport.js +605 -0
- package/dist/graph/websocket-runtime-transport.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { mayAffectGraphRead, } from '@ontahi/core/data-graph';
|
|
3
|
+
export const ONTAHI_GRAPH_READ_META_KEY = 'ontahi.graphRead';
|
|
4
|
+
export const withCanonicalGraphReadMeta = (meta, request, lifecycle = 'once') => ({
|
|
5
|
+
...meta,
|
|
6
|
+
[ONTAHI_GRAPH_READ_META_KEY]: { kind: 'canonical', request, lifecycle },
|
|
7
|
+
});
|
|
8
|
+
export const withUnknownGraphReadMeta = (meta, lifecycle = 'once') => ({
|
|
9
|
+
...meta,
|
|
10
|
+
[ONTAHI_GRAPH_READ_META_KEY]: { kind: 'unknown', lifecycle },
|
|
11
|
+
});
|
|
12
|
+
export const getCanonicalGraphReadFromMeta = (meta) => {
|
|
13
|
+
const dependency = meta?.[ONTAHI_GRAPH_READ_META_KEY];
|
|
14
|
+
return dependency &&
|
|
15
|
+
typeof dependency === 'object' &&
|
|
16
|
+
'kind' in dependency &&
|
|
17
|
+
dependency.kind === 'canonical' &&
|
|
18
|
+
'request' in dependency
|
|
19
|
+
? dependency.request
|
|
20
|
+
: undefined;
|
|
21
|
+
};
|
|
22
|
+
export const invalidateSemanticGraphReads = async (queryClient, committed, options) => {
|
|
23
|
+
const affected = queryClient
|
|
24
|
+
.getQueryCache()
|
|
25
|
+
.findAll()
|
|
26
|
+
.flatMap(query => {
|
|
27
|
+
const dependency = query.meta?.[ONTAHI_GRAPH_READ_META_KEY];
|
|
28
|
+
if (dependency &&
|
|
29
|
+
typeof dependency === 'object' &&
|
|
30
|
+
'lifecycle' in dependency &&
|
|
31
|
+
dependency.lifecycle === 'live' &&
|
|
32
|
+
query.state.fetchStatus === 'fetching') {
|
|
33
|
+
// Its observation already receives committed revisions from the runtime. Restarting the
|
|
34
|
+
// query here would create a second subscription and a redundant initial snapshot.
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
if (dependency &&
|
|
38
|
+
typeof dependency === 'object' &&
|
|
39
|
+
'kind' in dependency &&
|
|
40
|
+
dependency.kind === 'unknown') {
|
|
41
|
+
return committed.mutations.length > 0 ? [{ queryKey: query.queryKey }] : [];
|
|
42
|
+
}
|
|
43
|
+
const read = getCanonicalGraphReadFromMeta(query.meta);
|
|
44
|
+
return read && committed.mutations.some(mutation => mayAffectGraphRead(mutation, read))
|
|
45
|
+
? [{ queryKey: query.queryKey, request: read }]
|
|
46
|
+
: [];
|
|
47
|
+
});
|
|
48
|
+
const queryKeys = affected.map(item => item.queryKey);
|
|
49
|
+
if (options?.causedBy && options.associateRefreshes) {
|
|
50
|
+
options.associateRefreshes(affected.flatMap(item => (item.request ? [item.request] : [])), options.causedBy);
|
|
51
|
+
}
|
|
52
|
+
await Promise.all(queryKeys.map(queryKey => queryClient.invalidateQueries({ queryKey, exact: true })));
|
|
53
|
+
return { queryKeys };
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=semantic-invalidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-invalidation.js","sourceRoot":"","sources":["../../src/graph/semantic-invalidation.ts"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport {\n mayAffectGraphRead,\n type CommittedMutationSet,\n type GraphReadRequest,\n} from '@ontahi/core/data-graph';\nimport type { RuntimeProtocolGraphRefreshCause } from '@ontahi/core/runtime/protocol';\nimport type { QueryClient, QueryKey, QueryMeta } from '@tanstack/react-query';\n\nexport const ONTAHI_GRAPH_READ_META_KEY = 'ontahi.graphRead' as const;\n\ntype OntahiGraphReadMeta = QueryMeta & {\n readonly [ONTAHI_GRAPH_READ_META_KEY]:\n | {\n readonly kind: 'canonical';\n readonly request: GraphReadRequest;\n readonly lifecycle: 'once' | 'live';\n }\n | { readonly kind: 'unknown'; readonly lifecycle: 'once' | 'live' };\n};\n\nexport type SemanticGraphReadInvalidation = {\n readonly queryKeys: readonly QueryKey[];\n};\n\nexport type SemanticGraphReadInvalidationOptions = {\n readonly causedBy?: RuntimeProtocolGraphRefreshCause;\n readonly associateRefreshes?: (\n requests: readonly GraphReadRequest[],\n causedBy: RuntimeProtocolGraphRefreshCause,\n ) => void;\n};\n\nexport const withCanonicalGraphReadMeta = (\n meta: QueryMeta | undefined,\n request: GraphReadRequest,\n lifecycle: 'once' | 'live' = 'once',\n): OntahiGraphReadMeta => ({\n ...meta,\n [ONTAHI_GRAPH_READ_META_KEY]: { kind: 'canonical', request, lifecycle },\n});\n\nexport const withUnknownGraphReadMeta = (\n meta: QueryMeta | undefined,\n lifecycle: 'once' | 'live' = 'once',\n): OntahiGraphReadMeta => ({\n ...meta,\n [ONTAHI_GRAPH_READ_META_KEY]: { kind: 'unknown', lifecycle },\n});\n\nexport const getCanonicalGraphReadFromMeta = (\n meta: QueryMeta | undefined,\n): GraphReadRequest | undefined => {\n const dependency = meta?.[ONTAHI_GRAPH_READ_META_KEY];\n return dependency &&\n typeof dependency === 'object' &&\n 'kind' in dependency &&\n dependency.kind === 'canonical' &&\n 'request' in dependency\n ? (dependency.request as GraphReadRequest)\n : undefined;\n};\n\nexport const invalidateSemanticGraphReads = async (\n queryClient: QueryClient,\n committed: CommittedMutationSet,\n options?: SemanticGraphReadInvalidationOptions,\n): Promise<SemanticGraphReadInvalidation> => {\n const affected: Array<{ readonly queryKey: QueryKey; readonly request?: GraphReadRequest }> =\n queryClient\n .getQueryCache()\n .findAll()\n .flatMap(query => {\n const dependency = query.meta?.[ONTAHI_GRAPH_READ_META_KEY];\n if (\n dependency &&\n typeof dependency === 'object' &&\n 'lifecycle' in dependency &&\n dependency.lifecycle === 'live' &&\n query.state.fetchStatus === 'fetching'\n ) {\n // Its observation already receives committed revisions from the runtime. Restarting the\n // query here would create a second subscription and a redundant initial snapshot.\n return [];\n }\n if (\n dependency &&\n typeof dependency === 'object' &&\n 'kind' in dependency &&\n dependency.kind === 'unknown'\n ) {\n return committed.mutations.length > 0 ? [{ queryKey: query.queryKey }] : [];\n }\n const read = getCanonicalGraphReadFromMeta(query.meta);\n return read && committed.mutations.some(mutation => mayAffectGraphRead(mutation, read))\n ? [{ queryKey: query.queryKey, request: read }]\n : [];\n });\n const queryKeys = affected.map(item => item.queryKey);\n if (options?.causedBy && options.associateRefreshes) {\n options.associateRefreshes(\n affected.flatMap(item => (item.request ? [item.request] : [])),\n options.causedBy,\n );\n }\n\n await Promise.all(\n queryKeys.map(queryKey => queryClient.invalidateQueries({ queryKey, exact: true })),\n );\n\n return { queryKeys };\n};\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type DurableOperationObservationCapability, type EventObservationCapability, type GraphObservationCapability, type RuntimeTransport } from '@ontahi/core/runtime/protocol';
|
|
2
|
+
type WebSocketEvent = {
|
|
3
|
+
readonly data?: unknown;
|
|
4
|
+
readonly code?: number;
|
|
5
|
+
readonly reason?: string;
|
|
6
|
+
};
|
|
7
|
+
export type RuntimeWebSocket = {
|
|
8
|
+
readonly readyState: number;
|
|
9
|
+
send(data: string): void;
|
|
10
|
+
close(code?: number, reason?: string): void;
|
|
11
|
+
addEventListener(type: string, listener: (event: WebSocketEvent) => void): void;
|
|
12
|
+
removeEventListener(type: string, listener: (event: WebSocketEvent) => void): void;
|
|
13
|
+
};
|
|
14
|
+
export type WebSocketRuntimeTransportOptions = {
|
|
15
|
+
readonly url?: string;
|
|
16
|
+
readonly protocols?: string | string[];
|
|
17
|
+
readonly createWebSocket?: (url: string, protocols?: string | string[]) => RuntimeWebSocket;
|
|
18
|
+
readonly observationId?: () => string;
|
|
19
|
+
readonly handshakeTimeoutMs?: number;
|
|
20
|
+
/** Delay before restoring a durable Operation observation after a lost session. */
|
|
21
|
+
readonly reconnectDelayMs?: number;
|
|
22
|
+
readonly reportError?: (error: Error) => void;
|
|
23
|
+
};
|
|
24
|
+
export type WebSocketRuntimeTransport = RuntimeTransport<never> & {
|
|
25
|
+
readonly durableOperation: DurableOperationObservationCapability;
|
|
26
|
+
readonly graph: GraphObservationCapability<never>;
|
|
27
|
+
readonly events: EventObservationCapability<never>;
|
|
28
|
+
close(): void;
|
|
29
|
+
};
|
|
30
|
+
export declare const createWebSocketRuntimeTransport: ({ url, protocols, createWebSocket, observationId, handshakeTimeoutMs, reconnectDelayMs, reportError, }?: WebSocketRuntimeTransportOptions) => WebSocketRuntimeTransport;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=websocket-runtime-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-runtime-transport.d.ts","sourceRoot":"","sources":["../../src/graph/websocket-runtime-transport.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,KAAK,qCAAqC,EAC1C,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAK/B,KAAK,gBAAgB,EAEtB,MAAM,+BAA+B,CAAC;AAGvC,KAAK,cAAc,GAAG;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI,CAAC;IAChF,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI,CAAC;CACpF,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,gBAAgB,CAAC;IAC5F,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC;IACtC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,mFAAmF;IACnF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG;IAChE,QAAQ,CAAC,gBAAgB,EAAE,qCAAqC,CAAC;IACjE,QAAQ,CAAC,KAAK,EAAE,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAC,KAAK,CAAC,CAAC;IACnD,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAkJF,eAAO,MAAM,+BAA+B,GAAI,yGAQ7C,gCAAqC,KAAG,yBA2iB1C,CAAC"}
|