import { Stream } from "../../../common/util/Stream"; import { TypeDBTransaction } from "../../connection/TypeDBTransaction"; import { Relation } from "../thing/Relation"; import { Thing } from "../thing/Thing"; import { RelationType } from "./RelationType"; import { ThingType } from "./ThingType"; import { Type } from "./Type"; import { Concept } from "../Concept"; import Transitivity = Concept.Transitivity; /** * Roles are special internal types used by relations. We can not create an instance of a role in a database. But we can set an instance of another type (role player) to play a role in a particular instance of a relation type. * Roles allow a schema to enforce logical constraints on types of role players. */ export interface RoleType extends Type { /** @inheritDoc */ getSupertype(transaction: TypeDBTransaction): Promise; /** @inheritDoc */ getSupertypes(transaction: TypeDBTransaction): Stream; /** @inheritDoc */ getSubtypes(transaction: TypeDBTransaction): Stream; /** * Retrieves the RelationType that this role is directly related to. * * ### Examples * * ```ts * roleType.getRelationType(transaction) * ``` * * @param transaction - The current transaction */ getRelationType(transaction: TypeDBTransaction): Promise; /** * Retrieves RelationTypes that this role is related to (directly or indirectly). * * ### Examples * * ```ts * roleType.getRelationTypes(transaction) * ``` * * @param transaction - The current transaction */ getRelationTypes(transaction: TypeDBTransaction): Stream; /** {@inheritDoc RoleType#getPlayerTypes:(1)} */ getPlayerTypes(transaction: TypeDBTransaction): Stream; /** * Retrieves the ThingTypes whose instances play this role. * * ### Examples * * ```ts * roleType.getPlayerTypes(transaction, transitivity) * ``` * * @param transaction - The current transaction * @param transitivity - Transitivity.TRANSITIVE for direct and indirect playing, Transitivity.EXPLICIT for direct playing only */ getPlayerTypes(transaction: TypeDBTransaction, transitivity: Transitivity): Stream; /** {@inheritDoc RoleType#getRelationInstances:(1)} */ getRelationInstances(transaction: TypeDBTransaction): Stream; /** * Retrieves the Relation instances that this role is related to. * * ### Examples * * ```ts * roleType.getRelationInstances(transaction, transitivity) * ``` * * @param transaction - The current transaction * @param transitivity - Transitivity.TRANSITIVE for direct and indirect relation, Transitivity.EXPLICIT for direct relation only */ getRelationInstances(transaction: TypeDBTransaction, transitivity: Transitivity): Stream; /** {@inheritDoc RoleType#getPlayerInstances:(1)} */ getPlayerInstances(transaction: TypeDBTransaction): Stream; /** * Retrieves the Thing instances that play this role. * * ### Examples * * ```ts * roleType.getPlayerInstances(transaction, transitivity) * ``` * * @param transaction - The current transaction * @param transitivity - Transitivity.TRANSITIVE for direct and indirect playing, Transitivity.EXPLICIT for direct playing only */ getPlayerInstances(transaction: TypeDBTransaction, transitivity: Transitivity): Stream; } export declare namespace RoleType { const NAME = "relation:role"; function proto(roleType: RoleType): import("typedb-protocol/proto/concept").RoleType; }