@woltz/rich-domain 1.7.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/core/aggregate-changes.d.ts +206 -0
- package/dist/cjs/core/aggregate-changes.d.ts.map +1 -0
- package/dist/cjs/core/aggregate-changes.js +365 -0
- package/dist/cjs/core/aggregate-changes.js.map +1 -0
- package/dist/cjs/core/base-entity.d.ts +88 -0
- package/dist/cjs/core/base-entity.d.ts.map +1 -0
- package/dist/cjs/core/base-entity.js +329 -0
- package/dist/cjs/core/base-entity.js.map +1 -0
- package/dist/cjs/core/change-tracker.d.ts +96 -0
- package/dist/cjs/core/change-tracker.d.ts.map +1 -0
- package/dist/cjs/core/change-tracker.js +789 -0
- package/dist/cjs/core/change-tracker.js.map +1 -0
- package/dist/cjs/core/domain-event.d.ts +23 -0
- package/dist/cjs/core/domain-event.d.ts.map +1 -0
- package/dist/cjs/core/domain-event.js +36 -0
- package/dist/cjs/core/domain-event.js.map +1 -0
- package/dist/cjs/core/entity-changes.d.ts +84 -0
- package/dist/cjs/core/entity-changes.d.ts.map +1 -0
- package/dist/cjs/core/entity-changes.js +136 -0
- package/dist/cjs/core/entity-changes.js.map +1 -0
- package/dist/cjs/core/entity.d.ts +7 -0
- package/dist/cjs/core/entity.d.ts.map +1 -0
- package/dist/cjs/core/entity.js +11 -0
- package/dist/cjs/core/entity.js.map +1 -0
- package/dist/cjs/core/id.d.ts +59 -0
- package/dist/cjs/core/id.d.ts.map +1 -0
- package/dist/cjs/core/id.js +92 -0
- package/dist/cjs/core/id.js.map +1 -0
- package/dist/cjs/core/index.d.ts +9 -0
- package/dist/cjs/core/index.d.ts.map +1 -0
- package/dist/cjs/core/index.js +25 -0
- package/dist/cjs/core/index.js.map +1 -0
- package/dist/cjs/core/value-object.d.ts +49 -0
- package/dist/cjs/core/value-object.d.ts.map +1 -0
- package/dist/cjs/core/value-object.js +129 -0
- package/dist/cjs/core/value-object.js.map +1 -0
- package/dist/cjs/index.d.ts +5 -11
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +21 -19
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/repository/base-repository.d.ts +49 -3
- package/dist/cjs/repository/base-repository.d.ts.map +1 -1
- package/dist/cjs/repository/base-repository.js.map +1 -1
- package/dist/cjs/repository/entity-schema-registry.d.ts +281 -0
- package/dist/cjs/repository/entity-schema-registry.d.ts.map +1 -0
- package/dist/cjs/repository/entity-schema-registry.js +370 -0
- package/dist/cjs/repository/entity-schema-registry.js.map +1 -0
- package/dist/cjs/repository/index.d.ts +4 -2
- package/dist/cjs/repository/index.d.ts.map +1 -1
- package/dist/cjs/repository/index.js +4 -6
- package/dist/cjs/repository/index.js.map +1 -1
- package/dist/cjs/repository/mapper.d.ts +4 -0
- package/dist/cjs/repository/mapper.d.ts.map +1 -0
- package/dist/cjs/repository/mapper.js +7 -0
- package/dist/cjs/repository/mapper.js.map +1 -0
- package/dist/cjs/repository/paginated-result.d.ts +54 -0
- package/dist/cjs/repository/paginated-result.d.ts.map +1 -0
- package/dist/cjs/repository/paginated-result.js +197 -0
- package/dist/cjs/repository/paginated-result.js.map +1 -0
- package/dist/cjs/types/change-tracker.d.ts +1 -2
- package/dist/cjs/types/change-tracker.d.ts.map +1 -1
- package/dist/cjs/types/criteria.d.ts +13 -5
- package/dist/cjs/types/criteria.d.ts.map +1 -1
- package/dist/cjs/types/criteria.js +2 -2
- package/dist/cjs/types/criteria.js.map +1 -1
- package/dist/cjs/types/domain.d.ts +1 -1
- package/dist/cjs/types/domain.d.ts.map +1 -1
- package/dist/cjs/types/unit-of-work.d.ts +1 -1
- package/dist/cjs/types/unit-of-work.d.ts.map +1 -1
- package/dist/cjs/types/utils.d.ts +1 -2
- package/dist/cjs/types/utils.d.ts.map +1 -1
- package/dist/cjs/utils/criteria-operator-validation.d.ts.map +1 -1
- package/dist/cjs/utils/criteria-operator-validation.js +1 -1
- package/dist/cjs/utils/criteria-operator-validation.js.map +1 -1
- package/dist/cjs/utils/crypto.d.ts +3 -0
- package/dist/cjs/utils/crypto.d.ts.map +1 -0
- package/dist/cjs/utils/crypto.js +32 -0
- package/dist/cjs/utils/crypto.js.map +1 -0
- package/dist/esm/core/aggregate-changes.d.ts +206 -0
- package/dist/esm/core/aggregate-changes.d.ts.map +1 -0
- package/dist/esm/core/aggregate-changes.js +361 -0
- package/dist/esm/core/aggregate-changes.js.map +1 -0
- package/dist/esm/core/base-entity.d.ts +88 -0
- package/dist/esm/core/base-entity.d.ts.map +1 -0
- package/dist/esm/core/base-entity.js +325 -0
- package/dist/esm/core/base-entity.js.map +1 -0
- package/dist/esm/core/change-tracker.d.ts +96 -0
- package/dist/esm/core/change-tracker.d.ts.map +1 -0
- package/dist/esm/core/change-tracker.js +785 -0
- package/dist/esm/core/change-tracker.js.map +1 -0
- package/dist/esm/core/domain-event.d.ts +23 -0
- package/dist/esm/core/domain-event.d.ts.map +1 -0
- package/dist/esm/core/domain-event.js +32 -0
- package/dist/esm/core/domain-event.js.map +1 -0
- package/dist/esm/core/entity-changes.d.ts +84 -0
- package/dist/esm/core/entity-changes.d.ts.map +1 -0
- package/dist/esm/core/entity-changes.js +132 -0
- package/dist/esm/core/entity-changes.js.map +1 -0
- package/dist/esm/core/entity.d.ts +7 -0
- package/dist/esm/core/entity.d.ts.map +1 -0
- package/dist/esm/core/entity.js +6 -0
- package/dist/esm/core/entity.js.map +1 -0
- package/dist/esm/core/id.d.ts +59 -0
- package/dist/esm/core/id.d.ts.map +1 -0
- package/dist/esm/core/id.js +85 -0
- package/dist/esm/core/id.js.map +1 -0
- package/dist/esm/core/index.d.ts +9 -0
- package/dist/esm/core/index.d.ts.map +1 -0
- package/dist/esm/core/index.js +9 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/core/value-object.d.ts +49 -0
- package/dist/esm/core/value-object.d.ts.map +1 -0
- package/dist/esm/core/value-object.js +125 -0
- package/dist/esm/core/value-object.js.map +1 -0
- package/dist/esm/index.d.ts +5 -11
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +4 -10
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/repository/base-repository.d.ts +49 -3
- package/dist/esm/repository/base-repository.d.ts.map +1 -1
- package/dist/esm/repository/base-repository.js.map +1 -1
- package/dist/esm/repository/entity-schema-registry.d.ts +281 -0
- package/dist/esm/repository/entity-schema-registry.d.ts.map +1 -0
- package/dist/esm/repository/entity-schema-registry.js +366 -0
- package/dist/esm/repository/entity-schema-registry.js.map +1 -0
- package/dist/esm/repository/index.d.ts +4 -2
- package/dist/esm/repository/index.d.ts.map +1 -1
- package/dist/esm/repository/index.js +4 -2
- package/dist/esm/repository/index.js.map +1 -1
- package/dist/esm/repository/mapper.d.ts +4 -0
- package/dist/esm/repository/mapper.d.ts.map +1 -0
- package/dist/esm/repository/mapper.js +3 -0
- package/dist/esm/repository/mapper.js.map +1 -0
- package/dist/esm/repository/paginated-result.d.ts +54 -0
- package/dist/esm/repository/paginated-result.d.ts.map +1 -0
- package/dist/esm/repository/paginated-result.js +193 -0
- package/dist/esm/repository/paginated-result.js.map +1 -0
- package/dist/esm/types/change-tracker.d.ts +1 -2
- package/dist/esm/types/change-tracker.d.ts.map +1 -1
- package/dist/esm/types/criteria.d.ts +13 -5
- package/dist/esm/types/criteria.d.ts.map +1 -1
- package/dist/esm/types/criteria.js +3 -1
- package/dist/esm/types/criteria.js.map +1 -1
- package/dist/esm/types/domain.d.ts +1 -1
- package/dist/esm/types/domain.d.ts.map +1 -1
- package/dist/esm/types/unit-of-work.d.ts +1 -1
- package/dist/esm/types/unit-of-work.d.ts.map +1 -1
- package/dist/esm/types/utils.d.ts +1 -2
- package/dist/esm/types/utils.d.ts.map +1 -1
- package/dist/esm/utils/criteria-operator-validation.d.ts.map +1 -1
- package/dist/esm/utils/criteria-operator-validation.js +1 -1
- package/dist/esm/utils/criteria-operator-validation.js.map +1 -1
- package/dist/esm/utils/crypto.d.ts +3 -0
- package/dist/esm/utils/crypto.d.ts.map +1 -0
- package/dist/esm/utils/crypto.js +29 -0
- package/dist/esm/utils/crypto.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.types.tsbuildinfo +1 -1
- package/dist/types/core/aggregate-changes.d.ts +206 -0
- package/dist/types/core/aggregate-changes.d.ts.map +1 -0
- package/dist/types/core/base-entity.d.ts +88 -0
- package/dist/types/core/base-entity.d.ts.map +1 -0
- package/dist/types/core/change-tracker.d.ts +96 -0
- package/dist/types/core/change-tracker.d.ts.map +1 -0
- package/dist/types/core/domain-event.d.ts +23 -0
- package/dist/types/core/domain-event.d.ts.map +1 -0
- package/dist/types/core/entity-changes.d.ts +84 -0
- package/dist/types/core/entity-changes.d.ts.map +1 -0
- package/dist/types/core/entity.d.ts +7 -0
- package/dist/types/core/entity.d.ts.map +1 -0
- package/dist/types/core/id.d.ts +59 -0
- package/dist/types/core/id.d.ts.map +1 -0
- package/dist/types/core/index.d.ts +9 -0
- package/dist/types/core/index.d.ts.map +1 -0
- package/dist/types/core/value-object.d.ts +49 -0
- package/dist/types/core/value-object.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -11
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/paginated-result.d.ts +54 -46
- package/dist/types/repository/base-repository.d.ts +49 -3
- package/dist/types/repository/base-repository.d.ts.map +1 -1
- package/dist/types/repository/entity-schema-registry.d.ts +281 -0
- package/dist/types/repository/entity-schema-registry.d.ts.map +1 -0
- package/dist/types/repository/index.d.ts +4 -2
- package/dist/types/repository/index.d.ts.map +1 -1
- package/dist/types/repository/mapper.d.ts +4 -0
- package/dist/types/repository/mapper.d.ts.map +1 -0
- package/dist/types/repository/paginated-result.d.ts +54 -0
- package/dist/types/repository/paginated-result.d.ts.map +1 -0
- package/dist/types/types/change-tracker.d.ts +1 -2
- package/dist/types/types/change-tracker.d.ts.map +1 -1
- package/dist/types/types/criteria.d.ts +13 -5
- package/dist/types/types/criteria.d.ts.map +1 -1
- package/dist/types/types/domain.d.ts +1 -1
- package/dist/types/types/domain.d.ts.map +1 -1
- package/dist/types/types/unit-of-work.d.ts +1 -1
- package/dist/types/types/unit-of-work.d.ts.map +1 -1
- package/dist/types/types/utils.d.ts +1 -2
- package/dist/types/types/utils.d.ts.map +1 -1
- package/dist/types/utils/criteria-operator-validation.d.ts.map +1 -1
- package/dist/types/utils/crypto.d.ts +3 -0
- package/dist/types/utils/crypto.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { ValidationError } from "../validation-error.js";
|
|
2
|
+
import { BaseProps, HistoryEntry, DeepJsonResult, EntityHooks, EntityValidation, IDomainEventBus, IDomainEvent } from "../types/index.js";
|
|
3
|
+
import { AggregateChanges, Id } from "./index";
|
|
4
|
+
export declare abstract class BaseEntity<T extends BaseProps> {
|
|
5
|
+
private _props;
|
|
6
|
+
private tracker;
|
|
7
|
+
private proxiedProps;
|
|
8
|
+
private snapshot;
|
|
9
|
+
private validationConfig;
|
|
10
|
+
private entityHooks?;
|
|
11
|
+
private entitySchema?;
|
|
12
|
+
private domainEvents;
|
|
13
|
+
protected static validation?: EntityValidation<any>;
|
|
14
|
+
protected static hooks?: EntityHooks<any, any>;
|
|
15
|
+
constructor(props: Omit<T, "id"> & {
|
|
16
|
+
id?: Id;
|
|
17
|
+
});
|
|
18
|
+
private validateProps;
|
|
19
|
+
private extractPathKey;
|
|
20
|
+
/**
|
|
21
|
+
* Setup validation that runs on every property change.
|
|
22
|
+
* Uses the ChangeTracker's onChangeValidator callback.
|
|
23
|
+
*/
|
|
24
|
+
private setupUpdateValidation;
|
|
25
|
+
private takeSnapshot;
|
|
26
|
+
private deepCloneProps;
|
|
27
|
+
get id(): Id;
|
|
28
|
+
isNew(): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Check equality with another entity by comparing IDs
|
|
31
|
+
*/
|
|
32
|
+
equals(other: BaseEntity<T> | Id | string): boolean;
|
|
33
|
+
get props(): T;
|
|
34
|
+
/**
|
|
35
|
+
* Check if entity has validation errors (when throwOnError is false)
|
|
36
|
+
*/
|
|
37
|
+
get hasValidationErrors(): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Get validation errors (when throwOnError is false)
|
|
40
|
+
*/
|
|
41
|
+
get validationErrors(): ValidationError | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Returns all detected changes as AggregateChanges.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const changes = user.getChanges();
|
|
48
|
+
* const batch = changes.toBatchOperations();
|
|
49
|
+
*
|
|
50
|
+
* for (const del of batch.deletes) { ... }
|
|
51
|
+
* for (const create of batch.creates) { ... }
|
|
52
|
+
* for (const upd of batch.updates) { ... }
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
getChanges<TEntityMap = Record<string, any>>(): AggregateChanges<TEntityMap>;
|
|
56
|
+
/**
|
|
57
|
+
* Returns the change history (for debugging).
|
|
58
|
+
*/
|
|
59
|
+
getHistory(): HistoryEntry[];
|
|
60
|
+
/**
|
|
61
|
+
* Clears history and marks entity as "clean".
|
|
62
|
+
* Call this after successfully persisting to the database.
|
|
63
|
+
*/
|
|
64
|
+
markAsClean(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Add a domain event to this entity
|
|
67
|
+
*/
|
|
68
|
+
protected addDomainEvent(event: IDomainEvent): void;
|
|
69
|
+
/**
|
|
70
|
+
* Dispatch all events through the event bus
|
|
71
|
+
*/
|
|
72
|
+
dispatchAll(bus: IDomainEventBus): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Get all uncommitted domain events
|
|
75
|
+
*/
|
|
76
|
+
getUncommittedEvents(): IDomainEvent[];
|
|
77
|
+
/**
|
|
78
|
+
* Clear all domain events (call after publishing)
|
|
79
|
+
*/
|
|
80
|
+
clearEvents(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Check if entity has uncommitted events
|
|
83
|
+
*/
|
|
84
|
+
hasUncommittedEvents(): boolean;
|
|
85
|
+
toJSON(): DeepJsonResult<T>;
|
|
86
|
+
private deepToJson;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=base-entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-entity.d.ts","sourceRoot":"","sources":["../../../src/core/base-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,SAAS,EACT,YAAY,EACZ,cAAc,EACd,WAAW,EAGX,gBAAgB,EAChB,eAAe,EACf,YAAY,EACb,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAiB,gBAAgB,EAAE,EAAE,EAAe,MAAM,SAAS,CAAC;AAS3E,8BAAsB,UAAU,CAAC,CAAC,SAAS,SAAS;IAClD,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,WAAW,CAAC,CAAsB;IAC1C,OAAO,CAAC,YAAY,CAAC,CAAoB;IACzC,OAAO,CAAC,YAAY,CAAsB;IAE1C,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACpD,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAEnC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,EAAE,CAAA;KAAE;IAqD9C,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,cAAc;IAgBtB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IA4E7B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IAkDtB,IAAI,EAAE,IAAI,EAAE,CAEX;IAEM,KAAK,IAAI,OAAO;IAIvB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,OAAO;IAoBnD,IAAW,KAAK,IAAI,CAAC,CAEpB;IAED;;OAEG;IACH,IAAI,mBAAmB,IAAI,OAAO,CAEjC;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,eAAe,GAAG,SAAS,CAElD;IAED;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,gBAAgB,CAAC,UAAU,CAAC;IAI5E;;OAEG;IACH,UAAU,IAAI,YAAY,EAAE;IAI5B;;;OAGG;IACH,WAAW,IAAI,IAAI;IAKnB;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAInD;;OAEG;IACU,WAAW,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D;;OAEG;IACH,oBAAoB,IAAI,YAAY,EAAE;IAItC;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;OAEG;IACH,oBAAoB,IAAI,OAAO;IAI/B,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC;IAI3B,OAAO,CAAC,UAAU;CAiBnB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { HistoryEntry } from "../types/index.js";
|
|
2
|
+
import { AggregateChanges } from "./aggregate-changes.js";
|
|
3
|
+
/**
|
|
4
|
+
* Callback for validation on property change.
|
|
5
|
+
* Return false to reject the change, or throw an error.
|
|
6
|
+
*/
|
|
7
|
+
export type OnChangeValidator = (path: string, newValue: any) => boolean | void;
|
|
8
|
+
/**
|
|
9
|
+
* Tracks changes in Aggregates using Proxy.
|
|
10
|
+
*
|
|
11
|
+
* Features:
|
|
12
|
+
* - Tracks changes in primitive properties
|
|
13
|
+
* - Tracks changes in nested entities (1:1)
|
|
14
|
+
* - Tracks changes in collections (1:N)
|
|
15
|
+
* - Calculates depth automatically
|
|
16
|
+
* - Generates AggregateChanges for persistence
|
|
17
|
+
* - Supports validation on change via onChangeValidator
|
|
18
|
+
*/
|
|
19
|
+
export declare class ChangeTracker {
|
|
20
|
+
private target;
|
|
21
|
+
private rootEntityName;
|
|
22
|
+
private path;
|
|
23
|
+
private depth;
|
|
24
|
+
private parentId?;
|
|
25
|
+
private parentEntity?;
|
|
26
|
+
private rootTracker?;
|
|
27
|
+
private history;
|
|
28
|
+
private originalValues;
|
|
29
|
+
private trackedArrays;
|
|
30
|
+
private trackedEntities;
|
|
31
|
+
private onChangeValidator?;
|
|
32
|
+
constructor(target: any, rootEntityName: string, path?: string, depth?: number, parentId?: string | undefined, parentEntity?: string | undefined, rootTracker?: ChangeTracker | undefined);
|
|
33
|
+
/**
|
|
34
|
+
* Sets a validator callback that will be called on every property change.
|
|
35
|
+
* The validator can:
|
|
36
|
+
* - Return false to reject the change (value will be reverted)
|
|
37
|
+
* - Throw an error to reject the change with an error
|
|
38
|
+
* - Return true/undefined to accept the change
|
|
39
|
+
*/
|
|
40
|
+
setOnChangeValidator(validator: OnChangeValidator): void;
|
|
41
|
+
private captureInitialState;
|
|
42
|
+
private captureEntityState;
|
|
43
|
+
private captureArrayState;
|
|
44
|
+
createProxy(): any;
|
|
45
|
+
private createArrayProxy;
|
|
46
|
+
/**
|
|
47
|
+
* Returns all detected changes as AggregateChanges.
|
|
48
|
+
*/
|
|
49
|
+
getChanges<TEntityMap = Record<string, any>>(): AggregateChanges<TEntityMap>;
|
|
50
|
+
private analyzeRootChanges;
|
|
51
|
+
private analyzeCollectionChanges;
|
|
52
|
+
/**
|
|
53
|
+
* Recursively marks all nested items as created when a parent is created.
|
|
54
|
+
*/
|
|
55
|
+
private markNestedItemsAsCreated;
|
|
56
|
+
/**
|
|
57
|
+
* Recursively marks all nested items as deleted when a parent is deleted.
|
|
58
|
+
* Uses the original captured state to find nested items.
|
|
59
|
+
*/
|
|
60
|
+
private markNestedItemsAsDeleted;
|
|
61
|
+
/**
|
|
62
|
+
* Recursively marks nested items as deleted from a JSON object.
|
|
63
|
+
* This is used when processing cloned (JSON) state.
|
|
64
|
+
*/
|
|
65
|
+
private markNestedJsonItemAsDeleted;
|
|
66
|
+
/**
|
|
67
|
+
* Extracts identity key from a JSON object by looking at the original Entity instances.
|
|
68
|
+
*/
|
|
69
|
+
private extractIdentityKeyFromJson;
|
|
70
|
+
private collectNestedArrays;
|
|
71
|
+
private analyzeEntityChanges;
|
|
72
|
+
private detectEntityChangeState;
|
|
73
|
+
private detectArrayChanges;
|
|
74
|
+
private detectChangedFields;
|
|
75
|
+
private handleArrayAssignment;
|
|
76
|
+
private handleEntityChange;
|
|
77
|
+
private getRootTracker;
|
|
78
|
+
private buildPath;
|
|
79
|
+
private shouldSkipProperty;
|
|
80
|
+
private getValueAtPath;
|
|
81
|
+
private extractRelationField;
|
|
82
|
+
private getItemKey;
|
|
83
|
+
private getEntityId;
|
|
84
|
+
private getEntityName;
|
|
85
|
+
private isEqual;
|
|
86
|
+
private deepEqual;
|
|
87
|
+
private hasChanged;
|
|
88
|
+
private cloneArray;
|
|
89
|
+
private deepClone;
|
|
90
|
+
private normalizeAndStringify;
|
|
91
|
+
getHistory(): HistoryEntry[];
|
|
92
|
+
clearHistory(): void;
|
|
93
|
+
markAsClean(): void;
|
|
94
|
+
getTarget(): any;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=change-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-tracker.d.ts","sourceRoot":"","sources":["../../../src/core/change-tracker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,OAAO,GAAG,IAAI,CAAC;AAEhF;;;;;;;;;;GAUG;AACH,qBAAa,aAAa;IAQtB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,KAAK;IAEb,OAAO,CAAC,QAAQ,CAAC;IAEjB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,WAAW,CAAC;IAftB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,aAAa,CAAsC;IAC3D,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,iBAAiB,CAAC,CAAoB;gBAGpC,MAAM,EAAE,GAAG,EACX,cAAc,EAAE,MAAM,EACtB,IAAI,GAAE,MAAW,EACjB,KAAK,GAAE,MAAU,EAEjB,QAAQ,CAAC,EAAE,MAAM,YAAA,EAEjB,YAAY,CAAC,EAAE,MAAM,YAAA,EACrB,WAAW,CAAC,EAAE,aAAa,YAAA;IAQrC;;;;;;OAMG;IACH,oBAAoB,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAIxD,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,kBAAkB;IAgD1B,OAAO,CAAC,iBAAiB;IAoCzB,WAAW,IAAI,GAAG;IAmFlB,OAAO,CAAC,gBAAgB;IA+GxB;;OAEG;IACH,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,gBAAgB,CAAC,UAAU,CAAC;IAW5E,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,wBAAwB;IAsFhC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA8ChC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA8ChC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IA0DnC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAmBlC,OAAO,CAAC,mBAAmB;IA+B3B,OAAO,CAAC,oBAAoB;IA0F5B,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,kBAAkB;IA2C1B,OAAO,CAAC,mBAAmB;IA8B3B,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,OAAO;IAef,OAAO,CAAC,SAAS;IA4CjB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAsCjB,OAAO,CAAC,qBAAqB;IAkB7B,UAAU,IAAI,YAAY,EAAE;IAI5B,YAAY,IAAI,IAAI;IASpB,WAAW,IAAI,IAAI;IAInB,SAAS,IAAI,GAAG;CAGjB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { IDomainEvent } from "..";
|
|
2
|
+
/**
|
|
3
|
+
* Base class for domain events
|
|
4
|
+
*/
|
|
5
|
+
export declare abstract class DomainEvent<P> implements IDomainEvent<P> {
|
|
6
|
+
readonly eventId: string;
|
|
7
|
+
readonly occurredOn: Date;
|
|
8
|
+
readonly payload: P;
|
|
9
|
+
static readonly queueName?: string;
|
|
10
|
+
constructor(payload: P);
|
|
11
|
+
/**
|
|
12
|
+
* Get the event name (defaults to class name)
|
|
13
|
+
*/
|
|
14
|
+
get eventName(): string;
|
|
15
|
+
private generateEventId;
|
|
16
|
+
toJSON(): {
|
|
17
|
+
eventId: string;
|
|
18
|
+
eventName: string;
|
|
19
|
+
occurredOn: string;
|
|
20
|
+
payload: P;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=domain-event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-event.d.ts","sourceRoot":"","sources":["../../../src/core/domain-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC;;GAEG;AACH,8BAAsB,WAAW,CAAC,CAAC,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAC7D,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,UAAU,EAAE,IAAI,CAAC;IACjC,SAAgB,OAAO,EAAE,CAAC,CAAC;IAC3B,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEvB,OAAO,EAAE,CAAC;IAMtB;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,OAAO,CAAC,eAAe;IAIvB,MAAM;;;;;;CAQP"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Operation } from "../types/change-tracker.js";
|
|
2
|
+
/**
|
|
3
|
+
* Represents the changes filtered for a specific entity.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* const changes = user.getChanges();
|
|
8
|
+
* const postChanges = changes.for('Post');
|
|
9
|
+
*
|
|
10
|
+
* if (postChanges.hasCreates()) {
|
|
11
|
+
* console.log('Created posts:', postChanges.creates);
|
|
12
|
+
* }
|
|
13
|
+
*
|
|
14
|
+
* if (postChanges.hasUpdates()) {
|
|
15
|
+
* postChanges.updates.forEach(({ entity, changed }) => {
|
|
16
|
+
* console.log(`Post ${entity.id} has changed:`, changed);
|
|
17
|
+
* });
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class EntityChanges<T = any> {
|
|
22
|
+
private readonly operations;
|
|
23
|
+
constructor(operations: Operation<T>[]);
|
|
24
|
+
/**
|
|
25
|
+
* Returns all created entities
|
|
26
|
+
*/
|
|
27
|
+
get creates(): T[];
|
|
28
|
+
/**
|
|
29
|
+
* Returns all updated entities with their changed fields
|
|
30
|
+
*/
|
|
31
|
+
get updates(): Array<{
|
|
32
|
+
entity: T;
|
|
33
|
+
changed: Record<string, any>;
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* Returns all deleted entities
|
|
37
|
+
*/
|
|
38
|
+
get deletes(): T[];
|
|
39
|
+
/**
|
|
40
|
+
* Returns the IDs of the created entities
|
|
41
|
+
*/
|
|
42
|
+
get createIds(): string[];
|
|
43
|
+
/**
|
|
44
|
+
* Returns the IDs of the updated entities
|
|
45
|
+
*/
|
|
46
|
+
get updateIds(): string[];
|
|
47
|
+
/**
|
|
48
|
+
* Returns the IDs of the deleted entities
|
|
49
|
+
*/
|
|
50
|
+
get deleteIds(): string[];
|
|
51
|
+
/**
|
|
52
|
+
* Checks if there are any creates
|
|
53
|
+
*/
|
|
54
|
+
hasCreates(): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Checks if there are any updates
|
|
57
|
+
*/
|
|
58
|
+
hasUpdates(): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Checks if there are any deletes
|
|
61
|
+
*/
|
|
62
|
+
hasDeletes(): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Checks if there is any change
|
|
65
|
+
*/
|
|
66
|
+
hasChanges(): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Checks if it is empty (no changes)
|
|
69
|
+
*/
|
|
70
|
+
isEmpty(): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Returns the total number of operations
|
|
73
|
+
*/
|
|
74
|
+
get count(): number;
|
|
75
|
+
/**
|
|
76
|
+
* Returns the raw operations (for advanced use cases)
|
|
77
|
+
*/
|
|
78
|
+
get rawOperations(): Operation<T>[];
|
|
79
|
+
/**
|
|
80
|
+
* Extracts the ID from an entity
|
|
81
|
+
*/
|
|
82
|
+
private extractId;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=entity-changes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-changes.d.ts","sourceRoot":"","sources":["../../../src/core/entity-changes.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAIV,MAAM,4BAA4B,CAAC;AAEpC;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,aAAa,CAAC,CAAC,GAAG,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE;IAEvD;;OAEG;IACH,IAAI,OAAO,IAAI,CAAC,EAAE,CAIjB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,KAAK,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC,CAOhE;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,CAAC,EAAE,CAIjB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,EAAE,CAKxB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,EAAE,CAIxB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,EAAE,CAIxB;IAED;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAElC;IAED;;OAEG;IACH,OAAO,CAAC,SAAS;CAMlB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BaseEntity } from "./base-entity.js";
|
|
2
|
+
import { BaseProps } from "../types/index.js";
|
|
3
|
+
export declare class Entity<T extends BaseProps> extends BaseEntity<T> {
|
|
4
|
+
}
|
|
5
|
+
export declare class Aggregate<T extends BaseProps> extends BaseEntity<T> {
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../../src/core/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,qBAAa,MAAM,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;CAAG;AACjE,qBAAa,SAAS,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;CAAG"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export declare class Id {
|
|
2
|
+
private readonly _value;
|
|
3
|
+
private readonly _isNew;
|
|
4
|
+
/**
|
|
5
|
+
* Create a new Id
|
|
6
|
+
* @param value - Optional existing ID value. If not provided, generates a new UUID.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* // New entity (generates UUID)
|
|
10
|
+
* const newId = new Id();
|
|
11
|
+
* newuser.isNew() // true
|
|
12
|
+
*
|
|
13
|
+
* // Existing entity (uses provided ID)
|
|
14
|
+
* const existingId = new Id("550e8400-e29b-41d4-a716-446655440000");
|
|
15
|
+
* existinguser.isNew() // false
|
|
16
|
+
*/
|
|
17
|
+
constructor(value: string, isNew?: boolean);
|
|
18
|
+
constructor(value?: string);
|
|
19
|
+
/**
|
|
20
|
+
* Get the string value of the ID
|
|
21
|
+
*/
|
|
22
|
+
get value(): string;
|
|
23
|
+
/**
|
|
24
|
+
* Check if this ID represents a new entity
|
|
25
|
+
*/
|
|
26
|
+
isNew(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Convert to string (for JSON serialization and comparisons)
|
|
29
|
+
*/
|
|
30
|
+
toString(): string;
|
|
31
|
+
/**
|
|
32
|
+
* Convert to JSON (returns the string value)
|
|
33
|
+
*/
|
|
34
|
+
toJSON(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Check equality with another Id or string
|
|
37
|
+
*/
|
|
38
|
+
equals(other: Id | string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Generate a UUID v4
|
|
41
|
+
*/
|
|
42
|
+
private generateUUID;
|
|
43
|
+
/**
|
|
44
|
+
* Create a new Id (convenience static method)
|
|
45
|
+
*/
|
|
46
|
+
static create(): Id;
|
|
47
|
+
/**
|
|
48
|
+
* Create an Id from an existing value
|
|
49
|
+
*/
|
|
50
|
+
static from(value: string): Id;
|
|
51
|
+
/**
|
|
52
|
+
* Compose two IDs into a single ID
|
|
53
|
+
* @param a - The first ID
|
|
54
|
+
* @param b - The second ID
|
|
55
|
+
* @returns The composed ID
|
|
56
|
+
*/
|
|
57
|
+
static compose(a: string | Id, b: string | Id): string;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../../src/core/id.ts"],"names":[],"mappings":"AAEA,qBAAa,EAAE;IACb,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAEjC;;;;;;;;;;;;OAYG;gBACS,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;gBAC9B,KAAK,CAAC,EAAE,MAAM;IAa1B;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACI,KAAK,IAAI,OAAO;IAIvB;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,GAAG,OAAO;IAOnC;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,EAAE;IAInB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE;IAI9B;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,GAAG,MAAM;CAUvD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./base-entity";
|
|
2
|
+
export * from "./aggregate-changes";
|
|
3
|
+
export * from "./change-tracker";
|
|
4
|
+
export * from "./domain-event";
|
|
5
|
+
export * from "./entity-changes";
|
|
6
|
+
export * from "./entity";
|
|
7
|
+
export * from "./id";
|
|
8
|
+
export * from "./value-object";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,MAAM,CAAC;AACrB,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ValidationError } from "../validation-error.js";
|
|
2
|
+
import { IDomainEvent } from "../index.js";
|
|
3
|
+
import { VOHooks, EntityValidation, Primitive } from "../types/index.js";
|
|
4
|
+
export declare abstract class ValueObject<T extends Primitive> {
|
|
5
|
+
readonly value: T;
|
|
6
|
+
private validationConfig;
|
|
7
|
+
private domainHooks?;
|
|
8
|
+
private domainSchema?;
|
|
9
|
+
private domainEvents;
|
|
10
|
+
protected static validation?: EntityValidation<any>;
|
|
11
|
+
protected static hooks?: VOHooks<any, any>;
|
|
12
|
+
constructor(value: T);
|
|
13
|
+
private validateValue;
|
|
14
|
+
private extractPathKey;
|
|
15
|
+
/**
|
|
16
|
+
* Returns true if the value object has validation errors (when throwOnError is false).
|
|
17
|
+
*/
|
|
18
|
+
get hasValidationErrors(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Returns the validation errors (when throwOnError is false).
|
|
21
|
+
*/
|
|
22
|
+
get validationErrors(): ValidationError | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Compare this ValueObject with another for equality based on their properties.
|
|
25
|
+
*/
|
|
26
|
+
equals(other: ValueObject<T>): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Adds a domain event to this value object.
|
|
29
|
+
*/
|
|
30
|
+
protected addDomainEvent(event: IDomainEvent): void;
|
|
31
|
+
/**
|
|
32
|
+
* Returns all uncommitted domain events.
|
|
33
|
+
*/
|
|
34
|
+
getUncommittedEvents(): IDomainEvent[];
|
|
35
|
+
/**
|
|
36
|
+
* Clears all domain events (call after publishing).
|
|
37
|
+
*/
|
|
38
|
+
clearEvents(): void;
|
|
39
|
+
/**
|
|
40
|
+
* Returns true if the value object has uncommitted events.
|
|
41
|
+
*/
|
|
42
|
+
hasUncommittedEvents(): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Creates a new ValueObject with updated value.
|
|
45
|
+
* ValueObjects are immutable, so this returns a new instance.
|
|
46
|
+
*/
|
|
47
|
+
protected clone(value: T): this;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=value-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-object.d.ts","sourceRoot":"","sources":["../../../src/core/value-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,OAAO,EAGP,gBAAgB,EAChB,SAAS,EACV,MAAM,mBAAmB,CAAC;AAW3B,8BAAsB,WAAW,CAAC,CAAC,SAAS,SAAS;IACnD,SAAgB,KAAK,EAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,gBAAgB,CAA6B;IAErD,OAAO,CAAC,WAAW,CAAC,CAAkB;IACtC,OAAO,CAAC,YAAY,CAAC,CAAoB;IACzC,OAAO,CAAC,YAAY,CAAsB;IAE1C,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACpD,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAE/B,KAAK,EAAE,CAAC;IAmCpB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,IAAI,mBAAmB,IAAI,OAAO,CAEjC;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,eAAe,GAAG,SAAS,CAElD;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO;IAKtC;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAInD;;OAEG;IACH,oBAAoB,IAAI,YAAY,EAAE;IAItC;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;OAEG;IACH,oBAAoB,IAAI,OAAO;IAI/B;;;OAGG;IACH,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;CAIhC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
export * from "./validation-error.js";
|
|
2
|
-
export * from "./domain-event.js";
|
|
2
|
+
export * from "./core/domain-event.js";
|
|
3
3
|
export * from "./exceptions.js";
|
|
4
4
|
export * from "./criteria.js";
|
|
5
|
-
export * from "./paginated-result.js";
|
|
6
|
-
export * from "./repository/index.js";
|
|
7
|
-
export { Id } from "./id.js";
|
|
8
|
-
export { Entity, Aggregate } from "./entity.js";
|
|
9
|
-
export { ValueObject } from "./value-object.js";
|
|
10
|
-
export { Mapper } from "./mapper.js";
|
|
11
|
-
export { EntitySchemaRegistry } from "./entity-schema-registry.js";
|
|
12
|
-
export { AggregateChanges } from "./aggregate-changes.js";
|
|
13
|
-
export type { EntityHooks, Filter, EntityValidation, IDomainEvent, VOValidation, VOHooks, ValidationConfig, Primitive, TransactionContext, PaginationMeta, Pagination, OrderDirection, Order, IUnitOfWork, FieldPath, FilterOperator, Search, FilterValueFor, PathValue, OperatorsForType, DateOperators, NumberOperators, StringOperators, BooleanOperators, ArrayOperators, CriteriaOptions, DeepJsonResult, IDomainEventBus, } from "./types/index.js";
|
|
14
|
-
export { ARRAY_OPERATORS, BOOLEAN_OPERATORS, DATE_OPERATORS, NUMBER_OPERATORS, STRING_OPERATORS, FILTER_OPERATORS, } from "./constants.js";
|
|
15
5
|
export { isValidOperatorForType } from "./utils/criteria-operator-validation.js";
|
|
6
|
+
export { ARRAY_OPERATORS, BOOLEAN_OPERATORS, DATE_OPERATORS, NUMBER_OPERATORS, STRING_OPERATORS, FILTER_OPERATORS, } from "./constants.js";
|
|
7
|
+
export { Id, Entity, Aggregate, ValueObject, AggregateChanges, DomainEvent, } from "./core/index.js";
|
|
8
|
+
export { type PaginatedJsonResult, type CollectionConfig, Repository, Mapper, UnitOfWork, PaginatedResult, ReadRepository, WriteAndRead, WriteRepository, BaseTransactionContext, EntitySchemaRegistry, } from "./repository/index.js";
|
|
9
|
+
export type { EntityHooks, Filter, EntityValidation, IDomainEvent, VOValidation, VOHooks, ValidationConfig, Primitive, TransactionContext, PaginationMeta, Pagination, OrderDirection, Order, IUnitOfWork, FieldPath, FilterOperator, Search, FilterValueFor, PathValue, OperatorsForType, DateOperators, NumberOperators, StringOperators, BooleanOperators, ArrayOperators, CriteriaOptions, IDomainEventBus, } from "./types/index.js";
|
|
16
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,EAAE,EACF,MAAM,EACN,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,UAAU,EACV,MAAM,EACN,UAAU,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,WAAW,EACX,MAAM,EACN,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,cAAc,EACd,KAAK,EACL,WAAW,EACX,SAAS,EACT,cAAc,EACd,MAAM,EACN,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,54 +1,62 @@
|
|
|
1
|
-
import type { Criteria } from "
|
|
2
|
-
import type {
|
|
1
|
+
import type { Criteria } from "../criteria.js";
|
|
2
|
+
import type {
|
|
3
|
+
Pagination,
|
|
4
|
+
PaginationMeta,
|
|
5
|
+
DeepJsonResult,
|
|
6
|
+
} from "../types/index.js";
|
|
3
7
|
/**
|
|
4
8
|
* Type for the serialized result of PaginatedResult.toJSON()
|
|
5
9
|
* Uses DeepJsonResult to ensure all nested entities are converted to plain objects
|
|
6
10
|
*/
|
|
7
11
|
export type PaginatedJsonResult<T> = {
|
|
8
|
-
|
|
9
|
-
|
|
12
|
+
data: DeepJsonResult<T>[];
|
|
13
|
+
meta: PaginationMeta;
|
|
10
14
|
};
|
|
11
15
|
export declare class PaginatedResult<T> {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
16
|
+
readonly data: T[];
|
|
17
|
+
readonly meta: PaginationMeta;
|
|
18
|
+
constructor(data: T[], meta: PaginationMeta);
|
|
19
|
+
/**
|
|
20
|
+
* Creates a PaginatedResult with calculated metadata
|
|
21
|
+
*/
|
|
22
|
+
static create<T>(
|
|
23
|
+
data: T[],
|
|
24
|
+
pagination: Pagination,
|
|
25
|
+
total: number
|
|
26
|
+
): PaginatedResult<T>;
|
|
27
|
+
/**
|
|
28
|
+
* Creates pagination metadata from total count
|
|
29
|
+
*/
|
|
30
|
+
static createMeta(pagination: Pagination, total: number): PaginationMeta;
|
|
31
|
+
/**
|
|
32
|
+
* Applies criteria to an in-memory array (useful for testing)
|
|
33
|
+
*/
|
|
34
|
+
static fromArray<T>(items: T[], criteria: Criteria<T>): PaginatedResult<T>;
|
|
35
|
+
/**
|
|
36
|
+
* Converts the result to JSON, deeply serializing all entities/aggregates/value objects
|
|
37
|
+
* - Entities/Aggregates → calls toJSON() recursively
|
|
38
|
+
* - Value Objects → converts to value
|
|
39
|
+
* - Id → converts to string
|
|
40
|
+
* - Arrays → maps recursively
|
|
41
|
+
* - Plain objects → serializes properties recursively
|
|
42
|
+
* - Primitives → returns as-is
|
|
43
|
+
*/
|
|
44
|
+
toJSON(): PaginatedJsonResult<T>;
|
|
45
|
+
/**
|
|
46
|
+
* Deep serialization logic (similar to BaseEntity.deepToJson)
|
|
47
|
+
*/
|
|
48
|
+
private deepSerialize;
|
|
49
|
+
/**
|
|
50
|
+
* Transform each item in the result using a mapper function
|
|
51
|
+
*/
|
|
52
|
+
map<U>(fn: (item: T) => U): PaginatedResult<U>;
|
|
53
|
+
/**
|
|
54
|
+
* Check if result has no data
|
|
55
|
+
*/
|
|
56
|
+
get isEmpty(): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Check if there are more pages available
|
|
59
|
+
*/
|
|
60
|
+
get hasMore(): boolean;
|
|
53
61
|
}
|
|
54
|
-
//# sourceMappingURL=paginated-result.d.ts.map
|
|
62
|
+
//# sourceMappingURL=paginated-result.d.ts.map
|