@visulima/pail 4.0.0-alpha.9 → 4.0.1

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 (145) hide show
  1. package/CHANGELOG.md +519 -0
  2. package/LICENSE.md +270 -166
  3. package/README.md +53 -24
  4. package/dist/error.d.ts +95 -96
  5. package/dist/error.js +5 -76
  6. package/dist/index.browser.d.ts +568 -47
  7. package/dist/index.browser.js +19 -1499
  8. package/dist/index.server.d.ts +749 -65
  9. package/dist/index.server.js +32 -3179
  10. package/dist/middleware/elysia.d.ts +66 -63
  11. package/dist/middleware/elysia.js +1 -70
  12. package/dist/middleware/express.d.ts +74 -71
  13. package/dist/middleware/express.js +1 -29
  14. package/dist/middleware/fastify.d.ts +70 -67
  15. package/dist/middleware/fastify.js +1 -46
  16. package/dist/middleware/hono.d.ts +75 -72
  17. package/dist/middleware/hono.js +1 -33
  18. package/dist/middleware/next/handler.d.ts +102 -34
  19. package/dist/middleware/next/handler.js +1 -53
  20. package/dist/middleware/sveltekit.d.ts +101 -98
  21. package/dist/middleware/sveltekit.js +1 -43
  22. package/dist/object-tree.d.ts +67 -70
  23. package/dist/object-tree.js +2 -89
  24. package/dist/packem_shared/AbstractJsonReporter-Bp_JCrMQ.js +1 -0
  25. package/dist/packem_shared/AbstractJsonReporter-w_bGGiD-.js +1 -0
  26. package/dist/packem_shared/JsonReporter-Sd_lJGS-.js +2 -0
  27. package/dist/packem_shared/JsonReporter-bmem9lcg.js +1 -0
  28. package/dist/packem_shared/PailError-CbU1Ogfa.js +5 -0
  29. package/dist/packem_shared/PrettyReporter-CcDdPQSt.js +44 -0
  30. package/dist/packem_shared/PrettyReporter-DsHfKOU7.js +5 -0
  31. package/dist/packem_shared/abstract-json-reporter.d-wfESoEa-.d.ts +62 -0
  32. package/dist/packem_shared/abstract-pretty-reporter-DrLBJ6ds.js +57 -0
  33. package/dist/packem_shared/addKnownErrorConstructor-C1OJTj2D-0FlJMfXz.js +25 -0
  34. package/dist/packem_shared/constants-DKfCaSUR.js +1 -0
  35. package/dist/packem_shared/constants-ep2nsfdy.js +1 -0
  36. package/dist/packem_shared/create-middleware-logger.d-B-JmQ1Sl.d.ts +47 -0
  37. package/dist/packem_shared/headers-DH0H2s8W.js +1 -0
  38. package/dist/packem_shared/index-Q1764hvO.js +1 -0
  39. package/dist/packem_shared/index.d-T71KjNAr.d.ts +16 -0
  40. package/dist/packem_shared/pailMiddleware-B5DJoBYl.js +1 -0
  41. package/dist/packem_shared/serializeError-C-NFvZ8_-D0CA_Qlx.js +1 -0
  42. package/dist/packem_shared/storage-DaXAlpiO.js +1 -0
  43. package/dist/packem_shared/types.d-Cz9S7jZh.d.ts +201 -0
  44. package/dist/packem_shared/types.d-bWnqHJKL.d.ts +211 -0
  45. package/dist/packem_shared/types.d-xxE3FOD3.d.ts +229 -0
  46. package/dist/packem_shared/useLogger-DB34CuU5.js +1 -0
  47. package/dist/packem_shared/wide-event.d-D3ATYpoK.d.ts +717 -0
  48. package/dist/packem_shared/write-console-log-based-on-level-BqjxV016.js +1 -0
  49. package/dist/packem_shared/write-stream-C7jxLxIT.js +1 -0
  50. package/dist/processor/caller/caller-processor.d.ts +50 -47
  51. package/dist/processor/caller/caller-processor.js +1 -59
  52. package/dist/processor/environment-processor.d.ts +114 -113
  53. package/dist/processor/environment-processor.js +1 -78
  54. package/dist/processor/message-formatter-processor.d.ts +59 -49
  55. package/dist/processor/message-formatter-processor.js +1 -713
  56. package/dist/processor/opentelemetry-processor.d.ts +70 -66
  57. package/dist/processor/opentelemetry-processor.js +1 -52
  58. package/dist/processor/redact-processor.d.ts +99 -41
  59. package/dist/processor/redact-processor.js +1 -30
  60. package/dist/processor/sampling-processor.d.ts +103 -101
  61. package/dist/processor/sampling-processor.js +1 -59
  62. package/dist/reporter/file/json-file-reporter.d.ts +109 -42
  63. package/dist/reporter/file/json-file-reporter.js +2 -136
  64. package/dist/reporter/http/abstract-http-reporter.d.ts +256 -211
  65. package/dist/reporter/http/abstract-http-reporter.js +2 -435
  66. package/dist/reporter/http/http-reporter.d.ts +41 -36
  67. package/dist/reporter/http/http-reporter.edge-light.d.ts +487 -39
  68. package/dist/reporter/http/http-reporter.edge-light.js +2 -733
  69. package/dist/reporter/http/http-reporter.js +1 -13
  70. package/dist/reporter/json/index.browser.d.ts +98 -3
  71. package/dist/reporter/json/index.browser.js +1 -2
  72. package/dist/reporter/json/index.d.ts +53 -3
  73. package/dist/reporter/json/index.js +1 -2
  74. package/dist/reporter/pretty/index.browser.d.ts +105 -2
  75. package/dist/reporter/pretty/index.browser.js +1 -1
  76. package/dist/reporter/pretty/index.d.ts +270 -2
  77. package/dist/reporter/pretty/index.js +1 -1
  78. package/dist/reporter/simple/simple-reporter.server.d.ts +215 -18
  79. package/dist/reporter/simple/simple-reporter.server.js +8 -182
  80. package/dist/wide-event.d.ts +6 -300
  81. package/dist/wide-event.js +1 -281
  82. package/package.json +43 -58
  83. package/dist/constants.d.ts +0 -37
  84. package/dist/interactive/index.d.ts +0 -2
  85. package/dist/interactive/index.js +0 -2
  86. package/dist/interactive/interactive-manager.d.ts +0 -108
  87. package/dist/interactive/interactive-stream-hook.d.ts +0 -68
  88. package/dist/middleware/next/middleware.d.ts +0 -59
  89. package/dist/middleware/next/storage.d.ts +0 -14
  90. package/dist/middleware/shared/create-middleware-logger.d.ts +0 -82
  91. package/dist/middleware/shared/headers.d.ts +0 -14
  92. package/dist/middleware/shared/routes.d.ts +0 -30
  93. package/dist/middleware/shared/storage.d.ts +0 -29
  94. package/dist/packem_shared/AbstractJsonReporter-CGKHS8_M.js +0 -286
  95. package/dist/packem_shared/AbstractJsonReporter-DDjDkciI.js +0 -286
  96. package/dist/packem_shared/InteractiveManager-Cd6A14ZK.js +0 -172
  97. package/dist/packem_shared/InteractiveStreamHook-ePIURL_U.js +0 -133
  98. package/dist/packem_shared/JsonReporter-B3XX8GHN.js +0 -58
  99. package/dist/packem_shared/JsonReporter-p_BXg6Sj.js +0 -28
  100. package/dist/packem_shared/PrettyReporter-BYL3NrdA.js +0 -214
  101. package/dist/packem_shared/PrettyReporter-CvBn-hxP.js +0 -1459
  102. package/dist/packem_shared/Spinner-DIdVcfWq.js +0 -2183
  103. package/dist/packem_shared/abstract-pretty-reporter-jU8WL_6c.js +0 -2602
  104. package/dist/packem_shared/constants-B1RjD_ps.js +0 -99
  105. package/dist/packem_shared/constants-omsTHUWB.js +0 -119
  106. package/dist/packem_shared/createPailError-B11aRfrT.js +0 -76
  107. package/dist/packem_shared/getBarChar-BWj1UrH3.js +0 -404
  108. package/dist/packem_shared/headers-Cp4uLtr4.js +0 -123
  109. package/dist/packem_shared/index-DnkF86LQ.js +0 -658
  110. package/dist/packem_shared/index-frijFf5m.js +0 -1252
  111. package/dist/packem_shared/pailMiddleware-Ci88geIF.js +0 -24
  112. package/dist/packem_shared/storage-D0vqz8OX.js +0 -36
  113. package/dist/packem_shared/useLogger-D0rU3lcX.js +0 -33
  114. package/dist/packem_shared/write-console-log-based-on-level-DBmRYXpj.js +0 -14
  115. package/dist/packem_shared/write-stream-BG8fhcs3.js +0 -6
  116. package/dist/pail.browser.d.ts +0 -412
  117. package/dist/pail.server.d.ts +0 -233
  118. package/dist/processor/caller/get-caller-filename.d.ts +0 -23
  119. package/dist/progress-bar.d.ts +0 -136
  120. package/dist/progress-bar.js +0 -404
  121. package/dist/reporter/file/utils/rotating-file-stream.d.ts +0 -48
  122. package/dist/reporter/http/utils/compression.d.ts +0 -7
  123. package/dist/reporter/http/utils/log-size-error.d.ts +0 -30
  124. package/dist/reporter/http/utils/retry.d.ts +0 -27
  125. package/dist/reporter/json/abstract-json-reporter.d.ts +0 -61
  126. package/dist/reporter/json/json-reporter.browser.d.ts +0 -40
  127. package/dist/reporter/json/json-reporter.server.d.ts +0 -50
  128. package/dist/reporter/pretty/abstract-pretty-reporter.d.ts +0 -83
  129. package/dist/reporter/pretty/pretty-reporter.browser.d.ts +0 -36
  130. package/dist/reporter/pretty/pretty-reporter.server.d.ts +0 -70
  131. package/dist/reporter/raw/raw-reporter.browser.d.ts +0 -5
  132. package/dist/reporter/raw/raw-reporter.server.d.ts +0 -13
  133. package/dist/reporter/utils/default-inspector-config.d.ts +0 -3
  134. package/dist/reporter/utils/format-label.d.ts +0 -3
  135. package/dist/spinner.d.ts +0 -220
  136. package/dist/spinner.js +0 -2183
  137. package/dist/types.d.ts +0 -241
  138. package/dist/utils/ansi-escapes.d.ts +0 -4
  139. package/dist/utils/arrayify.d.ts +0 -2
  140. package/dist/utils/get-longest-badge.d.ts +0 -4
  141. package/dist/utils/get-longest-label.d.ts +0 -4
  142. package/dist/utils/merge-types.d.ts +0 -4
  143. package/dist/utils/stream/safe-stream-handler.d.ts +0 -21
  144. package/dist/utils/write-console-log-based-on-level.d.ts +0 -4
  145. package/dist/utils/write-stream.d.ts +0 -2
@@ -1,71 +1,74 @@
1
- import type { WideEvent } from "../wide-event.d.ts";
2
- import type { PailMiddlewareOptions } from "./shared/create-middleware-logger.d.ts";
1
+ import { W as WideEvent } from "../packem_shared/wide-event.d-D3ATYpoK.js";
2
+ import { P as PailMiddlewareOptions } from "../packem_shared/create-middleware-logger.d-B-JmQ1Sl.js";
3
+ import "../packem_shared/index.d-T71KjNAr.js";
4
+ import 'type-fest';
5
+ import "../packem_shared/types.d-bWnqHJKL.js";
6
+ import '@visulima/colorize';
7
+ import '@visulima/interactive-manager';
3
8
  /**
4
- * An Elysia-like instance that supports the derive/hook registration API.
5
- * Compatible with Elysia v1+.
6
- */
9
+ * An Elysia-like instance that supports the derive/hook registration API.
10
+ * Compatible with Elysia v1+.
11
+ */
7
12
  interface PailElysiaInstance {
8
- derive: (options: {
9
- as: string;
10
- }, handler: (context: {
11
- request: Request;
12
- }) => Record<string, unknown>) => PailElysiaInstance;
13
- onAfterHandle: (options: {
14
- as: string;
15
- }, handler: (context: {
16
- request: Request;
17
- set: {
18
- status?: number;
19
- };
20
- }) => Promise<void>) => PailElysiaInstance;
21
- onError: (options: {
22
- as: string;
23
- }, handler: (context: {
24
- error: Error;
25
- request: Request;
26
- }) => Promise<void>) => PailElysiaInstance;
13
+ derive: (options: {
14
+ as: string;
15
+ }, handler: (context: {
16
+ request: Request;
17
+ }) => Record<string, unknown>) => PailElysiaInstance;
18
+ onAfterHandle: (options: {
19
+ as: string;
20
+ }, handler: (context: {
21
+ request: Request;
22
+ set: {
23
+ status?: number;
24
+ };
25
+ }) => Promise<void>) => PailElysiaInstance;
26
+ onError: (options: {
27
+ as: string;
28
+ }, handler: (context: {
29
+ error: Error;
30
+ request: Request;
31
+ }) => Promise<void>) => PailElysiaInstance;
27
32
  }
28
33
  /**
29
- * Retrieve the request-scoped WideEvent logger from AsyncLocalStorage.
30
- * Must be called within a request handler where pail middleware is active.
31
- * @returns The request-scoped WideEvent logger
32
- * @throws Error if called outside of the middleware context
33
- */
34
+ * Retrieve the request-scoped WideEvent logger from AsyncLocalStorage.
35
+ * Must be called within a request handler where pail middleware is active.
36
+ * @returns The request-scoped WideEvent logger
37
+ * @throws Error if called outside of the middleware context
38
+ */
34
39
  declare const useLogger: () => WideEvent;
35
40
  /**
36
- * Configuration options for the Elysia pail plugin.
37
- * @template T - Custom logger type names from the pail instance
38
- */
41
+ * Configuration options for the Elysia pail plugin.
42
+ * @template T - Custom logger type names from the pail instance
43
+ */
39
44
  type ElysiaPluginOptions<T extends string = string> = PailMiddlewareOptions<T>;
40
45
  /**
41
- * Register pail wide event logging as an Elysia plugin.
42
- *
43
- * Injects a `log` property into handler context via `derive`, accessible via:
44
- * - `context.log` in route handlers (auto-injected)
45
- * - `useLogger()` from anywhere in the async call stack
46
- *
47
- * The wide event is automatically emitted on response or error.
48
- * @param app The Elysia instance
49
- * @param options Plugin configuration
50
- * @returns The Elysia instance (for chaining)
51
- * @example
52
- * ```typescript
53
- * import { Elysia } from "elysia";
54
- * import { createPail } from "@visulima/pail";
55
- * import { pailPlugin, useLogger } from "@visulima/pail/middleware/elysia";
56
- *
57
- * const logger = createPail();
58
- * const app = new Elysia();
59
- *
60
- * pailPlugin(app, { pail: logger });
61
- *
62
- * app.get("/api/users", ({ log }) => {
63
- * log.set({ user: { id: 1 } });
64
- * return { ok: true };
65
- * });
66
- * ```
67
- */
68
- export declare const pailPlugin: <T extends string = string>(app: PailElysiaInstance, options: ElysiaPluginOptions<T>) => PailElysiaInstance;
69
- export { useLogger };
70
- export type { ElysiaPluginOptions, PailElysiaInstance };
71
- export type { WideEvent } from "../wide-event.d.ts";
46
+ * Register pail wide event logging as an Elysia plugin.
47
+ *
48
+ * Injects a `log` property into handler context via `derive`, accessible via:
49
+ * - `context.log` in route handlers (auto-injected)
50
+ * - `useLogger()` from anywhere in the async call stack
51
+ *
52
+ * The wide event is automatically emitted on response or error.
53
+ * @param app The Elysia instance
54
+ * @param options Plugin configuration
55
+ * @returns The Elysia instance (for chaining)
56
+ * @example
57
+ * ```typescript
58
+ * import { Elysia } from "elysia";
59
+ * import { createPail } from "@visulima/pail";
60
+ * import { pailPlugin, useLogger } from "@visulima/pail/middleware/elysia";
61
+ *
62
+ * const logger = createPail();
63
+ * const app = new Elysia();
64
+ *
65
+ * pailPlugin(app, { pail: logger });
66
+ *
67
+ * app.get("/api/users", ({ log }) => {
68
+ * log.set({ user: { id: 1 } });
69
+ * return { ok: true };
70
+ * });
71
+ * ```
72
+ */
73
+ declare const pailPlugin: <T extends string = string>(app: PailElysiaInstance, options: ElysiaPluginOptions<T>) => PailElysiaInstance;
74
+ export { type ElysiaPluginOptions, type PailElysiaInstance, type WideEvent, pailPlugin, useLogger };
@@ -1,70 +1 @@
1
- import { createRequire as __cjs_createRequire } from "node:module";
2
-
3
- const __cjs_require = __cjs_createRequire(import.meta.url);
4
-
5
- const __cjs_getProcess = typeof globalThis !== "undefined" && typeof globalThis.process !== "undefined" ? globalThis.process : process;
6
-
7
- const __cjs_getBuiltinModule = (module) => {
8
- // Check if we're in Node.js and version supports getBuiltinModule
9
- if (typeof __cjs_getProcess !== "undefined" && __cjs_getProcess.versions && __cjs_getProcess.versions.node) {
10
- const [major, minor] = __cjs_getProcess.versions.node.split(".").map(Number);
11
- // Node.js 20.16.0+ and 22.3.0+
12
- if (major > 22 || (major === 22 && minor >= 3) || (major === 20 && minor >= 16)) {
13
- return __cjs_getProcess.getBuiltinModule(module);
14
- }
15
- }
16
- // Fallback to createRequire
17
- return __cjs_require(module);
18
- };
19
-
20
- const {
21
- AsyncLocalStorage
22
- } = __cjs_getBuiltinModule("node:async_hooks");
23
- import { a as extractSafeHeaders, c as createMiddlewareLogger } from '../packem_shared/headers-Cp4uLtr4.js';
24
-
25
- const storage = new AsyncLocalStorage();
26
- const activeLoggers = /* @__PURE__ */ new WeakSet();
27
- const useLogger = () => {
28
- const logger = storage.getStore();
29
- if (!logger || !activeLoggers.has(logger)) {
30
- throw new Error("[pail] useLogger() called outside of Elysia pail plugin context.");
31
- }
32
- return logger;
33
- };
34
- const pailPlugin = (app, options) => {
35
- const requestState = /* @__PURE__ */ new WeakMap();
36
- const emitted = /* @__PURE__ */ new WeakSet();
37
- return app.derive({ as: "global" }, ({ request }) => {
38
- const url = new URL(request.url);
39
- const requestId = request.headers.get("x-request-id") ?? crypto.randomUUID();
40
- const safeHeaders = extractSafeHeaders(request.headers);
41
- const result = createMiddlewareLogger(options, {
42
- headers: safeHeaders,
43
- method: request.method,
44
- path: url.pathname,
45
- requestId
46
- });
47
- requestState.set(request, result);
48
- if (!result.skipped) {
49
- activeLoggers.add(result.logger);
50
- storage.enterWith(result.logger);
51
- }
52
- return { log: result.logger };
53
- }).onAfterHandle({ as: "global" }, async ({ request, set }) => {
54
- const state = requestState.get(request);
55
- if (!state?.skipped && state && !emitted.has(request)) {
56
- emitted.add(request);
57
- state.finish({ status: set.status ?? 200 });
58
- activeLoggers.delete(state.logger);
59
- }
60
- }).onError({ as: "global" }, async ({ error, request }) => {
61
- const state = requestState.get(request);
62
- if (!state?.skipped && state && !emitted.has(request)) {
63
- emitted.add(request);
64
- state.finish({ error });
65
- activeLoggers.delete(state.logger);
66
- }
67
- });
68
- };
69
-
70
- export { pailPlugin, useLogger };
1
+ import{createRequire as u}from"node:module";import{e as m,c as _}from"../packem_shared/headers-DH0H2s8W.js";const p=u(import.meta.url),i=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,h=s=>{if(typeof i<"u"&&i.versions&&i.versions.node){const[a,o]=i.versions.node.split(".").map(Number);if(a>22||a===22&&o>=3||a===20&&o>=16)return i.getBuiltinModule(s)}return p(s)},{AsyncLocalStorage:f}=h("node:async_hooks"),g=new f,d=new WeakSet,w=()=>{const s=g.getStore();if(!s||!d.has(s))throw new Error("[pail] useLogger() called outside of Elysia pail plugin context.");return s},b=(s,a)=>{const o=new WeakMap,l=new WeakSet;return s.derive({as:"global"},({request:e})=>{const t=new URL(e.url),r=e.headers.get("x-request-id")??crypto.randomUUID(),c=m(e.headers),n=_(a,{headers:c,method:e.method,path:t.pathname,requestId:r});return o.set(e,n),n.skipped||(d.add(n.logger),g.enterWith(n.logger)),{log:n.logger}}).onAfterHandle({as:"global"},async({request:e,set:t})=>{const r=o.get(e);!r?.skipped&&r&&!l.has(e)&&(l.add(e),r.finish({status:t.status??200}),d.delete(r.logger))}).onError({as:"global"},async({error:e,request:t})=>{const r=o.get(t);!r?.skipped&&r&&!l.has(t)&&(l.add(t),r.finish({error:e}),d.delete(r.logger))})};export{b as pailPlugin,w as useLogger};
@@ -1,86 +1,89 @@
1
- import type { WideEvent } from "../wide-event.d.ts";
2
- import type { PailMiddlewareOptions } from "./shared/create-middleware-logger.d.ts";
1
+ import { W as WideEvent } from "../packem_shared/wide-event.d-D3ATYpoK.js";
2
+ import { P as PailMiddlewareOptions } from "../packem_shared/create-middleware-logger.d-B-JmQ1Sl.js";
3
+ import "../packem_shared/index.d-T71KjNAr.js";
4
+ import 'type-fest';
5
+ import "../packem_shared/types.d-bWnqHJKL.js";
6
+ import '@visulima/colorize';
7
+ import '@visulima/interactive-manager';
3
8
  /**
4
- * An Express-like request object with the pail logger attached.
5
- * Use this to type your route handlers when accessing `req.log`.
6
- * @example
7
- * ```typescript
8
- * import type { PailRequest } from "@visulima/pail/middleware/express";
9
- *
10
- * app.get("/api/users", (req: PailRequest, res) => {
11
- * req.log?.set({ user: { id: 1 } });
12
- * });
13
- * ```
14
- */
9
+ * An Express-like request object with the pail logger attached.
10
+ * Use this to type your route handlers when accessing `req.log`.
11
+ * @example
12
+ * ```typescript
13
+ * import type { PailRequest } from "@visulima/pail/middleware/express";
14
+ *
15
+ * app.get("/api/users", (req: PailRequest, res) => {
16
+ * req.log?.set({ user: { id: 1 } });
17
+ * });
18
+ * ```
19
+ */
15
20
  interface PailRequest {
16
- [key: string]: unknown;
17
- headers: Record<string, string | string[] | undefined>;
18
- /**
19
- * The request-scoped WideEvent logger, attached by pail middleware.
20
- * Only present for non-excluded routes.
21
- */
22
- log?: WideEvent;
23
- method: string;
24
- originalUrl?: string;
25
- path: string;
21
+ [key: string]: unknown;
22
+ headers: Record<string, string | string[] | undefined>;
23
+ /**
24
+ * The request-scoped WideEvent logger, attached by pail middleware.
25
+ * Only present for non-excluded routes.
26
+ */
27
+ log?: WideEvent;
28
+ method: string;
29
+ originalUrl?: string;
30
+ path: string;
26
31
  }
27
32
  /**
28
- * An Express-like response object.
29
- */
33
+ * An Express-like response object.
34
+ */
30
35
  interface PailResponse {
31
- [key: string]: unknown;
32
- on: (event: string, listener: () => void) => void;
33
- statusCode: number;
36
+ [key: string]: unknown;
37
+ on: (event: string, listener: () => void) => void;
38
+ statusCode: number;
34
39
  }
35
40
  /**
36
- * Express-compatible next function.
37
- */
41
+ * Express-compatible next function.
42
+ */
38
43
  type PailNextFunction = (error?: unknown) => void;
39
44
  /**
40
- * The Express middleware function signature returned by `pailMiddleware()`.
41
- */
45
+ * The Express middleware function signature returned by `pailMiddleware()`.
46
+ */
42
47
  type PailExpressMiddleware = (request: PailRequest, response: PailResponse, next: PailNextFunction) => void;
43
48
  /**
44
- * Retrieve the request-scoped WideEvent logger from AsyncLocalStorage.
45
- * Must be called within a request handled by the pail Express middleware.
46
- * @returns The request-scoped WideEvent logger
47
- * @throws Error if called outside of the middleware context
48
- */
49
+ * Retrieve the request-scoped WideEvent logger from AsyncLocalStorage.
50
+ * Must be called within a request handled by the pail Express middleware.
51
+ * @returns The request-scoped WideEvent logger
52
+ * @throws Error if called outside of the middleware context
53
+ */
49
54
  declare const useLogger: () => WideEvent;
50
55
  /**
51
- * Configuration options for the Express pail middleware.
52
- * @template T - Custom logger type names from the pail instance
53
- */
56
+ * Configuration options for the Express pail middleware.
57
+ * @template T - Custom logger type names from the pail instance
58
+ */
54
59
  type ExpressMiddlewareOptions<T extends string = string> = PailMiddlewareOptions<T>;
55
60
  /**
56
- * Create Express middleware that attaches a WideEvent logger to each request.
57
- *
58
- * The logger is available via:
59
- * - `req.log` on the request object
60
- * - `useLogger()` from anywhere in the async call stack
61
- *
62
- * The wide event is automatically emitted when the response finishes.
63
- * @param options Middleware configuration
64
- * @returns Express middleware function
65
- * @example
66
- * ```typescript
67
- * import express from "express";
68
- * import { createPail } from "@visulima/pail";
69
- * import { pailMiddleware, useLogger } from "@visulima/pail/middleware/express";
70
- *
71
- * const app = express();
72
- * const logger = createPail();
73
- *
74
- * app.use(pailMiddleware({ pail: logger }));
75
- *
76
- * app.get("/api/users", (req, res) => {
77
- * req.log.set({ user: { id: 1 } });
78
- * // or: useLogger().set({ user: { id: 1 } });
79
- * res.json({ ok: true });
80
- * });
81
- * ```
82
- */
83
- export declare const pailMiddleware: <T extends string = string>(options: ExpressMiddlewareOptions<T>) => PailExpressMiddleware;
84
- export { useLogger };
85
- export type { ExpressMiddlewareOptions, PailExpressMiddleware, PailNextFunction, PailRequest, PailResponse };
86
- export type { WideEvent } from "../wide-event.d.ts";
61
+ * Create Express middleware that attaches a WideEvent logger to each request.
62
+ *
63
+ * The logger is available via:
64
+ * - `req.log` on the request object
65
+ * - `useLogger()` from anywhere in the async call stack
66
+ *
67
+ * The wide event is automatically emitted when the response finishes.
68
+ * @param options Middleware configuration
69
+ * @returns Express middleware function
70
+ * @example
71
+ * ```typescript
72
+ * import express from "express";
73
+ * import { createPail } from "@visulima/pail";
74
+ * import { pailMiddleware, useLogger } from "@visulima/pail/middleware/express";
75
+ *
76
+ * const app = express();
77
+ * const logger = createPail();
78
+ *
79
+ * app.use(pailMiddleware({ pail: logger }));
80
+ *
81
+ * app.get("/api/users", (req, res) => {
82
+ * req.log.set({ user: { id: 1 } });
83
+ * // or: useLogger().set({ user: { id: 1 } });
84
+ * res.json({ ok: true });
85
+ * });
86
+ * ```
87
+ */
88
+ declare const pailMiddleware: <T extends string = string>(options: ExpressMiddlewareOptions<T>) => PailExpressMiddleware;
89
+ export { type ExpressMiddlewareOptions, type PailExpressMiddleware, type PailNextFunction, type PailRequest, type PailResponse, type WideEvent, pailMiddleware, useLogger };
@@ -1,29 +1 @@
1
- import { e as extractSafeNodeHeaders, c as createMiddlewareLogger } from '../packem_shared/headers-Cp4uLtr4.js';
2
- import { c as createLoggerStorage } from '../packem_shared/storage-D0vqz8OX.js';
3
-
4
- const loggerStorage = createLoggerStorage("Express middleware context. Make sure pail middleware is registered before your route handlers.");
5
- const useLogger = () => loggerStorage.useLogger();
6
- const pailMiddleware = (options) => (request, response, next) => {
7
- const requestId = request.headers["x-request-id"] ?? crypto.randomUUID();
8
- const path = request.originalUrl ?? request.path;
9
- const safeHeaders = extractSafeNodeHeaders(request.headers);
10
- const { finish, logger, skipped } = createMiddlewareLogger(options, {
11
- headers: safeHeaders,
12
- method: request.method,
13
- path,
14
- requestId
15
- });
16
- if (skipped) {
17
- next();
18
- return;
19
- }
20
- request.log = logger;
21
- response.on("finish", () => {
22
- finish({ status: response.statusCode });
23
- });
24
- loggerStorage.storage.run(logger, () => {
25
- next();
26
- });
27
- };
28
-
29
- export { pailMiddleware, useLogger };
1
+ import{a as u,c as p}from"../packem_shared/headers-DH0H2s8W.js";import{c}from"../packem_shared/storage-DaXAlpiO.js";const o=c("Express middleware context. Make sure pail middleware is registered before your route handlers."),f=()=>o.useLogger(),x=t=>(e,r,s)=>{const d=e.headers["x-request-id"]??crypto.randomUUID(),i=e.originalUrl??e.url??"/",g=u(e.headers),{finish:l,logger:a,skipped:n}=p(t,{headers:g,method:e.method,path:i,requestId:d});if(n){s();return}e.log=a,r.on("finish",()=>{l({status:r.statusCode})}),o.storage.run(a,()=>{s()})};export{x as pailMiddleware,f as useLogger};
@@ -1,81 +1,84 @@
1
- import type { WideEvent } from "../wide-event.d.ts";
2
- import type { PailMiddlewareOptions } from "./shared/create-middleware-logger.d.ts";
1
+ import { W as WideEvent } from "../packem_shared/wide-event.d-D3ATYpoK.js";
2
+ import { P as PailMiddlewareOptions } from "../packem_shared/create-middleware-logger.d-B-JmQ1Sl.js";
3
+ import "../packem_shared/index.d-T71KjNAr.js";
4
+ import 'type-fest';
5
+ import "../packem_shared/types.d-bWnqHJKL.js";
6
+ import '@visulima/colorize';
7
+ import '@visulima/interactive-manager';
3
8
  /**
4
- * A Fastify-like request object with the pail logger attached.
5
- * Use this to type your route handlers when accessing `request.log`.
6
- * @example
7
- * ```typescript
8
- * import type { PailFastifyRequest } from "@visulima/pail/middleware/fastify";
9
- *
10
- * app.get("/api/users", async (request: PailFastifyRequest, reply) => {
11
- * request.log?.set({ user: { id: 1 } });
12
- * });
13
- * ```
14
- */
9
+ * A Fastify-like request object with the pail logger attached.
10
+ * Use this to type your route handlers when accessing `request.log`.
11
+ * @example
12
+ * ```typescript
13
+ * import type { PailFastifyRequest } from "@visulima/pail/middleware/fastify";
14
+ *
15
+ * app.get("/api/users", async (request: PailFastifyRequest, reply) => {
16
+ * request.log?.set({ user: { id: 1 } });
17
+ * });
18
+ * ```
19
+ */
15
20
  interface PailFastifyRequest {
16
- [key: string]: unknown;
17
- headers: Record<string, string | string[] | undefined>;
18
- /**
19
- * The request-scoped WideEvent logger, attached by pail plugin.
20
- * Only present for non-excluded routes.
21
- */
22
- log?: WideEvent;
23
- method: string;
24
- url: string;
21
+ [key: string]: unknown;
22
+ headers: Record<string, string | string[] | undefined>;
23
+ /**
24
+ * The request-scoped WideEvent logger, attached by pail plugin.
25
+ * Only present for non-excluded routes.
26
+ */
27
+ log?: WideEvent;
28
+ method: string;
29
+ url: string;
25
30
  }
26
31
  /**
27
- * A Fastify-like reply object.
28
- */
32
+ * A Fastify-like reply object.
33
+ */
29
34
  interface PailFastifyReply {
30
- [key: string]: unknown;
31
- statusCode: number;
35
+ [key: string]: unknown;
36
+ statusCode: number;
32
37
  }
33
38
  /**
34
- * A Fastify-like instance that supports the hook registration API.
35
- */
39
+ * A Fastify-like instance that supports the hook registration API.
40
+ */
36
41
  interface PailFastifyInstance {
37
- addHook: ((name: "onError", hook: (request: PailFastifyRequest, reply: PailFastifyReply, error: Error) => Promise<void>) => void) & ((name: "onRequest", hook: (request: PailFastifyRequest, reply: PailFastifyReply, done: () => void) => void) => void) & ((name: "onResponse", hook: (request: PailFastifyRequest, reply: PailFastifyReply) => Promise<void>) => void);
42
+ addHook: ((name: "onError", hook: (request: PailFastifyRequest, reply: PailFastifyReply, error: Error) => Promise<void>) => void) & ((name: "onRequest", hook: (request: PailFastifyRequest, reply: PailFastifyReply, done: () => void) => void) => void) & ((name: "onResponse", hook: (request: PailFastifyRequest, reply: PailFastifyReply) => Promise<void>) => void);
38
43
  }
39
44
  /**
40
- * Retrieve the request-scoped WideEvent logger from AsyncLocalStorage.
41
- * Must be called within a request handled by the pail Fastify plugin.
42
- * @returns The request-scoped WideEvent logger
43
- * @throws Error if called outside of the plugin context
44
- */
45
+ * Retrieve the request-scoped WideEvent logger from AsyncLocalStorage.
46
+ * Must be called within a request handled by the pail Fastify plugin.
47
+ * @returns The request-scoped WideEvent logger
48
+ * @throws Error if called outside of the plugin context
49
+ */
45
50
  declare const useLogger: () => WideEvent;
46
51
  /**
47
- * Configuration options for the Fastify pail plugin.
48
- * @template T - Custom logger type names from the pail instance
49
- */
52
+ * Configuration options for the Fastify pail plugin.
53
+ * @template T - Custom logger type names from the pail instance
54
+ */
50
55
  type FastifyPluginOptions<T extends string = string> = PailMiddlewareOptions<T>;
51
56
  /**
52
- * Register pail wide event logging as a Fastify plugin.
53
- *
54
- * Attaches a WideEvent logger to each request, accessible via:
55
- * - `request.log` on the Fastify request object
56
- * - `useLogger()` from anywhere in the async call stack
57
- *
58
- * The wide event is automatically emitted on response or error.
59
- * @param fastify The Fastify instance
60
- * @param options Plugin configuration
61
- * @example
62
- * ```typescript
63
- * import Fastify from "fastify";
64
- * import { createPail } from "@visulima/pail";
65
- * import { pailPlugin, useLogger } from "@visulima/pail/middleware/fastify";
66
- *
67
- * const app = Fastify();
68
- * const logger = createPail();
69
- *
70
- * pailPlugin(app, { pail: logger });
71
- *
72
- * app.get("/api/users", async (request, reply) => {
73
- * request.log.set({ user: { id: 1 } });
74
- * return { ok: true };
75
- * });
76
- * ```
77
- */
78
- export declare const pailPlugin: <T extends string = string>(fastify: PailFastifyInstance, options: FastifyPluginOptions<T>) => void;
79
- export { useLogger };
80
- export type { FastifyPluginOptions, PailFastifyInstance, PailFastifyReply, PailFastifyRequest };
81
- export type { WideEvent } from "../wide-event.d.ts";
57
+ * Register pail wide event logging as a Fastify plugin.
58
+ *
59
+ * Attaches a WideEvent logger to each request, accessible via:
60
+ * - `request.log` on the Fastify request object
61
+ * - `useLogger()` from anywhere in the async call stack
62
+ *
63
+ * The wide event is automatically emitted on response or error.
64
+ * @param fastify The Fastify instance
65
+ * @param options Plugin configuration
66
+ * @example
67
+ * ```typescript
68
+ * import Fastify from "fastify";
69
+ * import { createPail } from "@visulima/pail";
70
+ * import { pailPlugin, useLogger } from "@visulima/pail/middleware/fastify";
71
+ *
72
+ * const app = Fastify();
73
+ * const logger = createPail();
74
+ *
75
+ * pailPlugin(app, { pail: logger });
76
+ *
77
+ * app.get("/api/users", async (request, reply) => {
78
+ * request.log.set({ user: { id: 1 } });
79
+ * return { ok: true };
80
+ * });
81
+ * ```
82
+ */
83
+ declare const pailPlugin: <T extends string = string>(fastify: PailFastifyInstance, options: FastifyPluginOptions<T>) => void;
84
+ export { type FastifyPluginOptions, type PailFastifyInstance, type PailFastifyReply, type PailFastifyRequest, type WideEvent, pailPlugin, useLogger };
@@ -1,46 +1 @@
1
- import { e as extractSafeNodeHeaders, c as createMiddlewareLogger } from '../packem_shared/headers-Cp4uLtr4.js';
2
- import { c as createLoggerStorage } from '../packem_shared/storage-D0vqz8OX.js';
3
-
4
- const loggerStorage = createLoggerStorage("Fastify middleware context. Make sure pail plugin is registered before your route handlers.");
5
- const useLogger = () => loggerStorage.useLogger();
6
- const pailPlugin = (fastify, options) => {
7
- const requestState = /* @__PURE__ */ new WeakMap();
8
- const emitted = /* @__PURE__ */ new WeakSet();
9
- fastify.addHook("onRequest", (request, _reply, done) => {
10
- const requestId = request.headers["x-request-id"] ?? crypto.randomUUID();
11
- const safeHeaders = extractSafeNodeHeaders(request.headers);
12
- const { finish, logger, skipped } = createMiddlewareLogger(options, {
13
- headers: safeHeaders,
14
- method: request.method,
15
- path: request.url,
16
- requestId
17
- });
18
- if (skipped) {
19
- done();
20
- return;
21
- }
22
- request.log = logger;
23
- requestState.set(request, { finish });
24
- loggerStorage.storage.run(logger, () => {
25
- done();
26
- });
27
- });
28
- fastify.addHook("onResponse", async (request, reply) => {
29
- const state = requestState.get(request);
30
- if (!state || emitted.has(request)) {
31
- return;
32
- }
33
- emitted.add(request);
34
- state.finish({ status: reply.statusCode });
35
- });
36
- fastify.addHook("onError", async (request, _reply, error) => {
37
- const state = requestState.get(request);
38
- if (!state || emitted.has(request)) {
39
- return;
40
- }
41
- emitted.add(request);
42
- state.finish({ error });
43
- });
44
- };
45
-
46
- export { pailPlugin, useLogger };
1
+ import{a as p,c as f}from"../packem_shared/headers-DH0H2s8W.js";import{c as l}from"../packem_shared/storage-DaXAlpiO.js";const i=l("Fastify middleware context. Make sure pail plugin is registered before your route handlers."),y=()=>i.useLogger(),w=(o,g)=>{const t=new WeakMap,s=new WeakSet;o.addHook("onRequest",(e,d,r)=>{const a=e.headers["x-request-id"]??crypto.randomUUID(),c=p(e.headers),{finish:u,logger:n,skipped:h}=f(g,{headers:c,method:e.method,path:e.url,requestId:a});if(h){r();return}e.log=n,t.set(e,{finish:u}),i.storage.run(n,()=>{r()})}),o.addHook("onResponse",async(e,d)=>{const r=t.get(e);!r||s.has(e)||(s.add(e),r.finish({status:d.statusCode}))}),o.addHook("onError",async(e,d,r)=>{const a=t.get(e);!a||s.has(e)||(s.add(e),a.finish({error:r}))})};export{w as pailPlugin,y as useLogger};