@kubb/plugin-zod 3.0.0-alpha.3 → 3.0.0-alpha.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +13 -4
  2. package/dist/chunk-3ST47CH3.js +237 -0
  3. package/dist/chunk-3ST47CH3.js.map +1 -0
  4. package/dist/chunk-FLFW72FT.cjs +344 -0
  5. package/dist/chunk-FLFW72FT.cjs.map +1 -0
  6. package/dist/chunk-RSWFWAY4.cjs +246 -0
  7. package/dist/chunk-RSWFWAY4.cjs.map +1 -0
  8. package/dist/chunk-UONLSRDV.js +337 -0
  9. package/dist/chunk-UONLSRDV.js.map +1 -0
  10. package/dist/components.cjs +11 -6
  11. package/dist/components.cjs.map +1 -1
  12. package/dist/components.d.cts +20 -19
  13. package/dist/components.d.ts +20 -19
  14. package/dist/components.js +2 -10
  15. package/dist/components.js.map +1 -1
  16. package/dist/generators.cjs +17 -0
  17. package/dist/generators.cjs.map +1 -0
  18. package/dist/generators.d.cts +10 -0
  19. package/dist/generators.d.ts +10 -0
  20. package/dist/generators.js +4 -0
  21. package/dist/generators.js.map +1 -0
  22. package/dist/index.cjs +12 -4
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.cts +4 -137
  25. package/dist/index.d.ts +4 -137
  26. package/dist/index.js +3 -8
  27. package/dist/index.js.map +1 -1
  28. package/dist/types-mos5lUbD.d.cts +113 -0
  29. package/dist/types-mos5lUbD.d.ts +113 -0
  30. package/package.json +19 -21
  31. package/src/components/Operations.tsx +19 -103
  32. package/src/components/Zod.tsx +66 -0
  33. package/src/components/index.ts +1 -2
  34. package/src/generators/__snapshots__/anyof.ts +3 -0
  35. package/src/generators/__snapshots__/createPet.ts +15 -0
  36. package/src/generators/__snapshots__/createPetWithUnknownTypeAny.ts +13 -0
  37. package/src/generators/__snapshots__/createPetWithUnknownTypeUnknown.ts +15 -0
  38. package/src/generators/__snapshots__/deletePet.ts +3 -0
  39. package/src/generators/__snapshots__/discriminator.ts +3 -0
  40. package/src/generators/__snapshots__/enumBooleanLiteral.ts +3 -0
  41. package/src/generators/__snapshots__/enumNamesType.ts +3 -0
  42. package/src/generators/__snapshots__/enumNullable.ts +3 -0
  43. package/src/generators/__snapshots__/enumSingleLiteral.ts +3 -0
  44. package/src/generators/__snapshots__/enumVarNamesType.ts +3 -0
  45. package/src/generators/__snapshots__/example.ts +3 -0
  46. package/src/generators/__snapshots__/getPets.ts +18 -0
  47. package/src/generators/__snapshots__/mixedValueTypeConst.ts +6 -0
  48. package/src/generators/__snapshots__/nullableString.ts +3 -0
  49. package/src/generators/__snapshots__/nullableStringUuid.ts +3 -0
  50. package/src/generators/__snapshots__/nullableStringWithAnyOf.ts +3 -0
  51. package/src/generators/__snapshots__/numberValueConst.ts +6 -0
  52. package/src/generators/__snapshots__/oneof.ts +3 -0
  53. package/src/generators/__snapshots__/operations.ts +46 -0
  54. package/src/generators/__snapshots__/optionalPetInfer.ts +5 -0
  55. package/src/generators/__snapshots__/optionalPetTyped.ts +3 -0
  56. package/src/generators/__snapshots__/order.ts +3 -0
  57. package/src/generators/__snapshots__/orderDateTyeString.ts +10 -0
  58. package/src/generators/__snapshots__/orderDateTypeFalse.ts +3 -0
  59. package/src/generators/__snapshots__/orderDateTypeString.ts +3 -0
  60. package/src/generators/__snapshots__/pet.ts +3 -0
  61. package/src/generators/__snapshots__/petArray.ts +6 -0
  62. package/src/generators/__snapshots__/petCoercion.ts +3 -0
  63. package/src/generators/__snapshots__/petTupleObject.ts +6 -0
  64. package/src/generators/__snapshots__/petWithMapper.ts +3 -0
  65. package/src/generators/__snapshots__/pets.ts +3 -0
  66. package/src/generators/__snapshots__/recursive.ts +3 -0
  67. package/src/generators/__snapshots__/showPetById.ts +18 -0
  68. package/src/generators/__snapshots__/stringValueConst.ts +6 -0
  69. package/src/generators/__snapshots__/uuidSchema.ts +3 -0
  70. package/src/generators/index.ts +2 -0
  71. package/src/generators/operationsGenerator.tsx +39 -0
  72. package/src/generators/zodGenerator.tsx +121 -0
  73. package/src/parser/index.ts +34 -10
  74. package/src/plugin.ts +21 -38
  75. package/src/types.ts +41 -69
  76. package/dist/Operations-BlQtRP31.d.cts +0 -47
  77. package/dist/Operations-BlQtRP31.d.ts +0 -47
  78. package/dist/chunk-7X3NWYUN.cjs +0 -1242
  79. package/dist/chunk-7X3NWYUN.cjs.map +0 -1
  80. package/dist/chunk-XCGVHLYD.js +0 -1242
  81. package/dist/chunk-XCGVHLYD.js.map +0 -1
  82. package/src/SchemaGenerator.tsx +0 -22
  83. package/src/components/OperationSchema.tsx +0 -64
  84. package/src/components/Schema.tsx +0 -162
  85. package/src/components/__snapshots__/operations.ts +0 -50
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Operations.tsx","../src/components/Schema.tsx","../../plugin-ts/src/plugin.ts","../../plugin-ts/src/OperationGenerator.tsx","../../plugin-ts/src/components/OasType.tsx","../../plugin-ts/src/components/OperationSchema.tsx","../../plugin-ts/src/SchemaGenerator.tsx","../../plugin-ts/src/components/Schema.tsx","../../plugin-ts/src/parser/index.ts","../src/parser/index.ts","../src/plugin.ts","../src/SchemaGenerator.tsx","../src/components/OperationSchema.tsx"],"sourcesContent":["import { useOperationManager, useOperations } from '@kubb/plugin-oas/hooks'\nimport { Const, File, Parser, useApp } from '@kubb/react'\n\nimport transformers from '@kubb/core/transformers'\nimport type { HttpMethod, Operation } from '@kubb/oas'\nimport type { KubbNode } from '@kubb/react'\nimport type { ComponentProps, ComponentType } from 'react'\nimport type { FileMeta, PluginZod } from '../types.ts'\n\ntype TemplateProps = {\n /**\n * Name of the function\n */\n operationsName: string\n /**\n * Name of the function\n */\n pathsName: string\n operations: Operation[]\n}\n\nfunction Template({ operationsName, pathsName, operations }: TemplateProps): KubbNode {\n const { groupSchemasByName } = useOperationManager()\n const transformedOperations = operations.map((operation) => ({ operation, data: groupSchemasByName(operation, { type: 'function' }) }))\n\n const operationsJSON = transformedOperations.reduce(\n (prev, acc) => {\n prev[`\"${acc.operation.getOperationId()}\"`] = acc.data\n\n return prev\n },\n {} as Record<string, unknown>,\n )\n\n const pathsJSON = transformedOperations.reduce(\n (prev, acc) => {\n prev[`\"${acc.operation.path}\"`] = {\n ...(prev[`\"${acc.operation.path}\"`] || ({} as Record<HttpMethod, string>)),\n [acc.operation.method]: `operations[\"${acc.operation.getOperationId()}\"]`,\n }\n\n return prev\n },\n {} as Record<string, Record<HttpMethod, string>>,\n )\n\n return (\n <>\n <Const export name={operationsName} asConst>\n {`{${transformers.stringifyObject(operationsJSON)}}`}\n </Const>\n <Const export name={pathsName} asConst>\n {`{${transformers.stringifyObject(pathsJSON)}}`}\n </Const>\n </>\n )\n}\n\ntype RootTemplateProps = {\n children?: React.ReactNode\n}\n\nfunction RootTemplate({ children }: RootTemplateProps) {\n const {\n mode,\n pluginManager,\n plugin: {\n key: pluginKey,\n options: { extName },\n },\n } = useApp<PluginZod>()\n const { getFile } = useOperationManager()\n const operations = useOperations()\n const { groupSchemasByName } = useOperationManager()\n const transformedOperations = operations.map((operation) => ({ operation, data: groupSchemasByName(operation, { type: 'function' }) }))\n\n const file = pluginManager.getFile({ name: 'operations', extName: '.ts', pluginKey })\n const imports = Object.entries(transformedOperations)\n .map(([_key, { data, operation }], index) => {\n const names = [data.request, ...Object.values(data.responses), ...Object.values(data.parameters)].filter(Boolean)\n\n return <File.Import key={index} extName={extName} name={names} root={file.path} path={getFile(operation).path} />\n })\n .filter(Boolean)\n\n return (\n <Parser language=\"typescript\">\n <File<FileMeta> baseName={file.baseName} path={file.path} meta={file.meta} exportable={false}>\n {mode === 'split' && imports}\n <File.Source>{children}</File.Source>\n </File>\n </Parser>\n )\n}\n\nconst defaultTemplates = { default: Template, root: RootTemplate } as const\n\ntype Templates = Partial<typeof defaultTemplates>\n\ntype Props = {\n /**\n * This will make it possible to override the default behaviour.\n */\n Template?: ComponentType<ComponentProps<typeof Template>>\n}\n\nexport function Operations({ Template = defaultTemplates.default }: Props): KubbNode {\n const operations = useOperations()\n\n return <Template operationsName=\"operations\" pathsName=\"paths\" operations={operations} />\n}\n\ntype FileProps = {\n /**\n * This will make it possible to override the default behaviour.\n */\n templates?: Templates\n}\n\nOperations.File = function (props: FileProps): KubbNode {\n const templates = { ...defaultTemplates, ...props.templates }\n\n const Template = templates.default\n const RootTemplate = templates.root\n\n return (\n <RootTemplate>\n <Operations Template={Template} />\n </RootTemplate>\n )\n}\n\nOperations.templates = defaultTemplates\n","import { Oas } from '@kubb/plugin-oas/components'\nimport { Const, File, Type, useApp, useFile } from '@kubb/react'\nimport { pluginTsName } from '@kubb/plugin-ts'\n\nimport transformers from '@kubb/core/transformers'\nimport { isKeyword, schemaKeywords } from '@kubb/plugin-oas'\nimport { useSchema } from '@kubb/plugin-oas/hooks'\nimport type { ReactNode } from 'react'\nimport * as parserZod from '../parser/index.ts'\nimport { pluginZodName } from '../plugin.ts'\nimport type { PluginZod } from '../types.ts'\n\ntype Props = {\n description?: string\n withTypeAnnotation?: boolean\n keysToOmit?: string[]\n}\n\nexport function Schema(props: Props): ReactNode {\n const { keysToOmit, withTypeAnnotation, description } = props\n const { tree, name } = useSchema()\n const {\n pluginManager,\n plugin: {\n options: { mapper, typedSchema, coercion },\n },\n } = useApp<PluginZod>()\n\n // all checks are also inside this.schema(React)\n const resolvedName = pluginManager.resolveName({\n name,\n pluginKey: [pluginZodName],\n type: 'function',\n })\n const resolvedTypeName = pluginManager.resolveName({\n name,\n pluginKey: [pluginZodName],\n type: 'type',\n })\n\n const typeName = pluginManager.resolveName({\n name,\n pluginKey: [pluginTsName],\n type: 'type',\n })\n\n if (!tree.length) {\n return (\n <Const\n name={resolvedName}\n export\n JSDoc={{\n comments: [description ? `@description ${transformers.jsStringEscape(description)}` : undefined].filter(Boolean),\n }}\n >\n undefined\n </Const>\n )\n }\n\n const hasTuple = tree.some((item) => isKeyword(item, schemaKeywords.tuple))\n\n const output = parserZod\n .sort(tree)\n .filter((item) => {\n if (hasTuple && (isKeyword(item, schemaKeywords.min) || isKeyword(item, schemaKeywords.max))) {\n return false\n }\n\n return true\n })\n .map((item) => parserZod.parse(undefined, item, { name, typeName, description, mapper, coercion, keysToOmit }))\n .filter(Boolean)\n .join('')\n\n const suffix = output.endsWith('.nullable()') ? '.unwrap().and' : '.and'\n\n return (\n <>\n <Const\n export\n name={resolvedName}\n JSDoc={{\n comments: [description ? `@description ${transformers.jsStringEscape(description)}` : undefined].filter(Boolean),\n }}\n >\n {[\n output,\n keysToOmit?.length ? `${suffix}(z.object({ ${keysToOmit.map((key) => `${key}: z.never()`).join(',')} }))` : undefined,\n withTypeAnnotation && typeName ? ` as z.ZodType<${typeName}>` : '',\n ]\n .filter(Boolean)\n .join('') || ''}\n </Const>\n {typedSchema && (\n <Type export name={resolvedTypeName}>\n {`z.infer<typeof ${resolvedName}>`}\n </Type>\n )}\n </>\n )\n}\n\ntype FileProps = {}\n\nSchema.File = function ({}: FileProps): ReactNode {\n const {\n pluginManager,\n plugin: {\n options: { typed },\n },\n } = useApp<PluginZod>()\n const { schema } = useSchema()\n\n const withTypeAnnotation = !!typed\n\n return (\n <Oas.Schema.File output={pluginManager.config.output.path}>\n <Schema.Imports />\n <File.Source>\n <Schema withTypeAnnotation={withTypeAnnotation} description={schema?.description} />\n </File.Source>\n </Oas.Schema.File>\n )\n}\nSchema.Imports = (): ReactNode => {\n const {\n pluginManager,\n plugin: {\n options: { typed, importPath },\n },\n } = useApp<PluginZod>()\n const { path: root } = useFile()\n const { name, tree, schema } = useSchema()\n\n // used for this.options.typed\n const typeName = pluginManager.resolveName({\n name,\n pluginKey: [pluginTsName],\n type: 'type',\n })\n\n const typeFileName = pluginManager.resolveName({\n name: name,\n pluginKey: [pluginTsName],\n type: 'file',\n })\n\n const typePath = pluginManager.resolvePath({\n baseName: typeFileName,\n pluginKey: [pluginTsName],\n })\n\n const withTypeAnnotation = !!typed\n\n return (\n <>\n <File.Import name={['z']} path={importPath} />\n {withTypeAnnotation && typeName && typePath && <File.Import isTypeOnly root={root} path={typePath} name={[typeName]} />}\n </>\n )\n}\n","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 { pluginOasName } from '@kubb/plugin-oas'\n\nimport { OperationGenerator } from './OperationGenerator.tsx'\nimport { SchemaGenerator } from './SchemaGenerator.tsx'\n\nimport type { Plugin } from '@kubb/core'\nimport type { PluginOas as SwaggerPluginOptions } from '@kubb/plugin-oas'\nimport type { PluginTs } from './types.ts'\n\nexport const pluginTsName = 'plugin-ts' satisfies PluginTs['name']\n\nexport const pluginTs = createPlugin<PluginTs>((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 mapper = {},\n } = options\n const template = group?.output ? group.output : `${output.path}/{{tag}}Controller`\n\n return {\n name: pluginTsName,\n options: {\n extName: output.extName,\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 override,\n mapper,\n },\n pre: [pluginOasName],\n resolvePath(baseName, pathMode, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = pathMode ?? 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 buildStart() {\n const [swaggerPlugin]: [Plugin<SwaggerPluginOptions>] = PluginManager.getDependedPlugins<SwaggerPluginOptions>(this.plugins, [pluginOasName])\n\n const oas = await swaggerPlugin.context.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.context.contentType,\n include: undefined,\n override,\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.context.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 { OperationGenerator as Generator } from '@kubb/plugin-oas'\nimport { Oas } from '@kubb/plugin-oas/components'\nimport { App, createRoot } from '@kubb/react'\n\nimport { OasType } from './components/OasType.tsx'\nimport { OperationSchema } from './components/OperationSchema.tsx'\n\nimport type { Operation } from '@kubb/oas'\nimport type { OperationMethodResult } from '@kubb/plugin-oas'\nimport type { FileMeta, PluginTs } from './types.ts'\n\nexport class OperationGenerator extends Generator<PluginTs['resolvedOptions'], PluginTs> {\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} generator={this}>\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: PluginTs['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]} generator={this}>\n <Oas.Operation operation={operation}>\n <OperationSchema.File />\n </Oas.Operation>\n </Oas>\n </App>,\n )\n\n return root.files\n }\n}\n","import { Parser, File, Type, useApp } from '@kubb/react'\nimport { useOas } from '@kubb/plugin-oas/hooks'\n\nimport type { OasTypes } from '@kubb/oas'\nimport type { ReactNode } from 'react'\nimport type { FileMeta, PluginTs } 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<PluginTs>()\n const file = pluginManager.getFile({ name, extName: '.ts', pluginKey })\n\n const Template = templates.default\n\n return (\n <Parser language=\"typescript\">\n <File<FileMeta> baseName={file.baseName} path={file.path} meta={file.meta}>\n <File.Import name={['Infer']} path=\"@kubb/oas\" isTypeOnly />\n <File.Source>\n <OasType Template={Template} name={name} typeName={typeName} />\n </File.Source>\n </File>\n </Parser>\n )\n}\n\nOasType.templates = defaultTemplates\n","import transformers from '@kubb/core/transformers'\nimport { print } from '@kubb/parser-ts'\nimport * as factory from '@kubb/parser-ts/factory'\nimport { Oas } from '@kubb/plugin-oas/components'\nimport { useOas, useOperation, useOperationManager } from '@kubb/plugin-oas/hooks'\nimport { File, Parser, useApp } from '@kubb/react'\n\nimport { SchemaGenerator } from '../SchemaGenerator.tsx'\n\nimport type { PluginManager } from '@kubb/core'\nimport type { Operation } from '@kubb/oas'\nimport type { ts } from '@kubb/parser-ts'\nimport type { OperationSchema as OperationSchemaType } from '@kubb/plugin-oas'\nimport type { OperationSchemas } from '@kubb/plugin-oas'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport type { ReactNode } from 'react'\nimport type { FileMeta, PluginTs } from '../types.ts'\nimport { Schema } from './Schema.tsx'\n\nfunction printCombinedSchema({\n name,\n operation,\n schemas,\n pluginManager,\n}: { name: string; operation: Operation; schemas: OperationSchemas; pluginManager: PluginManager }): string {\n const properties: Record<string, ts.TypeNode> = {}\n\n if (schemas.response) {\n const identifier = pluginManager.resolveName({\n name: schemas.response.name,\n pluginKey: [pluginTsName],\n type: 'function',\n })\n properties['response'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.request) {\n const identifier = pluginManager.resolveName({\n name: schemas.request.name,\n pluginKey: [pluginTsName],\n type: 'function',\n })\n properties['request'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.pathParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.pathParams.name,\n pluginKey: [pluginTsName],\n type: 'function',\n })\n properties['pathParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.queryParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.queryParams.name,\n pluginKey: [pluginTsName],\n type: 'function',\n })\n properties['queryParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.headerParams) {\n const identifier = pluginManager.resolveName({\n name: schemas.headerParams.name,\n pluginKey: [pluginTsName],\n type: 'function',\n })\n properties['headerParams'] = factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }\n\n if (schemas.errors) {\n properties['errors'] = factory.createUnionDeclaration({\n nodes: schemas.errors.map((error) => {\n const identifier = pluginManager.resolveName({\n name: error.name,\n pluginKey: [pluginTsName],\n type: 'function',\n })\n\n return factory.createTypeReferenceNode(factory.createIdentifier(identifier), undefined)\n }),\n })!\n }\n\n const namespaceNode = factory.createTypeAliasDeclaration({\n name: 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\ntype Props = {\n description?: string\n keysToOmit?: string[]\n}\n\nexport function OperationSchema({ keysToOmit, description }: Props): ReactNode {\n return <Schema keysToOmit={keysToOmit} description={description} />\n}\n\ntype FileProps = {}\n\nOperationSchema.File = function ({}: FileProps): ReactNode {\n const { pluginManager, plugin, mode, fileManager } = useApp<PluginTs>()\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 override: plugin.options.override,\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, description, keysToOmit, ...options }: OperationSchemaType, i: number) => {\n const tree = generator.parse({ schema, name })\n\n return (\n <Oas.Schema key={i} name={name} value={schema} tree={tree}>\n {mode === 'split' && <Oas.Schema.Imports extName={plugin.options.extName} isTypeOnly />}\n <File.Source>\n <OperationSchema description={description} keysToOmit={keysToOmit} />\n </File.Source>\n </Oas.Schema>\n )\n }\n\n return (\n <Parser language=\"typescript\">\n <File<FileMeta> baseName={file.baseName} path={file.path} meta={file.meta}>\n {items.map(mapItem)}\n\n <File.Source>{printCombinedSchema({ name: factoryName, operation, schemas, pluginManager })}</File.Source>\n </File>\n </Parser>\n )\n}\n","import type { SchemaObject } from '@kubb/oas'\nimport { SchemaGenerator as Generator } from '@kubb/plugin-oas'\nimport type { SchemaMethodResult } from '@kubb/plugin-oas'\nimport { Oas } from '@kubb/plugin-oas/components'\nimport { App, createRoot } from '@kubb/react'\nimport { Schema } from './components/Schema.tsx'\nimport type { FileMeta, PluginTs } from './types.ts'\n\nexport class SchemaGenerator extends Generator<PluginTs['resolvedOptions'], PluginTs> {\n async schema(name: string, schema: SchemaObject, options: PluginTs['resolvedOptions']): SchemaMethodResult<FileMeta> {\n const { oas, pluginManager, plugin, mode, output } = this.context\n\n const root = createRoot({\n logger: pluginManager.logger,\n })\n\n const tree = this.parse({ schema, name })\n\n root.render(\n <App pluginManager={pluginManager} plugin={{ ...plugin, options }} mode={mode}>\n <Oas oas={oas}>\n <Oas.Schema name={name} value={schema} tree={tree}>\n <Schema.File />\n </Oas.Schema>\n </Oas>\n </App>,\n )\n\n return root.files\n }\n}\n","import { Oas } from '@kubb/plugin-oas/components'\nimport { File, useApp } from '@kubb/react'\n\nimport transformers from '@kubb/core/transformers'\nimport { print, type ts } from '@kubb/parser-ts'\nimport * as factory from '@kubb/parser-ts/factory'\nimport { SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'\nimport { useSchema } from '@kubb/plugin-oas/hooks'\nimport type { ReactNode } from 'react'\nimport { parse, typeKeywordMapper } from '../parser/index.ts'\nimport { pluginTsName } from '../plugin.ts'\nimport type { PluginTs } from '../types.ts'\n\ntype Props = {\n description?: string\n keysToOmit?: string[]\n}\n\nexport function Schema(props: Props): ReactNode {\n const { keysToOmit, description } = props\n const { tree, name } = useSchema()\n const {\n pluginManager,\n plugin: {\n options: { mapper, enumType, optionalType },\n },\n } = useApp<PluginTs>()\n\n // all checks are also inside this.schema(React)\n const resolvedName = pluginManager.resolveName({\n name,\n pluginKey: [pluginTsName],\n type: 'function',\n })\n\n const typeName = pluginManager.resolveName({\n name,\n pluginKey: [pluginTsName],\n type: 'type',\n })\n\n const nodes: ts.Node[] = []\n const extraNodes: ts.Node[] = []\n\n if (!tree.length) {\n return ''\n }\n\n const isNullish = tree.some((item) => item.keyword === schemaKeywords.nullish)\n const isNullable = tree.some((item) => item.keyword === schemaKeywords.nullable)\n const isOptional = tree.some((item) => item.keyword === schemaKeywords.optional)\n\n let type =\n (tree\n .map((schema) => parse(undefined, schema, { name: resolvedName, typeName, description, keysToOmit, optionalType, enumType, mapper }))\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(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(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: resolvedName,\n type: keysToOmit?.length\n ? factory.createOmitDeclaration({\n keys: keysToOmit,\n type,\n nonNullable: true,\n })\n : type,\n })\n\n const enumSchemas = SchemaGenerator.deepSearch(tree, 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: enumType,\n }),\n )\n })\n }\n\n nodes.push(\n factory.appendJSDocToNode({\n node,\n comments: [description ? `@description ${transformers.jsStringEscape(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\ntype FileProps = {}\n\nSchema.File = function ({}: FileProps): ReactNode {\n const { pluginManager } = useApp<PluginTs>()\n const { schema } = useSchema()\n\n return (\n <Oas.Schema.File output={pluginManager.config.output.path}>\n <File.Source>\n <Schema description={schema?.description} />\n </File.Source>\n </Oas.Schema.File>\n )\n}\n","import transformers from '@kubb/core/transformers'\nimport * as factory from '@kubb/parser-ts/factory'\nimport { isKeyword, schemaKeywords } from '@kubb/plugin-oas'\n\nimport type { ts } from '@kubb/parser-ts'\nimport type { Schema, SchemaKeywordMapper, SchemaMapper } from '@kubb/plugin-oas'\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 || !nodes.length) {\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: (type: 'date' | 'string' = 'string') =>\n type === 'string' ? factory.keywordTypeNodes.string : factory.createTypeReferenceNode(factory.createIdentifier('Date')),\n time: (type: 'date' | 'string' = 'string') =>\n type === 'string' ? factory.keywordTypeNodes.string : 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 schema: undefined,\n catchall: undefined,\n name: 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?: Record<string, ts.PropertySignature>\n}\n\nexport function parse(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) => parse(current, schema, options)).filter(Boolean) as ts.TypeNode[])\n }\n\n if (isKeyword(current, schemaKeywords.and)) {\n return typeKeywordMapper.and(current.args.map((schema) => parse(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) => parse(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.items.map((schema) => parse(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(([name, schemas]) => {\n const nameSchema = schemas.find((schema) => schema.keyword === schemaKeywords.name) as SchemaKeywordMapper['name']\n const mappedName = nameSchema?.args || name\n\n // custom mapper(pluginOptions)\n if (options.mapper?.[mappedName]) {\n return options.mapper?.[mappedName]\n }\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 schemaSchema = schemas.find((schema) => schema.keyword === schemaKeywords.schema) as SchemaKeywordMapper['schema'] | undefined\n\n let type = schemas.map((schema) => parse(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 || isNullish ? ['questionToken', 'questionTokenAndUndefined'].includes(options.optionalType as string) : false,\n name: mappedName,\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 schemaSchema?.args?.type || schemaSchema?.args?.format\n ? [`@type ${schemaSchema?.args?.type || 'unknown'}${!isOptional ? '' : ' | undefined'}`, schemaSchema?.args?.format].filter(Boolean).join(', ')\n : undefined,\n ].filter(Boolean),\n })\n })\n\n const additionalProperties = current.args?.additionalProperties?.length\n ? factory.createIndexSignature(\n current.args.additionalProperties\n .map((schema) => parse(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 (isKeyword(current, schemaKeywords.datetime)) {\n return typeKeywordMapper.datetime()\n }\n\n if (isKeyword(current, schemaKeywords.date)) {\n return typeKeywordMapper.date(current.args.type)\n }\n\n if (isKeyword(current, schemaKeywords.time)) {\n return typeKeywordMapper.time(current.args.type)\n }\n\n if (current.keyword in typeKeywordMapper) {\n return value()\n }\n\n return undefined\n}\n","import transformers, { createJSDocBlockText } from '@kubb/core/transformers'\nimport { type SchemaKeywordMapper, isKeyword, schemaKeywords } from '@kubb/plugin-oas'\n\nimport type { Schema, SchemaKeywordBase, SchemaMapper } from '@kubb/plugin-oas'\n\nexport const zodKeywordMapper = {\n any: () => 'z.any()',\n unknown: () => 'z.unknown()',\n number: (coercion?: boolean, min?: number, max?: number) => {\n return [coercion ? 'z.coerce.number()' : 'z.number()', min !== undefined ? `.min(${min})` : undefined, max !== undefined ? `.max(${max})` : undefined]\n .filter(Boolean)\n .join('')\n },\n integer: (coercion?: boolean, min?: number, max?: number) => {\n return [coercion ? 'z.coerce.number()' : 'z.number()', min !== undefined ? `.min(${min})` : undefined, max !== undefined ? `.max(${max})` : undefined]\n .filter(Boolean)\n .join('')\n },\n object: (value?: string) => `z.object({${value}})`,\n string: (coercion?: boolean, min?: number, max?: number) => {\n return [coercion ? 'z.coerce.string()' : 'z.string()', min !== undefined ? `.min(${min})` : undefined, max !== undefined ? `.max(${max})` : undefined]\n .filter(Boolean)\n .join('')\n },\n boolean: () => 'z.boolean()',\n undefined: () => 'z.undefined()',\n nullable: () => '.nullable()',\n null: () => 'z.null()',\n nullish: () => '.nullish()',\n array: (items: string[] = [], min?: number, max?: number) => {\n return [`z.array(${items?.join('')})`, min !== undefined ? `.min(${min})` : undefined, max !== undefined ? `.max(${max})` : undefined]\n .filter(Boolean)\n .join('')\n },\n tuple: (items: string[] = []) => `z.tuple([${items?.join(', ')}])`,\n enum: (items: string[] = []) => `z.enum([${items?.join(', ')}])`,\n union: (items: string[] = []) => `z.union([${items?.join(', ')}])`,\n const: (value?: string | number) => `z.literal(${value ?? ''})`,\n /**\n * ISO 8601\n */\n datetime: (offset = false, local = false) => {\n if (offset) {\n return `z.string().datetime({ offset: ${offset} })`\n }\n\n if (local) {\n return `z.string().datetime({ local: ${local} })`\n }\n\n return 'z.string().datetime()'\n },\n /**\n * Type `'date'` Date\n * Type `'string'` ISO date format (YYYY-MM-DD)\n * @default ISO date format (YYYY-MM-DD)\n */\n date: (type: 'date' | 'string' = 'string', coercion?: boolean) => {\n if (type === 'string') {\n return 'z.string().date()'\n }\n\n if (coercion) {\n return 'z.coerce.date()'\n }\n\n return 'z.date()'\n },\n /**\n * Type `'date'` Date\n * Type `'string'` ISO time format (HH:mm:ss[.SSSSSS])\n * @default ISO time format (HH:mm:ss[.SSSSSS])\n */\n time: (type: 'date' | 'string' = 'string', coercion?: boolean) => {\n if (type === 'string') {\n return 'z.string().time()'\n }\n\n if (coercion) {\n return 'z.coerce.date()'\n }\n\n return 'z.date()'\n },\n uuid: () => '.uuid()',\n url: () => '.url()',\n strict: () => '.strict()',\n default: (value?: string | number | true) => `.default(${value ?? ''})`,\n and: (items: string[] = []) => items?.map((item) => `.and(${item})`).join(''),\n describe: (value = '') => `.describe(${value})`,\n min: (value?: number) => `.min(${value ?? ''})`,\n max: (value?: number) => `.max(${value ?? ''})`,\n optional: () => '.optional()',\n matches: (value = '') => `.regex(${value})`,\n email: () => '.email()',\n firstName: undefined,\n lastName: undefined,\n password: undefined,\n phone: undefined,\n readOnly: undefined,\n ref: (value?: string) => (value ? `z.lazy(() => ${value})` : undefined),\n blob: () => 'z.string()',\n deprecated: undefined,\n example: undefined,\n schema: undefined,\n catchall: (value?: string) => (value ? `.catchall(${value})` : undefined),\n name: undefined,\n} satisfies SchemaMapper<string | null | undefined>\n\n/**\n * @link based on https://github.com/cellular/oazapfts/blob/7ba226ebb15374e8483cc53e7532f1663179a22c/src/codegen/generate.ts#L398\n */\n\nexport function sort(items?: Schema[]): Schema[] {\n const order: string[] = [\n schemaKeywords.string,\n schemaKeywords.datetime,\n schemaKeywords.date,\n schemaKeywords.time,\n schemaKeywords.tuple,\n schemaKeywords.number,\n schemaKeywords.object,\n schemaKeywords.enum,\n schemaKeywords.url,\n schemaKeywords.email,\n schemaKeywords.firstName,\n schemaKeywords.lastName,\n schemaKeywords.password,\n schemaKeywords.matches,\n schemaKeywords.uuid,\n schemaKeywords.min,\n schemaKeywords.max,\n schemaKeywords.default,\n schemaKeywords.describe,\n schemaKeywords.optional,\n schemaKeywords.nullable,\n schemaKeywords.nullish,\n schemaKeywords.null,\n ]\n\n if (!items) {\n return []\n }\n\n return transformers.orderBy(items, [(v) => order.indexOf(v.keyword)], ['asc'])\n}\n\ntype ParserOptions = {\n name: string\n typeName?: string\n description?: string\n\n keysToOmit?: string[]\n mapper?: Record<string, string>\n coercion?: boolean\n}\n\nexport function parse(parent: Schema | undefined, current: Schema, options: ParserOptions): string | undefined {\n const value = zodKeywordMapper[current.keyword as keyof typeof zodKeywordMapper]\n\n if (!value) {\n return undefined\n }\n\n if (isKeyword(current, schemaKeywords.union)) {\n // zod union type needs at least 2 items\n if (Array.isArray(current.args) && current.args.length === 1) {\n return parse(parent, current.args[0] as Schema, options)\n }\n if (Array.isArray(current.args) && !current.args.length) {\n return ''\n }\n\n return zodKeywordMapper.union(\n sort(current.args)\n .map((schema) => parse(current, schema, options))\n .filter(Boolean),\n )\n }\n\n if (isKeyword(current, schemaKeywords.and)) {\n const items = sort(current.args)\n .filter((schema: Schema) => {\n return ![schemaKeywords.optional, schemaKeywords.describe].includes(schema.keyword as typeof schemaKeywords.describe)\n })\n .map((schema: Schema) => parse(current, schema, options))\n .filter(Boolean)\n\n return `${items.slice(0, 1)}${zodKeywordMapper.and(items.slice(1))}`\n }\n\n if (isKeyword(current, schemaKeywords.array)) {\n return zodKeywordMapper.array(\n sort(current.args.items)\n .map((schemas) => parse(current, schemas, options))\n .filter(Boolean),\n current.args.min,\n current.args.max,\n )\n }\n\n if (isKeyword(current, schemaKeywords.enum)) {\n if (current.args.asConst) {\n return zodKeywordMapper.union(\n current.args.items\n .map((schema) => {\n return parse(\n current,\n {\n keyword: schemaKeywords.const,\n args: schema,\n },\n options,\n )\n })\n .filter(Boolean),\n )\n }\n\n return zodKeywordMapper.enum(\n current.args.items.map((schema) => {\n if (schema.format === 'number') {\n return transformers.stringify(schema.value)\n }\n return transformers.stringify(schema.value)\n }),\n )\n }\n\n if (isKeyword(current, schemaKeywords.ref)) {\n return zodKeywordMapper.ref(current.args?.name)\n }\n\n if (isKeyword(current, schemaKeywords.object)) {\n const properties = Object.entries(current.args?.properties || {})\n .filter((item) => {\n const schema = item[1]\n return schema && typeof schema.map === 'function'\n })\n .map(([name, schemas]) => {\n const nameSchema = schemas.find((schema) => schema.keyword === schemaKeywords.name) as SchemaKeywordMapper['name']\n const mappedName = nameSchema?.args || name\n\n // custom mapper(pluginOptions)\n if (options.mapper?.[mappedName]) {\n return `\"${name}\": ${options.mapper?.[mappedName]}`\n }\n\n return `\"${name}\": ${sort(schemas)\n .map((schema, array) => {\n return parse(current, schema, options)\n })\n .filter(Boolean)\n .join('')}`\n })\n .join(',')\n\n const additionalProperties = current.args?.additionalProperties?.length\n ? current.args.additionalProperties\n .map((schema) => parse(current, schema, options))\n .filter(Boolean)\n .at(0)\n : undefined\n\n const text = [\n zodKeywordMapper.object(properties),\n current.args?.strict ? zodKeywordMapper.strict() : undefined,\n additionalProperties ? zodKeywordMapper.catchall(additionalProperties) : undefined,\n ].filter(Boolean)\n\n return text.join('')\n }\n\n if (isKeyword(current, schemaKeywords.tuple)) {\n return zodKeywordMapper.tuple(\n sort(current.args.items)\n .map((schema) => parse(current, schema, options))\n .filter(Boolean),\n )\n }\n\n if (isKeyword(current, schemaKeywords.const)) {\n if (current.args.format === 'number' && current.args.value !== undefined) {\n return zodKeywordMapper.const(Number.parseInt(current.args.value?.toString()))\n }\n return zodKeywordMapper.const(transformers.stringify(current.args.value))\n }\n\n if (isKeyword(current, schemaKeywords.matches)) {\n if (current.args) {\n return zodKeywordMapper.matches(transformers.toRegExpString(current.args))\n }\n }\n\n if (isKeyword(current, schemaKeywords.default)) {\n if (current.args) {\n return zodKeywordMapper.default(current.args)\n }\n }\n\n if (isKeyword(current, schemaKeywords.describe)) {\n if (current.args) {\n return zodKeywordMapper.describe(transformers.stringify(current.args.toString()))\n }\n }\n\n if (isKeyword(current, schemaKeywords.string)) {\n return zodKeywordMapper.string(options.coercion)\n }\n\n if (isKeyword(current, schemaKeywords.number) || isKeyword(current, schemaKeywords.integer)) {\n return zodKeywordMapper.number(options.coercion)\n }\n\n if (isKeyword(current, schemaKeywords.min)) {\n return zodKeywordMapper.min(current.args)\n }\n if (isKeyword(current, schemaKeywords.max)) {\n return zodKeywordMapper.max(current.args)\n }\n\n if (isKeyword(current, schemaKeywords.datetime)) {\n return zodKeywordMapper.datetime(current.args.offset, current.args.local)\n }\n\n if (isKeyword(current, schemaKeywords.date)) {\n return zodKeywordMapper.date(current.args.type, options.coercion)\n }\n\n if (isKeyword(current, schemaKeywords.time)) {\n return zodKeywordMapper.time(current.args.type, options.coercion)\n }\n\n if (current.keyword in zodKeywordMapper && 'args' in current) {\n const value = zodKeywordMapper[current.keyword as keyof typeof zodKeywordMapper] as (typeof zodKeywordMapper)['const']\n\n return value((current as SchemaKeywordBase<unknown>).args as any)\n }\n\n if (current.keyword in zodKeywordMapper) {\n return value()\n }\n\n return undefined\n}\n","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 { OperationGenerator, pluginOasName, SchemaGenerator } from '@kubb/plugin-oas'\nimport { getGroupedByTagFiles } from '@kubb/plugin-oas/utils'\nimport { pluginTsName } from '@kubb/plugin-ts'\n\nimport type { Plugin } from '@kubb/core'\nimport type { PluginOas as SwaggerPluginOptions } from '@kubb/plugin-oas'\nimport { Operations } from './components/Operations.tsx'\nimport type { PluginZod } from './types.ts'\nimport { zodParser } from './SchemaGenerator.tsx'\n\nexport const pluginZodName = 'plugin-zod' satisfies PluginZod['name']\n\nexport const pluginZod = createPlugin<PluginZod>((options) => {\n const {\n output = { path: 'zod' },\n group,\n exclude = [],\n include,\n override = [],\n transformers = {},\n dateType = 'string',\n unknownType = 'any',\n typed = false,\n typedSchema = false,\n mapper = {},\n templates,\n importPath = 'zod',\n coercion = false,\n } = options\n const template = group?.output ? group.output : `${output.path}/{{tag}}Controller`\n\n return {\n name: pluginZodName,\n options: {\n extName: output.extName,\n transformers,\n include,\n exclude,\n override,\n typed,\n typedSchema,\n dateType,\n unknownType,\n mapper,\n importPath,\n coercion,\n templates: {\n operations: Operations.templates,\n ...templates,\n },\n },\n pre: [pluginOasName, typed ? pluginTsName : undefined].filter(Boolean),\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 let resolvedName = camelCase(name, {\n suffix: type ? 'schema' : undefined,\n isFile: type === 'file',\n })\n\n if (type === 'type') {\n resolvedName = pascalCase(resolvedName)\n }\n\n if (type) {\n return transformers?.name?.(resolvedName, type) || resolvedName\n }\n\n return resolvedName\n },\n async buildStart() {\n const [swaggerPlugin]: [Plugin<SwaggerPluginOptions>] = PluginManager.getDependedPlugins<SwaggerPluginOptions>(this.plugins, [pluginOasName])\n\n const oas = await swaggerPlugin.context.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.context.contentType,\n include: undefined,\n override,\n mode,\n output: output.path,\n })\n\n const schemaFiles = await schemaGenerator.build(zodParser)\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.context.contentType,\n exclude,\n include,\n override,\n mode,\n })\n\n const operationFiles = await operationGenerator.build(zodParser)\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 if (group?.type === 'tag') {\n const rootFiles = await getGroupedByTagFiles({\n logger: this.logger,\n files: this.fileManager.files,\n plugin: this.plugin,\n template,\n exportAs: group.exportAs || '{{tag}}Schemas',\n root,\n output,\n })\n\n await this.addFile(...rootFiles)\n }\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 { createReactParser } from '@kubb/plugin-oas'\nimport { Schema } from './components/Schema.tsx'\nimport type { PluginZod } from './types.ts'\nimport { Operations } from './components/Operations.tsx'\nimport { OperationSchema } from './components/OperationSchema.tsx'\n\nexport const zodParser = createReactParser<PluginZod>({\n name: 'plugin-zod',\n Operations({ options }) {\n if (!options.templates.operations) {\n return null\n }\n\n return <Operations.File templates={options.templates.operations} />\n },\n Operation() {\n return <OperationSchema.File />\n },\n Schema({ schema, name }) {\n return <Schema.File />\n },\n})\n","import { SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'\nimport { Oas } from '@kubb/plugin-oas/components'\nimport { useOas, useOperation, useOperationManager } from '@kubb/plugin-oas/hooks'\nimport { File, Parser, useApp } from '@kubb/react'\n\nimport type { OperationSchema as OperationSchemaType } from '@kubb/plugin-oas'\nimport type { ReactNode } from 'react'\nimport type { FileMeta, PluginZod } from '../types.ts'\nimport { Schema } from './Schema.tsx'\n\ntype Props = {\n description?: string\n keysToOmit?: string[]\n}\n\nexport function OperationSchema({ description, keysToOmit }: Props): ReactNode {\n return <Schema keysToOmit={keysToOmit} withTypeAnnotation={false} description={description} />\n}\n\ntype FileProps = {}\n\nOperationSchema.File = function ({}: FileProps): ReactNode {\n const { pluginManager, plugin, mode } = useApp<PluginZod>()\n const { getSchemas, getFile } = useOperationManager()\n const oas = useOas()\n const operation = useOperation()\n\n const file = getFile(operation)\n const schemas = getSchemas(operation)\n const generator = new SchemaGenerator(plugin.options, {\n oas,\n plugin,\n pluginManager,\n mode,\n override: plugin.options.override,\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, description, keysToOmit, ...options }: OperationSchemaType, i: number) => {\n // hack so Params can be optional when needed\n const required = Array.isArray(schema?.required) ? !!schema.required.length : !!schema?.required\n const optional = !required && !!name.includes('Params')\n const tree = generator.parse({ schema, name })\n\n return (\n <Oas.Schema key={i} name={name} value={schema} tree={[...tree, optional ? { keyword: schemaKeywords.optional } : undefined].filter(Boolean)}>\n {mode === 'split' && <Oas.Schema.Imports extName={plugin.options.extName} />}\n <File.Source>\n <OperationSchema description={description} keysToOmit={keysToOmit} />\n </File.Source>\n </Oas.Schema>\n )\n }\n\n return (\n <Parser language=\"typescript\">\n <File<FileMeta> baseName={file.baseName} path={file.path} meta={file.meta}>\n <File.Import name={['z']} path={plugin.options.importPath} />\n {items.map(mapItem)}\n </File>\n </Parser>\n )\n}\n"],"mappings":"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","names":["Template","RootTemplate","Oas","Const","File","Type","useApp","Generator","Oas","App","createRoot","Parser","File","useApp","Fragment","jsx","jsxs","Template","defaultTemplates","transformers","print","factory","Oas","useOas","useOperationManager","File","Parser","useApp","Oas","File","useApp","transformers","factory","schemaKeywords","transformers","jsx","useApp","schemaKeywords","transformers","node","File","jsx","SchemaGenerator","Oas","jsx","jsxs","transformers","print","useApp","useOas","useOperationManager","SchemaGenerator","Oas","File","Parser","jsx","Generator","createRoot","App","Oas","transformers","options","SchemaGenerator","transformers","isKeyword","schemaKeywords","useSchema","transformers","isKeyword","schemaKeywords","parse","value","path","FileManager","PluginManager","createPlugin","camelCase","pascalCase","renderTemplate","OperationGenerator","pluginOasName","SchemaGenerator","SchemaGenerator","schemaKeywords","Oas","useOas","useOperation","useOperationManager","File","Parser","useApp","jsx","jsxs","OperationSchema","Schema","useApp","useOperationManager","useOas","useOperation","SchemaGenerator","Oas","schemaKeywords","File","Parser","jsx","OperationSchema","Schema","createPlugin","transformers","pluginOasName","options","path","FileManager","camelCase","renderTemplate","pascalCase","PluginManager","SchemaGenerator","OperationGenerator","Fragment","jsx","jsxs","Schema","useSchema","useApp","Const","transformers","isKeyword","schemaKeywords","parse","Type","Oas","File"]}
@@ -1,22 +0,0 @@
1
- import { createReactParser } from '@kubb/plugin-oas'
2
- import { Schema } from './components/Schema.tsx'
3
- import type { PluginZod } from './types.ts'
4
- import { Operations } from './components/Operations.tsx'
5
- import { OperationSchema } from './components/OperationSchema.tsx'
6
-
7
- export const zodParser = createReactParser<PluginZod>({
8
- name: 'plugin-zod',
9
- Operations({ options }) {
10
- if (!options.templates.operations) {
11
- return null
12
- }
13
-
14
- return <Operations.File templates={options.templates.operations} />
15
- },
16
- Operation() {
17
- return <OperationSchema.File />
18
- },
19
- Schema({ schema, name }) {
20
- return <Schema.File />
21
- },
22
- })
@@ -1,64 +0,0 @@
1
- import { SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'
2
- import { Oas } from '@kubb/plugin-oas/components'
3
- import { useOas, useOperation, useOperationManager } from '@kubb/plugin-oas/hooks'
4
- import { File, Parser, useApp } from '@kubb/react'
5
-
6
- import type { OperationSchema as OperationSchemaType } from '@kubb/plugin-oas'
7
- import type { ReactNode } from 'react'
8
- import type { FileMeta, PluginZod } from '../types.ts'
9
- import { Schema } from './Schema.tsx'
10
-
11
- type Props = {
12
- description?: string
13
- keysToOmit?: string[]
14
- }
15
-
16
- export function OperationSchema({ description, keysToOmit }: Props): ReactNode {
17
- return <Schema keysToOmit={keysToOmit} withTypeAnnotation={false} description={description} />
18
- }
19
-
20
- type FileProps = {}
21
-
22
- OperationSchema.File = function ({}: FileProps): ReactNode {
23
- const { pluginManager, plugin, mode } = useApp<PluginZod>()
24
- const { getSchemas, getFile } = useOperationManager()
25
- const oas = useOas()
26
- const operation = useOperation()
27
-
28
- const file = getFile(operation)
29
- const schemas = getSchemas(operation)
30
- const generator = new SchemaGenerator(plugin.options, {
31
- oas,
32
- plugin,
33
- pluginManager,
34
- mode,
35
- override: plugin.options.override,
36
- })
37
-
38
- const items = [schemas.pathParams, schemas.queryParams, schemas.headerParams, schemas.statusCodes, schemas.request, schemas.response].flat().filter(Boolean)
39
-
40
- const mapItem = ({ name, schema, description, keysToOmit, ...options }: OperationSchemaType, i: number) => {
41
- // hack so Params can be optional when needed
42
- const required = Array.isArray(schema?.required) ? !!schema.required.length : !!schema?.required
43
- const optional = !required && !!name.includes('Params')
44
- const tree = generator.parse({ schema, name })
45
-
46
- return (
47
- <Oas.Schema key={i} name={name} value={schema} tree={[...tree, optional ? { keyword: schemaKeywords.optional } : undefined].filter(Boolean)}>
48
- {mode === 'split' && <Oas.Schema.Imports extName={plugin.options.extName} />}
49
- <File.Source>
50
- <OperationSchema description={description} keysToOmit={keysToOmit} />
51
- </File.Source>
52
- </Oas.Schema>
53
- )
54
- }
55
-
56
- return (
57
- <Parser language="typescript">
58
- <File<FileMeta> baseName={file.baseName} path={file.path} meta={file.meta}>
59
- <File.Import name={['z']} path={plugin.options.importPath} />
60
- {items.map(mapItem)}
61
- </File>
62
- </Parser>
63
- )
64
- }
@@ -1,162 +0,0 @@
1
- import { Oas } from '@kubb/plugin-oas/components'
2
- import { Const, File, Type, useApp, useFile } from '@kubb/react'
3
- import { pluginTsName } from '@kubb/plugin-ts'
4
-
5
- import transformers from '@kubb/core/transformers'
6
- import { isKeyword, schemaKeywords } from '@kubb/plugin-oas'
7
- import { useSchema } from '@kubb/plugin-oas/hooks'
8
- import type { ReactNode } from 'react'
9
- import * as parserZod from '../parser/index.ts'
10
- import { pluginZodName } from '../plugin.ts'
11
- import type { PluginZod } from '../types.ts'
12
-
13
- type Props = {
14
- description?: string
15
- withTypeAnnotation?: boolean
16
- keysToOmit?: string[]
17
- }
18
-
19
- export function Schema(props: Props): ReactNode {
20
- const { keysToOmit, withTypeAnnotation, description } = props
21
- const { tree, name } = useSchema()
22
- const {
23
- pluginManager,
24
- plugin: {
25
- options: { mapper, typedSchema, coercion },
26
- },
27
- } = useApp<PluginZod>()
28
-
29
- // all checks are also inside this.schema(React)
30
- const resolvedName = pluginManager.resolveName({
31
- name,
32
- pluginKey: [pluginZodName],
33
- type: 'function',
34
- })
35
- const resolvedTypeName = pluginManager.resolveName({
36
- name,
37
- pluginKey: [pluginZodName],
38
- type: 'type',
39
- })
40
-
41
- const typeName = pluginManager.resolveName({
42
- name,
43
- pluginKey: [pluginTsName],
44
- type: 'type',
45
- })
46
-
47
- if (!tree.length) {
48
- return (
49
- <Const
50
- name={resolvedName}
51
- export
52
- JSDoc={{
53
- comments: [description ? `@description ${transformers.jsStringEscape(description)}` : undefined].filter(Boolean),
54
- }}
55
- >
56
- undefined
57
- </Const>
58
- )
59
- }
60
-
61
- const hasTuple = tree.some((item) => isKeyword(item, schemaKeywords.tuple))
62
-
63
- const output = parserZod
64
- .sort(tree)
65
- .filter((item) => {
66
- if (hasTuple && (isKeyword(item, schemaKeywords.min) || isKeyword(item, schemaKeywords.max))) {
67
- return false
68
- }
69
-
70
- return true
71
- })
72
- .map((item) => parserZod.parse(undefined, item, { name, typeName, description, mapper, coercion, keysToOmit }))
73
- .filter(Boolean)
74
- .join('')
75
-
76
- const suffix = output.endsWith('.nullable()') ? '.unwrap().and' : '.and'
77
-
78
- return (
79
- <>
80
- <Const
81
- export
82
- name={resolvedName}
83
- JSDoc={{
84
- comments: [description ? `@description ${transformers.jsStringEscape(description)}` : undefined].filter(Boolean),
85
- }}
86
- >
87
- {[
88
- output,
89
- keysToOmit?.length ? `${suffix}(z.object({ ${keysToOmit.map((key) => `${key}: z.never()`).join(',')} }))` : undefined,
90
- withTypeAnnotation && typeName ? ` as z.ZodType<${typeName}>` : '',
91
- ]
92
- .filter(Boolean)
93
- .join('') || ''}
94
- </Const>
95
- {typedSchema && (
96
- <Type export name={resolvedTypeName}>
97
- {`z.infer<typeof ${resolvedName}>`}
98
- </Type>
99
- )}
100
- </>
101
- )
102
- }
103
-
104
- type FileProps = {}
105
-
106
- Schema.File = function ({}: FileProps): ReactNode {
107
- const {
108
- pluginManager,
109
- plugin: {
110
- options: { typed },
111
- },
112
- } = useApp<PluginZod>()
113
- const { schema } = useSchema()
114
-
115
- const withTypeAnnotation = !!typed
116
-
117
- return (
118
- <Oas.Schema.File output={pluginManager.config.output.path}>
119
- <Schema.Imports />
120
- <File.Source>
121
- <Schema withTypeAnnotation={withTypeAnnotation} description={schema?.description} />
122
- </File.Source>
123
- </Oas.Schema.File>
124
- )
125
- }
126
- Schema.Imports = (): ReactNode => {
127
- const {
128
- pluginManager,
129
- plugin: {
130
- options: { typed, importPath },
131
- },
132
- } = useApp<PluginZod>()
133
- const { path: root } = useFile()
134
- const { name, tree, schema } = useSchema()
135
-
136
- // used for this.options.typed
137
- const typeName = pluginManager.resolveName({
138
- name,
139
- pluginKey: [pluginTsName],
140
- type: 'type',
141
- })
142
-
143
- const typeFileName = pluginManager.resolveName({
144
- name: name,
145
- pluginKey: [pluginTsName],
146
- type: 'file',
147
- })
148
-
149
- const typePath = pluginManager.resolvePath({
150
- baseName: typeFileName,
151
- pluginKey: [pluginTsName],
152
- })
153
-
154
- const withTypeAnnotation = !!typed
155
-
156
- return (
157
- <>
158
- <File.Import name={['z']} path={importPath} />
159
- {withTypeAnnotation && typeName && typePath && <File.Import isTypeOnly root={root} path={typePath} name={[typeName]} />}
160
- </>
161
- )
162
- }
@@ -1,50 +0,0 @@
1
- export const operations = {
2
- 'get_pets-pet-id': {
3
- request: undefined,
4
- parameters: {
5
- path: undefined,
6
- query: undefined,
7
- header: undefined,
8
- },
9
- responses: {
10
- 200: GetPetsPetIdQueryResponse,
11
- default: GetPetsPetIdQueryResponse,
12
- },
13
- errors: {},
14
- },
15
- listPets: {
16
- request: undefined,
17
- parameters: {
18
- path: undefined,
19
- query: ListPetsQueryParams,
20
- header: undefined,
21
- },
22
- responses: {
23
- 200: ListPetsQueryResponse,
24
- default: ListPetsQueryResponse,
25
- },
26
- errors: {},
27
- },
28
- createPets: {
29
- request: CreatePetsMutationRequest,
30
- parameters: {
31
- path: undefined,
32
- query: undefined,
33
- header: undefined,
34
- },
35
- responses: {
36
- 201: CreatePetsMutationResponse,
37
- default: CreatePetsMutationResponse,
38
- },
39
- errors: {},
40
- },
41
- } as const
42
- export const paths = {
43
- '/pets/{pet_id}': {
44
- get: operations['get_pets-pet-id'],
45
- },
46
- '/pets': {
47
- get: operations['listPets'],
48
- post: operations['createPets'],
49
- },
50
- } as const