#!/usr/bin/env node const fs = require('fs'); // Create backup const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5); const backupPath = `src/mocks/resumeInterviewMock.js.backup_${timestamp}_final_clean`; const mockContent = fs.readFileSync('src/mocks/resumeInterviewMock.js', 'utf-8'); fs.writeFileSync(backupPath, mockContent); console.log(`āœ“ Backup created: ${backupPath}`); // Function to clean indentation from text function cleanIndentation(text) { const lines = text.split('\n'); const cleanedLines = lines.map(line => line.trimStart()); return cleanedLines.join('\n'); } // Read and parse the file structure let processedContent = mockContent; let totalCount = 0; // Find all "answer": "..." patterns and clean them // Using a more robust approach by processing character by character let newContent = ''; let i = 0; while (i < processedContent.length) { // Look for "answer": " if (processedContent.substring(i, i + 10) === '"answer": "') { // Found an answer field newContent += '"answer": "'; i += 10; // Extract the answer content, handling escapes properly let answerContent = ''; let escaped = false; while (i < processedContent.length) { const char = processedContent[i]; if (escaped) { answerContent += char; escaped = false; } else if (char === '\\') { answerContent += char; escaped = true; } else if (char === '"') { // End of answer content break; } else { answerContent += char; } i++; } // Process the answer content // Unescape for processing let unescaped = answerContent .replace(/\\n/g, '\n') .replace(/\\"/g, '"') .replace(/\\\\/g, '\\'); // Clean indentation let cleaned = cleanIndentation(unescaped); // Re-escape let reescaped = cleaned .replace(/\\/g, '\\\\') .replace(/"/g, '\\"') .replace(/\n/g, '\\n'); newContent += reescaped; totalCount++; } else { newContent += processedContent[i]; } i++; } console.log(`\nāœ… Processed ${totalCount} answer fields`); // Save the file fs.writeFileSync('src/mocks/resumeInterviewMock.js', newContent); // Verify syntax const { execSync } = require('child_process'); try { execSync('node -c src/mocks/resumeInterviewMock.js', { encoding: 'utf-8' }); console.log('āœ… Syntax validation passed'); // Verify the changes console.log('\nšŸ“‹ Verification of cleaned answers:\n'); const verifyContent = fs.readFileSync('src/mocks/resumeInterviewMock.js', 'utf-8'); // Check a few samples const samplePattern = /"answer":\s*"([^"]*?阶ꮵ[^"]{0,300})"/; const sampleMatch = verifyContent.match(samplePattern); if (sampleMatch) { const sample = sampleMatch[1].replace(/\\n/g, '\n').substring(0, 400); console.log('Sample answer (should have no leading spaces on each line):'); console.log('─'.repeat(60)); console.log(sample); console.log('─'.repeat(60)); // Check if indentation was actually removed const lines = sample.split('\n'); let hasIndentation = false; for (const line of lines) { if (line.startsWith(' ') || line.startsWith('\t')) { hasIndentation = true; console.log(`āš ļø Still has indentation: "${line.substring(0, 50)}..."`); } } if (!hasIndentation) { console.log('āœ… All indentation successfully removed!'); } } } catch (error) { console.error('āŒ Syntax error detected, restoring backup...'); fs.writeFileSync('src/mocks/resumeInterviewMock.js', mockContent); console.log('Backup restored'); console.error('Error:', error.message); }