@nest-omni/core 4.1.3-14 → 4.1.3-17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/audit/audit.module.js +7 -0
  2. package/audit/services/entity-audit.service.js +2 -1
  3. package/audit/services/manual-audit-log.service.js +2 -2
  4. package/audit/services/multi-database.service.d.ts +0 -5
  5. package/audit/services/multi-database.service.js +0 -24
  6. package/audit/services/transaction-audit.service.js +3 -2
  7. package/cache/dependencies/db.dependency.d.ts +2 -2
  8. package/cache/dependencies/db.dependency.js +4 -4
  9. package/decorators/field.decorators.d.ts +1 -1
  10. package/http-client/examples/proxy-from-environment.example.d.ts +1 -1
  11. package/http-client/examples/proxy-from-environment.example.js +18 -19
  12. package/http-client/services/logging.service.js +2 -3
  13. package/index.d.ts +1 -1
  14. package/index.js +1 -1
  15. package/package.json +3 -2
  16. package/setup/bootstrap.setup.d.ts +1 -1
  17. package/shared/service-registry.module.js +2 -15
  18. package/shared/services/api-config.service.js +1 -0
  19. package/validators/is-exists.validator.d.ts +2 -7
  20. package/validators/is-exists.validator.js +2 -24
  21. package/validators/is-unique.validator.d.ts +2 -7
  22. package/validators/is-unique.validator.js +2 -24
  23. package/transaction/__tests__/mocks.d.ts +0 -9
  24. package/transaction/__tests__/mocks.js +0 -33
  25. package/transaction/base-service-transaction.d.ts +0 -99
  26. package/transaction/base-service-transaction.js +0 -286
  27. package/transaction/cls-compatibility.service.d.ts +0 -55
  28. package/transaction/cls-compatibility.service.js +0 -127
  29. package/transaction/data-source-registry.d.ts +0 -91
  30. package/transaction/data-source-registry.js +0 -349
  31. package/transaction/data-source.util.d.ts +0 -142
  32. package/transaction/data-source.util.js +0 -330
  33. package/transaction/database-adapter.d.ts +0 -44
  34. package/transaction/database-adapter.js +0 -240
  35. package/transaction/decorators/entity-datasource.decorator.d.ts +0 -62
  36. package/transaction/decorators/entity-datasource.decorator.js +0 -105
  37. package/transaction/index.d.ts +0 -15
  38. package/transaction/index.js +0 -68
  39. package/transaction/logging-transactional.interceptor.d.ts +0 -18
  40. package/transaction/logging-transactional.interceptor.js +0 -163
  41. package/transaction/transaction-context.service.d.ts +0 -137
  42. package/transaction/transaction-context.service.js +0 -411
  43. package/transaction/transaction-manager.d.ts +0 -230
  44. package/transaction/transaction-manager.js +0 -1001
  45. package/transaction/transaction-synchronization.d.ts +0 -171
  46. package/transaction/transaction-synchronization.js +0 -380
  47. package/transaction/transaction.errors.d.ts +0 -91
  48. package/transaction/transaction.errors.js +0 -206
  49. package/transaction/transaction.module.d.ts +0 -30
  50. package/transaction/transaction.module.js +0 -98
  51. package/transaction/transactional.decorator.d.ts +0 -82
  52. package/transaction/transactional.decorator.js +0 -319
  53. package/transaction/typeorm-module-wrapper.d.ts +0 -96
  54. package/transaction/typeorm-module-wrapper.js +0 -197
@@ -23,8 +23,7 @@ exports.IsUnique = IsUnique;
23
23
  const class_validator_1 = require("class-validator");
24
24
  const nestjs_i18n_1 = require("nestjs-i18n");
25
25
  const common_1 = require("@nestjs/common");
26
- const transaction_1 = require("../transaction");
27
- const transaction_2 = require("../transaction");
26
+ const transaction_1 = require("@nest-omni/transaction");
28
27
  let IsUniqueValidator = class IsUniqueValidator {
29
28
  constructor() { }
30
29
  /**
@@ -81,27 +80,6 @@ let IsUniqueValidator = class IsUniqueValidator {
81
80
  const entityName = name.charAt(0).toUpperCase() + name.slice(1) + 'Entity';
82
81
  return entityName;
83
82
  }
84
- /**
85
- * 获取数据源
86
- * 支持多数据源配置,保持向后兼容
87
- */
88
- getDataSource(dataSourceOrName) {
89
- // 1. 如果传入的是 DataSource 实例,直接返回
90
- if (dataSourceOrName && typeof dataSourceOrName !== 'string') {
91
- return dataSourceOrName;
92
- }
93
- // 2. 如果传入的是数据源名称,获取对应的数据源
94
- if (typeof dataSourceOrName === 'string') {
95
- return (0, transaction_2.getDataSource)(dataSourceOrName);
96
- }
97
- // 3. 默认:尝试从请求上下文获取,然后获取 default 数据源
98
- try {
99
- return transaction_1.TransactionContextService.getDataSource();
100
- }
101
- catch (_a) {
102
- return (0, transaction_2.getDataSource)('default');
103
- }
104
- }
105
83
  validate(value, args) {
106
84
  return __awaiter(this, void 0, void 0, function* () {
107
85
  const [entityRef, findCondition, options] = args.constraints;
@@ -109,7 +87,7 @@ let IsUniqueValidator = class IsUniqueValidator {
109
87
  const entityClass = this.resolveEntity(entityRef, args.property, args.object);
110
88
  // 获取数据源(支持多数据源)
111
89
  const dataSourceName = (options === null || options === void 0 ? void 0 : options.dataSource) || 'default';
112
- const dataSource = this.getDataSource(dataSourceName);
90
+ const dataSource = (0, transaction_1.getDataSource)(dataSourceName);
113
91
  const repository = dataSource.getRepository(entityClass);
114
92
  args.value = value;
115
93
  let exists;
@@ -1,9 +0,0 @@
1
- import { TransactionStatus } from '../transaction-manager';
2
- /**
3
- * 创建 Mock TransactionStatus
4
- */
5
- export declare function createMockTransactionStatus(overrides?: Partial<TransactionStatus>): TransactionStatus;
6
- /**
7
- * 创建 Mock EntityManager
8
- */
9
- export declare function createMockEntityManager(): any;
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMockTransactionStatus = createMockTransactionStatus;
4
- exports.createMockEntityManager = createMockEntityManager;
5
- /**
6
- * 创建 Mock TransactionStatus
7
- */
8
- function createMockTransactionStatus(overrides) {
9
- return Object.assign({ isCompleted: false, isRollbackOnly: false, isNewTransaction: false, dataSourceName: 'default', startTime: new Date(), definition: {
10
- propagation: 0, // Propagation.REQUIRED
11
- }, nestingLevel: 1 }, overrides);
12
- }
13
- /**
14
- * 创建 Mock EntityManager
15
- */
16
- function createMockEntityManager() {
17
- const mockEntityManager = {
18
- save: jest.fn().mockResolvedValue({}),
19
- find: jest.fn().mockResolvedValue([]),
20
- findOne: jest.fn().mockResolvedValue(null),
21
- update: jest.fn().mockResolvedValue(undefined),
22
- delete: jest.fn().mockResolvedValue(undefined),
23
- remove: jest.fn().mockResolvedValue({}),
24
- count: jest.fn().mockResolvedValue(0),
25
- query: jest.fn().mockResolvedValue([]),
26
- createQueryBuilder: jest.fn().mockReturnValue({}),
27
- getRepository: jest.fn().mockReturnValue({}),
28
- queryRunner: {
29
- isTransactionActive: false,
30
- },
31
- };
32
- return mockEntityManager;
33
- }
@@ -1,99 +0,0 @@
1
- import { Logger } from '@nestjs/common';
2
- import { Repository, EntityManager } from 'typeorm';
3
- import { TransactionManager, Propagation, IsolationLevel, TransactionStatus } from './transaction-manager';
4
- /**
5
- * 事务感知的基础服务类
6
- * 提供统一的数据操作接口,自动处理事务
7
- */
8
- export declare abstract class BaseService {
9
- protected readonly transactionManager: TransactionManager;
10
- protected readonly defaultDataSourceName: string;
11
- protected readonly logger: Logger;
12
- constructor(transactionManager: TransactionManager, defaultDataSourceName?: string);
13
- /**
14
- * 获取指定数据源的 EntityManager
15
- */
16
- protected getEntityManager(dataSourceName?: string): EntityManager;
17
- /**
18
- * 手动在事务中执行
19
- */
20
- protected executeInTransaction<T>(callback: (em: EntityManager) => Promise<T>, options?: {
21
- propagation?: Propagation;
22
- readOnly?: boolean;
23
- isolation?: IsolationLevel;
24
- dataSource?: string;
25
- }): Promise<T>;
26
- /**
27
- * 保存实体
28
- */
29
- protected save<T>(entity: T, dataSourceName?: string): Promise<T>;
30
- /**
31
- * 批量保存实体
32
- */
33
- protected saveMany<T>(entities: T[], dataSourceName?: string): Promise<T[]>;
34
- /**
35
- * 更新实体
36
- */
37
- protected update<T>(entityClass: any, criteria: any, partialEntity: Partial<T>, dataSourceName?: string): Promise<void>;
38
- /**
39
- * 删除实体
40
- */
41
- protected remove<T>(entity: T, dataSourceName?: string): Promise<T>;
42
- /**
43
- * 根据 ID 删除实体
44
- */
45
- protected delete<T>(entityClass: any, id: string | number | (string | number)[], dataSourceName?: string): Promise<void>;
46
- /**
47
- * 查找实体
48
- */
49
- protected find<T>(entityClass: any, options?: any, dataSourceName?: string): Promise<T[]>;
50
- /**
51
- * 查找一个实体
52
- */
53
- protected findOne<T>(entityClass: any, options?: any, dataSourceName?: string): Promise<T | null>;
54
- /**
55
- * 根据 ID 查找实体
56
- */
57
- protected findById<T>(entityClass: any, id: string | number, dataSourceName?: string): Promise<T | null>;
58
- /**
59
- * 计数
60
- */
61
- protected count<T>(entityClass: any, options?: any, dataSourceName?: string): Promise<number>;
62
- /**
63
- * 执行原生 SQL
64
- */
65
- protected query<T = any>(query: string, parameters?: any[], dataSourceName?: string): Promise<T[]>;
66
- /**
67
- * 创建 Query Builder
68
- */
69
- protected createQueryBuilder<T>(entityClass: any, alias?: string, dataSourceName?: string): Promise<import("typeorm").SelectQueryBuilder<import("typeorm").ObjectLiteral>>;
70
- /**
71
- * 获取 Repository
72
- */
73
- protected getRepository<T>(entity: any, dataSourceName?: string): Promise<Repository<T>>;
74
- /**
75
- * 执行跨数据源操作
76
- */
77
- protected executeAcrossDataSources<T>(operations: Array<{
78
- dataSourceName: string;
79
- operation: (em: EntityManager) => Promise<any>;
80
- }>, options?: {
81
- rollbackOnError?: boolean;
82
- }): Promise<T[]>;
83
- /**
84
- * 批量操作优化
85
- */
86
- protected batchOperation<T, R>(items: T[], batchSize: number, operation: (batch: T[], em: EntityManager) => Promise<R[]>, options?: {
87
- continueOnError?: boolean;
88
- isolation?: IsolationLevel;
89
- dataSourceName?: string;
90
- }): Promise<R[]>;
91
- /**
92
- * 检查是否在事务中
93
- */
94
- protected isInTransaction(dataSourceName?: string): boolean;
95
- /**
96
- * 获取当前事务状态
97
- */
98
- protected getCurrentTransactionStatus(dataSourceName?: string): TransactionStatus;
99
- }
@@ -1,286 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
- return new (P || (P = Promise))(function (resolve, reject) {
17
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
- step((generator = generator.apply(thisArg, _arguments || [])).next());
21
- });
22
- };
23
- var BaseService_1;
24
- Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.BaseService = void 0;
26
- const common_1 = require("@nestjs/common");
27
- const transaction_manager_1 = require("./transaction-manager");
28
- /**
29
- * 事务感知的基础服务类
30
- * 提供统一的数据操作接口,自动处理事务
31
- */
32
- let BaseService = BaseService_1 = class BaseService {
33
- constructor(transactionManager, defaultDataSourceName = 'default') {
34
- this.transactionManager = transactionManager;
35
- this.defaultDataSourceName = defaultDataSourceName;
36
- this.logger = new common_1.Logger(BaseService_1.name);
37
- }
38
- /**
39
- * 获取指定数据源的 EntityManager
40
- */
41
- getEntityManager(dataSourceName) {
42
- const dsName = dataSourceName || this.defaultDataSourceName;
43
- const em = this.transactionManager.getCurrentEntityManager(dsName);
44
- if (!em) {
45
- throw new Error(`No active transaction for dataSource: ${dsName}. ` +
46
- `Use @Transactional decorator to start a transaction.`);
47
- }
48
- return em;
49
- }
50
- /**
51
- * 手动在事务中执行
52
- */
53
- executeInTransaction(callback, options) {
54
- return __awaiter(this, void 0, void 0, function* () {
55
- const status = yield this.transactionManager.getTransaction({
56
- propagation: (options === null || options === void 0 ? void 0 : options.propagation) || transaction_manager_1.Propagation.REQUIRED,
57
- readOnly: (options === null || options === void 0 ? void 0 : options.readOnly) || false,
58
- isolationLevel: options === null || options === void 0 ? void 0 : options.isolation,
59
- dataSourceName: (options === null || options === void 0 ? void 0 : options.dataSource) || this.defaultDataSourceName,
60
- name: `executeInTransaction-${this.constructor.name}`,
61
- });
62
- try {
63
- const em = this.getEntityManager(options === null || options === void 0 ? void 0 : options.dataSource);
64
- const result = yield callback(em);
65
- yield this.transactionManager.commit(status);
66
- return result;
67
- }
68
- catch (error) {
69
- yield this.transactionManager.rollback(status);
70
- throw error;
71
- }
72
- });
73
- }
74
- /**
75
- * 保存实体
76
- */
77
- save(entity, dataSourceName) {
78
- return __awaiter(this, void 0, void 0, function* () {
79
- const em = this.getEntityManager(dataSourceName);
80
- return em.save(entity);
81
- });
82
- }
83
- /**
84
- * 批量保存实体
85
- */
86
- saveMany(entities, dataSourceName) {
87
- return __awaiter(this, void 0, void 0, function* () {
88
- const em = this.getEntityManager(dataSourceName);
89
- return em.save(entities);
90
- });
91
- }
92
- /**
93
- * 更新实体
94
- */
95
- update(entityClass, criteria, partialEntity, dataSourceName) {
96
- return __awaiter(this, void 0, void 0, function* () {
97
- const em = this.getEntityManager(dataSourceName);
98
- yield em.update(entityClass, criteria, partialEntity);
99
- });
100
- }
101
- /**
102
- * 删除实体
103
- */
104
- remove(entity, dataSourceName) {
105
- return __awaiter(this, void 0, void 0, function* () {
106
- const em = this.getEntityManager(dataSourceName);
107
- return em.remove(entity);
108
- });
109
- }
110
- /**
111
- * 根据 ID 删除实体
112
- */
113
- delete(entityClass, id, dataSourceName) {
114
- return __awaiter(this, void 0, void 0, function* () {
115
- const em = this.getEntityManager(dataSourceName);
116
- yield em.delete(entityClass, id);
117
- });
118
- }
119
- /**
120
- * 查找实体
121
- */
122
- find(entityClass, options, dataSourceName) {
123
- return __awaiter(this, void 0, void 0, function* () {
124
- const em = this.getEntityManager(dataSourceName);
125
- return em.find(entityClass, options);
126
- });
127
- }
128
- /**
129
- * 查找一个实体
130
- */
131
- findOne(entityClass, options, dataSourceName) {
132
- return __awaiter(this, void 0, void 0, function* () {
133
- const em = this.getEntityManager(dataSourceName);
134
- return em.findOne(entityClass, options);
135
- });
136
- }
137
- /**
138
- * 根据 ID 查找实体
139
- */
140
- findById(entityClass, id, dataSourceName) {
141
- return __awaiter(this, void 0, void 0, function* () {
142
- const em = this.getEntityManager(dataSourceName);
143
- return em.findOne(entityClass, {
144
- where: { id },
145
- });
146
- });
147
- }
148
- /**
149
- * 计数
150
- */
151
- count(entityClass, options, dataSourceName) {
152
- return __awaiter(this, void 0, void 0, function* () {
153
- const em = this.getEntityManager(dataSourceName);
154
- return em.count(entityClass, options);
155
- });
156
- }
157
- /**
158
- * 执行原生 SQL
159
- */
160
- query(query, parameters, dataSourceName) {
161
- return __awaiter(this, void 0, void 0, function* () {
162
- const em = this.getEntityManager(dataSourceName);
163
- return em.query(query, parameters);
164
- });
165
- }
166
- /**
167
- * 创建 Query Builder
168
- */
169
- createQueryBuilder(entityClass, alias, dataSourceName) {
170
- return __awaiter(this, void 0, void 0, function* () {
171
- const em = this.getEntityManager(dataSourceName);
172
- return em.createQueryBuilder(entityClass, alias || entityClass.name.toLowerCase());
173
- });
174
- }
175
- /**
176
- * 获取 Repository
177
- */
178
- getRepository(entity, dataSourceName) {
179
- return __awaiter(this, void 0, void 0, function* () {
180
- const em = this.getEntityManager(dataSourceName);
181
- return em.getRepository(entity);
182
- });
183
- }
184
- /**
185
- * 执行跨数据源操作
186
- */
187
- executeAcrossDataSources(operations, options) {
188
- return __awaiter(this, void 0, void 0, function* () {
189
- const results = [];
190
- const startedTransactions = [];
191
- try {
192
- // 在每个数据源上开始事务
193
- for (const op of operations) {
194
- const status = yield this.transactionManager.getTransaction({
195
- propagation: transaction_manager_1.Propagation.REQUIRED,
196
- dataSourceName: op.dataSourceName,
197
- });
198
- startedTransactions.push(status);
199
- }
200
- // 执行所有操作
201
- for (const op of operations) {
202
- const em = this.getEntityManager(op.dataSourceName);
203
- const result = yield op.operation(em);
204
- results.push(result);
205
- }
206
- // 提交所有事务
207
- for (const status of startedTransactions) {
208
- yield this.transactionManager.commit(status);
209
- }
210
- return results;
211
- }
212
- catch (error) {
213
- // 回滚所有事务
214
- if ((options === null || options === void 0 ? void 0 : options.rollbackOnError) !== false) {
215
- for (const status of startedTransactions.reverse()) {
216
- try {
217
- yield this.transactionManager.rollback(status);
218
- }
219
- catch (rollbackError) {
220
- this.logger.error(`Failed to rollback transaction on ${status.dataSourceName}:`, rollbackError);
221
- }
222
- }
223
- }
224
- throw error;
225
- }
226
- });
227
- }
228
- /**
229
- * 批量操作优化
230
- */
231
- batchOperation(items, batchSize, operation, options) {
232
- return __awaiter(this, void 0, void 0, function* () {
233
- const allResults = [];
234
- let processedCount = 0;
235
- return yield this.executeInTransaction((em) => __awaiter(this, void 0, void 0, function* () {
236
- for (let i = 0; i < items.length; i += batchSize) {
237
- const batch = items.slice(i, i + batchSize);
238
- const batchNumber = Math.floor(i / batchSize) + 1;
239
- try {
240
- this.logger.log(`Processing batch ${batchNumber}/${Math.ceil(items.length / batchSize)}`);
241
- const results = yield operation(batch, em);
242
- allResults.push(...results);
243
- processedCount += batch.length;
244
- }
245
- catch (error) {
246
- this.logger.error(`Batch ${batchNumber} failed:`, error);
247
- if (options === null || options === void 0 ? void 0 : options.continueOnError) {
248
- // 记录失败但继续
249
- processedCount += batch.length;
250
- continue;
251
- }
252
- else {
253
- throw new Error(`Batch operation failed at batch ${batchNumber}. Processed ${processedCount}/${items.length} items.`);
254
- }
255
- }
256
- }
257
- return allResults;
258
- }), {
259
- isolation: options === null || options === void 0 ? void 0 : options.isolation,
260
- dataSource: options === null || options === void 0 ? void 0 : options.dataSourceName,
261
- });
262
- });
263
- }
264
- /**
265
- * 检查是否在事务中
266
- */
267
- isInTransaction(dataSourceName) {
268
- const dsName = dataSourceName || this.defaultDataSourceName;
269
- const status = this.transactionManager.getCurrentTransaction(dsName);
270
- return status !== null && !status.isCompleted;
271
- }
272
- /**
273
- * 获取当前事务状态
274
- */
275
- getCurrentTransactionStatus(dataSourceName) {
276
- const dsName = dataSourceName || this.defaultDataSourceName;
277
- return this.transactionManager.getCurrentTransaction(dsName);
278
- }
279
- };
280
- exports.BaseService = BaseService;
281
- exports.BaseService = BaseService = BaseService_1 = __decorate([
282
- (0, common_1.Injectable)(),
283
- __param(1, (0, common_1.Optional)()),
284
- __param(1, (0, common_1.Inject)('DEFAULT_DATA_SOURCE_NAME')),
285
- __metadata("design:paramtypes", [transaction_manager_1.TransactionManager, String])
286
- ], BaseService);
@@ -1,55 +0,0 @@
1
- import { EntityManager } from 'typeorm';
2
- import { TransactionContextService } from './transaction-context.service';
3
- /**
4
- * CLS (Continuation Local Storage) 兼容服务
5
- * 提供与 nestjs-cls 兼容的 API,但底层使用事务上下文服务
6
- */
7
- export declare class ClsCompatibilityService {
8
- private readonly transactionContext;
9
- private readonly defaultDataSource?;
10
- private readonly store;
11
- constructor(transactionContext: TransactionContextService, defaultDataSource?: string);
12
- /**
13
- * 设置值到存储中
14
- */
15
- set<T>(key: string, value: T): void;
16
- /**
17
- * 从存储中获取值
18
- */
19
- get<T>(key: string): T | undefined;
20
- /**
21
- * 根据数据源名称获取 EntityManager
22
- */
23
- getEntityManager(dataSourceName?: string): EntityManager | null;
24
- /**
25
- * 设置指定数据源的 EntityManager
26
- */
27
- setEntityManager(dataSourceName: string, entityManager: EntityManager): void;
28
- /**
29
- * 检查是否在事务中
30
- */
31
- isInTransaction(dataSourceName?: string): boolean;
32
- /**
33
- * 获取所有活跃的事务上下文
34
- */
35
- getActiveTransactions(): Map<string, {
36
- entityManager: EntityManager;
37
- dataSource: any;
38
- }>;
39
- /**
40
- * 清理存储
41
- */
42
- clear(): void;
43
- }
44
- /**
45
- * CLS 服务管理器(静态类,模拟 nestjs-cls 的 API)
46
- */
47
- export declare class ClsServiceManager {
48
- private static clsService;
49
- static setClsService(clsService: ClsCompatibilityService): void;
50
- static getClsService(): ClsCompatibilityService;
51
- }
52
- /**
53
- * CLS 装饰器(兼容性)
54
- */
55
- export declare function SetCls(key?: string): (target: any, propertyKey: string | symbol, parameterIndex: number) => void;
@@ -1,127 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.ClsServiceManager = exports.ClsCompatibilityService = void 0;
16
- exports.SetCls = SetCls;
17
- const common_1 = require("@nestjs/common");
18
- const transaction_context_service_1 = require("./transaction-context.service");
19
- /**
20
- * CLS (Continuation Local Storage) 兼容服务
21
- * 提供与 nestjs-cls 兼容的 API,但底层使用事务上下文服务
22
- */
23
- let ClsCompatibilityService = class ClsCompatibilityService {
24
- constructor(transactionContext, defaultDataSource) {
25
- this.transactionContext = transactionContext;
26
- this.defaultDataSource = defaultDataSource;
27
- this.store = new Map();
28
- }
29
- /**
30
- * 设置值到存储中
31
- */
32
- set(key, value) {
33
- if (key === 'entityManager') {
34
- // 如果设置 entityManager,则根据数据源名称设置到事务上下文
35
- const dataSourceName = this.defaultDataSource || 'default';
36
- this.transactionContext.setContext(dataSourceName, value);
37
- }
38
- else {
39
- this.store.set(key, value);
40
- }
41
- }
42
- /**
43
- * 从存储中获取值
44
- */
45
- get(key) {
46
- if (key === 'entityManager') {
47
- // 获取默认数据源的 EntityManager
48
- const dataSourceName = this.defaultDataSource || 'default';
49
- return this.transactionContext.getEntityManager(dataSourceName);
50
- }
51
- else {
52
- return this.store.get(key);
53
- }
54
- }
55
- /**
56
- * 根据数据源名称获取 EntityManager
57
- */
58
- getEntityManager(dataSourceName) {
59
- return this.transactionContext.getEntityManager(dataSourceName || this.defaultDataSource || 'default');
60
- }
61
- /**
62
- * 设置指定数据源的 EntityManager
63
- */
64
- setEntityManager(dataSourceName, entityManager) {
65
- this.transactionContext.setContext(dataSourceName, entityManager);
66
- }
67
- /**
68
- * 检查是否在事务中
69
- */
70
- isInTransaction(dataSourceName) {
71
- return this.transactionContext.isInTransaction(dataSourceName || this.defaultDataSource || 'default');
72
- }
73
- /**
74
- * 获取所有活跃的事务上下文
75
- */
76
- getActiveTransactions() {
77
- const contexts = this.transactionContext.getAllActiveContexts();
78
- const result = new Map();
79
- for (const [name, context] of contexts) {
80
- result.set(name, {
81
- entityManager: context.entityManager,
82
- dataSource: context.dataSource,
83
- });
84
- }
85
- return result;
86
- }
87
- /**
88
- * 清理存储
89
- */
90
- clear() {
91
- this.store.clear();
92
- this.transactionContext.clearContext();
93
- }
94
- };
95
- exports.ClsCompatibilityService = ClsCompatibilityService;
96
- exports.ClsCompatibilityService = ClsCompatibilityService = __decorate([
97
- (0, common_1.Injectable)({ scope: common_1.Scope.REQUEST }),
98
- __param(1, (0, common_1.Optional)()),
99
- __param(1, (0, common_1.Inject)('CLS_DEFAULT_DATA_SOURCE')),
100
- __metadata("design:paramtypes", [transaction_context_service_1.TransactionContextService, String])
101
- ], ClsCompatibilityService);
102
- /**
103
- * CLS 服务管理器(静态类,模拟 nestjs-cls 的 API)
104
- */
105
- class ClsServiceManager {
106
- static setClsService(clsService) {
107
- ClsServiceManager.clsService = clsService;
108
- }
109
- static getClsService() {
110
- if (!ClsServiceManager.clsService) {
111
- throw new Error('CLS service not initialized. Please ensure TransactionModule is imported.');
112
- }
113
- return ClsServiceManager.clsService;
114
- }
115
- }
116
- exports.ClsServiceManager = ClsServiceManager;
117
- ClsServiceManager.clsService = null;
118
- /**
119
- * CLS 装饰器(兼容性)
120
- */
121
- function SetCls(key) {
122
- return function (target, propertyKey, parameterIndex) {
123
- const existing = Reflect.getMetadata('cls_params', target) || {};
124
- existing[parameterIndex] = { key };
125
- Reflect.defineMetadata('cls_params', existing, target);
126
- };
127
- }