import { StateWire } from '../state-wire/state-wire'; import { Defined, isDefined } from '../utils/type-utils'; import { Interceptor } from './interceptor'; export function createInterceptor = StateWire>( ctx: C, initialInterceptor: Interceptor, ): [C, (i: Interceptor) => void] { let interceptor = initialInterceptor; const setInterceptor = (newInterceptor: Interceptor) => { interceptor = newInterceptor; }; const setValue = (value: Defined) => { const preValue = ctx.getValue(); const nextValue = interceptor(value, preValue); if (isDefined(nextValue)) { ctx.setValue(nextValue); } }; return [{ ...ctx, setValue }, setInterceptor]; }