@jmlq/logger 0.1.0-alpha.11 → 0.1.0-alpha.12

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 (125) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.js +20 -0
  3. package/package.json +5 -2
  4. package/dist/examples/data-source-service.example.d.ts +0 -3
  5. package/dist/examples/data-source-service.example.js +0 -174
  6. package/dist/examples/flush-buffers-use-case.example.d.ts +0 -3
  7. package/dist/examples/flush-buffers-use-case.example.js +0 -60
  8. package/dist/examples/get-logs-use-case.example.d.ts +0 -3
  9. package/dist/examples/get-logs-use-case.example.js +0 -110
  10. package/dist/examples/index.example.d.ts +0 -8
  11. package/dist/examples/index.example.js +0 -116
  12. package/dist/examples/logger-factory.example.d.ts +0 -39
  13. package/dist/examples/logger-factory.example.js +0 -158
  14. package/dist/examples/normalize-message.example.d.ts +0 -3
  15. package/dist/examples/normalize-message.example.js +0 -80
  16. package/dist/examples/pii-redactor.example.d.ts +0 -3
  17. package/dist/examples/pii-redactor.example.js +0 -129
  18. package/dist/examples/save-log-use-case.example.d.ts +0 -3
  19. package/dist/examples/save-log-use-case.example.js +0 -150
  20. package/dist/examples/to-log-level.example.d.ts +0 -3
  21. package/dist/examples/to-log-level.example.js +0 -49
  22. package/dist/examples/to-pii-regex.example.d.ts +0 -3
  23. package/dist/examples/to-pii-regex.example.js +0 -75
  24. package/dist/src/application/factory/create-logger.d.ts +0 -2
  25. package/dist/src/application/factory/create-logger.js +0 -29
  26. package/dist/src/domain/services/pii-redactor.d.ts +0 -10
  27. package/dist/src/domain/services/pii-redactor.js +0 -68
  28. package/dist/src/index.d.ts +0 -6
  29. package/dist/src/index.js +0 -22
  30. package/dist/src/infrastructure/datasources/in-memory-log.datasource.d.ts +0 -1
  31. package/dist/src/infrastructure/datasources/in-memory-log.datasource.js +0 -2
  32. package/dist/src/infrastructure/datasources/index.d.ts +0 -1
  33. package/dist/src/infrastructure/datasources/index.js +0 -17
  34. package/dist/tests/application/factory/logger-factory.spec.d.ts +0 -1
  35. package/dist/tests/application/factory/logger-factory.spec.js +0 -161
  36. package/dist/tests/application/use-cases/flush-buffers.use-case.spec.d.ts +0 -1
  37. package/dist/tests/application/use-cases/flush-buffers.use-case.spec.js +0 -38
  38. package/dist/tests/application/use-cases/get-logs.use-case.spec.d.ts +0 -1
  39. package/dist/tests/application/use-cases/get-logs.use-case.spec.js +0 -114
  40. package/dist/tests/application/use-cases/save-log.use-case.spec.d.ts +0 -1
  41. package/dist/tests/application/use-cases/save-log.use-case.spec.js +0 -138
  42. package/dist/tests/domain/services/log-level.service.spec.d.ts +0 -1
  43. package/dist/tests/domain/services/log-level.service.spec.js +0 -68
  44. package/dist/tests/domain/services/normalize-message.spec.d.ts +0 -1
  45. package/dist/tests/domain/services/normalize-message.spec.js +0 -83
  46. package/dist/tests/domain/services/pii-redactor.spec.d.ts +0 -1
  47. package/dist/tests/domain/services/pii-redactor.spec.js +0 -170
  48. package/dist/tests/domain/services/to-pii-regex.spec.d.ts +0 -1
  49. package/dist/tests/domain/services/to-pii-regex.spec.js +0 -82
  50. package/dist/tests/infrastructure/services/datasource.service.spec.d.ts +0 -1
  51. package/dist/tests/infrastructure/services/datasource.service.spec.js +0 -128
  52. package/dist/tests/test-utils/create-pii-redactor-mock.d.ts +0 -5
  53. package/dist/tests/test-utils/create-pii-redactor-mock.js +0 -10
  54. /package/dist/{src/application → application}/factory/index.d.ts +0 -0
  55. /package/dist/{src/application → application}/factory/index.js +0 -0
  56. /package/dist/{src/application → application}/factory/logger.factory.d.ts +0 -0
  57. /package/dist/{src/application → application}/factory/logger.factory.js +0 -0
  58. /package/dist/{src/application → application}/index.d.ts +0 -0
  59. /package/dist/{src/application → application}/index.js +0 -0
  60. /package/dist/{src/application → application}/use-cases/flush-buffers.use-case.d.ts +0 -0
  61. /package/dist/{src/application → application}/use-cases/flush-buffers.use-case.js +0 -0
  62. /package/dist/{src/application → application}/use-cases/get-logs.use-case.d.ts +0 -0
  63. /package/dist/{src/application → application}/use-cases/get-logs.use-case.js +0 -0
  64. /package/dist/{src/application → application}/use-cases/index.d.ts +0 -0
  65. /package/dist/{src/application → application}/use-cases/index.js +0 -0
  66. /package/dist/{src/application → application}/use-cases/save-log.use-case.d.ts +0 -0
  67. /package/dist/{src/application → application}/use-cases/save-log.use-case.js +0 -0
  68. /package/dist/{src/domain → domain}/index.d.ts +0 -0
  69. /package/dist/{src/domain → domain}/index.js +0 -0
  70. /package/dist/{src/domain → domain}/ports/create-logger-options.port.d.ts +0 -0
  71. /package/dist/{src/domain → domain}/ports/create-logger-options.port.js +0 -0
  72. /package/dist/{src/domain → domain}/ports/index.d.ts +0 -0
  73. /package/dist/{src/domain → domain}/ports/index.js +0 -0
  74. /package/dist/{src/domain → domain}/ports/log-datasource.port.d.ts +0 -0
  75. /package/dist/{src/domain → domain}/ports/log-datasource.port.js +0 -0
  76. /package/dist/{src/domain → domain}/ports/logger-factory-config.port.d.ts +0 -0
  77. /package/dist/{src/domain → domain}/ports/logger-factory-config.port.js +0 -0
  78. /package/dist/{src/domain → domain}/ports/logger-service.port.d.ts +0 -0
  79. /package/dist/{src/domain → domain}/ports/logger-service.port.js +0 -0
  80. /package/dist/{src/domain → domain}/ports/logger.port.d.ts +0 -0
  81. /package/dist/{src/domain → domain}/ports/logger.port.js +0 -0
  82. /package/dist/{src/domain → domain}/ports/pii-redactor.port.d.ts +0 -0
  83. /package/dist/{src/domain → domain}/ports/pii-redactor.port.js +0 -0
  84. /package/dist/{src/domain → domain}/request/get-logs-filter.props.d.ts +0 -0
  85. /package/dist/{src/domain → domain}/request/get-logs-filter.props.js +0 -0
  86. /package/dist/{src/domain → domain}/request/index.d.ts +0 -0
  87. /package/dist/{src/domain → domain}/request/index.js +0 -0
  88. /package/dist/{src/domain → domain}/request/log.props.d.ts +0 -0
  89. /package/dist/{src/domain → domain}/request/log.props.js +0 -0
  90. /package/dist/{src/domain → domain}/request/pii-options.props.d.ts +0 -0
  91. /package/dist/{src/domain → domain}/request/pii-options.props.js +0 -0
  92. /package/dist/{src/domain → domain}/request/pii-replacement.props.d.ts +0 -0
  93. /package/dist/{src/domain → domain}/request/pii-replacement.props.js +0 -0
  94. /package/dist/{src/domain → domain}/request/save-log.props.d.ts +0 -0
  95. /package/dist/{src/domain → domain}/request/save-log.props.js +0 -0
  96. /package/dist/{src/domain → domain}/response/index.d.ts +0 -0
  97. /package/dist/{src/domain → domain}/response/index.js +0 -0
  98. /package/dist/{src/domain → domain}/response/log.response.d.ts +0 -0
  99. /package/dist/{src/domain → domain}/response/log.response.js +0 -0
  100. /package/dist/{src/domain → domain}/services/index.d.ts +0 -0
  101. /package/dist/{src/domain → domain}/services/index.js +0 -0
  102. /package/dist/{src/domain → domain}/services/log-level.service.d.ts +0 -0
  103. /package/dist/{src/domain → domain}/services/log-level.service.js +0 -0
  104. /package/dist/{src/domain → domain}/services/message-normalizer.service.d.ts +0 -0
  105. /package/dist/{src/domain → domain}/services/message-normalizer.service.js +0 -0
  106. /package/dist/{src/domain → domain}/services/pii-pattern.service.d.ts +0 -0
  107. /package/dist/{src/domain → domain}/services/pii-pattern.service.js +0 -0
  108. /package/dist/{src/domain → domain}/services/pii-redactor.service.d.ts +0 -0
  109. /package/dist/{src/domain → domain}/services/pii-redactor.service.js +0 -0
  110. /package/dist/{src/domain → domain}/types/index.d.ts +0 -0
  111. /package/dist/{src/domain → domain}/types/index.js +0 -0
  112. /package/dist/{src/domain → domain}/types/log-message.type.d.ts +0 -0
  113. /package/dist/{src/domain → domain}/types/log-message.type.js +0 -0
  114. /package/dist/{src/domain → domain}/value-objects/index.d.ts +0 -0
  115. /package/dist/{src/domain → domain}/value-objects/index.js +0 -0
  116. /package/dist/{src/domain → domain}/value-objects/log-level.vo.d.ts +0 -0
  117. /package/dist/{src/domain → domain}/value-objects/log-level.vo.js +0 -0
  118. /package/dist/{src/infrastructure → infrastructure}/index.d.ts +0 -0
  119. /package/dist/{src/infrastructure → infrastructure}/index.js +0 -0
  120. /package/dist/{src/infrastructure → infrastructure}/services/data-source-error-handler.type.d.ts +0 -0
  121. /package/dist/{src/infrastructure → infrastructure}/services/data-source-error-handler.type.js +0 -0
  122. /package/dist/{src/infrastructure → infrastructure}/services/datasource.service.d.ts +0 -0
  123. /package/dist/{src/infrastructure → infrastructure}/services/datasource.service.js +0 -0
  124. /package/dist/{src/infrastructure → infrastructure}/services/index.d.ts +0 -0
  125. /package/dist/{src/infrastructure → infrastructure}/services/index.js +0 -0
@@ -0,0 +1,3 @@
1
+ export * from "./domain";
2
+ export * from "./application";
3
+ export * from "./infrastructure";
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ // Re-exporta la API pública del paquete
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ __exportStar(require("./domain"), exports);
19
+ __exportStar(require("./application"), exports);
20
+ __exportStar(require("./infrastructure"), exports);
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@jmlq/logger",
3
3
  "description": "logger package with clean architecture",
4
- "version": "0.1.0-alpha.11",
4
+ "version": "0.1.0-alpha.12",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "scripts": {
8
- "build": "tsc -p tsconfig.json",
8
+ "dev": "rimraf dist && mkdir dist && tsc -p tsconfig.json",
9
+ "build": "rimraf dist && mkdir dist && tsc -p tsconfig.build.json",
9
10
  "prepublishOnly": "npm run build",
10
11
  "test": "jest --passWithNoTests",
11
12
  "test:watch": "jest --watch",
@@ -31,11 +32,13 @@
31
32
  "@types/jest": "^29.5.8",
32
33
  "@types/node": "^20.8.10",
33
34
  "jest": "^29.7.0",
35
+ "rimraf": "^6.1.2",
34
36
  "tsx": "^4.1.4",
35
37
  "typescript": "^5.2.2"
36
38
  },
37
39
  "files": [
38
40
  "dist",
41
+ "README.md",
39
42
  "architecture.md",
40
43
  "install.md"
41
44
  ]
@@ -1,3 +0,0 @@
1
- export declare class DataSourceServiceExample {
2
- static Main(): Promise<void>;
3
- }
@@ -1,174 +0,0 @@
1
- "use strict";
2
- // ============================================================================
3
- // 🧩 Ejemplo realista de cómo un cliente podría integrar DataSourceService
4
- // ============================================================================
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.DataSourceServiceExample = void 0;
7
- const src_1 = require("src");
8
- const infrastructure_1 = require("src/infrastructure");
9
- /**
10
- * InMemoryLogDatasource
11
- *
12
- * Implementación simple de ILogDatasource que almacena los logs en memoria.
13
- * Útil para:
14
- * - Tests
15
- * - Ejemplos / demos
16
- * - Entornos de desarrollo
17
- */
18
- class InMemoryLogDatasource {
19
- constructor() {
20
- this.name = "in-memory";
21
- this.logs = [];
22
- }
23
- /**
24
- * Guarda un log en memoria.
25
- * No aplica lógica especial, solo hace push al arreglo interno.
26
- */
27
- async save(log) {
28
- // Suponemos que ILogResponse es compatible con ILogProps.
29
- // Si en tu dominio ILogResponse tiene campos extra (ej: id),
30
- // aquí podrías generarlos.
31
- this.logs.push(log);
32
- }
33
- /**
34
- * Devuelve los logs almacenados en memoria.
35
- * Por simplicidad, se ignora el filtro. Puedes adaptar esta parte cuando
36
- * tengas definido el shape completo de IGetLogsFilterProps.
37
- */
38
- async find(_filter) {
39
- // Retornamos una copia para evitar mutación externa.
40
- return [...this.logs];
41
- }
42
- /**
43
- * Limpia todos los logs almacenados.
44
- */
45
- async flush() {
46
- this.logs.length = 0;
47
- }
48
- /**
49
- * Libera recursos.
50
- * En este caso es equivalente a flush(), pero queda listo
51
- * por si en el futuro necesitas lógica adicional.
52
- */
53
- async dispose() {
54
- await this.flush();
55
- }
56
- }
57
- /**
58
- * AppLoggerService
59
- *
60
- * Servicio de logging de la aplicación que:
61
- * - Usa DataSourceService (composite) debajo.
62
- * - Configura múltiples datasources.
63
- * - Centraliza el manejo de errores del logger vía errorHandler.
64
- */
65
- class AppLoggerService {
66
- constructor() {
67
- // 1️⃣ Definimos los datasources que usará la app
68
- const datasources = [
69
- new InMemoryLogDatasource(), // para debugging / tests / fallback
70
- new HttpLogDatasource(// datasource custom del cliente
71
- process.env.LOG_API_URL ?? "https://logs.my-api.com/events"),
72
- ];
73
- // 2️⃣ Definimos un error handler centralizado para errores del logger
74
- const errorHandler = (info) => {
75
- // Aquí el cliente podría usar su propio logger de infra (pino, winston, etc).
76
- // En este ejemplo usamos console.error por simplicidad.
77
- // IMPORTANTE: este logger NO debe depender de @jmlq/logger para evitar ciclos.
78
- console.error("[AppLoggerService] Error en datasource de logger", {
79
- op: info.operation,
80
- datasource: info.datasourceName,
81
- error: info.reason,
82
- });
83
- };
84
- // 3️⃣ Creamos el DataSourceService composite con los datasources y el handler
85
- this.dataSourceService = new infrastructure_1.DataSourceService(datasources, errorHandler);
86
- }
87
- // ----------------------------------------------------------------------------
88
- // API pública del logger de la app (lo que realmente usa el cliente)
89
- // ----------------------------------------------------------------------------
90
- async info(message, meta) {
91
- await this.log(src_1.LogLevel.INFO, message, meta);
92
- }
93
- async warn(message, meta) {
94
- await this.log(src_1.LogLevel.WARN, message, meta);
95
- }
96
- async error(message, meta) {
97
- await this.log(src_1.LogLevel.ERROR, message, meta);
98
- }
99
- async debug(message, meta) {
100
- await this.log(src_1.LogLevel.DEBUG, message, meta);
101
- }
102
- async log(level, message, meta) {
103
- const log = {
104
- level,
105
- message,
106
- timestamp: Date.now(),
107
- meta,
108
- };
109
- await this.dataSourceService.save(log);
110
- }
111
- /**
112
- * Métodos opcionales para flush/dispose (por ejemplo, en shutdown de la app).
113
- */
114
- async flush() {
115
- await this.dataSourceService.flush();
116
- }
117
- async dispose() {
118
- await this.dataSourceService.dispose();
119
- }
120
- }
121
- // ============================================================================
122
- // 🌐 Ejemplo de datasource HTTP implementado por el cliente
123
- // (no forma parte del core, lo crea el consumidor usando ILogDatasource)
124
- // ============================================================================
125
- class HttpLogDatasource {
126
- constructor(endpoint) {
127
- this.endpoint = endpoint;
128
- this.name = "http";
129
- }
130
- async save(log) {
131
- // Aquí el cliente puede usar fetch, axios, got, etc.
132
- // Lo dejamos como pseudo-código para no acoplar dependencias reales.
133
- const body = JSON.stringify(log);
134
- await fetch(this.endpoint, {
135
- method: "POST",
136
- headers: { "Content-Type": "application/json" },
137
- body,
138
- });
139
- }
140
- }
141
- // ============================================================================
142
- // 🚀 Example runner: cómo el cliente lo usaría en su app
143
- // ============================================================================
144
- class DataSourceServiceExample {
145
- static async Main() {
146
- console.log("=== 🧩 Ejemplo REAL de uso: AppLoggerService sobre DataSourceService ===\n");
147
- // 1️⃣ Crear instancia de logger de aplicación
148
- const logger = new AppLoggerService();
149
- // 2️⃣ Loguear eventos típicos de una app
150
- console.log("📝 Enviando logs de ejemplo...\n");
151
- await logger.info("Servidor iniciado", {
152
- port: 3000,
153
- env: process.env.NODE_ENV ?? "development",
154
- });
155
- await logger.info("Usuario autenticado", {
156
- userId: "12345",
157
- method: "password",
158
- });
159
- await logger.error("Error al procesar pedido", {
160
- orderId: "ORD-999",
161
- reason: "Stock insuficiente",
162
- });
163
- await logger.warn("Latencia alta detectada en /payments", {
164
- p95_ms: 850,
165
- });
166
- console.log("✅ Logs enviados. Si algún datasource falla, el error handler los captura.\n");
167
- // 3️⃣ Ejemplo de uso en shutdown de la app
168
- console.log("🧹 Realizando flush() y dispose() del logger...\n");
169
- await logger.flush();
170
- await logger.dispose();
171
- console.log("🏁 Ejemplo real completado.\n");
172
- }
173
- }
174
- exports.DataSourceServiceExample = DataSourceServiceExample;
@@ -1,3 +0,0 @@
1
- export declare class FlushBuffersUseCaseExample {
2
- static Main(): Promise<void>;
3
- }
@@ -1,60 +0,0 @@
1
- "use strict";
2
- // examples/flush-buffers-use-case.example.ts
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.FlushBuffersUseCaseExample = void 0;
5
- const flush_buffers_use_case_1 = require("../src/application/use-cases/flush-buffers.use-case");
6
- const value_objects_1 = require("../src/domain/value-objects");
7
- // ---------------------------------------------------------------------------
8
- // Ejemplo de un datasource simple con buffer en memoria
9
- // ---------------------------------------------------------------------------
10
- class BufferedInMemoryDatasource {
11
- constructor() {
12
- this.name = "buffered-memory";
13
- this.buffer = [];
14
- this.store = [];
15
- }
16
- async save(log) {
17
- // Guarda en buffer para escritura diferida
18
- this.buffer.push(log);
19
- }
20
- async flush() {
21
- // Simula un flush: vacía buffer hacia el almacenamiento persistente
22
- this.store.push(...this.buffer);
23
- this.buffer = [];
24
- console.log("🧹 Buffer flushed →", this.store.length, "eventos persistidos");
25
- }
26
- async find() {
27
- return this.store;
28
- }
29
- }
30
- // ---------------------------------------------------------------------------
31
- // Ejemplo de uso real del caso de uso FlushBuffersUseCase
32
- // ---------------------------------------------------------------------------
33
- class FlushBuffersUseCaseExample {
34
- static async Main() {
35
- console.log("\n=== 🧪 Ejemplo de uso: FlushBuffersUseCase ===\n");
36
- // 1️⃣ Creamos un datasource con buffer
37
- const ds = new BufferedInMemoryDatasource();
38
- // 2️⃣ Creamos el caso de uso
39
- const flushUseCase = new flush_buffers_use_case_1.FlushBuffersUseCase(ds);
40
- // 3️⃣ Simulamos guardar logs antes del flush
41
- console.log("➕ Guardando eventos en buffer...\n");
42
- await ds.save({
43
- level: value_objects_1.LogLevel.INFO,
44
- message: "Primer evento",
45
- timestamp: Date.now(),
46
- });
47
- await ds.save({
48
- level: value_objects_1.LogLevel.ERROR,
49
- message: { error: "Algo falló" },
50
- timestamp: Date.now(),
51
- });
52
- // 4️⃣ Ejecutamos el flush manualmente (ej: al cerrar la app)
53
- console.log("🚀 Ejecutando flush...\n");
54
- await flushUseCase.execute();
55
- // 5️⃣ Verificamos que los eventos están persistidos
56
- const logs = await ds.find();
57
- console.log("📦 Logs almacenados:", logs);
58
- }
59
- }
60
- exports.FlushBuffersUseCaseExample = FlushBuffersUseCaseExample;
@@ -1,3 +0,0 @@
1
- export declare class GetLogsUseCaseExample {
2
- static Main(): Promise<void>;
3
- }
@@ -1,110 +0,0 @@
1
- "use strict";
2
- // examples/get-logs-use-case.example.ts
3
- // 🔧 Ajusta los imports según tu estructura
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.GetLogsUseCaseExample = void 0;
6
- const get_logs_use_case_1 = require("../src/application/use-cases/get-logs.use-case");
7
- const value_objects_1 = require("../src/domain/value-objects");
8
- // -----------------------------------------------------------------------------
9
- // 1️⃣ Implementación simple de un datasource en memoria con soporte de find()
10
- // -----------------------------------------------------------------------------
11
- class InMemoryLogDatasource {
12
- constructor() {
13
- this.name = "in-memory-ds";
14
- this.store = [];
15
- }
16
- async save(log) {
17
- this.store.push(log);
18
- }
19
- async find(filter) {
20
- let results = [...this.store];
21
- if (filter?.levelMin !== undefined) {
22
- results = results.filter((log) => log.level >= filter.levelMin);
23
- }
24
- if (filter?.since !== undefined) {
25
- results = results.filter((log) => log.timestamp >= filter.since);
26
- }
27
- if (filter?.until !== undefined) {
28
- results = results.filter((log) => log.timestamp <= filter.until);
29
- }
30
- if (filter?.query) {
31
- const q = filter.query.toLowerCase();
32
- results = results.filter((log) => {
33
- if (typeof log.message === "string") {
34
- return log.message.toLowerCase().includes(q);
35
- }
36
- return false;
37
- });
38
- }
39
- const offset = filter?.offset ?? 0;
40
- const limit = filter?.limit ?? results.length;
41
- return results.slice(offset, offset + limit);
42
- }
43
- }
44
- // -----------------------------------------------------------------------------
45
- // 2️⃣ Ejemplo de uso real de GetLogsUseCase
46
- // -----------------------------------------------------------------------------
47
- class GetLogsUseCaseExample {
48
- static async Main() {
49
- console.log("\n=== 📜 Ejemplo de uso: GetLogsUseCase ===\n");
50
- const ds = new InMemoryLogDatasource();
51
- const useCase = new get_logs_use_case_1.GetLogsUseCase(ds);
52
- // Seed de logs de ejemplo
53
- const now = Date.now();
54
- await ds.save({
55
- level: value_objects_1.LogLevel.INFO,
56
- message: "Servicio iniciado correctamente",
57
- timestamp: now - 60000, // hace 1 minuto
58
- });
59
- await ds.save({
60
- level: value_objects_1.LogLevel.WARN,
61
- message: "Latencia alta en endpoint /api/users",
62
- timestamp: now - 30000, // hace 30s
63
- });
64
- await ds.save({
65
- level: value_objects_1.LogLevel.ERROR,
66
- message: "Error al conectar con base de datos",
67
- timestamp: now - 10000, // hace 10s
68
- meta: { retryCount: 3 },
69
- });
70
- // 1) Obtener todos los logs sin filtro
71
- console.log("🔹 1) Todos los logs (sin filtro):\n");
72
- const allLogs = await useCase.execute();
73
- console.dir(allLogs, { depth: 5 });
74
- // 2) Filtrar por nivel mínimo (levelMin = WARN)
75
- console.log("\n🔹 2) Logs con level >= WARN:\n");
76
- const warnAndAbove = await useCase.execute({
77
- levelMin: value_objects_1.LogLevel.WARN,
78
- });
79
- console.dir(warnAndAbove, { depth: 5 });
80
- // 3) Filtrar por ventana de tiempo (since / until)
81
- console.log("\n🔹 3) Logs en los últimos 20 segundos:\n");
82
- const last20Seconds = await useCase.execute({
83
- since: now - 20000,
84
- until: now,
85
- });
86
- console.dir(last20Seconds, { depth: 5 });
87
- // 4) Búsqueda por texto (query)
88
- console.log('\n🔹 4) Logs que contienen "error":\n');
89
- const errorLogs = await useCase.execute({
90
- query: "error",
91
- levelMin: value_objects_1.LogLevel.INFO,
92
- });
93
- console.dir(errorLogs, { depth: 5 });
94
- // 5) Paginación simple (limit / offset)
95
- console.log("\n🔹 5) Primer log (limit = 1):\n");
96
- const page1 = await useCase.execute({
97
- limit: 1,
98
- offset: 0,
99
- });
100
- console.dir(page1, { depth: 5 });
101
- console.log("\n🔹 6) Segundo log (limit = 1, offset = 1):\n");
102
- const page2 = await useCase.execute({
103
- limit: 1,
104
- offset: 1,
105
- });
106
- console.dir(page2, { depth: 5 });
107
- console.log("\n✅ Ejemplo GetLogsUseCase finalizado.\n");
108
- }
109
- }
110
- exports.GetLogsUseCaseExample = GetLogsUseCaseExample;
@@ -1,8 +0,0 @@
1
- export declare class MainExample {
2
- runExampleUseCases(): Promise<void>;
3
- runExampleDomainServices(): Promise<void>;
4
- runExampleServices(): Promise<void>;
5
- runExampleFactories(): Promise<void>;
6
- runAllExamples(): Promise<void>;
7
- }
8
- export default MainExample;
@@ -1,116 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MainExample = void 0;
4
- const data_source_service_example_1 = require("./data-source-service.example");
5
- const flush_buffers_use_case_example_1 = require("./flush-buffers-use-case.example");
6
- const get_logs_use_case_example_1 = require("./get-logs-use-case.example");
7
- const logger_factory_example_1 = require("./logger-factory.example");
8
- const normalize_message_example_1 = require("./normalize-message.example");
9
- const pii_redactor_example_1 = require("./pii-redactor.example");
10
- const save_log_use_case_example_1 = require("./save-log-use-case.example");
11
- const to_log_level_example_1 = require("./to-log-level.example");
12
- const to_pii_regex_example_1 = require("./to-pii-regex.example");
13
- class MainExample {
14
- async runExampleUseCases() {
15
- console.log("-".repeat(80) + "\n");
16
- console.log("🎯 Ejecutando Use Case: FlushBuffersUseCase que empuja a almacenamiento final lo que ya está en un buffer interno.s\n");
17
- await flush_buffers_use_case_example_1.FlushBuffersUseCaseExample.Main();
18
- console.log("-".repeat(80) + "\n");
19
- console.log("🎯 Ejecutando Use Case: SaveLogUseCase (guarda logs con filtros)\n");
20
- await save_log_use_case_example_1.SaveLogUseCaseExample.Main();
21
- console.log("-".repeat(80) + "\n");
22
- console.log("🎯 Ejecutando Use Case: GetLogsUseCase (recupera logs con filtros)\n");
23
- await get_logs_use_case_example_1.GetLogsUseCaseExample.Main();
24
- console.log("-".repeat(80) + "\n");
25
- }
26
- async runExampleDomainServices() {
27
- console.log("-".repeat(80) + "\n");
28
- console.log("🎯 Ejecutando Service: ToLogLevel (valida el nivel de log)\n");
29
- to_log_level_example_1.ToLogLevelExample.Main();
30
- console.log("-".repeat(80) + "\n");
31
- console.log("🎯 Ejecutando Service: NormalizeMessage\n");
32
- normalize_message_example_1.NormalizeMessageExample.Main();
33
- console.log("-".repeat(80) + "\n");
34
- console.log("🎯 Ejecutando Service: ToPiiRegex (genera regex para PII)\n");
35
- to_pii_regex_example_1.ToPiiRegexExample.Main();
36
- console.log("-".repeat(80) + "\n");
37
- console.log("🎯 Ejecutando Service: PiiRedactor (redacta información sensible)\n");
38
- pii_redactor_example_1.PiiRedactorExample.Main();
39
- console.log("-".repeat(80) + "\n");
40
- }
41
- //
42
- async runExampleServices() {
43
- console.log("-".repeat(80) + "\n");
44
- console.log("🎯 Ejecutando Service: DataSourceService (Composite Logger):\n");
45
- await data_source_service_example_1.DataSourceServiceExample.Main();
46
- console.log("-".repeat(80) + "\n");
47
- }
48
- async runExampleFactories() {
49
- console.log("-".repeat(80) + "\n");
50
- console.log("🎯 Ejecutando Factory: LoggerFactory\n");
51
- await logger_factory_example_1.LoggerFactoryExample.Main();
52
- console.log("-".repeat(80) + "\n");
53
- }
54
- async runAllExamples() {
55
- try {
56
- console.log("-".repeat(80) + "\n");
57
- console.log("🚀 Domain Services - Ejemplos Completos\n");
58
- await this.runExampleDomainServices();
59
- console.log("-".repeat(80) + "\n");
60
- console.log("🚀 Services - Ejemplos Completos\n");
61
- await this.runExampleServices();
62
- console.log("-".repeat(80) + "\n");
63
- console.log("🚀 Use Cases - Ejemplos Completos\n");
64
- await this.runExampleUseCases();
65
- console.log("-".repeat(80) + "\n");
66
- console.log("🚀 Factories - Ejemplos Completos\n");
67
- await this.runExampleFactories();
68
- console.log("-".repeat(80) + "\n");
69
- console.log("🎉 ¡Todos los ejemplos completados exitosamente!");
70
- console.log("\n📚 Para más información consulta el README.md");
71
- console.log("-".repeat(80) + "\n");
72
- }
73
- catch (error) {
74
- console.error("❌ Error ejecutando ejemplos:", error);
75
- }
76
- }
77
- }
78
- exports.MainExample = MainExample;
79
- // Función de ayuda para mostrar opciones
80
- function showHelp() {
81
- console.log("📖 JWT Auth Package - Ejemplos Disponibles\n");
82
- console.log("Comandos disponibles:");
83
- console.log(" npm run example:domain-services - Ejemplos uso domain services");
84
- console.log(" npm run example:services - Ejemplos uso services");
85
- console.log(" npm run example:use-cases - Ejemplos uso use-cases");
86
- console.log(" npm run example:factories - Ejemplos uso factories");
87
- console.log(" npm run example:all - Todos los ejemplos");
88
- console.log("\nO ejecuta directamente:");
89
- console.log(" tsx examples/jwt.examples.ts");
90
- console.log(" tsx examples/index.example.ts");
91
- }
92
- // Ejecutar según el argumento
93
- if (require.main === module) {
94
- const mainExample = new MainExample();
95
- const command = process.argv[2];
96
- switch (command) {
97
- case "domain-services":
98
- mainExample.runExampleDomainServices();
99
- break;
100
- case "use-cases":
101
- mainExample.runExampleUseCases();
102
- break;
103
- case "services":
104
- mainExample.runExampleServices();
105
- break;
106
- case "factories":
107
- mainExample.runExampleFactories();
108
- break;
109
- case "help":
110
- showHelp();
111
- break;
112
- default:
113
- mainExample.runAllExamples();
114
- }
115
- }
116
- exports.default = MainExample;
@@ -1,39 +0,0 @@
1
- import { ILogResponse } from "../src/domain/response";
2
- import { ILogDatasource } from "../src/domain/ports";
3
- import { IGetLogsFilterProps, ILogProps } from "../src/domain/request";
4
- /**
5
- * InMemoryLogDatasource
6
- *
7
- * Implementación **completa** y **visual** para demos, tests e integración.
8
- * Aplica todos los filtros definidos en IGetLogsFilterProps.
9
- */
10
- export declare class InMemoryLogDatasource implements ILogDatasource {
11
- readonly name: string;
12
- private logs;
13
- private idCounter;
14
- constructor(name?: string);
15
- /**
16
- * 🔵 Guarda un log en memoria con un ID incremental.
17
- */
18
- save(log: ILogProps): Promise<void>;
19
- /**
20
- * 🔍 Aplica todos los filtros para recuperar logs:
21
- * - levelMin
22
- * - since / until
23
- * - query
24
- * - limit
25
- * - offset
26
- */
27
- find(filter?: IGetLogsFilterProps): Promise<ILogResponse[]>;
28
- /**
29
- * 🧹 Limpia todos los logs almacenados.
30
- */
31
- flush(): Promise<void>;
32
- /**
33
- * 🗑 Libera recursos (igual que flush, pero preparado para crecer).
34
- */
35
- dispose(): Promise<void>;
36
- }
37
- export declare class LoggerFactoryExample {
38
- static Main(): Promise<void>;
39
- }