@nestjs-transactional/outbox 1.1.0 → 2.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/README.md +14 -0
- package/dist/api/completed-event-publications.d.ts +2 -2
- package/dist/api/completed-event-publications.js +6 -9
- package/dist/api/completed-event-publications.js.map +1 -1
- package/dist/api/failed-event-publications.d.ts +3 -3
- package/dist/api/failed-event-publications.js +10 -13
- package/dist/api/failed-event-publications.js.map +1 -1
- package/dist/api/incomplete-event-publications.d.ts +3 -3
- package/dist/api/incomplete-event-publications.js +11 -14
- package/dist/api/incomplete-event-publications.js.map +1 -1
- package/dist/decorators/inject-decorators.js +12 -24
- package/dist/decorators/inject-decorators.js.map +1 -1
- package/dist/decorators/outbox-events-handler.decorator.js +6 -11
- package/dist/decorators/outbox-events-handler.decorator.js.map +1 -1
- package/dist/dispatcher/data-source-outbox-publisher.d.ts +2 -2
- package/dist/dispatcher/data-source-outbox-publisher.js +7 -11
- package/dist/dispatcher/data-source-outbox-publisher.js.map +1 -1
- package/dist/dispatcher/event-publication-processor.d.ts +5 -5
- package/dist/dispatcher/event-publication-processor.js +18 -21
- package/dist/dispatcher/event-publication-processor.js.map +1 -1
- package/dist/dispatcher/outbox-event-publisher.js +16 -19
- package/dist/dispatcher/outbox-event-publisher.js.map +1 -1
- package/dist/dispatcher/processor-options.d.ts +1 -1
- package/dist/dispatcher/processor-options.js +5 -8
- package/dist/dispatcher/processor-options.js.map +1 -1
- package/dist/externalization/describe-thrown.js +1 -4
- package/dist/externalization/describe-thrown.js.map +1 -1
- package/dist/externalization/errors.d.ts +1 -1
- package/dist/externalization/errors.js +2 -6
- package/dist/externalization/errors.js.map +1 -1
- package/dist/externalization/event-externalizer.d.ts +1 -1
- package/dist/externalization/event-externalizer.js +1 -4
- package/dist/externalization/event-externalizer.js.map +1 -1
- package/dist/externalization/externalization-registry.d.ts +3 -3
- package/dist/externalization/externalization-registry.js +10 -13
- package/dist/externalization/externalization-registry.js.map +1 -1
- package/dist/externalization/externalized.decorator.js +6 -11
- package/dist/externalization/externalized.decorator.js.map +1 -1
- package/dist/externalization/types.js +1 -2
- package/dist/index.d.ts +43 -43
- package/dist/index.js +39 -65
- package/dist/index.js.map +1 -1
- package/dist/interfaces/outbox-event-handler.interface.js +1 -2
- package/dist/module/outbox-processing.module.d.ts +1 -1
- package/dist/module/outbox-processing.module.js +6 -9
- package/dist/module/outbox-processing.module.js.map +1 -1
- package/dist/module/outbox.module.d.ts +10 -10
- package/dist/module/outbox.module.js +145 -148
- package/dist/module/outbox.module.js.map +1 -1
- package/dist/recovery/outbox-cleanup-scheduler.d.ts +2 -2
- package/dist/recovery/outbox-cleanup-scheduler.js +7 -10
- package/dist/recovery/outbox-cleanup-scheduler.js.map +1 -1
- package/dist/recovery/outbox-retry-scheduler.d.ts +2 -2
- package/dist/recovery/outbox-retry-scheduler.js +11 -14
- package/dist/recovery/outbox-retry-scheduler.js.map +1 -1
- package/dist/recovery/staleness-monitor.d.ts +2 -2
- package/dist/recovery/staleness-monitor.js +14 -17
- package/dist/recovery/staleness-monitor.js.map +1 -1
- package/dist/recovery/startup-recovery.d.ts +1 -1
- package/dist/recovery/startup-recovery.js +11 -14
- package/dist/recovery/startup-recovery.js.map +1 -1
- package/dist/registry/event-publication-registry.d.ts +4 -4
- package/dist/registry/event-publication-registry.js +17 -20
- package/dist/registry/event-publication-registry.js.map +1 -1
- package/dist/registry/listener-registry.js +6 -9
- package/dist/registry/listener-registry.js.map +1 -1
- package/dist/registry/multi-ds-listener-registrar.d.ts +1 -1
- package/dist/registry/multi-ds-listener-registrar.js +15 -18
- package/dist/registry/multi-ds-listener-registrar.js.map +1 -1
- package/dist/registry/outbox-listener-scanner.d.ts +1 -1
- package/dist/registry/outbox-listener-scanner.js +23 -27
- package/dist/registry/outbox-listener-scanner.js.map +1 -1
- package/dist/repository/event-publication-repository.d.ts +2 -2
- package/dist/repository/event-publication-repository.js +1 -4
- package/dist/repository/event-publication-repository.js.map +1 -1
- package/dist/serialization/event-serializer.js +1 -4
- package/dist/serialization/event-serializer.js.map +1 -1
- package/dist/serialization/event-type-registry.js +5 -8
- package/dist/serialization/event-type-registry.js.map +1 -1
- package/dist/serialization/event-type-resolver.d.ts +1 -1
- package/dist/serialization/event-type-resolver.js +4 -7
- package/dist/serialization/event-type-resolver.js.map +1 -1
- package/dist/serialization/json-event-serializer.d.ts +2 -2
- package/dist/serialization/json-event-serializer.js +10 -13
- package/dist/serialization/json-event-serializer.js.map +1 -1
- package/dist/shutdown/drain.js +2 -6
- package/dist/shutdown/drain.js.map +1 -1
- package/dist/testing/assertable-published-events.d.ts +1 -1
- package/dist/testing/assertable-published-events.js +8 -13
- package/dist/testing/assertable-published-events.js.map +1 -1
- package/dist/testing/in-memory-repository.d.ts +3 -3
- package/dist/testing/in-memory-repository.js +22 -25
- package/dist/testing/in-memory-repository.js.map +1 -1
- package/dist/testing/index.d.ts +3 -3
- package/dist/testing/index.js +3 -19
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/published-events.d.ts +3 -3
- package/dist/testing/published-events.js +9 -13
- package/dist/testing/published-events.js.map +1 -1
- package/dist/tokens/index.d.ts +1 -1
- package/dist/tokens/index.js +1 -13
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/token-utils.js +10 -21
- package/dist/tokens/token-utils.js.map +1 -1
- package/dist/types/cleanup-config.js +3 -6
- package/dist/types/cleanup-config.js.map +1 -1
- package/dist/types/completion-mode.js +2 -5
- package/dist/types/completion-mode.js.map +1 -1
- package/dist/types/errors.d.ts +1 -1
- package/dist/types/errors.js +7 -16
- package/dist/types/errors.js.map +1 -1
- package/dist/types/event-publication.d.ts +1 -1
- package/dist/types/event-publication.js +1 -2
- package/dist/types/publication-status.js +2 -5
- package/dist/types/publication-status.js.map +1 -1
- package/dist/types/resubmission-options.d.ts +1 -1
- package/dist/types/resubmission-options.js +1 -5
- package/dist/types/resubmission-options.js.map +1 -1
- package/dist/types/retry-config.js +3 -6
- package/dist/types/retry-config.js.map +1 -1
- package/dist/types/staleness-config.js +3 -6
- package/dist/types/staleness-config.js.map +1 -1
- package/package.json +13 -12
|
@@ -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,13 +11,11 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
12
|
};
|
|
14
13
|
var MultiDsOutboxListenerRegistrar_1;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const event_type_resolver_1 = require("../serialization/event-type-resolver");
|
|
21
|
-
const token_utils_1 = require("../tokens/token-utils");
|
|
14
|
+
import { Inject, Injectable, Logger } from '@nestjs/common';
|
|
15
|
+
import { ModuleRef } from '@nestjs/core';
|
|
16
|
+
import { OUTBOX_DATA_SOURCE_NAMES, } from '../dispatcher/outbox-event-publisher.js';
|
|
17
|
+
import { resolveDataSourceByEventTypeName } from '../serialization/event-type-resolver.js';
|
|
18
|
+
import { getEventTypeRegistryToken, getOutboxListenerRegistryToken, } from '../tokens/token-utils.js';
|
|
22
19
|
/**
|
|
23
20
|
* Cross-package shared DI token for the outbox listener registrar
|
|
24
21
|
* structural port (declared in the cqrs package as
|
|
@@ -37,7 +34,7 @@ const token_utils_1 = require("../tokens/token-utils");
|
|
|
37
34
|
* `OUTBOX_LISTENER_REGISTRAR` from `@nestjs-transactional/cqrs` for
|
|
38
35
|
* source-level clarity.
|
|
39
36
|
*/
|
|
40
|
-
|
|
37
|
+
export const OUTBOX_LISTENER_REGISTRAR_TOKEN = Symbol.for('@nestjs-transactional/cqrs/outbox-listener-registrar');
|
|
41
38
|
/**
|
|
42
39
|
* Multi-dataSource implementation of the cqrs package's
|
|
43
40
|
* `OutboxListenerRegistrar` structural port.
|
|
@@ -69,7 +66,7 @@ exports.OUTBOX_LISTENER_REGISTRAR_TOKEN = Symbol.for('@nestjs-transactional/cqrs
|
|
|
69
66
|
let MultiDsOutboxListenerRegistrar = MultiDsOutboxListenerRegistrar_1 = class MultiDsOutboxListenerRegistrar {
|
|
70
67
|
moduleRef;
|
|
71
68
|
dataSourceNames;
|
|
72
|
-
logger = new
|
|
69
|
+
logger = new Logger(MultiDsOutboxListenerRegistrar_1.name);
|
|
73
70
|
constructor(moduleRef, dataSourceNames) {
|
|
74
71
|
this.moduleRef = moduleRef;
|
|
75
72
|
this.dataSourceNames = dataSourceNames;
|
|
@@ -82,8 +79,8 @@ let MultiDsOutboxListenerRegistrar = MultiDsOutboxListenerRegistrar_1 = class Mu
|
|
|
82
79
|
*/
|
|
83
80
|
register(listener) {
|
|
84
81
|
const eventTypeRegistries = this.collectEventTypeRegistries();
|
|
85
|
-
const dataSource =
|
|
86
|
-
const registry = this.moduleRef.get(
|
|
82
|
+
const dataSource = resolveDataSourceByEventTypeName(listener.eventType, eventTypeRegistries);
|
|
83
|
+
const registry = this.moduleRef.get(getOutboxListenerRegistryToken(dataSource), { strict: false });
|
|
87
84
|
registry.register(listener);
|
|
88
85
|
this.logger.debug(`Routed listener id='${listener.id}' for event '${listener.eventType}' → dataSource '${dataSource}'`);
|
|
89
86
|
}
|
|
@@ -97,16 +94,16 @@ let MultiDsOutboxListenerRegistrar = MultiDsOutboxListenerRegistrar_1 = class Mu
|
|
|
97
94
|
collectEventTypeRegistries() {
|
|
98
95
|
const registries = new Map();
|
|
99
96
|
for (const dataSource of this.dataSourceNames.keys()) {
|
|
100
|
-
const registry = this.moduleRef.get(
|
|
97
|
+
const registry = this.moduleRef.get(getEventTypeRegistryToken(dataSource), { strict: false });
|
|
101
98
|
registries.set(dataSource, registry);
|
|
102
99
|
}
|
|
103
100
|
return registries;
|
|
104
101
|
}
|
|
105
102
|
};
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
(
|
|
109
|
-
|
|
110
|
-
__metadata("design:paramtypes", [core_1.ModuleRef, Object])
|
|
103
|
+
MultiDsOutboxListenerRegistrar = MultiDsOutboxListenerRegistrar_1 = __decorate([
|
|
104
|
+
Injectable(),
|
|
105
|
+
__param(1, Inject(OUTBOX_DATA_SOURCE_NAMES)),
|
|
106
|
+
__metadata("design:paramtypes", [ModuleRef, Object])
|
|
111
107
|
], MultiDsOutboxListenerRegistrar);
|
|
108
|
+
export { MultiDsOutboxListenerRegistrar };
|
|
112
109
|
//# sourceMappingURL=multi-ds-listener-registrar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-ds-listener-registrar.js","sourceRoot":"","sources":["../../src/registry/multi-ds-listener-registrar.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"multi-ds-listener-registrar.js","sourceRoot":"","sources":["../../src/registry/multi-ds-listener-registrar.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EACL,wBAAwB,GAEzB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EAAE,gCAAgC,EAAE,MAAM,yCAAyC,CAAC;AAC3F,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,0BAA0B,CAAC;AAIlC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,MAAM,CAAC,GAAG,CACvD,sDAAsD,CACvD,CAAC;AAgBF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEI,IAAM,8BAA8B,sCAApC,MAAM,8BAA8B;IAItB;IAEA;IALF,MAAM,GAAG,IAAI,MAAM,CAAC,gCAA8B,CAAC,IAAI,CAAC,CAAC;IAE1E,YACmB,SAAoB,EAEpB,eAAsC;QAFtC,cAAS,GAAT,SAAS,CAAW;QAEpB,oBAAe,GAAf,eAAe,CAAuB;IACtD,CAAC;IAEJ;;;;;OAKG;IACH,QAAQ,CAAC,QAAgC;QACvC,MAAM,mBAAmB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAC9D,MAAM,UAAU,GAAG,gCAAgC,CAAC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QAE7F,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CACjC,8BAA8B,CAAC,UAAU,CAAC,EAC1C,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;QACF,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,uBAAuB,QAAQ,CAAC,EAAE,gBAAgB,QAAQ,CAAC,SAAS,mBAAmB,UAAU,GAAG,CACrG,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACK,0BAA0B;QAChC,MAAM,UAAU,GAAG,IAAI,GAAG,EAA6B,CAAC;QACxD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CACjC,yBAAyB,CAAC,UAAU,CAAC,EACrC,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;YACF,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAA;AAhDY,8BAA8B;IAD1C,UAAU,EAAE;IAMR,WAAA,MAAM,CAAC,wBAAwB,CAAC,CAAA;qCADL,SAAS;GAJ5B,8BAA8B,CAgD1C"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type OnModuleInit, type Type } from '@nestjs/common';
|
|
2
2
|
import { DiscoveryService, ModuleRef } from '@nestjs/core';
|
|
3
3
|
import { TransactionManager } from '@nestjs-transactional/core';
|
|
4
|
-
import { type OutboxDataSourceNames } from '../dispatcher/outbox-event-publisher';
|
|
4
|
+
import { type OutboxDataSourceNames } from '../dispatcher/outbox-event-publisher.js';
|
|
5
5
|
/**
|
|
6
6
|
* Bootstrap-time scanner that walks every provider in the running
|
|
7
7
|
* Nest application, finds classes decorated with
|
|
@@ -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,17 +11,14 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
12
|
};
|
|
14
13
|
var OutboxListenerScanner_1;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const event_type_resolver_1 = require("../serialization/event-type-resolver");
|
|
24
|
-
const token_utils_1 = require("../tokens/token-utils");
|
|
25
|
-
const errors_1 = require("../types/errors");
|
|
14
|
+
import { Inject, Injectable, Logger } from '@nestjs/common';
|
|
15
|
+
import { DiscoveryService, ModuleRef } from '@nestjs/core';
|
|
16
|
+
import { PropagationMode, TransactionManager } from '@nestjs-transactional/core';
|
|
17
|
+
import { getOutboxEventsHandlerMetadata } from '../decorators/outbox-events-handler.decorator.js';
|
|
18
|
+
import { OUTBOX_DATA_SOURCE_NAMES, } from '../dispatcher/outbox-event-publisher.js';
|
|
19
|
+
import { resolveDataSourceByEventTypeName } from '../serialization/event-type-resolver.js';
|
|
20
|
+
import { getEventTypeRegistryToken, getOutboxListenerRegistryToken, } from '../tokens/token-utils.js';
|
|
21
|
+
import { OutboxError } from '../types/errors.js';
|
|
26
22
|
/**
|
|
27
23
|
* Bootstrap-time scanner that walks every provider in the running
|
|
28
24
|
* Nest application, finds classes decorated with
|
|
@@ -64,7 +60,7 @@ let OutboxListenerScanner = OutboxListenerScanner_1 = class OutboxListenerScanne
|
|
|
64
60
|
moduleRef;
|
|
65
61
|
dataSourceNames;
|
|
66
62
|
transactionManager;
|
|
67
|
-
logger = new
|
|
63
|
+
logger = new Logger(OutboxListenerScanner_1.name);
|
|
68
64
|
constructor(discovery, moduleRef, dataSourceNames, transactionManager) {
|
|
69
65
|
this.discovery = discovery;
|
|
70
66
|
this.moduleRef = moduleRef;
|
|
@@ -82,7 +78,7 @@ let OutboxListenerScanner = OutboxListenerScanner_1 = class OutboxListenerScanne
|
|
|
82
78
|
wrapper.instance === undefined) {
|
|
83
79
|
continue;
|
|
84
80
|
}
|
|
85
|
-
const metadata =
|
|
81
|
+
const metadata = getOutboxEventsHandlerMetadata(wrapper.metatype);
|
|
86
82
|
if (metadata === undefined) {
|
|
87
83
|
continue;
|
|
88
84
|
}
|
|
@@ -99,7 +95,7 @@ let OutboxListenerScanner = OutboxListenerScanner_1 = class OutboxListenerScanne
|
|
|
99
95
|
// Defensive — every dataSource in `dataSourceNames` is also
|
|
100
96
|
// in `listenerRegistries` because both maps are built from
|
|
101
97
|
// the same Set. Throw rather than silently skip.
|
|
102
|
-
throw new
|
|
98
|
+
throw new OutboxError(`@OutboxEventsHandler on ${className}: no OutboxListenerRegistry registered for ` +
|
|
103
99
|
`dataSource '${dataSource}'. This is a framework bug — please open an issue.`);
|
|
104
100
|
}
|
|
105
101
|
const boundHandle = rawHandle.bind(instance);
|
|
@@ -107,7 +103,7 @@ let OutboxListenerScanner = OutboxListenerScanner_1 = class OutboxListenerScanne
|
|
|
107
103
|
const { newTransaction } = metadata;
|
|
108
104
|
const invoke = async (event) => {
|
|
109
105
|
if (newTransaction) {
|
|
110
|
-
await manager.run({ propagation:
|
|
106
|
+
await manager.run({ propagation: PropagationMode.REQUIRES_NEW }, async () => {
|
|
111
107
|
await boundHandle(event);
|
|
112
108
|
});
|
|
113
109
|
}
|
|
@@ -135,7 +131,7 @@ let OutboxListenerScanner = OutboxListenerScanner_1 = class OutboxListenerScanne
|
|
|
135
131
|
resolveHandlerDataSource(className, eventTypes, eventTypeRegistries) {
|
|
136
132
|
const dataSourcePerEvent = new Map();
|
|
137
133
|
for (const eventType of eventTypes) {
|
|
138
|
-
const dataSource =
|
|
134
|
+
const dataSource = resolveDataSourceByEventTypeName(eventType.name, eventTypeRegistries);
|
|
139
135
|
dataSourcePerEvent.set(eventType.name, dataSource);
|
|
140
136
|
}
|
|
141
137
|
const uniqueDataSources = new Set(dataSourcePerEvent.values());
|
|
@@ -143,7 +139,7 @@ let OutboxListenerScanner = OutboxListenerScanner_1 = class OutboxListenerScanne
|
|
|
143
139
|
const breakdown = [...dataSourcePerEvent]
|
|
144
140
|
.map(([eventName, dataSource]) => ` ${eventName} → '${dataSource}'`)
|
|
145
141
|
.join('\n');
|
|
146
|
-
throw new
|
|
142
|
+
throw new OutboxError(`@OutboxEventsHandler on ${className}: events span multiple dataSources:\n${breakdown}\n` +
|
|
147
143
|
`Handlers must be scoped to a single dataSource. Either:\n` +
|
|
148
144
|
` • register the events under the same dataSource (OutboxModule.forFeature(...))\n` +
|
|
149
145
|
` • split the handler into separate classes per dataSource\n` +
|
|
@@ -157,7 +153,7 @@ let OutboxListenerScanner = OutboxListenerScanner_1 = class OutboxListenerScanne
|
|
|
157
153
|
collectEventTypeRegistries() {
|
|
158
154
|
const registries = new Map();
|
|
159
155
|
for (const dataSource of this.dataSourceNames.keys()) {
|
|
160
|
-
registries.set(dataSource, this.moduleRef.get(
|
|
156
|
+
registries.set(dataSource, this.moduleRef.get(getEventTypeRegistryToken(dataSource), {
|
|
161
157
|
strict: false,
|
|
162
158
|
}));
|
|
163
159
|
}
|
|
@@ -166,27 +162,27 @@ let OutboxListenerScanner = OutboxListenerScanner_1 = class OutboxListenerScanne
|
|
|
166
162
|
collectListenerRegistries() {
|
|
167
163
|
const registries = new Map();
|
|
168
164
|
for (const dataSource of this.dataSourceNames.keys()) {
|
|
169
|
-
registries.set(dataSource, this.moduleRef.get(
|
|
165
|
+
registries.set(dataSource, this.moduleRef.get(getOutboxListenerRegistryToken(dataSource), {
|
|
170
166
|
strict: false,
|
|
171
167
|
}));
|
|
172
168
|
}
|
|
173
169
|
return registries;
|
|
174
170
|
}
|
|
175
171
|
};
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
(
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
core_1.ModuleRef, Object, core_2.TransactionManager])
|
|
172
|
+
OutboxListenerScanner = OutboxListenerScanner_1 = __decorate([
|
|
173
|
+
Injectable(),
|
|
174
|
+
__param(2, Inject(OUTBOX_DATA_SOURCE_NAMES)),
|
|
175
|
+
__metadata("design:paramtypes", [DiscoveryService,
|
|
176
|
+
ModuleRef, Object, TransactionManager])
|
|
182
177
|
], OutboxListenerScanner);
|
|
178
|
+
export { OutboxListenerScanner };
|
|
183
179
|
/**
|
|
184
180
|
* Compose the stable listener id. Always ends with `#${EventName}`
|
|
185
181
|
* so a single class handling multiple event types gets distinct ids
|
|
186
182
|
* — the registry requires globally-unique ids. Exported so consumers
|
|
187
183
|
* can pre-compute the id for explicit registration / tests.
|
|
188
184
|
*/
|
|
189
|
-
function composeListenerId(baseId, eventType) {
|
|
185
|
+
export function composeListenerId(baseId, eventType) {
|
|
190
186
|
return `${baseId}#${eventType.name}`;
|
|
191
187
|
}
|
|
192
188
|
//# sourceMappingURL=outbox-listener-scanner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outbox-listener-scanner.js","sourceRoot":"","sources":["../../src/registry/outbox-listener-scanner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"outbox-listener-scanner.js","sourceRoot":"","sources":["../../src/registry/outbox-listener-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { EventPublication, NewEventPublication } from '../types/event-publication';
|
|
2
|
-
import type { PublicationStatus } from '../types/publication-status';
|
|
1
|
+
import type { EventPublication, NewEventPublication } from '../types/event-publication.js';
|
|
2
|
+
import type { PublicationStatus } from '../types/publication-status.js';
|
|
3
3
|
/**
|
|
4
4
|
* Options accepted by {@link EventPublicationRepository.updateStatus}.
|
|
5
5
|
*/
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EVENT_PUBLICATION_REPOSITORY = void 0;
|
|
4
1
|
/** DI token for the active {@link EventPublicationRepository}. */
|
|
5
|
-
|
|
2
|
+
export const EVENT_PUBLICATION_REPOSITORY = Symbol('EVENT_PUBLICATION_REPOSITORY');
|
|
6
3
|
//# sourceMappingURL=event-publication-repository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-publication-repository.js","sourceRoot":"","sources":["../../src/repository/event-publication-repository.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-publication-repository.js","sourceRoot":"","sources":["../../src/repository/event-publication-repository.ts"],"names":[],"mappings":"AA4JA,kEAAkE;AAClE,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,8BAA8B,CAAC,CAAC"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EVENT_SERIALIZER = void 0;
|
|
4
1
|
/** DI token for the active {@link EventSerializer} implementation. */
|
|
5
|
-
|
|
2
|
+
export const EVENT_SERIALIZER = Symbol('EVENT_SERIALIZER');
|
|
6
3
|
//# sourceMappingURL=event-serializer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-serializer.js","sourceRoot":"","sources":["../../src/serialization/event-serializer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-serializer.js","sourceRoot":"","sources":["../../src/serialization/event-serializer.ts"],"names":[],"mappings":"AA0BA,sEAAsE;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC"}
|
|
@@ -1,13 +1,10 @@
|
|
|
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);
|
|
5
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
6
|
};
|
|
8
|
-
|
|
9
|
-
exports.EVENT_TYPE_REGISTRY = exports.EventTypeRegistry = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
7
|
+
import { Injectable } from '@nestjs/common';
|
|
11
8
|
/**
|
|
12
9
|
* Registry that maps event class names to their constructors so the
|
|
13
10
|
* serializer can reconstruct class instances from stored JSON payloads.
|
|
@@ -70,10 +67,10 @@ let EventTypeRegistry = class EventTypeRegistry {
|
|
|
70
67
|
return new Map(this.registry);
|
|
71
68
|
}
|
|
72
69
|
};
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
(0, common_1.Injectable)()
|
|
70
|
+
EventTypeRegistry = __decorate([
|
|
71
|
+
Injectable()
|
|
76
72
|
], EventTypeRegistry);
|
|
73
|
+
export { EventTypeRegistry };
|
|
77
74
|
/** DI token for the {@link EventTypeRegistry}. */
|
|
78
|
-
|
|
75
|
+
export const EVENT_TYPE_REGISTRY = Symbol('EVENT_TYPE_REGISTRY');
|
|
79
76
|
//# sourceMappingURL=event-type-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-type-registry.js","sourceRoot":"","sources":["../../src/serialization/event-type-registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-type-registry.js","sourceRoot":"","sources":["../../src/serialization/event-type-registry.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,gBAAgB,CAAC;AAElD;;;;;;;;;GASG;AAEI,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IACX,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE5D;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAuB;QAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CACb,eAAe,SAAS,CAAC,IAAI,wBAAwB;gBACnD,0DAA0D;gBAC1D,2DAA2D,CAC9D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED,2CAA2C;IAC3C,WAAW,CAAC,UAA0B;QACpC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,QAAgB;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,eAAe,QAAQ,oBAAoB;gBACzC,+DAA+D;gBAC/D,gDAAgD,CACnD,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4DAA4D;IAC5D,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,+EAA+E;IAC/E,MAAM;QACJ,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;CACF,CAAA;AA7DY,iBAAiB;IAD7B,UAAU,EAAE;GACA,iBAAiB,CA6D7B;;AAED,kDAAkD;AAClD,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EventTypeRegistry } from './event-type-registry';
|
|
1
|
+
import type { EventTypeRegistry } from './event-type-registry.js';
|
|
2
2
|
/**
|
|
3
3
|
* Resolve the dataSource that owns a given event-type name by walking
|
|
4
4
|
* a Map of per-dataSource {@link EventTypeRegistry} instances. Returns
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.resolveDataSourceByEventTypeName = resolveDataSourceByEventTypeName;
|
|
4
|
-
const errors_1 = require("../types/errors");
|
|
1
|
+
import { OutboxError } from '../types/errors.js';
|
|
5
2
|
/**
|
|
6
3
|
* Resolve the dataSource that owns a given event-type name by walking
|
|
7
4
|
* a Map of per-dataSource {@link EventTypeRegistry} instances. Returns
|
|
@@ -42,7 +39,7 @@ const errors_1 = require("../types/errors");
|
|
|
42
39
|
* @throws {OutboxError} when zero or multiple registries contain the
|
|
43
40
|
* event-type.
|
|
44
41
|
*/
|
|
45
|
-
function resolveDataSourceByEventTypeName(eventTypeName, registries) {
|
|
42
|
+
export function resolveDataSourceByEventTypeName(eventTypeName, registries) {
|
|
46
43
|
const matches = [];
|
|
47
44
|
for (const [dataSource, registry] of registries) {
|
|
48
45
|
if (registry.has(eventTypeName)) {
|
|
@@ -50,12 +47,12 @@ function resolveDataSourceByEventTypeName(eventTypeName, registries) {
|
|
|
50
47
|
}
|
|
51
48
|
}
|
|
52
49
|
if (matches.length === 0) {
|
|
53
|
-
throw new
|
|
50
|
+
throw new OutboxError(`Event type '${eventTypeName}' is not registered in any dataSource. ` +
|
|
54
51
|
`Add it to OutboxModule.forFeature([...], { dataSource: '...' }) ` +
|
|
55
52
|
`in the feature module that owns the event class.`);
|
|
56
53
|
}
|
|
57
54
|
if (matches.length > 1) {
|
|
58
|
-
throw new
|
|
55
|
+
throw new OutboxError(`Event type '${eventTypeName}' is registered in multiple dataSources ` +
|
|
59
56
|
`(${matches.join(', ')}). Pass an explicit { dataSource } option to ` +
|
|
60
57
|
`disambiguate, or register the event in only one dataSource.`);
|
|
61
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-type-resolver.js","sourceRoot":"","sources":["../../src/serialization/event-type-resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-type-resolver.js","sourceRoot":"","sources":["../../src/serialization/event-type-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,gCAAgC,CAC9C,aAAqB,EACrB,UAAkD;IAElD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC;QAChD,IAAI,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,WAAW,CACnB,eAAe,aAAa,yCAAyC;YACnE,kEAAkE;YAClE,kDAAkD,CACrD,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,WAAW,CACnB,eAAe,aAAa,0CAA0C;YACpE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,+CAA+C;YACrE,6DAA6D,CAChE,CAAC;IACJ,CAAC;IACD,mCAAmC;IACnC,oEAAoE;IACpE,OAAO,OAAO,CAAC,CAAC,CAAE,CAAC;AACrB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { EventSerializer } from './event-serializer';
|
|
2
|
-
import { EventTypeRegistry } from './event-type-registry';
|
|
1
|
+
import type { EventSerializer } from './event-serializer.js';
|
|
2
|
+
import { EventTypeRegistry } from './event-type-registry.js';
|
|
3
3
|
/**
|
|
4
4
|
* Default JSON-based {@link EventSerializer}. Uses `JSON.stringify` for
|
|
5
5
|
* encoding and `JSON.parse` + `Object.create` for decoding, consulting
|
|
@@ -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);
|
|
@@ -8,11 +7,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const errors_1 = require("../types/errors");
|
|
15
|
-
const event_type_registry_1 = require("./event-type-registry");
|
|
10
|
+
import { Injectable } from '@nestjs/common';
|
|
11
|
+
import { DeserializationError, SerializationError } from '../types/errors.js';
|
|
12
|
+
import { EventTypeRegistry } from './event-type-registry.js';
|
|
16
13
|
/**
|
|
17
14
|
* Default JSON-based {@link EventSerializer}. Uses `JSON.stringify` for
|
|
18
15
|
* encoding and `JSON.parse` + `Object.create` for decoding, consulting
|
|
@@ -31,13 +28,13 @@ let JsonEventSerializer = class JsonEventSerializer {
|
|
|
31
28
|
}
|
|
32
29
|
serialize(event) {
|
|
33
30
|
if (!event || typeof event !== 'object') {
|
|
34
|
-
throw new
|
|
31
|
+
throw new SerializationError(`Cannot serialize non-object: ${typeof event}`);
|
|
35
32
|
}
|
|
36
33
|
try {
|
|
37
34
|
return JSON.stringify(event);
|
|
38
35
|
}
|
|
39
36
|
catch (err) {
|
|
40
|
-
throw new
|
|
37
|
+
throw new SerializationError(`Failed to serialize event: ${err.message}`);
|
|
41
38
|
}
|
|
42
39
|
}
|
|
43
40
|
deserialize(serialized, eventType) {
|
|
@@ -47,7 +44,7 @@ let JsonEventSerializer = class JsonEventSerializer {
|
|
|
47
44
|
data = JSON.parse(serialized);
|
|
48
45
|
}
|
|
49
46
|
catch (err) {
|
|
50
|
-
throw new
|
|
47
|
+
throw new DeserializationError(`Failed to deserialize event '${eventType}': ${err.message}`);
|
|
51
48
|
}
|
|
52
49
|
if (!EventClass) {
|
|
53
50
|
return data;
|
|
@@ -56,9 +53,9 @@ let JsonEventSerializer = class JsonEventSerializer {
|
|
|
56
53
|
return Object.assign(Object.create(prototype), data);
|
|
57
54
|
}
|
|
58
55
|
};
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
(
|
|
62
|
-
__metadata("design:paramtypes", [event_type_registry_1.EventTypeRegistry])
|
|
56
|
+
JsonEventSerializer = __decorate([
|
|
57
|
+
Injectable(),
|
|
58
|
+
__metadata("design:paramtypes", [EventTypeRegistry])
|
|
63
59
|
], JsonEventSerializer);
|
|
60
|
+
export { JsonEventSerializer };
|
|
64
61
|
//# sourceMappingURL=json-event-serializer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-event-serializer.js","sourceRoot":"","sources":["../../src/serialization/json-event-serializer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"json-event-serializer.js","sourceRoot":"","sources":["../../src/serialization/json-event-serializer.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;;;;;GAUG;AAEI,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IACD;IAA7B,YAA6B,QAA2B;QAA3B,aAAQ,GAAR,QAAQ,CAAmB;IAAG,CAAC;IAE5D,SAAS,CAAC,KAAc;QACtB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,IAAI,kBAAkB,CAAC,gCAAgC,OAAO,KAAK,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,kBAAkB,CAAC,8BAA+B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED,WAAW,CAAC,UAAkB,EAAE,SAAiB;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEhD,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,oBAAoB,CAC5B,gCAAgC,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CACxE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAW,UAAU,CAAC,SAAmB,CAAC;QACzD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAW,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC;CACF,CAAA;AAjCY,mBAAmB;IAD/B,UAAU,EAAE;qCAE4B,iBAAiB;GAD7C,mBAAmB,CAiC/B"}
|
package/dist/shutdown/drain.js
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_DRAIN_TIMEOUT_MS = void 0;
|
|
4
|
-
exports.drainWithTimeout = drainWithTimeout;
|
|
5
1
|
/**
|
|
6
2
|
* Default drain budget for the outbox background workers, in
|
|
7
3
|
* milliseconds.
|
|
@@ -12,7 +8,7 @@ exports.drainWithTimeout = drainWithTimeout;
|
|
|
12
8
|
* connection pool, flushing logs) needs room after the drain. 10s
|
|
13
9
|
* leaves that margin.
|
|
14
10
|
*/
|
|
15
|
-
|
|
11
|
+
export const DEFAULT_DRAIN_TIMEOUT_MS = 10_000;
|
|
16
12
|
/**
|
|
17
13
|
* Await `inFlight`, giving up after `timeoutMs`.
|
|
18
14
|
*
|
|
@@ -32,7 +28,7 @@ exports.DEFAULT_DRAIN_TIMEOUT_MS = 10_000;
|
|
|
32
28
|
* `checkStaleness` already swallow their own failures, and a drain that
|
|
33
29
|
* threw would turn an orderly shutdown into an unhandled rejection.
|
|
34
30
|
*/
|
|
35
|
-
async function drainWithTimeout(inFlight, timeoutMs) {
|
|
31
|
+
export async function drainWithTimeout(inFlight, timeoutMs) {
|
|
36
32
|
if (timeoutMs <= 0) {
|
|
37
33
|
return false;
|
|
38
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drain.js","sourceRoot":"","sources":["../../src/shutdown/drain.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"drain.js","sourceRoot":"","sources":["../../src/shutdown/drain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAE/C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAA0B,EAC1B,SAAiB;IAEjB,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAiC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,EAAE;QAC7C,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;QACpD,kEAAkE;QAClE,iEAAiE;QACjE,QAAQ;QACR,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAClE,CAAC;YAAS,CAAC;QACT,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Type } from '@nestjs/common';
|
|
2
|
-
import { PublishedEvents, type PublishedEventsView } from './published-events';
|
|
2
|
+
import { PublishedEvents, type PublishedEventsView } from './published-events.js';
|
|
3
3
|
/**
|
|
4
4
|
* Thrown when an assertion made against the published-events view does
|
|
5
5
|
* not hold. A separate class (instead of a plain `Error`) so tests can
|
|
@@ -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);
|
|
@@ -8,23 +7,20 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const common_1 = require("@nestjs/common");
|
|
14
|
-
const published_events_1 = require("./published-events");
|
|
10
|
+
import { Injectable } from '@nestjs/common';
|
|
11
|
+
import { PublishedEvents } from './published-events.js';
|
|
15
12
|
/**
|
|
16
13
|
* Thrown when an assertion made against the published-events view does
|
|
17
14
|
* not hold. A separate class (instead of a plain `Error`) so tests can
|
|
18
15
|
* pattern-match with `rejects.toBeInstanceOf(PublishedEventsAssertionError)`
|
|
19
16
|
* when they want to assert on failure modes.
|
|
20
17
|
*/
|
|
21
|
-
class PublishedEventsAssertionError extends Error {
|
|
18
|
+
export class PublishedEventsAssertionError extends Error {
|
|
22
19
|
constructor(message) {
|
|
23
20
|
super(message);
|
|
24
21
|
this.name = 'PublishedEventsAssertionError';
|
|
25
22
|
}
|
|
26
23
|
}
|
|
27
|
-
exports.PublishedEventsAssertionError = PublishedEventsAssertionError;
|
|
28
24
|
/**
|
|
29
25
|
* Jest-friendly fluent assertions over {@link PublishedEvents}. Inspired
|
|
30
26
|
* by Spring Modulith's `AssertablePublishedEvents`. Designed to read
|
|
@@ -71,17 +67,17 @@ let AssertablePublishedEvents = class AssertablePublishedEvents {
|
|
|
71
67
|
}
|
|
72
68
|
}
|
|
73
69
|
};
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
(
|
|
77
|
-
__metadata("design:paramtypes", [published_events_1.PublishedEvents])
|
|
70
|
+
AssertablePublishedEvents = __decorate([
|
|
71
|
+
Injectable(),
|
|
72
|
+
__metadata("design:paramtypes", [PublishedEvents])
|
|
78
73
|
], AssertablePublishedEvents);
|
|
74
|
+
export { AssertablePublishedEvents };
|
|
79
75
|
/**
|
|
80
76
|
* Materialised, filtered view returned by
|
|
81
77
|
* {@link AssertablePublishedEvents.contains}. Further filtering /
|
|
82
78
|
* sizing runs in memory — no additional repository reads.
|
|
83
79
|
*/
|
|
84
|
-
class AssertionView {
|
|
80
|
+
export class AssertionView {
|
|
85
81
|
view;
|
|
86
82
|
events;
|
|
87
83
|
eventType;
|
|
@@ -120,5 +116,4 @@ class AssertionView {
|
|
|
120
116
|
return [...this.events];
|
|
121
117
|
}
|
|
122
118
|
}
|
|
123
|
-
exports.AssertionView = AssertionView;
|
|
124
119
|
//# sourceMappingURL=assertable-published-events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertable-published-events.js","sourceRoot":"","sources":["../../src/testing/assertable-published-events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assertable-published-events.js","sourceRoot":"","sources":["../../src/testing/assertable-published-events.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAA4B,MAAM,uBAAuB,CAAC;AAElF;;;;;GAKG;AACH,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAC9C,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AAEI,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IACP;IAA7B,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAExD;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,CAAmB,SAAkB;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,6BAA6B,CACrC,uCAAuC,SAAS,CAAC,IAAI,kBAAkB,CACxE,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,aAAa,CAAI,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAmB,SAAkB;QACvD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;QACzD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,6BAA6B,CACrC,8BAA8B,SAAS,CAAC,IAAI,eAAe,MAAM,CAAC,MAAM,EAAE,CAC3E,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AAnCY,yBAAyB;IADrC,UAAU,EAAE;qCAE0B,eAAe;GADzC,yBAAyB,CAmCrC;;AAED;;;;GAIG;AACH,MAAM,OAAO,aAAa;IAEL;IACA;IACA;IAHnB,YACmB,IAA4B,EAC5B,MAAoB,EACpB,SAAkB;QAFlB,SAAI,GAAJ,IAAI,CAAwB;QAC5B,WAAM,GAAN,MAAM,CAAc;QACpB,cAAS,GAAT,SAAS,CAAS;IAClC,CAAC;IAEJ;;;;;;OAMG;IACH,QAAQ,CAAI,MAAuB,EAAE,QAAW;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC;QAC3E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,6BAA6B,CACrC,uCAAuC,IAAI,CAAC,SAAS,CAAC,IAAI,yCAAyC,CACpG,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,aAAa,CAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,QAAgB;QACtB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,6BAA6B,CACrC,YAAY,QAAQ,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,eAAe,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAC9F,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kFAAkF;IAClF,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TransactionManager } from '@nestjs-transactional/core';
|
|
2
|
-
import type { EventPublicationRepository, FindCompletedOptions, FindFailedOptions, UpdateStatusOptions } from '../repository/event-publication-repository';
|
|
3
|
-
import type { EventPublication, NewEventPublication } from '../types/event-publication';
|
|
4
|
-
import { PublicationStatus } from '../types/publication-status';
|
|
2
|
+
import type { EventPublicationRepository, FindCompletedOptions, FindFailedOptions, UpdateStatusOptions } from '../repository/event-publication-repository.js';
|
|
3
|
+
import type { EventPublication, NewEventPublication } from '../types/event-publication.js';
|
|
4
|
+
import { PublicationStatus } from '../types/publication-status.js';
|
|
5
5
|
/**
|
|
6
6
|
* In-memory reference implementation of {@link EventPublicationRepository}.
|
|
7
7
|
*
|