UNPKG

supa-seed

Version:

A constraint-aware, framework-agnostic database seeding framework with deep PostgreSQL business logic discovery and MakerKit integration support

529 lines 17.7 kB
/** * Detection Types and Interfaces for Epic 2: Smart Platform Detection Engine * Core type definitions for platform architecture and domain detection system * Part of Task 2.1.1: Create core detection types and interfaces */ /** * Platform architecture types that can be detected */ export type PlatformArchitectureType = 'individual' | 'team' | 'hybrid'; /** * Content domain types for domain-specific detection */ export type ContentDomainType = 'outdoor' | 'saas' | 'ecommerce' | 'social' | 'generic'; /** * Evidence types for supporting detection decisions */ export type EvidenceType = 'table_pattern' | 'column_analysis' | 'relationship_pattern' | 'constraint_pattern' | 'function_analysis' | 'naming_convention' | 'data_pattern' | 'business_logic'; /** * Confidence levels for detection results */ export type ConfidenceLevel = 'very_high' | 'high' | 'medium' | 'low' | 'very_low'; /** * Platform feature categories for detailed analysis */ export type PlatformFeatureCategory = 'authentication' | 'user_management' | 'content_creation' | 'collaboration' | 'organization' | 'billing' | 'media' | 'communication' | 'analytics' | 'customization'; /** * Detection strategies for different analysis approaches */ export type DetectionStrategy = 'comprehensive' | 'fast' | 'conservative' | 'aggressive'; /** * Evidence supporting an architecture detection decision */ export interface ArchitectureEvidence { /** Type of evidence found */ type: EvidenceType; /** Human-readable description of the evidence */ description: string; /** Confidence in this piece of evidence (0-1) */ confidence: number; /** Weight of this evidence in overall decision (0-1) */ weight: number; /** Supporting data for the evidence */ supportingData: { /** Table names involved */ tables?: string[]; /** Column names involved */ columns?: string[]; /** Constraint names involved */ constraints?: string[]; /** Pattern matches */ patterns?: string[]; /** Raw data samples */ samples?: any[]; }; /** How this evidence points to specific architecture */ architectureIndicators: { individual: number; team: number; hybrid: number; }; } /** * Platform feature detected in the schema */ export interface PlatformFeature { /** Feature identifier */ id: string; /** Feature name */ name: string; /** Feature category */ category: PlatformFeatureCategory; /** Whether the feature is present */ present: boolean; /** Confidence in feature detection (0-1) */ confidence: number; /** Evidence supporting this feature detection */ evidence: string[]; /** Tables that implement this feature */ implementingTables: string[]; /** Architecture types this feature typically indicates */ typicallyIndicates: PlatformArchitectureType[]; /** Domain types this feature is common in */ commonInDomains: ContentDomainType[]; } /** * Main result of platform architecture detection */ export interface PlatformArchitectureDetectionResult { /** Detected architecture type */ architectureType: PlatformArchitectureType; /** Overall confidence in detection (0-1) */ confidence: number; /** Confidence level category */ confidenceLevel: ConfidenceLevel; /** All evidence supporting this detection */ evidence: ArchitectureEvidence[]; /** Platform features detected */ platformFeatures: PlatformFeature[]; /** Detected features as string array for reporting */ detectedFeatures: string[]; /** Detailed reasoning for the detection */ reasoning: string[]; /** Alternative possibilities with their confidence */ alternatives: Array<{ architectureType: PlatformArchitectureType; confidence: number; reasoning: string; }>; /** Recommendations based on detection */ recommendations: string[]; /** Metrics about the detection process */ detectionMetrics: { /** Time taken for detection (ms) */ executionTime: number; /** Number of tables analyzed */ tablesAnalyzed: number; /** Number of evidence pieces found */ evidenceCount: number; /** Schema complexity score */ schemaComplexity: number; /** Detection strategy used */ strategyUsed: DetectionStrategy; }; /** Warnings or issues encountered during detection */ warnings: string[]; /** Errors that occurred but didn't prevent detection */ errors: string[]; } /** * Configuration for architecture detection process */ export interface ArchitectureDetectionConfig { /** Detection strategy to use */ strategy: DetectionStrategy; /** Minimum confidence threshold for definitive results */ confidenceThreshold: number; /** Whether to include detailed evidence in results */ includeDetailedEvidence: boolean; /** Whether to analyze business logic functions */ analyzeBusinessLogic: boolean; /** Whether to analyze RLS policies */ analyzeRLSPolicies: boolean; /** Whether to perform deep relationship analysis */ deepRelationshipAnalysis: boolean; /** Tables to exclude from analysis */ excludeTables: string[]; /** Tables to focus analysis on */ focusTables?: string[]; /** Maximum time to spend on detection (ms) */ maxExecutionTime: number; /** Whether to use cached detection results */ useCaching: boolean; /** Manual overrides for detection */ manualOverrides?: { /** Force specific architecture type */ architectureType?: PlatformArchitectureType; /** Force specific features to be present/absent */ forcePlatformFeatures?: Record<string, boolean>; /** Add custom evidence */ customEvidence?: ArchitectureEvidence[]; }; } /** * Pattern matching rule for architecture detection */ export interface ArchitecturePattern { /** Pattern identifier */ id: string; /** Pattern name */ name: string; /** Pattern description */ description: string; /** Architecture types this pattern indicates */ indicatesArchitecture: PlatformArchitectureType[]; /** Confidence boost when pattern matches (0-1) */ confidenceWeight: number; /** Table name patterns to match */ tablePatterns: string[]; /** Column name patterns to match */ columnPatterns: string[]; /** Constraint patterns to match */ constraintPatterns: string[]; /** Relationship patterns to match */ relationshipPatterns: Array<{ fromTable: string; toTable: string; type: 'one_to_one' | 'one_to_many' | 'many_to_many'; }>; /** Function patterns to match */ functionPatterns: string[]; /** Minimum matches required for pattern to be valid */ minimumMatches: number; /** Whether this pattern is exclusive to certain architectures */ exclusive: boolean; } /** * Individual creator platform patterns */ export interface IndividualPlatformIndicators { /** User-centric table patterns */ userCentricTables: string[]; /** Content creation focused tables */ contentFocusedTables: string[]; /** Simple account structures */ simpleAccountPatterns: string[]; /** Limited collaboration indicators */ limitedCollaboration: string[]; /** Personal profile emphasis */ personalProfilePatterns: string[]; } /** * Team collaboration platform patterns */ export interface TeamPlatformIndicators { /** Team/organization table patterns */ teamOrganizationTables: string[]; /** Member management structures */ memberManagementTables: string[]; /** Workspace/project patterns */ workspaceProjectTables: string[]; /** Complex permission systems */ permissionSystemTables: string[]; /** Collaboration features */ collaborationTables: string[]; /** Role hierarchy patterns */ roleHierarchyPatterns: string[]; } /** * Hybrid platform patterns combining individual and team features */ export interface HybridPlatformIndicators { /** Flexible account structures */ flexibleAccountTables: string[]; /** Mixed content ownership */ mixedOwnershipPatterns: string[]; /** Scalable permission systems */ scalablePermissionTables: string[]; /** Both individual and team capabilities */ dualCapabilityTables: string[]; /** Context-switching features */ contextSwitchingPatterns: string[]; } /** * Analysis context for detection process */ export interface DetectionAnalysisContext { /** Schema information being analyzed */ schema: { /** Total number of tables */ tableCount: number; /** Table names */ tableNames: string[]; /** Relationships between tables */ relationships: Array<{ fromTable: string; toTable: string; type: string; columnName: string; }>; /** Constraints present */ constraints: Array<{ tableName: string; constraintName: string; type: string; }>; }; /** Framework information if detected */ framework?: { type: string; version?: string; confidence: number; }; /** Business logic information */ businessLogic?: { functions: string[]; triggers: string[]; policies: string[]; }; /** Existing detection results to build upon */ existingResults?: { frameworkDetection?: any; multiTenantDetection?: any; businessLogicAnalysis?: any; }; } /** * Result of pattern analysis */ export interface PatternAnalysisResult { /** Pattern that was analyzed */ pattern: ArchitecturePattern; /** Whether the pattern matched */ matched: boolean; /** Confidence in the match (0-1) */ matchConfidence: number; /** Details about what matched */ matchDetails: { /** Tables that matched */ matchedTables: string[]; /** Columns that matched */ matchedColumns: string[]; /** Constraints that matched */ matchedConstraints: string[]; /** Relationships that matched */ matchedRelationships: string[]; /** Functions that matched */ matchedFunctions: string[]; }; /** What the pattern indicates */ architectureIndication: { type: PlatformArchitectureType; confidence: number; reasoning: string; }; } /** * Cache entry for detection results */ export interface DetectionCacheEntry { /** Schema hash for cache validation */ schemaHash: string; /** Detection result */ result: PlatformArchitectureDetectionResult; /** Timestamp when cached */ timestamp: number; /** Detection config used */ config: ArchitectureDetectionConfig; /** Time to live (ms) */ ttl: number; } /** * Override validation result */ export interface OverrideValidationResult { /** Whether the override is valid */ isValid: boolean; /** Warnings about the override */ warnings: string[]; /** Conflicts with detected evidence */ conflicts: Array<{ evidenceType: EvidenceType; description: string; severity: 'low' | 'medium' | 'high'; }>; /** Recommendations for the override */ recommendations: string[]; } /** * Detection statistics for monitoring and optimization */ export interface DetectionStatistics { /** Total detections performed */ totalDetections: number; /** Detection results by architecture type */ resultsByArchitecture: Record<PlatformArchitectureType, number>; /** Average detection time */ averageDetectionTime: number; /** Average confidence scores */ averageConfidence: number; /** Cache hit rate */ cacheHitRate: number; /** Most common evidence types */ commonEvidenceTypes: Record<EvidenceType, number>; /** Error rates by detection stage */ errorRates: Record<string, number>; /** Performance metrics */ performanceMetrics: { fastestDetection: number; slowestDetection: number; memoryUsage: number; }; } /** * Domain detection result interface */ export interface DomainDetectionResult { /** Primary detected domain */ primaryDomain: ContentDomainType; /** Confidence in primary domain detection (0-1) */ confidence: number; /** Confidence level category */ confidenceLevel: ConfidenceLevel; /** Secondary domains detected with lower confidence */ secondaryDomains: Array<{ domain: ContentDomainType; confidence: number; reasoning: string; }>; /** Evidence supporting domain detection */ domainEvidence: DomainEvidence[]; /** Detected features as string array for reporting */ detectedFeatures: string[]; /** Recommendations based on domain detection */ recommendations: string[]; /** Whether platform has hybrid domain capabilities */ hybridCapabilities: boolean; /** Detailed reasoning for domain classification */ reasoning: string[]; /** Metrics about the domain detection process */ detectionMetrics: { /** Time taken for detection (ms) */ executionTime: number; /** Number of patterns analyzed */ patternsAnalyzed: number; /** Number of evidence pieces found */ evidenceCount: number; /** Detection strategy used */ strategyUsed: string; }; /** Warnings about domain detection */ warnings: string[]; /** Errors encountered during detection */ errors: string[]; } /** * Domain-specific evidence interface */ export interface DomainEvidence { /** Type of evidence found */ type: 'table_pattern' | 'column_analysis' | 'relationship_pattern' | 'business_logic'; /** Domain this evidence supports */ domain: ContentDomainType; /** Human-readable description of the evidence */ description: string; /** Confidence in this piece of evidence (0-1) */ confidence: number; /** Weight of this evidence in overall decision (0-1) */ weight: number; /** Supporting data for the evidence */ supportingData: { /** Table names involved */ tables?: string[]; /** Column names involved */ columns?: string[]; /** Pattern matches */ patterns?: string[]; /** Business logic elements */ businessLogic?: string[]; /** Raw data samples */ samples?: any[]; }; } /** * Domain pattern definition interface */ export interface DomainPattern { /** Pattern identifier */ id: string; /** Pattern name */ name: string; /** Pattern description */ description: string; /** Domain this pattern indicates */ indicatesDomain: ContentDomainType; /** Confidence boost when pattern matches (0-1) */ confidenceWeight: number; /** Table name patterns to match */ tablePatterns: string[]; /** Column name patterns to match */ columnPatterns: string[]; /** Relationship patterns to match */ relationshipPatterns: Array<{ fromTable: string; toTable: string; type: 'one_to_one' | 'one_to_many' | 'many_to_many'; }>; /** Business logic patterns to match */ businessLogicPatterns: string[]; /** Minimum matches required for pattern to be valid */ minimumMatches: number; /** Whether this pattern is exclusive to this domain */ exclusive: boolean; /** Pattern priority (higher = more important) */ priority: number; } /** * Domain detection configuration */ export interface DomainDetectionConfig { /** Detection strategy to use */ strategy: 'comprehensive' | 'fast' | 'conservative' | 'aggressive'; /** Minimum confidence threshold for domain classification */ confidenceThreshold: number; /** Whether to detect secondary domains */ detectSecondaryDomains: boolean; /** Whether to analyze business logic patterns */ analyzeBusinessLogic: boolean; /** Whether to perform deep relationship analysis */ deepRelationshipAnalysis: boolean; /** Domains to exclude from analysis */ excludeDomains: ContentDomainType[]; /** Custom domain patterns to include */ customPatterns?: DomainPattern[]; /** Maximum time to spend on detection (ms) */ maxExecutionTime: number; /** Whether to use cached detection results */ useCaching: boolean; /** Manual domain override */ manualOverride?: { /** Force specific domain */ primaryDomain?: ContentDomainType; /** Custom evidence */ customEvidence?: DomainEvidence[]; }; } /** * Domain analysis context */ export interface DomainAnalysisContext extends DetectionAnalysisContext { /** Domain-specific analysis data */ domainHints?: { /** Suggested domains based on external factors */ suggestedDomains?: ContentDomainType[]; /** Known domain patterns from configuration */ knownPatterns?: DomainPattern[]; /** Domain exclusions */ excludedDomains?: ContentDomainType[]; }; } /** * Export commonly used type unions */ export type DetectionResultType = PlatformArchitectureDetectionResult; export type DetectionConfigType = ArchitectureDetectionConfig; export type ArchitectureEvidenceType = ArchitectureEvidence; export type PlatformFeatureType = PlatformFeature; export type DomainDetectionResultType = DomainDetectionResult; export type DomainEvidenceType = DomainEvidence; //# sourceMappingURL=detection-types.d.ts.map