diff --git a/packages/babel-plugin-transform-member-expression-literals/__tests__/transform-member-expression-literals-test.js b/packages/babel-plugin-transform-member-expression-literals/__tests__/transform-member-expression-literals-test.js index 44f53099f..27fb25504 100644 --- a/packages/babel-plugin-transform-member-expression-literals/__tests__/transform-member-expression-literals-test.js +++ b/packages/babel-plugin-transform-member-expression-literals/__tests__/transform-member-expression-literals-test.js @@ -23,6 +23,11 @@ describe("transform-member-expressions-literals-plugin", () => { expect(transform(source)).toBe(expected); }); + it("should not strip necessaary quotes for numeric like things", () => { + const source = "data['00'] = 5;"; + expect(transform(source)).toBe(source); + }); + it("should not transform invalid identifiers", () => { const source = unpad(` foo["default"]; diff --git a/packages/babel-plugin-transform-member-expression-literals/src/index.js b/packages/babel-plugin-transform-member-expression-literals/src/index.js index eaed79102..c74fe0a89 100644 --- a/packages/babel-plugin-transform-member-expression-literals/src/index.js +++ b/packages/babel-plugin-transform-member-expression-literals/src/index.js @@ -13,8 +13,11 @@ module.exports = function({ types: t }) { } if (prop.value.match(/^\d+$/)) { - node.property = t.numericLiteral(parseInt(prop.value, 10)); - node.computed = false; + 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; diff --git a/packages/babel-plugin-transform-property-literals/__tests__/transform-property-literals-test.js b/packages/babel-plugin-transform-property-literals/__tests__/transform-property-literals-test.js index 4fbaa7396..80f6bdcfc 100644 --- a/packages/babel-plugin-transform-property-literals/__tests__/transform-property-literals-test.js +++ b/packages/babel-plugin-transform-property-literals/__tests__/transform-property-literals-test.js @@ -23,6 +23,16 @@ describe("transform-property-literals-plugin", () => { expect(transform(source)).toBe(expected); }); + it("should not strip necessaary quotes for numeric like things", () => { + const source = unpad(` + var data = { + "00": 1, + "01": 2 + }; + `); + expect(transform(source)).toBe(source); + }); + it("should not transform invalid identifiers", () => { const source = unpad(` ({ diff --git a/packages/babel-plugin-transform-property-literals/src/index.js b/packages/babel-plugin-transform-property-literals/src/index.js index 1dc6469e0..69ba2e29f 100644 --- a/packages/babel-plugin-transform-property-literals/src/index.js +++ b/packages/babel-plugin-transform-property-literals/src/index.js @@ -13,8 +13,11 @@ module.exports = function({ types: t }) { } if (key.value.match(/^\d+$/)) { - node.key = t.numericLiteral(parseInt(node.key.value, 10)); - node.computed = false; + const newProp = parseInt(node.key.value, 10); + if (newProp.toString() === node.key.value) { + node.key = t.numericLiteral(newProp); + node.computed = false; + } } else if (t.isValidIdentifier(key.value)) { node.key = t.identifier(key.value); node.computed = false;