import type { CallbackOrDescriptor, FunctionalityObject } from "./interfaces.ts"; export interface MiddlewareNext { (): TRawResult; callback(callback: (error: object | null, result: Awaited) => TRawResult | Awaited): TRawResult; } type ActivityFn, TActivityName extends keyof TActivities> = TActivities[TActivityName] extends CallbackOrDescriptor ? UFn : never; type ActivityParameter, TActivityName extends keyof TActivities> = TActivities[TActivityName] extends CallbackOrDescriptor<(arg: infer UArg) => any> ? UArg : never; type RealActivityFn, TActivityName extends keyof TActivities> = TActivities[TActivityName] extends CallbackOrDescriptor<(arg: infer UArg) => infer UResult> ? (next: MiddlewareNext, arg: UArg) => UResult : never; export declare class Middleware> { middleware: { [key in keyof TActivities]?: Array>; }; register(activityName: TActivityName, fn: RealActivityFn): void; run(activityName: TActivityName, arg: ActivityParameter, activity: (arg: ActivityParameter) => ReturnType>): ReturnType>; runSync(activityName: TActivityName, arg: ActivityParameter, activity: (arg: ActivityParameter) => ReturnType>): ReturnType>; } export type MiddlewareHandlers> = { [key in keyof TActivities]?: CallbackOrDescriptor infer UResult ? (next: MiddlewareNext, ...args: UArgs) => UResult : never>; }; export {}; //# sourceMappingURL=middleware.d.ts.map