UNPKG

@difizen/mana-syringe

Version:

105 lines 4.26 kB
import 'reflect-metadata'; import type { Event, Newable, Abstract } from '@difizen/mana-common'; export type TokenOption = { multiple?: boolean; global?: boolean; }; export type Decorator<T> = (target: Newable<T> | Abstract<T>) => any; export declare namespace Syringe { /** * 定义注入标识,默认允许多重注入 */ const defineToken: (name: string, option?: Partial<TokenOption>) => DefinedToken; class DefinedToken { /** * 兼容 inversify identifier */ prototype: any; protected name: string; readonly multiple: boolean; readonly symbol: symbol; constructor(name: string, option?: Partial<TokenOption>); } type Register = <T = any>(token: Syringe.Token<T> | Syringe.InjectOption<T>, options?: Syringe.InjectOption<T>) => void; type Token<T> = string | symbol | Newable<T> | Abstract<T> | DefinedToken; type Named = string | symbol | DefinedToken; type NamedToken<T> = { token: Token<T>; named: Named; }; type OverrideToken<T> = { token: Token<T>; override: boolean; }; type Registry = (register: Register) => void; type Module = { id: number; name?: string; }; function isModule(data: Record<any, any> | undefined): data is Module; type Container = { parent?: Container | undefined; remove: <T>(token: Syringe.Token<T>) => void; register: <T = any>(token: Syringe.Token<T> | Syringe.InjectOption<T>, options?: Syringe.InjectOption<T>) => void; load: (module: Module, force?: boolean, deep?: boolean) => void; unload: (module: Module) => void; get: <T>(token: Syringe.Token<T>) => T; getNamed: <T>(token: Syringe.Token<T>, named: Syringe.Named) => T; getAll: <T>(token: Syringe.Token<T>) => T[]; getAllNamed: <T>(token: Syringe.Token<T>, named: Syringe.Named) => T[]; isBound: <T>(token: Syringe.Token<T>) => boolean; isBoundNamed: <T>(token: Syringe.Token<T>, named: Syringe.Named) => boolean; createChild: () => Container; onModuleChanged: Event<void>; onRegistered: Event<void>; }; type Context = { container: Container; }; const ContextToken: Token<Context>; type UnionToken<T> = Token<T> | NamedToken<T>; type Class<T> = Newable<T>; type Factory<T> = (ctx: Context) => (...args: any) => T; type Dynamic<T> = (ctx: Context) => T; type MaybeArray<T> = T | T[]; type DecoratorOption<T> = { token?: MaybeArray<UnionToken<T>>; contrib?: MaybeArray<Token<T>>; lifecycle?: Lifecycle; }; type TargetOption<T> = { contrib?: MaybeArray<Token<T>>; } & ValueOption<T>; type ValueOption<T> = { useClass?: MaybeArray<Class<T>>; useDynamic?: MaybeArray<Dynamic<T>>; useFactory?: MaybeArray<Factory<T>>; useValue?: T; }; type InjectOption<T> = DecoratorOption<T> & ValueOption<T>; enum Lifecycle { singleton = "singleton", transient = "transient" } const ClassOptionSymbol: unique symbol; type FormattedInjectOption<T> = { token: UnionToken<T>[]; contrib: Token<T>[]; useClass: Class<T>[]; lifecycle: Lifecycle; useDynamic: Dynamic<T>[]; useFactory: Factory<T>[]; useValue?: T; } & InjectOption<T>; const DefaultOption: Syringe.InjectOption<any>; } export declare namespace Utils { function toArray<T>(maybeArray: Syringe.MaybeArray<T> | undefined): T[]; function isClass(data?: string | symbol | Record<string, any>): data is Syringe.Class<any>; function isDefinedToken(data: Record<string, any> | undefined | symbol | string | number): data is Syringe.DefinedToken; function isInjectOption<T>(data: Syringe.Token<T> | Syringe.InjectOption<T> | undefined): data is Syringe.InjectOption<T>; function isNamedToken<T>(data: Syringe.UnionToken<T> | undefined): data is Syringe.NamedToken<T>; function isMultipleEnabled<T>(token: Syringe.Token<T>): boolean; function toRegistryOption<P>(options: Syringe.InjectOption<P>): Syringe.FormattedInjectOption<P>; } //# sourceMappingURL=core.d.ts.map