@ontahi/react 0.1.0-alpha.2 → 0.1.0-alpha.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-operation-bridge-adapter.d.ts","sourceRoot":"","sources":["../../src/actions/fetch-operation-bridge-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,yBAAyB,EAC1B,MAAM,yBAAyB,CAAC;AAiBjC,OAAO,KAAK,KAAK,eAAe,MAAM,uBAAuB,CAAC;AAI9D,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AA4GF,eAAO,MAAM,oCAAoC,GAC/C,UAAS,2BAAgC,KACxC,yBAoBF,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,UAAS,2BAAgC,KACxC,eAAe,CAAC,yBA+ClB,CAAC"}
1
+ {"version":3,"file":"fetch-operation-bridge-adapter.d.ts","sourceRoot":"","sources":["../../src/actions/fetch-operation-bridge-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,yBAAyB,EAC1B,MAAM,yBAAyB,CAAC;AAiBjC,OAAO,KAAK,KAAK,eAAe,MAAM,uBAAuB,CAAC;AAI9D,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AA6GF,eAAO,MAAM,oCAAoC,GAC/C,UAAS,2BAAgC,KACxC,yBAsBF,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,UAAS,2BAAgC,KACxC,eAAe,CAAC,yBA+ClB,CAAC"}
@@ -56,6 +56,7 @@ const createFetchBridgeAction = (endpoint, operation) => attachFetchBridgeRuntim
56
56
  kind: 'invoke',
57
57
  operationId: operation.id,
58
58
  input,
59
+ ...(operation.view ? { view: operation.view } : {}),
59
60
  }));
60
61
  const createFetchPermissionAction = (endpoint, operation) => (input) => postBridgeRequest(endpoint, {
61
62
  kind: 'check-permission',
@@ -68,10 +69,11 @@ export const createFetchReflectedOperationInvoker = (options = {}) => {
68
69
  canInvokeOperation: operation => operation.kind === undefined
69
70
  ? operation.exposure === undefined || operation.exposure === 'bridge'
70
71
  : operation.kind !== 'graph' && operation.exposure === 'bridge',
71
- invokeOperation: async ({ input, operationId, }) => toOperationInvocationResult(await postBridgeRequest(endpoint, {
72
+ invokeOperation: async ({ input, operationId, view, }) => toOperationInvocationResult(await postBridgeRequest(endpoint, {
72
73
  kind: 'invoke',
73
74
  operationId,
74
75
  input,
76
+ ...(view ? { view } : {}),
75
77
  })),
76
78
  };
77
79
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-operation-bridge-adapter.js","sourceRoot":"","sources":["../../src/actions/fetch-operation-bridge-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport type {\n ReflectedOperationInvocation,\n ReflectedOperationInvoker,\n} from '@ontahi/core/data-graph';\nimport type {\n OperationInvocationResult,\n TaskRunIdentity,\n TaskSnapshot,\n} from '@ontahi/core/runtime/contracts';\nimport {\n isOperationInvocationProtocolResponse,\n type OperationInvocationRequest,\n} from '@ontahi/core/runtime/operation-invocation';\nimport { useMemo } from 'react';\n\nimport {\n attachOperationBridgeActionRuntime,\n toOperationInvocationResult,\n unwrapOperationInvocationValue,\n} from './operation-bridge.js';\nimport type * as OperationBridge from './operation-bridge.js';\nimport { useServerMutation, useServerQuery } from './react-query.js';\nimport type { ActionResultLike } from './use-action.js';\n\nexport type FetchOperationBridgeOptions = {\n mountPath?: string;\n endpoint?: string;\n taskEndpoint?: string;\n};\n\nconst DEFAULT_ENDPOINT = '/api/data-graph/domain-operations';\n\nconst normalizeMountPath = (value: string) => {\n const path = value.startsWith('/') ? value : `/${value}`;\n return path === '/' ? '' : path.replace(/\\/+$/, '');\n};\n\nconst mountedEndpoint = (mountPath: string, endpoint: string) =>\n `${normalizeMountPath(mountPath)}/${endpoint}`;\n\nconst operationEndpoint = (options: FetchOperationBridgeOptions) =>\n options.endpoint ??\n (options.mountPath ? mountedEndpoint(options.mountPath, 'operations') : DEFAULT_ENDPOINT);\n\nconst operationTaskEndpoint = (options: FetchOperationBridgeOptions) =>\n options.taskEndpoint ??\n (options.mountPath ? mountedEndpoint(options.mountPath, 'operations/tasks') : undefined);\n\nconst fetchTaskSnapshot = async <TResult>(\n endpoint: string,\n ref: TaskRunIdentity,\n): Promise<TaskSnapshot<TResult>> => {\n const response = await fetch(\n `${endpoint}/${encodeURIComponent(ref.taskId)}/${encodeURIComponent(ref.runId)}`,\n { credentials: 'same-origin' },\n );\n const payload: unknown = await response.json().catch(() => null);\n\n if (!response.ok || typeof payload !== 'object' || payload === null) {\n throw new Error(`Task snapshot request failed with status ${response.status}.`);\n }\n\n return payload as TaskSnapshot<TResult>;\n};\n\nconst attachFetchBridgeRuntime = <TInput, TData>(\n operation: OperationBridge.BridgedOperationLike<TInput, TData>,\n action: OperationBridge.OperationBridgeAction<TInput, TData>,\n) =>\n attachOperationBridgeActionRuntime(operation, action, {\n requiresAuth: operation.authority !== 'server' ? false : operation.exposure !== 'bridge',\n });\n\nconst postBridgeRequest = async <TData>(\n endpoint: string,\n request: OperationInvocationRequest,\n): Promise<ActionResultLike & { data?: TData }> => {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n credentials: 'same-origin',\n body: JSON.stringify(request),\n });\n const payload: unknown = await response.json().catch(() => null);\n\n if (!isOperationInvocationProtocolResponse(payload)) {\n return {\n serverError: response.ok\n ? 'Graph bridge returned an invalid response.'\n : `Graph bridge request failed with status ${response.status}.`,\n };\n }\n\n if (payload.kind === 'protocol-error') {\n return { serverError: payload.error.message };\n }\n\n if (request.kind === 'invoke' && payload.kind === 'invocation-result') {\n return { data: payload.result as TData };\n }\n\n if (request.kind === 'check-permission' && payload.kind === 'permission-result') {\n return { data: payload.result as TData };\n }\n\n return { serverError: 'Graph bridge returned an invalid response.' };\n};\n\nconst createFetchBridgeAction = <TInput, TData>(\n endpoint: string,\n operation: OperationBridge.BridgedOperationLike<TInput, TData>,\n): OperationBridge.OperationBridgeAction<TInput, TData> =>\n attachFetchBridgeRuntime(operation, (input: TInput) =>\n postBridgeRequest<OperationInvocationResult<TData>>(endpoint, {\n kind: 'invoke',\n operationId: operation.id,\n input,\n }),\n ) as OperationBridge.OperationBridgeAction<TInput, TData>;\n\nconst createFetchPermissionAction =\n <TInput, TData>(\n endpoint: string,\n operation: OperationBridge.BridgedOperationLike<TInput, TData>,\n ): ((\n input: TInput,\n ) => Promise<OperationBridge.OperationBridgeActionResult<OperationBridge.GraphPermission>>) =>\n (input: TInput) =>\n postBridgeRequest<OperationBridge.GraphPermission>(endpoint, {\n kind: 'check-permission',\n operationId: operation.id,\n input,\n });\n\nexport const createFetchReflectedOperationInvoker = (\n options: FetchOperationBridgeOptions = {},\n): ReflectedOperationInvoker => {\n const endpoint = operationEndpoint(options);\n\n return {\n canInvokeOperation: operation =>\n operation.kind === undefined\n ? operation.exposure === undefined || operation.exposure === 'bridge'\n : operation.kind !== 'graph' && operation.exposure === 'bridge',\n invokeOperation: async <TInput = unknown, TData = unknown>({\n input,\n operationId,\n }: ReflectedOperationInvocation<TInput>) =>\n toOperationInvocationResult<TData>(\n await postBridgeRequest<OperationInvocationResult<TData>>(endpoint, {\n kind: 'invoke',\n operationId,\n input,\n }),\n ),\n };\n};\n\nexport const createFetchOperationBridgeAdapter = (\n options: FetchOperationBridgeOptions = {},\n): OperationBridge.AnyOperationBridgeAdapter => {\n const endpoint = operationEndpoint(options);\n const taskEndpoint = operationTaskEndpoint(options);\n const buildRuntimeAction = <TInput, TData>(\n operation: OperationBridge.BridgedOperationLike<TInput, TData>,\n ) => createFetchBridgeAction(endpoint, operation);\n\n return {\n name: 'fetch',\n ...(taskEndpoint\n ? {\n getTaskSnapshot: (ref: TaskRunIdentity) => fetchTaskSnapshot(taskEndpoint, ref),\n }\n : {}),\n useBridgeAction: operation =>\n useMemo(\n () => buildRuntimeAction(operation) as OperationBridge.OperationBridgeAction<any, any>,\n [operation],\n ) as OperationBridge.OperationBridgeAction<any, any>,\n useBridgeMutation: (operation, options) => {\n const action = useMemo(() => buildRuntimeAction(operation), [operation]);\n\n return useServerMutation(\n action as OperationBridge.OperationBridgeAction<unknown, unknown>,\n options as Parameters<\n typeof useServerMutation<OperationBridge.OperationBridgeAction<unknown, unknown>>\n >[1],\n ) as ReturnType<typeof useServerMutation<OperationBridge.OperationBridgeAction<any, any>>>;\n },\n useBridgeQuery: (operation, args) => {\n const action = useMemo(() => buildRuntimeAction(operation), [operation]);\n\n return useServerQuery({\n action: action as OperationBridge.OperationBridgeAction<unknown, unknown>,\n input: args.input as unknown,\n key: args.key,\n select: unwrapOperationInvocationValue,\n }) as any;\n },\n usePermission: (operation, input, args) =>\n useServerQuery({\n enabled: args?.enabled,\n action: createFetchPermissionAction(endpoint, operation),\n input,\n key: args?.queryKey ?? ['graph-permission', operation.id, input],\n }),\n };\n};\n"]}
1
+ {"version":3,"file":"fetch-operation-bridge-adapter.js","sourceRoot":"","sources":["../../src/actions/fetch-operation-bridge-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport type {\n ReflectedOperationInvocation,\n ReflectedOperationInvoker,\n} from '@ontahi/core/data-graph';\nimport type {\n OperationInvocationResult,\n TaskRunIdentity,\n TaskSnapshot,\n} from '@ontahi/core/runtime/contracts';\nimport {\n isOperationInvocationProtocolResponse,\n type OperationInvocationRequest,\n} from '@ontahi/core/runtime/operation-invocation';\nimport { useMemo } from 'react';\n\nimport {\n attachOperationBridgeActionRuntime,\n toOperationInvocationResult,\n unwrapOperationInvocationValue,\n} from './operation-bridge.js';\nimport type * as OperationBridge from './operation-bridge.js';\nimport { useServerMutation, useServerQuery } from './react-query.js';\nimport type { ActionResultLike } from './use-action.js';\n\nexport type FetchOperationBridgeOptions = {\n mountPath?: string;\n endpoint?: string;\n taskEndpoint?: string;\n};\n\nconst DEFAULT_ENDPOINT = '/api/data-graph/domain-operations';\n\nconst normalizeMountPath = (value: string) => {\n const path = value.startsWith('/') ? value : `/${value}`;\n return path === '/' ? '' : path.replace(/\\/+$/, '');\n};\n\nconst mountedEndpoint = (mountPath: string, endpoint: string) =>\n `${normalizeMountPath(mountPath)}/${endpoint}`;\n\nconst operationEndpoint = (options: FetchOperationBridgeOptions) =>\n options.endpoint ??\n (options.mountPath ? mountedEndpoint(options.mountPath, 'operations') : DEFAULT_ENDPOINT);\n\nconst operationTaskEndpoint = (options: FetchOperationBridgeOptions) =>\n options.taskEndpoint ??\n (options.mountPath ? mountedEndpoint(options.mountPath, 'operations/tasks') : undefined);\n\nconst fetchTaskSnapshot = async <TResult>(\n endpoint: string,\n ref: TaskRunIdentity,\n): Promise<TaskSnapshot<TResult>> => {\n const response = await fetch(\n `${endpoint}/${encodeURIComponent(ref.taskId)}/${encodeURIComponent(ref.runId)}`,\n { credentials: 'same-origin' },\n );\n const payload: unknown = await response.json().catch(() => null);\n\n if (!response.ok || typeof payload !== 'object' || payload === null) {\n throw new Error(`Task snapshot request failed with status ${response.status}.`);\n }\n\n return payload as TaskSnapshot<TResult>;\n};\n\nconst attachFetchBridgeRuntime = <TInput, TData>(\n operation: OperationBridge.BridgedOperationLike<TInput, TData>,\n action: OperationBridge.OperationBridgeAction<TInput, TData>,\n) =>\n attachOperationBridgeActionRuntime(operation, action, {\n requiresAuth: operation.authority !== 'server' ? false : operation.exposure !== 'bridge',\n });\n\nconst postBridgeRequest = async <TData>(\n endpoint: string,\n request: OperationInvocationRequest,\n): Promise<ActionResultLike & { data?: TData }> => {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n credentials: 'same-origin',\n body: JSON.stringify(request),\n });\n const payload: unknown = await response.json().catch(() => null);\n\n if (!isOperationInvocationProtocolResponse(payload)) {\n return {\n serverError: response.ok\n ? 'Graph bridge returned an invalid response.'\n : `Graph bridge request failed with status ${response.status}.`,\n };\n }\n\n if (payload.kind === 'protocol-error') {\n return { serverError: payload.error.message };\n }\n\n if (request.kind === 'invoke' && payload.kind === 'invocation-result') {\n return { data: payload.result as TData };\n }\n\n if (request.kind === 'check-permission' && payload.kind === 'permission-result') {\n return { data: payload.result as TData };\n }\n\n return { serverError: 'Graph bridge returned an invalid response.' };\n};\n\nconst createFetchBridgeAction = <TInput, TData>(\n endpoint: string,\n operation: OperationBridge.BridgedOperationLike<TInput, TData>,\n): OperationBridge.OperationBridgeAction<TInput, TData> =>\n attachFetchBridgeRuntime(operation, (input: TInput) =>\n postBridgeRequest<OperationInvocationResult<TData>>(endpoint, {\n kind: 'invoke',\n operationId: operation.id,\n input,\n ...(operation.view ? { view: operation.view } : {}),\n }),\n ) as OperationBridge.OperationBridgeAction<TInput, TData>;\n\nconst createFetchPermissionAction =\n <TInput, TData>(\n endpoint: string,\n operation: OperationBridge.BridgedOperationLike<TInput, TData>,\n ): ((\n input: TInput,\n ) => Promise<OperationBridge.OperationBridgeActionResult<OperationBridge.GraphPermission>>) =>\n (input: TInput) =>\n postBridgeRequest<OperationBridge.GraphPermission>(endpoint, {\n kind: 'check-permission',\n operationId: operation.id,\n input,\n });\n\nexport const createFetchReflectedOperationInvoker = (\n options: FetchOperationBridgeOptions = {},\n): ReflectedOperationInvoker => {\n const endpoint = operationEndpoint(options);\n\n return {\n canInvokeOperation: operation =>\n operation.kind === undefined\n ? operation.exposure === undefined || operation.exposure === 'bridge'\n : operation.kind !== 'graph' && operation.exposure === 'bridge',\n invokeOperation: async <TInput = unknown, TData = unknown>({\n input,\n operationId,\n view,\n }: ReflectedOperationInvocation<TInput>) =>\n toOperationInvocationResult<TData>(\n await postBridgeRequest<OperationInvocationResult<TData>>(endpoint, {\n kind: 'invoke',\n operationId,\n input,\n ...(view ? { view } : {}),\n }),\n ),\n };\n};\n\nexport const createFetchOperationBridgeAdapter = (\n options: FetchOperationBridgeOptions = {},\n): OperationBridge.AnyOperationBridgeAdapter => {\n const endpoint = operationEndpoint(options);\n const taskEndpoint = operationTaskEndpoint(options);\n const buildRuntimeAction = <TInput, TData>(\n operation: OperationBridge.BridgedOperationLike<TInput, TData>,\n ) => createFetchBridgeAction(endpoint, operation);\n\n return {\n name: 'fetch',\n ...(taskEndpoint\n ? {\n getTaskSnapshot: (ref: TaskRunIdentity) => fetchTaskSnapshot(taskEndpoint, ref),\n }\n : {}),\n useBridgeAction: operation =>\n useMemo(\n () => buildRuntimeAction(operation) as OperationBridge.OperationBridgeAction<any, any>,\n [operation],\n ) as OperationBridge.OperationBridgeAction<any, any>,\n useBridgeMutation: (operation, options) => {\n const action = useMemo(() => buildRuntimeAction(operation), [operation]);\n\n return useServerMutation(\n action as OperationBridge.OperationBridgeAction<unknown, unknown>,\n options as Parameters<\n typeof useServerMutation<OperationBridge.OperationBridgeAction<unknown, unknown>>\n >[1],\n ) as ReturnType<typeof useServerMutation<OperationBridge.OperationBridgeAction<any, any>>>;\n },\n useBridgeQuery: (operation, args) => {\n const action = useMemo(() => buildRuntimeAction(operation), [operation]);\n\n return useServerQuery({\n action: action as OperationBridge.OperationBridgeAction<unknown, unknown>,\n input: args.input as unknown,\n key: args.key,\n select: unwrapOperationInvocationValue,\n }) as any;\n },\n usePermission: (operation, input, args) =>\n useServerQuery({\n enabled: args?.enabled,\n action: createFetchPermissionAction(endpoint, operation),\n input,\n key: args?.queryKey ?? ['graph-permission', operation.id, input],\n }),\n };\n};\n"]}
@@ -5,7 +5,7 @@ import { useServerMutation, useServerQuery } from './react-query.js';
5
5
  const attachNextActionBridgeRuntime = (operation, action) => attachOperationBridgeActionRuntime(operation, action, {
6
6
  requiresAuth: operation.authority !== 'server' ? false : operation.exposure !== 'bridge',
7
7
  });
8
- const createRuntimeBridgeAction = (bridgeAction, operation) => attachNextActionBridgeRuntime(operation, createDomainOperationBridgeAction(bridgeAction, operation.id));
8
+ const createRuntimeBridgeAction = (bridgeAction, operation) => attachNextActionBridgeRuntime(operation, createDomainOperationBridgeAction(bridgeAction, operation));
9
9
  export const createNextActionOperationBridgeAdapter = (bridgeAction, options) => {
10
10
  const buildRuntimeAction = (operation) => createRuntimeBridgeAction(bridgeAction, operation);
11
11
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"operation-bridge-adapter.js","sourceRoot":"","sources":["../../src/actions/operation-bridge-adapter.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EACL,kCAAkC,EAClC,iCAAiC,EACjC,8BAA8B,GAM/B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAErE,MAAM,6BAA6B,GAAG,CACpC,SAA8C,EAC9C,MAA4C,EAC5C,EAAE,CACF,kCAAkC,CAAC,SAAS,EAAE,MAAM,EAAE;IACpD,YAAY,EAAE,SAAS,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,KAAK,QAAQ;CACzF,CAAC,CAAC;AAEL,MAAM,yBAAyB,GAAG,CAChC,YAA4C,EAC5C,SAA8C,EACR,EAAE,CACxC,6BAA6B,CAC3B,SAAS,EACT,iCAAiC,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,CAG3D,CACsC,CAAC;AAE5C,MAAM,CAAC,MAAM,sCAAsC,GAAG,CACpD,YAA4C,EAC5C,OAGC,EAC0B,EAAE;IAC7B,MAAM,kBAAkB,GAAG,CAAgB,SAA8C,EAAE,EAAE,CAC3F,yBAAyB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAErD,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,eAAe,EAAE,OAAO,EAAE,eAAe;QACzC,eAAe,EAAE,SAAS,CAAC,EAAE,CAC3B,OAAO,CACL,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAoC,EACtE,CAAC,SAAS,CAAC,CACuB;QACtC,iBAAiB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAEzE,OAAO,iBAAiB,CACtB,MAAiD,EACjD,OAA2F,CACnB,CAAC;QAC7E,CAAC;QACD,cAAc,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE;YAClC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAEzE,OAAO,cAAc,CAAC;gBACpB,MAAM,EAAE,MAAiD;gBACzD,KAAK,EAAE,IAAI,CAAC,KAAgB;gBAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,MAAM,EAAE,8BAA8B;aACvC,CAAQ,CAAC;QACZ,CAAC;QACD,aAAa,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CACxC,cAAc,CAAC;YACb,OAAO,EAAE,IAAI,EAAE,OAAO;YACtB,MAAM,EAAE,KAAK,EAAE,MAAiB,EAAE,EAAE;gBAClC,IAAI,CAAC,OAAO,EAAE,qBAAqB,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;gBACvE,CAAC;gBAED,OAAO,OAAO,CAAC,qBAAqB,CAAC;oBACnC,WAAW,EAAE,SAAS,CAAC,EAAE;oBACzB,KAAK;iBACN,CAAC,CAAC;YACL,CAAC;YACD,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,IAAI,EAAE,QAAQ,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC;SACjE,CAAC;KACL,CAAC;AACJ,CAAC,CAAC","sourcesContent":["'use client';\n\nimport type { TaskRunIdentity, TaskSnapshot } from '@ontahi/core/runtime/contracts';\nimport { useMemo } from 'react';\n\nimport {\n attachOperationBridgeActionRuntime,\n createDomainOperationBridgeAction,\n unwrapOperationInvocationValue,\n type AnyOperationBridgeAdapter,\n type BridgedOperationLike,\n type CheckDomainOperationPermissionBridgeAction,\n type OperationBridgeAction,\n type RunDomainOperationBridgeAction,\n} from './operation-bridge.js';\nimport { useServerMutation, useServerQuery } from './react-query.js';\n\nconst attachNextActionBridgeRuntime = <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n action: OperationBridgeAction<TInput, TData>,\n) =>\n attachOperationBridgeActionRuntime(operation, action, {\n requiresAuth: operation.authority !== 'server' ? false : operation.exposure !== 'bridge',\n });\n\nconst createRuntimeBridgeAction = <TInput, TData>(\n bridgeAction: RunDomainOperationBridgeAction,\n operation: BridgedOperationLike<TInput, TData>,\n): OperationBridgeAction<TInput, TData> =>\n attachNextActionBridgeRuntime(\n operation,\n createDomainOperationBridgeAction(bridgeAction, operation.id) as OperationBridgeAction<\n TInput,\n TData\n >,\n ) as OperationBridgeAction<TInput, TData>;\n\nexport const createNextActionOperationBridgeAdapter = (\n bridgeAction: RunDomainOperationBridgeAction,\n options?: {\n checkPermissionAction?: CheckDomainOperationPermissionBridgeAction;\n getTaskSnapshot?: <TResult = unknown>(ref: TaskRunIdentity) => Promise<TaskSnapshot<TResult>>;\n },\n): AnyOperationBridgeAdapter => {\n const buildRuntimeAction = <TInput, TData>(operation: BridgedOperationLike<TInput, TData>) =>\n createRuntimeBridgeAction(bridgeAction, operation);\n\n return {\n name: 'next-action',\n getTaskSnapshot: options?.getTaskSnapshot,\n useBridgeAction: operation =>\n useMemo(\n () => buildRuntimeAction(operation) as OperationBridgeAction<any, any>,\n [operation],\n ) as OperationBridgeAction<any, any>,\n useBridgeMutation: (operation, options) => {\n const action = useMemo(() => buildRuntimeAction(operation), [operation]);\n\n return useServerMutation(\n action as OperationBridgeAction<unknown, unknown>,\n options as Parameters<typeof useServerMutation<OperationBridgeAction<unknown, unknown>>>[1],\n ) as ReturnType<typeof useServerMutation<OperationBridgeAction<any, any>>>;\n },\n useBridgeQuery: (operation, args) => {\n const action = useMemo(() => buildRuntimeAction(operation), [operation]);\n\n return useServerQuery({\n action: action as OperationBridgeAction<unknown, unknown>,\n input: args.input as unknown,\n key: args.key,\n select: unwrapOperationInvocationValue,\n }) as any;\n },\n usePermission: (operation, input, args) =>\n useServerQuery({\n enabled: args?.enabled,\n action: async (_input: undefined) => {\n if (!options?.checkPermissionAction) {\n throw new Error('No operation permission bridge action registered.');\n }\n\n return options.checkPermissionAction({\n operationId: operation.id,\n input,\n });\n },\n input: undefined,\n key: args?.queryKey ?? ['graph-permission', operation.id, input],\n }),\n };\n};\n"]}
1
+ {"version":3,"file":"operation-bridge-adapter.js","sourceRoot":"","sources":["../../src/actions/operation-bridge-adapter.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EACL,kCAAkC,EAClC,iCAAiC,EACjC,8BAA8B,GAM/B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAErE,MAAM,6BAA6B,GAAG,CACpC,SAA8C,EAC9C,MAA4C,EAC5C,EAAE,CACF,kCAAkC,CAAC,SAAS,EAAE,MAAM,EAAE;IACpD,YAAY,EAAE,SAAS,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,KAAK,QAAQ;CACzF,CAAC,CAAC;AAEL,MAAM,yBAAyB,GAAG,CAChC,YAA4C,EAC5C,SAA8C,EACR,EAAE,CACxC,6BAA6B,CAC3B,SAAS,EACT,iCAAiC,CAAC,YAAY,EAAE,SAAS,CAGxD,CACsC,CAAC;AAE5C,MAAM,CAAC,MAAM,sCAAsC,GAAG,CACpD,YAA4C,EAC5C,OAGC,EAC0B,EAAE;IAC7B,MAAM,kBAAkB,GAAG,CAAgB,SAA8C,EAAE,EAAE,CAC3F,yBAAyB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAErD,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,eAAe,EAAE,OAAO,EAAE,eAAe;QACzC,eAAe,EAAE,SAAS,CAAC,EAAE,CAC3B,OAAO,CACL,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAoC,EACtE,CAAC,SAAS,CAAC,CACuB;QACtC,iBAAiB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAEzE,OAAO,iBAAiB,CACtB,MAAiD,EACjD,OAA2F,CACnB,CAAC;QAC7E,CAAC;QACD,cAAc,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE;YAClC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAEzE,OAAO,cAAc,CAAC;gBACpB,MAAM,EAAE,MAAiD;gBACzD,KAAK,EAAE,IAAI,CAAC,KAAgB;gBAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,MAAM,EAAE,8BAA8B;aACvC,CAAQ,CAAC;QACZ,CAAC;QACD,aAAa,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CACxC,cAAc,CAAC;YACb,OAAO,EAAE,IAAI,EAAE,OAAO;YACtB,MAAM,EAAE,KAAK,EAAE,MAAiB,EAAE,EAAE;gBAClC,IAAI,CAAC,OAAO,EAAE,qBAAqB,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;gBACvE,CAAC;gBAED,OAAO,OAAO,CAAC,qBAAqB,CAAC;oBACnC,WAAW,EAAE,SAAS,CAAC,EAAE;oBACzB,KAAK;iBACN,CAAC,CAAC;YACL,CAAC;YACD,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,IAAI,EAAE,QAAQ,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC;SACjE,CAAC;KACL,CAAC;AACJ,CAAC,CAAC","sourcesContent":["'use client';\n\nimport type { TaskRunIdentity, TaskSnapshot } from '@ontahi/core/runtime/contracts';\nimport { useMemo } from 'react';\n\nimport {\n attachOperationBridgeActionRuntime,\n createDomainOperationBridgeAction,\n unwrapOperationInvocationValue,\n type AnyOperationBridgeAdapter,\n type BridgedOperationLike,\n type CheckDomainOperationPermissionBridgeAction,\n type OperationBridgeAction,\n type RunDomainOperationBridgeAction,\n} from './operation-bridge.js';\nimport { useServerMutation, useServerQuery } from './react-query.js';\n\nconst attachNextActionBridgeRuntime = <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n action: OperationBridgeAction<TInput, TData>,\n) =>\n attachOperationBridgeActionRuntime(operation, action, {\n requiresAuth: operation.authority !== 'server' ? false : operation.exposure !== 'bridge',\n });\n\nconst createRuntimeBridgeAction = <TInput, TData>(\n bridgeAction: RunDomainOperationBridgeAction,\n operation: BridgedOperationLike<TInput, TData>,\n): OperationBridgeAction<TInput, TData> =>\n attachNextActionBridgeRuntime(\n operation,\n createDomainOperationBridgeAction(bridgeAction, operation) as OperationBridgeAction<\n TInput,\n TData\n >,\n ) as OperationBridgeAction<TInput, TData>;\n\nexport const createNextActionOperationBridgeAdapter = (\n bridgeAction: RunDomainOperationBridgeAction,\n options?: {\n checkPermissionAction?: CheckDomainOperationPermissionBridgeAction;\n getTaskSnapshot?: <TResult = unknown>(ref: TaskRunIdentity) => Promise<TaskSnapshot<TResult>>;\n },\n): AnyOperationBridgeAdapter => {\n const buildRuntimeAction = <TInput, TData>(operation: BridgedOperationLike<TInput, TData>) =>\n createRuntimeBridgeAction(bridgeAction, operation);\n\n return {\n name: 'next-action',\n getTaskSnapshot: options?.getTaskSnapshot,\n useBridgeAction: operation =>\n useMemo(\n () => buildRuntimeAction(operation) as OperationBridgeAction<any, any>,\n [operation],\n ) as OperationBridgeAction<any, any>,\n useBridgeMutation: (operation, options) => {\n const action = useMemo(() => buildRuntimeAction(operation), [operation]);\n\n return useServerMutation(\n action as OperationBridgeAction<unknown, unknown>,\n options as Parameters<typeof useServerMutation<OperationBridgeAction<unknown, unknown>>>[1],\n ) as ReturnType<typeof useServerMutation<OperationBridgeAction<any, any>>>;\n },\n useBridgeQuery: (operation, args) => {\n const action = useMemo(() => buildRuntimeAction(operation), [operation]);\n\n return useServerQuery({\n action: action as OperationBridgeAction<unknown, unknown>,\n input: args.input as unknown,\n key: args.key,\n select: unwrapOperationInvocationValue,\n }) as any;\n },\n usePermission: (operation, input, args) =>\n useServerQuery({\n enabled: args?.enabled,\n action: async (_input: undefined) => {\n if (!options?.checkPermissionAction) {\n throw new Error('No operation permission bridge action registered.');\n }\n\n return options.checkPermissionAction({\n operationId: operation.id,\n input,\n });\n },\n input: undefined,\n key: args?.queryKey ?? ['graph-permission', operation.id, input],\n }),\n };\n};\n"]}
@@ -1,4 +1,4 @@
1
- import type { ClientDomainOperationDeclaration } from '@ontahi/core/data-graph';
1
+ import type { ClientDomainOperationDeclaration, EntityViewAst } from '@ontahi/core/data-graph';
2
2
  import { type ActionQueryKey } from '@ontahi/core/runtime/actions';
3
3
  import type { OperationInvocationResult, TaskRunIdentity, TaskSnapshot } from '@ontahi/core/runtime/contracts';
4
4
  import type { QueryKey, UseQueryResult } from '@tanstack/react-query';
@@ -14,7 +14,14 @@ export type OperationInvocationFailure<TFailure = unknown> = Exclude<OperationIn
14
14
  export declare class OperationInvocationResultError<TFailure = unknown> extends Error {
15
15
  readonly result: OperationInvocationFailure<TFailure>;
16
16
  readonly name = "OperationInvocationResultError";
17
+ readonly cause?: unknown;
17
18
  constructor(result: OperationInvocationFailure<TFailure>);
19
+ toJSON(): {
20
+ result: OperationInvocationFailure<TFailure>;
21
+ cause?: {} | null | undefined;
22
+ name: string;
23
+ message: string;
24
+ };
18
25
  }
19
26
  export declare const isOperationInvocationResult: <TData = unknown, TFailure = unknown>(value: unknown) => value is OperationInvocationResult<TData, TFailure>;
20
27
  export declare const operationBridgeErrored: (message: string) => OperationInvocationResult;
@@ -24,10 +31,12 @@ export type BridgedOperationLike<TInput, TData> = ClientDomainOperationDeclarati
24
31
  id: string;
25
32
  entityName: string;
26
33
  name: string;
34
+ view?: EntityViewAst;
27
35
  };
28
36
  export type RunDomainOperationBridgeAction = (input: {
29
37
  operationId: string;
30
38
  input: unknown;
39
+ view?: EntityViewAst;
31
40
  }) => Promise<ActionResultLike>;
32
41
  export type GraphPermission = {
33
42
  allowed: true;
@@ -60,7 +69,7 @@ export type AnyOperationBridgeAdapter = OperationBridgeAdapter<string>;
60
69
  export declare const resolveOperationBridgeQuerySpec: <TInput, TData>(operation: BridgedOperationLike<TInput, TData>) => readonly [string, string, ...unknown[]];
61
70
  export declare const resolveOperationBridgeQueryKey: <TInput, TData>(operation: BridgedOperationLike<TInput, TData>, input: TInput) => ActionQueryKey;
62
71
  export declare const resolveOperationBridgeInvalidationQueryKeys: <TInput, TData>(operation: BridgedOperationLike<TInput, TData>, input: TInput) => ActionQueryKey[];
63
- export declare const createDomainOperationBridgeAction: <TInput, TData>(bridgeAction: RunDomainOperationBridgeAction, operationId: string) => OperationBridgeAction<TInput, TData>;
72
+ export declare const createDomainOperationBridgeAction: <TInput, TData>(bridgeAction: RunDomainOperationBridgeAction, operation: BridgedOperationLike<TInput, TData>) => OperationBridgeAction<TInput, TData>;
64
73
  export declare const attachOperationBridgeActionRuntime: <TInput, TData>(operation: BridgedOperationLike<TInput, TData>, action: OperationBridgeAction<TInput, TData>, options: {
65
74
  requiresAuth: boolean;
66
75
  }) => ((input: unknown) => Promise<OperationBridgeActionResult<OperationInvocationResult<TData>>>) & {
@@ -1 +1 @@
1
- {"version":3,"file":"operation-bridge.d.ts","sourceRoot":"","sources":["../../src/actions/operation-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operation-bridge.d.ts","sourceRoot":"","sources":["../../src/actions/operation-bridge.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,20 @@ export class OperationInvocationResultError extends Error {
6
6
  super(result.message);
7
7
  this.result = result;
8
8
  this.name = 'OperationInvocationResultError';
9
+ if (result.kind === 'failed') {
10
+ Object.defineProperty(this, 'cause', {
11
+ configurable: true,
12
+ value: result.failure,
13
+ });
14
+ }
15
+ }
16
+ toJSON() {
17
+ return {
18
+ name: this.name,
19
+ message: this.message,
20
+ ...(this.cause === undefined ? {} : { cause: this.cause }),
21
+ result: this.result,
22
+ };
9
23
  }
10
24
  }
11
25
  const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
@@ -50,6 +64,7 @@ export const resolveOperationBridgeQueryKey = (operation, input) => {
50
64
  return [
51
65
  operation.entityName,
52
66
  operation.name,
67
+ ...(operation.view ? [operation.view] : []),
53
68
  ...(operation.bridge?.query?.map(segment => resolveOperationBridgeQueryKeySegment(segment, operation, queryInput)) ?? []),
54
69
  ];
55
70
  };
@@ -57,9 +72,10 @@ export const resolveOperationBridgeInvalidationQueryKeys = (operation, input) =>
57
72
  const queryInput = normalizeEntityRefQueryInput(input, operation.inputRefs);
58
73
  return (operation.bridge?.invalidate?.map(querySpec => querySpec.map(segment => resolveOperationBridgeQueryKeySegment(segment, operation, queryInput))) ?? []);
59
74
  };
60
- export const createDomainOperationBridgeAction = (bridgeAction, operationId) => (input) => bridgeAction({
61
- operationId,
75
+ export const createDomainOperationBridgeAction = (bridgeAction, operation) => (input) => bridgeAction({
76
+ operationId: operation.id,
62
77
  input,
78
+ ...(operation.view ? { view: operation.view } : {}),
63
79
  });
64
80
  export const attachOperationBridgeActionRuntime = (operation, action, options) => attachActionRuntime(action, {
65
81
  feature: operation.entityName,
@@ -1 +1 @@
1
- {"version":3,"file":"operation-bridge.js","sourceRoot":"","sources":["../../src/actions/operation-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport type { ClientDomainOperationDeclaration, QueryKeySegment } from '@ontahi/core/data-graph';\nimport { normalizeEntityRefQueryInput } from '@ontahi/core/data-graph';\nimport {\n attachActionRuntime,\n getActionErrorMessage,\n hasActionError,\n type ActionQueryKey,\n} from '@ontahi/core/runtime/actions';\nimport type {\n OperationInvocationResult,\n TaskRunIdentity,\n TaskSnapshot,\n} from '@ontahi/core/runtime/contracts';\nimport type { QueryKey, UseQueryResult } from '@tanstack/react-query';\n\nimport type { ActionResultLike, UseActionOptions, UseActionResult } from './use-action.js';\n\nexport type { OperationInvocationResult };\n\nexport type OperationBridgeActionResult<TData> = Omit<ActionResultLike, 'data'> & {\n data?: TData;\n};\n\nexport type OperationBridgeAction<TInput, TData> = (\n input: TInput,\n) => Promise<OperationBridgeActionResult<OperationInvocationResult<TData>>>;\n\nexport type OperationInvocationFailure<TFailure = unknown> = Exclude<\n OperationInvocationResult<unknown, TFailure>,\n { ok: true }\n>;\n\nexport class OperationInvocationResultError<TFailure = unknown> extends Error {\n readonly name = 'OperationInvocationResultError';\n\n constructor(readonly result: OperationInvocationFailure<TFailure>) {\n super(result.message);\n }\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const isOperationInvocationResult = <TData = unknown, TFailure = unknown>(\n value: unknown,\n): value is OperationInvocationResult<TData, TFailure> =>\n isRecord(value) && typeof value.ok === 'boolean' && typeof value.kind === 'string';\n\nexport const operationBridgeErrored = (message: string): OperationInvocationResult => ({\n ok: false,\n kind: 'errored',\n executed: 'unknown',\n message,\n});\n\nexport const toOperationInvocationResult = <TData>(\n result: OperationBridgeActionResult<OperationInvocationResult<TData>>,\n): OperationInvocationResult<TData> => {\n if (hasActionError(result)) {\n return operationBridgeErrored(\n getActionErrorMessage(result),\n ) as OperationInvocationResult<TData>;\n }\n\n if (isOperationInvocationResult<TData>(result.data)) {\n return result.data;\n }\n\n if ('data' in result) {\n return {\n ok: true,\n kind: 'success',\n value: result.data as TData,\n };\n }\n\n return operationBridgeErrored(\n 'Graph operation bridge returned an invalid response.',\n ) as OperationInvocationResult<TData>;\n};\n\nexport const unwrapOperationInvocationValue = <TData>(\n result: OperationInvocationResult<TData>,\n): TData => {\n if (result.ok) {\n return result.value;\n }\n\n throw new OperationInvocationResultError(result);\n};\n\nexport type BridgedOperationLike<TInput, TData> = ClientDomainOperationDeclaration<\n TInput,\n TData\n> & {\n id: string;\n entityName: string;\n name: string;\n};\n\nexport type RunDomainOperationBridgeAction = (input: {\n operationId: string;\n input: unknown;\n}) => Promise<ActionResultLike>;\n\nexport type GraphPermission =\n | {\n allowed: true;\n }\n | {\n allowed: false;\n reason: string;\n message: string;\n };\n\nexport type CheckDomainOperationPermissionBridgeAction = (input: {\n operationId: string;\n input: unknown;\n}) => Promise<OperationBridgeActionResult<GraphPermission>>;\n\nexport type OperationBridgeAdapter<TAdapterName extends string = string> = {\n name: TAdapterName;\n getTaskSnapshot?: <TResult = unknown>(ref: TaskRunIdentity) => Promise<TaskSnapshot<TResult>>;\n useBridgeAction: <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n ) => OperationBridgeAction<TInput, TData>;\n useBridgeMutation: <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n options?: UseActionOptions<OperationBridgeAction<TInput, TData>> & {\n invalidateOnSuccess?: boolean;\n },\n ) => UseActionResult<OperationBridgeAction<TInput, TData>>;\n useBridgeQuery: <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n args: {\n input: TInput;\n key: QueryKey;\n },\n ) => UseQueryResult<TData, Error>;\n usePermission: <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n input: TInput,\n options?: {\n enabled?: boolean;\n queryKey?: QueryKey;\n },\n ) => UseQueryResult<GraphPermission, Error>;\n};\n\nexport type AnyOperationBridgeAdapter = OperationBridgeAdapter<string>;\n\nexport const resolveOperationBridgeQuerySpec = <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n) => [operation.entityName, operation.name, ...(operation.bridge?.query ?? [])] as const;\n\nconst resolveOperationBridgeQueryKeySegment = <TInput, TData>(\n segment: QueryKeySegment<TInput>,\n operation: BridgedOperationLike<TInput, TData>,\n input: TInput,\n) =>\n typeof segment === 'function'\n ? segment(input, {\n input,\n operation,\n })\n : segment;\n\nexport const resolveOperationBridgeQueryKey = <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n input: TInput,\n): ActionQueryKey => {\n const queryInput = normalizeEntityRefQueryInput(input, operation.inputRefs);\n\n return [\n operation.entityName,\n operation.name,\n ...(operation.bridge?.query?.map(segment =>\n resolveOperationBridgeQueryKeySegment(segment, operation, queryInput),\n ) ?? []),\n ];\n};\n\nexport const resolveOperationBridgeInvalidationQueryKeys = <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n input: TInput,\n): ActionQueryKey[] => {\n const queryInput = normalizeEntityRefQueryInput(input, operation.inputRefs);\n\n return (\n operation.bridge?.invalidate?.map(querySpec =>\n querySpec.map(segment =>\n resolveOperationBridgeQueryKeySegment(segment, operation, queryInput),\n ),\n ) ?? []\n );\n};\n\nexport const createDomainOperationBridgeAction =\n <TInput, TData>(\n bridgeAction: RunDomainOperationBridgeAction,\n operationId: string,\n ): OperationBridgeAction<TInput, TData> =>\n (input: TInput) =>\n bridgeAction({\n operationId,\n input,\n }) as Promise<OperationBridgeActionResult<OperationInvocationResult<TData>>>;\n\nexport const attachOperationBridgeActionRuntime = <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n action: OperationBridgeAction<TInput, TData>,\n options: {\n requiresAuth: boolean;\n },\n) =>\n attachActionRuntime(action, {\n feature: operation.entityName,\n actionName: operation.name,\n requiresAuth: options.requiresAuth,\n queryKeyPrefix: [operation.entityName, operation.name] as const,\n getQueryKey: input => resolveOperationBridgeQueryKey(operation, input as TInput),\n getAffectedQueryKeys: ({ input }) =>\n resolveOperationBridgeInvalidationQueryKeys(operation, input as TInput),\n });\n"]}
1
+ {"version":3,"file":"operation-bridge.js","sourceRoot":"","sources":["../../src/actions/operation-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport type {\n ClientDomainOperationDeclaration,\n EntityViewAst,\n QueryKeySegment,\n} from '@ontahi/core/data-graph';\nimport { normalizeEntityRefQueryInput } from '@ontahi/core/data-graph';\nimport {\n attachActionRuntime,\n getActionErrorMessage,\n hasActionError,\n type ActionQueryKey,\n} from '@ontahi/core/runtime/actions';\nimport type {\n OperationInvocationResult,\n TaskRunIdentity,\n TaskSnapshot,\n} from '@ontahi/core/runtime/contracts';\nimport type { QueryKey, UseQueryResult } from '@tanstack/react-query';\n\nimport type { ActionResultLike, UseActionOptions, UseActionResult } from './use-action.js';\n\nexport type { OperationInvocationResult };\n\nexport type OperationBridgeActionResult<TData> = Omit<ActionResultLike, 'data'> & {\n data?: TData;\n};\n\nexport type OperationBridgeAction<TInput, TData> = (\n input: TInput,\n) => Promise<OperationBridgeActionResult<OperationInvocationResult<TData>>>;\n\nexport type OperationInvocationFailure<TFailure = unknown> = Exclude<\n OperationInvocationResult<unknown, TFailure>,\n { ok: true }\n>;\n\nexport class OperationInvocationResultError<TFailure = unknown> extends Error {\n readonly name = 'OperationInvocationResultError';\n declare readonly cause?: unknown;\n\n constructor(readonly result: OperationInvocationFailure<TFailure>) {\n super(result.message);\n if (result.kind === 'failed') {\n Object.defineProperty(this, 'cause', {\n configurable: true,\n value: result.failure,\n });\n }\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n ...(this.cause === undefined ? {} : { cause: this.cause }),\n result: this.result,\n };\n }\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const isOperationInvocationResult = <TData = unknown, TFailure = unknown>(\n value: unknown,\n): value is OperationInvocationResult<TData, TFailure> =>\n isRecord(value) && typeof value.ok === 'boolean' && typeof value.kind === 'string';\n\nexport const operationBridgeErrored = (message: string): OperationInvocationResult => ({\n ok: false,\n kind: 'errored',\n executed: 'unknown',\n message,\n});\n\nexport const toOperationInvocationResult = <TData>(\n result: OperationBridgeActionResult<OperationInvocationResult<TData>>,\n): OperationInvocationResult<TData> => {\n if (hasActionError(result)) {\n return operationBridgeErrored(\n getActionErrorMessage(result),\n ) as OperationInvocationResult<TData>;\n }\n\n if (isOperationInvocationResult<TData>(result.data)) {\n return result.data;\n }\n\n if ('data' in result) {\n return {\n ok: true,\n kind: 'success',\n value: result.data as TData,\n };\n }\n\n return operationBridgeErrored(\n 'Graph operation bridge returned an invalid response.',\n ) as OperationInvocationResult<TData>;\n};\n\nexport const unwrapOperationInvocationValue = <TData>(\n result: OperationInvocationResult<TData>,\n): TData => {\n if (result.ok) {\n return result.value;\n }\n\n throw new OperationInvocationResultError(result);\n};\n\nexport type BridgedOperationLike<TInput, TData> = ClientDomainOperationDeclaration<\n TInput,\n TData\n> & {\n id: string;\n entityName: string;\n name: string;\n view?: EntityViewAst;\n};\n\nexport type RunDomainOperationBridgeAction = (input: {\n operationId: string;\n input: unknown;\n view?: EntityViewAst;\n}) => Promise<ActionResultLike>;\n\nexport type GraphPermission =\n | {\n allowed: true;\n }\n | {\n allowed: false;\n reason: string;\n message: string;\n };\n\nexport type CheckDomainOperationPermissionBridgeAction = (input: {\n operationId: string;\n input: unknown;\n}) => Promise<OperationBridgeActionResult<GraphPermission>>;\n\nexport type OperationBridgeAdapter<TAdapterName extends string = string> = {\n name: TAdapterName;\n getTaskSnapshot?: <TResult = unknown>(ref: TaskRunIdentity) => Promise<TaskSnapshot<TResult>>;\n useBridgeAction: <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n ) => OperationBridgeAction<TInput, TData>;\n useBridgeMutation: <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n options?: UseActionOptions<OperationBridgeAction<TInput, TData>> & {\n invalidateOnSuccess?: boolean;\n },\n ) => UseActionResult<OperationBridgeAction<TInput, TData>>;\n useBridgeQuery: <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n args: {\n input: TInput;\n key: QueryKey;\n },\n ) => UseQueryResult<TData, Error>;\n usePermission: <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n input: TInput,\n options?: {\n enabled?: boolean;\n queryKey?: QueryKey;\n },\n ) => UseQueryResult<GraphPermission, Error>;\n};\n\nexport type AnyOperationBridgeAdapter = OperationBridgeAdapter<string>;\n\nexport const resolveOperationBridgeQuerySpec = <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n) => [operation.entityName, operation.name, ...(operation.bridge?.query ?? [])] as const;\n\nconst resolveOperationBridgeQueryKeySegment = <TInput, TData>(\n segment: QueryKeySegment<TInput>,\n operation: BridgedOperationLike<TInput, TData>,\n input: TInput,\n) =>\n typeof segment === 'function'\n ? segment(input, {\n input,\n operation,\n })\n : segment;\n\nexport const resolveOperationBridgeQueryKey = <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n input: TInput,\n): ActionQueryKey => {\n const queryInput = normalizeEntityRefQueryInput(input, operation.inputRefs);\n\n return [\n operation.entityName,\n operation.name,\n ...(operation.view ? [operation.view] : []),\n ...(operation.bridge?.query?.map(segment =>\n resolveOperationBridgeQueryKeySegment(segment, operation, queryInput),\n ) ?? []),\n ];\n};\n\nexport const resolveOperationBridgeInvalidationQueryKeys = <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n input: TInput,\n): ActionQueryKey[] => {\n const queryInput = normalizeEntityRefQueryInput(input, operation.inputRefs);\n\n return (\n operation.bridge?.invalidate?.map(querySpec =>\n querySpec.map(segment =>\n resolveOperationBridgeQueryKeySegment(segment, operation, queryInput),\n ),\n ) ?? []\n );\n};\n\nexport const createDomainOperationBridgeAction =\n <TInput, TData>(\n bridgeAction: RunDomainOperationBridgeAction,\n operation: BridgedOperationLike<TInput, TData>,\n ): OperationBridgeAction<TInput, TData> =>\n (input: TInput) =>\n bridgeAction({\n operationId: operation.id,\n input,\n ...(operation.view ? { view: operation.view } : {}),\n }) as Promise<OperationBridgeActionResult<OperationInvocationResult<TData>>>;\n\nexport const attachOperationBridgeActionRuntime = <TInput, TData>(\n operation: BridgedOperationLike<TInput, TData>,\n action: OperationBridgeAction<TInput, TData>,\n options: {\n requiresAuth: boolean;\n },\n) =>\n attachActionRuntime(action, {\n feature: operation.entityName,\n actionName: operation.name,\n requiresAuth: options.requiresAuth,\n queryKeyPrefix: [operation.entityName, operation.name] as const,\n getQueryKey: input => resolveOperationBridgeQueryKey(operation, input as TInput),\n getAffectedQueryKeys: ({ input }) =>\n resolveOperationBridgeInvalidationQueryKeys(operation, input as TInput),\n });\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ontahi/react",
3
- "version": "0.1.0-alpha.2",
3
+ "version": "0.1.0-alpha.4",
4
4
  "description": "Non-visual React hooks and bridge adapters for Ontahi applications",
5
5
  "homepage": "https://github.com/javifernandes/ontahi/tree/main/packages/react",
6
6
  "license": "Apache-2.0",
@@ -40,7 +40,7 @@
40
40
  "provenance": true
41
41
  },
42
42
  "dependencies": {
43
- "@ontahi/core": "0.1.0-alpha.2"
43
+ "@ontahi/core": "0.1.0-alpha.4"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@tanstack/react-query": "^5.51.0",