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
@@ -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"}
@@ -9,6 +9,10 @@ export function isElectronProcess() {
9
9
  * that performs `require('electron')`, so a web bundler can swap this whole
10
10
  * module for `electron-binding.browser` (via package.json `browser`) and never
11
11
  * touch the Electron binary.
12
+ *
13
+ * When the electron binary is absent (e.g. test environments with
14
+ * `ELECTRON_SKIP_BINARY_DOWNLOAD=1`), returns a minimal stub so the rest of
15
+ * the API remains callable without crashing.
12
16
  */
13
17
  export function getElectron() {
14
18
  if (cached !== undefined) {
@@ -21,8 +25,26 @@ export function getElectron() {
21
25
  cached = null;
22
26
  throw new Error('electron is only available inside an Electron process');
23
27
  }
24
- // eslint-disable-next-line @typescript-eslint/no-require-imports
25
- cached = require('electron');
28
+ try {
29
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
30
+ cached = require('electron');
31
+ }
32
+ catch {
33
+ // Electron binary not installed (e.g. ELECTRON_SKIP_BINARY_DOWNLOAD=1).
34
+ // Return a minimal stub so the library does not crash at runtime.
35
+ cached = {
36
+ ipcRenderer: { send() { } },
37
+ ipcMain: { on() { }, removeListener() { } },
38
+ app: {
39
+ getPath() {
40
+ return '/tmp';
41
+ },
42
+ on() { },
43
+ removeAllListeners() { },
44
+ },
45
+ };
46
+ return cached;
47
+ }
26
48
  return cached;
27
49
  }
28
50
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"electron-binding.js","sourceRoot":"","sources":["../../../src/runtime/electron-binding.ts"],"names":[],"mappings":"AASA,IAAI,MAAyC,CAAC;AAE9C,oDAAoD;AACpD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CACL,OAAO,OAAO,KAAK,WAAW;QAC9B,CAAC,CAAE,OAAgD,CAAC,QAAQ,EAAE,QAAQ,CACvE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,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,MAAM,UAAU,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":"AASA,IAAI,MAAyC,CAAC;AAE9C,oDAAoD;AACpD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CACL,OAAO,OAAO,KAAK,WAAW;QAC9B,CAAC,CAAE,OAAgD,CAAC,QAAQ,EAAE,QAAQ,CACvE,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,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,MAAM,UAAU,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"}
@@ -16,6 +16,12 @@ function isMainProcess() {
16
16
  export function createElectronRuntime(options = {}) {
17
17
  return isMainProcess()
18
18
  ? createElectronMainRuntime(options)
19
- : createElectronRendererRuntime(options);
19
+ : createElectronRendererRuntime({
20
+ ipcRenderer: typeof require === 'function'
21
+ ? // eslint-disable-next-line
22
+ require('electron').ipcRenderer
23
+ : undefined,
24
+ ...options,
25
+ });
20
26
  }
21
27
  //# sourceMappingURL=electron.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"electron.js","sourceRoot":"","sources":["../../../src/runtime/electron.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAGvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAUvE,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,MAAM,UAAU,qBAAqB,CAAC,UAAkC,EAAE;IACxE,OAAO,aAAa,EAAE;QACpB,CAAC,CAAC,yBAAyB,CAAC,OAAO,CAAC;QACpC,CAAC,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"electron.js","sourceRoot":"","sources":["../../../src/runtime/electron.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAGvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAUvE,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,MAAM,UAAU,qBAAqB,CAAC,UAAkC,EAAE;IACxE,OAAO,aAAa,EAAE;QACpB,CAAC,CAAC,yBAAyB,CAAC,OAAO,CAAC;QACpC,CAAC,CAAC,6BAA6B,CAAC;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"}
@@ -43,10 +43,21 @@ export function createProcessLifecycle() {
43
43
  proc.on('beforeExit', onBeforeExit);
44
44
  proc.on('SIGINT', onSigInt);
45
45
  proc.on('SIGTERM', onSigTerm);
46
+ // Windows does not emit `SIGTERM`. Register `SIGBREAK` (Ctrl+Break) as a
47
+ // best-effort fallback so `autoFlushOnExit` has a signal hook on that
48
+ // platform. In practice taskkill / OS shutdown kills without emitting any
49
+ // Node signal, so no handler can cover that path — the `beforeExit` hook
50
+ // is the only portable shutdown flush mechanism.
51
+ if (process.platform === 'win32') {
52
+ proc.on('SIGBREAK', onSigInt);
53
+ }
46
54
  return () => {
47
55
  proc.removeListener('beforeExit', onBeforeExit);
48
56
  proc.removeListener('SIGINT', onSigInt);
49
57
  proc.removeListener('SIGTERM', onSigTerm);
58
+ if (process.platform === 'win32') {
59
+ proc.removeListener('SIGBREAK', onSigInt);
60
+ }
50
61
  };
51
62
  },
52
63
  onUncaughtError(cb) {
@@ -1 +1 @@
1
- {"version":3,"file":"process-lifecycle.js","sourceRoot":"","sources":["../../../src/runtime/process-lifecycle.ts"],"names":[],"mappings":"AASA,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,MAAM,UAAU,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"}
@@ -1,4 +1,8 @@
1
1
  import { isLogLevelCommand, normalizeLevel } from '../types.js';
2
+ // Captured at module load so error reporting never recurses into itself.
3
+ const RAW_CONSOLE_ERROR = typeof console !== 'undefined' && typeof console.error === 'function'
4
+ ? console.error.bind(console)
5
+ : () => { };
2
6
  /** IPC channel for cluster worker → primary communication. */
3
7
  export const CLUSTER_IPC_CHANNEL = 'lograil:cluster:log';
4
8
  /**
@@ -16,7 +20,9 @@ export class ClusterIpcTransport {
16
20
  if (typeof proc.send === 'function') {
17
21
  proc.send(entry, (err) => {
18
22
  if (err) {
19
- /* primary gone or channel closed — drop silently */
23
+ // Primary gone or channel closed — surface the error so users can
24
+ // detect cluster worker communication failures.
25
+ RAW_CONSOLE_ERROR('[lograil] cluster-ipc primary unreachable:', err);
20
26
  }
21
27
  });
22
28
  }
@@ -39,6 +45,19 @@ export class ClusterIpcTransport {
39
45
  }
40
46
  }
41
47
  }
48
+ /**
49
+ * Shared dedup state on globalThis so that multiple bundled copies of this
50
+ * module all share the same registration flag and callbacks.
51
+ */
52
+ const _DEDUP_CLUSTER = Symbol('lograil:cluster-ipc:dedup');
53
+ function _getClusterState() {
54
+ if (typeof globalThis !== 'undefined' && _DEDUP_CLUSTER in globalThis)
55
+ return globalThis[_DEDUP_CLUSTER];
56
+ const s = { registered: false, ingest: null, onLevelCommand: null };
57
+ if (typeof globalThis !== 'undefined')
58
+ globalThis[_DEDUP_CLUSTER] = s;
59
+ return s;
60
+ }
42
61
  /**
43
62
  * Primary-side helper: listen on the cluster IPC channel and feed received
44
63
  * worker entries into the provided `ingest` callback (typically
@@ -50,22 +69,50 @@ export function registerClusterReceiver(ingest, options = {}) {
50
69
  const proc = process;
51
70
  if (!proc.on || !proc.removeListener)
52
71
  return () => { };
72
+ // Guard against duplicate registration on the same process.
73
+ // Use globalThis-based state so multiple bundled copies share the same flag.
74
+ const state = _getClusterState();
75
+ if (state.registered) {
76
+ // Update the callback so the existing handler processes new loggers
77
+ state.ingest = ingest;
78
+ state.onLevelCommand = onLevelCommand ?? null;
79
+ return () => {
80
+ if (state.ingest === ingest) {
81
+ state.ingest = null;
82
+ state.onLevelCommand = null;
83
+ }
84
+ };
85
+ }
86
+ state.registered = true;
87
+ state.ingest = ingest;
88
+ state.onLevelCommand = onLevelCommand ?? null;
53
89
  const handler = (message) => {
54
- if (isLogLevelCommand(message)) {
55
- onLevelCommand?.(normalizeLevel(message.level));
90
+ if (state.onLevelCommand && isLogLevelCommand(message)) {
91
+ state.onLevelCommand(normalizeLevel(message.level));
56
92
  return;
57
93
  }
58
- if (message &&
94
+ if (state.ingest &&
95
+ message &&
59
96
  typeof message === 'object' &&
60
97
  'level' in message &&
61
98
  'message' in message &&
62
99
  'timestamp' in message) {
63
- ingest(message);
100
+ state.ingest(message);
64
101
  }
65
102
  };
66
103
  proc.on('message', handler);
67
104
  return () => {
105
+ state.registered = false;
106
+ state.ingest = null;
107
+ state.onLevelCommand = null;
68
108
  proc.removeListener?.('message', handler);
69
109
  };
70
110
  }
111
+ /** Reset internal state for testing. */
112
+ export function _resetClusterReceiverState() {
113
+ const state = _getClusterState();
114
+ state.registered = false;
115
+ state.ingest = null;
116
+ state.onLevelCommand = null;
117
+ }
71
118
  //# sourceMappingURL=cluster-ipc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cluster-ipc.js","sourceRoot":"","sources":["../../../src/transport/cluster-ipc.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEhE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AASzD;;;;GAIG;AACH,MAAM,OAAO,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;AAOD;;;;;GAKG;AACH,MAAM,UAAU,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,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,cAAc,EAAE,CAAC,cAAc,CAAC,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"}
@@ -10,6 +10,15 @@ const realConsole = {
10
10
  error: console.error.bind(console),
11
11
  log: console.log.bind(console),
12
12
  };
13
+ /** Default method mapping shared across all ConsoleTransport instances. */
14
+ const DEFAULT_METHOD_MAP = {
15
+ trace: realConsole.trace,
16
+ debug: realConsole.debug,
17
+ info: realConsole.info,
18
+ warn: realConsole.warn,
19
+ error: realConsole.error,
20
+ fatal: realConsole.error,
21
+ };
13
22
  /**
14
23
  * Writes log entries to the global `console`. Suitable for both Web and
15
24
  * Node/Electron runtimes.
@@ -18,15 +27,7 @@ export class ConsoleTransport {
18
27
  constructor(options = {}) {
19
28
  this.name = options.name ?? 'console';
20
29
  this.formatter = options.formatter ?? createLineFormatter();
21
- this.methodMap = {
22
- trace: realConsole.trace,
23
- debug: realConsole.debug,
24
- info: realConsole.info,
25
- warn: realConsole.warn,
26
- error: realConsole.error,
27
- fatal: realConsole.error,
28
- ...options.methodMap,
29
- };
30
+ this.methodMap = { ...DEFAULT_METHOD_MAP, ...options.methodMap };
30
31
  // Route the requested levels to stderr (console.error). Applied after
31
32
  // `methodMap` so an explicitly provided method for a level is not silently
32
33
  // 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,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;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,MAAM,OAAO,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,mBAAmB,EAAE,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"}
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../../src/transport/console.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;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,MAAM,OAAO,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,mBAAmB,EAAE,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"}
@@ -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"}
@@ -4,23 +4,6 @@ import { getElectron } from '../runtime/electron-binding.js';
4
4
  const RAW_CONSOLE_ERROR = typeof console !== 'undefined' && typeof console.error === 'function'
5
5
  ? console.error.bind(console)
6
6
  : () => { };
7
- // Reused across calls so we don't allocate an encoder/decoder per log line.
8
- const encoder = new TextEncoder();
9
- const decoder = new TextDecoder();
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 function encodeEntry(entry) {
17
- return encoder.encode(JSON.stringify(entry)).buffer;
18
- }
19
- /** Inverse of {@link encodeEntry}. */
20
- export function decodeEntry(buffer) {
21
- const bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
22
- return JSON.parse(decoder.decode(bytes));
23
- }
24
7
  export const LOGRAIL_CHANNEL = 'lograil:log';
25
8
  /**
26
9
  * Metadata key (on `LogEntry.metadata`) used to mark entries that originated
@@ -31,8 +14,8 @@ export const RENDERER_PROCESS_MARKER = '__lograilProcess';
31
14
  /**
32
15
  * Renderer-side transport. Forwards each log entry to the Electron main
33
16
  * process over IPC, where it is persisted by the main logger (the renderer
34
- * itself has no filesystem access). The `electron` module is required lazily
35
- * so this file is safe to import in non-Electron environments.
17
+ * itself has no filesystem access). Uses structured cloning via
18
+ * `ipcRenderer.send()`.
36
19
  */
37
20
  export class ElectronIpcTransport {
38
21
  constructor(options = {}) {
@@ -58,20 +41,10 @@ export class ElectronIpcTransport {
58
41
  if (!ipc)
59
42
  return;
60
43
  try {
61
- const sender = ipc;
62
- if (typeof sender.postMessage === 'function') {
63
- // Zero-copy path: serialize once, then transfer the buffer's ownership
64
- // across the process boundary (no structured-clone of the object graph).
65
- const buf = encodeEntry(entry);
66
- sender.postMessage(this.channel, buf, [buf]);
67
- }
68
- else {
69
- // Fallback: Electron structured-clones the whole entry object.
70
- ipc.send(this.channel, entry);
71
- }
44
+ ipc.send(this.channel, entry);
72
45
  }
73
46
  catch (err) {
74
- // Report IPC failure so users can diagnose renderer main delivery issues.
47
+ // Report IPC failure so users can diagnose renderer -> main delivery issues.
75
48
  RAW_CONSOLE_ERROR(`[lograil] ipc transport (${this.name}) send failed:`, err);
76
49
  }
77
50
  }
@@ -82,20 +55,27 @@ export class ElectronIpcTransport {
82
55
  return;
83
56
  const cmd = { __lograilCmd: true, __lograilCmdType: 'setLevel', level };
84
57
  try {
85
- const sender = ipc;
86
- if (typeof sender.postMessage === 'function') {
87
- const buf = encoder.encode(JSON.stringify(cmd)).buffer;
88
- sender.postMessage(this.channel, buf, [buf]);
89
- }
90
- else {
91
- ipc.send(this.channel, cmd);
92
- }
58
+ ipc.send(this.channel, cmd);
93
59
  }
94
60
  catch {
95
- /* silently drop command loss is not fatal */
61
+ /* silently drop - command loss is not fatal */
96
62
  }
97
63
  }
98
64
  }
65
+ /**
66
+ * Shared dedup state on globalThis so that multiple bundled copies of this
67
+ * module (e.g. from node_modules hoisting or chunk splitting) all share the
68
+ * same registration set instead of each keeping their own independent one.
69
+ */
70
+ const _DEDUP_ELECTRON = Symbol('lograil:electron-ipc:dedup');
71
+ function _getRegisteredChannels() {
72
+ if (typeof globalThis !== 'undefined' && _DEDUP_ELECTRON in globalThis)
73
+ return globalThis[_DEDUP_ELECTRON];
74
+ const s = new Set();
75
+ if (typeof globalThis !== 'undefined')
76
+ globalThis[_DEDUP_ELECTRON] = s;
77
+ return s;
78
+ }
99
79
  /**
100
80
  * Main-side helper: listen on the IPC channel and feed received renderer
101
81
  * entries into the provided `ingest` callback (typically `logger.ingestEntry`).
@@ -108,39 +88,30 @@ export function registerIpcReceiver(ingest, options = {}) {
108
88
  // `electron` is only present in a main process; resolve it lazily.
109
89
  const ipcMain = getElectron().ipcMain;
110
90
  const handler = (_event, payload) => {
111
- if (payload instanceof ArrayBuffer || payload instanceof Uint8Array) {
112
- // Zero-copy transfer path
113
- try {
114
- const decoded = JSON.parse(decoder.decode(payload));
115
- if (isLogLevelCommand(decoded)) {
116
- onLevelCommand?.(normalizeLevel(decoded.level));
117
- return;
118
- }
119
- const entry = decoded;
120
- ingest({
121
- ...entry,
122
- metadata: { ...entry.metadata, [RENDERER_PROCESS_MARKER]: 'renderer' },
123
- });
124
- }
125
- catch {
126
- return;
127
- }
128
- }
129
- else {
130
- const data = payload;
131
- if (isLogLevelCommand(data)) {
132
- onLevelCommand?.(normalizeLevel(data.level));
133
- return;
134
- }
135
- const entry = data;
136
- // Copy-on-write: mark renderer-origin without mutating a shared/frozen entry.
137
- ingest({
138
- ...entry,
139
- metadata: { ...entry.metadata, [RENDERER_PROCESS_MARKER]: 'renderer' },
140
- });
91
+ const data = payload;
92
+ if (isLogLevelCommand(data)) {
93
+ onLevelCommand?.(normalizeLevel(data.level));
94
+ return;
141
95
  }
96
+ const entry = data;
97
+ // Copy-on-write: mark renderer-origin without mutating a shared/frozen entry.
98
+ ingest({
99
+ ...entry,
100
+ metadata: { ...entry.metadata, [RENDERER_PROCESS_MARKER]: 'renderer' },
101
+ });
142
102
  };
103
+ // Guard against duplicate registration: if this channel is already tracked,
104
+ // do not add another handler (multiple loggers on the same channel would
105
+ // cause each IPC message to be processed once per logger).
106
+ const registeredChannels = _getRegisteredChannels();
107
+ if (registeredChannels.has(channel)) {
108
+ return () => { };
109
+ }
110
+ registeredChannels.add(channel);
143
111
  ipcMain.on(channel, handler);
144
- return () => ipcMain.removeListener(channel, handler);
112
+ return () => {
113
+ registeredChannels.delete(channel);
114
+ ipcMain.removeListener(channel, handler);
115
+ };
145
116
  }
146
117
  //# 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>;
@@ -1 +1 @@
1
- {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/transport/file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/transport/file.ts"],"names":[],"mappings":"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"}