lograil 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/LICENSE +21 -0
  3. package/README.md +40 -0
  4. package/dist/cjs/context/async-context.browser.d.ts +16 -0
  5. package/dist/cjs/context/async-context.browser.d.ts.map +1 -0
  6. package/dist/cjs/context/async-context.browser.js +29 -0
  7. package/dist/cjs/context/async-context.browser.js.map +1 -0
  8. package/dist/cjs/context/async-context.d.ts +10 -0
  9. package/dist/cjs/context/async-context.d.ts.map +1 -0
  10. package/dist/cjs/context/async-context.js +37 -0
  11. package/dist/cjs/context/async-context.js.map +1 -0
  12. package/dist/cjs/context/context.d.ts +33 -0
  13. package/dist/cjs/context/context.d.ts.map +1 -0
  14. package/dist/cjs/context/context.js +57 -0
  15. package/dist/cjs/context/context.js.map +1 -0
  16. package/dist/cjs/context/index.d.ts +3 -0
  17. package/dist/cjs/context/index.d.ts.map +1 -0
  18. package/dist/cjs/context/index.js +19 -0
  19. package/dist/cjs/context/index.js.map +1 -0
  20. package/dist/cjs/core/entry.d.ts +30 -0
  21. package/dist/cjs/core/entry.d.ts.map +1 -0
  22. package/dist/cjs/core/entry.js +37 -0
  23. package/dist/cjs/core/entry.js.map +1 -0
  24. package/dist/cjs/core/index.d.ts +7 -0
  25. package/dist/cjs/core/index.d.ts.map +1 -0
  26. package/dist/cjs/core/index.js +24 -0
  27. package/dist/cjs/core/index.js.map +1 -0
  28. package/dist/cjs/core/level.d.ts +12 -0
  29. package/dist/cjs/core/level.d.ts.map +1 -0
  30. package/dist/cjs/core/level.js +31 -0
  31. package/dist/cjs/core/level.js.map +1 -0
  32. package/dist/cjs/core/logger.d.ts +271 -0
  33. package/dist/cjs/core/logger.d.ts.map +1 -0
  34. package/dist/cjs/core/logger.js +751 -0
  35. package/dist/cjs/core/logger.js.map +1 -0
  36. package/dist/cjs/core/printf.d.ts +34 -0
  37. package/dist/cjs/core/printf.d.ts.map +1 -0
  38. package/dist/cjs/core/printf.js +133 -0
  39. package/dist/cjs/core/printf.js.map +1 -0
  40. package/dist/cjs/index.d.ts +40 -0
  41. package/dist/cjs/index.d.ts.map +1 -0
  42. package/dist/cjs/index.js +56 -0
  43. package/dist/cjs/index.js.map +1 -0
  44. package/dist/cjs/package.json +1 -0
  45. package/dist/cjs/pipeline/filter.d.ts +10 -0
  46. package/dist/cjs/pipeline/filter.d.ts.map +1 -0
  47. package/dist/cjs/pipeline/filter.js +16 -0
  48. package/dist/cjs/pipeline/filter.js.map +1 -0
  49. package/dist/cjs/pipeline/formatter.d.ts +19 -0
  50. package/dist/cjs/pipeline/formatter.d.ts.map +1 -0
  51. package/dist/cjs/pipeline/formatter.js +183 -0
  52. package/dist/cjs/pipeline/formatter.js.map +1 -0
  53. package/dist/cjs/pipeline/index.d.ts +6 -0
  54. package/dist/cjs/pipeline/index.d.ts.map +1 -0
  55. package/dist/cjs/pipeline/index.js +22 -0
  56. package/dist/cjs/pipeline/index.js.map +1 -0
  57. package/dist/cjs/pipeline/pipeline.d.ts +45 -0
  58. package/dist/cjs/pipeline/pipeline.d.ts.map +1 -0
  59. package/dist/cjs/pipeline/pipeline.js +80 -0
  60. package/dist/cjs/pipeline/pipeline.js.map +1 -0
  61. package/dist/cjs/pipeline/processor.d.ts +67 -0
  62. package/dist/cjs/pipeline/processor.d.ts.map +1 -0
  63. package/dist/cjs/pipeline/processor.js +284 -0
  64. package/dist/cjs/pipeline/processor.js.map +1 -0
  65. package/dist/cjs/pipeline/sampler.d.ts +45 -0
  66. package/dist/cjs/pipeline/sampler.d.ts.map +1 -0
  67. package/dist/cjs/pipeline/sampler.js +62 -0
  68. package/dist/cjs/pipeline/sampler.js.map +1 -0
  69. package/dist/cjs/plugin/index.d.ts +4 -0
  70. package/dist/cjs/plugin/index.d.ts.map +1 -0
  71. package/dist/cjs/plugin/index.js +20 -0
  72. package/dist/cjs/plugin/index.js.map +1 -0
  73. package/dist/cjs/plugin/manager.d.ts +38 -0
  74. package/dist/cjs/plugin/manager.d.ts.map +1 -0
  75. package/dist/cjs/plugin/manager.js +79 -0
  76. package/dist/cjs/plugin/manager.js.map +1 -0
  77. package/dist/cjs/plugin/otel-trace.d.ts +19 -0
  78. package/dist/cjs/plugin/otel-trace.d.ts.map +1 -0
  79. package/dist/cjs/plugin/otel-trace.js +91 -0
  80. package/dist/cjs/plugin/otel-trace.js.map +1 -0
  81. package/dist/cjs/plugin/plugin.d.ts +41 -0
  82. package/dist/cjs/plugin/plugin.d.ts.map +1 -0
  83. package/dist/cjs/plugin/plugin.js +3 -0
  84. package/dist/cjs/plugin/plugin.js.map +1 -0
  85. package/dist/cjs/runtime/adapter.d.ts +81 -0
  86. package/dist/cjs/runtime/adapter.d.ts.map +1 -0
  87. package/dist/cjs/runtime/adapter.js +3 -0
  88. package/dist/cjs/runtime/adapter.js.map +1 -0
  89. package/dist/cjs/runtime/defaults.d.ts +27 -0
  90. package/dist/cjs/runtime/defaults.d.ts.map +1 -0
  91. package/dist/cjs/runtime/defaults.js +30 -0
  92. package/dist/cjs/runtime/defaults.js.map +1 -0
  93. package/dist/cjs/runtime/electron-binding.browser.d.ts +10 -0
  94. package/dist/cjs/runtime/electron-binding.browser.d.ts.map +1 -0
  95. package/dist/cjs/runtime/electron-binding.browser.js +18 -0
  96. package/dist/cjs/runtime/electron-binding.browser.js.map +1 -0
  97. package/dist/cjs/runtime/electron-binding.d.ts +24 -0
  98. package/dist/cjs/runtime/electron-binding.d.ts.map +1 -0
  99. package/dist/cjs/runtime/electron-binding.js +49 -0
  100. package/dist/cjs/runtime/electron-binding.js.map +1 -0
  101. package/dist/cjs/runtime/electron-lifecycle.d.ts +17 -0
  102. package/dist/cjs/runtime/electron-lifecycle.d.ts.map +1 -0
  103. package/dist/cjs/runtime/electron-lifecycle.js +47 -0
  104. package/dist/cjs/runtime/electron-lifecycle.js.map +1 -0
  105. package/dist/cjs/runtime/electron-main.d.ts +24 -0
  106. package/dist/cjs/runtime/electron-main.d.ts.map +1 -0
  107. package/dist/cjs/runtime/electron-main.js +102 -0
  108. package/dist/cjs/runtime/electron-main.js.map +1 -0
  109. package/dist/cjs/runtime/electron-renderer.d.ts +26 -0
  110. package/dist/cjs/runtime/electron-renderer.d.ts.map +1 -0
  111. package/dist/cjs/runtime/electron-renderer.js +33 -0
  112. package/dist/cjs/runtime/electron-renderer.js.map +1 -0
  113. package/dist/cjs/runtime/electron.d.ts +20 -0
  114. package/dist/cjs/runtime/electron.d.ts.map +1 -0
  115. package/dist/cjs/runtime/electron.js +27 -0
  116. package/dist/cjs/runtime/electron.js.map +1 -0
  117. package/dist/cjs/runtime/index.d.ts +21 -0
  118. package/dist/cjs/runtime/index.d.ts.map +1 -0
  119. package/dist/cjs/runtime/index.js +41 -0
  120. package/dist/cjs/runtime/index.js.map +1 -0
  121. package/dist/cjs/runtime/node.d.ts +27 -0
  122. package/dist/cjs/runtime/node.d.ts.map +1 -0
  123. package/dist/cjs/runtime/node.js +126 -0
  124. package/dist/cjs/runtime/node.js.map +1 -0
  125. package/dist/cjs/runtime/process-lifecycle.d.ts +13 -0
  126. package/dist/cjs/runtime/process-lifecycle.d.ts.map +1 -0
  127. package/dist/cjs/runtime/process-lifecycle.js +80 -0
  128. package/dist/cjs/runtime/process-lifecycle.js.map +1 -0
  129. package/dist/cjs/runtime/web-lifecycle.d.ts +13 -0
  130. package/dist/cjs/runtime/web-lifecycle.d.ts.map +1 -0
  131. package/dist/cjs/runtime/web-lifecycle.js +39 -0
  132. package/dist/cjs/runtime/web-lifecycle.js.map +1 -0
  133. package/dist/cjs/runtime/web.d.ts +14 -0
  134. package/dist/cjs/runtime/web.d.ts.map +1 -0
  135. package/dist/cjs/runtime/web.js +61 -0
  136. package/dist/cjs/runtime/web.js.map +1 -0
  137. package/dist/cjs/shims/index.browser.d.ts +26 -0
  138. package/dist/cjs/shims/index.browser.d.ts.map +1 -0
  139. package/dist/cjs/shims/index.browser.js +67 -0
  140. package/dist/cjs/shims/index.browser.js.map +1 -0
  141. package/dist/cjs/shims/index.d.ts +15 -0
  142. package/dist/cjs/shims/index.d.ts.map +1 -0
  143. package/dist/cjs/shims/index.js +39 -0
  144. package/dist/cjs/shims/index.js.map +1 -0
  145. package/dist/cjs/transport/cluster-ipc.d.ts +36 -0
  146. package/dist/cjs/transport/cluster-ipc.d.ts.map +1 -0
  147. package/dist/cjs/transport/cluster-ipc.js +76 -0
  148. package/dist/cjs/transport/cluster-ipc.js.map +1 -0
  149. package/dist/cjs/transport/console.d.ts +28 -0
  150. package/dist/cjs/transport/console.d.ts.map +1 -0
  151. package/dist/cjs/transport/console.js +48 -0
  152. package/dist/cjs/transport/console.js.map +1 -0
  153. package/dist/cjs/transport/electron-ipc.d.ts +69 -0
  154. package/dist/cjs/transport/electron-ipc.d.ts.map +1 -0
  155. package/dist/cjs/transport/electron-ipc.js +153 -0
  156. package/dist/cjs/transport/electron-ipc.js.map +1 -0
  157. package/dist/cjs/transport/file.d.ts +190 -0
  158. package/dist/cjs/transport/file.d.ts.map +1 -0
  159. package/dist/cjs/transport/file.js +666 -0
  160. package/dist/cjs/transport/file.js.map +1 -0
  161. package/dist/cjs/transport/index.d.ts +9 -0
  162. package/dist/cjs/transport/index.d.ts.map +1 -0
  163. package/dist/cjs/transport/index.js +25 -0
  164. package/dist/cjs/transport/index.js.map +1 -0
  165. package/dist/cjs/transport/live.d.ts +72 -0
  166. package/dist/cjs/transport/live.d.ts.map +1 -0
  167. package/dist/cjs/transport/live.js +104 -0
  168. package/dist/cjs/transport/live.js.map +1 -0
  169. package/dist/cjs/transport/otlp.d.ts +97 -0
  170. package/dist/cjs/transport/otlp.d.ts.map +1 -0
  171. package/dist/cjs/transport/otlp.js +194 -0
  172. package/dist/cjs/transport/otlp.js.map +1 -0
  173. package/dist/cjs/transport/rotating-file.d.ts +67 -0
  174. package/dist/cjs/transport/rotating-file.d.ts.map +1 -0
  175. package/dist/cjs/transport/rotating-file.js +179 -0
  176. package/dist/cjs/transport/rotating-file.js.map +1 -0
  177. package/dist/cjs/transport/transport.d.ts +35 -0
  178. package/dist/cjs/transport/transport.d.ts.map +1 -0
  179. package/dist/cjs/transport/transport.js +3 -0
  180. package/dist/cjs/transport/transport.js.map +1 -0
  181. package/dist/cjs/transport/worker-ipc.d.ts +43 -0
  182. package/dist/cjs/transport/worker-ipc.d.ts.map +1 -0
  183. package/dist/cjs/transport/worker-ipc.js +106 -0
  184. package/dist/cjs/transport/worker-ipc.js.map +1 -0
  185. package/dist/cjs/types.d.ts +72 -0
  186. package/dist/cjs/types.d.ts.map +1 -0
  187. package/dist/cjs/types.js +45 -0
  188. package/dist/cjs/types.js.map +1 -0
  189. package/dist/esm/context/async-context.browser.d.ts +16 -0
  190. package/dist/esm/context/async-context.browser.d.ts.map +1 -0
  191. package/dist/esm/context/async-context.browser.js +25 -0
  192. package/dist/esm/context/async-context.browser.js.map +1 -0
  193. package/dist/esm/context/async-context.d.ts +10 -0
  194. package/dist/esm/context/async-context.d.ts.map +1 -0
  195. package/dist/esm/context/async-context.js +33 -0
  196. package/dist/esm/context/async-context.js.map +1 -0
  197. package/dist/esm/context/context.d.ts +33 -0
  198. package/dist/esm/context/context.d.ts.map +1 -0
  199. package/dist/esm/context/context.js +52 -0
  200. package/dist/esm/context/context.js.map +1 -0
  201. package/dist/esm/context/index.d.ts +3 -0
  202. package/dist/esm/context/index.d.ts.map +1 -0
  203. package/dist/esm/context/index.js +3 -0
  204. package/dist/esm/context/index.js.map +1 -0
  205. package/dist/esm/core/entry.d.ts +30 -0
  206. package/dist/esm/core/entry.d.ts.map +1 -0
  207. package/dist/esm/core/entry.js +34 -0
  208. package/dist/esm/core/entry.js.map +1 -0
  209. package/dist/esm/core/index.d.ts +7 -0
  210. package/dist/esm/core/index.d.ts.map +1 -0
  211. package/dist/esm/core/index.js +6 -0
  212. package/dist/esm/core/index.js.map +1 -0
  213. package/dist/esm/core/level.d.ts +12 -0
  214. package/dist/esm/core/level.d.ts.map +1 -0
  215. package/dist/esm/core/level.js +25 -0
  216. package/dist/esm/core/level.js.map +1 -0
  217. package/dist/esm/core/logger.d.ts +271 -0
  218. package/dist/esm/core/logger.d.ts.map +1 -0
  219. package/dist/esm/core/logger.js +747 -0
  220. package/dist/esm/core/logger.js.map +1 -0
  221. package/dist/esm/core/printf.d.ts +34 -0
  222. package/dist/esm/core/printf.d.ts.map +1 -0
  223. package/dist/esm/core/printf.js +129 -0
  224. package/dist/esm/core/printf.js.map +1 -0
  225. package/dist/esm/index.d.ts +40 -0
  226. package/dist/esm/index.d.ts.map +1 -0
  227. package/dist/esm/index.js +38 -0
  228. package/dist/esm/index.js.map +1 -0
  229. package/dist/esm/pipeline/filter.d.ts +10 -0
  230. package/dist/esm/pipeline/filter.d.ts.map +1 -0
  231. package/dist/esm/pipeline/filter.js +11 -0
  232. package/dist/esm/pipeline/filter.js.map +1 -0
  233. package/dist/esm/pipeline/formatter.d.ts +19 -0
  234. package/dist/esm/pipeline/formatter.d.ts.map +1 -0
  235. package/dist/esm/pipeline/formatter.js +179 -0
  236. package/dist/esm/pipeline/formatter.js.map +1 -0
  237. package/dist/esm/pipeline/index.d.ts +6 -0
  238. package/dist/esm/pipeline/index.d.ts.map +1 -0
  239. package/dist/esm/pipeline/index.js +6 -0
  240. package/dist/esm/pipeline/index.js.map +1 -0
  241. package/dist/esm/pipeline/pipeline.d.ts +45 -0
  242. package/dist/esm/pipeline/pipeline.d.ts.map +1 -0
  243. package/dist/esm/pipeline/pipeline.js +76 -0
  244. package/dist/esm/pipeline/pipeline.js.map +1 -0
  245. package/dist/esm/pipeline/processor.d.ts +67 -0
  246. package/dist/esm/pipeline/processor.d.ts.map +1 -0
  247. package/dist/esm/pipeline/processor.js +277 -0
  248. package/dist/esm/pipeline/processor.js.map +1 -0
  249. package/dist/esm/pipeline/sampler.d.ts +45 -0
  250. package/dist/esm/pipeline/sampler.d.ts.map +1 -0
  251. package/dist/esm/pipeline/sampler.js +59 -0
  252. package/dist/esm/pipeline/sampler.js.map +1 -0
  253. package/dist/esm/plugin/index.d.ts +4 -0
  254. package/dist/esm/plugin/index.d.ts.map +1 -0
  255. package/dist/esm/plugin/index.js +4 -0
  256. package/dist/esm/plugin/index.js.map +1 -0
  257. package/dist/esm/plugin/manager.d.ts +38 -0
  258. package/dist/esm/plugin/manager.d.ts.map +1 -0
  259. package/dist/esm/plugin/manager.js +75 -0
  260. package/dist/esm/plugin/manager.js.map +1 -0
  261. package/dist/esm/plugin/otel-trace.d.ts +19 -0
  262. package/dist/esm/plugin/otel-trace.d.ts.map +1 -0
  263. package/dist/esm/plugin/otel-trace.js +55 -0
  264. package/dist/esm/plugin/otel-trace.js.map +1 -0
  265. package/dist/esm/plugin/plugin.d.ts +41 -0
  266. package/dist/esm/plugin/plugin.d.ts.map +1 -0
  267. package/dist/esm/plugin/plugin.js +2 -0
  268. package/dist/esm/plugin/plugin.js.map +1 -0
  269. package/dist/esm/runtime/adapter.d.ts +81 -0
  270. package/dist/esm/runtime/adapter.d.ts.map +1 -0
  271. package/dist/esm/runtime/adapter.js +2 -0
  272. package/dist/esm/runtime/adapter.js.map +1 -0
  273. package/dist/esm/runtime/defaults.d.ts +27 -0
  274. package/dist/esm/runtime/defaults.d.ts.map +1 -0
  275. package/dist/esm/runtime/defaults.js +27 -0
  276. package/dist/esm/runtime/defaults.js.map +1 -0
  277. package/dist/esm/runtime/electron-binding.browser.d.ts +10 -0
  278. package/dist/esm/runtime/electron-binding.browser.d.ts.map +1 -0
  279. package/dist/esm/runtime/electron-binding.browser.js +13 -0
  280. package/dist/esm/runtime/electron-binding.browser.js.map +1 -0
  281. package/dist/esm/runtime/electron-binding.d.ts +24 -0
  282. package/dist/esm/runtime/electron-binding.d.ts.map +1 -0
  283. package/dist/esm/runtime/electron-binding.js +44 -0
  284. package/dist/esm/runtime/electron-binding.js.map +1 -0
  285. package/dist/esm/runtime/electron-lifecycle.d.ts +17 -0
  286. package/dist/esm/runtime/electron-lifecycle.d.ts.map +1 -0
  287. package/dist/esm/runtime/electron-lifecycle.js +44 -0
  288. package/dist/esm/runtime/electron-lifecycle.js.map +1 -0
  289. package/dist/esm/runtime/electron-main.d.ts +24 -0
  290. package/dist/esm/runtime/electron-main.d.ts.map +1 -0
  291. package/dist/esm/runtime/electron-main.js +99 -0
  292. package/dist/esm/runtime/electron-main.js.map +1 -0
  293. package/dist/esm/runtime/electron-renderer.d.ts +26 -0
  294. package/dist/esm/runtime/electron-renderer.d.ts.map +1 -0
  295. package/dist/esm/runtime/electron-renderer.js +30 -0
  296. package/dist/esm/runtime/electron-renderer.js.map +1 -0
  297. package/dist/esm/runtime/electron.d.ts +20 -0
  298. package/dist/esm/runtime/electron.d.ts.map +1 -0
  299. package/dist/esm/runtime/electron.js +21 -0
  300. package/dist/esm/runtime/electron.js.map +1 -0
  301. package/dist/esm/runtime/index.d.ts +21 -0
  302. package/dist/esm/runtime/index.d.ts.map +1 -0
  303. package/dist/esm/runtime/index.js +29 -0
  304. package/dist/esm/runtime/index.js.map +1 -0
  305. package/dist/esm/runtime/node.d.ts +27 -0
  306. package/dist/esm/runtime/node.d.ts.map +1 -0
  307. package/dist/esm/runtime/node.js +123 -0
  308. package/dist/esm/runtime/node.js.map +1 -0
  309. package/dist/esm/runtime/process-lifecycle.d.ts +13 -0
  310. package/dist/esm/runtime/process-lifecycle.d.ts.map +1 -0
  311. package/dist/esm/runtime/process-lifecycle.js +77 -0
  312. package/dist/esm/runtime/process-lifecycle.js.map +1 -0
  313. package/dist/esm/runtime/web-lifecycle.d.ts +13 -0
  314. package/dist/esm/runtime/web-lifecycle.d.ts.map +1 -0
  315. package/dist/esm/runtime/web-lifecycle.js +36 -0
  316. package/dist/esm/runtime/web-lifecycle.js.map +1 -0
  317. package/dist/esm/runtime/web.d.ts +14 -0
  318. package/dist/esm/runtime/web.d.ts.map +1 -0
  319. package/dist/esm/runtime/web.js +58 -0
  320. package/dist/esm/runtime/web.js.map +1 -0
  321. package/dist/esm/shims/index.browser.d.ts +26 -0
  322. package/dist/esm/shims/index.browser.d.ts.map +1 -0
  323. package/dist/esm/shims/index.browser.js +54 -0
  324. package/dist/esm/shims/index.browser.js.map +1 -0
  325. package/dist/esm/shims/index.d.ts +15 -0
  326. package/dist/esm/shims/index.d.ts.map +1 -0
  327. package/dist/esm/shims/index.js +22 -0
  328. package/dist/esm/shims/index.js.map +1 -0
  329. package/dist/esm/transport/cluster-ipc.d.ts +36 -0
  330. package/dist/esm/transport/cluster-ipc.d.ts.map +1 -0
  331. package/dist/esm/transport/cluster-ipc.js +71 -0
  332. package/dist/esm/transport/cluster-ipc.js.map +1 -0
  333. package/dist/esm/transport/console.d.ts +28 -0
  334. package/dist/esm/transport/console.d.ts.map +1 -0
  335. package/dist/esm/transport/console.js +44 -0
  336. package/dist/esm/transport/console.js.map +1 -0
  337. package/dist/esm/transport/electron-ipc.d.ts +69 -0
  338. package/dist/esm/transport/electron-ipc.d.ts.map +1 -0
  339. package/dist/esm/transport/electron-ipc.js +146 -0
  340. package/dist/esm/transport/electron-ipc.js.map +1 -0
  341. package/dist/esm/transport/file.d.ts +190 -0
  342. package/dist/esm/transport/file.d.ts.map +1 -0
  343. package/dist/esm/transport/file.js +662 -0
  344. package/dist/esm/transport/file.js.map +1 -0
  345. package/dist/esm/transport/index.d.ts +9 -0
  346. package/dist/esm/transport/index.d.ts.map +1 -0
  347. package/dist/esm/transport/index.js +9 -0
  348. package/dist/esm/transport/index.js.map +1 -0
  349. package/dist/esm/transport/live.d.ts +72 -0
  350. package/dist/esm/transport/live.d.ts.map +1 -0
  351. package/dist/esm/transport/live.js +100 -0
  352. package/dist/esm/transport/live.js.map +1 -0
  353. package/dist/esm/transport/otlp.d.ts +97 -0
  354. package/dist/esm/transport/otlp.d.ts.map +1 -0
  355. package/dist/esm/transport/otlp.js +190 -0
  356. package/dist/esm/transport/otlp.js.map +1 -0
  357. package/dist/esm/transport/rotating-file.d.ts +67 -0
  358. package/dist/esm/transport/rotating-file.d.ts.map +1 -0
  359. package/dist/esm/transport/rotating-file.js +175 -0
  360. package/dist/esm/transport/rotating-file.js.map +1 -0
  361. package/dist/esm/transport/transport.d.ts +35 -0
  362. package/dist/esm/transport/transport.d.ts.map +1 -0
  363. package/dist/esm/transport/transport.js +2 -0
  364. package/dist/esm/transport/transport.js.map +1 -0
  365. package/dist/esm/transport/worker-ipc.d.ts +43 -0
  366. package/dist/esm/transport/worker-ipc.d.ts.map +1 -0
  367. package/dist/esm/transport/worker-ipc.js +101 -0
  368. package/dist/esm/transport/worker-ipc.js.map +1 -0
  369. package/dist/esm/types.d.ts +72 -0
  370. package/dist/esm/types.d.ts.map +1 -0
  371. package/dist/esm/types.js +39 -0
  372. package/dist/esm/types.js.map +1 -0
  373. package/package.json +128 -0
@@ -0,0 +1,58 @@
1
+ import { ConsoleTransport } from '../transport/console.js';
2
+ import { WorkerIpcTransport, registerWorkerReceiver } from '../transport/worker-ipc.js';
3
+ import { createWebLifecycle } from './web-lifecycle.js';
4
+ /**
5
+ * Detect whether the current context is a Web Worker or Node worker_threads.
6
+ * Uses `typeof` checks that are safe in all environments (returns false in
7
+ * non-worker contexts).
8
+ */
9
+ function isWorkerThread() {
10
+ // Web Worker: WorkerGlobalScope exists and there's no document (rules out window)
11
+ if (typeof WorkerGlobalScope !== 'undefined' &&
12
+ typeof self !== 'undefined' &&
13
+ typeof self.document === 'undefined') {
14
+ return true;
15
+ }
16
+ // Node worker_threads: parentPort exists with postMessage
17
+ if (typeof globalThis !== 'undefined' &&
18
+ typeof globalThis.parentPort?.postMessage ===
19
+ 'function') {
20
+ return true;
21
+ }
22
+ return false;
23
+ }
24
+ /**
25
+ * Web runtime (browsers + Node worker_threads). No process id, no filesystem,
26
+ * console only by default. Remote HTTP transports can be added by the
27
+ * application.
28
+ *
29
+ * **Worker support.** When running inside a Web Worker or Node worker_threads
30
+ * worker, the runtime automatically detects the Worker context and sends
31
+ * entries to the main/parent thread via `postMessage()`. The parent thread
32
+ * receives them via `registerWorkerReceiver()` (attached automatically by
33
+ * `createWebRuntime()`).
34
+ */
35
+ export function createWebRuntime() {
36
+ if (isWorkerThread()) {
37
+ // ── Worker: no file, send to parent via postMessage ──
38
+ return {
39
+ name: 'web',
40
+ now: () => Date.now(),
41
+ pid: () => undefined,
42
+ hasFileSystem: () => false,
43
+ defaultTransports: () => [new ConsoleTransport(), new WorkerIpcTransport()],
44
+ lifecycle: createWebLifecycle(),
45
+ };
46
+ }
47
+ // ── Main/parent thread: console only + receives worker logs ──
48
+ return {
49
+ name: 'web',
50
+ now: () => Date.now(),
51
+ pid: () => undefined,
52
+ hasFileSystem: () => false,
53
+ defaultTransports: () => [new ConsoleTransport()],
54
+ attachReceiver: (ingest) => registerWorkerReceiver(ingest),
55
+ lifecycle: createWebLifecycle(),
56
+ };
57
+ }
58
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/runtime/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAExF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAIxD;;;;GAIG;AACH,SAAS,cAAc;IACrB,kFAAkF;IAClF,IACE,OAAO,iBAAiB,KAAK,WAAW;QACxC,OAAO,IAAI,KAAK,WAAW;QAC3B,OAAQ,IAA+B,CAAC,QAAQ,KAAK,WAAW,EAChE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,0DAA0D;IAC1D,IACE,OAAO,UAAU,KAAK,WAAW;QACjC,OAAQ,UAAwD,CAAC,UAAU,EAAE,WAAW;YACtF,UAAU,EACZ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,cAAc,EAAE,EAAE,CAAC;QACrB,wDAAwD;QACxD,OAAO;YACL,IAAI,EAAE,KAAK;YACX,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACrB,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS;YACpB,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;YAC1B,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,gBAAgB,EAAE,EAAE,IAAI,kBAAkB,EAAE,CAAC;YAC3E,SAAS,EAAE,kBAAkB,EAAE;SAChC,CAAC;IACJ,CAAC;IAED,gEAAgE;IAChE,OAAO;QACL,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QACrB,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS;QACpB,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;QAC1B,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjD,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC;QAC1D,SAAS,EAAE,kBAAkB,EAAE;KAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Browser stub for all Node built-in modules used by lograil.
3
+ * Selected over `index.ts` via the `browser` field in `package.json`.
4
+ *
5
+ * Functions that are never called in browser builds (FileTransport) throw
6
+ * descriptive errors. Functions that have reasonable browser defaults
7
+ * (tmpdir) return sensible values.
8
+ */
9
+ export declare function tmpdir(): string;
10
+ export declare function isClusterWorker(): boolean;
11
+ export declare function basename(p: string, ext?: string): string;
12
+ export declare function dirname(p: string): string;
13
+ export declare function join(...segments: string[]): string;
14
+ export declare function mkdir(_path: string, _options?: unknown): Promise<void>;
15
+ export declare function open(_path: string, _flags?: string): Promise<{
16
+ fd: number;
17
+ close(): Promise<void>;
18
+ }>;
19
+ export declare function rename(_oldPath: string, _newPath: string): Promise<void>;
20
+ export declare function rm(_path: string, _options?: unknown): Promise<void>;
21
+ export declare function stat(_path: string): Promise<{
22
+ size: number;
23
+ mtimeMs: number;
24
+ }>;
25
+ export declare function readdir(_path: string): Promise<string[]>;
26
+ //# sourceMappingURL=index.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../../../src/shims/index.browser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAGD,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAGD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAQxD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGzC;AAED,wBAAgB,IAAI,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAElD;AAKD,wBAAsB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAsB,IAAI,CACxB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAEjD;AAED,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;AAED,wBAAsB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzE;AAED,wBAAsB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAEpF;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE9D"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Browser stub for all Node built-in modules used by lograil.
3
+ * Selected over `index.ts` via the `browser` field in `package.json`.
4
+ *
5
+ * Functions that are never called in browser builds (FileTransport) throw
6
+ * descriptive errors. Functions that have reasonable browser defaults
7
+ * (tmpdir) return sensible values.
8
+ */
9
+ // --- os ---
10
+ export function tmpdir() {
11
+ return '/tmp';
12
+ }
13
+ // --- cluster ---
14
+ export function isClusterWorker() {
15
+ return false;
16
+ }
17
+ // --- path ---
18
+ export function basename(p, ext) {
19
+ const seg = p
20
+ .replace(/[/\\]$/, '')
21
+ .split(/[/\\]/)
22
+ .pop() ?? '';
23
+ if (!ext)
24
+ return seg;
25
+ return seg.endsWith(ext) ? seg.slice(0, -ext.length) : seg;
26
+ }
27
+ export function dirname(p) {
28
+ const idx = Math.max(p.lastIndexOf('/'), p.lastIndexOf('\\'));
29
+ return idx <= 0 ? '.' : p.slice(0, idx);
30
+ }
31
+ export function join(...segments) {
32
+ return segments.filter(Boolean).join('/');
33
+ }
34
+ // --- fs/promises ---
35
+ const NOT_AVAILABLE = 'File system APIs are not available in browser builds';
36
+ export async function mkdir(_path, _options) {
37
+ throw new Error(NOT_AVAILABLE);
38
+ }
39
+ export async function open(_path, _flags) {
40
+ throw new Error(NOT_AVAILABLE);
41
+ }
42
+ export async function rename(_oldPath, _newPath) {
43
+ throw new Error(NOT_AVAILABLE);
44
+ }
45
+ export async function rm(_path, _options) {
46
+ throw new Error(NOT_AVAILABLE);
47
+ }
48
+ export async function stat(_path) {
49
+ throw new Error(NOT_AVAILABLE);
50
+ }
51
+ export async function readdir(_path) {
52
+ throw new Error(NOT_AVAILABLE);
53
+ }
54
+ //# sourceMappingURL=index.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../../../src/shims/index.browser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,aAAa;AACb,MAAM,UAAU,MAAM;IACpB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,eAAe;AACf,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,GAAY;IAC9C,MAAM,GAAG,GACP,CAAC;SACE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,EAAE,IAAI,EAAE,CAAC;IACjB,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IACrB,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAG,QAAkB;IACxC,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,sBAAsB;AACtB,MAAM,aAAa,GAAG,sDAAsD,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,KAAa,EAAE,QAAkB;IAC3D,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,KAAa,EACb,MAAe;IAEf,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB,EAAE,QAAgB;IAC7D,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,KAAa,EAAE,QAAkB;IACxD,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,KAAa;IACtC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAa;IACzC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Node.js API shims — the single entry point for all Node built-in module
3
+ * access in lograil. Every consumer imports from this module instead of
4
+ * `node:*` directly, so browser builds can swap the whole file at once
5
+ * via the `browser` field in `package.json`.
6
+ *
7
+ * If you need a new Node API, add the re-export here **and** the matching
8
+ * stub in `index.browser.ts`. ESLint will flag any direct `node:*` import
9
+ * outside this file.
10
+ */
11
+ export { tmpdir } from 'node:os';
12
+ export { basename, dirname, join } from 'node:path';
13
+ export { mkdir, open, rename, rm, stat, readdir } from 'node:fs/promises';
14
+ export declare function isClusterWorker(): boolean;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shims/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGpD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAI1E,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Node.js API shims — the single entry point for all Node built-in module
3
+ * access in lograil. Every consumer imports from this module instead of
4
+ * `node:*` directly, so browser builds can swap the whole file at once
5
+ * via the `browser` field in `package.json`.
6
+ *
7
+ * If you need a new Node API, add the re-export here **and** the matching
8
+ * stub in `index.browser.ts`. ESLint will flag any direct `node:*` import
9
+ * outside this file.
10
+ */
11
+ // --- os ---
12
+ export { tmpdir } from 'node:os';
13
+ // --- path ---
14
+ export { basename, dirname, join } from 'node:path';
15
+ // --- fs/promises ---
16
+ export { mkdir, open, rename, rm, stat, readdir } from 'node:fs/promises';
17
+ // --- cluster ---
18
+ import cluster from 'node:cluster';
19
+ export function isClusterWorker() {
20
+ return cluster.isWorker === true;
21
+ }
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shims/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,eAAe;AACf,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEpD,sBAAsB;AACtB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE1E,kBAAkB;AAClB,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC;AACnC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { LogEntry } from '../types.js';
2
+ import type { Transport } from './transport.js';
3
+ /** IPC channel for cluster worker → primary communication. */
4
+ export declare const CLUSTER_IPC_CHANNEL = "lograil:cluster:log";
5
+ export interface ClusterIpcTransportOptions {
6
+ /** IPC channel used to reach the primary process. */
7
+ channel?: string;
8
+ /** Transport name. */
9
+ name?: string;
10
+ }
11
+ /**
12
+ * Worker-side transport that sends entries to the primary process via
13
+ * `process.send()`. Safe to import in non-cluster environments — the write
14
+ * call is a no-op when `process.send` is unavailable.
15
+ */
16
+ export declare class ClusterIpcTransport implements Transport {
17
+ readonly name: string;
18
+ constructor(options?: ClusterIpcTransportOptions);
19
+ write(entry: LogEntry, _formatted: string): void;
20
+ /** Send a cross-process level command to the primary process. */
21
+ sendLevelCommand(level: number): void;
22
+ }
23
+ export interface ClusterReceiverOptions {
24
+ /** Reserved for future use. Currently all cluster messages share one channel. */
25
+ channel?: string;
26
+ }
27
+ /**
28
+ * Primary-side helper: listen on the cluster IPC channel and feed received
29
+ * worker entries into the provided `ingest` callback (typically
30
+ * `logger.ingestEntry`). Level-change commands are forwarded to
31
+ * `onLevelCommand` when provided. Returns an unregister function.
32
+ */
33
+ export declare function registerClusterReceiver(ingest: (entry: LogEntry) => void, options?: ClusterReceiverOptions & {
34
+ onLevelCommand?: (level: number) => void;
35
+ }): () => void;
36
+ //# sourceMappingURL=cluster-ipc.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,71 @@
1
+ import { isLogLevelCommand, normalizeLevel } from '../types.js';
2
+ /** IPC channel for cluster worker → primary communication. */
3
+ export const CLUSTER_IPC_CHANNEL = 'lograil:cluster:log';
4
+ /**
5
+ * Worker-side transport that sends entries to the primary process via
6
+ * `process.send()`. Safe to import in non-cluster environments — the write
7
+ * call is a no-op when `process.send` is unavailable.
8
+ */
9
+ export class ClusterIpcTransport {
10
+ constructor(options = {}) {
11
+ this.name = options.name ?? 'cluster-ipc';
12
+ }
13
+ write(entry, _formatted) {
14
+ try {
15
+ const proc = process;
16
+ if (typeof proc.send === 'function') {
17
+ proc.send(entry, (err) => {
18
+ if (err) {
19
+ /* primary gone or channel closed — drop silently */
20
+ }
21
+ });
22
+ }
23
+ }
24
+ catch {
25
+ /* process.send unavailable — drop silently */
26
+ }
27
+ }
28
+ /** Send a cross-process level command to the primary process. */
29
+ sendLevelCommand(level) {
30
+ try {
31
+ const proc = process;
32
+ if (typeof proc.send === 'function') {
33
+ const cmd = { __lograilCmd: true, __lograilCmdType: 'setLevel', level };
34
+ proc.send(cmd);
35
+ }
36
+ }
37
+ catch {
38
+ /* process.send unavailable — drop silently */
39
+ }
40
+ }
41
+ }
42
+ /**
43
+ * Primary-side helper: listen on the cluster IPC channel and feed received
44
+ * worker entries into the provided `ingest` callback (typically
45
+ * `logger.ingestEntry`). Level-change commands are forwarded to
46
+ * `onLevelCommand` when provided. Returns an unregister function.
47
+ */
48
+ export function registerClusterReceiver(ingest, options = {}) {
49
+ const onLevelCommand = options.onLevelCommand;
50
+ const proc = process;
51
+ if (!proc.on || !proc.removeListener)
52
+ return () => { };
53
+ const handler = (message) => {
54
+ if (isLogLevelCommand(message)) {
55
+ onLevelCommand?.(normalizeLevel(message.level));
56
+ return;
57
+ }
58
+ if (message &&
59
+ typeof message === 'object' &&
60
+ 'level' in message &&
61
+ 'message' in message &&
62
+ 'timestamp' in message) {
63
+ ingest(message);
64
+ }
65
+ };
66
+ proc.on('message', handler);
67
+ return () => {
68
+ proc.removeListener?.('message', handler);
69
+ };
70
+ }
71
+ //# sourceMappingURL=cluster-ipc.js.map
@@ -0,0 +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"}
@@ -0,0 +1,28 @@
1
+ import type { LogEntry, LogLevelName } from '../types.js';
2
+ import type { Formatter } from '../pipeline/formatter.js';
3
+ import type { Transport } from './transport.js';
4
+ export interface ConsoleTransportOptions {
5
+ name?: string;
6
+ formatter?: Formatter;
7
+ /** Map a level to the console method used. */
8
+ methodMap?: Partial<Record<string, (...args: unknown[]) => void>>;
9
+ /**
10
+ * Levels that should be written to `stderr` (via `console.error`). Any level
11
+ * listed here is routed to `console.error` even if `methodMap` maps it
12
+ * elsewhere. Defaults to `['error', 'fatal']` (matching the previous
13
+ * behaviour); add `'warn'` to also send warnings to stderr.
14
+ */
15
+ stderrLevels?: LogLevelName[];
16
+ }
17
+ /**
18
+ * Writes log entries to the global `console`. Suitable for both Web and
19
+ * Node/Electron runtimes.
20
+ */
21
+ export declare class ConsoleTransport implements Transport {
22
+ readonly name: string;
23
+ readonly formatter: Formatter;
24
+ private methodMap;
25
+ constructor(options?: ConsoleTransportOptions);
26
+ write(entry: LogEntry, formatted: string): void;
27
+ }
28
+ //# sourceMappingURL=console.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,44 @@
1
+ import { createLineFormatter } from '../pipeline/formatter.js';
2
+ // Snapshot the real console methods at module load so that, even if something
3
+ // later redirects the global `console` (see `Logger.redirectConsole`), this
4
+ // transport keeps writing to the original console and never recurses.
5
+ const realConsole = {
6
+ trace: console.trace.bind(console),
7
+ debug: console.debug.bind(console),
8
+ info: console.info.bind(console),
9
+ warn: console.warn.bind(console),
10
+ error: console.error.bind(console),
11
+ log: console.log.bind(console),
12
+ };
13
+ /**
14
+ * Writes log entries to the global `console`. Suitable for both Web and
15
+ * Node/Electron runtimes.
16
+ */
17
+ export class ConsoleTransport {
18
+ constructor(options = {}) {
19
+ this.name = options.name ?? 'console';
20
+ 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
+ // Route the requested levels to stderr (console.error). Applied after
31
+ // `methodMap` so an explicitly provided method for a level is not silently
32
+ // overridden. Defaults to empty — the default `methodMap` already sends
33
+ // `error`/`fatal` to stderr, so opt in with e.g. `stderrLevels: ['warn']`.
34
+ const stderrLevels = options.stderrLevels ?? [];
35
+ for (const level of stderrLevels) {
36
+ this.methodMap[level] = realConsole.error;
37
+ }
38
+ }
39
+ write(entry, formatted) {
40
+ const fn = this.methodMap[entry.levelName] ?? realConsole.log;
41
+ fn(formatted);
42
+ }
43
+ }
44
+ //# sourceMappingURL=console.js.map
@@ -0,0 +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"}
@@ -0,0 +1,69 @@
1
+ import type { LogEntry } from '../types.js';
2
+ import type { Transport } from './transport.js';
3
+ import type { IpcRenderer } from 'electron';
4
+ /** Minimal view of `IpcRenderer` the transport actually needs. */
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
+ export declare const LOGRAIL_CHANNEL = "lograil:log";
20
+ /**
21
+ * Metadata key (on `LogEntry.metadata`) used to mark entries that originated
22
+ * in a renderer process and arrived over IPC. The main runtime uses it to
23
+ * route those entries to a dedicated renderer log file.
24
+ */
25
+ export declare const RENDERER_PROCESS_MARKER = "__lograilProcess";
26
+ export interface ElectronIpcTransportOptions {
27
+ /** IPC channel used to reach the main process. */
28
+ channel?: string;
29
+ /** Transport name. */
30
+ name?: string;
31
+ /**
32
+ * Injected IPC sender. Use this when the renderer cannot reach
33
+ * `require('electron')` itself (e.g. `nodeIntegration: false` +
34
+ * `contextIsolation: true`): pass the `ipcRenderer` obtained from a preload
35
+ * bridge instead of letting the transport call `require('electron')`.
36
+ */
37
+ ipcRenderer?: IpcZeroCopySender;
38
+ }
39
+ /**
40
+ * Renderer-side transport. Forwards each log entry to the Electron main
41
+ * 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.
44
+ */
45
+ export declare class ElectronIpcTransport implements Transport {
46
+ readonly name: string;
47
+ readonly channel: string;
48
+ private injectedIpc?;
49
+ private resolvedIpc?;
50
+ constructor(options?: ElectronIpcTransportOptions);
51
+ private getIpc;
52
+ write(entry: LogEntry, _formatted: string): void;
53
+ /** Send a cross-process level command to the main process. */
54
+ sendLevelCommand(level: number): void;
55
+ }
56
+ export interface IpcReceiverOptions {
57
+ channel?: string;
58
+ }
59
+ /**
60
+ * Main-side helper: listen on the IPC channel and feed received renderer
61
+ * entries into the provided `ingest` callback (typically `logger.ingestEntry`).
62
+ * Level-change commands are forwarded to `onLevelCommand` when provided.
63
+ * Returns an unregister function.
64
+ */
65
+ export declare function registerIpcReceiver(ingest: (entry: LogEntry) => void, options?: IpcReceiverOptions & {
66
+ onLevelCommand?: (level: number) => void;
67
+ }): () => void;
68
+ export {};
69
+ //# sourceMappingURL=electron-ipc.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,146 @@
1
+ import { isLogLevelCommand, normalizeLevel } from '../types.js';
2
+ import { getElectron } from '../runtime/electron-binding.js';
3
+ // Captured at module load so error reporting never recurses into itself.
4
+ const RAW_CONSOLE_ERROR = typeof console !== 'undefined' && typeof console.error === 'function'
5
+ ? console.error.bind(console)
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
+ export const LOGRAIL_CHANNEL = 'lograil:log';
25
+ /**
26
+ * Metadata key (on `LogEntry.metadata`) used to mark entries that originated
27
+ * in a renderer process and arrived over IPC. The main runtime uses it to
28
+ * route those entries to a dedicated renderer log file.
29
+ */
30
+ export const RENDERER_PROCESS_MARKER = '__lograilProcess';
31
+ /**
32
+ * Renderer-side transport. Forwards each log entry to the Electron main
33
+ * 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.
36
+ */
37
+ export class ElectronIpcTransport {
38
+ constructor(options = {}) {
39
+ this.channel = options.channel ?? LOGRAIL_CHANNEL;
40
+ this.name = options.name ?? `ipc:${this.channel}`;
41
+ this.injectedIpc = options.ipcRenderer;
42
+ }
43
+ getIpc() {
44
+ if (this.injectedIpc)
45
+ return this.injectedIpc;
46
+ if (!this.resolvedIpc) {
47
+ try {
48
+ this.resolvedIpc = getElectron().ipcRenderer;
49
+ }
50
+ catch {
51
+ return undefined;
52
+ }
53
+ }
54
+ return this.resolvedIpc;
55
+ }
56
+ write(entry, _formatted) {
57
+ const ipc = this.getIpc();
58
+ if (!ipc)
59
+ return;
60
+ 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
+ }
72
+ }
73
+ catch (err) {
74
+ // Report IPC failure so users can diagnose renderer → main delivery issues.
75
+ RAW_CONSOLE_ERROR(`[lograil] ipc transport (${this.name}) send failed:`, err);
76
+ }
77
+ }
78
+ /** Send a cross-process level command to the main process. */
79
+ sendLevelCommand(level) {
80
+ const ipc = this.getIpc();
81
+ if (!ipc)
82
+ return;
83
+ const cmd = { __lograilCmd: true, __lograilCmdType: 'setLevel', level };
84
+ 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
+ }
93
+ }
94
+ catch {
95
+ /* silently drop — command loss is not fatal */
96
+ }
97
+ }
98
+ }
99
+ /**
100
+ * Main-side helper: listen on the IPC channel and feed received renderer
101
+ * entries into the provided `ingest` callback (typically `logger.ingestEntry`).
102
+ * Level-change commands are forwarded to `onLevelCommand` when provided.
103
+ * Returns an unregister function.
104
+ */
105
+ export function registerIpcReceiver(ingest, options = {}) {
106
+ const channel = options.channel ?? LOGRAIL_CHANNEL;
107
+ const onLevelCommand = options.onLevelCommand;
108
+ // `electron` is only present in a main process; resolve it lazily.
109
+ const ipcMain = getElectron().ipcMain;
110
+ 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
+ });
141
+ }
142
+ };
143
+ ipcMain.on(channel, handler);
144
+ return () => ipcMain.removeListener(channel, handler);
145
+ }
146
+ //# sourceMappingURL=electron-ipc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"electron-ipc.js","sourceRoot":"","sources":["../../../src/transport/electron-ipc.ts"],"names":[],"mappings":"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"}