@navios/di 0.4.2 → 0.5.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 (120) hide show
  1. package/README.md +211 -1
  2. package/coverage/clover.xml +1912 -1277
  3. package/coverage/coverage-final.json +37 -28
  4. package/coverage/docs/examples/basic-usage.mts.html +1 -1
  5. package/coverage/docs/examples/factory-pattern.mts.html +1 -1
  6. package/coverage/docs/examples/index.html +1 -1
  7. package/coverage/docs/examples/injection-tokens.mts.html +1 -1
  8. package/coverage/docs/examples/request-scope-example.mts.html +1 -1
  9. package/coverage/docs/examples/service-lifecycle.mts.html +1 -1
  10. package/coverage/index.html +71 -41
  11. package/coverage/lib/_tsup-dts-rollup.d.mts.html +682 -43
  12. package/coverage/lib/index.d.mts.html +7 -4
  13. package/coverage/lib/index.html +5 -5
  14. package/coverage/lib/testing/index.d.mts.html +91 -0
  15. package/coverage/lib/testing/index.html +116 -0
  16. package/coverage/src/base-instance-holder-manager.mts.html +589 -0
  17. package/coverage/src/container.mts.html +257 -74
  18. package/coverage/src/decorators/factory.decorator.mts.html +1 -1
  19. package/coverage/src/decorators/index.html +1 -1
  20. package/coverage/src/decorators/index.mts.html +1 -1
  21. package/coverage/src/decorators/injectable.decorator.mts.html +20 -20
  22. package/coverage/src/enums/index.html +1 -1
  23. package/coverage/src/enums/index.mts.html +1 -1
  24. package/coverage/src/enums/injectable-scope.enum.mts.html +1 -1
  25. package/coverage/src/enums/injectable-type.enum.mts.html +1 -1
  26. package/coverage/src/errors/di-error.mts.html +292 -0
  27. package/coverage/src/errors/errors.enum.mts.html +30 -21
  28. package/coverage/src/errors/factory-not-found.mts.html +31 -22
  29. package/coverage/src/errors/factory-token-not-resolved.mts.html +29 -26
  30. package/coverage/src/errors/index.html +56 -41
  31. package/coverage/src/errors/index.mts.html +15 -9
  32. package/coverage/src/errors/instance-destroying.mts.html +31 -22
  33. package/coverage/src/errors/instance-expired.mts.html +31 -22
  34. package/coverage/src/errors/instance-not-found.mts.html +31 -22
  35. package/coverage/src/errors/unknown-error.mts.html +31 -43
  36. package/coverage/src/event-emitter.mts.html +14 -14
  37. package/coverage/src/factory-context.mts.html +1 -1
  38. package/coverage/src/index.html +121 -46
  39. package/coverage/src/index.mts.html +7 -4
  40. package/coverage/src/injection-token.mts.html +28 -28
  41. package/coverage/src/injector.mts.html +1 -1
  42. package/coverage/src/instance-resolver.mts.html +1762 -0
  43. package/coverage/src/interfaces/factory.interface.mts.html +1 -1
  44. package/coverage/src/interfaces/index.html +1 -1
  45. package/coverage/src/interfaces/index.mts.html +1 -1
  46. package/coverage/src/interfaces/on-service-destroy.interface.mts.html +1 -1
  47. package/coverage/src/interfaces/on-service-init.interface.mts.html +1 -1
  48. package/coverage/src/registry.mts.html +28 -28
  49. package/coverage/src/request-context-holder.mts.html +183 -102
  50. package/coverage/src/request-context-manager.mts.html +532 -0
  51. package/coverage/src/service-instantiator.mts.html +49 -49
  52. package/coverage/src/service-invalidator.mts.html +1372 -0
  53. package/coverage/src/service-locator-event-bus.mts.html +48 -48
  54. package/coverage/src/service-locator-instance-holder.mts.html +2 -14
  55. package/coverage/src/service-locator-manager.mts.html +71 -335
  56. package/coverage/src/service-locator.mts.html +240 -2328
  57. package/coverage/src/symbols/index.html +1 -1
  58. package/coverage/src/symbols/index.mts.html +1 -1
  59. package/coverage/src/symbols/injectable-token.mts.html +1 -1
  60. package/coverage/src/testing/index.html +131 -0
  61. package/coverage/src/testing/index.mts.html +88 -0
  62. package/coverage/src/testing/test-container.mts.html +445 -0
  63. package/coverage/src/token-processor.mts.html +607 -0
  64. package/coverage/src/utils/defer.mts.html +28 -214
  65. package/coverage/src/utils/get-injectable-token.mts.html +7 -7
  66. package/coverage/src/utils/get-injectors.mts.html +99 -99
  67. package/coverage/src/utils/index.html +15 -15
  68. package/coverage/src/utils/index.mts.html +4 -7
  69. package/coverage/src/utils/types.mts.html +1 -1
  70. package/docs/injectable.md +51 -11
  71. package/docs/scopes.md +63 -29
  72. package/lib/_tsup-dts-rollup.d.mts +376 -213
  73. package/lib/_tsup-dts-rollup.d.ts +376 -213
  74. package/lib/{chunk-3NLYPYBY.mjs → chunk-44F3LXW5.mjs} +1021 -605
  75. package/lib/chunk-44F3LXW5.mjs.map +1 -0
  76. package/lib/index.d.mts +6 -4
  77. package/lib/index.d.ts +6 -4
  78. package/lib/index.js +1192 -776
  79. package/lib/index.js.map +1 -1
  80. package/lib/index.mjs +2 -2
  81. package/lib/testing/index.js +1258 -840
  82. package/lib/testing/index.js.map +1 -1
  83. package/lib/testing/index.mjs +1 -1
  84. package/package.json +1 -1
  85. package/src/__tests__/container.spec.mts +47 -13
  86. package/src/__tests__/errors.spec.mts +53 -27
  87. package/src/__tests__/injectable.spec.mts +73 -0
  88. package/src/__tests__/request-scope.spec.mts +0 -2
  89. package/src/__tests__/service-locator-manager.spec.mts +12 -82
  90. package/src/__tests__/service-locator.spec.mts +1009 -1
  91. package/src/__type-tests__/inject.spec-d.mts +30 -7
  92. package/src/__type-tests__/injectable.spec-d.mts +76 -37
  93. package/src/base-instance-holder-manager.mts +2 -9
  94. package/src/container.mts +61 -9
  95. package/src/decorators/injectable.decorator.mts +29 -5
  96. package/src/errors/di-error.mts +69 -0
  97. package/src/errors/index.mts +9 -7
  98. package/src/injection-token.mts +1 -0
  99. package/src/injector.mts +2 -0
  100. package/src/instance-resolver.mts +559 -0
  101. package/src/request-context-holder.mts +0 -2
  102. package/src/request-context-manager.mts +149 -0
  103. package/src/service-invalidator.mts +429 -0
  104. package/src/service-locator-instance-holder.mts +0 -4
  105. package/src/service-locator-manager.mts +10 -40
  106. package/src/service-locator.mts +86 -782
  107. package/src/token-processor.mts +174 -0
  108. package/src/utils/get-injectors.mts +161 -24
  109. package/src/utils/index.mts +0 -1
  110. package/src/utils/types.mts +12 -8
  111. package/lib/chunk-3NLYPYBY.mjs.map +0 -1
  112. package/src/__tests__/defer.spec.mts +0 -166
  113. package/src/errors/errors.enum.mts +0 -8
  114. package/src/errors/factory-not-found.mts +0 -8
  115. package/src/errors/factory-token-not-resolved.mts +0 -10
  116. package/src/errors/instance-destroying.mts +0 -8
  117. package/src/errors/instance-expired.mts +0 -8
  118. package/src/errors/instance-not-found.mts +0 -8
  119. package/src/errors/unknown-error.mts +0 -15
  120. package/src/utils/defer.mts +0 -73
@@ -106,7 +106,7 @@ export interface FactorableWithArgs<T, A extends InjectionTokenSchemaType>
106
106
  <div class='footer quiet pad2 space-top1 center small'>
107
107
  Code coverage generated by
108
108
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
109
- at 2025-09-19T12:38:51.382Z
109
+ at 2025-09-21T17:47:07.632Z
110
110
  </div>
111
111
  <script src="../../prettify.js"></script>
112
112
  <script>
@@ -146,7 +146,7 @@
146
146
  <div class='footer quiet pad2 space-top1 center small'>
147
147
  Code coverage generated by
148
148
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
149
- at 2025-09-19T12:38:51.382Z
149
+ at 2025-09-21T17:47:07.632Z
150
150
  </div>
151
151
  <script src="../../prettify.js"></script>
152
152
  <script>
@@ -79,7 +79,7 @@ export * from './on-service-destroy.interface.mjs'
79
79
  <div class='footer quiet pad2 space-top1 center small'>
80
80
  Code coverage generated by
81
81
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
82
- at 2025-09-19T12:38:51.382Z
82
+ at 2025-09-21T17:47:07.632Z
83
83
  </div>
84
84
  <script src="../../prettify.js"></script>
85
85
  <script>
@@ -79,7 +79,7 @@
79
79
  <div class='footer quiet pad2 space-top1 center small'>
80
80
  Code coverage generated by
81
81
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
82
- at 2025-09-19T12:38:51.382Z
82
+ at 2025-09-21T17:47:07.632Z
83
83
  </div>
84
84
  <script src="../../prettify.js"></script>
85
85
  <script>
@@ -79,7 +79,7 @@
79
79
  <div class='footer quiet pad2 space-top1 center small'>
80
80
  Code coverage generated by
81
81
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
82
- at 2025-09-19T12:38:51.382Z
82
+ at 2025-09-21T17:47:07.632Z
83
83
  </div>
84
84
  <script src="../../prettify.js"></script>
85
85
  <script>
@@ -32,7 +32,7 @@
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>14/14</span>
35
+ <span class='fraction'>15/15</span>
36
36
  </div>
37
37
 
38
38
 
@@ -129,46 +129,46 @@
129
129
  <span class="cline-any cline-neutral">&nbsp;</span>
130
130
  <span class="cline-any cline-neutral">&nbsp;</span>
131
131
  <span class="cline-any cline-yes">1x</span>
132
- <span class="cline-any cline-yes">122x</span>
132
+ <span class="cline-any cline-yes">124x</span>
133
133
  <span class="cline-any cline-neutral">&nbsp;</span>
134
- <span class="cline-any cline-yes">122x</span>
134
+ <span class="cline-any cline-yes">124x</span>
135
135
  <span class="cline-any cline-neutral">&nbsp;</span>
136
- <span class="cline-any cline-yes">122x</span>
137
- <span class="cline-any cline-yes">516x</span>
138
- <span class="cline-any cline-yes">506x</span>
139
- <span class="cline-any cline-yes">506x</span>
140
- <span class="cline-any cline-yes">398x</span>
136
+ <span class="cline-any cline-yes">124x</span>
137
+ <span class="cline-any cline-yes">642x</span>
138
+ <span class="cline-any cline-yes">629x</span>
139
+ <span class="cline-any cline-yes">629x</span>
140
+ <span class="cline-any cline-yes">421x</span>
141
141
  <span class="cline-any cline-yes">5x</span>
142
142
  <span class="cline-any cline-yes">5x</span>
143
- <span class="cline-any cline-yes">5x</span>
144
- <span class="cline-any cline-yes">516x</span>
143
+ <span class="cline-any cline-yes">8x</span>
144
+ <span class="cline-any cline-yes">642x</span>
145
145
  <span class="cline-any cline-neutral">&nbsp;</span>
146
- <span class="cline-any cline-yes">122x</span>
147
- <span class="cline-any cline-yes">513x</span>
148
- <span class="cline-any cline-yes">513x</span>
149
- <span class="cline-any cline-yes">513x</span>
150
- <span class="cline-any cline-yes">513x</span>
146
+ <span class="cline-any cline-yes">124x</span>
147
+ <span class="cline-any cline-yes">636x</span>
148
+ <span class="cline-any cline-yes">636x</span>
149
+ <span class="cline-any cline-yes">636x</span>
150
+ <span class="cline-any cline-yes">636x</span>
151
151
  <span class="cline-any cline-yes">8x</span>
152
152
  <span class="cline-any cline-yes">6x</span>
153
153
  <span class="cline-any cline-yes">6x</span>
154
154
  <span class="cline-any cline-yes">2x</span>
155
155
  <span class="cline-any cline-yes">2x</span>
156
- <span class="cline-any cline-yes">505x</span>
157
- <span class="cline-any cline-yes">513x</span>
156
+ <span class="cline-any cline-yes">628x</span>
157
+ <span class="cline-any cline-yes">636x</span>
158
158
  <span class="cline-any cline-neutral">&nbsp;</span>
159
- <span class="cline-any cline-yes">122x</span>
160
- <span class="cline-any cline-yes">260x</span>
161
- <span class="cline-any cline-yes">260x</span>
162
- <span class="cline-any cline-yes">260x</span>
163
- <span class="cline-any cline-yes">260x</span>
164
- <span class="cline-any cline-yes">260x</span>
165
- <span class="cline-any cline-yes">260x</span>
166
- <span class="cline-any cline-yes">260x</span>
159
+ <span class="cline-any cline-yes">124x</span>
160
+ <span class="cline-any cline-yes">311x</span>
161
+ <span class="cline-any cline-yes">311x</span>
162
+ <span class="cline-any cline-yes">311x</span>
163
+ <span class="cline-any cline-yes">311x</span>
164
+ <span class="cline-any cline-yes">311x</span>
165
+ <span class="cline-any cline-yes">311x</span>
166
+ <span class="cline-any cline-yes">311x</span>
167
167
  <span class="cline-any cline-neutral">&nbsp;</span>
168
- <span class="cline-any cline-yes">122x</span>
168
+ <span class="cline-any cline-yes">124x</span>
169
169
  <span class="cline-any cline-yes">4x</span>
170
170
  <span class="cline-any cline-yes">4x</span>
171
- <span class="cline-any cline-yes">122x</span>
171
+ <span class="cline-any cline-yes">124x</span>
172
172
  <span class="cline-any cline-neutral">&nbsp;</span>
173
173
  <span class="cline-any cline-yes">1x</span>
174
174
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { ClassType, InjectionToken } from './injection-token.mjs'
@@ -232,7 +232,7 @@ export const globalRegistry = new Registry()
232
232
  <div class='footer quiet pad2 space-top1 center small'>
233
233
  Code coverage generated by
234
234
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
235
- at 2025-09-19T12:38:51.382Z
235
+ at 2025-09-21T17:47:07.632Z
236
236
  </div>
237
237
  <script src="../prettify.js"></script>
238
238
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">97.33% </span>
26
+ <span class="strong">97.22% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>73/75</span>
28
+ <span class='fraction'>70/72</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">93.33% </span>
33
+ <span class="strong">93.75% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>14/15</span>
35
+ <span class='fraction'>15/16</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>10/10</span>
42
+ <span class='fraction'>11/11</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">97.33% </span>
47
+ <span class="strong">97.22% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>73/75</span>
49
+ <span class='fraction'>70/72</span>
50
50
  </div>
51
51
 
52
52
 
@@ -237,7 +237,34 @@
237
237
  <a name='L172'></a><a href='#L172'>172</a>
238
238
  <a name='L173'></a><a href='#L173'>173</a>
239
239
  <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
241
268
  <span class="cline-any cline-neutral">&nbsp;</span>
242
269
  <span class="cline-any cline-yes">1x</span>
243
270
  <span class="cline-any cline-yes">1x</span>
@@ -327,35 +354,76 @@
327
354
  <span class="cline-any cline-neutral">&nbsp;</span>
328
355
  <span class="cline-any cline-neutral">&nbsp;</span>
329
356
  <span class="cline-any cline-neutral">&nbsp;</span>
357
+ <span class="cline-any cline-neutral">&nbsp;</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">1x</span>
330
374
  <span class="cline-any cline-yes">1x</span>
331
- <span class="cline-any cline-yes">19x</span>
332
- <span class="cline-any cline-yes">19x</span>
333
- <span class="cline-any cline-yes">19x</span>
334
- <span class="cline-any cline-yes">19x</span>
335
- <span class="cline-any cline-neutral">&nbsp;</span>
336
- <span class="cline-any cline-yes">19x</span>
337
- <span class="cline-any cline-yes">19x</span>
338
- <span class="cline-any cline-yes">19x</span>
339
- <span class="cline-any cline-yes">19x</span>
340
- <span class="cline-any cline-yes">19x</span>
341
- <span class="cline-any cline-yes">19x</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-yes">44x</span>
377
+ <span class="cline-any cline-yes">44x</span>
378
+ <span class="cline-any cline-yes">44x</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
380
+ <span class="cline-any cline-yes">44x</span>
381
+ <span class="cline-any cline-yes">44x</span>
382
+ <span class="cline-any cline-yes">44x</span>
383
+ <span class="cline-any cline-yes">44x</span>
384
+ <span class="cline-any cline-yes">44x</span>
385
+ <span class="cline-any cline-yes">44x</span>
386
+ <span class="cline-any cline-yes">44x</span>
342
387
  <span class="cline-any cline-yes">2x</span>
343
388
  <span class="cline-any cline-yes">3x</span>
344
389
  <span class="cline-any cline-yes">2x</span>
345
390
  <span class="cline-any cline-yes">2x</span>
346
- <span class="cline-any cline-yes">19x</span>
347
- <span class="cline-any cline-neutral">&nbsp;</span>
348
- <span class="cline-any cline-yes">19x</span>
349
- <span class="cline-any cline-yes">23x</span>
350
- <span class="cline-any cline-yes">23x</span>
351
- <span class="cline-any cline-yes">23x</span>
352
- <span class="cline-any cline-yes">23x</span>
353
- <span class="cline-any cline-yes">23x</span>
354
- <span class="cline-any cline-yes">12x</span>
355
- <span class="cline-any cline-yes">12x</span>
356
- <span class="cline-any cline-yes">12x</span>
391
+ <span class="cline-any cline-yes">44x</span>
392
+ <span class="cline-any cline-neutral">&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-yes">44x</span>
397
+ <span class="cline-any cline-yes">27x</span>
398
+ <span class="cline-any cline-yes">27x</span>
399
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-yes">44x</span>
404
+ <span class="cline-any cline-yes">96x</span>
405
+ <span class="cline-any cline-yes">96x</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-yes">44x</span>
411
+ <span class="cline-any cline-yes">2x</span>
412
+ <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
417
+ <span class="cline-any cline-yes">44x</span>
357
418
  <span class="cline-any cline-yes">12x</span>
358
419
  <span class="cline-any cline-yes">12x</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-yes">44x</span>
422
+ <span class="cline-any cline-yes">41x</span>
423
+ <span class="cline-any cline-yes">41x</span>
424
+ <span class="cline-any cline-yes">41x</span>
425
+ <span class="cline-any cline-yes">41x</span>
426
+ <span class="cline-any cline-yes">41x</span>
359
427
  <span class="cline-any cline-yes">12x</span>
360
428
  <span class="cline-any cline-yes">12x</span>
361
429
  <span class="cline-any cline-yes">12x</span>
@@ -365,41 +433,27 @@
365
433
  <span class="cline-any cline-yes">12x</span>
366
434
  <span class="cline-any cline-yes">12x</span>
367
435
  <span class="cline-any cline-yes">12x</span>
368
- <span class="cline-any cline-yes">23x</span>
369
- <span class="cline-any cline-yes">11x</span>
436
+ <span class="cline-any cline-yes">41x</span>
437
+ <span class="cline-any cline-yes">29x</span>
370
438
  <span class="cline-any cline-no">&nbsp;</span>
371
439
  <span class="cline-any cline-no">&nbsp;</span>
372
- <span class="cline-any cline-yes">11x</span>
373
- <span class="cline-any cline-yes">11x</span>
374
- <span class="cline-any cline-yes">11x</span>
375
- <span class="cline-any cline-yes">23x</span>
376
- <span class="cline-any cline-neutral">&nbsp;</span>
377
- <span class="cline-any cline-yes">19x</span>
378
- <span class="cline-any cline-yes">16x</span>
379
- <span class="cline-any cline-yes">16x</span>
380
- <span class="cline-any cline-neutral">&nbsp;</span>
381
- <span class="cline-any cline-yes">19x</span>
382
- <span class="cline-any cline-yes">26x</span>
383
- <span class="cline-any cline-yes">26x</span>
384
- <span class="cline-any cline-neutral">&nbsp;</span>
385
- <span class="cline-any cline-yes">19x</span>
386
- <span class="cline-any cline-yes">12x</span>
387
- <span class="cline-any cline-yes">12x</span>
440
+ <span class="cline-any cline-yes">29x</span>
441
+ <span class="cline-any cline-yes">29x</span>
442
+ <span class="cline-any cline-yes">41x</span>
388
443
  <span class="cline-any cline-neutral">&nbsp;</span>
389
- <span class="cline-any cline-yes">19x</span>
390
- <span class="cline-any cline-yes">14x</span>
391
- <span class="cline-any cline-yes">14x</span>
392
- <span class="cline-any cline-yes">14x</span>
393
- <span class="cline-any cline-yes">14x</span>
444
+ <span class="cline-any cline-yes">44x</span>
445
+ <span class="cline-any cline-yes">29x</span>
446
+ <span class="cline-any cline-yes">29x</span>
447
+ <span class="cline-any cline-yes">29x</span>
394
448
  <span class="cline-any cline-neutral">&nbsp;</span>
395
- <span class="cline-any cline-yes">19x</span>
449
+ <span class="cline-any cline-yes">44x</span>
396
450
  <span class="cline-any cline-yes">7x</span>
397
451
  <span class="cline-any cline-yes">7x</span>
398
452
  <span class="cline-any cline-neutral">&nbsp;</span>
399
- <span class="cline-any cline-yes">19x</span>
453
+ <span class="cline-any cline-yes">44x</span>
400
454
  <span class="cline-any cline-yes">2x</span>
401
455
  <span class="cline-any cline-yes">2x</span>
402
- <span class="cline-any cline-yes">19x</span>
456
+ <span class="cline-any cline-yes">44x</span>
403
457
  <span class="cline-any cline-neutral">&nbsp;</span>
404
458
  <span class="cline-any cline-neutral">&nbsp;</span>
405
459
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -413,9 +467,9 @@
413
467
  <span class="cline-any cline-yes">8x</span>
414
468
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { ServiceLocatorInstanceHolder } from './service-locator-instance-holder.mjs'
415
469
  &nbsp;
470
+ import { BaseInstanceHolderManager } from './base-instance-holder-manager.mjs'
416
471
  import { InjectableScope, InjectableType } from './enums/index.mjs'
417
472
  import { InjectionToken } from './injection-token.mjs'
418
- import { ServiceLocatorInstanceHolderStatus } from './service-locator-instance-holder.mjs'
419
473
  &nbsp;
420
474
  /**
421
475
  * Request context holder that manages pre-prepared instances for a specific request.
@@ -426,11 +480,6 @@ export interface RequestContextHolder {
426
480
  * Unique identifier for this request context.
427
481
  */
428
482
  readonly requestId: string
429
- &nbsp;
430
- /**
431
- * Pre-prepared instances for this request, keyed by instance name.
432
- */
433
- readonly instances: Map&lt;string, any&gt;
434
483
  &nbsp;
435
484
  /**
436
485
  * Instance holders for request-scoped services.
@@ -466,21 +515,16 @@ export interface RequestContextHolder {
466
515
  * Adds a pre-prepared instance to this context.
467
516
  */
468
517
  addInstance(token: InjectionToken&lt;any, undefined&gt;, instance: any): void
469
- &nbsp;
470
- /**
471
- * Gets a pre-prepared instance from this context.
472
- */
473
- getInstance(instanceName: string): any | undefined
474
518
  &nbsp;
475
519
  /**
476
520
  * Gets an instance holder from this context.
477
521
  */
478
- getHolder(instanceName: string): ServiceLocatorInstanceHolder | undefined
522
+ get(instanceName: string): ServiceLocatorInstanceHolder | undefined
479
523
  &nbsp;
480
524
  /**
481
525
  * Checks if this context has a pre-prepared instance.
482
526
  */
483
- hasInstance(instanceName: string): boolean
527
+ has(instanceName: string): boolean
484
528
  &nbsp;
485
529
  /**
486
530
  * Clears all instances and holders from this context.
@@ -496,14 +540,41 @@ export interface RequestContextHolder {
496
540
  * Sets metadata value by key.
497
541
  */
498
542
  setMetadata(key: string, value: any): void
543
+ &nbsp;
544
+ // Methods inherited from BaseInstanceHolderManager
545
+ /**
546
+ * Filters holders based on a predicate function.
547
+ */
548
+ filter(
549
+ predicate: (
550
+ value: ServiceLocatorInstanceHolder&lt;any&gt;,
551
+ key: string,
552
+ ) =&gt; boolean,
553
+ ): Map&lt;string, ServiceLocatorInstanceHolder&gt;
554
+ &nbsp;
555
+ /**
556
+ * Deletes a holder by name.
557
+ */
558
+ delete(name: string): boolean
559
+ &nbsp;
560
+ /**
561
+ * Gets the number of holders currently managed.
562
+ */
563
+ size(): number
564
+ &nbsp;
565
+ /**
566
+ * Checks if this manager has any holders.
567
+ */
568
+ isEmpty(): boolean
499
569
  }
500
570
  &nbsp;
501
571
  /**
502
572
  * Default implementation of RequestContextHolder.
503
573
  */
504
- export class DefaultRequestContextHolder implements RequestContextHolder {
505
- public readonly instances = new Map&lt;string, any&gt;()
506
- public readonly holders = new Map&lt;string, ServiceLocatorInstanceHolder&gt;()
574
+ export class DefaultRequestContextHolder
575
+ extends BaseInstanceHolderManager
576
+ implements RequestContextHolder
577
+ {
507
578
  public readonly metadata = new Map&lt;string, any&gt;()
508
579
  public readonly createdAt = Date.now()
509
580
  &nbsp;
@@ -512,12 +583,41 @@ export class DefaultRequestContextHolder implements RequestContextHolder {
512
583
  public readonly priority: number = 100,
513
584
  initialMetadata?: Record&lt;string, any&gt;,
514
585
  ) {
586
+ super(null) // RequestContextHolder doesn't need logging
515
587
  if (initialMetadata) {
516
588
  Object.entries(initialMetadata).forEach(([key, value]) =&gt; {
517
589
  this.metadata.set(key, value)
518
590
  })
519
591
  }
520
592
  }
593
+ &nbsp;
594
+ /**
595
+ * Public getter for holders to maintain interface compatibility.
596
+ */
597
+ get holders(): Map&lt;string, ServiceLocatorInstanceHolder&gt; {
598
+ return this._holders
599
+ }
600
+ &nbsp;
601
+ /**
602
+ * Gets a holder by name. For RequestContextHolder, this is a simple lookup.
603
+ */
604
+ get(name: string): ServiceLocatorInstanceHolder | undefined {
605
+ return this._holders.get(name)
606
+ }
607
+ &nbsp;
608
+ /**
609
+ * Sets a holder by name.
610
+ */
611
+ set(name: string, holder: ServiceLocatorInstanceHolder): void {
612
+ this._holders.set(name, holder)
613
+ }
614
+ &nbsp;
615
+ /**
616
+ * Checks if a holder exists by name.
617
+ */
618
+ has(name: string): boolean {
619
+ return this._holders.has(name)
620
+ }
521
621
  &nbsp;
522
622
  addInstance(
523
623
  instanceName: string | InjectionToken&lt;any, undefined&gt;,
@@ -525,44 +625,25 @@ export class DefaultRequestContextHolder implements RequestContextHolder {
525
625
  holder?: ServiceLocatorInstanceHolder,
526
626
  ): void {
527
627
  if (instanceName instanceof InjectionToken) {
528
- this.instances.set(instanceName.toString(), instance)
529
- this.holders.set(instanceName.toString(), {
628
+ const name = instanceName.toString()
629
+ const createdHolder = this.createCreatedHolder(
630
+ name,
530
631
  instance,
531
- status: ServiceLocatorInstanceHolderStatus.Created,
532
- creationPromise: null,
533
- destroyPromise: null,
534
- destroyListeners: [],
535
- deps: new Set(),
536
- name: instanceName.toString(),
537
- type: InjectableType.Class,
538
- scope: InjectableScope.Singleton,
539
- createdAt: Date.now(),
540
- ttl: Infinity,
541
- })
632
+ InjectableType.Class,
633
+ InjectableScope.Singleton,
634
+ new Set(),
635
+ )
636
+ this._holders.set(name, createdHolder)
542
637
  } else {
543
638
  if (!holder) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
544
639
  <span class="cstat-no" title="statement not covered" > throw new Error('Holder is required when adding an instance by name')</span>
545
640
  <span class="cstat-no" title="statement not covered" > }</span>
546
- this.instances.set(instanceName, instance)
547
- this.holders.set(instanceName, holder)
641
+ this._holders.set(instanceName, holder)
548
642
  }
549
643
  }
550
- &nbsp;
551
- getInstance(instanceName: string): any | undefined {
552
- return this.instances.get(instanceName)
553
- }
554
- &nbsp;
555
- getHolder(instanceName: string): ServiceLocatorInstanceHolder | undefined {
556
- return this.holders.get(instanceName)
557
- }
558
- &nbsp;
559
- hasInstance(instanceName: string): boolean {
560
- return this.instances.has(instanceName)
561
- }
562
644
  &nbsp;
563
645
  clear(): void {
564
- this.instances.clear()
565
- this.holders.clear()
646
+ super.clear() // Use the base class clear method for holders
566
647
  this.metadata.clear()
567
648
  }
568
649
  &nbsp;
@@ -592,7 +673,7 @@ export function createRequestContextHolder(
592
673
  <div class='footer quiet pad2 space-top1 center small'>
593
674
  Code coverage generated by
594
675
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
595
- at 2025-09-19T12:38:51.382Z
676
+ at 2025-09-21T17:47:07.632Z
596
677
  </div>
597
678
  <script src="../prettify.js"></script>
598
679
  <script>