t.traverse(ast, (node, ancestors) => { const parent = ancestors[ancestors.length - 1]; if (t.isWithStatement(node)) { shouldUpdate = false; return; } if (!isTopLevel(ancestors)) { return; } if (t.isAssignmentExpression(node)) { if (t.isIdentifier(node.left) || t.isPattern(node.left)) { const newNode = globalizeAssignment(node, bindings); isMapped = true; return replaceNode(ancestors, newNode); } return; } if (!t.isVariableDeclaration(node)) { return; } if (!t.isForStatement(parent.node)) { const newNodes = globalizeDeclaration(node, bindings); isMapped = true; replaceNode(ancestors, newNodes); } });
t.traverse(ast, (node, ancestors) => { const parent = ancestors[ancestors.length - 1]; if ( t.isWithStatement(node) || !isTopLevel(ancestors) || t.isAssignmentExpression(node) || !t.isVariableDeclaration(node) || t.isForStatement(parent.node) || !Array.isArray(node.declarations) || node.declarations.length === 0 ) { return; } const newNodes = translateDeclarationIntoAssignment(node); replaceNode(ancestors, newNodes); declarations.push(node); });