[{"data":1,"prerenderedAt":2653},["ShallowReactive",2],{"navigation_docs":3,"-docs-under-the-hood-extending-the-compiler":493,"-docs-under-the-hood-extending-the-compiler-surround":2648},[4,46,135,218,257,292,355,377,420],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":45},"Getting Started","i-lucide-rocket","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started",[10,15,20,25,30,35,40],{"title":11,"path":12,"stem":13,"icon":14},"What is Heximon?","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F01.getting-started\u002F01.introduction","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F01.getting-started\u002F02.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002F01.getting-started\u002F03.quick-start","i-lucide-zap",{"title":26,"path":27,"stem":28,"icon":29},"Core Concepts","\u002Fdocs\u002Fgetting-started\u002Fcore-concepts","docs\u002F01.getting-started\u002F04.core-concepts","i-lucide-shapes",{"title":31,"path":32,"stem":33,"icon":34},"Examples","\u002Fdocs\u002Fgetting-started\u002Fexamples","docs\u002F01.getting-started\u002F05.examples","i-lucide-library",{"title":36,"path":37,"stem":38,"icon":39},"Where Next?","\u002Fdocs\u002Fgetting-started\u002Fwhere-next","docs\u002F01.getting-started\u002F06.where-next","i-lucide-signpost",{"title":41,"path":42,"stem":43,"icon":44},"Troubleshooting","\u002Fdocs\u002Fgetting-started\u002Ftroubleshooting","docs\u002F01.getting-started\u002F07.troubleshooting","i-lucide-life-buoy",false,{"title":47,"icon":48,"path":49,"stem":50,"children":51,"page":45},"Essentials","i-lucide-boxes","\u002Fdocs\u002Fessentials","docs\u002F02.essentials",[52,56,61,66,71,76,81,86,91,96,101,105,110,115,120,125,130],{"title":53,"path":54,"stem":55,"icon":48},"Modules & DI","\u002Fdocs\u002Fessentials\u002Fmodules-and-di","docs\u002F02.essentials\u002F01.modules-and-di",{"title":57,"path":58,"stem":59,"icon":60},"Controllers","\u002Fdocs\u002Fessentials\u002Fcontrollers","docs\u002F02.essentials\u002F02.controllers","i-lucide-route",{"title":62,"path":63,"stem":64,"icon":65},"Validation & DTOs","\u002Fdocs\u002Fessentials\u002Fvalidation","docs\u002F02.essentials\u002F03.validation","i-lucide-shield-check",{"title":67,"path":68,"stem":69,"icon":70},"Contracts","\u002Fdocs\u002Fessentials\u002Fcontracts","docs\u002F02.essentials\u002F04.contracts","i-lucide-file-signature",{"title":72,"path":73,"stem":74,"icon":75},"REST Client","\u002Fdocs\u002Fessentials\u002Fclient","docs\u002F02.essentials\u002F05.client","i-lucide-plug",{"title":77,"path":78,"stem":79,"icon":80},"Database","\u002Fdocs\u002Fessentials\u002Fdatabase","docs\u002F02.essentials\u002F06.database","i-lucide-database",{"title":82,"path":83,"stem":84,"icon":85},"Drizzle ORM","\u002Fdocs\u002Fessentials\u002Fdrizzle","docs\u002F02.essentials\u002F07.drizzle","i-lucide-database-zap",{"title":87,"path":88,"stem":89,"icon":90},"Persistence & Transactions","\u002Fdocs\u002Fessentials\u002Fpersistence","docs\u002F02.essentials\u002F08.persistence","i-lucide-database-backup",{"title":92,"path":93,"stem":94,"icon":95},"Migrations","\u002Fdocs\u002Fessentials\u002Fmigrations","docs\u002F02.essentials\u002F09.migrations","i-lucide-git-branch",{"title":97,"path":98,"stem":99,"icon":100},"Authentication","\u002Fdocs\u002Fessentials\u002Fauthentication","docs\u002F02.essentials\u002F10.authentication","i-lucide-key-round",{"title":102,"path":103,"stem":104,"icon":65},"Permissions & scopes","\u002Fdocs\u002Fessentials\u002Fpermissions","docs\u002F02.essentials\u002F11.permissions",{"title":106,"path":107,"stem":108,"icon":109},"Error Handling","\u002Fdocs\u002Fessentials\u002Ferrors","docs\u002F02.essentials\u002F12.errors","i-lucide-triangle-alert",{"title":111,"path":112,"stem":113,"icon":114},"Testing a Heximon App","\u002Fdocs\u002Fessentials\u002Ftesting","docs\u002F02.essentials\u002F13.testing","i-lucide-flask-conical",{"title":116,"path":117,"stem":118,"icon":119},"Test app harness","\u002Fdocs\u002Fessentials\u002Fcreatetestapp","docs\u002F02.essentials\u002F14.createtestapp","i-lucide-test-tube",{"title":121,"path":122,"stem":123,"icon":124},"Logging & Observability","\u002Fdocs\u002Fessentials\u002Flogging","docs\u002F02.essentials\u002F17.logging","i-lucide-scroll-text",{"title":126,"path":127,"stem":128,"icon":129},"Context & Lifecycle","\u002Fdocs\u002Fessentials\u002Fcontext-and-lifecycle","docs\u002F02.essentials\u002F18.context-and-lifecycle","i-lucide-radio",{"title":131,"path":132,"stem":133,"icon":134},"Project Structure","\u002Fdocs\u002Fessentials\u002Fproject-structure","docs\u002F02.essentials\u002F19.project-structure","i-lucide-folder-tree",{"title":136,"icon":137,"path":138,"stem":139,"children":140,"page":45},"Capabilities","i-lucide-sparkles","\u002Fdocs\u002Fcapabilities","docs\u002F03.capabilities",[141,145,150,155,160,164,169,174,179,184,188,193,198,203,208,213],{"title":142,"path":143,"stem":144,"icon":137},"Overview","\u002Fdocs\u002Fcapabilities\u002Foverview","docs\u002F03.capabilities\u002F01.overview",{"title":146,"path":147,"stem":148,"icon":149},"Events","\u002Fdocs\u002Fcapabilities\u002Fevents","docs\u002F03.capabilities\u002F02.events","i-lucide-radio-tower",{"title":151,"path":152,"stem":153,"icon":154},"Queue","\u002Fdocs\u002Fcapabilities\u002Fbackground-jobs","docs\u002F03.capabilities\u002F03.background-jobs","i-lucide-list-ordered",{"title":156,"path":157,"stem":158,"icon":159},"Scheduled Work","\u002Fdocs\u002Fcapabilities\u002Fscheduled-jobs","docs\u002F03.capabilities\u002F04.scheduled-jobs","i-lucide-clock",{"title":161,"path":162,"stem":163,"icon":85},"Caching","\u002Fdocs\u002Fcapabilities\u002Fcaching","docs\u002F03.capabilities\u002F05.caching",{"title":165,"path":166,"stem":167,"icon":168},"Key\u002FValue Storage","\u002Fdocs\u002Fcapabilities\u002Fkey-value","docs\u002F03.capabilities\u002F06.key-value","i-lucide-hard-drive",{"title":170,"path":171,"stem":172,"icon":173},"Blob Storage","\u002Fdocs\u002Fcapabilities\u002Fblob","docs\u002F03.capabilities\u002F07.blob","i-lucide-folder-open",{"title":175,"path":176,"stem":177,"icon":178},"Health & Readiness","\u002Fdocs\u002Fcapabilities\u002Fhealth","docs\u002F03.capabilities\u002F08.health","i-lucide-heart-pulse",{"title":180,"path":181,"stem":182,"icon":183},"Notifications","\u002Fdocs\u002Fcapabilities\u002Fnotifications","docs\u002F03.capabilities\u002F09.notifications","i-lucide-mail",{"title":185,"path":186,"stem":187,"icon":65},"Idempotency","\u002Fdocs\u002Fcapabilities\u002Fidempotency","docs\u002F03.capabilities\u002F10.idempotency",{"title":189,"path":190,"stem":191,"icon":192},"Security Hardening","\u002Fdocs\u002Fcapabilities\u002Fsecurity","docs\u002F03.capabilities\u002F11.security","i-lucide-shield",{"title":194,"path":195,"stem":196,"icon":197},"Observability & Tracing","\u002Fdocs\u002Fcapabilities\u002Fobservability","docs\u002F03.capabilities\u002F12.observability","i-lucide-activity",{"title":199,"path":200,"stem":201,"icon":202},"OpenAPI","\u002Fdocs\u002Fcapabilities\u002Fopenapi","docs\u002F03.capabilities\u002F13.openapi","i-lucide-book-marked",{"title":204,"path":205,"stem":206,"icon":207},"MCP Server","\u002Fdocs\u002Fcapabilities\u002Fmcp","docs\u002F03.capabilities\u002F14.mcp","i-lucide-bot",{"title":209,"path":210,"stem":211,"icon":212},"Schema DTOs","\u002Fdocs\u002Fcapabilities\u002Fschema","docs\u002F03.capabilities\u002F15.schema","i-lucide-file-json",{"title":214,"path":215,"stem":216,"icon":217},"Branded IDs","\u002Fdocs\u002Fcapabilities\u002Fbranded-ids","docs\u002F03.capabilities\u002F16.branded-ids","i-lucide-tag",{"title":219,"icon":220,"path":221,"stem":222,"children":223,"page":45},"Architecture","i-lucide-building","\u002Fdocs\u002Farchitecture","docs\u002F04.architecture",[224,227,232,237,242,247,252],{"title":142,"path":225,"stem":226,"icon":220},"\u002Fdocs\u002Farchitecture\u002Foverview","docs\u002F04.architecture\u002F01.overview",{"title":228,"path":229,"stem":230,"icon":231},"Domain-Driven Design","\u002Fdocs\u002Farchitecture\u002Fddd","docs\u002F04.architecture\u002F02.ddd","i-lucide-hexagon",{"title":233,"path":234,"stem":235,"icon":236},"CQRS","\u002Fdocs\u002Farchitecture\u002Fcqrs","docs\u002F04.architecture\u002F03.cqrs","i-lucide-split",{"title":238,"path":239,"stem":240,"icon":241},"Repository Pattern","\u002Fdocs\u002Farchitecture\u002Frepository-pattern","docs\u002F04.architecture\u002F04.repository-pattern","i-lucide-archive",{"title":243,"path":244,"stem":245,"icon":246},"Integration Events","\u002Fdocs\u002Farchitecture\u002Fintegration-events","docs\u002F04.architecture\u002F05.integration-events","i-lucide-send-horizontal",{"title":248,"path":249,"stem":250,"icon":251},"Saga Orchestration","\u002Fdocs\u002Farchitecture\u002Fsagas","docs\u002F04.architecture\u002F06.sagas","i-lucide-hourglass",{"title":253,"path":254,"stem":255,"icon":256},"Durable Workflows","\u002Fdocs\u002Farchitecture\u002Fworkflows","docs\u002F04.architecture\u002F07.workflows","i-lucide-workflow",{"title":258,"icon":259,"path":260,"stem":261,"children":262,"page":45},"Realtime","i-lucide-cable","\u002Fdocs\u002Frealtime","docs\u002F05.realtime",[263,266,270,274,279,284,288],{"title":142,"path":264,"stem":265,"icon":259},"\u002Fdocs\u002Frealtime\u002Foverview","docs\u002F05.realtime\u002F01.overview",{"title":267,"path":268,"stem":269,"icon":129},"WebSockets","\u002Fdocs\u002Frealtime\u002Fwebsockets","docs\u002F05.realtime\u002F02.websockets",{"title":271,"path":272,"stem":273,"icon":70},"WebSocket Contracts","\u002Fdocs\u002Frealtime\u002Fwebsocket-contracts","docs\u002F05.realtime\u002F03.websocket-contracts",{"title":275,"path":276,"stem":277,"icon":278},"Server-Sent Events","\u002Fdocs\u002Frealtime\u002Fserver-sent-events","docs\u002F05.realtime\u002F04.server-sent-events","i-lucide-rss",{"title":280,"path":281,"stem":282,"icon":283},"Typed Clients","\u002Fdocs\u002Frealtime\u002Ftyped-clients","docs\u002F05.realtime\u002F05.typed-clients","i-lucide-plug-zap",{"title":285,"path":286,"stem":287,"icon":259},"AsyncAPI","\u002Fdocs\u002Frealtime\u002Fasyncapi","docs\u002F05.realtime\u002F06.asyncapi",{"title":289,"path":290,"stem":291,"icon":80},"Durable Objects","\u002Fdocs\u002Frealtime\u002Fdurable-objects","docs\u002F05.realtime\u002F07.durable-objects",{"title":293,"icon":294,"path":295,"stem":296,"children":297,"page":45},"Deploy","i-lucide-cloud-upload","\u002Fdocs\u002Fdeploy","docs\u002F06.deploy",[298,301,306,311,316,321,326,331,336,341,345,350],{"title":142,"path":299,"stem":300,"icon":6},"\u002Fdocs\u002Fdeploy\u002Foverview","docs\u002F06.deploy\u002F01.overview",{"title":302,"path":303,"stem":304,"icon":305},"Node","\u002Fdocs\u002Fdeploy\u002Fnode","docs\u002F06.deploy\u002F02.node","la:node-js",{"title":307,"path":308,"stem":309,"icon":310},"Cloudflare","\u002Fdocs\u002Fdeploy\u002Fcloudflare","docs\u002F06.deploy\u002F03.cloudflare","simple-icons:cloudflare",{"title":312,"path":313,"stem":314,"icon":315},"Vercel","\u002Fdocs\u002Fdeploy\u002Fvercel","docs\u002F06.deploy\u002F04.vercel","ri:vercel-fill",{"title":317,"path":318,"stem":319,"icon":320},"Netlify","\u002Fdocs\u002Fdeploy\u002Fnetlify","docs\u002F06.deploy\u002F05.netlify","i-simple-icons-netlify",{"title":322,"path":323,"stem":324,"icon":325},"AWS Lambda","\u002Fdocs\u002Fdeploy\u002Faws-lambda","docs\u002F06.deploy\u002F06.aws-lambda","hugeicons:aws-lambda",{"title":327,"path":328,"stem":329,"icon":330},"Deno Deploy","\u002Fdocs\u002Fdeploy\u002Fdeno-deploy","docs\u002F06.deploy\u002F07.deno-deploy","simple-icons:denodeploy",{"title":332,"path":333,"stem":334,"icon":335},"Nitro","\u002Fdocs\u002Fdeploy\u002Fnitro","docs\u002F06.deploy\u002F08.nitro","i-unjs-nitro",{"title":337,"path":338,"stem":339,"icon":340},"Nuxt","\u002Fdocs\u002Fdeploy\u002Fnuxt","docs\u002F06.deploy\u002F09.nuxt","i-devicon-nuxt",{"title":342,"path":343,"stem":344,"icon":236},"Mixed-runtime split","\u002Fdocs\u002Fdeploy\u002Fmixed-runtime-split","docs\u002F06.deploy\u002F10.mixed-runtime-split",{"title":346,"path":347,"stem":348,"icon":349},"Hosts","\u002Fdocs\u002Fdeploy\u002Fhosts","docs\u002F06.deploy\u002F11.hosts","i-lucide-map",{"title":351,"path":352,"stem":353,"icon":354},"Cross-service events","\u002Fdocs\u002Fdeploy\u002Fcross-service-events","docs\u002F06.deploy\u002F12.cross-service-events","i-lucide-network",{"title":356,"icon":357,"path":358,"stem":359,"children":360,"page":45},"CLI","i-lucide-terminal","\u002Fdocs\u002Fcli","docs\u002F07.cli",[361,365,369,373],{"title":362,"path":363,"stem":364,"icon":357},"The heximon CLI","\u002Fdocs\u002Fcli\u002Foverview","docs\u002F07.cli\u002F01.overview",{"title":366,"path":367,"stem":368,"icon":137},"Create a New App","\u002Fdocs\u002Fcli\u002Fcreate","docs\u002F07.cli\u002F02.create",{"title":370,"path":371,"stem":372,"icon":95},"Migrations from the CLI","\u002Fdocs\u002Fcli\u002Fmigrations","docs\u002F07.cli\u002F03.migrations",{"title":374,"path":375,"stem":376,"icon":6},"Deploying a Heximon app","\u002Fdocs\u002Fcli\u002Fdeploy","docs\u002F07.cli\u002F04.deploy",{"title":378,"icon":379,"path":380,"stem":381,"children":382,"page":45},"Under the Hood","i-lucide-wrench","\u002Fdocs\u002Funder-the-hood","docs\u002F08.under-the-hood",[383,388,393,397,402,407,411,415],{"title":384,"path":385,"stem":386,"icon":387},"How the Compiler Works","\u002Fdocs\u002Funder-the-hood\u002Fhow-the-compiler-works","docs\u002F08.under-the-hood\u002F01.how-the-compiler-works","i-lucide-cog",{"title":389,"path":390,"stem":391,"icon":392},"Compiler","\u002Fdocs\u002Funder-the-hood\u002Fextending-the-compiler","docs\u002F08.under-the-hood\u002F02.extending-the-compiler","i-lucide-cpu",{"title":394,"path":395,"stem":396,"icon":357},"Compiler Diagnostics","\u002Fdocs\u002Funder-the-hood\u002Fcompiler-diagnostics","docs\u002F08.under-the-hood\u002F03.compiler-diagnostics",{"title":398,"path":399,"stem":400,"icon":401},"Library Mode","\u002Fdocs\u002Funder-the-hood\u002Flibrary-mode","docs\u002F08.under-the-hood\u002F04.library-mode","i-lucide-package",{"title":403,"path":404,"stem":405,"icon":406},"Other bundlers","\u002Fdocs\u002Funder-the-hood\u002Falternate-bundlers","docs\u002F08.under-the-hood\u002F05.alternate-bundlers","i-lucide-blocks",{"title":408,"path":409,"stem":410,"icon":401},"Packages","\u002Fdocs\u002Funder-the-hood\u002Fpackages","docs\u002F08.under-the-hood\u002F06.packages",{"title":412,"path":413,"stem":414,"icon":207},"AI Skills","\u002Fdocs\u002Funder-the-hood\u002Fai-and-agents","docs\u002F08.under-the-hood\u002F07.ai-and-agents",{"title":416,"path":417,"stem":418,"icon":419},"Advanced DI","\u002Fdocs\u002Funder-the-hood\u002Fadvanced-di","docs\u002F08.under-the-hood\u002F08.advanced-di","i-lucide-git-fork",{"title":421,"icon":422,"path":423,"stem":424,"children":425,"page":45},"Recipes","i-lucide-book-open-check","\u002Fdocs\u002Frecipes","docs\u002F09.recipes",[426,431,436,440,444,448,452,456,460,465,469,474,479,484,488],{"title":427,"path":428,"stem":429,"icon":430},"Send an Email","\u002Fdocs\u002Frecipes\u002Fsend-an-email","docs\u002F09.recipes\u002F01.send-an-email","i-lucide-send",{"title":432,"path":433,"stem":434,"icon":435},"Upload a File","\u002Fdocs\u002Frecipes\u002Fupload-a-file","docs\u002F09.recipes\u002F02.upload-a-file","i-lucide-upload",{"title":437,"path":438,"stem":439,"icon":24},"Cache an Expensive Call","\u002Fdocs\u002Frecipes\u002Fcache-an-expensive-call","docs\u002F09.recipes\u002F03.cache-an-expensive-call",{"title":441,"path":442,"stem":443,"icon":154},"Paginate a List","\u002Fdocs\u002Frecipes\u002Fpaginate-a-list","docs\u002F09.recipes\u002F04.paginate-a-list",{"title":445,"path":446,"stem":447,"icon":65},"Protect Admin Routes","\u002Fdocs\u002Frecipes\u002Fprotect-admin-routes","docs\u002F09.recipes\u002F05.protect-admin-routes",{"title":449,"path":450,"stem":451,"icon":178},"Health Probes and a Nightly Job","\u002Fdocs\u002Frecipes\u002Fhealth-probes-and-a-nightly-job","docs\u002F09.recipes\u002F06.health-probes-and-a-nightly-job",{"title":453,"path":454,"stem":455,"icon":80},"Build a CRUD API","\u002Fdocs\u002Frecipes\u002Fcrud-api","docs\u002F09.recipes\u002F07.crud-api",{"title":457,"path":458,"stem":459,"icon":100},"Add Authentication","\u002Fdocs\u002Frecipes\u002Fadd-authentication","docs\u002F09.recipes\u002F08.add-authentication",{"title":461,"path":462,"stem":463,"icon":464},"Background Jobs","\u002Fdocs\u002Frecipes\u002Fbackground-jobs","docs\u002F09.recipes\u002F09.background-jobs","i-lucide-timer",{"title":466,"path":467,"stem":468,"icon":149},"Decouple Features with Events","\u002Fdocs\u002Frecipes\u002Fevent-driven-module","docs\u002F09.recipes\u002F10.event-driven-module",{"title":470,"path":471,"stem":472,"icon":473},"Build a DDD Aggregate","\u002Fdocs\u002Frecipes\u002Fddd-aggregate","docs\u002F09.recipes\u002F11.ddd-aggregate","i-lucide-box",{"title":475,"path":476,"stem":477,"icon":478},"Publish a Feature Package","\u002Fdocs\u002Frecipes\u002Ffeature-package","docs\u002F09.recipes\u002F12.feature-package","i-lucide-package-open",{"title":480,"path":481,"stem":482,"icon":483},"Reliable Integration Events","\u002Fdocs\u002Frecipes\u002Freliable-integration-events","docs\u002F09.recipes\u002F13.reliable-integration-events","i-lucide-inbox",{"title":485,"path":486,"stem":487,"icon":95},"Reactive Choreography","\u002Fdocs\u002Frecipes\u002Freactive-choreography","docs\u002F09.recipes\u002F14.reactive-choreography",{"title":489,"path":490,"stem":491,"icon":492},"Build a Production CRUD API","\u002Fdocs\u002Frecipes\u002Fproduction-crud-api","docs\u002F09.recipes\u002F15.production-crud-api","i-lucide-layers",{"id":494,"title":389,"body":495,"description":2641,"extension":2642,"links":2643,"meta":2644,"navigation":2645,"path":390,"seo":2646,"stem":391,"__hash__":2647},"docs\u002Fdocs\u002F08.under-the-hood\u002F02.extending-the-compiler.md",{"type":496,"value":497,"toc":2630},"minimark",[498,502,509,514,530,633,726,733,737,747,979,997,1013,1017,1029,1389,1399,1403,1411,1685,1689,1699,1966,1987,2004,2023,2029,2033,2047,2337,2350,2354,2379,2488,2495,2552,2556,2563,2574,2583,2593,2597,2626],[499,500,501],"p",{},"Add new discoverable concepts to Heximon — new handler types, transport hooks, or any class a module config lists — by writing a compiler plugin. Each plugin runs through five phases over the classes it discovers.",[499,503,504,505,508],{},"(For what the compiler reads and emits in general, see ",[506,507,384],"a",{"href":385}," — this page assumes that and covers the plugin API: declaring what you discover, analyzing matched classes, contributing DI graph edges, validating, and emitting generated code.)",[510,511,513],"h2",{"id":512},"extend-compilerplugin","Extend CompilerPlugin",[499,515,516,517,521,522,525,526,529],{},"A plugin is a class that extends ",[518,519,520],"code",{},"CompilerPlugin",". Register it in the ",[518,523,524],{},"heximon.config.ts"," config file's ",[518,527,528],{},"plugins"," array; the runner provides it to every recompile.",[531,532,538],"pre",{"className":533,"code":534,"filename":535,"language":536,"meta":537,"style":537},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { CompilerPlugin } from \"@heximon\u002Fcompiler\";\n\nexport class MyFeaturePlugin extends CompilerPlugin {\n  readonly name = \"my-feature\";\n}\n","packages\u002Fmy-feature\u002Fsrc\u002Fcompiler\u002Fmy-feature-plugin.ts","ts","",[518,539,540,576,583,605,627],{"__ignoreMap":537},[541,542,545,549,553,557,560,563,566,570,573],"span",{"class":543,"line":544},"line",1,[541,546,548],{"class":547},"s7zQu","import",[541,550,552],{"class":551},"sMK4o"," {",[541,554,556],{"class":555},"sTEyZ"," CompilerPlugin",[541,558,559],{"class":551}," }",[541,561,562],{"class":547}," from",[541,564,565],{"class":551}," \"",[541,567,569],{"class":568},"sfazB","@heximon\u002Fcompiler",[541,571,572],{"class":551},"\"",[541,574,575],{"class":551},";\n",[541,577,579],{"class":543,"line":578},2,[541,580,582],{"emptyLinePlaceholder":581},true,"\n",[541,584,586,589,593,597,600,602],{"class":543,"line":585},3,[541,587,588],{"class":547},"export",[541,590,592],{"class":591},"spNyl"," class",[541,594,596],{"class":595},"sBMFI"," MyFeaturePlugin",[541,598,599],{"class":591}," extends",[541,601,556],{"class":595},[541,603,604],{"class":551}," {\n",[541,606,608,611,615,618,620,623,625],{"class":543,"line":607},4,[541,609,610],{"class":591},"  readonly",[541,612,614],{"class":613},"swJcz"," name",[541,616,617],{"class":551}," =",[541,619,565],{"class":551},[541,621,622],{"class":568},"my-feature",[541,624,572],{"class":551},[541,626,575],{"class":551},[541,628,630],{"class":543,"line":629},5,[541,631,632],{"class":551},"}\n",[531,634,636],{"className":533,"code":635,"filename":524,"language":536,"meta":537,"style":537},"import { defineHeximonConfig } from \"@heximon\u002Fbuild\";\nimport { MyFeaturePlugin } from \"my-feature\u002Fcompiler\";\n\nexport default defineHeximonConfig({ plugins: [new MyFeaturePlugin()] });\n",[518,637,638,660,681,685],{"__ignoreMap":537},[541,639,640,642,644,647,649,651,653,656,658],{"class":543,"line":544},[541,641,548],{"class":547},[541,643,552],{"class":551},[541,645,646],{"class":555}," defineHeximonConfig",[541,648,559],{"class":551},[541,650,562],{"class":547},[541,652,565],{"class":551},[541,654,655],{"class":568},"@heximon\u002Fbuild",[541,657,572],{"class":551},[541,659,575],{"class":551},[541,661,662,664,666,668,670,672,674,677,679],{"class":543,"line":578},[541,663,548],{"class":547},[541,665,552],{"class":551},[541,667,596],{"class":555},[541,669,559],{"class":551},[541,671,562],{"class":547},[541,673,565],{"class":551},[541,675,676],{"class":568},"my-feature\u002Fcompiler",[541,678,572],{"class":551},[541,680,575],{"class":551},[541,682,683],{"class":543,"line":585},[541,684,582],{"emptyLinePlaceholder":581},[541,686,687,689,692,695,698,701,704,707,710,713,715,718,721,724],{"class":543,"line":607},[541,688,588],{"class":547},[541,690,691],{"class":547}," default",[541,693,646],{"class":694},"s2Zo4",[541,696,697],{"class":555},"(",[541,699,700],{"class":551},"{",[541,702,703],{"class":613}," plugins",[541,705,706],{"class":551},":",[541,708,709],{"class":555}," [",[541,711,712],{"class":551},"new",[541,714,596],{"class":694},[541,716,717],{"class":555},"()] ",[541,719,720],{"class":551},"}",[541,722,723],{"class":555},")",[541,725,575],{"class":551},[499,727,728,729,732],{},"All phases are optional. The runner calls ",[518,730,731],{},"reset()"," before each pass so you can clear any per-compilation state.",[510,734,736],{"id":735},"declare-what-you-discover","Declare what you discover",[499,738,739,742,743,746],{},[518,740,741],{},"discoveryKeys()"," tells the compiler which module-config sub-keys your plugin owns. When a module lists a class under one of those sub-keys, the compiler matches it and delivers it to your ",[518,744,745],{},"analyze"," hook.",[531,748,750],{"className":533,"code":749,"language":536,"meta":537,"style":537},"import { CompilerPlugin, type DiscoveryKey } from \"@heximon\u002Fcompiler\";\n\nexport class MyFeaturePlugin extends CompilerPlugin {\n  readonly name = \"my-feature\";\n\n  override discoveryKeys(): readonly DiscoveryKey[] {\n    return [\n      {\n        namespace: \"myFeature\",\n        key: \"handlers\",\n        category: \"handler\",\n        extends: [{ module: \"@my\u002Fpackage\", export: \"MyHandler\" }],\n      },\n    ];\n  }\n}\n",[518,751,752,781,785,799,815,819,842,851,857,875,892,909,954,960,968,974],{"__ignoreMap":537},[541,753,754,756,758,760,763,766,769,771,773,775,777,779],{"class":543,"line":544},[541,755,548],{"class":547},[541,757,552],{"class":551},[541,759,556],{"class":555},[541,761,762],{"class":551},",",[541,764,765],{"class":547}," type",[541,767,768],{"class":555}," DiscoveryKey",[541,770,559],{"class":551},[541,772,562],{"class":547},[541,774,565],{"class":551},[541,776,569],{"class":568},[541,778,572],{"class":551},[541,780,575],{"class":551},[541,782,783],{"class":543,"line":578},[541,784,582],{"emptyLinePlaceholder":581},[541,786,787,789,791,793,795,797],{"class":543,"line":585},[541,788,588],{"class":547},[541,790,592],{"class":591},[541,792,596],{"class":595},[541,794,599],{"class":591},[541,796,556],{"class":595},[541,798,604],{"class":551},[541,800,801,803,805,807,809,811,813],{"class":543,"line":607},[541,802,610],{"class":591},[541,804,614],{"class":613},[541,806,617],{"class":551},[541,808,565],{"class":551},[541,810,622],{"class":568},[541,812,572],{"class":551},[541,814,575],{"class":551},[541,816,817],{"class":543,"line":629},[541,818,582],{"emptyLinePlaceholder":581},[541,820,822,825,828,831,834,836,839],{"class":543,"line":821},6,[541,823,824],{"class":591},"  override",[541,826,827],{"class":613}," discoveryKeys",[541,829,830],{"class":551},"():",[541,832,833],{"class":591}," readonly",[541,835,768],{"class":595},[541,837,838],{"class":555},"[] ",[541,840,841],{"class":551},"{\n",[541,843,845,848],{"class":543,"line":844},7,[541,846,847],{"class":547},"    return",[541,849,850],{"class":613}," [\n",[541,852,854],{"class":543,"line":853},8,[541,855,856],{"class":551},"      {\n",[541,858,860,863,865,867,870,872],{"class":543,"line":859},9,[541,861,862],{"class":613},"        namespace",[541,864,706],{"class":551},[541,866,565],{"class":551},[541,868,869],{"class":568},"myFeature",[541,871,572],{"class":551},[541,873,874],{"class":551},",\n",[541,876,878,881,883,885,888,890],{"class":543,"line":877},10,[541,879,880],{"class":613},"        key",[541,882,706],{"class":551},[541,884,565],{"class":551},[541,886,887],{"class":568},"handlers",[541,889,572],{"class":551},[541,891,874],{"class":551},[541,893,895,898,900,902,905,907],{"class":543,"line":894},11,[541,896,897],{"class":613},"        category",[541,899,706],{"class":551},[541,901,565],{"class":551},[541,903,904],{"class":568},"handler",[541,906,572],{"class":551},[541,908,874],{"class":551},[541,910,912,915,917,919,921,924,926,928,931,933,935,938,940,942,945,947,949,952],{"class":543,"line":911},12,[541,913,914],{"class":613},"        extends",[541,916,706],{"class":551},[541,918,709],{"class":613},[541,920,700],{"class":551},[541,922,923],{"class":613}," module",[541,925,706],{"class":551},[541,927,565],{"class":551},[541,929,930],{"class":568},"@my\u002Fpackage",[541,932,572],{"class":551},[541,934,762],{"class":551},[541,936,937],{"class":613}," export",[541,939,706],{"class":551},[541,941,565],{"class":551},[541,943,944],{"class":568},"MyHandler",[541,946,572],{"class":551},[541,948,559],{"class":551},[541,950,951],{"class":613},"]",[541,953,874],{"class":551},[541,955,957],{"class":543,"line":956},13,[541,958,959],{"class":551},"      },\n",[541,961,963,966],{"class":543,"line":962},14,[541,964,965],{"class":613},"    ]",[541,967,575],{"class":551},[541,969,971],{"class":543,"line":970},15,[541,972,973],{"class":551},"  }\n",[541,975,977],{"class":543,"line":976},16,[541,978,632],{"class":551},[499,980,981,982,985,986,989,990,992,993,996],{},"A module declaring ",[518,983,984],{},"myFeature: { handlers: [FeedHandler] }"," will have ",[518,987,988],{},"FeedHandler"," matched and passed to ",[518,991,745],{}," as category ",[518,994,995],{},"\"handler\"",". Discovery originates exclusively from the module config — there is no whole-codebase scan.",[499,998,999,1000,1003,1004,1006,1007,1009,1010,1012],{},"The optional ",[518,1001,1002],{},"extends"," list walks each matched class's ",[518,1005,1002],{}," chain to confirm it reaches one of the bases. A class that doesn't reach a base emits the shared inert-provider warning and is dropped before your ",[518,1008,745],{}," runs, so you never handle a mismatch yourself. Omit ",[518,1011,1002],{}," to match every listed class unconditionally.",[510,1014,1016],{"id":1015},"analyze-matched-classes","Analyze matched classes",[499,1018,1019,1021,1022,1025,1026,1028],{},[518,1020,745],{}," runs for every plugin before any ",[518,1023,1024],{},"contributeGraph"," call. Use it to read each matched class's ",[518,1027,1002],{}," arguments, method names, and constructor signature. Publish your results so later phases and other plugins can read them.",[531,1030,1032],{"className":533,"code":1031,"language":536,"meta":537,"style":537},"import type { MatchedClass, CompilerContext, PluginResults } from \"@heximon\u002Fcompiler\";\n\ninterface AnalyzedHandler {\n  readonly reference: ClassReference;\n  readonly category: string;\n}\n\nconst HANDLER_RESULTS = \"my-feature:handlers\" as ResultChannel\u003CAnalyzedHandler[]>;\n\nexport class MyFeaturePlugin extends CompilerPlugin {\n  readonly name = \"my-feature\";\n\n  override analyze(\n    matches: MatchedClass[],\n    _context: CompilerContext,\n    results: PluginResults,\n  ): void {\n    const handlers: AnalyzedHandler[] = matches.map((match) => ({\n      reference: match.reference,\n      category: match.category,\n      \u002F\u002F match.extendsArguments — AST nodes for the `extends MyHandler(…)` arguments\n      \u002F\u002F match.scope — the import scope for resolving references in the declaring file\n      \u002F\u002F match.sourceText — the file's source, for re-emitting expressions verbatim\n    }));\n    results.publish(HANDLER_RESULTS, handlers);\n  }\n}\n",[518,1033,1034,1067,1071,1081,1095,1109,1113,1117,1153,1157,1171,1187,1191,1201,1215,1226,1237,1248,1291,1309,1326,1333,1339,1345,1356,1379,1384],{"__ignoreMap":537},[541,1035,1036,1038,1040,1042,1045,1047,1050,1052,1055,1057,1059,1061,1063,1065],{"class":543,"line":544},[541,1037,548],{"class":547},[541,1039,765],{"class":547},[541,1041,552],{"class":551},[541,1043,1044],{"class":555}," MatchedClass",[541,1046,762],{"class":551},[541,1048,1049],{"class":555}," CompilerContext",[541,1051,762],{"class":551},[541,1053,1054],{"class":555}," PluginResults",[541,1056,559],{"class":551},[541,1058,562],{"class":547},[541,1060,565],{"class":551},[541,1062,569],{"class":568},[541,1064,572],{"class":551},[541,1066,575],{"class":551},[541,1068,1069],{"class":543,"line":578},[541,1070,582],{"emptyLinePlaceholder":581},[541,1072,1073,1076,1079],{"class":543,"line":585},[541,1074,1075],{"class":591},"interface",[541,1077,1078],{"class":595}," AnalyzedHandler",[541,1080,604],{"class":551},[541,1082,1083,1085,1088,1090,1093],{"class":543,"line":607},[541,1084,610],{"class":591},[541,1086,1087],{"class":613}," reference",[541,1089,706],{"class":551},[541,1091,1092],{"class":595}," ClassReference",[541,1094,575],{"class":551},[541,1096,1097,1099,1102,1104,1107],{"class":543,"line":629},[541,1098,610],{"class":591},[541,1100,1101],{"class":613}," category",[541,1103,706],{"class":551},[541,1105,1106],{"class":595}," string",[541,1108,575],{"class":551},[541,1110,1111],{"class":543,"line":821},[541,1112,632],{"class":551},[541,1114,1115],{"class":543,"line":844},[541,1116,582],{"emptyLinePlaceholder":581},[541,1118,1119,1122,1125,1128,1130,1133,1135,1138,1141,1144,1147,1150],{"class":543,"line":853},[541,1120,1121],{"class":591},"const",[541,1123,1124],{"class":555}," HANDLER_RESULTS ",[541,1126,1127],{"class":551},"=",[541,1129,565],{"class":551},[541,1131,1132],{"class":568},"my-feature:handlers",[541,1134,572],{"class":551},[541,1136,1137],{"class":547}," as",[541,1139,1140],{"class":595}," ResultChannel",[541,1142,1143],{"class":551},"\u003C",[541,1145,1146],{"class":595},"AnalyzedHandler",[541,1148,1149],{"class":555},"[]",[541,1151,1152],{"class":551},">;\n",[541,1154,1155],{"class":543,"line":859},[541,1156,582],{"emptyLinePlaceholder":581},[541,1158,1159,1161,1163,1165,1167,1169],{"class":543,"line":877},[541,1160,588],{"class":547},[541,1162,592],{"class":591},[541,1164,596],{"class":595},[541,1166,599],{"class":591},[541,1168,556],{"class":595},[541,1170,604],{"class":551},[541,1172,1173,1175,1177,1179,1181,1183,1185],{"class":543,"line":894},[541,1174,610],{"class":591},[541,1176,614],{"class":613},[541,1178,617],{"class":551},[541,1180,565],{"class":551},[541,1182,622],{"class":568},[541,1184,572],{"class":551},[541,1186,575],{"class":551},[541,1188,1189],{"class":543,"line":911},[541,1190,582],{"emptyLinePlaceholder":581},[541,1192,1193,1195,1198],{"class":543,"line":956},[541,1194,824],{"class":591},[541,1196,1197],{"class":613}," analyze",[541,1199,1200],{"class":551},"(\n",[541,1202,1203,1207,1209,1211,1213],{"class":543,"line":962},[541,1204,1206],{"class":1205},"sHdIc","    matches",[541,1208,706],{"class":551},[541,1210,1044],{"class":595},[541,1212,1149],{"class":555},[541,1214,874],{"class":551},[541,1216,1217,1220,1222,1224],{"class":543,"line":970},[541,1218,1219],{"class":1205},"    _context",[541,1221,706],{"class":551},[541,1223,1049],{"class":595},[541,1225,874],{"class":551},[541,1227,1228,1231,1233,1235],{"class":543,"line":976},[541,1229,1230],{"class":1205},"    results",[541,1232,706],{"class":551},[541,1234,1054],{"class":595},[541,1236,874],{"class":551},[541,1238,1240,1243,1246],{"class":543,"line":1239},17,[541,1241,1242],{"class":551},"  ):",[541,1244,1245],{"class":595}," void",[541,1247,604],{"class":551},[541,1249,1251,1254,1257,1259,1261,1263,1265,1268,1271,1274,1276,1278,1281,1283,1286,1289],{"class":543,"line":1250},18,[541,1252,1253],{"class":591},"    const",[541,1255,1256],{"class":555}," handlers",[541,1258,706],{"class":551},[541,1260,1078],{"class":595},[541,1262,838],{"class":613},[541,1264,1127],{"class":551},[541,1266,1267],{"class":555}," matches",[541,1269,1270],{"class":551},".",[541,1272,1273],{"class":694},"map",[541,1275,697],{"class":613},[541,1277,697],{"class":551},[541,1279,1280],{"class":1205},"match",[541,1282,723],{"class":551},[541,1284,1285],{"class":591}," =>",[541,1287,1288],{"class":613}," (",[541,1290,841],{"class":551},[541,1292,1294,1297,1299,1302,1304,1307],{"class":543,"line":1293},19,[541,1295,1296],{"class":613},"      reference",[541,1298,706],{"class":551},[541,1300,1301],{"class":555}," match",[541,1303,1270],{"class":551},[541,1305,1306],{"class":555},"reference",[541,1308,874],{"class":551},[541,1310,1312,1315,1317,1319,1321,1324],{"class":543,"line":1311},20,[541,1313,1314],{"class":613},"      category",[541,1316,706],{"class":551},[541,1318,1301],{"class":555},[541,1320,1270],{"class":551},[541,1322,1323],{"class":555},"category",[541,1325,874],{"class":551},[541,1327,1329],{"class":543,"line":1328},21,[541,1330,1332],{"class":1331},"sHwdD","      \u002F\u002F match.extendsArguments — AST nodes for the `extends MyHandler(…)` arguments\n",[541,1334,1336],{"class":543,"line":1335},22,[541,1337,1338],{"class":1331},"      \u002F\u002F match.scope — the import scope for resolving references in the declaring file\n",[541,1340,1342],{"class":543,"line":1341},23,[541,1343,1344],{"class":1331},"      \u002F\u002F match.sourceText — the file's source, for re-emitting expressions verbatim\n",[541,1346,1348,1351,1354],{"class":543,"line":1347},24,[541,1349,1350],{"class":551},"    }",[541,1352,1353],{"class":613},"))",[541,1355,575],{"class":551},[541,1357,1359,1361,1363,1366,1368,1371,1373,1375,1377],{"class":543,"line":1358},25,[541,1360,1230],{"class":555},[541,1362,1270],{"class":551},[541,1364,1365],{"class":694},"publish",[541,1367,697],{"class":613},[541,1369,1370],{"class":555},"HANDLER_RESULTS",[541,1372,762],{"class":551},[541,1374,1256],{"class":555},[541,1376,723],{"class":613},[541,1378,575],{"class":551},[541,1380,1382],{"class":543,"line":1381},26,[541,1383,973],{"class":551},[541,1385,1387],{"class":543,"line":1386},27,[541,1388,632],{"class":551},[499,1390,1391,1394,1395,1398],{},[518,1392,1393],{},"ClassIdentity"," resolves re-exported classes to their canonical declaration. ",[518,1396,1397],{},"NameReserver"," produces collision-free aliases for generated import bindings when a name would otherwise clash with another generated binding.",[510,1400,1402],{"id":1401},"contribute-to-the-di-graph","Contribute to the DI graph",[499,1404,1405,1407,1408,1410],{},[518,1406,1024],{}," runs after all plugins finish ",[518,1409,745],{},". Read your published results and add providers or dependency edges so the compiler includes your concept's instances in the generated wiring.",[531,1412,1414],{"className":533,"code":1413,"language":536,"meta":537,"style":537},"import type { DependencyGraph, PluginResults } from \"@heximon\u002Fcompiler\";\n\nexport class MyFeaturePlugin extends CompilerPlugin {\n  readonly name = \"my-feature\";\n\n  override contributeGraph(graph: DependencyGraph, results: PluginResults): void {\n    const handlers = results.read(HANDLER_RESULTS) ?? [];\n    for (const handler of handlers) {\n      graph.addCoreProvider({\n        provide: { module: handler.reference.sourceFile, export: handler.reference.className },\n        useClass: { module: handler.reference.sourceFile, export: handler.reference.className },\n      });\n    }\n  }\n}\n",[518,1415,1416,1443,1447,1461,1477,1481,1513,1543,1564,1578,1622,1663,1672,1677,1681],{"__ignoreMap":537},[541,1417,1418,1420,1422,1424,1427,1429,1431,1433,1435,1437,1439,1441],{"class":543,"line":544},[541,1419,548],{"class":547},[541,1421,765],{"class":547},[541,1423,552],{"class":551},[541,1425,1426],{"class":555}," DependencyGraph",[541,1428,762],{"class":551},[541,1430,1054],{"class":555},[541,1432,559],{"class":551},[541,1434,562],{"class":547},[541,1436,565],{"class":551},[541,1438,569],{"class":568},[541,1440,572],{"class":551},[541,1442,575],{"class":551},[541,1444,1445],{"class":543,"line":578},[541,1446,582],{"emptyLinePlaceholder":581},[541,1448,1449,1451,1453,1455,1457,1459],{"class":543,"line":585},[541,1450,588],{"class":547},[541,1452,592],{"class":591},[541,1454,596],{"class":595},[541,1456,599],{"class":591},[541,1458,556],{"class":595},[541,1460,604],{"class":551},[541,1462,1463,1465,1467,1469,1471,1473,1475],{"class":543,"line":607},[541,1464,610],{"class":591},[541,1466,614],{"class":613},[541,1468,617],{"class":551},[541,1470,565],{"class":551},[541,1472,622],{"class":568},[541,1474,572],{"class":551},[541,1476,575],{"class":551},[541,1478,1479],{"class":543,"line":629},[541,1480,582],{"emptyLinePlaceholder":581},[541,1482,1483,1485,1488,1490,1493,1495,1497,1499,1502,1504,1506,1509,1511],{"class":543,"line":821},[541,1484,824],{"class":591},[541,1486,1487],{"class":613}," contributeGraph",[541,1489,697],{"class":551},[541,1491,1492],{"class":1205},"graph",[541,1494,706],{"class":551},[541,1496,1426],{"class":595},[541,1498,762],{"class":551},[541,1500,1501],{"class":1205}," results",[541,1503,706],{"class":551},[541,1505,1054],{"class":595},[541,1507,1508],{"class":551},"):",[541,1510,1245],{"class":595},[541,1512,604],{"class":551},[541,1514,1515,1517,1519,1521,1523,1525,1528,1530,1532,1535,1538,1541],{"class":543,"line":844},[541,1516,1253],{"class":591},[541,1518,1256],{"class":555},[541,1520,617],{"class":551},[541,1522,1501],{"class":555},[541,1524,1270],{"class":551},[541,1526,1527],{"class":694},"read",[541,1529,697],{"class":613},[541,1531,1370],{"class":555},[541,1533,1534],{"class":613},") ",[541,1536,1537],{"class":551},"??",[541,1539,1540],{"class":613}," []",[541,1542,575],{"class":551},[541,1544,1545,1548,1550,1552,1555,1558,1560,1562],{"class":543,"line":853},[541,1546,1547],{"class":547},"    for",[541,1549,1288],{"class":613},[541,1551,1121],{"class":591},[541,1553,1554],{"class":555}," handler",[541,1556,1557],{"class":551}," of",[541,1559,1256],{"class":555},[541,1561,1534],{"class":613},[541,1563,841],{"class":551},[541,1565,1566,1569,1571,1574,1576],{"class":543,"line":859},[541,1567,1568],{"class":555},"      graph",[541,1570,1270],{"class":551},[541,1572,1573],{"class":694},"addCoreProvider",[541,1575,697],{"class":613},[541,1577,841],{"class":551},[541,1579,1580,1583,1585,1587,1589,1591,1593,1595,1597,1599,1602,1604,1606,1608,1610,1612,1614,1616,1619],{"class":543,"line":877},[541,1581,1582],{"class":613},"        provide",[541,1584,706],{"class":551},[541,1586,552],{"class":551},[541,1588,923],{"class":613},[541,1590,706],{"class":551},[541,1592,1554],{"class":555},[541,1594,1270],{"class":551},[541,1596,1306],{"class":555},[541,1598,1270],{"class":551},[541,1600,1601],{"class":555},"sourceFile",[541,1603,762],{"class":551},[541,1605,937],{"class":613},[541,1607,706],{"class":551},[541,1609,1554],{"class":555},[541,1611,1270],{"class":551},[541,1613,1306],{"class":555},[541,1615,1270],{"class":551},[541,1617,1618],{"class":555},"className",[541,1620,1621],{"class":551}," },\n",[541,1623,1624,1627,1629,1631,1633,1635,1637,1639,1641,1643,1645,1647,1649,1651,1653,1655,1657,1659,1661],{"class":543,"line":894},[541,1625,1626],{"class":613},"        useClass",[541,1628,706],{"class":551},[541,1630,552],{"class":551},[541,1632,923],{"class":613},[541,1634,706],{"class":551},[541,1636,1554],{"class":555},[541,1638,1270],{"class":551},[541,1640,1306],{"class":555},[541,1642,1270],{"class":551},[541,1644,1601],{"class":555},[541,1646,762],{"class":551},[541,1648,937],{"class":613},[541,1650,706],{"class":551},[541,1652,1554],{"class":555},[541,1654,1270],{"class":551},[541,1656,1306],{"class":555},[541,1658,1270],{"class":551},[541,1660,1618],{"class":555},[541,1662,1621],{"class":551},[541,1664,1665,1668,1670],{"class":543,"line":911},[541,1666,1667],{"class":551},"      }",[541,1669,723],{"class":613},[541,1671,575],{"class":551},[541,1673,1674],{"class":543,"line":956},[541,1675,1676],{"class":551},"    }\n",[541,1678,1679],{"class":543,"line":962},[541,1680,973],{"class":551},[541,1682,1683],{"class":543,"line":970},[541,1684,632],{"class":551},[510,1686,1688],{"id":1687},"validate","Validate",[499,1690,1691,1692,1694,1695,1698],{},"Return diagnostics that surface to the user in the dev-server overlay or build output. Reading your ",[518,1693,745],{}," results directly from ",[518,1696,1697],{},"results"," means you don't need to stash them on an instance field to carry them across phases.",[531,1700,1702],{"className":533,"code":1701,"language":536,"meta":537,"style":537},"import { DiagnosticSeverity, type Diagnostic, type PluginResults } from \"@heximon\u002Fcompiler\";\n\nexport class MyFeaturePlugin extends CompilerPlugin {\n  readonly name = \"my-feature\";\n\n  override validate(results: PluginResults): Diagnostic[] {\n    const handlers = results.read(HANDLER_RESULTS) ?? [];\n    return handlers\n      .filter((handler) => handler.category !== \"handler\")\n      .map((handler) => ({\n        severity: DiagnosticSeverity.Error,\n        message: `${handler.reference.className} must extend MyHandler(EventClass)`,\n        hint: \"add the event class as the type argument.\",\n      }));\n  }\n}\n",[518,1703,1704,1738,1742,1756,1772,1776,1799,1825,1832,1868,1888,1904,1934,1950,1958,1962],{"__ignoreMap":537},[541,1705,1706,1708,1710,1713,1715,1717,1720,1722,1724,1726,1728,1730,1732,1734,1736],{"class":543,"line":544},[541,1707,548],{"class":547},[541,1709,552],{"class":551},[541,1711,1712],{"class":555}," DiagnosticSeverity",[541,1714,762],{"class":551},[541,1716,765],{"class":547},[541,1718,1719],{"class":555}," Diagnostic",[541,1721,762],{"class":551},[541,1723,765],{"class":547},[541,1725,1054],{"class":555},[541,1727,559],{"class":551},[541,1729,562],{"class":547},[541,1731,565],{"class":551},[541,1733,569],{"class":568},[541,1735,572],{"class":551},[541,1737,575],{"class":551},[541,1739,1740],{"class":543,"line":578},[541,1741,582],{"emptyLinePlaceholder":581},[541,1743,1744,1746,1748,1750,1752,1754],{"class":543,"line":585},[541,1745,588],{"class":547},[541,1747,592],{"class":591},[541,1749,596],{"class":595},[541,1751,599],{"class":591},[541,1753,556],{"class":595},[541,1755,604],{"class":551},[541,1757,1758,1760,1762,1764,1766,1768,1770],{"class":543,"line":607},[541,1759,610],{"class":591},[541,1761,614],{"class":613},[541,1763,617],{"class":551},[541,1765,565],{"class":551},[541,1767,622],{"class":568},[541,1769,572],{"class":551},[541,1771,575],{"class":551},[541,1773,1774],{"class":543,"line":629},[541,1775,582],{"emptyLinePlaceholder":581},[541,1777,1778,1780,1783,1785,1787,1789,1791,1793,1795,1797],{"class":543,"line":821},[541,1779,824],{"class":591},[541,1781,1782],{"class":613}," validate",[541,1784,697],{"class":551},[541,1786,1697],{"class":1205},[541,1788,706],{"class":551},[541,1790,1054],{"class":595},[541,1792,1508],{"class":551},[541,1794,1719],{"class":595},[541,1796,838],{"class":555},[541,1798,841],{"class":551},[541,1800,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823],{"class":543,"line":844},[541,1802,1253],{"class":591},[541,1804,1256],{"class":555},[541,1806,617],{"class":551},[541,1808,1501],{"class":555},[541,1810,1270],{"class":551},[541,1812,1527],{"class":694},[541,1814,697],{"class":613},[541,1816,1370],{"class":555},[541,1818,1534],{"class":613},[541,1820,1537],{"class":551},[541,1822,1540],{"class":613},[541,1824,575],{"class":551},[541,1826,1827,1829],{"class":543,"line":853},[541,1828,847],{"class":547},[541,1830,1831],{"class":555}," handlers\n",[541,1833,1834,1837,1840,1842,1844,1846,1848,1850,1852,1854,1856,1859,1861,1863,1865],{"class":543,"line":859},[541,1835,1836],{"class":551},"      .",[541,1838,1839],{"class":694},"filter",[541,1841,697],{"class":613},[541,1843,697],{"class":551},[541,1845,904],{"class":1205},[541,1847,723],{"class":551},[541,1849,1285],{"class":591},[541,1851,1554],{"class":555},[541,1853,1270],{"class":551},[541,1855,1323],{"class":555},[541,1857,1858],{"class":551}," !==",[541,1860,565],{"class":551},[541,1862,904],{"class":568},[541,1864,572],{"class":551},[541,1866,1867],{"class":613},")\n",[541,1869,1870,1872,1874,1876,1878,1880,1882,1884,1886],{"class":543,"line":877},[541,1871,1836],{"class":551},[541,1873,1273],{"class":694},[541,1875,697],{"class":613},[541,1877,697],{"class":551},[541,1879,904],{"class":1205},[541,1881,723],{"class":551},[541,1883,1285],{"class":591},[541,1885,1288],{"class":613},[541,1887,841],{"class":551},[541,1889,1890,1893,1895,1897,1899,1902],{"class":543,"line":894},[541,1891,1892],{"class":613},"        severity",[541,1894,706],{"class":551},[541,1896,1712],{"class":555},[541,1898,1270],{"class":551},[541,1900,1901],{"class":555},"Error",[541,1903,874],{"class":551},[541,1905,1906,1909,1911,1914,1916,1918,1920,1922,1924,1926,1929,1932],{"class":543,"line":911},[541,1907,1908],{"class":613},"        message",[541,1910,706],{"class":551},[541,1912,1913],{"class":551}," `${",[541,1915,904],{"class":555},[541,1917,1270],{"class":551},[541,1919,1306],{"class":555},[541,1921,1270],{"class":551},[541,1923,1618],{"class":555},[541,1925,720],{"class":551},[541,1927,1928],{"class":568}," must extend MyHandler(EventClass)",[541,1930,1931],{"class":551},"`",[541,1933,874],{"class":551},[541,1935,1936,1939,1941,1943,1946,1948],{"class":543,"line":956},[541,1937,1938],{"class":613},"        hint",[541,1940,706],{"class":551},[541,1942,565],{"class":551},[541,1944,1945],{"class":568},"add the event class as the type argument.",[541,1947,572],{"class":551},[541,1949,874],{"class":551},[541,1951,1952,1954,1956],{"class":543,"line":962},[541,1953,1667],{"class":551},[541,1955,1353],{"class":613},[541,1957,575],{"class":551},[541,1959,1960],{"class":543,"line":970},[541,1961,973],{"class":551},[541,1963,1964],{"class":543,"line":976},[541,1965,632],{"class":551},[499,1967,1968,1969,1972,1973,1976,1977,1979,1980,1983,1984,1986],{},"Beyond ",[518,1970,1971],{},"severity"," and ",[518,1974,1975],{},"message",", a diagnostic can carry a ",[518,1978,518],{}," (one of the framework's own stable\n",[518,1981,1982],{},"DiagnosticCode"," values — first-party plugins add their codes to that shared const, so a diagnostic's ",[518,1985,518],{},"\nis optional and worth setting only when a consumer needs to branch on the diagnostic's kind).",[499,1988,1989,1990,1288,1992,1995,1996,1999,2000,2003],{},"It can also carry a ",[518,1991,541],{},[518,1993,1994],{},"{ sourceFile, start, end }"," source offsets — the renderer grows a codeframe\npointing at exactly that source) and a ",[518,1997,1998],{},"hint"," (the remediation, shown as the ",[518,2001,2002],{},"╰─ help:"," trailer, kept out of\nthe message).",[499,2005,2006,2007,2011,2012,2015,2016,2019,2020,2022],{},"For an error that points at more than one place — a binding ",[2008,2009,2010],"em",{},"and"," where it was first declared — add\n",[518,2013,2014],{},"labels"," (each ",[518,2017,2018],{},"{ span, message?, isPrimary? }","); the primary label anchors the header and ",[518,2021,541],{},", the rest\nrender as secondary underlines.",[499,2024,2025,2026,2028],{},"Anchoring an error at the offending node turns a vague message into one the user\ncan act on without hunting for the line. See\n",[506,2027,394],{"href":395}," for how the rendered output reads.",[510,2030,2032],{"id":2031},"emit-generated-code","Emit generated code",[499,2034,2035,2038,2039,2042,2043,2046],{},[518,2036,2037],{},"codegen"," returns the files to write into ",[518,2040,2041],{},".heximon\u002F",". It receives the same ",[518,2044,2045],{},"PluginResults"," so you read your analysis directly.",[531,2048,2050],{"className":533,"code":2049,"language":536,"meta":537,"style":537},"import type { CompilerContext, CodegenOutput, PluginResults } from \"@heximon\u002Fcompiler\";\n\nexport class MyFeaturePlugin extends CompilerPlugin {\n  readonly name = \"my-feature\";\n\n  override codegen(context: CompilerContext, results: PluginResults): CodegenOutput {\n    const handlers = results.read(HANDLER_RESULTS) ?? [];\n    const lines: string[] = [];\n    for (const handler of handlers) {\n      lines.push(`\u002F\u002F register handler: ${handler.reference.className}`);\n    }\n    return {\n      files: [{ path: `${context.outputDirectory}\u002Fmy-feature.js`, content: lines.join(\"\\n\") }],\n    };\n  }\n}\n",[518,2051,2052,2083,2087,2101,2117,2121,2151,2177,2196,2214,2251,2255,2261,2324,2329,2333],{"__ignoreMap":537},[541,2053,2054,2056,2058,2060,2062,2064,2067,2069,2071,2073,2075,2077,2079,2081],{"class":543,"line":544},[541,2055,548],{"class":547},[541,2057,765],{"class":547},[541,2059,552],{"class":551},[541,2061,1049],{"class":555},[541,2063,762],{"class":551},[541,2065,2066],{"class":555}," CodegenOutput",[541,2068,762],{"class":551},[541,2070,1054],{"class":555},[541,2072,559],{"class":551},[541,2074,562],{"class":547},[541,2076,565],{"class":551},[541,2078,569],{"class":568},[541,2080,572],{"class":551},[541,2082,575],{"class":551},[541,2084,2085],{"class":543,"line":578},[541,2086,582],{"emptyLinePlaceholder":581},[541,2088,2089,2091,2093,2095,2097,2099],{"class":543,"line":585},[541,2090,588],{"class":547},[541,2092,592],{"class":591},[541,2094,596],{"class":595},[541,2096,599],{"class":591},[541,2098,556],{"class":595},[541,2100,604],{"class":551},[541,2102,2103,2105,2107,2109,2111,2113,2115],{"class":543,"line":607},[541,2104,610],{"class":591},[541,2106,614],{"class":613},[541,2108,617],{"class":551},[541,2110,565],{"class":551},[541,2112,622],{"class":568},[541,2114,572],{"class":551},[541,2116,575],{"class":551},[541,2118,2119],{"class":543,"line":629},[541,2120,582],{"emptyLinePlaceholder":581},[541,2122,2123,2125,2128,2130,2133,2135,2137,2139,2141,2143,2145,2147,2149],{"class":543,"line":821},[541,2124,824],{"class":591},[541,2126,2127],{"class":613}," codegen",[541,2129,697],{"class":551},[541,2131,2132],{"class":1205},"context",[541,2134,706],{"class":551},[541,2136,1049],{"class":595},[541,2138,762],{"class":551},[541,2140,1501],{"class":1205},[541,2142,706],{"class":551},[541,2144,1054],{"class":595},[541,2146,1508],{"class":551},[541,2148,2066],{"class":595},[541,2150,604],{"class":551},[541,2152,2153,2155,2157,2159,2161,2163,2165,2167,2169,2171,2173,2175],{"class":543,"line":844},[541,2154,1253],{"class":591},[541,2156,1256],{"class":555},[541,2158,617],{"class":551},[541,2160,1501],{"class":555},[541,2162,1270],{"class":551},[541,2164,1527],{"class":694},[541,2166,697],{"class":613},[541,2168,1370],{"class":555},[541,2170,1534],{"class":613},[541,2172,1537],{"class":551},[541,2174,1540],{"class":613},[541,2176,575],{"class":551},[541,2178,2179,2181,2184,2186,2188,2190,2192,2194],{"class":543,"line":853},[541,2180,1253],{"class":591},[541,2182,2183],{"class":555}," lines",[541,2185,706],{"class":551},[541,2187,1106],{"class":595},[541,2189,838],{"class":613},[541,2191,1127],{"class":551},[541,2193,1540],{"class":613},[541,2195,575],{"class":551},[541,2197,2198,2200,2202,2204,2206,2208,2210,2212],{"class":543,"line":859},[541,2199,1547],{"class":547},[541,2201,1288],{"class":613},[541,2203,1121],{"class":591},[541,2205,1554],{"class":555},[541,2207,1557],{"class":551},[541,2209,1256],{"class":555},[541,2211,1534],{"class":613},[541,2213,841],{"class":551},[541,2215,2216,2219,2221,2224,2226,2228,2231,2234,2236,2238,2240,2242,2244,2247,2249],{"class":543,"line":877},[541,2217,2218],{"class":555},"      lines",[541,2220,1270],{"class":551},[541,2222,2223],{"class":694},"push",[541,2225,697],{"class":613},[541,2227,1931],{"class":551},[541,2229,2230],{"class":568},"\u002F\u002F register handler: ",[541,2232,2233],{"class":551},"${",[541,2235,904],{"class":555},[541,2237,1270],{"class":551},[541,2239,1306],{"class":555},[541,2241,1270],{"class":551},[541,2243,1618],{"class":555},[541,2245,2246],{"class":551},"}`",[541,2248,723],{"class":613},[541,2250,575],{"class":551},[541,2252,2253],{"class":543,"line":894},[541,2254,1676],{"class":551},[541,2256,2257,2259],{"class":543,"line":911},[541,2258,847],{"class":547},[541,2260,604],{"class":551},[541,2262,2263,2266,2268,2270,2272,2275,2277,2279,2281,2283,2286,2288,2291,2293,2295,2298,2300,2302,2304,2307,2309,2311,2314,2316,2318,2320,2322],{"class":543,"line":956},[541,2264,2265],{"class":613},"      files",[541,2267,706],{"class":551},[541,2269,709],{"class":613},[541,2271,700],{"class":551},[541,2273,2274],{"class":613}," path",[541,2276,706],{"class":551},[541,2278,1913],{"class":551},[541,2280,2132],{"class":555},[541,2282,1270],{"class":551},[541,2284,2285],{"class":555},"outputDirectory",[541,2287,720],{"class":551},[541,2289,2290],{"class":568},"\u002Fmy-feature.js",[541,2292,1931],{"class":551},[541,2294,762],{"class":551},[541,2296,2297],{"class":613}," content",[541,2299,706],{"class":551},[541,2301,2183],{"class":555},[541,2303,1270],{"class":551},[541,2305,2306],{"class":694},"join",[541,2308,697],{"class":613},[541,2310,572],{"class":551},[541,2312,2313],{"class":555},"\\n",[541,2315,572],{"class":551},[541,2317,1534],{"class":613},[541,2319,720],{"class":551},[541,2321,951],{"class":613},[541,2323,874],{"class":551},[541,2325,2326],{"class":543,"line":962},[541,2327,2328],{"class":551},"    };\n",[541,2330,2331],{"class":543,"line":970},[541,2332,973],{"class":551},[541,2334,2335],{"class":543,"line":976},[541,2336,632],{"class":551},[499,2338,2339,2340,2343,2344,2346,2347,2349],{},"Use ",[518,2341,2342],{},"ImportBinder"," (from ",[518,2345,569],{},") to accumulate import specifiers as you build the file, and flush them as a block of ",[518,2348,548],{}," statements at the top.",[510,2351,2353],{"id":2352},"share-results-across-plugins","Share results across plugins",[499,2355,2356,2358,2359,2362,2363,2365,2366,2365,2368,2371,2372,2375,2376,1270],{},[518,2357,2045],{}," carries typed, keyed values between any two plugins. Type your key constant as ",[518,2360,2361],{},"ResultChannel\u003CT>"," so ",[518,2364,1365],{},", ",[518,2367,1527],{},[518,2369,2370],{},"contribute",", and ",[518,2373,2374],{},"collect"," are all checked against ",[518,2377,2378],{},"T",[531,2380,2382],{"className":533,"code":2381,"language":536,"meta":537,"style":537},"\u002F\u002F One plugin writes; a second publish to the same key overwrites the first.\nresults.publish(MY_KEY, value);\n\n\u002F\u002F Any plugin in a later phase reads.\nconst value = results.read(MY_KEY);\n\n\u002F\u002F Extension-point pattern: many plugins append to one shared key.\nresults.contribute(SHARED_KEY, myEntry);\n\u002F\u002F The key's owner collects all contributions in arrival order.\nconst all = results.collect(SHARED_KEY);\n",[518,2383,2384,2389,2407,2411,2416,2436,2440,2445,2463,2468],{"__ignoreMap":537},[541,2385,2386],{"class":543,"line":544},[541,2387,2388],{"class":1331},"\u002F\u002F One plugin writes; a second publish to the same key overwrites the first.\n",[541,2390,2391,2393,2395,2397,2400,2402,2405],{"class":543,"line":578},[541,2392,1697],{"class":555},[541,2394,1270],{"class":551},[541,2396,1365],{"class":694},[541,2398,2399],{"class":555},"(MY_KEY",[541,2401,762],{"class":551},[541,2403,2404],{"class":555}," value)",[541,2406,575],{"class":551},[541,2408,2409],{"class":543,"line":585},[541,2410,582],{"emptyLinePlaceholder":581},[541,2412,2413],{"class":543,"line":607},[541,2414,2415],{"class":1331},"\u002F\u002F Any plugin in a later phase reads.\n",[541,2417,2418,2420,2423,2425,2427,2429,2431,2434],{"class":543,"line":629},[541,2419,1121],{"class":591},[541,2421,2422],{"class":555}," value ",[541,2424,1127],{"class":551},[541,2426,1501],{"class":555},[541,2428,1270],{"class":551},[541,2430,1527],{"class":694},[541,2432,2433],{"class":555},"(MY_KEY)",[541,2435,575],{"class":551},[541,2437,2438],{"class":543,"line":821},[541,2439,582],{"emptyLinePlaceholder":581},[541,2441,2442],{"class":543,"line":844},[541,2443,2444],{"class":1331},"\u002F\u002F Extension-point pattern: many plugins append to one shared key.\n",[541,2446,2447,2449,2451,2453,2456,2458,2461],{"class":543,"line":853},[541,2448,1697],{"class":555},[541,2450,1270],{"class":551},[541,2452,2370],{"class":694},[541,2454,2455],{"class":555},"(SHARED_KEY",[541,2457,762],{"class":551},[541,2459,2460],{"class":555}," myEntry)",[541,2462,575],{"class":551},[541,2464,2465],{"class":543,"line":859},[541,2466,2467],{"class":1331},"\u002F\u002F The key's owner collects all contributions in arrival order.\n",[541,2469,2470,2472,2475,2477,2479,2481,2483,2486],{"class":543,"line":877},[541,2471,1121],{"class":591},[541,2473,2474],{"class":555}," all ",[541,2476,1127],{"class":551},[541,2478,1501],{"class":555},[541,2480,1270],{"class":551},[541,2482,2374],{"class":694},[541,2484,2485],{"class":555},"(SHARED_KEY)",[541,2487,575],{"class":551},[499,2489,2490,2491,2494],{},"Declare inter-plugin dependencies with ",[518,2492,2493],{},"requires"," so the runner constructs and sequences them for you. A required plugin that isn't in the user's list is default-constructed automatically; instances are deduped by class.",[531,2496,2498],{"className":533,"code":2497,"language":536,"meta":537,"style":537},"export class MyFeaturePlugin extends CompilerPlugin {\n  readonly name = \"my-feature\";\n  readonly requires = [HttpPlugin]; \u002F\u002F auto-provided, ordered before this plugin\n}\n",[518,2499,2500,2514,2530,2548],{"__ignoreMap":537},[541,2501,2502,2504,2506,2508,2510,2512],{"class":543,"line":544},[541,2503,588],{"class":547},[541,2505,592],{"class":591},[541,2507,596],{"class":595},[541,2509,599],{"class":591},[541,2511,556],{"class":595},[541,2513,604],{"class":551},[541,2515,2516,2518,2520,2522,2524,2526,2528],{"class":543,"line":578},[541,2517,610],{"class":591},[541,2519,614],{"class":613},[541,2521,617],{"class":551},[541,2523,565],{"class":551},[541,2525,622],{"class":568},[541,2527,572],{"class":551},[541,2529,575],{"class":551},[541,2531,2532,2534,2537,2539,2542,2545],{"class":543,"line":585},[541,2533,610],{"class":591},[541,2535,2536],{"class":613}," requires",[541,2538,617],{"class":551},[541,2540,2541],{"class":555}," [HttpPlugin]",[541,2543,2544],{"class":551},";",[541,2546,2547],{"class":1331}," \u002F\u002F auto-provided, ordered before this plugin\n",[541,2549,2550],{"class":543,"line":607},[541,2551,632],{"class":551},[510,2553,2555],{"id":2554},"library-mode","Library mode",[499,2557,2558,2559,2562],{},"When a Heximon module is precompiled as an npm package, the compiler emits a ",[518,2560,2561],{},"heximon.manifest.json"," carrying each plugin's per-package metadata.",[499,2564,2565,2566,2569,2570,2573],{},"Implement ",[518,2567,2568],{},"emitManifestSection"," in the package build and ",[518,2571,2572],{},"composeBoundary"," in the consuming app build to carry your concept's metadata across the boundary — one hook receives every composed boundary's section for your plugin at once, folds its facts into your own analysis, and returns any concepts the app should re-discover.",[499,2575,2565,2576,1972,2579,2582],{},[518,2577,2578],{},"emitContributions",[518,2580,2581],{},"contributionRegistrar"," to deliver the package's live instances to the app's registries at runtime.",[499,2584,2585,2586,2588,2589,2592],{},"See ",[506,2587,2555],{"href":399}," for the full package setup, including how the ",[518,2590,2591],{},"heximonLibrary()"," Vite plugin orchestrates the emit.",[510,2594,2596],{"id":2595},"see-also","See also",[2598,2599,2600,2606,2611,2620],"ul",{},[2601,2602,2603,2605],"li",{},[506,2604,384],{"href":385}," — the build-step framing, the class-in\u002FJS-out proof, and the editor feedback loop this page builds on.",[2601,2607,2608,2610],{},[506,2609,2555],{"href":399}," — precompiling a module as an npm package bearing a cross-package manifest.",[2601,2612,2613,2616,2617,2619],{},[506,2614,2615],{"href":409},"Packages overview"," — where ",[518,2618,569],{}," sits in the layer diagram.",[2601,2621,2622,2625],{},[506,2623,2624],{"href":54},"Modules"," — how a module's config drives the DI graph the compiler emits.",[2627,2628,2629],"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 .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 .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}",{"title":537,"searchDepth":578,"depth":578,"links":2631},[2632,2633,2634,2635,2636,2637,2638,2639,2640],{"id":512,"depth":578,"text":513},{"id":735,"depth":578,"text":736},{"id":1015,"depth":578,"text":1016},{"id":1401,"depth":578,"text":1402},{"id":1687,"depth":578,"text":1688},{"id":2031,"depth":578,"text":2032},{"id":2352,"depth":578,"text":2353},{"id":2554,"depth":578,"text":2555},{"id":2595,"depth":578,"text":2596},"CompilerPlugin, discoveryKeys, DiscoveryKey, MatchedClass, analyze, contributeGraph, validate, codegen, PluginResults, ResultChannel, ClassIdentity, NameReserver, Manifest, ManifestAssembler.","md",null,{},{"icon":392},{"title":389,"description":2641},"EF-z47SNla5nfIHkh8CvM53uysv0OgYcyZ7tP0qYq0g",[2649,2651],{"title":384,"path":385,"stem":386,"description":2650,"icon":387,"children":-1},"Why Heximon compiles a static DI graph ahead of time instead of resolving it at boot, what the compiler reads from your source, what it emits into .heximon\u002F, and the verdicts.gen.d.ts feedback loop that surfaces DI mistakes in your editor.",{"title":394,"path":395,"stem":396,"description":2652,"icon":357,"children":-1},"How a Heximon build error reads — the severity header, the area\u002Fslug code, the source codeframe, the help trailer, the dev-server overlay, and the compact CI form.",1783300761903]