import { ComponentType, PropsWithChildren } from 'react'; import { Middleware } from 'handler-chain'; type ComponentResult = ComponentType | false | null | undefined; type ComponentMiddleware = Middleware, Request, Init>; type ResultComponent = ComponentType | false | null | undefined; type UseBuildComponentCallbackOptions = { fallbackComponent?: ResultComponent | undefined; }; interface UseBuildComponentCallback { (request: Request, options?: undefined | UseBuildComponentCallbackOptions): ComponentType | undefined; } type ProviderProps = PropsWithChildren<{ middleware: readonly ComponentMiddleware[]; }> & (Init extends never | void ? { readonly init?: undefined; } : Init extends undefined | void ? { readonly init?: Init; } : { readonly init: Init; }); type ProxyProps = Props & { readonly fallbackComponent?: ComponentType | undefined; readonly request: Request; }; type CreateChainOfResponsibilityOptions = { /** * Allows a middleware to pass another request object when calling its next middleware. Default is false. * * However, middleware could modify the request object before calling its next middleware. It is recommended * to use Object.freeze() to prevent middleware from modifying the request object. */ readonly passModifiedRequest?: boolean | undefined; }; type AsMiddlewareProps = { readonly init: Init; readonly Next: ComponentType>; readonly request: Request; }; type AsMiddlewareComponentProps = Props & { readonly middleware: AsMiddlewareProps; }; type ChainOfResponsibility = { readonly asMiddleware: (middlewareComponent: ComponentType>) => ComponentMiddleware; readonly Provider: ComponentType>; readonly Proxy: ComponentType>; readonly types: { readonly init: Init; readonly middleware: ComponentMiddleware; readonly middlewareComponentProps: AsMiddlewareComponentProps; readonly props: Props; readonly proxyProps: ProxyProps; readonly request: Request; }; readonly useBuildComponentCallback: () => UseBuildComponentCallback; }; declare function createChainOfResponsibility(options?: CreateChainOfResponsibilityOptions): ChainOfResponsibility; export { type CreateChainOfResponsibilityOptions as C, type ComponentMiddleware as a, createChainOfResponsibility as c };