@ankhorage/runtime 5.2.6 → 5.3.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,11 @@
1
1
  # @ankhorage/runtime
2
2
 
3
+ ## 5.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - df0857c: Execute the portable `number` binding transform as a finite numeric value.
8
+
3
9
  ## 5.2.6
4
10
 
5
11
  ### 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.2.6](./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.3.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
 
@@ -161,6 +161,14 @@ function applyBindingValueTransforms(value, transforms) {
161
161
  return transforms.reduce((current, transform) => {
162
162
  if (transform === 'length')
163
163
  return typeof current === 'string' || Array.isArray(current) ? current.length : undefined;
164
+ if (transform === 'number') {
165
+ if (typeof current === 'number')
166
+ return Number.isFinite(current) ? current : undefined;
167
+ if (typeof current !== 'string' || current.trim().length === 0)
168
+ return undefined;
169
+ const numericValue = Number(current);
170
+ return Number.isFinite(numericValue) ? numericValue : undefined;
171
+ }
164
172
  if (typeof current !== 'string')
165
173
  return undefined;
166
174
  if (transform === 'trim')
@@ -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 | 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"]}
1
+ {"version":3,"file":"runtimeBindings.js","sourceRoot":"","sources":["../src/runtimeBindings.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AA6CrD,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,IAAkC;IAElC,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAEhC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7F,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,0BAA0B,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAChC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,sBAAsB,CACpC,IAAkC;IAElC,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAEhC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7F,KAAK,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAChC,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,UAA6B,EAC7B,OAAwC,EACxC,cAAsC,EAAE;IAExC,IAAI,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;QACtC,OAAO,+BAA+B,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC3D,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,iBAAiB,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAClG,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,kBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACrE,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,2BAA2B,CAChC,MAAM,+BAA+B,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,EAC7E,UAAU,CAAC,UAAU,CACtB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,+BAA+B,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC5F,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,+BAA+B,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;QAC5E,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,mCAAmC,CACjD,UAA6B,EAC7B,OAAwC,EACxC,cAAsC,EAAE;IAExC,IAAI,qBAAqB,CAAC,UAAU,CAAC;QACnC,OAAO,8BAA8B,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC1E,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC3D,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACjG,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,iBAAiB,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACpE,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,2BAA2B,CAChC,mCAAmC,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,EAC3E,UAAU,CAAC,UAAU,CACtB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,mCAAmC,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC1F,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,mCAAmC,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;QAChF,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,0BAA0B,CACxC,OAAoB,EACpB,OAAwC,EACxC,cAAsC,EAAE;IAExC,OAAO,+BAA+B,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAC9E,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,8BAA8B,CAC5C,OAAoB,EACpB,OAAwC,EACxC,cAAsC,EAAE;IAExC,OAAO,mCAAmC,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAClF,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,sBAAsB,CACpC,KAAkC,EAClC,OAAwC,EACxC,cAAsC,EAAE;IAExC,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;QAC5B,CAAC,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACtD,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,0BAA0B,CACxC,KAAkC,EAClC,OAAwC,EACxC,cAAsC,EAAE;IAExC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAC1F,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,UAA6B,EAC7B,OAAwC,EACxC,OAA+D,EAAE,EACjE,cAAsC,EAAE;IAExC,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC5C,WAAW,CAAC,IAAI,CAAC,yCAAyC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QACnF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC;QAC7C,UAAU,EAAE,UAAU,CAAC,UAAU;QACjC,KAAK;QACL,GAAG,IAAI;KACR,CAAC,CAAC;IACH,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;IAEhD,IAAI,MAAM,CAAC,EAAE,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjD,OAAO,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,2BAA2B,CACzC,KAA+B,EAC/B,IAAwB;IAExB,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,qBAAqB,CAC5B,UAA6B;IAE7B,OAAO,YAAY,IAAI,UAAU,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,+BAA+B,CAC5C,SAAqC,EACrC,OAAwC,EACxC,WAAmC;IAEnC,MAAM,MAAM,GAAG,8BAA8B,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IACtF,IAAI,MAAM,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAC1E,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAE3D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IACrF,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,2BAA2B,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1F,CAAC;AAED,SAAS,8BAA8B,CACrC,SAAqC,EACrC,OAAwC,EACxC,WAAmC,EACnC,aAAa,GAAG,IAAI;IAEpB,MAAM,KAAK,GACT,SAAS,CAAC,MAAM,KAAK,SAAS;QAC5B,CAAC,CAAC,yBAAyB,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;QAC1D,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,IAAI,aAAa,EAAE,CAAC;QAC3E,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,gBAAgB,SAAS,CAAC,MAAM,qBAAqB;YAC9D,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,2BAA2B,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,yBAAyB,CAChC,UAAkB,EAClB,OAAwC;IAExC,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC5C,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;QACnC,OAAO,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,KAAK,UAAU;QAAE,OAAO,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7E,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9D,CAAC;IACD,OAAO,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,KAAmC,EACnC,OAAwC,EACxC,WAAmC;IAEnC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,+BAA+B,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CACjF,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAyB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAmC,EACnC,OAAwC,EACxC,WAAmC;IAEnC,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mCAAmC,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;SAC9E,MAAM,CAAC,CAAC,KAAK,EAAyB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,MAAmD,EACnD,OAAwC,EACxC,WAAmC;IAEnC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,EAAE;QACrD,MAAM,KAAK,GAAG,MAAM,+BAA+B,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACtF,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,GAAG,EAAE,KAAK,CAAW,CAAC;IACnE,CAAC,CAAC,CACH,CAAC;IACF,OAAO,MAAM,CAAC,WAAW,CACvB,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAA4C,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CACzF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,MAAmD,EACnD,OAAwC,EACxC,WAAmC;IAEnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,EAAE;QAC/D,MAAM,KAAK,GAAG,mCAAmC,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACpF,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,GAAG,EAAE,KAAK,CAAW,CAAC;IACnE,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,WAAW,CACvB,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAA4C,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CACzF,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAClC,KAA+B,EAC/B,UAA4C;IAE5C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;QAC9C,IAAI,SAAS,KAAK,QAAQ;YACxB,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5F,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YACvF,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC;YACjF,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAClD,IAAI,SAAS,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,SAAS,KAAK,WAAW;YAAE,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;QAC5D,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC;AAED,SAAS,yCAAyC,CAAC,UAAkB;IACnE,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,eAAe,UAAU,6CAA6C;QAC/E,QAAQ,EAAE,OAAO;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc,EAAE,IAAY;IAC5C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAU,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;QACvD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACxB,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1F,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACvE,CAAC","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 (transform === 'number') {\n if (typeof current === 'number') return Number.isFinite(current) ? current : undefined;\n if (typeof current !== 'string' || current.trim().length === 0) return undefined;\n const numericValue = Number(current);\n return Number.isFinite(numericValue) ? numericValue : undefined;\n }\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankhorage/runtime",
3
- "version": "5.2.6",
3
+ "version": "5.3.0",
4
4
  "description": "Platform-neutral runtime renderer, contracts, and helpers for Ankhorage generated apps.",
5
5
  "license": "MIT",
6
6
  "engines": {
@@ -1,7 +1,7 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="90" height="20" role="img" aria-label="npm: v5.2.6">
2
- <title>npm: v5.2.6</title>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="90" height="20" role="img" aria-label="npm: v5.3.0">
2
+ <title>npm: v5.3.0</title>
3
3
  <rect width="38" height="20" fill="#374151"/>
4
4
  <rect x="38" width="52" height="20" fill="#cb3837"/>
5
5
  <text x="19" y="14" fill="#ffffff" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" font-size="11" text-anchor="middle">npm</text>
6
- <text x="64" y="14" fill="#ffffff" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" font-size="11" text-anchor="middle">v5.2.6</text>
6
+ <text x="64" y="14" fill="#ffffff" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" font-size="11" text-anchor="middle">v5.3.0</text>
7
7
  </svg>
@@ -90,6 +90,11 @@ graph TD
90
90
  package__ankhorage_runtime -.-> module_src_runtimeNodeProps_ts
91
91
  module_src_runtimeNodeProps_ts --> module_src_runtimeBindings_ts
92
92
  module_src_runtimeNodeProps_ts --> module_src_RuntimeRendererConfig_tsx
93
+ module_src_runtimeNumberBindings_test_ts["src/runtimeNumberBindings.test.ts"]
94
+ package__ankhorage_runtime -.-> module_src_runtimeNumberBindings_test_ts
95
+ module_src_runtimeNumberBindings_test_ts --> module_src_runtimeActionRegistry_ts
96
+ module_src_runtimeNumberBindings_test_ts --> module_src_runtimeCapabilityExecutor_ts
97
+ module_src_runtimeNumberBindings_test_ts --> module_src_runtimeStateAdapter_ts
93
98
  module_src_runtimePackageIsolation_test_ts["src/runtimePackageIsolation.test.ts"]
94
99
  package__ankhorage_runtime -.-> module_src_runtimePackageIsolation_test_ts
95
100
  module_src_RuntimeRenderer_test_ts["src/RuntimeRenderer.test.ts"]
@@ -28,6 +28,7 @@ graph LR
28
28
  module_src_runtimeMediaCache_tsx["src/runtimeMediaCache.tsx"]
29
29
  module_src_runtimeMediaConfig_test_ts["src/runtimeMediaConfig.test.ts"]
30
30
  module_src_runtimeNodeProps_ts["src/runtimeNodeProps.ts"]
31
+ module_src_runtimeNumberBindings_test_ts["src/runtimeNumberBindings.test.ts"]
31
32
  module_src_runtimePackageIsolation_test_ts["src/runtimePackageIsolation.test.ts"]
32
33
  module_src_RuntimeRenderer_test_ts["src/RuntimeRenderer.test.ts"]
33
34
  module_src_RuntimeRenderer_tsx["src/RuntimeRenderer.tsx"]
@@ -28,6 +28,7 @@ graph LR
28
28
  module_src_runtimeMediaCache_tsx["src/runtimeMediaCache.tsx"]
29
29
  module_src_runtimeMediaConfig_test_ts["src/runtimeMediaConfig.test.ts"]
30
30
  module_src_runtimeNodeProps_ts["src/runtimeNodeProps.ts"]
31
+ module_src_runtimeNumberBindings_test_ts["src/runtimeNumberBindings.test.ts"]
31
32
  module_src_runtimePackageIsolation_test_ts["src/runtimePackageIsolation.test.ts"]
32
33
  module_src_RuntimeRenderer_test_ts["src/RuntimeRenderer.test.ts"]
33
34
  module_src_RuntimeRenderer_tsx["src/RuntimeRenderer.tsx"]
@@ -78,6 +79,9 @@ graph LR
78
79
  module_src_runtimeMediaConfig_test_ts --> module_src_RuntimeRendererConfig_tsx
79
80
  module_src_runtimeNodeProps_ts --> module_src_runtimeBindings_ts
80
81
  module_src_runtimeNodeProps_ts --> module_src_RuntimeRendererConfig_tsx
82
+ module_src_runtimeNumberBindings_test_ts --> module_src_runtimeActionRegistry_ts
83
+ module_src_runtimeNumberBindings_test_ts --> module_src_runtimeCapabilityExecutor_ts
84
+ module_src_runtimeNumberBindings_test_ts --> module_src_runtimeStateAdapter_ts
81
85
  module_src_RuntimeRenderer_test_ts --> module_src_runtimeRepeatEmptyState_ts
82
86
  module_src_RuntimeRenderer_tsx --> module_src_registry_tsx
83
87
  module_src_RuntimeRenderer_tsx --> module_src_rendering_ts
@@ -174,7 +174,7 @@
174
174
  </li><li>
175
175
  <button class="nav-button" type="button" data-target="src/runtimeBindings.contracts26.test.ts">
176
176
  src/runtimeBindings.contracts26.test.ts
177
- <small>4 functions</small>
177
+ <small>5 functions</small>
178
178
  </button>
179
179
  </li><li>
180
180
  <button class="nav-button" type="button" data-target="src/runtimeBindings.ts">
@@ -308,7 +308,7 @@
308
308
  <div class="summary">
309
309
  <div><strong>88</strong><span class="muted">public exports</span></div>
310
310
  <div><strong>5</strong><span class="muted">components</span></div>
311
- <div><strong>48</strong><span class="muted">modules</span></div>
311
+ <div><strong>49</strong><span class="muted">modules</span></div>
312
312
  <div><strong>1</strong><span class="muted">entrypoints</span></div>
313
313
  </div>
314
314
  <h3>Entrypoints</h3>
@@ -544,6 +544,11 @@ inject it at the runtime boundary.</p>
544
544
  <p class="muted">Referenced module</p>
545
545
  <p><strong>Dependencies:</strong> <code>src/runtimeBindings.ts</code>, <code>src/RuntimeRendererConfig.tsx</code></p>
546
546
  <p><strong>Exports:</strong> <code>resolveRuntimeNodeProps</code></p>
547
+ </article><article class="item" data-search="src/runtimeNumberBindings.test.ts src/runtimeActionRegistry.ts src/runtimeCapabilityExecutor.ts src/runtimeStateAdapter.ts">
548
+ <h3>src/runtimeNumberBindings.test.ts</h3>
549
+ <p class="muted">Referenced module</p>
550
+ <p><strong>Dependencies:</strong> <code>src/runtimeActionRegistry.ts</code>, <code>src/runtimeCapabilityExecutor.ts</code>, <code>src/runtimeStateAdapter.ts</code></p>
551
+ <p><strong>Exports:</strong> <span class="empty">None</span></p>
547
552
  </article><article class="item" data-search="src/runtimePackageIsolation.test.ts">
548
553
  <h3>src/runtimePackageIsolation.test.ts</h3>
549
554
  <p class="muted">Referenced module</p>
@@ -3658,6 +3663,11 @@ inject it at the runtime boundary.</p>
3658
3663
  package__ankhorage_runtime -.-&gt; module_src_runtimeNodeProps_ts
3659
3664
  module_src_runtimeNodeProps_ts --&gt; module_src_runtimeBindings_ts
3660
3665
  module_src_runtimeNodeProps_ts --&gt; module_src_RuntimeRendererConfig_tsx
3666
+ module_src_runtimeNumberBindings_test_ts[&quot;src/runtimeNumberBindings.test.ts&quot;]
3667
+ package__ankhorage_runtime -.-&gt; module_src_runtimeNumberBindings_test_ts
3668
+ module_src_runtimeNumberBindings_test_ts --&gt; module_src_runtimeActionRegistry_ts
3669
+ module_src_runtimeNumberBindings_test_ts --&gt; module_src_runtimeCapabilityExecutor_ts
3670
+ module_src_runtimeNumberBindings_test_ts --&gt; module_src_runtimeStateAdapter_ts
3661
3671
  module_src_runtimePackageIsolation_test_ts[&quot;src/runtimePackageIsolation.test.ts&quot;]
3662
3672
  package__ankhorage_runtime -.-&gt; module_src_runtimePackageIsolation_test_ts
3663
3673
  module_src_RuntimeRenderer_test_ts[&quot;src/RuntimeRenderer.test.ts&quot;]
@@ -3835,6 +3845,11 @@ inject it at the runtime boundary.</p>
3835
3845
  package__ankhorage_runtime -.-&gt; module_src_runtimeNodeProps_ts
3836
3846
  module_src_runtimeNodeProps_ts --&gt; module_src_runtimeBindings_ts
3837
3847
  module_src_runtimeNodeProps_ts --&gt; module_src_RuntimeRendererConfig_tsx
3848
+ module_src_runtimeNumberBindings_test_ts[&quot;src/runtimeNumberBindings.test.ts&quot;]
3849
+ package__ankhorage_runtime -.-&gt; module_src_runtimeNumberBindings_test_ts
3850
+ module_src_runtimeNumberBindings_test_ts --&gt; module_src_runtimeActionRegistry_ts
3851
+ module_src_runtimeNumberBindings_test_ts --&gt; module_src_runtimeCapabilityExecutor_ts
3852
+ module_src_runtimeNumberBindings_test_ts --&gt; module_src_runtimeStateAdapter_ts
3838
3853
  module_src_runtimePackageIsolation_test_ts[&quot;src/runtimePackageIsolation.test.ts&quot;]
3839
3854
  package__ankhorage_runtime -.-&gt; module_src_runtimePackageIsolation_test_ts
3840
3855
  module_src_RuntimeRenderer_test_ts[&quot;src/RuntimeRenderer.test.ts&quot;]
@@ -3952,6 +3967,7 @@ inject it at the runtime boundary.</p>
3952
3967
  module_src_runtimeMediaCache_tsx[&quot;src/runtimeMediaCache.tsx&quot;]
3953
3968
  module_src_runtimeMediaConfig_test_ts[&quot;src/runtimeMediaConfig.test.ts&quot;]
3954
3969
  module_src_runtimeNodeProps_ts[&quot;src/runtimeNodeProps.ts&quot;]
3970
+ module_src_runtimeNumberBindings_test_ts[&quot;src/runtimeNumberBindings.test.ts&quot;]
3955
3971
  module_src_runtimePackageIsolation_test_ts[&quot;src/runtimePackageIsolation.test.ts&quot;]
3956
3972
  module_src_RuntimeRenderer_test_ts[&quot;src/RuntimeRenderer.test.ts&quot;]
3957
3973
  module_src_RuntimeRenderer_tsx[&quot;src/RuntimeRenderer.tsx&quot;]
@@ -4002,6 +4018,9 @@ inject it at the runtime boundary.</p>
4002
4018
  module_src_runtimeMediaConfig_test_ts --&gt; module_src_RuntimeRendererConfig_tsx
4003
4019
  module_src_runtimeNodeProps_ts --&gt; module_src_runtimeBindings_ts
4004
4020
  module_src_runtimeNodeProps_ts --&gt; module_src_RuntimeRendererConfig_tsx
4021
+ module_src_runtimeNumberBindings_test_ts --&gt; module_src_runtimeActionRegistry_ts
4022
+ module_src_runtimeNumberBindings_test_ts --&gt; module_src_runtimeCapabilityExecutor_ts
4023
+ module_src_runtimeNumberBindings_test_ts --&gt; module_src_runtimeStateAdapter_ts
4005
4024
  module_src_RuntimeRenderer_test_ts --&gt; module_src_runtimeRepeatEmptyState_ts
4006
4025
  module_src_RuntimeRenderer_tsx --&gt; module_src_registry_tsx
4007
4026
  module_src_RuntimeRenderer_tsx --&gt; module_src_rendering_ts
@@ -4079,6 +4098,7 @@ inject it at the runtime boundary.</p>
4079
4098
  module_src_runtimeMediaCache_tsx[&quot;src/runtimeMediaCache.tsx&quot;]
4080
4099
  module_src_runtimeMediaConfig_test_ts[&quot;src/runtimeMediaConfig.test.ts&quot;]
4081
4100
  module_src_runtimeNodeProps_ts[&quot;src/runtimeNodeProps.ts&quot;]
4101
+ module_src_runtimeNumberBindings_test_ts[&quot;src/runtimeNumberBindings.test.ts&quot;]
4082
4102
  module_src_runtimePackageIsolation_test_ts[&quot;src/runtimePackageIsolation.test.ts&quot;]
4083
4103
  module_src_RuntimeRenderer_test_ts[&quot;src/RuntimeRenderer.test.ts&quot;]
4084
4104
  module_src_RuntimeRenderer_tsx[&quot;src/RuntimeRenderer.tsx&quot;]
@@ -4129,6 +4149,9 @@ inject it at the runtime boundary.</p>
4129
4149
  module_src_runtimeMediaConfig_test_ts --&gt; module_src_RuntimeRendererConfig_tsx
4130
4150
  module_src_runtimeNodeProps_ts --&gt; module_src_runtimeBindings_ts
4131
4151
  module_src_runtimeNodeProps_ts --&gt; module_src_RuntimeRendererConfig_tsx
4152
+ module_src_runtimeNumberBindings_test_ts --&gt; module_src_runtimeActionRegistry_ts
4153
+ module_src_runtimeNumberBindings_test_ts --&gt; module_src_runtimeCapabilityExecutor_ts
4154
+ module_src_runtimeNumberBindings_test_ts --&gt; module_src_runtimeStateAdapter_ts
4132
4155
  module_src_RuntimeRenderer_test_ts --&gt; module_src_runtimeRepeatEmptyState_ts
4133
4156
  module_src_RuntimeRenderer_tsx --&gt; module_src_registry_tsx
4134
4157
  module_src_RuntimeRenderer_tsx --&gt; module_src_rendering_ts
@@ -4208,6 +4231,7 @@ inject it at the runtime boundary.</p>
4208
4231
  module_src_runtimeMediaCache_tsx[&quot;src/runtimeMediaCache.tsx&quot;]
4209
4232
  module_src_runtimeMediaConfig_test_ts[&quot;src/runtimeMediaConfig.test.ts&quot;]
4210
4233
  module_src_runtimeNodeProps_ts[&quot;src/runtimeNodeProps.ts&quot;]
4234
+ module_src_runtimeNumberBindings_test_ts[&quot;src/runtimeNumberBindings.test.ts&quot;]
4211
4235
  module_src_runtimePackageIsolation_test_ts[&quot;src/runtimePackageIsolation.test.ts&quot;]
4212
4236
  module_src_RuntimeRenderer_test_ts[&quot;src/RuntimeRenderer.test.ts&quot;]
4213
4237
  module_src_RuntimeRenderer_tsx[&quot;src/RuntimeRenderer.tsx&quot;]
@@ -4515,6 +4539,7 @@ inject it at the runtime boundary.</p>
4515
4539
  module_src_runtimeMediaCache_tsx[&quot;src/runtimeMediaCache.tsx&quot;]
4516
4540
  module_src_runtimeMediaConfig_test_ts[&quot;src/runtimeMediaConfig.test.ts&quot;]
4517
4541
  module_src_runtimeNodeProps_ts[&quot;src/runtimeNodeProps.ts&quot;]
4542
+ module_src_runtimeNumberBindings_test_ts[&quot;src/runtimeNumberBindings.test.ts&quot;]
4518
4543
  module_src_runtimePackageIsolation_test_ts[&quot;src/runtimePackageIsolation.test.ts&quot;]
4519
4544
  module_src_RuntimeRenderer_test_ts[&quot;src/RuntimeRenderer.test.ts&quot;]
4520
4545
  module_src_RuntimeRenderer_tsx[&quot;src/RuntimeRenderer.tsx&quot;]
@@ -5500,24 +5525,29 @@ inject it at the runtime boundary.</p>
5500
5525
  </section><section id="view-src-runtimebindings-contracts26-test-ts" class="view" data-view="src/runtimeBindings.contracts26.test.ts" hidden>
5501
5526
  <section class="panel">
5502
5527
  <h2>src/runtimeBindings.contracts26.test.ts</h2>
5503
- <article class="item" data-search="resolveEventValue src/runtimeBindings.contracts26.test.ts ">
5528
+ <article class="item" data-search="resolveNumberTransform src/runtimeBindings.contracts26.test.ts ">
5529
+ <h3>resolveNumberTransform</h3>
5530
+ <p class="muted"><code>src/runtimeBindings.contracts26.test.ts:21:1</code></p>
5531
+ <p class="empty">No description available.</p>
5532
+
5533
+ </article><article class="item" data-search="resolveEventValue src/runtimeBindings.contracts26.test.ts ">
5504
5534
  <h3>resolveEventValue</h3>
5505
- <p class="muted"><code>src/runtimeBindings.contracts26.test.ts:85:9</code></p>
5535
+ <p class="muted"><code>src/runtimeBindings.contracts26.test.ts:107:9</code></p>
5506
5536
  <p class="empty">No description available.</p>
5507
5537
 
5508
5538
  </article><article class="item" data-search="executeCapability src/runtimeBindings.contracts26.test.ts ">
5509
5539
  <h3>executeCapability</h3>
5510
- <p class="muted"><code>src/runtimeBindings.contracts26.test.ts:133:9</code></p>
5540
+ <p class="muted"><code>src/runtimeBindings.contracts26.test.ts:155:9</code></p>
5511
5541
  <p class="empty">No description available.</p>
5512
5542
 
5513
5543
  </article><article class="item" data-search="executeCapability src/runtimeBindings.contracts26.test.ts ">
5514
5544
  <h3>executeCapability</h3>
5515
- <p class="muted"><code>src/runtimeBindings.contracts26.test.ts:160:9</code></p>
5545
+ <p class="muted"><code>src/runtimeBindings.contracts26.test.ts:182:9</code></p>
5516
5546
  <p class="empty">No description available.</p>
5517
5547
 
5518
5548
  </article><article class="item" data-search="executeCapability src/runtimeBindings.contracts26.test.ts ">
5519
5549
  <h3>executeCapability</h3>
5520
- <p class="muted"><code>src/runtimeBindings.contracts26.test.ts:180:9</code></p>
5550
+ <p class="muted"><code>src/runtimeBindings.contracts26.test.ts:202:9</code></p>
5521
5551
  <p class="empty">No description available.</p>
5522
5552
 
5523
5553
  </article>
@@ -5622,22 +5652,22 @@ inject it at the runtime boundary.</p>
5622
5652
 
5623
5653
  </article><article class="item" data-search="createMissingCapabilityExecutorDiagnostic src/runtimeBindings.ts ">
5624
5654
  <h3>createMissingCapabilityExecutorDiagnostic</h3>
5625
- <p class="muted"><code>src/runtimeBindings.ts:334:1</code></p>
5655
+ <p class="muted"><code>src/runtimeBindings.ts:340:1</code></p>
5626
5656
  <p class="empty">No description available.</p>
5627
5657
 
5628
5658
  </article><article class="item" data-search="readPath src/runtimeBindings.ts ">
5629
5659
  <h3>readPath</h3>
5630
- <p class="muted"><code>src/runtimeBindings.ts:342:1</code></p>
5660
+ <p class="muted"><code>src/runtimeBindings.ts:348:1</code></p>
5631
5661
  <p class="empty">No description available.</p>
5632
5662
 
5633
5663
  </article><article class="item" data-search="asBindingValue src/runtimeBindings.ts ">
5634
5664
  <h3>asBindingValue</h3>
5635
- <p class="muted"><code>src/runtimeBindings.ts:351:1</code></p>
5665
+ <p class="muted"><code>src/runtimeBindings.ts:357:1</code></p>
5636
5666
  <p class="empty">No description available.</p>
5637
5667
 
5638
5668
  </article><article class="item" data-search="isBindingValue src/runtimeBindings.ts ">
5639
5669
  <h3>isBindingValue</h3>
5640
- <p class="muted"><code>src/runtimeBindings.ts:355:1</code></p>
5670
+ <p class="muted"><code>src/runtimeBindings.ts:361:1</code></p>
5641
5671
  <p class="empty">No description available.</p>
5642
5672
 
5643
5673
  </article>
@@ -14,7 +14,7 @@
14
14
  {
15
15
  "id": "npm",
16
16
  "label": "npm",
17
- "value": "v5.2.6",
17
+ "value": "v5.3.0",
18
18
  "color": "cb3837"
19
19
  },
20
20
  {
@@ -620,6 +620,16 @@
620
620
  "resolveRuntimeNodeProps"
621
621
  ]
622
622
  },
623
+ {
624
+ "path": "src/runtimeNumberBindings.test.ts",
625
+ "isEntrypoint": false,
626
+ "dependencies": [
627
+ "src/runtimeActionRegistry.ts",
628
+ "src/runtimeCapabilityExecutor.ts",
629
+ "src/runtimeStateAdapter.ts"
630
+ ],
631
+ "exports": []
632
+ },
623
633
  {
624
634
  "path": "src/runtimePackageIsolation.test.ts",
625
635
  "isEntrypoint": false,
@@ -5379,6 +5389,17 @@
5379
5389
  "column": 1
5380
5390
  }
5381
5391
  },
5392
+ {
5393
+ "name": "resolveNumberTransform",
5394
+ "description": null,
5395
+ "see": [],
5396
+ "security": [],
5397
+ "sourceLocation": {
5398
+ "filePath": "src/runtimeBindings.contracts26.test.ts",
5399
+ "line": 21,
5400
+ "column": 1
5401
+ }
5402
+ },
5382
5403
  {
5383
5404
  "name": "resolveEventValue",
5384
5405
  "description": null,
@@ -5386,7 +5407,7 @@
5386
5407
  "security": [],
5387
5408
  "sourceLocation": {
5388
5409
  "filePath": "src/runtimeBindings.contracts26.test.ts",
5389
- "line": 85,
5410
+ "line": 107,
5390
5411
  "column": 9
5391
5412
  }
5392
5413
  },
@@ -5397,7 +5418,7 @@
5397
5418
  "security": [],
5398
5419
  "sourceLocation": {
5399
5420
  "filePath": "src/runtimeBindings.contracts26.test.ts",
5400
- "line": 133,
5421
+ "line": 155,
5401
5422
  "column": 9
5402
5423
  }
5403
5424
  },
@@ -5408,7 +5429,7 @@
5408
5429
  "security": [],
5409
5430
  "sourceLocation": {
5410
5431
  "filePath": "src/runtimeBindings.contracts26.test.ts",
5411
- "line": 160,
5432
+ "line": 182,
5412
5433
  "column": 9
5413
5434
  }
5414
5435
  },
@@ -5419,7 +5440,7 @@
5419
5440
  "security": [],
5420
5441
  "sourceLocation": {
5421
5442
  "filePath": "src/runtimeBindings.contracts26.test.ts",
5422
- "line": 180,
5443
+ "line": 202,
5423
5444
  "column": 9
5424
5445
  }
5425
5446
  },
@@ -5639,7 +5660,7 @@
5639
5660
  "security": [],
5640
5661
  "sourceLocation": {
5641
5662
  "filePath": "src/runtimeBindings.ts",
5642
- "line": 334,
5663
+ "line": 340,
5643
5664
  "column": 1
5644
5665
  }
5645
5666
  },
@@ -5650,7 +5671,7 @@
5650
5671
  "security": [],
5651
5672
  "sourceLocation": {
5652
5673
  "filePath": "src/runtimeBindings.ts",
5653
- "line": 342,
5674
+ "line": 348,
5654
5675
  "column": 1
5655
5676
  }
5656
5677
  },
@@ -5661,7 +5682,7 @@
5661
5682
  "security": [],
5662
5683
  "sourceLocation": {
5663
5684
  "filePath": "src/runtimeBindings.ts",
5664
- "line": 351,
5685
+ "line": 357,
5665
5686
  "column": 1
5666
5687
  }
5667
5688
  },
@@ -5672,7 +5693,7 @@
5672
5693
  "security": [],
5673
5694
  "sourceLocation": {
5674
5695
  "filePath": "src/runtimeBindings.ts",
5675
- "line": 355,
5696
+ "line": 361,
5676
5697
  "column": 1
5677
5698
  }
5678
5699
  },
@@ -7326,6 +7347,21 @@
7326
7347
  "toPath": "src/RuntimeRendererConfig.tsx",
7327
7348
  "sourcePath": "src/runtimeNodeProps.ts"
7328
7349
  },
7350
+ {
7351
+ "fromPath": "src/runtimeNumberBindings.test.ts",
7352
+ "toPath": "src/runtimeActionRegistry.ts",
7353
+ "sourcePath": "src/runtimeNumberBindings.test.ts"
7354
+ },
7355
+ {
7356
+ "fromPath": "src/runtimeNumberBindings.test.ts",
7357
+ "toPath": "src/runtimeCapabilityExecutor.ts",
7358
+ "sourcePath": "src/runtimeNumberBindings.test.ts"
7359
+ },
7360
+ {
7361
+ "fromPath": "src/runtimeNumberBindings.test.ts",
7362
+ "toPath": "src/runtimeStateAdapter.ts",
7363
+ "sourcePath": "src/runtimeNumberBindings.test.ts"
7364
+ },
7329
7365
  {
7330
7366
  "fromPath": "src/RuntimeRenderer.test.ts",
7331
7367
  "toPath": "src/runtimeRepeatEmptyState.ts",
@@ -7888,6 +7924,12 @@
7888
7924
  "callExpression": "isRecord",
7889
7925
  "sourcePath": "src/runtimeApiCapabilities.ts"
7890
7926
  },
7927
+ {
7928
+ "fromSymbol": "resolveNumberTransform",
7929
+ "toSymbol": "resolveRuntimeBindingExpressionSync",
7930
+ "callExpression": "resolveRuntimeBindingExpressionSync",
7931
+ "sourcePath": "src/runtimeBindings.contracts26.test.ts"
7932
+ },
7891
7933
  {
7892
7934
  "fromSymbol": "src/runtimeBindings.contracts26.test.ts",
7893
7935
  "toSymbol": "it",
@@ -7912,6 +7954,12 @@
7912
7954
  "callExpression": "resolveRuntimeBindingExpressionSync",
7913
7955
  "sourcePath": "src/runtimeBindings.contracts26.test.ts"
7914
7956
  },
7957
+ {
7958
+ "fromSymbol": "src/runtimeBindings.contracts26.test.ts",
7959
+ "toSymbol": "resolveNumberTransform",
7960
+ "callExpression": "resolveNumberTransform",
7961
+ "sourcePath": "src/runtimeBindings.contracts26.test.ts"
7962
+ },
7915
7963
  {
7916
7964
  "fromSymbol": "resolveEventValue",
7917
7965
  "toSymbol": "resolveRuntimeBindingExpressionSync",
@@ -8620,6 +8668,36 @@
8620
8668
  "callExpression": "args.resolveNodeProps",
8621
8669
  "sourcePath": "src/runtimeNodeProps.ts"
8622
8670
  },
8671
+ {
8672
+ "fromSymbol": "src/runtimeNumberBindings.test.ts",
8673
+ "toSymbol": "it",
8674
+ "callExpression": "it",
8675
+ "sourcePath": "src/runtimeNumberBindings.test.ts"
8676
+ },
8677
+ {
8678
+ "fromSymbol": "src/runtimeNumberBindings.test.ts",
8679
+ "toSymbol": "createRuntimeMemoryStateAdapter",
8680
+ "callExpression": "createRuntimeMemoryStateAdapter",
8681
+ "sourcePath": "src/runtimeNumberBindings.test.ts"
8682
+ },
8683
+ {
8684
+ "fromSymbol": "src/runtimeNumberBindings.test.ts",
8685
+ "toSymbol": "composeRuntimeCapabilityExecutor",
8686
+ "callExpression": "composeRuntimeCapabilityExecutor",
8687
+ "sourcePath": "src/runtimeNumberBindings.test.ts"
8688
+ },
8689
+ {
8690
+ "fromSymbol": "src/runtimeNumberBindings.test.ts",
8691
+ "toSymbol": "dispatchRuntimeComponentEvent",
8692
+ "callExpression": "dispatchRuntimeComponentEvent",
8693
+ "sourcePath": "src/runtimeNumberBindings.test.ts"
8694
+ },
8695
+ {
8696
+ "fromSymbol": "src/runtimeNumberBindings.test.ts",
8697
+ "toSymbol": "expect",
8698
+ "callExpression": "expect",
8699
+ "sourcePath": "src/runtimeNumberBindings.test.ts"
8700
+ },
8623
8701
  {
8624
8702
  "fromSymbol": "listSourceFiles",
8625
8703
  "toSymbol": "readdirSync",