import type { Operator } from "../Operator"; import type { NonPostableEvt } from "./NonPostableEvt"; import type { CtxLike } from "./CtxLike"; import type { StatefulEvt } from "./StatefulEvt"; import type { Evt } from "./Evt"; export type StateDiff = { prevState: T, newState: T }; export interface StatefulReadonlyEvt extends NonPostableEvt { /** https://docs.evt.land/api/statefulevt#tostateless-ctx */ toStateless(ctx?: CtxLike): Evt; readonly state: T; /** https://docs.evt.land/api/statefulevt#evtdiff */ readonly evtDiff: NonPostableEvt>; /** https://docs.evt.land/api/statefulevt#evtchange */ readonly evtChange: StatefulReadonlyEvt; /** https://docs.evt.land/api/statefulevt#evtchangediff */ readonly evtChangeDiff: NonPostableEvt>; /** https://docs.evt.land/api/statefulevt#pipe */ pipe(): StatefulEvt; pipe( op: Operator.fλ ): StatefulEvt; pipe( op: (data: T) => data is U ): StatefulEvt; pipe( op: (data: T) => boolean ): StatefulEvt; pipe(ctx: CtxLike): StatefulEvt; pipe( ctx: CtxLike, op: Operator.fλ ): StatefulEvt; pipe( ctx: CtxLike, op: (data: T) => data is U ): StatefulEvt; pipe( ctx: CtxLike, op: (data: T) => boolean ): StatefulEvt; pipe( op1: Operator.fλ, op2: Operator.fλ ): StatefulEvt; pipe( op1: Operator.fλ, op2: (data: B) => data is C ): StatefulEvt; pipe( op1: Operator.fλ, op2: (data: B) => boolean ): StatefulEvt; pipe( op1: (data: T) => data is B, op2: Operator.fλ ): StatefulEvt; pipe( op1: (data: T) => boolean, op2: Operator.fλ ): StatefulEvt; pipe( op1: (data: T) => data is B, op2: (data: B) => data is C ): StatefulEvt; pipe( op1: (data: T) => data is B, op2: (data: B) => boolean ): StatefulEvt; pipe( op1: (data: T) => boolean, op2: (data: T) => data is B ): StatefulEvt; pipe( op1: (data: T) => boolean, op2: (data: T) => boolean ): StatefulEvt; pipe( op1: Operator.fλ, op2: Operator.fλ, op3: Operator.fλ ): StatefulEvt; pipe( op1: Operator.fλ, op2: Operator.fλ, op3: Operator.fλ, op4: Operator.fλ ): StatefulEvt; pipe( op1: Operator.fλ, op2: Operator.fλ, op3: Operator.fλ, op4: Operator.fλ ): StatefulEvt; pipe( op1: Operator.fλ, op2: Operator.fλ, op3: Operator.fλ, op4: Operator.fλ, op5: Operator.fλ ): StatefulEvt; pipe( op1: Operator, op2: Operator ): StatefulEvt; pipe( op1: Operator, op2: Operator, op3: Operator ): StatefulEvt; pipe( op1: Operator, op2: Operator, op3: Operator, op4: Operator ): StatefulEvt; pipe( op1: Operator, op2: Operator, op3: Operator, op4: Operator, op5: Operator ): StatefulEvt; pipe( ...ops: [ Operator, ...Operator[] ] ): StatefulEvt; pipe( ...ops: [ Operator, ...Operator[] ] ): StatefulEvt; }