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