@visulima/pail 4.0.0-alpha.8 → 4.0.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 (145) hide show
  1. package/CHANGELOG.md +531 -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 +23 -38
  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,85 +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-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 Hono-like context object with access to the pail logger.
5
- *
6
- * Use `c.get("log")` or `useLogger(c)` to access the WideEvent logger.
7
- * @example
8
- * ```typescript
9
- * import type { PailHonoContext } from "@visulima/pail/middleware/hono";
10
- *
11
- * app.get("/api/users", (c: PailHonoContext) => {
12
- * const log = c.get("log");
13
- * log.set({ user: { id: 1 } });
14
- * });
15
- * ```
16
- */
9
+ * A Hono-like context object with access to the pail logger.
10
+ *
11
+ * Use `c.get("log")` or `useLogger(c)` to access the WideEvent logger.
12
+ * @example
13
+ * ```typescript
14
+ * import type { PailHonoContext } from "@visulima/pail/middleware/hono";
15
+ *
16
+ * app.get("/api/users", (c: PailHonoContext) => {
17
+ * const log = c.get("log");
18
+ * log.set({ user: { id: 1 } });
19
+ * });
20
+ * ```
21
+ */
17
22
  interface PailHonoContext {
18
- [key: string]: unknown;
19
- get: (key: string) => unknown;
20
- req: {
21
- header: (name: string) => string | undefined;
22
- method: string;
23
- path: string;
24
- raw: {
25
- headers: Headers;
26
- };
23
+ [key: string]: unknown;
24
+ get: (key: string) => unknown;
25
+ req: {
26
+ header: (name: string) => string | undefined;
27
+ method: string;
28
+ path: string;
29
+ raw: {
30
+ headers: Headers;
27
31
  };
28
- res: {
29
- status: number;
30
- };
31
- set: (key: string, value: unknown) => void;
32
+ };
33
+ res: {
34
+ status: number;
35
+ };
36
+ set: (key: string, value: unknown) => void;
32
37
  }
33
38
  /**
34
- * Hono-compatible next function.
35
- */
39
+ * Hono-compatible next function.
40
+ */
36
41
  type PailHonoNext = () => Promise<void>;
37
42
  /**
38
- * The Hono middleware function signature returned by `pailMiddleware()`.
39
- */
43
+ * The Hono middleware function signature returned by `pailMiddleware()`.
44
+ */
40
45
  type PailHonoMiddleware = (c: PailHonoContext, next: PailHonoNext) => Promise<void>;
41
46
  /**
42
- * Configuration options for the Hono pail middleware.
43
- * @template T - Custom logger type names from the pail instance
44
- */
47
+ * Configuration options for the Hono pail middleware.
48
+ * @template T - Custom logger type names from the pail instance
49
+ */
45
50
  type HonoMiddlewareOptions<T extends string = string> = PailMiddlewareOptions<T>;
46
51
  /**
47
- * Retrieve the WideEvent logger from Hono context.
48
- * Must be called within a request handler where pail middleware is active.
49
- * @param c The Hono context object
50
- * @returns The request-scoped WideEvent logger
51
- * @throws Error if the middleware is not registered
52
- */
52
+ * Retrieve the WideEvent logger from Hono context.
53
+ * Must be called within a request handler where pail middleware is active.
54
+ * @param c The Hono context object
55
+ * @returns The request-scoped WideEvent logger
56
+ * @throws Error if the middleware is not registered
57
+ */
53
58
  declare const useLogger: (c: PailHonoContext) => WideEvent;
54
59
  /**
55
- * Create Hono middleware that attaches a WideEvent logger to each request.
56
- *
57
- * The logger is available via:
58
- * - `c.get("log")` on the Hono context
59
- * - `useLogger(c)` helper function
60
- *
61
- * The wide event is automatically emitted when the handler completes or throws.
62
- * @param options Middleware configuration
63
- * @returns Hono middleware function
64
- * @example
65
- * ```typescript
66
- * import { Hono } from "hono";
67
- * import { createPail } from "@visulima/pail";
68
- * import { pailMiddleware, useLogger } from "@visulima/pail/middleware/hono";
69
- *
70
- * const app = new Hono();
71
- * const logger = createPail();
72
- *
73
- * app.use("*", pailMiddleware({ pail: logger }));
74
- *
75
- * app.get("/api/users", (c) => {
76
- * const log = useLogger(c);
77
- * log.set({ user: { id: 1 } });
78
- * return c.json({ ok: true });
79
- * });
80
- * ```
81
- */
82
- export declare const pailMiddleware: <T extends string = string>(options: HonoMiddlewareOptions<T>) => PailHonoMiddleware;
83
- export { useLogger };
84
- export type { HonoMiddlewareOptions, PailHonoContext, PailHonoMiddleware, PailHonoNext };
85
- export type { WideEvent } from "../wide-event.d.ts";
60
+ * Create Hono middleware that attaches a WideEvent logger to each request.
61
+ *
62
+ * The logger is available via:
63
+ * - `c.get("log")` on the Hono context
64
+ * - `useLogger(c)` helper function
65
+ *
66
+ * The wide event is automatically emitted when the handler completes or throws.
67
+ * @param options Middleware configuration
68
+ * @returns Hono middleware function
69
+ * @example
70
+ * ```typescript
71
+ * import { Hono } from "hono";
72
+ * import { createPail } from "@visulima/pail";
73
+ * import { pailMiddleware, useLogger } from "@visulima/pail/middleware/hono";
74
+ *
75
+ * const app = new Hono();
76
+ * const logger = createPail();
77
+ *
78
+ * app.use("*", pailMiddleware({ pail: logger }));
79
+ *
80
+ * app.get("/api/users", (c) => {
81
+ * const log = useLogger(c);
82
+ * log.set({ user: { id: 1 } });
83
+ * return c.json({ ok: true });
84
+ * });
85
+ * ```
86
+ */
87
+ declare const pailMiddleware: <T extends string = string>(options: HonoMiddlewareOptions<T>) => PailHonoMiddleware;
88
+ export { type HonoMiddlewareOptions, type PailHonoContext, type PailHonoMiddleware, type PailHonoNext, type WideEvent, pailMiddleware, useLogger };
@@ -1,33 +1 @@
1
- import { a as extractSafeHeaders, c as createMiddlewareLogger } from '../packem_shared/headers-Cp4uLtr4.js';
2
-
3
- const useLogger = (c) => {
4
- const logger = c.get("log");
5
- if (!logger) {
6
- throw new Error("[pail] useLogger() called but pail middleware is not registered.");
7
- }
8
- return logger;
9
- };
10
- const pailMiddleware = (options) => async (c, next) => {
11
- const requestId = c.req.header("x-request-id") ?? crypto.randomUUID();
12
- const safeHeaders = extractSafeHeaders(c.req.raw.headers);
13
- const { finish, logger, skipped } = createMiddlewareLogger(options, {
14
- headers: safeHeaders,
15
- method: c.req.method,
16
- path: c.req.path,
17
- requestId
18
- });
19
- if (skipped) {
20
- await next();
21
- return;
22
- }
23
- c.set("log", logger);
24
- try {
25
- await next();
26
- finish({ status: c.res.status });
27
- } catch (error) {
28
- finish({ error: error instanceof Error ? error : new Error(String(error)) });
29
- throw error;
30
- }
31
- };
32
-
33
- export { pailMiddleware, useLogger };
1
+ import{e as c,c as g}from"../packem_shared/headers-DH0H2s8W.js";const l=t=>{const r=t.get("log");if(!r)throw new Error("[pail] useLogger() called but pail middleware is not registered.");return r},p=t=>async(r,a)=>{const o=r.req.header("x-request-id")??crypto.randomUUID(),i=c(r.req.raw.headers),{finish:s,logger:d,skipped:n}=g(t,{headers:i,method:r.req.method,path:r.req.path,requestId:o});if(n){await a();return}r.set("log",d);try{await a(),s({status:r.res.status})}catch(e){throw s({error:e instanceof Error?e:new Error(String(e))}),e}};export{p as pailMiddleware,l as useLogger};
@@ -1,36 +1,104 @@
1
- import type { PailMiddlewareOptions } from "../shared/create-middleware-logger.d.ts";
1
+ import { P as PailMiddlewareOptions } from "../../packem_shared/create-middleware-logger.d-B-JmQ1Sl.js";
2
+ import { W as WideEvent } from "../../packem_shared/wide-event.d-D3ATYpoK.js";
3
+ import 'node:async_hooks';
4
+ import "../../packem_shared/types.d-bWnqHJKL.js";
5
+ import '@visulima/colorize';
6
+ import '@visulima/interactive-manager';
7
+ import 'type-fest';
8
+ import "../../packem_shared/index.d-T71KjNAr.js";
9
+ /**
10
+ * Minimal type definitions to avoid requiring next as a dependency.
11
+ */
12
+ interface NextRequest {
13
+ headers: Headers;
14
+ nextUrl: {
15
+ pathname: string;
16
+ };
17
+ }
18
+ interface NextResponse {
19
+ headers: Headers;
20
+ }
21
+ interface NextResponseConstructor {
22
+ next: (options?: {
23
+ request?: {
24
+ headers?: Headers;
25
+ };
26
+ }) => NextResponse;
27
+ }
28
+ /**
29
+ * Options for the Next.js pail middleware.
30
+ */
31
+ interface PailNextMiddlewareOptions {
32
+ /**
33
+ * Glob patterns for paths to exclude from logging.
34
+ * Excluded paths won't get request IDs or timing headers.
35
+ * @example ["/_next/**", "/favicon.ico"]
36
+ */
37
+ exclude?: string[];
38
+ /**
39
+ * Glob patterns for paths to include in logging.
40
+ * If not set, all non-excluded paths are included.
41
+ */
42
+ include?: string[];
43
+ }
44
+ /**
45
+ * Create a Next.js edge middleware that sets `x-request-id` and `x-pail-start`
46
+ * headers on the request for downstream use by `withPail()`.
47
+ *
48
+ * This middleware runs at the edge and prepares request metadata.
49
+ * The actual wide event logging happens in `withPail()`.
50
+ * @param NextResponseClass The NextResponse class from "next/server.js"
51
+ * @param options Middleware configuration
52
+ * @returns A middleware function
53
+ * @example
54
+ * ```typescript
55
+ * // middleware.ts
56
+ * import { NextResponse } from "next/server.js";
57
+ * import { pailMiddleware } from "@visulima/pail/middleware/next";
58
+ *
59
+ * const middleware = pailMiddleware(NextResponse, {
60
+ * exclude: ["/_next/**", "/favicon.ico"],
61
+ * });
62
+ *
63
+ * export default middleware;
64
+ * ```
65
+ */
66
+ declare const pailMiddleware: (NextResponseClass: NextResponseConstructor, options?: PailNextMiddlewareOptions) => (request: NextRequest) => NextResponse;
67
+ /**
68
+ * Retrieve the request-scoped WideEvent logger from AsyncLocalStorage.
69
+ * Must be called within a `withPail()` wrapped handler or server action.
70
+ * @returns The request-scoped WideEvent logger
71
+ * @throws Error if called outside of a withPail context
72
+ */
73
+ declare const useLogger: () => WideEvent;
2
74
  type NextPailOptions<T extends string = string> = PailMiddlewareOptions<T>;
3
75
  /**
4
- * Create a `withPail` wrapper function for Next.js route handlers and server actions.
5
- *
6
- * Wraps handler execution in AsyncLocalStorage so that `useLogger()` works
7
- * anywhere in the async call stack. The wide event is automatically emitted
8
- * when the handler completes or throws.
9
- * @param options Configuration options
10
- * @returns A `withPail` wrapper function
11
- * @example
12
- * ```typescript
13
- * // lib/pail.ts
14
- * import { createPail } from "@visulima/pail";
15
- * import { createWithPail } from "@visulima/pail/middleware/next";
16
- *
17
- * const logger = createPail();
18
- * export const withPail = createWithPail({ pail: logger });
19
- *
20
- * // app/api/users/route.ts
21
- * import { withPail } from "@/lib/pail";
22
- * import { useLogger } from "@visulima/pail/middleware/next";
23
- *
24
- * export const GET = withPail(async (request: Request) => {
25
- * const log = useLogger();
26
- * log.set({ user: { id: 1 } });
27
- * return Response.json({ ok: true });
28
- * });
29
- * ```
30
- */
31
- export declare const createWithPail: <T extends string = string>(options: NextPailOptions<T>) => <TArgs extends unknown[], TReturn>(handler: (...args: TArgs) => Promise<TReturn> | TReturn) => (...args: TArgs) => Promise<TReturn>;
32
- export type { NextPailOptions };
33
- export type { WideEvent } from "../../wide-event.d.ts";
34
- export type { PailNextMiddlewareOptions } from "./middleware/next/middleware.d.ts";
35
- export { pailMiddleware } from "./middleware/next/middleware.d.ts";
36
- export { useLogger } from "./storage.d.ts";
76
+ * Create a `withPail` wrapper function for Next.js route handlers and server actions.
77
+ *
78
+ * Wraps handler execution in AsyncLocalStorage so that `useLogger()` works
79
+ * anywhere in the async call stack. The wide event is automatically emitted
80
+ * when the handler completes or throws.
81
+ * @param options Configuration options
82
+ * @returns A `withPail` wrapper function
83
+ * @example
84
+ * ```typescript
85
+ * // lib/pail.ts
86
+ * import { createPail } from "@visulima/pail";
87
+ * import { createWithPail } from "@visulima/pail/middleware/next";
88
+ *
89
+ * const logger = createPail();
90
+ * export const withPail = createWithPail({ pail: logger });
91
+ *
92
+ * // app/api/users/route.ts
93
+ * import { withPail } from "@/lib/pail";
94
+ * import { useLogger } from "@visulima/pail/middleware/next";
95
+ *
96
+ * export const GET = withPail(async (request: Request) => {
97
+ * const log = useLogger();
98
+ * log.set({ user: { id: 1 } });
99
+ * return Response.json({ ok: true });
100
+ * });
101
+ * ```
102
+ */
103
+ declare const createWithPail: <T extends string = string>(options: NextPailOptions<T>) => <TArgs extends unknown[], TReturn>(handler: (...args: TArgs) => Promise<TReturn> | TReturn) => (...args: TArgs) => Promise<TReturn>;
104
+ export { type NextPailOptions, type PailNextMiddlewareOptions, type WideEvent, createWithPail, pailMiddleware, useLogger };
@@ -1,53 +1 @@
1
- import { a as extractSafeHeaders, c as createMiddlewareLogger } from '../../packem_shared/headers-Cp4uLtr4.js';
2
- import { pailStorage } from '../../packem_shared/useLogger-D0rU3lcX.js';
3
- export { useLogger } from '../../packem_shared/useLogger-D0rU3lcX.js';
4
- export { pailMiddleware } from '../../packem_shared/pailMiddleware-Ci88geIF.js';
5
-
6
- const createWithPail = (options) => (
7
- /**
8
- * Wrap a Next.js route handler or server action with wide event logging.
9
- * @returns A wrapped handler that creates and emits a WideEvent
10
- */
11
- (handler) => async (...args) => {
12
- const [firstArgument] = args;
13
- const isRequest = firstArgument instanceof Request;
14
- let method = "UNKNOWN";
15
- let path = "/";
16
- let requestId = crypto.randomUUID();
17
- let headers = {};
18
- if (isRequest) {
19
- const request = firstArgument;
20
- const url = new URL(request.url);
21
- method = request.method;
22
- path = url.pathname;
23
- headers = extractSafeHeaders(request.headers);
24
- const middlewareRequestId = request.headers.get("x-request-id");
25
- if (middlewareRequestId) {
26
- requestId = middlewareRequestId;
27
- }
28
- }
29
- const { finish, logger, skipped } = createMiddlewareLogger(options, {
30
- headers,
31
- method,
32
- path,
33
- requestId
34
- });
35
- if (skipped) {
36
- return handler(...args);
37
- }
38
- try {
39
- const result = await pailStorage.run(logger, () => handler(...args));
40
- const status = result instanceof Response ? result.status : 200;
41
- finish({ status });
42
- return result;
43
- } catch (error) {
44
- const errorInstance = error instanceof Error ? error : new Error(String(error));
45
- const errorStatus = errorInstance.status ?? errorInstance.statusCode ?? 500;
46
- finish({ error: errorInstance });
47
- logger.setStatus(errorStatus);
48
- throw error;
49
- }
50
- }
51
- );
52
-
53
- export { createWithPail };
1
+ import{e as m,c as l}from"../../packem_shared/headers-DH0H2s8W.js";import{pailStorage as w}from"../../packem_shared/useLogger-DB34CuU5.js";import{useLogger as N}from"../../packem_shared/useLogger-DB34CuU5.js";import{pailMiddleware as S}from"../../packem_shared/pailMiddleware-B5DJoBYl.js";const q=u=>s=>async(...a)=>{const[o]=a,f=o instanceof Request;let n="UNKNOWN",i="/",c=crypto.randomUUID(),d={};if(f){const e=o,t=new URL(e.url);n=e.method,i=t.pathname,d=m(e.headers);const r=e.headers.get("x-request-id");r&&(c=r)}const{finish:p,logger:h,skipped:g}=l(u,{headers:d,method:n,path:i,requestId:c});if(g)return s(...a);try{const e=await w.run(h,()=>s(...a)),t=e instanceof Response?e.status:200;return p({status:t}),e}catch(e){const t=e instanceof Error?e:new Error(String(e)),r=t.status??t.statusCode??500;throw p({error:t,status:r}),e}};export{q as createWithPail,S as pailMiddleware,N as useLogger};
@@ -1,123 +1,126 @@
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 SvelteKit-like event object with access to the pail logger via `locals.log`.
5
- * @example
6
- * ```typescript
7
- * // In a SvelteKit load function or action:
8
- * import type { PailSvelteKitEvent } from "@visulima/pail/middleware/sveltekit";
9
- *
10
- * export const load = async (event: PailSvelteKitEvent) => {
11
- * event.locals.log?.set({ user: { id: 1 } });
12
- * };
13
- * ```
14
- */
9
+ * A SvelteKit-like event object with access to the pail logger via `locals.log`.
10
+ * @example
11
+ * ```typescript
12
+ * // In a SvelteKit load function or action:
13
+ * import type { PailSvelteKitEvent } from "@visulima/pail/middleware/sveltekit";
14
+ *
15
+ * export const load = async (event: PailSvelteKitEvent) => {
16
+ * event.locals.log?.set({ user: { id: 1 } });
17
+ * };
18
+ * ```
19
+ */
15
20
  interface PailSvelteKitEvent {
16
- [key: string]: unknown;
17
- locals: Record<string, unknown> & {
18
- log?: WideEvent;
19
- };
20
- request: Request;
21
- url: URL;
21
+ [key: string]: unknown;
22
+ locals: Record<string, unknown> & {
23
+ log?: WideEvent;
24
+ };
25
+ request: Request;
26
+ url: URL;
22
27
  }
23
28
  /**
24
- * Options passed to SvelteKit's resolve function.
25
- */
29
+ * Options passed to SvelteKit's resolve function.
30
+ */
26
31
  interface PailSvelteKitResolveOptions {
27
- filterSerializedResponseHeaders?: (name: string) => boolean;
28
- preload?: (input: {
29
- type: string;
30
- }) => boolean;
31
- transformPageChunk?: (input: {
32
- html: string;
33
- }) => string;
32
+ filterSerializedResponseHeaders?: (name: string) => boolean;
33
+ preload?: (input: {
34
+ type: string;
35
+ }) => boolean;
36
+ transformPageChunk?: (input: {
37
+ html: string;
38
+ }) => string;
34
39
  }
35
40
  /**
36
- * SvelteKit resolve function type.
37
- */
41
+ * SvelteKit resolve function type.
42
+ */
38
43
  type PailSvelteKitResolve = (event: PailSvelteKitEvent, options?: PailSvelteKitResolveOptions) => Promise<Response>;
39
44
  /**
40
- * Input for the SvelteKit handle hook.
41
- */
45
+ * Input for the SvelteKit handle hook.
46
+ */
42
47
  interface PailSvelteKitHandleInput {
43
- event: PailSvelteKitEvent;
44
- resolve: PailSvelteKitResolve;
48
+ event: PailSvelteKitEvent;
49
+ resolve: PailSvelteKitResolve;
45
50
  }
46
51
  /**
47
- * SvelteKit handle hook function type returned by `pailHandle()`.
48
- */
52
+ * SvelteKit handle hook function type returned by `pailHandle()`.
53
+ */
49
54
  type PailSvelteKitHandle = (input: PailSvelteKitHandleInput) => Promise<Response>;
50
55
  /**
51
- * Input for the SvelteKit handleError hook.
52
- */
56
+ * Input for the SvelteKit handleError hook.
57
+ */
53
58
  interface PailSvelteKitHandleErrorInput {
54
- error: unknown;
55
- event: PailSvelteKitEvent;
56
- message: string;
57
- status: number;
59
+ error: unknown;
60
+ event: PailSvelteKitEvent;
61
+ message: string;
62
+ status: number;
58
63
  }
59
64
  /**
60
- * SvelteKit handleError hook function type returned by `pailHandleError()`.
61
- */
65
+ * SvelteKit handleError hook function type returned by `pailHandleError()`.
66
+ */
62
67
  type PailSvelteKitHandleError = (input: PailSvelteKitHandleErrorInput) => void;
63
68
  /**
64
- * Retrieve the request-scoped WideEvent logger from AsyncLocalStorage.
65
- * Must be called within a request handled by the pail SvelteKit handle hook.
66
- * @returns The request-scoped WideEvent logger
67
- * @throws Error if called outside of the hook context
68
- */
69
+ * Retrieve the request-scoped WideEvent logger from AsyncLocalStorage.
70
+ * Must be called within a request handled by the pail SvelteKit handle hook.
71
+ * @returns The request-scoped WideEvent logger
72
+ * @throws Error if called outside of the hook context
73
+ */
69
74
  declare const useLogger: () => WideEvent;
70
75
  type SvelteKitHandleOptions<T extends string = string> = PailMiddlewareOptions<T>;
71
76
  /**
72
- * Create a SvelteKit `handle` hook that attaches a WideEvent logger to each request.
73
- *
74
- * The logger is available via:
75
- * - `event.locals.log` in server load functions and actions
76
- * - `useLogger()` from anywhere in the async call stack
77
- *
78
- * The wide event is automatically emitted when the response is sent or an error occurs.
79
- * @param options Hook configuration
80
- * @returns SvelteKit handle hook function
81
- * @example
82
- * ```typescript
83
- * // src/hooks.server.ts
84
- * import { createPail } from "@visulima/pail";
85
- * import { pailHandle, pailHandleError } from "@visulima/pail/middleware/sveltekit";
86
- *
87
- * const logger = createPail();
88
- *
89
- * export const handle = pailHandle({ pail: logger });
90
- * export const handleError = pailHandleError();
91
- * ```
92
- */
93
- export declare const pailHandle: <T extends string = string>(options: SvelteKitHandleOptions<T>) => PailSvelteKitHandle;
77
+ * Create a SvelteKit `handle` hook that attaches a WideEvent logger to each request.
78
+ *
79
+ * The logger is available via:
80
+ * - `event.locals.log` in server load functions and actions
81
+ * - `useLogger()` from anywhere in the async call stack
82
+ *
83
+ * The wide event is automatically emitted when the response is sent or an error occurs.
84
+ * @param options Hook configuration
85
+ * @returns SvelteKit handle hook function
86
+ * @example
87
+ * ```typescript
88
+ * // src/hooks.server.ts
89
+ * import { createPail } from "@visulima/pail";
90
+ * import { pailHandle, pailHandleError } from "@visulima/pail/middleware/sveltekit";
91
+ *
92
+ * const logger = createPail();
93
+ *
94
+ * export const handle = pailHandle({ pail: logger });
95
+ * export const handleError = pailHandleError();
96
+ * ```
97
+ */
98
+ declare const pailHandle: <T extends string = string>(options: SvelteKitHandleOptions<T>) => PailSvelteKitHandle;
94
99
  /**
95
- * Create a SvelteKit `handleError` hook that captures errors into the WideEvent logger.
96
- *
97
- * Should be used alongside `pailHandle` to ensure errors are recorded in the wide event.
98
- * @returns SvelteKit handleError hook function
99
- */
100
- export declare const pailHandleError: () => PailSvelteKitHandleError;
100
+ * Create a SvelteKit `handleError` hook that captures errors into the WideEvent logger.
101
+ *
102
+ * Should be used alongside `pailHandle` to ensure errors are recorded in the wide event.
103
+ * @returns SvelteKit handleError hook function
104
+ */
105
+ declare const pailHandleError: () => PailSvelteKitHandleError;
101
106
  /**
102
- * Convenience function that returns both handle and handleError hooks.
103
- * @param options Hook configuration
104
- * @returns Object with `handle` and `handleError` hooks
105
- * @example
106
- * ```typescript
107
- * // src/hooks.server.ts
108
- * import { createPail } from "@visulima/pail";
109
- * import { createPailHooks } from "@visulima/pail/middleware/sveltekit";
110
- *
111
- * const logger = createPail();
112
- * const { handle, handleError } = createPailHooks({ pail: logger });
113
- *
114
- * export { handle, handleError };
115
- * ```
116
- */
117
- export declare const createPailHooks: <T extends string = string>(options: SvelteKitHandleOptions<T>) => {
118
- handle: PailSvelteKitHandle;
119
- handleError: PailSvelteKitHandleError;
107
+ * Convenience function that returns both handle and handleError hooks.
108
+ * @param options Hook configuration
109
+ * @returns Object with `handle` and `handleError` hooks
110
+ * @example
111
+ * ```typescript
112
+ * // src/hooks.server.ts
113
+ * import { createPail } from "@visulima/pail";
114
+ * import { createPailHooks } from "@visulima/pail/middleware/sveltekit";
115
+ *
116
+ * const logger = createPail();
117
+ * const { handle, handleError } = createPailHooks({ pail: logger });
118
+ *
119
+ * export { handle, handleError };
120
+ * ```
121
+ */
122
+ declare const createPailHooks: <T extends string = string>(options: SvelteKitHandleOptions<T>) => {
123
+ handle: PailSvelteKitHandle;
124
+ handleError: PailSvelteKitHandleError;
120
125
  };
121
- export { useLogger };
122
- export type { PailSvelteKitEvent, PailSvelteKitHandle, PailSvelteKitHandleError, PailSvelteKitHandleErrorInput, PailSvelteKitHandleInput, PailSvelteKitResolve, PailSvelteKitResolveOptions, SvelteKitHandleOptions, };
123
- export type { WideEvent } from "../wide-event.d.ts";
126
+ export { type PailSvelteKitEvent, type PailSvelteKitHandle, type PailSvelteKitHandleError, type PailSvelteKitHandleErrorInput, type PailSvelteKitHandleInput, type PailSvelteKitResolve, type PailSvelteKitResolveOptions, type SvelteKitHandleOptions, type WideEvent, createPailHooks, pailHandle, pailHandleError, useLogger };
@@ -1,43 +1 @@
1
- import { a as extractSafeHeaders, 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("SvelteKit handle hook context. Make sure pailHandle is added to your hooks.server.ts.");
5
- const useLogger = () => loggerStorage.useLogger();
6
- const pailHandle = (options) => async ({ event, resolve }) => {
7
- const requestId = event.request.headers.get("x-request-id") ?? crypto.randomUUID();
8
- const safeHeaders = extractSafeHeaders(event.request.headers);
9
- const { finish, logger, skipped } = createMiddlewareLogger(options, {
10
- headers: safeHeaders,
11
- method: event.request.method,
12
- path: event.url.pathname,
13
- requestId
14
- });
15
- if (skipped) {
16
- return resolve(event);
17
- }
18
- event.locals.log = logger;
19
- return loggerStorage.storage.run(logger, async () => {
20
- try {
21
- const response = await resolve(event);
22
- finish({ status: response.status });
23
- return response;
24
- } catch (error) {
25
- finish({ error: error instanceof Error ? error : new Error(String(error)) });
26
- throw error;
27
- }
28
- });
29
- };
30
- const pailHandleError = () => ({ error, event }) => {
31
- const logger = event.locals.log;
32
- if (logger && error instanceof Error) {
33
- logger.error(error.message, error);
34
- }
35
- };
36
- const createPailHooks = (options) => {
37
- return {
38
- handle: pailHandle(options),
39
- handleError: pailHandleError()
40
- };
41
- };
42
-
43
- export { createPailHooks, pailHandle, pailHandleError, useLogger };
1
+ import{e as g,c as i}from"../packem_shared/headers-DH0H2s8W.js";import{c as u}from"../packem_shared/storage-DaXAlpiO.js";const n=u("SvelteKit handle hook context. Make sure pailHandle is added to your hooks.server.ts."),k=()=>n.useLogger(),h=r=>async({event:e,resolve:a})=>{const d=e.request.headers.get("x-request-id")??crypto.randomUUID(),l=g(e.request.headers),{finish:t,logger:s,skipped:c}=i(r,{headers:l,method:e.request.method,path:e.url.pathname,requestId:d});return c?a(e):(e.locals.log=s,n.storage.run(s,async()=>{try{const o=await a(e);return t({status:o.status}),o}catch(o){throw t({error:o instanceof Error?o:new Error(String(o))}),o}}))},p=()=>({error:r,event:e})=>{const a=e.locals.log;a&&r instanceof Error&&a.error(r.message,r)},q=r=>({handle:h(r),handleError:p()});export{q as createPailHooks,h as pailHandle,p as pailHandleError,k as useLogger};