@nestjs/cqrs 11.0.2 → 12.0.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/.circleci/config.yml +3 -3
- package/.nvmrc +1 -0
- package/README.md +0 -1
- package/dist/aggregate-root.d.ts +3 -67
- package/dist/aggregate-root.js +6 -83
- package/dist/classes/command.d.ts +2 -2
- package/dist/classes/command.js +2 -6
- package/dist/classes/constants.js +1 -4
- package/dist/classes/index.d.ts +2 -2
- package/dist/classes/index.js +2 -18
- package/dist/classes/query.d.ts +2 -2
- package/dist/classes/query.js +2 -6
- package/dist/command-bus.d.ts +8 -5
- package/dist/command-bus.js +32 -32
- package/dist/constants.js +1 -4
- package/dist/cqrs.module.d.ts +8 -5
- package/dist/cqrs.module.js +37 -37
- package/dist/decorators/command-handler.decorator.d.ts +3 -1
- package/dist/decorators/command-handler.decorator.js +11 -13
- package/dist/decorators/constants.js +7 -10
- package/dist/decorators/events-handler.decorator.d.ts +3 -1
- package/dist/decorators/events-handler.decorator.js +12 -14
- package/dist/decorators/index.d.ts +5 -5
- package/dist/decorators/index.js +5 -21
- package/dist/decorators/publishable.decorator.d.ts +2 -0
- package/dist/decorators/publishable.decorator.js +5 -6
- package/dist/decorators/query-handler.decorator.d.ts +3 -1
- package/dist/decorators/query-handler.decorator.js +11 -13
- package/dist/decorators/saga.decorator.d.ts +2 -0
- package/dist/decorators/saga.decorator.js +7 -9
- package/dist/event-bus.d.ts +13 -8
- package/dist/event-bus.js +54 -51
- package/dist/event-publisher.d.ts +9 -7
- package/dist/event-publisher.js +10 -10
- package/dist/exceptions/command-not-found.exception.d.ts +3 -0
- package/dist/exceptions/command-not-found.exception.js +4 -5
- package/dist/exceptions/index.d.ts +7 -7
- package/dist/exceptions/index.js +7 -23
- package/dist/exceptions/invalid-command-handler.exception.d.ts +3 -0
- package/dist/exceptions/invalid-command-handler.exception.js +4 -5
- package/dist/exceptions/invalid-events-handler.exception.d.ts +3 -0
- package/dist/exceptions/invalid-events-handler.exception.js +4 -5
- package/dist/exceptions/invalid-query-handler.exception.js +1 -5
- package/dist/exceptions/invalid-saga.exception.d.ts +3 -0
- package/dist/exceptions/invalid-saga.exception.js +4 -5
- package/dist/exceptions/query-not-found.exception.d.ts +3 -0
- package/dist/exceptions/query-not-found.exception.js +4 -5
- package/dist/exceptions/unsupported-saga-scope.exception.d.ts +3 -0
- package/dist/exceptions/unsupported-saga-scope.exception.js +4 -5
- package/dist/helpers/default-command-pubsub.d.ts +1 -1
- package/dist/helpers/default-command-pubsub.js +1 -5
- package/dist/helpers/default-event-id-provider.d.ts +1 -1
- package/dist/helpers/default-event-id-provider.js +3 -6
- package/dist/helpers/default-pubsub.d.ts +1 -1
- package/dist/helpers/default-pubsub.js +1 -5
- package/dist/helpers/default-query-pubsub.d.ts +1 -1
- package/dist/helpers/default-query-pubsub.js +1 -5
- package/dist/helpers/default-unhandled-exception-pubsub.d.ts +1 -1
- package/dist/helpers/default-unhandled-exception-pubsub.js +1 -5
- package/dist/index.d.ts +15 -14
- package/dist/index.js +15 -30
- package/dist/interfaces/aggregate-root.interface.d.ts +53 -0
- package/dist/interfaces/aggregate-root.interface.js +1 -0
- package/dist/interfaces/commands/command-bus.interface.d.ts +5 -3
- package/dist/interfaces/commands/command-bus.interface.js +1 -2
- package/dist/interfaces/commands/command-handler.interface.d.ts +4 -2
- package/dist/interfaces/commands/command-handler.interface.js +1 -2
- package/dist/interfaces/commands/command-metadata.interface.js +1 -2
- package/dist/interfaces/commands/command-publisher.interface.d.ts +6 -1
- package/dist/interfaces/commands/command-publisher.interface.js +1 -2
- package/dist/interfaces/commands/command.interface.js +1 -2
- package/dist/interfaces/cqrs-module-options.interface.d.ts +17 -5
- package/dist/interfaces/cqrs-module-options.interface.js +1 -2
- package/dist/interfaces/events/event-bus.interface.d.ts +2 -2
- package/dist/interfaces/events/event-bus.interface.js +1 -2
- package/dist/interfaces/events/event-handler.interface.d.ts +1 -1
- package/dist/interfaces/events/event-handler.interface.js +1 -2
- package/dist/interfaces/events/event-id-provider.interface.d.ts +1 -1
- package/dist/interfaces/events/event-id-provider.interface.js +1 -2
- package/dist/interfaces/events/event-publisher.interface.d.ts +2 -2
- package/dist/interfaces/events/event-publisher.interface.js +1 -2
- package/dist/interfaces/events/event.interface.js +1 -2
- package/dist/interfaces/events/message-source.interface.d.ts +1 -1
- package/dist/interfaces/events/message-source.interface.js +1 -2
- package/dist/interfaces/exceptions/unhandled-exception-info.interface.d.ts +2 -2
- package/dist/interfaces/exceptions/unhandled-exception-info.interface.js +1 -2
- package/dist/interfaces/exceptions/unhandled-exception-publisher.interface.d.ts +3 -3
- package/dist/interfaces/exceptions/unhandled-exception-publisher.interface.js +1 -2
- package/dist/interfaces/index.d.ts +20 -19
- package/dist/interfaces/index.js +20 -35
- package/dist/interfaces/providers-introspection-result.interface.d.ts +4 -4
- package/dist/interfaces/providers-introspection-result.interface.js +1 -2
- package/dist/interfaces/queries/query-bus.interface.d.ts +5 -3
- package/dist/interfaces/queries/query-bus.interface.js +1 -2
- package/dist/interfaces/queries/query-handler.interface.d.ts +4 -2
- package/dist/interfaces/queries/query-handler.interface.js +1 -2
- package/dist/interfaces/queries/query-metadata.interface.js +1 -2
- package/dist/interfaces/queries/query-publisher.interface.d.ts +6 -1
- package/dist/interfaces/queries/query-publisher.interface.js +1 -2
- package/dist/interfaces/queries/query-result.interface.js +1 -2
- package/dist/interfaces/queries/query.interface.js +1 -2
- package/dist/interfaces/saga.type.d.ts +2 -2
- package/dist/interfaces/saga.type.js +1 -2
- package/dist/mixins/index.d.ts +1 -0
- package/dist/mixins/index.js +1 -0
- package/dist/mixins/with-aggregate-root.mixin.d.ts +11 -0
- package/dist/mixins/with-aggregate-root.mixin.js +67 -0
- package/dist/operators/index.d.ts +1 -1
- package/dist/operators/index.js +1 -17
- package/dist/operators/of-type.d.ts +1 -1
- package/dist/operators/of-type.js +3 -6
- package/dist/query-bus.d.ts +8 -5
- package/dist/query-bus.js +31 -31
- package/dist/scopes/async.context.js +9 -13
- package/dist/scopes/index.d.ts +1 -1
- package/dist/scopes/index.js +1 -17
- package/dist/services/explorer.service.d.ts +5 -5
- package/dist/services/explorer.service.js +14 -20
- package/dist/storages/aggregate-root.storage.d.ts +3 -3
- package/dist/storages/aggregate-root.storage.js +1 -5
- package/dist/unhandled-exception-bus.d.ts +2 -2
- package/dist/unhandled-exception-bus.js +14 -17
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +1 -17
- package/dist/utils/observable-bus.js +3 -7
- package/package.json +35 -27
- package/test/e2e/basic-flows.spec.ts +46 -26
- package/test/e2e/generics.spec.ts +3 -3
- package/test/e2e/request-scope.spec.ts +23 -22
- package/test/e2e/sync-event-handlers-app.spec.ts +123 -0
- package/test/e2e/unhandled-exceptions.spec.ts +36 -20
- package/tsconfig.build.json +3 -2
- package/vitest.config.e2e.ts +13 -0
- package/vitest.config.ts +8 -0
- package/dist/exceptions/invalid-module-ref.exception.d.ts +0 -3
- package/dist/exceptions/invalid-module-ref.exception.js +0 -8
- package/dist/helpers/default-get-event-id.d.ts +0 -9
- package/dist/helpers/default-get-event-id.js +0 -18
- package/dist/helpers/default-get-event-name.d.ts +0 -2
- package/dist/helpers/default-get-event-name.js +0 -8
- package/dist/interfaces/cqrs-options.interface.d.ts +0 -10
- package/dist/interfaces/cqrs-options.interface.js +0 -2
- package/dist/interfaces/event-observable.interface.d.ts +0 -4
- package/dist/interfaces/event-observable.interface.js +0 -2
- package/dist/utils/command-handler.decorator.d.ts +0 -3
- package/dist/utils/command-handler.decorator.js +0 -9
- package/dist/utils/constants.d.ts +0 -2
- package/dist/utils/constants.js +0 -4
- package/dist/utils/default-pubsub.d.ts +0 -9
- package/dist/utils/default-pubsub.js +0 -14
- package/dist/utils/events-handler.decorator.d.ts +0 -3
- package/dist/utils/events-handler.decorator.js +0 -9
- package/eslint.config.mjs +0 -42
- package/index.d.ts +0 -1
- package/index.js +0 -6
- package/jest.config.js +0 -9
- package/test/jest-e2e.json +0 -9
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ICommand } from '../commands/command.interface';
|
|
2
|
-
import { IEvent } from '../events/event.interface';
|
|
3
|
-
import { UnhandledExceptionInfo } from './unhandled-exception-info.interface';
|
|
1
|
+
import { ICommand } from '../commands/command.interface.js';
|
|
2
|
+
import { IEvent } from '../events/event.interface.js';
|
|
3
|
+
import { UnhandledExceptionInfo } from './unhandled-exception-info.interface.js';
|
|
4
4
|
export interface IUnhandledExceptionPublisher<CauseBase = IEvent | ICommand, ExceptionBase = any> {
|
|
5
5
|
/**
|
|
6
6
|
* Publishes an unhandled exception.
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './commands/command-
|
|
3
|
-
export * from './commands/command-
|
|
4
|
-
export * from './commands/command.interface';
|
|
5
|
-
export * from './
|
|
6
|
-
export * from './
|
|
7
|
-
export * from './events/event-
|
|
8
|
-
export * from './events/event-
|
|
9
|
-
export * from './events/event.interface';
|
|
10
|
-
export * from './events/
|
|
11
|
-
export * from './events/
|
|
12
|
-
export * from './
|
|
13
|
-
export * from './exceptions/unhandled-exception-
|
|
14
|
-
export * from './
|
|
15
|
-
export * from './queries/query-
|
|
16
|
-
export * from './queries/query-
|
|
17
|
-
export * from './queries/query-
|
|
18
|
-
export * from './queries/query.interface';
|
|
19
|
-
export * from './
|
|
1
|
+
export * from './aggregate-root.interface.js';
|
|
2
|
+
export * from './commands/command-bus.interface.js';
|
|
3
|
+
export * from './commands/command-handler.interface.js';
|
|
4
|
+
export * from './commands/command-publisher.interface.js';
|
|
5
|
+
export * from './commands/command.interface.js';
|
|
6
|
+
export * from './cqrs-module-options.interface.js';
|
|
7
|
+
export * from './events/event-bus.interface.js';
|
|
8
|
+
export * from './events/event-handler.interface.js';
|
|
9
|
+
export * from './events/event-publisher.interface.js';
|
|
10
|
+
export * from './events/event.interface.js';
|
|
11
|
+
export * from './events/message-source.interface.js';
|
|
12
|
+
export * from './events/event-id-provider.interface.js';
|
|
13
|
+
export * from './exceptions/unhandled-exception-info.interface.js';
|
|
14
|
+
export * from './exceptions/unhandled-exception-publisher.interface.js';
|
|
15
|
+
export * from './queries/query-bus.interface.js';
|
|
16
|
+
export * from './queries/query-handler.interface.js';
|
|
17
|
+
export * from './queries/query-publisher.interface.js';
|
|
18
|
+
export * from './queries/query-result.interface.js';
|
|
19
|
+
export * from './queries/query.interface.js';
|
|
20
|
+
export * from './saga.type.js';
|
package/dist/interfaces/index.js
CHANGED
|
@@ -1,35 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
__exportStar(require("./cqrs-module-options.interface"), exports);
|
|
22
|
-
__exportStar(require("./events/event-bus.interface"), exports);
|
|
23
|
-
__exportStar(require("./events/event-handler.interface"), exports);
|
|
24
|
-
__exportStar(require("./events/event-publisher.interface"), exports);
|
|
25
|
-
__exportStar(require("./events/event.interface"), exports);
|
|
26
|
-
__exportStar(require("./events/message-source.interface"), exports);
|
|
27
|
-
__exportStar(require("./events/event-id-provider.interface"), exports);
|
|
28
|
-
__exportStar(require("./exceptions/unhandled-exception-info.interface"), exports);
|
|
29
|
-
__exportStar(require("./exceptions/unhandled-exception-publisher.interface"), exports);
|
|
30
|
-
__exportStar(require("./queries/query-bus.interface"), exports);
|
|
31
|
-
__exportStar(require("./queries/query-handler.interface"), exports);
|
|
32
|
-
__exportStar(require("./queries/query-publisher.interface"), exports);
|
|
33
|
-
__exportStar(require("./queries/query-result.interface"), exports);
|
|
34
|
-
__exportStar(require("./queries/query.interface"), exports);
|
|
35
|
-
__exportStar(require("./saga.type"), exports);
|
|
1
|
+
export * from './aggregate-root.interface.js';
|
|
2
|
+
export * from './commands/command-bus.interface.js';
|
|
3
|
+
export * from './commands/command-handler.interface.js';
|
|
4
|
+
export * from './commands/command-publisher.interface.js';
|
|
5
|
+
export * from './commands/command.interface.js';
|
|
6
|
+
export * from './cqrs-module-options.interface.js';
|
|
7
|
+
export * from './events/event-bus.interface.js';
|
|
8
|
+
export * from './events/event-handler.interface.js';
|
|
9
|
+
export * from './events/event-publisher.interface.js';
|
|
10
|
+
export * from './events/event.interface.js';
|
|
11
|
+
export * from './events/message-source.interface.js';
|
|
12
|
+
export * from './events/event-id-provider.interface.js';
|
|
13
|
+
export * from './exceptions/unhandled-exception-info.interface.js';
|
|
14
|
+
export * from './exceptions/unhandled-exception-publisher.interface.js';
|
|
15
|
+
export * from './queries/query-bus.interface.js';
|
|
16
|
+
export * from './queries/query-handler.interface.js';
|
|
17
|
+
export * from './queries/query-publisher.interface.js';
|
|
18
|
+
export * from './queries/query-result.interface.js';
|
|
19
|
+
export * from './queries/query.interface.js';
|
|
20
|
+
export * from './saga.type.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
|
|
2
|
-
import { ICommandHandler } from './commands/command-handler.interface';
|
|
3
|
-
import { IEventHandler } from './events/event-handler.interface';
|
|
4
|
-
import { IQueryHandler } from './queries/query-handler.interface';
|
|
1
|
+
import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper.js';
|
|
2
|
+
import { ICommandHandler } from './commands/command-handler.interface.js';
|
|
3
|
+
import { IEventHandler } from './events/event-handler.interface.js';
|
|
4
|
+
import { IQueryHandler } from './queries/query-handler.interface.js';
|
|
5
5
|
export interface ProvidersIntrospectionResult {
|
|
6
6
|
events?: InstanceWrapper<IEventHandler>[];
|
|
7
7
|
queries?: InstanceWrapper<IQueryHandler>[];
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { Query } from '../../classes/query';
|
|
2
|
-
import { AsyncContext } from '../../scopes/async.context';
|
|
3
|
-
import { IQuery } from './query.interface';
|
|
1
|
+
import { Query } from '../../classes/query.js';
|
|
2
|
+
import { AsyncContext } from '../../scopes/async.context.js';
|
|
3
|
+
import { IQuery } from './query.interface.js';
|
|
4
4
|
/**
|
|
5
5
|
* Represents a query bus.
|
|
6
|
+
*
|
|
7
|
+
* @publicApi
|
|
6
8
|
*/
|
|
7
9
|
export interface IQueryBus<QueryBase extends IQuery = IQuery> {
|
|
8
10
|
/**
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { Query } from '../../classes';
|
|
2
|
-
import { IQuery } from './query.interface';
|
|
1
|
+
import { Query } from '../../classes/index.js';
|
|
2
|
+
import { IQuery } from './query.interface.js';
|
|
3
3
|
/**
|
|
4
4
|
* Represents a query handler.
|
|
5
|
+
*
|
|
6
|
+
* @publicApi
|
|
5
7
|
*/
|
|
6
8
|
export type IQueryHandler<T extends IQuery = any, TRes = any> = T extends Query<infer InferredQueryResult> ? {
|
|
7
9
|
/**
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import { IQuery } from './query.interface';
|
|
1
|
+
import { IQuery } from './query.interface.js';
|
|
2
|
+
/**
|
|
3
|
+
* Represents a query publisher.
|
|
4
|
+
*
|
|
5
|
+
* @publicApi
|
|
6
|
+
*/
|
|
2
7
|
export interface IQueryPublisher<QueryBase extends IQuery = IQuery> {
|
|
3
8
|
publish<T extends QueryBase = QueryBase>(query: T): any;
|
|
4
9
|
}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
|
-
import { ICommand } from './commands/command.interface';
|
|
3
|
-
import { IEvent } from './events/event.interface';
|
|
2
|
+
import { ICommand } from './commands/command.interface.js';
|
|
3
|
+
import { IEvent } from './events/event.interface.js';
|
|
4
4
|
export type ISaga<EventBase extends IEvent = IEvent, CommandBase extends ICommand = ICommand> = (events$: Observable<EventBase>) => Observable<CommandBase>;
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './with-aggregate-root.mixin.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './with-aggregate-root.mixin.js';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IEvent, IAggregateRoot } from '../interfaces/index.js';
|
|
2
|
+
export type AbstractConstructor<T = {}> = abstract new (...args: any[]) => T;
|
|
3
|
+
/**
|
|
4
|
+
* Adds the Aggregate Root functionality to a base class.
|
|
5
|
+
* An aggregate root is an entity that represents a meaningful concept in the domain.
|
|
6
|
+
* It is the root of an aggregate, which is a cluster of domain objects that can be treated as a single unit.
|
|
7
|
+
*
|
|
8
|
+
* @template EventBase The base type of the events.
|
|
9
|
+
* @template TBase The base class type.
|
|
10
|
+
*/
|
|
11
|
+
export declare function WithAggregateRoot<EventBase extends IEvent = IEvent, TBase extends AbstractConstructor = AbstractConstructor>(Base: TBase): abstract new <T extends IEvent = EventBase>(...args: any[]) => IAggregateRoot<T> & InstanceType<TBase>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
const INTERNAL_EVENTS = Symbol();
|
|
2
|
+
const IS_AUTO_COMMIT_ENABLED = Symbol();
|
|
3
|
+
/**
|
|
4
|
+
* Adds the Aggregate Root functionality to a base class.
|
|
5
|
+
* An aggregate root is an entity that represents a meaningful concept in the domain.
|
|
6
|
+
* It is the root of an aggregate, which is a cluster of domain objects that can be treated as a single unit.
|
|
7
|
+
*
|
|
8
|
+
* @template EventBase The base type of the events.
|
|
9
|
+
* @template TBase The base class type.
|
|
10
|
+
*/
|
|
11
|
+
export function WithAggregateRoot(Base) {
|
|
12
|
+
var _a, _b;
|
|
13
|
+
class AggregateRoot extends Base {
|
|
14
|
+
constructor() {
|
|
15
|
+
super(...arguments);
|
|
16
|
+
this[_a] = false;
|
|
17
|
+
this[_b] = [];
|
|
18
|
+
}
|
|
19
|
+
set autoCommit(value) {
|
|
20
|
+
this[IS_AUTO_COMMIT_ENABLED] = value;
|
|
21
|
+
}
|
|
22
|
+
get autoCommit() {
|
|
23
|
+
return this[IS_AUTO_COMMIT_ENABLED];
|
|
24
|
+
}
|
|
25
|
+
publish(event) { }
|
|
26
|
+
publishAll(events) { }
|
|
27
|
+
commit() {
|
|
28
|
+
this.publishAll(this[INTERNAL_EVENTS]);
|
|
29
|
+
this[INTERNAL_EVENTS].length = 0;
|
|
30
|
+
}
|
|
31
|
+
uncommit() {
|
|
32
|
+
this[INTERNAL_EVENTS].length = 0;
|
|
33
|
+
}
|
|
34
|
+
getUncommittedEvents() {
|
|
35
|
+
return this[INTERNAL_EVENTS];
|
|
36
|
+
}
|
|
37
|
+
loadFromHistory(history) {
|
|
38
|
+
history.forEach((event) => this.apply(event, true));
|
|
39
|
+
}
|
|
40
|
+
apply(event, optionsOrIsFromHistory = {}) {
|
|
41
|
+
const isFromHistory = (typeof optionsOrIsFromHistory === 'boolean'
|
|
42
|
+
? optionsOrIsFromHistory
|
|
43
|
+
: optionsOrIsFromHistory.fromHistory) ?? false;
|
|
44
|
+
const skipHandler = typeof optionsOrIsFromHistory === 'boolean'
|
|
45
|
+
? false
|
|
46
|
+
: optionsOrIsFromHistory.skipHandler;
|
|
47
|
+
if (!isFromHistory && !this.autoCommit) {
|
|
48
|
+
this[INTERNAL_EVENTS].push(event);
|
|
49
|
+
}
|
|
50
|
+
this.autoCommit && this.publish(event);
|
|
51
|
+
if (!skipHandler) {
|
|
52
|
+
const handler = this.getEventHandler(event);
|
|
53
|
+
handler && handler.call(this, event);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
getEventHandler(event) {
|
|
57
|
+
const handler = `on${this.getEventName(event)}`;
|
|
58
|
+
return this[handler];
|
|
59
|
+
}
|
|
60
|
+
getEventName(event) {
|
|
61
|
+
const { constructor } = Object.getPrototypeOf(event);
|
|
62
|
+
return constructor.name;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
_a = IS_AUTO_COMMIT_ENABLED, _b = INTERNAL_EVENTS;
|
|
66
|
+
return AggregateRoot;
|
|
67
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './of-type';
|
|
1
|
+
export * from './of-type.js';
|
package/dist/operators/index.js
CHANGED
|
@@ -1,17 +1 @@
|
|
|
1
|
-
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./of-type"), exports);
|
|
1
|
+
export * from './of-type.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Type } from '@nestjs/common';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
|
-
import { IEvent } from '../interfaces';
|
|
3
|
+
import { IEvent } from '../interfaces/index.js';
|
|
4
4
|
/**
|
|
5
5
|
* Filter values depending on their instance type (comparison is made
|
|
6
6
|
* using native `instanceof`).
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ofType = ofType;
|
|
4
|
-
const operators_1 = require("rxjs/operators");
|
|
1
|
+
import { filter } from 'rxjs/operators';
|
|
5
2
|
/**
|
|
6
3
|
* Filter values depending on their instance type (comparison is made
|
|
7
4
|
* using native `instanceof`).
|
|
@@ -10,7 +7,7 @@ const operators_1 = require("rxjs/operators");
|
|
|
10
7
|
*
|
|
11
8
|
* @return A stream only emitting the filtered instances.
|
|
12
9
|
*/
|
|
13
|
-
function ofType(...types) {
|
|
10
|
+
export function ofType(...types) {
|
|
14
11
|
const isInstanceOf = (event) => !!types.find((classType) => event instanceof classType);
|
|
15
|
-
return (source) => source.pipe(
|
|
12
|
+
return (source) => source.pipe(filter(isInstanceOf));
|
|
16
13
|
}
|
package/dist/query-bus.d.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { Type } from '@nestjs/common';
|
|
2
2
|
import { ModuleRef } from '@nestjs/core';
|
|
3
|
-
import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
|
|
3
|
+
import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper.js';
|
|
4
4
|
import 'reflect-metadata';
|
|
5
|
-
import { Query } from './classes/query';
|
|
6
|
-
import { CqrsModuleOptions, IQuery, IQueryBus, IQueryHandler, IQueryPublisher, IQueryResult } from './interfaces';
|
|
7
|
-
import { AsyncContext } from './scopes';
|
|
8
|
-
import { ObservableBus } from './utils/observable-bus';
|
|
5
|
+
import { Query } from './classes/query.js';
|
|
6
|
+
import { CqrsModuleOptions, IQuery, IQueryBus, IQueryHandler, IQueryPublisher, IQueryResult } from './interfaces/index.js';
|
|
7
|
+
import { AsyncContext } from './scopes/index.js';
|
|
8
|
+
import { ObservableBus } from './utils/observable-bus.js';
|
|
9
9
|
export type QueryHandlerType<QueryBase extends IQuery = IQuery, QueryResultBase extends IQueryResult = IQueryResult> = Type<IQueryHandler<QueryBase, QueryResultBase>>;
|
|
10
|
+
/**
|
|
11
|
+
* @publicApi
|
|
12
|
+
*/
|
|
10
13
|
export declare class QueryBus<QueryBase extends IQuery = IQuery> extends ObservableBus<QueryBase> implements IQueryBus<QueryBase> {
|
|
11
14
|
private readonly moduleRef;
|
|
12
15
|
private readonly options?;
|
package/dist/query-bus.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -12,24 +11,25 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
12
|
};
|
|
14
13
|
var QueryBus_1;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
14
|
+
import { Inject, Injectable, Logger, Optional } from '@nestjs/common';
|
|
15
|
+
import { ModuleRef } from '@nestjs/core';
|
|
16
|
+
import 'reflect-metadata';
|
|
17
|
+
import { CQRS_MODULE_OPTIONS } from './constants.js';
|
|
18
|
+
import { QUERY_HANDLER_METADATA, QUERY_METADATA, } from './decorators/constants.js';
|
|
19
|
+
import { QueryHandlerNotFoundException } from './exceptions/index.js';
|
|
20
|
+
import { InvalidQueryHandlerException } from './exceptions/invalid-query-handler.exception.js';
|
|
21
|
+
import { DefaultQueryPubSub } from './helpers/default-query-pubsub.js';
|
|
22
|
+
import { AsyncContext } from './scopes/index.js';
|
|
23
|
+
import { ObservableBus } from './utils/observable-bus.js';
|
|
24
|
+
/**
|
|
25
|
+
* @publicApi
|
|
26
|
+
*/
|
|
27
|
+
let QueryBus = QueryBus_1 = class QueryBus extends ObservableBus {
|
|
28
28
|
constructor(moduleRef, options) {
|
|
29
29
|
super();
|
|
30
30
|
this.moduleRef = moduleRef;
|
|
31
31
|
this.options = options;
|
|
32
|
-
this.logger = new
|
|
32
|
+
this.logger = new Logger(QueryBus_1.name);
|
|
33
33
|
this.handlers = new Map();
|
|
34
34
|
if (this.options?.queryPublisher) {
|
|
35
35
|
this._publisher = this.options.queryPublisher;
|
|
@@ -61,7 +61,7 @@ let QueryBus = QueryBus_1 = class QueryBus extends observable_bus_1.ObservableBu
|
|
|
61
61
|
const handler = this.handlers.get(queryId);
|
|
62
62
|
if (!handler) {
|
|
63
63
|
const queryName = this.getQueryName(query);
|
|
64
|
-
throw new
|
|
64
|
+
throw new QueryHandlerNotFoundException(queryName);
|
|
65
65
|
}
|
|
66
66
|
this._publisher.publish(query);
|
|
67
67
|
return (await handler(query, asyncContext));
|
|
@@ -70,13 +70,13 @@ let QueryBus = QueryBus_1 = class QueryBus extends observable_bus_1.ObservableBu
|
|
|
70
70
|
if (handler.isDependencyTreeStatic()) {
|
|
71
71
|
const instance = handler.instance;
|
|
72
72
|
if (!instance.execute) {
|
|
73
|
-
throw new
|
|
73
|
+
throw new InvalidQueryHandlerException();
|
|
74
74
|
}
|
|
75
75
|
this.handlers.set(queryId, (query) => instance.execute(query));
|
|
76
76
|
return;
|
|
77
77
|
}
|
|
78
78
|
this.handlers.set(queryId, async (query, context) => {
|
|
79
|
-
context ??=
|
|
79
|
+
context ??= AsyncContext.of(query) ?? new AsyncContext();
|
|
80
80
|
this.moduleRef.registerRequestByContextId(context, context.id);
|
|
81
81
|
const instance = await this.moduleRef.resolve(handler.metatype, context.id, {
|
|
82
82
|
strict: false,
|
|
@@ -88,10 +88,10 @@ let QueryBus = QueryBus_1 = class QueryBus extends observable_bus_1.ObservableBu
|
|
|
88
88
|
handlers.forEach((handler) => this.registerHandler(handler));
|
|
89
89
|
}
|
|
90
90
|
registerHandler(handler) {
|
|
91
|
-
const typeRef = handler.metatype;
|
|
91
|
+
const typeRef = (handler.inject ? handler.instance?.constructor : handler.metatype);
|
|
92
92
|
const target = this.reflectQueryId(typeRef);
|
|
93
93
|
if (!target) {
|
|
94
|
-
throw new
|
|
94
|
+
throw new InvalidQueryHandlerException();
|
|
95
95
|
}
|
|
96
96
|
if (this.handlers.has(target)) {
|
|
97
97
|
this.logger.warn(`Query handler [${typeRef.name}] is already registered. Overriding previously registered handler.`);
|
|
@@ -100,29 +100,29 @@ let QueryBus = QueryBus_1 = class QueryBus extends observable_bus_1.ObservableBu
|
|
|
100
100
|
}
|
|
101
101
|
getQueryId(query) {
|
|
102
102
|
const { constructor: queryType } = Object.getPrototypeOf(query);
|
|
103
|
-
const queryMetadata = Reflect.getMetadata(
|
|
103
|
+
const queryMetadata = Reflect.getMetadata(QUERY_METADATA, queryType);
|
|
104
104
|
if (!queryMetadata) {
|
|
105
|
-
throw new
|
|
105
|
+
throw new QueryHandlerNotFoundException(queryType.name);
|
|
106
106
|
}
|
|
107
107
|
return queryMetadata.id;
|
|
108
108
|
}
|
|
109
109
|
reflectQueryId(handler) {
|
|
110
|
-
const query = Reflect.getMetadata(
|
|
111
|
-
const queryMetadata = Reflect.getMetadata(
|
|
110
|
+
const query = Reflect.getMetadata(QUERY_HANDLER_METADATA, handler);
|
|
111
|
+
const queryMetadata = Reflect.getMetadata(QUERY_METADATA, query);
|
|
112
112
|
return queryMetadata.id;
|
|
113
113
|
}
|
|
114
114
|
useDefaultPublisher() {
|
|
115
|
-
this._publisher = new
|
|
115
|
+
this._publisher = new DefaultQueryPubSub(this.subject$);
|
|
116
116
|
}
|
|
117
117
|
getQueryName(query) {
|
|
118
118
|
const { constructor } = Object.getPrototypeOf(query);
|
|
119
119
|
return constructor.name;
|
|
120
120
|
}
|
|
121
121
|
};
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
(
|
|
125
|
-
__param(1, (
|
|
126
|
-
|
|
127
|
-
__metadata("design:paramtypes", [core_1.ModuleRef, Object])
|
|
122
|
+
QueryBus = QueryBus_1 = __decorate([
|
|
123
|
+
Injectable(),
|
|
124
|
+
__param(1, Optional()),
|
|
125
|
+
__param(1, Inject(CQRS_MODULE_OPTIONS)),
|
|
126
|
+
__metadata("design:paramtypes", [ModuleRef, Object])
|
|
128
127
|
], QueryBus);
|
|
128
|
+
export { QueryBus };
|
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.AsyncContext = exports.ASYNC_CONTEXT_ATTRIBUTE = void 0;
|
|
4
|
-
const core_1 = require("@nestjs/core");
|
|
5
|
-
exports.ASYNC_CONTEXT_ATTRIBUTE = Symbol('ASYNC_CONTEXT_ATTRIBUTE');
|
|
1
|
+
import { ContextIdFactory } from '@nestjs/core';
|
|
2
|
+
export const ASYNC_CONTEXT_ATTRIBUTE = Symbol('ASYNC_CONTEXT_ATTRIBUTE');
|
|
6
3
|
/**
|
|
7
4
|
* Represents the context of an asynchronous operation.
|
|
8
5
|
*/
|
|
9
|
-
class AsyncContext {
|
|
6
|
+
export class AsyncContext {
|
|
10
7
|
constructor() {
|
|
11
|
-
this.id =
|
|
8
|
+
this.id = ContextIdFactory.create();
|
|
12
9
|
}
|
|
13
10
|
/**
|
|
14
11
|
* Attaches the context to an object.
|
|
15
12
|
* @param target The object to attach the context to.
|
|
16
13
|
*/
|
|
17
14
|
attachTo(target) {
|
|
18
|
-
Object.defineProperty(target,
|
|
15
|
+
Object.defineProperty(target, ASYNC_CONTEXT_ATTRIBUTE, {
|
|
19
16
|
value: this,
|
|
20
17
|
enumerable: false,
|
|
21
18
|
});
|
|
@@ -26,7 +23,7 @@ class AsyncContext {
|
|
|
26
23
|
* @returns "true" if the target is attached to an async context, "false" otherwise.
|
|
27
24
|
*/
|
|
28
25
|
static isAttached(target) {
|
|
29
|
-
return !!target[
|
|
26
|
+
return !!target[ASYNC_CONTEXT_ATTRIBUTE];
|
|
30
27
|
}
|
|
31
28
|
/**
|
|
32
29
|
* Merges the context of an asynchronous operation from a given command, query, or event to another object.
|
|
@@ -37,11 +34,11 @@ class AsyncContext {
|
|
|
37
34
|
if (!from || !to) {
|
|
38
35
|
return;
|
|
39
36
|
}
|
|
40
|
-
const fromContext = from[
|
|
37
|
+
const fromContext = from[ASYNC_CONTEXT_ATTRIBUTE];
|
|
41
38
|
if (!fromContext) {
|
|
42
39
|
return;
|
|
43
40
|
}
|
|
44
|
-
Object.defineProperty(to,
|
|
41
|
+
Object.defineProperty(to, ASYNC_CONTEXT_ATTRIBUTE, {
|
|
45
42
|
value: fromContext,
|
|
46
43
|
enumerable: false,
|
|
47
44
|
});
|
|
@@ -52,7 +49,6 @@ class AsyncContext {
|
|
|
52
49
|
* @returns An "AsyncContext" instance or "undefined" if the context is not found.
|
|
53
50
|
*/
|
|
54
51
|
static of(target) {
|
|
55
|
-
return target[
|
|
52
|
+
return target[ASYNC_CONTEXT_ATTRIBUTE];
|
|
56
53
|
}
|
|
57
54
|
}
|
|
58
|
-
exports.AsyncContext = AsyncContext;
|
package/dist/scopes/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './async.context';
|
|
1
|
+
export * from './async.context.js';
|
package/dist/scopes/index.js
CHANGED
|
@@ -1,17 +1 @@
|
|
|
1
|
-
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./async.context"), exports);
|
|
1
|
+
export * from './async.context.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
|
|
2
|
-
import { Module } from '@nestjs/core/injector/module';
|
|
3
|
-
import { ModulesContainer } from '@nestjs/core/injector/modules-container';
|
|
4
|
-
import { IEvent } from '../interfaces';
|
|
5
|
-
import { ProvidersIntrospectionResult } from '../interfaces/providers-introspection-result.interface';
|
|
1
|
+
import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper.js';
|
|
2
|
+
import { Module } from '@nestjs/core/injector/module.js';
|
|
3
|
+
import { ModulesContainer } from '@nestjs/core/injector/modules-container.js';
|
|
4
|
+
import { IEvent } from '../interfaces/index.js';
|
|
5
|
+
import { ProvidersIntrospectionResult } from '../interfaces/providers-introspection-result.interface.js';
|
|
6
6
|
export declare class ExplorerService<EventBase extends IEvent = IEvent> {
|
|
7
7
|
private readonly modulesContainer;
|
|
8
8
|
constructor(modulesContainer: ModulesContainer);
|