UNPKG

restringer

Version:

Deobfuscate Javascript with emphasis on reconstructing strings

23 lines (22 loc) 808 B
/** * Remove unrequired empty statements. * @param {Arborist} arb * @param {Function} candidateFilter (optional) a filter to apply on the candidates list * @return {Arborist} */ function normalizeEmptyStatements(arb, candidateFilter = () => true) { const relevantNodes = [ ...(arb.ast[0].typeMap.EmptyStatement || []), ]; for (let i = 0; i < relevantNodes.length; i++) { const n = relevantNodes[i]; if (candidateFilter(n)) { // A for loop is sometimes used to assign variables without providing a loop body, just an empty statement. // If we delete that empty statement the syntax breaks // e.g. for (var i = 0, b = 8;;); - this is a valid for statement. if (!/For.*Statement/.test(n.parentNode.type)) arb.markNode(n); } } return arb; } export default normalizeEmptyStatements;