@contractkit/plugin-bruno 1.5.7 → 1.5.9

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,709 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/index.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> index.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">26.78% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>15/56</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">40% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>14/35</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">20% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>2/10</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">25.49% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>13/51</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line low'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
275
- <span class="cline-any cline-neutral">&nbsp;</span>
276
- <span class="cline-any cline-neutral">&nbsp;</span>
277
- <span class="cline-any cline-neutral">&nbsp;</span>
278
- <span class="cline-any cline-neutral">&nbsp;</span>
279
- <span class="cline-any cline-neutral">&nbsp;</span>
280
- <span class="cline-any cline-neutral">&nbsp;</span>
281
- <span class="cline-any cline-neutral">&nbsp;</span>
282
- <span class="cline-any cline-yes">1x</span>
283
- <span class="cline-any cline-neutral">&nbsp;</span>
284
- <span class="cline-any cline-neutral">&nbsp;</span>
285
- <span class="cline-any cline-neutral">&nbsp;</span>
286
- <span class="cline-any cline-neutral">&nbsp;</span>
287
- <span class="cline-any cline-neutral">&nbsp;</span>
288
- <span class="cline-any cline-neutral">&nbsp;</span>
289
- <span class="cline-any cline-neutral">&nbsp;</span>
290
- <span class="cline-any cline-neutral">&nbsp;</span>
291
- <span class="cline-any cline-neutral">&nbsp;</span>
292
- <span class="cline-any cline-neutral">&nbsp;</span>
293
- <span class="cline-any cline-neutral">&nbsp;</span>
294
- <span class="cline-any cline-neutral">&nbsp;</span>
295
- <span class="cline-any cline-neutral">&nbsp;</span>
296
- <span class="cline-any cline-neutral">&nbsp;</span>
297
- <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-neutral">&nbsp;</span>
299
- <span class="cline-any cline-neutral">&nbsp;</span>
300
- <span class="cline-any cline-neutral">&nbsp;</span>
301
- <span class="cline-any cline-neutral">&nbsp;</span>
302
- <span class="cline-any cline-neutral">&nbsp;</span>
303
- <span class="cline-any cline-neutral">&nbsp;</span>
304
- <span class="cline-any cline-neutral">&nbsp;</span>
305
- <span class="cline-any cline-neutral">&nbsp;</span>
306
- <span class="cline-any cline-neutral">&nbsp;</span>
307
- <span class="cline-any cline-neutral">&nbsp;</span>
308
- <span class="cline-any cline-neutral">&nbsp;</span>
309
- <span class="cline-any cline-neutral">&nbsp;</span>
310
- <span class="cline-any cline-neutral">&nbsp;</span>
311
- <span class="cline-any cline-neutral">&nbsp;</span>
312
- <span class="cline-any cline-neutral">&nbsp;</span>
313
- <span class="cline-any cline-neutral">&nbsp;</span>
314
- <span class="cline-any cline-neutral">&nbsp;</span>
315
- <span class="cline-any cline-neutral">&nbsp;</span>
316
- <span class="cline-any cline-neutral">&nbsp;</span>
317
- <span class="cline-any cline-neutral">&nbsp;</span>
318
- <span class="cline-any cline-neutral">&nbsp;</span>
319
- <span class="cline-any cline-neutral">&nbsp;</span>
320
- <span class="cline-any cline-neutral">&nbsp;</span>
321
- <span class="cline-any cline-neutral">&nbsp;</span>
322
- <span class="cline-any cline-neutral">&nbsp;</span>
323
- <span class="cline-any cline-neutral">&nbsp;</span>
324
- <span class="cline-any cline-neutral">&nbsp;</span>
325
- <span class="cline-any cline-yes">6x</span>
326
- <span class="cline-any cline-yes">2x</span>
327
- <span class="cline-any cline-neutral">&nbsp;</span>
328
- <span class="cline-any cline-yes">4x</span>
329
- <span class="cline-any cline-yes">4x</span>
330
- <span class="cline-any cline-yes">4x</span>
331
- <span class="cline-any cline-yes">3x</span>
332
- <span class="cline-any cline-neutral">&nbsp;</span>
333
- <span class="cline-any cline-yes">1x</span>
334
- <span class="cline-any cline-neutral">&nbsp;</span>
335
- <span class="cline-any cline-neutral">&nbsp;</span>
336
- <span class="cline-any cline-yes">4x</span>
337
- <span class="cline-any cline-neutral">&nbsp;</span>
338
- <span class="cline-any cline-neutral">&nbsp;</span>
339
- <span class="cline-any cline-neutral">&nbsp;</span>
340
- <span class="cline-any cline-yes">3x</span>
341
- <span class="cline-any cline-yes">3x</span>
342
- <span class="cline-any cline-yes">2x</span>
343
- <span class="cline-any cline-neutral">&nbsp;</span>
344
- <span class="cline-any cline-neutral">&nbsp;</span>
345
- <span class="cline-any cline-yes">1x</span>
346
- <span class="cline-any cline-neutral">&nbsp;</span>
347
- <span class="cline-any cline-neutral">&nbsp;</span>
348
- <span class="cline-any cline-neutral">&nbsp;</span>
349
- <span class="cline-any cline-no">&nbsp;</span>
350
- <span class="cline-any cline-no">&nbsp;</span>
351
- <span class="cline-any cline-neutral">&nbsp;</span>
352
- <span class="cline-any cline-neutral">&nbsp;</span>
353
- <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-neutral">&nbsp;</span>
355
- <span class="cline-any cline-neutral">&nbsp;</span>
356
- <span class="cline-any cline-neutral">&nbsp;</span>
357
- <span class="cline-any cline-neutral">&nbsp;</span>
358
- <span class="cline-any cline-neutral">&nbsp;</span>
359
- <span class="cline-any cline-neutral">&nbsp;</span>
360
- <span class="cline-any cline-neutral">&nbsp;</span>
361
- <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-neutral">&nbsp;</span>
363
- <span class="cline-any cline-neutral">&nbsp;</span>
364
- <span class="cline-any cline-neutral">&nbsp;</span>
365
- <span class="cline-any cline-neutral">&nbsp;</span>
366
- <span class="cline-any cline-neutral">&nbsp;</span>
367
- <span class="cline-any cline-neutral">&nbsp;</span>
368
- <span class="cline-any cline-neutral">&nbsp;</span>
369
- <span class="cline-any cline-neutral">&nbsp;</span>
370
- <span class="cline-any cline-neutral">&nbsp;</span>
371
- <span class="cline-any cline-neutral">&nbsp;</span>
372
- <span class="cline-any cline-neutral">&nbsp;</span>
373
- <span class="cline-any cline-no">&nbsp;</span>
374
- <span class="cline-any cline-neutral">&nbsp;</span>
375
- <span class="cline-any cline-neutral">&nbsp;</span>
376
- <span class="cline-any cline-neutral">&nbsp;</span>
377
- <span class="cline-any cline-neutral">&nbsp;</span>
378
- <span class="cline-any cline-neutral">&nbsp;</span>
379
- <span class="cline-any cline-no">&nbsp;</span>
380
- <span class="cline-any cline-neutral">&nbsp;</span>
381
- <span class="cline-any cline-neutral">&nbsp;</span>
382
- <span class="cline-any cline-neutral">&nbsp;</span>
383
- <span class="cline-any cline-neutral">&nbsp;</span>
384
- <span class="cline-any cline-neutral">&nbsp;</span>
385
- <span class="cline-any cline-neutral">&nbsp;</span>
386
- <span class="cline-any cline-neutral">&nbsp;</span>
387
- <span class="cline-any cline-neutral">&nbsp;</span>
388
- <span class="cline-any cline-neutral">&nbsp;</span>
389
- <span class="cline-any cline-neutral">&nbsp;</span>
390
- <span class="cline-any cline-neutral">&nbsp;</span>
391
- <span class="cline-any cline-neutral">&nbsp;</span>
392
- <span class="cline-any cline-neutral">&nbsp;</span>
393
- <span class="cline-any cline-neutral">&nbsp;</span>
394
- <span class="cline-any cline-neutral">&nbsp;</span>
395
- <span class="cline-any cline-neutral">&nbsp;</span>
396
- <span class="cline-any cline-neutral">&nbsp;</span>
397
- <span class="cline-any cline-neutral">&nbsp;</span>
398
- <span class="cline-any cline-neutral">&nbsp;</span>
399
- <span class="cline-any cline-no">&nbsp;</span>
400
- <span class="cline-any cline-no">&nbsp;</span>
401
- <span class="cline-any cline-no">&nbsp;</span>
402
- <span class="cline-any cline-no">&nbsp;</span>
403
- <span class="cline-any cline-neutral">&nbsp;</span>
404
- <span class="cline-any cline-no">&nbsp;</span>
405
- <span class="cline-any cline-neutral">&nbsp;</span>
406
- <span class="cline-any cline-no">&nbsp;</span>
407
- <span class="cline-any cline-neutral">&nbsp;</span>
408
- <span class="cline-any cline-neutral">&nbsp;</span>
409
- <span class="cline-any cline-neutral">&nbsp;</span>
410
- <span class="cline-any cline-neutral">&nbsp;</span>
411
- <span class="cline-any cline-neutral">&nbsp;</span>
412
- <span class="cline-any cline-neutral">&nbsp;</span>
413
- <span class="cline-any cline-neutral">&nbsp;</span>
414
- <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-no">&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-no">&nbsp;</span>
421
- <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-no">&nbsp;</span>
423
- <span class="cline-any cline-no">&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-no">&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-no">&nbsp;</span>
433
- <span class="cline-any cline-no">&nbsp;</span>
434
- <span class="cline-any cline-no">&nbsp;</span>
435
- <span class="cline-any cline-neutral">&nbsp;</span>
436
- <span class="cline-any cline-no">&nbsp;</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-neutral">&nbsp;</span>
439
- <span class="cline-any cline-neutral">&nbsp;</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-no">&nbsp;</span>
443
- <span class="cline-any cline-no">&nbsp;</span>
444
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
457
- <span class="cline-any cline-no">&nbsp;</span>
458
- <span class="cline-any cline-no">&nbsp;</span>
459
- <span class="cline-any cline-no">&nbsp;</span>
460
- <span class="cline-any cline-no">&nbsp;</span>
461
- <span class="cline-any cline-no">&nbsp;</span>
462
- <span class="cline-any cline-no">&nbsp;</span>
463
- <span class="cline-any cline-neutral">&nbsp;</span>
464
- <span class="cline-any cline-neutral">&nbsp;</span>
465
- <span class="cline-any cline-no">&nbsp;</span>
466
- <span class="cline-any cline-no">&nbsp;</span>
467
- <span class="cline-any cline-no">&nbsp;</span>
468
- <span class="cline-any cline-no">&nbsp;</span>
469
- <span class="cline-any cline-no">&nbsp;</span>
470
- <span class="cline-any cline-no">&nbsp;</span>
471
- <span class="cline-any cline-no">&nbsp;</span>
472
- <span class="cline-any cline-neutral">&nbsp;</span>
473
- <span class="cline-any cline-no">&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-no">&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></td><td class="text"><pre class="prettyprint lang-js">import { resolve, basename, dirname } from 'node:path';
483
- import { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync, readdirSync, rmdirSync } from 'node:fs';
484
- import { generateOpenCollectionIncremental, parseManifest, emptyManifest } from './codegen-bruno.js';
485
- import type { BrunoSecurityScheme } from './codegen-bruno.js';
486
- import { serializeIncrementalManifest } from '@contractkit/core';
487
- import type { ContractKitPlugin, PluginContext, PluginValue, OpRootNode, ContractRootNode, IncrementalManifest } from '@contractkit/core';
488
- &nbsp;
489
- /** Filename for the persisted Bruno manifest under the CLI cache directory. */
490
- const CACHE_MANIFEST_FILENAME = 'bruno-manifest.json';
491
- &nbsp;
492
- /** Configuration accepted by the Bruno plugin, both via `contractkit.config.json` and `createBrunoPlugin`. */
493
- export interface BrunoPluginConfig {
494
- baseDir?: string;
495
- output?: string;
496
- collectionName?: string;
497
- /**
498
- * When true (default), example values use Bruno's faker templates
499
- * (`{{$randomUUID}}`, `{{$randomEmail}}`, etc.) so each send produces
500
- * fresh data. Set to false for deterministic placeholders.
501
- */
502
- randomExamples?: boolean;
503
- /**
504
- * Whether to generate request files for operations marked `internal`. Defaults to
505
- * `true` — Bruno collections are typically used by the team that owns the API and
506
- * benefit from full coverage. Set to `false` to omit internal ops.
507
- */
508
- includeInternal?: boolean;
509
- /**
510
- * Map of environment name → variables. Each entry produces a
511
- * `environments/&lt;name&gt;.yml` file. When omitted, a default `local.yml` is
512
- * emitted with `baseUrl=http://localhost:3000` and any auth env-var
513
- * placeholders. When provided, the default is replaced entirely; include
514
- * auth variables (e.g. `token`) explicitly if you need them.
515
- */
516
- environments?: Record&lt;string, Record&lt;string, unknown&gt;&gt;;
517
- }
518
- &nbsp;
519
- /** Full plugin options shape read from `ctx.options` — extends {@link BrunoPluginConfig} with the `auth` block. */
520
- export interface BrunoPluginOptions extends BrunoPluginConfig {
521
- auth?: { defaultScheme: string; schemes?: Record&lt;string, BrunoSecurityScheme&gt; };
522
- }
523
- &nbsp;
524
- // ─── Default export: loaded via plugins array, reads config from ctx.options ─
525
- &nbsp;
526
- /**
527
- * Validates a `plugins.bruno` extension entry on an operation. The expected shape is
528
- * `{ template?: string }`, where `template` is a YAML fragment to deep-merge into the
529
- * generated request file (typically a `file://...` URL whose contents have already
530
- * been loaded by the CLI resolver).
531
- */
532
- export function validateBrunoExtension(value: PluginValue): { errors?: string[] } | void {
533
- if (value === null || typeof value !== 'object' || Array.isArray(value)) {
534
- return { errors: [`expected an object, got ${describe(value)}`] };
535
- }
536
- const errors: string[] = [];
537
- for (const [key, val] of Object.entries(value)) {
538
- if (key === 'template') {
539
- if (typeof val !== 'string') errors.push(`'template' must be a string, got ${describe(val)}`);
540
- } else {
541
- errors.push(`unknown field '${key}' (allowed: template)`);
542
- }
543
- }
544
- return errors.length ? { errors } : undefined;
545
- }
546
- &nbsp;
547
- function describe(value: PluginValue): string {
548
- <span class="missing-if-branch" title="if path not taken" >I</span>if (value === null) <span class="cstat-no" title="statement not covered" >return 'null';</span>
549
- if (Array.isArray(value)) return 'array';
550
- return typeof value;
551
- }
552
- &nbsp;
553
- const plugin: ContractKitPlugin = {
554
- name: 'bruno',
555
- validateExtension: validateBrunoExtension,
556
- async <span class="fstat-no" title="function not covered" >generateTargets({</span> opRoots, contractRoots }, ctx) {
557
- const { auth, ...config } = <span class="cstat-no" title="statement not covered" >ctx.options </span>as BrunoPluginOptions;
558
- <span class="cstat-no" title="statement not covered" > await runBrunoCodegen(opRoots, contractRoots, ctx, config, auth);</span>
559
- },
560
- };
561
- &nbsp;
562
- export default plugin;
563
- &nbsp;
564
- // ─── Factory: for programmatic use with explicit config ────────────────────
565
- &nbsp;
566
- /**
567
- * Creates a Bruno plugin instance with explicit configuration, for programmatic use.
568
- *
569
- * Prefer the default export when loading via `contractkit.config.json`. Use this
570
- * factory when constructing the plugin in code (e.g. in tests or custom build scripts).
571
- *
572
- * @param config - Plugin configuration (output paths and feature flags).
573
- * @param rootDir - Absolute path used to resolve relative paths in `config`.
574
- * @param auth - Optional auth scheme configuration mirroring the `auth` key in plugin options.
575
- */
576
- export function <span class="fstat-no" title="function not covered" >createBrunoPlugin(</span>
577
- config: BrunoPluginConfig,
578
- rootDir: string,
579
- auth?: { defaultScheme: string; schemes?: Record&lt;string, BrunoSecurityScheme&gt; },
580
- ): ContractKitPlugin {
581
- <span class="cstat-no" title="statement not covered" > return {</span>
582
- name: 'bruno',
583
- validateExtension: validateBrunoExtension,
584
- async <span class="fstat-no" title="function not covered" >generateTargets({</span> opRoots, contractRoots }, ctx) {
585
- // The factory captures rootDir at creation time; ctx.rootDir may differ when the
586
- // plugin is loaded via a config file, so respect the explicit one passed in here.
587
- <span class="cstat-no" title="statement not covered" > await runBrunoCodegen(opRoots, contractRoots, { ...ctx, rootDir }, config, auth);</span>
588
- },
589
- };
590
- }
591
- &nbsp;
592
- /**
593
- * Shared orchestration used by both the default export and {@link createBrunoPlugin}.
594
- *
595
- * Reads the prior manifest, runs the cache-aware codegen, deletes any files that
596
- * are no longer produced, and emits the changed files plus the new manifest. When
597
- * `ctx.cacheEnabled` is `false` (e.g. `--force`) the prior manifest is ignored so
598
- * every op regenerates.
599
- */
600
- async function <span class="fstat-no" title="function not covered" >runBrunoCodegen(</span>
601
- opRoots: OpRootNode[],
602
- contractRoots: ContractRootNode[],
603
- ctx: PluginContext,
604
- config: BrunoPluginConfig,
605
- auth: BrunoPluginOptions['auth'],
606
- ): Promise&lt;void&gt; {
607
- const base = <span class="cstat-no" title="statement not covered" >config.baseDir ? resolve(ctx.rootDir, config.baseDir) : ctx.rootDir;</span>
608
- const <span class="cstat-no" title="statement not covered" >outDir = resolve(base, config.output ?? 'bruno-collection');</span>
609
- const collectionName = <span class="cstat-no" title="statement not covered" >config.collectionName ?? basename(ctx.rootDir);</span>
610
- const <span class="cstat-no" title="statement not covered" >manifestPath = resolve(ctx.cacheDir, CACHE_MANIFEST_FILENAME);</span>
611
- &nbsp;
612
- const prevManifest: IncrementalManifest = <span class="cstat-no" title="statement not covered" >ctx.cacheEnabled ? readManifest(manifestPath) : emptyManifest();</span>
613
- &nbsp;
614
- const <span class="cstat-no" title="statement not covered" >result = generateOpenCollectionIncremental(</span>
615
- opRoots,
616
- {
617
- collectionName,
618
- contractRoots,
619
- auth,
620
- randomExamples: config.randomExamples ?? true,
621
- includeInternal: config.includeInternal,
622
- environments: config.environments,
623
- },
624
- prevManifest,
625
- <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > relPath =&gt; e</span>xistsSync(resolve(outDir, relPath)),</span>
626
- );
627
- &nbsp;
628
- <span class="cstat-no" title="statement not covered" > deleteStalePaths(outDir, result.deletedPaths);</span>
629
- &nbsp;
630
- <span class="cstat-no" title="statement not covered" > for (const { relativePath, content } of result.filesToWrite) {</span>
631
- <span class="cstat-no" title="statement not covered" > ctx.emitFile(resolve(outDir, relativePath), content);</span>
632
- }
633
- &nbsp;
634
- // Persist the manifest under the CLI cache dir, separate from the bruno output.
635
- <span class="cstat-no" title="statement not covered" > writeManifest(manifestPath, result.manifest);</span>
636
- }
637
- &nbsp;
638
- /** Read the previous run's manifest from `manifestPath`. Returns an empty manifest when missing or unreadable. */
639
- function <span class="fstat-no" title="function not covered" >readManifest(m</span>anifestPath: string): IncrementalManifest {
640
- <span class="cstat-no" title="statement not covered" > if (!existsSync(manifestPath)) <span class="cstat-no" title="statement not covered" >return emptyManifest();</span></span>
641
- <span class="cstat-no" title="statement not covered" > try {</span>
642
- <span class="cstat-no" title="statement not covered" > return parseManifest(readFileSync(manifestPath, 'utf-8'));</span>
643
- } catch {
644
- <span class="cstat-no" title="statement not covered" > return emptyManifest();</span>
645
- }
646
- }
647
- &nbsp;
648
- /** Write the manifest to `manifestPath`. Creates parent dirs as needed. Errors are swallowed so a broken cache never blocks the build. */
649
- function <span class="fstat-no" title="function not covered" >writeManifest(m</span>anifestPath: string, manifest: IncrementalManifest): void {
650
- <span class="cstat-no" title="statement not covered" > try {</span>
651
- <span class="cstat-no" title="statement not covered" > mkdirSync(dirname(manifestPath), { recursive: true });</span>
652
- <span class="cstat-no" title="statement not covered" > writeFileSync(manifestPath, serializeIncrementalManifest(manifest), 'utf-8');</span>
653
- } catch {
654
- // best-effort
655
- }
656
- }
657
- &nbsp;
658
- /**
659
- * Delete files that the previous run tracked but the current run doesn't produce, then
660
- * walk back up each affected directory and remove it if it's now empty (stopping at outDir).
661
- * Anything user-added survives because the manifest only ever lists plugin-generated paths.
662
- */
663
- function <span class="fstat-no" title="function not covered" >deleteStalePaths(o</span>utDir: string, relPaths: string[]): void {
664
- <span class="cstat-no" title="statement not covered" > if (relPaths.length === 0) <span class="cstat-no" title="statement not covered" >return;</span></span>
665
- const removedDirs = <span class="cstat-no" title="statement not covered" >new Set&lt;string&gt;();</span>
666
- <span class="cstat-no" title="statement not covered" > for (const rel of relPaths) {</span>
667
- const <span class="cstat-no" title="statement not covered" >abs = resolve(outDir, rel);</span>
668
- <span class="cstat-no" title="statement not covered" > if (existsSync(abs)) {</span>
669
- <span class="cstat-no" title="statement not covered" > rmSync(abs, { force: true });</span>
670
- <span class="cstat-no" title="statement not covered" > removedDirs.add(dirname(abs));</span>
671
- }
672
- }
673
- <span class="cstat-no" title="statement not covered" > for (const dir of removedDirs) {</span>
674
- let current = <span class="cstat-no" title="statement not covered" >dir;</span>
675
- <span class="cstat-no" title="statement not covered" > while (current.startsWith(outDir) &amp;&amp; current !== outDir) {</span>
676
- <span class="cstat-no" title="statement not covered" > try {</span>
677
- <span class="cstat-no" title="statement not covered" > if (readdirSync(current).length === 0) {</span>
678
- <span class="cstat-no" title="statement not covered" > rmdirSync(current);</span>
679
- <span class="cstat-no" title="statement not covered" > current = dirname(current);</span>
680
- } else {
681
- <span class="cstat-no" title="statement not covered" > break;</span>
682
- }
683
- } catch {
684
- <span class="cstat-no" title="statement not covered" > break;</span>
685
- }
686
- }
687
- }
688
- }
689
- &nbsp;
690
- &nbsp;</pre></td></tr></table></pre>
691
-
692
- <div class='push'></div><!-- for sticky footer -->
693
- </div><!-- /wrapper -->
694
- <div class='footer quiet pad2 space-top1 center small'>
695
- Code coverage generated by
696
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
697
- at 2026-06-16T15:55:44.321Z
698
- </div>
699
- <script src="../prettify.js"></script>
700
- <script>
701
- window.onload = function () {
702
- prettyPrint();
703
- };
704
- </script>
705
- <script src="../sorter.js"></script>
706
- <script src="../block-navigation.js"></script>
707
- </body>
708
- </html>
709
-