@visulima/pail 4.0.0-alpha.11 → 4.0.0-alpha.13

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 (127) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/LICENSE.md +131 -900
  3. package/dist/error.d.ts +95 -96
  4. package/dist/error.js +5 -76
  5. package/dist/index.browser.d.ts +557 -47
  6. package/dist/index.browser.js +19 -1499
  7. package/dist/index.server.d.ts +722 -61
  8. package/dist/index.server.js +31 -2803
  9. package/dist/middleware/elysia.d.ts +65 -63
  10. package/dist/middleware/elysia.js +1 -70
  11. package/dist/middleware/express.d.ts +73 -71
  12. package/dist/middleware/express.js +1 -29
  13. package/dist/middleware/fastify.d.ts +69 -67
  14. package/dist/middleware/fastify.js +1 -46
  15. package/dist/middleware/hono.d.ts +74 -72
  16. package/dist/middleware/hono.js +1 -33
  17. package/dist/middleware/next/handler.d.ts +101 -34
  18. package/dist/middleware/next/handler.js +1 -53
  19. package/dist/middleware/sveltekit.d.ts +100 -98
  20. package/dist/middleware/sveltekit.js +1 -43
  21. package/dist/object-tree.d.ts +67 -70
  22. package/dist/object-tree.js +2 -89
  23. package/dist/packem_shared/AbstractJsonReporter-BawNFYxI.js +1 -0
  24. package/dist/packem_shared/AbstractJsonReporter-Dt5-5x2R.js +1 -0
  25. package/dist/packem_shared/JsonReporter-15ln04rX.js +2 -0
  26. package/dist/packem_shared/JsonReporter-CerNvhg-.js +1 -0
  27. package/dist/packem_shared/PrettyReporter-Br5njEEy.js +5 -0
  28. package/dist/packem_shared/PrettyReporter-CgXnwIip.js +44 -0
  29. package/dist/packem_shared/abstract-json-reporter.d-Bz3lZEDi.d.ts +61 -0
  30. package/dist/packem_shared/abstract-pretty-reporter-BiHgKxG_.js +33 -0
  31. package/dist/packem_shared/constants-DKfCaSUR.js +1 -0
  32. package/dist/packem_shared/constants-ep2nsfdy.js +1 -0
  33. package/dist/packem_shared/create-middleware-logger.d-DeNLii5l.d.ts +47 -0
  34. package/dist/packem_shared/createPailError-53jAfQ-T.js +5 -0
  35. package/dist/packem_shared/headers-S8WyX-2m.js +1 -0
  36. package/dist/packem_shared/index-Bzp4LnJ5.js +1 -0
  37. package/dist/packem_shared/pailMiddleware-CWOJRmJq.js +1 -0
  38. package/dist/packem_shared/storage-DHM1EP2P.js +1 -0
  39. package/dist/packem_shared/types.d-ByY2ZuYG.d.ts +246 -0
  40. package/dist/packem_shared/types.d-C51XNfQz.d.ts +194 -0
  41. package/dist/packem_shared/types.d-CM5ie2qm.d.ts +236 -0
  42. package/dist/packem_shared/useLogger-qyZrjy4D.js +1 -0
  43. package/dist/packem_shared/wide-event.d-Ke44zirU.d.ts +704 -0
  44. package/dist/packem_shared/write-console-log-based-on-level-DfD64owL.js +1 -0
  45. package/dist/packem_shared/write-stream-Dd4_PTcm.js +1 -0
  46. package/dist/processor/caller/caller-processor.d.ts +49 -47
  47. package/dist/processor/caller/caller-processor.js +1 -59
  48. package/dist/processor/environment-processor.d.ts +113 -113
  49. package/dist/processor/environment-processor.js +1 -89
  50. package/dist/processor/message-formatter-processor.d.ts +51 -49
  51. package/dist/processor/message-formatter-processor.js +1 -715
  52. package/dist/processor/opentelemetry-processor.d.ts +69 -66
  53. package/dist/processor/opentelemetry-processor.js +1 -52
  54. package/dist/processor/redact-processor.d.ts +60 -41
  55. package/dist/processor/redact-processor.js +1 -31
  56. package/dist/processor/sampling-processor.d.ts +102 -101
  57. package/dist/processor/sampling-processor.js +1 -59
  58. package/dist/reporter/file/json-file-reporter.d.ts +91 -42
  59. package/dist/reporter/file/json-file-reporter.js +2 -136
  60. package/dist/reporter/http/abstract-http-reporter.d.ts +213 -211
  61. package/dist/reporter/http/abstract-http-reporter.js +2 -432
  62. package/dist/reporter/http/http-reporter.d.ts +40 -36
  63. package/dist/reporter/http/http-reporter.edge-light.d.ts +430 -38
  64. package/dist/reporter/http/http-reporter.edge-light.js +2 -728
  65. package/dist/reporter/http/http-reporter.js +1 -13
  66. package/dist/reporter/json/index.browser.d.ts +99 -3
  67. package/dist/reporter/json/index.browser.js +1 -2
  68. package/dist/reporter/json/index.d.ts +51 -3
  69. package/dist/reporter/json/index.js +1 -2
  70. package/dist/reporter/pretty/index.browser.d.ts +106 -2
  71. package/dist/reporter/pretty/index.browser.js +1 -1
  72. package/dist/reporter/pretty/index.d.ts +186 -2
  73. package/dist/reporter/pretty/index.js +1 -1
  74. package/dist/reporter/simple/simple-reporter.server.d.ts +168 -18
  75. package/dist/reporter/simple/simple-reporter.server.js +8 -182
  76. package/dist/wide-event.d.ts +5 -300
  77. package/dist/wide-event.js +1 -284
  78. package/package.json +29 -30
  79. package/dist/constants.d.ts +0 -37
  80. package/dist/middleware/next/middleware.d.ts +0 -59
  81. package/dist/middleware/next/storage.d.ts +0 -14
  82. package/dist/middleware/shared/create-middleware-logger.d.ts +0 -82
  83. package/dist/middleware/shared/headers.d.ts +0 -14
  84. package/dist/middleware/shared/routes.d.ts +0 -30
  85. package/dist/middleware/shared/storage.d.ts +0 -29
  86. package/dist/packem_shared/AbstractJsonReporter-BO8Calb4.js +0 -284
  87. package/dist/packem_shared/AbstractJsonReporter-nOj0Ft1F.js +0 -284
  88. package/dist/packem_shared/JsonReporter-CCmj7oYL.js +0 -28
  89. package/dist/packem_shared/JsonReporter-Ck2PIAEw.js +0 -58
  90. package/dist/packem_shared/PrettyReporter-BCvyNzXO.js +0 -2720
  91. package/dist/packem_shared/PrettyReporter-BtTr13Ha.js +0 -213
  92. package/dist/packem_shared/abstract-pretty-reporter-CXAKYCb8.js +0 -2635
  93. package/dist/packem_shared/constants-B1RjD_ps.js +0 -99
  94. package/dist/packem_shared/constants-omsTHUWB.js +0 -119
  95. package/dist/packem_shared/createPailError-B_sgL0nF.js +0 -76
  96. package/dist/packem_shared/headers-BxHWM6KI.js +0 -127
  97. package/dist/packem_shared/index-Bx3-C0j9.js +0 -658
  98. package/dist/packem_shared/pailMiddleware-Ci88geIF.js +0 -24
  99. package/dist/packem_shared/storage-D0vqz8OX.js +0 -36
  100. package/dist/packem_shared/useLogger-D0rU3lcX.js +0 -33
  101. package/dist/packem_shared/write-console-log-based-on-level-ree2lDPw.js +0 -15
  102. package/dist/packem_shared/write-stream-MDqyXmc_.js +0 -6
  103. package/dist/pail.browser.d.ts +0 -412
  104. package/dist/pail.server.d.ts +0 -158
  105. package/dist/processor/caller/get-caller-filename.d.ts +0 -23
  106. package/dist/reporter/file/utils/rotating-file-stream.d.ts +0 -48
  107. package/dist/reporter/http/utils/compression.d.ts +0 -7
  108. package/dist/reporter/http/utils/log-size-error.d.ts +0 -30
  109. package/dist/reporter/http/utils/retry.d.ts +0 -27
  110. package/dist/reporter/json/abstract-json-reporter.d.ts +0 -61
  111. package/dist/reporter/json/json-reporter.browser.d.ts +0 -40
  112. package/dist/reporter/json/json-reporter.server.d.ts +0 -50
  113. package/dist/reporter/pretty/abstract-pretty-reporter.d.ts +0 -83
  114. package/dist/reporter/pretty/pretty-reporter.browser.d.ts +0 -36
  115. package/dist/reporter/pretty/pretty-reporter.server.d.ts +0 -70
  116. package/dist/reporter/raw/raw-reporter.browser.d.ts +0 -5
  117. package/dist/reporter/raw/raw-reporter.server.d.ts +0 -13
  118. package/dist/reporter/utils/default-inspector-config.d.ts +0 -3
  119. package/dist/reporter/utils/format-label.d.ts +0 -3
  120. package/dist/types.d.ts +0 -241
  121. package/dist/utils/arrayify.d.ts +0 -2
  122. package/dist/utils/get-longest-badge.d.ts +0 -4
  123. package/dist/utils/get-longest-label.d.ts +0 -4
  124. package/dist/utils/merge-types.d.ts +0 -4
  125. package/dist/utils/stream/safe-stream-handler.d.ts +0 -21
  126. package/dist/utils/write-console-log-based-on-level.d.ts +0 -4
  127. package/dist/utils/write-stream.d.ts +0 -2
@@ -1,71 +1,73 @@
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-Ke44zirU.js";
2
+ import { P as PailMiddlewareOptions } from "../packem_shared/create-middleware-logger.d-DeNLii5l.js";
3
+ import 'safe-stable-stringify';
4
+ import "../packem_shared/types.d-ByY2ZuYG.js";
5
+ import '@visulima/colorize';
6
+ import '@visulima/interactive-manager';
3
7
  /**
4
- * An Elysia-like instance that supports the derive/hook registration API.
5
- * Compatible with Elysia v1+.
6
- */
8
+ * An Elysia-like instance that supports the derive/hook registration API.
9
+ * Compatible with Elysia v1+.
10
+ */
7
11
  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;
12
+ derive: (options: {
13
+ as: string;
14
+ }, handler: (context: {
15
+ request: Request;
16
+ }) => Record<string, unknown>) => PailElysiaInstance;
17
+ onAfterHandle: (options: {
18
+ as: string;
19
+ }, handler: (context: {
20
+ request: Request;
21
+ set: {
22
+ status?: number;
23
+ };
24
+ }) => Promise<void>) => PailElysiaInstance;
25
+ onError: (options: {
26
+ as: string;
27
+ }, handler: (context: {
28
+ error: Error;
29
+ request: Request;
30
+ }) => Promise<void>) => PailElysiaInstance;
27
31
  }
28
32
  /**
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
- */
33
+ * Retrieve the request-scoped WideEvent logger from AsyncLocalStorage.
34
+ * Must be called within a request handler where pail middleware is active.
35
+ * @returns The request-scoped WideEvent logger
36
+ * @throws Error if called outside of the middleware context
37
+ */
34
38
  declare const useLogger: () => WideEvent;
35
39
  /**
36
- * Configuration options for the Elysia pail plugin.
37
- * @template T - Custom logger type names from the pail instance
38
- */
40
+ * Configuration options for the Elysia pail plugin.
41
+ * @template T - Custom logger type names from the pail instance
42
+ */
39
43
  type ElysiaPluginOptions<T extends string = string> = PailMiddlewareOptions<T>;
40
44
  /**
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";
45
+ * Register pail wide event logging as an Elysia plugin.
46
+ *
47
+ * Injects a `log` property into handler context via `derive`, accessible via:
48
+ * - `context.log` in route handlers (auto-injected)
49
+ * - `useLogger()` from anywhere in the async call stack
50
+ *
51
+ * The wide event is automatically emitted on response or error.
52
+ * @param app The Elysia instance
53
+ * @param options Plugin configuration
54
+ * @returns The Elysia instance (for chaining)
55
+ * @example
56
+ * ```typescript
57
+ * import { Elysia } from "elysia";
58
+ * import { createPail } from "@visulima/pail";
59
+ * import { pailPlugin, useLogger } from "@visulima/pail/middleware/elysia";
60
+ *
61
+ * const logger = createPail();
62
+ * const app = new Elysia();
63
+ *
64
+ * pailPlugin(app, { pail: logger });
65
+ *
66
+ * app.get("/api/users", ({ log }) => {
67
+ * log.set({ user: { id: 1 } });
68
+ * return { ok: true };
69
+ * });
70
+ * ```
71
+ */
72
+ declare const pailPlugin: <T extends string = string>(app: PailElysiaInstance, options: ElysiaPluginOptions<T>) => PailElysiaInstance;
73
+ 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-BxHWM6KI.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
+ var f=Object.defineProperty;var g=(e,t)=>f(e,"name",{value:t,configurable:!0});import{createRequire as h}from"node:module";import{a as b,c as q}from"../packem_shared/headers-S8WyX-2m.js";const m=h(import.meta.url),i=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,_=g(e=>{if(typeof i<"u"&&i.versions&&i.versions.node){const[t,a]=i.versions.node.split(".").map(Number);if(t>22||t===22&&a>=3||t===20&&a>=16)return i.getBuiltinModule(e)}return m(e)},"__cjs_getBuiltinModule"),{AsyncLocalStorage:y}=_("node:async_hooks");var w=Object.defineProperty,c=g((e,t)=>w(e,"name",{value:t,configurable:!0}),"d");const u=new y,d=new WeakSet,L=c(()=>{const e=u.getStore();if(!e||!d.has(e))throw new Error("[pail] useLogger() called outside of Elysia pail plugin context.");return e},"useLogger"),S=c((e,t)=>{const a=new WeakMap,l=new WeakSet;return e.derive({as:"global"},({request:r})=>{const o=new URL(r.url),s=r.headers.get("x-request-id")??crypto.randomUUID(),p=b(r.headers),n=q(t,{headers:p,method:r.method,path:o.pathname,requestId:s});return a.set(r,n),n.skipped||(d.add(n.logger),u.enterWith(n.logger)),{log:n.logger}}).onAfterHandle({as:"global"},async({request:r,set:o})=>{const s=a.get(r);!s?.skipped&&s&&!l.has(r)&&(l.add(r),s.finish({status:o.status??200}),d.delete(s.logger))}).onError({as:"global"},async({error:r,request:o})=>{const s=a.get(o);!s?.skipped&&s&&!l.has(o)&&(l.add(o),s.finish({error:r}),d.delete(s.logger))})},"pailPlugin");export{S as pailPlugin,L as useLogger};
@@ -1,86 +1,88 @@
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-Ke44zirU.js";
2
+ import { P as PailMiddlewareOptions } from "../packem_shared/create-middleware-logger.d-DeNLii5l.js";
3
+ import 'safe-stable-stringify';
4
+ import "../packem_shared/types.d-ByY2ZuYG.js";
5
+ import '@visulima/colorize';
6
+ import '@visulima/interactive-manager';
3
7
  /**
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
- */
8
+ * An Express-like request object with the pail logger attached.
9
+ * Use this to type your route handlers when accessing `req.log`.
10
+ * @example
11
+ * ```typescript
12
+ * import type { PailRequest } from "@visulima/pail/middleware/express";
13
+ *
14
+ * app.get("/api/users", (req: PailRequest, res) => {
15
+ * req.log?.set({ user: { id: 1 } });
16
+ * });
17
+ * ```
18
+ */
15
19
  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;
20
+ [key: string]: unknown;
21
+ headers: Record<string, string | string[] | undefined>;
22
+ /**
23
+ * The request-scoped WideEvent logger, attached by pail middleware.
24
+ * Only present for non-excluded routes.
25
+ */
26
+ log?: WideEvent;
27
+ method: string;
28
+ originalUrl?: string;
29
+ path: string;
26
30
  }
27
31
  /**
28
- * An Express-like response object.
29
- */
32
+ * An Express-like response object.
33
+ */
30
34
  interface PailResponse {
31
- [key: string]: unknown;
32
- on: (event: string, listener: () => void) => void;
33
- statusCode: number;
35
+ [key: string]: unknown;
36
+ on: (event: string, listener: () => void) => void;
37
+ statusCode: number;
34
38
  }
35
39
  /**
36
- * Express-compatible next function.
37
- */
40
+ * Express-compatible next function.
41
+ */
38
42
  type PailNextFunction = (error?: unknown) => void;
39
43
  /**
40
- * The Express middleware function signature returned by `pailMiddleware()`.
41
- */
44
+ * The Express middleware function signature returned by `pailMiddleware()`.
45
+ */
42
46
  type PailExpressMiddleware = (request: PailRequest, response: PailResponse, next: PailNextFunction) => void;
43
47
  /**
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
- */
48
+ * Retrieve the request-scoped WideEvent logger from AsyncLocalStorage.
49
+ * Must be called within a request handled by the pail Express middleware.
50
+ * @returns The request-scoped WideEvent logger
51
+ * @throws Error if called outside of the middleware context
52
+ */
49
53
  declare const useLogger: () => WideEvent;
50
54
  /**
51
- * Configuration options for the Express pail middleware.
52
- * @template T - Custom logger type names from the pail instance
53
- */
55
+ * Configuration options for the Express pail middleware.
56
+ * @template T - Custom logger type names from the pail instance
57
+ */
54
58
  type ExpressMiddlewareOptions<T extends string = string> = PailMiddlewareOptions<T>;
55
59
  /**
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";
60
+ * Create Express middleware that attaches a WideEvent logger to each request.
61
+ *
62
+ * The logger is available via:
63
+ * - `req.log` on the request object
64
+ * - `useLogger()` from anywhere in the async call stack
65
+ *
66
+ * The wide event is automatically emitted when the response finishes.
67
+ * @param options Middleware configuration
68
+ * @returns Express middleware function
69
+ * @example
70
+ * ```typescript
71
+ * import express from "express";
72
+ * import { createPail } from "@visulima/pail";
73
+ * import { pailMiddleware, useLogger } from "@visulima/pail/middleware/express";
74
+ *
75
+ * const app = express();
76
+ * const logger = createPail();
77
+ *
78
+ * app.use(pailMiddleware({ pail: logger }));
79
+ *
80
+ * app.get("/api/users", (req, res) => {
81
+ * req.log.set({ user: { id: 1 } });
82
+ * // or: useLogger().set({ user: { id: 1 } });
83
+ * res.json({ ok: true });
84
+ * });
85
+ * ```
86
+ */
87
+ declare const pailMiddleware: <T extends string = string>(options: ExpressMiddlewareOptions<T>) => PailExpressMiddleware;
88
+ 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-BxHWM6KI.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.url ?? "/";
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
+ var c=Object.defineProperty;var t=(r,e)=>c(r,"name",{value:e,configurable:!0});import{e as m,c as f}from"../packem_shared/headers-S8WyX-2m.js";import{c as h}from"../packem_shared/storage-DHM1EP2P.js";var w=Object.defineProperty,d=t((r,e)=>w(r,"name",{value:e,configurable:!0}),"i");const i=h("Express middleware context. Make sure pail middleware is registered before your route handlers."),b=d(()=>i.useLogger(),"useLogger"),v=d(r=>(e,a,o)=>{const g=e.headers["x-request-id"]??crypto.randomUUID(),l=e.originalUrl??e.url??"/",u=m(e.headers),{finish:n,logger:s,skipped:p}=f(r,{headers:u,method:e.method,path:l,requestId:g});if(p){o();return}e.log=s,a.on("finish",()=>{n({status:a.statusCode})}),i.storage.run(s,()=>{o()})},"pailMiddleware");export{v as pailMiddleware,b as useLogger};
@@ -1,81 +1,83 @@
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-Ke44zirU.js";
2
+ import { P as PailMiddlewareOptions } from "../packem_shared/create-middleware-logger.d-DeNLii5l.js";
3
+ import 'safe-stable-stringify';
4
+ import "../packem_shared/types.d-ByY2ZuYG.js";
5
+ import '@visulima/colorize';
6
+ import '@visulima/interactive-manager';
3
7
  /**
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
- */
8
+ * A Fastify-like request object with the pail logger attached.
9
+ * Use this to type your route handlers when accessing `request.log`.
10
+ * @example
11
+ * ```typescript
12
+ * import type { PailFastifyRequest } from "@visulima/pail/middleware/fastify";
13
+ *
14
+ * app.get("/api/users", async (request: PailFastifyRequest, reply) => {
15
+ * request.log?.set({ user: { id: 1 } });
16
+ * });
17
+ * ```
18
+ */
15
19
  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;
20
+ [key: string]: unknown;
21
+ headers: Record<string, string | string[] | undefined>;
22
+ /**
23
+ * The request-scoped WideEvent logger, attached by pail plugin.
24
+ * Only present for non-excluded routes.
25
+ */
26
+ log?: WideEvent;
27
+ method: string;
28
+ url: string;
25
29
  }
26
30
  /**
27
- * A Fastify-like reply object.
28
- */
31
+ * A Fastify-like reply object.
32
+ */
29
33
  interface PailFastifyReply {
30
- [key: string]: unknown;
31
- statusCode: number;
34
+ [key: string]: unknown;
35
+ statusCode: number;
32
36
  }
33
37
  /**
34
- * A Fastify-like instance that supports the hook registration API.
35
- */
38
+ * A Fastify-like instance that supports the hook registration API.
39
+ */
36
40
  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);
41
+ 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
42
  }
39
43
  /**
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
- */
44
+ * Retrieve the request-scoped WideEvent logger from AsyncLocalStorage.
45
+ * Must be called within a request handled by the pail Fastify plugin.
46
+ * @returns The request-scoped WideEvent logger
47
+ * @throws Error if called outside of the plugin context
48
+ */
45
49
  declare const useLogger: () => WideEvent;
46
50
  /**
47
- * Configuration options for the Fastify pail plugin.
48
- * @template T - Custom logger type names from the pail instance
49
- */
51
+ * Configuration options for the Fastify pail plugin.
52
+ * @template T - Custom logger type names from the pail instance
53
+ */
50
54
  type FastifyPluginOptions<T extends string = string> = PailMiddlewareOptions<T>;
51
55
  /**
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";
56
+ * Register pail wide event logging as a Fastify plugin.
57
+ *
58
+ * Attaches a WideEvent logger to each request, accessible via:
59
+ * - `request.log` on the Fastify request object
60
+ * - `useLogger()` from anywhere in the async call stack
61
+ *
62
+ * The wide event is automatically emitted on response or error.
63
+ * @param fastify The Fastify instance
64
+ * @param options Plugin configuration
65
+ * @example
66
+ * ```typescript
67
+ * import Fastify from "fastify";
68
+ * import { createPail } from "@visulima/pail";
69
+ * import { pailPlugin, useLogger } from "@visulima/pail/middleware/fastify";
70
+ *
71
+ * const app = Fastify();
72
+ * const logger = createPail();
73
+ *
74
+ * pailPlugin(app, { pail: logger });
75
+ *
76
+ * app.get("/api/users", async (request, reply) => {
77
+ * request.log.set({ user: { id: 1 } });
78
+ * return { ok: true };
79
+ * });
80
+ * ```
81
+ */
82
+ declare const pailPlugin: <T extends string = string>(fastify: PailFastifyInstance, options: FastifyPluginOptions<T>) => void;
83
+ 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-BxHWM6KI.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
+ var h=Object.defineProperty;var g=(r,a)=>h(r,"name",{value:a,configurable:!0});import{e as m,c as k}from"../packem_shared/headers-S8WyX-2m.js";import{c as y}from"../packem_shared/storage-DHM1EP2P.js";var L=Object.defineProperty,u=g((r,a)=>L(r,"name",{value:a,configurable:!0}),"d");const c=y("Fastify middleware context. Make sure pail plugin is registered before your route handlers."),b=u(()=>c.useLogger(),"useLogger"),q=u((r,a)=>{const n=new WeakMap,s=new WeakSet;r.addHook("onRequest",(e,d,o)=>{const t=e.headers["x-request-id"]??crypto.randomUUID(),l=m(e.headers),{finish:p,logger:i,skipped:f}=k(a,{headers:l,method:e.method,path:e.url,requestId:t});if(f){o();return}e.log=i,n.set(e,{finish:p}),c.storage.run(i,()=>{o()})}),r.addHook("onResponse",async(e,d)=>{const o=n.get(e);!o||s.has(e)||(s.add(e),o.finish({status:d.statusCode}))}),r.addHook("onError",async(e,d,o)=>{const t=n.get(e);!t||s.has(e)||(s.add(e),t.finish({error:o}))})},"pailPlugin");export{q as pailPlugin,b as useLogger};