import { ModuleHook } from './hook';
import { JModule } from './module';
import { Resource } from './resource';
export declare class JModuleManager extends ModuleHook {
    private static resourceCache;
    private static jmoduleCache;
    private static resourceUrlAndModuleKeyMap;
    private static fileMapCache;
    private static fileListCache;
    private static moduleExportsCache;
    private static moduleExports;
    static nextJModuleId: number;
    static defaultJModule?: typeof JModule;
    static createDocument(options: {
        sourceUrl: string;
        currentUrl: string;
    }): Document;
    /**
     * 读取全局初始化配置
     *
     * @return {Object|undefined}
     */
    static getInitialConfig(): any;
    /**
     * @ignore
     */
    static setFileMapCache(key: string, val: [string, string]): [string, string];
    /**
     * @ignore
     */
    static appendFileList(url: string): void;
    /**
     * @ignore
     */
    static findResolvedUrlByUrl(urlWithPublicPath: string): string[] | [string, string | undefined];
    /**
     * 根据资源地址查找对应的 resourceUrl
     *
     * @param {String} url
     * @returns {String|undefined}
     */
    static getResourceUrlByUrl(url: string | undefined | null): string | undefined;
    /**
     * 读取/设置 url 与 Resource 之间的关系
     * @param {String} url
     * @param {Resource|null} resource
     * @returns {Resource|undefined}
     */
    static resource(url: string, resource?: Resource | null): Resource | undefined;
    /**
     * 读取/设置 moduleKey 与 Module 之间的关系
     * @param {String} moduleKey
     * @param {JModule|null} instance
     * @returns {JModule|undefined}
     */
    static jmodule(moduleKey: string, instance?: JModule | null): JModule | undefined;
    /**
     * 获取已注册的应用列表
     * @readOnly
     */
    static get registeredModules(): JModule[];
    /**
     * 记录 resourceUrl 与 moduleKey 之间的映射关系
     * @ignore
     * @param {String} resourceUrl
     * @param {String} moduleKey
     */
    static mapResourceUrlAndModuleKey(resourceUrl: string, moduleKey: string): void;
    /**
     * 基于 resourceUrl 查找关联的 Modules
     * @param resourceUrl
     * @returns { Array<JModule> }
     */
    static getModulesByResourceUrl(resourceUrl: string): JModule[];
    /**
     * 读取 moduleKey 对应的 JModule 构造函数
     * @param moduleKey
     * @returns { typeof JModule }
     */
    static getJModuleConstructor(moduleKey: string): Function;
    static registerJModule(JModuleConstructor: typeof JModule): number;
    /**
     * 存储模块暴露的组件
     *
     * @ignore
     * @param  {String} moduleKey
     * @param  {any} data
     */
    static cacheModuleExport(moduleKey: string, data: any): void;
    /**
     * 等待模块加载完成
     *
     * @param  {String} moduleKey
     * @example
     * await JModuleManager.waitModuleComplete(moduleKey);
     * @return {Promise<Module>}
     */
    static waitModuleComplete(moduleKey: string): Promise<JModule>;
    /**
     * 引用其它模块暴露的功能
     *
     * @param  {String} namespace
     * @example
     * JModule.require('pipeline.models.PipelineApp')
     *     .then((PipelineApp) => {
     *         // do something
     *     });
     * @return {Promise<var>}
     */
    static require(namespace: string): Promise<any>;
    /**
     * 定义模块
     * @param  {String} moduleKey 定义模块唯一标识
     * @param  {Object} metadata  定义模块
     * @param  {Function} [metadata.init<jModuleInstance>] 初始化函数，自动调用
     * @param  {Array<moduleKey>} [metadata.imports] 依赖的模块
     * @param  {Object} [metadata.exports] 对外暴露的功能
     * @example
     * JModule.define('pipeline', {
     *     init(module) {},
     *     routes,
     *     imports: [],
     *     exports: {},
     * });
     */
    static define: {
        (moduleKey: string, metadata: import("./config").ModuleMetadata & Record<string, any>): Promise<JModule>;
        (metadata: import("./config").ModuleMetadata & Record<string, any>): Promise<JModule>;
    };
    /**
     * 暴露平台功能给模块使用
     * 与 JModuleManager.defaultJModule 数据一致
     * @param  {object} obj 需要暴露的对象
     * @example
     * JModuleManager.export({
     *     $platform: {
     *         utils, event, router,
     *     },
     *     $node_modules: {
     *         vue: Vue,
     *     },
     * }, { scope: 'default' });
     */
    static export(obj?: {}, matcher?: Record<string, string | number>): void;
    /**
     * 引用平台暴露的对象
     *
     * @param  {String} namespace
     * @param  {Object} config      通过编译工具注入的相关环境参数
     * @return {var}
     */
    static import<T>(namespace?: string, config?: Record<string, string | number>): T;
}
declare const _default: typeof JModuleManager;
export default _default;
