import {createSelector, CreateSelectorOptions} from 'reselect'; type $Values = T[keyof T]; export type Selector = (state: S) => R; export type ParametricSelector = ( state: S, props: P, ...args: any[] ) => R; export type KeySelector = (state: S, ...args: any[]) => any; export type ParametricKeySelector = ( state: S, props: P, ...args: any[] ) => any; export type OutputSelector = Selector & { resultFunc: C; dependencies: D; recomputations: () => number; resetRecomputations: () => number; }; export type OutputParametricSelector = ParametricSelector< S, P, R > & { resultFunc: C; dependencies: D; recomputations: () => number; resetRecomputations: () => number; }; export type CreateSelectorInstance = Omit; type Options = { selectorCreator?: CreateSelectorInstance; cacheObject?: ICacheObject; keySelector?: KeySelector; keySelectorCreator?: KeySelectorCreator; }; type ParametricOptions = { selectorCreator?: CreateSelectorInstance; cacheObject?: ICacheObject; keySelector?: ParametricKeySelector; keySelectorCreator?: ParametricKeySelectorCreator; }; export type OutputCachedSelector = ( options: KeySelector | Options ) => OutputSelector & { getMatchingSelector: (state: S, ...args: any[]) => OutputSelector; removeMatchingSelector: (state: S, ...args: any[]) => void; clearCache: () => void; cache: ICacheObject; keySelector: KeySelector; }; export type OutputParametricCachedSelector = ( options: ParametricKeySelector | ParametricOptions ) => OutputParametricSelector & { getMatchingSelector: ( state: S, props: P, ...args: any[] ) => OutputParametricSelector; removeMatchingSelector: (state: S, props: P, ...args: any[]) => void; clearCache: () => void; cache: ICacheObject; keySelector: ParametricKeySelector; }; /* * Homogeneous selectors, parameter types */ /* one selector */ declare function createCachedSelector( selector: Selector, combiner: (res: R1) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector T, [Selector]>; declare function createCachedSelector( selector: ParametricSelector, combiner: (res: R1) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (res: R1) => T, [ParametricSelector] >; /* two selectors */ declare function createCachedSelector( selector1: Selector, selector2: Selector, combiner: (res1: R1, res2: R2) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, (res1: R1, res2: R2) => T, [Selector, Selector] >; declare function createCachedSelector( selector1: ParametricSelector, selector2: ParametricSelector, combiner: (res1: R1, res2: R2) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (res1: R1, res2: R2) => T, [ParametricSelector, ParametricSelector] >; /* three selectors */ declare function createCachedSelector( selector1: Selector, selector2: Selector, selector3: Selector, combiner: (res1: R1, res2: R2, res3: R3) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, (res1: R1, res2: R2, res3: R3) => T, [Selector, Selector, Selector] >; declare function createCachedSelector( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, combiner: (res1: R1, res2: R2, res3: R3) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (res1: R1, res2: R2, res3: R3) => T, [ ParametricSelector, ParametricSelector, ParametricSelector ] >; /* four selectors */ declare function createCachedSelector( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, (res1: R1, res2: R2, res3: R3, res4: R4) => T, [Selector, Selector, Selector, Selector] >; declare function createCachedSelector( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* five selectors */ declare function createCachedSelector( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, [ Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* six selectors */ declare function createCachedSelector( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, [ Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, selector6: ParametricSelector, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* seven selectors */ declare function createCachedSelector( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, selector6: ParametricSelector, selector7: ParametricSelector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* eight selectors */ declare function createCachedSelector( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, selector6: ParametricSelector, selector7: ParametricSelector, selector8: ParametricSelector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* nine selectors */ declare function createCachedSelector( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, selector9: Selector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, T >( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, selector6: ParametricSelector, selector7: ParametricSelector, selector8: ParametricSelector, selector9: ParametricSelector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* ten selectors */ declare function createCachedSelector< S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T >( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, selector9: Selector, selector10: Selector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T >( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, selector6: ParametricSelector, selector7: ParametricSelector, selector8: ParametricSelector, selector9: ParametricSelector, selector10: ParametricSelector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* eleven selectors */ declare function createCachedSelector< S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T >( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, selector9: Selector, selector10: Selector, selector11: Selector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T >( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, selector6: ParametricSelector, selector7: ParametricSelector, selector8: ParametricSelector, selector9: ParametricSelector, selector10: ParametricSelector, selector11: ParametricSelector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* twelve selectors */ declare function createCachedSelector< S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T >( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, selector9: Selector, selector10: Selector, selector11: Selector, selector12: Selector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T >( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, selector6: ParametricSelector, selector7: ParametricSelector, selector8: ParametricSelector, selector9: ParametricSelector, selector10: ParametricSelector, selector11: ParametricSelector, selector12: ParametricSelector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* * Homogeneous selectors, array argument */ /* one selector */ declare function createCachedSelector( selectors: [Selector], combiner: (res: R1) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector T, [Selector]>; declare function createCachedSelector( selectors: [ParametricSelector], combiner: (res: R1) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (res: R1) => T, [ParametricSelector] >; /* two selectors */ declare function createCachedSelector( selectors: [Selector, Selector], combiner: (res1: R1, res2: R2) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, (res1: R1, res2: R2) => T, [Selector, Selector] >; declare function createCachedSelector( selectors: [ParametricSelector, ParametricSelector], combiner: (res1: R1, res2: R2) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (res1: R1, res2: R2) => T, [ParametricSelector, ParametricSelector] >; /* three selectors */ declare function createCachedSelector( selectors: [Selector, Selector, Selector], combiner: (res1: R1, res2: R2, res3: R3) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, (res1: R1, res2: R2, res3: R3) => T, [Selector, Selector, Selector] >; declare function createCachedSelector( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector ], combiner: (res1: R1, res2: R2, res3: R3) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (res1: R1, res2: R2, res3: R3) => T, [ ParametricSelector, ParametricSelector, ParametricSelector ] >; /* four selectors */ declare function createCachedSelector( selectors: [ Selector, Selector, Selector, Selector ], combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, (res1: R1, res2: R2, res3: R3, res4: R4) => T, [Selector, Selector, Selector, Selector] >; declare function createCachedSelector( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* five selectors */ declare function createCachedSelector( selectors: [ Selector, Selector, Selector, Selector, Selector ], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, [ Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* six selectors */ declare function createCachedSelector( selectors: [ Selector, Selector, Selector, Selector, Selector, Selector ], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, [ Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* seven selectors */ declare function createCachedSelector( selectors: [ Selector, Selector, Selector, Selector, Selector, Selector, Selector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* eight selectors */ declare function createCachedSelector( selectors: [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* nine selectors */ declare function createCachedSelector( selectors: [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, T >( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* ten selectors */ declare function createCachedSelector< S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T >( selectors: [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T >( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* eleven selectors */ declare function createCachedSelector< S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T >( selectors: [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T >( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* twelve selectors */ declare function createCachedSelector< S, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T >( selectors: [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T >( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* * Heterogeneous selectors, parameter types */ /* one selector */ declare function createCachedSelector( selector: Selector, combiner: (res: R1) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector T, [Selector]>; declare function createCachedSelector( selector: ParametricSelector, combiner: (res: R1) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1, P1, T, (res: R1) => T, [ParametricSelector] >; /* two selectors */ declare function createCachedSelector( selector1: Selector, selector2: Selector, combiner: (res1: R1, res2: R2) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2, T, (res1: R1, res2: R2) => T, [Selector, Selector] >; declare function createCachedSelector( selector1: ParametricSelector, selector2: ParametricSelector, combiner: (res1: R1, res2: R2) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2, P1 & P2, T, (res1: R1, res2: R2) => T, [ParametricSelector, ParametricSelector] >; /* three selectors */ declare function createCachedSelector( selector1: Selector, selector2: Selector, selector3: Selector, combiner: (res1: R1, res2: R2, res3: R3) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3, T, (res1: R1, res2: R2, res3: R3) => T, [Selector, Selector, Selector] >; declare function createCachedSelector( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, combiner: (res1: R1, res2: R2, res3: R3) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3, P1 & P2 & P3, T, (res1: R1, res2: R2, res3: R3) => T, [ ParametricSelector, ParametricSelector, ParametricSelector ] >; /* four selectors */ declare function createCachedSelector( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4, T, (res1: R1, res2: R2, res3: R3, res4: R4) => T, [Selector, Selector, Selector, Selector] >; declare function createCachedSelector< S1, S2, S3, S4, P1, P2, P3, P4, R1, R2, R3, R4, T >( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4, P1 & P2 & P3 & P4, T, (res1: R1, res2: R2, res3: R3, res4: R4) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* five selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, R1, R2, R3, R4, R5, T >( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, [ Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, P1, P2, P3, P4, P5, R1, R2, R3, R4, R5, T >( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5, P1 & P2 & P3 & P4 & P5, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* six selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, S6, R1, R2, R3, R4, R5, R6, T >( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5 & S6, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, [ Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, S6, P1, P2, P3, P4, P5, P6, R1, R2, R3, R4, R5, R6, T >( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, selector6: ParametricSelector, combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5 & S6, P1 & P2 & P3 & P4 & P5 & P6, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* seven selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, R1, R2, R3, R4, R5, R6, R7, T >( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, P1, P2, P3, P4, P5, P6, P7, R1, R2, R3, R4, R5, R6, R7, T >( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, selector6: ParametricSelector, selector7: ParametricSelector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7, P1 & P2 & P3 & P4 & P5 & P6 & P7, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* eight selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, R1, R2, R3, R4, R5, R6, R7, R8, T >( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, P1, P2, P3, P4, P5, P6, P7, P8, R1, R2, R3, R4, R5, R6, R7, R8, T >( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, selector6: ParametricSelector, selector7: ParametricSelector, selector8: ParametricSelector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8, P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* nine selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, R1, R2, R3, R4, R5, R6, R7, R8, R9, T >( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, selector9: Selector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, P1, P2, P3, P4, P5, P6, P7, P8, P9, R1, R2, R3, R4, R5, R6, R7, R8, R9, T >( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, selector6: ParametricSelector, selector7: ParametricSelector, selector8: ParametricSelector, selector9: ParametricSelector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9, P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8 & P9, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* ten selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T >( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, selector9: Selector, selector10: Selector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T >( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, selector6: ParametricSelector, selector7: ParametricSelector, selector8: ParametricSelector, selector9: ParametricSelector, selector10: ParametricSelector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10, P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8 & P9 & P10, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* eleven selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T >( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, selector9: Selector, selector10: Selector, selector11: Selector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10 & S11, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T >( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, selector6: ParametricSelector, selector7: ParametricSelector, selector8: ParametricSelector, selector9: ParametricSelector, selector10: ParametricSelector, selector11: ParametricSelector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10 & S11, P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8 & P9 & P10 & P11, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* twelve selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T >( selector1: Selector, selector2: Selector, selector3: Selector, selector4: Selector, selector5: Selector, selector6: Selector, selector7: Selector, selector8: Selector, selector9: Selector, selector10: Selector, selector11: Selector, selector12: Selector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10 & S11 & S12, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T >( selector1: ParametricSelector, selector2: ParametricSelector, selector3: ParametricSelector, selector4: ParametricSelector, selector5: ParametricSelector, selector6: ParametricSelector, selector7: ParametricSelector, selector8: ParametricSelector, selector9: ParametricSelector, selector10: ParametricSelector, selector11: ParametricSelector, selector12: ParametricSelector, combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10 & S11 & S12, P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8 & P9 & P10 & P11 & P12, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* * Heterogeneous selectors, array argument */ /* one selector */ declare function createCachedSelector( selectors: [Selector], combiner: (res: R1) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector T, [Selector]>; declare function createCachedSelector( selectors: [ParametricSelector], combiner: (res: R1) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1, P1, T, (res: R1) => T, [ParametricSelector] >; /* two selectors */ declare function createCachedSelector( selectors: [Selector, Selector], combiner: (res1: R1, res2: R2) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2, T, (res1: R1, res2: R2) => T, [Selector, Selector] >; declare function createCachedSelector( selectors: [ParametricSelector, ParametricSelector], combiner: (res1: R1, res2: R2) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2, P1 & P2, T, (res1: R1, res2: R2) => T, [ParametricSelector, ParametricSelector] >; /* three selectors */ declare function createCachedSelector( selectors: [Selector, Selector, Selector], combiner: (res1: R1, res2: R2, res3: R3) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3, T, (res1: R1, res2: R2, res3: R3) => T, [Selector, Selector, Selector] >; declare function createCachedSelector( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector ], combiner: (res1: R1, res2: R2, res3: R3) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3, P1 & P2 & P3, T, (res1: R1, res2: R2, res3: R3) => T, [ ParametricSelector, ParametricSelector, ParametricSelector ] >; /* four selectors */ declare function createCachedSelector( selectors: [ Selector, Selector, Selector, Selector ], combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4, T, (res1: R1, res2: R2, res3: R3, res4: R4) => T, [Selector, Selector, Selector, Selector] >; declare function createCachedSelector< S1, S2, S3, S4, P1, P2, P3, P4, R1, R2, R3, R4, T >( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: (res1: R1, res2: R2, res3: R3, res4: R4) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4, P1 & P2 & P3 & P4, T, (res1: R1, res2: R2, res3: R3, res4: R4) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* five selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, R1, R2, R3, R4, R5, T >( selectors: [ Selector, Selector, Selector, Selector, Selector ], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, [ Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, P1, P2, P3, P4, P5, R1, R2, R3, R4, R5, T >( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5, P1 & P2 & P3 & P4 & P5, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* six selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, S6, R1, R2, R3, R4, R5, R6, T >( selectors: [ Selector, Selector, Selector, Selector, Selector, Selector ], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5 & S6, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, [ Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, S6, P1, P2, P3, P4, P5, P6, R1, R2, R3, R4, R5, R6, T >( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5 & S6, P1 & P2 & P3 & P4 & P5 & P6, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* seven selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, R1, R2, R3, R4, R5, R6, R7, T >( selectors: [ Selector, Selector, Selector, Selector, Selector, Selector, Selector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, P1, P2, P3, P4, P5, P6, P7, R1, R2, R3, R4, R5, R6, R7, T >( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7, P1 & P2 & P3 & P4 & P5 & P6 & P7, T, (res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* eight selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, R1, R2, R3, R4, R5, R6, R7, R8, T >( selectors: [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, P1, P2, P3, P4, P5, P6, P7, P8, R1, R2, R3, R4, R5, R6, R7, R8, T >( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8, P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* nine selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, R1, R2, R3, R4, R5, R6, R7, R8, R9, T >( selectors: [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, P1, P2, P3, P4, P5, P6, P7, P8, P9, P, R1, R2, R3, R4, R5, R6, R7, R8, R9, T >( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9, P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8 & P9, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* ten selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T >( selectors: [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, T >( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10, P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8 & P9 & P10, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* eleven selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T >( selectors: [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10 & S11, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, T >( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10 & S11, P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8 & P9 & P10 & P11, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* twelve selectors */ declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T >( selectors: [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10 & S11 & S12, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] >; declare function createCachedSelector< S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, T >( selectors: [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ], combiner: ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10 & S11 & S12, P1 & P2 & P3 & P4 & P5 & P6 & P7 & P8 & P9 & P10 & P11 & P12, T, ( res1: R1, res2: R2, res3: R3, res4: R4, res5: R5, res6: R6, res7: R7, res8: R8, res9: R9, res10: R10, res11: R11, res12: R12 ) => T, [ ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector, ParametricSelector ] >; /* * Any number of uniform selectors */ declare function createCachedSelector( selectors: Selector[], combiner: (...res: R[]) => T, createSelectorOptions?: CreateSelectorOptions ): OutputCachedSelector T, Selector[]>; declare function createCachedSelector( selectors: ParametricSelector[], combiner: (...res: R[]) => T, createSelectorOptions?: CreateSelectorOptions ): OutputParametricCachedSelector< S, P, T, (...res: R[]) => T, ParametricSelector[] >; export {createCachedSelector}; /* * createStructuredCachedSelector */ export function createStructuredCachedSelector< T extends {[key: string]: (state: any) => any}, S = $Values<{[K in keyof T]: Parameters[0]}>, R = {[K in keyof T]: ReturnType} >( selectors: T ): OutputCachedSelector< S, R, (...args: $Values[]) => R, Selector>[] >; export function createStructuredCachedSelector< T extends { [key: string]: (state: any, props: any, ...args: any[]) => any; }, S = $Values<{[K in keyof T]: Parameters[0]}>, P = Exclude<$Values<{[K in keyof T]: Parameters[1]}>, undefined>, R = {[K in keyof T]: ReturnType} >( selectors: T ): OutputParametricCachedSelector< S, P, R, (...args: $Values[]) => R, ParametricSelector>[] >; /* * Cache objects */ export interface ICacheObject { set(key: any, selectorFn: any): void; get(key: any): any; remove(key: any): void; clear(): void; isValidCacheKey?(key: any): boolean; } type ObjectCacheKey = string | number; export class FlatObjectCache implements ICacheObject { set(key: ObjectCacheKey, selectorFn: any): void; get(key: ObjectCacheKey): any; remove(key: ObjectCacheKey): void; clear(): void; isValidCacheKey(key: ObjectCacheKey): boolean; } export class FifoObjectCache implements ICacheObject { constructor(options: {cacheSize: number}); set(key: ObjectCacheKey, selectorFn: any): void; get(key: ObjectCacheKey): any; remove(key: ObjectCacheKey): void; clear(): void; isValidCacheKey(key: ObjectCacheKey): boolean; } export class LruObjectCache implements ICacheObject { constructor(options: {cacheSize: number}); set(key: ObjectCacheKey, selectorFn: any): void; get(key: ObjectCacheKey): any; remove(key: ObjectCacheKey): void; clear(): void; isValidCacheKey(key: ObjectCacheKey): boolean; } export class FlatMapCache implements ICacheObject { set(key: any, selectorFn: any): void; get(key: any): any; remove(key: any): void; clear(): void; } export class FifoMapCache implements ICacheObject { constructor(options: {cacheSize: number}); set(key: any, selectorFn: any): void; get(key: any): any; remove(key: any): void; clear(): void; } export class LruMapCache implements ICacheObject { constructor(options: {cacheSize: number}); set(key: any, selectorFn: any): void; get(key: any): any; remove(key: any): void; clear(): void; } /* * Key selector creators */ export type KeySelectorCreator = (selectorInputs: { inputSelectors: D; resultFunc: C; keySelector: KeySelector; }) => KeySelector; export type ParametricKeySelectorCreator = (selectorInputs: { inputSelectors: D; resultFunc: C; keySelector: ParametricKeySelector; }) => ParametricKeySelector;