UNPKG

prisma-zod-generator

Version:

Prisma 2+ generator to emit Zod schemas from your Prisma schema

136 lines (135 loc) 4.03 kB
/** * PZG Pro - API Docs Generator (DMMF-based) * * Generate OpenAPI v3 documentation and mock servers from DMMF data */ import { ProFeatureBase } from '../../core/ProFeatureBase'; import { ProGeneratorContext } from '../../core/ProGeneratorContext'; export interface APIDocsConfig { outputPath?: string; title?: string; version?: string; description?: string; serverUrl?: string; mockPort?: number; enableMockServer?: boolean; startMockServer?: boolean; generateExamples?: boolean; includeDeprecated?: boolean; authScheme?: 'bearer' | 'apikey' | 'oauth2' | 'none'; responseFormats?: string[]; mockServer?: boolean; openApiVersion?: string; includeExamples?: boolean; includeChangelog?: boolean; } export interface OpenAPISchema { openapi: string; info: { title: string; version: string; description?: string; }; servers: Array<{ url: string; description?: string; }>; paths: Record<string, Record<string, OpenAPIOperation>>; components: { schemas: Record<string, OpenAPISchemaObject>; securitySchemes?: Record<string, OpenAPISecurityScheme>; }; security?: Array<Record<string, string[]>>; } export interface OpenAPIOperation { summary: string; description?: string; operationId: string; tags: string[]; parameters?: OpenAPIParameter[]; requestBody?: OpenAPIRequestBody; responses: Record<string, OpenAPIResponse>; security?: Array<Record<string, string[]>>; } export interface OpenAPISchemaObject { type?: string; properties?: Record<string, OpenAPISchemaObject>; required?: string[]; items?: OpenAPISchemaObject; example?: unknown; description?: string; format?: string; enum?: unknown[]; allOf?: OpenAPISchemaObject[]; anyOf?: OpenAPISchemaObject[]; oneOf?: OpenAPISchemaObject[]; $ref?: string; maxLength?: number; minLength?: number; minimum?: number; maximum?: number; additionalProperties?: boolean | OpenAPISchemaObject; } export interface OpenAPIParameter { name: string; in: 'query' | 'path' | 'header' | 'cookie'; required?: boolean; schema: OpenAPISchemaObject; description?: string; example?: unknown; } export interface OpenAPIRequestBody { description?: string; required?: boolean; content: Record<string, { schema: OpenAPISchemaObject; example?: unknown; }>; } export interface OpenAPIResponse { description: string; content?: Record<string, { schema: OpenAPISchemaObject; example?: unknown; }>; headers?: Record<string, OpenAPISchemaObject>; } export interface OpenAPISecurityScheme { type: 'http' | 'apiKey' | 'oauth2' | 'openIdConnect'; scheme?: string; bearerFormat?: string; name?: string; in?: 'query' | 'header' | 'cookie'; flows?: Record<string, unknown>; } export declare class ApiDocsGenerator extends ProFeatureBase { private config; constructor(context: ProGeneratorContext, config?: APIDocsConfig); protected getFeatureName(): string; protected generateFeature(): Promise<void>; private generateOpenAPISpec; private generateModelSchema; private generateFieldSchema; private generateScalarFieldSchema; private generateCreateInputSchema; private generateUpdateInputSchema; private generateModelPaths; private generateIdParameters; private generateSecuritySchemes; private generateSecurity; private generateFieldExample; private generateScalarExample; private convertToYaml; private generateDocsPortal; private generateMockServer; private generateMockDataFunction; private generateMockRoutes; private generateTypeScriptSDK; private generateSDKMethods; private generateExamples; private generateStaticDocs; private generateExampleData; private pluralize; private getExampleValueForField; private generateUsageREADME; }