prisma-zod-generator
Version:
Prisma 2+ generator to emit Zod schemas from your Prisma schema
136 lines (135 loc) • 4.03 kB
TypeScript
/**
* 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;
}