@contractkit/plugin-typescript 0.25.3 → 0.25.4

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">80% </span>
26
+ <span class="strong">80.04% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>2032/2540</span>
28
+ <span class='fraction'>2038/2546</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">75.28% </span>
33
+ <span class="strong">75.34% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>1234/1639</span>
35
+ <span class='fraction'>1238/1643</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">83.5% </span>
40
+ <span class="strong">83.66% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>334/400</span>
42
+ <span class='fraction'>338/404</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">82.6% </span>
47
+ <span class="strong">82.63% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>1781/2156</span>
49
+ <span class='fraction'>1785/2160</span>
50
50
  </div>
51
51
 
52
52
 
@@ -80,17 +80,17 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file medium" data-value="src"><a href="src/index.html">src</a></td>
83
- <td data-value="79.78" class="pic medium">
83
+ <td data-value="79.83" class="pic medium">
84
84
  <div class="chart"><div class="cover-fill" style="width: 79%"></div><div class="cover-empty" style="width: 21%"></div></div>
85
85
  </td>
86
- <td data-value="79.78" class="pct medium">79.78%</td>
87
- <td data-value="2488" class="abs medium">1985/2488</td>
88
- <td data-value="74.96" class="pct medium">74.96%</td>
89
- <td data-value="1606" class="abs medium">1204/1606</td>
90
- <td data-value="83.06" class="pct high">83.06%</td>
91
- <td data-value="372" class="abs high">309/372</td>
92
- <td data-value="82.36" class="pct high">82.36%</td>
93
- <td data-value="2110" class="abs high">1738/2110</td>
86
+ <td data-value="79.83" class="pct medium">79.83%</td>
87
+ <td data-value="2494" class="abs medium">1991/2494</td>
88
+ <td data-value="75.03" class="pct medium">75.03%</td>
89
+ <td data-value="1610" class="abs medium">1208/1610</td>
90
+ <td data-value="83.24" class="pct high">83.24%</td>
91
+ <td data-value="376" class="abs high">313/376</td>
92
+ <td data-value="82.4" class="pct high">82.4%</td>
93
+ <td data-value="2114" class="abs high">1742/2114</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2026-05-17T13:20:54.468Z
119
+ at 2026-06-03T13:07:33.231Z
120
120
  </div>
121
121
  <script src="prettify.js"></script>
122
122
  <script>
@@ -3646,7 +3646,7 @@ export function pascalToDotCase(name: string): string {
3646
3646
  <div class='footer quiet pad2 space-top1 center small'>
3647
3647
  Code coverage generated by
3648
3648
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
3649
- at 2026-05-17T13:20:54.468Z
3649
+ at 2026-06-03T13:07:33.231Z
3650
3650
  </div>
3651
3651
  <script src="../prettify.js"></script>
3652
3652
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">78.09% </span>
26
+ <span class="strong">78.37% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>360/461</span>
28
+ <span class='fraction'>366/467</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">74.26% </span>
33
+ <span class="strong">74.56% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>251/338</span>
35
+ <span class='fraction'>255/342</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">77.77% </span>
40
+ <span class="strong">78.94% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>56/72</span>
42
+ <span class='fraction'>60/76</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">79.64% </span>
47
+ <span class="strong">79.85% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>317/398</span>
49
+ <span class='fraction'>321/402</span>
50
50
  </div>
51
51
 
52
52
 
@@ -883,7 +883,17 @@
883
883
  <a name='L818'></a><a href='#L818'>818</a>
884
884
  <a name='L819'></a><a href='#L819'>819</a>
885
885
  <a name='L820'></a><a href='#L820'>820</a>
886
- <a name='L821'></a><a href='#L821'>821</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
887
897
  <span class="cline-any cline-neutral">&nbsp;</span>
888
898
  <span class="cline-any cline-neutral">&nbsp;</span>
889
899
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1046,6 +1056,10 @@
1046
1056
  <span class="cline-any cline-neutral">&nbsp;</span>
1047
1057
  <span class="cline-any cline-neutral">&nbsp;</span>
1048
1058
  <span class="cline-any cline-yes">110x</span>
1059
+ <span class="cline-any cline-yes">2x</span>
1060
+ <span class="cline-any cline-neutral">&nbsp;</span>
1061
+ <span class="cline-any cline-neutral">&nbsp;</span>
1062
+ <span class="cline-any cline-yes">110x</span>
1049
1063
  <span class="cline-any cline-yes">110x</span>
1050
1064
  <span class="cline-any cline-no">&nbsp;</span>
1051
1065
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1659,6 +1673,12 @@
1659
1673
  <span class="cline-any cline-neutral">&nbsp;</span>
1660
1674
  <span class="cline-any cline-neutral">&nbsp;</span>
1661
1675
  <span class="cline-any cline-neutral">&nbsp;</span>
1676
+ <span class="cline-any cline-yes">110x</span>
1677
+ <span class="cline-any cline-yes">112x</span>
1678
+ <span class="cline-any cline-neutral">&nbsp;</span>
1679
+ <span class="cline-any cline-neutral">&nbsp;</span>
1680
+ <span class="cline-any cline-neutral">&nbsp;</span>
1681
+ <span class="cline-any cline-neutral">&nbsp;</span>
1662
1682
  <span class="cline-any cline-yes">28x</span>
1663
1683
  <span class="cline-any cline-neutral">&nbsp;</span>
1664
1684
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1864,6 +1884,10 @@ export function generateOp(root: OpRootNode, options: OpCodegenOptions = {}): st
1864
1884
  if (needsParseAndValidate) {
1865
1885
  body.push(`import { parseAndValidate } from '@maroonedsoftware/zod';`);
1866
1886
  }
1887
+ &nbsp;
1888
+ if (fileUsesMultipart(root)) {
1889
+ body.push(`import { MultipartBody } from '@maroonedsoftware/multipart';`);
1890
+ }
1867
1891
  &nbsp;
1868
1892
  const helpers: string[] = [];
1869
1893
  <span class="missing-if-branch" title="if path not taken" >I</span>if (opNeedsScalar(root, 'binary')) {
@@ -2478,6 +2502,12 @@ function fileNeedsSignature(root: OpRootNode): boolean {
2478
2502
  return root.routes.some(route =&gt; route.operations.some(op =&gt; !!op.signature));
2479
2503
  }
2480
2504
  &nbsp;
2505
+ function fileUsesMultipart(root: OpRootNode): boolean {
2506
+ return root.routes.some(route =&gt;
2507
+ route.operations.some(op =&gt; (op.request?.bodies ?? []).some(b =&gt; b.contentType === 'multipart/form-data')),
2508
+ );
2509
+ }
2510
+ &nbsp;
2481
2511
  function isValidIdentifier(name: string): boolean {
2482
2512
  return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);
2483
2513
  }
@@ -2530,7 +2560,7 @@ function deriveTypeImportPath(file: string, template?: string): string {
2530
2560
  <div class='footer quiet pad2 space-top1 center small'>
2531
2561
  Code coverage generated by
2532
2562
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2533
- at 2026-05-17T13:20:54.468Z
2563
+ at 2026-06-03T13:07:33.231Z
2534
2564
  </div>
2535
2565
  <script src="../prettify.js"></script>
2536
2566
  <script>
@@ -982,7 +982,7 @@ function renderOutputField(field: FieldNode, outputCase: 'camel' | 'snake' | 'pa
982
982
  <div class='footer quiet pad2 space-top1 center small'>
983
983
  Code coverage generated by
984
984
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
985
- at 2026-05-17T13:20:54.468Z
985
+ at 2026-06-03T13:07:33.231Z
986
986
  </div>
987
987
  <script src="../prettify.js"></script>
988
988
  <script>
@@ -3652,7 +3652,7 @@ export function generateSdkAggregator(input: SdkAggregatorInput): string {
3652
3652
  <div class='footer quiet pad2 space-top1 center small'>
3653
3653
  Code coverage generated by
3654
3654
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
3655
- at 2026-05-17T13:20:54.468Z
3655
+ at 2026-06-03T13:07:33.231Z
3656
3656
  </div>
3657
3657
  <script src="../prettify.js"></script>
3658
3658
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">79.78% </span>
26
+ <span class="strong">79.83% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>1985/2488</span>
28
+ <span class='fraction'>1991/2494</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">74.96% </span>
33
+ <span class="strong">75.03% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>1204/1606</span>
35
+ <span class='fraction'>1208/1610</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">83.06% </span>
40
+ <span class="strong">83.24% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>309/372</span>
42
+ <span class='fraction'>313/376</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">82.36% </span>
47
+ <span class="strong">82.4% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>1738/2110</span>
49
+ <span class='fraction'>1742/2114</span>
50
50
  </div>
51
51
 
52
52
 
@@ -95,17 +95,17 @@
95
95
 
96
96
  <tr>
97
97
  <td class="file medium" data-value="codegen-operation.ts"><a href="codegen-operation.ts.html">codegen-operation.ts</a></td>
98
- <td data-value="78.09" class="pic medium">
98
+ <td data-value="78.37" class="pic medium">
99
99
  <div class="chart"><div class="cover-fill" style="width: 78%"></div><div class="cover-empty" style="width: 22%"></div></div>
100
100
  </td>
101
- <td data-value="78.09" class="pct medium">78.09%</td>
102
- <td data-value="461" class="abs medium">360/461</td>
103
- <td data-value="74.26" class="pct medium">74.26%</td>
104
- <td data-value="338" class="abs medium">251/338</td>
105
- <td data-value="77.77" class="pct medium">77.77%</td>
106
- <td data-value="72" class="abs medium">56/72</td>
107
- <td data-value="79.64" class="pct medium">79.64%</td>
108
- <td data-value="398" class="abs medium">317/398</td>
101
+ <td data-value="78.37" class="pct medium">78.37%</td>
102
+ <td data-value="467" class="abs medium">366/467</td>
103
+ <td data-value="74.56" class="pct medium">74.56%</td>
104
+ <td data-value="342" class="abs medium">255/342</td>
105
+ <td data-value="78.94" class="pct medium">78.94%</td>
106
+ <td data-value="76" class="abs medium">60/76</td>
107
+ <td data-value="79.85" class="pct medium">79.85%</td>
108
+ <td data-value="402" class="abs medium">321/402</td>
109
109
  </tr>
110
110
 
111
111
  <tr>
@@ -191,7 +191,7 @@
191
191
  <div class='footer quiet pad2 space-top1 center small'>
192
192
  Code coverage generated by
193
193
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
194
- at 2026-05-17T13:20:54.468Z
194
+ at 2026-06-03T13:07:33.231Z
195
195
  </div>
196
196
  <script src="../prettify.js"></script>
197
197
  <script>
@@ -2635,7 +2635,7 @@ function stableSubConfig(config: unknown): string {
2635
2635
  <div class='footer quiet pad2 space-top1 center small'>
2636
2636
  Code coverage generated by
2637
2637
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2638
- at 2026-05-17T13:20:54.468Z
2638
+ at 2026-06-03T13:07:33.231Z
2639
2639
  </div>
2640
2640
  <script src="../prettify.js"></script>
2641
2641
  <script>
@@ -730,7 +730,7 @@ export function <span class="fstat-no" title="function not covered" >computePubl
730
730
  <div class='footer quiet pad2 space-top1 center small'>
731
731
  Code coverage generated by
732
732
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
733
- at 2026-05-17T13:20:54.468Z
733
+ at 2026-06-03T13:07:33.231Z
734
734
  </div>
735
735
  <script src="../prettify.js"></script>
736
736
  <script>
@@ -577,7 +577,7 @@ export function renderOutputTsType(type: ContractTypeNode, modelsWithOutput?: Se
577
577
  <div class='footer quiet pad2 space-top1 center small'>
578
578
  Code coverage generated by
579
579
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
580
- at 2026-05-17T13:20:54.468Z
580
+ at 2026-06-03T13:07:33.231Z
581
581
  </div>
582
582
  <script src="../prettify.js"></script>
583
583
  <script>
@@ -811,7 +811,7 @@ operation /users/{id}: {
811
811
  <div class='footer quiet pad2 space-top1 center small'>
812
812
  Code coverage generated by
813
813
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
814
- at 2026-05-17T13:20:54.468Z
814
+ at 2026-06-03T13:07:33.231Z
815
815
  </div>
816
816
  <script src="../prettify.js"></script>
817
817
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2026-05-17T13:20:54.468Z
104
+ at 2026-06-03T13:07:33.231Z
105
105
  </div>
106
106
  <script src="../prettify.js"></script>
107
107
  <script>
@@ -1 +1 @@
1
- {"version":3,"file":"codegen-operation.d.ts","sourceRoot":"","sources":["../src/codegen-operation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAgC,gBAAgB,EAA2B,MAAM,mBAAmB,CAAC;AAmC7H;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAkE5F;AAID,MAAM,WAAW,gBAAgB;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,qFAAqF;IACrF,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,yHAAyH;AACzH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAwEnF"}
1
+ {"version":3,"file":"codegen-operation.d.ts","sourceRoot":"","sources":["../src/codegen-operation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAgC,gBAAgB,EAA2B,MAAM,mBAAmB,CAAC;AAmC7H;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAkE5F;AAID,MAAM,WAAW,gBAAgB;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,qFAAqF;IACrF,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,yHAAyH;AACzH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CA4EnF"}
package/dist/index.js CHANGED
@@ -1193,6 +1193,9 @@ function generateOp(root, options = {}) {
1193
1193
  if (needsParseAndValidate) {
1194
1194
  body.push(`import { parseAndValidate } from '@maroonedsoftware/zod';`);
1195
1195
  }
1196
+ if (fileUsesMultipart(root)) {
1197
+ body.push(`import { MultipartBody } from '@maroonedsoftware/multipart';`);
1198
+ }
1196
1199
  const helpers = [];
1197
1200
  if (opNeedsScalar(root, "binary")) {
1198
1201
  helpers.push(`const _ZodBinary = z.custom<Buffer>((val) => Buffer.isBuffer(val), { error: 'Must be binary data' });`);
@@ -1711,6 +1714,10 @@ function fileNeedsSignature(root) {
1711
1714
  return root.routes.some((route) => route.operations.some((op) => !!op.signature));
1712
1715
  }
1713
1716
  __name(fileNeedsSignature, "fileNeedsSignature");
1717
+ function fileUsesMultipart(root) {
1718
+ return root.routes.some((route) => route.operations.some((op) => (op.request?.bodies ?? []).some((b) => b.contentType === "multipart/form-data")));
1719
+ }
1720
+ __name(fileUsesMultipart, "fileUsesMultipart");
1714
1721
  function isValidIdentifier2(name) {
1715
1722
  return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);
1716
1723
  }