evlog 2.14.1 → 2.15.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 (180) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +4 -4
  3. package/dist/adapters/axiom.d.mts +18 -27
  4. package/dist/adapters/axiom.d.mts.map +1 -1
  5. package/dist/adapters/axiom.mjs +40 -30
  6. package/dist/adapters/axiom.mjs.map +1 -1
  7. package/dist/adapters/better-stack.d.mts +11 -24
  8. package/dist/adapters/better-stack.d.mts.map +1 -1
  9. package/dist/adapters/better-stack.mjs +34 -29
  10. package/dist/adapters/better-stack.mjs.map +1 -1
  11. package/dist/adapters/datadog.d.mts +1 -1
  12. package/dist/adapters/datadog.d.mts.map +1 -1
  13. package/dist/adapters/datadog.mjs +10 -4
  14. package/dist/adapters/datadog.mjs.map +1 -1
  15. package/dist/adapters/fs.d.mts +2 -2
  16. package/dist/adapters/fs.d.mts.map +1 -1
  17. package/dist/adapters/fs.mjs +19 -7
  18. package/dist/adapters/fs.mjs.map +1 -1
  19. package/dist/adapters/hyperdx.d.mts +1 -1
  20. package/dist/adapters/hyperdx.mjs +1 -2
  21. package/dist/adapters/hyperdx.mjs.map +1 -1
  22. package/dist/adapters/otlp.d.mts +1 -1
  23. package/dist/adapters/otlp.d.mts.map +1 -1
  24. package/dist/adapters/otlp.mjs +36 -31
  25. package/dist/adapters/otlp.mjs.map +1 -1
  26. package/dist/adapters/posthog.d.mts +50 -70
  27. package/dist/adapters/posthog.d.mts.map +1 -1
  28. package/dist/adapters/posthog.mjs +50 -85
  29. package/dist/adapters/posthog.mjs.map +1 -1
  30. package/dist/adapters/sentry.d.mts +1 -1
  31. package/dist/adapters/sentry.d.mts.map +1 -1
  32. package/dist/adapters/sentry.mjs +15 -5
  33. package/dist/adapters/sentry.mjs.map +1 -1
  34. package/dist/ai/index.d.mts +1 -1
  35. package/dist/{audit-DQoBo7Dl.mjs → audit--n0QRR2Y.mjs} +152 -13
  36. package/dist/audit--n0QRR2Y.mjs.map +1 -0
  37. package/dist/{audit-CTIviX3P.d.mts → audit-CJl-wZ10.d.mts} +134 -2
  38. package/dist/audit-CJl-wZ10.d.mts.map +1 -0
  39. package/dist/better-auth/index.d.mts +1 -1
  40. package/dist/browser.d.mts +1 -1
  41. package/dist/define-D6OJdSUH.mjs +63 -0
  42. package/dist/define-D6OJdSUH.mjs.map +1 -0
  43. package/dist/define-Fp8TrdEB.d.mts +57 -0
  44. package/dist/define-Fp8TrdEB.d.mts.map +1 -0
  45. package/dist/{dist-Do8P4zWd.mjs → dist-BIlS38vi.mjs} +1 -1
  46. package/dist/dist-BIlS38vi.mjs.map +1 -0
  47. package/dist/drain-ByWUeOQC.mjs +160 -0
  48. package/dist/drain-ByWUeOQC.mjs.map +1 -0
  49. package/dist/elysia/index.d.mts +25 -2
  50. package/dist/elysia/index.d.mts.map +1 -1
  51. package/dist/elysia/index.mjs +53 -20
  52. package/dist/elysia/index.mjs.map +1 -1
  53. package/dist/enricher-BA6viylF.mjs +95 -0
  54. package/dist/enricher-BA6viylF.mjs.map +1 -0
  55. package/dist/enricher-CLSnrzrr.d.mts +42 -0
  56. package/dist/enricher-CLSnrzrr.d.mts.map +1 -0
  57. package/dist/enrichers.d.mts +16 -9
  58. package/dist/enrichers.d.mts.map +1 -1
  59. package/dist/enrichers.mjs +81 -64
  60. package/dist/enrichers.mjs.map +1 -1
  61. package/dist/{error-C7gSQVqk.d.mts → error-C-66_G2M.d.mts} +2 -2
  62. package/dist/{error-C7gSQVqk.d.mts.map → error-C-66_G2M.d.mts.map} +1 -1
  63. package/dist/error.d.mts +1 -1
  64. package/dist/{errors-BJRXUfMg.mjs → errors-BQgyQ9xe.mjs} +1 -1
  65. package/dist/{errors-BJRXUfMg.mjs.map → errors-BQgyQ9xe.mjs.map} +1 -1
  66. package/dist/{errors-4MPmTzjY.d.mts → errors-DQoYsDW1.d.mts} +2 -2
  67. package/dist/{errors-4MPmTzjY.d.mts.map → errors-DQoYsDW1.d.mts.map} +1 -1
  68. package/dist/event-ef-5Dbxg.mjs +53 -0
  69. package/dist/event-ef-5Dbxg.mjs.map +1 -0
  70. package/dist/express/index.d.mts +2 -2
  71. package/dist/express/index.d.mts.map +1 -1
  72. package/dist/express/index.mjs +17 -15
  73. package/dist/express/index.mjs.map +1 -1
  74. package/dist/fastify/index.d.mts +2 -2
  75. package/dist/fastify/index.d.mts.map +1 -1
  76. package/dist/fastify/index.mjs +19 -20
  77. package/dist/fastify/index.mjs.map +1 -1
  78. package/dist/fork-D44V93-K.mjs +227 -0
  79. package/dist/fork-D44V93-K.mjs.map +1 -0
  80. package/dist/{headers-D74M0wsg.mjs → headers-CU-QqnYg.mjs} +19 -2
  81. package/dist/headers-CU-QqnYg.mjs.map +1 -0
  82. package/dist/hono/index.d.mts +2 -2
  83. package/dist/hono/index.d.mts.map +1 -1
  84. package/dist/hono/index.mjs +14 -10
  85. package/dist/hono/index.mjs.map +1 -1
  86. package/dist/http.d.mts +1 -1
  87. package/dist/index.d.mts +8 -7
  88. package/dist/index.mjs +3 -2
  89. package/dist/integration-Bz8X6_Lb.mjs +75 -0
  90. package/dist/integration-Bz8X6_Lb.mjs.map +1 -0
  91. package/dist/{logger-DttRJRGa.d.mts → logger-Brt5-WMK.d.mts} +9 -3
  92. package/dist/logger-Brt5-WMK.d.mts.map +1 -0
  93. package/dist/logger.d.mts +2 -2
  94. package/dist/logger.mjs +2 -2
  95. package/dist/middleware-CGM-bOvE.d.mts +72 -0
  96. package/dist/middleware-CGM-bOvE.d.mts.map +1 -0
  97. package/dist/nestjs/index.d.mts +2 -2
  98. package/dist/nestjs/index.mjs +3 -4
  99. package/dist/nestjs/index.mjs.map +1 -1
  100. package/dist/next/client.d.mts +1 -1
  101. package/dist/next/index.d.mts +4 -4
  102. package/dist/next/index.mjs +3 -3
  103. package/dist/next/instrumentation.d.mts +1 -1
  104. package/dist/next/instrumentation.mjs +1 -1
  105. package/dist/nitro/errorHandler.mjs +2 -2
  106. package/dist/nitro/module.d.mts +2 -2
  107. package/dist/nitro/plugin.mjs +21 -11
  108. package/dist/nitro/plugin.mjs.map +1 -1
  109. package/dist/nitro/v3/errorHandler.mjs +3 -3
  110. package/dist/nitro/v3/index.d.mts +2 -2
  111. package/dist/nitro/v3/module.d.mts +1 -1
  112. package/dist/nitro/v3/plugin.mjs +29 -17
  113. package/dist/nitro/v3/plugin.mjs.map +1 -1
  114. package/dist/nitro/v3/useLogger.d.mts +1 -1
  115. package/dist/{nitro-CPPRCPbG.d.mts → nitro-DHPb9dXG.d.mts} +2 -2
  116. package/dist/{nitro-CPPRCPbG.d.mts.map → nitro-DHPb9dXG.d.mts.map} +1 -1
  117. package/dist/{nitro-OmT_M4Pb.mjs → nitro-DavLelNz.mjs} +2 -2
  118. package/dist/nitro-DavLelNz.mjs.map +1 -0
  119. package/dist/{nitroConfigBridge-C37lXaNm.mjs → nitroConfigBridge-aZ1e5upQ.mjs} +1 -1
  120. package/dist/nitroConfigBridge-aZ1e5upQ.mjs.map +1 -0
  121. package/dist/nuxt/module.d.mts +1 -1
  122. package/dist/nuxt/module.mjs +2 -2
  123. package/dist/{parseError-o1GpZEOR.d.mts → parseError-B1zJZvQ5.d.mts} +2 -2
  124. package/dist/parseError-B1zJZvQ5.d.mts.map +1 -0
  125. package/dist/react-router/index.d.mts +2 -2
  126. package/dist/react-router/index.mjs +3 -4
  127. package/dist/react-router/index.mjs.map +1 -1
  128. package/dist/{routes-CGPmbzCZ.mjs → routes-B48wm7Pb.mjs} +1 -1
  129. package/dist/{routes-CGPmbzCZ.mjs.map → routes-B48wm7Pb.mjs.map} +1 -1
  130. package/dist/runtime/client/log.d.mts +1 -1
  131. package/dist/runtime/server/routes/_evlog/ingest.post.mjs +21 -10
  132. package/dist/runtime/server/routes/_evlog/ingest.post.mjs.map +1 -1
  133. package/dist/runtime/server/useLogger.d.mts +1 -1
  134. package/dist/runtime/utils/parseError.d.mts +2 -2
  135. package/dist/runtime/utils/parseError.mjs +1 -1
  136. package/dist/{_severity-CQijvfhU.mjs → severity-BYWZ96Sb.mjs} +6 -2
  137. package/dist/severity-BYWZ96Sb.mjs.map +1 -0
  138. package/dist/{source-location-DRvDDqfq.mjs → source-location-Dco0cRTz.mjs} +3 -3
  139. package/dist/source-location-Dco0cRTz.mjs.map +1 -0
  140. package/dist/storage-BT-3fT1-.mjs +27 -0
  141. package/dist/storage-BT-3fT1-.mjs.map +1 -0
  142. package/dist/sveltekit/index.d.mts +2 -2
  143. package/dist/sveltekit/index.mjs +5 -6
  144. package/dist/sveltekit/index.mjs.map +1 -1
  145. package/dist/toolkit.d.mts +288 -12
  146. package/dist/toolkit.d.mts.map +1 -1
  147. package/dist/toolkit.mjs +13 -7
  148. package/dist/types.d.mts +1 -1
  149. package/dist/{useLogger-CyPP1sVB.d.mts → useLogger-Cb1R6bQE.d.mts} +2 -2
  150. package/dist/{useLogger-CyPP1sVB.d.mts.map → useLogger-Cb1R6bQE.d.mts.map} +1 -1
  151. package/dist/{utils-Dmin7wVL.d.mts → utils-gQCeZMbg.d.mts} +2 -2
  152. package/dist/{utils-Dmin7wVL.d.mts.map → utils-gQCeZMbg.d.mts.map} +1 -1
  153. package/dist/utils.d.mts +1 -1
  154. package/dist/vite/index.d.mts +1 -1
  155. package/dist/vite/index.mjs +1 -1
  156. package/dist/workers.d.mts +1 -1
  157. package/dist/workers.mjs +1 -1
  158. package/package.json +22 -19
  159. package/dist/_drain-CmCtsuF6.mjs +0 -23
  160. package/dist/_drain-CmCtsuF6.mjs.map +0 -1
  161. package/dist/_http-BY1e9pwC.mjs +0 -78
  162. package/dist/_http-BY1e9pwC.mjs.map +0 -1
  163. package/dist/_severity-CQijvfhU.mjs.map +0 -1
  164. package/dist/audit-CTIviX3P.d.mts.map +0 -1
  165. package/dist/audit-DQoBo7Dl.mjs.map +0 -1
  166. package/dist/dist-Do8P4zWd.mjs.map +0 -1
  167. package/dist/fork-D1j1Fuzy.mjs +0 -72
  168. package/dist/fork-D1j1Fuzy.mjs.map +0 -1
  169. package/dist/headers-D74M0wsg.mjs.map +0 -1
  170. package/dist/logger-DttRJRGa.d.mts.map +0 -1
  171. package/dist/middleware-CTnDsST-.d.mts +0 -93
  172. package/dist/middleware-CTnDsST-.d.mts.map +0 -1
  173. package/dist/middleware-oAccqyPp.mjs +0 -123
  174. package/dist/middleware-oAccqyPp.mjs.map +0 -1
  175. package/dist/nitro-OmT_M4Pb.mjs.map +0 -1
  176. package/dist/nitroConfigBridge-C37lXaNm.mjs.map +0 -1
  177. package/dist/parseError-o1GpZEOR.d.mts.map +0 -1
  178. package/dist/source-location-DRvDDqfq.mjs.map +0 -1
  179. package/dist/storage-CFGTn37X.mjs +0 -46
  180. package/dist/storage-CFGTn37X.mjs.map +0 -1
@@ -1,8 +1,158 @@
1
- import { Y as RequestLogger } from "./audit-CTIviX3P.mjs";
2
- import { a as runEnrichAndDrain, i as createMiddlewareLogger, n as MiddlewareLoggerOptions, r as MiddlewareLoggerResult, t as BaseEvlogOptions } from "./middleware-CTnDsST-.mjs";
3
- import { n as getServiceForPath, r as shouldLog, t as extractErrorStatus } from "./errors-4MPmTzjY.mjs";
1
+ import { F as DrainContext, I as EnrichContext, W as LogLevel, Y as RequestLogger, at as ClientLogContext, ct as PluginSetupContext, dt as createPluginRunner, ft as definePlugin, ht as getEmptyPluginRunner, it as WideEvent, lt as RequestFinishContext, mt as enricherPlugin, nt as TailSamplingContext, ot as EvlogPlugin, pt as drainPlugin, st as PluginRunner, ut as RequestLifecycleContext } from "./audit-CJl-wZ10.mjs";
2
+ import { a as resolveMiddlewarePluginRunner, i as createMiddlewareLogger, n as MiddlewareLoggerOptions, o as runEnrichAndDrain, r as MiddlewareLoggerResult, t as BaseEvlogOptions } from "./middleware-CGM-bOvE.mjs";
3
+ import { i as toMiddlewareOptions, n as defineEvlog, r as toLoggerConfig, t as EvlogConfig } from "./define-Fp8TrdEB.mjs";
4
+ import { n as EnricherOptions, r as defineEnricher, t as EnricherDefinition } from "./enricher-CLSnrzrr.mjs";
5
+ import { n as getServiceForPath, r as shouldLog, t as extractErrorStatus } from "./errors-DQoYsDW1.mjs";
4
6
  import { AsyncLocalStorage } from "node:async_hooks";
5
7
 
8
+ //#region src/shared/compose.d.ts
9
+ /**
10
+ * Compose enricher callbacks into one. Runs in registration order; errors are
11
+ * caught per-callback so one buggy enricher never blocks the others.
12
+ */
13
+ declare function composeEnrichers(enrichers: Array<(ctx: EnrichContext) => void | Promise<void>>, options?: {
14
+ name?: string;
15
+ }): (ctx: EnrichContext) => Promise<void>;
16
+ /**
17
+ * Fan out to multiple drains concurrently (`Promise.allSettled`). A slow
18
+ * Sentry drain never blocks an Axiom drain on the same event.
19
+ */
20
+ declare function composeDrains(drains: Array<(ctx: DrainContext) => void | Promise<void>>, options?: {
21
+ name?: string;
22
+ }): (ctx: DrainContext) => Promise<void>;
23
+ /**
24
+ * Compose tail-sampling `keep` callbacks. `ctx.shouldKeep` is true after the
25
+ * run if any callback set it. Errors are isolated.
26
+ */
27
+ declare function composeKeep(keepers: Array<(ctx: TailSamplingContext) => void | Promise<void>>, options?: {
28
+ name?: string;
29
+ }): (ctx: TailSamplingContext) => Promise<void>;
30
+ /** Merge plugin lists. Later registrations override earlier ones by `name`. */
31
+ declare function composePlugins(...lists: Array<EvlogPlugin[] | undefined>): EvlogPlugin[];
32
+ //#endregion
33
+ //#region src/shared/config.d.ts
34
+ /** Read the full Nitro `useRuntimeConfig()` record (or `undefined` outside Nitro). */
35
+ declare function getRuntimeConfig(): Promise<Record<string, any> | undefined>;
36
+ /**
37
+ * Description of a single adapter config field. `env` is the ordered list of
38
+ * environment variables to fall back to, e.g. `['NUXT_AXIOM_TOKEN', 'AXIOM_TOKEN']`.
39
+ */
40
+ interface ConfigField<T> {
41
+ key: keyof T & string;
42
+ env?: string[];
43
+ }
44
+ /**
45
+ * Resolve adapter configuration with the standard priority chain:
46
+ *
47
+ * 1. `overrides` passed to the drain factory
48
+ * 2. `runtimeConfig.evlog.{namespace}.{key}` (Nitro)
49
+ * 3. `runtimeConfig.{namespace}.{key}` (Nitro)
50
+ * 4. `process.env[envKey]` for each env in `field.env`
51
+ */
52
+ declare function resolveAdapterConfig<T>(namespace: string, fields: ConfigField<T>[], overrides?: Partial<T>): Promise<Partial<T>>;
53
+ //#endregion
54
+ //#region src/shared/drain.d.ts
55
+ /**
56
+ * Drain definition backed by an arbitrary `send` function. Use this for
57
+ * non-HTTP transports (filesystem, in-memory queue, native SDK). For HTTP
58
+ * backends, use `defineHttpDrain` instead.
59
+ */
60
+ interface DrainOptions<TConfig> {
61
+ /** Stable identifier used in error logs. */
62
+ name: string;
63
+ /** Return `null` to skip draining (e.g. missing API key in dev). */
64
+ resolve: () => TConfig | null | Promise<TConfig | null>;
65
+ send: (events: WideEvent[], config: TConfig) => Promise<void>;
66
+ }
67
+ /**
68
+ * Build a drain callback. Errors raised by `send` are logged with the drain
69
+ * name and swallowed, so a failing drain never breaks the request pipeline.
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * export function createMyDrain(overrides?: Partial<MyConfig>) {
74
+ * return defineDrain<MyConfig>({
75
+ * name: 'my-drain',
76
+ * resolve: () => ({ url: process.env.MY_URL ?? null }),
77
+ * send: async (events, config) => { ... },
78
+ * })
79
+ * }
80
+ * ```
81
+ */
82
+ declare function defineDrain<TConfig>(options: DrainOptions<TConfig>): (ctx: DrainContext | DrainContext[]) => Promise<void>;
83
+ interface HttpDrainRequest {
84
+ url: string;
85
+ /** Caller is responsible for `Content-Type`. */
86
+ headers: Record<string, string>;
87
+ body: string;
88
+ }
89
+ /** Adapters only need to ship config + `encode()` — no manual `fetch`. */
90
+ interface HttpDrainOptions<TConfig> {
91
+ /** Stable identifier used in error logs. */
92
+ name: string;
93
+ /** Return `null` to skip draining (e.g. missing API key in dev). */
94
+ resolve: () => TConfig | null | Promise<TConfig | null>;
95
+ /** Return `null` to skip the batch without raising. */
96
+ encode: (events: WideEvent[], config: TConfig) => HttpDrainRequest | null;
97
+ /** @default 5000 */
98
+ timeout?: number;
99
+ /** @default 2 */
100
+ retries?: number;
101
+ /** Read the timeout off the resolved config (falls back to `timeout`). */
102
+ resolveTimeout?: (config: TConfig) => number | undefined;
103
+ /** Read the retry count off the resolved config (falls back to `retries`). */
104
+ resolveRetries?: (config: TConfig) => number | undefined;
105
+ }
106
+ /**
107
+ * Build an HTTP drain. Timeouts/retries are resolved from the config (with
108
+ * overrides via `resolveTimeout` / `resolveRetries`) and forwarded to
109
+ * {@link httpPost}.
110
+ *
111
+ * @example
112
+ * ```ts
113
+ * export function createMyDrain(overrides?: Partial<MyConfig>) {
114
+ * return defineHttpDrain<MyConfig>({
115
+ * name: 'my',
116
+ * resolve: async () => {
117
+ * const cfg = await resolveAdapterConfig<MyConfig>('my', FIELDS, overrides)
118
+ * return cfg.apiKey ? cfg as MyConfig : null
119
+ * },
120
+ * encode: (events, config) => ({
121
+ * url: `${config.endpoint ?? 'https://api.my.com'}/ingest`,
122
+ * headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${config.apiKey}` },
123
+ * body: JSON.stringify(events),
124
+ * }),
125
+ * })
126
+ * }
127
+ * ```
128
+ */
129
+ declare function defineHttpDrain<TConfig>(options: HttpDrainOptions<TConfig>): (ctx: DrainContext | DrainContext[]) => Promise<void>;
130
+ //#endregion
131
+ //#region src/shared/event.d.ts
132
+ /**
133
+ * Helpers for building / mutating wide events from inside enrichers and adapters.
134
+ */
135
+ /**
136
+ * Merge a computed value onto an existing event field. By default, existing
137
+ * object values win over computed ones — so `log.set({ geo: ... })` keeps
138
+ * precedence over an enricher's automatic detection.
139
+ */
140
+ declare function mergeEventField<T extends object>(existing: unknown, computed: T, overwrite?: boolean): T;
141
+ /** Typed attribute used when flattening events for OTLP/Sentry/Datadog/PostHog. */
142
+ type AttributeValueKind = 'string' | 'integer' | 'double' | 'boolean';
143
+ interface TypedAttributeValue {
144
+ value: string | number | boolean;
145
+ type: AttributeValueKind;
146
+ }
147
+ /** Convert a JS value to a {@link TypedAttributeValue}. Objects are JSON-serialized. */
148
+ declare function toTypedAttributeValue(value: unknown): TypedAttributeValue | undefined;
149
+ /** Convert a JS value to the OTLP `AnyValue` shape (`stringValue` / `intValue` / `boolValue`). */
150
+ declare function toOtlpAttributeValue(value: unknown): {
151
+ stringValue?: string;
152
+ intValue?: string;
153
+ boolValue?: boolean;
154
+ };
155
+ //#endregion
6
156
  //#region src/shared/fork.d.ts
7
157
  /**
8
158
  * Optional hooks for integrations that track active loggers (e.g. Elysia `activeLoggers`).
@@ -52,24 +202,150 @@ declare function extractSafeHeaders(headers: Headers): Record<string, string>;
52
202
  * Works with Express, Fastify, and any Node.js HTTP server using `req.headers`.
53
203
  */
54
204
  declare function extractSafeNodeHeaders(headers: Record<string, string | string[] | undefined>): Record<string, string>;
205
+ /**
206
+ * Case-insensitive header lookup against the safe-filtered shape produced by
207
+ * {@link extractSafeHeaders} / {@link extractSafeNodeHeaders}.
208
+ */
209
+ declare function getHeader(headers: Record<string, string> | undefined, name: string): string | undefined;
210
+ /** Parse a header-derived numeric string. Returns `undefined` for empty/invalid input. */
211
+ declare function normalizeNumber(value: string | undefined): number | undefined;
55
212
  //#endregion
56
- //#region src/shared/storage.d.ts
213
+ //#region src/shared/http.d.ts
57
214
  /**
58
- * Create a request-scoped `AsyncLocalStorage` and a matching `useLogger` accessor.
215
+ * Minimal HTTP transport for drain adapters: abort-based timeouts, exponential
216
+ * backoff on `5xx` / network errors, response bodies truncated in error messages.
217
+ */
218
+ interface HttpPostOptions {
219
+ url: string;
220
+ /** Caller is responsible for `Content-Type`. */
221
+ headers: Record<string, string>;
222
+ /** Pre-serialized request body. */
223
+ body: string;
224
+ /** Abort the request after this many milliseconds. */
225
+ timeout: number;
226
+ /** Prefix used in error messages. */
227
+ label: string;
228
+ /**
229
+ * Retries network errors, aborts, and `5xx` responses with exponential backoff.
230
+ * @default 2
231
+ */
232
+ retries?: number;
233
+ }
234
+ /**
235
+ * POST a body with timeout + retry. Throws label-prefixed errors with a
236
+ * truncated response body. Safe to call from any drain `send()`.
237
+ */
238
+ declare function httpPost({
239
+ url,
240
+ headers,
241
+ body,
242
+ timeout,
243
+ label,
244
+ retries
245
+ }: HttpPostOptions): Promise<void>;
246
+ //#endregion
247
+ //#region src/shared/integration.d.ts
248
+ /** Request shape extracted from a framework context. */
249
+ interface ExtractedRequest {
250
+ method: string;
251
+ path: string;
252
+ /**
253
+ * Either a Web `Headers` (Hono / Elysia / Fetch) or a Node-style
254
+ * `IncomingHttpHeaders` record (Express / Fastify). Whichever is native
255
+ * to the framework — it gets filtered through the safe-header helpers.
256
+ */
257
+ headers?: Headers | Record<string, string | string[] | undefined>;
258
+ /** Used as-is when present, otherwise auto-generated. */
259
+ requestId?: string;
260
+ }
261
+ /** Manifest passed to {@link defineFrameworkIntegration}. */
262
+ interface FrameworkIntegrationSpec<TCtx> {
263
+ /** Stable identifier used in error messages. */
264
+ name: string;
265
+ extractRequest: (ctx: TCtx) => ExtractedRequest;
266
+ /** Attach the request logger to the framework context (`c.set('log', logger)`). */
267
+ attachLogger: (ctx: TCtx, logger: RequestLogger) => void;
268
+ /**
269
+ * AsyncLocalStorage instance backing `useLogger()`. Required for frameworks
270
+ * where the logger is accessed off the request context (Express, Fastify,
271
+ * NestJS). When set, `log.fork()` is auto-attached to the request logger.
272
+ */
273
+ storage?: AsyncLocalStorage<RequestLogger>;
274
+ /** Fork lifecycle hooks (only used when `storage` is set). */
275
+ forkLifecycle?: ForkLifecycle;
276
+ }
277
+ /** Result returned by {@link FrameworkIntegrationHelpers.start}. */
278
+ interface FrameworkRequestHandle extends MiddlewareLoggerResult {
279
+ middlewareOptions: MiddlewareLoggerOptions;
280
+ /**
281
+ * Run the downstream handler inside the integration's storage. When no
282
+ * storage is configured, the callback is invoked directly.
283
+ */
284
+ runWith: <T>(fn: () => T | Promise<T>) => Promise<T>;
285
+ }
286
+ /** Helpers returned by {@link defineFrameworkIntegration}. */
287
+ interface FrameworkIntegrationHelpers<TCtx> {
288
+ start: (ctx: TCtx, options?: BaseEvlogOptions) => FrameworkRequestHandle;
289
+ }
290
+ /**
291
+ * Build a manifest-driven framework integration. Captures the boilerplate
292
+ * every middleware shares (request extraction, logger setup, attachment,
293
+ * optional AsyncLocalStorage wrapping). The framework still owns its own
294
+ * middleware function — it just declares *what* to extract and *where* to
295
+ * attach the logger.
59
296
  *
60
- * Every framework that needs `useLogger()` (Express, Fastify, NestJS, SvelteKit)
61
- * calls this once at module level to get its own isolated storage + accessor pair.
297
+ * @example
298
+ * ```ts
299
+ * const integration = defineFrameworkIntegration<HonoContext>({
300
+ * name: 'hono',
301
+ * extractRequest: (c) => ({
302
+ * method: c.req.method,
303
+ * path: c.req.path,
304
+ * headers: c.req.raw.headers,
305
+ * requestId: c.req.header('x-request-id'),
306
+ * }),
307
+ * attachLogger: (c, logger) => c.set('log', logger),
308
+ * })
62
309
  *
63
- * @param contextHint - Human-readable hint appended to the error message when
64
- * `useLogger()` is called outside of a request (e.g.
65
- * `"middleware context. Make sure app.use(evlog()) is registered before your routes."`).
310
+ * export function evlog(options?: BaseEvlogOptions): MiddlewareHandler {
311
+ * return async (c, next) => {
312
+ * const { skipped, finish, runWith } = integration.start(c, options)
313
+ * if (skipped) return next()
314
+ * try {
315
+ * await runWith(() => next())
316
+ * await finish({ status: c.res.status })
317
+ * } catch (error) {
318
+ * await finish({ error: error as Error })
319
+ * throw error
320
+ * }
321
+ * }
322
+ * }
323
+ * ```
324
+ */
325
+ declare function defineFrameworkIntegration<TCtx>(spec: FrameworkIntegrationSpec<TCtx>): FrameworkIntegrationHelpers<TCtx>;
326
+ //#endregion
327
+ //#region src/shared/severity.d.ts
328
+ /**
329
+ * OpenTelemetry severity numbers per evlog log level.
330
+ * @see https://opentelemetry.io/docs/specs/otel/logs/data-model/#field-severitynumber
331
+ */
332
+ declare const OTEL_SEVERITY_NUMBER: Record<LogLevel, number>;
333
+ declare const OTEL_SEVERITY_TEXT: Record<LogLevel, string>;
334
+ //#endregion
335
+ //#region src/shared/storage.d.ts
336
+ /**
337
+ * Create a request-scoped `AsyncLocalStorage` and matching `useLogger`
338
+ * accessor. Every framework that exposes `useLogger()` (Express, Fastify,
339
+ * NestJS, SvelteKit) calls this once at module level.
66
340
  *
67
- * @beta Part of `evlog/toolkit` the public API for building custom integrations.
341
+ * @param contextHint - Appended to the error message when `useLogger()` is
342
+ * called outside of a request, e.g. `"middleware context. Make sure
343
+ * app.use(evlog()) is registered before your routes."`.
68
344
  */
69
345
  declare function createLoggerStorage(contextHint: string): {
70
346
  storage: AsyncLocalStorage<RequestLogger<Record<string, unknown>>>;
71
347
  useLogger: <T extends object = Record<string, unknown>>() => RequestLogger<T>;
72
348
  };
73
349
  //#endregion
74
- export { BaseEvlogOptions, ForkBackgroundLoggerOptions, ForkLifecycle, MiddlewareLoggerOptions, MiddlewareLoggerResult, attachForkToLogger, createLoggerStorage, createMiddlewareLogger, extractErrorStatus, extractSafeHeaders, extractSafeNodeHeaders, forkBackgroundLogger, getServiceForPath, runEnrichAndDrain, shouldLog };
350
+ export { AttributeValueKind, BaseEvlogOptions, ClientLogContext, ConfigField, DrainOptions, EnricherDefinition, EnricherOptions, EvlogConfig, EvlogPlugin, ExtractedRequest, ForkBackgroundLoggerOptions, ForkLifecycle, FrameworkIntegrationHelpers, FrameworkIntegrationSpec, FrameworkRequestHandle, HttpDrainOptions, HttpDrainRequest, HttpPostOptions, MiddlewareLoggerOptions, MiddlewareLoggerResult, OTEL_SEVERITY_NUMBER, OTEL_SEVERITY_TEXT, PluginRunner, PluginSetupContext, RequestFinishContext, RequestLifecycleContext, TypedAttributeValue, attachForkToLogger, composeDrains, composeEnrichers, composeKeep, composePlugins, createLoggerStorage, createMiddlewareLogger, createPluginRunner, defineDrain, defineEnricher, defineEvlog, defineFrameworkIntegration, defineHttpDrain, definePlugin, drainPlugin, enricherPlugin, extractErrorStatus, extractSafeHeaders, extractSafeNodeHeaders, forkBackgroundLogger, getEmptyPluginRunner, getHeader, getRuntimeConfig, getServiceForPath, httpPost, mergeEventField, normalizeNumber, resolveAdapterConfig, resolveMiddlewarePluginRunner, runEnrichAndDrain, shouldLog, toLoggerConfig, toMiddlewareOptions, toOtlpAttributeValue, toTypedAttributeValue };
75
351
  //# sourceMappingURL=toolkit.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toolkit.d.mts","names":[],"sources":["../src/shared/fork.ts","../src/shared/headers.ts","../src/shared/storage.ts"],"mappings":";;;;;;;;;UAUiB,aAAA;EAAa;EAE5B,YAAA,IAAgB,KAAA,EAAO,aAAA;EAEY;EAAnC,WAAA,IAAe,KAAA,EAAO,aAAA;AAAA;;;;;;UAQP,2BAAA;EACf,OAAA,EAAS,iBAAA,CAAkB,aAAA;EAC3B,MAAA,EAAQ,aAAA;EACR,iBAAA,EAAmB,uBAAA;EACnB,KAAA;EACA,EAAA,eAAiB,OAAA;EACjB,SAAA,GAAY,aAAA;AAAA;;;;iBAME,kBAAA,CACd,OAAA,EAAS,iBAAA,CAAkB,aAAA,GAC3B,MAAA,EAAQ,aAAA,EACR,iBAAA,EAAmB,uBAAA,EACnB,SAAA,GAAY,aAAA;;;;;;;;;iBAgBE,oBAAA,CAAqB,OAAA,EAAS,2BAAA;;;;;;;;iBC/C9B,kBAAA,CAAmB,OAAA,EAAS,OAAA,GAAU,MAAA;ADGtD;;;;AAAA,iBCSgB,sBAAA,CAAuB,OAAA,EAAS,MAAA,0CAAgD,MAAA;;;;;;;ADThG;;;;;;;;iBEKgB,mBAAA,CAAoB,WAAA;;iCAmBC,MAAA,wBAA+B,aAAA,CAAc,CAAA;AAAA"}
1
+ {"version":3,"file":"toolkit.d.mts","names":[],"sources":["../src/shared/compose.ts","../src/shared/config.ts","../src/shared/drain.ts","../src/shared/event.ts","../src/shared/fork.ts","../src/shared/headers.ts","../src/shared/http.ts","../src/shared/integration.ts","../src/shared/severity.ts","../src/shared/storage.ts"],"mappings":"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"}
package/dist/toolkit.mjs CHANGED
@@ -1,7 +1,13 @@
1
- import { t as extractErrorStatus } from "./errors-BJRXUfMg.mjs";
2
- import { n as shouldLog, t as getServiceForPath } from "./routes-CGPmbzCZ.mjs";
3
- import { n as runEnrichAndDrain, t as createMiddlewareLogger } from "./middleware-oAccqyPp.mjs";
4
- import { n as forkBackgroundLogger, t as attachForkToLogger } from "./fork-D1j1Fuzy.mjs";
5
- import { n as extractSafeNodeHeaders, t as extractSafeHeaders } from "./headers-D74M0wsg.mjs";
6
- import { t as createLoggerStorage } from "./storage-CFGTn37X.mjs";
7
- export { attachForkToLogger, createLoggerStorage, createMiddlewareLogger, extractErrorStatus, extractSafeHeaders, extractSafeNodeHeaders, forkBackgroundLogger, getServiceForPath, runEnrichAndDrain, shouldLog };
1
+ import { D as drainPlugin, E as definePlugin, O as enricherPlugin, T as createPluginRunner, k as getEmptyPluginRunner } from "./audit--n0QRR2Y.mjs";
2
+ import { i as normalizeNumber, n as extractSafeNodeHeaders, r as getHeader, t as extractSafeHeaders } from "./headers-CU-QqnYg.mjs";
3
+ import { t as extractErrorStatus } from "./errors-BQgyQ9xe.mjs";
4
+ import { n as toLoggerConfig, r as toMiddlewareOptions, t as defineEvlog } from "./define-D6OJdSUH.mjs";
5
+ import { n as shouldLog, t as getServiceForPath } from "./routes-B48wm7Pb.mjs";
6
+ import { a as resolveAdapterConfig, i as getRuntimeConfig, n as defineHttpDrain, r as httpPost, t as defineDrain } from "./drain-ByWUeOQC.mjs";
7
+ import { n as toOtlpAttributeValue, r as toTypedAttributeValue, t as mergeEventField } from "./event-ef-5Dbxg.mjs";
8
+ import { n as OTEL_SEVERITY_TEXT, t as OTEL_SEVERITY_NUMBER } from "./severity-BYWZ96Sb.mjs";
9
+ import { a as composePlugins, i as composeKeep, n as composeDrains, r as composeEnrichers, t as defineEnricher } from "./enricher-BA6viylF.mjs";
10
+ import { a as runEnrichAndDrain, i as resolveMiddlewarePluginRunner, n as forkBackgroundLogger, r as createMiddlewareLogger, t as attachForkToLogger } from "./fork-D44V93-K.mjs";
11
+ import { t as defineFrameworkIntegration } from "./integration-Bz8X6_Lb.mjs";
12
+ import { t as createLoggerStorage } from "./storage-BT-3fT1-.mjs";
13
+ export { OTEL_SEVERITY_NUMBER, OTEL_SEVERITY_TEXT, attachForkToLogger, composeDrains, composeEnrichers, composeKeep, composePlugins, createLoggerStorage, createMiddlewareLogger, createPluginRunner, defineDrain, defineEnricher, defineEvlog, defineFrameworkIntegration, defineHttpDrain, definePlugin, drainPlugin, enricherPlugin, extractErrorStatus, extractSafeHeaders, extractSafeNodeHeaders, forkBackgroundLogger, getEmptyPluginRunner, getHeader, getRuntimeConfig, getServiceForPath, httpPost, mergeEventField, normalizeNumber, resolveAdapterConfig, resolveMiddlewarePluginRunner, runEnrichAndDrain, shouldLog, toLoggerConfig, toMiddlewareOptions, toOtlpAttributeValue, toTypedAttributeValue };
package/dist/types.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { $ as SamplingRates, A as AuditFields, B as H3EventContext, F as DrainContext, G as LoggerConfig, H as InternalFields, I as EnrichContext, J as RequestLogEntry, K as ParsedError, L as EnvironmentContext, M as AuditTarget, N as BaseWideEvent, P as DeepPartial, Q as SamplingConfig, R as ErrorOptions, U as Log, V as IngestPayload, W as LogLevel, X as RequestLoggerOptions, Y as RequestLogger, Z as RouteConfig, et as ServerEvent, it as WideEvent, j as AuditLoggerMethod, k as AuditActor, nt as TailSamplingContext, q as RedactConfig, rt as TransportConfig, tt as TailSamplingCondition, z as FieldContext } from "./audit-CTIviX3P.mjs";
1
+ import { $ as SamplingRates, A as AuditFields, B as H3EventContext, F as DrainContext, G as LoggerConfig, H as InternalFields, I as EnrichContext, J as RequestLogEntry, K as ParsedError, L as EnvironmentContext, M as AuditTarget, N as BaseWideEvent, P as DeepPartial, Q as SamplingConfig, R as ErrorOptions, U as Log, V as IngestPayload, W as LogLevel, X as RequestLoggerOptions, Y as RequestLogger, Z as RouteConfig, et as ServerEvent, it as WideEvent, j as AuditLoggerMethod, k as AuditActor, nt as TailSamplingContext, q as RedactConfig, rt as TransportConfig, tt as TailSamplingCondition, z as FieldContext } from "./audit-CJl-wZ10.mjs";
2
2
  export { AuditActor, AuditFields, AuditLoggerMethod, AuditTarget, BaseWideEvent, DeepPartial, DrainContext, EnrichContext, EnvironmentContext, ErrorOptions, FieldContext, H3EventContext, IngestPayload, InternalFields, Log, LogLevel, LoggerConfig, ParsedError, RedactConfig, RequestLogEntry, RequestLogger, RequestLoggerOptions, RouteConfig, SamplingConfig, SamplingRates, ServerEvent, TailSamplingCondition, TailSamplingContext, TransportConfig, WideEvent };
@@ -1,4 +1,4 @@
1
- import { Y as RequestLogger, et as ServerEvent } from "./audit-CTIviX3P.mjs";
1
+ import { Y as RequestLogger, et as ServerEvent } from "./audit-CJl-wZ10.mjs";
2
2
 
3
3
  //#region src/runtime/server/useLogger.d.ts
4
4
  /**
@@ -36,4 +36,4 @@ import { Y as RequestLogger, et as ServerEvent } from "./audit-CTIviX3P.mjs";
36
36
  declare function useLogger<T extends object = Record<string, unknown>>(event: ServerEvent, service?: string): RequestLogger<T>;
37
37
  //#endregion
38
38
  export { useLogger as t };
39
- //# sourceMappingURL=useLogger-CyPP1sVB.d.mts.map
39
+ //# sourceMappingURL=useLogger-Cb1R6bQE.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useLogger-CyPP1sVB.d.mts","names":[],"sources":["../src/runtime/server/useLogger.ts"],"mappings":";;;;;AAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAgB,SAAA,oBAA6B,MAAA,kBAAA,CAAyB,KAAA,EAAO,WAAA,EAAa,OAAA,YAAmB,aAAA,CAAc,CAAA"}
1
+ {"version":3,"file":"useLogger-Cb1R6bQE.d.mts","names":[],"sources":["../src/runtime/server/useLogger.ts"],"mappings":";;;;;AAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAgB,SAAA,oBAA6B,MAAA,kBAAA,CAAyB,KAAA,EAAO,WAAA,EAAa,OAAA,YAAmB,aAAA,CAAc,CAAA"}
@@ -1,4 +1,4 @@
1
- import { L as EnvironmentContext, W as LogLevel } from "./audit-CTIviX3P.mjs";
1
+ import { L as EnvironmentContext, W as LogLevel } from "./audit-CJl-wZ10.mjs";
2
2
 
3
3
  //#region src/utils.d.ts
4
4
  declare function formatDuration(ms: number): string;
@@ -52,4 +52,4 @@ declare function filterSafeHeaders(headers: Record<string, string>): Record<stri
52
52
  declare function matchesPattern(path: string, pattern: string): boolean;
53
53
  //#endregion
54
54
  export { escapeFormatString as a, getConsoleMethod as c, isBrowser as d, isClient as f, matchesPattern as g, isServer as h, detectEnvironment as i, getCssLevelColor as l, isLevelEnabled as m, colors as n, filterSafeHeaders as o, isDev as p, cssColors as r, formatDuration as s, SENSITIVE_HEADERS as t, getLevelColor as u };
55
- //# sourceMappingURL=utils-Dmin7wVL.d.mts.map
55
+ //# sourceMappingURL=utils-gQCeZMbg.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils-Dmin7wVL.d.mts","names":[],"sources":["../src/utils.ts"],"mappings":";;;iBAEgB,cAAA,CAAe,EAAA;AAAA,iBAOf,QAAA,CAAA;AAAA,iBAIA,QAAA,CAAA;AAAA,iBAIA,SAAA,CAAA;AAAA,iBAOA,KAAA,CAAA;AAAA,iBAUA,iBAAA,CAAA,GAAqB,OAAA,CAAQ,kBAAA;;AAzB7C;;iBAsDgB,cAAA,CAAe,KAAA,EAAO,QAAA,EAAU,QAAA,EAAU,QAAA;AAAA,iBAI1C,gBAAA,CAAiB,KAAA,EAAO,QAAA,GAAW,QAAA;AAAA,cAItC,MAAA;EAAA;;;;;;;;;;;;iBAgBG,aAAA,CAAc,KAAA;AAAA,cAIjB,SAAA;EAAA;;;;;;;;iBAYG,gBAAA,CAAiB,KAAA;;;;;;iBASjB,kBAAA,CAAmB,GAAA;;cAKtB,iBAAA;AAAA,iBASG,iBAAA,CAAkB,OAAA,EAAS,MAAA,mBAAyB,MAAA;;;;;iBAkBpD,cAAA,CAAe,IAAA,UAAc,OAAA"}
1
+ {"version":3,"file":"utils-gQCeZMbg.d.mts","names":[],"sources":["../src/utils.ts"],"mappings":";;;iBAEgB,cAAA,CAAe,EAAA;AAAA,iBAOf,QAAA,CAAA;AAAA,iBAIA,QAAA,CAAA;AAAA,iBAIA,SAAA,CAAA;AAAA,iBAOA,KAAA,CAAA;AAAA,iBAUA,iBAAA,CAAA,GAAqB,OAAA,CAAQ,kBAAA;;AAzB7C;;iBAsDgB,cAAA,CAAe,KAAA,EAAO,QAAA,EAAU,QAAA,EAAU,QAAA;AAAA,iBAI1C,gBAAA,CAAiB,KAAA,EAAO,QAAA,GAAW,QAAA;AAAA,cAItC,MAAA;EAAA;;;;;;;;;;;;iBAgBG,aAAA,CAAc,KAAA;AAAA,cAIjB,SAAA;EAAA;;;;;;;;iBAYG,gBAAA,CAAiB,KAAA;;;;;;iBASjB,kBAAA,CAAmB,GAAA;;cAKtB,iBAAA;AAAA,iBASG,iBAAA,CAAkB,OAAA,EAAS,MAAA,mBAAyB,MAAA;;;;;iBAkBpD,cAAA,CAAe,IAAA,UAAc,OAAA"}
package/dist/utils.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as escapeFormatString, c as getConsoleMethod, d as isBrowser, f as isClient, g as matchesPattern, h as isServer, i as detectEnvironment, l as getCssLevelColor, m as isLevelEnabled, n as colors, o as filterSafeHeaders, p as isDev, r as cssColors, s as formatDuration, t as SENSITIVE_HEADERS, u as getLevelColor } from "./utils-Dmin7wVL.mjs";
1
+ import { a as escapeFormatString, c as getConsoleMethod, d as isBrowser, f as isClient, g as matchesPattern, h as isServer, i as detectEnvironment, l as getCssLevelColor, m as isLevelEnabled, n as colors, o as filterSafeHeaders, p as isDev, r as cssColors, s as formatDuration, t as SENSITIVE_HEADERS, u as getLevelColor } from "./utils-gQCeZMbg.mjs";
2
2
  export { SENSITIVE_HEADERS, colors, cssColors, detectEnvironment, escapeFormatString, filterSafeHeaders, formatDuration, getConsoleMethod, getCssLevelColor, getLevelColor, isBrowser, isClient, isDev, isLevelEnabled, isServer, matchesPattern };
@@ -1,4 +1,4 @@
1
- import { Q as SamplingConfig, W as LogLevel, rt as TransportConfig } from "../audit-CTIviX3P.mjs";
1
+ import { Q as SamplingConfig, W as LogLevel, rt as TransportConfig } from "../audit-CJl-wZ10.mjs";
2
2
  import { Plugin } from "vite";
3
3
 
4
4
  //#region src/vite/types.d.ts
@@ -1,4 +1,4 @@
1
- import { a as walk, i as shouldTransform, n as createStripPlugin, o as MagicString, r as TRANSFORM_FILTER, t as createSourceLocationPlugin } from "../source-location-DRvDDqfq.mjs";
1
+ import { a as walk, i as shouldTransform, n as createStripPlugin, o as MagicString, r as TRANSFORM_FILTER, t as createSourceLocationPlugin } from "../source-location-Dco0cRTz.mjs";
2
2
  import { resolve } from "node:path";
3
3
  import { existsSync, writeFileSync } from "node:fs";
4
4
  //#region src/vite/auto-init.ts
@@ -1,4 +1,4 @@
1
- import { G as LoggerConfig, Y as RequestLogger } from "./audit-CTIviX3P.mjs";
1
+ import { G as LoggerConfig, Y as RequestLogger } from "./audit-CJl-wZ10.mjs";
2
2
 
3
3
  //#region src/workers/index.d.ts
4
4
  /**
package/dist/workers.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { g as createRequestLogger, y as initLogger } from "./audit-DQoBo7Dl.mjs";
1
+ import { b as initLogger, g as createRequestLogger } from "./audit--n0QRR2Y.mjs";
2
2
  //#region src/workers/index.ts
3
3
  function isRecord(value) {
4
4
  return typeof value === "object" && value !== null && !Array.isArray(value);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "evlog",
3
- "version": "2.14.1",
4
- "description": "Wide event logging library with structured error handling. Inspired by LoggingSucks.",
3
+ "version": "2.15.0",
4
+ "description": "Modern TypeScript logger simple logs, wide events, structured errors. Built for scripts, libraries, jobs, edge, and HTTP. One drain pipeline everywhere.",
5
5
  "author": "HugoRCD <contact@hrcd.fr>",
6
6
  "homepage": "https://evlog.dev",
7
7
  "repository": {
@@ -302,22 +302,6 @@
302
302
  "dist",
303
303
  "README.md"
304
304
  ],
305
- "scripts": {
306
- "build": "tsdown",
307
- "dev": "tsdown --watch",
308
- "dev:prepare": "tsdown",
309
- "lint": "eslint .",
310
- "lint:fix": "eslint . --fix",
311
- "bench": "vitest bench bench/core/ && cp bench/results.json bench/baseline/bench.json && bun bench/scripts/report.ts",
312
- "bench:compare": "vitest bench bench/comparison/ && cp bench/results.json bench/baseline/comparison.json && bun bench/scripts/report.ts",
313
- "bench:report": "bun bench/scripts/report.ts",
314
- "size": "bun bench/scripts/size.ts",
315
- "size:json": "bun bench/scripts/size.ts --json",
316
- "test": "vitest run",
317
- "test:watch": "vitest watch",
318
- "test:coverage": "vitest run --coverage",
319
- "typecheck": "echo 'Typecheck handled by build'"
320
- },
321
305
  "devDependencies": {
322
306
  "@tanstack/start-client-core": "^1.167.20",
323
307
  "acorn": "^8.16.0",
@@ -341,7 +325,9 @@
341
325
  "pino": "^10.3.1",
342
326
  "react-router": "^7.14.2",
343
327
  "supertest": "^7.2.2",
328
+ "tinyglobby": "^0.2.16",
344
329
  "tsdown": "^0.21.10",
330
+ "tsx": "^4.20.7",
345
331
  "magic-string": "^0.30.21",
346
332
  "typescript": "^6.0.3",
347
333
  "vite": "^8.0.10",
@@ -415,5 +401,22 @@
415
401
  "@tanstack/start-client-core": {
416
402
  "optional": true
417
403
  }
404
+ },
405
+ "scripts": {
406
+ "build": "tsdown",
407
+ "dev": "tsdown --watch",
408
+ "dev:prepare": "tsdown",
409
+ "lint": "eslint .",
410
+ "lint:fix": "eslint . --fix",
411
+ "bench": "vitest bench bench/core/ && cp bench/results.json bench/baseline/bench.json && tsx bench/scripts/report.ts",
412
+ "bench:compare": "vitest bench bench/comparison/ && cp bench/results.json bench/baseline/comparison.json && tsx bench/scripts/report.ts",
413
+ "bench:report": "tsx bench/scripts/report.ts",
414
+ "size": "tsx bench/scripts/size.ts",
415
+ "size:json": "tsx bench/scripts/size.ts --json",
416
+ "test": "vitest run",
417
+ "test:watch": "vitest watch",
418
+ "test:coverage": "vitest run --coverage",
419
+ "test:e2e": "vitest run --config vitest.e2e.config.ts",
420
+ "typecheck": "echo 'Typecheck handled by build'"
418
421
  }
419
- }
422
+ }
@@ -1,23 +0,0 @@
1
- //#region src/adapters/_drain.ts
2
- /**
3
- * Build a drain callback for `evlog:drain` (or `initLogger({ drain })`).
4
- * The returned function is async so `resolve` can load Nitro runtime config; hosts typically attach
5
- * the resulting promise to `waitUntil` so the HTTP response is not blocked (see Nitro plugin).
6
- */
7
- function defineDrain(options) {
8
- return async (ctx) => {
9
- const contexts = Array.isArray(ctx) ? ctx : [ctx];
10
- if (contexts.length === 0) return;
11
- const config = await options.resolve();
12
- if (!config) return;
13
- try {
14
- await options.send(contexts.map((c) => c.event), config);
15
- } catch (error) {
16
- console.error(`[evlog/${options.name}] Failed to send events:`, error);
17
- }
18
- };
19
- }
20
- //#endregion
21
- export { defineDrain as t };
22
-
23
- //# sourceMappingURL=_drain-CmCtsuF6.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_drain-CmCtsuF6.mjs","names":[],"sources":["../src/adapters/_drain.ts"],"sourcesContent":["import type { DrainContext, WideEvent } from '../types'\n\nexport interface DrainOptions<TConfig> {\n name: string\n resolve: () => TConfig | null | Promise<TConfig | null>\n send: (events: WideEvent[], config: TConfig) => Promise<void>\n}\n\n/**\n * Build a drain callback for `evlog:drain` (or `initLogger({ drain })`).\n * The returned function is async so `resolve` can load Nitro runtime config; hosts typically attach\n * the resulting promise to `waitUntil` so the HTTP response is not blocked (see Nitro plugin).\n */\nexport function defineDrain<TConfig>(options: DrainOptions<TConfig>): (ctx: DrainContext | DrainContext[]) => Promise<void> {\n return async (ctx: DrainContext | DrainContext[]) => {\n const contexts = Array.isArray(ctx) ? ctx : [ctx]\n if (contexts.length === 0) return\n\n const config = await options.resolve()\n if (!config) return\n\n try {\n await options.send(contexts.map(c => c.event), config)\n } catch (error) {\n console.error(`[evlog/${options.name}] Failed to send events:`, error)\n }\n }\n}\n"],"mappings":";;;;;;AAaA,SAAgB,YAAqB,SAAuF;AAC1H,QAAO,OAAO,QAAuC;EACnD,MAAM,WAAW,MAAM,QAAQ,IAAI,GAAG,MAAM,CAAC,IAAI;AACjD,MAAI,SAAS,WAAW,EAAG;EAE3B,MAAM,SAAS,MAAM,QAAQ,SAAS;AACtC,MAAI,CAAC,OAAQ;AAEb,MAAI;AACF,SAAM,QAAQ,KAAK,SAAS,KAAI,MAAK,EAAE,MAAM,EAAE,OAAO;WAC/C,OAAO;AACd,WAAQ,MAAM,UAAU,QAAQ,KAAK,2BAA2B,MAAM"}
@@ -1,78 +0,0 @@
1
- import { t as getNitroRuntimeConfigRecord } from "./nitroConfigBridge-C37lXaNm.mjs";
2
- //#region src/adapters/_config.ts
3
- /**
4
- * Adapter runtime-config reads go through `getNitroRuntimeConfigRecord` in
5
- * `shared/nitroConfigBridge.ts` (documented there — Workers-safe dynamic imports).
6
- *
7
- * Drain handlers remain non-blocking when the host provides `waitUntil`.
8
- */
9
- function getRuntimeConfig() {
10
- return getNitroRuntimeConfigRecord();
11
- }
12
- async function resolveAdapterConfig(namespace, fields, overrides) {
13
- const runtimeConfig = shouldProbeRuntimeConfig(fields, overrides) ? await getRuntimeConfig() : void 0;
14
- const evlogNs = runtimeConfig?.evlog?.[namespace];
15
- const rootNs = runtimeConfig?.[namespace];
16
- const config = {};
17
- for (const { key, env } of fields) config[key] = overrides?.[key] ?? evlogNs?.[key] ?? rootNs?.[key] ?? resolveEnv(env);
18
- return config;
19
- }
20
- function shouldProbeRuntimeConfig(fields, overrides) {
21
- return fields.some(({ key, env }) => {
22
- if (overrides?.[key] !== void 0) return false;
23
- if (!env) return false;
24
- return resolveEnv(env) === void 0;
25
- });
26
- }
27
- function resolveEnv(envKeys) {
28
- if (!envKeys) return void 0;
29
- for (const key of envKeys) {
30
- const val = process.env[key];
31
- if (val) return val;
32
- }
33
- }
34
- //#endregion
35
- //#region src/adapters/_http.ts
36
- function isRetryable(error) {
37
- if (error instanceof DOMException && error.name === "AbortError") return true;
38
- if (error instanceof TypeError) return true;
39
- if (error instanceof Error) {
40
- const match = error.message.match(/API error: (\d+)/);
41
- if (match) return Number.parseInt(match[1]) >= 500;
42
- }
43
- return false;
44
- }
45
- async function httpPost({ url, headers, body, timeout, label, retries = 2 }) {
46
- const normalizedRetries = Number.isFinite(retries) && retries >= 0 ? Math.floor(retries) : 2;
47
- let lastError;
48
- for (let attempt = 0; attempt <= normalizedRetries; attempt++) {
49
- const controller = new AbortController();
50
- const timeoutId = setTimeout(() => controller.abort(), timeout);
51
- try {
52
- const response = await fetch(url, {
53
- method: "POST",
54
- headers,
55
- body,
56
- signal: controller.signal
57
- });
58
- if (!response.ok) {
59
- const text = await response.text().catch(() => "Unknown error");
60
- const safeText = text.length > 200 ? `${text.slice(0, 200)}...[truncated]` : text;
61
- throw new Error(`${label} API error: ${response.status} ${response.statusText} - ${safeText}`);
62
- }
63
- clearTimeout(timeoutId);
64
- return;
65
- } catch (error) {
66
- clearTimeout(timeoutId);
67
- if (error instanceof DOMException && error.name === "AbortError") lastError = /* @__PURE__ */ new Error(`${label} request timed out after ${timeout}ms`);
68
- else lastError = error;
69
- if (!isRetryable(error) || attempt === normalizedRetries) throw lastError;
70
- await new Promise((r) => setTimeout(r, 200 * 2 ** attempt));
71
- }
72
- }
73
- throw lastError;
74
- }
75
- //#endregion
76
- export { resolveAdapterConfig as n, httpPost as t };
77
-
78
- //# sourceMappingURL=_http-BY1e9pwC.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_http-BY1e9pwC.mjs","names":[],"sources":["../src/adapters/_config.ts","../src/adapters/_http.ts"],"sourcesContent":["import { getNitroRuntimeConfigRecord } from '../shared/nitroConfigBridge'\n\n/**\n * Adapter runtime-config reads go through `getNitroRuntimeConfigRecord` in\n * `shared/nitroConfigBridge.ts` (documented there — Workers-safe dynamic imports).\n *\n * Drain handlers remain non-blocking when the host provides `waitUntil`.\n */\n\nexport function getRuntimeConfig(): Promise<Record<string, any> | undefined> {\n return getNitroRuntimeConfigRecord()\n}\n\nexport interface ConfigField<T> {\n key: keyof T & string\n env?: string[]\n}\n\nexport async function resolveAdapterConfig<T>(\n namespace: string,\n fields: ConfigField<T>[],\n overrides?: Partial<T>,\n): Promise<Partial<T>> {\n const runtimeConfig = shouldProbeRuntimeConfig(fields, overrides)\n ? await getRuntimeConfig()\n : undefined\n const evlogNs = runtimeConfig?.evlog?.[namespace]\n const rootNs = runtimeConfig?.[namespace]\n\n const config: Record<string, unknown> = {}\n\n for (const { key, env } of fields) {\n config[key] =\n overrides?.[key]\n ?? evlogNs?.[key]\n ?? rootNs?.[key]\n ?? resolveEnv(env)\n }\n\n return config as Partial<T>\n}\n\nfunction shouldProbeRuntimeConfig<T>(\n fields: ConfigField<T>[],\n overrides?: Partial<T>,\n): boolean {\n // Optional tuning fields (e.g. timeout/retries) should not trigger Nitro\n // virtual-module imports when env/overrides already resolve the env-backed\n // adapter fields in non-Nitro runtimes.\n return fields.some(({ key, env }) => {\n if (overrides?.[key] !== undefined) return false\n if (!env) return false\n return resolveEnv(env) === undefined\n })\n}\n\nfunction resolveEnv(envKeys?: string[]): string | undefined {\n if (!envKeys) return undefined\n for (const key of envKeys) {\n const val = process.env[key]\n if (val) return val\n }\n return undefined\n}\n","export interface HttpPostOptions {\n url: string\n headers: Record<string, string>\n body: string\n timeout: number\n label: string\n retries?: number\n}\n\nfunction isRetryable(error: unknown): boolean {\n if (error instanceof DOMException && error.name === 'AbortError') return true\n if (error instanceof TypeError) return true\n if (error instanceof Error) {\n const match = error.message.match(/API error: (\\d+)/)\n if (match) return Number.parseInt(match[1]) >= 500\n }\n return false\n}\n\nexport async function httpPost({ url, headers, body, timeout, label, retries = 2 }: HttpPostOptions): Promise<void> {\n const normalizedRetries = Number.isFinite(retries) && retries >= 0 ? Math.floor(retries) : 2\n\n let lastError: Error | undefined\n\n for (let attempt = 0; attempt <= normalizedRetries; attempt++) {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), timeout)\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body,\n signal: controller.signal,\n })\n\n if (!response.ok) {\n const text = await response.text().catch(() => 'Unknown error')\n const safeText = text.length > 200 ? `${text.slice(0, 200)}...[truncated]` : text\n throw new Error(`${label} API error: ${response.status} ${response.statusText} - ${safeText}`)\n }\n\n clearTimeout(timeoutId)\n return\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error instanceof DOMException && error.name === 'AbortError') {\n lastError = new Error(`${label} request timed out after ${timeout}ms`)\n } else {\n lastError = error as Error\n }\n\n if (!isRetryable(error) || attempt === normalizedRetries) {\n throw lastError\n }\n\n await new Promise<void>(r => setTimeout(r, 200 * 2 ** attempt))\n }\n }\n\n throw lastError!\n}\n"],"mappings":";;;;;;;;AASA,SAAgB,mBAA6D;AAC3E,QAAO,6BAA6B;;AAQtC,eAAsB,qBACpB,WACA,QACA,WACqB;CACrB,MAAM,gBAAgB,yBAAyB,QAAQ,UAAU,GAC7D,MAAM,kBAAkB,GACxB,KAAA;CACJ,MAAM,UAAU,eAAe,QAAQ;CACvC,MAAM,SAAS,gBAAgB;CAE/B,MAAM,SAAkC,EAAE;AAE1C,MAAK,MAAM,EAAE,KAAK,SAAS,OACzB,QAAO,OACL,YAAY,QACT,UAAU,QACV,SAAS,QACT,WAAW,IAAI;AAGtB,QAAO;;AAGT,SAAS,yBACP,QACA,WACS;AAIT,QAAO,OAAO,MAAM,EAAE,KAAK,UAAU;AACnC,MAAI,YAAY,SAAS,KAAA,EAAW,QAAO;AAC3C,MAAI,CAAC,IAAK,QAAO;AACjB,SAAO,WAAW,IAAI,KAAK,KAAA;GAC3B;;AAGJ,SAAS,WAAW,SAAwC;AAC1D,KAAI,CAAC,QAAS,QAAO,KAAA;AACrB,MAAK,MAAM,OAAO,SAAS;EACzB,MAAM,MAAM,QAAQ,IAAI;AACxB,MAAI,IAAK,QAAO;;;;;ACnDpB,SAAS,YAAY,OAAyB;AAC5C,KAAI,iBAAiB,gBAAgB,MAAM,SAAS,aAAc,QAAO;AACzE,KAAI,iBAAiB,UAAW,QAAO;AACvC,KAAI,iBAAiB,OAAO;EAC1B,MAAM,QAAQ,MAAM,QAAQ,MAAM,mBAAmB;AACrD,MAAI,MAAO,QAAO,OAAO,SAAS,MAAM,GAAG,IAAI;;AAEjD,QAAO;;AAGT,eAAsB,SAAS,EAAE,KAAK,SAAS,MAAM,SAAS,OAAO,UAAU,KAAqC;CAClH,MAAM,oBAAoB,OAAO,SAAS,QAAQ,IAAI,WAAW,IAAI,KAAK,MAAM,QAAQ,GAAG;CAE3F,IAAI;AAEJ,MAAK,IAAI,UAAU,GAAG,WAAW,mBAAmB,WAAW;EAC7D,MAAM,aAAa,IAAI,iBAAiB;EACxC,MAAM,YAAY,iBAAiB,WAAW,OAAO,EAAE,QAAQ;AAE/D,MAAI;GACF,MAAM,WAAW,MAAM,MAAM,KAAK;IAChC,QAAQ;IACR;IACA;IACA,QAAQ,WAAW;IACpB,CAAC;AAEF,OAAI,CAAC,SAAS,IAAI;IAChB,MAAM,OAAO,MAAM,SAAS,MAAM,CAAC,YAAY,gBAAgB;IAC/D,MAAM,WAAW,KAAK,SAAS,MAAM,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC,kBAAkB;AAC7E,UAAM,IAAI,MAAM,GAAG,MAAM,cAAc,SAAS,OAAO,GAAG,SAAS,WAAW,KAAK,WAAW;;AAGhG,gBAAa,UAAU;AACvB;WACO,OAAO;AACd,gBAAa,UAAU;AAEvB,OAAI,iBAAiB,gBAAgB,MAAM,SAAS,aAClD,6BAAY,IAAI,MAAM,GAAG,MAAM,2BAA2B,QAAQ,IAAI;OAEtE,aAAY;AAGd,OAAI,CAAC,YAAY,MAAM,IAAI,YAAY,kBACrC,OAAM;AAGR,SAAM,IAAI,SAAc,MAAK,WAAW,GAAG,MAAM,KAAK,QAAQ,CAAC;;;AAInE,OAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_severity-CQijvfhU.mjs","names":[],"sources":["../src/adapters/_severity.ts"],"sourcesContent":["import type { LogLevel } from '../types'\n\nexport const OTEL_SEVERITY_NUMBER: Record<LogLevel, number> = {\n debug: 5,\n info: 9,\n warn: 13,\n error: 17,\n}\n\nexport const OTEL_SEVERITY_TEXT: Record<LogLevel, string> = {\n debug: 'DEBUG',\n info: 'INFO',\n warn: 'WARN',\n error: 'ERROR',\n}\n"],"mappings":";AAEA,MAAa,uBAAiD;CAC5D,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACR;AAED,MAAa,qBAA+C;CAC1D,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACR"}