Files
scoreodonto.com/backend/transform.js

47 lines
1.9 KiB
JavaScript

#!/usr/bin/env node
/**
* transform.js
* Converte server.js de sintaxe MySQL/adapter para PostgreSQL nativo (pg).
* Uso: node transform.js > server_new.js
*/
import { readFileSync, writeFileSync } from 'fs';
let code = readFileSync('./server.js', 'utf8');
// 1. Remove the dead initTables function (MySQL DDL, never called)
code = code.replace(/\/\/ Initialization: Create tables if not exist[\s\S]*?^\/\/ initTables\(\); removed from here\s*/m, '');
// 2. Fix all simple ? placeholders in pool.query calls
// Strategy: for each pool.query or client.query call, replace ? sequentially with $1, $2...
function fixPlaceholders(sql) {
let i = 0;
return sql.replace(/\?/g, () => `$${++i}`);
}
// 3. Replace INSERT INTO table SET ? with helper call marker
// 4. Replace UPDATE table SET ? WHERE id = ? with helper call marker
// These need manual per-call replacement, done below
// Fix simple queries with ? -> $n (for strings not containing SET ?)
code = code.replace(/pool\.query\('([^']*?)'\s*,\s*\[([^\]]+)\]\)/g, (match, sql, params) => {
if (sql.includes('SET ?') || sql.includes('SET?')) return match; // skip complex
const fixed = fixPlaceholders(sql);
return `pool.query('${fixed}', [${params}])`;
});
code = code.replace(/pool\.query\(`([\s\S]*?)`\s*,\s*\[([^\]]+)\]\)/g, (match, sql, params) => {
if (sql.includes('SET ?') || sql.includes('ON DUPLICATE')) return match;
const fixed = fixPlaceholders(sql);
return `pool.query(\`${fixed}\`, [${params}])`;
});
// Fix client.query inside withTransaction
code = code.replace(/client\.query\('([^']*?)'\s*,\s*\[([^\]]+)\]\)/g, (match, sql, params) => {
if (sql.includes('SET ?')) return match;
const fixed = fixPlaceholders(sql);
return `client.query('${fixed}', [${params}])`;
});
writeFileSync('./server_transformed.js', code, 'utf8');
console.log('Done. Check server_transformed.js');