react-magnetic-di
Version:
Context driven dependency injection
60 lines (49 loc) • 1.44 kB
Flow
// @flow
/* eslint-disable no-redeclare, no-unused-vars */
import type { Node, AbstractComponent } from 'react';
export type Dependency = any;
declare export class DiProvider
extends
React$Component<
{
children?: Node,
global?: boolean,
target?: AbstractComponent<any> | AbstractComponent<any>[],
use: Dependency[],
},
{
getDependencies: (
deps: Dependency[],
target: AbstractComponent<any> | AbstractComponent<any>[]
) => Dependency[],
},
> {}
declare export function withDi<T: AbstractComponent<any>>(
component: T,
dependencies: Dependency[],
target?: AbstractComponent<any> | AbstractComponent<any>[]
): T;
declare export function injectable<T: Dependency>(
from: T,
implementation: T,
options?: {|
displayName?: string,
target?: Function,
global?: boolean,
track?: boolean,
module?: boolean,
|}
): T;
type ExtractReturn<Fn> = $Call<<T>((...Iterable<any>) => T) => T, Fn>;
declare export function runWithDi<T: (...args: any) => any>(
thunk: T,
dependencies: Dependency[]
): ExtractReturn<T>;
declare export var stats: {
/** Returns unused injectables */
unused: () => Array<{ get: () => Dependency, error: () => Error }>,
/** Resets stats */
reset: () => void,
};
declare export function di(...dependencies: Dependency[]): void;
declare export function debug(fn: Function): string;