@hamak/logging-impl 0.4.1

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 (57) hide show
  1. package/dist/core/context-logger.d.ts +26 -0
  2. package/dist/core/context-logger.d.ts.map +1 -0
  3. package/dist/core/context-logger.js +82 -0
  4. package/dist/core/index.d.ts +3 -0
  5. package/dist/core/index.d.ts.map +1 -0
  6. package/dist/core/index.js +2 -0
  7. package/dist/core/log-manager.d.ts +41 -0
  8. package/dist/core/log-manager.d.ts.map +1 -0
  9. package/dist/core/log-manager.js +241 -0
  10. package/dist/es2015/core/context-logger.js +74 -0
  11. package/dist/es2015/core/index.js +2 -0
  12. package/dist/es2015/core/log-manager.js +255 -0
  13. package/dist/es2015/formatters/dev-formatter.js +152 -0
  14. package/dist/es2015/formatters/index.js +2 -0
  15. package/dist/es2015/formatters/json-formatter.js +69 -0
  16. package/dist/es2015/index.js +19 -0
  17. package/dist/es2015/plugin/index.js +1 -0
  18. package/dist/es2015/plugin/logging-plugin-factory.js +118 -0
  19. package/dist/es2015/transports/console-transport.js +41 -0
  20. package/dist/es2015/transports/index.js +1 -0
  21. package/dist/es2015/utils/console-interceptor.js +105 -0
  22. package/dist/es2015/utils/event-emitter.js +39 -0
  23. package/dist/es2015/utils/index.js +2 -0
  24. package/dist/formatters/dev-formatter.d.ts +20 -0
  25. package/dist/formatters/dev-formatter.d.ts.map +1 -0
  26. package/dist/formatters/dev-formatter.js +140 -0
  27. package/dist/formatters/index.d.ts +3 -0
  28. package/dist/formatters/index.d.ts.map +1 -0
  29. package/dist/formatters/index.js +2 -0
  30. package/dist/formatters/json-formatter.d.ts +24 -0
  31. package/dist/formatters/json-formatter.d.ts.map +1 -0
  32. package/dist/formatters/json-formatter.js +65 -0
  33. package/dist/index.d.ts +16 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +19 -0
  36. package/dist/plugin/index.d.ts +2 -0
  37. package/dist/plugin/index.d.ts.map +1 -0
  38. package/dist/plugin/index.js +1 -0
  39. package/dist/plugin/logging-plugin-factory.d.ts +37 -0
  40. package/dist/plugin/logging-plugin-factory.d.ts.map +1 -0
  41. package/dist/plugin/logging-plugin-factory.js +112 -0
  42. package/dist/transports/console-transport.d.ts +16 -0
  43. package/dist/transports/console-transport.d.ts.map +1 -0
  44. package/dist/transports/console-transport.js +40 -0
  45. package/dist/transports/index.d.ts +2 -0
  46. package/dist/transports/index.d.ts.map +1 -0
  47. package/dist/transports/index.js +1 -0
  48. package/dist/utils/console-interceptor.d.ts +36 -0
  49. package/dist/utils/console-interceptor.d.ts.map +1 -0
  50. package/dist/utils/console-interceptor.js +105 -0
  51. package/dist/utils/event-emitter.d.ts +11 -0
  52. package/dist/utils/event-emitter.d.ts.map +1 -0
  53. package/dist/utils/event-emitter.js +39 -0
  54. package/dist/utils/index.d.ts +3 -0
  55. package/dist/utils/index.d.ts.map +1 -0
  56. package/dist/utils/index.js +2 -0
  57. package/package.json +54 -0
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Console transport
3
+ *
4
+ * Outputs logs to the browser console or Node.js console.
5
+ * Supports formatting via pluggable formatters.
6
+ */
7
+ export class ConsoleTransport {
8
+ constructor(formatter) {
9
+ this.formatter = formatter;
10
+ this.id = 'console';
11
+ this.name = 'Console Transport';
12
+ }
13
+ log(entry) {
14
+ const formatted = this.formatter.format(entry);
15
+ switch (entry.level) {
16
+ case 0: // TRACE
17
+ case 1: // DEBUG
18
+ console.debug(formatted);
19
+ break;
20
+ case 2: // INFO
21
+ console.info(formatted);
22
+ break;
23
+ case 3: // WARN
24
+ console.warn(formatted);
25
+ break;
26
+ case 4: // ERROR
27
+ case 5: // FATAL
28
+ console.error(formatted);
29
+ if (entry.metadata?.error) {
30
+ console.error(entry.metadata.error);
31
+ }
32
+ break;
33
+ default:
34
+ console.log(formatted);
35
+ }
36
+ }
37
+ onError(error) {
38
+ console.error('[ConsoleTransport] Error:', error);
39
+ }
40
+ }
@@ -0,0 +1,2 @@
1
+ export * from './console-transport.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './console-transport.js';
@@ -0,0 +1,36 @@
1
+ import type { ILogManager } from '@hamak/logging-api';
2
+ /**
3
+ * Console interceptor that routes console methods through the logging system
4
+ *
5
+ * By default, this is enabled. Set `interceptConsole: false` in LoggingPluginConfig to disable.
6
+ */
7
+ export declare class ConsoleInterceptor {
8
+ private logManager;
9
+ private originalConsole;
10
+ private isIntercepting;
11
+ constructor(logManager: ILogManager);
12
+ /**
13
+ * Start intercepting console methods
14
+ */
15
+ intercept(): void;
16
+ /**
17
+ * Stop intercepting and restore original console methods
18
+ */
19
+ restore(): void;
20
+ /**
21
+ * Get original console for direct access
22
+ */
23
+ getOriginalConsole(): {
24
+ log: typeof console.log;
25
+ debug: typeof console.debug;
26
+ info: typeof console.info;
27
+ warn: typeof console.warn;
28
+ error: typeof console.error;
29
+ trace: typeof console.trace;
30
+ };
31
+ /**
32
+ * Format console arguments into a single message
33
+ */
34
+ private formatMessage;
35
+ }
36
+ //# sourceMappingURL=console-interceptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-interceptor.d.ts","sourceRoot":"","sources":["../../src/utils/console-interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;GAIG;AACH,qBAAa,kBAAkB;IAYjB,OAAO,CAAC,UAAU;IAX9B,OAAO,CAAC,eAAe,CAOrB;IAEF,OAAO,CAAC,cAAc,CAAS;gBAEX,UAAU,EAAE,WAAW;IAY3C;;OAEG;IACH,SAAS,IAAI,IAAI;IAiDjB;;OAEG;IACH,OAAO,IAAI,IAAI;IAef;;OAEG;IACH,kBAAkB;aA/FX,OAAO,OAAO,CAAC,GAAG;eAChB,OAAO,OAAO,CAAC,KAAK;cACrB,OAAO,OAAO,CAAC,IAAI;cACnB,OAAO,OAAO,CAAC,IAAI;eAClB,OAAO,OAAO,CAAC,KAAK;eACpB,OAAO,OAAO,CAAC,KAAK;;IA8F7B;;OAEG;IACH,OAAO,CAAC,aAAa;CAiBtB"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Console interceptor that routes console methods through the logging system
3
+ *
4
+ * By default, this is enabled. Set `interceptConsole: false` in LoggingPluginConfig to disable.
5
+ */
6
+ export class ConsoleInterceptor {
7
+ constructor(logManager) {
8
+ this.logManager = logManager;
9
+ this.isIntercepting = false;
10
+ // Store original console methods
11
+ this.originalConsole = {
12
+ log: console.log.bind(console),
13
+ debug: console.debug.bind(console),
14
+ info: console.info.bind(console),
15
+ warn: console.warn.bind(console),
16
+ error: console.error.bind(console),
17
+ trace: console.trace.bind(console),
18
+ };
19
+ }
20
+ /**
21
+ * Start intercepting console methods
22
+ */
23
+ intercept() {
24
+ if (this.isIntercepting) {
25
+ return;
26
+ }
27
+ const logger = this.logManager.createLogger({
28
+ plugin: 'console-interceptor',
29
+ module: 'global'
30
+ });
31
+ // Intercept console.log
32
+ console.log = (...args) => {
33
+ logger.info(this.formatMessage(args));
34
+ };
35
+ // Intercept console.debug
36
+ console.debug = (...args) => {
37
+ logger.debug(this.formatMessage(args));
38
+ };
39
+ // Intercept console.info
40
+ console.info = (...args) => {
41
+ logger.info(this.formatMessage(args));
42
+ };
43
+ // Intercept console.warn
44
+ console.warn = (...args) => {
45
+ logger.warn(this.formatMessage(args));
46
+ };
47
+ // Intercept console.error
48
+ console.error = (...args) => {
49
+ const message = this.formatMessage(args);
50
+ const error = args.find(arg => arg instanceof Error);
51
+ logger.error(message, error);
52
+ };
53
+ // Intercept console.trace
54
+ console.trace = (...args) => {
55
+ const message = this.formatMessage(args);
56
+ logger.debug(message, {
57
+ stack: new Error().stack,
58
+ tags: ['trace']
59
+ });
60
+ };
61
+ this.isIntercepting = true;
62
+ }
63
+ /**
64
+ * Stop intercepting and restore original console methods
65
+ */
66
+ restore() {
67
+ if (!this.isIntercepting) {
68
+ return;
69
+ }
70
+ console.log = this.originalConsole.log;
71
+ console.debug = this.originalConsole.debug;
72
+ console.info = this.originalConsole.info;
73
+ console.warn = this.originalConsole.warn;
74
+ console.error = this.originalConsole.error;
75
+ console.trace = this.originalConsole.trace;
76
+ this.isIntercepting = false;
77
+ }
78
+ /**
79
+ * Get original console for direct access
80
+ */
81
+ getOriginalConsole() {
82
+ return this.originalConsole;
83
+ }
84
+ /**
85
+ * Format console arguments into a single message
86
+ */
87
+ formatMessage(args) {
88
+ return args
89
+ .map(arg => {
90
+ if (typeof arg === 'string') {
91
+ return arg;
92
+ }
93
+ if (arg instanceof Error) {
94
+ return `${arg.name}: ${arg.message}`;
95
+ }
96
+ try {
97
+ return JSON.stringify(arg);
98
+ }
99
+ catch {
100
+ return String(arg);
101
+ }
102
+ })
103
+ .join(' ');
104
+ }
105
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Simple event emitter for internal use
3
+ */
4
+ export declare class EventEmitter {
5
+ private listeners;
6
+ on(event: string, handler: Function): void;
7
+ off(event: string, handler: Function): void;
8
+ emit(event: string, ...args: any[]): void;
9
+ clear(): void;
10
+ }
11
+ //# sourceMappingURL=event-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../../src/utils/event-emitter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAoC;IAErD,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI;IAO1C,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI;IAU3C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAazC,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Simple event emitter for internal use
3
+ */
4
+ export class EventEmitter {
5
+ constructor() {
6
+ this.listeners = new Map();
7
+ }
8
+ on(event, handler) {
9
+ if (!this.listeners.has(event)) {
10
+ this.listeners.set(event, new Set());
11
+ }
12
+ this.listeners.get(event).add(handler);
13
+ }
14
+ off(event, handler) {
15
+ const handlers = this.listeners.get(event);
16
+ if (handlers) {
17
+ handlers.delete(handler);
18
+ if (handlers.size === 0) {
19
+ this.listeners.delete(event);
20
+ }
21
+ }
22
+ }
23
+ emit(event, ...args) {
24
+ const handlers = this.listeners.get(event);
25
+ if (handlers) {
26
+ handlers.forEach(handler => {
27
+ try {
28
+ handler(...args);
29
+ }
30
+ catch (error) {
31
+ console.error(`[EventEmitter] Error in handler for '${event}':`, error);
32
+ }
33
+ });
34
+ }
35
+ }
36
+ clear() {
37
+ this.listeners.clear();
38
+ }
39
+ }
@@ -0,0 +1,3 @@
1
+ export * from './event-emitter.js';
2
+ export * from './console-interceptor.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './event-emitter.js';
2
+ export * from './console-interceptor.js';
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@hamak/logging-impl",
3
+ "version": "0.4.1",
4
+ "description": "Logging Implementation - Core implementation of the pluggable logging system",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js",
13
+ "legacy": "./dist/es2015/index.js"
14
+ },
15
+ "./es2015": {
16
+ "import": "./dist/es2015/index.js",
17
+ "default": "./dist/es2015/index.js"
18
+ }
19
+ },
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "https://github.com/amah/app-framework.git",
26
+ "directory": "packages/logging/logging-impl"
27
+ },
28
+ "publishConfig": {
29
+ "access": "public"
30
+ },
31
+ "scripts": {
32
+ "build": "tsc -p tsconfig.lib.json && tsc -p tsconfig.es2015.json",
33
+ "clean": "rm -rf dist"
34
+ },
35
+ "keywords": [
36
+ "logging",
37
+ "implementation",
38
+ "microkernel"
39
+ ],
40
+ "author": "",
41
+ "license": "MIT",
42
+ "dependencies": {
43
+ "@hamak/logging-api": "0.4.0",
44
+ "@hamak/logging-spi": "0.4.0",
45
+ "@hamak/microkernel-api": "0.4.0",
46
+ "@hamak/microkernel-spi": "0.4.0"
47
+ },
48
+ "devDependencies": {
49
+ "@testing-library/jest-dom": "^6.9.1",
50
+ "typescript": "^5.9.3",
51
+ "vitest": "^3.2.4",
52
+ "jsdom": "^27.0.0"
53
+ }
54
+ }