[{"data":1,"prerenderedAt":483},["ShallowReactive",2],{"navigation":3,"-concepts-scopes":61,"-concepts-scopes-surround":480},[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":30,"body":63,"description":140,"extension":475,"meta":476,"navigation":477,"path":31,"seo":478,"stem":32,"__hash__":479},"content\u002F2.concepts\u002F3.scopes.md",{"type":64,"value":65,"toc":471},"minimark",[66,70,124,129,134,293,296,326,330,338,448,451,461,467],[67,68,69],"p",{},"Scoped dependencies cache one value for each context key. Compdi provides an accessor form and a contextual proxy form.",[71,72,73,89],"table",{},[74,75,76],"thead",{},[77,78,79,83,86],"tr",{},[80,81,82],"th",{},"Form",[80,84,85],{},"Context selection",[80,87,88],{},"Best fit",[90,91,92,107],"tbody",{},[77,93,94,101,104],{},[95,96,97],"td",{},[98,99,100],"code",{},"defineScoped",[95,102,103],{},"Passed explicitly to the accessor",[95,105,106],{},"Request handlers and code where ownership should be visible.",[77,108,109,114,121],{},[95,110,111],{},[98,112,113],{},"createScoped",[95,115,116,117,120],{},"Read from a ",[98,118,119],{},"context()"," callback",[95,122,123],{},"Framework integrations with an existing ambient context.",[125,126,128],"h2",{"id":127},"keyed-accessor","Keyed accessor",[67,130,131,133],{},[98,132,100],{}," returns a callable accessor. Supply the context key when resolving a value:",[135,136,141],"pre",{"className":137,"code":138,"language":139,"meta":140,"style":140},"language-ts shiki shiki-themes github-light github-dark github-dark","const useRequestService = defineScoped\u003CRequestService, Request>({\n  target: RequestService,\n  deps: [database],\n  onRelease: service => service.close(),\n});\n\nconst service = useRequestService(request);\n\nuseRequestService.has(request);     \u002F\u002F true\nuseRequestService.peek(request);    \u002F\u002F existing value, without creating one\nawait useRequestService.release(request);\n","ts","",[98,142,143,179,185,191,216,222,229,244,249,265,279],{"__ignoreMap":140},[144,145,148,152,156,159,163,167,170,173,176],"span",{"class":146,"line":147},"line",1,[144,149,151],{"class":150},"so5gQ","const",[144,153,155],{"class":154},"suiK_"," useRequestService",[144,157,158],{"class":150}," =",[144,160,162],{"class":161},"shcOC"," defineScoped",[144,164,166],{"class":165},"slsVL","\u003C",[144,168,169],{"class":161},"RequestService",[144,171,172],{"class":165},", ",[144,174,175],{"class":161},"Request",[144,177,178],{"class":165},">({\n",[144,180,182],{"class":146,"line":181},2,[144,183,184],{"class":165},"  target: RequestService,\n",[144,186,188],{"class":146,"line":187},3,[144,189,190],{"class":165},"  deps: [database],\n",[144,192,194,197,200,204,207,210,213],{"class":146,"line":193},4,[144,195,196],{"class":161},"  onRelease",[144,198,199],{"class":165},": ",[144,201,203],{"class":202},"sQHwn","service",[144,205,206],{"class":150}," =>",[144,208,209],{"class":165}," service.",[144,211,212],{"class":161},"close",[144,214,215],{"class":165},"(),\n",[144,217,219],{"class":146,"line":218},5,[144,220,221],{"class":165},"});\n",[144,223,225],{"class":146,"line":224},6,[144,226,228],{"emptyLinePlaceholder":227},true,"\n",[144,230,232,234,237,239,241],{"class":146,"line":231},7,[144,233,151],{"class":150},[144,235,236],{"class":154}," service",[144,238,158],{"class":150},[144,240,155],{"class":161},[144,242,243],{"class":165},"(request);\n",[144,245,247],{"class":146,"line":246},8,[144,248,228],{"emptyLinePlaceholder":227},[144,250,252,255,258,261],{"class":146,"line":251},9,[144,253,254],{"class":165},"useRequestService.",[144,256,257],{"class":161},"has",[144,259,260],{"class":165},"(request);     ",[144,262,264],{"class":263},"sCsY4","\u002F\u002F true\n",[144,266,268,270,273,276],{"class":146,"line":267},10,[144,269,254],{"class":165},[144,271,272],{"class":161},"peek",[144,274,275],{"class":165},"(request);    ",[144,277,278],{"class":263},"\u002F\u002F existing value, without creating one\n",[144,280,282,285,288,291],{"class":146,"line":281},11,[144,283,284],{"class":150},"await",[144,286,287],{"class":165}," useRequestService.",[144,289,290],{"class":161},"release",[144,292,243],{"class":165},[67,294,295],{},"The lifecycle methods never create a value:",[297,298,299,306,316],"ul",{},[300,301,302,305],"li",{},[98,303,304],{},"has(context)"," reports whether an entry exists.",[300,307,308,311,312,315],{},[98,309,310],{},"peek(context)"," returns an existing entry or ",[98,313,314],{},"undefined",".",[300,317,318,321,322,325],{},[98,319,320],{},"release(context)"," removes the entry and runs ",[98,323,324],{},"onRelease",", when configured.",[125,327,329],{"id":328},"contextual-proxy","Contextual proxy",[67,331,332,334,335,337],{},[98,333,113],{}," returns a stable proxy and a controller. The proxy asks ",[98,336,119],{}," for the active key when one of its properties is used:",[135,339,341],{"className":137,"code":340,"language":139,"meta":140,"style":140},"const [database, databaseScope] = createScoped({\n  factory: request => createRequestDatabase(request),\n  context: useRequest,\n  onRelease: instance => instance.close(),\n});\n\ndatabase.query(\"SELECT 1\");\nawait databaseScope.release(request);\n",[98,342,343,370,388,393,411,415,419,437],{"__ignoreMap":140},[144,344,345,347,350,353,355,358,361,364,367],{"class":146,"line":147},[144,346,151],{"class":150},[144,348,349],{"class":165}," [",[144,351,352],{"class":154},"database",[144,354,172],{"class":165},[144,356,357],{"class":154},"databaseScope",[144,359,360],{"class":165},"] ",[144,362,363],{"class":150},"=",[144,365,366],{"class":161}," createScoped",[144,368,369],{"class":165},"({\n",[144,371,372,375,377,380,382,385],{"class":146,"line":181},[144,373,374],{"class":161},"  factory",[144,376,199],{"class":165},[144,378,379],{"class":202},"request",[144,381,206],{"class":150},[144,383,384],{"class":161}," createRequestDatabase",[144,386,387],{"class":165},"(request),\n",[144,389,390],{"class":146,"line":187},[144,391,392],{"class":165},"  context: useRequest,\n",[144,394,395,397,399,402,404,407,409],{"class":146,"line":193},[144,396,196],{"class":161},[144,398,199],{"class":165},[144,400,401],{"class":202},"instance",[144,403,206],{"class":150},[144,405,406],{"class":165}," instance.",[144,408,212],{"class":161},[144,410,215],{"class":165},[144,412,413],{"class":146,"line":218},[144,414,221],{"class":165},[144,416,417],{"class":146,"line":224},[144,418,228],{"emptyLinePlaceholder":227},[144,420,421,424,427,430,434],{"class":146,"line":231},[144,422,423],{"class":165},"database.",[144,425,426],{"class":161},"query",[144,428,429],{"class":165},"(",[144,431,433],{"class":432},"sfrk1","\"SELECT 1\"",[144,435,436],{"class":165},");\n",[144,438,439,441,444,446],{"class":146,"line":246},[144,440,284],{"class":150},[144,442,443],{"class":165}," databaseScope.",[144,445,290],{"class":161},[144,447,243],{"class":165},[67,449,450],{},"Use the proxy form when an ambient context is already available. Use the accessor form when passing the context explicitly makes ownership clearer.",[452,453,454],"note",{},[67,455,456,458,459,315],{},[98,457,113],{}," proxies objects. For primitive scoped values, use ",[98,460,100],{},[462,463,464],"warning",{},[67,465,466],{},"Release each finished context. Otherwise its cached value remains reachable for the lifetime of the module.",[468,469,470],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}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 .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}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 .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}",{"title":140,"searchDepth":181,"depth":181,"links":472},[473,474],{"id":127,"depth":181,"text":128},{"id":328,"depth":181,"text":329},"md",{},{},{"title":30,"description":140},"YgCujrk_w9WDgjIbBNtau0Wf8ooZHPWdEnHpa6_w8es",[481,482],{"title":26,"path":27,"stem":28,"description":140,"children":-1},{"title":34,"path":35,"stem":36,"description":140,"children":-1},1785705021239]