import { IExtendedContentHubClient } from "../clients/extended-client";
import { IRelation } from "../contracts/base/relation";
import { IRelationDefinition } from "../contracts/base/relation-definition";
import { IChildToManyParentsRelation } from "../contracts/base/relations/child-to-many-parents-relation";
import { IChildToOneParentRelation } from "../contracts/base/relations/child-to-one-parent-relation";
import { IParentToManyChildrenRelation } from "../contracts/base/relations/parent-to-many-children-relation";
import { IParentToOneChildRelation } from "../contracts/base/relations/parent-to-one-child-relation";
export interface IRelationFactory {
    /**
     * Creates a {@link IChildToManyParentsRelation}.
     * @param definition - The relation definition
     * @returns A new relation.
     */
    createChildToManyParentsRelation(definition: IRelationDefinition): IChildToManyParentsRelation;
    /**
     * Creates a {@link IChildToOneParentRelation}.
     * @param definition - The relation definition
     * @returns A new relation.
     */
    createChildToOneParentRelation(definition: IRelationDefinition): IChildToOneParentRelation;
    /**
     * Creates a {@link IParentToManyChildrenRelation}.
     * @param definition - The relation definition
     * @returns A new relation.
     */
    createParentToManyChildrenRelation(definition: IRelationDefinition): IParentToManyChildrenRelation;
    /**
     * Creates a {@link IParentToOneChildRelation}.
     * @param definition - The relation definition
     * @returns A new relation.
     */
    createParentToOneChildRelation(definition: IRelationDefinition): IParentToOneChildRelation;
    /**
     * Creates a {@link IRelation}.
     * @param definition - The relation definition
     * @returns A new relation.
     */
    createRelation(definition: IRelationDefinition): IRelation;
    /**
     * Creates a new {@link IRelation} collection.
     * @param definition - The relation definition
     * @returns A collection of relations.
     */
    createRelations(definitions: Array<IRelationDefinition>): Array<IRelation>;
}
export declare class RelationFactory implements IRelationFactory {
    private readonly _client;
    constructor(client: IExtendedContentHubClient);
    createChildToManyParentsRelation(definition: IRelationDefinition): IChildToManyParentsRelation;
    createChildToOneParentRelation(definition: IRelationDefinition): IChildToOneParentRelation;
    createParentToManyChildrenRelation(definition: IRelationDefinition): IParentToManyChildrenRelation;
    createParentToOneChildRelation(definition: IRelationDefinition): IParentToOneChildRelation;
    createRelation(definition: IRelationDefinition): IRelation;
    createRelations(definitions: Array<IRelationDefinition>): Array<IRelation>;
}
