@kubb/plugin-ts 4.13.1 → 4.14.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.
Files changed (45) hide show
  1. package/dist/{components-x14CeHxX.js → components-BE9rQGox.js} +74 -58
  2. package/dist/components-BE9rQGox.js.map +1 -0
  3. package/dist/{components-BkxV2jhh.cjs → components-CGcs8968.cjs} +103 -63
  4. package/dist/components-CGcs8968.cjs.map +1 -0
  5. package/dist/components.cjs +1 -2
  6. package/dist/components.d.cts +4 -17
  7. package/dist/components.d.ts +4 -17
  8. package/dist/components.js +2 -2
  9. package/dist/generators.cjs +1 -1
  10. package/dist/generators.d.cts +1 -1
  11. package/dist/generators.d.ts +1 -1
  12. package/dist/generators.js +1 -1
  13. package/dist/index.cjs +1 -1
  14. package/dist/index.d.cts +1 -1
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.js +1 -1
  17. package/dist/{plugin-BM1VkXZS.cjs → plugin-B96TNDf4.cjs} +174 -21
  18. package/dist/plugin-B96TNDf4.cjs.map +1 -0
  19. package/dist/{plugin-BiVCDKei.js → plugin-DXyNbr_u.js} +175 -23
  20. package/dist/plugin-DXyNbr_u.js.map +1 -0
  21. package/dist/{types-WHo75HZq.d.cts → types-CKtzgWEC.d.cts} +22 -6
  22. package/dist/{types-De3dRAE2.d.ts → types-CnQREd_1.d.ts} +22 -6
  23. package/package.json +4 -4
  24. package/src/components/Type.tsx +33 -22
  25. package/src/components/index.ts +0 -1
  26. package/src/factory.ts +79 -5
  27. package/src/generators/__snapshots__/createPet.ts +1 -1
  28. package/src/generators/__snapshots__/createPetWithEmptySchemaTypeUnknown.ts +1 -1
  29. package/src/generators/__snapshots__/createPetWithEmptySchemaTypeVoid.ts +1 -1
  30. package/src/generators/__snapshots__/createPetWithUnknownTypeUnknown.ts +1 -1
  31. package/src/generators/__snapshots__/createPetWithUnknownTypeVoid.ts +1 -1
  32. package/src/generators/__snapshots__/deletePet.ts +1 -1
  33. package/src/generators/__snapshots__/enumNamesInlineLiteral.ts +6 -0
  34. package/src/generators/__snapshots__/getPets.ts +1 -1
  35. package/src/generators/__snapshots__/showPetById.ts +1 -1
  36. package/src/generators/__snapshots__/systemsWithExplodeForm.ts +1 -1
  37. package/src/generators/typeGenerator.tsx +232 -8
  38. package/src/parser.ts +28 -23
  39. package/src/plugin.ts +4 -0
  40. package/src/types.ts +16 -2
  41. package/dist/components-BkxV2jhh.cjs.map +0 -1
  42. package/dist/components-x14CeHxX.js.map +0 -1
  43. package/dist/plugin-BM1VkXZS.cjs.map +0 -1
  44. package/dist/plugin-BiVCDKei.js.map +0 -1
  45. package/src/components/OasType.tsx +0 -28
@@ -1,4 +1,4 @@
1
- import { a as createTypeLiteralNode, c as modifiers, i as createTypeAliasDeclaration, n as createIdentifier, o as createTypeReferenceNode, r as createPropertySignature, s as createUnionDeclaration, t as Type$1 } from "./components-x14CeHxX.js";
1
+ import { a as createTypeAliasDeclaration, c as createTypeReferenceNode, d as getUnknownType, f as keywordTypeNodes, i as createPropertySignature, l as createUnionDeclaration, n as createIdentifier, o as createTypeLiteralNode, p as modifiers, r as createIndexedAccessTypeNode, s as createTypeOperatorNode, t as Type, u as createUrlTemplateType } from "./components-BE9rQGox.js";
2
2
  import path from "node:path";
3
3
  import { definePlugin, getBarrelFiles, getMode } from "@kubb/core";
4
4
  import transformers, { camelCase, pascalCase } from "@kubb/core/transformers";
@@ -9,6 +9,7 @@ import { createReactGenerator } from "@kubb/plugin-oas/generators";
9
9
  import { useOas, useOperationManager, useSchemaManager } from "@kubb/plugin-oas/hooks";
10
10
  import { getBanner, getFooter } from "@kubb/plugin-oas/utils";
11
11
  import { File } from "@kubb/react-fabric";
12
+ import ts from "typescript";
12
13
  import { Fragment, jsx, jsxs } from "@kubb/react-fabric/jsx-runtime";
13
14
 
14
15
  //#region src/generators/typeGenerator.tsx
@@ -75,22 +76,145 @@ function printCombinedSchema({ name, schemas, pluginManager }) {
75
76
  modifiers: [modifiers.export]
76
77
  }));
77
78
  }
79
+ function printRequestSchema({ baseName, operation, schemas, pluginManager }) {
80
+ const name = pluginManager.resolveName({
81
+ name: `${baseName} Request`,
82
+ pluginKey: [pluginTsName],
83
+ type: "type"
84
+ });
85
+ const results = [];
86
+ const dataRequestProperties = [];
87
+ if (schemas.request) {
88
+ const identifier = pluginManager.resolveName({
89
+ name: schemas.request.name,
90
+ pluginKey: [pluginTsName],
91
+ type: "type"
92
+ });
93
+ dataRequestProperties.push(createPropertySignature({
94
+ name: "data",
95
+ questionToken: true,
96
+ type: createTypeReferenceNode(createIdentifier(identifier), void 0)
97
+ }));
98
+ } else dataRequestProperties.push(createPropertySignature({
99
+ name: "data",
100
+ questionToken: true,
101
+ type: keywordTypeNodes.never
102
+ }));
103
+ if (schemas.pathParams) {
104
+ const identifier = pluginManager.resolveName({
105
+ name: schemas.pathParams.name,
106
+ pluginKey: [pluginTsName],
107
+ type: "type"
108
+ });
109
+ dataRequestProperties.push(createPropertySignature({
110
+ name: "pathParams",
111
+ type: createTypeReferenceNode(createIdentifier(identifier), void 0)
112
+ }));
113
+ } else dataRequestProperties.push(createPropertySignature({
114
+ name: "pathParams",
115
+ questionToken: true,
116
+ type: keywordTypeNodes.never
117
+ }));
118
+ if (schemas.queryParams) {
119
+ const identifier = pluginManager.resolveName({
120
+ name: schemas.queryParams.name,
121
+ pluginKey: [pluginTsName],
122
+ type: "type"
123
+ });
124
+ dataRequestProperties.push(createPropertySignature({
125
+ name: "queryParams",
126
+ questionToken: true,
127
+ type: createTypeReferenceNode(createIdentifier(identifier), void 0)
128
+ }));
129
+ } else dataRequestProperties.push(createPropertySignature({
130
+ name: "queryParams",
131
+ questionToken: true,
132
+ type: keywordTypeNodes.never
133
+ }));
134
+ if (schemas.headerParams) {
135
+ const identifier = pluginManager.resolveName({
136
+ name: schemas.headerParams.name,
137
+ pluginKey: [pluginTsName],
138
+ type: "type"
139
+ });
140
+ dataRequestProperties.push(createPropertySignature({
141
+ name: "headerParams",
142
+ questionToken: true,
143
+ type: createTypeReferenceNode(createIdentifier(identifier), void 0)
144
+ }));
145
+ } else dataRequestProperties.push(createPropertySignature({
146
+ name: "headerParams",
147
+ questionToken: true,
148
+ type: keywordTypeNodes.never
149
+ }));
150
+ dataRequestProperties.push(createPropertySignature({
151
+ name: "url",
152
+ type: createUrlTemplateType(operation.path)
153
+ }));
154
+ const dataRequestNode = createTypeAliasDeclaration({
155
+ name,
156
+ type: createTypeLiteralNode(dataRequestProperties),
157
+ modifiers: [modifiers.export]
158
+ });
159
+ results.push(safePrint(dataRequestNode));
160
+ return results.join("\n\n");
161
+ }
162
+ function printResponseSchema({ baseName, schemas, pluginManager, unknownType }) {
163
+ const results = [];
164
+ const name = pluginManager.resolveName({
165
+ name: `${baseName} ResponseData`,
166
+ pluginKey: [pluginTsName],
167
+ type: "type"
168
+ });
169
+ if (schemas.responses && schemas.responses.length > 0) {
170
+ const responsesProperties = schemas.responses.map((res) => {
171
+ const identifier = pluginManager.resolveName({
172
+ name: res.name,
173
+ pluginKey: [pluginTsName],
174
+ type: "type"
175
+ });
176
+ return createPropertySignature({
177
+ name: res.statusCode?.toString() ?? "default",
178
+ type: createTypeReferenceNode(createIdentifier(identifier), void 0)
179
+ });
180
+ });
181
+ const responsesNode = createTypeAliasDeclaration({
182
+ name: `${baseName}Responses`,
183
+ type: createTypeLiteralNode(responsesProperties),
184
+ modifiers: [modifiers.export]
185
+ });
186
+ results.push(safePrint(responsesNode));
187
+ const responseNode = createTypeAliasDeclaration({
188
+ name,
189
+ type: createIndexedAccessTypeNode(createTypeReferenceNode(createIdentifier(`${baseName}Responses`), void 0), createTypeOperatorNode(ts.SyntaxKind.KeyOfKeyword, createTypeReferenceNode(createIdentifier(`${baseName}Responses`), void 0))),
190
+ modifiers: [modifiers.export]
191
+ });
192
+ results.push(safePrint(responseNode));
193
+ } else {
194
+ const responseNode = createTypeAliasDeclaration({
195
+ name,
196
+ modifiers: [modifiers.export],
197
+ type: getUnknownType(unknownType)
198
+ });
199
+ results.push(safePrint(responseNode));
200
+ }
201
+ return results.join("\n\n");
202
+ }
78
203
  const typeGenerator = createReactGenerator({
79
204
  name: "typescript",
80
205
  Operation({ operation, generator, plugin }) {
81
- const { options, options: { mapper, enumType, syntaxType, optionalType } } = plugin;
206
+ const { options, options: { mapper, enumType, syntaxType, optionalType, arrayType, unknownType } } = plugin;
82
207
  const mode = useMode();
83
208
  const pluginManager = usePluginManager();
84
209
  const oas = useOas();
85
210
  const { getSchemas, getFile, getName, getGroup } = useOperationManager(generator);
86
211
  const schemaManager = useSchemaManager();
87
- const file = getFile(operation);
88
- const schemas = getSchemas(operation);
89
- const type = getName(operation, {
90
- type: "function",
212
+ const name = getName(operation, {
213
+ type: "type",
91
214
  pluginKey: [pluginTsName]
92
215
  });
93
- const combinedSchemaName = operation.method === "get" ? `${type}Query` : `${type}Mutation`;
216
+ const file = getFile(operation);
217
+ const schemas = getSchemas(operation);
94
218
  const schemaGenerator = new SchemaGenerator(options, {
95
219
  fabric: generator.context.fabric,
96
220
  oas,
@@ -108,18 +232,18 @@ const typeGenerator = createReactGenerator({
108
232
  schemas.request,
109
233
  schemas.response
110
234
  ].flat().filter(Boolean);
111
- const mapOperationSchema = ({ name, schema, description, keysToOmit, ...options$1 }) => {
235
+ const mapOperationSchema = ({ name: name$1, schema, description, keysToOmit, ...options$1 }) => {
112
236
  const tree = schemaGenerator.parse({
113
237
  schema,
114
- name,
238
+ name: name$1,
115
239
  parentName: null
116
240
  });
117
241
  const imports = schemaManager.getImports(tree);
118
242
  const group = options$1.operation ? getGroup(options$1.operation) : void 0;
119
- const type$1 = {
120
- name: schemaManager.getName(name, { type: "type" }),
121
- typedName: schemaManager.getName(name, { type: "type" }),
122
- file: schemaManager.getFile(options$1.operationName || name, { group })
243
+ const type = {
244
+ name: schemaManager.getName(name$1, { type: "type" }),
245
+ typedName: schemaManager.getName(name$1, { type: "type" }),
246
+ file: schemaManager.getFile(options$1.operationName || name$1, { group })
123
247
  };
124
248
  return /* @__PURE__ */ jsxs(Fragment, { children: [mode === "split" && imports.map((imp) => /* @__PURE__ */ jsx(File.Import, {
125
249
  root: file.path,
@@ -127,23 +251,26 @@ const typeGenerator = createReactGenerator({
127
251
  name: imp.name,
128
252
  isTypeOnly: true
129
253
  }, [
130
- name,
254
+ name$1,
131
255
  imp.name,
132
256
  imp.path,
133
257
  imp.isTypeOnly
134
- ].join("-"))), /* @__PURE__ */ jsx(Type$1, {
135
- name: type$1.name,
136
- typedName: type$1.typedName,
258
+ ].join("-"))), /* @__PURE__ */ jsx(Type, {
259
+ name: type.name,
260
+ typedName: type.typedName,
137
261
  description,
138
262
  tree,
139
263
  schema,
140
264
  mapper,
141
265
  enumType,
142
266
  optionalType,
267
+ arrayType,
143
268
  keysToOmit,
144
269
  syntaxType
145
270
  })] });
146
271
  };
272
+ const responseName = schemaManager.getName(schemas.response.name, { type: "type" });
273
+ const combinedSchemaName = operation.method === "get" ? `${name}Query` : `${name}Mutation`;
147
274
  return /* @__PURE__ */ jsxs(File, {
148
275
  baseName: file.baseName,
149
276
  path: file.path,
@@ -157,7 +284,29 @@ const typeGenerator = createReactGenerator({
157
284
  oas,
158
285
  output: plugin.options.output
159
286
  }),
160
- children: [operationSchemas.map(mapOperationSchema), /* @__PURE__ */ jsx(File.Source, {
287
+ children: [operationSchemas.map(mapOperationSchema), generator.context.UNSTABLE_NAMING ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(File.Source, {
288
+ name: `${name}Request`,
289
+ isExportable: true,
290
+ isIndexable: true,
291
+ isTypeOnly: true,
292
+ children: printRequestSchema({
293
+ baseName: name,
294
+ operation,
295
+ schemas,
296
+ pluginManager
297
+ })
298
+ }), /* @__PURE__ */ jsx(File.Source, {
299
+ name: responseName,
300
+ isExportable: true,
301
+ isIndexable: true,
302
+ isTypeOnly: true,
303
+ children: printResponseSchema({
304
+ baseName: name,
305
+ schemas,
306
+ pluginManager,
307
+ unknownType
308
+ })
309
+ })] }) : /* @__PURE__ */ jsx(File.Source, {
161
310
  name: combinedSchemaName,
162
311
  isExportable: true,
163
312
  isIndexable: true,
@@ -171,7 +320,7 @@ const typeGenerator = createReactGenerator({
171
320
  });
172
321
  },
173
322
  Schema({ schema, plugin }) {
174
- const { options: { mapper, enumType, syntaxType, optionalType, output } } = plugin;
323
+ const { options: { mapper, enumType, syntaxType, optionalType, arrayType, output } } = plugin;
175
324
  const mode = useMode();
176
325
  const oas = useOas();
177
326
  const pluginManager = usePluginManager();
@@ -207,7 +356,7 @@ const typeGenerator = createReactGenerator({
207
356
  schema.name,
208
357
  imp.path,
209
358
  imp.isTypeOnly
210
- ].join("-"))), /* @__PURE__ */ jsx(Type$1, {
359
+ ].join("-"))), /* @__PURE__ */ jsx(Type, {
211
360
  name: type.name,
212
361
  typedName: type.typedName,
213
362
  description: schema.value.description,
@@ -216,6 +365,7 @@ const typeGenerator = createReactGenerator({
216
365
  mapper,
217
366
  enumType,
218
367
  optionalType,
368
+ arrayType,
219
369
  syntaxType
220
370
  })]
221
371
  });
@@ -229,7 +379,7 @@ const pluginTs = definePlugin((options) => {
229
379
  const { output = {
230
380
  path: "types",
231
381
  barrelType: "named"
232
- }, group, exclude = [], include, override = [], enumType = "asConst", enumSuffix = "enum", dateType = "string", unknownType = "any", optionalType = "questionToken", emptySchemaType = unknownType, syntaxType = "type", transformers: transformers$1 = {}, mapper = {}, generators = [typeGenerator].filter(Boolean), contentType } = options;
382
+ }, group, exclude = [], include, override = [], enumType = "asConst", enumSuffix = "enum", dateType = "string", unknownType = "any", optionalType = "questionToken", arrayType = "array", emptySchemaType = unknownType, syntaxType = "type", transformers: transformers$1 = {}, mapper = {}, generators = [typeGenerator].filter(Boolean), contentType, UNSTABLE_NAMING } = options;
233
383
  return {
234
384
  name: pluginTsName,
235
385
  options: {
@@ -237,6 +387,7 @@ const pluginTs = definePlugin((options) => {
237
387
  transformers: transformers$1,
238
388
  dateType,
239
389
  optionalType,
390
+ arrayType,
240
391
  enumType,
241
392
  enumSuffix,
242
393
  unknownType,
@@ -297,7 +448,8 @@ const pluginTs = definePlugin((options) => {
297
448
  exclude,
298
449
  include,
299
450
  override,
300
- mode
451
+ mode,
452
+ UNSTABLE_NAMING
301
453
  }).build(...generators);
302
454
  await this.upsertFile(...operationFiles);
303
455
  const barrelFiles = await getBarrelFiles(this.fabric.files, {
@@ -313,4 +465,4 @@ const pluginTs = definePlugin((options) => {
313
465
 
314
466
  //#endregion
315
467
  export { pluginTsName as n, typeGenerator as r, pluginTs as t };
316
- //# sourceMappingURL=plugin-BiVCDKei.js.map
468
+ //# sourceMappingURL=plugin-DXyNbr_u.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-DXyNbr_u.js","names":["properties: Record<string, ts.TypeNode>","factory.createUnionDeclaration","factory.createTypeReferenceNode","factory.createIdentifier","factory.createTypeAliasDeclaration","factory.createTypeLiteralNode","factory.createPropertySignature","results: string[]","dataRequestProperties: ts.PropertySignature[]","responsesProperties: ts.PropertySignature[]","factory.createIndexedAccessTypeNode","factory.createTypeOperatorNode","options","name","options","groupName: Group['name']","transformers"],"sources":["../src/generators/typeGenerator.tsx","../src/plugin.ts"],"sourcesContent":["import type { PluginManager } from '@kubb/core'\nimport { useMode, usePluginManager } from '@kubb/core/hooks'\nimport transformers from '@kubb/core/transformers'\nimport { safePrint } from '@kubb/fabric-core/parsers/typescript'\nimport type { Operation } from '@kubb/oas'\nimport { isKeyword, type OperationSchemas, type OperationSchema as OperationSchemaType, SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'\nimport { createReactGenerator } from '@kubb/plugin-oas/generators'\nimport { useOas, useOperationManager, useSchemaManager } from '@kubb/plugin-oas/hooks'\nimport { getBanner, getFooter } from '@kubb/plugin-oas/utils'\nimport { File } from '@kubb/react-fabric'\nimport ts from 'typescript'\nimport { Type } from '../components'\nimport * as factory from '../factory.ts'\nimport { createUrlTemplateType, getUnknownType, keywordTypeNodes } from '../factory.ts'\nimport { pluginTsName } from '../plugin.ts'\nimport type { PluginTs } from '../types'\n\nfunction printCombinedSchema({ name, schemas, pluginManager }: { name: string; schemas: OperationSchemas; pluginManager: PluginManager }): string {\n const properties: Record<string, ts.TypeNode> = {}\n\n if (schemas.response) {\n properties['response'] = factory.createUnionDeclaration({\n nodes: schemas.responses.map((res) => {\n const identifier = pluginManager.resolveName({\n name: res.name,\n pluginKey: [pluginTsName],\n type: 'function',\n })\n\n return factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }),\n })!\n }\n\n if (schemas.request) {\n const identifier = pluginManager.resolveName({\n name: schemas.request.name,\n pluginKey: [pluginTsName],\n type: 'function',\n })\n properties['request'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.pathParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.pathParams.name,\n pluginKey: [pluginTsName],\n type: 'function',\n })\n properties['pathParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.queryParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.queryParams.name,\n pluginKey: [pluginTsName],\n type: 'function',\n })\n properties['queryParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.headerParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.headerParams.name,\n pluginKey: [pluginTsName],\n type: 'function',\n })\n properties['headerParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.errors) {\n properties['errors'] = factory.createUnionDeclaration({\n nodes: schemas.errors.map((error) => {\n const identifier = pluginManager.resolveName({\n name: error.name,\n pluginKey: [pluginTsName],\n type: 'function',\n })\n\n return factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }),\n })!\n }\n\n const namespaceNode = factory.createTypeAliasDeclaration({\n name,\n type: factory.createTypeLiteralNode(\n Object.keys(properties)\n .map((key) => {\n const type = properties[key]\n if (!type) {\n return undefined\n }\n\n return factory.createPropertySignature({\n name: transformers.pascalCase(key),\n type,\n })\n })\n .filter(Boolean),\n ),\n modifiers: [factory.modifiers.export],\n })\n\n return safePrint(namespaceNode)\n}\n\nfunction printRequestSchema({\n baseName,\n operation,\n schemas,\n pluginManager,\n}: {\n baseName: string\n operation: Operation\n schemas: OperationSchemas\n pluginManager: PluginManager\n}): string {\n const name = pluginManager.resolveName({\n name: `${baseName} Request`,\n pluginKey: [pluginTsName],\n type: 'type',\n })\n\n const results: string[] = []\n\n // Generate DataRequest type\n const dataRequestProperties: ts.PropertySignature[] = []\n\n if (schemas.request) {\n const identifier = pluginManager.resolveName({\n name: schemas.request.name,\n pluginKey: [pluginTsName],\n type: 'type',\n })\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'data',\n questionToken: true,\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n }),\n )\n } else {\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'data',\n questionToken: true,\n type: keywordTypeNodes.never,\n }),\n )\n }\n\n // Add pathParams property\n if (schemas.pathParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.pathParams.name,\n pluginKey: [pluginTsName],\n type: 'type',\n })\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'pathParams',\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n }),\n )\n } else {\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'pathParams',\n questionToken: true,\n type: keywordTypeNodes.never,\n }),\n )\n }\n\n // Add queryParams property\n if (schemas.queryParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.queryParams.name,\n pluginKey: [pluginTsName],\n type: 'type',\n })\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'queryParams',\n questionToken: true,\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n }),\n )\n } else {\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'queryParams',\n questionToken: true,\n type: keywordTypeNodes.never,\n }),\n )\n }\n\n // Add headerParams property\n if (schemas.headerParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.headerParams.name,\n pluginKey: [pluginTsName],\n type: 'type',\n })\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'headerParams',\n questionToken: true,\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n }),\n )\n } else {\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'headerParams',\n questionToken: true,\n type: keywordTypeNodes.never,\n }),\n )\n }\n\n // Add url property with template literal type\n dataRequestProperties.push(\n factory.createPropertySignature({\n name: 'url',\n type: createUrlTemplateType(operation.path),\n }),\n )\n\n const dataRequestNode = factory.createTypeAliasDeclaration({\n name,\n type: factory.createTypeLiteralNode(dataRequestProperties),\n modifiers: [factory.modifiers.export],\n })\n\n results.push(safePrint(dataRequestNode))\n\n return results.join('\\n\\n')\n}\n\nfunction printResponseSchema({\n baseName,\n schemas,\n pluginManager,\n unknownType,\n}: {\n baseName: string\n schemas: OperationSchemas\n pluginManager: PluginManager\n unknownType: PluginTs['resolvedOptions']['unknownType']\n}): string {\n const results: string[] = []\n\n const name = pluginManager.resolveName({\n name: `${baseName} ResponseData`,\n pluginKey: [pluginTsName],\n type: 'type',\n })\n\n // Generate Responses type (mapping status codes to response types)\n if (schemas.responses && schemas.responses.length > 0) {\n const responsesProperties: ts.PropertySignature[] = schemas.responses.map((res) => {\n const identifier = pluginManager.resolveName({\n name: res.name,\n pluginKey: [pluginTsName],\n type: 'type',\n })\n\n return factory.createPropertySignature({\n name: res.statusCode?.toString() ?? 'default',\n type: factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined),\n })\n })\n\n const responsesNode = factory.createTypeAliasDeclaration({\n name: `${baseName}Responses`,\n type: factory.createTypeLiteralNode(responsesProperties),\n modifiers: [factory.modifiers.export],\n })\n\n results.push(safePrint(responsesNode))\n\n // Generate Response type (union via indexed access)\n const responseNode = factory.createTypeAliasDeclaration({\n name,\n type: factory.createIndexedAccessTypeNode(\n factory.createTypeReferenceNode(factory.createIdentifier(`${baseName}Responses`), undefined),\n factory.createTypeOperatorNode(\n ts.SyntaxKind.KeyOfKeyword,\n factory.createTypeReferenceNode(factory.createIdentifier(`${baseName}Responses`), undefined),\n ),\n ),\n modifiers: [factory.modifiers.export],\n })\n\n results.push(safePrint(responseNode))\n } else {\n const responseNode = factory.createTypeAliasDeclaration({\n name,\n modifiers: [factory.modifiers.export],\n type: getUnknownType(unknownType),\n })\n\n results.push(safePrint(responseNode))\n }\n\n return results.join('\\n\\n')\n}\n\nexport const typeGenerator = createReactGenerator<PluginTs>({\n name: 'typescript',\n Operation({ operation, generator, plugin }) {\n const {\n options,\n options: { mapper, enumType, syntaxType, optionalType, arrayType, unknownType },\n } = plugin\n\n const mode = useMode()\n const pluginManager = usePluginManager()\n\n const oas = useOas()\n const { getSchemas, getFile, getName, getGroup } = useOperationManager(generator)\n const schemaManager = useSchemaManager()\n\n const name = getName(operation, { type: 'type', pluginKey: [pluginTsName] })\n\n const file = getFile(operation)\n const schemas = getSchemas(operation)\n const schemaGenerator = new SchemaGenerator(options, {\n fabric: generator.context.fabric,\n oas,\n events: generator.context.events,\n plugin,\n pluginManager,\n mode,\n override: options.override,\n })\n\n const operationSchemas = [schemas.pathParams, schemas.queryParams, schemas.headerParams, schemas.statusCodes, schemas.request, schemas.response]\n .flat()\n .filter(Boolean)\n\n const mapOperationSchema = ({ name, schema, description, keysToOmit, ...options }: OperationSchemaType) => {\n const tree = schemaGenerator.parse({ schema, name, parentName: null })\n const imports = schemaManager.getImports(tree)\n const group = options.operation ? getGroup(options.operation) : undefined\n\n const type = {\n name: schemaManager.getName(name, { type: 'type' }),\n typedName: schemaManager.getName(name, { type: 'type' }),\n file: schemaManager.getFile(options.operationName || name, { group }),\n }\n\n return (\n <>\n {mode === 'split' &&\n imports.map((imp) => (\n <File.Import key={[name, imp.name, imp.path, imp.isTypeOnly].join('-')} root={file.path} path={imp.path} name={imp.name} isTypeOnly />\n ))}\n <Type\n name={type.name}\n typedName={type.typedName}\n description={description}\n tree={tree}\n schema={schema}\n mapper={mapper}\n enumType={enumType}\n optionalType={optionalType}\n arrayType={arrayType}\n keysToOmit={keysToOmit}\n syntaxType={syntaxType}\n />\n </>\n )\n }\n\n const responseName = schemaManager.getName(schemas.response.name, {\n type: 'type',\n })\n const combinedSchemaName = operation.method === 'get' ? `${name}Query` : `${name}Mutation`\n\n return (\n <File\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={getBanner({ oas, output: plugin.options.output, config: pluginManager.config })}\n footer={getFooter({ oas, output: plugin.options.output })}\n >\n {operationSchemas.map(mapOperationSchema)}\n\n {generator.context.UNSTABLE_NAMING ? (\n <>\n <File.Source name={`${name}Request`} isExportable isIndexable isTypeOnly>\n {printRequestSchema({ baseName: name, operation, schemas, pluginManager })}\n </File.Source>\n <File.Source name={responseName} isExportable isIndexable isTypeOnly>\n {printResponseSchema({ baseName: name, schemas, pluginManager, unknownType })}\n </File.Source>\n </>\n ) : (\n <File.Source name={combinedSchemaName} isExportable isIndexable isTypeOnly>\n {printCombinedSchema({ name: combinedSchemaName, schemas, pluginManager })}\n </File.Source>\n )}\n </File>\n )\n },\n Schema({ schema, plugin }) {\n const {\n options: { mapper, enumType, syntaxType, optionalType, arrayType, output },\n } = plugin\n const mode = useMode()\n\n const oas = useOas()\n const pluginManager = usePluginManager()\n\n const { getName, getImports, getFile } = useSchemaManager()\n const imports = getImports(schema.tree)\n const schemaFromTree = schema.tree.find((item) => item.keyword === schemaKeywords.schema)\n\n let typedName = getName(schema.name, { type: 'type' })\n\n if (enumType === 'asConst' && schemaFromTree && isKeyword(schemaFromTree, schemaKeywords.enum)) {\n typedName = typedName += 'Key' //Suffix for avoiding collisions (https://github.com/kubb-labs/kubb/issues/1873)\n }\n\n const type = {\n name: getName(schema.name, { type: 'function' }),\n typedName,\n file: getFile(schema.name),\n }\n\n return (\n <File\n baseName={type.file.baseName}\n path={type.file.path}\n meta={type.file.meta}\n banner={getBanner({ oas, output, config: pluginManager.config })}\n footer={getFooter({ oas, output })}\n >\n {mode === 'split' &&\n imports.map((imp) => (\n <File.Import key={[schema.name, imp.path, imp.isTypeOnly].join('-')} root={type.file.path} path={imp.path} name={imp.name} isTypeOnly />\n ))}\n <Type\n name={type.name}\n typedName={type.typedName}\n description={schema.value.description}\n tree={schema.tree}\n schema={schema.value}\n mapper={mapper}\n enumType={enumType}\n optionalType={optionalType}\n arrayType={arrayType}\n syntaxType={syntaxType}\n />\n </File>\n )\n },\n})\n","import path from 'node:path'\nimport { definePlugin, type Group, getBarrelFiles, getMode } from '@kubb/core'\nimport { camelCase, pascalCase } from '@kubb/core/transformers'\nimport { OperationGenerator, pluginOasName, SchemaGenerator } from '@kubb/plugin-oas'\nimport { typeGenerator } from './generators'\nimport type { PluginTs } from './types.ts'\n\nexport const pluginTsName = 'plugin-ts' satisfies PluginTs['name']\n\nexport const pluginTs = definePlugin<PluginTs>((options) => {\n const {\n output = { path: 'types', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n enumType = 'asConst',\n enumSuffix = 'enum',\n dateType = 'string',\n unknownType = 'any',\n optionalType = 'questionToken',\n arrayType = 'array',\n emptySchemaType = unknownType,\n syntaxType = 'type',\n transformers = {},\n mapper = {},\n generators = [typeGenerator].filter(Boolean),\n contentType,\n UNSTABLE_NAMING,\n } = options\n\n const usedEnumNames = {}\n\n return {\n name: pluginTsName,\n options: {\n output,\n transformers,\n dateType,\n optionalType,\n arrayType,\n enumType,\n enumSuffix,\n unknownType,\n emptySchemaType,\n syntaxType,\n group,\n override,\n mapper,\n usedEnumNames,\n },\n pre: [pluginOasName],\n resolvePath(baseName, pathMode, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = pathMode ?? getMode(path.resolve(root, output.path))\n\n if (mode === 'single') {\n /**\n * when output is a file then we will always append to the same file(output file), see fileManager.addOrAppend\n * Other plugins then need to call addOrAppend instead of just add from the fileManager class\n */\n return path.resolve(root, output.path)\n }\n\n if (group && (options?.group?.path || options?.group?.tag)) {\n const groupName: Group['name'] = group?.name\n ? group.name\n : (ctx) => {\n if (group?.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n }\n\n return path.resolve(\n root,\n output.path,\n groupName({\n group: group.type === 'path' ? options.group.path! : options.group.tag!,\n }),\n baseName,\n )\n }\n\n return path.resolve(root, output.path, baseName)\n },\n resolveName(name, type) {\n const resolvedName = pascalCase(name, { isFile: type === 'file' })\n\n if (type) {\n return transformers?.name?.(resolvedName, type) || resolvedName\n }\n\n return resolvedName\n },\n async install() {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = getMode(path.resolve(root, output.path))\n const oas = await this.getOas()\n\n const schemaGenerator = new SchemaGenerator(this.plugin.options, {\n fabric: this.fabric,\n oas,\n pluginManager: this.pluginManager,\n events: this.events,\n plugin: this.plugin,\n contentType,\n include: undefined,\n override,\n mode,\n output: output.path,\n })\n\n const schemaFiles = await schemaGenerator.build(...generators)\n await this.upsertFile(...schemaFiles)\n\n const operationGenerator = new OperationGenerator(this.plugin.options, {\n fabric: this.fabric,\n oas,\n pluginManager: this.pluginManager,\n events: this.events,\n plugin: this.plugin,\n contentType,\n exclude,\n include,\n override,\n mode,\n UNSTABLE_NAMING,\n })\n\n const operationFiles = await operationGenerator.build(...generators)\n await this.upsertFile(...operationFiles)\n\n const barrelFiles = await getBarrelFiles(this.fabric.files, {\n type: output.barrelType ?? 'named',\n root,\n output,\n meta: {\n pluginKey: this.plugin.key,\n },\n })\n\n await this.upsertFile(...barrelFiles)\n },\n }\n})\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import * as oas_normalize_lib_types0 from "oas-normalize/lib/types";
2
2
  import BaseOas from "oas";
3
3
  import { Operation } from "oas/operation";
4
- import * as OasTypes from "oas/types";
5
4
  import { DiscriminatorObject, HttpMethods, OASDocument, SchemaObject } from "oas/types";
6
5
  import { KubbFile } from "@kubb/fabric-core/types";
7
6
  import { Fabric } from "@kubb/react-fabric";
@@ -183,6 +182,8 @@ interface KubbEvents {
183
182
  id?: string;
184
183
  command: string;
185
184
  args?: readonly string[];
185
+ success: boolean;
186
+ error: Error | null;
186
187
  }];
187
188
  /**
188
189
  * Emitted when a new version of Kubb is available.
@@ -827,6 +828,7 @@ type Context$1<TOptions, TPluginOptions extends PluginFactoryOptions> = {
827
828
  */
828
829
  plugin: Plugin<TPluginOptions>;
829
830
  mode: KubbFile.Mode;
831
+ UNSTABLE_NAMING?: true;
830
832
  };
831
833
  declare class OperationGenerator<TPluginOptions extends PluginFactoryOptions = PluginFactoryOptions, TFileMeta extends FileMetaBase = FileMetaBase> extends BaseGenerator<TPluginOptions['resolvedOptions'], Context$1<TPluginOptions['resolvedOptions'], TPluginOptions>> {
832
834
  #private;
@@ -1081,7 +1083,7 @@ type SchemaGeneratorOptions = {
1081
1083
  dateType: false | 'string' | 'stringOffset' | 'stringLocal' | 'date';
1082
1084
  unknownType: 'any' | 'unknown' | 'void';
1083
1085
  emptySchemaType: 'any' | 'unknown' | 'void';
1084
- enumType?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal';
1086
+ enumType?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal' | 'inlineLiteral';
1085
1087
  enumSuffix?: string;
1086
1088
  usedEnumNames?: Record<string, number>;
1087
1089
  mapper?: Record<string, string>;
@@ -1191,15 +1193,17 @@ type Options = {
1191
1193
  */
1192
1194
  override?: Array<Override<ResolvedOptions>>;
1193
1195
  /**
1194
- * Choose to use `enum`, `asConst`, `asPascalConst`, `constEnum`, or `literal` for enums.
1196
+ * Choose to use `enum`, `asConst`, `asPascalConst`, `constEnum`, `literal`, or `inlineLiteral` for enums.
1195
1197
  * - `enum`: TypeScript enum
1196
1198
  * - `asConst`: const with camelCase name (e.g., `petType`)
1197
1199
  * - `asPascalConst`: const with PascalCase name (e.g., `PetType`)
1198
1200
  * - `constEnum`: const enum
1199
1201
  * - `literal`: literal union type
1202
+ * - `inlineLiteral`: inline enum values directly into the type (default in v5)
1200
1203
  * @default 'asConst'
1204
+ * @note In Kubb v5, `inlineLiteral` will become the default.
1201
1205
  */
1202
- enumType?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal';
1206
+ enumType?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal' | 'inlineLiteral';
1203
1207
  /**
1204
1208
  * Switch between type or interface for creating TypeScript types
1205
1209
  * @default 'type'
@@ -1233,6 +1237,13 @@ type Options = {
1233
1237
  * @default 'questionToken'
1234
1238
  */
1235
1239
  optionalType?: 'questionToken' | 'undefined' | 'questionTokenAndUndefined';
1240
+ /**
1241
+ * Choose between `Array<string>` or `string[]` for array types.
1242
+ * - `generic`: Array<Type>
1243
+ * - `array`: Type[]
1244
+ * @default 'array'
1245
+ */
1246
+ arrayType?: 'generic' | 'array';
1236
1247
  transformers?: {
1237
1248
  /**
1238
1249
  * Customize the names based on the type that is provided by the plugin.
@@ -1254,6 +1265,10 @@ type Options = {
1254
1265
  * Define some generators next to the ts generators
1255
1266
  */
1256
1267
  generators?: Array<Generator<PluginTs>>;
1268
+ /**
1269
+ * Unstable naming for v5
1270
+ */
1271
+ UNSTABLE_NAMING?: true;
1257
1272
  };
1258
1273
  type ResolvedOptions = {
1259
1274
  output: Output<Oas>;
@@ -1265,11 +1280,12 @@ type ResolvedOptions = {
1265
1280
  unknownType: NonNullable<Options['unknownType']>;
1266
1281
  emptySchemaType: NonNullable<Options['emptySchemaType']>;
1267
1282
  optionalType: NonNullable<Options['optionalType']>;
1283
+ arrayType: NonNullable<Options['arrayType']>;
1268
1284
  transformers: NonNullable<Options['transformers']>;
1269
1285
  syntaxType: NonNullable<Options['syntaxType']>;
1270
1286
  mapper: Record<string, any>;
1271
1287
  };
1272
1288
  type PluginTs = PluginFactoryOptions<'plugin-ts', Options, ResolvedOptions, never, ResolvePathOptions>;
1273
1289
  //#endregion
1274
- export { UserPluginWithLifeCycle as a, Schema as i, PluginTs as n, OasTypes as o, ReactGenerator as r, SchemaObject$1 as s, Options as t };
1275
- //# sourceMappingURL=types-WHo75HZq.d.cts.map
1290
+ export { UserPluginWithLifeCycle as a, Schema as i, PluginTs as n, SchemaObject$1 as o, ReactGenerator as r, Options as t };
1291
+ //# sourceMappingURL=types-CKtzgWEC.d.cts.map
@@ -3,7 +3,6 @@ import ts from "typescript";
3
3
  import * as oas_normalize_lib_types0 from "oas-normalize/lib/types";
4
4
  import BaseOas from "oas";
5
5
  import { Operation } from "oas/operation";
6
- import * as OasTypes from "oas/types";
7
6
  import { DiscriminatorObject, HttpMethods, OASDocument, SchemaObject } from "oas/types";
8
7
  import { KubbFile } from "@kubb/fabric-core/types";
9
8
  import { KubbNode } from "@kubb/react-fabric/types";
@@ -183,6 +182,8 @@ interface KubbEvents {
183
182
  id?: string;
184
183
  command: string;
185
184
  args?: readonly string[];
185
+ success: boolean;
186
+ error: Error | null;
186
187
  }];
187
188
  /**
188
189
  * Emitted when a new version of Kubb is available.
@@ -827,6 +828,7 @@ type Context$1<TOptions, TPluginOptions extends PluginFactoryOptions> = {
827
828
  */
828
829
  plugin: Plugin<TPluginOptions>;
829
830
  mode: KubbFile.Mode;
831
+ UNSTABLE_NAMING?: true;
830
832
  };
831
833
  declare class OperationGenerator<TPluginOptions extends PluginFactoryOptions = PluginFactoryOptions, TFileMeta extends FileMetaBase = FileMetaBase> extends BaseGenerator<TPluginOptions['resolvedOptions'], Context$1<TPluginOptions['resolvedOptions'], TPluginOptions>> {
832
834
  #private;
@@ -1081,7 +1083,7 @@ type SchemaGeneratorOptions = {
1081
1083
  dateType: false | 'string' | 'stringOffset' | 'stringLocal' | 'date';
1082
1084
  unknownType: 'any' | 'unknown' | 'void';
1083
1085
  emptySchemaType: 'any' | 'unknown' | 'void';
1084
- enumType?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal';
1086
+ enumType?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal' | 'inlineLiteral';
1085
1087
  enumSuffix?: string;
1086
1088
  usedEnumNames?: Record<string, number>;
1087
1089
  mapper?: Record<string, string>;
@@ -1191,15 +1193,17 @@ type Options = {
1191
1193
  */
1192
1194
  override?: Array<Override<ResolvedOptions>>;
1193
1195
  /**
1194
- * Choose to use `enum`, `asConst`, `asPascalConst`, `constEnum`, or `literal` for enums.
1196
+ * Choose to use `enum`, `asConst`, `asPascalConst`, `constEnum`, `literal`, or `inlineLiteral` for enums.
1195
1197
  * - `enum`: TypeScript enum
1196
1198
  * - `asConst`: const with camelCase name (e.g., `petType`)
1197
1199
  * - `asPascalConst`: const with PascalCase name (e.g., `PetType`)
1198
1200
  * - `constEnum`: const enum
1199
1201
  * - `literal`: literal union type
1202
+ * - `inlineLiteral`: inline enum values directly into the type (default in v5)
1200
1203
  * @default 'asConst'
1204
+ * @note In Kubb v5, `inlineLiteral` will become the default.
1201
1205
  */
1202
- enumType?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal';
1206
+ enumType?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal' | 'inlineLiteral';
1203
1207
  /**
1204
1208
  * Switch between type or interface for creating TypeScript types
1205
1209
  * @default 'type'
@@ -1233,6 +1237,13 @@ type Options = {
1233
1237
  * @default 'questionToken'
1234
1238
  */
1235
1239
  optionalType?: 'questionToken' | 'undefined' | 'questionTokenAndUndefined';
1240
+ /**
1241
+ * Choose between `Array<string>` or `string[]` for array types.
1242
+ * - `generic`: Array<Type>
1243
+ * - `array`: Type[]
1244
+ * @default 'array'
1245
+ */
1246
+ arrayType?: 'generic' | 'array';
1236
1247
  transformers?: {
1237
1248
  /**
1238
1249
  * Customize the names based on the type that is provided by the plugin.
@@ -1254,6 +1265,10 @@ type Options = {
1254
1265
  * Define some generators next to the ts generators
1255
1266
  */
1256
1267
  generators?: Array<Generator<PluginTs>>;
1268
+ /**
1269
+ * Unstable naming for v5
1270
+ */
1271
+ UNSTABLE_NAMING?: true;
1257
1272
  };
1258
1273
  type ResolvedOptions = {
1259
1274
  output: Output<Oas>;
@@ -1265,11 +1280,12 @@ type ResolvedOptions = {
1265
1280
  unknownType: NonNullable<Options['unknownType']>;
1266
1281
  emptySchemaType: NonNullable<Options['emptySchemaType']>;
1267
1282
  optionalType: NonNullable<Options['optionalType']>;
1283
+ arrayType: NonNullable<Options['arrayType']>;
1268
1284
  transformers: NonNullable<Options['transformers']>;
1269
1285
  syntaxType: NonNullable<Options['syntaxType']>;
1270
1286
  mapper: Record<string, any>;
1271
1287
  };
1272
1288
  type PluginTs = PluginFactoryOptions<'plugin-ts', Options, ResolvedOptions, never, ResolvePathOptions>;
1273
1289
  //#endregion
1274
- export { UserPluginWithLifeCycle as a, Schema as i, PluginTs as n, OasTypes as o, ReactGenerator as r, SchemaObject$1 as s, Options as t };
1275
- //# sourceMappingURL=types-De3dRAE2.d.ts.map
1290
+ export { UserPluginWithLifeCycle as a, Schema as i, PluginTs as n, SchemaObject$1 as o, ReactGenerator as r, Options as t };
1291
+ //# sourceMappingURL=types-CnQREd_1.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/plugin-ts",
3
- "version": "4.13.1",
3
+ "version": "4.14.1",
4
4
  "description": "TypeScript code generation plugin for Kubb, transforming OpenAPI schemas into TypeScript interfaces, types, and utility functions.",
5
5
  "keywords": [
6
6
  "typescript",
@@ -69,9 +69,9 @@
69
69
  "natural-orderby": "^5.0.0",
70
70
  "remeda": "^2.33.1",
71
71
  "typescript": "5.9.3",
72
- "@kubb/core": "4.13.1",
73
- "@kubb/oas": "4.13.1",
74
- "@kubb/plugin-oas": "4.13.1"
72
+ "@kubb/core": "4.14.1",
73
+ "@kubb/oas": "4.14.1",
74
+ "@kubb/plugin-oas": "4.14.1"
75
75
  },
76
76
  "peerDependencies": {
77
77
  "@kubb/react-fabric": "0.9.2",