[{"data":1,"prerenderedAt":351},["ShallowReactive",2],{"navigation":3,"-concepts-teardown":61,"-concepts-teardown-surround":348},[4,19,37,55],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Compdi","\u002Fguide","1.guide\u002F1.index",[9,11,15],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-book-open",{"title":12,"path":13,"stem":14,"icon":10},"Quick start","\u002Fguide\u002Fquick-start","1.guide\u002F2.quick-start",{"title":16,"path":17,"stem":18,"icon":10},"Imports and packages","\u002Fguide\u002Fimports","1.guide\u002F3.imports",{"title":20,"path":21,"stem":22,"children":23},"Lifecycles","\u002Fconcepts","2.concepts\u002F1.index",[24,25,29,33],{"title":20,"path":21,"stem":22},{"title":26,"path":27,"stem":28},"Targets, factories, and inference","\u002Fconcepts\u002Ffactories-and-inference","2.concepts\u002F2.factories-and-inference",{"title":30,"path":31,"stem":32},"Scoped dependencies","\u002Fconcepts\u002Fscopes","2.concepts\u002F3.scopes",{"title":34,"path":35,"stem":36},"Application teardown","\u002Fconcepts\u002Fteardown","2.concepts\u002F4.teardown",{"title":38,"path":39,"stem":40,"children":41},"Build-tool integrations","\u002Fintegrations","3.integrations\u002F1.index",[42,43,47,51],{"title":38,"path":39,"stem":40},{"title":44,"path":45,"stem":46},"Vite","\u002Fintegrations\u002Fvite","3.integrations\u002F2.vite",{"title":48,"path":49,"stem":50},"Rollup and Rolldown","\u002Fintegrations\u002Frollup-and-rolldown","3.integrations\u002F3.rollup-and-rolldown",{"title":52,"path":53,"stem":54},"Rspack and esbuild","\u002Fintegrations\u002Frspack-and-esbuild","3.integrations\u002F4.rspack-and-esbuild",{"title":56,"path":57,"stem":58,"children":59},"API","\u002Fapi","4.api\u002F1.index",[60],{"title":56,"path":57,"stem":58},{"id":62,"title":34,"body":63,"description":86,"extension":343,"meta":344,"navigation":345,"path":35,"seo":346,"stem":36,"__hash__":347},"content\u002F2.concepts\u002F4.teardown.md",{"type":64,"value":65,"toc":341},"minimark",[66,74,80,265,327,330,337],[67,68,69,73],"p",{},[70,71,72],"code",{},"defineAppTeardown"," creates an async cleanup function for application-owned resources.",[75,76,77],"warning",{},[67,78,79],{},"This macro is experimental and may be removed in a future release. Avoid exposing it as part of a library's stable public API.",[81,82,87],"pre",{"className":83,"code":84,"language":85,"meta":86,"style":86},"language-ts shiki shiki-themes github-light github-dark github-dark","import {\n  createSingleton,\n  defineAppTeardown,\n} from \"compdi\u002Fmacros\";\n\nconst database = createSingleton({\n  factory: () => openDatabase(),\n});\n\nconst server = createSingleton({\n  factory: (database: Database) => startServer(database),\n  deps: [database],\n});\n\nexport const teardown = defineAppTeardown([database, server]);\n","ts","",[70,88,89,102,108,114,130,137,157,175,181,186,200,229,235,240,245],{"__ignoreMap":86},[90,91,94,98],"span",{"class":92,"line":93},"line",1,[90,95,97],{"class":96},"so5gQ","import",[90,99,101],{"class":100},"slsVL"," {\n",[90,103,105],{"class":92,"line":104},2,[90,106,107],{"class":100},"  createSingleton,\n",[90,109,111],{"class":92,"line":110},3,[90,112,113],{"class":100},"  defineAppTeardown,\n",[90,115,117,120,123,127],{"class":92,"line":116},4,[90,118,119],{"class":100},"} ",[90,121,122],{"class":96},"from",[90,124,126],{"class":125},"sfrk1"," \"compdi\u002Fmacros\"",[90,128,129],{"class":100},";\n",[90,131,133],{"class":92,"line":132},5,[90,134,136],{"emptyLinePlaceholder":135},true,"\n",[90,138,140,143,147,150,154],{"class":92,"line":139},6,[90,141,142],{"class":96},"const",[90,144,146],{"class":145},"suiK_"," database",[90,148,149],{"class":96}," =",[90,151,153],{"class":152},"shcOC"," createSingleton",[90,155,156],{"class":100},"({\n",[90,158,160,163,166,169,172],{"class":92,"line":159},7,[90,161,162],{"class":152},"  factory",[90,164,165],{"class":100},": () ",[90,167,168],{"class":96},"=>",[90,170,171],{"class":152}," openDatabase",[90,173,174],{"class":100},"(),\n",[90,176,178],{"class":92,"line":177},8,[90,179,180],{"class":100},"});\n",[90,182,184],{"class":92,"line":183},9,[90,185,136],{"emptyLinePlaceholder":135},[90,187,189,191,194,196,198],{"class":92,"line":188},10,[90,190,142],{"class":96},[90,192,193],{"class":145}," server",[90,195,149],{"class":96},[90,197,153],{"class":152},[90,199,156],{"class":100},[90,201,203,205,208,212,215,218,221,223,226],{"class":92,"line":202},11,[90,204,162],{"class":152},[90,206,207],{"class":100},": (",[90,209,211],{"class":210},"sQHwn","database",[90,213,214],{"class":96},":",[90,216,217],{"class":152}," Database",[90,219,220],{"class":100},") ",[90,222,168],{"class":96},[90,224,225],{"class":152}," startServer",[90,227,228],{"class":100},"(database),\n",[90,230,232],{"class":92,"line":231},12,[90,233,234],{"class":100},"  deps: [database],\n",[90,236,238],{"class":92,"line":237},13,[90,239,180],{"class":100},[90,241,243],{"class":92,"line":242},14,[90,244,136],{"emptyLinePlaceholder":135},[90,246,248,251,254,257,259,262],{"class":92,"line":247},15,[90,249,250],{"class":96},"export",[90,252,253],{"class":96}," const",[90,255,256],{"class":145}," teardown",[90,258,149],{"class":96},[90,260,261],{"class":152}," defineAppTeardown",[90,263,264],{"class":100},"([database, server]);\n",[81,266,268],{"className":83,"code":267,"language":85,"meta":86,"style":86},"process.once(\"SIGTERM\", async () => {\n  await teardown();\n  process.exit(0);\n});\n",[70,269,270,297,307,323],{"__ignoreMap":86},[90,271,272,275,278,281,284,287,290,293,295],{"class":92,"line":93},[90,273,274],{"class":100},"process.",[90,276,277],{"class":152},"once",[90,279,280],{"class":100},"(",[90,282,283],{"class":125},"\"SIGTERM\"",[90,285,286],{"class":100},", ",[90,288,289],{"class":96},"async",[90,291,292],{"class":100}," () ",[90,294,168],{"class":96},[90,296,101],{"class":100},[90,298,299,302,304],{"class":92,"line":104},[90,300,301],{"class":96},"  await",[90,303,256],{"class":152},[90,305,306],{"class":100},"();\n",[90,308,309,312,315,317,320],{"class":92,"line":110},[90,310,311],{"class":100},"  process.",[90,313,314],{"class":152},"exit",[90,316,280],{"class":100},[90,318,319],{"class":145},"0",[90,321,322],{"class":100},");\n",[90,324,325],{"class":92,"line":116},[90,326,180],{"class":100},[67,328,329],{},"Resources are disposed in reverse order, so the server is released before the database it depends on. Supported disposal protocols are resolved during the transform.",[67,331,332,333,336],{},"For scoped resources, prefer the scope's ",[70,334,335],{},"release(context)"," method. Application teardown is intended for resources owned by the full application lifecycle.",[338,339,340],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":86,"searchDepth":104,"depth":104,"links":342},[],"md",{},{},{"title":34,"description":86},"C-GD4dG7VeSLTcxITcvEhlkZ4quuf8NSitHV2DZxxpc",[349,350],{"title":30,"path":31,"stem":32,"description":86,"children":-1},{"title":38,"path":39,"stem":40,"description":86,"children":-1},1785705021240]