@lennardgeissler/logger 1.0.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 (38) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/LICENSE +0 -0
  3. package/README.md +159 -0
  4. package/dist/components/LoggerProvider.d.ts +9 -0
  5. package/dist/components/LoggerProvider.js +18 -0
  6. package/dist/context/LoggerContext.d.ts +2 -0
  7. package/dist/context/LoggerContext.js +5 -0
  8. package/dist/core/Logger.d.ts +21 -0
  9. package/dist/core/Logger.js +81 -0
  10. package/dist/formatters/BaseFormatter.d.ts +4 -0
  11. package/dist/formatters/BaseFormatter.js +6 -0
  12. package/dist/formatters/JsonFormatter.d.ts +5 -0
  13. package/dist/formatters/JsonFormatter.js +15 -0
  14. package/dist/formatters/TextFormatter.d.ts +7 -0
  15. package/dist/formatters/TextFormatter.js +18 -0
  16. package/dist/handlers/BaseHandler.d.ts +8 -0
  17. package/dist/handlers/BaseHandler.js +13 -0
  18. package/dist/handlers/ConsoleHandler.d.ts +5 -0
  19. package/dist/handlers/ConsoleHandler.js +19 -0
  20. package/dist/handlers/FileHandler.d.ts +7 -0
  21. package/dist/handlers/FileHandler.js +20 -0
  22. package/dist/handlers/StorageHandler.d.ts +8 -0
  23. package/dist/handlers/StorageHandler.js +18 -0
  24. package/dist/hooks/useLogger.d.ts +1 -0
  25. package/dist/hooks/useLogger.js +12 -0
  26. package/dist/index.d.ts +10 -0
  27. package/dist/index.js +20 -0
  28. package/dist/react/index.d.ts +3 -0
  29. package/dist/react/index.js +9 -0
  30. package/dist/types/LogLevel.d.ts +1 -0
  31. package/dist/types/LogLevel.js +2 -0
  32. package/dist/types/LogMessage.d.ts +7 -0
  33. package/dist/types/LogMessage.js +2 -0
  34. package/dist/utils/getLogLevelColor.d.ts +2 -0
  35. package/dist/utils/getLogLevelColor.js +19 -0
  36. package/dist/utils/getTimestamp.d.ts +1 -0
  37. package/dist/utils/getTimestamp.js +6 -0
  38. package/package.json +46 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ # πŸ“ Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [1.0.0] - 2025-01-22
6
+
7
+ ### Added
8
+
9
+ - Initial release
10
+ - Core Logger functionality
11
+ - Console, File, and Storage handlers
12
+ - Text and JSON formatters
13
+ - TypeScript support
package/LICENSE ADDED
File without changes
package/README.md ADDED
@@ -0,0 +1,159 @@
1
+ # @lennardgeissler/logger
2
+
3
+ A flexible, extensible TypeScript logging library that works in both browser and Node.js environments. Supports multiple handlers, formatters, and log levels.
4
+
5
+ ## πŸš€ Features
6
+
7
+ - 🌟 Works in both browser and Node.js environments
8
+ - 🎨 Customizable formatters (Text, JSON)
9
+ - πŸ“ Multiple handlers (Console, File, Storage)
10
+ - πŸ” Log levels (debug, info, warn, error, fatal)
11
+ - 🎯 TypeScript support
12
+ - πŸ§ͺ Well tested
13
+ - πŸ”„ Singleton pattern for consistent logging
14
+ - πŸ’Ύ Browser storage support (localStorage/sessionStorage)
15
+
16
+ ## πŸ”§ Installation
17
+
18
+ ```bash
19
+ npm install @lennardgeissler/logger
20
+ ```
21
+
22
+ ## πŸ“– Usage
23
+
24
+ ```ts
25
+ import { Logger, ConsoleHandler, TextFormatter } from '@lennardgeissler/logger';
26
+ // Get logger instance
27
+ const logger = Logger.getInstance();
28
+ // Add handler with custom formatter
29
+ const handler = new ConsoleHandler();
30
+ handler.setFormatter(new TextFormatter('[{timestamp}] [{level}] {message}'));
31
+ logger.addHandler(handler);
32
+ // Start logging!
33
+ logger.info('Application started', { version: '1.0.0' });
34
+ logger.debug('Debug message');
35
+ logger.warn('Warning message', { details: 'Something went wrong' });
36
+ logger.error('Error occurred', { error: new Error('Failed to process') });
37
+ ```
38
+
39
+ ## πŸ“ Handlers
40
+
41
+ ### ConsoleHandler
42
+
43
+ Outputs logs to the console with color support in browsers.
44
+
45
+ ```ts
46
+ import { ConsoleHandler } from '@lennardgeissler/logger';
47
+ const handler = new ConsoleHandler();
48
+ logger.addHandler(handler);
49
+ ```
50
+
51
+ ### FileHandler
52
+
53
+ Outputs logs to a file (Node.js environment).
54
+
55
+ ```ts
56
+ import { FileHandler } from '@lennardgeissler/logger';
57
+ const handler = new FileHandler('app.log');
58
+ logger.addHandler(handler);
59
+ ```
60
+
61
+ ### StorageHandler
62
+
63
+ Stores logs in browser's localStorage or sessionStorage.
64
+
65
+ ```ts
66
+ import { StorageHandler } from '@lennardgeissler/logger';
67
+ const handler = new StorageHandler(false, 'app-logs');
68
+ logger.addHandler(handler);
69
+ ```
70
+
71
+ ## 🎨 Formatters
72
+
73
+ ### TextFormatter
74
+
75
+ Formats logs as plain text using a customizable template.
76
+
77
+ ```ts
78
+ import { TextFormatter } from '@lennardgeissler/logger';
79
+ const formatter = new TextFormatter('[{timestamp}] [{level}] {message}');
80
+ handler.setFormatter(formatter);
81
+ ```
82
+
83
+ ### JSONFormatter
84
+
85
+ Formats logs as JSON strings.
86
+
87
+ ```ts
88
+ import { JsonFormatter } from '@lennardgeissler/logger';
89
+ const formatter = new JsonFormatter();
90
+ handler.setFormatter(formatter);
91
+ ```
92
+
93
+ ## πŸ“ Log Levels
94
+
95
+ Available log levels in order of severity:
96
+
97
+ - debug
98
+ - info
99
+ - warn
100
+ - error
101
+ - fatal
102
+
103
+ Set minimum log level:
104
+
105
+ ```ts
106
+ logger.setLevel('warn'); // Only warn, error, and fatal will be logged
107
+ ```
108
+
109
+ ## 🧰 Custom Handlers
110
+
111
+ Create custom handlers by extending BaseHandler:
112
+
113
+ ```ts
114
+ import { BaseHandler, LogMessage } from '@lennardgeissler/logger';
115
+ class CustomHandler extends BaseHandler {
116
+ handle(log: LogMessage): void {
117
+ // Your custom logging logic here
118
+ const formattedLog = this.formatter.format(log);
119
+ // ... handle the formatted log
120
+ }
121
+ }
122
+ ```
123
+
124
+ ## 🎨 Custom Formatters
125
+
126
+ Create custom formatters by extending BaseFormatter:
127
+
128
+ ```ts
129
+ import { BaseFormatter, LogMessage } from '@lennardgeissler/logger';
130
+ class CustomFormatter extends BaseFormatter {
131
+ format(log: LogMessage): string {
132
+ // Your custom formatting logic here
133
+ return `Custom format: ${log.message}`;
134
+ }
135
+ }
136
+ ```
137
+
138
+ ## πŸ“ Changelog
139
+
140
+ See [CHANGELOG.md](./CHANGELOG.md) for release history.
141
+
142
+ ## 🀝 Contributing
143
+
144
+ Contributions are welcome! If you would like to contribute, please follow these steps:
145
+
146
+ 1. Fork the repository.
147
+ 2. Clone your fork to your local machine.
148
+ 3. Create a new branch: `git checkout -b feature/my-new-feature`.
149
+ 4. Make your changes and commit them: `git commit -am 'Add new feature'`.
150
+ 5. Push your branch to your fork: `git push origin feature/my-new-feature`.
151
+ 6. Open a pull request to merge your changes into the main repository.
152
+
153
+ ## πŸ“ License
154
+
155
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
156
+
157
+ ## πŸ‘¨β€πŸ’» Authors
158
+
159
+ - Lennard Geissler
@@ -0,0 +1,9 @@
1
+ import React, { ReactNode } from 'react';
2
+ import { Logger } from '../core/Logger';
3
+ interface LoggerProviderProps {
4
+ children: ReactNode;
5
+ logger?: Logger;
6
+ handlers?: Array<any>;
7
+ }
8
+ export declare function LoggerProvider({ children, logger, handlers }: LoggerProviderProps): React.JSX.Element;
9
+ export {};
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LoggerProvider = LoggerProvider;
7
+ const react_1 = __importDefault(require("react"));
8
+ const Logger_1 = require("../core/Logger");
9
+ const LoggerContext_1 = require("../context/LoggerContext");
10
+ const ConsoleHandler_1 = require("../handlers/ConsoleHandler");
11
+ function LoggerProvider({ children, logger = Logger_1.Logger.getInstance(), handlers = [new ConsoleHandler_1.ConsoleHandler()] }) {
12
+ // Initialize logger with handlers if provided
13
+ react_1.default.useEffect(() => {
14
+ logger.clearHandlers();
15
+ handlers.forEach(handler => logger.addHandler(handler));
16
+ }, [logger, handlers]);
17
+ return (react_1.default.createElement(LoggerContext_1.LoggerContext.Provider, { value: logger }, children));
18
+ }
@@ -0,0 +1,2 @@
1
+ import { Logger } from '../core/Logger';
2
+ export declare const LoggerContext: import("react").Context<Logger | null>;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LoggerContext = void 0;
4
+ const react_1 = require("react");
5
+ exports.LoggerContext = (0, react_1.createContext)(null);
@@ -0,0 +1,21 @@
1
+ import { LogLevel } from "../types/LogLevel";
2
+ import { BaseHandler } from "../handlers/BaseHandler";
3
+ export declare class Logger {
4
+ private static instance;
5
+ private logLevel;
6
+ private handlers;
7
+ private constructor();
8
+ static getInstance(): Logger;
9
+ addHandler(handler: BaseHandler): void;
10
+ removeHandler(handler: BaseHandler): void;
11
+ clearHandlers(): void;
12
+ setLogLevel(level: LogLevel): void;
13
+ private shouldLog;
14
+ private createLogMessage;
15
+ private log;
16
+ debug(message: string, context?: Record<string, any> | null): void;
17
+ info(message: string, context?: Record<string, any> | null): void;
18
+ warn(message: string, context?: Record<string, any> | null): void;
19
+ error(message: string, context?: Record<string, any> | null): void;
20
+ fatal(message: string, context?: Record<string, any> | null): void;
21
+ }
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Logger = void 0;
4
+ const getTimestamp_1 = require("../utils/getTimestamp");
5
+ class Logger {
6
+ constructor() {
7
+ this.logLevel = "info";
8
+ this.handlers = [];
9
+ }
10
+ static getInstance() {
11
+ if (!Logger.instance) {
12
+ Logger.instance = new Logger();
13
+ }
14
+ return Logger.instance;
15
+ }
16
+ addHandler(handler) {
17
+ this.handlers.push(handler);
18
+ }
19
+ removeHandler(handler) {
20
+ const index = this.handlers.indexOf(handler);
21
+ if (index > -1) {
22
+ this.handlers.splice(index, 1);
23
+ }
24
+ }
25
+ clearHandlers() {
26
+ this.handlers = [];
27
+ }
28
+ setLogLevel(level) {
29
+ this.logLevel = level;
30
+ }
31
+ shouldLog(level) {
32
+ const levels = ["debug", "info", "warn", "error", "fatal"];
33
+ return levels.indexOf(level) >= levels.indexOf(this.logLevel);
34
+ }
35
+ createLogMessage(level, message, context) {
36
+ return {
37
+ timestamp: (0, getTimestamp_1.getTimestamp)(),
38
+ level,
39
+ message,
40
+ context
41
+ };
42
+ }
43
+ log(level, message, context) {
44
+ if (!this.shouldLog(level))
45
+ return;
46
+ const logMessage = this.createLogMessage(level, message, context);
47
+ // If no handlers are registered, use console as fallback
48
+ if (this.handlers.length === 0) {
49
+ console.warn('No handlers registered for logger, using console as fallback');
50
+ console.log(`${logMessage.timestamp} [${level.toUpperCase()}]: ${message}`);
51
+ if (context)
52
+ console.log('Context:', context);
53
+ return;
54
+ }
55
+ // Dispatch to all handlers
56
+ this.handlers.forEach(handler => {
57
+ try {
58
+ handler.handle(logMessage);
59
+ }
60
+ catch (error) {
61
+ console.error('Error in log handler:', error);
62
+ }
63
+ });
64
+ }
65
+ debug(message, context) {
66
+ this.log("debug", message, context);
67
+ }
68
+ info(message, context) {
69
+ this.log("info", message, context);
70
+ }
71
+ warn(message, context) {
72
+ this.log("warn", message, context);
73
+ }
74
+ error(message, context) {
75
+ this.log("error", message, context);
76
+ }
77
+ fatal(message, context) {
78
+ this.log("fatal", message, context);
79
+ }
80
+ }
81
+ exports.Logger = Logger;
@@ -0,0 +1,4 @@
1
+ import { LogMessage } from "../types/LogMessage";
2
+ export declare abstract class BaseFormatter {
3
+ abstract format(log: LogMessage): string;
4
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseFormatter = void 0;
4
+ class BaseFormatter {
5
+ }
6
+ exports.BaseFormatter = BaseFormatter;
@@ -0,0 +1,5 @@
1
+ import { BaseFormatter } from "./BaseFormatter";
2
+ import { LogMessage } from "../types/LogMessage";
3
+ export declare class JsonFormatter extends BaseFormatter {
4
+ format(log: LogMessage): string;
5
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JsonFormatter = void 0;
4
+ const BaseFormatter_1 = require("./BaseFormatter");
5
+ class JsonFormatter extends BaseFormatter_1.BaseFormatter {
6
+ format(log) {
7
+ return JSON.stringify({
8
+ timestamp: log.timestamp,
9
+ level: log.level,
10
+ message: log.message,
11
+ context: log.context || {}
12
+ });
13
+ }
14
+ }
15
+ exports.JsonFormatter = JsonFormatter;
@@ -0,0 +1,7 @@
1
+ import { BaseFormatter } from "./BaseFormatter";
2
+ import { LogMessage } from "../types/LogMessage";
3
+ export declare class TextFormatter extends BaseFormatter {
4
+ private template;
5
+ constructor(template?: string);
6
+ format(log: LogMessage): string;
7
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TextFormatter = void 0;
4
+ const BaseFormatter_1 = require("./BaseFormatter");
5
+ class TextFormatter extends BaseFormatter_1.BaseFormatter {
6
+ constructor(template = '[{timestamp}] [{level}] {message} {context}') {
7
+ super();
8
+ this.template = template;
9
+ }
10
+ format(log) {
11
+ return this.template
12
+ .replace('{timestamp}', log.timestamp)
13
+ .replace('{level}', log.level.toUpperCase())
14
+ .replace('{message}', log.message)
15
+ .replace('{context}', log.context ? JSON.stringify(log.context) : '');
16
+ }
17
+ }
18
+ exports.TextFormatter = TextFormatter;
@@ -0,0 +1,8 @@
1
+ import { LogMessage } from "../types/LogMessage";
2
+ import { BaseFormatter } from "../formatters/BaseFormatter";
3
+ export declare abstract class BaseHandler {
4
+ protected formatter: BaseFormatter;
5
+ constructor(formatter?: BaseFormatter);
6
+ setFormatter(formatter: BaseFormatter): void;
7
+ abstract handle(log: LogMessage): void;
8
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseHandler = void 0;
4
+ const TextFormatter_1 = require("../formatters/TextFormatter");
5
+ class BaseHandler {
6
+ constructor(formatter) {
7
+ this.formatter = formatter || new TextFormatter_1.TextFormatter();
8
+ }
9
+ setFormatter(formatter) {
10
+ this.formatter = formatter;
11
+ }
12
+ }
13
+ exports.BaseHandler = BaseHandler;
@@ -0,0 +1,5 @@
1
+ import { BaseHandler } from "./BaseHandler";
2
+ import { LogMessage } from "../types/LogMessage";
3
+ export declare class ConsoleHandler extends BaseHandler {
4
+ handle(log: LogMessage): void;
5
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConsoleHandler = void 0;
4
+ const BaseHandler_1 = require("./BaseHandler");
5
+ const getLogLevelColor_1 = require("../utils/getLogLevelColor");
6
+ class ConsoleHandler extends BaseHandler_1.BaseHandler {
7
+ handle(log) {
8
+ const formattedLog = this.formatter.format(log);
9
+ if (typeof window !== 'undefined') {
10
+ // Browser environment
11
+ console.log(`%c${formattedLog}`, (0, getLogLevelColor_1.getLogLevelColor)(log.level));
12
+ }
13
+ else {
14
+ // Node.js environment
15
+ console.log(formattedLog);
16
+ }
17
+ }
18
+ }
19
+ exports.ConsoleHandler = ConsoleHandler;
@@ -0,0 +1,7 @@
1
+ import { BaseHandler } from "./BaseHandler";
2
+ import { LogMessage } from "../types/LogMessage";
3
+ export declare class FileHandler extends BaseHandler {
4
+ private filePath;
5
+ constructor(filePath?: string);
6
+ handle(log: LogMessage): void;
7
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FileHandler = void 0;
7
+ const BaseHandler_1 = require("./BaseHandler");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ class FileHandler extends BaseHandler_1.BaseHandler {
11
+ constructor(filePath = "logs.txt") {
12
+ super();
13
+ this.filePath = path_1.default.resolve(filePath);
14
+ }
15
+ handle(log) {
16
+ const formattedLog = this.formatter.format(log) + '\n';
17
+ fs_1.default.appendFileSync(this.filePath, formattedLog, "utf-8");
18
+ }
19
+ }
20
+ exports.FileHandler = FileHandler;
@@ -0,0 +1,8 @@
1
+ import { BaseHandler } from "./BaseHandler";
2
+ import { LogMessage } from "../types/LogMessage";
3
+ export declare class StorageHandler extends BaseHandler {
4
+ private storage;
5
+ private key;
6
+ constructor(useSessionStorage?: boolean, key?: string);
7
+ handle(log: LogMessage): void;
8
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StorageHandler = void 0;
4
+ const BaseHandler_1 = require("./BaseHandler");
5
+ class StorageHandler extends BaseHandler_1.BaseHandler {
6
+ constructor(useSessionStorage = false, key = "logs") {
7
+ super();
8
+ this.storage = useSessionStorage ? sessionStorage : localStorage;
9
+ this.key = key;
10
+ }
11
+ handle(log) {
12
+ const existingLogs = this.storage.getItem(this.key);
13
+ const logs = existingLogs ? JSON.parse(existingLogs) : [];
14
+ logs.push(this.formatter.format(log));
15
+ this.storage.setItem(this.key, JSON.stringify(logs));
16
+ }
17
+ }
18
+ exports.StorageHandler = StorageHandler;
@@ -0,0 +1 @@
1
+ export declare function useLogger(): import("..").Logger;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useLogger = useLogger;
4
+ const react_1 = require("react");
5
+ const LoggerContext_1 = require("../context/LoggerContext");
6
+ function useLogger() {
7
+ const logger = (0, react_1.useContext)(LoggerContext_1.LoggerContext);
8
+ if (!logger) {
9
+ throw new Error('useLogger must be used within a LoggerProvider');
10
+ }
11
+ return logger;
12
+ }
@@ -0,0 +1,10 @@
1
+ export { Logger } from "./core/Logger";
2
+ export { BaseHandler } from "./handlers/BaseHandler";
3
+ export { ConsoleHandler } from "./handlers/ConsoleHandler";
4
+ export { FileHandler } from "./handlers/FileHandler";
5
+ export { StorageHandler } from "./handlers/StorageHandler";
6
+ export { BaseFormatter } from './formatters/BaseFormatter';
7
+ export { JsonFormatter } from './formatters/JsonFormatter';
8
+ export { TextFormatter } from './formatters/TextFormatter';
9
+ export type { LogLevel } from "./types/LogLevel";
10
+ export type { LogMessage } from "./types/LogMessage";
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TextFormatter = exports.JsonFormatter = exports.BaseFormatter = exports.StorageHandler = exports.FileHandler = exports.ConsoleHandler = exports.BaseHandler = exports.Logger = void 0;
4
+ // Core exports
5
+ var Logger_1 = require("./core/Logger");
6
+ Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return Logger_1.Logger; } });
7
+ var BaseHandler_1 = require("./handlers/BaseHandler");
8
+ Object.defineProperty(exports, "BaseHandler", { enumerable: true, get: function () { return BaseHandler_1.BaseHandler; } });
9
+ var ConsoleHandler_1 = require("./handlers/ConsoleHandler");
10
+ Object.defineProperty(exports, "ConsoleHandler", { enumerable: true, get: function () { return ConsoleHandler_1.ConsoleHandler; } });
11
+ var FileHandler_1 = require("./handlers/FileHandler");
12
+ Object.defineProperty(exports, "FileHandler", { enumerable: true, get: function () { return FileHandler_1.FileHandler; } });
13
+ var StorageHandler_1 = require("./handlers/StorageHandler");
14
+ Object.defineProperty(exports, "StorageHandler", { enumerable: true, get: function () { return StorageHandler_1.StorageHandler; } });
15
+ var BaseFormatter_1 = require("./formatters/BaseFormatter");
16
+ Object.defineProperty(exports, "BaseFormatter", { enumerable: true, get: function () { return BaseFormatter_1.BaseFormatter; } });
17
+ var JsonFormatter_1 = require("./formatters/JsonFormatter");
18
+ Object.defineProperty(exports, "JsonFormatter", { enumerable: true, get: function () { return JsonFormatter_1.JsonFormatter; } });
19
+ var TextFormatter_1 = require("./formatters/TextFormatter");
20
+ Object.defineProperty(exports, "TextFormatter", { enumerable: true, get: function () { return TextFormatter_1.TextFormatter; } });
@@ -0,0 +1,3 @@
1
+ export { LoggerProvider } from '../components/LoggerProvider';
2
+ export { useLogger } from '../hooks/useLogger';
3
+ export { LoggerContext } from '../context/LoggerContext';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LoggerContext = exports.useLogger = exports.LoggerProvider = void 0;
4
+ var LoggerProvider_1 = require("../components/LoggerProvider");
5
+ Object.defineProperty(exports, "LoggerProvider", { enumerable: true, get: function () { return LoggerProvider_1.LoggerProvider; } });
6
+ var useLogger_1 = require("../hooks/useLogger");
7
+ Object.defineProperty(exports, "useLogger", { enumerable: true, get: function () { return useLogger_1.useLogger; } });
8
+ var LoggerContext_1 = require("../context/LoggerContext");
9
+ Object.defineProperty(exports, "LoggerContext", { enumerable: true, get: function () { return LoggerContext_1.LoggerContext; } });
@@ -0,0 +1 @@
1
+ export type LogLevel = "debug" | "info" | "warn" | "error" | "fatal";
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ import { LogLevel } from "./LogLevel";
2
+ export interface LogMessage {
3
+ timestamp: string;
4
+ level: LogLevel;
5
+ message: string;
6
+ context?: Record<string, any> | null;
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ import { LogLevel } from "../types/LogLevel";
2
+ export declare function getLogLevelColor(level: LogLevel): string;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getLogLevelColor = getLogLevelColor;
4
+ function getLogLevelColor(level) {
5
+ switch (level) {
6
+ case "debug":
7
+ return "color: gray;";
8
+ case "info":
9
+ return "color: blue;";
10
+ case "warn":
11
+ return "color: orange;";
12
+ case "error":
13
+ return "color: red;";
14
+ case "fatal":
15
+ return "color: darkred; font-weight: bold;";
16
+ default:
17
+ return "color: black;";
18
+ }
19
+ }
@@ -0,0 +1 @@
1
+ export declare function getTimestamp(): string;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTimestamp = getTimestamp;
4
+ function getTimestamp() {
5
+ return new Date().toISOString();
6
+ }
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@lennardgeissler/logger",
3
+ "version": "1.0.0",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "files": [
7
+ "dist",
8
+ "README.md",
9
+ "CHANGELOG.md",
10
+ "LICENSE"
11
+ ],
12
+ "scripts": {
13
+ "clean": "if exist dist rd /s /q dist",
14
+ "build": "npm run clean && tsc",
15
+ "test": "jest",
16
+ "test:watch": "jest --watch",
17
+ "test:coverage": "jest --coverage",
18
+ "prepublishOnly": "npm test && npm run build",
19
+ "preversion": "npm test",
20
+ "postversion": "git push && git push --tags"
21
+ },
22
+ "keywords": [
23
+ "logging",
24
+ "typescript",
25
+ "react",
26
+ "node"
27
+ ],
28
+ "author": "Lennard Geißler",
29
+ "license": "MIT",
30
+ "type": "commonjs",
31
+ "description": "",
32
+ "devDependencies": {
33
+ "@types/jest": "^29.5.14",
34
+ "@types/node": "^22.10.7",
35
+ "@types/react": "^19.0.7",
36
+ "@types/react-dom": "^19.0.3",
37
+ "@vitejs/plugin-react": "^4.3.4",
38
+ "jest": "^29.7.0",
39
+ "ts-jest": "^29.2.5",
40
+ "typescript": "^5.7.3"
41
+ },
42
+ "peerDependencies": {
43
+ "react": "^19.0.0",
44
+ "react-dom": "^19.0.0"
45
+ }
46
+ }