Files
ALL-teach_sys/frontend_视觉设计/finalCleanIndent.cjs

128 lines
3.6 KiB
JavaScript
Raw Permalink Normal View History

#!/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);
}