[{"data":1,"prerenderedAt":1817},["ShallowReactive",2],{"navigation_docs":3,"-build-on-top-catalogs-as-packages":429,"-build-on-top-catalogs-as-packages-surround":1812},[4,35,159,201,289,326,413],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Build on top","\u002Fbuild-on-top","5.build-on-top",[294,297,302,307,312,317,321],{"title":41,"path":295,"stem":296,"icon":54},"\u002Fbuild-on-top\u002Foverview","5.build-on-top\u002F0.overview",{"title":298,"path":299,"stem":300,"icon":301},"Stream API","\u002Fbuild-on-top\u002Fstream-api","5.build-on-top\u002F1.stream-api","i-lucide-radio-tower",{"title":303,"path":304,"stem":305,"icon":306},"Stream server","\u002Fbuild-on-top\u002Fstream-server","5.build-on-top\u002F2.stream-server","i-lucide-radio",{"title":308,"path":309,"stem":310,"icon":311},"FS reader","\u002Fbuild-on-top\u002Ffs-reader","5.build-on-top\u002F3.fs-reader","i-lucide-folder-search",{"title":313,"path":314,"stem":315,"icon":316},"Identity headers","\u002Fbuild-on-top\u002Fidentity-headers","5.build-on-top\u002F4.identity-headers","i-lucide-fingerprint",{"title":156,"path":318,"stem":319,"icon":320},"\u002Fbuild-on-top\u002Frecipes","5.build-on-top\u002F5.recipes","i-lucide-chef-hat",{"title":322,"path":323,"stem":324,"icon":325},"Catalogs as packages","\u002Fbuild-on-top\u002Fcatalogs-as-packages","5.build-on-top\u002F6.catalogs-as-packages","i-lucide-package",{"title":327,"path":328,"stem":329,"children":330,"page":34},"Adapters","\u002Fadapters","6.adapters",[331,334,374,389],{"title":41,"path":332,"stem":333,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":335,"path":336,"stem":337,"children":338,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[339,344,349,354,359,364,369],{"title":340,"path":341,"stem":342,"icon":343},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":345,"path":346,"stem":347,"icon":348},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":350,"path":351,"stem":352,"icon":353},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":355,"path":356,"stem":357,"icon":358},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":360,"path":361,"stem":362,"icon":363},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":365,"path":366,"stem":367,"icon":368},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":370,"path":371,"stem":372,"icon":373},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":375,"path":376,"stem":377,"children":378,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[379,384],{"title":380,"path":381,"stem":382,"icon":383},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":385,"path":386,"stem":387,"icon":388},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":390,"path":391,"stem":392,"children":393,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[394,399,404,408],{"title":395,"path":396,"stem":397,"icon":398},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":400,"path":401,"stem":402,"icon":403},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":405,"path":406,"stem":407,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":409,"path":410,"stem":411,"icon":412},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":414,"path":415,"stem":416,"children":417,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[418,421,425],{"title":41,"path":419,"stem":420,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":422,"path":423,"stem":424,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":426,"path":427,"stem":428,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":430,"title":322,"body":431,"description":1805,"extension":1806,"links":1807,"meta":1808,"navigation":1809,"path":323,"seo":1810,"stem":324,"__hash__":1811},"docs\u002F5.build-on-top\u002F6.catalogs-as-packages.md",{"type":432,"value":433,"toc":1798},"minimark",[434,465,478,481,486,489,506,861,872,882,886,893,1213,1219,1236,1360,1364,1367,1385,1454,1461,1477,1707,1711,1714,1750,1756,1760,1791,1794],[435,436,437,438,442,443,446,447,451,452,455,456,459,460,464],"p",{},"evlog catalogs (",[439,440,441],"a",{"href":62},"error catalogs",", ",[439,444,445],{"href":134},"audit catalogs",") are plain TypeScript objects passed to ",[448,449,450],"code",{},"defineErrorCatalog()"," \u002F ",[448,453,454],{},"defineAuditCatalog()",". They're not tied to a project — anything you can ",[448,457,458],{},"import"," works. That makes them perfect to publish as ",[461,462,463],"strong",{},"reusable npm packages",":",[466,467,468,472,475],"ul",{},[469,470,471],"li",{},"An organization-wide error catalog shared by every microservice",[469,473,474],{},"An open-source catalog for a specific domain (Stripe payments, AWS API errors, RFC 7807 problem types)",[469,476,477],{},"A team's audit catalog covering compliance actions across products",[435,479,480],{},"This page shows the minimum scaffolding for a package that exports a catalog and how downstream apps consume it.",[482,483,485],"h2",{"id":484},"what-goes-in-the-package","What goes in the package",[435,487,488],{},"A catalog package exports two things:",[490,491,492,499],"ol",{},[469,493,494,495,498],{},"The defined catalog (an object) — for ",[448,496,497],{},"evlog"," to register",[469,500,501,502,505],{},"A typed ",[448,503,504],{},"module"," augmentation — so consumers get autocomplete on the catalog keys",[507,508,514],"pre",{"className":509,"code":510,"filename":511,"language":512,"meta":513,"style":513},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineErrorCatalog } from 'evlog'\n\nexport const stripeErrors = defineErrorCatalog('stripe', {\n  card_declined: {\n    code: 'STRIPE_CARD_DECLINED',\n    status: 402,\n    message: 'Card was declined.',\n    why: 'The issuing bank rejected the charge.',\n    fix: 'Try a different payment method or contact the bank.',\n  },\n  insufficient_funds: {\n    code: 'STRIPE_INSUFFICIENT_FUNDS',\n    status: 402,\n    message: 'Card has insufficient funds.',\n    why: 'The card balance does not cover this charge.',\n    fix: 'Try a different card or use a smaller amount.',\n  },\n  \u002F\u002F ... more entries ...\n} as const)\n\ndeclare module 'evlog' {\n  interface RegisteredErrorCatalogs {\n    stripe: typeof stripeErrors\n  }\n}\n","src\u002Findex.ts","ts","",[448,515,516,547,554,590,601,619,633,650,667,684,690,700,716,727,743,759,775,780,787,801,806,823,835,849,855],{"__ignoreMap":513},[517,518,521,524,528,532,535,538,541,544],"span",{"class":519,"line":520},"line",1,[517,522,458],{"class":523},"s7zQu",[517,525,527],{"class":526},"sMK4o"," {",[517,529,531],{"class":530},"sTEyZ"," defineErrorCatalog",[517,533,534],{"class":526}," }",[517,536,537],{"class":523}," from",[517,539,540],{"class":526}," '",[517,542,497],{"class":543},"sfazB",[517,545,546],{"class":526},"'\n",[517,548,550],{"class":519,"line":549},2,[517,551,553],{"emptyLinePlaceholder":552},true,"\n",[517,555,557,560,564,567,570,573,576,579,582,584,587],{"class":519,"line":556},3,[517,558,559],{"class":523},"export",[517,561,563],{"class":562},"spNyl"," const",[517,565,566],{"class":530}," stripeErrors ",[517,568,569],{"class":526},"=",[517,571,531],{"class":572},"s2Zo4",[517,574,575],{"class":530},"(",[517,577,578],{"class":526},"'",[517,580,581],{"class":543},"stripe",[517,583,578],{"class":526},[517,585,586],{"class":526},",",[517,588,589],{"class":526}," {\n",[517,591,593,597,599],{"class":519,"line":592},4,[517,594,596],{"class":595},"swJcz","  card_declined",[517,598,464],{"class":526},[517,600,589],{"class":526},[517,602,604,607,609,611,614,616],{"class":519,"line":603},5,[517,605,606],{"class":595},"    code",[517,608,464],{"class":526},[517,610,540],{"class":526},[517,612,613],{"class":543},"STRIPE_CARD_DECLINED",[517,615,578],{"class":526},[517,617,618],{"class":526},",\n",[517,620,622,625,627,631],{"class":519,"line":621},6,[517,623,624],{"class":595},"    status",[517,626,464],{"class":526},[517,628,630],{"class":629},"sbssI"," 402",[517,632,618],{"class":526},[517,634,636,639,641,643,646,648],{"class":519,"line":635},7,[517,637,638],{"class":595},"    message",[517,640,464],{"class":526},[517,642,540],{"class":526},[517,644,645],{"class":543},"Card was declined.",[517,647,578],{"class":526},[517,649,618],{"class":526},[517,651,653,656,658,660,663,665],{"class":519,"line":652},8,[517,654,655],{"class":595},"    why",[517,657,464],{"class":526},[517,659,540],{"class":526},[517,661,662],{"class":543},"The issuing bank rejected the charge.",[517,664,578],{"class":526},[517,666,618],{"class":526},[517,668,670,673,675,677,680,682],{"class":519,"line":669},9,[517,671,672],{"class":595},"    fix",[517,674,464],{"class":526},[517,676,540],{"class":526},[517,678,679],{"class":543},"Try a different payment method or contact the bank.",[517,681,578],{"class":526},[517,683,618],{"class":526},[517,685,687],{"class":519,"line":686},10,[517,688,689],{"class":526},"  },\n",[517,691,693,696,698],{"class":519,"line":692},11,[517,694,695],{"class":595},"  insufficient_funds",[517,697,464],{"class":526},[517,699,589],{"class":526},[517,701,703,705,707,709,712,714],{"class":519,"line":702},12,[517,704,606],{"class":595},[517,706,464],{"class":526},[517,708,540],{"class":526},[517,710,711],{"class":543},"STRIPE_INSUFFICIENT_FUNDS",[517,713,578],{"class":526},[517,715,618],{"class":526},[517,717,719,721,723,725],{"class":519,"line":718},13,[517,720,624],{"class":595},[517,722,464],{"class":526},[517,724,630],{"class":629},[517,726,618],{"class":526},[517,728,730,732,734,736,739,741],{"class":519,"line":729},14,[517,731,638],{"class":595},[517,733,464],{"class":526},[517,735,540],{"class":526},[517,737,738],{"class":543},"Card has insufficient funds.",[517,740,578],{"class":526},[517,742,618],{"class":526},[517,744,746,748,750,752,755,757],{"class":519,"line":745},15,[517,747,655],{"class":595},[517,749,464],{"class":526},[517,751,540],{"class":526},[517,753,754],{"class":543},"The card balance does not cover this charge.",[517,756,578],{"class":526},[517,758,618],{"class":526},[517,760,762,764,766,768,771,773],{"class":519,"line":761},16,[517,763,672],{"class":595},[517,765,464],{"class":526},[517,767,540],{"class":526},[517,769,770],{"class":543},"Try a different card or use a smaller amount.",[517,772,578],{"class":526},[517,774,618],{"class":526},[517,776,778],{"class":519,"line":777},17,[517,779,689],{"class":526},[517,781,783],{"class":519,"line":782},18,[517,784,786],{"class":785},"sHwdD","  \u002F\u002F ... more entries ...\n",[517,788,790,793,796,798],{"class":519,"line":789},19,[517,791,792],{"class":526},"}",[517,794,795],{"class":523}," as",[517,797,563],{"class":562},[517,799,800],{"class":530},")\n",[517,802,804],{"class":519,"line":803},20,[517,805,553],{"emptyLinePlaceholder":552},[517,807,809,812,815,817,819,821],{"class":519,"line":808},21,[517,810,811],{"class":562},"declare",[517,813,814],{"class":562}," module",[517,816,540],{"class":526},[517,818,497],{"class":543},[517,820,578],{"class":526},[517,822,589],{"class":526},[517,824,826,829,833],{"class":519,"line":825},22,[517,827,828],{"class":562},"  interface",[517,830,832],{"class":831},"sBMFI"," RegisteredErrorCatalogs",[517,834,589],{"class":526},[517,836,838,841,843,846],{"class":519,"line":837},23,[517,839,840],{"class":595},"    stripe",[517,842,464],{"class":526},[517,844,845],{"class":526}," typeof",[517,847,848],{"class":530}," stripeErrors\n",[517,850,852],{"class":519,"line":851},24,[517,853,854],{"class":526},"  }\n",[517,856,858],{"class":519,"line":857},25,[517,859,860],{"class":526},"}\n",[435,862,863,864,867,868,871],{},"The ",[448,865,866],{},"as const"," is what makes the catalog keys propagate as a string literal union into ",[448,869,870],{},"createError('stripe.card_declined' | ...)",".",[435,873,863,874,877,878,881],{},[448,875,876],{},"declare module 'evlog'"," block registers the catalog globally — once a consumer imports your package, every call to ",[448,879,880],{},"createError()"," in their codebase autocompletes your catalog's entries.",[482,883,885],{"id":884},"package-layout","Package layout",[435,887,888,889,892],{},"A minimal ",[448,890,891],{},"package.json"," for a catalog package:",[507,894,898],{"className":895,"code":896,"filename":891,"language":897,"meta":513,"style":513},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"name\": \"@my-org\u002Fevlog-stripe-errors\",\n  \"version\": \"0.1.0\",\n  \"type\": \"module\",\n  \"main\": \".\u002Fdist\u002Findex.mjs\",\n  \"types\": \".\u002Fdist\u002Findex.d.mts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \".\u002Fdist\u002Findex.d.mts\",\n      \"import\": \".\u002Fdist\u002Findex.mjs\"\n    }\n  },\n  \"files\": [\"dist\"],\n  \"peerDependencies\": {\n    \"evlog\": \"^2\"\n  },\n  \"devDependencies\": {\n    \"evlog\": \"^2\",\n    \"tsdown\": \"^0.21\",\n    \"typescript\": \"^6\"\n  }\n}\n","json",[448,899,900,905,928,948,967,987,1007,1020,1033,1052,1069,1074,1078,1102,1115,1132,1136,1149,1167,1187,1205,1209],{"__ignoreMap":513},[517,901,902],{"class":519,"line":520},[517,903,904],{"class":526},"{\n",[517,906,907,910,913,916,918,921,924,926],{"class":519,"line":549},[517,908,909],{"class":526},"  \"",[517,911,912],{"class":562},"name",[517,914,915],{"class":526},"\"",[517,917,464],{"class":526},[517,919,920],{"class":526}," \"",[517,922,923],{"class":543},"@my-org\u002Fevlog-stripe-errors",[517,925,915],{"class":526},[517,927,618],{"class":526},[517,929,930,932,935,937,939,941,944,946],{"class":519,"line":556},[517,931,909],{"class":526},[517,933,934],{"class":562},"version",[517,936,915],{"class":526},[517,938,464],{"class":526},[517,940,920],{"class":526},[517,942,943],{"class":543},"0.1.0",[517,945,915],{"class":526},[517,947,618],{"class":526},[517,949,950,952,955,957,959,961,963,965],{"class":519,"line":592},[517,951,909],{"class":526},[517,953,954],{"class":562},"type",[517,956,915],{"class":526},[517,958,464],{"class":526},[517,960,920],{"class":526},[517,962,504],{"class":543},[517,964,915],{"class":526},[517,966,618],{"class":526},[517,968,969,971,974,976,978,980,983,985],{"class":519,"line":603},[517,970,909],{"class":526},[517,972,973],{"class":562},"main",[517,975,915],{"class":526},[517,977,464],{"class":526},[517,979,920],{"class":526},[517,981,982],{"class":543},".\u002Fdist\u002Findex.mjs",[517,984,915],{"class":526},[517,986,618],{"class":526},[517,988,989,991,994,996,998,1000,1003,1005],{"class":519,"line":621},[517,990,909],{"class":526},[517,992,993],{"class":562},"types",[517,995,915],{"class":526},[517,997,464],{"class":526},[517,999,920],{"class":526},[517,1001,1002],{"class":543},".\u002Fdist\u002Findex.d.mts",[517,1004,915],{"class":526},[517,1006,618],{"class":526},[517,1008,1009,1011,1014,1016,1018],{"class":519,"line":635},[517,1010,909],{"class":526},[517,1012,1013],{"class":562},"exports",[517,1015,915],{"class":526},[517,1017,464],{"class":526},[517,1019,589],{"class":526},[517,1021,1022,1025,1027,1029,1031],{"class":519,"line":652},[517,1023,1024],{"class":526},"    \"",[517,1026,871],{"class":831},[517,1028,915],{"class":526},[517,1030,464],{"class":526},[517,1032,589],{"class":526},[517,1034,1035,1038,1040,1042,1044,1046,1048,1050],{"class":519,"line":669},[517,1036,1037],{"class":526},"      \"",[517,1039,993],{"class":629},[517,1041,915],{"class":526},[517,1043,464],{"class":526},[517,1045,920],{"class":526},[517,1047,1002],{"class":543},[517,1049,915],{"class":526},[517,1051,618],{"class":526},[517,1053,1054,1056,1058,1060,1062,1064,1066],{"class":519,"line":686},[517,1055,1037],{"class":526},[517,1057,458],{"class":629},[517,1059,915],{"class":526},[517,1061,464],{"class":526},[517,1063,920],{"class":526},[517,1065,982],{"class":543},[517,1067,1068],{"class":526},"\"\n",[517,1070,1071],{"class":519,"line":692},[517,1072,1073],{"class":526},"    }\n",[517,1075,1076],{"class":519,"line":702},[517,1077,689],{"class":526},[517,1079,1080,1082,1085,1087,1089,1092,1094,1097,1099],{"class":519,"line":718},[517,1081,909],{"class":526},[517,1083,1084],{"class":562},"files",[517,1086,915],{"class":526},[517,1088,464],{"class":526},[517,1090,1091],{"class":526}," [",[517,1093,915],{"class":526},[517,1095,1096],{"class":543},"dist",[517,1098,915],{"class":526},[517,1100,1101],{"class":526},"],\n",[517,1103,1104,1106,1109,1111,1113],{"class":519,"line":729},[517,1105,909],{"class":526},[517,1107,1108],{"class":562},"peerDependencies",[517,1110,915],{"class":526},[517,1112,464],{"class":526},[517,1114,589],{"class":526},[517,1116,1117,1119,1121,1123,1125,1127,1130],{"class":519,"line":745},[517,1118,1024],{"class":526},[517,1120,497],{"class":831},[517,1122,915],{"class":526},[517,1124,464],{"class":526},[517,1126,920],{"class":526},[517,1128,1129],{"class":543},"^2",[517,1131,1068],{"class":526},[517,1133,1134],{"class":519,"line":761},[517,1135,689],{"class":526},[517,1137,1138,1140,1143,1145,1147],{"class":519,"line":777},[517,1139,909],{"class":526},[517,1141,1142],{"class":562},"devDependencies",[517,1144,915],{"class":526},[517,1146,464],{"class":526},[517,1148,589],{"class":526},[517,1150,1151,1153,1155,1157,1159,1161,1163,1165],{"class":519,"line":782},[517,1152,1024],{"class":526},[517,1154,497],{"class":831},[517,1156,915],{"class":526},[517,1158,464],{"class":526},[517,1160,920],{"class":526},[517,1162,1129],{"class":543},[517,1164,915],{"class":526},[517,1166,618],{"class":526},[517,1168,1169,1171,1174,1176,1178,1180,1183,1185],{"class":519,"line":789},[517,1170,1024],{"class":526},[517,1172,1173],{"class":831},"tsdown",[517,1175,915],{"class":526},[517,1177,464],{"class":526},[517,1179,920],{"class":526},[517,1181,1182],{"class":543},"^0.21",[517,1184,915],{"class":526},[517,1186,618],{"class":526},[517,1188,1189,1191,1194,1196,1198,1200,1203],{"class":519,"line":803},[517,1190,1024],{"class":526},[517,1192,1193],{"class":831},"typescript",[517,1195,915],{"class":526},[517,1197,464],{"class":526},[517,1199,920],{"class":526},[517,1201,1202],{"class":543},"^6",[517,1204,1068],{"class":526},[517,1206,1207],{"class":519,"line":808},[517,1208,854],{"class":526},[517,1210,1211],{"class":519,"line":825},[517,1212,860],{"class":526},[435,1214,1215,1216,1218],{},"evlog goes in ",[448,1217,1108],{}," — the consumer brings their version, the catalog just imports types from it.",[435,1220,1221,1222,1227,1228,1231,1232,1235],{},"Build with ",[439,1223,1173],{"href":1224,"rel":1225},"https:\u002F\u002Fgithub.com\u002Fsxzz\u002Ftsdown",[1226],"nofollow"," (or any bundler that emits dual ",[448,1229,1230],{},".mjs"," + ",[448,1233,1234],{},".d.mts","):",[507,1237,1240],{"className":509,"code":1238,"filename":1239,"language":512,"meta":513,"style":513},"import { defineConfig } from 'tsdown'\n\nexport default defineConfig({\n  entry: { 'index': 'src\u002Findex.ts' },\n  format: 'esm',\n  dts: true,\n  external: ['evlog'],\n})\n","tsdown.config.ts",[448,1241,1242,1261,1265,1278,1305,1321,1334,1354],{"__ignoreMap":513},[517,1243,1244,1246,1248,1251,1253,1255,1257,1259],{"class":519,"line":520},[517,1245,458],{"class":523},[517,1247,527],{"class":526},[517,1249,1250],{"class":530}," defineConfig",[517,1252,534],{"class":526},[517,1254,537],{"class":523},[517,1256,540],{"class":526},[517,1258,1173],{"class":543},[517,1260,546],{"class":526},[517,1262,1263],{"class":519,"line":549},[517,1264,553],{"emptyLinePlaceholder":552},[517,1266,1267,1269,1272,1274,1276],{"class":519,"line":556},[517,1268,559],{"class":523},[517,1270,1271],{"class":523}," default",[517,1273,1250],{"class":572},[517,1275,575],{"class":530},[517,1277,904],{"class":526},[517,1279,1280,1283,1285,1287,1289,1292,1294,1296,1298,1300,1302],{"class":519,"line":592},[517,1281,1282],{"class":595},"  entry",[517,1284,464],{"class":526},[517,1286,527],{"class":526},[517,1288,540],{"class":526},[517,1290,1291],{"class":595},"index",[517,1293,578],{"class":526},[517,1295,464],{"class":526},[517,1297,540],{"class":526},[517,1299,511],{"class":543},[517,1301,578],{"class":526},[517,1303,1304],{"class":526}," },\n",[517,1306,1307,1310,1312,1314,1317,1319],{"class":519,"line":603},[517,1308,1309],{"class":595},"  format",[517,1311,464],{"class":526},[517,1313,540],{"class":526},[517,1315,1316],{"class":543},"esm",[517,1318,578],{"class":526},[517,1320,618],{"class":526},[517,1322,1323,1326,1328,1332],{"class":519,"line":621},[517,1324,1325],{"class":595},"  dts",[517,1327,464],{"class":526},[517,1329,1331],{"class":1330},"sfNiH"," true",[517,1333,618],{"class":526},[517,1335,1336,1339,1341,1343,1345,1347,1349,1352],{"class":519,"line":635},[517,1337,1338],{"class":595},"  external",[517,1340,464],{"class":526},[517,1342,1091],{"class":530},[517,1344,578],{"class":526},[517,1346,497],{"class":543},[517,1348,578],{"class":526},[517,1350,1351],{"class":530},"]",[517,1353,618],{"class":526},[517,1355,1356,1358],{"class":519,"line":652},[517,1357,792],{"class":526},[517,1359,800],{"class":530},[482,1361,1363],{"id":1362},"consuming-the-package","Consuming the package",[435,1365,1366],{},"Downstream apps install and import — no extra wiring beyond the existing evlog setup:",[507,1368,1372],{"className":1369,"code":1370,"language":1371,"meta":513,"style":513},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @my-org\u002Fevlog-stripe-errors\n","bash",[448,1373,1374],{"__ignoreMap":513},[517,1375,1376,1379,1382],{"class":519,"line":520},[517,1377,1378],{"class":831},"pnpm",[517,1380,1381],{"class":543}," add",[517,1383,1384],{"class":543}," @my-org\u002Fevlog-stripe-errors\n",[507,1386,1388],{"className":509,"code":1387,"language":512,"meta":513,"style":513},"import '@my-org\u002Fevlog-stripe-errors'  \u002F\u002F side-effect: registers the catalog\nimport { createError } from 'evlog'\n\nthrow createError('stripe.card_declined')\n\u002F\u002F                 ^^^^^^^^^^^^^^^^^^^^^^^\n\u002F\u002F autocompletes from the package\n",[448,1389,1390,1403,1422,1426,1444,1449],{"__ignoreMap":513},[517,1391,1392,1394,1396,1398,1400],{"class":519,"line":520},[517,1393,458],{"class":523},[517,1395,540],{"class":526},[517,1397,923],{"class":543},[517,1399,578],{"class":526},[517,1401,1402],{"class":785},"  \u002F\u002F side-effect: registers the catalog\n",[517,1404,1405,1407,1409,1412,1414,1416,1418,1420],{"class":519,"line":549},[517,1406,458],{"class":523},[517,1408,527],{"class":526},[517,1410,1411],{"class":530}," createError",[517,1413,534],{"class":526},[517,1415,537],{"class":523},[517,1417,540],{"class":526},[517,1419,497],{"class":543},[517,1421,546],{"class":526},[517,1423,1424],{"class":519,"line":556},[517,1425,553],{"emptyLinePlaceholder":552},[517,1427,1428,1431,1433,1435,1437,1440,1442],{"class":519,"line":592},[517,1429,1430],{"class":523},"throw",[517,1432,1411],{"class":572},[517,1434,575],{"class":530},[517,1436,578],{"class":526},[517,1438,1439],{"class":543},"stripe.card_declined",[517,1441,578],{"class":526},[517,1443,800],{"class":530},[517,1445,1446],{"class":519,"line":603},[517,1447,1448],{"class":785},"\u002F\u002F                 ^^^^^^^^^^^^^^^^^^^^^^^\n",[517,1450,1451],{"class":519,"line":621},[517,1452,1453],{"class":785},"\u002F\u002F autocompletes from the package\n",[435,1455,1456,1457,1460],{},"Because the augmentation runs at type-check time, the consumer doesn't even need to call ",[448,1458,1459],{},"defineErrorCatalog"," themselves — the import is the registration.",[435,1462,1463,1464,1466,1467,1470,1471,1466,1474,464],{},"For audit catalogs the pattern is identical — replace ",[448,1465,1459],{}," with ",[448,1468,1469],{},"defineAuditCatalog"," and ",[448,1472,1473],{},"RegisteredErrorCatalogs",[448,1475,1476],{},"RegisteredAuditCatalogs",[507,1478,1480],{"className":509,"code":1479,"language":512,"meta":513,"style":513},"import { defineAuditCatalog } from 'evlog'\n\nexport const awsAudit = defineAuditCatalog('aws', {\n  iam_role_assumed: {\n    actor: 'service',\n    target: 'aws.iam.role',\n    severity: 'info',\n  },\n  s3_bucket_deleted: {\n    actor: 'user',\n    target: 'aws.s3.bucket',\n    severity: 'high',\n  },\n} as const)\n\ndeclare module 'evlog' {\n  interface RegisteredAuditCatalogs {\n    aws: typeof awsAudit\n  }\n}\n",[448,1481,1482,1501,1505,1531,1540,1556,1572,1588,1592,1601,1616,1631,1646,1650,1660,1664,1678,1687,1699,1703],{"__ignoreMap":513},[517,1483,1484,1486,1488,1491,1493,1495,1497,1499],{"class":519,"line":520},[517,1485,458],{"class":523},[517,1487,527],{"class":526},[517,1489,1490],{"class":530}," defineAuditCatalog",[517,1492,534],{"class":526},[517,1494,537],{"class":523},[517,1496,540],{"class":526},[517,1498,497],{"class":543},[517,1500,546],{"class":526},[517,1502,1503],{"class":519,"line":549},[517,1504,553],{"emptyLinePlaceholder":552},[517,1506,1507,1509,1511,1514,1516,1518,1520,1522,1525,1527,1529],{"class":519,"line":556},[517,1508,559],{"class":523},[517,1510,563],{"class":562},[517,1512,1513],{"class":530}," awsAudit ",[517,1515,569],{"class":526},[517,1517,1490],{"class":572},[517,1519,575],{"class":530},[517,1521,578],{"class":526},[517,1523,1524],{"class":543},"aws",[517,1526,578],{"class":526},[517,1528,586],{"class":526},[517,1530,589],{"class":526},[517,1532,1533,1536,1538],{"class":519,"line":592},[517,1534,1535],{"class":595},"  iam_role_assumed",[517,1537,464],{"class":526},[517,1539,589],{"class":526},[517,1541,1542,1545,1547,1549,1552,1554],{"class":519,"line":603},[517,1543,1544],{"class":595},"    actor",[517,1546,464],{"class":526},[517,1548,540],{"class":526},[517,1550,1551],{"class":543},"service",[517,1553,578],{"class":526},[517,1555,618],{"class":526},[517,1557,1558,1561,1563,1565,1568,1570],{"class":519,"line":621},[517,1559,1560],{"class":595},"    target",[517,1562,464],{"class":526},[517,1564,540],{"class":526},[517,1566,1567],{"class":543},"aws.iam.role",[517,1569,578],{"class":526},[517,1571,618],{"class":526},[517,1573,1574,1577,1579,1581,1584,1586],{"class":519,"line":635},[517,1575,1576],{"class":595},"    severity",[517,1578,464],{"class":526},[517,1580,540],{"class":526},[517,1582,1583],{"class":543},"info",[517,1585,578],{"class":526},[517,1587,618],{"class":526},[517,1589,1590],{"class":519,"line":652},[517,1591,689],{"class":526},[517,1593,1594,1597,1599],{"class":519,"line":669},[517,1595,1596],{"class":595},"  s3_bucket_deleted",[517,1598,464],{"class":526},[517,1600,589],{"class":526},[517,1602,1603,1605,1607,1609,1612,1614],{"class":519,"line":686},[517,1604,1544],{"class":595},[517,1606,464],{"class":526},[517,1608,540],{"class":526},[517,1610,1611],{"class":543},"user",[517,1613,578],{"class":526},[517,1615,618],{"class":526},[517,1617,1618,1620,1622,1624,1627,1629],{"class":519,"line":692},[517,1619,1560],{"class":595},[517,1621,464],{"class":526},[517,1623,540],{"class":526},[517,1625,1626],{"class":543},"aws.s3.bucket",[517,1628,578],{"class":526},[517,1630,618],{"class":526},[517,1632,1633,1635,1637,1639,1642,1644],{"class":519,"line":702},[517,1634,1576],{"class":595},[517,1636,464],{"class":526},[517,1638,540],{"class":526},[517,1640,1641],{"class":543},"high",[517,1643,578],{"class":526},[517,1645,618],{"class":526},[517,1647,1648],{"class":519,"line":718},[517,1649,689],{"class":526},[517,1651,1652,1654,1656,1658],{"class":519,"line":729},[517,1653,792],{"class":526},[517,1655,795],{"class":523},[517,1657,563],{"class":562},[517,1659,800],{"class":530},[517,1661,1662],{"class":519,"line":745},[517,1663,553],{"emptyLinePlaceholder":552},[517,1665,1666,1668,1670,1672,1674,1676],{"class":519,"line":761},[517,1667,811],{"class":562},[517,1669,814],{"class":562},[517,1671,540],{"class":526},[517,1673,497],{"class":543},[517,1675,578],{"class":526},[517,1677,589],{"class":526},[517,1679,1680,1682,1685],{"class":519,"line":777},[517,1681,828],{"class":562},[517,1683,1684],{"class":831}," RegisteredAuditCatalogs",[517,1686,589],{"class":526},[517,1688,1689,1692,1694,1696],{"class":519,"line":782},[517,1690,1691],{"class":595},"    aws",[517,1693,464],{"class":526},[517,1695,845],{"class":526},[517,1697,1698],{"class":530}," awsAudit\n",[517,1700,1701],{"class":519,"line":789},[517,1702,854],{"class":526},[517,1704,1705],{"class":519,"line":803},[517,1706,860],{"class":526},[482,1708,1710],{"id":1709},"why-bother","Why bother",[435,1712,1713],{},"A catalog package consolidates three things:",[490,1715,1716,1728,1744],{},[469,1717,1718,1721,1722,451,1724,1727],{},[461,1719,1720],{},"Stable identifiers"," — the same ",[448,1723,448],{},[448,1725,1726],{},"action"," lives in one repo, not duplicated across services",[469,1729,1730,1733,1734,442,1737,442,1740,1743],{},[461,1731,1732],{},"Documented errors \u002F actions"," — ",[448,1735,1736],{},"why",[448,1738,1739],{},"fix",[448,1741,1742],{},"severity"," ride along with the type",[469,1745,1746,1749],{},[461,1747,1748],{},"Type-level discoverability"," — consumers see every supported entry in autocomplete",[435,1751,1752,1753,1755],{},"When the catalog grows or evolves (a new error code is added, a ",[448,1754,1739],{}," text is improved), every consuming app picks it up by bumping the version. No string-based registry to keep in sync.",[482,1757,1759],{"id":1758},"real-examples-to-build","Real examples to build",[466,1761,1762,1768,1773,1779,1785],{},[469,1763,1764,1767],{},[448,1765,1766],{},"@my-org\u002Fevlog-rfc7807"," — error catalog matching RFC 7807 problem types",[469,1769,1770,1772],{},[448,1771,923],{}," — every code returned by Stripe APIs",[469,1774,1775,1778],{},[448,1776,1777],{},"@my-org\u002Fevlog-aws-audit"," — AWS-style audit actions for compliance",[469,1780,1781,1784],{},[448,1782,1783],{},"@my-org\u002Fevlog-better-auth-audit"," — audit catalog for Better Auth flows",[469,1786,1787,1790],{},[448,1788,1789],{},"@my-org\u002Fevlog-shopify-errors"," — translated Shopify error responses",[435,1792,1793],{},"The pattern is the same — pick a domain, encode its identifiers as a catalog, ship it.",[1795,1796,1797],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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);}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":513,"searchDepth":549,"depth":549,"links":1799},[1800,1801,1802,1803,1804],{"id":484,"depth":549,"text":485},{"id":884,"depth":549,"text":885},{"id":1362,"depth":549,"text":1363},{"id":1709,"depth":549,"text":1710},{"id":1758,"depth":549,"text":1759},"Package an error catalog or audit catalog as a reusable npm module — `@my-org\u002Fevlog-stripe-errors`, `@my-org\u002Fevlog-aws-audit`, etc.","md",null,{},{"title":322,"icon":325},{"title":322,"description":1805},"xhZYCPWv1bjt_nj3uGhJVkukMfwhoj-xQ44pEQ2Z3TU",[1813,1815],{"title":156,"path":318,"stem":319,"description":1814,"icon":320,"children":-1},"Concrete copy-paste recipes — build your own minimal devtool, pipe to curl + jq, replay history then go live, and aggregate on the consumer side.",{"title":41,"path":332,"stem":333,"description":1816,"icon":44,"children":-1},"Send your logs to external services with evlog adapters. Built-in support for popular observability platforms and custom destinations.",1778336624409]