first
This commit is contained in:
262
final-structure-fix.js
Normal file
262
final-structure-fix.js
Normal file
@@ -0,0 +1,262 @@
|
||||
/**
|
||||
* @fileoverview Final structure fix for endpoints.js
|
||||
* Fixes all remaining syntax and structure issues
|
||||
*/
|
||||
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
|
||||
/**
|
||||
* Final comprehensive structure fix
|
||||
*/
|
||||
function finalStructureFix() {
|
||||
try {
|
||||
console.log('=== FINAL STRUCTURE FIX FOR ENDPOINTS.JS ===');
|
||||
console.log('');
|
||||
|
||||
const endpointsPath = path.join(process.cwd(), 'src/config/endpoints.js');
|
||||
let content = fs.readFileSync(endpointsPath, 'utf8');
|
||||
|
||||
console.log('📁 Reading endpoints.js...');
|
||||
console.log(`📊 Original file size: ${content.length} characters`);
|
||||
|
||||
// Create backup
|
||||
const backupPath = path.join(process.cwd(), `endpoints_final_backup_${Date.now()}.js`);
|
||||
fs.writeFileSync(backupPath, content);
|
||||
console.log(`💾 Backup created: ${backupPath}`);
|
||||
|
||||
// Apply comprehensive fixes
|
||||
console.log('🔧 Applying comprehensive structure fixes...');
|
||||
|
||||
// Fix 1: Multi-line descriptions
|
||||
console.log(' Fix 1: Multi-line descriptions...');
|
||||
content = fixMultiLineDescriptions(content);
|
||||
|
||||
// Fix 2: Missing commas in parameter definitions
|
||||
console.log(' Fix 2: Missing commas in parameter definitions...');
|
||||
content = fixMissingCommas(content);
|
||||
|
||||
// Fix 3: Malformed parameter objects
|
||||
console.log(' Fix 3: Malformed parameter objects...');
|
||||
content = fixMalformedParameterObjects(content);
|
||||
|
||||
// Fix 4: Excessive closing braces
|
||||
console.log(' Fix 4: Excessive closing braces...');
|
||||
content = fixExcessiveClosingBraces(content);
|
||||
|
||||
// Fix 5: Parameter block structure
|
||||
console.log(' Fix 5: Parameter block structure...');
|
||||
content = fixParameterBlockStructure(content);
|
||||
|
||||
// Write the fixed content
|
||||
fs.writeFileSync(endpointsPath, content);
|
||||
|
||||
console.log(`📊 Fixed file size: ${content.length} characters`);
|
||||
console.log('');
|
||||
console.log('✅ Final structure fix completed!');
|
||||
|
||||
return {
|
||||
backupPath: backupPath,
|
||||
success: true
|
||||
};
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Error in final structure fix:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix multi-line descriptions
|
||||
*/
|
||||
function fixMultiLineDescriptions(content) {
|
||||
// Fix descriptions that are split across multiple lines
|
||||
content = content.replace(
|
||||
/description:\s*\n\s*"([^"]*)"([^}]*)/g,
|
||||
'description: "$1"$2'
|
||||
);
|
||||
|
||||
// Fix descriptions with concatenation
|
||||
content = content.replace(
|
||||
/description:\s*\n\s*"([^"]*)"([^}]*)/g,
|
||||
'description: "$1"$2'
|
||||
);
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix missing commas in parameter definitions
|
||||
*/
|
||||
function fixMissingCommas(content) {
|
||||
// Fix parameter definitions missing commas
|
||||
content = content.replace(
|
||||
/(\w+:\s*\{\s*type:\s*"[^"]*",\s*required:\s*(?:true|false),\s*description:\s*"[^"]*"\s*\})\s*\n(\s*)(\w+:|"[^"]+":)/g,
|
||||
'$1,\n$2$3'
|
||||
);
|
||||
|
||||
// Fix parameter definitions with missing closing braces and commas
|
||||
content = content.replace(
|
||||
/(\w+:\s*\{\s*type:\s*"[^"]*",\s*required:\s*(?:true|false),\s*description:\s*"[^"]*"\s*)\}\s*\n(\s*)(\w+:|"[^"]+":)/g,
|
||||
'$1 },\n$2$3'
|
||||
);
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix malformed parameter objects
|
||||
*/
|
||||
function fixMalformedParameterObjects(content) {
|
||||
// Fix parameter objects that are missing closing braces
|
||||
content = content.replace(
|
||||
/(\w+:\s*\{\s*type:\s*"[^"]*",\s*required:\s*(?:true|false),\s*description:\s*"[^"]*"\s*)\s*\n(\s*)(\w+:|"[^"]+":|\})/g,
|
||||
(match, paramDef, indent, nextItem) => {
|
||||
if (nextItem === '}') {
|
||||
return `${paramDef} }\n${indent}${nextItem}`;
|
||||
} else {
|
||||
return `${paramDef} },\n${indent}${nextItem}`;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix excessive closing braces
|
||||
*/
|
||||
function fixExcessiveClosingBraces(content) {
|
||||
// Remove excessive closing braces
|
||||
content = content.replace(/\}\s*\}\s*\}/g, '}');
|
||||
content = content.replace(/\}\s*\}/g, '}');
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix parameter block structure
|
||||
*/
|
||||
function fixParameterBlockStructure(content) {
|
||||
// Ensure parameter blocks have proper structure
|
||||
content = content.replace(
|
||||
/parameters:\s*\{([^}]*(?:\{[^}]*\}[^}]*)*)\}/g,
|
||||
(match, paramContent) => {
|
||||
// Clean up the parameter content
|
||||
let cleanedContent = paramContent;
|
||||
|
||||
// Remove trailing commas before closing braces
|
||||
cleanedContent = cleanedContent.replace(/,(\s*\})/g, '$1');
|
||||
|
||||
// Ensure proper spacing
|
||||
cleanedContent = cleanedContent.replace(/\n\s*\n/g, '\n');
|
||||
|
||||
return `parameters: {${cleanedContent}}`;
|
||||
}
|
||||
);
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the fixed file syntax
|
||||
*/
|
||||
async function validateSyntax() {
|
||||
try {
|
||||
console.log('🔍 Validating syntax...');
|
||||
|
||||
const endpointsPath = path.join(process.cwd(), 'src/config/endpoints.js');
|
||||
|
||||
// Use Node.js syntax check
|
||||
const { spawn } = await import('child_process');
|
||||
|
||||
return new Promise((resolve) => {
|
||||
const child = spawn('node', ['-c', endpointsPath], {
|
||||
stdio: ['pipe', 'pipe', 'pipe']
|
||||
});
|
||||
|
||||
let stderr = '';
|
||||
child.stderr.on('data', (data) => {
|
||||
stderr += data.toString();
|
||||
});
|
||||
|
||||
child.on('close', (code) => {
|
||||
if (code === 0) {
|
||||
console.log('✅ Syntax validation passed');
|
||||
resolve(true);
|
||||
} else {
|
||||
console.error('❌ Syntax errors found:');
|
||||
console.error(stderr);
|
||||
resolve(false);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Error validating syntax:', error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Count tools after fix
|
||||
*/
|
||||
function countTools() {
|
||||
try {
|
||||
console.log('📊 Counting tools...');
|
||||
|
||||
const endpointsPath = path.join(process.cwd(), 'src/config/endpoints.js');
|
||||
const content = fs.readFileSync(endpointsPath, 'utf8');
|
||||
|
||||
const sections = ['PUBLIC_ENDPOINTS', 'PROVIDER_ENDPOINTS', 'PATIENT_ENDPOINTS', 'PARTNER_ENDPOINTS', 'AFFILIATE_ENDPOINTS', 'NETWORK_ENDPOINTS'];
|
||||
let total = 0;
|
||||
|
||||
sections.forEach(section => {
|
||||
const regex = new RegExp(`${section}\\s*=\\s*\\[([\\s\\S]*?)\\];`);
|
||||
const match = content.match(regex);
|
||||
if (match) {
|
||||
const count = (match[1].match(/\{[\s\S]*?\}/g) || []).length;
|
||||
console.log(` ${section.replace('_ENDPOINTS', '')}: ${count} tools`);
|
||||
total += count;
|
||||
}
|
||||
});
|
||||
|
||||
console.log(` TOTAL: ${total} tools`);
|
||||
return total;
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Error counting tools:', error);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Run the final structure fix
|
||||
if (import.meta.url === `file://${process.argv[1]}`) {
|
||||
(async () => {
|
||||
try {
|
||||
const result = finalStructureFix();
|
||||
|
||||
console.log('');
|
||||
console.log('=== VALIDATION ===');
|
||||
|
||||
const isValid = await validateSyntax();
|
||||
const toolCount = countTools();
|
||||
|
||||
if (isValid) {
|
||||
console.log('🎉 Endpoints.js structure successfully fixed!');
|
||||
console.log('✅ All duplicate parameters removed');
|
||||
console.log('✅ Syntax validation passed');
|
||||
console.log(`📊 Total tools: ${toolCount}`);
|
||||
} else {
|
||||
console.log('⚠️ Some syntax issues may remain');
|
||||
}
|
||||
|
||||
console.log(`💾 Backup saved: ${result.backupPath}`);
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Failed to fix structure:', error);
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
||||
export { finalStructureFix };
|
Reference in New Issue
Block a user