@moinax/orc 0.1.0 → 0.1.1
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/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/package.json +1 -9
package/dist/cli.js
CHANGED
|
@@ -19,7 +19,7 @@ function capitalize(str) {
|
|
|
19
19
|
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
20
20
|
}
|
|
21
21
|
function camelCase(str) {
|
|
22
|
-
const result = str.replace(/[-_]+/g, "_").replace(/_([a-zA-Z])/g, (_, char) => char.toUpperCase()).replace(/_+/g, "");
|
|
22
|
+
const result = str.replace(/[-_.]+/g, "_").replace(/_([a-zA-Z])/g, (_, char) => char.toUpperCase()).replace(/_+/g, "");
|
|
23
23
|
return result.charAt(0).toLowerCase() + result.slice(1);
|
|
24
24
|
}
|
|
25
25
|
function pascalCase(str) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/generator/client-generator.ts","../src/generator/enum-registry.ts","../src/generator/utils.ts","../src/generator/resource-generator.ts","../src/generator/zod-generator.ts","../src/generator/file-writer.ts","../src/generator/spec-loader.ts","../src/cli/commands/generate.ts","../src/cli/commands/init.ts"],"sourcesContent":["import { Command } from 'commander';\nimport path from 'path';\nimport fs from 'fs';\nimport { createJiti } from 'jiti';\nimport type { OrcConfig } from './generator/config';\nimport { runGenerate } from './cli/commands/generate';\nimport { runInit } from './cli/commands/init';\n\nconst CONFIG_NAMES = ['orc.config.ts', 'orc.config.js', 'orc.config.mjs'];\n\nasync function loadConfig(): Promise<OrcConfig> {\n const cwd = process.cwd();\n\n for (const configName of CONFIG_NAMES) {\n const configPath = path.join(cwd, configName);\n if (fs.existsSync(configPath)) {\n console.log(`Using config: ${configPath}`);\n const jiti = createJiti(cwd, { interopDefault: true });\n const config = await jiti.import(configPath) as OrcConfig;\n return config;\n }\n }\n\n throw new Error(\n `No config file found. Create one with 'orc init' or add one of: ${CONFIG_NAMES.join(', ')}`,\n );\n}\n\nconst program = new Command();\n\nprogram\n .name('orc')\n .description('ORC - OpenAPI Rest Client Generator')\n .version('0.1.0');\n\nprogram\n .command('generate')\n .description('Generate TypeScript API clients from OpenAPI specs')\n .option('-c, --client <name>', 'Generate a specific client only')\n .option('-s, --spec <url>', 'Override spec URL (requires --client)')\n .action(async (options) => {\n const config = await loadConfig();\n await runGenerate(config, options);\n });\n\nprogram\n .command('init')\n .description('Scaffold a new orc.config.ts file')\n .action(async () => {\n await runInit();\n });\n\nprogram.parse();\n","import fs from 'fs';\nimport path from 'path';\nimport { EnumRegistry } from './enum-registry';\nimport { ResourceGenerator } from './resource-generator';\nimport { ZodGenerator } from './zod-generator';\nimport { writeFile, type GeneratedFile } from './file-writer';\nimport { loadSpec } from './spec-loader';\nimport {\n validateFileName,\n validateOutputPath,\n pascalCase,\n singularize,\n camelCase,\n} from './utils';\nimport type { ClientConfig } from './config';\n\nexport interface GenerateResult {\n name: string;\n resourceNames: string[];\n files?: GeneratedFile[];\n}\n\nexport async function generateClient(\n config: ClientConfig,\n options: {\n specOverride?: string;\n write?: boolean;\n runtimePackage?: string;\n } = {},\n): Promise<GenerateResult> {\n const { name, output } = config;\n const specUrl = options.specOverride || config.spec;\n const shouldWrite = options.write !== false;\n const runtimePackage = options.runtimePackage || '@moinax/orc';\n\n validateOutputPath(output);\n\n const outputDir = path.join(output, 'generated');\n const clientClassName = `${name}Client`;\n\n validateFileName(clientClassName, 'client class name');\n\n console.log(`\\n${'='.repeat(60)}`);\n console.log(`Generating ${clientClassName}...`);\n console.log(`${'='.repeat(60)}`);\n\n // Clean up previously generated files\n if (shouldWrite && fs.existsSync(outputDir)) {\n fs.rmSync(outputDir, { recursive: true });\n console.log(`\\nCleaned up ${outputDir}`);\n }\n\n // Fetch/load OpenAPI spec\n const spec = await loadSpec(specUrl);\n\n // Create shared enum registry\n const enumRegistry = new EnumRegistry();\n\n // Create resource generator\n const resourceGenerator = new ResourceGenerator(spec.paths, spec.components?.schemas, clientClassName, {\n stripPathPrefix: config.stripPathPrefix,\n enumRegistry,\n runtimePackage,\n });\n\n // Generate resources FIRST (registers query param enums)\n console.log('\\nGenerating resource classes...');\n const { resources, tree, inlineSchemas } = resourceGenerator.generateAll();\n\n // Generate schemas (including inline schemas from resources)\n console.log('\\nGenerating Zod schemas...');\n const zodGenerator = new ZodGenerator(spec.components?.schemas, enumRegistry);\n zodGenerator.addInlineSchemas(inlineSchemas);\n const schemasCode = zodGenerator.generateSchemas(runtimePackage);\n\n const generatedFiles: GeneratedFile[] = [];\n\n // schemas.ts\n generatedFiles.push({\n path: path.join(outputDir, 'schemas.ts'),\n content: schemasCode,\n });\n\n // Resource files\n const resourceNames: string[] = [];\n for (const [resourceName, code] of Object.entries(resources)) {\n validateFileName(resourceName, 'resource name');\n generatedFiles.push({\n path: path.join(outputDir, 'resources', `${resourceName}.resource.ts`),\n content: code,\n });\n resourceNames.push(resourceName);\n }\n\n // Resources index\n const resourceIndexCode = resourceNames\n .map((resourceName) => `export { ${resourceName}Resource } from './${resourceName}.resource';`)\n .join('\\n');\n generatedFiles.push({\n path: path.join(outputDir, 'resources', 'index.ts'),\n content: resourceIndexCode,\n });\n\n // Resource base class\n const resourceBaseCode = `import type ${clientClassName} from './${clientClassName}';\nimport { Resource as BaseResource } from '${runtimePackage}';\n\nexport class Resource extends BaseResource {\n protected declare client: ${clientClassName};\n\n constructor(client: ${clientClassName}) {\n super(client);\n }\n}\n`;\n generatedFiles.push({\n path: path.join(outputDir, 'Resource.ts'),\n content: resourceBaseCode,\n });\n\n // Get top-level resources\n const topLevelResources: Array<{ propertyName: string; className: string }> = [];\n for (const [childName] of tree.children) {\n const className = pascalCase(childName);\n topLevelResources.push({\n propertyName: singularize(camelCase(childName)),\n className,\n });\n }\n\n // Client class\n console.log(`\\nGenerating ${clientClassName}...`);\n const resourceImports = topLevelResources.map((r) => `${r.className}Resource`).join(',\\n ');\n const resourceProperties = topLevelResources\n .map((r) => `public ${r.propertyName}: ${r.className}Resource;`)\n .join('\\n ');\n const resourceInstantiations = topLevelResources\n .map((r) => `this.${r.propertyName} = new ${r.className}Resource(this);`)\n .join('\\n ');\n\n const clientCode = `import { Client, ClientOptions } from '${runtimePackage}';\n\nimport {\n ${resourceImports},\n} from './resources';\n\nexport default class ${clientClassName} extends Client {\n ${resourceProperties}\n\n constructor(baseUrl: string, options: ClientOptions = {}) {\n super(baseUrl, options);\n ${resourceInstantiations}\n }\n}\n`;\n generatedFiles.push({\n path: path.join(outputDir, `${clientClassName}.ts`),\n content: clientCode,\n });\n\n // Main index\n const mainIndexCode = `export { default as ${clientClassName} } from './${clientClassName}';\nexport * from './schemas';\nexport * from './resources';\n`;\n generatedFiles.push({\n path: path.join(outputDir, 'index.ts'),\n content: mainIndexCode,\n });\n\n // Write files if not in dry-run mode\n if (shouldWrite) {\n for (const file of generatedFiles) {\n await writeFile(file.path, file.content);\n }\n }\n\n console.log(`\\n${clientClassName} generation complete!`);\n\n return {\n name,\n resourceNames: topLevelResources.map((r) => r.className),\n files: shouldWrite ? undefined : generatedFiles,\n };\n}\n","import pluralizeLib from 'pluralize';\nimport { camelCase, pascalCase, singularize } from './utils';\n\nexport interface EnumContext {\n source: 'schema' | 'queryParam';\n schemaName?: string;\n propertyPath?: string;\n paramName?: string;\n resourceName?: string;\n}\n\nexport interface EnumInfo {\n valuesConstName: string;\n schemaConstName: string;\n typeName: string;\n values: string[];\n}\n\nexport class EnumRegistry {\n private enums = new Map<string, EnumInfo>();\n private enumContexts = new Map<string, EnumContext[]>();\n private usedNames = new Set<string>();\n\n static fingerprint(values: string[]): string {\n return JSON.stringify([...values].sort());\n }\n\n generateEnumNames(values: string[], context: EnumContext): EnumInfo {\n const { source, schemaName, propertyPath, paramName, resourceName } = context;\n\n let baseName: string;\n if (source === 'schema' && schemaName && propertyPath) {\n const cleanSchemaName = schemaName\n .replace(/Schema$/, '')\n .replace(/SchemaInput$/, '')\n .replace(/Input$/, '');\n\n const pathParts = propertyPath.split('.');\n const contextFromPath = pathParts.map((p) => pascalCase(singularize(p))).join('');\n baseName = camelCase(cleanSchemaName) + contextFromPath;\n } else if (source === 'queryParam' && resourceName && paramName) {\n const singularResource = singularize(resourceName);\n baseName = camelCase(singularResource) + pascalCase(paramName);\n } else {\n baseName = camelCase(values[0].toLowerCase());\n }\n\n const valuesConstName = pluralizeLib.isPlural(baseName) ? baseName : pluralizeLib.plural(baseName);\n\n return {\n valuesConstName,\n schemaConstName: `${singularize(baseName)}Schema`,\n typeName: pascalCase(singularize(baseName)),\n values,\n };\n }\n\n register(values: string[], context: EnumContext): EnumInfo {\n const fingerprint = EnumRegistry.fingerprint(values);\n\n if (!this.enumContexts.has(fingerprint)) {\n this.enumContexts.set(fingerprint, []);\n }\n this.enumContexts.get(fingerprint)!.push(context);\n\n if (this.enums.has(fingerprint)) {\n return this.enums.get(fingerprint)!;\n }\n\n let enumInfo = this.generateEnumNames(values, context);\n\n let counter = 1;\n const hasCollision = () =>\n this.usedNames.has(enumInfo.valuesConstName) ||\n this.usedNames.has(enumInfo.schemaConstName) ||\n this.usedNames.has(enumInfo.typeName);\n\n while (hasCollision()) {\n const baseInfo = this.generateEnumNames(values, context);\n enumInfo = {\n valuesConstName: `${baseInfo.valuesConstName}${counter}`,\n schemaConstName: `${baseInfo.schemaConstName.replace(/Schema$/, '')}${counter}Schema`,\n typeName: `${baseInfo.typeName}${counter}`,\n values: baseInfo.values,\n };\n counter++;\n }\n\n this.usedNames.add(enumInfo.valuesConstName);\n this.usedNames.add(enumInfo.schemaConstName);\n this.usedNames.add(enumInfo.typeName);\n\n this.enums.set(fingerprint, enumInfo);\n return enumInfo;\n }\n\n has(values: string[]): boolean {\n return this.enums.has(EnumRegistry.fingerprint(values));\n }\n\n get(values: string[]): EnumInfo | undefined {\n return this.enums.get(EnumRegistry.fingerprint(values));\n }\n\n getAll(): EnumInfo[] {\n return Array.from(this.enums.values());\n }\n\n generateEnumExports(): string {\n const lines: string[] = [];\n\n if (this.enums.size === 0) {\n return '';\n }\n\n lines.push('// ============================================================================');\n lines.push('// Extracted Enums');\n lines.push('// ============================================================================');\n lines.push('');\n\n for (const enumInfo of this.enums.values()) {\n const { valuesConstName, schemaConstName, typeName, values } = enumInfo;\n const valuesStr = values.map((v) => `'${v}'`).join(', ');\n\n lines.push(`export const ${valuesConstName} = [${valuesStr}] as const;`);\n lines.push(`export const ${schemaConstName} = z.enum(${valuesConstName});`);\n lines.push(`export type ${typeName} = z.output<typeof ${schemaConstName}>;`);\n lines.push('');\n }\n\n return lines.join('\\n');\n }\n}\n","import pluralizeLib from 'pluralize';\n\nexport function capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function camelCase(str: string): string {\n const result = str\n .replace(/[-_]+/g, '_')\n .replace(/_([a-zA-Z])/g, (_, char) => char.toUpperCase())\n .replace(/_+/g, '');\n\n return result.charAt(0).toLowerCase() + result.slice(1);\n}\n\nexport function pascalCase(str: string): string {\n return capitalize(camelCase(str));\n}\n\nexport function schemaConstToTypeName(schemaConstName: string): string {\n const withoutSuffix = schemaConstName.replace(/Schema$/, '');\n return pascalCase(withoutSuffix);\n}\n\nexport function singularize(str: string): string {\n const match = str.match(/^(.*)([A-Z][a-z]+s)$/);\n if (match) {\n const prefix = match[1];\n const lastWord = match[2];\n return prefix + pluralizeLib.singular(lastWord);\n }\n return pluralizeLib.singular(str);\n}\n\nexport function isBooleanLikeEnum(values: unknown[]): boolean {\n if (!Array.isArray(values) || values.length !== 2) return false;\n const sorted = [...values].sort();\n return sorted[0] === 'false' && sorted[1] === 'true';\n}\n\nexport function getResourcePrefixedParamNames(\n methodName: string,\n resourceClassName: string,\n): { schemaConstName: string; typeName: string } {\n const singularResource = singularize(resourceClassName);\n\n if (methodName.startsWith('get')) {\n const rest = methodName.slice(3);\n return {\n schemaConstName: `get${singularResource}${rest}ParamsSchema`,\n typeName: `Get${singularResource}${rest}Params`,\n };\n }\n\n return {\n schemaConstName: `${camelCase(methodName)}${singularResource}ParamsSchema`,\n typeName: `${pascalCase(methodName)}${singularResource}Params`,\n };\n}\n\nexport function validateFileName(name: string, context: string): void {\n if (!name || typeof name !== 'string') {\n throw new Error(`Invalid ${context}: must be a non-empty string`);\n }\n if (name.includes('..') || name.includes('/') || name.includes('\\\\')) {\n throw new Error(`Invalid ${context}: contains path traversal characters`);\n }\n if (!/^[a-zA-Z][a-zA-Z0-9]*$/.test(name)) {\n throw new Error(`Invalid ${context}: must be alphanumeric starting with a letter`);\n }\n}\n\nexport function validateOutputPath(outputPath: string): void {\n if (!outputPath || typeof outputPath !== 'string') {\n throw new Error('Invalid output path: must be a non-empty string');\n }\n if (outputPath.includes('..')) {\n throw new Error('Invalid output path: contains path traversal characters');\n }\n}\n\nexport interface OpenAPISchema {\n type?: string;\n format?: string;\n enum?: string[];\n const?: unknown;\n nullable?: boolean;\n $ref?: string;\n anyOf?: OpenAPISchema[];\n oneOf?: OpenAPISchema[];\n allOf?: OpenAPISchema[];\n items?: OpenAPISchema;\n properties?: Record<string, OpenAPISchema>;\n additionalProperties?: boolean | OpenAPISchema;\n required?: string[];\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n minimum?: number;\n maximum?: number;\n minItems?: number;\n maxItems?: number;\n description?: string;\n}\n\nexport interface OpenAPIParameter {\n name: string;\n in: string;\n required?: boolean;\n schema?: OpenAPISchema;\n}\n\nexport interface OpenAPIOperation {\n operationId?: string;\n summary?: string;\n tags?: string[];\n parameters?: OpenAPIParameter[];\n requestBody?: {\n content?: {\n 'application/json'?: {\n schema?: OpenAPISchema;\n };\n };\n };\n responses?: Record<\n string,\n {\n content?: {\n 'application/json'?: {\n schema?: OpenAPISchema;\n };\n };\n }\n >;\n}\n\nexport interface OpenAPISpec {\n openapi: string;\n info: { title: string; version?: string };\n paths: Record<string, Record<string, OpenAPIOperation | OpenAPIParameter[]>>;\n components?: {\n schemas?: Record<string, OpenAPISchema>;\n };\n}\n\nexport interface PathSegment {\n name: string;\n isParam: boolean;\n raw: string;\n}\n\nexport function isListResponse(responseSchema: OpenAPISchema | undefined): boolean {\n if (!responseSchema) return false;\n\n if (responseSchema.type === 'object' && responseSchema.properties?.pagination) {\n return true;\n }\n if (responseSchema.type === 'array') {\n return true;\n }\n if (responseSchema.type === 'object' && responseSchema.properties) {\n for (const arrayProp of ['data', 'items', 'results']) {\n const prop = responseSchema.properties[arrayProp];\n if (prop?.type === 'array') return true;\n }\n }\n if (responseSchema.$ref) {\n const refName = responseSchema.$ref.split('/').pop()!;\n if (refName.includes('Paginated') || refName.includes('List')) {\n return true;\n }\n }\n return false;\n}\n\nexport function deriveEntityFromPath(pathPattern: string, includeParentContext = false): string | null {\n const segments = pathPattern.split('/').filter((seg) => seg && !seg.startsWith('{'));\n if (segments.length === 0) return null;\n\n if (includeParentContext && segments.length >= 2) {\n const parentSegment = segments[segments.length - 2];\n const lastSegment = segments[segments.length - 1];\n const singularParent = parentSegment.endsWith('s') ? parentSegment.slice(0, -1) : parentSegment;\n return pascalCase(singularParent) + pascalCase(lastSegment);\n }\n\n const lastSegment = segments[segments.length - 1];\n return pascalCase(lastSegment);\n}\n\nexport function isActionWord(word: string): boolean {\n const knownActions = ['status', 'approve', 'cancel', 'current', 'download_link', 'preferences'];\n if (knownActions.includes(word.toLowerCase())) return true;\n if (word.endsWith('s') && !word.endsWith('ss') && !word.endsWith('us')) {\n return false;\n }\n return true;\n}\n\nexport function operationIdToMethodName(\n operationId: string | undefined,\n httpMethod: string,\n pathPattern: string,\n resourceName: string,\n responseSchema: OpenAPISchema | undefined,\n): string {\n const isList = isListResponse(responseSchema);\n\n switch (httpMethod) {\n case 'get':\n return isList ? 'getList' : 'getDetail';\n case 'post':\n return 'create';\n case 'put':\n return 'replace';\n case 'patch':\n return 'update';\n case 'delete':\n return 'delete';\n default:\n return operationId ? camelCase(operationId) : httpMethod;\n }\n}\n\nexport function parsePathSegments(pathPattern: string): PathSegment[] {\n return pathPattern\n .split('/')\n .filter((seg) => seg)\n .map((seg) => ({\n name: seg.startsWith('{') ? seg.slice(1, -1) : seg,\n isParam: seg.startsWith('{'),\n raw: seg,\n }));\n}\n\nexport function getResourcePath(pathPattern: string): string[] {\n const segments = parsePathSegments(pathPattern);\n const resourcePath: string[] = [];\n for (const seg of segments) {\n if (!seg.isParam) {\n resourcePath.push(seg.name);\n }\n }\n return resourcePath;\n}\n\nexport interface PathTreeNode {\n name: string;\n children: Map<string, PathTreeNode>;\n operations: Array<{\n pathPattern: string;\n httpMethod: string;\n operation: OpenAPIOperation;\n }>;\n}\n\nexport function buildPathTree(paths: Record<string, Record<string, OpenAPIOperation | OpenAPIParameter[]>>): PathTreeNode {\n const tree: PathTreeNode = {\n name: 'root',\n children: new Map(),\n operations: [],\n };\n\n for (const [pathPattern, methods] of Object.entries(paths)) {\n for (const [httpMethod, operation] of Object.entries(methods)) {\n if (httpMethod === 'parameters') continue;\n\n const resourcePath = getResourcePath(pathPattern);\n\n let current = tree;\n for (const segment of resourcePath) {\n if (!current.children.has(segment)) {\n current.children.set(segment, {\n name: segment,\n children: new Map(),\n operations: [],\n });\n }\n current = current.children.get(segment)!;\n }\n\n current.operations.push({\n pathPattern,\n httpMethod,\n operation: operation as OpenAPIOperation,\n });\n }\n }\n\n return tree;\n}\n\nexport function cleanSchemaName(name: string): string {\n if (name.endsWith('SchemaInput')) {\n name = name.replace('SchemaInput', 'Input');\n } else if (name.endsWith('Schema')) {\n name = name.replace('Schema', '');\n }\n\n if (name.includes('__')) {\n const parts = name.split('__');\n name = parts[parts.length - 1];\n }\n\n name = name.replace(/_+$/, '');\n name = name.replace(/_([A-Za-z])/g, (_, char) => char.toUpperCase());\n\n return name;\n}\n","import { EnumRegistry } from './enum-registry';\nimport { ZodGenerator } from './zod-generator';\nimport {\n camelCase,\n pascalCase,\n singularize,\n capitalize,\n schemaConstToTypeName,\n isBooleanLikeEnum,\n getResourcePrefixedParamNames,\n operationIdToMethodName,\n getResourcePath,\n buildPathTree,\n cleanSchemaName,\n OpenAPISchema,\n OpenAPIOperation,\n OpenAPIParameter,\n PathTreeNode,\n} from './utils';\n\ninterface ResourceResult {\n className: string;\n code: string;\n children: Array<{ propertyName: string; className: string; fileName: string }>;\n}\n\nexport class ResourceGenerator {\n private schemas: Record<string, OpenAPISchema>;\n private clientClassName: string;\n private stripPathPrefix: string | null;\n public enumRegistry: EnumRegistry;\n private paths: Record<string, Record<string, OpenAPIOperation | OpenAPIParameter[]>>;\n private pathTree: PathTreeNode;\n private generatedResources = new Map<string, ResourceResult>();\n public collectedInlineSchemas = new Map<\n string,\n { schema: OpenAPISchema; isInput: boolean; typeName: string }\n >();\n private currentResourceName: string | null = null;\n private runtimePackage: string;\n\n constructor(\n paths: Record<string, Record<string, OpenAPIOperation | OpenAPIParameter[]>> | undefined,\n schemas: Record<string, OpenAPISchema> | undefined,\n clientClassName: string,\n options: {\n stripPathPrefix?: string;\n enumRegistry?: EnumRegistry;\n runtimePackage?: string;\n } = {},\n ) {\n this.schemas = schemas || {};\n this.clientClassName = clientClassName;\n this.stripPathPrefix = options.stripPathPrefix || null;\n this.enumRegistry = options.enumRegistry || new EnumRegistry();\n this.runtimePackage = options.runtimePackage || '@moinax/orc';\n\n this.paths = this.stripPathPrefix ? this.stripPrefixFromPaths(paths || {}) : paths || {};\n this.pathTree = buildPathTree(this.paths);\n }\n\n collectAllInlineSchemas(): Map<string, { schema: OpenAPISchema; isInput: boolean; typeName: string }> {\n this._collectInlineSchemasFromNode(this.pathTree, []);\n return this.collectedInlineSchemas;\n }\n\n private _collectInlineSchemasFromNode(node: PathTreeNode, parentPath: string[]): void {\n const nodeName = node.name === 'root' ? '' : node.name;\n const currentPath = [...parentPath, nodeName].filter(Boolean);\n\n const operationMethodNames = new Map<string, string>();\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n const responseSchemaObj = (\n operation.responses?.['200'] || operation.responses?.['201']\n )?.content?.['application/json']?.schema;\n const methodName = operationIdToMethodName(\n operation.operationId,\n httpMethod,\n pathPattern,\n node.name,\n responseSchemaObj,\n );\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n operationMethodNames.set(opKey, methodName);\n }\n\n const resourceClassName = this.getResourceClassName(currentPath);\n\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n if (this.hasInlineRequestBody(operation)) {\n const requestSchema = this.getRequestSchemaName(operation, pathPattern);\n if (!requestSchema) {\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n const methodName = operationMethodNames.get(opKey)!;\n const schemaConstName = this.generateInlineSchemaName(resourceClassName, methodName, 'body');\n\n const bodySchema = operation.requestBody!.content!['application/json']!.schema!;\n this.collectedInlineSchemas.set(schemaConstName, {\n schema: bodySchema,\n isInput: true,\n typeName: `${pascalCase(resourceClassName)}${pascalCase(methodName)}Body`,\n });\n }\n }\n }\n\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n if (this.hasInlineResponseSchema(operation)) {\n const responseSchema = this.getResponseSchemaName(operation, pathPattern);\n if (!responseSchema) {\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n const methodName = operationMethodNames.get(opKey)!;\n const schemaConstName = this.generateInlineSchemaName(resourceClassName, methodName, 'response');\n\n const successResponse = operation.responses?.['200'] || operation.responses?.['201'];\n const inlineSchema = successResponse!.content!['application/json']!.schema!;\n this.collectedInlineSchemas.set(schemaConstName, {\n schema: inlineSchema,\n isInput: false,\n typeName: `${pascalCase(resourceClassName)}${pascalCase(methodName)}Response`,\n });\n }\n }\n }\n\n for (const [, childNode] of node.children) {\n this._collectInlineSchemasFromNode(childNode, currentPath);\n }\n }\n\n private stripPrefixFromPaths(\n paths: Record<string, Record<string, OpenAPIOperation | OpenAPIParameter[]>>,\n ): Record<string, Record<string, OpenAPIOperation | OpenAPIParameter[]>> {\n const result: Record<string, Record<string, OpenAPIOperation | OpenAPIParameter[]>> = {};\n for (const [pathPattern, methods] of Object.entries(paths)) {\n let newPath = pathPattern;\n if (this.stripPathPrefix && pathPattern.startsWith(this.stripPathPrefix)) {\n newPath = pathPattern.slice(this.stripPathPrefix.length) || '/';\n }\n result[newPath] = methods;\n }\n return result;\n }\n\n private getResponseSchemaName(operation: OpenAPIOperation, pathPattern: string | null = null): string | null {\n const successResponse = operation.responses?.['200'] || operation.responses?.['201'];\n if (!successResponse) return null;\n\n const content = successResponse.content?.['application/json'];\n if (!content?.schema) return null;\n\n const schema = content.schema;\n if (schema.$ref) {\n const rawName = schema.$ref.split('/').pop()!;\n return cleanSchemaName(rawName);\n }\n\n if (schema.type === 'object') {\n if (operation.operationId) {\n const opId = operation.operationId;\n const patterns = [\n /^create[_-]?(.+)$/i,\n /^update[_-]?(.+)$/i,\n /^get[_-]?(.+)$/i,\n /^(.+)[_-]?create$/i,\n /^(.+)[_-]?update$/i,\n /^(.+)[_-]?get$/i,\n ];\n\n for (const pattern of patterns) {\n const match = opId.match(pattern);\n if (match) {\n const entityName = pascalCase(match[1].replace(/[_-]/g, ' '));\n const schemaSchemaName = `${entityName}Schema`;\n if (this.schemas[entityName] || this.schemas[schemaSchemaName]) {\n return entityName;\n }\n }\n }\n }\n\n if (pathPattern) {\n const resourcePath = getResourcePath(pathPattern);\n if (resourcePath.length > 0) {\n const lastSegment = resourcePath[resourcePath.length - 1];\n const entityName = pascalCase(singularize(lastSegment));\n const schemaSchemaName = `${entityName}Schema`;\n if (this.schemas[entityName] || this.schemas[schemaSchemaName]) {\n return entityName;\n }\n }\n }\n }\n\n if (schema.type === 'object' && schema.properties) {\n return null;\n }\n\n return null;\n }\n\n private getRequestSchemaName(operation: OpenAPIOperation, pathPattern: string | null = null): string | null {\n const content = operation.requestBody?.content?.['application/json'];\n if (!content?.schema) return null;\n\n const schema = content.schema;\n if (schema.$ref) {\n const rawName = schema.$ref.split('/').pop()!;\n return cleanSchemaName(rawName);\n }\n\n return null;\n }\n\n private hasInlineRequestBody(operation: OpenAPIOperation): boolean {\n const content = operation.requestBody?.content?.['application/json'];\n if (!content?.schema) return false;\n return !content.schema.$ref && content.schema.type === 'object';\n }\n\n private hasInlineResponseSchema(operation: OpenAPIOperation): boolean {\n const successResponse = operation.responses?.['200'] || operation.responses?.['201'];\n if (!successResponse) return false;\n\n const content = successResponse.content?.['application/json'];\n if (!content?.schema) return false;\n\n const schema = content.schema;\n if (schema.$ref) return false;\n if (schema.type === 'object' && schema.properties?.pagination) return false;\n return schema.type === 'object' && !!schema.properties;\n }\n\n private generateInlineSchemaName(resourceName: string, methodName: string, purpose: string): string {\n const baseName = `${camelCase(resourceName)}${capitalize(methodName)}${capitalize(purpose)}Schema`;\n return camelCase(baseName);\n }\n\n private getPathParams(operation: OpenAPIOperation): Array<{ name: string; type: string; required: boolean }> {\n return (operation.parameters || [])\n .filter((p): p is OpenAPIParameter => 'in' in p && p.in === 'path')\n .map((p) => ({\n name: p.name,\n type: this.paramTypeToTs(p.schema),\n required: p.required !== false,\n }));\n }\n\n private getQueryParams(\n operation: OpenAPIOperation,\n ): Array<{ name: string; type: string; required: boolean; schema?: OpenAPISchema }> {\n return (operation.parameters || [])\n .filter((p): p is OpenAPIParameter => 'in' in p && p.in === 'query')\n .map((p) => ({\n name: p.name,\n type: this.paramTypeToTs(p.schema),\n required: p.required === true,\n schema: p.schema,\n }));\n }\n\n private paramTypeToTs(schema?: OpenAPISchema): string {\n if (!schema) return 'string';\n if (schema.enum) return schema.enum.map((v) => `'${v}'`).join(' | ');\n switch (schema.type) {\n case 'integer':\n case 'number':\n return 'number';\n case 'boolean':\n return 'boolean';\n default:\n return 'string';\n }\n }\n\n private paramToZod(\n param: { name: string; required: boolean; schema?: OpenAPISchema },\n resourceName?: string,\n ): string {\n const { schema, name: paramName } = param;\n if (!schema) return 'z.string()';\n\n let zodType: string;\n if (schema.enum) {\n if (isBooleanLikeEnum(schema.enum)) {\n zodType = 'z.boolean()';\n } else {\n const context = {\n source: 'queryParam' as const,\n resourceName: resourceName || this.currentResourceName || undefined,\n paramName: paramName,\n };\n const enumInfo = this.enumRegistry.register(schema.enum, context);\n zodType = enumInfo.schemaConstName;\n }\n } else {\n switch (schema.type) {\n case 'integer':\n zodType = 'z.number().int()';\n break;\n case 'number':\n zodType = 'z.number()';\n break;\n case 'boolean':\n zodType = 'z.boolean()';\n break;\n default:\n zodType = 'z.string()';\n }\n }\n\n if (!param.required) {\n zodType = `${zodType}.optional()`;\n }\n\n return zodType;\n }\n\n private isPaginationParam(paramName: string): boolean {\n return ['page', 'limit', 'orderBy', 'ordering'].includes(paramName);\n }\n\n private getUniqueMethodName(\n operationId: string | undefined,\n httpMethod: string,\n pathPattern: string,\n usedNames: Set<string>,\n responseSchema?: OpenAPISchema,\n ): string {\n let methodName = operationIdToMethodName(operationId, httpMethod, pathPattern, '', responseSchema);\n\n if (usedNames.has(methodName) && operationId) {\n methodName = camelCase(operationId);\n }\n\n let finalName = methodName;\n let counter = 1;\n while (usedNames.has(finalName)) {\n finalName = `${methodName}${counter}`;\n counter++;\n }\n\n usedNames.add(finalName);\n return finalName;\n }\n\n private getOperationKey(pathPattern: string, httpMethod: string): string {\n return `${httpMethod}:${pathPattern}`;\n }\n\n private getResourceClassName(pathSegments: string[]): string {\n return pathSegments.map((seg) => pascalCase(seg)).join('');\n }\n\n private generateResourceNode(node: PathTreeNode, pathSegments: string[]): ResourceResult {\n const parentImportPath = '../';\n const resourceClassName = this.getResourceClassName(pathSegments);\n\n this.currentResourceName = resourceClassName;\n\n const lines: string[] = [];\n const usedMethodNames = new Set<string>();\n const schemaImports = new Set<string>();\n let hasQueryParams = false;\n let hasPaginatedResponse = false;\n\n const childResources: Array<{ propertyName: string; className: string; fileName: string }> = [];\n for (const [childName, childNode] of node.children) {\n const childPath = [...pathSegments, childName];\n const childClassName = this.getResourceClassName(childPath);\n childResources.push({\n propertyName: singularize(camelCase(childName)),\n className: childClassName,\n fileName: `${childClassName}.resource`,\n });\n }\n\n const operationMethodNames = new Map<string, string>();\n let usesInlineZod = false;\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n const successResponse = operation.responses?.['200'] || operation.responses?.['201'];\n const responseContent = successResponse?.content?.['application/json'];\n const responseSchemaObj = responseContent?.schema;\n\n const methodName = this.getUniqueMethodName(\n operation.operationId,\n httpMethod,\n pathPattern,\n usedMethodNames,\n responseSchemaObj,\n );\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n operationMethodNames.set(opKey, methodName);\n\n const queryParams = this.getQueryParams(operation);\n if (queryParams.length > 0) {\n hasQueryParams = true;\n }\n\n if (responseSchemaObj?.type === 'object' && responseSchemaObj?.properties?.pagination) {\n hasPaginatedResponse = true;\n }\n\n if (\n responseSchemaObj?.type === 'object' &&\n responseSchemaObj?.properties?.pagination &&\n !responseSchemaObj?.properties?.data?.items?.$ref\n ) {\n usesInlineZod = true;\n }\n }\n\n const typeImports = new Map<string, string>();\n\n if (hasQueryParams) {\n schemaImports.add('paginationParamsSchema');\n }\n if (hasPaginatedResponse) {\n schemaImports.add('paginationResponseSchema');\n typeImports.set('paginationResponseSchema', 'PaginationResponse');\n }\n\n for (const { pathPattern, operation } of node.operations) {\n const responseSchema = this.getResponseSchemaName(operation, pathPattern);\n if (responseSchema) {\n const schemaConst = `${camelCase(responseSchema)}Schema`;\n schemaImports.add(schemaConst);\n typeImports.set(schemaConst, pascalCase(responseSchema));\n }\n const requestSchema = this.getRequestSchemaName(operation, pathPattern);\n if (requestSchema) {\n const schemaConst = `${camelCase(requestSchema)}Schema`;\n schemaImports.add(schemaConst);\n typeImports.set(schemaConst, pascalCase(requestSchema));\n }\n }\n\n const inlineBodySchemas = new Map<string, { schemaConst: string; typeName: string }>();\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n if (this.hasInlineRequestBody(operation)) {\n const requestSchema = this.getRequestSchemaName(operation, pathPattern);\n if (!requestSchema) {\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n const methodName = operationMethodNames.get(opKey)!;\n const schemaConstName = this.generateInlineSchemaName(resourceClassName, methodName, 'body');\n const typeName = schemaConstToTypeName(schemaConstName);\n inlineBodySchemas.set(opKey, { schemaConst: schemaConstName, typeName });\n schemaImports.add(schemaConstName);\n typeImports.set(schemaConstName, typeName);\n }\n }\n }\n\n const inlineResponseSchemas = new Map<string, { schemaConst: string; typeName: string }>();\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n if (this.hasInlineResponseSchema(operation)) {\n const responseSchema = this.getResponseSchemaName(operation, pathPattern);\n if (!responseSchema) {\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n const methodName = operationMethodNames.get(opKey)!;\n const schemaConstName = this.generateInlineSchemaName(resourceClassName, methodName, 'response');\n const typeName = schemaConstToTypeName(schemaConstName);\n inlineResponseSchemas.set(opKey, { schemaConst: schemaConstName, typeName });\n schemaImports.add(schemaConstName);\n typeImports.set(schemaConstName, typeName);\n }\n }\n }\n\n const needsZod = hasQueryParams || usesInlineZod;\n if (needsZod) {\n lines.push(\"import { z } from 'zod';\");\n lines.push('');\n }\n\n const hasParsing = node.operations.some(({ httpMethod, operation }) => {\n const successResponse = operation.responses?.['200'] || operation.responses?.['201'];\n const hasResponseParsing = !!successResponse?.content?.['application/json']?.schema;\n const hasBodyParsing = ['post', 'put', 'patch'].includes(httpMethod) && !!operation.requestBody;\n const hasParamsParsing = this.getQueryParams(operation).length > 0;\n return hasResponseParsing || hasBodyParsing || hasParamsParsing;\n });\n if (hasParsing) {\n lines.push(`import { parseSchema } from '${this.runtimePackage}';`);\n }\n\n lines.push(`import { Resource } from '${parentImportPath}Resource';`);\n\n const schemaImportPlaceholderIndex = lines.length;\n lines.push('__SCHEMA_IMPORTS_PLACEHOLDER__');\n\n for (const child of childResources) {\n lines.push(`import { ${child.className}Resource } from './${child.fileName}';`);\n }\n lines.push('');\n\n const queryParamsSchemas: string[] = [];\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n const queryParams = this.getQueryParams(operation);\n if (queryParams.length > 0) {\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n const methodName = operationMethodNames.get(opKey)!;\n const { schemaConstName, typeName } = getResourcePrefixedParamNames(methodName, resourceClassName);\n\n const specificParams = queryParams.filter((p) => !this.isPaginationParam(p.name));\n\n if (specificParams.length > 0) {\n const props = specificParams.map((p) => {\n const zodCode = this.paramToZod(p, resourceClassName);\n if (p.schema?.enum) {\n const enumInfo = this.enumRegistry.get(p.schema.enum);\n if (enumInfo) {\n schemaImports.add(enumInfo.schemaConstName);\n }\n }\n return ` ${p.name}: ${zodCode}`;\n });\n queryParamsSchemas.push(\n `export const ${schemaConstName} = paginationParamsSchema.extend({\\n${props.join(',\\n')},\\n});`,\n );\n } else {\n queryParamsSchemas.push(`export const ${schemaConstName} = paginationParamsSchema;`);\n }\n queryParamsSchemas.push(`export type ${typeName} = z.input<typeof ${schemaConstName}>;`);\n queryParamsSchemas.push('');\n }\n }\n\n if (queryParamsSchemas.length > 0) {\n lines.push('// Query parameter schemas');\n lines.push(queryParamsSchemas.join('\\n'));\n }\n\n lines.push(`export class ${resourceClassName}Resource extends Resource {`);\n\n for (const child of childResources) {\n lines.push(` public ${child.propertyName}: ${child.className}Resource;`);\n }\n\n if (childResources.length > 0) {\n lines.push('');\n lines.push(\n ` constructor(client: InstanceType<typeof import('${parentImportPath}${this.clientClassName}').default>) {`,\n );\n lines.push(' super(client);');\n for (const child of childResources) {\n lines.push(` this.${child.propertyName} = new ${child.className}Resource(client);`);\n }\n lines.push(' }');\n }\n\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n const methodName = operationMethodNames.get(opKey)!;\n const pathParams = this.getPathParams(operation);\n const queryParams = this.getQueryParams(operation);\n const responseSchema = this.getResponseSchemaName(operation, pathPattern);\n const requestSchema = this.getRequestSchemaName(operation, pathPattern);\n\n const params: string[] = [];\n for (const p of pathParams) {\n params.push(`${p.name}: ${p.type}`);\n }\n\n if (queryParams.length > 0) {\n const { typeName } = getResourcePrefixedParamNames(methodName, resourceClassName);\n const hasRequired = queryParams.some((p) => p.required);\n params.push(`params${hasRequired ? '' : '?'}: ${typeName}`);\n }\n\n const inlineBodySchema = inlineBodySchemas.get(opKey);\n\n if (['post', 'put', 'patch'].includes(httpMethod) && operation.requestBody) {\n if (requestSchema) {\n const schemaConst = `${camelCase(requestSchema)}Schema`;\n const typeName = typeImports.get(schemaConst)!;\n params.push(`body: ${typeName}`);\n } else if (inlineBodySchema) {\n params.push(`body: ${inlineBodySchema.typeName}`);\n } else {\n params.push('body: Record<string, unknown>');\n }\n }\n\n const fullPath = this.stripPathPrefix ? this.stripPathPrefix + pathPattern : pathPattern;\n let pathTemplate = fullPath.replace(/\\{(\\w+)\\}/g, '${$1}');\n pathTemplate = '`' + pathTemplate + '`';\n\n const successResponse = operation.responses?.['200'] || operation.responses?.['201'];\n const responseContent = successResponse?.content?.['application/json'];\n const responseSchemaObj = responseContent?.schema;\n\n let returnType = 'void';\n let parseLogic = '';\n\n if (responseSchemaObj) {\n if (responseSchemaObj.type === 'object' && responseSchemaObj.properties?.pagination) {\n const dataRef = responseSchemaObj.properties.data?.items?.$ref;\n if (dataRef) {\n const rawItemSchema = dataRef.split('/').pop()!;\n const itemSchema = cleanSchemaName(rawItemSchema);\n const itemSchemaConst = `${camelCase(itemSchema)}Schema`;\n const itemTypeName = pascalCase(itemSchema);\n schemaImports.add(itemSchemaConst);\n typeImports.set(itemSchemaConst, itemTypeName);\n returnType = `{ pagination: PaginationResponse; data: ${itemTypeName}[] }`;\n parseLogic = `const schema = z.object({ pagination: paginationResponseSchema, data: z.array(${itemSchemaConst}) }).describe('Paginated${itemTypeName}List');\n return parseSchema(schema, response);`;\n } else {\n if (responseSchema) {\n const itemSchemaConst = `${camelCase(responseSchema)}Schema`;\n const itemTypeName = pascalCase(responseSchema);\n schemaImports.add(itemSchemaConst);\n typeImports.set(itemSchemaConst, itemTypeName);\n returnType = `{ pagination: PaginationResponse; data: ${itemTypeName}[] }`;\n parseLogic = `const schema = z.object({ pagination: paginationResponseSchema, data: z.array(${itemSchemaConst}) }).describe('Paginated${itemTypeName}List');\n return parseSchema(schema, response);`;\n } else {\n returnType = `{ pagination: PaginationResponse; data: unknown[] }`;\n parseLogic = `const schema = z.object({ pagination: paginationResponseSchema, data: z.array(z.unknown()) }).describe('PaginatedList');\n return parseSchema(schema, response);`;\n }\n }\n } else if (responseSchema) {\n const schemaConstName = `${camelCase(responseSchema)}Schema`;\n const typeName = pascalCase(responseSchema);\n returnType = typeName;\n parseLogic = `return parseSchema(${schemaConstName}, response);`;\n schemaImports.add(schemaConstName);\n typeImports.set(schemaConstName, typeName);\n } else if (inlineResponseSchemas.get(opKey)) {\n const inlineSchema = inlineResponseSchemas.get(opKey)!;\n returnType = inlineSchema.typeName;\n parseLogic = `return parseSchema(${inlineSchema.schemaConst}, response);`;\n } else {\n returnType = 'unknown';\n parseLogic = 'return response;';\n }\n }\n\n lines.push('');\n lines.push(` async ${methodName}(${params.join(', ')}): Promise<${returnType}> {`);\n\n if (queryParams.length > 0) {\n const { schemaConstName } = getResourcePrefixedParamNames(methodName, resourceClassName);\n lines.push(` const searchParams = new URLSearchParams();`);\n lines.push(` if (params) {`);\n lines.push(` const validated = parseSchema(${schemaConstName}, params);`);\n lines.push(` Object.entries(validated).forEach(([key, value]) => {`);\n lines.push(` if (value !== undefined) searchParams.set(key, String(value));`);\n lines.push(` });`);\n lines.push(` }`);\n lines.push(` const query = searchParams.toString();`);\n lines.push(` const url = query ? \\`\\${${pathTemplate}}?\\${query}\\` : ${pathTemplate};`);\n }\n\n const urlVar = queryParams.length > 0 ? 'url' : pathTemplate;\n const needsResponse = returnType !== 'void';\n const responsePrefix = needsResponse ? 'const response = ' : '';\n\n const hasBodySchema = requestSchema || inlineBodySchema;\n const hasBodyValidation = ['post', 'put', 'patch'].includes(httpMethod) && hasBodySchema;\n const bodyVar = hasBodyValidation ? 'validatedBody' : 'body';\n\n if (hasBodyValidation) {\n const bodySchemaConst = requestSchema\n ? `${camelCase(requestSchema)}Schema`\n : inlineBodySchema!.schemaConst;\n lines.push(` const validatedBody = parseSchema(${bodySchemaConst}, body);`);\n }\n\n switch (httpMethod) {\n case 'get':\n lines.push(` ${responsePrefix}await this.client.get(${urlVar});`);\n break;\n case 'post':\n lines.push(` ${responsePrefix}await this.client.post(${urlVar}, ${bodyVar});`);\n break;\n case 'put':\n lines.push(` ${responsePrefix}await this.client.put(${urlVar}, ${bodyVar});`);\n break;\n case 'patch':\n lines.push(` ${responsePrefix}await this.client.patch(${urlVar}, ${bodyVar});`);\n break;\n case 'delete':\n lines.push(` ${responsePrefix}await this.client.delete(${urlVar});`);\n break;\n }\n\n if (parseLogic) {\n lines.push(` ${parseLogic}`);\n }\n\n lines.push(' }');\n }\n\n lines.push('}');\n\n const placeholderIndex = lines.findIndex((l) => l === '__SCHEMA_IMPORTS_PLACEHOLDER__');\n if (placeholderIndex >= 0) {\n if (schemaImports.size > 0 || typeImports.size > 0) {\n const allImports = new Set([...schemaImports, ...typeImports.values()]);\n lines[placeholderIndex] = `import { ${Array.from(allImports).join(', ')} } from '${parentImportPath}schemas';`;\n } else {\n lines.splice(placeholderIndex, 1);\n }\n }\n\n return {\n className: resourceClassName,\n code: lines.join('\\n'),\n children: childResources,\n };\n }\n\n private generateFromTree(\n node: PathTreeNode,\n pathSegments: string[] = [],\n depth = 0,\n ): Array<ResourceResult & { pathSegments: string[] }> {\n const resources: Array<ResourceResult & { pathSegments: string[] }> = [];\n\n for (const [childName, childNode] of node.children) {\n const childPath = [...pathSegments, childName];\n const childResources = this.generateFromTree(childNode, childPath, depth + 1);\n resources.push(...childResources);\n }\n\n if (pathSegments.length > 0 && (node.operations.length > 0 || node.children.size > 0)) {\n const resource = this.generateResourceNode(node, pathSegments);\n resources.push({\n pathSegments,\n ...resource,\n });\n }\n\n return resources;\n }\n\n generateAll(): {\n resources: Record<string, string>;\n tree: PathTreeNode;\n inlineSchemas: Map<string, { schema: OpenAPISchema; isInput: boolean; typeName: string }>;\n } {\n this.collectAllInlineSchemas();\n\n const resources = this.generateFromTree(this.pathTree);\n\n const result: Record<string, string> = {};\n for (const resource of resources) {\n result[resource.className] = resource.code;\n }\n\n return {\n resources: result,\n tree: this.pathTree,\n inlineSchemas: this.collectedInlineSchemas,\n };\n }\n}\n","import { EnumRegistry, EnumContext } from './enum-registry';\nimport { camelCase, pascalCase, isBooleanLikeEnum, cleanSchemaName, OpenAPISchema } from './utils';\n\nexport interface UsedDateSchemas {\n stringToDateSchema: boolean;\n stringToDaySchema: boolean;\n dateToStringSchema: boolean;\n dayToStringSchema: boolean;\n}\n\nexport class ZodGenerator {\n private schemas: Record<string, OpenAPISchema>;\n private generatedSchemas = new Map<string, string>();\n private schemaOrder: string[] = [];\n private inlineSchemas = new Map<string, { schema: OpenAPISchema; isInput: boolean; typeName: string }>();\n public enumRegistry: EnumRegistry;\n public usedDateSchemas: UsedDateSchemas = {\n stringToDateSchema: false,\n stringToDaySchema: false,\n dateToStringSchema: false,\n dayToStringSchema: false,\n };\n private currentSchemaName: string | null = null;\n private currentPropertyPath: string | null = null;\n\n constructor(schemas?: Record<string, OpenAPISchema>, enumRegistry?: EnumRegistry) {\n this.schemas = schemas || {};\n this.enumRegistry = enumRegistry || new EnumRegistry();\n }\n\n addInlineSchemas(inlineSchemas: Map<string, { schema: OpenAPISchema; isInput: boolean; typeName: string }>): void {\n this.inlineSchemas = inlineSchemas;\n }\n\n convertSchema(schema: OpenAPISchema | undefined, schemaName: string | null = null, isTopLevel = false): string {\n if (!schema) return 'z.unknown()';\n\n if (schema.$ref) {\n const refName = schema.$ref.split('/').pop()!;\n const cleanedName = cleanSchemaName(refName);\n return `${camelCase(cleanedName)}Schema`;\n }\n\n if (schema.anyOf) {\n const options = schema.anyOf.map((s) => this.convertSchema(s, schemaName));\n if (options.length === 2 && options.includes('z.null()')) {\n const nonNull = options.find((o) => o !== 'z.null()');\n const isInputSchema =\n schemaName &&\n (schemaName.includes('Input') || schemaName.includes('Create') || schemaName.includes('Update'));\n return isInputSchema ? `${nonNull}.nullish()` : `${nonNull}.nullable()`;\n }\n return `z.union([${options.join(', ')}])`;\n }\n\n if (schema.oneOf) {\n const options = schema.oneOf.map((s) => this.convertSchema(s, schemaName));\n return `z.union([${options.join(', ')}])`;\n }\n\n if (schema.allOf) {\n const schemas = schema.allOf.map((s) => this.convertSchema(s, schemaName));\n if (schemas.length === 1) return schemas[0];\n return schemas.reduce((acc, s) => `${acc}.merge(${s})`);\n }\n\n if (schema.const !== undefined) {\n if (typeof schema.const === 'string') {\n return `z.literal('${schema.const}')`;\n }\n return `z.literal(${JSON.stringify(schema.const)})`;\n }\n\n const isNullable = schema.nullable === true;\n let zodSchema: string;\n\n switch (schema.type) {\n case 'string':\n zodSchema = this.convertStringSchema(schema, schemaName);\n break;\n case 'number':\n case 'integer':\n zodSchema = this.convertNumberSchema(schema, schemaName);\n break;\n case 'boolean':\n zodSchema = 'z.boolean()';\n break;\n case 'array':\n zodSchema = this.convertArraySchema(schema, schemaName);\n break;\n case 'object':\n zodSchema = this.convertObjectSchema(schema, schemaName);\n break;\n case 'null':\n return 'z.null()';\n default:\n if (schema.enum) {\n zodSchema = this.convertEnumSchema(schema, schemaName);\n } else if (schema.properties) {\n zodSchema = this.convertObjectSchema(schema, schemaName);\n } else {\n zodSchema = 'z.unknown()';\n }\n }\n\n if (isNullable) {\n const isInputSchema =\n schemaName && (schemaName.includes('Input') || schemaName.includes('Create') || schemaName.includes('Update'));\n zodSchema = isInputSchema ? `${zodSchema}.nullish()` : `${zodSchema}.nullable()`;\n }\n\n return zodSchema;\n }\n\n private convertStringSchema(schema: OpenAPISchema, schemaName: string | null = null): string {\n if (schema.enum) {\n return this.convertEnumSchema(schema, schemaName);\n }\n\n if (schema.format === 'date-time' || schema.format === 'date') {\n const isInputSchema =\n schemaName && (schemaName.includes('Input') || schemaName.includes('Create') || schemaName.includes('Update'));\n const isDateTime = schema.format === 'date-time';\n\n if (isInputSchema) {\n if (isDateTime) {\n this.usedDateSchemas.dateToStringSchema = true;\n return 'dateToStringSchema';\n } else {\n this.usedDateSchemas.dayToStringSchema = true;\n return 'dayToStringSchema';\n }\n }\n if (isDateTime) {\n this.usedDateSchemas.stringToDateSchema = true;\n return 'stringToDateSchema';\n } else {\n this.usedDateSchemas.stringToDaySchema = true;\n return 'stringToDaySchema';\n }\n }\n\n let zod = 'z.string()';\n if (schema.format === 'uuid') {\n zod = 'z.string().uuid()';\n } else if (schema.format === 'email') {\n zod = 'z.string().email()';\n } else if (schema.format === 'uri') {\n zod = 'z.string().url()';\n }\n\n if (schema.minLength !== undefined) {\n zod = `${zod}.min(${schema.minLength})`;\n }\n if (schema.maxLength !== undefined) {\n zod = `${zod}.max(${schema.maxLength})`;\n }\n if (schema.pattern && !schema.format) {\n zod = `${zod}.regex(/${schema.pattern}/)`;\n }\n\n return zod;\n }\n\n private convertNumberSchema(schema: OpenAPISchema, schemaName: string | null = null): string {\n const isInputSchema =\n schemaName &&\n (schemaName.includes('Input') ||\n schemaName.includes('Body') ||\n schemaName.includes('Params') ||\n schemaName === 'InlineInput');\n const baseType = isInputSchema ? 'z.coerce.number()' : 'z.number()';\n let zod = schema.type === 'integer' ? `${baseType}.int()` : baseType;\n\n if (schema.minimum !== undefined) {\n zod = `${zod}.min(${schema.minimum})`;\n }\n if (schema.maximum !== undefined) {\n zod = `${zod}.max(${schema.maximum})`;\n }\n\n return zod;\n }\n\n private convertArraySchema(schema: OpenAPISchema, schemaName: string | null = null): string {\n const itemSchema = schema.items ? this.convertSchema(schema.items, schemaName) : 'z.unknown()';\n let zod = `z.array(${itemSchema})`;\n\n if (schema.minItems !== undefined) {\n zod = `${zod}.min(${schema.minItems})`;\n }\n if (schema.maxItems !== undefined) {\n zod = `${zod}.max(${schema.maxItems})`;\n }\n\n return zod;\n }\n\n private convertObjectSchema(schema: OpenAPISchema, schemaName: string | null = null): string {\n if (!schema.properties || Object.keys(schema.properties).length === 0) {\n if (schema.additionalProperties && typeof schema.additionalProperties === 'object') {\n const valueSchema = this.convertSchema(schema.additionalProperties as OpenAPISchema, schemaName);\n return `z.record(z.string(), ${valueSchema})`;\n }\n return 'z.object({})';\n }\n\n const required = new Set(schema.required || []);\n const properties: string[] = [];\n\n for (const [propName, propSchema] of Object.entries(schema.properties)) {\n const previousPropertyPath = this.currentPropertyPath;\n this.currentPropertyPath = previousPropertyPath ? `${previousPropertyPath}.${propName}` : propName;\n\n const propZod = this.convertSchema(propSchema, schemaName);\n const isRequired = required.has(propName);\n const finalProp = isRequired ? propZod : `${propZod}.optional()`;\n properties.push(` ${propName}: ${finalProp}`);\n\n this.currentPropertyPath = previousPropertyPath;\n }\n\n let zod = `z.object({\\n${properties.join(',\\n')}\\n})`;\n\n if (schema.additionalProperties === false) {\n zod = `${zod}.strict()`;\n }\n\n return zod;\n }\n\n private convertEnumSchema(schema: OpenAPISchema, schemaName: string | null = null): string {\n const values = schema.enum!;\n\n if (isBooleanLikeEnum(values)) {\n return 'z.boolean()';\n }\n\n const context: EnumContext = {\n source: 'schema',\n schemaName: this.currentSchemaName || schemaName || undefined,\n propertyPath: this.currentPropertyPath || undefined,\n };\n\n const enumInfo = this.enumRegistry.register(values, context);\n return enumInfo.schemaConstName;\n }\n\n private extractDependencies(schema: OpenAPISchema | undefined): Set<string> {\n const deps = new Set<string>();\n if (!schema) return deps;\n\n if (schema.$ref) {\n const refName = schema.$ref.split('/').pop()!;\n deps.add(refName);\n return deps;\n }\n\n if (schema.anyOf) {\n for (const s of schema.anyOf) {\n for (const dep of this.extractDependencies(s)) {\n deps.add(dep);\n }\n }\n }\n\n if (schema.oneOf) {\n for (const s of schema.oneOf) {\n for (const dep of this.extractDependencies(s)) {\n deps.add(dep);\n }\n }\n }\n\n if (schema.allOf) {\n for (const s of schema.allOf) {\n for (const dep of this.extractDependencies(s)) {\n deps.add(dep);\n }\n }\n }\n\n if (schema.items) {\n for (const dep of this.extractDependencies(schema.items)) {\n deps.add(dep);\n }\n }\n\n if (schema.properties) {\n for (const propSchema of Object.values(schema.properties)) {\n for (const dep of this.extractDependencies(propSchema)) {\n deps.add(dep);\n }\n }\n }\n\n if (schema.additionalProperties && typeof schema.additionalProperties === 'object') {\n for (const dep of this.extractDependencies(schema.additionalProperties as OpenAPISchema)) {\n deps.add(dep);\n }\n }\n\n return deps;\n }\n\n private topologicalSort(schemaNames: string[]): string[] {\n const visited = new Set<string>();\n const result: string[] = [];\n const visiting = new Set<string>();\n\n const visit = (name: string) => {\n if (visited.has(name)) return;\n if (visiting.has(name)) return;\n\n visiting.add(name);\n\n const schema = this.schemas[name];\n if (schema) {\n const deps = this.extractDependencies(schema);\n for (const dep of deps) {\n if (schemaNames.includes(dep)) {\n visit(dep);\n }\n }\n }\n\n visiting.delete(name);\n visited.add(name);\n result.push(name);\n };\n\n for (const name of schemaNames) {\n visit(name);\n }\n\n return result;\n }\n\n generateSchemas(runtimePackage: string): string {\n const schemaOutput: string[] = [];\n\n for (const name of Object.keys(this.schemas)) {\n this.schemaOrder.push(name);\n }\n\n this.schemaOrder = this.topologicalSort(this.schemaOrder);\n\n const usedNames = new Set<string>();\n\n for (const name of this.schemaOrder) {\n const schema = this.schemas[name];\n\n this.currentSchemaName = name;\n this.currentPropertyPath = null;\n\n const zodSchema = this.convertSchema(schema, name, true);\n\n this.currentSchemaName = null;\n\n let cleanName = name;\n if (cleanName.endsWith('SchemaInput')) {\n cleanName = cleanName.replace('SchemaInput', 'Input');\n } else if (cleanName.endsWith('Schema')) {\n cleanName = cleanName.replace('Schema', '');\n }\n\n const schemaConstName = camelCase(cleanName) + 'Schema';\n const typeName = pascalCase(cleanName);\n\n if (usedNames.has(schemaConstName) || usedNames.has(typeName)) {\n continue;\n }\n usedNames.add(schemaConstName);\n usedNames.add(typeName);\n\n schemaOutput.push(`export const ${schemaConstName} = ${zodSchema}.describe('${typeName}');`);\n const isInputType = /(?:Body|Input|Params)$/.test(cleanName);\n const inferType = isInputType ? 'z.input' : 'z.output';\n schemaOutput.push(`export type ${typeName} = ${inferType}<typeof ${schemaConstName}>;`);\n schemaOutput.push('');\n }\n\n this.enumRegistry.register(['desc', 'asc'], {\n source: 'schema',\n schemaName: 'PaginationParams',\n propertyPath: 'ordering',\n });\n const orderingEnumInfo = this.enumRegistry.get(['desc', 'asc'])!;\n\n schemaOutput.push('// Common pagination schemas');\n schemaOutput.push(`export const paginationParamsSchema = z.object({\n page: z.number().optional(),\n limit: z.number().optional(),\n orderBy: z.string().optional(),\n ordering: ${orderingEnumInfo.schemaConstName}.optional(),\n}).describe('PaginationParams');`);\n schemaOutput.push('export type PaginationParams = z.input<typeof paginationParamsSchema>;');\n schemaOutput.push('');\n\n schemaOutput.push(`export const paginationResponseSchema = z.object({\n page: z.number(),\n pages: z.number(),\n limit: z.number(),\n total: z.number(),\n}).describe('PaginationResponse');`);\n schemaOutput.push('export type PaginationResponse = z.output<typeof paginationResponseSchema>;');\n schemaOutput.push('');\n\n if (this.inlineSchemas.size > 0) {\n schemaOutput.push('// Inline request/response schemas');\n for (const [schemaName, schemaInfo] of this.inlineSchemas) {\n const { schema, isInput, typeName } = schemaInfo;\n const contextName = isInput ? 'InlineInput' : 'InlineOutput';\n const zodSchema = this.convertSchema(schema, contextName, true);\n schemaOutput.push(`export const ${schemaName} = ${zodSchema}.describe('${typeName}');`);\n const inferType = isInput ? 'z.input' : 'z.output';\n schemaOutput.push(`export type ${typeName} = ${inferType}<typeof ${schemaName}>;`);\n schemaOutput.push('');\n }\n }\n\n const output: string[] = [];\n output.push(\"import { z } from 'zod';\");\n\n const usedDateSchemasList = Object.entries(this.usedDateSchemas)\n .filter(([_, used]) => used)\n .map(([name]) => name);\n\n if (usedDateSchemasList.length > 0) {\n output.push(`import { ${usedDateSchemasList.join(', ')} } from '${runtimePackage}';`);\n }\n\n output.push('');\n\n const enumExports = this.enumRegistry.generateEnumExports();\n if (enumExports) {\n output.push(enumExports);\n }\n\n output.push(...schemaOutput);\n\n return output.join('\\n');\n }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport prettier from 'prettier';\n\nexport async function formatCode(code: string, filepath: string): Promise<string> {\n try {\n const options = await prettier.resolveConfig(filepath);\n return prettier.format(code, { ...options, parser: 'typescript' });\n } catch (error) {\n console.warn(`Warning: Could not format ${filepath}:`, (error as Error).message);\n return code;\n }\n}\n\nexport async function writeFile(filepath: string, content: string): Promise<void> {\n const dir = path.dirname(filepath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n const formatted = await formatCode(content, filepath);\n fs.writeFileSync(filepath, formatted);\n console.log(`Generated: ${filepath}`);\n}\n\nexport interface GeneratedFile {\n path: string;\n content: string;\n}\n\nexport async function writeFiles(files: GeneratedFile[]): Promise<void> {\n for (const file of files) {\n await writeFile(file.path, file.content);\n }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport type { OpenAPISpec } from './utils';\n\nexport async function loadSpec(specPath: string): Promise<OpenAPISpec> {\n // If it's a URL, fetch it\n if (specPath.startsWith('http://') || specPath.startsWith('https://')) {\n console.log(`Fetching OpenAPI spec from ${specPath}...`);\n const response = await fetch(specPath);\n if (!response.ok) {\n throw new Error(`Failed to fetch OpenAPI spec: ${response.statusText}`);\n }\n const spec = (await response.json()) as OpenAPISpec;\n console.log(`OpenAPI spec version: ${spec.openapi}`);\n console.log(`API title: ${spec.info.title}`);\n return spec;\n }\n\n // Otherwise, read from file\n const resolvedPath = path.resolve(specPath);\n console.log(`Reading OpenAPI spec from ${resolvedPath}...`);\n if (!fs.existsSync(resolvedPath)) {\n throw new Error(`OpenAPI spec file not found: ${resolvedPath}`);\n }\n\n const content = fs.readFileSync(resolvedPath, 'utf-8');\n\n let spec: OpenAPISpec;\n if (resolvedPath.endsWith('.yaml') || resolvedPath.endsWith('.yml')) {\n throw new Error('YAML specs are not supported yet. Please use JSON format.');\n } else {\n spec = JSON.parse(content) as OpenAPISpec;\n }\n\n console.log(`OpenAPI spec version: ${spec.openapi}`);\n console.log(`API title: ${spec.info.title}`);\n return spec;\n}\n","import path from 'path';\nimport { generateClient } from '../../generator/client-generator';\nimport type { OrcConfig } from '../../generator/config';\n\nexport async function runGenerate(\n config: OrcConfig,\n options: { client?: string; spec?: string },\n): Promise<void> {\n const runtimePackage = config.runtimePackage || '@moinax/orc';\n\n let clients = config.clients;\n\n if (options.client) {\n clients = clients.filter((c) => c.name.toLowerCase() === options.client!.toLowerCase());\n if (clients.length === 0) {\n console.error(`Error: Client \"${options.client}\" not found in configuration.`);\n console.log('Available clients:', config.clients.map((c) => c.name).join(', '));\n process.exit(1);\n }\n }\n\n if (options.spec && !options.client) {\n console.error('Error: --spec requires --client to be specified');\n process.exit(1);\n }\n\n console.log('ORC - OpenAPI Rest Client Generator');\n console.log('====================================');\n console.log(`Generating ${clients.length} client(s): ${clients.map((c) => c.name).join(', ')}`);\n if (options.spec) {\n console.log(`Using custom spec: ${options.spec}`);\n }\n\n const results = [];\n for (const clientConfig of clients) {\n try {\n const result = await generateClient(clientConfig, {\n specOverride: options.spec,\n runtimePackage,\n });\n results.push(result);\n } catch (error) {\n console.error(`\\nError generating ${clientConfig.name}Client:`, (error as Error).message);\n process.exit(1);\n }\n }\n\n console.log('\\n' + '='.repeat(60));\n console.log('All clients generated successfully!');\n console.log('='.repeat(60));\n\n for (const result of results) {\n console.log(`\\n${result.name}Client resources: ${result.resourceNames.join(', ')}`);\n }\n}\n","import fs from 'fs';\nimport path from 'path';\n\nconst CONFIG_TEMPLATE = `import { defineConfig } from '@moinax/orc/config';\n\nexport default defineConfig({\n clients: [\n {\n name: 'MyApi',\n spec: 'https://api.example.com/openapi.json',\n output: 'src/lib/api/my-api-client',\n },\n ],\n});\n`;\n\nexport async function runInit(): Promise<void> {\n const configPath = path.join(process.cwd(), 'orc.config.ts');\n\n if (fs.existsSync(configPath)) {\n console.error(`Config file already exists: ${configPath}`);\n process.exit(1);\n }\n\n fs.writeFileSync(configPath, CONFIG_TEMPLATE);\n console.log(`Created config file: ${configPath}`);\n console.log('\\nEdit the file to configure your API clients, then run:');\n console.log(' orc generate');\n}\n"],"mappings":"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","names":["path","fs","fs","path","pluralizeLib","cleanSchemaName","pluralizeLib","fs","path","spec","path","fs","fs","path","path","fs"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/generator/client-generator.ts","../src/generator/enum-registry.ts","../src/generator/utils.ts","../src/generator/resource-generator.ts","../src/generator/zod-generator.ts","../src/generator/file-writer.ts","../src/generator/spec-loader.ts","../src/cli/commands/generate.ts","../src/cli/commands/init.ts"],"sourcesContent":["import { Command } from 'commander';\nimport path from 'path';\nimport fs from 'fs';\nimport { createJiti } from 'jiti';\nimport type { OrcConfig } from './generator/config';\nimport { runGenerate } from './cli/commands/generate';\nimport { runInit } from './cli/commands/init';\n\nconst CONFIG_NAMES = ['orc.config.ts', 'orc.config.js', 'orc.config.mjs'];\n\nasync function loadConfig(): Promise<OrcConfig> {\n const cwd = process.cwd();\n\n for (const configName of CONFIG_NAMES) {\n const configPath = path.join(cwd, configName);\n if (fs.existsSync(configPath)) {\n console.log(`Using config: ${configPath}`);\n const jiti = createJiti(cwd, { interopDefault: true });\n const config = await jiti.import(configPath) as OrcConfig;\n return config;\n }\n }\n\n throw new Error(\n `No config file found. Create one with 'orc init' or add one of: ${CONFIG_NAMES.join(', ')}`,\n );\n}\n\nconst program = new Command();\n\nprogram\n .name('orc')\n .description('ORC - OpenAPI Rest Client Generator')\n .version('0.1.0');\n\nprogram\n .command('generate')\n .description('Generate TypeScript API clients from OpenAPI specs')\n .option('-c, --client <name>', 'Generate a specific client only')\n .option('-s, --spec <url>', 'Override spec URL (requires --client)')\n .action(async (options) => {\n const config = await loadConfig();\n await runGenerate(config, options);\n });\n\nprogram\n .command('init')\n .description('Scaffold a new orc.config.ts file')\n .action(async () => {\n await runInit();\n });\n\nprogram.parse();\n","import fs from 'fs';\nimport path from 'path';\nimport { EnumRegistry } from './enum-registry';\nimport { ResourceGenerator } from './resource-generator';\nimport { ZodGenerator } from './zod-generator';\nimport { writeFile, type GeneratedFile } from './file-writer';\nimport { loadSpec } from './spec-loader';\nimport {\n validateFileName,\n validateOutputPath,\n pascalCase,\n singularize,\n camelCase,\n} from './utils';\nimport type { ClientConfig } from './config';\n\nexport interface GenerateResult {\n name: string;\n resourceNames: string[];\n files?: GeneratedFile[];\n}\n\nexport async function generateClient(\n config: ClientConfig,\n options: {\n specOverride?: string;\n write?: boolean;\n runtimePackage?: string;\n } = {},\n): Promise<GenerateResult> {\n const { name, output } = config;\n const specUrl = options.specOverride || config.spec;\n const shouldWrite = options.write !== false;\n const runtimePackage = options.runtimePackage || '@moinax/orc';\n\n validateOutputPath(output);\n\n const outputDir = path.join(output, 'generated');\n const clientClassName = `${name}Client`;\n\n validateFileName(clientClassName, 'client class name');\n\n console.log(`\\n${'='.repeat(60)}`);\n console.log(`Generating ${clientClassName}...`);\n console.log(`${'='.repeat(60)}`);\n\n // Clean up previously generated files\n if (shouldWrite && fs.existsSync(outputDir)) {\n fs.rmSync(outputDir, { recursive: true });\n console.log(`\\nCleaned up ${outputDir}`);\n }\n\n // Fetch/load OpenAPI spec\n const spec = await loadSpec(specUrl);\n\n // Create shared enum registry\n const enumRegistry = new EnumRegistry();\n\n // Create resource generator\n const resourceGenerator = new ResourceGenerator(spec.paths, spec.components?.schemas, clientClassName, {\n stripPathPrefix: config.stripPathPrefix,\n enumRegistry,\n runtimePackage,\n });\n\n // Generate resources FIRST (registers query param enums)\n console.log('\\nGenerating resource classes...');\n const { resources, tree, inlineSchemas } = resourceGenerator.generateAll();\n\n // Generate schemas (including inline schemas from resources)\n console.log('\\nGenerating Zod schemas...');\n const zodGenerator = new ZodGenerator(spec.components?.schemas, enumRegistry);\n zodGenerator.addInlineSchemas(inlineSchemas);\n const schemasCode = zodGenerator.generateSchemas(runtimePackage);\n\n const generatedFiles: GeneratedFile[] = [];\n\n // schemas.ts\n generatedFiles.push({\n path: path.join(outputDir, 'schemas.ts'),\n content: schemasCode,\n });\n\n // Resource files\n const resourceNames: string[] = [];\n for (const [resourceName, code] of Object.entries(resources)) {\n validateFileName(resourceName, 'resource name');\n generatedFiles.push({\n path: path.join(outputDir, 'resources', `${resourceName}.resource.ts`),\n content: code,\n });\n resourceNames.push(resourceName);\n }\n\n // Resources index\n const resourceIndexCode = resourceNames\n .map((resourceName) => `export { ${resourceName}Resource } from './${resourceName}.resource';`)\n .join('\\n');\n generatedFiles.push({\n path: path.join(outputDir, 'resources', 'index.ts'),\n content: resourceIndexCode,\n });\n\n // Resource base class\n const resourceBaseCode = `import type ${clientClassName} from './${clientClassName}';\nimport { Resource as BaseResource } from '${runtimePackage}';\n\nexport class Resource extends BaseResource {\n protected declare client: ${clientClassName};\n\n constructor(client: ${clientClassName}) {\n super(client);\n }\n}\n`;\n generatedFiles.push({\n path: path.join(outputDir, 'Resource.ts'),\n content: resourceBaseCode,\n });\n\n // Get top-level resources\n const topLevelResources: Array<{ propertyName: string; className: string }> = [];\n for (const [childName] of tree.children) {\n const className = pascalCase(childName);\n topLevelResources.push({\n propertyName: singularize(camelCase(childName)),\n className,\n });\n }\n\n // Client class\n console.log(`\\nGenerating ${clientClassName}...`);\n const resourceImports = topLevelResources.map((r) => `${r.className}Resource`).join(',\\n ');\n const resourceProperties = topLevelResources\n .map((r) => `public ${r.propertyName}: ${r.className}Resource;`)\n .join('\\n ');\n const resourceInstantiations = topLevelResources\n .map((r) => `this.${r.propertyName} = new ${r.className}Resource(this);`)\n .join('\\n ');\n\n const clientCode = `import { Client, ClientOptions } from '${runtimePackage}';\n\nimport {\n ${resourceImports},\n} from './resources';\n\nexport default class ${clientClassName} extends Client {\n ${resourceProperties}\n\n constructor(baseUrl: string, options: ClientOptions = {}) {\n super(baseUrl, options);\n ${resourceInstantiations}\n }\n}\n`;\n generatedFiles.push({\n path: path.join(outputDir, `${clientClassName}.ts`),\n content: clientCode,\n });\n\n // Main index\n const mainIndexCode = `export { default as ${clientClassName} } from './${clientClassName}';\nexport * from './schemas';\nexport * from './resources';\n`;\n generatedFiles.push({\n path: path.join(outputDir, 'index.ts'),\n content: mainIndexCode,\n });\n\n // Write files if not in dry-run mode\n if (shouldWrite) {\n for (const file of generatedFiles) {\n await writeFile(file.path, file.content);\n }\n }\n\n console.log(`\\n${clientClassName} generation complete!`);\n\n return {\n name,\n resourceNames: topLevelResources.map((r) => r.className),\n files: shouldWrite ? undefined : generatedFiles,\n };\n}\n","import pluralizeLib from 'pluralize';\nimport { camelCase, pascalCase, singularize } from './utils';\n\nexport interface EnumContext {\n source: 'schema' | 'queryParam';\n schemaName?: string;\n propertyPath?: string;\n paramName?: string;\n resourceName?: string;\n}\n\nexport interface EnumInfo {\n valuesConstName: string;\n schemaConstName: string;\n typeName: string;\n values: string[];\n}\n\nexport class EnumRegistry {\n private enums = new Map<string, EnumInfo>();\n private enumContexts = new Map<string, EnumContext[]>();\n private usedNames = new Set<string>();\n\n static fingerprint(values: string[]): string {\n return JSON.stringify([...values].sort());\n }\n\n generateEnumNames(values: string[], context: EnumContext): EnumInfo {\n const { source, schemaName, propertyPath, paramName, resourceName } = context;\n\n let baseName: string;\n if (source === 'schema' && schemaName && propertyPath) {\n const cleanSchemaName = schemaName\n .replace(/Schema$/, '')\n .replace(/SchemaInput$/, '')\n .replace(/Input$/, '');\n\n const pathParts = propertyPath.split('.');\n const contextFromPath = pathParts.map((p) => pascalCase(singularize(p))).join('');\n baseName = camelCase(cleanSchemaName) + contextFromPath;\n } else if (source === 'queryParam' && resourceName && paramName) {\n const singularResource = singularize(resourceName);\n baseName = camelCase(singularResource) + pascalCase(paramName);\n } else {\n baseName = camelCase(values[0].toLowerCase());\n }\n\n const valuesConstName = pluralizeLib.isPlural(baseName) ? baseName : pluralizeLib.plural(baseName);\n\n return {\n valuesConstName,\n schemaConstName: `${singularize(baseName)}Schema`,\n typeName: pascalCase(singularize(baseName)),\n values,\n };\n }\n\n register(values: string[], context: EnumContext): EnumInfo {\n const fingerprint = EnumRegistry.fingerprint(values);\n\n if (!this.enumContexts.has(fingerprint)) {\n this.enumContexts.set(fingerprint, []);\n }\n this.enumContexts.get(fingerprint)!.push(context);\n\n if (this.enums.has(fingerprint)) {\n return this.enums.get(fingerprint)!;\n }\n\n let enumInfo = this.generateEnumNames(values, context);\n\n let counter = 1;\n const hasCollision = () =>\n this.usedNames.has(enumInfo.valuesConstName) ||\n this.usedNames.has(enumInfo.schemaConstName) ||\n this.usedNames.has(enumInfo.typeName);\n\n while (hasCollision()) {\n const baseInfo = this.generateEnumNames(values, context);\n enumInfo = {\n valuesConstName: `${baseInfo.valuesConstName}${counter}`,\n schemaConstName: `${baseInfo.schemaConstName.replace(/Schema$/, '')}${counter}Schema`,\n typeName: `${baseInfo.typeName}${counter}`,\n values: baseInfo.values,\n };\n counter++;\n }\n\n this.usedNames.add(enumInfo.valuesConstName);\n this.usedNames.add(enumInfo.schemaConstName);\n this.usedNames.add(enumInfo.typeName);\n\n this.enums.set(fingerprint, enumInfo);\n return enumInfo;\n }\n\n has(values: string[]): boolean {\n return this.enums.has(EnumRegistry.fingerprint(values));\n }\n\n get(values: string[]): EnumInfo | undefined {\n return this.enums.get(EnumRegistry.fingerprint(values));\n }\n\n getAll(): EnumInfo[] {\n return Array.from(this.enums.values());\n }\n\n generateEnumExports(): string {\n const lines: string[] = [];\n\n if (this.enums.size === 0) {\n return '';\n }\n\n lines.push('// ============================================================================');\n lines.push('// Extracted Enums');\n lines.push('// ============================================================================');\n lines.push('');\n\n for (const enumInfo of this.enums.values()) {\n const { valuesConstName, schemaConstName, typeName, values } = enumInfo;\n const valuesStr = values.map((v) => `'${v}'`).join(', ');\n\n lines.push(`export const ${valuesConstName} = [${valuesStr}] as const;`);\n lines.push(`export const ${schemaConstName} = z.enum(${valuesConstName});`);\n lines.push(`export type ${typeName} = z.output<typeof ${schemaConstName}>;`);\n lines.push('');\n }\n\n return lines.join('\\n');\n }\n}\n","import pluralizeLib from 'pluralize';\n\nexport function capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function camelCase(str: string): string {\n const result = str\n .replace(/[-_.]+/g, '_')\n .replace(/_([a-zA-Z])/g, (_, char) => char.toUpperCase())\n .replace(/_+/g, '');\n\n return result.charAt(0).toLowerCase() + result.slice(1);\n}\n\nexport function pascalCase(str: string): string {\n return capitalize(camelCase(str));\n}\n\nexport function schemaConstToTypeName(schemaConstName: string): string {\n const withoutSuffix = schemaConstName.replace(/Schema$/, '');\n return pascalCase(withoutSuffix);\n}\n\nexport function singularize(str: string): string {\n const match = str.match(/^(.*)([A-Z][a-z]+s)$/);\n if (match) {\n const prefix = match[1];\n const lastWord = match[2];\n return prefix + pluralizeLib.singular(lastWord);\n }\n return pluralizeLib.singular(str);\n}\n\nexport function isBooleanLikeEnum(values: unknown[]): boolean {\n if (!Array.isArray(values) || values.length !== 2) return false;\n const sorted = [...values].sort();\n return sorted[0] === 'false' && sorted[1] === 'true';\n}\n\nexport function getResourcePrefixedParamNames(\n methodName: string,\n resourceClassName: string,\n): { schemaConstName: string; typeName: string } {\n const singularResource = singularize(resourceClassName);\n\n if (methodName.startsWith('get')) {\n const rest = methodName.slice(3);\n return {\n schemaConstName: `get${singularResource}${rest}ParamsSchema`,\n typeName: `Get${singularResource}${rest}Params`,\n };\n }\n\n return {\n schemaConstName: `${camelCase(methodName)}${singularResource}ParamsSchema`,\n typeName: `${pascalCase(methodName)}${singularResource}Params`,\n };\n}\n\nexport function validateFileName(name: string, context: string): void {\n if (!name || typeof name !== 'string') {\n throw new Error(`Invalid ${context}: must be a non-empty string`);\n }\n if (name.includes('..') || name.includes('/') || name.includes('\\\\')) {\n throw new Error(`Invalid ${context}: contains path traversal characters`);\n }\n if (!/^[a-zA-Z][a-zA-Z0-9]*$/.test(name)) {\n throw new Error(`Invalid ${context}: must be alphanumeric starting with a letter`);\n }\n}\n\nexport function validateOutputPath(outputPath: string): void {\n if (!outputPath || typeof outputPath !== 'string') {\n throw new Error('Invalid output path: must be a non-empty string');\n }\n if (outputPath.includes('..')) {\n throw new Error('Invalid output path: contains path traversal characters');\n }\n}\n\nexport interface OpenAPISchema {\n type?: string;\n format?: string;\n enum?: string[];\n const?: unknown;\n nullable?: boolean;\n $ref?: string;\n anyOf?: OpenAPISchema[];\n oneOf?: OpenAPISchema[];\n allOf?: OpenAPISchema[];\n items?: OpenAPISchema;\n properties?: Record<string, OpenAPISchema>;\n additionalProperties?: boolean | OpenAPISchema;\n required?: string[];\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n minimum?: number;\n maximum?: number;\n minItems?: number;\n maxItems?: number;\n description?: string;\n}\n\nexport interface OpenAPIParameter {\n name: string;\n in: string;\n required?: boolean;\n schema?: OpenAPISchema;\n}\n\nexport interface OpenAPIOperation {\n operationId?: string;\n summary?: string;\n tags?: string[];\n parameters?: OpenAPIParameter[];\n requestBody?: {\n content?: {\n 'application/json'?: {\n schema?: OpenAPISchema;\n };\n };\n };\n responses?: Record<\n string,\n {\n content?: {\n 'application/json'?: {\n schema?: OpenAPISchema;\n };\n };\n }\n >;\n}\n\nexport interface OpenAPISpec {\n openapi: string;\n info: { title: string; version?: string };\n paths: Record<string, Record<string, OpenAPIOperation | OpenAPIParameter[]>>;\n components?: {\n schemas?: Record<string, OpenAPISchema>;\n };\n}\n\nexport interface PathSegment {\n name: string;\n isParam: boolean;\n raw: string;\n}\n\nexport function isListResponse(responseSchema: OpenAPISchema | undefined): boolean {\n if (!responseSchema) return false;\n\n if (responseSchema.type === 'object' && responseSchema.properties?.pagination) {\n return true;\n }\n if (responseSchema.type === 'array') {\n return true;\n }\n if (responseSchema.type === 'object' && responseSchema.properties) {\n for (const arrayProp of ['data', 'items', 'results']) {\n const prop = responseSchema.properties[arrayProp];\n if (prop?.type === 'array') return true;\n }\n }\n if (responseSchema.$ref) {\n const refName = responseSchema.$ref.split('/').pop()!;\n if (refName.includes('Paginated') || refName.includes('List')) {\n return true;\n }\n }\n return false;\n}\n\nexport function deriveEntityFromPath(pathPattern: string, includeParentContext = false): string | null {\n const segments = pathPattern.split('/').filter((seg) => seg && !seg.startsWith('{'));\n if (segments.length === 0) return null;\n\n if (includeParentContext && segments.length >= 2) {\n const parentSegment = segments[segments.length - 2];\n const lastSegment = segments[segments.length - 1];\n const singularParent = parentSegment.endsWith('s') ? parentSegment.slice(0, -1) : parentSegment;\n return pascalCase(singularParent) + pascalCase(lastSegment);\n }\n\n const lastSegment = segments[segments.length - 1];\n return pascalCase(lastSegment);\n}\n\nexport function isActionWord(word: string): boolean {\n const knownActions = ['status', 'approve', 'cancel', 'current', 'download_link', 'preferences'];\n if (knownActions.includes(word.toLowerCase())) return true;\n if (word.endsWith('s') && !word.endsWith('ss') && !word.endsWith('us')) {\n return false;\n }\n return true;\n}\n\nexport function operationIdToMethodName(\n operationId: string | undefined,\n httpMethod: string,\n pathPattern: string,\n resourceName: string,\n responseSchema: OpenAPISchema | undefined,\n): string {\n const isList = isListResponse(responseSchema);\n\n switch (httpMethod) {\n case 'get':\n return isList ? 'getList' : 'getDetail';\n case 'post':\n return 'create';\n case 'put':\n return 'replace';\n case 'patch':\n return 'update';\n case 'delete':\n return 'delete';\n default:\n return operationId ? camelCase(operationId) : httpMethod;\n }\n}\n\nexport function parsePathSegments(pathPattern: string): PathSegment[] {\n return pathPattern\n .split('/')\n .filter((seg) => seg)\n .map((seg) => ({\n name: seg.startsWith('{') ? seg.slice(1, -1) : seg,\n isParam: seg.startsWith('{'),\n raw: seg,\n }));\n}\n\nexport function getResourcePath(pathPattern: string): string[] {\n const segments = parsePathSegments(pathPattern);\n const resourcePath: string[] = [];\n for (const seg of segments) {\n if (!seg.isParam) {\n resourcePath.push(seg.name);\n }\n }\n return resourcePath;\n}\n\nexport interface PathTreeNode {\n name: string;\n children: Map<string, PathTreeNode>;\n operations: Array<{\n pathPattern: string;\n httpMethod: string;\n operation: OpenAPIOperation;\n }>;\n}\n\nexport function buildPathTree(paths: Record<string, Record<string, OpenAPIOperation | OpenAPIParameter[]>>): PathTreeNode {\n const tree: PathTreeNode = {\n name: 'root',\n children: new Map(),\n operations: [],\n };\n\n for (const [pathPattern, methods] of Object.entries(paths)) {\n for (const [httpMethod, operation] of Object.entries(methods)) {\n if (httpMethod === 'parameters') continue;\n\n const resourcePath = getResourcePath(pathPattern);\n\n let current = tree;\n for (const segment of resourcePath) {\n if (!current.children.has(segment)) {\n current.children.set(segment, {\n name: segment,\n children: new Map(),\n operations: [],\n });\n }\n current = current.children.get(segment)!;\n }\n\n current.operations.push({\n pathPattern,\n httpMethod,\n operation: operation as OpenAPIOperation,\n });\n }\n }\n\n return tree;\n}\n\nexport function cleanSchemaName(name: string): string {\n if (name.endsWith('SchemaInput')) {\n name = name.replace('SchemaInput', 'Input');\n } else if (name.endsWith('Schema')) {\n name = name.replace('Schema', '');\n }\n\n if (name.includes('__')) {\n const parts = name.split('__');\n name = parts[parts.length - 1];\n }\n\n name = name.replace(/_+$/, '');\n name = name.replace(/_([A-Za-z])/g, (_, char) => char.toUpperCase());\n\n return name;\n}\n","import { EnumRegistry } from './enum-registry';\nimport { ZodGenerator } from './zod-generator';\nimport {\n camelCase,\n pascalCase,\n singularize,\n capitalize,\n schemaConstToTypeName,\n isBooleanLikeEnum,\n getResourcePrefixedParamNames,\n operationIdToMethodName,\n getResourcePath,\n buildPathTree,\n cleanSchemaName,\n OpenAPISchema,\n OpenAPIOperation,\n OpenAPIParameter,\n PathTreeNode,\n} from './utils';\n\ninterface ResourceResult {\n className: string;\n code: string;\n children: Array<{ propertyName: string; className: string; fileName: string }>;\n}\n\nexport class ResourceGenerator {\n private schemas: Record<string, OpenAPISchema>;\n private clientClassName: string;\n private stripPathPrefix: string | null;\n public enumRegistry: EnumRegistry;\n private paths: Record<string, Record<string, OpenAPIOperation | OpenAPIParameter[]>>;\n private pathTree: PathTreeNode;\n private generatedResources = new Map<string, ResourceResult>();\n public collectedInlineSchemas = new Map<\n string,\n { schema: OpenAPISchema; isInput: boolean; typeName: string }\n >();\n private currentResourceName: string | null = null;\n private runtimePackage: string;\n\n constructor(\n paths: Record<string, Record<string, OpenAPIOperation | OpenAPIParameter[]>> | undefined,\n schemas: Record<string, OpenAPISchema> | undefined,\n clientClassName: string,\n options: {\n stripPathPrefix?: string;\n enumRegistry?: EnumRegistry;\n runtimePackage?: string;\n } = {},\n ) {\n this.schemas = schemas || {};\n this.clientClassName = clientClassName;\n this.stripPathPrefix = options.stripPathPrefix || null;\n this.enumRegistry = options.enumRegistry || new EnumRegistry();\n this.runtimePackage = options.runtimePackage || '@moinax/orc';\n\n this.paths = this.stripPathPrefix ? this.stripPrefixFromPaths(paths || {}) : paths || {};\n this.pathTree = buildPathTree(this.paths);\n }\n\n collectAllInlineSchemas(): Map<string, { schema: OpenAPISchema; isInput: boolean; typeName: string }> {\n this._collectInlineSchemasFromNode(this.pathTree, []);\n return this.collectedInlineSchemas;\n }\n\n private _collectInlineSchemasFromNode(node: PathTreeNode, parentPath: string[]): void {\n const nodeName = node.name === 'root' ? '' : node.name;\n const currentPath = [...parentPath, nodeName].filter(Boolean);\n\n const operationMethodNames = new Map<string, string>();\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n const responseSchemaObj = (\n operation.responses?.['200'] || operation.responses?.['201']\n )?.content?.['application/json']?.schema;\n const methodName = operationIdToMethodName(\n operation.operationId,\n httpMethod,\n pathPattern,\n node.name,\n responseSchemaObj,\n );\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n operationMethodNames.set(opKey, methodName);\n }\n\n const resourceClassName = this.getResourceClassName(currentPath);\n\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n if (this.hasInlineRequestBody(operation)) {\n const requestSchema = this.getRequestSchemaName(operation, pathPattern);\n if (!requestSchema) {\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n const methodName = operationMethodNames.get(opKey)!;\n const schemaConstName = this.generateInlineSchemaName(resourceClassName, methodName, 'body');\n\n const bodySchema = operation.requestBody!.content!['application/json']!.schema!;\n this.collectedInlineSchemas.set(schemaConstName, {\n schema: bodySchema,\n isInput: true,\n typeName: `${pascalCase(resourceClassName)}${pascalCase(methodName)}Body`,\n });\n }\n }\n }\n\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n if (this.hasInlineResponseSchema(operation)) {\n const responseSchema = this.getResponseSchemaName(operation, pathPattern);\n if (!responseSchema) {\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n const methodName = operationMethodNames.get(opKey)!;\n const schemaConstName = this.generateInlineSchemaName(resourceClassName, methodName, 'response');\n\n const successResponse = operation.responses?.['200'] || operation.responses?.['201'];\n const inlineSchema = successResponse!.content!['application/json']!.schema!;\n this.collectedInlineSchemas.set(schemaConstName, {\n schema: inlineSchema,\n isInput: false,\n typeName: `${pascalCase(resourceClassName)}${pascalCase(methodName)}Response`,\n });\n }\n }\n }\n\n for (const [, childNode] of node.children) {\n this._collectInlineSchemasFromNode(childNode, currentPath);\n }\n }\n\n private stripPrefixFromPaths(\n paths: Record<string, Record<string, OpenAPIOperation | OpenAPIParameter[]>>,\n ): Record<string, Record<string, OpenAPIOperation | OpenAPIParameter[]>> {\n const result: Record<string, Record<string, OpenAPIOperation | OpenAPIParameter[]>> = {};\n for (const [pathPattern, methods] of Object.entries(paths)) {\n let newPath = pathPattern;\n if (this.stripPathPrefix && pathPattern.startsWith(this.stripPathPrefix)) {\n newPath = pathPattern.slice(this.stripPathPrefix.length) || '/';\n }\n result[newPath] = methods;\n }\n return result;\n }\n\n private getResponseSchemaName(operation: OpenAPIOperation, pathPattern: string | null = null): string | null {\n const successResponse = operation.responses?.['200'] || operation.responses?.['201'];\n if (!successResponse) return null;\n\n const content = successResponse.content?.['application/json'];\n if (!content?.schema) return null;\n\n const schema = content.schema;\n if (schema.$ref) {\n const rawName = schema.$ref.split('/').pop()!;\n return cleanSchemaName(rawName);\n }\n\n if (schema.type === 'object') {\n if (operation.operationId) {\n const opId = operation.operationId;\n const patterns = [\n /^create[_-]?(.+)$/i,\n /^update[_-]?(.+)$/i,\n /^get[_-]?(.+)$/i,\n /^(.+)[_-]?create$/i,\n /^(.+)[_-]?update$/i,\n /^(.+)[_-]?get$/i,\n ];\n\n for (const pattern of patterns) {\n const match = opId.match(pattern);\n if (match) {\n const entityName = pascalCase(match[1].replace(/[_-]/g, ' '));\n const schemaSchemaName = `${entityName}Schema`;\n if (this.schemas[entityName] || this.schemas[schemaSchemaName]) {\n return entityName;\n }\n }\n }\n }\n\n if (pathPattern) {\n const resourcePath = getResourcePath(pathPattern);\n if (resourcePath.length > 0) {\n const lastSegment = resourcePath[resourcePath.length - 1];\n const entityName = pascalCase(singularize(lastSegment));\n const schemaSchemaName = `${entityName}Schema`;\n if (this.schemas[entityName] || this.schemas[schemaSchemaName]) {\n return entityName;\n }\n }\n }\n }\n\n if (schema.type === 'object' && schema.properties) {\n return null;\n }\n\n return null;\n }\n\n private getRequestSchemaName(operation: OpenAPIOperation, pathPattern: string | null = null): string | null {\n const content = operation.requestBody?.content?.['application/json'];\n if (!content?.schema) return null;\n\n const schema = content.schema;\n if (schema.$ref) {\n const rawName = schema.$ref.split('/').pop()!;\n return cleanSchemaName(rawName);\n }\n\n return null;\n }\n\n private hasInlineRequestBody(operation: OpenAPIOperation): boolean {\n const content = operation.requestBody?.content?.['application/json'];\n if (!content?.schema) return false;\n return !content.schema.$ref && content.schema.type === 'object';\n }\n\n private hasInlineResponseSchema(operation: OpenAPIOperation): boolean {\n const successResponse = operation.responses?.['200'] || operation.responses?.['201'];\n if (!successResponse) return false;\n\n const content = successResponse.content?.['application/json'];\n if (!content?.schema) return false;\n\n const schema = content.schema;\n if (schema.$ref) return false;\n if (schema.type === 'object' && schema.properties?.pagination) return false;\n return schema.type === 'object' && !!schema.properties;\n }\n\n private generateInlineSchemaName(resourceName: string, methodName: string, purpose: string): string {\n const baseName = `${camelCase(resourceName)}${capitalize(methodName)}${capitalize(purpose)}Schema`;\n return camelCase(baseName);\n }\n\n private getPathParams(operation: OpenAPIOperation): Array<{ name: string; type: string; required: boolean }> {\n return (operation.parameters || [])\n .filter((p): p is OpenAPIParameter => 'in' in p && p.in === 'path')\n .map((p) => ({\n name: p.name,\n type: this.paramTypeToTs(p.schema),\n required: p.required !== false,\n }));\n }\n\n private getQueryParams(\n operation: OpenAPIOperation,\n ): Array<{ name: string; type: string; required: boolean; schema?: OpenAPISchema }> {\n return (operation.parameters || [])\n .filter((p): p is OpenAPIParameter => 'in' in p && p.in === 'query')\n .map((p) => ({\n name: p.name,\n type: this.paramTypeToTs(p.schema),\n required: p.required === true,\n schema: p.schema,\n }));\n }\n\n private paramTypeToTs(schema?: OpenAPISchema): string {\n if (!schema) return 'string';\n if (schema.enum) return schema.enum.map((v) => `'${v}'`).join(' | ');\n switch (schema.type) {\n case 'integer':\n case 'number':\n return 'number';\n case 'boolean':\n return 'boolean';\n default:\n return 'string';\n }\n }\n\n private paramToZod(\n param: { name: string; required: boolean; schema?: OpenAPISchema },\n resourceName?: string,\n ): string {\n const { schema, name: paramName } = param;\n if (!schema) return 'z.string()';\n\n let zodType: string;\n if (schema.enum) {\n if (isBooleanLikeEnum(schema.enum)) {\n zodType = 'z.boolean()';\n } else {\n const context = {\n source: 'queryParam' as const,\n resourceName: resourceName || this.currentResourceName || undefined,\n paramName: paramName,\n };\n const enumInfo = this.enumRegistry.register(schema.enum, context);\n zodType = enumInfo.schemaConstName;\n }\n } else {\n switch (schema.type) {\n case 'integer':\n zodType = 'z.number().int()';\n break;\n case 'number':\n zodType = 'z.number()';\n break;\n case 'boolean':\n zodType = 'z.boolean()';\n break;\n default:\n zodType = 'z.string()';\n }\n }\n\n if (!param.required) {\n zodType = `${zodType}.optional()`;\n }\n\n return zodType;\n }\n\n private isPaginationParam(paramName: string): boolean {\n return ['page', 'limit', 'orderBy', 'ordering'].includes(paramName);\n }\n\n private getUniqueMethodName(\n operationId: string | undefined,\n httpMethod: string,\n pathPattern: string,\n usedNames: Set<string>,\n responseSchema?: OpenAPISchema,\n ): string {\n let methodName = operationIdToMethodName(operationId, httpMethod, pathPattern, '', responseSchema);\n\n if (usedNames.has(methodName) && operationId) {\n methodName = camelCase(operationId);\n }\n\n let finalName = methodName;\n let counter = 1;\n while (usedNames.has(finalName)) {\n finalName = `${methodName}${counter}`;\n counter++;\n }\n\n usedNames.add(finalName);\n return finalName;\n }\n\n private getOperationKey(pathPattern: string, httpMethod: string): string {\n return `${httpMethod}:${pathPattern}`;\n }\n\n private getResourceClassName(pathSegments: string[]): string {\n return pathSegments.map((seg) => pascalCase(seg)).join('');\n }\n\n private generateResourceNode(node: PathTreeNode, pathSegments: string[]): ResourceResult {\n const parentImportPath = '../';\n const resourceClassName = this.getResourceClassName(pathSegments);\n\n this.currentResourceName = resourceClassName;\n\n const lines: string[] = [];\n const usedMethodNames = new Set<string>();\n const schemaImports = new Set<string>();\n let hasQueryParams = false;\n let hasPaginatedResponse = false;\n\n const childResources: Array<{ propertyName: string; className: string; fileName: string }> = [];\n for (const [childName, childNode] of node.children) {\n const childPath = [...pathSegments, childName];\n const childClassName = this.getResourceClassName(childPath);\n childResources.push({\n propertyName: singularize(camelCase(childName)),\n className: childClassName,\n fileName: `${childClassName}.resource`,\n });\n }\n\n const operationMethodNames = new Map<string, string>();\n let usesInlineZod = false;\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n const successResponse = operation.responses?.['200'] || operation.responses?.['201'];\n const responseContent = successResponse?.content?.['application/json'];\n const responseSchemaObj = responseContent?.schema;\n\n const methodName = this.getUniqueMethodName(\n operation.operationId,\n httpMethod,\n pathPattern,\n usedMethodNames,\n responseSchemaObj,\n );\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n operationMethodNames.set(opKey, methodName);\n\n const queryParams = this.getQueryParams(operation);\n if (queryParams.length > 0) {\n hasQueryParams = true;\n }\n\n if (responseSchemaObj?.type === 'object' && responseSchemaObj?.properties?.pagination) {\n hasPaginatedResponse = true;\n }\n\n if (\n responseSchemaObj?.type === 'object' &&\n responseSchemaObj?.properties?.pagination &&\n !responseSchemaObj?.properties?.data?.items?.$ref\n ) {\n usesInlineZod = true;\n }\n }\n\n const typeImports = new Map<string, string>();\n\n if (hasQueryParams) {\n schemaImports.add('paginationParamsSchema');\n }\n if (hasPaginatedResponse) {\n schemaImports.add('paginationResponseSchema');\n typeImports.set('paginationResponseSchema', 'PaginationResponse');\n }\n\n for (const { pathPattern, operation } of node.operations) {\n const responseSchema = this.getResponseSchemaName(operation, pathPattern);\n if (responseSchema) {\n const schemaConst = `${camelCase(responseSchema)}Schema`;\n schemaImports.add(schemaConst);\n typeImports.set(schemaConst, pascalCase(responseSchema));\n }\n const requestSchema = this.getRequestSchemaName(operation, pathPattern);\n if (requestSchema) {\n const schemaConst = `${camelCase(requestSchema)}Schema`;\n schemaImports.add(schemaConst);\n typeImports.set(schemaConst, pascalCase(requestSchema));\n }\n }\n\n const inlineBodySchemas = new Map<string, { schemaConst: string; typeName: string }>();\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n if (this.hasInlineRequestBody(operation)) {\n const requestSchema = this.getRequestSchemaName(operation, pathPattern);\n if (!requestSchema) {\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n const methodName = operationMethodNames.get(opKey)!;\n const schemaConstName = this.generateInlineSchemaName(resourceClassName, methodName, 'body');\n const typeName = schemaConstToTypeName(schemaConstName);\n inlineBodySchemas.set(opKey, { schemaConst: schemaConstName, typeName });\n schemaImports.add(schemaConstName);\n typeImports.set(schemaConstName, typeName);\n }\n }\n }\n\n const inlineResponseSchemas = new Map<string, { schemaConst: string; typeName: string }>();\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n if (this.hasInlineResponseSchema(operation)) {\n const responseSchema = this.getResponseSchemaName(operation, pathPattern);\n if (!responseSchema) {\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n const methodName = operationMethodNames.get(opKey)!;\n const schemaConstName = this.generateInlineSchemaName(resourceClassName, methodName, 'response');\n const typeName = schemaConstToTypeName(schemaConstName);\n inlineResponseSchemas.set(opKey, { schemaConst: schemaConstName, typeName });\n schemaImports.add(schemaConstName);\n typeImports.set(schemaConstName, typeName);\n }\n }\n }\n\n const needsZod = hasQueryParams || usesInlineZod;\n if (needsZod) {\n lines.push(\"import { z } from 'zod';\");\n lines.push('');\n }\n\n const hasParsing = node.operations.some(({ httpMethod, operation }) => {\n const successResponse = operation.responses?.['200'] || operation.responses?.['201'];\n const hasResponseParsing = !!successResponse?.content?.['application/json']?.schema;\n const hasBodyParsing = ['post', 'put', 'patch'].includes(httpMethod) && !!operation.requestBody;\n const hasParamsParsing = this.getQueryParams(operation).length > 0;\n return hasResponseParsing || hasBodyParsing || hasParamsParsing;\n });\n if (hasParsing) {\n lines.push(`import { parseSchema } from '${this.runtimePackage}';`);\n }\n\n lines.push(`import { Resource } from '${parentImportPath}Resource';`);\n\n const schemaImportPlaceholderIndex = lines.length;\n lines.push('__SCHEMA_IMPORTS_PLACEHOLDER__');\n\n for (const child of childResources) {\n lines.push(`import { ${child.className}Resource } from './${child.fileName}';`);\n }\n lines.push('');\n\n const queryParamsSchemas: string[] = [];\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n const queryParams = this.getQueryParams(operation);\n if (queryParams.length > 0) {\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n const methodName = operationMethodNames.get(opKey)!;\n const { schemaConstName, typeName } = getResourcePrefixedParamNames(methodName, resourceClassName);\n\n const specificParams = queryParams.filter((p) => !this.isPaginationParam(p.name));\n\n if (specificParams.length > 0) {\n const props = specificParams.map((p) => {\n const zodCode = this.paramToZod(p, resourceClassName);\n if (p.schema?.enum) {\n const enumInfo = this.enumRegistry.get(p.schema.enum);\n if (enumInfo) {\n schemaImports.add(enumInfo.schemaConstName);\n }\n }\n return ` ${p.name}: ${zodCode}`;\n });\n queryParamsSchemas.push(\n `export const ${schemaConstName} = paginationParamsSchema.extend({\\n${props.join(',\\n')},\\n});`,\n );\n } else {\n queryParamsSchemas.push(`export const ${schemaConstName} = paginationParamsSchema;`);\n }\n queryParamsSchemas.push(`export type ${typeName} = z.input<typeof ${schemaConstName}>;`);\n queryParamsSchemas.push('');\n }\n }\n\n if (queryParamsSchemas.length > 0) {\n lines.push('// Query parameter schemas');\n lines.push(queryParamsSchemas.join('\\n'));\n }\n\n lines.push(`export class ${resourceClassName}Resource extends Resource {`);\n\n for (const child of childResources) {\n lines.push(` public ${child.propertyName}: ${child.className}Resource;`);\n }\n\n if (childResources.length > 0) {\n lines.push('');\n lines.push(\n ` constructor(client: InstanceType<typeof import('${parentImportPath}${this.clientClassName}').default>) {`,\n );\n lines.push(' super(client);');\n for (const child of childResources) {\n lines.push(` this.${child.propertyName} = new ${child.className}Resource(client);`);\n }\n lines.push(' }');\n }\n\n for (const { pathPattern, httpMethod, operation } of node.operations) {\n const opKey = this.getOperationKey(pathPattern, httpMethod);\n const methodName = operationMethodNames.get(opKey)!;\n const pathParams = this.getPathParams(operation);\n const queryParams = this.getQueryParams(operation);\n const responseSchema = this.getResponseSchemaName(operation, pathPattern);\n const requestSchema = this.getRequestSchemaName(operation, pathPattern);\n\n const params: string[] = [];\n for (const p of pathParams) {\n params.push(`${p.name}: ${p.type}`);\n }\n\n if (queryParams.length > 0) {\n const { typeName } = getResourcePrefixedParamNames(methodName, resourceClassName);\n const hasRequired = queryParams.some((p) => p.required);\n params.push(`params${hasRequired ? '' : '?'}: ${typeName}`);\n }\n\n const inlineBodySchema = inlineBodySchemas.get(opKey);\n\n if (['post', 'put', 'patch'].includes(httpMethod) && operation.requestBody) {\n if (requestSchema) {\n const schemaConst = `${camelCase(requestSchema)}Schema`;\n const typeName = typeImports.get(schemaConst)!;\n params.push(`body: ${typeName}`);\n } else if (inlineBodySchema) {\n params.push(`body: ${inlineBodySchema.typeName}`);\n } else {\n params.push('body: Record<string, unknown>');\n }\n }\n\n const fullPath = this.stripPathPrefix ? this.stripPathPrefix + pathPattern : pathPattern;\n let pathTemplate = fullPath.replace(/\\{(\\w+)\\}/g, '${$1}');\n pathTemplate = '`' + pathTemplate + '`';\n\n const successResponse = operation.responses?.['200'] || operation.responses?.['201'];\n const responseContent = successResponse?.content?.['application/json'];\n const responseSchemaObj = responseContent?.schema;\n\n let returnType = 'void';\n let parseLogic = '';\n\n if (responseSchemaObj) {\n if (responseSchemaObj.type === 'object' && responseSchemaObj.properties?.pagination) {\n const dataRef = responseSchemaObj.properties.data?.items?.$ref;\n if (dataRef) {\n const rawItemSchema = dataRef.split('/').pop()!;\n const itemSchema = cleanSchemaName(rawItemSchema);\n const itemSchemaConst = `${camelCase(itemSchema)}Schema`;\n const itemTypeName = pascalCase(itemSchema);\n schemaImports.add(itemSchemaConst);\n typeImports.set(itemSchemaConst, itemTypeName);\n returnType = `{ pagination: PaginationResponse; data: ${itemTypeName}[] }`;\n parseLogic = `const schema = z.object({ pagination: paginationResponseSchema, data: z.array(${itemSchemaConst}) }).describe('Paginated${itemTypeName}List');\n return parseSchema(schema, response);`;\n } else {\n if (responseSchema) {\n const itemSchemaConst = `${camelCase(responseSchema)}Schema`;\n const itemTypeName = pascalCase(responseSchema);\n schemaImports.add(itemSchemaConst);\n typeImports.set(itemSchemaConst, itemTypeName);\n returnType = `{ pagination: PaginationResponse; data: ${itemTypeName}[] }`;\n parseLogic = `const schema = z.object({ pagination: paginationResponseSchema, data: z.array(${itemSchemaConst}) }).describe('Paginated${itemTypeName}List');\n return parseSchema(schema, response);`;\n } else {\n returnType = `{ pagination: PaginationResponse; data: unknown[] }`;\n parseLogic = `const schema = z.object({ pagination: paginationResponseSchema, data: z.array(z.unknown()) }).describe('PaginatedList');\n return parseSchema(schema, response);`;\n }\n }\n } else if (responseSchema) {\n const schemaConstName = `${camelCase(responseSchema)}Schema`;\n const typeName = pascalCase(responseSchema);\n returnType = typeName;\n parseLogic = `return parseSchema(${schemaConstName}, response);`;\n schemaImports.add(schemaConstName);\n typeImports.set(schemaConstName, typeName);\n } else if (inlineResponseSchemas.get(opKey)) {\n const inlineSchema = inlineResponseSchemas.get(opKey)!;\n returnType = inlineSchema.typeName;\n parseLogic = `return parseSchema(${inlineSchema.schemaConst}, response);`;\n } else {\n returnType = 'unknown';\n parseLogic = 'return response;';\n }\n }\n\n lines.push('');\n lines.push(` async ${methodName}(${params.join(', ')}): Promise<${returnType}> {`);\n\n if (queryParams.length > 0) {\n const { schemaConstName } = getResourcePrefixedParamNames(methodName, resourceClassName);\n lines.push(` const searchParams = new URLSearchParams();`);\n lines.push(` if (params) {`);\n lines.push(` const validated = parseSchema(${schemaConstName}, params);`);\n lines.push(` Object.entries(validated).forEach(([key, value]) => {`);\n lines.push(` if (value !== undefined) searchParams.set(key, String(value));`);\n lines.push(` });`);\n lines.push(` }`);\n lines.push(` const query = searchParams.toString();`);\n lines.push(` const url = query ? \\`\\${${pathTemplate}}?\\${query}\\` : ${pathTemplate};`);\n }\n\n const urlVar = queryParams.length > 0 ? 'url' : pathTemplate;\n const needsResponse = returnType !== 'void';\n const responsePrefix = needsResponse ? 'const response = ' : '';\n\n const hasBodySchema = requestSchema || inlineBodySchema;\n const hasBodyValidation = ['post', 'put', 'patch'].includes(httpMethod) && hasBodySchema;\n const bodyVar = hasBodyValidation ? 'validatedBody' : 'body';\n\n if (hasBodyValidation) {\n const bodySchemaConst = requestSchema\n ? `${camelCase(requestSchema)}Schema`\n : inlineBodySchema!.schemaConst;\n lines.push(` const validatedBody = parseSchema(${bodySchemaConst}, body);`);\n }\n\n switch (httpMethod) {\n case 'get':\n lines.push(` ${responsePrefix}await this.client.get(${urlVar});`);\n break;\n case 'post':\n lines.push(` ${responsePrefix}await this.client.post(${urlVar}, ${bodyVar});`);\n break;\n case 'put':\n lines.push(` ${responsePrefix}await this.client.put(${urlVar}, ${bodyVar});`);\n break;\n case 'patch':\n lines.push(` ${responsePrefix}await this.client.patch(${urlVar}, ${bodyVar});`);\n break;\n case 'delete':\n lines.push(` ${responsePrefix}await this.client.delete(${urlVar});`);\n break;\n }\n\n if (parseLogic) {\n lines.push(` ${parseLogic}`);\n }\n\n lines.push(' }');\n }\n\n lines.push('}');\n\n const placeholderIndex = lines.findIndex((l) => l === '__SCHEMA_IMPORTS_PLACEHOLDER__');\n if (placeholderIndex >= 0) {\n if (schemaImports.size > 0 || typeImports.size > 0) {\n const allImports = new Set([...schemaImports, ...typeImports.values()]);\n lines[placeholderIndex] = `import { ${Array.from(allImports).join(', ')} } from '${parentImportPath}schemas';`;\n } else {\n lines.splice(placeholderIndex, 1);\n }\n }\n\n return {\n className: resourceClassName,\n code: lines.join('\\n'),\n children: childResources,\n };\n }\n\n private generateFromTree(\n node: PathTreeNode,\n pathSegments: string[] = [],\n depth = 0,\n ): Array<ResourceResult & { pathSegments: string[] }> {\n const resources: Array<ResourceResult & { pathSegments: string[] }> = [];\n\n for (const [childName, childNode] of node.children) {\n const childPath = [...pathSegments, childName];\n const childResources = this.generateFromTree(childNode, childPath, depth + 1);\n resources.push(...childResources);\n }\n\n if (pathSegments.length > 0 && (node.operations.length > 0 || node.children.size > 0)) {\n const resource = this.generateResourceNode(node, pathSegments);\n resources.push({\n pathSegments,\n ...resource,\n });\n }\n\n return resources;\n }\n\n generateAll(): {\n resources: Record<string, string>;\n tree: PathTreeNode;\n inlineSchemas: Map<string, { schema: OpenAPISchema; isInput: boolean; typeName: string }>;\n } {\n this.collectAllInlineSchemas();\n\n const resources = this.generateFromTree(this.pathTree);\n\n const result: Record<string, string> = {};\n for (const resource of resources) {\n result[resource.className] = resource.code;\n }\n\n return {\n resources: result,\n tree: this.pathTree,\n inlineSchemas: this.collectedInlineSchemas,\n };\n }\n}\n","import { EnumRegistry, EnumContext } from './enum-registry';\nimport { camelCase, pascalCase, isBooleanLikeEnum, cleanSchemaName, OpenAPISchema } from './utils';\n\nexport interface UsedDateSchemas {\n stringToDateSchema: boolean;\n stringToDaySchema: boolean;\n dateToStringSchema: boolean;\n dayToStringSchema: boolean;\n}\n\nexport class ZodGenerator {\n private schemas: Record<string, OpenAPISchema>;\n private generatedSchemas = new Map<string, string>();\n private schemaOrder: string[] = [];\n private inlineSchemas = new Map<string, { schema: OpenAPISchema; isInput: boolean; typeName: string }>();\n public enumRegistry: EnumRegistry;\n public usedDateSchemas: UsedDateSchemas = {\n stringToDateSchema: false,\n stringToDaySchema: false,\n dateToStringSchema: false,\n dayToStringSchema: false,\n };\n private currentSchemaName: string | null = null;\n private currentPropertyPath: string | null = null;\n\n constructor(schemas?: Record<string, OpenAPISchema>, enumRegistry?: EnumRegistry) {\n this.schemas = schemas || {};\n this.enumRegistry = enumRegistry || new EnumRegistry();\n }\n\n addInlineSchemas(inlineSchemas: Map<string, { schema: OpenAPISchema; isInput: boolean; typeName: string }>): void {\n this.inlineSchemas = inlineSchemas;\n }\n\n convertSchema(schema: OpenAPISchema | undefined, schemaName: string | null = null, isTopLevel = false): string {\n if (!schema) return 'z.unknown()';\n\n if (schema.$ref) {\n const refName = schema.$ref.split('/').pop()!;\n const cleanedName = cleanSchemaName(refName);\n return `${camelCase(cleanedName)}Schema`;\n }\n\n if (schema.anyOf) {\n const options = schema.anyOf.map((s) => this.convertSchema(s, schemaName));\n if (options.length === 2 && options.includes('z.null()')) {\n const nonNull = options.find((o) => o !== 'z.null()');\n const isInputSchema =\n schemaName &&\n (schemaName.includes('Input') || schemaName.includes('Create') || schemaName.includes('Update'));\n return isInputSchema ? `${nonNull}.nullish()` : `${nonNull}.nullable()`;\n }\n return `z.union([${options.join(', ')}])`;\n }\n\n if (schema.oneOf) {\n const options = schema.oneOf.map((s) => this.convertSchema(s, schemaName));\n return `z.union([${options.join(', ')}])`;\n }\n\n if (schema.allOf) {\n const schemas = schema.allOf.map((s) => this.convertSchema(s, schemaName));\n if (schemas.length === 1) return schemas[0];\n return schemas.reduce((acc, s) => `${acc}.merge(${s})`);\n }\n\n if (schema.const !== undefined) {\n if (typeof schema.const === 'string') {\n return `z.literal('${schema.const}')`;\n }\n return `z.literal(${JSON.stringify(schema.const)})`;\n }\n\n const isNullable = schema.nullable === true;\n let zodSchema: string;\n\n switch (schema.type) {\n case 'string':\n zodSchema = this.convertStringSchema(schema, schemaName);\n break;\n case 'number':\n case 'integer':\n zodSchema = this.convertNumberSchema(schema, schemaName);\n break;\n case 'boolean':\n zodSchema = 'z.boolean()';\n break;\n case 'array':\n zodSchema = this.convertArraySchema(schema, schemaName);\n break;\n case 'object':\n zodSchema = this.convertObjectSchema(schema, schemaName);\n break;\n case 'null':\n return 'z.null()';\n default:\n if (schema.enum) {\n zodSchema = this.convertEnumSchema(schema, schemaName);\n } else if (schema.properties) {\n zodSchema = this.convertObjectSchema(schema, schemaName);\n } else {\n zodSchema = 'z.unknown()';\n }\n }\n\n if (isNullable) {\n const isInputSchema =\n schemaName && (schemaName.includes('Input') || schemaName.includes('Create') || schemaName.includes('Update'));\n zodSchema = isInputSchema ? `${zodSchema}.nullish()` : `${zodSchema}.nullable()`;\n }\n\n return zodSchema;\n }\n\n private convertStringSchema(schema: OpenAPISchema, schemaName: string | null = null): string {\n if (schema.enum) {\n return this.convertEnumSchema(schema, schemaName);\n }\n\n if (schema.format === 'date-time' || schema.format === 'date') {\n const isInputSchema =\n schemaName && (schemaName.includes('Input') || schemaName.includes('Create') || schemaName.includes('Update'));\n const isDateTime = schema.format === 'date-time';\n\n if (isInputSchema) {\n if (isDateTime) {\n this.usedDateSchemas.dateToStringSchema = true;\n return 'dateToStringSchema';\n } else {\n this.usedDateSchemas.dayToStringSchema = true;\n return 'dayToStringSchema';\n }\n }\n if (isDateTime) {\n this.usedDateSchemas.stringToDateSchema = true;\n return 'stringToDateSchema';\n } else {\n this.usedDateSchemas.stringToDaySchema = true;\n return 'stringToDaySchema';\n }\n }\n\n let zod = 'z.string()';\n if (schema.format === 'uuid') {\n zod = 'z.string().uuid()';\n } else if (schema.format === 'email') {\n zod = 'z.string().email()';\n } else if (schema.format === 'uri') {\n zod = 'z.string().url()';\n }\n\n if (schema.minLength !== undefined) {\n zod = `${zod}.min(${schema.minLength})`;\n }\n if (schema.maxLength !== undefined) {\n zod = `${zod}.max(${schema.maxLength})`;\n }\n if (schema.pattern && !schema.format) {\n zod = `${zod}.regex(/${schema.pattern}/)`;\n }\n\n return zod;\n }\n\n private convertNumberSchema(schema: OpenAPISchema, schemaName: string | null = null): string {\n const isInputSchema =\n schemaName &&\n (schemaName.includes('Input') ||\n schemaName.includes('Body') ||\n schemaName.includes('Params') ||\n schemaName === 'InlineInput');\n const baseType = isInputSchema ? 'z.coerce.number()' : 'z.number()';\n let zod = schema.type === 'integer' ? `${baseType}.int()` : baseType;\n\n if (schema.minimum !== undefined) {\n zod = `${zod}.min(${schema.minimum})`;\n }\n if (schema.maximum !== undefined) {\n zod = `${zod}.max(${schema.maximum})`;\n }\n\n return zod;\n }\n\n private convertArraySchema(schema: OpenAPISchema, schemaName: string | null = null): string {\n const itemSchema = schema.items ? this.convertSchema(schema.items, schemaName) : 'z.unknown()';\n let zod = `z.array(${itemSchema})`;\n\n if (schema.minItems !== undefined) {\n zod = `${zod}.min(${schema.minItems})`;\n }\n if (schema.maxItems !== undefined) {\n zod = `${zod}.max(${schema.maxItems})`;\n }\n\n return zod;\n }\n\n private convertObjectSchema(schema: OpenAPISchema, schemaName: string | null = null): string {\n if (!schema.properties || Object.keys(schema.properties).length === 0) {\n if (schema.additionalProperties && typeof schema.additionalProperties === 'object') {\n const valueSchema = this.convertSchema(schema.additionalProperties as OpenAPISchema, schemaName);\n return `z.record(z.string(), ${valueSchema})`;\n }\n return 'z.object({})';\n }\n\n const required = new Set(schema.required || []);\n const properties: string[] = [];\n\n for (const [propName, propSchema] of Object.entries(schema.properties)) {\n const previousPropertyPath = this.currentPropertyPath;\n this.currentPropertyPath = previousPropertyPath ? `${previousPropertyPath}.${propName}` : propName;\n\n const propZod = this.convertSchema(propSchema, schemaName);\n const isRequired = required.has(propName);\n const finalProp = isRequired ? propZod : `${propZod}.optional()`;\n properties.push(` ${propName}: ${finalProp}`);\n\n this.currentPropertyPath = previousPropertyPath;\n }\n\n let zod = `z.object({\\n${properties.join(',\\n')}\\n})`;\n\n if (schema.additionalProperties === false) {\n zod = `${zod}.strict()`;\n }\n\n return zod;\n }\n\n private convertEnumSchema(schema: OpenAPISchema, schemaName: string | null = null): string {\n const values = schema.enum!;\n\n if (isBooleanLikeEnum(values)) {\n return 'z.boolean()';\n }\n\n const context: EnumContext = {\n source: 'schema',\n schemaName: this.currentSchemaName || schemaName || undefined,\n propertyPath: this.currentPropertyPath || undefined,\n };\n\n const enumInfo = this.enumRegistry.register(values, context);\n return enumInfo.schemaConstName;\n }\n\n private extractDependencies(schema: OpenAPISchema | undefined): Set<string> {\n const deps = new Set<string>();\n if (!schema) return deps;\n\n if (schema.$ref) {\n const refName = schema.$ref.split('/').pop()!;\n deps.add(refName);\n return deps;\n }\n\n if (schema.anyOf) {\n for (const s of schema.anyOf) {\n for (const dep of this.extractDependencies(s)) {\n deps.add(dep);\n }\n }\n }\n\n if (schema.oneOf) {\n for (const s of schema.oneOf) {\n for (const dep of this.extractDependencies(s)) {\n deps.add(dep);\n }\n }\n }\n\n if (schema.allOf) {\n for (const s of schema.allOf) {\n for (const dep of this.extractDependencies(s)) {\n deps.add(dep);\n }\n }\n }\n\n if (schema.items) {\n for (const dep of this.extractDependencies(schema.items)) {\n deps.add(dep);\n }\n }\n\n if (schema.properties) {\n for (const propSchema of Object.values(schema.properties)) {\n for (const dep of this.extractDependencies(propSchema)) {\n deps.add(dep);\n }\n }\n }\n\n if (schema.additionalProperties && typeof schema.additionalProperties === 'object') {\n for (const dep of this.extractDependencies(schema.additionalProperties as OpenAPISchema)) {\n deps.add(dep);\n }\n }\n\n return deps;\n }\n\n private topologicalSort(schemaNames: string[]): string[] {\n const visited = new Set<string>();\n const result: string[] = [];\n const visiting = new Set<string>();\n\n const visit = (name: string) => {\n if (visited.has(name)) return;\n if (visiting.has(name)) return;\n\n visiting.add(name);\n\n const schema = this.schemas[name];\n if (schema) {\n const deps = this.extractDependencies(schema);\n for (const dep of deps) {\n if (schemaNames.includes(dep)) {\n visit(dep);\n }\n }\n }\n\n visiting.delete(name);\n visited.add(name);\n result.push(name);\n };\n\n for (const name of schemaNames) {\n visit(name);\n }\n\n return result;\n }\n\n generateSchemas(runtimePackage: string): string {\n const schemaOutput: string[] = [];\n\n for (const name of Object.keys(this.schemas)) {\n this.schemaOrder.push(name);\n }\n\n this.schemaOrder = this.topologicalSort(this.schemaOrder);\n\n const usedNames = new Set<string>();\n\n for (const name of this.schemaOrder) {\n const schema = this.schemas[name];\n\n this.currentSchemaName = name;\n this.currentPropertyPath = null;\n\n const zodSchema = this.convertSchema(schema, name, true);\n\n this.currentSchemaName = null;\n\n let cleanName = name;\n if (cleanName.endsWith('SchemaInput')) {\n cleanName = cleanName.replace('SchemaInput', 'Input');\n } else if (cleanName.endsWith('Schema')) {\n cleanName = cleanName.replace('Schema', '');\n }\n\n const schemaConstName = camelCase(cleanName) + 'Schema';\n const typeName = pascalCase(cleanName);\n\n if (usedNames.has(schemaConstName) || usedNames.has(typeName)) {\n continue;\n }\n usedNames.add(schemaConstName);\n usedNames.add(typeName);\n\n schemaOutput.push(`export const ${schemaConstName} = ${zodSchema}.describe('${typeName}');`);\n const isInputType = /(?:Body|Input|Params)$/.test(cleanName);\n const inferType = isInputType ? 'z.input' : 'z.output';\n schemaOutput.push(`export type ${typeName} = ${inferType}<typeof ${schemaConstName}>;`);\n schemaOutput.push('');\n }\n\n this.enumRegistry.register(['desc', 'asc'], {\n source: 'schema',\n schemaName: 'PaginationParams',\n propertyPath: 'ordering',\n });\n const orderingEnumInfo = this.enumRegistry.get(['desc', 'asc'])!;\n\n schemaOutput.push('// Common pagination schemas');\n schemaOutput.push(`export const paginationParamsSchema = z.object({\n page: z.number().optional(),\n limit: z.number().optional(),\n orderBy: z.string().optional(),\n ordering: ${orderingEnumInfo.schemaConstName}.optional(),\n}).describe('PaginationParams');`);\n schemaOutput.push('export type PaginationParams = z.input<typeof paginationParamsSchema>;');\n schemaOutput.push('');\n\n schemaOutput.push(`export const paginationResponseSchema = z.object({\n page: z.number(),\n pages: z.number(),\n limit: z.number(),\n total: z.number(),\n}).describe('PaginationResponse');`);\n schemaOutput.push('export type PaginationResponse = z.output<typeof paginationResponseSchema>;');\n schemaOutput.push('');\n\n if (this.inlineSchemas.size > 0) {\n schemaOutput.push('// Inline request/response schemas');\n for (const [schemaName, schemaInfo] of this.inlineSchemas) {\n const { schema, isInput, typeName } = schemaInfo;\n const contextName = isInput ? 'InlineInput' : 'InlineOutput';\n const zodSchema = this.convertSchema(schema, contextName, true);\n schemaOutput.push(`export const ${schemaName} = ${zodSchema}.describe('${typeName}');`);\n const inferType = isInput ? 'z.input' : 'z.output';\n schemaOutput.push(`export type ${typeName} = ${inferType}<typeof ${schemaName}>;`);\n schemaOutput.push('');\n }\n }\n\n const output: string[] = [];\n output.push(\"import { z } from 'zod';\");\n\n const usedDateSchemasList = Object.entries(this.usedDateSchemas)\n .filter(([_, used]) => used)\n .map(([name]) => name);\n\n if (usedDateSchemasList.length > 0) {\n output.push(`import { ${usedDateSchemasList.join(', ')} } from '${runtimePackage}';`);\n }\n\n output.push('');\n\n const enumExports = this.enumRegistry.generateEnumExports();\n if (enumExports) {\n output.push(enumExports);\n }\n\n output.push(...schemaOutput);\n\n return output.join('\\n');\n }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport prettier from 'prettier';\n\nexport async function formatCode(code: string, filepath: string): Promise<string> {\n try {\n const options = await prettier.resolveConfig(filepath);\n return prettier.format(code, { ...options, parser: 'typescript' });\n } catch (error) {\n console.warn(`Warning: Could not format ${filepath}:`, (error as Error).message);\n return code;\n }\n}\n\nexport async function writeFile(filepath: string, content: string): Promise<void> {\n const dir = path.dirname(filepath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n const formatted = await formatCode(content, filepath);\n fs.writeFileSync(filepath, formatted);\n console.log(`Generated: ${filepath}`);\n}\n\nexport interface GeneratedFile {\n path: string;\n content: string;\n}\n\nexport async function writeFiles(files: GeneratedFile[]): Promise<void> {\n for (const file of files) {\n await writeFile(file.path, file.content);\n }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport type { OpenAPISpec } from './utils';\n\nexport async function loadSpec(specPath: string): Promise<OpenAPISpec> {\n // If it's a URL, fetch it\n if (specPath.startsWith('http://') || specPath.startsWith('https://')) {\n console.log(`Fetching OpenAPI spec from ${specPath}...`);\n const response = await fetch(specPath);\n if (!response.ok) {\n throw new Error(`Failed to fetch OpenAPI spec: ${response.statusText}`);\n }\n const spec = (await response.json()) as OpenAPISpec;\n console.log(`OpenAPI spec version: ${spec.openapi}`);\n console.log(`API title: ${spec.info.title}`);\n return spec;\n }\n\n // Otherwise, read from file\n const resolvedPath = path.resolve(specPath);\n console.log(`Reading OpenAPI spec from ${resolvedPath}...`);\n if (!fs.existsSync(resolvedPath)) {\n throw new Error(`OpenAPI spec file not found: ${resolvedPath}`);\n }\n\n const content = fs.readFileSync(resolvedPath, 'utf-8');\n\n let spec: OpenAPISpec;\n if (resolvedPath.endsWith('.yaml') || resolvedPath.endsWith('.yml')) {\n throw new Error('YAML specs are not supported yet. Please use JSON format.');\n } else {\n spec = JSON.parse(content) as OpenAPISpec;\n }\n\n console.log(`OpenAPI spec version: ${spec.openapi}`);\n console.log(`API title: ${spec.info.title}`);\n return spec;\n}\n","import path from 'path';\nimport { generateClient } from '../../generator/client-generator';\nimport type { OrcConfig } from '../../generator/config';\n\nexport async function runGenerate(\n config: OrcConfig,\n options: { client?: string; spec?: string },\n): Promise<void> {\n const runtimePackage = config.runtimePackage || '@moinax/orc';\n\n let clients = config.clients;\n\n if (options.client) {\n clients = clients.filter((c) => c.name.toLowerCase() === options.client!.toLowerCase());\n if (clients.length === 0) {\n console.error(`Error: Client \"${options.client}\" not found in configuration.`);\n console.log('Available clients:', config.clients.map((c) => c.name).join(', '));\n process.exit(1);\n }\n }\n\n if (options.spec && !options.client) {\n console.error('Error: --spec requires --client to be specified');\n process.exit(1);\n }\n\n console.log('ORC - OpenAPI Rest Client Generator');\n console.log('====================================');\n console.log(`Generating ${clients.length} client(s): ${clients.map((c) => c.name).join(', ')}`);\n if (options.spec) {\n console.log(`Using custom spec: ${options.spec}`);\n }\n\n const results = [];\n for (const clientConfig of clients) {\n try {\n const result = await generateClient(clientConfig, {\n specOverride: options.spec,\n runtimePackage,\n });\n results.push(result);\n } catch (error) {\n console.error(`\\nError generating ${clientConfig.name}Client:`, (error as Error).message);\n process.exit(1);\n }\n }\n\n console.log('\\n' + '='.repeat(60));\n console.log('All clients generated successfully!');\n console.log('='.repeat(60));\n\n for (const result of results) {\n console.log(`\\n${result.name}Client resources: ${result.resourceNames.join(', ')}`);\n }\n}\n","import fs from 'fs';\nimport path from 'path';\n\nconst CONFIG_TEMPLATE = `import { defineConfig } from '@moinax/orc/config';\n\nexport default defineConfig({\n clients: [\n {\n name: 'MyApi',\n spec: 'https://api.example.com/openapi.json',\n output: 'src/lib/api/my-api-client',\n },\n ],\n});\n`;\n\nexport async function runInit(): Promise<void> {\n const configPath = path.join(process.cwd(), 'orc.config.ts');\n\n if (fs.existsSync(configPath)) {\n console.error(`Config file already exists: ${configPath}`);\n process.exit(1);\n }\n\n fs.writeFileSync(configPath, CONFIG_TEMPLATE);\n console.log(`Created config file: ${configPath}`);\n console.log('\\nEdit the file to configure your API clients, then run:');\n console.log(' orc generate');\n}\n"],"mappings":"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","names":["path","fs","fs","path","pluralizeLib","cleanSchemaName","pluralizeLib","fs","path","spec","path","fs","fs","path","path","fs"]}
|
package/package.json
CHANGED
|
@@ -1,16 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moinax/orc",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "OpenAPI Rest Client generator - generates typed TypeScript API clients with Zod validation from OpenAPI specs",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "./dist/runtime/index.cjs",
|
|
7
|
-
"module": "./dist/runtime/index.js",
|
|
8
|
-
"types": "./dist/runtime/index.d.ts",
|
|
9
|
-
"typesVersions": {
|
|
10
|
-
"*": {
|
|
11
|
-
"config": ["./dist/generator/config.d.ts"]
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
6
|
"exports": {
|
|
15
7
|
".": {
|
|
16
8
|
"types": "./dist/runtime/index.d.ts",
|