@message-queue-toolkit/core 17.1.0 → 17.2.1
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.
|
@@ -20,10 +20,12 @@ export declare class DomainEventEmitter<SupportedEvents extends CommonEventDefin
|
|
|
20
20
|
private readonly transactionObservabilityManager?;
|
|
21
21
|
private readonly _handlerSpy?;
|
|
22
22
|
private readonly eventHandlerMap;
|
|
23
|
+
private readonly inProgressBackgroundHandlerByEventId;
|
|
23
24
|
constructor(deps: DomainEventEmitterDependencies<SupportedEvents>, options?: {
|
|
24
25
|
handlerSpy?: HandlerSpy<object> | HandlerSpyParams | boolean;
|
|
25
26
|
});
|
|
26
27
|
get handlerSpy(): PublicHandlerSpy<CommonEventDefinitionPublisherSchemaType<SupportedEvents[number]>>;
|
|
28
|
+
dispose(): Promise<void>;
|
|
27
29
|
emit<SupportedEvent extends SupportedEvents[number]>(supportedEvent: SupportedEvent, data: Omit<CommonEventDefinitionPublisherSchemaType<SupportedEvent>, 'type'>, precedingMessageMetadata?: Partial<ConsumerMessageMetadataType>): Promise<Omit<CommonEventDefinitionConsumerSchemaType<SupportedEvent>, 'type'>>;
|
|
28
30
|
/**
|
|
29
31
|
* Register handler for a specific event
|
|
@@ -12,6 +12,7 @@ class DomainEventEmitter {
|
|
|
12
12
|
transactionObservabilityManager;
|
|
13
13
|
_handlerSpy;
|
|
14
14
|
eventHandlerMap;
|
|
15
|
+
inProgressBackgroundHandlerByEventId;
|
|
15
16
|
constructor(deps, options = {}) {
|
|
16
17
|
this.eventRegistry = deps.eventRegistry;
|
|
17
18
|
this.metadataFiller = deps.metadataFiller;
|
|
@@ -20,7 +21,8 @@ class DomainEventEmitter {
|
|
|
20
21
|
this.transactionObservabilityManager = deps.transactionObservabilityManager;
|
|
21
22
|
this._handlerSpy =
|
|
22
23
|
(0, HandlerSpy_1.resolveHandlerSpy)(options);
|
|
23
|
-
this.eventHandlerMap =
|
|
24
|
+
this.eventHandlerMap = new Map();
|
|
25
|
+
this.inProgressBackgroundHandlerByEventId = new Map();
|
|
24
26
|
}
|
|
25
27
|
get handlerSpy() {
|
|
26
28
|
if (!this._handlerSpy) {
|
|
@@ -28,6 +30,12 @@ class DomainEventEmitter {
|
|
|
28
30
|
}
|
|
29
31
|
return this._handlerSpy;
|
|
30
32
|
}
|
|
33
|
+
async dispose() {
|
|
34
|
+
await Promise.all(this.inProgressBackgroundHandlerByEventId.values());
|
|
35
|
+
this.inProgressBackgroundHandlerByEventId.clear();
|
|
36
|
+
this.eventHandlerMap.clear();
|
|
37
|
+
this._handlerSpy?.clear();
|
|
38
|
+
}
|
|
31
39
|
async emit(supportedEvent, data, precedingMessageMetadata) {
|
|
32
40
|
const eventTypeName = supportedEvent.publisherSchema.shape.type.value;
|
|
33
41
|
if (!this.eventRegistry.isSupportedEvent(eventTypeName)) {
|
|
@@ -50,6 +58,7 @@ class DomainEventEmitter {
|
|
|
50
58
|
const validatedEvent = this.eventRegistry
|
|
51
59
|
.getEventDefinitionByTypeName(eventTypeName)
|
|
52
60
|
.publisherSchema.parse({ type: eventTypeName, ...data });
|
|
61
|
+
// @ts-ignore
|
|
53
62
|
await this.handleEvent(validatedEvent);
|
|
54
63
|
// @ts-ignore
|
|
55
64
|
return validatedEvent;
|
|
@@ -58,13 +67,13 @@ class DomainEventEmitter {
|
|
|
58
67
|
* Register handler for a specific event
|
|
59
68
|
*/
|
|
60
69
|
on(eventTypeName, handler, isBackgroundHandler = false) {
|
|
61
|
-
if (!this.eventHandlerMap
|
|
62
|
-
this.eventHandlerMap
|
|
70
|
+
if (!this.eventHandlerMap.has(eventTypeName)) {
|
|
71
|
+
this.eventHandlerMap.set(eventTypeName, { foreground: [], background: [] });
|
|
63
72
|
}
|
|
64
73
|
if (isBackgroundHandler)
|
|
65
|
-
this.eventHandlerMap
|
|
74
|
+
this.eventHandlerMap.get(eventTypeName)?.background.push(handler);
|
|
66
75
|
else
|
|
67
|
-
this.eventHandlerMap
|
|
76
|
+
this.eventHandlerMap.get(eventTypeName)?.foreground.push(handler);
|
|
68
77
|
}
|
|
69
78
|
/**
|
|
70
79
|
* Register handler for multiple events
|
|
@@ -81,15 +90,14 @@ class DomainEventEmitter {
|
|
|
81
90
|
this.onMany(Array.from(this.eventRegistry.supportedEventTypes), handler, isBackgroundHandler);
|
|
82
91
|
}
|
|
83
92
|
async handleEvent(event) {
|
|
84
|
-
const eventHandlers = this.eventHandlerMap
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
};
|
|
93
|
+
const eventHandlers = this.eventHandlerMap.get(event.type);
|
|
94
|
+
if (!eventHandlers)
|
|
95
|
+
return;
|
|
88
96
|
for (const handler of eventHandlers.foreground) {
|
|
89
97
|
await this.executeEventHandler(event, handler, false);
|
|
90
98
|
}
|
|
91
|
-
const
|
|
92
|
-
|
|
99
|
+
const bgPromise = Promise.all(eventHandlers.background.map((handler) => this.executeEventHandler(event, handler, true))).then(() => {
|
|
100
|
+
this.inProgressBackgroundHandlerByEventId.delete(event.id);
|
|
93
101
|
if (!this._handlerSpy)
|
|
94
102
|
return;
|
|
95
103
|
this._handlerSpy.addProcessedMessage({
|
|
@@ -98,6 +106,7 @@ class DomainEventEmitter {
|
|
|
98
106
|
processingResult: 'consumed',
|
|
99
107
|
}, event.id);
|
|
100
108
|
});
|
|
109
|
+
this.inProgressBackgroundHandlerByEventId.set(event.id, bgPromise);
|
|
101
110
|
}
|
|
102
111
|
async executeEventHandler(event, handler, isBackgroundHandler) {
|
|
103
112
|
const transactionId = (0, node_crypto_1.randomUUID)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DomainEventEmitter.js","sourceRoot":"","sources":["../../../lib/events/DomainEventEmitter.ts"],"names":[],"mappings":";;;AAAA,mDAK4B;AAI5B,qDAAwD;AAExD,6CAAwC;AA2BxC,MAAa,kBAAkB;IACZ,aAAa,CAAgC;IAC7C,cAAc,CAAgB;IAC9B,MAAM,CAAQ;IACd,aAAa,CAAgB;IAC7B,+BAA+B,CAAkC;IACjE,WAAW,CAE3B;IAEgB,eAAe,CAG/B;
|
|
1
|
+
{"version":3,"file":"DomainEventEmitter.js","sourceRoot":"","sources":["../../../lib/events/DomainEventEmitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,20 +30,18 @@ export type DeletionConfig = {
|
|
|
30
30
|
forceDeleteInProduction?: boolean;
|
|
31
31
|
};
|
|
32
32
|
type NewQueueOptions<CreationConfigType extends CommonCreationConfigType> = {
|
|
33
|
-
|
|
34
|
-
creationConfig: CreationConfigType;
|
|
33
|
+
creationConfig?: CreationConfigType;
|
|
35
34
|
};
|
|
36
35
|
type ExistingQueueOptions<QueueLocatorType extends object> = {
|
|
37
|
-
locatorConfig
|
|
38
|
-
creationConfig?: never;
|
|
36
|
+
locatorConfig?: QueueLocatorType;
|
|
39
37
|
};
|
|
40
|
-
export type QueueOptions<CreationConfigType extends CommonCreationConfigType, QueueLocatorType extends object> = CommonQueueOptions & (NewQueueOptions<CreationConfigType>
|
|
38
|
+
export type QueueOptions<CreationConfigType extends CommonCreationConfigType, QueueLocatorType extends object> = CommonQueueOptions & (NewQueueOptions<CreationConfigType> & ExistingQueueOptions<QueueLocatorType>);
|
|
41
39
|
export type QueuePublisherOptions<CreationConfigType extends CommonCreationConfigType, QueueLocatorType extends object, MessagePayloadSchemas extends object> = QueueOptions<CreationConfigType, QueueLocatorType> & {
|
|
42
40
|
messageSchemas: readonly ZodSchema<MessagePayloadSchemas>[];
|
|
43
41
|
};
|
|
44
42
|
export type DeadLetterQueueOptions<CreationConfigType extends object, QueueLocatorType extends object, DeadLetterQueueIntegrationOptions extends object> = {
|
|
45
43
|
deletionConfig?: DeletionConfig;
|
|
46
|
-
} & DeadLetterQueueIntegrationOptions &
|
|
44
|
+
} & DeadLetterQueueIntegrationOptions & NewQueueOptions<CreationConfigType> & ExistingQueueOptions<QueueLocatorType>;
|
|
47
45
|
export type QueueConsumerOptions<CreationConfigType extends object, QueueLocatorType extends object, DeadLetterQueueIntegrationOptions extends object, MessagePayloadSchemas extends object, ExecutionContext, PrehandlerOutput = undefined, DeadLetterQueueCreationConfigType extends object = CreationConfigType, DeadLetterQueueQueueLocatorType extends object = QueueLocatorType> = QueueOptions<CreationConfigType, QueueLocatorType> & {
|
|
48
46
|
handlers: MessageHandlerConfig<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[];
|
|
49
47
|
deadLetterQueue?: DeadLetterQueueOptions<DeadLetterQueueCreationConfigType, DeadLetterQueueQueueLocatorType, DeadLetterQueueIntegrationOptions>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@message-queue-toolkit/core",
|
|
3
|
-
"version": "17.1
|
|
3
|
+
"version": "17.2.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Useful utilities, interfaces and base classes for message queue handling. Supports AMQP and SQS with a common abstraction on top currently",
|
|
@@ -25,25 +25,25 @@
|
|
|
25
25
|
"prepublishOnly": "npm run build:release"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@lokalise/node-core": "^
|
|
28
|
+
"@lokalise/node-core": "^13.0.1",
|
|
29
29
|
"@message-queue-toolkit/schemas": "^4.0.0",
|
|
30
30
|
"fast-equals": "^5.0.1",
|
|
31
|
-
"json-stream-stringify": "^3.1.
|
|
31
|
+
"json-stream-stringify": "^3.1.6",
|
|
32
32
|
"tmp": "^0.2.3",
|
|
33
33
|
"toad-cache": "^3.7.0",
|
|
34
34
|
"zod": "^3.23.8"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@biomejs/biome": "1.
|
|
37
|
+
"@biomejs/biome": "1.9.3",
|
|
38
38
|
"@kibertoad/biome-config": "^1.2.1",
|
|
39
|
-
"@types/node": "^22.
|
|
39
|
+
"@types/node": "^22.7.5",
|
|
40
40
|
"@types/tmp": "^0.2.6",
|
|
41
|
-
"@vitest/coverage-v8": "^2.
|
|
42
|
-
"awilix": "^
|
|
41
|
+
"@vitest/coverage-v8": "^2.1.2",
|
|
42
|
+
"awilix": "^12.0.1",
|
|
43
43
|
"awilix-manager": "^5.4.0",
|
|
44
|
-
"del-cli": "^
|
|
45
|
-
"typescript": "^5.
|
|
46
|
-
"vitest": "^2.
|
|
44
|
+
"del-cli": "^6.0.0",
|
|
45
|
+
"typescript": "^5.6.3",
|
|
46
|
+
"vitest": "^2.1.2"
|
|
47
47
|
},
|
|
48
48
|
"homepage": "https://github.com/kibertoad/message-queue-toolkit",
|
|
49
49
|
"repository": {
|