@nahisaho/musubix-core 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.
- package/bin/musubix.js +18 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.js +27 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/auth/auth-manager.d.ts +320 -0
- package/dist/auth/auth-manager.d.ts.map +1 -0
- package/dist/auth/auth-manager.js +580 -0
- package/dist/auth/auth-manager.js.map +1 -0
- package/dist/cli/base.d.ts +58 -0
- package/dist/cli/base.d.ts.map +1 -0
- package/dist/cli/base.js +93 -0
- package/dist/cli/base.js.map +1 -0
- package/dist/cli/commands/help.d.ts +17 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +228 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/index.d.ts +14 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +25 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +38 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +258 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/codegen/coding-standards.d.ts +250 -0
- package/dist/codegen/coding-standards.d.ts.map +1 -0
- package/dist/codegen/coding-standards.js +976 -0
- package/dist/codegen/coding-standards.js.map +1 -0
- package/dist/codegen/coverage-reporter.d.ts +264 -0
- package/dist/codegen/coverage-reporter.d.ts.map +1 -0
- package/dist/codegen/coverage-reporter.js +697 -0
- package/dist/codegen/coverage-reporter.js.map +1 -0
- package/dist/codegen/dependency-analyzer.d.ts +271 -0
- package/dist/codegen/dependency-analyzer.d.ts.map +1 -0
- package/dist/codegen/dependency-analyzer.js +661 -0
- package/dist/codegen/dependency-analyzer.js.map +1 -0
- package/dist/codegen/generator.d.ts +275 -0
- package/dist/codegen/generator.d.ts.map +1 -0
- package/dist/codegen/generator.js +781 -0
- package/dist/codegen/generator.js.map +1 -0
- package/dist/codegen/index.d.ts +18 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +27 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/integration-test-generator.d.ts +312 -0
- package/dist/codegen/integration-test-generator.d.ts.map +1 -0
- package/dist/codegen/integration-test-generator.js +765 -0
- package/dist/codegen/integration-test-generator.js.map +1 -0
- package/dist/codegen/pattern-conformance.d.ts +309 -0
- package/dist/codegen/pattern-conformance.d.ts.map +1 -0
- package/dist/codegen/pattern-conformance.js +590 -0
- package/dist/codegen/pattern-conformance.js.map +1 -0
- package/dist/codegen/quality-metrics.d.ts +235 -0
- package/dist/codegen/quality-metrics.d.ts.map +1 -0
- package/dist/codegen/quality-metrics.js +439 -0
- package/dist/codegen/quality-metrics.js.map +1 -0
- package/dist/codegen/security-scanner.d.ts +179 -0
- package/dist/codegen/security-scanner.d.ts.map +1 -0
- package/dist/codegen/security-scanner.js +495 -0
- package/dist/codegen/security-scanner.js.map +1 -0
- package/dist/codegen/static-analyzer.d.ts +188 -0
- package/dist/codegen/static-analyzer.d.ts.map +1 -0
- package/dist/codegen/static-analyzer.js +490 -0
- package/dist/codegen/static-analyzer.js.map +1 -0
- package/dist/codegen/unit-test-generator.d.ts +289 -0
- package/dist/codegen/unit-test-generator.d.ts.map +1 -0
- package/dist/codegen/unit-test-generator.js +634 -0
- package/dist/codegen/unit-test-generator.js.map +1 -0
- package/dist/design/adr-generator.d.ts +227 -0
- package/dist/design/adr-generator.d.ts.map +1 -0
- package/dist/design/adr-generator.js +423 -0
- package/dist/design/adr-generator.js.map +1 -0
- package/dist/design/c4-generator.d.ts +267 -0
- package/dist/design/c4-generator.d.ts.map +1 -0
- package/dist/design/c4-generator.js +453 -0
- package/dist/design/c4-generator.js.map +1 -0
- package/dist/design/framework-optimizer.d.ts +190 -0
- package/dist/design/framework-optimizer.d.ts.map +1 -0
- package/dist/design/framework-optimizer.js +589 -0
- package/dist/design/framework-optimizer.js.map +1 -0
- package/dist/design/index.d.ts +12 -0
- package/dist/design/index.d.ts.map +1 -0
- package/dist/design/index.js +13 -0
- package/dist/design/index.js.map +1 -0
- package/dist/design/pattern-detector.d.ts +270 -0
- package/dist/design/pattern-detector.d.ts.map +1 -0
- package/dist/design/pattern-detector.js +621 -0
- package/dist/design/pattern-detector.js.map +1 -0
- package/dist/design/solid-validator.d.ts +188 -0
- package/dist/design/solid-validator.d.ts.map +1 -0
- package/dist/design/solid-validator.js +579 -0
- package/dist/design/solid-validator.js.map +1 -0
- package/dist/error/data-persistence.d.ts +311 -0
- package/dist/error/data-persistence.d.ts.map +1 -0
- package/dist/error/data-persistence.js +586 -0
- package/dist/error/data-persistence.js.map +1 -0
- package/dist/error/graceful-degradation.d.ts +309 -0
- package/dist/error/graceful-degradation.d.ts.map +1 -0
- package/dist/error/graceful-degradation.js +510 -0
- package/dist/error/graceful-degradation.js.map +1 -0
- package/dist/error/index.d.ts +11 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +19 -0
- package/dist/error/index.js.map +1 -0
- package/dist/explanation/explanation-generator.d.ts +228 -0
- package/dist/explanation/explanation-generator.d.ts.map +1 -0
- package/dist/explanation/explanation-generator.js +662 -0
- package/dist/explanation/explanation-generator.js.map +1 -0
- package/dist/explanation/index.d.ts +11 -0
- package/dist/explanation/index.d.ts.map +1 -0
- package/dist/explanation/index.js +19 -0
- package/dist/explanation/index.js.map +1 -0
- package/dist/explanation/reasoning-chain.d.ts +314 -0
- package/dist/explanation/reasoning-chain.d.ts.map +1 -0
- package/dist/explanation/reasoning-chain.js +414 -0
- package/dist/explanation/reasoning-chain.js.map +1 -0
- package/dist/explanation/visual-explanation.d.ts +315 -0
- package/dist/explanation/visual-explanation.d.ts.map +1 -0
- package/dist/explanation/visual-explanation.js +667 -0
- package/dist/explanation/visual-explanation.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/requirements/decomposer.d.ts +235 -0
- package/dist/requirements/decomposer.d.ts.map +1 -0
- package/dist/requirements/decomposer.js +587 -0
- package/dist/requirements/decomposer.js.map +1 -0
- package/dist/requirements/related-finder.d.ts +261 -0
- package/dist/requirements/related-finder.d.ts.map +1 -0
- package/dist/requirements/related-finder.js +629 -0
- package/dist/requirements/related-finder.js.map +1 -0
- package/dist/traceability/impact.d.ts +196 -0
- package/dist/traceability/impact.d.ts.map +1 -0
- package/dist/traceability/impact.js +438 -0
- package/dist/traceability/impact.js.map +1 -0
- package/dist/traceability/index.d.ts +9 -0
- package/dist/traceability/index.d.ts.map +1 -0
- package/dist/traceability/index.js +10 -0
- package/dist/traceability/index.js.map +1 -0
- package/dist/traceability/manager.d.ts +266 -0
- package/dist/traceability/manager.d.ts.map +1 -0
- package/dist/traceability/manager.js +412 -0
- package/dist/traceability/manager.js.map +1 -0
- package/dist/types/common.d.ts +294 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +15 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/ears.d.ts +158 -0
- package/dist/types/ears.d.ts.map +1 -0
- package/dist/types/ears.js +33 -0
- package/dist/types/ears.js.map +1 -0
- package/dist/types/errors.d.ts +176 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +55 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/data-protector.d.ts +122 -0
- package/dist/utils/data-protector.d.ts.map +1 -0
- package/dist/utils/data-protector.js +275 -0
- package/dist/utils/data-protector.js.map +1 -0
- package/dist/utils/error-handler.d.ts +101 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +324 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/i18n-manager.d.ts +259 -0
- package/dist/utils/i18n-manager.d.ts.map +1 -0
- package/dist/utils/i18n-manager.js +554 -0
- package/dist/utils/i18n-manager.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +120 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +237 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/performance-profiler.d.ts +251 -0
- package/dist/utils/performance-profiler.d.ts.map +1 -0
- package/dist/utils/performance-profiler.js +458 -0
- package/dist/utils/performance-profiler.js.map +1 -0
- package/dist/utils/scalability-optimizer.d.ts +294 -0
- package/dist/utils/scalability-optimizer.d.ts.map +1 -0
- package/dist/utils/scalability-optimizer.js +606 -0
- package/dist/utils/scalability-optimizer.js.map +1 -0
- package/dist/utils/structured-logger.d.ts +294 -0
- package/dist/utils/structured-logger.d.ts.map +1 -0
- package/dist/utils/structured-logger.js +630 -0
- package/dist/utils/structured-logger.js.map +1 -0
- package/dist/utils/version-compatibility.d.ts +217 -0
- package/dist/utils/version-compatibility.d.ts.map +1 -0
- package/dist/utils/version-compatibility.js +443 -0
- package/dist/utils/version-compatibility.js.map +1 -0
- package/dist/validators/ears-validator.d.ts +182 -0
- package/dist/validators/ears-validator.d.ts.map +1 -0
- package/dist/validators/ears-validator.js +357 -0
- package/dist/validators/ears-validator.js.map +1 -0
- package/dist/validators/index.d.ts +8 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +9 -0
- package/dist/validators/index.js.map +1 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/package.json +100 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides structured logging with levels, formatting, and output options
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module utils/logger
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-MNT-001 - Logger
|
|
10
|
+
* @see DES-MUSUBIX-001 Section 16.1 - Logger Design
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Log levels
|
|
14
|
+
*/
|
|
15
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';
|
|
16
|
+
/**
|
|
17
|
+
* Log entry structure
|
|
18
|
+
*/
|
|
19
|
+
export interface LogEntry {
|
|
20
|
+
timestamp: string;
|
|
21
|
+
level: LogLevel;
|
|
22
|
+
message: string;
|
|
23
|
+
context?: string;
|
|
24
|
+
data?: Record<string, unknown>;
|
|
25
|
+
error?: {
|
|
26
|
+
name: string;
|
|
27
|
+
message: string;
|
|
28
|
+
stack?: string;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Logger configuration
|
|
33
|
+
*/
|
|
34
|
+
export interface LoggerConfig {
|
|
35
|
+
/** Minimum log level */
|
|
36
|
+
level: LogLevel;
|
|
37
|
+
/** Enable console output */
|
|
38
|
+
console: boolean;
|
|
39
|
+
/** Enable file output */
|
|
40
|
+
file: boolean;
|
|
41
|
+
/** Log file path */
|
|
42
|
+
filePath?: string;
|
|
43
|
+
/** Enable JSON format */
|
|
44
|
+
json: boolean;
|
|
45
|
+
/** Enable colors in console */
|
|
46
|
+
colors: boolean;
|
|
47
|
+
/** Include timestamps */
|
|
48
|
+
timestamps: boolean;
|
|
49
|
+
/** Context prefix */
|
|
50
|
+
context?: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Logger class
|
|
54
|
+
*/
|
|
55
|
+
export declare class Logger {
|
|
56
|
+
private config;
|
|
57
|
+
private context;
|
|
58
|
+
constructor(context?: string, config?: Partial<LoggerConfig>);
|
|
59
|
+
/**
|
|
60
|
+
* Create a child logger with additional context
|
|
61
|
+
*/
|
|
62
|
+
child(context: string): Logger;
|
|
63
|
+
/**
|
|
64
|
+
* Update configuration
|
|
65
|
+
*/
|
|
66
|
+
configure(config: Partial<LoggerConfig>): void;
|
|
67
|
+
/**
|
|
68
|
+
* Log debug message
|
|
69
|
+
*/
|
|
70
|
+
debug(message: string, data?: Record<string, unknown>): void;
|
|
71
|
+
/**
|
|
72
|
+
* Log info message
|
|
73
|
+
*/
|
|
74
|
+
info(message: string, data?: Record<string, unknown>): void;
|
|
75
|
+
/**
|
|
76
|
+
* Log warning message
|
|
77
|
+
*/
|
|
78
|
+
warn(message: string, data?: Record<string, unknown>): void;
|
|
79
|
+
/**
|
|
80
|
+
* Log error message
|
|
81
|
+
*/
|
|
82
|
+
error(message: string, error?: Error, data?: Record<string, unknown>): void;
|
|
83
|
+
/**
|
|
84
|
+
* Log fatal message
|
|
85
|
+
*/
|
|
86
|
+
fatal(message: string, error?: Error, data?: Record<string, unknown>): void;
|
|
87
|
+
/**
|
|
88
|
+
* Log with timing
|
|
89
|
+
*/
|
|
90
|
+
time(label: string): () => void;
|
|
91
|
+
/**
|
|
92
|
+
* Core logging method
|
|
93
|
+
*/
|
|
94
|
+
private log;
|
|
95
|
+
/**
|
|
96
|
+
* Write to console
|
|
97
|
+
*/
|
|
98
|
+
private writeConsole;
|
|
99
|
+
/**
|
|
100
|
+
* Write to file
|
|
101
|
+
*/
|
|
102
|
+
private writeFile;
|
|
103
|
+
/**
|
|
104
|
+
* Format entry as JSON
|
|
105
|
+
*/
|
|
106
|
+
private formatJson;
|
|
107
|
+
/**
|
|
108
|
+
* Format entry as text
|
|
109
|
+
*/
|
|
110
|
+
private formatText;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Global logger instance
|
|
114
|
+
*/
|
|
115
|
+
export declare const logger: Logger;
|
|
116
|
+
/**
|
|
117
|
+
* Create a new logger with context
|
|
118
|
+
*/
|
|
119
|
+
export declare function createLogger(context: string, config?: Partial<LoggerConfig>): Logger;
|
|
120
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAarE;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,KAAK,EAAE,QAAQ,CAAC;IAChB,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,+BAA+B;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,yBAAyB;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA4BD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;IAQ5D;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAK9B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAI9C;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3E;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3E;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,IAAI;IAQ/B;;OAEG;IACH,OAAO,CAAC,GAAG;IAqCX;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;YACW,SAAS;IAevB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,UAAU;CA4CnB;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAe,CAAC;AAEnC;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAEpF"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides structured logging with levels, formatting, and output options
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module utils/logger
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-MNT-001 - Logger
|
|
10
|
+
* @see DES-MUSUBIX-001 Section 16.1 - Logger Design
|
|
11
|
+
*/
|
|
12
|
+
import { appendFile, mkdir } from 'fs/promises';
|
|
13
|
+
import { dirname } from 'path';
|
|
14
|
+
/**
|
|
15
|
+
* Log level priority (lower = more verbose)
|
|
16
|
+
*/
|
|
17
|
+
const LOG_LEVEL_PRIORITY = {
|
|
18
|
+
debug: 0,
|
|
19
|
+
info: 1,
|
|
20
|
+
warn: 2,
|
|
21
|
+
error: 3,
|
|
22
|
+
fatal: 4,
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Default logger configuration
|
|
26
|
+
*/
|
|
27
|
+
const DEFAULT_CONFIG = {
|
|
28
|
+
level: 'info',
|
|
29
|
+
console: true,
|
|
30
|
+
file: false,
|
|
31
|
+
json: false,
|
|
32
|
+
colors: true,
|
|
33
|
+
timestamps: true,
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* ANSI color codes
|
|
37
|
+
*/
|
|
38
|
+
const COLORS = {
|
|
39
|
+
reset: '\x1b[0m',
|
|
40
|
+
dim: '\x1b[2m',
|
|
41
|
+
bold: '\x1b[1m',
|
|
42
|
+
debug: '\x1b[36m', // cyan
|
|
43
|
+
info: '\x1b[32m', // green
|
|
44
|
+
warn: '\x1b[33m', // yellow
|
|
45
|
+
error: '\x1b[31m', // red
|
|
46
|
+
fatal: '\x1b[35m', // magenta
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Logger class
|
|
50
|
+
*/
|
|
51
|
+
export class Logger {
|
|
52
|
+
config;
|
|
53
|
+
context;
|
|
54
|
+
constructor(context, config) {
|
|
55
|
+
this.context = context ?? 'musubix';
|
|
56
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
57
|
+
if (context) {
|
|
58
|
+
this.config.context = context;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Create a child logger with additional context
|
|
63
|
+
*/
|
|
64
|
+
child(context) {
|
|
65
|
+
const childContext = this.context ? `${this.context}:${context}` : context;
|
|
66
|
+
return new Logger(childContext, this.config);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Update configuration
|
|
70
|
+
*/
|
|
71
|
+
configure(config) {
|
|
72
|
+
this.config = { ...this.config, ...config };
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Log debug message
|
|
76
|
+
*/
|
|
77
|
+
debug(message, data) {
|
|
78
|
+
this.log('debug', message, data);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Log info message
|
|
82
|
+
*/
|
|
83
|
+
info(message, data) {
|
|
84
|
+
this.log('info', message, data);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Log warning message
|
|
88
|
+
*/
|
|
89
|
+
warn(message, data) {
|
|
90
|
+
this.log('warn', message, data);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Log error message
|
|
94
|
+
*/
|
|
95
|
+
error(message, error, data) {
|
|
96
|
+
this.log('error', message, data, error);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Log fatal message
|
|
100
|
+
*/
|
|
101
|
+
fatal(message, error, data) {
|
|
102
|
+
this.log('fatal', message, data, error);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Log with timing
|
|
106
|
+
*/
|
|
107
|
+
time(label) {
|
|
108
|
+
const start = performance.now();
|
|
109
|
+
return () => {
|
|
110
|
+
const duration = performance.now() - start;
|
|
111
|
+
this.debug(`${label} completed`, { durationMs: duration.toFixed(2) });
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Core logging method
|
|
116
|
+
*/
|
|
117
|
+
log(level, message, data, error) {
|
|
118
|
+
// Check log level
|
|
119
|
+
if (LOG_LEVEL_PRIORITY[level] < LOG_LEVEL_PRIORITY[this.config.level]) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const entry = {
|
|
123
|
+
timestamp: new Date().toISOString(),
|
|
124
|
+
level,
|
|
125
|
+
message,
|
|
126
|
+
context: this.context,
|
|
127
|
+
data,
|
|
128
|
+
error: error ? {
|
|
129
|
+
name: error.name,
|
|
130
|
+
message: error.message,
|
|
131
|
+
stack: error.stack,
|
|
132
|
+
} : undefined,
|
|
133
|
+
};
|
|
134
|
+
// Console output
|
|
135
|
+
if (this.config.console) {
|
|
136
|
+
this.writeConsole(entry);
|
|
137
|
+
}
|
|
138
|
+
// File output
|
|
139
|
+
if (this.config.file && this.config.filePath) {
|
|
140
|
+
this.writeFile(entry).catch(() => {
|
|
141
|
+
// Silently fail file writes
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Write to console
|
|
147
|
+
*/
|
|
148
|
+
writeConsole(entry) {
|
|
149
|
+
const output = this.config.json
|
|
150
|
+
? this.formatJson(entry)
|
|
151
|
+
: this.formatText(entry);
|
|
152
|
+
switch (entry.level) {
|
|
153
|
+
case 'error':
|
|
154
|
+
case 'fatal':
|
|
155
|
+
console.error(output);
|
|
156
|
+
break;
|
|
157
|
+
case 'warn':
|
|
158
|
+
console.warn(output);
|
|
159
|
+
break;
|
|
160
|
+
default:
|
|
161
|
+
console.log(output);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Write to file
|
|
166
|
+
*/
|
|
167
|
+
async writeFile(entry) {
|
|
168
|
+
if (!this.config.filePath) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const line = this.formatJson(entry) + '\n';
|
|
172
|
+
try {
|
|
173
|
+
await mkdir(dirname(this.config.filePath), { recursive: true });
|
|
174
|
+
await appendFile(this.config.filePath, line);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// Silently fail
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Format entry as JSON
|
|
182
|
+
*/
|
|
183
|
+
formatJson(entry) {
|
|
184
|
+
return JSON.stringify(entry);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Format entry as text
|
|
188
|
+
*/
|
|
189
|
+
formatText(entry) {
|
|
190
|
+
const parts = [];
|
|
191
|
+
// Timestamp
|
|
192
|
+
if (this.config.timestamps) {
|
|
193
|
+
const time = this.config.colors
|
|
194
|
+
? `${COLORS.dim}${entry.timestamp}${COLORS.reset}`
|
|
195
|
+
: entry.timestamp;
|
|
196
|
+
parts.push(time);
|
|
197
|
+
}
|
|
198
|
+
// Level
|
|
199
|
+
const levelUpper = entry.level.toUpperCase().padEnd(5);
|
|
200
|
+
const level = this.config.colors
|
|
201
|
+
? `${COLORS[entry.level]}${levelUpper}${COLORS.reset}`
|
|
202
|
+
: levelUpper;
|
|
203
|
+
parts.push(level);
|
|
204
|
+
// Context
|
|
205
|
+
if (entry.context) {
|
|
206
|
+
const ctx = this.config.colors
|
|
207
|
+
? `${COLORS.dim}[${entry.context}]${COLORS.reset}`
|
|
208
|
+
: `[${entry.context}]`;
|
|
209
|
+
parts.push(ctx);
|
|
210
|
+
}
|
|
211
|
+
// Message
|
|
212
|
+
parts.push(entry.message);
|
|
213
|
+
// Data
|
|
214
|
+
if (entry.data && Object.keys(entry.data).length > 0) {
|
|
215
|
+
parts.push(JSON.stringify(entry.data));
|
|
216
|
+
}
|
|
217
|
+
// Error
|
|
218
|
+
if (entry.error) {
|
|
219
|
+
parts.push(`\n ${entry.error.name}: ${entry.error.message}`);
|
|
220
|
+
if (entry.error.stack) {
|
|
221
|
+
parts.push(`\n${entry.error.stack}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return parts.join(' ');
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Global logger instance
|
|
229
|
+
*/
|
|
230
|
+
export const logger = new Logger();
|
|
231
|
+
/**
|
|
232
|
+
* Create a new logger with context
|
|
233
|
+
*/
|
|
234
|
+
export function createLogger(context, config) {
|
|
235
|
+
return new Logger(context, config);
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance Profiler
|
|
3
|
+
*
|
|
4
|
+
* Profiles and measures system performance
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module utils/performance-profiler
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-PER-001 - Performance Monitoring
|
|
10
|
+
* @see Article VI - Decision Transparency
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Profile entry type
|
|
14
|
+
*/
|
|
15
|
+
export type ProfileEntryType = 'function' | 'api' | 'query' | 'io' | 'custom';
|
|
16
|
+
/**
|
|
17
|
+
* Profile entry
|
|
18
|
+
*/
|
|
19
|
+
export interface ProfileEntry {
|
|
20
|
+
/** Entry ID */
|
|
21
|
+
id: string;
|
|
22
|
+
/** Name */
|
|
23
|
+
name: string;
|
|
24
|
+
/** Type */
|
|
25
|
+
type: ProfileEntryType;
|
|
26
|
+
/** Start time */
|
|
27
|
+
startTime: number;
|
|
28
|
+
/** End time */
|
|
29
|
+
endTime?: number;
|
|
30
|
+
/** Duration (ms) */
|
|
31
|
+
duration?: number;
|
|
32
|
+
/** Parent entry ID */
|
|
33
|
+
parentId?: string;
|
|
34
|
+
/** Child entry IDs */
|
|
35
|
+
children: string[];
|
|
36
|
+
/** Metadata */
|
|
37
|
+
metadata?: Record<string, unknown>;
|
|
38
|
+
/** Memory usage */
|
|
39
|
+
memoryUsage?: {
|
|
40
|
+
heapUsed: number;
|
|
41
|
+
heapTotal: number;
|
|
42
|
+
external: number;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Profile statistics
|
|
47
|
+
*/
|
|
48
|
+
export interface ProfileStats {
|
|
49
|
+
/** Name */
|
|
50
|
+
name: string;
|
|
51
|
+
/** Call count */
|
|
52
|
+
count: number;
|
|
53
|
+
/** Total duration (ms) */
|
|
54
|
+
totalDuration: number;
|
|
55
|
+
/** Average duration (ms) */
|
|
56
|
+
avgDuration: number;
|
|
57
|
+
/** Min duration (ms) */
|
|
58
|
+
minDuration: number;
|
|
59
|
+
/** Max duration (ms) */
|
|
60
|
+
maxDuration: number;
|
|
61
|
+
/** Standard deviation */
|
|
62
|
+
stdDev: number;
|
|
63
|
+
/** Median */
|
|
64
|
+
median: number;
|
|
65
|
+
/** 95th percentile */
|
|
66
|
+
p95: number;
|
|
67
|
+
/** 99th percentile */
|
|
68
|
+
p99: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Memory snapshot
|
|
72
|
+
*/
|
|
73
|
+
export interface MemorySnapshot {
|
|
74
|
+
/** Timestamp */
|
|
75
|
+
timestamp: number;
|
|
76
|
+
/** Heap used */
|
|
77
|
+
heapUsed: number;
|
|
78
|
+
/** Heap total */
|
|
79
|
+
heapTotal: number;
|
|
80
|
+
/** External */
|
|
81
|
+
external: number;
|
|
82
|
+
/** Array buffers */
|
|
83
|
+
arrayBuffers: number;
|
|
84
|
+
/** RSS */
|
|
85
|
+
rss: number;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Performance report
|
|
89
|
+
*/
|
|
90
|
+
export interface PerformanceReport {
|
|
91
|
+
/** Report ID */
|
|
92
|
+
id: string;
|
|
93
|
+
/** Timestamp */
|
|
94
|
+
timestamp: Date;
|
|
95
|
+
/** Duration (ms) */
|
|
96
|
+
duration: number;
|
|
97
|
+
/** Total entries */
|
|
98
|
+
totalEntries: number;
|
|
99
|
+
/** Entries by type */
|
|
100
|
+
byType: Record<ProfileEntryType, number>;
|
|
101
|
+
/** Top slowest */
|
|
102
|
+
slowest: Array<{
|
|
103
|
+
name: string;
|
|
104
|
+
duration: number;
|
|
105
|
+
}>;
|
|
106
|
+
/** Statistics */
|
|
107
|
+
stats: ProfileStats[];
|
|
108
|
+
/** Memory snapshots */
|
|
109
|
+
memorySnapshots: MemorySnapshot[];
|
|
110
|
+
/** Hotspots */
|
|
111
|
+
hotspots: Array<{
|
|
112
|
+
name: string;
|
|
113
|
+
percentage: number;
|
|
114
|
+
duration: number;
|
|
115
|
+
}>;
|
|
116
|
+
/** Recommendations */
|
|
117
|
+
recommendations: string[];
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Profiler config
|
|
121
|
+
*/
|
|
122
|
+
export interface ProfilerConfig {
|
|
123
|
+
/** Enabled */
|
|
124
|
+
enabled: boolean;
|
|
125
|
+
/** Sample rate (0-1) */
|
|
126
|
+
sampleRate: number;
|
|
127
|
+
/** Max entries */
|
|
128
|
+
maxEntries: number;
|
|
129
|
+
/** Capture memory */
|
|
130
|
+
captureMemory: boolean;
|
|
131
|
+
/** Memory snapshot interval (ms) */
|
|
132
|
+
memoryInterval: number;
|
|
133
|
+
/** Slow threshold (ms) */
|
|
134
|
+
slowThreshold: number;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Default configuration
|
|
138
|
+
*/
|
|
139
|
+
export declare const DEFAULT_PROFILER_CONFIG: ProfilerConfig;
|
|
140
|
+
/**
|
|
141
|
+
* Performance Profiler
|
|
142
|
+
*/
|
|
143
|
+
export declare class PerformanceProfiler {
|
|
144
|
+
private config;
|
|
145
|
+
private entries;
|
|
146
|
+
private entryStack;
|
|
147
|
+
private memorySnapshots;
|
|
148
|
+
private memoryTimer?;
|
|
149
|
+
private startTime;
|
|
150
|
+
private entryCounter;
|
|
151
|
+
constructor(config?: Partial<ProfilerConfig>);
|
|
152
|
+
/**
|
|
153
|
+
* Start profiling session
|
|
154
|
+
*/
|
|
155
|
+
start(): void;
|
|
156
|
+
/**
|
|
157
|
+
* Stop profiling session
|
|
158
|
+
*/
|
|
159
|
+
stop(): PerformanceReport;
|
|
160
|
+
/**
|
|
161
|
+
* Begin profiling an operation
|
|
162
|
+
*/
|
|
163
|
+
begin(name: string, type?: ProfileEntryType, metadata?: Record<string, unknown>): string;
|
|
164
|
+
/**
|
|
165
|
+
* End profiling current operation
|
|
166
|
+
*/
|
|
167
|
+
end(id?: string): void;
|
|
168
|
+
/**
|
|
169
|
+
* Profile a function
|
|
170
|
+
*/
|
|
171
|
+
profile<T>(name: string, fn: () => T, type?: ProfileEntryType): T;
|
|
172
|
+
/**
|
|
173
|
+
* Profile an async function
|
|
174
|
+
*/
|
|
175
|
+
profileAsync<T>(name: string, fn: () => Promise<T>, type?: ProfileEntryType): Promise<T>;
|
|
176
|
+
/**
|
|
177
|
+
* Create a timer for measuring duration
|
|
178
|
+
*/
|
|
179
|
+
createTimer(name: string, type?: ProfileEntryType): {
|
|
180
|
+
stop: () => number;
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Mark a point in time
|
|
184
|
+
*/
|
|
185
|
+
mark(name: string, metadata?: Record<string, unknown>): void;
|
|
186
|
+
/**
|
|
187
|
+
* Get current entry
|
|
188
|
+
*/
|
|
189
|
+
getCurrentEntry(): ProfileEntry | undefined;
|
|
190
|
+
/**
|
|
191
|
+
* Get all entries
|
|
192
|
+
*/
|
|
193
|
+
getEntries(): ProfileEntry[];
|
|
194
|
+
/**
|
|
195
|
+
* Get entries by type
|
|
196
|
+
*/
|
|
197
|
+
getEntriesByType(type: ProfileEntryType): ProfileEntry[];
|
|
198
|
+
/**
|
|
199
|
+
* Get slow entries
|
|
200
|
+
*/
|
|
201
|
+
getSlowEntries(): ProfileEntry[];
|
|
202
|
+
/**
|
|
203
|
+
* Calculate statistics for a name
|
|
204
|
+
*/
|
|
205
|
+
getStats(name: string): ProfileStats | null;
|
|
206
|
+
/**
|
|
207
|
+
* Generate performance report
|
|
208
|
+
*/
|
|
209
|
+
generateReport(): PerformanceReport;
|
|
210
|
+
/**
|
|
211
|
+
* Generate recommendations
|
|
212
|
+
*/
|
|
213
|
+
private generateRecommendations;
|
|
214
|
+
/**
|
|
215
|
+
* Start memory capture
|
|
216
|
+
*/
|
|
217
|
+
private startMemoryCapture;
|
|
218
|
+
/**
|
|
219
|
+
* Capture memory snapshot
|
|
220
|
+
*/
|
|
221
|
+
private captureMemorySnapshot;
|
|
222
|
+
/**
|
|
223
|
+
* Capture memory usage
|
|
224
|
+
*/
|
|
225
|
+
private captureMemory;
|
|
226
|
+
/**
|
|
227
|
+
* Get current time (high resolution)
|
|
228
|
+
*/
|
|
229
|
+
private now;
|
|
230
|
+
/**
|
|
231
|
+
* Calculate percentile
|
|
232
|
+
*/
|
|
233
|
+
private percentile;
|
|
234
|
+
/**
|
|
235
|
+
* Format report as string
|
|
236
|
+
*/
|
|
237
|
+
formatReport(report: PerformanceReport): string;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Create decorator for profiling methods
|
|
241
|
+
*/
|
|
242
|
+
export declare function profiled(profiler: PerformanceProfiler, type?: ProfileEntryType): MethodDecorator;
|
|
243
|
+
/**
|
|
244
|
+
* Create performance profiler instance
|
|
245
|
+
*/
|
|
246
|
+
export declare function createPerformanceProfiler(config?: Partial<ProfilerConfig>): PerformanceProfiler;
|
|
247
|
+
/**
|
|
248
|
+
* Global profiler instance
|
|
249
|
+
*/
|
|
250
|
+
export declare const globalProfiler: PerformanceProfiler;
|
|
251
|
+
//# sourceMappingURL=performance-profiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance-profiler.d.ts","sourceRoot":"","sources":["../../src/utils/performance-profiler.ts"],"names":[],"mappings":"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"}
|