@kubb/plugin-oas
Version:
OpenAPI Specification (OAS) plugin for Kubb, providing core functionality for parsing and processing OpenAPI/Swagger schemas for code generation.
47 lines (43 loc) • 1.84 kB
text/typescript
import type { PluginFactoryOptions } from '@kubb/core'
import type { FabricReactNode } from '@kubb/react-fabric/types'
import type { OperationProps, OperationsProps, SchemaProps, Version } from './types.ts'
type UserGenerator<TOptions extends PluginFactoryOptions, TVersion extends Version> = {
name: string
version?: TVersion
Operations?: (props: OperationsProps<TOptions, TVersion>) => FabricReactNode
Operation?: (props: OperationProps<TOptions, TVersion>) => FabricReactNode
Schema?: (props: SchemaProps<TOptions, TVersion>) => FabricReactNode
}
export type ReactGenerator<TOptions extends PluginFactoryOptions, TVersion extends Version> = {
name: string
type: 'react'
version: TVersion
Operations: (props: OperationsProps<TOptions, TVersion>) => FabricReactNode
Operation: (props: OperationProps<TOptions, TVersion>) => FabricReactNode
Schema: (props: SchemaProps<TOptions, TVersion>) => FabricReactNode
}
/****
* Creates a generator that uses React component functions to generate files for OpenAPI operations and schemas.
*
* The returned generator exposes async methods for generating files from operations, a single operation, or a schema, using the corresponding React components if provided. If a component is not defined, the method returns an empty array.
*
* @returns A generator object with async methods for operations, operation, and schema file generation.
*/
export function createReactGenerator<TOptions extends PluginFactoryOptions, TVersion extends Version = '1'>(
generator: UserGenerator<TOptions, TVersion>,
): ReactGenerator<TOptions, TVersion> {
return {
type: 'react',
version: (generator.version ?? '1') as TVersion,
Operations() {
return null
},
Operation() {
return null
},
Schema() {
return null
},
...generator,
}
}