import type { Operator } from "./Operator"; import type { CtxLike, NonPostableEvtLike } from "../types/interfaces"; /** https://docs.evt.land/api/handler */ export declare type Handler | undefined = CtxLike | undefined> = Handler.PropsFromArgs & Handler.PropsFromMethodName & Readonly<{ detach(): boolean; promise: Promise; }>; export declare namespace Handler { /** Handlers params that come from the arguments passed to the method invoked */ type PropsFromArgs | undefined = CtxLike | undefined> = { 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 * ... */ type PropsFromMethodName = PropsFromMethodName.Sync | PropsFromMethodName.Async; 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: NonPostableEvtLike; }; }