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