scribelog 1.2.0 → 2.1.0-beta.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 (53) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +419 -180
  3. package/dist/adapters/express.d.ts +17 -0
  4. package/dist/adapters/express.js +56 -0
  5. package/dist/adapters/express.js.map +1 -0
  6. package/dist/adapters/fastify.d.ts +17 -0
  7. package/dist/adapters/fastify.js +81 -0
  8. package/dist/adapters/fastify.js.map +1 -0
  9. package/dist/adapters/koa.d.ts +17 -0
  10. package/dist/adapters/koa.js +74 -0
  11. package/dist/adapters/koa.js.map +1 -0
  12. package/dist/adapters/nest.d.ts +16 -0
  13. package/dist/adapters/nest.js +78 -0
  14. package/dist/adapters/nest.js.map +1 -0
  15. package/dist/adapters/next.d.ts +14 -0
  16. package/dist/adapters/next.js +54 -0
  17. package/dist/adapters/next.js.map +1 -0
  18. package/dist/format.d.ts +6 -0
  19. package/dist/format.js +56 -1
  20. package/dist/format.js.map +1 -1
  21. package/dist/index.d.ts +45 -0
  22. package/dist/index.js +33 -2
  23. package/dist/index.js.map +1 -1
  24. package/dist/logger.d.ts +8 -0
  25. package/dist/logger.js +97 -1
  26. package/dist/logger.js.map +1 -1
  27. package/dist/requestContext.d.ts +10 -0
  28. package/dist/requestContext.js +33 -0
  29. package/dist/requestContext.js.map +1 -0
  30. package/dist/transports/asyncBatch.d.ts +24 -0
  31. package/dist/transports/asyncBatch.js +57 -0
  32. package/dist/transports/asyncBatch.js.map +1 -0
  33. package/dist/transports/http.d.ts +27 -0
  34. package/dist/transports/http.js +117 -0
  35. package/dist/transports/http.js.map +1 -0
  36. package/dist/transports/mongodb.d.ts +19 -0
  37. package/dist/transports/mongodb.js +51 -0
  38. package/dist/transports/mongodb.js.map +1 -0
  39. package/dist/transports/sql.d.ts +22 -0
  40. package/dist/transports/sql.js +56 -0
  41. package/dist/transports/sql.js.map +1 -0
  42. package/dist/transports/tcp.d.ts +22 -0
  43. package/dist/transports/tcp.js +111 -0
  44. package/dist/transports/tcp.js.map +1 -0
  45. package/dist/transports/udp.d.ts +18 -0
  46. package/dist/transports/udp.js +75 -0
  47. package/dist/transports/udp.js.map +1 -0
  48. package/dist/transports/websocket.d.ts +21 -0
  49. package/dist/transports/websocket.js +110 -0
  50. package/dist/transports/websocket.js.map +1 -0
  51. package/dist/types.d.ts +7 -0
  52. package/dist/types.js.map +1 -1
  53. package/package.json +75 -70
@@ -0,0 +1,19 @@
1
+ import type { Transport, LogLevel, LogFormat } from '../types';
2
+ export interface MongoDBTransportOptions {
3
+ uri: string;
4
+ dbName: string;
5
+ collection: string;
6
+ level?: LogLevel;
7
+ format?: LogFormat;
8
+ clientOptions?: object;
9
+ }
10
+ export declare class MongoDBTransport implements Transport {
11
+ level?: LogLevel;
12
+ format?: LogFormat;
13
+ private client;
14
+ private collection;
15
+ private ready;
16
+ constructor(options: MongoDBTransportOptions);
17
+ log(entry: Record<string, any> | string): Promise<void>;
18
+ close(): Promise<void>;
19
+ }
@@ -0,0 +1,51 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.MongoDBTransport = void 0;
13
+ class MongoDBTransport {
14
+ constructor(options) {
15
+ var _a;
16
+ this.level = options.level;
17
+ this.format = options.format;
18
+ // Lazy load, aby uniknąć błędu "Cannot find module 'mongodb'" w czasie kompilacji
19
+ const { MongoClient } = require('mongodb');
20
+ this.client = new MongoClient(options.uri, (_a = options.clientOptions) !== null && _a !== void 0 ? _a : {});
21
+ this.ready = this.client.connect().then(() => {
22
+ const db = this.client.db(options.dbName);
23
+ this.collection = db.collection(options.collection);
24
+ });
25
+ }
26
+ log(entry) {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ yield this.ready;
29
+ let doc;
30
+ if (typeof entry === 'string') {
31
+ doc = { message: entry };
32
+ }
33
+ else {
34
+ doc = Object.assign({}, entry);
35
+ if (doc.timestamp instanceof Date) {
36
+ doc.timestamp = doc.timestamp.toISOString();
37
+ }
38
+ }
39
+ yield this.collection.insertOne(doc);
40
+ });
41
+ }
42
+ close() {
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ if (this.client && typeof this.client.close === 'function') {
45
+ yield this.client.close();
46
+ }
47
+ });
48
+ }
49
+ }
50
+ exports.MongoDBTransport = MongoDBTransport;
51
+ //# sourceMappingURL=mongodb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb.js","sourceRoot":"","sources":["../../src/transports/mongodb.ts"],"names":[],"mappings":";;;;;;;;;;;;AAWA,MAAa,gBAAgB;IAO3B,YAAY,OAAgC;;QAC1C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE7B,kFAAkF;QAClF,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAE3C,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,MAAA,OAAO,CAAC,aAAa,mCAAI,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;IAEK,GAAG,CAAC,KAAmC;;YAC3C,MAAM,IAAI,CAAC,KAAK,CAAC;YAEjB,IAAI,GAAwB,CAAC;YAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,GAAG,qBAAQ,KAAK,CAAE,CAAC;gBACnB,IAAI,GAAG,CAAC,SAAS,YAAY,IAAI,EAAE,CAAC;oBAClC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;gBAC9C,CAAC;YACH,CAAC;YAED,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;KAAA;IAEK,KAAK;;YACT,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC3D,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC;KAAA;CACF;AA1CD,4CA0CC"}
@@ -0,0 +1,22 @@
1
+ import type { Transport, LogLevel, LogFormat } from '../types';
2
+ /**
3
+ * Przykładowy transport do bazy SQL (PostgreSQL, SQLite, MySQL).
4
+ * Użytkownik powinien przekazać instancję klienta (np. pg.Pool, sqlite3.Database, itp.)
5
+ */
6
+ export interface SQLTransportOptions {
7
+ client: any;
8
+ insertQuery: string;
9
+ level?: LogLevel;
10
+ format?: LogFormat;
11
+ mapLogToParams?: (log: Record<string, any> | string) => any[];
12
+ }
13
+ export declare class SQLTransport implements Transport {
14
+ level?: LogLevel;
15
+ format?: LogFormat;
16
+ private client;
17
+ private insertQuery;
18
+ private mapLogToParams;
19
+ constructor(options: SQLTransportOptions);
20
+ log(entry: Record<string, any> | string): Promise<void>;
21
+ close(): Promise<void>;
22
+ }
@@ -0,0 +1,56 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SQLTransport = void 0;
13
+ class SQLTransport {
14
+ constructor(options) {
15
+ this.level = options.level;
16
+ this.format = options.format;
17
+ this.client = options.client;
18
+ this.insertQuery = options.insertQuery;
19
+ this.mapLogToParams =
20
+ options.mapLogToParams ||
21
+ ((log) => [
22
+ typeof log === 'object' ? log.level : null,
23
+ typeof log === 'object' ? log.message : String(log),
24
+ typeof log === 'object' && log.timestamp instanceof Date
25
+ ? log.timestamp.toISOString()
26
+ : null,
27
+ JSON.stringify(log),
28
+ ]);
29
+ }
30
+ log(entry) {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ const params = this.mapLogToParams(entry);
33
+ // Przykład dla pg (PostgreSQL)
34
+ if (typeof this.client.query === 'function') {
35
+ yield this.client.query(this.insertQuery, params);
36
+ }
37
+ else if (typeof this.client.run === 'function') {
38
+ // Przykład dla sqlite3
39
+ yield new Promise((resolve, reject) => this.client.run(this.insertQuery, params, (err) => err ? reject(err) : resolve(undefined)));
40
+ }
41
+ // Dodaj inne silniki wg potrzeb
42
+ });
43
+ }
44
+ close() {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ if (typeof this.client.end === 'function') {
47
+ yield this.client.end();
48
+ }
49
+ if (typeof this.client.close === 'function') {
50
+ yield this.client.close();
51
+ }
52
+ });
53
+ }
54
+ }
55
+ exports.SQLTransport = SQLTransport;
56
+ //# sourceMappingURL=sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/transports/sql.ts"],"names":[],"mappings":";;;;;;;;;;;;AAcA,MAAa,YAAY;IAOvB,YAAY,OAA4B;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,cAAc;YACjB,OAAO,CAAC,cAAc;gBACtB,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;oBACR,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;oBAC1C,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;oBACnD,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,YAAY,IAAI;wBACtD,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;wBAC7B,CAAC,CAAC,IAAI;oBACR,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;iBACpB,CAAC,CAAC;IACP,CAAC;IAEK,GAAG,CAAC,KAAmC;;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC1C,+BAA+B;YAC/B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC5C,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACpD,CAAC;iBAAM,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;gBACjD,uBAAuB;gBACvB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,GAAQ,EAAE,EAAE,CACrD,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CACvC,CACF,CAAC;YACJ,CAAC;YACD,gCAAgC;QAClC,CAAC;KAAA;IAEK,KAAK;;YACT,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;gBAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAC1B,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC5C,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC;KAAA;CACF;AAhDD,oCAgDC"}
@@ -0,0 +1,22 @@
1
+ import type { Transport, LogLevel, LogFormat } from '../types';
2
+ export interface TcpTransportOptions {
3
+ host: string;
4
+ port: number;
5
+ level?: LogLevel;
6
+ format?: LogFormat;
7
+ reconnect?: boolean;
8
+ }
9
+ export declare class TcpTransport implements Transport {
10
+ level?: LogLevel;
11
+ format?: LogFormat;
12
+ private socket;
13
+ private queue;
14
+ private connected;
15
+ private reconnect;
16
+ private host;
17
+ private port;
18
+ constructor(options: TcpTransportOptions);
19
+ private attachHandlers;
20
+ log(processedEntry: Record<string, any> | string): void;
21
+ close(): void;
22
+ }
@@ -0,0 +1,111 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TcpTransport = void 0;
37
+ const net = __importStar(require("net"));
38
+ const format = __importStar(require("../format"));
39
+ class TcpTransport {
40
+ constructor(options) {
41
+ var _a;
42
+ this.queue = [];
43
+ this.connected = false;
44
+ this.level = options.level;
45
+ this.format = options.format || format.defaultJsonFormat;
46
+ this.reconnect = (_a = options.reconnect) !== null && _a !== void 0 ? _a : true;
47
+ this.host = options.host;
48
+ this.port = options.port;
49
+ this.socket = new net.Socket();
50
+ this.attachHandlers();
51
+ this.socket.connect(this.port, this.host);
52
+ }
53
+ attachHandlers() {
54
+ this.socket.on('connect', () => {
55
+ this.connected = true;
56
+ // flush queue
57
+ for (const line of this.queue)
58
+ this.socket.write(line + '\n');
59
+ this.queue.length = 0;
60
+ });
61
+ this.socket.on('error', (err) => {
62
+ console.error('[scribelog] TcpTransport error:', err);
63
+ });
64
+ this.socket.on('close', () => {
65
+ this.connected = false;
66
+ if (this.reconnect) {
67
+ setTimeout(() => {
68
+ try {
69
+ this.socket.connect(this.port, this.host);
70
+ }
71
+ catch (_a) {
72
+ /* noop */
73
+ }
74
+ }, 500);
75
+ }
76
+ });
77
+ }
78
+ log(processedEntry) {
79
+ let line;
80
+ if (typeof processedEntry === 'string') {
81
+ line = processedEntry;
82
+ }
83
+ else {
84
+ const out = (this.format || format.defaultJsonFormat)(processedEntry);
85
+ line = typeof out === 'string' ? out : JSON.stringify(out);
86
+ }
87
+ if (this.connected) {
88
+ try {
89
+ this.socket.write(line + '\n');
90
+ }
91
+ catch (e) {
92
+ console.error('[scribelog] TcpTransport write error:', e);
93
+ }
94
+ }
95
+ else {
96
+ this.queue.push(line);
97
+ }
98
+ }
99
+ close() {
100
+ try {
101
+ this.reconnect = false;
102
+ this.socket.end();
103
+ this.socket.destroy();
104
+ }
105
+ catch (_a) {
106
+ /* noop */
107
+ }
108
+ }
109
+ }
110
+ exports.TcpTransport = TcpTransport;
111
+ //# sourceMappingURL=tcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../src/transports/tcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Transport, LogLevel, LogFormat } from '../types';
2
+ export interface UdpTransportOptions {
3
+ host: string;
4
+ port: number;
5
+ type?: 'udp4' | 'udp6';
6
+ level?: LogLevel;
7
+ format?: LogFormat;
8
+ }
9
+ export declare class UdpTransport implements Transport {
10
+ level?: LogLevel;
11
+ format?: LogFormat;
12
+ private socket;
13
+ private host;
14
+ private port;
15
+ constructor(options: UdpTransportOptions);
16
+ log(processedEntry: Record<string, any> | string): void;
17
+ close(): void;
18
+ }
@@ -0,0 +1,75 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.UdpTransport = void 0;
37
+ const dgram = __importStar(require("dgram"));
38
+ const format = __importStar(require("../format"));
39
+ class UdpTransport {
40
+ constructor(options) {
41
+ this.level = options.level;
42
+ this.format = options.format || format.defaultJsonFormat;
43
+ this.host = options.host;
44
+ this.port = options.port;
45
+ this.socket = dgram.createSocket(options.type || 'udp4');
46
+ this.socket.on('error', (err) => {
47
+ console.error('[scribelog] UdpTransport socket error:', err);
48
+ });
49
+ }
50
+ log(processedEntry) {
51
+ let payload;
52
+ if (typeof processedEntry === 'string') {
53
+ payload = Buffer.from(processedEntry);
54
+ }
55
+ else {
56
+ const out = (this.format || format.defaultJsonFormat)(processedEntry);
57
+ const str = typeof out === 'string' ? out : JSON.stringify(out);
58
+ payload = Buffer.from(str);
59
+ }
60
+ this.socket.send(payload, this.port, this.host, (err) => {
61
+ if (err)
62
+ console.error('[scribelog] UdpTransport send error:', err);
63
+ });
64
+ }
65
+ close() {
66
+ try {
67
+ this.socket.close();
68
+ }
69
+ catch (_a) {
70
+ /* noop */
71
+ }
72
+ }
73
+ }
74
+ exports.UdpTransport = UdpTransport;
75
+ //# sourceMappingURL=udp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"udp.js","sourceRoot":"","sources":["../../src/transports/udp.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6CAA+B;AAC/B,kDAAoC;AAUpC,MAAa,YAAY;IAQvB,YAAY,OAA4B;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,iBAAiB,CAAC;QACzD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,cAA4C;QAC9C,IAAI,OAAe,CAAC;QACpB,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,CAAC;YACtE,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAChE,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;YACtD,IAAI,GAAG;gBAAE,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;QAAC,WAAM,CAAC;YACP,UAAU;QACZ,CAAC;IACH,CAAC;CACF;AAxCD,oCAwCC"}
@@ -0,0 +1,21 @@
1
+ import type { Transport, LogLevel, LogFormat } from '../types';
2
+ export interface WebSocketTransportOptions {
3
+ url: string;
4
+ protocols?: string | string[];
5
+ clientOptions?: any;
6
+ level?: LogLevel;
7
+ format?: LogFormat;
8
+ queueMax?: number;
9
+ }
10
+ export declare class WebSocketTransport implements Transport {
11
+ level?: LogLevel;
12
+ format?: LogFormat;
13
+ private ws;
14
+ private ready;
15
+ private queue;
16
+ private queueMax;
17
+ private WSClass;
18
+ constructor(options: WebSocketTransportOptions);
19
+ log(processedEntry: Record<string, any> | string): void;
20
+ close(): void;
21
+ }
@@ -0,0 +1,110 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.WebSocketTransport = void 0;
37
+ const format = __importStar(require("../format"));
38
+ class WebSocketTransport {
39
+ constructor(options) {
40
+ var _a;
41
+ this.ready = false;
42
+ this.queue = [];
43
+ this.level = options.level;
44
+ this.format = options.format || format.defaultJsonFormat;
45
+ this.queueMax = (_a = options.queueMax) !== null && _a !== void 0 ? _a : 1000;
46
+ try {
47
+ // Lazy load (unikanie błędów gdy 'ws' nie jest zainstalowany)
48
+ this.WSClass = require('ws');
49
+ }
50
+ catch (_b) {
51
+ console.error('[scribelog] WebSocketTransport requires "ws" package. Please install it: npm i ws');
52
+ this.WSClass = null;
53
+ }
54
+ if (this.WSClass) {
55
+ this.ws = new this.WSClass(options.url, options.protocols, options.clientOptions);
56
+ this.ws.on('open', () => {
57
+ this.ready = true;
58
+ // Wyślij zaległą kolejkę
59
+ for (const msg of this.queue)
60
+ this.ws.send(msg);
61
+ this.queue.length = 0;
62
+ });
63
+ this.ws.on('error', (err) => {
64
+ console.error('[scribelog] WebSocketTransport error:', err);
65
+ });
66
+ this.ws.on('close', () => {
67
+ this.ready = false;
68
+ });
69
+ }
70
+ }
71
+ log(processedEntry) {
72
+ if (!this.WSClass || !this.ws)
73
+ return;
74
+ let payload;
75
+ if (typeof processedEntry === 'string') {
76
+ payload = processedEntry;
77
+ }
78
+ else {
79
+ const out = (this.format || format.defaultJsonFormat)(processedEntry);
80
+ payload = typeof out === 'string' ? out : JSON.stringify(out);
81
+ }
82
+ if (this.ready) {
83
+ try {
84
+ this.ws.send(payload);
85
+ }
86
+ catch (e) {
87
+ console.error('[scribelog] WebSocketTransport send error:', e);
88
+ }
89
+ }
90
+ else {
91
+ if (this.queue.length < this.queueMax) {
92
+ this.queue.push(payload);
93
+ }
94
+ else {
95
+ console.warn('[scribelog] WebSocketTransport queue full, dropping log');
96
+ }
97
+ }
98
+ }
99
+ close() {
100
+ var _a;
101
+ try {
102
+ (_a = this.ws) === null || _a === void 0 ? void 0 : _a.close();
103
+ }
104
+ catch (_b) {
105
+ /* noop */
106
+ }
107
+ }
108
+ }
109
+ exports.WebSocketTransport = WebSocketTransport;
110
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/transports/websocket.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -5,6 +5,7 @@ export interface LogInfo {
5
5
  message: any;
6
6
  timestamp: Date;
7
7
  splat?: any[];
8
+ tags?: string[];
8
9
  [key: string]: any;
9
10
  }
10
11
  /**
@@ -58,6 +59,12 @@ interface BaseLoggerInterface {
58
59
  addTransport(transport: Transport): void;
59
60
  removeExceptionHandlers?(): void;
60
61
  child(defaultMeta: Record<string, any>): LoggerInterface;
62
+ profile(label: string, meta?: Record<string, any>): void;
63
+ profileEnd(label: string, meta?: Record<string, any>): void;
64
+ time(label: string, meta?: Record<string, any>): void;
65
+ timeEnd(label: string, meta?: Record<string, any>): void;
66
+ timeSync<T>(label: string, fn: () => T, meta?: Record<string, any>): T;
67
+ timeAsync<T>(label: string, fn: () => Promise<T>, meta?: Record<string, any>): Promise<T>;
61
68
  }
62
69
  type LogLevelMethods = {
63
70
  [level: string]: (message: any, ...args: any[]) => void;
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;AAuGA,wBAAwB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;AAuHA,wBAAwB"}