UNPKG

@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
"use strict"; 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