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