[{"data":1,"prerenderedAt":2165},["ShallowReactive",2],{"navigation_docs":3,"-learn-typed-fields":533,"-learn-typed-fields-surround":2160},[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,503,508,511,516,520,525,529],{"title":128,"path":500,"stem":501,"icon":502},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":504,"path":505,"stem":506,"icon":507},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":370,"path":509,"stem":510,"icon":373},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":512,"path":513,"stem":514,"icon":515},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":517,"path":518,"stem":519,"icon":376},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":521,"path":522,"stem":523,"icon":524},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":526,"path":527,"stem":528,"icon":431},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":530,"path":531,"stem":532},"Log cost","\u002Freference\u002Fcost","7.reference\u002F7.cost",{"id":534,"title":68,"body":535,"description":2149,"extension":2150,"links":2151,"meta":2156,"navigation":2157,"path":69,"seo":2158,"stem":70,"__hash__":2159},"docs\u002F2.learn\u002F7.typed-fields.md",{"type":536,"value":537,"toc":2137},"minimark",[538,559,562,567,573,1036,1039,1043,1057,1121,1130,1134,1140,1210,1213,1217,1227,1360,1363,1367,1376,1672,1676,1681,1684,1862,1968,1972,1975,2105,2109,2133],[539,540,541,542,546,547,550,551,554,555,558],"p",{},"By default, ",[543,544,545],"code",{},"useLogger"," accepts any fields, which is great for getting started. But as your codebase grows, inconsistencies creep in: one route logs ",[543,548,549],{},"user",", another logs ",[543,552,553],{},"account",", a third logs ",[543,556,557],{},"userId",". Typed fields solve this with opt-in compile-time safety.",[560,561],"typed-fields-intellisense",{},[563,564,566],"h2",{"id":565},"basic-usage","Basic Usage",[539,568,569,570,572],{},"Define an interface for your fields and pass it as a generic to ",[543,571,545],{},":",[574,575,581],"pre",{"className":576,"code":577,"filename":578,"language":579,"meta":580,"style":580},"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","",[543,582,583,616,623,637,669,698,709,715,720,754,784,789,850,896,928,933,966,1004,1009,1028],{"__ignoreMap":580},[584,585,588,592,596,600,603,606,609,613],"span",{"class":586,"line":587},"line",1,[584,589,591],{"class":590},"s7zQu","import",[584,593,595],{"class":594},"sMK4o"," {",[584,597,599],{"class":598},"sTEyZ"," useLogger",[584,601,602],{"class":594}," }",[584,604,605],{"class":590}," from",[584,607,608],{"class":594}," '",[584,610,612],{"class":611},"sfazB","evlog",[584,614,615],{"class":594},"'\n",[584,617,619],{"class":586,"line":618},2,[584,620,622],{"emptyLinePlaceholder":621},true,"\n",[584,624,626,630,634],{"class":586,"line":625},3,[584,627,629],{"class":628},"spNyl","interface",[584,631,633],{"class":632},"sBMFI"," CheckoutFields",[584,635,636],{"class":594}," {\n",[584,638,640,644,646,648,651,653,656,659,662,664,666],{"class":586,"line":639},4,[584,641,643],{"class":642},"swJcz","  user",[584,645,572],{"class":594},[584,647,595],{"class":594},[584,649,650],{"class":642}," id",[584,652,572],{"class":594},[584,654,655],{"class":632}," string",[584,657,658],{"class":594},";",[584,660,661],{"class":642}," plan",[584,663,572],{"class":594},[584,665,655],{"class":632},[584,667,668],{"class":594}," }\n",[584,670,672,675,677,679,682,684,687,689,692,694,696],{"class":586,"line":671},5,[584,673,674],{"class":642},"  cart",[584,676,572],{"class":594},[584,678,595],{"class":594},[584,680,681],{"class":642}," items",[584,683,572],{"class":594},[584,685,686],{"class":632}," number",[584,688,658],{"class":594},[584,690,691],{"class":642}," total",[584,693,572],{"class":594},[584,695,686],{"class":632},[584,697,668],{"class":594},[584,699,701,704,706],{"class":586,"line":700},6,[584,702,703],{"class":642},"  action",[584,705,572],{"class":594},[584,707,708],{"class":632}," string\n",[584,710,712],{"class":586,"line":711},7,[584,713,714],{"class":594},"}\n",[584,716,718],{"class":586,"line":717},8,[584,719,622],{"emptyLinePlaceholder":621},[584,721,723,726,729,733,736,739,742,746,749,752],{"class":586,"line":722},9,[584,724,725],{"class":590},"export",[584,727,728],{"class":590}," default",[584,730,732],{"class":731},"s2Zo4"," defineEventHandler",[584,734,735],{"class":598},"(",[584,737,738],{"class":628},"async",[584,740,741],{"class":594}," (",[584,743,745],{"class":744},"sHdIc","event",[584,747,748],{"class":594},")",[584,750,751],{"class":628}," =>",[584,753,636],{"class":594},[584,755,757,760,763,766,768,771,774,777,779,781],{"class":586,"line":756},10,[584,758,759],{"class":628},"  const",[584,761,762],{"class":598}," log",[584,764,765],{"class":594}," =",[584,767,599],{"class":731},[584,769,770],{"class":594},"\u003C",[584,772,773],{"class":632},"CheckoutFields",[584,775,776],{"class":594},">",[584,778,735],{"class":642},[584,780,745],{"class":598},[584,782,783],{"class":642},")\n",[584,785,787],{"class":586,"line":786},11,[584,788,622],{"emptyLinePlaceholder":621},[584,790,792,795,798,801,803,806,809,811,813,815,817,819,822,825,828,830,832,834,837,839,841,843,846],{"class":586,"line":791},12,[584,793,794],{"class":598},"  log",[584,796,797],{"class":594},".",[584,799,800],{"class":731},"set",[584,802,735],{"class":642},[584,804,805],{"class":594},"{",[584,807,808],{"class":642}," user",[584,810,572],{"class":594},[584,812,595],{"class":594},[584,814,650],{"class":642},[584,816,572],{"class":594},[584,818,608],{"class":594},[584,820,821],{"class":611},"123",[584,823,824],{"class":594},"'",[584,826,827],{"class":594},",",[584,829,661],{"class":642},[584,831,572],{"class":594},[584,833,608],{"class":594},[584,835,836],{"class":611},"pro",[584,838,824],{"class":594},[584,840,602],{"class":594},[584,842,602],{"class":594},[584,844,845],{"class":642},")  ",[584,847,849],{"class":848},"sHwdD","\u002F\u002F OK\n",[584,851,853,855,857,859,861,863,866,868,870,872,874,878,880,882,884,887,889,891,894],{"class":586,"line":852},13,[584,854,794],{"class":598},[584,856,797],{"class":594},[584,858,800],{"class":731},[584,860,735],{"class":642},[584,862,805],{"class":594},[584,864,865],{"class":642}," cart",[584,867,572],{"class":594},[584,869,595],{"class":594},[584,871,681],{"class":642},[584,873,572],{"class":594},[584,875,877],{"class":876},"sbssI"," 3",[584,879,827],{"class":594},[584,881,691],{"class":642},[584,883,572],{"class":594},[584,885,886],{"class":876}," 9999",[584,888,602],{"class":594},[584,890,602],{"class":594},[584,892,893],{"class":642},")    ",[584,895,849],{"class":848},[584,897,899,901,903,905,907,909,912,914,916,919,921,923,926],{"class":586,"line":898},14,[584,900,794],{"class":598},[584,902,797],{"class":594},[584,904,800],{"class":731},[584,906,735],{"class":642},[584,908,805],{"class":594},[584,910,911],{"class":642}," action",[584,913,572],{"class":594},[584,915,608],{"class":594},[584,917,918],{"class":611},"checkout",[584,920,824],{"class":594},[584,922,602],{"class":594},[584,924,925],{"class":642},")                  ",[584,927,849],{"class":848},[584,929,931],{"class":586,"line":930},15,[584,932,622],{"emptyLinePlaceholder":621},[584,934,936,938,940,942,944,946,949,951,953,956,958,960,963],{"class":586,"line":935},16,[584,937,794],{"class":598},[584,939,797],{"class":594},[584,941,800],{"class":731},[584,943,735],{"class":642},[584,945,805],{"class":594},[584,947,948],{"class":642}," account",[584,950,572],{"class":594},[584,952,608],{"class":594},[584,954,955],{"class":611},"...",[584,957,824],{"class":594},[584,959,602],{"class":594},[584,961,962],{"class":642},")                      ",[584,964,965],{"class":848},"\u002F\u002F TS error\n",[584,967,969,971,973,975,977,979,982,984,986,988,990,992,994,996,998,1000,1002],{"class":586,"line":968},17,[584,970,794],{"class":598},[584,972,797],{"class":594},[584,974,800],{"class":731},[584,976,735],{"class":642},[584,978,805],{"class":594},[584,980,981],{"class":642}," usr",[584,983,572],{"class":594},[584,985,595],{"class":594},[584,987,650],{"class":642},[584,989,572],{"class":594},[584,991,608],{"class":594},[584,993,821],{"class":611},[584,995,824],{"class":594},[584,997,602],{"class":594},[584,999,602],{"class":594},[584,1001,925],{"class":642},[584,1003,965],{"class":848},[584,1005,1007],{"class":586,"line":1006},18,[584,1008,622],{"emptyLinePlaceholder":621},[584,1010,1012,1015,1017,1020,1022,1026],{"class":586,"line":1011},19,[584,1013,1014],{"class":590},"  return",[584,1016,595],{"class":594},[584,1018,1019],{"class":642}," success",[584,1021,572],{"class":594},[584,1023,1025],{"class":1024},"sfNiH"," true",[584,1027,668],{"class":594},[584,1029,1031,1034],{"class":586,"line":1030},20,[584,1032,1033],{"class":594},"}",[584,1035,783],{"class":598},[539,1037,1038],{},"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.",[563,1040,1042],{"id":1041},"internal-fields","Internal Fields",[539,1044,1045,1046,1049,1050,1053,1054,572],{},"Some fields evlog sets itself. ",[543,1047,1048],{},"status"," and ",[543,1051,1052],{},"service"," are always accepted whatever your type says, through ",[543,1055,1056],{},"InternalFields",[574,1058,1060],{"className":576,"code":1059,"filename":578,"language":579,"meta":580,"style":580},"log.set({ status: 200 })    \u002F\u002F OK - internal field\nlog.set({ service: 'api' }) \u002F\u002F OK - internal field\n",[543,1061,1062,1090],{"__ignoreMap":580},[584,1063,1064,1067,1069,1071,1073,1075,1078,1080,1083,1085,1087],{"class":586,"line":587},[584,1065,1066],{"class":598},"log",[584,1068,797],{"class":594},[584,1070,800],{"class":731},[584,1072,735],{"class":598},[584,1074,805],{"class":594},[584,1076,1077],{"class":642}," status",[584,1079,572],{"class":594},[584,1081,1082],{"class":876}," 200",[584,1084,602],{"class":594},[584,1086,893],{"class":598},[584,1088,1089],{"class":848},"\u002F\u002F OK - internal field\n",[584,1091,1092,1094,1096,1098,1100,1102,1105,1107,1109,1112,1114,1116,1119],{"class":586,"line":618},[584,1093,1066],{"class":598},[584,1095,797],{"class":594},[584,1097,800],{"class":731},[584,1099,735],{"class":598},[584,1101,805],{"class":594},[584,1103,1104],{"class":642}," service",[584,1106,572],{"class":594},[584,1108,608],{"class":594},[584,1110,1111],{"class":611},"api",[584,1113,824],{"class":594},[584,1115,602],{"class":594},[584,1117,1118],{"class":598},") ",[584,1120,1089],{"class":848},[539,1122,1123,1124,1126,1127,1129],{},"You don't need to include ",[543,1125,1048],{}," or ",[543,1128,1052],{}," in your interface.",[563,1131,1133],{"id":1132},"untyped-usage","Untyped Usage",[539,1135,1136,1137,1139],{},"Without a generic, ",[543,1138,545],{}," accepts any fields as usual:",[574,1141,1144],{"className":576,"code":1142,"filename":1143,"language":579,"meta":580,"style":580},"const log = useLogger(event)\nlog.set({ anything: true, nested: { deep: 'value' } }) \u002F\u002F OK\n","server\u002Fapi\u002Fexample.ts",[543,1145,1146,1162],{"__ignoreMap":580},[584,1147,1148,1151,1154,1157,1159],{"class":586,"line":587},[584,1149,1150],{"class":628},"const",[584,1152,1153],{"class":598}," log ",[584,1155,1156],{"class":594},"=",[584,1158,599],{"class":731},[584,1160,1161],{"class":598},"(event)\n",[584,1163,1164,1166,1168,1170,1172,1174,1177,1179,1181,1183,1186,1188,1190,1193,1195,1197,1200,1202,1204,1206,1208],{"class":586,"line":618},[584,1165,1066],{"class":598},[584,1167,797],{"class":594},[584,1169,800],{"class":731},[584,1171,735],{"class":598},[584,1173,805],{"class":594},[584,1175,1176],{"class":642}," anything",[584,1178,572],{"class":594},[584,1180,1025],{"class":1024},[584,1182,827],{"class":594},[584,1184,1185],{"class":642}," nested",[584,1187,572],{"class":594},[584,1189,595],{"class":594},[584,1191,1192],{"class":642}," deep",[584,1194,572],{"class":594},[584,1196,608],{"class":594},[584,1198,1199],{"class":611},"value",[584,1201,824],{"class":594},[584,1203,602],{"class":594},[584,1205,602],{"class":594},[584,1207,1118],{"class":598},[584,1209,849],{"class":848},[539,1211,1212],{},"Typed fields are fully opt-in.",[563,1214,1216],{"id":1215},"nuxt-auto-import","Nuxt Auto-Import",[1218,1219,1222,1223,1226],"callout",{"color":1220,"icon":1221},"warning","i-lucide-triangle-alert","Typed fields with ",[543,1224,1225],{},"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.",[574,1228,1230],{"className":576,"code":1229,"filename":578,"language":579,"meta":580,"style":580},"\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",[543,1231,1232,1237,1255,1274,1304,1308,1313,1331],{"__ignoreMap":580},[584,1233,1234],{"class":586,"line":587},[584,1235,1236],{"class":848},"\u002F\u002F Works - explicit import preserves type checking\n",[584,1238,1239,1241,1243,1245,1247,1249,1251,1253],{"class":586,"line":618},[584,1240,591],{"class":590},[584,1242,595],{"class":594},[584,1244,599],{"class":598},[584,1246,602],{"class":594},[584,1248,605],{"class":590},[584,1250,608],{"class":594},[584,1252,612],{"class":611},[584,1254,615],{"class":594},[584,1256,1257,1259,1261,1263,1265,1267,1270,1272],{"class":586,"line":625},[584,1258,1150],{"class":628},[584,1260,1153],{"class":598},[584,1262,1156],{"class":594},[584,1264,599],{"class":731},[584,1266,770],{"class":594},[584,1268,1269],{"class":632},"MyFields",[584,1271,776],{"class":594},[584,1273,1161],{"class":598},[584,1275,1276,1278,1280,1282,1284,1286,1289,1291,1293,1296,1298,1300,1302],{"class":586,"line":639},[584,1277,1066],{"class":598},[584,1279,797],{"class":594},[584,1281,800],{"class":731},[584,1283,735],{"class":598},[584,1285,805],{"class":594},[584,1287,1288],{"class":642}," typo",[584,1290,572],{"class":594},[584,1292,608],{"class":594},[584,1294,1295],{"class":611},"oops",[584,1297,824],{"class":594},[584,1299,602],{"class":594},[584,1301,1118],{"class":598},[584,1303,965],{"class":848},[584,1305,1306],{"class":586,"line":671},[584,1307,622],{"emptyLinePlaceholder":621},[584,1309,1310],{"class":586,"line":700},[584,1311,1312],{"class":848},"\u002F\u002F Does NOT work - auto-import loses excess property checking\n",[584,1314,1315,1317,1319,1321,1323,1325,1327,1329],{"class":586,"line":711},[584,1316,1150],{"class":628},[584,1318,1153],{"class":598},[584,1320,1156],{"class":594},[584,1322,599],{"class":731},[584,1324,770],{"class":594},[584,1326,1269],{"class":632},[584,1328,776],{"class":594},[584,1330,1161],{"class":598},[584,1332,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357],{"class":586,"line":717},[584,1334,1066],{"class":598},[584,1336,797],{"class":594},[584,1338,800],{"class":731},[584,1340,735],{"class":598},[584,1342,805],{"class":594},[584,1344,1288],{"class":642},[584,1346,572],{"class":594},[584,1348,608],{"class":594},[584,1350,1295],{"class":611},[584,1352,824],{"class":594},[584,1354,602],{"class":594},[584,1356,1118],{"class":598},[584,1358,1359],{"class":848},"\u002F\u002F No error (silently accepted)\n",[539,1361,1362],{},"Untyped usage keeps the auto-import. Add the explicit one only where you pass a generic.",[563,1364,1366],{"id":1365},"outside-nuxt","Outside Nuxt",[539,1368,1369,1370,1049,1373,572],{},"The same generic works with ",[543,1371,1372],{},"createRequestLogger",[543,1374,1375],{},"createWorkersLogger",[1377,1378,1379,1571],"code-group",{},[574,1380,1382],{"className":576,"code":1381,"filename":286,"language":579,"meta":580,"style":580},"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",[543,1383,1384,1403,1407,1416,1424,1433,1437,1441,1462,1479,1495,1501,1505,1546],{"__ignoreMap":580},[584,1385,1386,1388,1390,1393,1395,1397,1399,1401],{"class":586,"line":587},[584,1387,591],{"class":590},[584,1389,595],{"class":594},[584,1391,1392],{"class":598}," createRequestLogger",[584,1394,602],{"class":594},[584,1396,605],{"class":590},[584,1398,608],{"class":594},[584,1400,612],{"class":611},[584,1402,615],{"class":594},[584,1404,1405],{"class":586,"line":618},[584,1406,622],{"emptyLinePlaceholder":621},[584,1408,1409,1411,1414],{"class":586,"line":625},[584,1410,629],{"class":628},[584,1412,1413],{"class":632}," MyFields",[584,1415,636],{"class":594},[584,1417,1418,1420,1422],{"class":586,"line":639},[584,1419,703],{"class":642},[584,1421,572],{"class":594},[584,1423,708],{"class":632},[584,1425,1426,1429,1431],{"class":586,"line":671},[584,1427,1428],{"class":642},"  userId",[584,1430,572],{"class":594},[584,1432,708],{"class":632},[584,1434,1435],{"class":586,"line":700},[584,1436,714],{"class":594},[584,1438,1439],{"class":586,"line":711},[584,1440,622],{"emptyLinePlaceholder":621},[584,1442,1443,1445,1447,1449,1451,1453,1455,1457,1459],{"class":586,"line":717},[584,1444,1150],{"class":628},[584,1446,1153],{"class":598},[584,1448,1156],{"class":594},[584,1450,1392],{"class":731},[584,1452,770],{"class":594},[584,1454,1269],{"class":632},[584,1456,776],{"class":594},[584,1458,735],{"class":598},[584,1460,1461],{"class":594},"{\n",[584,1463,1464,1467,1469,1471,1474,1476],{"class":586,"line":722},[584,1465,1466],{"class":642},"  method",[584,1468,572],{"class":594},[584,1470,608],{"class":594},[584,1472,1473],{"class":611},"POST",[584,1475,824],{"class":594},[584,1477,1478],{"class":594},",\n",[584,1480,1481,1484,1486,1488,1491,1493],{"class":586,"line":756},[584,1482,1483],{"class":642},"  path",[584,1485,572],{"class":594},[584,1487,608],{"class":594},[584,1489,1490],{"class":611},"\u002Fcheckout",[584,1492,824],{"class":594},[584,1494,1478],{"class":594},[584,1496,1497,1499],{"class":586,"line":786},[584,1498,1033],{"class":594},[584,1500,783],{"class":598},[584,1502,1503],{"class":586,"line":791},[584,1504,622],{"emptyLinePlaceholder":621},[584,1506,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1532,1534,1536,1538,1540,1542,1544],{"class":586,"line":852},[584,1508,1066],{"class":598},[584,1510,797],{"class":594},[584,1512,800],{"class":731},[584,1514,735],{"class":598},[584,1516,805],{"class":594},[584,1518,911],{"class":642},[584,1520,572],{"class":594},[584,1522,608],{"class":594},[584,1524,918],{"class":611},[584,1526,824],{"class":594},[584,1528,827],{"class":594},[584,1530,1531],{"class":642}," userId",[584,1533,572],{"class":594},[584,1535,608],{"class":594},[584,1537,821],{"class":611},[584,1539,824],{"class":594},[584,1541,602],{"class":594},[584,1543,1118],{"class":598},[584,1545,849],{"class":848},[584,1547,1548,1550,1552,1554,1556,1558,1561,1563,1565,1567,1569],{"class":586,"line":898},[584,1549,1066],{"class":598},[584,1551,797],{"class":594},[584,1553,800],{"class":731},[584,1555,735],{"class":598},[584,1557,805],{"class":594},[584,1559,1560],{"class":642}," unknown",[584,1562,572],{"class":594},[584,1564,1025],{"class":1024},[584,1566,602],{"class":594},[584,1568,962],{"class":598},[584,1570,965],{"class":848},[574,1572,1574],{"className":576,"code":1573,"filename":281,"language":579,"meta":580,"style":580},"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",[543,1575,1576,1596,1600,1608,1616,1620,1624,1643],{"__ignoreMap":580},[584,1577,1578,1580,1582,1585,1587,1589,1591,1594],{"class":586,"line":587},[584,1579,591],{"class":590},[584,1581,595],{"class":594},[584,1583,1584],{"class":598}," createWorkersLogger",[584,1586,602],{"class":594},[584,1588,605],{"class":590},[584,1590,608],{"class":594},[584,1592,1593],{"class":611},"evlog\u002Fworkers",[584,1595,615],{"class":594},[584,1597,1598],{"class":586,"line":618},[584,1599,622],{"emptyLinePlaceholder":621},[584,1601,1602,1604,1606],{"class":586,"line":625},[584,1603,629],{"class":628},[584,1605,1413],{"class":632},[584,1607,636],{"class":594},[584,1609,1610,1612,1614],{"class":586,"line":639},[584,1611,703],{"class":642},[584,1613,572],{"class":594},[584,1615,708],{"class":632},[584,1617,1618],{"class":586,"line":671},[584,1619,714],{"class":594},[584,1621,1622],{"class":586,"line":700},[584,1623,622],{"emptyLinePlaceholder":621},[584,1625,1626,1628,1630,1632,1634,1636,1638,1640],{"class":586,"line":711},[584,1627,1150],{"class":628},[584,1629,1153],{"class":598},[584,1631,1156],{"class":594},[584,1633,1584],{"class":731},[584,1635,770],{"class":594},[584,1637,1269],{"class":632},[584,1639,776],{"class":594},[584,1641,1642],{"class":598},"(request)\n",[584,1644,1645,1647,1649,1651,1653,1655,1657,1659,1661,1664,1666,1668,1670],{"class":586,"line":717},[584,1646,1066],{"class":598},[584,1648,797],{"class":594},[584,1650,800],{"class":731},[584,1652,735],{"class":598},[584,1654,805],{"class":594},[584,1656,911],{"class":642},[584,1658,572],{"class":594},[584,1660,608],{"class":594},[584,1662,1663],{"class":611},"process",[584,1665,824],{"class":594},[584,1667,602],{"class":594},[584,1669,1118],{"class":598},[584,1671,849],{"class":848},[563,1673,1675],{"id":1674},"design-tips","Design Tips",[1677,1678,1680],"h3",{"id":1679},"one-interface-per-domain","One Interface Per Domain",[539,1682,1683],{},"Define field interfaces per domain area, not per route:",[574,1685,1688],{"className":576,"code":1686,"filename":1687,"language":579,"meta":580,"style":580},"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",[543,1689,1690,1702,1736,1744,1754,1758,1762,1773,1797,1831,1858],{"__ignoreMap":580},[584,1691,1692,1694,1697,1700],{"class":586,"line":587},[584,1693,725],{"class":590},[584,1695,1696],{"class":628}," interface",[584,1698,1699],{"class":632}," AuthFields",[584,1701,636],{"class":594},[584,1703,1704,1706,1708,1710,1712,1714,1716,1718,1721,1723,1725,1727,1730,1732,1734],{"class":586,"line":618},[584,1705,643],{"class":642},[584,1707,572],{"class":594},[584,1709,595],{"class":594},[584,1711,650],{"class":642},[584,1713,572],{"class":594},[584,1715,655],{"class":632},[584,1717,658],{"class":594},[584,1719,1720],{"class":642}," email",[584,1722,572],{"class":594},[584,1724,655],{"class":632},[584,1726,658],{"class":594},[584,1728,1729],{"class":642}," role",[584,1731,572],{"class":594},[584,1733,655],{"class":632},[584,1735,668],{"class":594},[584,1737,1738,1740,1742],{"class":586,"line":625},[584,1739,703],{"class":642},[584,1741,572],{"class":594},[584,1743,708],{"class":632},[584,1745,1746,1749,1751],{"class":586,"line":639},[584,1747,1748],{"class":642},"  mfaUsed",[584,1750,572],{"class":594},[584,1752,1753],{"class":632}," boolean\n",[584,1755,1756],{"class":586,"line":671},[584,1757,714],{"class":594},[584,1759,1760],{"class":586,"line":700},[584,1761,622],{"emptyLinePlaceholder":621},[584,1763,1764,1766,1768,1771],{"class":586,"line":711},[584,1765,725],{"class":590},[584,1767,1696],{"class":628},[584,1769,1770],{"class":632}," PaymentFields",[584,1772,636],{"class":594},[584,1774,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795],{"class":586,"line":717},[584,1776,643],{"class":642},[584,1778,572],{"class":594},[584,1780,595],{"class":594},[584,1782,650],{"class":642},[584,1784,572],{"class":594},[584,1786,655],{"class":632},[584,1788,658],{"class":594},[584,1790,661],{"class":642},[584,1792,572],{"class":594},[584,1794,655],{"class":632},[584,1796,668],{"class":594},[584,1798,1799,1802,1804,1806,1808,1810,1812,1814,1816,1818,1820,1822,1825,1827,1829],{"class":586,"line":722},[584,1800,1801],{"class":642},"  order",[584,1803,572],{"class":594},[584,1805,595],{"class":594},[584,1807,650],{"class":642},[584,1809,572],{"class":594},[584,1811,655],{"class":632},[584,1813,658],{"class":594},[584,1815,691],{"class":642},[584,1817,572],{"class":594},[584,1819,686],{"class":632},[584,1821,658],{"class":594},[584,1823,1824],{"class":642}," currency",[584,1826,572],{"class":594},[584,1828,655],{"class":632},[584,1830,668],{"class":594},[584,1832,1833,1836,1838,1840,1843,1845,1847,1849,1852,1854,1856],{"class":586,"line":756},[584,1834,1835],{"class":642},"  payment",[584,1837,572],{"class":594},[584,1839,595],{"class":594},[584,1841,1842],{"class":642}," method",[584,1844,572],{"class":594},[584,1846,655],{"class":632},[584,1848,658],{"class":594},[584,1850,1851],{"class":642}," last4",[584,1853,572],{"class":594},[584,1855,655],{"class":632},[584,1857,668],{"class":594},[584,1859,1860],{"class":586,"line":786},[584,1861,714],{"class":594},[574,1863,1866],{"className":576,"code":1864,"filename":1865,"language":579,"meta":580,"style":580},"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",[543,1867,1868,1886,1908,1912,1934,1957,1962],{"__ignoreMap":580},[584,1869,1870,1872,1874,1876,1878,1880,1882,1884],{"class":586,"line":587},[584,1871,591],{"class":590},[584,1873,595],{"class":594},[584,1875,599],{"class":598},[584,1877,602],{"class":594},[584,1879,605],{"class":590},[584,1881,608],{"class":594},[584,1883,612],{"class":611},[584,1885,615],{"class":594},[584,1887,1888,1890,1893,1895,1897,1899,1901,1903,1906],{"class":586,"line":618},[584,1889,591],{"class":590},[584,1891,1892],{"class":590}," type",[584,1894,595],{"class":594},[584,1896,1699],{"class":598},[584,1898,602],{"class":594},[584,1900,605],{"class":590},[584,1902,608],{"class":594},[584,1904,1905],{"class":611},"~\u002Fserver\u002Ftypes\u002Flog-fields",[584,1907,615],{"class":594},[584,1909,1910],{"class":586,"line":625},[584,1911,622],{"emptyLinePlaceholder":621},[584,1913,1914,1916,1918,1920,1922,1924,1926,1928,1930,1932],{"class":586,"line":639},[584,1915,725],{"class":590},[584,1917,728],{"class":590},[584,1919,732],{"class":731},[584,1921,735],{"class":598},[584,1923,738],{"class":628},[584,1925,741],{"class":594},[584,1927,745],{"class":744},[584,1929,748],{"class":594},[584,1931,751],{"class":628},[584,1933,636],{"class":594},[584,1935,1936,1938,1940,1942,1944,1946,1949,1951,1953,1955],{"class":586,"line":671},[584,1937,759],{"class":628},[584,1939,762],{"class":598},[584,1941,765],{"class":594},[584,1943,599],{"class":731},[584,1945,770],{"class":594},[584,1947,1948],{"class":632},"AuthFields",[584,1950,776],{"class":594},[584,1952,735],{"class":642},[584,1954,745],{"class":598},[584,1956,783],{"class":642},[584,1958,1959],{"class":586,"line":700},[584,1960,1961],{"class":848},"  \u002F\u002F ...\n",[584,1963,1964,1966],{"class":586,"line":711},[584,1965,1033],{"class":594},[584,1967,783],{"class":598},[1677,1969,1971],{"id":1970},"keep-interfaces-focused","Keep Interfaces Focused",[539,1973,1974],{},"Include only the fields your routes actually set. The interface doesn't need to mirror your entire data model:",[574,1976,1979],{"className":576,"code":1977,"filename":1978,"language":579,"meta":580,"style":580},"\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",[543,1980,1981,1986,1995,2004,2013,2022,2032,2036,2040,2045,2053,2077,2101],{"__ignoreMap":580},[584,1982,1983],{"class":586,"line":587},[584,1984,1985],{"class":848},"\u002F\u002F Too broad - most routes won't set all these\n",[584,1987,1988,1990,1993],{"class":586,"line":618},[584,1989,629],{"class":628},[584,1991,1992],{"class":632}," EverythingFields",[584,1994,636],{"class":594},[584,1996,1997,1999,2001],{"class":586,"line":625},[584,1998,643],{"class":642},[584,2000,572],{"class":594},[584,2002,2003],{"class":632}," FullUserProfile\n",[584,2005,2006,2008,2010],{"class":586,"line":639},[584,2007,1801],{"class":642},[584,2009,572],{"class":594},[584,2011,2012],{"class":632}," CompleteOrder\n",[584,2014,2015,2017,2019],{"class":586,"line":671},[584,2016,1835],{"class":642},[584,2018,572],{"class":594},[584,2020,2021],{"class":632}," PaymentDetails\n",[584,2023,2024,2027,2029],{"class":586,"line":700},[584,2025,2026],{"class":642},"  shipping",[584,2028,572],{"class":594},[584,2030,2031],{"class":632}," ShippingInfo\n",[584,2033,2034],{"class":586,"line":711},[584,2035,714],{"class":594},[584,2037,2038],{"class":586,"line":717},[584,2039,622],{"emptyLinePlaceholder":621},[584,2041,2042],{"class":586,"line":722},[584,2043,2044],{"class":848},"\u002F\u002F Focused - only what this route sets\n",[584,2046,2047,2049,2051],{"class":586,"line":756},[584,2048,629],{"class":628},[584,2050,633],{"class":632},[584,2052,636],{"class":594},[584,2054,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075],{"class":586,"line":786},[584,2056,643],{"class":642},[584,2058,572],{"class":594},[584,2060,595],{"class":594},[584,2062,650],{"class":642},[584,2064,572],{"class":594},[584,2066,655],{"class":632},[584,2068,658],{"class":594},[584,2070,661],{"class":642},[584,2072,572],{"class":594},[584,2074,655],{"class":632},[584,2076,668],{"class":594},[584,2078,2079,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099],{"class":586,"line":791},[584,2080,674],{"class":642},[584,2082,572],{"class":594},[584,2084,595],{"class":594},[584,2086,681],{"class":642},[584,2088,572],{"class":594},[584,2090,686],{"class":632},[584,2092,658],{"class":594},[584,2094,691],{"class":642},[584,2096,572],{"class":594},[584,2098,686],{"class":632},[584,2100,668],{"class":594},[584,2102,2103],{"class":586,"line":852},[584,2104,714],{"class":594},[563,2106,2108],{"id":2107},"next-steps","Next Steps",[2110,2111,2112,2119,2124],"ul",{},[2113,2114,2115,2118],"li",{},[2116,2117,44],"a",{"href":45},": Design effective wide events with context layering",[2113,2120,2121,2123],{},[2116,2122,517],{"href":518},": Security guidelines for preventing sensitive data leakage",[2113,2125,2126,2128,2129,2132],{},[2116,2127,504],{"href":505},": All ",[543,2130,2131],{},"initLogger"," and middleware options",[2134,2135,2136],"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":580,"searchDepth":618,"depth":618,"links":2138},[2139,2140,2141,2142,2143,2144,2148],{"id":565,"depth":618,"text":566},{"id":1041,"depth":618,"text":1042},{"id":1132,"depth":618,"text":1133},{"id":1215,"depth":618,"text":1216},{"id":1365,"depth":618,"text":1366},{"id":1674,"depth":618,"text":1675,"children":2145},[2146,2147],{"id":1679,"depth":625,"text":1680},{"id":1970,"depth":625,"text":1971},{"id":2107,"depth":618,"text":2108},"Add compile-time type safety to your wide events with TypeScript module augmentation. Prevent typos and ensure consistent field names across your codebase.","md",[2152,2155],{"label":44,"icon":47,"to":45,"color":2153,"variant":2154},"neutral","subtle",{"label":517,"icon":376,"to":518,"color":2153,"variant":2154},{},{"icon":71},{"title":68,"description":2149},"9nxpLkc4RQL8jcyx1y9nsUgZRC3NBBb5Bl3uqnQ7gC0",[2161,2163],{"title":63,"path":64,"stem":65,"description":2162,"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":2164,"children":-1},"[object Object]",1786806601038]