@openwebf/webf 0.22.1 → 0.22.4

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 (57) hide show
  1. package/bin/webf.js +1 -0
  2. package/dist/IDLBlob.js +17 -0
  3. package/dist/analyzer.js +578 -0
  4. package/dist/analyzer_original.js +467 -0
  5. package/dist/commands.js +704 -0
  6. package/dist/dart.js +300 -0
  7. package/dist/declaration.js +63 -0
  8. package/dist/generator.js +466 -0
  9. package/dist/logger.js +103 -0
  10. package/dist/react.js +283 -0
  11. package/dist/utils.js +127 -0
  12. package/dist/vue.js +159 -0
  13. package/package.json +8 -1
  14. package/src/IDLBlob.ts +2 -2
  15. package/src/analyzer.ts +19 -1
  16. package/src/commands.ts +201 -22
  17. package/src/dart.ts +172 -11
  18. package/src/declaration.ts +5 -0
  19. package/src/generator.ts +82 -14
  20. package/src/react.ts +197 -62
  21. package/templates/class.dart.tpl +10 -4
  22. package/templates/gitignore.tpl +8 -1
  23. package/templates/react.component.tsx.tpl +78 -26
  24. package/templates/react.index.ts.tpl +0 -1
  25. package/templates/react.package.json.tpl +3 -0
  26. package/test/commands.test.ts +0 -5
  27. package/test/generator.test.ts +29 -8
  28. package/test/packageName.test.ts +231 -0
  29. package/test/react.test.ts +94 -9
  30. package/CLAUDE.md +0 -206
  31. package/README-zhCN.md +0 -256
  32. package/coverage/clover.xml +0 -1295
  33. package/coverage/coverage-final.json +0 -12
  34. package/coverage/lcov-report/IDLBlob.ts.html +0 -142
  35. package/coverage/lcov-report/analyzer.ts.html +0 -2158
  36. package/coverage/lcov-report/analyzer_original.ts.html +0 -1450
  37. package/coverage/lcov-report/base.css +0 -224
  38. package/coverage/lcov-report/block-navigation.js +0 -87
  39. package/coverage/lcov-report/commands.ts.html +0 -700
  40. package/coverage/lcov-report/dart.ts.html +0 -490
  41. package/coverage/lcov-report/declaration.ts.html +0 -337
  42. package/coverage/lcov-report/favicon.png +0 -0
  43. package/coverage/lcov-report/generator.ts.html +0 -1171
  44. package/coverage/lcov-report/index.html +0 -266
  45. package/coverage/lcov-report/logger.ts.html +0 -424
  46. package/coverage/lcov-report/prettify.css +0 -1
  47. package/coverage/lcov-report/prettify.js +0 -2
  48. package/coverage/lcov-report/react.ts.html +0 -619
  49. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  50. package/coverage/lcov-report/sorter.js +0 -196
  51. package/coverage/lcov-report/utils.ts.html +0 -466
  52. package/coverage/lcov-report/vue.ts.html +0 -613
  53. package/coverage/lcov.info +0 -2149
  54. package/global.d.ts +0 -2
  55. package/jest.config.js +0 -24
  56. package/templates/react.createComponent.tpl +0 -286
  57. package/tsconfig.json +0 -30
@@ -1,1171 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for generator.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> generator.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">93.5% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>187/200</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">79.31% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>23/29</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>21/21</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">93.22% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>179/192</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
429
- <span class="cline-any cline-yes">2x</span>
430
- <span class="cline-any cline-yes">2x</span>
431
- <span class="cline-any cline-yes">2x</span>
432
- <span class="cline-any cline-yes">2x</span>
433
- <span class="cline-any cline-yes">2x</span>
434
- <span class="cline-any cline-yes">2x</span>
435
- <span class="cline-any cline-yes">2x</span>
436
- <span class="cline-any cline-yes">2x</span>
437
- <span class="cline-any cline-yes">2x</span>
438
- <span class="cline-any cline-yes">2x</span>
439
- <span class="cline-any cline-yes">2x</span>
440
- <span class="cline-any cline-neutral">&nbsp;</span>
441
- <span class="cline-any cline-neutral">&nbsp;</span>
442
- <span class="cline-any cline-yes">2x</span>
443
- <span class="cline-any cline-neutral">&nbsp;</span>
444
- <span class="cline-any cline-neutral">&nbsp;</span>
445
- <span class="cline-any cline-yes">2x</span>
446
- <span class="cline-any cline-neutral">&nbsp;</span>
447
- <span class="cline-any cline-neutral">&nbsp;</span>
448
- <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-yes">36x</span>
450
- <span class="cline-any cline-yes">36x</span>
451
- <span class="cline-any cline-yes">4x</span>
452
- <span class="cline-any cline-neutral">&nbsp;</span>
453
- <span class="cline-any cline-neutral">&nbsp;</span>
454
- <span class="cline-any cline-neutral">&nbsp;</span>
455
- <span class="cline-any cline-yes">32x</span>
456
- <span class="cline-any cline-yes">29x</span>
457
- <span class="cline-any cline-yes">29x</span>
458
- <span class="cline-any cline-neutral">&nbsp;</span>
459
- <span class="cline-any cline-yes">29x</span>
460
- <span class="cline-any cline-no">&nbsp;</span>
461
- <span class="cline-any cline-no">&nbsp;</span>
462
- <span class="cline-any cline-neutral">&nbsp;</span>
463
- <span class="cline-any cline-neutral">&nbsp;</span>
464
- <span class="cline-any cline-neutral">&nbsp;</span>
465
- <span class="cline-any cline-neutral">&nbsp;</span>
466
- <span class="cline-any cline-yes">32x</span>
467
- <span class="cline-any cline-yes">32x</span>
468
- <span class="cline-any cline-yes">3x</span>
469
- <span class="cline-any cline-neutral">&nbsp;</span>
470
- <span class="cline-any cline-neutral">&nbsp;</span>
471
- <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-yes">32x</span>
473
- <span class="cline-any cline-yes">32x</span>
474
- <span class="cline-any cline-yes">32x</span>
475
- <span class="cline-any cline-neutral">&nbsp;</span>
476
- <span class="cline-any cline-yes">32x</span>
477
- <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-neutral">&nbsp;</span>
480
- <span class="cline-any cline-yes">21x</span>
481
- <span class="cline-any cline-yes">21x</span>
482
- <span class="cline-any cline-yes">21x</span>
483
- <span class="cline-any cline-neutral">&nbsp;</span>
484
- <span class="cline-any cline-neutral">&nbsp;</span>
485
- <span class="cline-any cline-neutral">&nbsp;</span>
486
- <span class="cline-any cline-yes">21x</span>
487
- <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-neutral">&nbsp;</span>
489
- <span class="cline-any cline-neutral">&nbsp;</span>
490
- <span class="cline-any cline-neutral">&nbsp;</span>
491
- <span class="cline-any cline-neutral">&nbsp;</span>
492
- <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-neutral">&nbsp;</span>
494
- <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-neutral">&nbsp;</span>
496
- <span class="cline-any cline-neutral">&nbsp;</span>
497
- <span class="cline-any cline-neutral">&nbsp;</span>
498
- <span class="cline-any cline-neutral">&nbsp;</span>
499
- <span class="cline-any cline-neutral">&nbsp;</span>
500
- <span class="cline-any cline-neutral">&nbsp;</span>
501
- <span class="cline-any cline-yes">15x</span>
502
- <span class="cline-any cline-yes">15x</span>
503
- <span class="cline-any cline-yes">30x</span>
504
- <span class="cline-any cline-neutral">&nbsp;</span>
505
- <span class="cline-any cline-neutral">&nbsp;</span>
506
- <span class="cline-any cline-neutral">&nbsp;</span>
507
- <span class="cline-any cline-neutral">&nbsp;</span>
508
- <span class="cline-any cline-yes">22x</span>
509
- <span class="cline-any cline-no">&nbsp;</span>
510
- <span class="cline-any cline-neutral">&nbsp;</span>
511
- <span class="cline-any cline-neutral">&nbsp;</span>
512
- <span class="cline-any cline-yes">22x</span>
513
- <span class="cline-any cline-no">&nbsp;</span>
514
- <span class="cline-any cline-neutral">&nbsp;</span>
515
- <span class="cline-any cline-neutral">&nbsp;</span>
516
- <span class="cline-any cline-neutral">&nbsp;</span>
517
- <span class="cline-any cline-yes">22x</span>
518
- <span class="cline-any cline-yes">22x</span>
519
- <span class="cline-any cline-neutral">&nbsp;</span>
520
- <span class="cline-any cline-neutral">&nbsp;</span>
521
- <span class="cline-any cline-yes">22x</span>
522
- <span class="cline-any cline-yes">1x</span>
523
- <span class="cline-any cline-neutral">&nbsp;</span>
524
- <span class="cline-any cline-neutral">&nbsp;</span>
525
- <span class="cline-any cline-yes">21x</span>
526
- <span class="cline-any cline-neutral">&nbsp;</span>
527
- <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-yes">21x</span>
530
- <span class="cline-any cline-yes">21x</span>
531
- <span class="cline-any cline-neutral">&nbsp;</span>
532
- <span class="cline-any cline-neutral">&nbsp;</span>
533
- <span class="cline-any cline-neutral">&nbsp;</span>
534
- <span class="cline-any cline-neutral">&nbsp;</span>
535
- <span class="cline-any cline-yes">40x</span>
536
- <span class="cline-any cline-neutral">&nbsp;</span>
537
- <span class="cline-any cline-yes">1x</span>
538
- <span class="cline-any cline-yes">1x</span>
539
- <span class="cline-any cline-neutral">&nbsp;</span>
540
- <span class="cline-any cline-neutral">&nbsp;</span>
541
- <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-yes">19x</span>
544
- <span class="cline-any cline-yes">38x</span>
545
- <span class="cline-any cline-yes">38x</span>
546
- <span class="cline-any cline-yes">38x</span>
547
- <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-neutral">&nbsp;</span>
549
- <span class="cline-any cline-yes">38x</span>
550
- <span class="cline-any cline-yes">34x</span>
551
- <span class="cline-any cline-yes">34x</span>
552
- <span class="cline-any cline-yes">33x</span>
553
- <span class="cline-any cline-yes">33x</span>
554
- <span class="cline-any cline-neutral">&nbsp;</span>
555
- <span class="cline-any cline-yes">1x</span>
556
- <span class="cline-any cline-yes">1x</span>
557
- <span class="cline-any cline-neutral">&nbsp;</span>
558
- <span class="cline-any cline-neutral">&nbsp;</span>
559
- <span class="cline-any cline-yes">4x</span>
560
- <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-neutral">&nbsp;</span>
562
- <span class="cline-any cline-yes">37x</span>
563
- <span class="cline-any cline-neutral">&nbsp;</span>
564
- <span class="cline-any cline-neutral">&nbsp;</span>
565
- <span class="cline-any cline-neutral">&nbsp;</span>
566
- <span class="cline-any cline-yes">15x</span>
567
- <span class="cline-any cline-yes">15x</span>
568
- <span class="cline-any cline-yes">15x</span>
569
- <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-yes">15x</span>
571
- <span class="cline-any cline-neutral">&nbsp;</span>
572
- <span class="cline-any cline-yes">14x</span>
573
- <span class="cline-any cline-yes">14x</span>
574
- <span class="cline-any cline-neutral">&nbsp;</span>
575
- <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-yes">14x</span>
577
- <span class="cline-any cline-yes">14x</span>
578
- <span class="cline-any cline-neutral">&nbsp;</span>
579
- <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-yes">14x</span>
582
- <span class="cline-any cline-yes">13x</span>
583
- <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-yes">13x</span>
585
- <span class="cline-any cline-yes">1x</span>
586
- <span class="cline-any cline-yes">1x</span>
587
- <span class="cline-any cline-yes">1x</span>
588
- <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-neutral">&nbsp;</span>
590
- <span class="cline-any cline-neutral">&nbsp;</span>
591
- <span class="cline-any cline-yes">12x</span>
592
- <span class="cline-any cline-neutral">&nbsp;</span>
593
- <span class="cline-any cline-neutral">&nbsp;</span>
594
- <span class="cline-any cline-yes">11x</span>
595
- <span class="cline-any cline-neutral">&nbsp;</span>
596
- <span class="cline-any cline-neutral">&nbsp;</span>
597
- <span class="cline-any cline-yes">11x</span>
598
- <span class="cline-any cline-yes">11x</span>
599
- <span class="cline-any cline-yes">11x</span>
600
- <span class="cline-any cline-yes">22x</span>
601
- <span class="cline-any cline-yes">22x</span>
602
- <span class="cline-any cline-yes">21x</span>
603
- <span class="cline-any cline-yes">21x</span>
604
- <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-yes">1x</span>
606
- <span class="cline-any cline-neutral">&nbsp;</span>
607
- <span class="cline-any cline-neutral">&nbsp;</span>
608
- <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-yes">11x</span>
612
- <span class="cline-any cline-yes">11x</span>
613
- <span class="cline-any cline-neutral">&nbsp;</span>
614
- <span class="cline-any cline-yes">22x</span>
615
- <span class="cline-any cline-yes">22x</span>
616
- <span class="cline-any cline-yes">22x</span>
617
- <span class="cline-any cline-yes">21x</span>
618
- <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-yes">21x</span>
620
- <span class="cline-any cline-yes">21x</span>
621
- <span class="cline-any cline-neutral">&nbsp;</span>
622
- <span class="cline-any cline-yes">21x</span>
623
- <span class="cline-any cline-yes">17x</span>
624
- <span class="cline-any cline-yes">17x</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-yes">1x</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-neutral">&nbsp;</span>
631
- <span class="cline-any cline-yes">11x</span>
632
- <span class="cline-any cline-yes">11x</span>
633
- <span class="cline-any cline-yes">11x</span>
634
- <span class="cline-any cline-neutral">&nbsp;</span>
635
- <span class="cline-any cline-neutral">&nbsp;</span>
636
- <span class="cline-any cline-yes">4x</span>
637
- <span class="cline-any cline-yes">4x</span>
638
- <span class="cline-any cline-yes">4x</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-yes">4x</span>
641
- <span class="cline-any cline-yes">4x</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-yes">4x</span>
644
- <span class="cline-any cline-yes">4x</span>
645
- <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-neutral">&nbsp;</span>
647
- <span class="cline-any cline-yes">4x</span>
648
- <span class="cline-any cline-yes">4x</span>
649
- <span class="cline-any cline-neutral">&nbsp;</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-neutral">&nbsp;</span>
652
- <span class="cline-any cline-yes">4x</span>
653
- <span class="cline-any cline-yes">4x</span>
654
- <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-yes">4x</span>
656
- <span class="cline-any cline-no">&nbsp;</span>
657
- <span class="cline-any cline-no">&nbsp;</span>
658
- <span class="cline-any cline-no">&nbsp;</span>
659
- <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-yes">4x</span>
663
- <span class="cline-any cline-neutral">&nbsp;</span>
664
- <span class="cline-any cline-neutral">&nbsp;</span>
665
- <span class="cline-any cline-yes">4x</span>
666
- <span class="cline-any cline-neutral">&nbsp;</span>
667
- <span class="cline-any cline-neutral">&nbsp;</span>
668
- <span class="cline-any cline-yes">4x</span>
669
- <span class="cline-any cline-yes">4x</span>
670
- <span class="cline-any cline-yes">4x</span>
671
- <span class="cline-any cline-yes">8x</span>
672
- <span class="cline-any cline-yes">8x</span>
673
- <span class="cline-any cline-yes">8x</span>
674
- <span class="cline-any cline-yes">8x</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-no">&nbsp;</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-neutral">&nbsp;</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-yes">4x</span>
683
- <span class="cline-any cline-yes">4x</span>
684
- <span class="cline-any cline-yes">1x</span>
685
- <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-yes">4x</span>
689
- <span class="cline-any cline-yes">4x</span>
690
- <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-yes">8x</span>
692
- <span class="cline-any cline-yes">8x</span>
693
- <span class="cline-any cline-yes">8x</span>
694
- <span class="cline-any cline-yes">8x</span>
695
- <span class="cline-any cline-yes">8x</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-yes">8x</span>
698
- <span class="cline-any cline-yes">8x</span>
699
- <span class="cline-any cline-yes">8x</span>
700
- <span class="cline-any cline-neutral">&nbsp;</span>
701
- <span class="cline-any cline-neutral">&nbsp;</span>
702
- <span class="cline-any cline-no">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-neutral">&nbsp;</span>
705
- <span class="cline-any cline-neutral">&nbsp;</span>
706
- <span class="cline-any cline-neutral">&nbsp;</span>
707
- <span class="cline-any cline-yes">4x</span>
708
- <span class="cline-any cline-yes">4x</span>
709
- <span class="cline-any cline-yes">4x</span>
710
- <span class="cline-any cline-yes">4x</span>
711
- <span class="cline-any cline-yes">4x</span>
712
- <span class="cline-any cline-neutral">&nbsp;</span>
713
- <span class="cline-any cline-neutral">&nbsp;</span>
714
- <span class="cline-any cline-yes">4x</span>
715
- <span class="cline-any cline-yes">4x</span>
716
- <span class="cline-any cline-yes">4x</span>
717
- <span class="cline-any cline-yes">4x</span>
718
- <span class="cline-any cline-neutral">&nbsp;</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-yes">3x</span>
721
- <span class="cline-any cline-yes">3x</span>
722
- <span class="cline-any cline-yes">3x</span>
723
- <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-yes">3x</span>
725
- <span class="cline-any cline-yes">3x</span>
726
- <span class="cline-any cline-neutral">&nbsp;</span>
727
- <span class="cline-any cline-yes">3x</span>
728
- <span class="cline-any cline-yes">3x</span>
729
- <span class="cline-any cline-neutral">&nbsp;</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-yes">3x</span>
732
- <span class="cline-any cline-yes">3x</span>
733
- <span class="cline-any cline-neutral">&nbsp;</span>
734
- <span class="cline-any cline-neutral">&nbsp;</span>
735
- <span class="cline-any cline-neutral">&nbsp;</span>
736
- <span class="cline-any cline-yes">3x</span>
737
- <span class="cline-any cline-yes">3x</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-yes">3x</span>
740
- <span class="cline-any cline-no">&nbsp;</span>
741
- <span class="cline-any cline-no">&nbsp;</span>
742
- <span class="cline-any cline-no">&nbsp;</span>
743
- <span class="cline-any cline-neutral">&nbsp;</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-yes">3x</span>
747
- <span class="cline-any cline-neutral">&nbsp;</span>
748
- <span class="cline-any cline-neutral">&nbsp;</span>
749
- <span class="cline-any cline-yes">3x</span>
750
- <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-neutral">&nbsp;</span>
752
- <span class="cline-any cline-yes">3x</span>
753
- <span class="cline-any cline-yes">3x</span>
754
- <span class="cline-any cline-yes">3x</span>
755
- <span class="cline-any cline-yes">7x</span>
756
- <span class="cline-any cline-yes">7x</span>
757
- <span class="cline-any cline-yes">7x</span>
758
- <span class="cline-any cline-yes">7x</span>
759
- <span class="cline-any cline-neutral">&nbsp;</span>
760
- <span class="cline-any cline-no">&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-yes">3x</span>
767
- <span class="cline-any cline-yes">3x</span>
768
- <span class="cline-any cline-yes">3x</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-yes">3x</span>
772
- <span class="cline-any cline-yes">3x</span>
773
- <span class="cline-any cline-yes">3x</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-yes">3x</span>
777
- <span class="cline-any cline-yes">3x</span>
778
- <span class="cline-any cline-yes">3x</span>
779
- <span class="cline-any cline-yes">3x</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">2x</span>
784
- <span class="cline-any cline-yes">20x</span>
785
- <span class="cline-any cline-yes">20x</span>
786
- <span class="cline-any cline-yes">20x</span>
787
- <span class="cline-any cline-yes">20x</span>
788
- <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-neutral">&nbsp;</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import path from 'path';
791
- import fs from 'fs';
792
- import process from 'process';
793
- import _ from 'lodash';
794
- import { glob } from 'glob';
795
- import { IDLBlob } from './IDLBlob';
796
- import { ClassObject } from './declaration';
797
- import { analyzer, ParameterType, clearCaches } from './analyzer';
798
- import { generateDartClass } from './dart';
799
- import { generateReactComponent, generateReactIndex } from './react';
800
- import { generateVueTypings } from './vue';
801
- import { logger, debug, info, success, warn, error, group, progress, time, timeEnd } from './logger';
802
- &nbsp;
803
- // Cache for file content to avoid redundant reads
804
- const fileContentCache = new Map&lt;string, string&gt;();
805
- &nbsp;
806
- // Cache for generated content to detect changes
807
- const generatedContentCache = new Map&lt;string, string&gt;();
808
- &nbsp;
809
- function writeFileIfChanged(filePath: string, content: string): boolean {
810
- // Check if content has changed by comparing with cache
811
- const cachedContent = generatedContentCache.get(filePath);
812
- if (cachedContent === content) {
813
- return false; // No change
814
- }
815
-
816
- // Check if file exists and has same content
817
- if (fs.existsSync(filePath)) {
818
- const existingContent = fileContentCache.get(filePath) || fs.readFileSync(filePath, 'utf-8');
819
- fileContentCache.set(filePath, existingContent);
820
-
821
- <span class="missing-if-branch" title="if path not taken" >I</span>if (existingContent === content) {
822
- <span class="cstat-no" title="statement not covered" > generatedContentCache.set(filePath, content);</span>
823
- <span class="cstat-no" title="statement not covered" > return false; </span>// No change
824
- }
825
- }
826
-
827
- // Create directory if it doesn't exist
828
- const dir = path.dirname(filePath);
829
- if (!fs.existsSync(dir)) {
830
- fs.mkdirSync(dir, { recursive: true });
831
- }
832
-
833
- // Write file and update caches
834
- fs.writeFileSync(filePath, content, 'utf-8');
835
- fileContentCache.set(filePath, content);
836
- generatedContentCache.set(filePath, content);
837
-
838
- return true; // File was changed
839
- }
840
- &nbsp;
841
- class DefinedPropertyCollector {
842
- properties = new Set&lt;string&gt;();
843
- files = new Set&lt;string&gt;();
844
- interfaces = new Set&lt;string&gt;();
845
- }
846
- &nbsp;
847
- class UnionTypeCollector {
848
- types = new Set&lt;ParameterType[]&gt;()
849
- }
850
- &nbsp;
851
- interface GenerateOptions {
852
- source: string;
853
- target: string;
854
- command: string;
855
- }
856
- &nbsp;
857
- // Batch processing for file operations
858
- async function processFilesInBatch&lt;T&gt;(
859
- items: T[],
860
- batchSize: number,
861
- processor: (item: T) =&gt; Promise&lt;void&gt; | void
862
- ): Promise&lt;void&gt; {
863
- for (let i = 0; i &lt; items.length; i += batchSize) {
864
- const batch = items.slice(i, i + batchSize);
865
- await Promise.all(batch.map(item =&gt; processor(item)));
866
- }
867
- }
868
- &nbsp;
869
- function validatePaths(source: string, target: string): { source: string; target: string } {
870
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!source) {
871
- <span class="cstat-no" title="statement not covered" > throw new Error('Source path is required');</span>
872
- }
873
-
874
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!target) {
875
- <span class="cstat-no" title="statement not covered" > throw new Error('Target path is required');</span>
876
- }
877
-
878
- // Normalize paths
879
- const normalizedSource = path.isAbsolute(source) ? source : path.join(process.cwd(), source);
880
- const normalizedTarget = path.isAbsolute(target) ? target : path.join(process.cwd(), target);
881
-
882
- // Validate source exists
883
- if (!fs.existsSync(normalizedSource)) {
884
- throw new Error(`Source path does not exist: ${normalizedSource}`);
885
- }
886
-
887
- return { source: normalizedSource, target: normalizedTarget };
888
- }
889
- &nbsp;
890
- function getTypeFiles(source: string): string[] {
891
- try {
892
- const files = glob.globSync("**/*.d.ts", {
893
- cwd: source,
894
- ignore: ['**/node_modules/**', '**/dist/**', '**/build/**']
895
- });
896
-
897
- return files.filter(file =&gt; !file.includes('global.d.ts'));
898
- } catch (err) {
899
- error(`Error scanning for type files in ${source}`, err);
900
- throw new Error(`Failed to scan type files: ${err instanceof Error ? err.message : <span class="branch-1 cbranch-no" title="branch not covered" >String(err)}</span>`);
901
- }
902
- }
903
- &nbsp;
904
- function createBlobs(typeFiles: string[], source: string, target: string): IDLBlob[] {
905
- return typeFiles.map(file =&gt; {
906
- const filename = path.basename(file, '.d.ts');
907
- const implement = file.replace(path.join(__dirname, '../../'), '').replace('.d.ts', '');
908
- const blob = new IDLBlob(path.join(source, file), target, filename, implement);
909
-
910
- // Pre-cache file content
911
- if (!fileContentCache.has(blob.source)) {
912
- try {
913
- const content = fs.readFileSync(blob.source, 'utf-8');
914
- fileContentCache.set(blob.source, content);
915
- blob.raw = content;
916
- } catch (err) {
917
- error(`Error reading file ${blob.source}`, err);
918
- throw err;
919
- }
920
- } else {
921
- blob.raw = fileContentCache.get(blob.source)!;
922
- }
923
-
924
- return blob;
925
- });
926
- }
927
- &nbsp;
928
- export async function dartGen({ source, target, command }: GenerateOptions) {
929
- group('Dart Code Generation');
930
- time('dartGen');
931
-
932
- const { source: normalizedSource, target: normalizedTarget } = validatePaths(source, target);
933
-
934
- const definedPropertyCollector = new DefinedPropertyCollector();
935
- const unionTypeCollector = new UnionTypeCollector();
936
-
937
- // Clear analyzer caches for fresh run
938
- if (typeof clearCaches === 'function') {
939
- clearCaches();
940
- }
941
-
942
- // Get type files
943
- const typeFiles = getTypeFiles(normalizedSource);
944
- info(`Found ${typeFiles.length} type definition files`);
945
-
946
- if (typeFiles.length === 0) {
947
- warn('No type definition files found');
948
- timeEnd('dartGen');
949
- return;
950
- }
951
-
952
- // Create blobs
953
- const blobs = createBlobs(typeFiles, normalizedSource, normalizedTarget);
954
-
955
- // Reset global class map
956
- ClassObject.globalClassMap = Object.create(null);
957
-
958
- // Analyze all files first
959
- info('Analyzing type definitions...');
960
- let analyzed = 0;
961
- for (const blob of blobs) {
962
- try {
963
- analyzer(blob, definedPropertyCollector, unionTypeCollector);
964
- analyzed++;
965
- progress(analyzed, blobs.length, `Analyzing ${blob.filename}`);
966
- } catch (err) {
967
- error(`Error analyzing ${blob.filename}`, err);
968
- // Continue with other files
969
- }
970
- }
971
-
972
- // Generate Dart code
973
- info('\nGenerating Dart classes...');
974
- let filesChanged = 0;
975
-
976
- await processFilesInBatch(blobs, 5, async (blob) =&gt; {
977
- try {
978
- const result = generateDartClass(blob, command);
979
- blob.dist = normalizedTarget;
980
-
981
- const genFilePath = path.join(blob.dist, _.snakeCase(blob.filename));
982
- const fullPath = genFilePath + '_bindings_generated.dart';
983
-
984
- if (writeFileIfChanged(fullPath, result)) {
985
- filesChanged++;
986
- debug(`Generated: ${path.basename(fullPath)}`);
987
- }
988
- } catch (err) {
989
- error(`Error generating Dart code for ${blob.filename}`, err);
990
- }
991
- });
992
-
993
- timeEnd('dartGen');
994
- success(`Dart code generation completed. ${filesChanged} files changed.`);
995
- info(`Output directory: ${normalizedTarget}`);
996
- }
997
- &nbsp;
998
- export async function reactGen({ source, target }: GenerateOptions) {
999
- group('React Code Generation');
1000
- time('reactGen');
1001
-
1002
- target = _.kebabCase(target);
1003
- const { source: normalizedSource, target: normalizedTarget } = validatePaths(source, target);
1004
-
1005
- const definedPropertyCollector = new DefinedPropertyCollector();
1006
- const unionTypeCollector = new UnionTypeCollector();
1007
-
1008
- // Clear analyzer caches for fresh run
1009
- if (typeof clearCaches === 'function') {
1010
- clearCaches();
1011
- }
1012
-
1013
- // Get type files
1014
- const typeFiles = getTypeFiles(normalizedSource);
1015
- info(`Found ${typeFiles.length} type definition files`);
1016
-
1017
- <span class="missing-if-branch" title="if path not taken" >I</span>if (typeFiles.length === 0) {
1018
- <span class="cstat-no" title="statement not covered" > warn('No type definition files found');</span>
1019
- <span class="cstat-no" title="statement not covered" > timeEnd('reactGen');</span>
1020
- <span class="cstat-no" title="statement not covered" > return;</span>
1021
- }
1022
-
1023
- // Create blobs
1024
- const blobs = createBlobs(typeFiles, normalizedSource, normalizedTarget);
1025
-
1026
- // Reset global class map
1027
- ClassObject.globalClassMap = Object.create(null);
1028
-
1029
- // Analyze all files first
1030
- info('Analyzing type definitions...');
1031
- let analyzed = 0;
1032
- for (const blob of blobs) {
1033
- try {
1034
- analyzer(blob, definedPropertyCollector, unionTypeCollector);
1035
- analyzed++;
1036
- progress(analyzed, blobs.length, `Analyzing ${blob.filename}`);
1037
- } catch (err) {
1038
- <span class="cstat-no" title="statement not covered" > error(`Error analyzing ${blob.filename}`, err);</span>
1039
- // Continue with other files
1040
- }
1041
- }
1042
-
1043
- // Ensure src directory exists
1044
- const srcDir = path.join(normalizedTarget, 'src');
1045
- if (!fs.existsSync(srcDir)) {
1046
- fs.mkdirSync(srcDir, { recursive: true });
1047
- }
1048
-
1049
- // Generate React components
1050
- info('\nGenerating React components...');
1051
- let filesChanged = 0;
1052
-
1053
- await processFilesInBatch(blobs, 5, async (blob) =&gt; {
1054
- try {
1055
- const result = generateReactComponent(blob);
1056
- const genFilePath = path.join(normalizedTarget, 'src', blob.filename);
1057
- const fullPath = genFilePath + '.tsx';
1058
-
1059
- if (writeFileIfChanged(fullPath, result)) {
1060
- filesChanged++;
1061
- debug(`Generated: ${path.basename(fullPath)}`);
1062
- }
1063
- } catch (err) {
1064
- <span class="cstat-no" title="statement not covered" > error(`Error generating React component for ${blob.filename}`, err);</span>
1065
- }
1066
- });
1067
-
1068
- // Generate index file
1069
- const indexContent = generateReactIndex(blobs);
1070
- const indexFilePath = path.join(normalizedTarget, 'src', 'index.ts');
1071
- if (writeFileIfChanged(indexFilePath, indexContent)) {
1072
- filesChanged++;
1073
- debug(`Generated: index.ts`);
1074
- }
1075
-
1076
- timeEnd('reactGen');
1077
- success(`React code generation completed. ${filesChanged} files changed.`);
1078
- info(`Output directory: ${normalizedTarget}`);
1079
- info('You can now import these components in your React project.');
1080
- }
1081
- &nbsp;
1082
- export async function vueGen({ source, target }: GenerateOptions) {
1083
- group('Vue Typings Generation');
1084
- time('vueGen');
1085
-
1086
- target = _.kebabCase(target);
1087
- const { source: normalizedSource, target: normalizedTarget } = validatePaths(source, target);
1088
-
1089
- const definedPropertyCollector = new DefinedPropertyCollector();
1090
- const unionTypeCollector = new UnionTypeCollector();
1091
-
1092
- // Clear analyzer caches for fresh run
1093
- if (typeof clearCaches === 'function') {
1094
- clearCaches();
1095
- }
1096
-
1097
- // Get type files
1098
- const typeFiles = getTypeFiles(normalizedSource);
1099
- info(`Found ${typeFiles.length} type definition files`);
1100
-
1101
- <span class="missing-if-branch" title="if path not taken" >I</span>if (typeFiles.length === 0) {
1102
- <span class="cstat-no" title="statement not covered" > warn('No type definition files found');</span>
1103
- <span class="cstat-no" title="statement not covered" > timeEnd('vueGen');</span>
1104
- <span class="cstat-no" title="statement not covered" > return;</span>
1105
- }
1106
-
1107
- // Create blobs
1108
- const blobs = createBlobs(typeFiles, normalizedSource, normalizedTarget);
1109
-
1110
- // Reset global class map
1111
- ClassObject.globalClassMap = Object.create(null);
1112
-
1113
- // Analyze all files first
1114
- info('Analyzing type definitions...');
1115
- let analyzed = 0;
1116
- for (const blob of blobs) {
1117
- try {
1118
- analyzer(blob, definedPropertyCollector, unionTypeCollector);
1119
- analyzed++;
1120
- progress(analyzed, blobs.length, `Analyzing ${blob.filename}`);
1121
- } catch (err) {
1122
- <span class="cstat-no" title="statement not covered" > error(`Error analyzing ${blob.filename}`, err);</span>
1123
- // Continue with other files
1124
- }
1125
- }
1126
-
1127
- // Generate Vue typings
1128
- info('\nGenerating Vue typings...');
1129
- const typingsContent = generateVueTypings(blobs);
1130
- const typingsFilePath = path.join(normalizedTarget, 'index.d.ts');
1131
-
1132
- let filesChanged = 0;
1133
- if (writeFileIfChanged(typingsFilePath, typingsContent)) {
1134
- filesChanged++;
1135
- debug(`Generated: index.d.ts`);
1136
- }
1137
-
1138
- timeEnd('vueGen');
1139
- success(`Vue typings generation completed. ${filesChanged} files changed.`);
1140
- info(`Output directory: ${normalizedTarget}`);
1141
- info('You can now import these types in your Vue project.');
1142
- }
1143
- &nbsp;
1144
- // Clear all caches (useful for watch mode or between runs)
1145
- export function clearAllCaches() {
1146
- fileContentCache.clear();
1147
- generatedContentCache.clear();
1148
- if (typeof clearCaches === 'function') {
1149
- clearCaches(); // Clear analyzer caches
1150
- }
1151
- }
1152
- &nbsp;</pre></td></tr></table></pre>
1153
-
1154
- <div class='push'></div><!-- for sticky footer -->
1155
- </div><!-- /wrapper -->
1156
- <div class='footer quiet pad2 space-top1 center small'>
1157
- Code coverage generated by
1158
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1159
- at 2025-06-15T19:54:25.468Z
1160
- </div>
1161
- <script src="prettify.js"></script>
1162
- <script>
1163
- window.onload = function () {
1164
- prettyPrint();
1165
- };
1166
- </script>
1167
- <script src="sorter.js"></script>
1168
- <script src="block-navigation.js"></script>
1169
- </body>
1170
- </html>
1171
-