@ankhorage/runtime 5.1.2 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @ankhorage/runtime
2
2
 
3
+ ## 5.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - f378dec: Support serializable atomic state append updates and length binding transforms.
8
+
9
+ ## 5.1.3
10
+
11
+ ### Patch Changes
12
+
13
+ - 8d799e6: Prefer configured API capability executors so generated hosts provide their injected fetch implementation.
14
+
3
15
  ## 5.1.2
4
16
 
5
17
  ### Patch Changes
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # @ankhorage/runtime
5
5
 
6
- ![license: MIT](./paradox/badges/license.svg) ![npm: v5.1.2](./paradox/badges/npm.svg) ![runtime: bun](./paradox/badges/runtime.svg) ![typescript: strict](./paradox/badges/typescript.svg) ![eslint: checked](./paradox/badges/eslint.svg) ![prettier: checked](./paradox/badges/prettier.svg) ![build: checked](./paradox/badges/build.svg) ![tests: checked](./paradox/badges/tests.svg) ![paradox: warnings](./paradox/badges/docs.svg)
6
+ ![license: MIT](./paradox/badges/license.svg) ![npm: v5.2.0](./paradox/badges/npm.svg) ![runtime: bun](./paradox/badges/runtime.svg) ![typescript: strict](./paradox/badges/typescript.svg) ![eslint: checked](./paradox/badges/eslint.svg) ![prettier: checked](./paradox/badges/prettier.svg) ![build: checked](./paradox/badges/build.svg) ![tests: checked](./paradox/badges/tests.svg) ![paradox: warnings](./paradox/badges/docs.svg)
7
7
 
8
8
  Platform-neutral runtime renderer, contracts, and helpers for Ankhorage generated apps.
9
9
 
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeRenderer.js","sourceRoot":"","sources":["../src/RuntimeRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import type {\n BindingValue,\n ComponentDataBindingRegistry,\n DataSourceDiagnostic,\n DbAdapter,\n DbRealtimeAdapter,\n MediaAssetRegistry,\n StateAdapter,\n UiNode,\n} from '@ankhorage/contracts';\nimport React from 'react';\nimport { StyleSheet, Text, View } from 'react-native';\n\nimport type { ComponentRegistry } from './registry';\nimport {\n getUnknownComponentDiagnostic,\n resolveRenderedChildren,\n resolveRuntimeRegistry,\n} from './rendering';\nimport {\n type RuntimeComponentEventDispatchArgs,\n type RuntimeEventCapabilityResolver,\n wrapRuntimeEventProps,\n} from './runtimeActionRegistry';\nimport type { RuntimeBindingResultCache, RuntimeCapabilityExecutor } from './runtimeBindings';\nimport { dispatchRuntimeComponentEventWithReporting } from './runtimeEventExecution';\nimport {\n createRuntimeEventOperationBindingContext,\n createRuntimeEventOperationLifecycle,\n IDLE_RUNTIME_EVENT_OPERATION_STATE,\n} from './runtimeEventOperationLifecycle';\nimport type { RuntimeMediaAssetResolver } from './runtimeMedia';\nimport {\n RuntimeMediaResolutionCacheProvider,\n useRuntimeMediaResolutionCache,\n} from './runtimeMediaCache';\nimport { resolveRuntimeNodeProps } from './runtimeNodeProps';\nimport {\n mergeRuntimeRendererConfig,\n RuntimeRendererConfigProvider,\n type RuntimeRendererWrapArgs,\n useRuntimeRendererConfig,\n} from './RuntimeRendererConfig';\nimport {\n createRuntimeRepeatBindingContext,\n resolveRuntimeRepeatItemKey,\n resolveRuntimeRepeatItemsAsync,\n resolveRuntimeRepeatItemsSync,\n} from './runtimeRepeat';\nimport { createRepeatDiagnosticsKey } from './runtimeRepeatDiagnostics';\nimport { shouldRenderRuntimeRepeatEmptyState } from './runtimeRepeatEmptyState';\nimport { useRuntimeMediaProps } from './useRuntimeMediaProps';\nimport { useRuntimeStateBindings } from './useRuntimeStateBindings';\n\nexport interface RuntimeRendererProps {\n node: UiNode;\n isRoot?: boolean;\n registry?: ComponentRegistry;\n disableActions?: boolean;\n wrapNode?: (args: RuntimeRendererWrapArgs) => React.ReactNode;\n dbAdapter?: DbAdapter;\n dbRealtimeAdapter?: DbRealtimeAdapter;\n stateAdapter?: StateAdapter;\n bindingContext?: Record<string, unknown>;\n dataBindings?: ComponentDataBindingRegistry;\n mediaAssets?: MediaAssetRegistry;\n resolveMediaAsset?: RuntimeMediaAssetResolver;\n resultSlots?: RuntimeBindingResultCache;\n executeCapability?: RuntimeCapabilityExecutor;\n resolveEventCapability?: RuntimeEventCapabilityResolver;\n onDiagnostics?: (diagnostics: readonly DataSourceDiagnostic[]) => void;\n}\n\nexport function RuntimeRenderer(props: RuntimeRendererProps) {\n const {\n node,\n isRoot = false,\n registry,\n disableActions = false,\n wrapNode,\n dbAdapter,\n dbRealtimeAdapter,\n stateAdapter,\n bindingContext,\n dataBindings,\n mediaAssets,\n resolveMediaAsset,\n resultSlots,\n executeCapability,\n resolveEventCapability,\n onDiagnostics,\n } = props;\n const inheritedConfig = useRuntimeRendererConfig();\n const [rootEventOperationState, setRootEventOperationState] = React.useState(\n IDLE_RUNTIME_EVENT_OPERATION_STATE,\n );\n const rootEventOperationLifecycle = React.useMemo(\n () => createRuntimeEventOperationLifecycle(setRootEventOperationState),\n [],\n );\n const eventOperationState = isRoot\n ? rootEventOperationState\n : inheritedConfig.eventOperationState;\n const rootBindingContext = React.useMemo(\n () =>\n mergeRuntimeRendererConfig(\n { bindingContext },\n { bindingContext: inheritedConfig.bindingContext },\n ).bindingContext,\n [bindingContext, inheritedConfig.bindingContext],\n );\n const effectiveBindingContext = React.useMemo(\n () =>\n isRoot && eventOperationState !== undefined\n ? createRuntimeEventOperationBindingContext(rootBindingContext, eventOperationState)\n : bindingContext,\n [bindingContext, eventOperationState, isRoot, rootBindingContext],\n );\n const mediaResolutionCache = useRuntimeMediaResolutionCache();\n const inheritedResultSlots = inheritedConfig.resultSlots;\n const [localResultSlots, setLocalResultSlots] = React.useState<RuntimeBindingResultCache>({});\n const writeLocalResultSlot = React.useCallback((key: string, value: BindingValue) => {\n setLocalResultSlots((currentResults) => ({\n ...currentResults,\n [key]: value,\n }));\n }, []);\n const effectiveResultSlots = React.useMemo(\n () => ({\n ...(inheritedResultSlots ?? {}),\n ...(resultSlots ?? {}),\n ...localResultSlots,\n }),\n [inheritedResultSlots, localResultSlots, resultSlots],\n );\n const explicitConfig = React.useMemo(\n () => ({\n bindingContext: effectiveBindingContext,\n dataBindings,\n dbAdapter,\n dbRealtimeAdapter,\n disableActions,\n executeCapability,\n resolveEventCapability,\n mediaAssets,\n resultSlots: effectiveResultSlots,\n onDiagnostics,\n registry,\n resolveMediaAsset,\n stateAdapter,\n wrapNode,\n writeResultSlot: inheritedConfig.writeResultSlot ?? writeLocalResultSlot,\n eventOperationLifecycle: isRoot\n ? rootEventOperationLifecycle\n : inheritedConfig.eventOperationLifecycle,\n eventOperationState,\n }),\n [\n effectiveBindingContext,\n dataBindings,\n dbAdapter,\n dbRealtimeAdapter,\n disableActions,\n executeCapability,\n resolveEventCapability,\n effectiveResultSlots,\n inheritedConfig.writeResultSlot,\n inheritedConfig.eventOperationLifecycle,\n isRoot,\n mediaAssets,\n onDiagnostics,\n registry,\n resolveMediaAsset,\n stateAdapter,\n wrapNode,\n writeLocalResultSlot,\n eventOperationState,\n rootEventOperationLifecycle,\n ],\n );\n const effectiveConfig = React.useMemo(\n () => mergeRuntimeRendererConfig(explicitConfig, inheritedConfig),\n [explicitConfig, inheritedConfig],\n );\n useRuntimeStateBindings({\n dataBindings: effectiveConfig.dataBindings,\n nodeId: node.id,\n repeatSource: node.repeat?.source,\n stateAdapter: effectiveConfig.stateAdapter,\n });\n const dispatchRuntimeEvent = React.useCallback(\n async (eventArgs: RuntimeComponentEventDispatchArgs) => {\n await dispatchRuntimeComponentEventWithReporting({\n ...eventArgs,\n dataBindings: eventArgs.dataBindings ?? effectiveConfig.dataBindings,\n executeCapability: eventArgs.executeCapability ?? effectiveConfig.executeCapability,\n onDiagnostics: effectiveConfig.onDiagnostics,\n resultSlots: eventArgs.resultSlots ?? effectiveConfig.resultSlots,\n writeResultSlot: eventArgs.writeResultSlot ?? effectiveConfig.writeResultSlot,\n eventOperationLifecycle:\n eventArgs.eventOperationLifecycle ?? effectiveConfig.eventOperationLifecycle,\n });\n },\n [effectiveConfig],\n );\n const effectiveRegistry = React.useMemo(\n () =>\n resolveRuntimeRegistry({\n propRegistry: registry,\n configRegistry: effectiveConfig.registry,\n }),\n [effectiveConfig.registry, registry],\n );\n const Component = effectiveRegistry[node.type];\n\n const repeatSyncResult = (() => {\n const { repeat } = node;\n if (!repeat) {\n return null;\n }\n\n return resolveRuntimeRepeatItemsSync(repeat, {\n context: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n executeCapability: effectiveConfig.executeCapability,\n node,\n resultSlots: effectiveConfig.resultSlots,\n stateAdapter: effectiveConfig.stateAdapter,\n writeResultSlot: effectiveConfig.writeResultSlot,\n });\n })();\n const repeatRequest = React.useMemo(\n () =>\n node.repeat && repeatSyncResult?.status === 'pending'\n ? {\n context: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n executeCapability: effectiveConfig.executeCapability,\n node,\n repeat: node.repeat,\n resultSlots: effectiveConfig.resultSlots,\n stateAdapter: effectiveConfig.stateAdapter,\n writeResultSlot: effectiveConfig.writeResultSlot,\n }\n : null,\n [\n node,\n repeatSyncResult?.status,\n effectiveConfig.bindingContext,\n effectiveConfig.dataBindings,\n effectiveConfig.executeCapability,\n effectiveConfig.resultSlots,\n effectiveConfig.stateAdapter,\n effectiveConfig.writeResultSlot,\n ],\n );\n const repeatRequestToken = React.useMemo(() => (repeatRequest ? {} : null), [repeatRequest]);\n const [asyncRepeatResult, setAsyncRepeatResult] = React.useState<{\n readonly requestToken: object;\n readonly items: readonly BindingValue[];\n readonly diagnostics: readonly DataSourceDiagnostic[];\n } | null>(null);\n const repeatRequestIdRef = React.useRef(0);\n const lastRepeatDiagnosticsKeyRef = React.useRef<string | null>(null);\n\n React.useEffect(() => {\n repeatRequestIdRef.current += 1;\n const requestId = repeatRequestIdRef.current;\n if (repeatRequest === null || repeatRequestToken === null) {\n return undefined;\n }\n\n void (async () => {\n const result = await resolveRuntimeRepeatItemsAsync(repeatRequest.repeat, {\n context: repeatRequest.context,\n dataBindings: repeatRequest.dataBindings,\n executeCapability: repeatRequest.executeCapability,\n node: repeatRequest.node,\n resultSlots: repeatRequest.resultSlots,\n stateAdapter: repeatRequest.stateAdapter,\n writeResultSlot: repeatRequest.writeResultSlot,\n });\n\n if (repeatRequestIdRef.current !== requestId) {\n return;\n }\n\n setAsyncRepeatResult({ ...result, requestToken: repeatRequestToken });\n })();\n\n return () => {\n repeatRequestIdRef.current += 1;\n };\n }, [repeatRequest, repeatRequestToken]);\n const currentAsyncRepeatResult =\n asyncRepeatResult?.requestToken === repeatRequestToken ? asyncRepeatResult : null;\n const repeatDiagnostics =\n repeatSyncResult?.status === 'ready'\n ? repeatSyncResult.diagnostics\n : currentAsyncRepeatResult?.diagnostics;\n\n React.useEffect(() => {\n if (!node.repeat || repeatDiagnostics === undefined) {\n return;\n }\n\n const diagnosticsKey = createRepeatDiagnosticsKey(node.id, repeatDiagnostics);\n if (lastRepeatDiagnosticsKeyRef.current === diagnosticsKey) {\n return;\n }\n\n lastRepeatDiagnosticsKeyRef.current = diagnosticsKey;\n effectiveConfig.onDiagnostics?.(repeatDiagnostics);\n }, [effectiveConfig, node, repeatDiagnostics]);\n\n const bindingResolvedProps = resolveRuntimeNodeProps({\n bindingContext: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n dbAdapter: effectiveConfig.dbAdapter,\n dbRealtimeAdapter: effectiveConfig.dbRealtimeAdapter,\n node,\n resultSlots: effectiveConfig.resultSlots,\n stateAdapter: effectiveConfig.stateAdapter,\n });\n const mediaResolvedProps = useRuntimeMediaProps({\n cache: mediaResolutionCache,\n mediaAssets: effectiveConfig.mediaAssets,\n props: bindingResolvedProps,\n resolveMediaAsset: effectiveConfig.resolveMediaAsset,\n });\n const resolvedProps = effectiveConfig.resolveNodeProps\n ? effectiveConfig.resolveNodeProps({ node, props: mediaResolvedProps })\n : mediaResolvedProps;\n\n if (!Component) {\n const diagnostic = getUnknownComponentDiagnostic(node.type, effectiveRegistry);\n return (\n <View style={styles.errorBox}>\n <Text style={styles.errorTitle}>{diagnostic.title}</Text>\n <Text style={styles.errorText}>{diagnostic.suggestion}</Text>\n <Text style={styles.errorMeta}>{diagnostic.detail}</Text>\n </View>\n );\n }\n\n const repeatItems =\n repeatSyncResult?.status === 'ready' ? repeatSyncResult.items : currentAsyncRepeatResult?.items;\n const shouldRenderRepeatEmptyState = shouldRenderRuntimeRepeatEmptyState({\n diagnostics: repeatDiagnostics,\n items: repeatItems,\n status:\n repeatSyncResult?.status === 'ready'\n ? 'ready'\n : repeatSyncResult?.status === 'pending'\n ? 'pending'\n : currentAsyncRepeatResult\n ? 'ready'\n : undefined,\n });\n const renderedChildren = node.repeat\n ? repeatItems && repeatItems.length > 0\n ? repeatItems.flatMap((item, itemIndex) =>\n (node.children ?? []).map((child) => {\n const itemAlias = node.repeat?.itemAlias ?? 'item';\n const repeatKey = resolveRuntimeRepeatItemKey({\n item,\n itemAlias,\n index: itemIndex,\n keyPath: node.repeat?.keyPath,\n });\n\n return (\n <RuntimeRenderer\n key={`${child.id}:${String(repeatKey)}`}\n node={child}\n registry={effectiveRegistry}\n bindingContext={createRuntimeRepeatBindingContext({\n baseContext: effectiveConfig.bindingContext,\n item,\n itemAlias,\n })}\n />\n );\n }),\n )\n : shouldRenderRepeatEmptyState\n ? node.repeat.empty?.map((child) => (\n <RuntimeRenderer key={child.id} node={child} registry={effectiveRegistry} />\n ))\n : undefined\n : node.children?.map((child) => (\n <RuntimeRenderer key={child.id} node={child} registry={effectiveRegistry} />\n ));\n\n const propsWithEvents = wrapRuntimeEventProps({\n context: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n props: resolvedProps,\n disableActions: effectiveConfig.disableActions === true,\n dispatchComponentEvent: dispatchRuntimeEvent,\n node,\n resultSlots: effectiveConfig.resultSlots,\n resolveEventCapability: effectiveConfig.resolveEventCapability,\n });\n\n const componentChildren = resolveRenderedChildren({\n propChildren: propsWithEvents.children as React.ReactNode,\n renderedChildren,\n });\n\n let content: React.ReactNode = <Component {...propsWithEvents}>{componentChildren}</Component>;\n if (effectiveConfig.wrapNode) {\n content = effectiveConfig.wrapNode({ node, rendered: content, isRoot });\n }\n\n return (\n <RuntimeMediaResolutionCacheProvider value={mediaResolutionCache}>\n <RuntimeRendererConfigProvider value={explicitConfig}>\n {content}\n </RuntimeRendererConfigProvider>\n </RuntimeMediaResolutionCacheProvider>\n );\n}\n\nconst styles = StyleSheet.create({\n errorBox: {\n borderColor: '#ef4444',\n borderRadius: 8,\n borderWidth: 1,\n margin: 8,\n padding: 8,\n },\n errorTitle: {\n color: '#991b1b',\n fontSize: 13,\n fontWeight: '700',\n marginBottom: 4,\n },\n errorText: {\n color: '#ef4444',\n fontWeight: '600',\n },\n errorMeta: {\n color: '#7f1d1d',\n fontSize: 12,\n marginTop: 4,\n },\n});\n"]}
1
+ {"version":3,"file":"RuntimeRenderer.js","sourceRoot":"","sources":["../src/RuntimeRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import type {\n BindingValue,\n ComponentDataBindingRegistry,\n DataSourceDiagnostic,\n DbAdapter,\n DbRealtimeAdapter,\n MediaAssetRegistry,\n StateAdapter,\n UiNode,\n} from '@ankhorage/contracts';\nimport React from 'react';\nimport { StyleSheet, Text, View } from 'react-native';\n\nimport type { ComponentRegistry } from './registry';\nimport {\n getUnknownComponentDiagnostic,\n resolveRenderedChildren,\n resolveRuntimeRegistry,\n} from './rendering';\nimport {\n type RuntimeComponentEventDispatchArgs,\n type RuntimeEventCapabilityResolver,\n wrapRuntimeEventProps,\n} from './runtimeActionRegistry';\nimport type { RuntimeBindingResultCache, RuntimeCapabilityExecutor } from './runtimeBindings';\nimport { dispatchRuntimeComponentEventWithReporting } from './runtimeEventExecution';\nimport {\n createRuntimeEventOperationBindingContext,\n createRuntimeEventOperationLifecycle,\n IDLE_RUNTIME_EVENT_OPERATION_STATE,\n} from './runtimeEventOperationLifecycle';\nimport type { RuntimeMediaAssetResolver } from './runtimeMedia';\nimport {\n RuntimeMediaResolutionCacheProvider,\n useRuntimeMediaResolutionCache,\n} from './runtimeMediaCache';\nimport { resolveRuntimeNodeProps } from './runtimeNodeProps';\nimport {\n mergeRuntimeRendererConfig,\n RuntimeRendererConfigProvider,\n type RuntimeRendererWrapArgs,\n useRuntimeRendererConfig,\n} from './RuntimeRendererConfig';\nimport {\n createRuntimeRepeatBindingContext,\n resolveRuntimeRepeatItemKey,\n resolveRuntimeRepeatItemsAsync,\n resolveRuntimeRepeatItemsSync,\n} from './runtimeRepeat';\nimport { createRepeatDiagnosticsKey } from './runtimeRepeatDiagnostics';\nimport { shouldRenderRuntimeRepeatEmptyState } from './runtimeRepeatEmptyState';\nimport { useRuntimeMediaProps } from './useRuntimeMediaProps';\nimport { useRuntimeStateBindings } from './useRuntimeStateBindings';\n\nexport interface RuntimeRendererProps {\n node: UiNode;\n isRoot?: boolean;\n registry?: ComponentRegistry;\n disableActions?: boolean;\n wrapNode?: (args: RuntimeRendererWrapArgs) => React.ReactNode;\n dbAdapter?: DbAdapter;\n dbRealtimeAdapter?: DbRealtimeAdapter;\n stateAdapter?: StateAdapter;\n bindingContext?: Record<string, unknown>;\n dataBindings?: ComponentDataBindingRegistry;\n mediaAssets?: MediaAssetRegistry;\n resolveMediaAsset?: RuntimeMediaAssetResolver;\n resultSlots?: RuntimeBindingResultCache;\n executeCapability?: RuntimeCapabilityExecutor;\n resolveEventCapability?: RuntimeEventCapabilityResolver;\n onDiagnostics?: (diagnostics: readonly DataSourceDiagnostic[]) => void;\n}\n\nexport function RuntimeRenderer(props: RuntimeRendererProps) {\n const {\n node,\n isRoot = false,\n registry,\n disableActions = false,\n wrapNode,\n dbAdapter,\n dbRealtimeAdapter,\n stateAdapter,\n bindingContext,\n dataBindings,\n mediaAssets,\n resolveMediaAsset,\n resultSlots,\n executeCapability,\n resolveEventCapability,\n onDiagnostics,\n } = props;\n const inheritedConfig = useRuntimeRendererConfig();\n const [rootEventOperationState, setRootEventOperationState] = React.useState(\n IDLE_RUNTIME_EVENT_OPERATION_STATE,\n );\n const rootEventOperationLifecycle = React.useMemo(\n () => createRuntimeEventOperationLifecycle(setRootEventOperationState),\n [],\n );\n const eventOperationState = isRoot\n ? rootEventOperationState\n : inheritedConfig.eventOperationState;\n const rootBindingContext = React.useMemo(\n () =>\n mergeRuntimeRendererConfig(\n { bindingContext },\n { bindingContext: inheritedConfig.bindingContext },\n ).bindingContext,\n [bindingContext, inheritedConfig.bindingContext],\n );\n const effectiveBindingContext = React.useMemo(\n () =>\n isRoot && eventOperationState !== undefined\n ? createRuntimeEventOperationBindingContext(rootBindingContext, eventOperationState)\n : bindingContext,\n [bindingContext, eventOperationState, isRoot, rootBindingContext],\n );\n const mediaResolutionCache = useRuntimeMediaResolutionCache();\n const inheritedResultSlots = inheritedConfig.resultSlots;\n const [localResultSlots, setLocalResultSlots] = React.useState<RuntimeBindingResultCache>({});\n const writeLocalResultSlot = React.useCallback((key: string, value: BindingValue | undefined) => {\n setLocalResultSlots((currentResults) => ({\n ...currentResults,\n [key]: value,\n }));\n }, []);\n const effectiveResultSlots = React.useMemo(\n () => ({\n ...(inheritedResultSlots ?? {}),\n ...(resultSlots ?? {}),\n ...localResultSlots,\n }),\n [inheritedResultSlots, localResultSlots, resultSlots],\n );\n const explicitConfig = React.useMemo(\n () => ({\n bindingContext: effectiveBindingContext,\n dataBindings,\n dbAdapter,\n dbRealtimeAdapter,\n disableActions,\n executeCapability,\n resolveEventCapability,\n mediaAssets,\n resultSlots: effectiveResultSlots,\n onDiagnostics,\n registry,\n resolveMediaAsset,\n stateAdapter,\n wrapNode,\n writeResultSlot: inheritedConfig.writeResultSlot ?? writeLocalResultSlot,\n eventOperationLifecycle: isRoot\n ? rootEventOperationLifecycle\n : inheritedConfig.eventOperationLifecycle,\n eventOperationState,\n }),\n [\n effectiveBindingContext,\n dataBindings,\n dbAdapter,\n dbRealtimeAdapter,\n disableActions,\n executeCapability,\n resolveEventCapability,\n effectiveResultSlots,\n inheritedConfig.writeResultSlot,\n inheritedConfig.eventOperationLifecycle,\n isRoot,\n mediaAssets,\n onDiagnostics,\n registry,\n resolveMediaAsset,\n stateAdapter,\n wrapNode,\n writeLocalResultSlot,\n eventOperationState,\n rootEventOperationLifecycle,\n ],\n );\n const effectiveConfig = React.useMemo(\n () => mergeRuntimeRendererConfig(explicitConfig, inheritedConfig),\n [explicitConfig, inheritedConfig],\n );\n useRuntimeStateBindings({\n dataBindings: effectiveConfig.dataBindings,\n nodeId: node.id,\n repeatSource: node.repeat?.source,\n stateAdapter: effectiveConfig.stateAdapter,\n });\n const dispatchRuntimeEvent = React.useCallback(\n async (eventArgs: RuntimeComponentEventDispatchArgs) => {\n await dispatchRuntimeComponentEventWithReporting({\n ...eventArgs,\n dataBindings: eventArgs.dataBindings ?? effectiveConfig.dataBindings,\n executeCapability: eventArgs.executeCapability ?? effectiveConfig.executeCapability,\n onDiagnostics: effectiveConfig.onDiagnostics,\n resultSlots: eventArgs.resultSlots ?? effectiveConfig.resultSlots,\n writeResultSlot: eventArgs.writeResultSlot ?? effectiveConfig.writeResultSlot,\n eventOperationLifecycle:\n eventArgs.eventOperationLifecycle ?? effectiveConfig.eventOperationLifecycle,\n });\n },\n [effectiveConfig],\n );\n const effectiveRegistry = React.useMemo(\n () =>\n resolveRuntimeRegistry({\n propRegistry: registry,\n configRegistry: effectiveConfig.registry,\n }),\n [effectiveConfig.registry, registry],\n );\n const Component = effectiveRegistry[node.type];\n\n const repeatSyncResult = (() => {\n const { repeat } = node;\n if (!repeat) {\n return null;\n }\n\n return resolveRuntimeRepeatItemsSync(repeat, {\n context: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n executeCapability: effectiveConfig.executeCapability,\n node,\n resultSlots: effectiveConfig.resultSlots,\n stateAdapter: effectiveConfig.stateAdapter,\n writeResultSlot: effectiveConfig.writeResultSlot,\n });\n })();\n const repeatRequest = React.useMemo(\n () =>\n node.repeat && repeatSyncResult?.status === 'pending'\n ? {\n context: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n executeCapability: effectiveConfig.executeCapability,\n node,\n repeat: node.repeat,\n resultSlots: effectiveConfig.resultSlots,\n stateAdapter: effectiveConfig.stateAdapter,\n writeResultSlot: effectiveConfig.writeResultSlot,\n }\n : null,\n [\n node,\n repeatSyncResult?.status,\n effectiveConfig.bindingContext,\n effectiveConfig.dataBindings,\n effectiveConfig.executeCapability,\n effectiveConfig.resultSlots,\n effectiveConfig.stateAdapter,\n effectiveConfig.writeResultSlot,\n ],\n );\n const repeatRequestToken = React.useMemo(() => (repeatRequest ? {} : null), [repeatRequest]);\n const [asyncRepeatResult, setAsyncRepeatResult] = React.useState<{\n readonly requestToken: object;\n readonly items: readonly BindingValue[];\n readonly diagnostics: readonly DataSourceDiagnostic[];\n } | null>(null);\n const repeatRequestIdRef = React.useRef(0);\n const lastRepeatDiagnosticsKeyRef = React.useRef<string | null>(null);\n\n React.useEffect(() => {\n repeatRequestIdRef.current += 1;\n const requestId = repeatRequestIdRef.current;\n if (repeatRequest === null || repeatRequestToken === null) {\n return undefined;\n }\n\n void (async () => {\n const result = await resolveRuntimeRepeatItemsAsync(repeatRequest.repeat, {\n context: repeatRequest.context,\n dataBindings: repeatRequest.dataBindings,\n executeCapability: repeatRequest.executeCapability,\n node: repeatRequest.node,\n resultSlots: repeatRequest.resultSlots,\n stateAdapter: repeatRequest.stateAdapter,\n writeResultSlot: repeatRequest.writeResultSlot,\n });\n\n if (repeatRequestIdRef.current !== requestId) {\n return;\n }\n\n setAsyncRepeatResult({ ...result, requestToken: repeatRequestToken });\n })();\n\n return () => {\n repeatRequestIdRef.current += 1;\n };\n }, [repeatRequest, repeatRequestToken]);\n const currentAsyncRepeatResult =\n asyncRepeatResult?.requestToken === repeatRequestToken ? asyncRepeatResult : null;\n const repeatDiagnostics =\n repeatSyncResult?.status === 'ready'\n ? repeatSyncResult.diagnostics\n : currentAsyncRepeatResult?.diagnostics;\n\n React.useEffect(() => {\n if (!node.repeat || repeatDiagnostics === undefined) {\n return;\n }\n\n const diagnosticsKey = createRepeatDiagnosticsKey(node.id, repeatDiagnostics);\n if (lastRepeatDiagnosticsKeyRef.current === diagnosticsKey) {\n return;\n }\n\n lastRepeatDiagnosticsKeyRef.current = diagnosticsKey;\n effectiveConfig.onDiagnostics?.(repeatDiagnostics);\n }, [effectiveConfig, node, repeatDiagnostics]);\n\n const bindingResolvedProps = resolveRuntimeNodeProps({\n bindingContext: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n dbAdapter: effectiveConfig.dbAdapter,\n dbRealtimeAdapter: effectiveConfig.dbRealtimeAdapter,\n node,\n resultSlots: effectiveConfig.resultSlots,\n stateAdapter: effectiveConfig.stateAdapter,\n });\n const mediaResolvedProps = useRuntimeMediaProps({\n cache: mediaResolutionCache,\n mediaAssets: effectiveConfig.mediaAssets,\n props: bindingResolvedProps,\n resolveMediaAsset: effectiveConfig.resolveMediaAsset,\n });\n const resolvedProps = effectiveConfig.resolveNodeProps\n ? effectiveConfig.resolveNodeProps({ node, props: mediaResolvedProps })\n : mediaResolvedProps;\n\n if (!Component) {\n const diagnostic = getUnknownComponentDiagnostic(node.type, effectiveRegistry);\n return (\n <View style={styles.errorBox}>\n <Text style={styles.errorTitle}>{diagnostic.title}</Text>\n <Text style={styles.errorText}>{diagnostic.suggestion}</Text>\n <Text style={styles.errorMeta}>{diagnostic.detail}</Text>\n </View>\n );\n }\n\n const repeatItems =\n repeatSyncResult?.status === 'ready' ? repeatSyncResult.items : currentAsyncRepeatResult?.items;\n const shouldRenderRepeatEmptyState = shouldRenderRuntimeRepeatEmptyState({\n diagnostics: repeatDiagnostics,\n items: repeatItems,\n status:\n repeatSyncResult?.status === 'ready'\n ? 'ready'\n : repeatSyncResult?.status === 'pending'\n ? 'pending'\n : currentAsyncRepeatResult\n ? 'ready'\n : undefined,\n });\n const renderedChildren = node.repeat\n ? repeatItems && repeatItems.length > 0\n ? repeatItems.flatMap((item, itemIndex) =>\n (node.children ?? []).map((child) => {\n const itemAlias = node.repeat?.itemAlias ?? 'item';\n const repeatKey = resolveRuntimeRepeatItemKey({\n item,\n itemAlias,\n index: itemIndex,\n keyPath: node.repeat?.keyPath,\n });\n\n return (\n <RuntimeRenderer\n key={`${child.id}:${String(repeatKey)}`}\n node={child}\n registry={effectiveRegistry}\n bindingContext={createRuntimeRepeatBindingContext({\n baseContext: effectiveConfig.bindingContext,\n item,\n itemAlias,\n })}\n />\n );\n }),\n )\n : shouldRenderRepeatEmptyState\n ? node.repeat.empty?.map((child) => (\n <RuntimeRenderer key={child.id} node={child} registry={effectiveRegistry} />\n ))\n : undefined\n : node.children?.map((child) => (\n <RuntimeRenderer key={child.id} node={child} registry={effectiveRegistry} />\n ));\n\n const propsWithEvents = wrapRuntimeEventProps({\n context: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n props: resolvedProps,\n disableActions: effectiveConfig.disableActions === true,\n dispatchComponentEvent: dispatchRuntimeEvent,\n node,\n resultSlots: effectiveConfig.resultSlots,\n resolveEventCapability: effectiveConfig.resolveEventCapability,\n });\n\n const componentChildren = resolveRenderedChildren({\n propChildren: propsWithEvents.children as React.ReactNode,\n renderedChildren,\n });\n\n let content: React.ReactNode = <Component {...propsWithEvents}>{componentChildren}</Component>;\n if (effectiveConfig.wrapNode) {\n content = effectiveConfig.wrapNode({ node, rendered: content, isRoot });\n }\n\n return (\n <RuntimeMediaResolutionCacheProvider value={mediaResolutionCache}>\n <RuntimeRendererConfigProvider value={explicitConfig}>\n {content}\n </RuntimeRendererConfigProvider>\n </RuntimeMediaResolutionCacheProvider>\n );\n}\n\nconst styles = StyleSheet.create({\n errorBox: {\n borderColor: '#ef4444',\n borderRadius: 8,\n borderWidth: 1,\n margin: 8,\n padding: 8,\n },\n errorTitle: {\n color: '#991b1b',\n fontSize: 13,\n fontWeight: '700',\n marginBottom: 4,\n },\n errorText: {\n color: '#ef4444',\n fontWeight: '600',\n },\n errorMeta: {\n color: '#7f1d1d',\n fontSize: 12,\n marginTop: 4,\n },\n});\n"]}
@@ -72,6 +72,65 @@ export declare const CAPABILITIES: readonly [{
72
72
  };
73
73
  };
74
74
  };
75
+ }, {
76
+ readonly id: "state.update";
77
+ readonly owner: "@ankhorage/runtime";
78
+ readonly access: readonly ["invoke", "write"];
79
+ readonly binding: {
80
+ readonly kind: "state";
81
+ readonly bindableAs: readonly ["target"];
82
+ };
83
+ readonly label: "Update runtime state";
84
+ readonly input: {
85
+ readonly schema: {
86
+ readonly type: "object";
87
+ readonly required: readonly ["path", "update"];
88
+ readonly properties: {
89
+ readonly path: {
90
+ readonly anyOf: readonly [{
91
+ readonly type: "string";
92
+ }, {
93
+ readonly type: "array";
94
+ readonly items: {
95
+ readonly type: "string";
96
+ };
97
+ }];
98
+ };
99
+ readonly update: {
100
+ readonly type: "object";
101
+ readonly required: readonly ["kind", "value"];
102
+ readonly properties: {
103
+ readonly kind: {
104
+ readonly type: "string";
105
+ readonly enum: readonly ["append"];
106
+ };
107
+ readonly value: {};
108
+ };
109
+ };
110
+ };
111
+ };
112
+ };
113
+ readonly output: {
114
+ readonly schema: {
115
+ readonly type: "object";
116
+ readonly required: readonly ["path", "value"];
117
+ readonly properties: {
118
+ readonly path: {
119
+ readonly anyOf: readonly [{
120
+ readonly type: "string";
121
+ }, {
122
+ readonly type: "array";
123
+ readonly items: {
124
+ readonly type: "string";
125
+ };
126
+ }];
127
+ };
128
+ readonly value: {
129
+ readonly type: "array";
130
+ };
131
+ };
132
+ };
133
+ };
75
134
  }, {
76
135
  readonly id: "runtime.eventOperation";
77
136
  readonly owner: "@ankhorage/runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0GiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmJiB,CAAC"}
@@ -63,6 +63,47 @@ export const CAPABILITIES = [
63
63
  },
64
64
  },
65
65
  },
66
+ {
67
+ id: 'state.update',
68
+ owner: '@ankhorage/runtime',
69
+ access: ['invoke', 'write'],
70
+ binding: {
71
+ kind: 'state',
72
+ bindableAs: ['target'],
73
+ },
74
+ label: 'Update runtime state',
75
+ input: {
76
+ schema: {
77
+ type: 'object',
78
+ required: ['path', 'update'],
79
+ properties: {
80
+ path: {
81
+ anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],
82
+ },
83
+ update: {
84
+ type: 'object',
85
+ required: ['kind', 'value'],
86
+ properties: {
87
+ kind: { type: 'string', enum: ['append'] },
88
+ value: {},
89
+ },
90
+ },
91
+ },
92
+ },
93
+ },
94
+ output: {
95
+ schema: {
96
+ type: 'object',
97
+ required: ['path', 'value'],
98
+ properties: {
99
+ path: {
100
+ anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],
101
+ },
102
+ value: { type: 'array' },
103
+ },
104
+ },
105
+ },
106
+ },
66
107
  {
67
108
  id: 'runtime.eventOperation',
68
109
  owner: '@ankhorage/runtime',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Capability } from '@ankhorage/contracts/capability';\n\nexport const CAPABILITIES = [\n {\n id: 'runtime.render',\n owner: '@ankhorage/runtime',\n access: ['invoke'],\n binding: {\n kind: 'action',\n bindableAs: ['target'],\n },\n label: 'Render runtime',\n },\n {\n id: 'runtime.actions',\n owner: '@ankhorage/runtime',\n access: ['invoke'],\n binding: {\n kind: 'action',\n bindableAs: ['target'],\n },\n label: 'Execute runtime actions',\n },\n {\n id: 'runtime.bindings',\n owner: '@ankhorage/runtime',\n access: ['read', 'write'],\n binding: {\n kind: 'state',\n bindableAs: ['source', 'target'],\n },\n label: 'Runtime bindings',\n },\n {\n id: 'state.set',\n owner: '@ankhorage/runtime',\n access: ['invoke', 'write'],\n binding: {\n kind: 'state',\n bindableAs: ['target'],\n },\n label: 'Set runtime state',\n input: {\n schema: {\n type: 'object',\n required: ['path', 'value'],\n properties: {\n path: {\n anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],\n },\n value: {},\n },\n },\n },\n output: {\n schema: {\n type: 'object',\n required: ['path', 'value'],\n properties: {\n path: {\n anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],\n },\n value: {},\n },\n },\n },\n },\n {\n id: 'runtime.eventOperation',\n owner: '@ankhorage/runtime',\n access: ['read', 'subscribe'],\n binding: {\n kind: 'context',\n bindableAs: ['source'],\n },\n label: 'Runtime event operation',\n output: {\n schema: {\n type: 'object',\n required: ['status', 'loading', 'errorMessage'],\n properties: {\n status: { type: 'string', enum: ['idle', 'loading', 'success', 'error'] },\n loading: { type: 'boolean' },\n errorMessage: { type: 'string' },\n nodeId: { type: 'string' },\n operation: {\n type: 'object',\n required: ['apiId', 'operationId'],\n properties: {\n apiId: { type: 'string' },\n endpointId: { type: 'string' },\n operationId: { type: 'string' },\n },\n },\n },\n },\n },\n },\n {\n id: 'runtime.repeat.item',\n owner: '@ankhorage/runtime',\n access: ['read'],\n binding: {\n kind: 'context',\n bindableAs: ['source'],\n },\n label: 'Runtime repeat item',\n },\n] as const satisfies readonly Capability[];\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Capability } from '@ankhorage/contracts/capability';\n\nexport const CAPABILITIES = [\n {\n id: 'runtime.render',\n owner: '@ankhorage/runtime',\n access: ['invoke'],\n binding: {\n kind: 'action',\n bindableAs: ['target'],\n },\n label: 'Render runtime',\n },\n {\n id: 'runtime.actions',\n owner: '@ankhorage/runtime',\n access: ['invoke'],\n binding: {\n kind: 'action',\n bindableAs: ['target'],\n },\n label: 'Execute runtime actions',\n },\n {\n id: 'runtime.bindings',\n owner: '@ankhorage/runtime',\n access: ['read', 'write'],\n binding: {\n kind: 'state',\n bindableAs: ['source', 'target'],\n },\n label: 'Runtime bindings',\n },\n {\n id: 'state.set',\n owner: '@ankhorage/runtime',\n access: ['invoke', 'write'],\n binding: {\n kind: 'state',\n bindableAs: ['target'],\n },\n label: 'Set runtime state',\n input: {\n schema: {\n type: 'object',\n required: ['path', 'value'],\n properties: {\n path: {\n anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],\n },\n value: {},\n },\n },\n },\n output: {\n schema: {\n type: 'object',\n required: ['path', 'value'],\n properties: {\n path: {\n anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],\n },\n value: {},\n },\n },\n },\n },\n {\n id: 'state.update',\n owner: '@ankhorage/runtime',\n access: ['invoke', 'write'],\n binding: {\n kind: 'state',\n bindableAs: ['target'],\n },\n label: 'Update runtime state',\n input: {\n schema: {\n type: 'object',\n required: ['path', 'update'],\n properties: {\n path: {\n anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],\n },\n update: {\n type: 'object',\n required: ['kind', 'value'],\n properties: {\n kind: { type: 'string', enum: ['append'] },\n value: {},\n },\n },\n },\n },\n },\n output: {\n schema: {\n type: 'object',\n required: ['path', 'value'],\n properties: {\n path: {\n anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],\n },\n value: { type: 'array' },\n },\n },\n },\n },\n {\n id: 'runtime.eventOperation',\n owner: '@ankhorage/runtime',\n access: ['read', 'subscribe'],\n binding: {\n kind: 'context',\n bindableAs: ['source'],\n },\n label: 'Runtime event operation',\n output: {\n schema: {\n type: 'object',\n required: ['status', 'loading', 'errorMessage'],\n properties: {\n status: { type: 'string', enum: ['idle', 'loading', 'success', 'error'] },\n loading: { type: 'boolean' },\n errorMessage: { type: 'string' },\n nodeId: { type: 'string' },\n operation: {\n type: 'object',\n required: ['apiId', 'operationId'],\n properties: {\n apiId: { type: 'string' },\n endpointId: { type: 'string' },\n operationId: { type: 'string' },\n },\n },\n },\n },\n },\n },\n {\n id: 'runtime.repeat.item',\n owner: '@ankhorage/runtime',\n access: ['read'],\n binding: {\n kind: 'context',\n bindableAs: ['source'],\n },\n label: 'Runtime repeat item',\n },\n] as const satisfies readonly Capability[];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeActionRegistry.d.ts","sourceRoot":"","sources":["../src/runtimeActionRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtimeActionRegistry.d.ts","sourceRoot":"","sources":["../src/runtimeActionRegistry.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,9 @@ export async function dispatchRuntimeComponentEvent(args) {
30
30
  };
31
31
  if (!matchesBindingCondition(binding.when, context))
32
32
  continue;
33
+ if (binding.target.result !== undefined) {
34
+ context.writeResultSlot(binding.target.result, undefined);
35
+ }
33
36
  const lifecycle = args.eventOperationLifecycle?.start({
34
37
  capability: binding.target.capability,
35
38
  nodeId: args.node.id,
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeActionRegistry.js","sourceRoot":"","sources":["../src/runtimeActionRegistry.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BindingCondition,\n BindingExpression,\n BindingValue,\n ComponentDataBindingRegistry,\n ComponentEventDto,\n DataSourceDiagnostic,\n UiNode,\n} from '@ankhorage/contracts';\nimport type { Capability } from '@ankhorage/contracts/capability';\nimport { isRecord } from '@ankhorage/utility/object';\n\nimport {\n executeRuntimeBindingInvocation,\n resolveRuntimeBindingExpressionSync,\n type RuntimeBindingResultCache,\n type RuntimeBindingResultWriter,\n type RuntimeCapabilityExecutor,\n} from './runtimeBindings';\nimport {\n resolveRuntimeEventOperationErrorMessage,\n type RuntimeEventOperationLifecycle,\n} from './runtimeEventOperationLifecycle';\n\ntype RuntimeEventPayload = Record<string, unknown>;\ntype RuntimeEventHandler = (...args: unknown[]) => unknown;\n\nexport type RuntimeEventCapabilityResolver = (args: {\n readonly eventName: string;\n readonly node: UiNode;\n}) => Capability['id'] | undefined;\n\nexport interface RuntimeActionRegistry {\n dispatchComponentEvent(args: RuntimeComponentEventDispatchArgs): Promise<void>;\n}\n\nexport interface RuntimeActionResolutionScope {\n readonly context?: Record<string, unknown>;\n readonly resultSlots?: RuntimeBindingResultCache;\n readonly state?: Record<string, unknown>;\n}\n\nexport interface RuntimeActionResolutionArgs extends RuntimeActionResolutionScope {\n readonly event: ComponentEventDto<string, object>;\n}\n\nexport interface RuntimeComponentEventDispatchArgs extends RuntimeActionResolutionScope {\n readonly node: UiNode;\n readonly event: ComponentEventDto<string, object>;\n readonly eventName?: string;\n readonly dataBindings?: ComponentDataBindingRegistry;\n readonly executeCapability?: RuntimeCapabilityExecutor;\n readonly writeResultSlot?: RuntimeBindingResultWriter;\n readonly eventOperationLifecycle?: RuntimeEventOperationLifecycle;\n}\n\nexport interface RuntimeEventPropWrapArgs extends RuntimeActionResolutionScope {\n readonly node: UiNode;\n readonly props: Record<string, unknown>;\n readonly disableActions: boolean;\n readonly dataBindings?: ComponentDataBindingRegistry;\n readonly dispatchComponentEvent: (\n args: RuntimeComponentEventDispatchArgs,\n ) => Promise<void> | void;\n readonly resolveEventCapability?: RuntimeEventCapabilityResolver;\n}\n\n/*** Creates a registry that dispatches every authored event through one capability executor. */\nexport function createRuntimeActionRegistry(\n options: Pick<\n RuntimeComponentEventDispatchArgs,\n | 'dataBindings'\n | 'eventOperationLifecycle'\n | 'executeCapability'\n | 'resultSlots'\n | 'writeResultSlot'\n > = {},\n): RuntimeActionRegistry {\n return {\n async dispatchComponentEvent(args) {\n await dispatchRuntimeComponentEvent({ ...options, ...args });\n },\n };\n}\n\n/*** Executes every matching event invocation through the canonical capability path. */\nexport async function dispatchRuntimeComponentEvent(\n args: RuntimeComponentEventDispatchArgs,\n): Promise<readonly DataSourceDiagnostic[]> {\n const eventName = args.eventName ?? inferLocalEventName(args.event.type);\n const bindings =\n args.dataBindings?.[args.node.id]?.events?.[eventName] ??\n args.dataBindings?.[args.node.id]?.events?.[args.event.type] ??\n [];\n const diagnostics: DataSourceDiagnostic[] = [];\n const resultSlots: Record<string, BindingValue | undefined> = { ...(args.resultSlots ?? {}) };\n\n for (const binding of bindings) {\n const context = {\n context: args.context,\n event: args.event,\n executeCapability: args.executeCapability,\n resultSlots,\n writeResultSlot: (slot: string, value: BindingValue) => {\n resultSlots[slot] = value;\n args.writeResultSlot?.(slot, value);\n },\n };\n if (!matchesBindingCondition(binding.when, context)) continue;\n\n const lifecycle = args.eventOperationLifecycle?.start({\n capability: binding.target.capability,\n nodeId: args.node.id,\n });\n if (args.eventOperationLifecycle !== undefined && lifecycle === undefined) break;\n\n try {\n const result = await executeRuntimeBindingInvocation(\n binding.target,\n context,\n { event: args.event, node: args.node },\n diagnostics,\n );\n if (lifecycle !== undefined && result?.ok) args.eventOperationLifecycle?.succeed(lifecycle);\n else if (lifecycle !== undefined)\n args.eventOperationLifecycle?.fail(\n lifecycle,\n resolveRuntimeEventOperationErrorMessage(diagnostics),\n );\n } catch {\n diagnostics.push({\n code: 'adapter-error',\n message: `Capability '${binding.target.capability}' could not be completed. Please try again.`,\n severity: 'error',\n });\n if (lifecycle !== undefined)\n args.eventOperationLifecycle?.fail(\n lifecycle,\n resolveRuntimeEventOperationErrorMessage(diagnostics),\n );\n break;\n }\n }\n\n return diagnostics;\n}\n\n/*** Wraps component callbacks so manifest event bindings retain the original callback behavior. */\nexport function wrapRuntimeEventProps(args: RuntimeEventPropWrapArgs): Record<string, unknown> {\n const props = { ...args.props };\n if (args.disableActions || args.dataBindings?.[args.node.id]?.events === undefined) return props;\n\n for (const eventName of Object.keys(args.dataBindings[args.node.id]?.events ?? {})) {\n const propName = eventNameToCallbackProp(eventName);\n const existing = props[propName];\n props[propName] = (...handlerArgs: unknown[]) => {\n const result = isRuntimeEventHandler(existing) ? existing(...handlerArgs) : undefined;\n void args.dispatchComponentEvent({\n context: args.context,\n dataBindings: args.dataBindings,\n event: createComponentEventFromHandlerArgs({\n capability: args.resolveEventCapability?.({ eventName, node: args.node }),\n eventName,\n handlerArgs,\n node: args.node,\n }),\n eventName,\n node: args.node,\n resultSlots: args.resultSlots,\n state: args.state,\n });\n return result;\n };\n }\n return props;\n}\n\n/*** Maps a platform callback invocation to the portable component event representation. */\nexport function createComponentEventFromHandlerArgs(args: {\n readonly capability?: Capability['id'];\n readonly node: UiNode;\n readonly eventName: string;\n readonly handlerArgs: readonly unknown[];\n}): ComponentEventDto<string, RuntimeEventPayload> {\n return {\n payload: createPayloadForEvent(args.eventName, args.handlerArgs),\n sourceNodeId: args.node.id,\n type: args.capability ?? args.eventName,\n };\n}\n\n/*** Resolves an authored expression-shaped payload for imperative consumers. */\nexport function resolveRuntimeActionValue(\n value: BindingExpression,\n args: RuntimeActionResolutionArgs,\n): BindingValue | undefined {\n return resolveRuntimeBindingExpressionSync(value, args);\n}\n\nfunction matchesBindingCondition(\n condition: BindingCondition | undefined,\n context: Parameters<typeof resolveRuntimeBindingExpressionSync>[1],\n): boolean {\n if (condition === undefined) return true;\n const source = resolveRuntimeBindingExpressionSync(condition.source, context);\n const value =\n condition.value === undefined\n ? undefined\n : resolveRuntimeBindingExpressionSync(condition.value, context);\n if (condition.operator === 'exists') return source !== undefined;\n if (condition.operator === 'notExists') return source === undefined;\n if (condition.operator === 'eq') return source === value;\n return source !== value;\n}\n\nfunction createPayloadForEvent(eventName: string, args: readonly unknown[]): RuntimeEventPayload {\n if (eventName === 'submit') return { values: asRecord(args[0]) ?? {} };\n if (eventName === 'changeText' || eventName === 'valueChange') return { value: args[0] };\n if (eventName === 'checkedChange') return { checked: args[0] };\n if (eventName === 'itemPress') {\n const item = asRecord(args[0]) ?? {};\n return typeof item.id === 'string' || typeof item.id === 'number'\n ? { item, itemId: item.id }\n : { item };\n }\n return asRecord(args[0]) ?? {};\n}\n\nfunction inferLocalEventName(eventType: string): string {\n return eventType.split('.').at(-1) ?? eventType;\n}\n\nfunction eventNameToCallbackProp(eventName: string): string {\n return `on${eventName.charAt(0).toUpperCase()}${eventName.slice(1)}`;\n}\n\nfunction isRuntimeEventHandler(value: unknown): value is RuntimeEventHandler {\n return typeof value === 'function';\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n"]}
1
+ {"version":3,"file":"runtimeActionRegistry.js","sourceRoot":"","sources":["../src/runtimeActionRegistry.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BindingCondition,\n BindingExpression,\n BindingValue,\n ComponentDataBindingRegistry,\n ComponentEventDto,\n DataSourceDiagnostic,\n UiNode,\n} from '@ankhorage/contracts';\nimport type { Capability } from '@ankhorage/contracts/capability';\nimport { isRecord } from '@ankhorage/utility/object';\n\nimport {\n executeRuntimeBindingInvocation,\n resolveRuntimeBindingExpressionSync,\n type RuntimeBindingResultCache,\n type RuntimeBindingResultWriter,\n type RuntimeCapabilityExecutor,\n} from './runtimeBindings';\nimport {\n resolveRuntimeEventOperationErrorMessage,\n type RuntimeEventOperationLifecycle,\n} from './runtimeEventOperationLifecycle';\n\ntype RuntimeEventPayload = Record<string, unknown>;\ntype RuntimeEventHandler = (...args: unknown[]) => unknown;\n\nexport type RuntimeEventCapabilityResolver = (args: {\n readonly eventName: string;\n readonly node: UiNode;\n}) => Capability['id'] | undefined;\n\nexport interface RuntimeActionRegistry {\n dispatchComponentEvent(args: RuntimeComponentEventDispatchArgs): Promise<void>;\n}\n\nexport interface RuntimeActionResolutionScope {\n readonly context?: Record<string, unknown>;\n readonly resultSlots?: RuntimeBindingResultCache;\n readonly state?: Record<string, unknown>;\n}\n\nexport interface RuntimeActionResolutionArgs extends RuntimeActionResolutionScope {\n readonly event: ComponentEventDto<string, object>;\n}\n\nexport interface RuntimeComponentEventDispatchArgs extends RuntimeActionResolutionScope {\n readonly node: UiNode;\n readonly event: ComponentEventDto<string, object>;\n readonly eventName?: string;\n readonly dataBindings?: ComponentDataBindingRegistry;\n readonly executeCapability?: RuntimeCapabilityExecutor;\n readonly writeResultSlot?: RuntimeBindingResultWriter;\n readonly eventOperationLifecycle?: RuntimeEventOperationLifecycle;\n}\n\nexport interface RuntimeEventPropWrapArgs extends RuntimeActionResolutionScope {\n readonly node: UiNode;\n readonly props: Record<string, unknown>;\n readonly disableActions: boolean;\n readonly dataBindings?: ComponentDataBindingRegistry;\n readonly dispatchComponentEvent: (\n args: RuntimeComponentEventDispatchArgs,\n ) => Promise<void> | void;\n readonly resolveEventCapability?: RuntimeEventCapabilityResolver;\n}\n\n/*** Creates a registry that dispatches every authored event through one capability executor. */\nexport function createRuntimeActionRegistry(\n options: Pick<\n RuntimeComponentEventDispatchArgs,\n | 'dataBindings'\n | 'eventOperationLifecycle'\n | 'executeCapability'\n | 'resultSlots'\n | 'writeResultSlot'\n > = {},\n): RuntimeActionRegistry {\n return {\n async dispatchComponentEvent(args) {\n await dispatchRuntimeComponentEvent({ ...options, ...args });\n },\n };\n}\n\n/*** Executes every matching event invocation through the canonical capability path. */\nexport async function dispatchRuntimeComponentEvent(\n args: RuntimeComponentEventDispatchArgs,\n): Promise<readonly DataSourceDiagnostic[]> {\n const eventName = args.eventName ?? inferLocalEventName(args.event.type);\n const bindings =\n args.dataBindings?.[args.node.id]?.events?.[eventName] ??\n args.dataBindings?.[args.node.id]?.events?.[args.event.type] ??\n [];\n const diagnostics: DataSourceDiagnostic[] = [];\n const resultSlots: Record<string, BindingValue | undefined> = { ...(args.resultSlots ?? {}) };\n\n for (const binding of bindings) {\n const context = {\n context: args.context,\n event: args.event,\n executeCapability: args.executeCapability,\n resultSlots,\n writeResultSlot: (slot: string, value: BindingValue | undefined) => {\n resultSlots[slot] = value;\n args.writeResultSlot?.(slot, value);\n },\n };\n if (!matchesBindingCondition(binding.when, context)) continue;\n\n if (binding.target.result !== undefined) {\n context.writeResultSlot(binding.target.result, undefined);\n }\n\n const lifecycle = args.eventOperationLifecycle?.start({\n capability: binding.target.capability,\n nodeId: args.node.id,\n });\n if (args.eventOperationLifecycle !== undefined && lifecycle === undefined) break;\n\n try {\n const result = await executeRuntimeBindingInvocation(\n binding.target,\n context,\n { event: args.event, node: args.node },\n diagnostics,\n );\n if (lifecycle !== undefined && result?.ok) args.eventOperationLifecycle?.succeed(lifecycle);\n else if (lifecycle !== undefined)\n args.eventOperationLifecycle?.fail(\n lifecycle,\n resolveRuntimeEventOperationErrorMessage(diagnostics),\n );\n } catch {\n diagnostics.push({\n code: 'adapter-error',\n message: `Capability '${binding.target.capability}' could not be completed. Please try again.`,\n severity: 'error',\n });\n if (lifecycle !== undefined)\n args.eventOperationLifecycle?.fail(\n lifecycle,\n resolveRuntimeEventOperationErrorMessage(diagnostics),\n );\n break;\n }\n }\n\n return diagnostics;\n}\n\n/*** Wraps component callbacks so manifest event bindings retain the original callback behavior. */\nexport function wrapRuntimeEventProps(args: RuntimeEventPropWrapArgs): Record<string, unknown> {\n const props = { ...args.props };\n if (args.disableActions || args.dataBindings?.[args.node.id]?.events === undefined) return props;\n\n for (const eventName of Object.keys(args.dataBindings[args.node.id]?.events ?? {})) {\n const propName = eventNameToCallbackProp(eventName);\n const existing = props[propName];\n props[propName] = (...handlerArgs: unknown[]) => {\n const result = isRuntimeEventHandler(existing) ? existing(...handlerArgs) : undefined;\n void args.dispatchComponentEvent({\n context: args.context,\n dataBindings: args.dataBindings,\n event: createComponentEventFromHandlerArgs({\n capability: args.resolveEventCapability?.({ eventName, node: args.node }),\n eventName,\n handlerArgs,\n node: args.node,\n }),\n eventName,\n node: args.node,\n resultSlots: args.resultSlots,\n state: args.state,\n });\n return result;\n };\n }\n return props;\n}\n\n/*** Maps a platform callback invocation to the portable component event representation. */\nexport function createComponentEventFromHandlerArgs(args: {\n readonly capability?: Capability['id'];\n readonly node: UiNode;\n readonly eventName: string;\n readonly handlerArgs: readonly unknown[];\n}): ComponentEventDto<string, RuntimeEventPayload> {\n return {\n payload: createPayloadForEvent(args.eventName, args.handlerArgs),\n sourceNodeId: args.node.id,\n type: args.capability ?? args.eventName,\n };\n}\n\n/*** Resolves an authored expression-shaped payload for imperative consumers. */\nexport function resolveRuntimeActionValue(\n value: BindingExpression,\n args: RuntimeActionResolutionArgs,\n): BindingValue | undefined {\n return resolveRuntimeBindingExpressionSync(value, args);\n}\n\nfunction matchesBindingCondition(\n condition: BindingCondition | undefined,\n context: Parameters<typeof resolveRuntimeBindingExpressionSync>[1],\n): boolean {\n if (condition === undefined) return true;\n const source = resolveRuntimeBindingExpressionSync(condition.source, context);\n const value =\n condition.value === undefined\n ? undefined\n : resolveRuntimeBindingExpressionSync(condition.value, context);\n if (condition.operator === 'exists') return source !== undefined;\n if (condition.operator === 'notExists') return source === undefined;\n if (condition.operator === 'eq') return source === value;\n return source !== value;\n}\n\nfunction createPayloadForEvent(eventName: string, args: readonly unknown[]): RuntimeEventPayload {\n if (eventName === 'submit') return { values: asRecord(args[0]) ?? {} };\n if (eventName === 'changeText' || eventName === 'valueChange') return { value: args[0] };\n if (eventName === 'checkedChange') return { checked: args[0] };\n if (eventName === 'itemPress') {\n const item = asRecord(args[0]) ?? {};\n return typeof item.id === 'string' || typeof item.id === 'number'\n ? { item, itemId: item.id }\n : { item };\n }\n return asRecord(args[0]) ?? {};\n}\n\nfunction inferLocalEventName(eventType: string): string {\n return eventType.split('.').at(-1) ?? eventType;\n}\n\nfunction eventNameToCallbackProp(eventName: string): string {\n return `on${eventName.charAt(0).toUpperCase()}${eventName.slice(1)}`;\n}\n\nfunction isRuntimeEventHandler(value: unknown): value is RuntimeEventHandler {\n return typeof value === 'function';\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { BindingExpression, BindingInputMap, BindingInvocation, BindingValue, ComponentDataBindingRegistry, ComponentEventDto, DataSourceDiagnostic, PropBinding, StateAdapter, UiNode } from '@ankhorage/contracts';
2
2
  import type { Capability } from '@ankhorage/contracts/capability';
3
3
  export type RuntimeBindingResultCache = Readonly<Record<string, BindingValue | undefined>>;
4
- export type RuntimeBindingResultWriter = (slot: string, value: BindingValue) => void;
4
+ export type RuntimeBindingResultWriter = (slot: string, value: BindingValue | undefined) => void;
5
5
  export interface RuntimeCapabilityExecutionArgs {
6
6
  readonly capability: Capability['id'];
7
7
  readonly input?: BindingValue;
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeBindings.d.ts","sourceRoot":"","sources":["../src/runtimeBindings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtimeBindings.d.ts","sourceRoot":"","sources":["../src/runtimeBindings.ts"],"names":[],"mappings":"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"}
@@ -158,9 +158,11 @@ function resolveObjectSync(fields, context, diagnostics) {
158
158
  return Object.fromEntries(entries.filter((entry) => entry !== undefined));
159
159
  }
160
160
  function applyBindingValueTransforms(value, transforms) {
161
- if (typeof value !== 'string')
162
- return value;
163
161
  return transforms.reduce((current, transform) => {
162
+ if (transform === 'length')
163
+ return typeof current === 'string' || Array.isArray(current) ? current.length : undefined;
164
+ if (typeof current !== 'string')
165
+ return undefined;
164
166
  if (transform === 'trim')
165
167
  return current.trim();
166
168
  if (transform === 'uppercase')
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeBindings.js","sourceRoot":"","sources":["../src/runtimeBindings.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BindingCapabilityReference,\n BindingExpression,\n BindingInputMap,\n BindingInvocation,\n BindingValue,\n BindingValueTransform,\n ComponentDataBindingRegistry,\n ComponentEventDto,\n DataSourceDiagnostic,\n PropBinding,\n StateAdapter,\n UiNode,\n} from '@ankhorage/contracts';\nimport type { Capability } from '@ankhorage/contracts/capability';\nimport { isRecord } from '@ankhorage/utility/object';\n\nexport type RuntimeBindingResultCache = Readonly<Record<string, BindingValue | undefined>>;\nexport type RuntimeBindingResultWriter = (slot: string, value: BindingValue) => void;\n\nexport interface RuntimeCapabilityExecutionArgs {\n readonly capability: Capability['id'];\n readonly input?: BindingValue;\n readonly node?: UiNode;\n readonly event?: ComponentEventDto<string, object>;\n}\n\nexport type RuntimeCapabilityExecutionResult =\n | {\n readonly ok: true;\n readonly data: BindingValue;\n readonly diagnostics?: readonly DataSourceDiagnostic[];\n }\n | { readonly ok: false; readonly diagnostics: readonly DataSourceDiagnostic[] };\n\nexport type RuntimeCapabilityExecutor = (\n args: RuntimeCapabilityExecutionArgs,\n) => Promise<RuntimeCapabilityExecutionResult>;\n\nexport interface RuntimeBindingResolutionContext {\n readonly context?: Record<string, unknown>;\n readonly event?: ComponentEventDto<string, object>;\n readonly stateAdapter?: StateAdapter;\n readonly capabilityValues?: Readonly<Record<string, BindingValue | undefined>>;\n readonly dataBindings?: ComponentDataBindingRegistry;\n readonly resultSlots?: RuntimeBindingResultCache;\n readonly executeCapability?: RuntimeCapabilityExecutor;\n readonly writeResultSlot?: RuntimeBindingResultWriter;\n}\n\nexport interface RuntimeBindingResolutionArgs extends RuntimeBindingResolutionContext {\n readonly node: UiNode;\n readonly props: Record<string, unknown>;\n}\n\nexport interface RuntimeBindingResolutionResult {\n readonly props: Record<string, unknown>;\n readonly diagnostics: readonly DataSourceDiagnostic[];\n}\n\n/*** Resolves every property binding through the canonical expression boundary. */\nexport async function resolveRuntimeBindingsAsync(\n args: RuntimeBindingResolutionArgs,\n): Promise<RuntimeBindingResolutionResult> {\n const diagnostics: DataSourceDiagnostic[] = [];\n const props = { ...args.props };\n\n for (const [name, binding] of Object.entries(args.dataBindings?.[args.node.id]?.props ?? {})) {\n props[name] = await resolveRuntimeBindingValue(binding, args, diagnostics);\n }\n\n return { props, diagnostics };\n}\n\n/*** Resolves property bindings using only already materialized capability values. */\nexport function resolveRuntimeBindings(\n args: RuntimeBindingResolutionArgs,\n): RuntimeBindingResolutionResult {\n const diagnostics: DataSourceDiagnostic[] = [];\n const props = { ...args.props };\n\n for (const [name, binding] of Object.entries(args.dataBindings?.[args.node.id]?.props ?? {})) {\n props[name] = resolveRuntimeBindingValueSync(binding, args, diagnostics);\n }\n\n return { props, diagnostics };\n}\n\n/*** Resolves one recursive Contracts expression, executing a capability only when needed. */\nexport async function resolveRuntimeBindingExpression(\n expression: BindingExpression,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): Promise<BindingValue | undefined> {\n if (isCapabilityReference(expression)) {\n return resolveCapabilityReferenceAsync(expression, context, diagnostics);\n }\n if (expression.kind === 'literal') return expression.value;\n if (expression.kind === 'array') return resolveArrayAsync(expression.items, context, diagnostics);\n if (expression.kind === 'object')\n return resolveObjectAsync(expression.fields, context, diagnostics);\n if (expression.kind === 'transform') {\n return applyBindingValueTransforms(\n await resolveRuntimeBindingExpression(expression.value, context, diagnostics),\n expression.transforms,\n );\n }\n\n const value = await resolveRuntimeBindingExpression(expression.value, context, diagnostics);\n return value === undefined\n ? resolveRuntimeBindingExpression(expression.fallback, context, diagnostics)\n : value;\n}\n\n/*** Resolves one expression without side effects for synchronous rendering. */\nexport function resolveRuntimeBindingExpressionSync(\n expression: BindingExpression,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): BindingValue | undefined {\n if (isCapabilityReference(expression))\n return resolveCapabilityReferenceSync(expression, context, diagnostics);\n if (expression.kind === 'literal') return expression.value;\n if (expression.kind === 'array') return resolveArraySync(expression.items, context, diagnostics);\n if (expression.kind === 'object')\n return resolveObjectSync(expression.fields, context, diagnostics);\n if (expression.kind === 'transform') {\n return applyBindingValueTransforms(\n resolveRuntimeBindingExpressionSync(expression.value, context, diagnostics),\n expression.transforms,\n );\n }\n\n const value = resolveRuntimeBindingExpressionSync(expression.value, context, diagnostics);\n return value === undefined\n ? resolveRuntimeBindingExpressionSync(expression.fallback, context, diagnostics)\n : value;\n}\n\n/*** Resolves a property binding expression. */\nexport function resolveRuntimeBindingValue(\n binding: PropBinding,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): Promise<BindingValue | undefined> {\n return resolveRuntimeBindingExpression(binding.value, context, diagnostics);\n}\n\n/*** Resolves a property binding expression without executing a capability. */\nexport function resolveRuntimeBindingValueSync(\n binding: PropBinding,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): BindingValue | undefined {\n return resolveRuntimeBindingExpressionSync(binding.value, context, diagnostics);\n}\n\n/*** Resolves an invocation input map recursively. */\nexport function resolveBindingInputMap(\n input: BindingInputMap | undefined,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): Promise<BindingValue | undefined> {\n return input === undefined\n ? Promise.resolve(undefined)\n : resolveObjectAsync(input, context, diagnostics);\n}\n\n/*** Resolves an invocation input map without executing a capability. */\nexport function resolveBindingInputMapSync(\n input: BindingInputMap | undefined,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): BindingValue | undefined {\n return input === undefined ? undefined : resolveObjectSync(input, context, diagnostics);\n}\n\n/*** Invokes one capability and records its structured result under its declared local slot. */\nexport async function executeRuntimeBindingInvocation(\n invocation: BindingInvocation,\n context: RuntimeBindingResolutionContext,\n args: Pick<RuntimeCapabilityExecutionArgs, 'event' | 'node'> = {},\n diagnostics: DataSourceDiagnostic[] = [],\n): Promise<RuntimeCapabilityExecutionResult | undefined> {\n if (context.executeCapability === undefined) {\n diagnostics.push(createMissingCapabilityExecutorDiagnostic(invocation.capability));\n return undefined;\n }\n\n const input = await resolveBindingInputMap(invocation.input, context, diagnostics);\n const result = await context.executeCapability({\n capability: invocation.capability,\n input,\n ...args,\n });\n diagnostics.push(...(result.diagnostics ?? []));\n\n if (result.ok && invocation.result !== undefined) {\n context.writeResultSlot?.(invocation.result, result.data);\n }\n\n return result;\n}\n\n/*** Applies a dotted path to a serializable binding value. */\nexport function applyRuntimeBindingDataPath(\n value: BindingValue | undefined,\n path: string | undefined,\n): BindingValue | undefined {\n return path === undefined ? value : asBindingValue(readPath(value, path));\n}\n\nfunction isCapabilityReference(\n expression: BindingExpression,\n): expression is BindingCapabilityReference {\n return 'capability' in expression;\n}\n\nasync function resolveCapabilityReferenceAsync(\n reference: BindingCapabilityReference,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): Promise<BindingValue | undefined> {\n const cached = resolveCapabilityReferenceSync(reference, context, diagnostics, false);\n if (cached !== undefined || reference.result !== undefined) return cached;\n if (context.executeCapability === undefined) return cached;\n\n const result = await context.executeCapability({ capability: reference.capability });\n diagnostics.push(...(result.diagnostics ?? []));\n return result.ok ? applyRuntimeBindingDataPath(result.data, reference.path) : undefined;\n}\n\nfunction resolveCapabilityReferenceSync(\n reference: BindingCapabilityReference,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n reportMissing = true,\n): BindingValue | undefined {\n const value =\n reference.result === undefined\n ? resolveReadableCapability(reference.capability, context)\n : context.resultSlots?.[reference.result];\n if (value === undefined && reference.result !== undefined && reportMissing) {\n diagnostics.push({\n code: 'missing-adapter',\n message: `Result slot '${reference.result}' is not available.`,\n severity: 'error',\n });\n }\n return applyRuntimeBindingDataPath(value, reference.path);\n}\n\nfunction resolveReadableCapability(\n capability: string,\n context: RuntimeBindingResolutionContext,\n): BindingValue | undefined {\n const explicit = context.capabilityValues?.[capability];\n if (explicit !== undefined) return explicit;\n if (capability.startsWith('context.'))\n return asBindingValue(readPath(context.context, capability.slice(8)));\n if (context.event?.type === capability) return asBindingValue(context.event);\n if (capability.startsWith('state.')) {\n const result = context.stateAdapter?.get(capability.slice(6));\n return result?.ok ? asBindingValue(result.data) : undefined;\n }\n return asBindingValue(readPath(context.context, capability));\n}\n\nasync function resolveArrayAsync(\n items: readonly BindingExpression[],\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): Promise<BindingValue> {\n const values = await Promise.all(\n items.map((item) => resolveRuntimeBindingExpression(item, context, diagnostics)),\n );\n return values.filter((value): value is BindingValue => value !== undefined);\n}\n\nfunction resolveArraySync(\n items: readonly BindingExpression[],\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): BindingValue {\n return items\n .map((item) => resolveRuntimeBindingExpressionSync(item, context, diagnostics))\n .filter((value): value is BindingValue => value !== undefined);\n}\n\nasync function resolveObjectAsync(\n fields: Readonly<Record<string, BindingExpression>>,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): Promise<BindingValue> {\n const entries = await Promise.all(\n Object.entries(fields).map(async ([key, expression]) => {\n const value = await resolveRuntimeBindingExpression(expression, context, diagnostics);\n return value === undefined ? undefined : ([key, value] as const);\n }),\n );\n return Object.fromEntries(\n entries.filter((entry): entry is readonly [string, BindingValue] => entry !== undefined),\n );\n}\n\nfunction resolveObjectSync(\n fields: Readonly<Record<string, BindingExpression>>,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): BindingValue {\n const entries = Object.entries(fields).map(([key, expression]) => {\n const value = resolveRuntimeBindingExpressionSync(expression, context, diagnostics);\n return value === undefined ? undefined : ([key, value] as const);\n });\n return Object.fromEntries(\n entries.filter((entry): entry is readonly [string, BindingValue] => entry !== undefined),\n );\n}\n\nfunction applyBindingValueTransforms(\n value: BindingValue | undefined,\n transforms: readonly BindingValueTransform[],\n): BindingValue | undefined {\n if (typeof value !== 'string') return value;\n return transforms.reduce((current, transform) => {\n if (transform === 'trim') return current.trim();\n if (transform === 'uppercase') return current.toUpperCase();\n return current.toLowerCase();\n }, value);\n}\n\nfunction createMissingCapabilityExecutorDiagnostic(capability: string): DataSourceDiagnostic {\n return {\n code: 'missing-adapter',\n message: `Capability '${capability}' requires an injected capability executor.`,\n severity: 'error',\n };\n}\n\nfunction readPath(value: unknown, path: string): unknown {\n if (path.length === 0) return value;\n return path.split('.').reduce<unknown>((current, part) => {\n if (Array.isArray(current))\n return /^(0|[1-9]\\\\d*)$/.test(part) ? current[Number(part)] : undefined;\n return isRecord(current) ? current[part] : undefined;\n }, value);\n}\n\nfunction asBindingValue(value: unknown): BindingValue | undefined {\n return isBindingValue(value) ? value : undefined;\n}\n\nfunction isBindingValue(value: unknown): value is BindingValue {\n if (value === null || ['boolean', 'number', 'string'].includes(typeof value)) return true;\n if (Array.isArray(value)) return value.every(isBindingValue);\n return isRecord(value) && Object.values(value).every(isBindingValue);\n}\n"]}
1
+ {"version":3,"file":"runtimeBindings.js","sourceRoot":"","sources":["../src/runtimeBindings.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BindingCapabilityReference,\n BindingExpression,\n BindingInputMap,\n BindingInvocation,\n BindingValue,\n BindingValueTransform,\n ComponentDataBindingRegistry,\n ComponentEventDto,\n DataSourceDiagnostic,\n PropBinding,\n StateAdapter,\n UiNode,\n} from '@ankhorage/contracts';\nimport type { Capability } from '@ankhorage/contracts/capability';\nimport { isRecord } from '@ankhorage/utility/object';\n\nexport type RuntimeBindingResultCache = Readonly<Record<string, BindingValue | undefined>>;\nexport type RuntimeBindingResultWriter = (slot: string, value: BindingValue | undefined) => void;\n\nexport interface RuntimeCapabilityExecutionArgs {\n readonly capability: Capability['id'];\n readonly input?: BindingValue;\n readonly node?: UiNode;\n readonly event?: ComponentEventDto<string, object>;\n}\n\nexport type RuntimeCapabilityExecutionResult =\n | {\n readonly ok: true;\n readonly data: BindingValue;\n readonly diagnostics?: readonly DataSourceDiagnostic[];\n }\n | { readonly ok: false; readonly diagnostics: readonly DataSourceDiagnostic[] };\n\nexport type RuntimeCapabilityExecutor = (\n args: RuntimeCapabilityExecutionArgs,\n) => Promise<RuntimeCapabilityExecutionResult>;\n\nexport interface RuntimeBindingResolutionContext {\n readonly context?: Record<string, unknown>;\n readonly event?: ComponentEventDto<string, object>;\n readonly stateAdapter?: StateAdapter;\n readonly capabilityValues?: Readonly<Record<string, BindingValue | undefined>>;\n readonly dataBindings?: ComponentDataBindingRegistry;\n readonly resultSlots?: RuntimeBindingResultCache;\n readonly executeCapability?: RuntimeCapabilityExecutor;\n readonly writeResultSlot?: RuntimeBindingResultWriter;\n}\n\nexport interface RuntimeBindingResolutionArgs extends RuntimeBindingResolutionContext {\n readonly node: UiNode;\n readonly props: Record<string, unknown>;\n}\n\nexport interface RuntimeBindingResolutionResult {\n readonly props: Record<string, unknown>;\n readonly diagnostics: readonly DataSourceDiagnostic[];\n}\n\n/*** Resolves every property binding through the canonical expression boundary. */\nexport async function resolveRuntimeBindingsAsync(\n args: RuntimeBindingResolutionArgs,\n): Promise<RuntimeBindingResolutionResult> {\n const diagnostics: DataSourceDiagnostic[] = [];\n const props = { ...args.props };\n\n for (const [name, binding] of Object.entries(args.dataBindings?.[args.node.id]?.props ?? {})) {\n props[name] = await resolveRuntimeBindingValue(binding, args, diagnostics);\n }\n\n return { props, diagnostics };\n}\n\n/*** Resolves property bindings using only already materialized capability values. */\nexport function resolveRuntimeBindings(\n args: RuntimeBindingResolutionArgs,\n): RuntimeBindingResolutionResult {\n const diagnostics: DataSourceDiagnostic[] = [];\n const props = { ...args.props };\n\n for (const [name, binding] of Object.entries(args.dataBindings?.[args.node.id]?.props ?? {})) {\n props[name] = resolveRuntimeBindingValueSync(binding, args, diagnostics);\n }\n\n return { props, diagnostics };\n}\n\n/*** Resolves one recursive Contracts expression, executing a capability only when needed. */\nexport async function resolveRuntimeBindingExpression(\n expression: BindingExpression,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): Promise<BindingValue | undefined> {\n if (isCapabilityReference(expression)) {\n return resolveCapabilityReferenceAsync(expression, context, diagnostics);\n }\n if (expression.kind === 'literal') return expression.value;\n if (expression.kind === 'array') return resolveArrayAsync(expression.items, context, diagnostics);\n if (expression.kind === 'object')\n return resolveObjectAsync(expression.fields, context, diagnostics);\n if (expression.kind === 'transform') {\n return applyBindingValueTransforms(\n await resolveRuntimeBindingExpression(expression.value, context, diagnostics),\n expression.transforms,\n );\n }\n\n const value = await resolveRuntimeBindingExpression(expression.value, context, diagnostics);\n return value === undefined\n ? resolveRuntimeBindingExpression(expression.fallback, context, diagnostics)\n : value;\n}\n\n/*** Resolves one expression without side effects for synchronous rendering. */\nexport function resolveRuntimeBindingExpressionSync(\n expression: BindingExpression,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): BindingValue | undefined {\n if (isCapabilityReference(expression))\n return resolveCapabilityReferenceSync(expression, context, diagnostics);\n if (expression.kind === 'literal') return expression.value;\n if (expression.kind === 'array') return resolveArraySync(expression.items, context, diagnostics);\n if (expression.kind === 'object')\n return resolveObjectSync(expression.fields, context, diagnostics);\n if (expression.kind === 'transform') {\n return applyBindingValueTransforms(\n resolveRuntimeBindingExpressionSync(expression.value, context, diagnostics),\n expression.transforms,\n );\n }\n\n const value = resolveRuntimeBindingExpressionSync(expression.value, context, diagnostics);\n return value === undefined\n ? resolveRuntimeBindingExpressionSync(expression.fallback, context, diagnostics)\n : value;\n}\n\n/*** Resolves a property binding expression. */\nexport function resolveRuntimeBindingValue(\n binding: PropBinding,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): Promise<BindingValue | undefined> {\n return resolveRuntimeBindingExpression(binding.value, context, diagnostics);\n}\n\n/*** Resolves a property binding expression without executing a capability. */\nexport function resolveRuntimeBindingValueSync(\n binding: PropBinding,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): BindingValue | undefined {\n return resolveRuntimeBindingExpressionSync(binding.value, context, diagnostics);\n}\n\n/*** Resolves an invocation input map recursively. */\nexport function resolveBindingInputMap(\n input: BindingInputMap | undefined,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): Promise<BindingValue | undefined> {\n return input === undefined\n ? Promise.resolve(undefined)\n : resolveObjectAsync(input, context, diagnostics);\n}\n\n/*** Resolves an invocation input map without executing a capability. */\nexport function resolveBindingInputMapSync(\n input: BindingInputMap | undefined,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): BindingValue | undefined {\n return input === undefined ? undefined : resolveObjectSync(input, context, diagnostics);\n}\n\n/*** Invokes one capability and records its structured result under its declared local slot. */\nexport async function executeRuntimeBindingInvocation(\n invocation: BindingInvocation,\n context: RuntimeBindingResolutionContext,\n args: Pick<RuntimeCapabilityExecutionArgs, 'event' | 'node'> = {},\n diagnostics: DataSourceDiagnostic[] = [],\n): Promise<RuntimeCapabilityExecutionResult | undefined> {\n if (context.executeCapability === undefined) {\n diagnostics.push(createMissingCapabilityExecutorDiagnostic(invocation.capability));\n return undefined;\n }\n\n const input = await resolveBindingInputMap(invocation.input, context, diagnostics);\n const result = await context.executeCapability({\n capability: invocation.capability,\n input,\n ...args,\n });\n diagnostics.push(...(result.diagnostics ?? []));\n\n if (result.ok && invocation.result !== undefined) {\n context.writeResultSlot?.(invocation.result, result.data);\n }\n\n return result;\n}\n\n/*** Applies a dotted path to a serializable binding value. */\nexport function applyRuntimeBindingDataPath(\n value: BindingValue | undefined,\n path: string | undefined,\n): BindingValue | undefined {\n return path === undefined ? value : asBindingValue(readPath(value, path));\n}\n\nfunction isCapabilityReference(\n expression: BindingExpression,\n): expression is BindingCapabilityReference {\n return 'capability' in expression;\n}\n\nasync function resolveCapabilityReferenceAsync(\n reference: BindingCapabilityReference,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): Promise<BindingValue | undefined> {\n const cached = resolveCapabilityReferenceSync(reference, context, diagnostics, false);\n if (cached !== undefined || reference.result !== undefined) return cached;\n if (context.executeCapability === undefined) return cached;\n\n const result = await context.executeCapability({ capability: reference.capability });\n diagnostics.push(...(result.diagnostics ?? []));\n return result.ok ? applyRuntimeBindingDataPath(result.data, reference.path) : undefined;\n}\n\nfunction resolveCapabilityReferenceSync(\n reference: BindingCapabilityReference,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n reportMissing = true,\n): BindingValue | undefined {\n const value =\n reference.result === undefined\n ? resolveReadableCapability(reference.capability, context)\n : context.resultSlots?.[reference.result];\n if (value === undefined && reference.result !== undefined && reportMissing) {\n diagnostics.push({\n code: 'missing-adapter',\n message: `Result slot '${reference.result}' is not available.`,\n severity: 'error',\n });\n }\n return applyRuntimeBindingDataPath(value, reference.path);\n}\n\nfunction resolveReadableCapability(\n capability: string,\n context: RuntimeBindingResolutionContext,\n): BindingValue | undefined {\n const explicit = context.capabilityValues?.[capability];\n if (explicit !== undefined) return explicit;\n if (capability.startsWith('context.'))\n return asBindingValue(readPath(context.context, capability.slice(8)));\n if (context.event?.type === capability) return asBindingValue(context.event);\n if (capability.startsWith('state.')) {\n const result = context.stateAdapter?.get(capability.slice(6));\n return result?.ok ? asBindingValue(result.data) : undefined;\n }\n return asBindingValue(readPath(context.context, capability));\n}\n\nasync function resolveArrayAsync(\n items: readonly BindingExpression[],\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): Promise<BindingValue> {\n const values = await Promise.all(\n items.map((item) => resolveRuntimeBindingExpression(item, context, diagnostics)),\n );\n return values.filter((value): value is BindingValue => value !== undefined);\n}\n\nfunction resolveArraySync(\n items: readonly BindingExpression[],\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): BindingValue {\n return items\n .map((item) => resolveRuntimeBindingExpressionSync(item, context, diagnostics))\n .filter((value): value is BindingValue => value !== undefined);\n}\n\nasync function resolveObjectAsync(\n fields: Readonly<Record<string, BindingExpression>>,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): Promise<BindingValue> {\n const entries = await Promise.all(\n Object.entries(fields).map(async ([key, expression]) => {\n const value = await resolveRuntimeBindingExpression(expression, context, diagnostics);\n return value === undefined ? undefined : ([key, value] as const);\n }),\n );\n return Object.fromEntries(\n entries.filter((entry): entry is readonly [string, BindingValue] => entry !== undefined),\n );\n}\n\nfunction resolveObjectSync(\n fields: Readonly<Record<string, BindingExpression>>,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): BindingValue {\n const entries = Object.entries(fields).map(([key, expression]) => {\n const value = resolveRuntimeBindingExpressionSync(expression, context, diagnostics);\n return value === undefined ? undefined : ([key, value] as const);\n });\n return Object.fromEntries(\n entries.filter((entry): entry is readonly [string, BindingValue] => entry !== undefined),\n );\n}\n\nfunction applyBindingValueTransforms(\n value: BindingValue | undefined,\n transforms: readonly BindingValueTransform[],\n): BindingValue | undefined {\n return transforms.reduce((current, transform) => {\n if (transform === 'length')\n return typeof current === 'string' || Array.isArray(current) ? current.length : undefined;\n if (typeof current !== 'string') return undefined;\n if (transform === 'trim') return current.trim();\n if (transform === 'uppercase') return current.toUpperCase();\n return current.toLowerCase();\n }, value);\n}\n\nfunction createMissingCapabilityExecutorDiagnostic(capability: string): DataSourceDiagnostic {\n return {\n code: 'missing-adapter',\n message: `Capability '${capability}' requires an injected capability executor.`,\n severity: 'error',\n };\n}\n\nfunction readPath(value: unknown, path: string): unknown {\n if (path.length === 0) return value;\n return path.split('.').reduce<unknown>((current, part) => {\n if (Array.isArray(current))\n return /^(0|[1-9]\\\\d*)$/.test(part) ? current[Number(part)] : undefined;\n return isRecord(current) ? current[part] : undefined;\n }, value);\n}\n\nfunction asBindingValue(value: unknown): BindingValue | undefined {\n return isBindingValue(value) ? value : undefined;\n}\n\nfunction isBindingValue(value: unknown): value is BindingValue {\n if (value === null || ['boolean', 'number', 'string'].includes(typeof value)) return true;\n if (Array.isArray(value)) return value.every(isBindingValue);\n return isRecord(value) && Object.values(value).every(isBindingValue);\n}\n"]}
@@ -5,6 +5,6 @@ export interface RuntimeCapabilityExecutorComposition {
5
5
  readonly capabilityExecutor?: RuntimeCapabilityExecutor;
6
6
  readonly stateAdapter?: StateAdapter;
7
7
  }
8
- /*** Routes API and state capabilities before delegating application-owned capabilities. */
8
+ /*** Keeps local state mutations while preferring the configured host executor for API capabilities. */
9
9
  export declare function composeRuntimeCapabilityExecutor(composition: RuntimeCapabilityExecutorComposition): RuntimeCapabilityExecutor;
10
10
  //# sourceMappingURL=runtimeCapabilityExecutor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeCapabilityExecutor.d.ts","sourceRoot":"","sources":["../src/runtimeCapabilityExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAyB,MAAM,sBAAsB,CAAC;AAGhF,OAAO,KAAK,EAGV,yBAAyB,EAC1B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;IAC1D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IACxD,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;CACtC;AAED,2FAA2F;AAC3F,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,oCAAoC,GAChD,yBAAyB,CAO3B"}
1
+ {"version":3,"file":"runtimeCapabilityExecutor.d.ts","sourceRoot":"","sources":["../src/runtimeCapabilityExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAsC,MAAM,sBAAsB,CAAC;AAG7F,OAAO,KAAK,EAGV,yBAAyB,EAC1B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;IAC1D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IACxD,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;CACtC;AAED,uGAAuG;AACvG,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,oCAAoC,GAChD,yBAAyB,CAS3B"}