@nestjs/cqrs 11.0.3 → 12.1.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/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 +5 -5
- package/dist/command-bus.js +29 -32
- package/dist/constants.js +1 -4
- package/dist/cqrs.module.d.ts +5 -5
- package/dist/cqrs.module.js +34 -37
- package/dist/decorators/command-handler.decorator.d.ts +1 -1
- package/dist/decorators/command-handler.decorator.js +9 -13
- package/dist/decorators/constants.js +7 -10
- package/dist/decorators/events-handler.decorator.d.ts +1 -1
- package/dist/decorators/events-handler.decorator.js +9 -13
- package/dist/decorators/index.d.ts +5 -5
- package/dist/decorators/index.js +5 -21
- package/dist/decorators/publishable.decorator.js +3 -6
- package/dist/decorators/query-handler.decorator.d.ts +1 -1
- package/dist/decorators/query-handler.decorator.js +9 -13
- package/dist/decorators/saga.decorator.js +5 -9
- package/dist/event-bus.d.ts +10 -8
- package/dist/event-bus.js +52 -52
- package/dist/event-publisher.d.ts +8 -7
- package/dist/event-publisher.js +17 -18
- package/dist/exceptions/command-not-found.exception.js +1 -5
- package/dist/exceptions/index.d.ts +7 -7
- package/dist/exceptions/index.js +7 -23
- package/dist/exceptions/invalid-command-handler.exception.js +1 -5
- package/dist/exceptions/invalid-events-handler.exception.js +1 -5
- package/dist/exceptions/invalid-query-handler.exception.js +1 -5
- package/dist/exceptions/invalid-saga.exception.js +1 -5
- package/dist/exceptions/query-not-found.exception.js +1 -5
- package/dist/exceptions/unsupported-saga-scope.exception.js +1 -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 +63 -0
- package/dist/interfaces/aggregate-root.interface.js +1 -0
- package/dist/interfaces/commands/command-bus.interface.d.ts +3 -3
- package/dist/interfaces/commands/command-bus.interface.js +1 -2
- package/dist/interfaces/commands/command-handler.interface.d.ts +2 -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 +1 -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 +5 -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 +3 -3
- package/dist/interfaces/queries/query-bus.interface.js +1 -2
- package/dist/interfaces/queries/query-handler.interface.d.ts +2 -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 +1 -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 +75 -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 +5 -5
- package/dist/query-bus.js +28 -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 +9 -9
- 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 +34 -26
- package/test/e2e/aggregate-commit-context.spec.ts +243 -0
- 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 +55 -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
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { Test, TestingModule } from '@nestjs/testing';
|
|
2
|
+
import { MockInstance, vi } from 'vitest';
|
|
3
|
+
import { AsyncHandlersAppModule } from '../src/sync-event-handlers/async-handlers-app.module.js';
|
|
4
|
+
import { EventBus } from '../../src/event-bus.js';
|
|
5
|
+
import { HeroKilledDragon2SlowHandler } from '../src/sync-event-handlers/events/handlers/hero-killed-dragon2-slow.handler.js';
|
|
6
|
+
import { HeroKilledDragonSlowHandler } from '../src/sync-event-handlers/events/handlers/hero-killed-dragon-slow.handler.js';
|
|
7
|
+
import { HeroFoundItemSlowHandler } from '../src/sync-event-handlers/events/handlers/hero-found-item-slow.handler.js';
|
|
8
|
+
import { SyncHandlersAppModule } from '../src/sync-event-handlers/sync-handlers-app.module.js';
|
|
9
|
+
import { HeroFoundItemEvent } from '../src/heroes/events/impl/hero-found-item.event.js';
|
|
10
|
+
import { HeroKilledDragonEvent } from '../src/heroes/events/impl/hero-killed-dragon.event.js';
|
|
11
|
+
|
|
12
|
+
describe('Sync event handlers', () => {
|
|
13
|
+
let moduleRef: TestingModule;
|
|
14
|
+
let eventBus: EventBus;
|
|
15
|
+
let heroFoundItemHandler: HeroFoundItemSlowHandler;
|
|
16
|
+
let heroFoundItemEnded: MockInstance;
|
|
17
|
+
let heroKilledDragonHandler: HeroKilledDragonSlowHandler;
|
|
18
|
+
let heroKilledDragonEnded: MockInstance;
|
|
19
|
+
let heroKilledDragon2Handler: HeroKilledDragon2SlowHandler;
|
|
20
|
+
let heroKilledDragon2Ended: MockInstance;
|
|
21
|
+
|
|
22
|
+
beforeEach(() => {
|
|
23
|
+
heroFoundItemEnded.mockClear();
|
|
24
|
+
heroKilledDragonEnded.mockClear();
|
|
25
|
+
heroKilledDragon2Ended.mockClear();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
describe('when event handlers are fully asynchronous', () => {
|
|
29
|
+
beforeAll(async () => {
|
|
30
|
+
moduleRef = await Test.createTestingModule({
|
|
31
|
+
imports: [AsyncHandlersAppModule],
|
|
32
|
+
}).compile();
|
|
33
|
+
|
|
34
|
+
await moduleRef.init();
|
|
35
|
+
eventBus = moduleRef.get(EventBus);
|
|
36
|
+
heroFoundItemHandler = moduleRef.get(HeroFoundItemSlowHandler);
|
|
37
|
+
heroKilledDragonHandler = moduleRef.get(HeroKilledDragonSlowHandler);
|
|
38
|
+
heroKilledDragon2Handler = moduleRef.get(HeroKilledDragon2SlowHandler);
|
|
39
|
+
heroFoundItemEnded = vi.spyOn(heroFoundItemHandler, 'end');
|
|
40
|
+
heroKilledDragonEnded = vi.spyOn(heroKilledDragonHandler, 'end');
|
|
41
|
+
heroKilledDragon2Ended = vi.spyOn(heroKilledDragon2Handler, 'end');
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
describe('when "HeroFoundItemEvent" event is published', () => {
|
|
45
|
+
it('should wait for the event handlers to complete', async () => {
|
|
46
|
+
const event = new HeroFoundItemEvent('hero1', 'item1');
|
|
47
|
+
|
|
48
|
+
await eventBus.publish(event);
|
|
49
|
+
|
|
50
|
+
expect(heroFoundItemEnded).not.toHaveBeenCalled();
|
|
51
|
+
expect(heroKilledDragonEnded).not.toHaveBeenCalled();
|
|
52
|
+
expect(heroKilledDragon2Ended).not.toHaveBeenCalled();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
describe('when "HeroKilledDragonEvent" event is published', () => {
|
|
57
|
+
it('should wait for the event handlers to complete', async () => {
|
|
58
|
+
const event = new HeroKilledDragonEvent('hero1', 'dragon1');
|
|
59
|
+
|
|
60
|
+
await eventBus.publish(event);
|
|
61
|
+
|
|
62
|
+
expect(heroFoundItemEnded).not.toHaveBeenCalled();
|
|
63
|
+
expect(heroKilledDragonEnded).not.toHaveBeenCalled();
|
|
64
|
+
expect(heroKilledDragon2Ended).not.toHaveBeenCalled();
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
describe('when event handlers are synchronous', () => {
|
|
70
|
+
beforeAll(async () => {
|
|
71
|
+
moduleRef = await Test.createTestingModule({
|
|
72
|
+
imports: [SyncHandlersAppModule],
|
|
73
|
+
}).compile();
|
|
74
|
+
|
|
75
|
+
await moduleRef.init();
|
|
76
|
+
eventBus = moduleRef.get(EventBus);
|
|
77
|
+
heroFoundItemHandler = moduleRef.get(HeroFoundItemSlowHandler);
|
|
78
|
+
heroKilledDragonHandler = moduleRef.get(HeroKilledDragonSlowHandler);
|
|
79
|
+
heroKilledDragon2Handler = moduleRef.get(HeroKilledDragon2SlowHandler);
|
|
80
|
+
heroFoundItemEnded = vi.spyOn(heroFoundItemHandler, 'end');
|
|
81
|
+
heroKilledDragonEnded = vi.spyOn(heroKilledDragonHandler, 'end');
|
|
82
|
+
heroKilledDragon2Ended = vi.spyOn(heroKilledDragon2Handler, 'end');
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
describe('when "HeroFoundItemEvent" event is published', () => {
|
|
86
|
+
it('should wait for the event handlers to complete', async () => {
|
|
87
|
+
const event = new HeroFoundItemEvent('hero1', 'item1');
|
|
88
|
+
|
|
89
|
+
await eventBus.publish(event);
|
|
90
|
+
|
|
91
|
+
expect(heroFoundItemEnded).toHaveBeenCalledTimes(1);
|
|
92
|
+
expect(heroKilledDragonEnded).not.toHaveBeenCalled();
|
|
93
|
+
expect(heroKilledDragon2Ended).not.toHaveBeenCalled();
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
describe('when "HeroKilledDragonEvent" event is published', () => {
|
|
98
|
+
it('should wait for the event handlers to complete', async () => {
|
|
99
|
+
const event = new HeroKilledDragonEvent('hero1', 'dragon1');
|
|
100
|
+
|
|
101
|
+
await eventBus.publish(event);
|
|
102
|
+
|
|
103
|
+
expect(heroFoundItemEnded).not.toHaveBeenCalled();
|
|
104
|
+
expect(heroKilledDragonEnded).toHaveBeenCalledTimes(1);
|
|
105
|
+
expect(heroKilledDragon2Ended).toHaveBeenCalledTimes(1);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
describe('when an unknown event is published', () => {
|
|
110
|
+
it('should return directly', async () => {
|
|
111
|
+
await eventBus.publish({ id: 'unknown event' });
|
|
112
|
+
|
|
113
|
+
expect(heroFoundItemEnded).not.toHaveBeenCalled();
|
|
114
|
+
expect(heroKilledDragonEnded).not.toHaveBeenCalled();
|
|
115
|
+
expect(heroKilledDragon2Ended).not.toHaveBeenCalled();
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
afterAll(async () => {
|
|
121
|
+
await moduleRef.close();
|
|
122
|
+
});
|
|
123
|
+
});
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { Logger } from '@nestjs/common';
|
|
1
2
|
import { Test, TestingModule } from '@nestjs/testing';
|
|
2
3
|
import { take } from 'rxjs';
|
|
3
|
-
import { CommandBus, UnhandledExceptionBus } from '../../src';
|
|
4
|
-
import { AppModule } from '../src/app.module';
|
|
5
|
-
import { UnhandledExceptionCommand } from '../src/errors/commands/unhandled-exception.command';
|
|
6
|
-
import { UnhandledExceptionEvent } from '../src/errors/events/unhandled-exception.event';
|
|
4
|
+
import { CommandBus, UnhandledExceptionBus } from '../../src/index.js';
|
|
5
|
+
import { AppModule } from '../src/app.module.js';
|
|
6
|
+
import { UnhandledExceptionCommand } from '../src/errors/commands/unhandled-exception.command.js';
|
|
7
|
+
import { UnhandledExceptionEvent } from '../src/errors/events/unhandled-exception.event.js';
|
|
7
8
|
|
|
8
9
|
describe('Unhandled exceptions', () => {
|
|
9
10
|
let moduleRef: TestingModule;
|
|
@@ -36,34 +37,68 @@ describe('Unhandled exceptions', () => {
|
|
|
36
37
|
});
|
|
37
38
|
|
|
38
39
|
describe('when exception is thrown from event handler', () => {
|
|
39
|
-
it('should forward exception to UnhandledExceptionBus', (
|
|
40
|
+
it('should forward exception to UnhandledExceptionBus', async () => {
|
|
40
41
|
const command = new UnhandledExceptionCommand('event');
|
|
41
42
|
const commandBus = moduleRef.get(CommandBus);
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
const exceptionPromise = new Promise<void>((resolve, reject) => {
|
|
45
|
+
unhandledExceptionBus.pipe(take(1)).subscribe((exceptionInfo) => {
|
|
46
|
+
try {
|
|
47
|
+
expect(exceptionInfo.exception).toEqual(
|
|
48
|
+
new Error(`Unhandled exception in ${command.failAt}`),
|
|
49
|
+
);
|
|
50
|
+
expect(exceptionInfo.cause).toBeInstanceOf(UnhandledExceptionEvent);
|
|
51
|
+
resolve();
|
|
52
|
+
} catch (err) {
|
|
53
|
+
reject(err);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
commandBus.execute(command).catch((err) => reject(err));
|
|
49
57
|
});
|
|
50
|
-
|
|
58
|
+
|
|
59
|
+
await exceptionPromise;
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('should log the event handler class name', async () => {
|
|
63
|
+
const loggerSpy = vi.spyOn(Logger.prototype, 'error');
|
|
64
|
+
const command = new UnhandledExceptionCommand('event');
|
|
65
|
+
const commandBus = moduleRef.get(CommandBus);
|
|
66
|
+
|
|
67
|
+
const exceptionPromise = new Promise<void>((resolve) => {
|
|
68
|
+
unhandledExceptionBus.pipe(take(1)).subscribe(() => resolve());
|
|
69
|
+
});
|
|
70
|
+
await commandBus.execute(command);
|
|
71
|
+
await exceptionPromise;
|
|
72
|
+
|
|
73
|
+
expect(loggerSpy).toHaveBeenCalledWith(
|
|
74
|
+
'"UnhandledExceptionEventHandler" has thrown an unhandled exception.',
|
|
75
|
+
new Error(`Unhandled exception in ${command.failAt}`),
|
|
76
|
+
);
|
|
77
|
+
loggerSpy.mockRestore();
|
|
51
78
|
});
|
|
52
79
|
});
|
|
53
80
|
|
|
54
81
|
describe('when exception is thrown from saga', () => {
|
|
55
|
-
it('should forward exception to UnhandledExceptionBus', (
|
|
82
|
+
it('should forward exception to UnhandledExceptionBus', async () => {
|
|
56
83
|
const command = new UnhandledExceptionCommand('saga');
|
|
57
84
|
const commandBus = moduleRef.get(CommandBus);
|
|
58
85
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
86
|
+
const exceptionPromise = new Promise<void>((resolve, reject) => {
|
|
87
|
+
unhandledExceptionBus.pipe(take(1)).subscribe((exceptionInfo) => {
|
|
88
|
+
try {
|
|
89
|
+
expect(exceptionInfo.exception).toEqual(
|
|
90
|
+
new Error(`Unhandled exception in ${command.failAt}`),
|
|
91
|
+
);
|
|
92
|
+
expect(exceptionInfo.cause).toEqual('onError');
|
|
93
|
+
resolve();
|
|
94
|
+
} catch (err) {
|
|
95
|
+
reject(err);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
commandBus.execute(command).catch((err) => reject(err));
|
|
65
99
|
});
|
|
66
|
-
|
|
100
|
+
|
|
101
|
+
await exceptionPromise;
|
|
67
102
|
});
|
|
68
103
|
});
|
|
69
104
|
|
package/tsconfig.build.json
CHANGED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { defineConfig } from 'vitest/config';
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
oxc: {
|
|
5
|
+
transform: { decorators: { legacy: true, emitDecoratorMetadata: true } },
|
|
6
|
+
},
|
|
7
|
+
test: {
|
|
8
|
+
globals: true,
|
|
9
|
+
environment: 'node',
|
|
10
|
+
include: ['test/e2e/**/*.spec.ts'],
|
|
11
|
+
fileParallelism: false,
|
|
12
|
+
},
|
|
13
|
+
});
|
package/vitest.config.ts
ADDED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class InvalidModuleRefException extends Error {
|
|
4
|
-
constructor() {
|
|
5
|
-
super(`Invalid ModuleRef exception. Remember to set module reference "setModuleRef()".`);
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
exports.InvalidModuleRefException = InvalidModuleRefException;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { IEvent } from '../interfaces';
|
|
2
|
-
import { Type } from '@nestjs/common';
|
|
3
|
-
/**
|
|
4
|
-
* Null if the published class is not connected to any handler
|
|
5
|
-
* @param event
|
|
6
|
-
* @returns
|
|
7
|
-
*/
|
|
8
|
-
export declare const defaultGetEventId: <EventBase extends IEvent = IEvent>(event: EventBase) => string;
|
|
9
|
-
export declare const defaultReflectEventId: <EventBase extends Type<IEvent> = Type<IEvent>>(event: EventBase) => string;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.defaultReflectEventId = exports.defaultGetEventId = void 0;
|
|
4
|
-
const constants_1 = require("../decorators/constants");
|
|
5
|
-
/**
|
|
6
|
-
* Null if the published class is not connected to any handler
|
|
7
|
-
* @param event
|
|
8
|
-
* @returns
|
|
9
|
-
*/
|
|
10
|
-
const defaultGetEventId = (event) => {
|
|
11
|
-
const { constructor } = Object.getPrototypeOf(event);
|
|
12
|
-
return Reflect.getMetadata(constants_1.EVENT_METADATA, constructor)?.id ?? null;
|
|
13
|
-
};
|
|
14
|
-
exports.defaultGetEventId = defaultGetEventId;
|
|
15
|
-
const defaultReflectEventId = (event) => {
|
|
16
|
-
return Reflect.getMetadata(constants_1.EVENT_METADATA, event).id;
|
|
17
|
-
};
|
|
18
|
-
exports.defaultReflectEventId = defaultReflectEventId;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.defaultGetEventName = void 0;
|
|
4
|
-
const defaultGetEventName = (event) => {
|
|
5
|
-
const { constructor } = Object.getPrototypeOf(event);
|
|
6
|
-
return constructor.name;
|
|
7
|
-
};
|
|
8
|
-
exports.defaultGetEventName = defaultGetEventName;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Type } from '@nestjs/common';
|
|
2
|
-
import { ICommandHandler } from './commands/command-handler.interface';
|
|
3
|
-
import { IEventHandler } from './events/event-handler.interface';
|
|
4
|
-
import { IQueryHandler } from './queries/query-handler.interface';
|
|
5
|
-
export interface CqrsOptions {
|
|
6
|
-
events?: Type<IEventHandler>[];
|
|
7
|
-
queries?: Type<IQueryHandler>[];
|
|
8
|
-
commands?: Type<ICommandHandler>[];
|
|
9
|
-
sagas?: Type<any>[];
|
|
10
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
require("reflect-metadata");
|
|
4
|
-
const constants_1 = require("./constants");
|
|
5
|
-
exports.CommandHandler = (command) => {
|
|
6
|
-
return (target) => {
|
|
7
|
-
Reflect.defineMetadata(constants_1.COMMAND_HANDLER_METADATA, command, target);
|
|
8
|
-
};
|
|
9
|
-
};
|
package/dist/utils/constants.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Subject } from 'rxjs';
|
|
2
|
-
import { IEvent } from '../interfaces';
|
|
3
|
-
import { IEventPublisher } from '../interfaces/events/event-publisher.interface';
|
|
4
|
-
import { IMessageSource } from '../interfaces/events/message-source.interface';
|
|
5
|
-
export declare class DefaultPubSub implements IEventPublisher, IMessageSource {
|
|
6
|
-
private subject$;
|
|
7
|
-
publish<T extends IEvent>(event: T): void;
|
|
8
|
-
bridgeEventsTo<T extends IEvent>(subject: Subject<T>): void;
|
|
9
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class DefaultPubSub {
|
|
4
|
-
publish(event) {
|
|
5
|
-
if (!this.subject$) {
|
|
6
|
-
throw new Error('Invalid underlying subject (call bridgeEventsTo())');
|
|
7
|
-
}
|
|
8
|
-
this.subject$.next(event);
|
|
9
|
-
}
|
|
10
|
-
bridgeEventsTo(subject) {
|
|
11
|
-
this.subject$ = subject;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
exports.DefaultPubSub = DefaultPubSub;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
require("reflect-metadata");
|
|
4
|
-
const constants_1 = require("./constants");
|
|
5
|
-
exports.EventsHandler = (...events) => {
|
|
6
|
-
return (target) => {
|
|
7
|
-
Reflect.defineMetadata(constants_1.EVENTS_HANDLER_METADATA, events, target);
|
|
8
|
-
};
|
|
9
|
-
};
|
package/eslint.config.mjs
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
// @ts-check
|
|
2
|
-
import eslint from '@eslint/js';
|
|
3
|
-
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
|
|
4
|
-
import globals from 'globals';
|
|
5
|
-
import tseslint from 'typescript-eslint';
|
|
6
|
-
|
|
7
|
-
export default tseslint.config(
|
|
8
|
-
{
|
|
9
|
-
ignores: ['tests/**'],
|
|
10
|
-
},
|
|
11
|
-
eslint.configs.recommended,
|
|
12
|
-
...tseslint.configs.recommendedTypeChecked,
|
|
13
|
-
eslintPluginPrettierRecommended,
|
|
14
|
-
{
|
|
15
|
-
languageOptions: {
|
|
16
|
-
globals: {
|
|
17
|
-
...globals.node,
|
|
18
|
-
...globals.jest,
|
|
19
|
-
},
|
|
20
|
-
ecmaVersion: 5,
|
|
21
|
-
sourceType: 'module',
|
|
22
|
-
parserOptions: {
|
|
23
|
-
projectService: true,
|
|
24
|
-
tsconfigRootDir: import.meta.dirname,
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
rules: {
|
|
30
|
-
'@typescript-eslint/no-explicit-any': 'off',
|
|
31
|
-
'@typescript-eslint/no-unsafe-assignment': 'off',
|
|
32
|
-
'@typescript-eslint/no-unsafe-call': 'off',
|
|
33
|
-
'@typescript-eslint/no-unsafe-member-access': 'off',
|
|
34
|
-
'@typescript-eslint/no-unsafe-function-type': 'off',
|
|
35
|
-
'@typescript-eslint/no-unsafe-argument': 'off',
|
|
36
|
-
'@typescript-eslint/no-unsafe-return': 'off',
|
|
37
|
-
'@typescript-eslint/require-await': 'warn',
|
|
38
|
-
'@typescript-eslint/no-unused-expressions': 'warn',
|
|
39
|
-
'@typescript-eslint/no-empty-object-type': 'off',
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
);
|
package/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './dist';
|
package/index.js
DELETED
package/jest.config.js
DELETED