@navios/di 0.9.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/README.md +28 -0
- package/coverage/block-navigation.js +1 -1
- package/coverage/clover.xml +1463 -3174
- package/coverage/coverage-final.json +56 -54
- package/coverage/index.html +179 -104
- package/coverage/sorter.js +21 -7
- package/coverage/src/{request-context-manager.mts.html → __tests__/gc/gc-test-utils.mts.html} +192 -231
- package/coverage/{lib → src/__tests__/gc}/index.html +25 -40
- package/coverage/src/container/abstract-container.mts.html +1066 -0
- package/coverage/src/container/container.mts.html +958 -0
- package/coverage/src/container/index.html +161 -0
- package/coverage/src/{testing → container}/index.mts.html +12 -9
- package/coverage/src/container/scoped-container.mts.html +907 -0
- package/coverage/src/decorators/factory.decorator.mts.html +68 -53
- package/coverage/src/decorators/index.html +34 -34
- package/coverage/src/decorators/index.mts.html +10 -10
- package/coverage/src/decorators/injectable.decorator.mts.html +144 -60
- package/coverage/src/enums/index.html +21 -21
- package/coverage/src/enums/index.mts.html +12 -12
- package/coverage/src/enums/injectable-scope.enum.mts.html +11 -8
- package/coverage/src/enums/injectable-type.enum.mts.html +10 -7
- package/coverage/src/errors/di-error.mts.html +380 -71
- package/coverage/src/errors/index.html +22 -127
- package/coverage/src/errors/index.mts.html +9 -33
- package/coverage/src/event-emitter.mts.html +35 -107
- package/coverage/src/index.html +14 -254
- package/coverage/src/index.mts.html +23 -50
- package/coverage/src/interfaces/container.interface.mts.html +370 -0
- package/coverage/src/interfaces/factory.interface.mts.html +12 -12
- package/coverage/src/interfaces/index.html +45 -30
- package/coverage/src/interfaces/index.mts.html +16 -13
- package/coverage/src/interfaces/on-service-destroy.interface.mts.html +1 -1
- package/coverage/src/interfaces/on-service-init.interface.mts.html +1 -1
- package/coverage/src/internal/context/async-local-storage.browser.mts.html +142 -0
- package/coverage/src/internal/context/async-local-storage.mts.html +292 -0
- package/coverage/src/{factory-context.mts.html → internal/context/async-local-storage.types.mts.html} +17 -17
- package/coverage/src/internal/context/factory-context.mts.html +142 -0
- package/coverage/src/internal/context/index.html +221 -0
- package/coverage/src/internal/context/index.mts.html +100 -0
- package/coverage/src/{service-locator-instance-holder.mts.html → internal/context/resolution-context.mts.html} +114 -78
- package/coverage/src/internal/context/service-initialization-context.mts.html +214 -0
- package/coverage/src/internal/context/sync-local-storage.mts.html +244 -0
- package/coverage/src/internal/core/index.html +206 -0
- package/coverage/src/internal/core/index.mts.html +103 -0
- package/coverage/src/internal/core/instance-resolver.mts.html +2533 -0
- package/coverage/src/{request-context-holder.mts.html → internal/core/name-resolver.mts.html} +245 -260
- package/coverage/src/{container.mts.html → internal/core/scope-tracker.mts.html} +352 -310
- package/coverage/src/{service-instantiator.mts.html → internal/core/service-initializer.mts.html} +254 -176
- package/coverage/src/internal/core/service-invalidator.mts.html +955 -0
- package/coverage/src/internal/core/token-resolver.mts.html +451 -0
- package/coverage/src/internal/holder/holder-storage.interface.mts.html +451 -0
- package/coverage/src/internal/holder/index.html +161 -0
- package/coverage/src/internal/holder/index.mts.html +94 -0
- package/coverage/src/internal/holder/instance-holder.mts.html +406 -0
- package/coverage/src/{service-locator.mts.html → internal/holder/unified-storage.mts.html} +376 -379
- package/coverage/{lib/testing → src/internal}/index.html +26 -11
- package/coverage/src/internal/index.mts.html +100 -0
- package/coverage/src/internal/lifecycle/circular-detector.mts.html +364 -0
- package/coverage/src/internal/lifecycle/index.html +146 -0
- package/coverage/src/internal/lifecycle/index.mts.html +91 -0
- package/coverage/src/{service-locator-event-bus.mts.html → internal/lifecycle/lifecycle-event-bus.mts.html} +104 -80
- package/coverage/src/internal/stub-factory-class.mts.html +133 -0
- package/coverage/src/symbols/index.html +14 -14
- package/coverage/src/symbols/index.mts.html +9 -9
- package/coverage/src/symbols/injectable-token.mts.html +9 -3
- package/coverage/src/testing/index.html +32 -32
- package/coverage/src/testing/test-container.mts.html +1576 -139
- package/coverage/src/testing/unit-test-container.mts.html +1888 -0
- package/coverage/src/token/index.html +146 -0
- package/coverage/{lib/testing/index.d.mts.html → src/token/index.mts.html} +11 -11
- package/coverage/src/{injection-token.mts.html → token/injection-token.mts.html} +225 -111
- package/coverage/src/{base-instance-holder-manager.mts.html → token/registry.mts.html} +188 -269
- package/coverage/src/{injector.mts.html → utils/default-injectors.mts.html} +31 -31
- package/coverage/src/utils/get-injectable-token.mts.html +19 -22
- package/coverage/src/utils/get-injectors.mts.html +684 -177
- package/coverage/src/utils/index.html +36 -36
- package/coverage/src/utils/index.mts.html +18 -12
- package/coverage/src/utils/types.mts.html +26 -11
- package/docs/examples/basic-usage.mts +1 -1
- package/docs/examples/factory-pattern.mts +3 -3
- package/docs/examples/request-scope-example.mts +1 -1
- package/docs/examples/service-lifecycle.mts +1 -1
- package/lib/browser/internal/core/instance-resolver.d.mts.map +1 -1
- package/lib/browser/internal/core/instance-resolver.mjs.map +1 -1
- package/lib/{container-D-0Ho3qL.d.cts → container-D3j3KuD9.d.mts} +5 -289
- package/lib/container-D3j3KuD9.d.mts.map +1 -0
- package/lib/{container-Bi0huFQX.mjs → container-qgHMgGNG.mjs} +3 -227
- package/lib/container-qgHMgGNG.mjs.map +1 -0
- package/lib/{container-CNiqesCL.d.mts → container-r1KP4F-n.d.cts} +5 -289
- package/lib/container-r1KP4F-n.d.cts.map +1 -0
- package/lib/{container-pmGNCZL_.cjs → container-ycYJgTq7.cjs} +41 -319
- package/lib/container-ycYJgTq7.cjs.map +1 -0
- package/lib/factory.decorator-D4mem6YQ.cjs +21 -0
- package/lib/factory.decorator-D4mem6YQ.cjs.map +1 -0
- package/lib/factory.decorator-_IPWcwQn.mjs +16 -0
- package/lib/factory.decorator-_IPWcwQn.mjs.map +1 -0
- package/lib/index.cjs +14 -24
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +3 -52
- package/lib/index.d.cts.map +1 -1
- package/lib/index.d.mts +3 -52
- package/lib/index.d.mts.map +1 -1
- package/lib/index.mjs +3 -13
- package/lib/index.mjs.map +1 -1
- package/lib/injectable.decorator-BNfWpjr_.d.cts +56 -0
- package/lib/injectable.decorator-BNfWpjr_.d.cts.map +1 -0
- package/lib/injectable.decorator-Bc05hRQU.d.mts +56 -0
- package/lib/injectable.decorator-Bc05hRQU.d.mts.map +1 -0
- package/lib/injectable.decorator-CyPrBzBN.mjs +227 -0
- package/lib/injectable.decorator-CyPrBzBN.mjs.map +1 -0
- package/lib/injectable.decorator-DbpiDrg-.cjs +281 -0
- package/lib/injectable.decorator-DbpiDrg-.cjs.map +1 -0
- package/lib/legacy-compat/index.cjs +114 -0
- package/lib/legacy-compat/index.cjs.map +1 -0
- package/lib/legacy-compat/index.d.cts +63 -0
- package/lib/legacy-compat/index.d.cts.map +1 -0
- package/lib/legacy-compat/index.d.mts +63 -0
- package/lib/legacy-compat/index.d.mts.map +1 -0
- package/lib/legacy-compat/index.mjs +111 -0
- package/lib/legacy-compat/index.mjs.map +1 -0
- package/lib/registry-DKbKWFvJ.d.cts +290 -0
- package/lib/registry-DKbKWFvJ.d.cts.map +1 -0
- package/lib/registry-n8JhJoxm.d.mts +290 -0
- package/lib/registry-n8JhJoxm.d.mts.map +1 -0
- package/lib/testing/index.cjs +23 -22
- package/lib/testing/index.cjs.map +1 -1
- package/lib/testing/index.d.cts +2 -1
- package/lib/testing/index.d.cts.map +1 -1
- package/lib/testing/index.d.mts +2 -1
- package/lib/testing/index.d.mts.map +1 -1
- package/lib/testing/index.mjs +2 -1
- package/lib/testing/index.mjs.map +1 -1
- package/package.json +11 -1
- package/project.json +8 -0
- package/src/__tests__/gc/basic-container.spec.mts +358 -0
- package/src/__tests__/gc/circular-dependencies.spec.mts +501 -0
- package/src/__tests__/gc/gc-test-utils.mts +136 -0
- package/src/__tests__/gc/memory-pressure.spec.mts +542 -0
- package/src/__tests__/gc/scoped-container.spec.mts +444 -0
- package/src/__tests__/gc/transient-services.spec.mts +326 -0
- package/src/__tests__/scope-upgrade.spec.mts +0 -18
- package/src/internal/core/instance-resolver.mts +0 -1
- package/src/legacy-compat/context-compat.mts +95 -0
- package/src/legacy-compat/factory.decorator.mts +37 -0
- package/src/legacy-compat/index.mts +16 -0
- package/src/legacy-compat/injectable.decorator.mts +41 -0
- package/tsdown.config.mts +1 -1
- package/vitest.config.mts +3 -7
- package/coverage/docs/examples/basic-usage.mts.html +0 -376
- package/coverage/docs/examples/factory-pattern.mts.html +0 -1039
- package/coverage/docs/examples/index.html +0 -176
- package/coverage/docs/examples/injection-tokens.mts.html +0 -760
- package/coverage/docs/examples/request-scope-example.mts.html +0 -847
- package/coverage/docs/examples/service-lifecycle.mts.html +0 -1162
- package/coverage/lib/_tsup-dts-rollup.d.mts.html +0 -3445
- package/coverage/lib/index.d.mts.html +0 -313
- package/coverage/src/errors/errors.enum.mts.html +0 -118
- package/coverage/src/errors/factory-not-found.mts.html +0 -118
- package/coverage/src/errors/factory-token-not-resolved.mts.html +0 -118
- package/coverage/src/errors/instance-destroying.mts.html +0 -118
- package/coverage/src/errors/instance-expired.mts.html +0 -118
- package/coverage/src/errors/instance-not-found.mts.html +0 -118
- package/coverage/src/errors/unknown-error.mts.html +0 -118
- package/coverage/src/instance-resolver.mts.html +0 -1762
- package/coverage/src/registry.mts.html +0 -247
- package/coverage/src/service-invalidator.mts.html +0 -1372
- package/coverage/src/service-locator-manager.mts.html +0 -340
- package/coverage/src/token-processor.mts.html +0 -607
- package/coverage/src/utils/defer.mts.html +0 -118
- package/lib/container-Bi0huFQX.mjs.map +0 -1
- package/lib/container-CNiqesCL.d.mts.map +0 -1
- package/lib/container-D-0Ho3qL.d.cts.map +0 -1
- package/lib/container-pmGNCZL_.cjs.map +0 -1
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">93.05% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>67/72</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">82.85% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>29/35</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">94.11% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>16/17</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">93.05% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>67/72</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -265,7 +265,176 @@
|
|
|
265
265
|
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
266
|
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
267
|
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
-
<a name='L203'></a><a href='#L203'>203</a
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
+
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
+
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
+
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
+
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
+
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
+
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
+
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
+
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
+
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
+
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
+
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
+
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
+
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
+
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
+
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
+
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
+
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
+
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
+
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
+
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
+
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
+
<a name='L337'></a><a href='#L337'>337</a>
|
|
403
|
+
<a name='L338'></a><a href='#L338'>338</a>
|
|
404
|
+
<a name='L339'></a><a href='#L339'>339</a>
|
|
405
|
+
<a name='L340'></a><a href='#L340'>340</a>
|
|
406
|
+
<a name='L341'></a><a href='#L341'>341</a>
|
|
407
|
+
<a name='L342'></a><a href='#L342'>342</a>
|
|
408
|
+
<a name='L343'></a><a href='#L343'>343</a>
|
|
409
|
+
<a name='L344'></a><a href='#L344'>344</a>
|
|
410
|
+
<a name='L345'></a><a href='#L345'>345</a>
|
|
411
|
+
<a name='L346'></a><a href='#L346'>346</a>
|
|
412
|
+
<a name='L347'></a><a href='#L347'>347</a>
|
|
413
|
+
<a name='L348'></a><a href='#L348'>348</a>
|
|
414
|
+
<a name='L349'></a><a href='#L349'>349</a>
|
|
415
|
+
<a name='L350'></a><a href='#L350'>350</a>
|
|
416
|
+
<a name='L351'></a><a href='#L351'>351</a>
|
|
417
|
+
<a name='L352'></a><a href='#L352'>352</a>
|
|
418
|
+
<a name='L353'></a><a href='#L353'>353</a>
|
|
419
|
+
<a name='L354'></a><a href='#L354'>354</a>
|
|
420
|
+
<a name='L355'></a><a href='#L355'>355</a>
|
|
421
|
+
<a name='L356'></a><a href='#L356'>356</a>
|
|
422
|
+
<a name='L357'></a><a href='#L357'>357</a>
|
|
423
|
+
<a name='L358'></a><a href='#L358'>358</a>
|
|
424
|
+
<a name='L359'></a><a href='#L359'>359</a>
|
|
425
|
+
<a name='L360'></a><a href='#L360'>360</a>
|
|
426
|
+
<a name='L361'></a><a href='#L361'>361</a>
|
|
427
|
+
<a name='L362'></a><a href='#L362'>362</a>
|
|
428
|
+
<a name='L363'></a><a href='#L363'>363</a>
|
|
429
|
+
<a name='L364'></a><a href='#L364'>364</a>
|
|
430
|
+
<a name='L365'></a><a href='#L365'>365</a>
|
|
431
|
+
<a name='L366'></a><a href='#L366'>366</a>
|
|
432
|
+
<a name='L367'></a><a href='#L367'>367</a>
|
|
433
|
+
<a name='L368'></a><a href='#L368'>368</a>
|
|
434
|
+
<a name='L369'></a><a href='#L369'>369</a>
|
|
435
|
+
<a name='L370'></a><a href='#L370'>370</a>
|
|
436
|
+
<a name='L371'></a><a href='#L371'>371</a>
|
|
437
|
+
<a name='L372'></a><a href='#L372'>372</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
269
438
|
<span class="cline-any cline-neutral"> </span>
|
|
270
439
|
<span class="cline-any cline-neutral"> </span>
|
|
271
440
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -278,7 +447,6 @@
|
|
|
278
447
|
<span class="cline-any cline-neutral"> </span>
|
|
279
448
|
<span class="cline-any cline-neutral"> </span>
|
|
280
449
|
<span class="cline-any cline-neutral"> </span>
|
|
281
|
-
<span class="cline-any cline-yes">1x</span>
|
|
282
450
|
<span class="cline-any cline-neutral"> </span>
|
|
283
451
|
<span class="cline-any cline-neutral"> </span>
|
|
284
452
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -337,158 +505,352 @@
|
|
|
337
505
|
<span class="cline-any cline-neutral"> </span>
|
|
338
506
|
<span class="cline-any cline-neutral"> </span>
|
|
339
507
|
<span class="cline-any cline-neutral"> </span>
|
|
340
|
-
<span class="cline-any cline-yes">1x</span>
|
|
341
|
-
<span class="cline-any cline-yes">15x</span>
|
|
342
|
-
<span class="cline-any cline-neutral"> </span>
|
|
343
|
-
<span class="cline-any cline-yes">15x</span>
|
|
344
|
-
<span class="cline-any cline-yes">665x</span>
|
|
345
|
-
<span class="cline-any cline-yes">665x</span>
|
|
346
|
-
<span class="cline-any cline-yes">665x</span>
|
|
347
|
-
<span class="cline-any cline-yes">665x</span>
|
|
348
|
-
<span class="cline-any cline-yes">665x</span>
|
|
349
|
-
<span class="cline-any cline-yes">665x</span>
|
|
350
|
-
<span class="cline-any cline-yes">15x</span>
|
|
351
|
-
<span class="cline-any cline-yes">154x</span>
|
|
352
|
-
<span class="cline-any cline-yes">1x</span>
|
|
353
|
-
<span class="cline-any cline-yes">1x</span>
|
|
354
|
-
<span class="cline-any cline-yes">1x</span>
|
|
355
|
-
<span class="cline-any cline-yes">1x</span>
|
|
356
|
-
<span class="cline-any cline-yes">153x</span>
|
|
357
|
-
<span class="cline-any cline-yes">154x</span>
|
|
358
508
|
<span class="cline-any cline-neutral"> </span>
|
|
359
|
-
<span class="cline-any cline-yes">15x</span>
|
|
360
|
-
<span class="cline-any cline-yes">15x</span>
|
|
361
509
|
<span class="cline-any cline-neutral"> </span>
|
|
362
|
-
<span class="cline-any cline-yes">15x</span>
|
|
363
|
-
<span class="cline-any cline-yes">13x</span>
|
|
364
510
|
<span class="cline-any cline-neutral"> </span>
|
|
365
511
|
<span class="cline-any cline-neutral"> </span>
|
|
366
512
|
<span class="cline-any cline-neutral"> </span>
|
|
367
513
|
<span class="cline-any cline-neutral"> </span>
|
|
368
|
-
<span class="cline-any cline-
|
|
369
|
-
<span class="cline-any cline-
|
|
370
|
-
<span class="cline-any cline-
|
|
371
|
-
<span class="cline-any cline-
|
|
372
|
-
<span class="cline-any cline-
|
|
373
|
-
<span class="cline-any cline-
|
|
374
|
-
<span class="cline-any cline-
|
|
375
|
-
<span class="cline-any cline-
|
|
376
|
-
<span class="cline-any cline-
|
|
377
|
-
<span class="cline-any cline-
|
|
378
|
-
<span class="cline-any cline-
|
|
379
|
-
<span class="cline-any cline-
|
|
514
|
+
<span class="cline-any cline-neutral"> </span>
|
|
515
|
+
<span class="cline-any cline-neutral"> </span>
|
|
516
|
+
<span class="cline-any cline-neutral"> </span>
|
|
517
|
+
<span class="cline-any cline-neutral"> </span>
|
|
518
|
+
<span class="cline-any cline-neutral"> </span>
|
|
519
|
+
<span class="cline-any cline-neutral"> </span>
|
|
520
|
+
<span class="cline-any cline-neutral"> </span>
|
|
521
|
+
<span class="cline-any cline-neutral"> </span>
|
|
522
|
+
<span class="cline-any cline-neutral"> </span>
|
|
523
|
+
<span class="cline-any cline-neutral"> </span>
|
|
524
|
+
<span class="cline-any cline-neutral"> </span>
|
|
525
|
+
<span class="cline-any cline-neutral"> </span>
|
|
526
|
+
<span class="cline-any cline-neutral"> </span>
|
|
527
|
+
<span class="cline-any cline-neutral"> </span>
|
|
528
|
+
<span class="cline-any cline-neutral"> </span>
|
|
529
|
+
<span class="cline-any cline-neutral"> </span>
|
|
530
|
+
<span class="cline-any cline-neutral"> </span>
|
|
531
|
+
<span class="cline-any cline-neutral"> </span>
|
|
532
|
+
<span class="cline-any cline-neutral"> </span>
|
|
533
|
+
<span class="cline-any cline-neutral"> </span>
|
|
534
|
+
<span class="cline-any cline-neutral"> </span>
|
|
535
|
+
<span class="cline-any cline-neutral"> </span>
|
|
536
|
+
<span class="cline-any cline-neutral"> </span>
|
|
537
|
+
<span class="cline-any cline-neutral"> </span>
|
|
538
|
+
<span class="cline-any cline-neutral"> </span>
|
|
539
|
+
<span class="cline-any cline-neutral"> </span>
|
|
540
|
+
<span class="cline-any cline-neutral"> </span>
|
|
541
|
+
<span class="cline-any cline-neutral"> </span>
|
|
542
|
+
<span class="cline-any cline-neutral"> </span>
|
|
543
|
+
<span class="cline-any cline-neutral"> </span>
|
|
544
|
+
<span class="cline-any cline-neutral"> </span>
|
|
545
|
+
<span class="cline-any cline-neutral"> </span>
|
|
546
|
+
<span class="cline-any cline-neutral"> </span>
|
|
547
|
+
<span class="cline-any cline-neutral"> </span>
|
|
548
|
+
<span class="cline-any cline-neutral"> </span>
|
|
549
|
+
<span class="cline-any cline-neutral"> </span>
|
|
550
|
+
<span class="cline-any cline-neutral"> </span>
|
|
551
|
+
<span class="cline-any cline-neutral"> </span>
|
|
552
|
+
<span class="cline-any cline-neutral"> </span>
|
|
553
|
+
<span class="cline-any cline-neutral"> </span>
|
|
554
|
+
<span class="cline-any cline-neutral"> </span>
|
|
555
|
+
<span class="cline-any cline-neutral"> </span>
|
|
556
|
+
<span class="cline-any cline-neutral"> </span>
|
|
557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
558
|
+
<span class="cline-any cline-neutral"> </span>
|
|
559
|
+
<span class="cline-any cline-neutral"> </span>
|
|
560
|
+
<span class="cline-any cline-neutral"> </span>
|
|
561
|
+
<span class="cline-any cline-neutral"> </span>
|
|
562
|
+
<span class="cline-any cline-neutral"> </span>
|
|
563
|
+
<span class="cline-any cline-neutral"> </span>
|
|
564
|
+
<span class="cline-any cline-neutral"> </span>
|
|
565
|
+
<span class="cline-any cline-neutral"> </span>
|
|
566
|
+
<span class="cline-any cline-neutral"> </span>
|
|
567
|
+
<span class="cline-any cline-neutral"> </span>
|
|
568
|
+
<span class="cline-any cline-neutral"> </span>
|
|
569
|
+
<span class="cline-any cline-neutral"> </span>
|
|
570
|
+
<span class="cline-any cline-neutral"> </span>
|
|
571
|
+
<span class="cline-any cline-neutral"> </span>
|
|
572
|
+
<span class="cline-any cline-neutral"> </span>
|
|
573
|
+
<span class="cline-any cline-neutral"> </span>
|
|
574
|
+
<span class="cline-any cline-neutral"> </span>
|
|
575
|
+
<span class="cline-any cline-neutral"> </span>
|
|
576
|
+
<span class="cline-any cline-neutral"> </span>
|
|
577
|
+
<span class="cline-any cline-neutral"> </span>
|
|
578
|
+
<span class="cline-any cline-neutral"> </span>
|
|
579
|
+
<span class="cline-any cline-neutral"> </span>
|
|
580
|
+
<span class="cline-any cline-neutral"> </span>
|
|
581
|
+
<span class="cline-any cline-neutral"> </span>
|
|
582
|
+
<span class="cline-any cline-neutral"> </span>
|
|
583
|
+
<span class="cline-any cline-neutral"> </span>
|
|
584
|
+
<span class="cline-any cline-neutral"> </span>
|
|
585
|
+
<span class="cline-any cline-neutral"> </span>
|
|
586
|
+
<span class="cline-any cline-neutral"> </span>
|
|
587
|
+
<span class="cline-any cline-neutral"> </span>
|
|
588
|
+
<span class="cline-any cline-yes">143x</span>
|
|
589
|
+
<span class="cline-any cline-neutral"> </span>
|
|
590
|
+
<span class="cline-any cline-neutral"> </span>
|
|
591
|
+
<span class="cline-any cline-neutral"> </span>
|
|
592
|
+
<span class="cline-any cline-neutral"> </span>
|
|
593
|
+
<span class="cline-any cline-yes">1349x</span>
|
|
594
|
+
<span class="cline-any cline-yes">1349x</span>
|
|
595
|
+
<span class="cline-any cline-yes">1349x</span>
|
|
596
|
+
<span class="cline-any cline-neutral"> </span>
|
|
597
|
+
<span class="cline-any cline-neutral"> </span>
|
|
598
|
+
<span class="cline-any cline-yes">467x</span>
|
|
380
599
|
<span class="cline-any cline-no"> </span>
|
|
600
|
+
<span class="cline-any cline-neutral"> </span>
|
|
601
|
+
<span class="cline-any cline-neutral"> </span>
|
|
602
|
+
<span class="cline-any cline-neutral"> </span>
|
|
603
|
+
<span class="cline-any cline-yes">467x</span>
|
|
604
|
+
<span class="cline-any cline-neutral"> </span>
|
|
605
|
+
<span class="cline-any cline-neutral"> </span>
|
|
606
|
+
<span class="cline-any cline-yes">143x</span>
|
|
607
|
+
<span class="cline-any cline-yes">143x</span>
|
|
608
|
+
<span class="cline-any cline-neutral"> </span>
|
|
609
|
+
<span class="cline-any cline-neutral"> </span>
|
|
610
|
+
<span class="cline-any cline-neutral"> </span>
|
|
611
|
+
<span class="cline-any cline-neutral"> </span>
|
|
612
|
+
<span class="cline-any cline-neutral"> </span>
|
|
613
|
+
<span class="cline-any cline-neutral"> </span>
|
|
614
|
+
<span class="cline-any cline-yes">310x</span>
|
|
381
615
|
<span class="cline-any cline-no"> </span>
|
|
616
|
+
<span class="cline-any cline-neutral"> </span>
|
|
617
|
+
<span class="cline-any cline-neutral"> </span>
|
|
618
|
+
<span class="cline-any cline-neutral"> </span>
|
|
619
|
+
<span class="cline-any cline-yes">310x</span>
|
|
620
|
+
<span class="cline-any cline-yes">143x</span>
|
|
621
|
+
<span class="cline-any cline-yes">143x</span>
|
|
622
|
+
<span class="cline-any cline-yes">143x</span>
|
|
382
623
|
<span class="cline-any cline-no"> </span>
|
|
383
|
-
<span class="cline-any cline-
|
|
624
|
+
<span class="cline-any cline-neutral"> </span>
|
|
625
|
+
<span class="cline-any cline-neutral"> </span>
|
|
626
|
+
<span class="cline-any cline-neutral"> </span>
|
|
627
|
+
<span class="cline-any cline-yes">143x</span>
|
|
628
|
+
<span class="cline-any cline-neutral"> </span>
|
|
629
|
+
<span class="cline-any cline-yes">167x</span>
|
|
630
|
+
<span class="cline-any cline-yes">167x</span>
|
|
631
|
+
<span class="cline-any cline-neutral"> </span>
|
|
632
|
+
<span class="cline-any cline-neutral"> </span>
|
|
633
|
+
<span class="cline-any cline-neutral"> </span>
|
|
634
|
+
<span class="cline-any cline-neutral"> </span>
|
|
635
|
+
<span class="cline-any cline-yes">167x</span>
|
|
636
|
+
<span class="cline-any cline-yes">167x</span>
|
|
637
|
+
<span class="cline-any cline-neutral"> </span>
|
|
638
|
+
<span class="cline-any cline-neutral"> </span>
|
|
639
|
+
<span class="cline-any cline-yes">160x</span>
|
|
640
|
+
<span class="cline-any cline-yes">160x</span>
|
|
641
|
+
<span class="cline-any cline-neutral"> </span>
|
|
642
|
+
<span class="cline-any cline-neutral"> </span>
|
|
643
|
+
<span class="cline-any cline-neutral"> </span>
|
|
644
|
+
<span class="cline-any cline-yes">7x</span>
|
|
645
|
+
<span class="cline-any cline-neutral"> </span>
|
|
646
|
+
<span class="cline-any cline-neutral"> </span>
|
|
647
|
+
<span class="cline-any cline-yes">167x</span>
|
|
648
|
+
<span class="cline-any cline-neutral"> </span>
|
|
649
|
+
<span class="cline-any cline-neutral"> </span>
|
|
650
|
+
<span class="cline-any cline-neutral"> </span>
|
|
651
|
+
<span class="cline-any cline-yes">310x</span>
|
|
652
|
+
<span class="cline-any cline-neutral"> </span>
|
|
653
|
+
<span class="cline-any cline-neutral"> </span>
|
|
654
|
+
<span class="cline-any cline-neutral"> </span>
|
|
655
|
+
<span class="cline-any cline-yes">410x</span>
|
|
656
|
+
<span class="cline-any cline-neutral"> </span>
|
|
657
|
+
<span class="cline-any cline-neutral"> </span>
|
|
658
|
+
<span class="cline-any cline-yes">300x</span>
|
|
659
|
+
<span class="cline-any cline-neutral"> </span>
|
|
660
|
+
<span class="cline-any cline-neutral"> </span>
|
|
661
|
+
<span class="cline-any cline-yes">310x</span>
|
|
662
|
+
<span class="cline-any cline-yes">310x</span>
|
|
663
|
+
<span class="cline-any cline-neutral"> </span>
|
|
664
|
+
<span class="cline-any cline-yes">310x</span>
|
|
665
|
+
<span class="cline-any cline-neutral"> </span>
|
|
666
|
+
<span class="cline-any cline-neutral"> </span>
|
|
667
|
+
<span class="cline-any cline-neutral"> </span>
|
|
668
|
+
<span class="cline-any cline-neutral"> </span>
|
|
669
|
+
<span class="cline-any cline-neutral"> </span>
|
|
670
|
+
<span class="cline-any cline-neutral"> </span>
|
|
671
|
+
<span class="cline-any cline-neutral"> </span>
|
|
672
|
+
<span class="cline-any cline-neutral"> </span>
|
|
673
|
+
<span class="cline-any cline-neutral"> </span>
|
|
674
|
+
<span class="cline-any cline-neutral"> </span>
|
|
675
|
+
<span class="cline-any cline-yes">12x</span>
|
|
384
676
|
<span class="cline-any cline-yes">1x</span>
|
|
385
677
|
<span class="cline-any cline-neutral"> </span>
|
|
678
|
+
<span class="cline-any cline-neutral"> </span>
|
|
679
|
+
<span class="cline-any cline-neutral"> </span>
|
|
680
|
+
<span class="cline-any cline-neutral"> </span>
|
|
386
681
|
<span class="cline-any cline-yes">11x</span>
|
|
387
|
-
<span class="cline-any cline-yes">11x</span>
|
|
388
|
-
<span class="cline-any cline-yes">11x</span>
|
|
389
|
-
<span class="cline-any cline-yes">11x</span>
|
|
390
|
-
<span class="cline-any cline-yes">11x</span>
|
|
391
|
-
<span class="cline-any cline-yes">11x</span>
|
|
392
682
|
<span class="cline-any cline-neutral"> </span>
|
|
683
|
+
<span class="cline-any cline-neutral"> </span>
|
|
684
|
+
<span class="cline-any cline-yes">12x</span>
|
|
685
|
+
<span class="cline-any cline-yes">12x</span>
|
|
393
686
|
<span class="cline-any cline-yes">11x</span>
|
|
394
|
-
<span class="cline-any cline-
|
|
395
|
-
<span class="cline-any cline-neutral"> </span>
|
|
396
|
-
<span class="cline-any cline-yes">15x</span>
|
|
397
|
-
<span class="cline-any cline-yes">294x</span>
|
|
398
|
-
<span class="cline-any cline-yes">334x</span>
|
|
399
|
-
<span class="cline-any cline-yes">334x</span>
|
|
400
|
-
<span class="cline-any cline-yes">334x</span>
|
|
401
|
-
<span class="cline-any cline-yes">334x</span>
|
|
402
|
-
<span class="cline-any cline-yes">40x</span>
|
|
403
|
-
<span class="cline-any cline-yes">40x</span>
|
|
404
|
-
<span class="cline-any cline-yes">40x</span>
|
|
405
|
-
<span class="cline-any cline-yes">40x</span>
|
|
406
|
-
<span class="cline-any cline-yes">294x</span>
|
|
407
|
-
<span class="cline-any cline-yes">294x</span>
|
|
408
|
-
<span class="cline-any cline-yes">294x</span>
|
|
409
|
-
<span class="cline-any cline-yes">294x</span>
|
|
410
|
-
<span class="cline-any cline-yes">294x</span>
|
|
411
|
-
<span class="cline-any cline-yes">334x</span>
|
|
412
|
-
<span class="cline-any cline-yes">43x</span>
|
|
413
|
-
<span class="cline-any cline-yes">43x</span>
|
|
414
|
-
<span class="cline-any cline-yes">334x</span>
|
|
415
|
-
<span class="cline-any cline-yes">334x</span>
|
|
416
|
-
<span class="cline-any cline-yes">334x</span>
|
|
417
|
-
<span class="cline-any cline-yes">334x</span>
|
|
418
|
-
<span class="cline-any cline-yes">334x</span>
|
|
419
|
-
<span class="cline-any cline-yes">334x</span>
|
|
420
|
-
<span class="cline-any cline-yes">334x</span>
|
|
421
|
-
<span class="cline-any cline-yes">334x</span>
|
|
422
|
-
<span class="cline-any cline-yes">334x</span>
|
|
423
|
-
<span class="cline-any cline-yes">294x</span>
|
|
424
|
-
<span class="cline-any cline-neutral"> </span>
|
|
425
|
-
<span class="cline-any cline-yes">15x</span>
|
|
426
|
-
<span class="cline-any cline-neutral"> </span>
|
|
427
|
-
<span class="cline-any cline-neutral"> </span>
|
|
428
|
-
<span class="cline-any cline-neutral"> </span>
|
|
429
|
-
<span class="cline-any cline-neutral"> </span>
|
|
430
|
-
<span class="cline-any cline-neutral"> </span>
|
|
431
|
-
<span class="cline-any cline-neutral"> </span>
|
|
432
|
-
<span class="cline-any cline-yes">100x</span>
|
|
433
|
-
<span class="cline-any cline-neutral"> </span>
|
|
434
|
-
<span class="cline-any cline-yes">100x</span>
|
|
435
|
-
<span class="cline-any cline-neutral"> </span>
|
|
436
|
-
<span class="cline-any cline-yes">100x</span>
|
|
437
|
-
<span class="cline-any cline-yes">100x</span>
|
|
438
|
-
<span class="cline-any cline-yes">100x</span>
|
|
439
|
-
<span class="cline-any cline-yes">100x</span>
|
|
440
|
-
<span class="cline-any cline-yes">100x</span>
|
|
441
|
-
<span class="cline-any cline-yes">43x</span>
|
|
442
|
-
<span class="cline-any cline-yes">43x</span>
|
|
443
|
-
<span class="cline-any cline-yes">43x</span>
|
|
444
|
-
<span class="cline-any cline-yes">43x</span>
|
|
445
|
-
<span class="cline-any cline-no"> </span>
|
|
446
|
-
<span class="cline-any cline-no"> </span>
|
|
447
|
-
<span class="cline-any cline-yes">43x</span>
|
|
448
|
-
<span class="cline-any cline-yes">43x</span>
|
|
449
|
-
<span class="cline-any cline-yes">43x</span>
|
|
450
|
-
<span class="cline-any cline-yes">43x</span>
|
|
451
|
-
<span class="cline-any cline-no"> </span>
|
|
452
|
-
<span class="cline-any cline-no"> </span>
|
|
687
|
+
<span class="cline-any cline-neutral"> </span>
|
|
453
688
|
<span class="cline-any cline-no"> </span>
|
|
689
|
+
<span class="cline-any cline-neutral"> </span>
|
|
690
|
+
<span class="cline-any cline-yes">11x</span>
|
|
691
|
+
<span class="cline-any cline-neutral"> </span>
|
|
692
|
+
<span class="cline-any cline-neutral"> </span>
|
|
693
|
+
<span class="cline-any cline-neutral"> </span>
|
|
694
|
+
<span class="cline-any cline-neutral"> </span>
|
|
695
|
+
<span class="cline-any cline-yes">542x</span>
|
|
696
|
+
<span class="cline-any cline-yes">681x</span>
|
|
697
|
+
<span class="cline-any cline-yes">681x</span>
|
|
698
|
+
<span class="cline-any cline-yes">681x</span>
|
|
699
|
+
<span class="cline-any cline-yes">681x</span>
|
|
700
|
+
<span class="cline-any cline-neutral"> </span>
|
|
701
|
+
<span class="cline-any cline-neutral"> </span>
|
|
702
|
+
<span class="cline-any cline-neutral"> </span>
|
|
703
|
+
<span class="cline-any cline-neutral"> </span>
|
|
704
|
+
<span class="cline-any cline-neutral"> </span>
|
|
705
|
+
<span class="cline-any cline-neutral"> </span>
|
|
706
|
+
<span class="cline-any cline-neutral"> </span>
|
|
707
|
+
<span class="cline-any cline-neutral"> </span>
|
|
708
|
+
<span class="cline-any cline-neutral"> </span>
|
|
709
|
+
<span class="cline-any cline-yes">681x</span>
|
|
710
|
+
<span class="cline-any cline-yes">140x</span>
|
|
711
|
+
<span class="cline-any cline-neutral"> </span>
|
|
712
|
+
<span class="cline-any cline-yes">681x</span>
|
|
713
|
+
<span class="cline-any cline-yes">681x</span>
|
|
714
|
+
<span class="cline-any cline-yes">681x</span>
|
|
715
|
+
<span class="cline-any cline-neutral"> </span>
|
|
716
|
+
<span class="cline-any cline-neutral"> </span>
|
|
717
|
+
<span class="cline-any cline-neutral"> </span>
|
|
718
|
+
<span class="cline-any cline-yes">681x</span>
|
|
719
|
+
<span class="cline-any cline-yes">681x</span>
|
|
720
|
+
<span class="cline-any cline-neutral"> </span>
|
|
721
|
+
<span class="cline-any cline-neutral"> </span>
|
|
722
|
+
<span class="cline-any cline-neutral"> </span>
|
|
723
|
+
<span class="cline-any cline-neutral"> </span>
|
|
724
|
+
<span class="cline-any cline-neutral"> </span>
|
|
725
|
+
<span class="cline-any cline-neutral"> </span>
|
|
726
|
+
<span class="cline-any cline-neutral"> </span>
|
|
727
|
+
<span class="cline-any cline-neutral"> </span>
|
|
728
|
+
<span class="cline-any cline-neutral"> </span>
|
|
729
|
+
<span class="cline-any cline-neutral"> </span>
|
|
730
|
+
<span class="cline-any cline-neutral"> </span>
|
|
731
|
+
<span class="cline-any cline-neutral"> </span>
|
|
732
|
+
<span class="cline-any cline-yes">301x</span>
|
|
733
|
+
<span class="cline-any cline-neutral"> </span>
|
|
734
|
+
<span class="cline-any cline-yes">301x</span>
|
|
735
|
+
<span class="cline-any cline-yes">1x</span>
|
|
736
|
+
<span class="cline-any cline-neutral"> </span>
|
|
737
|
+
<span class="cline-any cline-neutral"> </span>
|
|
738
|
+
<span class="cline-any cline-neutral"> </span>
|
|
739
|
+
<span class="cline-any cline-neutral"> </span>
|
|
740
|
+
<span class="cline-any cline-neutral"> </span>
|
|
741
|
+
<span class="cline-any cline-yes">300x</span>
|
|
742
|
+
<span class="cline-any cline-yes">300x</span>
|
|
743
|
+
<span class="cline-any cline-neutral"> </span>
|
|
744
|
+
<span class="cline-any cline-neutral"> </span>
|
|
745
|
+
<span class="cline-any cline-neutral"> </span>
|
|
746
|
+
<span class="cline-any cline-neutral"> </span>
|
|
747
|
+
<span class="cline-any cline-neutral"> </span>
|
|
748
|
+
<span class="cline-any cline-neutral"> </span>
|
|
749
|
+
<span class="cline-any cline-yes">301x</span>
|
|
750
|
+
<span class="cline-any cline-neutral"> </span>
|
|
751
|
+
<span class="cline-any cline-neutral"> </span>
|
|
752
|
+
<span class="cline-any cline-yes">301x</span>
|
|
753
|
+
<span class="cline-any cline-yes">17x</span>
|
|
754
|
+
<span class="cline-any cline-neutral"> </span>
|
|
755
|
+
<span class="cline-any cline-neutral"> </span>
|
|
756
|
+
<span class="cline-any cline-neutral"> </span>
|
|
757
|
+
<span class="cline-any cline-yes">282x</span>
|
|
758
|
+
<span class="cline-any cline-yes">7x</span>
|
|
759
|
+
<span class="cline-any cline-neutral"> </span>
|
|
760
|
+
<span class="cline-any cline-yes">275x</span>
|
|
761
|
+
<span class="cline-any cline-yes">135x</span>
|
|
762
|
+
<span class="cline-any cline-neutral"> </span>
|
|
763
|
+
<span class="cline-any cline-neutral"> </span>
|
|
764
|
+
<span class="cline-any cline-neutral"> </span>
|
|
765
|
+
<span class="cline-any cline-yes">140x</span>
|
|
766
|
+
<span class="cline-any cline-yes">140x</span>
|
|
767
|
+
<span class="cline-any cline-neutral"> </span>
|
|
768
|
+
<span class="cline-any cline-neutral"> </span>
|
|
769
|
+
<span class="cline-any cline-neutral"> </span>
|
|
770
|
+
<span class="cline-any cline-yes">140x</span>
|
|
771
|
+
<span class="cline-any cline-neutral"> </span>
|
|
772
|
+
<span class="cline-any cline-neutral"> </span>
|
|
773
|
+
<span class="cline-any cline-neutral"> </span>
|
|
454
774
|
<span class="cline-any cline-no"> </span>
|
|
455
|
-
<span class="cline-any cline-
|
|
456
|
-
<span class="cline-any cline-
|
|
457
|
-
<span class="cline-any cline-
|
|
458
|
-
<span class="cline-any cline-
|
|
459
|
-
<span class="cline-any cline-
|
|
460
|
-
<span class="cline-any cline-neutral"> </span>
|
|
461
|
-
<span class="cline-any cline-
|
|
462
|
-
<span class="cline-any cline-
|
|
463
|
-
<span class="cline-any cline-
|
|
464
|
-
<span class="cline-any cline-
|
|
465
|
-
<span class="cline-any cline-
|
|
466
|
-
<span class="cline-any cline-
|
|
467
|
-
<span class="cline-any cline-neutral"> </span>
|
|
468
|
-
<span class="cline-any cline-
|
|
469
|
-
<span class="cline-any cline-
|
|
775
|
+
<span class="cline-any cline-neutral"> </span>
|
|
776
|
+
<span class="cline-any cline-neutral"> </span>
|
|
777
|
+
<span class="cline-any cline-neutral"> </span>
|
|
778
|
+
<span class="cline-any cline-neutral"> </span>
|
|
779
|
+
<span class="cline-any cline-neutral"> </span>
|
|
780
|
+
<span class="cline-any cline-neutral"> </span>
|
|
781
|
+
<span class="cline-any cline-neutral"> </span>
|
|
782
|
+
<span class="cline-any cline-neutral"> </span>
|
|
783
|
+
<span class="cline-any cline-neutral"> </span>
|
|
784
|
+
<span class="cline-any cline-neutral"> </span>
|
|
785
|
+
<span class="cline-any cline-neutral"> </span>
|
|
786
|
+
<span class="cline-any cline-neutral"> </span>
|
|
787
|
+
<span class="cline-any cline-neutral"> </span>
|
|
788
|
+
<span class="cline-any cline-neutral"> </span>
|
|
789
|
+
<span class="cline-any cline-neutral"> </span>
|
|
790
|
+
<span class="cline-any cline-yes">4x</span>
|
|
791
|
+
<span class="cline-any cline-yes">4x</span>
|
|
792
|
+
<span class="cline-any cline-neutral"> </span>
|
|
793
|
+
<span class="cline-any cline-neutral"> </span>
|
|
794
|
+
<span class="cline-any cline-yes">1x</span>
|
|
795
|
+
<span class="cline-any cline-neutral"> </span>
|
|
796
|
+
<span class="cline-any cline-neutral"> </span>
|
|
797
|
+
<span class="cline-any cline-neutral"> </span>
|
|
798
|
+
<span class="cline-any cline-yes">143x</span>
|
|
799
|
+
<span class="cline-any cline-neutral"> </span>
|
|
800
|
+
<span class="cline-any cline-neutral"> </span>
|
|
801
|
+
<span class="cline-any cline-neutral"> </span>
|
|
802
|
+
<span class="cline-any cline-neutral"> </span>
|
|
803
|
+
<span class="cline-any cline-neutral"> </span>
|
|
804
|
+
<span class="cline-any cline-neutral"> </span>
|
|
805
|
+
<span class="cline-any cline-neutral"> </span>
|
|
806
|
+
<span class="cline-any cline-yes">143x</span>
|
|
807
|
+
<span class="cline-any cline-neutral"> </span>
|
|
470
808
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import type { z, ZodObject, ZodType } from 'zod/v4'
|
|
471
809
|
|
|
472
|
-
import type {
|
|
810
|
+
import type {
|
|
811
|
+
Factorable,
|
|
812
|
+
FactorableWithArgs,
|
|
813
|
+
} from '../interfaces/factory.interface.mjs'
|
|
814
|
+
import type { ServiceInitializationContext } from '../internal/context/service-initialization-context.mjs'
|
|
473
815
|
import type {
|
|
474
816
|
BoundInjectionToken,
|
|
475
817
|
ClassType,
|
|
818
|
+
ClassTypeWithArgument,
|
|
819
|
+
ClassTypeWithoutArguments,
|
|
476
820
|
FactoryInjectionToken,
|
|
477
821
|
InjectionToken,
|
|
478
822
|
InjectionTokenSchemaType,
|
|
479
|
-
} from '../injection-token.mjs'
|
|
480
|
-
import type {
|
|
481
|
-
|
|
823
|
+
} from '../token/injection-token.mjs'
|
|
824
|
+
import type {
|
|
825
|
+
InjectRequest,
|
|
826
|
+
InjectState,
|
|
827
|
+
Join,
|
|
828
|
+
UnionToArray,
|
|
829
|
+
} from './types.mjs'
|
|
482
830
|
|
|
831
|
+
import { withoutResolutionContext } from '../internal/context/resolution-context.mjs'
|
|
483
832
|
import { InjectableTokenMeta } from '../symbols/index.mjs'
|
|
484
833
|
|
|
485
834
|
export interface Injectors {
|
|
486
835
|
// #1 Simple class
|
|
487
|
-
asyncInject<T extends
|
|
836
|
+
asyncInject<T extends ClassTypeWithoutArguments>(
|
|
488
837
|
token: T,
|
|
489
838
|
): InstanceType<T> extends Factorable<infer R>
|
|
490
839
|
? Promise<R>
|
|
491
840
|
: Promise<InstanceType<T>>
|
|
841
|
+
asyncInject<Args, T extends ClassTypeWithArgument<Args>>(
|
|
842
|
+
token: T,
|
|
843
|
+
args: Args,
|
|
844
|
+
): Promise<InstanceType<T>>
|
|
845
|
+
asyncInject<
|
|
846
|
+
Schema extends InjectionTokenSchemaType,
|
|
847
|
+
R,
|
|
848
|
+
T extends FactorableWithArgs<R, Schema>,
|
|
849
|
+
>(
|
|
850
|
+
token: T,
|
|
851
|
+
args: z.input<Schema>,
|
|
852
|
+
): Promise<R>
|
|
853
|
+
|
|
492
854
|
// #2 Token with required Schema
|
|
493
855
|
asyncInject<T, S extends InjectionTokenSchemaType>(
|
|
494
856
|
token: InjectionToken<T, S>,
|
|
@@ -510,9 +872,22 @@ export interface Injectors {
|
|
|
510
872
|
asyncInject<T>(token: BoundInjectionToken<T, any>): Promise<T>
|
|
511
873
|
asyncInject<T>(token: FactoryInjectionToken<T, any>): Promise<T>
|
|
512
874
|
|
|
513
|
-
inject<T extends
|
|
875
|
+
inject<T extends ClassTypeWithoutArguments>(
|
|
514
876
|
token: T,
|
|
515
877
|
): InstanceType<T> extends Factorable<infer R> ? R : InstanceType<T>
|
|
878
|
+
inject<Args, T extends ClassTypeWithArgument<Args>>(
|
|
879
|
+
token: T,
|
|
880
|
+
args: Args,
|
|
881
|
+
): InstanceType<T>
|
|
882
|
+
inject<
|
|
883
|
+
Schema extends InjectionTokenSchemaType,
|
|
884
|
+
R,
|
|
885
|
+
T extends FactorableWithArgs<R, Schema>,
|
|
886
|
+
>(
|
|
887
|
+
token: T,
|
|
888
|
+
args: z.input<Schema>,
|
|
889
|
+
): R
|
|
890
|
+
|
|
516
891
|
inject<T, S extends InjectionTokenSchemaType>(
|
|
517
892
|
token: InjectionToken<T, S>,
|
|
518
893
|
args: z.input<S>,
|
|
@@ -531,27 +906,68 @@ export interface Injectors {
|
|
|
531
906
|
inject<T>(token: InjectionToken<T, undefined>): T
|
|
532
907
|
inject<T>(token: BoundInjectionToken<T, any>): T
|
|
533
908
|
inject<T>(token: FactoryInjectionToken<T, any>): T
|
|
909
|
+
|
|
910
|
+
/**
|
|
911
|
+
* Optional injection that returns null if the service fails to initialize
|
|
912
|
+
* or is not available. This is useful when you want to inject a service
|
|
913
|
+
* that may not be configured or may fail gracefully.
|
|
914
|
+
*
|
|
915
|
+
* @example
|
|
916
|
+
* ```ts
|
|
917
|
+
* class MyService {
|
|
918
|
+
* constructor() {
|
|
919
|
+
* const optionalService = optional(OptionalServiceToken)
|
|
920
|
+
* // optionalService will be null if initialization fails
|
|
921
|
+
* if (optionalService) {
|
|
922
|
+
* optionalService.doSomething()
|
|
923
|
+
* }
|
|
924
|
+
* }
|
|
925
|
+
* }
|
|
926
|
+
* ```
|
|
927
|
+
*/
|
|
928
|
+
optional<T extends ClassType>(
|
|
929
|
+
token: T,
|
|
930
|
+
): (InstanceType<T> extends Factorable<infer R> ? R : InstanceType<T>) | null
|
|
931
|
+
optional<T, S extends InjectionTokenSchemaType>(
|
|
932
|
+
token: InjectionToken<T, S>,
|
|
933
|
+
args: z.input<S>,
|
|
934
|
+
): T | null
|
|
935
|
+
optional<T, S extends InjectionTokenSchemaType, R extends boolean>(
|
|
936
|
+
token: InjectionToken<T, S, R>,
|
|
937
|
+
): R extends false
|
|
938
|
+
? T | null
|
|
939
|
+
: S extends ZodType<infer Type>
|
|
940
|
+
? `Error: Your token requires args: ${Join<
|
|
941
|
+
UnionToArray<keyof Type>,
|
|
942
|
+
', '
|
|
943
|
+
>}`
|
|
944
|
+
: 'Error: Your token requires args'
|
|
945
|
+
optional<T>(token: InjectionToken<T, undefined>): T | null
|
|
946
|
+
optional<T>(token: BoundInjectionToken<T, any>): T | null
|
|
947
|
+
optional<T>(token: FactoryInjectionToken<T, any>): T | null
|
|
534
948
|
|
|
535
949
|
wrapSyncInit(
|
|
536
950
|
cb: () => any,
|
|
537
951
|
): (injectState?: InjectState) => [any, Promise<any>[], InjectState]
|
|
538
952
|
|
|
539
|
-
provideFactoryContext(
|
|
953
|
+
provideFactoryContext(
|
|
954
|
+
context: ServiceInitializationContext | null,
|
|
955
|
+
): ServiceInitializationContext | null
|
|
540
956
|
}
|
|
541
957
|
|
|
542
958
|
export function getInjectors() {
|
|
543
|
-
let currentFactoryContext:
|
|
959
|
+
let currentFactoryContext: ServiceInitializationContext | null = null
|
|
544
960
|
|
|
545
961
|
function provideFactoryContext(
|
|
546
|
-
context:
|
|
547
|
-
):
|
|
962
|
+
context: ServiceInitializationContext | null,
|
|
963
|
+
): ServiceInitializationContext | null {
|
|
548
964
|
const original = currentFactoryContext
|
|
549
965
|
currentFactoryContext = context
|
|
550
966
|
return original
|
|
551
967
|
}
|
|
552
|
-
function getFactoryContext():
|
|
553
|
-
if (!currentFactoryContext) {
|
|
554
|
-
throw new Error(
|
|
968
|
+
function getFactoryContext(): ServiceInitializationContext {
|
|
969
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!currentFactoryContext) {
|
|
970
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
555
971
|
'[Injector] Trying to access injection context outside of a injectable context',
|
|
556
972
|
)
|
|
557
973
|
}
|
|
@@ -561,38 +977,89 @@ export function getInjectors() {
|
|
|
561
977
|
let promiseCollector: null | ((promise: Promise<any>) => void) = null
|
|
562
978
|
let injectState: InjectState | null = null
|
|
563
979
|
|
|
564
|
-
function
|
|
565
|
-
token:
|
|
566
|
-
| ClassType
|
|
567
|
-
| InjectionToken<any>
|
|
568
|
-
| BoundInjectionToken<any, any>
|
|
569
|
-
| FactoryInjectionToken<any, any>,
|
|
980
|
+
function getRequest(
|
|
981
|
+
token: InjectionToken<any>,
|
|
570
982
|
args?: unknown,
|
|
983
|
+
skipCycleTracking = false,
|
|
571
984
|
) {
|
|
572
|
-
if (!injectState) {
|
|
573
|
-
throw new Error(
|
|
574
|
-
'[Injector] Trying to
|
|
985
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!injectState) {
|
|
986
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
987
|
+
'[Injector] Trying to make a request outside of a injectable context',
|
|
575
988
|
)
|
|
576
989
|
}
|
|
577
990
|
if (injectState.isFrozen) {
|
|
578
991
|
const idx = injectState.currentIndex++
|
|
579
992
|
const request = injectState.requests[idx]
|
|
580
|
-
|
|
993
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (request.token !== token) {
|
|
581
994
|
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
return request
|
|
995
|
+
`[Injector] Wrong token order. Expected ${request.token.toString()} but got ${token.toString()}`,
|
|
996
|
+
)
|
|
997
|
+
}
|
|
998
|
+
return request
|
|
586
999
|
}
|
|
1000
|
+
let result: any = null
|
|
1001
|
+
let error: Error | null = null
|
|
587
1002
|
|
|
588
|
-
|
|
589
|
-
|
|
1003
|
+
// For async inject, we run outside the resolution context to skip cycle tracking.
|
|
1004
|
+
// This is because asyncInject returns a promise that doesn't block the constructor,
|
|
1005
|
+
// so it cannot cause a deadlock even with circular dependencies.
|
|
1006
|
+
const doInject = () =>
|
|
1007
|
+
getFactoryContext()
|
|
1008
|
+
.inject(token as any, args as any)
|
|
1009
|
+
.then((r) => {
|
|
1010
|
+
result = r
|
|
1011
|
+
return r
|
|
1012
|
+
})
|
|
1013
|
+
.catch((e) => {
|
|
1014
|
+
// We don't throw here because we have a mechanism to handle errors
|
|
1015
|
+
error = e
|
|
1016
|
+
})
|
|
1017
|
+
|
|
1018
|
+
const promise = skipCycleTracking
|
|
1019
|
+
? withoutResolutionContext(doInject)
|
|
1020
|
+
: doInject()
|
|
1021
|
+
|
|
1022
|
+
const request: InjectRequest = {
|
|
590
1023
|
token,
|
|
591
1024
|
promise,
|
|
592
|
-
|
|
1025
|
+
get result() {
|
|
1026
|
+
return result
|
|
1027
|
+
},
|
|
1028
|
+
get error() {
|
|
1029
|
+
return error
|
|
1030
|
+
},
|
|
1031
|
+
}
|
|
1032
|
+
injectState.requests.push(request)
|
|
593
1033
|
injectState.currentIndex++
|
|
594
1034
|
|
|
595
|
-
return
|
|
1035
|
+
return request
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
function asyncInject(
|
|
1039
|
+
token:
|
|
1040
|
+
| ClassType
|
|
1041
|
+
| InjectionToken<any>
|
|
1042
|
+
| BoundInjectionToken<any, any>
|
|
1043
|
+
| FactoryInjectionToken<any, any>,
|
|
1044
|
+
args?: unknown,
|
|
1045
|
+
) {
|
|
1046
|
+
if (!injectState) {
|
|
1047
|
+
throw new Error(
|
|
1048
|
+
'[Injector] Trying to access inject outside of a injectable context',
|
|
1049
|
+
)
|
|
1050
|
+
}
|
|
1051
|
+
// @ts-expect-error In case we have a class
|
|
1052
|
+
const realToken = token[InjectableTokenMeta] ?? <span class="branch-1 cbranch-no" title="branch not covered" >token</span>
|
|
1053
|
+
// Pass skipCycleTracking=true because asyncInject returns a promise that doesn't
|
|
1054
|
+
// block the constructor, so it cannot cause a deadlock even with circular dependencies.
|
|
1055
|
+
const request = getRequest(realToken, args, true)
|
|
1056
|
+
return request.promise.then((result) => {
|
|
1057
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (request.error) {
|
|
1058
|
+
// We throw here because we want to fail the asyncInject call if the dependency fails to initialize
|
|
1059
|
+
<span class="cstat-no" title="statement not covered" > throw request.error</span>
|
|
1060
|
+
}
|
|
1061
|
+
return result
|
|
1062
|
+
})
|
|
596
1063
|
}
|
|
597
1064
|
|
|
598
1065
|
function wrapSyncInit(cb: () => any) {
|
|
@@ -635,34 +1102,74 @@ export function getInjectors() {
|
|
|
635
1102
|
// @ts-expect-error In case we have a class
|
|
636
1103
|
const realToken = token[InjectableTokenMeta] ?? token
|
|
637
1104
|
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
1105
|
+
if (!injectState) {
|
|
1106
|
+
throw new Error(
|
|
1107
|
+
'[Injector] Trying to access inject outside of a injectable context',
|
|
1108
|
+
)
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
// Try to get cached instance synchronously (only on first run, not frozen replay)
|
|
1112
|
+
const ctx = getFactoryContext()
|
|
1113
|
+
const cachedInstance = !injectState.isFrozen
|
|
1114
|
+
? ctx.container.tryGetSync(realToken, args)
|
|
1115
|
+
: null
|
|
1116
|
+
|
|
1117
|
+
// getRequest handles both frozen replay and first run:
|
|
1118
|
+
// - Frozen: validates token order and returns cached request
|
|
1119
|
+
// - First run: creates new request with ctx.inject promise
|
|
1120
|
+
const request = getRequest(realToken, args)
|
|
1121
|
+
|
|
1122
|
+
// If we have a cached instance, return it directly
|
|
1123
|
+
if (cachedInstance) {
|
|
1124
|
+
return cachedInstance as unknown as T
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
// Check for errors or already-resolved results
|
|
1128
|
+
if (request.error) {
|
|
1129
|
+
throw request.error
|
|
1130
|
+
}
|
|
1131
|
+
if (request.result) {
|
|
1132
|
+
return request.result as T
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
// Collect promise for awaiting (first run only, frozen state already has results)
|
|
1136
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (promiseCollector && !injectState.isFrozen) {
|
|
1137
|
+
promiseCollector(request.promise)
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
// Return a proxy that throws if accessed before initialization
|
|
1141
|
+
return new Proxy(
|
|
1142
|
+
{},
|
|
1143
|
+
{
|
|
1144
|
+
<span class="fstat-no" title="function not covered" > get() {</span>
|
|
1145
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
1146
|
+
`[Injector] Trying to access ${realToken.toString()} before it's initialized, please move the code to a onServiceInit method`,
|
|
1147
|
+
)
|
|
657
1148
|
},
|
|
658
|
-
|
|
1149
|
+
},
|
|
1150
|
+
) as unknown as T
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
function optional<
|
|
1154
|
+
T,
|
|
1155
|
+
Token extends
|
|
1156
|
+
| InjectionToken<T>
|
|
1157
|
+
| BoundInjectionToken<T, any>
|
|
1158
|
+
| FactoryInjectionToken<T, any>,
|
|
1159
|
+
S extends ZodObject | unknown = Token['schema'],
|
|
1160
|
+
>(token: Token, args?: S extends ZodObject ? z.input<S> : never): T | null {
|
|
1161
|
+
try {
|
|
1162
|
+
return inject(token, args)
|
|
1163
|
+
} catch {
|
|
1164
|
+
// If injection fails, return null instead of throwing
|
|
1165
|
+
return null
|
|
659
1166
|
}
|
|
660
|
-
return instance as unknown as T
|
|
661
1167
|
}
|
|
662
1168
|
|
|
663
1169
|
const injectors: Injectors = {
|
|
664
1170
|
asyncInject,
|
|
665
1171
|
inject,
|
|
1172
|
+
optional,
|
|
666
1173
|
wrapSyncInit,
|
|
667
1174
|
provideFactoryContext,
|
|
668
1175
|
} as Injectors
|
|
@@ -676,7 +1183,7 @@ export function getInjectors() {
|
|
|
676
1183
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
677
1184
|
Code coverage generated by
|
|
678
1185
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
679
|
-
at
|
|
1186
|
+
at 2026-01-08T12:15:46.476Z
|
|
680
1187
|
</div>
|
|
681
1188
|
<script src="../../prettify.js"></script>
|
|
682
1189
|
<script>
|