@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
@@ -25,28 +25,28 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>121/121</span>
28
+ <span class='fraction'>57/57</span>
29
29
  </div>
30
30
 
31
31
 
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'>23/23</span>
35
+ <span class='fraction'>15/15</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'>9/9</span>
42
+ <span class='fraction'>5/5</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>121/121</span>
49
+ <span class='fraction'>57/57</span>
50
50
  </div>
51
51
 
52
52
 
@@ -148,228 +148,63 @@
148
148
  <a name='L83'></a><a href='#L83'>83</a>
149
149
  <a name='L84'></a><a href='#L84'>84</a>
150
150
  <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
151
+ <a name='L86'></a><a href='#L86'>86</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
240
152
  <span class="cline-any cline-neutral">&nbsp;</span>
241
153
  <span class="cline-any cline-neutral">&nbsp;</span>
242
154
  <span class="cline-any cline-yes">1x</span>
243
155
  <span class="cline-any cline-yes">1x</span>
244
- <span class="cline-any cline-neutral">&nbsp;</span>
245
- <span class="cline-any cline-neutral">&nbsp;</span>
246
- <span class="cline-any cline-neutral">&nbsp;</span>
247
- <span class="cline-any cline-neutral">&nbsp;</span>
248
- <span class="cline-any cline-neutral">&nbsp;</span>
249
156
  <span class="cline-any cline-yes">1x</span>
250
157
  <span class="cline-any cline-yes">1x</span>
251
158
  <span class="cline-any cline-neutral">&nbsp;</span>
252
159
  <span class="cline-any cline-yes">1x</span>
253
- <span class="cline-any cline-yes">130x</span>
254
- <span class="cline-any cline-yes">130x</span>
255
- <span class="cline-any cline-neutral">&nbsp;</span>
256
- <span class="cline-any cline-yes">130x</span>
160
+ <span class="cline-any cline-yes">1x</span>
161
+ <span class="cline-any cline-yes">166x</span>
162
+ <span class="cline-any cline-yes">166x</span>
257
163
  <span class="cline-any cline-neutral">&nbsp;</span>
258
- <span class="cline-any cline-yes">130x</span>
259
- <span class="cline-any cline-yes">325x</span>
164
+ <span class="cline-any cline-yes">1x</span>
165
+ <span class="cline-any cline-yes">474x</span>
260
166
  <span class="cline-any cline-neutral">&nbsp;</span>
261
167
  <span class="cline-any cline-neutral">&nbsp;</span>
262
168
  <span class="cline-any cline-neutral">&nbsp;</span>
263
- <span class="cline-any cline-yes">325x</span>
264
- <span class="cline-any cline-yes">325x</span>
265
- <span class="cline-any cline-yes">325x</span>
266
- <span class="cline-any cline-yes">57x</span>
267
- <span class="cline-any cline-yes">2x</span>
268
- <span class="cline-any cline-yes">2x</span>
269
- <span class="cline-any cline-yes">2x</span>
169
+ <span class="cline-any cline-yes">474x</span>
170
+ <span class="cline-any cline-yes">474x</span>
171
+ <span class="cline-any cline-yes">474x</span>
172
+ <span class="cline-any cline-yes">126x</span>
270
173
  <span class="cline-any cline-yes">2x</span>
271
174
  <span class="cline-any cline-yes">2x</span>
272
175
  <span class="cline-any cline-yes">2x</span>
273
176
  <span class="cline-any cline-yes">2x</span>
274
- <span class="cline-any cline-yes">2x</span>
275
- <span class="cline-any cline-yes">55x</span>
276
- <span class="cline-any cline-yes">55x</span>
277
- <span class="cline-any cline-yes">2x</span>
278
- <span class="cline-any cline-yes">2x</span>
279
- <span class="cline-any cline-yes">2x</span>
280
- <span class="cline-any cline-yes">2x</span>
281
- <span class="cline-any cline-yes">55x</span>
282
- <span class="cline-any cline-yes">1x</span>
283
- <span class="cline-any cline-yes">1x</span>
284
- <span class="cline-any cline-yes">1x</span>
285
- <span class="cline-any cline-yes">1x</span>
286
- <span class="cline-any cline-yes">1x</span>
287
- <span class="cline-any cline-neutral">&nbsp;</span>
288
- <span class="cline-any cline-yes">52x</span>
289
- <span class="cline-any cline-yes">325x</span>
290
- <span class="cline-any cline-yes">268x</span>
291
- <span class="cline-any cline-yes">268x</span>
292
- <span class="cline-any cline-yes">268x</span>
293
- <span class="cline-any cline-yes">268x</span>
294
- <span class="cline-any cline-yes">268x</span>
295
- <span class="cline-any cline-yes">325x</span>
177
+ <span class="cline-any cline-yes">126x</span>
178
+ <span class="cline-any cline-yes">3x</span>
179
+ <span class="cline-any cline-yes">3x</span>
180
+ <span class="cline-any cline-yes">3x</span>
181
+ <span class="cline-any cline-yes">3x</span>
182
+ <span class="cline-any cline-yes">3x</span>
296
183
  <span class="cline-any cline-neutral">&nbsp;</span>
297
- <span class="cline-any cline-yes">130x</span>
298
- <span class="cline-any cline-yes">218x</span>
299
- <span class="cline-any cline-yes">218x</span>
184
+ <span class="cline-any cline-yes">121x</span>
185
+ <span class="cline-any cline-yes">474x</span>
186
+ <span class="cline-any cline-yes">348x</span>
187
+ <span class="cline-any cline-yes">348x</span>
188
+ <span class="cline-any cline-yes">348x</span>
189
+ <span class="cline-any cline-yes">348x</span>
190
+ <span class="cline-any cline-yes">348x</span>
191
+ <span class="cline-any cline-yes">474x</span>
300
192
  <span class="cline-any cline-neutral">&nbsp;</span>
301
- <span class="cline-any cline-yes">130x</span>
302
- <span class="cline-any cline-yes">4x</span>
303
- <span class="cline-any cline-yes">4x</span>
304
- <span class="cline-any cline-yes">4x</span>
305
- <span class="cline-any cline-yes">4x</span>
306
193
  <span class="cline-any cline-yes">1x</span>
194
+ <span class="cline-any cline-yes">247x</span>
195
+ <span class="cline-any cline-yes">247x</span>
196
+ <span class="cline-any cline-neutral">&nbsp;</span>
307
197
  <span class="cline-any cline-yes">1x</span>
308
198
  <span class="cline-any cline-yes">3x</span>
309
199
  <span class="cline-any cline-yes">3x</span>
200
+ <span class="cline-any cline-yes">1x</span>
201
+ <span class="cline-any cline-yes">1x</span>
310
202
  <span class="cline-any cline-yes">3x</span>
311
- <span class="cline-any cline-yes">3x</span>
312
- <span class="cline-any cline-yes">4x</span>
313
- <span class="cline-any cline-yes">2x</span>
314
- <span class="cline-any cline-yes">2x</span>
315
203
  <span class="cline-any cline-yes">1x</span>
316
- <span class="cline-any cline-yes">4x</span>
317
- <span class="cline-any cline-neutral">&nbsp;</span>
318
- <span class="cline-any cline-yes">130x</span>
319
- <span class="cline-any cline-yes">18x</span>
320
- <span class="cline-any cline-yes">18x</span>
321
- <span class="cline-any cline-neutral">&nbsp;</span>
322
- <span class="cline-any cline-yes">130x</span>
323
- <span class="cline-any cline-yes">26x</span>
324
- <span class="cline-any cline-neutral">&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-yes">26x</span>
328
- <span class="cline-any cline-yes">26x</span>
329
- <span class="cline-any cline-yes">26x</span>
330
- <span class="cline-any cline-yes">72x</span>
331
- <span class="cline-any cline-yes">26x</span>
332
- <span class="cline-any cline-yes">26x</span>
333
- <span class="cline-any cline-yes">26x</span>
334
- <span class="cline-any cline-neutral">&nbsp;</span>
335
- <span class="cline-any cline-neutral">&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-neutral">&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-yes">130x</span>
346
- <span class="cline-any cline-yes">240x</span>
347
- <span class="cline-any cline-yes">240x</span>
348
- <span class="cline-any cline-yes">240x</span>
349
- <span class="cline-any cline-yes">240x</span>
350
- <span class="cline-any cline-yes">240x</span>
351
- <span class="cline-any cline-neutral">&nbsp;</span>
352
- <span class="cline-any cline-neutral">&nbsp;</span>
353
- <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-yes">240x</span>
355
- <span class="cline-any cline-yes">240x</span>
356
- <span class="cline-any cline-neutral">&nbsp;</span>
357
- <span class="cline-any cline-yes">240x</span>
358
- <span class="cline-any cline-yes">240x</span>
359
- <span class="cline-any cline-yes">240x</span>
360
- <span class="cline-any cline-yes">240x</span>
361
- <span class="cline-any cline-yes">240x</span>
362
- <span class="cline-any cline-yes">240x</span>
363
- <span class="cline-any cline-yes">240x</span>
364
- <span class="cline-any cline-yes">240x</span>
365
- <span class="cline-any cline-yes">240x</span>
366
- <span class="cline-any cline-yes">240x</span>
367
- <span class="cline-any cline-yes">240x</span>
368
- <span class="cline-any cline-yes">240x</span>
369
- <span class="cline-any cline-yes">240x</span>
204
+ <span class="cline-any cline-yes">1x</span>
205
+ <span class="cline-any cline-yes">1x</span>
206
+ <span class="cline-any cline-yes">3x</span>
370
207
  <span class="cline-any cline-neutral">&nbsp;</span>
371
- <span class="cline-any cline-yes">240x</span>
372
- <span class="cline-any cline-yes">240x</span>
373
208
  <span class="cline-any cline-neutral">&nbsp;</span>
374
209
  <span class="cline-any cline-neutral">&nbsp;</span>
375
210
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -382,80 +217,53 @@
382
217
  <span class="cline-any cline-neutral">&nbsp;</span>
383
218
  <span class="cline-any cline-neutral">&nbsp;</span>
384
219
  <span class="cline-any cline-neutral">&nbsp;</span>
385
- <span class="cline-any cline-yes">130x</span>
386
- <span class="cline-any cline-yes">120x</span>
387
- <span class="cline-any cline-yes">120x</span>
388
- <span class="cline-any cline-yes">120x</span>
389
- <span class="cline-any cline-yes">120x</span>
390
- <span class="cline-any cline-yes">120x</span>
391
- <span class="cline-any cline-yes">120x</span>
392
- <span class="cline-any cline-yes">120x</span>
393
- <span class="cline-any cline-yes">120x</span>
394
- <span class="cline-any cline-yes">120x</span>
395
- <span class="cline-any cline-yes">120x</span>
396
- <span class="cline-any cline-yes">120x</span>
397
- <span class="cline-any cline-yes">120x</span>
398
- <span class="cline-any cline-yes">120x</span>
399
- <span class="cline-any cline-yes">120x</span>
400
- <span class="cline-any cline-yes">120x</span>
401
- <span class="cline-any cline-yes">120x</span>
402
- <span class="cline-any cline-yes">120x</span>
403
- <span class="cline-any cline-yes">120x</span>
404
- <span class="cline-any cline-yes">120x</span>
405
- <span class="cline-any cline-yes">120x</span>
406
220
  <span class="cline-any cline-neutral">&nbsp;</span>
407
- <span class="cline-any cline-yes">120x</span>
408
221
  <span class="cline-any cline-neutral">&nbsp;</span>
409
- <span class="cline-any cline-yes">120x</span>
410
- <span class="cline-any cline-yes">120x</span>
411
- <span class="cline-any cline-yes">130x</span>
222
+ <span class="cline-any cline-yes">1x</span>
223
+ <span class="cline-any cline-yes">137x</span>
224
+ <span class="cline-any cline-yes">137x</span>
225
+ <span class="cline-any cline-yes">137x</span>
226
+ <span class="cline-any cline-yes">137x</span>
227
+ <span class="cline-any cline-yes">137x</span>
228
+ <span class="cline-any cline-yes">137x</span>
229
+ <span class="cline-any cline-yes">137x</span>
230
+ <span class="cline-any cline-neutral">&nbsp;</span>
231
+ <span class="cline-any cline-yes">137x</span>
232
+ <span class="cline-any cline-neutral">&nbsp;</span>
233
+ <span class="cline-any cline-yes">137x</span>
234
+ <span class="cline-any cline-yes">137x</span>
235
+ <span class="cline-any cline-yes">1x</span>
412
236
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/* eslint-disable @typescript-eslint/no-empty-object-type */
413
237
  import type { ServiceLocatorInstanceHolder } from './service-locator-instance-holder.mjs'
414
238
  &nbsp;
239
+ import { BaseInstanceHolderManager } from './base-instance-holder-manager.mjs'
415
240
  import { InjectableScope, InjectableType } from './enums/index.mjs'
416
- import {
417
- ErrorsEnum,
418
- InstanceDestroying,
419
- InstanceExpired,
420
- InstanceNotFound,
421
- } from './errors/index.mjs'
241
+ import { DIError, DIErrorCode } from './errors/index.mjs'
422
242
  import { ServiceLocatorInstanceHolderStatus } from './service-locator-instance-holder.mjs'
423
- import { createDeferred } from './utils/defer.mjs'
424
- &nbsp;
425
- export class ServiceLocatorManager {
426
- private readonly instancesHolders: Map&lt;string, ServiceLocatorInstanceHolder&gt; =
427
- new Map()
428
243
  &nbsp;
429
- constructor(private readonly logger: Console | null = null) {}
244
+ export class ServiceLocatorManager extends BaseInstanceHolderManager {
245
+ constructor(logger: Console | null = null) {
246
+ super(logger)
247
+ }
430
248
  &nbsp;
431
249
  get(
432
250
  name: string,
433
251
  ):
434
- | [InstanceExpired | InstanceDestroying, ServiceLocatorInstanceHolder]
435
- | [InstanceNotFound]
252
+ | [DIError, ServiceLocatorInstanceHolder]
253
+ | [DIError]
436
254
  | [undefined, ServiceLocatorInstanceHolder] {
437
- const holder = this.instancesHolders.get(name)
255
+ const holder = this._holders.get(name)
438
256
  if (holder) {
439
- if (holder.ttl !== Infinity) {
440
- const now = Date.now()
441
- if (now - holder.createdAt &gt; holder.ttl) {
442
- this.logger?.log(
443
- `[ServiceLocatorManager]#getInstanceHolder() TTL expired for ${holder.name}`,
444
- )
445
- return [new InstanceExpired(holder.name), holder]
446
- }
447
- } else if (
448
- holder.status === ServiceLocatorInstanceHolderStatus.Destroying
449
- ) {
257
+ if (holder.status === ServiceLocatorInstanceHolderStatus.Destroying) {
450
258
  this.logger?.log(
451
259
  `[ServiceLocatorManager]#getInstanceHolder() Instance ${holder.name} is destroying`,
452
260
  )
453
- return [new InstanceDestroying(holder.name), holder]
261
+ return [DIError.instanceDestroying(holder.name), holder]
454
262
  } else if (holder.status === ServiceLocatorInstanceHolderStatus.Error) {
455
263
  this.logger?.log(
456
264
  `[ServiceLocatorManager]#getInstanceHolder() Instance ${holder.name} is in error state`,
457
265
  )
458
- return [holder.instance as InstanceNotFound, holder]
266
+ return [holder.instance as DIError, holder]
459
267
  }
460
268
  &nbsp;
461
269
  return [undefined, holder]
@@ -463,86 +271,28 @@ export class ServiceLocatorManager {
463
271
  this.logger?.log(
464
272
  `[ServiceLocatorManager]#getInstanceHolder() Instance ${name} not found`,
465
273
  )
466
- return [new InstanceNotFound(name)]
274
+ return [DIError.instanceNotFound(name)]
467
275
  }
468
276
  }
469
277
  &nbsp;
470
278
  set(name: string, holder: ServiceLocatorInstanceHolder): void {
471
- this.instancesHolders.set(name, holder)
279
+ this._holders.set(name, holder)
472
280
  }
473
281
  &nbsp;
474
- has(
475
- name: string,
476
- ): [InstanceExpired | InstanceDestroying] | [undefined, boolean] {
282
+ has(name: string): [DIError] | [undefined, boolean] {
477
283
  const [error, holder] = this.get(name)
478
284
  if (!error) {
479
285
  return [undefined, true]
480
286
  }
481
- if (
482
- [ErrorsEnum.InstanceExpired, ErrorsEnum.InstanceDestroying].includes(
483
- error.code,
484
- )
485
- ) {
287
+ if (error.code === DIErrorCode.InstanceDestroying) {
486
288
  return [error]
487
289
  }
488
290
  return [undefined, !!holder]
489
291
  }
490
292
  &nbsp;
491
- delete(name: string): boolean {
492
- return this.instancesHolders.delete(name)
493
- }
494
- &nbsp;
495
- filter(
496
- predicate: (
497
- value: ServiceLocatorInstanceHolder&lt;any&gt;,
498
- key: string,
499
- ) =&gt; boolean,
500
- ): Map&lt;string, ServiceLocatorInstanceHolder&gt; {
501
- return new Map(
502
- [...this.instancesHolders].filter(([key, value]) =&gt;
503
- predicate(value, key),
504
- ),
505
- )
506
- }
507
- &nbsp;
508
- /**
509
- * Creates a new holder with Creating status and a deferred creation promise.
510
- * This is useful for creating placeholder holders that can be fulfilled later.
511
- * @param name The name of the instance
512
- * @param type The injectable type
513
- * @param scope The injectable scope
514
- * @param deps Optional set of dependencies
515
- * @param ttl Optional time-to-live in milliseconds (defaults to Infinity)
516
- * @returns A tuple containing the deferred promise and the holder
517
- */
518
- createCreatingHolder&lt;Instance&gt;(
519
- name: string,
520
- type: InjectableType,
521
- scope: InjectableScope,
522
- deps: Set&lt;string&gt; = new Set(),
523
- ttl: number = Infinity,
524
- ): [
525
- ReturnType&lt;typeof createDeferred&lt;[undefined, Instance]&gt;&gt;,
526
- ServiceLocatorInstanceHolder&lt;Instance&gt;,
527
- ] {
528
- const deferred = createDeferred&lt;[undefined, Instance]&gt;()
529
- &nbsp;
530
- const holder: ServiceLocatorInstanceHolder&lt;Instance&gt; = {
531
- status: ServiceLocatorInstanceHolderStatus.Creating,
532
- name,
533
- instance: null,
534
- creationPromise: deferred.promise,
535
- destroyPromise: null,
536
- type,
537
- scope,
538
- deps,
539
- destroyListeners: [],
540
- createdAt: Date.now(),
541
- ttl,
542
- }
293
+ // delete and filter methods are inherited from BaseInstanceHolderManager
543
294
  &nbsp;
544
- return [deferred, holder]
545
- }
295
+ // createCreatingHolder method is inherited from BaseInstanceHolderManager
546
296
  &nbsp;
547
297
  /**
548
298
  * Creates a new holder with Created status and an actual instance.
@@ -552,7 +302,6 @@ export class ServiceLocatorManager {
552
302
  * @param type The injectable type
553
303
  * @param scope The injectable scope
554
304
  * @param deps Optional set of dependencies
555
- * @param ttl Optional time-to-live in milliseconds (defaults to Infinity)
556
305
  * @returns The created holder
557
306
  */
558
307
  storeCreatedHolder&lt;Instance&gt;(
@@ -561,23 +310,10 @@ export class ServiceLocatorManager {
561
310
  type: InjectableType,
562
311
  scope: InjectableScope,
563
312
  deps: Set&lt;string&gt; = new Set(),
564
- ttl: number = Infinity,
565
313
  ): ServiceLocatorInstanceHolder&lt;Instance&gt; {
566
- const holder: ServiceLocatorInstanceHolder&lt;Instance&gt; = {
567
- status: ServiceLocatorInstanceHolderStatus.Created,
568
- name,
569
- instance,
570
- creationPromise: null,
571
- destroyPromise: null,
572
- type,
573
- scope,
574
- deps,
575
- destroyListeners: [],
576
- createdAt: Date.now(),
577
- ttl,
578
- }
314
+ const holder = this.createCreatedHolder(name, instance, type, scope, deps)
579
315
  &nbsp;
580
- this.instancesHolders.set(name, holder)
316
+ this._holders.set(name, holder)
581
317
  &nbsp;
582
318
  return holder
583
319
  }
@@ -589,7 +325,7 @@ export class ServiceLocatorManager {
589
325
  <div class='footer quiet pad2 space-top1 center small'>
590
326
  Code coverage generated by
591
327
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
592
- at 2025-09-19T12:38:51.382Z
328
+ at 2025-09-21T17:47:07.632Z
593
329
  </div>
594
330
  <script src="../prettify.js"></script>
595
331
  <script>