prisma-zod-generator
Version:
Prisma 2+ generator to emit Zod schemas from your Prisma schema
152 lines (151 loc) • 4.6 kB
TypeScript
/**
* Variant File Generation Coordinator
* Orchestrates creation of multiple schema files for each variant
*/
import { DMMF } from '@prisma/generator-helper';
import { PrismaTypeMapper } from '../generators/model';
import { ModelVariantCollection, VariantConfig, VariantGenerationResult, VariantType } from '../types/variants';
import { NamingResult, VariantNamingSystem } from '../utils/naming';
import { VariantConfigurationManager } from './config';
/**
* File generation context
*/
export interface GenerationContext {
model: DMMF.Model;
variant: VariantType;
config: VariantConfig;
naming: NamingResult;
outputDirectory: string;
typeMapper: PrismaTypeMapper;
}
/**
* Generation coordination options
*/
export interface GenerationCoordinationOptions {
enabledVariants?: VariantType[];
outputDirectory?: string;
preserveExisting?: boolean;
generateIndexFiles?: boolean;
validateDependencies?: boolean;
parallelGeneration?: boolean;
}
/**
* Generation progress tracking
*/
export interface GenerationProgress {
totalModels: number;
processedModels: number;
totalVariants: number;
processedVariants: number;
currentModel: string;
currentVariant: VariantType;
startTime: number;
errors: Array<{
model: string;
variant: VariantType;
error: string;
timestamp: number;
}>;
}
/**
* Generation statistics
*/
export interface GenerationStatistics {
totalTime: number;
averageModelTime: number;
variantCounts: Record<VariantType, number>;
errorCounts: Record<VariantType, number>;
filesSizesKB: Record<string, number>;
dependencyGraph: Record<string, string[]>;
}
/**
* Variant File Generation Coordinator
* Main class that orchestrates generation of all schema variants
*/
export declare class VariantFileGenerationCoordinator {
private configManager;
private namingSystem;
private typeMapper;
private progressCallbacks;
constructor(configManager?: VariantConfigurationManager, namingSystem?: VariantNamingSystem, typeMapper?: PrismaTypeMapper);
/**
* Generate all variants for multiple models
*/
generateAllVariants(models: DMMF.Model[], options?: GenerationCoordinationOptions, importExtension?: string): Promise<{
collections: ModelVariantCollection[];
statistics: GenerationStatistics;
errors: string[];
}>;
/**
* Generate variants for a single model
*/
generateModelVariants(model: DMMF.Model, options?: GenerationCoordinationOptions, progress?: GenerationProgress, importExtension?: string): Promise<ModelVariantCollection>;
/**
* Generate a single variant for a model
*/
generateSingleVariant(model: DMMF.Model, variantType: VariantType, options?: GenerationCoordinationOptions): Promise<VariantGenerationResult>;
/**
* Apply variant-specific customizations to content
*/
private applyVariantCustomizations;
/**
* Extract custom imports from content (non-enum related)
*/
private extractCustomImports;
/**
* Extract model-level validation from content
*/
private extractModelLevelValidation;
/**
* Restore custom imports to content
*/
private restoreCustomImports;
/**
* Restore model-level validation to content
*/
private restoreModelLevelValidation;
private resolveVariantPrismaImportPath;
/**
* Generate model index file
*/
private generateModelIndexFile;
/**
* Generate global index files for all variants
*/
private generateIndexFiles;
/**
* Calculate cross-variant references
*/
private calculateCrossVariantReferences;
/**
* Helper methods
*/
private calculateTotalVariants;
private calculateExcludedFields;
private calculateValidationCount;
private formatContent;
private writeVariantFile;
private validateDependencies;
private calculateStatistics;
private notifyProgress;
/**
* Public API methods
*/
/**
* Add progress callback
*/
onProgress(callback: (progress: GenerationProgress) => void): void;
/**
* Remove progress callback
*/
removeProgressCallback(callback: (progress: GenerationProgress) => void): void;
/**
* Get current configuration
*/
getConfiguration(): VariantConfigurationManager;
/**
* Update configuration
*/
updateConfiguration(configManager: VariantConfigurationManager): void;
}
export default VariantFileGenerationCoordinator;