import * as ts from "ts-morph";
export declare enum ProjectType {
    Game = 0,
    Bundle = 1,
    Package = 2
}
interface ProjectOptions {
    project?: string;
    includePath?: string;
    rojo?: string;
    noInclude?: boolean;
    minify?: boolean;
    ci?: boolean;
}
export declare class Project {
    configFilePath: string;
    rojoFilePath: string | undefined;
    project: ts.Project;
    private compilerOptions;
    private projectPath;
    private rojoProject?;
    private projectInfo;
    private readonly includePath;
    private readonly noInclude;
    private readonly minify;
    private readonly modulesPath;
    private readonly rootDirPath;
    private readonly outDirPath;
    private readonly modulesDir?;
    private readonly rojoOverridePath;
    private readonly runtimeOverride;
    private readonly ci;
    private readonly luaSourceTransformer;
    reloadProject(): void;
    reloadRojo(): void;
    constructor(opts?: ProjectOptions);
    private validateCompilerOptions;
    private validateRbxTypes;
    private getRojoFilePath;
    addFile(filePath: string): void;
    removeFile(filePath: string): Promise<void>;
    refreshFile(filePath: string): Promise<void>;
    cleanDirRecursive(dir: string): Promise<void>;
    getRootDirOrThrow(): string;
    copyModuleFiles(): Promise<void>;
    copyIncludeFiles(): Promise<void>;
    copyLuaFiles(): Promise<void>;
    copyDtsFiles(): Promise<unknown[]>;
    compileAll(): Promise<void>;
    compileFileByPath(filePath: string): Promise<void>;
    private createCompilerState;
    private virtualFileNum;
    compileSource(source: string): string;
    private getEmittedDtsFiles;
    private postProcessDtsFiles;
    private getDiagnosticErrors;
    compileFiles(files: Array<ts.SourceFile>): Promise<void>;
}
export {};
