@kubb/plugin-ts 5.0.0-alpha.20 → 5.0.0-alpha.21
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/Type-B6fo0gSk.js +120 -0
- package/dist/Type-B6fo0gSk.js.map +1 -0
- package/dist/Type-oFwUfkZv.cjs +131 -0
- package/dist/Type-oFwUfkZv.cjs.map +1 -0
- package/dist/builderTs-Cd3juc2G.cjs +120 -0
- package/dist/builderTs-Cd3juc2G.cjs.map +1 -0
- package/dist/builderTs-DausqHpc.js +116 -0
- package/dist/builderTs-DausqHpc.js.map +1 -0
- package/dist/builders.cjs +3 -0
- package/dist/builders.d.ts +8 -0
- package/dist/builders.js +2 -0
- package/dist/{casing-Cp-jbC_k.js → casing-BJHFg-zZ.js} +1 -1
- package/dist/{casing-Cp-jbC_k.js.map → casing-BJHFg-zZ.js.map} +1 -1
- package/dist/{casing-D2uQKLWS.cjs → casing-DHfdqpLi.cjs} +2 -39
- package/dist/{casing-D2uQKLWS.cjs.map → casing-DHfdqpLi.cjs.map} +1 -1
- package/dist/chunk-ByKO4r7w.cjs +38 -0
- package/dist/components.cjs +1 -1
- package/dist/components.d.ts +1 -2
- package/dist/components.js +1 -1
- package/dist/generators-ByK18qUn.js +551 -0
- package/dist/generators-ByK18qUn.js.map +1 -0
- package/dist/{generators-xHWQCNd9.cjs → generators-aSsiTfUO.cjs} +296 -293
- package/dist/generators-aSsiTfUO.cjs.map +1 -0
- package/dist/generators.cjs +2 -1
- package/dist/generators.d.ts +5 -2
- package/dist/generators.js +2 -2
- package/dist/index.cjs +38 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +36 -35
- package/dist/index.js.map +1 -1
- package/dist/{Type-CMC7L-38.js → printerTs-BgZucv4T.js} +18 -130
- package/dist/printerTs-BgZucv4T.js.map +1 -0
- package/dist/{Type-B70QnSzH.cjs → printerTs-CFXc_LpP.cjs} +40 -133
- package/dist/printerTs-CFXc_LpP.cjs.map +1 -0
- package/dist/printers.cjs +3 -0
- package/dist/printers.d.ts +75 -0
- package/dist/printers.js +2 -0
- package/dist/{resolvers-DsKabI0F.js → resolverTsLegacy-DLl854-P.js} +8 -7
- package/dist/resolverTsLegacy-DLl854-P.js.map +1 -0
- package/dist/{resolvers-YIpeP5YD.cjs → resolverTsLegacy-sJ16Iqrl.cjs} +9 -7
- package/dist/resolverTsLegacy-sJ16Iqrl.cjs.map +1 -0
- package/dist/resolvers.cjs +3 -3
- package/dist/resolvers.d.ts +1 -1
- package/dist/resolvers.js +1 -1
- package/dist/{types-zqLMbIqZ.d.ts → types-BcyuFDn9.d.ts} +26 -22
- package/package.json +17 -5
- package/src/builders/builderTs.ts +92 -0
- package/src/builders/index.ts +1 -0
- package/src/components/Type.tsx +4 -6
- package/src/factory.ts +0 -32
- package/src/generators/index.ts +1 -0
- package/src/generators/typeGenerator.tsx +49 -140
- package/src/generators/typeGeneratorLegacy.tsx +345 -0
- package/src/index.ts +1 -1
- package/src/plugin.ts +15 -44
- package/src/presets.ts +10 -7
- package/src/printers/index.ts +1 -0
- package/src/{printer.ts → printers/printerTs.ts} +20 -16
- package/src/resolvers/resolverTs.ts +7 -4
- package/src/resolvers/resolverTsLegacy.ts +1 -1
- package/src/types.ts +39 -21
- package/dist/Type-B70QnSzH.cjs.map +0 -1
- package/dist/Type-CMC7L-38.js.map +0 -1
- package/dist/generators-BFkr7ecU.js +0 -556
- package/dist/generators-BFkr7ecU.js.map +0 -1
- package/dist/generators-xHWQCNd9.cjs.map +0 -1
- package/dist/resolvers-DsKabI0F.js.map +0 -1
- package/dist/resolvers-YIpeP5YD.cjs.map +0 -1
- package/src/generators/utils.ts +0 -308
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { createProperty, createSchema } from '@kubb/ast'
|
|
2
|
+
import { defineBuilder } from '@kubb/core'
|
|
3
|
+
import type { PluginTs } from '../types.ts'
|
|
4
|
+
|
|
5
|
+
export const builderTs = defineBuilder<PluginTs>(() => ({
|
|
6
|
+
name: 'default',
|
|
7
|
+
buildParams({ params, node, resolver }) {
|
|
8
|
+
return createSchema({
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: params.map((param) =>
|
|
11
|
+
createProperty({
|
|
12
|
+
name: param.name,
|
|
13
|
+
required: param.required,
|
|
14
|
+
schema: createSchema({
|
|
15
|
+
type: 'ref',
|
|
16
|
+
name: resolver.resolveParamName(node, param),
|
|
17
|
+
}),
|
|
18
|
+
}),
|
|
19
|
+
),
|
|
20
|
+
})
|
|
21
|
+
},
|
|
22
|
+
buildData({ node, resolver }) {
|
|
23
|
+
const pathParams = node.parameters.filter((p) => p.in === 'path')
|
|
24
|
+
const queryParams = node.parameters.filter((p) => p.in === 'query')
|
|
25
|
+
const headerParams = node.parameters.filter((p) => p.in === 'header')
|
|
26
|
+
|
|
27
|
+
return createSchema({
|
|
28
|
+
type: 'object',
|
|
29
|
+
deprecated: node.deprecated,
|
|
30
|
+
properties: [
|
|
31
|
+
createProperty({
|
|
32
|
+
name: 'data',
|
|
33
|
+
schema: node.requestBody?.schema
|
|
34
|
+
? createSchema({ type: 'ref', name: resolver.resolveDataTypedName(node), optional: true })
|
|
35
|
+
: createSchema({ type: 'never', optional: true }),
|
|
36
|
+
}),
|
|
37
|
+
createProperty({
|
|
38
|
+
name: 'pathParams',
|
|
39
|
+
required: pathParams.length > 0,
|
|
40
|
+
schema: pathParams.length > 0 ? this.buildParams({ params: pathParams, node, resolver }) : createSchema({ type: 'never' }),
|
|
41
|
+
}),
|
|
42
|
+
createProperty({
|
|
43
|
+
name: 'queryParams',
|
|
44
|
+
schema:
|
|
45
|
+
queryParams.length > 0
|
|
46
|
+
? createSchema({ ...this.buildParams({ params: queryParams, node, resolver }), optional: true })
|
|
47
|
+
: createSchema({ type: 'never', optional: true }),
|
|
48
|
+
}),
|
|
49
|
+
createProperty({
|
|
50
|
+
name: 'headerParams',
|
|
51
|
+
schema:
|
|
52
|
+
headerParams.length > 0
|
|
53
|
+
? createSchema({ ...this.buildParams({ params: headerParams, node, resolver }), optional: true })
|
|
54
|
+
: createSchema({ type: 'never', optional: true }),
|
|
55
|
+
}),
|
|
56
|
+
createProperty({
|
|
57
|
+
name: 'url',
|
|
58
|
+
required: true,
|
|
59
|
+
schema: createSchema({ type: 'url', path: node.path }),
|
|
60
|
+
}),
|
|
61
|
+
],
|
|
62
|
+
})
|
|
63
|
+
},
|
|
64
|
+
buildResponses({ node, resolver }) {
|
|
65
|
+
if (node.responses.length === 0) {
|
|
66
|
+
return null
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return createSchema({
|
|
70
|
+
type: 'object',
|
|
71
|
+
properties: node.responses.map((res) =>
|
|
72
|
+
createProperty({
|
|
73
|
+
name: String(res.statusCode),
|
|
74
|
+
required: true,
|
|
75
|
+
schema: createSchema({ type: 'ref', name: resolver.resolveResponseStatusTypedName(node, res.statusCode) }),
|
|
76
|
+
}),
|
|
77
|
+
),
|
|
78
|
+
})
|
|
79
|
+
},
|
|
80
|
+
buildResponseUnion({ node, resolver }) {
|
|
81
|
+
const responsesWithSchema = node.responses.filter((res) => res.schema)
|
|
82
|
+
|
|
83
|
+
if (responsesWithSchema.length === 0) {
|
|
84
|
+
return null
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return createSchema({
|
|
88
|
+
type: 'union',
|
|
89
|
+
members: responsesWithSchema.map((res) => createSchema({ type: 'ref', name: resolver.resolveResponseStatusTypedName(node, res.statusCode) })),
|
|
90
|
+
})
|
|
91
|
+
},
|
|
92
|
+
}))
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { builderTs } from './builderTs.ts'
|
package/src/components/Type.tsx
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { collect, narrowSchema, schemaTypes } from '@kubb/ast'
|
|
2
2
|
import type { EnumSchemaNode, SchemaNode } from '@kubb/ast/types'
|
|
3
|
-
import { safePrint } from '@kubb/fabric-core/parsers/typescript'
|
|
4
3
|
import { File } from '@kubb/react-fabric'
|
|
5
4
|
import type { FabricReactNode } from '@kubb/react-fabric/types'
|
|
6
|
-
import { printerTs } from '../
|
|
5
|
+
import { printerTs } from '../printers/printerTs.ts'
|
|
7
6
|
import type { PluginTs } from '../types.ts'
|
|
8
7
|
import { Enum, getEnumNames } from './Enum.tsx'
|
|
9
8
|
|
|
@@ -17,7 +16,6 @@ type Props = {
|
|
|
17
16
|
enumKeyCasing: PluginTs['resolvedOptions']['enumKeyCasing']
|
|
18
17
|
syntaxType: PluginTs['resolvedOptions']['syntaxType']
|
|
19
18
|
resolver: PluginTs['resolvedOptions']['resolver']
|
|
20
|
-
legacy?: boolean
|
|
21
19
|
description?: string
|
|
22
20
|
keysToOmit?: string[]
|
|
23
21
|
}
|
|
@@ -44,9 +42,9 @@ export function Type({
|
|
|
44
42
|
})
|
|
45
43
|
|
|
46
44
|
const printer = printerTs({ optionalType, arrayType, enumType, typeName: name, syntaxType, description: resolvedDescription, keysToOmit, resolver })
|
|
47
|
-
const
|
|
45
|
+
const output = printer.print(node)
|
|
48
46
|
|
|
49
|
-
if (!
|
|
47
|
+
if (!output) {
|
|
50
48
|
return
|
|
51
49
|
}
|
|
52
50
|
|
|
@@ -66,7 +64,7 @@ export function Type({
|
|
|
66
64
|
{shouldExportEnums && enums.map(({ node }) => <Enum node={node} enumType={enumType} enumKeyCasing={enumKeyCasing} resolver={resolver} />)}
|
|
67
65
|
{shouldExportType && (
|
|
68
66
|
<File.Source name={typedName} isTypeOnly isExportable isIndexable>
|
|
69
|
-
{
|
|
67
|
+
{output}
|
|
70
68
|
</File.Source>
|
|
71
69
|
)}
|
|
72
70
|
</>
|
package/src/factory.ts
CHANGED
|
@@ -19,16 +19,6 @@ export const syntaxKind = {
|
|
|
19
19
|
stringLiteral: SyntaxKind.StringLiteral,
|
|
20
20
|
} as const
|
|
21
21
|
|
|
22
|
-
export function getUnknownType(unknownType: 'any' | 'unknown' | 'void' | undefined) {
|
|
23
|
-
if (unknownType === 'any') {
|
|
24
|
-
return keywordTypeNodes.any
|
|
25
|
-
}
|
|
26
|
-
if (unknownType === 'void') {
|
|
27
|
-
return keywordTypeNodes.void
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
return keywordTypeNodes.unknown
|
|
31
|
-
}
|
|
32
22
|
function isValidIdentifier(str: string): boolean {
|
|
33
23
|
if (!str.length || str.trim() !== str) {
|
|
34
24
|
return false
|
|
@@ -76,28 +66,6 @@ export function createIntersectionDeclaration({ nodes, withParentheses }: { node
|
|
|
76
66
|
return node
|
|
77
67
|
}
|
|
78
68
|
|
|
79
|
-
/**
|
|
80
|
-
* Minimum nodes length of 2
|
|
81
|
-
* @example `string & number`
|
|
82
|
-
*/
|
|
83
|
-
export function createTupleDeclaration({ nodes, withParentheses }: { nodes: Array<ts.TypeNode>; withParentheses?: boolean }): ts.TypeNode | null {
|
|
84
|
-
if (!nodes.length) {
|
|
85
|
-
return null
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (nodes.length === 1) {
|
|
89
|
-
return nodes[0] || null
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const node = factory.createTupleTypeNode(nodes)
|
|
93
|
-
|
|
94
|
-
if (withParentheses) {
|
|
95
|
-
return factory.createParenthesizedType(node)
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return node
|
|
99
|
-
}
|
|
100
|
-
|
|
101
69
|
export function createArrayDeclaration({ nodes, arrayType = 'array' }: { nodes: Array<ts.TypeNode>; arrayType?: 'array' | 'generic' }): ts.TypeNode | null {
|
|
102
70
|
if (!nodes.length) {
|
|
103
71
|
return factory.createTupleTypeNode([])
|
package/src/generators/index.ts
CHANGED
|
@@ -1,50 +1,24 @@
|
|
|
1
|
+
import path from 'node:path'
|
|
1
2
|
import { caseParams, composeTransformers, narrowSchema, schemaTypes, transform } from '@kubb/ast'
|
|
2
3
|
import type { SchemaNode } from '@kubb/ast/types'
|
|
3
|
-
import { defineGenerator } from '@kubb/core'
|
|
4
|
-
import { useKubb } from '@kubb/core/hooks'
|
|
4
|
+
import { defineGenerator, getMode } from '@kubb/core'
|
|
5
5
|
import { File } from '@kubb/react-fabric'
|
|
6
|
+
import { builderTs } from '../builders/builderTs.ts'
|
|
6
7
|
import { Type } from '../components/Type.tsx'
|
|
7
8
|
import { ENUM_TYPES_WITH_KEY_SUFFIX } from '../constants.ts'
|
|
8
9
|
import type { PluginTs } from '../types'
|
|
9
|
-
import {
|
|
10
|
-
buildDataSchemaNode,
|
|
11
|
-
buildGroupedParamsSchema,
|
|
12
|
-
buildLegacyResponsesSchemaNode,
|
|
13
|
-
buildLegacyResponseUnionSchemaNode,
|
|
14
|
-
buildParamsSchema,
|
|
15
|
-
buildResponsesSchemaNode,
|
|
16
|
-
buildResponseUnionSchemaNode,
|
|
17
|
-
nameUnnamedEnums,
|
|
18
|
-
} from './utils.ts'
|
|
19
10
|
|
|
20
11
|
export const typeGenerator = defineGenerator<PluginTs>({
|
|
21
12
|
name: 'typescript',
|
|
22
13
|
type: 'react',
|
|
23
|
-
Operation({ node, adapter, options }) {
|
|
24
|
-
const {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
paramsCasing,
|
|
31
|
-
group,
|
|
32
|
-
resolver,
|
|
33
|
-
baseResolver,
|
|
34
|
-
compatibilityPreset,
|
|
35
|
-
transformers = [],
|
|
36
|
-
} = options
|
|
37
|
-
const isKubbV4Compatibility = compatibilityPreset === 'kubbV4'
|
|
38
|
-
const { mode, getFile, resolveBanner, resolveFooter } = useKubb<PluginTs>()
|
|
14
|
+
Operation({ node, adapter, options, config }) {
|
|
15
|
+
const { enumType, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group, output, resolver, transformers = [] } = options
|
|
16
|
+
|
|
17
|
+
const root = path.resolve(config.root, config.output.path)
|
|
18
|
+
const mode = getMode(path.resolve(root, output.path))
|
|
19
|
+
|
|
20
|
+
const file = resolver.resolveFile({ name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path }, { root, output, group })
|
|
39
21
|
|
|
40
|
-
const file = getFile({
|
|
41
|
-
name: node.operationId,
|
|
42
|
-
extname: '.ts',
|
|
43
|
-
mode,
|
|
44
|
-
options: {
|
|
45
|
-
group: group ? (group.type === 'tag' ? { tag: node.tags[0] ?? 'default' } : { path: node.path }) : undefined,
|
|
46
|
-
},
|
|
47
|
-
})
|
|
48
22
|
const params = caseParams(node.parameters, paramsCasing)
|
|
49
23
|
|
|
50
24
|
function renderSchemaType({
|
|
@@ -68,7 +42,7 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
68
42
|
|
|
69
43
|
const imports = adapter.getImports(transformedNode, (schemaName) => ({
|
|
70
44
|
name: resolver.default(schemaName, 'type'),
|
|
71
|
-
path:
|
|
45
|
+
path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group }).path,
|
|
72
46
|
}))
|
|
73
47
|
|
|
74
48
|
return (
|
|
@@ -87,38 +61,22 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
87
61
|
syntaxType={syntaxType}
|
|
88
62
|
resolver={resolver}
|
|
89
63
|
keysToOmit={keysToOmit}
|
|
90
|
-
legacy={isKubbV4Compatibility}
|
|
91
64
|
/>
|
|
92
65
|
</>
|
|
93
66
|
)
|
|
94
67
|
}
|
|
95
68
|
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
name: responseName,
|
|
104
|
-
typedName: resolver.resolveResponseStatusTypedName(node, res.statusCode),
|
|
105
|
-
description: res.description,
|
|
106
|
-
keysToOmit: res.keysToOmit,
|
|
107
|
-
})
|
|
108
|
-
})
|
|
109
|
-
: node.responses.map((res) =>
|
|
110
|
-
renderSchemaType({
|
|
111
|
-
node: res.schema,
|
|
112
|
-
name: resolver.resolveResponseStatusName(node, res.statusCode),
|
|
113
|
-
typedName: resolver.resolveResponseStatusTypedName(node, res.statusCode),
|
|
114
|
-
description: res.description,
|
|
115
|
-
keysToOmit: res.keysToOmit,
|
|
116
|
-
}),
|
|
117
|
-
)
|
|
69
|
+
const paramTypes = params.map((param) =>
|
|
70
|
+
renderSchemaType({
|
|
71
|
+
node: param.schema,
|
|
72
|
+
name: resolver.resolveParamName(node, param),
|
|
73
|
+
typedName: resolver.resolveParamTypedName(node, param),
|
|
74
|
+
}),
|
|
75
|
+
)
|
|
118
76
|
|
|
119
77
|
const requestType = node.requestBody?.schema
|
|
120
78
|
? renderSchemaType({
|
|
121
|
-
node:
|
|
79
|
+
node: node.requestBody.schema,
|
|
122
80
|
name: resolver.resolveDataName(node),
|
|
123
81
|
typedName: resolver.resolveDataTypedName(node),
|
|
124
82
|
description: node.requestBody.description ?? node.requestBody.schema.description,
|
|
@@ -126,99 +84,44 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
126
84
|
})
|
|
127
85
|
: null
|
|
128
86
|
|
|
129
|
-
|
|
130
|
-
const pathParams = params.filter((p) => p.in === 'path')
|
|
131
|
-
const queryParams = params.filter((p) => p.in === 'query')
|
|
132
|
-
const headerParams = params.filter((p) => p.in === 'header')
|
|
133
|
-
|
|
134
|
-
const legacyParamTypes = [
|
|
135
|
-
pathParams.length > 0
|
|
136
|
-
? renderSchemaType({
|
|
137
|
-
node: buildGroupedParamsSchema({ params: pathParams, parentName: baseResolver.resolvePathParamsName!(node) }),
|
|
138
|
-
name: resolver.resolvePathParamsName!(node),
|
|
139
|
-
typedName: resolver.resolvePathParamsTypedName!(node),
|
|
140
|
-
})
|
|
141
|
-
: null,
|
|
142
|
-
queryParams.length > 0
|
|
143
|
-
? renderSchemaType({
|
|
144
|
-
node: buildGroupedParamsSchema({ params: queryParams, parentName: baseResolver.resolveQueryParamsName!(node) }),
|
|
145
|
-
name: resolver.resolveQueryParamsName!(node),
|
|
146
|
-
typedName: resolver.resolveQueryParamsTypedName!(node),
|
|
147
|
-
})
|
|
148
|
-
: null,
|
|
149
|
-
headerParams.length > 0
|
|
150
|
-
? renderSchemaType({
|
|
151
|
-
node: buildGroupedParamsSchema({ params: headerParams, parentName: baseResolver.resolveHeaderParamsName!(node) }),
|
|
152
|
-
name: resolver.resolveHeaderParamsName!(node),
|
|
153
|
-
typedName: resolver.resolveHeaderParamsTypedName!(node),
|
|
154
|
-
})
|
|
155
|
-
: null,
|
|
156
|
-
]
|
|
157
|
-
|
|
158
|
-
const legacyResponsesType = renderSchemaType({
|
|
159
|
-
node: buildLegacyResponsesSchemaNode({ node, resolver }),
|
|
160
|
-
name: resolver.resolveResponsesName(node),
|
|
161
|
-
typedName: resolver.resolveResponsesTypedName(node),
|
|
162
|
-
})
|
|
163
|
-
|
|
164
|
-
const legacyResponseType = renderSchemaType({
|
|
165
|
-
node: buildLegacyResponseUnionSchemaNode({ node, resolver }),
|
|
166
|
-
name: resolver.resolveResponseName(node),
|
|
167
|
-
typedName: resolver.resolveResponseTypedName(node),
|
|
168
|
-
})
|
|
169
|
-
|
|
170
|
-
return (
|
|
171
|
-
<File baseName={file.baseName} path={file.path} meta={file.meta} banner={resolveBanner()} footer={resolveFooter()}>
|
|
172
|
-
{legacyParamTypes}
|
|
173
|
-
{responseTypes}
|
|
174
|
-
{requestType}
|
|
175
|
-
{legacyResponseType}
|
|
176
|
-
{legacyResponsesType}
|
|
177
|
-
</File>
|
|
178
|
-
)
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
const paramTypes = params.map((param) =>
|
|
87
|
+
const responseTypes = node.responses.map((res) =>
|
|
182
88
|
renderSchemaType({
|
|
183
|
-
node:
|
|
184
|
-
name: resolver.
|
|
185
|
-
typedName: resolver.
|
|
89
|
+
node: res.schema,
|
|
90
|
+
name: resolver.resolveResponseStatusName(node, res.statusCode),
|
|
91
|
+
typedName: resolver.resolveResponseStatusTypedName(node, res.statusCode),
|
|
92
|
+
description: res.description,
|
|
93
|
+
keysToOmit: res.keysToOmit,
|
|
186
94
|
}),
|
|
187
95
|
)
|
|
188
96
|
|
|
189
|
-
const queryParamsList = params.filter((p) => p.in === 'query')
|
|
190
|
-
const queryParamsType =
|
|
191
|
-
queryParamsList.length > 0
|
|
192
|
-
? renderSchemaType({
|
|
193
|
-
node: buildParamsSchema({ params: queryParamsList, node, resolver }),
|
|
194
|
-
name: resolver.resolveQueryParamsName!(node),
|
|
195
|
-
typedName: resolver.resolveQueryParamsTypedName!(node),
|
|
196
|
-
})
|
|
197
|
-
: null
|
|
198
|
-
|
|
199
97
|
const dataType = renderSchemaType({
|
|
200
|
-
node:
|
|
98
|
+
node: builderTs.buildData({ node: { ...node, parameters: params }, resolver }),
|
|
201
99
|
name: resolver.resolveRequestConfigName(node),
|
|
202
100
|
typedName: resolver.resolveRequestConfigTypedName(node),
|
|
203
101
|
})
|
|
204
102
|
|
|
205
103
|
const responsesType = renderSchemaType({
|
|
206
|
-
node:
|
|
104
|
+
node: builderTs.buildResponses({ node, resolver }),
|
|
207
105
|
name: resolver.resolveResponsesName(node),
|
|
208
106
|
typedName: resolver.resolveResponsesTypedName(node),
|
|
209
107
|
})
|
|
210
108
|
|
|
211
109
|
const responseType = renderSchemaType({
|
|
212
|
-
node:
|
|
110
|
+
node: builderTs.buildResponseUnion({ node, resolver }),
|
|
213
111
|
name: resolver.resolveResponseName(node),
|
|
214
112
|
typedName: resolver.resolveResponseTypedName(node),
|
|
215
113
|
description: 'Union of all possible responses',
|
|
216
114
|
})
|
|
217
115
|
|
|
218
116
|
return (
|
|
219
|
-
<File
|
|
117
|
+
<File
|
|
118
|
+
baseName={file.baseName}
|
|
119
|
+
path={file.path}
|
|
120
|
+
meta={file.meta}
|
|
121
|
+
banner={resolver.resolveBanner(adapter.rootNode, { output, config })}
|
|
122
|
+
footer={resolver.resolveFooter(adapter.rootNode, { output, config })}
|
|
123
|
+
>
|
|
220
124
|
{paramTypes}
|
|
221
|
-
{queryParamsType}
|
|
222
125
|
{responseTypes}
|
|
223
126
|
{requestType}
|
|
224
127
|
{dataType}
|
|
@@ -227,10 +130,11 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
227
130
|
</File>
|
|
228
131
|
)
|
|
229
132
|
},
|
|
230
|
-
Schema({ node, adapter, options }) {
|
|
231
|
-
const { enumType, enumKeyCasing, syntaxType, optionalType, arrayType,
|
|
232
|
-
|
|
233
|
-
const
|
|
133
|
+
Schema({ node, adapter, options, config }) {
|
|
134
|
+
const { enumType, enumKeyCasing, syntaxType, optionalType, arrayType, output, group, resolver, transformers = [] } = options
|
|
135
|
+
|
|
136
|
+
const root = path.resolve(config.root, config.output.path)
|
|
137
|
+
const mode = getMode(path.resolve(root, output.path))
|
|
234
138
|
|
|
235
139
|
if (!node.name) {
|
|
236
140
|
return
|
|
@@ -240,7 +144,7 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
240
144
|
|
|
241
145
|
const imports = adapter.getImports(transformedNode, (schemaName) => ({
|
|
242
146
|
name: resolver.default(schemaName, 'type'),
|
|
243
|
-
path:
|
|
147
|
+
path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group }).path,
|
|
244
148
|
}))
|
|
245
149
|
|
|
246
150
|
const isEnumSchema = !!narrowSchema(node, schemaTypes.enum)
|
|
@@ -250,11 +154,17 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
250
154
|
const type = {
|
|
251
155
|
name: resolver.resolveName(node.name),
|
|
252
156
|
typedName,
|
|
253
|
-
file:
|
|
157
|
+
file: resolver.resolveFile({ name: node.name, extname: '.ts' }, { root, output, group }),
|
|
254
158
|
} as const
|
|
255
159
|
|
|
256
160
|
return (
|
|
257
|
-
<File
|
|
161
|
+
<File
|
|
162
|
+
baseName={type.file.baseName}
|
|
163
|
+
path={type.file.path}
|
|
164
|
+
meta={type.file.meta}
|
|
165
|
+
banner={resolver.resolveBanner(adapter.rootNode, { output, config })}
|
|
166
|
+
footer={resolver.resolveFooter(adapter.rootNode, { output, config })}
|
|
167
|
+
>
|
|
258
168
|
{mode === 'split' &&
|
|
259
169
|
imports.map((imp) => (
|
|
260
170
|
<File.Import key={[node.name, imp.path, imp.isTypeOnly].join('-')} root={type.file.path} path={imp.path} name={imp.name} isTypeOnly />
|
|
@@ -269,7 +179,6 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
269
179
|
arrayType={arrayType}
|
|
270
180
|
syntaxType={syntaxType}
|
|
271
181
|
resolver={resolver}
|
|
272
|
-
legacy={isKubbV4Compatibility}
|
|
273
182
|
/>
|
|
274
183
|
</File>
|
|
275
184
|
)
|