export type EditorPrefabSchemaVersion = "aura3d-prefab";
export interface EditorPrefabNodeBase {
    readonly id: string;
    readonly name: string;
    readonly parentId: string | null;
}
export interface EditorPrefab<TNode extends EditorPrefabNodeBase = EditorPrefabNodeBase> {
    readonly schemaVersion: EditorPrefabSchemaVersion;
    readonly id: string;
    readonly name: string;
    readonly rootNodeId: string;
    readonly sourceNodeId?: string;
    readonly createdAt: string;
    readonly nodes: readonly TNode[];
}
export interface CreatePrefabOptions<TNode extends EditorPrefabNodeBase> {
    readonly id: string;
    readonly name: string;
    readonly rootNodeId: string;
    readonly sourceNodeId?: string;
    readonly createdAt?: string;
    readonly nodes: readonly TNode[];
}
export interface InstantiatePrefabOptions {
    readonly idPrefix: string;
    readonly rootParentId?: string | null;
    readonly nameSuffix?: string;
}
export declare class PrefabRegistry<TNode extends EditorPrefabNodeBase = EditorPrefabNodeBase> {
    private readonly prefabsById;
    create(options: CreatePrefabOptions<TNode>): EditorPrefab<TNode>;
    register(prefab: EditorPrefab<TNode>): EditorPrefab<TNode>;
    upsert(prefab: EditorPrefab<TNode>): EditorPrefab<TNode>;
    get(id: string): EditorPrefab<TNode> | undefined;
    list(): readonly EditorPrefab<TNode>[];
    remove(id: string): boolean;
    clear(): void;
    instantiate(prefabOrId: EditorPrefab<TNode> | string, options: InstantiatePrefabOptions): readonly TNode[];
}
export declare function validatePrefab<TNode extends EditorPrefabNodeBase>(prefab: EditorPrefab<TNode>): void;
//# sourceMappingURL=PrefabRegistry.d.ts.map