@contractkit/plugin-typescript 0.16.1 → 0.17.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.
- package/.turbo/turbo-build$colon$ci.log +19 -35
- package/.turbo/turbo-test$colon$ci.log +36 -81
- package/CHANGELOG.md +17 -0
- package/coverage/clover.xml +747 -732
- package/coverage/coverage-final.json +8 -8
- package/coverage/index.html +18 -18
- package/coverage/src/codegen-contract.ts.html +429 -279
- package/coverage/src/codegen-operation.ts.html +183 -183
- package/coverage/src/codegen-plain-types.ts.html +1 -1
- package/coverage/src/codegen-sdk.ts.html +1 -1
- package/coverage/src/index.html +18 -18
- package/coverage/src/index.ts.html +1 -1
- package/coverage/src/path-utils.ts.html +1 -1
- package/coverage/src/ts-render.ts.html +1 -1
- package/coverage/tests/helpers.ts.html +18 -18
- package/coverage/tests/index.html +1 -1
- package/dist/codegen-contract.d.ts +23 -0
- package/dist/codegen-contract.d.ts.map +1 -1
- package/dist/index.js +36 -14
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/codegen-contract.ts +79 -29
- package/tests/codegen-contract.test.ts +38 -0
- package/tests/codegen-operation.test.ts +39 -0
- package/.turbo/turbo-build.log +0 -15
- package/.turbo/turbo-test.log +0 -19
|
@@ -886,7 +886,7 @@ function renderOutputField(field: FieldNode, outputCase: 'camel' | 'snake' | 'pa
|
|
|
886
886
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
887
887
|
Code coverage generated by
|
|
888
888
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
889
|
-
at 2026-
|
|
889
|
+
at 2026-05-01T17:30:37.719Z
|
|
890
890
|
</div>
|
|
891
891
|
<script src="../prettify.js"></script>
|
|
892
892
|
<script>
|
|
@@ -2782,7 +2782,7 @@ export function generateSdkAggregator(clients: SdkClientInfo[], sdkOptionsImport
|
|
|
2782
2782
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
2783
2783
|
Code coverage generated by
|
|
2784
2784
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2785
|
-
at 2026-
|
|
2785
|
+
at 2026-05-01T17:30:37.719Z
|
|
2786
2786
|
</div>
|
|
2787
2787
|
<script src="../prettify.js"></script>
|
|
2788
2788
|
<script>
|
package/coverage/src/index.html
CHANGED
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">77.
|
|
26
|
+
<span class="strong">77.16% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>1649/2137</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">73.
|
|
33
|
+
<span class="strong">73.68% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>1061/1440</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">81.
|
|
40
|
+
<span class="strong">81.4% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>267/328</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">79.06% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>1435/1815</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -80,17 +80,17 @@
|
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
82
|
<td class="file high" data-value="codegen-contract.ts"><a href="codegen-contract.ts.html">codegen-contract.ts</a></td>
|
|
83
|
-
<td data-value="87.
|
|
83
|
+
<td data-value="87.57" class="pic high">
|
|
84
84
|
<div class="chart"><div class="cover-fill" style="width: 87%"></div><div class="cover-empty" style="width: 13%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
-
<td data-value="87.
|
|
87
|
-
<td data-value="
|
|
88
|
-
<td data-value="81.
|
|
89
|
-
<td data-value="
|
|
90
|
-
<td data-value="
|
|
91
|
-
<td data-value="
|
|
92
|
-
<td data-value="88.
|
|
93
|
-
<td data-value="
|
|
86
|
+
<td data-value="87.57" class="pct high">87.57%</td>
|
|
87
|
+
<td data-value="652" class="abs high">571/652</td>
|
|
88
|
+
<td data-value="81.63" class="pct high">81.63%</td>
|
|
89
|
+
<td data-value="452" class="abs high">369/452</td>
|
|
90
|
+
<td data-value="89.91" class="pct high">89.91%</td>
|
|
91
|
+
<td data-value="119" class="abs high">107/119</td>
|
|
92
|
+
<td data-value="88.57" class="pct high">88.57%</td>
|
|
93
|
+
<td data-value="534" class="abs high">473/534</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
<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-
|
|
194
|
+
at 2026-05-01T17:30:37.719Z
|
|
195
195
|
</div>
|
|
196
196
|
<script src="../prettify.js"></script>
|
|
197
197
|
<script>
|
|
@@ -1345,7 +1345,7 @@ export function createTypescriptPlugin(config: TypescriptPluginConfig, rootDir:
|
|
|
1345
1345
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1346
1346
|
Code coverage generated by
|
|
1347
1347
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1348
|
-
at 2026-
|
|
1348
|
+
at 2026-05-01T17:30:37.719Z
|
|
1349
1349
|
</div>
|
|
1350
1350
|
<script src="../prettify.js"></script>
|
|
1351
1351
|
<script>
|
|
@@ -634,7 +634,7 @@ export function <span class="fstat-no" title="function not covered" >computePubl
|
|
|
634
634
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
635
635
|
Code coverage generated by
|
|
636
636
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
637
|
-
at 2026-
|
|
637
|
+
at 2026-05-01T17:30:37.719Z
|
|
638
638
|
</div>
|
|
639
639
|
<script src="../prettify.js"></script>
|
|
640
640
|
<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-
|
|
580
|
+
at 2026-05-01T17:30:37.719Z
|
|
581
581
|
</div>
|
|
582
582
|
<script src="../prettify.js"></script>
|
|
583
583
|
<script>
|
|
@@ -341,11 +341,11 @@
|
|
|
341
341
|
<span class="cline-any cline-neutral"> </span>
|
|
342
342
|
<span class="cline-any cline-neutral"> </span>
|
|
343
343
|
<span class="cline-any cline-neutral"> </span>
|
|
344
|
-
<span class="cline-any cline-yes">
|
|
344
|
+
<span class="cline-any cline-yes">847x</span>
|
|
345
345
|
<span class="cline-any cline-neutral"> </span>
|
|
346
346
|
<span class="cline-any cline-neutral"> </span>
|
|
347
347
|
<span class="cline-any cline-neutral"> </span>
|
|
348
|
-
<span class="cline-any cline-yes">
|
|
348
|
+
<span class="cline-any cline-yes">308x</span>
|
|
349
349
|
<span class="cline-any cline-neutral"> </span>
|
|
350
350
|
<span class="cline-any cline-neutral"> </span>
|
|
351
351
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -389,7 +389,7 @@
|
|
|
389
389
|
<span class="cline-any cline-neutral"> </span>
|
|
390
390
|
<span class="cline-any cline-neutral"> </span>
|
|
391
391
|
<span class="cline-any cline-neutral"> </span>
|
|
392
|
-
<span class="cline-any cline-yes">
|
|
392
|
+
<span class="cline-any cline-yes">242x</span>
|
|
393
393
|
<span class="cline-any cline-neutral"> </span>
|
|
394
394
|
<span class="cline-any cline-neutral"> </span>
|
|
395
395
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -401,7 +401,7 @@
|
|
|
401
401
|
<span class="cline-any cline-neutral"> </span>
|
|
402
402
|
<span class="cline-any cline-neutral"> </span>
|
|
403
403
|
<span class="cline-any cline-neutral"> </span>
|
|
404
|
-
<span class="cline-any cline-yes">
|
|
404
|
+
<span class="cline-any cline-yes">166x</span>
|
|
405
405
|
<span class="cline-any cline-neutral"> </span>
|
|
406
406
|
<span class="cline-any cline-neutral"> </span>
|
|
407
407
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -411,7 +411,7 @@
|
|
|
411
411
|
<span class="cline-any cline-neutral"> </span>
|
|
412
412
|
<span class="cline-any cline-neutral"> </span>
|
|
413
413
|
<span class="cline-any cline-neutral"> </span>
|
|
414
|
-
<span class="cline-any cline-yes">
|
|
414
|
+
<span class="cline-any cline-yes">132x</span>
|
|
415
415
|
<span class="cline-any cline-neutral"> </span>
|
|
416
416
|
<span class="cline-any cline-neutral"> </span>
|
|
417
417
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -461,18 +461,18 @@
|
|
|
461
461
|
<span class="cline-any cline-neutral"> </span>
|
|
462
462
|
<span class="cline-any cline-neutral"> </span>
|
|
463
463
|
<span class="cline-any cline-neutral"> </span>
|
|
464
|
-
<span class="cline-any cline-yes">
|
|
465
|
-
<span class="cline-any cline-yes">
|
|
466
|
-
<span class="cline-any cline-yes">
|
|
467
|
-
<span class="cline-any cline-yes">
|
|
468
|
-
<span class="cline-any cline-yes">
|
|
464
|
+
<span class="cline-any cline-yes">54x</span>
|
|
465
|
+
<span class="cline-any cline-yes">54x</span>
|
|
466
|
+
<span class="cline-any cline-yes">45x</span>
|
|
467
|
+
<span class="cline-any cline-yes">7x</span>
|
|
468
|
+
<span class="cline-any cline-yes">7x</span>
|
|
469
469
|
<span class="cline-any cline-neutral"> </span>
|
|
470
470
|
<span class="cline-any cline-neutral"> </span>
|
|
471
471
|
<span class="cline-any cline-neutral"> </span>
|
|
472
|
-
<span class="cline-any cline-yes">
|
|
473
|
-
<span class="cline-any cline-yes">
|
|
474
|
-
<span class="cline-any cline-yes">
|
|
475
|
-
<span class="cline-any cline-yes">
|
|
472
|
+
<span class="cline-any cline-yes">203x</span>
|
|
473
|
+
<span class="cline-any cline-yes">203x</span>
|
|
474
|
+
<span class="cline-any cline-yes">203x</span>
|
|
475
|
+
<span class="cline-any cline-yes">203x</span>
|
|
476
476
|
<span class="cline-any cline-neutral"> </span>
|
|
477
477
|
<span class="cline-any cline-neutral"> </span>
|
|
478
478
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -486,12 +486,12 @@
|
|
|
486
486
|
<span class="cline-any cline-neutral"> </span>
|
|
487
487
|
<span class="cline-any cline-neutral"> </span>
|
|
488
488
|
<span class="cline-any cline-neutral"> </span>
|
|
489
|
-
<span class="cline-any cline-yes">
|
|
490
|
-
<span class="cline-any cline-yes">
|
|
489
|
+
<span class="cline-any cline-yes">193x</span>
|
|
490
|
+
<span class="cline-any cline-yes">193x</span>
|
|
491
491
|
<span class="cline-any cline-neutral"> </span>
|
|
492
492
|
<span class="cline-any cline-neutral"> </span>
|
|
493
493
|
<span class="cline-any cline-neutral"> </span>
|
|
494
|
-
<span class="cline-any cline-yes">
|
|
494
|
+
<span class="cline-any cline-yes">187x</span>
|
|
495
495
|
<span class="cline-any cline-neutral"> </span>
|
|
496
496
|
<span class="cline-any cline-neutral"> </span>
|
|
497
497
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -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-
|
|
814
|
+
at 2026-05-01T17:30:37.719Z
|
|
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-
|
|
104
|
+
at 2026-05-01T17:30:37.719Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../prettify.js"></script>
|
|
107
107
|
<script>
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { ContractRootNode, ModelNode, ContractTypeNode, ObjectMode } from '@contractkit/core';
|
|
2
|
+
/**
|
|
3
|
+
* Maps a ContractKit object mode to its Zod constructor name.
|
|
4
|
+
*
|
|
5
|
+
* @returns `"z.strictObject"` | `"z.object"` | `"z.looseObject"`
|
|
6
|
+
*/
|
|
2
7
|
export declare function modeToWrapper(mode: ObjectMode): string;
|
|
3
8
|
export interface ContractCodegenContext {
|
|
4
9
|
/** Map from model name → absolute output file path */
|
|
@@ -18,7 +23,25 @@ export interface ContractCodegenContext {
|
|
|
18
23
|
* any of its field types (recursively) reference a model that has an Input variant.
|
|
19
24
|
*/
|
|
20
25
|
export declare function computeModelsWithInput(models: ModelNode[], externalModelsWithInput?: Set<string>): Set<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Generate a TypeScript module containing Zod schemas for every model in `root`.
|
|
28
|
+
*
|
|
29
|
+
* Emits up to three schemas per model when visibility modifiers are present:
|
|
30
|
+
* `ModelBase` (all fields), `Model` (read — no writeonly), `ModelInput` (write — no readonly).
|
|
31
|
+
*
|
|
32
|
+
* @param root - The parsed contract root node.
|
|
33
|
+
* @param context - Optional cross-file context for import resolution and Input/Output variant tracking.
|
|
34
|
+
* @returns The full TypeScript source as a string.
|
|
35
|
+
*/
|
|
21
36
|
export declare function generateContract(root: ContractRootNode, context?: ContractCodegenContext): string;
|
|
37
|
+
/**
|
|
38
|
+
* Render a ContractKit AST type node as a Zod schema expression string.
|
|
39
|
+
*
|
|
40
|
+
* @param parseCaseTransform - When set, generates a `.transform()` that remaps incoming keys from
|
|
41
|
+
* the given casing (`'snake'` | `'pascal'`) to camelCase for `inlineObject` types.
|
|
42
|
+
* @param defaultMode - Fallback object mode (`'strict'` | `'strip'` | `'loose'`) when the node
|
|
43
|
+
* doesn't specify its own mode.
|
|
44
|
+
*/
|
|
22
45
|
export declare function renderType(type: ContractTypeNode, parseCaseTransform?: 'snake' | 'pascal', defaultMode?: ObjectMode): string;
|
|
23
46
|
/**
|
|
24
47
|
* Like renderType, but substitutes model refs with their Input variant
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegen-contract.d.ts","sourceRoot":"","sources":["../src/codegen-contract.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,gBAAgB,EAChB,SAAS,EAET,gBAAgB,EAWhB,UAAU,EACb,MAAM,mBAAmB,CAAC;AAO3B,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAStD;AAID,MAAM,WAAW,sBAAsB;IACnC,sDAAsD;IACtD,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,6GAA6G;IAC7G,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAChC;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,uBAAuB,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAsCzH;AAkBD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAkEjG;AA+RD,wBAAgB,UAAU,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,WAAW,CAAC,EAAE,UAAU,GAAG,MAAM,CA6B5H;
|
|
1
|
+
{"version":3,"file":"codegen-contract.d.ts","sourceRoot":"","sources":["../src/codegen-contract.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,gBAAgB,EAChB,SAAS,EAET,gBAAgB,EAWhB,UAAU,EACb,MAAM,mBAAmB,CAAC;AAO3B;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAStD;AAID,MAAM,WAAW,sBAAsB;IACnC,sDAAsD;IACtD,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,6GAA6G;IAC7G,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAChC;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,uBAAuB,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAsCzH;AAkBD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAkEjG;AA+RD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,WAAW,CAAC,EAAE,UAAU,GAAG,MAAM,CA6B5H;AA0ND;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,GAAG,MAAM,CAuDvH;AA2BD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,GAAG,MAAM,CAsCvH;AA0CD,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAuB7E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAiBjE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAcpE;AAED,0EAA0E;AAC1E,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CA4BvG;AAmCD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CA6D/D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAgB3F;AAED,gGAAgG;AAChG,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
package/dist/index.js
CHANGED
|
@@ -506,12 +506,20 @@ function renderDiscriminatedUnion(u, parseCaseTransform, defaultMode) {
|
|
|
506
506
|
__name(renderDiscriminatedUnion, "renderDiscriminatedUnion");
|
|
507
507
|
function renderIntersection(i, parseCaseTransform, defaultMode) {
|
|
508
508
|
const [first, ...rest] = i.members;
|
|
509
|
-
if (first && first.kind === "ref" && rest.length > 0 && rest.every((m) => m.kind === "inlineObject")) {
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
509
|
+
if (first && first.kind === "ref" && rest.length > 0 && rest.every((m) => m.kind === "ref" || m.kind === "inlineObject")) {
|
|
510
|
+
let expr2 = first.name;
|
|
511
|
+
for (const member of rest) {
|
|
512
|
+
if (member.kind === "ref") {
|
|
513
|
+
expr2 += `.extend(${member.name}.shape)`;
|
|
514
|
+
} else {
|
|
515
|
+
const m = member;
|
|
516
|
+
const fieldLines = parseCaseTransform === "snake" ? renderFieldsAsSnakeCase(m.fields, defaultMode).map((l) => ` ${l}`).join("\n") : parseCaseTransform === "pascal" ? renderFieldsAsPascalCase(m.fields, defaultMode).map((l) => ` ${l}`).join("\n") : m.fields.flatMap((f) => renderField(f, defaultMode)).map((l) => ` ${l}`).join("\n");
|
|
517
|
+
expr2 += `.extend({
|
|
513
518
|
${fieldLines}
|
|
514
519
|
})`;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
return expr2;
|
|
515
523
|
}
|
|
516
524
|
let expr = renderType(first, parseCaseTransform, defaultMode);
|
|
517
525
|
for (const member of rest) {
|
|
@@ -582,13 +590,20 @@ function renderInputType(type, modelsWithInput, defaultMode) {
|
|
|
582
590
|
return `z.discriminatedUnion("${escapeString(type.discriminator)}", [${type.members.map((m) => renderInputType(m, modelsWithInput, defaultMode)).join(", ")}])`;
|
|
583
591
|
case "intersection": {
|
|
584
592
|
const [first, ...rest] = type.members;
|
|
585
|
-
if (first && first.kind === "ref" && rest.length > 0 && rest.every((m) => m.kind === "inlineObject")) {
|
|
586
|
-
|
|
587
|
-
const
|
|
588
|
-
|
|
589
|
-
|
|
593
|
+
if (first && first.kind === "ref" && rest.length > 0 && rest.every((m) => m.kind === "ref" || m.kind === "inlineObject")) {
|
|
594
|
+
let expr2 = modelsWithInput?.has(first.name) ? `${first.name}Input` : first.name;
|
|
595
|
+
for (const member of rest) {
|
|
596
|
+
if (member.kind === "ref") {
|
|
597
|
+
const name = modelsWithInput?.has(member.name) ? `${member.name}Input` : member.name;
|
|
598
|
+
expr2 += `.extend(${name}.shape)`;
|
|
599
|
+
} else {
|
|
600
|
+
const fieldLines = member.fields.map((f) => ` ${renderInputField(f, modelsWithInput ?? /* @__PURE__ */ new Set(), defaultMode)}`).join("\n");
|
|
601
|
+
expr2 += `.extend({
|
|
590
602
|
${fieldLines}
|
|
591
603
|
})`;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
return expr2;
|
|
592
607
|
}
|
|
593
608
|
let expr = renderInputType(first, modelsWithInput, defaultMode);
|
|
594
609
|
for (const member of rest) {
|
|
@@ -643,13 +658,20 @@ ${fields}
|
|
|
643
658
|
}
|
|
644
659
|
case "intersection": {
|
|
645
660
|
const [first, ...rest] = type.members;
|
|
646
|
-
if (first && first.kind === "ref" && rest.length > 0 && rest.every((m) => m.kind === "inlineObject")) {
|
|
647
|
-
|
|
648
|
-
const
|
|
649
|
-
|
|
650
|
-
|
|
661
|
+
if (first && first.kind === "ref" && rest.length > 0 && rest.every((m) => m.kind === "ref" || m.kind === "inlineObject")) {
|
|
662
|
+
let expr2 = modelsWithInput?.has(first.name) ? `${first.name}Input` : first.name;
|
|
663
|
+
for (const member of rest) {
|
|
664
|
+
if (member.kind === "ref") {
|
|
665
|
+
const name = modelsWithInput?.has(member.name) ? `${member.name}Input` : member.name;
|
|
666
|
+
expr2 += `.extend(${name}.shape)`;
|
|
667
|
+
} else {
|
|
668
|
+
const fieldLines = member.fields.map((f) => ` ${renderQueryField(f, modelsWithInput, defaultMode)}`).join("\n");
|
|
669
|
+
expr2 += `.extend({
|
|
651
670
|
${fieldLines}
|
|
652
671
|
})`;
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
return expr2;
|
|
653
675
|
}
|
|
654
676
|
let expr = renderQueryType(first, modelsWithInput, defaultMode);
|
|
655
677
|
for (const member of rest) {
|