@contractkit/prettier-plugin 0.12.0 → 0.12.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,532 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for print-type.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> print-type.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">47.12% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>41/87</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">46.87% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>45/96</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">45.45% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>5/11</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">48.61% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>35/72</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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
216
- <span class="cline-any cline-neutral">&nbsp;</span>
217
- <span class="cline-any cline-neutral">&nbsp;</span>
218
- <span class="cline-any cline-neutral">&nbsp;</span>
219
- <span class="cline-any cline-neutral">&nbsp;</span>
220
- <span class="cline-any cline-neutral">&nbsp;</span>
221
- <span class="cline-any cline-neutral">&nbsp;</span>
222
- <span class="cline-any cline-yes">36x</span>
223
- <span class="cline-any cline-neutral">&nbsp;</span>
224
- <span class="cline-any cline-yes">23x</span>
225
- <span class="cline-any cline-yes">23x</span>
226
- <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-no">&nbsp;</span>
228
- <span class="cline-any cline-no">&nbsp;</span>
229
- <span class="cline-any cline-neutral">&nbsp;</span>
230
- <span class="cline-any cline-yes">23x</span>
231
- <span class="cline-any cline-yes">23x</span>
232
- <span class="cline-any cline-yes">23x</span>
233
- <span class="cline-any cline-yes">23x</span>
234
- <span class="cline-any cline-yes">23x</span>
235
- <span class="cline-any cline-neutral">&nbsp;</span>
236
- <span class="cline-any cline-neutral">&nbsp;</span>
237
- <span class="cline-any cline-no">&nbsp;</span>
238
- <span class="cline-any cline-no">&nbsp;</span>
239
- <span class="cline-any cline-no">&nbsp;</span>
240
- <span class="cline-any cline-no">&nbsp;</span>
241
- <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-neutral">&nbsp;</span>
243
- <span class="cline-any cline-no">&nbsp;</span>
244
- <span class="cline-any cline-neutral">&nbsp;</span>
245
- <span class="cline-any cline-no">&nbsp;</span>
246
- <span class="cline-any cline-neutral">&nbsp;</span>
247
- <span class="cline-any cline-yes">3x</span>
248
- <span class="cline-any cline-neutral">&nbsp;</span>
249
- <span class="cline-any cline-no">&nbsp;</span>
250
- <span class="cline-any cline-neutral">&nbsp;</span>
251
- <span class="cline-any cline-no">&nbsp;</span>
252
- <span class="cline-any cline-neutral">&nbsp;</span>
253
- <span class="cline-any cline-no">&nbsp;</span>
254
- <span class="cline-any cline-neutral">&nbsp;</span>
255
- <span class="cline-any cline-no">&nbsp;</span>
256
- <span class="cline-any cline-neutral">&nbsp;</span>
257
- <span class="cline-any cline-yes">10x</span>
258
- <span class="cline-any cline-neutral">&nbsp;</span>
259
- <span class="cline-any cline-no">&nbsp;</span>
260
- <span class="cline-any cline-neutral">&nbsp;</span>
261
- <span class="cline-any cline-no">&nbsp;</span>
262
- <span class="cline-any cline-neutral">&nbsp;</span>
263
- <span class="cline-any cline-neutral">&nbsp;</span>
264
- <span class="cline-any cline-neutral">&nbsp;</span>
265
- <span class="cline-any cline-neutral">&nbsp;</span>
266
- <span class="cline-any cline-neutral">&nbsp;</span>
267
- <span class="cline-any cline-no">&nbsp;</span>
268
- <span class="cline-any cline-no">&nbsp;</span>
269
- <span class="cline-any cline-no">&nbsp;</span>
270
- <span class="cline-any cline-no">&nbsp;</span>
271
- <span class="cline-any cline-no">&nbsp;</span>
272
- <span class="cline-any cline-no">&nbsp;</span>
273
- <span class="cline-any cline-no">&nbsp;</span>
274
- <span class="cline-any cline-neutral">&nbsp;</span>
275
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
281
- <span class="cline-any cline-no">&nbsp;</span>
282
- <span class="cline-any cline-neutral">&nbsp;</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-yes">6x</span>
289
- <span class="cline-any cline-yes">6x</span>
290
- <span class="cline-any cline-yes">6x</span>
291
- <span class="cline-any cline-yes">6x</span>
292
- <span class="cline-any cline-yes">6x</span>
293
- <span class="cline-any cline-yes">6x</span>
294
- <span class="cline-any cline-yes">6x</span>
295
- <span class="cline-any cline-yes">6x</span>
296
- <span class="cline-any cline-yes">6x</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-yes">6x</span>
301
- <span class="cline-any cline-yes">6x</span>
302
- <span class="cline-any cline-yes">6x</span>
303
- <span class="cline-any cline-no">&nbsp;</span>
304
- <span class="cline-any cline-no">&nbsp;</span>
305
- <span class="cline-any cline-no">&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-no">&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-yes">6x</span>
313
- <span class="cline-any cline-yes">6x</span>
314
- <span class="cline-any cline-yes">6x</span>
315
- <span class="cline-any cline-yes">6x</span>
316
- <span class="cline-any cline-no">&nbsp;</span>
317
- <span class="cline-any cline-no">&nbsp;</span>
318
- <span class="cline-any cline-neutral">&nbsp;</span>
319
- <span class="cline-any cline-yes">6x</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-no">&nbsp;</span>
324
- <span class="cline-any cline-no">&nbsp;</span>
325
- <span class="cline-any cline-neutral">&nbsp;</span>
326
- <span class="cline-any cline-neutral">&nbsp;</span>
327
- <span class="cline-any cline-neutral">&nbsp;</span>
328
- <span class="cline-any cline-neutral">&nbsp;</span>
329
- <span class="cline-any cline-neutral">&nbsp;</span>
330
- <span class="cline-any cline-neutral">&nbsp;</span>
331
- <span class="cline-any cline-yes">9x</span>
332
- <span class="cline-any cline-yes">2x</span>
333
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
337
- <span class="cline-any cline-yes">5x</span>
338
- <span class="cline-any cline-neutral">&nbsp;</span>
339
- <span class="cline-any cline-yes">2x</span>
340
- <span class="cline-any cline-yes">1x</span>
341
- <span class="cline-any cline-neutral">&nbsp;</span>
342
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</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-neutral">&nbsp;</span>
350
- <span class="cline-any cline-neutral">&nbsp;</span>
351
- <span class="cline-any cline-neutral">&nbsp;</span>
352
- <span class="cline-any cline-yes">6x</span>
353
- <span class="cline-any cline-no">&nbsp;</span>
354
- <span class="cline-any cline-neutral">&nbsp;</span>
355
- <span class="cline-any cline-yes">6x</span>
356
- <span class="cline-any cline-no">&nbsp;</span>
357
- <span class="cline-any cline-no">&nbsp;</span>
358
- <span class="cline-any cline-no">&nbsp;</span>
359
- <span class="cline-any cline-no">&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-yes">6x</span>
363
- <span class="cline-any cline-neutral">&nbsp;</span>
364
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { ContractTypeNode, FieldNode, InlineObjectTypeNode } from '@contractkit/core';
365
- import { INDENT } from './indent.js';
366
- &nbsp;
367
- // ─── Type expression printer ────────────────────────────────────────────────
368
- &nbsp;
369
- /** Render a `ContractTypeNode` back to its `.ck` source string. */
370
- export function printType(type: ContractTypeNode): string {
371
- switch (type.kind) {
372
- case 'scalar': {
373
- const constraints: string[] = [];
374
- <span class="missing-if-branch" title="if path not taken" >I</span>if (type.format !== undefined) {
375
- // Print unquoted when format contains only safe chars; quote otherwise
376
- const fmt = <span class="cstat-no" title="statement not covered" >type.format;</span>
377
- <span class="cstat-no" title="statement not covered" > constraints.push(/^[a-zA-Z0-9\-.:/]+$/.test(fmt) ? fmt : `"${fmt}"`);</span>
378
- }
379
- if (type.min !== undefined) constraints.push(`min=${type.min}`);
380
- if (type.max !== undefined) constraints.push(`max=${type.max}`);
381
- <span class="missing-if-branch" title="if path not taken" >I</span>if (type.len !== undefined) <span class="cstat-no" title="statement not covered" >constraints.push(`len=${type.len}`</span>);
382
- if (type.regex !== undefined) constraints.push(`regex=/${type.regex}/`);
383
- return constraints.length &gt; 0 ? `${type.name}(${constraints.join(', ')})` : type.name;
384
- }
385
- <span class="branch-1 cbranch-no" title="branch not covered" > case 'array': {</span>
386
- const args: string[] = <span class="cstat-no" title="statement not covered" >[printType(type.item)];</span>
387
- <span class="cstat-no" title="statement not covered" > if (type.min !== undefined) <span class="cstat-no" title="statement not covered" >args.push(`min=${type.min}`</span></span>);
388
- <span class="cstat-no" title="statement not covered" > if (type.max !== undefined) <span class="cstat-no" title="statement not covered" >args.push(`max=${type.max}`</span></span>);
389
- <span class="cstat-no" title="statement not covered" > return `array(${args.join(', ')})`;</span>
390
- }
391
- <span class="branch-2 cbranch-no" title="branch not covered" > case 'tuple':</span>
392
- <span class="cstat-no" title="statement not covered" > return `tuple(${type.items.map(printType).join(', ')})`;</span>
393
- <span class="branch-3 cbranch-no" title="branch not covered" > case 'record':</span>
394
- <span class="cstat-no" title="statement not covered" > return `record(${printType(type.key)}, ${printType(type.value)})`;</span>
395
- case 'enum':
396
- return `enum(${type.values.map(formatEnumValue).join(', ')})`;
397
- <span class="branch-5 cbranch-no" title="branch not covered" > case 'literal':</span>
398
- <span class="cstat-no" title="statement not covered" > return typeof type.value === 'string' ? `literal("${type.value}")` : `literal(${type.value})`;</span>
399
- <span class="branch-6 cbranch-no" title="branch not covered" > case 'union':</span>
400
- <span class="cstat-no" title="statement not covered" > return type.members.map(printType).join(' | ');</span>
401
- <span class="branch-7 cbranch-no" title="branch not covered" > case 'discriminatedUnion':</span>
402
- <span class="cstat-no" title="statement not covered" > return `discriminated(by=${type.discriminator}, ${type.members.map(printType).join(' | ')})`;</span>
403
- <span class="branch-8 cbranch-no" title="branch not covered" > case 'intersection':</span>
404
- <span class="cstat-no" title="statement not covered" > return type.members.map(printType).join(' &amp; ');</span>
405
- case 'ref':
406
- return type.name;
407
- <span class="branch-10 cbranch-no" title="branch not covered" > case 'inlineObject':</span>
408
- <span class="cstat-no" title="statement not covered" > return printInlineObjectCompact(type);</span>
409
- <span class="branch-11 cbranch-no" title="branch not covered" > case 'lazy':</span>
410
- <span class="cstat-no" title="statement not covered" > return `lazy(${printType(type.inner)})`;</span>
411
- }
412
- }
413
- &nbsp;
414
- /** Compact single-line form — used when inline object appears nested inside another type. */
415
- function <span class="fstat-no" title="function not covered" >printInlineObjectCompact(o</span>bj: InlineObjectTypeNode): string {
416
- const prefix = <span class="cstat-no" title="statement not covered" >obj.mode ? `mode(${obj.mode}) ` : '';</span>
417
- <span class="cstat-no" title="statement not covered" > if (obj.fields.length === 0) <span class="cstat-no" title="statement not covered" >return `${prefix}{}`;</span></span>
418
- const parts = <span class="cstat-no" title="statement not covered" >obj.fields.map(<span class="fstat-no" title="function not covered" >f =&gt; {</span></span>
419
- const opt = <span class="cstat-no" title="statement not covered" >f.optional ? '?' : '';</span>
420
- let t = <span class="cstat-no" title="statement not covered" >printType(f.type);</span>
421
- <span class="cstat-no" title="statement not covered" > if (f.nullable) <span class="cstat-no" title="statement not covered" >t += ' | null';</span></span>
422
- <span class="cstat-no" title="statement not covered" > return `${f.name}${opt}: ${t}`</span>;
423
- });
424
- <span class="cstat-no" title="statement not covered" > return `${prefix}{ ${parts.join(', ')} }`;</span>
425
- }
426
- &nbsp;
427
- /** Multi-line enum form — one value per line, used when single-line would exceed print width. */
428
- export function <span class="fstat-no" title="function not covered" >printEnumExpanded(v</span>alues: string[], indent: string): string {
429
- const innerIndent = <span class="cstat-no" title="statement not covered" >indent + INDENT;</span>
430
- <span class="cstat-no" title="statement not covered" > return `enum(\n${values.map(<span class="fstat-no" title="function not covered" >v =&gt; <span class="cstat-no" title="statement not covered" >`</span>${innerIndent}${formatEnumValue(v)}`</span>).join(',\n')}\n${indent})`;</span>
431
- }
432
- &nbsp;
433
- // ─── Field printer ──────────────────────────────────────────────────────────
434
- &nbsp;
435
- /** Print a full field declaration, including visibility, default, and inline comment.
436
- * Modifier order is canonical: override → deprecated → readonly|writeonly → type. */
437
- export function printField(field: FieldNode, indent: string, printWidth: number = <span class="branch-1 cbranch-no" title="branch not covered" >80): string {</span>
438
- const opt = field.optional ? <span class="branch-0 cbranch-no" title="branch not covered" >'?' : '</span>';
439
- const ovr = field.override ? 'override ' : '';
440
- const dep = field.deprecated ? 'deprecated ' : '';
441
- const vis = field.visibility !== 'normal' ? `${field.visibility} ` : '';
442
- const mods = `${ovr}${dep}${vis}`;
443
- const def = field.default !== undefined ? <span class="branch-0 cbranch-no" title="branch not covered" >` = ${formatDefault(field.default)}`</span> : '';
444
- const comment = field.description ? <span class="branch-0 cbranch-no" title="branch not covered" >` # ${field.description}`</span> : '';
445
- const innerIndent = indent + INDENT;
446
- &nbsp;
447
- // Expand inline object types to multi-line — same rule as type aliases.
448
- // Only when there's no default and no nullable union (those can't split cleanly).
449
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!field.nullable &amp;&amp; field.default === undefined) {
450
- const trailing = extractTrailingInlineObject(field.type);
451
- <span class="missing-if-branch" title="if path not taken" >I</span>if (trailing) {
452
- const { prefix, inlineObj } = <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" >t</span>railing;</span>
453
- const modePart = <span class="cstat-no" title="statement not covered" >inlineObj.mode ? `mode(${inlineObj.mode}) ` : '';</span>
454
- const header = <span class="cstat-no" title="statement not covered" >prefix</span>
455
- ? `${indent}${field.name}${opt}: ${mods}${prefix} &amp; ${modePart}{${comment}`
456
- : `${indent}${field.name}${opt}: ${mods}${modePart}{${comment}`;
457
- <span class="cstat-no" title="statement not covered" > return [header, ...printInlineObjectExpanded(inlineObj, innerIndent, printWidth), `${indent}}`].join('\n');</span>
458
- }
459
- }
460
- &nbsp;
461
- let typeStr = printType(field.type);
462
- <span class="missing-if-branch" title="if path not taken" >I</span>if (field.nullable) <span class="cstat-no" title="statement not covered" >typeStr += ' | null';</span>
463
- const fullLine = `${indent}${field.name}${opt}: ${mods}${typeStr}${def}${comment}`;
464
- <span class="missing-if-branch" title="if path not taken" >I</span>if (field.type.kind === 'enum' &amp;&amp; !field.nullable &amp;&amp; field.default === undefined &amp;&amp; fullLine.length &gt; printWidth) {
465
- const enumStr = <span class="cstat-no" title="statement not covered" >printEnumExpanded(field.type.values, indent);</span>
466
- <span class="cstat-no" title="statement not covered" > return `${indent}${field.name}${opt}: ${mods}${enumStr}${comment}`</span>;
467
- }
468
- return fullLine;
469
- }
470
- &nbsp;
471
- /** Print inline-object fields expanded (used when an inline brace object trails a type alias). */
472
- export function <span class="fstat-no" title="function not covered" >printInlineObjectExpanded(o</span>bj: InlineObjectTypeNode, indent: string, <span class="cstat-no" title="statement not covered" >printWidth: number = 80): string[] {</span>
473
- <span class="cstat-no" title="statement not covered" > return obj.fields.map(<span class="fstat-no" title="function not covered" >f =&gt; <span class="cstat-no" title="statement not covered" >p</span>rintField(f, indent, printWidth));</span></span>
474
- }
475
- &nbsp;
476
- // ─── Helpers ────────────────────────────────────────────────────────────────
477
- &nbsp;
478
- /** Format a single enum value: bare identifier stays bare; anything else gets double-quoted. */
479
- export function formatEnumValue(v: string): string {
480
- if (/^[a-zA-Z_$][a-zA-Z0-9_$\-.]*$/.test(v)) return v;
481
- return `"${v}"`;
482
- }
483
- &nbsp;
484
- /** Format a default value: quote strings that aren't valid bare identifiers. */
485
- export function formatDefault(val: string | number | boolean): string {
486
- if (typeof val === 'number' || typeof val === 'boolean') return String(val);
487
- // If it looks like a bare identifier (enum value, unquoted token), keep it bare.
488
- if (/^[a-zA-Z_$][a-zA-Z0-9_$\-.]*$/.test(val)) return val;
489
- return `"${val}"`;
490
- }
491
- &nbsp;
492
- /**
493
- * Detect whether the last member of a type is an inline brace object, and if so
494
- * return the prefix type string and the inline object for expanded printing.
495
- * Returns null if the type doesn't end with an inline object.
496
- */
497
- export function extractTrailingInlineObject(type: ContractTypeNode): {
498
- prefix: string | null;
499
- inlineObj: InlineObjectTypeNode;
500
- } | null {
501
- <span class="missing-if-branch" title="if path not taken" >I</span>if (type.kind === 'inlineObject') {
502
- <span class="cstat-no" title="statement not covered" > return { prefix: null, inlineObj: type };</span>
503
- }
504
- <span class="missing-if-branch" title="if path not taken" >I</span>if (type.kind === 'intersection') {
505
- const last = <span class="cstat-no" title="statement not covered" >type.members[type.members.length - 1];</span>
506
- <span class="cstat-no" title="statement not covered" > if (last?.kind === 'inlineObject') {</span>
507
- const prefixStr = <span class="cstat-no" title="statement not covered" >type.members.slice(0, -1).map(printType).join(' &amp; ');</span>
508
- <span class="cstat-no" title="statement not covered" > return { prefix: prefixStr, inlineObj: last };</span>
509
- }
510
- }
511
- return null;
512
- }
513
- &nbsp;</pre></td></tr></table></pre>
514
-
515
- <div class='push'></div><!-- for sticky footer -->
516
- </div><!-- /wrapper -->
517
- <div class='footer quiet pad2 space-top1 center small'>
518
- Code coverage generated by
519
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
520
- at 2026-06-12T19:14:45.270Z
521
- </div>
522
- <script src="prettify.js"></script>
523
- <script>
524
- window.onload = function () {
525
- prettyPrint();
526
- };
527
- </script>
528
- <script src="sorter.js"></script>
529
- <script src="block-navigation.js"></script>
530
- </body>
531
- </html>
532
-
Binary file