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