@navios/di 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +177 -36
- package/lib/_tsup-dts-rollup.d.ts +177 -36
- 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/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,760 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for docs/examples/injection-tokens.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">docs/examples</a> injection-tokens.mts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">0% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>0/152</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">0% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>0/1</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">0% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>0/1</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">0% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>0/152</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 low'></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>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
292
|
+
<span class="cline-any cline-neutral"> </span>
|
|
293
|
+
<span class="cline-any cline-neutral"> </span>
|
|
294
|
+
<span class="cline-any cline-neutral"> </span>
|
|
295
|
+
<span class="cline-any cline-neutral"> </span>
|
|
296
|
+
<span class="cline-any cline-neutral"> </span>
|
|
297
|
+
<span class="cline-any cline-neutral"> </span>
|
|
298
|
+
<span class="cline-any cline-neutral"> </span>
|
|
299
|
+
<span class="cline-any cline-neutral"> </span>
|
|
300
|
+
<span class="cline-any cline-neutral"> </span>
|
|
301
|
+
<span class="cline-any cline-no"> </span>
|
|
302
|
+
<span class="cline-any cline-neutral"> </span>
|
|
303
|
+
<span class="cline-any cline-no"> </span>
|
|
304
|
+
<span class="cline-any cline-neutral"> </span>
|
|
305
|
+
<span class="cline-any cline-no"> </span>
|
|
306
|
+
<span class="cline-any cline-neutral"> </span>
|
|
307
|
+
<span class="cline-any cline-neutral"> </span>
|
|
308
|
+
<span class="cline-any cline-no"> </span>
|
|
309
|
+
<span class="cline-any cline-no"> </span>
|
|
310
|
+
<span class="cline-any cline-no"> </span>
|
|
311
|
+
<span class="cline-any cline-no"> </span>
|
|
312
|
+
<span class="cline-any cline-no"> </span>
|
|
313
|
+
<span class="cline-any cline-no"> </span>
|
|
314
|
+
<span class="cline-any cline-no"> </span>
|
|
315
|
+
<span class="cline-any cline-neutral"> </span>
|
|
316
|
+
<span class="cline-any cline-no"> </span>
|
|
317
|
+
<span class="cline-any cline-no"> </span>
|
|
318
|
+
<span class="cline-any cline-no"> </span>
|
|
319
|
+
<span class="cline-any cline-no"> </span>
|
|
320
|
+
<span class="cline-any cline-no"> </span>
|
|
321
|
+
<span class="cline-any cline-neutral"> </span>
|
|
322
|
+
<span class="cline-any cline-neutral"> </span>
|
|
323
|
+
<span class="cline-any cline-no"> </span>
|
|
324
|
+
<span class="cline-any cline-neutral"> </span>
|
|
325
|
+
<span class="cline-any cline-neutral"> </span>
|
|
326
|
+
<span class="cline-any cline-no"> </span>
|
|
327
|
+
<span class="cline-any cline-neutral"> </span>
|
|
328
|
+
<span class="cline-any cline-no"> </span>
|
|
329
|
+
<span class="cline-any cline-neutral"> </span>
|
|
330
|
+
<span class="cline-any cline-neutral"> </span>
|
|
331
|
+
<span class="cline-any cline-no"> </span>
|
|
332
|
+
<span class="cline-any cline-neutral"> </span>
|
|
333
|
+
<span class="cline-any cline-neutral"> </span>
|
|
334
|
+
<span class="cline-any cline-no"> </span>
|
|
335
|
+
<span class="cline-any cline-no"> </span>
|
|
336
|
+
<span class="cline-any cline-no"> </span>
|
|
337
|
+
<span class="cline-any cline-neutral"> </span>
|
|
338
|
+
<span class="cline-any cline-no"> </span>
|
|
339
|
+
<span class="cline-any cline-no"> </span>
|
|
340
|
+
<span class="cline-any cline-no"> </span>
|
|
341
|
+
<span class="cline-any cline-neutral"> </span>
|
|
342
|
+
<span class="cline-any cline-no"> </span>
|
|
343
|
+
<span class="cline-any cline-no"> </span>
|
|
344
|
+
<span class="cline-any cline-no"> </span>
|
|
345
|
+
<span class="cline-any cline-neutral"> </span>
|
|
346
|
+
<span class="cline-any cline-no"> </span>
|
|
347
|
+
<span class="cline-any cline-no"> </span>
|
|
348
|
+
<span class="cline-any cline-no"> </span>
|
|
349
|
+
<span class="cline-any cline-no"> </span>
|
|
350
|
+
<span class="cline-any cline-neutral"> </span>
|
|
351
|
+
<span class="cline-any cline-no"> </span>
|
|
352
|
+
<span class="cline-any cline-no"> </span>
|
|
353
|
+
<span class="cline-any cline-no"> </span>
|
|
354
|
+
<span class="cline-any cline-neutral"> </span>
|
|
355
|
+
<span class="cline-any cline-no"> </span>
|
|
356
|
+
<span class="cline-any cline-no"> </span>
|
|
357
|
+
<span class="cline-any cline-no"> </span>
|
|
358
|
+
<span class="cline-any cline-neutral"> </span>
|
|
359
|
+
<span class="cline-any cline-no"> </span>
|
|
360
|
+
<span class="cline-any cline-no"> </span>
|
|
361
|
+
<span class="cline-any cline-no"> </span>
|
|
362
|
+
<span class="cline-any cline-neutral"> </span>
|
|
363
|
+
<span class="cline-any cline-no"> </span>
|
|
364
|
+
<span class="cline-any cline-no"> </span>
|
|
365
|
+
<span class="cline-any cline-no"> </span>
|
|
366
|
+
<span class="cline-any cline-no"> </span>
|
|
367
|
+
<span class="cline-any cline-neutral"> </span>
|
|
368
|
+
<span class="cline-any cline-neutral"> </span>
|
|
369
|
+
<span class="cline-any cline-no"> </span>
|
|
370
|
+
<span class="cline-any cline-no"> </span>
|
|
371
|
+
<span class="cline-any cline-no"> </span>
|
|
372
|
+
<span class="cline-any cline-no"> </span>
|
|
373
|
+
<span class="cline-any cline-no"> </span>
|
|
374
|
+
<span class="cline-any cline-no"> </span>
|
|
375
|
+
<span class="cline-any cline-no"> </span>
|
|
376
|
+
<span class="cline-any cline-neutral"> </span>
|
|
377
|
+
<span class="cline-any cline-no"> </span>
|
|
378
|
+
<span class="cline-any cline-no"> </span>
|
|
379
|
+
<span class="cline-any cline-no"> </span>
|
|
380
|
+
<span class="cline-any cline-no"> </span>
|
|
381
|
+
<span class="cline-any cline-no"> </span>
|
|
382
|
+
<span class="cline-any cline-no"> </span>
|
|
383
|
+
<span class="cline-any cline-no"> </span>
|
|
384
|
+
<span class="cline-any cline-neutral"> </span>
|
|
385
|
+
<span class="cline-any cline-no"> </span>
|
|
386
|
+
<span class="cline-any cline-no"> </span>
|
|
387
|
+
<span class="cline-any cline-no"> </span>
|
|
388
|
+
<span class="cline-any cline-no"> </span>
|
|
389
|
+
<span class="cline-any cline-no"> </span>
|
|
390
|
+
<span class="cline-any cline-neutral"> </span>
|
|
391
|
+
<span class="cline-any cline-no"> </span>
|
|
392
|
+
<span class="cline-any cline-no"> </span>
|
|
393
|
+
<span class="cline-any cline-no"> </span>
|
|
394
|
+
<span class="cline-any cline-no"> </span>
|
|
395
|
+
<span class="cline-any cline-no"> </span>
|
|
396
|
+
<span class="cline-any cline-neutral"> </span>
|
|
397
|
+
<span class="cline-any cline-neutral"> </span>
|
|
398
|
+
<span class="cline-any cline-no"> </span>
|
|
399
|
+
<span class="cline-any cline-no"> </span>
|
|
400
|
+
<span class="cline-any cline-neutral"> </span>
|
|
401
|
+
<span class="cline-any cline-no"> </span>
|
|
402
|
+
<span class="cline-any cline-no"> </span>
|
|
403
|
+
<span class="cline-any cline-no"> </span>
|
|
404
|
+
<span class="cline-any cline-no"> </span>
|
|
405
|
+
<span class="cline-any cline-no"> </span>
|
|
406
|
+
<span class="cline-any cline-no"> </span>
|
|
407
|
+
<span class="cline-any cline-no"> </span>
|
|
408
|
+
<span class="cline-any cline-no"> </span>
|
|
409
|
+
<span class="cline-any cline-no"> </span>
|
|
410
|
+
<span class="cline-any cline-no"> </span>
|
|
411
|
+
<span class="cline-any cline-no"> </span>
|
|
412
|
+
<span class="cline-any cline-no"> </span>
|
|
413
|
+
<span class="cline-any cline-no"> </span>
|
|
414
|
+
<span class="cline-any cline-no"> </span>
|
|
415
|
+
<span class="cline-any cline-no"> </span>
|
|
416
|
+
<span class="cline-any cline-no"> </span>
|
|
417
|
+
<span class="cline-any cline-no"> </span>
|
|
418
|
+
<span class="cline-any cline-no"> </span>
|
|
419
|
+
<span class="cline-any cline-neutral"> </span>
|
|
420
|
+
<span class="cline-any cline-no"> </span>
|
|
421
|
+
<span class="cline-any cline-no"> </span>
|
|
422
|
+
<span class="cline-any cline-no"> </span>
|
|
423
|
+
<span class="cline-any cline-no"> </span>
|
|
424
|
+
<span class="cline-any cline-neutral"> </span>
|
|
425
|
+
<span class="cline-any cline-no"> </span>
|
|
426
|
+
<span class="cline-any cline-no"> </span>
|
|
427
|
+
<span class="cline-any cline-no"> </span>
|
|
428
|
+
<span class="cline-any cline-no"> </span>
|
|
429
|
+
<span class="cline-any cline-no"> </span>
|
|
430
|
+
<span class="cline-any cline-no"> </span>
|
|
431
|
+
<span class="cline-any cline-no"> </span>
|
|
432
|
+
<span class="cline-any cline-no"> </span>
|
|
433
|
+
<span class="cline-any cline-no"> </span>
|
|
434
|
+
<span class="cline-any cline-no"> </span>
|
|
435
|
+
<span class="cline-any cline-no"> </span>
|
|
436
|
+
<span class="cline-any cline-no"> </span>
|
|
437
|
+
<span class="cline-any cline-no"> </span>
|
|
438
|
+
<span class="cline-any cline-no"> </span>
|
|
439
|
+
<span class="cline-any cline-no"> </span>
|
|
440
|
+
<span class="cline-any cline-neutral"> </span>
|
|
441
|
+
<span class="cline-any cline-neutral"> </span>
|
|
442
|
+
<span class="cline-any cline-no"> </span>
|
|
443
|
+
<span class="cline-any cline-no"> </span>
|
|
444
|
+
<span class="cline-any cline-neutral"> </span>
|
|
445
|
+
<span class="cline-any cline-neutral"> </span>
|
|
446
|
+
<span class="cline-any cline-no"> </span>
|
|
447
|
+
<span class="cline-any cline-no"> </span>
|
|
448
|
+
<span class="cline-any cline-neutral"> </span>
|
|
449
|
+
<span class="cline-any cline-no"> </span>
|
|
450
|
+
<span class="cline-any cline-no"> </span>
|
|
451
|
+
<span class="cline-any cline-neutral"> </span>
|
|
452
|
+
<span class="cline-any cline-neutral"> </span>
|
|
453
|
+
<span class="cline-any cline-no"> </span>
|
|
454
|
+
<span class="cline-any cline-no"> </span>
|
|
455
|
+
<span class="cline-any cline-neutral"> </span>
|
|
456
|
+
<span class="cline-any cline-no"> </span>
|
|
457
|
+
<span class="cline-any cline-no"> </span>
|
|
458
|
+
<span class="cline-any cline-no"> </span>
|
|
459
|
+
<span class="cline-any cline-neutral"> </span>
|
|
460
|
+
<span class="cline-any cline-no"> </span>
|
|
461
|
+
<span class="cline-any cline-no"> </span>
|
|
462
|
+
<span class="cline-any cline-neutral"> </span>
|
|
463
|
+
<span class="cline-any cline-neutral"> </span>
|
|
464
|
+
<span class="cline-any cline-no"> </span>
|
|
465
|
+
<span class="cline-any cline-no"> </span>
|
|
466
|
+
<span class="cline-any cline-neutral"> </span>
|
|
467
|
+
<span class="cline-any cline-no"> </span>
|
|
468
|
+
<span class="cline-any cline-no"> </span>
|
|
469
|
+
<span class="cline-any cline-no"> </span>
|
|
470
|
+
<span class="cline-any cline-neutral"> </span>
|
|
471
|
+
<span class="cline-any cline-no"> </span>
|
|
472
|
+
<span class="cline-any cline-no"> </span>
|
|
473
|
+
<span class="cline-any cline-neutral"> </span>
|
|
474
|
+
<span class="cline-any cline-neutral"> </span>
|
|
475
|
+
<span class="cline-any cline-no"> </span>
|
|
476
|
+
<span class="cline-any cline-no"> </span>
|
|
477
|
+
<span class="cline-any cline-no"> </span>
|
|
478
|
+
<span class="cline-any cline-no"> </span>
|
|
479
|
+
<span class="cline-any cline-no"> </span>
|
|
480
|
+
<span class="cline-any cline-no"> </span>
|
|
481
|
+
<span class="cline-any cline-no"> </span>
|
|
482
|
+
<span class="cline-any cline-no"> </span>
|
|
483
|
+
<span class="cline-any cline-neutral"> </span>
|
|
484
|
+
<span class="cline-any cline-no"> </span>
|
|
485
|
+
<span class="cline-any cline-no"> </span>
|
|
486
|
+
<span class="cline-any cline-no"> </span>
|
|
487
|
+
<span class="cline-any cline-no"> </span>
|
|
488
|
+
<span class="cline-any cline-no"> </span>
|
|
489
|
+
<span class="cline-any cline-no"> </span>
|
|
490
|
+
<span class="cline-any cline-no"> </span>
|
|
491
|
+
<span class="cline-any cline-neutral"> </span>
|
|
492
|
+
<span class="cline-any cline-neutral"> </span>
|
|
493
|
+
<span class="cline-any cline-no"> </span>
|
|
494
|
+
<span class="cline-any cline-no"> </span>
|
|
495
|
+
<span class="cline-any cline-no"> </span>
|
|
496
|
+
<span class="cline-any cline-no"> </span>
|
|
497
|
+
<span class="cline-any cline-no"> </span>
|
|
498
|
+
<span class="cline-any cline-neutral"> </span>
|
|
499
|
+
<span class="cline-any cline-neutral"> </span>
|
|
500
|
+
<span class="cline-any cline-no"> </span>
|
|
501
|
+
<span class="cline-any cline-no"> </span>
|
|
502
|
+
<span class="cline-any cline-no"> </span>
|
|
503
|
+
<span class="cline-any cline-neutral"> </span>
|
|
504
|
+
<span class="cline-any cline-neutral"> </span>
|
|
505
|
+
<span class="cline-any cline-neutral"> </span>
|
|
506
|
+
<span class="cline-any cline-neutral"> </span>
|
|
507
|
+
<span class="cline-any cline-neutral"> </span>
|
|
508
|
+
<span class="cline-any cline-neutral"> </span>
|
|
509
|
+
<span class="cline-any cline-neutral"> </span>
|
|
510
|
+
<span class="cline-any cline-neutral"> </span>
|
|
511
|
+
<span class="cline-any cline-neutral"> </span>
|
|
512
|
+
<span class="cline-any cline-neutral"> </span>
|
|
513
|
+
<span class="cline-any cline-neutral"> </span>
|
|
514
|
+
<span class="cline-any cline-neutral"> </span>
|
|
515
|
+
<span class="cline-any cline-neutral"> </span>
|
|
516
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >/**<span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span></span>
|
|
517
|
+
* Injection Tokens Example
|
|
518
|
+
*
|
|
519
|
+
* This example demonstrates:
|
|
520
|
+
* - Creating injection tokens with schemas
|
|
521
|
+
* - Using bound injection tokens
|
|
522
|
+
* - Using factory injection tokens
|
|
523
|
+
* - Token-based dependency resolution
|
|
524
|
+
*/
|
|
525
|
+
|
|
526
|
+
<span class="cstat-no" title="statement not covered" >import { Container, Injectable, InjectionToken } from '@navios/di'</span>
|
|
527
|
+
|
|
528
|
+
<span class="cstat-no" title="statement not covered" >import { z } from 'zod'</span>
|
|
529
|
+
|
|
530
|
+
<span class="cstat-no" title="statement not covered" >const container = new Container()</span>
|
|
531
|
+
|
|
532
|
+
// 1. Define schemas for configuration
|
|
533
|
+
<span class="cstat-no" title="statement not covered" >const databaseConfigSchema = z.object({</span>
|
|
534
|
+
<span class="cstat-no" title="statement not covered" > host: z.string(),</span>
|
|
535
|
+
<span class="cstat-no" title="statement not covered" > port: z.number(),</span>
|
|
536
|
+
<span class="cstat-no" title="statement not covered" > database: z.string(),</span>
|
|
537
|
+
<span class="cstat-no" title="statement not covered" > username: z.string(),</span>
|
|
538
|
+
<span class="cstat-no" title="statement not covered" > password: z.string(),</span>
|
|
539
|
+
<span class="cstat-no" title="statement not covered" >})</span>
|
|
540
|
+
|
|
541
|
+
<span class="cstat-no" title="statement not covered" >const emailConfigSchema = z.object({</span>
|
|
542
|
+
<span class="cstat-no" title="statement not covered" > provider: z.enum(['smtp', 'sendgrid', 'ses']),</span>
|
|
543
|
+
<span class="cstat-no" title="statement not covered" > apiKey: z.string(),</span>
|
|
544
|
+
<span class="cstat-no" title="statement not covered" > fromEmail: z.string().email(),</span>
|
|
545
|
+
<span class="cstat-no" title="statement not covered" >})</span>
|
|
546
|
+
|
|
547
|
+
// 2. Create injection tokens
|
|
548
|
+
<span class="cstat-no" title="statement not covered" >const DB_CONFIG_TOKEN = InjectionToken.create<</span>
|
|
549
|
+
DatabaseConfigService,
|
|
550
|
+
typeof databaseConfigSchema
|
|
551
|
+
<span class="cstat-no" title="statement not covered" >>('DB_CONFIG', databaseConfigSchema)</span>
|
|
552
|
+
|
|
553
|
+
<span class="cstat-no" title="statement not covered" >const EMAIL_CONFIG_TOKEN = InjectionToken.create<</span>
|
|
554
|
+
EmailConfigService,
|
|
555
|
+
typeof emailConfigSchema
|
|
556
|
+
<span class="cstat-no" title="statement not covered" >>('EMAIL_CONFIG', emailConfigSchema)</span>
|
|
557
|
+
|
|
558
|
+
// 3. Create services that use injection tokens
|
|
559
|
+
<span class="cstat-no" title="statement not covered" >@Injectable({ token: DB_CONFIG_TOKEN })</span>
|
|
560
|
+
<span class="cstat-no" title="statement not covered" >class DatabaseConfigService {</span>
|
|
561
|
+
<span class="cstat-no" title="statement not covered" > constructor(private config: z.infer<typeof databaseConfigSchema>) {}</span>
|
|
562
|
+
|
|
563
|
+
<span class="cstat-no" title="statement not covered" > getConnectionString() {</span>
|
|
564
|
+
<span class="cstat-no" title="statement not covered" > return `postgresql://${this.config.username}:${this.config.password}@${this.config.host}:${this.config.port}/${this.config.database}`</span>
|
|
565
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
566
|
+
|
|
567
|
+
<span class="cstat-no" title="statement not covered" > getHost() {</span>
|
|
568
|
+
<span class="cstat-no" title="statement not covered" > return this.config.host</span>
|
|
569
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
570
|
+
|
|
571
|
+
<span class="cstat-no" title="statement not covered" > getPort() {</span>
|
|
572
|
+
<span class="cstat-no" title="statement not covered" > return this.config.port</span>
|
|
573
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
574
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
575
|
+
|
|
576
|
+
<span class="cstat-no" title="statement not covered" >@Injectable({ token: EMAIL_CONFIG_TOKEN })</span>
|
|
577
|
+
<span class="cstat-no" title="statement not covered" >class EmailConfigService {</span>
|
|
578
|
+
<span class="cstat-no" title="statement not covered" > constructor(private config: z.infer<typeof emailConfigSchema>) {}</span>
|
|
579
|
+
|
|
580
|
+
<span class="cstat-no" title="statement not covered" > getProvider() {</span>
|
|
581
|
+
<span class="cstat-no" title="statement not covered" > return this.config.provider</span>
|
|
582
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
583
|
+
|
|
584
|
+
<span class="cstat-no" title="statement not covered" > getApiKey() {</span>
|
|
585
|
+
<span class="cstat-no" title="statement not covered" > return this.config.apiKey</span>
|
|
586
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
587
|
+
|
|
588
|
+
<span class="cstat-no" title="statement not covered" > getFromEmail() {</span>
|
|
589
|
+
<span class="cstat-no" title="statement not covered" > return this.config.fromEmail</span>
|
|
590
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
591
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
592
|
+
|
|
593
|
+
// 4. Create bound tokens for different environments
|
|
594
|
+
<span class="cstat-no" title="statement not covered" >const PRODUCTION_DB_CONFIG = InjectionToken.bound(DB_CONFIG_TOKEN, {</span>
|
|
595
|
+
<span class="cstat-no" title="statement not covered" > host: 'prod-db.example.com',</span>
|
|
596
|
+
<span class="cstat-no" title="statement not covered" > port: 5432,</span>
|
|
597
|
+
<span class="cstat-no" title="statement not covered" > database: 'production',</span>
|
|
598
|
+
<span class="cstat-no" title="statement not covered" > username: 'prod_user',</span>
|
|
599
|
+
<span class="cstat-no" title="statement not covered" > password: 'prod_password',</span>
|
|
600
|
+
<span class="cstat-no" title="statement not covered" >})</span>
|
|
601
|
+
|
|
602
|
+
<span class="cstat-no" title="statement not covered" >const DEVELOPMENT_DB_CONFIG = InjectionToken.bound(DB_CONFIG_TOKEN, {</span>
|
|
603
|
+
<span class="cstat-no" title="statement not covered" > host: 'localhost',</span>
|
|
604
|
+
<span class="cstat-no" title="statement not covered" > port: 5432,</span>
|
|
605
|
+
<span class="cstat-no" title="statement not covered" > database: 'development',</span>
|
|
606
|
+
<span class="cstat-no" title="statement not covered" > username: 'dev_user',</span>
|
|
607
|
+
<span class="cstat-no" title="statement not covered" > password: 'dev_password',</span>
|
|
608
|
+
<span class="cstat-no" title="statement not covered" >})</span>
|
|
609
|
+
|
|
610
|
+
<span class="cstat-no" title="statement not covered" >const PRODUCTION_EMAIL_CONFIG = InjectionToken.bound(EMAIL_CONFIG_TOKEN, {</span>
|
|
611
|
+
<span class="cstat-no" title="statement not covered" > provider: 'sendgrid',</span>
|
|
612
|
+
<span class="cstat-no" title="statement not covered" > apiKey: 'sg.prod_key',</span>
|
|
613
|
+
<span class="cstat-no" title="statement not covered" > fromEmail: 'noreply@example.com',</span>
|
|
614
|
+
<span class="cstat-no" title="statement not covered" >})</span>
|
|
615
|
+
|
|
616
|
+
<span class="cstat-no" title="statement not covered" >const DEVELOPMENT_EMAIL_CONFIG = InjectionToken.bound(EMAIL_CONFIG_TOKEN, {</span>
|
|
617
|
+
<span class="cstat-no" title="statement not covered" > provider: 'smtp',</span>
|
|
618
|
+
<span class="cstat-no" title="statement not covered" > apiKey: 'smtp_dev_key',</span>
|
|
619
|
+
<span class="cstat-no" title="statement not covered" > fromEmail: 'dev@example.com',</span>
|
|
620
|
+
<span class="cstat-no" title="statement not covered" >})</span>
|
|
621
|
+
|
|
622
|
+
// 5. Create factory tokens for dynamic configuration
|
|
623
|
+
<span class="cstat-no" title="statement not covered" >const DYNAMIC_DB_CONFIG = InjectionToken.factory(DB_CONFIG_TOKEN, async () => {</span>
|
|
624
|
+
<span class="cstat-no" title="statement not covered" > const env = process.env.NODE_ENV || 'development'</span>
|
|
625
|
+
|
|
626
|
+
<span class="cstat-no" title="statement not covered" > if (env === 'production') {</span>
|
|
627
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
628
|
+
<span class="cstat-no" title="statement not covered" > host: 'prod-db.example.com',</span>
|
|
629
|
+
<span class="cstat-no" title="statement not covered" > port: 5432,</span>
|
|
630
|
+
<span class="cstat-no" title="statement not covered" > database: 'production',</span>
|
|
631
|
+
<span class="cstat-no" title="statement not covered" > username: 'prod_user',</span>
|
|
632
|
+
<span class="cstat-no" title="statement not covered" > password: 'prod_password',</span>
|
|
633
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
634
|
+
<span class="cstat-no" title="statement not covered" > } else {</span>
|
|
635
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
636
|
+
<span class="cstat-no" title="statement not covered" > host: 'localhost',</span>
|
|
637
|
+
<span class="cstat-no" title="statement not covered" > port: 5432,</span>
|
|
638
|
+
<span class="cstat-no" title="statement not covered" > database: 'development',</span>
|
|
639
|
+
<span class="cstat-no" title="statement not covered" > username: 'dev_user',</span>
|
|
640
|
+
<span class="cstat-no" title="statement not covered" > password: 'dev_password',</span>
|
|
641
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
642
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
643
|
+
<span class="cstat-no" title="statement not covered" >})</span>
|
|
644
|
+
|
|
645
|
+
<span class="cstat-no" title="statement not covered" >const DYNAMIC_EMAIL_CONFIG = InjectionToken.factory(</span>
|
|
646
|
+
<span class="cstat-no" title="statement not covered" > EMAIL_CONFIG_TOKEN,</span>
|
|
647
|
+
<span class="cstat-no" title="statement not covered" > async () => {</span>
|
|
648
|
+
<span class="cstat-no" title="statement not covered" > const env = process.env.NODE_ENV || 'development'</span>
|
|
649
|
+
|
|
650
|
+
<span class="cstat-no" title="statement not covered" > if (env === 'production') {</span>
|
|
651
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
652
|
+
<span class="cstat-no" title="statement not covered" > provider: 'sendgrid' as const,</span>
|
|
653
|
+
<span class="cstat-no" title="statement not covered" > apiKey: 'sg.prod_key',</span>
|
|
654
|
+
<span class="cstat-no" title="statement not covered" > fromEmail: 'noreply@example.com',</span>
|
|
655
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
656
|
+
<span class="cstat-no" title="statement not covered" > } else {</span>
|
|
657
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
658
|
+
<span class="cstat-no" title="statement not covered" > provider: 'smtp' as const,</span>
|
|
659
|
+
<span class="cstat-no" title="statement not covered" > apiKey: 'smtp_dev_key',</span>
|
|
660
|
+
<span class="cstat-no" title="statement not covered" > fromEmail: 'dev@example.com',</span>
|
|
661
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
662
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
663
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
664
|
+
<span class="cstat-no" title="statement not covered" >)</span>
|
|
665
|
+
|
|
666
|
+
// 6. Usage examples
|
|
667
|
+
<span class="cstat-no" title="statement not covered" >async function demonstrateBoundTokens() {</span>
|
|
668
|
+
<span class="cstat-no" title="statement not covered" > console.log('=== Bound Tokens Example ===\n')</span>
|
|
669
|
+
|
|
670
|
+
// Use production configuration
|
|
671
|
+
<span class="cstat-no" title="statement not covered" > const prodDbConfig = await container.get(PRODUCTION_DB_CONFIG)</span>
|
|
672
|
+
<span class="cstat-no" title="statement not covered" > console.log('Production DB:', prodDbConfig.getConnectionString())</span>
|
|
673
|
+
|
|
674
|
+
<span class="cstat-no" title="statement not covered" > const prodEmailConfig = await container.get(PRODUCTION_EMAIL_CONFIG)</span>
|
|
675
|
+
<span class="cstat-no" title="statement not covered" > console.log('Production Email:', prodEmailConfig.getProvider())</span>
|
|
676
|
+
|
|
677
|
+
// Use development configuration
|
|
678
|
+
<span class="cstat-no" title="statement not covered" > const devDbConfig = await container.get(DEVELOPMENT_DB_CONFIG)</span>
|
|
679
|
+
<span class="cstat-no" title="statement not covered" > console.log('Development DB:', devDbConfig.getConnectionString())</span>
|
|
680
|
+
|
|
681
|
+
<span class="cstat-no" title="statement not covered" > const devEmailConfig = await container.get(DEVELOPMENT_EMAIL_CONFIG)</span>
|
|
682
|
+
<span class="cstat-no" title="statement not covered" > console.log('Development Email:', devEmailConfig.getProvider())</span>
|
|
683
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
684
|
+
|
|
685
|
+
<span class="cstat-no" title="statement not covered" >async function demonstrateFactoryTokens() {</span>
|
|
686
|
+
<span class="cstat-no" title="statement not covered" > console.log('\n=== Factory Tokens Example ===\n')</span>
|
|
687
|
+
|
|
688
|
+
// Use dynamic configuration based on environment
|
|
689
|
+
<span class="cstat-no" title="statement not covered" > const dbConfig = await container.get(DYNAMIC_DB_CONFIG)</span>
|
|
690
|
+
<span class="cstat-no" title="statement not covered" > console.log('Dynamic DB:', dbConfig.getConnectionString())</span>
|
|
691
|
+
|
|
692
|
+
<span class="cstat-no" title="statement not covered" > const emailConfig = await container.get(DYNAMIC_EMAIL_CONFIG)</span>
|
|
693
|
+
<span class="cstat-no" title="statement not covered" > console.log('Dynamic Email:', emailConfig.getProvider())</span>
|
|
694
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
695
|
+
|
|
696
|
+
<span class="cstat-no" title="statement not covered" >async function demonstrateDirectTokens() {</span>
|
|
697
|
+
<span class="cstat-no" title="statement not covered" > console.log('\n=== Direct Tokens Example ===\n')</span>
|
|
698
|
+
|
|
699
|
+
// Use tokens directly with configuration
|
|
700
|
+
<span class="cstat-no" title="statement not covered" > const dbConfig = await container.get(DB_CONFIG_TOKEN, {</span>
|
|
701
|
+
<span class="cstat-no" title="statement not covered" > host: 'custom-db.example.com',</span>
|
|
702
|
+
<span class="cstat-no" title="statement not covered" > port: 5432,</span>
|
|
703
|
+
<span class="cstat-no" title="statement not covered" > database: 'custom',</span>
|
|
704
|
+
<span class="cstat-no" title="statement not covered" > username: 'custom_user',</span>
|
|
705
|
+
<span class="cstat-no" title="statement not covered" > password: 'custom_password',</span>
|
|
706
|
+
<span class="cstat-no" title="statement not covered" > })</span>
|
|
707
|
+
<span class="cstat-no" title="statement not covered" > console.log('Custom DB:', dbConfig.getConnectionString())</span>
|
|
708
|
+
|
|
709
|
+
<span class="cstat-no" title="statement not covered" > const emailConfig = await container.get(EMAIL_CONFIG_TOKEN, {</span>
|
|
710
|
+
<span class="cstat-no" title="statement not covered" > provider: 'ses',</span>
|
|
711
|
+
<span class="cstat-no" title="statement not covered" > apiKey: 'aws_ses_key',</span>
|
|
712
|
+
<span class="cstat-no" title="statement not covered" > fromEmail: 'custom@example.com',</span>
|
|
713
|
+
<span class="cstat-no" title="statement not covered" > })</span>
|
|
714
|
+
<span class="cstat-no" title="statement not covered" > console.log('Custom Email:', emailConfig.getProvider())</span>
|
|
715
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
716
|
+
|
|
717
|
+
// Main function
|
|
718
|
+
<span class="cstat-no" title="statement not covered" >async function main() {</span>
|
|
719
|
+
<span class="cstat-no" title="statement not covered" > await demonstrateBoundTokens()</span>
|
|
720
|
+
<span class="cstat-no" title="statement not covered" > await demonstrateFactoryTokens()</span>
|
|
721
|
+
<span class="cstat-no" title="statement not covered" > await demonstrateDirectTokens()</span>
|
|
722
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
723
|
+
|
|
724
|
+
// Run the example
|
|
725
|
+
<span class="cstat-no" title="statement not covered" >if (require.main === module) {</span>
|
|
726
|
+
<span class="cstat-no" title="statement not covered" > main().catch(console.error)</span>
|
|
727
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
728
|
+
|
|
729
|
+
export {
|
|
730
|
+
DB_CONFIG_TOKEN,
|
|
731
|
+
EMAIL_CONFIG_TOKEN,
|
|
732
|
+
PRODUCTION_DB_CONFIG,
|
|
733
|
+
DEVELOPMENT_DB_CONFIG,
|
|
734
|
+
PRODUCTION_EMAIL_CONFIG,
|
|
735
|
+
DEVELOPMENT_EMAIL_CONFIG,
|
|
736
|
+
DYNAMIC_DB_CONFIG,
|
|
737
|
+
DYNAMIC_EMAIL_CONFIG,
|
|
738
|
+
DatabaseConfigService,
|
|
739
|
+
EmailConfigService,
|
|
740
|
+
}
|
|
741
|
+
</pre></td></tr></table></pre>
|
|
742
|
+
|
|
743
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
744
|
+
</div><!-- /wrapper -->
|
|
745
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
746
|
+
Code coverage generated by
|
|
747
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
748
|
+
at 2025-09-19T12:38:51.382Z
|
|
749
|
+
</div>
|
|
750
|
+
<script src="../../prettify.js"></script>
|
|
751
|
+
<script>
|
|
752
|
+
window.onload = function () {
|
|
753
|
+
prettyPrint();
|
|
754
|
+
};
|
|
755
|
+
</script>
|
|
756
|
+
<script src="../../sorter.js"></script>
|
|
757
|
+
<script src="../../block-navigation.js"></script>
|
|
758
|
+
</body>
|
|
759
|
+
</html>
|
|
760
|
+
|