fix: tagged template incorrect receiver (#13395)
* fix: tagged template incorrect receiver * review changes * func exp instead of arrow * review comments * update tests output * swap arrow funcs to regular funcs Co-authored-by: sagiv.bengiat <sagiv.bengiat@appsflyer.com>
This commit is contained in:
parent
45174730ab
commit
a3c7497eb7
@ -462,8 +462,13 @@ const handle = {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (parentPath.isTaggedTemplateExpression()) {
|
||||||
|
// MEMBER -> _get(MEMBER).bind(this)
|
||||||
|
member.replaceWith(this.boundGet(member));
|
||||||
|
} else {
|
||||||
// MEMBER -> _get(MEMBER)
|
// MEMBER -> _get(MEMBER)
|
||||||
member.replaceWith(this.get(member));
|
member.replaceWith(this.get(member));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,9 @@
|
|||||||
|
class Foo {
|
||||||
|
static #tag = function () { return this };
|
||||||
|
|
||||||
|
static getReceiver() {
|
||||||
|
return this.#tag``;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(Foo.getReceiver()).toBe(Foo);
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
class Foo {
|
||||||
|
static #tag = function () { return this };
|
||||||
|
|
||||||
|
static getReceiver() {
|
||||||
|
return this.#tag``;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"proposal-class-properties",
|
||||||
|
"proposal-private-methods"
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
class Foo {
|
||||||
|
static getReceiver() {
|
||||||
|
return babelHelpers.classStaticPrivateFieldSpecGet(this, Foo, _tag).bind(this)``;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _tag = {
|
||||||
|
writable: true,
|
||||||
|
value: function () {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
};
|
||||||
17
packages/babel-plugin-proposal-class-properties/test/fixtures/private/tagged-template/exec.js
vendored
Normal file
17
packages/babel-plugin-proposal-class-properties/test/fixtures/private/tagged-template/exec.js
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
class Foo {
|
||||||
|
#tag() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tag2 = function() { return this; };
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
const receiver = this.#tag`tagged template`;
|
||||||
|
expect(receiver).toBe(this);
|
||||||
|
|
||||||
|
const receiver2 = this.#tag2`tagged template`;
|
||||||
|
expect(receiver2).toBe(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new Foo();
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
class Foo {
|
||||||
|
#tag;
|
||||||
|
|
||||||
|
test() {
|
||||||
|
this.#tag``;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new Foo();
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
[
|
||||||
|
"@babel/preset-env",
|
||||||
|
{
|
||||||
|
"shippedProposals": true,
|
||||||
|
"targets": {
|
||||||
|
"chrome": "75"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
24
packages/babel-plugin-proposal-class-properties/test/fixtures/private/tagged-template/output.js
vendored
Normal file
24
packages/babel-plugin-proposal-class-properties/test/fixtures/private/tagged-template/output.js
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
var _tag = /*#__PURE__*/new WeakMap();
|
||||||
|
|
||||||
|
var Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_tag.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test() {
|
||||||
|
babelHelpers.classPrivateFieldGet(this, _tag).bind(this)``;
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
new Foo();
|
||||||
10
packages/babel-plugin-proposal-private-methods/test/fixtures/accessors/tagged-template/exec.js
vendored
Normal file
10
packages/babel-plugin-proposal-private-methods/test/fixtures/accessors/tagged-template/exec.js
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
class Foo {
|
||||||
|
get #tag() {
|
||||||
|
return function() { return this; };
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
const receiver = this.#tag``;
|
||||||
|
expect(receiver).toBe(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
11
packages/babel-plugin-proposal-private-methods/test/fixtures/accessors/tagged-template/input.js
vendored
Normal file
11
packages/babel-plugin-proposal-private-methods/test/fixtures/accessors/tagged-template/input.js
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
class Foo {
|
||||||
|
get #tag() {
|
||||||
|
return () => this;
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.#tag``;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new Foo();
|
||||||
19
packages/babel-plugin-proposal-private-methods/test/fixtures/accessors/tagged-template/output.js
vendored
Normal file
19
packages/babel-plugin-proposal-private-methods/test/fixtures/accessors/tagged-template/output.js
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
var _tag = /*#__PURE__*/new WeakMap();
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
constructor() {
|
||||||
|
_tag.set(this, {
|
||||||
|
get: _get_tag,
|
||||||
|
set: void 0
|
||||||
|
});
|
||||||
|
|
||||||
|
babelHelpers.classPrivateFieldGet(this, _tag).bind(this)``;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function _get_tag() {
|
||||||
|
return () => this;
|
||||||
|
}
|
||||||
|
|
||||||
|
new Foo();
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
class Foo {
|
||||||
|
#tag() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
const receiver = this.#tag`tagged template`;
|
||||||
|
expect(receiver).toBe(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
new Foo();
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
class Foo {
|
||||||
|
#tag() {
|
||||||
|
this.#tag``;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
new Foo();
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
var _tag = /*#__PURE__*/new WeakSet();
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
constructor() {
|
||||||
|
_tag.add(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function _tag2() {
|
||||||
|
babelHelpers.classPrivateMethodGet(this, _tag, _tag2).bind(this)``;
|
||||||
|
}
|
||||||
|
|
||||||
|
new Foo();
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
class Foo {
|
||||||
|
static #tag() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static getReceiver() {
|
||||||
|
return this.#tag``;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(Foo.getReceiver()).toBe(Foo);
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
class Foo {
|
||||||
|
static #tag() {
|
||||||
|
this.#tag``;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
new Foo();
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {}
|
||||||
|
|
||||||
|
function _tag() {
|
||||||
|
babelHelpers.classStaticPrivateMethodGet(this, Foo, _tag).bind(this)``;
|
||||||
|
}
|
||||||
|
|
||||||
|
new Foo();
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
class Foo {
|
||||||
|
static get #tag() {
|
||||||
|
return function() { return this; };
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const receiver = this.#tag``;
|
||||||
|
expect(receiver).toBe(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
class Foo {
|
||||||
|
static test() {
|
||||||
|
var receiver = babelHelpers.classStaticPrivateFieldSpecGet(this, Foo, _tag).bind(this)``;
|
||||||
|
expect(receiver).toBe(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function _get_tag() {
|
||||||
|
return function () {
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var _tag = {
|
||||||
|
get: _get_tag,
|
||||||
|
set: void 0
|
||||||
|
};
|
||||||
Loading…
x
Reference in New Issue
Block a user