import { Context } from './context' import { Update } from './core/types/typegram' /* next's parameter is in a contravariant position, and thus, trying to type it prevents assigning `MiddlewareFn` to `MiddlewareFn`. Middleware passing the parameter should be a separate type instead. */ export type MiddlewareFn, U extends Update = Update> = ( ctx: C, next: () => Promise ) => Promise | void export interface MiddlewareObj< C extends Context, U extends Update = Update, > { middleware: () => MiddlewareFn } export type Middleware, U extends Update = Update> = | MiddlewareFn | MiddlewareObj