@kubb/plugin-ts 5.0.0-alpha.2 → 5.0.0-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/Type-B6fo0gSk.js +120 -0
  2. package/dist/Type-B6fo0gSk.js.map +1 -0
  3. package/dist/Type-oFwUfkZv.cjs +131 -0
  4. package/dist/Type-oFwUfkZv.cjs.map +1 -0
  5. package/dist/builderTs-Cd3juc2G.cjs +120 -0
  6. package/dist/builderTs-Cd3juc2G.cjs.map +1 -0
  7. package/dist/builderTs-DausqHpc.js +116 -0
  8. package/dist/builderTs-DausqHpc.js.map +1 -0
  9. package/dist/builders.cjs +3 -0
  10. package/dist/builders.d.ts +8 -0
  11. package/dist/builders.js +2 -0
  12. package/dist/casing-BJHFg-zZ.js +84 -0
  13. package/dist/casing-BJHFg-zZ.js.map +1 -0
  14. package/dist/casing-DHfdqpLi.cjs +107 -0
  15. package/dist/casing-DHfdqpLi.cjs.map +1 -0
  16. package/dist/chunk-ByKO4r7w.cjs +38 -0
  17. package/dist/components.cjs +3 -2
  18. package/dist/components.d.ts +40 -11
  19. package/dist/components.js +2 -2
  20. package/dist/generators-ByK18qUn.js +551 -0
  21. package/dist/generators-ByK18qUn.js.map +1 -0
  22. package/dist/generators-aSsiTfUO.cjs +563 -0
  23. package/dist/generators-aSsiTfUO.cjs.map +1 -0
  24. package/dist/generators.cjs +3 -2
  25. package/dist/generators.d.ts +7 -492
  26. package/dist/generators.js +2 -2
  27. package/dist/index.cjs +148 -3
  28. package/dist/index.cjs.map +1 -0
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.js +146 -1
  31. package/dist/index.js.map +1 -0
  32. package/dist/printerTs-BgZucv4T.js +559 -0
  33. package/dist/printerTs-BgZucv4T.js.map +1 -0
  34. package/dist/printerTs-CFXc_LpP.cjs +595 -0
  35. package/dist/printerTs-CFXc_LpP.cjs.map +1 -0
  36. package/dist/printers.cjs +3 -0
  37. package/dist/printers.d.ts +75 -0
  38. package/dist/printers.js +2 -0
  39. package/dist/resolverTsLegacy-DLl854-P.js +185 -0
  40. package/dist/resolverTsLegacy-DLl854-P.js.map +1 -0
  41. package/dist/resolverTsLegacy-sJ16Iqrl.cjs +196 -0
  42. package/dist/resolverTsLegacy-sJ16Iqrl.cjs.map +1 -0
  43. package/dist/resolvers.cjs +4 -0
  44. package/dist/resolvers.d.ts +52 -0
  45. package/dist/resolvers.js +2 -0
  46. package/dist/types-BcyuFDn9.d.ts +344 -0
  47. package/package.json +27 -8
  48. package/src/builders/builderTs.ts +92 -0
  49. package/src/builders/index.ts +1 -0
  50. package/src/components/Enum.tsx +83 -0
  51. package/src/components/Type.tsx +24 -145
  52. package/src/components/index.ts +1 -0
  53. package/src/constants.ts +29 -0
  54. package/src/factory.ts +14 -48
  55. package/src/generators/index.ts +1 -0
  56. package/src/generators/typeGenerator.tsx +119 -403
  57. package/src/generators/typeGeneratorLegacy.tsx +345 -0
  58. package/src/plugin.ts +80 -122
  59. package/src/presets.ts +26 -0
  60. package/src/printers/index.ts +1 -0
  61. package/src/printers/printerTs.ts +389 -0
  62. package/src/resolvers/index.ts +2 -0
  63. package/src/resolvers/resolverTs.ts +107 -0
  64. package/src/resolvers/resolverTsLegacy.ts +87 -0
  65. package/src/types.ts +261 -72
  66. package/dist/components-9wydyqUx.cjs +0 -848
  67. package/dist/components-9wydyqUx.cjs.map +0 -1
  68. package/dist/components-LmqJfxMv.js +0 -721
  69. package/dist/components-LmqJfxMv.js.map +0 -1
  70. package/dist/plugin-CNkzbtpl.cjs +0 -508
  71. package/dist/plugin-CNkzbtpl.cjs.map +0 -1
  72. package/dist/plugin-DoLrDl9P.js +0 -476
  73. package/dist/plugin-DoLrDl9P.js.map +0 -1
  74. package/dist/types-BpeKGgCn.d.ts +0 -170
  75. package/src/parser.ts +0 -396
  76. package/src/printer.ts +0 -221
@@ -1,468 +1,184 @@
1
- import { pascalCase } from '@internals/utils'
2
- import type { PluginManager } from '@kubb/core'
3
- import { useMode, usePluginManager } from '@kubb/core/hooks'
4
- import { safePrint } from '@kubb/fabric-core/parsers/typescript'
5
- import type { Operation } from '@kubb/oas'
6
- import { isKeyword, type OperationSchemas, type OperationSchema as OperationSchemaType, SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'
7
- import { createReactGenerator } from '@kubb/plugin-oas/generators'
8
- import { useOas, useOperationManager, useSchemaManager } from '@kubb/plugin-oas/hooks'
9
- import { applyParamsCasing, getBanner, getFooter, getImports, isParameterSchema } from '@kubb/plugin-oas/utils'
1
+ import path from 'node:path'
2
+ import { caseParams, composeTransformers, narrowSchema, schemaTypes, transform } from '@kubb/ast'
3
+ import type { SchemaNode } from '@kubb/ast/types'
4
+ import { defineGenerator, getMode } from '@kubb/core'
10
5
  import { File } from '@kubb/react-fabric'
11
- import ts from 'typescript'
12
- import { Type } from '../components'
13
- import * as factory from '../factory.ts'
14
- import { createUrlTemplateType, getUnknownType, keywordTypeNodes } from '../factory.ts'
15
- import { pluginTsName } from '../plugin.ts'
6
+ import { builderTs } from '../builders/builderTs.ts'
7
+ import { Type } from '../components/Type.tsx'
8
+ import { ENUM_TYPES_WITH_KEY_SUFFIX } from '../constants.ts'
16
9
  import type { PluginTs } from '../types'
17
10
 
18
- function printCombinedSchema({ name, schemas, pluginManager }: { name: string; schemas: OperationSchemas; pluginManager: PluginManager }): string {
19
- const properties: Record<string, ts.TypeNode> = {}
20
-
21
- if (schemas.response) {
22
- properties['response'] = factory.createUnionDeclaration({
23
- nodes: schemas.responses.map((res) => {
24
- const identifier = pluginManager.resolveName({
25
- name: res.name,
26
- pluginName: pluginTsName,
27
- type: 'function',
28
- })
29
-
30
- return factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)
31
- }),
32
- })!
33
- }
34
-
35
- if (schemas.request) {
36
- const identifier = pluginManager.resolveName({
37
- name: schemas.request.name,
38
- pluginName: pluginTsName,
39
- type: 'function',
40
- })
41
- properties['request'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)
42
- }
43
-
44
- if (schemas.pathParams) {
45
- const identifier = pluginManager.resolveName({
46
- name: schemas.pathParams.name,
47
- pluginName: pluginTsName,
48
- type: 'function',
49
- })
50
- properties['pathParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)
51
- }
52
-
53
- if (schemas.queryParams) {
54
- const identifier = pluginManager.resolveName({
55
- name: schemas.queryParams.name,
56
- pluginName: pluginTsName,
57
- type: 'function',
58
- })
59
- properties['queryParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)
60
- }
61
-
62
- if (schemas.headerParams) {
63
- const identifier = pluginManager.resolveName({
64
- name: schemas.headerParams.name,
65
- pluginName: pluginTsName,
66
- type: 'function',
67
- })
68
- properties['headerParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)
69
- }
70
-
71
- if (schemas.errors) {
72
- properties['errors'] = factory.createUnionDeclaration({
73
- nodes: schemas.errors.map((error) => {
74
- const identifier = pluginManager.resolveName({
75
- name: error.name,
76
- pluginName: pluginTsName,
77
- type: 'function',
78
- })
79
-
80
- return factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)
81
- }),
82
- })!
83
- }
84
-
85
- const namespaceNode = factory.createTypeAliasDeclaration({
86
- name,
87
- type: factory.createTypeLiteralNode(
88
- Object.keys(properties)
89
- .map((key) => {
90
- const type = properties[key]
91
- if (!type) {
92
- return undefined
93
- }
94
-
95
- return factory.createPropertySignature({
96
- name: pascalCase(key),
97
- type,
98
- })
99
- })
100
- .filter(Boolean),
101
- ),
102
- modifiers: [factory.modifiers.export],
103
- })
104
-
105
- return safePrint(namespaceNode)
106
- }
107
-
108
- function printRequestSchema({
109
- baseName,
110
- operation,
111
- schemas,
112
- pluginManager,
113
- }: {
114
- baseName: string
115
- operation: Operation
116
- schemas: OperationSchemas
117
- pluginManager: PluginManager
118
- }): string {
119
- const name = pluginManager.resolveName({
120
- name: `${baseName} Request`,
121
- pluginName: pluginTsName,
122
- type: 'type',
123
- })
124
-
125
- const results: string[] = []
126
-
127
- // Generate DataRequest type
128
- const dataRequestProperties: ts.PropertySignature[] = []
129
-
130
- if (schemas.request) {
131
- const identifier = pluginManager.resolveName({
132
- name: schemas.request.name,
133
- pluginName: pluginTsName,
134
- type: 'type',
135
- })
136
- dataRequestProperties.push(
137
- factory.createPropertySignature({
138
- name: 'data',
139
- questionToken: true,
140
- type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),
141
- }),
142
- )
143
- } else {
144
- dataRequestProperties.push(
145
- factory.createPropertySignature({
146
- name: 'data',
147
- questionToken: true,
148
- type: keywordTypeNodes.never,
149
- }),
150
- )
151
- }
152
-
153
- // Add pathParams property
154
- if (schemas.pathParams) {
155
- const identifier = pluginManager.resolveName({
156
- name: schemas.pathParams.name,
157
- pluginName: pluginTsName,
158
- type: 'type',
159
- })
160
- dataRequestProperties.push(
161
- factory.createPropertySignature({
162
- name: 'pathParams',
163
- type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),
164
- }),
165
- )
166
- } else {
167
- dataRequestProperties.push(
168
- factory.createPropertySignature({
169
- name: 'pathParams',
170
- questionToken: true,
171
- type: keywordTypeNodes.never,
172
- }),
173
- )
174
- }
175
-
176
- // Add queryParams property
177
- if (schemas.queryParams) {
178
- const identifier = pluginManager.resolveName({
179
- name: schemas.queryParams.name,
180
- pluginName: pluginTsName,
181
- type: 'type',
182
- })
183
- dataRequestProperties.push(
184
- factory.createPropertySignature({
185
- name: 'queryParams',
186
- questionToken: true,
187
- type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),
188
- }),
189
- )
190
- } else {
191
- dataRequestProperties.push(
192
- factory.createPropertySignature({
193
- name: 'queryParams',
194
- questionToken: true,
195
- type: keywordTypeNodes.never,
196
- }),
197
- )
198
- }
199
-
200
- // Add headerParams property
201
- if (schemas.headerParams) {
202
- const identifier = pluginManager.resolveName({
203
- name: schemas.headerParams.name,
204
- pluginName: pluginTsName,
205
- type: 'type',
206
- })
207
- dataRequestProperties.push(
208
- factory.createPropertySignature({
209
- name: 'headerParams',
210
- questionToken: true,
211
- type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),
212
- }),
213
- )
214
- } else {
215
- dataRequestProperties.push(
216
- factory.createPropertySignature({
217
- name: 'headerParams',
218
- questionToken: true,
219
- type: keywordTypeNodes.never,
220
- }),
221
- )
222
- }
223
-
224
- // Add url property with template literal type
225
- dataRequestProperties.push(
226
- factory.createPropertySignature({
227
- name: 'url',
228
- type: createUrlTemplateType(operation.path),
229
- }),
230
- )
231
-
232
- const dataRequestNode = factory.createTypeAliasDeclaration({
233
- name,
234
- type: factory.createTypeLiteralNode(dataRequestProperties),
235
- modifiers: [factory.modifiers.export],
236
- })
237
-
238
- results.push(safePrint(dataRequestNode))
239
-
240
- return results.join('\n\n')
241
- }
242
-
243
- function printResponseSchema({
244
- baseName,
245
- schemas,
246
- pluginManager,
247
- unknownType,
248
- }: {
249
- baseName: string
250
- schemas: OperationSchemas
251
- pluginManager: PluginManager
252
- unknownType: PluginTs['resolvedOptions']['unknownType']
253
- }): string {
254
- const results: string[] = []
255
-
256
- const name = pluginManager.resolveName({
257
- name: `${baseName} ResponseData`,
258
- pluginName: pluginTsName,
259
- type: 'type',
260
- })
261
-
262
- // Generate Responses type (mapping status codes to response types)
263
- if (schemas.responses && schemas.responses.length > 0) {
264
- const responsesProperties: ts.PropertySignature[] = schemas.responses.map((res) => {
265
- const identifier = pluginManager.resolveName({
266
- name: res.name,
267
- pluginName: pluginTsName,
268
- type: 'type',
269
- })
270
-
271
- return factory.createPropertySignature({
272
- name: res.statusCode?.toString() ?? 'default',
273
- type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),
274
- })
275
- })
276
-
277
- const responsesNode = factory.createTypeAliasDeclaration({
278
- name: `${baseName}Responses`,
279
- type: factory.createTypeLiteralNode(responsesProperties),
280
- modifiers: [factory.modifiers.export],
281
- })
282
-
283
- results.push(safePrint(responsesNode))
284
-
285
- // Generate Response type (union via indexed access)
286
- const responseNode = factory.createTypeAliasDeclaration({
287
- name,
288
- type: factory.createIndexedAccessTypeNode(
289
- factory.createTypeReferenceNode(factory.createIdentifier(`${baseName}Responses`), undefined),
290
- factory.createTypeOperatorNode(
291
- ts.SyntaxKind.KeyOfKeyword,
292
- factory.createTypeReferenceNode(factory.createIdentifier(`${baseName}Responses`), undefined),
293
- ),
294
- ),
295
- modifiers: [factory.modifiers.export],
296
- })
297
-
298
- results.push(safePrint(responseNode))
299
- } else {
300
- const responseNode = factory.createTypeAliasDeclaration({
301
- name,
302
- modifiers: [factory.modifiers.export],
303
- type: getUnknownType(unknownType),
304
- })
305
-
306
- results.push(safePrint(responseNode))
307
- }
308
-
309
- return results.join('\n\n')
310
- }
311
-
312
- export const typeGenerator = createReactGenerator<PluginTs, '1'>({
11
+ export const typeGenerator = defineGenerator<PluginTs>({
313
12
  name: 'typescript',
314
- version: '1',
315
- Operation({ operation, generator, plugin }) {
316
- const {
317
- options,
318
- options: { mapper, enumType, enumKeyCasing, syntaxType, optionalType, arrayType, unknownType, paramsCasing },
319
- } = plugin
13
+ type: 'react',
14
+ Operation({ node, adapter, options, config }) {
15
+ const { enumType, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group, output, resolver, transformers = [] } = options
320
16
 
321
- const mode = useMode()
322
- const pluginManager = usePluginManager()
17
+ const root = path.resolve(config.root, config.output.path)
18
+ const mode = getMode(path.resolve(root, output.path))
323
19
 
324
- const oas = useOas()
325
- const { getSchemas, getFile, getName, getGroup } = useOperationManager(generator)
326
- const schemaManager = useSchemaManager()
327
-
328
- const name = getName(operation, { type: 'type', pluginName: pluginTsName })
329
-
330
- const file = getFile(operation)
331
- const schemas = getSchemas(operation)
332
- const schemaGenerator = new SchemaGenerator(options, {
333
- fabric: generator.context.fabric,
334
- oas,
335
- events: generator.context.events,
336
- plugin,
337
- pluginManager,
338
- mode,
339
- override: options.override,
340
- })
20
+ const file = resolver.resolveFile({ name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path }, { root, output, group })
341
21
 
342
- const operationSchemas = [schemas.pathParams, schemas.queryParams, schemas.headerParams, schemas.statusCodes, schemas.request, schemas.response]
343
- .flat()
344
- .filter(Boolean)
22
+ const params = caseParams(node.parameters, paramsCasing)
345
23
 
346
- const mapOperationSchema = ({ name, schema, description, keysToOmit, ...options }: OperationSchemaType) => {
347
- // Apply paramsCasing transformation to pathParams, queryParams, and headerParams (not response)
348
- const shouldTransform = paramsCasing && isParameterSchema(name)
349
- const transformedSchema = shouldTransform ? applyParamsCasing(schema, paramsCasing) : schema
24
+ function renderSchemaType({
25
+ node: schemaNode,
26
+ name,
27
+ typedName,
28
+ description,
29
+ keysToOmit,
30
+ }: {
31
+ node: SchemaNode | null
32
+ name: string
33
+ typedName: string
34
+ description?: string
35
+ keysToOmit?: Array<string>
36
+ }) {
37
+ if (!schemaNode) {
38
+ return null
39
+ }
350
40
 
351
- const tree = schemaGenerator.parse({ schema: transformedSchema, name, parentName: null })
352
- const imports = getImports(tree)
353
- const group = options.operation ? getGroup(options.operation) : undefined
41
+ const transformedNode = transform(schemaNode, composeTransformers(...transformers))
354
42
 
355
- const type = {
356
- name: schemaManager.getName(name, { type: 'type' }),
357
- typedName: schemaManager.getName(name, { type: 'type' }),
358
- file: schemaManager.getFile(options.operationName || name, { group }),
359
- }
43
+ const imports = adapter.getImports(transformedNode, (schemaName) => ({
44
+ name: resolver.default(schemaName, 'type'),
45
+ path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group }).path,
46
+ }))
360
47
 
361
48
  return (
362
49
  <>
363
50
  {mode === 'split' &&
364
- imports.map((imp) => (
365
- <File.Import key={[name, imp.name, imp.path, imp.isTypeOnly].join('-')} root={file.path} path={imp.path} name={imp.name} isTypeOnly />
366
- ))}
51
+ imports.map((imp) => <File.Import key={[name, imp.path, imp.isTypeOnly].join('-')} root={file.path} path={imp.path} name={imp.name} isTypeOnly />)}
367
52
  <Type
368
- name={type.name}
369
- typedName={type.typedName}
53
+ name={name}
54
+ typedName={typedName}
55
+ node={transformedNode}
370
56
  description={description}
371
- tree={tree}
372
- schema={transformedSchema}
373
- mapper={mapper}
374
57
  enumType={enumType}
375
58
  enumKeyCasing={enumKeyCasing}
376
59
  optionalType={optionalType}
377
60
  arrayType={arrayType}
378
- keysToOmit={keysToOmit}
379
61
  syntaxType={syntaxType}
62
+ resolver={resolver}
63
+ keysToOmit={keysToOmit}
380
64
  />
381
65
  </>
382
66
  )
383
67
  }
384
68
 
385
- const responseName = schemaManager.getName(schemas.response.name, {
386
- type: 'type',
69
+ const paramTypes = params.map((param) =>
70
+ renderSchemaType({
71
+ node: param.schema,
72
+ name: resolver.resolveParamName(node, param),
73
+ typedName: resolver.resolveParamTypedName(node, param),
74
+ }),
75
+ )
76
+
77
+ const requestType = node.requestBody?.schema
78
+ ? renderSchemaType({
79
+ node: node.requestBody.schema,
80
+ name: resolver.resolveDataName(node),
81
+ typedName: resolver.resolveDataTypedName(node),
82
+ description: node.requestBody.description ?? node.requestBody.schema.description,
83
+ keysToOmit: node.requestBody.keysToOmit,
84
+ })
85
+ : null
86
+
87
+ const responseTypes = node.responses.map((res) =>
88
+ renderSchemaType({
89
+ node: res.schema,
90
+ name: resolver.resolveResponseStatusName(node, res.statusCode),
91
+ typedName: resolver.resolveResponseStatusTypedName(node, res.statusCode),
92
+ description: res.description,
93
+ keysToOmit: res.keysToOmit,
94
+ }),
95
+ )
96
+
97
+ const dataType = renderSchemaType({
98
+ node: builderTs.buildData({ node: { ...node, parameters: params }, resolver }),
99
+ name: resolver.resolveRequestConfigName(node),
100
+ typedName: resolver.resolveRequestConfigTypedName(node),
101
+ })
102
+
103
+ const responsesType = renderSchemaType({
104
+ node: builderTs.buildResponses({ node, resolver }),
105
+ name: resolver.resolveResponsesName(node),
106
+ typedName: resolver.resolveResponsesTypedName(node),
107
+ })
108
+
109
+ const responseType = renderSchemaType({
110
+ node: builderTs.buildResponseUnion({ node, resolver }),
111
+ name: resolver.resolveResponseName(node),
112
+ typedName: resolver.resolveResponseTypedName(node),
113
+ description: 'Union of all possible responses',
387
114
  })
388
- const combinedSchemaName = operation.method === 'get' ? `${name}Query` : `${name}Mutation`
389
115
 
390
116
  return (
391
117
  <File
392
118
  baseName={file.baseName}
393
119
  path={file.path}
394
120
  meta={file.meta}
395
- banner={getBanner({ oas, output: plugin.options.output, config: pluginManager.config })}
396
- footer={getFooter({ oas, output: plugin.options.output })}
121
+ banner={resolver.resolveBanner(adapter.rootNode, { output, config })}
122
+ footer={resolver.resolveFooter(adapter.rootNode, { output, config })}
397
123
  >
398
- {operationSchemas.map(mapOperationSchema)}
399
-
400
- {generator.context.UNSTABLE_NAMING ? (
401
- <>
402
- <File.Source name={`${name}Request`} isExportable isIndexable isTypeOnly>
403
- {printRequestSchema({ baseName: name, operation, schemas, pluginManager })}
404
- </File.Source>
405
- <File.Source name={responseName} isExportable isIndexable isTypeOnly>
406
- {printResponseSchema({ baseName: name, schemas, pluginManager, unknownType })}
407
- </File.Source>
408
- </>
409
- ) : (
410
- <File.Source name={combinedSchemaName} isExportable isIndexable isTypeOnly>
411
- {printCombinedSchema({ name: combinedSchemaName, schemas, pluginManager })}
412
- </File.Source>
413
- )}
124
+ {paramTypes}
125
+ {responseTypes}
126
+ {requestType}
127
+ {dataType}
128
+ {responsesType}
129
+ {responseType}
414
130
  </File>
415
131
  )
416
132
  },
417
- Schema({ schema, plugin }) {
418
- const {
419
- options: { mapper, enumType, enumKeyCasing, syntaxType, optionalType, arrayType, output },
420
- } = plugin
421
- const mode = useMode()
133
+ Schema({ node, adapter, options, config }) {
134
+ const { enumType, enumKeyCasing, syntaxType, optionalType, arrayType, output, group, resolver, transformers = [] } = options
422
135
 
423
- const oas = useOas()
424
- const pluginManager = usePluginManager()
136
+ const root = path.resolve(config.root, config.output.path)
137
+ const mode = getMode(path.resolve(root, output.path))
425
138
 
426
- const { getName, getFile } = useSchemaManager()
427
- const imports = getImports(schema.tree)
428
- const schemaFromTree = schema.tree.find((item) => item.keyword === schemaKeywords.schema)
139
+ if (!node.name) {
140
+ return
141
+ }
429
142
 
430
- let typedName = getName(schema.name, { type: 'type' })
143
+ const transformedNode = transform(node, composeTransformers(...transformers))
431
144
 
432
- if (['asConst', 'asPascalConst'].includes(enumType) && schemaFromTree && isKeyword(schemaFromTree, schemaKeywords.enum)) {
433
- typedName = typedName += 'Key' //Suffix for avoiding collisions (https://github.com/kubb-labs/kubb/issues/1873)
434
- }
145
+ const imports = adapter.getImports(transformedNode, (schemaName) => ({
146
+ name: resolver.default(schemaName, 'type'),
147
+ path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group }).path,
148
+ }))
149
+
150
+ const isEnumSchema = !!narrowSchema(node, schemaTypes.enum)
151
+
152
+ const typedName = ENUM_TYPES_WITH_KEY_SUFFIX.has(enumType) && isEnumSchema ? resolver.resolveEnumKeyTypedName(node) : resolver.resolveTypedName(node.name)
435
153
 
436
154
  const type = {
437
- name: getName(schema.name, { type: 'function' }),
155
+ name: resolver.resolveName(node.name),
438
156
  typedName,
439
- file: getFile(schema.name),
440
- }
157
+ file: resolver.resolveFile({ name: node.name, extname: '.ts' }, { root, output, group }),
158
+ } as const
441
159
 
442
160
  return (
443
161
  <File
444
162
  baseName={type.file.baseName}
445
163
  path={type.file.path}
446
164
  meta={type.file.meta}
447
- banner={getBanner({ oas, output, config: pluginManager.config })}
448
- footer={getFooter({ oas, output })}
165
+ banner={resolver.resolveBanner(adapter.rootNode, { output, config })}
166
+ footer={resolver.resolveFooter(adapter.rootNode, { output, config })}
449
167
  >
450
168
  {mode === 'split' &&
451
169
  imports.map((imp) => (
452
- <File.Import key={[schema.name, imp.path, imp.isTypeOnly].join('-')} root={type.file.path} path={imp.path} name={imp.name} isTypeOnly />
170
+ <File.Import key={[node.name, imp.path, imp.isTypeOnly].join('-')} root={type.file.path} path={imp.path} name={imp.name} isTypeOnly />
453
171
  ))}
454
172
  <Type
455
173
  name={type.name}
456
174
  typedName={type.typedName}
457
- description={schema.value.description}
458
- tree={schema.tree}
459
- schema={schema.value}
460
- mapper={mapper}
175
+ node={transformedNode}
461
176
  enumType={enumType}
462
177
  enumKeyCasing={enumKeyCasing}
463
178
  optionalType={optionalType}
464
179
  arrayType={arrayType}
465
180
  syntaxType={syntaxType}
181
+ resolver={resolver}
466
182
  />
467
183
  </File>
468
184
  )