evlog 2.19.0 → 2.19.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.
- package/README.md +14 -16
- package/dist/adapters/axiom.d.mts +3 -3
- package/dist/adapters/axiom.d.mts.map +1 -1
- package/dist/adapters/axiom.mjs +10 -14
- package/dist/adapters/axiom.mjs.map +1 -1
- package/dist/adapters/better-stack.d.mts +2 -2
- package/dist/adapters/better-stack.d.mts.map +1 -1
- package/dist/adapters/better-stack.mjs +9 -13
- package/dist/adapters/better-stack.mjs.map +1 -1
- package/dist/adapters/datadog.d.mts +3 -3
- package/dist/adapters/datadog.mjs +9 -5
- package/dist/adapters/datadog.mjs.map +1 -1
- package/dist/adapters/fs.d.mts +1 -1
- package/dist/adapters/fs.d.mts.map +1 -1
- package/dist/adapters/fs.mjs +14 -1
- package/dist/adapters/fs.mjs.map +1 -1
- package/dist/adapters/hyperdx.d.mts +2 -2
- package/dist/adapters/hyperdx.mjs +3 -3
- package/dist/adapters/hyperdx.mjs.map +1 -1
- package/dist/adapters/memory.d.mts +2 -3
- package/dist/adapters/memory.d.mts.map +1 -1
- package/dist/adapters/memory.mjs +2 -3
- package/dist/adapters/memory.mjs.map +1 -1
- package/dist/adapters/otlp.d.mts +4 -4
- package/dist/adapters/otlp.mjs +17 -9
- package/dist/adapters/otlp.mjs.map +1 -1
- package/dist/adapters/posthog.d.mts +2 -2
- package/dist/adapters/posthog.mjs +5 -5
- package/dist/adapters/posthog.mjs.map +1 -1
- package/dist/adapters/sentry.d.mts +3 -3
- package/dist/adapters/sentry.mjs +5 -5
- package/dist/adapters/sentry.mjs.map +1 -1
- package/dist/ai/index.d.mts +1 -1
- package/dist/{audit-BFwTUxBJ.mjs → audit-BQt8yAHo.mjs} +28 -24
- package/dist/audit-BQt8yAHo.mjs.map +1 -0
- package/dist/{audit-BUAajsPU.d.mts → audit-D7v6JHj0.d.mts} +8 -1
- package/dist/audit-D7v6JHj0.d.mts.map +1 -0
- package/dist/better-auth/index.d.mts +1 -1
- package/dist/browser.d.mts +1 -1
- package/dist/deferred-drain-jeajC8QF.mjs +36 -0
- package/dist/deferred-drain-jeajC8QF.mjs.map +1 -0
- package/dist/{define-DGwZkZ7x.d.mts → define-DTQpu4f6.d.mts} +3 -3
- package/dist/{define-DGwZkZ7x.d.mts.map → define-DTQpu4f6.d.mts.map} +1 -1
- package/dist/{drain-D_fy7m0n.mjs → drain-fDb-eNwz.mjs} +34 -3
- package/dist/drain-fDb-eNwz.mjs.map +1 -0
- package/dist/elysia/index.d.mts +2 -2
- package/dist/elysia/index.mjs +2 -2
- package/dist/enrich-error-stack-next.node-Dgm_rCf5.mjs +120 -0
- package/dist/enrich-error-stack-next.node-Dgm_rCf5.mjs.map +1 -0
- package/dist/{enricher-CuMbbdqp.d.mts → enricher-CBRmQw6e.d.mts} +2 -2
- package/dist/{enricher-CuMbbdqp.d.mts.map → enricher-CBRmQw6e.d.mts.map} +1 -1
- package/dist/enrichers.d.mts +2 -2
- package/dist/{error-DwajXSKM.d.mts → error-CpghjrkY.d.mts} +2 -2
- package/dist/{error-DwajXSKM.d.mts.map → error-CpghjrkY.d.mts.map} +1 -1
- package/dist/error.d.mts +1 -1
- package/dist/{errors-CAq8pYpW.d.mts → errors-BLU4Tfpe.d.mts} +2 -2
- package/dist/{errors-CAq8pYpW.d.mts.map → errors-BLU4Tfpe.d.mts.map} +1 -1
- package/dist/express/index.d.mts +2 -2
- package/dist/express/index.mjs +1 -1
- package/dist/fastify/index.d.mts +2 -2
- package/dist/fastify/index.mjs +1 -1
- package/dist/{fork-CYm453dq.mjs → fork-CgGlAaHa.mjs} +2 -2
- package/dist/{fork-CYm453dq.mjs.map → fork-CgGlAaHa.mjs.map} +1 -1
- package/dist/hono/index.d.mts +2 -2
- package/dist/hono/index.mjs +1 -1
- package/dist/{http-Bept5EIC.mjs → http-ChVS9GYc.mjs} +2 -2
- package/dist/{http-Bept5EIC.mjs.map → http-ChVS9GYc.mjs.map} +1 -1
- package/dist/http.d.mts +1 -1
- package/dist/{index-CE7kH0II.d.mts → index-EvnrXvQM.d.mts} +3 -3
- package/dist/{index-CE7kH0II.d.mts.map → index-EvnrXvQM.d.mts.map} +1 -1
- package/dist/index.d.mts +8 -8
- package/dist/index.mjs +1 -1
- package/dist/instrumentation-create-BrjQtSKD.d.mts +115 -0
- package/dist/instrumentation-create-BrjQtSKD.d.mts.map +1 -0
- package/dist/{integration-CR601uyW.mjs → integration-DYp2uw8O.mjs} +2 -2
- package/dist/{integration-CR601uyW.mjs.map → integration-DYp2uw8O.mjs.map} +1 -1
- package/dist/{logger-BccCJUyD.d.mts → logger-mHIWxBhJ.d.mts} +7 -3
- package/dist/logger-mHIWxBhJ.d.mts.map +1 -0
- package/dist/logger.d.mts +2 -2
- package/dist/logger.mjs +1 -1
- package/dist/{middleware-DQ6-h8h0.d.mts → middleware-B_k4Mrzg.d.mts} +2 -2
- package/dist/{middleware-DQ6-h8h0.d.mts.map → middleware-B_k4Mrzg.d.mts.map} +1 -1
- package/dist/nestjs/index.d.mts +2 -2
- package/dist/nestjs/index.mjs +1 -1
- package/dist/next/client.d.mts +1 -1
- package/dist/next/index.d.mts +4 -4
- package/dist/next/index.d.mts.map +1 -1
- package/dist/next/index.mjs +16 -3
- package/dist/next/index.mjs.map +1 -1
- package/dist/next/instrumentation/create.d.mts +2 -0
- package/dist/next/instrumentation/create.mjs +155 -0
- package/dist/next/instrumentation/create.mjs.map +1 -0
- package/dist/next/instrumentation.d.mts +2 -77
- package/dist/next/instrumentation.mjs +32 -81
- package/dist/next/instrumentation.mjs.map +1 -1
- package/dist/next/stream.d.mts +1 -1
- package/dist/next/stream.mjs +2 -2
- package/dist/next/stream.mjs.map +1 -1
- package/dist/nitro/errorHandler.mjs +15 -4
- package/dist/nitro/errorHandler.mjs.map +1 -1
- package/dist/nitro/module.d.mts +2 -2
- package/dist/nitro/plugin.mjs +89 -4
- package/dist/nitro/plugin.mjs.map +1 -1
- package/dist/nitro/v3/index.d.mts +2 -2
- package/dist/nitro/v3/module.d.mts +1 -1
- package/dist/nitro/v3/plugin.mjs +4 -4
- package/dist/nitro/v3/plugin.mjs.map +1 -1
- package/dist/nitro/v3/useLogger.d.mts +1 -1
- package/dist/{nitro-zCXTylj4.d.mts → nitro-_Hda8Deo.d.mts} +2 -2
- package/dist/{nitro-zCXTylj4.d.mts.map → nitro-_Hda8Deo.d.mts.map} +1 -1
- package/dist/nuxt/module.d.mts +1 -1
- package/dist/nuxt/module.mjs +2 -2
- package/dist/orpc/index.d.mts +2 -2
- package/dist/orpc/index.mjs +1 -1
- package/dist/{package-CUhII9DA.mjs → package-CNV_CXs8.mjs} +2 -2
- package/dist/package-CNV_CXs8.mjs.map +1 -0
- package/dist/{parseError-Cagr-Ctc.d.mts → parseError-BeBXEd2V.d.mts} +2 -2
- package/dist/parseError-BeBXEd2V.d.mts.map +1 -0
- package/dist/pipeline.d.mts +0 -19
- package/dist/pipeline.d.mts.map +1 -1
- package/dist/pipeline.mjs +12 -0
- package/dist/pipeline.mjs.map +1 -1
- package/dist/{pretty-error-CVVgwlTn.mjs → pretty-error-THg0U0w9.mjs} +37 -27
- package/dist/pretty-error-THg0U0w9.mjs.map +1 -0
- package/dist/{pretty-error-snippet.node-c_bzjg7g.mjs → pretty-error-snippet.node-itfCajBM.mjs} +3 -2
- package/dist/{pretty-error-snippet.node-c_bzjg7g.mjs.map → pretty-error-snippet.node-itfCajBM.mjs.map} +1 -1
- package/dist/react-router/index.d.mts +2 -2
- package/dist/react-router/index.mjs +1 -1
- package/dist/runtime/client/log.d.mts +1 -1
- package/dist/runtime/server/routes/_evlog/ingest.post.d.mts +7 -0
- package/dist/runtime/server/routes/_evlog/ingest.post.mjs +39 -3
- package/dist/runtime/server/routes/_evlog/ingest.post.mjs.map +1 -1
- package/dist/runtime/server/useLogger.d.mts +1 -1
- package/dist/runtime/utils/parseError.d.mts +2 -2
- package/dist/{source-location-xkDGiERl.mjs → source-location-CHOPF2nd.mjs} +2 -1
- package/dist/{source-location-xkDGiERl.mjs.map → source-location-CHOPF2nd.mjs.map} +1 -1
- package/dist/stream.d.mts +1 -1
- package/dist/stream.mjs +1 -1
- package/dist/sveltekit/index.d.mts +2 -2
- package/dist/sveltekit/index.mjs +1 -1
- package/dist/toolkit.d.mts +20 -6
- package/dist/toolkit.d.mts.map +1 -1
- package/dist/toolkit.mjs +6 -6
- package/dist/types.d.mts +1 -1
- package/dist/{useLogger-Dv52PDpH.d.mts → useLogger-Cfv8Ck8b.d.mts} +2 -2
- package/dist/{useLogger-Dv52PDpH.d.mts.map → useLogger-Cfv8Ck8b.d.mts.map} +1 -1
- package/dist/{utils-DmNbZwBZ.d.mts → utils-CJJG0ZYW.d.mts} +2 -2
- package/dist/{utils-DmNbZwBZ.d.mts.map → utils-CJJG0ZYW.d.mts.map} +1 -1
- package/dist/utils.d.mts +1 -1
- package/dist/utils.mjs +2 -1
- package/dist/utils.mjs.map +1 -1
- package/dist/vite/index.d.mts +1 -1
- package/dist/vite/index.mjs +1 -1
- package/dist/workers.d.mts +1 -1
- package/dist/workers.mjs +1 -1
- package/package.json +12 -1
- package/dist/audit-BFwTUxBJ.mjs.map +0 -1
- package/dist/audit-BUAajsPU.d.mts.map +0 -1
- package/dist/drain-D_fy7m0n.mjs.map +0 -1
- package/dist/enrich-drain-CG_2Nix-.mjs +0 -122
- package/dist/enrich-drain-CG_2Nix-.mjs.map +0 -1
- package/dist/logger-BccCJUyD.d.mts.map +0 -1
- package/dist/next/instrumentation.d.mts.map +0 -1
- package/dist/package-CUhII9DA.mjs.map +0 -1
- package/dist/parseError-Cagr-Ctc.d.mts.map +0 -1
- package/dist/pretty-error-CVVgwlTn.mjs.map +0 -1
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { filterSafeHeaders } from "./utils.mjs";
|
|
2
|
-
import { y as getGlobalPluginRunner } from "./audit-BFwTUxBJ.mjs";
|
|
3
|
-
import { getHeaders } from "h3";
|
|
4
|
-
//#region src/shared/enrich-error-stack.node.ts
|
|
5
|
-
function shouldEnrichStackFromConfig() {
|
|
6
|
-
try {
|
|
7
|
-
const raw = process.env.__EVLOG_CONFIG;
|
|
8
|
-
if (raw) return JSON.parse(raw).pretty ?? process.env.NODE_ENV !== "production";
|
|
9
|
-
} catch {}
|
|
10
|
-
return process.env.NODE_ENV !== "production";
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Rewrite `error.stack` with source-mapped frames when the Nitro dev runtime is available.
|
|
14
|
-
* Matches Nitro's Youch output (e.g. `server/api/foo.ts:100` instead of `.nuxt/dev/index.mjs`).
|
|
15
|
-
*/
|
|
16
|
-
async function enrichErrorStackForDev(error, options = {}) {
|
|
17
|
-
if (process.env.NODE_ENV === "production") return;
|
|
18
|
-
if (!(options.pretty ?? shouldEnrichStackFromConfig())) return;
|
|
19
|
-
for (const specifier of ["nitropack/runtime/internal/error/dev", "nitro/runtime/internal/error/dev"]) try {
|
|
20
|
-
const mod = await import(specifier);
|
|
21
|
-
if (typeof mod.loadStackTrace === "function") {
|
|
22
|
-
await mod.loadStackTrace(error).catch(() => {});
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
} catch {}
|
|
26
|
-
}
|
|
27
|
-
//#endregion
|
|
28
|
-
//#region src/nitro/enrich-drain.ts
|
|
29
|
-
function getSafeHeaders(event) {
|
|
30
|
-
return filterSafeHeaders(getHeaders(event));
|
|
31
|
-
}
|
|
32
|
-
function getSafeResponseHeaders(event) {
|
|
33
|
-
const headers = {};
|
|
34
|
-
const nodeRes = event.node?.res;
|
|
35
|
-
if (nodeRes?.getHeaders) for (const [key, value] of Object.entries(nodeRes.getHeaders())) {
|
|
36
|
-
if (value === void 0) continue;
|
|
37
|
-
headers[key] = Array.isArray(value) ? value.join(", ") : String(value);
|
|
38
|
-
}
|
|
39
|
-
if (event.response?.headers) event.response.headers.forEach((value, key) => {
|
|
40
|
-
headers[key] = value;
|
|
41
|
-
});
|
|
42
|
-
if (Object.keys(headers).length === 0) return void 0;
|
|
43
|
-
return filterSafeHeaders(headers);
|
|
44
|
-
}
|
|
45
|
-
function getResponseStatus(event) {
|
|
46
|
-
if (event.node?.res?.statusCode) return event.node.res.statusCode;
|
|
47
|
-
if (event.response?.status) return event.response.status;
|
|
48
|
-
if (typeof event.context.status === "number") return event.context.status;
|
|
49
|
-
return 200;
|
|
50
|
-
}
|
|
51
|
-
function buildHookContext(event) {
|
|
52
|
-
const responseHeaders = getSafeResponseHeaders(event);
|
|
53
|
-
return {
|
|
54
|
-
request: {
|
|
55
|
-
method: event.method,
|
|
56
|
-
path: event.path
|
|
57
|
-
},
|
|
58
|
-
headers: getSafeHeaders(event),
|
|
59
|
-
response: {
|
|
60
|
-
status: getResponseStatus(event),
|
|
61
|
-
headers: responseHeaders
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
/** @internal Extend drain lifetime on Cloudflare without blocking Nitro Node responses. */
|
|
66
|
-
function extendDeferredDrain(drainPromise, waitUntil) {
|
|
67
|
-
drainPromise.catch((err) => {
|
|
68
|
-
console.error("[evlog] background drain failed:", err);
|
|
69
|
-
});
|
|
70
|
-
if (typeof waitUntil === "function") waitUntil(drainPromise);
|
|
71
|
-
}
|
|
72
|
-
function resolveDeferredWaitUntil(event) {
|
|
73
|
-
if (globalThis.navigator?.userAgent !== "Cloudflare-Workers") return void 0;
|
|
74
|
-
const waitUntilCtx = event.context.cloudflare?.context ?? event.context;
|
|
75
|
-
if (typeof waitUntilCtx?.waitUntil === "function") return waitUntilCtx.waitUntil.bind(waitUntilCtx);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Run evlog enrich + drain hooks for an emitted wide event.
|
|
79
|
-
* @internal Exported for Nitro plugin tests.
|
|
80
|
-
*/
|
|
81
|
-
async function callEnrichAndDrain(nitroApp, emittedEvent, event, options) {
|
|
82
|
-
if (!emittedEvent) return;
|
|
83
|
-
const hookContext = buildHookContext(event);
|
|
84
|
-
const enrichCtx = {
|
|
85
|
-
event: emittedEvent,
|
|
86
|
-
...hookContext
|
|
87
|
-
};
|
|
88
|
-
const runner = getGlobalPluginRunner();
|
|
89
|
-
try {
|
|
90
|
-
await nitroApp.hooks.callHook("evlog:enrich", enrichCtx);
|
|
91
|
-
} catch (err) {
|
|
92
|
-
console.error("[evlog] enrich failed:", err);
|
|
93
|
-
}
|
|
94
|
-
if (runner.hasEnrich) try {
|
|
95
|
-
await runner.runEnrich(enrichCtx);
|
|
96
|
-
} catch (err) {
|
|
97
|
-
console.error("[evlog] enrich failed:", err);
|
|
98
|
-
}
|
|
99
|
-
const drainCtx = {
|
|
100
|
-
event: emittedEvent,
|
|
101
|
-
request: hookContext.request,
|
|
102
|
-
headers: hookContext.headers
|
|
103
|
-
};
|
|
104
|
-
const drainTasks = [nitroApp.hooks.callHook("evlog:drain", drainCtx).catch((err) => {
|
|
105
|
-
console.error("[evlog] drain failed:", err);
|
|
106
|
-
})];
|
|
107
|
-
if (runner.hasDrain) drainTasks.push(runner.runDrain(drainCtx).catch((err) => {
|
|
108
|
-
console.error("[evlog] drain failed:", err);
|
|
109
|
-
}));
|
|
110
|
-
const drainPromise = Promise.all(drainTasks);
|
|
111
|
-
if (options?.deferDrain) {
|
|
112
|
-
extendDeferredDrain(drainPromise, resolveDeferredWaitUntil(event));
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
const waitUntilCtx = event.context.cloudflare?.context ?? event.context;
|
|
116
|
-
if (typeof waitUntilCtx?.waitUntil === "function") waitUntilCtx.waitUntil(drainPromise);
|
|
117
|
-
else await drainPromise;
|
|
118
|
-
}
|
|
119
|
-
//#endregion
|
|
120
|
-
export { extendDeferredDrain as n, enrichErrorStackForDev as r, callEnrichAndDrain as t };
|
|
121
|
-
|
|
122
|
-
//# sourceMappingURL=enrich-drain-CG_2Nix-.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enrich-drain-CG_2Nix-.mjs","names":[],"sources":["../src/shared/enrich-error-stack.node.ts","../src/nitro/enrich-drain.ts"],"sourcesContent":["/** Options for {@link enrichErrorStackForDev}. */\nexport interface EnrichErrorStackOptions {\n /** When false, skip Nitro source-map stack enrichment. @default true in dev when pretty is enabled */\n pretty?: boolean\n}\n\nfunction shouldEnrichStackFromConfig(): boolean {\n try {\n const raw = process.env.__EVLOG_CONFIG\n if (raw) {\n const config = JSON.parse(raw) as { pretty?: boolean }\n return config.pretty ?? process.env.NODE_ENV !== 'production'\n }\n } catch {\n // ignore malformed config\n }\n return process.env.NODE_ENV !== 'production'\n}\n\n/**\n * Rewrite `error.stack` with source-mapped frames when the Nitro dev runtime is available.\n * Matches Nitro's Youch output (e.g. `server/api/foo.ts:100` instead of `.nuxt/dev/index.mjs`).\n */\nexport async function enrichErrorStackForDev(\n error: Error,\n options: EnrichErrorStackOptions = {},\n): Promise<void> {\n if (process.env.NODE_ENV === 'production') return\n const pretty = options.pretty ?? shouldEnrichStackFromConfig()\n if (!pretty) return\n\n const specifiers = [\n 'nitropack/runtime/internal/error/dev',\n 'nitro/runtime/internal/error/dev',\n ]\n for (const specifier of specifiers) {\n try {\n const mod = await import(specifier)\n if (typeof mod.loadStackTrace === 'function') {\n await mod.loadStackTrace(error).catch(() => {})\n return\n }\n } catch {\n // try next runtime\n }\n }\n}\n","import type { NitroApp } from 'nitropack/types'\nimport { getHeaders } from 'h3'\nimport { getGlobalPluginRunner } from '../logger'\nimport type { EnrichContext, ServerEvent, WideEvent } from '../types'\nimport { filterSafeHeaders } from '../utils'\n\nfunction getSafeHeaders(event: ServerEvent): Record<string, string> {\n const allHeaders = getHeaders(event as Parameters<typeof getHeaders>[0])\n return filterSafeHeaders(allHeaders)\n}\n\nfunction getSafeResponseHeaders(event: ServerEvent): Record<string, string> | undefined {\n const headers: Record<string, string> = {}\n const nodeRes = event.node?.res as { getHeaders?: () => Record<string, unknown> } | undefined\n\n if (nodeRes?.getHeaders) {\n for (const [key, value] of Object.entries(nodeRes.getHeaders())) {\n if (value === undefined) continue\n headers[key] = Array.isArray(value) ? value.join(', ') : String(value)\n }\n }\n\n if (event.response?.headers) {\n event.response.headers.forEach((value, key) => {\n headers[key] = value\n })\n }\n\n if (Object.keys(headers).length === 0) return undefined\n return filterSafeHeaders(headers)\n}\n\nfunction getResponseStatus(event: ServerEvent): number {\n if (event.node?.res?.statusCode) {\n return event.node.res.statusCode\n }\n if (event.response?.status) {\n return event.response.status\n }\n if (typeof event.context.status === 'number') {\n return event.context.status\n }\n return 200\n}\n\nfunction buildHookContext(event: ServerEvent): Omit<EnrichContext, 'event'> {\n const responseHeaders = getSafeResponseHeaders(event)\n return {\n request: { method: event.method, path: event.path },\n headers: getSafeHeaders(event),\n response: {\n status: getResponseStatus(event),\n headers: responseHeaders,\n },\n }\n}\n\n/** @internal Extend drain lifetime on Cloudflare without blocking Nitro Node responses. */\nexport function extendDeferredDrain(\n drainPromise: Promise<unknown>,\n waitUntil?: (promise: Promise<unknown>) => void,\n): void {\n void drainPromise.catch((err) => {\n console.error('[evlog] background drain failed:', err)\n })\n if (typeof waitUntil === 'function') {\n waitUntil(drainPromise)\n }\n}\n\nfunction resolveDeferredWaitUntil(event: ServerEvent): ((promise: Promise<unknown>) => void) | undefined {\n if (globalThis.navigator?.userAgent !== 'Cloudflare-Workers') return undefined\n const waitUntilCtx = event.context.cloudflare?.context ?? event.context\n if (typeof waitUntilCtx?.waitUntil === 'function') {\n return waitUntilCtx.waitUntil.bind(waitUntilCtx)\n }\n return undefined\n}\n\n/**\n * Run evlog enrich + drain hooks for an emitted wide event.\n * @internal Exported for Nitro plugin tests.\n */\nexport async function callEnrichAndDrain(\n nitroApp: NitroApp,\n emittedEvent: WideEvent | null,\n event: ServerEvent,\n options?: { deferDrain?: boolean },\n): Promise<void> {\n if (!emittedEvent) return\n\n const hookContext = buildHookContext(event)\n const enrichCtx: EnrichContext = { event: emittedEvent, ...hookContext }\n const runner = getGlobalPluginRunner()\n\n try {\n await nitroApp.hooks.callHook('evlog:enrich', enrichCtx)\n } catch (err) {\n console.error('[evlog] enrich failed:', err)\n }\n if (runner.hasEnrich) {\n try {\n await runner.runEnrich(enrichCtx)\n } catch (err) {\n console.error('[evlog] enrich failed:', err)\n }\n }\n\n const drainCtx = {\n event: emittedEvent,\n request: hookContext.request,\n headers: hookContext.headers,\n }\n const drainTasks: Array<Promise<unknown>> = [\n nitroApp.hooks.callHook('evlog:drain', drainCtx).catch((err) => {\n console.error('[evlog] drain failed:', err)\n }),\n ]\n if (runner.hasDrain) {\n drainTasks.push(\n runner.runDrain(drainCtx).catch((err) => {\n console.error('[evlog] drain failed:', err)\n }),\n )\n }\n const drainPromise = Promise.all(drainTasks)\n\n // deferDrain: never block the HTTP error response on Nitro Node (h3 2.13+ waitUntil\n // queues work before send). On Cloudflare, register waitUntil so drains survive.\n if (options?.deferDrain) {\n extendDeferredDrain(drainPromise, resolveDeferredWaitUntil(event))\n return\n }\n\n const waitUntilCtx = event.context.cloudflare?.context ?? event.context\n if (typeof waitUntilCtx?.waitUntil === 'function') {\n waitUntilCtx.waitUntil(drainPromise)\n } else {\n await drainPromise\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger-BccCJUyD.d.mts","names":[],"sources":["../src/logger.ts"],"mappings":";;;iBAgCS,SAAA,CAAU,MAAA,EAAQ,MAAA,mBAAyB,MAAA,EAAQ,MAAA;;;;;;;iBA4B5C,yBAAA,CAA0B,KAAA,EAAO,SAAA;;;;AAsCjD;iBAAgB,UAAA,CAAW,MAAA,GAAQ,YAAA;;;;AA+CnC;;iBAAgB,qBAAA,CAAA,GAAyB,YAAA;;;AAOzC;iBAAgB,SAAA,CAAA;;;;AAShB;;iBAAgB,UAAA,CAAA;;;AAOhB;iBAAgB,cAAA,CAAA;;;;AAShB;;iBAAgB,cAAA,CAAA,KAAoB,GAAA,EAAK,YAAA,YAAwB,OAAA;;;;;iBA8BjD,UAAA,CAAW,GAAA,EAAK,mBAAA;;AAAhC;;;;;AAgBC;;;cA6fK,IAAA,EAAM,GAAA;AAOU;;;AAAA,UAqBZ,2BAAA;EAKR;;;;EAAA,WAAA;EAIsC;AAkBxC;;EAlBE,SAAA,IAAa,OAAA,EAAS,OAAA;AAAA;;;;;;;;;;;;;;;;iBAkBR,YAAA,oBAAgC,MAAA,kBAAA,CAAyB,cAAA,GAAgB,MAAA,mBAA8B,eAAA,GAAkB,2BAAA,GAA8B,eAAA,CAAgB,CAAA;AAiOvL;;;;;;;;;;;;;;;;;;;;AAeA;;;;;;;AAfA,iBAAgB,mBAAA,oBAAuC,MAAA,kBAAA,CAAyB,OAAA,GAAS,oBAAA,EAA2B,eAAA,GAAkB,2BAAA,GAA8B,eAAA,CAAgB,CAAA;;;;iBAepK,cAAA,CAAA,GAAkB,kBAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.mts","names":[],"sources":["../../src/next/instrumentation.ts"],"mappings":";;;;UAIiB,0BAAA;EACf,IAAA;EACA,MAAA;EACA,OAAA,EAAS,MAAA;AAAA;;UAIM,+BAAA;EACf,UAAA;EACA,SAAA;EACA,SAAA;EACA,YAAA;AAAA;;;;;UAOe,yBAAA;EACf,QAAA,eAAuB,OAAA;EACvB,cAAA,GACE,KAAA;IAAS,MAAA;EAAA,IAAoB,KAAA,EAC7B,OAAA,EAAS,0BAAA,EACT,OAAA,EAAS,+BAAA,YACC,OAAA;AAAA;;;;;;;;;;;;;;iBAgBE,yBAAA,CAA0B,MAAA,QAAc,OAAA,CAAQ,yBAAA;;;IAejD,MAAA;EAAA,IAAoB,KAAA,EAAK,OAAA,EACzB,0BAAA,EAA0B,OAAA,EAC1B,+BAAA,GAA+B,OAAA;AAAA;AAAA,UAS7B,sBAAA;EA1CI;EA4CnB,OAAA;EA5Bc;EA8Bd,OAAA;;EAEA,GAAA,GAAM,OAAA,CAAQ,kBAAA;EAhCwC;EAkCtD,MAAA;EAnBiC;EAqBjC,MAAA;EAnBa;EAqBb,QAAA,GAAW,cAAA;EArBiC;EAuB5C,QAAA,GAAW,QAAA;EAxC2C;EA0CtD,SAAA;EA1CwC;EA4CxC,KAAA,IAAS,GAAA,EAAK,YAAA,YAAwB,OAAA;;EAEtC,aAAA;AAAA;AAAA,UAGQ,qBAAA;EACR,QAAA;EACA,cAAA,GACE,KAAA;IAAS,MAAA;EAAA,IAAoB,KAAA,EAC7B,OAAA,EAAS,0BAAA,EACT,OAAA,EAAS,+BAAA;AAAA;AAAA,iBAMG,qBAAA,CAAsB,OAAA,GAAS,sBAAA,GAA8B,qBAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"package-CUhII9DA.mjs","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseError-Cagr-Ctc.d.mts","names":[],"sources":["../src/runtime/utils/parseError.ts"],"mappings":";;;iBAcgB,UAAA,CAAW,KAAA,YAAiB,WAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pretty-error-CVVgwlTn.mjs","names":[],"sources":["../src/shared/pretty-error.ts"],"sourcesContent":["import { colors, isBrowser, isDev } from '../utils'\nimport type { ResolvedPrettyError } from './dev-terminal'\n\n/** @internal Server-only snippet reader registered by Nitro plugin or initLogger. */\ntype SnippetReader = (file: string, line: number, contextLines?: number) => CodeSnippetLine[] | null\n\nlet snippetReader: SnippetReader | null = null\n\n/**\n * Register a disk-backed snippet reader (Node.js integrations only).\n * @internal\n */\nexport function registerPrettyErrorSnippetReader(reader: SnippetReader | null): void {\n snippetReader = reader\n}\n\n/** Tree-only breathing line (connector without content). */\nexport const PRETTY_ERROR_TREE_SPACER = '__EVLOG_TREE_SPACER__'\n\nfunction pushTreeSpacer(children: string[]) {\n children.push(PRETTY_ERROR_TREE_SPACER)\n}\n\n/** Pretty-print tree node for error sections. */\nexport interface PrettyErrorTreeEntry {\n key: string\n value: string\n /** Optional ANSI color for the value (server only). */\n valueColor?: string\n children?: string[]\n}\n\n/** Normalized error fields extracted from wide-event `error` context. */\nexport interface NormalizedErrorContext {\n message: string\n name?: string\n code?: string\n why?: string\n fix?: string\n link?: string\n status?: number\n stack?: string\n cause?: string\n}\n\n/** Parsed V8 stack frame. */\nexport interface StackFrame {\n raw: string\n file?: string\n line?: number\n column?: number\n fn?: string\n /** True for application source (not node_modules / build output). */\n isApp: boolean\n}\n\n/** Options for {@link buildErrorEntries}. */\nexport type PrettyErrorOptions = Partial<ResolvedPrettyError> & {\n /** Project root for relative paths in snippets. @default process.cwd() */\n cwd?: string\n}\n\nexport interface CodeSnippetLine {\n line: number\n content: string\n isErrorLine: boolean\n}\n\nconst SKIP_PATH_RE = /(?:^|[/\\\\])(?:node_modules|\\.nuxt|\\.output)(?:[/\\\\]|$)/\nconst SKIP_FRAME_PATH_RE = /(?:^|[/\\\\])(?:packages[/\\\\]evlog|evlog[/\\\\](?:dist|src))(?:[/\\\\]|$)/\nconst SKIP_FRAME_FN_RE = /^(?:createError|EvlogError|new EvlogError)$/\n\nfunction isPlainObject(val: unknown): val is Record<string, unknown> {\n return val !== null && typeof val === 'object' && !Array.isArray(val)\n}\n\nfunction pickString(obj: Record<string, unknown>, key: string): string | undefined {\n const val = obj[key]\n return typeof val === 'string' && val.length > 0 ? val : undefined\n}\n\nfunction pickNumber(obj: Record<string, unknown>, key: string): number | undefined {\n const val = obj[key]\n return typeof val === 'number' ? val : undefined\n}\n\nfunction extractGuidance(data: Record<string, unknown>): Pick<NormalizedErrorContext, 'code' | 'why' | 'fix' | 'link'> {\n return {\n code: pickString(data, 'code'),\n why: pickString(data, 'why'),\n fix: pickString(data, 'fix'),\n link: pickString(data, 'link'),\n }\n}\n\n/**\n * Extract structured error fields from a wide-event `error` value.\n */\nexport function normalizeErrorContext(error: unknown): NormalizedErrorContext | null {\n if (error === null || error === undefined) return null\n\n if (typeof error === 'string') {\n return { message: error }\n }\n\n if (!isPlainObject(error)) {\n return { message: String(error) }\n }\n\n const message = pickString(error, 'message')\n ?? pickString(error, 'statusText')\n ?? pickString(error, 'statusMessage')\n ?? 'Unknown error'\n\n const result: NormalizedErrorContext = {\n message,\n name: pickString(error, 'name'),\n code: pickString(error, 'code'),\n why: pickString(error, 'why'),\n fix: pickString(error, 'fix'),\n link: pickString(error, 'link'),\n status: pickNumber(error, 'status') ?? pickNumber(error, 'statusCode'),\n stack: pickString(error, 'stack'),\n }\n\n const { data, cause } = error\n if (isPlainObject(data)) {\n const guidance = extractGuidance(data)\n if (!result.code) result.code = guidance.code\n if (!result.why) result.why = guidance.why\n if (!result.fix) result.fix = guidance.fix\n if (!result.link) result.link = guidance.link\n }\n\n if (cause instanceof Error) {\n result.cause = cause.message\n } else if (isPlainObject(cause) && pickString(cause, 'message')) {\n result.cause = pickString(cause, 'message')\n }\n\n return result\n}\n\n/** Decode a `file://` URL or path for display and snippet lookup. */\nexport function decodeFileUrl(file: string): string {\n if (file.startsWith('file://')) {\n try {\n return decodeURIComponent(new URL(file).pathname)\n } catch {\n return file.slice('file://'.length)\n }\n }\n return file\n}\n\nfunction isAppPath(file: string): boolean {\n const normalized = file.replace(/\\\\/g, '/')\n if (SKIP_PATH_RE.test(normalized)) return false\n if (normalized.includes('/node_modules/')) return false\n return true\n}\n\nfunction formatDisplayPath(file: string, cwd: string): string {\n const decoded = decodeFileUrl(file).replace(/\\\\/g, '/')\n const cwdNorm = cwd.replace(/\\\\/g, '/').replace(/\\/$/, '')\n if (cwdNorm && decoded.startsWith(`${cwdNorm}/`)) {\n const rel = decoded.slice(cwdNorm.length + 1)\n return rel.startsWith('./') ? rel.slice(2) : rel\n }\n const serverIdx = decoded.indexOf('/server/')\n if (serverIdx >= 0) return decoded.slice(serverIdx + 1)\n const srcIdx = decoded.indexOf('/src/')\n if (srcIdx >= 0) return decoded.slice(srcIdx + 1)\n return decoded\n}\n\n/**\n * Parse a V8 stack trace string into frames.\n */\nexport function parseStackFrames(stack: string | undefined): StackFrame[] {\n if (!stack) return []\n\n const lines = stack.split('\\n')\n const frames: StackFrame[] = []\n\n for (const line of lines) {\n const trimmed = line.trim()\n if (!trimmed.startsWith('at ')) continue\n\n const withFn = trimmed.match(/^at (.+?) \\((.+):(\\d+):(\\d+)\\)$/)\n if (withFn) {\n const [, fn, file, lineStr, colStr] = withFn\n frames.push({\n raw: trimmed,\n fn,\n file,\n line: Number(lineStr),\n column: Number(colStr),\n isApp: isAppPath(file!),\n })\n continue\n }\n\n const withoutFn = trimmed.match(/^at (.+):(\\d+):(\\d+)$/)\n if (withoutFn) {\n const [, file, lineStr, colStr] = withoutFn\n frames.push({\n raw: trimmed,\n file,\n line: Number(lineStr),\n column: Number(colStr),\n isApp: isAppPath(file!),\n })\n continue\n }\n\n const asyncFn = trimmed.match(/^at async (.+?) \\((.+):(\\d+):(\\d+)\\)$/)\n if (asyncFn) {\n const [, fn, file, lineStr, colStr] = asyncFn\n frames.push({\n raw: trimmed,\n fn: `async ${fn}`,\n file,\n line: Number(lineStr),\n column: Number(colStr),\n isApp: isAppPath(file!),\n })\n }\n }\n\n return frames\n}\n\nfunction isInternalErrorFrame(frame: StackFrame): boolean {\n if (frame.fn) {\n const fn = frame.fn.replace(/^async /, '')\n if (SKIP_FRAME_FN_RE.test(fn)) return true\n }\n if (!frame.file) return true\n const path = decodeFileUrl(frame.file).replace(/\\\\/g, '/')\n if (SKIP_FRAME_PATH_RE.test(path)) return true\n if (path.includes('.nuxt/')) return true\n return false\n}\n\n/**\n * Pick the most useful frame for code snippets (prefer app source over bundles).\n */\nexport function pickPrimaryFrame(frames: StackFrame[]): StackFrame | undefined {\n const appFrames = frames.filter(f => f.isApp && f.file && f.line && !isInternalErrorFrame(f))\n if (appFrames.length === 0) return undefined\n\n const scored = appFrames.map((frame) => {\n const path = decodeFileUrl(frame.file!).replace(/\\\\/g, '/')\n let score = 0\n if (path.includes('/server/')) score += 8\n if (/\\.(?:ts|tsx|vue)$/.test(path)) score += 6\n if (path.includes('/src/')) score += 3\n if (path.startsWith('./')) score += 2\n if (/\\.(?:js|jsx|mjs)$/.test(path)) score += 1\n if (path.includes('.nuxt/')) score -= 20\n if (path.includes('/packages/evlog/')) score -= 20\n return { frame, score }\n })\n\n scored.sort((a, b) => b.score - a.score)\n return scored[0]?.frame ?? appFrames[0]\n}\n\n/**\n * Read source lines around a stack frame when a server snippet reader is registered.\n */\nexport function readCodeSnippet(\n file: string,\n line: number,\n contextLines = 2,\n): CodeSnippetLine[] | null {\n if (!isDev() || isBrowser() || !snippetReader) return null\n return snippetReader(file, line, contextLines)\n}\n\nfunction formatSnippetLines(snippet: CodeSnippetLine[]): string[] {\n const width = String(snippet[snippet.length - 1]?.line ?? 0).length\n return snippet.map(({ line, content, isErrorLine }) => {\n const marker = isErrorLine ? `${colors.red}❯${colors.reset}` : `${colors.dim} ${colors.reset}`\n const numColor = isErrorLine ? colors.red : colors.gray\n const trimmed = content.length > 120 ? `${content.slice(0, 117)}…` : content\n return `${marker} ${numColor}${String(line).padStart(width, ' ')}${colors.reset} ${colors.dim}┃${colors.reset} ${colors.dim}${trimmed}${colors.reset}`\n })\n}\n\nfunction formatFrameLocation(frame: StackFrame, cwd: string): string {\n const file = frame.file ? formatDisplayPath(frame.file, cwd) : 'unknown'\n const loc = frame.line ? `${file}:${frame.line}` : file\n return frame.fn ? `at ${frame.fn} (${loc})` : `at ${loc}`\n}\n\nfunction formatCollapsedFrame(frame: StackFrame, cwd: string): string {\n const file = frame.file ? formatDisplayPath(frame.file, cwd) : 'unknown'\n const loc = frame.line ? `${file}:${frame.line}` : file\n const prefix = frame.fn?.startsWith('async') ? 'at async ' : 'at '\n const fn = frame.fn?.replace(/^async /, '') ?? loc\n if (frame.fn && frame.fn !== loc) {\n return `${prefix}${fn} (${loc})`\n }\n return `${prefix}${loc}`\n}\n\nconst GUIDANCE_WRAP_WIDTH = 76\nconst GUIDANCE_CONTINUATION = ' '\n\n/** Wrap guidance text with hanging indent for long Why/Fix lines. */\nfunction formatGuidanceLine(label: string, text: string, labelColor: string): string[] {\n const prefix = `${labelColor}${label}:${colors.reset} `\n const lines: string[] = []\n let remaining = text.trim()\n let first = true\n\n while (remaining.length > 0) {\n const budget = first\n ? Math.max(24, GUIDANCE_WRAP_WIDTH - prefix.length)\n : Math.max(24, GUIDANCE_WRAP_WIDTH - GUIDANCE_CONTINUATION.length)\n if (remaining.length <= budget) {\n lines.push(first ? `${prefix}${remaining}` : `${GUIDANCE_CONTINUATION}${remaining}`)\n break\n }\n let split = remaining.lastIndexOf(' ', budget)\n if (split <= 0) split = budget\n const chunk = remaining.slice(0, split).trimEnd()\n lines.push(first ? `${prefix}${chunk}` : `${GUIDANCE_CONTINUATION}${chunk}`)\n remaining = remaining.slice(split).trimStart()\n first = false\n }\n\n return lines\n}\n\n/**\n * Build pretty-print tree entries for a wide-event `error` field.\n */\nexport function buildErrorEntries(\n error: unknown,\n options: PrettyErrorOptions = {},\n): PrettyErrorTreeEntry[] {\n const normalized = normalizeErrorContext(error)\n if (!normalized) return []\n\n const cwd = options.cwd ?? (typeof process !== 'undefined' && typeof process.cwd === 'function' ? process.cwd() : '.')\n const compact = options.compact ?? isDev()\n const detail = options.detail ?? 'full'\n const guidanceOnly = detail === 'guidance'\n const showFrames = !guidanceOnly && !isBrowser() && (options.snippet ?? isDev())\n const stackDepth = guidanceOnly\n ? 0\n : (options.stackDepth ?? (compact ? 2 : 3))\n const snippetContextLines = compact ? 1 : 2\n\n const children: string[] = []\n const frames = guidanceOnly ? [] : parseStackFrames(normalized.stack)\n const primary = guidanceOnly ? undefined : pickPrimaryFrame(frames)\n\n if (!guidanceOnly && primary?.file && primary.line) {\n pushTreeSpacer(children)\n if (showFrames) {\n const snippet = readCodeSnippet(primary.file, primary.line, snippetContextLines)\n children.push(`${colors.dim} ${formatFrameLocation(primary, cwd)}${colors.reset}`)\n if (snippet) {\n children.push(...formatSnippetLines(snippet))\n }\n } else {\n children.push(`${colors.dim} ${formatFrameLocation(primary, cwd)}${colors.reset}`)\n }\n }\n\n if (normalized.code) {\n children.push(`${colors.dim}Code:${colors.reset} ${normalized.code}`)\n }\n\n const hasGuidance = Boolean(normalized.why || normalized.fix || normalized.link)\n if (hasGuidance) {\n pushTreeSpacer(children)\n }\n\n if (normalized.why) {\n children.push(...formatGuidanceLine('Why', normalized.why, colors.yellow))\n }\n if (normalized.fix) {\n children.push(...formatGuidanceLine('Fix', normalized.fix, colors.cyan))\n }\n if (normalized.link) {\n children.push(`${colors.dim}More:${colors.reset} ${normalized.link}`)\n }\n\n if (normalized.cause && normalized.cause !== normalized.message) {\n children.push(`${colors.dim}Caused by:${colors.reset} ${normalized.cause}`)\n }\n\n const hiddenCount = guidanceOnly ? 0 : frames.filter(f => !f.isApp || isInternalErrorFrame(f)).length\n const tailFrames = stackDepth > 0\n ? frames.filter(f => f !== primary && !isInternalErrorFrame(f)).slice(0, stackDepth)\n : []\n\n if (!guidanceOnly && (hiddenCount > 0 || tailFrames.length > 0)) {\n pushTreeSpacer(children)\n if (hiddenCount > 0) {\n children.push(`${colors.gray}stack (${hiddenCount} frame${hiddenCount === 1 ? '' : 's'} hidden in node_modules)${colors.reset}`)\n } else {\n children.push(`${colors.gray}stack${colors.reset}`)\n }\n for (const frame of tailFrames) {\n children.push(`${colors.gray} ${formatCollapsedFrame(frame, cwd)}${colors.reset}`)\n }\n }\n\n return [\n {\n key: 'error',\n value: `${colors.red}${colors.bold}${normalized.message}${colors.reset}`,\n children: children.length > 0 ? children : undefined,\n },\n ]\n}\n"],"mappings":";;AAMA,IAAI,gBAAsC;;;;;AAM1C,SAAgB,iCAAiC,QAAoC;AACnF,iBAAgB;;;AAIlB,MAAa,2BAA2B;AAExC,SAAS,eAAe,UAAoB;AAC1C,UAAS,KAAK,yBAAyB;;AAgDzC,MAAM,eAAe;AACrB,MAAM,qBAAqB;AAC3B,MAAM,mBAAmB;AAEzB,SAAS,cAAc,KAA8C;AACnE,QAAO,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,IAAI;;AAGvE,SAAS,WAAW,KAA8B,KAAiC;CACjF,MAAM,MAAM,IAAI;AAChB,QAAO,OAAO,QAAQ,YAAY,IAAI,SAAS,IAAI,MAAM,KAAA;;AAG3D,SAAS,WAAW,KAA8B,KAAiC;CACjF,MAAM,MAAM,IAAI;AAChB,QAAO,OAAO,QAAQ,WAAW,MAAM,KAAA;;AAGzC,SAAS,gBAAgB,MAA8F;AACrH,QAAO;EACL,MAAM,WAAW,MAAM,OAAO;EAC9B,KAAK,WAAW,MAAM,MAAM;EAC5B,KAAK,WAAW,MAAM,MAAM;EAC5B,MAAM,WAAW,MAAM,OAAO;EAC/B;;;;;AAMH,SAAgB,sBAAsB,OAA+C;AACnF,KAAI,UAAU,QAAQ,UAAU,KAAA,EAAW,QAAO;AAElD,KAAI,OAAO,UAAU,SACnB,QAAO,EAAE,SAAS,OAAO;AAG3B,KAAI,CAAC,cAAc,MAAM,CACvB,QAAO,EAAE,SAAS,OAAO,MAAM,EAAE;CAQnC,MAAM,SAAiC;EACrC,SANc,WAAW,OAAO,UAAU,IACvC,WAAW,OAAO,aAAa,IAC/B,WAAW,OAAO,gBAAgB,IAClC;EAIH,MAAM,WAAW,OAAO,OAAO;EAC/B,MAAM,WAAW,OAAO,OAAO;EAC/B,KAAK,WAAW,OAAO,MAAM;EAC7B,KAAK,WAAW,OAAO,MAAM;EAC7B,MAAM,WAAW,OAAO,OAAO;EAC/B,QAAQ,WAAW,OAAO,SAAS,IAAI,WAAW,OAAO,aAAa;EACtE,OAAO,WAAW,OAAO,QAAQ;EAClC;CAED,MAAM,EAAE,MAAM,UAAU;AACxB,KAAI,cAAc,KAAK,EAAE;EACvB,MAAM,WAAW,gBAAgB,KAAK;AACtC,MAAI,CAAC,OAAO,KAAM,QAAO,OAAO,SAAS;AACzC,MAAI,CAAC,OAAO,IAAK,QAAO,MAAM,SAAS;AACvC,MAAI,CAAC,OAAO,IAAK,QAAO,MAAM,SAAS;AACvC,MAAI,CAAC,OAAO,KAAM,QAAO,OAAO,SAAS;;AAG3C,KAAI,iBAAiB,MACnB,QAAO,QAAQ,MAAM;UACZ,cAAc,MAAM,IAAI,WAAW,OAAO,UAAU,CAC7D,QAAO,QAAQ,WAAW,OAAO,UAAU;AAG7C,QAAO;;;AAIT,SAAgB,cAAc,MAAsB;AAClD,KAAI,KAAK,WAAW,UAAU,CAC5B,KAAI;AACF,SAAO,mBAAmB,IAAI,IAAI,KAAK,CAAC,SAAS;SAC3C;AACN,SAAO,KAAK,MAAM,EAAiB;;AAGvC,QAAO;;AAGT,SAAS,UAAU,MAAuB;CACxC,MAAM,aAAa,KAAK,QAAQ,OAAO,IAAI;AAC3C,KAAI,aAAa,KAAK,WAAW,CAAE,QAAO;AAC1C,KAAI,WAAW,SAAS,iBAAiB,CAAE,QAAO;AAClD,QAAO;;AAGT,SAAS,kBAAkB,MAAc,KAAqB;CAC5D,MAAM,UAAU,cAAc,KAAK,CAAC,QAAQ,OAAO,IAAI;CACvD,MAAM,UAAU,IAAI,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,GAAG;AAC1D,KAAI,WAAW,QAAQ,WAAW,GAAG,QAAQ,GAAG,EAAE;EAChD,MAAM,MAAM,QAAQ,MAAM,QAAQ,SAAS,EAAE;AAC7C,SAAO,IAAI,WAAW,KAAK,GAAG,IAAI,MAAM,EAAE,GAAG;;CAE/C,MAAM,YAAY,QAAQ,QAAQ,WAAW;AAC7C,KAAI,aAAa,EAAG,QAAO,QAAQ,MAAM,YAAY,EAAE;CACvD,MAAM,SAAS,QAAQ,QAAQ,QAAQ;AACvC,KAAI,UAAU,EAAG,QAAO,QAAQ,MAAM,SAAS,EAAE;AACjD,QAAO;;;;;AAMT,SAAgB,iBAAiB,OAAyC;AACxE,KAAI,CAAC,MAAO,QAAO,EAAE;CAErB,MAAM,QAAQ,MAAM,MAAM,KAAK;CAC/B,MAAM,SAAuB,EAAE;AAE/B,MAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,UAAU,KAAK,MAAM;AAC3B,MAAI,CAAC,QAAQ,WAAW,MAAM,CAAE;EAEhC,MAAM,SAAS,QAAQ,MAAM,kCAAkC;AAC/D,MAAI,QAAQ;GACV,MAAM,GAAG,IAAI,MAAM,SAAS,UAAU;AACtC,UAAO,KAAK;IACV,KAAK;IACL;IACA;IACA,MAAM,OAAO,QAAQ;IACrB,QAAQ,OAAO,OAAO;IACtB,OAAO,UAAU,KAAM;IACxB,CAAC;AACF;;EAGF,MAAM,YAAY,QAAQ,MAAM,wBAAwB;AACxD,MAAI,WAAW;GACb,MAAM,GAAG,MAAM,SAAS,UAAU;AAClC,UAAO,KAAK;IACV,KAAK;IACL;IACA,MAAM,OAAO,QAAQ;IACrB,QAAQ,OAAO,OAAO;IACtB,OAAO,UAAU,KAAM;IACxB,CAAC;AACF;;EAGF,MAAM,UAAU,QAAQ,MAAM,wCAAwC;AACtE,MAAI,SAAS;GACX,MAAM,GAAG,IAAI,MAAM,SAAS,UAAU;AACtC,UAAO,KAAK;IACV,KAAK;IACL,IAAI,SAAS;IACb;IACA,MAAM,OAAO,QAAQ;IACrB,QAAQ,OAAO,OAAO;IACtB,OAAO,UAAU,KAAM;IACxB,CAAC;;;AAIN,QAAO;;AAGT,SAAS,qBAAqB,OAA4B;AACxD,KAAI,MAAM,IAAI;EACZ,MAAM,KAAK,MAAM,GAAG,QAAQ,WAAW,GAAG;AAC1C,MAAI,iBAAiB,KAAK,GAAG,CAAE,QAAO;;AAExC,KAAI,CAAC,MAAM,KAAM,QAAO;CACxB,MAAM,OAAO,cAAc,MAAM,KAAK,CAAC,QAAQ,OAAO,IAAI;AAC1D,KAAI,mBAAmB,KAAK,KAAK,CAAE,QAAO;AAC1C,KAAI,KAAK,SAAS,SAAS,CAAE,QAAO;AACpC,QAAO;;;;;AAMT,SAAgB,iBAAiB,QAA8C;CAC7E,MAAM,YAAY,OAAO,QAAO,MAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,qBAAqB,EAAE,CAAC;AAC7F,KAAI,UAAU,WAAW,EAAG,QAAO,KAAA;CAEnC,MAAM,SAAS,UAAU,KAAK,UAAU;EACtC,MAAM,OAAO,cAAc,MAAM,KAAM,CAAC,QAAQ,OAAO,IAAI;EAC3D,IAAI,QAAQ;AACZ,MAAI,KAAK,SAAS,WAAW,CAAE,UAAS;AACxC,MAAI,oBAAoB,KAAK,KAAK,CAAE,UAAS;AAC7C,MAAI,KAAK,SAAS,QAAQ,CAAE,UAAS;AACrC,MAAI,KAAK,WAAW,KAAK,CAAE,UAAS;AACpC,MAAI,oBAAoB,KAAK,KAAK,CAAE,UAAS;AAC7C,MAAI,KAAK,SAAS,SAAS,CAAE,UAAS;AACtC,MAAI,KAAK,SAAS,mBAAmB,CAAE,UAAS;AAChD,SAAO;GAAE;GAAO;GAAO;GACvB;AAEF,QAAO,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;AACxC,QAAO,OAAO,IAAI,SAAS,UAAU;;;;;AAMvC,SAAgB,gBACd,MACA,MACA,eAAe,GACW;AAC1B,KAAI,CAAC,OAAO,IAAI,WAAW,IAAI,CAAC,cAAe,QAAO;AACtD,QAAO,cAAc,MAAM,MAAM,aAAa;;AAGhD,SAAS,mBAAmB,SAAsC;CAChE,MAAM,QAAQ,OAAO,QAAQ,QAAQ,SAAS,IAAI,QAAQ,EAAE,CAAC;AAC7D,QAAO,QAAQ,KAAK,EAAE,MAAM,SAAS,kBAAkB;EACrD,MAAM,SAAS,cAAc,GAAG,OAAO,IAAI,GAAG,OAAO,UAAU,GAAG,OAAO,IAAI,GAAG,OAAO;EACvF,MAAM,WAAW,cAAc,OAAO,MAAM,OAAO;EACnD,MAAM,UAAU,QAAQ,SAAS,MAAM,GAAG,QAAQ,MAAM,GAAG,IAAI,CAAC,KAAK;AACrE,SAAO,GAAG,OAAO,GAAG,WAAW,OAAO,KAAK,CAAC,SAAS,OAAO,IAAI,GAAG,OAAO,MAAM,GAAG,OAAO,IAAI,GAAG,OAAO,MAAM,GAAG,OAAO,MAAM,UAAU,OAAO;GAC/I;;AAGJ,SAAS,oBAAoB,OAAmB,KAAqB;CACnE,MAAM,OAAO,MAAM,OAAO,kBAAkB,MAAM,MAAM,IAAI,GAAG;CAC/D,MAAM,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,MAAM,SAAS;AACnD,QAAO,MAAM,KAAK,MAAM,MAAM,GAAG,IAAI,IAAI,KAAK,MAAM;;AAGtD,SAAS,qBAAqB,OAAmB,KAAqB;CACpE,MAAM,OAAO,MAAM,OAAO,kBAAkB,MAAM,MAAM,IAAI,GAAG;CAC/D,MAAM,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,MAAM,SAAS;CACnD,MAAM,SAAS,MAAM,IAAI,WAAW,QAAQ,GAAG,cAAc;CAC7D,MAAM,KAAK,MAAM,IAAI,QAAQ,WAAW,GAAG,IAAI;AAC/C,KAAI,MAAM,MAAM,MAAM,OAAO,IAC3B,QAAO,GAAG,SAAS,GAAG,IAAI,IAAI;AAEhC,QAAO,GAAG,SAAS;;AAGrB,MAAM,sBAAsB;AAC5B,MAAM,wBAAwB;;AAG9B,SAAS,mBAAmB,OAAe,MAAc,YAA8B;CACrF,MAAM,SAAS,GAAG,aAAa,MAAM,GAAG,OAAO,MAAM;CACrD,MAAM,QAAkB,EAAE;CAC1B,IAAI,YAAY,KAAK,MAAM;CAC3B,IAAI,QAAQ;AAEZ,QAAO,UAAU,SAAS,GAAG;EAC3B,MAAM,SAAS,QACX,KAAK,IAAI,IAAI,sBAAsB,OAAO,OAAO,GACjD,KAAK,IAAI,IAAI,sBAAsB,EAA6B;AACpE,MAAI,UAAU,UAAU,QAAQ;AAC9B,SAAM,KAAK,QAAQ,GAAG,SAAS,cAAc,GAAG,wBAAwB,YAAY;AACpF;;EAEF,IAAI,QAAQ,UAAU,YAAY,KAAK,OAAO;AAC9C,MAAI,SAAS,EAAG,SAAQ;EACxB,MAAM,QAAQ,UAAU,MAAM,GAAG,MAAM,CAAC,SAAS;AACjD,QAAM,KAAK,QAAQ,GAAG,SAAS,UAAU,GAAG,wBAAwB,QAAQ;AAC5E,cAAY,UAAU,MAAM,MAAM,CAAC,WAAW;AAC9C,UAAQ;;AAGV,QAAO;;;;;AAMT,SAAgB,kBACd,OACA,UAA8B,EAAE,EACR;CACxB,MAAM,aAAa,sBAAsB,MAAM;AAC/C,KAAI,CAAC,WAAY,QAAO,EAAE;CAE1B,MAAM,MAAM,QAAQ,QAAQ,OAAO,YAAY,eAAe,OAAO,QAAQ,QAAQ,aAAa,QAAQ,KAAK,GAAG;CAClH,MAAM,UAAU,QAAQ,WAAW,OAAO;CAE1C,MAAM,gBADS,QAAQ,UAAU,YACD;CAChC,MAAM,aAAa,CAAC,gBAAgB,CAAC,WAAW,KAAK,QAAQ,WAAW,OAAO;CAC/E,MAAM,aAAa,eACf,IACC,QAAQ,eAAe,UAAU,IAAI;CAC1C,MAAM,sBAAsB,UAAU,IAAI;CAE1C,MAAM,WAAqB,EAAE;CAC7B,MAAM,SAAS,eAAe,EAAE,GAAG,iBAAiB,WAAW,MAAM;CACrE,MAAM,UAAU,eAAe,KAAA,IAAY,iBAAiB,OAAO;AAEnE,KAAI,CAAC,gBAAgB,SAAS,QAAQ,QAAQ,MAAM;AAClD,iBAAe,SAAS;AACxB,MAAI,YAAY;GACd,MAAM,UAAU,gBAAgB,QAAQ,MAAM,QAAQ,MAAM,oBAAoB;AAChF,YAAS,KAAK,GAAG,OAAO,IAAI,KAAK,oBAAoB,SAAS,IAAI,GAAG,OAAO,QAAQ;AACpF,OAAI,QACF,UAAS,KAAK,GAAG,mBAAmB,QAAQ,CAAC;QAG/C,UAAS,KAAK,GAAG,OAAO,IAAI,KAAK,oBAAoB,SAAS,IAAI,GAAG,OAAO,QAAQ;;AAIxF,KAAI,WAAW,KACb,UAAS,KAAK,GAAG,OAAO,IAAI,OAAO,OAAO,MAAM,GAAG,WAAW,OAAO;AAIvE,KADoB,QAAQ,WAAW,OAAO,WAAW,OAAO,WAAW,KAC5D,CACb,gBAAe,SAAS;AAG1B,KAAI,WAAW,IACb,UAAS,KAAK,GAAG,mBAAmB,OAAO,WAAW,KAAK,OAAO,OAAO,CAAC;AAE5E,KAAI,WAAW,IACb,UAAS,KAAK,GAAG,mBAAmB,OAAO,WAAW,KAAK,OAAO,KAAK,CAAC;AAE1E,KAAI,WAAW,KACb,UAAS,KAAK,GAAG,OAAO,IAAI,OAAO,OAAO,MAAM,GAAG,WAAW,OAAO;AAGvE,KAAI,WAAW,SAAS,WAAW,UAAU,WAAW,QACtD,UAAS,KAAK,GAAG,OAAO,IAAI,YAAY,OAAO,MAAM,GAAG,WAAW,QAAQ;CAG7E,MAAM,cAAc,eAAe,IAAI,OAAO,QAAO,MAAK,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC,CAAC;CAC/F,MAAM,aAAa,aAAa,IAC5B,OAAO,QAAO,MAAK,MAAM,WAAW,CAAC,qBAAqB,EAAE,CAAC,CAAC,MAAM,GAAG,WAAW,GAClF,EAAE;AAEN,KAAI,CAAC,iBAAiB,cAAc,KAAK,WAAW,SAAS,IAAI;AAC/D,iBAAe,SAAS;AACxB,MAAI,cAAc,EAChB,UAAS,KAAK,GAAG,OAAO,KAAK,SAAS,YAAY,QAAQ,gBAAgB,IAAI,KAAK,IAAI,0BAA0B,OAAO,QAAQ;MAEhI,UAAS,KAAK,GAAG,OAAO,KAAK,OAAO,OAAO,QAAQ;AAErD,OAAK,MAAM,SAAS,WAClB,UAAS,KAAK,GAAG,OAAO,KAAK,IAAI,qBAAqB,OAAO,IAAI,GAAG,OAAO,QAAQ;;AAIvF,QAAO,CACL;EACE,KAAK;EACL,OAAO,GAAG,OAAO,MAAM,OAAO,OAAO,WAAW,UAAU,OAAO;EACjE,UAAU,SAAS,SAAS,IAAI,WAAW,KAAA;EAC5C,CACF"}
|