@kubb/swagger-ts 2.0.6 → 2.1.0

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.
@@ -324,14 +324,11 @@ var definePlugin = createPlugin((options) => {
324
324
  return;
325
325
  }
326
326
  const root = path.resolve(this.config.root, this.config.output.path);
327
- const { exportType = "barrel" } = output;
328
- if (exportType === "barrel") {
329
- await this.fileManager.addIndexes({
330
- root,
331
- output,
332
- meta: { pluginKey: this.plugin.key }
333
- });
334
- }
327
+ await this.fileManager.addIndexes({
328
+ root,
329
+ output,
330
+ meta: { pluginKey: this.plugin.key }
331
+ });
335
332
  }
336
333
  };
337
334
  });
@@ -754,4 +751,4 @@ Mutation.File = function({ mode }) {
754
751
 
755
752
  export { Mutation, Oas, Query, definePlugin, pluginKey, pluginName };
756
753
  //# sourceMappingURL=out.js.map
757
- //# sourceMappingURL=chunk-TCUL2H74.js.map
754
+ //# sourceMappingURL=chunk-3RJGLIUT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Mutation.tsx","../src/TypeBuilder.ts","../src/TypeGenerator.ts","../src/plugin.ts","../src/OperationGenerator.tsx","../src/components/Oas.tsx","../src/components/Query.tsx"],"names":["transformers","print","factory","File","usePlugin","usePluginManager","useOas","useOperation","useOperationFile","useOperationName","useSchemas","Generator","keywordTypeNodes","Template","pluginKey","Fragment","jsx","jsxs","options","node","path","printCombinedSchema"],"mappings":"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","sourcesContent":["import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\nimport { File, usePlugin, usePluginManager } from '@kubb/react'\nimport { useOas, useOperation, useOperationFile, useOperationName, useSchemas } from '@kubb/swagger/hooks'\n\nimport { TypeBuilder } from '../TypeBuilder.ts'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\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 builder: TypeBuilder\n}\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.createNamespaceDeclaration({\n name: operation.method === 'get' ? `${name}Query` : `${name}Mutation`,\n statements: Object.keys(properties).map(key => {\n const type = properties[key]\n if (!type) {\n return undefined\n }\n return factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: transformers.pascalCase(key),\n type,\n })\n }).filter(Boolean),\n })\n\n return print(namespaceNode)\n}\n\nexport function Mutation({\n builder,\n}: Props): ReactNode {\n const { source } = builder.build()\n\n return (\n <>\n {source}\n </>\n )\n}\n\ntype FileProps = {\n mode: KubbFile.Mode\n}\n\nMutation.File = function({ mode }: FileProps): ReactNode {\n const { options } = usePlugin<PluginOptions>()\n\n const schemas = useSchemas()\n const pluginManager = usePluginManager()\n const oas = useOas()\n const file = useOperationFile()\n const factoryName = useOperationName({ type: 'type' })\n const operation = useOperation()\n\n const builder = new TypeBuilder(options, { oas, pluginManager })\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.headerParams)\n .add(schemas.response)\n .add(schemas.request)\n .add(schemas.errors)\n\n const { source, imports } = builder.build()\n\n return (\n <>\n <File<FileMeta>\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n >\n {mode === 'directory' && imports.map((item, index) => {\n return <File.Import key={index} root={file.path} {...item} />\n })}\n <File.Source>\n {source}\n {printCombinedSchema(factoryName, operation, schemas)}\n </File.Source>\n </File>\n </>\n )\n}\n","import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport { OasBuilder } from '@kubb/swagger'\nimport { refsSorter } from '@kubb/swagger/utils'\n\nimport { TypeGenerator } from './TypeGenerator.ts'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ImportMeta } from '@kubb/swagger'\nimport type { PluginOptions } from './types.ts'\n\nexport class TypeBuilder extends OasBuilder<PluginOptions['resolvedOptions']> {\n build(name?: string): Required<Pick<KubbFile.File, 'imports' | 'source'>> {\n const importMeta: ImportMeta[] = []\n const codes: string[] = []\n\n const generated = this.items\n .filter((operationSchema) => (name ? operationSchema.name === name : true))\n .sort(transformers.nameSorter)\n .map((operationSchema) => {\n const generator = new TypeGenerator(this.options, this.context)\n const sources = generator.build({\n schema: operationSchema.schema,\n baseName: operationSchema.name,\n description: operationSchema.description,\n keysToOmit: operationSchema.keysToOmit,\n })\n\n importMeta.push(...generator.imports)\n\n return {\n import: {\n refs: generator.refs,\n name: operationSchema.name,\n },\n sources,\n }\n })\n .sort(refsSorter)\n\n generated.forEach((item) => {\n codes.push(print(item.sources))\n })\n\n const imports: KubbFile.Import[] = importMeta.map((item) => {\n return {\n name: [item.ref.propertyName],\n path: item.path,\n isTypeOnly: item.isTypeOnly,\n }\n })\n\n return {\n imports,\n source: transformers.combineCodes(codes),\n }\n }\n}\n","import { Generator } from '@kubb/core'\nimport transformers from '@kubb/core/transformers'\nimport { getUniqueName } from '@kubb/core/utils'\nimport * as factory from '@kubb/parser/factory'\nimport { keywordTypeNodes } from '@kubb/parser/factory'\nimport { getSchemaFactory, isReference } from '@kubb/swagger/utils'\n\nimport { pluginKey } from './plugin.ts'\n\nimport type { PluginManager } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\nimport type { ImportMeta, Refs } from '@kubb/swagger'\nimport type { Oas, OasTypes, OpenAPIV3, OpenAPIV3_1 } from '@kubb/swagger/oas'\nimport type { PluginOptions } from './types.ts'\n\n// based on https://github.com/cellular/oazapfts/blob/7ba226ebb15374e8483cc53e7532f1663179a22c/src/codegen/generate.ts#L398\n\ntype Context = {\n oas: Oas\n pluginManager: PluginManager\n}\n\nexport class TypeGenerator extends Generator<PluginOptions['resolvedOptions'], Context> {\n refs: Refs = {}\n imports: ImportMeta[] = []\n\n extraNodes: ts.Node[] = []\n\n aliases: ts.TypeAliasDeclaration[] = []\n\n // Keep track of already used type aliases\n #usedAliasNames: Record<string, number> = {}\n\n build({\n schema,\n baseName,\n description,\n keysToOmit,\n }: {\n schema: OasTypes.SchemaObject\n baseName: string\n description?: string\n keysToOmit?: string[]\n }): ts.Node[] {\n const nodes: ts.Node[] = []\n const type = this.getTypeFromSchema(schema, baseName)\n\n if (!type) {\n return this.extraNodes\n }\n\n const node = factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: this.context.pluginManager.resolveName({ name: baseName, pluginKey, type: 'type' }),\n type: keysToOmit?.length ? factory.createOmitDeclaration({ keys: keysToOmit, type, nonNullable: true }) : type,\n })\n\n if (description) {\n nodes.push(\n factory.appendJSDocToNode({\n node,\n comments: [`@description ${transformers.trim(description)}`],\n }),\n )\n } else {\n nodes.push(node)\n }\n\n // filter out if the export name is the same as one that we already defined in extraNodes(see enum)\n const filterdNodes = nodes.filter(\n (node: ts.Node) =>\n !this.extraNodes.some(\n (extraNode: ts.Node) => (extraNode as ts.TypeAliasDeclaration)?.name?.escapedText === (node as ts.TypeAliasDeclaration)?.name?.escapedText,\n ),\n )\n\n return [...this.extraNodes, ...filterdNodes]\n }\n\n /**\n * Creates a type node from a given schema.\n * Delegates to getBaseTypeFromSchema internally and\n * optionally adds a union with null.\n */\n getTypeFromSchema(schema?: OasTypes.SchemaObject, name?: string): ts.TypeNode | null {\n const type = this.#getBaseTypeFromSchema(schema, name)\n\n if (!type) {\n return null\n }\n\n if (schema && !schema.nullable) {\n return type\n }\n\n return factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.null] })\n }\n\n /**\n * Recursively creates a type literal with the given props.\n */\n #getTypeFromProperties(baseSchema?: OasTypes.SchemaObject, baseName?: string): ts.TypeNode | null {\n const { optionalType } = this.options\n const properties = baseSchema?.properties || {}\n const required = baseSchema?.required\n const additionalProperties = baseSchema?.additionalProperties\n\n const members: Array<ts.TypeElement | null> = Object.keys(properties).map((name) => {\n const schema = properties[name] as OasTypes.SchemaObject\n\n const isRequired = Array.isArray(required) ? required.includes(name) : !!required\n let type = this.getTypeFromSchema(schema, this.context.pluginManager.resolveName({ name: `${baseName || ''} ${name}`, pluginKey, type: 'type' }))\n\n if (!type) {\n return null\n }\n\n if (!isRequired && ['undefined', 'questionTokenAndUndefined'].includes(optionalType as string)) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] })\n }\n const propertySignature = factory.createPropertySignature({\n questionToken: ['questionToken', 'questionTokenAndUndefined'].includes(optionalType as string) && !isRequired,\n name,\n type: type as ts.TypeNode,\n readOnly: schema.readOnly,\n })\n\n return factory.appendJSDocToNode({\n node: propertySignature,\n comments: [\n schema.description ? `@description ${schema.description}` : undefined,\n schema.type ? `@type ${schema.type?.toString()}${isRequired ? '' : ' | undefined'} ${schema.format || ''}` : undefined,\n schema.example ? `@example ${schema.example as string}` : undefined,\n schema.deprecated ? `@deprecated` : undefined,\n schema.default !== undefined && typeof schema.default === 'string' ? `@default '${schema.default}'` : undefined,\n schema.default !== undefined && typeof schema.default !== 'string' ? `@default ${schema.default as string}` : undefined,\n ].filter(Boolean),\n })\n\n return propertySignature\n })\n if (additionalProperties) {\n const type = additionalProperties === true ? factory.keywordTypeNodes.any : this.getTypeFromSchema(additionalProperties as OasTypes.SchemaObject)\n\n if (type) {\n members.push(factory.createIndexSignature(type))\n }\n }\n return factory.createTypeLiteralNode(members.filter(Boolean))\n }\n\n /**\n * Create a type alias for the schema referenced by the given ReferenceObject\n */\n #getRefAlias(obj: OpenAPIV3.ReferenceObject, _baseName?: string) {\n const { $ref } = obj\n let ref = this.refs[$ref]\n\n if (ref) {\n return factory.createTypeReferenceNode(ref.propertyName, undefined)\n }\n\n const originalName = getUniqueName($ref.replace(/.+\\//, ''), this.#usedAliasNames)\n const propertyName = this.context.pluginManager.resolveName({ name: originalName, pluginKey, type: 'type' })\n\n ref = this.refs[$ref] = {\n propertyName,\n originalName,\n }\n\n const path = this.context.pluginManager.resolvePath({ baseName: propertyName, pluginKey })\n\n this.imports.push({\n ref,\n path: path || '',\n isTypeOnly: true,\n })\n\n return factory.createTypeReferenceNode(ref.propertyName, undefined)\n }\n\n #getParsedSchema(schema?: OasTypes.SchemaObject) {\n const parsedSchema = getSchemaFactory(this.context.oas)(schema)\n return parsedSchema\n }\n\n /**\n * This is the very core of the OpenAPI to TS conversion - it takes a\n * schema and returns the appropriate type.\n */\n #getBaseTypeFromSchema(\n _schema: OasTypes.SchemaObject | undefined,\n baseName?: string,\n ): ts.TypeNode | null {\n const { schema, version } = this.#getParsedSchema(_schema)\n\n if (!schema) {\n return factory.keywordTypeNodes.any\n }\n\n if (isReference(schema)) {\n return this.#getRefAlias(schema, baseName)\n }\n\n if (schema.oneOf) {\n // union\n const schemaWithoutOneOf = { ...schema, oneOf: undefined } as OasTypes.SchemaObject\n\n const union = factory.createUnionDeclaration({\n withParentheses: true,\n nodes: schema.oneOf\n .map((item) => {\n return item && this.getTypeFromSchema(item as OasTypes.SchemaObject)\n })\n .filter((item) => {\n return item && item !== factory.keywordTypeNodes.any\n }) as Array<ts.TypeNode>,\n })\n\n if (schemaWithoutOneOf.properties) {\n return factory.createIntersectionDeclaration({\n nodes: [this.getTypeFromSchema(schemaWithoutOneOf, baseName), union].filter(Boolean),\n })\n }\n\n return union\n }\n\n if (schema.anyOf) {\n const schemaWithoutAnyOf = { ...schema, anyOf: undefined } as OasTypes.SchemaObject\n\n const union = factory.createUnionDeclaration({\n withParentheses: true,\n nodes: schema.anyOf\n .map((item) => {\n return item && this.getTypeFromSchema(item as OasTypes.SchemaObject)\n })\n .filter((item) => {\n return item && item !== factory.keywordTypeNodes.any\n }) as Array<ts.TypeNode>,\n })\n\n if (schemaWithoutAnyOf.properties) {\n return factory.createIntersectionDeclaration({\n nodes: [this.getTypeFromSchema(schemaWithoutAnyOf, baseName), union].filter(Boolean),\n })\n }\n\n return union\n }\n if (schema.allOf) {\n // intersection/add\n const schemaWithoutAllOf = { ...schema, allOf: undefined } as OasTypes.SchemaObject\n\n const and = factory.createIntersectionDeclaration({\n withParentheses: true,\n nodes: schema.allOf\n .map((item) => {\n return item && this.getTypeFromSchema(item as OasTypes.SchemaObject)\n })\n .filter((item) => {\n return item && item !== factory.keywordTypeNodes.any\n }) as Array<ts.TypeNode>,\n })\n\n if (schemaWithoutAllOf.properties) {\n return factory.createIntersectionDeclaration({\n nodes: [this.getTypeFromSchema(schemaWithoutAllOf, baseName), and].filter(Boolean),\n })\n }\n\n return and\n }\n\n /**\n * Enum will be defined outside the baseType(hints the baseName check)\n */\n if (schema.enum && baseName) {\n const enumName = getUniqueName(baseName, this.options.usedEnumNames)\n\n let enums: [key: string, value: string | number][] = [...new Set(schema.enum)].map((key) => [key, key])\n\n if ('x-enumNames' in schema) {\n enums = [...new Set(schema['x-enumNames'] as string[])].map((key: string, index) => {\n return [key, schema.enum?.[index] as string]\n })\n }\n\n this.extraNodes.push(\n ...factory.createEnumDeclaration({\n name: transformers.camelCase(enumName),\n typeName: this.context.pluginManager.resolveName({ name: enumName, pluginKey, type: 'type' }),\n enums,\n type: this.options.enumType,\n }),\n )\n return factory.createTypeReferenceNode(this.context.pluginManager.resolveName({ name: enumName, pluginKey, type: 'type' }), undefined)\n }\n\n if (schema.enum) {\n return factory.createUnionDeclaration({\n nodes: schema.enum.map((name) => {\n return factory.createLiteralTypeNode(typeof name === 'number' ? factory.createNumericLiteral(name) : factory.createStringLiteral(`${name}`))\n }) as unknown as Array<ts.TypeNode>,\n })\n }\n\n if ('items' in schema) {\n // items -> array\n const node = this.getTypeFromSchema(schema.items as OasTypes.SchemaObject, baseName)\n if (node) {\n return factory.createArrayTypeNode(node)\n }\n }\n\n /**\n * OpenAPI 3.1\n * @link https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation\n */\n\n if ('prefixItems' in schema) {\n const prefixItems = schema.prefixItems as OasTypes.SchemaObject[]\n\n return factory.createTupleDeclaration({\n nodes: prefixItems.map((item) => {\n // no baseType so we can fall back on an union when using enum\n return this.getTypeFromSchema(item, undefined)\n }) as Array<ts.TypeNode>,\n })\n }\n\n if (schema.properties || schema.additionalProperties) {\n // properties -> literal type\n return this.#getTypeFromProperties(schema, baseName)\n }\n\n /**\n * validate \"const\" property as defined in JSON-Schema-Validation\n *\n * https://json-schema.org/draft/2020-12/json-schema-validation#name-const\n *\n * > 6.1.3. const\n * > The value of this keyword MAY be of any type, including null.\n * > Use of this keyword is functionally equivalent to an \"enum\" (Section 6.1.2) with a single value.\n * > An instance validates successfully against this keyword if its value is equal to the value of the keyword.\n */\n if (version === '3.1' && 'const' in schema) {\n // const keyword takes precendence over the actual type.\n if (schema['const']) {\n if (typeof schema['const'] === 'string') {\n return factory.createLiteralTypeNode(factory.createStringLiteral(schema['const']))\n } else if (typeof schema['const'] === 'number') {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(schema['const']))\n }\n } else {\n return keywordTypeNodes.null\n }\n }\n\n if (schema.type) {\n if (Array.isArray(schema.type)) {\n // TODO remove hardcoded first type, second nullable\n // OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n const [type, nullable] = schema.type as Array<OpenAPIV3_1.NonArraySchemaObjectType>\n\n return factory.createUnionDeclaration({\n nodes: [\n this.getTypeFromSchema(\n {\n ...schema,\n type,\n },\n baseName,\n ),\n nullable ? factory.createLiteralTypeNode(factory.createNull()) : undefined,\n ].filter(Boolean),\n })\n }\n\n if (this.options.dateType === 'date' && ['date', 'date-time'].some((item) => item === schema.format)) {\n return factory.createTypeReferenceNode(factory.createIdentifier('Date'))\n }\n\n // string, boolean, null, number\n if (schema.type in factory.keywordTypeNodes) {\n return factory.keywordTypeNodes[schema.type as keyof typeof factory.keywordTypeNodes]\n }\n }\n\n if (schema.format === 'binary') {\n return factory.createTypeReferenceNode('Blob', [])\n }\n\n return factory.keywordTypeNodes.any\n }\n}\n","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 { TypeBuilder } from './TypeBuilder.ts'\n\nimport type { KubbFile, KubbPlugin } from '@kubb/core'\nimport type { PluginOptions as SwaggerPluginOptions } from '@kubb/swagger'\nimport type { OasTypes } from '@kubb/swagger/oas'\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 dateType = 'string',\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 enumType,\n optionalType,\n oasType,\n // keep the used enumnames between TypeBuilder and OperationGenerator per plugin(pluginKey)\n usedEnumNames: {},\n },\n pre: [swaggerPluginName],\n resolvePath(baseName, directory, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = 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)\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]: [KubbPlugin<SwaggerPluginOptions>] = PluginManager.getDependedPlugins<SwaggerPluginOptions>(this.plugins, [swaggerPluginName])\n\n const oas = await swaggerPlugin.api.getOas()\n\n const schemas = await swaggerPlugin.api.getSchemas()\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = FileManager.getMode(path.resolve(root, output.path))\n const builder = new TypeBuilder(this.plugin.options, { oas, pluginManager: this.pluginManager })\n\n builder.add(\n Object.entries(schemas).map(([name, schema]: [string, OasTypes.SchemaObject]) => ({ name, schema })),\n )\n\n if (mode === 'directory') {\n const mapFolderSchema = async ([name]: [string, OasTypes.SchemaObject]) => {\n const baseName = `${this.resolveName({ name, pluginKey: this.plugin.key, type: 'file' })}.ts` as const\n const resolvedPath = this.resolvePath({ baseName, pluginKey: this.plugin.key })\n const { source, imports } = builder.build(name)\n\n if (!resolvedPath) {\n return null\n }\n\n return this.addFile({\n path: resolvedPath,\n baseName,\n source,\n imports: imports.map(item => ({ ...item, root: resolvedPath })),\n meta: {\n pluginKey: this.plugin.key,\n },\n })\n }\n\n const promises = Object.entries(schemas).map(mapFolderSchema)\n\n await Promise.all(promises)\n }\n\n if (mode === 'file') {\n const resolvedPath = this.resolvePath({ baseName: '', pluginKey: this.plugin.key })\n const { source } = builder.build()\n\n if (!resolvedPath) {\n return\n }\n\n await this.addFile({\n path: resolvedPath,\n baseName: output.path as KubbFile.BaseName,\n source,\n imports: [],\n meta: {\n pluginKey: this.plugin.key,\n },\n })\n }\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 files = await operationGenerator.build()\n await this.addFile(...files)\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'\n\nimport { Mutation } from './components/Mutation.tsx'\nimport { Oas } from './components/Oas.tsx'\nimport { Query } from './components/Query.tsx'\n\nimport type { AppContextProps } from '@kubb/react'\nimport type { OperationMethodResult, OperationSchemas } 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(): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin } = this.context\n\n if (!plugin.options.oasType) {\n return null\n }\n\n const root = createRoot<AppContextProps>({ logger: pluginManager.logger })\n root.render(\n <Oas.File name=\"oas\" typeName=\"Oas\" />,\n { meta: { oas, pluginManager, plugin } },\n )\n\n return root.files\n }\n\n async get(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin, mode = 'directory' } = this.context\n\n const root = createRoot<AppContextProps<PluginOptions['appMeta']>>({ logger: pluginManager.logger })\n root.render(\n <Query.File mode={mode} />,\n { meta: { oas, pluginManager, plugin: { ...plugin, options }, schemas, operation } },\n )\n\n return root.files\n }\n\n async post(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin, mode = 'directory' } = this.context\n\n const root = createRoot<AppContextProps<PluginOptions['appMeta']>>({ logger: pluginManager.logger })\n root.render(\n <Mutation.File mode={mode} />,\n { meta: { oas, pluginManager, plugin: { ...plugin, options }, schemas, operation } },\n )\n\n return root.files\n }\n\n async put(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n return this.post(operation, schemas, options)\n }\n async patch(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n return this.post(operation, schemas, options)\n }\n async delete(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n return this.post(operation, schemas, options)\n }\n}\n","import { File, Type, usePlugin } from '@kubb/react'\nimport { useFile } 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 Oas({\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\nOas.File = function({ name, typeName, templates = defaultTemplates }: FileProps): ReactNode {\n const { key: pluginKey } = usePlugin<PluginOptions>()\n const file = useFile({ name, pluginKey })\n\n const Template = templates.default\n\n return (\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 <Oas Template={Template} name={name} typeName={typeName} />\n </File.Source>\n </File>\n )\n}\n\nOas.templates = defaultTemplates\n","import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\nimport { File, usePlugin, usePluginManager } from '@kubb/react'\nimport { useOas, useOperation, useOperationFile, useOperationName, useSchemas } from '@kubb/swagger/hooks'\n\nimport { TypeBuilder } from '../TypeBuilder.ts'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\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 builder: TypeBuilder\n}\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.createNamespaceDeclaration({\n name: operation.method === 'get' ? `${name}Query` : `${name}Mutation`,\n statements: Object.keys(properties).map(key => {\n const type = properties[key]\n if (!type) {\n return undefined\n }\n return factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: transformers.pascalCase(key),\n type,\n })\n }).filter(Boolean),\n })\n\n return print(namespaceNode)\n}\n\nexport function Query({\n builder,\n}: Props): ReactNode {\n const { source } = builder.build()\n\n return (\n <>\n {source}\n </>\n )\n}\n\ntype FileProps = {\n mode: KubbFile.Mode\n}\n\nQuery.File = function({ mode }: FileProps): ReactNode {\n const { options } = usePlugin<PluginOptions>()\n\n const schemas = useSchemas()\n const pluginManager = usePluginManager()\n const oas = useOas()\n const file = useOperationFile()\n const factoryName = useOperationName({ type: 'type' })\n const operation = useOperation()\n\n const builder = new TypeBuilder(options, { oas, pluginManager })\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.headerParams)\n .add(schemas.response)\n .add(schemas.errors)\n\n const { source, imports } = builder.build()\n\n return (\n <>\n <File<FileMeta>\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n >\n {mode === 'directory' && imports.map((item, index) => {\n return <File.Import key={index} root={file.path} {...item} />\n })}\n <File.Source>\n {source}\n {printCombinedSchema(factoryName, operation, schemas)}\n </File.Source>\n </File>\n </>\n )\n}\n"]}
@@ -346,14 +346,11 @@ var definePlugin = core.createPlugin((options) => {
346
346
  return;
347
347
  }
348
348
  const root = path__default.default.resolve(this.config.root, this.config.output.path);
349
- const { exportType = "barrel" } = output;
350
- if (exportType === "barrel") {
351
- await this.fileManager.addIndexes({
352
- root,
353
- output,
354
- meta: { pluginKey: this.plugin.key }
355
- });
356
- }
349
+ await this.fileManager.addIndexes({
350
+ root,
351
+ output,
352
+ meta: { pluginKey: this.plugin.key }
353
+ });
357
354
  }
358
355
  };
359
356
  });
@@ -781,4 +778,4 @@ exports.definePlugin = definePlugin;
781
778
  exports.pluginKey = pluginKey;
782
779
  exports.pluginName = pluginName;
783
780
  //# sourceMappingURL=out.js.map
784
- //# sourceMappingURL=chunk-N6FDP2EJ.cjs.map
781
+ //# sourceMappingURL=chunk-EVBQDEHI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Mutation.tsx","../src/TypeBuilder.ts","../src/TypeGenerator.ts","../src/plugin.ts","../src/OperationGenerator.tsx","../src/components/Oas.tsx","../src/components/Query.tsx"],"names":["transformers","print","factory","File","usePlugin","usePluginManager","useOas","useOperation","useOperationFile","useOperationName","useSchemas","Generator","keywordTypeNodes","Template","pluginKey","Fragment","jsx","jsxs","options","node","path","printCombinedSchema"],"mappings":"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","sourcesContent":["import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\nimport { File, usePlugin, usePluginManager } from '@kubb/react'\nimport { useOas, useOperation, useOperationFile, useOperationName, useSchemas } from '@kubb/swagger/hooks'\n\nimport { TypeBuilder } from '../TypeBuilder.ts'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\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 builder: TypeBuilder\n}\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.createNamespaceDeclaration({\n name: operation.method === 'get' ? `${name}Query` : `${name}Mutation`,\n statements: Object.keys(properties).map(key => {\n const type = properties[key]\n if (!type) {\n return undefined\n }\n return factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: transformers.pascalCase(key),\n type,\n })\n }).filter(Boolean),\n })\n\n return print(namespaceNode)\n}\n\nexport function Mutation({\n builder,\n}: Props): ReactNode {\n const { source } = builder.build()\n\n return (\n <>\n {source}\n </>\n )\n}\n\ntype FileProps = {\n mode: KubbFile.Mode\n}\n\nMutation.File = function({ mode }: FileProps): ReactNode {\n const { options } = usePlugin<PluginOptions>()\n\n const schemas = useSchemas()\n const pluginManager = usePluginManager()\n const oas = useOas()\n const file = useOperationFile()\n const factoryName = useOperationName({ type: 'type' })\n const operation = useOperation()\n\n const builder = new TypeBuilder(options, { oas, pluginManager })\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.headerParams)\n .add(schemas.response)\n .add(schemas.request)\n .add(schemas.errors)\n\n const { source, imports } = builder.build()\n\n return (\n <>\n <File<FileMeta>\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n >\n {mode === 'directory' && imports.map((item, index) => {\n return <File.Import key={index} root={file.path} {...item} />\n })}\n <File.Source>\n {source}\n {printCombinedSchema(factoryName, operation, schemas)}\n </File.Source>\n </File>\n </>\n )\n}\n","import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport { OasBuilder } from '@kubb/swagger'\nimport { refsSorter } from '@kubb/swagger/utils'\n\nimport { TypeGenerator } from './TypeGenerator.ts'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ImportMeta } from '@kubb/swagger'\nimport type { PluginOptions } from './types.ts'\n\nexport class TypeBuilder extends OasBuilder<PluginOptions['resolvedOptions']> {\n build(name?: string): Required<Pick<KubbFile.File, 'imports' | 'source'>> {\n const importMeta: ImportMeta[] = []\n const codes: string[] = []\n\n const generated = this.items\n .filter((operationSchema) => (name ? operationSchema.name === name : true))\n .sort(transformers.nameSorter)\n .map((operationSchema) => {\n const generator = new TypeGenerator(this.options, this.context)\n const sources = generator.build({\n schema: operationSchema.schema,\n baseName: operationSchema.name,\n description: operationSchema.description,\n keysToOmit: operationSchema.keysToOmit,\n })\n\n importMeta.push(...generator.imports)\n\n return {\n import: {\n refs: generator.refs,\n name: operationSchema.name,\n },\n sources,\n }\n })\n .sort(refsSorter)\n\n generated.forEach((item) => {\n codes.push(print(item.sources))\n })\n\n const imports: KubbFile.Import[] = importMeta.map((item) => {\n return {\n name: [item.ref.propertyName],\n path: item.path,\n isTypeOnly: item.isTypeOnly,\n }\n })\n\n return {\n imports,\n source: transformers.combineCodes(codes),\n }\n }\n}\n","import { Generator } from '@kubb/core'\nimport transformers from '@kubb/core/transformers'\nimport { getUniqueName } from '@kubb/core/utils'\nimport * as factory from '@kubb/parser/factory'\nimport { keywordTypeNodes } from '@kubb/parser/factory'\nimport { getSchemaFactory, isReference } from '@kubb/swagger/utils'\n\nimport { pluginKey } from './plugin.ts'\n\nimport type { PluginManager } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\nimport type { ImportMeta, Refs } from '@kubb/swagger'\nimport type { Oas, OasTypes, OpenAPIV3, OpenAPIV3_1 } from '@kubb/swagger/oas'\nimport type { PluginOptions } from './types.ts'\n\n// based on https://github.com/cellular/oazapfts/blob/7ba226ebb15374e8483cc53e7532f1663179a22c/src/codegen/generate.ts#L398\n\ntype Context = {\n oas: Oas\n pluginManager: PluginManager\n}\n\nexport class TypeGenerator extends Generator<PluginOptions['resolvedOptions'], Context> {\n refs: Refs = {}\n imports: ImportMeta[] = []\n\n extraNodes: ts.Node[] = []\n\n aliases: ts.TypeAliasDeclaration[] = []\n\n // Keep track of already used type aliases\n #usedAliasNames: Record<string, number> = {}\n\n build({\n schema,\n baseName,\n description,\n keysToOmit,\n }: {\n schema: OasTypes.SchemaObject\n baseName: string\n description?: string\n keysToOmit?: string[]\n }): ts.Node[] {\n const nodes: ts.Node[] = []\n const type = this.getTypeFromSchema(schema, baseName)\n\n if (!type) {\n return this.extraNodes\n }\n\n const node = factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: this.context.pluginManager.resolveName({ name: baseName, pluginKey, type: 'type' }),\n type: keysToOmit?.length ? factory.createOmitDeclaration({ keys: keysToOmit, type, nonNullable: true }) : type,\n })\n\n if (description) {\n nodes.push(\n factory.appendJSDocToNode({\n node,\n comments: [`@description ${transformers.trim(description)}`],\n }),\n )\n } else {\n nodes.push(node)\n }\n\n // filter out if the export name is the same as one that we already defined in extraNodes(see enum)\n const filterdNodes = nodes.filter(\n (node: ts.Node) =>\n !this.extraNodes.some(\n (extraNode: ts.Node) => (extraNode as ts.TypeAliasDeclaration)?.name?.escapedText === (node as ts.TypeAliasDeclaration)?.name?.escapedText,\n ),\n )\n\n return [...this.extraNodes, ...filterdNodes]\n }\n\n /**\n * Creates a type node from a given schema.\n * Delegates to getBaseTypeFromSchema internally and\n * optionally adds a union with null.\n */\n getTypeFromSchema(schema?: OasTypes.SchemaObject, name?: string): ts.TypeNode | null {\n const type = this.#getBaseTypeFromSchema(schema, name)\n\n if (!type) {\n return null\n }\n\n if (schema && !schema.nullable) {\n return type\n }\n\n return factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.null] })\n }\n\n /**\n * Recursively creates a type literal with the given props.\n */\n #getTypeFromProperties(baseSchema?: OasTypes.SchemaObject, baseName?: string): ts.TypeNode | null {\n const { optionalType } = this.options\n const properties = baseSchema?.properties || {}\n const required = baseSchema?.required\n const additionalProperties = baseSchema?.additionalProperties\n\n const members: Array<ts.TypeElement | null> = Object.keys(properties).map((name) => {\n const schema = properties[name] as OasTypes.SchemaObject\n\n const isRequired = Array.isArray(required) ? required.includes(name) : !!required\n let type = this.getTypeFromSchema(schema, this.context.pluginManager.resolveName({ name: `${baseName || ''} ${name}`, pluginKey, type: 'type' }))\n\n if (!type) {\n return null\n }\n\n if (!isRequired && ['undefined', 'questionTokenAndUndefined'].includes(optionalType as string)) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] })\n }\n const propertySignature = factory.createPropertySignature({\n questionToken: ['questionToken', 'questionTokenAndUndefined'].includes(optionalType as string) && !isRequired,\n name,\n type: type as ts.TypeNode,\n readOnly: schema.readOnly,\n })\n\n return factory.appendJSDocToNode({\n node: propertySignature,\n comments: [\n schema.description ? `@description ${schema.description}` : undefined,\n schema.type ? `@type ${schema.type?.toString()}${isRequired ? '' : ' | undefined'} ${schema.format || ''}` : undefined,\n schema.example ? `@example ${schema.example as string}` : undefined,\n schema.deprecated ? `@deprecated` : undefined,\n schema.default !== undefined && typeof schema.default === 'string' ? `@default '${schema.default}'` : undefined,\n schema.default !== undefined && typeof schema.default !== 'string' ? `@default ${schema.default as string}` : undefined,\n ].filter(Boolean),\n })\n\n return propertySignature\n })\n if (additionalProperties) {\n const type = additionalProperties === true ? factory.keywordTypeNodes.any : this.getTypeFromSchema(additionalProperties as OasTypes.SchemaObject)\n\n if (type) {\n members.push(factory.createIndexSignature(type))\n }\n }\n return factory.createTypeLiteralNode(members.filter(Boolean))\n }\n\n /**\n * Create a type alias for the schema referenced by the given ReferenceObject\n */\n #getRefAlias(obj: OpenAPIV3.ReferenceObject, _baseName?: string) {\n const { $ref } = obj\n let ref = this.refs[$ref]\n\n if (ref) {\n return factory.createTypeReferenceNode(ref.propertyName, undefined)\n }\n\n const originalName = getUniqueName($ref.replace(/.+\\//, ''), this.#usedAliasNames)\n const propertyName = this.context.pluginManager.resolveName({ name: originalName, pluginKey, type: 'type' })\n\n ref = this.refs[$ref] = {\n propertyName,\n originalName,\n }\n\n const path = this.context.pluginManager.resolvePath({ baseName: propertyName, pluginKey })\n\n this.imports.push({\n ref,\n path: path || '',\n isTypeOnly: true,\n })\n\n return factory.createTypeReferenceNode(ref.propertyName, undefined)\n }\n\n #getParsedSchema(schema?: OasTypes.SchemaObject) {\n const parsedSchema = getSchemaFactory(this.context.oas)(schema)\n return parsedSchema\n }\n\n /**\n * This is the very core of the OpenAPI to TS conversion - it takes a\n * schema and returns the appropriate type.\n */\n #getBaseTypeFromSchema(\n _schema: OasTypes.SchemaObject | undefined,\n baseName?: string,\n ): ts.TypeNode | null {\n const { schema, version } = this.#getParsedSchema(_schema)\n\n if (!schema) {\n return factory.keywordTypeNodes.any\n }\n\n if (isReference(schema)) {\n return this.#getRefAlias(schema, baseName)\n }\n\n if (schema.oneOf) {\n // union\n const schemaWithoutOneOf = { ...schema, oneOf: undefined } as OasTypes.SchemaObject\n\n const union = factory.createUnionDeclaration({\n withParentheses: true,\n nodes: schema.oneOf\n .map((item) => {\n return item && this.getTypeFromSchema(item as OasTypes.SchemaObject)\n })\n .filter((item) => {\n return item && item !== factory.keywordTypeNodes.any\n }) as Array<ts.TypeNode>,\n })\n\n if (schemaWithoutOneOf.properties) {\n return factory.createIntersectionDeclaration({\n nodes: [this.getTypeFromSchema(schemaWithoutOneOf, baseName), union].filter(Boolean),\n })\n }\n\n return union\n }\n\n if (schema.anyOf) {\n const schemaWithoutAnyOf = { ...schema, anyOf: undefined } as OasTypes.SchemaObject\n\n const union = factory.createUnionDeclaration({\n withParentheses: true,\n nodes: schema.anyOf\n .map((item) => {\n return item && this.getTypeFromSchema(item as OasTypes.SchemaObject)\n })\n .filter((item) => {\n return item && item !== factory.keywordTypeNodes.any\n }) as Array<ts.TypeNode>,\n })\n\n if (schemaWithoutAnyOf.properties) {\n return factory.createIntersectionDeclaration({\n nodes: [this.getTypeFromSchema(schemaWithoutAnyOf, baseName), union].filter(Boolean),\n })\n }\n\n return union\n }\n if (schema.allOf) {\n // intersection/add\n const schemaWithoutAllOf = { ...schema, allOf: undefined } as OasTypes.SchemaObject\n\n const and = factory.createIntersectionDeclaration({\n withParentheses: true,\n nodes: schema.allOf\n .map((item) => {\n return item && this.getTypeFromSchema(item as OasTypes.SchemaObject)\n })\n .filter((item) => {\n return item && item !== factory.keywordTypeNodes.any\n }) as Array<ts.TypeNode>,\n })\n\n if (schemaWithoutAllOf.properties) {\n return factory.createIntersectionDeclaration({\n nodes: [this.getTypeFromSchema(schemaWithoutAllOf, baseName), and].filter(Boolean),\n })\n }\n\n return and\n }\n\n /**\n * Enum will be defined outside the baseType(hints the baseName check)\n */\n if (schema.enum && baseName) {\n const enumName = getUniqueName(baseName, this.options.usedEnumNames)\n\n let enums: [key: string, value: string | number][] = [...new Set(schema.enum)].map((key) => [key, key])\n\n if ('x-enumNames' in schema) {\n enums = [...new Set(schema['x-enumNames'] as string[])].map((key: string, index) => {\n return [key, schema.enum?.[index] as string]\n })\n }\n\n this.extraNodes.push(\n ...factory.createEnumDeclaration({\n name: transformers.camelCase(enumName),\n typeName: this.context.pluginManager.resolveName({ name: enumName, pluginKey, type: 'type' }),\n enums,\n type: this.options.enumType,\n }),\n )\n return factory.createTypeReferenceNode(this.context.pluginManager.resolveName({ name: enumName, pluginKey, type: 'type' }), undefined)\n }\n\n if (schema.enum) {\n return factory.createUnionDeclaration({\n nodes: schema.enum.map((name) => {\n return factory.createLiteralTypeNode(typeof name === 'number' ? factory.createNumericLiteral(name) : factory.createStringLiteral(`${name}`))\n }) as unknown as Array<ts.TypeNode>,\n })\n }\n\n if ('items' in schema) {\n // items -> array\n const node = this.getTypeFromSchema(schema.items as OasTypes.SchemaObject, baseName)\n if (node) {\n return factory.createArrayTypeNode(node)\n }\n }\n\n /**\n * OpenAPI 3.1\n * @link https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation\n */\n\n if ('prefixItems' in schema) {\n const prefixItems = schema.prefixItems as OasTypes.SchemaObject[]\n\n return factory.createTupleDeclaration({\n nodes: prefixItems.map((item) => {\n // no baseType so we can fall back on an union when using enum\n return this.getTypeFromSchema(item, undefined)\n }) as Array<ts.TypeNode>,\n })\n }\n\n if (schema.properties || schema.additionalProperties) {\n // properties -> literal type\n return this.#getTypeFromProperties(schema, baseName)\n }\n\n /**\n * validate \"const\" property as defined in JSON-Schema-Validation\n *\n * https://json-schema.org/draft/2020-12/json-schema-validation#name-const\n *\n * > 6.1.3. const\n * > The value of this keyword MAY be of any type, including null.\n * > Use of this keyword is functionally equivalent to an \"enum\" (Section 6.1.2) with a single value.\n * > An instance validates successfully against this keyword if its value is equal to the value of the keyword.\n */\n if (version === '3.1' && 'const' in schema) {\n // const keyword takes precendence over the actual type.\n if (schema['const']) {\n if (typeof schema['const'] === 'string') {\n return factory.createLiteralTypeNode(factory.createStringLiteral(schema['const']))\n } else if (typeof schema['const'] === 'number') {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(schema['const']))\n }\n } else {\n return keywordTypeNodes.null\n }\n }\n\n if (schema.type) {\n if (Array.isArray(schema.type)) {\n // TODO remove hardcoded first type, second nullable\n // OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n const [type, nullable] = schema.type as Array<OpenAPIV3_1.NonArraySchemaObjectType>\n\n return factory.createUnionDeclaration({\n nodes: [\n this.getTypeFromSchema(\n {\n ...schema,\n type,\n },\n baseName,\n ),\n nullable ? factory.createLiteralTypeNode(factory.createNull()) : undefined,\n ].filter(Boolean),\n })\n }\n\n if (this.options.dateType === 'date' && ['date', 'date-time'].some((item) => item === schema.format)) {\n return factory.createTypeReferenceNode(factory.createIdentifier('Date'))\n }\n\n // string, boolean, null, number\n if (schema.type in factory.keywordTypeNodes) {\n return factory.keywordTypeNodes[schema.type as keyof typeof factory.keywordTypeNodes]\n }\n }\n\n if (schema.format === 'binary') {\n return factory.createTypeReferenceNode('Blob', [])\n }\n\n return factory.keywordTypeNodes.any\n }\n}\n","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 { TypeBuilder } from './TypeBuilder.ts'\n\nimport type { KubbFile, KubbPlugin } from '@kubb/core'\nimport type { PluginOptions as SwaggerPluginOptions } from '@kubb/swagger'\nimport type { OasTypes } from '@kubb/swagger/oas'\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 dateType = 'string',\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 enumType,\n optionalType,\n oasType,\n // keep the used enumnames between TypeBuilder and OperationGenerator per plugin(pluginKey)\n usedEnumNames: {},\n },\n pre: [swaggerPluginName],\n resolvePath(baseName, directory, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = 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)\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]: [KubbPlugin<SwaggerPluginOptions>] = PluginManager.getDependedPlugins<SwaggerPluginOptions>(this.plugins, [swaggerPluginName])\n\n const oas = await swaggerPlugin.api.getOas()\n\n const schemas = await swaggerPlugin.api.getSchemas()\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = FileManager.getMode(path.resolve(root, output.path))\n const builder = new TypeBuilder(this.plugin.options, { oas, pluginManager: this.pluginManager })\n\n builder.add(\n Object.entries(schemas).map(([name, schema]: [string, OasTypes.SchemaObject]) => ({ name, schema })),\n )\n\n if (mode === 'directory') {\n const mapFolderSchema = async ([name]: [string, OasTypes.SchemaObject]) => {\n const baseName = `${this.resolveName({ name, pluginKey: this.plugin.key, type: 'file' })}.ts` as const\n const resolvedPath = this.resolvePath({ baseName, pluginKey: this.plugin.key })\n const { source, imports } = builder.build(name)\n\n if (!resolvedPath) {\n return null\n }\n\n return this.addFile({\n path: resolvedPath,\n baseName,\n source,\n imports: imports.map(item => ({ ...item, root: resolvedPath })),\n meta: {\n pluginKey: this.plugin.key,\n },\n })\n }\n\n const promises = Object.entries(schemas).map(mapFolderSchema)\n\n await Promise.all(promises)\n }\n\n if (mode === 'file') {\n const resolvedPath = this.resolvePath({ baseName: '', pluginKey: this.plugin.key })\n const { source } = builder.build()\n\n if (!resolvedPath) {\n return\n }\n\n await this.addFile({\n path: resolvedPath,\n baseName: output.path as KubbFile.BaseName,\n source,\n imports: [],\n meta: {\n pluginKey: this.plugin.key,\n },\n })\n }\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 files = await operationGenerator.build()\n await this.addFile(...files)\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'\n\nimport { Mutation } from './components/Mutation.tsx'\nimport { Oas } from './components/Oas.tsx'\nimport { Query } from './components/Query.tsx'\n\nimport type { AppContextProps } from '@kubb/react'\nimport type { OperationMethodResult, OperationSchemas } 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(): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin } = this.context\n\n if (!plugin.options.oasType) {\n return null\n }\n\n const root = createRoot<AppContextProps>({ logger: pluginManager.logger })\n root.render(\n <Oas.File name=\"oas\" typeName=\"Oas\" />,\n { meta: { oas, pluginManager, plugin } },\n )\n\n return root.files\n }\n\n async get(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin, mode = 'directory' } = this.context\n\n const root = createRoot<AppContextProps<PluginOptions['appMeta']>>({ logger: pluginManager.logger })\n root.render(\n <Query.File mode={mode} />,\n { meta: { oas, pluginManager, plugin: { ...plugin, options }, schemas, operation } },\n )\n\n return root.files\n }\n\n async post(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin, mode = 'directory' } = this.context\n\n const root = createRoot<AppContextProps<PluginOptions['appMeta']>>({ logger: pluginManager.logger })\n root.render(\n <Mutation.File mode={mode} />,\n { meta: { oas, pluginManager, plugin: { ...plugin, options }, schemas, operation } },\n )\n\n return root.files\n }\n\n async put(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n return this.post(operation, schemas, options)\n }\n async patch(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n return this.post(operation, schemas, options)\n }\n async delete(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n return this.post(operation, schemas, options)\n }\n}\n","import { File, Type, usePlugin } from '@kubb/react'\nimport { useFile } 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 Oas({\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\nOas.File = function({ name, typeName, templates = defaultTemplates }: FileProps): ReactNode {\n const { key: pluginKey } = usePlugin<PluginOptions>()\n const file = useFile({ name, pluginKey })\n\n const Template = templates.default\n\n return (\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 <Oas Template={Template} name={name} typeName={typeName} />\n </File.Source>\n </File>\n )\n}\n\nOas.templates = defaultTemplates\n","import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\nimport { File, usePlugin, usePluginManager } from '@kubb/react'\nimport { useOas, useOperation, useOperationFile, useOperationName, useSchemas } from '@kubb/swagger/hooks'\n\nimport { TypeBuilder } from '../TypeBuilder.ts'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\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 builder: TypeBuilder\n}\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.createNamespaceDeclaration({\n name: operation.method === 'get' ? `${name}Query` : `${name}Mutation`,\n statements: Object.keys(properties).map(key => {\n const type = properties[key]\n if (!type) {\n return undefined\n }\n return factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: transformers.pascalCase(key),\n type,\n })\n }).filter(Boolean),\n })\n\n return print(namespaceNode)\n}\n\nexport function Query({\n builder,\n}: Props): ReactNode {\n const { source } = builder.build()\n\n return (\n <>\n {source}\n </>\n )\n}\n\ntype FileProps = {\n mode: KubbFile.Mode\n}\n\nQuery.File = function({ mode }: FileProps): ReactNode {\n const { options } = usePlugin<PluginOptions>()\n\n const schemas = useSchemas()\n const pluginManager = usePluginManager()\n const oas = useOas()\n const file = useOperationFile()\n const factoryName = useOperationName({ type: 'type' })\n const operation = useOperation()\n\n const builder = new TypeBuilder(options, { oas, pluginManager })\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.headerParams)\n .add(schemas.response)\n .add(schemas.errors)\n\n const { source, imports } = builder.build()\n\n return (\n <>\n <File<FileMeta>\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n >\n {mode === 'directory' && imports.map((item, index) => {\n return <File.Import key={index} root={file.path} {...item} />\n })}\n <File.Source>\n {source}\n {printCombinedSchema(factoryName, operation, schemas)}\n </File.Source>\n </File>\n </>\n )\n}\n"]}
@@ -1,20 +1,20 @@
1
1
  'use strict';
2
2
 
3
- var chunkN6FDP2EJ_cjs = require('./chunk-N6FDP2EJ.cjs');
3
+ var chunkEVBQDEHI_cjs = require('./chunk-EVBQDEHI.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "Mutation", {
8
8
  enumerable: true,
9
- get: function () { return chunkN6FDP2EJ_cjs.Mutation; }
9
+ get: function () { return chunkEVBQDEHI_cjs.Mutation; }
10
10
  });
11
11
  Object.defineProperty(exports, "Oas", {
12
12
  enumerable: true,
13
- get: function () { return chunkN6FDP2EJ_cjs.Oas; }
13
+ get: function () { return chunkEVBQDEHI_cjs.Oas; }
14
14
  });
15
15
  Object.defineProperty(exports, "Query", {
16
16
  enumerable: true,
17
- get: function () { return chunkN6FDP2EJ_cjs.Query; }
17
+ get: function () { return chunkEVBQDEHI_cjs.Query; }
18
18
  });
19
19
  //# sourceMappingURL=out.js.map
20
20
  //# sourceMappingURL=components.cjs.map
@@ -1,6 +1,6 @@
1
1
  import { OasBuilder } from '@kubb/swagger';
2
2
  import { KubbFile } from '@kubb/core';
3
- import { P as PluginOptions } from './types-v3wZ6qbm.cjs';
3
+ import { P as PluginOptions } from './types-O4pJGBUe.cjs';
4
4
  import { ReactNode } from 'react';
5
5
  import { OasTypes } from '@kubb/swagger/oas';
6
6
 
@@ -1,6 +1,6 @@
1
1
  import { OasBuilder } from '@kubb/swagger';
2
2
  import { KubbFile } from '@kubb/core';
3
- import { P as PluginOptions } from './types-v3wZ6qbm.js';
3
+ import { P as PluginOptions } from './types-O4pJGBUe.js';
4
4
  import { ReactNode } from 'react';
5
5
  import { OasTypes } from '@kubb/swagger/oas';
6
6
 
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module';
2
- export { Mutation, Oas, Query } from './chunk-TCUL2H74.js';
2
+ export { Mutation, Oas, Query } from './chunk-3RJGLIUT.js';
3
3
 
4
4
  createRequire(import.meta.url);
5
5
  //# sourceMappingURL=out.js.map
package/dist/index.cjs CHANGED
@@ -2,22 +2,22 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var chunkN6FDP2EJ_cjs = require('./chunk-N6FDP2EJ.cjs');
5
+ var chunkEVBQDEHI_cjs = require('./chunk-EVBQDEHI.cjs');
6
6
 
7
7
  // src/index.ts
8
- var src_default = chunkN6FDP2EJ_cjs.definePlugin;
8
+ var src_default = chunkEVBQDEHI_cjs.definePlugin;
9
9
 
10
10
  Object.defineProperty(exports, "definePlugin", {
11
11
  enumerable: true,
12
- get: function () { return chunkN6FDP2EJ_cjs.definePlugin; }
12
+ get: function () { return chunkEVBQDEHI_cjs.definePlugin; }
13
13
  });
14
14
  Object.defineProperty(exports, "pluginKey", {
15
15
  enumerable: true,
16
- get: function () { return chunkN6FDP2EJ_cjs.pluginKey; }
16
+ get: function () { return chunkEVBQDEHI_cjs.pluginKey; }
17
17
  });
18
18
  Object.defineProperty(exports, "pluginName", {
19
19
  enumerable: true,
20
- get: function () { return chunkN6FDP2EJ_cjs.pluginName; }
20
+ get: function () { return chunkEVBQDEHI_cjs.pluginName; }
21
21
  });
22
22
  exports.default = src_default;
23
23
  //# sourceMappingURL=out.js.map
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as _kubb_core from '@kubb/core';
2
- import { P as PluginOptions, O as Options } from './types-v3wZ6qbm.cjs';
3
- export { F as FileMeta } from './types-v3wZ6qbm.cjs';
2
+ import { P as PluginOptions, O as Options } from './types-O4pJGBUe.cjs';
3
+ export { F as FileMeta } from './types-O4pJGBUe.cjs';
4
4
  export { i as Oas } from './index-sycg8owy.cjs';
5
5
  import '@kubb/swagger';
6
6
  import 'hotscript';
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as _kubb_core from '@kubb/core';
2
- import { P as PluginOptions, O as Options } from './types-v3wZ6qbm.js';
3
- export { F as FileMeta } from './types-v3wZ6qbm.js';
2
+ import { P as PluginOptions, O as Options } from './types-O4pJGBUe.js';
3
+ export { F as FileMeta } from './types-O4pJGBUe.js';
4
4
  export { i as Oas } from './index-sycg8owy.js';
5
5
  import '@kubb/swagger';
6
6
  import 'hotscript';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { createRequire } from 'module';
2
- import { definePlugin } from './chunk-TCUL2H74.js';
3
- export { definePlugin, pluginKey, pluginName } from './chunk-TCUL2H74.js';
2
+ import { definePlugin } from './chunk-3RJGLIUT.js';
3
+ export { definePlugin, pluginKey, pluginName } from './chunk-3RJGLIUT.js';
4
4
 
5
5
  createRequire(import.meta.url);
6
6
 
@@ -21,7 +21,7 @@ type Options = {
21
21
  * Define what needs to exported, here you can also disable the export of barrel files
22
22
  * @default `'barrel'`
23
23
  */
24
- exportType?: 'barrel' | false;
24
+ exportType?: 'barrel' | 'barrelNamed' | false;
25
25
  };
26
26
  /**
27
27
  * Group the TypeScript types based on the provided name.
@@ -21,7 +21,7 @@ type Options = {
21
21
  * Define what needs to exported, here you can also disable the export of barrel files
22
22
  * @default `'barrel'`
23
23
  */
24
- exportType?: 'barrel' | false;
24
+ exportType?: 'barrel' | 'barrelNamed' | false;
25
25
  };
26
26
  /**
27
27
  * Group the TypeScript types based on the provided name.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/swagger-ts",
3
- "version": "2.0.6",
3
+ "version": "2.1.0",
4
4
  "description": "Generator swagger-ts",
5
5
  "keywords": [
6
6
  "typescript",
@@ -47,17 +47,17 @@
47
47
  ],
48
48
  "dependencies": {
49
49
  "hotscript": "^1.0.13",
50
- "json-schema-to-ts": "^2.9.2",
50
+ "json-schema-to-ts": "^2.12.0",
51
51
  "ts-toolbelt": "^9.6.0",
52
- "@kubb/core": "2.0.6",
53
- "@kubb/parser": "2.0.6",
54
- "@kubb/react": "2.0.6",
55
- "@kubb/swagger": "2.0.6",
56
- "@kubb/types": "2.0.6"
52
+ "@kubb/parser": "2.1.0",
53
+ "@kubb/core": "2.1.0",
54
+ "@kubb/swagger": "2.1.0",
55
+ "@kubb/types": "2.1.0",
56
+ "@kubb/react": "2.1.0"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@types/react": "^18.2.45",
60
- "eslint": "^8.55.0",
60
+ "eslint": "^8.56.0",
61
61
  "expect-type": "^0.17.3",
62
62
  "react": "^18.2.0",
63
63
  "tsup": "^8.0.1",
@@ -66,7 +66,7 @@
66
66
  "@kubb/tsup-config": "1.1.8"
67
67
  },
68
68
  "peerDependencies": {
69
- "@kubb/react": "2.0.6"
69
+ "@kubb/react": "2.1.0"
70
70
  },
71
71
  "packageManager": "pnpm@8.3.0",
72
72
  "engines": {
package/src/plugin.ts CHANGED
@@ -160,15 +160,12 @@ export const definePlugin = createPlugin<PluginOptions>((options) => {
160
160
  }
161
161
 
162
162
  const root = path.resolve(this.config.root, this.config.output.path)
163
- const { exportType = 'barrel' } = output
164
163
 
165
- if (exportType === 'barrel') {
166
- await this.fileManager.addIndexes({
167
- root,
168
- output,
169
- meta: { pluginKey: this.plugin.key },
170
- })
171
- }
164
+ await this.fileManager.addIndexes({
165
+ root,
166
+ output,
167
+ meta: { pluginKey: this.plugin.key },
168
+ })
172
169
  },
173
170
  }
174
171
  })
package/src/types.ts CHANGED
@@ -21,7 +21,7 @@ export type Options = {
21
21
  * Define what needs to exported, here you can also disable the export of barrel files
22
22
  * @default `'barrel'`
23
23
  */
24
- exportType?: 'barrel' | false
24
+ exportType?: 'barrel' | 'barrelNamed' | false
25
25
  }
26
26
  /**
27
27
  * Group the TypeScript types based on the provided name.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Mutation.tsx","../src/TypeBuilder.ts","../src/TypeGenerator.ts","../src/plugin.ts","../src/OperationGenerator.tsx","../src/components/Oas.tsx","../src/components/Query.tsx"],"names":["transformers","print","factory","File","usePlugin","usePluginManager","useOas","useOperation","useOperationFile","useOperationName","useSchemas","Generator","keywordTypeNodes","Template","pluginKey","Fragment","jsx","jsxs","options","node","path","printCombinedSchema"],"mappings":"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","sourcesContent":["import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\nimport { File, usePlugin, usePluginManager } from '@kubb/react'\nimport { useOas, useOperation, useOperationFile, useOperationName, useSchemas } from '@kubb/swagger/hooks'\n\nimport { TypeBuilder } from '../TypeBuilder.ts'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\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 builder: TypeBuilder\n}\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.createNamespaceDeclaration({\n name: operation.method === 'get' ? `${name}Query` : `${name}Mutation`,\n statements: Object.keys(properties).map(key => {\n const type = properties[key]\n if (!type) {\n return undefined\n }\n return factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: transformers.pascalCase(key),\n type,\n })\n }).filter(Boolean),\n })\n\n return print(namespaceNode)\n}\n\nexport function Mutation({\n builder,\n}: Props): ReactNode {\n const { source } = builder.build()\n\n return (\n <>\n {source}\n </>\n )\n}\n\ntype FileProps = {\n mode: KubbFile.Mode\n}\n\nMutation.File = function({ mode }: FileProps): ReactNode {\n const { options } = usePlugin<PluginOptions>()\n\n const schemas = useSchemas()\n const pluginManager = usePluginManager()\n const oas = useOas()\n const file = useOperationFile()\n const factoryName = useOperationName({ type: 'type' })\n const operation = useOperation()\n\n const builder = new TypeBuilder(options, { oas, pluginManager })\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.headerParams)\n .add(schemas.response)\n .add(schemas.request)\n .add(schemas.errors)\n\n const { source, imports } = builder.build()\n\n return (\n <>\n <File<FileMeta>\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n >\n {mode === 'directory' && imports.map((item, index) => {\n return <File.Import key={index} root={file.path} {...item} />\n })}\n <File.Source>\n {source}\n {printCombinedSchema(factoryName, operation, schemas)}\n </File.Source>\n </File>\n </>\n )\n}\n","import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport { OasBuilder } from '@kubb/swagger'\nimport { refsSorter } from '@kubb/swagger/utils'\n\nimport { TypeGenerator } from './TypeGenerator.ts'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ImportMeta } from '@kubb/swagger'\nimport type { PluginOptions } from './types.ts'\n\nexport class TypeBuilder extends OasBuilder<PluginOptions['resolvedOptions']> {\n build(name?: string): Required<Pick<KubbFile.File, 'imports' | 'source'>> {\n const importMeta: ImportMeta[] = []\n const codes: string[] = []\n\n const generated = this.items\n .filter((operationSchema) => (name ? operationSchema.name === name : true))\n .sort(transformers.nameSorter)\n .map((operationSchema) => {\n const generator = new TypeGenerator(this.options, this.context)\n const sources = generator.build({\n schema: operationSchema.schema,\n baseName: operationSchema.name,\n description: operationSchema.description,\n keysToOmit: operationSchema.keysToOmit,\n })\n\n importMeta.push(...generator.imports)\n\n return {\n import: {\n refs: generator.refs,\n name: operationSchema.name,\n },\n sources,\n }\n })\n .sort(refsSorter)\n\n generated.forEach((item) => {\n codes.push(print(item.sources))\n })\n\n const imports: KubbFile.Import[] = importMeta.map((item) => {\n return {\n name: [item.ref.propertyName],\n path: item.path,\n isTypeOnly: item.isTypeOnly,\n }\n })\n\n return {\n imports,\n source: transformers.combineCodes(codes),\n }\n }\n}\n","import { Generator } from '@kubb/core'\nimport transformers from '@kubb/core/transformers'\nimport { getUniqueName } from '@kubb/core/utils'\nimport * as factory from '@kubb/parser/factory'\nimport { keywordTypeNodes } from '@kubb/parser/factory'\nimport { getSchemaFactory, isReference } from '@kubb/swagger/utils'\n\nimport { pluginKey } from './plugin.ts'\n\nimport type { PluginManager } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\nimport type { ImportMeta, Refs } from '@kubb/swagger'\nimport type { Oas, OasTypes, OpenAPIV3, OpenAPIV3_1 } from '@kubb/swagger/oas'\nimport type { PluginOptions } from './types.ts'\n\n// based on https://github.com/cellular/oazapfts/blob/7ba226ebb15374e8483cc53e7532f1663179a22c/src/codegen/generate.ts#L398\n\ntype Context = {\n oas: Oas\n pluginManager: PluginManager\n}\n\nexport class TypeGenerator extends Generator<PluginOptions['resolvedOptions'], Context> {\n refs: Refs = {}\n imports: ImportMeta[] = []\n\n extraNodes: ts.Node[] = []\n\n aliases: ts.TypeAliasDeclaration[] = []\n\n // Keep track of already used type aliases\n #usedAliasNames: Record<string, number> = {}\n\n build({\n schema,\n baseName,\n description,\n keysToOmit,\n }: {\n schema: OasTypes.SchemaObject\n baseName: string\n description?: string\n keysToOmit?: string[]\n }): ts.Node[] {\n const nodes: ts.Node[] = []\n const type = this.getTypeFromSchema(schema, baseName)\n\n if (!type) {\n return this.extraNodes\n }\n\n const node = factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: this.context.pluginManager.resolveName({ name: baseName, pluginKey, type: 'type' }),\n type: keysToOmit?.length ? factory.createOmitDeclaration({ keys: keysToOmit, type, nonNullable: true }) : type,\n })\n\n if (description) {\n nodes.push(\n factory.appendJSDocToNode({\n node,\n comments: [`@description ${transformers.trim(description)}`],\n }),\n )\n } else {\n nodes.push(node)\n }\n\n // filter out if the export name is the same as one that we already defined in extraNodes(see enum)\n const filterdNodes = nodes.filter(\n (node: ts.Node) =>\n !this.extraNodes.some(\n (extraNode: ts.Node) => (extraNode as ts.TypeAliasDeclaration)?.name?.escapedText === (node as ts.TypeAliasDeclaration)?.name?.escapedText,\n ),\n )\n\n return [...this.extraNodes, ...filterdNodes]\n }\n\n /**\n * Creates a type node from a given schema.\n * Delegates to getBaseTypeFromSchema internally and\n * optionally adds a union with null.\n */\n getTypeFromSchema(schema?: OasTypes.SchemaObject, name?: string): ts.TypeNode | null {\n const type = this.#getBaseTypeFromSchema(schema, name)\n\n if (!type) {\n return null\n }\n\n if (schema && !schema.nullable) {\n return type\n }\n\n return factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.null] })\n }\n\n /**\n * Recursively creates a type literal with the given props.\n */\n #getTypeFromProperties(baseSchema?: OasTypes.SchemaObject, baseName?: string): ts.TypeNode | null {\n const { optionalType } = this.options\n const properties = baseSchema?.properties || {}\n const required = baseSchema?.required\n const additionalProperties = baseSchema?.additionalProperties\n\n const members: Array<ts.TypeElement | null> = Object.keys(properties).map((name) => {\n const schema = properties[name] as OasTypes.SchemaObject\n\n const isRequired = Array.isArray(required) ? required.includes(name) : !!required\n let type = this.getTypeFromSchema(schema, this.context.pluginManager.resolveName({ name: `${baseName || ''} ${name}`, pluginKey, type: 'type' }))\n\n if (!type) {\n return null\n }\n\n if (!isRequired && ['undefined', 'questionTokenAndUndefined'].includes(optionalType as string)) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] })\n }\n const propertySignature = factory.createPropertySignature({\n questionToken: ['questionToken', 'questionTokenAndUndefined'].includes(optionalType as string) && !isRequired,\n name,\n type: type as ts.TypeNode,\n readOnly: schema.readOnly,\n })\n\n return factory.appendJSDocToNode({\n node: propertySignature,\n comments: [\n schema.description ? `@description ${schema.description}` : undefined,\n schema.type ? `@type ${schema.type?.toString()}${isRequired ? '' : ' | undefined'} ${schema.format || ''}` : undefined,\n schema.example ? `@example ${schema.example as string}` : undefined,\n schema.deprecated ? `@deprecated` : undefined,\n schema.default !== undefined && typeof schema.default === 'string' ? `@default '${schema.default}'` : undefined,\n schema.default !== undefined && typeof schema.default !== 'string' ? `@default ${schema.default as string}` : undefined,\n ].filter(Boolean),\n })\n\n return propertySignature\n })\n if (additionalProperties) {\n const type = additionalProperties === true ? factory.keywordTypeNodes.any : this.getTypeFromSchema(additionalProperties as OasTypes.SchemaObject)\n\n if (type) {\n members.push(factory.createIndexSignature(type))\n }\n }\n return factory.createTypeLiteralNode(members.filter(Boolean))\n }\n\n /**\n * Create a type alias for the schema referenced by the given ReferenceObject\n */\n #getRefAlias(obj: OpenAPIV3.ReferenceObject, _baseName?: string) {\n const { $ref } = obj\n let ref = this.refs[$ref]\n\n if (ref) {\n return factory.createTypeReferenceNode(ref.propertyName, undefined)\n }\n\n const originalName = getUniqueName($ref.replace(/.+\\//, ''), this.#usedAliasNames)\n const propertyName = this.context.pluginManager.resolveName({ name: originalName, pluginKey, type: 'type' })\n\n ref = this.refs[$ref] = {\n propertyName,\n originalName,\n }\n\n const path = this.context.pluginManager.resolvePath({ baseName: propertyName, pluginKey })\n\n this.imports.push({\n ref,\n path: path || '',\n isTypeOnly: true,\n })\n\n return factory.createTypeReferenceNode(ref.propertyName, undefined)\n }\n\n #getParsedSchema(schema?: OasTypes.SchemaObject) {\n const parsedSchema = getSchemaFactory(this.context.oas)(schema)\n return parsedSchema\n }\n\n /**\n * This is the very core of the OpenAPI to TS conversion - it takes a\n * schema and returns the appropriate type.\n */\n #getBaseTypeFromSchema(\n _schema: OasTypes.SchemaObject | undefined,\n baseName?: string,\n ): ts.TypeNode | null {\n const { schema, version } = this.#getParsedSchema(_schema)\n\n if (!schema) {\n return factory.keywordTypeNodes.any\n }\n\n if (isReference(schema)) {\n return this.#getRefAlias(schema, baseName)\n }\n\n if (schema.oneOf) {\n // union\n const schemaWithoutOneOf = { ...schema, oneOf: undefined } as OasTypes.SchemaObject\n\n const union = factory.createUnionDeclaration({\n withParentheses: true,\n nodes: schema.oneOf\n .map((item) => {\n return item && this.getTypeFromSchema(item as OasTypes.SchemaObject)\n })\n .filter((item) => {\n return item && item !== factory.keywordTypeNodes.any\n }) as Array<ts.TypeNode>,\n })\n\n if (schemaWithoutOneOf.properties) {\n return factory.createIntersectionDeclaration({\n nodes: [this.getTypeFromSchema(schemaWithoutOneOf, baseName), union].filter(Boolean),\n })\n }\n\n return union\n }\n\n if (schema.anyOf) {\n const schemaWithoutAnyOf = { ...schema, anyOf: undefined } as OasTypes.SchemaObject\n\n const union = factory.createUnionDeclaration({\n withParentheses: true,\n nodes: schema.anyOf\n .map((item) => {\n return item && this.getTypeFromSchema(item as OasTypes.SchemaObject)\n })\n .filter((item) => {\n return item && item !== factory.keywordTypeNodes.any\n }) as Array<ts.TypeNode>,\n })\n\n if (schemaWithoutAnyOf.properties) {\n return factory.createIntersectionDeclaration({\n nodes: [this.getTypeFromSchema(schemaWithoutAnyOf, baseName), union].filter(Boolean),\n })\n }\n\n return union\n }\n if (schema.allOf) {\n // intersection/add\n const schemaWithoutAllOf = { ...schema, allOf: undefined } as OasTypes.SchemaObject\n\n const and = factory.createIntersectionDeclaration({\n withParentheses: true,\n nodes: schema.allOf\n .map((item) => {\n return item && this.getTypeFromSchema(item as OasTypes.SchemaObject)\n })\n .filter((item) => {\n return item && item !== factory.keywordTypeNodes.any\n }) as Array<ts.TypeNode>,\n })\n\n if (schemaWithoutAllOf.properties) {\n return factory.createIntersectionDeclaration({\n nodes: [this.getTypeFromSchema(schemaWithoutAllOf, baseName), and].filter(Boolean),\n })\n }\n\n return and\n }\n\n /**\n * Enum will be defined outside the baseType(hints the baseName check)\n */\n if (schema.enum && baseName) {\n const enumName = getUniqueName(baseName, this.options.usedEnumNames)\n\n let enums: [key: string, value: string | number][] = [...new Set(schema.enum)].map((key) => [key, key])\n\n if ('x-enumNames' in schema) {\n enums = [...new Set(schema['x-enumNames'] as string[])].map((key: string, index) => {\n return [key, schema.enum?.[index] as string]\n })\n }\n\n this.extraNodes.push(\n ...factory.createEnumDeclaration({\n name: transformers.camelCase(enumName),\n typeName: this.context.pluginManager.resolveName({ name: enumName, pluginKey, type: 'type' }),\n enums,\n type: this.options.enumType,\n }),\n )\n return factory.createTypeReferenceNode(this.context.pluginManager.resolveName({ name: enumName, pluginKey, type: 'type' }), undefined)\n }\n\n if (schema.enum) {\n return factory.createUnionDeclaration({\n nodes: schema.enum.map((name) => {\n return factory.createLiteralTypeNode(typeof name === 'number' ? factory.createNumericLiteral(name) : factory.createStringLiteral(`${name}`))\n }) as unknown as Array<ts.TypeNode>,\n })\n }\n\n if ('items' in schema) {\n // items -> array\n const node = this.getTypeFromSchema(schema.items as OasTypes.SchemaObject, baseName)\n if (node) {\n return factory.createArrayTypeNode(node)\n }\n }\n\n /**\n * OpenAPI 3.1\n * @link https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation\n */\n\n if ('prefixItems' in schema) {\n const prefixItems = schema.prefixItems as OasTypes.SchemaObject[]\n\n return factory.createTupleDeclaration({\n nodes: prefixItems.map((item) => {\n // no baseType so we can fall back on an union when using enum\n return this.getTypeFromSchema(item, undefined)\n }) as Array<ts.TypeNode>,\n })\n }\n\n if (schema.properties || schema.additionalProperties) {\n // properties -> literal type\n return this.#getTypeFromProperties(schema, baseName)\n }\n\n /**\n * validate \"const\" property as defined in JSON-Schema-Validation\n *\n * https://json-schema.org/draft/2020-12/json-schema-validation#name-const\n *\n * > 6.1.3. const\n * > The value of this keyword MAY be of any type, including null.\n * > Use of this keyword is functionally equivalent to an \"enum\" (Section 6.1.2) with a single value.\n * > An instance validates successfully against this keyword if its value is equal to the value of the keyword.\n */\n if (version === '3.1' && 'const' in schema) {\n // const keyword takes precendence over the actual type.\n if (schema['const']) {\n if (typeof schema['const'] === 'string') {\n return factory.createLiteralTypeNode(factory.createStringLiteral(schema['const']))\n } else if (typeof schema['const'] === 'number') {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(schema['const']))\n }\n } else {\n return keywordTypeNodes.null\n }\n }\n\n if (schema.type) {\n if (Array.isArray(schema.type)) {\n // TODO remove hardcoded first type, second nullable\n // OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n const [type, nullable] = schema.type as Array<OpenAPIV3_1.NonArraySchemaObjectType>\n\n return factory.createUnionDeclaration({\n nodes: [\n this.getTypeFromSchema(\n {\n ...schema,\n type,\n },\n baseName,\n ),\n nullable ? factory.createLiteralTypeNode(factory.createNull()) : undefined,\n ].filter(Boolean),\n })\n }\n\n if (this.options.dateType === 'date' && ['date', 'date-time'].some((item) => item === schema.format)) {\n return factory.createTypeReferenceNode(factory.createIdentifier('Date'))\n }\n\n // string, boolean, null, number\n if (schema.type in factory.keywordTypeNodes) {\n return factory.keywordTypeNodes[schema.type as keyof typeof factory.keywordTypeNodes]\n }\n }\n\n if (schema.format === 'binary') {\n return factory.createTypeReferenceNode('Blob', [])\n }\n\n return factory.keywordTypeNodes.any\n }\n}\n","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 { TypeBuilder } from './TypeBuilder.ts'\n\nimport type { KubbFile, KubbPlugin } from '@kubb/core'\nimport type { PluginOptions as SwaggerPluginOptions } from '@kubb/swagger'\nimport type { OasTypes } from '@kubb/swagger/oas'\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 dateType = 'string',\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 enumType,\n optionalType,\n oasType,\n // keep the used enumnames between TypeBuilder and OperationGenerator per plugin(pluginKey)\n usedEnumNames: {},\n },\n pre: [swaggerPluginName],\n resolvePath(baseName, directory, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = 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)\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]: [KubbPlugin<SwaggerPluginOptions>] = PluginManager.getDependedPlugins<SwaggerPluginOptions>(this.plugins, [swaggerPluginName])\n\n const oas = await swaggerPlugin.api.getOas()\n\n const schemas = await swaggerPlugin.api.getSchemas()\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = FileManager.getMode(path.resolve(root, output.path))\n const builder = new TypeBuilder(this.plugin.options, { oas, pluginManager: this.pluginManager })\n\n builder.add(\n Object.entries(schemas).map(([name, schema]: [string, OasTypes.SchemaObject]) => ({ name, schema })),\n )\n\n if (mode === 'directory') {\n const mapFolderSchema = async ([name]: [string, OasTypes.SchemaObject]) => {\n const baseName = `${this.resolveName({ name, pluginKey: this.plugin.key, type: 'file' })}.ts` as const\n const resolvedPath = this.resolvePath({ baseName, pluginKey: this.plugin.key })\n const { source, imports } = builder.build(name)\n\n if (!resolvedPath) {\n return null\n }\n\n return this.addFile({\n path: resolvedPath,\n baseName,\n source,\n imports: imports.map(item => ({ ...item, root: resolvedPath })),\n meta: {\n pluginKey: this.plugin.key,\n },\n })\n }\n\n const promises = Object.entries(schemas).map(mapFolderSchema)\n\n await Promise.all(promises)\n }\n\n if (mode === 'file') {\n const resolvedPath = this.resolvePath({ baseName: '', pluginKey: this.plugin.key })\n const { source } = builder.build()\n\n if (!resolvedPath) {\n return\n }\n\n await this.addFile({\n path: resolvedPath,\n baseName: output.path as KubbFile.BaseName,\n source,\n imports: [],\n meta: {\n pluginKey: this.plugin.key,\n },\n })\n }\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 files = await operationGenerator.build()\n await this.addFile(...files)\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 const { exportType = 'barrel' } = output\n\n if (exportType === 'barrel') {\n await this.fileManager.addIndexes({\n root,\n output,\n meta: { pluginKey: this.plugin.key },\n })\n }\n },\n }\n})\n","import { createRoot } from '@kubb/react'\nimport { OperationGenerator as Generator } from '@kubb/swagger'\n\nimport { Mutation } from './components/Mutation.tsx'\nimport { Oas } from './components/Oas.tsx'\nimport { Query } from './components/Query.tsx'\n\nimport type { AppContextProps } from '@kubb/react'\nimport type { OperationMethodResult, OperationSchemas } 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(): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin } = this.context\n\n if (!plugin.options.oasType) {\n return null\n }\n\n const root = createRoot<AppContextProps>({ logger: pluginManager.logger })\n root.render(\n <Oas.File name=\"oas\" typeName=\"Oas\" />,\n { meta: { oas, pluginManager, plugin } },\n )\n\n return root.files\n }\n\n async get(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin, mode = 'directory' } = this.context\n\n const root = createRoot<AppContextProps<PluginOptions['appMeta']>>({ logger: pluginManager.logger })\n root.render(\n <Query.File mode={mode} />,\n { meta: { oas, pluginManager, plugin: { ...plugin, options }, schemas, operation } },\n )\n\n return root.files\n }\n\n async post(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin, mode = 'directory' } = this.context\n\n const root = createRoot<AppContextProps<PluginOptions['appMeta']>>({ logger: pluginManager.logger })\n root.render(\n <Mutation.File mode={mode} />,\n { meta: { oas, pluginManager, plugin: { ...plugin, options }, schemas, operation } },\n )\n\n return root.files\n }\n\n async put(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n return this.post(operation, schemas, options)\n }\n async patch(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n return this.post(operation, schemas, options)\n }\n async delete(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n return this.post(operation, schemas, options)\n }\n}\n","import { File, Type, usePlugin } from '@kubb/react'\nimport { useFile } 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 Oas({\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\nOas.File = function({ name, typeName, templates = defaultTemplates }: FileProps): ReactNode {\n const { key: pluginKey } = usePlugin<PluginOptions>()\n const file = useFile({ name, pluginKey })\n\n const Template = templates.default\n\n return (\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 <Oas Template={Template} name={name} typeName={typeName} />\n </File.Source>\n </File>\n )\n}\n\nOas.templates = defaultTemplates\n","import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\nimport { File, usePlugin, usePluginManager } from '@kubb/react'\nimport { useOas, useOperation, useOperationFile, useOperationName, useSchemas } from '@kubb/swagger/hooks'\n\nimport { TypeBuilder } from '../TypeBuilder.ts'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\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 builder: TypeBuilder\n}\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.createNamespaceDeclaration({\n name: operation.method === 'get' ? `${name}Query` : `${name}Mutation`,\n statements: Object.keys(properties).map(key => {\n const type = properties[key]\n if (!type) {\n return undefined\n }\n return factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: transformers.pascalCase(key),\n type,\n })\n }).filter(Boolean),\n })\n\n return print(namespaceNode)\n}\n\nexport function Query({\n builder,\n}: Props): ReactNode {\n const { source } = builder.build()\n\n return (\n <>\n {source}\n </>\n )\n}\n\ntype FileProps = {\n mode: KubbFile.Mode\n}\n\nQuery.File = function({ mode }: FileProps): ReactNode {\n const { options } = usePlugin<PluginOptions>()\n\n const schemas = useSchemas()\n const pluginManager = usePluginManager()\n const oas = useOas()\n const file = useOperationFile()\n const factoryName = useOperationName({ type: 'type' })\n const operation = useOperation()\n\n const builder = new TypeBuilder(options, { oas, pluginManager })\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.headerParams)\n .add(schemas.response)\n .add(schemas.errors)\n\n const { source, imports } = builder.build()\n\n return (\n <>\n <File<FileMeta>\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n >\n {mode === 'directory' && imports.map((item, index) => {\n return <File.Import key={index} root={file.path} {...item} />\n })}\n <File.Source>\n {source}\n {printCombinedSchema(factoryName, operation, schemas)}\n </File.Source>\n </File>\n </>\n )\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Mutation.tsx","../src/TypeBuilder.ts","../src/TypeGenerator.ts","../src/plugin.ts","../src/OperationGenerator.tsx","../src/components/Oas.tsx","../src/components/Query.tsx"],"names":["transformers","print","factory","File","usePlugin","usePluginManager","useOas","useOperation","useOperationFile","useOperationName","useSchemas","Generator","keywordTypeNodes","Template","pluginKey","Fragment","jsx","jsxs","options","node","path","printCombinedSchema"],"mappings":"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","sourcesContent":["import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\nimport { File, usePlugin, usePluginManager } from '@kubb/react'\nimport { useOas, useOperation, useOperationFile, useOperationName, useSchemas } from '@kubb/swagger/hooks'\n\nimport { TypeBuilder } from '../TypeBuilder.ts'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\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 builder: TypeBuilder\n}\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.createNamespaceDeclaration({\n name: operation.method === 'get' ? `${name}Query` : `${name}Mutation`,\n statements: Object.keys(properties).map(key => {\n const type = properties[key]\n if (!type) {\n return undefined\n }\n return factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: transformers.pascalCase(key),\n type,\n })\n }).filter(Boolean),\n })\n\n return print(namespaceNode)\n}\n\nexport function Mutation({\n builder,\n}: Props): ReactNode {\n const { source } = builder.build()\n\n return (\n <>\n {source}\n </>\n )\n}\n\ntype FileProps = {\n mode: KubbFile.Mode\n}\n\nMutation.File = function({ mode }: FileProps): ReactNode {\n const { options } = usePlugin<PluginOptions>()\n\n const schemas = useSchemas()\n const pluginManager = usePluginManager()\n const oas = useOas()\n const file = useOperationFile()\n const factoryName = useOperationName({ type: 'type' })\n const operation = useOperation()\n\n const builder = new TypeBuilder(options, { oas, pluginManager })\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.headerParams)\n .add(schemas.response)\n .add(schemas.request)\n .add(schemas.errors)\n\n const { source, imports } = builder.build()\n\n return (\n <>\n <File<FileMeta>\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n >\n {mode === 'directory' && imports.map((item, index) => {\n return <File.Import key={index} root={file.path} {...item} />\n })}\n <File.Source>\n {source}\n {printCombinedSchema(factoryName, operation, schemas)}\n </File.Source>\n </File>\n </>\n )\n}\n","import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport { OasBuilder } from '@kubb/swagger'\nimport { refsSorter } from '@kubb/swagger/utils'\n\nimport { TypeGenerator } from './TypeGenerator.ts'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ImportMeta } from '@kubb/swagger'\nimport type { PluginOptions } from './types.ts'\n\nexport class TypeBuilder extends OasBuilder<PluginOptions['resolvedOptions']> {\n build(name?: string): Required<Pick<KubbFile.File, 'imports' | 'source'>> {\n const importMeta: ImportMeta[] = []\n const codes: string[] = []\n\n const generated = this.items\n .filter((operationSchema) => (name ? operationSchema.name === name : true))\n .sort(transformers.nameSorter)\n .map((operationSchema) => {\n const generator = new TypeGenerator(this.options, this.context)\n const sources = generator.build({\n schema: operationSchema.schema,\n baseName: operationSchema.name,\n description: operationSchema.description,\n keysToOmit: operationSchema.keysToOmit,\n })\n\n importMeta.push(...generator.imports)\n\n return {\n import: {\n refs: generator.refs,\n name: operationSchema.name,\n },\n sources,\n }\n })\n .sort(refsSorter)\n\n generated.forEach((item) => {\n codes.push(print(item.sources))\n })\n\n const imports: KubbFile.Import[] = importMeta.map((item) => {\n return {\n name: [item.ref.propertyName],\n path: item.path,\n isTypeOnly: item.isTypeOnly,\n }\n })\n\n return {\n imports,\n source: transformers.combineCodes(codes),\n }\n }\n}\n","import { Generator } from '@kubb/core'\nimport transformers from '@kubb/core/transformers'\nimport { getUniqueName } from '@kubb/core/utils'\nimport * as factory from '@kubb/parser/factory'\nimport { keywordTypeNodes } from '@kubb/parser/factory'\nimport { getSchemaFactory, isReference } from '@kubb/swagger/utils'\n\nimport { pluginKey } from './plugin.ts'\n\nimport type { PluginManager } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\nimport type { ImportMeta, Refs } from '@kubb/swagger'\nimport type { Oas, OasTypes, OpenAPIV3, OpenAPIV3_1 } from '@kubb/swagger/oas'\nimport type { PluginOptions } from './types.ts'\n\n// based on https://github.com/cellular/oazapfts/blob/7ba226ebb15374e8483cc53e7532f1663179a22c/src/codegen/generate.ts#L398\n\ntype Context = {\n oas: Oas\n pluginManager: PluginManager\n}\n\nexport class TypeGenerator extends Generator<PluginOptions['resolvedOptions'], Context> {\n refs: Refs = {}\n imports: ImportMeta[] = []\n\n extraNodes: ts.Node[] = []\n\n aliases: ts.TypeAliasDeclaration[] = []\n\n // Keep track of already used type aliases\n #usedAliasNames: Record<string, number> = {}\n\n build({\n schema,\n baseName,\n description,\n keysToOmit,\n }: {\n schema: OasTypes.SchemaObject\n baseName: string\n description?: string\n keysToOmit?: string[]\n }): ts.Node[] {\n const nodes: ts.Node[] = []\n const type = this.getTypeFromSchema(schema, baseName)\n\n if (!type) {\n return this.extraNodes\n }\n\n const node = factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: this.context.pluginManager.resolveName({ name: baseName, pluginKey, type: 'type' }),\n type: keysToOmit?.length ? factory.createOmitDeclaration({ keys: keysToOmit, type, nonNullable: true }) : type,\n })\n\n if (description) {\n nodes.push(\n factory.appendJSDocToNode({\n node,\n comments: [`@description ${transformers.trim(description)}`],\n }),\n )\n } else {\n nodes.push(node)\n }\n\n // filter out if the export name is the same as one that we already defined in extraNodes(see enum)\n const filterdNodes = nodes.filter(\n (node: ts.Node) =>\n !this.extraNodes.some(\n (extraNode: ts.Node) => (extraNode as ts.TypeAliasDeclaration)?.name?.escapedText === (node as ts.TypeAliasDeclaration)?.name?.escapedText,\n ),\n )\n\n return [...this.extraNodes, ...filterdNodes]\n }\n\n /**\n * Creates a type node from a given schema.\n * Delegates to getBaseTypeFromSchema internally and\n * optionally adds a union with null.\n */\n getTypeFromSchema(schema?: OasTypes.SchemaObject, name?: string): ts.TypeNode | null {\n const type = this.#getBaseTypeFromSchema(schema, name)\n\n if (!type) {\n return null\n }\n\n if (schema && !schema.nullable) {\n return type\n }\n\n return factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.null] })\n }\n\n /**\n * Recursively creates a type literal with the given props.\n */\n #getTypeFromProperties(baseSchema?: OasTypes.SchemaObject, baseName?: string): ts.TypeNode | null {\n const { optionalType } = this.options\n const properties = baseSchema?.properties || {}\n const required = baseSchema?.required\n const additionalProperties = baseSchema?.additionalProperties\n\n const members: Array<ts.TypeElement | null> = Object.keys(properties).map((name) => {\n const schema = properties[name] as OasTypes.SchemaObject\n\n const isRequired = Array.isArray(required) ? required.includes(name) : !!required\n let type = this.getTypeFromSchema(schema, this.context.pluginManager.resolveName({ name: `${baseName || ''} ${name}`, pluginKey, type: 'type' }))\n\n if (!type) {\n return null\n }\n\n if (!isRequired && ['undefined', 'questionTokenAndUndefined'].includes(optionalType as string)) {\n type = factory.createUnionDeclaration({ nodes: [type, factory.keywordTypeNodes.undefined] })\n }\n const propertySignature = factory.createPropertySignature({\n questionToken: ['questionToken', 'questionTokenAndUndefined'].includes(optionalType as string) && !isRequired,\n name,\n type: type as ts.TypeNode,\n readOnly: schema.readOnly,\n })\n\n return factory.appendJSDocToNode({\n node: propertySignature,\n comments: [\n schema.description ? `@description ${schema.description}` : undefined,\n schema.type ? `@type ${schema.type?.toString()}${isRequired ? '' : ' | undefined'} ${schema.format || ''}` : undefined,\n schema.example ? `@example ${schema.example as string}` : undefined,\n schema.deprecated ? `@deprecated` : undefined,\n schema.default !== undefined && typeof schema.default === 'string' ? `@default '${schema.default}'` : undefined,\n schema.default !== undefined && typeof schema.default !== 'string' ? `@default ${schema.default as string}` : undefined,\n ].filter(Boolean),\n })\n\n return propertySignature\n })\n if (additionalProperties) {\n const type = additionalProperties === true ? factory.keywordTypeNodes.any : this.getTypeFromSchema(additionalProperties as OasTypes.SchemaObject)\n\n if (type) {\n members.push(factory.createIndexSignature(type))\n }\n }\n return factory.createTypeLiteralNode(members.filter(Boolean))\n }\n\n /**\n * Create a type alias for the schema referenced by the given ReferenceObject\n */\n #getRefAlias(obj: OpenAPIV3.ReferenceObject, _baseName?: string) {\n const { $ref } = obj\n let ref = this.refs[$ref]\n\n if (ref) {\n return factory.createTypeReferenceNode(ref.propertyName, undefined)\n }\n\n const originalName = getUniqueName($ref.replace(/.+\\//, ''), this.#usedAliasNames)\n const propertyName = this.context.pluginManager.resolveName({ name: originalName, pluginKey, type: 'type' })\n\n ref = this.refs[$ref] = {\n propertyName,\n originalName,\n }\n\n const path = this.context.pluginManager.resolvePath({ baseName: propertyName, pluginKey })\n\n this.imports.push({\n ref,\n path: path || '',\n isTypeOnly: true,\n })\n\n return factory.createTypeReferenceNode(ref.propertyName, undefined)\n }\n\n #getParsedSchema(schema?: OasTypes.SchemaObject) {\n const parsedSchema = getSchemaFactory(this.context.oas)(schema)\n return parsedSchema\n }\n\n /**\n * This is the very core of the OpenAPI to TS conversion - it takes a\n * schema and returns the appropriate type.\n */\n #getBaseTypeFromSchema(\n _schema: OasTypes.SchemaObject | undefined,\n baseName?: string,\n ): ts.TypeNode | null {\n const { schema, version } = this.#getParsedSchema(_schema)\n\n if (!schema) {\n return factory.keywordTypeNodes.any\n }\n\n if (isReference(schema)) {\n return this.#getRefAlias(schema, baseName)\n }\n\n if (schema.oneOf) {\n // union\n const schemaWithoutOneOf = { ...schema, oneOf: undefined } as OasTypes.SchemaObject\n\n const union = factory.createUnionDeclaration({\n withParentheses: true,\n nodes: schema.oneOf\n .map((item) => {\n return item && this.getTypeFromSchema(item as OasTypes.SchemaObject)\n })\n .filter((item) => {\n return item && item !== factory.keywordTypeNodes.any\n }) as Array<ts.TypeNode>,\n })\n\n if (schemaWithoutOneOf.properties) {\n return factory.createIntersectionDeclaration({\n nodes: [this.getTypeFromSchema(schemaWithoutOneOf, baseName), union].filter(Boolean),\n })\n }\n\n return union\n }\n\n if (schema.anyOf) {\n const schemaWithoutAnyOf = { ...schema, anyOf: undefined } as OasTypes.SchemaObject\n\n const union = factory.createUnionDeclaration({\n withParentheses: true,\n nodes: schema.anyOf\n .map((item) => {\n return item && this.getTypeFromSchema(item as OasTypes.SchemaObject)\n })\n .filter((item) => {\n return item && item !== factory.keywordTypeNodes.any\n }) as Array<ts.TypeNode>,\n })\n\n if (schemaWithoutAnyOf.properties) {\n return factory.createIntersectionDeclaration({\n nodes: [this.getTypeFromSchema(schemaWithoutAnyOf, baseName), union].filter(Boolean),\n })\n }\n\n return union\n }\n if (schema.allOf) {\n // intersection/add\n const schemaWithoutAllOf = { ...schema, allOf: undefined } as OasTypes.SchemaObject\n\n const and = factory.createIntersectionDeclaration({\n withParentheses: true,\n nodes: schema.allOf\n .map((item) => {\n return item && this.getTypeFromSchema(item as OasTypes.SchemaObject)\n })\n .filter((item) => {\n return item && item !== factory.keywordTypeNodes.any\n }) as Array<ts.TypeNode>,\n })\n\n if (schemaWithoutAllOf.properties) {\n return factory.createIntersectionDeclaration({\n nodes: [this.getTypeFromSchema(schemaWithoutAllOf, baseName), and].filter(Boolean),\n })\n }\n\n return and\n }\n\n /**\n * Enum will be defined outside the baseType(hints the baseName check)\n */\n if (schema.enum && baseName) {\n const enumName = getUniqueName(baseName, this.options.usedEnumNames)\n\n let enums: [key: string, value: string | number][] = [...new Set(schema.enum)].map((key) => [key, key])\n\n if ('x-enumNames' in schema) {\n enums = [...new Set(schema['x-enumNames'] as string[])].map((key: string, index) => {\n return [key, schema.enum?.[index] as string]\n })\n }\n\n this.extraNodes.push(\n ...factory.createEnumDeclaration({\n name: transformers.camelCase(enumName),\n typeName: this.context.pluginManager.resolveName({ name: enumName, pluginKey, type: 'type' }),\n enums,\n type: this.options.enumType,\n }),\n )\n return factory.createTypeReferenceNode(this.context.pluginManager.resolveName({ name: enumName, pluginKey, type: 'type' }), undefined)\n }\n\n if (schema.enum) {\n return factory.createUnionDeclaration({\n nodes: schema.enum.map((name) => {\n return factory.createLiteralTypeNode(typeof name === 'number' ? factory.createNumericLiteral(name) : factory.createStringLiteral(`${name}`))\n }) as unknown as Array<ts.TypeNode>,\n })\n }\n\n if ('items' in schema) {\n // items -> array\n const node = this.getTypeFromSchema(schema.items as OasTypes.SchemaObject, baseName)\n if (node) {\n return factory.createArrayTypeNode(node)\n }\n }\n\n /**\n * OpenAPI 3.1\n * @link https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation\n */\n\n if ('prefixItems' in schema) {\n const prefixItems = schema.prefixItems as OasTypes.SchemaObject[]\n\n return factory.createTupleDeclaration({\n nodes: prefixItems.map((item) => {\n // no baseType so we can fall back on an union when using enum\n return this.getTypeFromSchema(item, undefined)\n }) as Array<ts.TypeNode>,\n })\n }\n\n if (schema.properties || schema.additionalProperties) {\n // properties -> literal type\n return this.#getTypeFromProperties(schema, baseName)\n }\n\n /**\n * validate \"const\" property as defined in JSON-Schema-Validation\n *\n * https://json-schema.org/draft/2020-12/json-schema-validation#name-const\n *\n * > 6.1.3. const\n * > The value of this keyword MAY be of any type, including null.\n * > Use of this keyword is functionally equivalent to an \"enum\" (Section 6.1.2) with a single value.\n * > An instance validates successfully against this keyword if its value is equal to the value of the keyword.\n */\n if (version === '3.1' && 'const' in schema) {\n // const keyword takes precendence over the actual type.\n if (schema['const']) {\n if (typeof schema['const'] === 'string') {\n return factory.createLiteralTypeNode(factory.createStringLiteral(schema['const']))\n } else if (typeof schema['const'] === 'number') {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(schema['const']))\n }\n } else {\n return keywordTypeNodes.null\n }\n }\n\n if (schema.type) {\n if (Array.isArray(schema.type)) {\n // TODO remove hardcoded first type, second nullable\n // OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n const [type, nullable] = schema.type as Array<OpenAPIV3_1.NonArraySchemaObjectType>\n\n return factory.createUnionDeclaration({\n nodes: [\n this.getTypeFromSchema(\n {\n ...schema,\n type,\n },\n baseName,\n ),\n nullable ? factory.createLiteralTypeNode(factory.createNull()) : undefined,\n ].filter(Boolean),\n })\n }\n\n if (this.options.dateType === 'date' && ['date', 'date-time'].some((item) => item === schema.format)) {\n return factory.createTypeReferenceNode(factory.createIdentifier('Date'))\n }\n\n // string, boolean, null, number\n if (schema.type in factory.keywordTypeNodes) {\n return factory.keywordTypeNodes[schema.type as keyof typeof factory.keywordTypeNodes]\n }\n }\n\n if (schema.format === 'binary') {\n return factory.createTypeReferenceNode('Blob', [])\n }\n\n return factory.keywordTypeNodes.any\n }\n}\n","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 { TypeBuilder } from './TypeBuilder.ts'\n\nimport type { KubbFile, KubbPlugin } from '@kubb/core'\nimport type { PluginOptions as SwaggerPluginOptions } from '@kubb/swagger'\nimport type { OasTypes } from '@kubb/swagger/oas'\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 dateType = 'string',\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 enumType,\n optionalType,\n oasType,\n // keep the used enumnames between TypeBuilder and OperationGenerator per plugin(pluginKey)\n usedEnumNames: {},\n },\n pre: [swaggerPluginName],\n resolvePath(baseName, directory, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = 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)\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]: [KubbPlugin<SwaggerPluginOptions>] = PluginManager.getDependedPlugins<SwaggerPluginOptions>(this.plugins, [swaggerPluginName])\n\n const oas = await swaggerPlugin.api.getOas()\n\n const schemas = await swaggerPlugin.api.getSchemas()\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = FileManager.getMode(path.resolve(root, output.path))\n const builder = new TypeBuilder(this.plugin.options, { oas, pluginManager: this.pluginManager })\n\n builder.add(\n Object.entries(schemas).map(([name, schema]: [string, OasTypes.SchemaObject]) => ({ name, schema })),\n )\n\n if (mode === 'directory') {\n const mapFolderSchema = async ([name]: [string, OasTypes.SchemaObject]) => {\n const baseName = `${this.resolveName({ name, pluginKey: this.plugin.key, type: 'file' })}.ts` as const\n const resolvedPath = this.resolvePath({ baseName, pluginKey: this.plugin.key })\n const { source, imports } = builder.build(name)\n\n if (!resolvedPath) {\n return null\n }\n\n return this.addFile({\n path: resolvedPath,\n baseName,\n source,\n imports: imports.map(item => ({ ...item, root: resolvedPath })),\n meta: {\n pluginKey: this.plugin.key,\n },\n })\n }\n\n const promises = Object.entries(schemas).map(mapFolderSchema)\n\n await Promise.all(promises)\n }\n\n if (mode === 'file') {\n const resolvedPath = this.resolvePath({ baseName: '', pluginKey: this.plugin.key })\n const { source } = builder.build()\n\n if (!resolvedPath) {\n return\n }\n\n await this.addFile({\n path: resolvedPath,\n baseName: output.path as KubbFile.BaseName,\n source,\n imports: [],\n meta: {\n pluginKey: this.plugin.key,\n },\n })\n }\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 files = await operationGenerator.build()\n await this.addFile(...files)\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 const { exportType = 'barrel' } = output\n\n if (exportType === 'barrel') {\n await this.fileManager.addIndexes({\n root,\n output,\n meta: { pluginKey: this.plugin.key },\n })\n }\n },\n }\n})\n","import { createRoot } from '@kubb/react'\nimport { OperationGenerator as Generator } from '@kubb/swagger'\n\nimport { Mutation } from './components/Mutation.tsx'\nimport { Oas } from './components/Oas.tsx'\nimport { Query } from './components/Query.tsx'\n\nimport type { AppContextProps } from '@kubb/react'\nimport type { OperationMethodResult, OperationSchemas } 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(): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin } = this.context\n\n if (!plugin.options.oasType) {\n return null\n }\n\n const root = createRoot<AppContextProps>({ logger: pluginManager.logger })\n root.render(\n <Oas.File name=\"oas\" typeName=\"Oas\" />,\n { meta: { oas, pluginManager, plugin } },\n )\n\n return root.files\n }\n\n async get(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin, mode = 'directory' } = this.context\n\n const root = createRoot<AppContextProps<PluginOptions['appMeta']>>({ logger: pluginManager.logger })\n root.render(\n <Query.File mode={mode} />,\n { meta: { oas, pluginManager, plugin: { ...plugin, options }, schemas, operation } },\n )\n\n return root.files\n }\n\n async post(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin, mode = 'directory' } = this.context\n\n const root = createRoot<AppContextProps<PluginOptions['appMeta']>>({ logger: pluginManager.logger })\n root.render(\n <Mutation.File mode={mode} />,\n { meta: { oas, pluginManager, plugin: { ...plugin, options }, schemas, operation } },\n )\n\n return root.files\n }\n\n async put(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n return this.post(operation, schemas, options)\n }\n async patch(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n return this.post(operation, schemas, options)\n }\n async delete(operation: Operation, schemas: OperationSchemas, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n return this.post(operation, schemas, options)\n }\n}\n","import { File, Type, usePlugin } from '@kubb/react'\nimport { useFile } 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 Oas({\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\nOas.File = function({ name, typeName, templates = defaultTemplates }: FileProps): ReactNode {\n const { key: pluginKey } = usePlugin<PluginOptions>()\n const file = useFile({ name, pluginKey })\n\n const Template = templates.default\n\n return (\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 <Oas Template={Template} name={name} typeName={typeName} />\n </File.Source>\n </File>\n )\n}\n\nOas.templates = defaultTemplates\n","import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\nimport { File, usePlugin, usePluginManager } from '@kubb/react'\nimport { useOas, useOperation, useOperationFile, useOperationName, useSchemas } from '@kubb/swagger/hooks'\n\nimport { TypeBuilder } from '../TypeBuilder.ts'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\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 builder: TypeBuilder\n}\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.createNamespaceDeclaration({\n name: operation.method === 'get' ? `${name}Query` : `${name}Mutation`,\n statements: Object.keys(properties).map(key => {\n const type = properties[key]\n if (!type) {\n return undefined\n }\n return factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: transformers.pascalCase(key),\n type,\n })\n }).filter(Boolean),\n })\n\n return print(namespaceNode)\n}\n\nexport function Query({\n builder,\n}: Props): ReactNode {\n const { source } = builder.build()\n\n return (\n <>\n {source}\n </>\n )\n}\n\ntype FileProps = {\n mode: KubbFile.Mode\n}\n\nQuery.File = function({ mode }: FileProps): ReactNode {\n const { options } = usePlugin<PluginOptions>()\n\n const schemas = useSchemas()\n const pluginManager = usePluginManager()\n const oas = useOas()\n const file = useOperationFile()\n const factoryName = useOperationName({ type: 'type' })\n const operation = useOperation()\n\n const builder = new TypeBuilder(options, { oas, pluginManager })\n .add(schemas.pathParams)\n .add(schemas.queryParams)\n .add(schemas.headerParams)\n .add(schemas.response)\n .add(schemas.errors)\n\n const { source, imports } = builder.build()\n\n return (\n <>\n <File<FileMeta>\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n >\n {mode === 'directory' && imports.map((item, index) => {\n return <File.Import key={index} root={file.path} {...item} />\n })}\n <File.Source>\n {source}\n {printCombinedSchema(factoryName, operation, schemas)}\n </File.Source>\n </File>\n </>\n )\n}\n"]}