/// <reference path="module-scope.d.ts" />
declare const moduleCollection: Module[];
declare const readyModules: {
    [id: string]: boolean;
};
declare const modules: {
    [id: string]: ModuleScope;
};
declare let ModuleScopeMain: typeof ModuleScope;
declare enum ModuleType {
    Standard = 0,
    Class = 1
}
declare class ModuleOpts {
    type: ModuleType;
}
/**
 * Creates a new Module, attaches dependencies
 * @param {string} Name 1st aargument, name of module to be registed.
 * @param {string[]} Dependencies 2nd to 2nd last argument, dependencies of the module.
 * @param {Function} ReadyFnc Last argument, resolved ready function.
 * @returns {{name:string;dependencies:string[];readyFnc:Function;scope:Object}}
 */
declare class Module {
    name: string;
    dependencies: string[];
    readyFnc: typeof ModuleScopeMain;
    scope: ModuleScope;
    moduleHolder: ModuleScope;
    constructionOpts?: Object;
    moduleOpts?: ModuleOpts;
    type: ModuleType;
    constructor(...args: any[]);
    /**
     * Returns list of unresolved modules.
     * @param {string[]} mods modules names
     */
    getUnResolvedModules(mods: string[]): string[];
    /**
     * Returns module by name
     * @param {string} name module name
     * @returns {Module}
     */
    static getModuleByName(name: string): Module | null;
    checkInterDependency(module: Module, overTimeReady?: {
        [id: string]: boolean;
    }): false | string[];
    /**
     * Releases all modules with support to interdependency on each other.
     * @param {string[]} moduleNames module names in string list.
     */
    releaseModules(moduleNames: string[]): void;
    /**
     * Checks and releases modules from main collection
     */
    checkNReleaseMods(): void;
    /**
     * Checks if dependencies are loaded or not.
     * @param {Module} module Module to check
     * @returns {boolean}
     */
    areDepLoaded(module: Module): boolean;
    /**
     * Releases module, calls its ready function.
     * @param {Module} module Module to release.
     */
    releaseModule(module: Module): void;
    /**
     * Returns module by name
     * @param {string} name name of module to get.
     */
    static get(name: string): ModuleScope;
    /**
     * Extends module by calling given function, module score is provided as arg and expected new updated scope.
     * Use this to extend functionality
     * @param {string} name name of module to get.
     * @param {Function} fnc extnding callback function.
     */
    static extend(name: string, fnc: (model: ModuleScope) => ModuleScope): void;
}
declare var module: any;
