@loglayer/transport-simple-pretty-terminal 1.1.0 → 2.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/README.md +2 -1
- package/dist/index.cjs +41 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -6
- package/dist/index.d.ts +13 -6
- package/dist/index.js +41 -20
- package/dist/index.js.map +1 -1
- package/package.json +6 -5
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
A transport for the [LogLayer](https://loglayer.dev) logging library that pretty-prints logs printed in the terminal.
|
|
8
8
|
|
|
9
|
-
[Pretty terminal](https://loglayer.dev/transports/pretty-terminal)'s simpler cousin with no interactive features. Designed for use with Next.js and apps running concurrently.
|
|
9
|
+
[Pretty terminal](https://loglayer.dev/transports/pretty-terminal)'s simpler cousin with no interactive features. Designed for use with Next.js and apps running concurrently. Supports both Node.js and browser environments.
|
|
10
10
|
|
|
11
11
|

|
|
12
12
|
|
|
@@ -15,6 +15,7 @@ A transport for the [LogLayer](https://loglayer.dev) logging library that pretty
|
|
|
15
15
|
- 🎨 **Color-coded Log Levels** - Each log level has distinct colors for quick visual identification
|
|
16
16
|
- 💅 **JSON Pretty Printing** - Beautifully formatted structured data with syntax highlighting
|
|
17
17
|
- 🎭 **Configurable Themes** - Choose from pre-built themes or customize your own colors
|
|
18
|
+
- 🌐 **Browser & Node.js Support** - Works in both Node.js and browser environments
|
|
18
19
|
|
|
19
20
|
## Installation
|
|
20
21
|
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); }// src/SimplePrettyTerminalTransport.ts
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/SimplePrettyTerminalTransport.ts
|
|
2
2
|
var _transport = require('@loglayer/transport');
|
|
3
3
|
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk); _createStarExport(_chalk);
|
|
4
4
|
|
|
@@ -388,8 +388,12 @@ var SimpleView = class {
|
|
|
388
388
|
this.timestampFormat = config.timestampFormat;
|
|
389
389
|
this.collapseArrays = config.collapseArrays !== false;
|
|
390
390
|
this.flattenNestedObjects = config.flattenNestedObjects !== false;
|
|
391
|
-
this.
|
|
392
|
-
this.
|
|
391
|
+
this.runtime = config.runtime;
|
|
392
|
+
if (this.runtime === "node") {
|
|
393
|
+
this.termWidth = _optionalChain([process, 'optionalAccess', _ => _.stdout, 'optionalAccess', _2 => _2.columns]) || 120;
|
|
394
|
+
} else {
|
|
395
|
+
this.termWidth = 120;
|
|
396
|
+
}
|
|
393
397
|
}
|
|
394
398
|
updateTerminalWidth(width) {
|
|
395
399
|
this.termWidth = width;
|
|
@@ -400,6 +404,17 @@ var SimpleView = class {
|
|
|
400
404
|
getViewMode() {
|
|
401
405
|
return this.viewMode;
|
|
402
406
|
}
|
|
407
|
+
/**
|
|
408
|
+
* Writes a message to the appropriate output based on runtime
|
|
409
|
+
*/
|
|
410
|
+
writeMessage(message) {
|
|
411
|
+
if (this.runtime === "node") {
|
|
412
|
+
_optionalChain([process, 'optionalAccess', _3 => _3.stdout, 'optionalAccess', _4 => _4.write, 'optionalCall', _5 => _5(`${message}
|
|
413
|
+
`)]);
|
|
414
|
+
} else {
|
|
415
|
+
console.log(message);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
403
418
|
/**
|
|
404
419
|
* Renders a single log entry based on the current view mode
|
|
405
420
|
*/
|
|
@@ -411,7 +426,7 @@ var SimpleView = class {
|
|
|
411
426
|
switch (this.viewMode) {
|
|
412
427
|
case "message-only": {
|
|
413
428
|
const condensedLine = `${timestamp} ${chevron}${message}`;
|
|
414
|
-
this.
|
|
429
|
+
this.writeMessage(_wrapansi2.default.call(void 0, condensedLine, this.termWidth, { hard: true }));
|
|
415
430
|
break;
|
|
416
431
|
}
|
|
417
432
|
case "inline": {
|
|
@@ -424,13 +439,13 @@ var SimpleView = class {
|
|
|
424
439
|
this.collapseArrays
|
|
425
440
|
) : "";
|
|
426
441
|
const expandedLine = `${timestamp} ${chevron}${logId ? `${logId} ` : ""}${message}${fullData ? ` ${fullData}` : ""}`;
|
|
427
|
-
this.
|
|
442
|
+
this.writeMessage(expandedLine);
|
|
428
443
|
break;
|
|
429
444
|
}
|
|
430
445
|
case "expanded": {
|
|
431
446
|
const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : "";
|
|
432
447
|
const firstLine = `${timestamp} ${chevron}${logId ? `${logId} ` : ""}${message}`;
|
|
433
|
-
this.
|
|
448
|
+
this.writeMessage(_wrapansi2.default.call(void 0, firstLine, this.termWidth, { hard: true }));
|
|
434
449
|
if (entry.data) {
|
|
435
450
|
const jsonLines = render(JSON.parse(entry.data), {
|
|
436
451
|
defaultIndentation: 2,
|
|
@@ -448,9 +463,9 @@ var SimpleView = class {
|
|
|
448
463
|
}).split("\n");
|
|
449
464
|
for (const line of jsonLines) {
|
|
450
465
|
if (line.trim() === "") {
|
|
451
|
-
this.
|
|
466
|
+
this.writeMessage(" ");
|
|
452
467
|
} else {
|
|
453
|
-
this.
|
|
468
|
+
this.writeMessage(` ${line}`);
|
|
454
469
|
}
|
|
455
470
|
}
|
|
456
471
|
}
|
|
@@ -460,7 +475,7 @@ var SimpleView = class {
|
|
|
460
475
|
const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : "";
|
|
461
476
|
const fullData = entry.data ? formatInlineData(JSON.parse(entry.data), this.config.config, this.maxInlineDepth, true, this.collapseArrays) : "";
|
|
462
477
|
const expandedLine = `${timestamp} ${chevron}${logId ? `${logId} ` : ""}${message}${fullData ? ` ${fullData}` : ""}`;
|
|
463
|
-
this.
|
|
478
|
+
this.writeMessage(_wrapansi2.default.call(void 0, expandedLine, this.termWidth, { hard: true }));
|
|
464
479
|
break;
|
|
465
480
|
}
|
|
466
481
|
}
|
|
@@ -480,7 +495,7 @@ var SimplePrettyTerminalTransport = class extends _transport.LoggerlessTransport
|
|
|
480
495
|
*
|
|
481
496
|
* @param config - Configuration options for the transport
|
|
482
497
|
*/
|
|
483
|
-
constructor(config
|
|
498
|
+
constructor(config) {
|
|
484
499
|
super(config);
|
|
485
500
|
this.config = config;
|
|
486
501
|
if (config.enabled === false) {
|
|
@@ -493,7 +508,7 @@ var SimplePrettyTerminalTransport = class extends _transport.LoggerlessTransport
|
|
|
493
508
|
const timestampFormat = config.timestampFormat || "HH:mm:ss.SSS";
|
|
494
509
|
const collapseArrays = config.collapseArrays !== false;
|
|
495
510
|
const flattenNestedObjects = config.flattenNestedObjects !== false;
|
|
496
|
-
const
|
|
511
|
+
const runtime = config.runtime;
|
|
497
512
|
const viewConfig = {
|
|
498
513
|
colors: {
|
|
499
514
|
trace: _chalk2.default.gray,
|
|
@@ -514,7 +529,11 @@ var SimplePrettyTerminalTransport = class extends _transport.LoggerlessTransport
|
|
|
514
529
|
dataValueColor: theme.dataValueColor || _chalk2.default.white,
|
|
515
530
|
dataKeyColor: theme.dataKeyColor || _chalk2.default.dim
|
|
516
531
|
};
|
|
517
|
-
|
|
532
|
+
if (runtime === "node") {
|
|
533
|
+
this.termWidth = _optionalChain([process, 'optionalAccess', _6 => _6.stdout, 'optionalAccess', _7 => _7.columns]) || 80;
|
|
534
|
+
} else {
|
|
535
|
+
this.termWidth = 80;
|
|
536
|
+
}
|
|
518
537
|
this.renderer = new SimpleView({
|
|
519
538
|
viewMode,
|
|
520
539
|
maxInlineDepth,
|
|
@@ -522,13 +541,15 @@ var SimplePrettyTerminalTransport = class extends _transport.LoggerlessTransport
|
|
|
522
541
|
timestampFormat,
|
|
523
542
|
collapseArrays,
|
|
524
543
|
flattenNestedObjects,
|
|
525
|
-
|
|
544
|
+
runtime,
|
|
526
545
|
config: viewConfig
|
|
527
546
|
});
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
547
|
+
if (runtime === "node" && _optionalChain([process, 'optionalAccess', _8 => _8.stdout, 'optionalAccess', _9 => _9.on])) {
|
|
548
|
+
process.stdout.on("resize", () => {
|
|
549
|
+
this.termWidth = _optionalChain([process, 'optionalAccess', _10 => _10.stdout, 'optionalAccess', _11 => _11.columns]) || 80;
|
|
550
|
+
this.renderer.updateTerminalWidth(this.termWidth);
|
|
551
|
+
});
|
|
552
|
+
}
|
|
532
553
|
}
|
|
533
554
|
/**
|
|
534
555
|
* Generates a random ID for each log entry.
|
|
@@ -578,7 +599,7 @@ var SimplePrettyTerminalTransport = class extends _transport.LoggerlessTransport
|
|
|
578
599
|
return;
|
|
579
600
|
}
|
|
580
601
|
const theme = this.config.theme || moonlight;
|
|
581
|
-
const
|
|
602
|
+
const runtime = this.config.runtime;
|
|
582
603
|
const viewConfig = {
|
|
583
604
|
colors: {
|
|
584
605
|
trace: _chalk2.default.gray,
|
|
@@ -600,7 +621,7 @@ var SimplePrettyTerminalTransport = class extends _transport.LoggerlessTransport
|
|
|
600
621
|
timestampFormat: this.config.timestampFormat || "HH:mm:ss.SSS",
|
|
601
622
|
collapseArrays: this.config.collapseArrays !== false,
|
|
602
623
|
flattenNestedObjects: this.config.flattenNestedObjects !== false,
|
|
603
|
-
|
|
624
|
+
runtime,
|
|
604
625
|
config: viewConfig
|
|
605
626
|
});
|
|
606
627
|
}
|
|
@@ -616,7 +637,7 @@ var SimplePrettyTerminalTransport = class extends _transport.LoggerlessTransport
|
|
|
616
637
|
|
|
617
638
|
// src/index.ts
|
|
618
639
|
|
|
619
|
-
function getSimplePrettyTerminal(config
|
|
640
|
+
function getSimplePrettyTerminal(config) {
|
|
620
641
|
return new SimplePrettyTerminalTransport(config);
|
|
621
642
|
}
|
|
622
643
|
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/loglayer/loglayer/packages/transports/simple-pretty-terminal/dist/index.cjs","../src/SimplePrettyTerminalTransport.ts","../src/themes.ts","../src/views/SimpleView.ts","../src/vendor/prettyjson.js","../src/vendor/utils.js","../src/views/utils.ts","../src/index.ts"],"names":["chalk"],"mappings":"AAAA;ACuBA,gDAAoC;AACpC,uGAAkB;ADrBlB;AACA;AEJA;AAiBO,IAAM,UAAA,EAAuC;AAAA,EAClD,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,IAC9B,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,IAC9B,IAAA,EAAM,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,IAC7B,IAAA,EAAM,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,IAC7B,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,IAC9B,KAAA,EAAO,eAAA,CAAM,KAAA,CAAM,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,CAAE;AAAA;AAAA,EACpC,CAAA;AAAA,EACA,UAAA,EAAY,eAAA,CAAM,GAAA,CAAI,EAAA,EAAI,EAAA,EAAI,GAAG,CAAA;AAAA;AAAA,EACjC,cAAA,EAAgB,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,EACvC,YAAA,EAAc,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG;AAAA;AACvC,CAAA;AAiBO,IAAM,SAAA,EAAsC;AAAA,EACjD,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,IAC9B,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,EAAA,EAAI,EAAA,EAAI,GAAG,CAAA;AAAA;AAAA,IAC5B,IAAA,EAAM,eAAA,CAAM,GAAA,CAAI,EAAA,EAAI,GAAA,EAAK,EAAE,CAAA;AAAA;AAAA,IAC3B,IAAA,EAAM,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,EAAA,EAAI,CAAC,CAAA;AAAA;AAAA,IAC1B,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,CAAA,EAAG,CAAC,CAAA;AAAA;AAAA,IAC1B,KAAA,EAAO,eAAA,CAAM,KAAA,CAAM,GAAA,EAAK,CAAA,EAAG,CAAC,CAAA,CAAE;AAAA;AAAA,EAChC,CAAA;AAAA,EACA,UAAA,EAAY,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,EACnC,cAAA,EAAgB,eAAA,CAAM,GAAA,CAAI,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,EACjC,YAAA,EAAc,eAAA,CAAM,GAAA,CAAI,EAAA,EAAI,EAAA,EAAI,GAAG;AACrC,CAAA;AAgBO,IAAM,KAAA,EAAkC;AAAA,EAC7C,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,IAC9B,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,EAAA,EAAI,GAAG,CAAA;AAAA;AAAA,IAC7B,IAAA,EAAM,eAAA,CAAM,GAAA,CAAI,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,IAC3B,IAAA,EAAM,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,EAAE,CAAA;AAAA;AAAA,IAC5B,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,EAAA,EAAI,EAAE,CAAA;AAAA;AAAA,IAC5B,KAAA,EAAO,eAAA,CAAM,KAAA,CAAM,GAAA,EAAK,EAAA,EAAI,EAAE,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,GAAA,EAAK,GAAG;AAAA;AAAA,EACjD,CAAA;AAAA,EACA,UAAA,EAAY,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,EACnC,cAAA,EAAgB,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,EACvC,YAAA,EAAc,eAAA,CAAM,GAAA,CAAI,CAAA,EAAG,GAAA,EAAK,GAAG;AAAA;AACrC,CAAA;AAgBO,IAAM,OAAA,EAAoC;AAAA,EAC/C,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,IAC9B,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,EAAA,EAAI,GAAA,EAAK,EAAE,CAAA;AAAA;AAAA,IAC5B,IAAA,EAAM,eAAA,CAAM,GAAA,CAAI,EAAA,EAAI,GAAA,EAAK,EAAE,CAAA;AAAA;AAAA,IAC3B,IAAA,EAAM,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,EAAE,CAAA;AAAA;AAAA,IAC5B,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,EAAA,EAAI,EAAE,CAAA;AAAA;AAAA,IAC5B,KAAA,EAAO,eAAA,CAAM,KAAA,CAAM,GAAA,EAAK,EAAA,EAAI,EAAE,CAAA,CAAE;AAAA;AAAA,EAClC,CAAA;AAAA,EACA,UAAA,EAAY,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,EACnC,cAAA,EAAgB,eAAA,CAAM,GAAA,CAAI,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,EACjC,YAAA,EAAc,eAAA,CAAM,GAAA,CAAI,EAAA,EAAI,GAAA,EAAK,EAAE;AACrC,CAAA;AAgBO,IAAM,OAAA,EAAoC;AAAA,EAC/C,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,IAC9B,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,IAC9B,IAAA,EAAM,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,IAC7B,IAAA,EAAM,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,IAC7B,KAAA,EAAO,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA;AAAA,IAC9B,KAAA,EAAO,eAAA,CAAM,KAAA,CAAM,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,CAAE,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG;AAAA;AAAA,EACrD,CAAA;AAAA,EACA,UAAA,EAAY,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,EACnC,cAAA,EAAgB,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,EACvC,YAAA,EAAc,eAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG;AACvC,CAAA;AFnCA;AACA;AG5GA,yFAAiB;AH8GjB;AACA;AI9GA;AJgHA;AACA;AK/GO,SAAS,MAAA,CAAO,SAAA,EAAW;AAChC,EAAA,OAAO,IAAI,KAAA,CAAM,UAAA,EAAY,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC1C;AAKO,SAAS,iBAAA,CAAkB,KAAA,EAAO;AACvC,EAAA,IAAI,SAAA,EAAW,CAAA;AAEf,EAAA,MAAA,CAAO,mBAAA,CAAoB,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,EAAA,GAAQ;AAEjD,IAAA,GAAA,CAAI,KAAA,CAAM,GAAG,EAAA,IAAM,KAAA,CAAA,EAAW;AAC5B,MAAA,MAAA;AAAA,IACF;AAEA,IAAA,SAAA,EAAW,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,GAAA,CAAI,MAAM,CAAA;AAAA,EAC1C,CAAC,CAAA;AACD,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,eAAA,CAAgB,SAAA,EAAW;AACzC,EAAA,GAAA,CAAI,OAAO,UAAA,IAAc,QAAA,EAAU;AACjC,IAAA,OAAO,KAAA;AAAA,EACT;AAKA,EAAA,GAAA,CAAI,CAAC,2EAAA,CAA4E,IAAA,CAAK,SAAS,CAAA,EAAG;AAChG,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAA,EAAW,IAAI,IAAA,CAAK,SAAS,CAAA;AACnC,EAAA,OAAO,CAAC,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA;AACzC;ALqGA;AACA;AItIA,IAAM,cAAA,EAAgB,oBAAA;AAGtB,IAAM,YAAA,EAAc,CAAC,KAAA,EAAO,OAAA,EAAA,GAAY,MAAA,IAAU,KAAA,EAAA,GAAa,OAAA,CAAQ,eAAA;AAGvE,IAAM,eAAA,EAAiB,CAAC,KAAA,EAAO,cAAA,EAAgB,OAAA,EAAA,GAAY;AACzD,EAAA,GAAA,CACE,OAAO,MAAA,IAAU,UAAA,GACjB,OAAO,MAAA,IAAU,SAAA,GACjB,OAAO,MAAA,IAAU,WAAA,GACjB,MAAA,IAAU,KAAA,GACV,MAAA,IAAU,KAAA,EAAA,GACV,MAAA,WAAiB,IAAA,EACjB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,GAAA,CAAI,OAAO,MAAA,IAAU,SAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,IAAI,EAAA,IAAM,CAAA,CAAA,EAAI;AAC3D,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,GAAA,CAAI,OAAA,CAAQ,aAAA,GAAgB,CAAC,cAAA,EAAgB;AAC3C,IAAA,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,EAAA,GAAK,cAAA,CAAe,KAAA,CAAM,CAAC,CAAA,EAAG,IAAA,EAAM,OAAO,CAAA,EAAG;AACnE,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT,CAAA;AAMA,IAAM,iBAAA,EAAmB,CAAC,OAAA,EAAS,OAAA,EAAA,GAAY;AAC7C,EAAA,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS;AACnB,IAAA,OAAO,CAAC,IAAA,EAAA,GAAS,IAAA;AAAA,EACnB;AAEA,EAAA,GAAA,CAAI,OAAO,QAAA,IAAY,UAAA,EAAY;AACjC,IAAA,OAAO,CAAC,IAAA,EAAA,GAAS,IAAA;AAAA,EACnB;AAEA,EAAA,OAAO,OAAA;AACT,CAAA;AAEA,IAAM,eAAA,EAAiB,CAAC,KAAA,EAAO,OAAA,EAAA,GAAY;AACzC,EAAA,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS;AACnB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,GAAA,CAAI,MAAA,WAAiB,IAAA,EAAM;AACzB,IAAA,OAAO,gBAAA,CAAiB,OAAA,CAAQ,SAAA,EAAW,OAAO,CAAA,CAAE,KAAA,CAAM,WAAA,CAAY,CAAC,CAAA;AAAA,EACzE;AACA,EAAA,GAAA,CAAI,OAAO,MAAA,IAAU,QAAA,EAAU;AAC7B,IAAA,GAAA,CAAI,eAAA,CAAgB,KAAK,CAAA,EAAG;AAC1B,MAAA,OAAO,gBAAA,CAAiB,OAAA,CAAQ,SAAA,EAAW,OAAO,CAAA,CAAE,KAAK,CAAA;AAAA,IAC3D;AAEA,IAAA,OAAO,gBAAA,CAAiB,OAAA,CAAQ,WAAA,EAAa,OAAO,CAAA,CAAE,KAAK,CAAA;AAAA,EAC7D;AAEA,EAAA,MAAM,OAAA,EAAS,CAAA,EAAA;AAEJ,EAAA;AACF,IAAA;AACT,EAAA;AACc,EAAA;AACL,IAAA;AACT,EAAA;AACW,EAAA;AACI,IAAA;AACJ,MAAA;AACT,IAAA;AACO,IAAA;AACT,EAAA;AACW,EAAA;AACF,IAAA;AACT,EAAA;AAEU,EAAA;AACK,IAAA;AACf,EAAA;AAEO,EAAA;AACT;AAEM;AAEc;AACN,EAAA;AACE,EAAA;AACD,EAAA;AACf;AAEM;AACO,EAAA;AACG,IAAA;AACd,EAAA;AAEK,EAAA;AACK,IAAA;AACV,EAAA;AAEI,EAAA;AACY,IAAA;AAChB,EAAA;AAGW,EAAA;AACF,IAAA;AACQ,MAAA;AACD,MAAA;AACC,MAAA;AACf,IAAA;AACF,EAAA;AAEU,EAAA;AAEC,IAAA;AACO,MAAA;AAChB,IAAA;AAGY,IAAA;AACO,MAAA;AACnB,IAAA;AAEM,IAAA;AAEQ,IAAA;AACP,MAAA;AACH,QAAA;AACF,MAAA;AAGW,MAAA;AACJ,MAAA;AACM,MAAA;AAIT,MAAA;AACM,QAAA;AACR,QAAA;AAGK,MAAA;AACL,QAAA;AACA,QAAA;AACF,MAAA;AACD,IAAA;AAEM,IAAA;AACT,EAAA;AAEI,EAAA;AACK,IAAA;AACL,MAAA;AACW,QAAA;AACF,QAAA;AACT,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AAIM,EAAA;AACF,EAAA;AACY,EAAA;AAET,EAAA;AACA,IAAA;AACH,MAAA;AACF,IAAA;AAGU,IAAA;AACJ,IAAA;AACa,IAAA;AAGf,IAAA;AACI,MAAA;AACC,MAAA;AACK,MAAA;AAGP,IAAA;AACO,MAAA;AACA,MAAA;AACd,IAAA;AACD,EAAA;AACM,EAAA;AACT;AAyBM;AACM,EAAA;AACF,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AAEA,EAAA;AACA,EAAA;AAED,EAAA;AACT;AAqBuB;AAEP,EAAA;AACJ,EAAA;AAEH,EAAA;AACT;AJ6BkB;AACA;AMjTXA;AACE;AAWO;AAKV,EAAA;AAEO,EAAA;AACT,IAAA;AACK,EAAA;AACQ,IAAA;AACb,IAAA;AACF,EAAA;AAEe,EAAA;AACjB;AASgB;AACR,EAAA;AAEE,EAAA;AACD,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACT,IAAA;AACS,MAAA;AACX,EAAA;AACF;AAKgB;AACH,EAAA;AACA,EAAA;AACG,EAAA;AACA,EAAA;AACJ,EAAA;AACC,EAAA;AACE,EAAA;AACf;AAYgB;AAOH,EAAA;AAEc,EAAA;AACnB,EAAA;AACC,IAAA;AAEO,IAAA;AACJ,MAAA;AAEF,MAAA;AACE,QAAA;AACI,UAAA;AACD,QAAA;AACL,UAAA;AACF,QAAA;AACK,MAAA;AACC,QAAA;AACD,UAAA;AACL,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AAEa,EAAA;AACE,EAAA;AAER,EAAA;AACT;ANgQkB;AACA;AGvWX;AACG,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AAEI,EAAA;AACI,IAAA;AACT,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACP,EAAA;AAEO,EAAA;AACA,IAAA;AACP,EAAA;AAEqC,EAAA;AACvB,IAAA;AACd,EAAA;AAE6C,EAAA;AAC/B,IAAA;AACd,EAAA;AAAA;AAAA;AAAA;AAKqB,EAAA;AACb,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AAEO,IAAA;AACN,MAAA;AAEG,QAAA;AACD,QAAA;AACL,QAAA;AACF,MAAA;AAEK,MAAA;AAEG,QAAA;AACA,QAAA;AAEK,UAAA;AACA,UAAA;AACA,UAAA;AACC,UAAA;AACD,UAAA;AAEP,QAAA;AACE,QAAA;AAED,QAAA;AACL,QAAA;AACF,MAAA;AAEK,MAAA;AAEG,QAAA;AACA,QAAA;AACD,QAAA;AAEK,QAAA;AACF,UAAA;AAEF,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AAED,UAAA;AAGH,UAAA;AAEM,YAAA;AACF,cAAA;AACF,YAAA;AACE,cAAA;AACF,YAAA;AACF,UAAA;AACF,QAAA;AACA,QAAA;AACF,MAAA;AAES,MAAA;AAED,QAAA;AACA,QAAA;AAGA,QAAA;AACD,QAAA;AACL,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACF;AHiVkB;AACA;AC/aL;AAA0D;AAE7D,EAAA;AAAA;AAGA,EAAA;AAAA;AAGA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOI,EAAA;AACE,IAAA;AAGE,IAAA;AAGH,IAAA;AACT,MAAA;AACF,IAAA;AAGM,IAAA;AACQ,IAAA;AACR,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AAGA,IAAA;AACI,MAAA;AACCA,QAAAA;AAAM;AACNA,QAAAA;AAAM;AACPA,QAAAA;AAAM;AACNA,QAAAA;AAAM;AACLA,QAAAA;AAAM;AACNA,QAAAA;AAAY;AACV,QAAA;AACX,MAAA;AACY,MAAA;AACZ,MAAA;AACA,MAAA;AACF,IAAA;AAEK,IAAA;AAGA,IAAA;AACH,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACQ,MAAA;AACT,IAAA;AAGO,IAAA;AACD,MAAA;AACA,MAAA;AACN,IAAA;AACH,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU6B,EAAA;AACf,IAAA;AACd,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAee,EAAA;AAEJ,IAAA;AACA,MAAA;AACT,IAAA;AAEc,IAAA;AACH,MAAA;AACE,MAAA;AACJ,MAAA;AACE,MAAA;AACH,MAAA;AACR,IAAA;AAEc,IAAA;AACP,IAAA;AACT,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOY,EAAA;AACD,IAAA;AACP,MAAA;AACF,IAAA;AAGc,IAAA;AACR,IAAA;AACA,IAAA;AACI,MAAA;AACCA,QAAAA;AACAA,QAAAA;AACDA,QAAAA;AACAA,QAAAA;AACCA,QAAAA;AACAA,QAAAA;AACE,QAAA;AACX,MAAA;AACY,MAAA;AACZ,MAAA;AACA,MAAA;AACF,IAAA;AAEK,IAAA;AACH,MAAA;AACA,MAAA;AACW,MAAA;AACX,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACQ,MAAA;AACT,IAAA;AACH,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOsC,EAAA;AACxB,IAAA;AACd,EAAA;AACF;AD6ZkB;AACA;AOpmBJ;AAYE;AACH,EAAA;AACb;AP2lBkB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/loglayer/loglayer/packages/transports/simple-pretty-terminal/dist/index.cjs","sourcesContent":[null,"/**\n * A transport for LogLayer that provides simple pretty terminal output.\n * This transport displays logs with theming and formatting but without interactive features.\n *\n * Features:\n * - Real-time log display with color-coded levels\n * - Configurable themes and colors\n * - Three view modes: inline, message-only, expanded\n * - JSON data pretty printing\n * - No interactive features (no keyboard navigation, no input)\n *\n * Usage:\n * ```typescript\n * const transport = new SimplePrettyTerminalTransport({\n * maxInlineDepth: 4,\n * maxInlineLength: 120,\n * theme: customTheme,\n * viewMode: \"inline\"\n * });\n * ```\n */\n\nimport type { LogLayerTransportParams } from \"@loglayer/transport\";\nimport { LoggerlessTransport } from \"@loglayer/transport\";\nimport chalk from \"chalk\";\nimport { moonlight } from \"./themes.js\";\nimport type { PrettyTerminalViewMode, SimplePrettyTerminalConfig } from \"./types.js\";\nimport { SimpleView } from \"./views/SimpleView.js\";\n\n/**\n * Main transport class that handles simple pretty terminal output.\n * This class provides the display functionality of PrettyTerminal without interactive features.\n *\n * The transport supports three view modes:\n * 1. Inline: Shows all information with complete data structures inline (no truncation)\n * 2. Message-only: Shows only the timestamp, log level and message for a cleaner output (no data shown)\n * 3. Expanded: Shows timestamp, level, and message on first line, with data on indented separate lines\n */\nexport class SimplePrettyTerminalTransport extends LoggerlessTransport {\n /** Handles rendering and formatting of logs */\n private renderer: SimpleView;\n\n /** Configuration options */\n private config: SimplePrettyTerminalConfig;\n\n /** Current terminal width in characters */\n private termWidth: number;\n\n /**\n * Creates a new SimplePrettyTerminalTransport instance.\n *\n * @param config - Configuration options for the transport\n */\n constructor(config: SimplePrettyTerminalConfig = {}) {\n super(config);\n\n // Store configuration\n this.config = config;\n\n // If transport is disabled, don't initialize anything\n if (config.enabled === false) {\n return;\n }\n\n // Initialize configuration with defaults\n const maxInlineDepth = config.maxInlineDepth || 4;\n const theme = config.theme || moonlight;\n const viewMode = config.viewMode || \"inline\";\n const showLogId = config.showLogId || false;\n const timestampFormat = config.timestampFormat || \"HH:mm:ss.SSS\";\n const collapseArrays = config.collapseArrays !== false; // Default to true\n const flattenNestedObjects = config.flattenNestedObjects !== false; // Default to true\n const writeFn = config.writeFn || ((message: string) => process.stdout.write(message + \"\\n\"));\n\n // Initialize view configuration with defaults\n const viewConfig = {\n colors: {\n trace: chalk.gray, // Lowest level, used for verbose output\n debug: chalk.blue, // Debug information\n info: chalk.green, // Normal operation\n warn: chalk.yellow, // Warning conditions\n error: chalk.red, // Error conditions\n fatal: chalk.bgRed.white, // Critical errors\n ...theme.colors,\n },\n logIdColor: theme.logIdColor || chalk.dim,\n dataValueColor: theme.dataValueColor || chalk.white,\n dataKeyColor: theme.dataKeyColor || chalk.dim,\n };\n\n this.termWidth = process.stdout.columns || 80;\n\n // Initialize the renderer\n this.renderer = new SimpleView({\n viewMode,\n maxInlineDepth,\n showLogId,\n timestampFormat,\n collapseArrays,\n flattenNestedObjects,\n writeFn,\n config: viewConfig,\n });\n\n // Update terminal width when window is resized\n process.stdout.on(\"resize\", () => {\n this.termWidth = process.stdout.columns || 80;\n this.renderer.updateTerminalWidth(this.termWidth);\n });\n }\n\n /**\n * Generates a random ID for each log entry.\n * Uses base36 encoding for compact, readable IDs.\n *\n * @returns A 6-character string ID\n * @example\n * \"a1b2c3\" // Example generated ID\n */\n private generateId(): string {\n return Math.random().toString(36).substring(2, 8);\n }\n\n /**\n * Main transport method that receives logs from LogLayer.\n * This method is called for each log event and handles:\n * - Generating a unique ID for the log\n * - Converting the log data to a storable format\n * - Rendering the log using the SimpleView renderer\n *\n * @param logLevel - The severity level of the log\n * @param messages - Array of message strings to be joined\n * @param data - Additional structured data to be logged\n * @param hasData - Whether the log includes additional data\n * @returns The original messages array\n */\n shipToLogger({ logLevel, messages, data, hasData }: LogLayerTransportParams): any[] {\n // If transport is disabled, return messages without processing\n if (this.config.enabled === false) {\n return messages;\n }\n\n const entry = {\n id: this.generateId(),\n timestamp: Date.now(),\n level: logLevel,\n message: messages.join(\" \"),\n data: hasData ? JSON.stringify(data) : null,\n };\n\n this.renderer.renderLogLine(entry);\n return messages;\n }\n\n /**\n * Changes the view mode for log display.\n *\n * @param viewMode - The new view mode to use\n */\n setViewMode(viewMode: PrettyTerminalViewMode): void {\n if (this.config.enabled === false) {\n return;\n }\n\n // Rebuild the viewConfig as in the constructor\n const theme = this.config.theme || moonlight;\n const writeFn = this.config.writeFn || ((message: string) => process.stdout.write(message + \"\\n\"));\n const viewConfig = {\n colors: {\n trace: chalk.gray,\n debug: chalk.blue,\n info: chalk.green,\n warn: chalk.yellow,\n error: chalk.red,\n fatal: chalk.bgRed.white,\n ...theme.colors,\n },\n logIdColor: theme.logIdColor || chalk.dim,\n dataValueColor: theme.dataValueColor || chalk.white,\n dataKeyColor: theme.dataKeyColor || chalk.dim,\n };\n\n this.renderer = new SimpleView({\n viewMode,\n maxInlineDepth: this.config.maxInlineDepth || 4,\n showLogId: this.config.showLogId || false,\n timestampFormat: this.config.timestampFormat || \"HH:mm:ss.SSS\",\n collapseArrays: this.config.collapseArrays !== false,\n flattenNestedObjects: this.config.flattenNestedObjects !== false,\n writeFn,\n config: viewConfig,\n });\n }\n\n /**\n * Gets the current view mode.\n *\n * @returns The current view mode\n */\n getViewMode(): PrettyTerminalViewMode {\n return this.renderer.getViewMode();\n }\n}\n","import chalk from \"chalk\";\nimport type { SimplePrettyTerminalTheme } from \"./types.js\";\n\n/**\n * Moonlight - A dark theme with cool blue tones\n * Inspired by moonlit nights and modern IDEs\n *\n * Color Palette:\n * - Primary: Cool blues and soft greens\n * - Accents: Warm yellows and soft reds\n * - Background: Assumes dark terminal (black or very dark grey)\n *\n * Best used with:\n * - Dark terminal themes\n * - Night-time coding sessions\n * - Environments where eye strain is a concern\n */\nexport const moonlight: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(114, 135, 153), // Muted blue-grey for less important info\n debug: chalk.rgb(130, 170, 255), // Soft blue that pops but doesn't strain\n info: chalk.rgb(195, 232, 141), // Sage green for good readability\n warn: chalk.rgb(255, 203, 107), // Warm yellow, less harsh than pure yellow\n error: chalk.rgb(247, 118, 142), // Soft red that stands out without being aggressive\n fatal: chalk.bgRgb(247, 118, 142).white, // Inverted soft red for maximum visibility\n },\n logIdColor: chalk.rgb(84, 98, 117), // Darker blue-grey for secondary information\n dataValueColor: chalk.rgb(209, 219, 231), // Light grey-blue for primary content\n dataKeyColor: chalk.rgb(130, 170, 255), // Matching debug blue for consistency\n};\n\n/**\n * Sunlight - A light theme with warm tones\n * Inspired by daylight reading and paper documentation\n *\n * Color Palette:\n * - Primary: Deep, rich colors that contrast well with white\n * - Accents: Earth tones and deep jewel tones\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Daytime coding sessions\n * - High-glare environments\n * - Printed documentation\n */\nexport const sunlight: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(110, 110, 110), // Dark grey for subtle information\n debug: chalk.rgb(32, 96, 159), // Deep blue for strong contrast on white\n info: chalk.rgb(35, 134, 54), // Forest green, easier on the eyes than bright green\n warn: chalk.rgb(176, 95, 0), // Brown-orange for natural warning color\n error: chalk.rgb(191, 0, 0), // Deep red for clear visibility on light backgrounds\n fatal: chalk.bgRgb(191, 0, 0).white, // White on deep red for critical issues\n },\n logIdColor: chalk.rgb(110, 110, 110),\n dataValueColor: chalk.rgb(0, 0, 0),\n dataKeyColor: chalk.rgb(32, 96, 159),\n};\n\n/**\n * Neon - A dark theme with vibrant cyberpunk colors\n * Inspired by neon-lit cityscapes and retro-futuristic aesthetics\n *\n * Color Palette:\n * - Primary: Electric blues and hot pinks\n * - Accents: Bright purples and cyber greens\n * - Background: Assumes dark terminal (black or very dark grey)\n *\n * Best used with:\n * - Dark terminal themes\n * - High-contrast preferences\n * - Modern, tech-focused applications\n */\nexport const neon: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(108, 108, 255), // Electric blue\n debug: chalk.rgb(255, 82, 246), // Hot pink\n info: chalk.rgb(0, 255, 163), // Cyber green\n warn: chalk.rgb(255, 231, 46), // Electric yellow\n error: chalk.rgb(255, 53, 91), // Neon red\n fatal: chalk.bgRgb(255, 53, 91).rgb(0, 255, 163), // Neon red bg with cyber green text\n },\n logIdColor: chalk.rgb(187, 134, 252), // Bright purple\n dataValueColor: chalk.rgb(255, 255, 255), // Pure white\n dataKeyColor: chalk.rgb(0, 255, 240), // Cyan\n};\n\n/**\n * Nature - A light theme with organic, earthy colors\n * Inspired by forest landscapes and natural elements\n *\n * Color Palette:\n * - Primary: Deep forest greens and rich browns\n * - Accents: Autumn reds and golden yellows\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Nature-inspired interfaces\n * - Applications focusing on readability\n */\nexport const nature: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(101, 115, 126), // Slate grey\n debug: chalk.rgb(34, 139, 34), // Forest green\n info: chalk.rgb(46, 139, 87), // Sea green\n warn: chalk.rgb(218, 165, 32), // Golden rod\n error: chalk.rgb(139, 69, 19), // Saddle brown\n fatal: chalk.bgRgb(139, 69, 19).white, // Brown background with white text\n },\n logIdColor: chalk.rgb(101, 115, 126),\n dataValueColor: chalk.rgb(0, 0, 0),\n dataKeyColor: chalk.rgb(34, 139, 34),\n};\n\n/**\n * Pastel - A soft, calming theme with gentle colors\n * Inspired by watercolor paintings and soft aesthetics\n *\n * Color Palette:\n * - Primary: Soft pastels and muted tones\n * - Accents: Gentle pinks and light blues\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Long coding sessions\n * - Reduced visual stress\n */\nexport const pastel: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(200, 200, 200), // Light grey\n debug: chalk.rgb(173, 216, 230), // Light blue\n info: chalk.rgb(144, 238, 144), // Light green\n warn: chalk.rgb(255, 218, 185), // Peach\n error: chalk.rgb(255, 182, 193), // Light pink\n fatal: chalk.bgRgb(255, 182, 193).rgb(105, 105, 105), // Light pink bg with dim grey text\n },\n logIdColor: chalk.rgb(200, 200, 200),\n dataValueColor: chalk.rgb(105, 105, 105),\n dataKeyColor: chalk.rgb(173, 216, 230),\n};\n","import wrap from \"wrap-ansi\";\nimport type { LogEntry, PrettyTerminalViewMode, SimpleViewConfig } from \"../types.js\";\nimport * as prettyjson from \"../vendor/prettyjson.js\";\nimport { formatInlineData, formatTimestamp, getLevelColor } from \"./utils.js\";\n\n/**\n * Handles rendering of the simple view mode.\n * Supports three display modes:\n * - Message-only: Shows timestamp, level and message\n * - Inline: Shows all details with complete data inline\n * - Expanded: Shows timestamp, level, and message on first line, with data on indented separate lines\n */\nexport class SimpleView {\n private termWidth: number;\n private config: SimpleViewConfig;\n private viewMode: PrettyTerminalViewMode;\n private maxInlineDepth: number;\n private showLogId: boolean;\n private timestampFormat: string | ((timestamp: number) => string);\n private collapseArrays: boolean;\n private flattenNestedObjects: boolean;\n private writeFn: (message: string) => void;\n\n constructor(config: SimpleViewConfig) {\n this.config = config;\n this.viewMode = config.viewMode;\n this.maxInlineDepth = config.maxInlineDepth;\n this.showLogId = config.showLogId;\n this.timestampFormat = config.timestampFormat;\n this.collapseArrays = config.collapseArrays !== false;\n this.flattenNestedObjects = config.flattenNestedObjects !== false;\n this.termWidth = process.stdout.columns || 120;\n this.writeFn = config.writeFn;\n }\n\n public updateTerminalWidth(width: number): void {\n this.termWidth = width;\n }\n\n public getConfig(): SimpleViewConfig {\n return this.config;\n }\n\n public getViewMode(): PrettyTerminalViewMode {\n return this.viewMode;\n }\n\n /**\n * Renders a single log entry based on the current view mode\n */\n public renderLogLine(entry: LogEntry): void {\n const levelColor = getLevelColor(entry.level, this.config.config.colors);\n const chevron = levelColor(`▶ ${entry.level.toUpperCase()} `);\n const message = entry.message || \"(no message)\";\n const timestamp = formatTimestamp(entry.timestamp, this.config.config.logIdColor, this.timestampFormat);\n\n switch (this.viewMode) {\n case \"message-only\": {\n // Message-only view shows timestamp, level and message\n const condensedLine = `${timestamp} ${chevron}${message}`;\n this.writeFn(wrap(condensedLine, this.termWidth, { hard: true }));\n break;\n }\n\n case \"inline\": {\n // Inline view shows all details with complete data inline\n const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n const fullData = entry.data\n ? formatInlineData(\n JSON.parse(entry.data),\n this.config.config,\n this.maxInlineDepth,\n !this.flattenNestedObjects,\n this.collapseArrays,\n )\n : \"\";\n const expandedLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}${fullData ? ` ${fullData}` : \"\"}`;\n // Don't wrap inline mode to preserve full content\n this.writeFn(expandedLine);\n break;\n }\n\n case \"expanded\": {\n // Expanded view shows timestamp, level, and message on first line, with data on indented separate lines\n const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n const firstLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}`;\n this.writeFn(wrap(firstLine, this.termWidth, { hard: true }));\n\n if (entry.data) {\n const jsonLines = prettyjson\n .render(JSON.parse(entry.data), {\n defaultIndentation: 2,\n keysColor: this.config.config.dataKeyColor,\n dashColor: this.config.config.dataKeyColor,\n numberColor: this.config.config.dataValueColor,\n stringColor: this.config.config.dataValueColor,\n multilineStringColor: this.config.config.dataValueColor,\n positiveNumberColor: this.config.config.dataValueColor,\n negativeNumberColor: this.config.config.dataValueColor,\n booleanColor: this.config.config.dataValueColor,\n nullUndefinedColor: this.config.config.dataValueColor,\n dateColor: this.config.config.dataValueColor,\n collapseArrays: this.collapseArrays,\n })\n .split(\"\\n\");\n\n // Add each line with proper indentation (2 spaces at the beginning)\n for (const line of jsonLines) {\n // Skip empty lines\n if (line.trim() === \"\") {\n this.writeFn(\" \");\n } else {\n this.writeFn(` ${line}`);\n }\n }\n }\n break;\n }\n\n default: {\n // Default to full view for any unexpected view modes\n const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n const fullData = entry.data\n ? formatInlineData(JSON.parse(entry.data), this.config.config, this.maxInlineDepth, true, this.collapseArrays)\n : \"\";\n const expandedLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}${fullData ? ` ${fullData}` : \"\"}`;\n this.writeFn(wrap(expandedLine, this.termWidth, { hard: true }));\n break;\n }\n }\n }\n}\n","// @ts-nocheck\nimport chalk from \"chalk\";\nimport * as Utils from \"./utils.js\";\nimport { isIsoStringDate } from \"./utils.js\";\n\nconst conflictChars = /[^\\w\\s\\n\\r\\v\\t.,]/i;\n\n// Helper function to detect if an object should be printed or ignored\nconst isPrintable = (input, options) => input !== undefined || options.renderUndefined;\n\n// Helper function to detect if an object can be directly serializable\nconst isSerializable = (input, onlyPrimitives, options) => {\n if (\n typeof input === \"boolean\" ||\n typeof input === \"number\" ||\n typeof input === \"function\" ||\n input === null ||\n input === undefined ||\n input instanceof Date\n ) {\n return true;\n }\n if (typeof input === \"string\" && input.indexOf(\"\\n\") === -1) {\n return true;\n }\n\n if (options.inlineArrays && !onlyPrimitives) {\n if (Array.isArray(input) && isSerializable(input[0], true, options)) {\n return true;\n }\n }\n\n return false;\n};\n\n/**\n * @param {Function} colorFn\n * @param {PrettyJSONOptions} options\n */\nconst getColorRenderer = (colorFn, options) => {\n if (options.noColor) {\n return (text) => text;\n }\n\n if (typeof colorFn !== \"function\") {\n return (text) => text;\n }\n\n return colorFn;\n};\n\nconst addColorToData = (input, options) => {\n if (options.noColor) {\n return input;\n }\n\n if (input instanceof Date) {\n return getColorRenderer(options.dateColor, options)(input.toISOString());\n }\n if (typeof input === \"string\") {\n if (isIsoStringDate(input)) {\n return getColorRenderer(options.dateColor, options)(input);\n }\n // Print strings in regular terminal color\n return getColorRenderer(options.stringColor, options)(input);\n }\n\n const sInput = `${input}`;\n\n if (typeof input === \"boolean\") {\n return getColorRenderer(options.booleanColor, options)(sInput);\n }\n if (input === null || input === undefined) {\n return getColorRenderer(options.nullUndefinedColor, options)(sInput);\n }\n if (typeof input === \"number\") {\n if (input >= 0) {\n return getColorRenderer(options.positiveNumberColor, options)(sInput);\n }\n return getColorRenderer(options.negativeNumberColor, options)(sInput);\n }\n if (typeof input === \"function\") {\n return \"function() {}\";\n }\n\n if (Array.isArray(input)) {\n return input.join(\", \");\n }\n\n return sInput;\n};\n\nconst colorMultilineString = (options, line) => getColorRenderer(options.multilineStringColor, options)(line);\n\nconst indentLines = (string, spaces, options) => {\n let lines = string.split(\"\\n\");\n lines = lines.map((line) => Utils.indent(spaces) + colorMultilineString(options, line));\n return lines.join(\"\\n\");\n};\n\nconst renderToArray = (data, options, indentation) => {\n if (typeof data === \"string\" && data.match(conflictChars) && options.escape) {\n data = JSON.stringify(data);\n }\n\n if (!isPrintable(data, options)) {\n return [];\n }\n\n if (isSerializable(data, false, options)) {\n return [Utils.indent(indentation) + addColorToData(data, options)];\n }\n\n // Unserializable string means it's multiline\n if (typeof data === \"string\") {\n return [\n Utils.indent(indentation) + colorMultilineString(options, '\"\"\"'),\n indentLines(data, indentation + options.defaultIndentation, options),\n Utils.indent(indentation) + colorMultilineString(options, '\"\"\"'),\n ];\n }\n\n if (Array.isArray(data)) {\n // If the array is empty, render the `emptyArrayMsg`\n if (data.length === 0) {\n return [Utils.indent(indentation) + options.emptyArrayMsg];\n }\n\n // If arrays should be collapsed and there's data, show [...]\n if (options.collapseArrays && data.length > 0) {\n return [`${Utils.indent(indentation)}[... ${data.length} items]`];\n }\n\n const outputArray = [];\n\n data.forEach((element) => {\n if (!isPrintable(element, options)) {\n return;\n }\n\n // Prepend the dash at the beginning of each array's element line\n let line = \"- \";\n line = getColorRenderer(options.dashColor, options)(line);\n line = Utils.indent(indentation) + line;\n\n // If the element of the array is a string, bool, number, or null\n // render it in the same line\n if (isSerializable(element, false, options)) {\n line += renderToArray(element, options, 0)[0];\n outputArray.push(line);\n\n // If the element is an array or object, render it in next line\n } else {\n outputArray.push(line);\n outputArray.push.apply(outputArray, renderToArray(element, options, indentation + options.defaultIndentation));\n }\n });\n\n return outputArray;\n }\n\n if (data instanceof Error) {\n return renderToArray(\n {\n message: data.message,\n stack: data.stack.split(\"\\n\"),\n },\n options,\n indentation,\n );\n }\n\n // If values alignment is enabled, get the size of the longest index\n // to align all the values\n const maxIndexLength = options.noAlign ? 0 : Utils.getMaxIndexLength(data);\n let key;\n const output = [];\n\n Object.getOwnPropertyNames(data).forEach((i) => {\n if (!isPrintable(data[i], options)) {\n return;\n }\n\n // Prepend the index at the beginning of the line\n key = `${i}: `;\n key = getColorRenderer(options.keysColor, options)(key);\n key = Utils.indent(indentation) + key;\n\n // If the value is serializable, render it in the same line\n if (isSerializable(data[i], false, options)) {\n const nextIndentation = options.noAlign ? 0 : maxIndexLength - i.length;\n key += renderToArray(data[i], options, nextIndentation)[0];\n output.push(key);\n\n // If the index is an array or object, render it in next line\n } else {\n output.push(key);\n output.push.apply(output, renderToArray(data[i], options, indentation + options.defaultIndentation));\n }\n });\n return output;\n};\n/**\n * @typedef {Object} PrettyJSONOptions\n * @property {Function} [stringColor=null] Chalk color function for strings\n * @property {Function} [multilineStringColor=null] Chalk color function for multiline strings\n * @property {Function} [keysColor=chalk.green] Chalk color function for keys in hashes\n * @property {Function} [dashColor=chalk.green] Chalk color function for dashes in arrays\n * @property {Function} [numberColor=chalk.blue] Default Chalk color function for numbers\n * @property {Function} [positiveNumberColor=numberColor] Chalk color function for positive numbers\n * @property {Function} [negativeNumberColor=numberColor] Chalk color function for negative numbers\n * @property {Function} [booleanColor=chalk.cyan] Chalk color function for boolean values\n * @property {Function} [nullUndefinedColor=chalk.grey] Chalk color function for null || undefined\n * @property {Function} [dateColor=chalk.magenta] Chalk color function for Date objects\n * @property {number} [defaultIndentation=2] Indentation spaces per object level\n * @property {string} [emptyArrayMsg=\"(empty array)\"] Replace empty strings with\n * @property {boolean} [noColor] Flag to disable colors\n * @property {boolean} [noAlign] Flag to disable alignment\n * @property {boolean} [escape] Flag to escape printed content\n * @property {boolean} [collapseArrays] Flag to collapse arrays\n */\n/**\n * Mutating function that ensures we have a valid options object\n * @param {PrettyJSONOptions} options\n * @returns PrettyJSONOptions\n */\nconst validateOptionsAndSetDefaults = (options) => {\n options = options || {};\n options.emptyArrayMsg = options.emptyArrayMsg || \"(empty array)\";\n options.keysColor = options.keysColor || chalk.green;\n options.dashColor = options.dashColor || chalk.green;\n options.booleanColor = options.booleanColor || chalk.cyan;\n options.nullUndefinedColor = options.nullUndefinedColor || chalk.grey;\n options.numberColor = options.numberColor || chalk.blue;\n options.positiveNumberColor = options.positiveNumberColor || options.numberColor;\n options.negativeNumberColor = options.negativeNumberColor || options.numberColor;\n options.dateColor = options.dateColor || chalk.magenta;\n options.defaultIndentation = options.defaultIndentation || 2;\n options.noColor = !!options.noColor;\n options.noAlign = !!options.noAlign;\n options.escape = !!options.escape;\n options.renderUndefined = !!options.renderUndefined;\n options.collapseArrays = !!options.collapseArrays;\n\n options.stringColor = options.stringColor || null;\n options.multilineStringColor = options.multilineStringColor || options.stringColor || null;\n\n return options;\n};\n/**\n * ### Render function\n * *Parameters:*\n *\n * @param {*} data: Data to render\n * @param {PrettyJSONOptions} options: Hash of different options\n * @param {*} indentation **`indentation`**: Base indentation of the output\n *\n * *Example of options hash:*\n *\n * {\n * emptyArrayMsg: '(empty)', // Rendered message on empty strings\n * keysColor: 'blue', // Color for keys in hashes\n * dashColor: 'red', // Color for the dashes in arrays\n * stringColor: 'grey', // Color for strings\n * multilineStringColor: 'cyan' // Color for multiline strings\n * defaultIndentation: 2 // Indentation on nested objects\n * }\n * @returns string with the rendered data\n */\nexport function render(data, options, indentation) {\n // Default values\n indentation = indentation || 0;\n options = validateOptionsAndSetDefaults(options);\n\n return renderToArray(data, options, indentation).join(\"\\n\");\n}\n\n/**\n * ### Render from string function\n * *Parameters:*\n *\n * @param {*} data: Data to render\n * @param {PrettyJSONOptions} options: Hash of different options\n * @param {*} indentation **`indentation`**: Base indentation of the output\n *\n * *Example of options hash:*\n *\n * {\n * emptyArrayMsg: '(empty)', // Rendered message on empty strings\n * keysColor: 'blue', // Color for keys in hashes\n * dashColor: 'red', // Color for the dashes in arrays\n * defaultIndentation: 2 // Indentation on nested objects\n * }\n */\nexport function renderString(data, options, indentation) {\n let output = \"\";\n let parsedData;\n // If the input is not a string or if it's empty, just return an empty string\n if (typeof data !== \"string\" || data === \"\") {\n return \"\";\n }\n\n // Remove non-JSON characters from the beginning string\n if (data[0] !== \"{\" && data[0] !== \"[\") {\n let beginingOfJson;\n if (data.indexOf(\"{\") === -1) {\n beginingOfJson = data.indexOf(\"[\");\n } else if (data.indexOf(\"[\") === -1) {\n beginingOfJson = data.indexOf(\"{\");\n } else if (data.indexOf(\"{\") < data.indexOf(\"[\")) {\n beginingOfJson = data.indexOf(\"{\");\n } else {\n beginingOfJson = data.indexOf(\"[\");\n }\n output += `${data.substr(0, beginingOfJson)}\\n`;\n data = data.substr(beginingOfJson);\n }\n\n try {\n parsedData = JSON.parse(data);\n } catch (_e) {\n // Return an error in case of an invalid JSON\n return `${chalk.red(\"Error:\")} Not valid JSON!`;\n }\n\n // Call the real render() method\n output += exports.render(parsedData, options, indentation);\n return output;\n}\n","/**\n * Creates a string with the same length as `numSpaces` parameter\n **/\nexport function indent(numSpaces) {\n return new Array(numSpaces + 1).join(\" \");\n}\n\n/**\n * Gets the string length of the longer index in a hash\n **/\nexport function getMaxIndexLength(input) {\n var maxWidth = 0;\n\n Object.getOwnPropertyNames(input).forEach((key) => {\n // Skip undefined values.\n if (input[key] === undefined) {\n return;\n }\n\n maxWidth = Math.max(maxWidth, key.length);\n });\n return maxWidth;\n}\n\nexport function isIsoStringDate(isoString) {\n if (typeof isoString !== \"string\") {\n return false;\n }\n // More flexible regex that handles:\n // - Optional milliseconds\n // - Optional timezone offset or Z\n // - Optional T separator (space also valid)\n if (!/^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:?\\d{2})?$/.test(isoString)) {\n return false;\n }\n const testDate = new Date(isoString);\n return !Number.isNaN(testDate.getTime());\n}\n","import chalk from \"chalk\";\nimport { format } from \"date-fns\";\nimport type { ColorConfig, ViewConfig } from \"../types.js\";\n\n/**\n * Formats a timestamp into a readable string.\n *\n * @param timestamp - Unix timestamp in milliseconds\n * @param colorFn - Chalk function to color the timestamp\n * @param timestampFormat - Custom format string (date-fns) or function. Defaults to \"HH:mm:ss.SSS\"\n * @returns Formatted timestamp string\n */\nexport function formatTimestamp(\n timestamp: number,\n colorFn: typeof chalk.white,\n timestampFormat: string | ((timestamp: number) => string) = \"HH:mm:ss.SSS\",\n): string {\n let formattedTime: string;\n\n if (typeof timestampFormat === \"function\") {\n formattedTime = timestampFormat(timestamp);\n } else {\n const date = new Date(timestamp);\n formattedTime = format(date, timestampFormat);\n }\n\n return colorFn(`[${formattedTime}]`);\n}\n\n/**\n * Gets the appropriate color function for a log level.\n *\n * @param level - Log level string\n * @param colors - Color configuration object\n * @returns Chalk function for the log level\n */\nexport function getLevelColor(level: string, colors: ColorConfig): typeof chalk.white {\n const levelLower = level.toLowerCase();\n\n switch (levelLower) {\n case \"trace\":\n return colors.trace || chalk.white;\n case \"debug\":\n return colors.debug || chalk.white;\n case \"info\":\n return colors.info || chalk.white;\n case \"warn\":\n return colors.warn || chalk.white;\n case \"error\":\n return colors.error || chalk.white;\n case \"fatal\":\n return colors.fatal || chalk.white;\n default:\n return colors.info || chalk.white;\n }\n}\n\n/**\n * Formats a value for display.\n */\nexport function formatValue(value: any, expanded = false, collapseArrays = true): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return value.toString();\n if (value === null) return \"null\";\n if (value === undefined) return \"undefined\";\n if (Array.isArray(value)) return expanded ? JSON.stringify(value) : collapseArrays ? \"[...]\" : value.toString();\n if (typeof value === \"object\") return expanded ? JSON.stringify(value) : \"{...}\";\n return value.toString();\n}\n\n/**\n * Formats structured data for inline display with depth limiting.\n *\n * @param data - The data to format\n * @param config - View configuration for colors\n * @param maxDepth - Maximum depth for nested objects\n * @param expanded - Whether to show full depth (for inline view mode)\n * @param collapseArrays - Whether to collapse arrays to summary format\n * @returns Formatted data string\n */\nexport function formatInlineData(\n data: any,\n config: Required<ViewConfig>,\n maxDepth: number,\n expanded = false,\n collapseArrays = true,\n): string {\n if (!data) return \"\";\n\n const pairs: string[] = [];\n const traverse = (obj: any, prefix = \"\", depth = 0) => {\n if (!expanded && depth >= maxDepth) return;\n\n for (const [key, value] of Object.entries(obj)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n if (expanded) {\n pairs.push(`${config.dataKeyColor(fullKey)}=${config.dataValueColor(JSON.stringify(value))}`);\n } else {\n traverse(value, fullKey, depth + 1);\n }\n } else {\n pairs.push(\n `${config.dataKeyColor(fullKey)}=${config.dataValueColor(formatValue(value, expanded, collapseArrays))}`,\n );\n }\n }\n };\n\n traverse(data);\n const result = pairs.join(\" \");\n // Remove truncation - inline view should show complete data without truncation\n return result;\n}\n","import { SimplePrettyTerminalTransport } from \"./SimplePrettyTerminalTransport.js\";\nimport type { PrettyTerminalViewMode, SimplePrettyTerminalConfig, SimplePrettyTerminalTheme } from \"./types.js\";\n\n// Export chalk for custom theme creation\nexport * from \"chalk\";\n\n// Export the main transport class (for advanced usage)\nexport { SimplePrettyTerminalTransport };\n\n// Export all built-in themes\nexport * from \"./themes.js\";\n\n// Export essential types for configuration and custom themes\nexport type { SimplePrettyTerminalConfig, SimplePrettyTerminalTheme, PrettyTerminalViewMode };\n\n// Main convenience function for creating the transport\nexport function getSimplePrettyTerminal(config: SimplePrettyTerminalConfig = {}) {\n return new SimplePrettyTerminalTransport(config);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/loglayer/loglayer/packages/transports/simple-pretty-terminal/dist/index.cjs","../src/SimplePrettyTerminalTransport.ts","../src/themes.ts","../src/views/SimpleView.ts","../src/vendor/prettyjson.js","../src/vendor/utils.js","../src/views/utils.ts","../src/index.ts"],"names":["chalk"],"mappings":"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","file":"/home/runner/work/loglayer/loglayer/packages/transports/simple-pretty-terminal/dist/index.cjs","sourcesContent":[null,"/**\n * A transport for LogLayer that provides simple pretty terminal output.\n * This transport displays logs with theming and formatting but without interactive features.\n *\n * Features:\n * - Real-time log display with color-coded levels\n * - Configurable themes and colors\n * - Three view modes: inline, message-only, expanded\n * - JSON data pretty printing\n * - No interactive features (no keyboard navigation, no input)\n * - Browser and Node.js runtime support\n *\n * Usage:\n * ```typescript\n * const transport = new SimplePrettyTerminalTransport({\n * maxInlineDepth: 4,\n * maxInlineLength: 120,\n * theme: customTheme,\n * viewMode: \"inline\",\n * runtime: \"node\" // or \"browser\"\n * });\n * ```\n */\n\nimport type { LogLayerTransportParams } from \"@loglayer/transport\";\nimport { LoggerlessTransport } from \"@loglayer/transport\";\nimport chalk from \"chalk\";\nimport { moonlight } from \"./themes.js\";\nimport type { PrettyTerminalViewMode, SimplePrettyTerminalConfig } from \"./types.js\";\nimport { SimpleView } from \"./views/SimpleView.js\";\n\n/**\n * Main transport class that handles simple pretty terminal output.\n * This class provides the display functionality of PrettyTerminal without interactive features.\n *\n * The transport supports three view modes:\n * 1. Inline: Shows all information with complete data structures inline (no truncation)\n * 2. Message-only: Shows only the timestamp, log level and message for a cleaner output (no data shown)\n * 3. Expanded: Shows timestamp, level, and message on first line, with data on indented separate lines\n */\nexport class SimplePrettyTerminalTransport extends LoggerlessTransport {\n /** Handles rendering and formatting of logs */\n private renderer: SimpleView;\n\n /** Configuration options */\n private config: SimplePrettyTerminalConfig;\n\n /** Current terminal width in characters */\n private termWidth: number;\n\n /**\n * Creates a new SimplePrettyTerminalTransport instance.\n *\n * @param config - Configuration options for the transport\n */\n constructor(config: SimplePrettyTerminalConfig) {\n super(config);\n\n // Store configuration\n this.config = config;\n\n // If transport is disabled, don't initialize anything\n if (config.enabled === false) {\n return;\n }\n\n // Initialize configuration with defaults\n const maxInlineDepth = config.maxInlineDepth || 4;\n const theme = config.theme || moonlight;\n const viewMode = config.viewMode || \"inline\";\n const showLogId = config.showLogId || false;\n const timestampFormat = config.timestampFormat || \"HH:mm:ss.SSS\";\n const collapseArrays = config.collapseArrays !== false; // Default to true\n const flattenNestedObjects = config.flattenNestedObjects !== false; // Default to true\n const runtime = config.runtime;\n\n // Initialize view configuration with defaults\n const viewConfig = {\n colors: {\n trace: chalk.gray, // Lowest level, used for verbose output\n debug: chalk.blue, // Debug information\n info: chalk.green, // Normal operation\n warn: chalk.yellow, // Warning conditions\n error: chalk.red, // Error conditions\n fatal: chalk.bgRed.white, // Critical errors\n ...theme.colors,\n },\n logIdColor: theme.logIdColor || chalk.dim,\n dataValueColor: theme.dataValueColor || chalk.white,\n dataKeyColor: theme.dataKeyColor || chalk.dim,\n };\n\n // Set terminal width based on runtime\n if (runtime === \"node\") {\n this.termWidth = process?.stdout?.columns || 80;\n } else {\n // For browser, use a reasonable default width\n this.termWidth = 80;\n }\n\n // Initialize the renderer\n this.renderer = new SimpleView({\n viewMode,\n maxInlineDepth,\n showLogId,\n timestampFormat,\n collapseArrays,\n flattenNestedObjects,\n runtime,\n config: viewConfig,\n });\n\n // Update terminal width when window is resized (Node.js only)\n if (runtime === \"node\" && process?.stdout?.on) {\n process.stdout.on(\"resize\", () => {\n this.termWidth = process?.stdout?.columns || 80;\n this.renderer.updateTerminalWidth(this.termWidth);\n });\n }\n }\n\n /**\n * Generates a random ID for each log entry.\n * Uses base36 encoding for compact, readable IDs.\n *\n * @returns A 6-character string ID\n * @example\n * \"a1b2c3\" // Example generated ID\n */\n private generateId(): string {\n return Math.random().toString(36).substring(2, 8);\n }\n\n /**\n * Main transport method that receives logs from LogLayer.\n * This method is called for each log event and handles:\n * - Generating a unique ID for the log\n * - Converting the log data to a storable format\n * - Rendering the log using the SimpleView renderer\n *\n * @param logLevel - The severity level of the log\n * @param messages - Array of message strings to be joined\n * @param data - Additional structured data to be logged\n * @param hasData - Whether the log includes additional data\n * @returns The original messages array\n */\n shipToLogger({ logLevel, messages, data, hasData }: LogLayerTransportParams): any[] {\n // If transport is disabled, return messages without processing\n if (this.config.enabled === false) {\n return messages;\n }\n\n const entry = {\n id: this.generateId(),\n timestamp: Date.now(),\n level: logLevel,\n message: messages.join(\" \"),\n data: hasData ? JSON.stringify(data) : null,\n };\n\n this.renderer.renderLogLine(entry);\n return messages;\n }\n\n /**\n * Changes the view mode for log display.\n *\n * @param viewMode - The new view mode to use\n */\n setViewMode(viewMode: PrettyTerminalViewMode): void {\n if (this.config.enabled === false) {\n return;\n }\n\n // Rebuild the viewConfig as in the constructor\n const theme = this.config.theme || moonlight;\n const runtime = this.config.runtime;\n const viewConfig = {\n colors: {\n trace: chalk.gray,\n debug: chalk.blue,\n info: chalk.green,\n warn: chalk.yellow,\n error: chalk.red,\n fatal: chalk.bgRed.white,\n ...theme.colors,\n },\n logIdColor: theme.logIdColor || chalk.dim,\n dataValueColor: theme.dataValueColor || chalk.white,\n dataKeyColor: theme.dataKeyColor || chalk.dim,\n };\n\n this.renderer = new SimpleView({\n viewMode,\n maxInlineDepth: this.config.maxInlineDepth || 4,\n showLogId: this.config.showLogId || false,\n timestampFormat: this.config.timestampFormat || \"HH:mm:ss.SSS\",\n collapseArrays: this.config.collapseArrays !== false,\n flattenNestedObjects: this.config.flattenNestedObjects !== false,\n runtime,\n config: viewConfig,\n });\n }\n\n /**\n * Gets the current view mode.\n *\n * @returns The current view mode\n */\n getViewMode(): PrettyTerminalViewMode {\n return this.renderer.getViewMode();\n }\n}\n","import chalk from \"chalk\";\nimport type { SimplePrettyTerminalTheme } from \"./types.js\";\n\n/**\n * Moonlight - A dark theme with cool blue tones\n * Inspired by moonlit nights and modern IDEs\n *\n * Color Palette:\n * - Primary: Cool blues and soft greens\n * - Accents: Warm yellows and soft reds\n * - Background: Assumes dark terminal (black or very dark grey)\n *\n * Best used with:\n * - Dark terminal themes\n * - Night-time coding sessions\n * - Environments where eye strain is a concern\n */\nexport const moonlight: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(114, 135, 153), // Muted blue-grey for less important info\n debug: chalk.rgb(130, 170, 255), // Soft blue that pops but doesn't strain\n info: chalk.rgb(195, 232, 141), // Sage green for good readability\n warn: chalk.rgb(255, 203, 107), // Warm yellow, less harsh than pure yellow\n error: chalk.rgb(247, 118, 142), // Soft red that stands out without being aggressive\n fatal: chalk.bgRgb(247, 118, 142).white, // Inverted soft red for maximum visibility\n },\n logIdColor: chalk.rgb(84, 98, 117), // Darker blue-grey for secondary information\n dataValueColor: chalk.rgb(209, 219, 231), // Light grey-blue for primary content\n dataKeyColor: chalk.rgb(130, 170, 255), // Matching debug blue for consistency\n};\n\n/**\n * Sunlight - A light theme with warm tones\n * Inspired by daylight reading and paper documentation\n *\n * Color Palette:\n * - Primary: Deep, rich colors that contrast well with white\n * - Accents: Earth tones and deep jewel tones\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Daytime coding sessions\n * - High-glare environments\n * - Printed documentation\n */\nexport const sunlight: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(110, 110, 110), // Dark grey for subtle information\n debug: chalk.rgb(32, 96, 159), // Deep blue for strong contrast on white\n info: chalk.rgb(35, 134, 54), // Forest green, easier on the eyes than bright green\n warn: chalk.rgb(176, 95, 0), // Brown-orange for natural warning color\n error: chalk.rgb(191, 0, 0), // Deep red for clear visibility on light backgrounds\n fatal: chalk.bgRgb(191, 0, 0).white, // White on deep red for critical issues\n },\n logIdColor: chalk.rgb(110, 110, 110),\n dataValueColor: chalk.rgb(0, 0, 0),\n dataKeyColor: chalk.rgb(32, 96, 159),\n};\n\n/**\n * Neon - A dark theme with vibrant cyberpunk colors\n * Inspired by neon-lit cityscapes and retro-futuristic aesthetics\n *\n * Color Palette:\n * - Primary: Electric blues and hot pinks\n * - Accents: Bright purples and cyber greens\n * - Background: Assumes dark terminal (black or very dark grey)\n *\n * Best used with:\n * - Dark terminal themes\n * - High-contrast preferences\n * - Modern, tech-focused applications\n */\nexport const neon: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(108, 108, 255), // Electric blue\n debug: chalk.rgb(255, 82, 246), // Hot pink\n info: chalk.rgb(0, 255, 163), // Cyber green\n warn: chalk.rgb(255, 231, 46), // Electric yellow\n error: chalk.rgb(255, 53, 91), // Neon red\n fatal: chalk.bgRgb(255, 53, 91).rgb(0, 255, 163), // Neon red bg with cyber green text\n },\n logIdColor: chalk.rgb(187, 134, 252), // Bright purple\n dataValueColor: chalk.rgb(255, 255, 255), // Pure white\n dataKeyColor: chalk.rgb(0, 255, 240), // Cyan\n};\n\n/**\n * Nature - A light theme with organic, earthy colors\n * Inspired by forest landscapes and natural elements\n *\n * Color Palette:\n * - Primary: Deep forest greens and rich browns\n * - Accents: Autumn reds and golden yellows\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Nature-inspired interfaces\n * - Applications focusing on readability\n */\nexport const nature: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(101, 115, 126), // Slate grey\n debug: chalk.rgb(34, 139, 34), // Forest green\n info: chalk.rgb(46, 139, 87), // Sea green\n warn: chalk.rgb(218, 165, 32), // Golden rod\n error: chalk.rgb(139, 69, 19), // Saddle brown\n fatal: chalk.bgRgb(139, 69, 19).white, // Brown background with white text\n },\n logIdColor: chalk.rgb(101, 115, 126),\n dataValueColor: chalk.rgb(0, 0, 0),\n dataKeyColor: chalk.rgb(34, 139, 34),\n};\n\n/**\n * Pastel - A soft, calming theme with gentle colors\n * Inspired by watercolor paintings and soft aesthetics\n *\n * Color Palette:\n * - Primary: Soft pastels and muted tones\n * - Accents: Gentle pinks and light blues\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Long coding sessions\n * - Reduced visual stress\n */\nexport const pastel: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(200, 200, 200), // Light grey\n debug: chalk.rgb(173, 216, 230), // Light blue\n info: chalk.rgb(144, 238, 144), // Light green\n warn: chalk.rgb(255, 218, 185), // Peach\n error: chalk.rgb(255, 182, 193), // Light pink\n fatal: chalk.bgRgb(255, 182, 193).rgb(105, 105, 105), // Light pink bg with dim grey text\n },\n logIdColor: chalk.rgb(200, 200, 200),\n dataValueColor: chalk.rgb(105, 105, 105),\n dataKeyColor: chalk.rgb(173, 216, 230),\n};\n","import wrap from \"wrap-ansi\";\nimport type { LogEntry, PrettyTerminalViewMode, Runtime, SimpleViewConfig } from \"../types.js\";\nimport * as prettyjson from \"../vendor/prettyjson.js\";\nimport { formatInlineData, formatTimestamp, getLevelColor } from \"./utils.js\";\n\n/**\n * Handles rendering of the simple view mode.\n * Supports three display modes:\n * - Message-only: Shows timestamp, level and message\n * - Inline: Shows all details with complete data inline\n * - Expanded: Shows timestamp, level, and message on first line, with data on indented separate lines\n */\nexport class SimpleView {\n private termWidth: number;\n private config: SimpleViewConfig;\n private viewMode: PrettyTerminalViewMode;\n private maxInlineDepth: number;\n private showLogId: boolean;\n private timestampFormat: string | ((timestamp: number) => string);\n private collapseArrays: boolean;\n private flattenNestedObjects: boolean;\n private runtime: Runtime;\n\n constructor(config: SimpleViewConfig) {\n this.config = config;\n this.viewMode = config.viewMode;\n this.maxInlineDepth = config.maxInlineDepth;\n this.showLogId = config.showLogId;\n this.timestampFormat = config.timestampFormat;\n this.collapseArrays = config.collapseArrays !== false;\n this.flattenNestedObjects = config.flattenNestedObjects !== false;\n this.runtime = config.runtime;\n\n // Set terminal width based on runtime\n if (this.runtime === \"node\") {\n this.termWidth = process?.stdout?.columns || 120;\n } else {\n // For browser, use a reasonable default width\n this.termWidth = 120;\n }\n }\n\n public updateTerminalWidth(width: number): void {\n this.termWidth = width;\n }\n\n public getConfig(): SimpleViewConfig {\n return this.config;\n }\n\n public getViewMode(): PrettyTerminalViewMode {\n return this.viewMode;\n }\n\n /**\n * Writes a message to the appropriate output based on runtime\n */\n private writeMessage(message: string): void {\n if (this.runtime === \"node\") {\n // Use process.stdout.write for Node.js\n process?.stdout?.write?.(`${message}\\n`);\n } else {\n // Use console.log for browser\n console.log(message);\n }\n }\n\n /**\n * Renders a single log entry based on the current view mode\n */\n public renderLogLine(entry: LogEntry): void {\n const levelColor = getLevelColor(entry.level, this.config.config.colors);\n const chevron = levelColor(`▶ ${entry.level.toUpperCase()} `);\n const message = entry.message || \"(no message)\";\n const timestamp = formatTimestamp(entry.timestamp, this.config.config.logIdColor, this.timestampFormat);\n\n switch (this.viewMode) {\n case \"message-only\": {\n // Message-only view shows timestamp, level and message\n const condensedLine = `${timestamp} ${chevron}${message}`;\n this.writeMessage(wrap(condensedLine, this.termWidth, { hard: true }));\n break;\n }\n\n case \"inline\": {\n // Inline view shows all details with complete data inline\n const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n const fullData = entry.data\n ? formatInlineData(\n JSON.parse(entry.data),\n this.config.config,\n this.maxInlineDepth,\n !this.flattenNestedObjects,\n this.collapseArrays,\n )\n : \"\";\n const expandedLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}${fullData ? ` ${fullData}` : \"\"}`;\n // Don't wrap inline mode to preserve full content\n this.writeMessage(expandedLine);\n break;\n }\n\n case \"expanded\": {\n // Expanded view shows timestamp, level, and message on first line, with data on indented separate lines\n const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n const firstLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}`;\n this.writeMessage(wrap(firstLine, this.termWidth, { hard: true }));\n\n if (entry.data) {\n const jsonLines = prettyjson\n .render(JSON.parse(entry.data), {\n defaultIndentation: 2,\n keysColor: this.config.config.dataKeyColor,\n dashColor: this.config.config.dataKeyColor,\n numberColor: this.config.config.dataValueColor,\n stringColor: this.config.config.dataValueColor,\n multilineStringColor: this.config.config.dataValueColor,\n positiveNumberColor: this.config.config.dataValueColor,\n negativeNumberColor: this.config.config.dataValueColor,\n booleanColor: this.config.config.dataValueColor,\n nullUndefinedColor: this.config.config.dataValueColor,\n dateColor: this.config.config.dataValueColor,\n collapseArrays: this.collapseArrays,\n })\n .split(\"\\n\");\n\n // Add each line with proper indentation (2 spaces at the beginning)\n for (const line of jsonLines) {\n // Skip empty lines\n if (line.trim() === \"\") {\n this.writeMessage(\" \");\n } else {\n this.writeMessage(` ${line}`);\n }\n }\n }\n break;\n }\n\n default: {\n // Default to full view for any unexpected view modes\n const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n const fullData = entry.data\n ? formatInlineData(JSON.parse(entry.data), this.config.config, this.maxInlineDepth, true, this.collapseArrays)\n : \"\";\n const expandedLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}${fullData ? ` ${fullData}` : \"\"}`;\n this.writeMessage(wrap(expandedLine, this.termWidth, { hard: true }));\n break;\n }\n }\n }\n}\n","// @ts-nocheck\nimport chalk from \"chalk\";\nimport * as Utils from \"./utils.js\";\nimport { isIsoStringDate } from \"./utils.js\";\n\nconst conflictChars = /[^\\w\\s\\n\\r\\v\\t.,]/i;\n\n// Helper function to detect if an object should be printed or ignored\nconst isPrintable = (input, options) => input !== undefined || options.renderUndefined;\n\n// Helper function to detect if an object can be directly serializable\nconst isSerializable = (input, onlyPrimitives, options) => {\n if (\n typeof input === \"boolean\" ||\n typeof input === \"number\" ||\n typeof input === \"function\" ||\n input === null ||\n input === undefined ||\n input instanceof Date\n ) {\n return true;\n }\n if (typeof input === \"string\" && input.indexOf(\"\\n\") === -1) {\n return true;\n }\n\n if (options.inlineArrays && !onlyPrimitives) {\n if (Array.isArray(input) && isSerializable(input[0], true, options)) {\n return true;\n }\n }\n\n return false;\n};\n\n/**\n * @param {Function} colorFn\n * @param {PrettyJSONOptions} options\n */\nconst getColorRenderer = (colorFn, options) => {\n if (options.noColor) {\n return (text) => text;\n }\n\n if (typeof colorFn !== \"function\") {\n return (text) => text;\n }\n\n return colorFn;\n};\n\nconst addColorToData = (input, options) => {\n if (options.noColor) {\n return input;\n }\n\n if (input instanceof Date) {\n return getColorRenderer(options.dateColor, options)(input.toISOString());\n }\n if (typeof input === \"string\") {\n if (isIsoStringDate(input)) {\n return getColorRenderer(options.dateColor, options)(input);\n }\n // Print strings in regular terminal color\n return getColorRenderer(options.stringColor, options)(input);\n }\n\n const sInput = `${input}`;\n\n if (typeof input === \"boolean\") {\n return getColorRenderer(options.booleanColor, options)(sInput);\n }\n if (input === null || input === undefined) {\n return getColorRenderer(options.nullUndefinedColor, options)(sInput);\n }\n if (typeof input === \"number\") {\n if (input >= 0) {\n return getColorRenderer(options.positiveNumberColor, options)(sInput);\n }\n return getColorRenderer(options.negativeNumberColor, options)(sInput);\n }\n if (typeof input === \"function\") {\n return \"function() {}\";\n }\n\n if (Array.isArray(input)) {\n return input.join(\", \");\n }\n\n return sInput;\n};\n\nconst colorMultilineString = (options, line) => getColorRenderer(options.multilineStringColor, options)(line);\n\nconst indentLines = (string, spaces, options) => {\n let lines = string.split(\"\\n\");\n lines = lines.map((line) => Utils.indent(spaces) + colorMultilineString(options, line));\n return lines.join(\"\\n\");\n};\n\nconst renderToArray = (data, options, indentation) => {\n if (typeof data === \"string\" && data.match(conflictChars) && options.escape) {\n data = JSON.stringify(data);\n }\n\n if (!isPrintable(data, options)) {\n return [];\n }\n\n if (isSerializable(data, false, options)) {\n return [Utils.indent(indentation) + addColorToData(data, options)];\n }\n\n // Unserializable string means it's multiline\n if (typeof data === \"string\") {\n return [\n Utils.indent(indentation) + colorMultilineString(options, '\"\"\"'),\n indentLines(data, indentation + options.defaultIndentation, options),\n Utils.indent(indentation) + colorMultilineString(options, '\"\"\"'),\n ];\n }\n\n if (Array.isArray(data)) {\n // If the array is empty, render the `emptyArrayMsg`\n if (data.length === 0) {\n return [Utils.indent(indentation) + options.emptyArrayMsg];\n }\n\n // If arrays should be collapsed and there's data, show [...]\n if (options.collapseArrays && data.length > 0) {\n return [`${Utils.indent(indentation)}[... ${data.length} items]`];\n }\n\n const outputArray = [];\n\n data.forEach((element) => {\n if (!isPrintable(element, options)) {\n return;\n }\n\n // Prepend the dash at the beginning of each array's element line\n let line = \"- \";\n line = getColorRenderer(options.dashColor, options)(line);\n line = Utils.indent(indentation) + line;\n\n // If the element of the array is a string, bool, number, or null\n // render it in the same line\n if (isSerializable(element, false, options)) {\n line += renderToArray(element, options, 0)[0];\n outputArray.push(line);\n\n // If the element is an array or object, render it in next line\n } else {\n outputArray.push(line);\n outputArray.push.apply(outputArray, renderToArray(element, options, indentation + options.defaultIndentation));\n }\n });\n\n return outputArray;\n }\n\n if (data instanceof Error) {\n return renderToArray(\n {\n message: data.message,\n stack: data.stack.split(\"\\n\"),\n },\n options,\n indentation,\n );\n }\n\n // If values alignment is enabled, get the size of the longest index\n // to align all the values\n const maxIndexLength = options.noAlign ? 0 : Utils.getMaxIndexLength(data);\n let key;\n const output = [];\n\n Object.getOwnPropertyNames(data).forEach((i) => {\n if (!isPrintable(data[i], options)) {\n return;\n }\n\n // Prepend the index at the beginning of the line\n key = `${i}: `;\n key = getColorRenderer(options.keysColor, options)(key);\n key = Utils.indent(indentation) + key;\n\n // If the value is serializable, render it in the same line\n if (isSerializable(data[i], false, options)) {\n const nextIndentation = options.noAlign ? 0 : maxIndexLength - i.length;\n key += renderToArray(data[i], options, nextIndentation)[0];\n output.push(key);\n\n // If the index is an array or object, render it in next line\n } else {\n output.push(key);\n output.push.apply(output, renderToArray(data[i], options, indentation + options.defaultIndentation));\n }\n });\n return output;\n};\n/**\n * @typedef {Object} PrettyJSONOptions\n * @property {Function} [stringColor=null] Chalk color function for strings\n * @property {Function} [multilineStringColor=null] Chalk color function for multiline strings\n * @property {Function} [keysColor=chalk.green] Chalk color function for keys in hashes\n * @property {Function} [dashColor=chalk.green] Chalk color function for dashes in arrays\n * @property {Function} [numberColor=chalk.blue] Default Chalk color function for numbers\n * @property {Function} [positiveNumberColor=numberColor] Chalk color function for positive numbers\n * @property {Function} [negativeNumberColor=numberColor] Chalk color function for negative numbers\n * @property {Function} [booleanColor=chalk.cyan] Chalk color function for boolean values\n * @property {Function} [nullUndefinedColor=chalk.grey] Chalk color function for null || undefined\n * @property {Function} [dateColor=chalk.magenta] Chalk color function for Date objects\n * @property {number} [defaultIndentation=2] Indentation spaces per object level\n * @property {string} [emptyArrayMsg=\"(empty array)\"] Replace empty strings with\n * @property {boolean} [noColor] Flag to disable colors\n * @property {boolean} [noAlign] Flag to disable alignment\n * @property {boolean} [escape] Flag to escape printed content\n * @property {boolean} [collapseArrays] Flag to collapse arrays\n */\n/**\n * Mutating function that ensures we have a valid options object\n * @param {PrettyJSONOptions} options\n * @returns PrettyJSONOptions\n */\nconst validateOptionsAndSetDefaults = (options) => {\n options = options || {};\n options.emptyArrayMsg = options.emptyArrayMsg || \"(empty array)\";\n options.keysColor = options.keysColor || chalk.green;\n options.dashColor = options.dashColor || chalk.green;\n options.booleanColor = options.booleanColor || chalk.cyan;\n options.nullUndefinedColor = options.nullUndefinedColor || chalk.grey;\n options.numberColor = options.numberColor || chalk.blue;\n options.positiveNumberColor = options.positiveNumberColor || options.numberColor;\n options.negativeNumberColor = options.negativeNumberColor || options.numberColor;\n options.dateColor = options.dateColor || chalk.magenta;\n options.defaultIndentation = options.defaultIndentation || 2;\n options.noColor = !!options.noColor;\n options.noAlign = !!options.noAlign;\n options.escape = !!options.escape;\n options.renderUndefined = !!options.renderUndefined;\n options.collapseArrays = !!options.collapseArrays;\n\n options.stringColor = options.stringColor || null;\n options.multilineStringColor = options.multilineStringColor || options.stringColor || null;\n\n return options;\n};\n/**\n * ### Render function\n * *Parameters:*\n *\n * @param {*} data: Data to render\n * @param {PrettyJSONOptions} options: Hash of different options\n * @param {*} indentation **`indentation`**: Base indentation of the output\n *\n * *Example of options hash:*\n *\n * {\n * emptyArrayMsg: '(empty)', // Rendered message on empty strings\n * keysColor: 'blue', // Color for keys in hashes\n * dashColor: 'red', // Color for the dashes in arrays\n * stringColor: 'grey', // Color for strings\n * multilineStringColor: 'cyan' // Color for multiline strings\n * defaultIndentation: 2 // Indentation on nested objects\n * }\n * @returns string with the rendered data\n */\nexport function render(data, options, indentation) {\n // Default values\n indentation = indentation || 0;\n options = validateOptionsAndSetDefaults(options);\n\n return renderToArray(data, options, indentation).join(\"\\n\");\n}\n\n/**\n * ### Render from string function\n * *Parameters:*\n *\n * @param {*} data: Data to render\n * @param {PrettyJSONOptions} options: Hash of different options\n * @param {*} indentation **`indentation`**: Base indentation of the output\n *\n * *Example of options hash:*\n *\n * {\n * emptyArrayMsg: '(empty)', // Rendered message on empty strings\n * keysColor: 'blue', // Color for keys in hashes\n * dashColor: 'red', // Color for the dashes in arrays\n * defaultIndentation: 2 // Indentation on nested objects\n * }\n */\nexport function renderString(data, options, indentation) {\n let output = \"\";\n let parsedData;\n // If the input is not a string or if it's empty, just return an empty string\n if (typeof data !== \"string\" || data === \"\") {\n return \"\";\n }\n\n // Remove non-JSON characters from the beginning string\n if (data[0] !== \"{\" && data[0] !== \"[\") {\n let beginingOfJson;\n if (data.indexOf(\"{\") === -1) {\n beginingOfJson = data.indexOf(\"[\");\n } else if (data.indexOf(\"[\") === -1) {\n beginingOfJson = data.indexOf(\"{\");\n } else if (data.indexOf(\"{\") < data.indexOf(\"[\")) {\n beginingOfJson = data.indexOf(\"{\");\n } else {\n beginingOfJson = data.indexOf(\"[\");\n }\n output += `${data.substr(0, beginingOfJson)}\\n`;\n data = data.substr(beginingOfJson);\n }\n\n try {\n parsedData = JSON.parse(data);\n } catch (_e) {\n // Return an error in case of an invalid JSON\n return `${chalk.red(\"Error:\")} Not valid JSON!`;\n }\n\n // Call the real render() method\n output += exports.render(parsedData, options, indentation);\n return output;\n}\n","/**\n * Creates a string with the same length as `numSpaces` parameter\n **/\nexport function indent(numSpaces) {\n return new Array(numSpaces + 1).join(\" \");\n}\n\n/**\n * Gets the string length of the longer index in a hash\n **/\nexport function getMaxIndexLength(input) {\n var maxWidth = 0;\n\n Object.getOwnPropertyNames(input).forEach((key) => {\n // Skip undefined values.\n if (input[key] === undefined) {\n return;\n }\n\n maxWidth = Math.max(maxWidth, key.length);\n });\n return maxWidth;\n}\n\nexport function isIsoStringDate(isoString) {\n if (typeof isoString !== \"string\") {\n return false;\n }\n // More flexible regex that handles:\n // - Optional milliseconds\n // - Optional timezone offset or Z\n // - Optional T separator (space also valid)\n if (!/^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:?\\d{2})?$/.test(isoString)) {\n return false;\n }\n const testDate = new Date(isoString);\n return !Number.isNaN(testDate.getTime());\n}\n","import chalk from \"chalk\";\nimport { format } from \"date-fns\";\nimport type { ColorConfig, ViewConfig } from \"../types.js\";\n\n/**\n * Formats a timestamp into a readable string.\n *\n * @param timestamp - Unix timestamp in milliseconds\n * @param colorFn - Chalk function to color the timestamp\n * @param timestampFormat - Custom format string (date-fns) or function. Defaults to \"HH:mm:ss.SSS\"\n * @returns Formatted timestamp string\n */\nexport function formatTimestamp(\n timestamp: number,\n colorFn: typeof chalk.white,\n timestampFormat: string | ((timestamp: number) => string) = \"HH:mm:ss.SSS\",\n): string {\n let formattedTime: string;\n\n if (typeof timestampFormat === \"function\") {\n formattedTime = timestampFormat(timestamp);\n } else {\n const date = new Date(timestamp);\n formattedTime = format(date, timestampFormat);\n }\n\n return colorFn(`[${formattedTime}]`);\n}\n\n/**\n * Gets the appropriate color function for a log level.\n *\n * @param level - Log level string\n * @param colors - Color configuration object\n * @returns Chalk function for the log level\n */\nexport function getLevelColor(level: string, colors: ColorConfig): typeof chalk.white {\n const levelLower = level.toLowerCase();\n\n switch (levelLower) {\n case \"trace\":\n return colors.trace || chalk.white;\n case \"debug\":\n return colors.debug || chalk.white;\n case \"info\":\n return colors.info || chalk.white;\n case \"warn\":\n return colors.warn || chalk.white;\n case \"error\":\n return colors.error || chalk.white;\n case \"fatal\":\n return colors.fatal || chalk.white;\n default:\n return colors.info || chalk.white;\n }\n}\n\n/**\n * Formats a value for display.\n */\nexport function formatValue(value: any, expanded = false, collapseArrays = true): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return value.toString();\n if (value === null) return \"null\";\n if (value === undefined) return \"undefined\";\n if (Array.isArray(value)) return expanded ? JSON.stringify(value) : collapseArrays ? \"[...]\" : value.toString();\n if (typeof value === \"object\") return expanded ? JSON.stringify(value) : \"{...}\";\n return value.toString();\n}\n\n/**\n * Formats structured data for inline display with depth limiting.\n *\n * @param data - The data to format\n * @param config - View configuration for colors\n * @param maxDepth - Maximum depth for nested objects\n * @param expanded - Whether to show full depth (for inline view mode)\n * @param collapseArrays - Whether to collapse arrays to summary format\n * @returns Formatted data string\n */\nexport function formatInlineData(\n data: any,\n config: Required<ViewConfig>,\n maxDepth: number,\n expanded = false,\n collapseArrays = true,\n): string {\n if (!data) return \"\";\n\n const pairs: string[] = [];\n const traverse = (obj: any, prefix = \"\", depth = 0) => {\n if (!expanded && depth >= maxDepth) return;\n\n for (const [key, value] of Object.entries(obj)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n if (expanded) {\n pairs.push(`${config.dataKeyColor(fullKey)}=${config.dataValueColor(JSON.stringify(value))}`);\n } else {\n traverse(value, fullKey, depth + 1);\n }\n } else {\n pairs.push(\n `${config.dataKeyColor(fullKey)}=${config.dataValueColor(formatValue(value, expanded, collapseArrays))}`,\n );\n }\n }\n };\n\n traverse(data);\n const result = pairs.join(\" \");\n // Remove truncation - inline view should show complete data without truncation\n return result;\n}\n","import { SimplePrettyTerminalTransport } from \"./SimplePrettyTerminalTransport.js\";\nimport type {\n PrettyTerminalViewMode,\n Runtime,\n SimplePrettyTerminalConfig,\n SimplePrettyTerminalTheme,\n} from \"./types.js\";\n\n// Export chalk for custom theme creation\nexport * from \"chalk\";\n\n// Export the main transport class (for advanced usage)\nexport { SimplePrettyTerminalTransport };\n\n// Export all built-in themes\nexport * from \"./themes.js\";\n\n// Export essential types for configuration and custom themes\nexport type { SimplePrettyTerminalConfig, SimplePrettyTerminalTheme, PrettyTerminalViewMode, Runtime };\n\n// Main convenience function for creating the transport\nexport function getSimplePrettyTerminal(config: SimplePrettyTerminalConfig) {\n return new SimplePrettyTerminalTransport(config);\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -34,6 +34,11 @@ interface ViewConfig {
|
|
|
34
34
|
/** Style for data keys in structured data */
|
|
35
35
|
dataKeyColor?: ChalkInstance;
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Runtime environment for the transport.
|
|
39
|
+
* Determines how logs are output.
|
|
40
|
+
*/
|
|
41
|
+
type Runtime = "node" | "browser";
|
|
37
42
|
/**
|
|
38
43
|
* Theme configuration for the simple pretty terminal transport.
|
|
39
44
|
* Defines styling for log output.
|
|
@@ -68,8 +73,8 @@ interface SimplePrettyTerminalConfig extends LoggerlessTransportConfig {
|
|
|
68
73
|
collapseArrays?: boolean;
|
|
69
74
|
/** Whether to flatten nested objects with dot notation in inline mode. Defaults to true */
|
|
70
75
|
flattenNestedObjects?: boolean;
|
|
71
|
-
/**
|
|
72
|
-
|
|
76
|
+
/** Runtime environment for output */
|
|
77
|
+
runtime: Runtime;
|
|
73
78
|
}
|
|
74
79
|
|
|
75
80
|
/**
|
|
@@ -82,6 +87,7 @@ interface SimplePrettyTerminalConfig extends LoggerlessTransportConfig {
|
|
|
82
87
|
* - Three view modes: inline, message-only, expanded
|
|
83
88
|
* - JSON data pretty printing
|
|
84
89
|
* - No interactive features (no keyboard navigation, no input)
|
|
90
|
+
* - Browser and Node.js runtime support
|
|
85
91
|
*
|
|
86
92
|
* Usage:
|
|
87
93
|
* ```typescript
|
|
@@ -89,7 +95,8 @@ interface SimplePrettyTerminalConfig extends LoggerlessTransportConfig {
|
|
|
89
95
|
* maxInlineDepth: 4,
|
|
90
96
|
* maxInlineLength: 120,
|
|
91
97
|
* theme: customTheme,
|
|
92
|
-
* viewMode: "inline"
|
|
98
|
+
* viewMode: "inline",
|
|
99
|
+
* runtime: "node" // or "browser"
|
|
93
100
|
* });
|
|
94
101
|
* ```
|
|
95
102
|
*/
|
|
@@ -115,7 +122,7 @@ declare class SimplePrettyTerminalTransport extends LoggerlessTransport {
|
|
|
115
122
|
*
|
|
116
123
|
* @param config - Configuration options for the transport
|
|
117
124
|
*/
|
|
118
|
-
constructor(config
|
|
125
|
+
constructor(config: SimplePrettyTerminalConfig);
|
|
119
126
|
/**
|
|
120
127
|
* Generates a random ID for each log entry.
|
|
121
128
|
* Uses base36 encoding for compact, readable IDs.
|
|
@@ -230,6 +237,6 @@ declare const nature: SimplePrettyTerminalTheme;
|
|
|
230
237
|
*/
|
|
231
238
|
declare const pastel: SimplePrettyTerminalTheme;
|
|
232
239
|
|
|
233
|
-
declare function getSimplePrettyTerminal(config
|
|
240
|
+
declare function getSimplePrettyTerminal(config: SimplePrettyTerminalConfig): SimplePrettyTerminalTransport;
|
|
234
241
|
|
|
235
|
-
export { type PrettyTerminalViewMode, type SimplePrettyTerminalConfig, type SimplePrettyTerminalTheme, SimplePrettyTerminalTransport, getSimplePrettyTerminal, moonlight, nature, neon, pastel, sunlight };
|
|
242
|
+
export { type PrettyTerminalViewMode, type Runtime, type SimplePrettyTerminalConfig, type SimplePrettyTerminalTheme, SimplePrettyTerminalTransport, getSimplePrettyTerminal, moonlight, nature, neon, pastel, sunlight };
|
package/dist/index.d.ts
CHANGED
|
@@ -34,6 +34,11 @@ interface ViewConfig {
|
|
|
34
34
|
/** Style for data keys in structured data */
|
|
35
35
|
dataKeyColor?: ChalkInstance;
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Runtime environment for the transport.
|
|
39
|
+
* Determines how logs are output.
|
|
40
|
+
*/
|
|
41
|
+
type Runtime = "node" | "browser";
|
|
37
42
|
/**
|
|
38
43
|
* Theme configuration for the simple pretty terminal transport.
|
|
39
44
|
* Defines styling for log output.
|
|
@@ -68,8 +73,8 @@ interface SimplePrettyTerminalConfig extends LoggerlessTransportConfig {
|
|
|
68
73
|
collapseArrays?: boolean;
|
|
69
74
|
/** Whether to flatten nested objects with dot notation in inline mode. Defaults to true */
|
|
70
75
|
flattenNestedObjects?: boolean;
|
|
71
|
-
/**
|
|
72
|
-
|
|
76
|
+
/** Runtime environment for output */
|
|
77
|
+
runtime: Runtime;
|
|
73
78
|
}
|
|
74
79
|
|
|
75
80
|
/**
|
|
@@ -82,6 +87,7 @@ interface SimplePrettyTerminalConfig extends LoggerlessTransportConfig {
|
|
|
82
87
|
* - Three view modes: inline, message-only, expanded
|
|
83
88
|
* - JSON data pretty printing
|
|
84
89
|
* - No interactive features (no keyboard navigation, no input)
|
|
90
|
+
* - Browser and Node.js runtime support
|
|
85
91
|
*
|
|
86
92
|
* Usage:
|
|
87
93
|
* ```typescript
|
|
@@ -89,7 +95,8 @@ interface SimplePrettyTerminalConfig extends LoggerlessTransportConfig {
|
|
|
89
95
|
* maxInlineDepth: 4,
|
|
90
96
|
* maxInlineLength: 120,
|
|
91
97
|
* theme: customTheme,
|
|
92
|
-
* viewMode: "inline"
|
|
98
|
+
* viewMode: "inline",
|
|
99
|
+
* runtime: "node" // or "browser"
|
|
93
100
|
* });
|
|
94
101
|
* ```
|
|
95
102
|
*/
|
|
@@ -115,7 +122,7 @@ declare class SimplePrettyTerminalTransport extends LoggerlessTransport {
|
|
|
115
122
|
*
|
|
116
123
|
* @param config - Configuration options for the transport
|
|
117
124
|
*/
|
|
118
|
-
constructor(config
|
|
125
|
+
constructor(config: SimplePrettyTerminalConfig);
|
|
119
126
|
/**
|
|
120
127
|
* Generates a random ID for each log entry.
|
|
121
128
|
* Uses base36 encoding for compact, readable IDs.
|
|
@@ -230,6 +237,6 @@ declare const nature: SimplePrettyTerminalTheme;
|
|
|
230
237
|
*/
|
|
231
238
|
declare const pastel: SimplePrettyTerminalTheme;
|
|
232
239
|
|
|
233
|
-
declare function getSimplePrettyTerminal(config
|
|
240
|
+
declare function getSimplePrettyTerminal(config: SimplePrettyTerminalConfig): SimplePrettyTerminalTransport;
|
|
234
241
|
|
|
235
|
-
export { type PrettyTerminalViewMode, type SimplePrettyTerminalConfig, type SimplePrettyTerminalTheme, SimplePrettyTerminalTransport, getSimplePrettyTerminal, moonlight, nature, neon, pastel, sunlight };
|
|
242
|
+
export { type PrettyTerminalViewMode, type Runtime, type SimplePrettyTerminalConfig, type SimplePrettyTerminalTheme, SimplePrettyTerminalTransport, getSimplePrettyTerminal, moonlight, nature, neon, pastel, sunlight };
|
package/dist/index.js
CHANGED
|
@@ -379,7 +379,7 @@ var SimpleView = class {
|
|
|
379
379
|
timestampFormat;
|
|
380
380
|
collapseArrays;
|
|
381
381
|
flattenNestedObjects;
|
|
382
|
-
|
|
382
|
+
runtime;
|
|
383
383
|
constructor(config) {
|
|
384
384
|
this.config = config;
|
|
385
385
|
this.viewMode = config.viewMode;
|
|
@@ -388,8 +388,12 @@ var SimpleView = class {
|
|
|
388
388
|
this.timestampFormat = config.timestampFormat;
|
|
389
389
|
this.collapseArrays = config.collapseArrays !== false;
|
|
390
390
|
this.flattenNestedObjects = config.flattenNestedObjects !== false;
|
|
391
|
-
this.
|
|
392
|
-
this.
|
|
391
|
+
this.runtime = config.runtime;
|
|
392
|
+
if (this.runtime === "node") {
|
|
393
|
+
this.termWidth = process?.stdout?.columns || 120;
|
|
394
|
+
} else {
|
|
395
|
+
this.termWidth = 120;
|
|
396
|
+
}
|
|
393
397
|
}
|
|
394
398
|
updateTerminalWidth(width) {
|
|
395
399
|
this.termWidth = width;
|
|
@@ -400,6 +404,17 @@ var SimpleView = class {
|
|
|
400
404
|
getViewMode() {
|
|
401
405
|
return this.viewMode;
|
|
402
406
|
}
|
|
407
|
+
/**
|
|
408
|
+
* Writes a message to the appropriate output based on runtime
|
|
409
|
+
*/
|
|
410
|
+
writeMessage(message) {
|
|
411
|
+
if (this.runtime === "node") {
|
|
412
|
+
process?.stdout?.write?.(`${message}
|
|
413
|
+
`);
|
|
414
|
+
} else {
|
|
415
|
+
console.log(message);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
403
418
|
/**
|
|
404
419
|
* Renders a single log entry based on the current view mode
|
|
405
420
|
*/
|
|
@@ -411,7 +426,7 @@ var SimpleView = class {
|
|
|
411
426
|
switch (this.viewMode) {
|
|
412
427
|
case "message-only": {
|
|
413
428
|
const condensedLine = `${timestamp} ${chevron}${message}`;
|
|
414
|
-
this.
|
|
429
|
+
this.writeMessage(wrap(condensedLine, this.termWidth, { hard: true }));
|
|
415
430
|
break;
|
|
416
431
|
}
|
|
417
432
|
case "inline": {
|
|
@@ -424,13 +439,13 @@ var SimpleView = class {
|
|
|
424
439
|
this.collapseArrays
|
|
425
440
|
) : "";
|
|
426
441
|
const expandedLine = `${timestamp} ${chevron}${logId ? `${logId} ` : ""}${message}${fullData ? ` ${fullData}` : ""}`;
|
|
427
|
-
this.
|
|
442
|
+
this.writeMessage(expandedLine);
|
|
428
443
|
break;
|
|
429
444
|
}
|
|
430
445
|
case "expanded": {
|
|
431
446
|
const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : "";
|
|
432
447
|
const firstLine = `${timestamp} ${chevron}${logId ? `${logId} ` : ""}${message}`;
|
|
433
|
-
this.
|
|
448
|
+
this.writeMessage(wrap(firstLine, this.termWidth, { hard: true }));
|
|
434
449
|
if (entry.data) {
|
|
435
450
|
const jsonLines = render(JSON.parse(entry.data), {
|
|
436
451
|
defaultIndentation: 2,
|
|
@@ -448,9 +463,9 @@ var SimpleView = class {
|
|
|
448
463
|
}).split("\n");
|
|
449
464
|
for (const line of jsonLines) {
|
|
450
465
|
if (line.trim() === "") {
|
|
451
|
-
this.
|
|
466
|
+
this.writeMessage(" ");
|
|
452
467
|
} else {
|
|
453
|
-
this.
|
|
468
|
+
this.writeMessage(` ${line}`);
|
|
454
469
|
}
|
|
455
470
|
}
|
|
456
471
|
}
|
|
@@ -460,7 +475,7 @@ var SimpleView = class {
|
|
|
460
475
|
const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : "";
|
|
461
476
|
const fullData = entry.data ? formatInlineData(JSON.parse(entry.data), this.config.config, this.maxInlineDepth, true, this.collapseArrays) : "";
|
|
462
477
|
const expandedLine = `${timestamp} ${chevron}${logId ? `${logId} ` : ""}${message}${fullData ? ` ${fullData}` : ""}`;
|
|
463
|
-
this.
|
|
478
|
+
this.writeMessage(wrap(expandedLine, this.termWidth, { hard: true }));
|
|
464
479
|
break;
|
|
465
480
|
}
|
|
466
481
|
}
|
|
@@ -480,7 +495,7 @@ var SimplePrettyTerminalTransport = class extends LoggerlessTransport {
|
|
|
480
495
|
*
|
|
481
496
|
* @param config - Configuration options for the transport
|
|
482
497
|
*/
|
|
483
|
-
constructor(config
|
|
498
|
+
constructor(config) {
|
|
484
499
|
super(config);
|
|
485
500
|
this.config = config;
|
|
486
501
|
if (config.enabled === false) {
|
|
@@ -493,7 +508,7 @@ var SimplePrettyTerminalTransport = class extends LoggerlessTransport {
|
|
|
493
508
|
const timestampFormat = config.timestampFormat || "HH:mm:ss.SSS";
|
|
494
509
|
const collapseArrays = config.collapseArrays !== false;
|
|
495
510
|
const flattenNestedObjects = config.flattenNestedObjects !== false;
|
|
496
|
-
const
|
|
511
|
+
const runtime = config.runtime;
|
|
497
512
|
const viewConfig = {
|
|
498
513
|
colors: {
|
|
499
514
|
trace: chalk4.gray,
|
|
@@ -514,7 +529,11 @@ var SimplePrettyTerminalTransport = class extends LoggerlessTransport {
|
|
|
514
529
|
dataValueColor: theme.dataValueColor || chalk4.white,
|
|
515
530
|
dataKeyColor: theme.dataKeyColor || chalk4.dim
|
|
516
531
|
};
|
|
517
|
-
|
|
532
|
+
if (runtime === "node") {
|
|
533
|
+
this.termWidth = process?.stdout?.columns || 80;
|
|
534
|
+
} else {
|
|
535
|
+
this.termWidth = 80;
|
|
536
|
+
}
|
|
518
537
|
this.renderer = new SimpleView({
|
|
519
538
|
viewMode,
|
|
520
539
|
maxInlineDepth,
|
|
@@ -522,13 +541,15 @@ var SimplePrettyTerminalTransport = class extends LoggerlessTransport {
|
|
|
522
541
|
timestampFormat,
|
|
523
542
|
collapseArrays,
|
|
524
543
|
flattenNestedObjects,
|
|
525
|
-
|
|
544
|
+
runtime,
|
|
526
545
|
config: viewConfig
|
|
527
546
|
});
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
547
|
+
if (runtime === "node" && process?.stdout?.on) {
|
|
548
|
+
process.stdout.on("resize", () => {
|
|
549
|
+
this.termWidth = process?.stdout?.columns || 80;
|
|
550
|
+
this.renderer.updateTerminalWidth(this.termWidth);
|
|
551
|
+
});
|
|
552
|
+
}
|
|
532
553
|
}
|
|
533
554
|
/**
|
|
534
555
|
* Generates a random ID for each log entry.
|
|
@@ -578,7 +599,7 @@ var SimplePrettyTerminalTransport = class extends LoggerlessTransport {
|
|
|
578
599
|
return;
|
|
579
600
|
}
|
|
580
601
|
const theme = this.config.theme || moonlight;
|
|
581
|
-
const
|
|
602
|
+
const runtime = this.config.runtime;
|
|
582
603
|
const viewConfig = {
|
|
583
604
|
colors: {
|
|
584
605
|
trace: chalk4.gray,
|
|
@@ -600,7 +621,7 @@ var SimplePrettyTerminalTransport = class extends LoggerlessTransport {
|
|
|
600
621
|
timestampFormat: this.config.timestampFormat || "HH:mm:ss.SSS",
|
|
601
622
|
collapseArrays: this.config.collapseArrays !== false,
|
|
602
623
|
flattenNestedObjects: this.config.flattenNestedObjects !== false,
|
|
603
|
-
|
|
624
|
+
runtime,
|
|
604
625
|
config: viewConfig
|
|
605
626
|
});
|
|
606
627
|
}
|
|
@@ -616,7 +637,7 @@ var SimplePrettyTerminalTransport = class extends LoggerlessTransport {
|
|
|
616
637
|
|
|
617
638
|
// src/index.ts
|
|
618
639
|
export * from "chalk";
|
|
619
|
-
function getSimplePrettyTerminal(config
|
|
640
|
+
function getSimplePrettyTerminal(config) {
|
|
620
641
|
return new SimplePrettyTerminalTransport(config);
|
|
621
642
|
}
|
|
622
643
|
export {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SimplePrettyTerminalTransport.ts","../src/themes.ts","../src/views/SimpleView.ts","../src/vendor/prettyjson.js","../src/vendor/utils.js","../src/views/utils.ts","../src/index.ts"],"sourcesContent":["/**\n * A transport for LogLayer that provides simple pretty terminal output.\n * This transport displays logs with theming and formatting but without interactive features.\n *\n * Features:\n * - Real-time log display with color-coded levels\n * - Configurable themes and colors\n * - Three view modes: inline, message-only, expanded\n * - JSON data pretty printing\n * - No interactive features (no keyboard navigation, no input)\n *\n * Usage:\n * ```typescript\n * const transport = new SimplePrettyTerminalTransport({\n * maxInlineDepth: 4,\n * maxInlineLength: 120,\n * theme: customTheme,\n * viewMode: \"inline\"\n * });\n * ```\n */\n\nimport type { LogLayerTransportParams } from \"@loglayer/transport\";\nimport { LoggerlessTransport } from \"@loglayer/transport\";\nimport chalk from \"chalk\";\nimport { moonlight } from \"./themes.js\";\nimport type { PrettyTerminalViewMode, SimplePrettyTerminalConfig } from \"./types.js\";\nimport { SimpleView } from \"./views/SimpleView.js\";\n\n/**\n * Main transport class that handles simple pretty terminal output.\n * This class provides the display functionality of PrettyTerminal without interactive features.\n *\n * The transport supports three view modes:\n * 1. Inline: Shows all information with complete data structures inline (no truncation)\n * 2. Message-only: Shows only the timestamp, log level and message for a cleaner output (no data shown)\n * 3. Expanded: Shows timestamp, level, and message on first line, with data on indented separate lines\n */\nexport class SimplePrettyTerminalTransport extends LoggerlessTransport {\n /** Handles rendering and formatting of logs */\n private renderer: SimpleView;\n\n /** Configuration options */\n private config: SimplePrettyTerminalConfig;\n\n /** Current terminal width in characters */\n private termWidth: number;\n\n /**\n * Creates a new SimplePrettyTerminalTransport instance.\n *\n * @param config - Configuration options for the transport\n */\n constructor(config: SimplePrettyTerminalConfig = {}) {\n super(config);\n\n // Store configuration\n this.config = config;\n\n // If transport is disabled, don't initialize anything\n if (config.enabled === false) {\n return;\n }\n\n // Initialize configuration with defaults\n const maxInlineDepth = config.maxInlineDepth || 4;\n const theme = config.theme || moonlight;\n const viewMode = config.viewMode || \"inline\";\n const showLogId = config.showLogId || false;\n const timestampFormat = config.timestampFormat || \"HH:mm:ss.SSS\";\n const collapseArrays = config.collapseArrays !== false; // Default to true\n const flattenNestedObjects = config.flattenNestedObjects !== false; // Default to true\n const writeFn = config.writeFn || ((message: string) => process.stdout.write(message + \"\\n\"));\n\n // Initialize view configuration with defaults\n const viewConfig = {\n colors: {\n trace: chalk.gray, // Lowest level, used for verbose output\n debug: chalk.blue, // Debug information\n info: chalk.green, // Normal operation\n warn: chalk.yellow, // Warning conditions\n error: chalk.red, // Error conditions\n fatal: chalk.bgRed.white, // Critical errors\n ...theme.colors,\n },\n logIdColor: theme.logIdColor || chalk.dim,\n dataValueColor: theme.dataValueColor || chalk.white,\n dataKeyColor: theme.dataKeyColor || chalk.dim,\n };\n\n this.termWidth = process.stdout.columns || 80;\n\n // Initialize the renderer\n this.renderer = new SimpleView({\n viewMode,\n maxInlineDepth,\n showLogId,\n timestampFormat,\n collapseArrays,\n flattenNestedObjects,\n writeFn,\n config: viewConfig,\n });\n\n // Update terminal width when window is resized\n process.stdout.on(\"resize\", () => {\n this.termWidth = process.stdout.columns || 80;\n this.renderer.updateTerminalWidth(this.termWidth);\n });\n }\n\n /**\n * Generates a random ID for each log entry.\n * Uses base36 encoding for compact, readable IDs.\n *\n * @returns A 6-character string ID\n * @example\n * \"a1b2c3\" // Example generated ID\n */\n private generateId(): string {\n return Math.random().toString(36).substring(2, 8);\n }\n\n /**\n * Main transport method that receives logs from LogLayer.\n * This method is called for each log event and handles:\n * - Generating a unique ID for the log\n * - Converting the log data to a storable format\n * - Rendering the log using the SimpleView renderer\n *\n * @param logLevel - The severity level of the log\n * @param messages - Array of message strings to be joined\n * @param data - Additional structured data to be logged\n * @param hasData - Whether the log includes additional data\n * @returns The original messages array\n */\n shipToLogger({ logLevel, messages, data, hasData }: LogLayerTransportParams): any[] {\n // If transport is disabled, return messages without processing\n if (this.config.enabled === false) {\n return messages;\n }\n\n const entry = {\n id: this.generateId(),\n timestamp: Date.now(),\n level: logLevel,\n message: messages.join(\" \"),\n data: hasData ? JSON.stringify(data) : null,\n };\n\n this.renderer.renderLogLine(entry);\n return messages;\n }\n\n /**\n * Changes the view mode for log display.\n *\n * @param viewMode - The new view mode to use\n */\n setViewMode(viewMode: PrettyTerminalViewMode): void {\n if (this.config.enabled === false) {\n return;\n }\n\n // Rebuild the viewConfig as in the constructor\n const theme = this.config.theme || moonlight;\n const writeFn = this.config.writeFn || ((message: string) => process.stdout.write(message + \"\\n\"));\n const viewConfig = {\n colors: {\n trace: chalk.gray,\n debug: chalk.blue,\n info: chalk.green,\n warn: chalk.yellow,\n error: chalk.red,\n fatal: chalk.bgRed.white,\n ...theme.colors,\n },\n logIdColor: theme.logIdColor || chalk.dim,\n dataValueColor: theme.dataValueColor || chalk.white,\n dataKeyColor: theme.dataKeyColor || chalk.dim,\n };\n\n this.renderer = new SimpleView({\n viewMode,\n maxInlineDepth: this.config.maxInlineDepth || 4,\n showLogId: this.config.showLogId || false,\n timestampFormat: this.config.timestampFormat || \"HH:mm:ss.SSS\",\n collapseArrays: this.config.collapseArrays !== false,\n flattenNestedObjects: this.config.flattenNestedObjects !== false,\n writeFn,\n config: viewConfig,\n });\n }\n\n /**\n * Gets the current view mode.\n *\n * @returns The current view mode\n */\n getViewMode(): PrettyTerminalViewMode {\n return this.renderer.getViewMode();\n }\n}\n","import chalk from \"chalk\";\nimport type { SimplePrettyTerminalTheme } from \"./types.js\";\n\n/**\n * Moonlight - A dark theme with cool blue tones\n * Inspired by moonlit nights and modern IDEs\n *\n * Color Palette:\n * - Primary: Cool blues and soft greens\n * - Accents: Warm yellows and soft reds\n * - Background: Assumes dark terminal (black or very dark grey)\n *\n * Best used with:\n * - Dark terminal themes\n * - Night-time coding sessions\n * - Environments where eye strain is a concern\n */\nexport const moonlight: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(114, 135, 153), // Muted blue-grey for less important info\n debug: chalk.rgb(130, 170, 255), // Soft blue that pops but doesn't strain\n info: chalk.rgb(195, 232, 141), // Sage green for good readability\n warn: chalk.rgb(255, 203, 107), // Warm yellow, less harsh than pure yellow\n error: chalk.rgb(247, 118, 142), // Soft red that stands out without being aggressive\n fatal: chalk.bgRgb(247, 118, 142).white, // Inverted soft red for maximum visibility\n },\n logIdColor: chalk.rgb(84, 98, 117), // Darker blue-grey for secondary information\n dataValueColor: chalk.rgb(209, 219, 231), // Light grey-blue for primary content\n dataKeyColor: chalk.rgb(130, 170, 255), // Matching debug blue for consistency\n};\n\n/**\n * Sunlight - A light theme with warm tones\n * Inspired by daylight reading and paper documentation\n *\n * Color Palette:\n * - Primary: Deep, rich colors that contrast well with white\n * - Accents: Earth tones and deep jewel tones\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Daytime coding sessions\n * - High-glare environments\n * - Printed documentation\n */\nexport const sunlight: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(110, 110, 110), // Dark grey for subtle information\n debug: chalk.rgb(32, 96, 159), // Deep blue for strong contrast on white\n info: chalk.rgb(35, 134, 54), // Forest green, easier on the eyes than bright green\n warn: chalk.rgb(176, 95, 0), // Brown-orange for natural warning color\n error: chalk.rgb(191, 0, 0), // Deep red for clear visibility on light backgrounds\n fatal: chalk.bgRgb(191, 0, 0).white, // White on deep red for critical issues\n },\n logIdColor: chalk.rgb(110, 110, 110),\n dataValueColor: chalk.rgb(0, 0, 0),\n dataKeyColor: chalk.rgb(32, 96, 159),\n};\n\n/**\n * Neon - A dark theme with vibrant cyberpunk colors\n * Inspired by neon-lit cityscapes and retro-futuristic aesthetics\n *\n * Color Palette:\n * - Primary: Electric blues and hot pinks\n * - Accents: Bright purples and cyber greens\n * - Background: Assumes dark terminal (black or very dark grey)\n *\n * Best used with:\n * - Dark terminal themes\n * - High-contrast preferences\n * - Modern, tech-focused applications\n */\nexport const neon: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(108, 108, 255), // Electric blue\n debug: chalk.rgb(255, 82, 246), // Hot pink\n info: chalk.rgb(0, 255, 163), // Cyber green\n warn: chalk.rgb(255, 231, 46), // Electric yellow\n error: chalk.rgb(255, 53, 91), // Neon red\n fatal: chalk.bgRgb(255, 53, 91).rgb(0, 255, 163), // Neon red bg with cyber green text\n },\n logIdColor: chalk.rgb(187, 134, 252), // Bright purple\n dataValueColor: chalk.rgb(255, 255, 255), // Pure white\n dataKeyColor: chalk.rgb(0, 255, 240), // Cyan\n};\n\n/**\n * Nature - A light theme with organic, earthy colors\n * Inspired by forest landscapes and natural elements\n *\n * Color Palette:\n * - Primary: Deep forest greens and rich browns\n * - Accents: Autumn reds and golden yellows\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Nature-inspired interfaces\n * - Applications focusing on readability\n */\nexport const nature: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(101, 115, 126), // Slate grey\n debug: chalk.rgb(34, 139, 34), // Forest green\n info: chalk.rgb(46, 139, 87), // Sea green\n warn: chalk.rgb(218, 165, 32), // Golden rod\n error: chalk.rgb(139, 69, 19), // Saddle brown\n fatal: chalk.bgRgb(139, 69, 19).white, // Brown background with white text\n },\n logIdColor: chalk.rgb(101, 115, 126),\n dataValueColor: chalk.rgb(0, 0, 0),\n dataKeyColor: chalk.rgb(34, 139, 34),\n};\n\n/**\n * Pastel - A soft, calming theme with gentle colors\n * Inspired by watercolor paintings and soft aesthetics\n *\n * Color Palette:\n * - Primary: Soft pastels and muted tones\n * - Accents: Gentle pinks and light blues\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Long coding sessions\n * - Reduced visual stress\n */\nexport const pastel: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(200, 200, 200), // Light grey\n debug: chalk.rgb(173, 216, 230), // Light blue\n info: chalk.rgb(144, 238, 144), // Light green\n warn: chalk.rgb(255, 218, 185), // Peach\n error: chalk.rgb(255, 182, 193), // Light pink\n fatal: chalk.bgRgb(255, 182, 193).rgb(105, 105, 105), // Light pink bg with dim grey text\n },\n logIdColor: chalk.rgb(200, 200, 200),\n dataValueColor: chalk.rgb(105, 105, 105),\n dataKeyColor: chalk.rgb(173, 216, 230),\n};\n","import wrap from \"wrap-ansi\";\nimport type { LogEntry, PrettyTerminalViewMode, SimpleViewConfig } from \"../types.js\";\nimport * as prettyjson from \"../vendor/prettyjson.js\";\nimport { formatInlineData, formatTimestamp, getLevelColor } from \"./utils.js\";\n\n/**\n * Handles rendering of the simple view mode.\n * Supports three display modes:\n * - Message-only: Shows timestamp, level and message\n * - Inline: Shows all details with complete data inline\n * - Expanded: Shows timestamp, level, and message on first line, with data on indented separate lines\n */\nexport class SimpleView {\n private termWidth: number;\n private config: SimpleViewConfig;\n private viewMode: PrettyTerminalViewMode;\n private maxInlineDepth: number;\n private showLogId: boolean;\n private timestampFormat: string | ((timestamp: number) => string);\n private collapseArrays: boolean;\n private flattenNestedObjects: boolean;\n private writeFn: (message: string) => void;\n\n constructor(config: SimpleViewConfig) {\n this.config = config;\n this.viewMode = config.viewMode;\n this.maxInlineDepth = config.maxInlineDepth;\n this.showLogId = config.showLogId;\n this.timestampFormat = config.timestampFormat;\n this.collapseArrays = config.collapseArrays !== false;\n this.flattenNestedObjects = config.flattenNestedObjects !== false;\n this.termWidth = process.stdout.columns || 120;\n this.writeFn = config.writeFn;\n }\n\n public updateTerminalWidth(width: number): void {\n this.termWidth = width;\n }\n\n public getConfig(): SimpleViewConfig {\n return this.config;\n }\n\n public getViewMode(): PrettyTerminalViewMode {\n return this.viewMode;\n }\n\n /**\n * Renders a single log entry based on the current view mode\n */\n public renderLogLine(entry: LogEntry): void {\n const levelColor = getLevelColor(entry.level, this.config.config.colors);\n const chevron = levelColor(`▶ ${entry.level.toUpperCase()} `);\n const message = entry.message || \"(no message)\";\n const timestamp = formatTimestamp(entry.timestamp, this.config.config.logIdColor, this.timestampFormat);\n\n switch (this.viewMode) {\n case \"message-only\": {\n // Message-only view shows timestamp, level and message\n const condensedLine = `${timestamp} ${chevron}${message}`;\n this.writeFn(wrap(condensedLine, this.termWidth, { hard: true }));\n break;\n }\n\n case \"inline\": {\n // Inline view shows all details with complete data inline\n const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n const fullData = entry.data\n ? formatInlineData(\n JSON.parse(entry.data),\n this.config.config,\n this.maxInlineDepth,\n !this.flattenNestedObjects,\n this.collapseArrays,\n )\n : \"\";\n const expandedLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}${fullData ? ` ${fullData}` : \"\"}`;\n // Don't wrap inline mode to preserve full content\n this.writeFn(expandedLine);\n break;\n }\n\n case \"expanded\": {\n // Expanded view shows timestamp, level, and message on first line, with data on indented separate lines\n const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n const firstLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}`;\n this.writeFn(wrap(firstLine, this.termWidth, { hard: true }));\n\n if (entry.data) {\n const jsonLines = prettyjson\n .render(JSON.parse(entry.data), {\n defaultIndentation: 2,\n keysColor: this.config.config.dataKeyColor,\n dashColor: this.config.config.dataKeyColor,\n numberColor: this.config.config.dataValueColor,\n stringColor: this.config.config.dataValueColor,\n multilineStringColor: this.config.config.dataValueColor,\n positiveNumberColor: this.config.config.dataValueColor,\n negativeNumberColor: this.config.config.dataValueColor,\n booleanColor: this.config.config.dataValueColor,\n nullUndefinedColor: this.config.config.dataValueColor,\n dateColor: this.config.config.dataValueColor,\n collapseArrays: this.collapseArrays,\n })\n .split(\"\\n\");\n\n // Add each line with proper indentation (2 spaces at the beginning)\n for (const line of jsonLines) {\n // Skip empty lines\n if (line.trim() === \"\") {\n this.writeFn(\" \");\n } else {\n this.writeFn(` ${line}`);\n }\n }\n }\n break;\n }\n\n default: {\n // Default to full view for any unexpected view modes\n const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n const fullData = entry.data\n ? formatInlineData(JSON.parse(entry.data), this.config.config, this.maxInlineDepth, true, this.collapseArrays)\n : \"\";\n const expandedLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}${fullData ? ` ${fullData}` : \"\"}`;\n this.writeFn(wrap(expandedLine, this.termWidth, { hard: true }));\n break;\n }\n }\n }\n}\n","// @ts-nocheck\nimport chalk from \"chalk\";\nimport * as Utils from \"./utils.js\";\nimport { isIsoStringDate } from \"./utils.js\";\n\nconst conflictChars = /[^\\w\\s\\n\\r\\v\\t.,]/i;\n\n// Helper function to detect if an object should be printed or ignored\nconst isPrintable = (input, options) => input !== undefined || options.renderUndefined;\n\n// Helper function to detect if an object can be directly serializable\nconst isSerializable = (input, onlyPrimitives, options) => {\n if (\n typeof input === \"boolean\" ||\n typeof input === \"number\" ||\n typeof input === \"function\" ||\n input === null ||\n input === undefined ||\n input instanceof Date\n ) {\n return true;\n }\n if (typeof input === \"string\" && input.indexOf(\"\\n\") === -1) {\n return true;\n }\n\n if (options.inlineArrays && !onlyPrimitives) {\n if (Array.isArray(input) && isSerializable(input[0], true, options)) {\n return true;\n }\n }\n\n return false;\n};\n\n/**\n * @param {Function} colorFn\n * @param {PrettyJSONOptions} options\n */\nconst getColorRenderer = (colorFn, options) => {\n if (options.noColor) {\n return (text) => text;\n }\n\n if (typeof colorFn !== \"function\") {\n return (text) => text;\n }\n\n return colorFn;\n};\n\nconst addColorToData = (input, options) => {\n if (options.noColor) {\n return input;\n }\n\n if (input instanceof Date) {\n return getColorRenderer(options.dateColor, options)(input.toISOString());\n }\n if (typeof input === \"string\") {\n if (isIsoStringDate(input)) {\n return getColorRenderer(options.dateColor, options)(input);\n }\n // Print strings in regular terminal color\n return getColorRenderer(options.stringColor, options)(input);\n }\n\n const sInput = `${input}`;\n\n if (typeof input === \"boolean\") {\n return getColorRenderer(options.booleanColor, options)(sInput);\n }\n if (input === null || input === undefined) {\n return getColorRenderer(options.nullUndefinedColor, options)(sInput);\n }\n if (typeof input === \"number\") {\n if (input >= 0) {\n return getColorRenderer(options.positiveNumberColor, options)(sInput);\n }\n return getColorRenderer(options.negativeNumberColor, options)(sInput);\n }\n if (typeof input === \"function\") {\n return \"function() {}\";\n }\n\n if (Array.isArray(input)) {\n return input.join(\", \");\n }\n\n return sInput;\n};\n\nconst colorMultilineString = (options, line) => getColorRenderer(options.multilineStringColor, options)(line);\n\nconst indentLines = (string, spaces, options) => {\n let lines = string.split(\"\\n\");\n lines = lines.map((line) => Utils.indent(spaces) + colorMultilineString(options, line));\n return lines.join(\"\\n\");\n};\n\nconst renderToArray = (data, options, indentation) => {\n if (typeof data === \"string\" && data.match(conflictChars) && options.escape) {\n data = JSON.stringify(data);\n }\n\n if (!isPrintable(data, options)) {\n return [];\n }\n\n if (isSerializable(data, false, options)) {\n return [Utils.indent(indentation) + addColorToData(data, options)];\n }\n\n // Unserializable string means it's multiline\n if (typeof data === \"string\") {\n return [\n Utils.indent(indentation) + colorMultilineString(options, '\"\"\"'),\n indentLines(data, indentation + options.defaultIndentation, options),\n Utils.indent(indentation) + colorMultilineString(options, '\"\"\"'),\n ];\n }\n\n if (Array.isArray(data)) {\n // If the array is empty, render the `emptyArrayMsg`\n if (data.length === 0) {\n return [Utils.indent(indentation) + options.emptyArrayMsg];\n }\n\n // If arrays should be collapsed and there's data, show [...]\n if (options.collapseArrays && data.length > 0) {\n return [`${Utils.indent(indentation)}[... ${data.length} items]`];\n }\n\n const outputArray = [];\n\n data.forEach((element) => {\n if (!isPrintable(element, options)) {\n return;\n }\n\n // Prepend the dash at the beginning of each array's element line\n let line = \"- \";\n line = getColorRenderer(options.dashColor, options)(line);\n line = Utils.indent(indentation) + line;\n\n // If the element of the array is a string, bool, number, or null\n // render it in the same line\n if (isSerializable(element, false, options)) {\n line += renderToArray(element, options, 0)[0];\n outputArray.push(line);\n\n // If the element is an array or object, render it in next line\n } else {\n outputArray.push(line);\n outputArray.push.apply(outputArray, renderToArray(element, options, indentation + options.defaultIndentation));\n }\n });\n\n return outputArray;\n }\n\n if (data instanceof Error) {\n return renderToArray(\n {\n message: data.message,\n stack: data.stack.split(\"\\n\"),\n },\n options,\n indentation,\n );\n }\n\n // If values alignment is enabled, get the size of the longest index\n // to align all the values\n const maxIndexLength = options.noAlign ? 0 : Utils.getMaxIndexLength(data);\n let key;\n const output = [];\n\n Object.getOwnPropertyNames(data).forEach((i) => {\n if (!isPrintable(data[i], options)) {\n return;\n }\n\n // Prepend the index at the beginning of the line\n key = `${i}: `;\n key = getColorRenderer(options.keysColor, options)(key);\n key = Utils.indent(indentation) + key;\n\n // If the value is serializable, render it in the same line\n if (isSerializable(data[i], false, options)) {\n const nextIndentation = options.noAlign ? 0 : maxIndexLength - i.length;\n key += renderToArray(data[i], options, nextIndentation)[0];\n output.push(key);\n\n // If the index is an array or object, render it in next line\n } else {\n output.push(key);\n output.push.apply(output, renderToArray(data[i], options, indentation + options.defaultIndentation));\n }\n });\n return output;\n};\n/**\n * @typedef {Object} PrettyJSONOptions\n * @property {Function} [stringColor=null] Chalk color function for strings\n * @property {Function} [multilineStringColor=null] Chalk color function for multiline strings\n * @property {Function} [keysColor=chalk.green] Chalk color function for keys in hashes\n * @property {Function} [dashColor=chalk.green] Chalk color function for dashes in arrays\n * @property {Function} [numberColor=chalk.blue] Default Chalk color function for numbers\n * @property {Function} [positiveNumberColor=numberColor] Chalk color function for positive numbers\n * @property {Function} [negativeNumberColor=numberColor] Chalk color function for negative numbers\n * @property {Function} [booleanColor=chalk.cyan] Chalk color function for boolean values\n * @property {Function} [nullUndefinedColor=chalk.grey] Chalk color function for null || undefined\n * @property {Function} [dateColor=chalk.magenta] Chalk color function for Date objects\n * @property {number} [defaultIndentation=2] Indentation spaces per object level\n * @property {string} [emptyArrayMsg=\"(empty array)\"] Replace empty strings with\n * @property {boolean} [noColor] Flag to disable colors\n * @property {boolean} [noAlign] Flag to disable alignment\n * @property {boolean} [escape] Flag to escape printed content\n * @property {boolean} [collapseArrays] Flag to collapse arrays\n */\n/**\n * Mutating function that ensures we have a valid options object\n * @param {PrettyJSONOptions} options\n * @returns PrettyJSONOptions\n */\nconst validateOptionsAndSetDefaults = (options) => {\n options = options || {};\n options.emptyArrayMsg = options.emptyArrayMsg || \"(empty array)\";\n options.keysColor = options.keysColor || chalk.green;\n options.dashColor = options.dashColor || chalk.green;\n options.booleanColor = options.booleanColor || chalk.cyan;\n options.nullUndefinedColor = options.nullUndefinedColor || chalk.grey;\n options.numberColor = options.numberColor || chalk.blue;\n options.positiveNumberColor = options.positiveNumberColor || options.numberColor;\n options.negativeNumberColor = options.negativeNumberColor || options.numberColor;\n options.dateColor = options.dateColor || chalk.magenta;\n options.defaultIndentation = options.defaultIndentation || 2;\n options.noColor = !!options.noColor;\n options.noAlign = !!options.noAlign;\n options.escape = !!options.escape;\n options.renderUndefined = !!options.renderUndefined;\n options.collapseArrays = !!options.collapseArrays;\n\n options.stringColor = options.stringColor || null;\n options.multilineStringColor = options.multilineStringColor || options.stringColor || null;\n\n return options;\n};\n/**\n * ### Render function\n * *Parameters:*\n *\n * @param {*} data: Data to render\n * @param {PrettyJSONOptions} options: Hash of different options\n * @param {*} indentation **`indentation`**: Base indentation of the output\n *\n * *Example of options hash:*\n *\n * {\n * emptyArrayMsg: '(empty)', // Rendered message on empty strings\n * keysColor: 'blue', // Color for keys in hashes\n * dashColor: 'red', // Color for the dashes in arrays\n * stringColor: 'grey', // Color for strings\n * multilineStringColor: 'cyan' // Color for multiline strings\n * defaultIndentation: 2 // Indentation on nested objects\n * }\n * @returns string with the rendered data\n */\nexport function render(data, options, indentation) {\n // Default values\n indentation = indentation || 0;\n options = validateOptionsAndSetDefaults(options);\n\n return renderToArray(data, options, indentation).join(\"\\n\");\n}\n\n/**\n * ### Render from string function\n * *Parameters:*\n *\n * @param {*} data: Data to render\n * @param {PrettyJSONOptions} options: Hash of different options\n * @param {*} indentation **`indentation`**: Base indentation of the output\n *\n * *Example of options hash:*\n *\n * {\n * emptyArrayMsg: '(empty)', // Rendered message on empty strings\n * keysColor: 'blue', // Color for keys in hashes\n * dashColor: 'red', // Color for the dashes in arrays\n * defaultIndentation: 2 // Indentation on nested objects\n * }\n */\nexport function renderString(data, options, indentation) {\n let output = \"\";\n let parsedData;\n // If the input is not a string or if it's empty, just return an empty string\n if (typeof data !== \"string\" || data === \"\") {\n return \"\";\n }\n\n // Remove non-JSON characters from the beginning string\n if (data[0] !== \"{\" && data[0] !== \"[\") {\n let beginingOfJson;\n if (data.indexOf(\"{\") === -1) {\n beginingOfJson = data.indexOf(\"[\");\n } else if (data.indexOf(\"[\") === -1) {\n beginingOfJson = data.indexOf(\"{\");\n } else if (data.indexOf(\"{\") < data.indexOf(\"[\")) {\n beginingOfJson = data.indexOf(\"{\");\n } else {\n beginingOfJson = data.indexOf(\"[\");\n }\n output += `${data.substr(0, beginingOfJson)}\\n`;\n data = data.substr(beginingOfJson);\n }\n\n try {\n parsedData = JSON.parse(data);\n } catch (_e) {\n // Return an error in case of an invalid JSON\n return `${chalk.red(\"Error:\")} Not valid JSON!`;\n }\n\n // Call the real render() method\n output += exports.render(parsedData, options, indentation);\n return output;\n}\n","/**\n * Creates a string with the same length as `numSpaces` parameter\n **/\nexport function indent(numSpaces) {\n return new Array(numSpaces + 1).join(\" \");\n}\n\n/**\n * Gets the string length of the longer index in a hash\n **/\nexport function getMaxIndexLength(input) {\n var maxWidth = 0;\n\n Object.getOwnPropertyNames(input).forEach((key) => {\n // Skip undefined values.\n if (input[key] === undefined) {\n return;\n }\n\n maxWidth = Math.max(maxWidth, key.length);\n });\n return maxWidth;\n}\n\nexport function isIsoStringDate(isoString) {\n if (typeof isoString !== \"string\") {\n return false;\n }\n // More flexible regex that handles:\n // - Optional milliseconds\n // - Optional timezone offset or Z\n // - Optional T separator (space also valid)\n if (!/^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:?\\d{2})?$/.test(isoString)) {\n return false;\n }\n const testDate = new Date(isoString);\n return !Number.isNaN(testDate.getTime());\n}\n","import chalk from \"chalk\";\nimport { format } from \"date-fns\";\nimport type { ColorConfig, ViewConfig } from \"../types.js\";\n\n/**\n * Formats a timestamp into a readable string.\n *\n * @param timestamp - Unix timestamp in milliseconds\n * @param colorFn - Chalk function to color the timestamp\n * @param timestampFormat - Custom format string (date-fns) or function. Defaults to \"HH:mm:ss.SSS\"\n * @returns Formatted timestamp string\n */\nexport function formatTimestamp(\n timestamp: number,\n colorFn: typeof chalk.white,\n timestampFormat: string | ((timestamp: number) => string) = \"HH:mm:ss.SSS\",\n): string {\n let formattedTime: string;\n\n if (typeof timestampFormat === \"function\") {\n formattedTime = timestampFormat(timestamp);\n } else {\n const date = new Date(timestamp);\n formattedTime = format(date, timestampFormat);\n }\n\n return colorFn(`[${formattedTime}]`);\n}\n\n/**\n * Gets the appropriate color function for a log level.\n *\n * @param level - Log level string\n * @param colors - Color configuration object\n * @returns Chalk function for the log level\n */\nexport function getLevelColor(level: string, colors: ColorConfig): typeof chalk.white {\n const levelLower = level.toLowerCase();\n\n switch (levelLower) {\n case \"trace\":\n return colors.trace || chalk.white;\n case \"debug\":\n return colors.debug || chalk.white;\n case \"info\":\n return colors.info || chalk.white;\n case \"warn\":\n return colors.warn || chalk.white;\n case \"error\":\n return colors.error || chalk.white;\n case \"fatal\":\n return colors.fatal || chalk.white;\n default:\n return colors.info || chalk.white;\n }\n}\n\n/**\n * Formats a value for display.\n */\nexport function formatValue(value: any, expanded = false, collapseArrays = true): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return value.toString();\n if (value === null) return \"null\";\n if (value === undefined) return \"undefined\";\n if (Array.isArray(value)) return expanded ? JSON.stringify(value) : collapseArrays ? \"[...]\" : value.toString();\n if (typeof value === \"object\") return expanded ? JSON.stringify(value) : \"{...}\";\n return value.toString();\n}\n\n/**\n * Formats structured data for inline display with depth limiting.\n *\n * @param data - The data to format\n * @param config - View configuration for colors\n * @param maxDepth - Maximum depth for nested objects\n * @param expanded - Whether to show full depth (for inline view mode)\n * @param collapseArrays - Whether to collapse arrays to summary format\n * @returns Formatted data string\n */\nexport function formatInlineData(\n data: any,\n config: Required<ViewConfig>,\n maxDepth: number,\n expanded = false,\n collapseArrays = true,\n): string {\n if (!data) return \"\";\n\n const pairs: string[] = [];\n const traverse = (obj: any, prefix = \"\", depth = 0) => {\n if (!expanded && depth >= maxDepth) return;\n\n for (const [key, value] of Object.entries(obj)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n if (expanded) {\n pairs.push(`${config.dataKeyColor(fullKey)}=${config.dataValueColor(JSON.stringify(value))}`);\n } else {\n traverse(value, fullKey, depth + 1);\n }\n } else {\n pairs.push(\n `${config.dataKeyColor(fullKey)}=${config.dataValueColor(formatValue(value, expanded, collapseArrays))}`,\n );\n }\n }\n };\n\n traverse(data);\n const result = pairs.join(\" \");\n // Remove truncation - inline view should show complete data without truncation\n return result;\n}\n","import { SimplePrettyTerminalTransport } from \"./SimplePrettyTerminalTransport.js\";\nimport type { PrettyTerminalViewMode, SimplePrettyTerminalConfig, SimplePrettyTerminalTheme } from \"./types.js\";\n\n// Export chalk for custom theme creation\nexport * from \"chalk\";\n\n// Export the main transport class (for advanced usage)\nexport { SimplePrettyTerminalTransport };\n\n// Export all built-in themes\nexport * from \"./themes.js\";\n\n// Export essential types for configuration and custom themes\nexport type { SimplePrettyTerminalConfig, SimplePrettyTerminalTheme, PrettyTerminalViewMode };\n\n// Main convenience function for creating the transport\nexport function getSimplePrettyTerminal(config: SimplePrettyTerminalConfig = {}) {\n return new SimplePrettyTerminalTransport(config);\n}\n"],"mappings":";AAuBA,SAAS,2BAA2B;AACpC,OAAOA,YAAW;;;ACxBlB,OAAO,WAAW;AAiBX,IAAM,YAAuC;AAAA,EAClD,QAAQ;AAAA,IACN,OAAO,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,IAC9B,OAAO,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,IAC9B,MAAM,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,IAC7B,MAAM,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,IAC7B,OAAO,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,IAC9B,OAAO,MAAM,MAAM,KAAK,KAAK,GAAG,EAAE;AAAA;AAAA,EACpC;AAAA,EACA,YAAY,MAAM,IAAI,IAAI,IAAI,GAAG;AAAA;AAAA,EACjC,gBAAgB,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,EACvC,cAAc,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AACvC;AAiBO,IAAM,WAAsC;AAAA,EACjD,QAAQ;AAAA,IACN,OAAO,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,IAC9B,OAAO,MAAM,IAAI,IAAI,IAAI,GAAG;AAAA;AAAA,IAC5B,MAAM,MAAM,IAAI,IAAI,KAAK,EAAE;AAAA;AAAA,IAC3B,MAAM,MAAM,IAAI,KAAK,IAAI,CAAC;AAAA;AAAA,IAC1B,OAAO,MAAM,IAAI,KAAK,GAAG,CAAC;AAAA;AAAA,IAC1B,OAAO,MAAM,MAAM,KAAK,GAAG,CAAC,EAAE;AAAA;AAAA,EAChC;AAAA,EACA,YAAY,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA,EACnC,gBAAgB,MAAM,IAAI,GAAG,GAAG,CAAC;AAAA,EACjC,cAAc,MAAM,IAAI,IAAI,IAAI,GAAG;AACrC;AAgBO,IAAM,OAAkC;AAAA,EAC7C,QAAQ;AAAA,IACN,OAAO,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,IAC9B,OAAO,MAAM,IAAI,KAAK,IAAI,GAAG;AAAA;AAAA,IAC7B,MAAM,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA;AAAA,IAC3B,MAAM,MAAM,IAAI,KAAK,KAAK,EAAE;AAAA;AAAA,IAC5B,OAAO,MAAM,IAAI,KAAK,IAAI,EAAE;AAAA;AAAA,IAC5B,OAAO,MAAM,MAAM,KAAK,IAAI,EAAE,EAAE,IAAI,GAAG,KAAK,GAAG;AAAA;AAAA,EACjD;AAAA,EACA,YAAY,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,EACnC,gBAAgB,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,EACvC,cAAc,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA;AACrC;AAgBO,IAAM,SAAoC;AAAA,EAC/C,QAAQ;AAAA,IACN,OAAO,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,IAC9B,OAAO,MAAM,IAAI,IAAI,KAAK,EAAE;AAAA;AAAA,IAC5B,MAAM,MAAM,IAAI,IAAI,KAAK,EAAE;AAAA;AAAA,IAC3B,MAAM,MAAM,IAAI,KAAK,KAAK,EAAE;AAAA;AAAA,IAC5B,OAAO,MAAM,IAAI,KAAK,IAAI,EAAE;AAAA;AAAA,IAC5B,OAAO,MAAM,MAAM,KAAK,IAAI,EAAE,EAAE;AAAA;AAAA,EAClC;AAAA,EACA,YAAY,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA,EACnC,gBAAgB,MAAM,IAAI,GAAG,GAAG,CAAC;AAAA,EACjC,cAAc,MAAM,IAAI,IAAI,KAAK,EAAE;AACrC;AAgBO,IAAM,SAAoC;AAAA,EAC/C,QAAQ;AAAA,IACN,OAAO,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,IAC9B,OAAO,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,IAC9B,MAAM,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,IAC7B,MAAM,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,IAC7B,OAAO,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,IAC9B,OAAO,MAAM,MAAM,KAAK,KAAK,GAAG,EAAE,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,EACrD;AAAA,EACA,YAAY,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA,EACnC,gBAAgB,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA,EACvC,cAAc,MAAM,IAAI,KAAK,KAAK,GAAG;AACvC;;;AC9IA,OAAO,UAAU;;;ACCjB,OAAOC,YAAW;;;ACEX,SAAS,OAAO,WAAW;AAChC,SAAO,IAAI,MAAM,YAAY,CAAC,EAAE,KAAK,GAAG;AAC1C;AAKO,SAAS,kBAAkB,OAAO;AACvC,MAAI,WAAW;AAEf,SAAO,oBAAoB,KAAK,EAAE,QAAQ,CAAC,QAAQ;AAEjD,QAAI,MAAM,GAAG,MAAM,QAAW;AAC5B;AAAA,IACF;AAEA,eAAW,KAAK,IAAI,UAAU,IAAI,MAAM;AAAA,EAC1C,CAAC;AACD,SAAO;AACT;AAEO,SAAS,gBAAgB,WAAW;AACzC,MAAI,OAAO,cAAc,UAAU;AACjC,WAAO;AAAA,EACT;AAKA,MAAI,CAAC,4EAA4E,KAAK,SAAS,GAAG;AAChG,WAAO;AAAA,EACT;AACA,QAAM,WAAW,IAAI,KAAK,SAAS;AACnC,SAAO,CAAC,OAAO,MAAM,SAAS,QAAQ,CAAC;AACzC;;;ADhCA,IAAM,gBAAgB;AAGtB,IAAM,cAAc,CAAC,OAAO,YAAY,UAAU,UAAa,QAAQ;AAGvE,IAAM,iBAAiB,CAAC,OAAO,gBAAgB,YAAY;AACzD,MACE,OAAO,UAAU,aACjB,OAAO,UAAU,YACjB,OAAO,UAAU,cACjB,UAAU,QACV,UAAU,UACV,iBAAiB,MACjB;AACA,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,YAAY,MAAM,QAAQ,IAAI,MAAM,IAAI;AAC3D,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,gBAAgB,CAAC,gBAAgB;AAC3C,QAAI,MAAM,QAAQ,KAAK,KAAK,eAAe,MAAM,CAAC,GAAG,MAAM,OAAO,GAAG;AACnE,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAMA,IAAM,mBAAmB,CAAC,SAAS,YAAY;AAC7C,MAAI,QAAQ,SAAS;AACnB,WAAO,CAAC,SAAS;AAAA,EACnB;AAEA,MAAI,OAAO,YAAY,YAAY;AACjC,WAAO,CAAC,SAAS;AAAA,EACnB;AAEA,SAAO;AACT;AAEA,IAAM,iBAAiB,CAAC,OAAO,YAAY;AACzC,MAAI,QAAQ,SAAS;AACnB,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,MAAM;AACzB,WAAO,iBAAiB,QAAQ,WAAW,OAAO,EAAE,MAAM,YAAY,CAAC;AAAA,EACzE;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,gBAAgB,KAAK,GAAG;AAC1B,aAAO,iBAAiB,QAAQ,WAAW,OAAO,EAAE,KAAK;AAAA,IAC3D;AAEA,WAAO,iBAAiB,QAAQ,aAAa,OAAO,EAAE,KAAK;AAAA,EAC7D;AAEA,QAAM,SAAS,GAAG,KAAK;AAEvB,MAAI,OAAO,UAAU,WAAW;AAC9B,WAAO,iBAAiB,QAAQ,cAAc,OAAO,EAAE,MAAM;AAAA,EAC/D;AACA,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,WAAO,iBAAiB,QAAQ,oBAAoB,OAAO,EAAE,MAAM;AAAA,EACrE;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,SAAS,GAAG;AACd,aAAO,iBAAiB,QAAQ,qBAAqB,OAAO,EAAE,MAAM;AAAA,IACtE;AACA,WAAO,iBAAiB,QAAQ,qBAAqB,OAAO,EAAE,MAAM;AAAA,EACtE;AACA,MAAI,OAAO,UAAU,YAAY;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AAEA,SAAO;AACT;AAEA,IAAM,uBAAuB,CAAC,SAAS,SAAS,iBAAiB,QAAQ,sBAAsB,OAAO,EAAE,IAAI;AAE5G,IAAM,cAAc,CAAC,QAAQ,QAAQ,YAAY;AAC/C,MAAI,QAAQ,OAAO,MAAM,IAAI;AAC7B,UAAQ,MAAM,IAAI,CAAC,SAAe,OAAO,MAAM,IAAI,qBAAqB,SAAS,IAAI,CAAC;AACtF,SAAO,MAAM,KAAK,IAAI;AACxB;AAEA,IAAM,gBAAgB,CAAC,MAAM,SAAS,gBAAgB;AACpD,MAAI,OAAO,SAAS,YAAY,KAAK,MAAM,aAAa,KAAK,QAAQ,QAAQ;AAC3E,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AAEA,MAAI,CAAC,YAAY,MAAM,OAAO,GAAG;AAC/B,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,eAAe,MAAM,OAAO,OAAO,GAAG;AACxC,WAAO,CAAO,OAAO,WAAW,IAAI,eAAe,MAAM,OAAO,CAAC;AAAA,EACnE;AAGA,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO;AAAA,MACC,OAAO,WAAW,IAAI,qBAAqB,SAAS,KAAK;AAAA,MAC/D,YAAY,MAAM,cAAc,QAAQ,oBAAoB,OAAO;AAAA,MAC7D,OAAO,WAAW,IAAI,qBAAqB,SAAS,KAAK;AAAA,IACjE;AAAA,EACF;AAEA,MAAI,MAAM,QAAQ,IAAI,GAAG;AAEvB,QAAI,KAAK,WAAW,GAAG;AACrB,aAAO,CAAO,OAAO,WAAW,IAAI,QAAQ,aAAa;AAAA,IAC3D;AAGA,QAAI,QAAQ,kBAAkB,KAAK,SAAS,GAAG;AAC7C,aAAO,CAAC,GAAS,OAAO,WAAW,CAAC,QAAQ,KAAK,MAAM,SAAS;AAAA,IAClE;AAEA,UAAM,cAAc,CAAC;AAErB,SAAK,QAAQ,CAAC,YAAY;AACxB,UAAI,CAAC,YAAY,SAAS,OAAO,GAAG;AAClC;AAAA,MACF;AAGA,UAAI,OAAO;AACX,aAAO,iBAAiB,QAAQ,WAAW,OAAO,EAAE,IAAI;AACxD,aAAa,OAAO,WAAW,IAAI;AAInC,UAAI,eAAe,SAAS,OAAO,OAAO,GAAG;AAC3C,gBAAQ,cAAc,SAAS,SAAS,CAAC,EAAE,CAAC;AAC5C,oBAAY,KAAK,IAAI;AAAA,MAGvB,OAAO;AACL,oBAAY,KAAK,IAAI;AACrB,oBAAY,KAAK,MAAM,aAAa,cAAc,SAAS,SAAS,cAAc,QAAQ,kBAAkB,CAAC;AAAA,MAC/G;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,OAAO;AACzB,WAAO;AAAA,MACL;AAAA,QACE,SAAS,KAAK;AAAA,QACd,OAAO,KAAK,MAAM,MAAM,IAAI;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAIA,QAAM,iBAAiB,QAAQ,UAAU,IAAU,kBAAkB,IAAI;AACzE,MAAI;AACJ,QAAM,SAAS,CAAC;AAEhB,SAAO,oBAAoB,IAAI,EAAE,QAAQ,CAAC,MAAM;AAC9C,QAAI,CAAC,YAAY,KAAK,CAAC,GAAG,OAAO,GAAG;AAClC;AAAA,IACF;AAGA,UAAM,GAAG,CAAC;AACV,UAAM,iBAAiB,QAAQ,WAAW,OAAO,EAAE,GAAG;AACtD,UAAY,OAAO,WAAW,IAAI;AAGlC,QAAI,eAAe,KAAK,CAAC,GAAG,OAAO,OAAO,GAAG;AAC3C,YAAM,kBAAkB,QAAQ,UAAU,IAAI,iBAAiB,EAAE;AACjE,aAAO,cAAc,KAAK,CAAC,GAAG,SAAS,eAAe,EAAE,CAAC;AACzD,aAAO,KAAK,GAAG;AAAA,IAGjB,OAAO;AACL,aAAO,KAAK,GAAG;AACf,aAAO,KAAK,MAAM,QAAQ,cAAc,KAAK,CAAC,GAAG,SAAS,cAAc,QAAQ,kBAAkB,CAAC;AAAA,IACrG;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAyBA,IAAM,gCAAgC,CAAC,YAAY;AACjD,YAAU,WAAW,CAAC;AACtB,UAAQ,gBAAgB,QAAQ,iBAAiB;AACjD,UAAQ,YAAY,QAAQ,aAAaC,OAAM;AAC/C,UAAQ,YAAY,QAAQ,aAAaA,OAAM;AAC/C,UAAQ,eAAe,QAAQ,gBAAgBA,OAAM;AACrD,UAAQ,qBAAqB,QAAQ,sBAAsBA,OAAM;AACjE,UAAQ,cAAc,QAAQ,eAAeA,OAAM;AACnD,UAAQ,sBAAsB,QAAQ,uBAAuB,QAAQ;AACrE,UAAQ,sBAAsB,QAAQ,uBAAuB,QAAQ;AACrE,UAAQ,YAAY,QAAQ,aAAaA,OAAM;AAC/C,UAAQ,qBAAqB,QAAQ,sBAAsB;AAC3D,UAAQ,UAAU,CAAC,CAAC,QAAQ;AAC5B,UAAQ,UAAU,CAAC,CAAC,QAAQ;AAC5B,UAAQ,SAAS,CAAC,CAAC,QAAQ;AAC3B,UAAQ,kBAAkB,CAAC,CAAC,QAAQ;AACpC,UAAQ,iBAAiB,CAAC,CAAC,QAAQ;AAEnC,UAAQ,cAAc,QAAQ,eAAe;AAC7C,UAAQ,uBAAuB,QAAQ,wBAAwB,QAAQ,eAAe;AAEtF,SAAO;AACT;AAqBO,SAAS,OAAO,MAAM,SAAS,aAAa;AAEjD,gBAAc,eAAe;AAC7B,YAAU,8BAA8B,OAAO;AAE/C,SAAO,cAAc,MAAM,SAAS,WAAW,EAAE,KAAK,IAAI;AAC5D;;;AEnRA,OAAOC,YAAW;AAClB,SAAS,cAAc;AAWhB,SAAS,gBACd,WACA,SACA,kBAA4D,gBACpD;AACR,MAAI;AAEJ,MAAI,OAAO,oBAAoB,YAAY;AACzC,oBAAgB,gBAAgB,SAAS;AAAA,EAC3C,OAAO;AACL,UAAM,OAAO,IAAI,KAAK,SAAS;AAC/B,oBAAgB,OAAO,MAAM,eAAe;AAAA,EAC9C;AAEA,SAAO,QAAQ,IAAI,aAAa,GAAG;AACrC;AASO,SAAS,cAAc,OAAe,QAAyC;AACpF,QAAM,aAAa,MAAM,YAAY;AAErC,UAAQ,YAAY;AAAA,IAClB,KAAK;AACH,aAAO,OAAO,SAASA,OAAM;AAAA,IAC/B,KAAK;AACH,aAAO,OAAO,SAASA,OAAM;AAAA,IAC/B,KAAK;AACH,aAAO,OAAO,QAAQA,OAAM;AAAA,IAC9B,KAAK;AACH,aAAO,OAAO,QAAQA,OAAM;AAAA,IAC9B,KAAK;AACH,aAAO,OAAO,SAASA,OAAM;AAAA,IAC/B,KAAK;AACH,aAAO,OAAO,SAASA,OAAM;AAAA,IAC/B;AACE,aAAO,OAAO,QAAQA,OAAM;AAAA,EAChC;AACF;AAKO,SAAS,YAAY,OAAY,WAAW,OAAO,iBAAiB,MAAc;AACvF,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAW,QAAO,MAAM,SAAS;AACnF,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,WAAW,KAAK,UAAU,KAAK,IAAI,iBAAiB,UAAU,MAAM,SAAS;AAC9G,MAAI,OAAO,UAAU,SAAU,QAAO,WAAW,KAAK,UAAU,KAAK,IAAI;AACzE,SAAO,MAAM,SAAS;AACxB;AAYO,SAAS,iBACd,MACA,QACA,UACA,WAAW,OACX,iBAAiB,MACT;AACR,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,QAAkB,CAAC;AACzB,QAAM,WAAW,CAAC,KAAU,SAAS,IAAI,QAAQ,MAAM;AACrD,QAAI,CAAC,YAAY,SAAS,SAAU;AAEpC,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC9C,YAAM,UAAU,SAAS,GAAG,MAAM,IAAI,GAAG,KAAK;AAE9C,UAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC/D,YAAI,UAAU;AACZ,gBAAM,KAAK,GAAG,OAAO,aAAa,OAAO,CAAC,IAAI,OAAO,eAAe,KAAK,UAAU,KAAK,CAAC,CAAC,EAAE;AAAA,QAC9F,OAAO;AACL,mBAAS,OAAO,SAAS,QAAQ,CAAC;AAAA,QACpC;AAAA,MACF,OAAO;AACL,cAAM;AAAA,UACJ,GAAG,OAAO,aAAa,OAAO,CAAC,IAAI,OAAO,eAAe,YAAY,OAAO,UAAU,cAAc,CAAC,CAAC;AAAA,QACxG;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,WAAS,IAAI;AACb,QAAM,SAAS,MAAM,KAAK,GAAG;AAE7B,SAAO;AACT;;;AHtGO,IAAM,aAAN,MAAiB;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,QAA0B;AACpC,SAAK,SAAS;AACd,SAAK,WAAW,OAAO;AACvB,SAAK,iBAAiB,OAAO;AAC7B,SAAK,YAAY,OAAO;AACxB,SAAK,kBAAkB,OAAO;AAC9B,SAAK,iBAAiB,OAAO,mBAAmB;AAChD,SAAK,uBAAuB,OAAO,yBAAyB;AAC5D,SAAK,YAAY,QAAQ,OAAO,WAAW;AAC3C,SAAK,UAAU,OAAO;AAAA,EACxB;AAAA,EAEO,oBAAoB,OAAqB;AAC9C,SAAK,YAAY;AAAA,EACnB;AAAA,EAEO,YAA8B;AACnC,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,cAAsC;AAC3C,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,cAAc,OAAuB;AAC1C,UAAM,aAAa,cAAc,MAAM,OAAO,KAAK,OAAO,OAAO,MAAM;AACvE,UAAM,UAAU,WAAW,UAAK,MAAM,MAAM,YAAY,CAAC,GAAG;AAC5D,UAAM,UAAU,MAAM,WAAW;AACjC,UAAM,YAAY,gBAAgB,MAAM,WAAW,KAAK,OAAO,OAAO,YAAY,KAAK,eAAe;AAEtG,YAAQ,KAAK,UAAU;AAAA,MACrB,KAAK,gBAAgB;AAEnB,cAAM,gBAAgB,GAAG,SAAS,IAAI,OAAO,GAAG,OAAO;AACvD,aAAK,QAAQ,KAAK,eAAe,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC,CAAC;AAChE;AAAA,MACF;AAAA,MAEA,KAAK,UAAU;AAEb,cAAM,QAAQ,KAAK,YAAY,KAAK,OAAO,OAAO,WAAW,IAAI,MAAM,EAAE,GAAG,IAAI;AAChF,cAAM,WAAW,MAAM,OACnB;AAAA,UACE,KAAK,MAAM,MAAM,IAAI;AAAA,UACrB,KAAK,OAAO;AAAA,UACZ,KAAK;AAAA,UACL,CAAC,KAAK;AAAA,UACN,KAAK;AAAA,QACP,IACA;AACJ,cAAM,eAAe,GAAG,SAAS,IAAI,OAAO,GAAG,QAAQ,GAAG,KAAK,MAAM,EAAE,GAAG,OAAO,GAAG,WAAW,IAAI,QAAQ,KAAK,EAAE;AAElH,aAAK,QAAQ,YAAY;AACzB;AAAA,MACF;AAAA,MAEA,KAAK,YAAY;AAEf,cAAM,QAAQ,KAAK,YAAY,KAAK,OAAO,OAAO,WAAW,IAAI,MAAM,EAAE,GAAG,IAAI;AAChF,cAAM,YAAY,GAAG,SAAS,IAAI,OAAO,GAAG,QAAQ,GAAG,KAAK,MAAM,EAAE,GAAG,OAAO;AAC9E,aAAK,QAAQ,KAAK,WAAW,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC,CAAC;AAE5D,YAAI,MAAM,MAAM;AACd,gBAAM,YACH,OAAO,KAAK,MAAM,MAAM,IAAI,GAAG;AAAA,YAC9B,oBAAoB;AAAA,YACpB,WAAW,KAAK,OAAO,OAAO;AAAA,YAC9B,WAAW,KAAK,OAAO,OAAO;AAAA,YAC9B,aAAa,KAAK,OAAO,OAAO;AAAA,YAChC,aAAa,KAAK,OAAO,OAAO;AAAA,YAChC,sBAAsB,KAAK,OAAO,OAAO;AAAA,YACzC,qBAAqB,KAAK,OAAO,OAAO;AAAA,YACxC,qBAAqB,KAAK,OAAO,OAAO;AAAA,YACxC,cAAc,KAAK,OAAO,OAAO;AAAA,YACjC,oBAAoB,KAAK,OAAO,OAAO;AAAA,YACvC,WAAW,KAAK,OAAO,OAAO;AAAA,YAC9B,gBAAgB,KAAK;AAAA,UACvB,CAAC,EACA,MAAM,IAAI;AAGb,qBAAW,QAAQ,WAAW;AAE5B,gBAAI,KAAK,KAAK,MAAM,IAAI;AACtB,mBAAK,QAAQ,IAAI;AAAA,YACnB,OAAO;AACL,mBAAK,QAAQ,KAAK,IAAI,EAAE;AAAA,YAC1B;AAAA,UACF;AAAA,QACF;AACA;AAAA,MACF;AAAA,MAEA,SAAS;AAEP,cAAM,QAAQ,KAAK,YAAY,KAAK,OAAO,OAAO,WAAW,IAAI,MAAM,EAAE,GAAG,IAAI;AAChF,cAAM,WAAW,MAAM,OACnB,iBAAiB,KAAK,MAAM,MAAM,IAAI,GAAG,KAAK,OAAO,QAAQ,KAAK,gBAAgB,MAAM,KAAK,cAAc,IAC3G;AACJ,cAAM,eAAe,GAAG,SAAS,IAAI,OAAO,GAAG,QAAQ,GAAG,KAAK,MAAM,EAAE,GAAG,OAAO,GAAG,WAAW,IAAI,QAAQ,KAAK,EAAE;AAClH,aAAK,QAAQ,KAAK,cAAc,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC,CAAC;AAC/D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AF7FO,IAAM,gCAAN,cAA4C,oBAAoB;AAAA;AAAA,EAE7D;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOR,YAAY,SAAqC,CAAC,GAAG;AACnD,UAAM,MAAM;AAGZ,SAAK,SAAS;AAGd,QAAI,OAAO,YAAY,OAAO;AAC5B;AAAA,IACF;AAGA,UAAM,iBAAiB,OAAO,kBAAkB;AAChD,UAAM,QAAQ,OAAO,SAAS;AAC9B,UAAM,WAAW,OAAO,YAAY;AACpC,UAAM,YAAY,OAAO,aAAa;AACtC,UAAM,kBAAkB,OAAO,mBAAmB;AAClD,UAAM,iBAAiB,OAAO,mBAAmB;AACjD,UAAM,uBAAuB,OAAO,yBAAyB;AAC7D,UAAM,UAAU,OAAO,YAAY,CAAC,YAAoB,QAAQ,OAAO,MAAM,UAAU,IAAI;AAG3F,UAAM,aAAa;AAAA,MACjB,QAAQ;AAAA,QACN,OAAOC,OAAM;AAAA;AAAA,QACb,OAAOA,OAAM;AAAA;AAAA,QACb,MAAMA,OAAM;AAAA;AAAA,QACZ,MAAMA,OAAM;AAAA;AAAA,QACZ,OAAOA,OAAM;AAAA;AAAA,QACb,OAAOA,OAAM,MAAM;AAAA;AAAA,QACnB,GAAG,MAAM;AAAA,MACX;AAAA,MACA,YAAY,MAAM,cAAcA,OAAM;AAAA,MACtC,gBAAgB,MAAM,kBAAkBA,OAAM;AAAA,MAC9C,cAAc,MAAM,gBAAgBA,OAAM;AAAA,IAC5C;AAEA,SAAK,YAAY,QAAQ,OAAO,WAAW;AAG3C,SAAK,WAAW,IAAI,WAAW;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAGD,YAAQ,OAAO,GAAG,UAAU,MAAM;AAChC,WAAK,YAAY,QAAQ,OAAO,WAAW;AAC3C,WAAK,SAAS,oBAAoB,KAAK,SAAS;AAAA,IAClD,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,aAAqB;AAC3B,WAAO,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,aAAa,EAAE,UAAU,UAAU,MAAM,QAAQ,GAAmC;AAElF,QAAI,KAAK,OAAO,YAAY,OAAO;AACjC,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ;AAAA,MACZ,IAAI,KAAK,WAAW;AAAA,MACpB,WAAW,KAAK,IAAI;AAAA,MACpB,OAAO;AAAA,MACP,SAAS,SAAS,KAAK,GAAG;AAAA,MAC1B,MAAM,UAAU,KAAK,UAAU,IAAI,IAAI;AAAA,IACzC;AAEA,SAAK,SAAS,cAAc,KAAK;AACjC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,UAAwC;AAClD,QAAI,KAAK,OAAO,YAAY,OAAO;AACjC;AAAA,IACF;AAGA,UAAM,QAAQ,KAAK,OAAO,SAAS;AACnC,UAAM,UAAU,KAAK,OAAO,YAAY,CAAC,YAAoB,QAAQ,OAAO,MAAM,UAAU,IAAI;AAChG,UAAM,aAAa;AAAA,MACjB,QAAQ;AAAA,QACN,OAAOA,OAAM;AAAA,QACb,OAAOA,OAAM;AAAA,QACb,MAAMA,OAAM;AAAA,QACZ,MAAMA,OAAM;AAAA,QACZ,OAAOA,OAAM;AAAA,QACb,OAAOA,OAAM,MAAM;AAAA,QACnB,GAAG,MAAM;AAAA,MACX;AAAA,MACA,YAAY,MAAM,cAAcA,OAAM;AAAA,MACtC,gBAAgB,MAAM,kBAAkBA,OAAM;AAAA,MAC9C,cAAc,MAAM,gBAAgBA,OAAM;AAAA,IAC5C;AAEA,SAAK,WAAW,IAAI,WAAW;AAAA,MAC7B;AAAA,MACA,gBAAgB,KAAK,OAAO,kBAAkB;AAAA,MAC9C,WAAW,KAAK,OAAO,aAAa;AAAA,MACpC,iBAAiB,KAAK,OAAO,mBAAmB;AAAA,MAChD,gBAAgB,KAAK,OAAO,mBAAmB;AAAA,MAC/C,sBAAsB,KAAK,OAAO,yBAAyB;AAAA,MAC3D;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAsC;AACpC,WAAO,KAAK,SAAS,YAAY;AAAA,EACnC;AACF;;;AMtMA,cAAc;AAYP,SAAS,wBAAwB,SAAqC,CAAC,GAAG;AAC/E,SAAO,IAAI,8BAA8B,MAAM;AACjD;","names":["chalk","chalk","chalk","chalk","chalk"]}
|
|
1
|
+
{"version":3,"sources":["../src/SimplePrettyTerminalTransport.ts","../src/themes.ts","../src/views/SimpleView.ts","../src/vendor/prettyjson.js","../src/vendor/utils.js","../src/views/utils.ts","../src/index.ts"],"sourcesContent":["/**\n * A transport for LogLayer that provides simple pretty terminal output.\n * This transport displays logs with theming and formatting but without interactive features.\n *\n * Features:\n * - Real-time log display with color-coded levels\n * - Configurable themes and colors\n * - Three view modes: inline, message-only, expanded\n * - JSON data pretty printing\n * - No interactive features (no keyboard navigation, no input)\n * - Browser and Node.js runtime support\n *\n * Usage:\n * ```typescript\n * const transport = new SimplePrettyTerminalTransport({\n * maxInlineDepth: 4,\n * maxInlineLength: 120,\n * theme: customTheme,\n * viewMode: \"inline\",\n * runtime: \"node\" // or \"browser\"\n * });\n * ```\n */\n\nimport type { LogLayerTransportParams } from \"@loglayer/transport\";\nimport { LoggerlessTransport } from \"@loglayer/transport\";\nimport chalk from \"chalk\";\nimport { moonlight } from \"./themes.js\";\nimport type { PrettyTerminalViewMode, SimplePrettyTerminalConfig } from \"./types.js\";\nimport { SimpleView } from \"./views/SimpleView.js\";\n\n/**\n * Main transport class that handles simple pretty terminal output.\n * This class provides the display functionality of PrettyTerminal without interactive features.\n *\n * The transport supports three view modes:\n * 1. Inline: Shows all information with complete data structures inline (no truncation)\n * 2. Message-only: Shows only the timestamp, log level and message for a cleaner output (no data shown)\n * 3. Expanded: Shows timestamp, level, and message on first line, with data on indented separate lines\n */\nexport class SimplePrettyTerminalTransport extends LoggerlessTransport {\n /** Handles rendering and formatting of logs */\n private renderer: SimpleView;\n\n /** Configuration options */\n private config: SimplePrettyTerminalConfig;\n\n /** Current terminal width in characters */\n private termWidth: number;\n\n /**\n * Creates a new SimplePrettyTerminalTransport instance.\n *\n * @param config - Configuration options for the transport\n */\n constructor(config: SimplePrettyTerminalConfig) {\n super(config);\n\n // Store configuration\n this.config = config;\n\n // If transport is disabled, don't initialize anything\n if (config.enabled === false) {\n return;\n }\n\n // Initialize configuration with defaults\n const maxInlineDepth = config.maxInlineDepth || 4;\n const theme = config.theme || moonlight;\n const viewMode = config.viewMode || \"inline\";\n const showLogId = config.showLogId || false;\n const timestampFormat = config.timestampFormat || \"HH:mm:ss.SSS\";\n const collapseArrays = config.collapseArrays !== false; // Default to true\n const flattenNestedObjects = config.flattenNestedObjects !== false; // Default to true\n const runtime = config.runtime;\n\n // Initialize view configuration with defaults\n const viewConfig = {\n colors: {\n trace: chalk.gray, // Lowest level, used for verbose output\n debug: chalk.blue, // Debug information\n info: chalk.green, // Normal operation\n warn: chalk.yellow, // Warning conditions\n error: chalk.red, // Error conditions\n fatal: chalk.bgRed.white, // Critical errors\n ...theme.colors,\n },\n logIdColor: theme.logIdColor || chalk.dim,\n dataValueColor: theme.dataValueColor || chalk.white,\n dataKeyColor: theme.dataKeyColor || chalk.dim,\n };\n\n // Set terminal width based on runtime\n if (runtime === \"node\") {\n this.termWidth = process?.stdout?.columns || 80;\n } else {\n // For browser, use a reasonable default width\n this.termWidth = 80;\n }\n\n // Initialize the renderer\n this.renderer = new SimpleView({\n viewMode,\n maxInlineDepth,\n showLogId,\n timestampFormat,\n collapseArrays,\n flattenNestedObjects,\n runtime,\n config: viewConfig,\n });\n\n // Update terminal width when window is resized (Node.js only)\n if (runtime === \"node\" && process?.stdout?.on) {\n process.stdout.on(\"resize\", () => {\n this.termWidth = process?.stdout?.columns || 80;\n this.renderer.updateTerminalWidth(this.termWidth);\n });\n }\n }\n\n /**\n * Generates a random ID for each log entry.\n * Uses base36 encoding for compact, readable IDs.\n *\n * @returns A 6-character string ID\n * @example\n * \"a1b2c3\" // Example generated ID\n */\n private generateId(): string {\n return Math.random().toString(36).substring(2, 8);\n }\n\n /**\n * Main transport method that receives logs from LogLayer.\n * This method is called for each log event and handles:\n * - Generating a unique ID for the log\n * - Converting the log data to a storable format\n * - Rendering the log using the SimpleView renderer\n *\n * @param logLevel - The severity level of the log\n * @param messages - Array of message strings to be joined\n * @param data - Additional structured data to be logged\n * @param hasData - Whether the log includes additional data\n * @returns The original messages array\n */\n shipToLogger({ logLevel, messages, data, hasData }: LogLayerTransportParams): any[] {\n // If transport is disabled, return messages without processing\n if (this.config.enabled === false) {\n return messages;\n }\n\n const entry = {\n id: this.generateId(),\n timestamp: Date.now(),\n level: logLevel,\n message: messages.join(\" \"),\n data: hasData ? JSON.stringify(data) : null,\n };\n\n this.renderer.renderLogLine(entry);\n return messages;\n }\n\n /**\n * Changes the view mode for log display.\n *\n * @param viewMode - The new view mode to use\n */\n setViewMode(viewMode: PrettyTerminalViewMode): void {\n if (this.config.enabled === false) {\n return;\n }\n\n // Rebuild the viewConfig as in the constructor\n const theme = this.config.theme || moonlight;\n const runtime = this.config.runtime;\n const viewConfig = {\n colors: {\n trace: chalk.gray,\n debug: chalk.blue,\n info: chalk.green,\n warn: chalk.yellow,\n error: chalk.red,\n fatal: chalk.bgRed.white,\n ...theme.colors,\n },\n logIdColor: theme.logIdColor || chalk.dim,\n dataValueColor: theme.dataValueColor || chalk.white,\n dataKeyColor: theme.dataKeyColor || chalk.dim,\n };\n\n this.renderer = new SimpleView({\n viewMode,\n maxInlineDepth: this.config.maxInlineDepth || 4,\n showLogId: this.config.showLogId || false,\n timestampFormat: this.config.timestampFormat || \"HH:mm:ss.SSS\",\n collapseArrays: this.config.collapseArrays !== false,\n flattenNestedObjects: this.config.flattenNestedObjects !== false,\n runtime,\n config: viewConfig,\n });\n }\n\n /**\n * Gets the current view mode.\n *\n * @returns The current view mode\n */\n getViewMode(): PrettyTerminalViewMode {\n return this.renderer.getViewMode();\n }\n}\n","import chalk from \"chalk\";\nimport type { SimplePrettyTerminalTheme } from \"./types.js\";\n\n/**\n * Moonlight - A dark theme with cool blue tones\n * Inspired by moonlit nights and modern IDEs\n *\n * Color Palette:\n * - Primary: Cool blues and soft greens\n * - Accents: Warm yellows and soft reds\n * - Background: Assumes dark terminal (black or very dark grey)\n *\n * Best used with:\n * - Dark terminal themes\n * - Night-time coding sessions\n * - Environments where eye strain is a concern\n */\nexport const moonlight: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(114, 135, 153), // Muted blue-grey for less important info\n debug: chalk.rgb(130, 170, 255), // Soft blue that pops but doesn't strain\n info: chalk.rgb(195, 232, 141), // Sage green for good readability\n warn: chalk.rgb(255, 203, 107), // Warm yellow, less harsh than pure yellow\n error: chalk.rgb(247, 118, 142), // Soft red that stands out without being aggressive\n fatal: chalk.bgRgb(247, 118, 142).white, // Inverted soft red for maximum visibility\n },\n logIdColor: chalk.rgb(84, 98, 117), // Darker blue-grey for secondary information\n dataValueColor: chalk.rgb(209, 219, 231), // Light grey-blue for primary content\n dataKeyColor: chalk.rgb(130, 170, 255), // Matching debug blue for consistency\n};\n\n/**\n * Sunlight - A light theme with warm tones\n * Inspired by daylight reading and paper documentation\n *\n * Color Palette:\n * - Primary: Deep, rich colors that contrast well with white\n * - Accents: Earth tones and deep jewel tones\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Daytime coding sessions\n * - High-glare environments\n * - Printed documentation\n */\nexport const sunlight: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(110, 110, 110), // Dark grey for subtle information\n debug: chalk.rgb(32, 96, 159), // Deep blue for strong contrast on white\n info: chalk.rgb(35, 134, 54), // Forest green, easier on the eyes than bright green\n warn: chalk.rgb(176, 95, 0), // Brown-orange for natural warning color\n error: chalk.rgb(191, 0, 0), // Deep red for clear visibility on light backgrounds\n fatal: chalk.bgRgb(191, 0, 0).white, // White on deep red for critical issues\n },\n logIdColor: chalk.rgb(110, 110, 110),\n dataValueColor: chalk.rgb(0, 0, 0),\n dataKeyColor: chalk.rgb(32, 96, 159),\n};\n\n/**\n * Neon - A dark theme with vibrant cyberpunk colors\n * Inspired by neon-lit cityscapes and retro-futuristic aesthetics\n *\n * Color Palette:\n * - Primary: Electric blues and hot pinks\n * - Accents: Bright purples and cyber greens\n * - Background: Assumes dark terminal (black or very dark grey)\n *\n * Best used with:\n * - Dark terminal themes\n * - High-contrast preferences\n * - Modern, tech-focused applications\n */\nexport const neon: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(108, 108, 255), // Electric blue\n debug: chalk.rgb(255, 82, 246), // Hot pink\n info: chalk.rgb(0, 255, 163), // Cyber green\n warn: chalk.rgb(255, 231, 46), // Electric yellow\n error: chalk.rgb(255, 53, 91), // Neon red\n fatal: chalk.bgRgb(255, 53, 91).rgb(0, 255, 163), // Neon red bg with cyber green text\n },\n logIdColor: chalk.rgb(187, 134, 252), // Bright purple\n dataValueColor: chalk.rgb(255, 255, 255), // Pure white\n dataKeyColor: chalk.rgb(0, 255, 240), // Cyan\n};\n\n/**\n * Nature - A light theme with organic, earthy colors\n * Inspired by forest landscapes and natural elements\n *\n * Color Palette:\n * - Primary: Deep forest greens and rich browns\n * - Accents: Autumn reds and golden yellows\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Nature-inspired interfaces\n * - Applications focusing on readability\n */\nexport const nature: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(101, 115, 126), // Slate grey\n debug: chalk.rgb(34, 139, 34), // Forest green\n info: chalk.rgb(46, 139, 87), // Sea green\n warn: chalk.rgb(218, 165, 32), // Golden rod\n error: chalk.rgb(139, 69, 19), // Saddle brown\n fatal: chalk.bgRgb(139, 69, 19).white, // Brown background with white text\n },\n logIdColor: chalk.rgb(101, 115, 126),\n dataValueColor: chalk.rgb(0, 0, 0),\n dataKeyColor: chalk.rgb(34, 139, 34),\n};\n\n/**\n * Pastel - A soft, calming theme with gentle colors\n * Inspired by watercolor paintings and soft aesthetics\n *\n * Color Palette:\n * - Primary: Soft pastels and muted tones\n * - Accents: Gentle pinks and light blues\n * - Background: Assumes light terminal (white or very light grey)\n *\n * Best used with:\n * - Light terminal themes\n * - Long coding sessions\n * - Reduced visual stress\n */\nexport const pastel: SimplePrettyTerminalTheme = {\n colors: {\n trace: chalk.rgb(200, 200, 200), // Light grey\n debug: chalk.rgb(173, 216, 230), // Light blue\n info: chalk.rgb(144, 238, 144), // Light green\n warn: chalk.rgb(255, 218, 185), // Peach\n error: chalk.rgb(255, 182, 193), // Light pink\n fatal: chalk.bgRgb(255, 182, 193).rgb(105, 105, 105), // Light pink bg with dim grey text\n },\n logIdColor: chalk.rgb(200, 200, 200),\n dataValueColor: chalk.rgb(105, 105, 105),\n dataKeyColor: chalk.rgb(173, 216, 230),\n};\n","import wrap from \"wrap-ansi\";\nimport type { LogEntry, PrettyTerminalViewMode, Runtime, SimpleViewConfig } from \"../types.js\";\nimport * as prettyjson from \"../vendor/prettyjson.js\";\nimport { formatInlineData, formatTimestamp, getLevelColor } from \"./utils.js\";\n\n/**\n * Handles rendering of the simple view mode.\n * Supports three display modes:\n * - Message-only: Shows timestamp, level and message\n * - Inline: Shows all details with complete data inline\n * - Expanded: Shows timestamp, level, and message on first line, with data on indented separate lines\n */\nexport class SimpleView {\n private termWidth: number;\n private config: SimpleViewConfig;\n private viewMode: PrettyTerminalViewMode;\n private maxInlineDepth: number;\n private showLogId: boolean;\n private timestampFormat: string | ((timestamp: number) => string);\n private collapseArrays: boolean;\n private flattenNestedObjects: boolean;\n private runtime: Runtime;\n\n constructor(config: SimpleViewConfig) {\n this.config = config;\n this.viewMode = config.viewMode;\n this.maxInlineDepth = config.maxInlineDepth;\n this.showLogId = config.showLogId;\n this.timestampFormat = config.timestampFormat;\n this.collapseArrays = config.collapseArrays !== false;\n this.flattenNestedObjects = config.flattenNestedObjects !== false;\n this.runtime = config.runtime;\n\n // Set terminal width based on runtime\n if (this.runtime === \"node\") {\n this.termWidth = process?.stdout?.columns || 120;\n } else {\n // For browser, use a reasonable default width\n this.termWidth = 120;\n }\n }\n\n public updateTerminalWidth(width: number): void {\n this.termWidth = width;\n }\n\n public getConfig(): SimpleViewConfig {\n return this.config;\n }\n\n public getViewMode(): PrettyTerminalViewMode {\n return this.viewMode;\n }\n\n /**\n * Writes a message to the appropriate output based on runtime\n */\n private writeMessage(message: string): void {\n if (this.runtime === \"node\") {\n // Use process.stdout.write for Node.js\n process?.stdout?.write?.(`${message}\\n`);\n } else {\n // Use console.log for browser\n console.log(message);\n }\n }\n\n /**\n * Renders a single log entry based on the current view mode\n */\n public renderLogLine(entry: LogEntry): void {\n const levelColor = getLevelColor(entry.level, this.config.config.colors);\n const chevron = levelColor(`▶ ${entry.level.toUpperCase()} `);\n const message = entry.message || \"(no message)\";\n const timestamp = formatTimestamp(entry.timestamp, this.config.config.logIdColor, this.timestampFormat);\n\n switch (this.viewMode) {\n case \"message-only\": {\n // Message-only view shows timestamp, level and message\n const condensedLine = `${timestamp} ${chevron}${message}`;\n this.writeMessage(wrap(condensedLine, this.termWidth, { hard: true }));\n break;\n }\n\n case \"inline\": {\n // Inline view shows all details with complete data inline\n const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n const fullData = entry.data\n ? formatInlineData(\n JSON.parse(entry.data),\n this.config.config,\n this.maxInlineDepth,\n !this.flattenNestedObjects,\n this.collapseArrays,\n )\n : \"\";\n const expandedLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}${fullData ? ` ${fullData}` : \"\"}`;\n // Don't wrap inline mode to preserve full content\n this.writeMessage(expandedLine);\n break;\n }\n\n case \"expanded\": {\n // Expanded view shows timestamp, level, and message on first line, with data on indented separate lines\n const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n const firstLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}`;\n this.writeMessage(wrap(firstLine, this.termWidth, { hard: true }));\n\n if (entry.data) {\n const jsonLines = prettyjson\n .render(JSON.parse(entry.data), {\n defaultIndentation: 2,\n keysColor: this.config.config.dataKeyColor,\n dashColor: this.config.config.dataKeyColor,\n numberColor: this.config.config.dataValueColor,\n stringColor: this.config.config.dataValueColor,\n multilineStringColor: this.config.config.dataValueColor,\n positiveNumberColor: this.config.config.dataValueColor,\n negativeNumberColor: this.config.config.dataValueColor,\n booleanColor: this.config.config.dataValueColor,\n nullUndefinedColor: this.config.config.dataValueColor,\n dateColor: this.config.config.dataValueColor,\n collapseArrays: this.collapseArrays,\n })\n .split(\"\\n\");\n\n // Add each line with proper indentation (2 spaces at the beginning)\n for (const line of jsonLines) {\n // Skip empty lines\n if (line.trim() === \"\") {\n this.writeMessage(\" \");\n } else {\n this.writeMessage(` ${line}`);\n }\n }\n }\n break;\n }\n\n default: {\n // Default to full view for any unexpected view modes\n const logId = this.showLogId ? this.config.config.logIdColor(`[${entry.id}]`) : \"\";\n const fullData = entry.data\n ? formatInlineData(JSON.parse(entry.data), this.config.config, this.maxInlineDepth, true, this.collapseArrays)\n : \"\";\n const expandedLine = `${timestamp} ${chevron}${logId ? `${logId} ` : \"\"}${message}${fullData ? ` ${fullData}` : \"\"}`;\n this.writeMessage(wrap(expandedLine, this.termWidth, { hard: true }));\n break;\n }\n }\n }\n}\n","// @ts-nocheck\nimport chalk from \"chalk\";\nimport * as Utils from \"./utils.js\";\nimport { isIsoStringDate } from \"./utils.js\";\n\nconst conflictChars = /[^\\w\\s\\n\\r\\v\\t.,]/i;\n\n// Helper function to detect if an object should be printed or ignored\nconst isPrintable = (input, options) => input !== undefined || options.renderUndefined;\n\n// Helper function to detect if an object can be directly serializable\nconst isSerializable = (input, onlyPrimitives, options) => {\n if (\n typeof input === \"boolean\" ||\n typeof input === \"number\" ||\n typeof input === \"function\" ||\n input === null ||\n input === undefined ||\n input instanceof Date\n ) {\n return true;\n }\n if (typeof input === \"string\" && input.indexOf(\"\\n\") === -1) {\n return true;\n }\n\n if (options.inlineArrays && !onlyPrimitives) {\n if (Array.isArray(input) && isSerializable(input[0], true, options)) {\n return true;\n }\n }\n\n return false;\n};\n\n/**\n * @param {Function} colorFn\n * @param {PrettyJSONOptions} options\n */\nconst getColorRenderer = (colorFn, options) => {\n if (options.noColor) {\n return (text) => text;\n }\n\n if (typeof colorFn !== \"function\") {\n return (text) => text;\n }\n\n return colorFn;\n};\n\nconst addColorToData = (input, options) => {\n if (options.noColor) {\n return input;\n }\n\n if (input instanceof Date) {\n return getColorRenderer(options.dateColor, options)(input.toISOString());\n }\n if (typeof input === \"string\") {\n if (isIsoStringDate(input)) {\n return getColorRenderer(options.dateColor, options)(input);\n }\n // Print strings in regular terminal color\n return getColorRenderer(options.stringColor, options)(input);\n }\n\n const sInput = `${input}`;\n\n if (typeof input === \"boolean\") {\n return getColorRenderer(options.booleanColor, options)(sInput);\n }\n if (input === null || input === undefined) {\n return getColorRenderer(options.nullUndefinedColor, options)(sInput);\n }\n if (typeof input === \"number\") {\n if (input >= 0) {\n return getColorRenderer(options.positiveNumberColor, options)(sInput);\n }\n return getColorRenderer(options.negativeNumberColor, options)(sInput);\n }\n if (typeof input === \"function\") {\n return \"function() {}\";\n }\n\n if (Array.isArray(input)) {\n return input.join(\", \");\n }\n\n return sInput;\n};\n\nconst colorMultilineString = (options, line) => getColorRenderer(options.multilineStringColor, options)(line);\n\nconst indentLines = (string, spaces, options) => {\n let lines = string.split(\"\\n\");\n lines = lines.map((line) => Utils.indent(spaces) + colorMultilineString(options, line));\n return lines.join(\"\\n\");\n};\n\nconst renderToArray = (data, options, indentation) => {\n if (typeof data === \"string\" && data.match(conflictChars) && options.escape) {\n data = JSON.stringify(data);\n }\n\n if (!isPrintable(data, options)) {\n return [];\n }\n\n if (isSerializable(data, false, options)) {\n return [Utils.indent(indentation) + addColorToData(data, options)];\n }\n\n // Unserializable string means it's multiline\n if (typeof data === \"string\") {\n return [\n Utils.indent(indentation) + colorMultilineString(options, '\"\"\"'),\n indentLines(data, indentation + options.defaultIndentation, options),\n Utils.indent(indentation) + colorMultilineString(options, '\"\"\"'),\n ];\n }\n\n if (Array.isArray(data)) {\n // If the array is empty, render the `emptyArrayMsg`\n if (data.length === 0) {\n return [Utils.indent(indentation) + options.emptyArrayMsg];\n }\n\n // If arrays should be collapsed and there's data, show [...]\n if (options.collapseArrays && data.length > 0) {\n return [`${Utils.indent(indentation)}[... ${data.length} items]`];\n }\n\n const outputArray = [];\n\n data.forEach((element) => {\n if (!isPrintable(element, options)) {\n return;\n }\n\n // Prepend the dash at the beginning of each array's element line\n let line = \"- \";\n line = getColorRenderer(options.dashColor, options)(line);\n line = Utils.indent(indentation) + line;\n\n // If the element of the array is a string, bool, number, or null\n // render it in the same line\n if (isSerializable(element, false, options)) {\n line += renderToArray(element, options, 0)[0];\n outputArray.push(line);\n\n // If the element is an array or object, render it in next line\n } else {\n outputArray.push(line);\n outputArray.push.apply(outputArray, renderToArray(element, options, indentation + options.defaultIndentation));\n }\n });\n\n return outputArray;\n }\n\n if (data instanceof Error) {\n return renderToArray(\n {\n message: data.message,\n stack: data.stack.split(\"\\n\"),\n },\n options,\n indentation,\n );\n }\n\n // If values alignment is enabled, get the size of the longest index\n // to align all the values\n const maxIndexLength = options.noAlign ? 0 : Utils.getMaxIndexLength(data);\n let key;\n const output = [];\n\n Object.getOwnPropertyNames(data).forEach((i) => {\n if (!isPrintable(data[i], options)) {\n return;\n }\n\n // Prepend the index at the beginning of the line\n key = `${i}: `;\n key = getColorRenderer(options.keysColor, options)(key);\n key = Utils.indent(indentation) + key;\n\n // If the value is serializable, render it in the same line\n if (isSerializable(data[i], false, options)) {\n const nextIndentation = options.noAlign ? 0 : maxIndexLength - i.length;\n key += renderToArray(data[i], options, nextIndentation)[0];\n output.push(key);\n\n // If the index is an array or object, render it in next line\n } else {\n output.push(key);\n output.push.apply(output, renderToArray(data[i], options, indentation + options.defaultIndentation));\n }\n });\n return output;\n};\n/**\n * @typedef {Object} PrettyJSONOptions\n * @property {Function} [stringColor=null] Chalk color function for strings\n * @property {Function} [multilineStringColor=null] Chalk color function for multiline strings\n * @property {Function} [keysColor=chalk.green] Chalk color function for keys in hashes\n * @property {Function} [dashColor=chalk.green] Chalk color function for dashes in arrays\n * @property {Function} [numberColor=chalk.blue] Default Chalk color function for numbers\n * @property {Function} [positiveNumberColor=numberColor] Chalk color function for positive numbers\n * @property {Function} [negativeNumberColor=numberColor] Chalk color function for negative numbers\n * @property {Function} [booleanColor=chalk.cyan] Chalk color function for boolean values\n * @property {Function} [nullUndefinedColor=chalk.grey] Chalk color function for null || undefined\n * @property {Function} [dateColor=chalk.magenta] Chalk color function for Date objects\n * @property {number} [defaultIndentation=2] Indentation spaces per object level\n * @property {string} [emptyArrayMsg=\"(empty array)\"] Replace empty strings with\n * @property {boolean} [noColor] Flag to disable colors\n * @property {boolean} [noAlign] Flag to disable alignment\n * @property {boolean} [escape] Flag to escape printed content\n * @property {boolean} [collapseArrays] Flag to collapse arrays\n */\n/**\n * Mutating function that ensures we have a valid options object\n * @param {PrettyJSONOptions} options\n * @returns PrettyJSONOptions\n */\nconst validateOptionsAndSetDefaults = (options) => {\n options = options || {};\n options.emptyArrayMsg = options.emptyArrayMsg || \"(empty array)\";\n options.keysColor = options.keysColor || chalk.green;\n options.dashColor = options.dashColor || chalk.green;\n options.booleanColor = options.booleanColor || chalk.cyan;\n options.nullUndefinedColor = options.nullUndefinedColor || chalk.grey;\n options.numberColor = options.numberColor || chalk.blue;\n options.positiveNumberColor = options.positiveNumberColor || options.numberColor;\n options.negativeNumberColor = options.negativeNumberColor || options.numberColor;\n options.dateColor = options.dateColor || chalk.magenta;\n options.defaultIndentation = options.defaultIndentation || 2;\n options.noColor = !!options.noColor;\n options.noAlign = !!options.noAlign;\n options.escape = !!options.escape;\n options.renderUndefined = !!options.renderUndefined;\n options.collapseArrays = !!options.collapseArrays;\n\n options.stringColor = options.stringColor || null;\n options.multilineStringColor = options.multilineStringColor || options.stringColor || null;\n\n return options;\n};\n/**\n * ### Render function\n * *Parameters:*\n *\n * @param {*} data: Data to render\n * @param {PrettyJSONOptions} options: Hash of different options\n * @param {*} indentation **`indentation`**: Base indentation of the output\n *\n * *Example of options hash:*\n *\n * {\n * emptyArrayMsg: '(empty)', // Rendered message on empty strings\n * keysColor: 'blue', // Color for keys in hashes\n * dashColor: 'red', // Color for the dashes in arrays\n * stringColor: 'grey', // Color for strings\n * multilineStringColor: 'cyan' // Color for multiline strings\n * defaultIndentation: 2 // Indentation on nested objects\n * }\n * @returns string with the rendered data\n */\nexport function render(data, options, indentation) {\n // Default values\n indentation = indentation || 0;\n options = validateOptionsAndSetDefaults(options);\n\n return renderToArray(data, options, indentation).join(\"\\n\");\n}\n\n/**\n * ### Render from string function\n * *Parameters:*\n *\n * @param {*} data: Data to render\n * @param {PrettyJSONOptions} options: Hash of different options\n * @param {*} indentation **`indentation`**: Base indentation of the output\n *\n * *Example of options hash:*\n *\n * {\n * emptyArrayMsg: '(empty)', // Rendered message on empty strings\n * keysColor: 'blue', // Color for keys in hashes\n * dashColor: 'red', // Color for the dashes in arrays\n * defaultIndentation: 2 // Indentation on nested objects\n * }\n */\nexport function renderString(data, options, indentation) {\n let output = \"\";\n let parsedData;\n // If the input is not a string or if it's empty, just return an empty string\n if (typeof data !== \"string\" || data === \"\") {\n return \"\";\n }\n\n // Remove non-JSON characters from the beginning string\n if (data[0] !== \"{\" && data[0] !== \"[\") {\n let beginingOfJson;\n if (data.indexOf(\"{\") === -1) {\n beginingOfJson = data.indexOf(\"[\");\n } else if (data.indexOf(\"[\") === -1) {\n beginingOfJson = data.indexOf(\"{\");\n } else if (data.indexOf(\"{\") < data.indexOf(\"[\")) {\n beginingOfJson = data.indexOf(\"{\");\n } else {\n beginingOfJson = data.indexOf(\"[\");\n }\n output += `${data.substr(0, beginingOfJson)}\\n`;\n data = data.substr(beginingOfJson);\n }\n\n try {\n parsedData = JSON.parse(data);\n } catch (_e) {\n // Return an error in case of an invalid JSON\n return `${chalk.red(\"Error:\")} Not valid JSON!`;\n }\n\n // Call the real render() method\n output += exports.render(parsedData, options, indentation);\n return output;\n}\n","/**\n * Creates a string with the same length as `numSpaces` parameter\n **/\nexport function indent(numSpaces) {\n return new Array(numSpaces + 1).join(\" \");\n}\n\n/**\n * Gets the string length of the longer index in a hash\n **/\nexport function getMaxIndexLength(input) {\n var maxWidth = 0;\n\n Object.getOwnPropertyNames(input).forEach((key) => {\n // Skip undefined values.\n if (input[key] === undefined) {\n return;\n }\n\n maxWidth = Math.max(maxWidth, key.length);\n });\n return maxWidth;\n}\n\nexport function isIsoStringDate(isoString) {\n if (typeof isoString !== \"string\") {\n return false;\n }\n // More flexible regex that handles:\n // - Optional milliseconds\n // - Optional timezone offset or Z\n // - Optional T separator (space also valid)\n if (!/^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:?\\d{2})?$/.test(isoString)) {\n return false;\n }\n const testDate = new Date(isoString);\n return !Number.isNaN(testDate.getTime());\n}\n","import chalk from \"chalk\";\nimport { format } from \"date-fns\";\nimport type { ColorConfig, ViewConfig } from \"../types.js\";\n\n/**\n * Formats a timestamp into a readable string.\n *\n * @param timestamp - Unix timestamp in milliseconds\n * @param colorFn - Chalk function to color the timestamp\n * @param timestampFormat - Custom format string (date-fns) or function. Defaults to \"HH:mm:ss.SSS\"\n * @returns Formatted timestamp string\n */\nexport function formatTimestamp(\n timestamp: number,\n colorFn: typeof chalk.white,\n timestampFormat: string | ((timestamp: number) => string) = \"HH:mm:ss.SSS\",\n): string {\n let formattedTime: string;\n\n if (typeof timestampFormat === \"function\") {\n formattedTime = timestampFormat(timestamp);\n } else {\n const date = new Date(timestamp);\n formattedTime = format(date, timestampFormat);\n }\n\n return colorFn(`[${formattedTime}]`);\n}\n\n/**\n * Gets the appropriate color function for a log level.\n *\n * @param level - Log level string\n * @param colors - Color configuration object\n * @returns Chalk function for the log level\n */\nexport function getLevelColor(level: string, colors: ColorConfig): typeof chalk.white {\n const levelLower = level.toLowerCase();\n\n switch (levelLower) {\n case \"trace\":\n return colors.trace || chalk.white;\n case \"debug\":\n return colors.debug || chalk.white;\n case \"info\":\n return colors.info || chalk.white;\n case \"warn\":\n return colors.warn || chalk.white;\n case \"error\":\n return colors.error || chalk.white;\n case \"fatal\":\n return colors.fatal || chalk.white;\n default:\n return colors.info || chalk.white;\n }\n}\n\n/**\n * Formats a value for display.\n */\nexport function formatValue(value: any, expanded = false, collapseArrays = true): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return value.toString();\n if (value === null) return \"null\";\n if (value === undefined) return \"undefined\";\n if (Array.isArray(value)) return expanded ? JSON.stringify(value) : collapseArrays ? \"[...]\" : value.toString();\n if (typeof value === \"object\") return expanded ? JSON.stringify(value) : \"{...}\";\n return value.toString();\n}\n\n/**\n * Formats structured data for inline display with depth limiting.\n *\n * @param data - The data to format\n * @param config - View configuration for colors\n * @param maxDepth - Maximum depth for nested objects\n * @param expanded - Whether to show full depth (for inline view mode)\n * @param collapseArrays - Whether to collapse arrays to summary format\n * @returns Formatted data string\n */\nexport function formatInlineData(\n data: any,\n config: Required<ViewConfig>,\n maxDepth: number,\n expanded = false,\n collapseArrays = true,\n): string {\n if (!data) return \"\";\n\n const pairs: string[] = [];\n const traverse = (obj: any, prefix = \"\", depth = 0) => {\n if (!expanded && depth >= maxDepth) return;\n\n for (const [key, value] of Object.entries(obj)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n if (expanded) {\n pairs.push(`${config.dataKeyColor(fullKey)}=${config.dataValueColor(JSON.stringify(value))}`);\n } else {\n traverse(value, fullKey, depth + 1);\n }\n } else {\n pairs.push(\n `${config.dataKeyColor(fullKey)}=${config.dataValueColor(formatValue(value, expanded, collapseArrays))}`,\n );\n }\n }\n };\n\n traverse(data);\n const result = pairs.join(\" \");\n // Remove truncation - inline view should show complete data without truncation\n return result;\n}\n","import { SimplePrettyTerminalTransport } from \"./SimplePrettyTerminalTransport.js\";\nimport type {\n PrettyTerminalViewMode,\n Runtime,\n SimplePrettyTerminalConfig,\n SimplePrettyTerminalTheme,\n} from \"./types.js\";\n\n// Export chalk for custom theme creation\nexport * from \"chalk\";\n\n// Export the main transport class (for advanced usage)\nexport { SimplePrettyTerminalTransport };\n\n// Export all built-in themes\nexport * from \"./themes.js\";\n\n// Export essential types for configuration and custom themes\nexport type { SimplePrettyTerminalConfig, SimplePrettyTerminalTheme, PrettyTerminalViewMode, Runtime };\n\n// Main convenience function for creating the transport\nexport function getSimplePrettyTerminal(config: SimplePrettyTerminalConfig) {\n return new SimplePrettyTerminalTransport(config);\n}\n"],"mappings":"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","names":["chalk","chalk","chalk","chalk","chalk"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loglayer/transport-simple-pretty-terminal",
|
|
3
|
-
"description": "
|
|
4
|
-
"version": "
|
|
3
|
+
"description": "Pretty log output in the terminal / browser / Next.js for the LogLayer logging library.",
|
|
4
|
+
"version": "2.0.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
7
7
|
"module": "./dist/index.js",
|
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
"pretty",
|
|
31
31
|
"logging",
|
|
32
32
|
"simple",
|
|
33
|
-
"nextjs"
|
|
33
|
+
"nextjs",
|
|
34
|
+
"browser"
|
|
34
35
|
],
|
|
35
36
|
"dependencies": {
|
|
36
37
|
"chalk": "5.4.1",
|
|
@@ -49,8 +50,8 @@
|
|
|
49
50
|
"typescript": "5.8.3",
|
|
50
51
|
"tsx": "4.20.3",
|
|
51
52
|
"vitest": "3.2.4",
|
|
52
|
-
"
|
|
53
|
-
"
|
|
53
|
+
"loglayer": "6.4.3",
|
|
54
|
+
"@internal/tsconfig": "2.1.0"
|
|
54
55
|
},
|
|
55
56
|
"bugs": "https://github.com/loglayer/loglayer/issues",
|
|
56
57
|
"files": [
|