import { Range, TextDocument, TextSpan, VueSFCDocument } from '@vuedx/vue-virtual-textdocument';
import type { Disposable } from '../contracts/Disposable';
import type { FilesystemProvider } from '../contracts/FilesystemProvider';
import type { OffsetRangeLike } from '../contracts/OffsetRangeLike';
import type { TypeScript } from '../contracts/TypeScript';
import type { TypescriptContextService } from './TypescriptContextService';
export declare class FilesystemService implements Disposable {
    private readonly provider;
    private readonly ts;
    static createInstance(ts: TypescriptContextService): FilesystemService;
    private readonly vueFiles;
    private readonly watchers;
    private readonly logger;
    constructor(provider: FilesystemProvider, ts: TypescriptContextService);
    getVersion(fileName: string): string;
    private readonly textDocumentCache;
    /**
     * Returns source file for virtual files.
     */
    getSourceFile(fileName: string): TextDocument | null;
    getFile(fileName: string): TextDocument | null;
    getLanguageId(fileName: string): string;
    /**
     * Get Vue SFC File
     * TODO: Create a shared cache for closed files.
     * @returns null for non-vue files and when file does not exist
     */
    getVueFile(fileName: string): VueSFCDocument | null;
    getTextSpan(doc: Pick<TextDocument, 'getText'>, span: TextSpan): string;
    getLineText(doc: Pick<TextDocument, 'getText' | 'positionAt' | 'offsetAt'>, offset: number): string;
    isVueFile(fileName: string): boolean;
    /**
     * @deprecated Use {@link isGeneratedVueFile} instead
     */
    isVueTsFile(fileName: string): boolean;
    isGeneratedVueFile(fileName: string): boolean;
    getRealFileNameIfAny(fileName: string): string;
    isVueRuntimeFile(fileName: string): boolean;
    isProjectRuntimeFile(fileName: string): boolean;
    private readonly NULL_RANGE;
    toFileName(uri: string): string;
    toRange(file: TextDocument, range: OffsetRangeLike): Range;
    toOffsets(file: TextDocument, range: Range): OffsetRangeLike;
    getFileExtension(fileName: string): string;
    getPositionString(doc: Pick<TextDocument, 'positionAt'>, offset: number): string;
    dispose(): void;
    /**
     * Dedupe changes by fileName
     */
    resolveAllFileTextChanges<T extends TypeScript.FileTextChanges>(changes: readonly T[]): T[];
    resolveFileTextChanges<T extends TypeScript.FileTextChanges>(fileTextChanges: T): T | null;
}
//# sourceMappingURL=FilesystemService.d.ts.map