UNPKG

@kubb/plugin-oas

Version:

OpenAPI Specification (OAS) plugin for Kubb, providing core functionality for parsing and processing OpenAPI/Swagger schemas for code generation.

61 lines (50 loc) 1.99 kB
import { camelCase, isValidVarName } from '@internals/utils' import type { SchemaObject } from '@kubb/oas' /** * Apply casing transformation to schema properties * Only transforms property names, not nested schemas */ export function applyParamsCasing(schema: SchemaObject, casing: 'camelcase' | undefined): SchemaObject { if (!casing || !schema.properties) { return schema } const transformedProperties: Record<string, any> = {} const transformedRequired: string[] = [] // Transform property names Object.entries(schema.properties).forEach(([originalName, propertySchema]) => { let transformedName = originalName if (casing === 'camelcase') { transformedName = camelCase(originalName) } else if (!isValidVarName(originalName)) { // If not valid variable name, make it valid transformedName = camelCase(originalName) } transformedProperties[transformedName] = propertySchema }) // Transform required field names if (Array.isArray(schema.required)) { schema.required.forEach((originalName) => { let transformedName = originalName if (casing === 'camelcase') { transformedName = camelCase(originalName) } else if (!isValidVarName(originalName)) { transformedName = camelCase(originalName) } transformedRequired.push(transformedName) }) } // Return a new schema with transformed properties and required fields return { ...schema, properties: transformedProperties, ...(transformedRequired.length > 0 && { required: transformedRequired }), } as SchemaObject } /** * Check if this schema is a parameter schema (pathParams, queryParams, or headerParams) * Only these should be transformed, not response/data/body */ export function isParameterSchema(schemaName: string): boolean { const lowerName = schemaName.toLowerCase() return lowerName.includes('pathparams') || lowerName.includes('queryparams') || lowerName.includes('headerparams') }