import { GlintConfig } from '../config/index.js';
export declare type Document = {
    /** A unique identifier shared by all possible paths that may point to a document. */
    id: string;
    /** The "true" path where this document's source of truth can be found. */
    canonicalPath: string;
    /** Incremented each time the contents of a document changes (used by TS itself). */
    version: number;
    /** The current string contents of this document. */
    contents: string;
    /**
     * Whether this document is a placeholder for something that might exist, or has actually
     * been read from disk or opened in an editor.
     */
    speculative: boolean;
    /** Whether this document has changed on disk since the last time we read it. */
    stale: boolean;
};
/**
 * A read-through cache for workspace document contents.
 *
 * Via the Glint configuration it's instantiated with, this cache is aware
 * of two things:
 *   - the relationship between companion script and template files, treating
 *     a change to one member of such pairs as affecting the version of both
 *   - the existence of custom extensions that would result in multiple
 *     potential on-disk paths corresponding to a single logical TS module,
 *     where one path must win out.
 */
export default class DocumentCache {
    private glintConfig;
    private readonly documents;
    private readonly ts;
    constructor(glintConfig: GlintConfig);
    getDocumentID(path: string): string;
    getCanonicalDocumentPath(path: string): string;
    documentExists(path: string): boolean;
    getCandidateDocumentPaths(filename: string): Array<string>;
    getCompanionDocumentPath(path: string): string | undefined;
    getDocumentContents(path: string, encoding?: string): string;
    getCompoundDocumentVersion(path: string): string;
    getDocumentVersion(path: string): string;
    updateDocument(path: string, contents: string): void;
    markDocumentStale(path: string): void;
    removeDocument(path: string): void;
    private incrementCompanionVersion;
    private findCompanionDocument;
    private getDocument;
    private getCandidateExtensions;
}
export declare function templatePathForSynthesizedModule(path: string): string;
