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,45 @@
1
+ import type { LogEntry } from '../types.js';
2
+ import type { Filter } from './filter.js';
3
+ import type { Processor } from './processor.js';
4
+ import type { Formatter } from './formatter.js';
5
+ export interface PipelineOptions {
6
+ filters?: Filter[];
7
+ processors?: Processor[];
8
+ formatter?: Formatter;
9
+ }
10
+ /**
11
+ * The processing pipeline sits between the Logger (entry creation) and the
12
+ * Transports (output). For each entry it:
13
+ *
14
+ * 1. runs all {@link Filter}s — if any returns `false` the entry is dropped;
15
+ * 2. runs all {@link Processor}s in order, allowing enrichment / redaction;
16
+ * 3. exposes a {@link Formatter} used by transports to serialize the entry.
17
+ */
18
+ export declare class Pipeline {
19
+ private filters;
20
+ private processors;
21
+ private formatter;
22
+ private cachedFilter;
23
+ /**
24
+ * Error sink for a throwing {@link Filter} or {@link Processor}. The logger
25
+ * wires this to its own global error handler; when unset, the throw is simply
26
+ * swallowed and the entry proceeds unchanged (for processors) or is dropped
27
+ * (for filters).
28
+ */
29
+ onError?: (err: unknown, info: {
30
+ phase: 'filter' | 'process';
31
+ entry: LogEntry;
32
+ }) => void;
33
+ constructor(options?: PipelineOptions);
34
+ addFilter(filter: Filter): void;
35
+ addProcessor(processor: Processor): void;
36
+ removeFilter(filter: Filter): void;
37
+ removeProcessor(processor: Processor): void;
38
+ setFormatter(formatter: Formatter): void;
39
+ getFormatter(): Formatter;
40
+ /**
41
+ * Run filters and processors. Returns `null` when the entry is filtered out.
42
+ */
43
+ process(entry: LogEntry): LogEntry | null;
44
+ }
45
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../src/pipeline/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,YAAY,CAAiC;IACrD;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;QAAC,KAAK,EAAE,QAAQ,CAAA;KAAE,KAAK,IAAI,CAAC;gBAE7E,OAAO,GAAE,eAAoB;IAMzC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIxC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMlC,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAK3C,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIxC,YAAY,IAAI,SAAS;IAIzB;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;CA4B1C"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Pipeline = void 0;
4
+ const filter_js_1 = require("./filter.js");
5
+ /**
6
+ * The processing pipeline sits between the Logger (entry creation) and the
7
+ * Transports (output). For each entry it:
8
+ *
9
+ * 1. runs all {@link Filter}s — if any returns `false` the entry is dropped;
10
+ * 2. runs all {@link Processor}s in order, allowing enrichment / redaction;
11
+ * 3. exposes a {@link Formatter} used by transports to serialize the entry.
12
+ */
13
+ class Pipeline {
14
+ constructor(options = {}) {
15
+ this.cachedFilter = undefined;
16
+ this.filters = options.filters ? [...options.filters] : [];
17
+ this.processors = options.processors ? [...options.processors] : [];
18
+ this.formatter = options.formatter ?? ((e) => e);
19
+ }
20
+ addFilter(filter) {
21
+ this.filters.push(filter);
22
+ this.cachedFilter = undefined;
23
+ }
24
+ addProcessor(processor) {
25
+ this.processors.push(processor);
26
+ }
27
+ removeFilter(filter) {
28
+ const i = this.filters.indexOf(filter);
29
+ if (i >= 0)
30
+ this.filters.splice(i, 1);
31
+ this.cachedFilter = undefined;
32
+ }
33
+ removeProcessor(processor) {
34
+ const i = this.processors.indexOf(processor);
35
+ if (i >= 0)
36
+ this.processors.splice(i, 1);
37
+ }
38
+ setFormatter(formatter) {
39
+ this.formatter = formatter;
40
+ }
41
+ getFormatter() {
42
+ return this.formatter;
43
+ }
44
+ /**
45
+ * Run filters and processors. Returns `null` when the entry is filtered out.
46
+ */
47
+ process(entry) {
48
+ if (this.filters.length) {
49
+ if (this.cachedFilter === undefined) {
50
+ this.cachedFilter =
51
+ this.filters.length === 1 ? this.filters[0] : (0, filter_js_1.combineFilters)(this.filters);
52
+ }
53
+ try {
54
+ if (!this.cachedFilter(entry)) {
55
+ return null;
56
+ }
57
+ }
58
+ catch (err) {
59
+ this.onError?.(err, { phase: 'filter', entry });
60
+ return null;
61
+ }
62
+ }
63
+ let current = entry;
64
+ for (const processor of this.processors) {
65
+ try {
66
+ current = processor(current);
67
+ }
68
+ catch (err) {
69
+ // A broken processor must not crash logging. Keep the last good entry
70
+ // and continue with the remaining processors.
71
+ this.onError?.(err, { phase: 'process', entry });
72
+ }
73
+ if (!current)
74
+ return null;
75
+ }
76
+ return current;
77
+ }
78
+ }
79
+ exports.Pipeline = Pipeline;
80
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/pipeline/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { LogEntry } from '../types.js';
2
+ /**
3
+ * A Processor transforms a log entry before it is formatted. Processors must
4
+ * return (the same or a new) entry. They are useful for enrichment, redaction
5
+ * or normalization.
6
+ */
7
+ export type Processor = (entry: LogEntry) => LogEntry;
8
+ /**
9
+ * Default processor: returns the entry unchanged.
10
+ */
11
+ export declare const identityProcessor: Processor;
12
+ /**
13
+ * Create a processor that redacts sensitive data before formatting. It walks
14
+ * `context`, `metadata` and each element of `args`, replacing any value whose
15
+ * path matches one of `keys` with `replacement` (default `"[REDACTED]"`).
16
+ *
17
+ * Matching is **structural** — the original objects are never mutated; only the
18
+ * branches that actually contain a match are cloned. When nothing matches the
19
+ * entry is returned unchanged (same reference), so the common "no secret" case
20
+ * adds no allocation.
21
+ *
22
+ * @example
23
+ * createRedactProcessor(['password']) // any `password` at any depth
24
+ * createRedactProcessor(['user.password']) // only `user.password`
25
+ * createRedactProcessor(['*.token', 'user.*']) // wildcards
26
+ */
27
+ /**
28
+ * Common secret / PII key names redacted by {@link createRedactProcessor} when
29
+ * no explicit key list is supplied. Covers passwords, tokens, API keys, auth
30
+ * headers, cookies, private keys and a few PII fields.
31
+ */
32
+ export declare const DEFAULT_SENSITIVE_KEYS: string[];
33
+ export declare function createRedactProcessor(keys?: string[], replacement?: unknown): Processor;
34
+ /**
35
+ * A Serializer transforms a single value keyed by `name` before formatting.
36
+ * `entry` is passed for contextual serialization (e.g. capturing the level).
37
+ */
38
+ export type Serializer = (value: unknown, entry: LogEntry) => unknown;
39
+ /**
40
+ * Create a processor that normalizes values by key name before formatting. For
41
+ * every property named `key` found in `context`, `metadata`, each element of
42
+ * `args` (and the entry's `error`), the matching serializer replaces the value.
43
+ * Matching is by property name at **any depth** (e.g. a `req` serializer runs on
44
+ * any object that has a `req` property).
45
+ *
46
+ * Transformation is **structural** — only the branches that contain a matching
47
+ * key are cloned; when no serializer fires the entry is returned unchanged (same
48
+ * reference), so the common "no serializer matched" case adds no allocation.
49
+ *
50
+ * @example
51
+ * createSerializeProcessor({
52
+ * err: (e) => ({ name: e.name, message: e.message, stack: e.stack }),
53
+ * user: (u) => ({ id: u.id }), // drop the rest of the user object
54
+ * })
55
+ */
56
+ export declare function createSerializeProcessor(serializers: Record<string, Serializer>): Processor;
57
+ /**
58
+ * A preset of common {@link Serializer}s keyed by the property names they match
59
+ * (`error`, `date`, `buffer`, `url`, `req`, `res`). Spread it into your own
60
+ * serializer map to get safe, compact representations of these types out of the
61
+ * box, e.g. `createSerializeProcessor({ ...createDefaultSerializers(), user })`.
62
+ *
63
+ * Matching is by property name at any depth (see {@link createSerializeProcessor}),
64
+ * so any object with a `req`/`res`/`url`/`error` property is normalized.
65
+ */
66
+ export declare function createDefaultSerializers(): Record<string, Serializer>;
67
+ //# sourceMappingURL=processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../../src/pipeline/processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAA4B,CAAC;AAwE7D;;;;;;;;;;;;;;GAcG;AACH;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,EA0B1C,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,IAAI,GAAE,MAAM,EAA2B,EACvC,WAAW,GAAE,OAAsB,GAClC,SAAS,CAoBX;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;AAoCtE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,CA+B3F;AAqCD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CASrE"}
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_SENSITIVE_KEYS = exports.identityProcessor = void 0;
4
+ exports.createRedactProcessor = createRedactProcessor;
5
+ exports.createSerializeProcessor = createSerializeProcessor;
6
+ exports.createDefaultSerializers = createDefaultSerializers;
7
+ /**
8
+ * Default processor: returns the entry unchanged.
9
+ */
10
+ const identityProcessor = (entry) => entry;
11
+ exports.identityProcessor = identityProcessor;
12
+ /**
13
+ * Compile a redaction spec into a path matcher.
14
+ *
15
+ * - A bare key (no `.` and no `*`), e.g. `"password"`, matches **any** property
16
+ * named that way at any depth (the historical behavior — convenient for
17
+ * common secrets).
18
+ * - A dotted spec, e.g. `"user.password"` or `"*.password"`, matches only the
19
+ * exact path. `*` matches any single key/array index at that position. Numeric
20
+ * array indices are matched positionally (`"list.0.id"`).
21
+ */
22
+ function compileMatcher(spec) {
23
+ if (!spec.includes('.') && !spec.includes('*')) {
24
+ return (p) => p.length > 0 && p[p.length - 1] === spec;
25
+ }
26
+ const segs = spec.split('.');
27
+ return (p) => {
28
+ if (p.length !== segs.length)
29
+ return false;
30
+ for (let i = 0; i < segs.length; i++) {
31
+ const s = segs[i];
32
+ if (s === '*')
33
+ continue;
34
+ if (String(p[i]) !== s)
35
+ return false;
36
+ }
37
+ return true;
38
+ };
39
+ }
40
+ function redactNode(node, path, matchers, replacement) {
41
+ if (Array.isArray(node)) {
42
+ let changed = false;
43
+ const out = new Array(node.length);
44
+ for (let i = 0; i < node.length; i++) {
45
+ const cp = [...path, i];
46
+ if (matchers.some((m) => m(cp))) {
47
+ out[i] = replacement;
48
+ changed = true;
49
+ }
50
+ else {
51
+ const r = redactNode(node[i], cp, matchers, replacement);
52
+ out[i] = r;
53
+ if (r !== node[i])
54
+ changed = true;
55
+ }
56
+ }
57
+ return changed ? out : node;
58
+ }
59
+ if (node !== null && typeof node === 'object') {
60
+ let changed = false;
61
+ const out = {};
62
+ for (const k of Object.keys(node)) {
63
+ const cp = [...path, k];
64
+ const v = node[k];
65
+ if (matchers.some((m) => m(cp))) {
66
+ out[k] = replacement;
67
+ changed = true;
68
+ }
69
+ else {
70
+ const r = redactNode(v, cp, matchers, replacement);
71
+ out[k] = r;
72
+ if (r !== v)
73
+ changed = true;
74
+ }
75
+ }
76
+ return changed ? out : node;
77
+ }
78
+ return node;
79
+ }
80
+ /**
81
+ * Create a processor that redacts sensitive data before formatting. It walks
82
+ * `context`, `metadata` and each element of `args`, replacing any value whose
83
+ * path matches one of `keys` with `replacement` (default `"[REDACTED]"`).
84
+ *
85
+ * Matching is **structural** — the original objects are never mutated; only the
86
+ * branches that actually contain a match are cloned. When nothing matches the
87
+ * entry is returned unchanged (same reference), so the common "no secret" case
88
+ * adds no allocation.
89
+ *
90
+ * @example
91
+ * createRedactProcessor(['password']) // any `password` at any depth
92
+ * createRedactProcessor(['user.password']) // only `user.password`
93
+ * createRedactProcessor(['*.token', 'user.*']) // wildcards
94
+ */
95
+ /**
96
+ * Common secret / PII key names redacted by {@link createRedactProcessor} when
97
+ * no explicit key list is supplied. Covers passwords, tokens, API keys, auth
98
+ * headers, cookies, private keys and a few PII fields.
99
+ */
100
+ exports.DEFAULT_SENSITIVE_KEYS = [
101
+ 'password',
102
+ 'passwd',
103
+ 'pwd',
104
+ 'secret',
105
+ 'token',
106
+ 'accessToken',
107
+ 'refreshToken',
108
+ 'apiKey',
109
+ 'api_key',
110
+ 'authorization',
111
+ 'auth',
112
+ 'cookie',
113
+ 'setCookie',
114
+ 'set-cookie',
115
+ 'privateKey',
116
+ 'private_key',
117
+ 'credentials',
118
+ 'credential',
119
+ 'sessionId',
120
+ 'session',
121
+ 'csrfToken',
122
+ 'csrf',
123
+ 'otp',
124
+ 'ssn',
125
+ 'x-api-key',
126
+ ];
127
+ function createRedactProcessor(keys = exports.DEFAULT_SENSITIVE_KEYS, replacement = '[REDACTED]') {
128
+ if (keys.length === 0)
129
+ return exports.identityProcessor;
130
+ const matchers = keys.map(compileMatcher);
131
+ return (entry) => {
132
+ const context = redactNode(entry.context, [], matchers, replacement);
133
+ const metadata = redactNode(entry.metadata, [], matchers, replacement);
134
+ let argsChanged = false;
135
+ const args = entry.args.map((a) => {
136
+ const r = redactNode(a, [], matchers, replacement);
137
+ if (r !== a)
138
+ argsChanged = true;
139
+ return r;
140
+ });
141
+ if (context === entry.context && metadata === entry.metadata && !argsChanged) {
142
+ return entry;
143
+ }
144
+ return { ...entry, context, metadata, args: argsChanged ? args : entry.args };
145
+ };
146
+ }
147
+ function serializeNode(node, serializers, entry) {
148
+ if (Array.isArray(node)) {
149
+ let changed = false;
150
+ const out = new Array(node.length);
151
+ for (let i = 0; i < node.length; i++) {
152
+ const r = serializeNode(node[i], serializers, entry);
153
+ out[i] = r;
154
+ if (r !== node[i])
155
+ changed = true;
156
+ }
157
+ return changed ? out : node;
158
+ }
159
+ if (node !== null && typeof node === 'object') {
160
+ let changed = false;
161
+ const out = {};
162
+ for (const k of Object.keys(node)) {
163
+ const v = node[k];
164
+ if (serializers[k]) {
165
+ out[k] = serializers[k](v, entry);
166
+ changed = true;
167
+ }
168
+ else {
169
+ const r = serializeNode(v, serializers, entry);
170
+ out[k] = r;
171
+ if (r !== v)
172
+ changed = true;
173
+ }
174
+ }
175
+ return changed ? out : node;
176
+ }
177
+ return node;
178
+ }
179
+ /**
180
+ * Create a processor that normalizes values by key name before formatting. For
181
+ * every property named `key` found in `context`, `metadata`, each element of
182
+ * `args` (and the entry's `error`), the matching serializer replaces the value.
183
+ * Matching is by property name at **any depth** (e.g. a `req` serializer runs on
184
+ * any object that has a `req` property).
185
+ *
186
+ * Transformation is **structural** — only the branches that contain a matching
187
+ * key are cloned; when no serializer fires the entry is returned unchanged (same
188
+ * reference), so the common "no serializer matched" case adds no allocation.
189
+ *
190
+ * @example
191
+ * createSerializeProcessor({
192
+ * err: (e) => ({ name: e.name, message: e.message, stack: e.stack }),
193
+ * user: (u) => ({ id: u.id }), // drop the rest of the user object
194
+ * })
195
+ */
196
+ function createSerializeProcessor(serializers) {
197
+ if (!serializers || Object.keys(serializers).length === 0)
198
+ return exports.identityProcessor;
199
+ return (entry) => {
200
+ const context = serializeNode(entry.context, serializers, entry);
201
+ const metadata = serializeNode(entry.metadata, serializers, entry);
202
+ let argsChanged = false;
203
+ const args = entry.args.map((a) => {
204
+ const r = serializeNode(a, serializers, entry);
205
+ if (r !== a)
206
+ argsChanged = true;
207
+ return r;
208
+ });
209
+ let error = entry.error;
210
+ let errorChanged = false;
211
+ if (error !== undefined && serializers['error']) {
212
+ const r = serializers['error'](error, entry);
213
+ if (r !== error) {
214
+ error = r;
215
+ errorChanged = true;
216
+ }
217
+ }
218
+ if (context === entry.context && metadata === entry.metadata && !argsChanged && !errorChanged) {
219
+ return entry;
220
+ }
221
+ return {
222
+ ...entry,
223
+ context,
224
+ metadata,
225
+ args: argsChanged ? args : entry.args,
226
+ ...(errorChanged ? { error } : {}),
227
+ };
228
+ };
229
+ }
230
+ function serializeErrorValue(v) {
231
+ return v instanceof Error ? { name: v.name, message: v.message, stack: v.stack } : v;
232
+ }
233
+ function serializeBufferValue(v) {
234
+ if (typeof Buffer !== 'undefined' && Buffer.isBuffer(v))
235
+ return `Buffer(${v.length})`;
236
+ if (v instanceof ArrayBuffer)
237
+ return `ArrayBuffer(${v.byteLength})`;
238
+ if (ArrayBuffer.isView(v)) {
239
+ return `${v.constructor.name}(${v.byteLength})`;
240
+ }
241
+ return v;
242
+ }
243
+ function serializeUrlValue(v) {
244
+ return v instanceof URL ? v.href : v;
245
+ }
246
+ function serializeDateValue(v) {
247
+ return v instanceof Date ? v.toISOString() : v;
248
+ }
249
+ function serializeRequestValue(v) {
250
+ if (!v || typeof v !== 'object')
251
+ return v;
252
+ const r = v;
253
+ if (!('method' in r) && !('url' in r))
254
+ return v;
255
+ return { method: r.method, url: r.url, headers: r.headers };
256
+ }
257
+ function serializeResponseValue(v) {
258
+ if (!v || typeof v !== 'object')
259
+ return v;
260
+ const r = v;
261
+ if (!('status' in r) && !('statusCode' in r))
262
+ return v;
263
+ return { status: r.status ?? r.statusCode, headers: r.headers };
264
+ }
265
+ /**
266
+ * A preset of common {@link Serializer}s keyed by the property names they match
267
+ * (`error`, `date`, `buffer`, `url`, `req`, `res`). Spread it into your own
268
+ * serializer map to get safe, compact representations of these types out of the
269
+ * box, e.g. `createSerializeProcessor({ ...createDefaultSerializers(), user })`.
270
+ *
271
+ * Matching is by property name at any depth (see {@link createSerializeProcessor}),
272
+ * so any object with a `req`/`res`/`url`/`error` property is normalized.
273
+ */
274
+ function createDefaultSerializers() {
275
+ return {
276
+ error: serializeErrorValue,
277
+ date: serializeDateValue,
278
+ buffer: serializeBufferValue,
279
+ url: serializeUrlValue,
280
+ req: serializeRequestValue,
281
+ res: serializeResponseValue,
282
+ };
283
+ }
284
+ //# sourceMappingURL=processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.js","sourceRoot":"","sources":["../../../src/pipeline/processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { LogLevelName } from '../types.js';
2
+ import type { Filter } from './filter.js';
3
+ export interface SamplingOptions {
4
+ /**
5
+ * Probability (0..1) that a sampled-level entry is kept. `1` (default) keeps
6
+ * everything; `0` drops all sampled-level entries. Applied before rate
7
+ * limiting. Sampling is intentionally lossy — only enable it for high-volume,
8
+ * low-value levels (e.g. `debug`/`info`).
9
+ */
10
+ rate?: number;
11
+ /**
12
+ * Restrict sampling to these level names. Entries of other levels always pass
13
+ * through untouched. Omit to sample every level.
14
+ */
15
+ levels?: LogLevelName[];
16
+ /**
17
+ * Maximum entries kept per second (token-bucket refill rate). When set, bursts
18
+ * up to `burst` are allowed, then entries are dropped until tokens refill.
19
+ * Off when unset. Combined with `rate` via logical AND.
20
+ */
21
+ maxPerSecond?: number;
22
+ /** Burst capacity for `maxPerSecond`; defaults to `maxPerSecond`. */
23
+ burst?: number;
24
+ }
25
+ /**
26
+ * Build a {@link Filter} that drops log entries to reduce volume. Two orthogonal
27
+ * strategies are supported and combined with a logical AND:
28
+ *
29
+ * - **probabilistic** (`rate`): keep each entry with probability `rate`;
30
+ * - **rate limiting** (`maxPerSecond` + `burst`): a token bucket caps throughput
31
+ * per second, tolerating short bursts.
32
+ *
33
+ * Entries outside `levels` are always kept. Because this is a filter, sampled
34
+ * entries never reach processors, formatters or transports — so sampling is also
35
+ * the cheapest way to cut cost under load.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * logger.getPipeline().addFilter(
40
+ * createSampler({ levels: ['debug', 'info'], maxPerSecond: 100, burst: 200 }),
41
+ * );
42
+ * ```
43
+ */
44
+ export declare function createSampler(options?: SamplingOptions): Filter;
45
+ //# sourceMappingURL=sampler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sampler.d.ts","sourceRoot":"","sources":["../../../src/pipeline/sampler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,eAAoB,GAAG,MAAM,CAuCnE"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSampler = createSampler;
4
+ /**
5
+ * Build a {@link Filter} that drops log entries to reduce volume. Two orthogonal
6
+ * strategies are supported and combined with a logical AND:
7
+ *
8
+ * - **probabilistic** (`rate`): keep each entry with probability `rate`;
9
+ * - **rate limiting** (`maxPerSecond` + `burst`): a token bucket caps throughput
10
+ * per second, tolerating short bursts.
11
+ *
12
+ * Entries outside `levels` are always kept. Because this is a filter, sampled
13
+ * entries never reach processors, formatters or transports — so sampling is also
14
+ * the cheapest way to cut cost under load.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * logger.getPipeline().addFilter(
19
+ * createSampler({ levels: ['debug', 'info'], maxPerSecond: 100, burst: 200 }),
20
+ * );
21
+ * ```
22
+ */
23
+ function createSampler(options = {}) {
24
+ const rate = options.rate ?? 1;
25
+ const levelSet = options.levels ? new Set(options.levels) : undefined;
26
+ const maxPerSecond = options.maxPerSecond;
27
+ const capacity = maxPerSecond !== undefined ? (options.burst ?? maxPerSecond) : 0;
28
+ // Token-bucket state for rate limiting; lazily initialized on first use.
29
+ let tokens = capacity;
30
+ let lastRefill = 0;
31
+ return (entry) => {
32
+ // Levels not opted into sampling always pass through.
33
+ if (levelSet && !levelSet.has(entry.levelName))
34
+ return true;
35
+ // Probabilistic sampling.
36
+ if (rate < 1 && Math.random() >= rate)
37
+ return false;
38
+ // Rate limiting (token bucket keyed on the entry's ms timestamp).
39
+ if (maxPerSecond !== undefined) {
40
+ const now = entry.timestamp;
41
+ if (lastRefill === 0) {
42
+ lastRefill = now;
43
+ tokens = capacity;
44
+ }
45
+ else {
46
+ const elapsed = now - lastRefill;
47
+ if (elapsed > 0) {
48
+ tokens = Math.min(capacity, tokens + (elapsed * maxPerSecond) / 1000);
49
+ lastRefill = now;
50
+ }
51
+ }
52
+ if (tokens >= 1) {
53
+ tokens -= 1;
54
+ }
55
+ else {
56
+ return false;
57
+ }
58
+ }
59
+ return true;
60
+ };
61
+ }
62
+ //# sourceMappingURL=sampler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sampler.js","sourceRoot":"","sources":["../../../src/pipeline/sampler.ts"],"names":[],"mappings":";;AA6CA,sCAuCC;AA1DD;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,aAAa,CAAC,UAA2B,EAAE;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC1C,MAAM,QAAQ,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAElF,yEAAyE;IACzE,IAAI,MAAM,GAAG,QAAQ,CAAC;IACtB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,OAAO,CAAC,KAAe,EAAW,EAAE;QAClC,sDAAsD;QACtD,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QAE5D,0BAA0B;QAC1B,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC;QAEpD,kEAAkE;QAClE,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;YAC5B,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;gBACrB,UAAU,GAAG,GAAG,CAAC;gBACjB,MAAM,GAAG,QAAQ,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,GAAG,GAAG,UAAU,CAAC;gBACjC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;oBAChB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;oBACtE,UAAU,GAAG,GAAG,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;gBAChB,MAAM,IAAI,CAAC,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './plugin.js';
2
+ export * from './manager.js';
3
+ export * from './otel-trace.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugin/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./plugin.js"), exports);
18
+ __exportStar(require("./manager.js"), exports);
19
+ __exportStar(require("./otel-trace.js"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugin/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,+CAA6B;AAC7B,kDAAgC"}