import { ActivationContext } from "./ActivationContext"; import { IDestroyable } from "../interfaces"; export interface Descriptor { activate(context: ActivationContext): T; clone(): this; } export type ServiceMap = { [k in keyof S]: Descriptor; }; export type ContainerKeys = keyof S | keyof ContainerProvided; export type ContainerResolve = K extends keyof ContainerProvided ? ContainerProvided[K] : K extends keyof S ? S[K] : never; export type ContainerServiceMap = { [K in ContainerKeys]: Descriptor>; }; export type PartialServiceMap = { [k in keyof S]?: Descriptor; }; export interface Resolver { resolve>(name: K, def?: ContainerResolve): ContainerResolve; } export interface ContainerProvided { container: Resolver; } export type ContainerRegistered = /*{ [K in Exclude>]: S[K]; };*/ Exclude>; export type ActivationType = "singleton" | "container" | "hierarchy" | "context" | "call"; export interface ILifetimeManager extends IDestroyable { initialize(id: string, context: ActivationContext): ILifetime; } export interface ILifetime { has(): boolean; get(): any; enter(): void; store(item: any, cleanup?: (item: any) => void): void; }