/** * 修复语法并清理属性访问 */ const fs = require('fs'); const inputPath = 'D:/temp/破解/cursorpro-0.4.5/deobfuscated_full/extension/out/webview/provider.js'; console.log('智能清理属性访问...'); let code = fs.readFileSync(inputPath, 'utf8'); console.log('原始大小:', (code.length / 1024).toFixed(2), 'KB'); // 1. 方法定义: async ['_method']() -> async _method() code = code.replace(/(async\s+)\[(['"])([a-zA-Z_$][a-zA-Z0-9_$]*)\2\]\s*\(/g, '$1$3('); // 2. 方法定义: } ['_method']() code = code.replace(/(\}\s*)\[(['"])([a-zA-Z_$][a-zA-Z0-9_$]*)\2\]\s*\(/g, '$1$3('); // 3. 独立的方法定义 (行首) code = code.replace(/(\n\s*)\[(['"])([a-zA-Z_$][a-zA-Z0-9_$]*)\2\]\s*\(/g, '$1$3('); // 4. 普通属性访问 + 方法调用: obj['prop']() -> obj.prop() code = code.replace(/\[(['"])([a-zA-Z_$][a-zA-Z0-9_$]*)\1\]\s*\(/g, '.$2('); // 5. 普通属性访问: obj['prop'] -> obj.prop (非方法调用) code = code.replace(/\[(['"])([a-zA-Z_$][a-zA-Z0-9_$]*)\1\]/g, '.$2'); // 6. 布尔值简化 code = code.replace(/!!\[\]/g, 'true'); code = code.replace(/!\[\]/g, 'false'); // 7. 修复可能产生的语法错误: 独立的 .method( -> method( // 这种情况出现在类方法定义中 const lines = code.split('\n'); for (let i = 0; i < lines.length; i++) { // 如果一行以 .methodName( 开头(可能有空格),这通常是方法定义 const match = lines[i].match(/^(\s*)\.([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\(/); if (match) { lines[i] = match[1] + match[2] + '(' + lines[i].slice(match[0].length); } } code = lines.join('\n'); fs.writeFileSync(inputPath, code); console.log('新大小:', (code.length / 1024).toFixed(2), 'KB'); // 验证 console.log('\n验证语法问题:'); const badAsync = (code.match(/async\s+\.\w+\s*\(/g) || []).length; const badMethod = (code.match(/}\s*\.\w+\s*\(/g) || []).length; const emptyAsync = (code.match(/async\s+\(\)\s*\{/g) || []).length; console.log(' async .xxx():', badAsync); console.log(' } .xxx():', badMethod); console.log(' async () {}:', emptyAsync); if (badAsync + badMethod + emptyAsync === 0) { console.log('\n✅ 语法检查通过!'); } else { console.log('\n⚠️ 仍有语法问题需要处理'); }