// Type definitions for Recompose 0.30 // Project: https://github.com/acdlite/recompose // Definitions by: Iskander Sierra // Curtis Layne // Rasmus Eneman // Lucas Terra // Mathieu Masy // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.8 /// declare module 'recompose' { import * as React from 'react'; import { ComponentType as Component, ComponentClass, FunctionComponent, ValidationMap } from 'react'; type mapper = (input: TInner) => TOutter; type predicate = mapper; type predicateDiff = (current: T, next: T) => boolean // Diff / Omit taken from https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html type Omit = Pick> interface Observer{ next(props: T): void; complete(): void; } interface Subscription{ unsubscribe(): void } interface Subscribable { subscribe(observer: Observer): Subscription; } interface ComponentEnhancer { (component: Component): ComponentClass; } // Injects props and removes them from the prop requirements. // Will not pass through the injected props if they are passed in during // render. Also adds new prop requirements from TNeedsProps. export interface InferableComponentEnhancerWithProps {

( component: Component

): React.ComponentClass & TNeedsProps> } // Injects props and removes them from the prop requirements. // Will not pass through the injected props if they are passed in during // render. export type InferableComponentEnhancer = InferableComponentEnhancerWithProps // Injects default props and makes them optional. Will still pass through // the injected props if they are passed in during render. export type DefaultingInferableComponentEnhancer = InferableComponentEnhancerWithProps> // Higher-order components: https://github.com/acdlite/recompose/blob/master/docs/API.md#higher-order-components // mapProps: https://github.com/acdlite/recompose/blob/master/docs/API.md#mapprops export function mapProps( propsMapper: mapper, ): InferableComponentEnhancerWithProps; // withProps: https://github.com/acdlite/recompose/blob/master/docs/API.md#withprops export function withProps( createProps: TInner | mapper ): InferableComponentEnhancerWithProps; // withPropsOnChange: https://github.com/acdlite/recompose/blob/master/docs/API.md#withpropsonchange export function withPropsOnChange( shouldMapOrKeys: string[] | predicateDiff, createProps: mapper ): InferableComponentEnhancerWithProps; // withHandlers: https://github.com/acdlite/recompose/blob/master/docs/API.md#withhandlers type EventHandler = Function; // This type is required to infer TOutter type HandleCreatorsStructure = { [handlerName: string]: mapper; }; // This type is required to infer THandlers type HandleCreatorsHandlers = { [P in keyof THandlers]: (props: TOutter) => THandlers[P]; }; type HandleCreators = & HandleCreatorsStructure & HandleCreatorsHandlers type HandleCreatorsFactory = (initialProps: TOutter) => HandleCreators; export function withHandlers( handlerCreators: | HandleCreators | HandleCreatorsFactory ): InferableComponentEnhancerWithProps; // defaultProps: https://github.com/acdlite/recompose/blob/master/docs/API.md#defaultprops export function defaultProps( props: T ): DefaultingInferableComponentEnhancer; // renameProp: https://github.com/acdlite/recompose/blob/master/docs/API.md#renameProp export function renameProp( outterName: string, innerName: string ): ComponentEnhancer; // renameProps: https://github.com/acdlite/recompose/blob/master/docs/API.md#renameProps type NameMap = { [outterName: string]: string; }; export function renameProps( nameMap: NameMap ): ComponentEnhancer; // flattenProp: https://github.com/acdlite/recompose/blob/master/docs/API.md#flattenProp export function flattenProp( propName: string ): ComponentEnhancer; // withState: https://github.com/acdlite/recompose/blob/master/docs/API.md#withState type stateProps< TState, TStateName extends string, TStateUpdaterName extends string > = ( {[stateName in TStateName]: TState} & {[stateUpdateName in TStateUpdaterName]: (state: TState) => TState} ) export function withState< TOutter, TState, TStateName extends string, TStateUpdaterName extends string >( stateName: TStateName, stateUpdaterName: TStateUpdaterName, initialState: TState | mapper ): InferableComponentEnhancerWithProps< stateProps, TOutter >; // withStateHandlers: https://github.com/acdlite/recompose/blob/master/docs/API.md#withstatehandlers type StateHandler = (...payload: any[]) => Partial | undefined; type StateHandlerMap = { [updaterName: string]: StateHandler; }; type StateUpdaters = { [updaterName in keyof TUpdaters]: (state: TState, props: TOutter) => TUpdaters[updaterName]; }; export function withStateHandlers, TOutter = {}>( createProps: TState | mapper, stateUpdaters: StateUpdaters, ): InferableComponentEnhancerWithProps; // withReducer: https://github.com/acdlite/recompose/blob/master/docs/API.md#withReducer type reducer = (s: TState, a: TAction) => TState; type reducerProps< TState, TAction, TStateName extends string, TDispatchName extends string > = ( {[stateName in TStateName]: TState} & {[dispatchName in TDispatchName]: (a: TAction) => void} ) export function withReducer< TOutter, TState, TAction, TStateName extends string, TDispatchName extends string >( stateName: TStateName, dispatchName: TDispatchName, reducer: reducer, initialState: TState | mapper ): InferableComponentEnhancerWithProps< reducerProps, TOutter >; // branch: https://github.com/acdlite/recompose/blob/master/docs/API.md#branch export function branch( test: predicate, trueEnhancer: ComponentEnhancer | InferableComponentEnhancer<{}>, falseEnhancer?: ComponentEnhancer | InferableComponentEnhancer<{}> ): ComponentEnhancer; // renderComponent: https://github.com/acdlite/recompose/blob/master/docs/API.md#renderComponent export function renderComponent( component: string | Component ): ComponentEnhancer; // renderNothing: https://github.com/acdlite/recompose/blob/master/docs/API.md#renderNothing export const renderNothing: InferableComponentEnhancer<{}>; // shouldUpdate: https://github.com/acdlite/recompose/blob/master/docs/API.md#shouldUpdate export function shouldUpdate( test: predicateDiff ): InferableComponentEnhancer<{}>; // pure: https://github.com/acdlite/recompose/blob/master/docs/API.md#pure export function pure (component: Component): Component; // onlyUpdateForKeys: https://github.com/acdlite/recompose/blob/master/docs/API.md#onlyUpdateForKeys export function onlyUpdateForKeys( propKeys: Array ) : InferableComponentEnhancer<{}>; export function onlyUpdateForKeys( propKeys: Array ) : InferableComponentEnhancer<{}>; // onlyUpdateForPropTypes: https://github.com/acdlite/recompose/blob/master/docs/API.md#onlyUpdateForPropTypes export const onlyUpdateForPropTypes: InferableComponentEnhancer<{}>; // withContext: https://github.com/acdlite/recompose/blob/master/docs/API.md#withContext export function withContext( childContextTypes: ValidationMap, getChildContext: mapper ) : InferableComponentEnhancer<{}>; // getContext: https://github.com/acdlite/recompose/blob/master/docs/API.md#getContext export function getContext( contextTypes: ValidationMap ) : InferableComponentEnhancer; interface _ReactLifeCycleFunctionsThisArguments { props: TProps, state: TState, setState(f: (prevState: TState, props: TProps) => Pick, callback?: () => any): void; setState(state: Pick, callback?: () => any): void; forceUpdate(callBack?: () => any): void; context: any; refs: { [key: string]: React.ReactInstance }; } type ReactLifeCycleFunctionsThisArguments = _ReactLifeCycleFunctionsThisArguments & TInstance // lifecycle: https://github.com/acdlite/recompose/blob/master/docs/API.md#lifecycle interface ReactLifeCycleFunctions { componentWillMount?: ((this: ReactLifeCycleFunctionsThisArguments) => void) | undefined; UNSAFE_componentWillMount?(this: ReactLifeCycleFunctionsThisArguments): void; componentDidMount?: ((this: ReactLifeCycleFunctionsThisArguments) => void) | undefined; componentWillReceiveProps?: ((this: ReactLifeCycleFunctionsThisArguments, nextProps: TProps) => void) | undefined; UNSAFE_componentWillReceiveProps?(this: ReactLifeCycleFunctionsThisArguments, nextProps: TProps): void; shouldComponentUpdate?: ((this: ReactLifeCycleFunctionsThisArguments, nextProps: TProps, nextState: TState) => boolean) | undefined; componentWillUpdate?: ((this: ReactLifeCycleFunctionsThisArguments, nextProps: TProps, nextState: TState) => void) | undefined; UNSAFE_componentWillUpdate?(this: ReactLifeCycleFunctionsThisArguments, nextProps: TProps, nextState: TState): void; componentDidUpdate?: ((this: ReactLifeCycleFunctionsThisArguments, prevProps: TProps, prevState: TState) => void) | undefined; componentWillUnmount?: ((this: ReactLifeCycleFunctionsThisArguments) => void) | undefined; componentDidCatch?:((this: ReactLifeCycleFunctionsThisArguments, error: Error, info: React.ErrorInfo) => void) | undefined; } export function lifecycle( spec: ReactLifeCycleFunctions & TInstance ): InferableComponentEnhancer<{}>; // toClass: https://github.com/acdlite/recompose/blob/master/docs/API.md#toClass export const toClass: InferableComponentEnhancer<{}>; // toRenderProps: https://github.com/acdlite/recompose/blob/master/docs/API.md#torenderprops export function toRenderProps( hoc: InferableComponentEnhancerWithProps ): FunctionComponent React.ReactElement }>; // fromRenderProps: https://github.com/acdlite/recompose/blob/master/docs/API.md#fromrenderprops export function fromRenderProps( RenderPropsComponent: Component, propsMapper: (props: TRenderProps) => TInner, renderPropName?: string ): ComponentEnhancer; // Static property helpers: https://github.com/acdlite/recompose/blob/master/docs/API.md#static-property-helpers // setStatic: https://github.com/acdlite/recompose/blob/master/docs/API.md#setStatic export function setStatic( key: string, value: any ): >(component: T) => T; // setPropTypes: https://github.com/acdlite/recompose/blob/master/docs/API.md#setPropTypes export function setPropTypes

( propTypes: ValidationMap

): >(component: T) => T; // setDisplayName: https://github.com/acdlite/recompose/blob/master/docs/API.md#setDisplayName export function setDisplayName( displayName: string ): >(component: T) => T; // Utilities: https://github.com/acdlite/recompose/blob/master/docs/API.md#utilities // compose: https://github.com/acdlite/recompose/blob/master/docs/API.md#compose export function compose( ...functions: Function[] ): ComponentEnhancer; // export function compose( // ...functions: Array // ): ComponentEnhancer; // export function compose( // ...functions: Array // ): ComponentEnhancer; // getDisplayName: https://github.com/acdlite/recompose/blob/master/docs/API.md#getDisplayName export function getDisplayName( component: Component ): string; // wrapDisplayName: https://github.com/acdlite/recompose/blob/master/docs/API.md#wrapDisplayName export function wrapDisplayName( component: Component, wrapperName: string ): string; // shallowEqual: https://github.com/acdlite/recompose/blob/master/docs/API.md#shallowEqual export function shallowEqual( a: Object, b: Object ): boolean; // isClassComponent: https://github.com/acdlite/recompose/blob/master/docs/API.md#isClassComponent export function isClassComponent( value: any ): boolean; // createEagerElement: https://github.com/acdlite/recompose/blob/master/docs/API.md#createEagerElement export function createEagerElement( type: Component | string, props?: Object, children?: React.ReactNode ): React.ReactElement; // createEagerFactory: https://github.com/acdlite/recompose/blob/master/docs/API.md#createEagerFactory type componentFactory = (props?: Object, children?: React.ReactNode) => React.ReactElement; export function createEagerFactory( type: Component | string ): componentFactory; // createSink: https://github.com/acdlite/recompose/blob/master/docs/API.md#createSink export function createSink( callback: (props: Object) => void ): React.ComponentClass; // ??? // componentFromProp: https://github.com/acdlite/recompose/blob/master/docs/API.md#componentFromProp export function componentFromProp( propName: string ): FunctionComponent; // nest: https://github.com/acdlite/recompose/blob/master/docs/API.md#nest export function nest( ...Components: (string | Component)[] ): React.ComponentClass; // ??? // hoistStatics: https://github.com/acdlite/recompose/blob/master/docs/API.md#hoistStatics export function hoistStatics( hoc: InferableComponentEnhancer, blacklist?: {[key: string]: boolean} ): InferableComponentEnhancer; // Observable utilities: https://github.com/acdlite/recompose/blob/master/docs/API.md#observable-utilities // componentFromStream: https://github.com/acdlite/recompose/blob/master/docs/API.md#componentFromStream export function componentFromStream( propsToReactNode: mapper, Subscribable> ): Component; // ??? // componentFromStreamWithConfig: https://github.com/acdlite/recompose/blob/master/docs/API.md#componentfromstreamwithconfig export function componentFromStreamWithConfig(config: ObservableConfig): ( propsToReactNode: mapper, Subscribable> ) => Component // mapPropsStream: https://github.com/acdlite/recompose/blob/master/docs/API.md#mapPropsStream export function mapPropsStream( transform: mapper, Subscribable> ): ComponentEnhancer; // mapPropsStreamWithConfig: https://github.com/acdlite/recompose/blob/master/docs/API.md#mappropsstreamwithconfig export function mapPropsStreamWithConfig(config: ObservableConfig): ( transform: mapper, Subscribable> ) => ComponentEnhancer; // createEventHandler: https://github.com/acdlite/recompose/blob/master/docs/API.md#createEventHandler type EventHandlerOf> = { handler: (value: T) => void; stream: TSubs; }; export function createEventHandler>(): EventHandlerOf; // createEventHandlerWithConfig: https://github.com/acdlite/recompose/blob/master/docs/API.md#createEventHandlerWithConfig export function createEventHandlerWithConfig(config: ObservableConfig): >() => EventHandlerOf; // setObservableConfig: https://github.com/acdlite/recompose/blob/master/docs/API.md#setObservableConfig type ObservableConfig = { fromESObservable?: ((observable: Subscribable) => any) | undefined; toESObservable?: ((stream: any) => Subscribable) | undefined; }; export function setObservableConfig(config: ObservableConfig): void; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#rxjs declare module 'recompose/rxjsObservableConfig' { import { ObservableConfig } from 'recompose'; const rxjsconfig: ObservableConfig; export default rxjsconfig; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#rxjs-4-legacy declare module 'recompose/rxjs4ObservableConfig' { import { ObservableConfig } from 'recompose'; const rxjs4config: ObservableConfig; export default rxjs4config; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#most declare module 'recompose/mostObservableConfig' { import { ObservableConfig } from 'recompose'; const mostConfig: ObservableConfig; export default mostConfig; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#xstream declare module 'recompose/xstreamObservableConfig' { import { ObservableConfig } from 'recompose'; const xstreamConfig: ObservableConfig; export default xstreamConfig; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#bacon declare module 'recompose/baconObservableConfig' { import { ObservableConfig } from 'recompose'; const baconConfig: ObservableConfig; export default baconConfig; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#kefir declare module 'recompose/kefirObservableConfig' { import { ObservableConfig } from 'recompose'; const kefirConfig: ObservableConfig; export default kefirConfig; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#mapprops declare module 'recompose/mapProps' { import { mapProps } from 'recompose'; export default mapProps; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#withprops declare module 'recompose/withProps' { import { withProps } from 'recompose'; export default withProps; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#withpropsonchange declare module 'recompose/withPropsOnChange' { import { withPropsOnChange } from 'recompose'; export default withPropsOnChange; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#withhandlers declare module 'recompose/withHandlers' { import { withHandlers } from 'recompose'; export default withHandlers; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#defaultprops declare module 'recompose/defaultProps' { import { defaultProps } from 'recompose'; export default defaultProps; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#renameprop declare module 'recompose/renameProp' { import { renameProp } from 'recompose'; export default renameProp; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#renameprops declare module 'recompose/renameProps' { import { renameProps } from 'recompose'; export default renameProps; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#flattenprop declare module 'recompose/flattenProp' { import { flattenProp } from 'recompose'; export default flattenProp; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#withstate declare module 'recompose/withState' { import { withState } from 'recompose'; export default withState; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#withstatehandlers declare module 'recompose/withStateHandlers' { import { withStateHandlers } from 'recompose'; export default withStateHandlers; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#withreducer declare module 'recompose/withReducer' { import { withReducer } from 'recompose'; export default withReducer; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#branch declare module 'recompose/branch' { import { branch } from 'recompose'; export default branch; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#rendercomponent declare module 'recompose/renderComponent' { import { renderComponent } from 'recompose'; export default renderComponent; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#rendernothing declare module 'recompose/renderNothing' { import { renderNothing } from 'recompose'; export default renderNothing; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#shouldupdate declare module 'recompose/shouldUpdate' { import { shouldUpdate } from 'recompose'; export default shouldUpdate; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#pure declare module 'recompose/pure' { import { pure } from 'recompose'; export default pure; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#onlyupdateforkeys declare module 'recompose/onlyUpdateForKeys' { import { onlyUpdateForKeys } from 'recompose'; export default onlyUpdateForKeys; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#onlyupdateforproptypes declare module 'recompose/onlyUpdateForPropTypes' { import { onlyUpdateForPropTypes } from 'recompose'; export default onlyUpdateForPropTypes; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#withcontext declare module 'recompose/withContext' { import { withContext } from 'recompose'; export default withContext; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#getcontext declare module 'recompose/getContext' { import { getContext } from 'recompose'; export default getContext; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#lifecycle declare module 'recompose/lifecycle' { import { lifecycle } from 'recompose'; export default lifecycle; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#toclass declare module 'recompose/toClass' { import { toClass } from 'recompose'; export default toClass; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#torenderprops declare module 'recompose/toRenderProps' { import { toRenderProps } from 'recompose'; export default toRenderProps; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#fromrenderprops declare module 'recompose/fromRenderProps' { import { fromRenderProps } from 'recompose'; export default fromRenderProps; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#setstatic declare module 'recompose/setStatic' { import { setStatic } from 'recompose'; export default setStatic; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#setproptypes declare module 'recompose/setPropTypes' { import { setPropTypes } from 'recompose'; export default setPropTypes; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#setdisplayname declare module 'recompose/setDisplayName' { import { setDisplayName } from 'recompose'; export default setDisplayName; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#compose declare module 'recompose/compose' { import { compose } from 'recompose'; export default compose; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#getdisplayname declare module 'recompose/getDisplayName' { import { getDisplayName } from 'recompose'; export default getDisplayName; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#wrapdisplayname declare module 'recompose/wrapDisplayName' { import { wrapDisplayName } from 'recompose'; export default wrapDisplayName; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#shallowequal declare module 'recompose/shallowEqual' { import { shallowEqual } from 'recompose'; export default shallowEqual; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#isclasscomponent declare module 'recompose/isClassComponent' { import { isClassComponent } from 'recompose'; export default isClassComponent; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#createsink declare module 'recompose/createSink' { import { createSink } from 'recompose'; export default createSink; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#componentfromprop declare module 'recompose/componentFromProp' { import { componentFromProp } from 'recompose'; export default componentFromProp; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#nest declare module 'recompose/nest' { import { nest } from 'recompose'; export default nest; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#hoiststatics declare module 'recompose/hoistStatics' { import { hoistStatics } from 'recompose'; export default hoistStatics; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#componentfromstream declare module 'recompose/componentFromStream' { import { componentFromStream } from 'recompose'; export { componentFromStreamWithConfig } from 'recompose'; export default componentFromStream; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#mappropsstream declare module 'recompose/mapPropsStream' { import { mapPropsStream } from 'recompose'; export { mapPropsStreamWithConfig } from 'recompose'; export default mapPropsStream; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#createeventhandler declare module 'recompose/createEventHandler' { import { createEventHandler } from 'recompose'; export { createEventHandlerWithConfig } from 'recompose'; export default createEventHandler; } // https://github.com/acdlite/recompose/blob/master/docs/API.md#setobservableconfig declare module 'recompose/setObservableConfig' { import { setObservableConfig } from 'recompose'; export default setObservableConfig; }