@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,1162 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/normalize.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> normalize.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">62.96% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>102/162</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">56.6% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>90/159</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">80% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>8/10</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">63.33% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>95/150</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></td><td class="line-coverage quiet"><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-yes">22x</span>
438
- <span class="cline-any cline-neutral">&nbsp;</span>
439
- <span class="cline-any cline-yes">22x</span>
440
- <span class="cline-any cline-yes">5x</span>
441
- <span class="cline-any cline-neutral">&nbsp;</span>
442
- <span class="cline-any cline-yes">17x</span>
443
- <span class="cline-any cline-yes">1x</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-yes">16x</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-yes">22x</span>
451
- <span class="cline-any cline-yes">17x</span>
452
- <span class="cline-any cline-yes">17x</span>
453
- <span class="cline-any cline-neutral">&nbsp;</span>
454
- <span class="cline-any cline-yes">16x</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-neutral">&nbsp;</span>
460
- <span class="cline-any cline-yes">5x</span>
461
- <span class="cline-any cline-yes">5x</span>
462
- <span class="cline-any cline-yes">5x</span>
463
- <span class="cline-any cline-yes">5x</span>
464
- <span class="cline-any cline-yes">5x</span>
465
- <span class="cline-any cline-yes">5x</span>
466
- <span class="cline-any cline-neutral">&nbsp;</span>
467
- <span class="cline-any cline-yes">5x</span>
468
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</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-neutral">&nbsp;</span>
479
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
483
- <span class="cline-any cline-neutral">&nbsp;</span>
484
- <span class="cline-any cline-yes">5x</span>
485
- <span class="cline-any cline-yes">5x</span>
486
- <span class="cline-any cline-yes">1x</span>
487
- <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-neutral">&nbsp;</span>
489
- <span class="cline-any cline-neutral">&nbsp;</span>
490
- <span class="cline-any cline-yes">5x</span>
491
- <span class="cline-any cline-yes">5x</span>
492
- <span class="cline-any cline-yes">2x</span>
493
- <span class="cline-any cline-neutral">&nbsp;</span>
494
- <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-neutral">&nbsp;</span>
496
- <span class="cline-any cline-yes">5x</span>
497
- <span class="cline-any cline-yes">5x</span>
498
- <span class="cline-any cline-yes">2x</span>
499
- <span class="cline-any cline-neutral">&nbsp;</span>
500
- <span class="cline-any cline-neutral">&nbsp;</span>
501
- <span class="cline-any cline-neutral">&nbsp;</span>
502
- <span class="cline-any cline-yes">5x</span>
503
- <span class="cline-any cline-no">&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-yes">5x</span>
507
- <span class="cline-any cline-neutral">&nbsp;</span>
508
- <span class="cline-any cline-neutral">&nbsp;</span>
509
- <span class="cline-any cline-neutral">&nbsp;</span>
510
- <span class="cline-any cline-neutral">&nbsp;</span>
511
- <span class="cline-any cline-neutral">&nbsp;</span>
512
- <span class="cline-any cline-neutral">&nbsp;</span>
513
- <span class="cline-any cline-neutral">&nbsp;</span>
514
- <span class="cline-any cline-neutral">&nbsp;</span>
515
- <span class="cline-any cline-yes">2x</span>
516
- <span class="cline-any cline-yes">2x</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-yes">2x</span>
520
- <span class="cline-any cline-neutral">&nbsp;</span>
521
- <span class="cline-any cline-yes">2x</span>
522
- <span class="cline-any cline-yes">14x</span>
523
- <span class="cline-any cline-yes">14x</span>
524
- <span class="cline-any cline-neutral">&nbsp;</span>
525
- <span class="cline-any cline-yes">2x</span>
526
- <span class="cline-any cline-yes">14x</span>
527
- <span class="cline-any cline-yes">14x</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-yes">14x</span>
531
- <span class="cline-any cline-neutral">&nbsp;</span>
532
- <span class="cline-any cline-neutral">&nbsp;</span>
533
- <span class="cline-any cline-yes">14x</span>
534
- <span class="cline-any cline-yes">1x</span>
535
- <span class="cline-any cline-yes">1x</span>
536
- <span class="cline-any cline-yes">1x</span>
537
- <span class="cline-any cline-neutral">&nbsp;</span>
538
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
543
- <span class="cline-any cline-neutral">&nbsp;</span>
544
- <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-no">&nbsp;</span>
546
- <span class="cline-any cline-no">&nbsp;</span>
547
- <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-no">&nbsp;</span>
549
- <span class="cline-any cline-no">&nbsp;</span>
550
- <span class="cline-any cline-neutral">&nbsp;</span>
551
- <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-neutral">&nbsp;</span>
553
- <span class="cline-any cline-neutral">&nbsp;</span>
554
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
558
- <span class="cline-any cline-neutral">&nbsp;</span>
559
- <span class="cline-any cline-neutral">&nbsp;</span>
560
- <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-no">&nbsp;</span>
562
- <span class="cline-any cline-no">&nbsp;</span>
563
- <span class="cline-any cline-no">&nbsp;</span>
564
- <span class="cline-any cline-no">&nbsp;</span>
565
- <span class="cline-any cline-neutral">&nbsp;</span>
566
- <span class="cline-any cline-neutral">&nbsp;</span>
567
- <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-no">&nbsp;</span>
569
- <span class="cline-any cline-no">&nbsp;</span>
570
- <span class="cline-any cline-no">&nbsp;</span>
571
- <span class="cline-any cline-neutral">&nbsp;</span>
572
- <span class="cline-any cline-neutral">&nbsp;</span>
573
- <span class="cline-any cline-neutral">&nbsp;</span>
574
- <span class="cline-any cline-neutral">&nbsp;</span>
575
- <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
581
- <span class="cline-any cline-neutral">&nbsp;</span>
582
- <span class="cline-any cline-no">&nbsp;</span>
583
- <span class="cline-any cline-no">&nbsp;</span>
584
- <span class="cline-any cline-no">&nbsp;</span>
585
- <span class="cline-any cline-no">&nbsp;</span>
586
- <span class="cline-any cline-neutral">&nbsp;</span>
587
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
591
- <span class="cline-any cline-neutral">&nbsp;</span>
592
- <span class="cline-any cline-yes">2x</span>
593
- <span class="cline-any cline-yes">2x</span>
594
- <span class="cline-any cline-yes">14x</span>
595
- <span class="cline-any cline-yes">2x</span>
596
- <span class="cline-any cline-yes">2x</span>
597
- <span class="cline-any cline-yes">2x</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">2x</span>
601
- <span class="cline-any cline-yes">1x</span>
602
- <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-neutral">&nbsp;</span>
604
- <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-neutral">&nbsp;</span>
607
- <span class="cline-any cline-yes">2x</span>
608
- <span class="cline-any cline-yes">1x</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-yes">2x</span>
611
- <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-yes">2x</span>
614
- <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&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-yes">2x</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-neutral">&nbsp;</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
632
- <span class="cline-any cline-neutral">&nbsp;</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-yes">2x</span>
637
- <span class="cline-any cline-yes">1x</span>
638
- <span class="cline-any cline-yes">1x</span>
639
- <span class="cline-any cline-yes">1x</span>
640
- <span class="cline-any cline-yes">1x</span>
641
- <span class="cline-any cline-yes">1x</span>
642
- <span class="cline-any cline-yes">1x</span>
643
- <span class="cline-any cline-yes">1x</span>
644
- <span class="cline-any cline-yes">1x</span>
645
- <span class="cline-any cline-yes">1x</span>
646
- <span class="cline-any cline-yes">1x</span>
647
- <span class="cline-any cline-yes">1x</span>
648
- <span class="cline-any cline-yes">1x</span>
649
- <span class="cline-any cline-neutral">&nbsp;</span>
650
- <span class="cline-any cline-yes">1x</span>
651
- <span class="cline-any cline-neutral">&nbsp;</span>
652
- <span class="cline-any cline-neutral">&nbsp;</span>
653
- <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-yes">2x</span>
655
- <span class="cline-any cline-yes">2x</span>
656
- <span class="cline-any cline-yes">1x</span>
657
- <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-yes">1x</span>
659
- <span class="cline-any cline-yes">1x</span>
660
- <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-no">&nbsp;</span>
662
- <span class="cline-any cline-no">&nbsp;</span>
663
- <span class="cline-any cline-no">&nbsp;</span>
664
- <span class="cline-any cline-no">&nbsp;</span>
665
- <span class="cline-any cline-no">&nbsp;</span>
666
- <span class="cline-any cline-no">&nbsp;</span>
667
- <span class="cline-any cline-no">&nbsp;</span>
668
- <span class="cline-any cline-no">&nbsp;</span>
669
- <span class="cline-any cline-no">&nbsp;</span>
670
- <span class="cline-any cline-no">&nbsp;</span>
671
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
678
- <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-no">&nbsp;</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-neutral">&nbsp;</span>
685
- <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-yes">1x</span>
687
- <span class="cline-any cline-yes">1x</span>
688
- <span class="cline-any cline-yes">1x</span>
689
- <span class="cline-any cline-neutral">&nbsp;</span>
690
- <span class="cline-any cline-neutral">&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">1x</span>
694
- <span class="cline-any cline-no">&nbsp;</span>
695
- <span class="cline-any cline-no">&nbsp;</span>
696
- <span class="cline-any cline-neutral">&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">1x</span>
700
- <span class="cline-any cline-yes">1x</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-no">&nbsp;</span>
705
- <span class="cline-any cline-no">&nbsp;</span>
706
- <span class="cline-any cline-no">&nbsp;</span>
707
- <span class="cline-any cline-no">&nbsp;</span>
708
- <span class="cline-any cline-neutral">&nbsp;</span>
709
- <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-no">&nbsp;</span>
711
- <span class="cline-any cline-no">&nbsp;</span>
712
- <span class="cline-any cline-no">&nbsp;</span>
713
- <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
719
- <span class="cline-any cline-no">&nbsp;</span>
720
- <span class="cline-any cline-no">&nbsp;</span>
721
- <span class="cline-any cline-no">&nbsp;</span>
722
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
728
- <span class="cline-any cline-no">&nbsp;</span>
729
- <span class="cline-any cline-no">&nbsp;</span>
730
- <span class="cline-any cline-no">&nbsp;</span>
731
- <span class="cline-any cline-no">&nbsp;</span>
732
- <span class="cline-any cline-no">&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-neutral">&nbsp;</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-yes">8x</span>
747
- <span class="cline-any cline-neutral">&nbsp;</span>
748
- <span class="cline-any cline-yes">8x</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">8x</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-neutral">&nbsp;</span>
755
- <span class="cline-any cline-neutral">&nbsp;</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">8x</span>
761
- <span class="cline-any cline-yes">2x</span>
762
- <span class="cline-any cline-yes">2x</span>
763
- <span class="cline-any cline-yes">2x</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-neutral">&nbsp;</span>
766
- <span class="cline-any cline-yes">8x</span>
767
- <span class="cline-any cline-yes">1x</span>
768
- <span class="cline-any cline-neutral">&nbsp;</span>
769
- <span class="cline-any cline-yes">8x</span>
770
- <span class="cline-any cline-no">&nbsp;</span>
771
- <span class="cline-any cline-neutral">&nbsp;</span>
772
- <span class="cline-any cline-yes">8x</span>
773
- <span class="cline-any cline-yes">24x</span>
774
- <span class="cline-any cline-no">&nbsp;</span>
775
- <span class="cline-any cline-neutral">&nbsp;</span>
776
- <span class="cline-any cline-neutral">&nbsp;</span>
777
- <span class="cline-any cline-neutral">&nbsp;</span>
778
- <span class="cline-any cline-yes">8x</span>
779
- <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-neutral">&nbsp;</span>
781
- <span class="cline-any cline-neutral">&nbsp;</span>
782
- <span class="cline-any cline-no">&nbsp;</span>
783
- <span class="cline-any cline-neutral">&nbsp;</span>
784
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { NormalizedDocument } from './types.js';
785
- import type { WarningCollector } from './warnings.js';
786
- &nbsp;
787
- /**
788
- * Detects the OpenAPI version from a parsed document and normalizes it to a
789
- * 3.1-like shape. Swagger 2.0 and OpenAPI 3.0 documents are transformed
790
- * so that downstream code only needs to handle one schema dialect.
791
- *
792
- * Uses @scalar/openapi-parser's `upgrade()` for the heavy lifting when
793
- * available, with manual fallbacks for edge cases.
794
- */
795
- export function normalize(doc: Record&lt;string, unknown&gt;, warnings: WarningCollector): NormalizedDocument {
796
- const version = detectVersion(doc);
797
- &nbsp;
798
- if (version === '2.0') {
799
- return normalizeSwagger2(doc, warnings);
800
- }
801
- if (version === '3.0') {
802
- return normalizeOas30(doc as unknown as NormalizedDocument, warnings);
803
- }
804
- // 3.1+ — already in target shape
805
- return doc as unknown as NormalizedDocument;
806
- }
807
- &nbsp;
808
- function detectVersion(doc: Record&lt;string, unknown&gt;): '2.0' | '3.0' | '3.1' {
809
- if (typeof doc.swagger === 'string' &amp;&amp; doc.swagger.startsWith('2')) return '2.0';
810
- <span class="missing-if-branch" title="else path not taken" >E</span>if (typeof doc.openapi === 'string') {
811
- if (doc.openapi.startsWith('3.0')) return '3.0';
812
- }
813
- return '3.1';
814
- }
815
- &nbsp;
816
- // ─── Swagger 2.0 → 3.1 ───────────────────────────────────────────────────
817
- &nbsp;
818
- function normalizeSwagger2(doc: Record&lt;string, unknown&gt;, warnings: WarningCollector): NormalizedDocument {
819
- const info = (doc.info as Record&lt;string, unknown&gt;) ?? <span class="branch-1 cbranch-no" title="branch not covered" >{ title: 'Untitled', version: '0.0.0' };</span>
820
- const basePath = (doc.basePath as string) ?? '';
821
- const schemes = (doc.schemes as string[]) ?? ['https'];
822
- const host = (doc.host as string) ?? 'localhost';
823
- const globalConsumes = (doc.consumes as string[]) ?? ['application/json'];
824
- const globalProduces = (doc.produces as string[]) ?? ['application/json'];
825
- &nbsp;
826
- const result: NormalizedDocument = {
827
- openapi: '3.1.0',
828
- info: {
829
- title: (info.title as string) ?? <span class="branch-1 cbranch-no" title="branch not covered" >'Untitled',</span>
830
- version: (info.version as string) ?? <span class="branch-1 cbranch-no" title="branch not covered" >'0.0.0',</span>
831
- description: info.description as string | undefined,
832
- },
833
- servers: [{ url: `${schemes[0]}://${host}${basePath}` }],
834
- paths: {},
835
- components: {
836
- schemas: {},
837
- securitySchemes: {},
838
- },
839
- tags: (doc.tags as NormalizedDocument['tags']) ?? [],
840
- };
841
- &nbsp;
842
- // Convert definitions → components/schemas
843
- const definitions = (doc.definitions as Record&lt;string, unknown&gt;) ?? {};
844
- for (const [name, schema] of Object.entries(definitions)) {
845
- result.components!.schemas![name] = normalizeNullable30(schema as Record&lt;string, unknown&gt;);
846
- }
847
- &nbsp;
848
- // Convert securityDefinitions → components/securitySchemes
849
- const secDefs = (doc.securityDefinitions as Record&lt;string, unknown&gt;) ?? {};
850
- for (const [name, scheme] of Object.entries(secDefs)) {
851
- result.components!.securitySchemes![name] = convertSecurityScheme2(scheme as Record&lt;string, unknown&gt;);
852
- }
853
- &nbsp;
854
- // Convert paths
855
- const paths = (doc.paths as Record&lt;string, Record&lt;string, unknown&gt;&gt;) ?? <span class="branch-1 cbranch-no" title="branch not covered" >{};</span>
856
- for (const [path, pathItem] of Object.entries(paths)) {
857
- result.paths![path] = normalizePathItem2(pathItem, globalConsumes, globalProduces, warnings);
858
- }
859
- &nbsp;
860
- // Global security
861
- <span class="missing-if-branch" title="if path not taken" >I</span>if (doc.security) {
862
- <span class="cstat-no" title="statement not covered" > result.security = doc.security as Record&lt;string, string[]&gt;[];</span>
863
- }
864
- &nbsp;
865
- return result;
866
- }
867
- &nbsp;
868
- function normalizePathItem2(
869
- pathItem: Record&lt;string, unknown&gt;,
870
- globalConsumes: string[],
871
- globalProduces: string[],
872
- warnings: WarningCollector,
873
- ): Record&lt;string, unknown&gt; {
874
- const methods = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options'];
875
- const normalized: Record&lt;string, unknown&gt; = {};
876
- &nbsp;
877
- // Path-level parameters
878
- const pathParams = (pathItem.parameters as unknown[]) ?? [];
879
- &nbsp;
880
- for (const method of methods) {
881
- const op = pathItem[method] as Record&lt;string, unknown&gt; | undefined;
882
- if (!op) continue;
883
- &nbsp;
884
- const opConsumes = (op.consumes as string[]) ?? globalConsumes;
885
- const opProduces = (op.produces as string[]) ?? globalProduces;
886
- const params = [...pathParams, ...((op.parameters as unknown[]) ?? [])];
887
- &nbsp;
888
- // Separate body params from others
889
- const nonBodyParams: unknown[] = [];
890
- let requestBody: Record&lt;string, unknown&gt; | undefined;
891
- &nbsp;
892
- for (const param of params as Record&lt;string, unknown&gt;[]) {
893
- if (param.in === 'body') {
894
- const contentType = opConsumes[0] ?? <span class="branch-1 cbranch-no" title="branch not covered" >'application/json';</span>
895
- requestBody = {
896
- description: param.description,
897
- required: param.required ?? true,
898
- content: {
899
- [contentType]: {
900
- schema: normalizeNullable30((param.schema as Record&lt;string, unknown&gt;) ?? <span class="branch-1 cbranch-no" title="branch not covered" >{})</span>,
901
- },
902
- },
903
- };
904
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="else path not taken" >E</span>} else if (param.in === 'formData') {</span>
905
- <span class="cstat-no" title="statement not covered" > warnings.info(`#/paths/${encodePathSegment(method)}`, 'formData parameters converted to multipart/form-data requestBody');</span>
906
- // Collect formData params into a schema
907
- <span class="cstat-no" title="statement not covered" > if (!requestBody) {</span>
908
- <span class="cstat-no" title="statement not covered" > requestBody = {</span>
909
- content: {
910
- 'multipart/form-data': {
911
- schema: { type: 'object', properties: {}, required: [] as string[] },
912
- },
913
- },
914
- };
915
- }
916
- const formSchema = (<span class="cstat-no" title="statement not covered" >requestBody.content as Record&lt;string, Record&lt;string, unknown&gt;&gt;)['multipart/form-data']!.schema as Record&lt;</span>
917
- string,
918
- unknown
919
- &gt;;
920
- const props = <span class="cstat-no" title="statement not covered" >formSchema.properties as Record&lt;string, unknown&gt;;</span>
921
- <span class="cstat-no" title="statement not covered" > props[param.name as string] = normalizeNullable30(param as Record&lt;string, unknown&gt;);</span>
922
- <span class="cstat-no" title="statement not covered" > if (param.required) {</span>
923
- (<span class="cstat-no" title="statement not covered" >formSchema.required as string[]).push(param.name as string);</span>
924
- }
925
- } else {
926
- // Convert param schema
927
- const normalizedParam = <span class="cstat-no" title="statement not covered" >{ ...param };</span>
928
- <span class="cstat-no" title="statement not covered" > if (param.type) {</span>
929
- <span class="cstat-no" title="statement not covered" > normalizedParam.schema = normalizeNullable30({</span>
930
- type: param.type,
931
- format: param.format,
932
- enum: param.enum,
933
- items: param.items,
934
- default: param.default,
935
- minimum: param.minimum,
936
- maximum: param.maximum,
937
- minLength: param.minLength,
938
- maxLength: param.maxLength,
939
- pattern: param.pattern,
940
- } as Record&lt;string, unknown&gt;);
941
- <span class="cstat-no" title="statement not covered" > delete normalizedParam.type;</span>
942
- <span class="cstat-no" title="statement not covered" > delete normalizedParam.format;</span>
943
- <span class="cstat-no" title="statement not covered" > delete normalizedParam.enum;</span>
944
- <span class="cstat-no" title="statement not covered" > delete normalizedParam.items;</span>
945
- }
946
- <span class="cstat-no" title="statement not covered" > nonBodyParams.push(normalizedParam);</span>
947
- }
948
- }
949
- &nbsp;
950
- // Convert responses
951
- const responses: Record&lt;string, unknown&gt; = {};
952
- const opResponses = (op.responses as Record&lt;string, Record&lt;string, unknown&gt;&gt;) ?? <span class="branch-1 cbranch-no" title="branch not covered" >{};</span>
953
- for (const [code, resp] of Object.entries(opResponses)) {
954
- const contentType = opProduces[0] ?? <span class="branch-1 cbranch-no" title="branch not covered" >'application/json';</span>
955
- const headers = convertResponseHeaders2(resp.headers as Record&lt;string, Record&lt;string, unknown&gt;&gt; | undefined);
956
- const responseEntry: Record&lt;string, unknown&gt; = {
957
- description: resp.description ?? <span class="branch-1 cbranch-no" title="branch not covered" >'',</span>
958
- };
959
- if (resp.schema) {
960
- responseEntry.content = {
961
- [contentType]: {
962
- schema: normalizeNullable30(resp.schema as Record&lt;string, unknown&gt;),
963
- },
964
- };
965
- }
966
- if (headers) {
967
- responseEntry.headers = headers;
968
- }
969
- responses[code] = responseEntry;
970
- }
971
- &nbsp;
972
- normalized[method] = {
973
- operationId: op.operationId,
974
- summary: op.summary,
975
- description: op.description,
976
- tags: op.tags,
977
- parameters: nonBodyParams.length &gt; 0 ? <span class="branch-0 cbranch-no" title="branch not covered" >nonBodyParams : u</span>ndefined,
978
- requestBody,
979
- responses,
980
- security: op.security,
981
- deprecated: op.deprecated,
982
- };
983
- }
984
- &nbsp;
985
- return normalized;
986
- }
987
- &nbsp;
988
- /**
989
- * Convert Swagger 2.0 response headers to a 3.x-shaped Header Object map.
990
- * 2.0 stores `type`/`format`/`items` inline on the header; 3.x wraps the same fields under `schema`.
991
- */
992
- function convertResponseHeaders2(
993
- headers: Record&lt;string, Record&lt;string, unknown&gt;&gt; | undefined,
994
- ): Record&lt;string, Record&lt;string, unknown&gt;&gt; | undefined {
995
- if (!headers) return undefined;
996
- const out: Record&lt;string, Record&lt;string, unknown&gt;&gt; = {};
997
- for (const [name, header] of Object.entries(headers)) {
998
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!header || typeof header !== 'object') <span class="cstat-no" title="statement not covered" >continue;</span>
999
- const { description, type, format, items, ...rest } = header;
1000
- const schema: Record&lt;string, unknown&gt; = { ...rest };
1001
- <span class="missing-if-branch" title="else path not taken" >E</span>if (type !== undefined) schema.type = type;
1002
- <span class="missing-if-branch" title="if path not taken" >I</span>if (format !== undefined) <span class="cstat-no" title="statement not covered" >schema.format = format;</span>
1003
- <span class="missing-if-branch" title="if path not taken" >I</span>if (items !== undefined) <span class="cstat-no" title="statement not covered" >schema.items = items;</span>
1004
- const normalized: Record&lt;string, unknown&gt; = {};
1005
- <span class="missing-if-branch" title="else path not taken" >E</span>if (description !== undefined) normalized.description = description;
1006
- <span class="missing-if-branch" title="else path not taken" >E</span>if (Object.keys(schema).length &gt; 0) normalized.schema = normalizeNullable30(schema);
1007
- out[name] = normalized;
1008
- }
1009
- return Object.keys(out).length &gt; 0 ? out : <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
1010
- }
1011
- &nbsp;
1012
- function convertSecurityScheme2(scheme: Record&lt;string, unknown&gt;): unknown {
1013
- const type = scheme.type as string;
1014
- if (type === 'basic') {
1015
- return { type: 'http', scheme: 'basic' };
1016
- }
1017
- <span class="missing-if-branch" title="else path not taken" >E</span>if (type === 'apiKey') {
1018
- return { type: 'apiKey', name: scheme.name, in: scheme.in };
1019
- }
1020
- <span class="cstat-no" title="statement not covered" > if (type === 'oauth2') {</span>
1021
- const flow = <span class="cstat-no" title="statement not covered" >scheme.flow as string;</span>
1022
- const flows: Record&lt;string, unknown&gt; = <span class="cstat-no" title="statement not covered" >{};</span>
1023
- <span class="cstat-no" title="statement not covered" > if (flow === 'implicit') {</span>
1024
- <span class="cstat-no" title="statement not covered" > flows.implicit = { authorizationUrl: scheme.authorizationUrl, scopes: scheme.scopes ?? {} };</span>
1025
- <span class="cstat-no" title="statement not covered" > } else if (flow === 'password') {</span>
1026
- <span class="cstat-no" title="statement not covered" > flows.password = { tokenUrl: scheme.tokenUrl, scopes: scheme.scopes ?? {} };</span>
1027
- <span class="cstat-no" title="statement not covered" > } else if (flow === 'application') {</span>
1028
- <span class="cstat-no" title="statement not covered" > flows.clientCredentials = { tokenUrl: scheme.tokenUrl, scopes: scheme.scopes ?? {} };</span>
1029
- <span class="cstat-no" title="statement not covered" > } else if (flow === 'accessCode') {</span>
1030
- <span class="cstat-no" title="statement not covered" > flows.authorizationCode = {</span>
1031
- authorizationUrl: scheme.authorizationUrl,
1032
- tokenUrl: scheme.tokenUrl,
1033
- scopes: scheme.scopes ?? {},
1034
- };
1035
- }
1036
- <span class="cstat-no" title="statement not covered" > return { type: 'oauth2', flows };</span>
1037
- }
1038
- <span class="cstat-no" title="statement not covered" > return scheme;</span>
1039
- }
1040
- &nbsp;
1041
- // ─── OpenAPI 3.0 → 3.1 ───────────────────────────────────────────────────
1042
- &nbsp;
1043
- function normalizeOas30(doc: NormalizedDocument, _warnings: WarningCollector): NormalizedDocument {
1044
- // Walk all schemas and convert `nullable: true` to type arrays
1045
- <span class="missing-if-branch" title="else path not taken" >E</span>if (doc.components?.schemas) {
1046
- for (const [name, schema] of Object.entries(doc.components.schemas)) {
1047
- doc.components.schemas[name] = normalizeNullable30(schema as Record&lt;string, unknown&gt;);
1048
- }
1049
- }
1050
- &nbsp;
1051
- // Walk paths and normalize inline schemas
1052
- <span class="missing-if-branch" title="if path not taken" >I</span>if (doc.paths) {
1053
- <span class="cstat-no" title="statement not covered" > for (const pathItem of Object.values(doc.paths)) {</span>
1054
- <span class="cstat-no" title="statement not covered" > normalizePathItemSchemas(pathItem as Record&lt;string, unknown&gt;);</span>
1055
- }
1056
- }
1057
- &nbsp;
1058
- doc.openapi = '3.1.0';
1059
- return doc;
1060
- }
1061
- &nbsp;
1062
- function <span class="fstat-no" title="function not covered" >normalizePathItemSchemas(p</span>athItem: Record&lt;string, unknown&gt;): void {
1063
- const methods = <span class="cstat-no" title="statement not covered" >['get', 'post', 'put', 'patch', 'delete', 'head', 'options'];</span>
1064
- <span class="cstat-no" title="statement not covered" > for (const method of methods) {</span>
1065
- const op = <span class="cstat-no" title="statement not covered" >pathItem[method] as Record&lt;string, unknown&gt; | undefined;</span>
1066
- <span class="cstat-no" title="statement not covered" > if (!op) <span class="cstat-no" title="statement not covered" >continue;</span></span>
1067
- &nbsp;
1068
- // Normalize parameter schemas
1069
- const params = (<span class="cstat-no" title="statement not covered" >op.parameters as Record&lt;string, unknown&gt;[]) ?? [];</span>
1070
- <span class="cstat-no" title="statement not covered" > for (const param of params) {</span>
1071
- <span class="cstat-no" title="statement not covered" > if (param.schema) {</span>
1072
- <span class="cstat-no" title="statement not covered" > param.schema = normalizeNullable30(param.schema as Record&lt;string, unknown&gt;);</span>
1073
- }
1074
- }
1075
- &nbsp;
1076
- // Normalize requestBody schemas
1077
- const reqBody = <span class="cstat-no" title="statement not covered" >op.requestBody as Record&lt;string, unknown&gt; | undefined;</span>
1078
- <span class="cstat-no" title="statement not covered" > if (reqBody?.content) {</span>
1079
- <span class="cstat-no" title="statement not covered" > for (const mediaType of Object.values(reqBody.content as Record&lt;string, Record&lt;string, unknown&gt;&gt;)) {</span>
1080
- <span class="cstat-no" title="statement not covered" > if (mediaType.schema) {</span>
1081
- <span class="cstat-no" title="statement not covered" > mediaType.schema = normalizeNullable30(mediaType.schema as Record&lt;string, unknown&gt;);</span>
1082
- }
1083
- }
1084
- }
1085
- &nbsp;
1086
- // Normalize response schemas
1087
- const responses = (<span class="cstat-no" title="statement not covered" >op.responses as Record&lt;string, Record&lt;string, unknown&gt;&gt;) ?? {};</span>
1088
- <span class="cstat-no" title="statement not covered" > for (const resp of Object.values(responses)) {</span>
1089
- <span class="cstat-no" title="statement not covered" > if (resp.content) {</span>
1090
- <span class="cstat-no" title="statement not covered" > for (const mediaType of Object.values(resp.content as Record&lt;string, Record&lt;string, unknown&gt;&gt;)) {</span>
1091
- <span class="cstat-no" title="statement not covered" > if (mediaType.schema) {</span>
1092
- <span class="cstat-no" title="statement not covered" > mediaType.schema = normalizeNullable30(mediaType.schema as Record&lt;string, unknown&gt;);</span>
1093
- }
1094
- }
1095
- }
1096
- }
1097
- }
1098
- }
1099
- &nbsp;
1100
- /**
1101
- * Recursively converts OAS 3.0 `nullable: true` to OAS 3.1 `type: [T, "null"]`.
1102
- * Also normalizes nested schemas (properties, items, allOf, etc.).
1103
- */
1104
- function normalizeNullable30(schema: Record&lt;string, unknown&gt;): Record&lt;string, unknown&gt; {
1105
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!schema || typeof schema !== 'object') <span class="cstat-no" title="statement not covered" >return schema;</span>
1106
- &nbsp;
1107
- const result = { ...schema };
1108
- &nbsp;
1109
- // Convert nullable: true → type array with null
1110
- if (result.nullable === true &amp;&amp; typeof result.type === 'string') {
1111
- result.type = [result.type, 'null'];
1112
- delete result.nullable;
1113
- }
1114
- &nbsp;
1115
- // Convert $ref alongside other properties (OAS 3.0 $ref with siblings was invalid,
1116
- // but OAS 3.1 allows it — no conversion needed, just keep walking)
1117
- &nbsp;
1118
- // Recurse into nested schemas
1119
- if (result.properties &amp;&amp; typeof result.properties === 'object') {
1120
- const props = result.properties as Record&lt;string, Record&lt;string, unknown&gt;&gt;;
1121
- for (const [key, val] of Object.entries(props)) {
1122
- props[key] = normalizeNullable30(val);
1123
- }
1124
- }
1125
- if (result.items &amp;&amp; typeof result.items === 'object' &amp;&amp; !Array.isArray(result.items)) {
1126
- result.items = normalizeNullable30(result.items as Record&lt;string, unknown&gt;);
1127
- }
1128
- <span class="missing-if-branch" title="if path not taken" >I</span>if (result.additionalProperties &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >typeof result.additionalProperties === 'object') {</span>
1129
- <span class="cstat-no" title="statement not covered" > result.additionalProperties = normalizeNullable30(result.additionalProperties as Record&lt;string, unknown&gt;);</span>
1130
- }
1131
- for (const combiner of ['allOf', 'oneOf', 'anyOf'] as const) {
1132
- <span class="missing-if-branch" title="if path not taken" >I</span>if (Array.isArray(result[combiner])) {
1133
- <span class="cstat-no" title="statement not covered" > result[combiner] = (result[combiner] as Record&lt;string, unknown&gt;[]).map(normalizeNullable30);</span>
1134
- }
1135
- }
1136
- &nbsp;
1137
- return result;
1138
- }
1139
- &nbsp;
1140
- function <span class="fstat-no" title="function not covered" >encodePathSegment(s</span>: string): string {
1141
- <span class="cstat-no" title="statement not covered" > return s.replace(/~/g, '~0').replace(/\//g, '~1');</span>
1142
- }
1143
- &nbsp;</pre></td></tr></table></pre>
1144
-
1145
- <div class='push'></div><!-- for sticky footer -->
1146
- </div><!-- /wrapper -->
1147
- <div class='footer quiet pad2 space-top1 center small'>
1148
- Code coverage generated by
1149
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1150
- at 2026-06-12T19:14:44.390Z
1151
- </div>
1152
- <script src="../prettify.js"></script>
1153
- <script>
1154
- window.onload = function () {
1155
- prettyPrint();
1156
- };
1157
- </script>
1158
- <script src="../sorter.js"></script>
1159
- <script src="../block-navigation.js"></script>
1160
- </body>
1161
- </html>
1162
-