@bian-womp/spark-graph 0.3.55 → 0.3.56

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.
@@ -44,6 +44,14 @@ export declare class LevelLogger {
44
44
  * Logs an error message
45
45
  */
46
46
  error(message: string, context?: Record<string, unknown>, overrideLevel?: LogLevel): void;
47
+ /**
48
+ * Tries to parse a string as JSON and format it nicely if it's fully JSON
49
+ */
50
+ private parseJsonStringIfFull;
51
+ /**
52
+ * Parses JSON strings in context values if they are fully JSON
53
+ */
54
+ private parseJsonStringsInContext;
47
55
  /**
48
56
  * Core logging method that respects the log level and applies prefix
49
57
  */
@@ -1 +1 @@
1
- {"version":3,"file":"LevelLogger.d.ts","sourceRoot":"","sources":["../../../../../src/misc/utils/LevelLogger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAI1D;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,MAAM,CAAS;IAEvB;;OAEG;IACH,gBAAuB,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CACzC;gBAEP,YAAY,GAAE,QAAiB,EAAE,MAAM,GAAE,MAAW;IAKhE;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B;;OAEG;IACH,QAAQ,IAAI,QAAQ;IAIpB,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,KAAK,CACH,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,aAAa,CAAC,EAAE,QAAQ,GACvB,IAAI;IAIP;;OAEG;IACH,IAAI,CACF,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,aAAa,CAAC,EAAE,QAAQ,GACvB,IAAI;IAIP;;OAEG;IACH,IAAI,CACF,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,aAAa,CAAC,EAAE,QAAQ,GACvB,IAAI;IAIP;;OAEG;IACH,KAAK,CACH,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,aAAa,CAAC,EAAE,QAAQ,GACvB,IAAI;IAIP;;OAEG;IACH,OAAO,CAAC,GAAG;CAgDZ"}
1
+ {"version":3,"file":"LevelLogger.d.ts","sourceRoot":"","sources":["../../../../../src/misc/utils/LevelLogger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAI1D;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,MAAM,CAAS;IAEvB;;OAEG;IACH,gBAAuB,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CACzC;gBAEP,YAAY,GAAE,QAAiB,EAAE,MAAM,GAAE,MAAW;IAKhE;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B;;OAEG;IACH,QAAQ,IAAI,QAAQ;IAIpB,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,KAAK,CACH,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,aAAa,CAAC,EAAE,QAAQ,GACvB,IAAI;IAIP;;OAEG;IACH,IAAI,CACF,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,aAAa,CAAC,EAAE,QAAQ,GACvB,IAAI;IAIP;;OAEG;IACH,IAAI,CACF,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,aAAa,CAAC,EAAE,QAAQ,GACvB,IAAI;IAIP;;OAEG;IACH,KAAK,CACH,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,aAAa,CAAC,EAAE,QAAQ,GACvB,IAAI;IAIP;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAcjC;;OAEG;IACH,OAAO,CAAC,GAAG;CAqEZ"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LevelLogger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LevelLogger.test.d.ts","sourceRoot":"","sources":["../../../../../src/misc/utils/LevelLogger.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Simple test script to see LevelLogger output for different logFormat options
4
+ * Run with: yarn test-logger
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=test-logger-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-logger-output.d.ts","sourceRoot":"","sources":["../../../../../src/misc/utils/test-logger-output.ts"],"names":[],"mappings":";AACA;;;GAGG"}
package/lib/esm/index.js CHANGED
@@ -1544,6 +1544,40 @@ class LevelLogger {
1544
1544
  error(message, context, overrideLevel) {
1545
1545
  this.log("error", message, context, overrideLevel);
1546
1546
  }
1547
+ /**
1548
+ * Tries to parse a string as JSON and format it nicely if it's fully JSON
1549
+ */
1550
+ parseJsonStringIfFull(str) {
1551
+ const trimmed = str.trim();
1552
+ // Check if the string starts with { or [ and ends with } or ]
1553
+ if ((trimmed.startsWith("{") && trimmed.endsWith("}")) ||
1554
+ (trimmed.startsWith("[") && trimmed.endsWith("]"))) {
1555
+ try {
1556
+ const parsed = JSON.parse(trimmed);
1557
+ return JSON.stringify(parsed, null, 2);
1558
+ }
1559
+ catch {
1560
+ // If parsing fails, return original string
1561
+ return str;
1562
+ }
1563
+ }
1564
+ return str;
1565
+ }
1566
+ /**
1567
+ * Parses JSON strings in context values if they are fully JSON
1568
+ */
1569
+ parseJsonStringsInContext(context) {
1570
+ const parsed = {};
1571
+ for (const [key, value] of Object.entries(context)) {
1572
+ if (typeof value === "string") {
1573
+ parsed[key] = this.parseJsonStringIfFull(value);
1574
+ }
1575
+ else {
1576
+ parsed[key] = value;
1577
+ }
1578
+ }
1579
+ return parsed;
1580
+ }
1547
1581
  /**
1548
1582
  * Core logging method that respects the log level and applies prefix
1549
1583
  */
@@ -1557,12 +1591,31 @@ class LevelLogger {
1557
1591
  const effectiveValue = LevelLogger.levelValues[effectiveLevel] ?? 1;
1558
1592
  // Only log if the requested level is >= effective level
1559
1593
  if (requestedValue >= effectiveValue) {
1560
- const { formatJson, ...rest } = context ?? {};
1561
- const contextStr = rest && Object.keys(rest).length > 0
1562
- ? `${formatJson ? "\n" : " "}${Object.entries(rest)
1563
- .map(([k, v]) => formatJson
1564
- ? `${k}=${stringifySceneAndOps(v)}`
1565
- : `${k}=${JSON.stringify(v)}`)
1594
+ const { logFormat = "plain", ...rest } = context ?? {};
1595
+ const formatJson = logFormat === "json" || logFormat === "json-deep";
1596
+ const parseJsonString = logFormat === "json-deep";
1597
+ // Parse JSON strings in context values if requested
1598
+ let processedContext = rest;
1599
+ if (parseJsonString && rest && Object.keys(rest).length > 0) {
1600
+ processedContext = this.parseJsonStringsInContext(rest);
1601
+ }
1602
+ const contextStr = processedContext && Object.keys(processedContext).length > 0
1603
+ ? `${formatJson ? "\n" : " "}${Object.entries(processedContext)
1604
+ .map(([k, v]) => {
1605
+ // If parseJsonString is enabled and value is a formatted JSON string
1606
+ // (starts with { or [ and contains newlines indicating it was formatted),
1607
+ // output it directly without stringifySceneAndOps to preserve formatting
1608
+ if (parseJsonString &&
1609
+ typeof v === "string" &&
1610
+ v.trim().match(/^[{\[]/) &&
1611
+ v.includes("\n")) {
1612
+ return `${k}=${v}`;
1613
+ }
1614
+ if (formatJson) {
1615
+ return `${k}=${stringifySceneAndOps(v)}`;
1616
+ }
1617
+ return `${k}=${JSON.stringify(v)}`;
1618
+ })
1566
1619
  .join(formatJson ? "\n" : " ")}`
1567
1620
  : "";
1568
1621
  const prefixedMessage = this.prefix