lograil 0.1.1 → 0.1.4

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.
Files changed (122) hide show
  1. package/CHANGELOG.md +105 -1
  2. package/dist/cjs/context/async-context.browser.d.ts +1 -7
  3. package/dist/cjs/context/async-context.browser.d.ts.map +1 -1
  4. package/dist/cjs/context/async-context.browser.js +4 -1
  5. package/dist/cjs/context/async-context.browser.js.map +1 -1
  6. package/dist/cjs/context/context.js +1 -1
  7. package/dist/cjs/context/context.js.map +1 -1
  8. package/dist/cjs/core/logger.d.ts +2 -0
  9. package/dist/cjs/core/logger.d.ts.map +1 -1
  10. package/dist/cjs/core/logger.js +11 -1
  11. package/dist/cjs/core/logger.js.map +1 -1
  12. package/dist/cjs/pipeline/formatter.d.ts.map +1 -1
  13. package/dist/cjs/pipeline/formatter.js +37 -21
  14. package/dist/cjs/pipeline/formatter.js.map +1 -1
  15. package/dist/cjs/pipeline/pipeline.d.ts.map +1 -1
  16. package/dist/cjs/pipeline/pipeline.js +2 -1
  17. package/dist/cjs/pipeline/pipeline.js.map +1 -1
  18. package/dist/cjs/pipeline/sampler.d.ts.map +1 -1
  19. package/dist/cjs/pipeline/sampler.js +5 -0
  20. package/dist/cjs/pipeline/sampler.js.map +1 -1
  21. package/dist/cjs/plugin/otel-trace.d.ts.map +1 -1
  22. package/dist/cjs/plugin/otel-trace.js +4 -7
  23. package/dist/cjs/plugin/otel-trace.js.map +1 -1
  24. package/dist/cjs/runtime/electron-binding.d.ts +4 -0
  25. package/dist/cjs/runtime/electron-binding.d.ts.map +1 -1
  26. package/dist/cjs/runtime/electron-binding.js +24 -2
  27. package/dist/cjs/runtime/electron-binding.js.map +1 -1
  28. package/dist/cjs/runtime/electron.d.ts.map +1 -1
  29. package/dist/cjs/runtime/electron.js +7 -1
  30. package/dist/cjs/runtime/electron.js.map +1 -1
  31. package/dist/cjs/runtime/process-lifecycle.d.ts.map +1 -1
  32. package/dist/cjs/runtime/process-lifecycle.js +11 -0
  33. package/dist/cjs/runtime/process-lifecycle.js.map +1 -1
  34. package/dist/cjs/transport/cluster-ipc.d.ts +2 -0
  35. package/dist/cjs/transport/cluster-ipc.d.ts.map +1 -1
  36. package/dist/cjs/transport/cluster-ipc.js +53 -5
  37. package/dist/cjs/transport/cluster-ipc.js.map +1 -1
  38. package/dist/cjs/transport/console.d.ts.map +1 -1
  39. package/dist/cjs/transport/console.js +10 -9
  40. package/dist/cjs/transport/console.js.map +1 -1
  41. package/dist/cjs/transport/electron-ipc.d.ts +4 -17
  42. package/dist/cjs/transport/electron-ipc.d.ts.map +1 -1
  43. package/dist/cjs/transport/electron-ipc.js +42 -73
  44. package/dist/cjs/transport/electron-ipc.js.map +1 -1
  45. package/dist/cjs/transport/file.d.ts +3 -1
  46. package/dist/cjs/transport/file.d.ts.map +1 -1
  47. package/dist/cjs/transport/file.js +10 -4
  48. package/dist/cjs/transport/file.js.map +1 -1
  49. package/dist/cjs/transport/live.js +1 -1
  50. package/dist/cjs/transport/live.js.map +1 -1
  51. package/dist/cjs/transport/worker-ipc.d.ts +2 -0
  52. package/dist/cjs/transport/worker-ipc.d.ts.map +1 -1
  53. package/dist/cjs/transport/worker-ipc.js +69 -9
  54. package/dist/cjs/transport/worker-ipc.js.map +1 -1
  55. package/dist/cjs/types.d.ts +2 -0
  56. package/dist/cjs/types.d.ts.map +1 -1
  57. package/dist/cjs/types.js.map +1 -1
  58. package/dist/esm/context/async-context.browser.d.ts +1 -7
  59. package/dist/esm/context/async-context.browser.d.ts.map +1 -1
  60. package/dist/esm/context/async-context.browser.js +4 -1
  61. package/dist/esm/context/async-context.browser.js.map +1 -1
  62. package/dist/esm/context/context.js +1 -1
  63. package/dist/esm/context/context.js.map +1 -1
  64. package/dist/esm/core/logger.d.ts +2 -0
  65. package/dist/esm/core/logger.d.ts.map +1 -1
  66. package/dist/esm/core/logger.js +11 -1
  67. package/dist/esm/core/logger.js.map +1 -1
  68. package/dist/esm/pipeline/formatter.d.ts.map +1 -1
  69. package/dist/esm/pipeline/formatter.js +37 -21
  70. package/dist/esm/pipeline/formatter.js.map +1 -1
  71. package/dist/esm/pipeline/pipeline.d.ts.map +1 -1
  72. package/dist/esm/pipeline/pipeline.js +2 -1
  73. package/dist/esm/pipeline/pipeline.js.map +1 -1
  74. package/dist/esm/pipeline/sampler.d.ts.map +1 -1
  75. package/dist/esm/pipeline/sampler.js +5 -0
  76. package/dist/esm/pipeline/sampler.js.map +1 -1
  77. package/dist/esm/plugin/otel-trace.d.ts.map +1 -1
  78. package/dist/esm/plugin/otel-trace.js +4 -7
  79. package/dist/esm/plugin/otel-trace.js.map +1 -1
  80. package/dist/esm/runtime/electron-binding.d.ts +4 -0
  81. package/dist/esm/runtime/electron-binding.d.ts.map +1 -1
  82. package/dist/esm/runtime/electron-binding.js +24 -2
  83. package/dist/esm/runtime/electron-binding.js.map +1 -1
  84. package/dist/esm/runtime/electron.d.ts.map +1 -1
  85. package/dist/esm/runtime/electron.js +7 -1
  86. package/dist/esm/runtime/electron.js.map +1 -1
  87. package/dist/esm/runtime/process-lifecycle.d.ts.map +1 -1
  88. package/dist/esm/runtime/process-lifecycle.js +11 -0
  89. package/dist/esm/runtime/process-lifecycle.js.map +1 -1
  90. package/dist/esm/transport/cluster-ipc.d.ts +2 -0
  91. package/dist/esm/transport/cluster-ipc.d.ts.map +1 -1
  92. package/dist/esm/transport/cluster-ipc.js +52 -5
  93. package/dist/esm/transport/cluster-ipc.js.map +1 -1
  94. package/dist/esm/transport/console.d.ts.map +1 -1
  95. package/dist/esm/transport/console.js +10 -9
  96. package/dist/esm/transport/console.js.map +1 -1
  97. package/dist/esm/transport/electron-ipc.d.ts +4 -17
  98. package/dist/esm/transport/electron-ipc.d.ts.map +1 -1
  99. package/dist/esm/transport/electron-ipc.js +42 -71
  100. package/dist/esm/transport/electron-ipc.js.map +1 -1
  101. package/dist/esm/transport/file.d.ts +3 -1
  102. package/dist/esm/transport/file.d.ts.map +1 -1
  103. package/dist/esm/transport/file.js +10 -4
  104. package/dist/esm/transport/file.js.map +1 -1
  105. package/dist/esm/transport/live.js +1 -1
  106. package/dist/esm/transport/live.js.map +1 -1
  107. package/dist/esm/transport/worker-ipc.d.ts +2 -0
  108. package/dist/esm/transport/worker-ipc.d.ts.map +1 -1
  109. package/dist/esm/transport/worker-ipc.js +68 -9
  110. package/dist/esm/transport/worker-ipc.js.map +1 -1
  111. package/dist/esm/types.d.ts +2 -0
  112. package/dist/esm/types.d.ts.map +1 -1
  113. package/dist/esm/types.js.map +1 -1
  114. package/package.json +12 -3
  115. package/dist/cjs/transport/rotating-file.d.ts +0 -67
  116. package/dist/cjs/transport/rotating-file.d.ts.map +0 -1
  117. package/dist/cjs/transport/rotating-file.js +0 -179
  118. package/dist/cjs/transport/rotating-file.js.map +0 -1
  119. package/dist/esm/transport/rotating-file.d.ts +0 -67
  120. package/dist/esm/transport/rotating-file.d.ts.map +0 -1
  121. package/dist/esm/transport/rotating-file.js +0 -175
  122. package/dist/esm/transport/rotating-file.js.map +0 -1
@@ -55,16 +55,13 @@ function createOtelTracePlugin() {
55
55
  return {
56
56
  name: 'otel-trace',
57
57
  async onInit() {
58
+ // Dynamic import with a variable literal prevents TS from resolving the
59
+ // optional peer dependency at compile time.
58
60
  try {
59
- // Lazy, optional resolution never fails if the package is absent.
60
- // The specifier is held in a variable so TypeScript does not try to
61
- // resolve the (optional) module at compile time.
62
- const specifier = '@opentelemetry/api';
63
- const mod = (await Promise.resolve(`${specifier}`).then(s => __importStar(require(s))));
64
- traceApi = mod.trace;
61
+ traceApi = (await Promise.resolve().then(() => __importStar(require('@opentelemetry/api')))).trace;
65
62
  }
66
63
  catch {
67
- traceApi = undefined;
64
+ // Not installed — plugin stays a no-op.
68
65
  }
69
66
  },
70
67
  onEntry(entry) {
@@ -1 +1 @@
1
- {"version":3,"file":"otel-trace.js","sourceRoot":"","sources":["../../../src/plugin/otel-trace.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,sDAgCC;AAhDD;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,qBAAqB;IACnC,IAAI,QAAkC,CAAC;IACvC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,KAAK,CAAC,MAAM;YACV,IAAI,CAAC;gBACH,oEAAoE;gBACpE,oEAAoE;gBACpE,iDAAiD;gBACjD,MAAM,SAAS,GAAG,oBAAoB,CAAC;gBACvC,MAAM,GAAG,GAAG,CAAC,yBAAa,SAAS,uCAAC,CAAwC,CAAC;gBAC7E,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,GAAG,SAAS,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,KAAe;YACrB,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAC;YACxB,6DAA6D;YAC7D,qEAAqE;YACrE,QAAQ;YACR,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;YACzD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG;gBAAE,OAAO,KAAK,CAAC;YACvB,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;aAC1E,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"otel-trace.js","sourceRoot":"","sources":["../../../src/plugin/otel-trace.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,sDA6BC;AA7CD;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,qBAAqB;IACnC,IAAI,QAAkC,CAAC;IACvC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,KAAK,CAAC,MAAM;YACV,wEAAwE;YACxE,4CAA4C;YAC5C,IAAI,CAAC;gBACH,QAAQ,GAAG,CAAC,wDAAa,oBAAoB,GAAC,CAAC,CAAC,KAAiC,CAAC;YACpF,CAAC;YAAC,MAAM,CAAC;gBACP,wCAAwC;YAC1C,CAAC;QACH,CAAC;QACD,OAAO,CAAC,KAAe;YACrB,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAC;YACxB,6DAA6D;YAC7D,qEAAqE;YACrE,QAAQ;YACR,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;YACzD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG;gBAAE,OAAO,KAAK,CAAC;YACvB,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;aAC1E,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -12,6 +12,10 @@ export declare function isElectronProcess(): boolean;
12
12
  * that performs `require('electron')`, so a web bundler can swap this whole
13
13
  * module for `electron-binding.browser` (via package.json `browser`) and never
14
14
  * touch the Electron binary.
15
+ *
16
+ * When the electron binary is absent (e.g. test environments with
17
+ * `ELECTRON_SKIP_BINARY_DOWNLOAD=1`), returns a minimal stub so the rest of
18
+ * the API remains callable without crashing.
15
19
  */
16
20
  export declare function getElectron(): ElectronModule;
17
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"electron-binding.d.ts","sourceRoot":"","sources":["../../../src/runtime/electron-binding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,QAAQ,CAAC,mBAAmB,CAAC;AAIjE,oDAAoD;AACpD,wBAAgB,iBAAiB,IAAI,OAAO,CAK3C;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,cAAc,CAc5C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,GAAG,GAAG,SAAS,CAOhD"}
1
+ {"version":3,"file":"electron-binding.d.ts","sourceRoot":"","sources":["../../../src/runtime/electron-binding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,QAAQ,CAAC,mBAAmB,CAAC;AAIjE,oDAAoD;AACpD,wBAAgB,iBAAiB,IAAI,OAAO,CAK3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,IAAI,cAAc,CA+B5C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,GAAG,GAAG,SAAS,CAOhD"}
@@ -14,6 +14,10 @@ function isElectronProcess() {
14
14
  * that performs `require('electron')`, so a web bundler can swap this whole
15
15
  * module for `electron-binding.browser` (via package.json `browser`) and never
16
16
  * touch the Electron binary.
17
+ *
18
+ * When the electron binary is absent (e.g. test environments with
19
+ * `ELECTRON_SKIP_BINARY_DOWNLOAD=1`), returns a minimal stub so the rest of
20
+ * the API remains callable without crashing.
17
21
  */
18
22
  function getElectron() {
19
23
  if (cached !== undefined) {
@@ -26,8 +30,26 @@ function getElectron() {
26
30
  cached = null;
27
31
  throw new Error('electron is only available inside an Electron process');
28
32
  }
29
- // eslint-disable-next-line @typescript-eslint/no-require-imports
30
- cached = require('electron');
33
+ try {
34
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
35
+ cached = require('electron');
36
+ }
37
+ catch {
38
+ // Electron binary not installed (e.g. ELECTRON_SKIP_BINARY_DOWNLOAD=1).
39
+ // Return a minimal stub so the library does not crash at runtime.
40
+ cached = {
41
+ ipcRenderer: { send() { } },
42
+ ipcMain: { on() { }, removeListener() { } },
43
+ app: {
44
+ getPath() {
45
+ return '/tmp';
46
+ },
47
+ on() { },
48
+ removeAllListeners() { },
49
+ },
50
+ };
51
+ return cached;
52
+ }
31
53
  return cached;
32
54
  }
33
55
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"electron-binding.js","sourceRoot":"","sources":["../../../src/runtime/electron-binding.ts"],"names":[],"mappings":";;AAYA,8CAKC;AAQD,kCAcC;AAQD,wCAOC;AA7CD,IAAI,MAAyC,CAAC;AAE9C,oDAAoD;AACpD,SAAgB,iBAAiB;IAC/B,OAAO,CACL,OAAO,OAAO,KAAK,WAAW;QAC9B,CAAC,CAAE,OAAgD,CAAC,QAAQ,EAAE,QAAQ,CACvE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW;IACzB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QACzB,MAAM,GAAG,IAAI,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,iEAAiE;IACjE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAmB,CAAC;IAC/C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc;IAC5B,IAAI,CAAC,iBAAiB,EAAE;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,CAAC;QACH,OAAO,WAAW,EAAE,CAAC,GAAG,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"electron-binding.js","sourceRoot":"","sources":["../../../src/runtime/electron-binding.ts"],"names":[],"mappings":";;AAYA,8CAKC;AAYD,kCA+BC;AAQD,wCAOC;AAlED,IAAI,MAAyC,CAAC;AAE9C,oDAAoD;AACpD,SAAgB,iBAAiB;IAC/B,OAAO,CACL,OAAO,OAAO,KAAK,WAAW;QAC9B,CAAC,CAAE,OAAgD,CAAC,QAAQ,EAAE,QAAQ,CACvE,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,WAAW;IACzB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QACzB,MAAM,GAAG,IAAI,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAmB,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,kEAAkE;QAClE,MAAM,GAAG;YACP,WAAW,EAAE,EAAE,IAAI,KAAI,CAAC,EAAE;YAC1B,OAAO,EAAE,EAAE,EAAE,KAAI,CAAC,EAAE,cAAc,KAAI,CAAC,EAAE;YACzC,GAAG,EAAE;gBACH,OAAO;oBACL,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,EAAE,KAAI,CAAC;gBACP,kBAAkB,KAAI,CAAC;aACxB;SAC2B,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc;IAC5B,IAAI,CAAC,iBAAiB,EAAE;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,CAAC;QACH,OAAO,WAAW,EAAE,CAAC,GAAG,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"electron.d.ts","sourceRoot":"","sources":["../../../src/runtime/electron.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAE7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,YAAY,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAE7E;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,0BAA0B,GAAG,8BAA8B,CAAC;AAWjG;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,cAAc,CAI1F"}
1
+ {"version":3,"file":"electron.d.ts","sourceRoot":"","sources":["../../../src/runtime/electron.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAE7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,YAAY,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAE7E;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,0BAA0B,GAAG,8BAA8B,CAAC;AAWjG;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,cAAc,CAW1F"}
@@ -22,6 +22,12 @@ function isMainProcess() {
22
22
  function createElectronRuntime(options = {}) {
23
23
  return isMainProcess()
24
24
  ? (0, electron_main_js_1.createElectronMainRuntime)(options)
25
- : (0, electron_renderer_js_1.createElectronRendererRuntime)(options);
25
+ : (0, electron_renderer_js_1.createElectronRendererRuntime)({
26
+ ipcRenderer: typeof require === 'function'
27
+ ? // eslint-disable-next-line
28
+ require('electron').ipcRenderer
29
+ : undefined,
30
+ ...options,
31
+ });
26
32
  }
27
33
  //# sourceMappingURL=electron.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"electron.js","sourceRoot":"","sources":["../../../src/runtime/electron.ts"],"names":[],"mappings":";;;AAgCA,sDAIC;AAnCD,yDAA+D;AAE/D,iEAAuE;AAGvE,uDAA+D;AAAtD,6HAAA,yBAAyB,OAAA;AAElC,+DAAuE;AAA9D,qIAAA,6BAA6B,OAAA;AAUtC,SAAS,aAAa;IACpB,yEAAyE;IACzE,wEAAwE;IACxE,wDAAwD;IACxD,OAAO,CACL,OAAO,OAAO,KAAK,WAAW,IAAK,OAAwC,CAAC,IAAI,KAAK,UAAU,CAChG,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,UAAkC,EAAE;IACxE,OAAO,aAAa,EAAE;QACpB,CAAC,CAAC,IAAA,4CAAyB,EAAC,OAAO,CAAC;QACpC,CAAC,CAAC,IAAA,oDAA6B,EAAC,OAAO,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"electron.js","sourceRoot":"","sources":["../../../src/runtime/electron.ts"],"names":[],"mappings":";;;AAgCA,sDAWC;AA1CD,yDAA+D;AAE/D,iEAAuE;AAGvE,uDAA+D;AAAtD,6HAAA,yBAAyB,OAAA;AAElC,+DAAuE;AAA9D,qIAAA,6BAA6B,OAAA;AAUtC,SAAS,aAAa;IACpB,yEAAyE;IACzE,wEAAwE;IACxE,wDAAwD;IACxD,OAAO,CACL,OAAO,OAAO,KAAK,WAAW,IAAK,OAAwC,CAAC,IAAI,KAAK,UAAU,CAChG,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,UAAkC,EAAE;IACxE,OAAO,aAAa,EAAE;QACpB,CAAC,CAAC,IAAA,4CAAyB,EAAC,OAAO,CAAC;QACpC,CAAC,CAAC,IAAA,oDAA6B,EAAC;YAC5B,WAAW,EACT,OAAO,OAAO,KAAK,UAAU;gBAC3B,CAAC,CAAC,2BAA2B;oBAC3B,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW;gBACjC,CAAC,CAAC,SAAS;YACf,GAAG,OAAO;SACX,CAAC,CAAC;AACT,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"process-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/runtime/process-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgBnD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,IAAI,cAAc,CA2DvD"}
1
+ {"version":3,"file":"process-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/runtime/process-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgBnD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,IAAI,cAAc,CAsEvD"}
@@ -46,10 +46,21 @@ function createProcessLifecycle() {
46
46
  proc.on('beforeExit', onBeforeExit);
47
47
  proc.on('SIGINT', onSigInt);
48
48
  proc.on('SIGTERM', onSigTerm);
49
+ // Windows does not emit `SIGTERM`. Register `SIGBREAK` (Ctrl+Break) as a
50
+ // best-effort fallback so `autoFlushOnExit` has a signal hook on that
51
+ // platform. In practice taskkill / OS shutdown kills without emitting any
52
+ // Node signal, so no handler can cover that path — the `beforeExit` hook
53
+ // is the only portable shutdown flush mechanism.
54
+ if (process.platform === 'win32') {
55
+ proc.on('SIGBREAK', onSigInt);
56
+ }
49
57
  return () => {
50
58
  proc.removeListener('beforeExit', onBeforeExit);
51
59
  proc.removeListener('SIGINT', onSigInt);
52
60
  proc.removeListener('SIGTERM', onSigTerm);
61
+ if (process.platform === 'win32') {
62
+ proc.removeListener('SIGBREAK', onSigInt);
63
+ }
53
64
  };
54
65
  },
55
66
  onUncaughtError(cb) {
@@ -1 +1 @@
1
- {"version":3,"file":"process-lifecycle.js","sourceRoot":"","sources":["../../../src/runtime/process-lifecycle.ts"],"names":[],"mappings":";;AA0BA,wDA2DC;AA5ED,SAAS,UAAU;IACjB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAQ,OAA4B,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;QAC7F,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,OAA0B,CAAC;AACpC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,sBAAsB;IACpC,OAAO;QACL,iBAAiB,CAAC,EAAE;YAClB,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI;gBAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;YAE3B,sEAAsE;YACtE,0EAA0E;YAC1E,0DAA0D;YAC1D,MAAM,YAAY,GAAG,GAAS,EAAE;gBAC9B,KAAK,EAAE,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,0EAA0E;YAC1E,8DAA8D;YAC9D,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAQ,EAAE;gBACtC,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;oBACtC,IAAI,CAAC;wBACH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClB,CAAC;oBAAC,MAAM,CAAC;wBACP,YAAY;oBACd,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YACF,MAAM,QAAQ,GAAG,GAAS,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,GAAS,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAE5C,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YACpC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC5B,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC9B,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBAChD,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACxC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC5C,CAAC,CAAC;QACJ,CAAC;QAED,eAAe,CAAC,EAAE;YAChB,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI;gBAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;YAE3B,0EAA0E;YAC1E,mEAAmE;YACnE,MAAM,KAAK,GAAG,CAAC,GAAY,EAAQ,EAAE;gBACnC,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;oBACzC,IAAI,CAAC;wBACH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACf,CAAC;oBAAC,MAAM,CAAC;wBACP,YAAY;oBACd,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YACF,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YACrC,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;gBAChD,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YACnD,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"process-lifecycle.js","sourceRoot":"","sources":["../../../src/runtime/process-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -33,4 +33,6 @@ export interface ClusterReceiverOptions {
33
33
  export declare function registerClusterReceiver(ingest: (entry: LogEntry) => void, options?: ClusterReceiverOptions & {
34
34
  onLevelCommand?: (level: number) => void;
35
35
  }): () => void;
36
+ /** Reset internal state for testing. */
37
+ export declare function _resetClusterReceiverState(): void;
36
38
  //# sourceMappingURL=cluster-ipc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cluster-ipc.d.ts","sourceRoot":"","sources":["../../../src/transport/cluster-ipc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAEzD,MAAM,WAAW,0BAA0B;IACzC,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,SAAS;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,OAAO,GAAE,0BAA+B;IAIpD,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAiBhD,iEAAiE;IACjE,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAatC;AAED,MAAM,WAAW,sBAAsB;IACrC,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EACjC,OAAO,GAAE,sBAAsB,GAAG;IAAE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAClF,MAAM,IAAI,CA6BZ"}
1
+ {"version":3,"file":"cluster-ipc.d.ts","sourceRoot":"","sources":["../../../src/transport/cluster-ipc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAShD,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,MAAM,WAAW,0BAA0B;IACzC,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AACD;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,SAAS;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,OAAO,GAAE,0BAA+B;IAGpD,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAkBhD,iEAAiE;IACjE,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAatC;AACD,MAAM,WAAW,sBAAsB;IACrC,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmBD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EACjC,OAAO,GAAE,sBAAsB,GAAG;IAAE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAClF,MAAM,IAAI,CA+CZ;AACD,wCAAwC;AACxC,wBAAgB,0BAA0B,IAAI,IAAI,CAKjD"}
@@ -2,7 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ClusterIpcTransport = exports.CLUSTER_IPC_CHANNEL = void 0;
4
4
  exports.registerClusterReceiver = registerClusterReceiver;
5
+ exports._resetClusterReceiverState = _resetClusterReceiverState;
5
6
  const types_js_1 = require("../types.js");
7
+ // Captured at module load so error reporting never recurses into itself.
8
+ const RAW_CONSOLE_ERROR = typeof console !== 'undefined' && typeof console.error === 'function'
9
+ ? console.error.bind(console)
10
+ : () => { };
6
11
  /** IPC channel for cluster worker → primary communication. */
7
12
  exports.CLUSTER_IPC_CHANNEL = 'lograil:cluster:log';
8
13
  /**
@@ -20,7 +25,9 @@ class ClusterIpcTransport {
20
25
  if (typeof proc.send === 'function') {
21
26
  proc.send(entry, (err) => {
22
27
  if (err) {
23
- /* primary gone or channel closed — drop silently */
28
+ // Primary gone or channel closed — surface the error so users can
29
+ // detect cluster worker communication failures.
30
+ RAW_CONSOLE_ERROR('[lograil] cluster-ipc primary unreachable:', err);
24
31
  }
25
32
  });
26
33
  }
@@ -44,6 +51,19 @@ class ClusterIpcTransport {
44
51
  }
45
52
  }
46
53
  exports.ClusterIpcTransport = ClusterIpcTransport;
54
+ /**
55
+ * Shared dedup state on globalThis so that multiple bundled copies of this
56
+ * module all share the same registration flag and callbacks.
57
+ */
58
+ const _DEDUP_CLUSTER = Symbol('lograil:cluster-ipc:dedup');
59
+ function _getClusterState() {
60
+ if (typeof globalThis !== 'undefined' && _DEDUP_CLUSTER in globalThis)
61
+ return globalThis[_DEDUP_CLUSTER];
62
+ const s = { registered: false, ingest: null, onLevelCommand: null };
63
+ if (typeof globalThis !== 'undefined')
64
+ globalThis[_DEDUP_CLUSTER] = s;
65
+ return s;
66
+ }
47
67
  /**
48
68
  * Primary-side helper: listen on the cluster IPC channel and feed received
49
69
  * worker entries into the provided `ingest` callback (typically
@@ -55,22 +75,50 @@ function registerClusterReceiver(ingest, options = {}) {
55
75
  const proc = process;
56
76
  if (!proc.on || !proc.removeListener)
57
77
  return () => { };
78
+ // Guard against duplicate registration on the same process.
79
+ // Use globalThis-based state so multiple bundled copies share the same flag.
80
+ const state = _getClusterState();
81
+ if (state.registered) {
82
+ // Update the callback so the existing handler processes new loggers
83
+ state.ingest = ingest;
84
+ state.onLevelCommand = onLevelCommand ?? null;
85
+ return () => {
86
+ if (state.ingest === ingest) {
87
+ state.ingest = null;
88
+ state.onLevelCommand = null;
89
+ }
90
+ };
91
+ }
92
+ state.registered = true;
93
+ state.ingest = ingest;
94
+ state.onLevelCommand = onLevelCommand ?? null;
58
95
  const handler = (message) => {
59
- if ((0, types_js_1.isLogLevelCommand)(message)) {
60
- onLevelCommand?.((0, types_js_1.normalizeLevel)(message.level));
96
+ if (state.onLevelCommand && (0, types_js_1.isLogLevelCommand)(message)) {
97
+ state.onLevelCommand((0, types_js_1.normalizeLevel)(message.level));
61
98
  return;
62
99
  }
63
- if (message &&
100
+ if (state.ingest &&
101
+ message &&
64
102
  typeof message === 'object' &&
65
103
  'level' in message &&
66
104
  'message' in message &&
67
105
  'timestamp' in message) {
68
- ingest(message);
106
+ state.ingest(message);
69
107
  }
70
108
  };
71
109
  proc.on('message', handler);
72
110
  return () => {
111
+ state.registered = false;
112
+ state.ingest = null;
113
+ state.onLevelCommand = null;
73
114
  proc.removeListener?.('message', handler);
74
115
  };
75
116
  }
117
+ /** Reset internal state for testing. */
118
+ function _resetClusterReceiverState() {
119
+ const state = _getClusterState();
120
+ state.registered = false;
121
+ state.ingest = null;
122
+ state.onLevelCommand = null;
123
+ }
76
124
  //# sourceMappingURL=cluster-ipc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cluster-ipc.js","sourceRoot":"","sources":["../../../src/transport/cluster-ipc.ts"],"names":[],"mappings":";;;AAuEA,0DAgCC;AApGD,0CAAgE;AAEhE,8DAA8D;AACjD,QAAA,mBAAmB,GAAG,qBAAqB,CAAC;AASzD;;;;GAIG;AACH,MAAa,mBAAmB;IAG9B,YAAY,UAAsC,EAAE;QAClD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,aAAa,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,KAAe,EAAE,UAAkB;QACvC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAEZ,CAAC;YACF,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE;oBAC/B,IAAI,GAAG,EAAE,CAAC;wBACR,oDAAoD;oBACtD,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,gBAAgB,CAAC,KAAa;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAEZ,CAAC;YACF,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACpC,MAAM,GAAG,GAAoB,EAAE,YAAY,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;gBACzF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;CACF;AAtCD,kDAsCC;AAOD;;;;;GAKG;AACH,SAAgB,uBAAuB,CACrC,MAAiC,EACjC,UAAiF,EAAE;IAEnF,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC9C,MAAM,IAAI,GAAG,OAGZ,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAQ,EAAE;QACzC,IAAI,IAAA,4BAAiB,EAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,cAAc,EAAE,CAAC,IAAA,yBAAc,EAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QACD,IACE,OAAO;YACP,OAAO,OAAO,KAAK,QAAQ;YAC3B,OAAO,IAAI,OAAO;YAClB,SAAS,IAAI,OAAO;YACpB,WAAW,IAAI,OAAO,EACtB,CAAC;YACD,MAAM,CAAC,OAAmB,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"cluster-ipc.js","sourceRoot":"","sources":["../../../src/transport/cluster-ipc.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../../src/transport/console.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAchD,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;IAClE;;;;;OAKG;IACH,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,SAAS;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B,OAAO,CAAC,SAAS,CAA+C;gBAEpD,OAAO,GAAE,uBAA4B;IAsBjD,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAIhD"}
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../../src/transport/console.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAwBhD,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;IAClE;;;;;OAKG;IACH,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,SAAS;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B,OAAO,CAAC,SAAS,CAA+C;gBAEpD,OAAO,GAAE,uBAA4B;IAiBjD,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAIhD"}
@@ -13,6 +13,15 @@ const realConsole = {
13
13
  error: console.error.bind(console),
14
14
  log: console.log.bind(console),
15
15
  };
16
+ /** Default method mapping shared across all ConsoleTransport instances. */
17
+ const DEFAULT_METHOD_MAP = {
18
+ trace: realConsole.trace,
19
+ debug: realConsole.debug,
20
+ info: realConsole.info,
21
+ warn: realConsole.warn,
22
+ error: realConsole.error,
23
+ fatal: realConsole.error,
24
+ };
16
25
  /**
17
26
  * Writes log entries to the global `console`. Suitable for both Web and
18
27
  * Node/Electron runtimes.
@@ -21,15 +30,7 @@ class ConsoleTransport {
21
30
  constructor(options = {}) {
22
31
  this.name = options.name ?? 'console';
23
32
  this.formatter = options.formatter ?? (0, formatter_js_1.createLineFormatter)();
24
- this.methodMap = {
25
- trace: realConsole.trace,
26
- debug: realConsole.debug,
27
- info: realConsole.info,
28
- warn: realConsole.warn,
29
- error: realConsole.error,
30
- fatal: realConsole.error,
31
- ...options.methodMap,
32
- };
33
+ this.methodMap = { ...DEFAULT_METHOD_MAP, ...options.methodMap };
33
34
  // Route the requested levels to stderr (console.error). Applied after
34
35
  // `methodMap` so an explicitly provided method for a level is not silently
35
36
  // overridden. Defaults to empty — the default `methodMap` already sends
@@ -1 +1 @@
1
- {"version":3,"file":"console.js","sourceRoot":"","sources":["../../../src/transport/console.ts"],"names":[],"mappings":";;;AAEA,2DAA+D;AAG/D,8EAA8E;AAC9E,4EAA4E;AAC5E,sEAAsE;AACtE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IAClC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAChC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IAClC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;CAC/B,CAAC;AAgBF;;;GAGG;AACH,MAAa,gBAAgB;IAM3B,YAAY,UAAmC,EAAE;QAC/C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAA,kCAAmB,GAAE,CAAC;QAC5D,IAAI,CAAC,SAAS,GAAG;YACf,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,GAAG,OAAO,CAAC,SAAS;SACrB,CAAC;QACF,sEAAsE;QACtE,2EAA2E;QAC3E,wEAAwE;QACxE,2EAA2E;QAC3E,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;QAChD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAe,EAAE,SAAiB;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC;QAC9D,EAAE,CAAC,SAAS,CAAC,CAAC;IAChB,CAAC;CACF;AAhCD,4CAgCC"}
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../../src/transport/console.ts"],"names":[],"mappings":";;;AAEA,2DAA+D;AAG/D,8EAA8E;AAC9E,4EAA4E;AAC5E,sEAAsE;AACtE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IAClC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAChC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IAClC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;CAC/B,CAAC;AAEF,2EAA2E;AAC3E,MAAM,kBAAkB,GAAiD;IACvE,KAAK,EAAE,WAAW,CAAC,KAAK;IACxB,KAAK,EAAE,WAAW,CAAC,KAAK;IACxB,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,KAAK,EAAE,WAAW,CAAC,KAAK;IACxB,KAAK,EAAE,WAAW,CAAC,KAAK;CACzB,CAAC;AAgBF;;;GAGG;AACH,MAAa,gBAAgB;IAM3B,YAAY,UAAmC,EAAE;QAC/C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAA,kCAAmB,GAAE,CAAC;QAC5D,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,kBAAkB,EAAE,GAAG,OAAO,CAAC,SAAS,EAG7D,CAAC;QACF,sEAAsE;QACtE,2EAA2E;QAC3E,wEAAwE;QACxE,2EAA2E;QAC3E,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;QAChD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAe,EAAE,SAAiB;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC;QAC9D,EAAE,CAAC,SAAS,CAAC,CAAC;IAChB,CAAC;CACF;AA3BD,4CA2BC"}
@@ -1,21 +1,8 @@
1
1
  import type { LogEntry } from '../types.js';
2
2
  import type { Transport } from './transport.js';
3
3
  import type { IpcRenderer } from 'electron';
4
- /** Minimal view of `IpcRenderer` the transport actually needs. */
4
+ /** Minimal view of "IpcRenderer" the transport actually needs. */
5
5
  type IpcSender = Pick<IpcRenderer, 'send'>;
6
- /** Shape we probe for at runtime to enable the zero-copy transfer path. */
7
- type IpcZeroCopySender = IpcSender & {
8
- postMessage?: (channel: string, message: unknown, transfer?: unknown[]) => void;
9
- };
10
- /**
11
- * Serialize an entry to an `ArrayBuffer` (UTF-8 JSON). The returned buffer is
12
- * transferable: hand it to `postMessage(channel, buffer, [buffer])` so the
13
- * underlying memory is moved across the process boundary instead of being
14
- * structured-cloned (copied) by Electron.
15
- */
16
- export declare function encodeEntry(entry: LogEntry): ArrayBuffer;
17
- /** Inverse of {@link encodeEntry}. */
18
- export declare function decodeEntry(buffer: ArrayBuffer | Uint8Array): LogEntry;
19
6
  export declare const LOGRAIL_CHANNEL = "lograil:log";
20
7
  /**
21
8
  * Metadata key (on `LogEntry.metadata`) used to mark entries that originated
@@ -34,13 +21,13 @@ export interface ElectronIpcTransportOptions {
34
21
  * `contextIsolation: true`): pass the `ipcRenderer` obtained from a preload
35
22
  * bridge instead of letting the transport call `require('electron')`.
36
23
  */
37
- ipcRenderer?: IpcZeroCopySender;
24
+ ipcRenderer?: IpcSender;
38
25
  }
39
26
  /**
40
27
  * Renderer-side transport. Forwards each log entry to the Electron main
41
28
  * process over IPC, where it is persisted by the main logger (the renderer
42
- * itself has no filesystem access). The `electron` module is required lazily
43
- * so this file is safe to import in non-Electron environments.
29
+ * itself has no filesystem access). Uses structured cloning via
30
+ * `ipcRenderer.send()`.
44
31
  */
45
32
  export declare class ElectronIpcTransport implements Transport {
46
33
  readonly name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"electron-ipc.d.ts","sourceRoot":"","sources":["../../../src/transport/electron-ipc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAS5C,kEAAkE;AAClE,KAAK,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAE3C,2EAA2E;AAC3E,KAAK,iBAAiB,GAAG,SAAS,GAAG;IACnC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACjF,CAAC;AAMF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,CAExD;AAED,sCAAsC;AACtC,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,CAGtE;AAED,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAE1D,MAAM,WAAW,2BAA2B;IAC1C,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAED;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,SAAS;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,OAAO,CAAC,WAAW,CAAC,CAAoB;IACxC,OAAO,CAAC,WAAW,CAAC,CAAY;gBAEpB,OAAO,GAAE,2BAAgC;IAMrD,OAAO,CAAC,MAAM;IAYd,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAoBhD,8DAA8D;IAC9D,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAgBtC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EACjC,OAAO,GAAE,kBAAkB,GAAG;IAAE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAC9E,MAAM,IAAI,CAsCZ"}
1
+ {"version":3,"file":"electron-ipc.d.ts","sourceRoot":"","sources":["../../../src/transport/electron-ipc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAS5C,kEAAkE;AAClE,KAAK,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAE3C,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAE1D,MAAM,WAAW,2BAA2B;IAC1C,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,SAAS;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,OAAO,CAAC,WAAW,CAAC,CAAY;IAChC,OAAO,CAAC,WAAW,CAAC,CAAY;gBAEpB,OAAO,GAAE,2BAAgC;IAMrD,OAAO,CAAC,MAAM;IAYd,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAWhD,8DAA8D;IAC9D,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAUtC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAeD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EACjC,OAAO,GAAE,kBAAkB,GAAG;IAAE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAC9E,MAAM,IAAI,CA+BZ"}
@@ -1,8 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ElectronIpcTransport = exports.RENDERER_PROCESS_MARKER = exports.LOGRAIL_CHANNEL = void 0;
4
- exports.encodeEntry = encodeEntry;
5
- exports.decodeEntry = decodeEntry;
6
4
  exports.registerIpcReceiver = registerIpcReceiver;
7
5
  const types_js_1 = require("../types.js");
8
6
  const electron_binding_js_1 = require("../runtime/electron-binding.js");
@@ -10,23 +8,6 @@ const electron_binding_js_1 = require("../runtime/electron-binding.js");
10
8
  const RAW_CONSOLE_ERROR = typeof console !== 'undefined' && typeof console.error === 'function'
11
9
  ? console.error.bind(console)
12
10
  : () => { };
13
- // Reused across calls so we don't allocate an encoder/decoder per log line.
14
- const encoder = new TextEncoder();
15
- const decoder = new TextDecoder();
16
- /**
17
- * Serialize an entry to an `ArrayBuffer` (UTF-8 JSON). The returned buffer is
18
- * transferable: hand it to `postMessage(channel, buffer, [buffer])` so the
19
- * underlying memory is moved across the process boundary instead of being
20
- * structured-cloned (copied) by Electron.
21
- */
22
- function encodeEntry(entry) {
23
- return encoder.encode(JSON.stringify(entry)).buffer;
24
- }
25
- /** Inverse of {@link encodeEntry}. */
26
- function decodeEntry(buffer) {
27
- const bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
28
- return JSON.parse(decoder.decode(bytes));
29
- }
30
11
  exports.LOGRAIL_CHANNEL = 'lograil:log';
31
12
  /**
32
13
  * Metadata key (on `LogEntry.metadata`) used to mark entries that originated
@@ -37,8 +18,8 @@ exports.RENDERER_PROCESS_MARKER = '__lograilProcess';
37
18
  /**
38
19
  * Renderer-side transport. Forwards each log entry to the Electron main
39
20
  * process over IPC, where it is persisted by the main logger (the renderer
40
- * itself has no filesystem access). The `electron` module is required lazily
41
- * so this file is safe to import in non-Electron environments.
21
+ * itself has no filesystem access). Uses structured cloning via
22
+ * `ipcRenderer.send()`.
42
23
  */
43
24
  class ElectronIpcTransport {
44
25
  constructor(options = {}) {
@@ -64,20 +45,10 @@ class ElectronIpcTransport {
64
45
  if (!ipc)
65
46
  return;
66
47
  try {
67
- const sender = ipc;
68
- if (typeof sender.postMessage === 'function') {
69
- // Zero-copy path: serialize once, then transfer the buffer's ownership
70
- // across the process boundary (no structured-clone of the object graph).
71
- const buf = encodeEntry(entry);
72
- sender.postMessage(this.channel, buf, [buf]);
73
- }
74
- else {
75
- // Fallback: Electron structured-clones the whole entry object.
76
- ipc.send(this.channel, entry);
77
- }
48
+ ipc.send(this.channel, entry);
78
49
  }
79
50
  catch (err) {
80
- // Report IPC failure so users can diagnose renderer main delivery issues.
51
+ // Report IPC failure so users can diagnose renderer -> main delivery issues.
81
52
  RAW_CONSOLE_ERROR(`[lograil] ipc transport (${this.name}) send failed:`, err);
82
53
  }
83
54
  }
@@ -88,21 +59,28 @@ class ElectronIpcTransport {
88
59
  return;
89
60
  const cmd = { __lograilCmd: true, __lograilCmdType: 'setLevel', level };
90
61
  try {
91
- const sender = ipc;
92
- if (typeof sender.postMessage === 'function') {
93
- const buf = encoder.encode(JSON.stringify(cmd)).buffer;
94
- sender.postMessage(this.channel, buf, [buf]);
95
- }
96
- else {
97
- ipc.send(this.channel, cmd);
98
- }
62
+ ipc.send(this.channel, cmd);
99
63
  }
100
64
  catch {
101
- /* silently drop command loss is not fatal */
65
+ /* silently drop - command loss is not fatal */
102
66
  }
103
67
  }
104
68
  }
105
69
  exports.ElectronIpcTransport = ElectronIpcTransport;
70
+ /**
71
+ * Shared dedup state on globalThis so that multiple bundled copies of this
72
+ * module (e.g. from node_modules hoisting or chunk splitting) all share the
73
+ * same registration set instead of each keeping their own independent one.
74
+ */
75
+ const _DEDUP_ELECTRON = Symbol('lograil:electron-ipc:dedup');
76
+ function _getRegisteredChannels() {
77
+ if (typeof globalThis !== 'undefined' && _DEDUP_ELECTRON in globalThis)
78
+ return globalThis[_DEDUP_ELECTRON];
79
+ const s = new Set();
80
+ if (typeof globalThis !== 'undefined')
81
+ globalThis[_DEDUP_ELECTRON] = s;
82
+ return s;
83
+ }
106
84
  /**
107
85
  * Main-side helper: listen on the IPC channel and feed received renderer
108
86
  * entries into the provided `ingest` callback (typically `logger.ingestEntry`).
@@ -115,39 +93,30 @@ function registerIpcReceiver(ingest, options = {}) {
115
93
  // `electron` is only present in a main process; resolve it lazily.
116
94
  const ipcMain = (0, electron_binding_js_1.getElectron)().ipcMain;
117
95
  const handler = (_event, payload) => {
118
- if (payload instanceof ArrayBuffer || payload instanceof Uint8Array) {
119
- // Zero-copy transfer path
120
- try {
121
- const decoded = JSON.parse(decoder.decode(payload));
122
- if ((0, types_js_1.isLogLevelCommand)(decoded)) {
123
- onLevelCommand?.((0, types_js_1.normalizeLevel)(decoded.level));
124
- return;
125
- }
126
- const entry = decoded;
127
- ingest({
128
- ...entry,
129
- metadata: { ...entry.metadata, [exports.RENDERER_PROCESS_MARKER]: 'renderer' },
130
- });
131
- }
132
- catch {
133
- return;
134
- }
135
- }
136
- else {
137
- const data = payload;
138
- if ((0, types_js_1.isLogLevelCommand)(data)) {
139
- onLevelCommand?.((0, types_js_1.normalizeLevel)(data.level));
140
- return;
141
- }
142
- const entry = data;
143
- // Copy-on-write: mark renderer-origin without mutating a shared/frozen entry.
144
- ingest({
145
- ...entry,
146
- metadata: { ...entry.metadata, [exports.RENDERER_PROCESS_MARKER]: 'renderer' },
147
- });
96
+ const data = payload;
97
+ if ((0, types_js_1.isLogLevelCommand)(data)) {
98
+ onLevelCommand?.((0, types_js_1.normalizeLevel)(data.level));
99
+ return;
148
100
  }
101
+ const entry = data;
102
+ // Copy-on-write: mark renderer-origin without mutating a shared/frozen entry.
103
+ ingest({
104
+ ...entry,
105
+ metadata: { ...entry.metadata, [exports.RENDERER_PROCESS_MARKER]: 'renderer' },
106
+ });
149
107
  };
108
+ // Guard against duplicate registration: if this channel is already tracked,
109
+ // do not add another handler (multiple loggers on the same channel would
110
+ // cause each IPC message to be processed once per logger).
111
+ const registeredChannels = _getRegisteredChannels();
112
+ if (registeredChannels.has(channel)) {
113
+ return () => { };
114
+ }
115
+ registeredChannels.add(channel);
150
116
  ipcMain.on(channel, handler);
151
- return () => ipcMain.removeListener(channel, handler);
117
+ return () => {
118
+ registeredChannels.delete(channel);
119
+ ipcMain.removeListener(channel, handler);
120
+ };
152
121
  }
153
122
  //# sourceMappingURL=electron-ipc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"electron-ipc.js","sourceRoot":"","sources":["../../../src/transport/electron-ipc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"electron-ipc.js","sourceRoot":"","sources":["../../../src/transport/electron-ipc.ts"],"names":[],"mappings":"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"}
@@ -142,6 +142,8 @@ export declare class FileTransport implements Transport {
142
142
  readonly name: string;
143
143
  readonly formatter: Formatter;
144
144
  readonly filter?: (entry: LogEntry) => boolean;
145
+ /** Optional error hook, forwarded to the pipeline's global `onLoggerError`. */
146
+ onError?(err: unknown, entry: LogEntry): void;
145
147
  /** Effective capacity limits, for diagnostics (e.g. "why was my log file
146
148
  * deleted?"). `maxSize`/`maxFiles` reflect the active rotation mode;
147
149
  * `maxTotalSize`/`maxAge` are the global caps (`Infinity`/`-1` = unset). */
@@ -163,7 +165,6 @@ export declare class FileTransport implements Transport {
163
165
  private readonly owned;
164
166
  private readonly createdAt;
165
167
  private closed;
166
- private reportedFirstError;
167
168
  private handle;
168
169
  private queue;
169
170
  private ownedScanned;
@@ -171,6 +172,7 @@ export declare class FileTransport implements Transport {
171
172
  private static readonly PERIODIC_INTERVAL_MS;
172
173
  private writeCount;
173
174
  private lastCheckMs;
175
+ private _lastWrittenEntry;
174
176
  constructor(options: FileTransportOptions);
175
177
  /** Absolute path of the log directory. */
176
178
  getDir(): string;