@kubb/plugin-ts 5.0.0-alpha.21 → 5.0.0-alpha.23
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/index.cjs +1698 -42
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +485 -4
- package/dist/index.js +1667 -41
- package/dist/index.js.map +1 -1
- package/package.json +3 -42
- package/src/components/Enum.tsx +15 -11
- package/src/components/Type.tsx +18 -7
- package/src/generators/typeGenerator.tsx +12 -21
- package/src/generators/typeGeneratorLegacy.tsx +30 -37
- package/src/index.ts +13 -1
- package/src/plugin.ts +62 -22
- package/src/presets.ts +22 -23
- package/src/printers/functionPrinter.ts +194 -0
- package/src/printers/printerTs.ts +16 -8
- package/src/resolvers/resolverTs.ts +10 -47
- package/src/resolvers/resolverTsLegacy.ts +4 -31
- package/src/types.ts +95 -205
- package/src/utils.ts +103 -0
- package/dist/Type-B6fo0gSk.js +0 -120
- package/dist/Type-B6fo0gSk.js.map +0 -1
- package/dist/Type-oFwUfkZv.cjs +0 -131
- package/dist/Type-oFwUfkZv.cjs.map +0 -1
- package/dist/builderTs-Cd3juc2G.cjs +0 -120
- package/dist/builderTs-Cd3juc2G.cjs.map +0 -1
- package/dist/builderTs-DausqHpc.js +0 -116
- package/dist/builderTs-DausqHpc.js.map +0 -1
- package/dist/builders.cjs +0 -3
- package/dist/builders.d.ts +0 -8
- package/dist/builders.js +0 -2
- package/dist/casing-BJHFg-zZ.js +0 -84
- package/dist/casing-BJHFg-zZ.js.map +0 -1
- package/dist/casing-DHfdqpLi.cjs +0 -107
- package/dist/casing-DHfdqpLi.cjs.map +0 -1
- package/dist/chunk-ByKO4r7w.cjs +0 -38
- package/dist/components.cjs +0 -4
- package/dist/components.d.ts +0 -67
- package/dist/components.js +0 -2
- package/dist/generators-ByK18qUn.js +0 -551
- package/dist/generators-ByK18qUn.js.map +0 -1
- package/dist/generators-aSsiTfUO.cjs +0 -563
- package/dist/generators-aSsiTfUO.cjs.map +0 -1
- package/dist/generators.cjs +0 -4
- package/dist/generators.d.ts +0 -12
- package/dist/generators.js +0 -2
- package/dist/printerTs-BgZucv4T.js +0 -559
- package/dist/printerTs-BgZucv4T.js.map +0 -1
- package/dist/printerTs-CFXc_LpP.cjs +0 -595
- package/dist/printerTs-CFXc_LpP.cjs.map +0 -1
- package/dist/printers.cjs +0 -3
- package/dist/printers.d.ts +0 -75
- package/dist/printers.js +0 -2
- package/dist/resolverTsLegacy-DLl854-P.js +0 -185
- package/dist/resolverTsLegacy-DLl854-P.js.map +0 -1
- package/dist/resolverTsLegacy-sJ16Iqrl.cjs +0 -196
- package/dist/resolverTsLegacy-sJ16Iqrl.cjs.map +0 -1
- package/dist/resolvers.cjs +0 -4
- package/dist/resolvers.d.ts +0 -52
- package/dist/resolvers.js +0 -2
- package/dist/types-BcyuFDn9.d.ts +0 -344
- package/src/builders/builderTs.ts +0 -92
- package/src/builders/index.ts +0 -1
- package/src/components/index.ts +0 -2
- package/src/generators/index.ts +0 -2
- package/src/printers/index.ts +0 -1
- package/src/resolvers/index.ts +0 -2
|
@@ -3,16 +3,16 @@ import { caseParams, composeTransformers, narrowSchema, schemaTypes, transform }
|
|
|
3
3
|
import type { SchemaNode } from '@kubb/ast/types'
|
|
4
4
|
import { defineGenerator, getMode } from '@kubb/core'
|
|
5
5
|
import { File } from '@kubb/react-fabric'
|
|
6
|
-
import { builderTs } from '../builders/builderTs.ts'
|
|
7
6
|
import { Type } from '../components/Type.tsx'
|
|
8
7
|
import { ENUM_TYPES_WITH_KEY_SUFFIX } from '../constants.ts'
|
|
9
8
|
import type { PluginTs } from '../types'
|
|
9
|
+
import { buildData, buildResponses, buildResponseUnion } from '../utils.ts'
|
|
10
10
|
|
|
11
11
|
export const typeGenerator = defineGenerator<PluginTs>({
|
|
12
12
|
name: 'typescript',
|
|
13
13
|
type: 'react',
|
|
14
|
-
Operation({ node, adapter, options, config }) {
|
|
15
|
-
const { enumType, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group, output,
|
|
14
|
+
Operation({ node, adapter, options, config, resolver }) {
|
|
15
|
+
const { enumType, enumTypeSuffix, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group, output, transformers = [] } = options
|
|
16
16
|
|
|
17
17
|
const root = path.resolve(config.root, config.output.path)
|
|
18
18
|
const mode = getMode(path.resolve(root, output.path))
|
|
@@ -24,13 +24,11 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
24
24
|
function renderSchemaType({
|
|
25
25
|
node: schemaNode,
|
|
26
26
|
name,
|
|
27
|
-
typedName,
|
|
28
27
|
description,
|
|
29
28
|
keysToOmit,
|
|
30
29
|
}: {
|
|
31
30
|
node: SchemaNode | null
|
|
32
31
|
name: string
|
|
33
|
-
typedName: string
|
|
34
32
|
description?: string
|
|
35
33
|
keysToOmit?: Array<string>
|
|
36
34
|
}) {
|
|
@@ -51,10 +49,10 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
51
49
|
imports.map((imp) => <File.Import key={[name, imp.path, imp.isTypeOnly].join('-')} root={file.path} path={imp.path} name={imp.name} isTypeOnly />)}
|
|
52
50
|
<Type
|
|
53
51
|
name={name}
|
|
54
|
-
typedName={typedName}
|
|
55
52
|
node={transformedNode}
|
|
56
53
|
description={description}
|
|
57
54
|
enumType={enumType}
|
|
55
|
+
enumTypeSuffix={enumTypeSuffix}
|
|
58
56
|
enumKeyCasing={enumKeyCasing}
|
|
59
57
|
optionalType={optionalType}
|
|
60
58
|
arrayType={arrayType}
|
|
@@ -70,7 +68,6 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
70
68
|
renderSchemaType({
|
|
71
69
|
node: param.schema,
|
|
72
70
|
name: resolver.resolveParamName(node, param),
|
|
73
|
-
typedName: resolver.resolveParamTypedName(node, param),
|
|
74
71
|
}),
|
|
75
72
|
)
|
|
76
73
|
|
|
@@ -78,7 +75,6 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
78
75
|
? renderSchemaType({
|
|
79
76
|
node: node.requestBody.schema,
|
|
80
77
|
name: resolver.resolveDataName(node),
|
|
81
|
-
typedName: resolver.resolveDataTypedName(node),
|
|
82
78
|
description: node.requestBody.description ?? node.requestBody.schema.description,
|
|
83
79
|
keysToOmit: node.requestBody.keysToOmit,
|
|
84
80
|
})
|
|
@@ -88,28 +84,24 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
88
84
|
renderSchemaType({
|
|
89
85
|
node: res.schema,
|
|
90
86
|
name: resolver.resolveResponseStatusName(node, res.statusCode),
|
|
91
|
-
typedName: resolver.resolveResponseStatusTypedName(node, res.statusCode),
|
|
92
87
|
description: res.description,
|
|
93
88
|
keysToOmit: res.keysToOmit,
|
|
94
89
|
}),
|
|
95
90
|
)
|
|
96
91
|
|
|
97
92
|
const dataType = renderSchemaType({
|
|
98
|
-
node:
|
|
93
|
+
node: buildData({ node: { ...node, parameters: params }, resolver }),
|
|
99
94
|
name: resolver.resolveRequestConfigName(node),
|
|
100
|
-
typedName: resolver.resolveRequestConfigTypedName(node),
|
|
101
95
|
})
|
|
102
96
|
|
|
103
97
|
const responsesType = renderSchemaType({
|
|
104
|
-
node:
|
|
98
|
+
node: buildResponses({ node, resolver }),
|
|
105
99
|
name: resolver.resolveResponsesName(node),
|
|
106
|
-
typedName: resolver.resolveResponsesTypedName(node),
|
|
107
100
|
})
|
|
108
101
|
|
|
109
102
|
const responseType = renderSchemaType({
|
|
110
|
-
node:
|
|
103
|
+
node: buildResponseUnion({ node, resolver }),
|
|
111
104
|
name: resolver.resolveResponseName(node),
|
|
112
|
-
typedName: resolver.resolveResponseTypedName(node),
|
|
113
105
|
description: 'Union of all possible responses',
|
|
114
106
|
})
|
|
115
107
|
|
|
@@ -130,8 +122,8 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
130
122
|
</File>
|
|
131
123
|
)
|
|
132
124
|
},
|
|
133
|
-
Schema({ node, adapter, options, config }) {
|
|
134
|
-
const { enumType, enumKeyCasing, syntaxType, optionalType, arrayType, output, group,
|
|
125
|
+
Schema({ node, adapter, options, config, resolver }) {
|
|
126
|
+
const { enumType, enumTypeSuffix, enumKeyCasing, syntaxType, optionalType, arrayType, output, group, transformers = [] } = options
|
|
135
127
|
|
|
136
128
|
const root = path.resolve(config.root, config.output.path)
|
|
137
129
|
const mode = getMode(path.resolve(root, output.path))
|
|
@@ -149,11 +141,10 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
149
141
|
|
|
150
142
|
const isEnumSchema = !!narrowSchema(node, schemaTypes.enum)
|
|
151
143
|
|
|
152
|
-
const
|
|
144
|
+
const name = ENUM_TYPES_WITH_KEY_SUFFIX.has(enumType) && isEnumSchema ? resolver.resolveEnumKeyName(node, enumTypeSuffix) : resolver.resolveName(node.name)
|
|
153
145
|
|
|
154
146
|
const type = {
|
|
155
|
-
name
|
|
156
|
-
typedName,
|
|
147
|
+
name,
|
|
157
148
|
file: resolver.resolveFile({ name: node.name, extname: '.ts' }, { root, output, group }),
|
|
158
149
|
} as const
|
|
159
150
|
|
|
@@ -171,9 +162,9 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
171
162
|
))}
|
|
172
163
|
<Type
|
|
173
164
|
name={type.name}
|
|
174
|
-
typedName={type.typedName}
|
|
175
165
|
node={transformedNode}
|
|
176
166
|
enumType={enumType}
|
|
167
|
+
enumTypeSuffix={enumTypeSuffix}
|
|
177
168
|
enumKeyCasing={enumKeyCasing}
|
|
178
169
|
optionalType={optionalType}
|
|
179
170
|
arrayType={arrayType}
|
|
@@ -47,20 +47,20 @@ function buildLegacyResponsesSchemaNode({ node, resolver }: BuildOperationSchema
|
|
|
47
47
|
const responseSchema =
|
|
48
48
|
successResponses.length > 0
|
|
49
49
|
? successResponses.length === 1
|
|
50
|
-
? createSchema({ type: 'ref', name: resolver.
|
|
50
|
+
? createSchema({ type: 'ref', name: resolver.resolveResponseStatusName(node, successResponses[0]!.statusCode) })
|
|
51
51
|
: createSchema({
|
|
52
52
|
type: 'union',
|
|
53
|
-
members: successResponses.map((res) => createSchema({ type: 'ref', name: resolver.
|
|
53
|
+
members: successResponses.map((res) => createSchema({ type: 'ref', name: resolver.resolveResponseStatusName(node, res.statusCode) })),
|
|
54
54
|
})
|
|
55
55
|
: createSchema({ type: 'any' })
|
|
56
56
|
|
|
57
57
|
const errorsSchema =
|
|
58
58
|
errorResponses.length > 0
|
|
59
59
|
? errorResponses.length === 1
|
|
60
|
-
? createSchema({ type: 'ref', name: resolver.
|
|
60
|
+
? createSchema({ type: 'ref', name: resolver.resolveResponseStatusName(node, errorResponses[0]!.statusCode) })
|
|
61
61
|
: createSchema({
|
|
62
62
|
type: 'union',
|
|
63
|
-
members: errorResponses.map((res) => createSchema({ type: 'ref', name: resolver.
|
|
63
|
+
members: errorResponses.map((res) => createSchema({ type: 'ref', name: resolver.resolveResponseStatusName(node, res.statusCode) })),
|
|
64
64
|
})
|
|
65
65
|
: createSchema({ type: 'any' })
|
|
66
66
|
|
|
@@ -71,37 +71,40 @@ function buildLegacyResponsesSchemaNode({ node, resolver }: BuildOperationSchema
|
|
|
71
71
|
createProperty({
|
|
72
72
|
name: 'Request',
|
|
73
73
|
required: true,
|
|
74
|
-
schema: createSchema({ type: 'ref', name: resolver.
|
|
74
|
+
schema: createSchema({ type: 'ref', name: resolver.resolveDataName(node) }),
|
|
75
75
|
}),
|
|
76
76
|
)
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
const queryParam = node.parameters.find((p) => p.in === 'query')
|
|
80
|
+
if (queryParam) {
|
|
80
81
|
properties.push(
|
|
81
82
|
createProperty({
|
|
82
83
|
name: 'QueryParams',
|
|
83
84
|
required: true,
|
|
84
|
-
schema: createSchema({ type: 'ref', name: resolver.
|
|
85
|
+
schema: createSchema({ type: 'ref', name: resolver.resolveQueryParamsName(node, queryParam) }),
|
|
85
86
|
}),
|
|
86
87
|
)
|
|
87
88
|
}
|
|
88
89
|
|
|
89
|
-
|
|
90
|
+
const pathParam = node.parameters.find((p) => p.in === 'path')
|
|
91
|
+
if (pathParam) {
|
|
90
92
|
properties.push(
|
|
91
93
|
createProperty({
|
|
92
94
|
name: 'PathParams',
|
|
93
95
|
required: true,
|
|
94
|
-
schema: createSchema({ type: 'ref', name: resolver.
|
|
96
|
+
schema: createSchema({ type: 'ref', name: resolver.resolvePathParamsName(node, pathParam) }),
|
|
95
97
|
}),
|
|
96
98
|
)
|
|
97
99
|
}
|
|
98
100
|
|
|
99
|
-
|
|
101
|
+
const headerParam = node.parameters.find((p) => p.in === 'header')
|
|
102
|
+
if (headerParam) {
|
|
100
103
|
properties.push(
|
|
101
104
|
createProperty({
|
|
102
105
|
name: 'HeaderParams',
|
|
103
106
|
required: true,
|
|
104
|
-
schema: createSchema({ type: 'ref', name: resolver.
|
|
107
|
+
schema: createSchema({ type: 'ref', name: resolver.resolveHeaderParamsName(node, headerParam) }),
|
|
105
108
|
}),
|
|
106
109
|
)
|
|
107
110
|
}
|
|
@@ -122,12 +125,12 @@ function buildLegacyResponseUnionSchemaNode({ node, resolver }: BuildOperationSc
|
|
|
122
125
|
}
|
|
123
126
|
|
|
124
127
|
if (successResponses.length === 1) {
|
|
125
|
-
return createSchema({ type: 'ref', name: resolver.
|
|
128
|
+
return createSchema({ type: 'ref', name: resolver.resolveResponseStatusName(node, successResponses[0]!.statusCode) })
|
|
126
129
|
}
|
|
127
130
|
|
|
128
131
|
return createSchema({
|
|
129
132
|
type: 'union',
|
|
130
|
-
members: successResponses.map((res) => createSchema({ type: 'ref', name: resolver.
|
|
133
|
+
members: successResponses.map((res) => createSchema({ type: 'ref', name: resolver.resolveResponseStatusName(node, res.statusCode) })),
|
|
131
134
|
})
|
|
132
135
|
}
|
|
133
136
|
|
|
@@ -156,8 +159,8 @@ function nameUnnamedEnums(node: SchemaNode, parentName: string): SchemaNode {
|
|
|
156
159
|
export const typeGeneratorLegacy = defineGenerator<PluginTs>({
|
|
157
160
|
name: 'typescript-legacy',
|
|
158
161
|
type: 'react',
|
|
159
|
-
Operation({ node, adapter, options, config }) {
|
|
160
|
-
const { enumType, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group, output,
|
|
162
|
+
Operation({ node, adapter, options, config, resolver }) {
|
|
163
|
+
const { enumType, enumTypeSuffix, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group, output, transformers = [] } = options
|
|
161
164
|
|
|
162
165
|
const root = path.resolve(config.root, config.output.path)
|
|
163
166
|
const mode = getMode(path.resolve(root, output.path))
|
|
@@ -168,13 +171,11 @@ export const typeGeneratorLegacy = defineGenerator<PluginTs>({
|
|
|
168
171
|
function renderSchemaType({
|
|
169
172
|
node: schemaNode,
|
|
170
173
|
name,
|
|
171
|
-
typedName,
|
|
172
174
|
description,
|
|
173
175
|
keysToOmit,
|
|
174
176
|
}: {
|
|
175
177
|
node: SchemaNode | null
|
|
176
178
|
name: string
|
|
177
|
-
typedName: string
|
|
178
179
|
description?: string
|
|
179
180
|
keysToOmit?: Array<string>
|
|
180
181
|
}) {
|
|
@@ -195,10 +196,10 @@ export const typeGeneratorLegacy = defineGenerator<PluginTs>({
|
|
|
195
196
|
imports.map((imp) => <File.Import key={[name, imp.path, imp.isTypeOnly].join('-')} root={file.path} path={imp.path} name={imp.name} isTypeOnly />)}
|
|
196
197
|
<Type
|
|
197
198
|
name={name}
|
|
198
|
-
typedName={typedName}
|
|
199
199
|
node={transformedNode}
|
|
200
200
|
description={description}
|
|
201
201
|
enumType={enumType}
|
|
202
|
+
enumTypeSuffix={enumTypeSuffix}
|
|
202
203
|
enumKeyCasing={enumKeyCasing}
|
|
203
204
|
optionalType={optionalType}
|
|
204
205
|
arrayType={arrayType}
|
|
@@ -221,7 +222,6 @@ export const typeGeneratorLegacy = defineGenerator<PluginTs>({
|
|
|
221
222
|
return renderSchemaType({
|
|
222
223
|
node: res.schema ? nameUnnamedEnums(res.schema, baseResponseName) : res.schema,
|
|
223
224
|
name: responseName,
|
|
224
|
-
typedName: resolver.resolveResponseStatusTypedName(node, res.statusCode),
|
|
225
225
|
description: res.description,
|
|
226
226
|
keysToOmit: res.keysToOmit,
|
|
227
227
|
})
|
|
@@ -231,7 +231,6 @@ export const typeGeneratorLegacy = defineGenerator<PluginTs>({
|
|
|
231
231
|
? renderSchemaType({
|
|
232
232
|
node: nameUnnamedEnums(node.requestBody.schema, resolverTsLegacy.resolveDataName(node)),
|
|
233
233
|
name: resolver.resolveDataName(node),
|
|
234
|
-
typedName: resolver.resolveDataTypedName(node),
|
|
235
234
|
description: node.requestBody.description ?? node.requestBody.schema.description,
|
|
236
235
|
keysToOmit: node.requestBody.keysToOmit,
|
|
237
236
|
})
|
|
@@ -240,23 +239,20 @@ export const typeGeneratorLegacy = defineGenerator<PluginTs>({
|
|
|
240
239
|
const legacyParamTypes = [
|
|
241
240
|
pathParams.length > 0
|
|
242
241
|
? renderSchemaType({
|
|
243
|
-
node: buildGroupedParamsSchema({ params: pathParams, parentName: resolverTsLegacy.resolvePathParamsName
|
|
244
|
-
name: resolver.resolvePathParamsName
|
|
245
|
-
typedName: resolver.resolvePathParamsTypedName!(node),
|
|
242
|
+
node: buildGroupedParamsSchema({ params: pathParams, parentName: resolverTsLegacy.resolvePathParamsName(node, pathParams[0]!) }),
|
|
243
|
+
name: resolver.resolvePathParamsName(node, pathParams[0]!),
|
|
246
244
|
})
|
|
247
245
|
: null,
|
|
248
246
|
queryParams.length > 0
|
|
249
247
|
? renderSchemaType({
|
|
250
|
-
node: buildGroupedParamsSchema({ params: queryParams, parentName: resolverTsLegacy.resolveQueryParamsName
|
|
251
|
-
name: resolver.resolveQueryParamsName
|
|
252
|
-
typedName: resolver.resolveQueryParamsTypedName!(node),
|
|
248
|
+
node: buildGroupedParamsSchema({ params: queryParams, parentName: resolverTsLegacy.resolveQueryParamsName(node, queryParams[0]!) }),
|
|
249
|
+
name: resolver.resolveQueryParamsName(node, queryParams[0]!),
|
|
253
250
|
})
|
|
254
251
|
: null,
|
|
255
252
|
headerParams.length > 0
|
|
256
253
|
? renderSchemaType({
|
|
257
|
-
node: buildGroupedParamsSchema({ params: headerParams, parentName: resolverTsLegacy.resolveHeaderParamsName
|
|
258
|
-
name: resolver.resolveHeaderParamsName
|
|
259
|
-
typedName: resolver.resolveHeaderParamsTypedName!(node),
|
|
254
|
+
node: buildGroupedParamsSchema({ params: headerParams, parentName: resolverTsLegacy.resolveHeaderParamsName(node, headerParams[0]!) }),
|
|
255
|
+
name: resolver.resolveHeaderParamsName(node, headerParams[0]!),
|
|
260
256
|
})
|
|
261
257
|
: null,
|
|
262
258
|
]
|
|
@@ -264,13 +260,11 @@ export const typeGeneratorLegacy = defineGenerator<PluginTs>({
|
|
|
264
260
|
const legacyResponsesType = renderSchemaType({
|
|
265
261
|
node: buildLegacyResponsesSchemaNode({ node, resolver }),
|
|
266
262
|
name: resolver.resolveResponsesName(node),
|
|
267
|
-
typedName: resolver.resolveResponsesTypedName(node),
|
|
268
263
|
})
|
|
269
264
|
|
|
270
265
|
const legacyResponseType = renderSchemaType({
|
|
271
266
|
node: buildLegacyResponseUnionSchemaNode({ node, resolver }),
|
|
272
267
|
name: resolver.resolveResponseName(node),
|
|
273
|
-
typedName: resolver.resolveResponseTypedName(node),
|
|
274
268
|
})
|
|
275
269
|
|
|
276
270
|
return (
|
|
@@ -289,8 +283,8 @@ export const typeGeneratorLegacy = defineGenerator<PluginTs>({
|
|
|
289
283
|
</File>
|
|
290
284
|
)
|
|
291
285
|
},
|
|
292
|
-
Schema({ node, adapter, options, config }) {
|
|
293
|
-
const { enumType, enumKeyCasing, syntaxType, optionalType, arrayType, output, group,
|
|
286
|
+
Schema({ node, adapter, options, config, resolver }) {
|
|
287
|
+
const { enumType, enumTypeSuffix, enumKeyCasing, syntaxType, optionalType, arrayType, output, group, transformers = [] } = options
|
|
294
288
|
|
|
295
289
|
const root = path.resolve(config.root, config.output.path)
|
|
296
290
|
const mode = getMode(path.resolve(root, output.path))
|
|
@@ -308,11 +302,10 @@ export const typeGeneratorLegacy = defineGenerator<PluginTs>({
|
|
|
308
302
|
|
|
309
303
|
const isEnumSchema = !!narrowSchema(node, schemaTypes.enum)
|
|
310
304
|
|
|
311
|
-
const
|
|
305
|
+
const name = ENUM_TYPES_WITH_KEY_SUFFIX.has(enumType) && isEnumSchema ? resolver.resolveEnumKeyName(node, enumTypeSuffix) : resolver.resolveName(node.name)
|
|
312
306
|
|
|
313
307
|
const type = {
|
|
314
|
-
name
|
|
315
|
-
typedName,
|
|
308
|
+
name,
|
|
316
309
|
file: resolver.resolveFile({ name: node.name, extname: '.ts' }, { root, output, group }),
|
|
317
310
|
} as const
|
|
318
311
|
|
|
@@ -330,9 +323,9 @@ export const typeGeneratorLegacy = defineGenerator<PluginTs>({
|
|
|
330
323
|
))}
|
|
331
324
|
<Type
|
|
332
325
|
name={type.name}
|
|
333
|
-
typedName={type.typedName}
|
|
334
326
|
node={transformedNode}
|
|
335
327
|
enumType={enumType}
|
|
328
|
+
enumTypeSuffix={enumTypeSuffix}
|
|
336
329
|
enumKeyCasing={enumKeyCasing}
|
|
337
330
|
optionalType={optionalType}
|
|
338
331
|
arrayType={arrayType}
|
package/src/index.ts
CHANGED
|
@@ -1,2 +1,14 @@
|
|
|
1
|
+
export { Enum } from './components/Enum.tsx'
|
|
2
|
+
export { Type } from './components/Type.tsx'
|
|
3
|
+
|
|
4
|
+
export { typeGenerator } from './generators/typeGenerator.tsx'
|
|
5
|
+
|
|
1
6
|
export { pluginTs, pluginTsName } from './plugin.ts'
|
|
2
|
-
|
|
7
|
+
|
|
8
|
+
export { functionPrinter } from './printers/functionPrinter.ts'
|
|
9
|
+
export { printerTs } from './printers/printerTs.ts'
|
|
10
|
+
|
|
11
|
+
export { resolverTs } from './resolvers/resolverTs.ts'
|
|
12
|
+
export { resolverTsLegacy } from './resolvers/resolverTsLegacy.ts'
|
|
13
|
+
|
|
14
|
+
export type { PluginTs, ResolverTs } from './types.ts'
|
package/src/plugin.ts
CHANGED
|
@@ -1,11 +1,31 @@
|
|
|
1
1
|
import path from 'node:path'
|
|
2
|
+
import { camelCase } from '@internals/utils'
|
|
2
3
|
import { walk } from '@kubb/ast'
|
|
3
|
-
import { createPlugin, getBarrelFiles, renderOperation, renderSchema } from '@kubb/core'
|
|
4
|
-
import {
|
|
4
|
+
import { createPlugin, type Group, getBarrelFiles, getPreset, renderOperation, renderSchema } from '@kubb/core'
|
|
5
|
+
import { presets } from './presets.ts'
|
|
5
6
|
import type { PluginTs } from './types.ts'
|
|
6
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Canonical plugin name for `@kubb/plugin-ts`, used to identify the plugin in driver lookups and warnings.
|
|
10
|
+
*/
|
|
7
11
|
export const pluginTsName = 'plugin-ts' satisfies PluginTs['name']
|
|
8
12
|
|
|
13
|
+
/**
|
|
14
|
+
* The `@kubb/plugin-ts` plugin factory.
|
|
15
|
+
*
|
|
16
|
+
* Generates TypeScript type declarations from an OpenAPI/AST `RootNode`.
|
|
17
|
+
* Walks schemas and operations, delegates rendering to the active generators,
|
|
18
|
+
* and writes barrel files based on `output.barrelType`.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* import { pluginTs } from '@kubb/plugin-ts'
|
|
23
|
+
*
|
|
24
|
+
* export default defineConfig({
|
|
25
|
+
* plugins: [pluginTs({ output: { path: 'types' }, enumType: 'asConst' })],
|
|
26
|
+
* })
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
9
29
|
export const pluginTs = createPlugin<PluginTs>((options) => {
|
|
10
30
|
const {
|
|
11
31
|
output = { path: 'types', barrelType: 'named' },
|
|
@@ -14,6 +34,7 @@ export const pluginTs = createPlugin<PluginTs>((options) => {
|
|
|
14
34
|
include,
|
|
15
35
|
override = [],
|
|
16
36
|
enumType = 'asConst',
|
|
37
|
+
enumTypeSuffix = 'Key',
|
|
17
38
|
enumKeyCasing = 'none',
|
|
18
39
|
optionalType = 'questionToken',
|
|
19
40
|
arrayType = 'array',
|
|
@@ -25,7 +46,9 @@ export const pluginTs = createPlugin<PluginTs>((options) => {
|
|
|
25
46
|
generators: userGenerators = [],
|
|
26
47
|
} = options
|
|
27
48
|
|
|
28
|
-
const
|
|
49
|
+
const preset = getPreset({
|
|
50
|
+
preset: compatibilityPreset,
|
|
51
|
+
presets: presets,
|
|
29
52
|
resolvers: userResolvers,
|
|
30
53
|
transformers: userTransformers,
|
|
31
54
|
generators: userGenerators,
|
|
@@ -36,39 +59,54 @@ export const pluginTs = createPlugin<PluginTs>((options) => {
|
|
|
36
59
|
|
|
37
60
|
return {
|
|
38
61
|
name: pluginTsName,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
62
|
+
get resolver() {
|
|
63
|
+
return preset.resolver
|
|
64
|
+
},
|
|
65
|
+
get options() {
|
|
66
|
+
return {
|
|
67
|
+
output,
|
|
68
|
+
optionalType,
|
|
69
|
+
group: group
|
|
70
|
+
? ({
|
|
71
|
+
...options.group,
|
|
72
|
+
name: (ctx) => {
|
|
73
|
+
if (options.group?.type === 'path') {
|
|
74
|
+
return `${ctx.group.split('/')[1]}`
|
|
75
|
+
}
|
|
76
|
+
return `${camelCase(ctx.group)}Controller`
|
|
77
|
+
},
|
|
78
|
+
} as Group)
|
|
79
|
+
: undefined,
|
|
80
|
+
arrayType,
|
|
81
|
+
enumType,
|
|
82
|
+
enumTypeSuffix,
|
|
83
|
+
enumKeyCasing,
|
|
84
|
+
syntaxType,
|
|
85
|
+
paramsCasing,
|
|
86
|
+
transformers: preset.transformers,
|
|
87
|
+
}
|
|
50
88
|
},
|
|
51
89
|
resolvePath(baseName, pathMode, options) {
|
|
52
90
|
if (!resolvePathWarning) {
|
|
53
|
-
this.
|
|
91
|
+
this.events.emit('warn', 'Do not use resolvePath for pluginTs, use resolverTs.resolvePath instead')
|
|
54
92
|
resolvePathWarning = true
|
|
55
93
|
}
|
|
56
94
|
|
|
57
|
-
return resolver.resolvePath(
|
|
95
|
+
return this.plugin.resolver.resolvePath(
|
|
58
96
|
{ baseName, pathMode, tag: options?.group?.tag, path: options?.group?.path },
|
|
59
|
-
{ root: path.resolve(this.config.root, this.config.output.path), output, group },
|
|
97
|
+
{ root: path.resolve(this.config.root, this.config.output.path), output, group: this.plugin.options.group },
|
|
60
98
|
)
|
|
61
99
|
},
|
|
62
100
|
resolveName(name, type) {
|
|
63
101
|
if (!resolveNameWarning) {
|
|
64
|
-
this.
|
|
102
|
+
this.events.emit('warn', 'Do not use resolveName for pluginTs, use resolverTs.default instead')
|
|
65
103
|
resolveNameWarning = true
|
|
66
104
|
}
|
|
67
105
|
|
|
68
|
-
return resolver.default(name, type)
|
|
106
|
+
return this.plugin.resolver.default(name, type)
|
|
69
107
|
},
|
|
70
108
|
async install() {
|
|
71
|
-
const { config, fabric, plugin, adapter, rootNode, driver, openInStudio } = this
|
|
109
|
+
const { config, fabric, plugin, adapter, rootNode, driver, openInStudio, resolver } = this
|
|
72
110
|
|
|
73
111
|
const root = path.resolve(config.root, config.output.path)
|
|
74
112
|
|
|
@@ -81,7 +119,7 @@ export const pluginTs = createPlugin<PluginTs>((options) => {
|
|
|
81
119
|
await walk(rootNode, {
|
|
82
120
|
depth: 'shallow',
|
|
83
121
|
async schema(schemaNode) {
|
|
84
|
-
const writeTasks = generators.map(async (generator) => {
|
|
122
|
+
const writeTasks = preset.generators.map(async (generator) => {
|
|
85
123
|
if (generator.type === 'react' && generator.version === '2') {
|
|
86
124
|
const options = resolver.resolveOptions(schemaNode, { options: plugin.options, exclude, include, override })
|
|
87
125
|
|
|
@@ -91,6 +129,7 @@ export const pluginTs = createPlugin<PluginTs>((options) => {
|
|
|
91
129
|
|
|
92
130
|
await renderSchema(schemaNode, {
|
|
93
131
|
options,
|
|
132
|
+
resolver,
|
|
94
133
|
adapter,
|
|
95
134
|
config,
|
|
96
135
|
fabric,
|
|
@@ -104,7 +143,7 @@ export const pluginTs = createPlugin<PluginTs>((options) => {
|
|
|
104
143
|
await Promise.all(writeTasks)
|
|
105
144
|
},
|
|
106
145
|
async operation(operationNode) {
|
|
107
|
-
const writeTasks = generators.map(async (generator) => {
|
|
146
|
+
const writeTasks = preset.generators.map(async (generator) => {
|
|
108
147
|
if (generator.type === 'react' && generator.version === '2') {
|
|
109
148
|
const options = resolver.resolveOptions(operationNode, { options: plugin.options, exclude, include, override })
|
|
110
149
|
|
|
@@ -114,6 +153,7 @@ export const pluginTs = createPlugin<PluginTs>((options) => {
|
|
|
114
153
|
|
|
115
154
|
await renderOperation(operationNode, {
|
|
116
155
|
options,
|
|
156
|
+
resolver,
|
|
117
157
|
adapter,
|
|
118
158
|
config,
|
|
119
159
|
fabric,
|
package/src/presets.ts
CHANGED
|
@@ -1,26 +1,25 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { resolverTs
|
|
5
|
-
import
|
|
1
|
+
import { definePresets } from '@kubb/core'
|
|
2
|
+
import { typeGenerator } from './generators/typeGenerator.tsx'
|
|
3
|
+
import { typeGeneratorLegacy } from './generators/typeGeneratorLegacy.tsx'
|
|
4
|
+
import { resolverTs } from './resolvers/resolverTs.ts'
|
|
5
|
+
import { resolverTsLegacy } from './resolvers/resolverTsLegacy.ts'
|
|
6
|
+
import type { ResolverTs } from './types.ts'
|
|
6
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Built-in preset registry for `@kubb/plugin-ts`.
|
|
10
|
+
*
|
|
11
|
+
* - `default` — uses `resolverTs` and `typeGenerator` (current naming conventions).
|
|
12
|
+
* - `kubbV4` — uses `resolverTsLegacy` and `typeGeneratorLegacy` (Kubb v4 naming conventions).
|
|
13
|
+
*/
|
|
7
14
|
export const presets = definePresets<ResolverTs>({
|
|
8
|
-
default:
|
|
9
|
-
|
|
15
|
+
default: {
|
|
16
|
+
name: 'default',
|
|
17
|
+
resolvers: [resolverTs],
|
|
18
|
+
generators: [typeGenerator],
|
|
19
|
+
},
|
|
20
|
+
kubbV4: {
|
|
21
|
+
name: 'kubbV4',
|
|
22
|
+
resolvers: [resolverTsLegacy],
|
|
23
|
+
generators: [typeGeneratorLegacy],
|
|
24
|
+
},
|
|
10
25
|
})
|
|
11
|
-
|
|
12
|
-
type GetPresetOptions = {
|
|
13
|
-
resolvers: Array<ResolverTs>
|
|
14
|
-
transformers: Array<Visitor>
|
|
15
|
-
generators: Array<Generator<PluginTs>>
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function getPreset(preset: CompatibilityPreset, { resolvers, transformers, generators }: GetPresetOptions) {
|
|
19
|
-
return getCorePreset({
|
|
20
|
-
preset,
|
|
21
|
-
presets,
|
|
22
|
-
resolvers: [resolverTs, ...(resolvers ?? [])],
|
|
23
|
-
transformers,
|
|
24
|
-
generators,
|
|
25
|
-
})
|
|
26
|
-
}
|