lograil 0.1.0 → 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 (149) hide show
  1. package/CHANGELOG.md +105 -1
  2. package/README.md +3 -1
  3. package/dist/cjs/context/async-context.browser.d.ts +1 -7
  4. package/dist/cjs/context/async-context.browser.d.ts.map +1 -1
  5. package/dist/cjs/context/async-context.browser.js +4 -1
  6. package/dist/cjs/context/async-context.browser.js.map +1 -1
  7. package/dist/cjs/context/context.js +1 -1
  8. package/dist/cjs/context/context.js.map +1 -1
  9. package/dist/cjs/core/logger.d.ts +20 -16
  10. package/dist/cjs/core/logger.d.ts.map +1 -1
  11. package/dist/cjs/core/logger.js +115 -48
  12. package/dist/cjs/core/logger.js.map +1 -1
  13. package/dist/cjs/pipeline/formatter.d.ts.map +1 -1
  14. package/dist/cjs/pipeline/formatter.js +64 -31
  15. package/dist/cjs/pipeline/formatter.js.map +1 -1
  16. package/dist/cjs/pipeline/pipeline.d.ts.map +1 -1
  17. package/dist/cjs/pipeline/pipeline.js +2 -1
  18. package/dist/cjs/pipeline/pipeline.js.map +1 -1
  19. package/dist/cjs/pipeline/processor.d.ts.map +1 -1
  20. package/dist/cjs/pipeline/processor.js +18 -6
  21. package/dist/cjs/pipeline/processor.js.map +1 -1
  22. package/dist/cjs/pipeline/sampler.d.ts.map +1 -1
  23. package/dist/cjs/pipeline/sampler.js +5 -0
  24. package/dist/cjs/pipeline/sampler.js.map +1 -1
  25. package/dist/cjs/plugin/manager.d.ts.map +1 -1
  26. package/dist/cjs/plugin/manager.js +9 -1
  27. package/dist/cjs/plugin/manager.js.map +1 -1
  28. package/dist/cjs/plugin/otel-trace.d.ts.map +1 -1
  29. package/dist/cjs/plugin/otel-trace.js +4 -7
  30. package/dist/cjs/plugin/otel-trace.js.map +1 -1
  31. package/dist/cjs/runtime/electron-binding.d.ts +4 -0
  32. package/dist/cjs/runtime/electron-binding.d.ts.map +1 -1
  33. package/dist/cjs/runtime/electron-binding.js +24 -2
  34. package/dist/cjs/runtime/electron-binding.js.map +1 -1
  35. package/dist/cjs/runtime/electron.d.ts.map +1 -1
  36. package/dist/cjs/runtime/electron.js +7 -1
  37. package/dist/cjs/runtime/electron.js.map +1 -1
  38. package/dist/cjs/runtime/process-lifecycle.d.ts.map +1 -1
  39. package/dist/cjs/runtime/process-lifecycle.js +11 -0
  40. package/dist/cjs/runtime/process-lifecycle.js.map +1 -1
  41. package/dist/cjs/transport/cluster-ipc.d.ts +2 -0
  42. package/dist/cjs/transport/cluster-ipc.d.ts.map +1 -1
  43. package/dist/cjs/transport/cluster-ipc.js +53 -5
  44. package/dist/cjs/transport/cluster-ipc.js.map +1 -1
  45. package/dist/cjs/transport/console.d.ts.map +1 -1
  46. package/dist/cjs/transport/console.js +10 -9
  47. package/dist/cjs/transport/console.js.map +1 -1
  48. package/dist/cjs/transport/electron-ipc.d.ts +4 -17
  49. package/dist/cjs/transport/electron-ipc.d.ts.map +1 -1
  50. package/dist/cjs/transport/electron-ipc.js +42 -73
  51. package/dist/cjs/transport/electron-ipc.js.map +1 -1
  52. package/dist/cjs/transport/file.d.ts +10 -4
  53. package/dist/cjs/transport/file.d.ts.map +1 -1
  54. package/dist/cjs/transport/file.js +28 -8
  55. package/dist/cjs/transport/file.js.map +1 -1
  56. package/dist/cjs/transport/live.d.ts +2 -1
  57. package/dist/cjs/transport/live.d.ts.map +1 -1
  58. package/dist/cjs/transport/live.js +4 -1
  59. package/dist/cjs/transport/live.js.map +1 -1
  60. package/dist/cjs/transport/otlp.d.ts +1 -1
  61. package/dist/cjs/transport/otlp.d.ts.map +1 -1
  62. package/dist/cjs/transport/otlp.js +24 -21
  63. package/dist/cjs/transport/otlp.js.map +1 -1
  64. package/dist/cjs/transport/worker-ipc.d.ts +3 -0
  65. package/dist/cjs/transport/worker-ipc.d.ts.map +1 -1
  66. package/dist/cjs/transport/worker-ipc.js +76 -8
  67. package/dist/cjs/transport/worker-ipc.js.map +1 -1
  68. package/dist/cjs/types.d.ts +16 -5
  69. package/dist/cjs/types.d.ts.map +1 -1
  70. package/dist/cjs/types.js +5 -1
  71. package/dist/cjs/types.js.map +1 -1
  72. package/dist/esm/context/async-context.browser.d.ts +1 -7
  73. package/dist/esm/context/async-context.browser.d.ts.map +1 -1
  74. package/dist/esm/context/async-context.browser.js +4 -1
  75. package/dist/esm/context/async-context.browser.js.map +1 -1
  76. package/dist/esm/context/context.js +1 -1
  77. package/dist/esm/context/context.js.map +1 -1
  78. package/dist/esm/core/logger.d.ts +20 -16
  79. package/dist/esm/core/logger.d.ts.map +1 -1
  80. package/dist/esm/core/logger.js +115 -48
  81. package/dist/esm/core/logger.js.map +1 -1
  82. package/dist/esm/pipeline/formatter.d.ts.map +1 -1
  83. package/dist/esm/pipeline/formatter.js +64 -31
  84. package/dist/esm/pipeline/formatter.js.map +1 -1
  85. package/dist/esm/pipeline/pipeline.d.ts.map +1 -1
  86. package/dist/esm/pipeline/pipeline.js +2 -1
  87. package/dist/esm/pipeline/pipeline.js.map +1 -1
  88. package/dist/esm/pipeline/processor.d.ts.map +1 -1
  89. package/dist/esm/pipeline/processor.js +18 -6
  90. package/dist/esm/pipeline/processor.js.map +1 -1
  91. package/dist/esm/pipeline/sampler.d.ts.map +1 -1
  92. package/dist/esm/pipeline/sampler.js +5 -0
  93. package/dist/esm/pipeline/sampler.js.map +1 -1
  94. package/dist/esm/plugin/manager.d.ts.map +1 -1
  95. package/dist/esm/plugin/manager.js +9 -1
  96. package/dist/esm/plugin/manager.js.map +1 -1
  97. package/dist/esm/plugin/otel-trace.d.ts.map +1 -1
  98. package/dist/esm/plugin/otel-trace.js +4 -7
  99. package/dist/esm/plugin/otel-trace.js.map +1 -1
  100. package/dist/esm/runtime/electron-binding.d.ts +4 -0
  101. package/dist/esm/runtime/electron-binding.d.ts.map +1 -1
  102. package/dist/esm/runtime/electron-binding.js +24 -2
  103. package/dist/esm/runtime/electron-binding.js.map +1 -1
  104. package/dist/esm/runtime/electron.d.ts.map +1 -1
  105. package/dist/esm/runtime/electron.js +7 -1
  106. package/dist/esm/runtime/electron.js.map +1 -1
  107. package/dist/esm/runtime/process-lifecycle.d.ts.map +1 -1
  108. package/dist/esm/runtime/process-lifecycle.js +11 -0
  109. package/dist/esm/runtime/process-lifecycle.js.map +1 -1
  110. package/dist/esm/transport/cluster-ipc.d.ts +2 -0
  111. package/dist/esm/transport/cluster-ipc.d.ts.map +1 -1
  112. package/dist/esm/transport/cluster-ipc.js +52 -5
  113. package/dist/esm/transport/cluster-ipc.js.map +1 -1
  114. package/dist/esm/transport/console.d.ts.map +1 -1
  115. package/dist/esm/transport/console.js +10 -9
  116. package/dist/esm/transport/console.js.map +1 -1
  117. package/dist/esm/transport/electron-ipc.d.ts +4 -17
  118. package/dist/esm/transport/electron-ipc.d.ts.map +1 -1
  119. package/dist/esm/transport/electron-ipc.js +42 -71
  120. package/dist/esm/transport/electron-ipc.js.map +1 -1
  121. package/dist/esm/transport/file.d.ts +10 -4
  122. package/dist/esm/transport/file.d.ts.map +1 -1
  123. package/dist/esm/transport/file.js +28 -8
  124. package/dist/esm/transport/file.js.map +1 -1
  125. package/dist/esm/transport/live.d.ts +2 -1
  126. package/dist/esm/transport/live.d.ts.map +1 -1
  127. package/dist/esm/transport/live.js +4 -1
  128. package/dist/esm/transport/live.js.map +1 -1
  129. package/dist/esm/transport/otlp.d.ts +1 -1
  130. package/dist/esm/transport/otlp.d.ts.map +1 -1
  131. package/dist/esm/transport/otlp.js +24 -21
  132. package/dist/esm/transport/otlp.js.map +1 -1
  133. package/dist/esm/transport/worker-ipc.d.ts +3 -0
  134. package/dist/esm/transport/worker-ipc.d.ts.map +1 -1
  135. package/dist/esm/transport/worker-ipc.js +75 -8
  136. package/dist/esm/transport/worker-ipc.js.map +1 -1
  137. package/dist/esm/types.d.ts +16 -5
  138. package/dist/esm/types.d.ts.map +1 -1
  139. package/dist/esm/types.js +5 -1
  140. package/dist/esm/types.js.map +1 -1
  141. package/package.json +12 -3
  142. package/dist/cjs/transport/rotating-file.d.ts +0 -67
  143. package/dist/cjs/transport/rotating-file.d.ts.map +0 -1
  144. package/dist/cjs/transport/rotating-file.js +0 -179
  145. package/dist/cjs/transport/rotating-file.js.map +0 -1
  146. package/dist/esm/transport/rotating-file.d.ts +0 -67
  147. package/dist/esm/transport/rotating-file.d.ts.map +0 -1
  148. package/dist/esm/transport/rotating-file.js +0 -175
  149. package/dist/esm/transport/rotating-file.js.map +0 -1
@@ -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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"}
@@ -53,7 +53,8 @@ export interface RotateSizeOptions extends FileBaseOptions {
53
53
  mode: 'rotate-size';
54
54
  /** Size in bytes that triggers a rotation. */
55
55
  maxSize: number;
56
- /** Number of generations to keep (active file + N-1 backups). */
56
+ /** Number of generations to keep (active file + N-1 backups). `1` keeps only
57
+ * the active file; `<=0` disables generation trimming. */
57
58
  maxFiles: number;
58
59
  }
59
60
  /** 2.2 — roll by time (hour or day), naming each file with a timestamp. */
@@ -63,7 +64,8 @@ export interface RotateTimeOptions extends FileBaseOptions {
63
64
  unit: 'hour' | 'day';
64
65
  /** Number of time buckets (stamps) to keep. When a bucket contains
65
66
  * multiple seq files (via `maxSize`), the entire bucket is kept or
66
- * deleted as a unit. Omit = unbounded. */
67
+ * deleted as a unit. `1` keeps only the newest bucket; `<=0` (or omitted)
68
+ * means unbounded. */
67
69
  maxFiles?: number;
68
70
  /**
69
71
  * Max bytes per time bucket. When the active file within the same time
@@ -97,7 +99,8 @@ export interface RotateCustomOptions extends FileBaseOptions {
97
99
  shouldRotate: (entry: LogEntry, ctx: RotateContext) => boolean;
98
100
  /** Name the seq-th file. Required (no sensible default for custom). */
99
101
  fileName: (app: string, seq: number, ext: string) => string;
100
- /** Max number of files to keep. Omit = unbounded. */
102
+ /** Max number of files to keep. `1` keeps only the active file; `<=0` (or
103
+ * omitted) means unbounded. */
101
104
  maxFiles?: number;
102
105
  }
103
106
  export type FileTransportOptions = SingleAppendOptions | SingleTruncateOptions | RotateSizeOptions | RotateTimeOptions | RotateCustomOptions;
@@ -139,6 +142,8 @@ export declare class FileTransport implements Transport {
139
142
  readonly name: string;
140
143
  readonly formatter: Formatter;
141
144
  readonly filter?: (entry: LogEntry) => boolean;
145
+ /** Optional error hook, forwarded to the pipeline's global `onLoggerError`. */
146
+ onError?(err: unknown, entry: LogEntry): void;
142
147
  /** Effective capacity limits, for diagnostics (e.g. "why was my log file
143
148
  * deleted?"). `maxSize`/`maxFiles` reflect the active rotation mode;
144
149
  * `maxTotalSize`/`maxAge` are the global caps (`Infinity`/`-1` = unset). */
@@ -160,7 +165,6 @@ export declare class FileTransport implements Transport {
160
165
  private readonly owned;
161
166
  private readonly createdAt;
162
167
  private closed;
163
- private reportedFirstError;
164
168
  private handle;
165
169
  private queue;
166
170
  private ownedScanned;
@@ -168,6 +172,7 @@ export declare class FileTransport implements Transport {
168
172
  private static readonly PERIODIC_INTERVAL_MS;
169
173
  private writeCount;
170
174
  private lastCheckMs;
175
+ private _lastWrittenEntry;
171
176
  constructor(options: FileTransportOptions);
172
177
  /** Absolute path of the log directory. */
173
178
  getDir(): string;
@@ -183,6 +188,7 @@ export declare class FileTransport implements Transport {
183
188
  private ensureHandle;
184
189
  private scanOwned;
185
190
  private closeHandle;
191
+ private getActiveSize;
186
192
  write(entry: LogEntry, formatted: string): void | Promise<void>;
187
193
  flush(): Promise<void>;
188
194
  close(): Promise<void>;