From 9aec606c69b04a4617eb85242b9ffb7229d7379a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Thu, 28 Feb 2019 00:34:48 +0100 Subject: [PATCH] Don't loose "this" in helper-call-delegate (#9601) --- .../babel-helper-call-delegate/src/index.js | 2 +- .../parameters/iife-this-9385/input.mjs | 6 ++++ .../parameters/iife-this-9385/options.json | 4 +++ .../parameters/iife-this-9385/output.js | 35 +++++++++++++++++++ .../fixtures/parameters/iife-this/input.js | 8 +++++ .../fixtures/parameters/iife-this/output.js | 23 ++++++++++++ 6 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/input.mjs create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/options.json create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/output.js create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this/input.js create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this/output.js diff --git a/packages/babel-helper-call-delegate/src/index.js b/packages/babel-helper-call-delegate/src/index.js index 8aee027613..d4bf041d01 100644 --- a/packages/babel-helper-call-delegate/src/index.js +++ b/packages/babel-helper-call-delegate/src/index.js @@ -41,7 +41,7 @@ export default function(path: NodePath, scope = path.scope) { path.traverse(visitor, state); - if (state.foundArguments) { + if (state.foundArguments || state.foundThis) { callee = t.memberExpression(container, t.identifier("apply")); args = []; diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/input.mjs b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/input.mjs new file mode 100644 index 0000000000..971a693e6b --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/input.mjs @@ -0,0 +1,6 @@ +export class Test { + invite(options: { privacy: string } = {}) { + const privacy = options.privacy || "Private" + console.log(this) + } +} \ No newline at end of file diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/options.json b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/options.json new file mode 100644 index 0000000000..cc760c8a6c --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["transform-typescript"], + "presets": ["env"] +} diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/output.js new file mode 100644 index 0000000000..0268eef274 --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this-9385/output.js @@ -0,0 +1,35 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Test = void 0; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var Test = +/*#__PURE__*/ +function () { + function Test() { + _classCallCheck(this, Test); + } + + _createClass(Test, [{ + key: "invite", + value: function invite() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + return function () { + var privacy = options.privacy || "Private"; + console.log(this); + }.apply(this); + } + }]); + + return Test; +}(); + +exports.Test = Test; diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this/input.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this/input.js new file mode 100644 index 0000000000..b250227470 --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this/input.js @@ -0,0 +1,8 @@ +var a; + +class Test { + invite(p = a) { + let a; + this; + } +} \ No newline at end of file diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this/output.js new file mode 100644 index 0000000000..d199a0d786 --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/iife-this/output.js @@ -0,0 +1,23 @@ +var a; + +var Test = +/*#__PURE__*/ +function () { + "use strict"; + + function Test() { + babelHelpers.classCallCheck(this, Test); + } + + babelHelpers.createClass(Test, [{ + key: "invite", + value: function invite() { + var p = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : a; + return function () { + var a; + this; + }.apply(this); + } + }]); + return Test; +}();