@kubb/plugin-ts 5.0.0-alpha.4 → 5.0.0-alpha.5
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/dist/{components-CRjwjdyE.js → components-Cwn1rflQ.js} +9 -3
- package/dist/components-Cwn1rflQ.js.map +1 -0
- package/dist/{components-DI0aTIBg.cjs → components-CxTvawXI.cjs} +9 -3
- package/dist/components-CxTvawXI.cjs.map +1 -0
- package/dist/components.cjs +1 -1
- package/dist/components.d.ts +1 -1
- package/dist/components.js +1 -1
- package/dist/generators.cjs +1 -1
- package/dist/generators.d.ts +2 -3
- package/dist/generators.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/{plugin-Bgm8TNUt.js → plugin-kdQ5D2cW.js} +255 -70
- package/dist/plugin-kdQ5D2cW.js.map +1 -0
- package/dist/{plugin-DvK-Uhvv.cjs → plugin-meWNDVe7.cjs} +252 -67
- package/dist/plugin-meWNDVe7.cjs.map +1 -0
- package/dist/{types-aotMcdUB.d.ts → types-eWhVEVgF.d.ts} +11 -1
- package/package.json +8 -8
- package/src/components/v2/Type.tsx +15 -2
- package/src/factory.ts +12 -16
- package/src/generators/v2/typeGenerator.tsx +74 -107
- package/src/generators/v2/utils.ts +145 -0
- package/src/plugin.ts +11 -0
- package/src/printer.ts +15 -1
- package/src/types.ts +10 -0
- package/dist/components-CRjwjdyE.js.map +0 -1
- package/dist/components-DI0aTIBg.cjs.map +0 -1
- package/dist/plugin-Bgm8TNUt.js.map +0 -1
- package/dist/plugin-DvK-Uhvv.cjs.map +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import "./chunk--u3MIqq1.js";
|
|
2
|
-
import { A as keywordTypeNodes, C as createTypeDeclaration, D as createUnionDeclaration, E as createTypeReferenceNode, F as camelCase, I as pascalCase, M as syntaxKind, N as jsStringEscape, O as createUrlTemplateType, P as trimQuotes, S as createTypeAliasDeclaration, T as createTypeOperatorNode, _ as createPropertySignature, a as createArrayTypeNode, b as createTrue, c as createIdentifier, d as createIntersectionDeclaration, f as createLiteralTypeNode, g as createPrefixUnaryExpression, h as createOptionalTypeNode, i as createArrayDeclaration, j as modifiers, k as getUnknownType, l as createIndexSignature, m as createOmitDeclaration, n as SyntaxKind, o as createEnumDeclaration, p as createNumericLiteral, r as appendJSDocToNode, s as createFalse, t as Type$1, u as createIndexedAccessTypeNode, v as createRestTypeNode, w as createTypeLiteralNode, x as createTupleTypeNode, y as createStringLiteral } from "./components-
|
|
2
|
+
import { A as keywordTypeNodes, C as createTypeDeclaration, D as createUnionDeclaration, E as createTypeReferenceNode, F as camelCase, I as pascalCase, M as syntaxKind, N as jsStringEscape, O as createUrlTemplateType, P as trimQuotes, S as createTypeAliasDeclaration, T as createTypeOperatorNode, _ as createPropertySignature, a as createArrayTypeNode, b as createTrue, c as createIdentifier, d as createIntersectionDeclaration, f as createLiteralTypeNode, g as createPrefixUnaryExpression, h as createOptionalTypeNode, i as createArrayDeclaration, j as modifiers, k as getUnknownType, l as createIndexSignature, m as createOmitDeclaration, n as SyntaxKind, o as createEnumDeclaration, p as createNumericLiteral, r as appendJSDocToNode, s as createFalse, t as Type$1, u as createIndexedAccessTypeNode, v as createRestTypeNode, w as createTypeLiteralNode, x as createTupleTypeNode, y as createStringLiteral } from "./components-Cwn1rflQ.js";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import { collect, isPlainStringType, walk } from "@kubb/ast";
|
|
4
|
+
import { applyParamsCasing, collect, createProperty, createSchema, isPlainStringType, walk } from "@kubb/ast";
|
|
5
5
|
import { defineGenerator, definePlugin, definePrinter, getBarrelFiles, getMode, resolveOptions } from "@kubb/core";
|
|
6
6
|
import { OperationGenerator, SchemaGenerator, buildOperation, buildSchema, isKeyword, pluginOasName, schemaKeywords } from "@kubb/plugin-oas";
|
|
7
7
|
import { useKubb, useMode, usePluginManager } from "@kubb/core/hooks";
|
|
8
8
|
import { safePrint } from "@kubb/fabric-core/parsers/typescript";
|
|
9
9
|
import { createReactGenerator } from "@kubb/plugin-oas/generators";
|
|
10
10
|
import { useOas, useOperationManager, useSchemaManager } from "@kubb/plugin-oas/hooks";
|
|
11
|
-
import { applyParamsCasing, getBanner, getFooter, getImports, isParameterSchema } from "@kubb/plugin-oas/utils";
|
|
11
|
+
import { applyParamsCasing as applyParamsCasing$1, getBanner, getFooter, getImports, isParameterSchema } from "@kubb/plugin-oas/utils";
|
|
12
12
|
import { File } from "@kubb/react-fabric";
|
|
13
13
|
import ts from "typescript";
|
|
14
14
|
import { Fragment, jsx, jsxs } from "@kubb/react-fabric/jsx-runtime";
|
|
@@ -232,7 +232,7 @@ const typeGenerator$1 = createReactGenerator({
|
|
|
232
232
|
schemas.response
|
|
233
233
|
].flat().filter(Boolean);
|
|
234
234
|
const mapOperationSchema = ({ name, schema, description, keysToOmit, ...options }) => {
|
|
235
|
-
const transformedSchema = paramsCasing && isParameterSchema(name) ? applyParamsCasing(schema, paramsCasing) : schema;
|
|
235
|
+
const transformedSchema = paramsCasing && isParameterSchema(name) ? applyParamsCasing$1(schema, paramsCasing) : schema;
|
|
236
236
|
const tree = schemaGenerator.parse({
|
|
237
237
|
schema: transformedSchema,
|
|
238
238
|
name,
|
|
@@ -450,13 +450,17 @@ const printerTs = definePrinter((options) => ({
|
|
|
450
450
|
any: () => keywordTypeNodes.any,
|
|
451
451
|
unknown: () => keywordTypeNodes.unknown,
|
|
452
452
|
void: () => keywordTypeNodes.void,
|
|
453
|
+
never: () => keywordTypeNodes.never,
|
|
453
454
|
boolean: () => keywordTypeNodes.boolean,
|
|
454
455
|
null: () => keywordTypeNodes.null,
|
|
455
456
|
blob: () => createTypeReferenceNode("Blob", []),
|
|
456
457
|
string: () => keywordTypeNodes.string,
|
|
457
458
|
uuid: () => keywordTypeNodes.string,
|
|
458
459
|
email: () => keywordTypeNodes.string,
|
|
459
|
-
url: () =>
|
|
460
|
+
url: (node) => {
|
|
461
|
+
if (node.path) return createUrlTemplateType(node.path);
|
|
462
|
+
return keywordTypeNodes.string;
|
|
463
|
+
},
|
|
460
464
|
datetime: () => keywordTypeNodes.string,
|
|
461
465
|
number: () => keywordTypeNodes.number,
|
|
462
466
|
integer: () => keywordTypeNodes.number,
|
|
@@ -513,6 +517,7 @@ const printerTs = definePrinter((options) => ({
|
|
|
513
517
|
const addsQuestionToken = ["questionToken", "questionTokenAndUndefined"].includes(this.options.optionalType);
|
|
514
518
|
const { print } = this;
|
|
515
519
|
const propertyNodes = node.properties.map((prop) => {
|
|
520
|
+
if (this.options.mapper && Object.hasOwn(this.options.mapper, prop.name)) return this.options.mapper[prop.name];
|
|
516
521
|
const baseType = print(prop.schema) ?? keywordTypeNodes.unknown;
|
|
517
522
|
const type = buildPropertyType(prop.schema, baseType, this.options.optionalType);
|
|
518
523
|
return appendJSDocToNode({
|
|
@@ -533,7 +538,7 @@ const printerTs = definePrinter((options) => ({
|
|
|
533
538
|
}));
|
|
534
539
|
//#endregion
|
|
535
540
|
//#region src/components/v2/Type.tsx
|
|
536
|
-
function Type({ name, typedName, node, keysToOmit, optionalType, arrayType, syntaxType, enumType, enumKeyCasing, ...rest }) {
|
|
541
|
+
function Type({ name, typedName, node, keysToOmit, optionalType, arrayType, syntaxType, enumType, enumKeyCasing, mapper, ...rest }) {
|
|
537
542
|
const typeNodes = [];
|
|
538
543
|
const description = rest.description || node?.description;
|
|
539
544
|
const enumSchemaNodes = collect(node, { schema(n) {
|
|
@@ -542,7 +547,8 @@ function Type({ name, typedName, node, keysToOmit, optionalType, arrayType, synt
|
|
|
542
547
|
let type = printerTs({
|
|
543
548
|
optionalType,
|
|
544
549
|
arrayType,
|
|
545
|
-
enumType
|
|
550
|
+
enumType,
|
|
551
|
+
mapper
|
|
546
552
|
}).print(node);
|
|
547
553
|
if (!type) return;
|
|
548
554
|
if (["asConst", "asPascalConst"].includes(enumType) && enumSchemaNodes.length > 0) {
|
|
@@ -632,29 +638,175 @@ function Type({ name, typedName, node, keysToOmit, optionalType, arrayType, synt
|
|
|
632
638
|
})] });
|
|
633
639
|
}
|
|
634
640
|
//#endregion
|
|
641
|
+
//#region src/generators/v2/utils.ts
|
|
642
|
+
/**
|
|
643
|
+
* Builds an `ObjectSchemaNode` for a group of parameters (path/query/header).
|
|
644
|
+
* Each property is a `ref` schema pointing to the individually-resolved parameter type.
|
|
645
|
+
*/
|
|
646
|
+
function buildParamsSchema({ params, operationId, resolveName }) {
|
|
647
|
+
return createSchema({
|
|
648
|
+
type: "object",
|
|
649
|
+
properties: params.map((param) => createProperty({
|
|
650
|
+
name: param.name,
|
|
651
|
+
schema: createSchema({
|
|
652
|
+
type: "ref",
|
|
653
|
+
name: resolveName({
|
|
654
|
+
name: `${operationId} ${param.name}`,
|
|
655
|
+
type: "function"
|
|
656
|
+
}),
|
|
657
|
+
optional: !param.required
|
|
658
|
+
})
|
|
659
|
+
}))
|
|
660
|
+
});
|
|
661
|
+
}
|
|
662
|
+
/**
|
|
663
|
+
* Builds an `ObjectSchemaNode` representing the `<OperationId>Data` type:
|
|
664
|
+
* - `data` → request body ref (optional) or `never`
|
|
665
|
+
* - `pathParams` → inline object of path param refs, or `never`
|
|
666
|
+
* - `queryParams` → inline object of query param refs (optional), or `never`
|
|
667
|
+
* - `headerParams` → inline object of header param refs (optional), or `never`
|
|
668
|
+
* - `url` → Express-style template literal (plugin-ts extension, handled by printer)
|
|
669
|
+
*/
|
|
670
|
+
function buildDataSchemaNode({ node, resolveName }) {
|
|
671
|
+
const pathParams = node.parameters.filter((p) => p.in === "path");
|
|
672
|
+
const queryParams = node.parameters.filter((p) => p.in === "query");
|
|
673
|
+
const headerParams = node.parameters.filter((p) => p.in === "header");
|
|
674
|
+
return createSchema({
|
|
675
|
+
type: "object",
|
|
676
|
+
properties: [
|
|
677
|
+
createProperty({
|
|
678
|
+
name: "data",
|
|
679
|
+
schema: node.requestBody ? createSchema({
|
|
680
|
+
type: "ref",
|
|
681
|
+
name: resolveName({
|
|
682
|
+
name: `${node.operationId} MutationRequest`,
|
|
683
|
+
type: "function"
|
|
684
|
+
}),
|
|
685
|
+
optional: true
|
|
686
|
+
}) : createSchema({
|
|
687
|
+
type: "never",
|
|
688
|
+
optional: true
|
|
689
|
+
})
|
|
690
|
+
}),
|
|
691
|
+
createProperty({
|
|
692
|
+
name: "pathParams",
|
|
693
|
+
schema: pathParams.length > 0 ? buildParamsSchema({
|
|
694
|
+
params: pathParams,
|
|
695
|
+
operationId: node.operationId,
|
|
696
|
+
resolveName
|
|
697
|
+
}) : createSchema({
|
|
698
|
+
type: "never",
|
|
699
|
+
optional: true
|
|
700
|
+
})
|
|
701
|
+
}),
|
|
702
|
+
createProperty({
|
|
703
|
+
name: "queryParams",
|
|
704
|
+
schema: queryParams.length > 0 ? createSchema({
|
|
705
|
+
...buildParamsSchema({
|
|
706
|
+
params: queryParams,
|
|
707
|
+
operationId: node.operationId,
|
|
708
|
+
resolveName
|
|
709
|
+
}),
|
|
710
|
+
optional: true
|
|
711
|
+
}) : createSchema({
|
|
712
|
+
type: "never",
|
|
713
|
+
optional: true
|
|
714
|
+
})
|
|
715
|
+
}),
|
|
716
|
+
createProperty({
|
|
717
|
+
name: "headerParams",
|
|
718
|
+
schema: headerParams.length > 0 ? createSchema({
|
|
719
|
+
...buildParamsSchema({
|
|
720
|
+
params: headerParams,
|
|
721
|
+
operationId: node.operationId,
|
|
722
|
+
resolveName
|
|
723
|
+
}),
|
|
724
|
+
optional: true
|
|
725
|
+
}) : createSchema({
|
|
726
|
+
type: "never",
|
|
727
|
+
optional: true
|
|
728
|
+
})
|
|
729
|
+
}),
|
|
730
|
+
createProperty({
|
|
731
|
+
name: "url",
|
|
732
|
+
schema: createSchema({
|
|
733
|
+
type: "url",
|
|
734
|
+
path: node.path
|
|
735
|
+
})
|
|
736
|
+
})
|
|
737
|
+
]
|
|
738
|
+
});
|
|
739
|
+
}
|
|
740
|
+
/**
|
|
741
|
+
* Builds an `ObjectSchemaNode` representing `<OperationId>Responses` — keyed by HTTP status code.
|
|
742
|
+
*
|
|
743
|
+
* Example output:
|
|
744
|
+
* ```ts
|
|
745
|
+
* export type PlaceOrderPatchResponses = { 200: PlaceOrderPatch200; 405: PlaceOrderPatch405 }
|
|
746
|
+
* ```
|
|
747
|
+
*/
|
|
748
|
+
function buildResponsesSchemaNode({ node, resolveName }) {
|
|
749
|
+
const responsesWithSchema = node.responses.filter((res) => res.schema);
|
|
750
|
+
if (responsesWithSchema.length === 0) return null;
|
|
751
|
+
return createSchema({
|
|
752
|
+
type: "object",
|
|
753
|
+
properties: responsesWithSchema.map((res) => createProperty({
|
|
754
|
+
name: String(res.statusCode),
|
|
755
|
+
schema: createSchema({
|
|
756
|
+
type: "ref",
|
|
757
|
+
name: resolveName({
|
|
758
|
+
name: `${node.operationId} ${res.statusCode}`,
|
|
759
|
+
type: "function"
|
|
760
|
+
})
|
|
761
|
+
})
|
|
762
|
+
}))
|
|
763
|
+
});
|
|
764
|
+
}
|
|
765
|
+
/**
|
|
766
|
+
* Builds a `UnionSchemaNode` representing `<OperationId>Response` — all response types in union format.
|
|
767
|
+
*
|
|
768
|
+
* Example output:
|
|
769
|
+
* ```ts
|
|
770
|
+
* export type PlaceOrderPatchResponse = PlaceOrderPatch200 | PlaceOrderPatch405
|
|
771
|
+
* ```
|
|
772
|
+
*/
|
|
773
|
+
function buildResponseUnionSchemaNode({ node, resolveName }) {
|
|
774
|
+
const responsesWithSchema = node.responses.filter((res) => res.schema);
|
|
775
|
+
if (responsesWithSchema.length === 0) return null;
|
|
776
|
+
return createSchema({
|
|
777
|
+
type: "union",
|
|
778
|
+
members: responsesWithSchema.map((res) => createSchema({
|
|
779
|
+
type: "ref",
|
|
780
|
+
name: resolveName({
|
|
781
|
+
name: `${node.operationId} ${res.statusCode}`,
|
|
782
|
+
type: "function"
|
|
783
|
+
})
|
|
784
|
+
}))
|
|
785
|
+
});
|
|
786
|
+
}
|
|
787
|
+
//#endregion
|
|
635
788
|
//#region src/generators/v2/typeGenerator.tsx
|
|
636
789
|
const typeGenerator = defineGenerator({
|
|
637
790
|
name: "typescript",
|
|
638
791
|
type: "react",
|
|
639
792
|
Operation({ node, adapter, options }) {
|
|
640
|
-
const { enumType, enumKeyCasing, optionalType, arrayType, syntaxType } = options;
|
|
641
|
-
const {
|
|
793
|
+
const { enumType, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, mapper } = options;
|
|
794
|
+
const { mode, getFile, resolveName } = useKubb();
|
|
642
795
|
const file = getFile({
|
|
643
796
|
name: node.operationId,
|
|
644
|
-
pluginName: plugin.name,
|
|
645
797
|
extname: ".ts",
|
|
646
798
|
mode
|
|
647
799
|
});
|
|
800
|
+
const params = applyParamsCasing(node.parameters, paramsCasing);
|
|
648
801
|
function renderSchemaType({ node: schemaNode, name, typedName, description }) {
|
|
802
|
+
if (!schemaNode) return null;
|
|
649
803
|
const imports = adapter.getImports(schemaNode, (schemaName) => ({
|
|
650
804
|
name: resolveName({
|
|
651
805
|
name: schemaName,
|
|
652
|
-
pluginName: plugin.name,
|
|
653
806
|
type: "type"
|
|
654
807
|
}),
|
|
655
808
|
path: getFile({
|
|
656
809
|
name: schemaName,
|
|
657
|
-
pluginName: plugin.name,
|
|
658
810
|
extname: ".ts",
|
|
659
811
|
mode
|
|
660
812
|
}).path
|
|
@@ -677,63 +829,90 @@ const typeGenerator = defineGenerator({
|
|
|
677
829
|
enumKeyCasing,
|
|
678
830
|
optionalType,
|
|
679
831
|
arrayType,
|
|
680
|
-
syntaxType
|
|
832
|
+
syntaxType,
|
|
833
|
+
mapper
|
|
681
834
|
})] });
|
|
682
835
|
}
|
|
683
|
-
const paramTypes =
|
|
684
|
-
|
|
836
|
+
const paramTypes = params.map((param) => renderSchemaType({
|
|
837
|
+
node: param.schema,
|
|
838
|
+
name: resolveName({
|
|
685
839
|
name: `${node.operationId} ${param.name}`,
|
|
686
|
-
pluginName: plugin.name,
|
|
687
840
|
type: "function"
|
|
688
|
-
})
|
|
689
|
-
|
|
841
|
+
}),
|
|
842
|
+
typedName: resolveName({
|
|
690
843
|
name: `${node.operationId} ${param.name}`,
|
|
691
|
-
pluginName: plugin.name,
|
|
692
844
|
type: "type"
|
|
693
|
-
})
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
845
|
+
})
|
|
846
|
+
}));
|
|
847
|
+
const responseTypes = node.responses.filter((res) => res.schema).map((res) => renderSchemaType({
|
|
848
|
+
node: res.schema,
|
|
849
|
+
name: resolveName({
|
|
850
|
+
name: `${node.operationId} ${res.statusCode}`,
|
|
851
|
+
type: "function"
|
|
852
|
+
}),
|
|
853
|
+
typedName: resolveName({
|
|
854
|
+
name: `${node.operationId} ${res.statusCode}`,
|
|
855
|
+
type: "type"
|
|
856
|
+
}),
|
|
857
|
+
description: res.description
|
|
858
|
+
}));
|
|
859
|
+
const requestType = node.requestBody ? renderSchemaType({
|
|
860
|
+
node: node.requestBody,
|
|
861
|
+
name: resolveName({
|
|
862
|
+
name: `${node.operationId} MutationRequest`,
|
|
863
|
+
type: "function"
|
|
864
|
+
}),
|
|
865
|
+
typedName: resolveName({
|
|
866
|
+
name: `${node.operationId} MutationRequest`,
|
|
867
|
+
type: "type"
|
|
868
|
+
}),
|
|
869
|
+
description: node.requestBody.description
|
|
870
|
+
}) : null;
|
|
871
|
+
const dataType = renderSchemaType({
|
|
872
|
+
node: buildDataSchemaNode({
|
|
873
|
+
node: {
|
|
874
|
+
...node,
|
|
875
|
+
parameters: params
|
|
876
|
+
},
|
|
877
|
+
resolveName
|
|
878
|
+
}),
|
|
879
|
+
name: resolveName({
|
|
880
|
+
name: `${node.operationId} Data`,
|
|
881
|
+
type: "function"
|
|
882
|
+
}),
|
|
883
|
+
typedName: resolveName({
|
|
884
|
+
name: `${node.operationId} Data`,
|
|
885
|
+
type: "type"
|
|
886
|
+
})
|
|
699
887
|
});
|
|
700
|
-
const
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
type: "type"
|
|
714
|
-
}),
|
|
715
|
-
description: res.description
|
|
716
|
-
});
|
|
888
|
+
const responsesType = renderSchemaType({
|
|
889
|
+
node: buildResponsesSchemaNode({
|
|
890
|
+
node,
|
|
891
|
+
resolveName
|
|
892
|
+
}),
|
|
893
|
+
name: resolveName({
|
|
894
|
+
name: `${node.operationId} Responses`,
|
|
895
|
+
type: "function"
|
|
896
|
+
}),
|
|
897
|
+
typedName: resolveName({
|
|
898
|
+
name: `${node.operationId} Responses`,
|
|
899
|
+
type: "type"
|
|
900
|
+
})
|
|
717
901
|
});
|
|
718
|
-
const
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
902
|
+
const responseType = renderSchemaType({
|
|
903
|
+
node: buildResponseUnionSchemaNode({
|
|
904
|
+
node,
|
|
905
|
+
resolveName
|
|
906
|
+
}),
|
|
907
|
+
name: resolveName({
|
|
908
|
+
name: `${node.operationId} Response`,
|
|
723
909
|
type: "function"
|
|
724
|
-
})
|
|
725
|
-
|
|
726
|
-
name:
|
|
727
|
-
pluginName: plugin.name,
|
|
910
|
+
}),
|
|
911
|
+
typedName: resolveName({
|
|
912
|
+
name: `${node.operationId} Response`,
|
|
728
913
|
type: "type"
|
|
729
|
-
})
|
|
730
|
-
|
|
731
|
-
node: node.requestBody,
|
|
732
|
-
name: resolvedName,
|
|
733
|
-
typedName,
|
|
734
|
-
description: node.requestBody.description
|
|
735
|
-
});
|
|
736
|
-
})() : null;
|
|
914
|
+
})
|
|
915
|
+
});
|
|
737
916
|
return /* @__PURE__ */ jsxs(File, {
|
|
738
917
|
baseName: file.baseName,
|
|
739
918
|
path: file.path,
|
|
@@ -741,23 +920,24 @@ const typeGenerator = defineGenerator({
|
|
|
741
920
|
children: [
|
|
742
921
|
paramTypes,
|
|
743
922
|
responseTypes,
|
|
744
|
-
requestType
|
|
923
|
+
requestType,
|
|
924
|
+
dataType,
|
|
925
|
+
responsesType,
|
|
926
|
+
responseType
|
|
745
927
|
]
|
|
746
928
|
});
|
|
747
929
|
},
|
|
748
930
|
Schema({ node, adapter, options }) {
|
|
749
|
-
const { enumType, enumKeyCasing, syntaxType, optionalType, arrayType } = options;
|
|
750
|
-
const {
|
|
931
|
+
const { enumType, enumKeyCasing, syntaxType, optionalType, arrayType, mapper } = options;
|
|
932
|
+
const { mode, resolveName, getFile } = useKubb();
|
|
751
933
|
if (!node.name) return;
|
|
752
934
|
const imports = adapter.getImports(node, (schemaName) => ({
|
|
753
935
|
name: resolveName({
|
|
754
936
|
name: schemaName,
|
|
755
|
-
pluginName: plugin.name,
|
|
756
937
|
type: "type"
|
|
757
938
|
}),
|
|
758
939
|
path: getFile({
|
|
759
940
|
name: schemaName,
|
|
760
|
-
pluginName: plugin.name,
|
|
761
941
|
extname: ".ts",
|
|
762
942
|
mode
|
|
763
943
|
}).path
|
|
@@ -765,20 +945,17 @@ const typeGenerator = defineGenerator({
|
|
|
765
945
|
const isEnumSchema = node.type === "enum";
|
|
766
946
|
let typedName = resolveName({
|
|
767
947
|
name: node.name,
|
|
768
|
-
pluginName: plugin.name,
|
|
769
948
|
type: "type"
|
|
770
949
|
});
|
|
771
|
-
if (["asConst", "asPascalConst"].includes(enumType) && isEnumSchema) typedName
|
|
950
|
+
if (["asConst", "asPascalConst"].includes(enumType) && isEnumSchema) typedName += "Key";
|
|
772
951
|
const type = {
|
|
773
952
|
name: resolveName({
|
|
774
953
|
name: node.name,
|
|
775
|
-
pluginName: plugin.name,
|
|
776
954
|
type: "function"
|
|
777
955
|
}),
|
|
778
956
|
typedName,
|
|
779
957
|
file: getFile({
|
|
780
958
|
name: node.name,
|
|
781
|
-
pluginName: plugin.name,
|
|
782
959
|
extname: ".ts",
|
|
783
960
|
mode
|
|
784
961
|
})
|
|
@@ -804,7 +981,8 @@ const typeGenerator = defineGenerator({
|
|
|
804
981
|
enumKeyCasing,
|
|
805
982
|
optionalType,
|
|
806
983
|
arrayType,
|
|
807
|
-
syntaxType
|
|
984
|
+
syntaxType,
|
|
985
|
+
mapper
|
|
808
986
|
})]
|
|
809
987
|
});
|
|
810
988
|
}
|
|
@@ -919,6 +1097,13 @@ const pluginTs = definePlugin((options) => {
|
|
|
919
1097
|
await Promise.all(writeTasks);
|
|
920
1098
|
}
|
|
921
1099
|
}, { depth: "shallow" });
|
|
1100
|
+
const barrelFiles = await getBarrelFiles(this.fabric.files, {
|
|
1101
|
+
type: output.barrelType ?? "named",
|
|
1102
|
+
root,
|
|
1103
|
+
output,
|
|
1104
|
+
meta: { pluginName: this.plugin.name }
|
|
1105
|
+
});
|
|
1106
|
+
await this.upsertFile(...barrelFiles);
|
|
922
1107
|
return;
|
|
923
1108
|
}
|
|
924
1109
|
const oas = await this.getOas();
|
|
@@ -962,4 +1147,4 @@ const pluginTs = definePlugin((options) => {
|
|
|
962
1147
|
//#endregion
|
|
963
1148
|
export { typeGenerator$1 as i, pluginTsName as n, typeGenerator as r, pluginTs as t };
|
|
964
1149
|
|
|
965
|
-
//# sourceMappingURL=plugin-
|
|
1150
|
+
//# sourceMappingURL=plugin-kdQ5D2cW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-kdQ5D2cW.js","names":["factory.createUnionDeclaration","factory.createTypeReferenceNode","factory.createIdentifier","factory.createTypeAliasDeclaration","factory.createTypeLiteralNode","factory.createPropertySignature","factory.createIndexedAccessTypeNode","factory.createTypeOperatorNode","typeGenerator","applyParamsCasing","Type","factory.createLiteralTypeNode","factory.createTrue","factory.createFalse","factory.createPrefixUnaryExpression","factory.createNumericLiteral","factory.createStringLiteral","factory.createTypeReferenceNode","factory.createIdentifier","factory.createOptionalTypeNode","factory.createRestTypeNode","factory.createArrayTypeNode","factory.createTupleTypeNode","factory.createUnionDeclaration","factory.createIndexSignature","factory.createUrlTemplateType","factory.createIntersectionDeclaration","factory.createTypeLiteralNode","factory.createArrayDeclaration","factory.createPropertySignature","factory.appendJSDocToNode","factory.createTypeReferenceNode","factory.createIdentifier","factory.createArrayTypeNode","factory.createUnionDeclaration","factory.createTypeDeclaration","factory.createOmitDeclaration","factory.createEnumDeclaration","typeGenerator","typeGeneratorV2"],"sources":["../../../internals/utils/src/object.ts","../src/generators/typeGenerator.tsx","../src/printer.ts","../src/components/v2/Type.tsx","../src/generators/v2/utils.ts","../src/generators/v2/typeGenerator.tsx","../src/plugin.ts"],"sourcesContent":["import { trimQuotes } from './string.ts'\n\n/**\n * Serializes a primitive value to a JSON string literal, stripping any surrounding quote characters first.\n *\n * @example\n * stringify('hello') // '\"hello\"'\n * stringify('\"hello\"') // '\"hello\"'\n */\nexport function stringify(value: string | number | boolean | undefined): string {\n if (value === undefined || value === null) return '\"\"'\n return JSON.stringify(trimQuotes(value.toString()))\n}\n\n/**\n * Converts a plain object into a multiline key-value string suitable for embedding in generated code.\n * Nested objects are recursively stringified with indentation.\n *\n * @example\n * stringifyObject({ foo: 'bar', nested: { a: 1 } })\n * // 'foo: bar,\\nnested: {\\n a: 1\\n }'\n */\nexport function stringifyObject(value: Record<string, unknown>): string {\n const items = Object.entries(value)\n .map(([key, val]) => {\n if (val !== null && typeof val === 'object') {\n return `${key}: {\\n ${stringifyObject(val as Record<string, unknown>)}\\n }`\n }\n return `${key}: ${val}`\n })\n .filter(Boolean)\n return items.join(',\\n')\n}\n\n/**\n * Serializes plugin options for safe JSON transport.\n * Strips functions, symbols, and `undefined` values recursively.\n */\nexport function serializePluginOptions<TOptions extends object>(options: TOptions): TOptions {\n if (options === null || options === undefined) return {} as TOptions\n if (typeof options !== 'object') return options\n if (Array.isArray(options)) return options.map(serializePluginOptions) as unknown as TOptions\n\n const serialized: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(options)) {\n if (typeof value === 'function' || typeof value === 'symbol' || value === undefined) continue\n serialized[key] = value !== null && typeof value === 'object' ? serializePluginOptions(value as object) : value\n }\n return serialized as TOptions\n}\n\n/**\n * Converts a dot-notation path or string array into an optional-chaining accessor expression.\n *\n * @example\n * getNestedAccessor('pagination.next.id', 'lastPage')\n * // → \"lastPage?.['pagination']?.['next']?.['id']\"\n */\nexport function getNestedAccessor(param: string | string[], accessor: string): string | undefined {\n const parts = Array.isArray(param) ? param : param.split('.')\n if (parts.length === 0 || (parts.length === 1 && parts[0] === '')) return undefined\n return `${accessor}?.['${`${parts.join(\"']?.['\")}']`}`\n}\n","import { pascalCase } from '@internals/utils'\nimport type { PluginManager } from '@kubb/core'\nimport { useMode, usePluginManager } from '@kubb/core/hooks'\nimport { safePrint } from '@kubb/fabric-core/parsers/typescript'\nimport type { Operation } from '@kubb/oas'\nimport { isKeyword, type OperationSchemas, type OperationSchema as OperationSchemaType, SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'\nimport { createReactGenerator } from '@kubb/plugin-oas/generators'\nimport { useOas, useOperationManager, useSchemaManager } from '@kubb/plugin-oas/hooks'\nimport { applyParamsCasing, getBanner, getFooter, getImports, isParameterSchema } from '@kubb/plugin-oas/utils'\nimport { File } from '@kubb/react-fabric'\nimport ts from 'typescript'\nimport { Type } from '../components'\nimport * as factory from '../factory.ts'\nimport { createUrlTemplateType, getUnknownType, keywordTypeNodes } from '../factory.ts'\nimport { pluginTsName } from '../plugin.ts'\nimport type { PluginTs } from '../types'\n\nfunction printCombinedSchema({ name, schemas, pluginManager }: { name: string; schemas: OperationSchemas; pluginManager: PluginManager }): string {\n const properties: Record<string, ts.TypeNode> = {}\n\n if (schemas.response) {\n properties['response'] = factory.createUnionDeclaration({\n nodes: schemas.responses.map((res) => {\n const identifier = pluginManager.resolveName({\n name: res.name,\n pluginName: pluginTsName,\n type: 'function',\n })\n\n return factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }),\n })!\n }\n\n if (schemas.request) {\n const identifier = pluginManager.resolveName({\n name: schemas.request.name,\n pluginName: pluginTsName,\n type: 'function',\n })\n properties['request'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.pathParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.pathParams.name,\n pluginName: pluginTsName,\n type: 'function',\n })\n properties['pathParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.queryParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.queryParams.name,\n pluginName: pluginTsName,\n type: 'function',\n })\n properties['queryParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.headerParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.headerParams.name,\n pluginName: pluginTsName,\n type: 'function',\n })\n properties['headerParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.errors) {\n properties['errors'] = factory.createUnionDeclaration({\n nodes: schemas.errors.map((error) => {\n const identifier = pluginManager.resolveName({\n name: error.name,\n pluginName: pluginTsName,\n type: 'function',\n })\n\n return factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }),\n })!\n }\n\n const namespaceNode = factory.createTypeAliasDeclaration({\n name,\n type: factory.createTypeLiteralNode(\n Object.keys(properties)\n .map((key) => {\n const type = properties[key]\n if (!type) {\n return undefined\n }\n\n return factory.createPropertySignature({\n name: pascalCase(key),\n type,\n })\n })\n .filter(Boolean),\n ),\n modifiers: [factory.modifiers.export],\n })\n\n return safePrint(namespaceNode)\n}\n\nfunction printRequestSchema({\n baseName,\n operation,\n schemas,\n pluginManager,\n}: {\n baseName: string\n operation: Operation\n schemas: OperationSchemas\n pluginManager: PluginManager\n}): string {\n const name = pluginManager.resolveName({\n name: `${baseName} Request`,\n pluginName: pluginTsName,\n type: 'type',\n })\n\n const results: string[] = []\n\n // Generate DataRequest type\n const dataRequestProperties: ts.PropertySignature[] = []\n\n if (schemas.request) {\n const identifier = pluginManager.resolveName({\n name: schemas.request.name,\n pluginName: pluginTsName,\n type: 'type',\n })\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'data',\n questionToken: true,\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n }),\n )\n } else {\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'data',\n questionToken: true,\n type: keywordTypeNodes.never,\n }),\n )\n }\n\n // Add pathParams property\n if (schemas.pathParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.pathParams.name,\n pluginName: pluginTsName,\n type: 'type',\n })\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'pathParams',\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n }),\n )\n } else {\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'pathParams',\n questionToken: true,\n type: keywordTypeNodes.never,\n }),\n )\n }\n\n // Add queryParams property\n if (schemas.queryParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.queryParams.name,\n pluginName: pluginTsName,\n type: 'type',\n })\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'queryParams',\n questionToken: true,\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n }),\n )\n } else {\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'queryParams',\n questionToken: true,\n type: keywordTypeNodes.never,\n }),\n )\n }\n\n // Add headerParams property\n if (schemas.headerParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.headerParams.name,\n pluginName: pluginTsName,\n type: 'type',\n })\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'headerParams',\n questionToken: true,\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n }),\n )\n } else {\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'headerParams',\n questionToken: true,\n type: keywordTypeNodes.never,\n }),\n )\n }\n\n // Add url property with template literal type\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'url',\n type: createUrlTemplateType(operation.path),\n }),\n )\n\n const dataRequestNode = factory.createTypeAliasDeclaration({\n name,\n type: factory.createTypeLiteralNode(dataRequestProperties),\n modifiers: [factory.modifiers.export],\n })\n\n results.push(safePrint(dataRequestNode))\n\n return results.join('\\n\\n')\n}\n\nfunction printResponseSchema({\n baseName,\n schemas,\n pluginManager,\n unknownType,\n}: {\n baseName: string\n schemas: OperationSchemas\n pluginManager: PluginManager\n unknownType: PluginTs['resolvedOptions']['unknownType']\n}): string {\n const results: string[] = []\n\n const name = pluginManager.resolveName({\n name: `${baseName} ResponseData`,\n pluginName: pluginTsName,\n type: 'type',\n })\n\n // Generate Responses type (mapping status codes to response types)\n if (schemas.responses && schemas.responses.length > 0) {\n const responsesProperties: ts.PropertySignature[] = schemas.responses.map((res) => {\n const identifier = pluginManager.resolveName({\n name: res.name,\n pluginName: pluginTsName,\n type: 'type',\n })\n\n return factory.createPropertySignature({\n name: res.statusCode?.toString() ?? 'default',\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n })\n })\n\n const responsesNode = factory.createTypeAliasDeclaration({\n name: `${baseName}Responses`,\n type: factory.createTypeLiteralNode(responsesProperties),\n modifiers: [factory.modifiers.export],\n })\n\n results.push(safePrint(responsesNode))\n\n // Generate Response type (union via indexed access)\n const responseNode = factory.createTypeAliasDeclaration({\n name,\n type: factory.createIndexedAccessTypeNode(\n factory.createTypeReferenceNode(factory.createIdentifier(`${baseName}Responses`), undefined),\n factory.createTypeOperatorNode(\n ts.SyntaxKind.KeyOfKeyword,\n factory.createTypeReferenceNode(factory.createIdentifier(`${baseName}Responses`), undefined),\n ),\n ),\n modifiers: [factory.modifiers.export],\n })\n\n results.push(safePrint(responseNode))\n } else {\n const responseNode = factory.createTypeAliasDeclaration({\n name,\n modifiers: [factory.modifiers.export],\n type: getUnknownType(unknownType),\n })\n\n results.push(safePrint(responseNode))\n }\n\n return results.join('\\n\\n')\n}\n\nexport const typeGenerator = createReactGenerator<PluginTs>({\n name: 'typescript',\n Operation({ operation, generator, plugin }) {\n const {\n options,\n options: { mapper, enumType, enumKeyCasing, syntaxType, optionalType, arrayType, unknownType, paramsCasing },\n } = plugin\n\n const mode = useMode()\n const pluginManager = usePluginManager()\n\n const oas = useOas()\n const { getSchemas, getFile, getName, getGroup } = useOperationManager(generator)\n const schemaManager = useSchemaManager()\n\n const name = getName(operation, { type: 'type', pluginName: pluginTsName })\n\n const file = getFile(operation)\n const schemas = getSchemas(operation)\n const schemaGenerator = new SchemaGenerator(options, {\n fabric: generator.context.fabric,\n oas,\n events: generator.context.events,\n plugin,\n pluginManager,\n mode,\n override: options.override,\n })\n\n const operationSchemas = [schemas.pathParams, schemas.queryParams, schemas.headerParams, schemas.statusCodes, schemas.request, schemas.response]\n .flat()\n .filter(Boolean)\n\n const mapOperationSchema = ({ name, schema, description, keysToOmit, ...options }: OperationSchemaType) => {\n // Apply paramsCasing transformation to pathParams, queryParams, and headerParams (not response)\n const shouldTransform = paramsCasing && isParameterSchema(name)\n const transformedSchema = shouldTransform ? applyParamsCasing(schema, paramsCasing) : schema\n\n const tree = schemaGenerator.parse({ schema: transformedSchema, name, parentName: null })\n const imports = getImports(tree)\n const group = options.operation ? getGroup(options.operation) : undefined\n\n const type = {\n name: schemaManager.getName(name, { type: 'type' }),\n typedName: schemaManager.getName(name, { type: 'type' }),\n file: schemaManager.getFile(options.operationName || name, { group }),\n }\n\n return (\n <>\n {mode === 'split' &&\n imports.map((imp) => (\n <File.Import key={[name, imp.name, imp.path, imp.isTypeOnly].join('-')} root={file.path} path={imp.path} name={imp.name} isTypeOnly />\n ))}\n <Type\n name={type.name}\n typedName={type.typedName}\n description={description}\n tree={tree}\n schema={transformedSchema}\n mapper={mapper}\n enumType={enumType}\n enumKeyCasing={enumKeyCasing}\n optionalType={optionalType}\n arrayType={arrayType}\n keysToOmit={keysToOmit}\n syntaxType={syntaxType}\n />\n </>\n )\n }\n\n const responseName = schemaManager.getName(schemas.response.name, {\n type: 'type',\n })\n\n const combinedSchemaName = operation.method === 'get' ? `${name}Query` : `${name}Mutation`\n\n return (\n <File\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={getBanner({ oas, output: plugin.options.output, config: pluginManager.config })}\n footer={getFooter({ oas, output: plugin.options.output })}\n >\n {operationSchemas.map(mapOperationSchema)}\n\n {generator.context.UNSTABLE_NAMING ? (\n <>\n <File.Source name={`${name}Request`} isExportable isIndexable isTypeOnly>\n {printRequestSchema({ baseName: name, operation, schemas, pluginManager })}\n </File.Source>\n <File.Source name={responseName} isExportable isIndexable isTypeOnly>\n {printResponseSchema({ baseName: name, schemas, pluginManager, unknownType })}\n </File.Source>\n </>\n ) : (\n <File.Source name={combinedSchemaName} isExportable isIndexable isTypeOnly>\n {printCombinedSchema({ name: combinedSchemaName, schemas, pluginManager })}\n </File.Source>\n )}\n </File>\n )\n },\n Schema({ schema, plugin }) {\n const {\n options: { mapper, enumType, enumKeyCasing, syntaxType, optionalType, arrayType, output },\n } = plugin\n const mode = useMode()\n\n const oas = useOas()\n const pluginManager = usePluginManager()\n\n const { getName, getFile } = useSchemaManager()\n const imports = getImports(schema.tree)\n const schemaFromTree = schema.tree.find((item) => item.keyword === schemaKeywords.schema)\n\n let typedName = getName(schema.name, { type: 'type' })\n\n if (['asConst', 'asPascalConst'].includes(enumType) && schemaFromTree && isKeyword(schemaFromTree, schemaKeywords.enum)) {\n typedName = typedName += 'Key' //Suffix for avoiding collisions (https://github.com/kubb-labs/kubb/issues/1873)\n }\n\n const type = {\n name: getName(schema.name, { type: 'function' }),\n typedName,\n file: getFile(schema.name),\n }\n\n return (\n <File\n baseName={type.file.baseName}\n path={type.file.path}\n meta={type.file.meta}\n banner={getBanner({ oas, output, config: pluginManager.config })}\n footer={getFooter({ oas, output })}\n >\n {mode === 'split' &&\n imports.map((imp) => (\n <File.Import key={[schema.name, imp.path, imp.isTypeOnly].join('-')} root={type.file.path} path={imp.path} name={imp.name} isTypeOnly />\n ))}\n <Type\n name={type.name}\n typedName={type.typedName}\n description={schema.value.description}\n tree={schema.tree}\n schema={schema.value}\n mapper={mapper}\n enumType={enumType}\n enumKeyCasing={enumKeyCasing}\n optionalType={optionalType}\n arrayType={arrayType}\n syntaxType={syntaxType}\n />\n </File>\n )\n },\n})\n","import { jsStringEscape, stringify } from '@internals/utils'\nimport { isPlainStringType } from '@kubb/ast'\nimport type { ArraySchemaNode, SchemaNode } from '@kubb/ast/types'\nimport type { PrinterFactoryOptions } from '@kubb/core'\nimport { definePrinter } from '@kubb/core'\nimport type ts from 'typescript'\nimport * as factory from './factory.ts'\n\ntype TsOptions = {\n /**\n * @default `'questionToken'`\n */\n optionalType: 'questionToken' | 'undefined' | 'questionTokenAndUndefined'\n /**\n * @default `'array'`\n */\n arrayType: 'array' | 'generic'\n /**\n * @default `'inlineLiteral'`\n */\n enumType: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal' | 'inlineLiteral'\n /**\n * Custom property signatures that override specific object properties by name.\n */\n mapper?: Record<string, ts.PropertySignature>\n}\n\ntype TsPrinter = PrinterFactoryOptions<'typescript', TsOptions, ts.TypeNode>\n\nfunction constToTypeNode(value: string | number | boolean, format: 'string' | 'number' | 'boolean'): ts.TypeNode | undefined {\n if (format === 'boolean') {\n return factory.createLiteralTypeNode(value === true ? factory.createTrue() : factory.createFalse())\n }\n if (format === 'number' && typeof value === 'number') {\n if (value < 0) {\n return factory.createLiteralTypeNode(factory.createPrefixUnaryExpression(factory.SyntaxKind.MinusToken, factory.createNumericLiteral(Math.abs(value))))\n }\n return factory.createLiteralTypeNode(factory.createNumericLiteral(value))\n }\n return factory.createLiteralTypeNode(factory.createStringLiteral(String(value)))\n}\n\nfunction dateOrStringNode(node: { representation?: string }): ts.TypeNode {\n return node.representation === 'date' ? factory.createTypeReferenceNode(factory.createIdentifier('Date')) : factory.keywordTypeNodes.string\n}\n\nfunction buildMemberNodes(members: Array<SchemaNode> | undefined, print: (node: SchemaNode) => ts.TypeNode | null | undefined): Array<ts.TypeNode> {\n return (members ?? []).map(print).filter(Boolean) as Array<ts.TypeNode>\n}\n\nfunction buildTupleNode(node: ArraySchemaNode, print: (node: SchemaNode) => ts.TypeNode | null | undefined): ts.TypeNode | undefined {\n let items = (node.items ?? []).map(print).filter(Boolean) as Array<ts.TypeNode>\n\n const restNode = node.rest ? (print(node.rest) ?? undefined) : undefined\n const { min, max } = node\n\n if (max !== undefined) {\n items = items.slice(0, max)\n if (items.length < max && restNode) {\n items = [...items, ...Array(max - items.length).fill(restNode)]\n }\n }\n\n if (min !== undefined) {\n items = items.map((item, i) => (i >= min ? factory.createOptionalTypeNode(item) : item))\n }\n\n if (max === undefined && restNode) {\n items.push(factory.createRestTypeNode(factory.createArrayTypeNode(restNode)))\n }\n\n return factory.createTupleTypeNode(items)\n}\n\nfunction buildPropertyType(schema: SchemaNode, baseType: ts.TypeNode, optionalType: TsOptions['optionalType']): ts.TypeNode {\n const addsUndefined = ['undefined', 'questionTokenAndUndefined'].includes(optionalType)\n\n let type = baseType\n\n if (schema.nullable) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.null] }) as ts.TypeNode\n }\n\n if ((schema.nullish || schema.optional) && addsUndefined) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] }) as ts.TypeNode\n }\n\n return type\n}\n\nfunction buildPropertyJSDocComments(schema: SchemaNode): Array<string | undefined> {\n return [\n 'description' in schema && schema.description ? `@description ${jsStringEscape(schema.description as string)}` : undefined,\n 'deprecated' in schema && schema.deprecated ? '@deprecated' : undefined,\n 'min' in schema && schema.min !== undefined ? `@minLength ${schema.min}` : undefined,\n 'max' in schema && schema.max !== undefined ? `@maxLength ${schema.max}` : undefined,\n 'pattern' in schema && schema.pattern ? `@pattern ${schema.pattern}` : undefined,\n 'default' in schema && schema.default !== undefined\n ? `@default ${'primitive' in schema && schema.primitive === 'string' ? stringify(schema.default as string) : schema.default}`\n : undefined,\n 'example' in schema && schema.example !== undefined ? `@example ${schema.example}` : undefined,\n 'primitive' in schema && schema.primitive\n ? [`@type ${schema.primitive || 'unknown'}`, 'optional' in schema && schema.optional ? ' | undefined' : undefined].filter(Boolean).join('')\n : undefined,\n ]\n}\n\nfunction buildIndexSignatures(\n node: { additionalProperties?: SchemaNode | boolean; patternProperties?: Record<string, SchemaNode> },\n propertyCount: number,\n print: (node: SchemaNode) => ts.TypeNode | null | undefined,\n): Array<ts.TypeElement> {\n const elements: Array<ts.TypeElement> = []\n\n if (node.additionalProperties && node.additionalProperties !== true) {\n const additionalType = (print(node.additionalProperties as SchemaNode) ?? factory.keywordTypeNodes.unknown) as ts.TypeNode\n elements.push(factory.createIndexSignature(propertyCount > 0 ? factory.keywordTypeNodes.unknown : additionalType))\n } else if (node.additionalProperties === true) {\n elements.push(factory.createIndexSignature(factory.keywordTypeNodes.unknown))\n }\n\n if (node.patternProperties) {\n const first = Object.values(node.patternProperties)[0]\n if (first) {\n let patternType = (print(first) ?? factory.keywordTypeNodes.unknown) as ts.TypeNode\n if (first.nullable) {\n patternType = factory.createUnionDeclaration({ nodes: [patternType, factory.keywordTypeNodes.null] }) as ts.TypeNode\n }\n elements.push(factory.createIndexSignature(patternType))\n }\n }\n\n return elements\n}\n\n/**\n * Converts a `SchemaNode` AST node into a TypeScript `ts.TypeNode`.\n *\n * Built on `definePrinter` — dispatches on `node.type`, with options closed over\n * per printer instance. Produces the same `ts.TypeNode` output as the keyword-based\n * `parse` in `parser.ts`.\n */\nexport const printerTs = definePrinter<TsPrinter>((options) => ({\n name: 'typescript',\n options,\n nodes: {\n any: () => factory.keywordTypeNodes.any,\n unknown: () => factory.keywordTypeNodes.unknown,\n void: () => factory.keywordTypeNodes.void,\n never: () => factory.keywordTypeNodes.never,\n boolean: () => factory.keywordTypeNodes.boolean,\n null: () => factory.keywordTypeNodes.null,\n blob: () => factory.createTypeReferenceNode('Blob', []),\n string: () => factory.keywordTypeNodes.string,\n uuid: () => factory.keywordTypeNodes.string,\n email: () => factory.keywordTypeNodes.string,\n url: (node) => {\n if (node.path) {\n return factory.createUrlTemplateType(node.path)\n }\n return factory.keywordTypeNodes.string\n },\n datetime: () => factory.keywordTypeNodes.string,\n number: () => factory.keywordTypeNodes.number,\n integer: () => factory.keywordTypeNodes.number,\n bigint: () => factory.keywordTypeNodes.bigint,\n date: (node) => dateOrStringNode(node),\n time: (node) => dateOrStringNode(node),\n ref(node) {\n if (!node.name) {\n return undefined\n }\n return factory.createTypeReferenceNode(node.name, undefined)\n },\n enum(node) {\n const values = node.namedEnumValues?.map((v) => v.value) ?? node.enumValues ?? []\n\n if (this.options.enumType === 'inlineLiteral' || !node.name) {\n const literalNodes = values\n .filter((v): v is string | number | boolean => v !== null)\n .map((value) => constToTypeNode(value, typeof value === 'number' ? 'number' : typeof value === 'boolean' ? 'boolean' : 'string'))\n .filter(Boolean) as Array<ts.TypeNode>\n\n return factory.createUnionDeclaration({ withParentheses: true, nodes: literalNodes }) ?? undefined\n }\n\n const typeName = ['asConst', 'asPascalConst'].includes(this.options.enumType) ? `${node.name}Key` : node.name\n\n return factory.createTypeReferenceNode(typeName, undefined)\n },\n union(node) {\n const members = node.members ?? []\n\n const hasStringLiteral = members.some((m) => m.type === 'enum' && m.enumType === 'string')\n const hasPlainString = members.some((m) => isPlainStringType(m))\n\n if (hasStringLiteral && hasPlainString) {\n const nodes = members\n .map((m) => {\n if (isPlainStringType(m)) {\n return factory.createIntersectionDeclaration({\n nodes: [factory.keywordTypeNodes.string, factory.createTypeLiteralNode([])],\n withParentheses: true,\n }) as ts.TypeNode\n }\n\n return this.print(m)\n })\n .filter(Boolean) as Array<ts.TypeNode>\n\n return factory.createUnionDeclaration({ withParentheses: true, nodes }) ?? undefined\n }\n\n return factory.createUnionDeclaration({ withParentheses: true, nodes: buildMemberNodes(members, this.print) }) ?? undefined\n },\n intersection(node) {\n return factory.createIntersectionDeclaration({ withParentheses: true, nodes: buildMemberNodes(node.members, this.print) }) ?? undefined\n },\n array(node) {\n const itemNodes = (node.items ?? []).map((item) => this.print(item)).filter(Boolean) as Array<ts.TypeNode>\n\n return factory.createArrayDeclaration({ nodes: itemNodes, arrayType: this.options.arrayType }) ?? undefined\n },\n tuple(node) {\n return buildTupleNode(node, this.print)\n },\n object(node) {\n const addsQuestionToken = ['questionToken', 'questionTokenAndUndefined'].includes(this.options.optionalType)\n const { print } = this\n\n const propertyNodes: Array<ts.TypeElement> = node.properties.map((prop) => {\n if (this.options.mapper && Object.hasOwn(this.options.mapper, prop.name)) {\n return this.options.mapper[prop.name]!\n }\n\n const baseType = (print(prop.schema) ?? factory.keywordTypeNodes.unknown) as ts.TypeNode\n const type = buildPropertyType(prop.schema, baseType, this.options.optionalType)\n\n const propertyNode = factory.createPropertySignature({\n questionToken: prop.schema.optional || prop.schema.nullish ? addsQuestionToken : false,\n name: prop.name,\n type,\n readOnly: prop.schema.readOnly,\n })\n\n return factory.appendJSDocToNode({ node: propertyNode, comments: buildPropertyJSDocComments(prop.schema) })\n })\n\n const allElements = [...propertyNodes, ...buildIndexSignatures(node, propertyNodes.length, print)]\n\n if (!allElements.length) {\n return factory.keywordTypeNodes.object\n }\n\n return factory.createTypeLiteralNode(allElements)\n },\n },\n}))\n","import { camelCase, jsStringEscape, pascalCase, trimQuotes } from '@internals/utils'\nimport { collect } from '@kubb/ast'\nimport type { EnumSchemaNode, SchemaNode } from '@kubb/ast/types'\nimport { safePrint } from '@kubb/fabric-core/parsers/typescript'\nimport { File } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\nimport type ts from 'typescript'\nimport * as factory from '../../factory.ts'\nimport { printerTs } from '../../printer.ts'\nimport type { PluginTs } from '../../types.ts'\n\ntype Props = {\n name: string\n typedName: string\n node: SchemaNode\n optionalType: PluginTs['resolvedOptions']['optionalType']\n arrayType: PluginTs['resolvedOptions']['arrayType']\n enumType: PluginTs['resolvedOptions']['enumType']\n enumKeyCasing: PluginTs['resolvedOptions']['enumKeyCasing']\n syntaxType: PluginTs['resolvedOptions']['syntaxType']\n mapper?: PluginTs['resolvedOptions']['mapper']\n description?: string\n keysToOmit?: string[]\n}\n\nexport function Type({\n name,\n typedName,\n node,\n keysToOmit,\n optionalType,\n arrayType,\n syntaxType,\n enumType,\n enumKeyCasing,\n mapper,\n ...rest\n}: Props): FabricReactNode {\n const typeNodes: ts.Node[] = []\n\n const description = rest.description || node?.description\n const enumSchemaNodes = collect<EnumSchemaNode>(node, {\n schema(n): EnumSchemaNode | undefined {\n if (n.type === 'enum' && n.name) return n as EnumSchemaNode\n },\n })\n\n const printer = printerTs({ optionalType, arrayType, enumType, mapper })\n let type = printer.print(node)\n\n if (!type) {\n return\n }\n\n // Add a \"Key\" suffix to avoid collisions where necessary\n if (['asConst', 'asPascalConst'].includes(enumType) && enumSchemaNodes.length > 0) {\n const isDirectEnum = node.type === 'array' && node.items !== undefined\n const isEnumOnly = 'enum' in node && node.enum\n\n if (isDirectEnum || isEnumOnly) {\n const enumSchemaNode = enumSchemaNodes[0]!\n const typeNameWithKey = `${enumSchemaNode.name!}Key`\n\n type = factory.createTypeReferenceNode(typeNameWithKey)\n\n if (isDirectEnum) {\n if (arrayType === 'generic') {\n type = factory.createTypeReferenceNode(factory.createIdentifier('Array'), [type])\n } else {\n type = factory.createArrayTypeNode(type)\n }\n }\n }\n }\n\n if (node) {\n if (node.nullable) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.null],\n }) as ts.TypeNode\n }\n\n if (node.nullish && ['undefined', 'questionTokenAndUndefined'].includes(optionalType as string)) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.undefined],\n }) as ts.TypeNode\n }\n\n if (node.optional && ['undefined', 'questionTokenAndUndefined'].includes(optionalType as string)) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.undefined],\n }) as ts.TypeNode\n }\n }\n\n const useTypeGeneration = syntaxType === 'type' || [factory.syntaxKind.union].includes(type.kind as typeof factory.syntaxKind.union) || !!keysToOmit?.length\n\n typeNodes.push(\n factory.createTypeDeclaration({\n name,\n isExportable: true,\n type: keysToOmit?.length\n ? factory.createOmitDeclaration({\n keys: keysToOmit,\n type,\n nonNullable: true,\n })\n : type,\n syntax: useTypeGeneration ? 'type' : 'interface',\n comments: [\n node?.title ? `${jsStringEscape(node.title)}` : undefined,\n description ? `@description ${jsStringEscape(description)}` : undefined,\n node?.deprecated ? '@deprecated' : undefined,\n node && 'min' in node && node.min !== undefined ? `@minLength ${node.min}` : undefined,\n node && 'max' in node && node.max !== undefined ? `@maxLength ${node.max}` : undefined,\n node && 'pattern' in node && node.pattern ? `@pattern ${node.pattern}` : undefined,\n node?.default ? `@default ${node.default}` : undefined,\n node?.example ? `@example ${node.example}` : undefined,\n ],\n }),\n )\n\n const enums = [...new Map(enumSchemaNodes.map((n) => [n.name, n])).values()].map((enumSchemaNode) => {\n const enumName = enumType === 'asPascalConst' ? pascalCase(enumSchemaNode.name!) : camelCase(enumSchemaNode.name!)\n const typeName = ['asConst', 'asPascalConst'].includes(enumType) ? `${enumSchemaNode.name!}Key` : enumSchemaNode.name!\n\n const [nameNode, typeNode] = factory.createEnumDeclaration({\n name: enumName,\n typeName,\n enums: (enumSchemaNode.namedEnumValues?.map((v) => [trimQuotes(v.name.toString()), v.value]) ??\n enumSchemaNode.enumValues?.filter((v): v is NonNullable<typeof v> => v !== null && v !== undefined).map((v) => [trimQuotes(v.toString()), v]) ??\n []) as unknown as Array<[string, string]>,\n type: enumType,\n enumKeyCasing,\n })\n\n return {\n nameNode,\n typeNode,\n name: enumName,\n typeName,\n }\n })\n\n // Skip enum exports when using inlineLiteral\n const shouldExportEnums = enumType !== 'inlineLiteral'\n const shouldExportType = enumType === 'inlineLiteral' || enums.every((item) => item.typeName !== name)\n\n return (\n <>\n {shouldExportEnums &&\n enums.map(({ name: enumName, nameNode, typeName, typeNode }) => (\n <>\n {nameNode && (\n <File.Source name={enumName} isExportable isIndexable isTypeOnly={false}>\n {safePrint(nameNode)}\n </File.Source>\n )}\n {\n <File.Source\n name={typeName}\n isIndexable\n isExportable={['enum', 'asConst', 'asPascalConst', 'constEnum', 'literal', undefined].includes(enumType)}\n isTypeOnly={['asConst', 'asPascalConst', 'literal', undefined].includes(enumType)}\n >\n {safePrint(typeNode)}\n </File.Source>\n }\n </>\n ))}\n {shouldExportType && (\n <File.Source name={typedName} isTypeOnly isExportable isIndexable>\n {safePrint(...typeNodes)}\n </File.Source>\n )}\n </>\n )\n}\n","import { createProperty, createSchema } from '@kubb/ast'\nimport type { OperationNode, ParameterNode, SchemaNode } from '@kubb/ast/types'\n\ntype ResolveName = (opts: { name: string; type: 'type' | 'function' }) => string\n\ntype BuildParamsSchemaOptions = {\n params: Array<ParameterNode>\n operationId: string\n resolveName: ResolveName\n}\n\n/**\n * Builds an `ObjectSchemaNode` for a group of parameters (path/query/header).\n * Each property is a `ref` schema pointing to the individually-resolved parameter type.\n */\nexport function buildParamsSchema({ params, operationId, resolveName }: BuildParamsSchemaOptions): SchemaNode {\n return createSchema({\n type: 'object',\n properties: params.map((param) =>\n createProperty({\n name: param.name,\n schema: createSchema({\n type: 'ref',\n name: resolveName({ name: `${operationId} ${param.name}`, type: 'function' }),\n optional: !param.required,\n }),\n }),\n ),\n })\n}\n\ntype BuildOperationSchemaOptions = {\n node: OperationNode\n resolveName: ResolveName\n}\n\n/**\n * Builds an `ObjectSchemaNode` representing the `<OperationId>Data` type:\n * - `data` → request body ref (optional) or `never`\n * - `pathParams` → inline object of path param refs, or `never`\n * - `queryParams` → inline object of query param refs (optional), or `never`\n * - `headerParams` → inline object of header param refs (optional), or `never`\n * - `url` → Express-style template literal (plugin-ts extension, handled by printer)\n */\nexport function buildDataSchemaNode({ node, resolveName }: BuildOperationSchemaOptions): SchemaNode {\n const pathParams = node.parameters.filter((p) => p.in === 'path')\n const queryParams = node.parameters.filter((p) => p.in === 'query')\n const headerParams = node.parameters.filter((p) => p.in === 'header')\n\n return createSchema({\n type: 'object',\n properties: [\n createProperty({\n name: 'data',\n schema: node.requestBody\n ? createSchema({\n type: 'ref',\n name: resolveName({ name: `${node.operationId} MutationRequest`, type: 'function' }),\n optional: true,\n })\n : createSchema({ type: 'never', optional: true }),\n }),\n createProperty({\n name: 'pathParams',\n schema:\n pathParams.length > 0\n ? buildParamsSchema({ params: pathParams, operationId: node.operationId, resolveName })\n : createSchema({ type: 'never', optional: true }),\n }),\n createProperty({\n name: 'queryParams',\n schema:\n queryParams.length > 0\n ? createSchema({ ...buildParamsSchema({ params: queryParams, operationId: node.operationId, resolveName }), optional: true })\n : createSchema({ type: 'never', optional: true }),\n }),\n createProperty({\n name: 'headerParams',\n schema:\n headerParams.length > 0\n ? createSchema({ ...buildParamsSchema({ params: headerParams, operationId: node.operationId, resolveName }), optional: true })\n : createSchema({ type: 'never', optional: true }),\n }),\n createProperty({\n name: 'url',\n schema: createSchema({ type: 'url', path: node.path }),\n }),\n ],\n })\n}\n\n/**\n * Builds an `ObjectSchemaNode` representing `<OperationId>Responses` — keyed by HTTP status code.\n *\n * Example output:\n * ```ts\n * export type PlaceOrderPatchResponses = { 200: PlaceOrderPatch200; 405: PlaceOrderPatch405 }\n * ```\n */\nexport function buildResponsesSchemaNode({ node, resolveName }: BuildOperationSchemaOptions): SchemaNode | null {\n const responsesWithSchema = node.responses.filter((res) => res.schema)\n\n if (responsesWithSchema.length === 0) {\n return null\n }\n\n return createSchema({\n type: 'object',\n properties: responsesWithSchema.map((res) =>\n createProperty({\n name: String(res.statusCode),\n schema: createSchema({\n type: 'ref',\n name: resolveName({ name: `${node.operationId} ${res.statusCode}`, type: 'function' }),\n }),\n }),\n ),\n })\n}\n\n/**\n * Builds a `UnionSchemaNode` representing `<OperationId>Response` — all response types in union format.\n *\n * Example output:\n * ```ts\n * export type PlaceOrderPatchResponse = PlaceOrderPatch200 | PlaceOrderPatch405\n * ```\n */\nexport function buildResponseUnionSchemaNode({ node, resolveName }: BuildOperationSchemaOptions): SchemaNode | null {\n const responsesWithSchema = node.responses.filter((res) => res.schema)\n\n if (responsesWithSchema.length === 0) {\n return null\n }\n\n return createSchema({\n type: 'union',\n members: responsesWithSchema.map((res) =>\n createSchema({\n type: 'ref',\n name: resolveName({ name: `${node.operationId} ${res.statusCode}`, type: 'function' }),\n }),\n ),\n })\n}\n","import { applyParamsCasing } from '@kubb/ast'\nimport type { SchemaNode } from '@kubb/ast/types'\nimport { defineGenerator } from '@kubb/core'\nimport { useKubb } from '@kubb/core/hooks'\nimport { File } from '@kubb/react-fabric'\nimport { Type } from '../../components/v2/Type.tsx'\nimport type { PluginTs } from '../../types'\nimport { buildDataSchemaNode, buildResponsesSchemaNode, buildResponseUnionSchemaNode } from './utils.ts'\n\nexport const typeGenerator = defineGenerator<PluginTs>({\n name: 'typescript',\n type: 'react',\n Operation({ node, adapter, options }) {\n const { enumType, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, mapper } = options\n const { mode, getFile, resolveName } = useKubb<PluginTs>()\n\n const file = getFile({ name: node.operationId, extname: '.ts', mode })\n const params = applyParamsCasing(node.parameters, paramsCasing)\n\n function renderSchemaType({\n node: schemaNode,\n name,\n typedName,\n description,\n }: {\n node: SchemaNode | null\n name: string\n typedName: string\n description?: string\n }) {\n if (!schemaNode) {\n return null\n }\n\n const imports = adapter.getImports(schemaNode, (schemaName) => ({\n name: resolveName({ name: schemaName, type: 'type' }),\n path: getFile({ name: schemaName, extname: '.ts', mode }).path,\n }))\n\n return (\n <>\n {mode === 'split' &&\n imports.map((imp) => <File.Import key={[name, imp.path, imp.isTypeOnly].join('-')} root={file.path} path={imp.path} name={imp.name} isTypeOnly />)}\n <Type\n name={name}\n typedName={typedName}\n node={schemaNode}\n description={description}\n enumType={enumType}\n enumKeyCasing={enumKeyCasing}\n optionalType={optionalType}\n arrayType={arrayType}\n syntaxType={syntaxType}\n mapper={mapper}\n />\n </>\n )\n }\n\n const paramTypes = params.map((param) =>\n renderSchemaType({\n node: param.schema,\n name: resolveName({ name: `${node.operationId} ${param.name}`, type: 'function' }),\n typedName: resolveName({ name: `${node.operationId} ${param.name}`, type: 'type' }),\n }),\n )\n\n const responseTypes = node.responses\n .filter((res) => res.schema)\n .map((res) =>\n renderSchemaType({\n node: res.schema!,\n name: resolveName({ name: `${node.operationId} ${res.statusCode}`, type: 'function' }),\n typedName: resolveName({ name: `${node.operationId} ${res.statusCode}`, type: 'type' }),\n description: res.description,\n }),\n )\n\n const requestType = node.requestBody\n ? renderSchemaType({\n node: node.requestBody,\n name: resolveName({ name: `${node.operationId} MutationRequest`, type: 'function' }),\n typedName: resolveName({ name: `${node.operationId} MutationRequest`, type: 'type' }),\n description: node.requestBody.description,\n })\n : null\n\n const dataType = renderSchemaType({\n node: buildDataSchemaNode({ node: { ...node, parameters: params }, resolveName }),\n name: resolveName({ name: `${node.operationId} Data`, type: 'function' }),\n typedName: resolveName({ name: `${node.operationId} Data`, type: 'type' }),\n })\n\n const responsesType = renderSchemaType({\n node: buildResponsesSchemaNode({ node, resolveName }),\n name: resolveName({ name: `${node.operationId} Responses`, type: 'function' }),\n typedName: resolveName({ name: `${node.operationId} Responses`, type: 'type' }),\n })\n\n const responseType = renderSchemaType({\n node: buildResponseUnionSchemaNode({ node, resolveName }),\n name: resolveName({ name: `${node.operationId} Response`, type: 'function' }),\n typedName: resolveName({ name: `${node.operationId} Response`, type: 'type' }),\n })\n\n return (\n <File baseName={file.baseName} path={file.path} meta={file.meta}>\n {paramTypes}\n {responseTypes}\n {requestType}\n {dataType}\n {responsesType}\n {responseType}\n </File>\n )\n },\n Schema({ node, adapter, options }) {\n const { enumType, enumKeyCasing, syntaxType, optionalType, arrayType, mapper } = options\n const { mode, resolveName, getFile } = useKubb<PluginTs>()\n\n if (!node.name) {\n return\n }\n\n const imports = adapter.getImports(node, (schemaName) => ({\n name: resolveName({ name: schemaName, type: 'type' }),\n path: getFile({ name: schemaName, extname: '.ts', mode }).path,\n }))\n\n const isEnumSchema = node.type === 'enum'\n\n let typedName = resolveName({ name: node.name, type: 'type' })\n if (['asConst', 'asPascalConst'].includes(enumType) && isEnumSchema) {\n typedName += 'Key'\n }\n\n const type = {\n name: resolveName({ name: node.name, type: 'function' }),\n typedName,\n file: getFile({ name: node.name, extname: '.ts', mode }),\n } as const\n\n return (\n <File baseName={type.file.baseName} path={type.file.path} meta={type.file.meta}>\n {mode === 'split' &&\n imports.map((imp) => (\n <File.Import key={[node.name, imp.path, imp.isTypeOnly].join('-')} root={type.file.path} path={imp.path} name={imp.name} isTypeOnly />\n ))}\n <Type\n name={type.name}\n typedName={type.typedName}\n node={node}\n enumType={enumType}\n enumKeyCasing={enumKeyCasing}\n optionalType={optionalType}\n arrayType={arrayType}\n syntaxType={syntaxType}\n mapper={mapper}\n />\n </File>\n )\n },\n})\n","import path from 'node:path'\nimport { camelCase, pascalCase } from '@internals/utils'\nimport { walk } from '@kubb/ast'\nimport { definePlugin, type Group, getBarrelFiles, getMode, resolveOptions } from '@kubb/core'\nimport { buildOperation, buildSchema, OperationGenerator, pluginOasName, SchemaGenerator } from '@kubb/plugin-oas'\nimport { typeGenerator, typeGeneratorV2 } from './generators'\nimport type { PluginTs } from './types.ts'\n\nexport const pluginTsName = 'plugin-ts' satisfies PluginTs['name']\n\nexport const pluginTs = definePlugin<PluginTs>((options) => {\n const {\n output = { path: 'types', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n enumType = 'asConst',\n enumKeyCasing = 'none',\n enumSuffix = 'enum',\n dateType = 'string',\n integerType = 'number',\n unknownType = 'any',\n optionalType = 'questionToken',\n arrayType = 'array',\n emptySchemaType = unknownType,\n syntaxType = 'type',\n transformers = {},\n mapper = {},\n paramsCasing,\n generators = [typeGenerator, typeGeneratorV2].filter(Boolean),\n contentType,\n UNSTABLE_NAMING,\n } = options\n\n // @deprecated Will be removed in v5 when collisionDetection defaults to true\n const usedEnumNames = {}\n\n return {\n name: pluginTsName,\n options: {\n output,\n transformers,\n dateType,\n integerType,\n optionalType,\n arrayType,\n enumType,\n enumKeyCasing,\n enumSuffix,\n unknownType,\n emptySchemaType,\n syntaxType,\n group,\n override,\n mapper,\n paramsCasing,\n usedEnumNames,\n },\n pre: [pluginOasName],\n resolvePath(baseName, pathMode, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = pathMode ?? getMode(path.resolve(root, output.path))\n\n if (mode === 'single') {\n /**\n * when output is a file then we will always append to the same file(output file), see fileManager.addOrAppend\n * Other plugins then need to call addOrAppend instead of just add from the fileManager class\n */\n return path.resolve(root, output.path)\n }\n\n if (group && (options?.group?.path || options?.group?.tag)) {\n const groupName: Group['name'] = group?.name\n ? group.name\n : (ctx) => {\n if (group?.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n }\n\n return path.resolve(\n root,\n output.path,\n groupName({\n group: group.type === 'path' ? options.group.path! : options.group.tag!,\n }),\n baseName,\n )\n }\n\n return path.resolve(root, output.path, baseName)\n },\n resolveName(name, type) {\n const resolvedName = pascalCase(name, { isFile: type === 'file' })\n\n if (type) {\n return transformers?.name?.(resolvedName, type) || resolvedName\n }\n\n return resolvedName\n },\n async install() {\n const { config, fabric, plugin, adapter, rootNode, pluginManager, openInStudio } = this\n\n const root = path.resolve(config.root, config.output.path)\n const mode = getMode(path.resolve(root, output.path))\n\n if (adapter) {\n await openInStudio({ ast: true })\n\n await walk(\n rootNode,\n {\n async schema(schemaNode) {\n const writeTasks = generators.map(async (generator) => {\n if (generator.type === 'react' && generator.version === '2') {\n const options = resolveOptions(schemaNode, { options: plugin.options, exclude, include, override })\n\n if (options === null) {\n return\n }\n\n await buildSchema(schemaNode, {\n options,\n adapter,\n config,\n fabric,\n Component: generator.Schema,\n plugin,\n pluginManager,\n mode,\n version: generator.version,\n })\n }\n })\n\n await Promise.all(writeTasks)\n },\n async operation(operationNode) {\n const writeTasks = generators.map(async (generator) => {\n if (generator.type === 'react' && generator.version === '2') {\n const options = resolveOptions(operationNode, { options: plugin.options, exclude, include, override })\n\n if (options === null) {\n return\n }\n\n await buildOperation(operationNode, {\n options,\n adapter,\n config,\n fabric,\n Component: generator.Operation,\n plugin,\n pluginManager,\n mode,\n version: generator.version,\n })\n }\n })\n\n await Promise.all(writeTasks)\n },\n },\n { depth: 'shallow' },\n )\n\n const barrelFiles = await getBarrelFiles(this.fabric.files, {\n type: output.barrelType ?? 'named',\n root,\n output,\n meta: {\n pluginName: this.plugin.name,\n },\n })\n\n await this.upsertFile(...barrelFiles)\n\n return\n }\n\n // v1 flow\n\n const oas = await this.getOas()\n\n const schemaGenerator = new SchemaGenerator(this.plugin.options, {\n fabric: this.fabric,\n oas,\n pluginManager: this.pluginManager,\n events: this.events,\n plugin: this.plugin,\n contentType,\n include: undefined,\n override,\n mode,\n output: output.path,\n })\n\n const schemaFiles = await schemaGenerator.build(...generators)\n await this.upsertFile(...schemaFiles)\n\n const operationGenerator = new OperationGenerator(this.plugin.options, {\n fabric: this.fabric,\n oas,\n pluginManager: this.pluginManager,\n events: this.events,\n plugin: this.plugin,\n contentType,\n exclude,\n include,\n override,\n mode,\n UNSTABLE_NAMING,\n })\n\n const operationFiles = await operationGenerator.build(...generators)\n await this.upsertFile(...operationFiles)\n\n const barrelFiles = await getBarrelFiles(this.fabric.files, {\n type: output.barrelType ?? 'named',\n root,\n output,\n meta: {\n pluginName: this.plugin.name,\n },\n })\n\n await this.upsertFile(...barrelFiles)\n },\n }\n})\n"],"mappings":"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"}
|