import { Observable } from 'rxjs'; import { Draft } from 'immer'; import { Ayanami } from './ayanami'; declare type IfAny = 0 extends 1 & T ? Y : N; declare type IsAny = IfAny; declare type IsVoid = IsAny extends true ? false : [T] extends [void] ? true : false; declare class ArgumentsType<_Arguments extends any[]> { } export declare type ActionMethod | never, R = void> = T extends ArgumentsType ? IsVoid extends true ? () => R : Extract extends never ? (params: Arguments[0]) => R : (params?: Arguments[0]) => R : (params: T) => R; export interface ConstructorOf { new (...args: any[]): T; } export declare type Omit = Pick>; export interface EffectAction { readonly ayanami: Ayanami; readonly actionName: string; readonly params: any; } export interface ReducerAction { readonly actionName: string; readonly params: any; readonly nextState: State; } declare type UnpackEffectFunctionArguments = T extends (...payload: infer Arguments) => Observable ? Arguments[0] extends Observable ? ArgumentsType<[P]> : never : never; declare type UnpackEffectPayload = Func extends () => Observable ? UnpackEffectFunctionArguments extends never ? ArgumentsType<[void]> : UnpackEffectFunctionArguments : Func extends (payload$: Observable) => Observable ? UnpackEffectFunctionArguments : Func extends (payload$: Observable, state$: Observable) => Observable ? UnpackEffectFunctionArguments : never; declare type UnpackReducerFunctionArguments = T extends (state: any, ...payload: infer Arguments) => any ? ArgumentsType : never; declare type UnpackReducerPayload = Func extends () => State ? UnpackReducerFunctionArguments extends never ? ArgumentsType<[void]> : UnpackReducerFunctionArguments : Func extends (state: State) => State ? UnpackReducerFunctionArguments : Func extends (state: State, payload: any) => State ? UnpackReducerFunctionArguments : never; declare type UnpackImmerReducerPayload = Func extends (state: Draft) => void ? UnpackReducerFunctionArguments : Func extends (state: Draft, payload: any) => void ? UnpackReducerFunctionArguments : never; declare type UnpackDefineActionPayload = OB extends Observable ? ArgumentsType<[P]> : never; declare type UnpackPayload = UnpackEffectPayload extends never ? UnpackReducerPayload extends never ? UnpackImmerReducerPayload extends never ? UnpackDefineActionPayload : UnpackImmerReducerPayload : UnpackReducerPayload : UnpackEffectPayload; declare type PayloadMethodKeySet = { [key in SS]: M[key] extends (() => Observable) | ((payload$: Observable) => Observable) | ((payload$: Observable, state$: Observable) => Observable) ? key : M[key] extends (() => S) | ((state: S) => S) | ((state: S, payload: any) => S) ? key : M[key] extends ((state: Draft) => void) | ((state: Draft, payload: any) => void) ? key : M[key] extends Observable ? key : never; }[SS]; export declare type ActionMethodOfAyanami, S> = Pick<{ [key in keyof M]: ActionMethod>; }, PayloadMethodKeySet>>>; export declare type ActionOfAyanami, S> = Pick<{ [key in keyof M]: ActionMethod, EffectAction>; }, PayloadMethodKeySet>>>; export interface ObjectOf { [key: string]: T; } export declare type OriginalEffectActions = ObjectOf<(payload$: Observable, state: Observable) => Observable>>; export declare type OriginalReducerActions = ObjectOf<(state: State, payload: any) => Readonly>; export declare type OriginalImmerReducerActions = ObjectOf<(state: Draft, payload: any) => void>; export declare type OriginalDefineActions = ObjectOf<{ next(params: any): void; observable: Observable; }>; export declare type TriggerActions = ObjectOf>; export declare type EffectActionFactories = ObjectOf<(params: any) => EffectAction>; export {};