import { Operator } from "./Operator"; type EvtCore = import("../EvtCore").EvtCore; type Ctx = import("../Ctx").Ctx; export type Handler | undefined = Ctx | undefined> = Handler.PropsFromArgs & Handler.PropsFromMethodName & Readonly<{ detach(): boolean; promise: Promise; }> ; export namespace Handler { /** Handlers params that come from the arguments passed to the method invoked */ export type PropsFromArgs = { ctx: CtxProp; timeout: number | undefined; op: Operator; callback: ((transformedData: U) => void) | undefined; }; /** Handlers params that are implicitly specified by the method used: * attachOnce => once * attachOncePrepend => once + prepend * waitFor => once + async * ... */ export type PropsFromMethodName = PropsFromMethodName.Sync | PropsFromMethodName.Async; export namespace PropsFromMethodName { type Common = Readonly<{ prepend: true; extract: true; } | { prepend: boolean; extract: false; }>; export type Sync = Common & Readonly<{ async: false; once: boolean; }>; export type Async = Common & Readonly<{ async: true; once: true; }>; } export type WithEvt = { handler: Handler; evt: EvtCore; }; }