@node-c/persistance-typeorm 1.0.0-alpha10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +4 -0
  3. package/coverage/base.css +224 -0
  4. package/coverage/block-navigation.js +87 -0
  5. package/coverage/clover.xml +864 -0
  6. package/coverage/common/definitions/common.constants.ts.html +103 -0
  7. package/coverage/common/definitions/index.html +131 -0
  8. package/coverage/common/definitions/index.ts.html +88 -0
  9. package/coverage/coverage-final.json +12 -0
  10. package/coverage/entityService/index.html +131 -0
  11. package/coverage/entityService/index.ts.html +91 -0
  12. package/coverage/entityService/rdb.entity.service.ts.html +1126 -0
  13. package/coverage/favicon.png +0 -0
  14. package/coverage/index.html +176 -0
  15. package/coverage/module/index.html +131 -0
  16. package/coverage/module/index.ts.html +91 -0
  17. package/coverage/module/rdb.module.ts.html +241 -0
  18. package/coverage/prettify.css +1 -0
  19. package/coverage/prettify.js +2 -0
  20. package/coverage/repository/index.html +131 -0
  21. package/coverage/repository/index.ts.html +91 -0
  22. package/coverage/repository/rdb.repository.module.ts.html +172 -0
  23. package/coverage/sort-arrow-sprite.png +0 -0
  24. package/coverage/sorter.js +196 -0
  25. package/coverage/sqlQueryBuilder/index.html +146 -0
  26. package/coverage/sqlQueryBuilder/index.ts.html +94 -0
  27. package/coverage/sqlQueryBuilder/sqlQueryBuilder.module.ts.html +163 -0
  28. package/coverage/sqlQueryBuilder/sqlQueryBuilder.service.ts.html +1534 -0
  29. package/dist/common/definitions/common.constants.d.ts +2 -0
  30. package/dist/common/definitions/common.constants.js +7 -0
  31. package/dist/common/definitions/common.constants.js.map +1 -0
  32. package/dist/common/definitions/index.d.ts +1 -0
  33. package/dist/common/definitions/index.js +18 -0
  34. package/dist/common/definitions/index.js.map +1 -0
  35. package/dist/entityService/index.d.ts +1 -0
  36. package/dist/entityService/index.js +18 -0
  37. package/dist/entityService/index.js.map +1 -0
  38. package/dist/entityService/typeorm.entity.service.d.ts +10 -0
  39. package/dist/entityService/typeorm.entity.service.js +23 -0
  40. package/dist/entityService/typeorm.entity.service.js.map +1 -0
  41. package/dist/index.d.ts +4 -0
  42. package/dist/index.js +21 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/module/index.d.ts +2 -0
  45. package/dist/module/index.js +19 -0
  46. package/dist/module/index.js.map +1 -0
  47. package/dist/module/typeorm.module.d.ts +5 -0
  48. package/dist/module/typeorm.module.definitions.d.ts +17 -0
  49. package/dist/module/typeorm.module.definitions.js +3 -0
  50. package/dist/module/typeorm.module.definitions.js.map +1 -0
  51. package/dist/module/typeorm.module.js +49 -0
  52. package/dist/module/typeorm.module.js.map +1 -0
  53. package/dist/repository/index.d.ts +3 -0
  54. package/dist/repository/index.js +20 -0
  55. package/dist/repository/index.js.map +1 -0
  56. package/dist/repository/typeorm.repository.d.ts +7 -0
  57. package/dist/repository/typeorm.repository.definitions.d.ts +6 -0
  58. package/dist/repository/typeorm.repository.definitions.js +3 -0
  59. package/dist/repository/typeorm.repository.definitions.js.map +1 -0
  60. package/dist/repository/typeorm.repository.js +33 -0
  61. package/dist/repository/typeorm.repository.js.map +1 -0
  62. package/dist/repository/typeorm.repository.module.d.ts +6 -0
  63. package/dist/repository/typeorm.repository.module.js +66 -0
  64. package/dist/repository/typeorm.repository.module.js.map +1 -0
  65. package/package.json +22 -0
  66. package/tsconfig.build.json +9 -0
  67. package/tsconfig.json +9 -0
@@ -0,0 +1,1534 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for sqlQueryBuilder/sqlQueryBuilder.service.ts</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">sqlQueryBuilder</a> sqlQueryBuilder.service.ts</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'>417/417</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">96% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>120/125</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'>417/417</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>
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>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
550
+ <span class="cline-any cline-yes">1x</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
552
+ <span class="cline-any cline-yes">1x</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-yes">1x</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-neutral">&nbsp;</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-neutral">&nbsp;</span>
559
+ <span class="cline-any cline-yes">1x</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-yes">1x</span>
562
+ <span class="cline-any cline-yes">1x</span>
563
+ <span class="cline-any cline-yes">1x</span>
564
+ <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-neutral">&nbsp;</span>
567
+ <span class="cline-any cline-neutral">&nbsp;</span>
568
+ <span class="cline-any cline-yes">1x</span>
569
+ <span class="cline-any cline-yes">27x</span>
570
+ <span class="cline-any cline-yes">27x</span>
571
+ <span class="cline-any cline-yes">27x</span>
572
+ <span class="cline-any cline-yes">27x</span>
573
+ <span class="cline-any cline-yes">27x</span>
574
+ <span class="cline-any cline-yes">27x</span>
575
+ <span class="cline-any cline-yes">27x</span>
576
+ <span class="cline-any cline-yes">4x</span>
577
+ <span class="cline-any cline-yes">4x</span>
578
+ <span class="cline-any cline-yes">27x</span>
579
+ <span class="cline-any cline-yes">22x</span>
580
+ <span class="cline-any cline-yes">22x</span>
581
+ <span class="cline-any cline-yes">22x</span>
582
+ <span class="cline-any cline-yes">27x</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
584
+ <span class="cline-any cline-yes">1x</span>
585
+ <span class="cline-any cline-yes">4x</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-neutral">&nbsp;</span>
588
+ <span class="cline-any cline-neutral">&nbsp;</span>
589
+ <span class="cline-any cline-neutral">&nbsp;</span>
590
+ <span class="cline-any cline-yes">4x</span>
591
+ <span class="cline-any cline-yes">4x</span>
592
+ <span class="cline-any cline-yes">4x</span>
593
+ <span class="cline-any cline-yes">4x</span>
594
+ <span class="cline-any cline-yes">4x</span>
595
+ <span class="cline-any cline-yes">4x</span>
596
+ <span class="cline-any cline-yes">3x</span>
597
+ <span class="cline-any cline-yes">1x</span>
598
+ <span class="cline-any cline-yes">1x</span>
599
+ <span class="cline-any cline-yes">3x</span>
600
+ <span class="cline-any cline-yes">2x</span>
601
+ <span class="cline-any cline-yes">2x</span>
602
+ <span class="cline-any cline-yes">1x</span>
603
+ <span class="cline-any cline-yes">1x</span>
604
+ <span class="cline-any cline-yes">1x</span>
605
+ <span class="cline-any cline-yes">1x</span>
606
+ <span class="cline-any cline-yes">1x</span>
607
+ <span class="cline-any cline-yes">1x</span>
608
+ <span class="cline-any cline-yes">1x</span>
609
+ <span class="cline-any cline-yes">1x</span>
610
+ <span class="cline-any cline-yes">2x</span>
611
+ <span class="cline-any cline-yes">2x</span>
612
+ <span class="cline-any cline-yes">3x</span>
613
+ <span class="cline-any cline-yes">1x</span>
614
+ <span class="cline-any cline-yes">1x</span>
615
+ <span class="cline-any cline-yes">3x</span>
616
+ <span class="cline-any cline-yes">4x</span>
617
+ <span class="cline-any cline-yes">3x</span>
618
+ <span class="cline-any cline-yes">3x</span>
619
+ <span class="cline-any cline-yes">6x</span>
620
+ <span class="cline-any cline-yes">6x</span>
621
+ <span class="cline-any cline-yes">1x</span>
622
+ <span class="cline-any cline-yes">1x</span>
623
+ <span class="cline-any cline-yes">5x</span>
624
+ <span class="cline-any cline-yes">6x</span>
625
+ <span class="cline-any cline-yes">3x</span>
626
+ <span class="cline-any cline-yes">6x</span>
627
+ <span class="cline-any cline-yes">2x</span>
628
+ <span class="cline-any cline-neutral">&nbsp;</span>
629
+ <span class="cline-any cline-yes">2x</span>
630
+ <span class="cline-any cline-yes">5x</span>
631
+ <span class="cline-any cline-yes">5x</span>
632
+ <span class="cline-any cline-yes">5x</span>
633
+ <span class="cline-any cline-yes">5x</span>
634
+ <span class="cline-any cline-yes">5x</span>
635
+ <span class="cline-any cline-yes">3x</span>
636
+ <span class="cline-any cline-yes">4x</span>
637
+ <span class="cline-any cline-yes">1x</span>
638
+ <span class="cline-any cline-yes">1x</span>
639
+ <span class="cline-any cline-yes">1x</span>
640
+ <span class="cline-any cline-yes">1x</span>
641
+ <span class="cline-any cline-yes">1x</span>
642
+ <span class="cline-any cline-yes">1x</span>
643
+ <span class="cline-any cline-yes">1x</span>
644
+ <span class="cline-any cline-yes">1x</span>
645
+ <span class="cline-any cline-yes">1x</span>
646
+ <span class="cline-any cline-yes">1x</span>
647
+ <span class="cline-any cline-yes">4x</span>
648
+ <span class="cline-any cline-neutral">&nbsp;</span>
649
+ <span class="cline-any cline-yes">1x</span>
650
+ <span class="cline-any cline-yes">28x</span>
651
+ <span class="cline-any cline-yes">28x</span>
652
+ <span class="cline-any cline-yes">28x</span>
653
+ <span class="cline-any cline-yes">28x</span>
654
+ <span class="cline-any cline-yes">28x</span>
655
+ <span class="cline-any cline-yes">28x</span>
656
+ <span class="cline-any cline-yes">28x</span>
657
+ <span class="cline-any cline-yes">28x</span>
658
+ <span class="cline-any cline-yes">28x</span>
659
+ <span class="cline-any cline-yes">28x</span>
660
+ <span class="cline-any cline-yes">28x</span>
661
+ <span class="cline-any cline-yes">28x</span>
662
+ <span class="cline-any cline-yes">2x</span>
663
+ <span class="cline-any cline-yes">2x</span>
664
+ <span class="cline-any cline-yes">1x</span>
665
+ <span class="cline-any cline-yes">1x</span>
666
+ <span class="cline-any cline-yes">1x</span>
667
+ <span class="cline-any cline-yes">1x</span>
668
+ <span class="cline-any cline-yes">2x</span>
669
+ <span class="cline-any cline-yes">2x</span>
670
+ <span class="cline-any cline-yes">2x</span>
671
+ <span class="cline-any cline-yes">2x</span>
672
+ <span class="cline-any cline-yes">2x</span>
673
+ <span class="cline-any cline-yes">28x</span>
674
+ <span class="cline-any cline-yes">2x</span>
675
+ <span class="cline-any cline-yes">2x</span>
676
+ <span class="cline-any cline-yes">2x</span>
677
+ <span class="cline-any cline-yes">2x</span>
678
+ <span class="cline-any cline-yes">2x</span>
679
+ <span class="cline-any cline-yes">28x</span>
680
+ <span class="cline-any cline-yes">1x</span>
681
+ <span class="cline-any cline-yes">1x</span>
682
+ <span class="cline-any cline-yes">1x</span>
683
+ <span class="cline-any cline-yes">1x</span>
684
+ <span class="cline-any cline-yes">1x</span>
685
+ <span class="cline-any cline-yes">28x</span>
686
+ <span class="cline-any cline-yes">1x</span>
687
+ <span class="cline-any cline-yes">1x</span>
688
+ <span class="cline-any cline-yes">1x</span>
689
+ <span class="cline-any cline-yes">1x</span>
690
+ <span class="cline-any cline-yes">1x</span>
691
+ <span class="cline-any cline-yes">28x</span>
692
+ <span class="cline-any cline-yes">1x</span>
693
+ <span class="cline-any cline-yes">1x</span>
694
+ <span class="cline-any cline-yes">1x</span>
695
+ <span class="cline-any cline-yes">1x</span>
696
+ <span class="cline-any cline-yes">1x</span>
697
+ <span class="cline-any cline-yes">21x</span>
698
+ <span class="cline-any cline-yes">21x</span>
699
+ <span class="cline-any cline-yes">18x</span>
700
+ <span class="cline-any cline-yes">28x</span>
701
+ <span class="cline-any cline-yes">4x</span>
702
+ <span class="cline-any cline-yes">4x</span>
703
+ <span class="cline-any cline-yes">4x</span>
704
+ <span class="cline-any cline-yes">4x</span>
705
+ <span class="cline-any cline-yes">4x</span>
706
+ <span class="cline-any cline-yes">28x</span>
707
+ <span class="cline-any cline-yes">2x</span>
708
+ <span class="cline-any cline-yes">2x</span>
709
+ <span class="cline-any cline-yes">2x</span>
710
+ <span class="cline-any cline-yes">2x</span>
711
+ <span class="cline-any cline-yes">2x</span>
712
+ <span class="cline-any cline-yes">15x</span>
713
+ <span class="cline-any cline-yes">15x</span>
714
+ <span class="cline-any cline-yes">28x</span>
715
+ <span class="cline-any cline-yes">28x</span>
716
+ <span class="cline-any cline-yes">28x</span>
717
+ <span class="cline-any cline-neutral">&nbsp;</span>
718
+ <span class="cline-any cline-yes">1x</span>
719
+ <span class="cline-any cline-yes">14x</span>
720
+ <span class="cline-any cline-yes">14x</span>
721
+ <span class="cline-any cline-neutral">&nbsp;</span>
722
+ <span class="cline-any cline-neutral">&nbsp;</span>
723
+ <span class="cline-any cline-neutral">&nbsp;</span>
724
+ <span class="cline-any cline-neutral">&nbsp;</span>
725
+ <span class="cline-any cline-neutral">&nbsp;</span>
726
+ <span class="cline-any cline-yes">14x</span>
727
+ <span class="cline-any cline-yes">14x</span>
728
+ <span class="cline-any cline-yes">14x</span>
729
+ <span class="cline-any cline-yes">14x</span>
730
+ <span class="cline-any cline-yes">14x</span>
731
+ <span class="cline-any cline-yes">14x</span>
732
+ <span class="cline-any cline-yes">22x</span>
733
+ <span class="cline-any cline-yes">22x</span>
734
+ <span class="cline-any cline-yes">4x</span>
735
+ <span class="cline-any cline-yes">4x</span>
736
+ <span class="cline-any cline-yes">22x</span>
737
+ <span class="cline-any cline-yes">11x</span>
738
+ <span class="cline-any cline-yes">11x</span>
739
+ <span class="cline-any cline-yes">18x</span>
740
+ <span class="cline-any cline-yes">18x</span>
741
+ <span class="cline-any cline-yes">17x</span>
742
+ <span class="cline-any cline-yes">16x</span>
743
+ <span class="cline-any cline-yes">8x</span>
744
+ <span class="cline-any cline-yes">8x</span>
745
+ <span class="cline-any cline-yes">7x</span>
746
+ <span class="cline-any cline-yes">22x</span>
747
+ <span class="cline-any cline-yes">12x</span>
748
+ <span class="cline-any cline-yes">12x</span>
749
+ <span class="cline-any cline-yes">12x</span>
750
+ <span class="cline-any cline-yes">12x</span>
751
+ <span class="cline-any cline-yes">12x</span>
752
+ <span class="cline-any cline-yes">22x</span>
753
+ <span class="cline-any cline-yes">1x</span>
754
+ <span class="cline-any cline-yes">1x</span>
755
+ <span class="cline-any cline-yes">1x</span>
756
+ <span class="cline-any cline-yes">1x</span>
757
+ <span class="cline-any cline-yes">1x</span>
758
+ <span class="cline-any cline-yes">5x</span>
759
+ <span class="cline-any cline-yes">5x</span>
760
+ <span class="cline-any cline-yes">5x</span>
761
+ <span class="cline-any cline-yes">5x</span>
762
+ <span class="cline-any cline-yes">22x</span>
763
+ <span class="cline-any cline-yes">14x</span>
764
+ <span class="cline-any cline-yes">14x</span>
765
+ <span class="cline-any cline-neutral">&nbsp;</span>
766
+ <span class="cline-any cline-neutral">&nbsp;</span>
767
+ <span class="cline-any cline-neutral">&nbsp;</span>
768
+ <span class="cline-any cline-neutral">&nbsp;</span>
769
+ <span class="cline-any cline-neutral">&nbsp;</span>
770
+ <span class="cline-any cline-neutral">&nbsp;</span>
771
+ <span class="cline-any cline-neutral">&nbsp;</span>
772
+ <span class="cline-any cline-neutral">&nbsp;</span>
773
+ <span class="cline-any cline-neutral">&nbsp;</span>
774
+ <span class="cline-any cline-neutral">&nbsp;</span>
775
+ <span class="cline-any cline-neutral">&nbsp;</span>
776
+ <span class="cline-any cline-neutral">&nbsp;</span>
777
+ <span class="cline-any cline-neutral">&nbsp;</span>
778
+ <span class="cline-any cline-neutral">&nbsp;</span>
779
+ <span class="cline-any cline-neutral">&nbsp;</span>
780
+ <span class="cline-any cline-neutral">&nbsp;</span>
781
+ <span class="cline-any cline-neutral">&nbsp;</span>
782
+ <span class="cline-any cline-neutral">&nbsp;</span>
783
+ <span class="cline-any cline-neutral">&nbsp;</span>
784
+ <span class="cline-any cline-neutral">&nbsp;</span>
785
+ <span class="cline-any cline-neutral">&nbsp;</span>
786
+ <span class="cline-any cline-neutral">&nbsp;</span>
787
+ <span class="cline-any cline-neutral">&nbsp;</span>
788
+ <span class="cline-any cline-neutral">&nbsp;</span>
789
+ <span class="cline-any cline-neutral">&nbsp;</span>
790
+ <span class="cline-any cline-yes">1x</span>
791
+ <span class="cline-any cline-yes">30x</span>
792
+ <span class="cline-any cline-yes">30x</span>
793
+ <span class="cline-any cline-yes">30x</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</span>
795
+ <span class="cline-any cline-neutral">&nbsp;</span>
796
+ <span class="cline-any cline-neutral">&nbsp;</span>
797
+ <span class="cline-any cline-yes">30x</span>
798
+ <span class="cline-any cline-neutral">&nbsp;</span>
799
+ <span class="cline-any cline-neutral">&nbsp;</span>
800
+ <span class="cline-any cline-neutral">&nbsp;</span>
801
+ <span class="cline-any cline-yes">30x</span>
802
+ <span class="cline-any cline-yes">30x</span>
803
+ <span class="cline-any cline-yes">30x</span>
804
+ <span class="cline-any cline-yes">30x</span>
805
+ <span class="cline-any cline-yes">30x</span>
806
+ <span class="cline-any cline-yes">30x</span>
807
+ <span class="cline-any cline-yes">30x</span>
808
+ <span class="cline-any cline-yes">30x</span>
809
+ <span class="cline-any cline-yes">30x</span>
810
+ <span class="cline-any cline-yes">4x</span>
811
+ <span class="cline-any cline-yes">4x</span>
812
+ <span class="cline-any cline-yes">30x</span>
813
+ <span class="cline-any cline-yes">30x</span>
814
+ <span class="cline-any cline-neutral">&nbsp;</span>
815
+ <span class="cline-any cline-yes">30x</span>
816
+ <span class="cline-any cline-yes">1x</span>
817
+ <span class="cline-any cline-yes">1x</span>
818
+ <span class="cline-any cline-yes">1x</span>
819
+ <span class="cline-any cline-yes">1x</span>
820
+ <span class="cline-any cline-yes">1x</span>
821
+ <span class="cline-any cline-yes">1x</span>
822
+ <span class="cline-any cline-yes">1x</span>
823
+ <span class="cline-any cline-yes">1x</span>
824
+ <span class="cline-any cline-yes">1x</span>
825
+ <span class="cline-any cline-yes">1x</span>
826
+ <span class="cline-any cline-yes">1x</span>
827
+ <span class="cline-any cline-yes">1x</span>
828
+ <span class="cline-any cline-yes">1x</span>
829
+ <span class="cline-any cline-yes">1x</span>
830
+ <span class="cline-any cline-yes">1x</span>
831
+ <span class="cline-any cline-yes">1x</span>
832
+ <span class="cline-any cline-yes">1x</span>
833
+ <span class="cline-any cline-yes">1x</span>
834
+ <span class="cline-any cline-yes">1x</span>
835
+ <span class="cline-any cline-yes">1x</span>
836
+ <span class="cline-any cline-yes">1x</span>
837
+ <span class="cline-any cline-yes">1x</span>
838
+ <span class="cline-any cline-yes">1x</span>
839
+ <span class="cline-any cline-yes">1x</span>
840
+ <span class="cline-any cline-yes">30x</span>
841
+ <span class="cline-any cline-yes">2x</span>
842
+ <span class="cline-any cline-yes">2x</span>
843
+ <span class="cline-any cline-yes">2x</span>
844
+ <span class="cline-any cline-yes">2x</span>
845
+ <span class="cline-any cline-yes">2x</span>
846
+ <span class="cline-any cline-neutral">&nbsp;</span>
847
+ <span class="cline-any cline-yes">30x</span>
848
+ <span class="cline-any cline-neutral">&nbsp;</span>
849
+ <span class="cline-any cline-yes">6x</span>
850
+ <span class="cline-any cline-yes">6x</span>
851
+ <span class="cline-any cline-yes">6x</span>
852
+ <span class="cline-any cline-yes">6x</span>
853
+ <span class="cline-any cline-yes">6x</span>
854
+ <span class="cline-any cline-yes">1x</span>
855
+ <span class="cline-any cline-yes">1x</span>
856
+ <span class="cline-any cline-yes">6x</span>
857
+ <span class="cline-any cline-yes">2x</span>
858
+ <span class="cline-any cline-yes">1x</span>
859
+ <span class="cline-any cline-yes">1x</span>
860
+ <span class="cline-any cline-yes">1x</span>
861
+ <span class="cline-any cline-yes">1x</span>
862
+ <span class="cline-any cline-yes">1x</span>
863
+ <span class="cline-any cline-yes">1x</span>
864
+ <span class="cline-any cline-yes">1x</span>
865
+ <span class="cline-any cline-yes">1x</span>
866
+ <span class="cline-any cline-yes">1x</span>
867
+ <span class="cline-any cline-yes">1x</span>
868
+ <span class="cline-any cline-yes">1x</span>
869
+ <span class="cline-any cline-yes">2x</span>
870
+ <span class="cline-any cline-yes">2x</span>
871
+ <span class="cline-any cline-yes">2x</span>
872
+ <span class="cline-any cline-yes">2x</span>
873
+ <span class="cline-any cline-yes">2x</span>
874
+ <span class="cline-any cline-neutral">&nbsp;</span>
875
+ <span class="cline-any cline-yes">6x</span>
876
+ <span class="cline-any cline-yes">1x</span>
877
+ <span class="cline-any cline-yes">1x</span>
878
+ <span class="cline-any cline-yes">2x</span>
879
+ <span class="cline-any cline-yes">2x</span>
880
+ <span class="cline-any cline-yes">2x</span>
881
+ <span class="cline-any cline-yes">2x</span>
882
+ <span class="cline-any cline-yes">2x</span>
883
+ <span class="cline-any cline-yes">2x</span>
884
+ <span class="cline-any cline-yes">2x</span>
885
+ <span class="cline-any cline-yes">2x</span>
886
+ <span class="cline-any cline-yes">2x</span>
887
+ <span class="cline-any cline-yes">2x</span>
888
+ <span class="cline-any cline-yes">1x</span>
889
+ <span class="cline-any cline-yes">1x</span>
890
+ <span class="cline-any cline-yes">1x</span>
891
+ <span class="cline-any cline-yes">6x</span>
892
+ <span class="cline-any cline-yes">2x</span>
893
+ <span class="cline-any cline-yes">2x</span>
894
+ <span class="cline-any cline-yes">2x</span>
895
+ <span class="cline-any cline-yes">2x</span>
896
+ <span class="cline-any cline-yes">2x</span>
897
+ <span class="cline-any cline-yes">2x</span>
898
+ <span class="cline-any cline-yes">2x</span>
899
+ <span class="cline-any cline-yes">2x</span>
900
+ <span class="cline-any cline-yes">1x</span>
901
+ <span class="cline-any cline-yes">1x</span>
902
+ <span class="cline-any cline-yes">1x</span>
903
+ <span class="cline-any cline-yes">1x</span>
904
+ <span class="cline-any cline-yes">1x</span>
905
+ <span class="cline-any cline-yes">2x</span>
906
+ <span class="cline-any cline-yes">2x</span>
907
+ <span class="cline-any cline-neutral">&nbsp;</span>
908
+ <span class="cline-any cline-yes">30x</span>
909
+ <span class="cline-any cline-yes">3x</span>
910
+ <span class="cline-any cline-yes">3x</span>
911
+ <span class="cline-any cline-yes">3x</span>
912
+ <span class="cline-any cline-yes">3x</span>
913
+ <span class="cline-any cline-yes">3x</span>
914
+ <span class="cline-any cline-yes">3x</span>
915
+ <span class="cline-any cline-yes">3x</span>
916
+ <span class="cline-any cline-yes">3x</span>
917
+ <span class="cline-any cline-yes">3x</span>
918
+ <span class="cline-any cline-yes">3x</span>
919
+ <span class="cline-any cline-yes">3x</span>
920
+ <span class="cline-any cline-neutral">&nbsp;</span>
921
+ <span class="cline-any cline-yes">14x</span>
922
+ <span class="cline-any cline-yes">14x</span>
923
+ <span class="cline-any cline-yes">30x</span>
924
+ <span class="cline-any cline-yes">30x</span>
925
+ <span class="cline-any cline-neutral">&nbsp;</span>
926
+ <span class="cline-any cline-yes">1x</span>
927
+ <span class="cline-any cline-yes">12x</span>
928
+ <span class="cline-any cline-yes">12x</span>
929
+ <span class="cline-any cline-yes">12x</span>
930
+ <span class="cline-any cline-yes">12x</span>
931
+ <span class="cline-any cline-yes">12x</span>
932
+ <span class="cline-any cline-yes">12x</span>
933
+ <span class="cline-any cline-yes">12x</span>
934
+ <span class="cline-any cline-yes">12x</span>
935
+ <span class="cline-any cline-yes">12x</span>
936
+ <span class="cline-any cline-yes">12x</span>
937
+ <span class="cline-any cline-yes">12x</span>
938
+ <span class="cline-any cline-yes">12x</span>
939
+ <span class="cline-any cline-yes">15x</span>
940
+ <span class="cline-any cline-yes">15x</span>
941
+ <span class="cline-any cline-yes">1x</span>
942
+ <span class="cline-any cline-yes">1x</span>
943
+ <span class="cline-any cline-yes">15x</span>
944
+ <span class="cline-any cline-yes">15x</span>
945
+ <span class="cline-any cline-yes">15x</span>
946
+ <span class="cline-any cline-yes">15x</span>
947
+ <span class="cline-any cline-yes">15x</span>
948
+ <span class="cline-any cline-yes">15x</span>
949
+ <span class="cline-any cline-yes">15x</span>
950
+ <span class="cline-any cline-yes">15x</span>
951
+ <span class="cline-any cline-yes">15x</span>
952
+ <span class="cline-any cline-yes">15x</span>
953
+ <span class="cline-any cline-yes">15x</span>
954
+ <span class="cline-any cline-yes">15x</span>
955
+ <span class="cline-any cline-yes">15x</span>
956
+ <span class="cline-any cline-yes">3x</span>
957
+ <span class="cline-any cline-yes">3x</span>
958
+ <span class="cline-any cline-yes">12x</span>
959
+ <span class="cline-any cline-yes">15x</span>
960
+ <span class="cline-any cline-yes">15x</span>
961
+ <span class="cline-any cline-yes">15x</span>
962
+ <span class="cline-any cline-yes">15x</span>
963
+ <span class="cline-any cline-yes">15x</span>
964
+ <span class="cline-any cline-yes">15x</span>
965
+ <span class="cline-any cline-yes">15x</span>
966
+ <span class="cline-any cline-yes">12x</span>
967
+ <span class="cline-any cline-yes">12x</span>
968
+ <span class="cline-any cline-neutral">&nbsp;</span>
969
+ <span class="cline-any cline-yes">1x</span>
970
+ <span class="cline-any cline-yes">5x</span>
971
+ <span class="cline-any cline-yes">5x</span>
972
+ <span class="cline-any cline-yes">5x</span>
973
+ <span class="cline-any cline-yes">5x</span>
974
+ <span class="cline-any cline-yes">5x</span>
975
+ <span class="cline-any cline-yes">5x</span>
976
+ <span class="cline-any cline-yes">7x</span>
977
+ <span class="cline-any cline-yes">7x</span>
978
+ <span class="cline-any cline-yes">7x</span>
979
+ <span class="cline-any cline-yes">5x</span>
980
+ <span class="cline-any cline-yes">5x</span>
981
+ <span class="cline-any cline-yes">5x</span>
982
+ <span class="cline-any cline-yes">5x</span>
983
+ <span class="cline-any cline-neutral">&nbsp;</span>
984
+ <span class="cline-any cline-yes">1x</span>
985
+ <span class="cline-any cline-yes">7x</span>
986
+ <span class="cline-any cline-yes">7x</span>
987
+ <span class="cline-any cline-yes">7x</span>
988
+ <span class="cline-any cline-yes">7x</span>
989
+ <span class="cline-any cline-yes">7x</span>
990
+ <span class="cline-any cline-neutral">&nbsp;</span>
991
+ <span class="cline-any cline-yes">7x</span>
992
+ <span class="cline-any cline-yes">3x</span>
993
+ <span class="cline-any cline-yes">3x</span>
994
+ <span class="cline-any cline-yes">3x</span>
995
+ <span class="cline-any cline-yes">3x</span>
996
+ <span class="cline-any cline-yes">3x</span>
997
+ <span class="cline-any cline-yes">4x</span>
998
+ <span class="cline-any cline-yes">4x</span>
999
+ <span class="cline-any cline-yes">4x</span>
1000
+ <span class="cline-any cline-yes">4x</span>
1001
+ <span class="cline-any cline-yes">4x</span>
1002
+ <span class="cline-any cline-yes">3x</span>
1003
+ <span class="cline-any cline-yes">3x</span>
1004
+ <span class="cline-any cline-yes">3x</span>
1005
+ <span class="cline-any cline-yes">7x</span>
1006
+ <span class="cline-any cline-yes">7x</span>
1007
+ <span class="cline-any cline-yes">7x</span>
1008
+ <span class="cline-any cline-yes">7x</span>
1009
+ <span class="cline-any cline-yes">7x</span>
1010
+ <span class="cline-any cline-yes">7x</span>
1011
+ <span class="cline-any cline-yes">7x</span>
1012
+ <span class="cline-any cline-neutral">&nbsp;</span>
1013
+ <span class="cline-any cline-yes">1x</span>
1014
+ <span class="cline-any cline-yes">6x</span>
1015
+ <span class="cline-any cline-yes">6x</span>
1016
+ <span class="cline-any cline-yes">6x</span>
1017
+ <span class="cline-any cline-yes">11x</span>
1018
+ <span class="cline-any cline-yes">11x</span>
1019
+ <span class="cline-any cline-yes">6x</span>
1020
+ <span class="cline-any cline-yes">6x</span>
1021
+ <span class="cline-any cline-yes">6x</span>
1022
+ <span class="cline-any cline-yes">5x</span>
1023
+ <span class="cline-any cline-yes">5x</span>
1024
+ <span class="cline-any cline-yes">11x</span>
1025
+ <span class="cline-any cline-yes">1x</span>
1026
+ <span class="cline-any cline-yes">1x</span>
1027
+ <span class="cline-any cline-yes">4x</span>
1028
+ <span class="cline-any cline-yes">6x</span>
1029
+ <span class="cline-any cline-yes">6x</span>
1030
+ <span class="cline-any cline-yes">6x</span>
1031
+ <span class="cline-any cline-yes">1x</span>
1032
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Inject, Injectable } from '@nestjs/common';
1033
+ import { ConfigProviderService, GenericObject, PersistanceSelectOperator, RDBType } from '@node-c/core';
1034
+ &nbsp;
1035
+ import { getNested } from '@ramster/general-tools';
1036
+ &nbsp;
1037
+ import { DeleteQueryBuilder, ObjectLiteral, SelectQueryBuilder, UpdateQueryBuilder } from 'typeorm';
1038
+ import { SoftDeleteQueryBuilder } from 'typeorm/query-builder/SoftDeleteQueryBuilder';
1039
+ &nbsp;
1040
+ import { BuildQueryOptions, IncludeItems, OrderBy, ParsedFilter } from './sqlQueryBuilder.definitions';
1041
+ &nbsp;
1042
+ import { Constants } from '../common/definitions';
1043
+ &nbsp;
1044
+ @Injectable()
1045
+ export class SQLQueryBuilderService {
1046
+ allowedStringOperators: string[] = Object.values(PersistanceSelectOperator);
1047
+ columnQuotesSymbol: string;
1048
+ dbType: RDBType;
1049
+ iLikeSupported: boolean;
1050
+ &nbsp;
1051
+ constructor(
1052
+ public configProvider: ConfigProviderService,
1053
+ @Inject(Constants.SQL_BUILDER_DB_CONFIG_PATH)
1054
+ public dbConfigPath: string
1055
+ ) {
1056
+ const { type } = getNested(configProvider, dbConfigPath) as { type: RDBType };
1057
+ this.dbType = type;
1058
+ if (type === RDBType.MySQL) {
1059
+ this.columnQuotesSymbol = '`';
1060
+ this.iLikeSupported = false;
1061
+ } else if (type === RDBType.PG) {
1062
+ this.columnQuotesSymbol = '"';
1063
+ this.iLikeSupported = true;
1064
+ }
1065
+ }
1066
+ &nbsp;
1067
+ buildQuery&lt;Entity extends ObjectLiteral&gt;(
1068
+ queryBuilder:
1069
+ | SelectQueryBuilder&lt;Entity&gt;
1070
+ | UpdateQueryBuilder&lt;Entity&gt;
1071
+ | DeleteQueryBuilder&lt;Entity&gt;
1072
+ | SoftDeleteQueryBuilder&lt;Entity&gt;,
1073
+ options: BuildQueryOptions
1074
+ ): void {
1075
+ const { where, include, orderBy, select, withDeleted = false } = options;
1076
+ const cqs = this.columnQuotesSymbol;
1077
+ const deletedColumnName = options.deletedColumnName || 'deletedAt';
1078
+ if (queryBuilder instanceof SelectQueryBuilder) {
1079
+ if (withDeleted) {
1080
+ queryBuilder.withDeleted();
1081
+ }
1082
+ if (include) {
1083
+ for (const relationProperty in include) {
1084
+ if (withDeleted) {
1085
+ queryBuilder.leftJoinAndSelect(relationProperty, include[relationProperty]);
1086
+ } else {
1087
+ queryBuilder.leftJoinAndSelect(
1088
+ relationProperty,
1089
+ include[relationProperty],
1090
+ `${cqs}${include[relationProperty]}${cqs}.${cqs}${deletedColumnName}${cqs} IS NULL`
1091
+ );
1092
+ }
1093
+ }
1094
+ }
1095
+ if (select &amp;&amp; select.length) {
1096
+ queryBuilder.select(this.parseSelect(select, include));
1097
+ }
1098
+ }
1099
+ if (where) {
1100
+ let isFirst = true;
1101
+ for (const fieldName in where) {
1102
+ const whereItem = where[fieldName];
1103
+ if (!whereItem.query.length) {
1104
+ continue;
1105
+ }
1106
+ let methodName = 'where';
1107
+ if (isFirst) {
1108
+ isFirst = false;
1109
+ } else {
1110
+ methodName = fieldName === PersistanceSelectOperator.<span class="branch-0 cbranch-no" title="branch not covered" >Or ? 'orWhere' : '</span>andWhere';
1111
+ // methodName = 'andWhere';
1112
+ }
1113
+ (queryBuilder as unknown as { [methodName: string]: (..._args: unknown[]) =&gt; void })[methodName](
1114
+ whereItem.query,
1115
+ whereItem.params
1116
+ );
1117
+ }
1118
+ }
1119
+ if (orderBy &amp;&amp; queryBuilder instanceof SelectQueryBuilder) {
1120
+ let isFirst = true;
1121
+ for (const item of orderBy) {
1122
+ let methodName: 'orderBy' | 'addOrderBy' = 'addOrderBy';
1123
+ if (isFirst) {
1124
+ methodName = 'orderBy';
1125
+ isFirst = false;
1126
+ }
1127
+ queryBuilder[methodName](item.field, item.direction);
1128
+ }
1129
+ }
1130
+ }
1131
+ &nbsp;
1132
+ getValueForFilter(
1133
+ entityName: string,
1134
+ fieldName: string,
1135
+ fieldAlias: string,
1136
+ fieldValue: unknown,
1137
+ isNot: boolean,
1138
+ operator?: PersistanceSelectOperator
1139
+ ): ParsedFilter {
1140
+ const { columnQuotesSymbol: cqs, dbType } = this;
1141
+ const escapedFieldAlias = fieldAlias.replace(/\$/, '__ds__');
1142
+ const fieldString = `${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs}`;
1143
+ const parsedInnerValue = fieldValue instanceof Date ? fieldValue.valueOf() : fieldValue;
1144
+ if (operator === PersistanceSelectOperator.Contains) {
1145
+ let query = '';
1146
+ if (dbType === RDBType.MySQL) {
1147
+ query = `JSON_CONTAINS(${fieldString}, :${escapedFieldAlias})`;
1148
+ } else if (dbType === RDBType.PG) {
1149
+ query = `${fieldString} ? :${escapedFieldAlias}`;
1150
+ }
1151
+ return {
1152
+ params: { [escapedFieldAlias]: parsedInnerValue },
1153
+ query
1154
+ };
1155
+ }
1156
+ if (operator === PersistanceSelectOperator.GreaterThan) {
1157
+ return {
1158
+ params: { [escapedFieldAlias]: parsedInnerValue },
1159
+ query: `${fieldString} &gt; :${escapedFieldAlias}`
1160
+ };
1161
+ }
1162
+ if (operator === PersistanceSelectOperator.GreaterThanOrEqual) {
1163
+ return {
1164
+ params: { [escapedFieldAlias]: parsedInnerValue },
1165
+ query: `${fieldString} &gt;= :${escapedFieldAlias}`
1166
+ };
1167
+ }
1168
+ if (operator === PersistanceSelectOperator.LessThan) {
1169
+ return {
1170
+ params: { [escapedFieldAlias]: parsedInnerValue },
1171
+ query: `${fieldString} &lt; :${escapedFieldAlias}`
1172
+ };
1173
+ }
1174
+ if (operator === PersistanceSelectOperator.LessThanOrEqual) {
1175
+ return {
1176
+ params: { [escapedFieldAlias]: parsedInnerValue },
1177
+ query: `${fieldString} &lt;= :${escapedFieldAlias}`
1178
+ };
1179
+ }
1180
+ if (
1181
+ operator === PersistanceSelectOperator.Like ||
1182
+ (operator === PersistanceSelectOperator.ILike &amp;&amp; !this.iLikeSupported)
1183
+ ) {
1184
+ return {
1185
+ params: { [escapedFieldAlias]: parsedInnerValue },
1186
+ query: `${fieldString}${isNot ? ' not ' : ' '}` + `like :${escapedFieldAlias}`
1187
+ };
1188
+ }
1189
+ if (operator === PersistanceSelectOperator.ILike) {
1190
+ return {
1191
+ params: { [escapedFieldAlias]: typeof parsedInnerValue },
1192
+ query: `${fieldString}${isNot ? ' not ' : ' '}` + `ilike :${escapedFieldAlias}`
1193
+ };
1194
+ }
1195
+ return {
1196
+ params: { [escapedFieldAlias]: parsedInnerValue },
1197
+ query: `${fieldString} ${isNot ? '!=' : '='} :${escapedFieldAlias}`
1198
+ };
1199
+ }
1200
+ &nbsp;
1201
+ parseArrayOfFilters(
1202
+ filtersArray: unknown[],
1203
+ fieldAlias: string
1204
+ ): {
1205
+ hasValues: boolean;
1206
+ isSimple: boolean;
1207
+ paramsForQuery: GenericObject;
1208
+ queryTemplateParamNames: string;
1209
+ } {
1210
+ let isSimple = true;
1211
+ let hasValues = false;
1212
+ const paramsForQuery: GenericObject = {};
1213
+ let queryTemplateParamNames = '';
1214
+ for (const i in filtersArray) {
1215
+ const fieldValueItem = filtersArray[i];
1216
+ if (typeof fieldValueItem === 'undefined') {
1217
+ continue;
1218
+ }
1219
+ if (!hasValues) {
1220
+ hasValues = true;
1221
+ }
1222
+ if (
1223
+ fieldValueItem === null ||
1224
+ typeof fieldValueItem === 'string' ||
1225
+ typeof fieldValueItem === 'number' ||
1226
+ typeof fieldValueItem === 'bigint' ||
1227
+ typeof fieldValueItem === 'symbol' ||
1228
+ typeof fieldValueItem === 'boolean'
1229
+ ) {
1230
+ const queryParamName = `${fieldAlias}_${i}`;
1231
+ queryTemplateParamNames += `:${queryParamName}, `;
1232
+ paramsForQuery[queryParamName] = fieldValueItem;
1233
+ continue;
1234
+ }
1235
+ if (fieldValueItem instanceof Date) {
1236
+ const queryParamName = `${fieldAlias}_${i}`;
1237
+ queryTemplateParamNames += `:${queryParamName}, `;
1238
+ paramsForQuery[queryParamName] = fieldValueItem.valueOf();
1239
+ continue;
1240
+ }
1241
+ if (isSimple) {
1242
+ isSimple = false;
1243
+ break;
1244
+ }
1245
+ }
1246
+ return { hasValues, isSimple, paramsForQuery, queryTemplateParamNames };
1247
+ }
1248
+ &nbsp;
1249
+ /*
1250
+ * This method is a tid bit complex, so it requires a proper explanation. The idea is that you can pass a deeply nested filters object (example below)
1251
+ * and receive back two objects - a 'where' object containg the where clause partials and their paramters, ready to be fed to the query builder,
1252
+ * and an 'include' object, containing the relations that need to be joined for the parsed where clause partials, provided there are any. This effectively
1253
+ * enables search by deeply nested fields, for example relatedEntity.deepRelatedEntity.deeperRelatedEntity.field = 'test'.
1254
+ * For further low-level details, check these issues: https://github.com/typeorm/typeorm/issues/2707, https://github.com/typeorm/typeorm/issues/3890
1255
+ * Example object:
1256
+ * {
1257
+ * field0: null,
1258
+ * field1: { $not: null },
1259
+ * field2: { $not: [ 1, new Date(), 2, null, 3, true, 'test' ] },
1260
+ * field3: [ 1, 2, 3 ],
1261
+ * field4: 10,
1262
+ * field5: 'test',
1263
+ * field6: false,
1264
+ * field7: new Date(),
1265
+ * field8: [ 1, new Date(), 2, null, 3, true, 'test' ],
1266
+ * field9: { $like: '%test%' },
1267
+ * entityName.innerEntityName.field10: { $between: [ 10, 20 ] },
1268
+ * field11: { $or: [ { $not: null }, 20, [ false, { $ilike: '%test' } ] ] },
1269
+ * field12: undefined,
1270
+ * $or: { ... }
1271
+ * }
1272
+ */
1273
+ parseFilters(
1274
+ entityName: string,
1275
+ filters: GenericObject,
1276
+ options: {
1277
+ fieldAliases?: { [fieldName: string]: string };
1278
+ isTopLevel: boolean;
1279
+ operator?: PersistanceSelectOperator;
1280
+ } = { isTopLevel: true }
1281
+ ): {
1282
+ where: { [fieldName: string]: ParsedFilter };
1283
+ include: IncludeItems;
1284
+ } {
1285
+ const cqs = this.columnQuotesSymbol;
1286
+ const { isTopLevel, operator } = options;
1287
+ const fieldAliases = options.fieldAliases || {};
1288
+ const where: { [fieldName: string]: ParsedFilter } = {};
1289
+ let include: IncludeItems = {};
1290
+ for (const fieldName in filters) {
1291
+ const fieldValue = filters[fieldName];
1292
+ if (typeof fieldValue === 'undefined') {
1293
+ continue;
1294
+ }
1295
+ const fieldAlias = fieldAliases[fieldName] || fieldName;
1296
+ const isNot = operator === PersistanceSelectOperator.Not;
1297
+ // handle relation fields
1298
+ if (fieldName.match(/\./)) {
1299
+ const fieldData = fieldName.split('.');
1300
+ const finalItemIndex = fieldData.length - 1;
1301
+ const actualFieldName = fieldData[finalItemIndex];
1302
+ let entityAlias = `${entityName}`;
1303
+ let previousEntityAlias = `${entityName}`;
1304
+ for (let i = 0; i &lt; finalItemIndex; i++) {
1305
+ const currentEntityName = fieldData[i];
1306
+ entityAlias += `_${currentEntityName}`;
1307
+ include[`${previousEntityAlias}.${currentEntityName}`] = entityAlias;
1308
+ previousEntityAlias = `${entityAlias}`;
1309
+ }
1310
+ const itemData = this.parseFilters(
1311
+ entityAlias,
1312
+ { [actualFieldName]: fieldValue },
1313
+ {
1314
+ fieldAliases: { [actualFieldName]: fieldAlias },
1315
+ isTopLevel: false,
1316
+ operator
1317
+ }
1318
+ );
1319
+ where[fieldName] = itemData.where[actualFieldName];
1320
+ include = { ...include, ...itemData.include };
1321
+ continue;
1322
+ }
1323
+ if (fieldValue === null) {
1324
+ where[fieldName] = {
1325
+ query: `${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs} is${isNot ? ' not ' : ' '}null`
1326
+ };
1327
+ continue;
1328
+ }
1329
+ // handle array values
1330
+ if (fieldValue instanceof Array) {
1331
+ // if all values are primitive types and/or dates, then use 'between' (if provided) or 'in'
1332
+ const { hasValues, isSimple, paramsForQuery, queryTemplateParamNames } = this.parseArrayOfFilters(
1333
+ fieldValue,
1334
+ fieldAlias
1335
+ );
1336
+ if (!hasValues) {
1337
+ continue;
1338
+ }
1339
+ if (isSimple) {
1340
+ if (operator === PersistanceSelectOperator.Between) {
1341
+ where[fieldName] = {
1342
+ params: paramsForQuery,
1343
+ query:
1344
+ `${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs}${<span class="branch-0 cbranch-no" title="branch not covered" >isNot ? ' not ' : '</span> '}` +
1345
+ `between :${fieldAlias}_0 and :${fieldAlias}_1`
1346
+ };
1347
+ continue;
1348
+ }
1349
+ where[fieldName] = {
1350
+ params: paramsForQuery,
1351
+ query:
1352
+ `${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs}${<span class="branch-0 cbranch-no" title="branch not covered" >isNot ? ' not ' : '</span> '}` +
1353
+ `in (${queryTemplateParamNames.replace(/,\s$/, '')})`
1354
+ };
1355
+ continue;
1356
+ }
1357
+ // otherwise, go through the array's items recursively and build the query
1358
+ if (isTopLevel &amp;&amp; fieldName === PersistanceSelectOperator.Or) {
1359
+ const finalWhereValue = { params: {}, query: '' };
1360
+ fieldValue.forEach((orFieldValue, orFieldIndex) =&gt; {
1361
+ const itemData = this.parseInnerFilters(
1362
+ entityName,
1363
+ orFieldValue,
1364
+ fieldName,
1365
+ `${fieldAlias}_${orFieldIndex}_f`,
1366
+ operator
1367
+ );
1368
+ finalWhereValue.params = { ...finalWhereValue.params, ...(itemData.parsedFilter.<span class="branch-0 cbranch-no" title="branch not covered" >params || {}) }</span>;
1369
+ finalWhereValue.query += `${finalWhereValue.query.length ? ' or ' : '('}${itemData.parsedFilter.query}`;
1370
+ include = { ...include, ...itemData.include };
1371
+ });
1372
+ finalWhereValue.query += ')';
1373
+ where[fieldName] = finalWhereValue;
1374
+ } else {
1375
+ const itemData = this.parseInnerFilters(
1376
+ entityName,
1377
+ fieldValue as unknown as GenericObject,
1378
+ fieldName,
1379
+ fieldAlias,
1380
+ operator
1381
+ );
1382
+ if (itemData.parsedFilter.query === '()') {
1383
+ continue;
1384
+ }
1385
+ where[fieldName] = itemData.parsedFilter;
1386
+ include = { ...include, ...itemData.include };
1387
+ }
1388
+ continue;
1389
+ }
1390
+ // handle non-date object values - go through the object's values recursively and build the query
1391
+ if (typeof fieldValue === 'object' &amp;&amp; !(fieldValue instanceof Date)) {
1392
+ const itemData = this.parseInnerFilters(
1393
+ entityName,
1394
+ fieldValue as unknown as GenericObject,
1395
+ fieldName,
1396
+ fieldAlias,
1397
+ operator
1398
+ );
1399
+ where[fieldName] = itemData.parsedFilter;
1400
+ include = { ...include, ...itemData.include };
1401
+ continue;
1402
+ }
1403
+ // handle the rest of the allowed operators and the $not operator, where applicable
1404
+ where[fieldName] = this.getValueForFilter(entityName, fieldName, fieldAlias, fieldValue, isNot, operator);
1405
+ }
1406
+ return { where, include };
1407
+ }
1408
+ &nbsp;
1409
+ parseInnerFilters(
1410
+ entityName: string,
1411
+ filtersObject: GenericObject,
1412
+ fieldName: string,
1413
+ fieldAlias: string,
1414
+ operator?: PersistanceSelectOperator
1415
+ ): { parsedFilter: ParsedFilter; include: IncludeItems } {
1416
+ const itemsCount = filtersObject instanceof Array ? filtersObject.length : Object.keys(filtersObject).length;
1417
+ const hasBrackets = itemsCount &gt; 1;
1418
+ const parsedFilterItem = { params: {}, query: '' };
1419
+ let parsedValueCount = 0;
1420
+ let include = {};
1421
+ for (const key in filtersObject) {
1422
+ let op = null;
1423
+ if (this.allowedStringOperators.indexOf(key) !== -1) {
1424
+ op = key;
1425
+ }
1426
+ const actualFieldName = fieldName === PersistanceSelectOperator.Or ? key : fieldName;
1427
+ const innerValue = filtersObject[key];
1428
+ const itemData = this.parseFilters(
1429
+ entityName,
1430
+ { [actualFieldName]: innerValue },
1431
+ {
1432
+ fieldAliases: { [actualFieldName]: `${fieldAlias}_${parsedValueCount}` },
1433
+ isTopLevel: false,
1434
+ operator: op as PersistanceSelectOperator
1435
+ }
1436
+ );
1437
+ const fieldWhereData = itemData.where[actualFieldName];
1438
+ if (!fieldWhereData) {
1439
+ continue;
1440
+ }
1441
+ const innerQuery = itemData.where[actualFieldName].query;
1442
+ parsedFilterItem.params = { ...parsedFilterItem.params, ...(fieldWhereData.<span class="branch-0 cbranch-no" title="branch not covered" >params || {}) }</span>;
1443
+ parsedFilterItem.query +=
1444
+ (parsedValueCount &gt; 0 ? (operator === PersistanceSelectOperator.Or ? ' or ' : ' and ') : '') +
1445
+ (hasBrackets ? `(${innerQuery})` : innerQuery);
1446
+ include = { ...include, ...itemData.include };
1447
+ parsedValueCount++;
1448
+ }
1449
+ return { parsedFilter: parsedFilterItem, include };
1450
+ }
1451
+ &nbsp;
1452
+ parseRelations(entityName: string, include: string[], currentInclude?: IncludeItems): IncludeItems {
1453
+ const resultInclude: IncludeItems = { ...(currentInclude || {}) };
1454
+ include.forEach(includeItem =&gt; {
1455
+ const includeData = includeItem.split('.');
1456
+ let entityAlias = `${entityName}`;
1457
+ let previousEntityAlias = `${entityName}`;
1458
+ includeData.forEach(currentEntityName =&gt; {
1459
+ entityAlias += `_${currentEntityName}`;
1460
+ resultInclude[`${previousEntityAlias}.${currentEntityName}`] = entityAlias;
1461
+ previousEntityAlias = `${entityAlias}`;
1462
+ });
1463
+ });
1464
+ return resultInclude;
1465
+ }
1466
+ &nbsp;
1467
+ parseOrderBy(entityName: string, orderByData: GenericObject&lt;string&gt;): { include: IncludeItems; orderBy: OrderBy[] } {
1468
+ const orderBy: OrderBy[] = [];
1469
+ let include: IncludeItems = {};
1470
+ for (const fieldName in orderByData) {
1471
+ const direction = orderByData[fieldName].toLowerCase() === 'desc' ? 'DESC' : 'ASC';
1472
+ const item: OrderBy = { field: `${entityName}.${fieldName}`, direction };
1473
+ // handle relation fields
1474
+ if (fieldName.match(/\./)) {
1475
+ const fieldData = fieldName.split('.');
1476
+ const finalItemIndex = fieldData.length - 1;
1477
+ let entityAlias = `${entityName}`;
1478
+ let previousEntityAlias = `${entityName}`;
1479
+ for (let i = 0; i &lt; finalItemIndex; i++) {
1480
+ const currentEntityName = fieldData[i];
1481
+ entityAlias += `_${currentEntityName}`;
1482
+ include[`${previousEntityAlias}.${currentEntityName}`] = entityAlias;
1483
+ previousEntityAlias = `${entityAlias}`;
1484
+ }
1485
+ include = { ...include };
1486
+ item.field = `${previousEntityAlias}.${fieldData[finalItemIndex]}`;
1487
+ }
1488
+ orderBy.push(item);
1489
+ }
1490
+ return {
1491
+ include,
1492
+ orderBy
1493
+ };
1494
+ }
1495
+ &nbsp;
1496
+ parseSelect(selectFields: string[], include?: IncludeItems): string[] {
1497
+ const actualInclude = include || {};
1498
+ const parsedSelect: string[] = [];
1499
+ selectFields.forEach(item =&gt; {
1500
+ const itemData = item.split('.');
1501
+ if (itemData.length === 1) {
1502
+ parsedSelect.push(item);
1503
+ return;
1504
+ }
1505
+ const fieldName = itemData.pop();
1506
+ const entityAlias = actualInclude[itemData.join('.')];
1507
+ if (!entityAlias) {
1508
+ return;
1509
+ }
1510
+ parsedSelect.push(`${entityAlias}.${fieldName}`);
1511
+ });
1512
+ return parsedSelect;
1513
+ }
1514
+ }
1515
+ &nbsp;</pre></td></tr></table></pre>
1516
+
1517
+ <div class='push'></div><!-- for sticky footer -->
1518
+ </div><!-- /wrapper -->
1519
+ <div class='footer quiet pad2 space-top1 center small'>
1520
+ Code coverage generated by
1521
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1522
+ at 2025-03-20T21:05:41.984Z
1523
+ </div>
1524
+ <script src="../prettify.js"></script>
1525
+ <script>
1526
+ window.onload = function () {
1527
+ prettyPrint();
1528
+ };
1529
+ </script>
1530
+ <script src="../sorter.js"></script>
1531
+ <script src="../block-navigation.js"></script>
1532
+ </body>
1533
+ </html>
1534
+