import type { Blueprint, BlueprintData } from "../../blueprint";
import type { Project } from "../Types";
export interface IProjectManager {
    /**
   * @spec
   * Determines whether the manager is in a state to perform operations.
   * False value indicates that all operations will fail if attempted.
   */
    canOperate: boolean;
    /**
   * @spec
   * Determines whether a project is available to perform operations or must be initialized.
   * False indicates that all operations that depend on an existing project will fail,
   * except for project initialization.
   */
    projectAvailable: Promise<boolean>;
    /**
   * @spec
   * Inits a new project and creates all required structures for it.
   * If a project is determined to already be initialized, does nothing and returns successfully.
   */
    initProject(projectInitializer?: ProjectInitializer): Promise<Project>;
    /**
   * @spec
   * Stores the given Blueprint in the project.
   */
    storeBlueprint(blueprint: Blueprint): Promise<void>;
    /**
   * @spec
   * Gets the current Blueprint from the project.
   */
    getBlueprint(): Promise<Blueprint | undefined>;
    /**
   * @spec
   * Gets the current Project
   */
    getProject(): Promise<Project>;
}
export declare type ProjectInitializer = () => Promise<Project>;
export declare function defaultProject(): Project;
export declare const defaultBlueprintData: BlueprintData;
