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
JavaScript
;
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