[{"data":1,"prerenderedAt":413},["ShallowReactive",2],{"navigation":3,"-concepts-factories-and-inference":61,"-concepts-factories-and-inference-surround":410},[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":26,"body":63,"description":128,"extension":405,"meta":406,"navigation":407,"path":27,"seo":408,"stem":28,"__hash__":409},"content\u002F2.concepts\u002F2.factories-and-inference.md",{"type":64,"value":65,"toc":401},"minimark",[66,79,117,122,231,238,242,245,300,307,385,391,397],[67,68,69,70,74,75,78],"p",{},"Lifecycle macros accept either a class ",[71,72,73],"code",{},"target"," or a ",[71,76,77],{},"factory",".",[80,81,82,95],"table",{},[83,84,85],"thead",{},[86,87,88,92],"tr",{},[89,90,91],"th",{},"Choose",[89,93,94],{},"When",[96,97,98,108],"tbody",{},[86,99,100,105],{},[101,102,103],"td",{},[71,104,73],{},[101,106,107],{},"You have a concrete class and want constructor parameter checking.",[86,109,110,114],{},[101,111,112],{},[71,113,77],{},[101,115,116],{},"You need async setup, an interface result, configuration, or custom construction.",[118,119,121],"h2",{"id":120},"class-targets","Class targets",[123,124,129],"pre",{"className":125,"code":126,"language":127,"meta":128,"style":128},"language-ts shiki shiki-themes github-light github-dark github-dark","class Service {\n  constructor(database: Database, logger: Logger) {}\n}\n\nconst createService = createTransient({\n  target: Service,\n  deps: [database, logger],\n});\n","ts","",[71,130,131,148,181,187,194,213,219,225],{"__ignoreMap":128},[132,133,136,140,144],"span",{"class":134,"line":135},"line",1,[132,137,139],{"class":138},"so5gQ","class",[132,141,143],{"class":142},"shcOC"," Service",[132,145,147],{"class":146},"slsVL"," {\n",[132,149,151,154,157,161,164,167,170,173,175,178],{"class":134,"line":150},2,[132,152,153],{"class":138},"  constructor",[132,155,156],{"class":146},"(",[132,158,160],{"class":159},"sQHwn","database",[132,162,163],{"class":138},":",[132,165,166],{"class":142}," Database",[132,168,169],{"class":146},", ",[132,171,172],{"class":159},"logger",[132,174,163],{"class":138},[132,176,177],{"class":142}," Logger",[132,179,180],{"class":146},") {}\n",[132,182,184],{"class":134,"line":183},3,[132,185,186],{"class":146},"}\n",[132,188,190],{"class":134,"line":189},4,[132,191,193],{"emptyLinePlaceholder":192},true,"\n",[132,195,197,200,204,207,210],{"class":134,"line":196},5,[132,198,199],{"class":138},"const",[132,201,203],{"class":202},"suiK_"," createService",[132,205,206],{"class":138}," =",[132,208,209],{"class":142}," createTransient",[132,211,212],{"class":146},"({\n",[132,214,216],{"class":134,"line":215},6,[132,217,218],{"class":146},"  target: Service,\n",[132,220,222],{"class":134,"line":221},7,[132,223,224],{"class":146},"  deps: [database, logger],\n",[132,226,228],{"class":134,"line":227},8,[132,229,230],{"class":146},"});\n",[67,232,233,234,237],{},"The ",[71,235,236],{},"deps"," tuple is checked against the constructor parameters.",[118,239,241],{"id":240},"factories","Factories",[67,243,244],{},"Use a factory for interfaces, configuration, conditional construction, or async setup:",[123,246,248],{"className":125,"code":247,"language":127,"meta":128,"style":128},"const connection = await createSingleton({\n  factory: async () => connect(process.env.DATABASE_URL),\n});\n",[71,249,250,267,296],{"__ignoreMap":128},[132,251,252,254,257,259,262,265],{"class":134,"line":135},[132,253,199],{"class":138},[132,255,256],{"class":202}," connection",[132,258,206],{"class":138},[132,260,261],{"class":138}," await",[132,263,264],{"class":142}," createSingleton",[132,266,212],{"class":146},[132,268,269,272,275,278,281,284,287,290,293],{"class":134,"line":150},[132,270,271],{"class":142},"  factory",[132,273,274],{"class":146},": ",[132,276,277],{"class":138},"async",[132,279,280],{"class":146}," () ",[132,282,283],{"class":138},"=>",[132,285,286],{"class":142}," connect",[132,288,289],{"class":146},"(process.env.",[132,291,292],{"class":202},"DATABASE_URL",[132,294,295],{"class":146},"),\n",[132,297,298],{"class":134,"line":183},[132,299,230],{"class":146},[67,301,302,303,306],{},"Factory parameters and return values are inferred. An async factory passed to ",[71,304,305],{},"createTransient"," produces a function returning a promise:",[123,308,310],{"className":125,"code":309,"language":127,"meta":128,"style":128},"const createSession = createTransient({\n  factory: async (database: Database) => database.createSession(),\n  deps: [database],\n});\n\nconst session = await createSession();\n",[71,311,312,325,356,361,365,369],{"__ignoreMap":128},[132,313,314,316,319,321,323],{"class":134,"line":135},[132,315,199],{"class":138},[132,317,318],{"class":202}," createSession",[132,320,206],{"class":138},[132,322,209],{"class":142},[132,324,212],{"class":146},[132,326,327,329,331,333,336,338,340,342,345,347,350,353],{"class":134,"line":150},[132,328,271],{"class":142},[132,330,274],{"class":146},[132,332,277],{"class":138},[132,334,335],{"class":146}," (",[132,337,160],{"class":159},[132,339,163],{"class":138},[132,341,166],{"class":142},[132,343,344],{"class":146},") ",[132,346,283],{"class":138},[132,348,349],{"class":146}," database.",[132,351,352],{"class":142},"createSession",[132,354,355],{"class":146},"(),\n",[132,357,358],{"class":134,"line":183},[132,359,360],{"class":146},"  deps: [database],\n",[132,362,363],{"class":134,"line":189},[132,364,230],{"class":146},[132,366,367],{"class":134,"line":196},[132,368,193],{"emptyLinePlaceholder":192},[132,370,371,373,376,378,380,382],{"class":134,"line":215},[132,372,199],{"class":138},[132,374,375],{"class":202}," session",[132,377,206],{"class":138},[132,379,261],{"class":138},[132,381,318],{"class":142},[132,383,384],{"class":146},"();\n",[67,386,387,388,390],{},"Pass ",[71,389,236],{}," in the same order as the target constructor or factory parameters.",[392,393,394],"tip",{},[67,395,396],{},"Prefer inference from the target or factory. Add explicit generic arguments only when you need to narrow the public interface or declare a context-key type.",[398,399,400],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}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 .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}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":128,"searchDepth":150,"depth":150,"links":402},[403,404],{"id":120,"depth":150,"text":121},{"id":240,"depth":150,"text":241},"md",{},{},{"title":26,"description":128},"Jg1x95YPp1SCUoAAK8fuTEdADdgTrweABdgDxBBn2e8",[411,412],{"title":20,"path":21,"stem":22,"description":128,"children":-1},{"title":30,"path":31,"stem":32,"description":128,"children":-1},1785705021239]