import { InjectToken, ScopeID } from "./declares"; export interface InjectableSingleton { OnUpdate(updates: ISingletonUpdates): void; } export interface INTERNAL_InjectableSingleton { prototype: ISingletonPrototype; "@delegate": T; "@scope": ScopeID; OnUpdate(updates: ISingletonUpdates): void; } export interface ISingletonPrototype { "@watch": ISingletonWatch; "@override": string[]; } interface ISingletonWatch { [prop: string]: { token: InjectToken; }; } interface ISingletonUpdates { [prop: string]: any; } export declare function getWatchMetadata(target: T): ISingletonWatch; export declare class SingletonBasement implements InjectableSingleton { protected readonly "@delegate": T; protected readonly "@scope": ScopeID; protected readonly delegate: T; OnUpdate(updates: ISingletonUpdates): void; } export {};