@contractkit/plugin-typescript 0.20.0 → 0.21.0

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.
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">88.26% </span>
26
+ <span class="strong">88.07% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>549/622</span>
28
+ <span class='fraction'>554/629</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">83.01% </span>
33
+ <span class="strong">82.56% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>303/365</span>
35
+ <span class='fraction'>303/367</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">87.14% </span>
40
+ <span class="strong">87.32% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>61/70</span>
42
+ <span class='fraction'>62/71</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">91.22% </span>
47
+ <span class="strong">91.3% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>499/547</span>
49
+ <span class='fraction'>504/552</span>
50
50
  </div>
51
51
 
52
52
 
@@ -1218,7 +1218,44 @@
1218
1218
  <a name='L1153'></a><a href='#L1153'>1153</a>
1219
1219
  <a name='L1154'></a><a href='#L1154'>1154</a>
1220
1220
  <a name='L1155'></a><a href='#L1155'>1155</a>
1221
- <a name='L1156'></a><a href='#L1156'>1156</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
1221
+ <a name='L1156'></a><a href='#L1156'>1156</a>
1222
+ <a name='L1157'></a><a href='#L1157'>1157</a>
1223
+ <a name='L1158'></a><a href='#L1158'>1158</a>
1224
+ <a name='L1159'></a><a href='#L1159'>1159</a>
1225
+ <a name='L1160'></a><a href='#L1160'>1160</a>
1226
+ <a name='L1161'></a><a href='#L1161'>1161</a>
1227
+ <a name='L1162'></a><a href='#L1162'>1162</a>
1228
+ <a name='L1163'></a><a href='#L1163'>1163</a>
1229
+ <a name='L1164'></a><a href='#L1164'>1164</a>
1230
+ <a name='L1165'></a><a href='#L1165'>1165</a>
1231
+ <a name='L1166'></a><a href='#L1166'>1166</a>
1232
+ <a name='L1167'></a><a href='#L1167'>1167</a>
1233
+ <a name='L1168'></a><a href='#L1168'>1168</a>
1234
+ <a name='L1169'></a><a href='#L1169'>1169</a>
1235
+ <a name='L1170'></a><a href='#L1170'>1170</a>
1236
+ <a name='L1171'></a><a href='#L1171'>1171</a>
1237
+ <a name='L1172'></a><a href='#L1172'>1172</a>
1238
+ <a name='L1173'></a><a href='#L1173'>1173</a>
1239
+ <a name='L1174'></a><a href='#L1174'>1174</a>
1240
+ <a name='L1175'></a><a href='#L1175'>1175</a>
1241
+ <a name='L1176'></a><a href='#L1176'>1176</a>
1242
+ <a name='L1177'></a><a href='#L1177'>1177</a>
1243
+ <a name='L1178'></a><a href='#L1178'>1178</a>
1244
+ <a name='L1179'></a><a href='#L1179'>1179</a>
1245
+ <a name='L1180'></a><a href='#L1180'>1180</a>
1246
+ <a name='L1181'></a><a href='#L1181'>1181</a>
1247
+ <a name='L1182'></a><a href='#L1182'>1182</a>
1248
+ <a name='L1183'></a><a href='#L1183'>1183</a>
1249
+ <a name='L1184'></a><a href='#L1184'>1184</a>
1250
+ <a name='L1185'></a><a href='#L1185'>1185</a>
1251
+ <a name='L1186'></a><a href='#L1186'>1186</a>
1252
+ <a name='L1187'></a><a href='#L1187'>1187</a>
1253
+ <a name='L1188'></a><a href='#L1188'>1188</a>
1254
+ <a name='L1189'></a><a href='#L1189'>1189</a>
1255
+ <a name='L1190'></a><a href='#L1190'>1190</a>
1256
+ <a name='L1191'></a><a href='#L1191'>1191</a>
1257
+ <a name='L1192'></a><a href='#L1192'>1192</a>
1258
+ <a name='L1193'></a><a href='#L1193'>1193</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
1222
1259
  <span class="cline-any cline-neutral">&nbsp;</span>
1223
1260
  <span class="cline-any cline-neutral">&nbsp;</span>
1224
1261
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1800,26 +1837,26 @@
1800
1837
  <span class="cline-any cline-neutral">&nbsp;</span>
1801
1838
  <span class="cline-any cline-neutral">&nbsp;</span>
1802
1839
  <span class="cline-any cline-neutral">&nbsp;</span>
1803
- <span class="cline-any cline-yes">59x</span>
1840
+ <span class="cline-any cline-yes">47x</span>
1804
1841
  <span class="cline-any cline-neutral">&nbsp;</span>
1805
1842
  <span class="cline-any cline-neutral">&nbsp;</span>
1806
- <span class="cline-any cline-yes">63x</span>
1843
+ <span class="cline-any cline-yes">51x</span>
1807
1844
  <span class="cline-any cline-neutral">&nbsp;</span>
1808
1845
  <span class="cline-any cline-neutral">&nbsp;</span>
1809
1846
  <span class="cline-any cline-neutral">&nbsp;</span>
1810
1847
  <span class="cline-any cline-neutral">&nbsp;</span>
1811
- <span class="cline-any cline-yes">24x</span>
1812
- <span class="cline-any cline-yes">24x</span>
1848
+ <span class="cline-any cline-yes">23x</span>
1849
+ <span class="cline-any cline-yes">23x</span>
1813
1850
  <span class="cline-any cline-neutral">&nbsp;</span>
1814
1851
  <span class="cline-any cline-neutral">&nbsp;</span>
1815
1852
  <span class="cline-any cline-neutral">&nbsp;</span>
1816
1853
  <span class="cline-any cline-neutral">&nbsp;</span>
1817
- <span class="cline-any cline-yes">23x</span>
1854
+ <span class="cline-any cline-yes">12x</span>
1818
1855
  <span class="cline-any cline-neutral">&nbsp;</span>
1819
1856
  <span class="cline-any cline-neutral">&nbsp;</span>
1820
1857
  <span class="cline-any cline-neutral">&nbsp;</span>
1821
1858
  <span class="cline-any cline-neutral">&nbsp;</span>
1822
- <span class="cline-any cline-yes">16x</span>
1859
+ <span class="cline-any cline-yes">15x</span>
1823
1860
  <span class="cline-any cline-neutral">&nbsp;</span>
1824
1861
  <span class="cline-any cline-neutral">&nbsp;</span>
1825
1862
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2232,24 +2269,39 @@
2232
2269
  <span class="cline-any cline-neutral">&nbsp;</span>
2233
2270
  <span class="cline-any cline-neutral">&nbsp;</span>
2234
2271
  <span class="cline-any cline-neutral">&nbsp;</span>
2235
- <span class="cline-any cline-yes">13x</span>
2236
- <span class="cline-any cline-yes">13x</span>
2237
2272
  <span class="cline-any cline-neutral">&nbsp;</span>
2238
2273
  <span class="cline-any cline-neutral">&nbsp;</span>
2239
- <span class="cline-any cline-yes">13x</span>
2240
- <span class="cline-any cline-yes">13x</span>
2241
- <span class="cline-any cline-yes">13x</span>
2242
- <span class="cline-any cline-yes">13x</span>
2243
- <span class="cline-any cline-yes">13x</span>
2244
- <span class="cline-any cline-yes">13x</span>
2245
- <span class="cline-any cline-yes">13x</span>
2246
2274
  <span class="cline-any cline-neutral">&nbsp;</span>
2247
- <span class="cline-any cline-yes">13x</span>
2248
- <span class="cline-any cline-yes">8x</span>
2249
- <span class="cline-any cline-yes">8x</span>
2250
- <span class="cline-any cline-yes">8x</span>
2251
- <span class="cline-any cline-yes">6x</span>
2252
2275
  <span class="cline-any cline-neutral">&nbsp;</span>
2276
+ <span class="cline-any cline-neutral">&nbsp;</span>
2277
+ <span class="cline-any cline-neutral">&nbsp;</span>
2278
+ <span class="cline-any cline-neutral">&nbsp;</span>
2279
+ <span class="cline-any cline-neutral">&nbsp;</span>
2280
+ <span class="cline-any cline-neutral">&nbsp;</span>
2281
+ <span class="cline-any cline-neutral">&nbsp;</span>
2282
+ <span class="cline-any cline-neutral">&nbsp;</span>
2283
+ <span class="cline-any cline-neutral">&nbsp;</span>
2284
+ <span class="cline-any cline-neutral">&nbsp;</span>
2285
+ <span class="cline-any cline-neutral">&nbsp;</span>
2286
+ <span class="cline-any cline-neutral">&nbsp;</span>
2287
+ <span class="cline-any cline-neutral">&nbsp;</span>
2288
+ <span class="cline-any cline-neutral">&nbsp;</span>
2289
+ <span class="cline-any cline-neutral">&nbsp;</span>
2290
+ <span class="cline-any cline-yes">7x</span>
2291
+ <span class="cline-any cline-yes">7x</span>
2292
+ <span class="cline-any cline-neutral">&nbsp;</span>
2293
+ <span class="cline-any cline-neutral">&nbsp;</span>
2294
+ <span class="cline-any cline-yes">7x</span>
2295
+ <span class="cline-any cline-yes">7x</span>
2296
+ <span class="cline-any cline-yes">7x</span>
2297
+ <span class="cline-any cline-yes">7x</span>
2298
+ <span class="cline-any cline-yes">7x</span>
2299
+ <span class="cline-any cline-yes">7x</span>
2300
+ <span class="cline-any cline-yes">7x</span>
2301
+ <span class="cline-any cline-yes">7x</span>
2302
+ <span class="cline-any cline-neutral">&nbsp;</span>
2303
+ <span class="cline-any cline-yes">7x</span>
2304
+ <span class="cline-any cline-yes">6x</span>
2253
2305
  <span class="cline-any cline-yes">6x</span>
2254
2306
  <span class="cline-any cline-yes">6x</span>
2255
2307
  <span class="cline-any cline-yes">6x</span>
@@ -2260,13 +2312,20 @@
2260
2312
  <span class="cline-any cline-yes">5x</span>
2261
2313
  <span class="cline-any cline-neutral">&nbsp;</span>
2262
2314
  <span class="cline-any cline-yes">5x</span>
2263
- <span class="cline-any cline-neutral">&nbsp;</span>
2264
2315
  <span class="cline-any cline-yes">5x</span>
2265
2316
  <span class="cline-any cline-yes">5x</span>
2266
2317
  <span class="cline-any cline-yes">5x</span>
2267
2318
  <span class="cline-any cline-yes">5x</span>
2268
2319
  <span class="cline-any cline-neutral">&nbsp;</span>
2320
+ <span class="cline-any cline-neutral">&nbsp;</span>
2321
+ <span class="cline-any cline-neutral">&nbsp;</span>
2322
+ <span class="cline-any cline-neutral">&nbsp;</span>
2269
2323
  <span class="cline-any cline-yes">5x</span>
2324
+ <span class="cline-any cline-neutral">&nbsp;</span>
2325
+ <span class="cline-any cline-neutral">&nbsp;</span>
2326
+ <span class="cline-any cline-neutral">&nbsp;</span>
2327
+ <span class="cline-any cline-neutral">&nbsp;</span>
2328
+ <span class="cline-any cline-neutral">&nbsp;</span>
2270
2329
  <span class="cline-any cline-yes">5x</span>
2271
2330
  <span class="cline-any cline-yes">5x</span>
2272
2331
  <span class="cline-any cline-yes">2x</span>
@@ -2284,94 +2343,109 @@
2284
2343
  <span class="cline-any cline-neutral">&nbsp;</span>
2285
2344
  <span class="cline-any cline-neutral">&nbsp;</span>
2286
2345
  <span class="cline-any cline-neutral">&nbsp;</span>
2287
- <span class="cline-any cline-yes">7x</span>
2288
2346
  <span class="cline-any cline-neutral">&nbsp;</span>
2289
2347
  <span class="cline-any cline-neutral">&nbsp;</span>
2348
+ <span class="cline-any cline-yes">6x</span>
2349
+ <span class="cline-any cline-yes">6x</span>
2290
2350
  <span class="cline-any cline-neutral">&nbsp;</span>
2291
- <span class="cline-any cline-yes">12x</span>
2292
- <span class="cline-any cline-yes">12x</span>
2293
- <span class="cline-any cline-yes">13x</span>
2294
- <span class="cline-any cline-yes">13x</span>
2295
- <span class="cline-any cline-yes">13x</span>
2296
- <span class="cline-any cline-yes">12x</span>
2297
- <span class="cline-any cline-yes">12x</span>
2298
- <span class="cline-any cline-yes">12x</span>
2351
+ <span class="cline-any cline-yes">6x</span>
2352
+ <span class="cline-any cline-yes">6x</span>
2353
+ <span class="cline-any cline-yes">7x</span>
2354
+ <span class="cline-any cline-yes">7x</span>
2355
+ <span class="cline-any cline-yes">7x</span>
2356
+ <span class="cline-any cline-yes">6x</span>
2357
+ <span class="cline-any cline-yes">6x</span>
2358
+ <span class="cline-any cline-yes">6x</span>
2299
2359
  <span class="cline-any cline-yes">2x</span>
2300
2360
  <span class="cline-any cline-neutral">&nbsp;</span>
2301
- <span class="cline-any cline-yes">12x</span>
2302
- <span class="cline-any cline-yes">12x</span>
2303
- <span class="cline-any cline-neutral">&nbsp;</span>
2304
2361
  <span class="cline-any cline-neutral">&nbsp;</span>
2305
- <span class="cline-any cline-yes">12x</span>
2306
- <span class="cline-any cline-yes">12x</span>
2362
+ <span class="cline-any cline-yes">6x</span>
2307
2363
  <span class="cline-any cline-no">&nbsp;</span>
2308
2364
  <span class="cline-any cline-no">&nbsp;</span>
2309
2365
  <span class="cline-any cline-neutral">&nbsp;</span>
2310
- <span class="cline-any cline-yes">12x</span>
2366
+ <span class="cline-any cline-yes">6x</span>
2311
2367
  <span class="cline-any cline-no">&nbsp;</span>
2312
2368
  <span class="cline-any cline-neutral">&nbsp;</span>
2313
2369
  <span class="cline-any cline-neutral">&nbsp;</span>
2314
2370
  <span class="cline-any cline-neutral">&nbsp;</span>
2315
- <span class="cline-any cline-yes">12x</span>
2316
- <span class="cline-any cline-yes">12x</span>
2317
- <span class="cline-any cline-yes">12x</span>
2318
- <span class="cline-any cline-yes">12x</span>
2319
- <span class="cline-any cline-yes">12x</span>
2320
- <span class="cline-any cline-yes">12x</span>
2371
+ <span class="cline-any cline-yes">6x</span>
2372
+ <span class="cline-any cline-yes">6x</span>
2373
+ <span class="cline-any cline-yes">5x</span>
2374
+ <span class="cline-any cline-yes">5x</span>
2375
+ <span class="cline-any cline-yes">5x</span>
2376
+ <span class="cline-any cline-yes">5x</span>
2321
2377
  <span class="cline-any cline-neutral">&nbsp;</span>
2322
- <span class="cline-any cline-yes">12x</span>
2323
- <span class="cline-any cline-yes">12x</span>
2324
- <span class="cline-any cline-yes">7x</span>
2378
+ <span class="cline-any cline-yes">6x</span>
2325
2379
  <span class="cline-any cline-neutral">&nbsp;</span>
2326
- <span class="cline-any cline-yes">12x</span>
2327
2380
  <span class="cline-any cline-neutral">&nbsp;</span>
2381
+ <span class="cline-any cline-yes">6x</span>
2382
+ <span class="cline-any cline-yes">6x</span>
2383
+ <span class="cline-any cline-yes">5x</span>
2328
2384
  <span class="cline-any cline-neutral">&nbsp;</span>
2329
- <span class="cline-any cline-yes">12x</span>
2330
- <span class="cline-any cline-yes">7x</span>
2331
- <span class="cline-any cline-yes">7x</span>
2332
- <span class="cline-any cline-yes">7x</span>
2385
+ <span class="cline-any cline-yes">6x</span>
2386
+ <span class="cline-any cline-yes">6x</span>
2387
+ <span class="cline-any cline-yes">6x</span>
2388
+ <span class="cline-any cline-yes">6x</span>
2389
+ <span class="cline-any cline-yes">6x</span>
2390
+ <span class="cline-any cline-yes">5x</span>
2333
2391
  <span class="cline-any cline-neutral">&nbsp;</span>
2334
- <span class="cline-any cline-yes">7x</span>
2335
2392
  <span class="cline-any cline-yes">6x</span>
2336
2393
  <span class="cline-any cline-neutral">&nbsp;</span>
2337
- <span class="cline-any cline-yes">7x</span>
2394
+ <span class="cline-any cline-yes">18x</span>
2395
+ <span class="cline-any cline-yes">6x</span>
2396
+ <span class="cline-any cline-yes">6x</span>
2338
2397
  <span class="cline-any cline-neutral">&nbsp;</span>
2339
- <span class="cline-any cline-yes">7x</span>
2340
- <span class="cline-any cline-yes">7x</span>
2341
- <span class="cline-any cline-yes">7x</span>
2342
- <span class="cline-any cline-yes">7x</span>
2343
2398
  <span class="cline-any cline-yes">6x</span>
2344
2399
  <span class="cline-any cline-neutral">&nbsp;</span>
2345
- <span class="cline-any cline-yes">7x</span>
2346
2400
  <span class="cline-any cline-neutral">&nbsp;</span>
2347
2401
  <span class="cline-any cline-neutral">&nbsp;</span>
2348
- <span class="cline-any cline-yes">18x</span>
2349
- <span class="cline-any cline-yes">7x</span>
2350
- <span class="cline-any cline-yes">7x</span>
2351
2402
  <span class="cline-any cline-neutral">&nbsp;</span>
2352
2403
  <span class="cline-any cline-neutral">&nbsp;</span>
2353
2404
  <span class="cline-any cline-neutral">&nbsp;</span>
2354
- <span class="cline-any cline-yes">12x</span>
2355
- <span class="cline-any cline-yes">12x</span>
2356
- <span class="cline-any cline-yes">7x</span>
2357
2405
  <span class="cline-any cline-neutral">&nbsp;</span>
2358
- <span class="cline-any cline-yes">12x</span>
2406
+ <span class="cline-any cline-neutral">&nbsp;</span>
2407
+ <span class="cline-any cline-neutral">&nbsp;</span>
2408
+ <span class="cline-any cline-neutral">&nbsp;</span>
2409
+ <span class="cline-any cline-yes">10x</span>
2410
+ <span class="cline-any cline-yes">10x</span>
2411
+ <span class="cline-any cline-neutral">&nbsp;</span>
2412
+ <span class="cline-any cline-yes">10x</span>
2413
+ <span class="cline-any cline-yes">10x</span>
2414
+ <span class="cline-any cline-yes">10x</span>
2415
+ <span class="cline-any cline-neutral">&nbsp;</span>
2416
+ <span class="cline-any cline-yes">10x</span>
2417
+ <span class="cline-any cline-yes">10x</span>
2418
+ <span class="cline-any cline-yes">11x</span>
2419
+ <span class="cline-any cline-yes">11x</span>
2420
+ <span class="cline-any cline-yes">11x</span>
2421
+ <span class="cline-any cline-yes">11x</span>
2422
+ <span class="cline-any cline-neutral">&nbsp;</span>
2423
+ <span class="cline-any cline-neutral">&nbsp;</span>
2424
+ <span class="cline-any cline-yes">10x</span>
2425
+ <span class="cline-any cline-yes">10x</span>
2426
+ <span class="cline-any cline-yes">10x</span>
2427
+ <span class="cline-any cline-neutral">&nbsp;</span>
2428
+ <span class="cline-any cline-yes">10x</span>
2429
+ <span class="cline-any cline-yes">10x</span>
2430
+ <span class="cline-any cline-yes">5x</span>
2431
+ <span class="cline-any cline-neutral">&nbsp;</span>
2432
+ <span class="cline-any cline-yes">10x</span>
2359
2433
  <span class="cline-any cline-yes">6x</span>
2360
2434
  <span class="cline-any cline-neutral">&nbsp;</span>
2361
- <span class="cline-any cline-yes">12x</span>
2362
- <span class="cline-any cline-yes">12x</span>
2363
- <span class="cline-any cline-yes">12x</span>
2364
- <span class="cline-any cline-yes">12x</span>
2365
- <span class="cline-any cline-yes">7x</span>
2435
+ <span class="cline-any cline-yes">10x</span>
2436
+ <span class="cline-any cline-yes">10x</span>
2437
+ <span class="cline-any cline-yes">10x</span>
2438
+ <span class="cline-any cline-yes">10x</span>
2439
+ <span class="cline-any cline-yes">5x</span>
2366
2440
  <span class="cline-any cline-neutral">&nbsp;</span>
2367
- <span class="cline-any cline-yes">12x</span>
2441
+ <span class="cline-any cline-yes">10x</span>
2368
2442
  <span class="cline-any cline-yes">6x</span>
2369
2443
  <span class="cline-any cline-neutral">&nbsp;</span>
2370
- <span class="cline-any cline-yes">12x</span>
2371
- <span class="cline-any cline-yes">12x</span>
2372
- <span class="cline-any cline-yes">12x</span>
2444
+ <span class="cline-any cline-yes">10x</span>
2445
+ <span class="cline-any cline-yes">10x</span>
2446
+ <span class="cline-any cline-yes">10x</span>
2373
2447
  <span class="cline-any cline-neutral">&nbsp;</span>
2374
- <span class="cline-any cline-yes">12x</span>
2448
+ <span class="cline-any cline-yes">10x</span>
2375
2449
  <span class="cline-any cline-neutral">&nbsp;</span>
2376
2450
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { OpRootNode, OpRouteNode, OpOperationNode, OpRequestBodyNode, ContractTypeNode, ParamSource } from '@contractkit/core';
2377
2451
  import { resolveModifiers, isJsonMime, classifyContentType } from '@contractkit/core';
@@ -3347,23 +3421,25 @@ export interface SdkClientInfo {
3347
3421
  }
3348
3422
  &nbsp;
3349
3423
  /**
3350
- * One area-level (no-subarea) `.ck` file whose methods are inlined directly into the
3351
- * generated `&lt;Area&gt;Client` class instead of getting a standalone `*.client.ts`.
3424
+ * One area-level (no-subarea) `.ck` file whose methods are merged into the area's
3425
+ * `&lt;Area&gt;Client` (emitted to its own `&lt;area&gt;.client.ts`).
3352
3426
  */
3353
3427
  export interface SdkAreaInlineFile {
3354
3428
  /** Parsed AST. */
3355
3429
  root: OpRootNode;
3356
- /** Codegen options for this file (must have `outPath` pointing at the SDK aggregator file so type-import paths resolve correctly). */
3430
+ /** Codegen options for this file (must have `outPath` pointing at the area client file so type-import paths resolve correctly). */
3357
3431
  codegenOptions: SdkCodegenOptions;
3358
3432
  }
3359
3433
  &nbsp;
3360
3434
  /** A grouping of files that share the same `keys.area`. */
3361
3435
  export interface SdkAreaInfo {
3362
3436
  area: string;
3363
- /** Files for which all methods are inlined into the area client (no subarea). */
3364
- inlineFiles: SdkAreaInlineFile[];
3365
- /** Per-file leaf clients exposed as named properties on the area client. */
3366
- subareaClients: { propertyName: string; client: SdkClientInfo }[];
3437
+ /**
3438
+ * Reference to the `&lt;Area&gt;Client` class — the file that holds it lives at
3439
+ * `client.importPath` (relative to `sdk.ts`) and is generated separately by
3440
+ * {@link generateAreaClient}. The aggregator just imports it.
3441
+ */
3442
+ client: SdkClientInfo;
3367
3443
  }
3368
3444
  &nbsp;
3369
3445
  export interface SdkAggregatorInput {
@@ -3377,88 +3453,105 @@ export interface SdkAggregatorInput {
3377
3453
  sdkClassName?: string;
3378
3454
  }
3379
3455
  &nbsp;
3456
+ /** Inputs to {@link generateAreaClient}. */
3457
+ export interface AreaClientInput {
3458
+ /** Area name (e.g. `payments`). Drives the generated class name (`PaymentsClient`). */
3459
+ area: string;
3460
+ /** Output path of the generated `&lt;area&gt;.client.ts` file. Used to resolve relative type / leaf-client / sdk-options imports. */
3461
+ outPath: string;
3462
+ /** Files contributing inlined methods to the area client (typically area-level files with no subarea). */
3463
+ inlineFiles: SdkAreaInlineFile[];
3464
+ /** Subarea leaf clients exposed as named properties on the area client. */
3465
+ subareaClients: { propertyName: string; client: SdkClientInfo }[];
3466
+ /** Path to `sdk-options.ts`, used for `SdkFetch` and runtime helpers. */
3467
+ sdkOptionsPath: string;
3468
+ }
3469
+ &nbsp;
3380
3470
  /**
3381
- * Generate the SDK aggregator (`sdk.ts`) the entry-point file consumers import.
3471
+ * Generate a complete `&lt;area&gt;.client.ts` file: the `&lt;Area&gt;Client` class with
3472
+ * subarea property fields, a constructor that wires them, and inlined methods
3473
+ * merged from every area-level file in `inlineFiles`.
3382
3474
  *
3383
- * Emits one `&lt;Area&gt;Client` class per area (combining inlined area-level methods with
3384
- * subarea property wiring), one `class Sdk` exposing area properties + flat top-level
3385
- * properties, plus all imports needed by the inlined methods.
3475
+ * Emitted by the plugin alongside the per-leaf `*.client.ts` files. The SDK
3476
+ * aggregator just imports the resulting class see {@link generateSdkAggregator}.
3386
3477
  *
3387
- * @throws if two area-level files in the same area produce the same method name.
3478
+ * @throws if two area-level files contribute the same method name to the area
3479
+ * disambiguate via `sdk:` on the operation, or move one into a subarea.
3388
3480
  */
3389
- export function generateSdkAggregator(input: SdkAggregatorInput): string {
3390
- const sdkOptionsImportPath = input.sdkOptionsImportPath ?? './sdk-options.js';
3391
- const sdkClassName = input.sdkClassName ?? 'Sdk';
3392
- &nbsp;
3393
- // ── Pre-render inline method blocks per area (also collects type/runtime needs) ──
3394
- const inlinedByArea = new Map&lt;string, { lines: string[]; methodNames: Set&lt;string&gt; }&gt;();
3395
- const typesByImportPath = new Map&lt;string, Set&lt;string&gt;&gt;(); // path → set of type names
3481
+ export function generateAreaClient(input: AreaClientInput): string {
3482
+ const { area, outPath, inlineFiles, subareaClients, sdkOptionsPath } = input;
3483
+ const className = deriveAreaClientClassName(area);
3484
+ &nbsp;
3485
+ // ── Merge inputs across all inline files ────────────────────────────────
3486
+ const collectedMethodLines: string[] = [];
3487
+ const seenMethods = new Set&lt;string&gt;();
3488
+ const typesByImportPath = new Map&lt;string, Set&lt;string&gt;&gt;();
3396
3489
  const unresolvedTypes = new Set&lt;string&gt;();
3397
3490
  let needsJson = false;
3398
3491
  let needsBigIntReplacer = false;
3399
3492
  let needsBigIntReviver = false;
3400
3493
  let needsQueryString = false;
3401
3494
  &nbsp;
3402
- for (const area of input.areas) {
3403
- const collected: string[] = [];
3404
- const seenMethods = new Set&lt;string&gt;();
3405
- for (const inline of area.inlineFiles) {
3406
- const includeInternal = inline.codegenOptions.includeInternal ?? false;
3407
- // Collect method names + source lines
3408
- const { lines: methodLines, methodNames } = generateClientMethods(inline.root, inline.codegenOptions);
3409
- for (const name of methodNames) {
3410
- if (seenMethods.has(name)) {
3411
- throw new Error(
3412
- `[sdk] duplicate method '${name}' in area '${area.area}': two area-level files contribute the same method. Disambiguate via 'sdk:' or move one into a subarea.`,
3413
- );
3414
- }
3415
- seenMethods.add(name);
3495
+ for (const inline of inlineFiles) {
3496
+ const includeInternal = inline.codegenOptions.includeInternal ?? false;
3497
+ const { lines: methodLines, methodNames } = generateClientMethods(inline.root, inline.codegenOptions);
3498
+ for (const name of methodNames) {
3499
+ if (seenMethods.has(name)) {
3500
+ throw new Error(
3501
+ `[sdk] duplicate method '${name}' in area '${area}': two area-level files contribute the same method. Disambiguate via 'sdk:' or move one into a subarea.`,
3502
+ );
3416
3503
  }
3417
- collected.push(...methodLines);
3418
- // Side info for imports
3419
- <span class="missing-if-branch" title="if path not taken" >I</span>if (sdkNeedsJson(inline.root, includeInternal)) <span class="cstat-no" title="statement not covered" >needsJson = true;</span>
3420
- <span class="missing-if-branch" title="if path not taken" >I</span>if (sdkNeedsBigIntReplacer(inline.root, includeInternal)) <span class="cstat-no" title="statement not covered" >needsBigIntReplacer = true;</span>
3421
- if (sdkNeedsBigIntReviver(inline.root, includeInternal)) needsBigIntReviver = true;
3422
- <span class="missing-if-branch" title="if path not taken" >I</span>if (sdkNeedsQueryString(inline.root, includeInternal)) <span class="cstat-no" title="statement not covered" >needsQueryString = true;</span>
3423
- // Type imports: rebuild what generateTypeImports would produce, but key by import path so multiple files merge
3424
- const typesForFile = collectTypes(inline.root, inline.codegenOptions.modelsWithInput, inline.codegenOptions.modelsWithOutput, includeInternal);
3425
- const { modelOutPaths, outPath } = inline.codegenOptions;
3426
- if (modelOutPaths &amp;&amp; outPath) {
3427
- const fromDir = dirname(outPath);
3428
- for (const t of typesForFile) {
3429
- const typeOutPath = <span class="cstat-no" title="statement not covered" >modelOutPaths.get(t);</span>
3430
- <span class="cstat-no" title="statement not covered" > if (typeOutPath) {</span>
3431
- let <span class="cstat-no" title="statement not covered" >rel = relative(fromDir, typeOutPath).replace(/\.ts$/, '.js');</span>
3432
- <span class="cstat-no" title="statement not covered" > if (!rel.startsWith('.')) <span class="cstat-no" title="statement not covered" >rel = './' + rel;</span></span>
3433
- const set = <span class="cstat-no" title="statement not covered" >typesByImportPath.get(rel) ?? new Set();</span>
3434
- <span class="cstat-no" title="statement not covered" > set.add(t);</span>
3435
- <span class="cstat-no" title="statement not covered" > typesByImportPath.set(rel, set);</span>
3436
- } else {
3437
- <span class="cstat-no" title="statement not covered" > unresolvedTypes.add(t);</span>
3438
- }
3504
+ seenMethods.add(name);
3505
+ }
3506
+ collectedMethodLines.push(...methodLines);
3507
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (sdkNeedsJson(inline.root, includeInternal)) <span class="cstat-no" title="statement not covered" >needsJson = true;</span>
3508
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (sdkNeedsBigIntReplacer(inline.root, includeInternal)) <span class="cstat-no" title="statement not covered" >needsBigIntReplacer = true;</span>
3509
+ if (sdkNeedsBigIntReviver(inline.root, includeInternal)) needsBigIntReviver = true;
3510
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (sdkNeedsQueryString(inline.root, includeInternal)) <span class="cstat-no" title="statement not covered" >needsQueryString = true;</span>
3511
+ &nbsp;
3512
+ // Resolve each file's type refs against THIS file's modelOutPaths, but
3513
+ // produce import paths relative to the area client's outPath (not the
3514
+ // contributing file's outPath, which pointed at the now-defunct sdk.ts).
3515
+ const typesForFile = collectTypes(
3516
+ inline.root,
3517
+ inline.codegenOptions.modelsWithInput,
3518
+ inline.codegenOptions.modelsWithOutput,
3519
+ includeInternal,
3520
+ );
3521
+ const { modelOutPaths } = inline.codegenOptions;
3522
+ if (modelOutPaths) {
3523
+ const fromDir = dirname(outPath);
3524
+ for (const t of typesForFile) {
3525
+ const typeOutPath = <span class="cstat-no" title="statement not covered" >modelOutPaths.get(t);</span>
3526
+ <span class="cstat-no" title="statement not covered" > if (typeOutPath) {</span>
3527
+ let <span class="cstat-no" title="statement not covered" >rel = relative(fromDir, typeOutPath).replace(/\.ts$/, '.js');</span>
3528
+ <span class="cstat-no" title="statement not covered" > if (!rel.startsWith('.')) <span class="cstat-no" title="statement not covered" >rel = './' + rel;</span></span>
3529
+ const set = <span class="cstat-no" title="statement not covered" >typesByImportPath.get(rel) ?? new Set();</span>
3530
+ <span class="cstat-no" title="statement not covered" > set.add(t);</span>
3531
+ <span class="cstat-no" title="statement not covered" > typesByImportPath.set(rel, set);</span>
3532
+ } else {
3533
+ <span class="cstat-no" title="statement not covered" > unresolvedTypes.add(t);</span>
3439
3534
  }
3440
3535
  }
3441
3536
  }
3442
- inlinedByArea.set(area.area, { lines: collected, methodNames: seenMethods });
3443
3537
  }
3444
3538
  &nbsp;
3445
- // ── Imports ──
3539
+ // ── Imports ─────────────────────────────────────────────────────────────
3540
+ let sdkOptionsRel = relative(dirname(outPath), sdkOptionsPath).replace(/\.ts$/, '.js');
3541
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!sdkOptionsRel.startsWith('.')) <span class="cstat-no" title="statement not covered" >sdkOptionsRel = './' + sdkOptionsRel;</span>
3542
+ &nbsp;
3446
3543
  const lines: string[] = [];
3447
3544
  const jsonImport = needsJson ? <span class="branch-0 cbranch-no" title="branch not covered" >', JsonValue' : '</span>';
3448
- lines.push(`import type { SdkFetch${jsonImport} } from '${sdkOptionsImportPath}';`);
3545
+ lines.push(`import type { SdkFetch${jsonImport} } from '${sdkOptionsRel}';`);
3449
3546
  const valueImports: string[] = [];
3450
3547
  <span class="missing-if-branch" title="if path not taken" >I</span>if (needsBigIntReplacer) <span class="cstat-no" title="statement not covered" >valueImports.push('bigIntReplacer');</span>
3451
3548
  if (needsBigIntReviver) valueImports.push('parseJson');
3452
3549
  <span class="missing-if-branch" title="if path not taken" >I</span>if (needsQueryString) valueImports.push('buildQueryString');
3453
3550
  if (valueImports.length &gt; 0) {
3454
- lines.push(`import { ${valueImports.join(', ')} } from '${sdkOptionsImportPath}';`);
3551
+ lines.push(`import { ${valueImports.join(', ')} } from '${sdkOptionsRel}';`);
3455
3552
  }
3456
- lines.push(`import type { SdkOptions } from '${sdkOptionsImportPath}';`);
3457
- lines.push(`import { createSdkFetch } from '${sdkOptionsImportPath}';`);
3458
3553
  &nbsp;
3459
- // Type imports inlined from area-level files
3460
- const typeImportPaths = [...typesByImportPath.keys()].sort();
3461
- for (const path of typeImportPaths) {
3554
+ for (const path of [...typesByImportPath.keys()].sort()) {
3462
3555
  const names = <span class="cstat-no" title="statement not covered" >[...typesByImportPath.get(path)!].sort();</span>
3463
3556
  <span class="cstat-no" title="statement not covered" > lines.push(`import type { ${names.join(', ')} } from '${path}';`);</span>
3464
3557
  }
@@ -3466,7 +3559,52 @@ export function generateSdkAggregator(input: SdkAggregatorInput): string {
3466
3559
  <span class="cstat-no" title="statement not covered" > lines.push(`import type { ${t} } from './${pascalToDotCase(t)}.js';`);</span>
3467
3560
  }
3468
3561
  &nbsp;
3469
- // Leaf client imports (top-level + subarea)
3562
+ // Leaf client imports (subareas only — top-level clients live next to sdk.ts).
3563
+ const importedClients = new Set&lt;string&gt;();
3564
+ for (const sc of subareaClients) {
3565
+ const key = `${sc.client.className}|${sc.client.importPath}`;
3566
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (importedClients.has(key)) <span class="cstat-no" title="statement not covered" >continue;</span>
3567
+ importedClients.add(key);
3568
+ lines.push(`import { ${sc.client.className} } from '${sc.client.importPath}';`);
3569
+ }
3570
+ lines.push('');
3571
+ &nbsp;
3572
+ // ── &lt;Area&gt;Client class ──────────────────────────────────────────────────
3573
+ lines.push(`export class ${className} {`);
3574
+ for (const sc of subareaClients) {
3575
+ lines.push(` readonly ${sc.propertyName}: ${sc.client.className};`);
3576
+ }
3577
+ if (subareaClients.length &gt; 0) lines.push('');
3578
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (collectedMethodLines.length &gt; 0 || subareaClients.length &gt; 0) {
3579
+ const fetchModifier = collectedMethodLines.length &gt; 0 ? 'private ' : '';
3580
+ lines.push(` constructor(${fetchModifier}fetch: SdkFetch) {`);
3581
+ for (const sc of subareaClients) {
3582
+ lines.push(` this.${sc.propertyName} = new ${sc.client.className}(fetch);`);
3583
+ }
3584
+ lines.push(' }');
3585
+ }
3586
+ for (const ln of collectedMethodLines) lines.push(ln);
3587
+ lines.push('}');
3588
+ lines.push('');
3589
+ &nbsp;
3590
+ return lines.join('\n');
3591
+ }
3592
+ &nbsp;
3593
+ /**
3594
+ * Generate the SDK aggregator (`sdk.ts`) — the entry-point file consumers import.
3595
+ *
3596
+ * Imports every `&lt;Area&gt;Client` (one per area, generated by {@link generateAreaClient}
3597
+ * to its own `&lt;area&gt;.client.ts`) and every leaf top-level client, then emits a
3598
+ * `class Sdk` that exposes them as properties.
3599
+ */
3600
+ export function generateSdkAggregator(input: SdkAggregatorInput): string {
3601
+ const sdkOptionsImportPath = input.sdkOptionsImportPath ?? './sdk-options.js';
3602
+ const sdkClassName = input.sdkClassName ?? 'Sdk';
3603
+ &nbsp;
3604
+ const lines: string[] = [];
3605
+ lines.push(`import type { SdkOptions } from '${sdkOptionsImportPath}';`);
3606
+ lines.push(`import { createSdkFetch } from '${sdkOptionsImportPath}';`);
3607
+ &nbsp;
3470
3608
  const importedClients = new Set&lt;string&gt;();
3471
3609
  const pushClientImport = (c: SdkClientInfo): void =&gt; {
3472
3610
  const key = `${c.className}|${c.importPath}`;
@@ -3474,41 +3612,14 @@ export function generateSdkAggregator(input: SdkAggregatorInput): string {
3474
3612
  importedClients.add(key);
3475
3613
  lines.push(`import { ${c.className} } from '${c.importPath}';`);
3476
3614
  };
3615
+ // Areas first, then top-level — keeps the aggregator's import order stable.
3616
+ for (const area of input.areas) pushClientImport(area.client);
3477
3617
  for (const c of input.topLevelClients) pushClientImport(c);
3478
- for (const area of input.areas) {
3479
- for (const sc of area.subareaClients) pushClientImport(sc.client);
3480
- }
3481
3618
  lines.push('');
3482
3619
  &nbsp;
3483
- // ── &lt;Area&gt;Client classes ──
3484
- for (const area of input.areas) {
3485
- const areaClassName = deriveAreaClientClassName(area.area);
3486
- const inlined = inlinedByArea.get(area.area)!;
3487
- lines.push(`class ${areaClassName} {`);
3488
- // Subarea property declarations
3489
- for (const sc of area.subareaClients) {
3490
- lines.push(` readonly ${sc.propertyName}: ${sc.client.className};`);
3491
- }
3492
- if (area.subareaClients.length &gt; 0) lines.push('');
3493
- // Constructor
3494
- <span class="missing-if-branch" title="else path not taken" >E</span>if (inlined.lines.length &gt; 0 || area.subareaClients.length &gt; 0) {
3495
- const fetchModifier = inlined.lines.length &gt; 0 ? 'private ' : '';
3496
- lines.push(` constructor(${fetchModifier}fetch: SdkFetch) {`);
3497
- for (const sc of area.subareaClients) {
3498
- lines.push(` this.${sc.propertyName} = new ${sc.client.className}(fetch);`);
3499
- }
3500
- lines.push(' }');
3501
- }
3502
- // Inlined methods (already class-body indented)
3503
- for (const ln of inlined.lines) lines.push(ln);
3504
- lines.push('}');
3505
- lines.push('');
3506
- }
3507
- &nbsp;
3508
- // ── Sdk aggregator ──
3509
3620
  lines.push(`export class ${sdkClassName} {`);
3510
3621
  for (const area of input.areas) {
3511
- lines.push(` readonly ${deriveAreaPropertyName(area.area)}: ${deriveAreaClientClassName(area.area)};`);
3622
+ lines.push(` readonly ${deriveAreaPropertyName(area.area)}: ${area.client.className};`);
3512
3623
  }
3513
3624
  for (const c of input.topLevelClients) {
3514
3625
  lines.push(` readonly ${c.propertyName}: ${c.className};`);
@@ -3517,7 +3628,7 @@ export function generateSdkAggregator(input: SdkAggregatorInput): string {
3517
3628
  lines.push(' constructor(options: SdkOptions) {');
3518
3629
  lines.push(' const sdkFetch = options.fetch ?? createSdkFetch(options);');
3519
3630
  for (const area of input.areas) {
3520
- lines.push(` this.${deriveAreaPropertyName(area.area)} = new ${deriveAreaClientClassName(area.area)}(sdkFetch);`);
3631
+ lines.push(` this.${deriveAreaPropertyName(area.area)} = new ${area.client.className}(sdkFetch);`);
3521
3632
  }
3522
3633
  for (const c of input.topLevelClients) {
3523
3634
  lines.push(` this.${c.propertyName} = new ${c.className}(sdkFetch);`);
@@ -3535,7 +3646,7 @@ export function generateSdkAggregator(input: SdkAggregatorInput): string {
3535
3646
  <div class='footer quiet pad2 space-top1 center small'>
3536
3647
  Code coverage generated by
3537
3648
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
3538
- at 2026-05-07T11:38:24.644Z
3649
+ at 2026-05-07T11:53:53.335Z
3539
3650
  </div>
3540
3651
  <script src="../prettify.js"></script>
3541
3652
  <script>