diff --git a/packages/babel-plugin-minify-constant-folding/__tests__/constant-folding-test.js b/packages/babel-plugin-minify-constant-folding/__tests__/constant-folding-test.js index ca2e633f7..352027fa6 100644 --- a/packages/babel-plugin-minify-constant-folding/__tests__/constant-folding-test.js +++ b/packages/babel-plugin-minify-constant-folding/__tests__/constant-folding-test.js @@ -237,4 +237,18 @@ describe("constant-folding-plugin", () => { ); expect(transform(source)).toBe(expected); }); + + it("shouldn’t crash on toString() calls or accesses", () => { + const source = unpad( + ` + "foo".toString(); + ["foo", "bar"].toString(); + ({}).toString(); + "foo".toString; + ["foo", "bar"].toString; + ({}).toString; + ` + ); + expect(transform(source)).toBe(source); + }); }); diff --git a/packages/babel-plugin-minify-constant-folding/src/index.js b/packages/babel-plugin-minify-constant-folding/src/index.js index 782d76be2..da5b16e70 100644 --- a/packages/babel-plugin-minify-constant-folding/src/index.js +++ b/packages/babel-plugin-minify-constant-folding/src/index.js @@ -22,7 +22,10 @@ function swap(path, member, handlers, ...args) { const key = getName(member); if (key === undefined) return; let handler = handlers[key]; - if (typeof handler !== "function") { + if ( + typeof handler !== "function" || + !Object.hasOwnProperty.call(handlers, key) + ) { if (typeof handlers[FALLBACK_HANDLER] === "function") { handler = handlers[FALLBACK_HANDLER].bind(member.object, key); } else {