Skip to main content

AbstractRepository

@webda/models


Abstract Class: AbstractRepository<T>

Defined in: packages/models/src/repositories/abstract.ts:18

Base repository implementation providing shared logic for key management, event handling, and default method implementations.

Concrete repositories (MemoryRepository, etc.) extend this class and implement the abstract storage methods.

Extended by​

Type Parameters​

T​

T extends ModelClass

The ModelClass this repository manages

Implements​

Constructors​

Constructor​

new AbstractRepository<T>(model, pks, separator?): AbstractRepository<T>

Defined in: packages/models/src/repositories/abstract.ts:27

Parameters​

model​

T

The model class constructor

pks​

string[]

Array of primary key field names

separator?​

string = "_"

Separator used when joining composite key fields into a string (default: "_")

Returns​

AbstractRepository<T>

Properties​

events​

protected events: Map<keyof InstanceType<T>[typeof WEBDA_EVENTS], Set<(data) => void>>

Defined in: packages/models/src/repositories/abstract.ts:20

Registered event listeners keyed by event name


maxListeners​

protected maxListeners: number = 100

Defined in: packages/models/src/repositories/abstract.ts:357

Max-listeners hint kept for Node EventEmitter API compatibility. Not enforced — repositories use an unbounded Set per event.


model​

protected model: T

Defined in: packages/models/src/repositories/abstract.ts:28

The model class constructor


pks​

protected pks: string[]

Defined in: packages/models/src/repositories/abstract.ts:29

Array of primary key field names


separator​

protected separator: string = "_"

Defined in: packages/models/src/repositories/abstract.ts:30

Separator used when joining composite key fields into a string (default: "_")

Methods​

buildItem()​

protected buildItem(data): InstanceType<T>

Defined in: packages/models/src/repositories/abstract.ts:47

Build the model instance to create from the incoming data

Primary key fields that are undefined or null are dropped from the data so a key generated by the model constructor (e.g. UuidModel) is not overwritten. Repositories must read the storage key from the returned instance.

Parameters​

data​

Helpers<InstanceType<T>>

the incoming data

Returns​

InstanceType<T>

the model instance


create()​

abstract create(data, save?): Promise<InstanceType<T>>

Defined in: packages/models/src/repositories/abstract.ts:303

Create data in the store

Parameters​

data​

Helpers<InstanceType<T>>

save?​

boolean

if false, create in-memory object without saving

Returns​

Promise<InstanceType<T>>

Implementation of​

Repository.create


delete()​

abstract delete<K>(uuid, conditionField?, condition?): Promise<void>

Defined in: packages/models/src/repositories/abstract.ts:315

Delete data from the store

Type Parameters​

K​

K extends string

Parameters​

uuid​

PrimaryKeyType<InstanceType<T>>

conditionField?​

K | null

Field to check for condition (optional)

condition?​

PropertyPathType<InstanceType<T>, K> | JSONed<PropertyPathType<InstanceType<T>, K>>

Value to check for condition (optional)

Returns​

Promise<void>

Implementation of​

Repository.delete


deleteItemFromCollection()​

abstract deleteItemFromCollection<K, L>(uuid, collection, index, itemWriteConditionField?, itemWriteCondition?): Promise<void>

Defined in: packages/models/src/repositories/abstract.ts:273

Remove item from a collection by index

Type Parameters​

K​

K extends string

L​

L extends string | number | symbol

Parameters​

uuid​

PrimaryKeyType<InstanceType<T>>

collection​

K

Name of the array field

index​

number

Position of item to remove

itemWriteConditionField?​

L

Field to check for condition on item

itemWriteCondition?​

ArrayElement<InstanceType<T>[K]>[L]

Expected value for condition field on item

Returns​

Promise<void>

Implementation of​

Repository.deleteItemFromCollection


emit()​

emit<K>(event, data): Promise<void>

Defined in: packages/models/src/repositories/abstract.ts:396

Emit an event to all registered listeners and await their completion.

Type Parameters​

K​

K extends string | number | symbol

Parameters​

event​

K

The event name to emit

data​

InstanceType<T>[typeof WEBDA_EVENTS][K]

The event payload

Returns​

Promise<void>

Implementation of​

Repository.emit


excludePrimaryKey()​

excludePrimaryKey(object): any

Defined in: packages/models/src/repositories/abstract.ts:131

Parameters​

object​

any

Returns​

any

Implementation of​

Repository.excludePrimaryKey


exists()​

abstract exists(uuid): Promise<boolean>

Defined in: packages/models/src/repositories/abstract.ts:320

Verify if the object exists

Parameters​

uuid​

PrimaryKeyType<InstanceType<T>>

Returns​

Promise<boolean>

Implementation of​

Repository.exists


fromUID()​

fromUID(uid): ModelRefWithCreate<InstanceType<T>>

Defined in: packages/models/src/repositories/abstract.ts:80

Return a ref from the uuid

Parameters​

uid​

string

the serialized primary key

Returns​

ModelRefWithCreate<InstanceType<T>>

a model reference with create capability

Implementation of​

Repository.fromUID


get()​

abstract get(primaryKey): Promise<HelperProperties<InstanceType<T>>>

Defined in: packages/models/src/repositories/abstract.ts:302

Get data from the store

Parameters​

primaryKey​

PrimaryKeyType<InstanceType<T>>

Returns​

Promise<HelperProperties<InstanceType<T>>>

Implementation of​

Repository.get


getMaxListeners()​

getMaxListeners(): number

Defined in: packages/models/src/repositories/abstract.ts:377

EventEmitter-compatibility shim. Returns the max-listeners hint.

Returns​

number

the current max-listeners hint


getPrimaryKey()​

Call Signature​

getPrimaryKey(object, forceObject?): PrimaryKeyType<InstanceType<T>>

Defined in: packages/models/src/repositories/abstract.ts:141

Get the primary key value for an object as a scalar or string.

Parameters​
object​

any

forceObject?​

false

Returns​

PrimaryKeyType<InstanceType<T>>

Implementation of​

Repository.getPrimaryKey

Call Signature​

getPrimaryKey(object, forceObject): PrimaryKey<InstanceType<T>>

Defined in: packages/models/src/repositories/abstract.ts:143

Get the primary key value for an object as a structured key object.

Parameters​
object​

any

forceObject​

true

Returns​

PrimaryKey<InstanceType<T>>

Implementation of​

Repository.getPrimaryKey


getRootModel()​

getRootModel(): T

Defined in: packages/models/src/repositories/abstract.ts:33

Returns​

T

Implementation of​

Repository.getRootModel


getUID()​

getUID(object): string

Defined in: packages/models/src/repositories/abstract.ts:216

Parameters​

object​

any

Returns​

string

Implementation of​

Repository.getUID


incrementAttribute()​

incrementAttribute<K, L>(primaryKey, info, _conditionField?, _condition?): Promise<void>

Defined in: packages/models/src/repositories/abstract.ts:249

Type Parameters​

K​

K extends string

L​

L extends string

Parameters​

primaryKey​

PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>

info​

L | { property: L; value?: number; }

_conditionField?​

K | null

_condition?​

any

Returns​

Promise<void>

Implementation of​

Repository.incrementAttribute


incrementAttributes()​

abstract incrementAttributes<K, L>(primaryKey, info, _conditionField?, _condition?): Promise<void | Record<string, number>>

Defined in: packages/models/src/repositories/abstract.ts:258

Atomically increment numeric field(s)

Type Parameters​

K​

K extends string

L​

L extends string

Parameters​

primaryKey​

PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>

info​

(L | { property: L; value?: number; })[] | Record<L, number>

Fields to increment with optional values (default: 1)

_conditionField?​

K | null

_condition?​

any

Returns​

Promise<void | Record<string, number>>

Implementation of​

Repository.incrementAttributes


iterate()​

abstract iterate(query, params?): AsyncGenerator<InstanceType<T>, any, any>

Defined in: packages/models/src/repositories/abstract.ts:272

Iterate over the store

Parameters​

query​

string

the WebdaQL query, optionally with ? or :name placeholders

params?​

QueryParameters

values for the placeholders: an array for ?, an object for :name

Returns​

AsyncGenerator<InstanceType<T>, any, any>

Implementation of​

Repository.iterate


off()​

off<K>(event, listener): void

Defined in: packages/models/src/repositories/abstract.ts:346

Type Parameters​

K​

K extends string | number | symbol

Parameters​

event​

K

listener​

(data) => void

Returns​

void

Implementation of​

Repository.off


on()​

on<K>(event, listener): void

Defined in: packages/models/src/repositories/abstract.ts:323

Type Parameters​

K​

K extends string | number | symbol

Parameters​

event​

K

listener​

(data) => void

Returns​

void

Implementation of​

Repository.on


once()​

once<K>(event, listener): void

Defined in: packages/models/src/repositories/abstract.ts:334

Type Parameters​

K​

K extends string | number | symbol

Parameters​

event​

K

listener​

(data) => void

Returns​

void

Implementation of​

Repository.once


parseLegacyUID()​

protected parseLegacyUID(uid): PrimaryKey<InstanceType<T>> | undefined

Defined in: packages/models/src/repositories/abstract.ts:119

Parse a uid through the model's parseLegacyUID hook

Parameters​

uid​

string

the raw storage key

Returns​

PrimaryKey<InstanceType<T>> | undefined

a key whose string form is the raw uid, or undefined when the model does not recognise it


parseUID()​

parseUID(uid, forceObject?): PrimaryKeyType<InstanceType<T>> | PrimaryKey<InstanceType<T>>

Defined in: packages/models/src/repositories/abstract.ts:93

Parse a serialized primary key

A composite key that does not split into the primary key fields is offered to the model's optional static parseLegacyUID(uid) hook (see WEBDA_LEGACY_UID): the returned key keeps the raw uid as its string form so it addresses the legacy storage entry. Without a hook, or when the hook declines, the uid is rejected.

Parameters​

uid​

string

forceObject?​

boolean

Returns​

PrimaryKeyType<InstanceType<T>> | PrimaryKey<InstanceType<T>>

Implementation of​

Repository.parseUID


patch()​

abstract patch<K>(primaryKey, data, _conditionField?, _condition?): Promise<void>

Defined in: packages/models/src/repositories/abstract.ts:304

Partially update object (only specified fields)

Type Parameters​

K​

K extends string

Parameters​

primaryKey​

PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>

data​

Partial<InstanceType<T>>

Partial object data (only fields to update)

_conditionField?​

K | null

_condition?​

any

Returns​

Promise<void>

Implementation of​

Repository.patch


query()​

abstract query(query, params?): Promise<{ continuationToken?: string; results: InstanceType<T>[]; }>

Defined in: packages/models/src/repositories/abstract.ts:268

Query the store

Parameters​

query​

string

the WebdaQL query, optionally with ? or :name placeholders

params?​

QueryParameters

values for the placeholders: an array for ?, an object for :name

Returns​

Promise<{ continuationToken?: string; results: InstanceType<T>[]; }>

Implementation of​

Repository.query


ref()​

ref(key): ModelRefWithCreate<InstanceType<T>>

Defined in: packages/models/src/repositories/abstract.ts:242

Parameters​

key​

PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>

Returns​

ModelRefWithCreate<InstanceType<T>>

Implementation of​

Repository.ref


removeAttribute()​

abstract removeAttribute<L, K>(uuid, attribute, conditionField?, condition?): Promise<void>

Defined in: packages/models/src/repositories/abstract.ts:296

Atomically remove an attribute

Type Parameters​

L​

L extends string

K​

K extends string

Parameters​

uuid​

PrimaryKeyType<InstanceType<T>>

attribute​

K

Attribute name to remove

conditionField?​

L | null

Field to check for condition

condition?​

PropertyPathType<InstanceType<T>, L> | JSONed<PropertyPathType<InstanceType<T>, L>>

Expected value for condition field

Returns​

Promise<void>

Implementation of​

Repository.removeAttribute


removeListener()​

removeListener<K>(event, listener): void

Defined in: packages/models/src/repositories/abstract.ts:366

EventEmitter-compatibility alias for off. Consumers that treat a repository as a Node EventEmitter (e.g. @webda/runtime EventIterator) call removeListener.

Type Parameters​

K​

K extends string | number | symbol

Parameters​

event​

K

the event name

listener​

(data) => void

the listener to remove

Returns​

void


setAttribute()​

setAttribute<K, L>(primaryKey, attribute, value, conditionField?, condition?): Promise<void>

Defined in: packages/models/src/repositories/abstract.ts:231

Type Parameters​

K​

K extends string

L​

L extends string

Parameters​

primaryKey​

string | PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>

attribute​

K

value​

PropertyPathType<InstanceType<T>, K>

conditionField?​

L | null

condition?​

PropertyPathType<InstanceType<T>, L> | JSONed<PropertyPathType<InstanceType<T>, L>>

Returns​

Promise<void>

Implementation of​

Repository.setAttribute


setMaxListeners()​

setMaxListeners(n): this

Defined in: packages/models/src/repositories/abstract.ts:386

EventEmitter-compatibility shim. Records the max-listeners hint (no enforcement).

Parameters​

n​

number

the new hint value

Returns​

this

this for chaining


update()​

abstract update<K>(data, conditionField?, condition?): Promise<void>

Defined in: packages/models/src/repositories/abstract.ts:310

Replace entire object (full update)

Type Parameters​

K​

K extends string

Parameters​

data​

Helpers<InstanceType<T>>

Complete object data including primary key

conditionField?​

K | null

Field to check for optimistic locking (null = no check)

condition?​

PropertyPathType<InstanceType<T>, K>

Expected value for condition field

Returns​

Promise<void>

Implementation of​

Repository.update


upsert()​

upsert(data): Promise<InstanceType<T>>

Defined in: packages/models/src/repositories/abstract.ts:221

Parameters​

data​

Helpers<InstanceType<T>>

Returns​

Promise<InstanceType<T>>

Implementation of​

Repository.upsert


upsertItemToCollection()​

abstract upsertItemToCollection<K, L>(uuid, collection, item, index?, itemWriteConditionField?, itemWriteCondition?): Promise<void>

Defined in: packages/models/src/repositories/abstract.ts:283

Add or update item in a collection (array field)

Type Parameters​

K​

K extends string

L​

L extends string | number | symbol

Parameters​

uuid​

PrimaryKeyType<InstanceType<T>>

collection​

K

Name of the array field

item​

ArrayElement<InstanceType<T>[K]> | JSONed<ArrayElement<InstanceType<T>[K]>>

Item to add/update

index?​

number

Position to insert (undefined = append to end)

itemWriteConditionField?​

ArrayElement<InstanceType<T>[K]> extends object ? L : never

Field to check for condition on item

itemWriteCondition?​

ArrayElement<InstanceType<T>[K]> extends object ? object & ArrayElement[L] : ArrayElement<InstanceType<T>[K]>

Expected value for condition field on item

Returns​

Promise<void>

Implementation of​

Repository.upsertItemToCollection