nicot 1.2.12 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,5 +1,34 @@
1
+ var __create = Object.create;
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
8
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
9
+ }) : x)(function(x) {
10
+ if (typeof require !== "undefined") return require.apply(this, arguments);
11
+ throw Error('Dynamic require of "' + x + '" is not supported');
12
+ });
13
+ var __commonJS = (cb, mod) => function __require2() {
14
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") {
18
+ for (let key of __getOwnPropNames(from))
19
+ if (!__hasOwnProp.call(to, key) && key !== except)
20
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
+ }
22
+ return to;
23
+ };
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
25
+ // If the importer is in node compatibility mode or this is not an ESM
26
+ // file that has been converted to a CommonJS file using a Babel-
27
+ // compatible transform (i.e. "__esModule" has not been set), then set
28
+ // "default" to the CommonJS "module.exports" for node compatibility.
29
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
30
+ mod
31
+ ));
3
32
  var __decorateClass = (decorators, target, key, kind) => {
4
33
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
34
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
@@ -9,6 +38,539 @@ var __decorateClass = (decorators, target, key, kind) => {
9
38
  return result;
10
39
  };
11
40
 
41
+ // node_modules/@nestjs/typeorm/dist/typeorm.constants.js
42
+ var require_typeorm_constants = __commonJS({
43
+ "node_modules/@nestjs/typeorm/dist/typeorm.constants.js"(exports) {
44
+ "use strict";
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.DEFAULT_DATA_SOURCE_NAME = exports.TYPEORM_MODULE_ID = exports.TYPEORM_MODULE_OPTIONS = void 0;
47
+ exports.TYPEORM_MODULE_OPTIONS = "TypeOrmModuleOptions";
48
+ exports.TYPEORM_MODULE_ID = "TypeOrmModuleId";
49
+ exports.DEFAULT_DATA_SOURCE_NAME = "default";
50
+ }
51
+ });
52
+
53
+ // node_modules/@nestjs/typeorm/dist/exceptions/circular-dependency.exception.js
54
+ var require_circular_dependency_exception = __commonJS({
55
+ "node_modules/@nestjs/typeorm/dist/exceptions/circular-dependency.exception.js"(exports) {
56
+ "use strict";
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ exports.CircularDependencyException = void 0;
59
+ var CircularDependencyException = class extends Error {
60
+ constructor(context) {
61
+ const ctx = context ? ` inside ${context}` : ``;
62
+ super(`A circular dependency has been detected${ctx}. Please, make sure that each side of a bidirectional relationships are decorated with "forwardRef()". Also, try to eliminate barrel files because they can lead to an unexpected behavior too.`);
63
+ }
64
+ };
65
+ exports.CircularDependencyException = CircularDependencyException;
66
+ }
67
+ });
68
+
69
+ // node_modules/@nestjs/typeorm/dist/common/typeorm.utils.js
70
+ var require_typeorm_utils = __commonJS({
71
+ "node_modules/@nestjs/typeorm/dist/common/typeorm.utils.js"(exports) {
72
+ "use strict";
73
+ Object.defineProperty(exports, "__esModule", { value: true });
74
+ exports.generateString = exports.getConnectionToken = void 0;
75
+ exports.getRepositoryToken = getRepositoryToken;
76
+ exports.getCustomRepositoryToken = getCustomRepositoryToken;
77
+ exports.getDataSourceToken = getDataSourceToken;
78
+ exports.getDataSourcePrefix = getDataSourcePrefix;
79
+ exports.getEntityManagerToken = getEntityManagerToken2;
80
+ exports.handleRetry = handleRetry;
81
+ exports.getDataSourceName = getDataSourceName;
82
+ var common_1 = __require("@nestjs/common");
83
+ var operators_1 = __require("rxjs/operators");
84
+ var typeorm_1 = __require("typeorm");
85
+ var circular_dependency_exception_1 = require_circular_dependency_exception();
86
+ var typeorm_constants_1 = require_typeorm_constants();
87
+ var logger = new common_1.Logger("TypeOrmModule");
88
+ function getRepositoryToken(entity, dataSource = typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME) {
89
+ if (entity === null || entity === void 0) {
90
+ throw new circular_dependency_exception_1.CircularDependencyException("@InjectRepository()");
91
+ }
92
+ const dataSourcePrefix = getDataSourcePrefix(dataSource);
93
+ if (entity instanceof Function && (entity.prototype instanceof typeorm_1.Repository || entity.prototype instanceof typeorm_1.AbstractRepository)) {
94
+ if (!dataSourcePrefix) {
95
+ return entity;
96
+ }
97
+ return `${dataSourcePrefix}${getCustomRepositoryToken(entity)}`;
98
+ }
99
+ if (entity instanceof typeorm_1.EntitySchema) {
100
+ return `${dataSourcePrefix}${entity.options.target ? entity.options.target.name : entity.options.name}Repository`;
101
+ }
102
+ return `${dataSourcePrefix}${entity.name}Repository`;
103
+ }
104
+ function getCustomRepositoryToken(repository) {
105
+ if (repository === null || repository === void 0) {
106
+ throw new circular_dependency_exception_1.CircularDependencyException("@InjectRepository()");
107
+ }
108
+ return repository.name;
109
+ }
110
+ function getDataSourceToken(dataSource = typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME) {
111
+ return typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME === dataSource ? typeorm_1.DataSource ?? typeorm_1.Connection : "string" === typeof dataSource ? `${dataSource}DataSource` : typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME === dataSource.name || !dataSource.name ? typeorm_1.DataSource ?? typeorm_1.Connection : `${dataSource.name}DataSource`;
112
+ }
113
+ exports.getConnectionToken = getDataSourceToken;
114
+ function getDataSourcePrefix(dataSource = typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME) {
115
+ if (dataSource === typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME) {
116
+ return "";
117
+ }
118
+ if (typeof dataSource === "string") {
119
+ return dataSource + "_";
120
+ }
121
+ if (dataSource.name === typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME || !dataSource.name) {
122
+ return "";
123
+ }
124
+ return dataSource.name + "_";
125
+ }
126
+ function getEntityManagerToken2(dataSource = typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME) {
127
+ return typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME === dataSource ? typeorm_1.EntityManager : "string" === typeof dataSource ? `${dataSource}EntityManager` : typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME === dataSource.name || !dataSource.name ? typeorm_1.EntityManager : `${dataSource.name}EntityManager`;
128
+ }
129
+ function handleRetry(retryAttempts = 9, retryDelay = 3e3, dataSourceName = typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME, verboseRetryLog = false, toRetry) {
130
+ return (source) => source.pipe((0, operators_1.retryWhen)((e) => e.pipe((0, operators_1.scan)((errorCount, error) => {
131
+ if (toRetry && !toRetry(error)) {
132
+ throw error;
133
+ }
134
+ const dataSourceInfo = dataSourceName === typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME ? "" : ` (${dataSourceName})`;
135
+ const verboseMessage = verboseRetryLog ? ` Message: ${error.message}.` : "";
136
+ logger.error(`Unable to connect to the database${dataSourceInfo}.${verboseMessage} Retrying (${errorCount + 1})...`, error.stack);
137
+ if (errorCount + 1 >= retryAttempts) {
138
+ throw error;
139
+ }
140
+ return errorCount + 1;
141
+ }, 0), (0, operators_1.delay)(retryDelay))));
142
+ }
143
+ function getDataSourceName(options) {
144
+ return options && options.name ? options.name : typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME;
145
+ }
146
+ var generateString = () => crypto.randomUUID();
147
+ exports.generateString = generateString;
148
+ }
149
+ });
150
+
151
+ // node_modules/@nestjs/typeorm/dist/common/typeorm.decorators.js
152
+ var require_typeorm_decorators = __commonJS({
153
+ "node_modules/@nestjs/typeorm/dist/common/typeorm.decorators.js"(exports) {
154
+ "use strict";
155
+ Object.defineProperty(exports, "__esModule", { value: true });
156
+ exports.InjectEntityManager = exports.InjectConnection = exports.InjectDataSource = exports.InjectRepository = void 0;
157
+ var common_1 = __require("@nestjs/common");
158
+ var typeorm_constants_1 = require_typeorm_constants();
159
+ var typeorm_utils_1 = require_typeorm_utils();
160
+ var InjectRepository = (entity, dataSource = typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME) => (0, common_1.Inject)((0, typeorm_utils_1.getRepositoryToken)(entity, dataSource));
161
+ exports.InjectRepository = InjectRepository;
162
+ var InjectDataSource = (dataSource) => (0, common_1.Inject)((0, typeorm_utils_1.getDataSourceToken)(dataSource));
163
+ exports.InjectDataSource = InjectDataSource;
164
+ exports.InjectConnection = exports.InjectDataSource;
165
+ var InjectEntityManager = (dataSource) => (0, common_1.Inject)((0, typeorm_utils_1.getEntityManagerToken)(dataSource));
166
+ exports.InjectEntityManager = InjectEntityManager;
167
+ }
168
+ });
169
+
170
+ // node_modules/@nestjs/typeorm/dist/common/index.js
171
+ var require_common = __commonJS({
172
+ "node_modules/@nestjs/typeorm/dist/common/index.js"(exports) {
173
+ "use strict";
174
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
175
+ if (k2 === void 0) k2 = k;
176
+ var desc = Object.getOwnPropertyDescriptor(m, k);
177
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
178
+ desc = { enumerable: true, get: function() {
179
+ return m[k];
180
+ } };
181
+ }
182
+ Object.defineProperty(o, k2, desc);
183
+ }) : (function(o, m, k, k2) {
184
+ if (k2 === void 0) k2 = k;
185
+ o[k2] = m[k];
186
+ }));
187
+ var __exportStar = exports && exports.__exportStar || function(m, exports2) {
188
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p);
189
+ };
190
+ Object.defineProperty(exports, "__esModule", { value: true });
191
+ __exportStar(require_typeorm_decorators(), exports);
192
+ __exportStar(require_typeorm_utils(), exports);
193
+ }
194
+ });
195
+
196
+ // node_modules/@nestjs/typeorm/dist/interfaces/typeorm-options.interface.js
197
+ var require_typeorm_options_interface = __commonJS({
198
+ "node_modules/@nestjs/typeorm/dist/interfaces/typeorm-options.interface.js"(exports) {
199
+ "use strict";
200
+ Object.defineProperty(exports, "__esModule", { value: true });
201
+ }
202
+ });
203
+
204
+ // node_modules/@nestjs/typeorm/dist/interfaces/index.js
205
+ var require_interfaces = __commonJS({
206
+ "node_modules/@nestjs/typeorm/dist/interfaces/index.js"(exports) {
207
+ "use strict";
208
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
209
+ if (k2 === void 0) k2 = k;
210
+ var desc = Object.getOwnPropertyDescriptor(m, k);
211
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
212
+ desc = { enumerable: true, get: function() {
213
+ return m[k];
214
+ } };
215
+ }
216
+ Object.defineProperty(o, k2, desc);
217
+ }) : (function(o, m, k, k2) {
218
+ if (k2 === void 0) k2 = k;
219
+ o[k2] = m[k];
220
+ }));
221
+ var __exportStar = exports && exports.__exportStar || function(m, exports2) {
222
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p);
223
+ };
224
+ Object.defineProperty(exports, "__esModule", { value: true });
225
+ __exportStar(require_typeorm_options_interface(), exports);
226
+ }
227
+ });
228
+
229
+ // node_modules/@nestjs/typeorm/dist/entities-metadata.storage.js
230
+ var require_entities_metadata_storage = __commonJS({
231
+ "node_modules/@nestjs/typeorm/dist/entities-metadata.storage.js"(exports) {
232
+ "use strict";
233
+ Object.defineProperty(exports, "__esModule", { value: true });
234
+ exports.EntitiesMetadataStorage = void 0;
235
+ var EntitiesMetadataStorage = class {
236
+ static addEntitiesByDataSource(dataSource, entities) {
237
+ const dataSourceToken = typeof dataSource === "string" ? dataSource : dataSource.name;
238
+ if (!dataSourceToken) {
239
+ return;
240
+ }
241
+ let collection = this.storage.get(dataSourceToken);
242
+ if (!collection) {
243
+ collection = [];
244
+ this.storage.set(dataSourceToken, collection);
245
+ }
246
+ entities.forEach((entity) => {
247
+ if (collection.includes(entity)) {
248
+ return;
249
+ }
250
+ collection.push(entity);
251
+ });
252
+ }
253
+ static getEntitiesByDataSource(dataSource) {
254
+ const dataSourceToken = typeof dataSource === "string" ? dataSource : dataSource.name;
255
+ if (!dataSourceToken) {
256
+ return [];
257
+ }
258
+ return this.storage.get(dataSourceToken) || [];
259
+ }
260
+ };
261
+ exports.EntitiesMetadataStorage = EntitiesMetadataStorage;
262
+ EntitiesMetadataStorage.storage = /* @__PURE__ */ new Map();
263
+ }
264
+ });
265
+
266
+ // node_modules/@nestjs/typeorm/dist/typeorm-core.module.js
267
+ var require_typeorm_core_module = __commonJS({
268
+ "node_modules/@nestjs/typeorm/dist/typeorm-core.module.js"(exports) {
269
+ "use strict";
270
+ var __decorate = exports && exports.__decorate || function(decorators, target, key, desc) {
271
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
272
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
273
+ 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;
274
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
275
+ };
276
+ var __metadata = exports && exports.__metadata || function(k, v) {
277
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
278
+ };
279
+ var __param = exports && exports.__param || function(paramIndex, decorator) {
280
+ return function(target, key) {
281
+ decorator(target, key, paramIndex);
282
+ };
283
+ };
284
+ var TypeOrmCoreModule_1;
285
+ Object.defineProperty(exports, "__esModule", { value: true });
286
+ exports.TypeOrmCoreModule = void 0;
287
+ var common_1 = __require("@nestjs/common");
288
+ var core_1 = __require("@nestjs/core");
289
+ var rxjs_1 = __require("rxjs");
290
+ var typeorm_1 = __require("typeorm");
291
+ var typeorm_utils_1 = require_typeorm_utils();
292
+ var entities_metadata_storage_1 = require_entities_metadata_storage();
293
+ var typeorm_constants_1 = require_typeorm_constants();
294
+ var TypeOrmCoreModule = TypeOrmCoreModule_1 = class TypeOrmCoreModule {
295
+ constructor(options, moduleRef) {
296
+ this.options = options;
297
+ this.moduleRef = moduleRef;
298
+ this.logger = new common_1.Logger("TypeOrmModule");
299
+ }
300
+ static forRoot(options = {}) {
301
+ const typeOrmModuleOptions = {
302
+ provide: typeorm_constants_1.TYPEORM_MODULE_OPTIONS,
303
+ useValue: options
304
+ };
305
+ const dataSourceProvider = {
306
+ provide: (0, typeorm_utils_1.getDataSourceToken)(options),
307
+ useFactory: async () => await this.createDataSourceFactory(options)
308
+ };
309
+ const entityManagerProvider = this.createEntityManagerProvider(options);
310
+ const providers = [
311
+ entityManagerProvider,
312
+ dataSourceProvider,
313
+ typeOrmModuleOptions
314
+ ];
315
+ const exports2 = [entityManagerProvider, dataSourceProvider];
316
+ if (dataSourceProvider.provide === typeorm_1.DataSource) {
317
+ providers.push({
318
+ provide: typeorm_1.Connection,
319
+ useExisting: typeorm_1.DataSource
320
+ });
321
+ exports2.push(typeorm_1.Connection);
322
+ }
323
+ return {
324
+ module: TypeOrmCoreModule_1,
325
+ providers,
326
+ exports: exports2
327
+ };
328
+ }
329
+ static forRootAsync(options) {
330
+ const dataSourceProvider = {
331
+ provide: (0, typeorm_utils_1.getDataSourceToken)(options),
332
+ useFactory: async (typeOrmOptions) => {
333
+ if (options.name) {
334
+ return await this.createDataSourceFactory({
335
+ ...typeOrmOptions,
336
+ name: options.name
337
+ }, options.dataSourceFactory);
338
+ }
339
+ return await this.createDataSourceFactory(typeOrmOptions, options.dataSourceFactory);
340
+ },
341
+ inject: [typeorm_constants_1.TYPEORM_MODULE_OPTIONS]
342
+ };
343
+ const entityManagerProvider = {
344
+ provide: (0, typeorm_utils_1.getEntityManagerToken)(options),
345
+ useFactory: (dataSource) => dataSource.manager,
346
+ inject: [(0, typeorm_utils_1.getDataSourceToken)(options)]
347
+ };
348
+ const asyncProviders = this.createAsyncProviders(options);
349
+ const providers = [
350
+ ...asyncProviders,
351
+ entityManagerProvider,
352
+ dataSourceProvider,
353
+ {
354
+ provide: typeorm_constants_1.TYPEORM_MODULE_ID,
355
+ useValue: (0, typeorm_utils_1.generateString)()
356
+ },
357
+ ...options.extraProviders || []
358
+ ];
359
+ const exports2 = [
360
+ entityManagerProvider,
361
+ dataSourceProvider
362
+ ];
363
+ if (dataSourceProvider.provide === typeorm_1.DataSource) {
364
+ providers.push({
365
+ provide: typeorm_1.Connection,
366
+ useExisting: typeorm_1.DataSource
367
+ });
368
+ exports2.push(typeorm_1.Connection);
369
+ }
370
+ return {
371
+ module: TypeOrmCoreModule_1,
372
+ imports: options.imports,
373
+ providers,
374
+ exports: exports2
375
+ };
376
+ }
377
+ async onApplicationShutdown() {
378
+ const dataSource = this.moduleRef.get((0, typeorm_utils_1.getDataSourceToken)(this.options));
379
+ try {
380
+ if (dataSource && dataSource.isInitialized) {
381
+ await dataSource.destroy();
382
+ }
383
+ } catch (e) {
384
+ this.logger.error(e?.message);
385
+ }
386
+ }
387
+ static createAsyncProviders(options) {
388
+ if (options.useExisting || options.useFactory) {
389
+ return [this.createAsyncOptionsProvider(options)];
390
+ }
391
+ const useClass = options.useClass;
392
+ return [
393
+ this.createAsyncOptionsProvider(options),
394
+ {
395
+ provide: useClass,
396
+ useClass
397
+ }
398
+ ];
399
+ }
400
+ static createAsyncOptionsProvider(options) {
401
+ if (options.useFactory) {
402
+ return {
403
+ provide: typeorm_constants_1.TYPEORM_MODULE_OPTIONS,
404
+ useFactory: options.useFactory,
405
+ inject: options.inject || []
406
+ };
407
+ }
408
+ const inject = [
409
+ options.useClass || options.useExisting
410
+ ];
411
+ return {
412
+ provide: typeorm_constants_1.TYPEORM_MODULE_OPTIONS,
413
+ useFactory: async (optionsFactory) => await optionsFactory.createTypeOrmOptions(options.name),
414
+ inject
415
+ };
416
+ }
417
+ static createEntityManagerProvider(options) {
418
+ return {
419
+ provide: (0, typeorm_utils_1.getEntityManagerToken)(options),
420
+ useFactory: (dataSource) => dataSource.manager,
421
+ inject: [(0, typeorm_utils_1.getDataSourceToken)(options)]
422
+ };
423
+ }
424
+ static async createDataSourceFactory(options, dataSourceFactory) {
425
+ const dataSourceToken = (0, typeorm_utils_1.getDataSourceName)(options);
426
+ const createTypeormDataSource = dataSourceFactory ?? ((options2) => {
427
+ return typeorm_1.DataSource === void 0 ? (0, typeorm_1.createConnection)(options2) : new typeorm_1.DataSource(options2);
428
+ });
429
+ return await (0, rxjs_1.lastValueFrom)((0, rxjs_1.defer)(async () => {
430
+ let dataSource;
431
+ if (!options.autoLoadEntities) {
432
+ dataSource = await createTypeormDataSource(options);
433
+ } else {
434
+ let entities = options.entities;
435
+ if (Array.isArray(entities)) {
436
+ entities = entities.concat(entities_metadata_storage_1.EntitiesMetadataStorage.getEntitiesByDataSource(dataSourceToken));
437
+ } else {
438
+ entities = entities_metadata_storage_1.EntitiesMetadataStorage.getEntitiesByDataSource(dataSourceToken);
439
+ }
440
+ dataSource = await createTypeormDataSource({
441
+ ...options,
442
+ entities
443
+ });
444
+ }
445
+ return dataSource.initialize && !dataSource.isInitialized && !options.manualInitialization ? dataSource.initialize() : dataSource;
446
+ }).pipe((0, typeorm_utils_1.handleRetry)(options.retryAttempts, options.retryDelay, dataSourceToken, options.verboseRetryLog, options.toRetry)));
447
+ }
448
+ };
449
+ exports.TypeOrmCoreModule = TypeOrmCoreModule;
450
+ exports.TypeOrmCoreModule = TypeOrmCoreModule = TypeOrmCoreModule_1 = __decorate([
451
+ (0, common_1.Global)(),
452
+ (0, common_1.Module)({}),
453
+ __param(0, (0, common_1.Inject)(typeorm_constants_1.TYPEORM_MODULE_OPTIONS)),
454
+ __metadata("design:paramtypes", [Object, core_1.ModuleRef])
455
+ ], TypeOrmCoreModule);
456
+ }
457
+ });
458
+
459
+ // node_modules/@nestjs/typeorm/dist/typeorm.providers.js
460
+ var require_typeorm_providers = __commonJS({
461
+ "node_modules/@nestjs/typeorm/dist/typeorm.providers.js"(exports) {
462
+ "use strict";
463
+ Object.defineProperty(exports, "__esModule", { value: true });
464
+ exports.createTypeOrmProviders = createTypeOrmProviders;
465
+ var typeorm_1 = __require("typeorm");
466
+ var typeorm_utils_1 = require_typeorm_utils();
467
+ function createTypeOrmProviders(entities, dataSource) {
468
+ return (entities || []).map((entity) => ({
469
+ provide: (0, typeorm_utils_1.getRepositoryToken)(entity, dataSource),
470
+ useFactory: (dataSource2) => {
471
+ const entityMetadata = dataSource2.entityMetadatas.find((meta) => meta.target === entity);
472
+ const isTreeEntity = typeof entityMetadata?.treeType !== "undefined";
473
+ return isTreeEntity ? dataSource2.getTreeRepository(entity) : dataSource2.options.type === "mongodb" ? dataSource2.getMongoRepository(entity) : dataSource2.getRepository(entity);
474
+ },
475
+ inject: [(0, typeorm_utils_1.getDataSourceToken)(dataSource)],
476
+ /**
477
+ * Extra property to workaround dynamic modules serialisation issue
478
+ * that occurs when "TypeOrm#forFeature()" method is called with the same number
479
+ * of arguments and all entities share the same class names.
480
+ */
481
+ targetEntitySchema: (0, typeorm_1.getMetadataArgsStorage)().tables.find((item) => item.target === entity)
482
+ }));
483
+ }
484
+ }
485
+ });
486
+
487
+ // node_modules/@nestjs/typeorm/dist/typeorm.module.js
488
+ var require_typeorm_module = __commonJS({
489
+ "node_modules/@nestjs/typeorm/dist/typeorm.module.js"(exports) {
490
+ "use strict";
491
+ var __decorate = exports && exports.__decorate || function(decorators, target, key, desc) {
492
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
493
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
494
+ 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;
495
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
496
+ };
497
+ var TypeOrmModule_1;
498
+ Object.defineProperty(exports, "__esModule", { value: true });
499
+ exports.TypeOrmModule = void 0;
500
+ var common_1 = __require("@nestjs/common");
501
+ var entities_metadata_storage_1 = require_entities_metadata_storage();
502
+ var typeorm_core_module_1 = require_typeorm_core_module();
503
+ var typeorm_constants_1 = require_typeorm_constants();
504
+ var typeorm_providers_1 = require_typeorm_providers();
505
+ var TypeOrmModule2 = TypeOrmModule_1 = class TypeOrmModule {
506
+ static forRoot(options) {
507
+ return {
508
+ module: TypeOrmModule_1,
509
+ imports: [typeorm_core_module_1.TypeOrmCoreModule.forRoot(options)]
510
+ };
511
+ }
512
+ static forFeature(entities = [], dataSource = typeorm_constants_1.DEFAULT_DATA_SOURCE_NAME) {
513
+ const providers = (0, typeorm_providers_1.createTypeOrmProviders)(entities, dataSource);
514
+ entities_metadata_storage_1.EntitiesMetadataStorage.addEntitiesByDataSource(dataSource, [...entities]);
515
+ return {
516
+ module: TypeOrmModule_1,
517
+ providers,
518
+ exports: providers
519
+ };
520
+ }
521
+ static forRootAsync(options) {
522
+ return {
523
+ module: TypeOrmModule_1,
524
+ imports: [typeorm_core_module_1.TypeOrmCoreModule.forRootAsync(options)]
525
+ };
526
+ }
527
+ };
528
+ exports.TypeOrmModule = TypeOrmModule2;
529
+ exports.TypeOrmModule = TypeOrmModule2 = TypeOrmModule_1 = __decorate([
530
+ (0, common_1.Module)({})
531
+ ], TypeOrmModule2);
532
+ }
533
+ });
534
+
535
+ // node_modules/@nestjs/typeorm/dist/index.js
536
+ var require_dist = __commonJS({
537
+ "node_modules/@nestjs/typeorm/dist/index.js"(exports) {
538
+ "use strict";
539
+ var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
540
+ if (k2 === void 0) k2 = k;
541
+ var desc = Object.getOwnPropertyDescriptor(m, k);
542
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
543
+ desc = { enumerable: true, get: function() {
544
+ return m[k];
545
+ } };
546
+ }
547
+ Object.defineProperty(o, k2, desc);
548
+ }) : (function(o, m, k, k2) {
549
+ if (k2 === void 0) k2 = k;
550
+ o[k2] = m[k];
551
+ }));
552
+ var __exportStar = exports && exports.__exportStar || function(m, exports2) {
553
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p);
554
+ };
555
+ Object.defineProperty(exports, "__esModule", { value: true });
556
+ __exportStar(require_common(), exports);
557
+ __exportStar(require_interfaces(), exports);
558
+ __exportStar(require_typeorm_module(), exports);
559
+ }
560
+ });
561
+
562
+ // node_modules/@nestjs/typeorm/index.js
563
+ var require_typeorm = __commonJS({
564
+ "node_modules/@nestjs/typeorm/index.js"(exports) {
565
+ "use strict";
566
+ function __export(m) {
567
+ for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
568
+ }
569
+ exports.__esModule = true;
570
+ __export(require_dist());
571
+ }
572
+ });
573
+
12
574
  // index.ts
13
575
  export * from "nesties";
14
576
 
@@ -71,6 +633,7 @@ import { IsOptional } from "class-validator";
71
633
 
72
634
  // src/utility/metadata.ts
73
635
  import { MetadataSetter, Reflector } from "typed-reflector";
636
+ import _ from "lodash";
74
637
  var Metadata = new MetadataSetter();
75
638
  var reflector = new Reflector();
76
639
  function getSpecificFields(obj, type, filter = () => true) {
@@ -83,11 +646,11 @@ function getSpecificFields(obj, type, filter = () => true) {
83
646
  });
84
647
  }
85
648
  function getNotInResultFields(obj, keepEntityVersioningDates = false) {
86
- return getSpecificFields(
87
- obj,
88
- "notInResult",
89
- (meta) => !keepEntityVersioningDates || !meta.entityVersioningDate
90
- );
649
+ const res = getSpecificFields(obj, "notInResult");
650
+ if (keepEntityVersioningDates) {
651
+ return _.difference(res, getSpecificFields(obj, "entityVersioningDate"));
652
+ }
653
+ return res;
91
654
  }
92
655
 
93
656
  // src/decorators/access.ts
@@ -103,8 +666,12 @@ var NotCreatable = () => MergePropertyDecorators([
103
666
  var NotChangeable = () => MergePropertyDecorators([
104
667
  Metadata.set("notChangeable", true, "notChangeableFields")
105
668
  ]);
669
+ var NotUpsertable = () => MergePropertyDecorators([
670
+ IsOptional(),
671
+ Metadata.set("notUpsertable", true, "notUpsertableFields")
672
+ ]);
106
673
  var NotQueryable = () => Metadata.set("notQueryable", true, "notQueryableFields");
107
- var NotInResult = (options = {}) => Metadata.set("notInResult", options, "notInResultFields");
674
+ var NotInResult = () => Metadata.set("notInResult", true, "notInResultFields");
108
675
 
109
676
  // src/decorators/property.ts
110
677
  import { ApiProperty as ApiProperty2 } from "@nestjs/swagger";
@@ -798,6 +1365,24 @@ var BindingValue = (bindingKey = DefaultBindingKey) => (obj, key, des) => {
798
1365
  )(obj, key);
799
1366
  };
800
1367
 
1368
+ // src/decorators/upsert.ts
1369
+ import { Unique } from "typeorm";
1370
+ var UpsertColumn = () => Metadata.set("upsertColumn", true, "upsertColumnFields");
1371
+ var UpsertableEntity = () => (cls) => {
1372
+ const upsertColumns = getSpecificFields(cls, "upsertColumn");
1373
+ const bindingColumns = getSpecificFields(cls, "bindingColumn");
1374
+ if (!upsertColumns.length && !bindingColumns.length) {
1375
+ throw new Error(
1376
+ `UpsertableEntity ${cls.name} must have at least one UpsertColumn or BindingColumn defined.`
1377
+ );
1378
+ }
1379
+ Metadata.set("upsertableEntity", true)(cls);
1380
+ if (!bindingColumns.length && upsertColumns.length === 1 && upsertColumns[0] === "id") {
1381
+ return;
1382
+ }
1383
+ Unique([.../* @__PURE__ */ new Set([...bindingColumns, ...upsertColumns])])(cls);
1384
+ };
1385
+
801
1386
  // src/dto/cursor-pagination.ts
802
1387
  var CursorPaginationDto = class {
803
1388
  };
@@ -935,6 +1520,7 @@ __decorateClass([
935
1520
  ], PageSettingsDto.prototype, "recordsPerPage", 2);
936
1521
 
937
1522
  // src/bases/time-base.ts
1523
+ var EntityVersioningDate = () => Metadata.set("entityVersioningDate", true, "entityVersioningDateFields");
938
1524
  var TimeBase = class extends PageSettingsDto {
939
1525
  isValidInCreate() {
940
1526
  return;
@@ -957,23 +1543,35 @@ var TimeBase = class extends PageSettingsDto {
957
1543
  // eslint-disable-next-line @typescript-eslint/no-empty-function
958
1544
  async beforeUpdate() {
959
1545
  }
1546
+ isValidInUpsert() {
1547
+ return;
1548
+ }
1549
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
1550
+ async beforeUpsert() {
1551
+ }
1552
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
1553
+ async afterUpsert() {
1554
+ }
960
1555
  };
961
1556
  __decorateClass([
962
1557
  CreateDateColumn({ select: false }),
963
1558
  NotColumn(),
964
- NotInResult({ entityVersioningDate: true }),
1559
+ NotInResult(),
1560
+ EntityVersioningDate(),
965
1561
  Reflect.metadata("design:type", Date)
966
1562
  ], TimeBase.prototype, "createTime", 2);
967
1563
  __decorateClass([
968
1564
  UpdateDateColumn({ select: false }),
969
1565
  NotColumn(),
970
- NotInResult({ entityVersioningDate: true }),
1566
+ NotInResult(),
1567
+ EntityVersioningDate(),
971
1568
  Reflect.metadata("design:type", Date)
972
1569
  ], TimeBase.prototype, "updateTime", 2);
973
1570
  __decorateClass([
974
1571
  DeleteDateColumn({ select: false }),
975
1572
  NotColumn(),
976
- NotInResult({ entityVersioningDate: true }),
1573
+ NotInResult(),
1574
+ EntityVersioningDate(),
977
1575
  Reflect.metadata("design:type", Date)
978
1576
  ], TimeBase.prototype, "deleteTime", 2);
979
1577
 
@@ -1034,7 +1632,8 @@ function StringIdBase(idOptions) {
1034
1632
  ...idOptions.uuid ? [UuidColumn({ ...columnOptions, generated: true }), NotWritable()] : [
1035
1633
  StringColumn(idOptions.length || 255, columnOptions),
1036
1634
  IsNotEmpty2(),
1037
- NotChangeable()
1635
+ NotChangeable(),
1636
+ UpsertColumn()
1038
1637
  ]
1039
1638
  ];
1040
1639
  const dec = MergePropertyDecorators4(decs);
@@ -1043,9 +1642,9 @@ function StringIdBase(idOptions) {
1043
1642
  }
1044
1643
 
1045
1644
  // src/crud-base.ts
1046
- import { ConsoleLogger } from "@nestjs/common";
1645
+ import { ConsoleLogger, HttpException } from "@nestjs/common";
1047
1646
  import { camelCase } from "typeorm/util/StringUtils";
1048
- import _3, { omit } from "lodash";
1647
+ import _4, { omit } from "lodash";
1049
1648
  import {
1050
1649
  BlankReturnMessageDto as BlankReturnMessageDto2,
1051
1650
  GenericReturnMessageDto,
@@ -1055,7 +1654,7 @@ import {
1055
1654
 
1056
1655
  // src/utility/get-typeorm-relations.ts
1057
1656
  import { getMetadataArgsStorage } from "typeorm";
1058
- import _ from "lodash";
1657
+ import _2 from "lodash";
1059
1658
  function getTypeormRelations(cl) {
1060
1659
  const relations = getMetadataArgsStorage().relations.filter(
1061
1660
  (r) => r.target === cl
@@ -1096,7 +1695,7 @@ function getTypeormRelations(cl) {
1096
1695
  };
1097
1696
  }
1098
1697
  );
1099
- return _.uniqBy(
1698
+ return _2.uniqBy(
1100
1699
  [...typeormRelations, ...computedRelations],
1101
1700
  // Merge typeorm relations and computed relations
1102
1701
  (r) => r.propertyName
@@ -1105,7 +1704,7 @@ function getTypeormRelations(cl) {
1105
1704
 
1106
1705
  // src/utility/cursor-pagination-utils.ts
1107
1706
  import { Brackets as Brackets2 } from "typeorm";
1108
- import _2 from "lodash";
1707
+ import _3 from "lodash";
1109
1708
  import SJSON from "superjson";
1110
1709
 
1111
1710
  // src/utility/filter-relations.ts
@@ -1273,7 +1872,7 @@ async function getPaginatedResult(qb, entityClass, entityAliasName, take, cursor
1273
1872
  );
1274
1873
  if (keys.length) {
1275
1874
  const staircasedKeys = keys.map(
1276
- (key, i) => _2.range(i + 1).map((j) => keys[j])
1875
+ (key, i) => _3.range(i + 1).map((j) => keys[j])
1277
1876
  );
1278
1877
  const cursorKey = (key) => `_cursor_${key.replace(/\./g, "__").replace(/"/g, "")}`;
1279
1878
  const expressionMatrix = staircasedKeys.map(
@@ -1577,15 +2176,23 @@ var CrudBase = class {
1577
2176
  this._restoreBindings(snap);
1578
2177
  return res;
1579
2178
  }
2179
+ async _mayBeTransaction(cb, manager = this.repo.manager) {
2180
+ const hasActiveTx = !!manager.queryRunner?.isTransactionActive;
2181
+ const getRepo = (m) => m.getRepository(this.entityClass);
2182
+ if (hasActiveTx) {
2183
+ return cb(manager, getRepo(manager));
2184
+ } else {
2185
+ return manager.transaction(async (tdb) => await cb(tdb, getRepo(tdb)));
2186
+ }
2187
+ }
1580
2188
  async _batchCreate(ents, beforeCreate, skipErrors = false) {
1581
2189
  const entsWithId = ents.filter((ent) => ent.id != null);
1582
- return this.repo.manager.transaction(async (mdb) => {
2190
+ return this._mayBeTransaction(async (mdb, repo) => {
1583
2191
  let skipped = [];
1584
- const repo = mdb.getRepository(this.entityClass);
1585
2192
  let entsToSave = ents;
1586
2193
  if (entsWithId.length) {
1587
2194
  const entIds = entsWithId.map((ent) => ent.id);
1588
- const entIdChunks = _3.chunk(entIds, 65535);
2195
+ const entIdChunks = _4.chunk(entIds, 65535);
1589
2196
  const existingEnts = (await Promise.all(
1590
2197
  entIdChunks.map(
1591
2198
  (chunk) => repo.find({
@@ -1656,7 +2263,7 @@ var CrudBase = class {
1656
2263
  await beforeCreate(repo);
1657
2264
  }
1658
2265
  try {
1659
- const entChunksToSave = _3.chunk(
2266
+ const entChunksToSave = _4.chunk(
1660
2267
  entsToSave,
1661
2268
  Math.floor(
1662
2269
  65535 / Math.max(1, Object.keys(entsToSave[0] || {}).length)
@@ -1695,13 +2302,16 @@ var CrudBase = class {
1695
2302
  if (invalidReason) {
1696
2303
  throw new BlankReturnMessageDto2(400, invalidReason).toException();
1697
2304
  }
1698
- const savedEnt = await this.repo.manager.transaction(async (mdb) => {
1699
- const repo = mdb.getRepository(this.entityClass);
2305
+ const savedEnt = await this._mayBeTransaction(async (mdb, repo) => {
1700
2306
  if (ent.id != null) {
1701
2307
  const existingEnt = await repo.findOne({
1702
2308
  where: { id: ent.id },
1703
2309
  select: this.crudOptions.createOrUpdate ? void 0 : ["id", "deleteTime"],
1704
- withDeleted: true
2310
+ withDeleted: true,
2311
+ lock: {
2312
+ mode: "pessimistic_write",
2313
+ tables: [repo.metadata.tableName]
2314
+ }
1705
2315
  });
1706
2316
  if (existingEnt) {
1707
2317
  if (existingEnt.deleteTime) {
@@ -1791,12 +2401,24 @@ var CrudBase = class {
1791
2401
  });
1792
2402
  }
1793
2403
  }
2404
+ _applyQueryKeepEntityVersioningDates(qb) {
2405
+ if (this.crudOptions.keepEntityVersioningDates) {
2406
+ const versioningDateFields = getSpecificFields(
2407
+ this.entityClass,
2408
+ "entityVersioningDate"
2409
+ );
2410
+ for (const field of versioningDateFields) {
2411
+ qb.addSelect(`${this.entityAliasName}.${field}`);
2412
+ }
2413
+ }
2414
+ }
1794
2415
  async findOne(id, extraQuery = () => {
1795
2416
  }) {
1796
2417
  const bindingEnt = await this.getBindingPartialEntity();
1797
2418
  const query = this.queryBuilder().where(`${this.entityAliasName}.id = :id`, { id }).take(1);
1798
2419
  this._applyQueryRelations(query);
1799
2420
  this._applyQueryFromBinding(bindingEnt, query);
2421
+ this._applyQueryKeepEntityVersioningDates(query);
1800
2422
  this.extraGetQuery(query);
1801
2423
  extraQuery(query);
1802
2424
  query.take(1);
@@ -1838,6 +2460,7 @@ var CrudBase = class {
1838
2460
  this._applyQueryRelations(query);
1839
2461
  this._applyQueryFilters(query, newEnt);
1840
2462
  this._applyQueryFromBinding(bindingEnt, query);
2463
+ this._applyQueryKeepEntityVersioningDates(query);
1841
2464
  const pageSettings = newEnt instanceof PageSettingsDto ? newEnt : Object.assign(new PageSettingsDto(), newEnt);
1842
2465
  this.extraGetQuery(query);
1843
2466
  extraQuery(query);
@@ -1930,6 +2553,116 @@ var CrudBase = class {
1930
2553
  }
1931
2554
  return new BlankReturnMessageDto2(200, "success");
1932
2555
  }
2556
+ async upsert(_ent) {
2557
+ const bindingEnt = await this.getBindingPartialEntity();
2558
+ if (!_ent) {
2559
+ throw new BlankReturnMessageDto2(400, "Invalid entity").toException();
2560
+ }
2561
+ const ent = new this.entityClass();
2562
+ Object.assign(
2563
+ ent,
2564
+ omit(_ent, ...this._typeormRelations.map((r) => r.propertyName))
2565
+ );
2566
+ const invalidReason = ent.isValidInUpsert();
2567
+ if (invalidReason) {
2568
+ throw new BlankReturnMessageDto2(400, invalidReason).toException();
2569
+ }
2570
+ const upsertColumns = getSpecificFields(this.entityClass, "upsertColumn");
2571
+ const conditions = {
2572
+ ..._4.pick(ent, upsertColumns),
2573
+ ...bindingEnt
2574
+ };
2575
+ const conditionKeys = [
2576
+ .../* @__PURE__ */ new Set([
2577
+ ...getSpecificFields(this.entityClass, "bindingColumn"),
2578
+ ...upsertColumns
2579
+ ])
2580
+ ];
2581
+ Object.assign(ent, conditions);
2582
+ let deleteColumnProperty = "";
2583
+ if (!this.crudOptions.hardDelete) {
2584
+ const deleteColumn = this.repo.manager.connection.getMetadata(
2585
+ this.entityClass
2586
+ ).deleteDateColumn;
2587
+ if (deleteColumn) {
2588
+ ent[deleteColumn.propertyName] = null;
2589
+ deleteColumnProperty = deleteColumn.propertyName;
2590
+ }
2591
+ }
2592
+ await ent.beforeUpsert?.();
2593
+ try {
2594
+ const savedEnt = await this._mayBeTransaction(async (mdb, repo) => {
2595
+ const res = await repo.upsert(ent, {
2596
+ conflictPaths: conditionKeys
2597
+ });
2598
+ const insertedId = res.identifiers[0]?.id;
2599
+ const fetchSaved = () => {
2600
+ const qb = repo.createQueryBuilder(this.entityAliasName);
2601
+ if (insertedId != null) {
2602
+ qb.where(`${this.entityAliasName}.id = :id`, { id: insertedId });
2603
+ } else {
2604
+ conditionKeys.forEach((key, i) => {
2605
+ const paramKey = `_cond_${key}`;
2606
+ qb[i === 0 ? "where" : "andWhere"](
2607
+ `${this.entityAliasName}.${key} = :${paramKey}`,
2608
+ {
2609
+ [paramKey]: conditions[key]
2610
+ }
2611
+ );
2612
+ });
2613
+ }
2614
+ qb.take(1);
2615
+ if (deleteColumnProperty) {
2616
+ if (!this.crudOptions.keepEntityVersioningDates) {
2617
+ qb.addSelect(`${this.entityAliasName}.${deleteColumnProperty}`);
2618
+ }
2619
+ qb.withDeleted();
2620
+ }
2621
+ this._applyQueryKeepEntityVersioningDates(qb);
2622
+ if (this.crudOptions.upsertIncludeRelations) {
2623
+ this._applyQueryRelations(qb);
2624
+ }
2625
+ return qb.getOne();
2626
+ };
2627
+ let saved = await fetchSaved();
2628
+ if (!saved) {
2629
+ this.log.error(
2630
+ `Failed to upsert entity ${JSON.stringify(
2631
+ ent
2632
+ )}: cannot find saved entity after upsert.`
2633
+ );
2634
+ throw new BlankReturnMessageDto2(500, "Internal error").toException();
2635
+ }
2636
+ if (deleteColumnProperty && saved[deleteColumnProperty]) {
2637
+ await repo.restore(insertedId ? { id: insertedId } : conditions);
2638
+ saved = await fetchSaved();
2639
+ if (!saved || saved[deleteColumnProperty]) {
2640
+ this.log.error(
2641
+ `Failed to upsert entity ${JSON.stringify(
2642
+ ent
2643
+ )}: cannot restore soft-deleted entity after upsert.`
2644
+ );
2645
+ throw new BlankReturnMessageDto2(
2646
+ 500,
2647
+ "Internal error"
2648
+ ).toException();
2649
+ }
2650
+ }
2651
+ return saved;
2652
+ });
2653
+ await savedEnt.afterUpsert?.();
2654
+ this.cleanEntityNotInResultFields(savedEnt);
2655
+ return new this.entityReturnMessageDto(200, "success", savedEnt);
2656
+ } catch (e) {
2657
+ if (e instanceof HttpException) {
2658
+ throw e;
2659
+ }
2660
+ this.log.error(
2661
+ `Failed to upsert entity ${JSON.stringify(ent)}: ${e.toString()}`
2662
+ );
2663
+ throw new BlankReturnMessageDto2(500, "Internal error").toException();
2664
+ }
2665
+ }
1933
2666
  async delete(id, cond = {}) {
1934
2667
  const bindingEnt = await this.getBindingPartialEntity();
1935
2668
  let result;
@@ -1962,7 +2695,7 @@ var CrudBase = class {
1962
2695
  );
1963
2696
  return newEnt;
1964
2697
  });
1965
- const invalidResults = _3.compact(
2698
+ const invalidResults = _4.compact(
1966
2699
  await Promise.all(
1967
2700
  ents.map(async (ent) => {
1968
2701
  const reason = ent.isValidInCreate();
@@ -2135,9 +2868,10 @@ var CrudBase = class {
2135
2868
  await flush();
2136
2869
  return result;
2137
2870
  };
2138
- const res = await (options.repo ? op(options.repo) : this.repo.manager.transaction(
2139
- (tdb) => op(tdb.getRepository(this.entityClass))
2140
- ));
2871
+ const res = await this._mayBeTransaction(
2872
+ (tdb, repo) => op(repo),
2873
+ options.repo?.manager || this.repo.manager
2874
+ );
2141
2875
  return res == null ? new BlankReturnMessageDto2(200, "success") : new GenericReturnMessageDto(200, "success", res);
2142
2876
  }
2143
2877
  async _loadFullTextIndex() {
@@ -2197,6 +2931,7 @@ import {
2197
2931
  ParseIntPipe,
2198
2932
  Patch,
2199
2933
  Post,
2934
+ Put,
2200
2935
  Query
2201
2936
  } from "@nestjs/common";
2202
2937
  import {
@@ -2219,7 +2954,7 @@ import {
2219
2954
  OmitType as OmitType2,
2220
2955
  PartialType
2221
2956
  } from "@nestjs/swagger";
2222
- import _5, { upperFirst } from "lodash";
2957
+ import _6, { upperFirst } from "lodash";
2223
2958
  import { RenameClass } from "nesties";
2224
2959
 
2225
2960
  // src/bases/base-restful-controller.ts
@@ -2228,6 +2963,7 @@ var RestfulMethods = [
2228
2963
  "findAll",
2229
2964
  "create",
2230
2965
  "update",
2966
+ "upsert",
2231
2967
  "delete",
2232
2968
  "import"
2233
2969
  ];
@@ -2262,6 +2998,9 @@ var BaseRestfulController = class {
2262
2998
  update(id, dto) {
2263
2999
  return this._service.update(id, dto);
2264
3000
  }
3001
+ upsert(dto) {
3002
+ return this._service.upsert(dto);
3003
+ }
2265
3004
  delete(id) {
2266
3005
  return this._service.delete(id);
2267
3006
  }
@@ -2293,7 +3032,7 @@ var PickTypeExpose = (cl, keys) => {
2293
3032
 
2294
3033
  // src/utility/patch-column-in-get.ts
2295
3034
  import { getApiProperty } from "nesties";
2296
- import _4 from "lodash";
3035
+ import _5 from "lodash";
2297
3036
  import { DECORATORS } from "@nestjs/swagger/dist/constants";
2298
3037
  var PatchColumnsInGet = (cl, originalCl = cl, fieldsToOmit = []) => {
2299
3038
  const omit2 = new Set(fieldsToOmit);
@@ -2319,7 +3058,7 @@ var PatchColumnsInGet = (cl, originalCl = cl, fieldsToOmit = []) => {
2319
3058
  field
2320
3059
  );
2321
3060
  }
2322
- const queryableFieldsRemaining = _4.difference(
3061
+ const queryableFieldsRemaining = _5.difference(
2323
3062
  getSpecificFields(useCl, "queryCondition"),
2324
3063
  mutateFields
2325
3064
  );
@@ -2380,7 +3119,7 @@ var _RestfulFactory = class _RestfulFactory {
2380
3119
  this.entityClass,
2381
3120
  {
2382
3121
  ...this.options,
2383
- fieldsToOmit: _5.uniq([...this.options.fieldsToOmit || [], ...fields])
3122
+ fieldsToOmit: _6.uniq([...this.options.fieldsToOmit || [], ...fields])
2384
3123
  },
2385
3124
  this.__resolveVisited
2386
3125
  );
@@ -2390,7 +3129,7 @@ var _RestfulFactory = class _RestfulFactory {
2390
3129
  this.entityClass,
2391
3130
  {
2392
3131
  ...this.options,
2393
- writeFieldsToOmit: _5.uniq([
3132
+ writeFieldsToOmit: _6.uniq([
2394
3133
  ...this.options.writeFieldsToOmit || [],
2395
3134
  ...fields
2396
3135
  ])
@@ -2403,7 +3142,7 @@ var _RestfulFactory = class _RestfulFactory {
2403
3142
  this.entityClass,
2404
3143
  {
2405
3144
  ...this.options,
2406
- createFieldsToOmit: _5.uniq([
3145
+ createFieldsToOmit: _6.uniq([
2407
3146
  ...this.options.createFieldsToOmit || [],
2408
3147
  ...fields
2409
3148
  ])
@@ -2416,7 +3155,7 @@ var _RestfulFactory = class _RestfulFactory {
2416
3155
  this.entityClass,
2417
3156
  {
2418
3157
  ...this.options,
2419
- updateFieldsToOmit: _5.uniq([
3158
+ updateFieldsToOmit: _6.uniq([
2420
3159
  ...this.options.updateFieldsToOmit || [],
2421
3160
  ...fields
2422
3161
  ])
@@ -2424,12 +3163,25 @@ var _RestfulFactory = class _RestfulFactory {
2424
3163
  this.__resolveVisited
2425
3164
  );
2426
3165
  }
3166
+ omitUpsert(...fields) {
3167
+ return new _RestfulFactory(
3168
+ this.entityClass,
3169
+ {
3170
+ ...this.options,
3171
+ upsertFieldsToOmit: _6.uniq([
3172
+ ...this.options.upsertFieldsToOmit || [],
3173
+ ...fields
3174
+ ])
3175
+ },
3176
+ this.__resolveVisited
3177
+ );
3178
+ }
2427
3179
  omitFindAll(...fields) {
2428
3180
  return new _RestfulFactory(
2429
3181
  this.entityClass,
2430
3182
  {
2431
3183
  ...this.options,
2432
- findAllFieldsToOmit: _5.uniq([
3184
+ findAllFieldsToOmit: _6.uniq([
2433
3185
  ...this.options.findAllFieldsToOmit || [],
2434
3186
  ...fields
2435
3187
  ])
@@ -2442,7 +3194,7 @@ var _RestfulFactory = class _RestfulFactory {
2442
3194
  this.entityClass,
2443
3195
  {
2444
3196
  ...this.options,
2445
- outputFieldsToOmit: _5.uniq([
3197
+ outputFieldsToOmit: _6.uniq([
2446
3198
  ...this.options.outputFieldsToOmit || [],
2447
3199
  ...fields
2448
3200
  ])
@@ -2504,7 +3256,7 @@ var _RestfulFactory = class _RestfulFactory {
2504
3256
  return this.options.entityClassName || this.entityClass.name;
2505
3257
  }
2506
3258
  get fieldsToOmit() {
2507
- return _5.uniq([
3259
+ return _6.uniq([
2508
3260
  ...getSpecificFields(this.entityClass, "notColumn"),
2509
3261
  ...this.options.fieldsToOmit || [],
2510
3262
  ...getTypeormRelations(this.entityClass).map(
@@ -2513,7 +3265,7 @@ var _RestfulFactory = class _RestfulFactory {
2513
3265
  ]);
2514
3266
  }
2515
3267
  get fieldsInCreateToOmit() {
2516
- return _5.uniq([
3268
+ return _6.uniq([
2517
3269
  ...this.fieldsToOmit,
2518
3270
  ...this.options.writeFieldsToOmit || [],
2519
3271
  ...this.options.createFieldsToOmit || [],
@@ -2528,7 +3280,7 @@ var _RestfulFactory = class _RestfulFactory {
2528
3280
  );
2529
3281
  }
2530
3282
  get fieldsInUpdateToOmit() {
2531
- return _5.uniq([
3283
+ return _6.uniq([
2532
3284
  ...this.fieldsToOmit,
2533
3285
  ...this.options.writeFieldsToOmit || [],
2534
3286
  ...this.options.updateFieldsToOmit || [],
@@ -2542,21 +3294,36 @@ var _RestfulFactory = class _RestfulFactory {
2542
3294
  `Update${this.entityClassName}Dto`
2543
3295
  );
2544
3296
  }
3297
+ get fieldsInUpsertToOmit() {
3298
+ return _6.uniq([
3299
+ ...this.fieldsToOmit,
3300
+ ...this.options.writeFieldsToOmit || [],
3301
+ ...this.options.upsertFieldsToOmit || [],
3302
+ ...getSpecificFields(this.entityClass, "notWritable"),
3303
+ ...getSpecificFields(this.entityClass, "notUpsertable")
3304
+ ]);
3305
+ }
3306
+ get upsertDto() {
3307
+ return RenameClass(
3308
+ OmitTypeExclude(this.entityClass, this.fieldsInUpsertToOmit),
3309
+ `Upsert${this.entityClassName}Dto`
3310
+ );
3311
+ }
2545
3312
  get importDto() {
2546
3313
  return ImportDataDto(this.createDto);
2547
3314
  }
2548
3315
  get fieldsInGetToOmit() {
2549
- return _5.uniq([
3316
+ return _6.uniq([
2550
3317
  ...this.fieldsToOmit,
2551
3318
  ...getSpecificFields(this.entityClass, "notQueryable"),
2552
- ..._5.difference(
3319
+ ..._6.difference(
2553
3320
  getSpecificFields(this.entityClass, "requireGetMutator"),
2554
3321
  getSpecificFields(this.entityClass, "getMutator")
2555
3322
  )
2556
3323
  ]);
2557
3324
  }
2558
3325
  get queryableFields() {
2559
- return _5.difference(
3326
+ return _6.difference(
2560
3327
  [
2561
3328
  ...getSpecificFields(this.entityClass, "queryCondition"),
2562
3329
  "pageCount",
@@ -2688,6 +3455,21 @@ var _RestfulFactory = class _RestfulFactory {
2688
3455
  `${this.entityClassName}CreateResultDto`
2689
3456
  );
2690
3457
  }
3458
+ get entityUpsertResultDto() {
3459
+ return RenameClass(
3460
+ OmitType2(this.entityResultDto, [
3461
+ ...this.options.upsertIncludeRelations ? [] : getTypeormRelations(this.entityClass).map(
3462
+ (r) => r.propertyName
3463
+ ),
3464
+ ...getSpecificFields(
3465
+ this.entityClass,
3466
+ "notColumn",
3467
+ (m) => m.hideInUpsert
3468
+ )
3469
+ ]),
3470
+ `${this.entityClassName}UpsertResultDto`
3471
+ );
3472
+ }
2691
3473
  get entityReturnMessageDto() {
2692
3474
  return ReturnMessageDto2(this.entityResultDto);
2693
3475
  }
@@ -2723,7 +3505,7 @@ var _RestfulFactory = class _RestfulFactory {
2723
3505
  HttpCode(200),
2724
3506
  ApiOperation({
2725
3507
  summary: `Create a new ${this.entityClassName}`,
2726
- ..._5.omit(extras, "prefix")
3508
+ ..._6.omit(extras, "prefix")
2727
3509
  }),
2728
3510
  ApiBody({ type: this.createDto }),
2729
3511
  ApiOkResponse({ type: this.entityCreateReturnMessageDto }),
@@ -2733,12 +3515,36 @@ var _RestfulFactory = class _RestfulFactory {
2733
3515
  createParam() {
2734
3516
  return Body(DataPipe(), OmitPipe(this.fieldsInCreateToOmit));
2735
3517
  }
3518
+ isUpsertable() {
3519
+ return !!reflector.get("upsertableEntity", this.entityClass);
3520
+ }
3521
+ upsert(extras = {}) {
3522
+ if (!this.isUpsertable()) {
3523
+ throw new Error(
3524
+ `Entity ${this.entityClass.name} is not upsertable. Please define at least one UpsertColumn or BindingColumn, and set @UpsertableEntity() decorator.`
3525
+ );
3526
+ }
3527
+ return MergeMethodDecorators([
3528
+ this.usePrefix(Put, extras.prefix),
3529
+ HttpCode(200),
3530
+ ApiOperation({
3531
+ summary: `Upsert a ${this.entityClassName}`,
3532
+ ..._6.omit(extras, "prefix")
3533
+ }),
3534
+ ApiBody({ type: this.upsertDto }),
3535
+ ApiOkResponse({ type: this.entityUpsertResultDto }),
3536
+ ApiError(400, `The ${this.entityClassName} is not valid`)
3537
+ ]);
3538
+ }
3539
+ upsertParam() {
3540
+ return Body(DataPipe(), OmitPipe(this.fieldsInUpsertToOmit));
3541
+ }
2736
3542
  findOne(extras = {}) {
2737
3543
  return MergeMethodDecorators([
2738
3544
  this.usePrefix(Get, extras.prefix, ":id"),
2739
3545
  ApiOperation({
2740
3546
  summary: `Find a ${this.entityClassName} by id`,
2741
- ..._5.omit(extras, "prefix")
3547
+ ..._6.omit(extras, "prefix")
2742
3548
  }),
2743
3549
  ApiParam({ name: "id", type: this.idType, required: true }),
2744
3550
  ApiOkResponse({ type: this.entityReturnMessageDto }),
@@ -2760,7 +3566,7 @@ var _RestfulFactory = class _RestfulFactory {
2760
3566
  this.usePrefix(Get, extras.prefix),
2761
3567
  ApiOperation({
2762
3568
  summary: `Find all ${this.entityClassName}`,
2763
- ..._5.omit(extras, "prefix")
3569
+ ..._6.omit(extras, "prefix")
2764
3570
  }),
2765
3571
  ApiOkResponse({ type: this.entityArrayReturnMessageDto })
2766
3572
  ]);
@@ -2770,14 +3576,14 @@ var _RestfulFactory = class _RestfulFactory {
2770
3576
  this.usePrefix(Get, extras.prefix),
2771
3577
  ApiOperation({
2772
3578
  summary: `Find all ${this.entityClassName}`,
2773
- ..._5.omit(extras, "prefix")
3579
+ ..._6.omit(extras, "prefix")
2774
3580
  }),
2775
3581
  ApiOkResponse({ type: this.entityCursorPaginationReturnMessageDto })
2776
3582
  ]);
2777
3583
  }
2778
3584
  getMutatorColumns() {
2779
3585
  const mutatorColumns = getSpecificFields(this.entityClass, "getMutator");
2780
- return _5.difference(mutatorColumns, this.fieldsInGetToOmit);
3586
+ return _6.difference(mutatorColumns, this.fieldsInGetToOmit);
2781
3587
  }
2782
3588
  findAllParam() {
2783
3589
  const mutatorColumns = this.getMutatorColumns();
@@ -2797,7 +3603,7 @@ var _RestfulFactory = class _RestfulFactory {
2797
3603
  HttpCode(200),
2798
3604
  ApiOperation({
2799
3605
  summary: `Update a ${this.entityClassName} by id`,
2800
- ..._5.omit(extras, "prefix")
3606
+ ..._6.omit(extras, "prefix")
2801
3607
  }),
2802
3608
  ApiParam({ name: "id", type: this.idType, required: true }),
2803
3609
  ApiBody({ type: this.updateDto }),
@@ -2819,7 +3625,7 @@ var _RestfulFactory = class _RestfulFactory {
2819
3625
  HttpCode(200),
2820
3626
  ApiOperation({
2821
3627
  summary: `Delete a ${this.entityClassName} by id`,
2822
- ..._5.omit(extras, "prefix")
3628
+ ..._6.omit(extras, "prefix")
2823
3629
  }),
2824
3630
  ApiParam({ name: "id", type: this.idType, required: true }),
2825
3631
  ApiBlankResponse(),
@@ -2836,7 +3642,7 @@ var _RestfulFactory = class _RestfulFactory {
2836
3642
  HttpCode(200),
2837
3643
  ApiOperation({
2838
3644
  summary: `Import ${this.entityClassName}`,
2839
- ..._5.omit(extras, "prefix")
3645
+ ..._6.omit(extras, "prefix")
2840
3646
  }),
2841
3647
  ApiBody({ type: this.importDto }),
2842
3648
  ApiOkResponse({ type: this.importReturnMessageDto }),
@@ -2849,7 +3655,7 @@ var _RestfulFactory = class _RestfulFactory {
2849
3655
  HttpCode(200),
2850
3656
  ApiOperation({
2851
3657
  summary: `${upperFirst(operationName)} a ${this.entityClassName} by id`,
2852
- ..._5.omit(options, "prefix", "returnType")
3658
+ ..._6.omit(options, "prefix", "returnType")
2853
3659
  }),
2854
3660
  options.returnType ? ApiTypeResponse(options.returnType) : ApiBlankResponse(),
2855
3661
  ApiError(
@@ -2873,6 +3679,7 @@ var _RestfulFactory = class _RestfulFactory {
2873
3679
  (m) => routeOptions?.routes?.[m]?.enabled === true
2874
3680
  );
2875
3681
  const validMethods = RestfulMethods.filter((m) => {
3682
+ if (m === "upsert" && !this.isUpsertable()) return false;
2876
3683
  const value = routeOptions?.routes?.[m]?.enabled;
2877
3684
  if (value === false) return false;
2878
3685
  if (value === true) return true;
@@ -2906,6 +3713,11 @@ var _RestfulFactory = class _RestfulFactory {
2906
3713
  paramDecorators: () => [this.idParam(), this.updateParam()],
2907
3714
  methodDecorators: () => [this.update()]
2908
3715
  },
3716
+ upsert: {
3717
+ paramTypes: [this.upsertDto],
3718
+ paramDecorators: () => [this.upsertParam()],
3719
+ methodDecorators: () => [this.upsert()]
3720
+ },
2909
3721
  delete: {
2910
3722
  paramTypes: [this.idType],
2911
3723
  paramDecorators: () => [this.idParam()],
@@ -2972,9 +3784,14 @@ var _RestfulFactory = class _RestfulFactory {
2972
3784
  return RenameClass(cl, `${this.entityClassName}Controller`);
2973
3785
  }
2974
3786
  crudService(options = {}) {
3787
+ const keysToMigrate = [
3788
+ "relations",
3789
+ "outputFieldsToOmit",
3790
+ "upsertIncludeRelations",
3791
+ "keepEntityVersioningDates"
3792
+ ];
2975
3793
  return CrudService(this.entityClass, {
2976
- relations: this.options.relations,
2977
- outputFieldsToOmit: this.options.outputFieldsToOmit,
3794
+ ..._6.pick(this.options, keysToMigrate),
2978
3795
  ...options
2979
3796
  });
2980
3797
  }
@@ -2994,6 +3811,12 @@ __decorateClass([
2994
3811
  __decorateClass([
2995
3812
  Memorize()
2996
3813
  ], _RestfulFactory.prototype, "updateDto", 1);
3814
+ __decorateClass([
3815
+ Memorize()
3816
+ ], _RestfulFactory.prototype, "fieldsInUpsertToOmit", 1);
3817
+ __decorateClass([
3818
+ Memorize()
3819
+ ], _RestfulFactory.prototype, "upsertDto", 1);
2997
3820
  __decorateClass([
2998
3821
  Memorize()
2999
3822
  ], _RestfulFactory.prototype, "importDto", 1);
@@ -3015,6 +3838,9 @@ __decorateClass([
3015
3838
  __decorateClass([
3016
3839
  Memorize()
3017
3840
  ], _RestfulFactory.prototype, "entityCreateResultDto", 1);
3841
+ __decorateClass([
3842
+ Memorize()
3843
+ ], _RestfulFactory.prototype, "entityUpsertResultDto", 1);
3018
3844
  __decorateClass([
3019
3845
  Memorize()
3020
3846
  ], _RestfulFactory.prototype, "entityReturnMessageDto", 1);
@@ -3099,6 +3925,195 @@ var applyQueryMatchBooleanMySQL = createQueryCondition(
3099
3925
  }
3100
3926
  }
3101
3927
  );
3928
+
3929
+ // src/transactional-typeorm.module.ts
3930
+ var import_typeorm9 = __toESM(require_typeorm());
3931
+ import { EntityManager as EntityManager2 } from "typeorm";
3932
+ import {
3933
+ Inject as Inject2,
3934
+ Injectable,
3935
+ Module,
3936
+ Scope
3937
+ } from "@nestjs/common";
3938
+ import { createProvider } from "nesties";
3939
+ import { REQUEST } from "@nestjs/core";
3940
+
3941
+ // src/utility/create-dynamic-fetcher-proxy.ts
3942
+ var createDynamicFetcherProxy = (initial, fetcher) => {
3943
+ return new Proxy(initial, {
3944
+ get(_target, prop, receiver) {
3945
+ const current = fetcher();
3946
+ const value = Reflect.get(current, prop, receiver);
3947
+ if (typeof value === "function") {
3948
+ return value.bind(current);
3949
+ }
3950
+ return value;
3951
+ },
3952
+ set(_target, prop, value, receiver) {
3953
+ const current = fetcher();
3954
+ return Reflect.set(current, prop, value, receiver);
3955
+ },
3956
+ has(_target, prop) {
3957
+ const current = fetcher();
3958
+ return Reflect.has(current, prop);
3959
+ },
3960
+ ownKeys(_target) {
3961
+ const current = fetcher();
3962
+ return Reflect.ownKeys(current);
3963
+ },
3964
+ getOwnPropertyDescriptor(_target, prop) {
3965
+ const current = fetcher();
3966
+ return Reflect.getOwnPropertyDescriptor(current, prop);
3967
+ },
3968
+ defineProperty(_target, prop, descriptor) {
3969
+ const current = fetcher();
3970
+ return Reflect.defineProperty(current, prop, descriptor);
3971
+ },
3972
+ deleteProperty(_target, prop) {
3973
+ const current = fetcher();
3974
+ return Reflect.deleteProperty(current, prop);
3975
+ }
3976
+ });
3977
+ };
3978
+
3979
+ // src/utility/create-inject-from-token-factory.ts
3980
+ import { Inject } from "@nestjs/common";
3981
+ var createInjectFromTokenFactory = (factory) => (...params) => Inject(factory(...params));
3982
+
3983
+ // src/transactional-typeorm.module.ts
3984
+ import { Observable } from "rxjs";
3985
+ var requestWeakMap = /* @__PURE__ */ new WeakMap();
3986
+ var normalizeDataSourceToken = (token) => typeof token === "string" ? token : token.name || token.toString();
3987
+ var TransactionalTypeOrmInterceptor = (dataSource) => {
3988
+ const token = (0, import_typeorm9.getEntityManagerToken)(dataSource);
3989
+ const interceptorClass = class SpecificTransactionalTypeOrmInterceptor {
3990
+ constructor(entityManager) {
3991
+ this.entityManager = entityManager;
3992
+ }
3993
+ intercept(context, next) {
3994
+ const request = context.switchToHttp().getRequest();
3995
+ return new Observable((observer) => {
3996
+ let innerSub = null;
3997
+ let finished = false;
3998
+ let abort;
3999
+ const aborted = new Promise((_7, reject) => {
4000
+ abort = reject;
4001
+ });
4002
+ const run = this.entityManager.transaction(async (txEm) => {
4003
+ requestWeakMap.set(request, txEm);
4004
+ const completion = new Promise((resolve, reject) => {
4005
+ innerSub = next.handle().subscribe({
4006
+ next: (v) => observer.next(v),
4007
+ error: (err) => {
4008
+ finished = true;
4009
+ observer.error(err);
4010
+ reject(err);
4011
+ },
4012
+ complete: () => {
4013
+ finished = true;
4014
+ observer.complete();
4015
+ resolve();
4016
+ }
4017
+ });
4018
+ });
4019
+ await Promise.race([completion, aborted]);
4020
+ }).finally(() => {
4021
+ requestWeakMap.delete(request);
4022
+ }).catch((err) => {
4023
+ if (!finished) observer.error(err);
4024
+ });
4025
+ return () => {
4026
+ try {
4027
+ innerSub?.unsubscribe();
4028
+ } finally {
4029
+ if (!finished) {
4030
+ abort(new Error("Request aborted / subscription unsubscribed"));
4031
+ }
4032
+ }
4033
+ };
4034
+ });
4035
+ }
4036
+ };
4037
+ Object.defineProperty(interceptorClass, "name", {
4038
+ value: `TransactionalTypeOrmInterceptor_${normalizeDataSourceToken(token)}`
4039
+ });
4040
+ Reflect.defineMetadata(
4041
+ "design:paramtypes",
4042
+ [EntityManager2],
4043
+ interceptorClass
4044
+ );
4045
+ Inject2(token)(interceptorClass.prototype, void 0, 0);
4046
+ Injectable()(interceptorClass);
4047
+ return interceptorClass;
4048
+ };
4049
+ var getTransactionalEntityManagerToken = (dataSource) => `Transactional${normalizeDataSourceToken((0, import_typeorm9.getEntityManagerToken)(dataSource))}`;
4050
+ var getTransactionalEntityManagerProvider = (dataSource) => createProvider(
4051
+ {
4052
+ provide: getTransactionalEntityManagerToken(dataSource),
4053
+ inject: [(0, import_typeorm9.getEntityManagerToken)(dataSource), REQUEST],
4054
+ scope: Scope.REQUEST
4055
+ },
4056
+ (entityManager, request) => {
4057
+ if (requestWeakMap.has(request)) {
4058
+ return requestWeakMap.get(request);
4059
+ }
4060
+ return createDynamicFetcherProxy(
4061
+ entityManager,
4062
+ () => requestWeakMap.get(request) || entityManager
4063
+ );
4064
+ }
4065
+ );
4066
+ var InjectTransactionalEntityManager = createInjectFromTokenFactory(
4067
+ getTransactionalEntityManagerToken
4068
+ );
4069
+ var getTransactionalRepositoryToken = (entity, dataSource) => `Transactional${normalizeDataSourceToken(
4070
+ (0, import_typeorm9.getEntityManagerToken)(dataSource)
4071
+ )}Repository_${entity.name || entity.toString()}`;
4072
+ var getTransactionalRepositoryProvider = (entity, dataSource) => createProvider(
4073
+ {
4074
+ provide: getTransactionalRepositoryToken(entity, dataSource),
4075
+ inject: [(0, import_typeorm9.getEntityManagerToken)(dataSource), REQUEST],
4076
+ scope: Scope.REQUEST
4077
+ },
4078
+ (entityManager, req) => {
4079
+ if (requestWeakMap.has(req)) {
4080
+ const transactionalEntityManager = requestWeakMap.get(req);
4081
+ return transactionalEntityManager.getRepository(entity);
4082
+ }
4083
+ return createDynamicFetcherProxy(
4084
+ entityManager.getRepository(entity),
4085
+ () => {
4086
+ const transactionalEntityManager = requestWeakMap.get(req) || entityManager;
4087
+ return transactionalEntityManager.getRepository(entity);
4088
+ }
4089
+ );
4090
+ }
4091
+ );
4092
+ var InjectTransactionalRepository = createInjectFromTokenFactory(
4093
+ getTransactionalRepositoryToken
4094
+ );
4095
+ var TransactionalTypeOrmModule = class {
4096
+ static forFeature(entities, dataSource) {
4097
+ const entityArray = Array.isArray(entities) ? entities : [entities];
4098
+ const providers = [
4099
+ getTransactionalEntityManagerProvider(dataSource),
4100
+ ...entityArray.map(
4101
+ (entity) => getTransactionalRepositoryProvider(entity, dataSource)
4102
+ )
4103
+ ];
4104
+ const moduleImports = entityArray.length ? [import_typeorm9.TypeOrmModule.forFeature(entityArray, dataSource)] : [];
4105
+ const moduleExports = [...providers, ...moduleImports];
4106
+ return {
4107
+ module: TransactionalTypeOrmModule,
4108
+ imports: moduleImports,
4109
+ providers,
4110
+ exports: moduleExports
4111
+ };
4112
+ }
4113
+ };
4114
+ TransactionalTypeOrmModule = __decorateClass([
4115
+ Module({})
4116
+ ], TransactionalTypeOrmModule);
3102
4117
  export {
3103
4118
  BindingColumn,
3104
4119
  BindingValue,
@@ -3127,6 +4142,8 @@ export {
3127
4142
  ImportDataDto,
3128
4143
  ImportEntryBaseDto,
3129
4144
  ImportEntryDto,
4145
+ InjectTransactionalEntityManager,
4146
+ InjectTransactionalRepository,
3130
4147
  Inner,
3131
4148
  IntColumn,
3132
4149
  InternalColumn,
@@ -3136,6 +4153,7 @@ export {
3136
4153
  NotCreatable,
3137
4154
  NotInResult,
3138
4155
  NotQueryable,
4156
+ NotUpsertable,
3139
4157
  NotWritable,
3140
4158
  OmitPipe,
3141
4159
  OptionalDataPipe,
@@ -3174,6 +4192,10 @@ export {
3174
4192
  StringJsonColumn,
3175
4193
  TextColumn,
3176
4194
  TimeBase,
4195
+ TransactionalTypeOrmInterceptor,
4196
+ TransactionalTypeOrmModule,
4197
+ UpsertColumn,
4198
+ UpsertableEntity,
3177
4199
  UuidColumn,
3178
4200
  applyQueryMatchBoolean,
3179
4201
  applyQueryMatchBooleanMySQL,
@@ -3186,6 +4208,10 @@ export {
3186
4208
  createQueryCondition,
3187
4209
  createQueryOperator,
3188
4210
  createQueryOperatorArrayify,
3189
- createQueryWrap
4211
+ createQueryWrap,
4212
+ getTransactionalEntityManagerProvider,
4213
+ getTransactionalEntityManagerToken,
4214
+ getTransactionalRepositoryProvider,
4215
+ getTransactionalRepositoryToken
3190
4216
  };
3191
4217
  //# sourceMappingURL=index.mjs.map