@cqrs-ddd/core 0.2.1 → 0.4.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/README.md +32 -13
- package/dist/application/base.command.d.ts.map +1 -1
- package/dist/application/base.command.js +5 -9
- package/dist/application/base.command.js.map +1 -1
- package/dist/application/base.query.d.ts +1 -1
- package/dist/application/base.query.d.ts.map +1 -1
- package/dist/application/base.query.js +7 -11
- package/dist/application/base.query.js.map +1 -1
- package/dist/application/command-base.handler.d.ts +18 -8
- package/dist/application/command-base.handler.d.ts.map +1 -1
- package/dist/application/command-base.handler.js +19 -12
- package/dist/application/command-base.handler.js.map +1 -1
- package/dist/application/index.d.ts +10 -10
- package/dist/application/index.d.ts.map +1 -1
- package/dist/application/index.js +10 -26
- package/dist/application/index.js.map +1 -1
- package/dist/application/ports/cache.port.js +1 -4
- package/dist/application/ports/cache.port.js.map +1 -1
- package/dist/application/ports/command-repository.port.js +1 -2
- package/dist/application/ports/command-repository.port.js.map +1 -1
- package/dist/application/ports/domain-event-publisher.port.d.ts +4 -2
- package/dist/application/ports/domain-event-publisher.port.d.ts.map +1 -1
- package/dist/application/ports/domain-event-publisher.port.js +1 -2
- package/dist/application/ports/domain-event-publisher.port.js.map +1 -1
- package/dist/application/ports/query-repository.port.d.ts +1 -1
- package/dist/application/ports/query-repository.port.d.ts.map +1 -1
- package/dist/application/ports/query-repository.port.js +1 -2
- package/dist/application/ports/query-repository.port.js.map +1 -1
- package/dist/application/ports/write-side-aggregate-repository.port.d.ts +1 -1
- package/dist/application/ports/write-side-aggregate-repository.port.d.ts.map +1 -1
- package/dist/application/ports/write-side-aggregate-repository.port.js +1 -2
- package/dist/application/ports/write-side-aggregate-repository.port.js.map +1 -1
- package/dist/application/query.options.js +1 -2
- package/dist/application/query.options.js.map +1 -1
- package/dist/application/request-fields.helper.js +2 -6
- package/dist/application/request-fields.helper.js.map +1 -1
- package/dist/application/tenant-resolver.js +5 -10
- package/dist/application/tenant-resolver.js.map +1 -1
- package/dist/domain/decorators/apply-mutation.decorator.d.ts +1 -1
- package/dist/domain/decorators/apply-mutation.decorator.d.ts.map +1 -1
- package/dist/domain/decorators/apply-mutation.decorator.js +1 -4
- package/dist/domain/decorators/apply-mutation.decorator.js.map +1 -1
- package/dist/domain/decorators/mutable.decorator.js +2 -6
- package/dist/domain/decorators/mutable.decorator.js.map +1 -1
- package/dist/domain/events/domain.event.d.ts +1 -1
- package/dist/domain/events/domain.event.d.ts.map +1 -1
- package/dist/domain/events/domain.event.js +3 -7
- package/dist/domain/events/domain.event.js.map +1 -1
- package/dist/domain/events/event.interface.js +1 -2
- package/dist/domain/events/event.interface.js.map +1 -1
- package/dist/domain/events/root-domain.event.d.ts +3 -3
- package/dist/domain/events/root-domain.event.d.ts.map +1 -1
- package/dist/domain/events/root-domain.event.js +3 -8
- package/dist/domain/events/root-domain.event.js.map +1 -1
- package/dist/domain/exceptions/concurrency-conflict.error.d.ts +1 -1
- package/dist/domain/exceptions/concurrency-conflict.error.d.ts.map +1 -1
- package/dist/domain/exceptions/concurrency-conflict.error.js +2 -6
- package/dist/domain/exceptions/concurrency-conflict.error.js.map +1 -1
- package/dist/domain/exceptions/domain.exception.d.ts.map +1 -1
- package/dist/domain/exceptions/domain.exception.js +1 -5
- package/dist/domain/exceptions/domain.exception.js.map +1 -1
- package/dist/domain/exceptions/entity-not-found.exception.d.ts +1 -1
- package/dist/domain/exceptions/entity-not-found.exception.d.ts.map +1 -1
- package/dist/domain/exceptions/entity-not-found.exception.js +2 -6
- package/dist/domain/exceptions/entity-not-found.exception.js.map +1 -1
- package/dist/domain/exceptions/invalid-value.exception.d.ts +2 -2
- package/dist/domain/exceptions/invalid-value.exception.d.ts.map +1 -1
- package/dist/domain/exceptions/invalid-value.exception.js +2 -6
- package/dist/domain/exceptions/invalid-value.exception.js.map +1 -1
- package/dist/domain/exceptions/missing-tenant-context.exception.d.ts +1 -1
- package/dist/domain/exceptions/missing-tenant-context.exception.d.ts.map +1 -1
- package/dist/domain/exceptions/missing-tenant-context.exception.js +2 -6
- package/dist/domain/exceptions/missing-tenant-context.exception.js.map +1 -1
- package/dist/domain/exceptions/transient-operation.error.d.ts.map +1 -1
- package/dist/domain/exceptions/transient-operation.error.js +2 -7
- package/dist/domain/exceptions/transient-operation.error.js.map +1 -1
- package/dist/domain/exceptions/unknown-mutable-field.error.d.ts.map +1 -1
- package/dist/domain/exceptions/unknown-mutable-field.error.js +1 -5
- package/dist/domain/exceptions/unknown-mutable-field.error.js.map +1 -1
- package/dist/domain/index.d.ts +19 -18
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +19 -34
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/interfaces/aggregate-root.interface.d.ts +41 -0
- package/dist/domain/interfaces/aggregate-root.interface.d.ts.map +1 -0
- package/dist/domain/interfaces/aggregate-root.interface.js +3 -0
- package/dist/domain/interfaces/aggregate-root.interface.js.map +1 -0
- package/dist/domain/interfaces/root-entity-snapshot.interface.js +1 -2
- package/dist/domain/interfaces/root-entity-snapshot.interface.js.map +1 -1
- package/dist/domain/models/aggregate-root.d.ts +34 -22
- package/dist/domain/models/aggregate-root.d.ts.map +1 -1
- package/dist/domain/models/aggregate-root.js +38 -12
- package/dist/domain/models/aggregate-root.js.map +1 -1
- package/dist/domain/models/root.entity.d.ts +3 -3
- package/dist/domain/models/root.entity.d.ts.map +1 -1
- package/dist/domain/models/root.entity.js +9 -13
- package/dist/domain/models/root.entity.js.map +1 -1
- package/dist/domain/rules/number.rule.d.ts +1 -1
- package/dist/domain/rules/number.rule.d.ts.map +1 -1
- package/dist/domain/rules/number.rule.js +4 -7
- package/dist/domain/rules/number.rule.js.map +1 -1
- package/dist/domain/rules/rule-support.d.ts +1 -1
- package/dist/domain/rules/rule-support.d.ts.map +1 -1
- package/dist/domain/rules/rule-support.js +3 -7
- package/dist/domain/rules/rule-support.js.map +1 -1
- package/dist/domain/rules/text.rule.d.ts +1 -1
- package/dist/domain/rules/text.rule.d.ts.map +1 -1
- package/dist/domain/rules/text.rule.js +4 -7
- package/dist/domain/rules/text.rule.js.map +1 -1
- package/dist/domain/rules/value-violation.js +1 -2
- package/dist/domain/rules/value-violation.js.map +1 -1
- package/dist/http/domain-error-http-status.d.ts +1 -1
- package/dist/http/domain-error-http-status.d.ts.map +1 -1
- package/dist/http/domain-error-http-status.js +9 -12
- package/dist/http/domain-error-http-status.js.map +1 -1
- package/dist/http/index.d.ts +1 -1
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +1 -17
- package/dist/http/index.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -21
- package/dist/index.js.map +1 -1
- package/dist/persistence/cache/cache-logger.js +2 -6
- package/dist/persistence/cache/cache-logger.js.map +1 -1
- package/dist/persistence/cache/memory.cache.d.ts +1 -1
- package/dist/persistence/cache/memory.cache.d.ts.map +1 -1
- package/dist/persistence/cache/memory.cache.js +4 -8
- package/dist/persistence/cache/memory.cache.js.map +1 -1
- package/dist/persistence/command-repository.abstract.d.ts +2 -2
- package/dist/persistence/command-repository.abstract.d.ts.map +1 -1
- package/dist/persistence/command-repository.abstract.js +1 -5
- package/dist/persistence/command-repository.abstract.js.map +1 -1
- package/dist/persistence/decorators/acknowledge-persisted.decorator.d.ts.map +1 -1
- package/dist/persistence/decorators/acknowledge-persisted.decorator.js +1 -4
- package/dist/persistence/decorators/acknowledge-persisted.decorator.js.map +1 -1
- package/dist/persistence/decorators/cache.decorator.d.ts +1 -1
- package/dist/persistence/decorators/cache.decorator.d.ts.map +1 -1
- package/dist/persistence/decorators/cache.decorator.js +22 -26
- package/dist/persistence/decorators/cache.decorator.js.map +1 -1
- package/dist/persistence/decorators/from-cache.decorator.d.ts +3 -3
- package/dist/persistence/decorators/from-cache.decorator.d.ts.map +1 -1
- package/dist/persistence/decorators/from-cache.decorator.js +16 -20
- package/dist/persistence/decorators/from-cache.decorator.js.map +1 -1
- package/dist/persistence/decorators/map-persistence-errors.decorator.d.ts +1 -1
- package/dist/persistence/decorators/map-persistence-errors.decorator.d.ts.map +1 -1
- package/dist/persistence/decorators/map-persistence-errors.decorator.js +3 -6
- package/dist/persistence/decorators/map-persistence-errors.decorator.js.map +1 -1
- package/dist/persistence/decorators/persisted-write.decorator.d.ts +4 -4
- package/dist/persistence/decorators/persisted-write.decorator.d.ts.map +1 -1
- package/dist/persistence/decorators/persisted-write.decorator.js +7 -10
- package/dist/persistence/decorators/persisted-write.decorator.js.map +1 -1
- package/dist/persistence/helpers/cache-barrier.helper.js +4 -8
- package/dist/persistence/helpers/cache-barrier.helper.js.map +1 -1
- package/dist/persistence/helpers/cache-key.helper.d.ts +1 -1
- package/dist/persistence/helpers/cache-key.helper.d.ts.map +1 -1
- package/dist/persistence/helpers/cache-key.helper.js +11 -15
- package/dist/persistence/helpers/cache-key.helper.js.map +1 -1
- package/dist/persistence/helpers/cache-owner.helper.d.ts +1 -1
- package/dist/persistence/helpers/cache-owner.helper.d.ts.map +1 -1
- package/dist/persistence/helpers/cache-owner.helper.js +4 -7
- package/dist/persistence/helpers/cache-owner.helper.js.map +1 -1
- package/dist/persistence/helpers/cache-snapshot.helper.js +1 -4
- package/dist/persistence/helpers/cache-snapshot.helper.js.map +1 -1
- package/dist/persistence/helpers/cache-version.helper.js +5 -8
- package/dist/persistence/helpers/cache-version.helper.js.map +1 -1
- package/dist/persistence/index.d.ts +14 -14
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +14 -30
- package/dist/persistence/index.js.map +1 -1
- package/dist/persistence/persistence-dialect.js +2 -6
- package/dist/persistence/persistence-dialect.js.map +1 -1
- package/dist/persistence/query-repository.abstract.d.ts +3 -3
- package/dist/persistence/query-repository.abstract.d.ts.map +1 -1
- package/dist/persistence/query-repository.abstract.js +1 -5
- package/dist/persistence/query-repository.abstract.js.map +1 -1
- package/dist/types/Method.type.js +1 -2
- package/dist/types/Method.type.js.map +1 -1
- package/package.json +10 -8
package/dist/domain/index.d.ts
CHANGED
|
@@ -5,22 +5,23 @@
|
|
|
5
5
|
* file that only needs `DomainException` does not pull the persistence layer in
|
|
6
6
|
* behind it.
|
|
7
7
|
*/
|
|
8
|
-
export * from './decorators/apply-mutation.decorator';
|
|
9
|
-
export * from './decorators/mutable.decorator';
|
|
10
|
-
export * from './events/domain.event';
|
|
11
|
-
export * from './events/event.interface';
|
|
12
|
-
export * from './events/root-domain.event';
|
|
13
|
-
export * from './exceptions/concurrency-conflict.error';
|
|
14
|
-
export * from './exceptions/domain.exception';
|
|
15
|
-
export * from './exceptions/entity-not-found.exception';
|
|
16
|
-
export * from './exceptions/invalid-value.exception';
|
|
17
|
-
export * from './exceptions/missing-tenant-context.exception';
|
|
18
|
-
export * from './exceptions/transient-operation.error';
|
|
19
|
-
export * from './exceptions/unknown-mutable-field.error';
|
|
20
|
-
export * from './interfaces/root
|
|
21
|
-
export * from './
|
|
22
|
-
export * from './models/root.
|
|
23
|
-
export * from './
|
|
24
|
-
export * from './rules/
|
|
25
|
-
export * from './rules/
|
|
8
|
+
export * from './decorators/apply-mutation.decorator.js';
|
|
9
|
+
export * from './decorators/mutable.decorator.js';
|
|
10
|
+
export * from './events/domain.event.js';
|
|
11
|
+
export * from './events/event.interface.js';
|
|
12
|
+
export * from './events/root-domain.event.js';
|
|
13
|
+
export * from './exceptions/concurrency-conflict.error.js';
|
|
14
|
+
export * from './exceptions/domain.exception.js';
|
|
15
|
+
export * from './exceptions/entity-not-found.exception.js';
|
|
16
|
+
export * from './exceptions/invalid-value.exception.js';
|
|
17
|
+
export * from './exceptions/missing-tenant-context.exception.js';
|
|
18
|
+
export * from './exceptions/transient-operation.error.js';
|
|
19
|
+
export * from './exceptions/unknown-mutable-field.error.js';
|
|
20
|
+
export * from './interfaces/aggregate-root.interface.js';
|
|
21
|
+
export * from './interfaces/root-entity-snapshot.interface.js';
|
|
22
|
+
export * from './models/aggregate-root.js';
|
|
23
|
+
export * from './models/root.entity.js';
|
|
24
|
+
export * from './rules/number.rule.js';
|
|
25
|
+
export * from './rules/text.rule.js';
|
|
26
|
+
export * from './rules/value-violation.js';
|
|
26
27
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../domain/index.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../domain/index.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,kCAAkC,CAAC;AACjD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,yCAAyC,CAAC;AACxD,cAAc,kDAAkD,CAAC;AACjE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,0CAA0C,CAAC;AACzD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC"}
|
package/dist/domain/index.js
CHANGED
|
@@ -1,20 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/* Copyright (C) 2026-present Aristotelis — see repository license. */
|
|
3
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
-
if (k2 === undefined) k2 = k;
|
|
5
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
-
}
|
|
9
|
-
Object.defineProperty(o, k2, desc);
|
|
10
|
-
}) : (function(o, m, k, k2) {
|
|
11
|
-
if (k2 === undefined) k2 = k;
|
|
12
|
-
o[k2] = m[k];
|
|
13
|
-
}));
|
|
14
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
15
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
16
|
-
};
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
2
|
/**
|
|
19
3
|
* Domain primitives. Free of ORM and persistence dependencies.
|
|
20
4
|
*
|
|
@@ -22,22 +6,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
22
6
|
* file that only needs `DomainException` does not pull the persistence layer in
|
|
23
7
|
* behind it.
|
|
24
8
|
*/
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
9
|
+
export * from './decorators/apply-mutation.decorator.js';
|
|
10
|
+
export * from './decorators/mutable.decorator.js';
|
|
11
|
+
export * from './events/domain.event.js';
|
|
12
|
+
export * from './events/event.interface.js';
|
|
13
|
+
export * from './events/root-domain.event.js';
|
|
14
|
+
export * from './exceptions/concurrency-conflict.error.js';
|
|
15
|
+
export * from './exceptions/domain.exception.js';
|
|
16
|
+
export * from './exceptions/entity-not-found.exception.js';
|
|
17
|
+
export * from './exceptions/invalid-value.exception.js';
|
|
18
|
+
export * from './exceptions/missing-tenant-context.exception.js';
|
|
19
|
+
export * from './exceptions/transient-operation.error.js';
|
|
20
|
+
export * from './exceptions/unknown-mutable-field.error.js';
|
|
21
|
+
export * from './interfaces/aggregate-root.interface.js';
|
|
22
|
+
export * from './interfaces/root-entity-snapshot.interface.js';
|
|
23
|
+
export * from './models/aggregate-root.js';
|
|
24
|
+
export * from './models/root.entity.js';
|
|
25
|
+
export * from './rules/number.rule.js';
|
|
26
|
+
export * from './rules/text.rule.js';
|
|
27
|
+
export * from './rules/value-violation.js';
|
|
43
28
|
//# sourceMappingURL=index.js.map
|
package/dist/domain/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../domain/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../domain/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE;;;;;;GAMG;AAEH,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,kCAAkC,CAAC;AACjD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,yCAAyC,CAAC;AACxD,cAAc,kDAAkD,CAAC;AACjE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,0CAA0C,CAAC;AACzD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { IEvent } from '../events/event.interface.js';
|
|
2
|
+
/**
|
|
3
|
+
* Options for applying an event to an aggregate root.
|
|
4
|
+
*/
|
|
5
|
+
export interface ApplyEventOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Whether the event originates from historical rehydration.
|
|
8
|
+
* If true, the event will not be buffered into uncommitted events.
|
|
9
|
+
*/
|
|
10
|
+
readonly fromHistory?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Whether to skip calling the corresponding `on<EventName>` handler.
|
|
13
|
+
*/
|
|
14
|
+
readonly skipHandler?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The event-buffering contract of an aggregate root, matching NestJS CQRS 12's
|
|
18
|
+
* `IAggregateRoot`, so an aggregate built on either class satisfies it.
|
|
19
|
+
*
|
|
20
|
+
* A dispatcher context is any value the publisher understands, such as
|
|
21
|
+
* `{ transaction }`; `undefined` lets the publisher choose its default.
|
|
22
|
+
*/
|
|
23
|
+
export interface IAggregateRoot<EventBase extends IEvent = IEvent> {
|
|
24
|
+
/** When true, `apply()` publishes each event at once instead of buffering it. */
|
|
25
|
+
autoCommit: boolean;
|
|
26
|
+
/** Returns what the connected publisher returns, or `undefined` when none is. */
|
|
27
|
+
publish<T extends EventBase = EventBase>(event: T, dispatcherContext?: unknown): unknown;
|
|
28
|
+
/** Returns what the connected publisher returns, or `undefined` when none is. */
|
|
29
|
+
publishAll<T extends EventBase = EventBase>(events: T[], dispatcherContext?: unknown): unknown;
|
|
30
|
+
/**
|
|
31
|
+
* Hands the buffered events to `publishAll()` and clears the buffer once it
|
|
32
|
+
* returns, before an asynchronous publisher settles; returns its result.
|
|
33
|
+
*/
|
|
34
|
+
commit(dispatcherContext?: unknown): unknown;
|
|
35
|
+
uncommit(): void;
|
|
36
|
+
getUncommittedEvents(): EventBase[];
|
|
37
|
+
loadFromHistory(history: EventBase[]): void;
|
|
38
|
+
apply<T extends EventBase = EventBase>(event: T, isFromHistory?: boolean): void;
|
|
39
|
+
apply<T extends EventBase = EventBase>(event: T, options?: ApplyEventOptions): void;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=aggregate-root.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate-root.interface.d.ts","sourceRoot":"","sources":["../../../domain/interfaces/aggregate-root.interface.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IAC/D,iFAAiF;IACjF,UAAU,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACrC,KAAK,EAAE,CAAC,EACR,iBAAiB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC;IACX,iFAAiF;IACjF,UAAU,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACxC,MAAM,EAAE,CAAC,EAAE,EACX,iBAAiB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC;IACX;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7C,QAAQ,IAAI,IAAI,CAAC;IACjB,oBAAoB,IAAI,SAAS,EAAE,CAAC;IACpC,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACnC,KAAK,EAAE,CAAC,EACR,aAAa,CAAC,EAAE,OAAO,GACtB,IAAI,CAAC;IACR,KAAK,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACnC,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE,iBAAiB,GAC1B,IAAI,CAAC;CACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate-root.interface.js","sourceRoot":"","sources":["../../../domain/interfaces/aggregate-root.interface.ts"],"names":[],"mappings":"AAAA,sEAAsE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root-entity-snapshot.interface.js","sourceRoot":"","sources":["../../../domain/interfaces/root-entity-snapshot.interface.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"root-entity-snapshot.interface.js","sourceRoot":"","sources":["../../../domain/interfaces/root-entity-snapshot.interface.ts"],"names":[],"mappings":"AAAA,sEAAsE"}
|
|
@@ -1,20 +1,7 @@
|
|
|
1
|
-
import { IEvent } from '../events/event.interface';
|
|
1
|
+
import { IEvent } from '../events/event.interface.js';
|
|
2
|
+
import type { ApplyEventOptions, IAggregateRoot } from '../interfaces/aggregate-root.interface.js';
|
|
2
3
|
declare const INTERNAL_EVENTS: unique symbol;
|
|
3
4
|
declare const IS_AUTO_COMMIT_ENABLED: unique symbol;
|
|
4
|
-
/**
|
|
5
|
-
* Options for applying an event to an aggregate root.
|
|
6
|
-
*/
|
|
7
|
-
export interface ApplyEventOptions {
|
|
8
|
-
/**
|
|
9
|
-
* Whether the event originates from historical rehydration.
|
|
10
|
-
* If true, the event will not be buffered into uncommitted events.
|
|
11
|
-
*/
|
|
12
|
-
readonly fromHistory?: boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Whether to skip calling the corresponding `on<EventName>` handler.
|
|
15
|
-
*/
|
|
16
|
-
readonly skipHandler?: boolean;
|
|
17
|
-
}
|
|
18
5
|
/**
|
|
19
6
|
* Abstract base class representing a Domain-Driven Design (DDD) aggregate root.
|
|
20
7
|
*
|
|
@@ -27,7 +14,7 @@ export interface ApplyEventOptions {
|
|
|
27
14
|
*
|
|
28
15
|
* @template EventBase The base event type, defaults to {@link IEvent}.
|
|
29
16
|
*/
|
|
30
|
-
export declare abstract class AggregateRoot<EventBase extends IEvent = IEvent> {
|
|
17
|
+
export declare abstract class AggregateRoot<EventBase extends IEvent = IEvent> implements IAggregateRoot<EventBase> {
|
|
31
18
|
private [IS_AUTO_COMMIT_ENABLED];
|
|
32
19
|
private readonly [INTERNAL_EVENTS];
|
|
33
20
|
/**
|
|
@@ -39,17 +26,42 @@ export declare abstract class AggregateRoot<EventBase extends IEvent = IEvent> {
|
|
|
39
26
|
*/
|
|
40
27
|
get autoCommit(): boolean;
|
|
41
28
|
/**
|
|
42
|
-
* Called by apply() for each event while autoCommit is enabled; a no-op
|
|
29
|
+
* Called by apply() for each event while autoCommit is enabled; a no-op that
|
|
30
|
+
* returns `undefined` unless overridden or connected to a publisher (for
|
|
31
|
+
* example NestJS's `EventPublisher.mergeObjectContext`).
|
|
32
|
+
*
|
|
33
|
+
* @param _event - The event to publish.
|
|
34
|
+
* @param _dispatcherContext - Passed through to the publisher, such as `{ transaction }`.
|
|
35
|
+
* @returns What the publisher returns.
|
|
43
36
|
*/
|
|
44
|
-
publish<T extends EventBase = EventBase>(_event: T):
|
|
37
|
+
publish<T extends EventBase = EventBase>(_event: T, _dispatcherContext?: unknown): unknown;
|
|
45
38
|
/**
|
|
46
|
-
* Called by commit() with a copy of the buffered events; a no-op
|
|
39
|
+
* Called by commit() with a copy of the buffered events; a no-op that returns
|
|
40
|
+
* `undefined` unless overridden or connected to a publisher.
|
|
41
|
+
*
|
|
42
|
+
* @param _events - The events to publish.
|
|
43
|
+
* @param _dispatcherContext - Passed through to the publisher, such as `{ transaction }`.
|
|
44
|
+
* @returns What the publisher returns.
|
|
47
45
|
*/
|
|
48
|
-
publishAll<T extends EventBase = EventBase>(_events: T[]):
|
|
46
|
+
publishAll<T extends EventBase = EventBase>(_events: T[], _dispatcherContext?: unknown): unknown;
|
|
49
47
|
/**
|
|
50
|
-
*
|
|
48
|
+
* Hands a copy of the buffered events to {@link publishAll} with the dispatcher
|
|
49
|
+
* context, then clears the buffer. The buffer is cleared once `publishAll()`
|
|
50
|
+
* returns, before an asynchronous publisher settles, so a caller that does not
|
|
51
|
+
* await cannot publish the same events twice; if `publishAll()` throws, the
|
|
52
|
+
* events stay buffered.
|
|
53
|
+
*
|
|
54
|
+
* @param dispatcherContext - Passed to {@link publishAll}, such as `{ transaction }`.
|
|
55
|
+
* @returns What {@link publishAll} returns: await it to wait for, and catch the
|
|
56
|
+
* errors of, an asynchronous publisher.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```ts
|
|
60
|
+
* const order = publisher.mergeObjectContext(Order.place(id));
|
|
61
|
+
* await order.commit({ transaction });
|
|
62
|
+
* ```
|
|
51
63
|
*/
|
|
52
|
-
commit():
|
|
64
|
+
commit(dispatcherContext?: unknown): unknown;
|
|
53
65
|
/**
|
|
54
66
|
* Clears all uncommitted events without publishing.
|
|
55
67
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-root.d.ts","sourceRoot":"","sources":["../../../domain/models/aggregate-root.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"aggregate-root.d.ts","sourceRoot":"","sources":["../../../domain/models/aggregate-root.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACf,MAAM,2CAA2C,CAAC;AAEnD,QAAA,MAAM,eAAe,eAA4B,CAAC;AAClD,QAAA,MAAM,sBAAsB,eAAmC,CAAC;AAEhE;;;;;;;;;;;GAWG;AACH,8BAAsB,aAAa,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM,CACnE,YAAW,cAAc,CAAC,SAAS,CAAC;IAEpC,OAAO,CAAC,CAAC,sBAAsB,CAAC,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAmB;IAErD;;OAEG;IACH,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,EAE5B;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACrC,MAAM,EAAE,CAAC,EACT,kBAAkB,CAAC,EAAE,OAAO,GAC3B,OAAO,CAET;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACxC,OAAO,EAAE,CAAC,EAAE,EACZ,kBAAkB,CAAC,EAAE,OAAO,GAC3B,OAAO,CAET;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,OAAO,CAO3C;IAED;;OAEG;IACH,QAAQ,IAAI,IAAI,CAEf;IAED;;OAEG;IACH,oBAAoB,IAAI,SAAS,EAAE,CAElC;IAED;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAI1C;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACnC,KAAK,EAAE,CAAC,EACR,sBAAsB,GAAE,OAAO,GAAG,iBAAsB,GACvD,IAAI,CAyBN;IAED;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACvD,KAAK,EAAE,CAAC,GACP,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAMlC;IAED;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAG7C;CACF"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/* Copyright (C) 2026-present Aristotelis — see repository license.
|
|
3
2
|
* Derived from and compatible with NestJS CQRS AggregateRoot (MIT License).
|
|
4
3
|
* Copyright (c) 2017-2026 Kamil Mysliwiec (https://kamilmysliwiec.com)
|
|
5
4
|
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.AggregateRoot = void 0;
|
|
8
5
|
const INTERNAL_EVENTS = Symbol('INTERNAL_EVENTS');
|
|
9
6
|
const IS_AUTO_COMMIT_ENABLED = Symbol('IS_AUTO_COMMIT_ENABLED');
|
|
10
7
|
/**
|
|
@@ -19,7 +16,7 @@ const IS_AUTO_COMMIT_ENABLED = Symbol('IS_AUTO_COMMIT_ENABLED');
|
|
|
19
16
|
*
|
|
20
17
|
* @template EventBase The base event type, defaults to {@link IEvent}.
|
|
21
18
|
*/
|
|
22
|
-
class AggregateRoot {
|
|
19
|
+
export class AggregateRoot {
|
|
23
20
|
[IS_AUTO_COMMIT_ENABLED] = false;
|
|
24
21
|
[INTERNAL_EVENTS] = [];
|
|
25
22
|
/**
|
|
@@ -35,19 +32,49 @@ class AggregateRoot {
|
|
|
35
32
|
return this[IS_AUTO_COMMIT_ENABLED];
|
|
36
33
|
}
|
|
37
34
|
/**
|
|
38
|
-
* Called by apply() for each event while autoCommit is enabled; a no-op
|
|
35
|
+
* Called by apply() for each event while autoCommit is enabled; a no-op that
|
|
36
|
+
* returns `undefined` unless overridden or connected to a publisher (for
|
|
37
|
+
* example NestJS's `EventPublisher.mergeObjectContext`).
|
|
38
|
+
*
|
|
39
|
+
* @param _event - The event to publish.
|
|
40
|
+
* @param _dispatcherContext - Passed through to the publisher, such as `{ transaction }`.
|
|
41
|
+
* @returns What the publisher returns.
|
|
39
42
|
*/
|
|
40
|
-
publish(_event) {
|
|
43
|
+
publish(_event, _dispatcherContext) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
41
46
|
/**
|
|
42
|
-
* Called by commit() with a copy of the buffered events; a no-op
|
|
47
|
+
* Called by commit() with a copy of the buffered events; a no-op that returns
|
|
48
|
+
* `undefined` unless overridden or connected to a publisher.
|
|
49
|
+
*
|
|
50
|
+
* @param _events - The events to publish.
|
|
51
|
+
* @param _dispatcherContext - Passed through to the publisher, such as `{ transaction }`.
|
|
52
|
+
* @returns What the publisher returns.
|
|
43
53
|
*/
|
|
44
|
-
publishAll(_events) {
|
|
54
|
+
publishAll(_events, _dispatcherContext) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
45
57
|
/**
|
|
46
|
-
*
|
|
58
|
+
* Hands a copy of the buffered events to {@link publishAll} with the dispatcher
|
|
59
|
+
* context, then clears the buffer. The buffer is cleared once `publishAll()`
|
|
60
|
+
* returns, before an asynchronous publisher settles, so a caller that does not
|
|
61
|
+
* await cannot publish the same events twice; if `publishAll()` throws, the
|
|
62
|
+
* events stay buffered.
|
|
63
|
+
*
|
|
64
|
+
* @param dispatcherContext - Passed to {@link publishAll}, such as `{ transaction }`.
|
|
65
|
+
* @returns What {@link publishAll} returns: await it to wait for, and catch the
|
|
66
|
+
* errors of, an asynchronous publisher.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* const order = publisher.mergeObjectContext(Order.place(id));
|
|
71
|
+
* await order.commit({ transaction });
|
|
72
|
+
* ```
|
|
47
73
|
*/
|
|
48
|
-
commit() {
|
|
49
|
-
this.publishAll([...this[INTERNAL_EVENTS]]);
|
|
74
|
+
commit(dispatcherContext) {
|
|
75
|
+
const published = this.publishAll([...this[INTERNAL_EVENTS]], dispatcherContext);
|
|
50
76
|
this[INTERNAL_EVENTS].length = 0;
|
|
77
|
+
return published;
|
|
51
78
|
}
|
|
52
79
|
/**
|
|
53
80
|
* Clears all uncommitted events without publishing.
|
|
@@ -118,5 +145,4 @@ class AggregateRoot {
|
|
|
118
145
|
return proto?.constructor?.name ?? 'Event';
|
|
119
146
|
}
|
|
120
147
|
}
|
|
121
|
-
exports.AggregateRoot = AggregateRoot;
|
|
122
148
|
//# sourceMappingURL=aggregate-root.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-root.js","sourceRoot":"","sources":["../../../domain/models/aggregate-root.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aggregate-root.js","sourceRoot":"","sources":["../../../domain/models/aggregate-root.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { MutationPatch } from '../decorators/apply-mutation.decorator';
|
|
2
|
-
import { RootEntitySnapshot } from '../interfaces/root-entity-snapshot.interface';
|
|
3
|
-
import { AggregateRoot } from './aggregate-root';
|
|
1
|
+
import type { MutationPatch } from '../decorators/apply-mutation.decorator.js';
|
|
2
|
+
import { RootEntitySnapshot } from '../interfaces/root-entity-snapshot.interface.js';
|
|
3
|
+
import { AggregateRoot } from './aggregate-root.js';
|
|
4
4
|
/**
|
|
5
5
|
* Abstract base entity for DDD domain aggregates and entities.
|
|
6
6
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root.entity.d.ts","sourceRoot":"","sources":["../../../domain/models/root.entity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"root.entity.d.ts","sourceRoot":"","sources":["../../../domain/models/root.entity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,8BAAsB,UAAU,CAC5B,SAAS,SAAS,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAEpE,SAAQ,aACR,YAAW,kBAAkB;IAE7B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,UAAU,CAAO;IACzB,OAAO,CAAC,UAAU,CAAO;IACzB,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAEpC,YAAY,QAAQ,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAsCjD;IAED,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAKhD;IAED,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAc1D;IAED;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,CACT,CAAC,SAAS,UAAU,CAAC,SAAS,CAAC,EAC/B,SAAS,SAAS,OAAO,CAAC,kBAAkB,CAAC,EAE7C,IAAI,EACA;QAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,CAAC,CAAA;KAAE,GACpC,CAAC,QAAQ,MACP,GAAG,IAAI,EAAE,OAAO,EAAE,KACf,CAAC,CAAC,EACX,SAAS,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAC1C,CAAC,GAAG,IAAI,CA0BV;IAED,IAAI,EAAE,IAAI,MAAM,CAEf;IAED;;;OAGG;IACH,OAAO,KAAK,EAAE,QAEb;IAED,IAAI,SAAS,IAAI,IAAI,CAEpB;IAED;;;OAGG;IACH,OAAO,KAAK,SAAS,QAEpB;IAED,IAAI,SAAS,IAAI,IAAI,CAEpB;IAED;;;OAGG;IACH,OAAO,KAAK,SAAS,QAEpB;IAED;;;;;;;;;;;OAWG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;;;;OAKG;IACH,OAAO,KAAK,OAAO,QAKlB;IAED;;;;;;;;;;;;;;OAcG;IACH,kBAAkB,IAAI,MAAM,CAE3B;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAY3C;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,SAAS,CAAC,UAAU,CAAC,OAAO,SAAS,MAAM,EACzC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAC5B,IAAI,CAsCN;IAED,SAAS,CAAC,QAAQ,IAAI,IAAI,CAIzB;IAED,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAE7D;IAED;;;;OAIG;IACH,SAAS,CAAC,WAAW,IAAI,IAAI,CAAG;IAEhC,QAAQ,CAAC,MAAM,IAAI,kBAAkB,GAAG,SAAS,CAAC;CACnD"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/* Copyright (C) 2026-present Aristotelis — see repository license. */
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const unknown_mutable_field_error_1 = require("../exceptions/unknown-mutable-field.error");
|
|
8
|
-
const aggregate_root_1 = require("./aggregate-root");
|
|
2
|
+
import { isUuidV7, uuidv7 } from '@cqrs-ddd/uuidv7';
|
|
3
|
+
import { getMutableFields } from '../decorators/mutable.decorator.js';
|
|
4
|
+
import { UnknownMutableFieldError } from '../exceptions/unknown-mutable-field.error.js';
|
|
5
|
+
import { AggregateRoot } from './aggregate-root.js';
|
|
9
6
|
/**
|
|
10
7
|
* Abstract base entity for DDD domain aggregates and entities.
|
|
11
8
|
*
|
|
@@ -72,7 +69,7 @@ const aggregate_root_1 = require("./aggregate-root");
|
|
|
72
69
|
* }
|
|
73
70
|
* ```
|
|
74
71
|
*/
|
|
75
|
-
class RootEntity extends
|
|
72
|
+
export class RootEntity extends AggregateRoot {
|
|
76
73
|
_id;
|
|
77
74
|
_createdAt;
|
|
78
75
|
_updatedAt;
|
|
@@ -103,12 +100,12 @@ class RootEntity extends aggregate_root_1.AggregateRoot {
|
|
|
103
100
|
throw new Error('id, createdAt, and updatedAt must be provided together when rehydrating an entity.');
|
|
104
101
|
}
|
|
105
102
|
const now = new Date();
|
|
106
|
-
this._id =
|
|
103
|
+
this._id = uuidv7();
|
|
107
104
|
this._createdAt = now;
|
|
108
105
|
this._updatedAt = now;
|
|
109
106
|
}
|
|
110
107
|
static normalizeId(id) {
|
|
111
|
-
if (typeof id !== 'string' || !
|
|
108
|
+
if (typeof id !== 'string' || !isUuidV7(id)) {
|
|
112
109
|
throw new Error('id must be a valid UUID v7.');
|
|
113
110
|
}
|
|
114
111
|
return id.trim();
|
|
@@ -307,7 +304,7 @@ class RootEntity extends aggregate_root_1.AggregateRoot {
|
|
|
307
304
|
if (typeof patch !== 'object') {
|
|
308
305
|
throw new TypeError('applyPatch() requires a field patch object, or nothing.');
|
|
309
306
|
}
|
|
310
|
-
const fields =
|
|
307
|
+
const fields = getMutableFields(this);
|
|
311
308
|
const writes = [];
|
|
312
309
|
// Phase 1: validate all keys and normalize values before any state changes
|
|
313
310
|
for (const [key, value] of Object.entries(patch)) {
|
|
@@ -316,7 +313,7 @@ class RootEntity extends aggregate_root_1.AggregateRoot {
|
|
|
316
313
|
}
|
|
317
314
|
const field = fields.get(key);
|
|
318
315
|
if (!field) {
|
|
319
|
-
throw new
|
|
316
|
+
throw new UnknownMutableFieldError(this.constructor.name, key, [
|
|
320
317
|
...fields.keys(),
|
|
321
318
|
]);
|
|
322
319
|
}
|
|
@@ -346,5 +343,4 @@ class RootEntity extends aggregate_root_1.AggregateRoot {
|
|
|
346
343
|
*/
|
|
347
344
|
afterUpdate() { }
|
|
348
345
|
}
|
|
349
|
-
exports.RootEntity = RootEntity;
|
|
350
346
|
//# sourceMappingURL=root.entity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root.entity.js","sourceRoot":"","sources":["../../../domain/models/root.entity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"root.entity.js","sourceRoot":"","sources":["../../../domain/models/root.entity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ValueViolationError } from './value-violation';
|
|
1
|
+
import type { ValueViolationError } from './value-violation.js';
|
|
2
2
|
/** Options of {@link numberRule}. */
|
|
3
3
|
export interface NumberRuleOptions {
|
|
4
4
|
/** Field name reported in the violation and in the default message. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.rule.d.ts","sourceRoot":"","sources":["../../../domain/rules/number.rule.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"number.rule.d.ts","sourceRoot":"","sources":["../../../domain/rules/number.rule.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,qCAAqC;AACrC,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,mBAAmB,CAAC;CACtC;AAED,gFAAgF;AAChF,MAAM,MAAM,eAAe,CAAC,QAAQ,SAAS,iBAAiB,IAC5D,QAAQ,SAAS;IAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAA;CAAE,GACxC,MAAM,GACN,QAAQ,SAAS;IAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAC7C,MAAM,GAAG,IAAI,GACb,MAAM,CAAC;AAEf,6EAA6E;AAC7E,MAAM,MAAM,UAAU,CAAC,QAAQ,SAAS,iBAAiB,GAAG,iBAAiB,IAC3E,QAAQ,CAAC,QAAQ,CAAC,GAAG;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,eAAe,CAAC,QAAQ,CAAC,CAAC;CAC/D,CAAC;AAQJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,QAAQ,SAAS,iBAAiB,EACjE,OAAO,EAAE,QAAQ,GAChB,UAAU,CAAC,QAAQ,CAAC,CAkCtB"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/* Copyright (C) 2026-present Aristotelis — see repository license. */
|
|
3
|
-
|
|
4
|
-
exports.numberRule = numberRule;
|
|
5
|
-
const rule_support_1 = require("./rule-support");
|
|
2
|
+
import { assertField, violationThrower } from './rule-support.js';
|
|
6
3
|
function assertBound(name, value) {
|
|
7
4
|
if (value !== undefined && !Number.isFinite(value)) {
|
|
8
5
|
throw new TypeError(`numberRule: ${name} must be a finite number.`);
|
|
@@ -46,15 +43,15 @@ function assertBound(name, value) {
|
|
|
46
43
|
* // throws InvalidQuantityException: "quantity must be at least 1."
|
|
47
44
|
* ```
|
|
48
45
|
*/
|
|
49
|
-
function numberRule(options) {
|
|
50
|
-
|
|
46
|
+
export function numberRule(options) {
|
|
47
|
+
assertField(options.field, 'numberRule');
|
|
51
48
|
assertBound('min', options.min);
|
|
52
49
|
assertBound('max', options.max);
|
|
53
50
|
const { field, required = true, integer = false, min, max } = options;
|
|
54
51
|
if (min !== undefined && max !== undefined && min > max) {
|
|
55
52
|
throw new TypeError('numberRule: min must not exceed max.');
|
|
56
53
|
}
|
|
57
|
-
const fail =
|
|
54
|
+
const fail = violationThrower(options.error);
|
|
58
55
|
const parse = (value) => {
|
|
59
56
|
if (value === null || value === undefined) {
|
|
60
57
|
return required ? fail({ field, rule: 'required' }) : null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.rule.js","sourceRoot":"","sources":["../../../domain/rules/number.rule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"number.rule.js","sourceRoot":"","sources":["../../../domain/rules/number.rule.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAgDlE,SAAS,WAAW,CAAC,IAAY,EAAE,KAAyB;IAC1D,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,SAAS,CAAC,eAAe,IAAI,2BAA2B,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,UAAU,UAAU,CACxB,OAAiB;IAEjB,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACzC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACtE,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;QACxD,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG,CAAC,KAAc,EAAiB,EAAE;QAC9C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAyB,CAAC;AACtE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ValueViolation, ValueViolationError } from './value-violation';
|
|
1
|
+
import type { ValueViolation, ValueViolationError } from './value-violation.js';
|
|
2
2
|
/** Throws a `TypeError` naming the rule when `field` is not a non-empty string. */
|
|
3
3
|
export declare function assertField(field: unknown, rule: string): void;
|
|
4
4
|
/** Returns a function that throws the rule's error for a violation, frozen. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-support.d.ts","sourceRoot":"","sources":["../../../domain/rules/rule-support.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"rule-support.d.ts","sourceRoot":"","sources":["../../../domain/rules/rule-support.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhF,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAI9D;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAC9B,KAAK,GAAE,mBAC+B,GACrC,CAAC,SAAS,EAAE,cAAc,KAAK,KAAK,CAItC"}
|
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/* Copyright (C) 2026-present Aristotelis — see repository license. */
|
|
3
|
-
|
|
4
|
-
exports.assertField = assertField;
|
|
5
|
-
exports.violationThrower = violationThrower;
|
|
6
|
-
const invalid_value_exception_1 = require("../exceptions/invalid-value.exception");
|
|
2
|
+
import { InvalidValueException } from '../exceptions/invalid-value.exception.js';
|
|
7
3
|
/** Throws a `TypeError` naming the rule when `field` is not a non-empty string. */
|
|
8
|
-
function assertField(field, rule) {
|
|
4
|
+
export function assertField(field, rule) {
|
|
9
5
|
if (typeof field !== 'string' || field.trim().length === 0) {
|
|
10
6
|
throw new TypeError(`${rule}: field must be a non-empty string.`);
|
|
11
7
|
}
|
|
12
8
|
}
|
|
13
9
|
/** Returns a function that throws the rule's error for a violation, frozen. */
|
|
14
|
-
function violationThrower(error = (violation) => new
|
|
10
|
+
export function violationThrower(error = (violation) => new InvalidValueException(violation)) {
|
|
15
11
|
return (violation) => {
|
|
16
12
|
throw error(Object.freeze(violation));
|
|
17
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-support.js","sourceRoot":"","sources":["../../../domain/rules/rule-support.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rule-support.js","sourceRoot":"","sources":["../../../domain/rules/rule-support.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAGjF,mFAAmF;AACnF,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,IAAY;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,qCAAqC,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAC9B,KAAK,GAAwB,CAAC,SAAS,EAAE,EAAE,CACzC,IAAI,qBAAqB,CAAC,SAAS,CAAC;IAEtC,OAAO,CAAC,SAAS,EAAE,EAAE;QACnB,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ValueViolationError } from './value-violation';
|
|
1
|
+
import type { ValueViolationError } from './value-violation.js';
|
|
2
2
|
/** Options of {@link textRule}. */
|
|
3
3
|
export interface TextRuleOptions {
|
|
4
4
|
/** Field name reported in the violation and in the default message. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.rule.d.ts","sourceRoot":"","sources":["../../../domain/rules/text.rule.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"text.rule.d.ts","sourceRoot":"","sources":["../../../domain/rules/text.rule.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,mBAAmB,CAAC;CACtC;AAED,8EAA8E;AAC9E,MAAM,MAAM,aAAa,CAAC,QAAQ,SAAS,eAAe,IAAI,QAAQ,SAAS;IAC7E,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;CACzB,GACG,MAAM,GACN,QAAQ,SAAS;IAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAC7C,MAAM,GAAG,IAAI,GACb,MAAM,CAAC;AAEb,2EAA2E;AAC3E,MAAM,MAAM,QAAQ,CAAC,QAAQ,SAAS,eAAe,GAAG,eAAe,IACrE,QAAQ,CAAC,QAAQ,CAAC,GAAG;IACnB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAC;CAC7D,CAAC;AAaJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,QAAQ,CAAC,KAAK,CAAC,QAAQ,SAAS,eAAe,EAC7D,OAAO,EAAE,QAAQ,GAChB,QAAQ,CAAC,QAAQ,CAAC,CA0DpB"}
|