import { Middleware, NextMiddleware, MiddlewareReturn, LazyMiddlewareFactory, BranchMiddlewareCondition, CaughtMiddlewareHandler } from './types'; /** * Call `next()` in middleware */ export declare const skipMiddleware: (context: T, next: NextMiddleware) => Promise; /** * Does not call `next()` in middleware */ export declare const stopMiddleware: (context: T, next: NextMiddleware) => Promise; /** * Lazily asynchronously gets middleware * * Example: * * ```ts * getLazyMiddleware(async (context) => { * const route = await getSomeRoute(context.path) // Promise; * * return route; * }); * ``` */ export declare const getLazyMiddleware: (factory: LazyMiddlewareFactory) => Middleware; /** * Runs the middleware and force call `next()` * * Example: * * ```ts * getTapMiddleware((context) => { * console.log('Context', context); * }); * ``` */ export declare const getTapMiddleware: (middleware: Middleware) => Middleware; /** * Runs the middleware at the next event loop and force call `next()` * * Example: * * ```ts * getForkMiddleware((context) => { * statisticsMiddlewares(context).catch(console.error); * }); * ``` */ export declare const getForkMiddleware: (middleware: Middleware) => Middleware; /** * By condition splits the middleware * * Example: * * ```ts * getBranchMiddleware( * async context => context.is('Content-Type', 'json'), * myBodyParser.json(), * myBodyParser.urlencoded() * ); * ``` * * Static condition * * ```ts * getBranchMiddleware( * process.env.NODE_ENV === 'production', * logger.loggedContextToFile(), * logger.loggedContextToConsole() * ); * ``` */ export declare const getBranchMiddleware: (condition: BranchMiddlewareCondition, trueMiddleware: Middleware, falseMiddleware: Middleware) => Middleware; /** * Conditionally runs optional middleware or skips middleware * * Example: * * ```ts * getOptionalMiddleware( * context => context.user.isAdmin, * addFieldsForAdmin * ); * ``` */ export declare const getOptionalMiddleware: (condition: BranchMiddlewareCondition, optionalMiddleware: Middleware) => Middleware; /** * Conditionally runs middleware or stops the chain * * Example: * * ```ts * getFilterMiddleware( * context => context.authorized, * middlewareForAuthorized * ); * ``` */ export declare const getFilterMiddleware: (condition: BranchMiddlewareCondition, filterMiddleware: Middleware) => Middleware; /** * Runs the second middleware before the main * * Example: * * ```ts * getBeforeMiddleware( * myMockMiddleware, * ouputUserData * ); * ``` */ export declare const getBeforeMiddleware: (beforeMiddleware: Middleware, middleware: Middleware) => Middleware; /** * Runs the second middleware after the main * * Example: * * ```ts * getAfterMiddleware( * sendSecureData, * clearSecurityData * ); * ``` */ export declare const getAfterMiddleware: (middleware: Middleware, afterMiddleware: Middleware) => Middleware; /** * Runs middleware before and after the main * * Example: * * ```ts * getEnforceMiddleware( * prepareData, * sendData, * clearData * ); */ export declare const getEnforceMiddleware: (beforeMiddleware: Middleware, middleware: Middleware, afterMiddleware: Middleware) => Middleware; /** * Catches errors in the middleware chain * * Example: * ```js * getCaughtMiddleware((context, error) => { * if (error instanceof NetworkError) { * return context.send('Sorry, network issues 😔'); * } * * throw error; * }) * ``` * * Without a snippet, it would look like this: * * ```js * async (context, next) => { * try { * await next(); * } catch (error) { * if (error instanceof NetworkError) { * return context.send('Sorry, network issues 😔'); * } * * throw error; * } * }; * ``` */ export declare const getCaughtMiddleware: (errorHandler: CaughtMiddlewareHandler) => Middleware; /** * Concurrently launches middleware, * the chain will continue if `next()` is called in all middlewares * * **Warning: Error interrupts all others** * * Example: * * ```ts * getConcurrencyMiddleware( * initializeUser, * initializeSession, * initializeDatabase * ); * ``` */ export declare const getConcurrencyMiddleware: (middlewares: Middleware[]) => Middleware;