Skip to main content

EventRepository

@webda/models


Class: EventRepository<T>

Defined in: packages/models/src/repositories/event.ts:17

Repository decorator that wraps another repository with event emission.

Emits "before" events (Create, Update, Patch, Delete, PartialUpdate, Query) before delegating to the underlying repository, then emits "after" events (Created, Updated, Patched, Deleted, PartialUpdated, Queried) on success.

Extends​

Type Parameters​

T​

T extends ModelClass = any

The ModelClass this repository manages

Constructors​

Constructor​

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

Defined in: packages/models/src/repositories/event.ts:24

Parameters​

model​

T

The model class constructor

pks​

string[]

Array of primary key field names

repository​

AbstractRepository<T>

The underlying repository to delegate storage operations to

separator?​

string

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

Returns​

EventRepository<T>

Overrides​

AbstractRepository.constructor

Properties​

[WEBDA_TEST]​

[WEBDA_TEST]: object

Defined in: packages/models/src/repositories/event.ts:291

Test utilities - clears events and delegates to underlying repository

clear​

clear: (excludeListeners?) => Promise<void>

Parameters​
excludeListeners?​

boolean

Returns​

Promise<void>


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

Inherited from​

AbstractRepository.events


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.

Inherited from​

AbstractRepository.maxListeners


model​

protected model: T

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

The model class constructor

Inherited from​

AbstractRepository.model


pks​

protected pks: string[]

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

Array of primary key field names

Inherited from​

AbstractRepository.pks


repository​

protected repository: AbstractRepository<T>

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

The underlying repository to delegate storage operations to


separator​

protected separator: string = "_"

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

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

Inherited from​

AbstractRepository.separator

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

Inherited from​

AbstractRepository.buildItem


create()​

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

Defined in: packages/models/src/repositories/event.ts:234

Create with event emission (emits Create before and Created after)

Parameters​

data​

Helpers<InstanceType<T>>

save?​

boolean

Returns​

Promise<InstanceType<T>>

Overrides​

AbstractRepository.create


delete()​

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

Defined in: packages/models/src/repositories/event.ts:275

Delete with event emission (emits Delete before and Deleted after)

Type Parameters​

K​

K extends string

Parameters​

uuid​

PrimaryKeyType<InstanceType<T>>

conditionField?​

K | null

condition?​

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

Returns​

Promise<void>

Overrides​

AbstractRepository.delete


deleteItemFromCollection()​

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

Defined in: packages/models/src/repositories/event.ts:102

Delete an item from a collection

Type Parameters​

K​

K extends string

L​

L extends string | number | symbol

Parameters​

uuid​

PrimaryKeyType<InstanceType<T>>

The UUID of the item

collection​

K

The collection to delete from

index​

number

The index of the item to delete

itemWriteConditionField?​

L

The field to use for the write condition

itemWriteCondition?​

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

The value to use for the write condition

Returns​

Promise<void>

Overrides​

AbstractRepository.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>

Inherited from​

AbstractRepository.emit


excludePrimaryKey()​

excludePrimaryKey(object): any

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

Parameters​

object​

any

Returns​

any

Inherited from​

AbstractRepository.excludePrimaryKey


exists()​

exists(uuid): Promise<boolean>

Defined in: packages/models/src/repositories/event.ts:285

Parameters​

uuid​

PrimaryKeyType<InstanceType<T>>

Returns​

Promise<boolean>

Overrides​

AbstractRepository.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

Inherited from​

AbstractRepository.fromUID


get()​

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

Defined in: packages/models/src/repositories/event.ts:226

Parameters​

primaryKey​

PrimaryKeyType<InstanceType<T>>

Returns​

Promise<HelperProperties<InstanceType<T>>>

Overrides​

AbstractRepository.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

Inherited from​

AbstractRepository.getMaxListeners


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>>

Inherited from​

AbstractRepository.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>>

Inherited from​

AbstractRepository.getPrimaryKey


getRootModel()​

getRootModel(): T

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

Returns​

T

Inherited from​

AbstractRepository.getRootModel


getUID()​

getUID(object): string

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

Parameters​

object​

any

Returns​

string

Inherited from​

AbstractRepository.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>

Inherited from​

AbstractRepository.incrementAttribute


incrementAttributes()​

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

Defined in: packages/models/src/repositories/event.ts:37

Increment numeric attributes with event emission

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>

_conditionField?​

K | null

_condition?​

any

Returns​

Promise<void | Record<string, number>>

Overrides​

AbstractRepository.incrementAttributes


iterate()​

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

Defined in: packages/models/src/repositories/event.ts:87

Iterate through all objects

Parameters​

query​

string

the query filter

params?​

QueryParameters

values for the ? or :name placeholders, bound before reaching the underlying repository

Returns​

AsyncGenerator<InstanceType<T>, any, any>

an async generator of objects

Overrides​

AbstractRepository.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

Inherited from​

AbstractRepository.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

Inherited from​

AbstractRepository.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

Inherited from​

AbstractRepository.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

Inherited from​

AbstractRepository.parseLegacyUID


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>>

Inherited from​

AbstractRepository.parseUID


patch()​

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

Defined in: packages/models/src/repositories/event.ts:248

Patch with event emission (emits Patch before and Patched after)

Type Parameters​

K​

K extends string

Parameters​

primaryKey​

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

data​

Partial<InstanceType<T>>

_conditionField?​

K | null

_condition?​

any

Returns​

Promise<void>

Overrides​

AbstractRepository.patch


query()​

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

Defined in: packages/models/src/repositories/event.ts:68

Query with event emission

Parameters are bound here, so the events carry the bound query and the underlying repository (often a store one) only ever receives a plain query.

Parameters​

query​

string

the query to execute

params?​

QueryParameters

values for the ? or :name placeholders

Returns​

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

the query results with optional continuation token

Overrides​

AbstractRepository.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>>

Inherited from​

AbstractRepository.ref


removeAttribute()​

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

Defined in: packages/models/src/repositories/event.ts:197

Remove attribute with event emission

Type Parameters​

L​

L extends string

K​

K extends string

Parameters​

uuid​

PrimaryKeyType<InstanceType<T>>

attribute​

K

conditionField?​

L | null

condition?​

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

Returns​

Promise<void>

Overrides​

AbstractRepository.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

Inherited from​

AbstractRepository.removeListener


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>

Inherited from​

AbstractRepository.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

Inherited from​

AbstractRepository.setMaxListeners


update()​

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

Defined in: packages/models/src/repositories/event.ts:262

Update with event emission (emits Update before and Updated after)

Type Parameters​

K​

K extends string

Parameters​

data​

Helpers<InstanceType<T>>

conditionField?​

K | null

condition?​

PropertyPathType<InstanceType<T>, K>

Returns​

Promise<void>

Overrides​

AbstractRepository.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>>

Inherited from​

AbstractRepository.upsert


upsertItemToCollection()​

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

Defined in: packages/models/src/repositories/event.ts:147

Upsert item to collection with event emission

Type Parameters​

K​

K extends string

L​

L extends string | number | symbol

Parameters​

uuid​

PrimaryKeyType<InstanceType<T>>

collection​

K

item​

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

index?​

number

itemWriteConditionField?​

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

itemWriteCondition?​

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

Returns​

Promise<void>

Overrides​

AbstractRepository.upsertItemToCollection