import { type TypeAttributes } from "./attributes/TypeAttributes.js";
import type { BaseGraphRewriteBuilder, GraphRewriteBuilder, TypeLookerUp } from "./GraphRewriting.js";
import { type Type } from "./Type/Type.js";
import type { TypeBuilder } from "./Type/TypeBuilder.js";
import { type TypeRef } from "./Type/TypeRef.js";
import { UnionBuilder } from "./UnionBuilder.js";
export declare class UnifyUnionBuilder extends UnionBuilder<BaseGraphRewriteBuilder, TypeRef[], TypeRef[]> {
    private readonly _makeObjectTypes;
    private readonly _makeClassesFixed;
    private readonly _unifyTypes;
    constructor(typeBuilder: BaseGraphRewriteBuilder, _makeObjectTypes: boolean, _makeClassesFixed: boolean, _unifyTypes: (typesToUnify: TypeRef[]) => TypeRef);
    protected makeObject(objectRefs: TypeRef[], typeAttributes: TypeAttributes, forwardingRef: TypeRef | undefined): TypeRef;
    protected makeArray(arrays: TypeRef[], typeAttributes: TypeAttributes, forwardingRef: TypeRef | undefined): TypeRef;
}
export declare function unionBuilderForUnification<T extends Type>(typeBuilder: GraphRewriteBuilder<T>, makeObjectTypes: boolean, makeClassesFixed: boolean, conflateNumbers: boolean): UnionBuilder<TypeBuilder & TypeLookerUp, TypeRef[], TypeRef[]>;
export declare function unifyTypes<T extends Type>(types: ReadonlySet<Type>, typeAttributes: TypeAttributes, typeBuilder: GraphRewriteBuilder<T>, unionBuilder: UnionBuilder<TypeBuilder & TypeLookerUp, TypeRef[], TypeRef[]>, conflateNumbers: boolean, maybeForwardingRef?: TypeRef): TypeRef;
