import { type ProjectConfiguration, TargetConfiguration, TargetOptionTypes, WorkerId } from './configuration.js'; import { Device, Family, Vendor } from './devices.js'; type Primitive = string | number | boolean | bigint | symbol | null | undefined | Date | RegExp | ((...args: unknown[]) => unknown); type PathArray = T extends Primitive ? never : { [K in Extract]: T[K] extends Primitive | unknown[] ? [K] : [K] | [K, ...PathArray]; }[Extract]; type PathArrayValue = P extends [] ? T : P extends [infer K extends string, ...infer R extends string[]] ? K extends keyof T ? PathArrayValue : unknown : unknown; export type ProjectEvent = 'meta' | 'inputFiles' | 'outputFiles' | 'configuration'; type EventCallback = (project: Project, events: ProjectEvent[]) => void; export interface ProjectInputFileState { path: string; type: 'design' | 'testbench' | 'pinconfig'; } export declare class ProjectInputFile { private _project; private _path; private _type; constructor(_project: Project, _path: ProjectInputFileState['path'], _type: ProjectInputFileState['type']); get path(): ProjectInputFileState['path']; get type(): ProjectInputFileState['type']; set type(type: ProjectInputFileState['type']); serialize(): ProjectInputFileState; static deserialize(project: Project, data: ProjectInputFileState | string, ..._args: unknown[]): ProjectInputFile; copy(project: Project): 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']); serialize(): ProjectOutputFileState; static deserialize(project: Project, data: ProjectOutputFileState | string, ..._args: unknown[]): ProjectOutputFile; copy(project: Project): ProjectOutputFile; } export declare class ProjectTarget { private _project; private _data; constructor(_project: Project, _data: TargetConfiguration); get id(): string; set id(newId: string); get name(): string; set name(newName: string); get isActive(): boolean; setActive(): void; getFile(...parts: string[]): string; get vendorId(): string; get availableVendors(): Record; get vendor(): Vendor | undefined; setVendor(vendorId: string): void; get familyId(): string; get availableFamilies(): Record; get family(): Family | undefined; setFamily(familyId: string): void; get deviceId(): string; get availableDevices(): Record; get device(): Device | undefined; setDevice(deviceId: string): void; get packageId(): string; get availablePackages(): Record; get package(): string | undefined; setPackage(packageId: string): void; get config(): TargetConfiguration; setConfig

>(path: P, value: PathArrayValue): void; getEffectiveOptions(workerId: W): TargetOptionTypes[W]; getEffectiveTextConfig(workerId: WorkerId, configId: string, generated: string[], parse?: (values: string[]) => string[]): string[]; update(updates: Partial): void; serialize(): TargetConfiguration; } 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; private eventCallback?; private batchedEvents; private batchCounter; constructor(name: string, inputFiles?: ProjectInputFileState[] | string[], outputFiles?: ProjectOutputFileState[] | string[], configuration?: ProjectConfiguration, eventCallback?: EventCallback); getName(): string; setName(name: string): void; 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; setTopLevelModule(targetId: string, module: string): void; setActiveTestbenchPath(targetId: string, testbenchPath?: string): void; getActiveTestbenchPath(targetId: string): string | undefined; setActivePinConfigPath(targetId: string, pinConfigPath?: string): void; getActivePinConfigPath(targetId: string): string | undefined; setInputFileType(filePath: string, type: ProjectInputFile['type']): void; getTargets(): ProjectTarget[]; hasTarget(id: string): boolean; getTarget(id: string): ProjectTarget | null; getActiveTarget(): ProjectTarget | null; setActiveTarget(id: string | null): void; addTarget(id?: string, config?: Omit): ProjectTarget; removeTarget(id: string): void; updateTarget(id: string, updates: Partial): void; getConfiguration(): { targets: { id: string; name: string; vendor: string; family: string; device: string; package: string; directory?: string | undefined; yosys?: { inputFiles?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; outputFiles?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; synthPrepareCommands?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; synthCommands?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; rtlCommands?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; options?: { optimize?: boolean | undefined; topLevelModule?: string | undefined; synthArguments?: string | undefined; } | undefined; } | undefined; nextpnr?: { inputFiles?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; outputFiles?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; arguments?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; options?: { placedSvg?: boolean | undefined; routedSvg?: boolean | undefined; routedJson?: boolean | undefined; reportJson?: boolean | undefined; pinConfigFile?: string | undefined; } | undefined; } | undefined; iverilog?: { inputFiles?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; outputFiles?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; arguments?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; options?: { testbenchFile?: string | undefined; } | undefined; } | undefined; flasher?: { inputFiles?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; outputFiles?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; packerArguments?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; flasherArguments?: { useGenerated: boolean; values: string[]; useDefault: boolean; } | undefined; options?: { board?: string | undefined; programToFlash?: boolean | undefined; } | undefined; } | undefined; }[]; defaults?: { yosys?: { inputFiles?: { useGenerated: boolean; values: string[]; } | undefined; outputFiles?: { useGenerated: boolean; values: string[]; } | undefined; synthPrepareCommands?: { useGenerated: boolean; values: string[]; } | undefined; synthCommands?: { useGenerated: boolean; values: string[]; } | undefined; rtlCommands?: { useGenerated: boolean; values: string[]; } | undefined; options?: { optimize?: boolean | undefined; topLevelModule?: string | undefined; synthArguments?: string | undefined; } | undefined; } | undefined; nextpnr?: { inputFiles?: { useGenerated: boolean; values: string[]; } | undefined; outputFiles?: { useGenerated: boolean; values: string[]; } | undefined; arguments?: { useGenerated: boolean; values: string[]; } | undefined; options?: { placedSvg?: boolean | undefined; routedSvg?: boolean | undefined; routedJson?: boolean | undefined; reportJson?: boolean | undefined; pinConfigFile?: string | undefined; } | undefined; } | undefined; iverilog?: { inputFiles?: { useGenerated: boolean; values: string[]; } | undefined; outputFiles?: { useGenerated: boolean; values: string[]; } | undefined; arguments?: { useGenerated: boolean; values: string[]; } | undefined; options?: { testbenchFile?: string | undefined; } | undefined; } | undefined; flasher?: { inputFiles?: { useGenerated: boolean; values: string[]; } | undefined; outputFiles?: { useGenerated: boolean; values: string[]; } | undefined; packerArguments?: { useGenerated: boolean; values: string[]; } | undefined; flasherArguments?: { useGenerated: boolean; values: string[]; } | undefined; options?: { board?: string | undefined; programToFlash?: boolean | undefined; } | undefined; } | undefined; } | undefined; activeTargetId?: string | undefined; }; updateConfiguration(configuration: Partial): void; protected importFromProject(other: Project, doTriggerEvent?: boolean): void; triggerInputFilesChanged(): void; triggerOutputFilesChanged(): void; triggerConfigurationChanged(): void; protected emitEvents(...events: ProjectEvent[]): void; protected batchEvents(func: () => T, ...events: ProjectEvent[]): T; protected ignoreEvents(func: () => T): T; protected static emitsEvents(...events: ProjectEvent[]): (_target: object, _propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void; protected makeCorrections(): boolean; private correctTestbenchPath; private correctPinconfigPaths; correctActiveTarget(): boolean; static serialize(project: Project): ProjectState; static deserialize(data: ProjectState, ..._args: unknown[]): Project; static loadFromData(rawData: Uint8Array): Project; static storeToData(project: Project): Uint8Array; } export {};