@jmlq/logger 0.1.0-alpha.7 → 0.1.0-alpha.9
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 +225 -733
- package/architecture.md +171 -0
- package/dist/examples/data-source-service.example.d.ts +3 -0
- package/dist/examples/data-source-service.example.js +174 -0
- package/dist/examples/flush-buffers-use-case.example.d.ts +3 -0
- package/dist/examples/flush-buffers-use-case.example.js +60 -0
- package/dist/examples/get-logs-use-case.example.d.ts +3 -0
- package/dist/examples/get-logs-use-case.example.js +110 -0
- package/dist/examples/index.example.d.ts +8 -0
- package/dist/examples/index.example.js +116 -0
- package/dist/examples/logger-factory.example.d.ts +39 -0
- package/dist/examples/logger-factory.example.js +158 -0
- package/dist/examples/normalize-message.example.d.ts +3 -0
- package/dist/examples/normalize-message.example.js +80 -0
- package/dist/examples/pii-redactor.example.d.ts +3 -0
- package/dist/examples/pii-redactor.example.js +129 -0
- package/dist/examples/save-log-use-case.example.d.ts +3 -0
- package/dist/examples/save-log-use-case.example.js +150 -0
- package/dist/examples/to-log-level.example.d.ts +3 -0
- package/dist/examples/to-log-level.example.js +49 -0
- package/dist/examples/to-pii-regex.example.d.ts +3 -0
- package/dist/examples/to-pii-regex.example.js +75 -0
- package/dist/{presentation → src/application}/factory/create-logger.d.ts +1 -1
- package/dist/{presentation → src/application}/factory/create-logger.js +3 -3
- package/dist/src/application/factory/index.d.ts +1 -0
- package/dist/{presentation → src/application}/factory/index.js +1 -1
- package/dist/src/application/factory/logger.factory.d.ts +12 -0
- package/dist/src/application/factory/logger.factory.js +74 -0
- package/dist/src/application/index.d.ts +2 -0
- package/dist/src/application/index.js +18 -0
- package/dist/src/application/use-cases/flush-buffers.use-case.d.ts +6 -0
- package/dist/{application/use-cases/flush-buffers.js → src/application/use-cases/flush-buffers.use-case.js} +3 -3
- package/dist/src/application/use-cases/get-logs.use-case.d.ts +8 -0
- package/dist/{application/use-cases/get-logs.js → src/application/use-cases/get-logs.use-case.js} +3 -3
- package/dist/src/application/use-cases/index.d.ts +3 -0
- package/dist/{application → src/application}/use-cases/index.js +3 -3
- package/dist/src/application/use-cases/save-log.use-case.d.ts +8 -0
- package/dist/src/application/use-cases/save-log.use-case.js +26 -0
- package/dist/src/domain/index.d.ts +6 -0
- package/dist/src/domain/index.js +22 -0
- package/dist/src/domain/ports/create-logger-options.port.d.ts +7 -0
- package/dist/src/domain/ports/index.d.ts +6 -0
- package/dist/src/domain/ports/index.js +22 -0
- package/dist/src/domain/ports/log-datasource.port.d.ts +9 -0
- package/dist/src/domain/ports/logger-factory-config.port.d.ts +28 -0
- package/dist/src/domain/ports/logger-service.port.d.ts +19 -0
- package/dist/{domain/contracts/logger.d.ts → src/domain/ports/logger.port.d.ts} +0 -9
- package/dist/src/domain/ports/logger.port.js +2 -0
- package/dist/src/domain/ports/pii-redactor.port.d.ts +5 -0
- package/dist/src/domain/ports/pii-redactor.port.js +2 -0
- package/dist/src/domain/request/get-logs-filter.props.d.ts +9 -0
- package/dist/src/domain/request/get-logs-filter.props.js +2 -0
- package/dist/src/domain/request/index.d.ts +5 -0
- package/dist/src/domain/request/index.js +21 -0
- package/dist/src/domain/request/log.props.d.ts +7 -0
- package/dist/src/domain/request/log.props.js +2 -0
- package/dist/src/domain/request/pii-options.props.d.ts +8 -0
- package/dist/src/domain/request/pii-options.props.js +2 -0
- package/dist/src/domain/request/pii-replacement.props.d.ts +5 -0
- package/dist/src/domain/request/pii-replacement.props.js +2 -0
- package/dist/src/domain/request/save-log.props.d.ts +7 -0
- package/dist/src/domain/request/save-log.props.js +2 -0
- package/dist/src/domain/response/index.d.ts +1 -0
- package/dist/{domain/value-objects → src/domain/response}/index.js +1 -1
- package/dist/src/domain/response/log.response.d.ts +7 -0
- package/dist/src/domain/response/log.response.js +2 -0
- package/dist/src/domain/services/index.d.ts +4 -0
- package/dist/{domain/contracts → src/domain/services}/index.js +4 -3
- package/dist/src/domain/services/log-level.service.d.ts +2 -0
- package/dist/src/domain/services/log-level.service.js +27 -0
- package/dist/src/domain/services/message-normalizer.service.d.ts +3 -0
- package/dist/src/domain/services/message-normalizer.service.js +8 -0
- package/dist/src/domain/services/pii-pattern.service.d.ts +2 -0
- package/dist/src/domain/services/pii-pattern.service.js +13 -0
- package/dist/src/domain/services/pii-redactor.d.ts +10 -0
- package/dist/{domain → src/domain}/services/pii-redactor.js +8 -17
- package/dist/src/domain/services/pii-redactor.service.d.ts +10 -0
- package/dist/src/domain/services/pii-redactor.service.js +68 -0
- package/dist/src/domain/types/index.d.ts +1 -0
- package/dist/src/domain/types/index.js +17 -0
- package/dist/src/domain/types/log-message.type.d.ts +1 -0
- package/dist/src/domain/types/log-message.type.js +2 -0
- package/dist/src/domain/value-objects/index.d.ts +1 -0
- package/dist/{domain/services → src/domain/value-objects}/index.js +1 -1
- package/dist/{domain/value-objects/log-level.d.ts → src/domain/value-objects/log-level.vo.d.ts} +0 -1
- package/dist/src/domain/value-objects/log-level.vo.js +13 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.js +22 -0
- package/dist/src/infrastructure/datasources/in-memory-log.datasource.d.ts +1 -0
- package/dist/src/infrastructure/datasources/in-memory-log.datasource.js +2 -0
- package/dist/src/infrastructure/datasources/index.d.ts +1 -0
- package/dist/{infrastructure/adapters → src/infrastructure/datasources}/index.js +1 -1
- package/dist/src/infrastructure/index.d.ts +1 -0
- package/dist/{domain/types → src/infrastructure}/index.js +1 -1
- package/dist/src/infrastructure/services/data-source-error-handler.type.d.ts +5 -0
- package/dist/src/infrastructure/services/data-source-error-handler.type.js +2 -0
- package/dist/src/infrastructure/services/datasource.service.d.ts +15 -0
- package/dist/src/infrastructure/services/datasource.service.js +63 -0
- package/dist/src/infrastructure/services/index.d.ts +2 -0
- package/dist/src/infrastructure/services/index.js +18 -0
- package/dist/tests/application/factory/logger-factory.spec.d.ts +1 -0
- package/dist/tests/application/factory/logger-factory.spec.js +161 -0
- package/dist/tests/application/use-cases/flush-buffers.use-case.spec.d.ts +1 -0
- package/dist/tests/application/use-cases/flush-buffers.use-case.spec.js +38 -0
- package/dist/tests/application/use-cases/get-logs.use-case.spec.d.ts +1 -0
- package/dist/tests/application/use-cases/get-logs.use-case.spec.js +114 -0
- package/dist/tests/application/use-cases/save-log.use-case.spec.d.ts +1 -0
- package/dist/tests/application/use-cases/save-log.use-case.spec.js +138 -0
- package/dist/tests/domain/services/log-level.service.spec.d.ts +1 -0
- package/dist/tests/domain/services/log-level.service.spec.js +68 -0
- package/dist/tests/domain/services/normalize-message.spec.d.ts +1 -0
- package/dist/tests/domain/services/normalize-message.spec.js +83 -0
- package/dist/tests/domain/services/pii-redactor.spec.d.ts +1 -0
- package/dist/tests/domain/services/pii-redactor.spec.js +170 -0
- package/dist/tests/domain/services/to-pii-regex.spec.d.ts +1 -0
- package/dist/tests/domain/services/to-pii-regex.spec.js +82 -0
- package/dist/tests/infrastructure/services/datasource.service.spec.d.ts +1 -0
- package/dist/tests/infrastructure/services/datasource.service.spec.js +128 -0
- package/dist/tests/test-utils/create-pii-redactor-mock.d.ts +5 -0
- package/dist/tests/test-utils/create-pii-redactor-mock.js +10 -0
- package/install.md +367 -0
- package/package.json +29 -19
- package/LICENSE +0 -21
- package/dist/application/use-cases/flush-buffers.d.ts +0 -6
- package/dist/application/use-cases/get-logs.d.ts +0 -7
- package/dist/application/use-cases/index.d.ts +0 -3
- package/dist/application/use-cases/save-log.d.ts +0 -13
- package/dist/application/use-cases/save-log.js +0 -30
- package/dist/domain/contracts/index.d.ts +0 -3
- package/dist/domain/contracts/log.datasource.d.ts +0 -8
- package/dist/domain/contracts/pii.d.ts +0 -5
- package/dist/domain/services/index.d.ts +0 -1
- package/dist/domain/services/pii-redactor.d.ts +0 -10
- package/dist/domain/types/index.d.ts +0 -1
- package/dist/domain/types/log.types.d.ts +0 -28
- package/dist/domain/value-objects/index.d.ts +0 -1
- package/dist/domain/value-objects/log-level.js +0 -37
- package/dist/index.d.ts +0 -5
- package/dist/index.js +0 -10
- package/dist/infrastructure/adapters/composite.datasource.d.ts +0 -11
- package/dist/infrastructure/adapters/composite.datasource.js +0 -46
- package/dist/infrastructure/adapters/index.d.ts +0 -1
- package/dist/presentation/factory/index.d.ts +0 -1
- /package/dist/{domain/contracts/log.datasource.js → src/domain/ports/create-logger-options.port.js} +0 -0
- /package/dist/{domain/contracts/logger.js → src/domain/ports/log-datasource.port.js} +0 -0
- /package/dist/{domain/contracts/pii.js → src/domain/ports/logger-factory-config.port.js} +0 -0
- /package/dist/{domain/types/log.types.js → src/domain/ports/logger-service.port.js} +0 -0
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { ILogDatasource, IPiiRedactor } from "../../domain/contracts";
|
|
2
|
-
import { LogMessage } from "../../domain/types";
|
|
3
|
-
import { LogLevel } from "../../domain/value-objects";
|
|
4
|
-
export interface SaveLogDeps {
|
|
5
|
-
ds: ILogDatasource;
|
|
6
|
-
minLevel: LogLevel;
|
|
7
|
-
redactor: IPiiRedactor;
|
|
8
|
-
}
|
|
9
|
-
export declare class SaveLog {
|
|
10
|
-
private readonly deps;
|
|
11
|
-
constructor(deps: SaveLogDeps);
|
|
12
|
-
execute(level: LogLevel, message: LogMessage, meta?: unknown): Promise<void>;
|
|
13
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SaveLog = void 0;
|
|
4
|
-
// Normaliza el mensaje: si es función, la evalúa; si es objeto, se redacta; si es string, se redacta
|
|
5
|
-
function normalizeMessage(message, redactor) {
|
|
6
|
-
const resolved = typeof message === "function" ? message() : message; // eval laziness
|
|
7
|
-
return redactor.redact(resolved);
|
|
8
|
-
}
|
|
9
|
-
class SaveLog {
|
|
10
|
-
constructor(deps) {
|
|
11
|
-
this.deps = deps;
|
|
12
|
-
}
|
|
13
|
-
async execute(level, message, meta) {
|
|
14
|
-
// 1) Filtro por nivel (evita hacer trabajo innecesario)
|
|
15
|
-
if (level < this.deps.minLevel)
|
|
16
|
-
return; // no se loggea
|
|
17
|
-
// 2) Normalización + PII
|
|
18
|
-
const normalized = normalizeMessage(message, this.deps.redactor);
|
|
19
|
-
// 3) Construcción del evento
|
|
20
|
-
const log = {
|
|
21
|
-
level,
|
|
22
|
-
message: normalized,
|
|
23
|
-
meta: meta === undefined ? undefined : this.deps.redactor.redact(meta),
|
|
24
|
-
timestamp: Date.now(),
|
|
25
|
-
};
|
|
26
|
-
// 4) Persistencia (fan-out lo maneja el ds si es composite)
|
|
27
|
-
await this.deps.ds.save(log);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
exports.SaveLog = SaveLog;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./pii-redactor";
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { IPiiRedactor } from "../contracts";
|
|
2
|
-
import { PiiOptions } from "../types";
|
|
3
|
-
export declare class PiiRedactor implements IPiiRedactor {
|
|
4
|
-
private options;
|
|
5
|
-
constructor(options?: PiiOptions);
|
|
6
|
-
updateOptions(opts: PiiOptions): void;
|
|
7
|
-
redact<T = unknown>(value: T): T;
|
|
8
|
-
private applyPatterns;
|
|
9
|
-
private redactDeep;
|
|
10
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./log.types";
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { LogLevel } from "../value-objects";
|
|
2
|
-
export type LogMessage = string | Record<string, unknown> | (() => string | Record<string, unknown>);
|
|
3
|
-
export interface ILog {
|
|
4
|
-
level: LogLevel;
|
|
5
|
-
message: string | Record<string, unknown>;
|
|
6
|
-
meta?: unknown;
|
|
7
|
-
timestamp: number;
|
|
8
|
-
}
|
|
9
|
-
export interface IGetLogsFilter {
|
|
10
|
-
levelMin?: LogLevel;
|
|
11
|
-
since?: number;
|
|
12
|
-
until?: number;
|
|
13
|
-
limit?: number;
|
|
14
|
-
offset?: number;
|
|
15
|
-
query?: string;
|
|
16
|
-
}
|
|
17
|
-
export interface PiiReplacement {
|
|
18
|
-
pattern: string;
|
|
19
|
-
flags?: string;
|
|
20
|
-
replaceWith: string;
|
|
21
|
-
}
|
|
22
|
-
export interface PiiOptions {
|
|
23
|
-
enabled?: boolean;
|
|
24
|
-
whitelistKeys?: string[];
|
|
25
|
-
blacklistKeys?: string[];
|
|
26
|
-
patterns?: PiiReplacement[];
|
|
27
|
-
deep?: boolean;
|
|
28
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./log-level";
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LogLevel = void 0;
|
|
4
|
-
exports.toLogLevel = toLogLevel;
|
|
5
|
-
var LogLevel;
|
|
6
|
-
(function (LogLevel) {
|
|
7
|
-
// Orden creciente permite comparar por severidad (trace < debug < ...)
|
|
8
|
-
LogLevel[LogLevel["TRACE"] = 10] = "TRACE";
|
|
9
|
-
LogLevel[LogLevel["DEBUG"] = 20] = "DEBUG";
|
|
10
|
-
LogLevel[LogLevel["INFO"] = 30] = "INFO";
|
|
11
|
-
LogLevel[LogLevel["WARN"] = 40] = "WARN";
|
|
12
|
-
LogLevel[LogLevel["ERROR"] = 50] = "ERROR";
|
|
13
|
-
LogLevel[LogLevel["FATAL"] = 60] = "FATAL";
|
|
14
|
-
})(LogLevel || (exports.LogLevel = LogLevel = {}));
|
|
15
|
-
// Convierte string a LogLevel con fallback seguro
|
|
16
|
-
function toLogLevel(level, def = LogLevel.INFO) {
|
|
17
|
-
if (typeof level === "number")
|
|
18
|
-
return (Object.values(LogLevel).includes(level) ? level : def);
|
|
19
|
-
if (!level)
|
|
20
|
-
return def;
|
|
21
|
-
switch (String(level).toLowerCase()) {
|
|
22
|
-
case "trace":
|
|
23
|
-
return LogLevel.TRACE;
|
|
24
|
-
case "debug":
|
|
25
|
-
return LogLevel.DEBUG;
|
|
26
|
-
case "info":
|
|
27
|
-
return LogLevel.INFO;
|
|
28
|
-
case "warn":
|
|
29
|
-
return LogLevel.WARN;
|
|
30
|
-
case "error":
|
|
31
|
-
return LogLevel.ERROR;
|
|
32
|
-
case "fatal":
|
|
33
|
-
return LogLevel.FATAL;
|
|
34
|
-
default:
|
|
35
|
-
return def; // evita lanzar excepción por valores inesperados
|
|
36
|
-
}
|
|
37
|
-
}
|
package/dist/index.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export { LogLevel, toLogLevel } from "./domain/value-objects";
|
|
2
|
-
export type { LogMessage, ILog, IGetLogsFilter, PiiOptions, PiiReplacement, } from "./domain/types";
|
|
3
|
-
export type { LogDatasourcePort, ILogger, ICreateLoggerOptions, ILogDatasource, } from "./domain/contracts";
|
|
4
|
-
export { createLogger } from "./presentation/factory";
|
|
5
|
-
export { CompositeDatasource } from "./infrastructure/adapters";
|
package/dist/index.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CompositeDatasource = exports.createLogger = exports.toLogLevel = exports.LogLevel = void 0;
|
|
4
|
-
var value_objects_1 = require("./domain/value-objects");
|
|
5
|
-
Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return value_objects_1.LogLevel; } });
|
|
6
|
-
Object.defineProperty(exports, "toLogLevel", { enumerable: true, get: function () { return value_objects_1.toLogLevel; } });
|
|
7
|
-
var factory_1 = require("./presentation/factory");
|
|
8
|
-
Object.defineProperty(exports, "createLogger", { enumerable: true, get: function () { return factory_1.createLogger; } });
|
|
9
|
-
var adapters_1 = require("./infrastructure/adapters");
|
|
10
|
-
Object.defineProperty(exports, "CompositeDatasource", { enumerable: true, get: function () { return adapters_1.CompositeDatasource; } });
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { ILogDatasource } from "../../domain/contracts";
|
|
2
|
-
import { IGetLogsFilter, ILog } from "../../domain/types";
|
|
3
|
-
export declare class CompositeDatasource implements ILogDatasource {
|
|
4
|
-
private readonly targets;
|
|
5
|
-
readonly name = "composite";
|
|
6
|
-
constructor(targets: ILogDatasource[]);
|
|
7
|
-
save(log: ILog): Promise<void>;
|
|
8
|
-
find(filter?: IGetLogsFilter): Promise<ILog[]>;
|
|
9
|
-
flush(): Promise<void>;
|
|
10
|
-
dispose(): Promise<void>;
|
|
11
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CompositeDatasource = void 0;
|
|
4
|
-
// CompositeDatasource: fan-out hacia múltiples datasources
|
|
5
|
-
class CompositeDatasource {
|
|
6
|
-
constructor(targets) {
|
|
7
|
-
this.targets = targets;
|
|
8
|
-
this.name = "composite";
|
|
9
|
-
// Filtro targets válidos (defensivo). Evita null/undefined
|
|
10
|
-
this.targets = (targets ?? []).filter(Boolean);
|
|
11
|
-
}
|
|
12
|
-
async save(log) {
|
|
13
|
-
// Ejecuta todos en paralelo y NO falla el todo si uno falla
|
|
14
|
-
const results = await Promise.allSettled(this.targets.map((ds) => ds.save(log)));
|
|
15
|
-
// Log de errores silencioso (el logger real no debe auto-dependerse)
|
|
16
|
-
for (let i = 0; i < results.length; i++) {
|
|
17
|
-
const r = results[i];
|
|
18
|
-
if (r.status === "rejected") {
|
|
19
|
-
// Preferible: exponer un hook externo; aquí solo console.warn por simplicidad
|
|
20
|
-
// eslint-disable-next-line no-console
|
|
21
|
-
console.warn(`[CompositeDatasource] save error in ds#${i} (${this.targets[i]?.name ?? "unknown"})`, r.reason);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
async find(filter) {
|
|
26
|
-
// Si varios ds soportan find, se concatena y ordena por timestamp desc
|
|
27
|
-
const results = await Promise.allSettled(this.targets.map((ds) => ds.find?.(filter)));
|
|
28
|
-
const logs = [];
|
|
29
|
-
for (const r of results) {
|
|
30
|
-
if (r.status === "fulfilled" && Array.isArray(r.value))
|
|
31
|
-
logs.push(...r.value);
|
|
32
|
-
}
|
|
33
|
-
// Orden descendente por timestamp (más recientes primero)
|
|
34
|
-
logs.sort((a, b) => b.timestamp - a.timestamp);
|
|
35
|
-
return logs;
|
|
36
|
-
}
|
|
37
|
-
async flush() {
|
|
38
|
-
// Ejecuta flush donde esté disponible
|
|
39
|
-
await Promise.allSettled(this.targets.map((ds) => ds.flush?.()));
|
|
40
|
-
}
|
|
41
|
-
async dispose() {
|
|
42
|
-
// Libera recursos en todos los ds
|
|
43
|
-
await Promise.allSettled(this.targets.map((ds) => ds.dispose?.()));
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
exports.CompositeDatasource = CompositeDatasource;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./composite.datasource";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./create-logger";
|
/package/dist/{domain/contracts/log.datasource.js → src/domain/ports/create-logger-options.port.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|