@kubb/swagger-ts 2.11.1 → 2.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-QIZFD754.js → chunk-DFFHII5I.js} +150 -187
- package/dist/chunk-DFFHII5I.js.map +1 -0
- package/dist/{chunk-Y5R6DTFD.cjs → chunk-IVO3V2IW.cjs} +145 -182
- package/dist/chunk-IVO3V2IW.cjs.map +1 -0
- package/dist/components.cjs +2 -2
- package/dist/components.d.cts +2 -2
- package/dist/components.d.ts +2 -2
- package/dist/components.js +1 -1
- package/dist/{index-BKDH3fXc.d.cts → index-_MgWTBjd.d.cts} +2 -5
- package/dist/{index-BKDH3fXc.d.ts → index-_MgWTBjd.d.ts} +2 -5
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/oas.d.cts +1 -1
- package/dist/oas.d.ts +1 -1
- package/package.json +9 -8
- package/src/OperationGenerator.tsx +7 -6
- package/src/SchemaGenerator.tsx +14 -7
- package/src/components/OasType.tsx +7 -19
- package/src/components/OperationSchema.tsx +34 -64
- package/src/oas/infer.ts +15 -21
- package/src/oas/mappers.ts +37 -53
- package/src/oas/model.ts +11 -10
- package/src/oas/requestParams.ts +65 -97
- package/src/oas/response.ts +3 -11
- package/src/oas/security.ts +104 -102
- package/src/plugin.ts +19 -25
- package/src/typeParser.ts +92 -92
- package/src/types.ts +1 -1
- package/dist/chunk-QIZFD754.js.map +0 -1
- package/dist/chunk-Y5R6DTFD.cjs.map +0 -1
package/src/typeParser.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import transformers from '@kubb/core/transformers'
|
2
2
|
import { print } from '@kubb/parser'
|
3
3
|
import * as factory from '@kubb/parser/factory'
|
4
|
-
import {
|
4
|
+
import { SchemaGenerator, isKeyword, schemaKeywords } from '@kubb/swagger'
|
5
5
|
|
6
6
|
import type { ts } from '@kubb/parser'
|
7
7
|
import type { Schema, SchemaKeywordMapper, SchemaMapper } from '@kubb/swagger'
|
@@ -18,7 +18,6 @@ export const typeKeywordMapper = {
|
|
18
18
|
|
19
19
|
return factory.createTypeLiteralNode(nodes)
|
20
20
|
},
|
21
|
-
lazy: undefined,
|
22
21
|
string: () => factory.keywordTypeNodes.string,
|
23
22
|
boolean: () => factory.keywordTypeNodes.boolean,
|
24
23
|
undefined: () => factory.keywordTypeNodes.undefined,
|
@@ -107,7 +106,7 @@ export const typeKeywordMapper = {
|
|
107
106
|
type: undefined,
|
108
107
|
format: undefined,
|
109
108
|
catchall: undefined,
|
110
|
-
} satisfies SchemaMapper<
|
109
|
+
} satisfies SchemaMapper<ts.Node | null | undefined>
|
111
110
|
|
112
111
|
type ParserOptions = {
|
113
112
|
name: string
|
@@ -122,63 +121,50 @@ type ParserOptions = {
|
|
122
121
|
*/
|
123
122
|
enumType: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal'
|
124
123
|
keysToOmit?: string[]
|
125
|
-
mapper?:
|
124
|
+
mapper?: SchemaMapper
|
126
125
|
}
|
127
126
|
|
128
|
-
export function parseTypeMeta(
|
129
|
-
const
|
130
|
-
const value = mapper[item.keyword as keyof typeof mapper]
|
127
|
+
export function parseTypeMeta(parent: Schema | undefined, current: Schema, options: ParserOptions): ts.Node | null | undefined {
|
128
|
+
const value = typeKeywordMapper[current.keyword as keyof typeof typeKeywordMapper]
|
131
129
|
|
132
130
|
if (!value) {
|
133
131
|
return undefined
|
134
132
|
}
|
135
133
|
|
136
|
-
if (isKeyword(
|
137
|
-
|
138
|
-
return value(item.args.map(orItem => parseTypeMeta(orItem, options)).filter(Boolean) as ts.TypeNode[])
|
134
|
+
if (isKeyword(current, schemaKeywords.union)) {
|
135
|
+
return typeKeywordMapper.union(current.args.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean) as ts.TypeNode[])
|
139
136
|
}
|
140
137
|
|
141
|
-
if (isKeyword(
|
142
|
-
|
143
|
-
return value(item.args.map(orItem => parseTypeMeta(orItem, options)).filter(Boolean) as ts.TypeNode[])
|
138
|
+
if (isKeyword(current, schemaKeywords.and)) {
|
139
|
+
return typeKeywordMapper.and(current.args.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean) as ts.TypeNode[])
|
144
140
|
}
|
145
141
|
|
146
|
-
if (isKeyword(
|
147
|
-
|
148
|
-
return value(item.args.items.map(orItem => parseTypeMeta(orItem, options)).filter(Boolean) as ts.TypeNode[])
|
142
|
+
if (isKeyword(current, schemaKeywords.array)) {
|
143
|
+
return typeKeywordMapper.array(current.args.items.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean) as ts.TypeNode[])
|
149
144
|
}
|
150
145
|
|
151
|
-
if (isKeyword(
|
152
|
-
|
153
|
-
return value(item.args.typeName)
|
146
|
+
if (isKeyword(current, schemaKeywords.enum)) {
|
147
|
+
return typeKeywordMapper.enum(current.args.typeName)
|
154
148
|
}
|
155
149
|
|
156
|
-
if (isKeyword(
|
157
|
-
|
158
|
-
return value(item.args.name)
|
150
|
+
if (isKeyword(current, schemaKeywords.ref)) {
|
151
|
+
return typeKeywordMapper.ref(current.args.name)
|
159
152
|
}
|
160
153
|
|
161
|
-
if (isKeyword(
|
154
|
+
if (isKeyword(current, schemaKeywords.blob)) {
|
162
155
|
return value()
|
163
156
|
}
|
164
157
|
|
165
|
-
if (isKeyword(
|
166
|
-
|
167
|
-
return value(
|
168
|
-
item.args.map(tupleItem => parseTypeMeta(tupleItem, options)).filter(Boolean) as ts.TypeNode[],
|
169
|
-
)
|
158
|
+
if (isKeyword(current, schemaKeywords.tuple)) {
|
159
|
+
return typeKeywordMapper.tuple(current.args.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean) as ts.TypeNode[])
|
170
160
|
}
|
171
161
|
|
172
|
-
if (isKeyword(
|
173
|
-
const
|
174
|
-
|
175
|
-
return value(item.args.name, item.args.format)
|
162
|
+
if (isKeyword(current, schemaKeywords.const)) {
|
163
|
+
return typeKeywordMapper.const(current.args.name, current.args.format)
|
176
164
|
}
|
177
165
|
|
178
|
-
if (isKeyword(
|
179
|
-
const
|
180
|
-
|
181
|
-
const properties = Object.entries(item.args?.properties || {})
|
166
|
+
if (isKeyword(current, schemaKeywords.object)) {
|
167
|
+
const properties = Object.entries(current.args?.properties || {})
|
182
168
|
.filter((item) => {
|
183
169
|
const schemas = item[1]
|
184
170
|
return schemas && typeof schemas.map === 'function'
|
@@ -187,31 +173,35 @@ export function parseTypeMeta(item: Schema, options: ParserOptions): ts.Node | n
|
|
187
173
|
const name = item[0]
|
188
174
|
const schemas = item[1]
|
189
175
|
|
190
|
-
const isNullish = schemas.some(
|
191
|
-
const isNullable = schemas.some(
|
192
|
-
const isOptional = schemas.some(
|
193
|
-
const isReadonly = schemas.some(
|
194
|
-
const describeSchema = schemas.find(
|
195
|
-
const deprecatedSchema = schemas.find(
|
196
|
-
const defaultSchema = schemas.find(
|
197
|
-
const exampleSchema = schemas.find(
|
198
|
-
const typeSchema = schemas.find(
|
199
|
-
const formatSchema = schemas.find(
|
200
|
-
|
201
|
-
let type = schemas
|
202
|
-
.map((item) => parseTypeMeta(item, options))
|
203
|
-
.filter(Boolean)[0] as ts.TypeNode
|
176
|
+
const isNullish = schemas.some((schema) => schema.keyword === schemaKeywords.nullish)
|
177
|
+
const isNullable = schemas.some((schema) => schema.keyword === schemaKeywords.nullable)
|
178
|
+
const isOptional = schemas.some((schema) => schema.keyword === schemaKeywords.optional)
|
179
|
+
const isReadonly = schemas.some((schema) => schema.keyword === schemaKeywords.readOnly)
|
180
|
+
const describeSchema = schemas.find((schema) => schema.keyword === schemaKeywords.describe) as SchemaKeywordMapper['describe'] | undefined
|
181
|
+
const deprecatedSchema = schemas.find((schema) => schema.keyword === schemaKeywords.deprecated) as SchemaKeywordMapper['deprecated'] | undefined
|
182
|
+
const defaultSchema = schemas.find((schema) => schema.keyword === schemaKeywords.default) as SchemaKeywordMapper['default'] | undefined
|
183
|
+
const exampleSchema = schemas.find((schema) => schema.keyword === schemaKeywords.example) as SchemaKeywordMapper['example'] | undefined
|
184
|
+
const typeSchema = schemas.find((schema) => schema.keyword === schemaKeywords.type) as SchemaKeywordMapper['type'] | undefined
|
185
|
+
const formatSchema = schemas.find((schema) => schema.keyword === schemaKeywords.format) as SchemaKeywordMapper['format'] | undefined
|
186
|
+
|
187
|
+
let type = schemas.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean)[0] as ts.TypeNode
|
204
188
|
|
205
189
|
if (isNullable) {
|
206
|
-
type = factory.createUnionDeclaration({
|
190
|
+
type = factory.createUnionDeclaration({
|
191
|
+
nodes: [type, factory.keywordTypeNodes.null],
|
192
|
+
}) as ts.TypeNode
|
207
193
|
}
|
208
194
|
|
209
195
|
if (isNullish && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {
|
210
|
-
type = factory.createUnionDeclaration({
|
196
|
+
type = factory.createUnionDeclaration({
|
197
|
+
nodes: [type, factory.keywordTypeNodes.undefined],
|
198
|
+
}) as ts.TypeNode
|
211
199
|
}
|
212
200
|
|
213
201
|
if (isOptional && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {
|
214
|
-
type = factory.createUnionDeclaration({
|
202
|
+
type = factory.createUnionDeclaration({
|
203
|
+
nodes: [type, factory.keywordTypeNodes.undefined],
|
204
|
+
}) as ts.TypeNode
|
215
205
|
}
|
216
206
|
|
217
207
|
const propertySignature = factory.createPropertySignature({
|
@@ -225,36 +215,34 @@ export function parseTypeMeta(item: Schema, options: ParserOptions): ts.Node | n
|
|
225
215
|
node: propertySignature,
|
226
216
|
comments: [
|
227
217
|
describeSchema ? `@description ${transformers.jsStringEscape(describeSchema.args)}` : undefined,
|
228
|
-
deprecatedSchema ?
|
229
|
-
defaultSchema
|
230
|
-
? `@default ${defaultSchema.args}`
|
231
|
-
: undefined,
|
218
|
+
deprecatedSchema ? '@deprecated' : undefined,
|
219
|
+
defaultSchema ? `@default ${defaultSchema.args}` : undefined,
|
232
220
|
exampleSchema ? `@example ${exampleSchema.args}` : undefined,
|
233
|
-
typeSchema
|
234
|
-
? `@type ${typeSchema.args}${!isOptional ? '' : ' | undefined'} ${formatSchema?.args || ''}`
|
235
|
-
: undefined,
|
221
|
+
typeSchema ? `@type ${typeSchema.args}${!isOptional ? '' : ' | undefined'} ${formatSchema?.args || ''}` : undefined,
|
236
222
|
].filter(Boolean),
|
237
223
|
})
|
238
224
|
})
|
239
225
|
|
240
|
-
const additionalProperties =
|
241
|
-
? factory.createIndexSignature(
|
226
|
+
const additionalProperties = current.args?.additionalProperties?.length
|
227
|
+
? factory.createIndexSignature(
|
228
|
+
current.args.additionalProperties
|
229
|
+
.map((schema) => parseTypeMeta(current, schema, options))
|
230
|
+
.filter(Boolean)
|
231
|
+
.at(0) as ts.TypeNode,
|
232
|
+
)
|
242
233
|
: undefined
|
243
234
|
|
244
|
-
return
|
235
|
+
return typeKeywordMapper.object([...properties, additionalProperties].filter(Boolean))
|
245
236
|
}
|
246
237
|
|
247
|
-
if (
|
238
|
+
if (current.keyword in typeKeywordMapper) {
|
248
239
|
return value()
|
249
240
|
}
|
250
241
|
|
251
242
|
return undefined
|
252
243
|
}
|
253
244
|
|
254
|
-
export function typeParser(
|
255
|
-
schemas: Schema[],
|
256
|
-
options: ParserOptions,
|
257
|
-
): string {
|
245
|
+
export function typeParser(schemas: Schema[], options: ParserOptions): string {
|
258
246
|
const nodes: ts.Node[] = []
|
259
247
|
const extraNodes: ts.Node[] = []
|
260
248
|
|
@@ -262,54 +250,66 @@ export function typeParser(
|
|
262
250
|
return ''
|
263
251
|
}
|
264
252
|
|
265
|
-
const isNullish = schemas.some(item => item.keyword === schemaKeywords.nullish)
|
266
|
-
const isNullable = schemas.some(item => item.keyword === schemaKeywords.nullable)
|
267
|
-
const isOptional = schemas.some(item => item.keyword === schemaKeywords.optional)
|
253
|
+
const isNullish = schemas.some((item) => item.keyword === schemaKeywords.nullish)
|
254
|
+
const isNullable = schemas.some((item) => item.keyword === schemaKeywords.nullable)
|
255
|
+
const isOptional = schemas.some((item) => item.keyword === schemaKeywords.optional)
|
268
256
|
|
269
|
-
let type =
|
270
|
-
|
257
|
+
let type =
|
258
|
+
(schemas
|
259
|
+
.map((schema) => parseTypeMeta(undefined, schema, options))
|
260
|
+
.filter(Boolean)
|
261
|
+
.at(0) as ts.TypeNode) || typeKeywordMapper.undefined()
|
271
262
|
|
272
263
|
if (isNullable) {
|
273
|
-
type = factory.createUnionDeclaration({
|
264
|
+
type = factory.createUnionDeclaration({
|
265
|
+
nodes: [type, factory.keywordTypeNodes.null],
|
266
|
+
}) as ts.TypeNode
|
274
267
|
}
|
275
268
|
|
276
269
|
if (isNullish && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {
|
277
|
-
type = factory.createUnionDeclaration({
|
270
|
+
type = factory.createUnionDeclaration({
|
271
|
+
nodes: [type, factory.keywordTypeNodes.undefined],
|
272
|
+
}) as ts.TypeNode
|
278
273
|
}
|
279
274
|
|
280
275
|
if (isOptional && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {
|
281
|
-
type = factory.createUnionDeclaration({
|
276
|
+
type = factory.createUnionDeclaration({
|
277
|
+
nodes: [type, factory.keywordTypeNodes.undefined],
|
278
|
+
}) as ts.TypeNode
|
282
279
|
}
|
283
280
|
|
284
281
|
const node = factory.createTypeAliasDeclaration({
|
285
282
|
modifiers: [factory.modifiers.export],
|
286
283
|
name: options.name,
|
287
|
-
type: options.keysToOmit?.length
|
284
|
+
type: options.keysToOmit?.length
|
285
|
+
? factory.createOmitDeclaration({
|
286
|
+
keys: options.keysToOmit,
|
287
|
+
type,
|
288
|
+
nonNullable: true,
|
289
|
+
})
|
290
|
+
: type,
|
288
291
|
})
|
289
292
|
|
290
293
|
const enumSchemas = SchemaGenerator.deepSearch(schemas, schemaKeywords.enum)
|
291
294
|
if (enumSchemas) {
|
292
|
-
enumSchemas.forEach(enumSchema => {
|
293
|
-
extraNodes.push(
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
}))
|
295
|
+
enumSchemas.forEach((enumSchema) => {
|
296
|
+
extraNodes.push(
|
297
|
+
...factory.createEnumDeclaration({
|
298
|
+
name: transformers.camelCase(enumSchema.args.name),
|
299
|
+
typeName: enumSchema.args.typeName,
|
300
|
+
enums: enumSchema.args.items
|
301
|
+
.map((item) => (item.value === undefined ? undefined : [transformers.trimQuotes(item.name?.toString()), item.value]))
|
302
|
+
.filter(Boolean) as unknown as [string, string][],
|
303
|
+
type: options.enumType,
|
304
|
+
}),
|
305
|
+
)
|
304
306
|
})
|
305
307
|
}
|
306
308
|
|
307
309
|
nodes.push(
|
308
310
|
factory.appendJSDocToNode({
|
309
311
|
node,
|
310
|
-
comments: [
|
311
|
-
options.description ? `@description ${transformers.jsStringEscape(options.description)}` : undefined,
|
312
|
-
].filter(Boolean),
|
312
|
+
comments: [options.description ? `@description ${transformers.jsStringEscape(options.description)}` : undefined].filter(Boolean),
|
313
313
|
}),
|
314
314
|
)
|
315
315
|
|
package/src/types.ts
CHANGED
@@ -51,7 +51,7 @@ export type Options = {
|
|
51
51
|
/**
|
52
52
|
* Array containing override parameters to override `options` based on tags/operations/methods/paths.
|
53
53
|
*/
|
54
|
-
override?: Array<Override<
|
54
|
+
override?: Array<Override<ResolvedOptions>>
|
55
55
|
/**
|
56
56
|
* Choose to use `enum` or `as const` for enums
|
57
57
|
* @default 'asConst'
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../src/plugin.ts","../src/OperationGenerator.tsx","../src/components/OasType.tsx","../src/components/OperationSchema.tsx","../src/SchemaGenerator.tsx","../src/typeParser.ts","../src/index.ts"],"sourcesContent":["import path from 'node:path'\n\nimport { createPlugin, FileManager, PluginManager } from '@kubb/core'\nimport { camelCase, pascalCase } from '@kubb/core/transformers'\nimport { renderTemplate } from '@kubb/core/utils'\nimport { pluginName as swaggerPluginName } from '@kubb/swagger'\n\nimport { OperationGenerator } from './OperationGenerator.tsx'\nimport { SchemaGenerator } from './SchemaGenerator.tsx'\n\nimport type { Plugin } from '@kubb/core'\nimport type { PluginOptions as SwaggerPluginOptions } from '@kubb/swagger'\nimport type { PluginOptions } from './types.ts'\nexport const pluginName = 'swagger-ts' satisfies PluginOptions['name']\nexport const pluginKey: PluginOptions['key'] = [pluginName] satisfies PluginOptions['key']\n\nexport const definePlugin = createPlugin<PluginOptions>((options) => {\n const {\n output = { path: 'types' },\n group,\n exclude = [],\n include,\n override = [],\n enumType = 'asConst',\n enumSuffix = '',\n dateType = 'string',\n unknownType = 'any',\n optionalType = 'questionToken',\n transformers = {},\n oasType = false,\n } = options\n const template = group?.output ? group.output : `${output.path}/{{tag}}Controller`\n\n return {\n name: pluginName,\n options: {\n transformers,\n dateType,\n optionalType,\n oasType,\n enumType,\n enumSuffix,\n // keep the used enumnames between SchemaGenerator and OperationGenerator per plugin(pluginKey)\n usedEnumNames: {},\n unknownType,\n },\n pre: [swaggerPluginName],\n resolvePath(baseName, pathMode, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = pathMode ?? FileManager.getMode(path.resolve(root, output.path))\n\n if (mode === 'file') {\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 (options?.tag && group?.type === 'tag') {\n const tag = camelCase(options.tag)\n\n return path.resolve(root, renderTemplate(template, { tag }), baseName)\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 writeFile(source, writePath) {\n if (!writePath.endsWith('.ts') || !source) {\n return\n }\n\n return this.fileManager.write(source, writePath, { sanity: false })\n },\n async buildStart() {\n const [swaggerPlugin]: [Plugin<SwaggerPluginOptions>] = PluginManager.getDependedPlugins<SwaggerPluginOptions>(this.plugins, [swaggerPluginName])\n\n const oas = await swaggerPlugin.api.getOas()\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = FileManager.getMode(path.resolve(root, output.path))\n\n const schemaGenerator = new SchemaGenerator(\n this.plugin.options,\n {\n oas,\n pluginManager: this.pluginManager,\n plugin: this.plugin,\n contentType: swaggerPlugin.api.contentType,\n include: undefined,\n mode,\n output: output.path,\n },\n )\n\n const schemaFiles = await schemaGenerator.build()\n await this.addFile(...schemaFiles)\n\n const operationGenerator = new OperationGenerator(\n this.plugin.options,\n {\n oas,\n pluginManager: this.pluginManager,\n plugin: this.plugin,\n contentType: swaggerPlugin.api.contentType,\n exclude,\n include,\n override,\n mode,\n },\n )\n\n const operationFiles = await operationGenerator.build()\n await this.addFile(...operationFiles)\n },\n async buildEnd() {\n if (this.config.output.write === false) {\n return\n }\n\n const root = path.resolve(this.config.root, this.config.output.path)\n\n await this.fileManager.addIndexes({\n root,\n output,\n meta: { pluginKey: this.plugin.key },\n })\n },\n }\n})\n","import { createRoot } from '@kubb/react'\nimport { OperationGenerator as Generator } from '@kubb/swagger'\nimport { Oas } from '@kubb/swagger/components'\n\nimport { OasType } from './components/OasType.tsx'\nimport { OperationSchema } from './components/OperationSchema.tsx'\n\nimport type { AppContextProps } from '@kubb/react'\nimport type { OperationMethodResult } from '@kubb/swagger'\nimport type { Operation } from '@kubb/swagger/oas'\nimport type { FileMeta, PluginOptions } from './types.ts'\n\nexport class OperationGenerator extends Generator<PluginOptions['resolvedOptions'], PluginOptions> {\n async all(operations: Operation[]): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin } = this.context\n\n const root = createRoot<AppContextProps<PluginOptions['appMeta']>>({ logger: pluginManager.logger })\n\n root.render(\n <Oas oas={oas} operations={operations} getOperationSchemas={(...props) => this.getSchemas(...props)}>\n {plugin.options.oasType && <OasType.File name=\"oas\" typeName=\"Oas\" />}\n </Oas>,\n { meta: { pluginManager, plugin } },\n )\n\n return root.files\n }\n\n async operation(\n operation: Operation,\n options: PluginOptions['resolvedOptions'],\n ): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin, mode } = this.context\n\n const root = createRoot<AppContextProps<PluginOptions['appMeta']>>({ logger: pluginManager.logger })\n root.render(\n <Oas oas={oas} operations={[operation]} getOperationSchemas={(...props) => this.getSchemas(...props)}>\n <Oas.Operation operation={operation}>\n <OperationSchema.File mode={mode} />\n </Oas.Operation>\n </Oas>,\n { meta: { pluginManager, plugin: { ...plugin, options } } },\n )\n\n return root.files\n }\n\n async get(): OperationMethodResult<FileMeta> {\n return null\n }\n\n async post(): OperationMethodResult<FileMeta> {\n return null\n }\n\n async put(): OperationMethodResult<FileMeta> {\n return null\n }\n async patch(): OperationMethodResult<FileMeta> {\n return null\n }\n async delete(): OperationMethodResult<FileMeta> {\n return null\n }\n}\n","import { Editor, File, Type, usePlugin } from '@kubb/react'\nimport { useGetFile } from '@kubb/react'\nimport { useOas } from '@kubb/swagger/hooks'\n\nimport type { OasTypes } from '@kubb/swagger/oas'\nimport type { ReactNode } from 'react'\nimport type { FileMeta, PluginOptions } from '../types.ts'\n\ntype TemplateProps = {\n /**\n * Name of the function\n */\n name: string\n typeName: string\n api: OasTypes.OASDocument\n}\n\nfunction Template({\n name,\n typeName,\n api,\n}: TemplateProps): ReactNode {\n return (\n <>\n {`export const ${name} = ${JSON.stringify(api, undefined, 2)} as const`}\n <br />\n <Type name={typeName} export>\n {`Infer<typeof ${name}>`}\n </Type>\n </>\n )\n}\n\nconst defaultTemplates = { default: Template } as const\n\ntype Props = {\n name: string\n typeName: string\n /**\n * This will make it possible to override the default behaviour.\n */\n Template?: React.ComponentType<React.ComponentProps<typeof Template>>\n}\n\nexport function OasType({\n name,\n typeName,\n Template = defaultTemplates.default,\n}: Props): ReactNode {\n const oas = useOas()\n\n return <Template name={name} typeName={typeName} api={oas.api} />\n}\n\ntype FileProps = {\n name: string\n typeName: string\n /**\n * This will make it possible to override the default behaviour.\n */\n templates?: typeof defaultTemplates\n}\n\nOasType.File = function({ name, typeName, templates = defaultTemplates }: FileProps): ReactNode {\n const { key: pluginKey } = usePlugin<PluginOptions>()\n const file = useGetFile({ name, extName: '.ts', pluginKey })\n\n const Template = templates.default\n\n return (\n <Editor language=\"typescript\">\n <File<FileMeta>\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n >\n <File.Import name={['Infer']} path=\"@kubb/swagger-ts/oas\" isTypeOnly />\n <File.Source>\n <OasType Template={Template} name={name} typeName={typeName} />\n </File.Source>\n </File>\n </Editor>\n )\n}\n\nOasType.templates = defaultTemplates\n","/* eslint-disable no-empty-pattern */\n/* eslint-disable @typescript-eslint/ban-types */\nimport transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\nimport { Editor, File, usePlugin, usePluginManager } from '@kubb/react'\nimport { Oas, Schema } from '@kubb/swagger/components'\nimport { useGetOperationFile, useOas, useOperation, useOperationName, useOperationSchemas } from '@kubb/swagger/hooks'\n\nimport { SchemaGenerator } from '../SchemaGenerator.tsx'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\nimport type { OperationSchema as OperationSchemaType } from '@kubb/swagger'\nimport type { OperationSchemas } from '@kubb/swagger'\nimport type { Operation } from '@kubb/swagger/oas'\nimport type { ReactNode } from 'react'\nimport type { FileMeta, PluginOptions } from '../types.ts'\n\ntype Props = {}\n\nfunction printCombinedSchema(name: string, operation: Operation, schemas: OperationSchemas): string {\n const properties: Record<string, ts.TypeNode> = {\n 'response': factory.createTypeReferenceNode(\n factory.createIdentifier(schemas.response.name),\n undefined,\n ),\n }\n\n if (schemas.request) {\n properties['request'] = factory.createTypeReferenceNode(\n factory.createIdentifier(schemas.request.name),\n undefined,\n )\n }\n\n if (schemas.pathParams) {\n properties['pathParams'] = factory.createTypeReferenceNode(\n factory.createIdentifier(schemas.pathParams.name),\n undefined,\n )\n }\n\n if (schemas.queryParams) {\n properties['queryParams'] = factory.createTypeReferenceNode(\n factory.createIdentifier(schemas.queryParams.name),\n undefined,\n )\n }\n\n if (schemas.headerParams) {\n properties['headerParams'] = factory.createTypeReferenceNode(\n factory.createIdentifier(schemas.headerParams.name),\n undefined,\n )\n }\n\n if (schemas.errors) {\n properties['errors'] = factory.createUnionDeclaration({\n nodes: schemas.errors.map(error => {\n return factory.createTypeReferenceNode(\n factory.createIdentifier(error.name),\n undefined,\n )\n }),\n })!\n }\n\n const namespaceNode = factory.createTypeAliasDeclaration({\n name: operation.method === 'get' ? `${name}Query` : `${name}Mutation`,\n type: factory.createTypeLiteralNode(\n Object.keys(properties).map(key => {\n const type = properties[key]\n if (!type) {\n return undefined\n }\n\n return factory.createPropertySignature(\n {\n name: transformers.pascalCase(key),\n type,\n },\n )\n }).filter(Boolean),\n ),\n modifiers: [factory.modifiers.export],\n })\n\n return print(namespaceNode)\n}\n\nexport function OperationSchema({}: Props): ReactNode {\n return (\n <>\n </>\n )\n}\n\ntype FileProps = {\n mode: KubbFile.Mode | undefined\n}\n\nOperationSchema.File = function({ mode = 'directory' }: FileProps): ReactNode {\n const plugin = usePlugin<PluginOptions>()\n\n const pluginManager = usePluginManager()\n const oas = useOas()\n const schemas = useOperationSchemas()\n const file = useGetOperationFile()\n const factoryName = useOperationName({ type: 'type' })\n const operation = useOperation()\n\n const generator = new SchemaGenerator(plugin.options, { oas, plugin, pluginManager })\n\n const items = [\n schemas.pathParams,\n schemas.queryParams,\n schemas.headerParams,\n schemas.statusCodes,\n schemas.request,\n schemas.response,\n ].flat().filter(Boolean)\n\n const mapItem = ({ name, schema: object, ...options }: OperationSchemaType, i: number) => {\n return (\n <Oas.Schema key={i} generator={generator} name={name} object={object}>\n {mode === 'directory'\n && <Schema.Imports isTypeOnly />}\n <File.Source>\n <Schema.Source options={options} />\n </File.Source>\n </Oas.Schema>\n )\n }\n\n return (\n <Editor language=\"typescript\">\n <File<FileMeta>\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n >\n {items.map(mapItem)}\n\n <File.Source>\n {printCombinedSchema(factoryName, operation, schemas)}\n </File.Source>\n </File>\n </Editor>\n )\n}\n","import { createRoot } from '@kubb/react'\nimport { SchemaGenerator as Generator } from '@kubb/swagger'\nimport { Oas, Schema } from '@kubb/swagger/components'\nimport { pluginKey as swaggerTypeScriptPluginKey } from '@kubb/swagger-ts'\n\nimport { pluginKey } from './plugin.ts'\nimport { typeParser } from './typeParser.ts'\n\nimport type { AppContextProps } from '@kubb/react'\nimport type { Schema as SchemaType, SchemaGeneratorBuildOptions, SchemaMethodResult } from '@kubb/swagger'\nimport type { SchemaObject } from '@kubb/swagger/oas'\nimport type { FileMeta, PluginOptions } from './types.ts'\n\nexport class SchemaGenerator extends Generator<PluginOptions['resolvedOptions'], PluginOptions> {\n async schema(name: string, object: SchemaObject): SchemaMethodResult<FileMeta> {\n const { oas, pluginManager, mode, plugin, output } = this.context\n\n const root = createRoot<AppContextProps<PluginOptions['appMeta']>>({ logger: pluginManager.logger })\n\n root.render(\n <Oas oas={oas}>\n <Oas.Schema generator={this} name={name} object={object}>\n <Schema.File isTypeOnly output={output} mode={mode} />\n </Oas.Schema>\n </Oas>,\n { meta: { pluginManager, plugin } },\n )\n\n return root.files\n }\n // TODO convert to a react component called `Schema.Parser` with props parser as part of the SchemaContext\n getSource(name: string, schemas: SchemaType[], {\n keysToOmit,\n description,\n }: SchemaGeneratorBuildOptions = {}): string[] {\n const texts: string[] = []\n\n const resolvedName = this.context.pluginManager.resolveName({ name, pluginKey, type: 'function' })\n const resvoledTypeName = this.context.pluginManager.resolveName({ name, pluginKey: swaggerTypeScriptPluginKey, type: 'type' })\n\n const typeOutput = typeParser(schemas, {\n name: resolvedName,\n typeName: resvoledTypeName,\n description,\n enumType: this.options.enumType || 'asConst',\n optionalType: this.options.optionalType,\n keysToOmit,\n })\n\n texts.push(typeOutput)\n\n return texts\n }\n /**\n * @deprecated only used for testing\n */\n\n buildSource(name: string, schema: SchemaObject, options: SchemaGeneratorBuildOptions = {}): string[] {\n const schemas = this.buildSchemas(schema, name)\n\n return this.getSource(name, schemas, options)\n }\n}\n","import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\nimport { isKeyword, SchemaGenerator, schemaKeywords } from '@kubb/swagger'\n\nimport type { ts } from '@kubb/parser'\nimport type { Schema, SchemaKeywordMapper, SchemaMapper } from '@kubb/swagger'\n\nexport const typeKeywordMapper = {\n any: () => factory.keywordTypeNodes.any,\n unknown: () => factory.keywordTypeNodes.unknown,\n number: () => factory.keywordTypeNodes.number,\n integer: () => factory.keywordTypeNodes.number,\n object: (nodes?: ts.TypeElement[]) => {\n if (!nodes) {\n return factory.keywordTypeNodes.object\n }\n\n return factory.createTypeLiteralNode(nodes)\n },\n lazy: undefined,\n string: () => factory.keywordTypeNodes.string,\n boolean: () => factory.keywordTypeNodes.boolean,\n undefined: () => factory.keywordTypeNodes.undefined,\n nullable: undefined,\n null: () => factory.keywordTypeNodes.null,\n nullish: undefined,\n array: (nodes?: ts.TypeNode[]) => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createArrayDeclaration({ nodes })\n },\n tuple: (nodes?: ts.TypeNode[]) => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createTupleTypeNode(nodes)\n },\n enum: (name?: string) => {\n if (!name) {\n return undefined\n }\n\n return factory.createTypeReferenceNode(name, undefined)\n },\n union: (nodes?: ts.TypeNode[]) => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createUnionDeclaration({\n withParentheses: true,\n nodes,\n })\n },\n const: (name?: string | number, format?: 'string' | 'number') => {\n if (!name) {\n return undefined\n }\n\n if (format === 'number') {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(name))\n }\n\n return factory.createLiteralTypeNode(factory.createStringLiteral(name.toString()))\n },\n datetime: () => factory.keywordTypeNodes.string,\n date: () => factory.createTypeReferenceNode(factory.createIdentifier('Date')),\n uuid: undefined,\n url: undefined,\n strict: undefined,\n default: undefined,\n and: (nodes?: ts.TypeNode[]) => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createIntersectionDeclaration({\n withParentheses: true,\n nodes,\n })\n },\n describe: undefined,\n min: undefined,\n max: undefined,\n optional: undefined,\n matches: undefined,\n email: undefined,\n firstName: undefined,\n lastName: undefined,\n password: undefined,\n phone: undefined,\n readOnly: undefined,\n ref: (propertyName?: string) => {\n if (!propertyName) {\n return undefined\n }\n\n return factory.createTypeReferenceNode(propertyName, undefined)\n },\n blob: () => factory.createTypeReferenceNode('Blob', []),\n deprecated: undefined,\n example: undefined,\n type: undefined,\n format: undefined,\n catchall: undefined,\n} satisfies SchemaMapper<(ctx?: any) => ts.Node | null | undefined>\n\ntype ParserOptions = {\n name: string\n typeName?: string\n description?: string\n /**\n * @default `'questionToken'`\n */\n optionalType: 'questionToken' | 'undefined' | 'questionTokenAndUndefined'\n /**\n * @default `'asConst'`\n */\n enumType: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal'\n keysToOmit?: string[]\n mapper?: typeof typeKeywordMapper\n}\n\nexport function parseTypeMeta(item: Schema, options: ParserOptions): ts.Node | null | undefined {\n const mapper = options.mapper || typeKeywordMapper\n const value = mapper[item.keyword as keyof typeof mapper]\n\n if (!value) {\n return undefined\n }\n\n if (isKeyword(item, schemaKeywords.union)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['union']\n return value(item.args.map(orItem => parseTypeMeta(orItem, options)).filter(Boolean) as ts.TypeNode[])\n }\n\n if (isKeyword(item, schemaKeywords.and)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['and']\n return value(item.args.map(orItem => parseTypeMeta(orItem, options)).filter(Boolean) as ts.TypeNode[])\n }\n\n if (isKeyword(item, schemaKeywords.array)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['array']\n return value(item.args.items.map(orItem => parseTypeMeta(orItem, options)).filter(Boolean) as ts.TypeNode[])\n }\n\n if (isKeyword(item, schemaKeywords.enum)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['enum']\n return value(item.args.typeName)\n }\n\n if (isKeyword(item, schemaKeywords.ref)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['ref']\n return value(item.args.name)\n }\n\n if (isKeyword(item, schemaKeywords.blob)) {\n return value()\n }\n\n if (isKeyword(item, schemaKeywords.tuple)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['tuple']\n return value(\n item.args.map(tupleItem => parseTypeMeta(tupleItem, options)).filter(Boolean) as ts.TypeNode[],\n )\n }\n\n if (isKeyword(item, schemaKeywords.const)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['const']\n\n return value(item.args.name, item.args.format)\n }\n\n if (isKeyword(item, schemaKeywords.object)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['object']\n\n const properties = Object.entries(item.args?.properties || {})\n .filter((item) => {\n const schemas = item[1]\n return schemas && typeof schemas.map === 'function'\n })\n .map((item) => {\n const name = item[0]\n const schemas = item[1]\n\n const isNullish = schemas.some(item => item.keyword === schemaKeywords.nullish)\n const isNullable = schemas.some(item => item.keyword === schemaKeywords.nullable)\n const isOptional = schemas.some(item => item.keyword === schemaKeywords.optional)\n const isReadonly = schemas.some(item => item.keyword === schemaKeywords.readOnly)\n const describeSchema = schemas.find(item => item.keyword === schemaKeywords.describe) as SchemaKeywordMapper['describe'] | undefined\n const deprecatedSchema = schemas.find(item => item.keyword === schemaKeywords.deprecated) as SchemaKeywordMapper['deprecated'] | undefined\n const defaultSchema = schemas.find(item => item.keyword === schemaKeywords.default) as SchemaKeywordMapper['default'] | undefined\n const exampleSchema = schemas.find(item => item.keyword === schemaKeywords.example) as SchemaKeywordMapper['example'] | undefined\n const typeSchema = schemas.find(item => item.keyword === schemaKeywords.type) as SchemaKeywordMapper['type'] | undefined\n const formatSchema = schemas.find(item => item.keyword === schemaKeywords.format) as SchemaKeywordMapper['format'] | undefined\n\n let type = schemas\n .map((item) => parseTypeMeta(item, options))\n .filter(Boolean)[0] as ts.TypeNode\n\n if (isNullable) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.null] }) as ts.TypeNode\n }\n\n if (isNullish && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] }) as ts.TypeNode\n }\n\n if (isOptional && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] }) as ts.TypeNode\n }\n\n const propertySignature = factory.createPropertySignature({\n questionToken: isOptional && ['questionToken', 'questionTokenAndUndefined'].includes(options.optionalType as string),\n name,\n type,\n readOnly: isReadonly,\n })\n\n return factory.appendJSDocToNode({\n node: propertySignature,\n comments: [\n describeSchema ? `@description ${transformers.jsStringEscape(describeSchema.args)}` : undefined,\n deprecatedSchema ? `@deprecated` : undefined,\n defaultSchema\n ? `@default ${defaultSchema.args}`\n : undefined,\n exampleSchema ? `@example ${exampleSchema.args}` : undefined,\n typeSchema\n ? `@type ${typeSchema.args}${!isOptional ? '' : ' | undefined'} ${formatSchema?.args || ''}`\n : undefined,\n ].filter(Boolean),\n })\n })\n\n const additionalProperties = item.args?.additionalProperties?.length\n ? factory.createIndexSignature(item.args.additionalProperties.map(schema => parseTypeMeta(schema, options)).filter(Boolean).at(0) as ts.TypeNode)\n : undefined\n\n return value([...properties, additionalProperties].filter(Boolean))\n }\n\n if (item.keyword in mapper) {\n return value()\n }\n\n return undefined\n}\n\nexport function typeParser(\n schemas: Schema[],\n options: ParserOptions,\n): string {\n const nodes: ts.Node[] = []\n const extraNodes: ts.Node[] = []\n\n if (!schemas.length) {\n return ''\n }\n\n const isNullish = schemas.some(item => item.keyword === schemaKeywords.nullish)\n const isNullable = schemas.some(item => item.keyword === schemaKeywords.nullable)\n const isOptional = schemas.some(item => item.keyword === schemaKeywords.optional)\n\n let type = schemas.map((schema) => parseTypeMeta(schema, options)).filter(Boolean).at(0) as ts.TypeNode\n || typeKeywordMapper.undefined()\n\n if (isNullable) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.null] }) as ts.TypeNode\n }\n\n if (isNullish && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] }) as ts.TypeNode\n }\n\n if (isOptional && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] }) as ts.TypeNode\n }\n\n const node = factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: options.name,\n type: options.keysToOmit?.length ? factory.createOmitDeclaration({ keys: options.keysToOmit, type, nonNullable: true }) : type,\n })\n\n const enumSchemas = SchemaGenerator.deepSearch(schemas, schemaKeywords.enum)\n if (enumSchemas) {\n enumSchemas.forEach(enumSchema => {\n extraNodes.push(...factory.createEnumDeclaration({\n name: transformers.camelCase(enumSchema.args.name),\n typeName: enumSchema.args.typeName,\n enums: enumSchema.args.items.map(item => item.value === undefined ? undefined : [transformers.trimQuotes(item.name?.toString()), item.value]).filter(\n Boolean,\n ) as unknown as [\n string,\n string,\n ][],\n type: options.enumType,\n }))\n })\n }\n\n nodes.push(\n factory.appendJSDocToNode({\n node,\n comments: [\n options.description ? `@description ${transformers.jsStringEscape(options.description)}` : undefined,\n ].filter(Boolean),\n }),\n )\n\n const filterdNodes = nodes.filter(\n (node: ts.Node) =>\n !extraNodes.some(\n (extraNode: ts.Node) => (extraNode as ts.TypeAliasDeclaration)?.name?.escapedText === (node as ts.TypeAliasDeclaration)?.name?.escapedText,\n ),\n )\n\n return print([...extraNodes, ...filterdNodes])\n}\n","import { definePlugin } from './plugin.ts'\n\nexport { definePlugin, pluginKey, pluginName } from './plugin.ts'\nexport type * from './types.ts'\n\n/**\n * @deprecated Use `import { definePlugin } from '@kubb/swagger-ts'`\n */\nconst definePluginDefault = definePlugin\n\nexport default definePluginDefault\n"],"mappings":"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","names":["createRoot","Generator","Oas","Template","pluginKey","transformers","print","factory","Editor","File","usePlugin","Oas","Schema","useOas","value","item","node","jsx","SchemaGenerator","Fragment","jsx","jsxs","transformers","print","usePlugin","useOas","SchemaGenerator","Oas","Schema","File","Editor","jsx","Generator","createRoot","Oas","transformers","options","SchemaGenerator"]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../src/plugin.ts","../src/OperationGenerator.tsx","../src/components/OasType.tsx","../src/components/OperationSchema.tsx","../src/SchemaGenerator.tsx","../src/typeParser.ts","../src/index.ts"],"names":["createRoot","Generator","Oas","Template","pluginKey","transformers","print","factory","Editor","File","usePlugin","Schema","useOas","value","item","node","jsx","SchemaGenerator","Fragment","jsxs","options"],"mappings":"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","sourcesContent":["import path from 'node:path'\n\nimport { createPlugin, FileManager, PluginManager } from '@kubb/core'\nimport { camelCase, pascalCase } from '@kubb/core/transformers'\nimport { renderTemplate } from '@kubb/core/utils'\nimport { pluginName as swaggerPluginName } from '@kubb/swagger'\n\nimport { OperationGenerator } from './OperationGenerator.tsx'\nimport { SchemaGenerator } from './SchemaGenerator.tsx'\n\nimport type { Plugin } from '@kubb/core'\nimport type { PluginOptions as SwaggerPluginOptions } from '@kubb/swagger'\nimport type { PluginOptions } from './types.ts'\nexport const pluginName = 'swagger-ts' satisfies PluginOptions['name']\nexport const pluginKey: PluginOptions['key'] = [pluginName] satisfies PluginOptions['key']\n\nexport const definePlugin = createPlugin<PluginOptions>((options) => {\n const {\n output = { path: 'types' },\n group,\n exclude = [],\n include,\n override = [],\n enumType = 'asConst',\n enumSuffix = '',\n dateType = 'string',\n unknownType = 'any',\n optionalType = 'questionToken',\n transformers = {},\n oasType = false,\n } = options\n const template = group?.output ? group.output : `${output.path}/{{tag}}Controller`\n\n return {\n name: pluginName,\n options: {\n transformers,\n dateType,\n optionalType,\n oasType,\n enumType,\n enumSuffix,\n // keep the used enumnames between SchemaGenerator and OperationGenerator per plugin(pluginKey)\n usedEnumNames: {},\n unknownType,\n },\n pre: [swaggerPluginName],\n resolvePath(baseName, pathMode, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = pathMode ?? FileManager.getMode(path.resolve(root, output.path))\n\n if (mode === 'file') {\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 (options?.tag && group?.type === 'tag') {\n const tag = camelCase(options.tag)\n\n return path.resolve(root, renderTemplate(template, { tag }), baseName)\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 writeFile(source, writePath) {\n if (!writePath.endsWith('.ts') || !source) {\n return\n }\n\n return this.fileManager.write(source, writePath, { sanity: false })\n },\n async buildStart() {\n const [swaggerPlugin]: [Plugin<SwaggerPluginOptions>] = PluginManager.getDependedPlugins<SwaggerPluginOptions>(this.plugins, [swaggerPluginName])\n\n const oas = await swaggerPlugin.api.getOas()\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = FileManager.getMode(path.resolve(root, output.path))\n\n const schemaGenerator = new SchemaGenerator(\n this.plugin.options,\n {\n oas,\n pluginManager: this.pluginManager,\n plugin: this.plugin,\n contentType: swaggerPlugin.api.contentType,\n include: undefined,\n mode,\n output: output.path,\n },\n )\n\n const schemaFiles = await schemaGenerator.build()\n await this.addFile(...schemaFiles)\n\n const operationGenerator = new OperationGenerator(\n this.plugin.options,\n {\n oas,\n pluginManager: this.pluginManager,\n plugin: this.plugin,\n contentType: swaggerPlugin.api.contentType,\n exclude,\n include,\n override,\n mode,\n },\n )\n\n const operationFiles = await operationGenerator.build()\n await this.addFile(...operationFiles)\n },\n async buildEnd() {\n if (this.config.output.write === false) {\n return\n }\n\n const root = path.resolve(this.config.root, this.config.output.path)\n\n await this.fileManager.addIndexes({\n root,\n output,\n meta: { pluginKey: this.plugin.key },\n })\n },\n }\n})\n","import { createRoot } from '@kubb/react'\nimport { OperationGenerator as Generator } from '@kubb/swagger'\nimport { Oas } from '@kubb/swagger/components'\n\nimport { OasType } from './components/OasType.tsx'\nimport { OperationSchema } from './components/OperationSchema.tsx'\n\nimport type { AppContextProps } from '@kubb/react'\nimport type { OperationMethodResult } from '@kubb/swagger'\nimport type { Operation } from '@kubb/swagger/oas'\nimport type { FileMeta, PluginOptions } from './types.ts'\n\nexport class OperationGenerator extends Generator<PluginOptions['resolvedOptions'], PluginOptions> {\n async all(operations: Operation[]): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin } = this.context\n\n const root = createRoot<AppContextProps<PluginOptions['appMeta']>>({ logger: pluginManager.logger })\n\n root.render(\n <Oas oas={oas} operations={operations} getOperationSchemas={(...props) => this.getSchemas(...props)}>\n {plugin.options.oasType && <OasType.File name=\"oas\" typeName=\"Oas\" />}\n </Oas>,\n { meta: { pluginManager, plugin } },\n )\n\n return root.files\n }\n\n async operation(\n operation: Operation,\n options: PluginOptions['resolvedOptions'],\n ): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin, mode } = this.context\n\n const root = createRoot<AppContextProps<PluginOptions['appMeta']>>({ logger: pluginManager.logger })\n root.render(\n <Oas oas={oas} operations={[operation]} getOperationSchemas={(...props) => this.getSchemas(...props)}>\n <Oas.Operation operation={operation}>\n <OperationSchema.File mode={mode} />\n </Oas.Operation>\n </Oas>,\n { meta: { pluginManager, plugin: { ...plugin, options } } },\n )\n\n return root.files\n }\n\n async get(): OperationMethodResult<FileMeta> {\n return null\n }\n\n async post(): OperationMethodResult<FileMeta> {\n return null\n }\n\n async put(): OperationMethodResult<FileMeta> {\n return null\n }\n async patch(): OperationMethodResult<FileMeta> {\n return null\n }\n async delete(): OperationMethodResult<FileMeta> {\n return null\n }\n}\n","import { Editor, File, Type, usePlugin } from '@kubb/react'\nimport { useGetFile } from '@kubb/react'\nimport { useOas } from '@kubb/swagger/hooks'\n\nimport type { OasTypes } from '@kubb/swagger/oas'\nimport type { ReactNode } from 'react'\nimport type { FileMeta, PluginOptions } from '../types.ts'\n\ntype TemplateProps = {\n /**\n * Name of the function\n */\n name: string\n typeName: string\n api: OasTypes.OASDocument\n}\n\nfunction Template({\n name,\n typeName,\n api,\n}: TemplateProps): ReactNode {\n return (\n <>\n {`export const ${name} = ${JSON.stringify(api, undefined, 2)} as const`}\n <br />\n <Type name={typeName} export>\n {`Infer<typeof ${name}>`}\n </Type>\n </>\n )\n}\n\nconst defaultTemplates = { default: Template } as const\n\ntype Props = {\n name: string\n typeName: string\n /**\n * This will make it possible to override the default behaviour.\n */\n Template?: React.ComponentType<React.ComponentProps<typeof Template>>\n}\n\nexport function OasType({\n name,\n typeName,\n Template = defaultTemplates.default,\n}: Props): ReactNode {\n const oas = useOas()\n\n return <Template name={name} typeName={typeName} api={oas.api} />\n}\n\ntype FileProps = {\n name: string\n typeName: string\n /**\n * This will make it possible to override the default behaviour.\n */\n templates?: typeof defaultTemplates\n}\n\nOasType.File = function({ name, typeName, templates = defaultTemplates }: FileProps): ReactNode {\n const { key: pluginKey } = usePlugin<PluginOptions>()\n const file = useGetFile({ name, extName: '.ts', pluginKey })\n\n const Template = templates.default\n\n return (\n <Editor language=\"typescript\">\n <File<FileMeta>\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n >\n <File.Import name={['Infer']} path=\"@kubb/swagger-ts/oas\" isTypeOnly />\n <File.Source>\n <OasType Template={Template} name={name} typeName={typeName} />\n </File.Source>\n </File>\n </Editor>\n )\n}\n\nOasType.templates = defaultTemplates\n","/* eslint-disable no-empty-pattern */\n/* eslint-disable @typescript-eslint/ban-types */\nimport transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\nimport { Editor, File, usePlugin, usePluginManager } from '@kubb/react'\nimport { Oas, Schema } from '@kubb/swagger/components'\nimport { useGetOperationFile, useOas, useOperation, useOperationName, useOperationSchemas } from '@kubb/swagger/hooks'\n\nimport { SchemaGenerator } from '../SchemaGenerator.tsx'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\nimport type { OperationSchema as OperationSchemaType } from '@kubb/swagger'\nimport type { OperationSchemas } from '@kubb/swagger'\nimport type { Operation } from '@kubb/swagger/oas'\nimport type { ReactNode } from 'react'\nimport type { FileMeta, PluginOptions } from '../types.ts'\n\ntype Props = {}\n\nfunction printCombinedSchema(name: string, operation: Operation, schemas: OperationSchemas): string {\n const properties: Record<string, ts.TypeNode> = {\n 'response': factory.createTypeReferenceNode(\n factory.createIdentifier(schemas.response.name),\n undefined,\n ),\n }\n\n if (schemas.request) {\n properties['request'] = factory.createTypeReferenceNode(\n factory.createIdentifier(schemas.request.name),\n undefined,\n )\n }\n\n if (schemas.pathParams) {\n properties['pathParams'] = factory.createTypeReferenceNode(\n factory.createIdentifier(schemas.pathParams.name),\n undefined,\n )\n }\n\n if (schemas.queryParams) {\n properties['queryParams'] = factory.createTypeReferenceNode(\n factory.createIdentifier(schemas.queryParams.name),\n undefined,\n )\n }\n\n if (schemas.headerParams) {\n properties['headerParams'] = factory.createTypeReferenceNode(\n factory.createIdentifier(schemas.headerParams.name),\n undefined,\n )\n }\n\n if (schemas.errors) {\n properties['errors'] = factory.createUnionDeclaration({\n nodes: schemas.errors.map(error => {\n return factory.createTypeReferenceNode(\n factory.createIdentifier(error.name),\n undefined,\n )\n }),\n })!\n }\n\n const namespaceNode = factory.createTypeAliasDeclaration({\n name: operation.method === 'get' ? `${name}Query` : `${name}Mutation`,\n type: factory.createTypeLiteralNode(\n Object.keys(properties).map(key => {\n const type = properties[key]\n if (!type) {\n return undefined\n }\n\n return factory.createPropertySignature(\n {\n name: transformers.pascalCase(key),\n type,\n },\n )\n }).filter(Boolean),\n ),\n modifiers: [factory.modifiers.export],\n })\n\n return print(namespaceNode)\n}\n\nexport function OperationSchema({}: Props): ReactNode {\n return (\n <>\n </>\n )\n}\n\ntype FileProps = {\n mode: KubbFile.Mode | undefined\n}\n\nOperationSchema.File = function({ mode = 'directory' }: FileProps): ReactNode {\n const plugin = usePlugin<PluginOptions>()\n\n const pluginManager = usePluginManager()\n const oas = useOas()\n const schemas = useOperationSchemas()\n const file = useGetOperationFile()\n const factoryName = useOperationName({ type: 'type' })\n const operation = useOperation()\n\n const generator = new SchemaGenerator(plugin.options, { oas, plugin, pluginManager })\n\n const items = [\n schemas.pathParams,\n schemas.queryParams,\n schemas.headerParams,\n schemas.statusCodes,\n schemas.request,\n schemas.response,\n ].flat().filter(Boolean)\n\n const mapItem = ({ name, schema: object, ...options }: OperationSchemaType, i: number) => {\n return (\n <Oas.Schema key={i} generator={generator} name={name} object={object}>\n {mode === 'directory'\n && <Schema.Imports isTypeOnly />}\n <File.Source>\n <Schema.Source options={options} />\n </File.Source>\n </Oas.Schema>\n )\n }\n\n return (\n <Editor language=\"typescript\">\n <File<FileMeta>\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n >\n {items.map(mapItem)}\n\n <File.Source>\n {printCombinedSchema(factoryName, operation, schemas)}\n </File.Source>\n </File>\n </Editor>\n )\n}\n","import { createRoot } from '@kubb/react'\nimport { SchemaGenerator as Generator } from '@kubb/swagger'\nimport { Oas, Schema } from '@kubb/swagger/components'\nimport { pluginKey as swaggerTypeScriptPluginKey } from '@kubb/swagger-ts'\n\nimport { pluginKey } from './plugin.ts'\nimport { typeParser } from './typeParser.ts'\n\nimport type { AppContextProps } from '@kubb/react'\nimport type { Schema as SchemaType, SchemaGeneratorBuildOptions, SchemaMethodResult } from '@kubb/swagger'\nimport type { SchemaObject } from '@kubb/swagger/oas'\nimport type { FileMeta, PluginOptions } from './types.ts'\n\nexport class SchemaGenerator extends Generator<PluginOptions['resolvedOptions'], PluginOptions> {\n async schema(name: string, object: SchemaObject): SchemaMethodResult<FileMeta> {\n const { oas, pluginManager, mode, plugin, output } = this.context\n\n const root = createRoot<AppContextProps<PluginOptions['appMeta']>>({ logger: pluginManager.logger })\n\n root.render(\n <Oas oas={oas}>\n <Oas.Schema generator={this} name={name} object={object}>\n <Schema.File isTypeOnly output={output} mode={mode} />\n </Oas.Schema>\n </Oas>,\n { meta: { pluginManager, plugin } },\n )\n\n return root.files\n }\n // TODO convert to a react component called `Schema.Parser` with props parser as part of the SchemaContext\n getSource(name: string, schemas: SchemaType[], {\n keysToOmit,\n description,\n }: SchemaGeneratorBuildOptions = {}): string[] {\n const texts: string[] = []\n\n const resolvedName = this.context.pluginManager.resolveName({ name, pluginKey, type: 'function' })\n const resvoledTypeName = this.context.pluginManager.resolveName({ name, pluginKey: swaggerTypeScriptPluginKey, type: 'type' })\n\n const typeOutput = typeParser(schemas, {\n name: resolvedName,\n typeName: resvoledTypeName,\n description,\n enumType: this.options.enumType || 'asConst',\n optionalType: this.options.optionalType,\n keysToOmit,\n })\n\n texts.push(typeOutput)\n\n return texts\n }\n /**\n * @deprecated only used for testing\n */\n\n buildSource(name: string, schema: SchemaObject, options: SchemaGeneratorBuildOptions = {}): string[] {\n const schemas = this.buildSchemas(schema, name)\n\n return this.getSource(name, schemas, options)\n }\n}\n","import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\nimport { isKeyword, SchemaGenerator, schemaKeywords } from '@kubb/swagger'\n\nimport type { ts } from '@kubb/parser'\nimport type { Schema, SchemaKeywordMapper, SchemaMapper } from '@kubb/swagger'\n\nexport const typeKeywordMapper = {\n any: () => factory.keywordTypeNodes.any,\n unknown: () => factory.keywordTypeNodes.unknown,\n number: () => factory.keywordTypeNodes.number,\n integer: () => factory.keywordTypeNodes.number,\n object: (nodes?: ts.TypeElement[]) => {\n if (!nodes) {\n return factory.keywordTypeNodes.object\n }\n\n return factory.createTypeLiteralNode(nodes)\n },\n lazy: undefined,\n string: () => factory.keywordTypeNodes.string,\n boolean: () => factory.keywordTypeNodes.boolean,\n undefined: () => factory.keywordTypeNodes.undefined,\n nullable: undefined,\n null: () => factory.keywordTypeNodes.null,\n nullish: undefined,\n array: (nodes?: ts.TypeNode[]) => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createArrayDeclaration({ nodes })\n },\n tuple: (nodes?: ts.TypeNode[]) => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createTupleTypeNode(nodes)\n },\n enum: (name?: string) => {\n if (!name) {\n return undefined\n }\n\n return factory.createTypeReferenceNode(name, undefined)\n },\n union: (nodes?: ts.TypeNode[]) => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createUnionDeclaration({\n withParentheses: true,\n nodes,\n })\n },\n const: (name?: string | number, format?: 'string' | 'number') => {\n if (!name) {\n return undefined\n }\n\n if (format === 'number') {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(name))\n }\n\n return factory.createLiteralTypeNode(factory.createStringLiteral(name.toString()))\n },\n datetime: () => factory.keywordTypeNodes.string,\n date: () => factory.createTypeReferenceNode(factory.createIdentifier('Date')),\n uuid: undefined,\n url: undefined,\n strict: undefined,\n default: undefined,\n and: (nodes?: ts.TypeNode[]) => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createIntersectionDeclaration({\n withParentheses: true,\n nodes,\n })\n },\n describe: undefined,\n min: undefined,\n max: undefined,\n optional: undefined,\n matches: undefined,\n email: undefined,\n firstName: undefined,\n lastName: undefined,\n password: undefined,\n phone: undefined,\n readOnly: undefined,\n ref: (propertyName?: string) => {\n if (!propertyName) {\n return undefined\n }\n\n return factory.createTypeReferenceNode(propertyName, undefined)\n },\n blob: () => factory.createTypeReferenceNode('Blob', []),\n deprecated: undefined,\n example: undefined,\n type: undefined,\n format: undefined,\n catchall: undefined,\n} satisfies SchemaMapper<(ctx?: any) => ts.Node | null | undefined>\n\ntype ParserOptions = {\n name: string\n typeName?: string\n description?: string\n /**\n * @default `'questionToken'`\n */\n optionalType: 'questionToken' | 'undefined' | 'questionTokenAndUndefined'\n /**\n * @default `'asConst'`\n */\n enumType: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal'\n keysToOmit?: string[]\n mapper?: typeof typeKeywordMapper\n}\n\nexport function parseTypeMeta(item: Schema, options: ParserOptions): ts.Node | null | undefined {\n const mapper = options.mapper || typeKeywordMapper\n const value = mapper[item.keyword as keyof typeof mapper]\n\n if (!value) {\n return undefined\n }\n\n if (isKeyword(item, schemaKeywords.union)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['union']\n return value(item.args.map(orItem => parseTypeMeta(orItem, options)).filter(Boolean) as ts.TypeNode[])\n }\n\n if (isKeyword(item, schemaKeywords.and)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['and']\n return value(item.args.map(orItem => parseTypeMeta(orItem, options)).filter(Boolean) as ts.TypeNode[])\n }\n\n if (isKeyword(item, schemaKeywords.array)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['array']\n return value(item.args.items.map(orItem => parseTypeMeta(orItem, options)).filter(Boolean) as ts.TypeNode[])\n }\n\n if (isKeyword(item, schemaKeywords.enum)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['enum']\n return value(item.args.typeName)\n }\n\n if (isKeyword(item, schemaKeywords.ref)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['ref']\n return value(item.args.name)\n }\n\n if (isKeyword(item, schemaKeywords.blob)) {\n return value()\n }\n\n if (isKeyword(item, schemaKeywords.tuple)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['tuple']\n return value(\n item.args.map(tupleItem => parseTypeMeta(tupleItem, options)).filter(Boolean) as ts.TypeNode[],\n )\n }\n\n if (isKeyword(item, schemaKeywords.const)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['const']\n\n return value(item.args.name, item.args.format)\n }\n\n if (isKeyword(item, schemaKeywords.object)) {\n const value = mapper[item.keyword as keyof typeof mapper] as typeof typeKeywordMapper['object']\n\n const properties = Object.entries(item.args?.properties || {})\n .filter((item) => {\n const schemas = item[1]\n return schemas && typeof schemas.map === 'function'\n })\n .map((item) => {\n const name = item[0]\n const schemas = item[1]\n\n const isNullish = schemas.some(item => item.keyword === schemaKeywords.nullish)\n const isNullable = schemas.some(item => item.keyword === schemaKeywords.nullable)\n const isOptional = schemas.some(item => item.keyword === schemaKeywords.optional)\n const isReadonly = schemas.some(item => item.keyword === schemaKeywords.readOnly)\n const describeSchema = schemas.find(item => item.keyword === schemaKeywords.describe) as SchemaKeywordMapper['describe'] | undefined\n const deprecatedSchema = schemas.find(item => item.keyword === schemaKeywords.deprecated) as SchemaKeywordMapper['deprecated'] | undefined\n const defaultSchema = schemas.find(item => item.keyword === schemaKeywords.default) as SchemaKeywordMapper['default'] | undefined\n const exampleSchema = schemas.find(item => item.keyword === schemaKeywords.example) as SchemaKeywordMapper['example'] | undefined\n const typeSchema = schemas.find(item => item.keyword === schemaKeywords.type) as SchemaKeywordMapper['type'] | undefined\n const formatSchema = schemas.find(item => item.keyword === schemaKeywords.format) as SchemaKeywordMapper['format'] | undefined\n\n let type = schemas\n .map((item) => parseTypeMeta(item, options))\n .filter(Boolean)[0] as ts.TypeNode\n\n if (isNullable) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.null] }) as ts.TypeNode\n }\n\n if (isNullish && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] }) as ts.TypeNode\n }\n\n if (isOptional && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] }) as ts.TypeNode\n }\n\n const propertySignature = factory.createPropertySignature({\n questionToken: isOptional && ['questionToken', 'questionTokenAndUndefined'].includes(options.optionalType as string),\n name,\n type,\n readOnly: isReadonly,\n })\n\n return factory.appendJSDocToNode({\n node: propertySignature,\n comments: [\n describeSchema ? `@description ${transformers.jsStringEscape(describeSchema.args)}` : undefined,\n deprecatedSchema ? `@deprecated` : undefined,\n defaultSchema\n ? `@default ${defaultSchema.args}`\n : undefined,\n exampleSchema ? `@example ${exampleSchema.args}` : undefined,\n typeSchema\n ? `@type ${typeSchema.args}${!isOptional ? '' : ' | undefined'} ${formatSchema?.args || ''}`\n : undefined,\n ].filter(Boolean),\n })\n })\n\n const additionalProperties = item.args?.additionalProperties?.length\n ? factory.createIndexSignature(item.args.additionalProperties.map(schema => parseTypeMeta(schema, options)).filter(Boolean).at(0) as ts.TypeNode)\n : undefined\n\n return value([...properties, additionalProperties].filter(Boolean))\n }\n\n if (item.keyword in mapper) {\n return value()\n }\n\n return undefined\n}\n\nexport function typeParser(\n schemas: Schema[],\n options: ParserOptions,\n): string {\n const nodes: ts.Node[] = []\n const extraNodes: ts.Node[] = []\n\n if (!schemas.length) {\n return ''\n }\n\n const isNullish = schemas.some(item => item.keyword === schemaKeywords.nullish)\n const isNullable = schemas.some(item => item.keyword === schemaKeywords.nullable)\n const isOptional = schemas.some(item => item.keyword === schemaKeywords.optional)\n\n let type = schemas.map((schema) => parseTypeMeta(schema, options)).filter(Boolean).at(0) as ts.TypeNode\n || typeKeywordMapper.undefined()\n\n if (isNullable) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.null] }) as ts.TypeNode\n }\n\n if (isNullish && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] }) as ts.TypeNode\n }\n\n if (isOptional && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] }) as ts.TypeNode\n }\n\n const node = factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: options.name,\n type: options.keysToOmit?.length ? factory.createOmitDeclaration({ keys: options.keysToOmit, type, nonNullable: true }) : type,\n })\n\n const enumSchemas = SchemaGenerator.deepSearch(schemas, schemaKeywords.enum)\n if (enumSchemas) {\n enumSchemas.forEach(enumSchema => {\n extraNodes.push(...factory.createEnumDeclaration({\n name: transformers.camelCase(enumSchema.args.name),\n typeName: enumSchema.args.typeName,\n enums: enumSchema.args.items.map(item => item.value === undefined ? undefined : [transformers.trimQuotes(item.name?.toString()), item.value]).filter(\n Boolean,\n ) as unknown as [\n string,\n string,\n ][],\n type: options.enumType,\n }))\n })\n }\n\n nodes.push(\n factory.appendJSDocToNode({\n node,\n comments: [\n options.description ? `@description ${transformers.jsStringEscape(options.description)}` : undefined,\n ].filter(Boolean),\n }),\n )\n\n const filterdNodes = nodes.filter(\n (node: ts.Node) =>\n !extraNodes.some(\n (extraNode: ts.Node) => (extraNode as ts.TypeAliasDeclaration)?.name?.escapedText === (node as ts.TypeAliasDeclaration)?.name?.escapedText,\n ),\n )\n\n return print([...extraNodes, ...filterdNodes])\n}\n","import { definePlugin } from './plugin.ts'\n\nexport { definePlugin, pluginKey, pluginName } from './plugin.ts'\nexport type * from './types.ts'\n\n/**\n * @deprecated Use `import { definePlugin } from '@kubb/swagger-ts'`\n */\nconst definePluginDefault = definePlugin\n\nexport default definePluginDefault\n"]}
|