import * as ts from 'typescript'; import { DependencyResolver, DependencyResolverFactory, DependencyResolverHost } from './dependency-resolver'; import { ContentId, Finding, StatePersistence } from '@fimbul/ymir'; export interface ProgramState { update(program: ts.Program, updatedFile: string): void; getUpToDateResult(fileName: string, configHash: string): readonly Finding[] | undefined; setFileResult(fileName: string, configHash: string, result: readonly Finding[]): void; save(): void; } export declare class ProgramStateFactory { private resolverFactory; private statePersistence; private contentId; constructor(resolverFactory: DependencyResolverFactory, statePersistence: StatePersistence, contentId: ContentId); create(program: ts.Program, host: ProgramStateHost & DependencyResolverHost, tsconfigPath: string): ProgramStateImpl; } export declare type ProgramStateHost = Pick; declare const oldStateSymbol: unique symbol; declare class ProgramStateImpl implements ProgramState { private host; private program; private resolver; private statePersistence; private contentId; private project; private projectDirectory; private caseSensitive; private canonicalProjectDirectory; private optionsHash; private assumeChangesOnlyAffectDirectDependencies; private contentIds; private fileResults; private relativePathNames; private [oldStateSymbol]; private recheckOldState; private dependenciesUpToDate; private contentIdHost; constructor(host: ProgramStateHost, program: ts.Program, resolver: DependencyResolver, statePersistence: StatePersistence, contentId: ContentId, project: string); /** get old state if global files didn't change */ private tryReuseOldState; update(program: ts.Program, updatedFile: string): void; private getContentId; private computeContentId; private getRelativePath; private makeRelativePath; getUpToDateResult(fileName: string, configHash: string): readonly Finding[] | undefined; setFileResult(fileName: string, configHash: string, result: ReadonlyArray): void; private isFileUpToDate; private fileDependenciesUpToDate; save(): void; private aggregate; private sortById; private lookupFileIndex; private remapFileNames; } export {};