@surv-co/prisma-typeorm-db-utils
Version:
Transform Prisma schemas to TypeORM entities with NestJS integration and fast pg-mem testing
84 lines • 4.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateEntities = generateEntities;
const fs_1 = require("fs");
const path_1 = require("path");
const transformers_1 = require("../src/transformers");
async function generateEntities() {
console.log('🚀 Starting entity generation from extensive Prisma schema...');
try {
// Read the extensive Prisma schema
const schemaPath = (0, path_1.join)(__dirname, 'schema.prisma');
const schemaContent = (0, fs_1.readFileSync)(schemaPath, 'utf-8');
console.log('📖 Read extensive Prisma schema file for integration testing');
// Create transformers
const schemaTransformer = (0, transformers_1.createPrismaSchemaTransformer)();
const entityTransformer = (0, transformers_1.createTypeORMEntityTransformer)();
// Step 1: Transform Prisma schema to table configs
console.log('🔄 Step 1: Transforming Prisma schema to table configs...');
const tableConfigsResult = await schemaTransformer.transformPrismaSchema(schemaContent)();
if (tableConfigsResult._tag === 'Left') {
console.error('❌ Failed to transform Prisma schema:', tableConfigsResult.left.message);
return;
}
const tableConfigs = tableConfigsResult.right;
console.log(`✅ Successfully transformed schema to ${Object.keys(tableConfigs).length} table configs`);
// Log table names for verification
console.log('📋 Tables found:');
Object.keys(tableConfigs).forEach(tableName => {
console.log(` - ${tableName}`);
});
// Step 2: Transform table configs to TypeORM entities
console.log('🔄 Step 2: Transforming table configs to TypeORM entities...');
const entitiesResult = await entityTransformer.transform(tableConfigs)();
if (entitiesResult._tag === 'Left') {
console.error('❌ Failed to generate TypeORM entities:', entitiesResult.left.message);
return;
}
const entities = entitiesResult.right;
console.log(`✅ Successfully generated ${entities.length} TypeORM entities`);
// Step 3: Write entities to files
console.log('💾 Step 3: Writing entities to files...');
const outputDir = (0, path_1.join)(__dirname, 'generated-entities');
// Create output directory if it doesn't exist
try {
(0, fs_1.mkdirSync)(outputDir, { recursive: true });
}
catch (error) {
// Directory might already exist, that's fine
}
// Write each entity to a separate file
entities.forEach((entityCode, index) => {
// Extract class name from the entity code
const classNameMatch = entityCode.match(/export class (\w+)/);
const className = classNameMatch ? classNameMatch[1] : `Entity${index + 1}`;
const fileName = `${className}.ts`;
const filePath = (0, path_1.join)(outputDir, fileName);
(0, fs_1.writeFileSync)(filePath, entityCode, 'utf-8');
console.log(` 📄 Wrote ${fileName}`);
});
// Step 4: Create an index file that exports all entities
console.log('📝 Step 4: Creating index file...');
const indexContent = entities
.map((entityCode, index) => {
const classNameMatch = entityCode.match(/export class (\w+)/);
const className = classNameMatch ? classNameMatch[1] : `Entity${index + 1}`;
return `export { ${className} } from './${className}';`;
})
.join('\n');
const indexPath = (0, path_1.join)(outputDir, 'index.ts');
(0, fs_1.writeFileSync)(indexPath, indexContent + '\n', 'utf-8');
console.log(' 📄 Wrote index.ts');
console.log('🎉 Entity generation completed successfully!');
console.log(`📁 Output directory: ${outputDir}`);
console.log(`📊 Generated ${entities.length} entities`);
}
catch (error) {
console.error('💥 Unexpected error during entity generation:', error);
}
}
// Run the generation
if (require.main === module) {
generateEntities().catch(console.error);
}
//# sourceMappingURL=generate-entities.js.map