@navios/di 0.3.1 → 0.4.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 (96) hide show
  1. package/README.md +67 -6
  2. package/coverage/base.css +224 -0
  3. package/coverage/block-navigation.js +87 -0
  4. package/coverage/clover.xml +2659 -0
  5. package/coverage/coverage-final.json +46 -0
  6. package/coverage/docs/examples/basic-usage.mts.html +376 -0
  7. package/coverage/docs/examples/factory-pattern.mts.html +1039 -0
  8. package/coverage/docs/examples/index.html +176 -0
  9. package/coverage/docs/examples/injection-tokens.mts.html +760 -0
  10. package/coverage/docs/examples/request-scope-example.mts.html +847 -0
  11. package/coverage/docs/examples/service-lifecycle.mts.html +1162 -0
  12. package/coverage/favicon.png +0 -0
  13. package/coverage/index.html +236 -0
  14. package/coverage/lib/_tsup-dts-rollup.d.mts.html +2806 -0
  15. package/coverage/lib/index.d.mts.html +310 -0
  16. package/coverage/lib/index.html +131 -0
  17. package/coverage/prettify.css +1 -0
  18. package/coverage/prettify.js +2 -0
  19. package/coverage/sort-arrow-sprite.png +0 -0
  20. package/coverage/sorter.js +196 -0
  21. package/coverage/src/container.mts.html +586 -0
  22. package/coverage/src/decorators/factory.decorator.mts.html +322 -0
  23. package/coverage/src/decorators/index.html +146 -0
  24. package/coverage/src/decorators/index.mts.html +91 -0
  25. package/coverage/src/decorators/injectable.decorator.mts.html +394 -0
  26. package/coverage/src/enums/index.html +146 -0
  27. package/coverage/src/enums/index.mts.html +91 -0
  28. package/coverage/src/enums/injectable-scope.enum.mts.html +127 -0
  29. package/coverage/src/enums/injectable-type.enum.mts.html +97 -0
  30. package/coverage/src/errors/errors.enum.mts.html +109 -0
  31. package/coverage/src/errors/factory-not-found.mts.html +109 -0
  32. package/coverage/src/errors/factory-token-not-resolved.mts.html +115 -0
  33. package/coverage/src/errors/index.html +221 -0
  34. package/coverage/src/errors/index.mts.html +106 -0
  35. package/coverage/src/errors/instance-destroying.mts.html +109 -0
  36. package/coverage/src/errors/instance-expired.mts.html +109 -0
  37. package/coverage/src/errors/instance-not-found.mts.html +109 -0
  38. package/coverage/src/errors/unknown-error.mts.html +130 -0
  39. package/coverage/src/event-emitter.mts.html +400 -0
  40. package/coverage/src/factory-context.mts.html +109 -0
  41. package/coverage/src/index.html +296 -0
  42. package/coverage/src/index.mts.html +139 -0
  43. package/coverage/src/injection-token.mts.html +571 -0
  44. package/coverage/src/injector.mts.html +133 -0
  45. package/coverage/src/interfaces/factory.interface.mts.html +121 -0
  46. package/coverage/src/interfaces/index.html +161 -0
  47. package/coverage/src/interfaces/index.mts.html +94 -0
  48. package/coverage/src/interfaces/on-service-destroy.interface.mts.html +94 -0
  49. package/coverage/src/interfaces/on-service-init.interface.mts.html +94 -0
  50. package/coverage/src/registry.mts.html +247 -0
  51. package/coverage/src/request-context-holder.mts.html +607 -0
  52. package/coverage/src/service-instantiator.mts.html +559 -0
  53. package/coverage/src/service-locator-event-bus.mts.html +289 -0
  54. package/coverage/src/service-locator-instance-holder.mts.html +307 -0
  55. package/coverage/src/service-locator-manager.mts.html +604 -0
  56. package/coverage/src/service-locator.mts.html +2911 -0
  57. package/coverage/src/symbols/index.html +131 -0
  58. package/coverage/src/symbols/index.mts.html +88 -0
  59. package/coverage/src/symbols/injectable-token.mts.html +88 -0
  60. package/coverage/src/utils/defer.mts.html +304 -0
  61. package/coverage/src/utils/get-injectable-token.mts.html +142 -0
  62. package/coverage/src/utils/get-injectors.mts.html +691 -0
  63. package/coverage/src/utils/index.html +176 -0
  64. package/coverage/src/utils/index.mts.html +97 -0
  65. package/coverage/src/utils/types.mts.html +241 -0
  66. package/docs/README.md +5 -2
  67. package/docs/api-reference.md +38 -0
  68. package/docs/container.md +75 -0
  69. package/docs/getting-started.md +4 -3
  70. package/docs/injectable.md +4 -3
  71. package/docs/migration.md +177 -0
  72. package/docs/request-contexts.md +364 -0
  73. package/lib/_tsup-dts-rollup.d.mts +177 -36
  74. package/lib/_tsup-dts-rollup.d.ts +177 -36
  75. package/lib/index.d.mts +1 -0
  76. package/lib/index.d.ts +1 -0
  77. package/lib/index.js +480 -294
  78. package/lib/index.js.map +1 -1
  79. package/lib/index.mjs +480 -295
  80. package/lib/index.mjs.map +1 -1
  81. package/package.json +1 -1
  82. package/src/__tests__/defer.spec.mts +166 -0
  83. package/src/__tests__/errors.spec.mts +61 -0
  84. package/src/__tests__/event-emitter.spec.mts +163 -0
  85. package/src/__tests__/get-injectors.spec.mts +70 -0
  86. package/src/__tests__/registry.spec.mts +335 -0
  87. package/src/__tests__/request-scope.spec.mts +34 -35
  88. package/src/__tests__/service-instantiator.spec.mts +408 -0
  89. package/src/__tests__/service-locator-event-bus.spec.mts +242 -0
  90. package/src/__tests__/service-locator-manager.spec.mts +370 -0
  91. package/src/__tests__/unified-api.spec.mts +130 -0
  92. package/src/base-instance-holder-manager.mts +175 -0
  93. package/src/index.mts +1 -0
  94. package/src/request-context-holder.mts +73 -44
  95. package/src/service-locator-manager.mts +12 -70
  96. package/src/service-locator.mts +421 -226
@@ -0,0 +1,604 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/service-locator-manager.mts</title>
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" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> service-locator-manager.mts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">100% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>121/121</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">100% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>23/23</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>9/9</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">100% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>121/121</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
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>
240
+ <span class="cline-any cline-neutral">&nbsp;</span>
241
+ <span class="cline-any cline-neutral">&nbsp;</span>
242
+ <span class="cline-any cline-yes">1x</span>
243
+ <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
+ <span class="cline-any cline-yes">1x</span>
250
+ <span class="cline-any cline-yes">1x</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <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>
257
+ <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>
260
+ <span class="cline-any cline-neutral">&nbsp;</span>
261
+ <span class="cline-any cline-neutral">&nbsp;</span>
262
+ <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>
270
+ <span class="cline-any cline-yes">2x</span>
271
+ <span class="cline-any cline-yes">2x</span>
272
+ <span class="cline-any cline-yes">2x</span>
273
+ <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>
296
+ <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>
300
+ <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
+ <span class="cline-any cline-yes">1x</span>
307
+ <span class="cline-any cline-yes">1x</span>
308
+ <span class="cline-any cline-yes">3x</span>
309
+ <span class="cline-any cline-yes">3x</span>
310
+ <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
+ <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>
370
+ <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
+ <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-neutral">&nbsp;</span>
381
+ <span class="cline-any cline-neutral">&nbsp;</span>
382
+ <span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-neutral">&nbsp;</span>
384
+ <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
+ <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-yes">120x</span>
408
+ <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>
412
+ <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
+ import type { ServiceLocatorInstanceHolder } from './service-locator-instance-holder.mjs'
414
+ &nbsp;
415
+ import { InjectableScope, InjectableType } from './enums/index.mjs'
416
+ import {
417
+ ErrorsEnum,
418
+ InstanceDestroying,
419
+ InstanceExpired,
420
+ InstanceNotFound,
421
+ } from './errors/index.mjs'
422
+ 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
+ &nbsp;
429
+ constructor(private readonly logger: Console | null = null) {}
430
+ &nbsp;
431
+ get(
432
+ name: string,
433
+ ):
434
+ | [InstanceExpired | InstanceDestroying, ServiceLocatorInstanceHolder]
435
+ | [InstanceNotFound]
436
+ | [undefined, ServiceLocatorInstanceHolder] {
437
+ const holder = this.instancesHolders.get(name)
438
+ 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
+ ) {
450
+ this.logger?.log(
451
+ `[ServiceLocatorManager]#getInstanceHolder() Instance ${holder.name} is destroying`,
452
+ )
453
+ return [new InstanceDestroying(holder.name), holder]
454
+ } else if (holder.status === ServiceLocatorInstanceHolderStatus.Error) {
455
+ this.logger?.log(
456
+ `[ServiceLocatorManager]#getInstanceHolder() Instance ${holder.name} is in error state`,
457
+ )
458
+ return [holder.instance as InstanceNotFound, holder]
459
+ }
460
+ &nbsp;
461
+ return [undefined, holder]
462
+ } else {
463
+ this.logger?.log(
464
+ `[ServiceLocatorManager]#getInstanceHolder() Instance ${name} not found`,
465
+ )
466
+ return [new InstanceNotFound(name)]
467
+ }
468
+ }
469
+ &nbsp;
470
+ set(name: string, holder: ServiceLocatorInstanceHolder): void {
471
+ this.instancesHolders.set(name, holder)
472
+ }
473
+ &nbsp;
474
+ has(
475
+ name: string,
476
+ ): [InstanceExpired | InstanceDestroying] | [undefined, boolean] {
477
+ const [error, holder] = this.get(name)
478
+ if (!error) {
479
+ return [undefined, true]
480
+ }
481
+ if (
482
+ [ErrorsEnum.InstanceExpired, ErrorsEnum.InstanceDestroying].includes(
483
+ error.code,
484
+ )
485
+ ) {
486
+ return [error]
487
+ }
488
+ return [undefined, !!holder]
489
+ }
490
+ &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
+ }
543
+ &nbsp;
544
+ return [deferred, holder]
545
+ }
546
+ &nbsp;
547
+ /**
548
+ * Creates a new holder with Created status and an actual instance.
549
+ * This is useful for creating holders that already have their instance ready.
550
+ * @param name The name of the instance
551
+ * @param instance The actual instance to store
552
+ * @param type The injectable type
553
+ * @param scope The injectable scope
554
+ * @param deps Optional set of dependencies
555
+ * @param ttl Optional time-to-live in milliseconds (defaults to Infinity)
556
+ * @returns The created holder
557
+ */
558
+ storeCreatedHolder&lt;Instance&gt;(
559
+ name: string,
560
+ instance: Instance,
561
+ type: InjectableType,
562
+ scope: InjectableScope,
563
+ deps: Set&lt;string&gt; = new Set(),
564
+ ttl: number = Infinity,
565
+ ): 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
+ }
579
+ &nbsp;
580
+ this.instancesHolders.set(name, holder)
581
+ &nbsp;
582
+ return holder
583
+ }
584
+ }
585
+ &nbsp;</pre></td></tr></table></pre>
586
+
587
+ <div class='push'></div><!-- for sticky footer -->
588
+ </div><!-- /wrapper -->
589
+ <div class='footer quiet pad2 space-top1 center small'>
590
+ Code coverage generated by
591
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
592
+ at 2025-09-19T12:38:51.382Z
593
+ </div>
594
+ <script src="../prettify.js"></script>
595
+ <script>
596
+ window.onload = function () {
597
+ prettyPrint();
598
+ };
599
+ </script>
600
+ <script src="../sorter.js"></script>
601
+ <script src="../block-navigation.js"></script>
602
+ </body>
603
+ </html>
604
+