import * as lsp from 'vscode-languageserver';
import { TextDocument } from 'vscode-languageserver-textdocument';
import * as trig from './trigger';
import * as cat from './datacatalog';
import * as loc from './localization';
export declare enum BuiltinDeps {
    'mods/core.sc2mod' = 0,
    'mods/glue.sc2mod' = 1,
    'mods/liberty.sc2mod' = 2,
    'mods/swarm.sc2mod' = 3,
    'mods/void.sc2mod' = 4,
    'mods/libertymulti.sc2mod' = 5,
    'mods/swarmmulti.sc2mod' = 6,
    'mods/voidmulti.sc2mod' = 7,
    'mods/balancemulti.sc2mod' = 8,
    'mods/starcoop/starcoop.sc2mod' = 9,
    'mods/war3.sc2mod' = 10,
    'mods/novastoryassets.sc2mod' = 11,
    'campaigns/liberty.sc2campaign' = 12,
    'campaigns/swarm.sc2campaign' = 13,
    'campaigns/void.sc2campaign' = 14,
    'campaigns/libertystory.sc2campaign' = 15,
    'campaigns/swarmstory.sc2campaign' = 16,
    'campaigns/voidstory.sc2campaign' = 17
}
export declare type builtinDepName = keyof typeof BuiltinDeps;
export declare function isSC2Archive(directory: string): RegExpMatchArray;
export declare function findSC2ArchiveDirectories(directory: string, opts?: {
    exclude?: string[];
}): Promise<string[]>;
export declare abstract class Component {
    protected workspace: SC2Workspace;
    constructor(workspace: SC2Workspace);
    load(): Promise<boolean>;
    abstract loadData(): Promise<boolean>;
}
export declare class TriggerComponent extends Component {
    protected store: trig.TriggerStore;
    loadData(): Promise<boolean>;
    getStore(): trig.TriggerStore;
}
export declare class CatalogComponent extends Component {
    protected store: cat.CatalogStore;
    loadData(): Promise<boolean>;
    getStore(): cat.CatalogStore;
}
export declare class LocalizationComponent extends Component {
    lang: string;
    triggers: loc.LocalizationTriggers;
    strings: Map<string, loc.LocalizationTextStore>;
    private loadStrings;
    loadData(): Promise<boolean>;
}
export interface ArchiveLink {
    name: string;
    src: string;
}
export declare function resolveArchiveDirectory(name: string, sources: string[]): Promise<string>;
declare type ResolveDependencyOpts = {
    overrides?: Map<string, string>;
    fallbackResolve?: (name: string) => Promise<string | undefined>;
};
export declare function resolveArchiveDependencyList(rootArchive: SC2Archive, sources: string[], opts?: ResolveDependencyOpts): Promise<{
    list: ArchiveLink[];
    unresolvedNames: string[];
}>;
export declare function openArchiveWorkspace(archive: SC2Archive, sources: string[], overrides?: Map<string, string>, extra?: Map<string, string>): Promise<SC2Workspace>;
export declare class SC2Archive {
    readonly name: string;
    readonly directory: string;
    /** lower-cased `fsPath` */
    readonly lcFsPath: string;
    priority: number;
    constructor(name: string, directory: string);
    findFiles(pattern: string | string[]): Promise<string[]>;
    hasFile(filename: string): Promise<boolean>;
    readFile(filename: string): Promise<string>;
    relativePath(uri: lsp.DocumentUri): string;
    /**
     * returns lowercased and forward slash normalized list
     */
    getDependencyList(): Promise<string[]>;
    get isBuiltin(): boolean;
}
export declare enum S2ArchiveNsNameKind {
    base = 0,
    enus = 1
}
export declare enum S2ArchiveNsTypeKind {
    sc2assets = 0,
    sc2data = 1
}
export interface S2FileNs {
    name: keyof typeof S2ArchiveNsNameKind;
    type: keyof typeof S2ArchiveNsTypeKind;
}
export interface S2QualifiedFile {
    fsPath: string;
    relativePath: string;
    archiveRelpath: string;
    namespace?: S2FileNs;
    archive?: SC2Archive;
    priority: number;
}
export declare class SC2Workspace {
    rootArchive?: SC2Archive;
    allArchives: SC2Archive[];
    dependencies: SC2Archive[];
    metadataArchives: SC2Archive[];
    trigComponent: TriggerComponent;
    locComponent: LocalizationComponent;
    catalogComponent: CatalogComponent;
    readonly arvMap: Map<string, SC2Archive>;
    constructor(rootArchive?: SC2Archive, dependencies?: SC2Archive[]);
    findFiles(pattern: string | string[]): AsyncGenerator<[SC2Archive, string], void, unknown>;
    static documentFromFile(archive: SC2Archive, filename: string, languageId?: string): Promise<TextDocument>;
    resolvePath(fsPath: lsp.URI): S2QualifiedFile | undefined;
}
export {};
