UNPKG

supa-seed

Version:

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

421 lines 18 kB
"use strict"; /** * Domain-Specific Pattern Definitions for Epic 2: Smart Platform Detection Engine * Comprehensive pattern definitions for detecting content domains (outdoor/SaaS/e-commerce/social) * Part of Task 2.2.1: Analyze domain detection patterns and create domain-specific pattern definitions */ Object.defineProperty(exports, "__esModule", { value: true }); exports.DOMAIN_CONFIDENCE_THRESHOLDS = exports.DOMAIN_CONFIDENCE_WEIGHTS = exports.ALL_DOMAIN_PATTERNS = exports.GENERIC_DOMAIN_PATTERNS = exports.SOCIAL_DOMAIN_PATTERNS = exports.ECOMMERCE_DOMAIN_PATTERNS = exports.SAAS_DOMAIN_PATTERNS = exports.OUTDOOR_DOMAIN_PATTERNS = void 0; exports.getPatternsForDomain = getPatternsForDomain; exports.getHighPriorityPatterns = getHighPriorityPatterns; exports.getExclusivePatterns = getExclusivePatterns; /** * Outdoor Domain Patterns * Based on adventure gear, setups, trips, and outdoor activities */ exports.OUTDOOR_DOMAIN_PATTERNS = [ // Core outdoor patterns { id: 'outdoor_gear_core', name: 'Outdoor Gear Core Pattern', description: 'Core outdoor gear management with setups and templates', indicatesDomain: 'outdoor', confidenceWeight: 0.95, tablePatterns: ['gear_items', 'setups', 'base_templates', 'setup_gear_items'], columnPatterns: ['make', 'model', 'weight', 'dimensions', 'specifications', 'type', 'priority'], relationshipPatterns: [ { fromTable: 'setups', toTable: 'gear_items', type: 'many_to_many' }, { fromTable: 'setups', toTable: 'base_templates', type: 'many_to_many' } ], businessLogicPatterns: ['public_setup', 'gear_priority', 'affiliate_link'], minimumMatches: 3, exclusive: true, priority: 10 }, { id: 'outdoor_adventure_activities', name: 'Adventure Activities Pattern', description: 'Adventure-focused activities and trip planning', indicatesDomain: 'outdoor', confidenceWeight: 0.85, tablePatterns: ['trips', 'adventures', 'activities', 'expeditions', 'journeys'], columnPatterns: ['adventure_type', 'difficulty', 'duration', 'location', 'terrain'], relationshipPatterns: [ { fromTable: 'trips', toTable: 'gear_items', type: 'many_to_many' }, { fromTable: 'adventures', toTable: 'setups', type: 'one_to_many' } ], businessLogicPatterns: ['trip_planning', 'adventure_log', 'location_tracking'], minimumMatches: 2, exclusive: true, priority: 9 }, { id: 'outdoor_equipment_categories', name: 'Outdoor Equipment Categories', description: 'Outdoor-specific equipment categorization', indicatesDomain: 'outdoor', confidenceWeight: 0.75, tablePatterns: ['categories', 'gear_categories', 'equipment_types'], columnPatterns: ['category_type', 'outdoor_category', 'gear_type', 'equipment_class'], relationshipPatterns: [ { fromTable: 'categories', toTable: 'gear_items', type: 'one_to_many' } ], businessLogicPatterns: ['category_hierarchy', 'gear_classification'], minimumMatches: 1, exclusive: false, priority: 7 }, { id: 'outdoor_vehicles_shelter', name: 'Outdoor Vehicles and Shelter', description: 'Outdoor-specific vehicle and shelter equipment', indicatesDomain: 'outdoor', confidenceWeight: 0.80, tablePatterns: ['vehicles', 'shelters', 'backpacks', 'camping_gear'], columnPatterns: ['vehicle_type', 'shelter_type', 'capacity', 'season_rating', 'backpack_volume'], relationshipPatterns: [], businessLogicPatterns: ['vehicle_setup', 'shelter_config', 'load_management'], minimumMatches: 1, exclusive: true, priority: 8 } ]; /** * SaaS Domain Patterns * Based on subscriptions, billing, teams, and productivity tools */ exports.SAAS_DOMAIN_PATTERNS = [ // Core SaaS business patterns { id: 'saas_subscription_core', name: 'SaaS Subscription Core Pattern', description: 'Core subscription and billing management', indicatesDomain: 'saas', confidenceWeight: 0.95, tablePatterns: ['subscriptions', 'billing', 'plans', 'pricing', 'billing_customers'], columnPatterns: ['plan_id', 'subscription_status', 'billing_cycle', 'mrr', 'trial_end', 'next_billing'], relationshipPatterns: [ { fromTable: 'subscriptions', toTable: 'plans', type: 'many_to_many' }, { fromTable: 'subscriptions', toTable: 'billing', type: 'one_to_many' } ], businessLogicPatterns: ['subscription_lifecycle', 'billing_automation', 'plan_changes'], minimumMatches: 3, exclusive: true, priority: 10 }, { id: 'saas_team_workspace', name: 'SaaS Team Workspace Pattern', description: 'Team collaboration and workspace management', indicatesDomain: 'saas', confidenceWeight: 0.90, tablePatterns: ['workspaces', 'teams', 'organizations', 'members', 'memberships'], columnPatterns: ['workspace_id', 'team_id', 'member_role', 'permission_level', 'workspace_settings'], relationshipPatterns: [ { fromTable: 'organizations', toTable: 'workspaces', type: 'one_to_many' }, { fromTable: 'workspaces', toTable: 'members', type: 'many_to_many' } ], businessLogicPatterns: ['team_permissions', 'workspace_isolation', 'member_management'], minimumMatches: 2, exclusive: false, priority: 9 }, { id: 'saas_feature_usage', name: 'SaaS Feature Usage Pattern', description: 'Feature tracking and usage analytics', indicatesDomain: 'saas', confidenceWeight: 0.80, tablePatterns: ['features', 'usage', 'analytics', 'metrics', 'quotas', 'limits'], columnPatterns: ['usage_count', 'feature_enabled', 'quota_limit', 'usage_period', 'feature_flag'], relationshipPatterns: [ { fromTable: 'usage', toTable: 'features', type: 'many_to_many' }, { fromTable: 'plans', toTable: 'features', type: 'many_to_many' } ], businessLogicPatterns: ['usage_tracking', 'quota_enforcement', 'feature_gating'], minimumMatches: 2, exclusive: false, priority: 8 }, { id: 'saas_productivity_tools', name: 'SaaS Productivity Tools', description: 'Productivity and collaboration tools', indicatesDomain: 'saas', confidenceWeight: 0.75, tablePatterns: ['projects', 'tasks', 'workflows', 'automation', 'integrations'], columnPatterns: ['project_status', 'task_priority', 'workflow_state', 'automation_trigger'], relationshipPatterns: [ { fromTable: 'projects', toTable: 'tasks', type: 'one_to_many' }, { fromTable: 'workflows', toTable: 'automation', type: 'one_to_many' } ], businessLogicPatterns: ['project_management', 'task_automation', 'workflow_execution'], minimumMatches: 1, exclusive: false, priority: 7 } ]; /** * E-commerce Domain Patterns * Based on products, orders, inventory, and marketplace features */ exports.ECOMMERCE_DOMAIN_PATTERNS = [ // Core e-commerce patterns { id: 'ecommerce_product_core', name: 'E-commerce Product Core Pattern', description: 'Core product catalog and inventory management', indicatesDomain: 'ecommerce', confidenceWeight: 0.95, tablePatterns: ['products', 'inventory', 'categories', 'variants', 'product_variants'], columnPatterns: ['sku', 'price', 'inventory_count', 'stock_level', 'variant_id', 'category_id'], relationshipPatterns: [ { fromTable: 'products', toTable: 'categories', type: 'many_to_many' }, { fromTable: 'products', toTable: 'variants', type: 'one_to_many' } ], businessLogicPatterns: ['inventory_management', 'price_calculation', 'variant_selection'], minimumMatches: 3, exclusive: true, priority: 10 }, { id: 'ecommerce_transaction_core', name: 'E-commerce Transaction Core Pattern', description: 'Order processing and payment handling', indicatesDomain: 'ecommerce', confidenceWeight: 0.90, tablePatterns: ['orders', 'cart', 'payments', 'transactions', 'checkouts'], columnPatterns: ['order_status', 'payment_method', 'total_amount', 'cart_total', 'transaction_id'], relationshipPatterns: [ { fromTable: 'orders', toTable: 'products', type: 'many_to_many' }, { fromTable: 'orders', toTable: 'payments', type: 'one_to_many' } ], businessLogicPatterns: ['order_processing', 'payment_handling', 'cart_management'], minimumMatches: 2, exclusive: true, priority: 9 }, { id: 'ecommerce_marketplace', name: 'E-commerce Marketplace Pattern', description: 'Multi-vendor marketplace features', indicatesDomain: 'ecommerce', confidenceWeight: 0.85, tablePatterns: ['vendors', 'sellers', 'stores', 'merchants', 'marketplace'], columnPatterns: ['vendor_id', 'seller_id', 'commission_rate', 'payout_status', 'store_settings'], relationshipPatterns: [ { fromTable: 'vendors', toTable: 'products', type: 'one_to_many' }, { fromTable: 'stores', toTable: 'orders', type: 'one_to_many' } ], businessLogicPatterns: ['vendor_management', 'commission_calculation', 'marketplace_rules'], minimumMatches: 1, exclusive: true, priority: 8 }, { id: 'ecommerce_shipping_fulfillment', name: 'E-commerce Shipping and Fulfillment', description: 'Shipping and order fulfillment', indicatesDomain: 'ecommerce', confidenceWeight: 0.80, tablePatterns: ['shipping', 'fulfillment', 'warehouses', 'carriers', 'deliveries'], columnPatterns: ['shipping_address', 'tracking_number', 'carrier_name', 'delivery_date', 'fulfillment_status'], relationshipPatterns: [ { fromTable: 'orders', toTable: 'shipping', type: 'one_to_one' }, { fromTable: 'warehouses', toTable: 'inventory', type: 'one_to_many' } ], businessLogicPatterns: ['shipping_calculation', 'fulfillment_workflow', 'tracking_updates'], minimumMatches: 1, exclusive: false, priority: 7 } ]; /** * Social Domain Patterns * Based on social networking, engagement, and user-generated content */ exports.SOCIAL_DOMAIN_PATTERNS = [ // Core social networking patterns { id: 'social_engagement_core', name: 'Social Engagement Core Pattern', description: 'Core social engagement features', indicatesDomain: 'social', confidenceWeight: 0.95, tablePatterns: ['posts', 'likes', 'comments', 'shares', 'reactions'], columnPatterns: ['like_count', 'comment_count', 'share_count', 'reaction_type', 'engagement_score'], relationshipPatterns: [ { fromTable: 'posts', toTable: 'likes', type: 'one_to_many' }, { fromTable: 'posts', toTable: 'comments', type: 'one_to_many' } ], businessLogicPatterns: ['engagement_tracking', 'reaction_handling', 'content_scoring'], minimumMatches: 3, exclusive: true, priority: 10 }, { id: 'social_network_graph', name: 'Social Network Graph Pattern', description: 'Social connections and relationships', indicatesDomain: 'social', confidenceWeight: 0.90, tablePatterns: ['follows', 'followers', 'friends', 'connections', 'friendships'], columnPatterns: ['follower_id', 'following_id', 'friend_status', 'connection_type', 'relationship_status'], relationshipPatterns: [ { fromTable: 'follows', toTable: 'users', type: 'many_to_many' }, { fromTable: 'friendships', toTable: 'users', type: 'many_to_many' } ], businessLogicPatterns: ['follow_system', 'friend_requests', 'connection_management'], minimumMatches: 1, exclusive: true, priority: 9 }, { id: 'social_content_creation', name: 'Social Content Creation Pattern', description: 'User-generated content and media sharing', indicatesDomain: 'social', confidenceWeight: 0.85, tablePatterns: ['media', 'photos', 'videos', 'stories', 'timeline', 'feeds'], columnPatterns: ['media_url', 'media_type', 'caption', 'hashtags', 'mentions', 'visibility'], relationshipPatterns: [ { fromTable: 'posts', toTable: 'media', type: 'one_to_many' }, { fromTable: 'stories', toTable: 'media', type: 'one_to_one' } ], businessLogicPatterns: ['media_processing', 'content_moderation', 'visibility_control'], minimumMatches: 2, exclusive: false, priority: 8 }, { id: 'social_activity_feed', name: 'Social Activity Feed Pattern', description: 'Activity feeds and notifications', indicatesDomain: 'social', confidenceWeight: 0.80, tablePatterns: ['feeds', 'notifications', 'activities', 'timeline', 'news_feed'], columnPatterns: ['activity_type', 'notification_type', 'read_status', 'feed_rank', 'activity_timestamp'], relationshipPatterns: [ { fromTable: 'activities', toTable: 'users', type: 'many_to_many' }, { fromTable: 'notifications', toTable: 'activities', type: 'many_to_many' } ], businessLogicPatterns: ['feed_generation', 'notification_delivery', 'activity_ranking'], minimumMatches: 1, exclusive: false, priority: 7 } ]; /** * Generic Domain Patterns * Fallback patterns for platforms that don't match specific domains */ exports.GENERIC_DOMAIN_PATTERNS = [ { id: 'generic_user_content', name: 'Generic User Content Pattern', description: 'Basic user-generated content patterns', indicatesDomain: 'generic', confidenceWeight: 0.50, tablePatterns: ['users', 'content', 'posts', 'items', 'entries'], columnPatterns: ['title', 'description', 'content', 'body', 'text', 'data'], relationshipPatterns: [ { fromTable: 'content', toTable: 'users', type: 'many_to_many' } ], businessLogicPatterns: ['content_management', 'user_permissions'], minimumMatches: 1, exclusive: false, priority: 3 }, { id: 'generic_categorization', name: 'Generic Categorization Pattern', description: 'Basic categorization and tagging', indicatesDomain: 'generic', confidenceWeight: 0.40, tablePatterns: ['categories', 'tags', 'classifications', 'types'], columnPatterns: ['category', 'tag', 'type', 'classification', 'group'], relationshipPatterns: [ { fromTable: 'content', toTable: 'categories', type: 'many_to_many' } ], businessLogicPatterns: ['categorization', 'tagging_system'], minimumMatches: 1, exclusive: false, priority: 2 }, { id: 'generic_settings_config', name: 'Generic Settings and Configuration', description: 'Basic settings and configuration management', indicatesDomain: 'generic', confidenceWeight: 0.30, tablePatterns: ['settings', 'config', 'preferences', 'options'], columnPatterns: ['setting_key', 'setting_value', 'config_name', 'preference', 'option'], relationshipPatterns: [], businessLogicPatterns: ['settings_management', 'configuration'], minimumMatches: 1, exclusive: false, priority: 1 } ]; /** * All domain patterns combined */ exports.ALL_DOMAIN_PATTERNS = [ ...exports.OUTDOOR_DOMAIN_PATTERNS, ...exports.SAAS_DOMAIN_PATTERNS, ...exports.ECOMMERCE_DOMAIN_PATTERNS, ...exports.SOCIAL_DOMAIN_PATTERNS, ...exports.GENERIC_DOMAIN_PATTERNS ]; /** * Get patterns for a specific domain */ function getPatternsForDomain(domain) { switch (domain) { case 'outdoor': return exports.OUTDOOR_DOMAIN_PATTERNS; case 'saas': return exports.SAAS_DOMAIN_PATTERNS; case 'ecommerce': return exports.ECOMMERCE_DOMAIN_PATTERNS; case 'social': return exports.SOCIAL_DOMAIN_PATTERNS; case 'generic': return exports.GENERIC_DOMAIN_PATTERNS; default: return exports.GENERIC_DOMAIN_PATTERNS; } } /** * Get high-priority patterns for quick detection */ function getHighPriorityPatterns() { return exports.ALL_DOMAIN_PATTERNS .filter(pattern => pattern.priority >= 8) .sort((a, b) => b.priority - a.priority); } /** * Get exclusive patterns that strongly indicate specific domains */ function getExclusivePatterns() { return exports.ALL_DOMAIN_PATTERNS.filter(pattern => pattern.exclusive); } /** * Domain confidence weights for scoring */ exports.DOMAIN_CONFIDENCE_WEIGHTS = { tablePatterns: 0.4, // Direct table name matches columnPatterns: 0.25, // Domain-specific columns relationshipPatterns: 0.2, // Domain-specific relationships businessLogic: 0.15 // Domain-specific constraints/functions }; /** * Confidence thresholds for domain classification */ exports.DOMAIN_CONFIDENCE_THRESHOLDS = { definitive: 0.90, // >90% confidence for definitive classification strong: 0.70, // >70% confidence for strong classification moderate: 0.50, // >50% minimum for consideration weak: 0.30 // <30% insufficient for classification }; //# sourceMappingURL=domain-patterns.js.map