UNPKG

@autobe/agent

Version:

AI backend server code generator

64 lines (61 loc) 2.12 kB
import { AutoBeOpenApi } from "@autobe/interface"; import { HttpMigration, IHttpMigrateApplication, OpenApi, OpenApiTypeChecker, } from "@samchon/openapi"; export function invertOpenApiDocument( document: OpenApi.IDocument, ): AutoBeOpenApi.IDocument { const app: IHttpMigrateApplication = HttpMigration.application(document); return { operations: app.routes .filter((r) => r.query === null) .map( (r) => ({ specification: empty("specification"), method: r.method as "post", path: r.path, summary: r.operation().summary ?? empty("summary"), description: r.operation().description ?? empty("description"), parameters: r.parameters.map( (p) => ({ name: p.name, description: p.parameter().description ?? empty("description"), schema: p.schema as any, }) satisfies AutoBeOpenApi.IParameter, ), requestBody: r.body?.type === "application/json" && OpenApiTypeChecker.isReference(r.body.schema) ? { description: r.body.description() ?? empty("description"), typeName: r.body.schema.$ref.split("/").pop()!, } : null, responseBody: r.success?.type === "application/json" && OpenApiTypeChecker.isReference(r.success.schema) ? { description: r.success.description() ?? empty("description"), typeName: r.success.schema.$ref.split("/").pop()!, } : null, }) satisfies AutoBeOpenApi.IOperation, ), components: { schemas: (document.components?.schemas ?? {}) as Record< string, AutoBeOpenApi.IJsonSchemaDescriptive >, }, }; } function empty(key: string): string { return `Describe ${key} as much as possible with clear and concise words.`; }