import * as gt from '../compiler/types';
import { SourceFile } from '../compiler/types';
import { Parser } from '../compiler/parser';
import { S2WorkspaceMetadata } from './s2meta';
import { SC2Workspace, S2QualifiedFile } from '../sc2mod/archive';
import * as lsp from 'vscode-languageserver';
import { TextDocument } from 'vscode-languageserver-textdocument';
import { DataCatalogConfig, MetadataConfig } from './server';
export declare function createTextDocument(uri: string, text: string): TextDocument;
export declare function createTextDocumentFromFs(filepath: string): TextDocument;
export declare function readDocumentFile(fsPath: string): Promise<TextDocument>;
export declare function createTextDocumentFromUri(uri: string): TextDocument;
export declare function openSourceFilesInLocation(...srcFolders: string[]): AsyncGenerator<TextDocument, void, unknown>;
export declare class IndexedDocument {
    textDocument: TextDocument;
    sourceNode: SourceFile;
}
export interface S2WorkspaceChangeEvent {
    src: string;
    workspace: SC2Workspace;
}
export declare class WorkspaceWatcher {
    readonly folders: string[];
    protected _onDidOpen: lsp.Emitter<lsp.TextDocumentChangeEvent<TextDocument>>;
    constructor(...folders: string[]);
    get onDidOpen(): lsp.Event<lsp.TextDocumentChangeEvent<TextDocument>>;
}
export declare class S2WorkspaceWatcher extends WorkspaceWatcher {
    protected _onDidOpenS2Workspace: lsp.Emitter<S2WorkspaceChangeEvent>;
    protected modSources: string[];
    constructor(workspacePath: string, modSources: string[]);
    get onDidOpenS2Archive(): lsp.Event<S2WorkspaceChangeEvent>;
    watch(): Promise<void>;
}
export interface IStoreSymbols {
    resolveGlobalSymbol(name: string): gt.Symbol | undefined;
}
export interface SourceFileS2Meta {
    file: S2QualifiedFile;
    docName: string;
}
export interface QualifiedSourceFile extends SourceFile {
    s2meta?: SourceFileS2Meta;
}
export declare class Store implements IStoreSymbols {
    protected parser: Parser;
    rootPath?: string;
    documents: Map<string, QualifiedSourceFile>;
    readonly qualifiedDocuments: Map<string, Map<string, QualifiedSourceFile>>;
    openDocuments: Set<string>;
    s2workspace: SC2Workspace;
    s2metadata: S2WorkspaceMetadata;
    constructor(opts?: {
        parser?: Parser;
    });
    clear(): void;
    protected removeQualifiedDocument(qsFile: QualifiedSourceFile): void;
    protected requalifyFile(qsFile: QualifiedSourceFile): void;
    removeDocument(documentUri: string): void;
    updateDocument(document: TextDocument, check?: boolean): void;
    updateS2Workspace(workspace: SC2Workspace): Promise<void>;
    rebuildS2Metadata(metadataCfg?: MetadataConfig, dataCatalogConfig?: DataCatalogConfig): Promise<void>;
    isUriInWorkspace(documentUri: string): boolean;
    resolveGlobalSymbol(name: string): gt.Symbol | undefined;
}
