import { type ProjectConfiguration } from './configuration.js';
type ProjectTarget = ProjectConfiguration['targets'][number];
export interface ProjectInputFileState {
    path: string;
    type: 'design' | 'testbench';
}
export declare class ProjectInputFile {
    private _path;
    private _type;
    constructor(_path: ProjectInputFileState['path'], _type: ProjectInputFileState['type']);
    get path(): ProjectInputFileState['path'];
    get type(): ProjectInputFileState['type'];
    set type(type: ProjectInputFileState['type']);
    static serialize(file: ProjectInputFile): ProjectInputFileState;
    static deserialize(data: ProjectInputFileState | string, ..._args: unknown[]): ProjectInputFile;
}
export interface ProjectOutputFileState {
    path: string;
    targetId: string | null;
    stale: boolean;
}
export declare class ProjectOutputFile {
    private _project;
    private _path;
    private _targetId;
    private _stale;
    constructor(_project: Project, _path: ProjectOutputFileState['path'], _targetId?: ProjectOutputFileState['targetId'], _stale?: ProjectOutputFileState['stale']);
    get path(): ProjectOutputFileState['path'];
    get targetId(): ProjectOutputFileState['targetId'];
    set targetId(id: ProjectOutputFileState['targetId']);
    get target(): ProjectTarget | null;
    get stale(): ProjectOutputFileState['stale'];
    set stale(isStale: ProjectOutputFileState['stale']);
    static serialize(file: ProjectOutputFile): ProjectOutputFileState;
    static deserialize(project: Project, data: ProjectOutputFileState | string, ..._args: unknown[]): ProjectOutputFile;
}
export interface ProjectState {
    name: string;
    inputFiles: ProjectInputFileState[] | string[];
    outputFiles: ProjectOutputFileState[] | string[];
    configuration: ProjectConfiguration;
}
export declare class Project {
    private name;
    private inputFiles;
    private outputFiles;
    private configuration;
    constructor(name: string, inputFiles?: ProjectInputFileState[] | string[], outputFiles?: ProjectOutputFileState[] | string[], configuration?: ProjectConfiguration);
    getName(): string;
    getInputFiles(): ProjectInputFile[];
    hasInputFile(filePath: string): boolean;
    getInputFile(filePath: string): ProjectInputFile | null;
    addInputFiles(files: {
        path: string;
        type?: ProjectInputFileState['type'];
    }[]): void;
    removeInputFiles(filePaths: string[]): void;
    getOutputFiles(): ProjectOutputFile[];
    hasOutputFile(filePath: string): boolean;
    getOutputFile(filePath: string): ProjectOutputFile | null;
    addOutputFiles(files: {
        path: string;
        targetId: string;
    }[]): void;
    removeOutputFiles(filePaths: string[]): void;
    expireOutputFiles(): void;
    getConfiguration(): {
        targets: {
            id: string;
            name: string;
            vendor: string;
            family: string;
            device: string;
            package: string;
            yosys?: {
                options?: {
                    optimize?: boolean | undefined;
                    topLevelModule?: string | undefined;
                } | undefined;
                inputFiles?: {
                    useGenerated: boolean;
                    values: string[];
                    useDefault: boolean;
                } | undefined;
                outputFiles?: {
                    useGenerated: boolean;
                    values: string[];
                    useDefault: boolean;
                } | undefined;
                commands?: {
                    useGenerated: boolean;
                    values: string[];
                    useDefault: boolean;
                } | undefined;
            } | undefined;
            nextpnr?: {
                options?: {
                    placedSvg?: boolean | undefined;
                    routedSvg?: boolean | undefined;
                    routedJson?: boolean | undefined;
                } | undefined;
                inputFiles?: {
                    useGenerated: boolean;
                    values: string[];
                    useDefault: boolean;
                } | undefined;
                outputFiles?: {
                    useGenerated: boolean;
                    values: string[];
                    useDefault: boolean;
                } | undefined;
                arguments?: {
                    useGenerated: boolean;
                    values: string[];
                    useDefault: boolean;
                } | undefined;
            } | undefined;
            iverilog?: {
                options?: {
                    testbenchFile?: string | undefined;
                } | undefined;
                inputFiles?: {
                    useGenerated: boolean;
                    values: string[];
                    useDefault: boolean;
                } | undefined;
                outputFiles?: {
                    useGenerated: boolean;
                    values: string[];
                    useDefault: boolean;
                } | undefined;
                arguments?: {
                    useGenerated: boolean;
                    values: string[];
                    useDefault: boolean;
                } | undefined;
            } | undefined;
            directory?: string | undefined;
        }[];
        defaults?: {
            yosys?: {
                options?: {
                    optimize?: boolean | undefined;
                    topLevelModule?: string | undefined;
                } | undefined;
                inputFiles?: {
                    useGenerated: boolean;
                    values: string[];
                } | undefined;
                outputFiles?: {
                    useGenerated: boolean;
                    values: string[];
                } | undefined;
                commands?: {
                    useGenerated: boolean;
                    values: string[];
                } | undefined;
            } | undefined;
            nextpnr?: {
                options?: {
                    placedSvg?: boolean | undefined;
                    routedSvg?: boolean | undefined;
                    routedJson?: boolean | undefined;
                } | undefined;
                inputFiles?: {
                    useGenerated: boolean;
                    values: string[];
                } | undefined;
                outputFiles?: {
                    useGenerated: boolean;
                    values: string[];
                } | undefined;
                arguments?: {
                    useGenerated: boolean;
                    values: string[];
                } | undefined;
            } | undefined;
            iverilog?: {
                options?: {
                    testbenchFile?: string | undefined;
                } | undefined;
                inputFiles?: {
                    useGenerated: boolean;
                    values: string[];
                } | undefined;
                outputFiles?: {
                    useGenerated: boolean;
                    values: string[];
                } | undefined;
                arguments?: {
                    useGenerated: boolean;
                    values: string[];
                } | undefined;
            } | undefined;
        } | undefined;
    };
    updateConfiguration(configuration: Partial<ProjectConfiguration>): void;
    getTarget(id: string): ProjectTarget | null;
    static serialize(project: Project): ProjectState;
    static deserialize(data: ProjectState, ..._args: unknown[]): Project;
    static loadFromData(rawData: Uint8Array): Project;
    static storeToData(project: Project): Uint8Array;
}
export {};
