@kaskad/eval-tree 0.0.9 → 0.0.10

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.
@@ -13,12 +13,12 @@ function evaluateArray(evalNode, context) {
13
13
  const disposers = itemResults.flatMap((result) => result.disposers);
14
14
  return {
15
15
  computed: computed(() => {
16
- const evaluating = itemComputeds.some((ro) => ro.get().evaluating);
17
- const failed = itemComputeds.some((ro) => ro.get().failed);
18
- return itemComputeds.reduce((acc, ro) => {
19
- acc.value.push(ro.get().value);
20
- return acc;
21
- }, { value: [], evaluating, hasResult: !evaluating, failed, error: null });
16
+ const states = itemComputeds.map((ro) => ro.get());
17
+ const evaluating = states.some((s) => s.evaluating);
18
+ const failed = states.some((s) => s.failed);
19
+ const error = states.find((s) => s.error != null)?.error ?? null;
20
+ const value = states.map((s) => s.value);
21
+ return { value, evaluating, hasResult: !evaluating, failed, error };
22
22
  }, {
23
23
  name: debugName(context, 'array-literal'),
24
24
  }),
@@ -26,6 +26,19 @@ function evaluateArray(evalNode, context) {
26
26
  };
27
27
  }
28
28
 
29
+ function evaluateError(node) {
30
+ return {
31
+ computed: computed(() => ({
32
+ value: null,
33
+ evaluating: false,
34
+ hasResult: true,
35
+ failed: true,
36
+ error: node.error,
37
+ })),
38
+ disposers: [],
39
+ };
40
+ }
41
+
29
42
  /**
30
43
  * Parses a function signature string into structured parameter and return types.
31
44
  *
@@ -306,84 +319,52 @@ function toObservable(result) {
306
319
  function wrapImperativeAsReactive(imperativeDef) {
307
320
  const { params } = parseSignature(imperativeDef.signature);
308
321
  const argsTypes = params.map((p) => ({ valueType: p }));
322
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
323
+ const createComputed = (computedArgs, invoke) => {
324
+ return computed(() => {
325
+ const { values, allEvaluated, anyEvaluating, anyFailed } = evaluateArguments({
326
+ computedArgs,
327
+ argsTypes,
328
+ });
329
+ if (!allEvaluated || anyFailed) {
330
+ return {
331
+ returnValue: null,
332
+ argsEvaluated: false,
333
+ argsEvaluating: anyEvaluating,
334
+ argsFailed: anyFailed,
335
+ };
336
+ }
337
+ try {
338
+ const result = invoke(...values);
339
+ return {
340
+ returnValue: toObservable(result),
341
+ argsEvaluated: true,
342
+ argsEvaluating: anyEvaluating,
343
+ argsFailed: anyFailed,
344
+ };
345
+ }
346
+ catch (error) {
347
+ return {
348
+ returnValue: { kind: 'promise', current: null, error, pending: false },
349
+ argsEvaluated: true,
350
+ argsEvaluating: anyEvaluating,
351
+ argsFailed: anyFailed,
352
+ };
353
+ }
354
+ });
355
+ };
309
356
  if (imperativeDef.contextual) {
310
- // Contextual imperative -> contextual reactive
311
357
  return {
312
358
  kind: 'reactive',
313
359
  contextual: true,
314
- execute: (ctx, computedArgs) => {
315
- return computed(() => {
316
- const { values, allEvaluated, anyEvaluating, anyFailed } = evaluateArguments({
317
- computedArgs,
318
- argsTypes,
319
- });
320
- if (!allEvaluated || anyFailed) {
321
- return {
322
- returnValue: null,
323
- argsEvaluated: false,
324
- argsEvaluating: anyEvaluating,
325
- argsFailed: anyFailed,
326
- };
327
- }
328
- try {
329
- const result = imperativeDef.execute(ctx, ...values);
330
- return {
331
- returnValue: toObservable(result),
332
- argsEvaluated: true,
333
- argsEvaluating: anyEvaluating,
334
- argsFailed: anyFailed,
335
- };
336
- }
337
- catch (error) {
338
- return {
339
- returnValue: toObservable(Promise.reject(error)),
340
- argsEvaluated: true,
341
- argsEvaluating: anyEvaluating,
342
- argsFailed: anyFailed,
343
- };
344
- }
345
- });
346
- },
360
+ execute: (ctx, computedArgs) => createComputed(computedArgs, (...values) => imperativeDef.execute(ctx, ...values)),
347
361
  signature: imperativeDef.signature,
348
362
  };
349
363
  }
350
364
  else {
351
- // Pure imperative -> pure reactive
352
365
  return {
353
366
  kind: 'reactive',
354
- execute: (computedArgs) => {
355
- return computed(() => {
356
- const { values, allEvaluated, anyEvaluating, anyFailed } = evaluateArguments({
357
- computedArgs,
358
- argsTypes,
359
- });
360
- if (!allEvaluated || anyFailed) {
361
- return {
362
- returnValue: null,
363
- argsEvaluated: false,
364
- argsEvaluating: anyEvaluating,
365
- argsFailed: anyFailed,
366
- };
367
- }
368
- try {
369
- const result = imperativeDef.execute(...values);
370
- return {
371
- returnValue: toObservable(result),
372
- argsEvaluated: true,
373
- argsEvaluating: anyEvaluating,
374
- argsFailed: anyFailed,
375
- };
376
- }
377
- catch (error) {
378
- return {
379
- returnValue: toObservable(Promise.reject(error)),
380
- argsEvaluated: true,
381
- argsEvaluating: anyEvaluating,
382
- argsFailed: anyFailed,
383
- };
384
- }
385
- });
386
- },
367
+ execute: (computedArgs) => createComputed(computedArgs, imperativeDef.execute),
387
368
  signature: imperativeDef.signature,
388
369
  };
389
370
  }
@@ -698,14 +679,12 @@ function evaluateObject(evalNode, context) {
698
679
  ]);
699
680
  return {
700
681
  computed: computed(() => {
701
- const evaluating = entriesComputeds.some(([keyComputed, valueComputed]) => keyComputed.get().evaluating || valueComputed.get().evaluating);
702
- const failed = entriesComputeds.some(([keyComputed, valueComputed]) => keyComputed.get().failed || valueComputed.get().failed);
703
- const entries = entriesComputeds.map(([keyComputed, valueComputed]) => [
704
- keyComputed.get().value,
705
- valueComputed.get().value,
706
- ]);
707
- const value = Object.fromEntries(entries);
708
- return { value, evaluating, hasResult: !evaluating, failed, error: null };
682
+ const states = entriesComputeds.map(([keyComputed, valueComputed]) => [keyComputed.get(), valueComputed.get()]);
683
+ const evaluating = states.some(([k, v]) => k.evaluating || v.evaluating);
684
+ const failed = states.some(([k, v]) => k.failed || v.failed);
685
+ const error = states.flatMap(([k, v]) => [k, v]).find((s) => s.error != null)?.error ?? null;
686
+ const value = Object.fromEntries(states.map(([k, v]) => [k.value, v.value]));
687
+ return { value, evaluating, hasResult: !evaluating, failed, error };
709
688
  }, {
710
689
  equals: comparer.structural,
711
690
  name: debugName(context, 'object-literal'),
@@ -732,6 +711,7 @@ const delegates = {
732
711
  value: (evalNode) => evaluateValue(evalNode),
733
712
  array: (evalNode, context) => evaluateArray(evalNode, context),
734
713
  object: (evalNode, context) => evaluateObject(evalNode, context),
714
+ error: (evalNode) => evaluateError(evalNode),
735
715
  };
736
716
  function evaluateNode(evalNode, context) {
737
717
  const delegate = delegates[evalNode.type];
@@ -1 +1 @@
1
- {"version":3,"file":"kaskad-eval-tree.mjs","sources":["../../../../libs/eval-tree/src/lib/constants.ts","../../../../libs/eval-tree/src/lib/evaluate-array.ts","../../../../libs/eval-tree/src/lib/parse-signature.ts","../../../../libs/eval-tree/src/lib/evaluate-function/normalize-value.ts","../../../../libs/eval-tree/src/lib/evaluate-function/evaluate-arguments.ts","../../../../libs/eval-tree/src/lib/evaluate-function/to-observable.ts","../../../../libs/eval-tree/src/lib/evaluate-function/wrap-imperative-function.ts","../../../../libs/eval-tree/src/lib/evaluate-function/ensure-reactive.ts","../../../../libs/eval-tree/src/lib/validate-function-signature.ts","../../../../libs/eval-tree/src/lib/function-registry.ts","../../../../libs/eval-tree/src/lib/evaluate-function/async-value.ts","../../../../libs/eval-tree/src/lib/evaluate-function/execute-function.ts","../../../../libs/eval-tree/src/lib/util/is-observable-value.ts","../../../../libs/eval-tree/src/lib/evaluate-function/get-return-value-state.ts","../../../../libs/eval-tree/src/lib/evaluate-function/index.ts","../../../../libs/eval-tree/src/lib/evaluate-object.ts","../../../../libs/eval-tree/src/lib/evaluate-value.ts","../../../../libs/eval-tree/src/lib/evaluate-node.ts","../../../../libs/eval-tree/src/lib/evaluate-function/function-execution-state-builder.ts","../../../../libs/eval-tree/src/index.ts","../../../../libs/eval-tree/src/kaskad-eval-tree.ts"],"sourcesContent":["import { EvalContext } from './function';\n\nexport const debugName = (context: EvalContext, thing: string) => {\n return [context.componentId, thing].join('|');\n};\n","import { computed } from 'mobx';\n\nimport { debugName } from './constants';\nimport { EvalState } from './eval-state';\nimport { evaluateNode } from './evaluate-node';\nimport { EvaluationResult } from './evaluation-result';\nimport { EvalContext } from './function';\nimport { ArrayEvalNode } from './types';\n\nexport function evaluateArray(evalNode: ArrayEvalNode, context: EvalContext): EvaluationResult<EvalState> {\n const itemResults = evalNode.items.map((item) => evaluateNode(item, context));\n const itemComputeds = itemResults.map((result) => result.computed);\n const disposers = itemResults.flatMap((result) => result.disposers);\n\n return {\n computed: computed(\n () => {\n const evaluating = itemComputeds.some((ro) => ro.get().evaluating);\n const failed = itemComputeds.some((ro) => ro.get().failed);\n\n return itemComputeds.reduce<EvalState<unknown[]>>(\n (acc, ro) => {\n acc.value.push(ro.get().value);\n return acc;\n },\n { value: [], evaluating, hasResult: !evaluating, failed, error: null },\n );\n },\n {\n name: debugName(context, 'array-literal'),\n },\n ),\n disposers,\n };\n}\n","import { parseValueType } from '@kaskad/schema';\nimport { ValueType } from '@kaskad/types';\n\nexport interface SignatureParseResult {\n params: ValueType[];\n variadic: boolean;\n returns: ValueType;\n}\n\n/**\n * Parses a function signature string into structured parameter and return types.\n *\n * Format: (param1Type, param2Type, ...) => returnType\n * Variadic: (...type) => returnType\n *\n * Examples:\n * - '() => void'\n * - '(string, number) => boolean'\n * - '(unknown[], number) => unknown'\n * - '(...unknown) => boolean'\n * - '({name: string}, number[]) => void'\n */\nexport function parseSignature(signature: string): SignatureParseResult {\n const trimmed = signature.trim();\n\n // Split by => to get params and return parts\n const arrowIndex = trimmed.indexOf('=>');\n if (arrowIndex === -1) {\n throw new Error(`Invalid signature: missing '=>'. Expected format: '(params) => returnType'`);\n }\n\n const paramsStr = trimmed.slice(0, arrowIndex).trim();\n const returnStr = trimmed.slice(arrowIndex + 2).trim();\n\n if (!returnStr) {\n throw new Error(`Invalid signature: missing return type after '=>'`);\n }\n\n // Parse return type\n const returns = parseValueType(returnStr);\n\n // Parse params\n if (!paramsStr.startsWith('(') || !paramsStr.endsWith(')')) {\n throw new Error(`Invalid signature: params must be wrapped in parentheses. Got: ${paramsStr}`);\n }\n\n const paramsContent = paramsStr.slice(1, -1).trim();\n\n // Empty params\n if (!paramsContent) {\n return {\n params: [],\n variadic: false,\n returns,\n };\n }\n\n // Check for variadic\n if (paramsContent.startsWith('...')) {\n const variadicType = paramsContent.slice(3).trim();\n if (!variadicType) {\n throw new Error(`Invalid signature: variadic parameter must have a type. Got: '...${variadicType}'`);\n }\n\n return {\n params: [parseValueType(variadicType)],\n variadic: true,\n returns,\n };\n }\n\n // Split by comma, respecting nesting\n const paramTypes = splitByComma(paramsContent);\n\n return {\n params: paramTypes.map((typeStr) => parseValueType(typeStr.trim())),\n variadic: false,\n returns,\n };\n}\n\n/**\n * Splits a string by commas while respecting nested braces and brackets.\n * Used to split parameter lists that may contain complex types like {a: string, b: number}.\n */\nfunction splitByComma(str: string): string[] {\n const parts: string[] = [];\n let current = '';\n let depth = 0;\n\n for (let i = 0; i < str.length; i++) {\n const char = str[i];\n\n if (char === '{' || char === '[' || char === '(') {\n depth++;\n current += char;\n } else if (char === '}' || char === ']' || char === ')') {\n depth--;\n current += char;\n } else if (char === ',' && depth === 0) {\n parts.push(current.trim());\n current = '';\n } else {\n current += char;\n }\n }\n\n if (current.trim()) {\n parts.push(current.trim());\n }\n\n return parts;\n}\n","import { isUnfoldedNodeSchema, unfoldNodeSchema } from '@kaskad/schema';\nimport { ValueType } from '@kaskad/types';\n\n/**\n * Recursively extracts primitive values from nested NodeSchema structures.\n *\n * Traverses the value tree and unwraps NodeSchema objects to their primitive values.\n * Preserves collection types (Array, Set, Map) and component inline values.\n *\n * @param value - Value that may contain nested NodeSchema objects\n * @returns Primitive value with all NodeSchema wrappers removed\n */\nfunction extractPrimitiveValue(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (isUnfoldedNodeSchema(value)) {\n return extractPrimitiveValue(value.value);\n }\n\n if (Array.isArray(value)) {\n return value.map(extractPrimitiveValue);\n }\n\n if (value instanceof Set) {\n const extracted = new Set();\n value.forEach((item) => extracted.add(extractPrimitiveValue(item)));\n return extracted;\n }\n\n if (value instanceof Map) {\n const extracted = new Map();\n value.forEach((val, key) => extracted.set(key, extractPrimitiveValue(val)));\n return extracted;\n }\n\n // ComponentNodeInlineValue has Maps that must be preserved\n if (typeof value === 'object' && 'componentType' in value && value.componentType) {\n return value;\n }\n\n if (typeof value === 'object') {\n const extracted: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n extracted[key] = extractPrimitiveValue(val);\n }\n return extracted;\n }\n\n return value;\n}\n\n/**\n * Normalizes raw values by detecting formulas and extracting primitives.\n *\n * Performs schema unfolding to handle formula detection (e.g., \"={{...}}\" or \"=...\"),\n * then extracts primitive values from the resulting NodeSchema structure.\n *\n * @param rawValue - Raw value that may be a formula string or contain nested schemas\n * @param valueType - Expected type of the value after normalization\n * @returns ComputationSchema if value is a formula, otherwise primitive value\n */\nexport function normalizeValue(rawValue: unknown, valueType: ValueType): unknown {\n // Handle runtime Set values directly - they don't need unfolding.\n // This occurs when Set-typed variables are passed to functions expecting arrays.\n // The function implementations (e.g., filterIn) handle both arrays and Sets.\n if (rawValue instanceof Set) {\n return rawValue;\n }\n\n const schema = unfoldNodeSchema(rawValue, valueType);\n\n if (schema.computation) {\n return schema.computation;\n }\n\n return extractPrimitiveValue(schema.value);\n}\n","import { IComputedValue } from 'mobx';\n\nimport { EvalState } from '../eval-state';\nimport { ArgType } from '../function';\nimport { normalizeValue } from './normalize-value';\n\n/**\n * Sentinel value for arguments that have not yet been evaluated.\n * Distinguishes unevaluated arguments from arguments that evaluated to null.\n */\nexport const NOT_EVALUATED = Symbol('NOT_EVALUATED');\n\ntype EvalArgumentsResult = {\n values: unknown[];\n allEvaluated: boolean;\n anyEvaluating: boolean;\n anyFailed: boolean;\n};\n\nexport type EvalArgumentsCtx = {\n computedArgs: IComputedValue<EvalState>[];\n argsTypes: Array<ArgType>;\n};\n\n/**\n * Evaluates function arguments and aggregates evaluation states.\n * Returns values array with NOT_EVALUATED symbol for unevaluated arguments.\n */\nexport function evaluateArguments(ctx: EvalArgumentsCtx): EvalArgumentsResult {\n const { computedArgs, argsTypes } = ctx;\n const values: unknown[] = [];\n\n let allEvaluated = true;\n let anyEvaluating = false;\n let anyFailed = false;\n\n for (let i = 0; i < computedArgs.length; i++) {\n const { value: rawValue, hasResult, evaluating, failed } = computedArgs[i].get();\n\n if (evaluating) {\n anyEvaluating = true;\n }\n if (failed) {\n anyFailed = true;\n }\n\n if (!hasResult) {\n allEvaluated = false;\n values.push(NOT_EVALUATED);\n } else {\n if (!argsTypes[i]) {\n throw new Error(\n `Argument type definition missing for argument ${i}. ` +\n `Expected ${argsTypes.length} arguments but got ${computedArgs.length}.`,\n );\n }\n values.push(normalizeValue(rawValue, argsTypes[i].valueType));\n }\n }\n\n return { values, allEvaluated, anyEvaluating, anyFailed };\n}\n","import { observable, runInAction, untracked } from 'mobx';\nimport { isObservable, Observable as RxObservable } from 'rxjs';\n\nimport { ObservableValue, PromiseValue } from './async-value';\n\n/**\n * Wraps async values (Promises, RxJS Observables) in MobX-tracked structures.\n *\n * Returns PromiseValue for Promises, ObservableValue for Observables, or the value unchanged.\n */\nexport function toObservable(result: unknown): PromiseValue | ObservableValue | unknown {\n if (result instanceof Promise) {\n return untracked(() => {\n const asyncValue = observable.object<PromiseValue>({\n kind: 'promise',\n current: null,\n error: null,\n pending: true,\n });\n\n result.then(\n (value) => {\n runInAction(() => {\n asyncValue.current = value;\n asyncValue.pending = false;\n asyncValue.error = null;\n });\n },\n (err) => {\n runInAction(() => {\n asyncValue.error = err;\n asyncValue.pending = false;\n asyncValue.current = null;\n });\n },\n );\n\n return asyncValue;\n });\n }\n\n if (isObservable(result)) {\n return untracked(() => {\n const asyncValue = observable.object({\n kind: 'observable' as const,\n current: null as unknown,\n error: null as unknown,\n pending: true,\n subscription: undefined as unknown as ObservableValue['subscription'],\n });\n\n try {\n const subscription = (result as RxObservable<unknown>).subscribe({\n next: (value) => {\n runInAction(() => {\n asyncValue.current = value;\n asyncValue.pending = false;\n asyncValue.error = null;\n });\n },\n error: (err) => {\n runInAction(() => {\n asyncValue.error = err;\n asyncValue.pending = false;\n });\n },\n complete: () => {\n runInAction(() => {\n asyncValue.pending = false;\n });\n },\n });\n\n runInAction(() => {\n asyncValue.subscription = subscription;\n });\n } catch (error) {\n runInAction(() => {\n asyncValue.error = error;\n asyncValue.pending = false;\n asyncValue.current = null;\n });\n }\n\n return asyncValue as ObservableValue;\n });\n }\n\n return result;\n}\n","import { computed, IComputedValue } from 'mobx';\n\nimport { EvalState } from '../eval-state';\nimport { EvalContext, ImperativeFunctionDefinition, ReactiveFunctionDefinition } from '../function';\nimport { parseSignature } from '../parse-signature';\nimport { evaluateArguments } from './evaluate-arguments';\nimport { toObservable } from './to-observable';\n\n/**\n * Wraps an imperative function to work in the reactive pipeline.\n * Unwraps computed arguments to plain values and propagates argument states.\n */\nexport function wrapImperativeAsReactive(imperativeDef: ImperativeFunctionDefinition): ReactiveFunctionDefinition {\n const { params } = parseSignature(imperativeDef.signature);\n const argsTypes = params.map((p) => ({ valueType: p }));\n\n if (imperativeDef.contextual) {\n // Contextual imperative -> contextual reactive\n return {\n kind: 'reactive',\n contextual: true,\n execute: (ctx: EvalContext, computedArgs: IComputedValue<EvalState>[]) => {\n return computed(() => {\n const { values, allEvaluated, anyEvaluating, anyFailed } = evaluateArguments({\n computedArgs,\n argsTypes,\n });\n\n if (!allEvaluated || anyFailed) {\n return {\n returnValue: null,\n argsEvaluated: false,\n argsEvaluating: anyEvaluating,\n argsFailed: anyFailed,\n };\n }\n\n try {\n const result = imperativeDef.execute(ctx, ...values);\n return {\n returnValue: toObservable(result),\n argsEvaluated: true,\n argsEvaluating: anyEvaluating,\n argsFailed: anyFailed,\n };\n } catch (error) {\n return {\n returnValue: toObservable(Promise.reject(error)),\n argsEvaluated: true,\n argsEvaluating: anyEvaluating,\n argsFailed: anyFailed,\n };\n }\n });\n },\n signature: imperativeDef.signature,\n };\n } else {\n // Pure imperative -> pure reactive\n return {\n kind: 'reactive',\n execute: (computedArgs: IComputedValue<EvalState>[]) => {\n return computed(() => {\n const { values, allEvaluated, anyEvaluating, anyFailed } = evaluateArguments({\n computedArgs,\n argsTypes,\n });\n\n if (!allEvaluated || anyFailed) {\n return {\n returnValue: null,\n argsEvaluated: false,\n argsEvaluating: anyEvaluating,\n argsFailed: anyFailed,\n };\n }\n\n try {\n const result = imperativeDef.execute(...values);\n return {\n returnValue: toObservable(result),\n argsEvaluated: true,\n argsEvaluating: anyEvaluating,\n argsFailed: anyFailed,\n };\n } catch (error) {\n return {\n returnValue: toObservable(Promise.reject(error)),\n argsEvaluated: true,\n argsEvaluating: anyEvaluating,\n argsFailed: anyFailed,\n };\n }\n });\n },\n signature: imperativeDef.signature,\n };\n }\n}\n","import { FunctionDefinition, ReactiveFunctionDefinition } from '../function';\nimport { wrapImperativeAsReactive } from './wrap-imperative-function';\n\n/**\n * Ensures a function definition is reactive.\n *\n * This utility function provides a consistent way to convert any function definition\n * into a reactive version that works with MobX computed values. Reactive functions\n * are required for the evaluation pipeline to support lazy evaluation and proper\n * dependency tracking.\n *\n * @param definition - Either an imperative or reactive function definition\n * @returns A reactive function definition. If the input was already reactive,\n * returns it unchanged. If imperative, wraps it using wrapImperativeAsReactive.\n *\n * @example\n * ```typescript\n * // Register a function, ensuring it's reactive\n * const reactiveFn = ensureReactive(myImperativeFunction);\n * defStore.setFunction('myFn', reactiveFn);\n * ```\n */\nexport function ensureReactive(definition: FunctionDefinition): ReactiveFunctionDefinition {\n if (definition.kind === 'reactive') {\n return definition;\n } else {\n return wrapImperativeAsReactive(definition);\n }\n}\n","import { log } from '@kaskad/config';\n\nimport { FunctionDefinition } from './function';\nimport { parseSignature } from './parse-signature';\n\n/**\n * Validates that a function definition's signature string matches its execute function.\n *\n * Performs basic parameter count validation to catch common mistakes.\n * Runs at function registration time (once per function), not on every invocation.\n *\n * @param name - Function identifier for error messages\n * @param definition - Function definition to validate\n * @throws {Error} When signature is malformed or parameter count exceeds declaration\n */\nexport function validateFunctionSignature(name: string, definition: FunctionDefinition): void {\n try {\n const { params, variadic } = parseSignature(definition.signature);\n\n if (definition.kind === 'imperative') {\n const ctxOffset = definition.contextual ? 1 : 0; // +1 for ctx parameter if contextual\n const expectedLength = params.length + ctxOffset;\n const actualLength = definition.execute.length;\n\n // Validate only when execute has MORE parameters than declared in signature.\n // We allow fewer because function.length excludes default parameters.\n // Example: execute(ctx, a, b = 5) has length 2, even with signature '(a, b) => result'\n if (actualLength > 0 && actualLength > expectedLength && !variadic) {\n throw new Error(\n `Function \"${name}\": execute function has more parameters (${actualLength - ctxOffset}) than signature declares (${params.length}). ` +\n `Signature: ${definition.signature}`,\n );\n }\n } else {\n // Reactive functions: contextual receives (ctx, args), pure receives just (args)\n const actualLength = definition.execute.length;\n const expectedLength = definition.contextual ? 2 : 1;\n if (actualLength !== expectedLength) {\n log.warn(\n `Function \"${name}\": reactive execute should take exactly ${expectedLength} parameter(s) ${definition.contextual ? '(ctx, args)' : '(args)'}. Got ${actualLength}. ` +\n `This is unusual but may be intentional.`,\n );\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Function \"${name}\": Invalid signature - ${error.message}`);\n }\n throw error;\n }\n}\n\n/**\n * Validates all functions in a registry.\n *\n * Useful for bulk validation in test setup or during application initialization.\n * Throws on the first invalid function encountered.\n *\n * @param functions - Map of function names to their definitions\n * @throws {Error} When any function has an invalid signature\n */\nexport function validateFunctionRegistry(functions: Record<string, FunctionDefinition>): void {\n for (const [name, definition] of Object.entries(functions)) {\n validateFunctionSignature(name, definition);\n }\n}\n","import { ensureReactive } from './evaluate-function/ensure-reactive';\nimport { FunctionDefinition, ReactiveFunctionDefinition } from './function';\nimport { validateFunctionSignature } from './validate-function-signature';\n\n/**\n * Registry for formula functions.\n * Singleton pattern for global access throughout the application.\n */\nexport class FunctionRegistry {\n private static instance: FunctionRegistry;\n\n // All functions are stored as reactive (imperative ones are wrapped automatically)\n private reactiveFunctions: { [functionType: string]: ReactiveFunctionDefinition } = {};\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private constructor() {}\n\n static getInstance(): FunctionRegistry {\n if (!FunctionRegistry.instance) {\n FunctionRegistry.instance = new FunctionRegistry();\n }\n return FunctionRegistry.instance;\n }\n\n static reset(): FunctionRegistry {\n FunctionRegistry.instance = new FunctionRegistry();\n return FunctionRegistry.instance;\n }\n\n /**\n * Register multiple formula functions at once.\n * Automatically wraps imperative functions as reactive.\n */\n setFunctions(definitions: Record<string, FunctionDefinition>): void {\n for (const [functionType, definition] of Object.entries(definitions)) {\n this.setFunction(functionType, definition);\n }\n }\n\n /**\n * Register a formula function.\n *\n * Accepts both reactive and imperative definitions. Imperative definitions are\n * automatically wrapped as reactive. The registry stores all functions as ReactiveFunctionDefinition.\n *\n * In development mode, validates that the signature matches the execute function.\n *\n * @param functionType - Unique identifier for the function\n * @param definition - Function definition (imperative or reactive)\n */\n setFunction(functionType: string, definition: FunctionDefinition): void {\n // Validate signature in development\n validateFunctionSignature(functionType, definition);\n\n this.reactiveFunctions[functionType] = ensureReactive(definition);\n }\n\n /**\n * Get a registered formula function.\n * @throws Error if function is not found\n */\n getFunction(functionType: string): ReactiveFunctionDefinition {\n const definition = this.reactiveFunctions[functionType];\n if (!definition) {\n throw new Error(`Function \"${functionType}\" not found`);\n }\n return definition;\n }\n\n /**\n * Get all registered function names.\n */\n getFunctionNames(): string[] {\n return Object.keys(this.reactiveFunctions);\n }\n\n /**\n * Check if a function is registered.\n */\n hasFunction(functionType: string): boolean {\n return !!this.reactiveFunctions[functionType];\n }\n}\n","import { Subscription } from 'rxjs';\n\n/**\n * Wrapper for Promise values tracked by MobX.\n * Current value is cleared on rejection; pending becomes false after resolution or rejection.\n */\nexport interface PromiseValue {\n kind: 'promise';\n current: unknown;\n error: unknown;\n pending: boolean;\n}\n\n/**\n * Wrapper for RxJS Observable values tracked by MobX.\n * Current value is preserved on error; pending becomes false after first emission or completion.\n */\nexport interface ObservableValue {\n kind: 'observable';\n current: unknown;\n error: unknown;\n pending: boolean;\n subscription: Subscription;\n}\n\n/**\n * Discriminated union for async values.\n * Use the `kind` field to distinguish between Promise and Observable.\n */\nexport type AsyncValue = PromiseValue | ObservableValue;\n\n/** Type guard for AsyncValue. */\nexport function isAsyncValue(obj: unknown): obj is AsyncValue {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'kind' in obj &&\n (obj.kind === 'promise' || obj.kind === 'observable') &&\n 'current' in obj &&\n 'error' in obj &&\n 'pending' in obj\n );\n}\n\n/** Type guard for PromiseValue. */\nexport function isPromiseValue(obj: unknown): obj is PromiseValue {\n return isAsyncValue(obj) && obj.kind === 'promise';\n}\n\n/** Type guard for ObservableValue. */\nexport function isObservableValue(obj: unknown): obj is ObservableValue {\n return isAsyncValue(obj) && obj.kind === 'observable';\n}\n","import { computed, IComputedValue, IReactionDisposer } from 'mobx';\nimport { Subscription } from 'rxjs';\n\nimport { debugName } from '../constants';\nimport { FunctionExecutionState } from '../eval-state';\nimport { evaluateNode } from '../evaluate-node';\nimport { EvalContext } from '../function';\nimport { FunctionRegistry } from '../function-registry';\nimport { FunctionEvalNode } from '../types';\nimport { isObservableValue } from './async-value';\n\n/**\n * Manages RxJS subscription lifecycle across function re-evaluations.\n */\nconst createSubscriptionTracker = (): [\n updateFn: (result: FunctionExecutionState) => void,\n cleanupFn: IReactionDisposer,\n] => {\n let currentSubscription: Subscription | null = null;\n\n const updateSubscription = (result: FunctionExecutionState) => {\n const newSubscription = isObservableValue(result.returnValue) ? result.returnValue.subscription : null;\n\n if (currentSubscription !== null && currentSubscription !== newSubscription) {\n if (typeof currentSubscription.unsubscribe === 'function') {\n currentSubscription.unsubscribe();\n }\n }\n\n currentSubscription = newSubscription;\n };\n\n const cleanupDisposer = (() => {\n if (currentSubscription && typeof currentSubscription.unsubscribe === 'function') {\n currentSubscription.unsubscribe();\n }\n currentSubscription = null;\n }) as IReactionDisposer;\n\n return [updateSubscription, cleanupDisposer];\n};\n\n/**\n * Executes a function and returns its reactive state with cleanup handlers.\n */\nexport const executeFunction = (\n evalNode: FunctionEvalNode,\n context: EvalContext,\n): [\n computed: IComputedValue<FunctionExecutionState>,\n disposer: IReactionDisposer,\n argDisposers: IReactionDisposer[],\n] => {\n const fnRegistry = FunctionRegistry.getInstance();\n\n const argResults = evalNode.args.map((arg) => evaluateNode(arg, context));\n const computedArgs = argResults.map((result) => result.computed);\n const argDisposers = argResults.flatMap((result) => result.disposers);\n\n const fnDefinition = fnRegistry.getFunction(evalNode.name);\n\n try {\n const resultComputed = fnDefinition.contextual\n ? fnDefinition.execute(context, computedArgs)\n : fnDefinition.execute(computedArgs);\n\n const [updateSubscription, cleanupDisposer] = createSubscriptionTracker();\n\n const executionResultComputed = computed(\n () => {\n const result = resultComputed.get();\n updateSubscription(result);\n return result;\n },\n {\n name: debugName(context, evalNode.name),\n },\n );\n\n return [executionResultComputed, cleanupDisposer, argDisposers];\n } catch (error) {\n const src = context.sourceUrl ? `[${context.sourceUrl}] ` : '';\n if (error instanceof Error) {\n const message = [\n `${src}Function \"${evalNode.name}\" failed`,\n error.message,\n `\\nContext:\\n Component: ${context.componentId}`,\n ].join('\\n');\n\n throw new Error(message, { cause: error });\n } else {\n throw new Error(`${src}Function \"${evalNode.name}\" failed: ${String(error)}`, { cause: error });\n }\n }\n};\n","import { IComputedValue, isComputed } from 'mobx';\n\nexport function isComputedValue(value: unknown): value is IComputedValue<unknown> {\n return isComputed(value);\n}\n","import { toJS } from 'mobx';\n\nimport { isComputedValue } from '../util/is-observable-value';\nimport { isAsyncValue } from './async-value';\n\n/**\n * Extracts evaluation state from return values, unwrapping AsyncValue wrappers.\n */\nexport function getReturnValueState(source: unknown): {\n value: unknown;\n evaluating: boolean;\n failed: boolean;\n error: unknown;\n} {\n let rawValue: unknown;\n let evaluating = false;\n let failed = false;\n let error: unknown = null;\n\n if (isAsyncValue(source)) {\n rawValue = toJS(source.current);\n evaluating = source.pending;\n failed = !!source.error;\n error = source.error ?? null;\n } else {\n try {\n rawValue = isComputedValue(source) ? source.get() : source;\n } catch (e) {\n rawValue = null;\n failed = true;\n error = e;\n }\n }\n\n return {\n value: rawValue,\n evaluating,\n failed,\n error,\n };\n}\n","import { comparer, computed } from 'mobx';\n\nimport { debugName } from '../constants';\nimport { EvalState } from '../eval-state';\nimport { EvaluationResult } from '../evaluation-result';\nimport { EvalContext } from '../function';\nimport { FunctionEvalNode } from '../types';\nimport { executeFunction } from './execute-function';\nimport { getReturnValueState } from './get-return-value-state';\n\n/**\n * Evaluates a function call with reactive state tracking.\n * Supports synchronous values, Promises, and RxJS Observables.\n */\nexport function evaluateFunction(evalNode: FunctionEvalNode, context: EvalContext): EvaluationResult<EvalState> {\n const [executionResult, functionDisposer, argDisposers] = executeFunction(evalNode, context);\n\n return {\n computed: computed(\n () => {\n const { returnValue, argsEvaluated, argsEvaluating, argsFailed } = executionResult.get();\n const returnValueState = getReturnValueState(returnValue);\n\n return {\n value: returnValueState.value,\n hasResult: argsEvaluated && !returnValueState.evaluating,\n evaluating: argsEvaluating || returnValueState.evaluating,\n failed: argsFailed || returnValueState.failed,\n error: returnValueState.error,\n };\n },\n {\n equals: comparer.structural,\n name: debugName(context, evalNode.name),\n },\n ),\n disposers: [functionDisposer, ...argDisposers],\n };\n}\n","import { comparer, computed, IComputedValue } from 'mobx';\n\nimport { debugName } from './constants';\nimport { EvalState } from './eval-state';\nimport { evaluateNode } from './evaluate-node';\nimport { EvaluationResult } from './evaluation-result';\nimport { EvalContext } from './function';\nimport { ObjectEvalNode } from './types';\n\nexport function evaluateObject(evalNode: ObjectEvalNode, context: EvalContext): EvaluationResult<EvalState> {\n const propertyResults = evalNode.properties.map((property) => {\n const keyResult = evaluateNode(property.key, context);\n const valueResult = evaluateNode(property.value, context);\n\n return { keyResult, valueResult };\n });\n\n const entriesComputeds: Array<[IComputedValue<EvalState>, IComputedValue<EvalState>]> = propertyResults.map(\n ({ keyResult, valueResult }) => [keyResult.computed, valueResult.computed],\n );\n\n const disposers = propertyResults.flatMap(({ keyResult, valueResult }) => [\n ...keyResult.disposers,\n ...valueResult.disposers,\n ]);\n\n return {\n computed: computed(\n () => {\n const evaluating = entriesComputeds.some(\n ([keyComputed, valueComputed]) => keyComputed.get().evaluating || valueComputed.get().evaluating,\n );\n const failed = entriesComputeds.some(\n ([keyComputed, valueComputed]) => keyComputed.get().failed || valueComputed.get().failed,\n );\n\n const entries = entriesComputeds.map(([keyComputed, valueComputed]) => [\n keyComputed.get().value,\n valueComputed.get().value,\n ]);\n const value = Object.fromEntries(entries);\n\n return { value, evaluating, hasResult: !evaluating, failed, error: null };\n },\n {\n equals: comparer.structural,\n name: debugName(context, 'object-literal'),\n },\n ),\n disposers,\n };\n}\n","import { computed } from 'mobx';\n\nimport { EvalState } from './eval-state';\nimport { EvaluationResult } from './evaluation-result';\nimport { ValueEvalNode } from './types';\n\nexport function evaluateValue(node: ValueEvalNode): EvaluationResult<EvalState> {\n return {\n computed: computed(() => ({\n value: node.value,\n evaluating: false,\n hasResult: true,\n failed: false,\n error: null,\n })),\n disposers: [],\n };\n}\n","import { EvalState } from './eval-state';\nimport { evaluateArray } from './evaluate-array';\nimport { evaluateFunction } from './evaluate-function';\nimport { evaluateObject } from './evaluate-object';\nimport { evaluateValue } from './evaluate-value';\nimport { EvaluationResult } from './evaluation-result';\nimport { EvalContext } from './function';\nimport { ArrayEvalNode, EvalNode, FunctionEvalNode, ObjectEvalNode, ValueEvalNode } from './types';\n\nconst delegates: Record<string, (evalNode: EvalNode, context: EvalContext) => EvaluationResult<EvalState>> = {\n function: (evalNode, context) => evaluateFunction(evalNode as FunctionEvalNode, context),\n value: (evalNode) => evaluateValue(evalNode as ValueEvalNode),\n array: (evalNode, context) => evaluateArray(evalNode as ArrayEvalNode, context),\n object: (evalNode, context) => evaluateObject(evalNode as ObjectEvalNode, context),\n};\n\nexport function evaluateNode<S extends EvalState = EvalState>(\n evalNode: EvalNode,\n context: EvalContext,\n): EvaluationResult<S> {\n const delegate = delegates[evalNode.type];\n if (!delegate) {\n throw new Error(`Unknown eval node type: \"${evalNode.type}\"`);\n }\n\n return delegate(evalNode, context) as EvaluationResult<S>;\n}\n","import { EvalState, FunctionExecutionState } from '../eval-state';\n\n/**\n * Helper for building FunctionExecutionState in reactive functions.\n * Tracks argument evaluation states and provides early-return helpers.\n */\nexport class FunctionExecutionStateBuilder {\n private argsEvaluating = false;\n private argsFailed = false;\n\n /** Track state from an argument. */\n trackArg(argState: EvalState): void {\n if (argState.evaluating) this.argsEvaluating = true;\n if (argState.failed) this.argsFailed = true;\n }\n\n /** Signal evaluating state from inside the function body (not from an arg). */\n markEvaluating(): void {\n this.argsEvaluating = true;\n }\n\n /** Check if argument is ready. Returns state to return early if not ready, null otherwise. */\n checkReady(argState: EvalState): FunctionExecutionState | null {\n this.trackArg(argState);\n\n if (!argState.hasResult) {\n return this.notReady();\n }\n\n return null;\n }\n\n /** Return state when arguments are not ready. */\n notReady(): FunctionExecutionState {\n return {\n returnValue: null,\n argsEvaluated: false,\n argsEvaluating: this.argsEvaluating,\n argsFailed: this.argsFailed,\n };\n }\n\n /** Return successful state with a value. */\n success(value: unknown): FunctionExecutionState {\n return {\n returnValue: value,\n argsEvaluated: true,\n argsEvaluating: this.argsEvaluating,\n argsFailed: this.argsFailed,\n };\n }\n}\n","// Main evaluation function\nexport { evaluateNode } from './lib/evaluate-node';\n\n// Eval node types (input to evaluateNode)\nexport type {\n EvalNode,\n ValueEvalNode,\n ArrayEvalNode,\n ObjectEvalNode,\n ObjectEvalNodeField,\n FunctionEvalNode,\n} from './lib/types';\n\nexport type { EvalState, FunctionExecutionState } from './lib/eval-state';\nexport type {\n EvalContext,\n FunctionDefinition,\n ImperativeFunctionDefinition,\n ReactiveFunctionDefinition,\n} from './lib/function';\n\n// Function registry for managing custom functions\nexport { FunctionRegistry } from './lib/function-registry';\n\n// Utilities for building advanced reactive functions\nexport { FunctionExecutionStateBuilder } from './lib/evaluate-function/function-execution-state-builder';\nexport type { PromiseValue } from './lib/evaluate-function/async-value';\nexport { wrapImperativeAsReactive } from './lib/evaluate-function/wrap-imperative-function';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kaskad-eval-tree.mjs","sources":["../../../../libs/eval-tree/src/lib/constants.ts","../../../../libs/eval-tree/src/lib/evaluate-array.ts","../../../../libs/eval-tree/src/lib/evaluate-error.ts","../../../../libs/eval-tree/src/lib/parse-signature.ts","../../../../libs/eval-tree/src/lib/evaluate-function/normalize-value.ts","../../../../libs/eval-tree/src/lib/evaluate-function/evaluate-arguments.ts","../../../../libs/eval-tree/src/lib/evaluate-function/to-observable.ts","../../../../libs/eval-tree/src/lib/evaluate-function/wrap-imperative-function.ts","../../../../libs/eval-tree/src/lib/evaluate-function/ensure-reactive.ts","../../../../libs/eval-tree/src/lib/validate-function-signature.ts","../../../../libs/eval-tree/src/lib/function-registry.ts","../../../../libs/eval-tree/src/lib/evaluate-function/async-value.ts","../../../../libs/eval-tree/src/lib/evaluate-function/execute-function.ts","../../../../libs/eval-tree/src/lib/util/is-observable-value.ts","../../../../libs/eval-tree/src/lib/evaluate-function/get-return-value-state.ts","../../../../libs/eval-tree/src/lib/evaluate-function/index.ts","../../../../libs/eval-tree/src/lib/evaluate-object.ts","../../../../libs/eval-tree/src/lib/evaluate-value.ts","../../../../libs/eval-tree/src/lib/evaluate-node.ts","../../../../libs/eval-tree/src/lib/evaluate-function/function-execution-state-builder.ts","../../../../libs/eval-tree/src/index.ts","../../../../libs/eval-tree/src/kaskad-eval-tree.ts"],"sourcesContent":["import { EvalContext } from './function';\n\nexport const debugName = (context: EvalContext, thing: string) => {\n return [context.componentId, thing].join('|');\n};\n","import { computed } from 'mobx';\n\nimport { debugName } from './constants';\nimport { EvalState } from './eval-state';\nimport { evaluateNode } from './evaluate-node';\nimport { EvaluationResult } from './evaluation-result';\nimport { EvalContext } from './function';\nimport { ArrayEvalNode } from './types';\n\nexport function evaluateArray(evalNode: ArrayEvalNode, context: EvalContext): EvaluationResult<EvalState> {\n const itemResults = evalNode.items.map((item) => evaluateNode(item, context));\n const itemComputeds = itemResults.map((result) => result.computed);\n const disposers = itemResults.flatMap((result) => result.disposers);\n\n return {\n computed: computed(\n () => {\n const states = itemComputeds.map((ro) => ro.get());\n const evaluating = states.some((s) => s.evaluating);\n const failed = states.some((s) => s.failed);\n const error = states.find((s) => s.error != null)?.error ?? null;\n const value = states.map((s) => s.value);\n\n return { value, evaluating, hasResult: !evaluating, failed, error };\n },\n {\n name: debugName(context, 'array-literal'),\n },\n ),\n disposers,\n };\n}\n","import { computed } from 'mobx';\n\nimport { EvalState } from './eval-state';\nimport { EvaluationResult } from './evaluation-result';\nimport { ErrorEvalNode } from './types';\n\nexport function evaluateError(node: ErrorEvalNode): EvaluationResult<EvalState> {\n return {\n computed: computed(() => ({\n value: null,\n evaluating: false,\n hasResult: true,\n failed: true,\n error: node.error,\n })),\n disposers: [],\n };\n}\n","import { parseValueType } from '@kaskad/schema';\nimport { ValueType } from '@kaskad/types';\n\nexport interface SignatureParseResult {\n params: ValueType[];\n variadic: boolean;\n returns: ValueType;\n}\n\n/**\n * Parses a function signature string into structured parameter and return types.\n *\n * Format: (param1Type, param2Type, ...) => returnType\n * Variadic: (...type) => returnType\n *\n * Examples:\n * - '() => void'\n * - '(string, number) => boolean'\n * - '(unknown[], number) => unknown'\n * - '(...unknown) => boolean'\n * - '({name: string}, number[]) => void'\n */\nexport function parseSignature(signature: string): SignatureParseResult {\n const trimmed = signature.trim();\n\n // Split by => to get params and return parts\n const arrowIndex = trimmed.indexOf('=>');\n if (arrowIndex === -1) {\n throw new Error(`Invalid signature: missing '=>'. Expected format: '(params) => returnType'`);\n }\n\n const paramsStr = trimmed.slice(0, arrowIndex).trim();\n const returnStr = trimmed.slice(arrowIndex + 2).trim();\n\n if (!returnStr) {\n throw new Error(`Invalid signature: missing return type after '=>'`);\n }\n\n // Parse return type\n const returns = parseValueType(returnStr);\n\n // Parse params\n if (!paramsStr.startsWith('(') || !paramsStr.endsWith(')')) {\n throw new Error(`Invalid signature: params must be wrapped in parentheses. Got: ${paramsStr}`);\n }\n\n const paramsContent = paramsStr.slice(1, -1).trim();\n\n // Empty params\n if (!paramsContent) {\n return {\n params: [],\n variadic: false,\n returns,\n };\n }\n\n // Check for variadic\n if (paramsContent.startsWith('...')) {\n const variadicType = paramsContent.slice(3).trim();\n if (!variadicType) {\n throw new Error(`Invalid signature: variadic parameter must have a type. Got: '...${variadicType}'`);\n }\n\n return {\n params: [parseValueType(variadicType)],\n variadic: true,\n returns,\n };\n }\n\n // Split by comma, respecting nesting\n const paramTypes = splitByComma(paramsContent);\n\n return {\n params: paramTypes.map((typeStr) => parseValueType(typeStr.trim())),\n variadic: false,\n returns,\n };\n}\n\n/**\n * Splits a string by commas while respecting nested braces and brackets.\n * Used to split parameter lists that may contain complex types like {a: string, b: number}.\n */\nfunction splitByComma(str: string): string[] {\n const parts: string[] = [];\n let current = '';\n let depth = 0;\n\n for (let i = 0; i < str.length; i++) {\n const char = str[i];\n\n if (char === '{' || char === '[' || char === '(') {\n depth++;\n current += char;\n } else if (char === '}' || char === ']' || char === ')') {\n depth--;\n current += char;\n } else if (char === ',' && depth === 0) {\n parts.push(current.trim());\n current = '';\n } else {\n current += char;\n }\n }\n\n if (current.trim()) {\n parts.push(current.trim());\n }\n\n return parts;\n}\n","import { isUnfoldedNodeSchema, unfoldNodeSchema } from '@kaskad/schema';\nimport { ValueType } from '@kaskad/types';\n\n/**\n * Recursively extracts primitive values from nested NodeSchema structures.\n *\n * Traverses the value tree and unwraps NodeSchema objects to their primitive values.\n * Preserves collection types (Array, Set, Map) and component inline values.\n *\n * @param value - Value that may contain nested NodeSchema objects\n * @returns Primitive value with all NodeSchema wrappers removed\n */\nfunction extractPrimitiveValue(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (isUnfoldedNodeSchema(value)) {\n return extractPrimitiveValue(value.value);\n }\n\n if (Array.isArray(value)) {\n return value.map(extractPrimitiveValue);\n }\n\n if (value instanceof Set) {\n const extracted = new Set();\n value.forEach((item) => extracted.add(extractPrimitiveValue(item)));\n return extracted;\n }\n\n if (value instanceof Map) {\n const extracted = new Map();\n value.forEach((val, key) => extracted.set(key, extractPrimitiveValue(val)));\n return extracted;\n }\n\n // ComponentNodeInlineValue has Maps that must be preserved\n if (typeof value === 'object' && 'componentType' in value && value.componentType) {\n return value;\n }\n\n if (typeof value === 'object') {\n const extracted: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n extracted[key] = extractPrimitiveValue(val);\n }\n return extracted;\n }\n\n return value;\n}\n\n/**\n * Normalizes raw values by detecting formulas and extracting primitives.\n *\n * Performs schema unfolding to handle formula detection (e.g., \"={{...}}\" or \"=...\"),\n * then extracts primitive values from the resulting NodeSchema structure.\n *\n * @param rawValue - Raw value that may be a formula string or contain nested schemas\n * @param valueType - Expected type of the value after normalization\n * @returns ComputationSchema if value is a formula, otherwise primitive value\n */\nexport function normalizeValue(rawValue: unknown, valueType: ValueType): unknown {\n // Handle runtime Set values directly - they don't need unfolding.\n // This occurs when Set-typed variables are passed to functions expecting arrays.\n // The function implementations (e.g., filterIn) handle both arrays and Sets.\n if (rawValue instanceof Set) {\n return rawValue;\n }\n\n const schema = unfoldNodeSchema(rawValue, valueType);\n\n if (schema.computation) {\n return schema.computation;\n }\n\n return extractPrimitiveValue(schema.value);\n}\n","import { IComputedValue } from 'mobx';\n\nimport { EvalState } from '../eval-state';\nimport { ArgType } from '../function';\nimport { normalizeValue } from './normalize-value';\n\n/**\n * Sentinel value for arguments that have not yet been evaluated.\n * Distinguishes unevaluated arguments from arguments that evaluated to null.\n */\nexport const NOT_EVALUATED = Symbol('NOT_EVALUATED');\n\ntype EvalArgumentsResult = {\n values: unknown[];\n allEvaluated: boolean;\n anyEvaluating: boolean;\n anyFailed: boolean;\n};\n\nexport type EvalArgumentsCtx = {\n computedArgs: IComputedValue<EvalState>[];\n argsTypes: Array<ArgType>;\n};\n\n/**\n * Evaluates function arguments and aggregates evaluation states.\n * Returns values array with NOT_EVALUATED symbol for unevaluated arguments.\n */\nexport function evaluateArguments(ctx: EvalArgumentsCtx): EvalArgumentsResult {\n const { computedArgs, argsTypes } = ctx;\n const values: unknown[] = [];\n\n let allEvaluated = true;\n let anyEvaluating = false;\n let anyFailed = false;\n\n for (let i = 0; i < computedArgs.length; i++) {\n const { value: rawValue, hasResult, evaluating, failed } = computedArgs[i].get();\n\n if (evaluating) {\n anyEvaluating = true;\n }\n if (failed) {\n anyFailed = true;\n }\n\n if (!hasResult) {\n allEvaluated = false;\n values.push(NOT_EVALUATED);\n } else {\n if (!argsTypes[i]) {\n throw new Error(\n `Argument type definition missing for argument ${i}. ` +\n `Expected ${argsTypes.length} arguments but got ${computedArgs.length}.`,\n );\n }\n values.push(normalizeValue(rawValue, argsTypes[i].valueType));\n }\n }\n\n return { values, allEvaluated, anyEvaluating, anyFailed };\n}\n","import { observable, runInAction, untracked } from 'mobx';\nimport { isObservable, Observable as RxObservable } from 'rxjs';\n\nimport { ObservableValue, PromiseValue } from './async-value';\n\n/**\n * Wraps async values (Promises, RxJS Observables) in MobX-tracked structures.\n *\n * Returns PromiseValue for Promises, ObservableValue for Observables, or the value unchanged.\n */\nexport function toObservable(result: unknown): PromiseValue | ObservableValue | unknown {\n if (result instanceof Promise) {\n return untracked(() => {\n const asyncValue = observable.object<PromiseValue>({\n kind: 'promise',\n current: null,\n error: null,\n pending: true,\n });\n\n result.then(\n (value) => {\n runInAction(() => {\n asyncValue.current = value;\n asyncValue.pending = false;\n asyncValue.error = null;\n });\n },\n (err) => {\n runInAction(() => {\n asyncValue.error = err;\n asyncValue.pending = false;\n asyncValue.current = null;\n });\n },\n );\n\n return asyncValue;\n });\n }\n\n if (isObservable(result)) {\n return untracked(() => {\n const asyncValue = observable.object({\n kind: 'observable' as const,\n current: null as unknown,\n error: null as unknown,\n pending: true,\n subscription: undefined as unknown as ObservableValue['subscription'],\n });\n\n try {\n const subscription = (result as RxObservable<unknown>).subscribe({\n next: (value) => {\n runInAction(() => {\n asyncValue.current = value;\n asyncValue.pending = false;\n asyncValue.error = null;\n });\n },\n error: (err) => {\n runInAction(() => {\n asyncValue.error = err;\n asyncValue.pending = false;\n });\n },\n complete: () => {\n runInAction(() => {\n asyncValue.pending = false;\n });\n },\n });\n\n runInAction(() => {\n asyncValue.subscription = subscription;\n });\n } catch (error) {\n runInAction(() => {\n asyncValue.error = error;\n asyncValue.pending = false;\n asyncValue.current = null;\n });\n }\n\n return asyncValue as ObservableValue;\n });\n }\n\n return result;\n}\n","import { computed, IComputedValue } from 'mobx';\n\nimport { EvalState } from '../eval-state';\nimport { EvalContext, ImperativeFunctionDefinition, ReactiveFunctionDefinition } from '../function';\nimport { parseSignature } from '../parse-signature';\nimport { evaluateArguments } from './evaluate-arguments';\nimport { toObservable } from './to-observable';\n\n/**\n * Wraps an imperative function to work in the reactive pipeline.\n * Unwraps computed arguments to plain values and propagates argument states.\n */\nexport function wrapImperativeAsReactive(imperativeDef: ImperativeFunctionDefinition): ReactiveFunctionDefinition {\n const { params } = parseSignature(imperativeDef.signature);\n const argsTypes = params.map((p) => ({ valueType: p }));\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const createComputed = (computedArgs: IComputedValue<EvalState>[], invoke: (...args: any[]) => unknown) => {\n return computed(() => {\n const { values, allEvaluated, anyEvaluating, anyFailed } = evaluateArguments({\n computedArgs,\n argsTypes,\n });\n\n if (!allEvaluated || anyFailed) {\n return {\n returnValue: null,\n argsEvaluated: false,\n argsEvaluating: anyEvaluating,\n argsFailed: anyFailed,\n };\n }\n\n try {\n const result = invoke(...values);\n return {\n returnValue: toObservable(result),\n argsEvaluated: true,\n argsEvaluating: anyEvaluating,\n argsFailed: anyFailed,\n };\n } catch (error) {\n return {\n returnValue: { kind: 'promise' as const, current: null, error, pending: false },\n argsEvaluated: true,\n argsEvaluating: anyEvaluating,\n argsFailed: anyFailed,\n };\n }\n });\n };\n\n if (imperativeDef.contextual) {\n return {\n kind: 'reactive',\n contextual: true,\n execute: (ctx: EvalContext, computedArgs: IComputedValue<EvalState>[]) =>\n createComputed(computedArgs, (...values) => imperativeDef.execute(ctx, ...values)),\n signature: imperativeDef.signature,\n };\n } else {\n return {\n kind: 'reactive',\n execute: (computedArgs: IComputedValue<EvalState>[]) => createComputed(computedArgs, imperativeDef.execute),\n signature: imperativeDef.signature,\n };\n }\n}\n","import { FunctionDefinition, ReactiveFunctionDefinition } from '../function';\nimport { wrapImperativeAsReactive } from './wrap-imperative-function';\n\n/**\n * Ensures a function definition is reactive.\n *\n * This utility function provides a consistent way to convert any function definition\n * into a reactive version that works with MobX computed values. Reactive functions\n * are required for the evaluation pipeline to support lazy evaluation and proper\n * dependency tracking.\n *\n * @param definition - Either an imperative or reactive function definition\n * @returns A reactive function definition. If the input was already reactive,\n * returns it unchanged. If imperative, wraps it using wrapImperativeAsReactive.\n *\n * @example\n * ```typescript\n * // Register a function, ensuring it's reactive\n * const reactiveFn = ensureReactive(myImperativeFunction);\n * defStore.setFunction('myFn', reactiveFn);\n * ```\n */\nexport function ensureReactive(definition: FunctionDefinition): ReactiveFunctionDefinition {\n if (definition.kind === 'reactive') {\n return definition;\n } else {\n return wrapImperativeAsReactive(definition);\n }\n}\n","import { log } from '@kaskad/config';\n\nimport { FunctionDefinition } from './function';\nimport { parseSignature } from './parse-signature';\n\n/**\n * Validates that a function definition's signature string matches its execute function.\n *\n * Performs basic parameter count validation to catch common mistakes.\n * Runs at function registration time (once per function), not on every invocation.\n *\n * @param name - Function identifier for error messages\n * @param definition - Function definition to validate\n * @throws {Error} When signature is malformed or parameter count exceeds declaration\n */\nexport function validateFunctionSignature(name: string, definition: FunctionDefinition): void {\n try {\n const { params, variadic } = parseSignature(definition.signature);\n\n if (definition.kind === 'imperative') {\n const ctxOffset = definition.contextual ? 1 : 0; // +1 for ctx parameter if contextual\n const expectedLength = params.length + ctxOffset;\n const actualLength = definition.execute.length;\n\n // Validate only when execute has MORE parameters than declared in signature.\n // We allow fewer because function.length excludes default parameters.\n // Example: execute(ctx, a, b = 5) has length 2, even with signature '(a, b) => result'\n if (actualLength > 0 && actualLength > expectedLength && !variadic) {\n throw new Error(\n `Function \"${name}\": execute function has more parameters (${actualLength - ctxOffset}) than signature declares (${params.length}). ` +\n `Signature: ${definition.signature}`,\n );\n }\n } else {\n // Reactive functions: contextual receives (ctx, args), pure receives just (args)\n const actualLength = definition.execute.length;\n const expectedLength = definition.contextual ? 2 : 1;\n if (actualLength !== expectedLength) {\n log.warn(\n `Function \"${name}\": reactive execute should take exactly ${expectedLength} parameter(s) ${definition.contextual ? '(ctx, args)' : '(args)'}. Got ${actualLength}. ` +\n `This is unusual but may be intentional.`,\n );\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Function \"${name}\": Invalid signature - ${error.message}`);\n }\n throw error;\n }\n}\n\n/**\n * Validates all functions in a registry.\n *\n * Useful for bulk validation in test setup or during application initialization.\n * Throws on the first invalid function encountered.\n *\n * @param functions - Map of function names to their definitions\n * @throws {Error} When any function has an invalid signature\n */\nexport function validateFunctionRegistry(functions: Record<string, FunctionDefinition>): void {\n for (const [name, definition] of Object.entries(functions)) {\n validateFunctionSignature(name, definition);\n }\n}\n","import { ensureReactive } from './evaluate-function/ensure-reactive';\nimport { FunctionDefinition, ReactiveFunctionDefinition } from './function';\nimport { validateFunctionSignature } from './validate-function-signature';\n\n/**\n * Registry for formula functions.\n * Singleton pattern for global access throughout the application.\n */\nexport class FunctionRegistry {\n private static instance: FunctionRegistry;\n\n // All functions are stored as reactive (imperative ones are wrapped automatically)\n private reactiveFunctions: { [functionType: string]: ReactiveFunctionDefinition } = {};\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private constructor() {}\n\n static getInstance(): FunctionRegistry {\n if (!FunctionRegistry.instance) {\n FunctionRegistry.instance = new FunctionRegistry();\n }\n return FunctionRegistry.instance;\n }\n\n static reset(): FunctionRegistry {\n FunctionRegistry.instance = new FunctionRegistry();\n return FunctionRegistry.instance;\n }\n\n /**\n * Register multiple formula functions at once.\n * Automatically wraps imperative functions as reactive.\n */\n setFunctions(definitions: Record<string, FunctionDefinition>): void {\n for (const [functionType, definition] of Object.entries(definitions)) {\n this.setFunction(functionType, definition);\n }\n }\n\n /**\n * Register a formula function.\n *\n * Accepts both reactive and imperative definitions. Imperative definitions are\n * automatically wrapped as reactive. The registry stores all functions as ReactiveFunctionDefinition.\n *\n * In development mode, validates that the signature matches the execute function.\n *\n * @param functionType - Unique identifier for the function\n * @param definition - Function definition (imperative or reactive)\n */\n setFunction(functionType: string, definition: FunctionDefinition): void {\n // Validate signature in development\n validateFunctionSignature(functionType, definition);\n\n this.reactiveFunctions[functionType] = ensureReactive(definition);\n }\n\n /**\n * Get a registered formula function.\n * @throws Error if function is not found\n */\n getFunction(functionType: string): ReactiveFunctionDefinition {\n const definition = this.reactiveFunctions[functionType];\n if (!definition) {\n throw new Error(`Function \"${functionType}\" not found`);\n }\n return definition;\n }\n\n /**\n * Get all registered function names.\n */\n getFunctionNames(): string[] {\n return Object.keys(this.reactiveFunctions);\n }\n\n /**\n * Check if a function is registered.\n */\n hasFunction(functionType: string): boolean {\n return !!this.reactiveFunctions[functionType];\n }\n}\n","import { Subscription } from 'rxjs';\n\n/**\n * Wrapper for Promise values tracked by MobX.\n * Current value is cleared on rejection; pending becomes false after resolution or rejection.\n */\nexport interface PromiseValue {\n kind: 'promise';\n current: unknown;\n error: unknown;\n pending: boolean;\n}\n\n/**\n * Wrapper for RxJS Observable values tracked by MobX.\n * Current value is preserved on error; pending becomes false after first emission or completion.\n */\nexport interface ObservableValue {\n kind: 'observable';\n current: unknown;\n error: unknown;\n pending: boolean;\n subscription: Subscription;\n}\n\n/**\n * Discriminated union for async values.\n * Use the `kind` field to distinguish between Promise and Observable.\n */\nexport type AsyncValue = PromiseValue | ObservableValue;\n\n/** Type guard for AsyncValue. */\nexport function isAsyncValue(obj: unknown): obj is AsyncValue {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'kind' in obj &&\n (obj.kind === 'promise' || obj.kind === 'observable') &&\n 'current' in obj &&\n 'error' in obj &&\n 'pending' in obj\n );\n}\n\n/** Type guard for PromiseValue. */\nexport function isPromiseValue(obj: unknown): obj is PromiseValue {\n return isAsyncValue(obj) && obj.kind === 'promise';\n}\n\n/** Type guard for ObservableValue. */\nexport function isObservableValue(obj: unknown): obj is ObservableValue {\n return isAsyncValue(obj) && obj.kind === 'observable';\n}\n","import { computed, IComputedValue, IReactionDisposer } from 'mobx';\nimport { Subscription } from 'rxjs';\n\nimport { debugName } from '../constants';\nimport { FunctionExecutionState } from '../eval-state';\nimport { evaluateNode } from '../evaluate-node';\nimport { EvalContext } from '../function';\nimport { FunctionRegistry } from '../function-registry';\nimport { FunctionEvalNode } from '../types';\nimport { isObservableValue } from './async-value';\n\n/**\n * Manages RxJS subscription lifecycle across function re-evaluations.\n */\nconst createSubscriptionTracker = (): [\n updateFn: (result: FunctionExecutionState) => void,\n cleanupFn: IReactionDisposer,\n] => {\n let currentSubscription: Subscription | null = null;\n\n const updateSubscription = (result: FunctionExecutionState) => {\n const newSubscription = isObservableValue(result.returnValue) ? result.returnValue.subscription : null;\n\n if (currentSubscription !== null && currentSubscription !== newSubscription) {\n if (typeof currentSubscription.unsubscribe === 'function') {\n currentSubscription.unsubscribe();\n }\n }\n\n currentSubscription = newSubscription;\n };\n\n const cleanupDisposer = (() => {\n if (currentSubscription && typeof currentSubscription.unsubscribe === 'function') {\n currentSubscription.unsubscribe();\n }\n currentSubscription = null;\n }) as IReactionDisposer;\n\n return [updateSubscription, cleanupDisposer];\n};\n\n/**\n * Executes a function and returns its reactive state with cleanup handlers.\n */\nexport const executeFunction = (\n evalNode: FunctionEvalNode,\n context: EvalContext,\n): [\n computed: IComputedValue<FunctionExecutionState>,\n disposer: IReactionDisposer,\n argDisposers: IReactionDisposer[],\n] => {\n const fnRegistry = FunctionRegistry.getInstance();\n\n const argResults = evalNode.args.map((arg) => evaluateNode(arg, context));\n const computedArgs = argResults.map((result) => result.computed);\n const argDisposers = argResults.flatMap((result) => result.disposers);\n\n const fnDefinition = fnRegistry.getFunction(evalNode.name);\n\n try {\n const resultComputed = fnDefinition.contextual\n ? fnDefinition.execute(context, computedArgs)\n : fnDefinition.execute(computedArgs);\n\n const [updateSubscription, cleanupDisposer] = createSubscriptionTracker();\n\n const executionResultComputed = computed(\n () => {\n const result = resultComputed.get();\n updateSubscription(result);\n return result;\n },\n {\n name: debugName(context, evalNode.name),\n },\n );\n\n return [executionResultComputed, cleanupDisposer, argDisposers];\n } catch (error) {\n const src = context.sourceUrl ? `[${context.sourceUrl}] ` : '';\n if (error instanceof Error) {\n const message = [\n `${src}Function \"${evalNode.name}\" failed`,\n error.message,\n `\\nContext:\\n Component: ${context.componentId}`,\n ].join('\\n');\n\n throw new Error(message, { cause: error });\n } else {\n throw new Error(`${src}Function \"${evalNode.name}\" failed: ${String(error)}`, { cause: error });\n }\n }\n};\n","import { IComputedValue, isComputed } from 'mobx';\n\nexport function isComputedValue(value: unknown): value is IComputedValue<unknown> {\n return isComputed(value);\n}\n","import { toJS } from 'mobx';\n\nimport { isComputedValue } from '../util/is-observable-value';\nimport { isAsyncValue } from './async-value';\n\n/**\n * Extracts evaluation state from return values, unwrapping AsyncValue wrappers.\n */\nexport function getReturnValueState(source: unknown): {\n value: unknown;\n evaluating: boolean;\n failed: boolean;\n error: unknown;\n} {\n let rawValue: unknown;\n let evaluating = false;\n let failed = false;\n let error: unknown = null;\n\n if (isAsyncValue(source)) {\n rawValue = toJS(source.current);\n evaluating = source.pending;\n failed = !!source.error;\n error = source.error ?? null;\n } else {\n try {\n rawValue = isComputedValue(source) ? source.get() : source;\n } catch (e) {\n rawValue = null;\n failed = true;\n error = e;\n }\n }\n\n return {\n value: rawValue,\n evaluating,\n failed,\n error,\n };\n}\n","import { comparer, computed } from 'mobx';\n\nimport { debugName } from '../constants';\nimport { EvalState } from '../eval-state';\nimport { EvaluationResult } from '../evaluation-result';\nimport { EvalContext } from '../function';\nimport { FunctionEvalNode } from '../types';\nimport { executeFunction } from './execute-function';\nimport { getReturnValueState } from './get-return-value-state';\n\n/**\n * Evaluates a function call with reactive state tracking.\n * Supports synchronous values, Promises, and RxJS Observables.\n */\nexport function evaluateFunction(evalNode: FunctionEvalNode, context: EvalContext): EvaluationResult<EvalState> {\n const [executionResult, functionDisposer, argDisposers] = executeFunction(evalNode, context);\n\n return {\n computed: computed(\n () => {\n const { returnValue, argsEvaluated, argsEvaluating, argsFailed } = executionResult.get();\n const returnValueState = getReturnValueState(returnValue);\n\n return {\n value: returnValueState.value,\n hasResult: argsEvaluated && !returnValueState.evaluating,\n evaluating: argsEvaluating || returnValueState.evaluating,\n failed: argsFailed || returnValueState.failed,\n error: returnValueState.error,\n };\n },\n {\n equals: comparer.structural,\n name: debugName(context, evalNode.name),\n },\n ),\n disposers: [functionDisposer, ...argDisposers],\n };\n}\n","import { comparer, computed, IComputedValue } from 'mobx';\n\nimport { debugName } from './constants';\nimport { EvalState } from './eval-state';\nimport { evaluateNode } from './evaluate-node';\nimport { EvaluationResult } from './evaluation-result';\nimport { EvalContext } from './function';\nimport { ObjectEvalNode } from './types';\n\nexport function evaluateObject(evalNode: ObjectEvalNode, context: EvalContext): EvaluationResult<EvalState> {\n const propertyResults = evalNode.properties.map((property) => {\n const keyResult = evaluateNode(property.key, context);\n const valueResult = evaluateNode(property.value, context);\n\n return { keyResult, valueResult };\n });\n\n const entriesComputeds: Array<[IComputedValue<EvalState>, IComputedValue<EvalState>]> = propertyResults.map(\n ({ keyResult, valueResult }) => [keyResult.computed, valueResult.computed],\n );\n\n const disposers = propertyResults.flatMap(({ keyResult, valueResult }) => [\n ...keyResult.disposers,\n ...valueResult.disposers,\n ]);\n\n return {\n computed: computed(\n () => {\n const states = entriesComputeds.map(\n ([keyComputed, valueComputed]) => [keyComputed.get(), valueComputed.get()] as const,\n );\n const evaluating = states.some(([k, v]) => k.evaluating || v.evaluating);\n const failed = states.some(([k, v]) => k.failed || v.failed);\n const error = states.flatMap(([k, v]) => [k, v]).find((s) => s.error != null)?.error ?? null;\n const value = Object.fromEntries(states.map(([k, v]) => [k.value, v.value]));\n\n return { value, evaluating, hasResult: !evaluating, failed, error };\n },\n {\n equals: comparer.structural,\n name: debugName(context, 'object-literal'),\n },\n ),\n disposers,\n };\n}\n","import { computed } from 'mobx';\n\nimport { EvalState } from './eval-state';\nimport { EvaluationResult } from './evaluation-result';\nimport { ValueEvalNode } from './types';\n\nexport function evaluateValue(node: ValueEvalNode): EvaluationResult<EvalState> {\n return {\n computed: computed(() => ({\n value: node.value,\n evaluating: false,\n hasResult: true,\n failed: false,\n error: null,\n })),\n disposers: [],\n };\n}\n","import { EvalState } from './eval-state';\nimport { evaluateArray } from './evaluate-array';\nimport { evaluateError } from './evaluate-error';\nimport { evaluateFunction } from './evaluate-function';\nimport { evaluateObject } from './evaluate-object';\nimport { evaluateValue } from './evaluate-value';\nimport { EvaluationResult } from './evaluation-result';\nimport { EvalContext } from './function';\nimport { ArrayEvalNode, ErrorEvalNode, EvalNode, FunctionEvalNode, ObjectEvalNode, ValueEvalNode } from './types';\n\nconst delegates: Record<string, (evalNode: EvalNode, context: EvalContext) => EvaluationResult<EvalState>> = {\n function: (evalNode, context) => evaluateFunction(evalNode as FunctionEvalNode, context),\n value: (evalNode) => evaluateValue(evalNode as ValueEvalNode),\n array: (evalNode, context) => evaluateArray(evalNode as ArrayEvalNode, context),\n object: (evalNode, context) => evaluateObject(evalNode as ObjectEvalNode, context),\n error: (evalNode) => evaluateError(evalNode as ErrorEvalNode),\n};\n\nexport function evaluateNode<S extends EvalState = EvalState>(\n evalNode: EvalNode,\n context: EvalContext,\n): EvaluationResult<S> {\n const delegate = delegates[evalNode.type];\n if (!delegate) {\n throw new Error(`Unknown eval node type: \"${evalNode.type}\"`);\n }\n\n return delegate(evalNode, context) as EvaluationResult<S>;\n}\n","import { EvalState, FunctionExecutionState } from '../eval-state';\n\n/**\n * Helper for building FunctionExecutionState in reactive functions.\n * Tracks argument evaluation states and provides early-return helpers.\n */\nexport class FunctionExecutionStateBuilder {\n private argsEvaluating = false;\n private argsFailed = false;\n\n /** Track state from an argument. */\n trackArg(argState: EvalState): void {\n if (argState.evaluating) this.argsEvaluating = true;\n if (argState.failed) this.argsFailed = true;\n }\n\n /** Signal evaluating state from inside the function body (not from an arg). */\n markEvaluating(): void {\n this.argsEvaluating = true;\n }\n\n /** Check if argument is ready. Returns state to return early if not ready, null otherwise. */\n checkReady(argState: EvalState): FunctionExecutionState | null {\n this.trackArg(argState);\n\n if (!argState.hasResult) {\n return this.notReady();\n }\n\n return null;\n }\n\n /** Return state when arguments are not ready. */\n notReady(): FunctionExecutionState {\n return {\n returnValue: null,\n argsEvaluated: false,\n argsEvaluating: this.argsEvaluating,\n argsFailed: this.argsFailed,\n };\n }\n\n /** Return successful state with a value. */\n success(value: unknown): FunctionExecutionState {\n return {\n returnValue: value,\n argsEvaluated: true,\n argsEvaluating: this.argsEvaluating,\n argsFailed: this.argsFailed,\n };\n }\n}\n","// Main evaluation function\nexport { evaluateNode } from './lib/evaluate-node';\n\n// Eval node types (input to evaluateNode)\nexport type {\n EvalNode,\n ValueEvalNode,\n ArrayEvalNode,\n ObjectEvalNode,\n ObjectEvalNodeField,\n FunctionEvalNode,\n ErrorEvalNode,\n} from './lib/types';\n\nexport type { EvalState, FunctionExecutionState } from './lib/eval-state';\nexport type {\n EvalContext,\n FunctionDefinition,\n ImperativeFunctionDefinition,\n ReactiveFunctionDefinition,\n} from './lib/function';\n\n// Function registry for managing custom functions\nexport { FunctionRegistry } from './lib/function-registry';\n\n// Utilities for building advanced reactive functions\nexport { FunctionExecutionStateBuilder } from './lib/evaluate-function/function-execution-state-builder';\nexport type { PromiseValue } from './lib/evaluate-function/async-value';\nexport { wrapImperativeAsReactive } from './lib/evaluate-function/wrap-imperative-function';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@kaskad/eval-tree",
3
- "version": "0.0.9",
3
+ "version": "0.0.10",
4
4
  "peerDependencies": {
5
- "@kaskad/config": "0.0.9",
6
- "@kaskad/types": "0.0.9",
7
- "@kaskad/schema": "0.0.9",
5
+ "@kaskad/config": "0.0.10",
6
+ "@kaskad/types": "0.0.10",
7
+ "@kaskad/schema": "0.0.10",
8
8
  "mobx": "^6.13.7",
9
9
  "rxjs": "~7.8.0"
10
10
  },
@@ -128,7 +128,11 @@ interface FunctionEvalNode extends AbstractEvalNode {
128
128
  name: string;
129
129
  args: EvalNode[];
130
130
  }
131
- type EvalNode = ValueEvalNode | ArrayEvalNode | ObjectEvalNode | FunctionEvalNode;
131
+ interface ErrorEvalNode extends AbstractEvalNode {
132
+ type: 'error';
133
+ error: unknown;
134
+ }
135
+ type EvalNode = ValueEvalNode | ArrayEvalNode | ObjectEvalNode | FunctionEvalNode | ErrorEvalNode;
132
136
 
133
137
  declare function evaluateNode<S extends EvalState = EvalState>(evalNode: EvalNode, context: EvalContext): EvaluationResult<S>;
134
138
 
@@ -211,4 +215,4 @@ interface PromiseValue {
211
215
  declare function wrapImperativeAsReactive(imperativeDef: ImperativeFunctionDefinition): ReactiveFunctionDefinition;
212
216
 
213
217
  export { FunctionExecutionStateBuilder, FunctionRegistry, evaluateNode, wrapImperativeAsReactive };
214
- export type { ArrayEvalNode, EvalContext, EvalNode, EvalState, FunctionDefinition, FunctionEvalNode, FunctionExecutionState, ImperativeFunctionDefinition, ObjectEvalNode, ObjectEvalNodeField, PromiseValue, ReactiveFunctionDefinition, ValueEvalNode };
218
+ export type { ArrayEvalNode, ErrorEvalNode, EvalContext, EvalNode, EvalState, FunctionDefinition, FunctionEvalNode, FunctionExecutionState, ImperativeFunctionDefinition, ObjectEvalNode, ObjectEvalNodeField, PromiseValue, ReactiveFunctionDefinition, ValueEvalNode };