UNPKG

supa-seed

Version:

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

459 lines 15.4 kB
/** * Extension Configuration System * Implements Task 3.5: Comprehensive extension configuration system with type-safe schemas, validation, and management utilities */ import type { ContentDomainType, PlatformArchitectureType } from '../features/detection/detection-types'; import type { UserArchetype } from '../archetypes/archetype-types'; /** * Base extension configuration interface */ export interface BaseExtensionConfig { /** Extension identifier */ id: string; /** Human-readable name */ name: string; /** Extension description */ description: string; /** Extension version */ version: string; /** Whether the extension is enabled */ enabled: boolean; /** Extension author/maintainer */ author?: string; /** Extension configuration schema version */ schemaVersion: string; /** Extension dependencies */ dependencies?: string[]; /** Extension compatibility */ compatibility: { /** Minimum SupaSeed version required */ minSupaSeedVersion: string; /** Platform architectures this extension supports */ platforms: PlatformArchitectureType[]; /** Content domains this extension supports */ domains: ContentDomainType[]; }; } /** * Domain-specific extension configurations */ export interface OutdoorExtensionConfig extends BaseExtensionConfig { id: 'outdoor'; domain: 'outdoor'; /** Outdoor domain specific settings */ settings: { /** Activity types to generate */ activityTypes: ('hiking' | 'camping' | 'climbing' | 'biking' | 'skiing' | 'fishing' | 'hunting')[]; /** Gear categories to include */ gearCategories: ('backpacks' | 'tents' | 'clothing' | 'footwear' | 'electronics' | 'safety' | 'cooking')[]; /** Location types for activities */ locationTypes: ('national_park' | 'state_park' | 'wilderness' | 'urban' | 'coastal' | 'mountain' | 'desert')[]; /** Weather conditions to simulate */ weatherConditions: ('sunny' | 'rainy' | 'snowy' | 'windy' | 'foggy' | 'storm')[]; /** Seasonal preferences */ seasons: ('spring' | 'summer' | 'fall' | 'winter')[]; /** Difficulty levels for activities */ difficultyLevels: ('beginner' | 'intermediate' | 'advanced' | 'expert')[]; /** User archetypes specific to outdoor domain */ archetypes: OutdoorArchetype[]; }; /** Business logic parameters */ businessLogic: { /** Trip planning constraints */ tripPlanning: { /** Maximum trip duration in days */ maxTripDuration: number; /** Minimum group size */ minGroupSize: number; /** Maximum group size */ maxGroupSize: number; /** Budget constraints */ budgetRange: { min: number; max: number; }; }; /** Gear recommendation engine */ gearRecommendations: { /** Enable weather-based recommendations */ weatherBased: boolean; /** Enable activity-based recommendations */ activityBased: boolean; /** Enable experience-based recommendations */ experienceBased: boolean; }; /** Safety protocols */ safetyProtocols: { /** Require emergency contacts */ requireEmergencyContacts: boolean; /** Generate safety checklists */ generateSafetyChecklists: boolean; /** Include weather alerts */ includeWeatherAlerts: boolean; }; }; } export interface SaaSExtensionConfig extends BaseExtensionConfig { id: 'saas'; domain: 'saas'; settings: { /** SaaS business models */ businessModels: ('freemium' | 'subscription' | 'usage_based' | 'enterprise' | 'marketplace')[]; /** Product categories */ productCategories: ('productivity' | 'communication' | 'analytics' | 'marketing' | 'development' | 'finance')[]; /** User tiers */ userTiers: ('free' | 'basic' | 'pro' | 'enterprise')[]; /** Feature flags and rollout strategies */ featureFlags: { enabled: boolean; rolloutStrategies: ('percentage' | 'user_based' | 'geography' | 'plan_based')[]; }; /** Multi-tenancy settings */ multiTenancy: { enabled: boolean; isolationLevel: 'shared' | 'dedicated' | 'hybrid'; tenantTypes: ('individual' | 'team' | 'organization' | 'enterprise')[]; }; }; businessLogic: { /** Subscription management */ subscriptions: { /** Billing cycles */ billingCycles: ('monthly' | 'quarterly' | 'annual')[]; /** Trial periods */ trialPeriods: number[]; /** Usage limits per tier */ usageLimits: Record<string, { api_calls?: number; storage?: number; users?: number; }>; }; /** User onboarding flows */ onboarding: { /** Multi-step onboarding */ multiStep: boolean; /** Progressive profiling */ progressiveProfiling: boolean; /** Feature tours */ featureTours: boolean; }; /** Analytics and tracking */ analytics: { /** User behavior tracking */ userBehavior: boolean; /** Feature usage analytics */ featureUsage: boolean; /** Conversion tracking */ conversionTracking: boolean; }; }; } export interface ECommerceExtensionConfig extends BaseExtensionConfig { id: 'ecommerce'; domain: 'ecommerce'; settings: { /** Product categories */ productCategories: ('electronics' | 'clothing' | 'home' | 'books' | 'sports' | 'beauty' | 'automotive')[]; /** Payment methods */ paymentMethods: ('credit_card' | 'paypal' | 'stripe' | 'apple_pay' | 'google_pay' | 'crypto')[]; /** Shipping methods */ shippingMethods: ('standard' | 'express' | 'overnight' | 'pickup' | 'digital')[]; /** Currency support */ currencies: ('USD' | 'EUR' | 'GBP' | 'CAD' | 'AUD' | 'JPY')[]; /** Inventory management */ inventory: { /** Track inventory levels */ trackLevels: boolean; /** Enable backorders */ enableBackorders: boolean; /** Low stock alerts */ lowStockAlerts: boolean; }; }; businessLogic: { /** Pricing strategies */ pricing: { /** Dynamic pricing */ dynamicPricing: boolean; /** Volume discounts */ volumeDiscounts: boolean; /** Seasonal pricing */ seasonalPricing: boolean; /** A/B testing */ abTesting: boolean; }; /** Order management */ orders: { /** Order statuses */ statuses: ('pending' | 'processing' | 'shipped' | 'delivered' | 'cancelled' | 'returned')[]; /** Auto-fulfillment */ autoFulfillment: boolean; /** Return policies */ returnPolicies: { /** Return window in days */ returnWindow: number; /** Restocking fees */ restockingFees: boolean; }; }; /** Customer management */ customers: { /** Loyalty programs */ loyaltyPrograms: boolean; /** Customer segments */ segments: ('new' | 'regular' | 'vip' | 'inactive')[]; /** Personalization */ personalization: boolean; }; }; } export interface SocialExtensionConfig extends BaseExtensionConfig { id: 'social'; domain: 'social'; settings: { /** Social platform types */ platformTypes: ('general' | 'professional' | 'creative' | 'niche' | 'messaging')[]; /** Content types */ contentTypes: ('text' | 'image' | 'video' | 'audio' | 'link' | 'poll' | 'event')[]; /** Privacy levels */ privacyLevels: ('public' | 'friends' | 'private' | 'custom')[]; /** Interaction types */ interactionTypes: ('like' | 'comment' | 'share' | 'follow' | 'mention' | 'react')[]; /** Community features */ communityFeatures: { /** Groups/communities */ groups: boolean; /** Events */ events: boolean; /** Messaging */ messaging: boolean; /** Live streaming */ liveStreaming: boolean; }; }; businessLogic: { /** Content moderation */ moderation: { /** Auto-moderation */ autoModeration: boolean; /** Community reporting */ communityReporting: boolean; /** Content filtering */ contentFiltering: boolean; }; /** Engagement algorithms */ engagement: { /** Feed algorithms */ feedAlgorithms: boolean; /** Trending detection */ trendingDetection: boolean; /** Recommendation engine */ recommendationEngine: boolean; }; /** Privacy and security */ privacy: { /** Data retention policies */ dataRetention: number; /** User blocking */ userBlocking: boolean; /** Content encryption */ contentEncryption: boolean; }; }; } /** * Outdoor-specific user archetype */ export interface OutdoorArchetype extends UserArchetype { domain: 'outdoor'; outdoorProfile: { /** Experience level */ experienceLevel: 'beginner' | 'intermediate' | 'advanced' | 'expert'; /** Preferred activities */ preferredActivities: string[]; /** Gear ownership level */ gearOwnership: 'minimal' | 'moderate' | 'extensive' | 'professional'; /** Location preferences */ locationPreferences: string[]; /** Seasonal activity preferences */ seasonalPreferences: Record<string, string[]>; }; } /** * Extension validation configuration */ export interface ExtensionValidationConfig { /** Enable validation */ enabled: boolean; /** Validation rules */ rules: { /** Require all mandatory fields */ requireMandatoryFields: boolean; /** Validate compatibility versions */ validateCompatibility: boolean; /** Check dependency resolution */ checkDependencies: boolean; /** Validate business logic constraints */ validateBusinessLogic: boolean; }; /** Custom validation functions */ customValidators?: Array<(config: any) => { valid: boolean; errors: string[]; }>; } /** * Extension template configuration */ export interface ExtensionTemplate { /** Template identifier */ id: string; /** Template name */ name: string; /** Template description */ description: string; /** Domain this template applies to */ domain: ContentDomainType; /** Template configuration */ template: Partial<BaseExtensionConfig>; /** Template variables */ variables?: Record<string, { type: 'string' | 'number' | 'boolean' | 'array' | 'object'; description: string; default?: any; required: boolean; }>; } /** * Main extensions configuration interface */ export interface ExtensionsConfig { /** Configuration metadata */ metadata: { /** Configuration version */ version: string; /** Last updated timestamp */ lastUpdated: Date; /** Configuration author */ author?: string; }; /** Global extension settings */ global: { /** Enable extension system */ enabled: boolean; /** Maximum number of active extensions */ maxActiveExtensions: number; /** Extension loading timeout in ms */ loadingTimeout: number; /** Enable extension hot-reloading */ hotReload: boolean; }; /** Validation configuration */ validation: ExtensionValidationConfig; /** Available extension templates */ templates: ExtensionTemplate[]; /** Active extensions configuration */ extensions: { /** Outdoor domain extension */ outdoor?: OutdoorExtensionConfig; /** SaaS domain extension */ saas?: SaaSExtensionConfig; /** E-commerce domain extension */ ecommerce?: ECommerceExtensionConfig; /** Social domain extension */ social?: SocialExtensionConfig; /** Custom extensions */ [key: string]: BaseExtensionConfig | undefined; }; /** Extension loading order */ loadOrder: string[]; /** Extension conflict resolution */ conflictResolution: { /** Strategy for resolving conflicts */ strategy: 'first_wins' | 'last_wins' | 'merge' | 'manual'; /** Manual resolution rules */ manualRules?: Record<string, any>; }; } /** * Extension configuration manager result */ export interface ExtensionConfigResult { /** Whether the operation was successful */ success: boolean; /** Result data */ data?: any; /** Error messages */ errors: string[]; /** Warning messages */ warnings: string[]; /** Applied configuration */ appliedConfig?: ExtensionsConfig; } /** * Extension configuration manager */ export declare class ExtensionConfigManager { private config; constructor(config: ExtensionsConfig); /** * Validate extension configuration */ validate(): ExtensionConfigResult; /** * Get extension by ID */ getExtension(id: string): BaseExtensionConfig | undefined; /** * Enable extension */ enableExtension(id: string): ExtensionConfigResult; /** * Disable extension */ disableExtension(id: string): ExtensionConfigResult; /** * Get enabled extensions */ getEnabledExtensions(): BaseExtensionConfig[]; /** * Get extensions by domain */ getExtensionsByDomain(domain: ContentDomainType): BaseExtensionConfig[]; /** * Create extension from template */ createFromTemplate(templateId: string, variables?: Record<string, any>): ExtensionConfigResult; /** * Simple variable substitution helper */ private substituteVariable; /** * Export configuration */ exportConfig(): ExtensionsConfig; } /** * Create default extensions configuration */ export declare function createDefaultExtensionsConfig(): ExtensionsConfig; /** * Extension configuration utilities */ export declare const ExtensionConfigUtils: { /** * Merge extension configurations */ mergeConfigs(base: ExtensionsConfig, override: Partial<ExtensionsConfig>): ExtensionsConfig; /** * Validate extension ID format */ validateExtensionId(id: string): boolean; /** * Check version compatibility */ isVersionCompatible(requiredVersion: string, currentVersion: string): boolean; }; export default ExtensionConfigManager; //# sourceMappingURL=extension-config.d.ts.map