pp-command-bus 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +522 -0
  2. package/dist/command-bus/command-bus.spec.d.ts +1 -0
  3. package/dist/command-bus/command-bus.spec.js +398 -0
  4. package/dist/command-bus/command-bus.spec.js.map +1 -0
  5. package/dist/command-bus/command.d.ts +24 -0
  6. package/dist/command-bus/command.js +53 -0
  7. package/dist/command-bus/command.js.map +1 -0
  8. package/dist/command-bus/config/command-bus-config.d.ts +40 -0
  9. package/dist/command-bus/config/command-bus-config.js +59 -0
  10. package/dist/command-bus/config/command-bus-config.js.map +1 -0
  11. package/dist/command-bus/config/command-bus-config.spec.d.ts +1 -0
  12. package/dist/command-bus/config/command-bus-config.spec.js +162 -0
  13. package/dist/command-bus/config/command-bus-config.spec.js.map +1 -0
  14. package/dist/command-bus/config/index.d.ts +1 -0
  15. package/dist/command-bus/config/index.js +9 -0
  16. package/dist/command-bus/config/index.js.map +1 -0
  17. package/dist/command-bus/index.d.ts +79 -0
  18. package/dist/command-bus/index.js +169 -0
  19. package/dist/command-bus/index.js.map +1 -0
  20. package/dist/command-bus/job/index.d.ts +6 -0
  21. package/dist/command-bus/job/index.js +15 -0
  22. package/dist/command-bus/job/index.js.map +1 -0
  23. package/dist/command-bus/job/job-options-builder.d.ts +24 -0
  24. package/dist/command-bus/job/job-options-builder.js +68 -0
  25. package/dist/command-bus/job/job-options-builder.js.map +1 -0
  26. package/dist/command-bus/job/job-options-builder.spec.d.ts +1 -0
  27. package/dist/command-bus/job/job-options-builder.spec.js +163 -0
  28. package/dist/command-bus/job/job-options-builder.spec.js.map +1 -0
  29. package/dist/command-bus/job/job-processor.d.ts +33 -0
  30. package/dist/command-bus/job/job-processor.js +195 -0
  31. package/dist/command-bus/job/job-processor.js.map +1 -0
  32. package/dist/command-bus/job/job-processor.spec.d.ts +1 -0
  33. package/dist/command-bus/job/job-processor.spec.js +352 -0
  34. package/dist/command-bus/job/job-processor.spec.js.map +1 -0
  35. package/dist/command-bus/logging/command-logger.d.ts +21 -0
  36. package/dist/command-bus/logging/command-logger.js +79 -0
  37. package/dist/command-bus/logging/command-logger.js.map +1 -0
  38. package/dist/command-bus/logging/command-logger.spec.d.ts +1 -0
  39. package/dist/command-bus/logging/command-logger.spec.js +245 -0
  40. package/dist/command-bus/logging/command-logger.spec.js.map +1 -0
  41. package/dist/command-bus/logging/index.d.ts +5 -0
  42. package/dist/command-bus/logging/index.js +13 -0
  43. package/dist/command-bus/logging/index.js.map +1 -0
  44. package/dist/command-bus/queue/index.d.ts +5 -0
  45. package/dist/command-bus/queue/index.js +13 -0
  46. package/dist/command-bus/queue/index.js.map +1 -0
  47. package/dist/command-bus/queue/queue-manager.d.ts +24 -0
  48. package/dist/command-bus/queue/queue-manager.js +60 -0
  49. package/dist/command-bus/queue/queue-manager.js.map +1 -0
  50. package/dist/command-bus/queue/queue-manager.spec.d.ts +1 -0
  51. package/dist/command-bus/queue/queue-manager.spec.js +219 -0
  52. package/dist/command-bus/queue/queue-manager.spec.js.map +1 -0
  53. package/dist/command-bus/rpc/index.d.ts +5 -0
  54. package/dist/command-bus/rpc/index.js +13 -0
  55. package/dist/command-bus/rpc/index.js.map +1 -0
  56. package/dist/command-bus/rpc/rpc-coordinator.d.ts +45 -0
  57. package/dist/command-bus/rpc/rpc-coordinator.js +189 -0
  58. package/dist/command-bus/rpc/rpc-coordinator.js.map +1 -0
  59. package/dist/command-bus/rpc/rpc-coordinator.spec.d.ts +1 -0
  60. package/dist/command-bus/rpc/rpc-coordinator.spec.js +286 -0
  61. package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +1 -0
  62. package/dist/command-bus/types/index.d.ts +57 -0
  63. package/dist/command-bus/types/index.js +3 -0
  64. package/dist/command-bus/types/index.js.map +1 -0
  65. package/dist/command-bus/worker/index.d.ts +5 -0
  66. package/dist/command-bus/worker/index.js +13 -0
  67. package/dist/command-bus/worker/index.js.map +1 -0
  68. package/dist/command-bus/worker/worker-orchestrator.d.ts +46 -0
  69. package/dist/command-bus/worker/worker-orchestrator.js +160 -0
  70. package/dist/command-bus/worker/worker-orchestrator.js.map +1 -0
  71. package/dist/command-bus/worker/worker-orchestrator.spec.d.ts +1 -0
  72. package/dist/command-bus/worker/worker-orchestrator.spec.js +293 -0
  73. package/dist/command-bus/worker/worker-orchestrator.spec.js.map +1 -0
  74. package/dist/examples/rpc.demo.d.ts +2 -0
  75. package/dist/examples/rpc.demo.js +235 -0
  76. package/dist/examples/rpc.demo.js.map +1 -0
  77. package/dist/index.d.ts +11 -0
  78. package/dist/index.js +20 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/pp-command-bus-1.0.0.tgz +0 -0
  81. package/dist/shared/config/base-config.d.ts +43 -0
  82. package/dist/shared/config/base-config.js +100 -0
  83. package/dist/shared/config/base-config.js.map +1 -0
  84. package/dist/shared/config/base-config.spec.d.ts +1 -0
  85. package/dist/shared/config/base-config.spec.js +118 -0
  86. package/dist/shared/config/base-config.spec.js.map +1 -0
  87. package/dist/shared/config/index.d.ts +1 -0
  88. package/dist/shared/config/index.js +9 -0
  89. package/dist/shared/config/index.js.map +1 -0
  90. package/dist/shared/logging/index.d.ts +2 -0
  91. package/dist/shared/logging/index.js +8 -0
  92. package/dist/shared/logging/index.js.map +1 -0
  93. package/dist/shared/logging/log-level.d.ts +36 -0
  94. package/dist/shared/logging/log-level.js +53 -0
  95. package/dist/shared/logging/log-level.js.map +1 -0
  96. package/dist/shared/logging/logger.d.ts +42 -0
  97. package/dist/shared/logging/logger.js +63 -0
  98. package/dist/shared/logging/logger.js.map +1 -0
  99. package/dist/shared/logging/logger.spec.d.ts +1 -0
  100. package/dist/shared/logging/logger.spec.js +89 -0
  101. package/dist/shared/logging/logger.spec.js.map +1 -0
  102. package/dist/shared/types.d.ts +26 -0
  103. package/dist/shared/types.js +6 -0
  104. package/dist/shared/types.js.map +1 -0
  105. package/package.json +93 -0
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.runRpcDemo = runRpcDemo;
16
+ const command_1 = __importDefault(require("../command-bus/command"));
17
+ const command_bus_1 = __importDefault(require("../command-bus"));
18
+ const command_bus_config_1 = __importDefault(require("../command-bus/config/command-bus-config"));
19
+ /**
20
+ * Przykład synchronicznego wywołania komendy (RPC) z CommandBus
21
+ * Example of synchronous command invocation (RPC) with CommandBus
22
+ */
23
+ // ========== KOMENDY RPC ==========
24
+ /**
25
+ * Komenda do kalkulacji matematycznej
26
+ * Command for mathematical calculation
27
+ */
28
+ class CalculateCommand extends command_1.default {
29
+ constructor(a, b, operation) {
30
+ super();
31
+ this.a = a;
32
+ this.b = b;
33
+ this.operation = operation;
34
+ }
35
+ }
36
+ /**
37
+ * Komenda do walidacji danych użytkownika
38
+ * Command to validate user data
39
+ */
40
+ class ValidateUserCommand extends command_1.default {
41
+ constructor(email, age) {
42
+ super();
43
+ this.email = email;
44
+ this.age = age;
45
+ }
46
+ }
47
+ /**
48
+ * Komenda do pobrania informacji o użytkowniku
49
+ * Command to fetch user information
50
+ */
51
+ class GetUserInfoCommand extends command_1.default {
52
+ constructor(userId) {
53
+ super();
54
+ this.userId = userId;
55
+ }
56
+ }
57
+ // ========== DEMO ==========
58
+ function runRpcDemo() {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ var _a;
61
+ const redisUrl = (_a = process.env.REDIS_URL) !== null && _a !== void 0 ? _a : 'redis://localhost:6379';
62
+ const commandBusConfig = new command_bus_config_1.default({
63
+ redisUrl,
64
+ logger: console,
65
+ });
66
+ const commandBus = new command_bus_1.default(commandBusConfig);
67
+ console.log('🚀 RPC Demo - Synchroniczne wywołania komend\n');
68
+ // ========== REJESTRACJA HANDLERÓW ==========
69
+ console.log('=== Rejestracja handlerów ===\n');
70
+ // Handler dla kalkulacji - zwraca wynik obliczeń
71
+ yield commandBus.handle(CalculateCommand, (command) => __awaiter(this, void 0, void 0, function* () {
72
+ console.log(`🔢 [Handler] Obliczam: ${command.a} ${command.operation} ${command.b}`);
73
+ yield new Promise((resolve) => setTimeout(resolve, 500)); // Symulacja przetwarzania
74
+ switch (command.operation) {
75
+ case 'add':
76
+ return command.a + command.b;
77
+ case 'subtract':
78
+ return command.a - command.b;
79
+ case 'multiply':
80
+ return command.a * command.b;
81
+ case 'divide':
82
+ if (command.b === 0) {
83
+ throw new Error('Nie można dzielić przez zero');
84
+ }
85
+ return command.a / command.b;
86
+ default:
87
+ throw new Error(`Nieznana operacja: ${command.operation}`);
88
+ }
89
+ }));
90
+ // Handler dla walidacji - zwraca wynik walidacji
91
+ yield commandBus.handle(ValidateUserCommand, (command) => __awaiter(this, void 0, void 0, function* () {
92
+ console.log(`✅ [Handler] Waliduje użytkownika: ${command.email}, wiek: ${command.age}`);
93
+ yield new Promise((resolve) => setTimeout(resolve, 200)); // Symulacja walidacji
94
+ const errors = [];
95
+ // Walidacja email
96
+ if (!command.email.includes('@')) {
97
+ errors.push('Nieprawidłowy adres email');
98
+ }
99
+ // Walidacja wieku
100
+ if (command.age < 0 || command.age > 150) {
101
+ errors.push('Nieprawidłowy wiek');
102
+ }
103
+ return {
104
+ isValid: errors.length === 0,
105
+ errors,
106
+ user: {
107
+ email: command.email,
108
+ age: command.age,
109
+ status: errors.length === 0 ? 'valid' : 'invalid',
110
+ },
111
+ };
112
+ }));
113
+ // Handler dla informacji o użytkowniku - zwraca dane użytkownika
114
+ yield commandBus.handle(GetUserInfoCommand, (command) => __awaiter(this, void 0, void 0, function* () {
115
+ console.log(`👤 [Handler] Pobieram informacje o użytkowniku: ${command.userId}`);
116
+ yield new Promise((resolve) => setTimeout(resolve, 300)); // Symulacja zapytania do bazy
117
+ // Symulacja danych z bazy danych
118
+ const users = {
119
+ 'user-1': { name: 'Jan Kowalski', email: 'jan.kowalski@example.com', role: 'admin' },
120
+ 'user-2': { name: 'Anna Nowak', email: 'anna.nowak@example.com', role: 'user' },
121
+ 'user-3': {
122
+ name: 'Piotr Wiśniewski',
123
+ email: 'piotr.wisniewski@example.com',
124
+ role: 'moderator',
125
+ },
126
+ };
127
+ if (!users[command.userId]) {
128
+ throw new Error(`Użytkownik ${command.userId} nie istnieje`);
129
+ }
130
+ return users[command.userId];
131
+ }));
132
+ // ========== SYNCHRONICZNE WYWOŁANIA RPC ==========
133
+ console.log('=== Synchroniczne wywołania RPC ===\n');
134
+ try {
135
+ // 1. Kalkulacja matematyczna
136
+ console.log('1. Kalkulacja matematyczna:');
137
+ const addResult = yield commandBus.call(new CalculateCommand(15, 7, 'add'), 5000);
138
+ console.log(` Wynik dodawania: ${addResult}`);
139
+ const multiplyResult = yield commandBus.call(new CalculateCommand(8, 6, 'multiply'), 5000);
140
+ console.log(` Wynik mnożenia: ${multiplyResult}`);
141
+ const divideResult = yield commandBus.call(new CalculateCommand(20, 4, 'divide'), 5000);
142
+ console.log(` Wynik dzielenia: ${divideResult}\n`);
143
+ // 2. Walidacja użytkownika - poprawne dane
144
+ console.log('2. Walidacja użytkownika (poprawne dane):');
145
+ const validationResult = yield commandBus.call(new ValidateUserCommand('jan.kowalski@polskiepolisy.pl', 35), 5000);
146
+ console.log(' Wynik walidacji:', JSON.stringify(validationResult, null, 2));
147
+ // 3. Walidacja użytkownika - niepoprawne dane
148
+ console.log('\n3. Walidacja użytkownika (niepoprawne dane):');
149
+ const invalidValidationResult = yield commandBus.call(new ValidateUserCommand('nieprawidlowy-email', -5), 5000);
150
+ console.log(' Wynik walidacji:', JSON.stringify(invalidValidationResult, null, 2));
151
+ // 4. Pobieranie informacji o użytkowniku
152
+ console.log('\n4. Pobieranie informacji o użytkowniku:');
153
+ const userInfo = yield commandBus.call(new GetUserInfoCommand('user-1'), 5000);
154
+ console.log(' Informacje o użytkowniku:', JSON.stringify(userInfo, null, 2));
155
+ // 5. Wiele równoległych wywołań RPC
156
+ console.log('\n5. Równoległe wywołania RPC:');
157
+ const [result1, result2, result3] = yield Promise.all([
158
+ commandBus.call(new CalculateCommand(10, 3, 'add'), 5000),
159
+ commandBus.call(new GetUserInfoCommand('user-2'), 5000),
160
+ commandBus.call(new ValidateUserCommand('anna@example.com', 28), 5000),
161
+ ]);
162
+ console.log(` Równoległe wyniki:`);
163
+ console.log(` - Kalkulacja: ${result1}`);
164
+ console.log(` - Użytkownik: ${JSON.stringify(result2)}`);
165
+ console.log(` - Walidacja: valid = ${result3.isValid}`);
166
+ }
167
+ catch (error) {
168
+ console.error('❌ Błąd RPC:', error instanceof Error ? error.message : error);
169
+ }
170
+ // ========== OBSŁUGA BŁĘDÓW ==========
171
+ console.log('\n=== Obsługa błędów RPC ===\n');
172
+ try {
173
+ // Błąd w handlerze - dzielenie przez zero
174
+ console.log('6. Test obsługi błędu (dzielenie przez zero):');
175
+ yield commandBus.call(new CalculateCommand(10, 0, 'divide'), 5000);
176
+ }
177
+ catch (error) {
178
+ console.log(` ✅ Poprawnie przechwycono błąd: ${error instanceof Error ? error.message : error}`);
179
+ }
180
+ try {
181
+ // Błąd - nieistniejący użytkownik
182
+ console.log('\n7. Test obsługi błędu (nieistniejący użytkownik):');
183
+ yield commandBus.call(new GetUserInfoCommand('user-999'), 5000);
184
+ }
185
+ catch (error) {
186
+ console.log(` ✅ Poprawnie przechwycono błąd: ${error instanceof Error ? error.message : error}`);
187
+ }
188
+ try {
189
+ // Test timeout
190
+ console.log('\n8. Test timeout (100ms):');
191
+ yield commandBus.call(new CalculateCommand(1, 1, 'add'), 100); // Krótki timeout
192
+ }
193
+ catch (error) {
194
+ if (error instanceof Error && error.message.includes('timeout')) {
195
+ console.log(` ✅ Poprawnie obsłużono timeout: ${error.message}`);
196
+ }
197
+ else {
198
+ console.log(` ⚠️ Nieoczekiwany błąd: ${error instanceof Error ? error.message : error}`);
199
+ }
200
+ }
201
+ // ========== PORÓWNANIE Z ASYNCHRONICZNYM DISPATCH ==========
202
+ console.log('\n=== Porównanie: RPC vs Async Dispatch ===\n');
203
+ try {
204
+ console.log('RPC (synchroniczne - czekamy na wynik):');
205
+ const startRpc = Date.now();
206
+ const rpcResult = yield commandBus.call(new CalculateCommand(100, 50, 'add'), 5000);
207
+ const rpcTime = Date.now() - startRpc;
208
+ console.log(` Wynik RPC: ${rpcResult}, czas: ${rpcTime}ms`);
209
+ }
210
+ catch (error) {
211
+ console.error(` ⚠️ Nieoczekiwany błąd: ${error instanceof Error ? error.message : error}`);
212
+ }
213
+ console.log('\nAsync Dispatch (fire-and-forget - nie czekamy na wynik):');
214
+ const startDispatch = Date.now();
215
+ yield commandBus.dispatch(new CalculateCommand(100, 50, 'add'));
216
+ const dispatchTime = Date.now() - startDispatch;
217
+ console.log(` Dispatch wysłane, czas: ${dispatchTime}ms (bez czekania na wynik)`);
218
+ // ========== ZAKOŃCZENIE ==========
219
+ console.log('\n=== Demo zakończone ===');
220
+ console.log('✅ RPC pozwala na synchroniczne wywołanie komend z otrzymaniem wyniku');
221
+ console.log('✅ Obsługa błędów, timeoutów i równoległych wywołań');
222
+ console.log('✅ Kompatybilność wsteczna - dispatch() nadal działa asynchronicznie\n');
223
+ // Zamknij połączenia
224
+ yield commandBus.close();
225
+ process.exit(0);
226
+ });
227
+ }
228
+ // Uruchom demo
229
+ if (require.main === module) {
230
+ runRpcDemo().catch((error) => {
231
+ console.error('Fatal error:', error);
232
+ process.exit(1);
233
+ });
234
+ }
235
+ //# sourceMappingURL=rpc.demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.demo.js","sourceRoot":"","sources":["../../src/examples/rpc.demo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * PP Command Bus - Distributed Command Bus library
3
+ *
4
+ * Biblioteka do obsługi rozproszonych komend z wykorzystaniem BullMQ i Redis/DragonflyDB.
5
+ * Wspiera wzorzec CQRS, RPC calls i job queuing.
6
+ */
7
+ export { default as CommandBus } from './command-bus';
8
+ export { default as Command } from './command-bus/command';
9
+ export { default as CommandBusConfig } from './command-bus/config/command-bus-config';
10
+ export type { ILogger, TDict, TCallable, TCallableAsync } from './shared/types';
11
+ export type { MemoryStats, RpcMetadata, CommandHandler, JobOptions, WorkerProcessor, } from './command-bus/types';
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * PP Command Bus - Distributed Command Bus library
4
+ *
5
+ * Biblioteka do obsługi rozproszonych komend z wykorzystaniem BullMQ i Redis/DragonflyDB.
6
+ * Wspiera wzorzec CQRS, RPC calls i job queuing.
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CommandBusConfig = exports.Command = exports.CommandBus = void 0;
13
+ // Główne eksporty
14
+ var command_bus_1 = require("./command-bus");
15
+ Object.defineProperty(exports, "CommandBus", { enumerable: true, get: function () { return __importDefault(command_bus_1).default; } });
16
+ var command_1 = require("./command-bus/command");
17
+ Object.defineProperty(exports, "Command", { enumerable: true, get: function () { return __importDefault(command_1).default; } });
18
+ var command_bus_config_1 = require("./command-bus/config/command-bus-config");
19
+ Object.defineProperty(exports, "CommandBusConfig", { enumerable: true, get: function () { return __importDefault(command_bus_config_1).default; } });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;AAEH,kBAAkB;AAClB,6CAAsD;AAA7C,0HAAA,OAAO,OAAc;AAC9B,iDAA2D;AAAlD,mHAAA,OAAO,OAAW;AAC3B,8EAAsF;AAA7E,uIAAA,OAAO,OAAoB"}
Binary file
@@ -0,0 +1,43 @@
1
+ import type { ConnectionOptions } from 'bullmq';
2
+ import type { ILogger } from '../types';
3
+ import type { LogLevelType } from '../logging/log-level';
4
+ /**
5
+ * Bazowa klasa konfiguracji dla EventBus i CommandBus
6
+ */
7
+ export default class BaseConfig {
8
+ /**
9
+ * URL połączenia do DragonflyDB/Redis
10
+ */
11
+ redisUrl: string;
12
+ /**
13
+ * Poziom logowania (debug, log, warn, error)
14
+ * Domyślnie 'log' - loguje log, warn, error (bez debug)
15
+ */
16
+ logLevel: LogLevelType;
17
+ /**
18
+ * Logger do użycia (domyślnie wbudowany Logger z console)
19
+ */
20
+ logger: ILogger;
21
+ constructor(params?: Partial<BaseConfig>);
22
+ /**
23
+ * Zwraca opcje połączenia Redis na podstawie URL
24
+ */
25
+ getRedisOptions(): ConnectionOptions;
26
+ /**
27
+ * Zwraca opcje połączenia Redis dla Worker'ów BullMQ
28
+ * Worker'y wymagają maxRetriesPerRequest: null dla poprawnego działania blocking operations
29
+ */
30
+ getRedisOptionsForWorker(): ConnectionOptions;
31
+ /**
32
+ * Waliduje konfigurację
33
+ */
34
+ protected validate(): void;
35
+ /**
36
+ * Parsuje string na liczbę z wartością domyślną
37
+ */
38
+ protected parseIntWithDefault(value: string | undefined, defaultValue: number): number;
39
+ /**
40
+ * Parsuje string na boolean z wartością domyślną
41
+ */
42
+ protected parseBoolWithDefault(value: string | undefined, defaultValue: boolean): boolean;
43
+ }
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const logger_1 = require("../logging/logger");
4
+ /**
5
+ * Bazowa klasa konfiguracji dla EventBus i CommandBus
6
+ */
7
+ class BaseConfig {
8
+ constructor(params) {
9
+ var _a, _b;
10
+ /**
11
+ * URL połączenia do DragonflyDB/Redis
12
+ */
13
+ this.redisUrl = (_a = process.env.REDIS_URL) !== null && _a !== void 0 ? _a : 'redis://localhost:6379';
14
+ // Ustaw logLevel przed utworzeniem loggera
15
+ const initialLogLevel = (_b = process.env.LOG_LEVEL) !== null && _b !== void 0 ? _b : 'log';
16
+ this.logLevel = initialLogLevel;
17
+ // Utwórz logger z odpowiednim poziomem
18
+ this.logger = new logger_1.Logger(console, this.logLevel);
19
+ if (params) {
20
+ // Zapamię tај logLevel przed merge params
21
+ const originalLogLevel = this.logLevel;
22
+ Object.keys(params).forEach((key) => {
23
+ this[key] = params[key];
24
+ });
25
+ // Jeśli logLevel został nadpisany, utwórz nowy logger
26
+ // Porównujemy z oryginalnym logLevel (przed merge)
27
+ if (params.logLevel && params.logLevel !== originalLogLevel) {
28
+ this.logger = new logger_1.Logger(console, params.logLevel);
29
+ }
30
+ }
31
+ // Walidacja konfiguracji
32
+ this.validate();
33
+ }
34
+ /**
35
+ * Zwraca opcje połączenia Redis na podstawie URL
36
+ */
37
+ getRedisOptions() {
38
+ try {
39
+ const url = new URL(this.redisUrl);
40
+ const options = {
41
+ host: url.hostname,
42
+ port: parseInt(url.port, 10) || 6379,
43
+ };
44
+ if (url.username) {
45
+ options.username = url.username;
46
+ }
47
+ if (url.password) {
48
+ options.password = url.password;
49
+ }
50
+ if (url.pathname && url.pathname.length > 1) {
51
+ const db = parseInt(url.pathname.substring(1), 10);
52
+ if (!isNaN(db)) {
53
+ options.db = db;
54
+ }
55
+ }
56
+ return options;
57
+ }
58
+ catch (_a) {
59
+ throw new Error('Invalid Redis URL');
60
+ }
61
+ }
62
+ /**
63
+ * Zwraca opcje połączenia Redis dla Worker'ów BullMQ
64
+ * Worker'y wymagają maxRetriesPerRequest: null dla poprawnego działania blocking operations
65
+ */
66
+ getRedisOptionsForWorker() {
67
+ const options = this.getRedisOptions();
68
+ return Object.assign(Object.assign({}, options), { maxRetriesPerRequest: null });
69
+ }
70
+ /**
71
+ * Waliduje konfigurację
72
+ */
73
+ validate() {
74
+ try {
75
+ new URL(this.redisUrl);
76
+ }
77
+ catch (_a) {
78
+ throw new Error('Invalid Redis URL');
79
+ }
80
+ }
81
+ /**
82
+ * Parsuje string na liczbę z wartością domyślną
83
+ */
84
+ parseIntWithDefault(value, defaultValue) {
85
+ if (!value)
86
+ return defaultValue;
87
+ const parsed = parseInt(value, 10);
88
+ return isNaN(parsed) ? defaultValue : parsed;
89
+ }
90
+ /**
91
+ * Parsuje string na boolean z wartością domyślną
92
+ */
93
+ parseBoolWithDefault(value, defaultValue) {
94
+ if (!value)
95
+ return defaultValue;
96
+ return value.toLowerCase() === 'true' || value === '1';
97
+ }
98
+ }
99
+ exports.default = BaseConfig;
100
+ //# sourceMappingURL=base-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-config.js","sourceRoot":"","sources":["../../../src/shared/config/base-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const base_config_1 = __importDefault(require("./base-config"));
7
+ const logger_1 = require("../logging/logger");
8
+ describe('BaseConfig', () => {
9
+ const originalEnv = process.env;
10
+ beforeEach(() => {
11
+ // Reset zmiennych środowiskowych
12
+ process.env = Object.assign({}, originalEnv);
13
+ });
14
+ afterEach(() => {
15
+ process.env = originalEnv;
16
+ });
17
+ describe('konstruktor', () => {
18
+ it('powinno używać domyślnych wartości', () => {
19
+ // When
20
+ const config = new base_config_1.default();
21
+ // Then
22
+ expect(config.redisUrl).toBe('redis://localhost:6379');
23
+ expect(config.logger).toBeInstanceOf(logger_1.Logger);
24
+ expect(config.logLevel).toBe('log');
25
+ });
26
+ it('powinno wczytać konfigurację ze zmiennych środowiskowych', () => {
27
+ // Given
28
+ process.env.REDIS_URL = 'redis://dragonfly:6380';
29
+ // When
30
+ const config = new base_config_1.default();
31
+ // Then
32
+ expect(config.redisUrl).toBe('redis://dragonfly:6380');
33
+ });
34
+ it('powinno nadpisać wartości przez parametry konstruktora', () => {
35
+ // Given
36
+ const customLogger = {
37
+ log: jest.fn(),
38
+ error: jest.fn(),
39
+ warn: jest.fn(),
40
+ debug: jest.fn(),
41
+ };
42
+ // When
43
+ const config = new base_config_1.default({
44
+ redisUrl: 'redis://custom:6379',
45
+ logger: customLogger,
46
+ });
47
+ // Then
48
+ expect(config.redisUrl).toBe('redis://custom:6379');
49
+ expect(config.logger).toBe(customLogger);
50
+ });
51
+ });
52
+ describe('getRedisOptions', () => {
53
+ it('powinno zwrócić opcje połączenia Redis z URL', () => {
54
+ // Given
55
+ const config = new base_config_1.default({
56
+ redisUrl: 'redis://user:pass@dragonfly.example.com:6380/0',
57
+ });
58
+ // When
59
+ const options = config.getRedisOptions();
60
+ // Then
61
+ expect(options).toEqual({
62
+ host: 'dragonfly.example.com',
63
+ port: 6380,
64
+ username: 'user',
65
+ password: 'pass',
66
+ db: 0,
67
+ });
68
+ });
69
+ it('powinno obsłużyć URL bez autoryzacji', () => {
70
+ // Given
71
+ const config = new base_config_1.default({
72
+ redisUrl: 'redis://localhost:6379',
73
+ });
74
+ // When
75
+ const options = config.getRedisOptions();
76
+ // Then
77
+ expect(options).toEqual({
78
+ host: 'localhost',
79
+ port: 6379,
80
+ });
81
+ });
82
+ it('powinno obsłużyć URL z bazą danych ale bez autoryzacji', () => {
83
+ // Given
84
+ const config = new base_config_1.default({
85
+ redisUrl: 'redis://localhost:6379/2',
86
+ });
87
+ // When
88
+ const options = config.getRedisOptions();
89
+ // Then
90
+ expect(options).toEqual({
91
+ host: 'localhost',
92
+ port: 6379,
93
+ db: 2,
94
+ });
95
+ });
96
+ it('powinno obsłużyć nieprawidłowy URL podczas tworzenia konfiguracji', () => {
97
+ // When & Then
98
+ expect(() => new base_config_1.default({
99
+ redisUrl: 'invalid-url',
100
+ })).toThrow('Invalid Redis URL');
101
+ });
102
+ });
103
+ describe('walidacja', () => {
104
+ it('powinno zwalidować konfigurację przy tworzeniu', () => {
105
+ // Given
106
+ process.env.REDIS_URL = 'redis://valid:6379';
107
+ // When & Then
108
+ expect(() => new base_config_1.default()).not.toThrow();
109
+ });
110
+ it('powinno rzucić błąd przy nieprawidłowym URL Redis', () => {
111
+ // Given
112
+ process.env.REDIS_URL = 'not-a-url';
113
+ // When & Then
114
+ expect(() => new base_config_1.default()).toThrow('Invalid Redis URL');
115
+ });
116
+ });
117
+ });
118
+ //# sourceMappingURL=base-config.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-config.spec.js","sourceRoot":"","sources":["../../../src/shared/config/base-config.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { default as BaseConfig } from './base-config';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BaseConfig = void 0;
7
+ var base_config_1 = require("./base-config");
8
+ Object.defineProperty(exports, "BaseConfig", { enumerable: true, get: function () { return __importDefault(base_config_1).default; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/config/index.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAsD;AAA7C,0HAAA,OAAO,OAAc"}
@@ -0,0 +1,2 @@
1
+ export { LogLevel, type LogLevelType } from './log-level';
2
+ export { Logger } from './logger';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Logger = exports.LogLevel = void 0;
4
+ var log_level_1 = require("./log-level");
5
+ Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return log_level_1.LogLevel; } });
6
+ var logger_1 = require("./logger");
7
+ Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return logger_1.Logger; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/logging/index.ts"],"names":[],"mappings":";;;AAAA,yCAA0D;AAAjD,qGAAA,QAAQ,OAAA;AACjB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Poziomy logowania dla wbudowanego loggera
3
+ */
4
+ export declare class LogLevel {
5
+ readonly name: string;
6
+ readonly value: number;
7
+ /**
8
+ * DEBUG - najniższy poziom, szczegółowe informacje diagnostyczne
9
+ */
10
+ static readonly DEBUG: LogLevel;
11
+ /**
12
+ * LOG - standardowe logi informacyjne
13
+ */
14
+ static readonly LOG: LogLevel;
15
+ /**
16
+ * WARN - ostrzeżenia, potencjalne problemy
17
+ */
18
+ static readonly WARN: LogLevel;
19
+ /**
20
+ * ERROR - błędy wymagające uwagi
21
+ */
22
+ static readonly ERROR: LogLevel;
23
+ private constructor();
24
+ /**
25
+ * Sprawdza czy dany poziom jest aktywny przy obecnym poziomie logowania
26
+ */
27
+ isActive(currentLevel: LogLevel): boolean;
28
+ /**
29
+ * Konwertuje string na LogLevel
30
+ */
31
+ static fromString(level: string): LogLevel;
32
+ }
33
+ /**
34
+ * Typ dla poziomów logowania
35
+ */
36
+ export type LogLevelType = 'debug' | 'log' | 'warn' | 'error';