export interface NodePackage {
    dependencies?: Dependencies;
    [property: string]: any;
}
export interface TheiaNodePackage {
    name: string;
    theiaExtensions?: Extension[];
}
export interface Extension {
    frontend?: string;
    frontendElectron?: string;
    backend?: string;
    backendElectron?: string;
}
export interface Dependencies {
    [name: string]: string;
}
export interface Config {
    copyright: string;
    node_modulesPath: string;
    localDependencies?: Dependencies;
}
export interface ExtensionConfig {
    testSupport: boolean;
    extensionKeyword: string;
}
export declare function sortByKey(object: {
    [key: string]: any;
}): {
    [key: string]: any;
};
export declare const defaultExtensionKeyword = "theia-extension";
export declare class Model {
    target: 'web' | 'electron-renderer' | undefined;
    pck: NodePackage;
    config: Config;
    readonly defaultExtensionConfig: ExtensionConfig;
    extensionConfig: ExtensionConfig;
    protected _frontendModules: Map<string, string> | undefined;
    protected _frontendElectronModules: Map<string, string> | undefined;
    protected _backendModules: Map<string, string> | undefined;
    protected _backendElectronModules: Map<string, string> | undefined;
    protected readonly extensionPackages: Map<string, TheiaNodePackage>;
    readonly allExtensions: string[];
    readExtensionPackages(read: (extension: string, version: string) => TheiaNodePackage | undefined): void;
    readLocalExtensionPackages(read: (extension: string, path: string) => TheiaNodePackage | undefined): void;
    protected readExtensionPackage(extension: string, read: () => TheiaNodePackage | undefined): void;
    readonly frontendModules: Map<string, string>;
    readonly frontendElectronModules: Map<string, string>;
    readonly backendModules: Map<string, string>;
    readonly backendElectronModules: Map<string, string>;
    protected computeModules<P extends keyof Extension, S extends keyof Extension = P>(primary: P, secondary?: S): Map<string, string>;
}
