( name: string, bindingValue: unknown, store: Store | null, evaluationContext: EvaluationContext | null, fieldGetter: (fieldName: string) => unknown, fieldSetter: (fieldName: string, value: unknown) => void, )
| 12 | export type InferStateFieldValue<T> = T extends StateField<infer U> ? U : T; |
| 13 | |
| 14 | export 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 | } |
no test coverage detected