kailogger 1.0.0-dark.red → 1.0.1-dark.red
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/README.md +183 -53
- package/dist/core/Config.d.ts +15 -0
- package/dist/core/Config.js +44 -0
- package/dist/core/Logger.d.ts +75 -4
- package/dist/core/Logger.js +369 -38
- package/dist/core/Scope.d.ts +13 -0
- package/dist/core/Scope.js +36 -0
- package/dist/features/Chart.d.ts +15 -0
- package/dist/features/Chart.js +65 -0
- package/dist/features/Diff.d.ts +3 -0
- package/dist/features/Diff.js +34 -0
- package/dist/features/Encrypt.d.ts +10 -0
- package/dist/features/Encrypt.js +47 -0
- package/dist/features/Notify.d.ts +14 -0
- package/dist/features/Notify.js +31 -0
- package/dist/features/Screenshot.d.ts +10 -0
- package/dist/features/Screenshot.js +109 -0
- package/dist/features/Sound.d.ts +11 -0
- package/dist/features/Sound.js +118 -0
- package/dist/features/Timer.d.ts +6 -0
- package/dist/features/Timer.js +42 -0
- package/dist/features/Tree.d.ts +7 -0
- package/dist/features/Tree.js +28 -0
- package/dist/features/index.d.ts +8 -0
- package/dist/features/index.js +24 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +26 -0
- package/dist/styles/gradients.d.ts +28 -0
- package/dist/styles/palettes.d.ts +31 -0
- package/dist/styles/palettes.js +33 -2
- package/dist/transports/ConsoleTransport.d.ts +9 -0
- package/dist/transports/ConsoleTransport.js +18 -0
- package/dist/transports/FileTransport.d.ts +16 -0
- package/dist/transports/FileTransport.js +84 -0
- package/dist/transports/WebhookTransport.d.ts +15 -0
- package/dist/transports/WebhookTransport.js +31 -0
- package/dist/transports/index.d.ts +3 -0
- package/dist/transports/index.js +19 -0
- package/dist/types/index.d.ts +16 -0
- package/dist/types/index.js +11 -0
- package/dist/utils/json.d.ts +3 -0
- package/dist/utils/json.js +36 -0
- package/dist/utils/prettyError.d.ts +3 -0
- package/dist/utils/prettyError.js +96 -0
- package/dist/utils/progress.d.ts +11 -0
- package/dist/utils/progress.js +45 -0
- package/dist/utils/prompt.d.ts +4 -0
- package/dist/utils/prompt.js +59 -0
- package/dist/utils/selection.d.ts +4 -0
- package/dist/utils/selection.js +166 -0
- package/dist/utils/stripAnsi.d.ts +1 -0
- package/dist/utils/stripAnsi.js +6 -0
- package/dist/utils/table.d.ts +3 -0
- package/dist/utils/table.js +38 -0
- package/examples/demo.ts +88 -25
- package/package.json +23 -4
- package/src/core/Config.ts +44 -0
- package/src/core/Logger.ts +309 -50
- package/src/core/Scope.ts +35 -0
- package/src/features/Chart.ts +61 -0
- package/src/features/Diff.ts +25 -0
- package/src/features/Encrypt.ts +39 -0
- package/src/features/Notify.ts +39 -0
- package/src/features/Screenshot.ts +70 -0
- package/src/features/Sound.ts +66 -0
- package/src/features/Timer.ts +35 -0
- package/src/features/Tree.ts +24 -0
- package/src/features/index.ts +8 -0
- package/src/icon/logo.png +0 -0
- package/src/index.ts +13 -1
- package/src/sounds/error.wav +0 -0
- package/src/sounds/notification.wav +0 -0
- package/src/sounds/success.wav +0 -0
- package/src/sounds/warning.wav +0 -0
- package/src/styles/palettes.ts +33 -2
- package/src/transports/ConsoleTransport.ts +19 -0
- package/src/transports/FileTransport.ts +55 -0
- package/src/transports/WebhookTransport.ts +37 -0
- package/src/transports/index.ts +3 -0
- package/src/types/cli-highlight.d.ts +3 -0
- package/src/types/index.ts +23 -0
- package/src/utils/json.ts +25 -0
- package/src/utils/prettyError.ts +52 -0
- package/src/utils/progress.ts +42 -0
- package/src/utils/prompt.ts +23 -0
- package/src/utils/selection.ts +113 -0
- package/src/utils/stripAnsi.ts +3 -0
- package/src/utils/table.ts +31 -0
package/README.md
CHANGED
|
@@ -1,19 +1,31 @@
|
|
|
1
|
-
#
|
|
1
|
+
# KaiLogger
|
|
2
2
|
|
|
3
|
-
> The
|
|
4
|
-
> Experience logging like never before with mesmerizing gradients, smooth animations, and a developer experience that feels like Zen.
|
|
3
|
+
> **The Ultimate Logger for Node.js** — Beautiful, powerful, and designed for developers who care about aesthetics.
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="https://files.catbox.moe/et33ah.png" alt="KaiLogger Logo" width="600" />
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
Turn your boring console logs into a cyber-aesthetic experience. KaiLogger isn't just a logger; it's a complete CLI toolkit.
|
|
13
|
+
|
|
14
|
+
---
|
|
9
15
|
|
|
10
16
|
## Features
|
|
11
17
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
| Category | Features |
|
|
19
|
+
| --------------- | ----------------------------------------------------------- |
|
|
20
|
+
| **Logging** | Log levels, scoped loggers, custom badges, silent mode |
|
|
21
|
+
| **Styling** | 6 built-in themes, gradients, pretty boxes |
|
|
22
|
+
| **Interactive** | Spinners, progress bars, select menus, prompts |
|
|
23
|
+
| **Debug** | Pretty errors, JSON highlighting, diff view, tree view |
|
|
24
|
+
| **Visuals** | **Charts** (Bar, Sparkline, Gauge), **Screenshots** |
|
|
25
|
+
| **System** | **Desktop Notifications**, **Encryption**, **Sound Alerts** |
|
|
26
|
+
| **Transports** | Console, File (with rotation), Webhooks |
|
|
27
|
+
|
|
28
|
+
---
|
|
17
29
|
|
|
18
30
|
## Installation
|
|
19
31
|
|
|
@@ -21,66 +33,184 @@
|
|
|
21
33
|
npm install kailogger
|
|
22
34
|
```
|
|
23
35
|
|
|
24
|
-
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Quick Start
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
import { kai } from "kailogger";
|
|
42
|
+
|
|
43
|
+
kai.success("Hello, beautiful world!");
|
|
44
|
+
kai.error("Something went wrong");
|
|
45
|
+
kai.warning("Careful there");
|
|
46
|
+
kai.info("Just FYI");
|
|
47
|
+
kai.debug("For your eyes only");
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Charts (v1.1)
|
|
53
|
+
|
|
54
|
+
Visualize data directly in your terminal.
|
|
55
|
+
|
|
56
|
+
### Bar Chart
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
kai.chart([
|
|
60
|
+
{ label: "Users", value: 1500 },
|
|
61
|
+
{ label: "Sales", value: 890 },
|
|
62
|
+
{ label: "Errors", value: 32 },
|
|
63
|
+
]);
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Sparkline
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
kai.sparkline([10, 25, 40, 35, 60, 90, 45, 20]);
|
|
70
|
+
// Output: ▂▃▄▃▅▇▄▂
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Gauge
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
kai.gauge(75, 100, "CPU");
|
|
77
|
+
// CPU: [███████████████░░░░░] 75%
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Notifications & Sounds (v1.1)
|
|
83
|
+
|
|
84
|
+
### Desktop Notifications
|
|
85
|
+
|
|
86
|
+
Send native system notifications.
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
kai.notify("Build complete!", "✅ Success");
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Sound Alerts
|
|
93
|
+
|
|
94
|
+
Play sounds for events. (Requires `src/sounds` folder or system sounds)
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
// Configure sounds directory (optional)
|
|
98
|
+
kai.setSoundsDir("./src/sounds");
|
|
99
|
+
|
|
100
|
+
await kai.soundSuccess();
|
|
101
|
+
await kai.soundError();
|
|
102
|
+
kai.beep();
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Encryption (v1.1)
|
|
108
|
+
|
|
109
|
+
Handle sensitive data securely.
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
// Mask sensitive info in logs
|
|
113
|
+
kai.masked("API Key", "sk-1234567890abcdef", 4);
|
|
114
|
+
// 🔒 API Key: ************cdef
|
|
115
|
+
|
|
116
|
+
// Encrypt/Decrypt helpers
|
|
117
|
+
const secret = kai.encrypted("My Secret Data", "my-key");
|
|
118
|
+
kai.decrypted(secret, "my-key");
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Screen Capture (v1.1)
|
|
25
124
|
|
|
26
|
-
|
|
125
|
+
Capture terminal output to file.
|
|
27
126
|
|
|
28
127
|
```typescript
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
kai.
|
|
33
|
-
|
|
34
|
-
kai.
|
|
35
|
-
kai.
|
|
36
|
-
kai.debug('User payload received');
|
|
37
|
-
|
|
38
|
-
// 🌀 Loading Animations
|
|
39
|
-
kai.await('Connecting to the quantum realm...');
|
|
40
|
-
|
|
41
|
-
setTimeout(() => {
|
|
42
|
-
kai.stop('Connection established!');
|
|
43
|
-
// or kai.stop() to just clear the spinner
|
|
44
|
-
}, 2000);
|
|
128
|
+
kai.startCapture();
|
|
129
|
+
|
|
130
|
+
kai.success("This will be captured");
|
|
131
|
+
kai.info("So will this");
|
|
132
|
+
|
|
133
|
+
kai.saveScreenshot("logs/session.txt");
|
|
134
|
+
kai.saveScreenshotHtml("logs/session.html"); // Saves as styled HTML!
|
|
45
135
|
```
|
|
46
136
|
|
|
137
|
+
---
|
|
138
|
+
|
|
47
139
|
## Themes
|
|
48
140
|
|
|
49
|
-
|
|
141
|
+
```typescript
|
|
142
|
+
kai.setTheme("neon");
|
|
143
|
+
// Options: 'zen', 'neon', 'pastel', 'hacker', 'sunset', 'ocean'
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Log Levels & Scopes
|
|
50
149
|
|
|
51
|
-
### **Zen Mode** (Default)
|
|
52
|
-
Calming greens, blues, and nature-inspired gradients.
|
|
53
150
|
```typescript
|
|
54
|
-
|
|
55
|
-
kai.
|
|
151
|
+
// Set global level
|
|
152
|
+
kai.setLevel("warning");
|
|
153
|
+
|
|
154
|
+
// Scoped Logger
|
|
155
|
+
const db = kai.scope("Database");
|
|
156
|
+
db.info("Connected"); // [Database] Connected
|
|
56
157
|
```
|
|
57
158
|
|
|
58
|
-
|
|
59
|
-
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Performance Timer
|
|
162
|
+
|
|
60
163
|
```typescript
|
|
61
|
-
kai.
|
|
62
|
-
|
|
164
|
+
kai.time("query");
|
|
165
|
+
await db.query();
|
|
166
|
+
kai.timeEnd("query");
|
|
167
|
+
// ⏱ query: 145.32ms ⚡
|
|
63
168
|
```
|
|
64
169
|
|
|
65
|
-
|
|
66
|
-
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Tree & Diff View
|
|
173
|
+
|
|
67
174
|
```typescript
|
|
68
|
-
|
|
69
|
-
kai.
|
|
175
|
+
// Tree View
|
|
176
|
+
kai.tree({
|
|
177
|
+
src: { "index.ts": null, utils: { "helper.ts": null } },
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
// Diff View
|
|
181
|
+
kai.diff({ status: "idle" }, { status: "active" });
|
|
70
182
|
```
|
|
71
183
|
|
|
72
|
-
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Interactive Prompts
|
|
73
187
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
188
|
+
```typescript
|
|
189
|
+
const name = await kai.ask("Name?");
|
|
190
|
+
const framework = await kai.select("Framework", ["React", "Vue", "Svelte"]);
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Transports
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
kai.addFileTransport({
|
|
199
|
+
filename: "./logs/app.log",
|
|
200
|
+
maxSize: 10 * 1024 * 1024,
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
kai.addWebhookTransport({
|
|
204
|
+
url: "https://webhook.site/...",
|
|
205
|
+
});
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
83
209
|
|
|
84
210
|
## License
|
|
85
211
|
|
|
86
|
-
|
|
212
|
+
ISC
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
**By Soblend Development Studio**
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { KaiConfig, Transport } from '../types';
|
|
2
|
+
declare class ConfigManager {
|
|
3
|
+
private static instance;
|
|
4
|
+
private config;
|
|
5
|
+
private constructor();
|
|
6
|
+
static getInstance(): ConfigManager;
|
|
7
|
+
configure(options: Partial<KaiConfig>): void;
|
|
8
|
+
get<K extends keyof KaiConfig>(key: K): KaiConfig[K];
|
|
9
|
+
getAll(): KaiConfig;
|
|
10
|
+
reset(): void;
|
|
11
|
+
addTransport(transport: Transport): void;
|
|
12
|
+
removeTransport(name: string): void;
|
|
13
|
+
}
|
|
14
|
+
export declare const config: ConfigManager;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.config = void 0;
|
|
4
|
+
const DEFAULT_CONFIG = {
|
|
5
|
+
theme: 'zen',
|
|
6
|
+
level: 'debug',
|
|
7
|
+
timestamp: 'locale',
|
|
8
|
+
silent: false,
|
|
9
|
+
transports: []
|
|
10
|
+
};
|
|
11
|
+
class ConfigManager {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.config = { ...DEFAULT_CONFIG };
|
|
14
|
+
}
|
|
15
|
+
static getInstance() {
|
|
16
|
+
if (!ConfigManager.instance) {
|
|
17
|
+
ConfigManager.instance = new ConfigManager();
|
|
18
|
+
}
|
|
19
|
+
return ConfigManager.instance;
|
|
20
|
+
}
|
|
21
|
+
configure(options) {
|
|
22
|
+
this.config = { ...this.config, ...options };
|
|
23
|
+
}
|
|
24
|
+
get(key) {
|
|
25
|
+
return this.config[key];
|
|
26
|
+
}
|
|
27
|
+
getAll() {
|
|
28
|
+
return { ...this.config };
|
|
29
|
+
}
|
|
30
|
+
reset() {
|
|
31
|
+
this.config = { ...DEFAULT_CONFIG };
|
|
32
|
+
}
|
|
33
|
+
addTransport(transport) {
|
|
34
|
+
if (!this.config.transports)
|
|
35
|
+
this.config.transports = [];
|
|
36
|
+
this.config.transports.push(transport);
|
|
37
|
+
}
|
|
38
|
+
removeTransport(name) {
|
|
39
|
+
if (this.config.transports) {
|
|
40
|
+
this.config.transports = this.config.transports.filter(t => t.name !== name);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.config = ConfigManager.getInstance();
|
package/dist/core/Logger.d.ts
CHANGED
|
@@ -1,20 +1,91 @@
|
|
|
1
|
+
import { KaiProgress } from '../utils/progress';
|
|
1
2
|
import { ThemeName } from '../styles/palettes';
|
|
3
|
+
import { ScopedLogger } from './Scope';
|
|
4
|
+
import { LogLevel } from '../types';
|
|
5
|
+
import { FileTransportOptions } from '../transports/FileTransport';
|
|
6
|
+
import { WebhookTransportOptions } from '../transports/WebhookTransport';
|
|
7
|
+
interface LoggerOptions {
|
|
8
|
+
theme?: ThemeName;
|
|
9
|
+
level?: LogLevel;
|
|
10
|
+
logFile?: string;
|
|
11
|
+
silent?: boolean;
|
|
12
|
+
timestamp?: 'ISO' | 'locale' | 'relative' | 'none';
|
|
13
|
+
}
|
|
2
14
|
export declare class KaiLogger {
|
|
3
|
-
theme: ThemeName;
|
|
4
15
|
private spinner;
|
|
5
|
-
|
|
16
|
+
private timer;
|
|
17
|
+
private logFilePath?;
|
|
18
|
+
private buffer;
|
|
19
|
+
private startTime;
|
|
20
|
+
theme: ThemeName;
|
|
21
|
+
level: LogLevel;
|
|
22
|
+
silent: boolean;
|
|
23
|
+
timestampFormat: 'ISO' | 'locale' | 'relative' | 'none';
|
|
24
|
+
constructor(options?: LoggerOptions | ThemeName);
|
|
25
|
+
configure(options: Partial<LoggerOptions>): void;
|
|
6
26
|
setTheme(theme: ThemeName): void;
|
|
27
|
+
setLevel(level: LogLevel): void;
|
|
28
|
+
setSilent(silent: boolean): void;
|
|
29
|
+
addFileTransport(options: FileTransportOptions): void;
|
|
30
|
+
addWebhookTransport(options: WebhookTransportOptions): void;
|
|
31
|
+
removeTransport(name: string): void;
|
|
32
|
+
scope(name: string): ScopedLogger;
|
|
7
33
|
private getTime;
|
|
8
|
-
private
|
|
34
|
+
private shouldLog;
|
|
35
|
+
private logToFile;
|
|
36
|
+
private addToBuffer;
|
|
37
|
+
getBuffer(): string[];
|
|
38
|
+
clearBuffer(): void;
|
|
39
|
+
private print;
|
|
9
40
|
success(message: string, ...args: any[]): void;
|
|
10
|
-
error(message: string, ...args: any[]): void;
|
|
41
|
+
error(message: string | Error, ...args: any[]): void;
|
|
11
42
|
warning(message: string, ...args: any[]): void;
|
|
12
43
|
info(message: string, ...args: any[]): void;
|
|
13
44
|
debug(message: string, ...args: any[]): void;
|
|
14
45
|
log(message: string): void;
|
|
46
|
+
custom(badge: string, color: string, message: string, ...args: any[]): void;
|
|
15
47
|
box(title: string, message: string): void;
|
|
16
48
|
await(message: string): void;
|
|
17
49
|
stop(message?: string): void;
|
|
18
50
|
private stopSpinner;
|
|
51
|
+
createProgress(total: number, width?: number): KaiProgress;
|
|
52
|
+
table(data: any[]): void;
|
|
53
|
+
json(data: any): void;
|
|
54
|
+
tree(data: any): void;
|
|
55
|
+
diff(before: any, after: any): void;
|
|
56
|
+
time(label: string): void;
|
|
57
|
+
timeEnd(label: string): number | null;
|
|
58
|
+
ask(question: string): Promise<string>;
|
|
59
|
+
confirm(question: string): Promise<boolean>;
|
|
60
|
+
select(question: string, options: string[]): Promise<string>;
|
|
61
|
+
multiselect(question: string, options: string[]): Promise<string[]>;
|
|
62
|
+
chart(data: {
|
|
63
|
+
label: string;
|
|
64
|
+
value: number;
|
|
65
|
+
}[], options?: {
|
|
66
|
+
width?: number;
|
|
67
|
+
showValues?: boolean;
|
|
68
|
+
}): void;
|
|
69
|
+
sparkline(values: number[]): void;
|
|
70
|
+
gauge(value: number, max: number, label?: string): void;
|
|
71
|
+
notify(message: string, title?: string): void;
|
|
72
|
+
notifySuccess(message: string): void;
|
|
73
|
+
notifyError(message: string): void;
|
|
74
|
+
startCapture(): void;
|
|
75
|
+
stopCapture(): string[];
|
|
76
|
+
saveScreenshot(filename: string): void;
|
|
77
|
+
saveScreenshotHtml(filename: string): void;
|
|
78
|
+
setEncryptionKey(key: string): void;
|
|
79
|
+
encrypted(message: string, key?: string): void;
|
|
80
|
+
decrypted(encryptedMessage: string, key?: string): void;
|
|
81
|
+
masked(label: string, value: string, showLast?: number): void;
|
|
82
|
+
setSoundsDir(dir: string): void;
|
|
83
|
+
beep(): void;
|
|
84
|
+
soundSuccess(): Promise<void>;
|
|
85
|
+
soundError(): Promise<void>;
|
|
86
|
+
soundWarning(): Promise<void>;
|
|
87
|
+
soundNotification(): Promise<void>;
|
|
88
|
+
playSound(filename: string): Promise<void>;
|
|
19
89
|
}
|
|
20
90
|
export declare const kai: KaiLogger;
|
|
91
|
+
export {};
|