import { produce } from 'immer'; import { Limiter } from '../limiter'; import { Operator } from '../operator'; class OverrideOperator> extends Operator { constructor(private propsToOverride: P) { super('override'); } action(items: T[], limiter: Limiter): T[] { return items.map((item, index) => { if (!limiter(item, index)) { return item; } return produce(item, draft => { Object.assign(draft, this.propsToOverride) }); }); } } export function override>(propsToOverride: P): OverrideOperator { return new OverrideOperator(propsToOverride); }