@codewithagents/openapi-react-query 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/CLAUDE.md +26 -0
- package/__fixtures__/specs/task-hooks.json +155 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +131 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov-report/src/config.ts.html +418 -0
- package/coverage/lcov-report/src/index.html +116 -0
- package/coverage/lcov-report/src/plugins/hooks.ts.html +1435 -0
- package/coverage/lcov-report/src/plugins/index.html +116 -0
- package/coverage/lcov.info +484 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +24 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +15 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +85 -0
- package/dist/config.js.map +1 -0
- package/dist/generator.d.ts +2 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +20 -0
- package/dist/generator.js.map +1 -0
- package/dist/plugins/hooks.d.ts +10 -0
- package/dist/plugins/hooks.d.ts.map +1 -0
- package/dist/plugins/hooks.js +370 -0
- package/dist/plugins/hooks.js.map +1 -0
- package/package.json +33 -0
- package/src/__tests__/config.test.ts +186 -0
- package/src/__tests__/hooks.test.ts +101 -0
- package/src/cli.ts +27 -0
- package/src/config.ts +111 -0
- package/src/generator.ts +20 -0
- package/src/plugins/hooks.ts +450 -0
- package/tsconfig.build.json +10 -0
- package/tsconfig.json +9 -0
- package/vitest.config.ts +12 -0
|
@@ -0,0 +1,1435 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/plugins/hooks.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../index.html">All files</a> / <a href="index.html">src/plugins</a> hooks.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">76.82% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>189/246</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">58.11% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>68/117</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">79.16% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>19/24</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">77.87% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>176/226</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 medium'></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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
517
|
+
<span class="cline-any cline-neutral"> </span>
|
|
518
|
+
<span class="cline-any cline-neutral"> </span>
|
|
519
|
+
<span class="cline-any cline-neutral"> </span>
|
|
520
|
+
<span class="cline-any cline-neutral"> </span>
|
|
521
|
+
<span class="cline-any cline-neutral"> </span>
|
|
522
|
+
<span class="cline-any cline-neutral"> </span>
|
|
523
|
+
<span class="cline-any cline-neutral"> </span>
|
|
524
|
+
<span class="cline-any cline-neutral"> </span>
|
|
525
|
+
<span class="cline-any cline-neutral"> </span>
|
|
526
|
+
<span class="cline-any cline-neutral"> </span>
|
|
527
|
+
<span class="cline-any cline-neutral"> </span>
|
|
528
|
+
<span class="cline-any cline-neutral"> </span>
|
|
529
|
+
<span class="cline-any cline-yes">6x</span>
|
|
530
|
+
<span class="cline-any cline-neutral"> </span>
|
|
531
|
+
<span class="cline-any cline-neutral"> </span>
|
|
532
|
+
<span class="cline-any cline-neutral"> </span>
|
|
533
|
+
<span class="cline-any cline-yes">2x</span>
|
|
534
|
+
<span class="cline-any cline-yes">2x</span>
|
|
535
|
+
<span class="cline-any cline-neutral"> </span>
|
|
536
|
+
<span class="cline-any cline-neutral"> </span>
|
|
537
|
+
<span class="cline-any cline-neutral"> </span>
|
|
538
|
+
<span class="cline-any cline-yes">5x</span>
|
|
539
|
+
<span class="cline-any cline-neutral"> </span>
|
|
540
|
+
<span class="cline-any cline-neutral"> </span>
|
|
541
|
+
<span class="cline-any cline-yes">1x</span>
|
|
542
|
+
<span class="cline-any cline-neutral"> </span>
|
|
543
|
+
<span class="cline-any cline-neutral"> </span>
|
|
544
|
+
<span class="cline-any cline-neutral"> </span>
|
|
545
|
+
<span class="cline-any cline-neutral"> </span>
|
|
546
|
+
<span class="cline-any cline-no"> </span>
|
|
547
|
+
<span class="cline-any cline-neutral"> </span>
|
|
548
|
+
<span class="cline-any cline-neutral"> </span>
|
|
549
|
+
<span class="cline-any cline-neutral"> </span>
|
|
550
|
+
<span class="cline-any cline-neutral"> </span>
|
|
551
|
+
<span class="cline-any cline-neutral"> </span>
|
|
552
|
+
<span class="cline-any cline-neutral"> </span>
|
|
553
|
+
<span class="cline-any cline-no"> </span>
|
|
554
|
+
<span class="cline-any cline-neutral"> </span>
|
|
555
|
+
<span class="cline-any cline-neutral"> </span>
|
|
556
|
+
<span class="cline-any cline-no"> </span>
|
|
557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
558
|
+
<span class="cline-any cline-no"> </span>
|
|
559
|
+
<span class="cline-any cline-no"> </span>
|
|
560
|
+
<span class="cline-any cline-no"> </span>
|
|
561
|
+
<span class="cline-any cline-no"> </span>
|
|
562
|
+
<span class="cline-any cline-neutral"> </span>
|
|
563
|
+
<span class="cline-any cline-no"> </span>
|
|
564
|
+
<span class="cline-any cline-neutral"> </span>
|
|
565
|
+
<span class="cline-any cline-neutral"> </span>
|
|
566
|
+
<span class="cline-any cline-no"> </span>
|
|
567
|
+
<span class="cline-any cline-no"> </span>
|
|
568
|
+
<span class="cline-any cline-neutral"> </span>
|
|
569
|
+
<span class="cline-any cline-neutral"> </span>
|
|
570
|
+
<span class="cline-any cline-neutral"> </span>
|
|
571
|
+
<span class="cline-any cline-yes">5x</span>
|
|
572
|
+
<span class="cline-any cline-yes">5x</span>
|
|
573
|
+
<span class="cline-any cline-yes">3x</span>
|
|
574
|
+
<span class="cline-any cline-neutral"> </span>
|
|
575
|
+
<span class="cline-any cline-neutral"> </span>
|
|
576
|
+
<span class="cline-any cline-neutral"> </span>
|
|
577
|
+
<span class="cline-any cline-neutral"> </span>
|
|
578
|
+
<span class="cline-any cline-neutral"> </span>
|
|
579
|
+
<span class="cline-any cline-yes">2x</span>
|
|
580
|
+
<span class="cline-any cline-yes">2x</span>
|
|
581
|
+
<span class="cline-any cline-neutral"> </span>
|
|
582
|
+
<span class="cline-any cline-yes">2x</span>
|
|
583
|
+
<span class="cline-any cline-neutral"> </span>
|
|
584
|
+
<span class="cline-any cline-neutral"> </span>
|
|
585
|
+
<span class="cline-any cline-neutral"> </span>
|
|
586
|
+
<span class="cline-any cline-neutral"> </span>
|
|
587
|
+
<span class="cline-any cline-neutral"> </span>
|
|
588
|
+
<span class="cline-any cline-yes">2x</span>
|
|
589
|
+
<span class="cline-any cline-neutral"> </span>
|
|
590
|
+
<span class="cline-any cline-neutral"> </span>
|
|
591
|
+
<span class="cline-any cline-neutral"> </span>
|
|
592
|
+
<span class="cline-any cline-neutral"> </span>
|
|
593
|
+
<span class="cline-any cline-neutral"> </span>
|
|
594
|
+
<span class="cline-any cline-neutral"> </span>
|
|
595
|
+
<span class="cline-any cline-neutral"> </span>
|
|
596
|
+
<span class="cline-any cline-neutral"> </span>
|
|
597
|
+
<span class="cline-any cline-neutral"> </span>
|
|
598
|
+
<span class="cline-any cline-neutral"> </span>
|
|
599
|
+
<span class="cline-any cline-neutral"> </span>
|
|
600
|
+
<span class="cline-any cline-neutral"> </span>
|
|
601
|
+
<span class="cline-any cline-neutral"> </span>
|
|
602
|
+
<span class="cline-any cline-yes">5x</span>
|
|
603
|
+
<span class="cline-any cline-yes">5x</span>
|
|
604
|
+
<span class="cline-any cline-yes">2x</span>
|
|
605
|
+
<span class="cline-any cline-neutral"> </span>
|
|
606
|
+
<span class="cline-any cline-yes">2x</span>
|
|
607
|
+
<span class="cline-any cline-yes">2x</span>
|
|
608
|
+
<span class="cline-any cline-yes">2x</span>
|
|
609
|
+
<span class="cline-any cline-neutral"> </span>
|
|
610
|
+
<span class="cline-any cline-neutral"> </span>
|
|
611
|
+
<span class="cline-any cline-yes">2x</span>
|
|
612
|
+
<span class="cline-any cline-no"> </span>
|
|
613
|
+
<span class="cline-any cline-neutral"> </span>
|
|
614
|
+
<span class="cline-any cline-neutral"> </span>
|
|
615
|
+
<span class="cline-any cline-yes">2x</span>
|
|
616
|
+
<span class="cline-any cline-yes">2x</span>
|
|
617
|
+
<span class="cline-any cline-no"> </span>
|
|
618
|
+
<span class="cline-any cline-neutral"> </span>
|
|
619
|
+
<span class="cline-any cline-neutral"> </span>
|
|
620
|
+
<span class="cline-any cline-yes">2x</span>
|
|
621
|
+
<span class="cline-any cline-yes">2x</span>
|
|
622
|
+
<span class="cline-any cline-yes">2x</span>
|
|
623
|
+
<span class="cline-any cline-neutral"> </span>
|
|
624
|
+
<span class="cline-any cline-neutral"> </span>
|
|
625
|
+
<span class="cline-any cline-neutral"> </span>
|
|
626
|
+
<span class="cline-any cline-no"> </span>
|
|
627
|
+
<span class="cline-any cline-no"> </span>
|
|
628
|
+
<span class="cline-any cline-no"> </span>
|
|
629
|
+
<span class="cline-any cline-neutral"> </span>
|
|
630
|
+
<span class="cline-any cline-no"> </span>
|
|
631
|
+
<span class="cline-any cline-neutral"> </span>
|
|
632
|
+
<span class="cline-any cline-neutral"> </span>
|
|
633
|
+
<span class="cline-any cline-neutral"> </span>
|
|
634
|
+
<span class="cline-any cline-neutral"> </span>
|
|
635
|
+
<span class="cline-any cline-neutral"> </span>
|
|
636
|
+
<span class="cline-any cline-neutral"> </span>
|
|
637
|
+
<span class="cline-any cline-neutral"> </span>
|
|
638
|
+
<span class="cline-any cline-neutral"> </span>
|
|
639
|
+
<span class="cline-any cline-neutral"> </span>
|
|
640
|
+
<span class="cline-any cline-neutral"> </span>
|
|
641
|
+
<span class="cline-any cline-neutral"> </span>
|
|
642
|
+
<span class="cline-any cline-neutral"> </span>
|
|
643
|
+
<span class="cline-any cline-yes">1x</span>
|
|
644
|
+
<span class="cline-any cline-yes">1x</span>
|
|
645
|
+
<span class="cline-any cline-yes">1x</span>
|
|
646
|
+
<span class="cline-any cline-yes">1x</span>
|
|
647
|
+
<span class="cline-any cline-neutral"> </span>
|
|
648
|
+
<span class="cline-any cline-yes">1x</span>
|
|
649
|
+
<span class="cline-any cline-yes">2x</span>
|
|
650
|
+
<span class="cline-any cline-neutral"> </span>
|
|
651
|
+
<span class="cline-any cline-yes">1x</span>
|
|
652
|
+
<span class="cline-any cline-yes">1x</span>
|
|
653
|
+
<span class="cline-any cline-neutral"> </span>
|
|
654
|
+
<span class="cline-any cline-no"> </span>
|
|
655
|
+
<span class="cline-any cline-yes">1x</span>
|
|
656
|
+
<span class="cline-any cline-neutral"> </span>
|
|
657
|
+
<span class="cline-any cline-yes">1x</span>
|
|
658
|
+
<span class="cline-any cline-yes">1x</span>
|
|
659
|
+
<span class="cline-any cline-neutral"> </span>
|
|
660
|
+
<span class="cline-any cline-neutral"> </span>
|
|
661
|
+
<span class="cline-any cline-no"> </span>
|
|
662
|
+
<span class="cline-any cline-no"> </span>
|
|
663
|
+
<span class="cline-any cline-no"> </span>
|
|
664
|
+
<span class="cline-any cline-neutral"> </span>
|
|
665
|
+
<span class="cline-any cline-neutral"> </span>
|
|
666
|
+
<span class="cline-any cline-neutral"> </span>
|
|
667
|
+
<span class="cline-any cline-yes">1x</span>
|
|
668
|
+
<span class="cline-any cline-yes">1x</span>
|
|
669
|
+
<span class="cline-any cline-neutral"> </span>
|
|
670
|
+
<span class="cline-any cline-neutral"> </span>
|
|
671
|
+
<span class="cline-any cline-neutral"> </span>
|
|
672
|
+
<span class="cline-any cline-neutral"> </span>
|
|
673
|
+
<span class="cline-any cline-neutral"> </span>
|
|
674
|
+
<span class="cline-any cline-neutral"> </span>
|
|
675
|
+
<span class="cline-any cline-neutral"> </span>
|
|
676
|
+
<span class="cline-any cline-neutral"> </span>
|
|
677
|
+
<span class="cline-any cline-neutral"> </span>
|
|
678
|
+
<span class="cline-any cline-neutral"> </span>
|
|
679
|
+
<span class="cline-any cline-neutral"> </span>
|
|
680
|
+
<span class="cline-any cline-yes">2x</span>
|
|
681
|
+
<span class="cline-any cline-neutral"> </span>
|
|
682
|
+
<span class="cline-any cline-yes">2x</span>
|
|
683
|
+
<span class="cline-any cline-yes">2x</span>
|
|
684
|
+
<span class="cline-any cline-neutral"> </span>
|
|
685
|
+
<span class="cline-any cline-neutral"> </span>
|
|
686
|
+
<span class="cline-any cline-yes">2x</span>
|
|
687
|
+
<span class="cline-any cline-yes">2x</span>
|
|
688
|
+
<span class="cline-any cline-yes">1x</span>
|
|
689
|
+
<span class="cline-any cline-neutral"> </span>
|
|
690
|
+
<span class="cline-any cline-yes">2x</span>
|
|
691
|
+
<span class="cline-any cline-yes">1x</span>
|
|
692
|
+
<span class="cline-any cline-neutral"> </span>
|
|
693
|
+
<span class="cline-any cline-yes">2x</span>
|
|
694
|
+
<span class="cline-any cline-neutral"> </span>
|
|
695
|
+
<span class="cline-any cline-neutral"> </span>
|
|
696
|
+
<span class="cline-any cline-neutral"> </span>
|
|
697
|
+
<span class="cline-any cline-yes">2x</span>
|
|
698
|
+
<span class="cline-any cline-yes">1x</span>
|
|
699
|
+
<span class="cline-any cline-yes">1x</span>
|
|
700
|
+
<span class="cline-any cline-no"> </span>
|
|
701
|
+
<span class="cline-any cline-yes">1x</span>
|
|
702
|
+
<span class="cline-any cline-yes">1x</span>
|
|
703
|
+
<span class="cline-any cline-no"> </span>
|
|
704
|
+
<span class="cline-any cline-neutral"> </span>
|
|
705
|
+
<span class="cline-any cline-no"> </span>
|
|
706
|
+
<span class="cline-any cline-neutral"> </span>
|
|
707
|
+
<span class="cline-any cline-no"> </span>
|
|
708
|
+
<span class="cline-any cline-no"> </span>
|
|
709
|
+
<span class="cline-any cline-neutral"> </span>
|
|
710
|
+
<span class="cline-any cline-neutral"> </span>
|
|
711
|
+
<span class="cline-any cline-neutral"> </span>
|
|
712
|
+
<span class="cline-any cline-yes">2x</span>
|
|
713
|
+
<span class="cline-any cline-yes">2x</span>
|
|
714
|
+
<span class="cline-any cline-yes">2x</span>
|
|
715
|
+
<span class="cline-any cline-neutral"> </span>
|
|
716
|
+
<span class="cline-any cline-yes">2x</span>
|
|
717
|
+
<span class="cline-any cline-yes">2x</span>
|
|
718
|
+
<span class="cline-any cline-yes">2x</span>
|
|
719
|
+
<span class="cline-any cline-yes">2x</span>
|
|
720
|
+
<span class="cline-any cline-yes">2x</span>
|
|
721
|
+
<span class="cline-any cline-yes">2x</span>
|
|
722
|
+
<span class="cline-any cline-yes">2x</span>
|
|
723
|
+
<span class="cline-any cline-yes">2x</span>
|
|
724
|
+
<span class="cline-any cline-yes">2x</span>
|
|
725
|
+
<span class="cline-any cline-yes">2x</span>
|
|
726
|
+
<span class="cline-any cline-yes">2x</span>
|
|
727
|
+
<span class="cline-any cline-neutral"> </span>
|
|
728
|
+
<span class="cline-any cline-yes">2x</span>
|
|
729
|
+
<span class="cline-any cline-neutral"> </span>
|
|
730
|
+
<span class="cline-any cline-neutral"> </span>
|
|
731
|
+
<span class="cline-any cline-neutral"> </span>
|
|
732
|
+
<span class="cline-any cline-neutral"> </span>
|
|
733
|
+
<span class="cline-any cline-neutral"> </span>
|
|
734
|
+
<span class="cline-any cline-yes">3x</span>
|
|
735
|
+
<span class="cline-any cline-yes">3x</span>
|
|
736
|
+
<span class="cline-any cline-neutral"> </span>
|
|
737
|
+
<span class="cline-any cline-neutral"> </span>
|
|
738
|
+
<span class="cline-any cline-neutral"> </span>
|
|
739
|
+
<span class="cline-any cline-neutral"> </span>
|
|
740
|
+
<span class="cline-any cline-neutral"> </span>
|
|
741
|
+
<span class="cline-any cline-yes">3x</span>
|
|
742
|
+
<span class="cline-any cline-no"> </span>
|
|
743
|
+
<span class="cline-any cline-no"> </span>
|
|
744
|
+
<span class="cline-any cline-yes">3x</span>
|
|
745
|
+
<span class="cline-any cline-yes">1x</span>
|
|
746
|
+
<span class="cline-any cline-yes">1x</span>
|
|
747
|
+
<span class="cline-any cline-yes">2x</span>
|
|
748
|
+
<span class="cline-any cline-yes">1x</span>
|
|
749
|
+
<span class="cline-any cline-yes">1x</span>
|
|
750
|
+
<span class="cline-any cline-yes">1x</span>
|
|
751
|
+
<span class="cline-any cline-yes">1x</span>
|
|
752
|
+
<span class="cline-any cline-yes">1x</span>
|
|
753
|
+
<span class="cline-any cline-yes">1x</span>
|
|
754
|
+
<span class="cline-any cline-no"> </span>
|
|
755
|
+
<span class="cline-any cline-no"> </span>
|
|
756
|
+
<span class="cline-any cline-no"> </span>
|
|
757
|
+
<span class="cline-any cline-no"> </span>
|
|
758
|
+
<span class="cline-any cline-no"> </span>
|
|
759
|
+
<span class="cline-any cline-neutral"> </span>
|
|
760
|
+
<span class="cline-any cline-neutral"> </span>
|
|
761
|
+
<span class="cline-any cline-no"> </span>
|
|
762
|
+
<span class="cline-any cline-no"> </span>
|
|
763
|
+
<span class="cline-any cline-no"> </span>
|
|
764
|
+
<span class="cline-any cline-no"> </span>
|
|
765
|
+
<span class="cline-any cline-neutral"> </span>
|
|
766
|
+
<span class="cline-any cline-neutral"> </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-yes">3x</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-yes">3x</span>
|
|
775
|
+
<span class="cline-any cline-neutral"> </span>
|
|
776
|
+
<span class="cline-any cline-yes">3x</span>
|
|
777
|
+
<span class="cline-any cline-neutral"> </span>
|
|
778
|
+
<span class="cline-any cline-neutral"> </span>
|
|
779
|
+
<span class="cline-any cline-neutral"> </span>
|
|
780
|
+
<span class="cline-any cline-neutral"> </span>
|
|
781
|
+
<span class="cline-any cline-neutral"> </span>
|
|
782
|
+
<span class="cline-any cline-yes">2x</span>
|
|
783
|
+
<span class="cline-any cline-yes">2x</span>
|
|
784
|
+
<span class="cline-any cline-yes">2x</span>
|
|
785
|
+
<span class="cline-any cline-yes">2x</span>
|
|
786
|
+
<span class="cline-any cline-yes">2x</span>
|
|
787
|
+
<span class="cline-any cline-yes">2x</span>
|
|
788
|
+
<span class="cline-any cline-neutral"> </span>
|
|
789
|
+
<span class="cline-any cline-neutral"> </span>
|
|
790
|
+
<span class="cline-any cline-neutral"> </span>
|
|
791
|
+
<span class="cline-any cline-neutral"> </span>
|
|
792
|
+
<span class="cline-any cline-neutral"> </span>
|
|
793
|
+
<span class="cline-any cline-neutral"> </span>
|
|
794
|
+
<span class="cline-any cline-neutral"> </span>
|
|
795
|
+
<span class="cline-any cline-neutral"> </span>
|
|
796
|
+
<span class="cline-any cline-neutral"> </span>
|
|
797
|
+
<span class="cline-any cline-yes">1x</span>
|
|
798
|
+
<span class="cline-any cline-yes">1x</span>
|
|
799
|
+
<span class="cline-any cline-neutral"> </span>
|
|
800
|
+
<span class="cline-any cline-neutral"> </span>
|
|
801
|
+
<span class="cline-any cline-yes">1x</span>
|
|
802
|
+
<span class="cline-any cline-neutral"> </span>
|
|
803
|
+
<span class="cline-any cline-yes">1x</span>
|
|
804
|
+
<span class="cline-any cline-yes">1x</span>
|
|
805
|
+
<span class="cline-any cline-yes">2x</span>
|
|
806
|
+
<span class="cline-any cline-yes">10x</span>
|
|
807
|
+
<span class="cline-any cline-yes">10x</span>
|
|
808
|
+
<span class="cline-any cline-neutral"> </span>
|
|
809
|
+
<span class="cline-any cline-neutral"> </span>
|
|
810
|
+
<span class="cline-any cline-yes">5x</span>
|
|
811
|
+
<span class="cline-any cline-yes">5x</span>
|
|
812
|
+
<span class="cline-any cline-yes">5x</span>
|
|
813
|
+
<span class="cline-any cline-neutral"> </span>
|
|
814
|
+
<span class="cline-any cline-no"> </span>
|
|
815
|
+
<span class="cline-any cline-neutral"> </span>
|
|
816
|
+
<span class="cline-any cline-neutral"> </span>
|
|
817
|
+
<span class="cline-any cline-yes">5x</span>
|
|
818
|
+
<span class="cline-any cline-yes">5x</span>
|
|
819
|
+
<span class="cline-any cline-yes">5x</span>
|
|
820
|
+
<span class="cline-any cline-neutral"> </span>
|
|
821
|
+
<span class="cline-any cline-yes">5x</span>
|
|
822
|
+
<span class="cline-any cline-neutral"> </span>
|
|
823
|
+
<span class="cline-any cline-neutral"> </span>
|
|
824
|
+
<span class="cline-any cline-neutral"> </span>
|
|
825
|
+
<span class="cline-any cline-neutral"> </span>
|
|
826
|
+
<span class="cline-any cline-neutral"> </span>
|
|
827
|
+
<span class="cline-any cline-neutral"> </span>
|
|
828
|
+
<span class="cline-any cline-neutral"> </span>
|
|
829
|
+
<span class="cline-any cline-neutral"> </span>
|
|
830
|
+
<span class="cline-any cline-neutral"> </span>
|
|
831
|
+
<span class="cline-any cline-neutral"> </span>
|
|
832
|
+
<span class="cline-any cline-neutral"> </span>
|
|
833
|
+
<span class="cline-any cline-neutral"> </span>
|
|
834
|
+
<span class="cline-any cline-neutral"> </span>
|
|
835
|
+
<span class="cline-any cline-yes">5x</span>
|
|
836
|
+
<span class="cline-any cline-yes">5x</span>
|
|
837
|
+
<span class="cline-any cline-neutral"> </span>
|
|
838
|
+
<span class="cline-any cline-neutral"> </span>
|
|
839
|
+
<span class="cline-any cline-yes">1x</span>
|
|
840
|
+
<span class="cline-any cline-yes">1x</span>
|
|
841
|
+
<span class="cline-any cline-yes">2x</span>
|
|
842
|
+
<span class="cline-any cline-yes">2x</span>
|
|
843
|
+
<span class="cline-any cline-yes">2x</span>
|
|
844
|
+
<span class="cline-any cline-yes">2x</span>
|
|
845
|
+
<span class="cline-any cline-neutral"> </span>
|
|
846
|
+
<span class="cline-any cline-neutral"> </span>
|
|
847
|
+
<span class="cline-any cline-neutral"> </span>
|
|
848
|
+
<span class="cline-any cline-yes">1x</span>
|
|
849
|
+
<span class="cline-any cline-yes">1x</span>
|
|
850
|
+
<span class="cline-any cline-neutral"> </span>
|
|
851
|
+
<span class="cline-any cline-yes">1x</span>
|
|
852
|
+
<span class="cline-any cline-yes">1x</span>
|
|
853
|
+
<span class="cline-any cline-neutral"> </span>
|
|
854
|
+
<span class="cline-any cline-neutral"> </span>
|
|
855
|
+
<span class="cline-any cline-yes">2x</span>
|
|
856
|
+
<span class="cline-any cline-yes">2x</span>
|
|
857
|
+
<span class="cline-any cline-neutral"> </span>
|
|
858
|
+
<span class="cline-any cline-yes">1x</span>
|
|
859
|
+
<span class="cline-any cline-neutral"> </span>
|
|
860
|
+
<span class="cline-any cline-yes">1x</span>
|
|
861
|
+
<span class="cline-any cline-yes">1x</span>
|
|
862
|
+
<span class="cline-any cline-yes">1x</span>
|
|
863
|
+
<span class="cline-any cline-neutral"> </span>
|
|
864
|
+
<span class="cline-any cline-neutral"> </span>
|
|
865
|
+
<span class="cline-any cline-yes">1x</span>
|
|
866
|
+
<span class="cline-any cline-yes">1x</span>
|
|
867
|
+
<span class="cline-any cline-yes">1x</span>
|
|
868
|
+
<span class="cline-any cline-no"> </span>
|
|
869
|
+
<span class="cline-any cline-no"> </span>
|
|
870
|
+
<span class="cline-any cline-no"> </span>
|
|
871
|
+
<span class="cline-any cline-neutral"> </span>
|
|
872
|
+
<span class="cline-any cline-neutral"> </span>
|
|
873
|
+
<span class="cline-any cline-no"> </span>
|
|
874
|
+
<span class="cline-any cline-no"> </span>
|
|
875
|
+
<span class="cline-any cline-no"> </span>
|
|
876
|
+
<span class="cline-any cline-neutral"> </span>
|
|
877
|
+
<span class="cline-any cline-neutral"> </span>
|
|
878
|
+
<span class="cline-any cline-neutral"> </span>
|
|
879
|
+
<span class="cline-any cline-yes">1x</span>
|
|
880
|
+
<span class="cline-any cline-yes">1x</span>
|
|
881
|
+
<span class="cline-any cline-yes">1x</span>
|
|
882
|
+
<span class="cline-any cline-neutral"> </span>
|
|
883
|
+
<span class="cline-any cline-neutral"> </span>
|
|
884
|
+
<span class="cline-any cline-yes">1x</span>
|
|
885
|
+
<span class="cline-any cline-yes">1x</span>
|
|
886
|
+
<span class="cline-any cline-yes">1x</span>
|
|
887
|
+
<span class="cline-any cline-no"> </span>
|
|
888
|
+
<span class="cline-any cline-no"> </span>
|
|
889
|
+
<span class="cline-any cline-no"> </span>
|
|
890
|
+
<span class="cline-any cline-neutral"> </span>
|
|
891
|
+
<span class="cline-any cline-neutral"> </span>
|
|
892
|
+
<span class="cline-any cline-no"> </span>
|
|
893
|
+
<span class="cline-any cline-no"> </span>
|
|
894
|
+
<span class="cline-any cline-no"> </span>
|
|
895
|
+
<span class="cline-any cline-neutral"> </span>
|
|
896
|
+
<span class="cline-any cline-neutral"> </span>
|
|
897
|
+
<span class="cline-any cline-neutral"> </span>
|
|
898
|
+
<span class="cline-any cline-yes">1x</span>
|
|
899
|
+
<span class="cline-any cline-neutral"> </span>
|
|
900
|
+
<span class="cline-any cline-neutral"> </span>
|
|
901
|
+
<span class="cline-any cline-neutral"> </span>
|
|
902
|
+
<span class="cline-any cline-yes">1x</span>
|
|
903
|
+
<span class="cline-any cline-yes">1x</span>
|
|
904
|
+
<span class="cline-any cline-yes">2x</span>
|
|
905
|
+
<span class="cline-any cline-yes">2x</span>
|
|
906
|
+
<span class="cline-any cline-yes">2x</span>
|
|
907
|
+
<span class="cline-any cline-yes">2x</span>
|
|
908
|
+
<span class="cline-any cline-neutral"> </span>
|
|
909
|
+
<span class="cline-any cline-neutral"> </span>
|
|
910
|
+
<span class="cline-any cline-neutral"> </span>
|
|
911
|
+
<span class="cline-any cline-yes">1x</span>
|
|
912
|
+
<span class="cline-any cline-yes">1x</span>
|
|
913
|
+
<span class="cline-any cline-yes">3x</span>
|
|
914
|
+
<span class="cline-any cline-neutral"> </span>
|
|
915
|
+
<span class="cline-any cline-neutral"> </span>
|
|
916
|
+
<span class="cline-any cline-neutral"> </span>
|
|
917
|
+
<span class="cline-any cline-yes">1x</span>
|
|
918
|
+
<span class="cline-any cline-yes">1x</span>
|
|
919
|
+
<span class="cline-any cline-yes">1x</span>
|
|
920
|
+
<span class="cline-any cline-yes">1x</span>
|
|
921
|
+
<span class="cline-any cline-yes">1x</span>
|
|
922
|
+
<span class="cline-any cline-neutral"> </span>
|
|
923
|
+
<span class="cline-any cline-neutral"> </span>
|
|
924
|
+
<span class="cline-any cline-yes">5x</span>
|
|
925
|
+
<span class="cline-any cline-neutral"> </span>
|
|
926
|
+
<span class="cline-any cline-neutral"> </span>
|
|
927
|
+
<span class="cline-any cline-yes">1x</span>
|
|
928
|
+
<span class="cline-any cline-yes">1x</span>
|
|
929
|
+
<span class="cline-any cline-yes">1x</span>
|
|
930
|
+
<span class="cline-any cline-yes">1x</span>
|
|
931
|
+
<span class="cline-any cline-yes">1x</span>
|
|
932
|
+
<span class="cline-any cline-neutral"> </span>
|
|
933
|
+
<span class="cline-any cline-yes">1x</span>
|
|
934
|
+
<span class="cline-any cline-yes">1x</span>
|
|
935
|
+
<span class="cline-any cline-neutral"> </span>
|
|
936
|
+
<span class="cline-any cline-no"> </span>
|
|
937
|
+
<span class="cline-any cline-neutral"> </span>
|
|
938
|
+
<span class="cline-any cline-yes">1x</span>
|
|
939
|
+
<span class="cline-any cline-neutral"> </span>
|
|
940
|
+
<span class="cline-any cline-yes">1x</span>
|
|
941
|
+
<span class="cline-any cline-yes">1x</span>
|
|
942
|
+
<span class="cline-any cline-yes">1x</span>
|
|
943
|
+
<span class="cline-any cline-yes">1x</span>
|
|
944
|
+
<span class="cline-any cline-yes">1x</span>
|
|
945
|
+
<span class="cline-any cline-neutral"> </span>
|
|
946
|
+
<span class="cline-any cline-neutral"> </span>
|
|
947
|
+
<span class="cline-any cline-yes">1x</span>
|
|
948
|
+
<span class="cline-any cline-yes">1x</span>
|
|
949
|
+
<span class="cline-any cline-yes">1x</span>
|
|
950
|
+
<span class="cline-any cline-yes">1x</span>
|
|
951
|
+
<span class="cline-any cline-yes">1x</span>
|
|
952
|
+
<span class="cline-any cline-neutral"> </span>
|
|
953
|
+
<span class="cline-any cline-neutral"> </span>
|
|
954
|
+
<span class="cline-any cline-yes">1x</span>
|
|
955
|
+
<span class="cline-any cline-yes">1x</span>
|
|
956
|
+
<span class="cline-any cline-yes">1x</span>
|
|
957
|
+
<span class="cline-any cline-yes">1x</span>
|
|
958
|
+
<span class="cline-any cline-yes">1x</span>
|
|
959
|
+
<span class="cline-any cline-neutral"> </span>
|
|
960
|
+
<span class="cline-any cline-neutral"> </span>
|
|
961
|
+
<span class="cline-any cline-yes">1x</span>
|
|
962
|
+
<span class="cline-any cline-neutral"> </span>
|
|
963
|
+
<span class="cline-any cline-neutral"> </span>
|
|
964
|
+
<span class="cline-any cline-neutral"> </span>
|
|
965
|
+
<span class="cline-any cline-neutral"> </span>
|
|
966
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import type { OpenAPIV3_1 } from 'openapi-types'
|
|
967
|
+
|
|
968
|
+
type OperationObject = OpenAPIV3_1.OperationObject
|
|
969
|
+
type ReferenceObject = OpenAPIV3_1.ReferenceObject
|
|
970
|
+
|
|
971
|
+
export interface HookGenOptions {
|
|
972
|
+
staleTime: number
|
|
973
|
+
gcTime: number
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
977
|
+
|
|
978
|
+
function isRef(obj: unknown): obj is ReferenceObject {
|
|
979
|
+
return typeof obj === 'object' && obj !== null && '$ref' in obj
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
function refToName(ref: string): string {
|
|
983
|
+
const parts = ref.split('/')
|
|
984
|
+
return parts[parts.length - 1]!
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
function capitalize(s: string): string {
|
|
988
|
+
return s.charAt(0).toUpperCase() + s.slice(1)
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
const SUPPORTED_METHODS = ['get', 'post', 'put', 'patch', 'delete'] as const
|
|
992
|
+
type SupportedMethod = (typeof SUPPORTED_METHODS)[number]
|
|
993
|
+
|
|
994
|
+
// Mirrors deriveOperationName from openapi-gen/src/plugins/client.ts
|
|
995
|
+
function <span class="fstat-no" title="function not covered" >deriveOperationName(m</span>ethod: string, path: string): string {
|
|
996
|
+
const prefixMap: Record<string, string> = <span class="cstat-no" title="statement not covered" >{</span>
|
|
997
|
+
get: 'get',
|
|
998
|
+
post: 'create',
|
|
999
|
+
put: 'update',
|
|
1000
|
+
patch: 'patch',
|
|
1001
|
+
delete: 'delete',
|
|
1002
|
+
}
|
|
1003
|
+
const prefix = <span class="cstat-no" title="statement not covered" >prefixMap[method] ?? method</span>
|
|
1004
|
+
|
|
1005
|
+
// Strip /api/v1/ prefix
|
|
1006
|
+
let segments = <span class="cstat-no" title="statement not covered" >path.replace(/^\/api\/v\d+\//, '').replace(/^\//, '')</span>
|
|
1007
|
+
|
|
1008
|
+
const parts = <span class="cstat-no" title="statement not covered" >segments.split('/').map(<span class="fstat-no" title="function not covered" >(s</span>eg) => {</span>
|
|
1009
|
+
<span class="cstat-no" title="statement not covered" > if (seg.startsWith('{') && seg.endsWith('}')) {</span>
|
|
1010
|
+
const name = <span class="cstat-no" title="statement not covered" >seg.slice(1, -1)</span>
|
|
1011
|
+
<span class="cstat-no" title="statement not covered" > return 'By' + name.charAt(0).toUpperCase() + name.slice(1)</span>
|
|
1012
|
+
}
|
|
1013
|
+
<span class="cstat-no" title="statement not covered" > return seg.charAt(0).toUpperCase() + seg.slice(1)</span>
|
|
1014
|
+
})
|
|
1015
|
+
|
|
1016
|
+
const joined = <span class="cstat-no" title="statement not covered" >parts.join('')</span>
|
|
1017
|
+
<span class="cstat-no" title="statement not covered" > return prefix + joined</span>
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
function extractPathParams(path: string): string[] {
|
|
1021
|
+
const matches = path.match(/\{([^}]+)\}/g)
|
|
1022
|
+
if (matches === null) return []
|
|
1023
|
+
return matches.map((m) => m.slice(1, -1))
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
/** Extract primary resource name from path (first static segment after stripping API prefix) */
|
|
1027
|
+
function primaryResource(path: string): string {
|
|
1028
|
+
// Strip /api/v{N}/ prefix or leading /
|
|
1029
|
+
const stripped = path.replace(/^\/api\/v\d+\//, '').replace(/^\//, '')
|
|
1030
|
+
const firstSegment = stripped.split('/')[0] ?? <span class="branch-1 cbranch-no" title="branch not covered" >'resource'</span>
|
|
1031
|
+
// Remove any path param braces if somehow first seg is param
|
|
1032
|
+
return firstSegment.replace(/[{}]/g, '')
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
/** singularize resource name for key factory naming, e.g. tasks → task */
|
|
1036
|
+
function toKeyFactoryName(resource: string): string {
|
|
1037
|
+
// simple pluralization removal: trailing 's'
|
|
1038
|
+
return resource.endsWith('s') ? resource.slice(0, -1) : <span class="branch-1 cbranch-no" title="branch not covered" >resource</span>
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
interface OperationMeta {
|
|
1042
|
+
funcName: string
|
|
1043
|
+
hookName: string
|
|
1044
|
+
method: SupportedMethod
|
|
1045
|
+
path: string
|
|
1046
|
+
pathParams: string[]
|
|
1047
|
+
hasBody: boolean
|
|
1048
|
+
bodyTypeName: string | undefined
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
function getBodyInfo(operation: OperationObject): { hasBody: boolean; bodyTypeName: string | undefined } {
|
|
1052
|
+
const requestBody = operation.requestBody as OpenAPIV3_1.RequestBodyObject | ReferenceObject | undefined
|
|
1053
|
+
if (requestBody === undefined) return { hasBody: false, bodyTypeName: undefined }
|
|
1054
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (isRef(requestBody)) return { hasBody: true, bodyTypeName: undefined }
|
|
1055
|
+
|
|
1056
|
+
const rb = requestBody as OpenAPIV3_1.RequestBodyObject
|
|
1057
|
+
const content = rb.content as Record<string, { schema?: OpenAPIV3_1.SchemaObject | ReferenceObject }> | undefined
|
|
1058
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (content === undefined) <span class="cstat-no" title="statement not covered" >return { hasBody: true, bodyTypeName: undefined }</span>
|
|
1059
|
+
|
|
1060
|
+
// Check multipart first
|
|
1061
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (content['multipart/form-data'] !== undefined) {
|
|
1062
|
+
<span class="cstat-no" title="statement not covered" > return { hasBody: true, bodyTypeName: undefined }</span>
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
const jsonContent = content['application/json']
|
|
1066
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (jsonContent === undefined || jsonContent.schema === undefined) {
|
|
1067
|
+
<span class="cstat-no" title="statement not covered" > return { hasBody: true, bodyTypeName: undefined }</span>
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
const schema = jsonContent.schema
|
|
1071
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (isRef(schema)) {
|
|
1072
|
+
return { hasBody: true, bodyTypeName: refToName((schema as ReferenceObject).$ref) }
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
// Inline schema
|
|
1076
|
+
const s = <span class="cstat-no" title="statement not covered" >schema as OpenAPIV3_1.SchemaObject</span>
|
|
1077
|
+
<span class="cstat-no" title="statement not covered" > if (s.type === 'object') {</span>
|
|
1078
|
+
<span class="cstat-no" title="statement not covered" > return { hasBody: true, bodyTypeName: 'Record<string, unknown>' }</span>
|
|
1079
|
+
}
|
|
1080
|
+
<span class="cstat-no" title="statement not covered" > return { hasBody: true, bodyTypeName: undefined }</span>
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
// ── Key factory generation ─────────────────────────────────────────────────────
|
|
1084
|
+
|
|
1085
|
+
interface KeyEntry {
|
|
1086
|
+
key: string // e.g. 'list' | 'detail' | operationId-derived
|
|
1087
|
+
funcName: string // function to use in key factory
|
|
1088
|
+
pathParams: string[]
|
|
1089
|
+
hasQueryParams: boolean
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
function buildKeyFactory(resource: string, entries: KeyEntry[]): string {
|
|
1093
|
+
const factoryName = `${toKeyFactoryName(resource)}Keys`
|
|
1094
|
+
const lines: string[] = []
|
|
1095
|
+
lines.push(`export const ${factoryName} = {`)
|
|
1096
|
+
lines.push(` all: () => ['${resource}'] as const,`)
|
|
1097
|
+
|
|
1098
|
+
for (const entry of entries) {
|
|
1099
|
+
if (entry.pathParams.length === 0 && entry.hasQueryParams) {
|
|
1100
|
+
// list: (params?) => ['resource', 'list', params]
|
|
1101
|
+
lines.push(` ${entry.key}: (params?: Parameters<typeof ${entry.funcName}>[0]) => ['${resource}', '${entry.key}', params] as const,`)
|
|
1102
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>} else if (entry.pathParams.length === 0 && <span class="branch-1 cbranch-no" title="branch not covered" >!entry.hasQueryParams) {</span>
|
|
1103
|
+
// list with no params
|
|
1104
|
+
<span class="cstat-no" title="statement not covered" > lines.push(` ${entry.key}: () => ['${resource}', '${entry.key}'] as const,`)</span>
|
|
1105
|
+
} else if (entry.pathParams.length === 1) {
|
|
1106
|
+
// detail: (id: string) => ['resource', id]
|
|
1107
|
+
const param = entry.pathParams[0]!
|
|
1108
|
+
lines.push(` ${entry.key}: (${param}: string) => ['${resource}', ${param}] as const,`)
|
|
1109
|
+
} else <span class="missing-if-branch" title="else path not taken" >E</span>{
|
|
1110
|
+
// multiple path params
|
|
1111
|
+
const paramList = <span class="cstat-no" title="statement not covered" >entry.pathParams.map(<span class="fstat-no" title="function not covered" >(p</span>) => <span class="cstat-no" title="statement not covered" >`${p}: string`)</span>.join(', ')</span>
|
|
1112
|
+
const paramValues = <span class="cstat-no" title="statement not covered" >entry.pathParams.join(', ')</span>
|
|
1113
|
+
<span class="cstat-no" title="statement not covered" > lines.push(` ${entry.key}: (${paramList}) => ['${resource}', ${paramValues}] as const,`)</span>
|
|
1114
|
+
}
|
|
1115
|
+
}
|
|
1116
|
+
|
|
1117
|
+
lines.push(`}`)
|
|
1118
|
+
return lines.join('\n')
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1121
|
+
// ── Query hook generation ──────────────────────────────────────────────────────
|
|
1122
|
+
|
|
1123
|
+
function buildQueryHook(
|
|
1124
|
+
op: OperationMeta,
|
|
1125
|
+
keyFactoryName: string,
|
|
1126
|
+
keyEntry: KeyEntry,
|
|
1127
|
+
staleTime: number,
|
|
1128
|
+
gcTime: number,
|
|
1129
|
+
): string {
|
|
1130
|
+
const lines: string[] = []
|
|
1131
|
+
|
|
1132
|
+
const hasQueryParams = keyEntry.hasQueryParams
|
|
1133
|
+
const pathParams = op.pathParams
|
|
1134
|
+
|
|
1135
|
+
// Build parameter list
|
|
1136
|
+
const sigParts: string[] = []
|
|
1137
|
+
for (const p of pathParams) {
|
|
1138
|
+
sigParts.push(`${p}: string`)
|
|
1139
|
+
}
|
|
1140
|
+
if (hasQueryParams) {
|
|
1141
|
+
sigParts.push(`params?: Parameters<typeof ${op.funcName}>[${pathParams.length}]`)
|
|
1142
|
+
}
|
|
1143
|
+
sigParts.push(`options?: Omit<UseQueryOptions<Awaited<ReturnType<typeof ${op.funcName}>>, ApiError>, 'queryKey' | 'queryFn'>`)
|
|
1144
|
+
|
|
1145
|
+
// Build queryKey call
|
|
1146
|
+
let queryKeyCall: string
|
|
1147
|
+
if (pathParams.length === 0 && hasQueryParams) {
|
|
1148
|
+
queryKeyCall = `${keyFactoryName}.${keyEntry.key}(params)`
|
|
1149
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>} else if (pathParams.length === 0 && <span class="branch-1 cbranch-no" title="branch not covered" >!hasQueryParams) {</span>
|
|
1150
|
+
<span class="cstat-no" title="statement not covered" > queryKeyCall = `${keyFactoryName}.${keyEntry.key}()`</span>
|
|
1151
|
+
} else if (pathParams.length === 1 && !hasQueryParams) {
|
|
1152
|
+
queryKeyCall = `${keyFactoryName}.${keyEntry.key}(${pathParams[0]})`
|
|
1153
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="else path not taken" >E</span>} else if (pathParams.length === 1 && hasQueryParams) {</span>
|
|
1154
|
+
// path param + query params
|
|
1155
|
+
<span class="cstat-no" title="statement not covered" > queryKeyCall = `${keyFactoryName}.${keyEntry.key}(${pathParams[0]}, params)`</span>
|
|
1156
|
+
} else {
|
|
1157
|
+
const paramValues = <span class="cstat-no" title="statement not covered" >pathParams.join(', ')</span>
|
|
1158
|
+
<span class="cstat-no" title="statement not covered" > queryKeyCall = `${keyFactoryName}.${keyEntry.key}(${paramValues})`</span>
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
// Build queryFn call
|
|
1162
|
+
let queryFnArgs: string[] = [...pathParams]
|
|
1163
|
+
if (hasQueryParams) queryFnArgs.push('params')
|
|
1164
|
+
const queryFnCall = `${op.funcName}(${queryFnArgs.join(', ')})`
|
|
1165
|
+
|
|
1166
|
+
lines.push(`export function ${op.hookName}(`)
|
|
1167
|
+
lines.push(` ${sigParts.join(',\n ')},`)
|
|
1168
|
+
lines.push(`) {`)
|
|
1169
|
+
lines.push(` return useQuery<Awaited<ReturnType<typeof ${op.funcName}>>, ApiError>({`)
|
|
1170
|
+
lines.push(` queryKey: ${queryKeyCall},`)
|
|
1171
|
+
lines.push(` queryFn: () => ${queryFnCall},`)
|
|
1172
|
+
lines.push(` staleTime: ${staleTime},`)
|
|
1173
|
+
lines.push(` gcTime: ${gcTime},`)
|
|
1174
|
+
lines.push(` ...options,`)
|
|
1175
|
+
lines.push(` })`)
|
|
1176
|
+
lines.push(`}`)
|
|
1177
|
+
|
|
1178
|
+
return lines.join('\n')
|
|
1179
|
+
}
|
|
1180
|
+
|
|
1181
|
+
// ── Mutation hook generation ───────────────────────────────────────────────────
|
|
1182
|
+
|
|
1183
|
+
function buildMutationHook(op: OperationMeta): string {
|
|
1184
|
+
const lines: string[] = []
|
|
1185
|
+
const { funcName, hookName, pathParams, hasBody } = op
|
|
1186
|
+
|
|
1187
|
+
// Determine variables type and mutationFn
|
|
1188
|
+
let variablesType: string
|
|
1189
|
+
let mutationFnBody: string
|
|
1190
|
+
|
|
1191
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (pathParams.length === 0 && !hasBody) {
|
|
1192
|
+
<span class="cstat-no" title="statement not covered" > variablesType = 'void'</span>
|
|
1193
|
+
<span class="cstat-no" title="statement not covered" > mutationFnBody = `() => ${funcName}()`</span>
|
|
1194
|
+
} else if (pathParams.length === 0 && hasBody) {
|
|
1195
|
+
variablesType = `Parameters<typeof ${funcName}>[0]`
|
|
1196
|
+
mutationFnBody = `(vars) => ${funcName}(vars)`
|
|
1197
|
+
} else if (pathParams.length === 1 && !hasBody) {
|
|
1198
|
+
variablesType = 'string'
|
|
1199
|
+
mutationFnBody = `(${pathParams[0]}) => ${funcName}(${pathParams[0]})`
|
|
1200
|
+
} else if (pathParams.length === 1 && hasBody) {
|
|
1201
|
+
const param = pathParams[0]!
|
|
1202
|
+
variablesType = `{ ${param}: string; body: Parameters<typeof ${funcName}>[1] }`
|
|
1203
|
+
mutationFnBody = `({ ${param}, body }) => ${funcName}(${param}, body)`
|
|
1204
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="else path not taken" >E</span>} else if (pathParams.length > 1 && !hasBody) {</span>
|
|
1205
|
+
const fields = <span class="cstat-no" title="statement not covered" >pathParams.map(<span class="fstat-no" title="function not covered" >(p</span>) => <span class="cstat-no" title="statement not covered" >`${p}: string`)</span>.join('; ')</span>
|
|
1206
|
+
<span class="cstat-no" title="statement not covered" > variablesType = `{ ${fields} }`</span>
|
|
1207
|
+
const destructured = <span class="cstat-no" title="statement not covered" >pathParams.join(', ')</span>
|
|
1208
|
+
<span class="cstat-no" title="statement not covered" > mutationFnBody = `({ ${destructured} }) => ${funcName}(${destructured})`</span>
|
|
1209
|
+
} else {
|
|
1210
|
+
// multiple path params + body
|
|
1211
|
+
const fields = <span class="cstat-no" title="statement not covered" >pathParams.map(<span class="fstat-no" title="function not covered" >(p</span>) => <span class="cstat-no" title="statement not covered" >`${p}: string`)</span>.join('; ')</span>
|
|
1212
|
+
<span class="cstat-no" title="statement not covered" > variablesType = `{ ${fields}; body: Parameters<typeof ${funcName}>[${pathParams.length}] }`</span>
|
|
1213
|
+
const destructured = <span class="cstat-no" title="statement not covered" >[...pathParams, 'body'].join(', ')</span>
|
|
1214
|
+
<span class="cstat-no" title="statement not covered" > mutationFnBody = `({ ${destructured} }) => ${funcName}(${[...pathParams, 'body'].join(', ')})`</span>
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
lines.push(`export function ${hookName}(`)
|
|
1218
|
+
lines.push(` options?: Omit<UseMutationOptions<Awaited<ReturnType<typeof ${funcName}>>, ApiError, ${variablesType}>, 'mutationFn'>,`)
|
|
1219
|
+
lines.push(`) {`)
|
|
1220
|
+
lines.push(` return useMutation<Awaited<ReturnType<typeof ${funcName}>>, ApiError, ${variablesType}>({`)
|
|
1221
|
+
lines.push(` mutationFn: ${mutationFnBody},`)
|
|
1222
|
+
lines.push(` ...options,`)
|
|
1223
|
+
lines.push(` })`)
|
|
1224
|
+
lines.push(`}`)
|
|
1225
|
+
|
|
1226
|
+
return lines.join('\n')
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
// ── hasQueryParams detection ───────────────────────────────────────────────────
|
|
1230
|
+
|
|
1231
|
+
function operationHasQueryParams(operation: OperationObject): boolean {
|
|
1232
|
+
const params = operation.parameters as (OpenAPIV3_1.ParameterObject | ReferenceObject)[] | undefined
|
|
1233
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (params === undefined) <span class="cstat-no" title="statement not covered" >return false</span>
|
|
1234
|
+
return params.some((p) => {
|
|
1235
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (isRef(p)) <span class="cstat-no" title="statement not covered" >return false</span>
|
|
1236
|
+
const param = p as OpenAPIV3_1.ParameterObject
|
|
1237
|
+
return param.in === 'query'
|
|
1238
|
+
})
|
|
1239
|
+
}
|
|
1240
|
+
|
|
1241
|
+
// ── Main generator ─────────────────────────────────────────────────────────────
|
|
1242
|
+
|
|
1243
|
+
export function generateHooks(
|
|
1244
|
+
spec: OpenAPIV3_1.Document,
|
|
1245
|
+
options: HookGenOptions,
|
|
1246
|
+
): { filename: string; content: string } {
|
|
1247
|
+
const { staleTime, gcTime } = options
|
|
1248
|
+
const paths = spec.paths as Record<string, Record<string, OperationObject>> | undefined
|
|
1249
|
+
|
|
1250
|
+
// Collect all operations
|
|
1251
|
+
const operations: OperationMeta[] = []
|
|
1252
|
+
|
|
1253
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (paths !== undefined) {
|
|
1254
|
+
for (const [path, pathItem] of Object.entries(paths)) {
|
|
1255
|
+
for (const method of SUPPORTED_METHODS) {
|
|
1256
|
+
const operation = pathItem[method] as OperationObject | undefined
|
|
1257
|
+
if (operation === undefined) continue
|
|
1258
|
+
|
|
1259
|
+
let funcName: string
|
|
1260
|
+
if (operation.operationId !== undefined) {
|
|
1261
|
+
const id = operation.operationId
|
|
1262
|
+
funcName = id.charAt(0).toLowerCase() + id.slice(1)
|
|
1263
|
+
} else <span class="missing-if-branch" title="else path not taken" >E</span>{
|
|
1264
|
+
<span class="cstat-no" title="statement not covered" > funcName = deriveOperationName(method, path)</span>
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
const hookName = 'use' + capitalize(funcName)
|
|
1268
|
+
const pathParams = extractPathParams(path)
|
|
1269
|
+
const { hasBody, bodyTypeName } = getBodyInfo(operation)
|
|
1270
|
+
|
|
1271
|
+
operations.push({
|
|
1272
|
+
funcName,
|
|
1273
|
+
hookName,
|
|
1274
|
+
method,
|
|
1275
|
+
path,
|
|
1276
|
+
pathParams,
|
|
1277
|
+
hasBody,
|
|
1278
|
+
bodyTypeName,
|
|
1279
|
+
})
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
// Separate GET vs mutation operations
|
|
1285
|
+
const getOps = operations.filter((op) => op.method === 'get')
|
|
1286
|
+
const mutationOps = operations.filter((op) => op.method !== 'get')
|
|
1287
|
+
|
|
1288
|
+
// Group GET ops by resource for key factories
|
|
1289
|
+
const resourceToGetOps = new Map<string, OperationMeta[]>()
|
|
1290
|
+
for (const op of getOps) {
|
|
1291
|
+
const resource = primaryResource(op.path)
|
|
1292
|
+
const existing = resourceToGetOps.get(resource) ?? []
|
|
1293
|
+
existing.push(op)
|
|
1294
|
+
resourceToGetOps.set(resource, existing)
|
|
1295
|
+
}
|
|
1296
|
+
|
|
1297
|
+
// Build key factories and track which key factory + entry each GET op uses
|
|
1298
|
+
const opToKeyInfo = new Map<string, { factoryName: string; keyEntry: KeyEntry }>()
|
|
1299
|
+
const keyFactoryBlocks: string[] = []
|
|
1300
|
+
|
|
1301
|
+
for (const [resource, ops] of resourceToGetOps.entries()) {
|
|
1302
|
+
const factoryName = `${toKeyFactoryName(resource)}Keys`
|
|
1303
|
+
|
|
1304
|
+
// Determine entry keys — list vs detail, or operationId-derived if ambiguous
|
|
1305
|
+
const listOps = ops.filter((op) => op.pathParams.length === 0)
|
|
1306
|
+
const detailOps = ops.filter((op) => op.pathParams.length > 0)
|
|
1307
|
+
|
|
1308
|
+
const entries: KeyEntry[] = []
|
|
1309
|
+
|
|
1310
|
+
if (listOps.length === 1) {
|
|
1311
|
+
const op = listOps[0]!
|
|
1312
|
+
const hasQueryParams = operationHasQueryParams(
|
|
1313
|
+
(paths![op.path] as Record<string, OperationObject>)[op.method]!,
|
|
1314
|
+
)
|
|
1315
|
+
const entry: KeyEntry = { key: 'list', funcName: op.funcName, pathParams: [], hasQueryParams }
|
|
1316
|
+
entries.push(entry)
|
|
1317
|
+
opToKeyInfo.set(op.funcName, { factoryName, keyEntry: entry })
|
|
1318
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="else path not taken" >E</span>} else if (listOps.length > 1) {</span>
|
|
1319
|
+
<span class="cstat-no" title="statement not covered" > for (const op of listOps) {</span>
|
|
1320
|
+
const hasQueryParams = <span class="cstat-no" title="statement not covered" >operationHasQueryParams(</span>
|
|
1321
|
+
(paths![op.path] as Record<string, OperationObject>)[op.method]!,
|
|
1322
|
+
)
|
|
1323
|
+
const entry: KeyEntry = <span class="cstat-no" title="statement not covered" >{ key: op.funcName, funcName: op.funcName, pathParams: [], hasQueryParams }</span>
|
|
1324
|
+
<span class="cstat-no" title="statement not covered" > entries.push(entry)</span>
|
|
1325
|
+
<span class="cstat-no" title="statement not covered" > opToKeyInfo.set(op.funcName, { factoryName, keyEntry: entry })</span>
|
|
1326
|
+
}
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
if (detailOps.length === 1) {
|
|
1330
|
+
const op = detailOps[0]!
|
|
1331
|
+
const hasQueryParams = operationHasQueryParams(
|
|
1332
|
+
(paths![op.path] as Record<string, OperationObject>)[op.method]!,
|
|
1333
|
+
)
|
|
1334
|
+
const entry: KeyEntry = { key: 'detail', funcName: op.funcName, pathParams: op.pathParams, hasQueryParams }
|
|
1335
|
+
entries.push(entry)
|
|
1336
|
+
opToKeyInfo.set(op.funcName, { factoryName, keyEntry: entry })
|
|
1337
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="else path not taken" >E</span>} else if (detailOps.length > 1) {</span>
|
|
1338
|
+
<span class="cstat-no" title="statement not covered" > for (const op of detailOps) {</span>
|
|
1339
|
+
const hasQueryParams = <span class="cstat-no" title="statement not covered" >operationHasQueryParams(</span>
|
|
1340
|
+
(paths![op.path] as Record<string, OperationObject>)[op.method]!,
|
|
1341
|
+
)
|
|
1342
|
+
const entry: KeyEntry = <span class="cstat-no" title="statement not covered" >{ key: op.funcName, funcName: op.funcName, pathParams: op.pathParams, hasQueryParams }</span>
|
|
1343
|
+
<span class="cstat-no" title="statement not covered" > entries.push(entry)</span>
|
|
1344
|
+
<span class="cstat-no" title="statement not covered" > opToKeyInfo.set(op.funcName, { factoryName, keyEntry: entry })</span>
|
|
1345
|
+
}
|
|
1346
|
+
}
|
|
1347
|
+
|
|
1348
|
+
keyFactoryBlocks.push(buildKeyFactory(resource, entries))
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1351
|
+
// Build query hooks
|
|
1352
|
+
const queryHookBlocks: string[] = []
|
|
1353
|
+
for (const op of getOps) {
|
|
1354
|
+
const info = opToKeyInfo.get(op.funcName)
|
|
1355
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (info === undefined) <span class="cstat-no" title="statement not covered" >continue</span>
|
|
1356
|
+
const { factoryName, keyEntry } = info
|
|
1357
|
+
queryHookBlocks.push(buildQueryHook(op, factoryName, keyEntry, staleTime, gcTime))
|
|
1358
|
+
}
|
|
1359
|
+
|
|
1360
|
+
// Build mutation hooks
|
|
1361
|
+
const mutationHookBlocks: string[] = []
|
|
1362
|
+
for (const op of mutationOps) {
|
|
1363
|
+
mutationHookBlocks.push(buildMutationHook(op))
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1366
|
+
// Determine which react-query exports to import
|
|
1367
|
+
const needsUseQuery = getOps.length > 0
|
|
1368
|
+
const needsUseMutation = mutationOps.length > 0
|
|
1369
|
+
const rqImports: string[] = []
|
|
1370
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (needsUseQuery) rqImports.push('useQuery', 'type UseQueryOptions')
|
|
1371
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (needsUseMutation) rqImports.push('useMutation', 'type UseMutationOptions')
|
|
1372
|
+
|
|
1373
|
+
// Collect all function names for client import
|
|
1374
|
+
const allFuncNames = operations.map((op) => op.funcName).sort()
|
|
1375
|
+
|
|
1376
|
+
// Build file content
|
|
1377
|
+
const lines: string[] = []
|
|
1378
|
+
lines.push('// This file is auto-generated by @codewithagents/openapi-react-query — do not edit')
|
|
1379
|
+
lines.push('')
|
|
1380
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (rqImports.length > 0) {
|
|
1381
|
+
lines.push(`import { ${rqImports.join(', ')} } from '@tanstack/react-query'`)
|
|
1382
|
+
}
|
|
1383
|
+
if (allFuncNames.length > 0) {
|
|
1384
|
+
lines.push(`import { ${allFuncNames.join(', ')}, type ApiError } from './client.js'`)
|
|
1385
|
+
} else <span class="missing-if-branch" title="else path not taken" >E</span>{
|
|
1386
|
+
<span class="cstat-no" title="statement not covered" > lines.push(`import { type ApiError } from './client.js'`)</span>
|
|
1387
|
+
}
|
|
1388
|
+
lines.push('')
|
|
1389
|
+
|
|
1390
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (keyFactoryBlocks.length > 0) {
|
|
1391
|
+
lines.push('// ── Query key factories ──────────────────────────────────────')
|
|
1392
|
+
lines.push('')
|
|
1393
|
+
lines.push(keyFactoryBlocks.join('\n\n'))
|
|
1394
|
+
lines.push('')
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1397
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (queryHookBlocks.length > 0) {
|
|
1398
|
+
lines.push('// ── Queries ──────────────────────────────────────────────────')
|
|
1399
|
+
lines.push('')
|
|
1400
|
+
lines.push(queryHookBlocks.join('\n\n'))
|
|
1401
|
+
lines.push('')
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (mutationHookBlocks.length > 0) {
|
|
1405
|
+
lines.push('// ── Mutations ────────────────────────────────────────────────')
|
|
1406
|
+
lines.push('')
|
|
1407
|
+
lines.push(mutationHookBlocks.join('\n\n'))
|
|
1408
|
+
lines.push('')
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
return {
|
|
1412
|
+
filename: 'hooks.ts',
|
|
1413
|
+
content: lines.join('\n'),
|
|
1414
|
+
}
|
|
1415
|
+
}
|
|
1416
|
+
</pre></td></tr></table></pre>
|
|
1417
|
+
|
|
1418
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1419
|
+
</div><!-- /wrapper -->
|
|
1420
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1421
|
+
Code coverage generated by
|
|
1422
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1423
|
+
at 2026-05-24T06:58:43.776Z
|
|
1424
|
+
</div>
|
|
1425
|
+
<script src="../../prettify.js"></script>
|
|
1426
|
+
<script>
|
|
1427
|
+
window.onload = function () {
|
|
1428
|
+
prettyPrint();
|
|
1429
|
+
};
|
|
1430
|
+
</script>
|
|
1431
|
+
<script src="../../sorter.js"></script>
|
|
1432
|
+
<script src="../../block-navigation.js"></script>
|
|
1433
|
+
</body>
|
|
1434
|
+
</html>
|
|
1435
|
+
|