@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.
- package/README.md +211 -1
- package/coverage/clover.xml +1912 -1277
- package/coverage/coverage-final.json +37 -28
- package/coverage/docs/examples/basic-usage.mts.html +1 -1
- package/coverage/docs/examples/factory-pattern.mts.html +1 -1
- package/coverage/docs/examples/index.html +1 -1
- package/coverage/docs/examples/injection-tokens.mts.html +1 -1
- package/coverage/docs/examples/request-scope-example.mts.html +1 -1
- package/coverage/docs/examples/service-lifecycle.mts.html +1 -1
- package/coverage/index.html +71 -41
- package/coverage/lib/_tsup-dts-rollup.d.mts.html +682 -43
- package/coverage/lib/index.d.mts.html +7 -4
- package/coverage/lib/index.html +5 -5
- package/coverage/lib/testing/index.d.mts.html +91 -0
- package/coverage/lib/testing/index.html +116 -0
- package/coverage/src/base-instance-holder-manager.mts.html +589 -0
- package/coverage/src/container.mts.html +257 -74
- package/coverage/src/decorators/factory.decorator.mts.html +1 -1
- package/coverage/src/decorators/index.html +1 -1
- package/coverage/src/decorators/index.mts.html +1 -1
- package/coverage/src/decorators/injectable.decorator.mts.html +20 -20
- package/coverage/src/enums/index.html +1 -1
- package/coverage/src/enums/index.mts.html +1 -1
- package/coverage/src/enums/injectable-scope.enum.mts.html +1 -1
- package/coverage/src/enums/injectable-type.enum.mts.html +1 -1
- package/coverage/src/errors/di-error.mts.html +292 -0
- package/coverage/src/errors/errors.enum.mts.html +30 -21
- package/coverage/src/errors/factory-not-found.mts.html +31 -22
- package/coverage/src/errors/factory-token-not-resolved.mts.html +29 -26
- package/coverage/src/errors/index.html +56 -41
- package/coverage/src/errors/index.mts.html +15 -9
- package/coverage/src/errors/instance-destroying.mts.html +31 -22
- package/coverage/src/errors/instance-expired.mts.html +31 -22
- package/coverage/src/errors/instance-not-found.mts.html +31 -22
- package/coverage/src/errors/unknown-error.mts.html +31 -43
- package/coverage/src/event-emitter.mts.html +14 -14
- package/coverage/src/factory-context.mts.html +1 -1
- package/coverage/src/index.html +121 -46
- package/coverage/src/index.mts.html +7 -4
- package/coverage/src/injection-token.mts.html +28 -28
- package/coverage/src/injector.mts.html +1 -1
- package/coverage/src/instance-resolver.mts.html +1762 -0
- package/coverage/src/interfaces/factory.interface.mts.html +1 -1
- package/coverage/src/interfaces/index.html +1 -1
- package/coverage/src/interfaces/index.mts.html +1 -1
- package/coverage/src/interfaces/on-service-destroy.interface.mts.html +1 -1
- package/coverage/src/interfaces/on-service-init.interface.mts.html +1 -1
- package/coverage/src/registry.mts.html +28 -28
- package/coverage/src/request-context-holder.mts.html +183 -102
- package/coverage/src/request-context-manager.mts.html +532 -0
- package/coverage/src/service-instantiator.mts.html +49 -49
- package/coverage/src/service-invalidator.mts.html +1372 -0
- package/coverage/src/service-locator-event-bus.mts.html +48 -48
- package/coverage/src/service-locator-instance-holder.mts.html +2 -14
- package/coverage/src/service-locator-manager.mts.html +71 -335
- package/coverage/src/service-locator.mts.html +240 -2328
- package/coverage/src/symbols/index.html +1 -1
- package/coverage/src/symbols/index.mts.html +1 -1
- package/coverage/src/symbols/injectable-token.mts.html +1 -1
- package/coverage/src/testing/index.html +131 -0
- package/coverage/src/testing/index.mts.html +88 -0
- package/coverage/src/testing/test-container.mts.html +445 -0
- package/coverage/src/token-processor.mts.html +607 -0
- package/coverage/src/utils/defer.mts.html +28 -214
- package/coverage/src/utils/get-injectable-token.mts.html +7 -7
- package/coverage/src/utils/get-injectors.mts.html +99 -99
- package/coverage/src/utils/index.html +15 -15
- package/coverage/src/utils/index.mts.html +4 -7
- package/coverage/src/utils/types.mts.html +1 -1
- package/docs/injectable.md +51 -11
- package/docs/scopes.md +63 -29
- package/lib/_tsup-dts-rollup.d.mts +376 -213
- package/lib/_tsup-dts-rollup.d.ts +376 -213
- package/lib/{chunk-3NLYPYBY.mjs → chunk-44F3LXW5.mjs} +1021 -605
- package/lib/chunk-44F3LXW5.mjs.map +1 -0
- package/lib/index.d.mts +6 -4
- package/lib/index.d.ts +6 -4
- package/lib/index.js +1192 -776
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +2 -2
- package/lib/testing/index.js +1258 -840
- package/lib/testing/index.js.map +1 -1
- package/lib/testing/index.mjs +1 -1
- package/package.json +1 -1
- package/src/__tests__/container.spec.mts +47 -13
- package/src/__tests__/errors.spec.mts +53 -27
- package/src/__tests__/injectable.spec.mts +73 -0
- package/src/__tests__/request-scope.spec.mts +0 -2
- package/src/__tests__/service-locator-manager.spec.mts +12 -82
- package/src/__tests__/service-locator.spec.mts +1009 -1
- package/src/__type-tests__/inject.spec-d.mts +30 -7
- package/src/__type-tests__/injectable.spec-d.mts +76 -37
- package/src/base-instance-holder-manager.mts +2 -9
- package/src/container.mts +61 -9
- package/src/decorators/injectable.decorator.mts +29 -5
- package/src/errors/di-error.mts +69 -0
- package/src/errors/index.mts +9 -7
- package/src/injection-token.mts +1 -0
- package/src/injector.mts +2 -0
- package/src/instance-resolver.mts +559 -0
- package/src/request-context-holder.mts +0 -2
- package/src/request-context-manager.mts +149 -0
- package/src/service-invalidator.mts +429 -0
- package/src/service-locator-instance-holder.mts +0 -4
- package/src/service-locator-manager.mts +10 -40
- package/src/service-locator.mts +86 -782
- package/src/token-processor.mts +174 -0
- package/src/utils/get-injectors.mts +161 -24
- package/src/utils/index.mts +0 -1
- package/src/utils/types.mts +12 -8
- package/lib/chunk-3NLYPYBY.mjs.map +0 -1
- package/src/__tests__/defer.spec.mts +0 -166
- package/src/errors/errors.enum.mts +0 -8
- package/src/errors/factory-not-found.mts +0 -8
- package/src/errors/factory-token-not-resolved.mts +0 -10
- package/src/errors/instance-destroying.mts +0 -8
- package/src/errors/instance-expired.mts +0 -8
- package/src/errors/instance-not-found.mts +0 -8
- package/src/errors/unknown-error.mts +0 -15
- 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'>
|
|
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'>
|
|
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'>
|
|
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'>
|
|
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"> </span>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
240
152
|
<span class="cline-any cline-neutral"> </span>
|
|
241
153
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
245
|
-
<span class="cline-any cline-neutral"> </span>
|
|
246
|
-
<span class="cline-any cline-neutral"> </span>
|
|
247
|
-
<span class="cline-any cline-neutral"> </span>
|
|
248
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
252
159
|
<span class="cline-any cline-yes">1x</span>
|
|
253
|
-
<span class="cline-any cline-yes">
|
|
254
|
-
<span class="cline-any cline-yes">
|
|
255
|
-
<span class="cline-any cline-
|
|
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"> </span>
|
|
258
|
-
<span class="cline-any cline-yes">
|
|
259
|
-
<span class="cline-any cline-yes">
|
|
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"> </span>
|
|
261
167
|
<span class="cline-any cline-neutral"> </span>
|
|
262
168
|
<span class="cline-any cline-neutral"> </span>
|
|
263
|
-
<span class="cline-any cline-yes">
|
|
264
|
-
<span class="cline-any cline-yes">
|
|
265
|
-
<span class="cline-any cline-yes">
|
|
266
|
-
<span class="cline-any cline-yes">
|
|
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">
|
|
275
|
-
<span class="cline-any cline-yes">
|
|
276
|
-
<span class="cline-any cline-yes">
|
|
277
|
-
<span class="cline-any cline-yes">
|
|
278
|
-
<span class="cline-any cline-yes">
|
|
279
|
-
<span class="cline-any cline-yes">
|
|
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"> </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"> </span>
|
|
297
|
-
<span class="cline-any cline-yes">
|
|
298
|
-
<span class="cline-any cline-yes">
|
|
299
|
-
<span class="cline-any cline-yes">
|
|
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"> </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"> </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">
|
|
317
|
-
<span class="cline-any cline-
|
|
318
|
-
<span class="cline-any cline-yes">
|
|
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"> </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"> </span>
|
|
325
|
-
<span class="cline-any cline-neutral"> </span>
|
|
326
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
335
|
-
<span class="cline-any cline-neutral"> </span>
|
|
336
|
-
<span class="cline-any cline-neutral"> </span>
|
|
337
|
-
<span class="cline-any cline-neutral"> </span>
|
|
338
|
-
<span class="cline-any cline-neutral"> </span>
|
|
339
|
-
<span class="cline-any cline-neutral"> </span>
|
|
340
|
-
<span class="cline-any cline-neutral"> </span>
|
|
341
|
-
<span class="cline-any cline-neutral"> </span>
|
|
342
|
-
<span class="cline-any cline-neutral"> </span>
|
|
343
|
-
<span class="cline-any cline-neutral"> </span>
|
|
344
|
-
<span class="cline-any cline-neutral"> </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"> </span>
|
|
352
|
-
<span class="cline-any cline-neutral"> </span>
|
|
353
|
-
<span class="cline-any cline-neutral"> </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"> </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"> </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"> </span>
|
|
374
209
|
<span class="cline-any cline-neutral"> </span>
|
|
375
210
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -382,80 +217,53 @@
|
|
|
382
217
|
<span class="cline-any cline-neutral"> </span>
|
|
383
218
|
<span class="cline-any cline-neutral"> </span>
|
|
384
219
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
407
|
-
<span class="cline-any cline-yes">120x</span>
|
|
408
221
|
<span class="cline-any cline-neutral"> </span>
|
|
409
|
-
<span class="cline-any cline-yes">
|
|
410
|
-
<span class="cline-any cline-yes">
|
|
411
|
-
<span class="cline-any cline-yes">
|
|
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"> </span>
|
|
231
|
+
<span class="cline-any cline-yes">137x</span>
|
|
232
|
+
<span class="cline-any cline-neutral"> </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"> </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
|
|
|
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
|
-
|
|
425
|
-
export class ServiceLocatorManager {
|
|
426
|
-
private readonly instancesHolders: Map<string, ServiceLocatorInstanceHolder> =
|
|
427
|
-
new Map()
|
|
428
243
|
|
|
429
|
-
|
|
244
|
+
export class ServiceLocatorManager extends BaseInstanceHolderManager {
|
|
245
|
+
constructor(logger: Console | null = null) {
|
|
246
|
+
super(logger)
|
|
247
|
+
}
|
|
430
248
|
|
|
431
249
|
get(
|
|
432
250
|
name: string,
|
|
433
251
|
):
|
|
434
|
-
| [
|
|
435
|
-
| [
|
|
252
|
+
| [DIError, ServiceLocatorInstanceHolder]
|
|
253
|
+
| [DIError]
|
|
436
254
|
| [undefined, ServiceLocatorInstanceHolder] {
|
|
437
|
-
const holder = this.
|
|
255
|
+
const holder = this._holders.get(name)
|
|
438
256
|
if (holder) {
|
|
439
|
-
if (holder.
|
|
440
|
-
const now = Date.now()
|
|
441
|
-
if (now - holder.createdAt > 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 [
|
|
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
|
|
266
|
+
return [holder.instance as DIError, holder]
|
|
459
267
|
}
|
|
460
268
|
|
|
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 [
|
|
274
|
+
return [DIError.instanceNotFound(name)]
|
|
467
275
|
}
|
|
468
276
|
}
|
|
469
277
|
|
|
470
278
|
set(name: string, holder: ServiceLocatorInstanceHolder): void {
|
|
471
|
-
this.
|
|
279
|
+
this._holders.set(name, holder)
|
|
472
280
|
}
|
|
473
281
|
|
|
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
|
|
|
491
|
-
delete
|
|
492
|
-
return this.instancesHolders.delete(name)
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
filter(
|
|
496
|
-
predicate: (
|
|
497
|
-
value: ServiceLocatorInstanceHolder<any>,
|
|
498
|
-
key: string,
|
|
499
|
-
) => boolean,
|
|
500
|
-
): Map<string, ServiceLocatorInstanceHolder> {
|
|
501
|
-
return new Map(
|
|
502
|
-
[...this.instancesHolders].filter(([key, value]) =>
|
|
503
|
-
predicate(value, key),
|
|
504
|
-
),
|
|
505
|
-
)
|
|
506
|
-
}
|
|
507
|
-
|
|
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<Instance>(
|
|
519
|
-
name: string,
|
|
520
|
-
type: InjectableType,
|
|
521
|
-
scope: InjectableScope,
|
|
522
|
-
deps: Set<string> = new Set(),
|
|
523
|
-
ttl: number = Infinity,
|
|
524
|
-
): [
|
|
525
|
-
ReturnType<typeof createDeferred<[undefined, Instance]>>,
|
|
526
|
-
ServiceLocatorInstanceHolder<Instance>,
|
|
527
|
-
] {
|
|
528
|
-
const deferred = createDeferred<[undefined, Instance]>()
|
|
529
|
-
|
|
530
|
-
const holder: ServiceLocatorInstanceHolder<Instance> = {
|
|
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
|
|
|
544
|
-
|
|
545
|
-
}
|
|
295
|
+
// createCreatingHolder method is inherited from BaseInstanceHolderManager
|
|
546
296
|
|
|
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<Instance>(
|
|
@@ -561,23 +310,10 @@ export class ServiceLocatorManager {
|
|
|
561
310
|
type: InjectableType,
|
|
562
311
|
scope: InjectableScope,
|
|
563
312
|
deps: Set<string> = new Set(),
|
|
564
|
-
ttl: number = Infinity,
|
|
565
313
|
): ServiceLocatorInstanceHolder<Instance> {
|
|
566
|
-
const holder
|
|
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
|
|
|
580
|
-
this.
|
|
316
|
+
this._holders.set(name, holder)
|
|
581
317
|
|
|
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-
|
|
328
|
+
at 2025-09-21T17:47:07.632Z
|
|
593
329
|
</div>
|
|
594
330
|
<script src="../prettify.js"></script>
|
|
595
331
|
<script>
|