UNPKG

supa-seed

Version:

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

146 lines 5.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadConfiguration = loadConfiguration; exports.validateConfiguration = validateConfiguration; const dotenv_1 = require("dotenv"); const fs_1 = require("fs"); const path_1 = require("path"); const logger_1 = require("./core/utils/logger"); function loadConfiguration(configPath) { // Always try to load .env file first try { (0, dotenv_1.config)(); logger_1.Logger.debug('Loaded .env file'); } catch (error) { logger_1.Logger.debug('No .env file found or failed to load'); } // Try to load config file if (configPath) { try { const resolvedPath = (0, path_1.resolve)(configPath); if (!(0, fs_1.existsSync)(resolvedPath)) { logger_1.Logger.warn(`Configuration file not found: ${resolvedPath}`); return loadFromEnvironment(); } const configContent = (0, fs_1.readFileSync)(resolvedPath, 'utf8'); const flexConfig = JSON.parse(configContent); logger_1.Logger.debug('Loaded configuration from file', { path: resolvedPath }); // Validate essential fields if (!flexConfig.supabaseUrl || !flexConfig.supabaseServiceKey) { logger_1.Logger.warn('Config file missing essential Supabase credentials'); return loadFromEnvironment(); } // Convert flexible config to legacy SeedConfig const config = { supabaseUrl: flexConfig.supabaseUrl, supabaseServiceKey: flexConfig.supabaseServiceKey, environment: flexConfig.environment, userCount: flexConfig.userCount, setupsPerUser: flexConfig.setupsPerUser, imagesPerSetup: flexConfig.imagesPerSetup, enableRealImages: flexConfig.enableRealImages, seed: flexConfig.seed, emailDomain: flexConfig.emailDomain, domain: flexConfig.domain, createStandardTestEmails: flexConfig.createStandardTestEmails, }; return { config, source: 'config-file', flexConfig }; } catch (error) { logger_1.Logger.error('Failed to load configuration file', error); logger_1.Logger.info('Falling back to environment variables'); return loadFromEnvironment(); } } return loadFromEnvironment(); } function loadFromEnvironment() { const supabaseUrl = process.env.SUPABASE_URL; const supabaseServiceKey = process.env.SUPABASE_SERVICE_ROLE_KEY; if (!supabaseUrl || !supabaseServiceKey) { logger_1.Logger.error('Missing required environment variables: SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY'); logger_1.Logger.info('Available options:'); logger_1.Logger.info('1. Set environment variables in .env file'); logger_1.Logger.info('2. Create supa-seed.config.json with "supa-seed init"'); logger_1.Logger.info('3. Pass --url and --key options to commands'); // Return default config that will fail validation const config = { supabaseUrl: supabaseUrl || 'missing-url', supabaseServiceKey: supabaseServiceKey || 'missing-key', environment: 'local', userCount: 10, setupsPerUser: 3, imagesPerSetup: 3, enableRealImages: false, seed: 'supa-seed-2025', emailDomain: 'supaseed.test', domain: undefined, createStandardTestEmails: false, }; return { config, source: 'defaults' }; } logger_1.Logger.debug('Loaded configuration from environment variables'); const config = { supabaseUrl, supabaseServiceKey, environment: process.env.NODE_ENV || 'local', userCount: parseInt(process.env.SUPA_SEED_USER_COUNT || '10'), setupsPerUser: parseInt(process.env.SUPA_SEED_SETUPS_PER_USER || '3'), imagesPerSetup: parseInt(process.env.SUPA_SEED_IMAGES_PER_SETUP || '3'), enableRealImages: process.env.SUPA_SEED_ENABLE_REAL_IMAGES === 'true', seed: process.env.SUPA_SEED_SEED_VALUE || 'supa-seed-2025', emailDomain: process.env.SUPA_SEED_EMAIL_DOMAIN || 'supaseed.test', domain: process.env.SUPA_SEED_DOMAIN, createStandardTestEmails: process.env.SUPA_SEED_CREATE_STANDARD_EMAILS === 'true', }; return { config, source: 'environment' }; } function validateConfiguration(config) { const errors = []; // Check required fields if (!config.supabaseUrl || config.supabaseUrl === 'missing-url') { errors.push('supabaseUrl is required'); } if (!config.supabaseServiceKey || config.supabaseServiceKey === 'missing-key') { errors.push('supabaseServiceKey is required'); } // Validate URL format if (config.supabaseUrl && config.supabaseUrl !== 'missing-url') { try { new URL(config.supabaseUrl); } catch { errors.push('supabaseUrl must be a valid URL'); } } // Validate numeric fields if (config.userCount <= 0) { errors.push('userCount must be greater than 0'); } if (config.setupsPerUser <= 0) { errors.push('setupsPerUser must be greater than 0'); } if (config.imagesPerSetup < 0) { errors.push('imagesPerSetup must be 0 or greater'); } // Validate environment if (!['local', 'staging', 'production'].includes(config.environment)) { errors.push('environment must be one of: local, staging, production'); } return { valid: errors.length === 0, errors }; } //# sourceMappingURL=config.js.map