@openwebf/webf 0.22.3 → 0.22.5

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 (40) hide show
  1. package/dist/IDLBlob.js +17 -0
  2. package/dist/analyzer.js +578 -0
  3. package/dist/analyzer_original.js +467 -0
  4. package/dist/commands.js +704 -0
  5. package/dist/dart.js +300 -0
  6. package/dist/declaration.js +63 -0
  7. package/dist/generator.js +466 -0
  8. package/dist/logger.js +103 -0
  9. package/dist/react.js +283 -0
  10. package/dist/utils.js +127 -0
  11. package/dist/vue.js +159 -0
  12. package/package.json +11 -1
  13. package/src/dart.ts +138 -7
  14. package/templates/class.dart.tpl +7 -2
  15. package/templates/react.package.json.tpl +1 -1
  16. package/CLAUDE.md +0 -206
  17. package/README-zhCN.md +0 -256
  18. package/coverage/clover.xml +0 -1295
  19. package/coverage/coverage-final.json +0 -12
  20. package/coverage/lcov-report/IDLBlob.ts.html +0 -142
  21. package/coverage/lcov-report/analyzer.ts.html +0 -2158
  22. package/coverage/lcov-report/analyzer_original.ts.html +0 -1450
  23. package/coverage/lcov-report/base.css +0 -224
  24. package/coverage/lcov-report/block-navigation.js +0 -87
  25. package/coverage/lcov-report/commands.ts.html +0 -700
  26. package/coverage/lcov-report/dart.ts.html +0 -490
  27. package/coverage/lcov-report/declaration.ts.html +0 -337
  28. package/coverage/lcov-report/favicon.png +0 -0
  29. package/coverage/lcov-report/generator.ts.html +0 -1171
  30. package/coverage/lcov-report/index.html +0 -266
  31. package/coverage/lcov-report/logger.ts.html +0 -424
  32. package/coverage/lcov-report/prettify.css +0 -1
  33. package/coverage/lcov-report/prettify.js +0 -2
  34. package/coverage/lcov-report/react.ts.html +0 -619
  35. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  36. package/coverage/lcov-report/sorter.js +0 -196
  37. package/coverage/lcov-report/utils.ts.html +0 -466
  38. package/coverage/lcov-report/vue.ts.html +0 -613
  39. package/coverage/lcov.info +0 -2149
  40. package/jest.config.js +0 -24
@@ -1,2158 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for analyzer.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> analyzer.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">43.73% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>143/327</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">26.61% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>37/139</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">57.89% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>22/38</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">45.12% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>139/308</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>
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>
550
- <a name='L485'></a><a href='#L485'>485</a>
551
- <a name='L486'></a><a href='#L486'>486</a>
552
- <a name='L487'></a><a href='#L487'>487</a>
553
- <a name='L488'></a><a href='#L488'>488</a>
554
- <a name='L489'></a><a href='#L489'>489</a>
555
- <a name='L490'></a><a href='#L490'>490</a>
556
- <a name='L491'></a><a href='#L491'>491</a>
557
- <a name='L492'></a><a href='#L492'>492</a>
558
- <a name='L493'></a><a href='#L493'>493</a>
559
- <a name='L494'></a><a href='#L494'>494</a>
560
- <a name='L495'></a><a href='#L495'>495</a>
561
- <a name='L496'></a><a href='#L496'>496</a>
562
- <a name='L497'></a><a href='#L497'>497</a>
563
- <a name='L498'></a><a href='#L498'>498</a>
564
- <a name='L499'></a><a href='#L499'>499</a>
565
- <a name='L500'></a><a href='#L500'>500</a>
566
- <a name='L501'></a><a href='#L501'>501</a>
567
- <a name='L502'></a><a href='#L502'>502</a>
568
- <a name='L503'></a><a href='#L503'>503</a>
569
- <a name='L504'></a><a href='#L504'>504</a>
570
- <a name='L505'></a><a href='#L505'>505</a>
571
- <a name='L506'></a><a href='#L506'>506</a>
572
- <a name='L507'></a><a href='#L507'>507</a>
573
- <a name='L508'></a><a href='#L508'>508</a>
574
- <a name='L509'></a><a href='#L509'>509</a>
575
- <a name='L510'></a><a href='#L510'>510</a>
576
- <a name='L511'></a><a href='#L511'>511</a>
577
- <a name='L512'></a><a href='#L512'>512</a>
578
- <a name='L513'></a><a href='#L513'>513</a>
579
- <a name='L514'></a><a href='#L514'>514</a>
580
- <a name='L515'></a><a href='#L515'>515</a>
581
- <a name='L516'></a><a href='#L516'>516</a>
582
- <a name='L517'></a><a href='#L517'>517</a>
583
- <a name='L518'></a><a href='#L518'>518</a>
584
- <a name='L519'></a><a href='#L519'>519</a>
585
- <a name='L520'></a><a href='#L520'>520</a>
586
- <a name='L521'></a><a href='#L521'>521</a>
587
- <a name='L522'></a><a href='#L522'>522</a>
588
- <a name='L523'></a><a href='#L523'>523</a>
589
- <a name='L524'></a><a href='#L524'>524</a>
590
- <a name='L525'></a><a href='#L525'>525</a>
591
- <a name='L526'></a><a href='#L526'>526</a>
592
- <a name='L527'></a><a href='#L527'>527</a>
593
- <a name='L528'></a><a href='#L528'>528</a>
594
- <a name='L529'></a><a href='#L529'>529</a>
595
- <a name='L530'></a><a href='#L530'>530</a>
596
- <a name='L531'></a><a href='#L531'>531</a>
597
- <a name='L532'></a><a href='#L532'>532</a>
598
- <a name='L533'></a><a href='#L533'>533</a>
599
- <a name='L534'></a><a href='#L534'>534</a>
600
- <a name='L535'></a><a href='#L535'>535</a>
601
- <a name='L536'></a><a href='#L536'>536</a>
602
- <a name='L537'></a><a href='#L537'>537</a>
603
- <a name='L538'></a><a href='#L538'>538</a>
604
- <a name='L539'></a><a href='#L539'>539</a>
605
- <a name='L540'></a><a href='#L540'>540</a>
606
- <a name='L541'></a><a href='#L541'>541</a>
607
- <a name='L542'></a><a href='#L542'>542</a>
608
- <a name='L543'></a><a href='#L543'>543</a>
609
- <a name='L544'></a><a href='#L544'>544</a>
610
- <a name='L545'></a><a href='#L545'>545</a>
611
- <a name='L546'></a><a href='#L546'>546</a>
612
- <a name='L547'></a><a href='#L547'>547</a>
613
- <a name='L548'></a><a href='#L548'>548</a>
614
- <a name='L549'></a><a href='#L549'>549</a>
615
- <a name='L550'></a><a href='#L550'>550</a>
616
- <a name='L551'></a><a href='#L551'>551</a>
617
- <a name='L552'></a><a href='#L552'>552</a>
618
- <a name='L553'></a><a href='#L553'>553</a>
619
- <a name='L554'></a><a href='#L554'>554</a>
620
- <a name='L555'></a><a href='#L555'>555</a>
621
- <a name='L556'></a><a href='#L556'>556</a>
622
- <a name='L557'></a><a href='#L557'>557</a>
623
- <a name='L558'></a><a href='#L558'>558</a>
624
- <a name='L559'></a><a href='#L559'>559</a>
625
- <a name='L560'></a><a href='#L560'>560</a>
626
- <a name='L561'></a><a href='#L561'>561</a>
627
- <a name='L562'></a><a href='#L562'>562</a>
628
- <a name='L563'></a><a href='#L563'>563</a>
629
- <a name='L564'></a><a href='#L564'>564</a>
630
- <a name='L565'></a><a href='#L565'>565</a>
631
- <a name='L566'></a><a href='#L566'>566</a>
632
- <a name='L567'></a><a href='#L567'>567</a>
633
- <a name='L568'></a><a href='#L568'>568</a>
634
- <a name='L569'></a><a href='#L569'>569</a>
635
- <a name='L570'></a><a href='#L570'>570</a>
636
- <a name='L571'></a><a href='#L571'>571</a>
637
- <a name='L572'></a><a href='#L572'>572</a>
638
- <a name='L573'></a><a href='#L573'>573</a>
639
- <a name='L574'></a><a href='#L574'>574</a>
640
- <a name='L575'></a><a href='#L575'>575</a>
641
- <a name='L576'></a><a href='#L576'>576</a>
642
- <a name='L577'></a><a href='#L577'>577</a>
643
- <a name='L578'></a><a href='#L578'>578</a>
644
- <a name='L579'></a><a href='#L579'>579</a>
645
- <a name='L580'></a><a href='#L580'>580</a>
646
- <a name='L581'></a><a href='#L581'>581</a>
647
- <a name='L582'></a><a href='#L582'>582</a>
648
- <a name='L583'></a><a href='#L583'>583</a>
649
- <a name='L584'></a><a href='#L584'>584</a>
650
- <a name='L585'></a><a href='#L585'>585</a>
651
- <a name='L586'></a><a href='#L586'>586</a>
652
- <a name='L587'></a><a href='#L587'>587</a>
653
- <a name='L588'></a><a href='#L588'>588</a>
654
- <a name='L589'></a><a href='#L589'>589</a>
655
- <a name='L590'></a><a href='#L590'>590</a>
656
- <a name='L591'></a><a href='#L591'>591</a>
657
- <a name='L592'></a><a href='#L592'>592</a>
658
- <a name='L593'></a><a href='#L593'>593</a>
659
- <a name='L594'></a><a href='#L594'>594</a>
660
- <a name='L595'></a><a href='#L595'>595</a>
661
- <a name='L596'></a><a href='#L596'>596</a>
662
- <a name='L597'></a><a href='#L597'>597</a>
663
- <a name='L598'></a><a href='#L598'>598</a>
664
- <a name='L599'></a><a href='#L599'>599</a>
665
- <a name='L600'></a><a href='#L600'>600</a>
666
- <a name='L601'></a><a href='#L601'>601</a>
667
- <a name='L602'></a><a href='#L602'>602</a>
668
- <a name='L603'></a><a href='#L603'>603</a>
669
- <a name='L604'></a><a href='#L604'>604</a>
670
- <a name='L605'></a><a href='#L605'>605</a>
671
- <a name='L606'></a><a href='#L606'>606</a>
672
- <a name='L607'></a><a href='#L607'>607</a>
673
- <a name='L608'></a><a href='#L608'>608</a>
674
- <a name='L609'></a><a href='#L609'>609</a>
675
- <a name='L610'></a><a href='#L610'>610</a>
676
- <a name='L611'></a><a href='#L611'>611</a>
677
- <a name='L612'></a><a href='#L612'>612</a>
678
- <a name='L613'></a><a href='#L613'>613</a>
679
- <a name='L614'></a><a href='#L614'>614</a>
680
- <a name='L615'></a><a href='#L615'>615</a>
681
- <a name='L616'></a><a href='#L616'>616</a>
682
- <a name='L617'></a><a href='#L617'>617</a>
683
- <a name='L618'></a><a href='#L618'>618</a>
684
- <a name='L619'></a><a href='#L619'>619</a>
685
- <a name='L620'></a><a href='#L620'>620</a>
686
- <a name='L621'></a><a href='#L621'>621</a>
687
- <a name='L622'></a><a href='#L622'>622</a>
688
- <a name='L623'></a><a href='#L623'>623</a>
689
- <a name='L624'></a><a href='#L624'>624</a>
690
- <a name='L625'></a><a href='#L625'>625</a>
691
- <a name='L626'></a><a href='#L626'>626</a>
692
- <a name='L627'></a><a href='#L627'>627</a>
693
- <a name='L628'></a><a href='#L628'>628</a>
694
- <a name='L629'></a><a href='#L629'>629</a>
695
- <a name='L630'></a><a href='#L630'>630</a>
696
- <a name='L631'></a><a href='#L631'>631</a>
697
- <a name='L632'></a><a href='#L632'>632</a>
698
- <a name='L633'></a><a href='#L633'>633</a>
699
- <a name='L634'></a><a href='#L634'>634</a>
700
- <a name='L635'></a><a href='#L635'>635</a>
701
- <a name='L636'></a><a href='#L636'>636</a>
702
- <a name='L637'></a><a href='#L637'>637</a>
703
- <a name='L638'></a><a href='#L638'>638</a>
704
- <a name='L639'></a><a href='#L639'>639</a>
705
- <a name='L640'></a><a href='#L640'>640</a>
706
- <a name='L641'></a><a href='#L641'>641</a>
707
- <a name='L642'></a><a href='#L642'>642</a>
708
- <a name='L643'></a><a href='#L643'>643</a>
709
- <a name='L644'></a><a href='#L644'>644</a>
710
- <a name='L645'></a><a href='#L645'>645</a>
711
- <a name='L646'></a><a href='#L646'>646</a>
712
- <a name='L647'></a><a href='#L647'>647</a>
713
- <a name='L648'></a><a href='#L648'>648</a>
714
- <a name='L649'></a><a href='#L649'>649</a>
715
- <a name='L650'></a><a href='#L650'>650</a>
716
- <a name='L651'></a><a href='#L651'>651</a>
717
- <a name='L652'></a><a href='#L652'>652</a>
718
- <a name='L653'></a><a href='#L653'>653</a>
719
- <a name='L654'></a><a href='#L654'>654</a>
720
- <a name='L655'></a><a href='#L655'>655</a>
721
- <a name='L656'></a><a href='#L656'>656</a>
722
- <a name='L657'></a><a href='#L657'>657</a>
723
- <a name='L658'></a><a href='#L658'>658</a>
724
- <a name='L659'></a><a href='#L659'>659</a>
725
- <a name='L660'></a><a href='#L660'>660</a>
726
- <a name='L661'></a><a href='#L661'>661</a>
727
- <a name='L662'></a><a href='#L662'>662</a>
728
- <a name='L663'></a><a href='#L663'>663</a>
729
- <a name='L664'></a><a href='#L664'>664</a>
730
- <a name='L665'></a><a href='#L665'>665</a>
731
- <a name='L666'></a><a href='#L666'>666</a>
732
- <a name='L667'></a><a href='#L667'>667</a>
733
- <a name='L668'></a><a href='#L668'>668</a>
734
- <a name='L669'></a><a href='#L669'>669</a>
735
- <a name='L670'></a><a href='#L670'>670</a>
736
- <a name='L671'></a><a href='#L671'>671</a>
737
- <a name='L672'></a><a href='#L672'>672</a>
738
- <a name='L673'></a><a href='#L673'>673</a>
739
- <a name='L674'></a><a href='#L674'>674</a>
740
- <a name='L675'></a><a href='#L675'>675</a>
741
- <a name='L676'></a><a href='#L676'>676</a>
742
- <a name='L677'></a><a href='#L677'>677</a>
743
- <a name='L678'></a><a href='#L678'>678</a>
744
- <a name='L679'></a><a href='#L679'>679</a>
745
- <a name='L680'></a><a href='#L680'>680</a>
746
- <a name='L681'></a><a href='#L681'>681</a>
747
- <a name='L682'></a><a href='#L682'>682</a>
748
- <a name='L683'></a><a href='#L683'>683</a>
749
- <a name='L684'></a><a href='#L684'>684</a>
750
- <a name='L685'></a><a href='#L685'>685</a>
751
- <a name='L686'></a><a href='#L686'>686</a>
752
- <a name='L687'></a><a href='#L687'>687</a>
753
- <a name='L688'></a><a href='#L688'>688</a>
754
- <a name='L689'></a><a href='#L689'>689</a>
755
- <a name='L690'></a><a href='#L690'>690</a>
756
- <a name='L691'></a><a href='#L691'>691</a>
757
- <a name='L692'></a><a href='#L692'>692</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">3x</span>
758
- <span class="cline-any cline-neutral">&nbsp;</span>
759
- <span class="cline-any cline-yes">3x</span>
760
- <span class="cline-any cline-neutral">&nbsp;</span>
761
- <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-neutral">&nbsp;</span>
763
- <span class="cline-any cline-neutral">&nbsp;</span>
764
- <span class="cline-any cline-neutral">&nbsp;</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-yes">3x</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-yes">3x</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-yes">3x</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-yes">3x</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-neutral">&nbsp;</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</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-yes">3x</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-neutral">&nbsp;</span>
804
- <span class="cline-any cline-neutral">&nbsp;</span>
805
- <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-neutral">&nbsp;</span>
808
- <span class="cline-any cline-yes">3x</span>
809
- <span class="cline-any cline-yes">13x</span>
810
- <span class="cline-any cline-neutral">&nbsp;</span>
811
- <span class="cline-any cline-yes">13x</span>
812
- <span class="cline-any cline-yes">13x</span>
813
- <span class="cline-any cline-yes">12x</span>
814
- <span class="cline-any cline-yes">12x</span>
815
- <span class="cline-any cline-neutral">&nbsp;</span>
816
- <span class="cline-any cline-neutral">&nbsp;</span>
817
- <span class="cline-any cline-yes">13x</span>
818
- <span class="cline-any cline-neutral">&nbsp;</span>
819
- <span class="cline-any cline-yes">14x</span>
820
- <span class="cline-any cline-yes">14x</span>
821
- <span class="cline-any cline-neutral">&nbsp;</span>
822
- <span class="cline-any cline-no">&nbsp;</span>
823
- <span class="cline-any cline-no">&nbsp;</span>
824
- <span class="cline-any cline-neutral">&nbsp;</span>
825
- <span class="cline-any cline-neutral">&nbsp;</span>
826
- <span class="cline-any cline-yes">14x</span>
827
- <span class="cline-any cline-neutral">&nbsp;</span>
828
- <span class="cline-any cline-no">&nbsp;</span>
829
- <span class="cline-any cline-no">&nbsp;</span>
830
- <span class="cline-any cline-neutral">&nbsp;</span>
831
- <span class="cline-any cline-neutral">&nbsp;</span>
832
- <span class="cline-any cline-neutral">&nbsp;</span>
833
- <span class="cline-any cline-yes">3x</span>
834
- <span class="cline-any cline-yes">2x</span>
835
- <span class="cline-any cline-yes">2x</span>
836
- <span class="cline-any cline-neutral">&nbsp;</span>
837
- <span class="cline-any cline-neutral">&nbsp;</span>
838
- <span class="cline-any cline-yes">2x</span>
839
- <span class="cline-any cline-yes">4x</span>
840
- <span class="cline-any cline-yes">4x</span>
841
- <span class="cline-any cline-yes">3x</span>
842
- <span class="cline-any cline-yes">2x</span>
843
- <span class="cline-any cline-neutral">&nbsp;</span>
844
- <span class="cline-any cline-yes">3x</span>
845
- <span class="cline-any cline-neutral">&nbsp;</span>
846
- <span class="cline-any cline-neutral">&nbsp;</span>
847
- <span class="cline-any cline-neutral">&nbsp;</span>
848
- <span class="cline-any cline-neutral">&nbsp;</span>
849
- <span class="cline-any cline-neutral">&nbsp;</span>
850
- <span class="cline-any cline-no">&nbsp;</span>
851
- <span class="cline-any cline-no">&nbsp;</span>
852
- <span class="cline-any cline-neutral">&nbsp;</span>
853
- <span class="cline-any cline-no">&nbsp;</span>
854
- <span class="cline-any cline-neutral">&nbsp;</span>
855
- <span class="cline-any cline-neutral">&nbsp;</span>
856
- <span class="cline-any cline-neutral">&nbsp;</span>
857
- <span class="cline-any cline-yes">1x</span>
858
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
863
- <span class="cline-any cline-no">&nbsp;</span>
864
- <span class="cline-any cline-neutral">&nbsp;</span>
865
- <span class="cline-any cline-neutral">&nbsp;</span>
866
- <span class="cline-any cline-neutral">&nbsp;</span>
867
- <span class="cline-any cline-yes">1x</span>
868
- <span class="cline-any cline-neutral">&nbsp;</span>
869
- <span class="cline-any cline-no">&nbsp;</span>
870
- <span class="cline-any cline-no">&nbsp;</span>
871
- <span class="cline-any cline-no">&nbsp;</span>
872
- <span class="cline-any cline-no">&nbsp;</span>
873
- <span class="cline-any cline-no">&nbsp;</span>
874
- <span class="cline-any cline-neutral">&nbsp;</span>
875
- <span class="cline-any cline-neutral">&nbsp;</span>
876
- <span class="cline-any cline-no">&nbsp;</span>
877
- <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-neutral">&nbsp;</span>
879
- <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-yes">29x</span>
881
- <span class="cline-any cline-neutral">&nbsp;</span>
882
- <span class="cline-any cline-yes">29x</span>
883
- <span class="cline-any cline-neutral">&nbsp;</span>
884
- <span class="cline-any cline-no">&nbsp;</span>
885
- <span class="cline-any cline-neutral">&nbsp;</span>
886
- <span class="cline-any cline-no">&nbsp;</span>
887
- <span class="cline-any cline-neutral">&nbsp;</span>
888
- <span class="cline-any cline-no">&nbsp;</span>
889
- <span class="cline-any cline-no">&nbsp;</span>
890
- <span class="cline-any cline-no">&nbsp;</span>
891
- <span class="cline-any cline-no">&nbsp;</span>
892
- <span class="cline-any cline-neutral">&nbsp;</span>
893
- <span class="cline-any cline-no">&nbsp;</span>
894
- <span class="cline-any cline-neutral">&nbsp;</span>
895
- <span class="cline-any cline-no">&nbsp;</span>
896
- <span class="cline-any cline-neutral">&nbsp;</span>
897
- <span class="cline-any cline-neutral">&nbsp;</span>
898
- <span class="cline-any cline-neutral">&nbsp;</span>
899
- <span class="cline-any cline-neutral">&nbsp;</span>
900
- <span class="cline-any cline-yes">3x</span>
901
- <span class="cline-any cline-yes">3x</span>
902
- <span class="cline-any cline-neutral">&nbsp;</span>
903
- <span class="cline-any cline-neutral">&nbsp;</span>
904
- <span class="cline-any cline-no">&nbsp;</span>
905
- <span class="cline-any cline-no">&nbsp;</span>
906
- <span class="cline-any cline-neutral">&nbsp;</span>
907
- <span class="cline-any cline-neutral">&nbsp;</span>
908
- <span class="cline-any cline-neutral">&nbsp;</span>
909
- <span class="cline-any cline-neutral">&nbsp;</span>
910
- <span class="cline-any cline-neutral">&nbsp;</span>
911
- <span class="cline-any cline-neutral">&nbsp;</span>
912
- <span class="cline-any cline-neutral">&nbsp;</span>
913
- <span class="cline-any cline-neutral">&nbsp;</span>
914
- <span class="cline-any cline-neutral">&nbsp;</span>
915
- <span class="cline-any cline-neutral">&nbsp;</span>
916
- <span class="cline-any cline-yes">34x</span>
917
- <span class="cline-any cline-yes">34x</span>
918
- <span class="cline-any cline-yes">26x</span>
919
- <span class="cline-any cline-neutral">&nbsp;</span>
920
- <span class="cline-any cline-neutral">&nbsp;</span>
921
- <span class="cline-any cline-yes">8x</span>
922
- <span class="cline-any cline-yes">6x</span>
923
- <span class="cline-any cline-yes">6x</span>
924
- <span class="cline-any cline-neutral">&nbsp;</span>
925
- <span class="cline-any cline-yes">6x</span>
926
- <span class="cline-any cline-no">&nbsp;</span>
927
- <span class="cline-any cline-no">&nbsp;</span>
928
- <span class="cline-any cline-neutral">&nbsp;</span>
929
- <span class="cline-any cline-neutral">&nbsp;</span>
930
- <span class="cline-any cline-yes">6x</span>
931
- <span class="cline-any cline-neutral">&nbsp;</span>
932
- <span class="cline-any cline-neutral">&nbsp;</span>
933
- <span class="cline-any cline-yes">6x</span>
934
- <span class="cline-any cline-yes">6x</span>
935
- <span class="cline-any cline-yes">5x</span>
936
- <span class="cline-any cline-neutral">&nbsp;</span>
937
- <span class="cline-any cline-neutral">&nbsp;</span>
938
- <span class="cline-any cline-neutral">&nbsp;</span>
939
- <span class="cline-any cline-yes">1x</span>
940
- <span class="cline-any cline-neutral">&nbsp;</span>
941
- <span class="cline-any cline-no">&nbsp;</span>
942
- <span class="cline-any cline-no">&nbsp;</span>
943
- <span class="cline-any cline-no">&nbsp;</span>
944
- <span class="cline-any cline-no">&nbsp;</span>
945
- <span class="cline-any cline-no">&nbsp;</span>
946
- <span class="cline-any cline-neutral">&nbsp;</span>
947
- <span class="cline-any cline-neutral">&nbsp;</span>
948
- <span class="cline-any cline-no">&nbsp;</span>
949
- <span class="cline-any cline-neutral">&nbsp;</span>
950
- <span class="cline-any cline-neutral">&nbsp;</span>
951
- <span class="cline-any cline-no">&nbsp;</span>
952
- <span class="cline-any cline-no">&nbsp;</span>
953
- <span class="cline-any cline-neutral">&nbsp;</span>
954
- <span class="cline-any cline-neutral">&nbsp;</span>
955
- <span class="cline-any cline-no">&nbsp;</span>
956
- <span class="cline-any cline-no">&nbsp;</span>
957
- <span class="cline-any cline-neutral">&nbsp;</span>
958
- <span class="cline-any cline-neutral">&nbsp;</span>
959
- <span class="cline-any cline-no">&nbsp;</span>
960
- <span class="cline-any cline-no">&nbsp;</span>
961
- <span class="cline-any cline-neutral">&nbsp;</span>
962
- <span class="cline-any cline-neutral">&nbsp;</span>
963
- <span class="cline-any cline-no">&nbsp;</span>
964
- <span class="cline-any cline-no">&nbsp;</span>
965
- <span class="cline-any cline-neutral">&nbsp;</span>
966
- <span class="cline-any cline-neutral">&nbsp;</span>
967
- <span class="cline-any cline-yes">1x</span>
968
- <span class="cline-any cline-no">&nbsp;</span>
969
- <span class="cline-any cline-neutral">&nbsp;</span>
970
- <span class="cline-any cline-yes">1x</span>
971
- <span class="cline-any cline-neutral">&nbsp;</span>
972
- <span class="cline-any cline-neutral">&nbsp;</span>
973
- <span class="cline-any cline-neutral">&nbsp;</span>
974
- <span class="cline-any cline-yes">2x</span>
975
- <span class="cline-any cline-neutral">&nbsp;</span>
976
- <span class="cline-any cline-yes">2x</span>
977
- <span class="cline-any cline-yes">2x</span>
978
- <span class="cline-any cline-yes">2x</span>
979
- <span class="cline-any cline-neutral">&nbsp;</span>
980
- <span class="cline-any cline-no">&nbsp;</span>
981
- <span class="cline-any cline-neutral">&nbsp;</span>
982
- <span class="cline-any cline-neutral">&nbsp;</span>
983
- <span class="cline-any cline-no">&nbsp;</span>
984
- <span class="cline-any cline-neutral">&nbsp;</span>
985
- <span class="cline-any cline-neutral">&nbsp;</span>
986
- <span class="cline-any cline-neutral">&nbsp;</span>
987
- <span class="cline-any cline-no">&nbsp;</span>
988
- <span class="cline-any cline-no">&nbsp;</span>
989
- <span class="cline-any cline-neutral">&nbsp;</span>
990
- <span class="cline-any cline-neutral">&nbsp;</span>
991
- <span class="cline-any cline-no">&nbsp;</span>
992
- <span class="cline-any cline-neutral">&nbsp;</span>
993
- <span class="cline-any cline-no">&nbsp;</span>
994
- <span class="cline-any cline-no">&nbsp;</span>
995
- <span class="cline-any cline-no">&nbsp;</span>
996
- <span class="cline-any cline-no">&nbsp;</span>
997
- <span class="cline-any cline-no">&nbsp;</span>
998
- <span class="cline-any cline-no">&nbsp;</span>
999
- <span class="cline-any cline-neutral">&nbsp;</span>
1000
- <span class="cline-any cline-neutral">&nbsp;</span>
1001
- <span class="cline-any cline-neutral">&nbsp;</span>
1002
- <span class="cline-any cline-neutral">&nbsp;</span>
1003
- <span class="cline-any cline-no">&nbsp;</span>
1004
- <span class="cline-any cline-neutral">&nbsp;</span>
1005
- <span class="cline-any cline-neutral">&nbsp;</span>
1006
- <span class="cline-any cline-neutral">&nbsp;</span>
1007
- <span class="cline-any cline-no">&nbsp;</span>
1008
- <span class="cline-any cline-no">&nbsp;</span>
1009
- <span class="cline-any cline-neutral">&nbsp;</span>
1010
- <span class="cline-any cline-neutral">&nbsp;</span>
1011
- <span class="cline-any cline-no">&nbsp;</span>
1012
- <span class="cline-any cline-no">&nbsp;</span>
1013
- <span class="cline-any cline-neutral">&nbsp;</span>
1014
- <span class="cline-any cline-neutral">&nbsp;</span>
1015
- <span class="cline-any cline-neutral">&nbsp;</span>
1016
- <span class="cline-any cline-no">&nbsp;</span>
1017
- <span class="cline-any cline-no">&nbsp;</span>
1018
- <span class="cline-any cline-neutral">&nbsp;</span>
1019
- <span class="cline-any cline-neutral">&nbsp;</span>
1020
- <span class="cline-any cline-no">&nbsp;</span>
1021
- <span class="cline-any cline-no">&nbsp;</span>
1022
- <span class="cline-any cline-neutral">&nbsp;</span>
1023
- <span class="cline-any cline-neutral">&nbsp;</span>
1024
- <span class="cline-any cline-neutral">&nbsp;</span>
1025
- <span class="cline-any cline-no">&nbsp;</span>
1026
- <span class="cline-any cline-no">&nbsp;</span>
1027
- <span class="cline-any cline-no">&nbsp;</span>
1028
- <span class="cline-any cline-no">&nbsp;</span>
1029
- <span class="cline-any cline-neutral">&nbsp;</span>
1030
- <span class="cline-any cline-neutral">&nbsp;</span>
1031
- <span class="cline-any cline-neutral">&nbsp;</span>
1032
- <span class="cline-any cline-no">&nbsp;</span>
1033
- <span class="cline-any cline-no">&nbsp;</span>
1034
- <span class="cline-any cline-neutral">&nbsp;</span>
1035
- <span class="cline-any cline-neutral">&nbsp;</span>
1036
- <span class="cline-any cline-no">&nbsp;</span>
1037
- <span class="cline-any cline-neutral">&nbsp;</span>
1038
- <span class="cline-any cline-no">&nbsp;</span>
1039
- <span class="cline-any cline-no">&nbsp;</span>
1040
- <span class="cline-any cline-no">&nbsp;</span>
1041
- <span class="cline-any cline-no">&nbsp;</span>
1042
- <span class="cline-any cline-no">&nbsp;</span>
1043
- <span class="cline-any cline-no">&nbsp;</span>
1044
- <span class="cline-any cline-neutral">&nbsp;</span>
1045
- <span class="cline-any cline-neutral">&nbsp;</span>
1046
- <span class="cline-any cline-no">&nbsp;</span>
1047
- <span class="cline-any cline-no">&nbsp;</span>
1048
- <span class="cline-any cline-no">&nbsp;</span>
1049
- <span class="cline-any cline-neutral">&nbsp;</span>
1050
- <span class="cline-any cline-neutral">&nbsp;</span>
1051
- <span class="cline-any cline-no">&nbsp;</span>
1052
- <span class="cline-any cline-neutral">&nbsp;</span>
1053
- <span class="cline-any cline-neutral">&nbsp;</span>
1054
- <span class="cline-any cline-neutral">&nbsp;</span>
1055
- <span class="cline-any cline-neutral">&nbsp;</span>
1056
- <span class="cline-any cline-yes">37x</span>
1057
- <span class="cline-any cline-neutral">&nbsp;</span>
1058
- <span class="cline-any cline-neutral">&nbsp;</span>
1059
- <span class="cline-any cline-yes">37x</span>
1060
- <span class="cline-any cline-no">&nbsp;</span>
1061
- <span class="cline-any cline-no">&nbsp;</span>
1062
- <span class="cline-any cline-neutral">&nbsp;</span>
1063
- <span class="cline-any cline-neutral">&nbsp;</span>
1064
- <span class="cline-any cline-neutral">&nbsp;</span>
1065
- <span class="cline-any cline-neutral">&nbsp;</span>
1066
- <span class="cline-any cline-yes">37x</span>
1067
- <span class="cline-any cline-no">&nbsp;</span>
1068
- <span class="cline-any cline-no">&nbsp;</span>
1069
- <span class="cline-any cline-yes">37x</span>
1070
- <span class="cline-any cline-yes">2x</span>
1071
- <span class="cline-any cline-yes">2x</span>
1072
- <span class="cline-any cline-neutral">&nbsp;</span>
1073
- <span class="cline-any cline-neutral">&nbsp;</span>
1074
- <span class="cline-any cline-neutral">&nbsp;</span>
1075
- <span class="cline-any cline-yes">35x</span>
1076
- <span class="cline-any cline-yes">1x</span>
1077
- <span class="cline-any cline-yes">3x</span>
1078
- <span class="cline-any cline-yes">1x</span>
1079
- <span class="cline-any cline-neutral">&nbsp;</span>
1080
- <span class="cline-any cline-neutral">&nbsp;</span>
1081
- <span class="cline-any cline-neutral">&nbsp;</span>
1082
- <span class="cline-any cline-yes">1x</span>
1083
- <span class="cline-any cline-yes">1x</span>
1084
- <span class="cline-any cline-neutral">&nbsp;</span>
1085
- <span class="cline-any cline-yes">34x</span>
1086
- <span class="cline-any cline-yes">6x</span>
1087
- <span class="cline-any cline-neutral">&nbsp;</span>
1088
- <span class="cline-any cline-yes">28x</span>
1089
- <span class="cline-any cline-neutral">&nbsp;</span>
1090
- <span class="cline-any cline-neutral">&nbsp;</span>
1091
- <span class="cline-any cline-neutral">&nbsp;</span>
1092
- <span class="cline-any cline-neutral">&nbsp;</span>
1093
- <span class="cline-any cline-neutral">&nbsp;</span>
1094
- <span class="cline-any cline-neutral">&nbsp;</span>
1095
- <span class="cline-any cline-yes">37x</span>
1096
- <span class="cline-any cline-no">&nbsp;</span>
1097
- <span class="cline-any cline-neutral">&nbsp;</span>
1098
- <span class="cline-any cline-neutral">&nbsp;</span>
1099
- <span class="cline-any cline-yes">37x</span>
1100
- <span class="cline-any cline-neutral">&nbsp;</span>
1101
- <span class="cline-any cline-neutral">&nbsp;</span>
1102
- <span class="cline-any cline-neutral">&nbsp;</span>
1103
- <span class="cline-any cline-yes">6x</span>
1104
- <span class="cline-any cline-neutral">&nbsp;</span>
1105
- <span class="cline-any cline-yes">6x</span>
1106
- <span class="cline-any cline-no">&nbsp;</span>
1107
- <span class="cline-any cline-neutral">&nbsp;</span>
1108
- <span class="cline-any cline-neutral">&nbsp;</span>
1109
- <span class="cline-any cline-neutral">&nbsp;</span>
1110
- <span class="cline-any cline-neutral">&nbsp;</span>
1111
- <span class="cline-any cline-neutral">&nbsp;</span>
1112
- <span class="cline-any cline-yes">6x</span>
1113
- <span class="cline-any cline-neutral">&nbsp;</span>
1114
- <span class="cline-any cline-yes">6x</span>
1115
- <span class="cline-any cline-no">&nbsp;</span>
1116
- <span class="cline-any cline-neutral">&nbsp;</span>
1117
- <span class="cline-any cline-no">&nbsp;</span>
1118
- <span class="cline-any cline-no">&nbsp;</span>
1119
- <span class="cline-any cline-no">&nbsp;</span>
1120
- <span class="cline-any cline-no">&nbsp;</span>
1121
- <span class="cline-any cline-no">&nbsp;</span>
1122
- <span class="cline-any cline-neutral">&nbsp;</span>
1123
- <span class="cline-any cline-neutral">&nbsp;</span>
1124
- <span class="cline-any cline-neutral">&nbsp;</span>
1125
- <span class="cline-any cline-no">&nbsp;</span>
1126
- <span class="cline-any cline-no">&nbsp;</span>
1127
- <span class="cline-any cline-neutral">&nbsp;</span>
1128
- <span class="cline-any cline-neutral">&nbsp;</span>
1129
- <span class="cline-any cline-neutral">&nbsp;</span>
1130
- <span class="cline-any cline-neutral">&nbsp;</span>
1131
- <span class="cline-any cline-no">&nbsp;</span>
1132
- <span class="cline-any cline-no">&nbsp;</span>
1133
- <span class="cline-any cline-neutral">&nbsp;</span>
1134
- <span class="cline-any cline-neutral">&nbsp;</span>
1135
- <span class="cline-any cline-no">&nbsp;</span>
1136
- <span class="cline-any cline-neutral">&nbsp;</span>
1137
- <span class="cline-any cline-neutral">&nbsp;</span>
1138
- <span class="cline-any cline-neutral">&nbsp;</span>
1139
- <span class="cline-any cline-yes">6x</span>
1140
- <span class="cline-any cline-neutral">&nbsp;</span>
1141
- <span class="cline-any cline-neutral">&nbsp;</span>
1142
- <span class="cline-any cline-neutral">&nbsp;</span>
1143
- <span class="cline-any cline-neutral">&nbsp;</span>
1144
- <span class="cline-any cline-neutral">&nbsp;</span>
1145
- <span class="cline-any cline-neutral">&nbsp;</span>
1146
- <span class="cline-any cline-yes">3x</span>
1147
- <span class="cline-any cline-yes">3x</span>
1148
- <span class="cline-any cline-neutral">&nbsp;</span>
1149
- <span class="cline-any cline-yes">3x</span>
1150
- <span class="cline-any cline-no">&nbsp;</span>
1151
- <span class="cline-any cline-no">&nbsp;</span>
1152
- <span class="cline-any cline-no">&nbsp;</span>
1153
- <span class="cline-any cline-neutral">&nbsp;</span>
1154
- <span class="cline-any cline-neutral">&nbsp;</span>
1155
- <span class="cline-any cline-yes">3x</span>
1156
- <span class="cline-any cline-yes">3x</span>
1157
- <span class="cline-any cline-yes">3x</span>
1158
- <span class="cline-any cline-yes">3x</span>
1159
- <span class="cline-any cline-yes">3x</span>
1160
- <span class="cline-any cline-neutral">&nbsp;</span>
1161
- <span class="cline-any cline-yes">3x</span>
1162
- <span class="cline-any cline-neutral">&nbsp;</span>
1163
- <span class="cline-any cline-neutral">&nbsp;</span>
1164
- <span class="cline-any cline-neutral">&nbsp;</span>
1165
- <span class="cline-any cline-yes">26x</span>
1166
- <span class="cline-any cline-no">&nbsp;</span>
1167
- <span class="cline-any cline-neutral">&nbsp;</span>
1168
- <span class="cline-any cline-neutral">&nbsp;</span>
1169
- <span class="cline-any cline-neutral">&nbsp;</span>
1170
- <span class="cline-any cline-yes">14x</span>
1171
- <span class="cline-any cline-neutral">&nbsp;</span>
1172
- <span class="cline-any cline-yes">14x</span>
1173
- <span class="cline-any cline-neutral">&nbsp;</span>
1174
- <span class="cline-any cline-neutral">&nbsp;</span>
1175
- <span class="cline-any cline-no">&nbsp;</span>
1176
- <span class="cline-any cline-neutral">&nbsp;</span>
1177
- <span class="cline-any cline-neutral">&nbsp;</span>
1178
- <span class="cline-any cline-no">&nbsp;</span>
1179
- <span class="cline-any cline-neutral">&nbsp;</span>
1180
- <span class="cline-any cline-neutral">&nbsp;</span>
1181
- <span class="cline-any cline-neutral">&nbsp;</span>
1182
- <span class="cline-any cline-neutral">&nbsp;</span>
1183
- <span class="cline-any cline-neutral">&nbsp;</span>
1184
- <span class="cline-any cline-neutral">&nbsp;</span>
1185
- <span class="cline-any cline-neutral">&nbsp;</span>
1186
- <span class="cline-any cline-neutral">&nbsp;</span>
1187
- <span class="cline-any cline-neutral">&nbsp;</span>
1188
- <span class="cline-any cline-yes">14x</span>
1189
- <span class="cline-any cline-yes">14x</span>
1190
- <span class="cline-any cline-neutral">&nbsp;</span>
1191
- <span class="cline-any cline-neutral">&nbsp;</span>
1192
- <span class="cline-any cline-yes">14x</span>
1193
- <span class="cline-any cline-yes">1x</span>
1194
- <span class="cline-any cline-yes">1x</span>
1195
- <span class="cline-any cline-yes">1x</span>
1196
- <span class="cline-any cline-neutral">&nbsp;</span>
1197
- <span class="cline-any cline-yes">1x</span>
1198
- <span class="cline-any cline-yes">1x</span>
1199
- <span class="cline-any cline-neutral">&nbsp;</span>
1200
- <span class="cline-any cline-neutral">&nbsp;</span>
1201
- <span class="cline-any cline-yes">14x</span>
1202
- <span class="cline-any cline-neutral">&nbsp;</span>
1203
- <span class="cline-any cline-yes">14x</span>
1204
- <span class="cline-any cline-yes">14x</span>
1205
- <span class="cline-any cline-yes">14x</span>
1206
- <span class="cline-any cline-yes">14x</span>
1207
- <span class="cline-any cline-neutral">&nbsp;</span>
1208
- <span class="cline-any cline-neutral">&nbsp;</span>
1209
- <span class="cline-any cline-neutral">&nbsp;</span>
1210
- <span class="cline-any cline-yes">14x</span>
1211
- <span class="cline-any cline-yes">14x</span>
1212
- <span class="cline-any cline-neutral">&nbsp;</span>
1213
- <span class="cline-any cline-yes">14x</span>
1214
- <span class="cline-any cline-neutral">&nbsp;</span>
1215
- <span class="cline-any cline-yes">14x</span>
1216
- <span class="cline-any cline-neutral">&nbsp;</span>
1217
- <span class="cline-any cline-neutral">&nbsp;</span>
1218
- <span class="cline-any cline-neutral">&nbsp;</span>
1219
- <span class="cline-any cline-neutral">&nbsp;</span>
1220
- <span class="cline-any cline-neutral">&nbsp;</span>
1221
- <span class="cline-any cline-neutral">&nbsp;</span>
1222
- <span class="cline-any cline-neutral">&nbsp;</span>
1223
- <span class="cline-any cline-neutral">&nbsp;</span>
1224
- <span class="cline-any cline-yes">14x</span>
1225
- <span class="cline-any cline-yes">29x</span>
1226
- <span class="cline-any cline-yes">29x</span>
1227
- <span class="cline-any cline-neutral">&nbsp;</span>
1228
- <span class="cline-any cline-no">&nbsp;</span>
1229
- <span class="cline-any cline-neutral">&nbsp;</span>
1230
- <span class="cline-any cline-neutral">&nbsp;</span>
1231
- <span class="cline-any cline-neutral">&nbsp;</span>
1232
- <span class="cline-any cline-neutral">&nbsp;</span>
1233
- <span class="cline-any cline-neutral">&nbsp;</span>
1234
- <span class="cline-any cline-neutral">&nbsp;</span>
1235
- <span class="cline-any cline-neutral">&nbsp;</span>
1236
- <span class="cline-any cline-neutral">&nbsp;</span>
1237
- <span class="cline-any cline-neutral">&nbsp;</span>
1238
- <span class="cline-any cline-neutral">&nbsp;</span>
1239
- <span class="cline-any cline-yes">29x</span>
1240
- <span class="cline-any cline-neutral">&nbsp;</span>
1241
- <span class="cline-any cline-yes">26x</span>
1242
- <span class="cline-any cline-yes">26x</span>
1243
- <span class="cline-any cline-neutral">&nbsp;</span>
1244
- <span class="cline-any cline-neutral">&nbsp;</span>
1245
- <span class="cline-any cline-yes">3x</span>
1246
- <span class="cline-any cline-yes">3x</span>
1247
- <span class="cline-any cline-neutral">&nbsp;</span>
1248
- <span class="cline-any cline-neutral">&nbsp;</span>
1249
- <span class="cline-any cline-no">&nbsp;</span>
1250
- <span class="cline-any cline-no">&nbsp;</span>
1251
- <span class="cline-any cline-neutral">&nbsp;</span>
1252
- <span class="cline-any cline-neutral">&nbsp;</span>
1253
- <span class="cline-any cline-no">&nbsp;</span>
1254
- <span class="cline-any cline-no">&nbsp;</span>
1255
- <span class="cline-any cline-neutral">&nbsp;</span>
1256
- <span class="cline-any cline-neutral">&nbsp;</span>
1257
- <span class="cline-any cline-neutral">&nbsp;</span>
1258
- <span class="cline-any cline-neutral">&nbsp;</span>
1259
- <span class="cline-any cline-neutral">&nbsp;</span>
1260
- <span class="cline-any cline-neutral">&nbsp;</span>
1261
- <span class="cline-any cline-neutral">&nbsp;</span>
1262
- <span class="cline-any cline-neutral">&nbsp;</span>
1263
- <span class="cline-any cline-neutral">&nbsp;</span>
1264
- <span class="cline-any cline-yes">26x</span>
1265
- <span class="cline-any cline-yes">26x</span>
1266
- <span class="cline-any cline-yes">26x</span>
1267
- <span class="cline-any cline-neutral">&nbsp;</span>
1268
- <span class="cline-any cline-yes">26x</span>
1269
- <span class="cline-any cline-neutral">&nbsp;</span>
1270
- <span class="cline-any cline-yes">26x</span>
1271
- <span class="cline-any cline-no">&nbsp;</span>
1272
- <span class="cline-any cline-no">&nbsp;</span>
1273
- <span class="cline-any cline-neutral">&nbsp;</span>
1274
- <span class="cline-any cline-neutral">&nbsp;</span>
1275
- <span class="cline-any cline-yes">26x</span>
1276
- <span class="cline-any cline-yes">26x</span>
1277
- <span class="cline-any cline-yes">26x</span>
1278
- <span class="cline-any cline-yes">26x</span>
1279
- <span class="cline-any cline-neutral">&nbsp;</span>
1280
- <span class="cline-any cline-yes">26x</span>
1281
- <span class="cline-any cline-no">&nbsp;</span>
1282
- <span class="cline-any cline-no">&nbsp;</span>
1283
- <span class="cline-any cline-no">&nbsp;</span>
1284
- <span class="cline-any cline-neutral">&nbsp;</span>
1285
- <span class="cline-any cline-no">&nbsp;</span>
1286
- <span class="cline-any cline-neutral">&nbsp;</span>
1287
- <span class="cline-any cline-yes">26x</span>
1288
- <span class="cline-any cline-neutral">&nbsp;</span>
1289
- <span class="cline-any cline-neutral">&nbsp;</span>
1290
- <span class="cline-any cline-yes">26x</span>
1291
- <span class="cline-any cline-no">&nbsp;</span>
1292
- <span class="cline-any cline-no">&nbsp;</span>
1293
- <span class="cline-any cline-no">&nbsp;</span>
1294
- <span class="cline-any cline-neutral">&nbsp;</span>
1295
- <span class="cline-any cline-neutral">&nbsp;</span>
1296
- <span class="cline-any cline-neutral">&nbsp;</span>
1297
- <span class="cline-any cline-neutral">&nbsp;</span>
1298
- <span class="cline-any cline-neutral">&nbsp;</span>
1299
- <span class="cline-any cline-no">&nbsp;</span>
1300
- <span class="cline-any cline-no">&nbsp;</span>
1301
- <span class="cline-any cline-neutral">&nbsp;</span>
1302
- <span class="cline-any cline-no">&nbsp;</span>
1303
- <span class="cline-any cline-no">&nbsp;</span>
1304
- <span class="cline-any cline-no">&nbsp;</span>
1305
- <span class="cline-any cline-neutral">&nbsp;</span>
1306
- <span class="cline-any cline-no">&nbsp;</span>
1307
- <span class="cline-any cline-no">&nbsp;</span>
1308
- <span class="cline-any cline-neutral">&nbsp;</span>
1309
- <span class="cline-any cline-neutral">&nbsp;</span>
1310
- <span class="cline-any cline-neutral">&nbsp;</span>
1311
- <span class="cline-any cline-neutral">&nbsp;</span>
1312
- <span class="cline-any cline-no">&nbsp;</span>
1313
- <span class="cline-any cline-neutral">&nbsp;</span>
1314
- <span class="cline-any cline-neutral">&nbsp;</span>
1315
- <span class="cline-any cline-neutral">&nbsp;</span>
1316
- <span class="cline-any cline-neutral">&nbsp;</span>
1317
- <span class="cline-any cline-neutral">&nbsp;</span>
1318
- <span class="cline-any cline-neutral">&nbsp;</span>
1319
- <span class="cline-any cline-neutral">&nbsp;</span>
1320
- <span class="cline-any cline-yes">3x</span>
1321
- <span class="cline-any cline-yes">3x</span>
1322
- <span class="cline-any cline-yes">3x</span>
1323
- <span class="cline-any cline-yes">3x</span>
1324
- <span class="cline-any cline-neutral">&nbsp;</span>
1325
- <span class="cline-any cline-neutral">&nbsp;</span>
1326
- <span class="cline-any cline-yes">3x</span>
1327
- <span class="cline-any cline-yes">3x</span>
1328
- <span class="cline-any cline-yes">3x</span>
1329
- <span class="cline-any cline-neutral">&nbsp;</span>
1330
- <span class="cline-any cline-yes">3x</span>
1331
- <span class="cline-any cline-no">&nbsp;</span>
1332
- <span class="cline-any cline-neutral">&nbsp;</span>
1333
- <span class="cline-any cline-neutral">&nbsp;</span>
1334
- <span class="cline-any cline-neutral">&nbsp;</span>
1335
- <span class="cline-any cline-neutral">&nbsp;</span>
1336
- <span class="cline-any cline-neutral">&nbsp;</span>
1337
- <span class="cline-any cline-yes">3x</span>
1338
- <span class="cline-any cline-neutral">&nbsp;</span>
1339
- <span class="cline-any cline-yes">3x</span>
1340
- <span class="cline-any cline-no">&nbsp;</span>
1341
- <span class="cline-any cline-neutral">&nbsp;</span>
1342
- <span class="cline-any cline-neutral">&nbsp;</span>
1343
- <span class="cline-any cline-neutral">&nbsp;</span>
1344
- <span class="cline-any cline-yes">3x</span>
1345
- <span class="cline-any cline-neutral">&nbsp;</span>
1346
- <span class="cline-any cline-neutral">&nbsp;</span>
1347
- <span class="cline-any cline-yes">3x</span>
1348
- <span class="cline-any cline-no">&nbsp;</span>
1349
- <span class="cline-any cline-no">&nbsp;</span>
1350
- <span class="cline-any cline-neutral">&nbsp;</span>
1351
- <span class="cline-any cline-neutral">&nbsp;</span>
1352
- <span class="cline-any cline-neutral">&nbsp;</span>
1353
- <span class="cline-any cline-neutral">&nbsp;</span>
1354
- <span class="cline-any cline-neutral">&nbsp;</span>
1355
- <span class="cline-any cline-neutral">&nbsp;</span>
1356
- <span class="cline-any cline-neutral">&nbsp;</span>
1357
- <span class="cline-any cline-neutral">&nbsp;</span>
1358
- <span class="cline-any cline-no">&nbsp;</span>
1359
- <span class="cline-any cline-no">&nbsp;</span>
1360
- <span class="cline-any cline-neutral">&nbsp;</span>
1361
- <span class="cline-any cline-no">&nbsp;</span>
1362
- <span class="cline-any cline-no">&nbsp;</span>
1363
- <span class="cline-any cline-no">&nbsp;</span>
1364
- <span class="cline-any cline-neutral">&nbsp;</span>
1365
- <span class="cline-any cline-no">&nbsp;</span>
1366
- <span class="cline-any cline-no">&nbsp;</span>
1367
- <span class="cline-any cline-no">&nbsp;</span>
1368
- <span class="cline-any cline-neutral">&nbsp;</span>
1369
- <span class="cline-any cline-no">&nbsp;</span>
1370
- <span class="cline-any cline-neutral">&nbsp;</span>
1371
- <span class="cline-any cline-neutral">&nbsp;</span>
1372
- <span class="cline-any cline-neutral">&nbsp;</span>
1373
- <span class="cline-any cline-neutral">&nbsp;</span>
1374
- <span class="cline-any cline-no">&nbsp;</span>
1375
- <span class="cline-any cline-neutral">&nbsp;</span>
1376
- <span class="cline-any cline-neutral">&nbsp;</span>
1377
- <span class="cline-any cline-neutral">&nbsp;</span>
1378
- <span class="cline-any cline-neutral">&nbsp;</span>
1379
- <span class="cline-any cline-neutral">&nbsp;</span>
1380
- <span class="cline-any cline-neutral">&nbsp;</span>
1381
- <span class="cline-any cline-neutral">&nbsp;</span>
1382
- <span class="cline-any cline-no">&nbsp;</span>
1383
- <span class="cline-any cline-no">&nbsp;</span>
1384
- <span class="cline-any cline-no">&nbsp;</span>
1385
- <span class="cline-any cline-neutral">&nbsp;</span>
1386
- <span class="cline-any cline-no">&nbsp;</span>
1387
- <span class="cline-any cline-no">&nbsp;</span>
1388
- <span class="cline-any cline-no">&nbsp;</span>
1389
- <span class="cline-any cline-neutral">&nbsp;</span>
1390
- <span class="cline-any cline-neutral">&nbsp;</span>
1391
- <span class="cline-any cline-no">&nbsp;</span>
1392
- <span class="cline-any cline-no">&nbsp;</span>
1393
- <span class="cline-any cline-no">&nbsp;</span>
1394
- <span class="cline-any cline-no">&nbsp;</span>
1395
- <span class="cline-any cline-neutral">&nbsp;</span>
1396
- <span class="cline-any cline-neutral">&nbsp;</span>
1397
- <span class="cline-any cline-neutral">&nbsp;</span>
1398
- <span class="cline-any cline-neutral">&nbsp;</span>
1399
- <span class="cline-any cline-neutral">&nbsp;</span>
1400
- <span class="cline-any cline-neutral">&nbsp;</span>
1401
- <span class="cline-any cline-neutral">&nbsp;</span>
1402
- <span class="cline-any cline-no">&nbsp;</span>
1403
- <span class="cline-any cline-no">&nbsp;</span>
1404
- <span class="cline-any cline-no">&nbsp;</span>
1405
- <span class="cline-any cline-no">&nbsp;</span>
1406
- <span class="cline-any cline-neutral">&nbsp;</span>
1407
- <span class="cline-any cline-neutral">&nbsp;</span>
1408
- <span class="cline-any cline-no">&nbsp;</span>
1409
- <span class="cline-any cline-no">&nbsp;</span>
1410
- <span class="cline-any cline-neutral">&nbsp;</span>
1411
- <span class="cline-any cline-neutral">&nbsp;</span>
1412
- <span class="cline-any cline-no">&nbsp;</span>
1413
- <span class="cline-any cline-neutral">&nbsp;</span>
1414
- <span class="cline-any cline-neutral">&nbsp;</span>
1415
- <span class="cline-any cline-neutral">&nbsp;</span>
1416
- <span class="cline-any cline-neutral">&nbsp;</span>
1417
- <span class="cline-any cline-neutral">&nbsp;</span>
1418
- <span class="cline-any cline-neutral">&nbsp;</span>
1419
- <span class="cline-any cline-no">&nbsp;</span>
1420
- <span class="cline-any cline-neutral">&nbsp;</span>
1421
- <span class="cline-any cline-no">&nbsp;</span>
1422
- <span class="cline-any cline-no">&nbsp;</span>
1423
- <span class="cline-any cline-no">&nbsp;</span>
1424
- <span class="cline-any cline-neutral">&nbsp;</span>
1425
- <span class="cline-any cline-neutral">&nbsp;</span>
1426
- <span class="cline-any cline-no">&nbsp;</span>
1427
- <span class="cline-any cline-no">&nbsp;</span>
1428
- <span class="cline-any cline-neutral">&nbsp;</span>
1429
- <span class="cline-any cline-no">&nbsp;</span>
1430
- <span class="cline-any cline-no">&nbsp;</span>
1431
- <span class="cline-any cline-neutral">&nbsp;</span>
1432
- <span class="cline-any cline-neutral">&nbsp;</span>
1433
- <span class="cline-any cline-no">&nbsp;</span>
1434
- <span class="cline-any cline-no">&nbsp;</span>
1435
- <span class="cline-any cline-no">&nbsp;</span>
1436
- <span class="cline-any cline-no">&nbsp;</span>
1437
- <span class="cline-any cline-no">&nbsp;</span>
1438
- <span class="cline-any cline-neutral">&nbsp;</span>
1439
- <span class="cline-any cline-no">&nbsp;</span>
1440
- <span class="cline-any cline-neutral">&nbsp;</span>
1441
- <span class="cline-any cline-no">&nbsp;</span>
1442
- <span class="cline-any cline-neutral">&nbsp;</span>
1443
- <span class="cline-any cline-neutral">&nbsp;</span>
1444
- <span class="cline-any cline-neutral">&nbsp;</span>
1445
- <span class="cline-any cline-yes">3x</span>
1446
- <span class="cline-any cline-yes">14x</span>
1447
- <span class="cline-any cline-yes">14x</span>
1448
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import ts, {HeritageClause, ScriptTarget, VariableStatement} from 'typescript';
1449
- import {IDLBlob} from './IDLBlob';
1450
- import {
1451
- ClassObject,
1452
- ClassObjectKind,
1453
- FunctionArguments,
1454
- FunctionArgumentType,
1455
- FunctionDeclaration,
1456
- FunctionObject,
1457
- IndexedPropertyDeclaration,
1458
- ParameterMode,
1459
- PropsDeclaration,
1460
- } from './declaration';
1461
- import {isUnionType} from "./utils";
1462
- &nbsp;
1463
- interface DefinedPropertyCollector {
1464
- properties: Set&lt;string&gt;;
1465
- files: Set&lt;string&gt;;
1466
- interfaces: Set&lt;string&gt;;
1467
- }
1468
- &nbsp;
1469
- export interface UnionTypeCollector {
1470
- types: Set&lt;ParameterType[]&gt;;
1471
- }
1472
- &nbsp;
1473
- // Cache for parsed source files to avoid re-parsing
1474
- const sourceFileCache = new Map&lt;string, ts.SourceFile&gt;();
1475
- &nbsp;
1476
- // Cache for type conversions to avoid redundant processing
1477
- const typeConversionCache = new Map&lt;string, ParameterType&gt;();
1478
- &nbsp;
1479
- // Type mapping constants for better performance
1480
- const BASIC_TYPE_MAP: Partial&lt;Record&lt;ts.SyntaxKind, FunctionArgumentType&gt;&gt; = {
1481
- [ts.SyntaxKind.StringKeyword]: FunctionArgumentType.dom_string,
1482
- [ts.SyntaxKind.NumberKeyword]: FunctionArgumentType.double,
1483
- [ts.SyntaxKind.BooleanKeyword]: FunctionArgumentType.boolean,
1484
- [ts.SyntaxKind.AnyKeyword]: FunctionArgumentType.any,
1485
- [ts.SyntaxKind.ObjectKeyword]: FunctionArgumentType.object,
1486
- [ts.SyntaxKind.VoidKeyword]: FunctionArgumentType.void,
1487
- [ts.SyntaxKind.NullKeyword]: FunctionArgumentType.null,
1488
- [ts.SyntaxKind.UndefinedKeyword]: FunctionArgumentType.undefined,
1489
- };
1490
- &nbsp;
1491
- const TYPE_REFERENCE_MAP: Record&lt;string, FunctionArgumentType&gt; = {
1492
- 'Function': FunctionArgumentType.function,
1493
- 'Promise': FunctionArgumentType.promise,
1494
- 'JSArrayProtoMethod': FunctionArgumentType.js_array_proto_methods,
1495
- 'int': FunctionArgumentType.int,
1496
- 'double': FunctionArgumentType.double,
1497
- };
1498
- &nbsp;
1499
- export function analyzer(blob: IDLBlob, definedPropertyCollector: DefinedPropertyCollector, unionTypeCollector: UnionTypeCollector) {
1500
- try {
1501
- // Check cache first
1502
- let sourceFile = sourceFileCache.get(blob.source);
1503
- if (!sourceFile) {
1504
- sourceFile = ts.createSourceFile(blob.source, blob.raw, ScriptTarget.ES2020);
1505
- sourceFileCache.set(blob.source, sourceFile);
1506
- }
1507
-
1508
- blob.objects = sourceFile.statements
1509
- .map(statement =&gt; {
1510
- try {
1511
- return walkProgram(blob, statement, definedPropertyCollector, unionTypeCollector);
1512
- } catch (error) {
1513
- <span class="cstat-no" title="statement not covered" > console.error(`Error processing statement in ${blob.source}:`, error);</span>
1514
- <span class="cstat-no" title="statement not covered" > return null;</span>
1515
- }
1516
- })
1517
- .filter(o =&gt; o instanceof ClassObject || <span class="branch-1 cbranch-no" title="branch not covered" >o instanceof FunctionObject)</span> as (FunctionObject | ClassObject)[];
1518
- } catch (error) {
1519
- <span class="cstat-no" title="statement not covered" > console.error(`Error analyzing ${blob.source}:`, error);</span>
1520
- <span class="cstat-no" title="statement not covered" > throw new Error(`Failed to analyze ${blob.source}: ${error instanceof Error ? error.message : String(error)}`);</span>
1521
- }
1522
- }
1523
- &nbsp;
1524
- export function buildClassRelationship() {
1525
- const globalClassMap = ClassObject.globalClassMap;
1526
- const globalClassRelationMap = ClassObject.globalClassRelationMap;
1527
- &nbsp;
1528
- // Use more efficient for...in loop
1529
- for (const key in globalClassMap) {
1530
- const obj = globalClassMap[key];
1531
- if (obj.parent) {
1532
- if (!globalClassRelationMap[obj.parent]) {
1533
- globalClassRelationMap[obj.parent] = [];
1534
- }
1535
- globalClassRelationMap[obj.parent].push(obj.name);
1536
- }
1537
- }
1538
- }
1539
- &nbsp;
1540
- function <span class="fstat-no" title="function not covered" >getInterfaceName(</span>statement: ts.Statement): string {
1541
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!ts.isInterfaceDeclaration(statement)) {</span>
1542
- <span class="cstat-no" title="statement not covered" > throw new Error('Statement is not an interface declaration');</span>
1543
- }
1544
- <span class="cstat-no" title="statement not covered" > return statement.name.escapedText as string;</span>
1545
- }
1546
- &nbsp;
1547
- function getHeritageType(heritage: HeritageClause): string | null {
1548
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!heritage.types.length) <span class="cstat-no" title="statement not covered" >return null;</span>
1549
-
1550
- const expression = heritage.types[0].expression;
1551
- if (ts.isIdentifier(expression)) {
1552
- return expression.escapedText as string;
1553
- }
1554
- <span class="cstat-no" title="statement not covered" > return null;</span>
1555
- }
1556
- &nbsp;
1557
- function getMixins(heritage: HeritageClause): string[] | null {
1558
- if (heritage.types.length &lt;= 1) return null;
1559
-
1560
- const mixins: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
1561
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >1;</span> i &lt; heritage.types.length; i++) {</span>
1562
- const expression = <span class="cstat-no" title="statement not covered" >heritage.types[i].expression;</span>
1563
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ts.isIdentifier(expression)) {</span>
1564
- <span class="cstat-no" title="statement not covered" > mixins.push(expression.escapedText as string);</span>
1565
- }
1566
- }
1567
- <span class="cstat-no" title="statement not covered" > return mixins.length &gt; 0 ? mixins : null;</span>
1568
- }
1569
- &nbsp;
1570
- function getPropName(propName: ts.PropertyName, prop?: PropsDeclaration): string {
1571
- switch (propName.kind) {
1572
- case ts.SyntaxKind.Identifier:
1573
- return propName.escapedText.toString();
1574
- <span class="branch-1 cbranch-no" title="branch not covered" > case ts.SyntaxKind.StringLiteral:</span>
1575
- <span class="cstat-no" title="statement not covered" > return propName.text;</span>
1576
- <span class="branch-2 cbranch-no" title="branch not covered" > case ts.SyntaxKind.NumericLiteral:</span>
1577
- <span class="cstat-no" title="statement not covered" > return propName.text;</span>
1578
- <span class="branch-3 cbranch-no" title="branch not covered" > case ts.SyntaxKind.ComputedPropertyName:</span>
1579
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ts.isPropertyAccessExpression(propName.expression)) {</span>
1580
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (prop) <span class="cstat-no" title="statement not covered" >prop.isSymbol = true;</span></span>
1581
- const expression = <span class="cstat-no" title="statement not covered" >propName.expression;</span>
1582
- <span class="cstat-no" title="statement not covered" > return `${expression.expression.getText()}_${expression.name.getText()}`;</span>
1583
- }
1584
- <span class="cstat-no" title="statement not covered" > throw new Error(`Computed property name of type ${ts.SyntaxKind[propName.expression.kind]} is not supported`);</span>
1585
- <span class="branch-4 cbranch-no" title="branch not covered" > default:</span>
1586
- <span class="cstat-no" title="statement not covered" > throw new Error(`Property name of type ${ts.SyntaxKind[propName.kind]} is not supported`);</span>
1587
- }
1588
- }
1589
- &nbsp;
1590
- function getParameterName(name: ts.BindingName): string {
1591
- if (ts.isIdentifier(name)) {
1592
- return name.escapedText.toString();
1593
- }
1594
- // Handle other binding patterns if needed
1595
- <span class="cstat-no" title="statement not covered" > console.warn('Non-identifier parameter names are not fully supported');</span>
1596
- <span class="cstat-no" title="statement not covered" > return '';</span>
1597
- }
1598
- &nbsp;
1599
- export type ParameterBaseType = FunctionArgumentType | string;
1600
- export type ParameterType = {
1601
- isArray?: boolean;
1602
- value: ParameterType | ParameterType[] | ParameterBaseType;
1603
- };
1604
- &nbsp;
1605
- function getParameterBaseType(type: ts.TypeNode, mode?: ParameterMode): ParameterBaseType {
1606
- // Check basic types first (most common case)
1607
- const basicType = BASIC_TYPE_MAP[type.kind];
1608
- if (basicType !== undefined) {
1609
- return basicType;
1610
- }
1611
- &nbsp;
1612
- if (type.kind === ts.SyntaxKind.TypeReference) {
1613
- const typeReference = type as ts.TypeReferenceNode;
1614
- const typeName = typeReference.typeName;
1615
-
1616
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!ts.isIdentifier(typeName)) {
1617
- <span class="cstat-no" title="statement not covered" > console.warn('Non-identifier type references are not supported');</span>
1618
- <span class="cstat-no" title="statement not covered" > return FunctionArgumentType.any;</span>
1619
- }
1620
-
1621
- const identifier = typeName.text;
1622
-
1623
- // Check simple type references
1624
- const mappedType = TYPE_REFERENCE_MAP[identifier];
1625
- if (mappedType !== undefined) {
1626
- return mappedType;
1627
- }
1628
-
1629
- // Handle special type wrappers
1630
- switch (identifier) {
1631
- <span class="branch-0 cbranch-no" title="branch not covered" > case 'NewObject':</span>
1632
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (mode) <span class="cstat-no" title="statement not covered" >mode.newObject = true;</span></span>
1633
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (typeReference.typeArguments &amp;&amp; typeReference.typeArguments[0]) {</span>
1634
- const argument = <span class="cstat-no" title="statement not covered" >typeReference.typeArguments[0];</span>
1635
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ts.isTypeReferenceNode(argument) &amp;&amp; ts.isIdentifier(argument.typeName)) {</span>
1636
- <span class="cstat-no" title="statement not covered" > return argument.typeName.text;</span>
1637
- }
1638
- }
1639
- <span class="cstat-no" title="statement not covered" > return FunctionArgumentType.any;</span>
1640
-
1641
- <span class="branch-1 cbranch-no" title="branch not covered" > case 'DartImpl':</span>
1642
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (mode) <span class="cstat-no" title="statement not covered" >mode.dartImpl = true;</span></span>
1643
- <span class="cstat-no" title="statement not covered" > return handleDartImplType(typeReference, mode);</span>
1644
-
1645
- <span class="branch-2 cbranch-no" title="branch not covered" > case 'DependentsOnLayout':</span>
1646
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (mode) <span class="cstat-no" title="statement not covered" >mode.layoutDependent = true;</span></span>
1647
- <span class="cstat-no" title="statement not covered" > return handleDependentsOnLayoutType(typeReference, mode);</span>
1648
-
1649
- <span class="branch-3 cbranch-no" title="branch not covered" > case 'StaticMember':</span>
1650
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (mode) <span class="cstat-no" title="statement not covered" >mode.static = true;</span></span>
1651
- <span class="cstat-no" title="statement not covered" > return handleGenericWrapper(typeReference, mode);</span>
1652
-
1653
- <span class="branch-4 cbranch-no" title="branch not covered" > case 'StaticMethod':</span>
1654
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (mode) <span class="cstat-no" title="statement not covered" >mode.staticMethod = true;</span></span>
1655
- <span class="cstat-no" title="statement not covered" > return handleGenericWrapper(typeReference, mode);</span>
1656
-
1657
- default:
1658
- <span class="missing-if-branch" title="if path not taken" >I</span>if (identifier.includes('SupportAsync')) {
1659
- <span class="cstat-no" title="statement not covered" > return handleSupportAsyncType(identifier, typeReference, mode);</span>
1660
- }
1661
- return identifier;
1662
- }
1663
- }
1664
-
1665
- if (type.kind === ts.SyntaxKind.LiteralType) {
1666
- // Handle literal types - check if it's a null literal
1667
- const literalType = type as ts.LiteralTypeNode;
1668
- if (literalType.literal.kind === ts.SyntaxKind.NullKeyword) {
1669
- return FunctionArgumentType.null;
1670
- }
1671
- <span class="cstat-no" title="statement not covered" > return FunctionArgumentType.any;</span>
1672
- }
1673
-
1674
- <span class="cstat-no" title="statement not covered" > return FunctionArgumentType.any;</span>
1675
- }
1676
- &nbsp;
1677
- function <span class="fstat-no" title="function not covered" >handleDartImplType(</span>typeReference: ts.TypeReferenceNode, mode?: ParameterMode): ParameterBaseType {
1678
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!typeReference.typeArguments || !typeReference.typeArguments[0]) {</span>
1679
- <span class="cstat-no" title="statement not covered" > return FunctionArgumentType.any;</span>
1680
- }
1681
-
1682
- let argument = <span class="cstat-no" title="statement not covered" >typeReference.typeArguments[0];</span>
1683
-
1684
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ts.isTypeReferenceNode(argument)) {</span>
1685
- const typeName = <span class="cstat-no" title="statement not covered" >argument.typeName;</span>
1686
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ts.isIdentifier(typeName) &amp;&amp; typeName.text === 'DependentsOnLayout') {</span>
1687
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (mode) <span class="cstat-no" title="statement not covered" >mode.layoutDependent = true;</span></span>
1688
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (argument.typeArguments &amp;&amp; argument.typeArguments[0]) {</span>
1689
- <span class="cstat-no" title="statement not covered" > argument = argument.typeArguments[0];</span>
1690
- }
1691
- }
1692
- }
1693
-
1694
- <span class="cstat-no" title="statement not covered" > return getParameterBaseType(argument, mode);</span>
1695
- }
1696
- &nbsp;
1697
- function <span class="fstat-no" title="function not covered" >handleDependentsOnLayoutType(</span>typeReference: ts.TypeReferenceNode, mode?: ParameterMode): ParameterBaseType {
1698
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!typeReference.typeArguments || !typeReference.typeArguments[0]) {</span>
1699
- <span class="cstat-no" title="statement not covered" > return FunctionArgumentType.any;</span>
1700
- }
1701
-
1702
- const argument = <span class="cstat-no" title="statement not covered" >typeReference.typeArguments[0];</span>
1703
- <span class="cstat-no" title="statement not covered" > return getParameterBaseType(argument, mode);</span>
1704
- }
1705
- &nbsp;
1706
- function <span class="fstat-no" title="function not covered" >handleGenericWrapper(</span>typeReference: ts.TypeReferenceNode, mode?: ParameterMode): ParameterBaseType {
1707
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!typeReference.typeArguments || !typeReference.typeArguments[0]) {</span>
1708
- <span class="cstat-no" title="statement not covered" > return FunctionArgumentType.any;</span>
1709
- }
1710
-
1711
- const argument = <span class="cstat-no" title="statement not covered" >typeReference.typeArguments[0];</span>
1712
- <span class="cstat-no" title="statement not covered" > return getParameterBaseType(argument, mode);</span>
1713
- }
1714
- &nbsp;
1715
- function <span class="fstat-no" title="function not covered" >handleSupportAsyncType(</span>identifier: string, typeReference: ts.TypeReferenceNode, mode?: ParameterMode): ParameterBaseType {
1716
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (mode) {</span>
1717
- <span class="cstat-no" title="statement not covered" > mode.supportAsync = true;</span>
1718
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (identifier === "SupportAsyncManual") {</span>
1719
- <span class="cstat-no" title="statement not covered" > mode.supportAsyncManual = true;</span>
1720
- }
1721
- }
1722
-
1723
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!typeReference.typeArguments || !typeReference.typeArguments[0]) {</span>
1724
- <span class="cstat-no" title="statement not covered" > return FunctionArgumentType.any;</span>
1725
- }
1726
-
1727
- let argument = <span class="cstat-no" title="statement not covered" >typeReference.typeArguments[0];</span>
1728
-
1729
- <span class="cstat-no" title="statement not covered" > if (ts.isTypeReferenceNode(argument)) {</span>
1730
- const typeName = <span class="cstat-no" title="statement not covered" >argument.typeName;</span>
1731
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ts.isIdentifier(typeName) &amp;&amp; typeName.text === 'DartImpl') {</span>
1732
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (mode) <span class="cstat-no" title="statement not covered" >mode.dartImpl = true;</span></span>
1733
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (argument.typeArguments &amp;&amp; argument.typeArguments[0]) {</span>
1734
- <span class="cstat-no" title="statement not covered" > argument = argument.typeArguments[0];</span>
1735
- }
1736
- }
1737
- } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (ts.isArrayTypeNode(argument)) {</span>
1738
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (mode) <span class="cstat-no" title="statement not covered" >mode.supportAsyncArrayValue = true;</span></span>
1739
- <span class="cstat-no" title="statement not covered" > return getParameterBaseType(argument.elementType, mode);</span>
1740
- }
1741
-
1742
- <span class="cstat-no" title="statement not covered" > return getParameterBaseType(argument, mode);</span>
1743
- }
1744
- &nbsp;
1745
- function getParameterType(type: ts.TypeNode, unionTypeCollector: UnionTypeCollector, mode?: ParameterMode): ParameterType {
1746
- // Generate cache key
1747
- const cacheKey = `${type.kind}_${type.pos}_${type.end}`;
1748
-
1749
- // Check cache first (only for types without mode)
1750
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!mode) {
1751
- const cached = <span class="cstat-no" title="statement not covered" >typeConversionCache.get(cacheKey);</span>
1752
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (cached) <span class="cstat-no" title="statement not covered" >return cached;</span></span>
1753
- }
1754
-
1755
- let result: ParameterType;
1756
-
1757
- <span class="missing-if-branch" title="if path not taken" >I</span>if (type.kind === ts.SyntaxKind.ParenthesizedType) {
1758
- const typeNode = <span class="cstat-no" title="statement not covered" >type as ts.ParenthesizedTypeNode;</span>
1759
- <span class="cstat-no" title="statement not covered" > result = getParameterType(typeNode.type, unionTypeCollector, mode);</span>
1760
- } else if (type.kind === ts.SyntaxKind.ArrayType) {
1761
- const arrayType = type as ts.ArrayTypeNode;
1762
- result = {
1763
- isArray: true,
1764
- value: getParameterType(arrayType.elementType, unionTypeCollector, mode)
1765
- };
1766
- } else if (type.kind === ts.SyntaxKind.UnionType) {
1767
- const unionType = type as ts.UnionTypeNode;
1768
- const types = unionType.types.map(t =&gt; getParameterType(t, unionTypeCollector, mode));
1769
- result = {
1770
- isArray: false,
1771
- value: types
1772
- };
1773
- if (isUnionType(result)) {
1774
- unionTypeCollector.types.add(result.value as ParameterType[]);
1775
- }
1776
- } else if (type.kind === ts.SyntaxKind.TypeReference) {
1777
- result = handleTypeReferenceForParameter(type as ts.TypeReferenceNode, unionTypeCollector, mode);
1778
- } else {
1779
- result = {
1780
- isArray: false,
1781
- value: getParameterBaseType(type, mode)
1782
- };
1783
- }
1784
-
1785
- // Cache the result if no mode
1786
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!mode) {
1787
- <span class="cstat-no" title="statement not covered" > typeConversionCache.set(cacheKey, result);</span>
1788
- }
1789
-
1790
- return result;
1791
- }
1792
- &nbsp;
1793
- function handleTypeReferenceForParameter(typeReference: ts.TypeReferenceNode, unionTypeCollector: UnionTypeCollector, mode?: ParameterMode): ParameterType {
1794
- const typeName = typeReference.typeName;
1795
-
1796
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!ts.isIdentifier(typeName)) {
1797
- <span class="cstat-no" title="statement not covered" > return {</span>
1798
- isArray: false,
1799
- value: FunctionArgumentType.any
1800
- };
1801
- }
1802
-
1803
- const identifier = typeName.text;
1804
-
1805
- <span class="missing-if-branch" title="if path not taken" >I</span>if (identifier.includes('SupportAsync') &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >typeReference.typeArguments </span>&amp;&amp; <span class="branch-2 cbranch-no" title="branch not covered" >typeReference.typeArguments[0])</span> {
1806
- const argument = <span class="cstat-no" title="statement not covered" >typeReference.typeArguments[0];</span>
1807
-
1808
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ts.isUnionTypeNode(argument)) {</span>
1809
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (mode) {</span>
1810
- <span class="cstat-no" title="statement not covered" > mode.supportAsync = true;</span>
1811
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (identifier === 'SupportAsyncManual') {</span>
1812
- <span class="cstat-no" title="statement not covered" > mode.supportAsyncManual = true;</span>
1813
- }
1814
- }
1815
-
1816
- const types = <span class="cstat-no" title="statement not covered" >argument.types.map(<span class="fstat-no" title="function not covered" >t </span>=&gt; <span class="cstat-no" title="statement not covered" >getParameterType(t, unionTypeCollector, mode))</span>;</span>
1817
- const result = <span class="cstat-no" title="statement not covered" >{</span>
1818
- isArray: false,
1819
- value: types
1820
- };
1821
-
1822
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isUnionType(result)) {</span>
1823
- <span class="cstat-no" title="statement not covered" > unionTypeCollector.types.add(result.value as ParameterType[]);</span>
1824
- }
1825
-
1826
- <span class="cstat-no" title="statement not covered" > return result;</span>
1827
- }
1828
- }
1829
-
1830
- return {
1831
- isArray: false,
1832
- value: getParameterBaseType(typeReference, mode)
1833
- };
1834
- }
1835
- &nbsp;
1836
- function paramsNodeToArguments(parameter: ts.ParameterDeclaration, unionTypeCollector: UnionTypeCollector): FunctionArguments {
1837
- const args = new FunctionArguments();
1838
- args.name = getParameterName(parameter.name);
1839
-
1840
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!parameter.type) {
1841
- <span class="cstat-no" title="statement not covered" > console.warn(`Parameter ${args.name} has no type annotation, defaulting to any`);</span>
1842
- <span class="cstat-no" title="statement not covered" > args.type = { isArray: false, value: FunctionArgumentType.any };</span>
1843
- <span class="cstat-no" title="statement not covered" > return args;</span>
1844
- }
1845
-
1846
- const typeMode = new ParameterMode();
1847
- args.type = getParameterType(parameter.type, unionTypeCollector, typeMode);
1848
- args.isDotDotDot = !!parameter.dotDotDotToken;
1849
- args.typeMode = typeMode;
1850
- args.required = !parameter.questionToken;
1851
-
1852
- return args;
1853
- }
1854
- &nbsp;
1855
- function isParamsReadOnly(m: ts.PropertySignature): boolean {
1856
- if (!m.modifiers) return false;
1857
- <span class="cstat-no" title="statement not covered" > return m.modifiers.some(<span class="fstat-no" title="function not covered" >k </span>=&gt; <span class="cstat-no" title="statement not covered" >k.kind === ts.SyntaxKind.ReadonlyKeyword)</span>;</span>
1858
- }
1859
- &nbsp;
1860
- function walkProgram(blob: IDLBlob, statement: ts.Statement, definedPropertyCollector: DefinedPropertyCollector, unionTypeCollector: UnionTypeCollector) {
1861
- switch(statement.kind) {
1862
- case ts.SyntaxKind.InterfaceDeclaration:
1863
- return processInterfaceDeclaration(statement as ts.InterfaceDeclaration, blob, definedPropertyCollector, unionTypeCollector);
1864
-
1865
- <span class="branch-1 cbranch-no" title="branch not covered" > case ts.SyntaxKind.VariableStatement:</span>
1866
- <span class="cstat-no" title="statement not covered" > return processVariableStatement(statement as VariableStatement, unionTypeCollector);</span>
1867
-
1868
- <span class="branch-2 cbranch-no" title="branch not covered" > default:</span>
1869
- <span class="cstat-no" title="statement not covered" > return null;</span>
1870
- }
1871
- }
1872
- &nbsp;
1873
- function processInterfaceDeclaration(
1874
- statement: ts.InterfaceDeclaration,
1875
- blob: IDLBlob,
1876
- definedPropertyCollector: DefinedPropertyCollector,
1877
- unionTypeCollector: UnionTypeCollector
1878
- ): ClassObject | null {
1879
- const interfaceName = statement.name.escapedText.toString();
1880
- const obj = new ClassObject();
1881
-
1882
- // Process heritage clauses
1883
- if (statement.heritageClauses) {
1884
- const heritage = statement.heritageClauses[0];
1885
- const heritageType = getHeritageType(heritage);
1886
- const mixins = getMixins(heritage);
1887
-
1888
- if (heritageType) obj.parent = heritageType;
1889
- <span class="missing-if-branch" title="if path not taken" >I</span>if (mixins) <span class="cstat-no" title="statement not covered" >obj.mixinParent = mixins;</span>
1890
- }
1891
-
1892
- obj.name = interfaceName;
1893
-
1894
- if (obj.kind === ClassObjectKind.interface) {
1895
- definedPropertyCollector.interfaces.add('QJS' + interfaceName);
1896
- definedPropertyCollector.files.add(blob.filename);
1897
- definedPropertyCollector.properties.add(interfaceName);
1898
- }
1899
-
1900
- // Process members in batches for better performance
1901
- const members = Array.from(statement.members);
1902
- processMembersBatch(members, obj, definedPropertyCollector, unionTypeCollector);
1903
-
1904
- ClassObject.globalClassMap[interfaceName] = obj;
1905
-
1906
- return obj;
1907
- }
1908
- &nbsp;
1909
- function processMembersBatch(
1910
- members: ts.TypeElement[],
1911
- obj: ClassObject,
1912
- definedPropertyCollector: DefinedPropertyCollector,
1913
- unionTypeCollector: UnionTypeCollector
1914
- ): void {
1915
- for (const member of members) {
1916
- try {
1917
- processMember(member, obj, definedPropertyCollector, unionTypeCollector);
1918
- } catch (error) {
1919
- <span class="cstat-no" title="statement not covered" > console.error(`Error processing member:`, error);</span>
1920
- }
1921
- }
1922
- }
1923
- &nbsp;
1924
- function processMember(
1925
- member: ts.TypeElement,
1926
- obj: ClassObject,
1927
- definedPropertyCollector: DefinedPropertyCollector,
1928
- unionTypeCollector: UnionTypeCollector
1929
- ): void {
1930
- switch(member.kind) {
1931
- case ts.SyntaxKind.PropertySignature:
1932
- processPropertySignature(member as ts.PropertySignature, obj, definedPropertyCollector, unionTypeCollector);
1933
- break;
1934
-
1935
- case ts.SyntaxKind.MethodSignature:
1936
- processMethodSignature(member as ts.MethodSignature, obj, unionTypeCollector);
1937
- break;
1938
-
1939
- <span class="branch-2 cbranch-no" title="branch not covered" > case ts.SyntaxKind.IndexSignature:</span>
1940
- <span class="cstat-no" title="statement not covered" > processIndexSignature(member as ts.IndexSignatureDeclaration, obj, unionTypeCollector);</span>
1941
- <span class="cstat-no" title="statement not covered" > break;</span>
1942
-
1943
- <span class="branch-3 cbranch-no" title="branch not covered" > case ts.SyntaxKind.ConstructSignature:</span>
1944
- <span class="cstat-no" title="statement not covered" > processConstructSignature(member as ts.ConstructSignatureDeclaration, obj, unionTypeCollector);</span>
1945
- <span class="cstat-no" title="statement not covered" > break;</span>
1946
- }
1947
- }
1948
- &nbsp;
1949
- function processPropertySignature(
1950
- member: ts.PropertySignature,
1951
- obj: ClassObject,
1952
- definedPropertyCollector: DefinedPropertyCollector,
1953
- unionTypeCollector: UnionTypeCollector
1954
- ): void {
1955
- const prop = new PropsDeclaration();
1956
- prop.name = getPropName(member.name!, prop);
1957
- prop.readonly = isParamsReadOnly(member);
1958
-
1959
- definedPropertyCollector.properties.add(prop.name);
1960
-
1961
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!member.type) {
1962
- <span class="cstat-no" title="statement not covered" > console.warn(`Property ${prop.name} has no type annotation`);</span>
1963
- <span class="cstat-no" title="statement not covered" > return;</span>
1964
- }
1965
-
1966
- const mode = new ParameterMode();
1967
- prop.type = getParameterType(member.type, unionTypeCollector, mode);
1968
- prop.typeMode = mode;
1969
- prop.optional = !!member.questionToken;
1970
-
1971
- <span class="missing-if-branch" title="if path not taken" >I</span>if (prop.type.value === FunctionArgumentType.function &amp;&amp; ts.isFunctionTypeNode(member.type)) {
1972
- const functionProps = <span class="cstat-no" title="statement not covered" >prop as FunctionDeclaration;</span>
1973
- <span class="cstat-no" title="statement not covered" > functionProps.args = member.type.parameters.map(<span class="fstat-no" title="function not covered" >params </span>=&gt; </span>
1974
- <span class="cstat-no" title="statement not covered" > paramsNodeToArguments(params, unionTypeCollector)</span>
1975
- );
1976
- <span class="cstat-no" title="statement not covered" > obj.methods.push(functionProps);</span>
1977
- } else {
1978
- obj.props.push(prop);
1979
-
1980
- // Handle async properties
1981
- <span class="missing-if-branch" title="if path not taken" >I</span>if (prop.typeMode.supportAsync) {
1982
- const asyncProp = <span class="cstat-no" title="statement not covered" >createAsyncProperty(prop, mode);</span>
1983
- <span class="cstat-no" title="statement not covered" > definedPropertyCollector.properties.add(asyncProp.name);</span>
1984
- <span class="cstat-no" title="statement not covered" > obj.props.push(asyncProp);</span>
1985
- }
1986
- }
1987
- }
1988
- &nbsp;
1989
- function <span class="fstat-no" title="function not covered" >createAsyncProperty(</span>prop: PropsDeclaration, mode: ParameterMode): PropsDeclaration {
1990
- const asyncProp = <span class="cstat-no" title="statement not covered" >Object.assign({}, prop);</span>
1991
- const syncMode = <span class="cstat-no" title="statement not covered" >Object.assign({}, mode);</span>
1992
-
1993
- <span class="cstat-no" title="statement not covered" > syncMode.supportAsync = false;</span>
1994
- <span class="cstat-no" title="statement not covered" > syncMode.supportAsyncManual = false;</span>
1995
- <span class="cstat-no" title="statement not covered" > prop.typeMode = syncMode;</span>
1996
-
1997
- <span class="cstat-no" title="statement not covered" > asyncProp.name = asyncProp.name + '_async';</span>
1998
- <span class="cstat-no" title="statement not covered" > asyncProp.async_type = {</span>
1999
- isArray: false,
2000
- value: FunctionArgumentType.promise
2001
- };
2002
-
2003
- <span class="cstat-no" title="statement not covered" > return asyncProp;</span>
2004
- }
2005
- &nbsp;
2006
- function processMethodSignature(
2007
- member: ts.MethodSignature,
2008
- obj: ClassObject,
2009
- unionTypeCollector: UnionTypeCollector
2010
- ): void {
2011
- const f = new FunctionDeclaration();
2012
- f.name = getPropName(member.name!);
2013
- f.args = member.parameters.map(params =&gt;
2014
- paramsNodeToArguments(params, unionTypeCollector)
2015
- );
2016
-
2017
- if (member.type) {
2018
- const mode = new ParameterMode();
2019
- f.returnType = getParameterType(member.type, unionTypeCollector, mode);
2020
-
2021
- <span class="missing-if-branch" title="if path not taken" >I</span>if (mode.supportAsyncArrayValue) {
2022
- <span class="cstat-no" title="statement not covered" > f.returnType = {</span>
2023
- isArray: true,
2024
- value: f.returnType
2025
- };
2026
- }
2027
-
2028
- f.returnTypeMode = mode;
2029
-
2030
- <span class="missing-if-branch" title="if path not taken" >I</span>if (f.returnTypeMode.staticMethod) {
2031
- <span class="cstat-no" title="statement not covered" > obj.staticMethods.push(f);</span>
2032
- }
2033
- }
2034
-
2035
- obj.methods.push(f);
2036
-
2037
- // Handle async methods
2038
- <span class="missing-if-branch" title="if path not taken" >I</span>if (f.returnTypeMode<span class="branch-0 cbranch-no" title="branch not covered" >?.s</span>upportAsync) {
2039
- const asyncFunc = <span class="cstat-no" title="statement not covered" >createAsyncMethod(member, f, unionTypeCollector);</span>
2040
- <span class="cstat-no" title="statement not covered" > obj.methods.push(asyncFunc);</span>
2041
- }
2042
- }
2043
- &nbsp;
2044
- function <span class="fstat-no" title="function not covered" >createAsyncMethod(</span>
2045
- member: ts.MethodSignature,
2046
- originalFunc: FunctionDeclaration,
2047
- unionTypeCollector: UnionTypeCollector
2048
- ): FunctionDeclaration {
2049
- const asyncFunc = <span class="cstat-no" title="statement not covered" >Object.assign({}, originalFunc);</span>
2050
- const mode = <span class="cstat-no" title="statement not covered" >Object.assign({}, originalFunc.returnTypeMode);</span>
2051
-
2052
- <span class="cstat-no" title="statement not covered" > mode.supportAsync = false;</span>
2053
- <span class="cstat-no" title="statement not covered" > mode.supportAsyncManual = false;</span>
2054
- <span class="cstat-no" title="statement not covered" > originalFunc.returnTypeMode = mode;</span>
2055
-
2056
- <span class="cstat-no" title="statement not covered" > asyncFunc.name = getPropName(member.name!) + '_async';</span>
2057
- <span class="cstat-no" title="statement not covered" > asyncFunc.args = member.parameters.map(<span class="fstat-no" title="function not covered" >params </span>=&gt; </span>
2058
- <span class="cstat-no" title="statement not covered" > paramsNodeToArguments(params, unionTypeCollector)</span>
2059
- );
2060
- <span class="cstat-no" title="statement not covered" > asyncFunc.async_returnType = {</span>
2061
- isArray: false,
2062
- value: FunctionArgumentType.promise
2063
- };
2064
-
2065
- <span class="cstat-no" title="statement not covered" > return asyncFunc;</span>
2066
- }
2067
- &nbsp;
2068
- function <span class="fstat-no" title="function not covered" >processIndexSignature(</span>
2069
- member: ts.IndexSignatureDeclaration,
2070
- obj: ClassObject,
2071
- unionTypeCollector: UnionTypeCollector
2072
- ): void {
2073
- const prop = <span class="cstat-no" title="statement not covered" >new IndexedPropertyDeclaration();</span>
2074
- const modifier = <span class="cstat-no" title="statement not covered" >member.modifiers;</span>
2075
- <span class="cstat-no" title="statement not covered" > prop.readonly = !!(modifier &amp;&amp; modifier[0].kind === ts.SyntaxKind.ReadonlyKeyword);</span>
2076
-
2077
- const params = <span class="cstat-no" title="statement not covered" >member.parameters;</span>
2078
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (params.length &gt; 0 &amp;&amp; params[0].type) {</span>
2079
- <span class="cstat-no" title="statement not covered" > prop.indexKeyType = params[0].type.kind === ts.SyntaxKind.NumberKeyword ? 'number' : 'string';</span>
2080
- }
2081
-
2082
- const mode = <span class="cstat-no" title="statement not covered" >new ParameterMode();</span>
2083
- <span class="cstat-no" title="statement not covered" > prop.type = getParameterType(member.type, unionTypeCollector, mode);</span>
2084
- <span class="cstat-no" title="statement not covered" > prop.typeMode = mode;</span>
2085
- <span class="cstat-no" title="statement not covered" > obj.indexedProp = prop;</span>
2086
- }
2087
- &nbsp;
2088
- function <span class="fstat-no" title="function not covered" >processConstructSignature(</span>
2089
- member: ts.ConstructSignatureDeclaration,
2090
- obj: ClassObject,
2091
- unionTypeCollector: UnionTypeCollector
2092
- ): void {
2093
- const c = <span class="cstat-no" title="statement not covered" >new FunctionDeclaration();</span>
2094
- <span class="cstat-no" title="statement not covered" > c.name = 'constructor';</span>
2095
- <span class="cstat-no" title="statement not covered" > c.args = member.parameters.map(<span class="fstat-no" title="function not covered" >params </span>=&gt; </span>
2096
- <span class="cstat-no" title="statement not covered" > paramsNodeToArguments(params, unionTypeCollector)</span>
2097
- );
2098
-
2099
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (member.type) {</span>
2100
- <span class="cstat-no" title="statement not covered" > c.returnType = getParameterType(member.type, unionTypeCollector);</span>
2101
- }
2102
-
2103
- <span class="cstat-no" title="statement not covered" > obj.construct = c;</span>
2104
- }
2105
- &nbsp;
2106
- function <span class="fstat-no" title="function not covered" >processVariableStatement(</span>
2107
- statement: VariableStatement,
2108
- unionTypeCollector: UnionTypeCollector
2109
- ): FunctionObject | null {
2110
- const declaration = <span class="cstat-no" title="statement not covered" >statement.declarationList.declarations[0];</span>
2111
-
2112
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!ts.isIdentifier(declaration.name)) {</span>
2113
- <span class="cstat-no" title="statement not covered" > console.warn('Variable declaration with non-identifier name is not supported');</span>
2114
- <span class="cstat-no" title="statement not covered" > return null;</span>
2115
- }
2116
-
2117
- const methodName = <span class="cstat-no" title="statement not covered" >declaration.name.text;</span>
2118
- const type = <span class="cstat-no" title="statement not covered" >declaration.type;</span>
2119
-
2120
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!type || !ts.isFunctionTypeNode(type)) {</span>
2121
- <span class="cstat-no" title="statement not covered" > return null;</span>
2122
- }
2123
-
2124
- const functionObject = <span class="cstat-no" title="statement not covered" >new FunctionObject();</span>
2125
- <span class="cstat-no" title="statement not covered" > functionObject.declare = new FunctionDeclaration();</span>
2126
- <span class="cstat-no" title="statement not covered" > functionObject.declare.name = methodName;</span>
2127
- <span class="cstat-no" title="statement not covered" > functionObject.declare.args = type.parameters.map(<span class="fstat-no" title="function not covered" >param </span>=&gt; </span>
2128
- <span class="cstat-no" title="statement not covered" > paramsNodeToArguments(param, unionTypeCollector)</span>
2129
- );
2130
- <span class="cstat-no" title="statement not covered" > functionObject.declare.returnType = getParameterType(type.type, unionTypeCollector);</span>
2131
-
2132
- <span class="cstat-no" title="statement not covered" > return functionObject;</span>
2133
- }
2134
- &nbsp;
2135
- // Clear caches when needed (e.g., between runs)
2136
- export function clearCaches() {
2137
- sourceFileCache.clear();
2138
- typeConversionCache.clear();
2139
- }</pre></td></tr></table></pre>
2140
-
2141
- <div class='push'></div><!-- for sticky footer -->
2142
- </div><!-- /wrapper -->
2143
- <div class='footer quiet pad2 space-top1 center small'>
2144
- Code coverage generated by
2145
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2146
- at 2025-06-15T19:54:25.468Z
2147
- </div>
2148
- <script src="prettify.js"></script>
2149
- <script>
2150
- window.onload = function () {
2151
- prettyPrint();
2152
- };
2153
- </script>
2154
- <script src="sorter.js"></script>
2155
- <script src="block-navigation.js"></script>
2156
- </body>
2157
- </html>
2158
-