axios-miniprogram/src/core/InterceptorManager.ts

96 lines
1.6 KiB
TypeScript
Raw Normal View History

2023-03-23 20:09:00 +08:00
export interface InterceptorResolved<T = unknown> {
(value: T): T | Promise<T>;
}
2023-04-09 15:20:10 +08:00
export interface InterceptorRejected<T = unknown> {
(error: unknown): T | Promise<T>;
2023-03-23 20:09:00 +08:00
}
2023-04-26 21:03:00 +08:00
/**
*
*/
2023-03-23 20:09:00 +08:00
export interface Interceptor<T = unknown> {
2023-04-26 21:03:00 +08:00
/**
*
*/
2023-03-23 20:09:00 +08:00
resolved: InterceptorResolved<T>;
2023-04-26 21:03:00 +08:00
/**
*
*/
2023-04-09 15:20:10 +08:00
rejected?: InterceptorRejected<T>;
2023-03-23 20:09:00 +08:00
}
2023-04-09 15:20:10 +08:00
export interface InterceptorExecutor<T = unknown> {
(interceptor: Interceptor<T>): void;
2023-03-23 20:09:00 +08:00
}
2023-04-26 21:03:00 +08:00
/**
*
*/
2023-03-23 20:09:00 +08:00
export default class InterceptorManager<T = unknown> {
2023-04-26 21:03:00 +08:00
/**
*
*/
#id = 0;
2023-03-23 20:09:00 +08:00
2023-04-26 21:03:00 +08:00
/**
*
*/
2023-04-17 19:27:44 +08:00
#interceptors = new Map<number, Interceptor<T>>();
2023-04-26 21:03:00 +08:00
/**
2023-05-14 21:44:08 +08:00
* @internal
*
2023-04-26 21:03:00 +08:00
*
*/
2023-04-17 19:27:44 +08:00
get size() {
return this.#interceptors.size;
}
2023-03-23 20:09:00 +08:00
2023-04-26 21:03:00 +08:00
/**
*
*
* @param resolved
* @param rejected
* @returns
*/
use(
2023-03-23 20:09:00 +08:00
resolved: InterceptorResolved<T>,
2023-04-09 15:20:10 +08:00
rejected?: InterceptorRejected<T>,
2023-03-23 20:09:00 +08:00
): number {
2023-04-17 19:27:44 +08:00
this.#interceptors.set(++this.#id, {
2023-03-23 20:09:00 +08:00
resolved,
rejected,
2023-04-17 19:27:44 +08:00
});
2023-03-23 20:09:00 +08:00
return this.#id;
2023-03-23 20:09:00 +08:00
}
2023-04-26 21:03:00 +08:00
/**
*
*
* @param id
*/
2023-04-17 19:27:44 +08:00
eject(id: number): boolean {
return this.#interceptors.delete(id);
}
2023-04-26 21:03:00 +08:00
/**
*
*/
2023-04-17 19:27:44 +08:00
clear() {
this.#interceptors.clear();
2023-03-23 20:09:00 +08:00
}
2023-04-26 21:03:00 +08:00
/**
2023-05-14 21:44:08 +08:00
* @internal
*
2023-04-26 21:03:00 +08:00
*
*
* @param executor
*/
2023-04-17 19:27:44 +08:00
forEach(executor: InterceptorExecutor<T>): void {
this.#interceptors.forEach(executor);
2023-03-23 20:09:00 +08:00
}
}