@contractkit/plugin-typescript 0.28.0 → 0.28.1

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.
Files changed (40) hide show
  1. package/.turbo/turbo-build$colon$ci.log +4 -4
  2. package/.turbo/turbo-test$colon$ci.log +19 -18
  3. package/CHANGELOG.md +8 -0
  4. package/dist/codegen-contract.d.ts.map +1 -1
  5. package/dist/codegen-sdk.d.ts.map +1 -1
  6. package/dist/index.js +234 -210
  7. package/dist/index.js.map +1 -1
  8. package/dist/path-utils.d.ts.map +1 -1
  9. package/dist/ts-render.d.ts +6 -0
  10. package/dist/ts-render.d.ts.map +1 -1
  11. package/package.json +2 -2
  12. package/src/codegen-contract.ts +7 -4
  13. package/src/codegen-operation.ts +4 -4
  14. package/src/codegen-plain-types.ts +17 -14
  15. package/src/codegen-sdk.ts +5 -4
  16. package/src/path-utils.ts +37 -20
  17. package/src/ts-render.ts +21 -6
  18. package/tests/codegen-contract.test.ts +4 -0
  19. package/tests/codegen-sdk.test.ts +8 -0
  20. package/tests/escaping-security.test.ts +143 -0
  21. package/coverage/base.css +0 -224
  22. package/coverage/block-navigation.js +0 -87
  23. package/coverage/clover.xml +0 -2213
  24. package/coverage/coverage-final.json +0 -9
  25. package/coverage/favicon.png +0 -0
  26. package/coverage/index.html +0 -131
  27. package/coverage/prettify.css +0 -1
  28. package/coverage/prettify.js +0 -2
  29. package/coverage/sort-arrow-sprite.png +0 -0
  30. package/coverage/sorter.js +0 -210
  31. package/coverage/src/codegen-contract.ts.html +0 -3661
  32. package/coverage/src/codegen-operation.ts.html +0 -2584
  33. package/coverage/src/codegen-plain-types.ts.html +0 -997
  34. package/coverage/src/codegen-sdk.ts.html +0 -3901
  35. package/coverage/src/index.html +0 -206
  36. package/coverage/src/index.ts.html +0 -2761
  37. package/coverage/src/path-utils.ts.html +0 -745
  38. package/coverage/src/ts-render.ts.html +0 -592
  39. package/coverage/tests/helpers.ts.html +0 -826
  40. package/coverage/tests/index.html +0 -116
@@ -1,745 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/path-utils.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> path-utils.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">68.65% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>92/134</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">46.98% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>39/83</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>14/14</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">72.56% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>82/113</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></td><td class="line-coverage quiet"><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-yes">1x</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-yes">28x</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-yes">21x</span>
298
- <span class="cline-any cline-yes">21x</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-yes">21x</span>
303
- <span class="cline-any cline-yes">27x</span>
304
- <span class="cline-any cline-yes">21x</span>
305
- <span class="cline-any cline-yes">21x</span>
306
- <span class="cline-any cline-yes">21x</span>
307
- <span class="cline-any cline-yes">27x</span>
308
- <span class="cline-any cline-yes">81x</span>
309
- <span class="cline-any cline-no">&nbsp;</span>
310
- <span class="cline-any cline-no">&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-yes">21x</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-neutral">&nbsp;</span>
326
- <span class="cline-any cline-neutral">&nbsp;</span>
327
- <span class="cline-any cline-yes">16x</span>
328
- <span class="cline-any cline-yes">16x</span>
329
- <span class="cline-any cline-yes">16x</span>
330
- <span class="cline-any cline-yes">16x</span>
331
- <span class="cline-any cline-yes">16x</span>
332
- <span class="cline-any cline-neutral">&nbsp;</span>
333
- <span class="cline-any cline-yes">16x</span>
334
- <span class="cline-any cline-yes">7x</span>
335
- <span class="cline-any cline-yes">7x</span>
336
- <span class="cline-any cline-no">&nbsp;</span>
337
- <span class="cline-any cline-neutral">&nbsp;</span>
338
- <span class="cline-any cline-yes">9x</span>
339
- <span class="cline-any cline-no">&nbsp;</span>
340
- <span class="cline-any cline-no">&nbsp;</span>
341
- <span class="cline-any cline-neutral">&nbsp;</span>
342
- <span class="cline-any cline-yes">9x</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-neutral">&nbsp;</span>
353
- <span class="cline-any cline-yes">3x</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-yes">8x</span>
366
- <span class="cline-any cline-yes">8x</span>
367
- <span class="cline-any cline-yes">8x</span>
368
- <span class="cline-any cline-yes">8x</span>
369
- <span class="cline-any cline-yes">8x</span>
370
- <span class="cline-any cline-yes">8x</span>
371
- <span class="cline-any cline-neutral">&nbsp;</span>
372
- <span class="cline-any cline-yes">8x</span>
373
- <span class="cline-any cline-yes">8x</span>
374
- <span class="cline-any cline-yes">8x</span>
375
- <span class="cline-any cline-no">&nbsp;</span>
376
- <span class="cline-any cline-neutral">&nbsp;</span>
377
- <span class="cline-any cline-no">&nbsp;</span>
378
- <span class="cline-any cline-no">&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-no">&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-yes">3x</span>
396
- <span class="cline-any cline-yes">3x</span>
397
- <span class="cline-any cline-yes">3x</span>
398
- <span class="cline-any cline-yes">3x</span>
399
- <span class="cline-any cline-yes">3x</span>
400
- <span class="cline-any cline-yes">3x</span>
401
- <span class="cline-any cline-yes">3x</span>
402
- <span class="cline-any cline-neutral">&nbsp;</span>
403
- <span class="cline-any cline-yes">3x</span>
404
- <span class="cline-any cline-yes">3x</span>
405
- <span class="cline-any cline-yes">3x</span>
406
- <span class="cline-any cline-yes">3x</span>
407
- <span class="cline-any cline-no">&nbsp;</span>
408
- <span class="cline-any cline-neutral">&nbsp;</span>
409
- <span class="cline-any cline-no">&nbsp;</span>
410
- <span class="cline-any cline-no">&nbsp;</span>
411
- <span class="cline-any cline-no">&nbsp;</span>
412
- <span class="cline-any cline-neutral">&nbsp;</span>
413
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
418
- <span class="cline-any cline-neutral">&nbsp;</span>
419
- <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-neutral">&nbsp;</span>
423
- <span class="cline-any cline-yes">3x</span>
424
- <span class="cline-any cline-yes">3x</span>
425
- <span class="cline-any cline-yes">3x</span>
426
- <span class="cline-any cline-yes">3x</span>
427
- <span class="cline-any cline-yes">3x</span>
428
- <span class="cline-any cline-yes">3x</span>
429
- <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-yes">3x</span>
431
- <span class="cline-any cline-yes">3x</span>
432
- <span class="cline-any cline-yes">3x</span>
433
- <span class="cline-any cline-no">&nbsp;</span>
434
- <span class="cline-any cline-neutral">&nbsp;</span>
435
- <span class="cline-any cline-no">&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-yes">7x</span>
441
- <span class="cline-any cline-yes">7x</span>
442
- <span class="cline-any cline-yes">3x</span>
443
- <span class="cline-any cline-yes">3x</span>
444
- <span class="cline-any cline-yes">3x</span>
445
- <span class="cline-any cline-yes">3x</span>
446
- <span class="cline-any cline-neutral">&nbsp;</span>
447
- <span class="cline-any cline-yes">7x</span>
448
- <span class="cline-any cline-yes">7x</span>
449
- <span class="cline-any cline-yes">3x</span>
450
- <span class="cline-any cline-yes">3x</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-yes">3x</span>
454
- <span class="cline-any cline-neutral">&nbsp;</span>
455
- <span class="cline-any cline-yes">7x</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-neutral">&nbsp;</span>
461
- <span class="cline-any cline-neutral">&nbsp;</span>
462
- <span class="cline-any cline-neutral">&nbsp;</span>
463
- <span class="cline-any cline-neutral">&nbsp;</span>
464
- <span class="cline-any cline-yes">3x</span>
465
- <span class="cline-any cline-yes">3x</span>
466
- <span class="cline-any cline-yes">3x</span>
467
- <span class="cline-any cline-yes">3x</span>
468
- <span class="cline-any cline-neutral">&nbsp;</span>
469
- <span class="cline-any cline-yes">3x</span>
470
- <span class="cline-any cline-yes">3x</span>
471
- <span class="cline-any cline-yes">3x</span>
472
- <span class="cline-any cline-yes">3x</span>
473
- <span class="cline-any cline-yes">3x</span>
474
- <span class="cline-any cline-yes">3x</span>
475
- <span class="cline-any cline-yes">5x</span>
476
- <span class="cline-any cline-yes">3x</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-yes">3x</span>
480
- <span class="cline-any cline-yes">3x</span>
481
- <span class="cline-any cline-yes">3x</span>
482
- <span class="cline-any cline-yes">3x</span>
483
- <span class="cline-any cline-yes">3x</span>
484
- <span class="cline-any cline-no">&nbsp;</span>
485
- <span class="cline-any cline-no">&nbsp;</span>
486
- <span class="cline-any cline-no">&nbsp;</span>
487
- <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-no">&nbsp;</span>
489
- <span class="cline-any cline-no">&nbsp;</span>
490
- <span class="cline-any cline-no">&nbsp;</span>
491
- <span class="cline-any cline-no">&nbsp;</span>
492
- <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
496
- <span class="cline-any cline-no">&nbsp;</span>
497
- <span class="cline-any cline-no">&nbsp;</span>
498
- <span class="cline-any cline-no">&nbsp;</span>
499
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
503
- <span class="cline-any cline-neutral">&nbsp;</span>
504
- <span class="cline-any cline-yes">3x</span>
505
- <span class="cline-any cline-neutral">&nbsp;</span>
506
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { resolve, join, relative, dirname } from 'node:path';
507
- import type { ContractRootNode, OpRootNode } from '@contractkit/core';
508
- import { collectTypeRefs, collectPublicTypeNames } from '@contractkit/core';
509
- &nbsp;
510
- export const TEMPLATE_VAR_RE = /\{\w+\}/;
511
- &nbsp;
512
- export function resolveTemplate(template: string, vars: Record&lt;string, string&gt;): string {
513
- return template.replace(/\{(\w+)\}/g, (_, key) =&gt; vars[key] ?? <span class="branch-1 cbranch-no" title="branch not covered" >`{${key}}`)</span>;
514
- }
515
- &nbsp;
516
- export function includesFilename(p: string): boolean {
517
- const last = p.split('/').pop() ?? <span class="branch-1 cbranch-no" title="branch not covered" >'';</span>
518
- return last.includes('.');
519
- }
520
- &nbsp;
521
- export function commonDir(files: string[], rootDir: string): string {
522
- <span class="missing-if-branch" title="if path not taken" >I</span>if (files.length === 0) <span class="cstat-no" title="statement not covered" >return resolve(rootDir);</span>
523
- const parts = files.map(f =&gt; dirname(f).split('/'));
524
- const first = parts[0]!;
525
- let depth = first.length;
526
- for (const p of parts) {
527
- for (let i = 0; i &lt; depth; i++) {
528
- <span class="missing-if-branch" title="if path not taken" >I</span>if (p[i] !== first[i]) {
529
- <span class="cstat-no" title="statement not covered" > depth = i;</span>
530
- <span class="cstat-no" title="statement not covered" > break;</span>
531
- }
532
- }
533
- }
534
- return first.slice(0, depth).join('/') || <span class="branch-1 cbranch-no" title="branch not covered" >'/';</span>
535
- }
536
- &nbsp;
537
- // ─── Server / Zod output paths ─────────────────────────────────────────────
538
- &nbsp;
539
- export function computeOpOutPath(
540
- filePath: string,
541
- baseDir: string,
542
- output: string | undefined,
543
- defaultSuffix: string,
544
- commonRoot: string,
545
- meta: Record&lt;string, string&gt; = {},
546
- ): string {
547
- const baseName = filePath.split('/').pop()!;
548
- const relDir = relative(commonRoot, dirname(filePath));
549
- const filename = baseName.replace(/\.ck$/, '');
550
- const defaultName = `${filename}${defaultSuffix}`;
551
- const baseOutDir = resolve(baseDir);
552
- &nbsp;
553
- if (output &amp;&amp; TEMPLATE_VAR_RE.test(output)) {
554
- const resolved = resolveTemplate(output, { filename, dir: relDir, ext: 'ck', ...meta });
555
- <span class="missing-if-branch" title="else path not taken" >E</span>if (includesFilename(resolved)) return join(baseOutDir, resolved);
556
- <span class="cstat-no" title="statement not covered" > return join(baseOutDir, resolved, defaultName);</span>
557
- }
558
- <span class="missing-if-branch" title="if path not taken" >I</span>if (output) {
559
- <span class="cstat-no" title="statement not covered" > if (includesFilename(output)) <span class="cstat-no" title="statement not covered" >return join(baseOutDir, output);</span></span>
560
- <span class="cstat-no" title="statement not covered" > return join(baseOutDir, output, relDir, defaultName);</span>
561
- }
562
- return join(baseOutDir, relDir, defaultName);
563
- }
564
- &nbsp;
565
- export function computeContractOutPath(
566
- filePath: string,
567
- baseDir: string,
568
- output: string | undefined,
569
- defaultSuffix: string,
570
- commonRoot: string,
571
- meta: Record&lt;string, string&gt; = {},
572
- ): string {
573
- return computeOpOutPath(filePath, baseDir, output, defaultSuffix, commonRoot, meta);
574
- }
575
- &nbsp;
576
- // ─── SDK output paths ──────────────────────────────────────────────────────
577
- &nbsp;
578
- export function computeSdkOutPath(
579
- filePath: string,
580
- rootDir: string,
581
- clientOutput: string | undefined,
582
- commonRoot: string,
583
- meta: Record&lt;string, string&gt; = {},
584
- ): string | null {
585
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!filePath.endsWith('.ck')) <span class="cstat-no" title="statement not covered" >return null;</span>
586
- const baseName = filePath.split('/').pop()!;
587
- const defaultOutName = baseName.replace(/\.ck$/, '.client.ts');
588
- const baseOutDir = resolve(rootDir);
589
- const relDir = relative(commonRoot, dirname(filePath));
590
- const filename = baseName.replace(/\.ck$/, '');
591
- &nbsp;
592
- <span class="missing-if-branch" title="else path not taken" >E</span>if (clientOutput &amp;&amp; TEMPLATE_VAR_RE.test(clientOutput)) {
593
- const resolved = resolveTemplate(clientOutput, { filename, dir: relDir, ext: 'ck', ...meta });
594
- <span class="missing-if-branch" title="else path not taken" >E</span>if (includesFilename(resolved)) return join(baseOutDir, resolved);
595
- <span class="cstat-no" title="statement not covered" > return join(baseOutDir, resolved, defaultOutName);</span>
596
- }
597
- <span class="cstat-no" title="statement not covered" > if (clientOutput) {</span>
598
- <span class="cstat-no" title="statement not covered" > if (includesFilename(clientOutput)) <span class="cstat-no" title="statement not covered" >return join(baseOutDir, clientOutput);</span></span>
599
- <span class="cstat-no" title="statement not covered" > return join(baseOutDir, clientOutput, relDir, defaultOutName);</span>
600
- }
601
- <span class="cstat-no" title="statement not covered" > return join(baseOutDir, relDir, defaultOutName);</span>
602
- }
603
- &nbsp;
604
- /**
605
- * Resolve the output path for a synthesized `&lt;area&gt;.client.ts` — the file holding the
606
- * `&lt;Area&gt;Client` class that aggregates an area's inlined methods and subarea wiring.
607
- *
608
- * Uses the same `output.clients` template as leaf clients, with `{filename}` and `{area}`
609
- * substituted to the area name and `{subarea}` substituted to the empty string. Resulting
610
- * double-slashes from the empty substitution are collapsed, and a final segment that
611
- * would otherwise begin with a dot (e.g. `.client.ts` from `{subarea}.client.ts`) is
612
- * prefixed with the area so the file isn't hidden.
613
- */
614
- export function computeSdkAreaClientOutPath(area: string, rootDir: string, clientOutput: string | undefined): string {
615
- const filename = area;
616
- const baseOutDir = resolve(rootDir);
617
- const fixHiddenSegment = (path: string): string =&gt; {
618
- const segments = path.split('/');
619
- const last = segments[segments.length - 1] ?? <span class="branch-1 cbranch-no" title="branch not covered" >'';</span>
620
- if (last.startsWith('.')) segments[segments.length - 1] = `${filename}${last}`;
621
- return segments.join('/');
622
- };
623
- <span class="missing-if-branch" title="else path not taken" >E</span>if (clientOutput &amp;&amp; TEMPLATE_VAR_RE.test(clientOutput)) {
624
- const resolved = resolveTemplate(clientOutput, { filename, dir: '', ext: 'ck', area, subarea: '' });
625
- const cleaned = fixHiddenSegment(resolved.replace(/\/+/g, '/').replace(/^\//, ''));
626
- <span class="missing-if-branch" title="else path not taken" >E</span>if (includesFilename(cleaned)) return join(baseOutDir, cleaned);
627
- <span class="cstat-no" title="statement not covered" > return join(baseOutDir, cleaned, `${filename}.client.ts`);</span>
628
- }
629
- <span class="cstat-no" title="statement not covered" > if (clientOutput) {</span>
630
- <span class="cstat-no" title="statement not covered" > if (includesFilename(clientOutput)) <span class="cstat-no" title="statement not covered" >return join(baseOutDir, clientOutput);</span></span>
631
- <span class="cstat-no" title="statement not covered" > return join(baseOutDir, clientOutput, `${filename}.client.ts`);</span>
632
- }
633
- <span class="cstat-no" title="statement not covered" > return join(baseOutDir, `${filename}.client.ts`);</span>
634
- }
635
- &nbsp;
636
- export function computeSdkTypeOutPath(
637
- filePath: string,
638
- rootDir: string,
639
- typeOutput: string,
640
- commonRoot: string,
641
- meta: Record&lt;string, string&gt; = {},
642
- ): string | null {
643
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!filePath.endsWith('.ck')) <span class="cstat-no" title="statement not covered" >return null;</span>
644
- const baseName = filePath.split('/').pop()!;
645
- const defaultOutName = baseName.replace(/\.ck$/, '.ts');
646
- const baseOutDir = resolve(rootDir);
647
- const relDir = relative(commonRoot, dirname(filePath));
648
- const filename = baseName.replace(/\.ck$/, '');
649
- &nbsp;
650
- <span class="missing-if-branch" title="else path not taken" >E</span>if (TEMPLATE_VAR_RE.test(typeOutput)) {
651
- const resolved = resolveTemplate(typeOutput, { filename, dir: relDir, ext: 'ck', ...meta });
652
- <span class="missing-if-branch" title="else path not taken" >E</span>if (includesFilename(resolved)) return join(baseOutDir, resolved);
653
- <span class="cstat-no" title="statement not covered" > return join(baseOutDir, resolved, defaultOutName);</span>
654
- }
655
- <span class="cstat-no" title="statement not covered" > if (includesFilename(typeOutput)) <span class="cstat-no" title="statement not covered" >return join(baseOutDir, typeOutput);</span></span>
656
- <span class="cstat-no" title="statement not covered" > return join(baseOutDir, typeOutput, relDir, defaultOutName);</span>
657
- }
658
- &nbsp;
659
- export function generateBarrelFiles(contractPaths: string[]): { outPath: string; content: string }[] {
660
- const byDir = new Map&lt;string, string[]&gt;();
661
- for (const outPath of contractPaths) {
662
- const dir = dirname(outPath);
663
- const group = byDir.get(dir) ?? [];
664
- group.push(outPath);
665
- byDir.set(dir, group);
666
- }
667
- const results: { outPath: string; content: string }[] = [];
668
- for (const [dir, files] of byDir) {
669
- const exports = files
670
- .map(f =&gt; `export * from './${f.split('/').pop()!.replace(/\.ts$/, '.js')}';`)
671
- .sort()
672
- .join('\n');
673
- results.push({ outPath: join(dir, 'index.ts'), content: `// Auto-generated barrel file\n${exports}\n` });
674
- }
675
- return results;
676
- }
677
- &nbsp;
678
- export function computePubliclyReachableTypes(
679
- opAsts: OpRootNode[],
680
- contractAsts: ContractRootNode[],
681
- modelsWithInput: Set&lt;string&gt;,
682
- modelsWithOutput: Set&lt;string&gt; = new Set(),
683
- ): Set&lt;string&gt; | null {
684
- <span class="missing-if-branch" title="if path not taken" >I</span>if (opAsts.length === 0) <span class="cstat-no" title="statement not covered" >return null;</span>
685
- const reachable = new Set&lt;string&gt;();
686
- for (const opAst of opAsts) {
687
- for (const name of collectPublicTypeNames(opAst, modelsWithInput, modelsWithOutput)) reachable.add(name);
688
- }
689
- const modelDeps = new Map&lt;string, Set&lt;string&gt;&gt;();
690
- for (const contractAst of contractAsts) {
691
- for (const model of contractAst.models) {
692
- const deps = new Set&lt;string&gt;();
693
- <span class="missing-if-branch" title="if path not taken" >I</span>if (model.bases) <span class="cstat-no" title="statement not covered" >for (const b of model.bases) <span class="cstat-no" title="statement not covered" >deps.add(b);</span></span>
694
- <span class="missing-if-branch" title="if path not taken" >I</span>if (model.type<span class="cstat-no" title="statement not covered" >) collectTypeRefs(model.type, deps);</span>
695
- for (const field of model.fields) collectTypeRefs(field.type, deps);
696
- modelDeps.set(model.name, deps);
697
- }
698
- }
699
- const frontier = [...reachable];
700
- while (frontier.length &gt; 0) {
701
- const name = frontier.pop()!;
702
- const baseName = name.endsWith('Input') ? <span class="branch-0 cbranch-no" title="branch not covered" >name.slice(0, -5) : n</span>ame.endsWith('Output') ? <span class="branch-0 cbranch-no" title="branch not covered" >name.slice(0, -6) : n</span>ame;
703
- for (const dep of modelDeps.get(baseName) ?? <span class="branch-1 cbranch-no" title="branch not covered" >[])</span> {
704
- <span class="cstat-no" title="statement not covered" > if (!reachable.has(dep)) {</span>
705
- <span class="cstat-no" title="statement not covered" > reachable.add(dep);</span>
706
- <span class="cstat-no" title="statement not covered" > frontier.push(dep);</span>
707
- }
708
- <span class="cstat-no" title="statement not covered" > if (modelsWithInput.has(dep)) {</span>
709
- const inputDep = <span class="cstat-no" title="statement not covered" >`${dep}Input`;</span>
710
- <span class="cstat-no" title="statement not covered" > if (!reachable.has(inputDep)) {</span>
711
- <span class="cstat-no" title="statement not covered" > reachable.add(inputDep);</span>
712
- <span class="cstat-no" title="statement not covered" > frontier.push(inputDep);</span>
713
- }
714
- }
715
- <span class="cstat-no" title="statement not covered" > if (modelsWithOutput.has(dep)) {</span>
716
- const outputDep = <span class="cstat-no" title="statement not covered" >`${dep}Output`;</span>
717
- <span class="cstat-no" title="statement not covered" > if (!reachable.has(outputDep)) {</span>
718
- <span class="cstat-no" title="statement not covered" > reachable.add(outputDep);</span>
719
- <span class="cstat-no" title="statement not covered" > frontier.push(outputDep);</span>
720
- }
721
- }
722
- }
723
- }
724
- return reachable;
725
- }
726
- &nbsp;</pre></td></tr></table></pre>
727
-
728
- <div class='push'></div><!-- for sticky footer -->
729
- </div><!-- /wrapper -->
730
- <div class='footer quiet pad2 space-top1 center small'>
731
- Code coverage generated by
732
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
733
- at 2026-07-07T16:24:11.130Z
734
- </div>
735
- <script src="../prettify.js"></script>
736
- <script>
737
- window.onload = function () {
738
- prettyPrint();
739
- };
740
- </script>
741
- <script src="../sorter.js"></script>
742
- <script src="../block-navigation.js"></script>
743
- </body>
744
- </html>
745
-