Skip to main content

Class: Domain

Defined in: packages/client/src/core/domain.ts:34

Represents a relationship definition between two Classes in the DocStack database.

A Domain defines how documents of different classes relate to each other, supporting cardinality constraints (1:1, 1:N, N:1, N:N). Relation documents are created to track the links between source and target documents.

Use the static factory methods (Domain.create, Domain.fetch) to instantiate domains - the constructor is private.

Example​

// Define a 1:N relationship between Projects and Tasks
const projectTaskDomain = await Domain.create(
stack,
null,
'ProjectTasks',
'domain',
'1:N',
projectClass,
taskClass
);

// Create a relation between a project and a task
await projectTaskDomain.addRelation(taskDoc, 'Project-1');

Extends​

  • Domain

Properties​

PropertyModifierTypeDefault valueDescriptionOverridesInherited fromDefined in
closepublic() => voidundefinedReleases this instance's live document subscription. The Domain counterpart to Class.close: a Domain no longer in use stays subscribed for the lifetime of the stack until this is called. Safe to call twice.-Domain_.closepackages/shared/lib/utils/stack/domain.d.ts:29
descriptionpublicstringundefinedOptional description of the domain purpose.Domain_.description-packages/client/src/core/domain.ts:42
idpublicstringundefinedThe unique identifier for this domain.Domain_.id-packages/client/src/core/domain.ts:44
loggerpublicLoggerundefined-Domain_.logger-packages/client/src/core/domain.ts:56
modelpublicDomainModelundefinedThe underlying DomainModel document.Domain_.model-packages/client/src/core/domain.ts:52
namepublicstringundefinedThe name of this domain (e.g., 'ProjectTasks').Domain_.name-packages/client/src/core/domain.ts:38
relationpublic"1:1" | "1:N" | "N:1" | "N:N"undefinedThe cardinality of the relationship: '1:1', '1:N', 'N:1', or 'N:N'.Domain_.relation-packages/client/src/core/domain.ts:46
sourceClasspublicClassundefinedThe source class in the relationship.Domain_.sourceClass-packages/client/src/core/domain.ts:48
stackpublicStackundefinedReference to the parent stack instance.Domain_.stack-packages/client/src/core/domain.ts:36
statepublic"busy" | "idle""idle"Current state indicating if the domain is processing an operation.Domain_.state-packages/client/src/core/domain.ts:54
targetClasspublicClassundefinedThe target class in the relationship.Domain_.targetClass-packages/client/src/core/domain.ts:50
typepublic"~self" | "domain"undefinedThe domain type (typically 'domain').Domain_.type-packages/client/src/core/domain.ts:40
loggerstaticLoggerundefined-Domain_.logger-packages/client/src/core/domain.ts:55

Methods​

addRelation()​

addRelation(document, referenceId): Promise<RelationDocument>;

Defined in: packages/client/src/core/domain.ts:469

Creates a relation between documents. Validates cardinality constraints before creating the relation.

Parameters​

ParameterTypeDescription
documentDocumentThe document to link (source or target based on role)
referenceIdstringThe ID of the document to link to

Returns​

Promise<RelationDocument>

The created relation document, or existing relation if already exists

Example​

// Link a task to a project (assuming 1:N from Project to Task)
const relation = await projectTaskDomain.addRelation(taskDoc, 'Project-1');

Overrides​

Domain_.addRelation

assertReferenceAllowed()​

assertReferenceAllowed(role): void;

Defined in: packages/client/src/core/domain.ts:321

Parameters​

ParameterType
role"target" | "source"

Returns​

void

Overrides​

Domain_.assertReferenceAllowed

build()​

build(): Promise<Domain>;

Defined in: packages/client/src/core/domain.ts:90

Returns​

Promise<Domain>

Overrides​

Domain_.build

buildRelationParams()​

buildRelationParams(
doc,
referenceId,
role): DomainRelationParams;

Defined in: packages/client/src/core/domain.ts:342

Parameters​

ParameterType
docDocument
referenceIdstring
role"target" | "source"

Returns​

DomainRelationParams

Overrides​

Domain_.buildRelationParams

deleteRelation()​

deleteRelation(sourceId, targetId): Promise<boolean>;

Defined in: packages/client/src/core/domain.ts:490

Deletes a relation between two documents by their IDs.

Parameters​

ParameterTypeDescription
sourceIdstringThe source document ID
targetIdstringThe target document ID

Returns​

Promise<boolean>

true if deleted, false if relation not found

Overrides​

Domain_.deleteRelation

deleteRelationDoc()​

deleteRelationDoc(relationDocId): Promise<boolean>;

Defined in: packages/client/src/core/domain.ts:507

Deletes a relation document by its ID.

Parameters​

ParameterTypeDescription
relationDocIdstringThe relation document ID to delete

Returns​

Promise<boolean>

true if deleted successfully

Overrides​

Domain_.deleteRelationDoc

ensureCardinalityConstraints()​

ensureCardinalityConstraints(params): Promise<void>;

Defined in: packages/client/src/core/domain.ts:395

Parameters​

ParameterType
paramsDomainRelationParams

Returns​

Promise<void>

Overrides​

Domain_.ensureCardinalityConstraints

fetchReferenceDocument()​

fetchReferenceDocument(referenceId, expectedType): Promise<Document>;

Defined in: packages/client/src/core/domain.ts:365

Parameters​

ParameterType
referenceIdstring
expectedTypestring

Returns​

Promise<Document>

Overrides​

Domain_.fetchReferenceDocument

findRelationDoc()​

findRelationDoc(selector): Promise<RelationDocument>;

Defined in: packages/client/src/core/domain.ts:374

Parameters​

ParameterType
selector{ [key: string]: any; }

Returns​

Promise<RelationDocument>

Overrides​

Domain_.findRelationDoc

getDocumentRole()​

getDocumentRole(doc): "target" | "source";

Defined in: packages/client/src/core/domain.ts:311

Parameters​

ParameterType
docDocument

Returns​

"target" | "source"

Overrides​

Domain_.getDocumentRole

getModel()​

getModel(): DomainModel;

Defined in: packages/client/src/core/domain.ts:288

Returns the current DomainModel representation of this domain.

Returns​

DomainModel

The DomainModel document

Overrides​

Domain_.getModel

getName()​

getName(): string;

Defined in: packages/client/src/core/domain.ts:66

Returns​

string

Overrides​

Domain_.getName

getRelations()​

getRelations(
selector?,
fields?,
skip?,
limit?): Promise<RelationDocument[]>;

Defined in: packages/client/src/core/domain.ts:447

Retrieves relation documents for this domain.

Parameters​

ParameterTypeDescription
selector?{ [key: string]: any; }Optional PouchDB/Mango selector for filtering
fields?string[]Optional list of fields to return
skip?numberNumber of documents to skip
limit?numberMaximum number of documents to return

Returns​

Promise<RelationDocument[]>

Array of matching relation documents

Example​

// Get all relations
const allRelations = await domain.getRelations();

// Get relations for a specific source
const projectRelations = await domain.getRelations({ sourceId: { $eq: 'Project-1' } });

Overrides​

Domain_.getRelations

getStack()​

getStack(): Stack;

Defined in: packages/client/src/core/domain.ts:62

Returns​

Stack

Overrides​

Domain_.getStack

init()​

init(
stack,
id,
name,
type,
relation,
sourceClass,
targetClass,
description?): void;

Defined in: packages/client/src/core/domain.ts:110

Parameters​

ParameterType
stackStack
idstring
namestring
type"~self" | "domain"
relation"1:1" | "1:N" | "N:1" | "N:N"
sourceClassClass
targetClassClass
description?string

Returns​

void

Overrides​

Domain_.init

requireStack()​

requireStack(): Stack;

Defined in: packages/client/src/core/domain.ts:304

Returns​

Stack

Overrides​

Domain_.requireStack

setId()​

setId(id): void;

Defined in: packages/client/src/core/domain.ts:70

Parameters​

ParameterType
idstring

Returns​

void

Overrides​

Domain_.setId

setModel()​

setModel(model?): void;

Defined in: packages/client/src/core/domain.ts:74

Parameters​

ParameterType
model?DomainModel

Returns​

void

Overrides​

Domain_.setModel

throwIfRelationExists()​

throwIfRelationExists(filter, params): Promise<RelationDocument>;

Defined in: packages/client/src/core/domain.ts:384

Parameters​

ParameterType
filter{ [key: string]: any; }
paramsDomainRelationParams

Returns​

Promise<RelationDocument>

Overrides​

Domain_.throwIfRelationExists

validateRelation()​

validateRelation(doc, referenceId): Promise<DomainRelationValidation>;

Defined in: packages/client/src/core/domain.ts:410

Parameters​

ParameterType
docDocument
referenceIdstring

Returns​

Promise<DomainRelationValidation>

Overrides​

Domain_.validateRelation

buildFromModel()​

static buildFromModel(stack, domainModel): Promise<Domain>;

Defined in: packages/client/src/core/domain.ts:233

Builds a Domain instance from an existing DomainModel document. Fetches the source and target classes and hydrates the domain.

Parameters​

ParameterTypeDescription
stackStackThe parent stack instance
domainModelDomainModelThe DomainModel document from the database

Returns​

Promise<Domain>

The hydrated Domain instance

Throws​

Error if source or target class is not found

Overrides​

Domain_.buildFromModel

create()​

static create(
stack,
id,
name,
type,
relation,
sourceClass,
targetClass,
description?,
schema?): Promise<Domain>;

Defined in: packages/client/src/core/domain.ts:204

Creates a new domain and persists it to the database. This is the primary factory method for creating new domains.

Parameters​

ParameterTypeDescription
stackStackThe parent stack instance
idstringThe domain ID (typically null for auto-generation)
namestringThe name for the new domain
type"~self" | "domain"The domain type (typically 'domain')
relation"1:1" | "1:N" | "N:1" | "N:N"The cardinality constraint: '1:1', '1:N', 'N:1', or 'N:N'
sourceClassClassThe source Class in the relationship
targetClassClassThe target Class in the relationship
description?stringOptional description of the domain
schema?anyOptional schema definition

Returns​

Promise<Domain>

The persisted Domain instance

Example​

const domain = await Domain.create(
stack, null, 'UserProjects', 'domain', '1:N',
userClass, projectClass, 'Users can have many projects'
);

Overrides​

Domain_.create

fetch()​

static fetch(stack, domainName): Promise<Domain>;

Defined in: packages/client/src/core/domain.ts:275

Fetches a domain by its name. This is the most common way to retrieve an existing domain.

Parameters​

ParameterTypeDescription
stackStackThe parent stack instance
domainNamestringThe domain name to fetch

Returns​

Promise<Domain>

The Domain instance, or null if not found

Example​

const domain = await Domain.fetch(stack, 'ProjectTasks');
if (domain) {
const relations = await domain.getRelations();
}

Overrides​

Domain_.fetch

get()​

static get(
stack,
id,
name,
type,
relation,
sourceClass,
targetClass,
description?,
schema?): Domain;

Defined in: packages/client/src/core/domain.ts:157

Gets a Domain instance without persisting it to the database. Use this for working with existing domain models or for testing. Sets up a document change listener for real-time updates.

Parameters​

ParameterTypeDescription
stackStackThe parent stack instance
idstringThe domain ID (or null for new domains)
namestringThe domain name
type"~self" | "domain"The domain type (typically 'domain')
relation"1:1" | "1:N" | "N:1" | "N:N"The cardinality constraint
sourceClassClassThe source Class in the relationship
targetClassClassThe target Class in the relationship
description?stringOptional description
schema?anyOptional schema definition

Returns​

Domain

A new Domain instance (not persisted)

Overrides​

Domain_.get