@kubb/swagger-ts 2.12.0 → 2.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-WZKUY426.cjs → chunk-BINFINBM.cjs} +56 -66
- package/dist/chunk-BINFINBM.cjs.map +1 -0
- package/dist/{chunk-ZNLTJZHN.js → chunk-BT6YU75U.js} +62 -72
- package/dist/chunk-BT6YU75U.js.map +1 -0
- package/dist/components.cjs +2 -2
- package/dist/components.d.cts +2 -5
- package/dist/components.d.ts +2 -5
- package/dist/components.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +9 -9
- package/src/OperationGenerator.tsx +16 -15
- package/src/SchemaGenerator.tsx +11 -11
- package/src/components/OasType.tsx +5 -3
- package/src/components/OperationSchema.tsx +6 -9
- package/src/plugin.ts +3 -2
- package/src/typeParser.ts +39 -51
- package/src/types.ts +1 -1
- package/dist/chunk-WZKUY426.cjs.map +0 -1
- package/dist/chunk-ZNLTJZHN.js.map +0 -1
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts","../src/OperationGenerator.tsx","../src/components/OasType.tsx","../src/components/OperationSchema.tsx","../src/SchemaGenerator.tsx","../src/typeParser.ts","../src/index.ts"],"sourcesContent":["import path from 'node:path'\n\nimport { FileManager, PluginManager, createPlugin } from '@kubb/core'\nimport { camelCase, pascalCase } from '@kubb/core/transformers'\nimport { renderTemplate } from '@kubb/core/utils'\nimport { pluginName as swaggerPluginName } from '@kubb/swagger'\n\nimport { OperationGenerator } from './OperationGenerator.tsx'\nimport { SchemaGenerator } from './SchemaGenerator.tsx'\n\nimport type { Plugin } from '@kubb/core'\nimport type { PluginOptions as SwaggerPluginOptions } from '@kubb/swagger'\nimport type { PluginOptions } from './types.ts'\nexport const pluginName = 'swagger-ts' satisfies PluginOptions['name']\nexport const pluginKey: PluginOptions['key'] = [pluginName] satisfies PluginOptions['key']\n\nexport const definePlugin = createPlugin<PluginOptions>((options) => {\n const {\n output = { path: 'types' },\n group,\n exclude = [],\n include,\n override = [],\n enumType = 'asConst',\n enumSuffix = '',\n dateType = 'string',\n unknownType = 'any',\n optionalType = 'questionToken',\n transformers = {},\n oasType = false,\n } = options\n const template = group?.output ? group.output : `${output.path}/{{tag}}Controller`\n\n return {\n name: pluginName,\n options: {\n transformers,\n dateType,\n optionalType,\n oasType,\n enumType,\n enumSuffix,\n // keep the used enumnames between SchemaGenerator and OperationGenerator per plugin(pluginKey)\n usedEnumNames: {},\n unknownType,\n },\n pre: [swaggerPluginName],\n resolvePath(baseName, pathMode, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = pathMode ?? FileManager.getMode(path.resolve(root, output.path))\n\n if (mode === 'single') {\n /**\n * when output is a file then we will always append to the same file(output file), see fileManager.addOrAppend\n * Other plugins then need to call addOrAppend instead of just add from the fileManager class\n */\n return path.resolve(root, output.path)\n }\n\n if (options?.tag && group?.type === 'tag') {\n const tag = camelCase(options.tag)\n\n return path.resolve(root, renderTemplate(template, { tag }), baseName)\n }\n\n return path.resolve(root, output.path, baseName)\n },\n resolveName(name, type) {\n const resolvedName = pascalCase(name, { isFile: type === 'file' })\n\n if (type) {\n return transformers?.name?.(resolvedName, type) || resolvedName\n }\n\n return resolvedName\n },\n async writeFile(source, writePath) {\n if (!writePath.endsWith('.ts') || !source) {\n return\n }\n\n return this.fileManager.write(source, writePath, { sanity: false })\n },\n async buildStart() {\n const [swaggerPlugin]: [Plugin<SwaggerPluginOptions>] = PluginManager.getDependedPlugins<SwaggerPluginOptions>(this.plugins, [swaggerPluginName])\n\n const oas = await swaggerPlugin.api.getOas()\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = FileManager.getMode(path.resolve(root, output.path))\n\n const schemaGenerator = new SchemaGenerator(this.plugin.options, {\n oas,\n pluginManager: this.pluginManager,\n plugin: this.plugin,\n contentType: swaggerPlugin.api.contentType,\n include: undefined,\n mode,\n output: output.path,\n })\n\n const schemaFiles = await schemaGenerator.build()\n await this.addFile(...schemaFiles)\n\n const operationGenerator = new OperationGenerator(this.plugin.options, {\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 const operationFiles = await operationGenerator.build()\n await this.addFile(...operationFiles)\n },\n async buildEnd() {\n if (this.config.output.write === false) {\n return\n }\n\n const root = path.resolve(this.config.root, this.config.output.path)\n\n await this.fileManager.addIndexes({\n root,\n output,\n meta: { pluginKey: this.plugin.key },\n logger: this.logger,\n })\n },\n }\n})\n","import { App, createRoot } from '@kubb/react'\nimport { OperationGenerator as Generator } from '@kubb/swagger'\nimport { Oas } from '@kubb/swagger/components'\n\nimport { OasType } from './components/OasType.tsx'\nimport { OperationSchema } from './components/OperationSchema.tsx'\n\nimport type { OperationMethodResult } from '@kubb/swagger'\nimport type { Operation } from '@kubb/swagger/oas'\nimport type { FileMeta, PluginOptions } from './types.ts'\n\nexport class OperationGenerator extends Generator<PluginOptions['resolvedOptions'], PluginOptions> {\n async all(operations: Operation[]): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin, mode } = this.context\n\n const root = createRoot({\n logger: pluginManager.logger,\n })\n\n root.render(\n <App pluginManager={pluginManager} plugin={plugin} mode={mode}>\n <Oas oas={oas} operations={operations} getOperationSchemas={(...props) => this.getSchemas(...props)}>\n {plugin.options.oasType && <OasType.File name=\"oas\" typeName=\"Oas\" />}\n </Oas>\n </App>,\n )\n\n return root.files\n }\n\n async operation(operation: Operation, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {\n const { oas, pluginManager, plugin, mode } = this.context\n\n const root = createRoot({\n logger: pluginManager.logger,\n })\n root.render(\n <App pluginManager={pluginManager} plugin={{ ...plugin, options }} mode={mode}>\n <Oas oas={oas} operations={[operation]} getOperationSchemas={(...props) => this.getSchemas(...props)}>\n <Oas.Operation operation={operation}>\n <OperationSchema.File />\n </Oas.Operation>\n </Oas>\n </App>,\n )\n\n return root.files\n }\n\n async get(): OperationMethodResult<FileMeta> {\n return null\n }\n\n async post(): OperationMethodResult<FileMeta> {\n return null\n }\n\n async put(): OperationMethodResult<FileMeta> {\n return null\n }\n async patch(): OperationMethodResult<FileMeta> {\n return null\n }\n async delete(): OperationMethodResult<FileMeta> {\n return null\n }\n}\n","import { Editor, File, Type, useApp } 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({ name, typeName, api }: TemplateProps): ReactNode {\n return (\n <>\n {`export const ${name} = ${JSON.stringify(api, undefined, 2)} as const`}\n <br />\n <Type name={typeName} export>\n {`Infer<typeof ${name}>`}\n </Type>\n </>\n )\n}\n\nconst defaultTemplates = { default: Template } as const\n\ntype Props = {\n name: string\n typeName: string\n /**\n * This will make it possible to override the default behaviour.\n */\n Template?: React.ComponentType<React.ComponentProps<typeof Template>>\n}\n\nexport function OasType({ name, typeName, Template = defaultTemplates.default }: Props): ReactNode {\n const oas = useOas()\n\n return <Template name={name} typeName={typeName} api={oas.api} />\n}\n\ntype FileProps = {\n name: string\n typeName: string\n /**\n * This will make it possible to override the default behaviour.\n */\n templates?: typeof defaultTemplates\n}\n\nOasType.File = function ({ name, typeName, templates = defaultTemplates }: FileProps): ReactNode {\n const {\n pluginManager,\n plugin: { key: pluginKey },\n } = useApp<PluginOptions>()\n const file = pluginManager.getFile({ name, extName: '.ts', pluginKey })\n\n const Template = templates.default\n\n return (\n <Editor language=\"typescript\">\n <File<FileMeta> baseName={file.baseName} path={file.path} meta={file.meta}>\n <File.Import name={['Infer']} path=\"@kubb/swagger-ts/oas\" isTypeOnly />\n <File.Source>\n <OasType Template={Template} name={name} typeName={typeName} />\n </File.Source>\n </File>\n </Editor>\n )\n}\n\nOasType.templates = defaultTemplates\n","/* eslint-disable no-empty-pattern */\n/* eslint-disable @typescript-eslint/ban-types */\nimport transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\nimport { Editor, File, useApp } from '@kubb/react'\nimport { Oas, Schema } from '@kubb/swagger/components'\nimport { useOas, useOperation, useOperationManager } from '@kubb/swagger/hooks'\n\nimport { SchemaGenerator } from '../SchemaGenerator.tsx'\n\nimport type { KubbFile } from '@kubb/core'\nimport type { ts } from '@kubb/parser'\nimport type { OperationSchema as OperationSchemaType } from '@kubb/swagger'\nimport type { OperationSchemas } from '@kubb/swagger'\nimport type { Operation } from '@kubb/swagger/oas'\nimport type { ReactNode } from 'react'\nimport type { FileMeta, PluginOptions } from '../types.ts'\n\ntype Props = {}\n\nfunction printCombinedSchema(name: string, operation: Operation, schemas: OperationSchemas): string {\n const properties: Record<string, ts.TypeNode> = {\n response: factory.createTypeReferenceNode(factory.createIdentifier(schemas.response.name), undefined),\n }\n\n if (schemas.request) {\n properties['request'] = factory.createTypeReferenceNode(factory.createIdentifier(schemas.request.name), undefined)\n }\n\n if (schemas.pathParams) {\n properties['pathParams'] = factory.createTypeReferenceNode(factory.createIdentifier(schemas.pathParams.name), undefined)\n }\n\n if (schemas.queryParams) {\n properties['queryParams'] = factory.createTypeReferenceNode(factory.createIdentifier(schemas.queryParams.name), undefined)\n }\n\n if (schemas.headerParams) {\n properties['headerParams'] = factory.createTypeReferenceNode(factory.createIdentifier(schemas.headerParams.name), undefined)\n }\n\n if (schemas.errors) {\n properties['errors'] = factory.createUnionDeclaration({\n nodes: schemas.errors.map((error) => {\n return factory.createTypeReferenceNode(factory.createIdentifier(error.name), undefined)\n }),\n })!\n }\n\n const namespaceNode = factory.createTypeAliasDeclaration({\n name: operation.method === 'get' ? `${name}Query` : `${name}Mutation`,\n type: factory.createTypeLiteralNode(\n Object.keys(properties)\n .map((key) => {\n const type = properties[key]\n if (!type) {\n return undefined\n }\n\n return factory.createPropertySignature({\n name: transformers.pascalCase(key),\n type,\n })\n })\n .filter(Boolean),\n ),\n modifiers: [factory.modifiers.export],\n })\n\n return print(namespaceNode)\n}\n\nexport function OperationSchema({}: Props): ReactNode {\n return <></>\n}\n\ntype FileProps = {}\n\nOperationSchema.File = function ({}: FileProps): ReactNode {\n const { pluginManager, plugin, mode } = useApp<PluginOptions>()\n const oas = useOas()\n const { getSchemas, getFile, getName } = useOperationManager()\n const operation = useOperation()\n\n const file = getFile(operation)\n const schemas = getSchemas(operation)\n const factoryName = getName(operation, { type: 'type' })\n const generator = new SchemaGenerator(plugin.options, {\n oas,\n plugin,\n pluginManager,\n mode,\n })\n\n const items = [schemas.pathParams, schemas.queryParams, schemas.headerParams, schemas.statusCodes, schemas.request, schemas.response].flat().filter(Boolean)\n\n const mapItem = ({ name, schema: object, ...options }: OperationSchemaType, i: number) => {\n return (\n <Oas.Schema key={i} generator={generator} name={name} object={object}>\n {mode === 'split' && <Schema.Imports isTypeOnly />}\n <File.Source>\n <Schema.Source options={options} />\n </File.Source>\n </Oas.Schema>\n )\n }\n\n return (\n <Editor language=\"typescript\">\n <File<FileMeta> baseName={file.baseName} path={file.path} meta={file.meta}>\n {items.map(mapItem)}\n\n <File.Source>{printCombinedSchema(factoryName, operation, schemas)}</File.Source>\n </File>\n </Editor>\n )\n}\n","import { App, createRoot } from '@kubb/react'\nimport { SchemaGenerator as Generator } from '@kubb/swagger'\nimport { pluginKey as swaggerTypeScriptPluginKey } from '@kubb/swagger-ts'\nimport { Oas, Schema } from '@kubb/swagger/components'\n\nimport { pluginKey } from './plugin.ts'\nimport { typeParser } from './typeParser.ts'\n\nimport type { SchemaGeneratorBuildOptions, SchemaMethodResult, Schema as SchemaType } from '@kubb/swagger'\nimport type { SchemaObject } from '@kubb/swagger/oas'\nimport type { FileMeta, PluginOptions } from './types.ts'\n\nexport class SchemaGenerator extends Generator<PluginOptions['resolvedOptions'], PluginOptions> {\n async schema(name: string, object: SchemaObject): SchemaMethodResult<FileMeta> {\n const { oas, pluginManager, mode, plugin, output } = this.context\n\n const root = createRoot({\n logger: pluginManager.logger,\n })\n\n root.render(\n <App pluginManager={pluginManager} plugin={plugin} mode={mode}>\n <Oas oas={oas}>\n <Oas.Schema generator={this} name={name} object={object}>\n <Schema.File isTypeOnly output={output} />\n </Oas.Schema>\n </Oas>\n </App>,\n )\n\n return root.files\n }\n // TODO convert to a react component called `Schema.Parser` with props parser as part of the SchemaContext\n getSource(name: string, schemas: SchemaType[], { keysToOmit, description }: SchemaGeneratorBuildOptions = {}): string[] {\n const texts: string[] = []\n\n const resolvedName = this.context.pluginManager.resolveName({\n name,\n pluginKey,\n type: 'function',\n })\n const resvoledTypeName = this.context.pluginManager.resolveName({\n name,\n pluginKey: swaggerTypeScriptPluginKey,\n type: 'type',\n })\n\n const typeOutput = typeParser(schemas, {\n name: resolvedName,\n typeName: resvoledTypeName,\n description,\n enumType: this.options.enumType || 'asConst',\n optionalType: this.options.optionalType,\n keysToOmit,\n })\n\n texts.push(typeOutput)\n\n return texts\n }\n /**\n * @deprecated only used for testing\n */\n\n buildSource(name: string, schema: SchemaObject, options: SchemaGeneratorBuildOptions = {}): string[] {\n const schemas = this.buildSchemas(schema, name)\n\n return this.getSource(name, schemas, options)\n }\n}\n","import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\nimport { SchemaGenerator, isKeyword, schemaKeywords } from '@kubb/swagger'\n\nimport type { ts } from '@kubb/parser'\nimport type { Schema, SchemaKeywordMapper, SchemaMapper } from '@kubb/swagger'\n\nexport const typeKeywordMapper = {\n any: () => factory.keywordTypeNodes.any,\n unknown: () => factory.keywordTypeNodes.unknown,\n number: () => factory.keywordTypeNodes.number,\n integer: () => factory.keywordTypeNodes.number,\n object: (nodes?: ts.TypeElement[]) => {\n if (!nodes) {\n return factory.keywordTypeNodes.object\n }\n\n return factory.createTypeLiteralNode(nodes)\n },\n string: () => factory.keywordTypeNodes.string,\n boolean: () => factory.keywordTypeNodes.boolean,\n undefined: () => factory.keywordTypeNodes.undefined,\n nullable: undefined,\n null: () => factory.keywordTypeNodes.null,\n nullish: undefined,\n array: (nodes?: ts.TypeNode[]) => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createArrayDeclaration({ nodes })\n },\n tuple: (nodes?: ts.TypeNode[]) => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createTupleTypeNode(nodes)\n },\n enum: (name?: string) => {\n if (!name) {\n return undefined\n }\n\n return factory.createTypeReferenceNode(name, undefined)\n },\n union: (nodes?: ts.TypeNode[]) => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createUnionDeclaration({\n withParentheses: true,\n nodes,\n })\n },\n const: (name?: string | number, format?: 'string' | 'number') => {\n if (!name) {\n return undefined\n }\n\n if (format === 'number') {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(name))\n }\n\n return factory.createLiteralTypeNode(factory.createStringLiteral(name.toString()))\n },\n datetime: () => factory.keywordTypeNodes.string,\n date: () => factory.createTypeReferenceNode(factory.createIdentifier('Date')),\n uuid: undefined,\n url: undefined,\n strict: undefined,\n default: undefined,\n and: (nodes?: ts.TypeNode[]) => {\n if (!nodes) {\n return undefined\n }\n\n return factory.createIntersectionDeclaration({\n withParentheses: true,\n nodes,\n })\n },\n describe: undefined,\n min: undefined,\n max: undefined,\n optional: undefined,\n matches: undefined,\n email: undefined,\n firstName: undefined,\n lastName: undefined,\n password: undefined,\n phone: undefined,\n readOnly: undefined,\n ref: (propertyName?: string) => {\n if (!propertyName) {\n return undefined\n }\n\n return factory.createTypeReferenceNode(propertyName, undefined)\n },\n blob: () => factory.createTypeReferenceNode('Blob', []),\n deprecated: undefined,\n example: undefined,\n type: undefined,\n format: undefined,\n catchall: undefined,\n} satisfies SchemaMapper<ts.Node | null | undefined>\n\ntype ParserOptions = {\n name: string\n typeName?: string\n description?: string\n /**\n * @default `'questionToken'`\n */\n optionalType: 'questionToken' | 'undefined' | 'questionTokenAndUndefined'\n /**\n * @default `'asConst'`\n */\n enumType: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal'\n keysToOmit?: string[]\n mapper?: SchemaMapper\n}\n\nexport function parseTypeMeta(parent: Schema | undefined, current: Schema, options: ParserOptions): ts.Node | null | undefined {\n const value = typeKeywordMapper[current.keyword as keyof typeof typeKeywordMapper]\n\n if (!value) {\n return undefined\n }\n\n if (isKeyword(current, schemaKeywords.union)) {\n return typeKeywordMapper.union(current.args.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean) as ts.TypeNode[])\n }\n\n if (isKeyword(current, schemaKeywords.and)) {\n return typeKeywordMapper.and(current.args.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean) as ts.TypeNode[])\n }\n\n if (isKeyword(current, schemaKeywords.array)) {\n return typeKeywordMapper.array(current.args.items.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean) as ts.TypeNode[])\n }\n\n if (isKeyword(current, schemaKeywords.enum)) {\n return typeKeywordMapper.enum(current.args.typeName)\n }\n\n if (isKeyword(current, schemaKeywords.ref)) {\n return typeKeywordMapper.ref(current.args.name)\n }\n\n if (isKeyword(current, schemaKeywords.blob)) {\n return value()\n }\n\n if (isKeyword(current, schemaKeywords.tuple)) {\n return typeKeywordMapper.tuple(current.args.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean) as ts.TypeNode[])\n }\n\n if (isKeyword(current, schemaKeywords.const)) {\n return typeKeywordMapper.const(current.args.name, current.args.format)\n }\n\n if (isKeyword(current, schemaKeywords.object)) {\n const properties = Object.entries(current.args?.properties || {})\n .filter((item) => {\n const schemas = item[1]\n return schemas && typeof schemas.map === 'function'\n })\n .map((item) => {\n const name = item[0]\n const schemas = item[1]\n\n const isNullish = schemas.some((schema) => schema.keyword === schemaKeywords.nullish)\n const isNullable = schemas.some((schema) => schema.keyword === schemaKeywords.nullable)\n const isOptional = schemas.some((schema) => schema.keyword === schemaKeywords.optional)\n const isReadonly = schemas.some((schema) => schema.keyword === schemaKeywords.readOnly)\n const describeSchema = schemas.find((schema) => schema.keyword === schemaKeywords.describe) as SchemaKeywordMapper['describe'] | undefined\n const deprecatedSchema = schemas.find((schema) => schema.keyword === schemaKeywords.deprecated) as SchemaKeywordMapper['deprecated'] | undefined\n const defaultSchema = schemas.find((schema) => schema.keyword === schemaKeywords.default) as SchemaKeywordMapper['default'] | undefined\n const exampleSchema = schemas.find((schema) => schema.keyword === schemaKeywords.example) as SchemaKeywordMapper['example'] | undefined\n const typeSchema = schemas.find((schema) => schema.keyword === schemaKeywords.type) as SchemaKeywordMapper['type'] | undefined\n const formatSchema = schemas.find((schema) => schema.keyword === schemaKeywords.format) as SchemaKeywordMapper['format'] | undefined\n\n let type = schemas.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean)[0] as ts.TypeNode\n\n if (isNullable) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.null],\n }) as ts.TypeNode\n }\n\n if (isNullish && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.undefined],\n }) as ts.TypeNode\n }\n\n if (isOptional && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.undefined],\n }) as ts.TypeNode\n }\n\n const propertySignature = factory.createPropertySignature({\n questionToken: isOptional && ['questionToken', 'questionTokenAndUndefined'].includes(options.optionalType as string),\n name,\n type,\n readOnly: isReadonly,\n })\n\n return factory.appendJSDocToNode({\n node: propertySignature,\n comments: [\n describeSchema ? `@description ${transformers.jsStringEscape(describeSchema.args)}` : undefined,\n deprecatedSchema ? '@deprecated' : undefined,\n defaultSchema ? `@default ${defaultSchema.args}` : undefined,\n exampleSchema ? `@example ${exampleSchema.args}` : undefined,\n typeSchema ? `@type ${typeSchema.args}${!isOptional ? '' : ' | undefined'} ${formatSchema?.args || ''}` : undefined,\n ].filter(Boolean),\n })\n })\n\n const additionalProperties = current.args?.additionalProperties?.length\n ? factory.createIndexSignature(\n current.args.additionalProperties\n .map((schema) => parseTypeMeta(current, schema, options))\n .filter(Boolean)\n .at(0) as ts.TypeNode,\n )\n : undefined\n\n return typeKeywordMapper.object([...properties, additionalProperties].filter(Boolean))\n }\n\n if (current.keyword in typeKeywordMapper) {\n return value()\n }\n\n return undefined\n}\n\nexport function typeParser(schemas: Schema[], options: ParserOptions): string {\n const nodes: ts.Node[] = []\n const extraNodes: ts.Node[] = []\n\n if (!schemas.length) {\n return ''\n }\n\n const isNullish = schemas.some((item) => item.keyword === schemaKeywords.nullish)\n const isNullable = schemas.some((item) => item.keyword === schemaKeywords.nullable)\n const isOptional = schemas.some((item) => item.keyword === schemaKeywords.optional)\n\n let type =\n (schemas\n .map((schema) => parseTypeMeta(undefined, schema, options))\n .filter(Boolean)\n .at(0) as ts.TypeNode) || typeKeywordMapper.undefined()\n\n if (isNullable) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.null],\n }) as ts.TypeNode\n }\n\n if (isNullish && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.undefined],\n }) as ts.TypeNode\n }\n\n if (isOptional && ['undefined', 'questionTokenAndUndefined'].includes(options.optionalType as string)) {\n type = factory.createUnionDeclaration({\n nodes: [type, factory.keywordTypeNodes.undefined],\n }) as ts.TypeNode\n }\n\n const node = factory.createTypeAliasDeclaration({\n modifiers: [factory.modifiers.export],\n name: options.name,\n type: options.keysToOmit?.length\n ? factory.createOmitDeclaration({\n keys: options.keysToOmit,\n type,\n nonNullable: true,\n })\n : type,\n })\n\n const enumSchemas = SchemaGenerator.deepSearch(schemas, schemaKeywords.enum)\n if (enumSchemas) {\n enumSchemas.forEach((enumSchema) => {\n extraNodes.push(\n ...factory.createEnumDeclaration({\n name: transformers.camelCase(enumSchema.args.name),\n typeName: enumSchema.args.typeName,\n enums: enumSchema.args.items\n .map((item) => (item.value === undefined ? undefined : [transformers.trimQuotes(item.name?.toString()), item.value]))\n .filter(Boolean) as unknown as [string, string][],\n type: options.enumType,\n }),\n )\n })\n }\n\n nodes.push(\n factory.appendJSDocToNode({\n node,\n comments: [options.description ? `@description ${transformers.jsStringEscape(options.description)}` : undefined].filter(Boolean),\n }),\n )\n\n const filterdNodes = nodes.filter(\n (node: ts.Node) =>\n !extraNodes.some(\n (extraNode: ts.Node) => (extraNode as ts.TypeAliasDeclaration)?.name?.escapedText === (node as ts.TypeAliasDeclaration)?.name?.escapedText,\n ),\n )\n\n return print([...extraNodes, ...filterdNodes])\n}\n","import { definePlugin } from './plugin.ts'\n\nexport { definePlugin, pluginKey, pluginName } from './plugin.ts'\nexport type * from './types.ts'\n\n/**\n * @deprecated Use `import { definePlugin } from '@kubb/swagger-ts'`\n */\nconst definePluginDefault = definePlugin\n\nexport default definePluginDefault\n"],"mappings":"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","names":["App","createRoot","Generator","Oas","Template","pluginKey","transformers","print","factory","Editor","File","useApp","Oas","Schema","useOas","node","jsx","SchemaGenerator","Fragment","jsx","jsxs","transformers","print","useApp","useOas","SchemaGenerator","Oas","Schema","File","Editor","jsx","Generator","createRoot","App","Oas","transformers","options","SchemaGenerator"]}
|
package/dist/components.cjs
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
2
2
|
|
3
3
|
|
4
|
-
var
|
4
|
+
var _chunkBINFINBMcjs = require('./chunk-BINFINBM.cjs');
|
5
5
|
|
6
6
|
|
7
7
|
|
8
|
-
exports.OasType =
|
8
|
+
exports.OasType = _chunkBINFINBMcjs.OasType; exports.OperationSchema = _chunkBINFINBMcjs.OperationSchema;
|
9
9
|
//# sourceMappingURL=components.cjs.map
|
package/dist/components.d.cts
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
import { OasTypes } from '@kubb/swagger/oas';
|
2
2
|
import { ReactNode } from 'react';
|
3
|
-
import { KubbFile } from '@kubb/core';
|
4
3
|
|
5
4
|
type TemplateProps = {
|
6
5
|
/**
|
@@ -41,10 +40,8 @@ type FileProps$1 = {
|
|
41
40
|
type Props = {};
|
42
41
|
declare function OperationSchema({}: Props): ReactNode;
|
43
42
|
declare namespace OperationSchema {
|
44
|
-
var File: ({
|
43
|
+
var File: ({}: FileProps) => ReactNode;
|
45
44
|
}
|
46
|
-
type FileProps = {
|
47
|
-
mode: KubbFile.Mode | undefined;
|
48
|
-
};
|
45
|
+
type FileProps = {};
|
49
46
|
|
50
47
|
export { OasType, OperationSchema };
|
package/dist/components.d.ts
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
import { OasTypes } from '@kubb/swagger/oas';
|
2
2
|
import { ReactNode } from 'react';
|
3
|
-
import { KubbFile } from '@kubb/core';
|
4
3
|
|
5
4
|
type TemplateProps = {
|
6
5
|
/**
|
@@ -41,10 +40,8 @@ type FileProps$1 = {
|
|
41
40
|
type Props = {};
|
42
41
|
declare function OperationSchema({}: Props): ReactNode;
|
43
42
|
declare namespace OperationSchema {
|
44
|
-
var File: ({
|
43
|
+
var File: ({}: FileProps) => ReactNode;
|
45
44
|
}
|
46
|
-
type FileProps = {
|
47
|
-
mode: KubbFile.Mode | undefined;
|
48
|
-
};
|
45
|
+
type FileProps = {};
|
49
46
|
|
50
47
|
export { OasType, OperationSchema };
|
package/dist/components.js
CHANGED
package/dist/index.cjs
CHANGED
@@ -3,11 +3,11 @@
|
|
3
3
|
|
4
4
|
|
5
5
|
|
6
|
-
var
|
6
|
+
var _chunkBINFINBMcjs = require('./chunk-BINFINBM.cjs');
|
7
7
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
11
|
|
12
|
-
exports.default =
|
12
|
+
exports.default = _chunkBINFINBMcjs.src_default; exports.definePlugin = _chunkBINFINBMcjs.definePlugin; exports.pluginKey = _chunkBINFINBMcjs.pluginKey; exports.pluginName = _chunkBINFINBMcjs.pluginName;
|
13
13
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.d.cts
CHANGED
@@ -58,7 +58,7 @@ type Options = {
|
|
58
58
|
/**
|
59
59
|
* Array containing override parameters to override `options` based on tags/operations/methods/paths.
|
60
60
|
*/
|
61
|
-
override?: Array<Override<
|
61
|
+
override?: Array<Override<ResolvedOptions>>;
|
62
62
|
/**
|
63
63
|
* Choose to use `enum` or `as const` for enums
|
64
64
|
* @default 'asConst'
|
package/dist/index.d.ts
CHANGED
@@ -58,7 +58,7 @@ type Options = {
|
|
58
58
|
/**
|
59
59
|
* Array containing override parameters to override `options` based on tags/operations/methods/paths.
|
60
60
|
*/
|
61
|
-
override?: Array<Override<
|
61
|
+
override?: Array<Override<ResolvedOptions>>;
|
62
62
|
/**
|
63
63
|
* Choose to use `enum` or `as const` for enums
|
64
64
|
* @default 'asConst'
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@kubb/swagger-ts",
|
3
|
-
"version": "2.12.
|
3
|
+
"version": "2.12.2",
|
4
4
|
"description": "Generator swagger-ts",
|
5
5
|
"keywords": [
|
6
6
|
"typescript",
|
@@ -59,11 +59,11 @@
|
|
59
59
|
"hotscript": "^1.0.13",
|
60
60
|
"json-schema-to-ts": "^3.0.1",
|
61
61
|
"ts-toolbelt": "^9.6.0",
|
62
|
-
"@kubb/core": "2.12.
|
63
|
-
"@kubb/parser": "2.12.
|
64
|
-
"@kubb/react": "2.12.
|
65
|
-
"@kubb/swagger": "2.12.
|
66
|
-
"@kubb/types": "2.12.
|
62
|
+
"@kubb/core": "2.12.2",
|
63
|
+
"@kubb/parser": "2.12.2",
|
64
|
+
"@kubb/react": "2.12.2",
|
65
|
+
"@kubb/swagger": "2.12.2",
|
66
|
+
"@kubb/types": "2.12.2"
|
67
67
|
},
|
68
68
|
"devDependencies": {
|
69
69
|
"@types/react": "^18.2.73",
|
@@ -72,12 +72,12 @@
|
|
72
72
|
"prettier": "^3.2.5",
|
73
73
|
"react": "^18.2.0",
|
74
74
|
"tsup": "^8.0.2",
|
75
|
-
"@kubb/eslint-config": "1.1.8",
|
76
75
|
"@kubb/ts-config": "0.1.0",
|
77
|
-
"@kubb/tsup-config": "1.1.8"
|
76
|
+
"@kubb/tsup-config": "1.1.8",
|
77
|
+
"@kubb/eslint-config": "1.1.8"
|
78
78
|
},
|
79
79
|
"peerDependencies": {
|
80
|
-
"@kubb/react": "2.12.
|
80
|
+
"@kubb/react": "2.12.2"
|
81
81
|
},
|
82
82
|
"packageManager": "pnpm@8.3.0",
|
83
83
|
"engines": {
|
@@ -1,28 +1,28 @@
|
|
1
|
-
import { createRoot } from '@kubb/react'
|
1
|
+
import { App, createRoot } from '@kubb/react'
|
2
2
|
import { OperationGenerator as Generator } from '@kubb/swagger'
|
3
3
|
import { Oas } from '@kubb/swagger/components'
|
4
4
|
|
5
5
|
import { OasType } from './components/OasType.tsx'
|
6
6
|
import { OperationSchema } from './components/OperationSchema.tsx'
|
7
7
|
|
8
|
-
import type { AppContextProps } from '@kubb/react'
|
9
8
|
import type { OperationMethodResult } from '@kubb/swagger'
|
10
9
|
import type { Operation } from '@kubb/swagger/oas'
|
11
10
|
import type { FileMeta, PluginOptions } from './types.ts'
|
12
11
|
|
13
12
|
export class OperationGenerator extends Generator<PluginOptions['resolvedOptions'], PluginOptions> {
|
14
13
|
async all(operations: Operation[]): OperationMethodResult<FileMeta> {
|
15
|
-
const { oas, pluginManager, plugin } = this.context
|
14
|
+
const { oas, pluginManager, plugin, mode } = this.context
|
16
15
|
|
17
|
-
const root = createRoot
|
16
|
+
const root = createRoot({
|
18
17
|
logger: pluginManager.logger,
|
19
18
|
})
|
20
19
|
|
21
20
|
root.render(
|
22
|
-
<
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
<App pluginManager={pluginManager} plugin={plugin} mode={mode}>
|
22
|
+
<Oas oas={oas} operations={operations} getOperationSchemas={(...props) => this.getSchemas(...props)}>
|
23
|
+
{plugin.options.oasType && <OasType.File name="oas" typeName="Oas" />}
|
24
|
+
</Oas>
|
25
|
+
</App>,
|
26
26
|
)
|
27
27
|
|
28
28
|
return root.files
|
@@ -31,16 +31,17 @@ export class OperationGenerator extends Generator<PluginOptions['resolvedOptions
|
|
31
31
|
async operation(operation: Operation, options: PluginOptions['resolvedOptions']): OperationMethodResult<FileMeta> {
|
32
32
|
const { oas, pluginManager, plugin, mode } = this.context
|
33
33
|
|
34
|
-
const root = createRoot
|
34
|
+
const root = createRoot({
|
35
35
|
logger: pluginManager.logger,
|
36
36
|
})
|
37
37
|
root.render(
|
38
|
-
<
|
39
|
-
<Oas
|
40
|
-
<
|
41
|
-
|
42
|
-
|
43
|
-
|
38
|
+
<App pluginManager={pluginManager} plugin={{ ...plugin, options }} mode={mode}>
|
39
|
+
<Oas oas={oas} operations={[operation]} getOperationSchemas={(...props) => this.getSchemas(...props)}>
|
40
|
+
<Oas.Operation operation={operation}>
|
41
|
+
<OperationSchema.File />
|
42
|
+
</Oas.Operation>
|
43
|
+
</Oas>
|
44
|
+
</App>,
|
44
45
|
)
|
45
46
|
|
46
47
|
return root.files
|
package/src/SchemaGenerator.tsx
CHANGED
@@ -1,13 +1,12 @@
|
|
1
|
-
import { createRoot } from '@kubb/react'
|
1
|
+
import { App, createRoot } from '@kubb/react'
|
2
2
|
import { SchemaGenerator as Generator } from '@kubb/swagger'
|
3
|
-
import { Oas, Schema } from '@kubb/swagger/components'
|
4
3
|
import { pluginKey as swaggerTypeScriptPluginKey } from '@kubb/swagger-ts'
|
4
|
+
import { Oas, Schema } from '@kubb/swagger/components'
|
5
5
|
|
6
6
|
import { pluginKey } from './plugin.ts'
|
7
7
|
import { typeParser } from './typeParser.ts'
|
8
8
|
|
9
|
-
import type {
|
10
|
-
import type { Schema as SchemaType, SchemaGeneratorBuildOptions, SchemaMethodResult } from '@kubb/swagger'
|
9
|
+
import type { SchemaGeneratorBuildOptions, SchemaMethodResult, Schema as SchemaType } from '@kubb/swagger'
|
11
10
|
import type { SchemaObject } from '@kubb/swagger/oas'
|
12
11
|
import type { FileMeta, PluginOptions } from './types.ts'
|
13
12
|
|
@@ -15,17 +14,18 @@ export class SchemaGenerator extends Generator<PluginOptions['resolvedOptions'],
|
|
15
14
|
async schema(name: string, object: SchemaObject): SchemaMethodResult<FileMeta> {
|
16
15
|
const { oas, pluginManager, mode, plugin, output } = this.context
|
17
16
|
|
18
|
-
const root = createRoot
|
17
|
+
const root = createRoot({
|
19
18
|
logger: pluginManager.logger,
|
20
19
|
})
|
21
20
|
|
22
21
|
root.render(
|
23
|
-
<
|
24
|
-
<Oas
|
25
|
-
<Schema
|
26
|
-
|
27
|
-
|
28
|
-
|
22
|
+
<App pluginManager={pluginManager} plugin={plugin} mode={mode}>
|
23
|
+
<Oas oas={oas}>
|
24
|
+
<Oas.Schema generator={this} name={name} object={object}>
|
25
|
+
<Schema.File isTypeOnly output={output} />
|
26
|
+
</Oas.Schema>
|
27
|
+
</Oas>
|
28
|
+
</App>,
|
29
29
|
)
|
30
30
|
|
31
31
|
return root.files
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Editor, File, Type,
|
1
|
+
import { Editor, File, Type, useApp } from '@kubb/react'
|
2
2
|
import { useOas } from '@kubb/swagger/hooks'
|
3
3
|
|
4
4
|
import type { OasTypes } from '@kubb/swagger/oas'
|
@@ -53,8 +53,10 @@ type FileProps = {
|
|
53
53
|
}
|
54
54
|
|
55
55
|
OasType.File = function ({ name, typeName, templates = defaultTemplates }: FileProps): ReactNode {
|
56
|
-
const {
|
57
|
-
|
56
|
+
const {
|
57
|
+
pluginManager,
|
58
|
+
plugin: { key: pluginKey },
|
59
|
+
} = useApp<PluginOptions>()
|
58
60
|
const file = pluginManager.getFile({ name, extName: '.ts', pluginKey })
|
59
61
|
|
60
62
|
const Template = templates.default
|
@@ -3,7 +3,7 @@
|
|
3
3
|
import transformers from '@kubb/core/transformers'
|
4
4
|
import { print } from '@kubb/parser'
|
5
5
|
import * as factory from '@kubb/parser/factory'
|
6
|
-
import { Editor, File,
|
6
|
+
import { Editor, File, useApp } from '@kubb/react'
|
7
7
|
import { Oas, Schema } from '@kubb/swagger/components'
|
8
8
|
import { useOas, useOperation, useOperationManager } from '@kubb/swagger/hooks'
|
9
9
|
|
@@ -75,14 +75,10 @@ export function OperationSchema({}: Props): ReactNode {
|
|
75
75
|
return <></>
|
76
76
|
}
|
77
77
|
|
78
|
-
type FileProps = {
|
79
|
-
mode: KubbFile.Mode | undefined
|
80
|
-
}
|
81
|
-
|
82
|
-
OperationSchema.File = function ({ mode = 'directory' }: FileProps): ReactNode {
|
83
|
-
const plugin = usePlugin<PluginOptions>()
|
78
|
+
type FileProps = {}
|
84
79
|
|
85
|
-
|
80
|
+
OperationSchema.File = function ({}: FileProps): ReactNode {
|
81
|
+
const { pluginManager, plugin, mode } = useApp<PluginOptions>()
|
86
82
|
const oas = useOas()
|
87
83
|
const { getSchemas, getFile, getName } = useOperationManager()
|
88
84
|
const operation = useOperation()
|
@@ -94,6 +90,7 @@ OperationSchema.File = function ({ mode = 'directory' }: FileProps): ReactNode {
|
|
94
90
|
oas,
|
95
91
|
plugin,
|
96
92
|
pluginManager,
|
93
|
+
mode,
|
97
94
|
})
|
98
95
|
|
99
96
|
const items = [schemas.pathParams, schemas.queryParams, schemas.headerParams, schemas.statusCodes, schemas.request, schemas.response].flat().filter(Boolean)
|
@@ -101,7 +98,7 @@ OperationSchema.File = function ({ mode = 'directory' }: FileProps): ReactNode {
|
|
101
98
|
const mapItem = ({ name, schema: object, ...options }: OperationSchemaType, i: number) => {
|
102
99
|
return (
|
103
100
|
<Oas.Schema key={i} generator={generator} name={name} object={object}>
|
104
|
-
{mode === '
|
101
|
+
{mode === 'split' && <Schema.Imports isTypeOnly />}
|
105
102
|
<File.Source>
|
106
103
|
<Schema.Source options={options} />
|
107
104
|
</File.Source>
|
package/src/plugin.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import path from 'node:path'
|
2
2
|
|
3
|
-
import {
|
3
|
+
import { FileManager, PluginManager, createPlugin } from '@kubb/core'
|
4
4
|
import { camelCase, pascalCase } from '@kubb/core/transformers'
|
5
5
|
import { renderTemplate } from '@kubb/core/utils'
|
6
6
|
import { pluginName as swaggerPluginName } from '@kubb/swagger'
|
@@ -49,7 +49,7 @@ export const definePlugin = createPlugin<PluginOptions>((options) => {
|
|
49
49
|
const root = path.resolve(this.config.root, this.config.output.path)
|
50
50
|
const mode = pathMode ?? FileManager.getMode(path.resolve(root, output.path))
|
51
51
|
|
52
|
-
if (mode === '
|
52
|
+
if (mode === 'single') {
|
53
53
|
/**
|
54
54
|
* when output is a file then we will always append to the same file(output file), see fileManager.addOrAppend
|
55
55
|
* Other plugins then need to call addOrAppend instead of just add from the fileManager class
|
@@ -126,6 +126,7 @@ export const definePlugin = createPlugin<PluginOptions>((options) => {
|
|
126
126
|
root,
|
127
127
|
output,
|
128
128
|
meta: { pluginKey: this.plugin.key },
|
129
|
+
logger: this.logger,
|
129
130
|
})
|
130
131
|
},
|
131
132
|
}
|
package/src/typeParser.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import transformers from '@kubb/core/transformers'
|
2
2
|
import { print } from '@kubb/parser'
|
3
3
|
import * as factory from '@kubb/parser/factory'
|
4
|
-
import {
|
4
|
+
import { SchemaGenerator, isKeyword, schemaKeywords } from '@kubb/swagger'
|
5
5
|
|
6
6
|
import type { ts } from '@kubb/parser'
|
7
7
|
import type { Schema, SchemaKeywordMapper, SchemaMapper } from '@kubb/swagger'
|
@@ -18,7 +18,6 @@ export const typeKeywordMapper = {
|
|
18
18
|
|
19
19
|
return factory.createTypeLiteralNode(nodes)
|
20
20
|
},
|
21
|
-
lazy: undefined,
|
22
21
|
string: () => factory.keywordTypeNodes.string,
|
23
22
|
boolean: () => factory.keywordTypeNodes.boolean,
|
24
23
|
undefined: () => factory.keywordTypeNodes.undefined,
|
@@ -107,7 +106,7 @@ export const typeKeywordMapper = {
|
|
107
106
|
type: undefined,
|
108
107
|
format: undefined,
|
109
108
|
catchall: undefined,
|
110
|
-
} satisfies SchemaMapper<
|
109
|
+
} satisfies SchemaMapper<ts.Node | null | undefined>
|
111
110
|
|
112
111
|
type ParserOptions = {
|
113
112
|
name: string
|
@@ -122,61 +121,50 @@ type ParserOptions = {
|
|
122
121
|
*/
|
123
122
|
enumType: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal'
|
124
123
|
keysToOmit?: string[]
|
125
|
-
mapper?:
|
124
|
+
mapper?: SchemaMapper
|
126
125
|
}
|
127
126
|
|
128
|
-
export function parseTypeMeta(
|
129
|
-
const
|
130
|
-
const value = mapper[item.keyword as keyof typeof mapper]
|
127
|
+
export function parseTypeMeta(parent: Schema | undefined, current: Schema, options: ParserOptions): ts.Node | null | undefined {
|
128
|
+
const value = typeKeywordMapper[current.keyword as keyof typeof typeKeywordMapper]
|
131
129
|
|
132
130
|
if (!value) {
|
133
131
|
return undefined
|
134
132
|
}
|
135
133
|
|
136
|
-
if (isKeyword(
|
137
|
-
|
138
|
-
return value(item.args.map((orItem) => parseTypeMeta(orItem, options)).filter(Boolean) as ts.TypeNode[])
|
134
|
+
if (isKeyword(current, schemaKeywords.union)) {
|
135
|
+
return typeKeywordMapper.union(current.args.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean) as ts.TypeNode[])
|
139
136
|
}
|
140
137
|
|
141
|
-
if (isKeyword(
|
142
|
-
|
143
|
-
return value(item.args.map((orItem) => parseTypeMeta(orItem, options)).filter(Boolean) as ts.TypeNode[])
|
138
|
+
if (isKeyword(current, schemaKeywords.and)) {
|
139
|
+
return typeKeywordMapper.and(current.args.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean) as ts.TypeNode[])
|
144
140
|
}
|
145
141
|
|
146
|
-
if (isKeyword(
|
147
|
-
|
148
|
-
return value(item.args.items.map((orItem) => parseTypeMeta(orItem, options)).filter(Boolean) as ts.TypeNode[])
|
142
|
+
if (isKeyword(current, schemaKeywords.array)) {
|
143
|
+
return typeKeywordMapper.array(current.args.items.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean) as ts.TypeNode[])
|
149
144
|
}
|
150
145
|
|
151
|
-
if (isKeyword(
|
152
|
-
|
153
|
-
return value(item.args.typeName)
|
146
|
+
if (isKeyword(current, schemaKeywords.enum)) {
|
147
|
+
return typeKeywordMapper.enum(current.args.typeName)
|
154
148
|
}
|
155
149
|
|
156
|
-
if (isKeyword(
|
157
|
-
|
158
|
-
return value(item.args.name)
|
150
|
+
if (isKeyword(current, schemaKeywords.ref)) {
|
151
|
+
return typeKeywordMapper.ref(current.args.name)
|
159
152
|
}
|
160
153
|
|
161
|
-
if (isKeyword(
|
154
|
+
if (isKeyword(current, schemaKeywords.blob)) {
|
162
155
|
return value()
|
163
156
|
}
|
164
157
|
|
165
|
-
if (isKeyword(
|
166
|
-
|
167
|
-
return value(item.args.map((tupleItem) => parseTypeMeta(tupleItem, options)).filter(Boolean) as ts.TypeNode[])
|
158
|
+
if (isKeyword(current, schemaKeywords.tuple)) {
|
159
|
+
return typeKeywordMapper.tuple(current.args.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean) as ts.TypeNode[])
|
168
160
|
}
|
169
161
|
|
170
|
-
if (isKeyword(
|
171
|
-
|
172
|
-
|
173
|
-
return value(item.args.name, item.args.format)
|
162
|
+
if (isKeyword(current, schemaKeywords.const)) {
|
163
|
+
return typeKeywordMapper.const(current.args.name, current.args.format)
|
174
164
|
}
|
175
165
|
|
176
|
-
if (isKeyword(
|
177
|
-
const
|
178
|
-
|
179
|
-
const properties = Object.entries(item.args?.properties || {})
|
166
|
+
if (isKeyword(current, schemaKeywords.object)) {
|
167
|
+
const properties = Object.entries(current.args?.properties || {})
|
180
168
|
.filter((item) => {
|
181
169
|
const schemas = item[1]
|
182
170
|
return schemas && typeof schemas.map === 'function'
|
@@ -185,18 +173,18 @@ export function parseTypeMeta(item: Schema, options: ParserOptions): ts.Node | n
|
|
185
173
|
const name = item[0]
|
186
174
|
const schemas = item[1]
|
187
175
|
|
188
|
-
const isNullish = schemas.some((
|
189
|
-
const isNullable = schemas.some((
|
190
|
-
const isOptional = schemas.some((
|
191
|
-
const isReadonly = schemas.some((
|
192
|
-
const describeSchema = schemas.find((
|
193
|
-
const deprecatedSchema = schemas.find((
|
194
|
-
const defaultSchema = schemas.find((
|
195
|
-
const exampleSchema = schemas.find((
|
196
|
-
const typeSchema = schemas.find((
|
197
|
-
const formatSchema = schemas.find((
|
176
|
+
const isNullish = schemas.some((schema) => schema.keyword === schemaKeywords.nullish)
|
177
|
+
const isNullable = schemas.some((schema) => schema.keyword === schemaKeywords.nullable)
|
178
|
+
const isOptional = schemas.some((schema) => schema.keyword === schemaKeywords.optional)
|
179
|
+
const isReadonly = schemas.some((schema) => schema.keyword === schemaKeywords.readOnly)
|
180
|
+
const describeSchema = schemas.find((schema) => schema.keyword === schemaKeywords.describe) as SchemaKeywordMapper['describe'] | undefined
|
181
|
+
const deprecatedSchema = schemas.find((schema) => schema.keyword === schemaKeywords.deprecated) as SchemaKeywordMapper['deprecated'] | undefined
|
182
|
+
const defaultSchema = schemas.find((schema) => schema.keyword === schemaKeywords.default) as SchemaKeywordMapper['default'] | undefined
|
183
|
+
const exampleSchema = schemas.find((schema) => schema.keyword === schemaKeywords.example) as SchemaKeywordMapper['example'] | undefined
|
184
|
+
const typeSchema = schemas.find((schema) => schema.keyword === schemaKeywords.type) as SchemaKeywordMapper['type'] | undefined
|
185
|
+
const formatSchema = schemas.find((schema) => schema.keyword === schemaKeywords.format) as SchemaKeywordMapper['format'] | undefined
|
198
186
|
|
199
|
-
let type = schemas.map((
|
187
|
+
let type = schemas.map((schema) => parseTypeMeta(current, schema, options)).filter(Boolean)[0] as ts.TypeNode
|
200
188
|
|
201
189
|
if (isNullable) {
|
202
190
|
type = factory.createUnionDeclaration({
|
@@ -235,19 +223,19 @@ export function parseTypeMeta(item: Schema, options: ParserOptions): ts.Node | n
|
|
235
223
|
})
|
236
224
|
})
|
237
225
|
|
238
|
-
const additionalProperties =
|
226
|
+
const additionalProperties = current.args?.additionalProperties?.length
|
239
227
|
? factory.createIndexSignature(
|
240
|
-
|
241
|
-
.map((schema) => parseTypeMeta(schema, options))
|
228
|
+
current.args.additionalProperties
|
229
|
+
.map((schema) => parseTypeMeta(current, schema, options))
|
242
230
|
.filter(Boolean)
|
243
231
|
.at(0) as ts.TypeNode,
|
244
232
|
)
|
245
233
|
: undefined
|
246
234
|
|
247
|
-
return
|
235
|
+
return typeKeywordMapper.object([...properties, additionalProperties].filter(Boolean))
|
248
236
|
}
|
249
237
|
|
250
|
-
if (
|
238
|
+
if (current.keyword in typeKeywordMapper) {
|
251
239
|
return value()
|
252
240
|
}
|
253
241
|
|
@@ -268,7 +256,7 @@ export function typeParser(schemas: Schema[], options: ParserOptions): string {
|
|
268
256
|
|
269
257
|
let type =
|
270
258
|
(schemas
|
271
|
-
.map((schema) => parseTypeMeta(schema, options))
|
259
|
+
.map((schema) => parseTypeMeta(undefined, schema, options))
|
272
260
|
.filter(Boolean)
|
273
261
|
.at(0) as ts.TypeNode) || typeKeywordMapper.undefined()
|
274
262
|
|
package/src/types.ts
CHANGED
@@ -51,7 +51,7 @@ export type Options = {
|
|
51
51
|
/**
|
52
52
|
* Array containing override parameters to override `options` based on tags/operations/methods/paths.
|
53
53
|
*/
|
54
|
-
override?: Array<Override<
|
54
|
+
override?: Array<Override<ResolvedOptions>>
|
55
55
|
/**
|
56
56
|
* Choose to use `enum` or `as const` for enums
|
57
57
|
* @default 'asConst'
|