@contractkit/openapi-to-ck 0.9.0 → 0.9.2

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.
@@ -1,1129 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/paths-to-ast.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</a> paths-to-ast.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">85.03% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>108/127</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">65.71% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>69/105</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'>16/16</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">89.56% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>103/115</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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
415
- <span class="cline-any cline-neutral">&nbsp;</span>
416
- <span class="cline-any cline-neutral">&nbsp;</span>
417
- <span class="cline-any cline-neutral">&nbsp;</span>
418
- <span class="cline-any cline-neutral">&nbsp;</span>
419
- <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-neutral">&nbsp;</span>
423
- <span class="cline-any cline-neutral">&nbsp;</span>
424
- <span class="cline-any cline-neutral">&nbsp;</span>
425
- <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-neutral">&nbsp;</span>
427
- <span class="cline-any cline-neutral">&nbsp;</span>
428
- <span class="cline-any cline-neutral">&nbsp;</span>
429
- <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-neutral">&nbsp;</span>
431
- <span class="cline-any cline-neutral">&nbsp;</span>
432
- <span class="cline-any cline-neutral">&nbsp;</span>
433
- <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-neutral">&nbsp;</span>
435
- <span class="cline-any cline-neutral">&nbsp;</span>
436
- <span class="cline-any cline-neutral">&nbsp;</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-yes">1x</span>
439
- <span class="cline-any cline-yes">1x</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-neutral">&nbsp;</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-neutral">&nbsp;</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-neutral">&nbsp;</span>
450
- <span class="cline-any cline-neutral">&nbsp;</span>
451
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
456
- <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-neutral">&nbsp;</span>
459
- <span class="cline-any cline-yes">16x</span>
460
- <span class="cline-any cline-yes">16x</span>
461
- <span class="cline-any cline-yes">16x</span>
462
- <span class="cline-any cline-neutral">&nbsp;</span>
463
- <span class="cline-any cline-yes">16x</span>
464
- <span class="cline-any cline-yes">34x</span>
465
- <span class="cline-any cline-yes">34x</span>
466
- <span class="cline-any cline-yes">34x</span>
467
- <span class="cline-any cline-yes">34x</span>
468
- <span class="cline-any cline-yes">34x</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">16x</span>
473
- <span class="cline-any cline-neutral">&nbsp;</span>
474
- <span class="cline-any cline-neutral">&nbsp;</span>
475
- <span class="cline-any cline-neutral">&nbsp;</span>
476
- <span class="cline-any cline-neutral">&nbsp;</span>
477
- <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-yes">34x</span>
479
- <span class="cline-any cline-yes">34x</span>
480
- <span class="cline-any cline-neutral">&nbsp;</span>
481
- <span class="cline-any cline-neutral">&nbsp;</span>
482
- <span class="cline-any cline-yes">34x</span>
483
- <span class="cline-any cline-neutral">&nbsp;</span>
484
- <span class="cline-any cline-yes">34x</span>
485
- <span class="cline-any cline-yes">170x</span>
486
- <span class="cline-any cline-yes">170x</span>
487
- <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-yes">54x</span>
489
- <span class="cline-any cline-yes">54x</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-yes">54x</span>
493
- <span class="cline-any cline-yes">30x</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-yes">34x</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-yes">34x</span>
501
- <span class="cline-any cline-neutral">&nbsp;</span>
502
- <span class="cline-any cline-yes">34x</span>
503
- <span class="cline-any cline-neutral">&nbsp;</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">34x</span>
509
- <span class="cline-any cline-yes">12x</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">34x</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-yes">34x</span>
517
- <span class="cline-any cline-neutral">&nbsp;</span>
518
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
522
- <span class="cline-any cline-yes">54x</span>
523
- <span class="cline-any cline-yes">54x</span>
524
- <span class="cline-any cline-neutral">&nbsp;</span>
525
- <span class="cline-any cline-yes">54x</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-neutral">&nbsp;</span>
530
- <span class="cline-any cline-neutral">&nbsp;</span>
531
- <span class="cline-any cline-neutral">&nbsp;</span>
532
- <span class="cline-any cline-yes">54x</span>
533
- <span class="cline-any cline-yes">54x</span>
534
- <span class="cline-any cline-neutral">&nbsp;</span>
535
- <span class="cline-any cline-neutral">&nbsp;</span>
536
- <span class="cline-any cline-neutral">&nbsp;</span>
537
- <span class="cline-any cline-yes">54x</span>
538
- <span class="cline-any cline-no">&nbsp;</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-yes">54x</span>
543
- <span class="cline-any cline-no">&nbsp;</span>
544
- <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-yes">54x</span>
548
- <span class="cline-any cline-yes">54x</span>
549
- <span class="cline-any cline-neutral">&nbsp;</span>
550
- <span class="cline-any cline-yes">54x</span>
551
- <span class="cline-any cline-yes">10x</span>
552
- <span class="cline-any cline-yes">10x</span>
553
- <span class="cline-any cline-no">&nbsp;</span>
554
- <span class="cline-any cline-no">&nbsp;</span>
555
- <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-neutral">&nbsp;</span>
557
- <span class="cline-any cline-neutral">&nbsp;</span>
558
- <span class="cline-any cline-yes">54x</span>
559
- <span class="cline-any cline-yes">10x</span>
560
- <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-yes">54x</span>
562
- <span class="cline-any cline-no">&nbsp;</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">54x</span>
567
- <span class="cline-any cline-yes">10x</span>
568
- <span class="cline-any cline-neutral">&nbsp;</span>
569
- <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-neutral">&nbsp;</span>
571
- <span class="cline-any cline-yes">54x</span>
572
- <span class="cline-any cline-yes">54x</span>
573
- <span class="cline-any cline-yes">64x</span>
574
- <span class="cline-any cline-yes">64x</span>
575
- <span class="cline-any cline-yes">64x</span>
576
- <span class="cline-any cline-yes">64x</span>
577
- <span class="cline-any cline-neutral">&nbsp;</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-yes">54x</span>
581
- <span class="cline-any cline-yes">10x</span>
582
- <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-yes">54x</span>
585
- <span class="cline-any cline-neutral">&nbsp;</span>
586
- <span class="cline-any cline-neutral">&nbsp;</span>
587
- <span class="cline-any cline-neutral">&nbsp;</span>
588
- <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-neutral">&nbsp;</span>
590
- <span class="cline-any cline-yes">34x</span>
591
- <span class="cline-any cline-neutral">&nbsp;</span>
592
- <span class="cline-any cline-neutral">&nbsp;</span>
593
- <span class="cline-any cline-yes">34x</span>
594
- <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-yes">34x</span>
596
- <span class="cline-any cline-yes">12x</span>
597
- <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-neutral">&nbsp;</span>
599
- <span class="cline-any cline-neutral">&nbsp;</span>
600
- <span class="cline-any cline-yes">34x</span>
601
- <span class="cline-any cline-yes">170x</span>
602
- <span class="cline-any cline-yes">170x</span>
603
- <span class="cline-any cline-yes">10x</span>
604
- <span class="cline-any cline-yes">10x</span>
605
- <span class="cline-any cline-no">&nbsp;</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">34x</span>
612
- <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-yes">34x</span>
614
- <span class="cline-any cline-yes">12x</span>
615
- <span class="cline-any cline-yes">12x</span>
616
- <span class="cline-any cline-yes">12x</span>
617
- <span class="cline-any cline-neutral">&nbsp;</span>
618
- <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-no">&nbsp;</span>
620
- <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-neutral">&nbsp;</span>
622
- <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-neutral">&nbsp;</span>
624
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</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-yes">22x</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
632
- <span class="cline-any cline-yes">22x</span>
633
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-neutral">&nbsp;</span>
650
- <span class="cline-any cline-yes">10x</span>
651
- <span class="cline-any cline-yes">10x</span>
652
- <span class="cline-any cline-neutral">&nbsp;</span>
653
- <span class="cline-any cline-yes">10x</span>
654
- <span class="cline-any cline-yes">10x</span>
655
- <span class="cline-any cline-neutral">&nbsp;</span>
656
- <span class="cline-any cline-yes">10x</span>
657
- <span class="cline-any cline-yes">10x</span>
658
- <span class="cline-any cline-yes">10x</span>
659
- <span class="cline-any cline-yes">10x</span>
660
- <span class="cline-any cline-no">&nbsp;</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-yes">10x</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-neutral">&nbsp;</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">10x</span>
669
- <span class="cline-any cline-yes">10x</span>
670
- <span class="cline-any cline-neutral">&nbsp;</span>
671
- <span class="cline-any cline-neutral">&nbsp;</span>
672
- <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-neutral">&nbsp;</span>
674
- <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-neutral">&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-yes">64x</span>
682
- <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-yes">64x</span>
684
- <span class="cline-any cline-yes">21x</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">43x</span>
689
- <span class="cline-any cline-yes">64x</span>
690
- <span class="cline-any cline-no">&nbsp;</span>
691
- <span class="cline-any cline-neutral">&nbsp;</span>
692
- <span class="cline-any cline-neutral">&nbsp;</span>
693
- <span class="cline-any cline-yes">43x</span>
694
- <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-yes">43x</span>
696
- <span class="cline-any cline-no">&nbsp;</span>
697
- <span class="cline-any cline-neutral">&nbsp;</span>
698
- <span class="cline-any cline-neutral">&nbsp;</span>
699
- <span class="cline-any cline-yes">43x</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-neutral">&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-neutral">&nbsp;</span>
708
- <span class="cline-any cline-yes">64x</span>
709
- <span class="cline-any cline-yes">3x</span>
710
- <span class="cline-any cline-yes">3x</span>
711
- <span class="cline-any cline-yes">4x</span>
712
- <span class="cline-any cline-yes">4x</span>
713
- <span class="cline-any cline-yes">4x</span>
714
- <span class="cline-any cline-neutral">&nbsp;</span>
715
- <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-neutral">&nbsp;</span>
717
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
722
- <span class="cline-any cline-neutral">&nbsp;</span>
723
- <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-neutral">&nbsp;</span>
725
- <span class="cline-any cline-neutral">&nbsp;</span>
726
- <span class="cline-any cline-neutral">&nbsp;</span>
727
- <span class="cline-any cline-yes">10x</span>
728
- <span class="cline-any cline-yes">10x</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-neutral">&nbsp;</span>
732
- <span class="cline-any cline-neutral">&nbsp;</span>
733
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
737
- <span class="cline-any cline-neutral">&nbsp;</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-yes">88x</span>
740
- <span class="cline-any cline-neutral">&nbsp;</span>
741
- <span class="cline-any cline-neutral">&nbsp;</span>
742
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</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-neutral">&nbsp;</span>
750
- <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-yes">53x</span>
752
- <span class="cline-any cline-neutral">&nbsp;</span>
753
- <span class="cline-any cline-neutral">&nbsp;</span>
754
- <span class="cline-any cline-neutral">&nbsp;</span>
755
- <span class="cline-any cline-yes">53x</span>
756
- <span class="cline-any cline-neutral">&nbsp;</span>
757
- <span class="cline-any cline-neutral">&nbsp;</span>
758
- <span class="cline-any cline-neutral">&nbsp;</span>
759
- <span class="cline-any cline-neutral">&nbsp;</span>
760
- <span class="cline-any cline-yes">88x</span>
761
- <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type {
763
- OpRouteNode,
764
- OpOperationNode,
765
- OpParamNode,
766
- OpRequestNode,
767
- OpResponseNode,
768
- OpResponseHeaderNode,
769
- HttpMethod,
770
- ModelNode,
771
- SourceLocation,
772
- SecurityNode,
773
- } from '@contractkit/core';
774
- import type {
775
- NormalizedDocument,
776
- NormalizedPathItem,
777
- NormalizedOperation,
778
- NormalizedParameter,
779
- NormalizedRequestBody,
780
- NormalizedResponse,
781
- } from './types.js';
782
- import { schemaToTypeNode, extractInlineModel } from './schema-to-ast.js';
783
- import type { SchemaContext } from './schema-to-ast.js';
784
- import type { WarningCollector } from './warnings.js';
785
- &nbsp;
786
- const LOC: SourceLocation = { file: '', line: 0 };
787
- const HTTP_METHODS: HttpMethod[] = ['get', 'post', 'put', 'patch', 'delete'];
788
- &nbsp;
789
- // ─── Public API ───────────────────────────────────────────────────────────
790
- &nbsp;
791
- export interface PathsContext {
792
- circularRefs: Set&lt;string&gt;;
793
- warnings: WarningCollector;
794
- includeComments: boolean;
795
- namedSchemas: Record&lt;string, unknown&gt;;
796
- /** Accumulates inline models extracted from request/response bodies. */
797
- extractedModels: ModelNode[];
798
- /** Global security from the spec (for detecting explicit overrides). */
799
- globalSecurity?: Record&lt;string, string[]&gt;[];
800
- }
801
- &nbsp;
802
- /**
803
- * Convert OpenAPI paths to OpRouteNode[].
804
- * Returns routes along with a tag mapping for each route.
805
- */
806
- export function pathsToRoutes(doc: NormalizedDocument, ctx: PathsContext): { routes: OpRouteNode[]; routeTags: Map&lt;OpRouteNode, string&gt; } {
807
- const routes: OpRouteNode[] = [];
808
- const routeTags = new Map&lt;OpRouteNode, string&gt;();
809
- const paths = doc.paths ?? <span class="branch-1 cbranch-no" title="branch not covered" >{};</span>
810
- &nbsp;
811
- for (const [path, pathItem] of Object.entries(paths)) {
812
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!pathItem) <span class="cstat-no" title="statement not covered" >continue;</span>
813
- const result = pathItemToRoute(path, pathItem, ctx);
814
- <span class="missing-if-branch" title="else path not taken" >E</span>if (result) {
815
- routes.push(result.route);
816
- routeTags.set(result.route, result.tag);
817
- }
818
- }
819
- &nbsp;
820
- return { routes, routeTags };
821
- }
822
- &nbsp;
823
- // ─── Path Item → Route ───────────────────────────────────────────────────
824
- &nbsp;
825
- function pathItemToRoute(path: string, pathItem: NormalizedPathItem, ctx: PathsContext): { route: OpRouteNode; tag: string } | null {
826
- const operations: OpOperationNode[] = [];
827
- let primaryTag = 'default';
828
- &nbsp;
829
- // Collect path-level parameters
830
- const pathParams = (pathItem.parameters ?? []).filter(p =&gt; p.in === 'path');
831
- &nbsp;
832
- for (const method of HTTP_METHODS) {
833
- const op = pathItem[method];
834
- if (!op) continue;
835
- &nbsp;
836
- const opNode = operationToNode(method, op, path, ctx);
837
- operations.push(opNode);
838
- &nbsp;
839
- // Use first tag of first operation as the route's tag
840
- if (op.tags &amp;&amp; op.tags.length &gt; 0 &amp;&amp; primaryTag === 'default') {
841
- primaryTag = op.tags[0]!;
842
- }
843
- }
844
- &nbsp;
845
- <span class="missing-if-branch" title="if path not taken" >I</span>if (operations.length === 0) <span class="cstat-no" title="statement not covered" >return null;</span>
846
- &nbsp;
847
- // Build params from path-level + inferred from path template
848
- const params = buildPathParams(path, pathParams, pathItem, ctx);
849
- &nbsp;
850
- const route: OpRouteNode = {
851
- path,
852
- operations,
853
- loc: LOC,
854
- };
855
- &nbsp;
856
- if (params.length &gt; 0) {
857
- route.params = { kind: 'params', nodes: params };
858
- }
859
- &nbsp;
860
- <span class="missing-if-branch" title="if path not taken" >I</span>if (pathItem.description &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >ctx.includeComments) {</span>
861
- <span class="cstat-no" title="statement not covered" > route.description = pathItem.description;</span>
862
- }
863
- &nbsp;
864
- return { route, tag: primaryTag };
865
- }
866
- &nbsp;
867
- // ─── Operation → Node ─────────────────────────────────────────────────────
868
- &nbsp;
869
- function operationToNode(method: HttpMethod, op: NormalizedOperation, path: string, ctx: PathsContext): OpOperationNode {
870
- const pathPrefix = `#/paths/${encodePathSegment(path)}/${method}`;
871
- const schemaCtx = makeSchemaCtx(ctx, pathPrefix);
872
- &nbsp;
873
- const node: OpOperationNode = {
874
- method,
875
- responses: [],
876
- loc: LOC,
877
- };
878
- &nbsp;
879
- // operationId → sdk
880
- <span class="missing-if-branch" title="else path not taken" >E</span>if (op.operationId) {
881
- node.sdk = op.operationId;
882
- }
883
- &nbsp;
884
- // Description
885
- <span class="missing-if-branch" title="if path not taken" >I</span>if (op.description &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >ctx.includeComments) {</span>
886
- <span class="cstat-no" title="statement not covered" > node.description = op.description;</span>
887
- }
888
- &nbsp;
889
- // Deprecated
890
- <span class="missing-if-branch" title="if path not taken" >I</span>if (op.deprecated) {
891
- <span class="cstat-no" title="statement not covered" > node.modifiers = ['deprecated'];</span>
892
- }
893
- &nbsp;
894
- // Query and header parameters
895
- const queryParams: OpParamNode[] = [];
896
- const headerParams: OpParamNode[] = [];
897
- &nbsp;
898
- for (const param of op.parameters ?? []) {
899
- if (param.in === 'query') {
900
- queryParams.push(parameterToNode(param, schemaCtx));
901
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="else path not taken" >E</span>} else if (param.in === 'header') {</span>
902
- <span class="cstat-no" title="statement not covered" > headerParams.push(parameterToNode(param, schemaCtx));</span>
903
- }
904
- }
905
- &nbsp;
906
- if (queryParams.length &gt; 0) {
907
- node.query = { kind: 'params', nodes: queryParams };
908
- }
909
- <span class="missing-if-branch" title="if path not taken" >I</span>if (headerParams.length &gt; 0) {
910
- <span class="cstat-no" title="statement not covered" > node.headers = { kind: 'params', nodes: headerParams };</span>
911
- }
912
- &nbsp;
913
- // Request body
914
- if (op.requestBody) {
915
- node.request = requestBodyToNode(op.requestBody, op.operationId ?? <span class="branch-1 cbranch-no" title="branch not covered" >`${method}${toPascalCase(path)}`, s</span>chemaCtx, ctx);
916
- }
917
- &nbsp;
918
- // Responses
919
- const responses = op.responses ?? <span class="branch-1 cbranch-no" title="branch not covered" >{};</span>
920
- for (const [code, resp] of Object.entries(responses)) {
921
- const statusCode = parseInt(code, 10);
922
- <span class="missing-if-branch" title="if path not taken" >I</span>if (isNaN(statusCode)) <span class="cstat-no" title="statement not covered" >continue;</span>
923
- const respNode = responseToNode(statusCode, resp, op.operationId ?? <span class="branch-1 cbranch-no" title="branch not covered" >`${method}${toPascalCase(path)}`, s</span>chemaCtx, ctx);
924
- node.responses.push(respNode);
925
- }
926
- &nbsp;
927
- // Security
928
- if (op.security !== undefined) {
929
- node.security = convertSecurity(op.security);
930
- }
931
- &nbsp;
932
- return node;
933
- }
934
- &nbsp;
935
- // ─── Parameters ───────────────────────────────────────────────────────────
936
- &nbsp;
937
- function buildPathParams(path: string, pathLevelParams: NormalizedParameter[], pathItem: NormalizedPathItem, ctx: PathsContext): OpParamNode[] {
938
- const schemaCtx = makeSchemaCtx(ctx, `#/paths/${encodePathSegment(path)}`);
939
- &nbsp;
940
- // Collect all path params from path-level and operation-level
941
- const paramMap = new Map&lt;string, NormalizedParameter&gt;();
942
- &nbsp;
943
- for (const p of pathLevelParams) {
944
- paramMap.set(p.name, p);
945
- }
946
- &nbsp;
947
- // Also check operation-level path params
948
- for (const method of HTTP_METHODS) {
949
- const op = pathItem[method];
950
- if (!op?.parameters) continue;
951
- for (const p of op.parameters) {
952
- <span class="missing-if-branch" title="if path not taken" >I</span>if (p.in === 'path' &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >!paramMap.has(p.name)) {</span>
953
- <span class="cstat-no" title="statement not covered" > paramMap.set(p.name, p);</span>
954
- }
955
- }
956
- }
957
- &nbsp;
958
- // Extract param names from path template
959
- const templateNames = [...path.matchAll(/\{([^}]+)\}/g)].map(m =&gt; m[1]!);
960
- &nbsp;
961
- return templateNames.map(name =&gt; {
962
- const param = paramMap.get(name);
963
- <span class="missing-if-branch" title="else path not taken" >E</span>if (param) {
964
- return parameterToNode(param, schemaCtx);
965
- }
966
- // Infer as uuid if no schema is given
967
- <span class="cstat-no" title="statement not covered" > return {</span>
968
- name,
969
- optional: false,
970
- nullable: false,
971
- type: { kind: 'scalar' as const, name: 'string' as const },
972
- loc: LOC,
973
- };
974
- });
975
- }
976
- &nbsp;
977
- function parameterToNode(param: NormalizedParameter, ctx: SchemaContext): OpParamNode {
978
- const type = param.schema ? schemaToTypeNode(param.schema, ctx) : <span class="branch-1 cbranch-no" title="branch not covered" >{ kind: 'scalar' as const, name: 'string' as const };</span>
979
- &nbsp;
980
- return {
981
- name: param.name,
982
- optional: param.in !== 'path' &amp;&amp; !param.required,
983
- nullable: false,
984
- type,
985
- description: ctx.includeComments ? param.description : undefined,
986
- loc: LOC,
987
- };
988
- }
989
- &nbsp;
990
- // ─── Request Body ─────────────────────────────────────────────────────────
991
- &nbsp;
992
- function requestBodyToNode(
993
- reqBody: NormalizedRequestBody,
994
- operationName: string,
995
- schemaCtx: SchemaContext,
996
- ctx: PathsContext,
997
- ): OpRequestNode | undefined {
998
- const content = reqBody.content;
999
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!content) <span class="cstat-no" title="statement not covered" >return undefined;</span>
1000
- &nbsp;
1001
- const supported = new Set&lt;string&gt;(['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data']);
1002
- const bodies: OpRequestNode['bodies'] = [];
1003
- &nbsp;
1004
- for (const [contentType, mediaType] of Object.entries(content)) {
1005
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!supported.has(contentType) || !mediaType?.schema) <span class="cstat-no" title="statement not covered" >continue;</span>
1006
- const { typeNode, model } = extractInlineModel(mediaType.schema, `${toPascalCase(operationName)}Request`, schemaCtx);
1007
- <span class="missing-if-branch" title="if path not taken" >I</span>if (model) {
1008
- <span class="cstat-no" title="statement not covered" > ctx.extractedModels.push(model);</span>
1009
- }
1010
- bodies.push({
1011
- contentType: contentType as OpRequestNode['bodies'][number]['contentType'],
1012
- bodyType: typeNode,
1013
- });
1014
- }
1015
- &nbsp;
1016
- <span class="missing-if-branch" title="if path not taken" >I</span>if (bodies.length === 0) <span class="cstat-no" title="statement not covered" >return undefined;</span>
1017
- return { bodies };
1018
- }
1019
- &nbsp;
1020
- // ─── Responses ────────────────────────────────────────────────────────────
1021
- &nbsp;
1022
- function responseToNode(
1023
- statusCode: number,
1024
- resp: NormalizedResponse,
1025
- operationName: string,
1026
- schemaCtx: SchemaContext,
1027
- ctx: PathsContext,
1028
- ): OpResponseNode {
1029
- const headers = convertResponseHeaders(resp.headers, schemaCtx);
1030
- &nbsp;
1031
- if (!resp.content) {
1032
- return headers ? { statusCode, headers } : { statusCode };
1033
- }
1034
- &nbsp;
1035
- // Pick the first content type
1036
- const [contentType, mediaType] = Object.entries(resp.content)[0] ?? <span class="branch-1 cbranch-no" title="branch not covered" >[];</span>
1037
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!contentType || !mediaType?.schema) {
1038
- <span class="cstat-no" title="statement not covered" > return headers ? { statusCode, headers } : { statusCode };</span>
1039
- }
1040
- &nbsp;
1041
- const { typeNode, model } = extractInlineModel(mediaType.schema, `${toPascalCase(operationName)}Response${statusCode}`, schemaCtx);
1042
- &nbsp;
1043
- <span class="missing-if-branch" title="if path not taken" >I</span>if (model) {
1044
- <span class="cstat-no" title="statement not covered" > ctx.extractedModels.push(model);</span>
1045
- }
1046
- &nbsp;
1047
- return {
1048
- statusCode,
1049
- contentType: contentType as 'application/json',
1050
- bodyType: typeNode,
1051
- ...(headers ? { headers } : {}),
1052
- };
1053
- }
1054
- &nbsp;
1055
- function convertResponseHeaders(headers: NormalizedResponse['headers'], schemaCtx: SchemaContext): OpResponseHeaderNode[] | undefined {
1056
- if (!headers) return undefined;
1057
- const out: OpResponseHeaderNode[] = [];
1058
- for (const [name, header] of Object.entries(headers)) {
1059
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!header) <span class="cstat-no" title="statement not covered" >continue;</span>
1060
- const type = header.schema ? schemaToTypeNode(header.schema, schemaCtx) : <span class="branch-1 cbranch-no" title="branch not covered" >{ kind: 'scalar' as const, name: 'string' as const };</span>
1061
- out.push({
1062
- name,
1063
- optional: !header.required,
1064
- type,
1065
- description: schemaCtx.includeComments ? header.description : <span class="branch-1 cbranch-no" title="branch not covered" >undefined,</span>
1066
- });
1067
- }
1068
- return out.length &gt; 0 ? out : <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
1069
- }
1070
- &nbsp;
1071
- // ─── Security ─────────────────────────────────────────────────────────────
1072
- &nbsp;
1073
- function convertSecurity(security: Record&lt;string, string[]&gt;[]): SecurityNode {
1074
- // Empty array = explicitly no security
1075
- <span class="missing-if-branch" title="else path not taken" >E</span>if (security.length === 0) {
1076
- return 'none';
1077
- }
1078
- &nbsp;
1079
- // The DSL's security model is simpler — OpenAPI scopes/roles don't map onto named policies,
1080
- // so any non-empty security requirement is collapsed to "authenticated, default policy".
1081
- <span class="cstat-no" title="statement not covered" > return { loc: LOC };</span>
1082
- }
1083
- &nbsp;
1084
- // ─── Helpers ──────────────────────────────────────────────────────────────
1085
- &nbsp;
1086
- function makeSchemaCtx(ctx: PathsContext, path: string): SchemaContext {
1087
- return {
1088
- circularRefs: ctx.circularRefs,
1089
- warnings: ctx.warnings,
1090
- path,
1091
- includeComments: ctx.includeComments,
1092
- namedSchemas: ctx.namedSchemas as Record&lt;string, never&gt;,
1093
- extractedModels: ctx.extractedModels,
1094
- inlineCounter: 0,
1095
- };
1096
- }
1097
- &nbsp;
1098
- function toPascalCase(input: string): string {
1099
- return input
1100
- .replace(/[^a-zA-Z0-9]/g, ' ')
1101
- .split(/\s+/)
1102
- .filter(Boolean)
1103
- .map(part =&gt; part.charAt(0).toUpperCase() + part.slice(1))
1104
- .join('');
1105
- }
1106
- &nbsp;
1107
- function encodePathSegment(s: string): string {
1108
- return s.replace(/~/g, '~0').replace(/\//g, '~1');
1109
- }
1110
- &nbsp;</pre></td></tr></table></pre>
1111
-
1112
- <div class='push'></div><!-- for sticky footer -->
1113
- </div><!-- /wrapper -->
1114
- <div class='footer quiet pad2 space-top1 center small'>
1115
- Code coverage generated by
1116
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1117
- at 2026-06-12T19:14:44.390Z
1118
- </div>
1119
- <script src="../prettify.js"></script>
1120
- <script>
1121
- window.onload = function () {
1122
- prettyPrint();
1123
- };
1124
- </script>
1125
- <script src="../sorter.js"></script>
1126
- <script src="../block-navigation.js"></script>
1127
- </body>
1128
- </html>
1129
-