[{"data":1,"prerenderedAt":2584},["ShallowReactive",2],{"navigation_docs":3,"-docs-recipes-feature-package":493,"-docs-recipes-feature-package-surround":2579},[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":475,"body":495,"description":2572,"extension":2573,"links":2574,"meta":2575,"navigation":2576,"path":476,"seo":2577,"stem":477,"__hash__":2578},"docs\u002Fdocs\u002F09.recipes\u002F12.feature-package.md",{"type":496,"value":497,"toc":2562},"minimark",[498,524,527,530,554,559,565,617,621,735,895,1043,1058,1225,1229,1240,1307,1313,1355,1361,1518,1702,1741,1744,1808,1812,1822,1909,1919,2082,2088,2335,2339,2345,2511,2515,2558],[499,500,501,502,506,507,511,512,515,516,519,520,523],"p",{},"You want to ship a whole feature — its providers, its controllers, its boundary — as an npm package, so\nanother app pulls it in with a single ",[503,504,505],"code",{},"import { BillingModule } from \"@acme\u002Fbilling\"",". The package ships\n",[508,509,510],"strong",{},"precompiled",": ",[503,513,514],{},"heximonLibrary()"," runs the compiler at build time and emits a ",[503,517,518],{},"createBillingModule"," factory\nplus a ",[503,521,522],{},"heximon.manifest.json"," describing the boundary.",[499,525,526],{},"The consuming app never re-reads your source — both sides align on DI identity through the shared module\nclass and the manifest's recorded import specifiers.",[499,528,529],{},"You'll end up with:",[531,532,533,540,551],"ul",{},[534,535,536,537,539],"li",{},"A package whose internal DI graph is compiled into a ",[503,538,518],{}," factory",[534,541,542,543,546,547,550],{},"A boundary that ",[508,544,545],{},"requires"," the host's database token and ",[508,548,549],{},"exports"," its service",[534,552,553],{},"A consuming app that imports the module by its bare specifier and routes the required token",[555,556,558],"h2",{"id":557},"how-a-published-boundary-works","How a published boundary works",[499,560,561,562,564],{},"A published module declares three cross-boundary token sets. The package owns its ",[503,563,545],{}," token as a\nconcrete class with a default the host overrides — the package never constructs it across the boundary; the\nhost supplies the instance.",[566,567,568,581],"table",{},[569,570,571],"thead",{},[572,573,574,578],"tr",{},[575,576,577],"th",{},"Field",[575,579,580],{},"Meaning at the boundary",[582,583,584,598,608],"tbody",{},[572,585,586,591],{},[587,588,589],"td",{},[503,590,545],{},[587,592,593,594,597],{},"tokens the ",[508,595,596],{},"host"," must supply (the app routes them)",[572,599,600,605],{},[587,601,602],{},[503,603,604],{},"providers",[587,606,607],{},"the package's internal classes the factory constructs",[572,609,610,614],{},[587,611,612],{},[503,613,549],{},[587,615,616],{},"tokens the consuming app may inject",[555,618,620],{"id":619},"write-the-package","Write the package",[622,623,629],"pre",{"className":624,"code":625,"filename":626,"language":627,"meta":628,"style":628},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F The package's OWN database token. The package `requires` and `exports` it; the host binds it to a\n\u002F\u002F concrete database. Declared concrete (a class is the DI token) with a default the host overrides.\nexport class BillingDatabase {\n  public async read(_id: string): Promise\u003Cstring | undefined> {\n    return undefined;\n  }\n}\n","src\u002Fbilling.database.ts","ts","",[503,630,631,640,646,665,714,723,729],{"__ignoreMap":628},[632,633,636],"span",{"class":634,"line":635},"line",1,[632,637,639],{"class":638},"sHwdD","\u002F\u002F The package's OWN database token. The package `requires` and `exports` it; the host binds it to a\n",[632,641,643],{"class":634,"line":642},2,[632,644,645],{"class":638},"\u002F\u002F concrete database. Declared concrete (a class is the DI token) with a default the host overrides.\n",[632,647,649,653,657,661],{"class":634,"line":648},3,[632,650,652],{"class":651},"s7zQu","export",[632,654,656],{"class":655},"spNyl"," class",[632,658,660],{"class":659},"sBMFI"," BillingDatabase",[632,662,664],{"class":663},"sMK4o"," {\n",[632,666,668,671,674,678,681,685,688,691,694,697,700,703,706,709,712],{"class":634,"line":667},4,[632,669,670],{"class":655},"  public",[632,672,673],{"class":655}," async",[632,675,677],{"class":676},"swJcz"," read",[632,679,680],{"class":663},"(",[632,682,684],{"class":683},"sHdIc","_id",[632,686,687],{"class":663},":",[632,689,690],{"class":659}," string",[632,692,693],{"class":663},"):",[632,695,696],{"class":659}," Promise",[632,698,699],{"class":663},"\u003C",[632,701,702],{"class":659},"string",[632,704,705],{"class":663}," |",[632,707,708],{"class":659}," undefined",[632,710,711],{"class":663},">",[632,713,664],{"class":663},[632,715,717,720],{"class":634,"line":716},5,[632,718,719],{"class":651},"    return",[632,721,722],{"class":663}," undefined;\n",[632,724,726],{"class":634,"line":725},6,[632,727,728],{"class":663},"  }\n",[632,730,732],{"class":634,"line":731},7,[632,733,734],{"class":663},"}\n",[622,736,739],{"className":624,"code":737,"filename":738,"language":627,"meta":628,"style":628},"import { BillingDatabase } from \".\u002Fbilling.database\";\n\nexport class BillingService {\n  \u002F\u002F The host-bound database, supplied by the factory across the boundary.\n  public constructor(private readonly billingDatabase: BillingDatabase) {}\n\n  public async invoiceAmount(id: string): Promise\u003Cstring | undefined> {\n    return this.billingDatabase.read(id);\n  }\n}\n","src\u002Fbilling.service.ts",[503,740,741,771,777,788,793,821,825,859,885,890],{"__ignoreMap":628},[632,742,743,746,749,752,755,758,761,765,768],{"class":634,"line":635},[632,744,745],{"class":651},"import",[632,747,748],{"class":663}," {",[632,750,660],{"class":751},"sTEyZ",[632,753,754],{"class":663}," }",[632,756,757],{"class":651}," from",[632,759,760],{"class":663}," \"",[632,762,764],{"class":763},"sfazB",".\u002Fbilling.database",[632,766,767],{"class":663},"\"",[632,769,770],{"class":663},";\n",[632,772,773],{"class":634,"line":642},[632,774,776],{"emptyLinePlaceholder":775},true,"\n",[632,778,779,781,783,786],{"class":634,"line":648},[632,780,652],{"class":651},[632,782,656],{"class":655},[632,784,785],{"class":659}," BillingService",[632,787,664],{"class":663},[632,789,790],{"class":634,"line":667},[632,791,792],{"class":638},"  \u002F\u002F The host-bound database, supplied by the factory across the boundary.\n",[632,794,795,797,800,802,805,808,811,813,815,818],{"class":634,"line":716},[632,796,670],{"class":655},[632,798,799],{"class":655}," constructor",[632,801,680],{"class":663},[632,803,804],{"class":655},"private",[632,806,807],{"class":655}," readonly",[632,809,810],{"class":683}," billingDatabase",[632,812,687],{"class":663},[632,814,660],{"class":659},[632,816,817],{"class":663},")",[632,819,820],{"class":663}," {}\n",[632,822,823],{"class":634,"line":725},[632,824,776],{"emptyLinePlaceholder":775},[632,826,827,829,831,834,836,839,841,843,845,847,849,851,853,855,857],{"class":634,"line":731},[632,828,670],{"class":655},[632,830,673],{"class":655},[632,832,833],{"class":676}," invoiceAmount",[632,835,680],{"class":663},[632,837,838],{"class":683},"id",[632,840,687],{"class":663},[632,842,690],{"class":659},[632,844,693],{"class":663},[632,846,696],{"class":659},[632,848,699],{"class":663},[632,850,702],{"class":659},[632,852,705],{"class":663},[632,854,708],{"class":659},[632,856,711],{"class":663},[632,858,664],{"class":663},[632,860,862,864,867,870,873,877,879,881,883],{"class":634,"line":861},8,[632,863,719],{"class":651},[632,865,866],{"class":663}," this.",[632,868,869],{"class":751},"billingDatabase",[632,871,872],{"class":663},".",[632,874,876],{"class":875},"s2Zo4","read",[632,878,680],{"class":676},[632,880,838],{"class":751},[632,882,817],{"class":676},[632,884,770],{"class":663},[632,886,888],{"class":634,"line":887},9,[632,889,728],{"class":663},[632,891,893],{"class":634,"line":892},10,[632,894,734],{"class":663},[622,896,899],{"className":624,"code":897,"filename":898,"language":627,"meta":628,"style":628},"import { Module } from \"@heximon\u002Fruntime\";\nimport { BillingDatabase } from \".\u002Fbilling.database\";\nimport { BillingService } from \".\u002Fbilling.service\";\n\nexport class BillingModule extends Module({\n  requires: [BillingDatabase], \u002F\u002F the host supplies this token\n  providers: [BillingService], \u002F\u002F constructed by the generated factory (injects the database)\n  exports: [BillingService], \u002F\u002F the consuming app may inject this\n}) {}\n","src\u002Fbilling.module.ts",[503,900,901,923,943,964,968,987,1003,1018,1032],{"__ignoreMap":628},[632,902,903,905,907,910,912,914,916,919,921],{"class":634,"line":635},[632,904,745],{"class":651},[632,906,748],{"class":663},[632,908,909],{"class":751}," Module",[632,911,754],{"class":663},[632,913,757],{"class":651},[632,915,760],{"class":663},[632,917,918],{"class":763},"@heximon\u002Fruntime",[632,920,767],{"class":663},[632,922,770],{"class":663},[632,924,925,927,929,931,933,935,937,939,941],{"class":634,"line":642},[632,926,745],{"class":651},[632,928,748],{"class":663},[632,930,660],{"class":751},[632,932,754],{"class":663},[632,934,757],{"class":651},[632,936,760],{"class":663},[632,938,764],{"class":763},[632,940,767],{"class":663},[632,942,770],{"class":663},[632,944,945,947,949,951,953,955,957,960,962],{"class":634,"line":648},[632,946,745],{"class":651},[632,948,748],{"class":663},[632,950,785],{"class":751},[632,952,754],{"class":663},[632,954,757],{"class":651},[632,956,760],{"class":663},[632,958,959],{"class":763},".\u002Fbilling.service",[632,961,767],{"class":663},[632,963,770],{"class":663},[632,965,966],{"class":634,"line":667},[632,967,776],{"emptyLinePlaceholder":775},[632,969,970,972,974,977,980,982,984],{"class":634,"line":716},[632,971,652],{"class":651},[632,973,656],{"class":655},[632,975,976],{"class":659}," BillingModule",[632,978,979],{"class":655}," extends",[632,981,909],{"class":875},[632,983,680],{"class":751},[632,985,986],{"class":663},"{\n",[632,988,989,992,994,997,1000],{"class":634,"line":725},[632,990,991],{"class":676},"  requires",[632,993,687],{"class":663},[632,995,996],{"class":751}," [BillingDatabase]",[632,998,999],{"class":663},",",[632,1001,1002],{"class":638}," \u002F\u002F the host supplies this token\n",[632,1004,1005,1008,1010,1013,1015],{"class":634,"line":731},[632,1006,1007],{"class":676},"  providers",[632,1009,687],{"class":663},[632,1011,1012],{"class":751}," [BillingService]",[632,1014,999],{"class":663},[632,1016,1017],{"class":638}," \u002F\u002F constructed by the generated factory (injects the database)\n",[632,1019,1020,1023,1025,1027,1029],{"class":634,"line":861},[632,1021,1022],{"class":676},"  exports",[632,1024,687],{"class":663},[632,1026,1012],{"class":751},[632,1028,999],{"class":663},[632,1030,1031],{"class":638}," \u002F\u002F the consuming app may inject this\n",[632,1033,1034,1037,1040],{"class":634,"line":887},[632,1035,1036],{"class":663},"}",[632,1038,1039],{"class":751},") ",[632,1041,1042],{"class":663},"{}\n",[499,1044,1045,1046,1049,1050,1053,1054,1057],{},"A package shipping an ",[508,1047,1048],{},"HTTP controller"," declares it under ",[503,1051,1052],{},"http: { controllers }"," exactly as an app does;\nthe library build with ",[503,1055,1056],{},"new HttpPlugin()"," ships the controller's route registration as a contribution the\nhost adds at boot:",[622,1059,1062],{"className":624,"code":1060,"filename":1061,"language":627,"meta":628,"style":628},"import { Module } from \"@heximon\u002Fruntime\";\nimport { CatalogDatabase } from \".\u002Fcatalog.database\";\nimport { ShopController } from \".\u002Fshop.controller\";\nimport { ShopRepository } from \".\u002Fshop.repository\";\n\nexport class ShopModule extends Module({\n  requires: [CatalogDatabase],\n  providers: [ShopRepository],\n  http: { controllers: [ShopController] }, \u002F\u002F shipped as a route contribution\n}) {}\n","src\u002Fshop.module.ts (HTTP feature variant)",[503,1063,1064,1084,1106,1128,1150,1154,1171,1183,1194,1217],{"__ignoreMap":628},[632,1065,1066,1068,1070,1072,1074,1076,1078,1080,1082],{"class":634,"line":635},[632,1067,745],{"class":651},[632,1069,748],{"class":663},[632,1071,909],{"class":751},[632,1073,754],{"class":663},[632,1075,757],{"class":651},[632,1077,760],{"class":663},[632,1079,918],{"class":763},[632,1081,767],{"class":663},[632,1083,770],{"class":663},[632,1085,1086,1088,1090,1093,1095,1097,1099,1102,1104],{"class":634,"line":642},[632,1087,745],{"class":651},[632,1089,748],{"class":663},[632,1091,1092],{"class":751}," CatalogDatabase",[632,1094,754],{"class":663},[632,1096,757],{"class":651},[632,1098,760],{"class":663},[632,1100,1101],{"class":763},".\u002Fcatalog.database",[632,1103,767],{"class":663},[632,1105,770],{"class":663},[632,1107,1108,1110,1112,1115,1117,1119,1121,1124,1126],{"class":634,"line":648},[632,1109,745],{"class":651},[632,1111,748],{"class":663},[632,1113,1114],{"class":751}," ShopController",[632,1116,754],{"class":663},[632,1118,757],{"class":651},[632,1120,760],{"class":663},[632,1122,1123],{"class":763},".\u002Fshop.controller",[632,1125,767],{"class":663},[632,1127,770],{"class":663},[632,1129,1130,1132,1134,1137,1139,1141,1143,1146,1148],{"class":634,"line":667},[632,1131,745],{"class":651},[632,1133,748],{"class":663},[632,1135,1136],{"class":751}," ShopRepository",[632,1138,754],{"class":663},[632,1140,757],{"class":651},[632,1142,760],{"class":663},[632,1144,1145],{"class":763},".\u002Fshop.repository",[632,1147,767],{"class":663},[632,1149,770],{"class":663},[632,1151,1152],{"class":634,"line":716},[632,1153,776],{"emptyLinePlaceholder":775},[632,1155,1156,1158,1160,1163,1165,1167,1169],{"class":634,"line":725},[632,1157,652],{"class":651},[632,1159,656],{"class":655},[632,1161,1162],{"class":659}," ShopModule",[632,1164,979],{"class":655},[632,1166,909],{"class":875},[632,1168,680],{"class":751},[632,1170,986],{"class":663},[632,1172,1173,1175,1177,1180],{"class":634,"line":731},[632,1174,991],{"class":676},[632,1176,687],{"class":663},[632,1178,1179],{"class":751}," [CatalogDatabase]",[632,1181,1182],{"class":663},",\n",[632,1184,1185,1187,1189,1192],{"class":634,"line":861},[632,1186,1007],{"class":676},[632,1188,687],{"class":663},[632,1190,1191],{"class":751}," [ShopRepository]",[632,1193,1182],{"class":663},[632,1195,1196,1199,1201,1203,1206,1208,1211,1214],{"class":634,"line":887},[632,1197,1198],{"class":676},"  http",[632,1200,687],{"class":663},[632,1202,748],{"class":663},[632,1204,1205],{"class":676}," controllers",[632,1207,687],{"class":663},[632,1209,1210],{"class":751}," [ShopController] ",[632,1212,1213],{"class":663},"},",[632,1215,1216],{"class":638}," \u002F\u002F shipped as a route contribution\n",[632,1218,1219,1221,1223],{"class":634,"line":892},[632,1220,1036],{"class":663},[632,1222,1039],{"class":751},[632,1224,1042],{"class":663},[555,1226,1228],{"id":1227},"expose-the-public-surface","Expose the public surface",[499,1230,1231,1232,1235,1236,1239],{},"Export every cross-boundary token from one bare specifier. The manifest records each token's specifier\nas the package name, so both sides align on the same DI identity. The co-generated ",[503,1233,1234],{},"create\u003CModule>","\nfactory is not part of this barrel — it ships on the package's ",[503,1237,1238],{},".\u002Fheximon"," subpath, wired by the build.",[622,1241,1244],{"className":624,"code":1242,"filename":1243,"language":627,"meta":628,"style":628},"export { BillingDatabase } from \".\u002Fbilling.database\";\nexport { BillingModule } from \".\u002Fbilling.module\";\nexport { BillingService } from \".\u002Fbilling.service\";\n","src\u002Findex.ts",[503,1245,1246,1266,1287],{"__ignoreMap":628},[632,1247,1248,1250,1252,1254,1256,1258,1260,1262,1264],{"class":634,"line":635},[632,1249,652],{"class":651},[632,1251,748],{"class":663},[632,1253,660],{"class":751},[632,1255,754],{"class":663},[632,1257,757],{"class":651},[632,1259,760],{"class":663},[632,1261,764],{"class":763},[632,1263,767],{"class":663},[632,1265,770],{"class":663},[632,1267,1268,1270,1272,1274,1276,1278,1280,1283,1285],{"class":634,"line":642},[632,1269,652],{"class":651},[632,1271,748],{"class":663},[632,1273,976],{"class":751},[632,1275,754],{"class":663},[632,1277,757],{"class":651},[632,1279,760],{"class":663},[632,1281,1282],{"class":763},".\u002Fbilling.module",[632,1284,767],{"class":663},[632,1286,770],{"class":663},[632,1288,1289,1291,1293,1295,1297,1299,1301,1303,1305],{"class":634,"line":648},[632,1290,652],{"class":651},[632,1292,748],{"class":663},[632,1294,785],{"class":751},[632,1296,754],{"class":663},[632,1298,757],{"class":651},[632,1300,760],{"class":663},[632,1302,959],{"class":763},[632,1304,767],{"class":663},[632,1306,770],{"class":663},[555,1308,1310,1311],{"id":1309},"build-it-with-heximonlibrary","Build it with ",[503,1312,514],{},[499,1314,1315,1316,1318,1319,1322,1323,1326,1327,1330,1331,1333,1334,1336,1337,1340,1341,1344,1345,1347,1348,1351,1352,523],{},"Add the ",[503,1317,514],{}," plugin (",[503,1320,1321],{},"@heximon\u002Flibrary\u002Frolldown",") to your ",[503,1324,1325],{},"vp pack"," ",[503,1328,1329],{},"pack.plugins",". On ",[503,1332,1325],{}," it\ngenerates the typed ",[503,1335,518],{}," factory + a ",[503,1338,1339],{},"src\u002F.heximon\u002Flibrary\u002Findex.ts"," barrel, registers that barrel\nas the pack's own ",[503,1342,1343],{},"heximon"," entry (the ",[503,1346,1238],{}," subpath, written into the ",[503,1349,1350],{},"package.json"," exports map for\nyou), and emits ",[503,1353,1354],{},"dist\u002Fheximon.manifest.json",[499,1356,1357,1358,687],{},"Compiler plugins come from ",[503,1359,1360],{},"heximon.config.ts",[622,1362,1365],{"className":624,"code":1363,"filename":1364,"language":627,"meta":628,"style":628},"import heximonLibrary from \"@heximon\u002Flibrary\u002Frolldown\";\nimport { defineConfig } from \"vite-plus\";\n\nexport default defineConfig({\n  pack: {\n    entry: [\"src\u002Findex.ts\"],\n    dts: true,\n    format: [\"esm\"],\n    plugins: [heximonLibrary()],\n  },\n});\n","vite.config.ts",[503,1366,1367,1385,1407,1411,1424,1433,1454,1467,1487,1504,1509],{"__ignoreMap":628},[632,1368,1369,1371,1374,1377,1379,1381,1383],{"class":634,"line":635},[632,1370,745],{"class":651},[632,1372,1373],{"class":751}," heximonLibrary ",[632,1375,1376],{"class":651},"from",[632,1378,760],{"class":663},[632,1380,1321],{"class":763},[632,1382,767],{"class":663},[632,1384,770],{"class":663},[632,1386,1387,1389,1391,1394,1396,1398,1400,1403,1405],{"class":634,"line":642},[632,1388,745],{"class":651},[632,1390,748],{"class":663},[632,1392,1393],{"class":751}," defineConfig",[632,1395,754],{"class":663},[632,1397,757],{"class":651},[632,1399,760],{"class":663},[632,1401,1402],{"class":763},"vite-plus",[632,1404,767],{"class":663},[632,1406,770],{"class":663},[632,1408,1409],{"class":634,"line":648},[632,1410,776],{"emptyLinePlaceholder":775},[632,1412,1413,1415,1418,1420,1422],{"class":634,"line":667},[632,1414,652],{"class":651},[632,1416,1417],{"class":651}," default",[632,1419,1393],{"class":875},[632,1421,680],{"class":751},[632,1423,986],{"class":663},[632,1425,1426,1429,1431],{"class":634,"line":716},[632,1427,1428],{"class":676},"  pack",[632,1430,687],{"class":663},[632,1432,664],{"class":663},[632,1434,1435,1438,1440,1443,1445,1447,1449,1452],{"class":634,"line":725},[632,1436,1437],{"class":676},"    entry",[632,1439,687],{"class":663},[632,1441,1442],{"class":751}," [",[632,1444,767],{"class":663},[632,1446,1243],{"class":763},[632,1448,767],{"class":663},[632,1450,1451],{"class":751},"]",[632,1453,1182],{"class":663},[632,1455,1456,1459,1461,1465],{"class":634,"line":731},[632,1457,1458],{"class":676},"    dts",[632,1460,687],{"class":663},[632,1462,1464],{"class":1463},"sfNiH"," true",[632,1466,1182],{"class":663},[632,1468,1469,1472,1474,1476,1478,1481,1483,1485],{"class":634,"line":861},[632,1470,1471],{"class":676},"    format",[632,1473,687],{"class":663},[632,1475,1442],{"class":751},[632,1477,767],{"class":663},[632,1479,1480],{"class":763},"esm",[632,1482,767],{"class":663},[632,1484,1451],{"class":751},[632,1486,1182],{"class":663},[632,1488,1489,1492,1494,1496,1499,1502],{"class":634,"line":887},[632,1490,1491],{"class":676},"    plugins",[632,1493,687],{"class":663},[632,1495,1442],{"class":751},[632,1497,1498],{"class":875},"heximonLibrary",[632,1500,1501],{"class":751},"()]",[632,1503,1182],{"class":663},[632,1505,1506],{"class":634,"line":892},[632,1507,1508],{"class":663},"  },\n",[632,1510,1512,1514,1516],{"class":634,"line":1511},11,[632,1513,1036],{"class":663},[632,1515,817],{"class":751},[632,1517,770],{"class":663},[622,1519,1523],{"className":1520,"code":1521,"filename":1350,"language":1522,"meta":628,"style":628},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"name\": \"@acme\u002Fbilling\",\n  \"version\": \"1.2.3\",\n  \"type\": \"module\",\n  \"files\": [\"dist\"],\n  \"exports\": {\n    \".\": { \"default\": \".\u002Fdist\u002Findex.mjs\" }\n  },\n  \"peerDependencies\": {\n    \"@heximon\u002Fruntime\": \"workspace:*\"\n  }\n}\n","json",[503,1524,1525,1529,1550,1570,1590,1613,1625,1658,1662,1675,1693,1697],{"__ignoreMap":628},[632,1526,1527],{"class":634,"line":635},[632,1528,986],{"class":663},[632,1530,1531,1534,1537,1539,1541,1543,1546,1548],{"class":634,"line":642},[632,1532,1533],{"class":663},"  \"",[632,1535,1536],{"class":655},"name",[632,1538,767],{"class":663},[632,1540,687],{"class":663},[632,1542,760],{"class":663},[632,1544,1545],{"class":763},"@acme\u002Fbilling",[632,1547,767],{"class":663},[632,1549,1182],{"class":663},[632,1551,1552,1554,1557,1559,1561,1563,1566,1568],{"class":634,"line":648},[632,1553,1533],{"class":663},[632,1555,1556],{"class":655},"version",[632,1558,767],{"class":663},[632,1560,687],{"class":663},[632,1562,760],{"class":663},[632,1564,1565],{"class":763},"1.2.3",[632,1567,767],{"class":663},[632,1569,1182],{"class":663},[632,1571,1572,1574,1577,1579,1581,1583,1586,1588],{"class":634,"line":667},[632,1573,1533],{"class":663},[632,1575,1576],{"class":655},"type",[632,1578,767],{"class":663},[632,1580,687],{"class":663},[632,1582,760],{"class":663},[632,1584,1585],{"class":763},"module",[632,1587,767],{"class":663},[632,1589,1182],{"class":663},[632,1591,1592,1594,1597,1599,1601,1603,1605,1608,1610],{"class":634,"line":716},[632,1593,1533],{"class":663},[632,1595,1596],{"class":655},"files",[632,1598,767],{"class":663},[632,1600,687],{"class":663},[632,1602,1442],{"class":663},[632,1604,767],{"class":663},[632,1606,1607],{"class":763},"dist",[632,1609,767],{"class":663},[632,1611,1612],{"class":663},"],\n",[632,1614,1615,1617,1619,1621,1623],{"class":634,"line":725},[632,1616,1533],{"class":663},[632,1618,549],{"class":655},[632,1620,767],{"class":663},[632,1622,687],{"class":663},[632,1624,664],{"class":663},[632,1626,1627,1630,1632,1634,1636,1638,1640,1644,1646,1648,1650,1653,1655],{"class":634,"line":731},[632,1628,1629],{"class":663},"    \"",[632,1631,872],{"class":659},[632,1633,767],{"class":663},[632,1635,687],{"class":663},[632,1637,748],{"class":663},[632,1639,760],{"class":663},[632,1641,1643],{"class":1642},"sbssI","default",[632,1645,767],{"class":663},[632,1647,687],{"class":663},[632,1649,760],{"class":663},[632,1651,1652],{"class":763},".\u002Fdist\u002Findex.mjs",[632,1654,767],{"class":663},[632,1656,1657],{"class":663}," }\n",[632,1659,1660],{"class":634,"line":861},[632,1661,1508],{"class":663},[632,1663,1664,1666,1669,1671,1673],{"class":634,"line":887},[632,1665,1533],{"class":663},[632,1667,1668],{"class":655},"peerDependencies",[632,1670,767],{"class":663},[632,1672,687],{"class":663},[632,1674,664],{"class":663},[632,1676,1677,1679,1681,1683,1685,1687,1690],{"class":634,"line":892},[632,1678,1629],{"class":663},[632,1680,918],{"class":659},[632,1682,767],{"class":663},[632,1684,687],{"class":663},[632,1686,760],{"class":663},[632,1688,1689],{"class":763},"workspace:*",[632,1691,1692],{"class":663},"\"\n",[632,1694,1695],{"class":634,"line":1511},[632,1696,728],{"class":663},[632,1698,1700],{"class":634,"line":1699},12,[632,1701,734],{"class":663},[1703,1704,1706,1725],"callout",{"type":1705},"warning",[499,1707,1708,1714,1715,1717,1718,1721,1722,1724],{},[508,1709,1710,1711,1713],{},"The framework and any shared cross-boundary types must be ",[503,1712,1668],{},", never bundled."," Two copies\nof ",[503,1716,918],{}," across the boundary split DI token identity at runtime, and a ",[503,1719,1720],{},"BillingService","\nconstructed by the package would no longer match the ",[503,1723,1720],{}," the host injects.",[499,1726,1727,1729,1730,1733,1734,1736,1737,1740],{},[503,1728,514],{}," warns when no ",[503,1731,1732],{},"@heximon\u002F*"," peer is declared, or when ",[503,1735,1596],{}," doesn't cover ",[503,1738,1739],{},"dist\u002F",". One\ncopy, shared as a peer, keeps the tokens identical.",[499,1742,1743],{},"Build the package:",[1745,1746,1747,1768,1790],"code-group",{},[622,1748,1753],{"className":1749,"code":1750,"filename":1751,"language":1752,"meta":628,"style":628},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm --filter @acme\u002Fbilling build\n","pnpm","bash",[503,1754,1755],{"__ignoreMap":628},[632,1756,1757,1759,1762,1765],{"class":634,"line":635},[632,1758,1751],{"class":659},[632,1760,1761],{"class":763}," --filter",[632,1763,1764],{"class":763}," @acme\u002Fbilling",[632,1766,1767],{"class":763}," build\n",[622,1769,1772],{"className":1749,"code":1770,"filename":1771,"language":1752,"meta":628,"style":628},"npm run build --workspace @acme\u002Fbilling\n","npm",[503,1773,1774],{"__ignoreMap":628},[632,1775,1776,1778,1781,1784,1787],{"class":634,"line":635},[632,1777,1771],{"class":659},[632,1779,1780],{"class":763}," run",[632,1782,1783],{"class":763}," build",[632,1785,1786],{"class":763}," --workspace",[632,1788,1789],{"class":763}," @acme\u002Fbilling\n",[622,1791,1794],{"className":1749,"code":1792,"filename":1793,"language":1752,"meta":628,"style":628},"bun run --filter @acme\u002Fbilling build\n","bun",[503,1795,1796],{"__ignoreMap":628},[632,1797,1798,1800,1802,1804,1806],{"class":634,"line":635},[632,1799,1793],{"class":659},[632,1801,1780],{"class":763},[632,1803,1761],{"class":763},[632,1805,1764],{"class":763},[632,1807,1767],{"class":763},[555,1809,1811],{"id":1810},"consume-it-from-an-app","Consume it from an app",[499,1813,1814,1815,1818,1819,1821],{},"Import the module by its bare specifier and list it in ",[503,1816,1817],{},"imports",". The app's compiler reads the package's\n",[503,1820,522],{}," to wire the boundary — it never re-reads the package source.",[622,1823,1826],{"className":624,"code":1824,"filename":1825,"language":627,"meta":628,"style":628},"import { Module } from \"@heximon\u002Fruntime\";\nimport { BillingModule } from \"@acme\u002Fbilling\";\n\nexport class AppModule extends Module({\n  imports: [BillingModule],\n}) {}\n","src\u002Fapp.module.ts",[503,1827,1828,1848,1868,1872,1889,1901],{"__ignoreMap":628},[632,1829,1830,1832,1834,1836,1838,1840,1842,1844,1846],{"class":634,"line":635},[632,1831,745],{"class":651},[632,1833,748],{"class":663},[632,1835,909],{"class":751},[632,1837,754],{"class":663},[632,1839,757],{"class":651},[632,1841,760],{"class":663},[632,1843,918],{"class":763},[632,1845,767],{"class":663},[632,1847,770],{"class":663},[632,1849,1850,1852,1854,1856,1858,1860,1862,1864,1866],{"class":634,"line":642},[632,1851,745],{"class":651},[632,1853,748],{"class":663},[632,1855,976],{"class":751},[632,1857,754],{"class":663},[632,1859,757],{"class":651},[632,1861,760],{"class":663},[632,1863,1545],{"class":763},[632,1865,767],{"class":663},[632,1867,770],{"class":663},[632,1869,1870],{"class":634,"line":648},[632,1871,776],{"emptyLinePlaceholder":775},[632,1873,1874,1876,1878,1881,1883,1885,1887],{"class":634,"line":667},[632,1875,652],{"class":651},[632,1877,656],{"class":655},[632,1879,1880],{"class":659}," AppModule",[632,1882,979],{"class":655},[632,1884,909],{"class":875},[632,1886,680],{"class":751},[632,1888,986],{"class":663},[632,1890,1891,1894,1896,1899],{"class":634,"line":716},[632,1892,1893],{"class":676},"  imports",[632,1895,687],{"class":663},[632,1897,1898],{"class":751}," [BillingModule]",[632,1900,1182],{"class":663},[632,1902,1903,1905,1907],{"class":634,"line":725},[632,1904,1036],{"class":663},[632,1906,1039],{"class":751},[632,1908,1042],{"class":663},[499,1910,1911,1912,1915,1916,687],{},"Now route the package's required token to a concrete provider in the host. The host binds ",[503,1913,1914],{},"BillingDatabase","\nto its own database with ",[503,1917,1918],{},"useExisting",[622,1920,1923],{"className":624,"code":1921,"filename":1922,"language":627,"meta":628,"style":628},"import { Module } from \"@heximon\u002Fruntime\";\nimport { BillingDatabase } from \"@acme\u002Fbilling\";\nimport { PrimaryDatabase } from \".\u002Fprimary-database\";\n\nexport class DatabaseModule extends Module({\n  providers: [\n    PrimaryDatabase,\n    { provide: BillingDatabase, useExisting: PrimaryDatabase }, \u002F\u002F route the package's required token\n  ],\n  exports: [BillingDatabase, PrimaryDatabase],\n}) {}\n","src\u002Fdatabase\u002Fdatabase.module.ts",[503,1924,1925,1945,1965,1987,1991,2008,2017,2024,2051,2058,2074],{"__ignoreMap":628},[632,1926,1927,1929,1931,1933,1935,1937,1939,1941,1943],{"class":634,"line":635},[632,1928,745],{"class":651},[632,1930,748],{"class":663},[632,1932,909],{"class":751},[632,1934,754],{"class":663},[632,1936,757],{"class":651},[632,1938,760],{"class":663},[632,1940,918],{"class":763},[632,1942,767],{"class":663},[632,1944,770],{"class":663},[632,1946,1947,1949,1951,1953,1955,1957,1959,1961,1963],{"class":634,"line":642},[632,1948,745],{"class":651},[632,1950,748],{"class":663},[632,1952,660],{"class":751},[632,1954,754],{"class":663},[632,1956,757],{"class":651},[632,1958,760],{"class":663},[632,1960,1545],{"class":763},[632,1962,767],{"class":663},[632,1964,770],{"class":663},[632,1966,1967,1969,1971,1974,1976,1978,1980,1983,1985],{"class":634,"line":648},[632,1968,745],{"class":651},[632,1970,748],{"class":663},[632,1972,1973],{"class":751}," PrimaryDatabase",[632,1975,754],{"class":663},[632,1977,757],{"class":651},[632,1979,760],{"class":663},[632,1981,1982],{"class":763},".\u002Fprimary-database",[632,1984,767],{"class":663},[632,1986,770],{"class":663},[632,1988,1989],{"class":634,"line":667},[632,1990,776],{"emptyLinePlaceholder":775},[632,1992,1993,1995,1997,2000,2002,2004,2006],{"class":634,"line":716},[632,1994,652],{"class":651},[632,1996,656],{"class":655},[632,1998,1999],{"class":659}," DatabaseModule",[632,2001,979],{"class":655},[632,2003,909],{"class":875},[632,2005,680],{"class":751},[632,2007,986],{"class":663},[632,2009,2010,2012,2014],{"class":634,"line":725},[632,2011,1007],{"class":676},[632,2013,687],{"class":663},[632,2015,2016],{"class":751}," [\n",[632,2018,2019,2022],{"class":634,"line":731},[632,2020,2021],{"class":751},"    PrimaryDatabase",[632,2023,1182],{"class":663},[632,2025,2026,2029,2032,2034,2036,2038,2041,2043,2046,2048],{"class":634,"line":861},[632,2027,2028],{"class":663},"    {",[632,2030,2031],{"class":676}," provide",[632,2033,687],{"class":663},[632,2035,660],{"class":751},[632,2037,999],{"class":663},[632,2039,2040],{"class":676}," useExisting",[632,2042,687],{"class":663},[632,2044,2045],{"class":751}," PrimaryDatabase ",[632,2047,1213],{"class":663},[632,2049,2050],{"class":638}," \u002F\u002F route the package's required token\n",[632,2052,2053,2056],{"class":634,"line":887},[632,2054,2055],{"class":751},"  ]",[632,2057,1182],{"class":663},[632,2059,2060,2062,2064,2067,2069,2072],{"class":634,"line":892},[632,2061,1022],{"class":676},[632,2063,687],{"class":663},[632,2065,2066],{"class":751}," [BillingDatabase",[632,2068,999],{"class":663},[632,2070,2071],{"class":751}," PrimaryDatabase]",[632,2073,1182],{"class":663},[632,2075,2076,2078,2080],{"class":634,"line":1511},[632,2077,1036],{"class":663},[632,2079,1039],{"class":751},[632,2081,1042],{"class":663},[499,2083,2084,2085,2087],{},"Any app class can now inject the package's exported ",[503,2086,1720],{}," by class identity:",[622,2089,2092],{"className":624,"code":2090,"filename":2091,"language":627,"meta":628,"style":628},"import { BillingService } from \"@acme\u002Fbilling\";\nimport type { Controller, Get } from \"@heximon\u002Fhttp\";\n\nexport class InvoicesController implements Controller\u003C\"\u002Finvoices\"> {\n  public constructor(private readonly billing: BillingService) {}\n\n  public async amount(action: Get\u003C\"\u002F:id\u002Famount\">): Promise\u003C{ id: string; amount: string | undefined }> {\n    const id = action.request.pathParams.id;\n    return { id, amount: await this.billing.invoiceAmount(id) };\n  }\n}\n","src\u002Finvoices\u002Finvoices.controller.ts",[503,2093,2094,2114,2144,2148,2175,2198,2202,2262,2291,2327,2331],{"__ignoreMap":628},[632,2095,2096,2098,2100,2102,2104,2106,2108,2110,2112],{"class":634,"line":635},[632,2097,745],{"class":651},[632,2099,748],{"class":663},[632,2101,785],{"class":751},[632,2103,754],{"class":663},[632,2105,757],{"class":651},[632,2107,760],{"class":663},[632,2109,1545],{"class":763},[632,2111,767],{"class":663},[632,2113,770],{"class":663},[632,2115,2116,2118,2121,2123,2126,2128,2131,2133,2135,2137,2140,2142],{"class":634,"line":642},[632,2117,745],{"class":651},[632,2119,2120],{"class":651}," type",[632,2122,748],{"class":663},[632,2124,2125],{"class":751}," Controller",[632,2127,999],{"class":663},[632,2129,2130],{"class":751}," Get",[632,2132,754],{"class":663},[632,2134,757],{"class":651},[632,2136,760],{"class":663},[632,2138,2139],{"class":763},"@heximon\u002Fhttp",[632,2141,767],{"class":663},[632,2143,770],{"class":663},[632,2145,2146],{"class":634,"line":648},[632,2147,776],{"emptyLinePlaceholder":775},[632,2149,2150,2152,2154,2157,2160,2162,2164,2166,2169,2171,2173],{"class":634,"line":667},[632,2151,652],{"class":651},[632,2153,656],{"class":655},[632,2155,2156],{"class":659}," InvoicesController",[632,2158,2159],{"class":655}," implements",[632,2161,2125],{"class":659},[632,2163,699],{"class":663},[632,2165,767],{"class":663},[632,2167,2168],{"class":763},"\u002Finvoices",[632,2170,767],{"class":663},[632,2172,711],{"class":663},[632,2174,664],{"class":663},[632,2176,2177,2179,2181,2183,2185,2187,2190,2192,2194,2196],{"class":634,"line":716},[632,2178,670],{"class":655},[632,2180,799],{"class":655},[632,2182,680],{"class":663},[632,2184,804],{"class":655},[632,2186,807],{"class":655},[632,2188,2189],{"class":683}," billing",[632,2191,687],{"class":663},[632,2193,785],{"class":659},[632,2195,817],{"class":663},[632,2197,820],{"class":663},[632,2199,2200],{"class":634,"line":725},[632,2201,776],{"emptyLinePlaceholder":775},[632,2203,2204,2206,2208,2211,2213,2216,2218,2220,2222,2224,2227,2229,2232,2234,2237,2240,2242,2244,2247,2249,2251,2253,2255,2257,2260],{"class":634,"line":731},[632,2205,670],{"class":655},[632,2207,673],{"class":655},[632,2209,2210],{"class":676}," amount",[632,2212,680],{"class":663},[632,2214,2215],{"class":683},"action",[632,2217,687],{"class":663},[632,2219,2130],{"class":659},[632,2221,699],{"class":663},[632,2223,767],{"class":663},[632,2225,2226],{"class":763},"\u002F:id\u002Famount",[632,2228,767],{"class":663},[632,2230,2231],{"class":663},">):",[632,2233,696],{"class":659},[632,2235,2236],{"class":663},"\u003C{",[632,2238,2239],{"class":676}," id",[632,2241,687],{"class":663},[632,2243,690],{"class":659},[632,2245,2246],{"class":663},";",[632,2248,2210],{"class":676},[632,2250,687],{"class":663},[632,2252,690],{"class":659},[632,2254,705],{"class":663},[632,2256,708],{"class":659},[632,2258,2259],{"class":663}," }>",[632,2261,664],{"class":663},[632,2263,2264,2267,2269,2272,2275,2277,2280,2282,2285,2287,2289],{"class":634,"line":861},[632,2265,2266],{"class":655},"    const",[632,2268,2239],{"class":751},[632,2270,2271],{"class":663}," =",[632,2273,2274],{"class":751}," action",[632,2276,872],{"class":663},[632,2278,2279],{"class":751},"request",[632,2281,872],{"class":663},[632,2283,2284],{"class":751},"pathParams",[632,2286,872],{"class":663},[632,2288,838],{"class":751},[632,2290,770],{"class":663},[632,2292,2293,2295,2297,2299,2301,2303,2305,2308,2310,2313,2315,2318,2320,2322,2324],{"class":634,"line":887},[632,2294,719],{"class":651},[632,2296,748],{"class":663},[632,2298,2239],{"class":751},[632,2300,999],{"class":663},[632,2302,2210],{"class":676},[632,2304,687],{"class":663},[632,2306,2307],{"class":651}," await",[632,2309,866],{"class":663},[632,2311,2312],{"class":751},"billing",[632,2314,872],{"class":663},[632,2316,2317],{"class":875},"invoiceAmount",[632,2319,680],{"class":676},[632,2321,838],{"class":751},[632,2323,1039],{"class":676},[632,2325,2326],{"class":663},"};\n",[632,2328,2329],{"class":634,"line":892},[632,2330,728],{"class":663},[632,2332,2333],{"class":634,"line":1511},[632,2334,734],{"class":663},[555,2336,2338],{"id":2337},"run-it","Run it",[499,2340,2341,2342,2344],{},"Build the package's ",[503,2343,1607],{}," — factory and manifest — before the consuming app resolves it, then start the\napp:",[1745,2346,2347,2389,2429,2470],{},[622,2348,2350],{"className":1749,"code":2349,"filename":1751,"language":1752,"meta":628,"style":628},"pnpm --filter @acme\u002Fbilling build\npnpm dev\n\ncurl -s localhost:3000\u002Finvoices\u002Finv_42\u002Famount\n# -> { \"id\": \"inv_42\", \"amount\": \"...\" }  (read through the HOST's database, bound to the package token)\n",[503,2351,2352,2362,2369,2373,2384],{"__ignoreMap":628},[632,2353,2354,2356,2358,2360],{"class":634,"line":635},[632,2355,1751],{"class":659},[632,2357,1761],{"class":763},[632,2359,1764],{"class":763},[632,2361,1767],{"class":763},[632,2363,2364,2366],{"class":634,"line":642},[632,2365,1751],{"class":659},[632,2367,2368],{"class":763}," dev\n",[632,2370,2371],{"class":634,"line":648},[632,2372,776],{"emptyLinePlaceholder":775},[632,2374,2375,2378,2381],{"class":634,"line":667},[632,2376,2377],{"class":659},"curl",[632,2379,2380],{"class":763}," -s",[632,2382,2383],{"class":763}," localhost:3000\u002Finvoices\u002Finv_42\u002Famount\n",[632,2385,2386],{"class":634,"line":716},[632,2387,2388],{"class":638},"# -> { \"id\": \"inv_42\", \"amount\": \"...\" }  (read through the HOST's database, bound to the package token)\n",[622,2390,2392],{"className":1749,"code":2391,"filename":1771,"language":1752,"meta":628,"style":628},"npm run build --workspace=@acme\u002Fbilling\nnpm run dev\n\ncurl -s localhost:3000\u002Finvoices\u002Finv_42\u002Famount\n# -> { \"id\": \"inv_42\", \"amount\": \"...\" }  (read through the HOST's database, bound to the package token)\n",[503,2393,2394,2405,2413,2417,2425],{"__ignoreMap":628},[632,2395,2396,2398,2400,2402],{"class":634,"line":635},[632,2397,1771],{"class":659},[632,2399,1780],{"class":763},[632,2401,1783],{"class":763},[632,2403,2404],{"class":763}," --workspace=@acme\u002Fbilling\n",[632,2406,2407,2409,2411],{"class":634,"line":642},[632,2408,1771],{"class":659},[632,2410,1780],{"class":763},[632,2412,2368],{"class":763},[632,2414,2415],{"class":634,"line":648},[632,2416,776],{"emptyLinePlaceholder":775},[632,2418,2419,2421,2423],{"class":634,"line":667},[632,2420,2377],{"class":659},[632,2422,2380],{"class":763},[632,2424,2383],{"class":763},[632,2426,2427],{"class":634,"line":716},[632,2428,2388],{"class":638},[622,2430,2433],{"className":1749,"code":2431,"filename":2432,"language":1752,"meta":628,"style":628},"yarn workspace @acme\u002Fbilling build\nyarn run dev\n\ncurl -s localhost:3000\u002Finvoices\u002Finv_42\u002Famount\n# -> { \"id\": \"inv_42\", \"amount\": \"...\" }  (read through the HOST's database, bound to the package token)\n","yarn",[503,2434,2435,2446,2454,2458,2466],{"__ignoreMap":628},[632,2436,2437,2439,2442,2444],{"class":634,"line":635},[632,2438,2432],{"class":659},[632,2440,2441],{"class":763}," workspace",[632,2443,1764],{"class":763},[632,2445,1767],{"class":763},[632,2447,2448,2450,2452],{"class":634,"line":642},[632,2449,2432],{"class":659},[632,2451,1780],{"class":763},[632,2453,2368],{"class":763},[632,2455,2456],{"class":634,"line":648},[632,2457,776],{"emptyLinePlaceholder":775},[632,2459,2460,2462,2464],{"class":634,"line":667},[632,2461,2377],{"class":659},[632,2463,2380],{"class":763},[632,2465,2383],{"class":763},[632,2467,2468],{"class":634,"line":716},[632,2469,2388],{"class":638},[622,2471,2473],{"className":1749,"code":2472,"filename":1793,"language":1752,"meta":628,"style":628},"bun run --filter @acme\u002Fbilling build\nbun run dev\n\ncurl -s localhost:3000\u002Finvoices\u002Finv_42\u002Famount\n# -> { \"id\": \"inv_42\", \"amount\": \"...\" }  (read through the HOST's database, bound to the package token)\n",[503,2474,2475,2487,2495,2499,2507],{"__ignoreMap":628},[632,2476,2477,2479,2481,2483,2485],{"class":634,"line":635},[632,2478,1793],{"class":659},[632,2480,1780],{"class":763},[632,2482,1761],{"class":763},[632,2484,1764],{"class":763},[632,2486,1767],{"class":763},[632,2488,2489,2491,2493],{"class":634,"line":642},[632,2490,1793],{"class":659},[632,2492,1780],{"class":763},[632,2494,2368],{"class":763},[632,2496,2497],{"class":634,"line":648},[632,2498,776],{"emptyLinePlaceholder":775},[632,2500,2501,2503,2505],{"class":634,"line":667},[632,2502,2377],{"class":659},[632,2504,2380],{"class":763},[632,2506,2383],{"class":763},[632,2508,2509],{"class":634,"line":716},[632,2510,2388],{"class":638},[555,2512,2514],{"id":2513},"see-also","See also",[531,2516,2517,2535,2553],{},[534,2518,2519,2522,2523,2525,2526,2528,2529,2531,2532,2534],{},[2520,2521,398],"a",{"href":399}," — ",[503,2524,514],{},", the ",[503,2527,1234],{}," factory, the manifest,\nand the ",[503,2530,545],{},"\u002F",[503,2533,549],{}," boundary in depth.",[534,2536,2537,2540,2541,2543,2544,2546,2547,2549,2550,2552],{},[2520,2538,2539],{"href":54},"Modules"," — how modules declare ",[503,2542,545],{},", ",[503,2545,604],{},", and ",[503,2548,549],{},", and how ",[503,2551,1817],{},"\ncomposes them across boundaries.",[534,2554,2555,2557],{},[2520,2556,453],{"href":454}," — build a complete typed feature end-to-end before shipping it as a\npublished package.",[2559,2560,2561],"style",{},"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 .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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":628,"searchDepth":642,"depth":642,"links":2563},[2564,2565,2566,2567,2569,2570,2571],{"id":557,"depth":642,"text":558},{"id":619,"depth":642,"text":620},{"id":1227,"depth":642,"text":1228},{"id":1309,"depth":642,"text":2568},"Build it with heximonLibrary()",{"id":1810,"depth":642,"text":1811},{"id":2337,"depth":642,"text":2338},{"id":2513,"depth":642,"text":2514},"Ship a feature as a precompiled, publishable Heximon module — build the factory and manifest with heximonLibrary(), require host tokens, then consume it in one import.","md",null,{},{"icon":478},{"title":475,"description":2572},"d6vc2Lvx5taU4H1y_K5Q5dOSVhp79MYSH_8lDbQWAQo",[2580,2582],{"title":470,"path":471,"stem":472,"description":2581,"icon":473,"children":-1},"Model an Order aggregate root with branded ids, value objects, invariants, DomainEvent recording, DomainEvents.emitFrom flushing, and a cross-context DomainEventHandler.",{"title":480,"path":481,"stem":482,"description":2583,"icon":483,"children":-1},"Transactional outbox pattern for at-least-once integration event delivery — OutboxStore, OutboxIntegrationEventTransport, OutboxRelay, fire-and-forget tradeoff, the fire-and-forget compiler warning and its suppressDiagnostics opt-out.",1783300761903]