@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,559 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/service-instantiator.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-instantiator.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'>110/110</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">92.3% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>36/39</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'>4/4</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'>110/110</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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
225
|
+
<span class="cline-any cline-neutral"> </span>
|
|
226
|
+
<span class="cline-any cline-neutral"> </span>
|
|
227
|
+
<span class="cline-any cline-neutral"> </span>
|
|
228
|
+
<span class="cline-any cline-yes">1x</span>
|
|
229
|
+
<span class="cline-any cline-neutral"> </span>
|
|
230
|
+
<span class="cline-any cline-neutral"> </span>
|
|
231
|
+
<span class="cline-any cline-neutral"> </span>
|
|
232
|
+
<span class="cline-any cline-neutral"> </span>
|
|
233
|
+
<span class="cline-any cline-neutral"> </span>
|
|
234
|
+
<span class="cline-any cline-yes">1x</span>
|
|
235
|
+
<span class="cline-any cline-yes">1x</span>
|
|
236
|
+
<span class="cline-any cline-neutral"> </span>
|
|
237
|
+
<span class="cline-any cline-neutral"> </span>
|
|
238
|
+
<span class="cline-any cline-neutral"> </span>
|
|
239
|
+
<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-neutral"> </span>
|
|
243
|
+
<span class="cline-any cline-neutral"> </span>
|
|
244
|
+
<span class="cline-any cline-yes">1x</span>
|
|
245
|
+
<span class="cline-any cline-yes">253x</span>
|
|
246
|
+
<span class="cline-any cline-yes">253x</span>
|
|
247
|
+
<span class="cline-any cline-yes">253x</span>
|
|
248
|
+
<span class="cline-any cline-yes">253x</span>
|
|
249
|
+
<span class="cline-any cline-yes">253x</span>
|
|
250
|
+
<span class="cline-any cline-yes">253x</span>
|
|
251
|
+
<span class="cline-any cline-yes">253x</span>
|
|
252
|
+
<span class="cline-any cline-yes">216x</span>
|
|
253
|
+
<span class="cline-any cline-yes">253x</span>
|
|
254
|
+
<span class="cline-any cline-yes">36x</span>
|
|
255
|
+
<span class="cline-any cline-yes">253x</span>
|
|
256
|
+
<span class="cline-any cline-yes">1x</span>
|
|
257
|
+
<span class="cline-any cline-yes">1x</span>
|
|
258
|
+
<span class="cline-any cline-yes">1x</span>
|
|
259
|
+
<span class="cline-any cline-yes">253x</span>
|
|
260
|
+
<span class="cline-any cline-yes">253x</span>
|
|
261
|
+
<span class="cline-any cline-yes">1x</span>
|
|
262
|
+
<span class="cline-any cline-yes">1x</span>
|
|
263
|
+
<span class="cline-any cline-yes">253x</span>
|
|
264
|
+
<span class="cline-any cline-neutral"> </span>
|
|
265
|
+
<span class="cline-any cline-neutral"> </span>
|
|
266
|
+
<span class="cline-any cline-neutral"> </span>
|
|
267
|
+
<span class="cline-any cline-neutral"> </span>
|
|
268
|
+
<span class="cline-any cline-neutral"> </span>
|
|
269
|
+
<span class="cline-any cline-neutral"> </span>
|
|
270
|
+
<span class="cline-any cline-neutral"> </span>
|
|
271
|
+
<span class="cline-any cline-neutral"> </span>
|
|
272
|
+
<span class="cline-any cline-yes">1x</span>
|
|
273
|
+
<span class="cline-any cline-yes">216x</span>
|
|
274
|
+
<span class="cline-any cline-yes">216x</span>
|
|
275
|
+
<span class="cline-any cline-yes">216x</span>
|
|
276
|
+
<span class="cline-any cline-yes">216x</span>
|
|
277
|
+
<span class="cline-any cline-yes">216x</span>
|
|
278
|
+
<span class="cline-any cline-yes">216x</span>
|
|
279
|
+
<span class="cline-any cline-yes">244x</span>
|
|
280
|
+
<span class="cline-any cline-yes">244x</span>
|
|
281
|
+
<span class="cline-any cline-yes">244x</span>
|
|
282
|
+
<span class="cline-any cline-yes">244x</span>
|
|
283
|
+
<span class="cline-any cline-yes">216x</span>
|
|
284
|
+
<span class="cline-any cline-neutral"> </span>
|
|
285
|
+
<span class="cline-any cline-yes">216x</span>
|
|
286
|
+
<span class="cline-any cline-yes">216x</span>
|
|
287
|
+
<span class="cline-any cline-yes">29x</span>
|
|
288
|
+
<span class="cline-any cline-yes">29x</span>
|
|
289
|
+
<span class="cline-any cline-yes">1x</span>
|
|
290
|
+
<span class="cline-any cline-yes">1x</span>
|
|
291
|
+
<span class="cline-any cline-yes">1x</span>
|
|
292
|
+
<span class="cline-any cline-yes">1x</span>
|
|
293
|
+
<span class="cline-any cline-yes">28x</span>
|
|
294
|
+
<span class="cline-any cline-yes">28x</span>
|
|
295
|
+
<span class="cline-any cline-yes">28x</span>
|
|
296
|
+
<span class="cline-any cline-yes">28x</span>
|
|
297
|
+
<span class="cline-any cline-neutral"> </span>
|
|
298
|
+
<span class="cline-any cline-yes">216x</span>
|
|
299
|
+
<span class="cline-any cline-yes">1x</span>
|
|
300
|
+
<span class="cline-any cline-neutral"> </span>
|
|
301
|
+
<span class="cline-any cline-neutral"> </span>
|
|
302
|
+
<span class="cline-any cline-neutral"> </span>
|
|
303
|
+
<span class="cline-any cline-yes">1x</span>
|
|
304
|
+
<span class="cline-any cline-yes">1x</span>
|
|
305
|
+
<span class="cline-any cline-yes">1x</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-neutral"> </span>
|
|
309
|
+
<span class="cline-any cline-neutral"> </span>
|
|
310
|
+
<span class="cline-any cline-yes">216x</span>
|
|
311
|
+
<span class="cline-any cline-yes">1x</span>
|
|
312
|
+
<span class="cline-any cline-yes">1x</span>
|
|
313
|
+
<span class="cline-any cline-yes">216x</span>
|
|
314
|
+
<span class="cline-any cline-yes">2x</span>
|
|
315
|
+
<span class="cline-any cline-yes">2x</span>
|
|
316
|
+
<span class="cline-any cline-yes">2x</span>
|
|
317
|
+
<span class="cline-any cline-yes">2x</span>
|
|
318
|
+
<span class="cline-any cline-neutral"> </span>
|
|
319
|
+
<span class="cline-any cline-yes">212x</span>
|
|
320
|
+
<span class="cline-any cline-yes">216x</span>
|
|
321
|
+
<span class="cline-any cline-yes">4x</span>
|
|
322
|
+
<span class="cline-any cline-yes">4x</span>
|
|
323
|
+
<span class="cline-any cline-yes">216x</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-neutral"> </span>
|
|
328
|
+
<span class="cline-any cline-neutral"> </span>
|
|
329
|
+
<span class="cline-any cline-neutral"> </span>
|
|
330
|
+
<span class="cline-any cline-neutral"> </span>
|
|
331
|
+
<span class="cline-any cline-neutral"> </span>
|
|
332
|
+
<span class="cline-any cline-yes">1x</span>
|
|
333
|
+
<span class="cline-any cline-yes">36x</span>
|
|
334
|
+
<span class="cline-any cline-yes">36x</span>
|
|
335
|
+
<span class="cline-any cline-yes">36x</span>
|
|
336
|
+
<span class="cline-any cline-yes">36x</span>
|
|
337
|
+
<span class="cline-any cline-yes">36x</span>
|
|
338
|
+
<span class="cline-any cline-yes">36x</span>
|
|
339
|
+
<span class="cline-any cline-yes">38x</span>
|
|
340
|
+
<span class="cline-any cline-yes">38x</span>
|
|
341
|
+
<span class="cline-any cline-yes">38x</span>
|
|
342
|
+
<span class="cline-any cline-yes">38x</span>
|
|
343
|
+
<span class="cline-any cline-yes">36x</span>
|
|
344
|
+
<span class="cline-any cline-neutral"> </span>
|
|
345
|
+
<span class="cline-any cline-yes">36x</span>
|
|
346
|
+
<span class="cline-any cline-yes">36x</span>
|
|
347
|
+
<span class="cline-any cline-yes">3x</span>
|
|
348
|
+
<span class="cline-any cline-yes">3x</span>
|
|
349
|
+
<span class="cline-any cline-yes">1x</span>
|
|
350
|
+
<span class="cline-any cline-yes">1x</span>
|
|
351
|
+
<span class="cline-any cline-yes">1x</span>
|
|
352
|
+
<span class="cline-any cline-yes">1x</span>
|
|
353
|
+
<span class="cline-any cline-yes">2x</span>
|
|
354
|
+
<span class="cline-any cline-yes">2x</span>
|
|
355
|
+
<span class="cline-any cline-yes">2x</span>
|
|
356
|
+
<span class="cline-any cline-yes">2x</span>
|
|
357
|
+
<span class="cline-any cline-neutral"> </span>
|
|
358
|
+
<span class="cline-any cline-yes">36x</span>
|
|
359
|
+
<span class="cline-any cline-yes">1x</span>
|
|
360
|
+
<span class="cline-any cline-neutral"> </span>
|
|
361
|
+
<span class="cline-any cline-neutral"> </span>
|
|
362
|
+
<span class="cline-any cline-neutral"> </span>
|
|
363
|
+
<span class="cline-any cline-yes">1x</span>
|
|
364
|
+
<span class="cline-any cline-yes">1x</span>
|
|
365
|
+
<span class="cline-any cline-yes">1x</span>
|
|
366
|
+
<span class="cline-any cline-yes">1x</span>
|
|
367
|
+
<span class="cline-any cline-yes">1x</span>
|
|
368
|
+
<span class="cline-any cline-neutral"> </span>
|
|
369
|
+
<span class="cline-any cline-yes">36x</span>
|
|
370
|
+
<span class="cline-any cline-yes">1x</span>
|
|
371
|
+
<span class="cline-any cline-yes">1x</span>
|
|
372
|
+
<span class="cline-any cline-yes">1x</span>
|
|
373
|
+
<span class="cline-any cline-yes">1x</span>
|
|
374
|
+
<span class="cline-any cline-neutral"> </span>
|
|
375
|
+
<span class="cline-any cline-yes">33x</span>
|
|
376
|
+
<span class="cline-any cline-yes">32x</span>
|
|
377
|
+
<span class="cline-any cline-yes">36x</span>
|
|
378
|
+
<span class="cline-any cline-yes">4x</span>
|
|
379
|
+
<span class="cline-any cline-yes">4x</span>
|
|
380
|
+
<span class="cline-any cline-yes">36x</span>
|
|
381
|
+
<span class="cline-any cline-yes">1x</span>
|
|
382
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import type { FactoryContext } from './factory-context.mjs'
|
|
383
|
+
import type { FactoryRecord } from './registry.mjs'
|
|
384
|
+
import type { Injectors } from './utils/get-injectors.mjs'
|
|
385
|
+
|
|
386
|
+
import { InjectableType } from './enums/index.mjs'
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* ServiceInstantiator handles the instantiation of services based on registry records.
|
|
390
|
+
* It replaces the hard-coded logic in Injectable and Factory decorators.
|
|
391
|
+
*/
|
|
392
|
+
export class ServiceInstantiator {
|
|
393
|
+
constructor(private readonly injectors: Injectors) {}
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* Instantiates a service based on its registry record.
|
|
397
|
+
* @param ctx The factory context for dependency injection
|
|
398
|
+
* @param record The factory record from the registry
|
|
399
|
+
* @param args Optional arguments for the service
|
|
400
|
+
* @returns Promise resolving to [undefined, instance] or [error]
|
|
401
|
+
*/
|
|
402
|
+
async instantiateService<T>(
|
|
403
|
+
ctx: FactoryContext,
|
|
404
|
+
record: FactoryRecord<T, any>,
|
|
405
|
+
args: any = undefined,
|
|
406
|
+
): Promise<[undefined, T] | [Error]> {
|
|
407
|
+
try {
|
|
408
|
+
switch (record.type) {
|
|
409
|
+
case InjectableType.Class:
|
|
410
|
+
return this.instantiateClass(ctx, record, args)
|
|
411
|
+
case InjectableType.Factory:
|
|
412
|
+
return this.instantiateFactory(ctx, record, args)
|
|
413
|
+
default:
|
|
414
|
+
throw new Error(
|
|
415
|
+
`[ServiceInstantiator] Unknown service type: ${record.type}`,
|
|
416
|
+
)
|
|
417
|
+
}
|
|
418
|
+
} catch (error) {
|
|
419
|
+
return [error instanceof Error ? <span class="branch-0 cbranch-no" title="branch not covered" >error : new Error(String(error))]</span>
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Instantiates a class-based service (Injectable decorator).
|
|
425
|
+
* @param ctx The factory context for dependency injection
|
|
426
|
+
* @param record The factory record from the registry
|
|
427
|
+
* @param args Optional arguments for the service constructor
|
|
428
|
+
* @returns Promise resolving to [undefined, instance] or [error]
|
|
429
|
+
*/
|
|
430
|
+
private async instantiateClass<T>(
|
|
431
|
+
ctx: FactoryContext,
|
|
432
|
+
record: FactoryRecord<T, any>,
|
|
433
|
+
args: any,
|
|
434
|
+
): Promise<[undefined, T] | [Error]> {
|
|
435
|
+
try {
|
|
436
|
+
const tryLoad = this.injectors.wrapSyncInit(() => {
|
|
437
|
+
const original = this.injectors.provideFactoryContext(ctx)
|
|
438
|
+
let result = new record.target(...(args ? [args] : []))
|
|
439
|
+
this.injectors.provideFactoryContext(original)
|
|
440
|
+
return result
|
|
441
|
+
})
|
|
442
|
+
|
|
443
|
+
let [instance, promises, injectState] = tryLoad()
|
|
444
|
+
if (promises.length > 0) {
|
|
445
|
+
const results = await Promise.allSettled(promises)
|
|
446
|
+
if (results.some((result) => result.status === 'rejected')) {
|
|
447
|
+
throw new Error(
|
|
448
|
+
`[ServiceInstantiator] Service ${record.target.name} cannot be instantiated.`,
|
|
449
|
+
)
|
|
450
|
+
}
|
|
451
|
+
const newRes = tryLoad(injectState)
|
|
452
|
+
instance = newRes[0]
|
|
453
|
+
promises = newRes[1]
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
if (promises.length > 0) {
|
|
457
|
+
console.error(`[ServiceInstantiator] ${record.target.name} has problem with it's definition.
|
|
458
|
+
|
|
459
|
+
One or more of the dependencies are registered as a InjectableScope.Instance and are used with inject.
|
|
460
|
+
|
|
461
|
+
Please use inject asyncInject of inject to load those dependencies.`)
|
|
462
|
+
throw new Error(
|
|
463
|
+
`[ServiceInstantiator] Service ${record.target.name} cannot be instantiated.`,
|
|
464
|
+
)
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
// Handle lifecycle hooks
|
|
468
|
+
if ('onServiceInit' in instance) {
|
|
469
|
+
await (instance as any).onServiceInit()
|
|
470
|
+
}
|
|
471
|
+
if ('onServiceDestroy' in instance) {
|
|
472
|
+
ctx.addDestroyListener(async () => {
|
|
473
|
+
await (instance as any).onServiceDestroy()
|
|
474
|
+
})
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
return [undefined, instance]
|
|
478
|
+
} catch (error) {
|
|
479
|
+
return [error instanceof Error ? <span class="branch-0 cbranch-no" title="branch not covered" >error : new Error(String(error))]</span>
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
/**
|
|
484
|
+
* Instantiates a factory-based service (Factory decorator).
|
|
485
|
+
* @param ctx The factory context for dependency injection
|
|
486
|
+
* @param record The factory record from the registry
|
|
487
|
+
* @param args Optional arguments for the factory
|
|
488
|
+
* @returns Promise resolving to [undefined, instance] or [error]
|
|
489
|
+
*/
|
|
490
|
+
private async instantiateFactory<T>(
|
|
491
|
+
ctx: FactoryContext,
|
|
492
|
+
record: FactoryRecord<T, any>,
|
|
493
|
+
args: any,
|
|
494
|
+
): Promise<[undefined, T] | [Error]> {
|
|
495
|
+
try {
|
|
496
|
+
const tryLoad = this.injectors.wrapSyncInit(() => {
|
|
497
|
+
const original = this.injectors.provideFactoryContext(ctx)
|
|
498
|
+
let result = new record.target()
|
|
499
|
+
this.injectors.provideFactoryContext(original)
|
|
500
|
+
return result
|
|
501
|
+
})
|
|
502
|
+
|
|
503
|
+
let [builder, promises, injectState] = tryLoad()
|
|
504
|
+
if (promises.length > 0) {
|
|
505
|
+
const results = await Promise.allSettled(promises)
|
|
506
|
+
if (results.some((result) => result.status === 'rejected')) {
|
|
507
|
+
throw new Error(
|
|
508
|
+
`[ServiceInstantiator] Service ${record.target.name} cannot be instantiated.`,
|
|
509
|
+
)
|
|
510
|
+
}
|
|
511
|
+
const newRes = tryLoad(injectState)
|
|
512
|
+
builder = newRes[0]
|
|
513
|
+
promises = newRes[1]
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
if (promises.length > 0) {
|
|
517
|
+
console.error(`[ServiceInstantiator] ${record.target.name} has problem with it's definition.
|
|
518
|
+
|
|
519
|
+
One or more of the dependencies are registered as a InjectableScope.Instance and are used with inject.
|
|
520
|
+
|
|
521
|
+
Please use asyncInject instead of inject to load those dependencies.`)
|
|
522
|
+
throw new Error(
|
|
523
|
+
`[ServiceInstantiator] Service ${record.target.name} cannot be instantiated.`,
|
|
524
|
+
)
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
if (typeof builder.create !== 'function') {
|
|
528
|
+
throw new Error(
|
|
529
|
+
`[ServiceInstantiator] Factory ${record.target.name} does not implement the create method.`,
|
|
530
|
+
)
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
const instance = await builder.create(ctx, args)
|
|
534
|
+
return [undefined, instance]
|
|
535
|
+
} catch (error) {
|
|
536
|
+
return [error instanceof Error ? <span class="branch-0 cbranch-no" title="branch not covered" >error : new Error(String(error))]</span>
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
</pre></td></tr></table></pre>
|
|
541
|
+
|
|
542
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
543
|
+
</div><!-- /wrapper -->
|
|
544
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
545
|
+
Code coverage generated by
|
|
546
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
547
|
+
at 2025-09-19T12:38:51.382Z
|
|
548
|
+
</div>
|
|
549
|
+
<script src="../prettify.js"></script>
|
|
550
|
+
<script>
|
|
551
|
+
window.onload = function () {
|
|
552
|
+
prettyPrint();
|
|
553
|
+
};
|
|
554
|
+
</script>
|
|
555
|
+
<script src="../sorter.js"></script>
|
|
556
|
+
<script src="../block-navigation.js"></script>
|
|
557
|
+
</body>
|
|
558
|
+
</html>
|
|
559
|
+
|