Files
NapCatQQ/.pnpm-store/v3/files/fc/9d9cb75a69fe572c7a00799aba3fc259ae8eb1d0ee5afa3b785d920786e619f5075f0f00f461a6beac0821ccfced44cb645b938717d71954b7811ee4b64935
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

83 lines
2.6 KiB
Plaintext

import type { Dispatch, Middleware, MiddlewareAPI, UnknownAction } from 'redux'
import type { BaseActionCreator, PayloadAction } from '../createAction'
import type { GetState } from '../createAsyncThunk'
import type { ExtractDispatchExtensions, FallbackIfUnknown } from '../tsHelpers'
export type GetMiddlewareApi<MiddlewareApiConfig> = MiddlewareAPI<
GetDispatchType<MiddlewareApiConfig>,
GetState<MiddlewareApiConfig>
>
export type MiddlewareApiConfig = {
state?: unknown
dispatch?: Dispatch
}
// TODO: consolidate with cAT helpers?
export type GetDispatchType<MiddlewareApiConfig> = MiddlewareApiConfig extends {
dispatch: infer DispatchType
}
? FallbackIfUnknown<DispatchType, Dispatch>
: Dispatch
export type AddMiddleware<
State = any,
DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
> = {
(...middlewares: Middleware<any, State, DispatchType>[]): void
withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): AddMiddleware<
GetState<MiddlewareConfig>,
GetDispatchType<MiddlewareConfig>
>
}
export type WithMiddleware<
State = any,
DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
> = BaseActionCreator<
Middleware<any, State, DispatchType>[],
'dynamicMiddleware/add',
{ instanceId: string }
> & {
<Middlewares extends Middleware<any, State, DispatchType>[]>(
...middlewares: Middlewares
): PayloadAction<Middlewares, 'dynamicMiddleware/add', { instanceId: string }>
withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): WithMiddleware<
GetState<MiddlewareConfig>,
GetDispatchType<MiddlewareConfig>
>
}
export interface DynamicDispatch {
// return a version of dispatch that knows about middleware
<Middlewares extends Middleware<any>[]>(
action: PayloadAction<Middlewares, 'dynamicMiddleware/add'>,
): ExtractDispatchExtensions<Middlewares> & this
}
export type MiddlewareEntry<
State = unknown,
DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
> = {
middleware: Middleware<any, State, DispatchType>
applied: Map<
MiddlewareAPI<DispatchType, State>,
ReturnType<Middleware<any, State, DispatchType>>
>
}
export type DynamicMiddleware<
State = unknown,
DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
> = Middleware<DynamicDispatch, State, DispatchType>
export type DynamicMiddlewareInstance<
State = unknown,
DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
> = {
middleware: DynamicMiddleware<State, DispatchType>
addMiddleware: AddMiddleware<State, DispatchType>
withMiddleware: WithMiddleware<State, DispatchType>
instanceId: string
}