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