UNPKG

supa-seed

Version:

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

94 lines 3.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseSeeder = void 0; const types_1 = require("../../../core/types/types"); const logger_1 = require("../../../core/utils/logger"); class BaseSeeder extends types_1.SeedModule { /** * Check if a table exists in the database */ async tableExists(tableName) { try { const { error } = await this.context.client .from(tableName) .select('*') .limit(1); if (error) { // PGRST116 = table doesn't exist if (error.code === 'PGRST116' || error.message?.includes('relation') && error.message?.includes('does not exist')) { return false; } // Other errors might mean the table exists but we lack permissions logger_1.Logger.debug(`Table check for ${tableName} returned error: ${error.message}`); } return true; } catch (error) { logger_1.Logger.debug(`Table existence check failed for ${tableName}:`, error); return false; } } /** * Check if a field exists in a table */ async fieldExists(tableName, fieldName) { try { const { data, error } = await this.context.client .from(tableName) .select(fieldName) .limit(1); if (error) { // Column doesn't exist error if (error.message?.includes('column') && error.message?.includes('does not exist')) { return false; } } return true; } catch (error) { logger_1.Logger.debug(`Field existence check failed for ${tableName}.${fieldName}:`, error); return false; } } /** * Run a seeding operation with graceful error handling */ async seedWithFallback(operation, tableName, skipMessage) { try { // First check if table exists const exists = await this.tableExists(tableName); if (!exists) { logger_1.Logger.skip(`${tableName} table not found. ${skipMessage || 'Skipping...'}`); return null; } // Run the operation return await operation(); } catch (error) { if (error.code === 'PGRST116' || error.message?.includes('relation') && error.message?.includes('does not exist')) { logger_1.Logger.skip(`${tableName} table not found. ${skipMessage || 'Skipping...'}`); } else { logger_1.Logger.warn(`Error seeding ${tableName}: ${error.message}`); logger_1.Logger.debug('Error details:', error); } return null; } } /** * Get field name with fallbacks */ getFieldWithFallback(fieldMapping, primaryField, fallbacks) { if (fieldMapping[primaryField]) { return fieldMapping[primaryField]; } for (const fallback of fallbacks) { if (fieldMapping[fallback]) { return fieldMapping[fallback]; } } return primaryField; } } exports.BaseSeeder = BaseSeeder; //# sourceMappingURL=base-seeder.js.map