export interface Nested { (key: string, ...args: Args): Ret has(key: string): boolean map: Map } export type ExtractArgs = T[keyof T] extends (...args: infer A) => any ? A : any[] export interface DurableState> { (key?: K, ...args: Args): R (target?: T, ext?: T[keyof T], ...args: Args): R } export type MutableState> = T & { (key?: K, fun?: T[K]): MutableState (target?: T, ext?: any): MutableState } export default EventState export type EventState> = T & { (key?: keyof T, fun?: T[keyof T]): EventState (target?: Partial): EventState } export type NestedFun = Fun<[key: string, ...args: Args], Ret> export type DurableFun & any> = Fun<[key: string, ...args: Args]> export type EventFun> = Fun<[...args: Args], EventState> export type Fun = (...args: Args) => Ret export type OverloadedArgs unknown> = T extends { (...args: infer A1): any (...args: infer A2): any } ? A1 | A2 : Parameters export type DurableArgs = OverloadedArgs> export type MutableArgs = OverloadedArgs> export type EventArgs = OverloadedArgs< DurableState<{ [key in keyof T]?: [EventFun] }> > export type RefEvent = EventState< T & { ref: (target: Target) => void mount: (target: Target) => void clean: (target: Target) => void target: Target } >