"use strict"; module.exports = function ({ types: t }) { return { name: "transform-member-expression-literals", visitor: { // foo['bar'] -> foo.bar MemberExpression: { exit({ node }) { const prop = node.property; if (!node.computed || !t.isStringLiteral(prop)) { return; } if (prop.value.match(/^\d+$/)) { const newProp = parseInt(prop.value, 10); if (newProp.toString() === prop.value) { node.property = t.numericLiteral(newProp); node.computed = false; } } else if (t.isValidIdentifier(prop.value)) { node.property = t.identifier(prop.value); node.computed = false; } } } } }; };