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