import { CompilerOptions, SourceFile } from "ts-morph";
import { DataModel } from "../data-model/DataModel.js";
import { NamingHelper } from "../data-model/NamingHelper.js";
import { EmitModes } from "../OptionModel.js";
import { FileHandler } from "./FileHandler.js";
import { FileFormatter } from "./formatter/FileFormatter.js";
export interface ProjectManagerOptions {
    usePrettier?: boolean;
    tsConfigPath?: string;
    bundledFileGeneration?: boolean;
    /**
     * for testing purposes, turn this on and retrieve all generated files via getCachedFiles
     */
    noOutput?: boolean;
    allowTypeChecking?: boolean;
}
export declare function createProjectManager(outputDir: string, emitMode: EmitModes, namingHelper: NamingHelper, dataModel: DataModel, options: ProjectManagerOptions): Promise<ProjectManager>;
export declare class ProjectManager {
    protected outputDir: string;
    protected emitMode: EmitModes;
    protected namingHelper: NamingHelper;
    protected dataModel: DataModel;
    protected formatter: FileFormatter | undefined;
    protected options: ProjectManagerOptions;
    private project;
    private mainServiceFile;
    private mainModelFile;
    private mainQFile;
    private readonly cachedFiles;
    constructor(outputDir: string, emitMode: EmitModes, namingHelper: NamingHelper, dataModel: DataModel, formatter: FileFormatter | undefined, compilerOptions: CompilerOptions | undefined, options: ProjectManagerOptions);
    getDataModel(): DataModel;
    /**
     * Only filled when noOutput=true
     */
    getCachedFiles(): Map<string, SourceFile>;
    private writeFile;
    private createFile;
    init(): Promise<void>;
    initModels(): void;
    finalizeModels(): Promise<void>;
    initQObjects(): void;
    finalizeQObjects(): Promise<void>;
    initServices(): void;
    finalizeServices(): Promise<void>;
    getMainServiceFile(): FileHandler;
    createOrGetMainModelFile(reservedNames?: Array<string>): FileHandler;
    createOrGetMainQObjectFile(reservedNames?: Array<string>): FileHandler;
    createOrGetModelFile(folderPath: string, name: string, reservedNames?: Array<string> | undefined): FileHandler;
    createOrGetQObjectFile(folderPath: string, name: string, reservedNames?: Array<string> | undefined): FileHandler;
    createOrGetServiceFile(folderPath: string, name: string, reservedNames?: Array<string> | undefined): FileHandler;
    finalizeFile(file: FileHandler): Promise<void>;
}
