import { ContainerType, Identifier, InjectableMetadata, InjectableDefinition, ReflectMetadataType, HandlerFunction } from './types'; export default class Container implements ContainerType { private registry; private tags; protected name: string; protected handlerMap: Map; constructor(name: string); get(id: Identifier, options?: { noThrow?: boolean; defaultValue?: any; }): T; set(options: Partial): this; getDefinition(id: Identifier): InjectableMetadata | undefined; getInjectableByTag(tag: string): any[]; getByTag(tag: string): unknown[]; registerHandler(name: string | symbol, handler: HandlerFunction): void; getHandler(name: string | symbol): CallableFunction | undefined; hasValue(options: Partial): boolean; getValueByMetadata(md: ReflectMetadataType): any; protected getValue(md: InjectableMetadata): any; private getDefinedMetaData; private resolveParams; private resolveProps; private handleTag; private resolveHandler; /** * check rule * The first column is the class scope and the first row is the property scope * ---------------------------------------- * |singleton|execution |transient * ---------------------------------------- * singleton|✅ |❌ |✅ * ---------------------------------------- * execution|✅ |✅ |✅ * ---------------------------------------- * transient|✅ |❓ |✅ * ---------------------------------------- */ private checkScope; }