syntropylog 0.6.13 โ†’ 0.6.14

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/README.md CHANGED
@@ -21,10 +21,10 @@
21
21
 
22
22
  ## ๐Ÿš€ Quick Start
23
23
 
24
- Get started with SyntropyLog in **30 seconds**:
24
+ Get started with SyntropyLog usage in **30 seconds** (after initialization):
25
25
 
26
26
  ```bash
27
- npm install syntropylog@0.6.13
27
+ npm install syntropylog@0.6.14
28
28
  ```
29
29
 
30
30
  ```typescript
@@ -42,10 +42,16 @@ await syntropyLog.init({
42
42
  const logger = syntropyLog.getLogger();
43
43
  logger.info('Hello, SyntropyLog!');
44
44
  ```
45
+ // Note: This shows the "zero boilerplate" usage pattern.
46
+ // Initialization and shutdown require the boilerplate shown in the documentation.
47
+
48
+ > โš ๏ธ **CRITICAL REQUIREMENT**: You **MUST** include the [graceful shutdown boilerplate](https://syntropysoft.github.io/syntropylog-doc/docs/production/graceful-shutdown) in ALL applications. This ensures logs are flushed and resources are cleaned up when:
49
+ > - **Development**: You press Ctrl+C to stop the application
50
+ > - **Production**: Kubernetes sends SIGTERM to terminate your pod
45
51
 
46
52
  ## โœจ Key Features
47
53
 
48
- - **๐Ÿ”„ Zero Boilerplate** - Get started in 30 seconds with automatic context propagation
54
+ - **๐Ÿ”„ Zero Boilerplate** - Get started in 30 seconds with automatic context propagation (usage only - initialization/shutdown boilerplate required)
49
55
  - **๐Ÿ”— Automatic Correlation** - Distributed tracing across services, HTTP calls, and message brokers
50
56
  - **๐ŸŽฏ Framework Agnostic** - Works with Express, Fastify, Koa, NestJS, and any Node.js app
51
57
  - **๐Ÿ›ก๏ธ Security First** - Built-in data masking and compliance-ready logging
@@ -56,14 +62,24 @@ logger.info('Hello, SyntropyLog!');
56
62
 
57
63
  - **[Getting Started](https://syntropysoft.github.io/syntropylog-doc/docs/getting-started)** - Complete setup guide *(in progress)*
58
64
  - **[API Reference](https://syntropysoft.github.io/syntropylog-doc/docs/api-reference)** - Full API documentation *(in progress)*
59
- - **[Examples](https://syntropysoft.github.io/syntropylog-doc/examples)** - 29 production-ready examples *(in progress)*
65
+ - **[Examples](https://syntropysoft.github.io/syntropylog-doc/examples)** - 30 production-ready examples *(in progress)*
60
66
  - **[Configuration Guide](https://syntropysoft.github.io/syntropylog-doc/docs/configuration)** - Advanced configuration *(in progress)*
61
67
 
62
68
  ## ๐ŸŽฏ Production Ready
63
69
 
64
- SyntropyLog is **BETA (0.6.13)** and ready for production use:
70
+ SyntropyLog is **BETA (0.6.14)** and ready for production use:
65
71
 
66
72
  ### ๐Ÿ“ Version Notes
73
+ **v0.6.14** - *Testing Revolution Release*
74
+ - ๐Ÿงช **NEW: SyntropyLogMock** - Eliminates all connection boilerplate in tests
75
+ - ๐Ÿงช **NEW: BeaconRedisMock** - In-memory Redis simulation for testing
76
+ - ๐Ÿงช **NEW: Test Helpers** - Simplified setup and teardown for all test frameworks
77
+ - ๐Ÿ“š **NEW: 3 Comprehensive Testing Examples** - Vitest, Jest, and Redis context patterns
78
+ - ๐Ÿ“š **NEW: Docusaurus Documentation** - Complete testing guides with AI-friendly instructions
79
+ - ๐ŸŽฏ **Focus on Declarative Testing** - Test behavior, not implementation details
80
+ - โšก **Zero External Dependencies** - No Redis, brokers, or HTTP servers needed for testing
81
+ - ๐Ÿ”„ **Framework Agnostic Testing** - Works with Vitest, Jest, and any test runner
82
+
67
83
  **v0.6.13** - *Documentation Release*
68
84
  - ๐Ÿ“š Enhanced README with detailed Singleton pattern explanation
69
85
  - ๐ŸŒ New GitHub Pages documentation site
@@ -191,21 +207,71 @@ This pattern provides critical advantages in production environments:
191
207
  - **๐Ÿ—๏ธ Resource Management**: Automatic cleanup and connection pooling
192
208
  - **๐Ÿš€ Kubernetes Ready**: Essential for containerized environments where memory is limited
193
209
 
210
+ ## ๐Ÿงช Testing Revolution
211
+
212
+ ### **๐ŸŽฏ Zero Boilerplate Testing with SyntropyLogMock**
213
+
214
+ Testing SyntropyLog applications is now **dramatically simplified** with our new testing framework:
215
+
216
+ ```typescript
217
+ import { describe, it, expect, beforeEach } from 'vitest';
218
+ import { UserService } from './UserService';
219
+ const { createTestHelper } = require('syntropylog/testing');
220
+
221
+ // No initialization, no shutdown, no external dependencies
222
+ const testHelper = createTestHelper();
223
+
224
+ describe('UserService', () => {
225
+ let userService: UserService;
226
+
227
+ beforeEach(() => {
228
+ testHelper.beforeEach(); // Reset mocks
229
+ userService = new UserService(testHelper.mockSyntropyLog); // Inject mock
230
+ });
231
+
232
+ it('should create user successfully', async () => {
233
+ const result = await userService.createUser({ name: 'John', email: 'john@example.com' });
234
+ expect(result).toHaveProperty('userId');
235
+ expect(result.name).toBe('John');
236
+ });
237
+ });
238
+ ```
239
+
240
+ ### **๐Ÿš€ What's New in v0.6.14**
241
+
242
+ - **๐Ÿงช SyntropyLogMock** - Complete framework simulation in memory
243
+ - **๐Ÿงช BeaconRedisMock** - Full Redis simulation without external dependencies
244
+ - **๐Ÿงช Test Helpers** - One-line setup for any test framework
245
+ - **๐Ÿ“š 3 Testing Examples** - Example 28 (Vitest), Example 29 (Jest), Example 30 (Redis context)
246
+ - **๐ŸŽฏ Declarative Testing** - Focus on behavior, not implementation
247
+ - **โšก Zero External Dependencies** - No Redis, brokers, or HTTP servers needed
248
+
249
+ ### **โœ… Benefits**
250
+
251
+ - **๐Ÿšซ No Connection Boilerplate** - No init/shutdown in tests
252
+ - **โšก Lightning Fast** - Everything runs in memory
253
+ - **๐Ÿ”’ Reliable** - No network issues or state conflicts
254
+ - **๐ŸŽฏ Focused** - Test business logic, not framework internals
255
+ - **๐Ÿ”„ Framework Agnostic** - Works with Vitest, Jest, and any test runner
256
+
257
+ [View Testing Examples โ†’](https://syntropysoft.github.io/syntropylog-doc/docs/examples/28-testing-patterns-vitest)
258
+
194
259
  ## ๐Ÿ“ฆ Ecosystem
195
260
 
196
261
  - **[syntropylog](https://www.npmjs.com/package/syntropylog)** - Core framework
197
262
  - **[@syntropylog/adapters](https://www.npmjs.com/package/@syntropylog/adapters)** - HTTP and broker adapters
198
263
  - **[@syntropylog/types](https://www.npmjs.com/package/@syntropylog/types)** - TypeScript types
199
- - **[syntropylog-examples](https://github.com/Syntropysoft/syntropylog-examples-)** - 29 complete examples
264
+ - **[syntropylog-examples](https://github.com/Syntropysoft/syntropylog-examples-)** - 30 complete examples
200
265
 
201
266
  ## ๐Ÿš€ Examples
202
267
 
203
268
  Complete examples demonstrating SyntropyLog features:
204
269
 
205
- ### โœ… **Complete & Tested (00-13, 20-24)**
270
+ ### โœ… **Complete & Tested (00-13, 20-24, 28-30)**
206
271
  - **00-09**: Core Framework Features - Basic setup, context, configuration
207
272
  - **10-13**: HTTP & Redis Integration - Framework agnosticism (Express, Fastify)
208
273
  - **20-24**: Message Brokers - Kafka, RabbitMQ, NATS with correlation
274
+ - **28-30**: Testing Patterns - Vitest, Jest, and Redis context testing with SyntropyLogMock
209
275
 
210
276
  ### ๐Ÿšง **In Development (14-19, 25-27)**
211
277
  - **14-19**: Advanced Framework Features - NestJS, Koa, Hapi, custom serializers
@@ -0,0 +1,166 @@
1
+ import { randomUUID } from 'crypto';
2
+ /**
3
+ * Create a mock logger instance
4
+ */
5
+ export function createMockLogger() {
6
+ const logs = [];
7
+ return {
8
+ info: (message, metadata) => {
9
+ logs.push({ level: 'info', message, metadata });
10
+ },
11
+ warn: (message, metadata) => {
12
+ logs.push({ level: 'warn', message, metadata });
13
+ },
14
+ error: (message, metadata) => {
15
+ logs.push({ level: 'error', message, metadata });
16
+ },
17
+ debug: (message, metadata) => {
18
+ logs.push({ level: 'debug', message, metadata });
19
+ },
20
+ trace: (message, metadata) => {
21
+ logs.push({ level: 'trace', message, metadata });
22
+ },
23
+ fatal: (message, metadata) => {
24
+ logs.push({ level: 'fatal', message, metadata });
25
+ },
26
+ withSource: (source) => {
27
+ return createMockLogger(); // Return new instance with source context
28
+ },
29
+ };
30
+ }
31
+ /**
32
+ * Create a mock context manager instance
33
+ */
34
+ export function createMockContextManager() {
35
+ const context = {};
36
+ return {
37
+ run: async (fn) => {
38
+ // Simulate context execution
39
+ const correlationId = randomUUID();
40
+ const transactionId = randomUUID();
41
+ // Set default context values
42
+ context['x-correlation-id'] = correlationId;
43
+ context['x-transaction-id'] = transactionId;
44
+ context['x-correlation-id-test'] = correlationId;
45
+ // Execute the function with context
46
+ return await fn();
47
+ },
48
+ set: (key, value) => {
49
+ context[key] = value;
50
+ },
51
+ get: (key) => {
52
+ return context[key] || null;
53
+ },
54
+ getCorrelationIdHeaderName: () => 'x-correlation-id',
55
+ getTransactionIdHeaderName: () => 'x-transaction-id',
56
+ };
57
+ }
58
+ /**
59
+ * Create a mock HTTP manager instance
60
+ */
61
+ export function createMockHttpManager() {
62
+ return {
63
+ createClient: () => ({
64
+ get: async () => ({ data: {} }),
65
+ post: async () => ({ data: {} }),
66
+ put: async () => ({ data: {} }),
67
+ delete: async () => ({ data: {} }),
68
+ }),
69
+ };
70
+ }
71
+ /**
72
+ * Create a mock broker manager instance
73
+ */
74
+ export function createMockBrokerManager() {
75
+ return {
76
+ createClient: () => ({
77
+ publish: async () => undefined,
78
+ subscribe: async () => undefined,
79
+ }),
80
+ };
81
+ }
82
+ /**
83
+ * Create a mock serialization manager instance
84
+ */
85
+ export function createMockSerializationManager() {
86
+ return {
87
+ serialize: async () => '{}',
88
+ deserialize: async () => ({}),
89
+ };
90
+ }
91
+ // Global mock instances
92
+ let mockLogger;
93
+ let mockContextManager;
94
+ let mockHttpManager;
95
+ let mockBrokerManager;
96
+ let mockSerializationManager;
97
+ /**
98
+ * Get or create mock logger instance
99
+ */
100
+ export function getMockLogger() {
101
+ if (!mockLogger) {
102
+ mockLogger = createMockLogger();
103
+ }
104
+ return mockLogger;
105
+ }
106
+ /**
107
+ * Get or create mock context manager instance
108
+ */
109
+ export function getMockContextManager() {
110
+ if (!mockContextManager) {
111
+ mockContextManager = createMockContextManager();
112
+ }
113
+ return mockContextManager;
114
+ }
115
+ /**
116
+ * Get or create mock HTTP manager instance
117
+ */
118
+ export function getMockHttpManager() {
119
+ if (!mockHttpManager) {
120
+ mockHttpManager = createMockHttpManager();
121
+ }
122
+ return mockHttpManager;
123
+ }
124
+ /**
125
+ * Get or create mock broker manager instance
126
+ */
127
+ export function getMockBrokerManager() {
128
+ if (!mockBrokerManager) {
129
+ mockBrokerManager = createMockBrokerManager();
130
+ }
131
+ return mockBrokerManager;
132
+ }
133
+ /**
134
+ * Get or create mock serialization manager instance
135
+ */
136
+ export function getMockSerializationManager() {
137
+ if (!mockSerializationManager) {
138
+ mockSerializationManager = createMockSerializationManager();
139
+ }
140
+ return mockSerializationManager;
141
+ }
142
+ /**
143
+ * Create a complete mock of SyntropyLog
144
+ */
145
+ export function createSyntropyLogMock() {
146
+ return {
147
+ init: async () => undefined,
148
+ shutdown: async () => undefined,
149
+ getLogger: () => getMockLogger(),
150
+ getContextManager: () => getMockContextManager(),
151
+ getHttpManager: () => getMockHttpManager(),
152
+ getBrokerManager: () => getMockBrokerManager(),
153
+ getSerializationManager: () => getMockSerializationManager(),
154
+ };
155
+ }
156
+ /**
157
+ * Reset all mock instances
158
+ */
159
+ export function resetSyntropyLogMocks() {
160
+ mockLogger = undefined;
161
+ mockContextManager = undefined;
162
+ mockHttpManager = undefined;
163
+ mockBrokerManager = undefined;
164
+ mockSerializationManager = undefined;
165
+ }
166
+ //# sourceMappingURL=SyntropyLogMock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyntropyLogMock.js","sourceRoot":"","sources":["../../src/testing/SyntropyLogMock.ts"],"names":[],"mappings":"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"}
@@ -307,6 +307,218 @@ class SpyTransport extends Transport {
307
307
  }
308
308
  }
309
309
 
310
+ /**
311
+ * Create a mock logger instance
312
+ */
313
+ function createMockLogger() {
314
+ const logs = [];
315
+ return {
316
+ info: (message, metadata) => {
317
+ logs.push({ level: 'info', message, metadata });
318
+ },
319
+ warn: (message, metadata) => {
320
+ logs.push({ level: 'warn', message, metadata });
321
+ },
322
+ error: (message, metadata) => {
323
+ logs.push({ level: 'error', message, metadata });
324
+ },
325
+ debug: (message, metadata) => {
326
+ logs.push({ level: 'debug', message, metadata });
327
+ },
328
+ trace: (message, metadata) => {
329
+ logs.push({ level: 'trace', message, metadata });
330
+ },
331
+ fatal: (message, metadata) => {
332
+ logs.push({ level: 'fatal', message, metadata });
333
+ },
334
+ withSource: (source) => {
335
+ return createMockLogger(); // Return new instance with source context
336
+ },
337
+ };
338
+ }
339
+ /**
340
+ * Create a mock context manager instance
341
+ */
342
+ function createMockContextManager() {
343
+ const context = {};
344
+ return {
345
+ run: async (fn) => {
346
+ // Simulate context execution
347
+ const correlationId = crypto.randomUUID();
348
+ const transactionId = crypto.randomUUID();
349
+ // Set default context values
350
+ context['x-correlation-id'] = correlationId;
351
+ context['x-transaction-id'] = transactionId;
352
+ context['x-correlation-id-test'] = correlationId;
353
+ // Execute the function with context
354
+ return await fn();
355
+ },
356
+ set: (key, value) => {
357
+ context[key] = value;
358
+ },
359
+ get: (key) => {
360
+ return context[key] || null;
361
+ },
362
+ getCorrelationIdHeaderName: () => 'x-correlation-id',
363
+ getTransactionIdHeaderName: () => 'x-transaction-id',
364
+ };
365
+ }
366
+ /**
367
+ * Create a mock HTTP manager instance
368
+ */
369
+ function createMockHttpManager() {
370
+ return {
371
+ createClient: () => ({
372
+ get: async () => ({ data: {} }),
373
+ post: async () => ({ data: {} }),
374
+ put: async () => ({ data: {} }),
375
+ delete: async () => ({ data: {} }),
376
+ }),
377
+ };
378
+ }
379
+ /**
380
+ * Create a mock broker manager instance
381
+ */
382
+ function createMockBrokerManager() {
383
+ return {
384
+ createClient: () => ({
385
+ publish: async () => undefined,
386
+ subscribe: async () => undefined,
387
+ }),
388
+ };
389
+ }
390
+ /**
391
+ * Create a mock serialization manager instance
392
+ */
393
+ function createMockSerializationManager() {
394
+ return {
395
+ serialize: async () => '{}',
396
+ deserialize: async () => ({}),
397
+ };
398
+ }
399
+ // Global mock instances
400
+ let mockLogger;
401
+ let mockContextManager;
402
+ let mockHttpManager;
403
+ let mockBrokerManager;
404
+ let mockSerializationManager;
405
+ /**
406
+ * Get or create mock logger instance
407
+ */
408
+ function getMockLogger() {
409
+ if (!mockLogger) {
410
+ mockLogger = createMockLogger();
411
+ }
412
+ return mockLogger;
413
+ }
414
+ /**
415
+ * Get or create mock context manager instance
416
+ */
417
+ function getMockContextManager() {
418
+ if (!mockContextManager) {
419
+ mockContextManager = createMockContextManager();
420
+ }
421
+ return mockContextManager;
422
+ }
423
+ /**
424
+ * Get or create mock HTTP manager instance
425
+ */
426
+ function getMockHttpManager() {
427
+ if (!mockHttpManager) {
428
+ mockHttpManager = createMockHttpManager();
429
+ }
430
+ return mockHttpManager;
431
+ }
432
+ /**
433
+ * Get or create mock broker manager instance
434
+ */
435
+ function getMockBrokerManager() {
436
+ if (!mockBrokerManager) {
437
+ mockBrokerManager = createMockBrokerManager();
438
+ }
439
+ return mockBrokerManager;
440
+ }
441
+ /**
442
+ * Get or create mock serialization manager instance
443
+ */
444
+ function getMockSerializationManager() {
445
+ if (!mockSerializationManager) {
446
+ mockSerializationManager = createMockSerializationManager();
447
+ }
448
+ return mockSerializationManager;
449
+ }
450
+ /**
451
+ * Create a complete mock of SyntropyLog
452
+ */
453
+ function createSyntropyLogMock() {
454
+ return {
455
+ init: async () => undefined,
456
+ shutdown: async () => undefined,
457
+ getLogger: () => getMockLogger(),
458
+ getContextManager: () => getMockContextManager(),
459
+ getHttpManager: () => getMockHttpManager(),
460
+ getBrokerManager: () => getMockBrokerManager(),
461
+ getSerializationManager: () => getMockSerializationManager(),
462
+ };
463
+ }
464
+ /**
465
+ * Reset all mock instances
466
+ */
467
+ function resetSyntropyLogMocks() {
468
+ mockLogger = undefined;
469
+ mockContextManager = undefined;
470
+ mockHttpManager = undefined;
471
+ mockBrokerManager = undefined;
472
+ mockSerializationManager = undefined;
473
+ }
474
+
475
+ /**
476
+ * Create a test helper for SyntropyLog testing
477
+ *
478
+ * @example
479
+ * ```typescript
480
+ * const testHelper = createTestHelper();
481
+ *
482
+ * describe('MyService', () => {
483
+ * beforeEach(() => testHelper.beforeEach());
484
+ * afterEach(() => testHelper.afterEach());
485
+ *
486
+ * it('should work', () => {
487
+ * const service = new MyService(testHelper.mockSyntropyLog);
488
+ * // ... test logic
489
+ * });
490
+ * });
491
+ * ```
492
+ */
493
+ function createTestHelper() {
494
+ const mockSyntropyLog = createSyntropyLogMock();
495
+ return {
496
+ mockSyntropyLog,
497
+ beforeEach: () => {
498
+ resetSyntropyLogMocks();
499
+ },
500
+ afterEach: () => {
501
+ // Clean up if needed
502
+ }
503
+ };
504
+ }
505
+ /**
506
+ * Create a service with SyntropyLog mock for testing
507
+ *
508
+ * @param ServiceClass - The service class to instantiate
509
+ * @param mockSyntropyLog - The mock SyntropyLog instance
510
+ * @returns Instance of the service with mock injected
511
+ *
512
+ * @example
513
+ * ```typescript
514
+ * const mockSyntropyLog = createSyntropyLogMock();
515
+ * const userService = createServiceWithMock(UserService, mockSyntropyLog);
516
+ * ```
517
+ */
518
+ function createServiceWithMock(ServiceClass, mockSyntropyLog) {
519
+ return new ServiceClass(mockSyntropyLog);
520
+ }
521
+
310
522
  /**
311
523
  * @file src/testing/index.ts
312
524
  * @description Public entry point for testing utilities.
@@ -318,4 +530,18 @@ class SpyTransport extends Transport {
318
530
 
319
531
  exports.MockContextManager = MockContextManager;
320
532
  exports.SpyTransport = SpyTransport;
533
+ exports.createMockBrokerManager = createMockBrokerManager;
534
+ exports.createMockContextManager = createMockContextManager;
535
+ exports.createMockHttpManager = createMockHttpManager;
536
+ exports.createMockLogger = createMockLogger;
537
+ exports.createMockSerializationManager = createMockSerializationManager;
538
+ exports.createServiceWithMock = createServiceWithMock;
539
+ exports.createSyntropyLogMock = createSyntropyLogMock;
540
+ exports.createTestHelper = createTestHelper;
541
+ exports.getMockBrokerManager = getMockBrokerManager;
542
+ exports.getMockContextManager = getMockContextManager;
543
+ exports.getMockHttpManager = getMockHttpManager;
544
+ exports.getMockLogger = getMockLogger;
545
+ exports.getMockSerializationManager = getMockSerializationManager;
546
+ exports.resetSyntropyLogMocks = resetSyntropyLogMocks;
321
547
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/context/MockContextManager.ts","../../src/logger/levels.ts","../../src/logger/transports/Transport.ts","../../src/logger/transports/SpyTransport.ts","../../src/testing/index.ts"],"sourcesContent":[null,null,null,null,null],"names":["randomUUID"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/context/MockContextManager.ts","../../src/logger/levels.ts","../../src/logger/transports/Transport.ts","../../src/logger/transports/SpyTransport.ts","../../src/testing/SyntropyLogMock.ts","../../src/testing/test-helper.ts","../../src/testing/index.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["randomUUID"],"mappings":"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"}