@jmlq/logger 0.1.0-alpha.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.
@@ -0,0 +1,9 @@
1
+ import { GetLogsFilter, ILogDatasource, Log } from "..";
2
+ export declare class CompositeDatasource implements ILogDatasource {
3
+ private readonly datasources;
4
+ constructor(datasources: ILogDatasource[]);
5
+ save(log: Log): Promise<void>;
6
+ find(filter?: GetLogsFilter): Promise<Log[]>;
7
+ flush(): Promise<void>;
8
+ dispose(): Promise<void>;
9
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CompositeDatasource = void 0;
4
+ // ---- Composite fan-out ----
5
+ class CompositeDatasource {
6
+ constructor(datasources) {
7
+ this.datasources = datasources;
8
+ }
9
+ async save(log) {
10
+ await Promise.allSettled(this.datasources.map((ds) => ds.save(log)));
11
+ }
12
+ async find(filter = {}) {
13
+ const primary = this.datasources[0];
14
+ return (await primary?.find?.(filter)) ?? [];
15
+ }
16
+ async flush() {
17
+ await Promise.all(this.datasources.map((ds) => ds.flush?.() ?? Promise.resolve()));
18
+ }
19
+ async dispose() {
20
+ await Promise.all(this.datasources.map((ds) => ds.dispose?.() ?? Promise.resolve()));
21
+ }
22
+ }
23
+ exports.CompositeDatasource = CompositeDatasource;
@@ -0,0 +1,5 @@
1
+ import { ILogDatasource, Logger, LogLevel } from "..";
2
+ export declare function createLogger(ds: ILogDatasource, opts: {
3
+ minLevel: LogLevel;
4
+ redactPII?: boolean;
5
+ }): Logger;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLogger = createLogger;
4
+ const __1 = require("..");
5
+ function createLogger(ds, opts) {
6
+ const write = async (level, message, meta) => {
7
+ if (level < opts.minLevel)
8
+ return;
9
+ // (Opcional) redactor PII aquí si opts.redactPII === true
10
+ await ds.save({ level, message, meta, timestamp: Date.now() });
11
+ };
12
+ const logger = {
13
+ trace: (m, meta) => write(__1.LogLevel.TRACE, m, meta),
14
+ debug: (m, meta) => write(__1.LogLevel.DEBUG, m, meta),
15
+ info: (m, meta) => write(__1.LogLevel.INFO, m, meta),
16
+ warn: (m, meta) => write(__1.LogLevel.WARN, m, meta),
17
+ error: (m, meta) => write(__1.LogLevel.ERROR, m, meta),
18
+ fatal: (m, meta) => write(__1.LogLevel.FATAL, m, meta),
19
+ flush: () => ds.flush?.() ?? Promise.resolve(),
20
+ dispose: () => ds.dispose?.() ?? Promise.resolve(),
21
+ };
22
+ return logger;
23
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./interfaces";
2
+ export * from "./Factory";
3
+ export * from "./Composite";
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./interfaces"), exports);
18
+ __exportStar(require("./Factory"), exports);
19
+ __exportStar(require("./Composite"), exports);
@@ -0,0 +1,35 @@
1
+ export declare enum LogLevel {
2
+ TRACE = 0,
3
+ DEBUG = 1,
4
+ INFO = 2,
5
+ WARN = 3,
6
+ ERROR = 4,
7
+ FATAL = 5
8
+ }
9
+ export interface Log {
10
+ level: LogLevel;
11
+ message: string;
12
+ meta?: unknown;
13
+ timestamp: number;
14
+ }
15
+ export interface GetLogsFilter {
16
+ levelMin?: LogLevel;
17
+ since?: number;
18
+ until?: number;
19
+ }
20
+ export interface ILogDatasource {
21
+ save(log: Log): Promise<void>;
22
+ find?(filter?: GetLogsFilter): Promise<Log[]>;
23
+ flush?(): Promise<void>;
24
+ dispose?(): Promise<void>;
25
+ }
26
+ export interface Logger {
27
+ trace: (msg: string, meta?: unknown) => Promise<void>;
28
+ debug: (msg: string, meta?: unknown) => Promise<void>;
29
+ info: (msg: string, meta?: unknown) => Promise<void>;
30
+ warn: (msg: string, meta?: unknown) => Promise<void>;
31
+ error: (msg: string, meta?: unknown) => Promise<void>;
32
+ fatal: (msg: string, meta?: unknown) => Promise<void>;
33
+ flush?: () => Promise<void>;
34
+ dispose?: () => Promise<void>;
35
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LogLevel = void 0;
4
+ // ---- Types & contratos ----
5
+ var LogLevel;
6
+ (function (LogLevel) {
7
+ LogLevel[LogLevel["TRACE"] = 0] = "TRACE";
8
+ LogLevel[LogLevel["DEBUG"] = 1] = "DEBUG";
9
+ LogLevel[LogLevel["INFO"] = 2] = "INFO";
10
+ LogLevel[LogLevel["WARN"] = 3] = "WARN";
11
+ LogLevel[LogLevel["ERROR"] = 4] = "ERROR";
12
+ LogLevel[LogLevel["FATAL"] = 5] = "FATAL";
13
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@jmlq/logger",
3
+ "version": "0.1.0-alpha.0",
4
+ "author": "MLahuasi",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsc -p tsconfig.json",
12
+ "prepublishOnly": "pnpm build"
13
+ },
14
+ "devDependencies": {
15
+ "@types/node": "^24.3.0",
16
+ "tsx": "^4.20.5",
17
+ "typescript": "^5.9.2"
18
+ }
19
+ }