@globalart/nestjs-typeorm-outbox 1.0.2 → 1.0.4
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/dist/index.cjs +105 -83
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +40 -32
- package/dist/index.d.mts +40 -32
- package/dist/index.mjs +105 -82
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
let _nestjs_common = require("@nestjs/common");
|
|
2
|
-
let _nestjs_schedule = require("@nestjs/schedule");
|
|
3
2
|
let _globalart_text_utils = require("@globalart/text-utils");
|
|
4
3
|
let typeorm = require("typeorm");
|
|
5
4
|
let _nestjs_typeorm = require("@nestjs/typeorm");
|
|
6
5
|
let rxjs = require("rxjs");
|
|
7
6
|
let _nestjs_microservices = require("@nestjs/microservices");
|
|
7
|
+
let cron = require("cron");
|
|
8
|
+
let _nestjs_schedule = require("@nestjs/schedule");
|
|
8
9
|
|
|
9
10
|
//#region src/core/typeorm-outbox.di-tokens.ts
|
|
10
11
|
const TYPEORM_OUTBOX_CRON_CONFIG_TOKEN = Symbol("TYPEORM_OUTBOX_CRON_CONFIG_TOKEN");
|
|
@@ -33,7 +34,7 @@ function __decorate(decorators, target, key, desc) {
|
|
|
33
34
|
|
|
34
35
|
//#endregion
|
|
35
36
|
//#region src/core/typeorm-outbox.entity.ts
|
|
36
|
-
var _ref$2, _ref2$1, _ref3$1, _ref4, _ref5;
|
|
37
|
+
var _ref$2, _ref2$1, _ref3$1, _ref4$1, _ref5;
|
|
37
38
|
let TypeormOutboxEntity = class TypeormOutboxEntity {
|
|
38
39
|
id;
|
|
39
40
|
createdAt;
|
|
@@ -48,10 +49,21 @@ __decorate([(0, typeorm.CreateDateColumn)({ name: "created_at" }), __decorateMet
|
|
|
48
49
|
__decorate([(0, typeorm.UpdateDateColumn)({ name: "updated_at" }), __decorateMetadata("design:type", typeof (_ref2$1 = typeof Date !== "undefined" && Date) === "function" ? _ref2$1 : Object)], TypeormOutboxEntity.prototype, "updatedAt", void 0);
|
|
49
50
|
__decorate([(0, typeorm.Column)("character varying", { name: "destination_topic" }), __decorateMetadata("design:type", String)], TypeormOutboxEntity.prototype, "destinationTopic", void 0);
|
|
50
51
|
__decorate([(0, typeorm.Column)("jsonb", { nullable: true }), __decorateMetadata("design:type", typeof (_ref3$1 = typeof Record !== "undefined" && Record) === "function" ? _ref3$1 : Object)], TypeormOutboxEntity.prototype, "headers", void 0);
|
|
51
|
-
__decorate([(0, typeorm.Column)("jsonb", { nullable: true }), __decorateMetadata("design:type", typeof (_ref4 = typeof Record !== "undefined" && Record) === "function" ? _ref4 : Object)], TypeormOutboxEntity.prototype, "keys", void 0);
|
|
52
|
+
__decorate([(0, typeorm.Column)("jsonb", { nullable: true }), __decorateMetadata("design:type", typeof (_ref4$1 = typeof Record !== "undefined" && Record) === "function" ? _ref4$1 : Object)], TypeormOutboxEntity.prototype, "keys", void 0);
|
|
52
53
|
__decorate([(0, typeorm.Column)("jsonb"), __decorateMetadata("design:type", typeof (_ref5 = typeof Record !== "undefined" && Record) === "function" ? _ref5 : Object)], TypeormOutboxEntity.prototype, "payload", void 0);
|
|
53
54
|
TypeormOutboxEntity = __decorate([(0, typeorm.Entity)("outbox")], TypeormOutboxEntity);
|
|
54
55
|
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region src/core/typeorm-outbox.interfaces.ts
|
|
58
|
+
var TypeormOutboxRegisterCronModuleOptions = class {
|
|
59
|
+
typeOrmConnectionName = "default";
|
|
60
|
+
kafkaConfig = {};
|
|
61
|
+
cronExpression = _nestjs_schedule.CronExpression.EVERY_10_SECONDS;
|
|
62
|
+
};
|
|
63
|
+
var TypeormOutboxModuleOptions = class {
|
|
64
|
+
typeOrmConnectionName = "default";
|
|
65
|
+
};
|
|
66
|
+
|
|
55
67
|
//#endregion
|
|
56
68
|
//#region \0@oxc-project+runtime@0.108.0/helpers/decorateParam.js
|
|
57
69
|
function __decorateParam(paramIndex, decorator) {
|
|
@@ -61,16 +73,19 @@ function __decorateParam(paramIndex, decorator) {
|
|
|
61
73
|
}
|
|
62
74
|
|
|
63
75
|
//#endregion
|
|
64
|
-
//#region src/core/typeorm-outbox.
|
|
65
|
-
var _ref$1, _ref2, _ref3;
|
|
66
|
-
let
|
|
67
|
-
constructor(entityManager, outboxRepository, brokerClient) {
|
|
76
|
+
//#region src/core/typeorm-outbox-cron.service.ts
|
|
77
|
+
var _ref$1, _ref2, _ref3, _ref4;
|
|
78
|
+
let TypeormOutboxCronService = class TypeormOutboxCronService {
|
|
79
|
+
constructor(entityManager, outboxRepository, brokerClient, moduleConfig) {
|
|
68
80
|
this.entityManager = entityManager;
|
|
69
81
|
this.outboxRepository = outboxRepository;
|
|
70
82
|
this.brokerClient = brokerClient;
|
|
83
|
+
this.moduleConfig = moduleConfig;
|
|
71
84
|
}
|
|
72
|
-
|
|
73
|
-
|
|
85
|
+
onModuleInit() {
|
|
86
|
+
new cron.CronJob(this.moduleConfig.cronExpression ?? _nestjs_schedule.CronExpression.EVERY_10_SECONDS, () => {
|
|
87
|
+
this.executeCronJob();
|
|
88
|
+
}).start();
|
|
74
89
|
}
|
|
75
90
|
async executeCronJob() {
|
|
76
91
|
const lockId = (0, _globalart_text_utils.hashStringToInt)("typeorm-outbox-cron-job");
|
|
@@ -87,37 +102,18 @@ let TypeormOutboxController = class TypeormOutboxController {
|
|
|
87
102
|
}
|
|
88
103
|
}
|
|
89
104
|
};
|
|
90
|
-
__decorate([
|
|
91
|
-
(0,
|
|
92
|
-
__decorateMetadata("design:type", Function),
|
|
93
|
-
__decorateMetadata("design:paramtypes", []),
|
|
94
|
-
__decorateMetadata("design:returntype", Promise)
|
|
95
|
-
], TypeormOutboxController.prototype, "handleOutboxCron", null);
|
|
96
|
-
TypeormOutboxController = __decorate([
|
|
97
|
-
(0, _nestjs_common.Controller)(),
|
|
105
|
+
TypeormOutboxCronService = __decorate([
|
|
106
|
+
(0, _nestjs_common.Injectable)(),
|
|
98
107
|
__decorateParam(1, (0, _nestjs_typeorm.InjectRepository)(TypeormOutboxEntity)),
|
|
99
108
|
__decorateParam(2, InjectTypeormOutboxBroker()),
|
|
109
|
+
__decorateParam(3, InjectTypeormOutboxCronConfig()),
|
|
100
110
|
__decorateMetadata("design:paramtypes", [
|
|
101
111
|
typeof (_ref$1 = typeof typeorm.EntityManager !== "undefined" && typeorm.EntityManager) === "function" ? _ref$1 : Object,
|
|
102
112
|
typeof (_ref2 = typeof typeorm.Repository !== "undefined" && typeorm.Repository) === "function" ? _ref2 : Object,
|
|
103
|
-
typeof (_ref3 = typeof _nestjs_microservices.ClientProxy !== "undefined" && _nestjs_microservices.ClientProxy) === "function" ? _ref3 : Object
|
|
113
|
+
typeof (_ref3 = typeof _nestjs_microservices.ClientProxy !== "undefined" && _nestjs_microservices.ClientProxy) === "function" ? _ref3 : Object,
|
|
114
|
+
typeof (_ref4 = typeof TypeormOutboxRegisterCronModuleOptions !== "undefined" && TypeormOutboxRegisterCronModuleOptions) === "function" ? _ref4 : Object
|
|
104
115
|
])
|
|
105
|
-
],
|
|
106
|
-
|
|
107
|
-
//#endregion
|
|
108
|
-
//#region src/core/typeorm-outbox.interfaces.ts
|
|
109
|
-
var TypeormOutboxRegisterCronModuleOptions = class {
|
|
110
|
-
typeOrmConnectionName = "default";
|
|
111
|
-
kafkaConfig = {};
|
|
112
|
-
};
|
|
113
|
-
var TypeormOutboxModuleOptions = class {
|
|
114
|
-
typeOrmConnectionName = "default";
|
|
115
|
-
};
|
|
116
|
-
var TypeormOutboxModuleAsyncOptions = class {
|
|
117
|
-
imports = [];
|
|
118
|
-
inject = [];
|
|
119
|
-
useFactory;
|
|
120
|
-
};
|
|
116
|
+
], TypeormOutboxCronService);
|
|
121
117
|
|
|
122
118
|
//#endregion
|
|
123
119
|
//#region src/core/typeorm-outbox.service.ts
|
|
@@ -145,23 +141,78 @@ TypeormOutboxService = __decorate([
|
|
|
145
141
|
//#region src/core/typeorm-outbox.module.ts
|
|
146
142
|
var _TypeormOutboxModule;
|
|
147
143
|
let TypeormOutboxModule = _TypeormOutboxModule = class TypeormOutboxModule {
|
|
148
|
-
static
|
|
149
|
-
|
|
150
|
-
provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,
|
|
151
|
-
useValue: options
|
|
152
|
-
};
|
|
153
|
-
const serviceProvider = {
|
|
144
|
+
static createServiceProvider() {
|
|
145
|
+
return {
|
|
154
146
|
provide: TYPEORM_OUTBOX_SERVICE_TOKEN,
|
|
155
147
|
useClass: TypeormOutboxService
|
|
156
148
|
};
|
|
157
|
-
|
|
149
|
+
}
|
|
150
|
+
static createBrokerProvider(useValue = null) {
|
|
151
|
+
return {
|
|
158
152
|
provide: TYPEORM_OUTBOX_BROKER_TOKEN,
|
|
159
|
-
useValue
|
|
153
|
+
useValue
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
static createTypeOrmFeature(connectionName) {
|
|
157
|
+
return _nestjs_typeorm.TypeOrmModule.forFeature([TypeormOutboxEntity], connectionName || "default");
|
|
158
|
+
}
|
|
159
|
+
static createModuleConfigProvider(options) {
|
|
160
|
+
return {
|
|
161
|
+
provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,
|
|
162
|
+
useValue: {
|
|
163
|
+
...new TypeormOutboxModuleOptions(),
|
|
164
|
+
...options
|
|
165
|
+
}
|
|
160
166
|
};
|
|
167
|
+
}
|
|
168
|
+
static createAsyncModuleConfigProvider(options) {
|
|
169
|
+
return {
|
|
170
|
+
provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,
|
|
171
|
+
useFactory: async (...args) => {
|
|
172
|
+
const moduleOptions = await options.useFactory?.(...args);
|
|
173
|
+
return {
|
|
174
|
+
...new TypeormOutboxModuleOptions(),
|
|
175
|
+
...moduleOptions
|
|
176
|
+
};
|
|
177
|
+
},
|
|
178
|
+
inject: options.inject || []
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
static createCronConfigProvider(options) {
|
|
182
|
+
return {
|
|
183
|
+
provide: TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,
|
|
184
|
+
useFactory: async (...args) => {
|
|
185
|
+
const moduleOptions = await options.useFactory?.(...args);
|
|
186
|
+
return {
|
|
187
|
+
...new TypeormOutboxRegisterCronModuleOptions(),
|
|
188
|
+
...moduleOptions
|
|
189
|
+
};
|
|
190
|
+
},
|
|
191
|
+
inject: options.inject || []
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
static createCronBrokerProvider(options) {
|
|
195
|
+
return {
|
|
196
|
+
provide: TYPEORM_OUTBOX_BROKER_TOKEN,
|
|
197
|
+
useFactory: async (...args) => {
|
|
198
|
+
const moduleOptions = await options.useFactory?.(...args);
|
|
199
|
+
const config = {
|
|
200
|
+
...new TypeormOutboxRegisterCronModuleOptions(),
|
|
201
|
+
...moduleOptions
|
|
202
|
+
};
|
|
203
|
+
return _nestjs_microservices.ClientProxyFactory.create(config?.kafkaConfig ?? {});
|
|
204
|
+
},
|
|
205
|
+
inject: options.inject || []
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
static forRoot(options = {}) {
|
|
209
|
+
const configProvider = this.createModuleConfigProvider(options);
|
|
210
|
+
const serviceProvider = this.createServiceProvider();
|
|
211
|
+
const brokerProvider = this.createBrokerProvider();
|
|
161
212
|
return {
|
|
162
213
|
module: _TypeormOutboxModule,
|
|
163
214
|
global: true,
|
|
164
|
-
imports: [
|
|
215
|
+
imports: [this.createTypeOrmFeature(options.typeOrmConnectionName)],
|
|
165
216
|
providers: [
|
|
166
217
|
configProvider,
|
|
167
218
|
serviceProvider,
|
|
@@ -175,25 +226,13 @@ let TypeormOutboxModule = _TypeormOutboxModule = class TypeormOutboxModule {
|
|
|
175
226
|
};
|
|
176
227
|
}
|
|
177
228
|
static forRootAsync(options) {
|
|
178
|
-
const configProvider =
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
return options.useFactory?.(...args);
|
|
182
|
-
},
|
|
183
|
-
inject: options.inject || []
|
|
184
|
-
};
|
|
185
|
-
const serviceProvider = {
|
|
186
|
-
provide: TYPEORM_OUTBOX_SERVICE_TOKEN,
|
|
187
|
-
useClass: TypeormOutboxService
|
|
188
|
-
};
|
|
189
|
-
const brokerProvider = {
|
|
190
|
-
provide: TYPEORM_OUTBOX_BROKER_TOKEN,
|
|
191
|
-
useValue: null
|
|
192
|
-
};
|
|
229
|
+
const configProvider = this.createAsyncModuleConfigProvider(options);
|
|
230
|
+
const serviceProvider = this.createServiceProvider();
|
|
231
|
+
const brokerProvider = this.createBrokerProvider();
|
|
193
232
|
return {
|
|
194
233
|
module: _TypeormOutboxModule,
|
|
195
234
|
global: true,
|
|
196
|
-
imports: [
|
|
235
|
+
imports: [this.createTypeOrmFeature()],
|
|
197
236
|
providers: [
|
|
198
237
|
configProvider,
|
|
199
238
|
serviceProvider,
|
|
@@ -207,31 +246,15 @@ let TypeormOutboxModule = _TypeormOutboxModule = class TypeormOutboxModule {
|
|
|
207
246
|
};
|
|
208
247
|
}
|
|
209
248
|
static registerCronAsync(options) {
|
|
210
|
-
const configProvider =
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
return options.useFactory?.(...args);
|
|
214
|
-
},
|
|
215
|
-
inject: options.inject || []
|
|
216
|
-
};
|
|
217
|
-
const brokerProvider = {
|
|
218
|
-
provide: TYPEORM_OUTBOX_BROKER_TOKEN,
|
|
219
|
-
useFactory: async (...args) => {
|
|
220
|
-
const moduleOptions = options?.useFactory?.(...args);
|
|
221
|
-
return _nestjs_microservices.ClientProxyFactory.create(moduleOptions?.kafkaConfig ?? {});
|
|
222
|
-
},
|
|
223
|
-
inject: options.inject || []
|
|
224
|
-
};
|
|
225
|
-
const serviceProvider = {
|
|
226
|
-
provide: TYPEORM_OUTBOX_SERVICE_TOKEN,
|
|
227
|
-
useClass: TypeormOutboxService
|
|
228
|
-
};
|
|
249
|
+
const configProvider = this.createCronConfigProvider(options);
|
|
250
|
+
const brokerProvider = this.createCronBrokerProvider(options);
|
|
251
|
+
const serviceProvider = this.createServiceProvider();
|
|
229
252
|
return {
|
|
230
253
|
module: _TypeormOutboxModule,
|
|
231
254
|
global: true,
|
|
232
|
-
imports: [_nestjs_schedule.ScheduleModule.forRoot(),
|
|
233
|
-
controllers: [TypeormOutboxController],
|
|
255
|
+
imports: [_nestjs_schedule.ScheduleModule.forRoot(), this.createTypeOrmFeature()],
|
|
234
256
|
providers: [
|
|
257
|
+
TypeormOutboxCronService,
|
|
235
258
|
configProvider,
|
|
236
259
|
brokerProvider,
|
|
237
260
|
serviceProvider
|
|
@@ -255,10 +278,10 @@ exports.TYPEORM_OUTBOX_BROKER_TOKEN = TYPEORM_OUTBOX_BROKER_TOKEN;
|
|
|
255
278
|
exports.TYPEORM_OUTBOX_CRON_CONFIG_TOKEN = TYPEORM_OUTBOX_CRON_CONFIG_TOKEN;
|
|
256
279
|
exports.TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN = TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN;
|
|
257
280
|
exports.TYPEORM_OUTBOX_SERVICE_TOKEN = TYPEORM_OUTBOX_SERVICE_TOKEN;
|
|
258
|
-
Object.defineProperty(exports, '
|
|
281
|
+
Object.defineProperty(exports, 'TypeormOutboxCronService', {
|
|
259
282
|
enumerable: true,
|
|
260
283
|
get: function () {
|
|
261
|
-
return
|
|
284
|
+
return TypeormOutboxCronService;
|
|
262
285
|
}
|
|
263
286
|
});
|
|
264
287
|
Object.defineProperty(exports, 'TypeormOutboxEntity', {
|
|
@@ -273,7 +296,6 @@ Object.defineProperty(exports, 'TypeormOutboxModule', {
|
|
|
273
296
|
return TypeormOutboxModule;
|
|
274
297
|
}
|
|
275
298
|
});
|
|
276
|
-
exports.TypeormOutboxModuleAsyncOptions = TypeormOutboxModuleAsyncOptions;
|
|
277
299
|
exports.TypeormOutboxModuleOptions = TypeormOutboxModuleOptions;
|
|
278
300
|
exports.TypeormOutboxRegisterCronModuleOptions = TypeormOutboxRegisterCronModuleOptions;
|
|
279
301
|
Object.defineProperty(exports, 'TypeormOutboxService', {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["CronExpression","TypeOrmModule","ClientProxyFactory","ScheduleModule"],"sources":["../src/core/typeorm-outbox.di-tokens.ts","../src/core/typeorm-outbox.entity.ts","../src/core/typeorm-outbox.controller.ts","../src/core/typeorm-outbox.interfaces.ts","../src/core/typeorm-outbox.service.ts","../src/core/typeorm-outbox.module.ts"],"sourcesContent":["import { Inject } from \"@nestjs/common\";\n\nexport const TYPEORM_OUTBOX_CRON_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_CRON_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_SERVICE_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_SERVICE_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_BROKER_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_BROKER_TOKEN\",\n);\n\nexport const InjectTypeormOutboxCronConfig = () =>\n Inject(TYPEORM_OUTBOX_CRON_CONFIG_TOKEN);\nexport const InjectTypeormOutboxModuleConfig = () =>\n Inject(TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN);\nexport const InjectTypeormOutboxService = () =>\n Inject(TYPEORM_OUTBOX_SERVICE_TOKEN);\nexport const InjectTypeormOutboxBroker = () =>\n Inject(TYPEORM_OUTBOX_BROKER_TOKEN);\n","import {\n Column,\n CreateDateColumn,\n Entity,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from \"typeorm\";\n\n@Entity('outbox')\nexport class TypeormOutboxEntity {\n @PrimaryGeneratedColumn()\n id!: number;\n\n @CreateDateColumn({ name: 'created_at' })\n createdAt!: Date;\n\n @UpdateDateColumn({ name: 'updated_at' })\n updatedAt!: Date;\n\n @Column(\"character varying\", { name: 'destination_topic' })\n destinationTopic!: string;\n\n @Column(\"jsonb\", { nullable: true })\n headers!: Record<string, string>;\n\n @Column(\"jsonb\", { nullable: true })\n keys!: Record<any, any>;\n\n @Column(\"jsonb\")\n payload!: Record<string, any>;\n}\n","import { Controller } from \"@nestjs/common\";\nimport { InjectTypeormOutboxBroker } from \"./typeorm-outbox.di-tokens\";\nimport { Cron, CronExpression } from \"@nestjs/schedule\";\nimport { hashStringToInt } from \"@globalart/text-utils\";\nimport { EntityManager, Repository } from \"typeorm\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { InjectRepository } from \"@nestjs/typeorm\";\nimport { firstValueFrom } from \"rxjs\";\nimport { ClientProxy } from \"@nestjs/microservices\";\n\n@Controller()\nexport class TypeormOutboxController {\n constructor(\n private readonly entityManager: EntityManager,\n @InjectRepository(TypeormOutboxEntity)\n private readonly outboxRepository: Repository<TypeormOutboxEntity>,\n @InjectTypeormOutboxBroker()\n private readonly brokerClient: ClientProxy,\n ) {}\n\n @Cron(CronExpression.EVERY_10_SECONDS)\n async handleOutboxCron() {\n await this.executeCronJob();\n }\n\n async executeCronJob() {\n const lockId = hashStringToInt(\"typeorm-outbox-cron-job\");\n const [{ pg_try_advisory_xact_lock: acquired }] =\n await this.entityManager.query<{ pg_try_advisory_xact_lock: boolean }[]>(\n `SELECT pg_try_advisory_xact_lock(${lockId})`,\n );\n\n if (!acquired) {\n return;\n }\n const entities = await this.outboxRepository.find();\n \n for (const entity of entities) {\n await firstValueFrom(\n this.brokerClient.emit(entity.destinationTopic, {\n key: entity.keys,\n value: entity.payload,\n headers: entity.headers,\n }),\n );\n await this.outboxRepository.delete(entity.id);\n }\n }\n}\n","import { KafkaOptions } from \"@nestjs/microservices\";\nimport { InjectionToken, ModuleMetadata, Type } from \"@nestjs/common\";\n\n// register cron options\nexport class TypeormOutboxRegisterCronModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n kafkaConfig?: KafkaOptions = {};\n}\nexport interface TypeormOutboxRegisterCronAsyncOptions extends Pick<\n ModuleMetadata,\n \"imports\"\n> {\n inject?: any[];\n useExisting?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useClass?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useFactory?: (\n ...args: any[]\n ) =>\n | Promise<TypeormOutboxRegisterCronModuleOptions>\n | TypeormOutboxRegisterCronModuleOptions;\n}\n\n// register module options\nexport class TypeormOutboxModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n}\nexport class TypeormOutboxModuleAsyncOptions {\n imports?: Type[] = [];\n inject?: InjectionToken[] = [];\n useFactory?: (\n ...args: any[]\n ) => Promise<TypeormOutboxModuleOptions> | TypeormOutboxModuleOptions;\n}\n","import { Injectable } from \"@nestjs/common\";\nimport { InjectRepository } from \"@nestjs/typeorm\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { Repository } from \"typeorm\";\n\ntype createOutboxOptions = {\n destinationTopic: string;\n payload: Record<string, any>;\n headers?: Record<string, string>;\n keys?: Record<any, any>;\n};\n\n@Injectable()\nexport class TypeormOutboxService {\n constructor(\n @InjectRepository(TypeormOutboxEntity)\n private readonly outboxRepository: Repository<TypeormOutboxEntity>,\n ) {}\n\n async create(options: createOutboxOptions) {\n await this.outboxRepository.save({\n destinationTopic: options.destinationTopic,\n headers: options.headers,\n keys: options.keys,\n payload: options.payload,\n });\n }\n}\n","import { TypeOrmModule } from \"@nestjs/typeorm\";\nimport { DynamicModule, Module, Provider } from \"@nestjs/common\";\nimport {\n TypeormOutboxRegisterCronAsyncOptions,\n TypeormOutboxRegisterCronModuleOptions,\n TypeormOutboxModuleOptions,\n TypeormOutboxModuleAsyncOptions,\n} from \"./typeorm-outbox.interfaces\";\nimport {\n TYPEORM_OUTBOX_BROKER_TOKEN,\n TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n TYPEORM_OUTBOX_SERVICE_TOKEN,\n} from \"./typeorm-outbox.di-tokens\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { TypeormOutboxService } from \"./typeorm-outbox.service\";\nimport { TypeormOutboxController } from \"./typeorm-outbox.controller\";\nimport { ScheduleModule } from \"@nestjs/schedule\";\nimport { ClientProxyFactory } from \"@nestjs/microservices\";\n\n@Module({})\nexport class TypeormOutboxModule {\n static forRoot(options: TypeormOutboxModuleOptions = {}): DynamicModule {\n const configProvider: Provider = {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useValue: options,\n };\n const serviceProvider: Provider = {\n provide: TYPEORM_OUTBOX_SERVICE_TOKEN,\n useClass: TypeormOutboxService,\n };\n const brokerProvider: Provider = {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useValue: null,\n };\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [\n TypeOrmModule.forFeature(\n [TypeormOutboxEntity],\n options.typeOrmConnectionName,\n ),\n ],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static forRootAsync(options: TypeormOutboxModuleAsyncOptions): DynamicModule {\n const configProvider: Provider = {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = options.useFactory?.(\n ...args,\n ) as TypeormOutboxModuleOptions;\n return moduleOptions;\n },\n inject: options.inject || [],\n };\n const serviceProvider: Provider = {\n provide: TYPEORM_OUTBOX_SERVICE_TOKEN,\n useClass: TypeormOutboxService,\n };\n const brokerProvider: Provider = {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useValue: null,\n };\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [TypeOrmModule.forFeature([TypeormOutboxEntity], \"default\")],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static registerCronAsync(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): DynamicModule {\n const configProvider: Provider = {\n provide: TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = options.useFactory?.(\n ...args,\n ) as TypeormOutboxRegisterCronModuleOptions;\n return moduleOptions;\n },\n inject: options.inject || [],\n };\n\n const brokerProvider: Provider = {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = options?.useFactory?.(\n ...args,\n ) as TypeormOutboxRegisterCronModuleOptions;\n return ClientProxyFactory.create(moduleOptions?.kafkaConfig ?? {});\n },\n inject: options.inject || [],\n };\n const serviceProvider: Provider = {\n provide: TYPEORM_OUTBOX_SERVICE_TOKEN,\n useClass: TypeormOutboxService,\n };\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [\n ScheduleModule.forRoot(),\n TypeOrmModule.forFeature([TypeormOutboxEntity], \"default\")\n ],\n controllers: [TypeormOutboxController],\n providers: [configProvider, brokerProvider, serviceProvider],\n exports: [configProvider, brokerProvider, serviceProvider],\n };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["CronExpression","CronJob","CronExpression","TypeOrmModule","ClientProxyFactory","ScheduleModule"],"sources":["../src/core/typeorm-outbox.di-tokens.ts","../src/core/typeorm-outbox.entity.ts","../src/core/typeorm-outbox.interfaces.ts","../src/core/typeorm-outbox-cron.service.ts","../src/core/typeorm-outbox.service.ts","../src/core/typeorm-outbox.module.ts"],"sourcesContent":["import { Inject } from \"@nestjs/common\";\n\nexport const TYPEORM_OUTBOX_CRON_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_CRON_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_SERVICE_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_SERVICE_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_BROKER_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_BROKER_TOKEN\",\n);\n\nexport const InjectTypeormOutboxCronConfig = () =>\n Inject(TYPEORM_OUTBOX_CRON_CONFIG_TOKEN);\nexport const InjectTypeormOutboxModuleConfig = () =>\n Inject(TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN);\nexport const InjectTypeormOutboxService = () =>\n Inject(TYPEORM_OUTBOX_SERVICE_TOKEN);\nexport const InjectTypeormOutboxBroker = () =>\n Inject(TYPEORM_OUTBOX_BROKER_TOKEN);\n","import {\n Column,\n CreateDateColumn,\n Entity,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from \"typeorm\";\n\n@Entity('outbox')\nexport class TypeormOutboxEntity {\n @PrimaryGeneratedColumn()\n id!: number;\n\n @CreateDateColumn({ name: 'created_at' })\n createdAt!: Date;\n\n @UpdateDateColumn({ name: 'updated_at' })\n updatedAt!: Date;\n\n @Column(\"character varying\", { name: 'destination_topic' })\n destinationTopic!: string;\n\n @Column(\"jsonb\", { nullable: true })\n headers!: Record<string, string>;\n\n @Column(\"jsonb\", { nullable: true })\n keys!: Record<string, unknown>;\n\n @Column(\"jsonb\")\n payload!: Record<string, any>;\n}\n","import { KafkaOptions } from \"@nestjs/microservices\";\nimport { InjectionToken, ModuleMetadata, Type } from \"@nestjs/common\";\nimport { CronExpression } from \"@nestjs/schedule\";\n\nexport class TypeormOutboxRegisterCronModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n kafkaConfig?: KafkaOptions = {};\n cronExpression?: string = CronExpression.EVERY_10_SECONDS;\n}\n\nexport interface TypeormOutboxRegisterCronAsyncOptions\n extends Pick<ModuleMetadata, \"imports\"> {\n inject?: InjectionToken[];\n useExisting?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useClass?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useFactory?: (\n ...args: unknown[]\n ) =>\n | Promise<TypeormOutboxRegisterCronModuleOptions>\n | TypeormOutboxRegisterCronModuleOptions;\n}\n\nexport class TypeormOutboxModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n}\n\nexport interface TypeormOutboxModuleAsyncOptions\n extends Pick<ModuleMetadata, \"imports\"> {\n inject?: InjectionToken[];\n useFactory?: (\n ...args: unknown[]\n ) => Promise<TypeormOutboxModuleOptions> | TypeormOutboxModuleOptions;\n}\n","import { Injectable, OnModuleInit } from \"@nestjs/common\";\nimport { InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig } from \"./typeorm-outbox.di-tokens\";\nimport { hashStringToInt } from \"@globalart/text-utils\";\nimport { EntityManager, Repository } from \"typeorm\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { InjectRepository } from \"@nestjs/typeorm\";\nimport { firstValueFrom } from \"rxjs\";\nimport { ClientProxy } from \"@nestjs/microservices\";\nimport { CronJob } from \"cron\";\nimport { TypeormOutboxRegisterCronModuleOptions } from \"./typeorm-outbox.interfaces\";\nimport { CronExpression } from \"@nestjs/schedule\";\n\n@Injectable()\nexport class TypeormOutboxCronService implements OnModuleInit {\n constructor(\n private readonly entityManager: EntityManager,\n @InjectRepository(TypeormOutboxEntity)\n private readonly outboxRepository: Repository<TypeormOutboxEntity>,\n @InjectTypeormOutboxBroker()\n private readonly brokerClient: ClientProxy,\n @InjectTypeormOutboxCronConfig()\n private readonly moduleConfig: TypeormOutboxRegisterCronModuleOptions,\n ) {}\n\n onModuleInit() {\n const cronJob = new CronJob(this.moduleConfig.cronExpression ?? CronExpression.EVERY_10_SECONDS, () => {\n this.executeCronJob();\n });\n cronJob.start();\n }\n\n async executeCronJob() {\n const lockId = hashStringToInt(\"typeorm-outbox-cron-job\");\n const [{ pg_try_advisory_xact_lock: acquired }] =\n await this.entityManager.query<{ pg_try_advisory_xact_lock: boolean }[]>(\n `SELECT pg_try_advisory_xact_lock(${lockId})`,\n );\n if (!acquired) {\n return;\n }\n\n const entities = await this.outboxRepository.find();\n \n for (const entity of entities) {\n await firstValueFrom(\n this.brokerClient.emit(entity.destinationTopic, {\n key: entity.keys,\n value: entity.payload,\n headers: entity.headers,\n }),\n );\n await this.outboxRepository.delete(entity.id);\n }\n }\n}\n","import { Injectable } from \"@nestjs/common\";\nimport { InjectRepository } from \"@nestjs/typeorm\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { Repository } from \"typeorm\";\n\nexport interface CreateOutboxOptions {\n destinationTopic: string;\n payload: Record<string, unknown>;\n headers?: Record<string, string>;\n keys?: Record<string, unknown>;\n}\n\n@Injectable()\nexport class TypeormOutboxService {\n constructor(\n @InjectRepository(TypeormOutboxEntity)\n private readonly outboxRepository: Repository<TypeormOutboxEntity>,\n ) {}\n\n async create(options: CreateOutboxOptions): Promise<void> {\n await this.outboxRepository.save({\n destinationTopic: options.destinationTopic,\n headers: options.headers,\n keys: options.keys,\n payload: options.payload,\n });\n }\n}\n","import { TypeOrmModule } from \"@nestjs/typeorm\";\nimport { DynamicModule, Module, Provider } from \"@nestjs/common\";\nimport {\n TypeormOutboxRegisterCronAsyncOptions,\n TypeormOutboxRegisterCronModuleOptions,\n TypeormOutboxModuleOptions,\n TypeormOutboxModuleAsyncOptions,\n} from \"./typeorm-outbox.interfaces\";\nimport {\n TYPEORM_OUTBOX_BROKER_TOKEN,\n TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n TYPEORM_OUTBOX_SERVICE_TOKEN,\n} from \"./typeorm-outbox.di-tokens\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { TypeormOutboxService } from \"./typeorm-outbox.service\";\nimport { ScheduleModule } from \"@nestjs/schedule\";\nimport { ClientProxyFactory } from \"@nestjs/microservices\";\nimport { TypeormOutboxCronService } from \"./typeorm-outbox-cron.service\";\n\n@Module({})\nexport class TypeormOutboxModule {\n private static createServiceProvider(): Provider {\n return {\n provide: TYPEORM_OUTBOX_SERVICE_TOKEN,\n useClass: TypeormOutboxService,\n };\n }\n\n private static createBrokerProvider(useValue: unknown = null): Provider {\n return {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useValue,\n };\n }\n\n private static createTypeOrmFeature(connectionName?: string) {\n return TypeOrmModule.forFeature(\n [TypeormOutboxEntity],\n connectionName || \"default\",\n );\n }\n\n private static createModuleConfigProvider(\n options: TypeormOutboxModuleOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useValue: {\n ...new TypeormOutboxModuleOptions(),\n ...options,\n },\n };\n }\n\n private static createAsyncModuleConfigProvider(\n options: TypeormOutboxModuleAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = (await options.useFactory?.(...args)) as\n | TypeormOutboxModuleOptions;\n \n return {\n ...new TypeormOutboxModuleOptions(),\n ...moduleOptions,\n };\n },\n inject: options.inject || [],\n };\n }\n\n private static createCronConfigProvider(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = await options.useFactory?.(...args);\n return {\n ...new TypeormOutboxRegisterCronModuleOptions(),\n ...moduleOptions,\n };\n },\n inject: options.inject || [],\n };\n }\n\n private static createCronBrokerProvider(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = await options.useFactory?.(...args);\n const config = {\n ...new TypeormOutboxRegisterCronModuleOptions(),\n ...moduleOptions,\n };\n return ClientProxyFactory.create(config?.kafkaConfig ?? {});\n },\n inject: options.inject || [],\n };\n }\n\n static forRoot(options: TypeormOutboxModuleOptions = {}): DynamicModule {\n const configProvider = this.createModuleConfigProvider(options);\n const serviceProvider = this.createServiceProvider();\n const brokerProvider = this.createBrokerProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [this.createTypeOrmFeature(options.typeOrmConnectionName)],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static forRootAsync(\n options: TypeormOutboxModuleAsyncOptions,\n ): DynamicModule {\n const configProvider = this.createAsyncModuleConfigProvider(options);\n const serviceProvider = this.createServiceProvider();\n const brokerProvider = this.createBrokerProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [this.createTypeOrmFeature()],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static registerCronAsync(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): DynamicModule {\n const configProvider = this.createCronConfigProvider(options);\n const brokerProvider = this.createCronBrokerProvider(options);\n const serviceProvider = this.createServiceProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [\n ScheduleModule.forRoot(),\n this.createTypeOrmFeature(),\n ],\n providers: [\n TypeormOutboxCronService,\n configProvider,\n brokerProvider,\n serviceProvider,\n ],\n exports: [configProvider, brokerProvider, serviceProvider],\n };\n }\n}\n"],"mappings":"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"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { DynamicModule, InjectionToken, ModuleMetadata, OnModuleInit, Type } from "@nestjs/common";
|
|
1
2
|
import { EntityManager, Repository } from "typeorm";
|
|
2
3
|
import { ClientProxy, KafkaOptions } from "@nestjs/microservices";
|
|
3
|
-
import { DynamicModule, InjectionToken, ModuleMetadata, Type } from "@nestjs/common";
|
|
4
4
|
|
|
5
5
|
//#region src/core/typeorm-outbox.entity.d.ts
|
|
6
6
|
declare class TypeormOutboxEntity {
|
|
@@ -9,17 +9,38 @@ declare class TypeormOutboxEntity {
|
|
|
9
9
|
updatedAt: Date;
|
|
10
10
|
destinationTopic: string;
|
|
11
11
|
headers: Record<string, string>;
|
|
12
|
-
keys: Record<
|
|
12
|
+
keys: Record<string, unknown>;
|
|
13
13
|
payload: Record<string, any>;
|
|
14
14
|
}
|
|
15
15
|
//#endregion
|
|
16
|
-
//#region src/core/typeorm-outbox.
|
|
17
|
-
declare class
|
|
16
|
+
//#region src/core/typeorm-outbox.interfaces.d.ts
|
|
17
|
+
declare class TypeormOutboxRegisterCronModuleOptions {
|
|
18
|
+
typeOrmConnectionName?: string;
|
|
19
|
+
kafkaConfig?: KafkaOptions;
|
|
20
|
+
cronExpression?: string;
|
|
21
|
+
}
|
|
22
|
+
interface TypeormOutboxRegisterCronAsyncOptions extends Pick<ModuleMetadata, "imports"> {
|
|
23
|
+
inject?: InjectionToken[];
|
|
24
|
+
useExisting?: Type<TypeormOutboxRegisterCronModuleOptions>;
|
|
25
|
+
useClass?: Type<TypeormOutboxRegisterCronModuleOptions>;
|
|
26
|
+
useFactory?: (...args: unknown[]) => Promise<TypeormOutboxRegisterCronModuleOptions> | TypeormOutboxRegisterCronModuleOptions;
|
|
27
|
+
}
|
|
28
|
+
declare class TypeormOutboxModuleOptions {
|
|
29
|
+
typeOrmConnectionName?: string;
|
|
30
|
+
}
|
|
31
|
+
interface TypeormOutboxModuleAsyncOptions extends Pick<ModuleMetadata, "imports"> {
|
|
32
|
+
inject?: InjectionToken[];
|
|
33
|
+
useFactory?: (...args: unknown[]) => Promise<TypeormOutboxModuleOptions> | TypeormOutboxModuleOptions;
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region src/core/typeorm-outbox-cron.service.d.ts
|
|
37
|
+
declare class TypeormOutboxCronService implements OnModuleInit {
|
|
18
38
|
private readonly entityManager;
|
|
19
39
|
private readonly outboxRepository;
|
|
20
40
|
private readonly brokerClient;
|
|
21
|
-
|
|
22
|
-
|
|
41
|
+
private readonly moduleConfig;
|
|
42
|
+
constructor(entityManager: EntityManager, outboxRepository: Repository<TypeormOutboxEntity>, brokerClient: ClientProxy, moduleConfig: TypeormOutboxRegisterCronModuleOptions);
|
|
43
|
+
onModuleInit(): void;
|
|
23
44
|
executeCronJob(): Promise<void>;
|
|
24
45
|
}
|
|
25
46
|
//#endregion
|
|
@@ -33,45 +54,32 @@ declare const InjectTypeormOutboxModuleConfig: () => PropertyDecorator & Paramet
|
|
|
33
54
|
declare const InjectTypeormOutboxService: () => PropertyDecorator & ParameterDecorator;
|
|
34
55
|
declare const InjectTypeormOutboxBroker: () => PropertyDecorator & ParameterDecorator;
|
|
35
56
|
//#endregion
|
|
36
|
-
//#region src/core/typeorm-outbox.interfaces.d.ts
|
|
37
|
-
declare class TypeormOutboxRegisterCronModuleOptions {
|
|
38
|
-
typeOrmConnectionName?: string;
|
|
39
|
-
kafkaConfig?: KafkaOptions;
|
|
40
|
-
}
|
|
41
|
-
interface TypeormOutboxRegisterCronAsyncOptions extends Pick<ModuleMetadata, "imports"> {
|
|
42
|
-
inject?: any[];
|
|
43
|
-
useExisting?: Type<TypeormOutboxRegisterCronModuleOptions>;
|
|
44
|
-
useClass?: Type<TypeormOutboxRegisterCronModuleOptions>;
|
|
45
|
-
useFactory?: (...args: any[]) => Promise<TypeormOutboxRegisterCronModuleOptions> | TypeormOutboxRegisterCronModuleOptions;
|
|
46
|
-
}
|
|
47
|
-
declare class TypeormOutboxModuleOptions {
|
|
48
|
-
typeOrmConnectionName?: string;
|
|
49
|
-
}
|
|
50
|
-
declare class TypeormOutboxModuleAsyncOptions {
|
|
51
|
-
imports?: Type[];
|
|
52
|
-
inject?: InjectionToken[];
|
|
53
|
-
useFactory?: (...args: any[]) => Promise<TypeormOutboxModuleOptions> | TypeormOutboxModuleOptions;
|
|
54
|
-
}
|
|
55
|
-
//#endregion
|
|
56
57
|
//#region src/core/typeorm-outbox.module.d.ts
|
|
57
58
|
declare class TypeormOutboxModule {
|
|
59
|
+
private static createServiceProvider;
|
|
60
|
+
private static createBrokerProvider;
|
|
61
|
+
private static createTypeOrmFeature;
|
|
62
|
+
private static createModuleConfigProvider;
|
|
63
|
+
private static createAsyncModuleConfigProvider;
|
|
64
|
+
private static createCronConfigProvider;
|
|
65
|
+
private static createCronBrokerProvider;
|
|
58
66
|
static forRoot(options?: TypeormOutboxModuleOptions): DynamicModule;
|
|
59
67
|
static forRootAsync(options: TypeormOutboxModuleAsyncOptions): DynamicModule;
|
|
60
68
|
static registerCronAsync(options: TypeormOutboxRegisterCronAsyncOptions): DynamicModule;
|
|
61
69
|
}
|
|
62
70
|
//#endregion
|
|
63
71
|
//#region src/core/typeorm-outbox.service.d.ts
|
|
64
|
-
|
|
72
|
+
interface CreateOutboxOptions {
|
|
65
73
|
destinationTopic: string;
|
|
66
|
-
payload: Record<string,
|
|
74
|
+
payload: Record<string, unknown>;
|
|
67
75
|
headers?: Record<string, string>;
|
|
68
|
-
keys?: Record<
|
|
69
|
-
}
|
|
76
|
+
keys?: Record<string, unknown>;
|
|
77
|
+
}
|
|
70
78
|
declare class TypeormOutboxService {
|
|
71
79
|
private readonly outboxRepository;
|
|
72
80
|
constructor(outboxRepository: Repository<TypeormOutboxEntity>);
|
|
73
|
-
create(options:
|
|
81
|
+
create(options: CreateOutboxOptions): Promise<void>;
|
|
74
82
|
}
|
|
75
83
|
//#endregion
|
|
76
|
-
export { InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig, InjectTypeormOutboxService, TYPEORM_OUTBOX_BROKER_TOKEN, TYPEORM_OUTBOX_CRON_CONFIG_TOKEN, TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN, TYPEORM_OUTBOX_SERVICE_TOKEN,
|
|
84
|
+
export { CreateOutboxOptions, InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig, InjectTypeormOutboxService, TYPEORM_OUTBOX_BROKER_TOKEN, TYPEORM_OUTBOX_CRON_CONFIG_TOKEN, TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN, TYPEORM_OUTBOX_SERVICE_TOKEN, TypeormOutboxCronService, TypeormOutboxEntity, TypeormOutboxModule, TypeormOutboxModuleAsyncOptions, TypeormOutboxModuleOptions, TypeormOutboxRegisterCronAsyncOptions, TypeormOutboxRegisterCronModuleOptions, TypeormOutboxService };
|
|
77
85
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DynamicModule, InjectionToken, ModuleMetadata, Type } from "@nestjs/common";
|
|
1
|
+
import { DynamicModule, InjectionToken, ModuleMetadata, OnModuleInit, Type } from "@nestjs/common";
|
|
2
2
|
import { EntityManager, Repository } from "typeorm";
|
|
3
3
|
import { ClientProxy, KafkaOptions } from "@nestjs/microservices";
|
|
4
4
|
|
|
@@ -9,17 +9,38 @@ declare class TypeormOutboxEntity {
|
|
|
9
9
|
updatedAt: Date;
|
|
10
10
|
destinationTopic: string;
|
|
11
11
|
headers: Record<string, string>;
|
|
12
|
-
keys: Record<
|
|
12
|
+
keys: Record<string, unknown>;
|
|
13
13
|
payload: Record<string, any>;
|
|
14
14
|
}
|
|
15
15
|
//#endregion
|
|
16
|
-
//#region src/core/typeorm-outbox.
|
|
17
|
-
declare class
|
|
16
|
+
//#region src/core/typeorm-outbox.interfaces.d.ts
|
|
17
|
+
declare class TypeormOutboxRegisterCronModuleOptions {
|
|
18
|
+
typeOrmConnectionName?: string;
|
|
19
|
+
kafkaConfig?: KafkaOptions;
|
|
20
|
+
cronExpression?: string;
|
|
21
|
+
}
|
|
22
|
+
interface TypeormOutboxRegisterCronAsyncOptions extends Pick<ModuleMetadata, "imports"> {
|
|
23
|
+
inject?: InjectionToken[];
|
|
24
|
+
useExisting?: Type<TypeormOutboxRegisterCronModuleOptions>;
|
|
25
|
+
useClass?: Type<TypeormOutboxRegisterCronModuleOptions>;
|
|
26
|
+
useFactory?: (...args: unknown[]) => Promise<TypeormOutboxRegisterCronModuleOptions> | TypeormOutboxRegisterCronModuleOptions;
|
|
27
|
+
}
|
|
28
|
+
declare class TypeormOutboxModuleOptions {
|
|
29
|
+
typeOrmConnectionName?: string;
|
|
30
|
+
}
|
|
31
|
+
interface TypeormOutboxModuleAsyncOptions extends Pick<ModuleMetadata, "imports"> {
|
|
32
|
+
inject?: InjectionToken[];
|
|
33
|
+
useFactory?: (...args: unknown[]) => Promise<TypeormOutboxModuleOptions> | TypeormOutboxModuleOptions;
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region src/core/typeorm-outbox-cron.service.d.ts
|
|
37
|
+
declare class TypeormOutboxCronService implements OnModuleInit {
|
|
18
38
|
private readonly entityManager;
|
|
19
39
|
private readonly outboxRepository;
|
|
20
40
|
private readonly brokerClient;
|
|
21
|
-
|
|
22
|
-
|
|
41
|
+
private readonly moduleConfig;
|
|
42
|
+
constructor(entityManager: EntityManager, outboxRepository: Repository<TypeormOutboxEntity>, brokerClient: ClientProxy, moduleConfig: TypeormOutboxRegisterCronModuleOptions);
|
|
43
|
+
onModuleInit(): void;
|
|
23
44
|
executeCronJob(): Promise<void>;
|
|
24
45
|
}
|
|
25
46
|
//#endregion
|
|
@@ -33,45 +54,32 @@ declare const InjectTypeormOutboxModuleConfig: () => PropertyDecorator & Paramet
|
|
|
33
54
|
declare const InjectTypeormOutboxService: () => PropertyDecorator & ParameterDecorator;
|
|
34
55
|
declare const InjectTypeormOutboxBroker: () => PropertyDecorator & ParameterDecorator;
|
|
35
56
|
//#endregion
|
|
36
|
-
//#region src/core/typeorm-outbox.interfaces.d.ts
|
|
37
|
-
declare class TypeormOutboxRegisterCronModuleOptions {
|
|
38
|
-
typeOrmConnectionName?: string;
|
|
39
|
-
kafkaConfig?: KafkaOptions;
|
|
40
|
-
}
|
|
41
|
-
interface TypeormOutboxRegisterCronAsyncOptions extends Pick<ModuleMetadata, "imports"> {
|
|
42
|
-
inject?: any[];
|
|
43
|
-
useExisting?: Type<TypeormOutboxRegisterCronModuleOptions>;
|
|
44
|
-
useClass?: Type<TypeormOutboxRegisterCronModuleOptions>;
|
|
45
|
-
useFactory?: (...args: any[]) => Promise<TypeormOutboxRegisterCronModuleOptions> | TypeormOutboxRegisterCronModuleOptions;
|
|
46
|
-
}
|
|
47
|
-
declare class TypeormOutboxModuleOptions {
|
|
48
|
-
typeOrmConnectionName?: string;
|
|
49
|
-
}
|
|
50
|
-
declare class TypeormOutboxModuleAsyncOptions {
|
|
51
|
-
imports?: Type[];
|
|
52
|
-
inject?: InjectionToken[];
|
|
53
|
-
useFactory?: (...args: any[]) => Promise<TypeormOutboxModuleOptions> | TypeormOutboxModuleOptions;
|
|
54
|
-
}
|
|
55
|
-
//#endregion
|
|
56
57
|
//#region src/core/typeorm-outbox.module.d.ts
|
|
57
58
|
declare class TypeormOutboxModule {
|
|
59
|
+
private static createServiceProvider;
|
|
60
|
+
private static createBrokerProvider;
|
|
61
|
+
private static createTypeOrmFeature;
|
|
62
|
+
private static createModuleConfigProvider;
|
|
63
|
+
private static createAsyncModuleConfigProvider;
|
|
64
|
+
private static createCronConfigProvider;
|
|
65
|
+
private static createCronBrokerProvider;
|
|
58
66
|
static forRoot(options?: TypeormOutboxModuleOptions): DynamicModule;
|
|
59
67
|
static forRootAsync(options: TypeormOutboxModuleAsyncOptions): DynamicModule;
|
|
60
68
|
static registerCronAsync(options: TypeormOutboxRegisterCronAsyncOptions): DynamicModule;
|
|
61
69
|
}
|
|
62
70
|
//#endregion
|
|
63
71
|
//#region src/core/typeorm-outbox.service.d.ts
|
|
64
|
-
|
|
72
|
+
interface CreateOutboxOptions {
|
|
65
73
|
destinationTopic: string;
|
|
66
|
-
payload: Record<string,
|
|
74
|
+
payload: Record<string, unknown>;
|
|
67
75
|
headers?: Record<string, string>;
|
|
68
|
-
keys?: Record<
|
|
69
|
-
}
|
|
76
|
+
keys?: Record<string, unknown>;
|
|
77
|
+
}
|
|
70
78
|
declare class TypeormOutboxService {
|
|
71
79
|
private readonly outboxRepository;
|
|
72
80
|
constructor(outboxRepository: Repository<TypeormOutboxEntity>);
|
|
73
|
-
create(options:
|
|
81
|
+
create(options: CreateOutboxOptions): Promise<void>;
|
|
74
82
|
}
|
|
75
83
|
//#endregion
|
|
76
|
-
export { InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig, InjectTypeormOutboxService, TYPEORM_OUTBOX_BROKER_TOKEN, TYPEORM_OUTBOX_CRON_CONFIG_TOKEN, TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN, TYPEORM_OUTBOX_SERVICE_TOKEN,
|
|
84
|
+
export { CreateOutboxOptions, InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig, InjectTypeormOutboxService, TYPEORM_OUTBOX_BROKER_TOKEN, TYPEORM_OUTBOX_CRON_CONFIG_TOKEN, TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN, TYPEORM_OUTBOX_SERVICE_TOKEN, TypeormOutboxCronService, TypeormOutboxEntity, TypeormOutboxModule, TypeormOutboxModuleAsyncOptions, TypeormOutboxModuleOptions, TypeormOutboxRegisterCronAsyncOptions, TypeormOutboxRegisterCronModuleOptions, TypeormOutboxService };
|
|
77
85
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Cron, CronExpression, ScheduleModule } from "@nestjs/schedule";
|
|
1
|
+
import { Inject, Injectable, Module } from "@nestjs/common";
|
|
3
2
|
import { hashStringToInt } from "@globalart/text-utils";
|
|
4
3
|
import { Column, CreateDateColumn, Entity, EntityManager, PrimaryGeneratedColumn, Repository, UpdateDateColumn } from "typeorm";
|
|
5
4
|
import { InjectRepository, TypeOrmModule } from "@nestjs/typeorm";
|
|
6
5
|
import { firstValueFrom } from "rxjs";
|
|
7
6
|
import { ClientProxy, ClientProxyFactory } from "@nestjs/microservices";
|
|
7
|
+
import { CronJob } from "cron";
|
|
8
|
+
import { CronExpression, ScheduleModule } from "@nestjs/schedule";
|
|
8
9
|
|
|
9
10
|
//#region src/core/typeorm-outbox.di-tokens.ts
|
|
10
11
|
const TYPEORM_OUTBOX_CRON_CONFIG_TOKEN = Symbol("TYPEORM_OUTBOX_CRON_CONFIG_TOKEN");
|
|
@@ -33,7 +34,7 @@ function __decorate(decorators, target, key, desc) {
|
|
|
33
34
|
|
|
34
35
|
//#endregion
|
|
35
36
|
//#region src/core/typeorm-outbox.entity.ts
|
|
36
|
-
var _ref$2, _ref2$1, _ref3$1, _ref4, _ref5;
|
|
37
|
+
var _ref$2, _ref2$1, _ref3$1, _ref4$1, _ref5;
|
|
37
38
|
let TypeormOutboxEntity = class TypeormOutboxEntity {
|
|
38
39
|
id;
|
|
39
40
|
createdAt;
|
|
@@ -48,10 +49,21 @@ __decorate([CreateDateColumn({ name: "created_at" }), __decorateMetadata("design
|
|
|
48
49
|
__decorate([UpdateDateColumn({ name: "updated_at" }), __decorateMetadata("design:type", typeof (_ref2$1 = typeof Date !== "undefined" && Date) === "function" ? _ref2$1 : Object)], TypeormOutboxEntity.prototype, "updatedAt", void 0);
|
|
49
50
|
__decorate([Column("character varying", { name: "destination_topic" }), __decorateMetadata("design:type", String)], TypeormOutboxEntity.prototype, "destinationTopic", void 0);
|
|
50
51
|
__decorate([Column("jsonb", { nullable: true }), __decorateMetadata("design:type", typeof (_ref3$1 = typeof Record !== "undefined" && Record) === "function" ? _ref3$1 : Object)], TypeormOutboxEntity.prototype, "headers", void 0);
|
|
51
|
-
__decorate([Column("jsonb", { nullable: true }), __decorateMetadata("design:type", typeof (_ref4 = typeof Record !== "undefined" && Record) === "function" ? _ref4 : Object)], TypeormOutboxEntity.prototype, "keys", void 0);
|
|
52
|
+
__decorate([Column("jsonb", { nullable: true }), __decorateMetadata("design:type", typeof (_ref4$1 = typeof Record !== "undefined" && Record) === "function" ? _ref4$1 : Object)], TypeormOutboxEntity.prototype, "keys", void 0);
|
|
52
53
|
__decorate([Column("jsonb"), __decorateMetadata("design:type", typeof (_ref5 = typeof Record !== "undefined" && Record) === "function" ? _ref5 : Object)], TypeormOutboxEntity.prototype, "payload", void 0);
|
|
53
54
|
TypeormOutboxEntity = __decorate([Entity("outbox")], TypeormOutboxEntity);
|
|
54
55
|
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region src/core/typeorm-outbox.interfaces.ts
|
|
58
|
+
var TypeormOutboxRegisterCronModuleOptions = class {
|
|
59
|
+
typeOrmConnectionName = "default";
|
|
60
|
+
kafkaConfig = {};
|
|
61
|
+
cronExpression = CronExpression.EVERY_10_SECONDS;
|
|
62
|
+
};
|
|
63
|
+
var TypeormOutboxModuleOptions = class {
|
|
64
|
+
typeOrmConnectionName = "default";
|
|
65
|
+
};
|
|
66
|
+
|
|
55
67
|
//#endregion
|
|
56
68
|
//#region \0@oxc-project+runtime@0.108.0/helpers/decorateParam.js
|
|
57
69
|
function __decorateParam(paramIndex, decorator) {
|
|
@@ -61,16 +73,19 @@ function __decorateParam(paramIndex, decorator) {
|
|
|
61
73
|
}
|
|
62
74
|
|
|
63
75
|
//#endregion
|
|
64
|
-
//#region src/core/typeorm-outbox.
|
|
65
|
-
var _ref$1, _ref2, _ref3;
|
|
66
|
-
let
|
|
67
|
-
constructor(entityManager, outboxRepository, brokerClient) {
|
|
76
|
+
//#region src/core/typeorm-outbox-cron.service.ts
|
|
77
|
+
var _ref$1, _ref2, _ref3, _ref4;
|
|
78
|
+
let TypeormOutboxCronService = class TypeormOutboxCronService {
|
|
79
|
+
constructor(entityManager, outboxRepository, brokerClient, moduleConfig) {
|
|
68
80
|
this.entityManager = entityManager;
|
|
69
81
|
this.outboxRepository = outboxRepository;
|
|
70
82
|
this.brokerClient = brokerClient;
|
|
83
|
+
this.moduleConfig = moduleConfig;
|
|
71
84
|
}
|
|
72
|
-
|
|
73
|
-
|
|
85
|
+
onModuleInit() {
|
|
86
|
+
new CronJob(this.moduleConfig.cronExpression ?? CronExpression.EVERY_10_SECONDS, () => {
|
|
87
|
+
this.executeCronJob();
|
|
88
|
+
}).start();
|
|
74
89
|
}
|
|
75
90
|
async executeCronJob() {
|
|
76
91
|
const lockId = hashStringToInt("typeorm-outbox-cron-job");
|
|
@@ -87,37 +102,18 @@ let TypeormOutboxController = class TypeormOutboxController {
|
|
|
87
102
|
}
|
|
88
103
|
}
|
|
89
104
|
};
|
|
90
|
-
__decorate([
|
|
91
|
-
|
|
92
|
-
__decorateMetadata("design:type", Function),
|
|
93
|
-
__decorateMetadata("design:paramtypes", []),
|
|
94
|
-
__decorateMetadata("design:returntype", Promise)
|
|
95
|
-
], TypeormOutboxController.prototype, "handleOutboxCron", null);
|
|
96
|
-
TypeormOutboxController = __decorate([
|
|
97
|
-
Controller(),
|
|
105
|
+
TypeormOutboxCronService = __decorate([
|
|
106
|
+
Injectable(),
|
|
98
107
|
__decorateParam(1, InjectRepository(TypeormOutboxEntity)),
|
|
99
108
|
__decorateParam(2, InjectTypeormOutboxBroker()),
|
|
109
|
+
__decorateParam(3, InjectTypeormOutboxCronConfig()),
|
|
100
110
|
__decorateMetadata("design:paramtypes", [
|
|
101
111
|
typeof (_ref$1 = typeof EntityManager !== "undefined" && EntityManager) === "function" ? _ref$1 : Object,
|
|
102
112
|
typeof (_ref2 = typeof Repository !== "undefined" && Repository) === "function" ? _ref2 : Object,
|
|
103
|
-
typeof (_ref3 = typeof ClientProxy !== "undefined" && ClientProxy) === "function" ? _ref3 : Object
|
|
113
|
+
typeof (_ref3 = typeof ClientProxy !== "undefined" && ClientProxy) === "function" ? _ref3 : Object,
|
|
114
|
+
typeof (_ref4 = typeof TypeormOutboxRegisterCronModuleOptions !== "undefined" && TypeormOutboxRegisterCronModuleOptions) === "function" ? _ref4 : Object
|
|
104
115
|
])
|
|
105
|
-
],
|
|
106
|
-
|
|
107
|
-
//#endregion
|
|
108
|
-
//#region src/core/typeorm-outbox.interfaces.ts
|
|
109
|
-
var TypeormOutboxRegisterCronModuleOptions = class {
|
|
110
|
-
typeOrmConnectionName = "default";
|
|
111
|
-
kafkaConfig = {};
|
|
112
|
-
};
|
|
113
|
-
var TypeormOutboxModuleOptions = class {
|
|
114
|
-
typeOrmConnectionName = "default";
|
|
115
|
-
};
|
|
116
|
-
var TypeormOutboxModuleAsyncOptions = class {
|
|
117
|
-
imports = [];
|
|
118
|
-
inject = [];
|
|
119
|
-
useFactory;
|
|
120
|
-
};
|
|
116
|
+
], TypeormOutboxCronService);
|
|
121
117
|
|
|
122
118
|
//#endregion
|
|
123
119
|
//#region src/core/typeorm-outbox.service.ts
|
|
@@ -145,23 +141,78 @@ TypeormOutboxService = __decorate([
|
|
|
145
141
|
//#region src/core/typeorm-outbox.module.ts
|
|
146
142
|
var _TypeormOutboxModule;
|
|
147
143
|
let TypeormOutboxModule = _TypeormOutboxModule = class TypeormOutboxModule {
|
|
148
|
-
static
|
|
149
|
-
|
|
150
|
-
provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,
|
|
151
|
-
useValue: options
|
|
152
|
-
};
|
|
153
|
-
const serviceProvider = {
|
|
144
|
+
static createServiceProvider() {
|
|
145
|
+
return {
|
|
154
146
|
provide: TYPEORM_OUTBOX_SERVICE_TOKEN,
|
|
155
147
|
useClass: TypeormOutboxService
|
|
156
148
|
};
|
|
157
|
-
|
|
149
|
+
}
|
|
150
|
+
static createBrokerProvider(useValue = null) {
|
|
151
|
+
return {
|
|
158
152
|
provide: TYPEORM_OUTBOX_BROKER_TOKEN,
|
|
159
|
-
useValue
|
|
153
|
+
useValue
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
static createTypeOrmFeature(connectionName) {
|
|
157
|
+
return TypeOrmModule.forFeature([TypeormOutboxEntity], connectionName || "default");
|
|
158
|
+
}
|
|
159
|
+
static createModuleConfigProvider(options) {
|
|
160
|
+
return {
|
|
161
|
+
provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,
|
|
162
|
+
useValue: {
|
|
163
|
+
...new TypeormOutboxModuleOptions(),
|
|
164
|
+
...options
|
|
165
|
+
}
|
|
160
166
|
};
|
|
167
|
+
}
|
|
168
|
+
static createAsyncModuleConfigProvider(options) {
|
|
169
|
+
return {
|
|
170
|
+
provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,
|
|
171
|
+
useFactory: async (...args) => {
|
|
172
|
+
const moduleOptions = await options.useFactory?.(...args);
|
|
173
|
+
return {
|
|
174
|
+
...new TypeormOutboxModuleOptions(),
|
|
175
|
+
...moduleOptions
|
|
176
|
+
};
|
|
177
|
+
},
|
|
178
|
+
inject: options.inject || []
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
static createCronConfigProvider(options) {
|
|
182
|
+
return {
|
|
183
|
+
provide: TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,
|
|
184
|
+
useFactory: async (...args) => {
|
|
185
|
+
const moduleOptions = await options.useFactory?.(...args);
|
|
186
|
+
return {
|
|
187
|
+
...new TypeormOutboxRegisterCronModuleOptions(),
|
|
188
|
+
...moduleOptions
|
|
189
|
+
};
|
|
190
|
+
},
|
|
191
|
+
inject: options.inject || []
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
static createCronBrokerProvider(options) {
|
|
195
|
+
return {
|
|
196
|
+
provide: TYPEORM_OUTBOX_BROKER_TOKEN,
|
|
197
|
+
useFactory: async (...args) => {
|
|
198
|
+
const moduleOptions = await options.useFactory?.(...args);
|
|
199
|
+
const config = {
|
|
200
|
+
...new TypeormOutboxRegisterCronModuleOptions(),
|
|
201
|
+
...moduleOptions
|
|
202
|
+
};
|
|
203
|
+
return ClientProxyFactory.create(config?.kafkaConfig ?? {});
|
|
204
|
+
},
|
|
205
|
+
inject: options.inject || []
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
static forRoot(options = {}) {
|
|
209
|
+
const configProvider = this.createModuleConfigProvider(options);
|
|
210
|
+
const serviceProvider = this.createServiceProvider();
|
|
211
|
+
const brokerProvider = this.createBrokerProvider();
|
|
161
212
|
return {
|
|
162
213
|
module: _TypeormOutboxModule,
|
|
163
214
|
global: true,
|
|
164
|
-
imports: [
|
|
215
|
+
imports: [this.createTypeOrmFeature(options.typeOrmConnectionName)],
|
|
165
216
|
providers: [
|
|
166
217
|
configProvider,
|
|
167
218
|
serviceProvider,
|
|
@@ -175,25 +226,13 @@ let TypeormOutboxModule = _TypeormOutboxModule = class TypeormOutboxModule {
|
|
|
175
226
|
};
|
|
176
227
|
}
|
|
177
228
|
static forRootAsync(options) {
|
|
178
|
-
const configProvider =
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
return options.useFactory?.(...args);
|
|
182
|
-
},
|
|
183
|
-
inject: options.inject || []
|
|
184
|
-
};
|
|
185
|
-
const serviceProvider = {
|
|
186
|
-
provide: TYPEORM_OUTBOX_SERVICE_TOKEN,
|
|
187
|
-
useClass: TypeormOutboxService
|
|
188
|
-
};
|
|
189
|
-
const brokerProvider = {
|
|
190
|
-
provide: TYPEORM_OUTBOX_BROKER_TOKEN,
|
|
191
|
-
useValue: null
|
|
192
|
-
};
|
|
229
|
+
const configProvider = this.createAsyncModuleConfigProvider(options);
|
|
230
|
+
const serviceProvider = this.createServiceProvider();
|
|
231
|
+
const brokerProvider = this.createBrokerProvider();
|
|
193
232
|
return {
|
|
194
233
|
module: _TypeormOutboxModule,
|
|
195
234
|
global: true,
|
|
196
|
-
imports: [
|
|
235
|
+
imports: [this.createTypeOrmFeature()],
|
|
197
236
|
providers: [
|
|
198
237
|
configProvider,
|
|
199
238
|
serviceProvider,
|
|
@@ -207,31 +246,15 @@ let TypeormOutboxModule = _TypeormOutboxModule = class TypeormOutboxModule {
|
|
|
207
246
|
};
|
|
208
247
|
}
|
|
209
248
|
static registerCronAsync(options) {
|
|
210
|
-
const configProvider =
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
return options.useFactory?.(...args);
|
|
214
|
-
},
|
|
215
|
-
inject: options.inject || []
|
|
216
|
-
};
|
|
217
|
-
const brokerProvider = {
|
|
218
|
-
provide: TYPEORM_OUTBOX_BROKER_TOKEN,
|
|
219
|
-
useFactory: async (...args) => {
|
|
220
|
-
const moduleOptions = options?.useFactory?.(...args);
|
|
221
|
-
return ClientProxyFactory.create(moduleOptions?.kafkaConfig ?? {});
|
|
222
|
-
},
|
|
223
|
-
inject: options.inject || []
|
|
224
|
-
};
|
|
225
|
-
const serviceProvider = {
|
|
226
|
-
provide: TYPEORM_OUTBOX_SERVICE_TOKEN,
|
|
227
|
-
useClass: TypeormOutboxService
|
|
228
|
-
};
|
|
249
|
+
const configProvider = this.createCronConfigProvider(options);
|
|
250
|
+
const brokerProvider = this.createCronBrokerProvider(options);
|
|
251
|
+
const serviceProvider = this.createServiceProvider();
|
|
229
252
|
return {
|
|
230
253
|
module: _TypeormOutboxModule,
|
|
231
254
|
global: true,
|
|
232
|
-
imports: [ScheduleModule.forRoot(),
|
|
233
|
-
controllers: [TypeormOutboxController],
|
|
255
|
+
imports: [ScheduleModule.forRoot(), this.createTypeOrmFeature()],
|
|
234
256
|
providers: [
|
|
257
|
+
TypeormOutboxCronService,
|
|
235
258
|
configProvider,
|
|
236
259
|
brokerProvider,
|
|
237
260
|
serviceProvider
|
|
@@ -247,5 +270,5 @@ let TypeormOutboxModule = _TypeormOutboxModule = class TypeormOutboxModule {
|
|
|
247
270
|
TypeormOutboxModule = _TypeormOutboxModule = __decorate([Module({})], TypeormOutboxModule);
|
|
248
271
|
|
|
249
272
|
//#endregion
|
|
250
|
-
export { InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig, InjectTypeormOutboxService, TYPEORM_OUTBOX_BROKER_TOKEN, TYPEORM_OUTBOX_CRON_CONFIG_TOKEN, TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN, TYPEORM_OUTBOX_SERVICE_TOKEN,
|
|
273
|
+
export { InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig, InjectTypeormOutboxService, TYPEORM_OUTBOX_BROKER_TOKEN, TYPEORM_OUTBOX_CRON_CONFIG_TOKEN, TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN, TYPEORM_OUTBOX_SERVICE_TOKEN, TypeormOutboxCronService, TypeormOutboxEntity, TypeormOutboxModule, TypeormOutboxModuleOptions, TypeormOutboxRegisterCronModuleOptions, TypeormOutboxService };
|
|
251
274
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/core/typeorm-outbox.di-tokens.ts","../src/core/typeorm-outbox.entity.ts","../src/core/typeorm-outbox.controller.ts","../src/core/typeorm-outbox.interfaces.ts","../src/core/typeorm-outbox.service.ts","../src/core/typeorm-outbox.module.ts"],"sourcesContent":["import { Inject } from \"@nestjs/common\";\n\nexport const TYPEORM_OUTBOX_CRON_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_CRON_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_SERVICE_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_SERVICE_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_BROKER_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_BROKER_TOKEN\",\n);\n\nexport const InjectTypeormOutboxCronConfig = () =>\n Inject(TYPEORM_OUTBOX_CRON_CONFIG_TOKEN);\nexport const InjectTypeormOutboxModuleConfig = () =>\n Inject(TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN);\nexport const InjectTypeormOutboxService = () =>\n Inject(TYPEORM_OUTBOX_SERVICE_TOKEN);\nexport const InjectTypeormOutboxBroker = () =>\n Inject(TYPEORM_OUTBOX_BROKER_TOKEN);\n","import {\n Column,\n CreateDateColumn,\n Entity,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from \"typeorm\";\n\n@Entity('outbox')\nexport class TypeormOutboxEntity {\n @PrimaryGeneratedColumn()\n id!: number;\n\n @CreateDateColumn({ name: 'created_at' })\n createdAt!: Date;\n\n @UpdateDateColumn({ name: 'updated_at' })\n updatedAt!: Date;\n\n @Column(\"character varying\", { name: 'destination_topic' })\n destinationTopic!: string;\n\n @Column(\"jsonb\", { nullable: true })\n headers!: Record<string, string>;\n\n @Column(\"jsonb\", { nullable: true })\n keys!: Record<any, any>;\n\n @Column(\"jsonb\")\n payload!: Record<string, any>;\n}\n","import { Controller } from \"@nestjs/common\";\nimport { InjectTypeormOutboxBroker } from \"./typeorm-outbox.di-tokens\";\nimport { Cron, CronExpression } from \"@nestjs/schedule\";\nimport { hashStringToInt } from \"@globalart/text-utils\";\nimport { EntityManager, Repository } from \"typeorm\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { InjectRepository } from \"@nestjs/typeorm\";\nimport { firstValueFrom } from \"rxjs\";\nimport { ClientProxy } from \"@nestjs/microservices\";\n\n@Controller()\nexport class TypeormOutboxController {\n constructor(\n private readonly entityManager: EntityManager,\n @InjectRepository(TypeormOutboxEntity)\n private readonly outboxRepository: Repository<TypeormOutboxEntity>,\n @InjectTypeormOutboxBroker()\n private readonly brokerClient: ClientProxy,\n ) {}\n\n @Cron(CronExpression.EVERY_10_SECONDS)\n async handleOutboxCron() {\n await this.executeCronJob();\n }\n\n async executeCronJob() {\n const lockId = hashStringToInt(\"typeorm-outbox-cron-job\");\n const [{ pg_try_advisory_xact_lock: acquired }] =\n await this.entityManager.query<{ pg_try_advisory_xact_lock: boolean }[]>(\n `SELECT pg_try_advisory_xact_lock(${lockId})`,\n );\n\n if (!acquired) {\n return;\n }\n const entities = await this.outboxRepository.find();\n \n for (const entity of entities) {\n await firstValueFrom(\n this.brokerClient.emit(entity.destinationTopic, {\n key: entity.keys,\n value: entity.payload,\n headers: entity.headers,\n }),\n );\n await this.outboxRepository.delete(entity.id);\n }\n }\n}\n","import { KafkaOptions } from \"@nestjs/microservices\";\nimport { InjectionToken, ModuleMetadata, Type } from \"@nestjs/common\";\n\n// register cron options\nexport class TypeormOutboxRegisterCronModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n kafkaConfig?: KafkaOptions = {};\n}\nexport interface TypeormOutboxRegisterCronAsyncOptions extends Pick<\n ModuleMetadata,\n \"imports\"\n> {\n inject?: any[];\n useExisting?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useClass?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useFactory?: (\n ...args: any[]\n ) =>\n | Promise<TypeormOutboxRegisterCronModuleOptions>\n | TypeormOutboxRegisterCronModuleOptions;\n}\n\n// register module options\nexport class TypeormOutboxModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n}\nexport class TypeormOutboxModuleAsyncOptions {\n imports?: Type[] = [];\n inject?: InjectionToken[] = [];\n useFactory?: (\n ...args: any[]\n ) => Promise<TypeormOutboxModuleOptions> | TypeormOutboxModuleOptions;\n}\n","import { Injectable } from \"@nestjs/common\";\nimport { InjectRepository } from \"@nestjs/typeorm\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { Repository } from \"typeorm\";\n\ntype createOutboxOptions = {\n destinationTopic: string;\n payload: Record<string, any>;\n headers?: Record<string, string>;\n keys?: Record<any, any>;\n};\n\n@Injectable()\nexport class TypeormOutboxService {\n constructor(\n @InjectRepository(TypeormOutboxEntity)\n private readonly outboxRepository: Repository<TypeormOutboxEntity>,\n ) {}\n\n async create(options: createOutboxOptions) {\n await this.outboxRepository.save({\n destinationTopic: options.destinationTopic,\n headers: options.headers,\n keys: options.keys,\n payload: options.payload,\n });\n }\n}\n","import { TypeOrmModule } from \"@nestjs/typeorm\";\nimport { DynamicModule, Module, Provider } from \"@nestjs/common\";\nimport {\n TypeormOutboxRegisterCronAsyncOptions,\n TypeormOutboxRegisterCronModuleOptions,\n TypeormOutboxModuleOptions,\n TypeormOutboxModuleAsyncOptions,\n} from \"./typeorm-outbox.interfaces\";\nimport {\n TYPEORM_OUTBOX_BROKER_TOKEN,\n TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n TYPEORM_OUTBOX_SERVICE_TOKEN,\n} from \"./typeorm-outbox.di-tokens\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { TypeormOutboxService } from \"./typeorm-outbox.service\";\nimport { TypeormOutboxController } from \"./typeorm-outbox.controller\";\nimport { ScheduleModule } from \"@nestjs/schedule\";\nimport { ClientProxyFactory } from \"@nestjs/microservices\";\n\n@Module({})\nexport class TypeormOutboxModule {\n static forRoot(options: TypeormOutboxModuleOptions = {}): DynamicModule {\n const configProvider: Provider = {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useValue: options,\n };\n const serviceProvider: Provider = {\n provide: TYPEORM_OUTBOX_SERVICE_TOKEN,\n useClass: TypeormOutboxService,\n };\n const brokerProvider: Provider = {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useValue: null,\n };\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [\n TypeOrmModule.forFeature(\n [TypeormOutboxEntity],\n options.typeOrmConnectionName,\n ),\n ],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static forRootAsync(options: TypeormOutboxModuleAsyncOptions): DynamicModule {\n const configProvider: Provider = {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = options.useFactory?.(\n ...args,\n ) as TypeormOutboxModuleOptions;\n return moduleOptions;\n },\n inject: options.inject || [],\n };\n const serviceProvider: Provider = {\n provide: TYPEORM_OUTBOX_SERVICE_TOKEN,\n useClass: TypeormOutboxService,\n };\n const brokerProvider: Provider = {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useValue: null,\n };\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [TypeOrmModule.forFeature([TypeormOutboxEntity], \"default\")],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static registerCronAsync(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): DynamicModule {\n const configProvider: Provider = {\n provide: TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = options.useFactory?.(\n ...args,\n ) as TypeormOutboxRegisterCronModuleOptions;\n return moduleOptions;\n },\n inject: options.inject || [],\n };\n\n const brokerProvider: Provider = {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = options?.useFactory?.(\n ...args,\n ) as TypeormOutboxRegisterCronModuleOptions;\n return ClientProxyFactory.create(moduleOptions?.kafkaConfig ?? {});\n },\n inject: options.inject || [],\n };\n const serviceProvider: Provider = {\n provide: TYPEORM_OUTBOX_SERVICE_TOKEN,\n useClass: TypeormOutboxService,\n };\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [\n ScheduleModule.forRoot(),\n TypeOrmModule.forFeature([TypeormOutboxEntity], \"default\")\n ],\n controllers: [TypeormOutboxController],\n providers: [configProvider, brokerProvider, serviceProvider],\n exports: [configProvider, brokerProvider, serviceProvider],\n };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/core/typeorm-outbox.di-tokens.ts","../src/core/typeorm-outbox.entity.ts","../src/core/typeorm-outbox.interfaces.ts","../src/core/typeorm-outbox-cron.service.ts","../src/core/typeorm-outbox.service.ts","../src/core/typeorm-outbox.module.ts"],"sourcesContent":["import { Inject } from \"@nestjs/common\";\n\nexport const TYPEORM_OUTBOX_CRON_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_CRON_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_SERVICE_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_SERVICE_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_BROKER_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_BROKER_TOKEN\",\n);\n\nexport const InjectTypeormOutboxCronConfig = () =>\n Inject(TYPEORM_OUTBOX_CRON_CONFIG_TOKEN);\nexport const InjectTypeormOutboxModuleConfig = () =>\n Inject(TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN);\nexport const InjectTypeormOutboxService = () =>\n Inject(TYPEORM_OUTBOX_SERVICE_TOKEN);\nexport const InjectTypeormOutboxBroker = () =>\n Inject(TYPEORM_OUTBOX_BROKER_TOKEN);\n","import {\n Column,\n CreateDateColumn,\n Entity,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from \"typeorm\";\n\n@Entity('outbox')\nexport class TypeormOutboxEntity {\n @PrimaryGeneratedColumn()\n id!: number;\n\n @CreateDateColumn({ name: 'created_at' })\n createdAt!: Date;\n\n @UpdateDateColumn({ name: 'updated_at' })\n updatedAt!: Date;\n\n @Column(\"character varying\", { name: 'destination_topic' })\n destinationTopic!: string;\n\n @Column(\"jsonb\", { nullable: true })\n headers!: Record<string, string>;\n\n @Column(\"jsonb\", { nullable: true })\n keys!: Record<string, unknown>;\n\n @Column(\"jsonb\")\n payload!: Record<string, any>;\n}\n","import { KafkaOptions } from \"@nestjs/microservices\";\nimport { InjectionToken, ModuleMetadata, Type } from \"@nestjs/common\";\nimport { CronExpression } from \"@nestjs/schedule\";\n\nexport class TypeormOutboxRegisterCronModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n kafkaConfig?: KafkaOptions = {};\n cronExpression?: string = CronExpression.EVERY_10_SECONDS;\n}\n\nexport interface TypeormOutboxRegisterCronAsyncOptions\n extends Pick<ModuleMetadata, \"imports\"> {\n inject?: InjectionToken[];\n useExisting?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useClass?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useFactory?: (\n ...args: unknown[]\n ) =>\n | Promise<TypeormOutboxRegisterCronModuleOptions>\n | TypeormOutboxRegisterCronModuleOptions;\n}\n\nexport class TypeormOutboxModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n}\n\nexport interface TypeormOutboxModuleAsyncOptions\n extends Pick<ModuleMetadata, \"imports\"> {\n inject?: InjectionToken[];\n useFactory?: (\n ...args: unknown[]\n ) => Promise<TypeormOutboxModuleOptions> | TypeormOutboxModuleOptions;\n}\n","import { Injectable, OnModuleInit } from \"@nestjs/common\";\nimport { InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig } from \"./typeorm-outbox.di-tokens\";\nimport { hashStringToInt } from \"@globalart/text-utils\";\nimport { EntityManager, Repository } from \"typeorm\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { InjectRepository } from \"@nestjs/typeorm\";\nimport { firstValueFrom } from \"rxjs\";\nimport { ClientProxy } from \"@nestjs/microservices\";\nimport { CronJob } from \"cron\";\nimport { TypeormOutboxRegisterCronModuleOptions } from \"./typeorm-outbox.interfaces\";\nimport { CronExpression } from \"@nestjs/schedule\";\n\n@Injectable()\nexport class TypeormOutboxCronService implements OnModuleInit {\n constructor(\n private readonly entityManager: EntityManager,\n @InjectRepository(TypeormOutboxEntity)\n private readonly outboxRepository: Repository<TypeormOutboxEntity>,\n @InjectTypeormOutboxBroker()\n private readonly brokerClient: ClientProxy,\n @InjectTypeormOutboxCronConfig()\n private readonly moduleConfig: TypeormOutboxRegisterCronModuleOptions,\n ) {}\n\n onModuleInit() {\n const cronJob = new CronJob(this.moduleConfig.cronExpression ?? CronExpression.EVERY_10_SECONDS, () => {\n this.executeCronJob();\n });\n cronJob.start();\n }\n\n async executeCronJob() {\n const lockId = hashStringToInt(\"typeorm-outbox-cron-job\");\n const [{ pg_try_advisory_xact_lock: acquired }] =\n await this.entityManager.query<{ pg_try_advisory_xact_lock: boolean }[]>(\n `SELECT pg_try_advisory_xact_lock(${lockId})`,\n );\n if (!acquired) {\n return;\n }\n\n const entities = await this.outboxRepository.find();\n \n for (const entity of entities) {\n await firstValueFrom(\n this.brokerClient.emit(entity.destinationTopic, {\n key: entity.keys,\n value: entity.payload,\n headers: entity.headers,\n }),\n );\n await this.outboxRepository.delete(entity.id);\n }\n }\n}\n","import { Injectable } from \"@nestjs/common\";\nimport { InjectRepository } from \"@nestjs/typeorm\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { Repository } from \"typeorm\";\n\nexport interface CreateOutboxOptions {\n destinationTopic: string;\n payload: Record<string, unknown>;\n headers?: Record<string, string>;\n keys?: Record<string, unknown>;\n}\n\n@Injectable()\nexport class TypeormOutboxService {\n constructor(\n @InjectRepository(TypeormOutboxEntity)\n private readonly outboxRepository: Repository<TypeormOutboxEntity>,\n ) {}\n\n async create(options: CreateOutboxOptions): Promise<void> {\n await this.outboxRepository.save({\n destinationTopic: options.destinationTopic,\n headers: options.headers,\n keys: options.keys,\n payload: options.payload,\n });\n }\n}\n","import { TypeOrmModule } from \"@nestjs/typeorm\";\nimport { DynamicModule, Module, Provider } from \"@nestjs/common\";\nimport {\n TypeormOutboxRegisterCronAsyncOptions,\n TypeormOutboxRegisterCronModuleOptions,\n TypeormOutboxModuleOptions,\n TypeormOutboxModuleAsyncOptions,\n} from \"./typeorm-outbox.interfaces\";\nimport {\n TYPEORM_OUTBOX_BROKER_TOKEN,\n TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n TYPEORM_OUTBOX_SERVICE_TOKEN,\n} from \"./typeorm-outbox.di-tokens\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { TypeormOutboxService } from \"./typeorm-outbox.service\";\nimport { ScheduleModule } from \"@nestjs/schedule\";\nimport { ClientProxyFactory } from \"@nestjs/microservices\";\nimport { TypeormOutboxCronService } from \"./typeorm-outbox-cron.service\";\n\n@Module({})\nexport class TypeormOutboxModule {\n private static createServiceProvider(): Provider {\n return {\n provide: TYPEORM_OUTBOX_SERVICE_TOKEN,\n useClass: TypeormOutboxService,\n };\n }\n\n private static createBrokerProvider(useValue: unknown = null): Provider {\n return {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useValue,\n };\n }\n\n private static createTypeOrmFeature(connectionName?: string) {\n return TypeOrmModule.forFeature(\n [TypeormOutboxEntity],\n connectionName || \"default\",\n );\n }\n\n private static createModuleConfigProvider(\n options: TypeormOutboxModuleOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useValue: {\n ...new TypeormOutboxModuleOptions(),\n ...options,\n },\n };\n }\n\n private static createAsyncModuleConfigProvider(\n options: TypeormOutboxModuleAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = (await options.useFactory?.(...args)) as\n | TypeormOutboxModuleOptions;\n \n return {\n ...new TypeormOutboxModuleOptions(),\n ...moduleOptions,\n };\n },\n inject: options.inject || [],\n };\n }\n\n private static createCronConfigProvider(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = await options.useFactory?.(...args);\n return {\n ...new TypeormOutboxRegisterCronModuleOptions(),\n ...moduleOptions,\n };\n },\n inject: options.inject || [],\n };\n }\n\n private static createCronBrokerProvider(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = await options.useFactory?.(...args);\n const config = {\n ...new TypeormOutboxRegisterCronModuleOptions(),\n ...moduleOptions,\n };\n return ClientProxyFactory.create(config?.kafkaConfig ?? {});\n },\n inject: options.inject || [],\n };\n }\n\n static forRoot(options: TypeormOutboxModuleOptions = {}): DynamicModule {\n const configProvider = this.createModuleConfigProvider(options);\n const serviceProvider = this.createServiceProvider();\n const brokerProvider = this.createBrokerProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [this.createTypeOrmFeature(options.typeOrmConnectionName)],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static forRootAsync(\n options: TypeormOutboxModuleAsyncOptions,\n ): DynamicModule {\n const configProvider = this.createAsyncModuleConfigProvider(options);\n const serviceProvider = this.createServiceProvider();\n const brokerProvider = this.createBrokerProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [this.createTypeOrmFeature()],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static registerCronAsync(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): DynamicModule {\n const configProvider = this.createCronConfigProvider(options);\n const brokerProvider = this.createCronBrokerProvider(options);\n const serviceProvider = this.createServiceProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [\n ScheduleModule.forRoot(),\n this.createTypeOrmFeature(),\n ],\n providers: [\n TypeormOutboxCronService,\n configProvider,\n brokerProvider,\n serviceProvider,\n ],\n exports: [configProvider, brokerProvider, serviceProvider],\n };\n }\n}\n"],"mappings":"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"}
|