@navios/di 0.3.1 → 0.4.1
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 +67 -6
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +2659 -0
- package/coverage/coverage-final.json +46 -0
- package/coverage/docs/examples/basic-usage.mts.html +376 -0
- package/coverage/docs/examples/factory-pattern.mts.html +1039 -0
- package/coverage/docs/examples/index.html +176 -0
- package/coverage/docs/examples/injection-tokens.mts.html +760 -0
- package/coverage/docs/examples/request-scope-example.mts.html +847 -0
- package/coverage/docs/examples/service-lifecycle.mts.html +1162 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +236 -0
- package/coverage/lib/_tsup-dts-rollup.d.mts.html +2806 -0
- package/coverage/lib/index.d.mts.html +310 -0
- package/coverage/lib/index.html +131 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/coverage/src/container.mts.html +586 -0
- package/coverage/src/decorators/factory.decorator.mts.html +322 -0
- package/coverage/src/decorators/index.html +146 -0
- package/coverage/src/decorators/index.mts.html +91 -0
- package/coverage/src/decorators/injectable.decorator.mts.html +394 -0
- package/coverage/src/enums/index.html +146 -0
- package/coverage/src/enums/index.mts.html +91 -0
- package/coverage/src/enums/injectable-scope.enum.mts.html +127 -0
- package/coverage/src/enums/injectable-type.enum.mts.html +97 -0
- package/coverage/src/errors/errors.enum.mts.html +109 -0
- package/coverage/src/errors/factory-not-found.mts.html +109 -0
- package/coverage/src/errors/factory-token-not-resolved.mts.html +115 -0
- package/coverage/src/errors/index.html +221 -0
- package/coverage/src/errors/index.mts.html +106 -0
- package/coverage/src/errors/instance-destroying.mts.html +109 -0
- package/coverage/src/errors/instance-expired.mts.html +109 -0
- package/coverage/src/errors/instance-not-found.mts.html +109 -0
- package/coverage/src/errors/unknown-error.mts.html +130 -0
- package/coverage/src/event-emitter.mts.html +400 -0
- package/coverage/src/factory-context.mts.html +109 -0
- package/coverage/src/index.html +296 -0
- package/coverage/src/index.mts.html +139 -0
- package/coverage/src/injection-token.mts.html +571 -0
- package/coverage/src/injector.mts.html +133 -0
- package/coverage/src/interfaces/factory.interface.mts.html +121 -0
- package/coverage/src/interfaces/index.html +161 -0
- package/coverage/src/interfaces/index.mts.html +94 -0
- package/coverage/src/interfaces/on-service-destroy.interface.mts.html +94 -0
- package/coverage/src/interfaces/on-service-init.interface.mts.html +94 -0
- package/coverage/src/registry.mts.html +247 -0
- package/coverage/src/request-context-holder.mts.html +607 -0
- package/coverage/src/service-instantiator.mts.html +559 -0
- package/coverage/src/service-locator-event-bus.mts.html +289 -0
- package/coverage/src/service-locator-instance-holder.mts.html +307 -0
- package/coverage/src/service-locator-manager.mts.html +604 -0
- package/coverage/src/service-locator.mts.html +2911 -0
- package/coverage/src/symbols/index.html +131 -0
- package/coverage/src/symbols/index.mts.html +88 -0
- package/coverage/src/symbols/injectable-token.mts.html +88 -0
- package/coverage/src/utils/defer.mts.html +304 -0
- package/coverage/src/utils/get-injectable-token.mts.html +142 -0
- package/coverage/src/utils/get-injectors.mts.html +691 -0
- package/coverage/src/utils/index.html +176 -0
- package/coverage/src/utils/index.mts.html +97 -0
- package/coverage/src/utils/types.mts.html +241 -0
- package/docs/README.md +5 -2
- package/docs/api-reference.md +38 -0
- package/docs/container.md +75 -0
- package/docs/getting-started.md +4 -3
- package/docs/injectable.md +4 -3
- package/docs/migration.md +177 -0
- package/docs/request-contexts.md +364 -0
- package/lib/_tsup-dts-rollup.d.mts +182 -41
- package/lib/_tsup-dts-rollup.d.ts +182 -41
- package/lib/index.d.mts +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +480 -294
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +480 -295
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/defer.spec.mts +166 -0
- package/src/__tests__/errors.spec.mts +61 -0
- package/src/__tests__/event-emitter.spec.mts +163 -0
- package/src/__tests__/get-injectors.spec.mts +70 -0
- package/src/__tests__/registry.spec.mts +335 -0
- package/src/__tests__/request-scope.spec.mts +34 -35
- package/src/__tests__/service-instantiator.spec.mts +408 -0
- package/src/__tests__/service-locator-event-bus.spec.mts +242 -0
- package/src/__tests__/service-locator-manager.spec.mts +370 -0
- package/src/__tests__/unified-api.spec.mts +130 -0
- package/src/base-instance-holder-manager.mts +175 -0
- package/src/event-emitter.mts +5 -5
- package/src/index.mts +1 -0
- package/src/request-context-holder.mts +73 -44
- package/src/service-locator-manager.mts +12 -70
- 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"> </span>
|
|
240
|
+
<span class="cline-any cline-neutral"> </span>
|
|
241
|
+
<span class="cline-any cline-neutral"> </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"> </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
|
+
<span class="cline-any cline-yes">1x</span>
|
|
250
|
+
<span class="cline-any cline-yes">1x</span>
|
|
251
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
256
|
+
<span class="cline-any cline-yes">130x</span>
|
|
257
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
261
|
+
<span class="cline-any cline-neutral"> </span>
|
|
262
|
+
<span class="cline-any cline-neutral"> </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"> </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"> </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"> </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"> </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"> </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>
|
|
370
|
+
<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
|
+
<span class="cline-any cline-neutral"> </span>
|
|
374
|
+
<span class="cline-any cline-neutral"> </span>
|
|
375
|
+
<span class="cline-any cline-neutral"> </span>
|
|
376
|
+
<span class="cline-any cline-neutral"> </span>
|
|
377
|
+
<span class="cline-any cline-neutral"> </span>
|
|
378
|
+
<span class="cline-any cline-neutral"> </span>
|
|
379
|
+
<span class="cline-any cline-neutral"> </span>
|
|
380
|
+
<span class="cline-any cline-neutral"> </span>
|
|
381
|
+
<span class="cline-any cline-neutral"> </span>
|
|
382
|
+
<span class="cline-any cline-neutral"> </span>
|
|
383
|
+
<span class="cline-any cline-neutral"> </span>
|
|
384
|
+
<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
|
+
<span class="cline-any cline-neutral"> </span>
|
|
407
|
+
<span class="cline-any cline-yes">120x</span>
|
|
408
|
+
<span class="cline-any cline-neutral"> </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"> </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
|
+
|
|
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
|
+
|
|
425
|
+
export class ServiceLocatorManager {
|
|
426
|
+
private readonly instancesHolders: Map<string, ServiceLocatorInstanceHolder> =
|
|
427
|
+
new Map()
|
|
428
|
+
|
|
429
|
+
constructor(private readonly logger: Console | null = null) {}
|
|
430
|
+
|
|
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 > 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
|
+
|
|
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
|
+
|
|
470
|
+
set(name: string, holder: ServiceLocatorInstanceHolder): void {
|
|
471
|
+
this.instancesHolders.set(name, holder)
|
|
472
|
+
}
|
|
473
|
+
|
|
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
|
+
|
|
491
|
+
delete(name: string): boolean {
|
|
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
|
+
}
|
|
543
|
+
|
|
544
|
+
return [deferred, holder]
|
|
545
|
+
}
|
|
546
|
+
|
|
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<Instance>(
|
|
559
|
+
name: string,
|
|
560
|
+
instance: Instance,
|
|
561
|
+
type: InjectableType,
|
|
562
|
+
scope: InjectableScope,
|
|
563
|
+
deps: Set<string> = new Set(),
|
|
564
|
+
ttl: number = Infinity,
|
|
565
|
+
): ServiceLocatorInstanceHolder<Instance> {
|
|
566
|
+
const holder: ServiceLocatorInstanceHolder<Instance> = {
|
|
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
|
+
|
|
580
|
+
this.instancesHolders.set(name, holder)
|
|
581
|
+
|
|
582
|
+
return holder
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
</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
|
+
|