supa-seed
Version:
A constraint-aware, framework-agnostic database seeding framework with deep PostgreSQL business logic discovery and MakerKit integration support
227 lines • 8.19 kB
TypeScript
import { FlexibleSeedConfig, ConfigProfile, ConfigDetectionResult, ExtendedSeedConfig } from '../types/config-types';
import type { createClient } from '@supabase/supabase-js';
import type { ConstraintHandler } from '../../features/analysis/constraint-types';
import type { SeedingStrategy } from '../../features/integration/strategy-interface';
type SupabaseClient = ReturnType<typeof createClient>;
export interface ConfigManagerOptions {
enableExtensibility?: boolean;
enableSchemaEvolution?: boolean;
customHandlerRegistry?: Map<string, ConstraintHandler>;
customStrategies?: Map<string, SeedingStrategy>;
}
export declare class ConfigManager {
private configPath;
private options;
private schemaCache;
private customHandlers;
private customStrategies;
private client?;
constructor(configPath?: string, options?: ConfigManagerOptions);
/**
* Detect current database schema and suggest configuration
*/
detectAndSuggestConfig(client: SupabaseClient, configOverride?: any, supabaseUrl?: string, supabaseKey?: string): Promise<ConfigDetectionResult>;
/**
* Create a configuration file with auto-detection
*/
createConfig(client: SupabaseClient, options?: {
environment?: 'local' | 'staging' | 'production';
userCount?: number;
force?: boolean;
}): Promise<FlexibleSeedConfig>;
/**
* Load configuration from file
*/
loadConfig(): FlexibleSeedConfig;
/**
* Save configuration to file
*/
saveConfig(config: FlexibleSeedConfig): void;
/**
* Validate configuration
*/
validateConfig(config: FlexibleSeedConfig): FlexibleSeedConfig;
/**
* Validate column mappings against actual database schema
*/
validateColumnMappings(client: SupabaseClient, config: FlexibleSeedConfig): Promise<{
valid: boolean;
warnings: string[];
suggestions: string[];
}>;
/**
* Create multiple environment profiles
*/
createProfiles(): ConfigProfile[];
/**
* Auto-create missing tables based on configuration
*/
autoCreateTables(client: SupabaseClient, config: FlexibleSeedConfig): Promise<void>;
/**
* Print configuration summary
*/
printConfigSummary(config: FlexibleSeedConfig): void;
/**
* Check if a table exists in the database
*/
private tableExists;
/**
* Epic 7 Enhanced Configuration Methods
*/
/**
* FR-7.1: Support framework strategy overrides
*/
detectFrameworkWithOverrides(client: SupabaseClient, config?: ExtendedSeedConfig): Promise<{
detectedFramework: string;
overriddenFramework?: string;
availableStrategies: string[];
recommendations: string[];
}>;
/**
* FR-7.2: Register custom constraint handler
*/
registerCustomConstraintHandler(handler: ConstraintHandler): void;
/**
* FR-7.2: Apply custom constraint handlers from configuration
*/
applyCustomConstraintHandlers(config: ExtendedSeedConfig): ConstraintHandler[];
/**
* FR-7.3: Schema evolution detection
*/
detectSchemaEvolution(client: SupabaseClient, config: ExtendedSeedConfig): Promise<{
hasChanged: boolean;
changes: Array<{
type: 'table_added' | 'table_removed' | 'column_added' | 'column_removed' | 'constraint_changed';
table: string;
column?: string;
description: string;
}>;
schemaVersion: string;
migrationRequired: boolean;
recommendations: string[];
}>;
/**
* FR-7.4: Generate realistic data volume configuration
*/
generateDataVolumeConfiguration(requirements: {
environment: 'development' | 'staging' | 'production';
testingScenarios: string[];
expectedLoad: 'light' | 'medium' | 'heavy';
domainType?: string;
customConstraints?: {
maxUsers?: number;
maxSeedingTime?: number;
maxDatabaseSize?: number;
};
}): ExtendedSeedConfig['dataVolumes'];
/**
* Calculate data generation metrics for a configuration
*/
calculateDataGenerationMetrics(config: ExtendedSeedConfig): {
totalUsers: number;
totalItems: number;
totalRelationships: number;
publicContentCount: number;
privateContentCount: number;
draftContentCount: number;
estimatedDatabaseSize: number;
estimatedSeedingTime: number;
};
/**
* Get recommended data volume profile for specific use case
*/
getRecommendedDataVolumeProfile(useCase: 'ci-testing' | 'development' | 'demo' | 'load-testing' | 'production'): import("../../features/generation/data-volume-manager").DataVolumeProfile;
/**
* Validate data volume configuration
*/
validateDataVolumeConfiguration(config: ExtendedSeedConfig['dataVolumes']): {
valid: boolean;
errors: string[];
warnings: string[];
recommendations: string[];
};
/**
* FR-7.5: Validate custom relationship definitions
*/
validateCustomRelationships(client: SupabaseClient, relationships: ExtendedSeedConfig['customRelationships']): Promise<{
valid: boolean;
errors: string[];
warnings: string[];
recommendations: string[];
}>;
/**
* Generate relationship execution plan
*/
generateRelationshipExecutionPlan(client: SupabaseClient, relationships: ExtendedSeedConfig['customRelationships']): Promise<import("../../schema/custom-relationship-manager").RelationshipGenerationPlan>;
/**
* Create relationship generators for data seeding
*/
createRelationshipGenerators(client: SupabaseClient, relationships: ExtendedSeedConfig['customRelationships']): Map<any, any>;
/**
* Apply inheritance rules to generated data
*/
applyInheritanceRules(client: SupabaseClient, data: Record<string, any[]>, inheritanceRules?: any[]): Record<string, any[]>;
/**
* Generate data using configured patterns
*/
generateDataWithPatterns(config: ExtendedSeedConfig, table: string, count: number, context?: Record<string, any>): any[];
/**
* Apply consistency rules to generated data
*/
applyDataConsistencyRules(data: Record<string, any[]>, config: ExtendedSeedConfig): {
data: Record<string, any[]>;
violations: Array<{
rule: string;
severity: string;
message: string;
affectedTables: string[];
autoFixed: boolean;
}>;
};
/**
* Enforce referential integrity on generated data
*/
enforceReferentialIntegrity(data: Record<string, any[]>, config: ExtendedSeedConfig): {
data: Record<string, any[]>;
orphansRemoved: number;
referencesFixed: number;
};
/**
* Validate generated data patterns
*/
validateGeneratedDataPatterns(data: Record<string, any[]>, config: ExtendedSeedConfig): {
valid: boolean;
errors: string[];
warnings: string[];
patternMetrics: Record<string, any>;
};
/**
* Get available data generation patterns
*/
getAvailableDataPatterns(domain?: string): import("../../features/generation/data-generation-pattern-manager").DataGenerationPattern[];
/**
* Get domain-specific vocabulary
*/
getDomainVocabulary(domain: string): import("../../features/generation/data-generation-pattern-manager").DomainVocabulary | undefined;
/**
* Create custom data generation pattern
*/
createCustomDataPattern(pattern: any): void;
/**
* Enhanced configuration validation with extensibility support
*/
validateExtendedConfig(config: ExtendedSeedConfig): {
valid: boolean;
errors: string[];
warnings: string[];
recommendations: string[];
};
/**
* Helper methods for Epic 7 functionality
*/
private registerCustomStrategy;
private createConstraintHandlerFunction;
private mapChangeType;
}
export {};
//# sourceMappingURL=config-manager.d.ts.map