From f31c72f3108fbbfc2dbfd852ef817c3f69dd6524 Mon Sep 17 00:00:00 2001 From: Corey Farrell Date: Mon, 15 Apr 2019 16:45:10 -0400 Subject: [PATCH] Fix handling of class property value this in module transforms. (#9857) Prevent module transforms from rewriting `this` to `void 0` when found in the values of private class properties. Add tests to prevent regressions. --- .../babel-helper-module-transforms/src/rewrite-this.js | 3 +++ .../test/fixtures/class-properties/options.json | 6 ++++++ .../fixtures/class-properties/private-method/input.mjs | 5 +++++ .../fixtures/class-properties/private-method/output.js | 8 ++++++++ .../test/fixtures/class-properties/private/input.mjs | 3 +++ .../test/fixtures/class-properties/private/output.js | 5 +++++ .../test/fixtures/class-properties/public/input.mjs | 3 +++ .../test/fixtures/class-properties/public/output.js | 5 +++++ 8 files changed, 38 insertions(+) create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/options.json create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private-method/input.mjs create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private-method/output.js create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private/input.mjs create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private/output.js create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/public/input.mjs create mode 100644 packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/public/output.js diff --git a/packages/babel-helper-module-transforms/src/rewrite-this.js b/packages/babel-helper-module-transforms/src/rewrite-this.js index 5d79687244..1c572c2d40 100644 --- a/packages/babel-helper-module-transforms/src/rewrite-this.js +++ b/packages/babel-helper-module-transforms/src/rewrite-this.js @@ -17,4 +17,7 @@ const rewriteThisVisitor = { ClassProperty(path) { path.skip(); }, + ClassPrivateProperty(path) { + path.skip(); + }, }; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/options.json b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/options.json new file mode 100644 index 0000000000..cfb4f002f4 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/options.json @@ -0,0 +1,6 @@ +{ + "parserOpts": { + "plugins": ["classProperties", "classPrivateProperties", "classPrivateMethods"] + }, + "plugins": ["transform-modules-commonjs"] +} diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private-method/input.mjs b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private-method/input.mjs new file mode 100644 index 0000000000..e61557f400 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private-method/input.mjs @@ -0,0 +1,5 @@ +class Example { + #method() { + console.log(this); + } +} diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private-method/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private-method/output.js new file mode 100644 index 0000000000..c4427337a5 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private-method/output.js @@ -0,0 +1,8 @@ +"use strict"; + +class Example { + #method() { + console.log(this); + } + +} diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private/input.mjs b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private/input.mjs new file mode 100644 index 0000000000..d654d4e40f --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private/input.mjs @@ -0,0 +1,3 @@ +class Example { + #property = this; +} diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private/output.js new file mode 100644 index 0000000000..23a7990566 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/private/output.js @@ -0,0 +1,5 @@ +"use strict"; + +class Example { + #property = this; +} diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/public/input.mjs b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/public/input.mjs new file mode 100644 index 0000000000..95c59a13fe --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/public/input.mjs @@ -0,0 +1,3 @@ +class Example { + property = this; +} diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/public/output.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/public/output.js new file mode 100644 index 0000000000..fde228b2b5 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/class-properties/public/output.js @@ -0,0 +1,5 @@ +"use strict"; + +class Example { + property = this; +}