UNPKG

@daiso-tech/core

Version:

The library offers flexible, framework-agnostic solutions for modern web applications, built on adaptable components that integrate seamlessly with popular frameworks like Next Js.

61 lines (60 loc) 2.23 kB
/** * @module Resilience */ import { type IReadableContext } from "../../../execution-context/contracts/_module.js"; import { type MiddlewareFn } from "../../../middleware/contracts/_module.js"; import { type ITimeSpan } from "../../../time-span/contracts/_module.js"; import { TimeSpan } from "../../../time-span/implementations/_module.js"; import { type Invokable } from "../../../utilities/_module.js"; /** * IMPORT_PATH: `"@daiso-tech/core/resilience"` * @group Middlewares */ export type OnTimeoutData<TParameters extends Array<unknown> = Array<unknown>> = { waitTime: TimeSpan; args: TParameters; context: IReadableContext; }; /** * IMPORT_PATH: `"@daiso-tech/core/resilience"` * @group Middlewares */ export type OnTimeout<TParameters extends Array<unknown> = Array<unknown>> = Invokable<[data: OnTimeoutData<TParameters>]>; /** * IMPORT_PATH: `"@daiso-tech/core/resilience"` * @group Middlewares */ export type TimeoutCallbacks<TParameters extends Array<unknown> = Array<unknown>> = { /** * Callback {@link Invokable | `Invokable`} that will be called before the timeout occurs. */ onTimeout?: OnTimeout<TParameters>; }; /** * Configuration for the `timeout` resilience middleware. * Rejects if the middleware result does not complete within the specified time; it does not cancel or abort next(). * * IMPORT_PATH: `"@daiso-tech/core/resilience"` * @group Middlewares */ export type TimeoutSettings<TParameters extends Array<unknown> = Array<unknown>> = TimeoutCallbacks<TParameters> & { /** * The maximum time to wait before automatically aborting the executing function. * * @default * ```ts * import { TimeSpan } from "@daiso-tech/core/time-span"; * * TimeSpan.fromSeconds(2) * ``` */ waitTime?: ITimeSpan; }; /** * The `timeout` middleware automatically cancels functions after a specified time period, throwing an error when aborted. * * IMPORT_PATH: `"@daiso-tech/core/resilience"` * @group Middlewares * @throws {TimeoutResilienceError} */ export declare function timeout<TParameters extends Array<unknown>, TReturn>(settings?: NoInfer<TimeoutSettings<TParameters>>): MiddlewareFn<TParameters, Promise<TReturn>>;