[{"data":1,"prerenderedAt":2154},["ShallowReactive",2],{"navigation_docs":3,"-learn-typed-fields":515,"-learn-typed-fields-surround":2149},[4,30,80,123,298,430,485],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"CLI","\u002Fcli","3.cli",[85,88,93,98,103,108,113,118],{"title":36,"path":86,"stem":87,"icon":44},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":89,"path":90,"stem":91,"icon":92},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":94,"path":95,"stem":96,"icon":97},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":99,"path":100,"stem":101,"icon":102},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":104,"path":105,"stem":106,"icon":107},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":109,"path":110,"stem":111,"icon":112},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":114,"path":115,"stem":116,"icon":117},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":119,"path":120,"stem":121,"icon":122},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":124,"path":125,"stem":126,"children":127,"page":29},"Integrate","\u002Fintegrate","4.integrate",[128,132,210],{"title":36,"path":129,"stem":130,"icon":131},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":133,"path":134,"stem":135,"children":136,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[137,140,180,190],{"title":36,"path":138,"stem":139,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":141,"path":142,"stem":143,"children":144,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[145,150,155,160,165,170,175],{"title":146,"path":147,"stem":148,"icon":149},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":151,"path":152,"stem":153,"icon":154},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","4.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":156,"path":157,"stem":158,"icon":159},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":161,"path":162,"stem":163,"icon":164},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":166,"path":167,"stem":168,"icon":169},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":171,"path":172,"stem":173,"icon":174},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":176,"path":177,"stem":178,"icon":179},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","4.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":181,"path":182,"stem":183,"children":184,"page":29},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[185],{"title":186,"path":187,"stem":188,"icon":189},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":191,"path":192,"stem":193,"children":194,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[195,200,205],{"title":196,"path":197,"stem":198,"icon":199},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":201,"path":202,"stem":203,"icon":204},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":206,"path":207,"stem":208,"icon":209},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":211,"path":212,"stem":213,"children":214,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[215,219,224,229,234,239,244,249,254,259,264,269,274,279,283,288,293],{"title":36,"path":216,"stem":217,"icon":218},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":220,"path":221,"stem":222,"icon":223},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":225,"path":226,"stem":227,"icon":228},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":230,"path":231,"stem":232,"icon":233},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":235,"path":236,"stem":237,"icon":238},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":240,"path":241,"stem":242,"icon":243},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":245,"path":246,"stem":247,"icon":248},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":250,"path":251,"stem":252,"icon":253},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":255,"path":256,"stem":257,"icon":258},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":260,"path":261,"stem":262,"icon":263},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":265,"path":266,"stem":267,"icon":268},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":270,"path":271,"stem":272,"icon":273},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":275,"path":276,"stem":277,"icon":278},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":280,"path":281,"stem":282,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":284,"path":285,"stem":286,"icon":287},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":289,"path":290,"stem":291,"icon":292},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":294,"path":295,"stem":296,"icon":297},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":299,"path":300,"stem":301,"children":302,"page":29},"Use Cases","\u002Fuse-cases","5.use-cases",[303,306,311,340,367,399,420,425],{"title":36,"path":304,"stem":305,"icon":102},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":307,"path":308,"stem":309,"icon":310},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":312,"icon":313,"path":314,"stem":315,"children":316,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[317,320,325,330,335],{"title":36,"path":318,"stem":319,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":321,"path":322,"stem":323,"icon":324},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":326,"path":327,"stem":328,"icon":329},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":331,"path":332,"stem":333,"icon":334},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":336,"path":337,"stem":338,"icon":339},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":341,"icon":342,"path":343,"stem":344,"children":345,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[346,349,354,359,363],{"title":36,"path":347,"stem":348,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":350,"path":351,"stem":352,"icon":353},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":355,"path":356,"stem":357,"icon":358},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":360,"path":361,"stem":362,"icon":310},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":364,"path":365,"stem":366,"icon":107},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":368,"icon":369,"path":370,"stem":371,"children":372,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[373,376,381,386,391,395],{"title":36,"path":374,"stem":375,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":377,"path":378,"stem":379,"icon":380},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":382,"path":383,"stem":384,"icon":385},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":387,"path":388,"stem":389,"icon":390},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":392,"path":393,"stem":394,"icon":369},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":396,"path":397,"stem":398,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":336,"icon":107,"path":400,"stem":401,"children":402,"page":29},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[403,406,411,416],{"title":36,"path":404,"stem":405,"icon":39},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":407,"path":408,"stem":409,"icon":410},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":412,"path":413,"stem":414,"icon":415},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":417,"path":418,"stem":419,"icon":79},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":421,"path":422,"stem":423,"icon":424},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":426,"path":427,"stem":428,"icon":429},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":431,"path":432,"stem":433,"children":434,"page":29},"Extend","\u002Fextend","6.extend",[435,439,444,449,454,458,462,466,470,475,480],{"title":36,"path":436,"stem":437,"icon":438},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":440,"path":441,"stem":442,"icon":443},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":445,"path":446,"stem":447,"icon":448},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":450,"path":451,"stem":452,"icon":453},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":396,"path":455,"stem":456,"icon":457},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":459,"path":460,"stem":461,"icon":438},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":463,"path":464,"stem":465,"icon":424},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":467,"path":468,"stem":469,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":471,"path":472,"stem":473,"icon":474},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":476,"path":477,"stem":478,"icon":479},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":481,"path":482,"stem":483,"icon":484},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":417,"path":486,"stem":487,"children":488,"page":29},"\u002Freference","7.reference",[489,494,497,502,506,511],{"title":490,"path":491,"stem":492,"icon":493},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":364,"path":495,"stem":496,"icon":107},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":498,"path":499,"stem":500,"icon":501},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":503,"path":504,"stem":505,"icon":369},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":507,"path":508,"stem":509,"icon":510},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":512,"path":513,"stem":514,"icon":424},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"id":516,"title":71,"body":517,"description":2138,"extension":2139,"links":2140,"meta":2145,"navigation":2146,"path":72,"seo":2147,"stem":73,"__hash__":2148},"docs\u002F2.learn\u002F7.typed-fields.md",{"type":518,"value":519,"toc":2126},"minimark",[520,541,544,549,555,1018,1021,1025,1040,1104,1113,1117,1123,1193,1196,1200,1215,1348,1351,1355,1365,1661,1665,1670,1673,1851,1957,1961,1964,2094,2098,2122],[521,522,523,524,528,529,532,533,536,537,540],"p",{},"By default, ",[525,526,527],"code",{},"useLogger"," accepts any fields, which is great for getting started. But as your codebase grows, inconsistencies creep in: one route logs ",[525,530,531],{},"user",", another logs ",[525,534,535],{},"account",", a third logs ",[525,538,539],{},"userId",". Typed fields solve this with opt-in compile-time safety.",[542,543],"typed-fields-intellisense",{},[545,546,548],"h2",{"id":547},"basic-usage","Basic Usage",[521,550,551,552,554],{},"Define an interface for your fields and pass it as a generic to ",[525,553,527],{},":",[556,557,563],"pre",{"className":558,"code":559,"filename":560,"language":561,"meta":562,"style":562},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { useLogger } from 'evlog'\n\ninterface CheckoutFields {\n  user: { id: string; plan: string }\n  cart: { items: number; total: number }\n  action: string\n}\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger\u003CCheckoutFields>(event)\n\n  log.set({ user: { id: '123', plan: 'pro' } })  \u002F\u002F OK\n  log.set({ cart: { items: 3, total: 9999 } })    \u002F\u002F OK\n  log.set({ action: 'checkout' })                  \u002F\u002F OK\n\n  log.set({ account: '...' })                      \u002F\u002F TS error\n  log.set({ usr: { id: '123' } })                  \u002F\u002F TS error\n\n  return { success: true }\n})\n","server\u002Fapi\u002Fcheckout.post.ts","typescript","",[525,564,565,598,605,619,651,680,691,697,702,736,766,771,832,878,910,915,948,986,991,1010],{"__ignoreMap":562},[566,567,570,574,578,582,585,588,591,595],"span",{"class":568,"line":569},"line",1,[566,571,573],{"class":572},"s7zQu","import",[566,575,577],{"class":576},"sMK4o"," {",[566,579,581],{"class":580},"sTEyZ"," useLogger",[566,583,584],{"class":576}," }",[566,586,587],{"class":572}," from",[566,589,590],{"class":576}," '",[566,592,594],{"class":593},"sfazB","evlog",[566,596,597],{"class":576},"'\n",[566,599,601],{"class":568,"line":600},2,[566,602,604],{"emptyLinePlaceholder":603},true,"\n",[566,606,608,612,616],{"class":568,"line":607},3,[566,609,611],{"class":610},"spNyl","interface",[566,613,615],{"class":614},"sBMFI"," CheckoutFields",[566,617,618],{"class":576}," {\n",[566,620,622,626,628,630,633,635,638,641,644,646,648],{"class":568,"line":621},4,[566,623,625],{"class":624},"swJcz","  user",[566,627,554],{"class":576},[566,629,577],{"class":576},[566,631,632],{"class":624}," id",[566,634,554],{"class":576},[566,636,637],{"class":614}," string",[566,639,640],{"class":576},";",[566,642,643],{"class":624}," plan",[566,645,554],{"class":576},[566,647,637],{"class":614},[566,649,650],{"class":576}," }\n",[566,652,654,657,659,661,664,666,669,671,674,676,678],{"class":568,"line":653},5,[566,655,656],{"class":624},"  cart",[566,658,554],{"class":576},[566,660,577],{"class":576},[566,662,663],{"class":624}," items",[566,665,554],{"class":576},[566,667,668],{"class":614}," number",[566,670,640],{"class":576},[566,672,673],{"class":624}," total",[566,675,554],{"class":576},[566,677,668],{"class":614},[566,679,650],{"class":576},[566,681,683,686,688],{"class":568,"line":682},6,[566,684,685],{"class":624},"  action",[566,687,554],{"class":576},[566,689,690],{"class":614}," string\n",[566,692,694],{"class":568,"line":693},7,[566,695,696],{"class":576},"}\n",[566,698,700],{"class":568,"line":699},8,[566,701,604],{"emptyLinePlaceholder":603},[566,703,705,708,711,715,718,721,724,728,731,734],{"class":568,"line":704},9,[566,706,707],{"class":572},"export",[566,709,710],{"class":572}," default",[566,712,714],{"class":713},"s2Zo4"," defineEventHandler",[566,716,717],{"class":580},"(",[566,719,720],{"class":610},"async",[566,722,723],{"class":576}," (",[566,725,727],{"class":726},"sHdIc","event",[566,729,730],{"class":576},")",[566,732,733],{"class":610}," =>",[566,735,618],{"class":576},[566,737,739,742,745,748,750,753,756,759,761,763],{"class":568,"line":738},10,[566,740,741],{"class":610},"  const",[566,743,744],{"class":580}," log",[566,746,747],{"class":576}," =",[566,749,581],{"class":713},[566,751,752],{"class":576},"\u003C",[566,754,755],{"class":614},"CheckoutFields",[566,757,758],{"class":576},">",[566,760,717],{"class":624},[566,762,727],{"class":580},[566,764,765],{"class":624},")\n",[566,767,769],{"class":568,"line":768},11,[566,770,604],{"emptyLinePlaceholder":603},[566,772,774,777,780,783,785,788,791,793,795,797,799,801,804,807,810,812,814,816,819,821,823,825,828],{"class":568,"line":773},12,[566,775,776],{"class":580},"  log",[566,778,779],{"class":576},".",[566,781,782],{"class":713},"set",[566,784,717],{"class":624},[566,786,787],{"class":576},"{",[566,789,790],{"class":624}," user",[566,792,554],{"class":576},[566,794,577],{"class":576},[566,796,632],{"class":624},[566,798,554],{"class":576},[566,800,590],{"class":576},[566,802,803],{"class":593},"123",[566,805,806],{"class":576},"'",[566,808,809],{"class":576},",",[566,811,643],{"class":624},[566,813,554],{"class":576},[566,815,590],{"class":576},[566,817,818],{"class":593},"pro",[566,820,806],{"class":576},[566,822,584],{"class":576},[566,824,584],{"class":576},[566,826,827],{"class":624},")  ",[566,829,831],{"class":830},"sHwdD","\u002F\u002F OK\n",[566,833,835,837,839,841,843,845,848,850,852,854,856,860,862,864,866,869,871,873,876],{"class":568,"line":834},13,[566,836,776],{"class":580},[566,838,779],{"class":576},[566,840,782],{"class":713},[566,842,717],{"class":624},[566,844,787],{"class":576},[566,846,847],{"class":624}," cart",[566,849,554],{"class":576},[566,851,577],{"class":576},[566,853,663],{"class":624},[566,855,554],{"class":576},[566,857,859],{"class":858},"sbssI"," 3",[566,861,809],{"class":576},[566,863,673],{"class":624},[566,865,554],{"class":576},[566,867,868],{"class":858}," 9999",[566,870,584],{"class":576},[566,872,584],{"class":576},[566,874,875],{"class":624},")    ",[566,877,831],{"class":830},[566,879,881,883,885,887,889,891,894,896,898,901,903,905,908],{"class":568,"line":880},14,[566,882,776],{"class":580},[566,884,779],{"class":576},[566,886,782],{"class":713},[566,888,717],{"class":624},[566,890,787],{"class":576},[566,892,893],{"class":624}," action",[566,895,554],{"class":576},[566,897,590],{"class":576},[566,899,900],{"class":593},"checkout",[566,902,806],{"class":576},[566,904,584],{"class":576},[566,906,907],{"class":624},")                  ",[566,909,831],{"class":830},[566,911,913],{"class":568,"line":912},15,[566,914,604],{"emptyLinePlaceholder":603},[566,916,918,920,922,924,926,928,931,933,935,938,940,942,945],{"class":568,"line":917},16,[566,919,776],{"class":580},[566,921,779],{"class":576},[566,923,782],{"class":713},[566,925,717],{"class":624},[566,927,787],{"class":576},[566,929,930],{"class":624}," account",[566,932,554],{"class":576},[566,934,590],{"class":576},[566,936,937],{"class":593},"...",[566,939,806],{"class":576},[566,941,584],{"class":576},[566,943,944],{"class":624},")                      ",[566,946,947],{"class":830},"\u002F\u002F TS error\n",[566,949,951,953,955,957,959,961,964,966,968,970,972,974,976,978,980,982,984],{"class":568,"line":950},17,[566,952,776],{"class":580},[566,954,779],{"class":576},[566,956,782],{"class":713},[566,958,717],{"class":624},[566,960,787],{"class":576},[566,962,963],{"class":624}," usr",[566,965,554],{"class":576},[566,967,577],{"class":576},[566,969,632],{"class":624},[566,971,554],{"class":576},[566,973,590],{"class":576},[566,975,803],{"class":593},[566,977,806],{"class":576},[566,979,584],{"class":576},[566,981,584],{"class":576},[566,983,907],{"class":624},[566,985,947],{"class":830},[566,987,989],{"class":568,"line":988},18,[566,990,604],{"emptyLinePlaceholder":603},[566,992,994,997,999,1002,1004,1008],{"class":568,"line":993},19,[566,995,996],{"class":572},"  return",[566,998,577],{"class":576},[566,1000,1001],{"class":624}," success",[566,1003,554],{"class":576},[566,1005,1007],{"class":1006},"sfNiH"," true",[566,1009,650],{"class":576},[566,1011,1013,1016],{"class":568,"line":1012},20,[566,1014,1015],{"class":576},"}",[566,1017,765],{"class":580},[521,1019,1020],{},"TypeScript catches typos and unknown fields at compile time, before they reach production.",[545,1022,1024],{"id":1023},"internal-fields","Internal Fields",[521,1026,1027,1028,1031,1032,1035,1036,1039],{},"evlog sets some fields internally (",[525,1029,1030],{},"status",", ",[525,1033,1034],{},"service","). These are always accepted regardless of your type, through the ",[525,1037,1038],{},"InternalFields"," type:",[556,1041,1043],{"className":558,"code":1042,"filename":560,"language":561,"meta":562,"style":562},"log.set({ status: 200 })    \u002F\u002F OK - internal field\nlog.set({ service: 'api' }) \u002F\u002F OK - internal field\n",[525,1044,1045,1073],{"__ignoreMap":562},[566,1046,1047,1050,1052,1054,1056,1058,1061,1063,1066,1068,1070],{"class":568,"line":569},[566,1048,1049],{"class":580},"log",[566,1051,779],{"class":576},[566,1053,782],{"class":713},[566,1055,717],{"class":580},[566,1057,787],{"class":576},[566,1059,1060],{"class":624}," status",[566,1062,554],{"class":576},[566,1064,1065],{"class":858}," 200",[566,1067,584],{"class":576},[566,1069,875],{"class":580},[566,1071,1072],{"class":830},"\u002F\u002F OK - internal field\n",[566,1074,1075,1077,1079,1081,1083,1085,1088,1090,1092,1095,1097,1099,1102],{"class":568,"line":600},[566,1076,1049],{"class":580},[566,1078,779],{"class":576},[566,1080,782],{"class":713},[566,1082,717],{"class":580},[566,1084,787],{"class":576},[566,1086,1087],{"class":624}," service",[566,1089,554],{"class":576},[566,1091,590],{"class":576},[566,1093,1094],{"class":593},"api",[566,1096,806],{"class":576},[566,1098,584],{"class":576},[566,1100,1101],{"class":580},") ",[566,1103,1072],{"class":830},[521,1105,1106,1107,1109,1110,1112],{},"You don't need to include ",[525,1108,1030],{}," or ",[525,1111,1034],{}," in your interface.",[545,1114,1116],{"id":1115},"untyped-usage","Untyped Usage",[521,1118,1119,1120,1122],{},"Without a generic, ",[525,1121,527],{}," accepts any fields as usual:",[556,1124,1127],{"className":558,"code":1125,"filename":1126,"language":561,"meta":562,"style":562},"const log = useLogger(event)\nlog.set({ anything: true, nested: { deep: 'value' } }) \u002F\u002F OK\n","server\u002Fapi\u002Fexample.ts",[525,1128,1129,1145],{"__ignoreMap":562},[566,1130,1131,1134,1137,1140,1142],{"class":568,"line":569},[566,1132,1133],{"class":610},"const",[566,1135,1136],{"class":580}," log ",[566,1138,1139],{"class":576},"=",[566,1141,581],{"class":713},[566,1143,1144],{"class":580},"(event)\n",[566,1146,1147,1149,1151,1153,1155,1157,1160,1162,1164,1166,1169,1171,1173,1176,1178,1180,1183,1185,1187,1189,1191],{"class":568,"line":600},[566,1148,1049],{"class":580},[566,1150,779],{"class":576},[566,1152,782],{"class":713},[566,1154,717],{"class":580},[566,1156,787],{"class":576},[566,1158,1159],{"class":624}," anything",[566,1161,554],{"class":576},[566,1163,1007],{"class":1006},[566,1165,809],{"class":576},[566,1167,1168],{"class":624}," nested",[566,1170,554],{"class":576},[566,1172,577],{"class":576},[566,1174,1175],{"class":624}," deep",[566,1177,554],{"class":576},[566,1179,590],{"class":576},[566,1181,1182],{"class":593},"value",[566,1184,806],{"class":576},[566,1186,584],{"class":576},[566,1188,584],{"class":576},[566,1190,1101],{"class":580},[566,1192,831],{"class":830},[521,1194,1195],{},"Typed fields are fully opt-in.",[545,1197,1199],{"id":1198},"nuxt-auto-import","Nuxt Auto-Import",[1201,1202,1205,1206,1209,1210,1214],"callout",{"color":1203,"icon":1204},"warning","i-lucide-triangle-alert","When using typed fields with ",[525,1207,1208],{},"useLogger\u003CT>",", you ",[1211,1212,1213],"strong",{},"must"," use an explicit import. The Nuxt auto-import does not support excess property checking for generics due to a TypeScript limitation.",[556,1216,1218],{"className":558,"code":1217,"filename":560,"language":561,"meta":562,"style":562},"\u002F\u002F Works - explicit import preserves type checking\nimport { useLogger } from 'evlog'\nconst log = useLogger\u003CMyFields>(event)\nlog.set({ typo: 'oops' }) \u002F\u002F TS error\n\n\u002F\u002F Does NOT work - auto-import loses excess property checking\nconst log = useLogger\u003CMyFields>(event)\nlog.set({ typo: 'oops' }) \u002F\u002F No error (silently accepted)\n",[525,1219,1220,1225,1243,1262,1292,1296,1301,1319],{"__ignoreMap":562},[566,1221,1222],{"class":568,"line":569},[566,1223,1224],{"class":830},"\u002F\u002F Works - explicit import preserves type checking\n",[566,1226,1227,1229,1231,1233,1235,1237,1239,1241],{"class":568,"line":600},[566,1228,573],{"class":572},[566,1230,577],{"class":576},[566,1232,581],{"class":580},[566,1234,584],{"class":576},[566,1236,587],{"class":572},[566,1238,590],{"class":576},[566,1240,594],{"class":593},[566,1242,597],{"class":576},[566,1244,1245,1247,1249,1251,1253,1255,1258,1260],{"class":568,"line":607},[566,1246,1133],{"class":610},[566,1248,1136],{"class":580},[566,1250,1139],{"class":576},[566,1252,581],{"class":713},[566,1254,752],{"class":576},[566,1256,1257],{"class":614},"MyFields",[566,1259,758],{"class":576},[566,1261,1144],{"class":580},[566,1263,1264,1266,1268,1270,1272,1274,1277,1279,1281,1284,1286,1288,1290],{"class":568,"line":621},[566,1265,1049],{"class":580},[566,1267,779],{"class":576},[566,1269,782],{"class":713},[566,1271,717],{"class":580},[566,1273,787],{"class":576},[566,1275,1276],{"class":624}," typo",[566,1278,554],{"class":576},[566,1280,590],{"class":576},[566,1282,1283],{"class":593},"oops",[566,1285,806],{"class":576},[566,1287,584],{"class":576},[566,1289,1101],{"class":580},[566,1291,947],{"class":830},[566,1293,1294],{"class":568,"line":653},[566,1295,604],{"emptyLinePlaceholder":603},[566,1297,1298],{"class":568,"line":682},[566,1299,1300],{"class":830},"\u002F\u002F Does NOT work - auto-import loses excess property checking\n",[566,1302,1303,1305,1307,1309,1311,1313,1315,1317],{"class":568,"line":693},[566,1304,1133],{"class":610},[566,1306,1136],{"class":580},[566,1308,1139],{"class":576},[566,1310,581],{"class":713},[566,1312,752],{"class":576},[566,1314,1257],{"class":614},[566,1316,758],{"class":576},[566,1318,1144],{"class":580},[566,1320,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345],{"class":568,"line":699},[566,1322,1049],{"class":580},[566,1324,779],{"class":576},[566,1326,782],{"class":713},[566,1328,717],{"class":580},[566,1330,787],{"class":576},[566,1332,1276],{"class":624},[566,1334,554],{"class":576},[566,1336,590],{"class":576},[566,1338,1283],{"class":593},[566,1340,806],{"class":576},[566,1342,584],{"class":576},[566,1344,1101],{"class":580},[566,1346,1347],{"class":830},"\u002F\u002F No error (silently accepted)\n",[521,1349,1350],{},"The auto-import works perfectly for untyped usage. Only add the explicit import when you need typed fields.",[545,1352,1354],{"id":1353},"outside-nuxt","Outside Nuxt",[521,1356,1357,1358,1361,1362,554],{},"The same generic works with ",[525,1359,1360],{},"createRequestLogger"," and ",[525,1363,1364],{},"createWorkersLogger",[1366,1367,1368,1560],"code-group",{},[556,1369,1371],{"className":558,"code":1370,"filename":280,"language":561,"meta":562,"style":562},"import { createRequestLogger } from 'evlog'\n\ninterface MyFields {\n  action: string\n  userId: string\n}\n\nconst log = createRequestLogger\u003CMyFields>({\n  method: 'POST',\n  path: '\u002Fcheckout',\n})\n\nlog.set({ action: 'checkout', userId: '123' }) \u002F\u002F OK\nlog.set({ unknown: true })                      \u002F\u002F TS error\n",[525,1372,1373,1392,1396,1405,1413,1422,1426,1430,1451,1468,1484,1490,1494,1535],{"__ignoreMap":562},[566,1374,1375,1377,1379,1382,1384,1386,1388,1390],{"class":568,"line":569},[566,1376,573],{"class":572},[566,1378,577],{"class":576},[566,1380,1381],{"class":580}," createRequestLogger",[566,1383,584],{"class":576},[566,1385,587],{"class":572},[566,1387,590],{"class":576},[566,1389,594],{"class":593},[566,1391,597],{"class":576},[566,1393,1394],{"class":568,"line":600},[566,1395,604],{"emptyLinePlaceholder":603},[566,1397,1398,1400,1403],{"class":568,"line":607},[566,1399,611],{"class":610},[566,1401,1402],{"class":614}," MyFields",[566,1404,618],{"class":576},[566,1406,1407,1409,1411],{"class":568,"line":621},[566,1408,685],{"class":624},[566,1410,554],{"class":576},[566,1412,690],{"class":614},[566,1414,1415,1418,1420],{"class":568,"line":653},[566,1416,1417],{"class":624},"  userId",[566,1419,554],{"class":576},[566,1421,690],{"class":614},[566,1423,1424],{"class":568,"line":682},[566,1425,696],{"class":576},[566,1427,1428],{"class":568,"line":693},[566,1429,604],{"emptyLinePlaceholder":603},[566,1431,1432,1434,1436,1438,1440,1442,1444,1446,1448],{"class":568,"line":699},[566,1433,1133],{"class":610},[566,1435,1136],{"class":580},[566,1437,1139],{"class":576},[566,1439,1381],{"class":713},[566,1441,752],{"class":576},[566,1443,1257],{"class":614},[566,1445,758],{"class":576},[566,1447,717],{"class":580},[566,1449,1450],{"class":576},"{\n",[566,1452,1453,1456,1458,1460,1463,1465],{"class":568,"line":704},[566,1454,1455],{"class":624},"  method",[566,1457,554],{"class":576},[566,1459,590],{"class":576},[566,1461,1462],{"class":593},"POST",[566,1464,806],{"class":576},[566,1466,1467],{"class":576},",\n",[566,1469,1470,1473,1475,1477,1480,1482],{"class":568,"line":738},[566,1471,1472],{"class":624},"  path",[566,1474,554],{"class":576},[566,1476,590],{"class":576},[566,1478,1479],{"class":593},"\u002Fcheckout",[566,1481,806],{"class":576},[566,1483,1467],{"class":576},[566,1485,1486,1488],{"class":568,"line":768},[566,1487,1015],{"class":576},[566,1489,765],{"class":580},[566,1491,1492],{"class":568,"line":773},[566,1493,604],{"emptyLinePlaceholder":603},[566,1495,1496,1498,1500,1502,1504,1506,1508,1510,1512,1514,1516,1518,1521,1523,1525,1527,1529,1531,1533],{"class":568,"line":834},[566,1497,1049],{"class":580},[566,1499,779],{"class":576},[566,1501,782],{"class":713},[566,1503,717],{"class":580},[566,1505,787],{"class":576},[566,1507,893],{"class":624},[566,1509,554],{"class":576},[566,1511,590],{"class":576},[566,1513,900],{"class":593},[566,1515,806],{"class":576},[566,1517,809],{"class":576},[566,1519,1520],{"class":624}," userId",[566,1522,554],{"class":576},[566,1524,590],{"class":576},[566,1526,803],{"class":593},[566,1528,806],{"class":576},[566,1530,584],{"class":576},[566,1532,1101],{"class":580},[566,1534,831],{"class":830},[566,1536,1537,1539,1541,1543,1545,1547,1550,1552,1554,1556,1558],{"class":568,"line":880},[566,1538,1049],{"class":580},[566,1540,779],{"class":576},[566,1542,782],{"class":713},[566,1544,717],{"class":580},[566,1546,787],{"class":576},[566,1548,1549],{"class":624}," unknown",[566,1551,554],{"class":576},[566,1553,1007],{"class":1006},[566,1555,584],{"class":576},[566,1557,944],{"class":580},[566,1559,947],{"class":830},[556,1561,1563],{"className":558,"code":1562,"filename":275,"language":561,"meta":562,"style":562},"import { createWorkersLogger } from 'evlog\u002Fworkers'\n\ninterface MyFields {\n  action: string\n}\n\nconst log = createWorkersLogger\u003CMyFields>(request)\nlog.set({ action: 'process' }) \u002F\u002F OK\n",[525,1564,1565,1585,1589,1597,1605,1609,1613,1632],{"__ignoreMap":562},[566,1566,1567,1569,1571,1574,1576,1578,1580,1583],{"class":568,"line":569},[566,1568,573],{"class":572},[566,1570,577],{"class":576},[566,1572,1573],{"class":580}," createWorkersLogger",[566,1575,584],{"class":576},[566,1577,587],{"class":572},[566,1579,590],{"class":576},[566,1581,1582],{"class":593},"evlog\u002Fworkers",[566,1584,597],{"class":576},[566,1586,1587],{"class":568,"line":600},[566,1588,604],{"emptyLinePlaceholder":603},[566,1590,1591,1593,1595],{"class":568,"line":607},[566,1592,611],{"class":610},[566,1594,1402],{"class":614},[566,1596,618],{"class":576},[566,1598,1599,1601,1603],{"class":568,"line":621},[566,1600,685],{"class":624},[566,1602,554],{"class":576},[566,1604,690],{"class":614},[566,1606,1607],{"class":568,"line":653},[566,1608,696],{"class":576},[566,1610,1611],{"class":568,"line":682},[566,1612,604],{"emptyLinePlaceholder":603},[566,1614,1615,1617,1619,1621,1623,1625,1627,1629],{"class":568,"line":693},[566,1616,1133],{"class":610},[566,1618,1136],{"class":580},[566,1620,1139],{"class":576},[566,1622,1573],{"class":713},[566,1624,752],{"class":576},[566,1626,1257],{"class":614},[566,1628,758],{"class":576},[566,1630,1631],{"class":580},"(request)\n",[566,1633,1634,1636,1638,1640,1642,1644,1646,1648,1650,1653,1655,1657,1659],{"class":568,"line":699},[566,1635,1049],{"class":580},[566,1637,779],{"class":576},[566,1639,782],{"class":713},[566,1641,717],{"class":580},[566,1643,787],{"class":576},[566,1645,893],{"class":624},[566,1647,554],{"class":576},[566,1649,590],{"class":576},[566,1651,1652],{"class":593},"process",[566,1654,806],{"class":576},[566,1656,584],{"class":576},[566,1658,1101],{"class":580},[566,1660,831],{"class":830},[545,1662,1664],{"id":1663},"design-tips","Design Tips",[1666,1667,1669],"h3",{"id":1668},"one-interface-per-domain","One Interface Per Domain",[521,1671,1672],{},"Define field interfaces per domain area, not per route:",[556,1674,1677],{"className":558,"code":1675,"filename":1676,"language":561,"meta":562,"style":562},"export interface AuthFields {\n  user: { id: string; email: string; role: string }\n  action: string\n  mfaUsed: boolean\n}\n\nexport interface PaymentFields {\n  user: { id: string; plan: string }\n  order: { id: string; total: number; currency: string }\n  payment: { method: string; last4: string }\n}\n","server\u002Ftypes\u002Flog-fields.ts",[525,1678,1679,1691,1725,1733,1743,1747,1751,1762,1786,1820,1847],{"__ignoreMap":562},[566,1680,1681,1683,1686,1689],{"class":568,"line":569},[566,1682,707],{"class":572},[566,1684,1685],{"class":610}," interface",[566,1687,1688],{"class":614}," AuthFields",[566,1690,618],{"class":576},[566,1692,1693,1695,1697,1699,1701,1703,1705,1707,1710,1712,1714,1716,1719,1721,1723],{"class":568,"line":600},[566,1694,625],{"class":624},[566,1696,554],{"class":576},[566,1698,577],{"class":576},[566,1700,632],{"class":624},[566,1702,554],{"class":576},[566,1704,637],{"class":614},[566,1706,640],{"class":576},[566,1708,1709],{"class":624}," email",[566,1711,554],{"class":576},[566,1713,637],{"class":614},[566,1715,640],{"class":576},[566,1717,1718],{"class":624}," role",[566,1720,554],{"class":576},[566,1722,637],{"class":614},[566,1724,650],{"class":576},[566,1726,1727,1729,1731],{"class":568,"line":607},[566,1728,685],{"class":624},[566,1730,554],{"class":576},[566,1732,690],{"class":614},[566,1734,1735,1738,1740],{"class":568,"line":621},[566,1736,1737],{"class":624},"  mfaUsed",[566,1739,554],{"class":576},[566,1741,1742],{"class":614}," boolean\n",[566,1744,1745],{"class":568,"line":653},[566,1746,696],{"class":576},[566,1748,1749],{"class":568,"line":682},[566,1750,604],{"emptyLinePlaceholder":603},[566,1752,1753,1755,1757,1760],{"class":568,"line":693},[566,1754,707],{"class":572},[566,1756,1685],{"class":610},[566,1758,1759],{"class":614}," PaymentFields",[566,1761,618],{"class":576},[566,1763,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782,1784],{"class":568,"line":699},[566,1765,625],{"class":624},[566,1767,554],{"class":576},[566,1769,577],{"class":576},[566,1771,632],{"class":624},[566,1773,554],{"class":576},[566,1775,637],{"class":614},[566,1777,640],{"class":576},[566,1779,643],{"class":624},[566,1781,554],{"class":576},[566,1783,637],{"class":614},[566,1785,650],{"class":576},[566,1787,1788,1791,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1814,1816,1818],{"class":568,"line":704},[566,1789,1790],{"class":624},"  order",[566,1792,554],{"class":576},[566,1794,577],{"class":576},[566,1796,632],{"class":624},[566,1798,554],{"class":576},[566,1800,637],{"class":614},[566,1802,640],{"class":576},[566,1804,673],{"class":624},[566,1806,554],{"class":576},[566,1808,668],{"class":614},[566,1810,640],{"class":576},[566,1812,1813],{"class":624}," currency",[566,1815,554],{"class":576},[566,1817,637],{"class":614},[566,1819,650],{"class":576},[566,1821,1822,1825,1827,1829,1832,1834,1836,1838,1841,1843,1845],{"class":568,"line":738},[566,1823,1824],{"class":624},"  payment",[566,1826,554],{"class":576},[566,1828,577],{"class":576},[566,1830,1831],{"class":624}," method",[566,1833,554],{"class":576},[566,1835,637],{"class":614},[566,1837,640],{"class":576},[566,1839,1840],{"class":624}," last4",[566,1842,554],{"class":576},[566,1844,637],{"class":614},[566,1846,650],{"class":576},[566,1848,1849],{"class":568,"line":768},[566,1850,696],{"class":576},[556,1852,1855],{"className":558,"code":1853,"filename":1854,"language":561,"meta":562,"style":562},"import { useLogger } from 'evlog'\nimport type { AuthFields } from '~\u002Fserver\u002Ftypes\u002Flog-fields'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger\u003CAuthFields>(event)\n  \u002F\u002F ...\n})\n","server\u002Fapi\u002Fauth\u002Flogin.post.ts",[525,1856,1857,1875,1897,1901,1923,1946,1951],{"__ignoreMap":562},[566,1858,1859,1861,1863,1865,1867,1869,1871,1873],{"class":568,"line":569},[566,1860,573],{"class":572},[566,1862,577],{"class":576},[566,1864,581],{"class":580},[566,1866,584],{"class":576},[566,1868,587],{"class":572},[566,1870,590],{"class":576},[566,1872,594],{"class":593},[566,1874,597],{"class":576},[566,1876,1877,1879,1882,1884,1886,1888,1890,1892,1895],{"class":568,"line":600},[566,1878,573],{"class":572},[566,1880,1881],{"class":572}," type",[566,1883,577],{"class":576},[566,1885,1688],{"class":580},[566,1887,584],{"class":576},[566,1889,587],{"class":572},[566,1891,590],{"class":576},[566,1893,1894],{"class":593},"~\u002Fserver\u002Ftypes\u002Flog-fields",[566,1896,597],{"class":576},[566,1898,1899],{"class":568,"line":607},[566,1900,604],{"emptyLinePlaceholder":603},[566,1902,1903,1905,1907,1909,1911,1913,1915,1917,1919,1921],{"class":568,"line":621},[566,1904,707],{"class":572},[566,1906,710],{"class":572},[566,1908,714],{"class":713},[566,1910,717],{"class":580},[566,1912,720],{"class":610},[566,1914,723],{"class":576},[566,1916,727],{"class":726},[566,1918,730],{"class":576},[566,1920,733],{"class":610},[566,1922,618],{"class":576},[566,1924,1925,1927,1929,1931,1933,1935,1938,1940,1942,1944],{"class":568,"line":653},[566,1926,741],{"class":610},[566,1928,744],{"class":580},[566,1930,747],{"class":576},[566,1932,581],{"class":713},[566,1934,752],{"class":576},[566,1936,1937],{"class":614},"AuthFields",[566,1939,758],{"class":576},[566,1941,717],{"class":624},[566,1943,727],{"class":580},[566,1945,765],{"class":624},[566,1947,1948],{"class":568,"line":682},[566,1949,1950],{"class":830},"  \u002F\u002F ...\n",[566,1952,1953,1955],{"class":568,"line":693},[566,1954,1015],{"class":576},[566,1956,765],{"class":580},[1666,1958,1960],{"id":1959},"keep-interfaces-focused","Keep Interfaces Focused",[521,1962,1963],{},"Include only the fields your routes actually set. The interface doesn't need to mirror your entire data model:",[556,1965,1968],{"className":558,"code":1966,"filename":1967,"language":561,"meta":562,"style":562},"\u002F\u002F Too broad - most routes won't set all these\ninterface EverythingFields {\n  user: FullUserProfile\n  order: CompleteOrder\n  payment: PaymentDetails\n  shipping: ShippingInfo\n}\n\n\u002F\u002F Focused - only what this route sets\ninterface CheckoutFields {\n  user: { id: string; plan: string }\n  cart: { items: number; total: number }\n}\n","server\u002Ftypes\u002Fevlog.ts",[525,1969,1970,1975,1984,1993,2002,2011,2021,2025,2029,2034,2042,2066,2090],{"__ignoreMap":562},[566,1971,1972],{"class":568,"line":569},[566,1973,1974],{"class":830},"\u002F\u002F Too broad - most routes won't set all these\n",[566,1976,1977,1979,1982],{"class":568,"line":600},[566,1978,611],{"class":610},[566,1980,1981],{"class":614}," EverythingFields",[566,1983,618],{"class":576},[566,1985,1986,1988,1990],{"class":568,"line":607},[566,1987,625],{"class":624},[566,1989,554],{"class":576},[566,1991,1992],{"class":614}," FullUserProfile\n",[566,1994,1995,1997,1999],{"class":568,"line":621},[566,1996,1790],{"class":624},[566,1998,554],{"class":576},[566,2000,2001],{"class":614}," CompleteOrder\n",[566,2003,2004,2006,2008],{"class":568,"line":653},[566,2005,1824],{"class":624},[566,2007,554],{"class":576},[566,2009,2010],{"class":614}," PaymentDetails\n",[566,2012,2013,2016,2018],{"class":568,"line":682},[566,2014,2015],{"class":624},"  shipping",[566,2017,554],{"class":576},[566,2019,2020],{"class":614}," ShippingInfo\n",[566,2022,2023],{"class":568,"line":693},[566,2024,696],{"class":576},[566,2026,2027],{"class":568,"line":699},[566,2028,604],{"emptyLinePlaceholder":603},[566,2030,2031],{"class":568,"line":704},[566,2032,2033],{"class":830},"\u002F\u002F Focused - only what this route sets\n",[566,2035,2036,2038,2040],{"class":568,"line":738},[566,2037,611],{"class":610},[566,2039,615],{"class":614},[566,2041,618],{"class":576},[566,2043,2044,2046,2048,2050,2052,2054,2056,2058,2060,2062,2064],{"class":568,"line":768},[566,2045,625],{"class":624},[566,2047,554],{"class":576},[566,2049,577],{"class":576},[566,2051,632],{"class":624},[566,2053,554],{"class":576},[566,2055,637],{"class":614},[566,2057,640],{"class":576},[566,2059,643],{"class":624},[566,2061,554],{"class":576},[566,2063,637],{"class":614},[566,2065,650],{"class":576},[566,2067,2068,2070,2072,2074,2076,2078,2080,2082,2084,2086,2088],{"class":568,"line":773},[566,2069,656],{"class":624},[566,2071,554],{"class":576},[566,2073,577],{"class":576},[566,2075,663],{"class":624},[566,2077,554],{"class":576},[566,2079,668],{"class":614},[566,2081,640],{"class":576},[566,2083,673],{"class":624},[566,2085,554],{"class":576},[566,2087,668],{"class":614},[566,2089,650],{"class":576},[566,2091,2092],{"class":568,"line":834},[566,2093,696],{"class":576},[545,2095,2097],{"id":2096},"next-steps","Next Steps",[2099,2100,2101,2108,2113],"ul",{},[2102,2103,2104,2107],"li",{},[2105,2106,46],"a",{"href":47},": Design effective wide events with context layering",[2102,2109,2110,2112],{},[2105,2111,503],{"href":504},": Security guidelines for preventing sensitive data leakage",[2102,2114,2115,2117,2118,2121],{},[2105,2116,490],{"href":491},": All ",[525,2119,2120],{},"initLogger"," and middleware options",[2123,2124,2125],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":562,"searchDepth":600,"depth":600,"links":2127},[2128,2129,2130,2131,2132,2133,2137],{"id":547,"depth":600,"text":548},{"id":1023,"depth":600,"text":1024},{"id":1115,"depth":600,"text":1116},{"id":1198,"depth":600,"text":1199},{"id":1353,"depth":600,"text":1354},{"id":1663,"depth":600,"text":1664,"children":2134},[2135,2136],{"id":1668,"depth":607,"text":1669},{"id":1959,"depth":607,"text":1960},{"id":2096,"depth":600,"text":2097},"Add compile-time type safety to your wide events with TypeScript module augmentation. Prevent typos and ensure consistent field names across your codebase.","md",[2141,2144],{"label":46,"icon":49,"to":47,"color":2142,"variant":2143},"neutral","subtle",{"label":503,"icon":369,"to":504,"color":2142,"variant":2143},{},{"icon":74},{"title":71,"description":2138},"vGvlm406vwTJ-x0DTxQWsDP-xsmel3cR02Bkg5Wvq-4",[2150,2152],{"title":66,"path":67,"stem":68,"description":2151,"icon":69,"children":-1},"Automatically scrub PII from wide events before console output and drains. Built-in smart masking for credit cards, emails, IPs, phone numbers, JWTs, and more.",{"title":76,"path":77,"stem":78,"description":2153,"icon":79,"children":-1},"Scale typed error and audit catalogs from a single file to multi-package monorepos. Conventions, npm packaging recipe, composition patterns, and the type-augmentation deep dive.",1785609688116]