[{"data":1,"prerenderedAt":1614},["ShallowReactive",2],{"navigation_docs":3,"-docs-under-the-hood-how-the-compiler-works":493,"-docs-under-the-hood-how-the-compiler-works-surround":1609},[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":384,"body":495,"description":1602,"extension":1603,"links":1604,"meta":1605,"navigation":1606,"path":385,"seo":1607,"stem":386,"__hash__":1608},"docs\u002Fdocs\u002F08.under-the-hood\u002F01.how-the-compiler-works.md",{"type":496,"value":497,"toc":1594},"minimark",[498,502,507,510,526,545,549,568,633,636,640,643,1318,1339,1355,1421,1435,1439,1453,1461,1468,1516,1541,1545,1565,1569,1590],[499,500,501],"p",{},"Every framework with dependency injection has to answer the same question at some point: \"given this\nclass's constructor, where do the arguments come from?\" Most answer it at runtime — a container walks\nyour classes on every boot, matches constructor parameters to registered providers, and builds instances\nin the right order. Heximon answers it once, ahead of time, as part of your build. This page is about\nthat decision and what it buys you.",[503,504,506],"h2",{"id":505},"why-a-build-step","Why a build step",[499,508,509],{},"The wiring problem — \"which concrete class satisfies this constructor parameter\" — doesn't change\nbetween requests, and for most apps it doesn't change between deploys either. It's determined entirely\nby your source: which classes exist, what they ask for, which module lists them. That's exactly the kind\nof problem a build step is good at solving once instead of paying for on every cold start.",[499,511,512,513,517,518,521,522,525],{},"You already trust a build step for this shape of work — a bundler resolves your imports and produces\na dependency graph before your app runs a single line. Heximon's compiler is the same kind of tool, just\nreading one more layer: not only \"what does this file import\" but \"what does this class's constructor\nneed, and which other class in the graph provides it.\" It runs as part of ",[514,515,516],"code",{},"pnpm dev"," and ",[514,519,520],{},"pnpm build","\nvia the ",[514,523,524],{},"heximon()"," Vite plugin, the same place your bundler already runs.",[499,527,528,529,532,533,536,537,540,541,544],{},"The payoff: no runtime container. ",[514,530,531],{},"app.get(UsersRepository)"," doesn't walk anything at request time — the\ncompiler already decided that ",[514,534,535],{},"UsersRepository"," is built with ",[514,538,539],{},"new UsersRepository()"," and wrote that call\ninto a generated file. A missing dependency isn't a ",[514,542,543],{},"5xx"," in production; it's a build that never shipped.",[503,546,548],{"id":547},"what-the-compiler-reads","What the compiler reads",[499,550,551,552,555,556,563,564,567],{},"The compiler starts from your module configs, not a whole-codebase scan — if a class isn't listed in a\n",[514,553,554],{},"Module({...})",", it doesn't exist to the compiler. From there it reads three things per class, using\n",[557,558,562],"a",{"href":559,"rel":560},"https:\u002F\u002Foxc.rs",[561],"nofollow","oxc"," (a Rust-based parser, not ",[514,565,566],{},"tsc",") to parse your source without type-checking it:",[569,570,571,597,612],"ul",{},[572,573,574,578,579,582,583,582,586,589,590,582,593,596],"li",{},[575,576,577],"strong",{},"Module configs"," — ",[514,580,581],{},"providers",", ",[514,584,585],{},"imports",[514,587,588],{},"exports",", and each plugin's namespace key\n(",[514,591,592],{},"http: { controllers }",[514,594,595],{},"events: { handlers }",", …) — tell it which classes exist and how modules\ncompose.",[572,598,599,602,603,607,608,611],{},[575,600,601],{},"Constructor signatures"," — a class's constructor parameter ",[604,605,606],"em",{},"types"," are its dependency declaration.\nNo injection annotations, no reflection: ",[514,609,610],{},"constructor(private readonly users: UsersRepository)"," tells\nthe compiler exactly what to pass.",[572,613,614,617,618,621,622,625,626,582,629,632],{},[575,615,616],{},"Heritage clauses"," — the ",[514,619,620],{},"extends","\u002F",[514,623,624],{},"implements"," clause a listed class declares (",[514,627,628],{},"implements Controller\u003C\"\u002Fusers\">",[514,630,631],{},"implements EventHandler\u003COrderPlaced>",") tells the compiler which kind of concept\nit's looking at, and its type argument carries the binding (the route prefix, the event class, …).",[499,634,635],{},"That's the entire input. No decorators to read, no metadata to reflect on, no runtime scan.",[503,637,639],{"id":638},"what-it-emits","What it emits",[499,641,642],{},"Take a real module — a controller with one dependency. Here's what you write, and what the compiler emits\nfrom it:",[644,645,646,832,1199],"code-group",{},[647,648,654],"pre",{"className":649,"code":650,"filename":651,"language":652,"meta":653,"style":653},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Module } from \"@heximon\u002Fruntime\";\nimport { UsersController } from \".\u002Fusers.controller\";\nimport { UsersRepository } from \".\u002Fusers.repository\";\n\nexport class UsersModule extends Module({\n  providers: [UsersRepository],\n  http: { controllers: [UsersController] },\n  exports: [UsersRepository],\n}) {}\n","src\u002Fusers\u002Fusers.module.ts","ts","",[514,655,656,692,715,738,745,771,787,808,820],{"__ignoreMap":653},[657,658,661,665,669,673,676,679,682,686,689],"span",{"class":659,"line":660},"line",1,[657,662,664],{"class":663},"s7zQu","import",[657,666,668],{"class":667},"sMK4o"," {",[657,670,672],{"class":671},"sTEyZ"," Module",[657,674,675],{"class":667}," }",[657,677,678],{"class":663}," from",[657,680,681],{"class":667}," \"",[657,683,685],{"class":684},"sfazB","@heximon\u002Fruntime",[657,687,688],{"class":667},"\"",[657,690,691],{"class":667},";\n",[657,693,695,697,699,702,704,706,708,711,713],{"class":659,"line":694},2,[657,696,664],{"class":663},[657,698,668],{"class":667},[657,700,701],{"class":671}," UsersController",[657,703,675],{"class":667},[657,705,678],{"class":663},[657,707,681],{"class":667},[657,709,710],{"class":684},".\u002Fusers.controller",[657,712,688],{"class":667},[657,714,691],{"class":667},[657,716,718,720,722,725,727,729,731,734,736],{"class":659,"line":717},3,[657,719,664],{"class":663},[657,721,668],{"class":667},[657,723,724],{"class":671}," UsersRepository",[657,726,675],{"class":667},[657,728,678],{"class":663},[657,730,681],{"class":667},[657,732,733],{"class":684},".\u002Fusers.repository",[657,735,688],{"class":667},[657,737,691],{"class":667},[657,739,741],{"class":659,"line":740},4,[657,742,744],{"emptyLinePlaceholder":743},true,"\n",[657,746,748,751,755,759,762,765,768],{"class":659,"line":747},5,[657,749,750],{"class":663},"export",[657,752,754],{"class":753},"spNyl"," class",[657,756,758],{"class":757},"sBMFI"," UsersModule",[657,760,761],{"class":753}," extends",[657,763,672],{"class":764},"s2Zo4",[657,766,767],{"class":671},"(",[657,769,770],{"class":667},"{\n",[657,772,774,778,781,784],{"class":659,"line":773},6,[657,775,777],{"class":776},"swJcz","  providers",[657,779,780],{"class":667},":",[657,782,783],{"class":671}," [UsersRepository]",[657,785,786],{"class":667},",\n",[657,788,790,793,795,797,800,802,805],{"class":659,"line":789},7,[657,791,792],{"class":776},"  http",[657,794,780],{"class":667},[657,796,668],{"class":667},[657,798,799],{"class":776}," controllers",[657,801,780],{"class":667},[657,803,804],{"class":671}," [UsersController] ",[657,806,807],{"class":667},"},\n",[657,809,811,814,816,818],{"class":659,"line":810},8,[657,812,813],{"class":776},"  exports",[657,815,780],{"class":667},[657,817,783],{"class":671},[657,819,786],{"class":667},[657,821,823,826,829],{"class":659,"line":822},9,[657,824,825],{"class":667},"}",[657,827,828],{"class":671},") ",[657,830,831],{"class":667},"{}\n",[647,833,836],{"className":649,"code":834,"filename":835,"language":652,"meta":653,"style":653},"import type { Controller, Get } from \"@heximon\u002Fhttp\";\nimport { type User, UsersRepository } from \".\u002Fusers.repository\";\n\nexport class UsersController implements Controller\u003C\"\u002Fusers\"> {\n  constructor(private readonly users: UsersRepository) {}\n\n  public async list(_action: Get\u003C\"\u002F\", { scopes: [\"public\"] }>): Promise\u003CUser[]> {\n    return this.users.list();\n  }\n\n  public async get(action: Get\u003C\"\u002F:id\">): Promise\u003CUser | { error: string }> {\n    const user = await this.users.findById(action.request.pathParams.id);\n    return user ?? { error: \"User not found\" };\n  }\n}\n","src\u002Fusers\u002Fusers.controller.ts",[514,837,838,869,896,900,929,956,960,1028,1050,1055,1060,1115,1162,1188,1193],{"__ignoreMap":653},[657,839,840,842,845,847,850,853,856,858,860,862,865,867],{"class":659,"line":660},[657,841,664],{"class":663},[657,843,844],{"class":663}," type",[657,846,668],{"class":667},[657,848,849],{"class":671}," Controller",[657,851,852],{"class":667},",",[657,854,855],{"class":671}," Get",[657,857,675],{"class":667},[657,859,678],{"class":663},[657,861,681],{"class":667},[657,863,864],{"class":684},"@heximon\u002Fhttp",[657,866,688],{"class":667},[657,868,691],{"class":667},[657,870,871,873,875,877,880,882,884,886,888,890,892,894],{"class":659,"line":694},[657,872,664],{"class":663},[657,874,668],{"class":667},[657,876,844],{"class":663},[657,878,879],{"class":671}," User",[657,881,852],{"class":667},[657,883,724],{"class":671},[657,885,675],{"class":667},[657,887,678],{"class":663},[657,889,681],{"class":667},[657,891,733],{"class":684},[657,893,688],{"class":667},[657,895,691],{"class":667},[657,897,898],{"class":659,"line":717},[657,899,744],{"emptyLinePlaceholder":743},[657,901,902,904,906,908,911,913,916,918,921,923,926],{"class":659,"line":740},[657,903,750],{"class":663},[657,905,754],{"class":753},[657,907,701],{"class":757},[657,909,910],{"class":753}," implements",[657,912,849],{"class":757},[657,914,915],{"class":667},"\u003C",[657,917,688],{"class":667},[657,919,920],{"class":684},"\u002Fusers",[657,922,688],{"class":667},[657,924,925],{"class":667},">",[657,927,928],{"class":667}," {\n",[657,930,931,934,936,939,942,946,948,950,953],{"class":659,"line":747},[657,932,933],{"class":753},"  constructor",[657,935,767],{"class":667},[657,937,938],{"class":753},"private",[657,940,941],{"class":753}," readonly",[657,943,945],{"class":944},"sHdIc"," users",[657,947,780],{"class":667},[657,949,724],{"class":757},[657,951,952],{"class":667},")",[657,954,955],{"class":667}," {}\n",[657,957,958],{"class":659,"line":773},[657,959,744],{"emptyLinePlaceholder":743},[657,961,962,965,968,971,973,976,978,980,982,984,986,988,990,992,995,997,1000,1002,1005,1007,1010,1013,1016,1018,1021,1024,1026],{"class":659,"line":789},[657,963,964],{"class":753},"  public",[657,966,967],{"class":753}," async",[657,969,970],{"class":776}," list",[657,972,767],{"class":667},[657,974,975],{"class":944},"_action",[657,977,780],{"class":667},[657,979,855],{"class":757},[657,981,915],{"class":667},[657,983,688],{"class":667},[657,985,621],{"class":684},[657,987,688],{"class":667},[657,989,852],{"class":667},[657,991,668],{"class":667},[657,993,994],{"class":776}," scopes",[657,996,780],{"class":667},[657,998,999],{"class":671}," [",[657,1001,688],{"class":667},[657,1003,1004],{"class":684},"public",[657,1006,688],{"class":667},[657,1008,1009],{"class":671},"] ",[657,1011,1012],{"class":667},"}>):",[657,1014,1015],{"class":757}," Promise",[657,1017,915],{"class":667},[657,1019,1020],{"class":757},"User",[657,1022,1023],{"class":671},"[]",[657,1025,925],{"class":667},[657,1027,928],{"class":667},[657,1029,1030,1033,1036,1039,1042,1045,1048],{"class":659,"line":810},[657,1031,1032],{"class":663},"    return",[657,1034,1035],{"class":667}," this.",[657,1037,1038],{"class":671},"users",[657,1040,1041],{"class":667},".",[657,1043,1044],{"class":764},"list",[657,1046,1047],{"class":776},"()",[657,1049,691],{"class":667},[657,1051,1052],{"class":659,"line":822},[657,1053,1054],{"class":667},"  }\n",[657,1056,1058],{"class":659,"line":1057},10,[657,1059,744],{"emptyLinePlaceholder":743},[657,1061,1063,1065,1067,1070,1072,1075,1077,1079,1081,1083,1086,1088,1091,1093,1095,1097,1100,1102,1105,1107,1110,1113],{"class":659,"line":1062},11,[657,1064,964],{"class":753},[657,1066,967],{"class":753},[657,1068,1069],{"class":776}," get",[657,1071,767],{"class":667},[657,1073,1074],{"class":944},"action",[657,1076,780],{"class":667},[657,1078,855],{"class":757},[657,1080,915],{"class":667},[657,1082,688],{"class":667},[657,1084,1085],{"class":684},"\u002F:id",[657,1087,688],{"class":667},[657,1089,1090],{"class":667},">):",[657,1092,1015],{"class":757},[657,1094,915],{"class":667},[657,1096,1020],{"class":757},[657,1098,1099],{"class":667}," |",[657,1101,668],{"class":667},[657,1103,1104],{"class":776}," error",[657,1106,780],{"class":667},[657,1108,1109],{"class":757}," string",[657,1111,1112],{"class":667}," }>",[657,1114,928],{"class":667},[657,1116,1118,1121,1124,1127,1130,1132,1134,1136,1139,1141,1143,1145,1148,1150,1153,1155,1158,1160],{"class":659,"line":1117},12,[657,1119,1120],{"class":753},"    const",[657,1122,1123],{"class":671}," user",[657,1125,1126],{"class":667}," =",[657,1128,1129],{"class":663}," await",[657,1131,1035],{"class":667},[657,1133,1038],{"class":671},[657,1135,1041],{"class":667},[657,1137,1138],{"class":764},"findById",[657,1140,767],{"class":776},[657,1142,1074],{"class":671},[657,1144,1041],{"class":667},[657,1146,1147],{"class":671},"request",[657,1149,1041],{"class":667},[657,1151,1152],{"class":671},"pathParams",[657,1154,1041],{"class":667},[657,1156,1157],{"class":671},"id",[657,1159,952],{"class":776},[657,1161,691],{"class":667},[657,1163,1165,1167,1169,1172,1174,1176,1178,1180,1183,1185],{"class":659,"line":1164},13,[657,1166,1032],{"class":663},[657,1168,1123],{"class":671},[657,1170,1171],{"class":667}," ??",[657,1173,668],{"class":667},[657,1175,1104],{"class":776},[657,1177,780],{"class":667},[657,1179,681],{"class":667},[657,1181,1182],{"class":684},"User not found",[657,1184,688],{"class":667},[657,1186,1187],{"class":667}," };\n",[657,1189,1191],{"class":659,"line":1190},14,[657,1192,1054],{"class":667},[657,1194,1196],{"class":659,"line":1195},15,[657,1197,1198],{"class":667},"}\n",[647,1200,1205],{"className":1201,"code":1202,"filename":1203,"language":1204,"meta":653,"style":653},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F GENERATED by Heximon — do not edit.\nexport async function initUsersModule(inputs, disposables) {\n  const UsersRepository_ = new UsersRepository();\n  const UsersController_ = new UsersController(UsersRepository_);\n  return {\n    UsersRepository: UsersRepository_,\n    UsersController: UsersController_,\n  };\n}\n",".heximon\u002Fmodules\u002FUsersModule.wiring.js","js",[514,1206,1207,1213,1239,1258,1280,1287,1298,1309,1314],{"__ignoreMap":653},[657,1208,1209],{"class":659,"line":660},[657,1210,1212],{"class":1211},"sHwdD","\u002F\u002F GENERATED by Heximon — do not edit.\n",[657,1214,1215,1217,1219,1222,1225,1227,1230,1232,1235,1237],{"class":659,"line":694},[657,1216,750],{"class":663},[657,1218,967],{"class":753},[657,1220,1221],{"class":753}," function",[657,1223,1224],{"class":764}," initUsersModule",[657,1226,767],{"class":667},[657,1228,1229],{"class":944},"inputs",[657,1231,852],{"class":667},[657,1233,1234],{"class":944}," disposables",[657,1236,952],{"class":667},[657,1238,928],{"class":667},[657,1240,1241,1244,1247,1249,1252,1254,1256],{"class":659,"line":717},[657,1242,1243],{"class":753},"  const",[657,1245,1246],{"class":671}," UsersRepository_",[657,1248,1126],{"class":667},[657,1250,1251],{"class":667}," new",[657,1253,724],{"class":764},[657,1255,1047],{"class":776},[657,1257,691],{"class":667},[657,1259,1260,1262,1265,1267,1269,1271,1273,1276,1278],{"class":659,"line":740},[657,1261,1243],{"class":753},[657,1263,1264],{"class":671}," UsersController_",[657,1266,1126],{"class":667},[657,1268,1251],{"class":667},[657,1270,701],{"class":764},[657,1272,767],{"class":776},[657,1274,1275],{"class":671},"UsersRepository_",[657,1277,952],{"class":776},[657,1279,691],{"class":667},[657,1281,1282,1285],{"class":659,"line":747},[657,1283,1284],{"class":663},"  return",[657,1286,928],{"class":667},[657,1288,1289,1292,1294,1296],{"class":659,"line":773},[657,1290,1291],{"class":776},"    UsersRepository",[657,1293,780],{"class":667},[657,1295,1246],{"class":671},[657,1297,786],{"class":667},[657,1299,1300,1303,1305,1307],{"class":659,"line":789},[657,1301,1302],{"class":776},"    UsersController",[657,1304,780],{"class":667},[657,1306,1264],{"class":671},[657,1308,786],{"class":667},[657,1310,1311],{"class":659,"line":810},[657,1312,1313],{"class":667},"  };\n",[657,1315,1316],{"class":659,"line":822},[657,1317,1198],{"class":667},[499,1319,1320,1321,1323,1324,1327,1328,1330,1331,1334,1335,1338],{},"That's it — plain, readable JS. ",[514,1322,535],{}," is constructed first because ",[514,1325,1326],{},"UsersController"," needs\nit; the resolved instance is passed straight into ",[514,1329,1326],{},"'s constructor as a positional\nargument. No container, no token lookup, no reflection at runtime — just a function call the compiler\nalready knows is correct because it checked your constructor signature against the module's provider\nlist at build time. Every module gets one of these init functions, and a top-level ",[514,1332,1333],{},"createApp()"," (also\ngenerated) composes them into the app your ",[514,1336,1337],{},"fetch"," handler serves.",[499,1340,1341,1342,621,1345,1348,1349,1351,1352,1354],{},"The snippet above is trimmed for the page — the real generated output additionally wires the route\ntable, the request-logging middleware inherited from the root module, and the app's ",[514,1343,1344],{},"get",[514,1346,1347],{},"shutdown","\nsurface. Read the full thing yourself: by default ",[514,1350,516],{}," (and ",[514,1353,520],{},") hold this wiring in memory\nand never touch disk, so opt into writing it out first:",[647,1356,1359],{"className":649,"code":1357,"filename":1358,"language":652,"meta":653,"style":653},"import { defineHeximonConfig } from \"@heximon\u002Fbuild\";\n\nexport default defineHeximonConfig({\n  debug: true,\n});\n","heximon.config.ts",[514,1360,1361,1383,1387,1400,1413],{"__ignoreMap":653},[657,1362,1363,1365,1367,1370,1372,1374,1376,1379,1381],{"class":659,"line":660},[657,1364,664],{"class":663},[657,1366,668],{"class":667},[657,1368,1369],{"class":671}," defineHeximonConfig",[657,1371,675],{"class":667},[657,1373,678],{"class":663},[657,1375,681],{"class":667},[657,1377,1378],{"class":684},"@heximon\u002Fbuild",[657,1380,688],{"class":667},[657,1382,691],{"class":667},[657,1384,1385],{"class":659,"line":694},[657,1386,744],{"emptyLinePlaceholder":743},[657,1388,1389,1391,1394,1396,1398],{"class":659,"line":717},[657,1390,750],{"class":663},[657,1392,1393],{"class":663}," default",[657,1395,1369],{"class":764},[657,1397,767],{"class":671},[657,1399,770],{"class":667},[657,1401,1402,1405,1407,1411],{"class":659,"line":740},[657,1403,1404],{"class":776},"  debug",[657,1406,780],{"class":667},[657,1408,1410],{"class":1409},"sfNiH"," true",[657,1412,786],{"class":667},[657,1414,1415,1417,1419],{"class":659,"line":747},[657,1416,825],{"class":667},[657,1418,952],{"class":671},[657,1420,691],{"class":667},[499,1422,1423,1424,1426,1427,1430,1431,1434],{},"Then run ",[514,1425,516],{}," in ",[514,1428,1429],{},"examples\u002Fladder\u002FL01-minimal"," and open ",[514,1432,1433],{},".heximon\u002F"," at the project root.",[503,1436,1438],{"id":1437},"what-comes-back-to-your-editor","What comes back to your editor",[499,1440,1441,1442,1444,1445,1448,1449,1452],{},"A build step that only reports errors on ",[514,1443,516],{},"'s terminal would still be slow feedback. Heximon\ncloses that loop from the other direction too: every compile writes ",[514,1446,1447],{},"src\u002F.heximon\u002Fgraph\u002Fverdicts.gen.d.ts",",\na generated declaration file that pins each compile verdict back onto the exact class or config entry it's\nabout — a dirty module's declaration picks up an error keyed to the mistake, so a broken provider list or\nan unmet ",[514,1450,1451],{},"requires"," shows up as a TypeScript error on the right line, without you running anything.",[499,1454,1455,1456,621,1458,1460],{},"This isn't a replacement for the build — it's a mirror of it. Some DI mistakes (an unresolvable ambiguity\nbetween two providers, a cyclic import) can only be caught by actually running the graph resolution, so\nthey still surface at ",[514,1457,516],{},[514,1459,520],{}," time first and flow back into the editor on the next\ncompile. What you get is real but bounded: DI mistakes the compiler already understands show up close to\nwhere you typed them, not exhaustively before you ever build.",[499,1462,1463,1464,1467],{},"The editor sees the file through a single tsconfig line, because TypeScript's default ",[514,1465,1466],{},"src"," glob skips\ndot-directories:",[647,1469,1474],{"className":1470,"code":1471,"filename":1472,"language":1473,"meta":653,"style":653},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"include\": [\"src\", \"src\u002F.heximon\u002F**\u002F*\"]\n}\n","tsconfig.json","json",[514,1475,1476,1480,1512],{"__ignoreMap":653},[657,1477,1478],{"class":659,"line":660},[657,1479,770],{"class":667},[657,1481,1482,1485,1488,1490,1492,1494,1496,1498,1500,1502,1504,1507,1509],{"class":659,"line":694},[657,1483,1484],{"class":667},"  \"",[657,1486,1487],{"class":753},"include",[657,1489,688],{"class":667},[657,1491,780],{"class":667},[657,1493,999],{"class":667},[657,1495,688],{"class":667},[657,1497,1466],{"class":684},[657,1499,688],{"class":667},[657,1501,852],{"class":667},[657,1503,681],{"class":667},[657,1505,1506],{"class":684},"src\u002F.heximon\u002F**\u002F*",[657,1508,688],{"class":667},[657,1510,1511],{"class":667},"]\n",[657,1513,1514],{"class":659,"line":717},[657,1515,1198],{"class":667},[499,1517,1518,1519,1522,1523,1526,1527,1530,1531,1533,1534,1537,1538,1540],{},"There's no setup cost: ",[514,1520,1521],{},"pnpm create heximon"," scaffolds it, and the first ",[514,1524,1525],{},"vp dev"," \u002F ",[514,1528,1529],{},"vp build","\nself-heals it into an existing project's ",[514,1532,1472],{}," (comments and formatting preserved — the same\nconvention the library build uses for ",[514,1535,1536],{},"package.json"," exports). The heal only touches a file that declares\nits own ",[514,1539,1487],{},"; if yours is inherited from a shared base config, add the entry there by hand.",[503,1542,1544],{"id":1543},"escape-hatches","Escape hatches",[499,1546,1547,1549,1550,621,1552,1554,1555,1557,1558,1561,1562,1564],{},[514,1548,1433],{}," is gitignored and fully disposable — and, by default, it isn't even on disk: ",[514,1551,516],{},[514,1553,520],{},"\nhold the generated wiring in memory unless ",[514,1556,1358],{}," sets ",[514,1559,1560],{},"debug: true"," (above), while a\nnon-Vite bundler or a Nitro-hosted app writes it out unconditionally. Written or not, it's readable JS, not\na bundle — open it, step through it in a debugger, and confirm for yourself that it does what the doc\nabove claims. Delete the whole directory and the next compile regenerates it from scratch. Nothing about your\napplication code depends on its contents; nothing you write ever imports from ",[514,1563,1433],{}," directly. If\nthe compiler is ever wrong about something, you're never locked out of understanding — or fixing — what\nit produced.",[503,1566,1568],{"id":1567},"see-also","See also",[569,1570,1571,1576,1582],{},[572,1572,1573,1575],{},[557,1574,394],{"href":395}," — how a build error reads when the\ncompiler can't resolve your graph.",[572,1577,1578,1581],{},[557,1579,1580],{"href":390},"Extending the Compiler"," — write a compiler plugin to add\na new discoverable concept.",[572,1583,1584,617,1587,1589],{},[557,1585,1586],{"href":54},"Modules",[514,1588,554],{}," config this page's graph is built from.",[1591,1592,1593],"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 .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 .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 .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":653,"searchDepth":694,"depth":694,"links":1595},[1596,1597,1598,1599,1600,1601],{"id":505,"depth":694,"text":506},{"id":547,"depth":694,"text":548},{"id":638,"depth":694,"text":639},{"id":1437,"depth":694,"text":1438},{"id":1543,"depth":694,"text":1544},{"id":1567,"depth":694,"text":1568},"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.","md",null,{},{"icon":387},{"title":384,"description":1602},"NcJTtW-Ap4j8eNoDOmHrGJyd0vBXDZsiAOawWsX4v3A",[1610,1612],{"title":374,"path":375,"stem":376,"description":1611,"icon":6,"children":-1},"heximon deploy runs vp build then ships via wrangler deploy, vercel deploy --prebuilt, netlify deploy, or deployctl deploy — with --provision, --create, --migrate, --profile, --verify, and --destroy.",{"title":389,"path":390,"stem":391,"description":1613,"icon":392,"children":-1},"CompilerPlugin, discoveryKeys, DiscoveryKey, MatchedClass, analyze, contributeGraph, validate, codegen, PluginResults, ResultChannel, ClassIdentity, NameReserver, Manifest, ManifestAssembler.",1783300761903]