@contractkit/plugin-typescript 0.19.1 → 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,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">58.17% </span>
26
+ <span class="strong">60.23% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>185/318</span>
28
+ <span class='fraction'>203/337</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">47.22% </span>
33
+ <span class="strong">47.91% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>68/144</span>
35
+ <span class='fraction'>69/144</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">62.78% </span>
47
+ <span class="strong">65.37% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>167/266</span>
49
+ <span class='fraction'>185/283</span>
50
50
  </div>
51
51
 
52
52
 
@@ -848,7 +848,82 @@
848
848
  <a name='L783'></a><a href='#L783'>783</a>
849
849
  <a name='L784'></a><a href='#L784'>784</a>
850
850
  <a name='L785'></a><a href='#L785'>785</a>
851
- <a name='L786'></a><a href='#L786'>786</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
851
+ <a name='L786'></a><a href='#L786'>786</a>
852
+ <a name='L787'></a><a href='#L787'>787</a>
853
+ <a name='L788'></a><a href='#L788'>788</a>
854
+ <a name='L789'></a><a href='#L789'>789</a>
855
+ <a name='L790'></a><a href='#L790'>790</a>
856
+ <a name='L791'></a><a href='#L791'>791</a>
857
+ <a name='L792'></a><a href='#L792'>792</a>
858
+ <a name='L793'></a><a href='#L793'>793</a>
859
+ <a name='L794'></a><a href='#L794'>794</a>
860
+ <a name='L795'></a><a href='#L795'>795</a>
861
+ <a name='L796'></a><a href='#L796'>796</a>
862
+ <a name='L797'></a><a href='#L797'>797</a>
863
+ <a name='L798'></a><a href='#L798'>798</a>
864
+ <a name='L799'></a><a href='#L799'>799</a>
865
+ <a name='L800'></a><a href='#L800'>800</a>
866
+ <a name='L801'></a><a href='#L801'>801</a>
867
+ <a name='L802'></a><a href='#L802'>802</a>
868
+ <a name='L803'></a><a href='#L803'>803</a>
869
+ <a name='L804'></a><a href='#L804'>804</a>
870
+ <a name='L805'></a><a href='#L805'>805</a>
871
+ <a name='L806'></a><a href='#L806'>806</a>
872
+ <a name='L807'></a><a href='#L807'>807</a>
873
+ <a name='L808'></a><a href='#L808'>808</a>
874
+ <a name='L809'></a><a href='#L809'>809</a>
875
+ <a name='L810'></a><a href='#L810'>810</a>
876
+ <a name='L811'></a><a href='#L811'>811</a>
877
+ <a name='L812'></a><a href='#L812'>812</a>
878
+ <a name='L813'></a><a href='#L813'>813</a>
879
+ <a name='L814'></a><a href='#L814'>814</a>
880
+ <a name='L815'></a><a href='#L815'>815</a>
881
+ <a name='L816'></a><a href='#L816'>816</a>
882
+ <a name='L817'></a><a href='#L817'>817</a>
883
+ <a name='L818'></a><a href='#L818'>818</a>
884
+ <a name='L819'></a><a href='#L819'>819</a>
885
+ <a name='L820'></a><a href='#L820'>820</a>
886
+ <a name='L821'></a><a href='#L821'>821</a>
887
+ <a name='L822'></a><a href='#L822'>822</a>
888
+ <a name='L823'></a><a href='#L823'>823</a>
889
+ <a name='L824'></a><a href='#L824'>824</a>
890
+ <a name='L825'></a><a href='#L825'>825</a>
891
+ <a name='L826'></a><a href='#L826'>826</a>
892
+ <a name='L827'></a><a href='#L827'>827</a>
893
+ <a name='L828'></a><a href='#L828'>828</a>
894
+ <a name='L829'></a><a href='#L829'>829</a>
895
+ <a name='L830'></a><a href='#L830'>830</a>
896
+ <a name='L831'></a><a href='#L831'>831</a>
897
+ <a name='L832'></a><a href='#L832'>832</a>
898
+ <a name='L833'></a><a href='#L833'>833</a>
899
+ <a name='L834'></a><a href='#L834'>834</a>
900
+ <a name='L835'></a><a href='#L835'>835</a>
901
+ <a name='L836'></a><a href='#L836'>836</a>
902
+ <a name='L837'></a><a href='#L837'>837</a>
903
+ <a name='L838'></a><a href='#L838'>838</a>
904
+ <a name='L839'></a><a href='#L839'>839</a>
905
+ <a name='L840'></a><a href='#L840'>840</a>
906
+ <a name='L841'></a><a href='#L841'>841</a>
907
+ <a name='L842'></a><a href='#L842'>842</a>
908
+ <a name='L843'></a><a href='#L843'>843</a>
909
+ <a name='L844'></a><a href='#L844'>844</a>
910
+ <a name='L845'></a><a href='#L845'>845</a>
911
+ <a name='L846'></a><a href='#L846'>846</a>
912
+ <a name='L847'></a><a href='#L847'>847</a>
913
+ <a name='L848'></a><a href='#L848'>848</a>
914
+ <a name='L849'></a><a href='#L849'>849</a>
915
+ <a name='L850'></a><a href='#L850'>850</a>
916
+ <a name='L851'></a><a href='#L851'>851</a>
917
+ <a name='L852'></a><a href='#L852'>852</a>
918
+ <a name='L853'></a><a href='#L853'>853</a>
919
+ <a name='L854'></a><a href='#L854'>854</a>
920
+ <a name='L855'></a><a href='#L855'>855</a>
921
+ <a name='L856'></a><a href='#L856'>856</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
922
+ <span class="cline-any cline-neutral">&nbsp;</span>
923
+ <span class="cline-any cline-neutral">&nbsp;</span>
924
+ <span class="cline-any cline-neutral">&nbsp;</span>
925
+ <span class="cline-any cline-neutral">&nbsp;</span>
926
+ <span class="cline-any cline-neutral">&nbsp;</span>
852
927
  <span class="cline-any cline-neutral">&nbsp;</span>
853
928
  <span class="cline-any cline-neutral">&nbsp;</span>
854
929
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -949,6 +1024,7 @@
949
1024
  <span class="cline-any cline-neutral">&nbsp;</span>
950
1025
  <span class="cline-any cline-yes">1x</span>
951
1026
  <span class="cline-any cline-neutral">&nbsp;</span>
1027
+ <span class="cline-any cline-neutral">&nbsp;</span>
952
1028
  <span class="cline-any cline-yes">1x</span>
953
1029
  <span class="cline-any cline-neutral">&nbsp;</span>
954
1030
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1007,13 +1083,14 @@
1007
1083
  <span class="cline-any cline-neutral">&nbsp;</span>
1008
1084
  <span class="cline-any cline-neutral">&nbsp;</span>
1009
1085
  <span class="cline-any cline-neutral">&nbsp;</span>
1010
- <span class="cline-any cline-neutral">&nbsp;</span>
1011
1086
  <span class="cline-any cline-yes">18x</span>
1012
1087
  <span class="cline-any cline-neutral">&nbsp;</span>
1013
1088
  <span class="cline-any cline-yes">18x</span>
1014
- <span class="cline-any cline-yes">49x</span>
1089
+ <span class="cline-any cline-yes">34x</span>
1015
1090
  <span class="cline-any cline-neutral">&nbsp;</span>
1016
1091
  <span class="cline-any cline-neutral">&nbsp;</span>
1092
+ <span class="cline-any cline-yes">18x</span>
1093
+ <span class="cline-any cline-neutral">&nbsp;</span>
1017
1094
  <span class="cline-any cline-neutral">&nbsp;</span>
1018
1095
  <span class="cline-any cline-neutral">&nbsp;</span>
1019
1096
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1041,24 +1118,24 @@
1041
1118
  <span class="cline-any cline-neutral">&nbsp;</span>
1042
1119
  <span class="cline-any cline-neutral">&nbsp;</span>
1043
1120
  <span class="cline-any cline-neutral">&nbsp;</span>
1044
- <span class="cline-any cline-yes">16x</span>
1045
- <span class="cline-any cline-yes">16x</span>
1046
- <span class="cline-any cline-yes">16x</span>
1047
- <span class="cline-any cline-yes">16x</span>
1048
- <span class="cline-any cline-yes">16x</span>
1049
- <span class="cline-any cline-yes">16x</span>
1050
- <span class="cline-any cline-yes">16x</span>
1121
+ <span class="cline-any cline-yes">18x</span>
1122
+ <span class="cline-any cline-yes">18x</span>
1123
+ <span class="cline-any cline-yes">18x</span>
1124
+ <span class="cline-any cline-yes">18x</span>
1125
+ <span class="cline-any cline-yes">18x</span>
1126
+ <span class="cline-any cline-yes">18x</span>
1127
+ <span class="cline-any cline-yes">18x</span>
1051
1128
  <span class="cline-any cline-yes">1x</span>
1052
1129
  <span class="cline-any cline-neutral">&nbsp;</span>
1053
- <span class="cline-any cline-yes">16x</span>
1054
- <span class="cline-any cline-yes">4x</span>
1055
- <span class="cline-any cline-yes">4x</span>
1130
+ <span class="cline-any cline-yes">18x</span>
1131
+ <span class="cline-any cline-yes">6x</span>
1132
+ <span class="cline-any cline-yes">6x</span>
1056
1133
  <span class="cline-any cline-no">&nbsp;</span>
1057
1134
  <span class="cline-any cline-neutral">&nbsp;</span>
1058
1135
  <span class="cline-any cline-neutral">&nbsp;</span>
1059
1136
  <span class="cline-any cline-neutral">&nbsp;</span>
1060
1137
  <span class="cline-any cline-neutral">&nbsp;</span>
1061
- <span class="cline-any cline-yes">16x</span>
1138
+ <span class="cline-any cline-yes">18x</span>
1062
1139
  <span class="cline-any cline-neutral">&nbsp;</span>
1063
1140
  <span class="cline-any cline-neutral">&nbsp;</span>
1064
1141
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1075,8 +1152,8 @@
1075
1152
  <span class="cline-any cline-neutral">&nbsp;</span>
1076
1153
  <span class="cline-any cline-neutral">&nbsp;</span>
1077
1154
  <span class="cline-any cline-neutral">&nbsp;</span>
1078
- <span class="cline-any cline-yes">19x</span>
1079
- <span class="cline-any cline-yes">19x</span>
1155
+ <span class="cline-any cline-yes">22x</span>
1156
+ <span class="cline-any cline-yes">22x</span>
1080
1157
  <span class="cline-any cline-yes">2x</span>
1081
1158
  <span class="cline-any cline-yes">2x</span>
1082
1159
  <span class="cline-any cline-yes">2x</span>
@@ -1088,16 +1165,16 @@
1088
1165
  <span class="cline-any cline-no">&nbsp;</span>
1089
1166
  <span class="cline-any cline-neutral">&nbsp;</span>
1090
1167
  <span class="cline-any cline-neutral">&nbsp;</span>
1091
- <span class="cline-any cline-yes">19x</span>
1168
+ <span class="cline-any cline-yes">22x</span>
1092
1169
  <span class="cline-any cline-neutral">&nbsp;</span>
1093
1170
  <span class="cline-any cline-neutral">&nbsp;</span>
1094
1171
  <span class="cline-any cline-neutral">&nbsp;</span>
1095
1172
  <span class="cline-any cline-neutral">&nbsp;</span>
1096
- <span class="cline-any cline-yes">38x</span>
1097
- <span class="cline-any cline-yes">38x</span>
1173
+ <span class="cline-any cline-yes">44x</span>
1174
+ <span class="cline-any cline-yes">44x</span>
1098
1175
  <span class="cline-any cline-no">&nbsp;</span>
1099
1176
  <span class="cline-any cline-neutral">&nbsp;</span>
1100
- <span class="cline-any cline-yes">38x</span>
1177
+ <span class="cline-any cline-yes">44x</span>
1101
1178
  <span class="cline-any cline-neutral">&nbsp;</span>
1102
1179
  <span class="cline-any cline-neutral">&nbsp;</span>
1103
1180
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1406,6 +1483,7 @@
1406
1483
  <span class="cline-any cline-yes">4x</span>
1407
1484
  <span class="cline-any cline-yes">4x</span>
1408
1485
  <span class="cline-any cline-yes">4x</span>
1486
+ <span class="cline-any cline-yes">4x</span>
1409
1487
  <span class="cline-any cline-neutral">&nbsp;</span>
1410
1488
  <span class="cline-any cline-neutral">&nbsp;</span>
1411
1489
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1413,24 +1491,31 @@
1413
1491
  <span class="cline-any cline-neutral">&nbsp;</span>
1414
1492
  <span class="cline-any cline-neutral">&nbsp;</span>
1415
1493
  <span class="cline-any cline-yes">4x</span>
1416
- <span class="cline-any cline-yes">2x</span>
1417
- <span class="cline-any cline-yes">2x</span>
1418
- <span class="cline-any cline-yes">2x</span>
1494
+ <span class="cline-any cline-yes">6x</span>
1495
+ <span class="cline-any cline-yes">6x</span>
1496
+ <span class="cline-any cline-yes">6x</span>
1419
1497
  <span class="cline-any cline-neutral">&nbsp;</span>
1420
1498
  <span class="cline-any cline-neutral">&nbsp;</span>
1421
1499
  <span class="cline-any cline-yes">4x</span>
1500
+ <span class="cline-any cline-yes">1x</span>
1501
+ <span class="cline-any cline-neutral">&nbsp;</span>
1422
1502
  <span class="cline-any cline-neutral">&nbsp;</span>
1423
1503
  <span class="cline-any cline-neutral">&nbsp;</span>
1424
1504
  <span class="cline-any cline-neutral">&nbsp;</span>
1425
- <span class="cline-any cline-yes">1x</span>
1426
- <span class="cline-any cline-yes">1x</span>
1427
1505
  <span class="cline-any cline-neutral">&nbsp;</span>
1428
1506
  <span class="cline-any cline-neutral">&nbsp;</span>
1429
1507
  <span class="cline-any cline-neutral">&nbsp;</span>
1430
1508
  <span class="cline-any cline-yes">4x</span>
1431
- <span class="cline-any cline-no">&nbsp;</span>
1509
+ <span class="cline-any cline-yes">4x</span>
1510
+ <span class="cline-any cline-yes">4x</span>
1511
+ <span class="cline-any cline-yes">3x</span>
1512
+ <span class="cline-any cline-yes">3x</span>
1513
+ <span class="cline-any cline-yes">3x</span>
1514
+ <span class="cline-any cline-yes">3x</span>
1432
1515
  <span class="cline-any cline-yes">3x</span>
1433
1516
  <span class="cline-any cline-neutral">&nbsp;</span>
1517
+ <span class="cline-any cline-yes">3x</span>
1518
+ <span class="cline-any cline-no">&nbsp;</span>
1434
1519
  <span class="cline-any cline-yes">2x</span>
1435
1520
  <span class="cline-any cline-neutral">&nbsp;</span>
1436
1521
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1444,9 +1529,49 @@
1444
1529
  <span class="cline-any cline-neutral">&nbsp;</span>
1445
1530
  <span class="cline-any cline-neutral">&nbsp;</span>
1446
1531
  <span class="cline-any cline-neutral">&nbsp;</span>
1447
- <span class="cline-any cline-no">&nbsp;</span>
1532
+ <span class="cline-any cline-neutral">&nbsp;</span>
1533
+ <span class="cline-any cline-yes">3x</span>
1534
+ <span class="cline-any cline-yes">3x</span>
1448
1535
  <span class="cline-any cline-yes">2x</span>
1449
1536
  <span class="cline-any cline-neutral">&nbsp;</span>
1537
+ <span class="cline-any cline-yes">3x</span>
1538
+ <span class="cline-any cline-neutral">&nbsp;</span>
1539
+ <span class="cline-any cline-neutral">&nbsp;</span>
1540
+ <span class="cline-any cline-neutral">&nbsp;</span>
1541
+ <span class="cline-any cline-neutral">&nbsp;</span>
1542
+ <span class="cline-any cline-neutral">&nbsp;</span>
1543
+ <span class="cline-any cline-neutral">&nbsp;</span>
1544
+ <span class="cline-any cline-neutral">&nbsp;</span>
1545
+ <span class="cline-any cline-neutral">&nbsp;</span>
1546
+ <span class="cline-any cline-neutral">&nbsp;</span>
1547
+ <span class="cline-any cline-neutral">&nbsp;</span>
1548
+ <span class="cline-any cline-neutral">&nbsp;</span>
1549
+ <span class="cline-any cline-neutral">&nbsp;</span>
1550
+ <span class="cline-any cline-neutral">&nbsp;</span>
1551
+ <span class="cline-any cline-neutral">&nbsp;</span>
1552
+ <span class="cline-any cline-yes">3x</span>
1553
+ <span class="cline-any cline-neutral">&nbsp;</span>
1554
+ <span class="cline-any cline-neutral">&nbsp;</span>
1555
+ <span class="cline-any cline-neutral">&nbsp;</span>
1556
+ <span class="cline-any cline-neutral">&nbsp;</span>
1557
+ <span class="cline-any cline-neutral">&nbsp;</span>
1558
+ <span class="cline-any cline-neutral">&nbsp;</span>
1559
+ <span class="cline-any cline-neutral">&nbsp;</span>
1560
+ <span class="cline-any cline-neutral">&nbsp;</span>
1561
+ <span class="cline-any cline-neutral">&nbsp;</span>
1562
+ <span class="cline-any cline-neutral">&nbsp;</span>
1563
+ <span class="cline-any cline-neutral">&nbsp;</span>
1564
+ <span class="cline-any cline-neutral">&nbsp;</span>
1565
+ <span class="cline-any cline-yes">3x</span>
1566
+ <span class="cline-any cline-neutral">&nbsp;</span>
1567
+ <span class="cline-any cline-neutral">&nbsp;</span>
1568
+ <span class="cline-any cline-yes">3x</span>
1569
+ <span class="cline-any cline-neutral">&nbsp;</span>
1570
+ <span class="cline-any cline-neutral">&nbsp;</span>
1571
+ <span class="cline-any cline-neutral">&nbsp;</span>
1572
+ <span class="cline-any cline-neutral">&nbsp;</span>
1573
+ <span class="cline-any cline-neutral">&nbsp;</span>
1574
+ <span class="cline-any cline-neutral">&nbsp;</span>
1450
1575
  <span class="cline-any cline-neutral">&nbsp;</span>
1451
1576
  <span class="cline-any cline-neutral">&nbsp;</span>
1452
1577
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1454,6 +1579,11 @@
1454
1579
  <span class="cline-any cline-neutral">&nbsp;</span>
1455
1580
  <span class="cline-any cline-neutral">&nbsp;</span>
1456
1581
  <span class="cline-any cline-neutral">&nbsp;</span>
1582
+ <span class="cline-any cline-yes">3x</span>
1583
+ <span class="cline-any cline-neutral">&nbsp;</span>
1584
+ <span class="cline-any cline-neutral">&nbsp;</span>
1585
+ <span class="cline-any cline-neutral">&nbsp;</span>
1586
+ <span class="cline-any cline-neutral">&nbsp;</span>
1457
1587
  <span class="cline-any cline-neutral">&nbsp;</span>
1458
1588
  <span class="cline-any cline-yes">4x</span>
1459
1589
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1468,9 +1598,9 @@
1468
1598
  <span class="cline-any cline-yes">4x</span>
1469
1599
  <span class="cline-any cline-yes">4x</span>
1470
1600
  <span class="cline-any cline-yes">4x</span>
1471
- <span class="cline-any cline-yes">3x</span>
1472
- <span class="cline-any cline-yes">3x</span>
1473
- <span class="cline-any cline-yes">3x</span>
1601
+ <span class="cline-any cline-yes">6x</span>
1602
+ <span class="cline-any cline-yes">6x</span>
1603
+ <span class="cline-any cline-yes">6x</span>
1474
1604
  <span class="cline-any cline-neutral">&nbsp;</span>
1475
1605
  <span class="cline-any cline-yes">4x</span>
1476
1606
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1603,6 +1733,16 @@
1603
1733
  <span class="cline-any cline-neutral">&nbsp;</span>
1604
1734
  <span class="cline-any cline-neutral">&nbsp;</span>
1605
1735
  <span class="cline-any cline-neutral">&nbsp;</span>
1736
+ <span class="cline-any cline-neutral">&nbsp;</span>
1737
+ <span class="cline-any cline-yes">18x</span>
1738
+ <span class="cline-any cline-yes">18x</span>
1739
+ <span class="cline-any cline-yes">18x</span>
1740
+ <span class="cline-any cline-neutral">&nbsp;</span>
1741
+ <span class="cline-any cline-neutral">&nbsp;</span>
1742
+ <span class="cline-any cline-neutral">&nbsp;</span>
1743
+ <span class="cline-any cline-neutral">&nbsp;</span>
1744
+ <span class="cline-any cline-neutral">&nbsp;</span>
1745
+ <span class="cline-any cline-neutral">&nbsp;</span>
1606
1746
  <span class="cline-any cline-yes">18x</span>
1607
1747
  <span class="cline-any cline-no">&nbsp;</span>
1608
1748
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1634,7 +1774,7 @@
1634
1774
  <span class="cline-any cline-yes">18x</span>
1635
1775
  <span class="cline-any cline-neutral">&nbsp;</span>
1636
1776
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { resolve, join, relative, dirname, basename } from 'node:path';
1637
- import { existsSync, readFileSync, rmSync, readdirSync, rmdirSync } from 'node:fs';
1777
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync, readdirSync, rmdirSync } from 'node:fs';
1638
1778
  import { generateContract } from './codegen-contract.js';
1639
1779
  import { generateOp } from './codegen-operation.js';
1640
1780
  import type {
@@ -1651,6 +1791,7 @@ import {
1651
1791
  runIncrementalCodegen,
1652
1792
  parseIncrementalManifest,
1653
1793
  emptyIncrementalManifest,
1794
+ serializeIncrementalManifest,
1654
1795
  hashFingerprint,
1655
1796
  collectTransitiveModelRefs,
1656
1797
  collectTypeRefs,
@@ -1659,8 +1800,11 @@ import {
1659
1800
  generateSdk,
1660
1801
  generateSdkOptions,
1661
1802
  generateSdkAggregator,
1803
+ generateAreaClient,
1662
1804
  deriveClientClassName,
1663
1805
  deriveClientPropertyName,
1806
+ deriveAreaClientClassName,
1807
+ deriveAreaPropertyName,
1664
1808
  deriveSubareaClientClassName,
1665
1809
  deriveSubareaPropertyName,
1666
1810
  getAreaSubarea,
@@ -1676,6 +1820,7 @@ import {
1676
1820
  computeOpOutPath,
1677
1821
  computeContractOutPath,
1678
1822
  computeSdkOutPath,
1823
+ computeSdkAreaClientOutPath,
1679
1824
  computeSdkTypeOutPath,
1680
1825
  generateBarrelFiles,
1681
1826
  computePubliclyReachableTypes,
@@ -1734,7 +1879,8 @@ export interface TypescriptPluginConfig {
1734
1879
  /** Bumped when the codegen output shape changes in a way that should bust every per-file fingerprint. */
1735
1880
  export const TYPESCRIPT_CODEGEN_VERSION = '1';
1736
1881
  &nbsp;
1737
- const MANIFEST_FILENAME = '.contractkit-typescript-manifest.json';
1882
+ /** Filename for the persisted TypeScript manifest under the CLI cache directory. */
1883
+ const CACHE_MANIFEST_FILENAME = 'typescript-manifest.json';
1738
1884
  &nbsp;
1739
1885
  // ─── Plugin entry points ──────────────────────────────────────────────────
1740
1886
  &nbsp;
@@ -1772,7 +1918,7 @@ async function runTypescriptCodegen(
1772
1918
  config: TypescriptPluginConfig,
1773
1919
  rootDir: string,
1774
1920
  ): Promise&lt;void&gt; {
1775
- const manifestPath = resolve(rootDir, MANIFEST_FILENAME);
1921
+ const manifestPath = resolve(ctx.cacheDir, CACHE_MANIFEST_FILENAME);
1776
1922
  const prevManifest: IncrementalManifest = ctx.cacheEnabled ? readManifest(<span class="branch-1 cbranch-no" title="branch not covered" >manifestPath) : emptyIncrementalManifest(TYPESCRIPT_CODEGEN_VERSION);</span>
1777
1923
  &nbsp;
1778
1924
  const units: IncrementalUnit[] = [];
@@ -1785,7 +1931,6 @@ async function runTypescriptCodegen(
1785
1931
  &nbsp;
1786
1932
  const result = runIncrementalCodegen({
1787
1933
  codegenVersion: TYPESCRIPT_CODEGEN_VERSION,
1788
- manifestFilename: manifestPath,
1789
1934
  prevManifest,
1790
1935
  globalFiles,
1791
1936
  units,
@@ -1798,6 +1943,8 @@ async function runTypescriptCodegen(
1798
1943
  for (const { relativePath, content } of result.filesToWrite) {
1799
1944
  ctx.emitFile(relativePath, content);
1800
1945
  }
1946
+ &nbsp;
1947
+ writeManifest(manifestPath, result.manifest);
1801
1948
  }
1802
1949
  &nbsp;
1803
1950
  // ─── Cross-file dependency analysis ────────────────────────────────────────
@@ -2180,12 +2327,13 @@ function collectSdkOutput(
2180
2327
  }
2181
2328
  &nbsp;
2182
2329
  // ── Global files: sdk-options, aggregator, barrels, root index ──
2183
- // The aggregator inlines area-only op roots, so its content depends on each inline root's
2184
- // full AST. Caching it gains little the codegen is fast and any inline-root change rebuilds
2185
- // the file anyway. Same for barrels (one line per imported file). Always regenerate.
2330
+ // sdk-options.ts is a constant; the aggregator is small (just imports + a wrapper class)
2331
+ // and depends on the cross-cutting client list, so it's cheap to regenerate every run.
2332
+ // Per-area `&lt;area&gt;.client.ts` files are cached as their own units below.
2186
2333
  globalFiles.push({ relativePath: sdkOptionsPath, content: generateSdkOptions() });
2187
2334
  &nbsp;
2188
2335
  const hasAnything = sdkClientInfos.length &gt; 0 || areaBuckets.size &gt; 0;
2336
+ const areaClientOutPaths = new Map&lt;string, string&gt;(); // area → absolute outPath of &lt;area&gt;.client.ts
2189
2337
  <span class="missing-if-branch" title="else path not taken" >E</span>if (hasAnything) {
2190
2338
  const sdkEntryDir = dirname(sdkEntryPath);
2191
2339
  const sdkOptionsRel = relative(sdkEntryDir, sdkOptionsPath).replace(/\.ts$/, '.js');
@@ -2197,52 +2345,104 @@ function collectSdkOutput(
2197
2345
  .join('') + 'Sdk'
2198
2346
  : 'Sdk';
2199
2347
  &nbsp;
2200
- const toClientImport = (info: { outPath: string; className: string; propertyName: string }): SdkClientInfo =&gt; {
2201
- let rel = relative(sdkEntryDir, info.outPath).replace(/\.ts$/, '.js');
2348
+ const toClientImport = (sourceDir: string, info: { outPath: string; className: string; propertyName: string }): SdkClientInfo =&gt; {
2349
+ let rel = relative(sourceDir, info.outPath).replace(/\.ts$/, '.js');
2202
2350
  <span class="missing-if-branch" title="else path not taken" >E</span>if (!rel.startsWith('.')) rel = './' + rel;
2203
2351
  return { className: info.className, propertyName: info.propertyName, importPath: rel };
2204
2352
  };
2205
2353
  &nbsp;
2206
- const topLevelClients: SdkClientInfo[] = topLevelEntries.map(e =&gt; ({
2207
- className: deriveClientClassName(e.ast.file),
2208
- propertyName: deriveClientPropertyName(e.ast.file),
2209
- importPath: (() =&gt; {
2210
- const rel = relative(sdkEntryDir, e.outPath).replace(/\.ts$/, '.js');
2211
- return rel.startsWith('.') ? <span class="branch-0 cbranch-no" title="branch not covered" >rel : '</span>./' + rel;
2212
- })(),
2213
- }));
2214
- &nbsp;
2215
- const areas: SdkAreaInfo[] = [...areaBuckets.entries()]
2216
- .sort(<span class="fstat-no" title="function not covered" >([</span>a], [b]) =&gt; <span class="cstat-no" title="statement not covered" >a.localeCompare(b))</span>
2217
- .map(([area, bucket]) =&gt; ({
2218
- area,
2219
- inlineFiles: bucket.inlineRoots.map(root =&gt; ({
2220
- root,
2221
- codegenOptions: {
2222
- typeImportPathTemplate: undefined,
2223
- outPath: sdkEntryPath,
2224
- modelOutPaths: sdkModelOutPaths,
2225
- sdkOptionsPath,
2226
- modelsWithInput,
2227
- modelsWithOutput,
2228
- includeInternal: config.includeInternal,
2229
- },
2230
- })),
2231
- subareaClients: bucket.leaves
2232
- .sort(<span class="fstat-no" title="function not covered" >(a</span>, b) =&gt; <span class="cstat-no" title="statement not covered" >a.subarea.localeCompare(b.subarea))</span>
2233
- .map(l =&gt; ({
2354
+ const topLevelClients: SdkClientInfo[] = topLevelEntries.map(e =&gt;
2355
+ toClientImport(sdkEntryDir, {
2356
+ outPath: e.outPath,
2357
+ className: deriveClientClassName(e.ast.file),
2358
+ propertyName: deriveClientPropertyName(e.ast.file),
2359
+ }),
2360
+ );
2361
+ &nbsp;
2362
+ // ── Per-area `&lt;area&gt;.client.ts` units ──
2363
+ const areaInfos: SdkAreaInfo[] = [];
2364
+ const sortedAreas = [...areaBuckets.entries()].sort(<span class="fstat-no" title="function not covered" >([</span>a], [b]) =&gt; <span class="cstat-no" title="statement not covered" >a.localeCompare(b));</span>
2365
+ for (const [area, bucket] of sortedAreas) {
2366
+ const areaClientOutPath = computeSdkAreaClientOutPath(area, sdkBase, config.output!.clients);
2367
+ areaClientOutPaths.set(area, areaClientOutPath);
2368
+ const areaClassName = deriveAreaClientClassName(area);
2369
+ const areaPropertyName = deriveAreaPropertyName(area);
2370
+ sdkClientInfos.push({ outPath: areaClientOutPath, className: areaClassName, propertyName: areaPropertyName });
2371
+ &nbsp;
2372
+ const subareaClients = bucket.leaves
2373
+ .sort(<span class="fstat-no" title="function not covered" >(a</span>, b) =&gt; <span class="cstat-no" title="statement not covered" >a.subarea.localeCompare(b.subarea))</span>
2374
+ .map(l =&gt; ({
2375
+ propertyName: deriveSubareaPropertyName(l.subarea),
2376
+ client: toClientImport(dirname(areaClientOutPath), {
2377
+ outPath: l.outPath,
2378
+ className: deriveSubareaClientClassName(area, l.subarea),
2234
2379
  propertyName: deriveSubareaPropertyName(l.subarea),
2235
- client: toClientImport({
2236
- outPath: l.outPath,
2237
- className: deriveSubareaClientClassName(area, l.subarea),
2238
- propertyName: deriveSubareaPropertyName(l.subarea),
2239
- }),
2240
- })),
2380
+ }),
2381
+ }));
2382
+ &nbsp;
2383
+ // Fingerprint covers every input the area client depends on:
2384
+ // - all inline roots (full AST)
2385
+ // - subarea client metadata (className / propertyName / import path)
2386
+ // - the modelOutPaths slice for refs across all inline roots
2387
+ // - modelsWithInput/Output slices
2388
+ const allInlineRefs = new Set&lt;string&gt;();
2389
+ for (const r of bucket.inlineRoots) {
2390
+ for (const ref of collectOpRootRefs(r, modelMap)) <span class="cstat-no" title="statement not covered" >allInlineRefs.add(ref);</span>
2391
+ }
2392
+ const fingerprint = hashFingerprint({
2393
+ kind: 'sdk-area-client',
2394
+ v: TYPESCRIPT_CODEGEN_VERSION,
2395
+ outPath: areaClientOutPath,
2396
+ area,
2397
+ inlineRoots: bucket.inlineRoots,
2398
+ subareaClients,
2399
+ outPathSlice: sliceOutPathMap(allInlineRefs, sdkModelOutPaths, modelsWithInput, modelsWithOutput),
2400
+ modelsWithInput: sliceModelSet(allInlineRefs, new Set(), modelsWithInput),
2401
+ modelsWithOutput: sliceModelSet(allInlineRefs, new Set(), modelsWithOutput),
2402
+ sdkOptionsPath,
2403
+ includeInternal: config.includeInternal ?? false,
2404
+ sub: subConfigKey,
2405
+ });
2406
+ &nbsp;
2407
+ const inlineFilesForGen = bucket.inlineRoots.map(root =&gt; ({
2408
+ root,
2409
+ codegenOptions: {
2410
+ typeImportPathTemplate: undefined,
2411
+ outPath: areaClientOutPath,
2412
+ modelOutPaths: sdkModelOutPaths,
2413
+ sdkOptionsPath,
2414
+ modelsWithInput,
2415
+ modelsWithOutput,
2416
+ includeInternal: config.includeInternal,
2417
+ },
2241
2418
  }));
2419
+ &nbsp;
2420
+ units.push({
2421
+ key: `sdk-area-client::${areaClientOutPath}`,
2422
+ fingerprint,
2423
+ render: () =&gt; [
2424
+ {
2425
+ relativePath: areaClientOutPath,
2426
+ content: generateAreaClient({
2427
+ area,
2428
+ outPath: areaClientOutPath,
2429
+ inlineFiles: inlineFilesForGen,
2430
+ subareaClients,
2431
+ sdkOptionsPath,
2432
+ }),
2433
+ },
2434
+ ],
2435
+ });
2436
+ &nbsp;
2437
+ areaInfos.push({
2438
+ area,
2439
+ client: toClientImport(sdkEntryDir, { outPath: areaClientOutPath, className: areaClassName, propertyName: areaPropertyName }),
2440
+ });
2441
+ }
2242
2442
  &nbsp;
2243
2443
  globalFiles.push({
2244
2444
  relativePath: sdkEntryPath,
2245
- content: generateSdkAggregator({ topLevelClients, areas, sdkOptionsImportPath, sdkClassName }),
2445
+ content: generateSdkAggregator({ topLevelClients, areas: areaInfos, sdkOptionsImportPath, sdkClassName }),
2246
2446
  });
2247
2447
  }
2248
2448
  &nbsp;
@@ -2387,6 +2587,16 @@ function readManifest(manifestPath: string): IncrementalManifest {
2387
2587
  }
2388
2588
  }
2389
2589
  &nbsp;
2590
+ /** Write the manifest to `manifestPath`. Creates parent dirs as needed. Errors are swallowed so a broken cache never blocks the build. */
2591
+ function writeManifest(manifestPath: string, manifest: IncrementalManifest): void {
2592
+ try {
2593
+ mkdirSync(dirname(manifestPath), { recursive: true });
2594
+ writeFileSync(manifestPath, serializeIncrementalManifest(manifest), 'utf-8');
2595
+ } catch {
2596
+ // best-effort
2597
+ }
2598
+ }
2599
+ &nbsp;
2390
2600
  function deleteStalePaths(absPaths: string[]): void {
2391
2601
  <span class="missing-if-branch" title="else path not taken" >E</span>if (absPaths.length === 0) return;
2392
2602
  const removedDirs = <span class="cstat-no" title="statement not covered" >new Set&lt;string&gt;();</span>
@@ -2425,7 +2635,7 @@ function stableSubConfig(config: unknown): string {
2425
2635
  <div class='footer quiet pad2 space-top1 center small'>
2426
2636
  Code coverage generated by
2427
2637
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2428
- at 2026-05-07T11:16:43.674Z
2638
+ at 2026-05-07T11:53:53.335Z
2429
2639
  </div>
2430
2640
  <script src="../prettify.js"></script>
2431
2641
  <script>