import type { interfaces } from 'inversify';
import { ContainerModule } from 'inversify';
import type { Syringe } from '../core';
type TokenOrOption<T> = Syringe.Token<T> | Syringe.InjectOption<T>;
export declare class SyringeModule<T = Syringe.Module> implements Syringe.Module {
    protected dependencies: T[];
    /**
     * @readonly
     * module unique id
     */
    readonly id: number;
    protected moduleName?: string | undefined;
    readonly inversifyModule: ContainerModule;
    protected optionCollection?: (Syringe.Token<any> | Syringe.InjectOption<any>)[];
    get name(): string | undefined;
    constructor(name?: string);
    protected inversifyRegister: (bind: interfaces.Bind, unbind: interfaces.Unbind, isBound: interfaces.IsBound, rebind: interfaces.Rebind) => void;
    protected get options(): (Syringe.InjectOption<any> | Syringe.Token<any>)[];
    register(...options: TokenOrOption<any>[]): this;
    contribution(...tokens: Syringe.DefinedToken[]): this;
    dependOn(...modules: T[]): this;
    toLoader(): SyringeModuleLoader<T>;
}
export interface SyringeModuleLoader<T = Syringe.Module> {
    dependencies?: T[];
}
export declare function isSyringeModule(data: Syringe.Module): data is SyringeModule;
export {};
//# sourceMappingURL=syringe-module.d.ts.map