import type { AwaitableFn, Fn } from '@rhao/types-base'; import type { HookCallback, HookKeys, Hookable } from 'hookable'; import type { RequestBasicContext, RequestContext } from './context'; import type { RequestState } from './state'; /** * "xxx.d.ts" or "xxx.ts" * * @example * ```ts * declare module '@rhao/request' { * interface RequestConfigHooks { * custom: (value: number) => void // 自定义 hooks * } * } * ``` */ export interface RequestConfigHooks { /** * 执行 `executor()` 时触发,早于 `before`,此时尚未对 `state` 做任何操作,用于处理前置条件 */ preface: AwaitableFn<[params: TParams, context: RequestContext], any>; /** * 执行 `fetcher()` 前触发 */ before: AwaitableFn<[params: TParams, context: RequestContext], any>; /** * 执行 `fetcher()` 成功时触发 */ success: AwaitableFn<[data: TData, context: RequestContext], any>; /** * 执行 `fetcher()` 错误时触发 */ error: AwaitableFn<[error: Error & { cause?: any; }, context: RequestContext], any>; /** * 执行 `fetcher()` 后成功或失败后触发,取消执行时不触发 */ after: AwaitableFn<[ state: RequestState, context: RequestContext ], any>; /** * 执行 `executor()` 结束时触发,同 `Promise.finally`,每次执行均会触发该事件,用于释放资源 */ finally: AwaitableFn<[context: RequestContext], any>; /** * 主动调用 `dispose()` 时触发,用于释放资源 */ dispose: AwaitableFn<[context: RequestBasicContext], any>; /** * 执行 `cancel()` 时触发 */ cancel: AwaitableFn<[ state: RequestState, context: RequestContext ], any>; /** * 执行 `cancel()` 时由于竞态条件而被取消请求时触发 */ discarded: AwaitableFn<[context: RequestContext], any>; /** * `state` 变更时触发,参数为本次变更的 `state` */ stateChange: Fn<[ state: Partial>, context: RequestBasicContext ], any>; } export type RequestHookable = Hookable & { callHookSync = HookKeys>(name: NameT, ...arguments_: Parameters): void; }; export declare function syncSerialTaskCaller>(hooks: T[], args: P): void; export declare function createHooks(): RequestHookable;