@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.
Files changed (174) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +28 -0
  3. package/coverage/block-navigation.js +1 -1
  4. package/coverage/clover.xml +1463 -3174
  5. package/coverage/coverage-final.json +56 -54
  6. package/coverage/index.html +179 -104
  7. package/coverage/sorter.js +21 -7
  8. package/coverage/src/{request-context-manager.mts.html → __tests__/gc/gc-test-utils.mts.html} +192 -231
  9. package/coverage/{lib → src/__tests__/gc}/index.html +25 -40
  10. package/coverage/src/container/abstract-container.mts.html +1066 -0
  11. package/coverage/src/container/container.mts.html +958 -0
  12. package/coverage/src/container/index.html +161 -0
  13. package/coverage/src/{testing → container}/index.mts.html +12 -9
  14. package/coverage/src/container/scoped-container.mts.html +907 -0
  15. package/coverage/src/decorators/factory.decorator.mts.html +68 -53
  16. package/coverage/src/decorators/index.html +34 -34
  17. package/coverage/src/decorators/index.mts.html +10 -10
  18. package/coverage/src/decorators/injectable.decorator.mts.html +144 -60
  19. package/coverage/src/enums/index.html +21 -21
  20. package/coverage/src/enums/index.mts.html +12 -12
  21. package/coverage/src/enums/injectable-scope.enum.mts.html +11 -8
  22. package/coverage/src/enums/injectable-type.enum.mts.html +10 -7
  23. package/coverage/src/errors/di-error.mts.html +380 -71
  24. package/coverage/src/errors/index.html +22 -127
  25. package/coverage/src/errors/index.mts.html +9 -33
  26. package/coverage/src/event-emitter.mts.html +35 -107
  27. package/coverage/src/index.html +14 -254
  28. package/coverage/src/index.mts.html +23 -50
  29. package/coverage/src/interfaces/container.interface.mts.html +370 -0
  30. package/coverage/src/interfaces/factory.interface.mts.html +12 -12
  31. package/coverage/src/interfaces/index.html +45 -30
  32. package/coverage/src/interfaces/index.mts.html +16 -13
  33. package/coverage/src/interfaces/on-service-destroy.interface.mts.html +1 -1
  34. package/coverage/src/interfaces/on-service-init.interface.mts.html +1 -1
  35. package/coverage/src/internal/context/async-local-storage.browser.mts.html +142 -0
  36. package/coverage/src/internal/context/async-local-storage.mts.html +292 -0
  37. package/coverage/src/{factory-context.mts.html → internal/context/async-local-storage.types.mts.html} +17 -17
  38. package/coverage/src/internal/context/factory-context.mts.html +142 -0
  39. package/coverage/src/internal/context/index.html +221 -0
  40. package/coverage/src/internal/context/index.mts.html +100 -0
  41. package/coverage/src/{service-locator-instance-holder.mts.html → internal/context/resolution-context.mts.html} +114 -78
  42. package/coverage/src/internal/context/service-initialization-context.mts.html +214 -0
  43. package/coverage/src/internal/context/sync-local-storage.mts.html +244 -0
  44. package/coverage/src/internal/core/index.html +206 -0
  45. package/coverage/src/internal/core/index.mts.html +103 -0
  46. package/coverage/src/internal/core/instance-resolver.mts.html +2533 -0
  47. package/coverage/src/{request-context-holder.mts.html → internal/core/name-resolver.mts.html} +245 -260
  48. package/coverage/src/{container.mts.html → internal/core/scope-tracker.mts.html} +352 -310
  49. package/coverage/src/{service-instantiator.mts.html → internal/core/service-initializer.mts.html} +254 -176
  50. package/coverage/src/internal/core/service-invalidator.mts.html +955 -0
  51. package/coverage/src/internal/core/token-resolver.mts.html +451 -0
  52. package/coverage/src/internal/holder/holder-storage.interface.mts.html +451 -0
  53. package/coverage/src/internal/holder/index.html +161 -0
  54. package/coverage/src/internal/holder/index.mts.html +94 -0
  55. package/coverage/src/internal/holder/instance-holder.mts.html +406 -0
  56. package/coverage/src/{service-locator.mts.html → internal/holder/unified-storage.mts.html} +376 -379
  57. package/coverage/{lib/testing → src/internal}/index.html +26 -11
  58. package/coverage/src/internal/index.mts.html +100 -0
  59. package/coverage/src/internal/lifecycle/circular-detector.mts.html +364 -0
  60. package/coverage/src/internal/lifecycle/index.html +146 -0
  61. package/coverage/src/internal/lifecycle/index.mts.html +91 -0
  62. package/coverage/src/{service-locator-event-bus.mts.html → internal/lifecycle/lifecycle-event-bus.mts.html} +104 -80
  63. package/coverage/src/internal/stub-factory-class.mts.html +133 -0
  64. package/coverage/src/symbols/index.html +14 -14
  65. package/coverage/src/symbols/index.mts.html +9 -9
  66. package/coverage/src/symbols/injectable-token.mts.html +9 -3
  67. package/coverage/src/testing/index.html +32 -32
  68. package/coverage/src/testing/test-container.mts.html +1576 -139
  69. package/coverage/src/testing/unit-test-container.mts.html +1888 -0
  70. package/coverage/src/token/index.html +146 -0
  71. package/coverage/{lib/testing/index.d.mts.html → src/token/index.mts.html} +11 -11
  72. package/coverage/src/{injection-token.mts.html → token/injection-token.mts.html} +225 -111
  73. package/coverage/src/{base-instance-holder-manager.mts.html → token/registry.mts.html} +188 -269
  74. package/coverage/src/{injector.mts.html → utils/default-injectors.mts.html} +31 -31
  75. package/coverage/src/utils/get-injectable-token.mts.html +19 -22
  76. package/coverage/src/utils/get-injectors.mts.html +684 -177
  77. package/coverage/src/utils/index.html +36 -36
  78. package/coverage/src/utils/index.mts.html +18 -12
  79. package/coverage/src/utils/types.mts.html +26 -11
  80. package/docs/examples/basic-usage.mts +1 -1
  81. package/docs/examples/factory-pattern.mts +3 -3
  82. package/docs/examples/request-scope-example.mts +1 -1
  83. package/docs/examples/service-lifecycle.mts +1 -1
  84. package/lib/browser/internal/core/instance-resolver.d.mts.map +1 -1
  85. package/lib/browser/internal/core/instance-resolver.mjs.map +1 -1
  86. package/lib/{container-D-0Ho3qL.d.cts → container-D3j3KuD9.d.mts} +5 -289
  87. package/lib/container-D3j3KuD9.d.mts.map +1 -0
  88. package/lib/{container-Bi0huFQX.mjs → container-qgHMgGNG.mjs} +3 -227
  89. package/lib/container-qgHMgGNG.mjs.map +1 -0
  90. package/lib/{container-CNiqesCL.d.mts → container-r1KP4F-n.d.cts} +5 -289
  91. package/lib/container-r1KP4F-n.d.cts.map +1 -0
  92. package/lib/{container-pmGNCZL_.cjs → container-ycYJgTq7.cjs} +41 -319
  93. package/lib/container-ycYJgTq7.cjs.map +1 -0
  94. package/lib/factory.decorator-D4mem6YQ.cjs +21 -0
  95. package/lib/factory.decorator-D4mem6YQ.cjs.map +1 -0
  96. package/lib/factory.decorator-_IPWcwQn.mjs +16 -0
  97. package/lib/factory.decorator-_IPWcwQn.mjs.map +1 -0
  98. package/lib/index.cjs +14 -24
  99. package/lib/index.cjs.map +1 -1
  100. package/lib/index.d.cts +3 -52
  101. package/lib/index.d.cts.map +1 -1
  102. package/lib/index.d.mts +3 -52
  103. package/lib/index.d.mts.map +1 -1
  104. package/lib/index.mjs +3 -13
  105. package/lib/index.mjs.map +1 -1
  106. package/lib/injectable.decorator-BNfWpjr_.d.cts +56 -0
  107. package/lib/injectable.decorator-BNfWpjr_.d.cts.map +1 -0
  108. package/lib/injectable.decorator-Bc05hRQU.d.mts +56 -0
  109. package/lib/injectable.decorator-Bc05hRQU.d.mts.map +1 -0
  110. package/lib/injectable.decorator-CyPrBzBN.mjs +227 -0
  111. package/lib/injectable.decorator-CyPrBzBN.mjs.map +1 -0
  112. package/lib/injectable.decorator-DbpiDrg-.cjs +281 -0
  113. package/lib/injectable.decorator-DbpiDrg-.cjs.map +1 -0
  114. package/lib/legacy-compat/index.cjs +114 -0
  115. package/lib/legacy-compat/index.cjs.map +1 -0
  116. package/lib/legacy-compat/index.d.cts +63 -0
  117. package/lib/legacy-compat/index.d.cts.map +1 -0
  118. package/lib/legacy-compat/index.d.mts +63 -0
  119. package/lib/legacy-compat/index.d.mts.map +1 -0
  120. package/lib/legacy-compat/index.mjs +111 -0
  121. package/lib/legacy-compat/index.mjs.map +1 -0
  122. package/lib/registry-DKbKWFvJ.d.cts +290 -0
  123. package/lib/registry-DKbKWFvJ.d.cts.map +1 -0
  124. package/lib/registry-n8JhJoxm.d.mts +290 -0
  125. package/lib/registry-n8JhJoxm.d.mts.map +1 -0
  126. package/lib/testing/index.cjs +23 -22
  127. package/lib/testing/index.cjs.map +1 -1
  128. package/lib/testing/index.d.cts +2 -1
  129. package/lib/testing/index.d.cts.map +1 -1
  130. package/lib/testing/index.d.mts +2 -1
  131. package/lib/testing/index.d.mts.map +1 -1
  132. package/lib/testing/index.mjs +2 -1
  133. package/lib/testing/index.mjs.map +1 -1
  134. package/package.json +11 -1
  135. package/project.json +8 -0
  136. package/src/__tests__/gc/basic-container.spec.mts +358 -0
  137. package/src/__tests__/gc/circular-dependencies.spec.mts +501 -0
  138. package/src/__tests__/gc/gc-test-utils.mts +136 -0
  139. package/src/__tests__/gc/memory-pressure.spec.mts +542 -0
  140. package/src/__tests__/gc/scoped-container.spec.mts +444 -0
  141. package/src/__tests__/gc/transient-services.spec.mts +326 -0
  142. package/src/__tests__/scope-upgrade.spec.mts +0 -18
  143. package/src/internal/core/instance-resolver.mts +0 -1
  144. package/src/legacy-compat/context-compat.mts +95 -0
  145. package/src/legacy-compat/factory.decorator.mts +37 -0
  146. package/src/legacy-compat/index.mts +16 -0
  147. package/src/legacy-compat/injectable.decorator.mts +41 -0
  148. package/tsdown.config.mts +1 -1
  149. package/vitest.config.mts +3 -7
  150. package/coverage/docs/examples/basic-usage.mts.html +0 -376
  151. package/coverage/docs/examples/factory-pattern.mts.html +0 -1039
  152. package/coverage/docs/examples/index.html +0 -176
  153. package/coverage/docs/examples/injection-tokens.mts.html +0 -760
  154. package/coverage/docs/examples/request-scope-example.mts.html +0 -847
  155. package/coverage/docs/examples/service-lifecycle.mts.html +0 -1162
  156. package/coverage/lib/_tsup-dts-rollup.d.mts.html +0 -3445
  157. package/coverage/lib/index.d.mts.html +0 -313
  158. package/coverage/src/errors/errors.enum.mts.html +0 -118
  159. package/coverage/src/errors/factory-not-found.mts.html +0 -118
  160. package/coverage/src/errors/factory-token-not-resolved.mts.html +0 -118
  161. package/coverage/src/errors/instance-destroying.mts.html +0 -118
  162. package/coverage/src/errors/instance-expired.mts.html +0 -118
  163. package/coverage/src/errors/instance-not-found.mts.html +0 -118
  164. package/coverage/src/errors/unknown-error.mts.html +0 -118
  165. package/coverage/src/instance-resolver.mts.html +0 -1762
  166. package/coverage/src/registry.mts.html +0 -247
  167. package/coverage/src/service-invalidator.mts.html +0 -1372
  168. package/coverage/src/service-locator-manager.mts.html +0 -340
  169. package/coverage/src/token-processor.mts.html +0 -607
  170. package/coverage/src/utils/defer.mts.html +0 -118
  171. package/lib/container-Bi0huFQX.mjs.map +0 -1
  172. package/lib/container-CNiqesCL.d.mts.map +0 -1
  173. package/lib/container-D-0Ho3qL.d.cts.map +0 -1
  174. package/lib/container-pmGNCZL_.cjs.map +0 -1
@@ -3,15 +3,15 @@
3
3
  <html lang="en">
4
4
 
5
5
  <head>
6
- <title>Code coverage report for src/service-instantiator.mts</title>
6
+ <title>Code coverage report for src/internal/core/service-initializer.mts</title>
7
7
  <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../prettify.css" />
9
- <link rel="stylesheet" href="../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
8
+ <link rel="stylesheet" href="../../../prettify.css" />
9
+ <link rel="stylesheet" href="../../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
11
11
  <meta name="viewport" content="width=device-width, initial-scale=1" />
12
12
  <style type='text/css'>
13
13
  .coverage-summary .sorter {
14
- background-image: url(../sort-arrow-sprite.png);
14
+ background-image: url(../../../sort-arrow-sprite.png);
15
15
  }
16
16
  </style>
17
17
  </head>
@@ -19,34 +19,34 @@
19
19
  <body>
20
20
  <div class='wrapper'>
21
21
  <div class='pad1'>
22
- <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> service-instantiator.mts</h1>
22
+ <h1><a href="../../../index.html">All files</a> / <a href="index.html">src/internal/core</a> service-initializer.mts</h1>
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
26
+ <span class="strong">72.72% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>110/110</span>
28
+ <span class='fraction'>40/55</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">92.3% </span>
33
+ <span class="strong">63.33% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>36/39</span>
35
+ <span class='fraction'>19/30</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
40
+ <span class="strong">88.88% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>4/4</span>
42
+ <span class='fraction'>8/9</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">100% </span>
47
+ <span class="strong">73.58% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>110/110</span>
49
+ <span class='fraction'>39/53</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line high'></div>
64
+ <div class='status-line medium'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -221,46 +221,50 @@
221
221
  <a name='L156'></a><a href='#L156'>156</a>
222
222
  <a name='L157'></a><a href='#L157'>157</a>
223
223
  <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
225
251
  <span class="cline-any cline-neutral">&nbsp;</span>
226
252
  <span class="cline-any cline-neutral">&nbsp;</span>
227
253
  <span class="cline-any cline-neutral">&nbsp;</span>
228
- <span class="cline-any cline-yes">1x</span>
229
254
  <span class="cline-any cline-neutral">&nbsp;</span>
230
255
  <span class="cline-any cline-neutral">&nbsp;</span>
231
256
  <span class="cline-any cline-neutral">&nbsp;</span>
232
257
  <span class="cline-any cline-neutral">&nbsp;</span>
233
258
  <span class="cline-any cline-neutral">&nbsp;</span>
234
- <span class="cline-any cline-yes">1x</span>
235
- <span class="cline-any cline-yes">1x</span>
236
259
  <span class="cline-any cline-neutral">&nbsp;</span>
237
260
  <span class="cline-any cline-neutral">&nbsp;</span>
238
261
  <span class="cline-any cline-neutral">&nbsp;</span>
239
262
  <span class="cline-any cline-neutral">&nbsp;</span>
240
263
  <span class="cline-any cline-neutral">&nbsp;</span>
264
+ <span class="cline-any cline-yes">268x</span>
241
265
  <span class="cline-any cline-neutral">&nbsp;</span>
242
266
  <span class="cline-any cline-neutral">&nbsp;</span>
243
267
  <span class="cline-any cline-neutral">&nbsp;</span>
244
- <span class="cline-any cline-yes">1x</span>
245
- <span class="cline-any cline-yes">308x</span>
246
- <span class="cline-any cline-yes">308x</span>
247
- <span class="cline-any cline-yes">308x</span>
248
- <span class="cline-any cline-yes">308x</span>
249
- <span class="cline-any cline-yes">308x</span>
250
- <span class="cline-any cline-yes">308x</span>
251
- <span class="cline-any cline-yes">308x</span>
252
- <span class="cline-any cline-yes">271x</span>
253
- <span class="cline-any cline-yes">308x</span>
254
- <span class="cline-any cline-yes">36x</span>
255
- <span class="cline-any cline-yes">308x</span>
256
- <span class="cline-any cline-yes">1x</span>
257
- <span class="cline-any cline-yes">1x</span>
258
- <span class="cline-any cline-yes">1x</span>
259
- <span class="cline-any cline-yes">308x</span>
260
- <span class="cline-any cline-yes">308x</span>
261
- <span class="cline-any cline-yes">1x</span>
262
- <span class="cline-any cline-yes">1x</span>
263
- <span class="cline-any cline-yes">308x</span>
264
268
  <span class="cline-any cline-neutral">&nbsp;</span>
265
269
  <span class="cline-any cline-neutral">&nbsp;</span>
266
270
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -269,59 +273,21 @@
269
273
  <span class="cline-any cline-neutral">&nbsp;</span>
270
274
  <span class="cline-any cline-neutral">&nbsp;</span>
271
275
  <span class="cline-any cline-neutral">&nbsp;</span>
272
- <span class="cline-any cline-yes">1x</span>
273
- <span class="cline-any cline-yes">271x</span>
274
- <span class="cline-any cline-yes">271x</span>
275
- <span class="cline-any cline-yes">271x</span>
276
- <span class="cline-any cline-yes">271x</span>
277
- <span class="cline-any cline-yes">271x</span>
278
- <span class="cline-any cline-yes">271x</span>
279
- <span class="cline-any cline-yes">313x</span>
280
- <span class="cline-any cline-yes">313x</span>
281
- <span class="cline-any cline-yes">313x</span>
282
- <span class="cline-any cline-yes">313x</span>
283
- <span class="cline-any cline-yes">271x</span>
284
276
  <span class="cline-any cline-neutral">&nbsp;</span>
285
- <span class="cline-any cline-yes">271x</span>
286
- <span class="cline-any cline-yes">271x</span>
287
- <span class="cline-any cline-yes">44x</span>
288
- <span class="cline-any cline-yes">44x</span>
289
- <span class="cline-any cline-yes">2x</span>
290
- <span class="cline-any cline-yes">2x</span>
291
- <span class="cline-any cline-yes">2x</span>
292
- <span class="cline-any cline-yes">2x</span>
293
- <span class="cline-any cline-yes">42x</span>
294
- <span class="cline-any cline-yes">42x</span>
295
- <span class="cline-any cline-yes">42x</span>
296
- <span class="cline-any cline-yes">42x</span>
297
277
  <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-yes">271x</span>
299
- <span class="cline-any cline-yes">1x</span>
278
+ <span class="cline-any cline-yes">540x</span>
279
+ <span class="cline-any cline-yes">540x</span>
300
280
  <span class="cline-any cline-neutral">&nbsp;</span>
281
+ <span class="cline-any cline-yes">513x</span>
301
282
  <span class="cline-any cline-neutral">&nbsp;</span>
283
+ <span class="cline-any cline-yes">27x</span>
302
284
  <span class="cline-any cline-neutral">&nbsp;</span>
303
- <span class="cline-any cline-yes">1x</span>
304
- <span class="cline-any cline-yes">1x</span>
305
- <span class="cline-any cline-yes">1x</span>
306
- <span class="cline-any cline-yes">1x</span>
307
- <span class="cline-any cline-yes">1x</span>
285
+ <span class="cline-any cline-no">&nbsp;</span>
308
286
  <span class="cline-any cline-neutral">&nbsp;</span>
309
287
  <span class="cline-any cline-neutral">&nbsp;</span>
310
- <span class="cline-any cline-yes">271x</span>
311
- <span class="cline-any cline-yes">1x</span>
312
- <span class="cline-any cline-yes">1x</span>
313
- <span class="cline-any cline-yes">271x</span>
314
- <span class="cline-any cline-yes">3x</span>
315
- <span class="cline-any cline-yes">3x</span>
316
- <span class="cline-any cline-yes">3x</span>
317
- <span class="cline-any cline-yes">3x</span>
318
288
  <span class="cline-any cline-neutral">&nbsp;</span>
319
- <span class="cline-any cline-yes">265x</span>
320
- <span class="cline-any cline-yes">271x</span>
321
- <span class="cline-any cline-yes">6x</span>
322
- <span class="cline-any cline-yes">6x</span>
323
- <span class="cline-any cline-yes">271x</span>
324
289
  <span class="cline-any cline-neutral">&nbsp;</span>
290
+ <span class="cline-any cline-no">&nbsp;</span>
325
291
  <span class="cline-any cline-neutral">&nbsp;</span>
326
292
  <span class="cline-any cline-neutral">&nbsp;</span>
327
293
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -329,67 +295,156 @@
329
295
  <span class="cline-any cline-neutral">&nbsp;</span>
330
296
  <span class="cline-any cline-neutral">&nbsp;</span>
331
297
  <span class="cline-any cline-neutral">&nbsp;</span>
332
- <span class="cline-any cline-yes">1x</span>
333
- <span class="cline-any cline-yes">36x</span>
334
- <span class="cline-any cline-yes">36x</span>
335
- <span class="cline-any cline-yes">36x</span>
336
- <span class="cline-any cline-yes">36x</span>
337
- <span class="cline-any cline-yes">36x</span>
338
- <span class="cline-any cline-yes">36x</span>
339
- <span class="cline-any cline-yes">38x</span>
340
- <span class="cline-any cline-yes">38x</span>
341
- <span class="cline-any cline-yes">38x</span>
342
- <span class="cline-any cline-yes">38x</span>
343
- <span class="cline-any cline-yes">36x</span>
344
- <span class="cline-any cline-neutral">&nbsp;</span>
345
- <span class="cline-any cline-yes">36x</span>
346
- <span class="cline-any cline-yes">36x</span>
347
- <span class="cline-any cline-yes">3x</span>
348
- <span class="cline-any cline-yes">3x</span>
349
- <span class="cline-any cline-yes">1x</span>
350
- <span class="cline-any cline-yes">1x</span>
351
- <span class="cline-any cline-yes">1x</span>
352
- <span class="cline-any cline-yes">1x</span>
353
- <span class="cline-any cline-yes">2x</span>
354
- <span class="cline-any cline-yes">2x</span>
355
- <span class="cline-any cline-yes">2x</span>
356
- <span class="cline-any cline-yes">2x</span>
357
298
  <span class="cline-any cline-neutral">&nbsp;</span>
358
- <span class="cline-any cline-yes">36x</span>
359
- <span class="cline-any cline-yes">1x</span>
360
299
  <span class="cline-any cline-neutral">&nbsp;</span>
361
300
  <span class="cline-any cline-neutral">&nbsp;</span>
362
301
  <span class="cline-any cline-neutral">&nbsp;</span>
363
- <span class="cline-any cline-yes">1x</span>
364
- <span class="cline-any cline-yes">1x</span>
365
- <span class="cline-any cline-yes">1x</span>
366
- <span class="cline-any cline-yes">1x</span>
367
- <span class="cline-any cline-yes">1x</span>
368
302
  <span class="cline-any cline-neutral">&nbsp;</span>
369
- <span class="cline-any cline-yes">36x</span>
370
- <span class="cline-any cline-yes">1x</span>
371
- <span class="cline-any cline-yes">1x</span>
372
- <span class="cline-any cline-yes">1x</span>
373
- <span class="cline-any cline-yes">1x</span>
374
- <span class="cline-any cline-neutral">&nbsp;</span>
375
- <span class="cline-any cline-yes">33x</span>
303
+ <span class="cline-any cline-neutral">&nbsp;</span>
304
+ <span class="cline-any cline-neutral">&nbsp;</span>
305
+ <span class="cline-any cline-neutral">&nbsp;</span>
306
+ <span class="cline-any cline-neutral">&nbsp;</span>
307
+ <span class="cline-any cline-neutral">&nbsp;</span>
308
+ <span class="cline-any cline-neutral">&nbsp;</span>
309
+ <span class="cline-any cline-neutral">&nbsp;</span>
310
+ <span class="cline-any cline-yes">513x</span>
311
+ <span class="cline-any cline-yes">513x</span>
312
+ <span class="cline-any cline-yes">651x</span>
313
+ <span class="cline-any cline-neutral">&nbsp;</span>
314
+ <span class="cline-any cline-neutral">&nbsp;</span>
315
+ <span class="cline-any cline-yes">651x</span>
316
+ <span class="cline-any cline-yes">651x</span>
317
+ <span class="cline-any cline-yes">651x</span>
318
+ <span class="cline-any cline-neutral">&nbsp;</span>
319
+ <span class="cline-any cline-neutral">&nbsp;</span>
320
+ <span class="cline-any cline-yes">513x</span>
321
+ <span class="cline-any cline-yes">513x</span>
322
+ <span class="cline-any cline-yes">138x</span>
323
+ <span class="cline-any cline-yes">140x</span>
324
+ <span class="cline-any cline-no">&nbsp;</span>
325
+ <span class="cline-any cline-neutral">&nbsp;</span>
326
+ <span class="cline-any cline-neutral">&nbsp;</span>
327
+ <span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-neutral">&nbsp;</span>
329
+ <span class="cline-any cline-yes">138x</span>
330
+ <span class="cline-any cline-yes">138x</span>
331
+ <span class="cline-any cline-yes">138x</span>
332
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
+ <span class="cline-any cline-neutral">&nbsp;</span>
334
+ <span class="cline-any cline-yes">501x</span>
335
+ <span class="cline-any cline-no">&nbsp;</span>
336
+ <span class="cline-any cline-neutral">&nbsp;</span>
337
+ <span class="cline-any cline-neutral">&nbsp;</span>
338
+ <span class="cline-any cline-neutral">&nbsp;</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
342
+ <span class="cline-any cline-no">&nbsp;</span>
343
+ <span class="cline-any cline-neutral">&nbsp;</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-neutral">&nbsp;</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-neutral">&nbsp;</span>
349
+ <span class="cline-any cline-yes">501x</span>
350
+ <span class="cline-any cline-yes">21x</span>
351
+ <span class="cline-any cline-neutral">&nbsp;</span>
352
+ <span class="cline-any cline-yes">497x</span>
376
353
  <span class="cline-any cline-yes">32x</span>
377
- <span class="cline-any cline-yes">36x</span>
378
- <span class="cline-any cline-yes">4x</span>
354
+ <span class="cline-any cline-yes">32x</span>
355
+ <span class="cline-any cline-neutral">&nbsp;</span>
356
+ <span class="cline-any cline-neutral">&nbsp;</span>
357
+ <span class="cline-any cline-neutral">&nbsp;</span>
358
+ <span class="cline-any cline-yes">497x</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-yes">16x</span>
361
+ <span class="cline-any cline-neutral">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
+ <span class="cline-any cline-neutral">&nbsp;</span>
365
+ <span class="cline-any cline-neutral">&nbsp;</span>
366
+ <span class="cline-any cline-neutral">&nbsp;</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
368
+ <span class="cline-any cline-neutral">&nbsp;</span>
369
+ <span class="cline-any cline-neutral">&nbsp;</span>
370
+ <span class="cline-any cline-neutral">&nbsp;</span>
371
+ <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
380
+ <span class="cline-any cline-yes">27x</span>
381
+ <span class="cline-any cline-yes">27x</span>
382
+ <span class="cline-any cline-yes">27x</span>
383
+ <span class="cline-any cline-yes">27x</span>
384
+ <span class="cline-any cline-yes">27x</span>
385
+ <span class="cline-any cline-yes">27x</span>
386
+ <span class="cline-any cline-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
388
+ <span class="cline-any cline-yes">27x</span>
389
+ <span class="cline-any cline-yes">27x</span>
390
+ <span class="cline-any cline-no">&nbsp;</span>
391
+ <span class="cline-any cline-no">&nbsp;</span>
392
+ <span class="cline-any cline-no">&nbsp;</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-neutral">&nbsp;</span>
396
+ <span class="cline-any cline-neutral">&nbsp;</span>
397
+ <span class="cline-any cline-no">&nbsp;</span>
398
+ <span class="cline-any cline-no">&nbsp;</span>
399
+ <span class="cline-any cline-no">&nbsp;</span>
400
+ <span class="cline-any cline-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-neutral">&nbsp;</span>
402
+ <span class="cline-any cline-yes">27x</span>
403
+ <span class="cline-any cline-no">&nbsp;</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-neutral">&nbsp;</span>
408
+ <span class="cline-any cline-neutral">&nbsp;</span>
409
+ <span class="cline-any cline-neutral">&nbsp;</span>
410
+ <span class="cline-any cline-no">&nbsp;</span>
411
+ <span class="cline-any cline-neutral">&nbsp;</span>
412
+ <span class="cline-any cline-neutral">&nbsp;</span>
413
+ <span class="cline-any cline-neutral">&nbsp;</span>
414
+ <span class="cline-any cline-neutral">&nbsp;</span>
415
+ <span class="cline-any cline-neutral">&nbsp;</span>
416
+ <span class="cline-any cline-yes">27x</span>
417
+ <span class="cline-any cline-no">&nbsp;</span>
418
+ <span class="cline-any cline-neutral">&nbsp;</span>
419
+ <span class="cline-any cline-neutral">&nbsp;</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-neutral">&nbsp;</span>
422
+ <span class="cline-any cline-neutral">&nbsp;</span>
423
+ <span class="cline-any cline-yes">27x</span>
424
+ <span class="cline-any cline-yes">23x</span>
425
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
426
  <span class="cline-any cline-yes">4x</span>
380
- <span class="cline-any cline-yes">36x</span>
381
- <span class="cline-any cline-yes">1x</span>
382
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { FactoryContext } from './factory-context.mjs'
383
- import type { FactoryRecord } from './registry.mjs'
384
- import type { Injectors } from './utils/get-injectors.mjs'
427
+ <span class="cline-any cline-neutral">&nbsp;</span>
428
+ <span class="cline-any cline-neutral">&nbsp;</span>
429
+ <span class="cline-any cline-neutral">&nbsp;</span>
430
+ <span class="cline-any cline-neutral">&nbsp;</span>
431
+ <span class="cline-any cline-neutral">&nbsp;</span>
432
+ <span class="cline-any cline-neutral">&nbsp;</span>
433
+ <span class="cline-any cline-neutral">&nbsp;</span>
434
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { FactoryRecord } from '../../token/registry.mjs'
435
+ import type { Injectors } from '../../utils/index.mjs'
436
+ import type { ServiceInitializationContext } from '../context/service-initialization-context.mjs'
385
437
  &nbsp;
386
- import { InjectableType } from './enums/index.mjs'
438
+ import { InjectableType } from '../../enums/index.mjs'
439
+ import { DIError } from '../../errors/index.mjs'
387
440
  &nbsp;
388
441
  /**
389
- * ServiceInstantiator handles the instantiation of services based on registry records.
390
- * It replaces the hard-coded logic in Injectable and Factory decorators.
442
+ * Creates service instances from registry records.
443
+ *
444
+ * Handles both class-based (@Injectable) and factory-based (@Factory) services,
445
+ * managing the instantiation lifecycle including lifecycle hook invocation.
391
446
  */
392
- export class ServiceInstantiator {
447
+ export class ServiceInitializer {
393
448
  constructor(private readonly injectors: Injectors) {}
394
449
  &nbsp;
395
450
  /**
@@ -400,23 +455,27 @@ export class ServiceInstantiator {
400
455
  * @returns Promise resolving to [undefined, instance] or [error]
401
456
  */
402
457
  async instantiateService&lt;T&gt;(
403
- ctx: FactoryContext,
458
+ ctx: ServiceInitializationContext,
404
459
  record: FactoryRecord&lt;T, any&gt;,
405
460
  args: any = undefined,
406
- ): Promise&lt;[undefined, T] | [Error]&gt; {
461
+ ): Promise&lt;[undefined, T] | [DIError]&gt; {
407
462
  try {
408
463
  switch (record.type) {
409
464
  case InjectableType.Class:
410
465
  return this.instantiateClass(ctx, record, args)
411
466
  case InjectableType.Factory:
412
467
  return this.instantiateFactory(ctx, record, args)
413
- default:
414
- throw new Error(
415
- `[ServiceInstantiator] Unknown service type: ${record.type}`,
468
+ <span class="branch-2 cbranch-no" title="branch not covered" > default:</span>
469
+ <span class="cstat-no" title="statement not covered" > throw DIError.unknown(</span>
470
+ `[ServiceInitializer] Unknown service type: ${record.type}`,
416
471
  )
417
472
  }
418
473
  } catch (error) {
419
- return [error instanceof Error ? <span class="branch-0 cbranch-no" title="branch not covered" >error : new Error(String(error))]</span>
474
+ <span class="cstat-no" title="statement not covered" > return [</span>
475
+ error instanceof DIError
476
+ ? error
477
+ : DIError.initializationError(record.target.name, error as Error),
478
+ ]
420
479
  }
421
480
  }
422
481
  &nbsp;
@@ -428,13 +487,15 @@ export class ServiceInstantiator {
428
487
  * @returns Promise resolving to [undefined, instance] or [error]
429
488
  */
430
489
  private async instantiateClass&lt;T&gt;(
431
- ctx: FactoryContext,
490
+ ctx: ServiceInitializationContext,
432
491
  record: FactoryRecord&lt;T, any&gt;,
433
492
  args: any,
434
- ): Promise&lt;[undefined, T] | [Error]&gt; {
493
+ ): Promise&lt;[undefined, T] | [DIError]&gt; {
435
494
  try {
436
495
  const tryLoad = this.injectors.wrapSyncInit(() =&gt; {
437
- const original = this.injectors.provideFactoryContext(ctx)
496
+ const original = this.injectors.provideFactoryContext(
497
+ ctx as ServiceInitializationContext,
498
+ )
438
499
  let result = new record.target(...(args ? [args] : []))
439
500
  this.injectors.provideFactoryContext(original)
440
501
  return result
@@ -443,9 +504,10 @@ export class ServiceInstantiator {
443
504
  let [instance, promises, injectState] = tryLoad()
444
505
  if (promises.length &gt; 0) {
445
506
  const results = await Promise.allSettled(promises)
446
- if (results.some((result) =&gt; result.status === 'rejected')) {
447
- throw new Error(
448
- `[ServiceInstantiator] Service ${record.target.name} cannot be instantiated.`,
507
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (results.some((result) =&gt; result.status === 'rejected')) {
508
+ <span class="cstat-no" title="statement not covered" > throw DIError.initializationError(</span>
509
+ record.target.name,
510
+ new Error('Service cannot be instantiated'),
449
511
  )
450
512
  }
451
513
  const newRes = tryLoad(injectState)
@@ -453,14 +515,17 @@ export class ServiceInstantiator {
453
515
  promises = newRes[1]
454
516
  }
455
517
  &nbsp;
456
- if (promises.length &gt; 0) {
457
- console.error(`[ServiceInstantiator] ${record.target.name} has problem with it's definition.
518
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (promises.length &gt; 0) {
519
+ <span class="cstat-no" title="statement not covered" > console.error(</span>
520
+ `[ServiceInitializer] ${record.target.name} has problem with it's definition.
458
521
  &nbsp;
459
- One or more of the dependencies are registered as a InjectableScope.Instance and are used with inject.
522
+ One or more of the dependencies are registered as a InjectableScope.Transient and are used with inject.
460
523
  &nbsp;
461
- Please use inject asyncInject of inject to load those dependencies.`)
462
- throw new Error(
463
- `[ServiceInstantiator] Service ${record.target.name} cannot be instantiated.`,
524
+ Please use asyncInject instead of inject to load those dependencies.`,
525
+ )
526
+ <span class="cstat-no" title="statement not covered" > throw DIError.initializationError(</span>
527
+ record.target.name,
528
+ new Error('Service cannot be instantiated'),
464
529
  )
465
530
  }
466
531
  &nbsp;
@@ -476,7 +541,11 @@ export class ServiceInstantiator {
476
541
  &nbsp;
477
542
  return [undefined, instance]
478
543
  } catch (error) {
479
- return [error instanceof Error ? <span class="branch-0 cbranch-no" title="branch not covered" >error : new Error(String(error))]</span>
544
+ return [
545
+ error instanceof DIError
546
+ ? error
547
+ : DIError.initializationError(record.target.name, error as Error),
548
+ ]
480
549
  }
481
550
  }
482
551
  &nbsp;
@@ -488,10 +557,10 @@ export class ServiceInstantiator {
488
557
  * @returns Promise resolving to [undefined, instance] or [error]
489
558
  */
490
559
  private async instantiateFactory&lt;T&gt;(
491
- ctx: FactoryContext,
560
+ ctx: ServiceInitializationContext,
492
561
  record: FactoryRecord&lt;T, any&gt;,
493
562
  args: any,
494
- ): Promise&lt;[undefined, T] | [Error]&gt; {
563
+ ): Promise&lt;[undefined, T] | [DIError]&gt; {
495
564
  try {
496
565
  const tryLoad = this.injectors.wrapSyncInit(() =&gt; {
497
566
  const original = this.injectors.provideFactoryContext(ctx)
@@ -501,39 +570,48 @@ export class ServiceInstantiator {
501
570
  })
502
571
  &nbsp;
503
572
  let [builder, promises, injectState] = tryLoad()
504
- if (promises.length &gt; 0) {
505
- const results = await Promise.allSettled(promises)
506
- if (results.some((result) =&gt; result.status === 'rejected')) {
507
- throw new Error(
508
- `[ServiceInstantiator] Service ${record.target.name} cannot be instantiated.`,
573
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (promises.length &gt; 0) {
574
+ const results = <span class="cstat-no" title="statement not covered" >await Promise.allSettled(promises)</span>
575
+ <span class="cstat-no" title="statement not covered" > if (results.some(<span class="fstat-no" title="function not covered" >(r</span>esult) =&gt; <span class="cstat-no" title="statement not covered" >result.status === 'rejected')</span>) {</span>
576
+ <span class="cstat-no" title="statement not covered" > throw DIError.initializationError(</span>
577
+ record.target.name,
578
+ new Error('Service cannot be instantiated'),
509
579
  )
510
580
  }
511
- const newRes = tryLoad(injectState)
512
- builder = newRes[0]
513
- promises = newRes[1]
581
+ const newRes = <span class="cstat-no" title="statement not covered" >tryLoad(injectState)</span>
582
+ <span class="cstat-no" title="statement not covered" > builder = newRes[0]</span>
583
+ <span class="cstat-no" title="statement not covered" > promises = newRes[1]</span>
514
584
  }
515
585
  &nbsp;
516
- if (promises.length &gt; 0) {
517
- console.error(`[ServiceInstantiator] ${record.target.name} has problem with it's definition.
586
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (promises.length &gt; 0) {
587
+ <span class="cstat-no" title="statement not covered" > console.error(</span>
588
+ `[ServiceInitializer] ${record.target.name} has problem with it's definition.
518
589
  &nbsp;
519
- One or more of the dependencies are registered as a InjectableScope.Instance and are used with inject.
590
+ One or more of the dependencies are registered as a InjectableScope.Transient and are used with inject.
520
591
  &nbsp;
521
- Please use asyncInject instead of inject to load those dependencies.`)
522
- throw new Error(
523
- `[ServiceInstantiator] Service ${record.target.name} cannot be instantiated.`,
592
+ Please use asyncInject instead of inject to load those dependencies.`,
593
+ )
594
+ <span class="cstat-no" title="statement not covered" > throw DIError.initializationError(</span>
595
+ record.target.name,
596
+ new Error('Service cannot be instantiated'),
524
597
  )
525
598
  }
526
599
  &nbsp;
527
- if (typeof builder.create !== 'function') {
528
- throw new Error(
529
- `[ServiceInstantiator] Factory ${record.target.name} does not implement the create method.`,
600
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof builder.create !== 'function') {
601
+ <span class="cstat-no" title="statement not covered" > throw DIError.initializationError(</span>
602
+ record.target.name,
603
+ new Error('Factory does not implement the create method'),
530
604
  )
531
605
  }
532
606
  &nbsp;
533
607
  const instance = await builder.create(ctx, args)
534
608
  return [undefined, instance]
535
609
  } catch (error) {
536
- return [error instanceof Error ? <span class="branch-0 cbranch-no" title="branch not covered" >error : new Error(String(error))]</span>
610
+ return [
611
+ error instanceof DIError
612
+ ? <span class="branch-0 cbranch-no" title="branch not covered" >error</span>
613
+ : DIError.initializationError(record.target.name, error as Error),
614
+ ]
537
615
  }
538
616
  }
539
617
  }
@@ -544,16 +622,16 @@ export class ServiceInstantiator {
544
622
  <div class='footer quiet pad2 space-top1 center small'>
545
623
  Code coverage generated by
546
624
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
547
- at 2025-09-21T17:47:07.632Z
625
+ at 2026-01-08T12:15:46.476Z
548
626
  </div>
549
- <script src="../prettify.js"></script>
627
+ <script src="../../../prettify.js"></script>
550
628
  <script>
551
629
  window.onload = function () {
552
630
  prettyPrint();
553
631
  };
554
632
  </script>
555
- <script src="../sorter.js"></script>
556
- <script src="../block-navigation.js"></script>
633
+ <script src="../../../sorter.js"></script>
634
+ <script src="../../../block-navigation.js"></script>
557
635
  </body>
558
636
  </html>
559
637