logan-logger 1.1.19 → 1.1.20

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 (56) hide show
  1. package/README.md +4 -1
  2. package/dist/browser.cjs +1 -0
  3. package/dist/browser.d.cts +25 -0
  4. package/dist/browser.d.mts +25 -0
  5. package/dist/{browser.esm.js → browser.mjs} +2 -2
  6. package/dist/bun.cjs +1 -0
  7. package/dist/bun.d.cts +7 -0
  8. package/dist/bun.d.mts +7 -0
  9. package/dist/{bun.esm.js → bun.mjs} +3 -3
  10. package/dist/chunks/__vite-browser-external-DWL5uGdo.cjs +1 -0
  11. package/dist/chunks/factory-B8mZAA08.cjs +1 -0
  12. package/dist/chunks/formatting-D6Y8pN18.cjs +1 -0
  13. package/dist/core/factory.d.cts +46 -0
  14. package/dist/core/factory.d.mts +46 -0
  15. package/dist/core/logger.d.cts +19 -0
  16. package/dist/core/logger.d.mts +19 -0
  17. package/dist/core/types.d.cts +170 -0
  18. package/dist/core/types.d.mts +170 -0
  19. package/dist/deno.cjs +1 -0
  20. package/dist/deno.d.cts +7 -0
  21. package/dist/deno.d.mts +7 -0
  22. package/dist/{deno.esm.js → deno.mjs} +3 -3
  23. package/dist/index.cjs +1 -0
  24. package/dist/index.d.cts +19 -0
  25. package/dist/index.d.mts +19 -0
  26. package/dist/{index.esm.js → index.mjs} +3 -3
  27. package/dist/node.cjs +1 -0
  28. package/dist/node.d.cts +3 -0
  29. package/dist/node.d.mts +3 -0
  30. package/dist/{node.esm.js → node.mjs} +1 -1
  31. package/dist/runtime/browser.d.cts +31 -0
  32. package/dist/runtime/browser.d.mts +31 -0
  33. package/dist/runtime/node.d.cts +16 -0
  34. package/dist/runtime/node.d.mts +16 -0
  35. package/dist/utils/config.d.cts +5 -0
  36. package/dist/utils/config.d.mts +5 -0
  37. package/dist/utils/formatting.d.cts +31 -0
  38. package/dist/utils/formatting.d.mts +31 -0
  39. package/dist/utils/runtime.d.cts +31 -0
  40. package/dist/utils/runtime.d.mts +31 -0
  41. package/dist/utils/serialization.d.cts +33 -0
  42. package/dist/utils/serialization.d.mts +33 -0
  43. package/package.json +70 -19
  44. package/dist/__vite-browser-external-DcEHEw3a.js +0 -1
  45. package/dist/browser.js +0 -1
  46. package/dist/bun.js +0 -1
  47. package/dist/deno.js +0 -1
  48. package/dist/factory-Uhw2LFdb.js +0 -1
  49. package/dist/formatting-BHJ25M3U.js +0 -1
  50. package/dist/index.js +0 -1
  51. package/dist/node.js +0 -1
  52. /package/dist/{__vite-browser-external-C71mkwFX.mjs → chunks/__vite-browser-external-C71mkwFX.mjs} +0 -0
  53. /package/dist/{browser-D9bA4EUQ.js → chunks/browser-D9bA4EUQ.cjs} +0 -0
  54. /package/dist/{browser-DV_BQqDK.mjs → chunks/browser-DV_BQqDK.mjs} +0 -0
  55. /package/dist/{factory-CG8zWIqv.mjs → chunks/factory-CG8zWIqv.mjs} +0 -0
  56. /package/dist/{formatting-DP_57uSR.mjs → chunks/formatting-DP_57uSR.mjs} +0 -0
@@ -0,0 +1,19 @@
1
+ import { createLogger, createLoggerForEnvironment } from './core/factory.cjs';
2
+ import { ILogger, LogLevel } from './core/types.cjs';
3
+ export * from './core/factory.cjs';
4
+ export * from './core/logger.cjs';
5
+ export * from './core/types.cjs';
6
+ export { BrowserLogger, ConsoleGroupLogger, PerformanceLogger } from './runtime/browser.cjs';
7
+ export * from './utils/config.cjs';
8
+ export * from './utils/formatting.cjs';
9
+ export * from './utils/runtime.cjs';
10
+ export * from './utils/serialization.cjs';
11
+ export declare const logger: ILogger;
12
+ export declare const log: {
13
+ debug: (message: string, meta?: any) => void;
14
+ info: (message: string, meta?: any) => void;
15
+ warn: (message: string, meta?: any) => void;
16
+ error: (message: string, meta?: any) => void;
17
+ };
18
+ export { createLogger, createLoggerForEnvironment, LogLevel };
19
+ export type { ILogger, ILoggerAdapter, LogEntry, LoggerConfig, LogLevelString, LogMessage, RuntimeCapabilities, RuntimeInfo, RuntimeName, TransportConfig, } from './core/types.cjs';
@@ -0,0 +1,19 @@
1
+ import { createLogger, createLoggerForEnvironment } from './core/factory.mjs';
2
+ import { ILogger, LogLevel } from './core/types.mjs';
3
+ export * from './core/factory.mjs';
4
+ export * from './core/logger.mjs';
5
+ export * from './core/types.mjs';
6
+ export { BrowserLogger, ConsoleGroupLogger, PerformanceLogger } from './runtime/browser.mjs';
7
+ export * from './utils/config.mjs';
8
+ export * from './utils/formatting.mjs';
9
+ export * from './utils/runtime.mjs';
10
+ export * from './utils/serialization.mjs';
11
+ export declare const logger: ILogger;
12
+ export declare const log: {
13
+ debug: (message: string, meta?: any) => void;
14
+ info: (message: string, meta?: any) => void;
15
+ warn: (message: string, meta?: any) => void;
16
+ error: (message: string, meta?: any) => void;
17
+ };
18
+ export { createLogger, createLoggerForEnvironment, LogLevel };
19
+ export type { ILogger, ILoggerAdapter, LogEntry, LoggerConfig, LogLevelString, LogMessage, RuntimeCapabilities, RuntimeInfo, RuntimeName, TransportConfig, } from './core/types.mjs';
@@ -1,6 +1,6 @@
1
- import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./factory-CG8zWIqv.mjs";
2
- import { a as l, c as u, d, f, i as p, l as m, n as h, o as g, p as _, r as v, s as y, t as b, u as x } from "./browser-DV_BQqDK.mjs";
3
- import { n as S, t as C } from "./formatting-DP_57uSR.mjs";
1
+ import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./chunks/factory-CG8zWIqv.mjs";
2
+ import { a as l, c as u, d, f, i as p, l as m, n as h, o as g, p as _, r as v, s as y, t as b, u as x } from "./chunks/browser-DV_BQqDK.mjs";
3
+ import { n as S, t as C } from "./chunks/formatting-DP_57uSR.mjs";
4
4
  //#region src/index.ts
5
5
  var w = o(), T = {
6
6
  debug: (e, t) => w.debug(e, t),
package/dist/node.cjs ADDED
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./chunks/factory-B8mZAA08.cjs");exports.NodeLogger=e.u,exports.createLogger=e.n,exports.createLoggerForEnvironment=e.r,exports.createMorganStream=e.d;
@@ -0,0 +1,3 @@
1
+ export { createLogger, createLoggerForEnvironment } from './core/factory.cjs';
2
+ export type { ILogger, LoggerConfig, LogLevel } from './core/types.cjs';
3
+ export { createMorganStream, NodeLogger } from './runtime/node.cjs';
@@ -0,0 +1,3 @@
1
+ export { createLogger, createLoggerForEnvironment } from './core/factory.mjs';
2
+ export type { ILogger, LoggerConfig, LogLevel } from './core/types.mjs';
3
+ export { createMorganStream, NodeLogger } from './runtime/node.mjs';
@@ -1,2 +1,2 @@
1
- import { d as e, n as t, r as n, u as r } from "./factory-CG8zWIqv.mjs";
1
+ import { d as e, n as t, r as n, u as r } from "./chunks/factory-CG8zWIqv.mjs";
2
2
  export { r as NodeLogger, t as createLogger, n as createLoggerForEnvironment, e as createMorganStream };
@@ -0,0 +1,31 @@
1
+ import { BaseLogger } from '../core/logger.cjs';
2
+ import { LogEntry, LoggerConfig, LogLevel } from '../core/types.cjs';
3
+ export declare class BrowserLogger extends BaseLogger {
4
+ constructor(config?: Partial<LoggerConfig>);
5
+ protected writeLog(entry: LogEntry): void;
6
+ protected createChild(): BaseLogger;
7
+ private formatMessage;
8
+ private getConsoleStyle;
9
+ private shouldLogInProduction;
10
+ protected shouldLog(level: LogLevel): boolean;
11
+ }
12
+ export declare class ConsoleGroupLogger extends BrowserLogger {
13
+ private groupStack;
14
+ group(label: string): void;
15
+ groupCollapsed(label: string): void;
16
+ groupEnd(): void;
17
+ getCurrentGroupStack(): string[];
18
+ getCurrentGroupPath(): string;
19
+ time(label: string): void;
20
+ timeEnd(label: string): void;
21
+ trace(message: string, metadata?: any): void;
22
+ count(label?: string): void;
23
+ countReset(label?: string): void;
24
+ table(data: any): void;
25
+ }
26
+ export declare class PerformanceLogger extends BrowserLogger {
27
+ mark(name: string): void;
28
+ measure(name: string, startMark?: string, endMark?: string): void;
29
+ clearMarks(name?: string): void;
30
+ clearMeasures(name?: string): void;
31
+ }
@@ -0,0 +1,31 @@
1
+ import { BaseLogger } from '../core/logger.mjs';
2
+ import { LogEntry, LoggerConfig, LogLevel } from '../core/types.mjs';
3
+ export declare class BrowserLogger extends BaseLogger {
4
+ constructor(config?: Partial<LoggerConfig>);
5
+ protected writeLog(entry: LogEntry): void;
6
+ protected createChild(): BaseLogger;
7
+ private formatMessage;
8
+ private getConsoleStyle;
9
+ private shouldLogInProduction;
10
+ protected shouldLog(level: LogLevel): boolean;
11
+ }
12
+ export declare class ConsoleGroupLogger extends BrowserLogger {
13
+ private groupStack;
14
+ group(label: string): void;
15
+ groupCollapsed(label: string): void;
16
+ groupEnd(): void;
17
+ getCurrentGroupStack(): string[];
18
+ getCurrentGroupPath(): string;
19
+ time(label: string): void;
20
+ timeEnd(label: string): void;
21
+ trace(message: string, metadata?: any): void;
22
+ count(label?: string): void;
23
+ countReset(label?: string): void;
24
+ table(data: any): void;
25
+ }
26
+ export declare class PerformanceLogger extends BrowserLogger {
27
+ mark(name: string): void;
28
+ measure(name: string, startMark?: string, endMark?: string): void;
29
+ clearMarks(name?: string): void;
30
+ clearMeasures(name?: string): void;
31
+ }
@@ -0,0 +1,16 @@
1
+ import { BaseLogger } from '../core/logger.cjs';
2
+ import { LogEntry, LoggerConfig, LogLevel } from '../core/types.cjs';
3
+ export declare class NodeLogger extends BaseLogger {
4
+ private winston?;
5
+ constructor(config?: Partial<LoggerConfig>);
6
+ private initializeWinston;
7
+ private createWinstonLogger;
8
+ protected writeLog(entry: LogEntry): void;
9
+ protected createChild(): BaseLogger;
10
+ private writeToConsole;
11
+ private getWinstonLevel;
12
+ setLevel(level: LogLevel): void;
13
+ }
14
+ export declare function createMorganStream(logger: NodeLogger): {
15
+ write: (message: string) => void;
16
+ };
@@ -0,0 +1,16 @@
1
+ import { BaseLogger } from '../core/logger.mjs';
2
+ import { LogEntry, LoggerConfig, LogLevel } from '../core/types.mjs';
3
+ export declare class NodeLogger extends BaseLogger {
4
+ private winston?;
5
+ constructor(config?: Partial<LoggerConfig>);
6
+ private initializeWinston;
7
+ private createWinstonLogger;
8
+ protected writeLog(entry: LogEntry): void;
9
+ protected createChild(): BaseLogger;
10
+ private writeToConsole;
11
+ private getWinstonLevel;
12
+ setLevel(level: LogLevel): void;
13
+ }
14
+ export declare function createMorganStream(logger: NodeLogger): {
15
+ write: (message: string) => void;
16
+ };
@@ -0,0 +1,5 @@
1
+ import { LoggerConfig } from '../core/types.cjs';
2
+ export declare function getDefaultConfig(): LoggerConfig;
3
+ export declare function loadConfigFromEnvironment(): Partial<LoggerConfig>;
4
+ export declare function loadConfigFromFile(configPath?: string): Promise<Partial<LoggerConfig>>;
5
+ export declare function mergeConfigs(...configs: Partial<LoggerConfig>[]): LoggerConfig;
@@ -0,0 +1,5 @@
1
+ import { LoggerConfig } from '../core/types.mjs';
2
+ export declare function getDefaultConfig(): LoggerConfig;
3
+ export declare function loadConfigFromEnvironment(): Partial<LoggerConfig>;
4
+ export declare function loadConfigFromFile(configPath?: string): Promise<Partial<LoggerConfig>>;
5
+ export declare function mergeConfigs(...configs: Partial<LoggerConfig>[]): LoggerConfig;
@@ -0,0 +1,31 @@
1
+ import { LogEntry, LogLevel } from '../core/types.cjs';
2
+ /**
3
+ * Format a log entry for output in different formats.
4
+ * @param entry - The log entry to format
5
+ * @param format - Output format ('json' or 'text')
6
+ * @returns Formatted log string
7
+ * @example
8
+ * ```typescript
9
+ * const entry: LogEntry = {
10
+ * timestamp: new Date(),
11
+ * level: LogLevel.INFO,
12
+ * message: 'User logged in',
13
+ * metadata: { userId: 123 },
14
+ * runtime: 'node'
15
+ * };
16
+ *
17
+ * const textFormat = formatLogEntry(entry, 'text');
18
+ * // Result: "[2024-01-01T12:00:00.000Z] INFO: User logged in {\"userId\":123}"
19
+ *
20
+ * const jsonFormat = formatLogEntry(entry, 'json');
21
+ * // Result: {"timestamp":"2024-01-01T12:00:00.000Z","level":"info","message":"User logged in","metadata":{"userId":123},"runtime":"node"}
22
+ * ```
23
+ */
24
+ export declare function formatLogEntry(entry: LogEntry, format?: 'json' | 'text'): string;
25
+ /**
26
+ * Format log level as a colored string for terminal output.
27
+ * @param level - The log level to format
28
+ * @param colorize - Whether to apply ANSI color codes
29
+ * @returns Formatted level string with optional colors
30
+ */
31
+ export declare function formatLevel(level: LogLevel, colorize?: boolean): string;
@@ -0,0 +1,31 @@
1
+ import { LogEntry, LogLevel } from '../core/types.mjs';
2
+ /**
3
+ * Format a log entry for output in different formats.
4
+ * @param entry - The log entry to format
5
+ * @param format - Output format ('json' or 'text')
6
+ * @returns Formatted log string
7
+ * @example
8
+ * ```typescript
9
+ * const entry: LogEntry = {
10
+ * timestamp: new Date(),
11
+ * level: LogLevel.INFO,
12
+ * message: 'User logged in',
13
+ * metadata: { userId: 123 },
14
+ * runtime: 'node'
15
+ * };
16
+ *
17
+ * const textFormat = formatLogEntry(entry, 'text');
18
+ * // Result: "[2024-01-01T12:00:00.000Z] INFO: User logged in {\"userId\":123}"
19
+ *
20
+ * const jsonFormat = formatLogEntry(entry, 'json');
21
+ * // Result: {"timestamp":"2024-01-01T12:00:00.000Z","level":"info","message":"User logged in","metadata":{"userId":123},"runtime":"node"}
22
+ * ```
23
+ */
24
+ export declare function formatLogEntry(entry: LogEntry, format?: 'json' | 'text'): string;
25
+ /**
26
+ * Format log level as a colored string for terminal output.
27
+ * @param level - The log level to format
28
+ * @param colorize - Whether to apply ANSI color codes
29
+ * @returns Formatted level string with optional colors
30
+ */
31
+ export declare function formatLevel(level: LogLevel, colorize?: boolean): string;
@@ -0,0 +1,31 @@
1
+ import { RuntimeInfo } from '../core/types.cjs';
2
+ /**
3
+ * Detects the current JavaScript runtime environment and its capabilities.
4
+ * @returns Information about the detected runtime
5
+ * @example
6
+ * ```typescript
7
+ * const runtime = detectRuntime();
8
+ * console.log(`Running on: ${runtime.name} ${runtime.version}`);
9
+ * ```
10
+ */
11
+ export declare function detectRuntime(): RuntimeInfo;
12
+ /**
13
+ * Check if the current runtime is Node.js.
14
+ * @returns True if running in Node.js
15
+ */
16
+ export declare function isNode(): boolean;
17
+ /**
18
+ * Check if the current runtime is a browser.
19
+ * @returns True if running in a browser
20
+ */
21
+ export declare function isBrowser(): boolean;
22
+ /**
23
+ * Check if the current runtime is Deno.
24
+ * @returns True if running in Deno
25
+ */
26
+ export declare function isDeno(): boolean;
27
+ /**
28
+ * Check if the current runtime is Bun.
29
+ * @returns True if running in Bun
30
+ */
31
+ export declare function isBun(): boolean;
@@ -0,0 +1,31 @@
1
+ import { RuntimeInfo } from '../core/types.mjs';
2
+ /**
3
+ * Detects the current JavaScript runtime environment and its capabilities.
4
+ * @returns Information about the detected runtime
5
+ * @example
6
+ * ```typescript
7
+ * const runtime = detectRuntime();
8
+ * console.log(`Running on: ${runtime.name} ${runtime.version}`);
9
+ * ```
10
+ */
11
+ export declare function detectRuntime(): RuntimeInfo;
12
+ /**
13
+ * Check if the current runtime is Node.js.
14
+ * @returns True if running in Node.js
15
+ */
16
+ export declare function isNode(): boolean;
17
+ /**
18
+ * Check if the current runtime is a browser.
19
+ * @returns True if running in a browser
20
+ */
21
+ export declare function isBrowser(): boolean;
22
+ /**
23
+ * Check if the current runtime is Deno.
24
+ * @returns True if running in Deno
25
+ */
26
+ export declare function isDeno(): boolean;
27
+ /**
28
+ * Check if the current runtime is Bun.
29
+ * @returns True if running in Bun
30
+ */
31
+ export declare function isBun(): boolean;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Safely stringify an object to JSON, handling circular references,
3
+ * Error objects, functions, and other non-serializable values.
4
+ * @param obj - The object to stringify
5
+ * @param space - Number of spaces for pretty-printing (optional)
6
+ * @returns JSON string representation
7
+ */
8
+ export declare function safeStringify(obj: any, space?: number): string;
9
+ /**
10
+ * Filter out sensitive data from an object before logging.
11
+ * @param obj - The object to filter
12
+ * @param sensitiveKeys - Array of key names to redact (case-insensitive)
13
+ * @returns A new object with sensitive values replaced with '[REDACTED]'
14
+ * @example
15
+ * ```typescript
16
+ * const data = { username: 'john', password: 'secret123' };
17
+ * const filtered = filterSensitiveData(data);
18
+ * // Result: { username: 'john', password: '[REDACTED]' }
19
+ * ```
20
+ */
21
+ export declare function filterSensitiveData(obj: any, sensitiveKeys?: string[]): any;
22
+ /**
23
+ * Serialize Error objects to plain objects for logging.
24
+ * @param error - The error to serialize
25
+ * @returns Serialized error object or original value if not an Error
26
+ * @example
27
+ * ```typescript
28
+ * const error = new Error('Something went wrong');
29
+ * const serialized = serializeError(error);
30
+ * // Result: { name: 'Error', message: 'Something went wrong', stack: '...' }
31
+ * ```
32
+ */
33
+ export declare function serializeError(error: any): any;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Safely stringify an object to JSON, handling circular references,
3
+ * Error objects, functions, and other non-serializable values.
4
+ * @param obj - The object to stringify
5
+ * @param space - Number of spaces for pretty-printing (optional)
6
+ * @returns JSON string representation
7
+ */
8
+ export declare function safeStringify(obj: any, space?: number): string;
9
+ /**
10
+ * Filter out sensitive data from an object before logging.
11
+ * @param obj - The object to filter
12
+ * @param sensitiveKeys - Array of key names to redact (case-insensitive)
13
+ * @returns A new object with sensitive values replaced with '[REDACTED]'
14
+ * @example
15
+ * ```typescript
16
+ * const data = { username: 'john', password: 'secret123' };
17
+ * const filtered = filterSensitiveData(data);
18
+ * // Result: { username: 'john', password: '[REDACTED]' }
19
+ * ```
20
+ */
21
+ export declare function filterSensitiveData(obj: any, sensitiveKeys?: string[]): any;
22
+ /**
23
+ * Serialize Error objects to plain objects for logging.
24
+ * @param error - The error to serialize
25
+ * @returns Serialized error object or original value if not an Error
26
+ * @example
27
+ * ```typescript
28
+ * const error = new Error('Something went wrong');
29
+ * const serialized = serializeError(error);
30
+ * // Result: { name: 'Error', message: 'Something went wrong', stack: '...' }
31
+ * ```
32
+ */
33
+ export declare function serializeError(error: any): any;
package/package.json CHANGED
@@ -1,47 +1,96 @@
1
1
  {
2
2
  "name": "logan-logger",
3
- "version": "1.1.19",
3
+ "version": "1.1.20",
4
4
  "packageManager": "pnpm@11.9.0",
5
5
  "description": "Universal TypeScript logging library for all JavaScript runtimes",
6
- "main": "dist/index.js",
7
- "module": "dist/index.esm.js",
6
+ "main": "dist/index.cjs",
7
+ "module": "dist/index.mjs",
8
8
  "types": "dist/index.d.ts",
9
+ "typesVersions": {
10
+ "*": {
11
+ "node": [
12
+ "dist/node.d.ts"
13
+ ],
14
+ "deno": [
15
+ "dist/deno.d.ts"
16
+ ],
17
+ "bun": [
18
+ "dist/bun.d.ts"
19
+ ],
20
+ "browser": [
21
+ "dist/browser.d.ts"
22
+ ]
23
+ }
24
+ },
9
25
  "exports": {
10
26
  ".": {
11
- "types": "./dist/index.d.ts",
12
- "import": "./dist/index.esm.js",
13
- "require": "./dist/index.js"
27
+ "import": {
28
+ "types": "./dist/index.d.mts",
29
+ "default": "./dist/index.mjs"
30
+ },
31
+ "require": {
32
+ "types": "./dist/index.d.cts",
33
+ "default": "./dist/index.cjs"
34
+ },
35
+ "default": "./dist/index.mjs"
14
36
  },
15
37
  "./node": {
16
- "types": "./dist/node.d.ts",
17
- "import": "./dist/node.esm.js",
18
- "require": "./dist/node.js"
38
+ "import": {
39
+ "types": "./dist/node.d.mts",
40
+ "default": "./dist/node.mjs"
41
+ },
42
+ "require": {
43
+ "types": "./dist/node.d.cts",
44
+ "default": "./dist/node.cjs"
45
+ },
46
+ "default": "./dist/node.mjs"
19
47
  },
20
48
  "./deno": {
21
- "types": "./dist/deno.d.ts",
22
- "import": "./dist/deno.esm.js",
23
- "require": "./dist/deno.js"
49
+ "import": {
50
+ "types": "./dist/deno.d.mts",
51
+ "default": "./dist/deno.mjs"
52
+ },
53
+ "require": {
54
+ "types": "./dist/deno.d.cts",
55
+ "default": "./dist/deno.cjs"
56
+ },
57
+ "default": "./dist/deno.mjs"
24
58
  },
25
59
  "./bun": {
26
- "types": "./dist/bun.d.ts",
27
- "import": "./dist/bun.esm.js",
28
- "require": "./dist/bun.js"
60
+ "import": {
61
+ "types": "./dist/bun.d.mts",
62
+ "default": "./dist/bun.mjs"
63
+ },
64
+ "require": {
65
+ "types": "./dist/bun.d.cts",
66
+ "default": "./dist/bun.cjs"
67
+ },
68
+ "default": "./dist/bun.mjs"
29
69
  },
30
70
  "./browser": {
31
- "types": "./dist/browser.d.ts",
32
- "import": "./dist/browser.esm.js",
33
- "require": "./dist/browser.js"
71
+ "import": {
72
+ "types": "./dist/browser.d.mts",
73
+ "default": "./dist/browser.mjs"
74
+ },
75
+ "require": {
76
+ "types": "./dist/browser.d.cts",
77
+ "default": "./dist/browser.cjs"
78
+ },
79
+ "default": "./dist/browser.mjs"
34
80
  }
35
81
  },
36
82
  "scripts": {
37
- "build": "pnpm build:clean && pnpm build:lib",
83
+ "build": "pnpm build:clean && pnpm build:lib && pnpm build:types",
38
84
  "build:clean": "rm -rf dist",
39
85
  "build:lib": "vite build",
86
+ "build:types": "node ./scripts/prepare-package-types.mjs",
40
87
  "dev": "bun run src/index.ts",
41
88
  "test": "vitest run --reporter=default",
89
+ "test:package": "node ./scripts/verify-package-consumers.mjs",
42
90
  "test:watch": "vitest",
43
91
  "test:ui": "vitest --ui",
44
92
  "test:coverage": "vitest run --coverage",
93
+ "lint:package": "node ./scripts/validate-package.mjs",
45
94
  "lint": "biome lint src",
46
95
  "lint:fix": "biome lint --write src",
47
96
  "format": "biome format --write src",
@@ -61,9 +110,11 @@
61
110
  "author": "Logan Lindquist Land",
62
111
  "license": "MIT",
63
112
  "devDependencies": {
113
+ "@arethetypeswrong/cli": "^0.18.2",
64
114
  "@biomejs/biome": "^2.4.7",
65
115
  "@types/node": "^25.5.0",
66
116
  "@vitest/ui": "^4.1.0",
117
+ "publint": "^0.3.15",
67
118
  "typescript": "^5.9.3",
68
119
  "vite": "^8.2.2",
69
120
  "vite-plugin-dts": "^4.5.4",
@@ -1 +0,0 @@
1
- var e=require("./factory-Uhw2LFdb.js").f(((e,t)=>{t.exports={}}));Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return e()}});
package/dist/browser.js DELETED
@@ -1 +0,0 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./browser-D9bA4EUQ.js"),t=require("./formatting-BHJ25M3U.js");function n(){let t=e.l();return{level:e.c.INFO,format:`text`,timestamp:!0,colorize:t.capabilities.colorSupport,metadata:{},transports:[{type:`console`,options:{}}]}}function r(){return typeof process<`u`&&process.env?process.env.NODE_ENV||process.env.NEXT_PUBLIC_APP_ENV||process.env.ENVIRONMENT||`development`:typeof window<`u`&&globalThis.__ENV__||`development`}function i(t){switch(t){case`production`:return e.c.ERROR;case`staging`:case`test`:return e.c.WARN;case`development`:case`dev`:return e.c.DEBUG;default:return e.c.INFO}}function a(t={}){let r=n(),i={...r,...t,metadata:{...r.metadata,...t.metadata}};return new e.t(i)}function o(){let e=r();return a({level:i(e),colorize:e!==`production`,timestamp:!0,format:e===`production`?`json`:`text`})}var s=o(),c={debug:(e,t)=>s.debug(e,t),info:(e,t)=>s.info(e,t),warn:(e,t)=>s.warn(e,t),error:(e,t)=>s.error(e,t)};exports.BrowserLogger=e.t,exports.ConsoleGroupLogger=e.n,exports.LogLevel=e.c,exports.PerformanceLogger=e.r,exports.createLogger=a,exports.createLoggerForEnvironment=o,exports.detectRuntime=e.l,exports.filterSensitiveData=e.i,exports.formatLevel=t.t,exports.formatLogEntry=t.n,exports.isBrowser=e.u,exports.isBun=e.d,exports.isDeno=e.f,exports.isNode=e.p,exports.log=c,exports.logger=s,exports.safeStringify=e.a,exports.serializeError=e.o;
package/dist/bun.js DELETED
@@ -1 +0,0 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./factory-Uhw2LFdb.js"),t=require("./browser-D9bA4EUQ.js"),n=require("./formatting-BHJ25M3U.js");exports.NodeLogger=e.u,exports.createLogger=e.n,exports.createLoggerForEnvironment=e.r,exports.detectRuntime=t.l,exports.filterSensitiveData=t.i,exports.formatLevel=n.t,exports.formatLogEntry=n.n,exports.getDefaultConfig=e.o,exports.isBrowser=t.u,exports.isBun=t.d,exports.isDeno=t.f,exports.isNode=t.p,exports.loadConfigFromEnvironment=e.s,exports.loadConfigFromFile=e.c,exports.mergeConfigs=e.l,exports.safeStringify=t.a,exports.serializeError=t.o;
package/dist/deno.js DELETED
@@ -1 +0,0 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./factory-Uhw2LFdb.js"),t=require("./browser-D9bA4EUQ.js"),n=require("./formatting-BHJ25M3U.js");exports.BrowserLogger=t.t,exports.ConsoleGroupLogger=t.n,exports.PerformanceLogger=t.r,exports.createLogger=e.n,exports.createLoggerForEnvironment=e.r,exports.detectRuntime=t.l,exports.filterSensitiveData=t.i,exports.formatLevel=n.t,exports.formatLogEntry=n.n,exports.getDefaultConfig=e.o,exports.isBrowser=t.u,exports.isBun=t.d,exports.isDeno=t.f,exports.isNode=t.p,exports.loadConfigFromEnvironment=e.s,exports.loadConfigFromFile=e.c,exports.mergeConfigs=e.l,exports.safeStringify=t.a,exports.serializeError=t.o;
@@ -1 +0,0 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,o)=>(o=n==null?{}:e(i(n)),s(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));const l=require("./browser-D9bA4EUQ.js");var u=class e extends l.s{constructor(e={}){super(e),this.initializeWinston()}async initializeWinston(){try{let e=await import(`winston`);this.winston=this.createWinstonLogger(e)}catch(e){console.warn(`[logan-logger] Winston not found, falling back to console logging:`,e)}}createWinstonLogger(e){let t=e.format.combine(e.format.timestamp({format:`YYYY-MM-DD HH:mm:ss`}),e.format.errors({stack:!0}),e.format.json(),e.format.prettyPrint()),n=e.format.combine(e.format.colorize(),e.format.timestamp({format:`HH:mm:ss`}),e.format.printf(({timestamp:e,level:t,message:n,...r})=>`${e} [${t}]: ${n} ${Object.keys(r).length?JSON.stringify(r,null,2):``}`)),r=e.createLogger({level:this.getWinstonLevel(this.level),format:t,transports:[new e.transports.Console({format:process.env.NODE_ENV===`production`?t:n})]});return process.env.NODE_ENV===`production`&&(r.add(new e.transports.File({filename:`logs/error.log`,level:`error`,maxsize:5242880,maxFiles:5})),r.add(new e.transports.File({filename:`logs/combined.log`,maxsize:5242880,maxFiles:10}))),r}writeLog(e){this.winston?this.winston.log({level:this.getWinstonLevel(e.level),message:e.message,timestamp:e.timestamp,...e.metadata}):this.writeToConsole(e)}createChild(){return new e(this.config)}writeToConsole(e){let t=e.timestamp.toISOString(),n=l.c[e.level].toLowerCase(),r=e.metadata?` ${l.a(e.metadata)}`:``,i=`[${t}] ${n.toUpperCase()}: ${e.message}${r}`;switch(e.level){case l.c.DEBUG:console.debug(i);break;case l.c.INFO:console.info(i);break;case l.c.WARN:console.warn(i);break;case l.c.ERROR:console.error(i)}}getWinstonLevel(e){switch(e){case l.c.DEBUG:return`debug`;case l.c.INFO:return`info`;case l.c.WARN:return`warn`;case l.c.ERROR:return`error`;default:return`info`}}setLevel(e){super.setLevel(e),this.winston&&(this.winston.level=this.getWinstonLevel(e))}};function d(e){return{write:t=>{e.info(t.trim())}}}function f(){let e=l.l();return{level:l.c.INFO,format:`text`,timestamp:!0,colorize:e.capabilities.colorSupport,metadata:{},transports:[{type:`console`,options:{}}]}}function p(){let e={};if(typeof process<`u`&&process.env){let t=process.env;t.LOG_LEVEL&&(e.level=v(t.LOG_LEVEL)),t.LOG_FORMAT&&[`json`,`text`].includes(t.LOG_FORMAT)&&(e.format=t.LOG_FORMAT),t.LOG_TIMESTAMP&&(e.timestamp=t.LOG_TIMESTAMP.toLowerCase()===`true`),t.LOG_COLOR&&(e.colorize=t.LOG_COLOR.toLowerCase()===`true`)}return e}async function m(e){let t=l.l();if(!t.capabilities.fileSystem)return{};let n=e?[e]:[`logan.config.json`,`logan.config.js`,`.loganrc`,`package.json`];for(let e of n)try{if(t.name===`node`)return await h(e);if(t.name===`deno`)return await g(e);if(t.name===`bun`)return await _(e)}catch{}return{}}async function h(e){try{let t=await Promise.resolve().then(()=>c(require("./__vite-browser-external-DcEHEw3a.js").default)),n=await Promise.resolve().then(()=>c(require("./__vite-browser-external-DcEHEw3a.js").default));if(e.endsWith(`.json`)){let n=await t.readFile(e,`utf-8`),r=JSON.parse(n);return e===`package.json`?r.logan||{}:r}if(e.endsWith(`.js`)){let t=await import(`file://${n.resolve(e)}`);return t.default||t}}catch{}return{}}async function g(e){try{if(e.endsWith(`.json`)){let t=await globalThis.Deno.readTextFile(e),n=JSON.parse(t);return e===`package.json`?n.logan||{}:n}if(e.endsWith(`.js`)){let t=await import(`./${e}`);return t.default||t}}catch{}return{}}async function _(e){return h(e)}function v(e){switch(e.toLowerCase()){case`debug`:return l.c.DEBUG;case`info`:return l.c.INFO;case`warn`:case`warning`:return l.c.WARN;case`error`:return l.c.ERROR;case`silent`:case`none`:return l.c.SILENT;default:return l.c.INFO}}function y(...e){let t=f();return e.reduce((e,t)=>({...e,...t,metadata:{...e.metadata,...t.metadata},transports:t.transports||e.transports}),t)}var b=class e{static create(t={}){let n=l.l(),r=e.mergeConfig(t);switch(n.name){case`node`:return new u(r);case`deno`:return new l.t(r);case`bun`:return new u(r);case`browser`:case`webworker`:return new l.t(r);default:return new l.t(r)}}static createChild(e,t){return e.child(t)}static mergeConfig(e){let t=f();return{...t,...e,metadata:{...t.metadata,...e.metadata}}}};function x(e){return b.create(e)}function S(){let e=C();return x({level:w(e),colorize:e!==`production`,timestamp:!0,format:e===`production`?`json`:`text`})}function C(){return typeof process<`u`&&process.env?process.env.NODE_ENV||process.env.NEXT_PUBLIC_APP_ENV||process.env.ENVIRONMENT||`development`:typeof window<`u`&&globalThis.__ENV__||`development`}function w(e){switch(e){case`production`:return l.c.ERROR;case`staging`:case`test`:return l.c.WARN;case`development`:case`dev`:return l.c.DEBUG;default:return l.c.INFO}}function T(e){switch(e.toLowerCase()){case`debug`:return l.c.DEBUG;case`info`:return l.c.INFO;case`warn`:case`warning`:return l.c.WARN;case`error`:return l.c.ERROR;case`silent`:case`none`:return l.c.SILENT;default:return l.c.INFO}}function E(e){switch(e){case l.c.DEBUG:return`debug`;case l.c.INFO:return`info`;case l.c.WARN:return`warn`;case l.c.ERROR:return`error`;case l.c.SILENT:return`silent`;default:return`info`}}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return u}});
@@ -1 +0,0 @@
1
- const e=require("./browser-D9bA4EUQ.js");function t(t,n=`text`){if(n===`json`){let n={timestamp:t.timestamp.toISOString(),level:e.c[t.level].toLowerCase(),message:t.message,runtime:t.runtime};return t.metadata!==void 0&&(n.metadata=t.metadata),e.a(n)}let r=t.timestamp.toISOString(),i=e.c[t.level].toUpperCase(),a=t.metadata?` ${e.a(t.metadata)}`:``;return`[${r}] ${i}: ${t.message}${a}`}function n(t,n=!1){let r=e.c[t].toUpperCase();if(!n)return r;let i={[e.c.DEBUG]:`\x1B[36m`,[e.c.INFO]:`\x1B[32m`,[e.c.WARN]:`\x1B[33m`,[e.c.ERROR]:`\x1B[31m`,[e.c.SILENT]:`\x1B[37m`};return`${i[t]||i[e.c.INFO]}${r}`}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return n}});
package/dist/index.js DELETED
@@ -1 +0,0 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./factory-Uhw2LFdb.js"),t=require("./browser-D9bA4EUQ.js"),n=require("./formatting-BHJ25M3U.js");var r=e.r(),i={debug:(e,t)=>r.debug(e,t),info:(e,t)=>r.info(e,t),warn:(e,t)=>r.warn(e,t),error:(e,t)=>r.error(e,t)};exports.BaseLogger=t.s,exports.BrowserLogger=t.t,exports.ConsoleGroupLogger=t.n,exports.LogLevel=t.c,exports.LoggerFactory=e.t,exports.PerformanceLogger=t.r,exports.createLogger=e.n,exports.createLoggerForEnvironment=e.r,exports.detectRuntime=t.l,exports.filterSensitiveData=t.i,exports.formatLevel=n.t,exports.formatLogEntry=n.n,exports.getDefaultConfig=e.o,exports.isBrowser=t.u,exports.isBun=t.d,exports.isDeno=t.f,exports.isNode=t.p,exports.loadConfigFromEnvironment=e.s,exports.loadConfigFromFile=e.c,exports.log=i,exports.logLevelToString=e.i,exports.logger=r,exports.mergeConfigs=e.l,exports.safeStringify=t.a,exports.serializeError=t.o,exports.stringToLogLevel=e.a;
package/dist/node.js DELETED
@@ -1 +0,0 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./factory-Uhw2LFdb.js");exports.NodeLogger=e.u,exports.createLogger=e.n,exports.createLoggerForEnvironment=e.r,exports.createMorganStream=e.d;