destructuring private fields with array pattern / object patte… (#10017)
* destructuring private fields with array pattern / object pattern * wip: new test cases * destrucuring and rest for private properties * test case for loose private-loose * add transform-desturcturing for exec * update test case * remove getPrototypeOf imports from get and set * wip: destructure super assignment * throw "Destructuring to a super field is not supported yet." * fix tests and fix assignment pattern * remove CallExpression from AssignmentPattern
This commit is contained in:
parent
7f47cb65d0
commit
d3fe22f0e1
@ -211,6 +211,19 @@ const privateNameHandlerSpec = {
|
|||||||
]);
|
]);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
destructureSet(member) {
|
||||||
|
const { privateNamesMap, file } = this;
|
||||||
|
const { name } = member.node.property.id;
|
||||||
|
const { id } = privateNamesMap.get(name);
|
||||||
|
return t.memberExpression(
|
||||||
|
t.callExpression(file.addHelper("classPrivateFieldDestructureSet"), [
|
||||||
|
this.receiver(member),
|
||||||
|
t.cloneNode(id),
|
||||||
|
]),
|
||||||
|
t.identifier("value"),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
call(member, args) {
|
call(member, args) {
|
||||||
// The first access (the get) should do the memo assignment.
|
// The first access (the get) should do the memo assignment.
|
||||||
this.memoise(member, 1);
|
this.memoise(member, 1);
|
||||||
|
|||||||
@ -100,6 +100,34 @@ const handle = {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// { KEY: MEMBER } = OBJ -> { KEY: _destructureSet(MEMBER) } = OBJ
|
||||||
|
// { KEY: MEMBER = _VALUE } = OBJ -> { KEY: _destructureSet(MEMBER) = _VALUE } = OBJ
|
||||||
|
// {...MEMBER} -> {..._destructureSet(MEMBER)}
|
||||||
|
//
|
||||||
|
// [MEMBER] = ARR -> [_destructureSet(MEMBER)] = ARR
|
||||||
|
// [MEMBER = _VALUE] = ARR -> [_destructureSet(MEMBER) = _VALUE] = ARR
|
||||||
|
// [...MEMBER] -> [..._destructureSet(MEMBER)]
|
||||||
|
if (
|
||||||
|
// { KEY: MEMBER } = OBJ
|
||||||
|
(parentPath.isObjectProperty({ value: node }) &&
|
||||||
|
parentPath.parentPath.isObjectPattern()) ||
|
||||||
|
// { KEY: MEMBER = _VALUE } = OBJ
|
||||||
|
(parentPath.isAssignmentPattern({ left: node }) &&
|
||||||
|
parentPath.parentPath.isObjectProperty({ value: parent }) &&
|
||||||
|
parentPath.parentPath.parentPath.isObjectPattern()) ||
|
||||||
|
// [MEMBER] = ARR
|
||||||
|
parentPath.isArrayPattern() ||
|
||||||
|
// [MEMBER = _VALUE] = ARR
|
||||||
|
(parentPath.isAssignmentPattern({ left: node }) &&
|
||||||
|
parentPath.parentPath.isArrayPattern()) ||
|
||||||
|
// {...MEMBER}
|
||||||
|
// [...MEMBER]
|
||||||
|
parentPath.isRestElement()
|
||||||
|
) {
|
||||||
|
member.replaceWith(this.destructureSet(member));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// MEMBER -> _get(MEMBER)
|
// MEMBER -> _get(MEMBER)
|
||||||
member.replaceWith(this.get(member));
|
member.replaceWith(this.get(member));
|
||||||
},
|
},
|
||||||
|
|||||||
@ -125,6 +125,12 @@ const specHandlers = {
|
|||||||
]);
|
]);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
destructureSet(superMember) {
|
||||||
|
throw superMember.buildCodeFrameError(
|
||||||
|
`Destructuring to a super field is not supported yet.`,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
call(superMember, args) {
|
call(superMember, args) {
|
||||||
return optimiseCall(this.get(superMember), t.thisExpression(), args);
|
return optimiseCall(this.get(superMember), t.thisExpression(), args);
|
||||||
},
|
},
|
||||||
@ -174,6 +180,13 @@ const looseHandlers = {
|
|||||||
value,
|
value,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
destructureSet(superMember) {
|
||||||
|
const { computed } = superMember.node;
|
||||||
|
const prop = this.prop(superMember);
|
||||||
|
|
||||||
|
return t.memberExpression(t.thisExpression(), prop, computed);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default class ReplaceSupers {
|
export default class ReplaceSupers {
|
||||||
|
|||||||
@ -720,7 +720,6 @@ helpers.superPropBase = helper("7.0.0-beta.0")`
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
helpers.get = helper("7.0.0-beta.0")`
|
helpers.get = helper("7.0.0-beta.0")`
|
||||||
import getPrototypeOf from "getPrototypeOf";
|
|
||||||
import superPropBase from "superPropBase";
|
import superPropBase from "superPropBase";
|
||||||
|
|
||||||
export default function _get(target, property, receiver) {
|
export default function _get(target, property, receiver) {
|
||||||
@ -745,7 +744,6 @@ helpers.get = helper("7.0.0-beta.0")`
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
helpers.set = helper("7.0.0-beta.0")`
|
helpers.set = helper("7.0.0-beta.0")`
|
||||||
import getPrototypeOf from "getPrototypeOf";
|
|
||||||
import superPropBase from "superPropBase";
|
import superPropBase from "superPropBase";
|
||||||
import defineProperty from "defineProperty";
|
import defineProperty from "defineProperty";
|
||||||
|
|
||||||
@ -1123,6 +1121,34 @@ helpers.classPrivateFieldSet = helper("7.0.0-beta.0")`
|
|||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
helpers.classPrivateFieldDestructureSet = helper("7.4.4")`
|
||||||
|
export default function _classPrivateFieldDestructureSet(receiver, privateMap) {
|
||||||
|
if (!privateMap.has(receiver)) {
|
||||||
|
throw new TypeError("attempted to set private field on non-instance");
|
||||||
|
}
|
||||||
|
var descriptor = privateMap.get(receiver);
|
||||||
|
if (descriptor.set) {
|
||||||
|
if (!("__destrObj" in descriptor)) {
|
||||||
|
descriptor.__destrObj = {
|
||||||
|
set value(v) {
|
||||||
|
descriptor.set.call(receiver, v)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return descriptor.__destrObj;
|
||||||
|
} else {
|
||||||
|
if (!descriptor.writable) {
|
||||||
|
// This should only throw in strict mode, but class bodies are
|
||||||
|
// always strict and private fields can only be used inside
|
||||||
|
// class bodies.
|
||||||
|
throw new TypeError("attempted to set read only private field");
|
||||||
|
}
|
||||||
|
|
||||||
|
return descriptor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
helpers.classStaticPrivateFieldSpecGet = helper("7.0.2")`
|
helpers.classStaticPrivateFieldSpecGet = helper("7.0.2")`
|
||||||
export default function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {
|
export default function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {
|
||||||
if (receiver !== classConstructor) {
|
if (receiver !== classConstructor) {
|
||||||
|
|||||||
@ -0,0 +1,17 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
this.#client = 1;
|
||||||
|
;([this.x = this.#client, this.#client, this.y = this.#client] = props);
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo([undefined, 'bar']);
|
||||||
|
expect(foo.getClient()).toBe('bar');
|
||||||
|
expect(foo.x).toBe(1);
|
||||||
|
expect(foo.y).toBe('bar');
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
this.#client = 1;
|
||||||
|
([this.x = this.#client, this.#client, this.y = this.#client] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
Object.defineProperty(this, _client, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
babelHelpers.classPrivateFieldLooseBase(this, _client)[_client] = 1;
|
||||||
|
[this.x = babelHelpers.classPrivateFieldLooseBase(this, _client)[_client], babelHelpers.classPrivateFieldLooseBase(this, _client)[_client], this.y = babelHelpers.classPrivateFieldLooseBase(this, _client)[_client]] = props;
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = babelHelpers.classPrivateFieldLooseKey("client");
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
let x;
|
||||||
|
;([x, ...this.#client] = props);
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo(['foo', 'bar', 'baz', 'quu']);
|
||||||
|
expect(foo.getClient()).toEqual(['bar', 'baz', 'quu']);
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
([x, ...this.#client] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
Object.defineProperty(this, _client, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
[x, ...babelHelpers.classPrivateFieldLooseBase(this, _client)[_client]] = props;
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = babelHelpers.classPrivateFieldLooseKey("client");
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
([this.#client = 5] = props);
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo([]);
|
||||||
|
expect(foo.getClient()).toEqual(5);
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
([this.#client = 5] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
Object.defineProperty(this, _client, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
[babelHelpers.classPrivateFieldLooseBase(this, _client)[_client] = 5] = props;
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = babelHelpers.classPrivateFieldLooseKey("client");
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
;([this.#client] = props);
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo(['bar']);
|
||||||
|
expect(foo.getClient()).toBe('bar');
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
([this.#client] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
Object.defineProperty(this, _client, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
[babelHelpers.classPrivateFieldLooseBase(this, _client)[_client]] = props;
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = babelHelpers.classPrivateFieldLooseKey("client");
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
this.#client = 'foo';
|
||||||
|
;({ x: this.x = this.#client, y: this.#client, z: this.z = this.#client } = props)
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo({ y: 'bar' });
|
||||||
|
expect(foo.getClient()).toBe('bar');
|
||||||
|
expect(foo.x).toBe('foo');
|
||||||
|
expect(foo.z).toBe('bar');
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
this.#client = 'foo';
|
||||||
|
({ x: this.x = this.#client, y: this.#client, z: this.z = this.#client } = props)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
Object.defineProperty(this, _client, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
babelHelpers.classPrivateFieldLooseBase(this, _client)[_client] = 'foo';
|
||||||
|
({
|
||||||
|
x: this.x = babelHelpers.classPrivateFieldLooseBase(this, _client)[_client],
|
||||||
|
y: babelHelpers.classPrivateFieldLooseBase(this, _client)[_client],
|
||||||
|
z: this.z = babelHelpers.classPrivateFieldLooseBase(this, _client)[_client]
|
||||||
|
} = props);
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = babelHelpers.classPrivateFieldLooseKey("client");
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
let x;
|
||||||
|
;({ x, ...this.#client } = props)
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo({ x: 'foo', y: 'bar', z: 'baz' });
|
||||||
|
expect(foo.getClient()).toEqual({ y: 'bar', z: 'baz' });
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"transform-destructuring",
|
||||||
|
[
|
||||||
|
"external-helpers",
|
||||||
|
{
|
||||||
|
"helperVersion": "7.4.4"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"proposal-class-properties",
|
||||||
|
"transform-classes",
|
||||||
|
"transform-block-scoping",
|
||||||
|
"syntax-class-properties"
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
({ x, ...this.#client } = props)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
Object.defineProperty(this, _client, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
({
|
||||||
|
x,
|
||||||
|
...babelHelpers.classPrivateFieldLooseBase(this, _client)[_client]
|
||||||
|
} = props);
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = babelHelpers.classPrivateFieldLooseKey("client");
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
({ client: this.#client = 5 } = props);
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo({});
|
||||||
|
expect(foo.getClient()).toEqual(5);
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
({ client: this.#client = 5 } = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
Object.defineProperty(this, _client, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
({
|
||||||
|
client: babelHelpers.classPrivateFieldLooseBase(this, _client)[_client] = 5
|
||||||
|
} = props);
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = babelHelpers.classPrivateFieldLooseKey("client");
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
;({ client: this.#client } = props)
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo({ client: 'bar' });
|
||||||
|
expect(foo.getClient()).toBe('bar');
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
({ client: this.#client } = props)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
Object.defineProperty(this, _client, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
({
|
||||||
|
client: babelHelpers.classPrivateFieldLooseBase(this, _client)[_client]
|
||||||
|
} = props);
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = babelHelpers.classPrivateFieldLooseKey("client");
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
this.#client = 1;
|
||||||
|
;([this.x = this.#client, this.#client, this.y = this.#client] = props);
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo([undefined, 'bar']);
|
||||||
|
expect(foo.getClient()).toBe('bar');
|
||||||
|
expect(foo.x).toBe(1);
|
||||||
|
expect(foo.y).toBe('bar');
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
this.#client = 1;
|
||||||
|
([this.x = this.#client, this.#client, this.y = this.#client] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_client.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
|
||||||
|
babelHelpers.classPrivateFieldSet(this, _client, 1);
|
||||||
|
[this.x = babelHelpers.classPrivateFieldGet(this, _client), babelHelpers.classPrivateFieldDestructureSet(this, _client).value, this.y = babelHelpers.classPrivateFieldGet(this, _client)] = props;
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = new WeakMap();
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
let x;
|
||||||
|
;([x, ...this.#client] = props);
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo(['foo', 'bar', 'baz', 'quu']);
|
||||||
|
expect(foo.getClient()).toEqual(['bar', 'baz', 'quu']);
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
([x, ...this.#client] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_client.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
|
||||||
|
[x, ...babelHelpers.classPrivateFieldDestructureSet(this, _client).value] = props;
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = new WeakMap();
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
([this.#client = 5] = props);
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo([]);
|
||||||
|
expect(foo.getClient()).toEqual(5);
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
([this.#client = 5] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_client.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
|
||||||
|
[babelHelpers.classPrivateFieldDestructureSet(this, _client).value = 5] = props;
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = new WeakMap();
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
;([this.#client] = props);
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo(['bar']);
|
||||||
|
expect(foo.getClient()).toBe('bar');
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
([this.#client] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_client.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
|
||||||
|
[babelHelpers.classPrivateFieldDestructureSet(this, _client).value] = props;
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = new WeakMap();
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
this.#client = 'foo';
|
||||||
|
;({ x: this.x = this.#client, y: this.#client, z: this.z = this.#client } = props)
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo({ y: 'bar' });
|
||||||
|
expect(foo.getClient()).toBe('bar');
|
||||||
|
expect(foo.x).toBe('foo');
|
||||||
|
expect(foo.z).toBe('bar');
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
this.#client = 'foo';
|
||||||
|
({ x: this.x = this.#client, y: this.#client, z: this.z = this.#client } = props)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_client.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
|
||||||
|
babelHelpers.classPrivateFieldSet(this, _client, 'foo');
|
||||||
|
({
|
||||||
|
x: this.x = babelHelpers.classPrivateFieldGet(this, _client),
|
||||||
|
y: babelHelpers.classPrivateFieldDestructureSet(this, _client).value,
|
||||||
|
z: this.z = babelHelpers.classPrivateFieldGet(this, _client)
|
||||||
|
} = props);
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = new WeakMap();
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
let x;
|
||||||
|
;({ x, ...this.#client } = props)
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo({ x: 'foo', y: 'bar', z: 'baz' });
|
||||||
|
expect(foo.getClient()).toEqual({ y: 'bar', z: 'baz' });
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"transform-destructuring",
|
||||||
|
[
|
||||||
|
"external-helpers",
|
||||||
|
{
|
||||||
|
"helperVersion": "7.4.4"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"proposal-class-properties",
|
||||||
|
"transform-classes",
|
||||||
|
"transform-block-scoping",
|
||||||
|
"syntax-class-properties"
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
({ x, ...this.#client } = props)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_client.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
|
||||||
|
({
|
||||||
|
x,
|
||||||
|
...babelHelpers.classPrivateFieldDestructureSet(this, _client).value
|
||||||
|
} = props);
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = new WeakMap();
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
({x: this.#client = 5} = props);
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo({});
|
||||||
|
expect(foo.getClient()).toEqual(5);
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
({x: this.#client = 5} = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_client.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
|
||||||
|
({
|
||||||
|
x: babelHelpers.classPrivateFieldDestructureSet(this, _client).value = 5
|
||||||
|
} = props);
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = new WeakMap();
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
;({ client: this.#client } = props)
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient() {
|
||||||
|
return this.#client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const foo = new Foo({ client: 'bar' });
|
||||||
|
expect(foo.getClient()).toBe('bar');
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#client
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
({ client: this.#client } = props)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
var Foo = function Foo(props) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_client.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: void 0
|
||||||
|
});
|
||||||
|
|
||||||
|
({
|
||||||
|
client: babelHelpers.classPrivateFieldDestructureSet(this, _client).value
|
||||||
|
} = props);
|
||||||
|
};
|
||||||
|
|
||||||
|
var _client = new WeakMap();
|
||||||
@ -3,7 +3,7 @@
|
|||||||
[
|
[
|
||||||
"external-helpers",
|
"external-helpers",
|
||||||
{
|
{
|
||||||
"helperVersion": "7.0.2"
|
"helperVersion": "7.4.4"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"proposal-class-properties",
|
"proposal-class-properties",
|
||||||
|
|||||||
@ -0,0 +1,5 @@
|
|||||||
|
class Foo {
|
||||||
|
constructor(props) {
|
||||||
|
;([x, ...super.client] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"external-helpers",
|
||||||
|
"proposal-class-properties",
|
||||||
|
"transform-classes",
|
||||||
|
"transform-block-scoping",
|
||||||
|
"syntax-class-properties"
|
||||||
|
],
|
||||||
|
"throws": "Destructuring to a super field is not supported yet."
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
class Foo {
|
||||||
|
constructor(props) {
|
||||||
|
;([super.client] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"external-helpers",
|
||||||
|
"proposal-class-properties",
|
||||||
|
"transform-classes",
|
||||||
|
"transform-block-scoping",
|
||||||
|
"syntax-class-properties"
|
||||||
|
],
|
||||||
|
"throws": "Destructuring to a super field is not supported yet."
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
class Foo {
|
||||||
|
constructor(props) {
|
||||||
|
;({ x, ...super.client } = props)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"external-helpers",
|
||||||
|
"proposal-class-properties",
|
||||||
|
"transform-classes",
|
||||||
|
"transform-block-scoping",
|
||||||
|
"syntax-class-properties"
|
||||||
|
],
|
||||||
|
"throws": "Destructuring to a super field is not supported yet."
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
class Foo {
|
||||||
|
constructor(props) {
|
||||||
|
;({ client: super.client } = props)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"external-helpers",
|
||||||
|
"proposal-class-properties",
|
||||||
|
"transform-classes",
|
||||||
|
"transform-block-scoping",
|
||||||
|
"syntax-class-properties"
|
||||||
|
],
|
||||||
|
"throws": "Destructuring to a super field is not supported yet."
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
class Foo {
|
||||||
|
foo(props) {
|
||||||
|
;([x, ...super.client] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
var Foo =
|
||||||
|
/*#__PURE__*/
|
||||||
|
function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {}
|
||||||
|
|
||||||
|
var _proto = Foo.prototype;
|
||||||
|
|
||||||
|
_proto.foo = function foo(props) {
|
||||||
|
;
|
||||||
|
[x, ...this.client] = props;
|
||||||
|
};
|
||||||
|
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
class Foo {
|
||||||
|
foo(props) {
|
||||||
|
;([super.client] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
var Foo =
|
||||||
|
/*#__PURE__*/
|
||||||
|
function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {}
|
||||||
|
|
||||||
|
var _proto = Foo.prototype;
|
||||||
|
|
||||||
|
_proto.foo = function foo(props) {
|
||||||
|
;
|
||||||
|
[this.client] = props;
|
||||||
|
};
|
||||||
|
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
class Foo {
|
||||||
|
foo(props) {
|
||||||
|
;({ x, ...super.client } = props)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
var Foo =
|
||||||
|
/*#__PURE__*/
|
||||||
|
function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {}
|
||||||
|
|
||||||
|
var _proto = Foo.prototype;
|
||||||
|
|
||||||
|
_proto.foo = function foo(props) {
|
||||||
|
;
|
||||||
|
({
|
||||||
|
x,
|
||||||
|
...this.client
|
||||||
|
} = props);
|
||||||
|
};
|
||||||
|
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
class Foo {
|
||||||
|
foo(props) {
|
||||||
|
;({ client: super.client } = props)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
var Foo =
|
||||||
|
/*#__PURE__*/
|
||||||
|
function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {}
|
||||||
|
|
||||||
|
var _proto = Foo.prototype;
|
||||||
|
|
||||||
|
_proto.foo = function foo(props) {
|
||||||
|
;
|
||||||
|
({
|
||||||
|
client: this.client
|
||||||
|
} = props);
|
||||||
|
};
|
||||||
|
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
class Foo {
|
||||||
|
constructor(props) {
|
||||||
|
;([x, ...super.client] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"external-helpers",
|
||||||
|
"transform-function-name",
|
||||||
|
"transform-classes",
|
||||||
|
"transform-spread",
|
||||||
|
"transform-block-scoping"
|
||||||
|
],
|
||||||
|
"throws": "Destructuring to a super field is not supported yet."
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
class Foo {
|
||||||
|
constructor(props) {
|
||||||
|
;([super.client] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"external-helpers",
|
||||||
|
"transform-function-name",
|
||||||
|
"transform-classes",
|
||||||
|
"transform-spread",
|
||||||
|
"transform-block-scoping"
|
||||||
|
],
|
||||||
|
"throws": "Destructuring to a super field is not supported yet."
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
class Foo {
|
||||||
|
constructor(props) {
|
||||||
|
;({ x, ...super.client } = props)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"external-helpers",
|
||||||
|
"transform-function-name",
|
||||||
|
"transform-classes",
|
||||||
|
"transform-spread",
|
||||||
|
"transform-block-scoping"
|
||||||
|
],
|
||||||
|
"throws": "Destructuring to a super field is not supported yet."
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
class Foo {
|
||||||
|
constructor(props) {
|
||||||
|
;({ client: super.client } = props)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"external-helpers",
|
||||||
|
"transform-function-name",
|
||||||
|
"transform-classes",
|
||||||
|
"transform-spread",
|
||||||
|
"transform-block-scoping"
|
||||||
|
],
|
||||||
|
"throws": "Destructuring to a super field is not supported yet."
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
const foo = {
|
||||||
|
bar(props) {
|
||||||
|
;([x, ...super.client] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"external-helpers",
|
||||||
|
"transform-object-super",
|
||||||
|
"transform-shorthand-properties"
|
||||||
|
],
|
||||||
|
"throws": "Destructuring to a super field is not supported yet."
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
const foo = {
|
||||||
|
bar(props) {
|
||||||
|
;([super.client] = props);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"external-helpers",
|
||||||
|
"transform-object-super",
|
||||||
|
"transform-shorthand-properties"
|
||||||
|
],
|
||||||
|
"throws": "Destructuring to a super field is not supported yet."
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
const foo = {
|
||||||
|
bar(props) {
|
||||||
|
;({ x, ...super.client } = props)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"external-helpers",
|
||||||
|
"transform-object-super",
|
||||||
|
"transform-shorthand-properties"
|
||||||
|
],
|
||||||
|
"throws": "Destructuring to a super field is not supported yet."
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
const foo = {
|
||||||
|
bar(props) {
|
||||||
|
;({ client: super.client } = props)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"external-helpers",
|
||||||
|
"transform-object-super",
|
||||||
|
"transform-shorthand-properties"
|
||||||
|
],
|
||||||
|
"throws": "Destructuring to a super field is not supported yet."
|
||||||
|
}
|
||||||
@ -20,7 +20,12 @@ defineType("AssignmentPattern", {
|
|||||||
fields: {
|
fields: {
|
||||||
...patternLikeCommon,
|
...patternLikeCommon,
|
||||||
left: {
|
left: {
|
||||||
validate: assertNodeType("Identifier", "ObjectPattern", "ArrayPattern"),
|
validate: assertNodeType(
|
||||||
|
"Identifier",
|
||||||
|
"ObjectPattern",
|
||||||
|
"ArrayPattern",
|
||||||
|
"MemberExpression",
|
||||||
|
),
|
||||||
},
|
},
|
||||||
right: {
|
right: {
|
||||||
validate: assertNodeType("Expression"),
|
validate: assertNodeType("Expression"),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user