refactor: do not rely on AST extra properties in plugins (#11662)
This commit is contained in:
parent
fdbbb57434
commit
c9da3bc8b8
@ -167,9 +167,8 @@ const handle = {
|
|||||||
const parentIsOptionalCall = parentPath.isOptionalCallExpression({
|
const parentIsOptionalCall = parentPath.isOptionalCallExpression({
|
||||||
callee: node,
|
callee: node,
|
||||||
});
|
});
|
||||||
const isParenthesizedMemberCall =
|
// if parentIsCall is true, it implies that node.extra.parenthesized is always true
|
||||||
parentPath.isCallExpression({ callee: node }) &&
|
const parentIsCall = parentPath.isCallExpression({ callee: node });
|
||||||
node.extra?.parenthesized;
|
|
||||||
startingOptional.replaceWith(toNonOptional(startingOptional, baseRef));
|
startingOptional.replaceWith(toNonOptional(startingOptional, baseRef));
|
||||||
if (parentIsOptionalCall) {
|
if (parentIsOptionalCall) {
|
||||||
if (parent.optional) {
|
if (parent.optional) {
|
||||||
@ -177,7 +176,7 @@ const handle = {
|
|||||||
} else {
|
} else {
|
||||||
parentPath.replaceWith(this.call(member, parent.arguments));
|
parentPath.replaceWith(this.call(member, parent.arguments));
|
||||||
}
|
}
|
||||||
} else if (isParenthesizedMemberCall) {
|
} else if (parentIsCall) {
|
||||||
// `(a?.#b)()` to `(a == null ? void 0 : a.#b.bind(a))()`
|
// `(a?.#b)()` to `(a == null ? void 0 : a.#b.bind(a))()`
|
||||||
member.replaceWith(this.boundGet(member));
|
member.replaceWith(this.boundGet(member));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -8,7 +8,7 @@ class Foo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test() {
|
test() {
|
||||||
var _o$Foo$self$getSelf, _o$Foo$self$getSelf2, _fn$Foo$self$getSelf, _fn$Foo$self$getSelf2, _o$Foo, _o$Foo$self, _fn, _fn$Foo, _fn$Foo$self, _fn$Foo$self2;
|
var _o$Foo$self$getSelf, _o$Foo$self$getSelf2, _fn$Foo$self$getSelf, _fn$Foo$self$getSelf2, _o$Foo, _o$Foo$self, _fn, _fn$Foo, _fn$Foo$self;
|
||||||
|
|
||||||
const o = {
|
const o = {
|
||||||
Foo: Foo
|
Foo: Foo
|
||||||
@ -26,8 +26,8 @@ class Foo {
|
|||||||
(o === null || o === void 0 ? void 0 : babelHelpers.classPrivateFieldLooseBase(o.Foo, _m)[_m].bind(o.Foo))().toString();
|
(o === null || o === void 0 ? void 0 : babelHelpers.classPrivateFieldLooseBase(o.Foo, _m)[_m].bind(o.Foo))().toString();
|
||||||
((_o$Foo$self$getSelf = ((_o$Foo = o.Foo) == null ? void 0 : _o$Foo.self.getSelf.bind(_o$Foo.self))()) === null || _o$Foo$self$getSelf === void 0 ? void 0 : babelHelpers.classPrivateFieldLooseBase(_o$Foo$self$getSelf, _m)[_m].bind(_o$Foo$self$getSelf))();
|
((_o$Foo$self$getSelf = ((_o$Foo = o.Foo) == null ? void 0 : _o$Foo.self.getSelf.bind(_o$Foo.self))()) === null || _o$Foo$self$getSelf === void 0 ? void 0 : babelHelpers.classPrivateFieldLooseBase(_o$Foo$self$getSelf, _m)[_m].bind(_o$Foo$self$getSelf))();
|
||||||
((_o$Foo$self$getSelf2 = ((_o$Foo$self = o.Foo.self) == null ? void 0 : _o$Foo$self.getSelf.bind(_o$Foo$self))()) === null || _o$Foo$self$getSelf2 === void 0 ? void 0 : babelHelpers.classPrivateFieldLooseBase(_o$Foo$self$getSelf2, _m)[_m].bind(_o$Foo$self$getSelf2))();
|
((_o$Foo$self$getSelf2 = ((_o$Foo$self = o.Foo.self) == null ? void 0 : _o$Foo$self.getSelf.bind(_o$Foo$self))()) === null || _o$Foo$self$getSelf2 === void 0 ? void 0 : babelHelpers.classPrivateFieldLooseBase(_o$Foo$self$getSelf2, _m)[_m].bind(_o$Foo$self$getSelf2))();
|
||||||
((_fn$Foo$self$getSelf = ((_fn = fn()) == null ? void 0 : (_fn$Foo = _fn.Foo) == null ? void 0 : _fn$Foo.self.getSelf.bind(_fn.Foo.self))()) === null || _fn$Foo$self$getSelf === void 0 ? void 0 : babelHelpers.classPrivateFieldLooseBase(_fn$Foo$self$getSelf, _m)[_m].bind(_fn$Foo$self$getSelf))();
|
((_fn$Foo$self$getSelf = ((_fn = fn()) == null ? void 0 : (_fn$Foo = _fn.Foo) == null ? void 0 : _fn$Foo.self.getSelf.bind(_fn$Foo.self))()) === null || _fn$Foo$self$getSelf === void 0 ? void 0 : babelHelpers.classPrivateFieldLooseBase(_fn$Foo$self$getSelf, _m)[_m].bind(_fn$Foo$self$getSelf))();
|
||||||
((_fn$Foo$self$getSelf2 = (fn == null ? void 0 : (_fn$Foo$self2 = _fn$Foo$self = fn().Foo.self) == null ? void 0 : _fn$Foo$self2.getSelf.bind(_fn$Foo$self))()) === null || _fn$Foo$self$getSelf2 === void 0 ? void 0 : babelHelpers.classPrivateFieldLooseBase(_fn$Foo$self$getSelf2, _m)[_m].bind(_fn$Foo$self$getSelf2))();
|
((_fn$Foo$self$getSelf2 = (fn == null ? void 0 : (_fn$Foo$self = fn().Foo.self) == null ? void 0 : _fn$Foo$self.getSelf.bind(_fn$Foo$self))()) === null || _fn$Foo$self$getSelf2 === void 0 ? void 0 : babelHelpers.classPrivateFieldLooseBase(_fn$Foo$self$getSelf2, _m)[_m].bind(_fn$Foo$self$getSelf2))();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,7 +4,7 @@ class Foo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test() {
|
test() {
|
||||||
var _o$Foo, _o$Foo2, _o$Foo3, _o$Foo$self$getSelf, _o$Foo$self$getSelf2, _fn$Foo$self$getSelf, _fn$Foo$self$getSelf2, _o$Foo4, _o$Foo4$self, _o$Foo$self, _fn, _fn$Foo$self, _fn$Foo, _fn$Foo$self2, _fn$Foo$self3;
|
var _o$Foo, _o$Foo2, _o$Foo3, _o$Foo$self$getSelf, _o$Foo$self$getSelf2, _fn$Foo$self$getSelf, _fn$Foo$self$getSelf2, _o$Foo4, _o$Foo4$self, _o$Foo$self, _fn, _fn$Foo, _fn$Foo$self, _fn$Foo$self2;
|
||||||
|
|
||||||
const o = {
|
const o = {
|
||||||
Foo: Foo
|
Foo: Foo
|
||||||
@ -23,7 +23,7 @@ class Foo {
|
|||||||
((_o$Foo$self$getSelf = ((_o$Foo4 = o.Foo) === null || _o$Foo4 === void 0 ? void 0 : (_o$Foo4$self = _o$Foo4.self).getSelf.bind(_o$Foo4$self))()) === null || _o$Foo$self$getSelf === void 0 ? void 0 : babelHelpers.classStaticPrivateFieldSpecGet(_o$Foo$self$getSelf, Foo, _m).bind(_o$Foo$self$getSelf))();
|
((_o$Foo$self$getSelf = ((_o$Foo4 = o.Foo) === null || _o$Foo4 === void 0 ? void 0 : (_o$Foo4$self = _o$Foo4.self).getSelf.bind(_o$Foo4$self))()) === null || _o$Foo$self$getSelf === void 0 ? void 0 : babelHelpers.classStaticPrivateFieldSpecGet(_o$Foo$self$getSelf, Foo, _m).bind(_o$Foo$self$getSelf))();
|
||||||
((_o$Foo$self$getSelf2 = ((_o$Foo$self = o.Foo.self) === null || _o$Foo$self === void 0 ? void 0 : _o$Foo$self.getSelf.bind(_o$Foo$self))()) === null || _o$Foo$self$getSelf2 === void 0 ? void 0 : babelHelpers.classStaticPrivateFieldSpecGet(_o$Foo$self$getSelf2, Foo, _m).bind(_o$Foo$self$getSelf2))();
|
((_o$Foo$self$getSelf2 = ((_o$Foo$self = o.Foo.self) === null || _o$Foo$self === void 0 ? void 0 : _o$Foo$self.getSelf.bind(_o$Foo$self))()) === null || _o$Foo$self$getSelf2 === void 0 ? void 0 : babelHelpers.classStaticPrivateFieldSpecGet(_o$Foo$self$getSelf2, Foo, _m).bind(_o$Foo$self$getSelf2))();
|
||||||
((_fn$Foo$self$getSelf = ((_fn = fn()) === null || _fn === void 0 ? void 0 : (_fn$Foo = _fn.Foo) === null || _fn$Foo === void 0 ? void 0 : (_fn$Foo$self = _fn$Foo.self).getSelf.bind(_fn$Foo$self))()) === null || _fn$Foo$self$getSelf === void 0 ? void 0 : babelHelpers.classStaticPrivateFieldSpecGet(_fn$Foo$self$getSelf, Foo, _m).bind(_fn$Foo$self$getSelf))();
|
((_fn$Foo$self$getSelf = ((_fn = fn()) === null || _fn === void 0 ? void 0 : (_fn$Foo = _fn.Foo) === null || _fn$Foo === void 0 ? void 0 : (_fn$Foo$self = _fn$Foo.self).getSelf.bind(_fn$Foo$self))()) === null || _fn$Foo$self$getSelf === void 0 ? void 0 : babelHelpers.classStaticPrivateFieldSpecGet(_fn$Foo$self$getSelf, Foo, _m).bind(_fn$Foo$self$getSelf))();
|
||||||
((_fn$Foo$self$getSelf2 = (fn === null || fn === void 0 ? void 0 : (_fn$Foo$self3 = _fn$Foo$self2 = fn().Foo.self) === null || _fn$Foo$self3 === void 0 ? void 0 : _fn$Foo$self3.getSelf.bind(_fn$Foo$self2))()) === null || _fn$Foo$self$getSelf2 === void 0 ? void 0 : babelHelpers.classStaticPrivateFieldSpecGet(_fn$Foo$self$getSelf2, Foo, _m).bind(_fn$Foo$self$getSelf2))();
|
((_fn$Foo$self$getSelf2 = (fn === null || fn === void 0 ? void 0 : (_fn$Foo$self2 = fn().Foo.self) === null || _fn$Foo$self2 === void 0 ? void 0 : _fn$Foo$self2.getSelf.bind(_fn$Foo$self2))()) === null || _fn$Foo$self$getSelf2 === void 0 ? void 0 : babelHelpers.classStaticPrivateFieldSpecGet(_fn$Foo$self$getSelf2, Foo, _m).bind(_fn$Foo$self$getSelf2))();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,8 +24,20 @@ export default declare((api, options) => {
|
|||||||
visitor: {
|
visitor: {
|
||||||
"OptionalCallExpression|OptionalMemberExpression"(path) {
|
"OptionalCallExpression|OptionalMemberExpression"(path) {
|
||||||
const { scope } = path;
|
const { scope } = path;
|
||||||
const parentPath = path.findParent(p => !p.isParenthesizedExpression());
|
// maybeParenthesized points to the outermost parenthesizedExpression
|
||||||
|
// or the path itself
|
||||||
|
let maybeParenthesized = path;
|
||||||
|
const parentPath = path.findParent(p => {
|
||||||
|
if (!p.isParenthesizedExpression()) return true;
|
||||||
|
maybeParenthesized = p;
|
||||||
|
});
|
||||||
let isDeleteOperation = false;
|
let isDeleteOperation = false;
|
||||||
|
const parentIsCall =
|
||||||
|
parentPath.isCallExpression({ callee: maybeParenthesized.node }) &&
|
||||||
|
// note that the first condition must implies that `path.optional` is `true`,
|
||||||
|
// otherwise the parentPath should be an OptionalCallExpressioin
|
||||||
|
path.isOptionalMemberExpression();
|
||||||
|
|
||||||
const optionals = [];
|
const optionals = [];
|
||||||
|
|
||||||
let optionalPath = path;
|
let optionalPath = path;
|
||||||
@ -116,14 +128,10 @@ export default declare((api, options) => {
|
|||||||
}
|
}
|
||||||
let replacement = replacementPath.node;
|
let replacement = replacementPath.node;
|
||||||
// Ensure (a?.b)() has proper `this`
|
// Ensure (a?.b)() has proper `this`
|
||||||
if (
|
// The `parentIsCall` is constant within loop, we should check i === 0
|
||||||
t.isMemberExpression(replacement) &&
|
// to ensure that it is only applied to the first optional chain element
|
||||||
(replacement.extra?.parenthesized ||
|
// i.e. `?.b` in `(a?.b.c)()`
|
||||||
// if replacementPath.parentPath does not equal parentPath,
|
if (i === 0 && parentIsCall) {
|
||||||
// it must be unwrapped from parenthesized expression.
|
|
||||||
replacementPath.parentPath !== parentPath) &&
|
|
||||||
parentPath.isCallExpression()
|
|
||||||
) {
|
|
||||||
// `(a?.b)()` to `(a == null ? undefined : a.b.bind(a))()`
|
// `(a?.b)()` to `(a == null ? undefined : a.b.bind(a))()`
|
||||||
const { object } = replacement;
|
const { object } = replacement;
|
||||||
let baseRef;
|
let baseRef;
|
||||||
|
|||||||
@ -2,5 +2,6 @@ var street = user.address?.street
|
|||||||
street = user.address?.street
|
street = user.address?.street
|
||||||
|
|
||||||
test(a?.b, 1);
|
test(a?.b, 1);
|
||||||
|
test((a?.b), 1);
|
||||||
|
|
||||||
(1, a?.b, 2);
|
(1, a?.b, 2);
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
var _user$address, _user$address2, _a, _a2;
|
var _user$address, _user$address2, _a, _a2, _a3;
|
||||||
|
|
||||||
var street = (_user$address = user.address) === null || _user$address === void 0 ? void 0 : _user$address.street;
|
var street = (_user$address = user.address) === null || _user$address === void 0 ? void 0 : _user$address.street;
|
||||||
street = (_user$address2 = user.address) === null || _user$address2 === void 0 ? void 0 : _user$address2.street;
|
street = (_user$address2 = user.address) === null || _user$address2 === void 0 ? void 0 : _user$address2.street;
|
||||||
test((_a = a) === null || _a === void 0 ? void 0 : _a.b, 1);
|
test((_a = a) === null || _a === void 0 ? void 0 : _a.b, 1);
|
||||||
1, (_a2 = a) === null || _a2 === void 0 ? void 0 : _a2.b, 2;
|
test((_a2 = a) === null || _a2 === void 0 ? void 0 : _a2.b, 1);
|
||||||
|
1, (_a3 = a) === null || _a3 === void 0 ? void 0 : _a3.b, 2;
|
||||||
|
|||||||
@ -0,0 +1,7 @@
|
|||||||
|
var street = user.address?.street
|
||||||
|
street = user.address?.street
|
||||||
|
|
||||||
|
test(a?.b, 1);
|
||||||
|
test((a?.b), 1);
|
||||||
|
|
||||||
|
(1, a?.b, 2);
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["proposal-optional-chaining"],
|
||||||
|
"parserOpts": {
|
||||||
|
"createParenthesizedExpressions": true
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
var _user$address, _user$address2, _a, _a2, _a3;
|
||||||
|
|
||||||
|
var street = (_user$address = user.address) === null || _user$address === void 0 ? void 0 : _user$address.street;
|
||||||
|
street = (_user$address2 = user.address) === null || _user$address2 === void 0 ? void 0 : _user$address2.street;
|
||||||
|
test((_a = a) === null || _a === void 0 ? void 0 : _a.b, 1);
|
||||||
|
test(((_a2 = a) === null || _a2 === void 0 ? void 0 : _a2.b), 1);
|
||||||
|
((1, (_a3 = a) === null || _a3 === void 0 ? void 0 : _a3.b, 2));
|
||||||
@ -13,7 +13,7 @@ class Foo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test() {
|
test() {
|
||||||
var _o$Foo$self$getSelf, _o$Foo, _o$Foo$self$getSelf2, _o$Foo$self, _fn$Foo$self$getSelf, _fn, _fn$Foo, _fn$Foo$self$getSelf2, _fn$Foo$self, _fn$Foo$self2;
|
var _o$Foo$self$getSelf, _o$Foo, _o$Foo$self$getSelf2, _o$Foo$self, _fn$Foo$self$getSelf, _fn, _fn$Foo, _fn$Foo$self$getSelf2, _fn$Foo$self;
|
||||||
|
|
||||||
const Foo = this;
|
const Foo = this;
|
||||||
const o = {
|
const o = {
|
||||||
@ -32,8 +32,8 @@ class Foo {
|
|||||||
(o == null ? void 0 : o.Foo.m.bind(o.Foo))().toString();
|
(o == null ? void 0 : o.Foo.m.bind(o.Foo))().toString();
|
||||||
((_o$Foo$self$getSelf = ((_o$Foo = o.Foo) == null ? void 0 : _o$Foo.self.getSelf.bind(_o$Foo.self))()) == null ? void 0 : _o$Foo$self$getSelf.m.bind(_o$Foo$self$getSelf))();
|
((_o$Foo$self$getSelf = ((_o$Foo = o.Foo) == null ? void 0 : _o$Foo.self.getSelf.bind(_o$Foo.self))()) == null ? void 0 : _o$Foo$self$getSelf.m.bind(_o$Foo$self$getSelf))();
|
||||||
((_o$Foo$self$getSelf2 = ((_o$Foo$self = o.Foo.self) == null ? void 0 : _o$Foo$self.getSelf.bind(_o$Foo$self))()) == null ? void 0 : _o$Foo$self$getSelf2.m.bind(_o$Foo$self$getSelf2))();
|
((_o$Foo$self$getSelf2 = ((_o$Foo$self = o.Foo.self) == null ? void 0 : _o$Foo$self.getSelf.bind(_o$Foo$self))()) == null ? void 0 : _o$Foo$self$getSelf2.m.bind(_o$Foo$self$getSelf2))();
|
||||||
((_fn$Foo$self$getSelf = ((_fn = fn()) == null ? void 0 : (_fn$Foo = _fn.Foo) == null ? void 0 : _fn$Foo.self.getSelf.bind(_fn.Foo.self))()) == null ? void 0 : _fn$Foo$self$getSelf.m.bind(_fn$Foo$self$getSelf))();
|
((_fn$Foo$self$getSelf = ((_fn = fn()) == null ? void 0 : (_fn$Foo = _fn.Foo) == null ? void 0 : _fn$Foo.self.getSelf.bind(_fn$Foo.self))()) == null ? void 0 : _fn$Foo$self$getSelf.m.bind(_fn$Foo$self$getSelf))();
|
||||||
((_fn$Foo$self$getSelf2 = (fn == null ? void 0 : (_fn$Foo$self2 = _fn$Foo$self = fn().Foo.self) == null ? void 0 : _fn$Foo$self2.getSelf.bind(_fn$Foo$self))()) == null ? void 0 : _fn$Foo$self$getSelf2.m.bind(_fn$Foo$self$getSelf2))();
|
((_fn$Foo$self$getSelf2 = (fn == null ? void 0 : (_fn$Foo$self = fn().Foo.self) == null ? void 0 : _fn$Foo$self.getSelf.bind(_fn$Foo$self))()) == null ? void 0 : _fn$Foo$self$getSelf2.m.bind(_fn$Foo$self$getSelf2))();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,7 +13,7 @@ class Foo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test() {
|
test() {
|
||||||
var _o$Foo, _o$Foo2, _o$Foo3, _o$Foo$self$getSelf, _o$Foo4, _o$Foo4$self, _o$Foo$self$getSelf2, _o$Foo$self, _fn$Foo$self$getSelf, _fn, _fn$Foo$self, _fn$Foo, _fn$Foo$self$getSelf2, _fn$Foo$self2, _fn$Foo$self3;
|
var _o$Foo, _o$Foo2, _o$Foo3, _o$Foo$self$getSelf, _o$Foo4, _o$Foo4$self, _o$Foo$self$getSelf2, _o$Foo$self, _fn$Foo$self$getSelf, _fn, _fn$Foo, _fn$Foo$self, _fn$Foo$self$getSelf2, _fn$Foo$self2;
|
||||||
|
|
||||||
const Foo = this;
|
const Foo = this;
|
||||||
const o = {
|
const o = {
|
||||||
@ -33,7 +33,7 @@ class Foo {
|
|||||||
((_o$Foo$self$getSelf = ((_o$Foo4 = o.Foo) === null || _o$Foo4 === void 0 ? void 0 : (_o$Foo4$self = _o$Foo4.self).getSelf.bind(_o$Foo4$self))()) === null || _o$Foo$self$getSelf === void 0 ? void 0 : _o$Foo$self$getSelf.m.bind(_o$Foo$self$getSelf))();
|
((_o$Foo$self$getSelf = ((_o$Foo4 = o.Foo) === null || _o$Foo4 === void 0 ? void 0 : (_o$Foo4$self = _o$Foo4.self).getSelf.bind(_o$Foo4$self))()) === null || _o$Foo$self$getSelf === void 0 ? void 0 : _o$Foo$self$getSelf.m.bind(_o$Foo$self$getSelf))();
|
||||||
((_o$Foo$self$getSelf2 = ((_o$Foo$self = o.Foo.self) === null || _o$Foo$self === void 0 ? void 0 : _o$Foo$self.getSelf.bind(_o$Foo$self))()) === null || _o$Foo$self$getSelf2 === void 0 ? void 0 : _o$Foo$self$getSelf2.m.bind(_o$Foo$self$getSelf2))();
|
((_o$Foo$self$getSelf2 = ((_o$Foo$self = o.Foo.self) === null || _o$Foo$self === void 0 ? void 0 : _o$Foo$self.getSelf.bind(_o$Foo$self))()) === null || _o$Foo$self$getSelf2 === void 0 ? void 0 : _o$Foo$self$getSelf2.m.bind(_o$Foo$self$getSelf2))();
|
||||||
((_fn$Foo$self$getSelf = ((_fn = fn()) === null || _fn === void 0 ? void 0 : (_fn$Foo = _fn.Foo) === null || _fn$Foo === void 0 ? void 0 : (_fn$Foo$self = _fn$Foo.self).getSelf.bind(_fn$Foo$self))()) === null || _fn$Foo$self$getSelf === void 0 ? void 0 : _fn$Foo$self$getSelf.m.bind(_fn$Foo$self$getSelf))();
|
((_fn$Foo$self$getSelf = ((_fn = fn()) === null || _fn === void 0 ? void 0 : (_fn$Foo = _fn.Foo) === null || _fn$Foo === void 0 ? void 0 : (_fn$Foo$self = _fn$Foo.self).getSelf.bind(_fn$Foo$self))()) === null || _fn$Foo$self$getSelf === void 0 ? void 0 : _fn$Foo$self$getSelf.m.bind(_fn$Foo$self$getSelf))();
|
||||||
((_fn$Foo$self$getSelf2 = (fn === null || fn === void 0 ? void 0 : (_fn$Foo$self3 = _fn$Foo$self2 = fn().Foo.self) === null || _fn$Foo$self3 === void 0 ? void 0 : _fn$Foo$self3.getSelf.bind(_fn$Foo$self2))()) === null || _fn$Foo$self$getSelf2 === void 0 ? void 0 : _fn$Foo$self$getSelf2.m.bind(_fn$Foo$self$getSelf2))();
|
((_fn$Foo$self$getSelf2 = (fn === null || fn === void 0 ? void 0 : (_fn$Foo$self2 = fn().Foo.self) === null || _fn$Foo$self2 === void 0 ? void 0 : _fn$Foo$self2.getSelf.bind(_fn$Foo$self2))()) === null || _fn$Foo$self$getSelf2 === void 0 ? void 0 : _fn$Foo$self$getSelf2.m.bind(_fn$Foo$self$getSelf2))();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user