@kaskad/eval-tree 0.0.8 → 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, settled: !evaluating, failed });
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
  *
@@ -200,14 +213,14 @@ function evaluateArguments(ctx) {
200
213
  let anyEvaluating = false;
201
214
  let anyFailed = false;
202
215
  for (let i = 0; i < computedArgs.length; i++) {
203
- const { value: rawValue, settled, evaluating, failed } = computedArgs[i].get();
216
+ const { value: rawValue, hasResult, evaluating, failed } = computedArgs[i].get();
204
217
  if (evaluating) {
205
218
  anyEvaluating = true;
206
219
  }
207
220
  if (failed) {
208
221
  anyFailed = true;
209
222
  }
210
- if (!settled) {
223
+ if (!hasResult) {
211
224
  allEvaluated = false;
212
225
  values.push(NOT_EVALUATED);
213
226
  }
@@ -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: false,
334
- argsFailed: false,
335
- };
336
- }
337
- catch (error) {
338
- return {
339
- returnValue: toObservable(Promise.reject(error)),
340
- argsEvaluated: true,
341
- argsEvaluating: false,
342
- argsFailed: false,
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: false,
374
- argsFailed: false,
375
- };
376
- }
377
- catch (error) {
378
- return {
379
- returnValue: toObservable(Promise.reject(error)),
380
- argsEvaluated: true,
381
- argsEvaluating: false,
382
- argsFailed: false,
383
- };
384
- }
385
- });
386
- },
367
+ execute: (computedArgs) => createComputed(computedArgs, imperativeDef.execute),
387
368
  signature: imperativeDef.signature,
388
369
  };
389
370
  }
@@ -635,24 +616,28 @@ function getReturnValueState(source) {
635
616
  let rawValue;
636
617
  let evaluating = false;
637
618
  let failed = false;
619
+ let error = null;
638
620
  if (isAsyncValue(source)) {
639
621
  rawValue = toJS(source.current);
640
622
  evaluating = source.pending;
641
623
  failed = !!source.error;
624
+ error = source.error ?? null;
642
625
  }
643
626
  else {
644
627
  try {
645
628
  rawValue = isComputedValue(source) ? source.get() : source;
646
629
  }
647
- catch {
630
+ catch (e) {
648
631
  rawValue = null;
649
632
  failed = true;
633
+ error = e;
650
634
  }
651
635
  }
652
636
  return {
653
637
  value: rawValue,
654
638
  evaluating,
655
639
  failed,
640
+ error,
656
641
  };
657
642
  }
658
643
 
@@ -668,9 +653,10 @@ function evaluateFunction(evalNode, context) {
668
653
  const returnValueState = getReturnValueState(returnValue);
669
654
  return {
670
655
  value: returnValueState.value,
671
- settled: argsEvaluated && !returnValueState.evaluating,
656
+ hasResult: argsEvaluated && !returnValueState.evaluating,
672
657
  evaluating: argsEvaluating || returnValueState.evaluating,
673
658
  failed: argsFailed || returnValueState.failed,
659
+ error: returnValueState.error,
674
660
  };
675
661
  }, {
676
662
  equals: comparer.structural,
@@ -693,14 +679,12 @@ function evaluateObject(evalNode, context) {
693
679
  ]);
694
680
  return {
695
681
  computed: computed(() => {
696
- const evaluating = entriesComputeds.some(([keyComputed, valueComputed]) => keyComputed.get().evaluating || valueComputed.get().evaluating);
697
- const failed = entriesComputeds.some(([keyComputed, valueComputed]) => keyComputed.get().failed || valueComputed.get().failed);
698
- const entries = entriesComputeds.map(([keyComputed, valueComputed]) => [
699
- keyComputed.get().value,
700
- valueComputed.get().value,
701
- ]);
702
- const value = Object.fromEntries(entries);
703
- return { value, evaluating, settled: !evaluating, failed };
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 };
704
688
  }, {
705
689
  equals: comparer.structural,
706
690
  name: debugName(context, 'object-literal'),
@@ -714,8 +698,9 @@ function evaluateValue(node) {
714
698
  computed: computed(() => ({
715
699
  value: node.value,
716
700
  evaluating: false,
717
- settled: true,
701
+ hasResult: true,
718
702
  failed: false,
703
+ error: null,
719
704
  })),
720
705
  disposers: [],
721
706
  };
@@ -726,6 +711,7 @@ const delegates = {
726
711
  value: (evalNode) => evaluateValue(evalNode),
727
712
  array: (evalNode, context) => evaluateArray(evalNode, context),
728
713
  object: (evalNode, context) => evaluateObject(evalNode, context),
714
+ error: (evalNode) => evaluateError(evalNode),
729
715
  };
730
716
  function evaluateNode(evalNode, context) {
731
717
  const delegate = delegates[evalNode.type];
@@ -749,10 +735,14 @@ class FunctionExecutionStateBuilder {
749
735
  if (argState.failed)
750
736
  this.argsFailed = true;
751
737
  }
738
+ /** Signal evaluating state from inside the function body (not from an arg). */
739
+ markEvaluating() {
740
+ this.argsEvaluating = true;
741
+ }
752
742
  /** Check if argument is ready. Returns state to return early if not ready, null otherwise. */
753
743
  checkReady(argState) {
754
744
  this.trackArg(argState);
755
- if (!argState.settled) {
745
+ if (!argState.hasResult) {
756
746
  return this.notReady();
757
747
  }
758
748
  return null;
@@ -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, settled: !evaluating, failed },\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, settled, evaluating, failed } = computedArgs[i].get();\n\n if (evaluating) {\n anyEvaluating = true;\n }\n if (failed) {\n anyFailed = true;\n }\n\n if (!settled) {\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: false,\n argsFailed: false,\n };\n } catch (error) {\n return {\n returnValue: toObservable(Promise.reject(error)),\n argsEvaluated: true,\n argsEvaluating: false,\n argsFailed: false,\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: false,\n argsFailed: false,\n };\n } catch (error) {\n return {\n returnValue: toObservable(Promise.reject(error)),\n argsEvaluated: true,\n argsEvaluating: false,\n argsFailed: false,\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} {\n let rawValue: unknown;\n let evaluating = false;\n let failed = false;\n\n if (isAsyncValue(source)) {\n rawValue = toJS(source.current);\n evaluating = source.pending;\n failed = !!source.error;\n } else {\n try {\n rawValue = isComputedValue(source) ? source.get() : source;\n } catch {\n rawValue = null;\n failed = true;\n }\n }\n\n return {\n value: rawValue,\n evaluating,\n failed,\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 settled: argsEvaluated && !returnValueState.evaluating,\n evaluating: argsEvaluating || returnValueState.evaluating,\n failed: argsFailed || returnValueState.failed,\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, settled: !evaluating, failed };\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 settled: true,\n failed: false,\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 /** 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.settled) {\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.8",
3
+ "version": "0.0.10",
4
4
  "peerDependencies": {
5
- "@kaskad/config": "0.0.8",
6
- "@kaskad/types": "0.0.8",
7
- "@kaskad/schema": "0.0.8",
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
  },
@@ -8,9 +8,10 @@ import { Observable } from 'rxjs';
8
8
  interface EvalState<T = unknown> {
9
9
  value: T;
10
10
  evaluating: boolean;
11
- /** True when evaluation has completed (successfully or with failure) */
12
- settled: boolean;
11
+ /** True when a usable value has been produced this evaluation tick */
12
+ hasResult: boolean;
13
13
  failed: boolean;
14
+ error: unknown;
14
15
  }
15
16
  /**
16
17
  * Internal state returned by reactive function execution.
@@ -127,7 +128,11 @@ interface FunctionEvalNode extends AbstractEvalNode {
127
128
  name: string;
128
129
  args: EvalNode[];
129
130
  }
130
- 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;
131
136
 
132
137
  declare function evaluateNode<S extends EvalState = EvalState>(evalNode: EvalNode, context: EvalContext): EvaluationResult<S>;
133
138
 
@@ -182,6 +187,8 @@ declare class FunctionExecutionStateBuilder {
182
187
  private argsFailed;
183
188
  /** Track state from an argument. */
184
189
  trackArg(argState: EvalState): void;
190
+ /** Signal evaluating state from inside the function body (not from an arg). */
191
+ markEvaluating(): void;
185
192
  /** Check if argument is ready. Returns state to return early if not ready, null otherwise. */
186
193
  checkReady(argState: EvalState): FunctionExecutionState | null;
187
194
  /** Return state when arguments are not ready. */
@@ -208,4 +215,4 @@ interface PromiseValue {
208
215
  declare function wrapImperativeAsReactive(imperativeDef: ImperativeFunctionDefinition): ReactiveFunctionDefinition;
209
216
 
210
217
  export { FunctionExecutionStateBuilder, FunctionRegistry, evaluateNode, wrapImperativeAsReactive };
211
- 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 };