@ontahi/react 0.1.0-alpha.4 → 0.1.0-alpha.6
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 +92 -2
- package/dist/actions/operation-bridge.d.ts.map +1 -1
- package/dist/actions/operation-bridge.js +1 -1
- package/dist/actions/operation-bridge.js.map +1 -1
- package/dist/graph/context.d.ts +6 -1
- package/dist/graph/context.d.ts.map +1 -1
- package/dist/graph/context.js +16 -6
- package/dist/graph/context.js.map +1 -1
- package/dist/graph/executor.d.ts +12 -7
- 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 +33 -0
- package/dist/graph/fetch-graph-client.d.ts.map +1 -0
- package/dist/graph/fetch-graph-client.js +50 -0
- package/dist/graph/fetch-graph-client.js.map +1 -0
- package/dist/graph/fetch-graph-read-executor.d.ts +5 -0
- package/dist/graph/fetch-graph-read-executor.d.ts.map +1 -0
- package/dist/graph/fetch-graph-read-executor.js +4 -0
- package/dist/graph/fetch-graph-read-executor.js.map +1 -0
- package/dist/graph/fetch-graph-runtime.d.ts +16 -0
- package/dist/graph/fetch-graph-runtime.d.ts.map +1 -0
- package/dist/graph/fetch-graph-runtime.js +61 -0
- package/dist/graph/fetch-graph-runtime.js.map +1 -0
- package/dist/graph/graph-hooks.d.ts +4 -2
- package/dist/graph/graph-hooks.d.ts.map +1 -1
- package/dist/graph/graph-hooks.js +59 -16
- package/dist/graph/graph-hooks.js.map +1 -1
- package/dist/graph/index.d.ts +2 -0
- package/dist/graph/index.d.ts.map +1 -1
- package/dist/graph/index.js +2 -0
- package/dist/graph/index.js.map +1 -1
- package/dist/graph/operation-hooks.d.ts +2 -1
- package/dist/graph/operation-hooks.d.ts.map +1 -1
- package/dist/graph/operation-hooks.js +31 -13
- package/dist/graph/operation-hooks.js.map +1 -1
- package/dist/graph/operation-types.d.ts +7 -1
- package/dist/graph/operation-types.d.ts.map +1 -1
- package/dist/graph/operation-types.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { createRemoteDataGraphRuntime, isGraphCommandProtocolError, isGraphReadProtocolError, } from '@ontahi/core/data-graph';
|
|
3
|
+
import { runBrowserEffect } from '@ontahi/core/runtime/browser';
|
|
4
|
+
const DEFAULT_GRAPH_READ_ENDPOINT = '/graph/reads';
|
|
5
|
+
const DEFAULT_GRAPH_COMMAND_ENDPOINT = '/graph/commands';
|
|
6
|
+
export const createFetchGraphReadCapability = ({ endpoint = DEFAULT_GRAPH_READ_ENDPOINT, commandEndpoint = DEFAULT_GRAPH_COMMAND_ENDPOINT, fetch: fetchRequest = globalThis.fetch, requestInit, } = {}) => {
|
|
7
|
+
const transport = async (request, options) => {
|
|
8
|
+
const init = requestInit?.(options) ?? {};
|
|
9
|
+
const headers = new Headers(init.headers);
|
|
10
|
+
if (!headers.has('content-type'))
|
|
11
|
+
headers.set('content-type', 'application/json');
|
|
12
|
+
const response = await fetchRequest(endpoint, {
|
|
13
|
+
...init,
|
|
14
|
+
method: 'POST',
|
|
15
|
+
headers,
|
|
16
|
+
credentials: init.credentials ?? 'same-origin',
|
|
17
|
+
body: JSON.stringify(request),
|
|
18
|
+
});
|
|
19
|
+
try {
|
|
20
|
+
const payload = await response.json();
|
|
21
|
+
if (!response.ok && !isGraphReadProtocolError(payload)) {
|
|
22
|
+
throw new Error(`Graph read request failed with status ${response.status}.`);
|
|
23
|
+
}
|
|
24
|
+
return payload;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
throw new Error(`Graph read request failed with status ${response.status}.`);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const commandTransport = async (request, options) => {
|
|
31
|
+
const init = requestInit?.(options) ?? {};
|
|
32
|
+
const headers = new Headers(init.headers);
|
|
33
|
+
if (!headers.has('content-type'))
|
|
34
|
+
headers.set('content-type', 'application/json');
|
|
35
|
+
const response = await fetchRequest(commandEndpoint, {
|
|
36
|
+
...init,
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers,
|
|
39
|
+
credentials: init.credentials ?? 'same-origin',
|
|
40
|
+
body: JSON.stringify(request),
|
|
41
|
+
});
|
|
42
|
+
const payload = await response.json();
|
|
43
|
+
if (!response.ok && !isGraphCommandProtocolError(payload)) {
|
|
44
|
+
throw new Error(`Graph Command request failed with status ${response.status}.`);
|
|
45
|
+
}
|
|
46
|
+
return payload;
|
|
47
|
+
};
|
|
48
|
+
const runtime = createRemoteDataGraphRuntime({ transport, commandTransport });
|
|
49
|
+
return {
|
|
50
|
+
runtime,
|
|
51
|
+
graphExecutor: {
|
|
52
|
+
get: (read, params, options) => runBrowserEffect(runtime.get(read, params, options)),
|
|
53
|
+
run: (read, params, options) => runBrowserEffect(runtime.run(read, params, options)),
|
|
54
|
+
count: (read, params, options) => runBrowserEffect(runtime.count(read, params, options)),
|
|
55
|
+
runCommand: (command, options) => runBrowserEffect(runtime.runCommand(command, options)),
|
|
56
|
+
runRelationshipCommand: (command, options) => runBrowserEffect(runtime.runRelationshipCommand(command, options)),
|
|
57
|
+
runManyToManyRelationshipCommand: (command, options) => runBrowserEffect(runtime.runManyToManyRelationshipCommand(command, options)),
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=fetch-graph-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-graph-runtime.js","sourceRoot":"","sources":["../../src/graph/fetch-graph-runtime.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,wBAAwB,GAOzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AA4BhE,MAAM,2BAA2B,GAAG,cAAc,CAAC;AACnD,MAAM,8BAA8B,GAAG,iBAAiB,CAAC;AAEzD,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAuB,EACnE,QAAQ,GAAG,2BAA2B,EACtC,eAAe,GAAG,8BAA8B,EAChD,KAAK,EAAE,YAAY,GAAG,UAAU,CAAC,KAAK,EACtC,WAAW,MACgC,EAAE,EAAsC,EAAE;IACrF,MAAM,SAAS,GAAuC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAC/E,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAElF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE;YAC5C,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO;YACP,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,aAAa;YAC9C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,OAAO,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvD,MAAM,IAAI,KAAK,CAAC,yCAAyC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/E,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,yCAAyC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC;IACF,MAAM,gBAAgB,GAA0C,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QACzF,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAClF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE;YACnD,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO;YACP,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,aAAa;YAC9C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;QACH,MAAM,OAAO,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,4CAA4C,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,4BAA4B,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAE9E,OAAO;QACL,OAAO;QACP,aAAa,EAAE;YACb,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACpF,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACpF,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACxF,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACxF,sBAAsB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAC3C,gBAAgB,CAAC,OAAO,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACpE,gCAAgC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CACrD,gBAAgB,CAAC,OAAO,CAAC,gCAAgC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SAC/E;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["'use client';\n\nimport {\n createRemoteDataGraphRuntime,\n isGraphCommandProtocolError,\n isGraphReadProtocolError,\n type DataGraphExecutionRuntime,\n type RemoteDataGraphError,\n type RemoteGraphCommandTransport,\n type RemoteGraphReadTransport,\n type ManyToManyRelationshipCommandExecutionRuntime,\n type RelationshipCommandExecutionRuntime,\n} from '@ontahi/core/data-graph';\nimport { runBrowserEffect } from '@ontahi/core/runtime/browser';\n\nimport type { ReactGraphExecutor } from './executor.js';\n\nexport type FetchGraphReadExecutorOptions<TOptions = undefined> = {\n endpoint?: string;\n commandEndpoint?: string;\n fetch?: typeof globalThis.fetch;\n requestInit?: (options?: TOptions) => Omit<RequestInit, 'body' | 'method'>;\n};\n\nexport type FetchGraphRuntime<TOptions = undefined> = DataGraphExecutionRuntime<\n RemoteDataGraphError,\n TOptions,\n TOptions,\n RemoteDataGraphError\n>;\nexport type FetchRelationshipRuntime<TOptions = undefined> = RelationshipCommandExecutionRuntime<\n RemoteDataGraphError,\n TOptions\n> &\n ManyToManyRelationshipCommandExecutionRuntime<RemoteDataGraphError, TOptions>;\n\nexport type FetchGraphReadCapability<TOptions = undefined> = {\n runtime: FetchGraphRuntime<TOptions> & FetchRelationshipRuntime<TOptions>;\n graphExecutor: ReactGraphExecutor<TOptions, TOptions>;\n};\n\nconst DEFAULT_GRAPH_READ_ENDPOINT = '/graph/reads';\nconst DEFAULT_GRAPH_COMMAND_ENDPOINT = '/graph/commands';\n\nexport const createFetchGraphReadCapability = <TOptions = undefined>({\n endpoint = DEFAULT_GRAPH_READ_ENDPOINT,\n commandEndpoint = DEFAULT_GRAPH_COMMAND_ENDPOINT,\n fetch: fetchRequest = globalThis.fetch,\n requestInit,\n}: FetchGraphReadExecutorOptions<TOptions> = {}): FetchGraphReadCapability<TOptions> => {\n const transport: RemoteGraphReadTransport<TOptions> = async (request, options) => {\n const init = requestInit?.(options) ?? {};\n const headers = new Headers(init.headers);\n if (!headers.has('content-type')) headers.set('content-type', 'application/json');\n\n const response = await fetchRequest(endpoint, {\n ...init,\n method: 'POST',\n headers,\n credentials: init.credentials ?? 'same-origin',\n body: JSON.stringify(request),\n });\n\n try {\n const payload: unknown = await response.json();\n if (!response.ok && !isGraphReadProtocolError(payload)) {\n throw new Error(`Graph read request failed with status ${response.status}.`);\n }\n return payload;\n } catch {\n throw new Error(`Graph read request failed with status ${response.status}.`);\n }\n };\n const commandTransport: RemoteGraphCommandTransport<TOptions> = async (request, options) => {\n const init = requestInit?.(options) ?? {};\n const headers = new Headers(init.headers);\n if (!headers.has('content-type')) headers.set('content-type', 'application/json');\n const response = await fetchRequest(commandEndpoint, {\n ...init,\n method: 'POST',\n headers,\n credentials: init.credentials ?? 'same-origin',\n body: JSON.stringify(request),\n });\n const payload: unknown = await response.json();\n if (!response.ok && !isGraphCommandProtocolError(payload)) {\n throw new Error(`Graph Command request failed with status ${response.status}.`);\n }\n return payload;\n };\n const runtime = createRemoteDataGraphRuntime({ transport, commandTransport });\n\n return {\n runtime,\n graphExecutor: {\n get: (read, params, options) => runBrowserEffect(runtime.get(read, params, options)),\n run: (read, params, options) => runBrowserEffect(runtime.run(read, params, options)),\n count: (read, params, options) => runBrowserEffect(runtime.count(read, params, options)),\n runCommand: (command, options) => runBrowserEffect(runtime.runCommand(command, options)),\n runRelationshipCommand: (command, options) =>\n runBrowserEffect(runtime.runRelationshipCommand(command, options)),\n runManyToManyRelationshipCommand: (command, options) =>\n runBrowserEffect(runtime.runManyToManyRelationshipCommand(command, options)),\n },\n };\n};\n"]}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { type ManyToManyRelationshipCommand, type RelationshipDelta } from '@ontahi/core/data-graph';
|
|
1
2
|
import { type UseMutationResult, type UseQueryResult } from '@tanstack/react-query';
|
|
2
|
-
import type { GraphCommandBuilder, GraphCommandHookOptions, GraphOperationLike, GraphOperationClientInput, GraphOperationResult, GraphQueryData, GraphQueryMode, GraphQueryOptions, GraphReadSource
|
|
3
|
-
export declare function useGraphQuery<TRead
|
|
3
|
+
import type { GraphCommandBuilder, GraphCommandHookOptions, GraphOperationLike, GraphOperationClientInput, GraphOperationResult, GraphQueryData, GraphQueryMode, GraphQueryOptions, GraphReadSource } from './executor.js';
|
|
4
|
+
export declare function useGraphQuery<TRead extends GraphReadSource<any>, TMode extends GraphQueryMode = 'run', TReadOptions = unknown, TCommandOptions = TReadOptions>(read: TRead, options?: GraphQueryOptions<TRead, TMode, TReadOptions>): UseQueryResult<GraphQueryData<TRead, TMode>, Error>;
|
|
4
5
|
export declare function useGraphCommand<TVariables, TResult = void, TContext = unknown, TReadOptions = unknown, TCommandOptions = TReadOptions>(buildCommand: GraphCommandBuilder<TVariables, TResult>, options?: GraphCommandHookOptions<TResult, TVariables, TContext, TCommandOptions>): UseMutationResult<TResult, Error, TVariables, TContext>;
|
|
6
|
+
export declare function useManyToManyRelationshipCommand<TVariables, TContext = unknown, TReadOptions = unknown, TCommandOptions = TReadOptions>(buildCommand: (variables: TVariables) => ManyToManyRelationshipCommand, options?: GraphCommandHookOptions<RelationshipDelta, TVariables, TContext, TCommandOptions>): UseMutationResult<RelationshipDelta, Error, TVariables, TContext>;
|
|
5
7
|
export declare function useGraphOperation<TOperation extends GraphOperationLike<any, any>, TContext = unknown, TReadOptions = unknown, TCommandOptions = TReadOptions>(operation: TOperation, options?: GraphCommandHookOptions<GraphOperationResult<TOperation>, GraphOperationClientInput<TOperation>, TContext, TCommandOptions>): UseMutationResult<GraphOperationResult<TOperation>, Error, GraphOperationClientInput<TOperation>, TContext>;
|
|
6
8
|
//# sourceMappingURL=graph-hooks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-hooks.d.ts","sourceRoot":"","sources":["../../src/graph/graph-hooks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph-hooks.d.ts","sourceRoot":"","sources":["../../src/graph/graph-hooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,6BAA6B,EAClC,KAAK,iBAAiB,EAGvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAGV,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,eAAe,EAGhB,MAAM,eAAe,CAAC;AAgEvB,wBAAgB,aAAa,CAC3B,KAAK,SAAS,eAAe,CAAC,GAAG,CAAC,EAClC,KAAK,SAAS,cAAc,GAAG,KAAK,EACpC,YAAY,GAAG,OAAO,EACtB,eAAe,GAAG,YAAY,EAE9B,IAAI,EAAE,KAAK,EACX,OAAO,CAAC,EAAE,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,GACtD,cAAc,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CA6BrD;AAED,wBAAgB,eAAe,CAC7B,UAAU,EACV,OAAO,GAAG,IAAI,EACd,QAAQ,GAAG,OAAO,EAClB,YAAY,GAAG,OAAO,EACtB,eAAe,GAAG,YAAY,EAE9B,YAAY,EAAE,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,EACtD,OAAO,CAAC,EAAE,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,CAAC,GAChF,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAoBzD;AAED,wBAAgB,gCAAgC,CAC9C,UAAU,EACV,QAAQ,GAAG,OAAO,EAClB,YAAY,GAAG,OAAO,EACtB,eAAe,GAAG,YAAY,EAE9B,YAAY,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,6BAA6B,EACtE,OAAO,CAAC,EAAE,uBAAuB,CAAC,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,CAAC,GAC1F,iBAAiB,CAAC,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAuBnE;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,SAAS,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC/C,QAAQ,GAAG,OAAO,EAClB,YAAY,GAAG,OAAO,EACtB,eAAe,GAAG,YAAY,EAE9B,SAAS,EAAE,UAAU,EACrB,OAAO,CAAC,EAAE,uBAAuB,CAC/B,oBAAoB,CAAC,UAAU,CAAC,EAChC,yBAAyB,CAAC,UAAU,CAAC,EACrC,QAAQ,EACR,eAAe,CAChB,GACA,iBAAiB,CAClB,oBAAoB,CAAC,UAAU,CAAC,EAChC,KAAK,EACL,yBAAyB,CAAC,UAAU,CAAC,EACrC,QAAQ,CACT,CAiBA"}
|
|
@@ -1,35 +1,58 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { normalizeGraphSchemaClientInput, } from '@ontahi/core/data-graph';
|
|
2
|
+
import { isGraphReadExpression, normalizeGraphSchemaClientInput, resolveQuerySpec, toGraphReadRequest, } from '@ontahi/core/data-graph';
|
|
3
|
+
import { executionIdentityCacheKey } from '@ontahi/core/runtime/identity';
|
|
3
4
|
import { useMutation, useQuery, useQueryClient, } from '@tanstack/react-query';
|
|
4
|
-
import { useGraphExecutor } from './context.js';
|
|
5
|
+
import { useExecutionIdentity, useGraphExecutor } from './context.js';
|
|
5
6
|
const isQueryOrView = (read) => 'kind' in read;
|
|
6
7
|
const isBuildableRead = (read) => typeof read.build === 'function';
|
|
7
8
|
const isNamedView = (read) => 'kind' in read && read.kind === 'view';
|
|
8
9
|
const resolveGraphRead = (read) => (isQueryOrView(read) ? read : isBuildableRead(read) ? read.build() : read);
|
|
9
10
|
const resolveGraphCommand = (command) => ('build' in command ? command.build() : command);
|
|
10
|
-
const
|
|
11
|
+
const intentFromMode = (mode) => mode === 'get' ? 'first' : mode === 'run' ? 'many' : mode;
|
|
12
|
+
const modeFromIntent = (intent) => intent === 'many' ? 'run' : intent === 'count' ? 'count' : 'get';
|
|
13
|
+
const deriveGraphQueryKey = (read, intent, params, identityKey) => {
|
|
11
14
|
const resolved = isQueryOrView(read) ? read : resolveGraphRead(read);
|
|
12
15
|
if (isNamedView(resolved)) {
|
|
13
|
-
return [
|
|
16
|
+
return [
|
|
17
|
+
resolved.root.name,
|
|
18
|
+
'graph-read',
|
|
19
|
+
identityKey,
|
|
20
|
+
intent,
|
|
21
|
+
'view',
|
|
22
|
+
resolved.name,
|
|
23
|
+
params ?? null,
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const request = toGraphReadRequest(resolveQuerySpec(resolved, params), modeFromIntent(intent));
|
|
28
|
+
return [request.selection.entityName, 'graph-read', identityKey, intent, request];
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
const message = 'useGraphQuery could not infer a transport-safe queryKey; provide queryKey explicitly';
|
|
32
|
+
throw new Error(`${message}: ${error instanceof Error ? error.message : String(error)}`);
|
|
14
33
|
}
|
|
15
|
-
throw new Error('useGraphQuery requires queryKey for unnamed selections or query specs');
|
|
16
34
|
};
|
|
17
35
|
export function useGraphQuery(read, options) {
|
|
18
36
|
const graphExecutor = useGraphExecutor();
|
|
37
|
+
const identity = useExecutionIdentity();
|
|
38
|
+
const expression = isGraphReadExpression(read) ? read : undefined;
|
|
39
|
+
const source = (expression?.read ?? read);
|
|
40
|
+
const mode = options?.mode ?? 'run';
|
|
41
|
+
const intent = expression?.intent ?? intentFromMode(mode);
|
|
19
42
|
return useQuery({
|
|
20
43
|
...options,
|
|
21
|
-
queryKey: options
|
|
22
|
-
deriveGraphQueryKey(
|
|
44
|
+
queryKey: options?.queryKey ??
|
|
45
|
+
deriveGraphQueryKey(source, intent, options?.params, executionIdentityCacheKey(identity)),
|
|
23
46
|
queryFn: async () => {
|
|
24
|
-
const resolved = resolveGraphRead(
|
|
25
|
-
const params = options
|
|
26
|
-
const value =
|
|
27
|
-
? await graphExecutor.
|
|
28
|
-
:
|
|
29
|
-
? await graphExecutor.
|
|
30
|
-
:
|
|
31
|
-
? await graphExecutor.
|
|
32
|
-
:
|
|
47
|
+
const resolved = resolveGraphRead(source);
|
|
48
|
+
const params = options?.params;
|
|
49
|
+
const value = intent === 'many'
|
|
50
|
+
? await graphExecutor.run(resolved, params, options?.runtimeOptions)
|
|
51
|
+
: intent === 'count'
|
|
52
|
+
? await graphExecutor.count(resolved, params, options?.runtimeOptions)
|
|
53
|
+
: intent === 'exists'
|
|
54
|
+
? (await graphExecutor.get(resolved, params, options?.runtimeOptions)) != null
|
|
55
|
+
: await graphExecutor.get(resolved, params, options?.runtimeOptions);
|
|
33
56
|
return value;
|
|
34
57
|
},
|
|
35
58
|
});
|
|
@@ -49,6 +72,26 @@ export function useGraphCommand(buildCommand, options) {
|
|
|
49
72
|
},
|
|
50
73
|
});
|
|
51
74
|
}
|
|
75
|
+
export function useManyToManyRelationshipCommand(buildCommand, options) {
|
|
76
|
+
const graphExecutor = useGraphExecutor();
|
|
77
|
+
const queryClient = useQueryClient();
|
|
78
|
+
return useMutation({
|
|
79
|
+
...options,
|
|
80
|
+
mutationKey: options?.mutationKey,
|
|
81
|
+
mutationFn: variables => {
|
|
82
|
+
if (!graphExecutor.runManyToManyRelationshipCommand) {
|
|
83
|
+
throw new Error('Graph executor does not support many-to-many Relationship Commands.');
|
|
84
|
+
}
|
|
85
|
+
return graphExecutor.runManyToManyRelationshipCommand(buildCommand(variables), options?.runtimeOptions);
|
|
86
|
+
},
|
|
87
|
+
onSuccess: async (data, variables, onMutateResult, context) => {
|
|
88
|
+
for (const queryKey of options?.invalidateQueryKeys ?? []) {
|
|
89
|
+
await queryClient.invalidateQueries({ queryKey });
|
|
90
|
+
}
|
|
91
|
+
await options?.onSuccess?.(data, variables, onMutateResult, context);
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
}
|
|
52
95
|
export function useGraphOperation(operation, options) {
|
|
53
96
|
const buildCommand = (variables) => operation.run((operation.input
|
|
54
97
|
? normalizeGraphSchemaClientInput(operation.input, variables)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-hooks.js","sourceRoot":"","sources":["../../src/graph/graph-hooks.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EACL,+BAA+B,GAIhC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,WAAW,EACX,QAAQ,EACR,cAAc,GAIf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAiBhD,MAAM,aAAa,GAAG,CACpB,IAA8B,EACK,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC;AAEvD,MAAM,eAAe,GAAG,CAAU,IAA8B,EAAkC,EAAE,CAClG,OAAQ,IAA+B,CAAC,KAAK,KAAK,UAAU,CAAC;AAE/D,MAAM,WAAW,GAAG,CAClB,IAA+B,EACY,EAAE,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAEvF,MAAM,gBAAgB,GAAG,CAAU,IAA8B,EAAE,EAAE,CACnE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAGxE,CAAC;AAEJ,MAAM,mBAAmB,GAAG,CAAU,OAA6B,EAAE,EAAE,CACrE,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAwC,CAAC;AAE1F,MAAM,mBAAmB,GAAG,CAC1B,IAAwC,EACxC,IAAW,EACX,MAAqC,EACrC,cAAwC,EAC9B,EAAE;IACZ,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAErE,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,cAAc,IAAI,IAAI,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;AAC3F,CAAC,CAAC;AAEF,MAAM,UAAU,aAAa,CAM3B,IAAwC,EACxC,OAAsD;IAEtD,MAAM,aAAa,GAAG,gBAAgB,EAAiC,CAAC;IAExE,OAAO,QAAQ,CAAC;QACd,GAAG,OAAO;QACV,QAAQ,EACN,OAAO,CAAC,QAAQ;YAChB,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC;QACjF,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAa,CAAC;YAErC,MAAM,KAAK,GACT,OAAO,CAAC,IAAI,KAAK,KAAK;gBACpB,CAAC,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC;gBACnE,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK;oBACtB,CAAC,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC;oBACnE,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;wBACxB,CAAC,CAAC,MAAM,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC;wBACrE,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC;YAEtF,OAAO,KAAqC,CAAC;QAC/C,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAO7B,YAAsD,EACtD,OAAiF;IAEjF,MAAM,aAAa,GAAG,gBAAgB,EAAiC,CAAC;IACxE,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,OAAO,WAAW,CAAC;QACjB,GAAG,OAAO;QACV,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,UAAU,EAAE,SAAS,CAAC,EAAE,CACtB,aAAa,CAAC,UAAU,CACtB,mBAAmB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAC5C,OAAO,EAAE,cAAc,CACxB;QACH,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE;YAC5D,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,mBAAmB,IAAI,EAAE,EAAE,CAAC;gBAC1D,MAAM,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpD,CAAC;YAED,MAAM,OAAO,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QACvE,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAM/B,SAAqB,EACrB,OAKC;IASD,MAAM,YAAY,GAAG,CAAC,SAAqB,EAAE,EAAE,CAC7C,SAAS,CAAC,GAAG,CACX,CAAC,SAAS,CAAC,KAAK;QACd,CAAC,CAAC,+BAA+B,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;QAC7D,CAAC,CAAC,SAAS,CAAU,CACxB,CAAC;IAEJ,OAAO,eAAe,CACpB,YAAY,EACZ;QACE,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAAE,CAAC;QACtE,GAAG,OAAO;KACX,CACF,CAAC;AACJ,CAAC","sourcesContent":["'use client';\n\nimport {\n normalizeGraphSchemaClientInput,\n type GraphCommandSpec,\n type QueryOrView,\n type ViewDefinition,\n} from '@ontahi/core/data-graph';\nimport {\n useMutation,\n useQuery,\n useQueryClient,\n type QueryKey,\n type UseMutationResult,\n type UseQueryResult,\n} from '@tanstack/react-query';\n\nimport { useGraphExecutor } from './context.js';\nimport type {\n BuildableRead,\n CommandLike,\n GraphCommandBuilder,\n GraphCommandHookOptions,\n GraphOperationLike,\n GraphOperationClientInput,\n GraphOperationResult,\n GraphQueryData,\n GraphQueryMode,\n GraphQueryOptions,\n GraphReadSource,\n ReadParams,\n ReadResult,\n} from './executor.js';\n\nconst isQueryOrView = <TResult>(\n read: GraphReadSource<TResult>,\n): read is QueryOrView<any, TResult> => 'kind' in read;\n\nconst isBuildableRead = <TResult>(read: GraphReadSource<TResult>): read is BuildableRead<TResult> =>\n typeof (read as BuildableRead<TResult>).build === 'function';\n\nconst isNamedView = <TResult>(\n read: QueryOrView<any, TResult>,\n): read is ViewDefinition<any, any, TResult> => 'kind' in read && read.kind === 'view';\n\nconst resolveGraphRead = <TResult>(read: GraphReadSource<TResult>) =>\n (isQueryOrView(read) ? read : isBuildableRead(read) ? read.build() : read) as QueryOrView<\n any,\n TResult\n >;\n\nconst resolveGraphCommand = <TResult>(command: CommandLike<TResult>) =>\n ('build' in command ? command.build() : command) as GraphCommandSpec<any, any, TResult>;\n\nconst deriveGraphQueryKey = <TRead, TMode extends GraphQueryMode, TReadOptions>(\n read: GraphReadSource<ReadResult<TRead>>,\n mode: TMode,\n params: ReadParams<TRead> | undefined,\n runtimeOptions: TReadOptions | undefined,\n): QueryKey => {\n const resolved = isQueryOrView(read) ? read : resolveGraphRead(read);\n\n if (isNamedView(resolved)) {\n return ['graph', mode, resolved.name, params ?? null, runtimeOptions ?? null];\n }\n\n throw new Error('useGraphQuery requires queryKey for unnamed selections or query specs');\n};\n\nexport function useGraphQuery<\n TRead,\n TMode extends GraphQueryMode,\n TReadOptions = unknown,\n TCommandOptions = TReadOptions,\n>(\n read: GraphReadSource<ReadResult<TRead>>,\n options: GraphQueryOptions<TRead, TMode, TReadOptions>,\n): UseQueryResult<GraphQueryData<TRead, TMode>, Error> {\n const graphExecutor = useGraphExecutor<TReadOptions, TCommandOptions>();\n\n return useQuery({\n ...options,\n queryKey:\n options.queryKey ??\n deriveGraphQueryKey(read, options.mode, options.params, options.runtimeOptions),\n queryFn: async () => {\n const resolved = resolveGraphRead(read);\n const params = options.params as any;\n\n const value =\n options.mode === 'get'\n ? await graphExecutor.get(resolved, params, options.runtimeOptions)\n : options.mode === 'run'\n ? await graphExecutor.run(resolved, params, options.runtimeOptions)\n : options.mode === 'count'\n ? await graphExecutor.count(resolved, params, options.runtimeOptions)\n : (await graphExecutor.get(resolved, params, options.runtimeOptions)) != null;\n\n return value as GraphQueryData<TRead, TMode>;\n },\n });\n}\n\nexport function useGraphCommand<\n TVariables,\n TResult = void,\n TContext = unknown,\n TReadOptions = unknown,\n TCommandOptions = TReadOptions,\n>(\n buildCommand: GraphCommandBuilder<TVariables, TResult>,\n options?: GraphCommandHookOptions<TResult, TVariables, TContext, TCommandOptions>,\n): UseMutationResult<TResult, Error, TVariables, TContext> {\n const graphExecutor = useGraphExecutor<TReadOptions, TCommandOptions>();\n const queryClient = useQueryClient();\n\n return useMutation({\n ...options,\n mutationKey: options?.mutationKey,\n mutationFn: variables =>\n graphExecutor.runCommand(\n resolveGraphCommand(buildCommand(variables)),\n options?.runtimeOptions,\n ),\n onSuccess: async (data, variables, onMutateResult, context) => {\n for (const queryKey of options?.invalidateQueryKeys ?? []) {\n await queryClient.invalidateQueries({ queryKey });\n }\n\n await options?.onSuccess?.(data, variables, onMutateResult, context);\n },\n });\n}\n\nexport function useGraphOperation<\n TOperation extends GraphOperationLike<any, any>,\n TContext = unknown,\n TReadOptions = unknown,\n TCommandOptions = TReadOptions,\n>(\n operation: TOperation,\n options?: GraphCommandHookOptions<\n GraphOperationResult<TOperation>,\n GraphOperationClientInput<TOperation>,\n TContext,\n TCommandOptions\n >,\n): UseMutationResult<\n GraphOperationResult<TOperation>,\n Error,\n GraphOperationClientInput<TOperation>,\n TContext\n> {\n type TVariables = GraphOperationClientInput<TOperation>;\n type TResult = GraphOperationResult<TOperation>;\n const buildCommand = (variables: TVariables) =>\n operation.run(\n (operation.input\n ? normalizeGraphSchemaClientInput(operation.input, variables)\n : variables) as never,\n );\n\n return useGraphCommand<TVariables, TResult, TContext, TReadOptions, TCommandOptions>(\n buildCommand,\n {\n mutationKey: options?.mutationKey ?? ['graph-operation', operation.id],\n ...options,\n },\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"graph-hooks.js","sourceRoot":"","sources":["../../src/graph/graph-hooks.ts"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport {\n isGraphReadExpression,\n normalizeGraphSchemaClientInput,\n resolveQuerySpec,\n toGraphReadRequest,\n type GraphCommandSpec,\n type GraphReadIntent,\n type ManyToManyRelationshipCommand,\n type RelationshipDelta,\n type QueryOrView,\n type ViewDefinition,\n} from '@ontahi/core/data-graph';\nimport { executionIdentityCacheKey } from '@ontahi/core/runtime/identity';\nimport {\n useMutation,\n useQuery,\n useQueryClient,\n type QueryKey,\n type UseMutationResult,\n type UseQueryResult,\n} from '@tanstack/react-query';\n\nimport { useExecutionIdentity, useGraphExecutor } from './context.js';\nimport type {\n BuildableRead,\n CommandLike,\n GraphCommandBuilder,\n GraphCommandHookOptions,\n GraphOperationLike,\n GraphOperationClientInput,\n GraphOperationResult,\n GraphQueryData,\n GraphQueryMode,\n GraphQueryOptions,\n GraphReadSource,\n ReadParams,\n ReadResult,\n} from './executor.js';\n\nconst isQueryOrView = <TResult>(\n read: Exclude<GraphReadSource<TResult>, { kind: 'graph-read-expression' }>,\n): read is QueryOrView<any, TResult> => 'kind' in read;\n\nconst isBuildableRead = <TResult>(\n read: Exclude<GraphReadSource<TResult>, { kind: 'graph-read-expression' }>,\n): read is BuildableRead<TResult> => typeof (read as BuildableRead<TResult>).build === 'function';\n\nconst isNamedView = <TResult>(\n read: QueryOrView<any, TResult>,\n): read is ViewDefinition<any, any, TResult> => 'kind' in read && read.kind === 'view';\n\ntype PlainGraphReadSource<TResult> = Exclude<\n GraphReadSource<TResult>,\n { kind: 'graph-read-expression' }\n>;\n\nconst resolveGraphRead = <TResult>(read: PlainGraphReadSource<TResult>) =>\n (isQueryOrView(read) ? read : isBuildableRead(read) ? read.build() : read) as QueryOrView<\n any,\n TResult\n >;\n\nconst resolveGraphCommand = <TResult>(command: CommandLike<TResult>) =>\n ('build' in command ? command.build() : command) as GraphCommandSpec<any, any, TResult>;\n\nconst intentFromMode = (mode: GraphQueryMode): GraphReadIntent | 'many' =>\n mode === 'get' ? 'first' : mode === 'run' ? 'many' : mode;\n\nconst modeFromIntent = (intent: GraphReadIntent | 'many'): Exclude<GraphQueryMode, 'exists'> =>\n intent === 'many' ? 'run' : intent === 'count' ? 'count' : 'get';\n\nconst deriveGraphQueryKey = <TRead>(\n read: PlainGraphReadSource<ReadResult<TRead>>,\n intent: GraphReadIntent | 'many',\n params: ReadParams<TRead> | undefined,\n identityKey: readonly unknown[],\n): QueryKey => {\n const resolved = isQueryOrView(read) ? read : resolveGraphRead(read);\n\n if (isNamedView(resolved)) {\n return [\n resolved.root.name,\n 'graph-read',\n identityKey,\n intent,\n 'view',\n resolved.name,\n params ?? null,\n ];\n }\n\n try {\n const request = toGraphReadRequest(resolveQuerySpec(resolved, params), modeFromIntent(intent));\n return [request.selection.entityName, 'graph-read', identityKey, intent, request];\n } catch (error) {\n const message =\n 'useGraphQuery could not infer a transport-safe queryKey; provide queryKey explicitly';\n throw new Error(`${message}: ${error instanceof Error ? error.message : String(error)}`);\n }\n};\n\nexport function useGraphQuery<\n TRead extends GraphReadSource<any>,\n TMode extends GraphQueryMode = 'run',\n TReadOptions = unknown,\n TCommandOptions = TReadOptions,\n>(\n read: TRead,\n options?: GraphQueryOptions<TRead, TMode, TReadOptions>,\n): UseQueryResult<GraphQueryData<TRead, TMode>, Error> {\n const graphExecutor = useGraphExecutor<TReadOptions, TCommandOptions>();\n const identity = useExecutionIdentity();\n const expression = isGraphReadExpression(read) ? read : undefined;\n const source = (expression?.read ?? read) as PlainGraphReadSource<ReadResult<TRead>>;\n const mode = options?.mode ?? 'run';\n const intent = expression?.intent ?? intentFromMode(mode);\n\n return useQuery({\n ...options,\n queryKey:\n options?.queryKey ??\n deriveGraphQueryKey(source, intent, options?.params, executionIdentityCacheKey(identity)),\n queryFn: async () => {\n const resolved = resolveGraphRead(source);\n const params = options?.params as any;\n\n const value =\n intent === 'many'\n ? await graphExecutor.run(resolved, params, options?.runtimeOptions)\n : intent === 'count'\n ? await graphExecutor.count(resolved, params, options?.runtimeOptions)\n : intent === 'exists'\n ? (await graphExecutor.get(resolved, params, options?.runtimeOptions)) != null\n : await graphExecutor.get(resolved, params, options?.runtimeOptions);\n\n return value as GraphQueryData<TRead, TMode>;\n },\n });\n}\n\nexport function useGraphCommand<\n TVariables,\n TResult = void,\n TContext = unknown,\n TReadOptions = unknown,\n TCommandOptions = TReadOptions,\n>(\n buildCommand: GraphCommandBuilder<TVariables, TResult>,\n options?: GraphCommandHookOptions<TResult, TVariables, TContext, TCommandOptions>,\n): UseMutationResult<TResult, Error, TVariables, TContext> {\n const graphExecutor = useGraphExecutor<TReadOptions, TCommandOptions>();\n const queryClient = useQueryClient();\n\n return useMutation({\n ...options,\n mutationKey: options?.mutationKey,\n mutationFn: variables =>\n graphExecutor.runCommand(\n resolveGraphCommand(buildCommand(variables)),\n options?.runtimeOptions,\n ),\n onSuccess: async (data, variables, onMutateResult, context) => {\n for (const queryKey of options?.invalidateQueryKeys ?? []) {\n await queryClient.invalidateQueries({ queryKey });\n }\n\n await options?.onSuccess?.(data, variables, onMutateResult, context);\n },\n });\n}\n\nexport function useManyToManyRelationshipCommand<\n TVariables,\n TContext = unknown,\n TReadOptions = unknown,\n TCommandOptions = TReadOptions,\n>(\n buildCommand: (variables: TVariables) => ManyToManyRelationshipCommand,\n options?: GraphCommandHookOptions<RelationshipDelta, TVariables, TContext, TCommandOptions>,\n): UseMutationResult<RelationshipDelta, Error, TVariables, TContext> {\n const graphExecutor = useGraphExecutor<TReadOptions, TCommandOptions>();\n const queryClient = useQueryClient();\n\n return useMutation({\n ...options,\n mutationKey: options?.mutationKey,\n mutationFn: variables => {\n if (!graphExecutor.runManyToManyRelationshipCommand) {\n throw new Error('Graph executor does not support many-to-many Relationship Commands.');\n }\n return graphExecutor.runManyToManyRelationshipCommand(\n buildCommand(variables),\n options?.runtimeOptions,\n );\n },\n onSuccess: async (data, variables, onMutateResult, context) => {\n for (const queryKey of options?.invalidateQueryKeys ?? []) {\n await queryClient.invalidateQueries({ queryKey });\n }\n await options?.onSuccess?.(data, variables, onMutateResult, context);\n },\n });\n}\n\nexport function useGraphOperation<\n TOperation extends GraphOperationLike<any, any>,\n TContext = unknown,\n TReadOptions = unknown,\n TCommandOptions = TReadOptions,\n>(\n operation: TOperation,\n options?: GraphCommandHookOptions<\n GraphOperationResult<TOperation>,\n GraphOperationClientInput<TOperation>,\n TContext,\n TCommandOptions\n >,\n): UseMutationResult<\n GraphOperationResult<TOperation>,\n Error,\n GraphOperationClientInput<TOperation>,\n TContext\n> {\n type TVariables = GraphOperationClientInput<TOperation>;\n type TResult = GraphOperationResult<TOperation>;\n const buildCommand = (variables: TVariables) =>\n operation.run(\n (operation.input\n ? normalizeGraphSchemaClientInput(operation.input, variables)\n : variables) as never,\n );\n\n return useGraphCommand<TVariables, TResult, TContext, TReadOptions, TCommandOptions>(\n buildCommand,\n {\n mutationKey: options?.mutationKey ?? ['graph-operation', operation.id],\n ...options,\n },\n );\n}\n"]}
|
package/dist/graph/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export * from './context.js';
|
|
2
2
|
export * from './executor.js';
|
|
3
|
+
export * from './fetch-graph-read-executor.js';
|
|
4
|
+
export * from './fetch-graph-client.js';
|
|
3
5
|
export * from './graph-hooks.js';
|
|
4
6
|
export * from './operation-cache.js';
|
|
5
7
|
export * from './operation-hooks.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graph/index.tsx"],"names":[],"mappings":"AAEA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graph/index.tsx"],"names":[],"mappings":"AAEA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC"}
|
package/dist/graph/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
export * from './context.js';
|
|
3
3
|
export * from './executor.js';
|
|
4
|
+
export * from './fetch-graph-read-executor.js';
|
|
5
|
+
export * from './fetch-graph-client.js';
|
|
4
6
|
export * from './graph-hooks.js';
|
|
5
7
|
export * from './operation-cache.js';
|
|
6
8
|
export * from './operation-hooks.js';
|
package/dist/graph/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graph/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC","sourcesContent":["'use client';\n\nexport * from './context.js';\nexport * from './executor.js';\nexport * from './graph-hooks.js';\nexport * from './operation-cache.js';\nexport * from './operation-hooks.js';\nexport * from './operation-types.js';\nexport * from './reflected-entity-data-hooks.js';\nexport * from './reflected-operation-invoker.js';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graph/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC","sourcesContent":["'use client';\n\nexport * from './context.js';\nexport * from './executor.js';\nexport * from './fetch-graph-read-executor.js';\nexport * from './fetch-graph-client.js';\nexport * from './graph-hooks.js';\nexport * from './operation-cache.js';\nexport * from './operation-hooks.js';\nexport * from './operation-types.js';\nexport * from './reflected-entity-data-hooks.js';\nexport * from './reflected-operation-invoker.js';\n"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { DomainOperationInvocation as OperationInvocation } from '@ontahi/core/data-graph';
|
|
2
2
|
import { type InfiniteData, type QueryKey, type UseQueryResult } from '@tanstack/react-query';
|
|
3
3
|
import type { GraphPermission } from '../actions/index.js';
|
|
4
|
-
import type { ClientOperationLike, ClientSchemaOperationLike, DurableOperationHookOptions, DurableOperationHookResult, DurableOperationLike, OperationHookOptions, OperationHookResult, OperationInputHookResult, OperationInfiniteQueryOptions, OperationQueryOptions, OperationRunner, ReflectedOperationLike } from './operation-types.js';
|
|
4
|
+
import type { ClientOperationLike, ClientOperationInvocation, ClientSchemaOperationLike, BoundOperationHookResult, DurableOperationHookOptions, DurableOperationHookResult, DurableOperationLike, OperationHookOptions, OperationHookResult, OperationInputHookResult, OperationInfiniteQueryOptions, OperationQueryOptions, OperationRunner, ReflectedOperationLike } from './operation-types.js';
|
|
5
5
|
export declare const getOperationQueryKey: <TInput, TData>(operation: ClientOperationLike<TInput, TData>, input: TInput) => QueryKey;
|
|
6
|
+
export declare function useOperation<TInput, TData>(invocation: ClientOperationInvocation<TInput, TData>, options?: OperationHookOptions<TInput, TData>): BoundOperationHookResult<TInput, TData>;
|
|
6
7
|
export declare function useOperation<TInput, TData>(operation: ClientSchemaOperationLike<TInput, TData>, initialInput: TInput, options?: OperationHookOptions<TInput, TData>): OperationInputHookResult<TInput, TData>;
|
|
7
8
|
export declare function useOperation<TInput, TData>(operation: ClientSchemaOperationLike<TInput, TData>, options?: OperationHookOptions<TInput, TData>): OperationHookResult<TInput, TData>;
|
|
8
9
|
export declare function useOperation<TInput, TData>(operation: ClientOperationLike<TInput, TData>, options?: OperationHookOptions<TInput, TData>): OperationHookResult<TInput, TData>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation-hooks.d.ts","sourceRoot":"","sources":["../../src/graph/operation-hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,yBAAyB,IAAI,mBAAmB,EAIjD,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"operation-hooks.d.ts","sourceRoot":"","sources":["../../src/graph/operation-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { normalizeGraphSchemaClientInput } from '@ontahi/core/data-graph';
|
|
3
3
|
import { operationInputInvalid } from '@ontahi/core/runtime/contracts';
|
|
4
|
+
import { hasOwn, isRecord } from '@ontahi/core/value/object';
|
|
4
5
|
import { useInfiniteQuery, useQuery, useQueryClient, } from '@tanstack/react-query';
|
|
5
6
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
6
7
|
import { operationBridgeErrored, resolveOperationBridgeInvalidationQueryKeys, resolveOperationBridgeQueryKey, toOperationInvocationResult, unwrapOperationInvocationValue, useAction, } from '../actions/index.js';
|
|
@@ -13,7 +14,7 @@ const operationHookOptionKeys = new Set([
|
|
|
13
14
|
'onSettled',
|
|
14
15
|
'invalidateOnSuccess',
|
|
15
16
|
]);
|
|
16
|
-
const
|
|
17
|
+
const isOperationInvocation = (value) => isRecord(value) && hasOwn(value, 'kind') && value.kind === 'domain-operation-invocation';
|
|
17
18
|
const readOperationInputFields = (input) => {
|
|
18
19
|
if (!isRecord(input))
|
|
19
20
|
return undefined;
|
|
@@ -31,19 +32,26 @@ const looksLikeOperationOptions = (operation, value) => {
|
|
|
31
32
|
if (keys.length === 0)
|
|
32
33
|
return false;
|
|
33
34
|
const inputFields = readOperationInputFields(operation.input);
|
|
34
|
-
if (inputFields && keys.some(key => key
|
|
35
|
+
if (inputFields && keys.some(key => hasOwn(inputFields, key)))
|
|
35
36
|
return false;
|
|
36
37
|
return keys.some(key => operationHookOptionKeys.has(key));
|
|
37
38
|
};
|
|
38
39
|
const issuePath = (path) => Array.isArray(path) ? path.map(String).join('.') : path;
|
|
39
40
|
export const getOperationQueryKey = (operation, input) => resolveOperationBridgeQueryKey(operation, input);
|
|
40
41
|
const getOperationCacheAwareQueryKey = (clientCache, operation, input) => getOperationClientCacheKey(clientCache, operation, input, getOperationQueryKey(operation, input));
|
|
41
|
-
export function useOperation(
|
|
42
|
-
const
|
|
42
|
+
export function useOperation(operationOrInvocation, initialInputOrOptions, managedOptions) {
|
|
43
|
+
const invocation = isOperationInvocation(operationOrInvocation)
|
|
44
|
+
? operationOrInvocation
|
|
45
|
+
: undefined;
|
|
46
|
+
const operation = (invocation?.operation ?? operationOrInvocation);
|
|
47
|
+
const managesInput = !invocation &&
|
|
48
|
+
(managedOptions !== undefined || !looksLikeOperationOptions(operation, initialInputOrOptions));
|
|
43
49
|
const initialInput = managesInput ? initialInputOrOptions : undefined;
|
|
44
|
-
const options =
|
|
45
|
-
?
|
|
46
|
-
:
|
|
50
|
+
const options = invocation
|
|
51
|
+
? initialInputOrOptions
|
|
52
|
+
: managesInput
|
|
53
|
+
? managedOptions
|
|
54
|
+
: initialInputOrOptions;
|
|
47
55
|
const adapter = useDefaultOperationBridgeAdapter();
|
|
48
56
|
const clientCache = useGraphClientCache();
|
|
49
57
|
const queryClient = useQueryClient();
|
|
@@ -113,6 +121,10 @@ export function useOperation(operation, initialInputOrOptions, managedOptions) {
|
|
|
113
121
|
const execute = useCallback((...args) => {
|
|
114
122
|
void executeAsync(...args);
|
|
115
123
|
}, [executeAsync]);
|
|
124
|
+
const executeBoundAsync = useCallback(() => executeInputAsync(invocation?.input), [executeInputAsync, invocation?.input]);
|
|
125
|
+
const executeBound = useCallback(() => {
|
|
126
|
+
void executeBoundAsync();
|
|
127
|
+
}, [executeBoundAsync]);
|
|
116
128
|
const reset = useCallback(() => {
|
|
117
129
|
resetTransport();
|
|
118
130
|
setResult(undefined);
|
|
@@ -188,9 +200,13 @@ export function useOperation(operation, initialInputOrOptions, managedOptions) {
|
|
|
188
200
|
? 'hasErrored'
|
|
189
201
|
: 'hasSucceeded';
|
|
190
202
|
const baseResult = {
|
|
191
|
-
execute: managesInput ? executeManaged : execute,
|
|
192
|
-
executeAsync:
|
|
193
|
-
|
|
203
|
+
execute: invocation ? executeBound : managesInput ? executeManaged : execute,
|
|
204
|
+
executeAsync: invocation
|
|
205
|
+
? executeBoundAsync
|
|
206
|
+
: managesInput
|
|
207
|
+
? executeManagedAsync
|
|
208
|
+
: executeAsync,
|
|
209
|
+
input: invocation ? invocation.input : managesInput ? inputController : lastInput,
|
|
194
210
|
result,
|
|
195
211
|
value: result?.ok ? result.value : undefined,
|
|
196
212
|
reset,
|
|
@@ -202,9 +218,11 @@ export function useOperation(operation, initialInputOrOptions, managedOptions) {
|
|
|
202
218
|
hasSucceeded,
|
|
203
219
|
hasErrored,
|
|
204
220
|
};
|
|
205
|
-
return (
|
|
206
|
-
?
|
|
207
|
-
:
|
|
221
|
+
return (invocation
|
|
222
|
+
? baseResult
|
|
223
|
+
: managesInput
|
|
224
|
+
? { ...baseResult, input: inputController, lastInput }
|
|
225
|
+
: baseResult);
|
|
208
226
|
}
|
|
209
227
|
export function useDurableOperation(operation, options) {
|
|
210
228
|
const adapter = useDefaultOperationBridgeAdapter();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation-hooks.js","sourceRoot":"","sources":["../../src/graph/operation-hooks.ts"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport type {\n AnyEntityRef,\n DomainOperationInvocation as OperationInvocation,\n GraphSchemaLike,\n GraphSchemaParseResult,\n OperationInputSchema,\n} from '@ontahi/core/data-graph';\nimport { normalizeGraphSchemaClientInput } from '@ontahi/core/data-graph';\nimport { operationInputInvalid } from '@ontahi/core/runtime/contracts';\nimport type { TaskRunRef, TaskSnapshot } from '@ontahi/core/runtime/contracts';\nimport {\n useInfiniteQuery,\n useQuery,\n useQueryClient,\n type InfiniteData,\n type QueryKey,\n type UseQueryOptions,\n type UseQueryResult,\n} from '@tanstack/react-query';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport type {\n GraphPermission,\n OperationBridgeAction,\n OperationInvocationResult,\n} from '../actions/index.js';\nimport {\n operationBridgeErrored,\n resolveOperationBridgeInvalidationQueryKeys,\n resolveOperationBridgeQueryKey,\n toOperationInvocationResult,\n unwrapOperationInvocationValue,\n useAction,\n} from '../actions/index.js';\n\nimport {\n useDefaultOperationBridgeAdapter,\n useGraphClientCache,\n useGraphClientCacheVersion,\n useReflectedOperationInvoker,\n} from './context.js';\nimport {\n getOperationClientCacheKey,\n invalidateOperationCacheRefs,\n invalidateReactQueryCachesContainingRefs,\n readInitialOperationCacheValueFromCache,\n reconcileOperationOutput,\n} from './operation-cache.js';\nimport type {\n ClientOperationLike,\n ClientSchemaOperationLike,\n DurableOperationHookOptions,\n DurableOperationHookResult,\n DurableOperationLike,\n GraphClientCache,\n OperationHookOptions,\n OperationHookResult,\n OperationInputController,\n OperationInputHookResult,\n OperationInfiniteQueryOptions,\n OperationInputArgs,\n OperationQueryOptions,\n OperationRunner,\n ReflectedOperationLike,\n} from './operation-types.js';\n\nconst operationHookOptionKeys = new Set([\n 'onExecute',\n 'onSuccess',\n 'onError',\n 'onSettled',\n 'invalidateOnSuccess',\n]);\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst readOperationInputFields = (input: unknown): Record<string, unknown> | undefined => {\n if (!isRecord(input)) return undefined;\n\n if (input.kind === 'schema.named' && 'item' in input) {\n return readOperationInputFields(input.item);\n }\n\n return (input.kind === 'schema.object' || input.kind === 'value') && isRecord(input.fields)\n ? input.fields\n : undefined;\n};\n\nconst looksLikeOperationOptions = (\n operation: ClientSchemaOperationLike<any, any> | ClientOperationLike<any, any>,\n value: unknown,\n) => {\n if (!isRecord(value)) return value === undefined;\n\n const keys = Object.keys(value);\n if (keys.length === 0) return false;\n\n const inputFields = readOperationInputFields(operation.input);\n if (inputFields && keys.some(key => key in inputFields)) return false;\n\n return keys.some(key => operationHookOptionKeys.has(key));\n};\n\nconst issuePath = (path: string | ReadonlyArray<string | number>) =>\n Array.isArray(path) ? path.map(String).join('.') : path;\n\nexport const getOperationQueryKey = <TInput, TData>(\n operation: ClientOperationLike<TInput, TData>,\n input: TInput,\n): QueryKey => resolveOperationBridgeQueryKey(operation, input);\n\nconst getOperationCacheAwareQueryKey = <TInput, TData>(\n clientCache: GraphClientCache,\n operation: ClientOperationLike<TInput, TData>,\n input: TInput,\n): QueryKey =>\n getOperationClientCacheKey(clientCache, operation, input, getOperationQueryKey(operation, input));\n\nexport function useOperation<TInput, TData>(\n operation: ClientSchemaOperationLike<TInput, TData>,\n initialInput: TInput,\n options?: OperationHookOptions<TInput, TData>,\n): OperationInputHookResult<TInput, TData>;\nexport function useOperation<TInput, TData>(\n operation: ClientSchemaOperationLike<TInput, TData>,\n options?: OperationHookOptions<TInput, TData>,\n): OperationHookResult<TInput, TData>;\nexport function useOperation<TInput, TData>(\n operation: ClientOperationLike<TInput, TData>,\n options?: OperationHookOptions<TInput, TData>,\n): OperationHookResult<TInput, TData>;\nexport function useOperation<TInput, TData>(\n operation: ClientOperationLike<TInput, TData> | ClientSchemaOperationLike<TInput, TData>,\n initialInputOrOptions?: TInput | OperationHookOptions<TInput, TData>,\n managedOptions?: OperationHookOptions<TInput, TData>,\n): OperationHookResult<TInput, TData> | OperationInputHookResult<TInput, TData> {\n const managesInput =\n managedOptions !== undefined || !looksLikeOperationOptions(operation, initialInputOrOptions);\n const initialInput = managesInput ? (initialInputOrOptions as TInput) : undefined;\n const options = managesInput\n ? managedOptions\n : (initialInputOrOptions as OperationHookOptions<TInput, TData> | undefined);\n const adapter = useDefaultOperationBridgeAdapter();\n const clientCache = useGraphClientCache();\n const queryClient = useQueryClient();\n const action = adapter.useBridgeAction<TInput, TData>(\n operation as Parameters<typeof adapter.useBridgeAction<TInput, TData>>[0],\n ) as OperationBridgeAction<TInput, TData>;\n const transport = useAction(action);\n const executeTransportAsync = transport.executeAsync;\n const resetTransport = transport.reset;\n const optionsRef = useRef(options);\n const [result, setResult] = useState<OperationInvocationResult<TData>>();\n const [lastInput, setLastInput] = useState<TInput>();\n const initialInputRef = useRef(initialInput);\n const [draft, setDraft] = useState<TInput | undefined>(initialInput);\n\n useEffect(() => {\n optionsRef.current = options;\n }, [options]);\n\n const executeInputAsync = useCallback(\n async (input: TInput) => {\n const currentOptions = optionsRef.current;\n const transportInput = operation.input\n ? (normalizeGraphSchemaClientInput(operation.input, input) as TInput)\n : input;\n setLastInput(input);\n\n await currentOptions?.onExecute?.({ input });\n\n let invocation: OperationInvocationResult<TData>;\n\n try {\n invocation = toOperationInvocationResult(await executeTransportAsync(transportInput));\n } catch (error) {\n invocation = operationBridgeErrored(\n error instanceof Error ? error.message : 'Graph operation bridge failed.',\n ) as OperationInvocationResult<TData>;\n }\n\n if (invocation.ok) {\n let affectedCacheRefs: AnyEntityRef[] = [];\n\n if (currentOptions?.invalidateOnSuccess ?? true) {\n affectedCacheRefs = invalidateOperationCacheRefs(\n clientCache,\n operation,\n transportInput,\n invocation.value,\n );\n }\n\n invocation = {\n ...invocation,\n value: reconcileOperationOutput(clientCache, operation, invocation.value),\n };\n\n setResult(invocation);\n\n await currentOptions?.onSuccess?.({\n input,\n value: invocation.value,\n result: invocation,\n });\n\n if (currentOptions?.invalidateOnSuccess ?? true) {\n await Promise.all([\n invalidateReactQueryCachesContainingRefs(queryClient, affectedCacheRefs),\n ...resolveOperationBridgeInvalidationQueryKeys(operation, transportInput).map(\n queryKey => queryClient.invalidateQueries({ queryKey }),\n ),\n ]);\n }\n } else {\n setResult(invocation);\n\n await currentOptions?.onError?.({\n input,\n error: invocation,\n result: invocation,\n });\n }\n\n await currentOptions?.onSettled?.({\n input,\n result: invocation,\n });\n\n return invocation;\n },\n [clientCache, executeTransportAsync, operation, queryClient],\n );\n\n const executeAsync = useCallback(\n (...args: OperationInputArgs<TInput>) => executeInputAsync(args[0] as TInput),\n [executeInputAsync],\n );\n\n const execute = useCallback(\n (...args: OperationInputArgs<TInput>) => {\n void executeAsync(...args);\n },\n [executeAsync],\n );\n\n const reset = useCallback(() => {\n resetTransport();\n setResult(undefined);\n setLastInput(undefined);\n if (managesInput) setDraft(initialInputRef.current);\n }, [managesInput, resetTransport]);\n\n const inputSchema =\n operation.input && typeof (operation.input as { safeParse?: unknown }).safeParse === 'function'\n ? (operation.input as OperationInputSchema<GraphSchemaLike, TInput>)\n : undefined;\n const validation = useMemo<GraphSchemaParseResult<TInput> | undefined>(\n () => (managesInput && inputSchema ? inputSchema.safeParse(draft) : undefined),\n [draft, inputSchema, managesInput],\n );\n\n const setManagedDraft: OperationInputController<TInput>['setDraft'] = useCallback(next => {\n setDraft(current =>\n typeof next === 'function' ? (next as (current: TInput) => TInput)(current as TInput) : next,\n );\n }, []);\n\n const setManagedField: OperationInputController<TInput>['setField'] = useCallback(\n (field, value) => {\n setDraft(current => {\n if (!isRecord(current)) {\n throw new Error('setField requires an object operation input.');\n }\n\n return { ...current, [field]: value } as TInput;\n });\n },\n [],\n );\n\n const resetManagedInput: OperationInputController<TInput>['reset'] = useCallback(next => {\n setDraft(next === undefined ? initialInputRef.current : next);\n }, []);\n\n const inputController = useMemo<OperationInputController<TInput> | undefined>(() => {\n if (!managesInput || !validation) return undefined;\n\n const issues = validation.success ? [] : validation.issues;\n return {\n draft: draft as TInput,\n setDraft: setManagedDraft,\n setField: setManagedField,\n reset: resetManagedInput,\n validation,\n issues,\n issue: path => {\n const expected = issuePath(path);\n return issues.find(issue => issuePath(issue.path) === expected);\n },\n isValid: validation.success,\n value: validation.success ? validation.data : undefined,\n };\n }, [draft, managesInput, resetManagedInput, setManagedDraft, setManagedField, validation]);\n\n const executeManagedAsync = useCallback(async () => {\n if (!validation?.success) {\n const issues = validation?.issues ?? [];\n const invalid = operationInputInvalid(\n issues[0]?.message ?? 'Input does not match the operation schema.',\n issues.map(issue => ({\n ...(issue.path.length > 0 ? { path: issue.path.map(String).join('.') } : {}),\n message: issue.message,\n code: issue.code,\n })),\n );\n const currentOptions = optionsRef.current;\n\n setLastInput(draft);\n setResult(invalid);\n await currentOptions?.onError?.({ input: draft as TInput, error: invalid, result: invalid });\n await currentOptions?.onSettled?.({ input: draft as TInput, result: invalid });\n\n return invalid as OperationInvocationResult<TData>;\n }\n\n return executeInputAsync(validation.data);\n }, [draft, executeInputAsync, validation]);\n\n const executeManaged = useCallback(() => {\n void executeManagedAsync();\n }, [executeManagedAsync]);\n\n const hasErrored = Boolean(result && !result.ok) || transport.hasErrored;\n const hasSucceeded = Boolean(result?.ok) && !transport.isExecuting;\n const isIdle = transport.isIdle && result === undefined;\n const status = isIdle\n ? 'idle'\n : transport.isExecuting\n ? 'executing'\n : hasErrored\n ? 'hasErrored'\n : 'hasSucceeded';\n\n const baseResult = {\n execute: managesInput ? executeManaged : execute,\n executeAsync: managesInput ? executeManagedAsync : executeAsync,\n input: managesInput ? inputController : lastInput,\n result,\n value: result?.ok ? result.value : undefined,\n reset,\n status,\n isIdle,\n isExecuting: transport.isExecuting,\n isTransitioning: transport.isTransitioning,\n isPending: transport.isPending,\n hasSucceeded,\n hasErrored,\n };\n\n return (\n managesInput\n ? { ...baseResult, input: inputController as OperationInputController<TInput>, lastInput }\n : baseResult\n ) as OperationHookResult<TInput, TData> | OperationInputHookResult<TInput, TData>;\n}\n\nexport function useDurableOperation<TInput, TResult = unknown>(\n operation: DurableOperationLike<TInput, TResult>,\n options?: DurableOperationHookOptions<TInput>,\n): DurableOperationHookResult<TInput, TResult> {\n const adapter = useDefaultOperationBridgeAdapter();\n const queryClient = useQueryClient();\n const mutation = useOperation<TInput, TaskRunRef>(\n operation as ClientOperationLike<TInput, TaskRunRef>,\n { ...options, invalidateOnSuccess: false },\n );\n const runRef = mutation.value;\n const snapshotQuery = useQuery({\n queryKey: ['ontahi-task-run', runRef?.taskId, runRef?.runId],\n enabled: Boolean(runRef && adapter.getTaskSnapshot),\n queryFn: () => {\n if (!runRef || !adapter.getTaskSnapshot) {\n throw new Error('The operation bridge does not provide task snapshot transport.');\n }\n\n return adapter.getTaskSnapshot<TResult>({ taskId: runRef.taskId, runId: runRef.runId });\n },\n refetchInterval: query => {\n const status = (query.state.data as TaskSnapshot<TResult> | undefined)?.status;\n return status === 'completed' || status === 'failed' || status === 'cancelled'\n ? false\n : (options?.pollIntervalMs ?? 500);\n },\n });\n const snapshot = snapshotQuery.data;\n const invalidatedRunRef = useRef<string | undefined>(undefined);\n\n useEffect(() => {\n if (\n !snapshot ||\n (snapshot.status !== 'completed' &&\n snapshot.status !== 'failed' &&\n snapshot.status !== 'cancelled')\n ) {\n return;\n }\n\n const runKey = `${snapshot.taskId}:${snapshot.runId}:${snapshot.status}`;\n if (invalidatedRunRef.current === runKey) return;\n invalidatedRunRef.current = runKey;\n\n if (snapshot.status === 'completed' && (options?.invalidateOnSuccess ?? true)) {\n const invalidationInput = operation.input\n ? (normalizeGraphSchemaClientInput(operation.input, mutation.input) as TInput)\n : (mutation.input as TInput);\n void Promise.all(\n resolveOperationBridgeInvalidationQueryKeys(operation, invalidationInput).map(queryKey =>\n queryClient.invalidateQueries({ queryKey }),\n ),\n );\n }\n }, [mutation.input, operation, options?.invalidateOnSuccess, queryClient, snapshot]);\n\n const reset = useCallback(() => {\n mutation.reset();\n invalidatedRunRef.current = undefined;\n }, [mutation]);\n const runStatus = snapshot?.status ?? runRef?.status;\n\n return {\n ...mutation,\n reset,\n durable: operation.durable,\n snapshot,\n progress: snapshot?.progress,\n finalValue: snapshot?.result,\n runError: snapshot?.error,\n isQueued: runStatus === 'queued',\n isRunning: runStatus === 'running',\n isCompleted: runStatus === 'completed',\n isFailed: runStatus === 'failed',\n isCancelled: runStatus === 'cancelled',\n isRefreshingRun: snapshotQuery.isFetching,\n isExecuting:\n mutation.isExecuting ||\n (Boolean(adapter.getTaskSnapshot) && (runStatus === 'queued' || runStatus === 'running')),\n };\n}\n\nexport function useOperationQuery<TData>(\n operation: ClientOperationLike<void, TData>,\n options?: OperationQueryOptions<TData>,\n): UseQueryResult<TData, Error>;\nexport function useOperationQuery<TInput, TData>(\n operation: ClientSchemaOperationLike<TInput, TData>,\n input: TInput,\n options?: OperationQueryOptions<TData>,\n): UseQueryResult<TData, Error>;\nexport function useOperationQuery<TInput, TData>(\n operation: ClientOperationLike<TInput, TData>,\n input: TInput,\n options?: OperationQueryOptions<TData>,\n): UseQueryResult<TData, Error>;\nexport function useOperationQuery<TInput, TData>(\n operation: ClientOperationLike<TInput, TData> | ClientSchemaOperationLike<TInput, TData>,\n inputOrOptions?: TInput | OperationQueryOptions<TData>,\n providedOptions?: OperationQueryOptions<TData>,\n): UseQueryResult<TData, Error> {\n const hasInput = operation.input?.kind !== 'schema.void';\n const input = (\n hasInput\n ? operation.input\n ? normalizeGraphSchemaClientInput(operation.input, inputOrOptions)\n : inputOrOptions\n : undefined\n ) as TInput;\n const options = (hasInput ? providedOptions : inputOrOptions) as\n | OperationQueryOptions<TData>\n | undefined;\n const adapter = useDefaultOperationBridgeAdapter();\n const clientCache = useGraphClientCache();\n const cacheVersion = useGraphClientCacheVersion(clientCache);\n const action = adapter.useBridgeAction<TInput, TData>(\n operation as Parameters<typeof adapter.useBridgeAction<TInput, TData>>[0],\n ) as OperationBridgeAction<TInput, TData>;\n const {\n initialData: providedInitialData,\n initialDataUpdatedAt,\n placeholderData,\n ...queryOptions\n } = options ?? {};\n const hasProvidedInitialData = Boolean(options && 'initialData' in options);\n const queryKey = getOperationCacheAwareQueryKey(\n clientCache,\n operation as ClientOperationLike<TInput, TData>,\n input,\n );\n const cacheKey = queryKey;\n const initialCacheValue = hasProvidedInitialData\n ? undefined\n : readInitialOperationCacheValueFromCache(clientCache, operation, input, cacheKey);\n const initialData = hasProvidedInitialData ? providedInitialData : initialCacheValue?.value;\n\n return useQuery({\n ...queryOptions,\n initialData,\n initialDataUpdatedAt: initialDataUpdatedAt ?? initialCacheValue?.initialDataUpdatedAt,\n placeholderData: placeholderData as UseQueryOptions<\n unknown,\n Error,\n TData,\n QueryKey\n >['placeholderData'],\n queryKey,\n queryFn: async () =>\n clientCache.writeOutput(\n cacheKey,\n operation.graphOutput,\n unwrapOperationInvocationValue(toOperationInvocationResult(await action(input))),\n ).value,\n select: value => {\n void cacheVersion;\n return clientCache.denormalizeOutput(operation.graphOutput, value) as TData;\n },\n });\n}\n\nexport function useOperationInfiniteQuery<TInput, TData, TPageParam>(\n operation: ClientOperationLike<TInput, TData>,\n input: TInput,\n options: OperationInfiniteQueryOptions<TInput, TData, TPageParam>,\n) {\n const adapter = useDefaultOperationBridgeAdapter();\n const clientCache = useGraphClientCache();\n const cacheVersion = useGraphClientCacheVersion(clientCache);\n const action = adapter.useBridgeAction<TInput, TData>(\n operation as Parameters<typeof adapter.useBridgeAction<TInput, TData>>[0],\n ) as OperationBridgeAction<TInput, TData>;\n const { getPageInput, getNextPageParam, getPreviousPageParam, ...queryOptions } = options;\n const denormalizePage = useCallback(\n (value: unknown) => clientCache.denormalizeOutput(operation.graphOutput, value) as TData,\n [clientCache, operation],\n );\n\n return useInfiniteQuery<unknown, Error, InfiniteData<TData, TPageParam>, QueryKey, TPageParam>({\n ...queryOptions,\n queryKey: getOperationCacheAwareQueryKey(clientCache, operation, input),\n queryFn: async ({ pageParam }) =>\n clientCache.normalizeOutput(\n operation.graphOutput,\n unwrapOperationInvocationValue(\n toOperationInvocationResult(\n await action(\n getPageInput({\n input,\n pageParam: pageParam as TPageParam,\n }),\n ),\n ),\n ),\n ).value,\n getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>\n getNextPageParam(\n denormalizePage(lastPage),\n allPages.map(denormalizePage),\n lastPageParam,\n allPageParams,\n ),\n getPreviousPageParam: getPreviousPageParam\n ? (firstPage, allPages, firstPageParam, allPageParams) =>\n getPreviousPageParam(\n denormalizePage(firstPage),\n allPages.map(denormalizePage),\n firstPageParam,\n allPageParams,\n )\n : undefined,\n select: data => {\n void cacheVersion;\n\n return {\n pageParams: data.pageParams,\n pages: data.pages.map(denormalizePage),\n };\n },\n });\n}\n\nexport function useGraphPermission<TInput, TData>(\n invocation: OperationInvocation<TInput, TData>,\n options?: {\n enabled?: boolean;\n queryKey?: QueryKey;\n },\n): UseQueryResult<GraphPermission, Error> {\n const adapter = useDefaultOperationBridgeAdapter();\n\n return adapter.usePermission(\n invocation.operation as ClientOperationLike<TInput, TData>,\n invocation.input,\n options,\n );\n}\n\nexport function useOperationRunner<TInput, TData>(\n operation: ClientOperationLike<TInput, TData>,\n): OperationRunner<TInput, TData> {\n const adapter = useDefaultOperationBridgeAdapter();\n const clientCache = useGraphClientCache();\n const action = adapter.useBridgeAction<TInput, TData>(\n operation as Parameters<typeof adapter.useBridgeAction<TInput, TData>>[0],\n ) as OperationBridgeAction<TInput, TData>;\n\n return useCallback(\n async (input: TInput) => {\n const result = toOperationInvocationResult(await action(input));\n\n if (result.ok) {\n return {\n ...result,\n value: reconcileOperationOutput(clientCache, operation, result.value),\n };\n }\n\n return result;\n },\n [action, clientCache, operation],\n );\n}\n\nexport function useReflectedOperationRunner<TInput = unknown, TData = unknown>(\n operation: ReflectedOperationLike<TInput, TData>,\n): OperationRunner<TInput, TData> {\n const invoker = useReflectedOperationInvoker();\n\n return useCallback(\n (input: TInput) =>\n invoker.invokeOperation<TInput, TData>({\n operationId: operation.id,\n operation,\n input,\n }),\n [invoker, operation],\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"operation-hooks.js","sourceRoot":"","sources":["../../src/graph/operation-hooks.ts"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport type {\n AnyEntityRef,\n DomainOperationInvocation as OperationInvocation,\n GraphSchemaLike,\n GraphSchemaParseResult,\n OperationInputSchema,\n} from '@ontahi/core/data-graph';\nimport { normalizeGraphSchemaClientInput } from '@ontahi/core/data-graph';\nimport { operationInputInvalid } from '@ontahi/core/runtime/contracts';\nimport type { TaskRunRef, TaskSnapshot } from '@ontahi/core/runtime/contracts';\nimport { hasOwn, isRecord } from '@ontahi/core/value/object';\nimport {\n useInfiniteQuery,\n useQuery,\n useQueryClient,\n type InfiniteData,\n type QueryKey,\n type UseQueryOptions,\n type UseQueryResult,\n} from '@tanstack/react-query';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport type {\n GraphPermission,\n OperationBridgeAction,\n OperationInvocationResult,\n} from '../actions/index.js';\nimport {\n operationBridgeErrored,\n resolveOperationBridgeInvalidationQueryKeys,\n resolveOperationBridgeQueryKey,\n toOperationInvocationResult,\n unwrapOperationInvocationValue,\n useAction,\n} from '../actions/index.js';\n\nimport {\n useDefaultOperationBridgeAdapter,\n useGraphClientCache,\n useGraphClientCacheVersion,\n useReflectedOperationInvoker,\n} from './context.js';\nimport {\n getOperationClientCacheKey,\n invalidateOperationCacheRefs,\n invalidateReactQueryCachesContainingRefs,\n readInitialOperationCacheValueFromCache,\n reconcileOperationOutput,\n} from './operation-cache.js';\nimport type {\n ClientOperationLike,\n ClientOperationInvocation,\n ClientSchemaOperationLike,\n BoundOperationHookResult,\n DurableOperationHookOptions,\n DurableOperationHookResult,\n DurableOperationLike,\n GraphClientCache,\n OperationHookOptions,\n OperationHookResult,\n OperationInputController,\n OperationInputHookResult,\n OperationInfiniteQueryOptions,\n OperationInputArgs,\n OperationQueryOptions,\n OperationRunner,\n ReflectedOperationLike,\n} from './operation-types.js';\n\nconst operationHookOptionKeys = new Set([\n 'onExecute',\n 'onSuccess',\n 'onError',\n 'onSettled',\n 'invalidateOnSuccess',\n]);\n\nconst isOperationInvocation = (value: unknown): value is OperationInvocation<unknown, unknown> =>\n isRecord(value) && hasOwn(value, 'kind') && value.kind === 'domain-operation-invocation';\n\nconst readOperationInputFields = (input: unknown): Record<string, unknown> | undefined => {\n if (!isRecord(input)) return undefined;\n\n if (input.kind === 'schema.named' && 'item' in input) {\n return readOperationInputFields(input.item);\n }\n\n return (input.kind === 'schema.object' || input.kind === 'value') && isRecord(input.fields)\n ? input.fields\n : undefined;\n};\n\nconst looksLikeOperationOptions = (\n operation: ClientSchemaOperationLike<any, any> | ClientOperationLike<any, any>,\n value: unknown,\n) => {\n if (!isRecord(value)) return value === undefined;\n\n const keys = Object.keys(value);\n if (keys.length === 0) return false;\n\n const inputFields = readOperationInputFields(operation.input);\n if (inputFields && keys.some(key => hasOwn(inputFields, key))) return false;\n\n return keys.some(key => operationHookOptionKeys.has(key));\n};\n\nconst issuePath = (path: string | ReadonlyArray<string | number>) =>\n Array.isArray(path) ? path.map(String).join('.') : path;\n\nexport const getOperationQueryKey = <TInput, TData>(\n operation: ClientOperationLike<TInput, TData>,\n input: TInput,\n): QueryKey => resolveOperationBridgeQueryKey(operation, input);\n\nconst getOperationCacheAwareQueryKey = <TInput, TData>(\n clientCache: GraphClientCache,\n operation: ClientOperationLike<TInput, TData>,\n input: TInput,\n): QueryKey =>\n getOperationClientCacheKey(clientCache, operation, input, getOperationQueryKey(operation, input));\n\nexport function useOperation<TInput, TData>(\n invocation: ClientOperationInvocation<TInput, TData>,\n options?: OperationHookOptions<TInput, TData>,\n): BoundOperationHookResult<TInput, TData>;\nexport function useOperation<TInput, TData>(\n operation: ClientSchemaOperationLike<TInput, TData>,\n initialInput: TInput,\n options?: OperationHookOptions<TInput, TData>,\n): OperationInputHookResult<TInput, TData>;\nexport function useOperation<TInput, TData>(\n operation: ClientSchemaOperationLike<TInput, TData>,\n options?: OperationHookOptions<TInput, TData>,\n): OperationHookResult<TInput, TData>;\nexport function useOperation<TInput, TData>(\n operation: ClientOperationLike<TInput, TData>,\n options?: OperationHookOptions<TInput, TData>,\n): OperationHookResult<TInput, TData>;\nexport function useOperation<TInput, TData>(\n operationOrInvocation:\n | ClientOperationInvocation<TInput, TData>\n | ClientOperationLike<TInput, TData>\n | ClientSchemaOperationLike<TInput, TData>,\n initialInputOrOptions?: TInput | OperationHookOptions<TInput, TData>,\n managedOptions?: OperationHookOptions<TInput, TData>,\n):\n | BoundOperationHookResult<TInput, TData>\n | OperationHookResult<TInput, TData>\n | OperationInputHookResult<TInput, TData> {\n const invocation = isOperationInvocation(operationOrInvocation)\n ? (operationOrInvocation as ClientOperationInvocation<TInput, TData>)\n : undefined;\n const operation = (invocation?.operation ?? operationOrInvocation) as\n | ClientOperationLike<TInput, TData>\n | ClientSchemaOperationLike<TInput, TData>;\n const managesInput =\n !invocation &&\n (managedOptions !== undefined || !looksLikeOperationOptions(operation, initialInputOrOptions));\n const initialInput = managesInput ? (initialInputOrOptions as TInput) : undefined;\n const options = invocation\n ? (initialInputOrOptions as OperationHookOptions<TInput, TData> | undefined)\n : managesInput\n ? managedOptions\n : (initialInputOrOptions as OperationHookOptions<TInput, TData> | undefined);\n const adapter = useDefaultOperationBridgeAdapter();\n const clientCache = useGraphClientCache();\n const queryClient = useQueryClient();\n const action = adapter.useBridgeAction<TInput, TData>(\n operation as Parameters<typeof adapter.useBridgeAction<TInput, TData>>[0],\n ) as OperationBridgeAction<TInput, TData>;\n const transport = useAction(action);\n const executeTransportAsync = transport.executeAsync;\n const resetTransport = transport.reset;\n const optionsRef = useRef(options);\n const [result, setResult] = useState<OperationInvocationResult<TData>>();\n const [lastInput, setLastInput] = useState<TInput>();\n const initialInputRef = useRef(initialInput);\n const [draft, setDraft] = useState<TInput | undefined>(initialInput);\n\n useEffect(() => {\n optionsRef.current = options;\n }, [options]);\n\n const executeInputAsync = useCallback(\n async (input: TInput) => {\n const currentOptions = optionsRef.current;\n const transportInput = operation.input\n ? (normalizeGraphSchemaClientInput(operation.input, input) as TInput)\n : input;\n setLastInput(input);\n\n await currentOptions?.onExecute?.({ input });\n\n let invocation: OperationInvocationResult<TData>;\n\n try {\n invocation = toOperationInvocationResult(await executeTransportAsync(transportInput));\n } catch (error) {\n invocation = operationBridgeErrored(\n error instanceof Error ? error.message : 'Graph operation bridge failed.',\n ) as OperationInvocationResult<TData>;\n }\n\n if (invocation.ok) {\n let affectedCacheRefs: AnyEntityRef[] = [];\n\n if (currentOptions?.invalidateOnSuccess ?? true) {\n affectedCacheRefs = invalidateOperationCacheRefs(\n clientCache,\n operation,\n transportInput,\n invocation.value,\n );\n }\n\n invocation = {\n ...invocation,\n value: reconcileOperationOutput(clientCache, operation, invocation.value),\n };\n\n setResult(invocation);\n\n await currentOptions?.onSuccess?.({\n input,\n value: invocation.value,\n result: invocation,\n });\n\n if (currentOptions?.invalidateOnSuccess ?? true) {\n await Promise.all([\n invalidateReactQueryCachesContainingRefs(queryClient, affectedCacheRefs),\n ...resolveOperationBridgeInvalidationQueryKeys(operation, transportInput).map(\n queryKey => queryClient.invalidateQueries({ queryKey }),\n ),\n ]);\n }\n } else {\n setResult(invocation);\n\n await currentOptions?.onError?.({\n input,\n error: invocation,\n result: invocation,\n });\n }\n\n await currentOptions?.onSettled?.({\n input,\n result: invocation,\n });\n\n return invocation;\n },\n [clientCache, executeTransportAsync, operation, queryClient],\n );\n\n const executeAsync = useCallback(\n (...args: OperationInputArgs<TInput>) => executeInputAsync(args[0] as TInput),\n [executeInputAsync],\n );\n\n const execute = useCallback(\n (...args: OperationInputArgs<TInput>) => {\n void executeAsync(...args);\n },\n [executeAsync],\n );\n const executeBoundAsync = useCallback(\n () => executeInputAsync(invocation?.input as TInput),\n [executeInputAsync, invocation?.input],\n );\n const executeBound = useCallback(() => {\n void executeBoundAsync();\n }, [executeBoundAsync]);\n\n const reset = useCallback(() => {\n resetTransport();\n setResult(undefined);\n setLastInput(undefined);\n if (managesInput) setDraft(initialInputRef.current);\n }, [managesInput, resetTransport]);\n\n const inputSchema =\n operation.input && typeof (operation.input as { safeParse?: unknown }).safeParse === 'function'\n ? (operation.input as OperationInputSchema<GraphSchemaLike, TInput>)\n : undefined;\n const validation = useMemo<GraphSchemaParseResult<TInput> | undefined>(\n () => (managesInput && inputSchema ? inputSchema.safeParse(draft) : undefined),\n [draft, inputSchema, managesInput],\n );\n\n const setManagedDraft: OperationInputController<TInput>['setDraft'] = useCallback(next => {\n setDraft(current =>\n typeof next === 'function' ? (next as (current: TInput) => TInput)(current as TInput) : next,\n );\n }, []);\n\n const setManagedField: OperationInputController<TInput>['setField'] = useCallback(\n (field, value) => {\n setDraft(current => {\n if (!isRecord(current)) {\n throw new Error('setField requires an object operation input.');\n }\n\n return { ...current, [field]: value } as TInput;\n });\n },\n [],\n );\n\n const resetManagedInput: OperationInputController<TInput>['reset'] = useCallback(next => {\n setDraft(next === undefined ? initialInputRef.current : next);\n }, []);\n\n const inputController = useMemo<OperationInputController<TInput> | undefined>(() => {\n if (!managesInput || !validation) return undefined;\n\n const issues = validation.success ? [] : validation.issues;\n return {\n draft: draft as TInput,\n setDraft: setManagedDraft,\n setField: setManagedField,\n reset: resetManagedInput,\n validation,\n issues,\n issue: path => {\n const expected = issuePath(path);\n return issues.find(issue => issuePath(issue.path) === expected);\n },\n isValid: validation.success,\n value: validation.success ? validation.data : undefined,\n };\n }, [draft, managesInput, resetManagedInput, setManagedDraft, setManagedField, validation]);\n\n const executeManagedAsync = useCallback(async () => {\n if (!validation?.success) {\n const issues = validation?.issues ?? [];\n const invalid = operationInputInvalid(\n issues[0]?.message ?? 'Input does not match the operation schema.',\n issues.map(issue => ({\n ...(issue.path.length > 0 ? { path: issue.path.map(String).join('.') } : {}),\n message: issue.message,\n code: issue.code,\n })),\n );\n const currentOptions = optionsRef.current;\n\n setLastInput(draft);\n setResult(invalid);\n await currentOptions?.onError?.({ input: draft as TInput, error: invalid, result: invalid });\n await currentOptions?.onSettled?.({ input: draft as TInput, result: invalid });\n\n return invalid as OperationInvocationResult<TData>;\n }\n\n return executeInputAsync(validation.data);\n }, [draft, executeInputAsync, validation]);\n\n const executeManaged = useCallback(() => {\n void executeManagedAsync();\n }, [executeManagedAsync]);\n\n const hasErrored = Boolean(result && !result.ok) || transport.hasErrored;\n const hasSucceeded = Boolean(result?.ok) && !transport.isExecuting;\n const isIdle = transport.isIdle && result === undefined;\n const status = isIdle\n ? 'idle'\n : transport.isExecuting\n ? 'executing'\n : hasErrored\n ? 'hasErrored'\n : 'hasSucceeded';\n\n const baseResult = {\n execute: invocation ? executeBound : managesInput ? executeManaged : execute,\n executeAsync: invocation\n ? executeBoundAsync\n : managesInput\n ? executeManagedAsync\n : executeAsync,\n input: invocation ? invocation.input : managesInput ? inputController : lastInput,\n result,\n value: result?.ok ? result.value : undefined,\n reset,\n status,\n isIdle,\n isExecuting: transport.isExecuting,\n isTransitioning: transport.isTransitioning,\n isPending: transport.isPending,\n hasSucceeded,\n hasErrored,\n };\n\n return (\n invocation\n ? baseResult\n : managesInput\n ? { ...baseResult, input: inputController as OperationInputController<TInput>, lastInput }\n : baseResult\n ) as\n | BoundOperationHookResult<TInput, TData>\n | OperationHookResult<TInput, TData>\n | OperationInputHookResult<TInput, TData>;\n}\n\nexport function useDurableOperation<TInput, TResult = unknown>(\n operation: DurableOperationLike<TInput, TResult>,\n options?: DurableOperationHookOptions<TInput>,\n): DurableOperationHookResult<TInput, TResult> {\n const adapter = useDefaultOperationBridgeAdapter();\n const queryClient = useQueryClient();\n const mutation = useOperation<TInput, TaskRunRef>(\n operation as ClientOperationLike<TInput, TaskRunRef>,\n { ...options, invalidateOnSuccess: false },\n );\n const runRef = mutation.value;\n const snapshotQuery = useQuery({\n queryKey: ['ontahi-task-run', runRef?.taskId, runRef?.runId],\n enabled: Boolean(runRef && adapter.getTaskSnapshot),\n queryFn: () => {\n if (!runRef || !adapter.getTaskSnapshot) {\n throw new Error('The operation bridge does not provide task snapshot transport.');\n }\n\n return adapter.getTaskSnapshot<TResult>({ taskId: runRef.taskId, runId: runRef.runId });\n },\n refetchInterval: query => {\n const status = (query.state.data as TaskSnapshot<TResult> | undefined)?.status;\n return status === 'completed' || status === 'failed' || status === 'cancelled'\n ? false\n : (options?.pollIntervalMs ?? 500);\n },\n });\n const snapshot = snapshotQuery.data;\n const invalidatedRunRef = useRef<string | undefined>(undefined);\n\n useEffect(() => {\n if (\n !snapshot ||\n (snapshot.status !== 'completed' &&\n snapshot.status !== 'failed' &&\n snapshot.status !== 'cancelled')\n ) {\n return;\n }\n\n const runKey = `${snapshot.taskId}:${snapshot.runId}:${snapshot.status}`;\n if (invalidatedRunRef.current === runKey) return;\n invalidatedRunRef.current = runKey;\n\n if (snapshot.status === 'completed' && (options?.invalidateOnSuccess ?? true)) {\n const invalidationInput = operation.input\n ? (normalizeGraphSchemaClientInput(operation.input, mutation.input) as TInput)\n : (mutation.input as TInput);\n void Promise.all(\n resolveOperationBridgeInvalidationQueryKeys(operation, invalidationInput).map(queryKey =>\n queryClient.invalidateQueries({ queryKey }),\n ),\n );\n }\n }, [mutation.input, operation, options?.invalidateOnSuccess, queryClient, snapshot]);\n\n const reset = useCallback(() => {\n mutation.reset();\n invalidatedRunRef.current = undefined;\n }, [mutation]);\n const runStatus = snapshot?.status ?? runRef?.status;\n\n return {\n ...mutation,\n reset,\n durable: operation.durable,\n snapshot,\n progress: snapshot?.progress,\n finalValue: snapshot?.result,\n runError: snapshot?.error,\n isQueued: runStatus === 'queued',\n isRunning: runStatus === 'running',\n isCompleted: runStatus === 'completed',\n isFailed: runStatus === 'failed',\n isCancelled: runStatus === 'cancelled',\n isRefreshingRun: snapshotQuery.isFetching,\n isExecuting:\n mutation.isExecuting ||\n (Boolean(adapter.getTaskSnapshot) && (runStatus === 'queued' || runStatus === 'running')),\n };\n}\n\nexport function useOperationQuery<TData>(\n operation: ClientOperationLike<void, TData>,\n options?: OperationQueryOptions<TData>,\n): UseQueryResult<TData, Error>;\nexport function useOperationQuery<TInput, TData>(\n operation: ClientSchemaOperationLike<TInput, TData>,\n input: TInput,\n options?: OperationQueryOptions<TData>,\n): UseQueryResult<TData, Error>;\nexport function useOperationQuery<TInput, TData>(\n operation: ClientOperationLike<TInput, TData>,\n input: TInput,\n options?: OperationQueryOptions<TData>,\n): UseQueryResult<TData, Error>;\nexport function useOperationQuery<TInput, TData>(\n operation: ClientOperationLike<TInput, TData> | ClientSchemaOperationLike<TInput, TData>,\n inputOrOptions?: TInput | OperationQueryOptions<TData>,\n providedOptions?: OperationQueryOptions<TData>,\n): UseQueryResult<TData, Error> {\n const hasInput = operation.input?.kind !== 'schema.void';\n const input = (\n hasInput\n ? operation.input\n ? normalizeGraphSchemaClientInput(operation.input, inputOrOptions)\n : inputOrOptions\n : undefined\n ) as TInput;\n const options = (hasInput ? providedOptions : inputOrOptions) as\n | OperationQueryOptions<TData>\n | undefined;\n const adapter = useDefaultOperationBridgeAdapter();\n const clientCache = useGraphClientCache();\n const cacheVersion = useGraphClientCacheVersion(clientCache);\n const action = adapter.useBridgeAction<TInput, TData>(\n operation as Parameters<typeof adapter.useBridgeAction<TInput, TData>>[0],\n ) as OperationBridgeAction<TInput, TData>;\n const {\n initialData: providedInitialData,\n initialDataUpdatedAt,\n placeholderData,\n ...queryOptions\n } = options ?? {};\n const hasProvidedInitialData = Boolean(options && 'initialData' in options);\n const queryKey = getOperationCacheAwareQueryKey(\n clientCache,\n operation as ClientOperationLike<TInput, TData>,\n input,\n );\n const cacheKey = queryKey;\n const initialCacheValue = hasProvidedInitialData\n ? undefined\n : readInitialOperationCacheValueFromCache(clientCache, operation, input, cacheKey);\n const initialData = hasProvidedInitialData ? providedInitialData : initialCacheValue?.value;\n\n return useQuery({\n ...queryOptions,\n initialData,\n initialDataUpdatedAt: initialDataUpdatedAt ?? initialCacheValue?.initialDataUpdatedAt,\n placeholderData: placeholderData as UseQueryOptions<\n unknown,\n Error,\n TData,\n QueryKey\n >['placeholderData'],\n queryKey,\n queryFn: async () =>\n clientCache.writeOutput(\n cacheKey,\n operation.graphOutput,\n unwrapOperationInvocationValue(toOperationInvocationResult(await action(input))),\n ).value,\n select: value => {\n void cacheVersion;\n return clientCache.denormalizeOutput(operation.graphOutput, value) as TData;\n },\n });\n}\n\nexport function useOperationInfiniteQuery<TInput, TData, TPageParam>(\n operation: ClientOperationLike<TInput, TData>,\n input: TInput,\n options: OperationInfiniteQueryOptions<TInput, TData, TPageParam>,\n) {\n const adapter = useDefaultOperationBridgeAdapter();\n const clientCache = useGraphClientCache();\n const cacheVersion = useGraphClientCacheVersion(clientCache);\n const action = adapter.useBridgeAction<TInput, TData>(\n operation as Parameters<typeof adapter.useBridgeAction<TInput, TData>>[0],\n ) as OperationBridgeAction<TInput, TData>;\n const { getPageInput, getNextPageParam, getPreviousPageParam, ...queryOptions } = options;\n const denormalizePage = useCallback(\n (value: unknown) => clientCache.denormalizeOutput(operation.graphOutput, value) as TData,\n [clientCache, operation],\n );\n\n return useInfiniteQuery<unknown, Error, InfiniteData<TData, TPageParam>, QueryKey, TPageParam>({\n ...queryOptions,\n queryKey: getOperationCacheAwareQueryKey(clientCache, operation, input),\n queryFn: async ({ pageParam }) =>\n clientCache.normalizeOutput(\n operation.graphOutput,\n unwrapOperationInvocationValue(\n toOperationInvocationResult(\n await action(\n getPageInput({\n input,\n pageParam: pageParam as TPageParam,\n }),\n ),\n ),\n ),\n ).value,\n getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>\n getNextPageParam(\n denormalizePage(lastPage),\n allPages.map(denormalizePage),\n lastPageParam,\n allPageParams,\n ),\n getPreviousPageParam: getPreviousPageParam\n ? (firstPage, allPages, firstPageParam, allPageParams) =>\n getPreviousPageParam(\n denormalizePage(firstPage),\n allPages.map(denormalizePage),\n firstPageParam,\n allPageParams,\n )\n : undefined,\n select: data => {\n void cacheVersion;\n\n return {\n pageParams: data.pageParams,\n pages: data.pages.map(denormalizePage),\n };\n },\n });\n}\n\nexport function useGraphPermission<TInput, TData>(\n invocation: OperationInvocation<TInput, TData>,\n options?: {\n enabled?: boolean;\n queryKey?: QueryKey;\n },\n): UseQueryResult<GraphPermission, Error> {\n const adapter = useDefaultOperationBridgeAdapter();\n\n return adapter.usePermission(\n invocation.operation as ClientOperationLike<TInput, TData>,\n invocation.input,\n options,\n );\n}\n\nexport function useOperationRunner<TInput, TData>(\n operation: ClientOperationLike<TInput, TData>,\n): OperationRunner<TInput, TData> {\n const adapter = useDefaultOperationBridgeAdapter();\n const clientCache = useGraphClientCache();\n const action = adapter.useBridgeAction<TInput, TData>(\n operation as Parameters<typeof adapter.useBridgeAction<TInput, TData>>[0],\n ) as OperationBridgeAction<TInput, TData>;\n\n return useCallback(\n async (input: TInput) => {\n const result = toOperationInvocationResult(await action(input));\n\n if (result.ok) {\n return {\n ...result,\n value: reconcileOperationOutput(clientCache, operation, result.value),\n };\n }\n\n return result;\n },\n [action, clientCache, operation],\n );\n}\n\nexport function useReflectedOperationRunner<TInput = unknown, TData = unknown>(\n operation: ReflectedOperationLike<TInput, TData>,\n): OperationRunner<TInput, TData> {\n const invoker = useReflectedOperationInvoker();\n\n return useCallback(\n (input: TInput) =>\n invoker.invokeOperation<TInput, TData>({\n operationId: operation.id,\n operation,\n input,\n }),\n [invoker, operation],\n );\n}\n"]}
|