@push.rocks/smartlog 3.0.9 → 3.1.2

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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartlog',
6
- version: '3.0.9',
6
+ version: '3.1.2',
7
7
  description: 'A minimalistic, distributed, and extensible logging tool supporting centralized log management.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLGlHQUFpRztDQUMvRyxDQUFBIn0=
@@ -0,0 +1,137 @@
1
+ declare const spinnerFrames: {
2
+ dots: string[];
3
+ line: string[];
4
+ star: string[];
5
+ simple: string[];
6
+ };
7
+ declare const colors: {
8
+ black: string;
9
+ red: string;
10
+ green: string;
11
+ yellow: string;
12
+ blue: string;
13
+ magenta: string;
14
+ cyan: string;
15
+ white: string;
16
+ gray: string;
17
+ reset: string;
18
+ };
19
+ /**
20
+ * A class for creating interactive spinners
21
+ * Automatically handles non-interactive environments
22
+ */
23
+ export declare class SmartlogSourceInteractive {
24
+ private textContent;
25
+ private currentFrame;
26
+ private interval;
27
+ private started;
28
+ private spinnerStyle;
29
+ private color;
30
+ private frames;
31
+ private frameInterval;
32
+ private interactive;
33
+ constructor();
34
+ /**
35
+ * Sets the text for the spinner and starts it if not already started
36
+ */
37
+ text(textArg: string): void;
38
+ /**
39
+ * Starts the spinner animation
40
+ */
41
+ private start;
42
+ /**
43
+ * Renders the current frame of the spinner
44
+ */
45
+ private renderFrame;
46
+ /**
47
+ * Stops the spinner
48
+ */
49
+ stop(): void;
50
+ /**
51
+ * Marks the spinner as successful and optionally displays a success message
52
+ */
53
+ finishSuccess(textArg?: string): void;
54
+ /**
55
+ * Marks the spinner as failed and optionally displays a failure message
56
+ */
57
+ finishFail(textArg?: string): void;
58
+ /**
59
+ * Marks the current spinner as successful and starts a new one
60
+ */
61
+ successAndNext(textArg: string): void;
62
+ /**
63
+ * Marks the current spinner as failed and starts a new one
64
+ */
65
+ failAndNext(textArg: string): void;
66
+ /**
67
+ * Sets the spinner style
68
+ */
69
+ setSpinnerStyle(style: keyof typeof spinnerFrames): this;
70
+ /**
71
+ * Sets the spinner color
72
+ */
73
+ setColor(colorName: keyof typeof colors): this;
74
+ /**
75
+ * Sets the animation speed in milliseconds
76
+ */
77
+ setSpeed(ms: number): this;
78
+ /**
79
+ * Gets the current started state
80
+ */
81
+ isStarted(): boolean;
82
+ }
83
+ export interface IProgressBarOptions {
84
+ total: number;
85
+ width?: number;
86
+ complete?: string;
87
+ incomplete?: string;
88
+ renderThrottle?: number;
89
+ clear?: boolean;
90
+ showEta?: boolean;
91
+ showPercent?: boolean;
92
+ showCount?: boolean;
93
+ }
94
+ export declare class SmartlogProgressBar {
95
+ private total;
96
+ private current;
97
+ private width;
98
+ private completeChar;
99
+ private incomplete;
100
+ private renderThrottle;
101
+ private clear;
102
+ private showEta;
103
+ private showPercent;
104
+ private showCount;
105
+ private color;
106
+ private startTime;
107
+ private lastRenderTime;
108
+ private interactive;
109
+ private lastLoggedPercent;
110
+ private logThreshold;
111
+ constructor(options: IProgressBarOptions);
112
+ /**
113
+ * Update the progress bar to a specific value
114
+ */
115
+ update(value: number): this;
116
+ /**
117
+ * Increment the progress bar by a value
118
+ */
119
+ increment(value?: number): this;
120
+ /**
121
+ * Mark the progress bar as complete
122
+ */
123
+ complete(): this;
124
+ /**
125
+ * Set the color of the progress bar
126
+ */
127
+ setColor(colorName: keyof typeof colors): this;
128
+ /**
129
+ * Render the progress bar
130
+ */
131
+ private render;
132
+ }
133
+ export declare class SmartlogSourceOra extends SmartlogSourceInteractive {
134
+ get oraInstance(): any;
135
+ set oraInstance(value: any);
136
+ }
137
+ export {};
@@ -0,0 +1,345 @@
1
+ import * as plugins from './smartlog-source-interactive.plugins.js';
2
+ /**
3
+ * Utility to detect if the environment is interactive
4
+ * Checks for TTY capability and common CI environment variables
5
+ */
6
+ const isInteractive = () => {
7
+ try {
8
+ return Boolean(
9
+ // Check TTY capability
10
+ process.stdout && process.stdout.isTTY &&
11
+ // Additional checks for non-interactive environments
12
+ !('CI' in process.env) &&
13
+ !process.env.GITHUB_ACTIONS &&
14
+ !process.env.JENKINS_URL &&
15
+ !process.env.GITLAB_CI &&
16
+ !process.env.TRAVIS &&
17
+ !process.env.CIRCLECI &&
18
+ process.env.TERM !== 'dumb');
19
+ }
20
+ catch (e) {
21
+ // If any error occurs (e.g., in browser environments without process),
22
+ // assume a non-interactive environment to be safe
23
+ return false;
24
+ }
25
+ };
26
+ // Helper to log messages in non-interactive mode
27
+ const logMessage = (message, prefix = '') => {
28
+ if (prefix) {
29
+ console.log(`${prefix} ${message}`);
30
+ }
31
+ else {
32
+ console.log(message);
33
+ }
34
+ };
35
+ // Spinner frames and styles
36
+ const spinnerFrames = {
37
+ dots: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'],
38
+ line: ['|', '/', '-', '\\'],
39
+ star: ['✶', '✸', '✹', '✺', '✹', '✷'],
40
+ simple: ['-', '\\', '|', '/']
41
+ };
42
+ // Color names mapping to ANSI color codes
43
+ const colors = {
44
+ black: '\u001b[30m',
45
+ red: '\u001b[31m',
46
+ green: '\u001b[32m',
47
+ yellow: '\u001b[33m',
48
+ blue: '\u001b[34m',
49
+ magenta: '\u001b[35m',
50
+ cyan: '\u001b[36m',
51
+ white: '\u001b[37m',
52
+ gray: '\u001b[90m',
53
+ reset: '\u001b[0m'
54
+ };
55
+ /**
56
+ * A class for creating interactive spinners
57
+ * Automatically handles non-interactive environments
58
+ */
59
+ export class SmartlogSourceInteractive {
60
+ constructor() {
61
+ this.textContent = 'loading';
62
+ this.currentFrame = 0;
63
+ this.interval = null;
64
+ this.started = false;
65
+ this.spinnerStyle = 'dots';
66
+ this.color = 'cyan';
67
+ this.frameInterval = 80;
68
+ this.frames = spinnerFrames[this.spinnerStyle];
69
+ this.interactive = isInteractive();
70
+ }
71
+ /**
72
+ * Sets the text for the spinner and starts it if not already started
73
+ */
74
+ text(textArg) {
75
+ this.textContent = textArg;
76
+ if (!this.interactive) {
77
+ // In non-interactive mode, just log the message with a loading indicator
78
+ logMessage(textArg, '[Loading]');
79
+ this.started = true;
80
+ return;
81
+ }
82
+ if (!this.started) {
83
+ this.started = true;
84
+ this.start();
85
+ }
86
+ else {
87
+ this.renderFrame();
88
+ }
89
+ }
90
+ /**
91
+ * Starts the spinner animation
92
+ */
93
+ start() {
94
+ if (!this.interactive) {
95
+ return; // No animation in non-interactive mode
96
+ }
97
+ if (this.interval) {
98
+ clearInterval(this.interval);
99
+ }
100
+ this.renderFrame();
101
+ this.interval = setInterval(() => {
102
+ this.currentFrame = (this.currentFrame + 1) % this.frames.length;
103
+ this.renderFrame();
104
+ }, this.frameInterval);
105
+ }
106
+ /**
107
+ * Renders the current frame of the spinner
108
+ */
109
+ renderFrame() {
110
+ if (!this.started || !this.interactive)
111
+ return;
112
+ const frame = this.frames[this.currentFrame];
113
+ const colorCode = colors[this.color];
114
+ const resetCode = colors.reset;
115
+ // Only use ANSI escape codes in interactive mode
116
+ process.stdout.write('\r\x1b[2K'); // Clear the current line
117
+ process.stdout.write(`${colorCode}${frame}${resetCode} ${this.textContent}`);
118
+ }
119
+ /**
120
+ * Stops the spinner
121
+ */
122
+ stop() {
123
+ // Always clear the interval even in non-interactive mode
124
+ // This prevents memory leaks in tests and long-running applications
125
+ if (this.interval) {
126
+ clearInterval(this.interval);
127
+ this.interval = null;
128
+ }
129
+ if (!this.interactive) {
130
+ return; // No need to clear the line in non-interactive mode
131
+ }
132
+ process.stdout.write('\r\x1b[2K'); // Clear the current line
133
+ }
134
+ /**
135
+ * Marks the spinner as successful and optionally displays a success message
136
+ */
137
+ finishSuccess(textArg) {
138
+ const message = textArg || this.textContent;
139
+ // Always stop the spinner first to clean up intervals
140
+ this.stop();
141
+ if (!this.interactive) {
142
+ logMessage(message, '[Success]');
143
+ }
144
+ else {
145
+ const successSymbol = colors.green + '✓' + colors.reset;
146
+ process.stdout.write(`${successSymbol} ${message}\n`);
147
+ }
148
+ this.started = false;
149
+ }
150
+ /**
151
+ * Marks the spinner as failed and optionally displays a failure message
152
+ */
153
+ finishFail(textArg) {
154
+ const message = textArg || this.textContent;
155
+ // Always stop the spinner first to clean up intervals
156
+ this.stop();
157
+ if (!this.interactive) {
158
+ logMessage(message, '[Failed]');
159
+ }
160
+ else {
161
+ const failSymbol = colors.red + '✗' + colors.reset;
162
+ process.stdout.write(`${failSymbol} ${message}\n`);
163
+ }
164
+ this.started = false;
165
+ }
166
+ /**
167
+ * Marks the current spinner as successful and starts a new one
168
+ */
169
+ successAndNext(textArg) {
170
+ this.finishSuccess();
171
+ this.text(textArg);
172
+ }
173
+ /**
174
+ * Marks the current spinner as failed and starts a new one
175
+ */
176
+ failAndNext(textArg) {
177
+ this.finishFail();
178
+ this.text(textArg);
179
+ }
180
+ /**
181
+ * Sets the spinner style
182
+ */
183
+ setSpinnerStyle(style) {
184
+ this.spinnerStyle = style;
185
+ this.frames = spinnerFrames[style];
186
+ return this;
187
+ }
188
+ /**
189
+ * Sets the spinner color
190
+ */
191
+ setColor(colorName) {
192
+ if (colorName in colors) {
193
+ this.color = colorName;
194
+ }
195
+ return this;
196
+ }
197
+ /**
198
+ * Sets the animation speed in milliseconds
199
+ */
200
+ setSpeed(ms) {
201
+ this.frameInterval = ms;
202
+ if (this.started) {
203
+ this.stop();
204
+ this.start();
205
+ }
206
+ return this;
207
+ }
208
+ /**
209
+ * Gets the current started state
210
+ */
211
+ isStarted() {
212
+ return this.started;
213
+ }
214
+ }
215
+ export class SmartlogProgressBar {
216
+ constructor(options) {
217
+ this.current = 0;
218
+ this.color = 'green';
219
+ this.startTime = null;
220
+ this.lastRenderTime = 0;
221
+ this.lastLoggedPercent = 0;
222
+ this.logThreshold = 10; // Log every 10% in non-interactive mode
223
+ this.total = options.total;
224
+ this.width = options.width || 30;
225
+ this.completeChar = options.complete || '█';
226
+ this.incomplete = options.incomplete || '░';
227
+ this.renderThrottle = options.renderThrottle || 16;
228
+ this.clear = options.clear !== undefined ? options.clear : false;
229
+ this.showEta = options.showEta !== undefined ? options.showEta : true;
230
+ this.showPercent = options.showPercent !== undefined ? options.showPercent : true;
231
+ this.showCount = options.showCount !== undefined ? options.showCount : true;
232
+ this.interactive = isInteractive();
233
+ }
234
+ /**
235
+ * Update the progress bar to a specific value
236
+ */
237
+ update(value) {
238
+ if (this.startTime === null) {
239
+ this.startTime = Date.now();
240
+ }
241
+ this.current = Math.min(value, this.total);
242
+ if (!this.interactive) {
243
+ // In non-interactive mode, log progress at certain thresholds
244
+ const percent = Math.floor((this.current / this.total) * 100);
245
+ const currentThreshold = Math.floor(percent / this.logThreshold) * this.logThreshold;
246
+ if (currentThreshold > this.lastLoggedPercent || percent === 100) {
247
+ this.lastLoggedPercent = currentThreshold;
248
+ logMessage(`Progress: ${percent}% (${this.current}/${this.total})`);
249
+ }
250
+ return this;
251
+ }
252
+ // Throttle rendering to avoid excessive updates in interactive mode
253
+ const now = Date.now();
254
+ if (now - this.lastRenderTime < this.renderThrottle) {
255
+ return this;
256
+ }
257
+ this.lastRenderTime = now;
258
+ this.render();
259
+ return this;
260
+ }
261
+ /**
262
+ * Increment the progress bar by a value
263
+ */
264
+ increment(value = 1) {
265
+ return this.update(this.current + value);
266
+ }
267
+ /**
268
+ * Mark the progress bar as complete
269
+ */
270
+ complete() {
271
+ this.update(this.total);
272
+ if (!this.interactive) {
273
+ logMessage(`Completed: 100% (${this.total}/${this.total})`);
274
+ return this;
275
+ }
276
+ if (this.clear) {
277
+ process.stdout.write('\r\x1b[2K');
278
+ }
279
+ else {
280
+ process.stdout.write('\n');
281
+ }
282
+ return this;
283
+ }
284
+ /**
285
+ * Set the color of the progress bar
286
+ */
287
+ setColor(colorName) {
288
+ if (colorName in colors) {
289
+ this.color = colorName;
290
+ }
291
+ return this;
292
+ }
293
+ /**
294
+ * Render the progress bar
295
+ */
296
+ render() {
297
+ if (!this.interactive) {
298
+ return; // Don't render in non-interactive mode
299
+ }
300
+ // Calculate percent complete
301
+ const percent = Math.floor((this.current / this.total) * 100);
302
+ const completeLength = Math.round((this.current / this.total) * this.width);
303
+ const incompleteLength = this.width - completeLength;
304
+ // Build the progress bar
305
+ const completePart = colors[this.color] + this.completeChar.repeat(completeLength) + colors.reset;
306
+ const incompletePart = this.incomplete.repeat(incompleteLength);
307
+ const progressBar = `[${completePart}${incompletePart}]`;
308
+ // Calculate ETA if needed
309
+ let etaStr = '';
310
+ if (this.showEta && this.startTime !== null && this.current > 0) {
311
+ const elapsed = (Date.now() - this.startTime) / 1000;
312
+ const rate = this.current / elapsed;
313
+ const remaining = Math.max(0, this.total - this.current);
314
+ const eta = Math.round(remaining / rate);
315
+ const mins = Math.floor(eta / 60);
316
+ const secs = eta % 60;
317
+ etaStr = ` eta: ${mins}m${secs}s`;
318
+ }
319
+ // Build additional information
320
+ const percentStr = this.showPercent ? ` ${percent}%` : '';
321
+ const countStr = this.showCount ? ` ${this.current}/${this.total}` : '';
322
+ // Clear the line and render
323
+ process.stdout.write('\r\x1b[2K');
324
+ process.stdout.write(`${progressBar}${percentStr}${countStr}${etaStr}`);
325
+ }
326
+ }
327
+ // For backward compatibility with 'source-ora' module
328
+ export class SmartlogSourceOra extends SmartlogSourceInteractive {
329
+ // Add a stub for the oraInstance property for backward compatibility
330
+ get oraInstance() {
331
+ // Use public methods instead of accessing private properties
332
+ const instance = this;
333
+ return {
334
+ get text() { return ''; }, // We can't access private textContent directly
335
+ start: () => instance.text(''), // This starts the spinner
336
+ stop: () => instance.stop(),
337
+ succeed: (text) => instance.finishSuccess(text),
338
+ fail: (text) => instance.finishFail(text)
339
+ };
340
+ }
341
+ set oraInstance(value) {
342
+ // No-op, just for compatibility
343
+ }
344
+ }
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zb3VyY2VfaW50ZXJhY3RpdmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSwwQ0FBMEMsQ0FBQztBQUVwRTs7O0dBR0c7QUFDSCxNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUU7SUFDekIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxPQUFPO1FBQ1osdUJBQXVCO1FBQ3ZCLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBRXRDLHFEQUFxRDtZQUNyRCxDQUFDLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDdEIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWM7WUFDM0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVc7WUFDeEIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVM7WUFDdEIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU07WUFDbkIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVE7WUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCx1RUFBdUU7UUFDdkUsa0RBQWtEO1FBQ2xELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLGlEQUFpRDtBQUNqRCxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQWUsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDbEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxD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
@@ -0,0 +1,5 @@
1
+ import * as smartlogInterfaces from '../dist_ts_interfaces/index.js';
2
+ import * as consolecolor from '@push.rocks/consolecolor';
3
+ export { smartlogInterfaces, consolecolor };
4
+ import { stdout, stderr } from 'process';
5
+ export { stdout, stderr };
@@ -0,0 +1,8 @@
1
+ // pushrocks scope
2
+ import * as smartlogInterfaces from '../dist_ts_interfaces/index.js';
3
+ import * as consolecolor from '@push.rocks/consolecolor';
4
+ export { smartlogInterfaces, consolecolor };
5
+ // node.js internal
6
+ import { stdout, stderr } from 'process';
7
+ export { stdout, stderr };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRsb2ctc291cmNlLWludGVyYWN0aXZlLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zb3VyY2VfaW50ZXJhY3RpdmUvc21hcnRsb2ctc291cmNlLWludGVyYWN0aXZlLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCO0FBQ2xCLE9BQU8sS0FBSyxrQkFBa0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsQ0FBQztBQUU1QyxtQkFBbUI7QUFDbkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@push.rocks/smartlog",
3
- "version": "3.0.9",
3
+ "version": "3.1.2",
4
4
  "private": false,
5
5
  "description": "A minimalistic, distributed, and extensible logging tool supporting centralized log management.",
6
6
  "keywords": [
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "./context": "./dist_ts_context/index.js",
27
27
  "./interfaces": "./dist_ts_interfaces/index.js",
28
- "./source-ora": "./dist_ts_source_ora/index.js",
28
+ "./source-interactive": "./dist_ts_source_interactive/index.js",
29
29
  "./destination-clickhouse": "./dist_ts_destination_clickhouse/index.js",
30
30
  "./destination-devtools": "./dist_ts_destination_devtools/index.js",
31
31
  "./destination-file": "./dist_ts_destination_file/index.js",
@@ -36,12 +36,11 @@
36
36
  "author": "Lossless GmbH",
37
37
  "license": "MIT",
38
38
  "devDependencies": {
39
- "@git.zone/tsbuild": "^2.3.2",
39
+ "@git.zone/tsbuild": "^2.5.1",
40
40
  "@git.zone/tsbundle": "^2.2.5",
41
41
  "@git.zone/tsrun": "^1.3.3",
42
- "@git.zone/tstest": "^1.0.96",
43
- "@push.rocks/tapbundle": "^6.0.3",
44
- "@types/node": "^22.15.17"
42
+ "@git.zone/tstest": "^1.7.0",
43
+ "@types/node": "^22.15.18"
45
44
  },
46
45
  "dependencies": {
47
46
  "@api.global/typedrequest-interfaces": "^3.0.19",
@@ -53,8 +52,7 @@
53
52
  "@push.rocks/smartpromise": "^4.2.3",
54
53
  "@push.rocks/smarttime": "^4.1.1",
55
54
  "@push.rocks/webrequest": "^3.0.37",
56
- "@tsclass/tsclass": "^9.2.0",
57
- "ora": "^8.2.0"
55
+ "@tsclass/tsclass": "^9.2.0"
58
56
  },
59
57
  "files": [
60
58
  "ts/**/*",
@@ -81,7 +79,7 @@
81
79
  "url": "https://code.foss.global/push.rocks/smartlog/issues"
82
80
  },
83
81
  "scripts": {
84
- "test": "(tstest test/)",
82
+ "test": "(tstest test/**/*.ts --verbose)",
85
83
  "build": "(tsbuild tsfolders --allowimplicitany && tsbundle npm)",
86
84
  "format": "(gitzone format)",
87
85
  "buildDocs": "tsdoc"
package/readme.md CHANGED
@@ -60,6 +60,78 @@ defaultLogger.log('warn', 'This is a warning message using the default logger');
60
60
 
61
61
  This is particularly helpful for simple applications or for initial project setup.
62
62
 
63
+ ### Interactive Console Features
64
+
65
+ Smartlog provides interactive console features through the `@push.rocks/smartlog/source-interactive` module:
66
+
67
+ #### Spinners
68
+
69
+ Use spinners to show progress for operations:
70
+
71
+ ```typescript
72
+ import { SmartlogSourceInteractive } from '@push.rocks/smartlog/source-interactive';
73
+
74
+ const spinner = new SmartlogSourceInteractive();
75
+ spinner.text('Loading data...');
76
+
77
+ // Later, when the operation completes:
78
+ spinner.finishSuccess('Data loaded successfully!');
79
+ // Or if it fails:
80
+ spinner.finishFail('Failed to load data');
81
+
82
+ // You can chain operations:
83
+ spinner.text('Connecting to server');
84
+ spinner.successAndNext('Fetching records');
85
+ spinner.successAndNext('Processing data');
86
+ spinner.finishSuccess('All done!');
87
+
88
+ // Customize appearance:
89
+ spinner.setSpinnerStyle('line'); // 'dots', 'line', 'star', or 'simple'
90
+ spinner.setColor('green'); // 'red', 'green', 'yellow', 'blue', etc.
91
+ spinner.setSpeed(100); // Animation speed in milliseconds
92
+ ```
93
+
94
+ #### Progress Bars
95
+
96
+ Create progress bars for tracking operation progress:
97
+
98
+ ```typescript
99
+ import { SmartlogProgressBar } from '@push.rocks/smartlog/source-interactive';
100
+
101
+ const progressBar = new SmartlogProgressBar({
102
+ total: 100, // Total number of items
103
+ width: 40, // Width of the progress bar
104
+ complete: '█', // Character for completed section
105
+ incomplete: '░', // Character for incomplete section
106
+ showEta: true, // Show estimated time remaining
107
+ showPercent: true, // Show percentage
108
+ showCount: true // Show count (e.g., "50/100")
109
+ });
110
+
111
+ // Update progress
112
+ progressBar.update(50); // Set to 50% progress
113
+
114
+ // Or increment
115
+ progressBar.increment(10); // Increase by 10 units
116
+
117
+ // Change color
118
+ progressBar.setColor('blue');
119
+
120
+ // Complete the progress bar
121
+ progressBar.update(100); // or progressBar.complete();
122
+ ```
123
+
124
+ #### Non-Interactive Environments
125
+
126
+ Both spinners and progress bars automatically detect non-interactive environments (CI/CD, piped output, non-TTY) and provide fallback text-based output:
127
+
128
+ ```
129
+ [Loading] Loading data...
130
+ Progress: 50% (50/100)
131
+ Progress: 100% (100/100)
132
+ [Success] Data loaded successfully!
133
+ ```
134
+
63
135
  ### Extending With Log Destinations
64
136
 
65
137
  One of the core strengths of `@push.rocks/smartlog` is its ability to work with multiple log destinations, enabling you to log messages not just to the console but also to external logging services or custom destinations.
@@ -121,4 +193,4 @@ Registered at District court Bremen HRB 35230 HB, Germany
121
193
 
122
194
  For any legal inquiries or if you require further information, please contact us via email at hello@task.vc.
123
195
 
124
- By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.
196
+ By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.
package/readme.plan.md CHANGED
@@ -0,0 +1,101 @@
1
+ # Smartlog Interactive Console Features Plan
2
+
3
+ ## Overview
4
+
5
+ This document outlines the plan for enhancing the console output capabilities of `@push.rocks/smartlog` by creating a comprehensive interactive console module. This involves renaming the current `ts_source_ora` module to `ts_source_interactive`, implementing our own spinner functionality (removing the ora dependency), and adding new features like progress bars and other interactive elements.
6
+
7
+ ## Implementation Steps
8
+
9
+ ### 1. Rename and Restructure
10
+
11
+ - Rename directory from `ts_source_ora` to `ts_source_interactive`
12
+ - Update all imports, exports, and references
13
+ - Update package.json exports to reflect new module name
14
+ - Maintain backward compatibility through proper export paths
15
+
16
+ ### 2. Custom Spinner Implementation
17
+
18
+ - Create a native spinner implementation to replace ora dependency
19
+ - Implement spinner frames and animation timing
20
+ - Maintain API compatibility with current spinner methods:
21
+ - `text(textArg)` - Set text and start spinner
22
+ - `stop()` - Stop the spinner
23
+ - `finishSuccess(textArg?)` - Mark as succeeded
24
+ - `finishFail(textArg?)` - Mark as failed
25
+ - `successAndNext(textArg)` - Success and start new spinner
26
+ - `failAndNext(textArg)` - Fail and start new spinner
27
+ - Add spinner customization options (speed, frames, colors)
28
+
29
+ ### 3. Progress Bar Implementation
30
+
31
+ - Create a progress bar component with the following features:
32
+ - Configurable width and style
33
+ - Percentage display
34
+ - ETA calculation
35
+ - Current/total value display
36
+ - Custom formatting
37
+ - Theming support
38
+ - Methods for incrementing and updating
39
+
40
+ ### 4. Additional Interactive Features
41
+
42
+ - Add indeterminate progress indicator
43
+ - Add multi-line status display
44
+ - Add table formatting for structured data
45
+ - Add interactive prompts/confirmations
46
+
47
+ ### 5. Testing
48
+
49
+ - Update existing tests to work with new implementation
50
+ - Add tests for new progress bar functionality
51
+ - Add tests for additional interactive features
52
+ - Ensure consistent behavior across platforms
53
+
54
+ ### 6. Documentation
55
+
56
+ - Update README with examples of new features
57
+ - Add API documentation for all new methods
58
+ - Include usage examples
59
+
60
+ ## Implementation Details
61
+
62
+ ### Progress Bar API
63
+
64
+ ```typescript
65
+ // Creating a progress bar
66
+ const progressBar = new SmartlogProgressBar({
67
+ total: 100,
68
+ width: 40,
69
+ complete: '=',
70
+ incomplete: ' ',
71
+ renderThrottle: 100, // ms
72
+ clearOnComplete: false,
73
+ showEta: true
74
+ });
75
+
76
+ // Updating a progress bar
77
+ progressBar.update(50); // Update to 50%
78
+ progressBar.increment(10); // Increment by 10
79
+ progressBar.complete(); // Mark as complete
80
+ ```
81
+
82
+ ### Spinner API (maintains compatibility)
83
+
84
+ ```typescript
85
+ // Current API (to be maintained)
86
+ const spinner = new SmartlogSourceInteractive();
87
+ spinner.text('Loading data');
88
+ spinner.finishSuccess('Data loaded successfully');
89
+
90
+ // New additions
91
+ spinner.setSpinnerStyle('dots'); // Change spinner style
92
+ spinner.setColor('green'); // Change color
93
+ ```
94
+
95
+ ## Benefits
96
+
97
+ - Remove external dependency (ora) for better control and smaller bundle size
98
+ - Provide more interactive console features for improved user experience
99
+ - Maintain consistent API styling across all smartlog modules
100
+ - Improve testability with custom implementation
101
+ - Enable more advanced terminal interactions
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartlog',
6
- version: '3.0.9',
6
+ version: '3.1.2',
7
7
  description: 'A minimalistic, distributed, and extensible logging tool supporting centralized log management.'
8
8
  }