export declare type Declaration = { dependencies?: string[]; provider: Function; }; export declare type DependencyNode = Declaration & { history: Set; key: string; }; export declare type GraphLookup = Map>; export declare type LooseGraph = { [key: string]: any; }; export declare type StrictGraph = { [key: string]: Declaration; }; export declare type Options = Partial<{ failOnClobber: boolean; postProcess: (node: DependencyNode, value: any) => any; }>; export declare type TreeNode = { name: string; children: TreeNode[]; }; export declare type Container = { merge(otherGraph: LooseGraph): Result; mergeStrict(otherGraph: StrictGraph): Result; get(key: string): Promise; getSome(...keys: string[]): Promise<{ [key: string]: any; }>; getAll(): Promise<{ [key: string]: any; }>; getTree(): TreeNode; setOptions(options: Partial): Container; }; export declare type Success = { kind: 'Success'; value: T; }; export declare type ExposedFailureKind = 'CircularDependency' | 'MissingDependency' | 'KeyClobberFailure'; export declare type ExposedFailure = { kind: ExposedFailureKind; message: string; value?: F; }; export declare type Failure = { kind: 'Failure'; value: F; }; export declare type Result = Success | Failure | ExposedFailure;