MCPcopy
hub / github.com/thesysdev/openui / resolveStateField

Function resolveStateField

packages/lang-core/src/runtime/state-field.ts:14–42  ·  view source on GitHub ↗
(
  name: string,
  bindingValue: unknown,
  store: Store | null,
  evaluationContext: EvaluationContext | null,
  fieldGetter: (fieldName: string) => unknown,
  fieldSetter: (fieldName: string, value: unknown) => void,
)

Source from the content-addressed store, hash-verified

12export type InferStateFieldValue<T> = T extends StateField<infer U> ? U : T;
13
14export function resolveStateField<T = unknown>(
15 name: string,
16 bindingValue: unknown,
17 store: Store | null,
18 evaluationContext: EvaluationContext | null,
19 fieldGetter: (fieldName: string) => unknown,
20 fieldSetter: (fieldName: string, value: unknown) => void,
21): StateField<T> {
22 if (isReactiveAssign(bindingValue) && store && evaluationContext) {
23 const { target, expr } = bindingValue;
24 return {
25 name,
26 value: store.get(target) as T,
27 setValue: (value: T) => {
28 const extraScope: Record<string, unknown> = { $value: value };
29 const nextValue = evaluate(expr, { ...evaluationContext, extraScope });
30 store.set(target, nextValue);
31 },
32 isReactive: true,
33 };
34 }
35
36 return {
37 name,
38 value: (fieldGetter(name) ?? bindingValue) as T,
39 setValue: (value: T) => fieldSetter(name, value),
40 isReactive: false,
41 };
42}

Callers 1

useStateFieldFunction · 0.90

Calls 4

isReactiveAssignFunction · 0.90
evaluateFunction · 0.90
getMethod · 0.65
setMethod · 0.65

Tested by

no test coverage detected