@nestjs-transactional/cqrs 1.0.0-alpha.5 → 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.
Files changed (44) hide show
  1. package/README.md +155 -410
  2. package/dist/decorators/integration-events-handler.decorator.d.ts +2 -2
  3. package/dist/decorators/integration-events-handler.decorator.js +9 -14
  4. package/dist/decorators/integration-events-handler.decorator.js.map +1 -1
  5. package/dist/decorators/transactional-events-handler.decorator.d.ts +4 -4
  6. package/dist/decorators/transactional-events-handler.decorator.js +12 -17
  7. package/dist/decorators/transactional-events-handler.decorator.js.map +1 -1
  8. package/dist/event-dispatcher/event-dispatcher.d.ts +4 -4
  9. package/dist/event-dispatcher/event-dispatcher.js +18 -22
  10. package/dist/event-dispatcher/event-dispatcher.js.map +1 -1
  11. package/dist/event-publisher/hybrid-event-publisher.d.ts +2 -2
  12. package/dist/event-publisher/hybrid-event-publisher.js +10 -13
  13. package/dist/event-publisher/hybrid-event-publisher.js.map +1 -1
  14. package/dist/event-publisher/transactional-event-publisher-adapter.d.ts +15 -5
  15. package/dist/event-publisher/transactional-event-publisher-adapter.js +20 -12
  16. package/dist/event-publisher/transactional-event-publisher-adapter.js.map +1 -1
  17. package/dist/event-publisher/transactional-event-publisher.d.ts +1 -1
  18. package/dist/event-publisher/transactional-event-publisher.js +6 -9
  19. package/dist/event-publisher/transactional-event-publisher.js.map +1 -1
  20. package/dist/handlers/bootstrap.d.ts +1 -1
  21. package/dist/handlers/bootstrap.js +6 -9
  22. package/dist/handlers/bootstrap.js.map +1 -1
  23. package/dist/handlers/handler-wrapper.js +16 -19
  24. package/dist/handlers/handler-wrapper.js.map +1 -1
  25. package/dist/handlers/integration-events-handler-scanner.d.ts +2 -2
  26. package/dist/handlers/integration-events-handler-scanner.js +19 -22
  27. package/dist/handlers/integration-events-handler-scanner.js.map +1 -1
  28. package/dist/handlers/listener-scanner.d.ts +1 -1
  29. package/dist/handlers/listener-scanner.js +11 -14
  30. package/dist/handlers/listener-scanner.js.map +1 -1
  31. package/dist/handlers/outbox-listener-registrar.d.ts +3 -3
  32. package/dist/handlers/outbox-listener-registrar.js +2 -5
  33. package/dist/handlers/outbox-listener-registrar.js.map +1 -1
  34. package/dist/index.d.ts +15 -15
  35. package/dist/index.js +13 -36
  36. package/dist/index.js.map +1 -1
  37. package/dist/interfaces/integration-event-handler.interface.js +1 -2
  38. package/dist/interfaces/transactional-event-handler.interface.js +1 -2
  39. package/dist/module/cqrs-transactional.module.d.ts +66 -8
  40. package/dist/module/cqrs-transactional.module.js +120 -68
  41. package/dist/module/cqrs-transactional.module.js.map +1 -1
  42. package/dist/types/transactional-listener.types.js +2 -5
  43. package/dist/types/transactional-listener.types.js.map +1 -1
  44. package/package.json +27 -16
@@ -1,31 +1,40 @@
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
- var CqrsTransactionalModule_1;
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.CqrsTransactionalModule = exports.CQRS_TRANSACTIONAL_OPTIONS = void 0;
11
- const common_1 = require("@nestjs/common");
12
- const core_1 = require("@nestjs/core");
13
- const cqrs_1 = require("@nestjs/cqrs");
14
- const core_2 = require("@nestjs-transactional/core");
15
- const event_dispatcher_1 = require("../event-dispatcher/event-dispatcher");
16
- const hybrid_event_publisher_1 = require("../event-publisher/hybrid-event-publisher");
17
- const transactional_event_publisher_1 = require("../event-publisher/transactional-event-publisher");
18
- const transactional_event_publisher_adapter_1 = require("../event-publisher/transactional-event-publisher-adapter");
19
- const bootstrap_1 = require("../handlers/bootstrap");
20
- const handler_wrapper_1 = require("../handlers/handler-wrapper");
21
- const integration_events_handler_scanner_1 = require("../handlers/integration-events-handler-scanner");
22
- const listener_scanner_1 = require("../handlers/listener-scanner");
7
+ import { Module, } from '@nestjs/common';
8
+ import { DiscoveryModule, DiscoveryService } from '@nestjs/core';
9
+ import { CqrsModule, EventBus, EventPublisher } from '@nestjs/cqrs';
10
+ import { TransactionManager } from '@nestjs-transactional/core';
11
+ import { TransactionalEventDispatcher } from '../event-dispatcher/event-dispatcher.js';
12
+ import { HybridEventPublisher } from '../event-publisher/hybrid-event-publisher.js';
13
+ import { TransactionalEventPublisherAdapter } from '../event-publisher/transactional-event-publisher-adapter.js';
14
+ import { TransactionalEventPublisher } from '../event-publisher/transactional-event-publisher.js';
15
+ import { CqrsTransactionalBootstrap } from '../handlers/bootstrap.js';
16
+ import { CqrsHandlerWrapper } from '../handlers/handler-wrapper.js';
17
+ import { IntegrationEventsHandlerScanner } from '../handlers/integration-events-handler-scanner.js';
18
+ import { TransactionalListenerScanner } from '../handlers/listener-scanner.js';
23
19
  /**
24
20
  * DI token for the resolved {@link CqrsTransactionalOptions} object.
25
21
  * Consumers normally do not inject this directly — it is used by the
26
22
  * module's internal factory to pass options to {@link CqrsHandlerWrapper}.
27
23
  */
28
- exports.CQRS_TRANSACTIONAL_OPTIONS = 'CQRS_TRANSACTIONAL_OPTIONS';
24
+ export const CQRS_TRANSACTIONAL_OPTIONS = 'CQRS_TRANSACTIONAL_OPTIONS';
25
+ /**
26
+ * Single source of truth for the option defaults, so `forRoot` and
27
+ * `forRootAsync` cannot drift apart.
28
+ */
29
+ function resolveWrapperOptions(options) {
30
+ return {
31
+ wrapCommandHandlers: options.wrapCommandHandlers ?? true,
32
+ wrapQueryHandlers: options.wrapQueryHandlers ?? true,
33
+ wrapEventHandlers: options.wrapEventHandlers ?? true,
34
+ defaultQueryOptions: options.defaultQueryOptions ?? { readOnly: true },
35
+ defaultCommandOptions: options.defaultCommandOptions,
36
+ };
37
+ }
29
38
  /**
30
39
  * NestJS module that wires the `@nestjs-transactional/cqrs` runtime:
31
40
  *
@@ -45,23 +54,30 @@ exports.CQRS_TRANSACTIONAL_OPTIONS = 'CQRS_TRANSACTIONAL_OPTIONS';
45
54
  * dispatcher.
46
55
  *
47
56
  * Pair with `TransactionalModule.forRoot({ isGlobal: true })` at the
48
- * application root. For TypeORM-backed applications, also register
49
- * adapters with `TypeOrmTransactionalModule.forFeature(...)`.
57
+ * application root. For TypeORM-backed applications, register one
58
+ * adapter per DataSource with `TypeOrmTransactionalModule.forRoot(...)`
59
+ * (ADR-019 — one call per dataSource, not one per feature module).
60
+ *
61
+ * Do NOT import `@nestjs/cqrs`'s `CqrsModule` alongside this module
62
+ * (convention #6): this module imports `CqrsModule` internally and
63
+ * overrides the `EventPublisher` DI token, so a second import in the
64
+ * consumer shadows the override and aggregate events silently bypass
65
+ * the dispatcher.
50
66
  *
51
67
  * @example
52
68
  * ```ts
53
69
  * @Module({
54
70
  * imports: [
55
71
  * TransactionalModule.forRoot({ isGlobal: true }),
56
- * TypeOrmTransactionalModule.forFeature({ dataSource: myDs }),
57
- * CqrsModule,
72
+ * TypeOrmTransactionalModule.forRoot({ isDefault: true }),
73
+ * // No `CqrsModule` here — see the note above.
58
74
  * CqrsTransactionalModule.forRoot(),
59
75
  * ],
60
76
  * })
61
77
  * export class AppModule {}
62
78
  * ```
63
79
  *
64
- * **Multi-dataSource setups** (Phase 14.7): the cqrs runtime is
80
+ * **Multi-dataSource setups**: the cqrs runtime is
65
81
  * dataSource-agnostic by design. There is exactly one
66
82
  * `CqrsTransactionalModule.forRoot()` per application regardless of
67
83
  * how many dataSources are configured — multi-DS routing emerges
@@ -82,56 +98,92 @@ exports.CQRS_TRANSACTIONAL_OPTIONS = 'CQRS_TRANSACTIONAL_OPTIONS';
82
98
  * cross-dataSource transactions). For cross-DS event handling
83
99
  * prefer the outbox path — see `docs/known-limitations.md`.
84
100
  */
85
- let CqrsTransactionalModule = CqrsTransactionalModule_1 = class CqrsTransactionalModule {
101
+ let CqrsTransactionalModule = class CqrsTransactionalModule {
86
102
  static forRoot(options = {}) {
87
- const resolved = {
88
- wrapCommandHandlers: options.wrapCommandHandlers ?? true,
89
- wrapQueryHandlers: options.wrapQueryHandlers ?? true,
90
- wrapEventHandlers: options.wrapEventHandlers ?? true,
91
- useTransactionalEventPublisher: options.useTransactionalEventPublisher ?? true,
92
- defaultQueryOptions: options.defaultQueryOptions ?? { readOnly: true },
93
- defaultCommandOptions: options.defaultCommandOptions,
94
- };
95
- const providers = [
96
- {
97
- provide: exports.CQRS_TRANSACTIONAL_OPTIONS,
98
- useValue: resolved,
99
- },
100
- event_dispatcher_1.TransactionalEventDispatcher,
101
- listener_scanner_1.TransactionalListenerScanner,
102
- integration_events_handler_scanner_1.IntegrationEventsHandlerScanner,
103
- {
104
- provide: handler_wrapper_1.CqrsHandlerWrapper,
105
- useFactory: (discovery, manager, opts) => new handler_wrapper_1.CqrsHandlerWrapper(discovery, manager, opts),
106
- inject: [core_1.DiscoveryService, core_2.TransactionManager, exports.CQRS_TRANSACTIONAL_OPTIONS],
103
+ return buildModule({
104
+ optionsProvider: {
105
+ provide: CQRS_TRANSACTIONAL_OPTIONS,
106
+ useValue: resolveWrapperOptions(options),
107
107
  },
108
- bootstrap_1.CqrsTransactionalBootstrap,
109
- ];
110
- const exportTokens = [event_dispatcher_1.TransactionalEventDispatcher];
111
- if (resolved.useTransactionalEventPublisher) {
112
- // Keep TransactionalEventPublisher as a standalone provider for
113
- // consumers that want the in-memory-only strategy. The adapter
114
- // itself now routes through HybridEventPublisher, which picks
115
- // up the optional outbox scheduler via @Optional injection.
116
- providers.push(transactional_event_publisher_1.TransactionalEventPublisher);
117
- providers.push(hybrid_event_publisher_1.HybridEventPublisher);
118
- providers.push({
119
- provide: cqrs_1.EventPublisher,
120
- useFactory: (strategy, eventBus) => new transactional_event_publisher_adapter_1.TransactionalEventPublisherAdapter(strategy, eventBus),
121
- inject: [hybrid_event_publisher_1.HybridEventPublisher, cqrs_1.EventBus],
122
- });
123
- exportTokens.push(transactional_event_publisher_1.TransactionalEventPublisher, hybrid_event_publisher_1.HybridEventPublisher, cqrs_1.EventPublisher);
124
- }
125
- return {
126
- module: CqrsTransactionalModule_1,
127
- imports: [core_1.DiscoveryModule, cqrs_1.CqrsModule],
128
- providers,
129
- exports: exportTokens,
108
+ useTransactionalEventPublisher: options.useTransactionalEventPublisher ?? true,
109
+ });
110
+ }
111
+ /**
112
+ * Asynchronous registration. Resolves the wrapper options through a
113
+ * NestJS-style async factory before binding
114
+ * {@link CqrsHandlerWrapper}.
115
+ *
116
+ * @example
117
+ * ```ts
118
+ * CqrsTransactionalModule.forRootAsync({
119
+ * imports: [ConfigModule],
120
+ * inject: [ConfigService],
121
+ * useFactory: (cfg: ConfigService) => ({
122
+ * wrapQueryHandlers: cfg.get('WRAP_QUERIES') !== 'false',
123
+ * defaultCommandOptions: { isolation: cfg.get('TX_ISOLATION') },
124
+ * }),
125
+ * });
126
+ * ```
127
+ */
128
+ static forRootAsync(options) {
129
+ const optionsProvider = {
130
+ provide: CQRS_TRANSACTIONAL_OPTIONS,
131
+ useFactory: async (...args) => resolveWrapperOptions(await options.useFactory(...args)),
132
+ inject: options.inject ? [...options.inject] : undefined,
130
133
  };
134
+ return buildModule({
135
+ optionsProvider,
136
+ useTransactionalEventPublisher: options.useTransactionalEventPublisher ?? true,
137
+ imports: options.imports,
138
+ });
131
139
  }
132
140
  };
133
- exports.CqrsTransactionalModule = CqrsTransactionalModule;
134
- exports.CqrsTransactionalModule = CqrsTransactionalModule = CqrsTransactionalModule_1 = __decorate([
135
- (0, common_1.Module)({})
141
+ CqrsTransactionalModule = __decorate([
142
+ Module({})
136
143
  ], CqrsTransactionalModule);
144
+ export { CqrsTransactionalModule };
145
+ /**
146
+ * Shared module shape for both registration paths. The only difference
147
+ * between them is how {@link CQRS_TRANSACTIONAL_OPTIONS} is provided —
148
+ * everything downstream injects that token, so the provider matrix is
149
+ * identical.
150
+ */
151
+ function buildModule(args) {
152
+ const providers = [
153
+ args.optionsProvider,
154
+ TransactionalEventDispatcher,
155
+ TransactionalListenerScanner,
156
+ IntegrationEventsHandlerScanner,
157
+ {
158
+ provide: CqrsHandlerWrapper,
159
+ useFactory: (discovery, manager, opts) => new CqrsHandlerWrapper(discovery, manager, opts),
160
+ inject: [DiscoveryService, TransactionManager, CQRS_TRANSACTIONAL_OPTIONS],
161
+ },
162
+ CqrsTransactionalBootstrap,
163
+ ];
164
+ // NOT named `exports`: in the CommonJS output that shadows the
165
+ // module-level `exports` object, and the TDZ of the local const
166
+ // breaks every earlier `exports.X = ...` assignment in this file.
167
+ const exportTokens = [TransactionalEventDispatcher];
168
+ if (args.useTransactionalEventPublisher) {
169
+ // Keep TransactionalEventPublisher as a standalone provider for
170
+ // consumers that want the in-memory-only strategy. The adapter
171
+ // itself now routes through HybridEventPublisher, which picks
172
+ // up the optional outbox scheduler via @Optional injection.
173
+ providers.push(TransactionalEventPublisher);
174
+ providers.push(HybridEventPublisher);
175
+ providers.push({
176
+ provide: EventPublisher,
177
+ useFactory: (strategy, eventBus) => new TransactionalEventPublisherAdapter(strategy, eventBus),
178
+ inject: [HybridEventPublisher, EventBus],
179
+ });
180
+ exportTokens.push(TransactionalEventPublisher, HybridEventPublisher, EventPublisher);
181
+ }
182
+ return {
183
+ module: CqrsTransactionalModule,
184
+ imports: [DiscoveryModule, CqrsModule, ...(args.imports ?? [])],
185
+ providers,
186
+ exports: exportTokens,
187
+ };
188
+ }
137
189
  //# sourceMappingURL=cqrs-transactional.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cqrs-transactional.module.js","sourceRoot":"","sources":["../../src/module/cqrs-transactional.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA2E;AAC3E,uCAAiE;AACjE,uCAAoE;AACpE,qDAAgE;AAEhE,2EAAoF;AACpF,sFAAiF;AACjF,oGAA+F;AAC/F,oHAA8G;AAC9G,qDAAmE;AACnE,iEAA6F;AAC7F,uGAAiG;AACjG,mEAA4E;AAE5E;;;;GAIG;AACU,QAAA,0BAA0B,GAAG,4BAA4B,CAAC;AA2BvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAEI,IAAM,uBAAuB,+BAA7B,MAAM,uBAAuB;IAClC,MAAM,CAAC,OAAO,CAAC,UAAoC,EAAE;QACnD,MAAM,QAAQ,GASsE;YAClF,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,IAAI;YACxD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,IAAI;YACpD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,IAAI;YACpD,8BAA8B,EAAE,OAAO,CAAC,8BAA8B,IAAI,IAAI;YAC9E,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;YACtE,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;SACrD,CAAC;QAEF,MAAM,SAAS,GAAe;YAC5B;gBACE,OAAO,EAAE,kCAA0B;gBACnC,QAAQ,EAAE,QAAQ;aACnB;YACD,+CAA4B;YAC5B,+CAA4B;YAC5B,oEAA+B;YAC/B;gBACE,OAAO,EAAE,oCAAkB;gBAC3B,UAAU,EAAE,CACV,SAA2B,EAC3B,OAA2B,EAC3B,IAA2B,EACP,EAAE,CAAC,IAAI,oCAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;gBACzE,MAAM,EAAE,CAAC,uBAAgB,EAAE,yBAAkB,EAAE,kCAA0B,CAAC;aAC3E;YACD,sCAA0B;SAC3B,CAAC;QAEF,MAAM,YAAY,GAAc,CAAC,+CAA4B,CAAC,CAAC;QAE/D,IAAI,QAAQ,CAAC,8BAA8B,EAAE,CAAC;YAC5C,gEAAgE;YAChE,+DAA+D;YAC/D,8DAA8D;YAC9D,4DAA4D;YAC5D,SAAS,CAAC,IAAI,CAAC,2DAA2B,CAAC,CAAC;YAC5C,SAAS,CAAC,IAAI,CAAC,6CAAoB,CAAC,CAAC;YACrC,SAAS,CAAC,IAAI,CAAC;gBACb,OAAO,EAAE,qBAAc;gBACvB,UAAU,EAAE,CACV,QAA8B,EAC9B,QAAkB,EACkB,EAAE,CACtC,IAAI,0EAAkC,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAC5D,MAAM,EAAE,CAAC,6CAAoB,EAAE,eAAQ,CAAC;aACzC,CAAC,CAAC;YACH,YAAY,CAAC,IAAI,CAAC,2DAA2B,EAAE,6CAAoB,EAAE,qBAAc,CAAC,CAAC;QACvF,CAAC;QAED,OAAO;YACL,MAAM,EAAE,yBAAuB;YAC/B,OAAO,EAAE,CAAC,sBAAe,EAAE,iBAAU,CAAC;YACtC,SAAS;YACT,OAAO,EAAE,YAAuB;SACjC,CAAC;IACJ,CAAC;CACF,CAAA;AApEY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,uBAAuB,CAoEnC"}
1
+ {"version":3,"file":"cqrs-transactional.module.js","sourceRoot":"","sources":["../../src/module/cqrs-transactional.module.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TransactionPhase = void 0;
4
1
  /**
5
2
  * Transaction lifecycle phase at which a `@TransactionalEventsHandler`
6
3
  * runs. Mirrors Spring's `TransactionPhase` — see the package README
@@ -15,11 +12,11 @@ exports.TransactionPhase = void 0;
15
12
  * - {@link AFTER_COMPLETION}: handler runs on any completion (commit
16
13
  * or rollback).
17
14
  */
18
- var TransactionPhase;
15
+ export var TransactionPhase;
19
16
  (function (TransactionPhase) {
20
17
  TransactionPhase["BEFORE_COMMIT"] = "BEFORE_COMMIT";
21
18
  TransactionPhase["AFTER_COMMIT"] = "AFTER_COMMIT";
22
19
  TransactionPhase["AFTER_ROLLBACK"] = "AFTER_ROLLBACK";
23
20
  TransactionPhase["AFTER_COMPLETION"] = "AFTER_COMPLETION";
24
- })(TransactionPhase || (exports.TransactionPhase = TransactionPhase = {}));
21
+ })(TransactionPhase || (TransactionPhase = {}));
25
22
  //# sourceMappingURL=transactional-listener.types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactional-listener.types.js","sourceRoot":"","sources":["../../src/types/transactional-listener.types.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;GAaG;AACH,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,mDAA+B,CAAA;IAC/B,iDAA6B,CAAA;IAC7B,qDAAiC,CAAA;IACjC,yDAAqC,CAAA;AACvC,CAAC,EALW,gBAAgB,gCAAhB,gBAAgB,QAK3B"}
1
+ {"version":3,"file":"transactional-listener.types.js","sourceRoot":"","sources":["../../src/types/transactional-listener.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,mDAA+B,CAAA;IAC/B,iDAA6B,CAAA;IAC7B,qDAAiC,CAAA;IACjC,yDAAqC,CAAA;AACvC,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B"}
package/package.json CHANGED
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "@nestjs-transactional/cqrs",
3
- "version": "1.0.0-alpha.5",
3
+ "version": "2.0.0",
4
4
  "description": "@nestjs/cqrs integration for @nestjs-transactional/core — transactional event listeners with phases, handler wrapping, AggregateRoot integration",
5
5
  "license": "MIT",
6
+ "type": "module",
7
+ "sideEffects": false,
6
8
  "author": "Igor Golovanov",
7
9
  "repository": {
8
10
  "type": "git",
9
- "url": "https://github.com/igorgolovanov/nestjs-transactional.git",
11
+ "url": "git+https://github.com/igorgolovanov/nestjs-transactional.git",
10
12
  "directory": "packages/cqrs"
11
13
  },
12
14
  "bugs": {
@@ -24,7 +26,7 @@
24
26
  "after-commit"
25
27
  ],
26
28
  "engines": {
27
- "node": ">=22.11.0"
29
+ "node": ">=22.13.0"
28
30
  },
29
31
  "main": "dist/index.js",
30
32
  "types": "dist/index.d.ts",
@@ -42,33 +44,42 @@
42
44
  },
43
45
  "publishConfig": {
44
46
  "access": "public",
45
- "tag": "alpha",
46
47
  "provenance": true
47
48
  },
48
49
  "peerDependencies": {
49
- "@nestjs/common": "^10.0.0 || ^11.0.0",
50
- "@nestjs/core": "^10.0.0 || ^11.0.0",
51
- "@nestjs/cqrs": "^11.0.0",
50
+ "@nestjs/common": "^10.0.0 || ^11.0.0 || ^12.0.0",
51
+ "@nestjs/core": "^10.0.0 || ^11.0.0 || ^12.0.0",
52
+ "@nestjs/cqrs": "^11.0.0 || ^12.0.0",
52
53
  "reflect-metadata": "^0.1.13 || ^0.2.0",
53
54
  "rxjs": "^7.0.0",
54
- "@nestjs-transactional/core": "^1.0.0-alpha.5"
55
+ "@nestjs-transactional/core": "^2.0.0"
55
56
  },
56
57
  "devDependencies": {
57
- "@nestjs/common": "^11.0.0",
58
- "@nestjs/core": "^11.0.0",
58
+ "@jest/globals": "^30.4.2",
59
+ "@nestjs/common": "^11.2.3",
60
+ "@nestjs/core": "^11.2.3",
59
61
  "@nestjs/cqrs": "^11.0.0",
62
+ "@nestjs/testing": "^11.2.3",
63
+ "@nestjs/typeorm": "^11.0.3",
64
+ "@types/jest": "^30.0.0",
65
+ "@types/node": "^22.20.1",
60
66
  "reflect-metadata": "^0.2.2",
61
67
  "rxjs": "^7.8.1",
62
- "@nestjs-transactional/core": "1.0.0-alpha.5",
63
- "@nestjs-transactional/outbox": "1.0.0-alpha.5"
68
+ "typeorm": "^1.1.0",
69
+ "@nestjs-transactional/typeorm": "2.0.0",
70
+ "@nestjs-transactional/outbox": "2.0.0",
71
+ "@nestjs-transactional/core": "2.0.0"
64
72
  },
65
73
  "scripts": {
66
74
  "build": "tsc -p tsconfig.build.json",
67
75
  "clean": "rimraf dist *.tsbuildinfo coverage",
68
- "test": "jest",
69
- "test:watch": "jest --watch",
70
- "test:cov": "jest --coverage",
76
+ "test": "NODE_OPTIONS=--experimental-vm-modules jest",
77
+ "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch",
78
+ "test:cov": "NODE_OPTIONS=--experimental-vm-modules jest --coverage",
71
79
  "type-check": "tsc --noEmit",
72
- "lint": "eslint \"src/**/*.ts\""
80
+ "lint": "eslint .",
81
+ "api:check": "api-extractor run",
82
+ "api:update": "api-extractor run --local",
83
+ "publish:check": "publint && attw --pack . --profile esm-only"
73
84
  }
74
85
  }