Add private-property-in-object support (#11372)
https://github.com/tc39/proposal-private-fields-in-in Co-Authored-By: Nicolò Ribaudo <nicolo.ribaudo@gmail.com> Co-Authored-By: Huáng Jùnliàng <jlhwung@gmail.com>
This commit is contained in:
parent
2d27cf819e
commit
7459038db8
@ -1,9 +1,3 @@
|
|||||||
{
|
{
|
||||||
"args": [
|
"args": ["src", "--out-dir", "lib", "--copy-files", "--verbose"]
|
||||||
"src",
|
|
||||||
"--out-dir",
|
|
||||||
"lib",
|
|
||||||
"--copy-files",
|
|
||||||
"--verbose"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,3 @@
|
|||||||
{
|
{
|
||||||
"args": [
|
"args": ["src", "--out-dir", "lib", "--copy-files", "--verbose"]
|
||||||
"src",
|
|
||||||
"--out-dir",
|
|
||||||
"lib",
|
|
||||||
"--copy-files",
|
|
||||||
"--verbose"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,9 @@
|
|||||||
{
|
{
|
||||||
"args": ["--out-file", "script2.js", "--no-comments", "--minified", "script.js"]
|
"args": [
|
||||||
|
"--out-file",
|
||||||
|
"script2.js",
|
||||||
|
"--no-comments",
|
||||||
|
"--minified",
|
||||||
|
"script.js"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,6 +5,7 @@ export const FEATURES = Object.freeze({
|
|||||||
fields: 1 << 1,
|
fields: 1 << 1,
|
||||||
privateMethods: 1 << 2,
|
privateMethods: 1 << 2,
|
||||||
decorators: 1 << 3,
|
decorators: 1 << 3,
|
||||||
|
privateIn: 1 << 4,
|
||||||
});
|
});
|
||||||
|
|
||||||
// We can't use a symbol because this needs to always be the same, even if
|
// We can't use a symbol because this needs to always be the same, even if
|
||||||
@ -28,6 +29,39 @@ export function enableFeature(file, feature, loose) {
|
|||||||
file.set(featuresKey, file.get(featuresKey) | feature);
|
file.set(featuresKey, file.get(featuresKey) | feature);
|
||||||
if (loose) file.set(looseKey, file.get(looseKey) | feature);
|
if (loose) file.set(looseKey, file.get(looseKey) | feature);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
hasFeature(file, FEATURES.fields) &&
|
||||||
|
hasFeature(file, FEATURES.privateMethods) &&
|
||||||
|
isLoose(file, FEATURES.fields) !== isLoose(file, FEATURES.privateMethods)
|
||||||
|
) {
|
||||||
|
throw new Error(
|
||||||
|
"'loose' mode configuration must be the same for both @babel/plugin-proposal-class-properties " +
|
||||||
|
"and @babel/plugin-proposal-private-methods",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
hasFeature(file, FEATURES.fields) &&
|
||||||
|
hasFeature(file, FEATURES.privateIn) &&
|
||||||
|
isLoose(file, FEATURES.fields) !== isLoose(file, FEATURES.privateIn)
|
||||||
|
) {
|
||||||
|
throw new Error(
|
||||||
|
"'loose' mode configuration must be the same for both @babel/plugin-proposal-class-properties " +
|
||||||
|
"and @babel/plugin-proposal-private-property-in-object",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
hasFeature(file, FEATURES.privateMethods) &&
|
||||||
|
hasFeature(file, FEATURES.privateIn) &&
|
||||||
|
isLoose(file, FEATURES.privateMethods) !== isLoose(file, FEATURES.privateIn)
|
||||||
|
) {
|
||||||
|
throw new Error(
|
||||||
|
"'loose' mode configuration must be the same for both @babel/plugin-proposal-private-methods " +
|
||||||
|
"and @babel/plugin-proposal-private-property-in-object",
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function hasFeature(file, feature) {
|
function hasFeature(file, feature) {
|
||||||
@ -69,15 +103,18 @@ export function verifyUsedFeatures(path, file) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
hasFeature(file, FEATURES.privateMethods) &&
|
path.isPrivateName() &&
|
||||||
hasFeature(file, FEATURES.fields) &&
|
path.parentPath.isBinaryExpression({
|
||||||
isLoose(file, FEATURES.privateMethods) !== isLoose(file, FEATURES.fields)
|
operator: "in",
|
||||||
|
left: path.node,
|
||||||
|
})
|
||||||
) {
|
) {
|
||||||
|
if (!hasFeature(file, FEATURES.privateIn)) {
|
||||||
throw path.buildCodeFrameError(
|
throw path.buildCodeFrameError(
|
||||||
"'loose' mode configuration must be the same for both @babel/plugin-proposal-class-properties " +
|
"Private property in checks are not enabled.",
|
||||||
"and @babel/plugin-proposal-private-methods",
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (path.isProperty()) {
|
if (path.isProperty()) {
|
||||||
if (!hasFeature(file, FEATURES.fields)) {
|
if (!hasFeature(file, FEATURES.fields)) {
|
||||||
|
|||||||
@ -70,16 +70,9 @@ export function buildPrivateNamesNodes(privateNamesMap, loose, state) {
|
|||||||
// Traverses the class scope, handling private name references. If an inner
|
// Traverses the class scope, handling private name references. If an inner
|
||||||
// class redeclares the same private name, it will hand off traversal to the
|
// class redeclares the same private name, it will hand off traversal to the
|
||||||
// restricted visitor (which doesn't traverse the inner class's inner scope).
|
// restricted visitor (which doesn't traverse the inner class's inner scope).
|
||||||
const privateNameVisitor = {
|
function privateNameVisitorFactory(visitor) {
|
||||||
PrivateName(path) {
|
const privateNameVisitor = {
|
||||||
const { privateNamesMap } = this;
|
...visitor,
|
||||||
const { node, parentPath } = path;
|
|
||||||
|
|
||||||
if (!parentPath.isMemberExpression({ property: node })) return;
|
|
||||||
if (!privateNamesMap.has(node.id.name)) return;
|
|
||||||
|
|
||||||
this.handle(parentPath);
|
|
||||||
},
|
|
||||||
|
|
||||||
Class(path) {
|
Class(path) {
|
||||||
const { privateNamesMap } = this;
|
const { privateNamesMap } = this;
|
||||||
@ -103,7 +96,7 @@ const privateNameVisitor = {
|
|||||||
// This class redeclares some private field. We need to process the outer
|
// This class redeclares some private field. We need to process the outer
|
||||||
// environment with access to all the outer privates, then we can process
|
// environment with access to all the outer privates, then we can process
|
||||||
// the inner environment with only the still-visible outer privates.
|
// the inner environment with only the still-visible outer privates.
|
||||||
path.get("body").traverse(privateNameNestedVisitor, {
|
path.get("body").traverse(nestedVisitor, {
|
||||||
...this,
|
...this,
|
||||||
redeclared,
|
redeclared,
|
||||||
});
|
});
|
||||||
@ -116,23 +109,65 @@ const privateNameVisitor = {
|
|||||||
// Features visitor, which'll process the redeclared privates.
|
// Features visitor, which'll process the redeclared privates.
|
||||||
path.skipKey("body");
|
path.skipKey("body");
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// Traverses the outer portion of a class, without touching the class's inner
|
// Traverses the outer portion of a class, without touching the class's inner
|
||||||
// scope, for private names.
|
// scope, for private names.
|
||||||
const privateNameNestedVisitor = traverse.visitors.merge([
|
const nestedVisitor = traverse.visitors.merge([
|
||||||
{
|
{
|
||||||
PrivateName(path) {
|
...visitor,
|
||||||
const { redeclared } = this;
|
|
||||||
const { name } = path.node.id;
|
|
||||||
if (redeclared.includes(name)) path.skip();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
PrivateName: privateNameVisitor.PrivateName,
|
|
||||||
},
|
},
|
||||||
environmentVisitor,
|
environmentVisitor,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
return privateNameVisitor;
|
||||||
|
}
|
||||||
|
|
||||||
|
const privateNameVisitor = privateNameVisitorFactory({
|
||||||
|
PrivateName(path) {
|
||||||
|
const { privateNamesMap, redeclared } = this;
|
||||||
|
const { node, parentPath } = path;
|
||||||
|
|
||||||
|
if (!parentPath.isMemberExpression({ property: node })) return;
|
||||||
|
|
||||||
|
const { name } = node.id;
|
||||||
|
if (!privateNamesMap.has(name)) return;
|
||||||
|
if (redeclared && redeclared.includes(name)) return;
|
||||||
|
|
||||||
|
this.handle(parentPath);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const privateInVisitor = privateNameVisitorFactory({
|
||||||
|
BinaryExpression(path) {
|
||||||
|
const { operator, left, right } = path.node;
|
||||||
|
if (operator !== "in") return;
|
||||||
|
if (!path.get("left").isPrivateName()) return;
|
||||||
|
|
||||||
|
const { loose, privateNamesMap, redeclared } = this;
|
||||||
|
const { name } = left.id;
|
||||||
|
|
||||||
|
if (!privateNamesMap.has(name)) return;
|
||||||
|
if (redeclared && redeclared.includes(name)) return;
|
||||||
|
|
||||||
|
if (loose) {
|
||||||
|
const { id } = privateNamesMap.get(name);
|
||||||
|
path.replaceWith(template.expression.ast`
|
||||||
|
Object.prototype.hasOwnProperty.call(${right}, ${id})
|
||||||
|
`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { id, static: isStatic } = privateNamesMap.get(name);
|
||||||
|
|
||||||
|
if (isStatic) {
|
||||||
|
path.replaceWith(template.expression.ast`${right} === ${this.classRef}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
path.replaceWith(template.expression.ast`${id}.has(${right})`);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const privateNameHandlerSpec = {
|
const privateNameHandlerSpec = {
|
||||||
memoise(member, count) {
|
memoise(member, count) {
|
||||||
@ -306,6 +341,12 @@ export function transformPrivateNamesUsage(
|
|||||||
...privateNameHandlerSpec,
|
...privateNameHandlerSpec,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
body.traverse(privateInVisitor, {
|
||||||
|
privateNamesMap,
|
||||||
|
classRef: ref,
|
||||||
|
file: state,
|
||||||
|
loose,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildPrivateFieldInitLoose(ref, prop, privateNamesMap) {
|
function buildPrivateFieldInitLoose(ref, prop, privateNamesMap) {
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
{
|
{
|
||||||
"presets": [
|
"presets": [["typescript"]],
|
||||||
["typescript"]
|
|
||||||
],
|
|
||||||
"plugins": [
|
"plugins": [
|
||||||
["proposal-decorators", { "decoratorsBeforeExport": true }],
|
["proposal-decorators", { "decoratorsBeforeExport": true }],
|
||||||
["proposal-class-properties"]
|
["proposal-class-properties"]
|
||||||
|
|||||||
@ -27,6 +27,7 @@ import {
|
|||||||
isReservedWord,
|
isReservedWord,
|
||||||
isStrictReservedWord,
|
isStrictReservedWord,
|
||||||
isStrictBindReservedWord,
|
isStrictBindReservedWord,
|
||||||
|
isIdentifierStart,
|
||||||
} from "../util/identifier";
|
} from "../util/identifier";
|
||||||
import type { Pos, Position } from "../util/location";
|
import type { Pos, Position } from "../util/location";
|
||||||
import * as charCodes from "charcodes";
|
import * as charCodes from "charcodes";
|
||||||
@ -1148,6 +1149,26 @@ export default class ExpressionParser extends LValParser {
|
|||||||
this.registerTopicReference();
|
this.registerTopicReference();
|
||||||
return this.finishNode(node, "PipelinePrimaryTopicReference");
|
return this.finishNode(node, "PipelinePrimaryTopicReference");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const nextCh = this.input.codePointAt(this.state.end);
|
||||||
|
if (isIdentifierStart(nextCh) || nextCh === charCodes.backslash) {
|
||||||
|
const start = this.state.start;
|
||||||
|
// $FlowIgnore It'll either parse a PrivateName or throw.
|
||||||
|
node = (this.parseMaybePrivateName(true): N.PrivateName);
|
||||||
|
if (this.match(tt._in)) {
|
||||||
|
this.expectPlugin("privateIn");
|
||||||
|
this.classScope.usePrivateName(node.id.name, node.start);
|
||||||
|
} else if (this.hasPlugin("privateIn")) {
|
||||||
|
this.raise(
|
||||||
|
this.state.start,
|
||||||
|
Errors.PrivateInExpectedIn,
|
||||||
|
node.id.name,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
throw this.unexpected(start);
|
||||||
|
}
|
||||||
|
return node;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// fall through
|
// fall through
|
||||||
default:
|
default:
|
||||||
|
|||||||
@ -130,6 +130,8 @@ export const Errors = Object.freeze({
|
|||||||
"Topic reference was used in a lexical context without topic binding",
|
"Topic reference was used in a lexical context without topic binding",
|
||||||
PrimaryTopicRequiresSmartPipeline:
|
PrimaryTopicRequiresSmartPipeline:
|
||||||
"Primary Topic Reference found but pipelineOperator not passed 'smart' for 'proposal' option.",
|
"Primary Topic Reference found but pipelineOperator not passed 'smart' for 'proposal' option.",
|
||||||
|
PrivateInExpectedIn:
|
||||||
|
"Private names are only allowed in property accesses (`obj.#%0`) or in `in` expressions (`#%0 in obj`)",
|
||||||
PrivateNameRedeclaration: "Duplicate private name #%0",
|
PrivateNameRedeclaration: "Duplicate private name #%0",
|
||||||
RecordExpressionBarIncorrectEndSyntaxType:
|
RecordExpressionBarIncorrectEndSyntaxType:
|
||||||
"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'",
|
"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'",
|
||||||
|
|||||||
@ -1,5 +1,3 @@
|
|||||||
{
|
{
|
||||||
"plugins": [
|
"plugins": [["pipelineOperator", { "proposal": "minimal" }]]
|
||||||
["pipelineOperator", { "proposal": "minimal" }]
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
7
packages/babel-parser/test/fixtures/experimental/_no-plugin/private-in/input.js
vendored
Normal file
7
packages/babel-parser/test/fixtures/experimental/_no-plugin/private-in/input.js
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
class Point {
|
||||||
|
#x = 1;
|
||||||
|
#y = 2;
|
||||||
|
static isPoint(obj) {
|
||||||
|
return #x in obj && #y in obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
6
packages/babel-parser/test/fixtures/experimental/_no-plugin/private-in/options.json
vendored
Normal file
6
packages/babel-parser/test/fixtures/experimental/_no-plugin/private-in/options.json
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"classPrivateProperties"
|
||||||
|
],
|
||||||
|
"throws": "This experimental syntax requires enabling the parser plugin: 'privateIn' (5:14)"
|
||||||
|
}
|
||||||
@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
"throws": "Unexpected token (3:3)",
|
"throws": "Unexpected token (3:3)",
|
||||||
"plugins": ["classProperties", "classPrivateMethods"]
|
"plugins": [
|
||||||
|
"classProperties",
|
||||||
|
"classPrivateMethods"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
"throws": "Unexpected token (4:11)",
|
"throws": "Unexpected token (4:11)",
|
||||||
"plugins": ["classPrivateProperties"]
|
"plugins": [
|
||||||
|
"classPrivateProperties"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,11 @@
|
|||||||
{
|
{
|
||||||
"plugins": [["pipelineOperator", { "proposal": "smart" }]],
|
"plugins": [
|
||||||
|
[
|
||||||
|
"pipelineOperator",
|
||||||
|
{
|
||||||
|
"proposal": "smart"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
"throws": "Unexpected token (1:4)"
|
"throws": "Unexpected token (1:4)"
|
||||||
}
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
class Foo {
|
||||||
|
#x = 1;
|
||||||
|
test() {
|
||||||
|
#x + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["classPrivateProperties", "privateIn"]
|
||||||
|
}
|
||||||
@ -0,0 +1,105 @@
|
|||||||
|
{
|
||||||
|
"type": "File",
|
||||||
|
"start":0,"end":50,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"errors": [
|
||||||
|
"SyntaxError: Private names are only allowed in property accesses (`obj.#x`) or in `in` expressions (`#x in obj`) (4:7)"
|
||||||
|
],
|
||||||
|
"program": {
|
||||||
|
"type": "Program",
|
||||||
|
"start":0,"end":50,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"sourceType": "script",
|
||||||
|
"interpreter": null,
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":0,"end":50,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"superClass": null,
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":10,"end":50,"loc":{"start":{"line":1,"column":10},"end":{"line":6,"column":1}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassPrivateProperty",
|
||||||
|
"start":14,"end":21,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":9}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":14,"end":16,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":4}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":15,"end":16,"loc":{"start":{"line":2,"column":3},"end":{"line":2,"column":4},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":19,"end":20,"loc":{"start":{"line":2,"column":7},"end":{"line":2,"column":8}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 1,
|
||||||
|
"raw": "1"
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ClassMethod",
|
||||||
|
"start":24,"end":48,"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":24,"end":28,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":6},"identifierName":"test"},
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"kind": "method",
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":31,"end":48,"loc":{"start":{"line":3,"column":9},"end":{"line":5,"column":3}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ExpressionStatement",
|
||||||
|
"start":37,"end":44,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":11}},
|
||||||
|
"expression": {
|
||||||
|
"type": "BinaryExpression",
|
||||||
|
"start":37,"end":43,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":10}},
|
||||||
|
"left": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":37,"end":39,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":6}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":38,"end":39,"loc":{"start":{"line":4,"column":5},"end":{"line":4,"column":6},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"operator": "+",
|
||||||
|
"right": {
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":42,"end":43,"loc":{"start":{"line":4,"column":9},"end":{"line":4,"column":10}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 1,
|
||||||
|
"raw": "1"
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
class Foo {
|
||||||
|
#x = 1;
|
||||||
|
test() {
|
||||||
|
1 + #x;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["classPrivateProperties", "privateIn"]
|
||||||
|
}
|
||||||
@ -0,0 +1,105 @@
|
|||||||
|
{
|
||||||
|
"type": "File",
|
||||||
|
"start":0,"end":50,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"errors": [
|
||||||
|
"SyntaxError: Private names are only allowed in property accesses (`obj.#x`) or in `in` expressions (`#x in obj`) (4:10)"
|
||||||
|
],
|
||||||
|
"program": {
|
||||||
|
"type": "Program",
|
||||||
|
"start":0,"end":50,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"sourceType": "script",
|
||||||
|
"interpreter": null,
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":0,"end":50,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"superClass": null,
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":10,"end":50,"loc":{"start":{"line":1,"column":10},"end":{"line":6,"column":1}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassPrivateProperty",
|
||||||
|
"start":14,"end":21,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":9}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":14,"end":16,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":4}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":15,"end":16,"loc":{"start":{"line":2,"column":3},"end":{"line":2,"column":4},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":19,"end":20,"loc":{"start":{"line":2,"column":7},"end":{"line":2,"column":8}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 1,
|
||||||
|
"raw": "1"
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ClassMethod",
|
||||||
|
"start":24,"end":48,"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":24,"end":28,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":6},"identifierName":"test"},
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"kind": "method",
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":31,"end":48,"loc":{"start":{"line":3,"column":9},"end":{"line":5,"column":3}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ExpressionStatement",
|
||||||
|
"start":37,"end":44,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":11}},
|
||||||
|
"expression": {
|
||||||
|
"type": "BinaryExpression",
|
||||||
|
"start":37,"end":43,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":10}},
|
||||||
|
"left": {
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":37,"end":38,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":5}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 1,
|
||||||
|
"raw": "1"
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
"operator": "+",
|
||||||
|
"right": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":41,"end":43,"loc":{"start":{"line":4,"column":8},"end":{"line":4,"column":10}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":42,"end":43,"loc":{"start":{"line":4,"column":9},"end":{"line":4,"column":10},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
6
packages/babel-parser/test/fixtures/experimental/private-in/private-expression/input.js
vendored
Normal file
6
packages/babel-parser/test/fixtures/experimental/private-in/private-expression/input.js
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
class Foo {
|
||||||
|
#x = 1;
|
||||||
|
test() {
|
||||||
|
#x;
|
||||||
|
}
|
||||||
|
}
|
||||||
3
packages/babel-parser/test/fixtures/experimental/private-in/private-expression/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/experimental/private-in/private-expression/options.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["classPrivateProperties", "privateIn"]
|
||||||
|
}
|
||||||
91
packages/babel-parser/test/fixtures/experimental/private-in/private-expression/output.json
vendored
Normal file
91
packages/babel-parser/test/fixtures/experimental/private-in/private-expression/output.json
vendored
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
{
|
||||||
|
"type": "File",
|
||||||
|
"start":0,"end":46,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"errors": [
|
||||||
|
"SyntaxError: Private names are only allowed in property accesses (`obj.#x`) or in `in` expressions (`#x in obj`) (4:6)"
|
||||||
|
],
|
||||||
|
"program": {
|
||||||
|
"type": "Program",
|
||||||
|
"start":0,"end":46,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"sourceType": "script",
|
||||||
|
"interpreter": null,
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":0,"end":46,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"superClass": null,
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":10,"end":46,"loc":{"start":{"line":1,"column":10},"end":{"line":6,"column":1}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassPrivateProperty",
|
||||||
|
"start":14,"end":21,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":9}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":14,"end":16,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":4}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":15,"end":16,"loc":{"start":{"line":2,"column":3},"end":{"line":2,"column":4},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":19,"end":20,"loc":{"start":{"line":2,"column":7},"end":{"line":2,"column":8}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 1,
|
||||||
|
"raw": "1"
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ClassMethod",
|
||||||
|
"start":24,"end":44,"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":24,"end":28,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":6},"identifierName":"test"},
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"kind": "method",
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":31,"end":44,"loc":{"start":{"line":3,"column":9},"end":{"line":5,"column":3}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ExpressionStatement",
|
||||||
|
"start":37,"end":40,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":7}},
|
||||||
|
"expression": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":37,"end":39,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":6}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":38,"end":39,"loc":{"start":{"line":4,"column":5},"end":{"line":4,"column":6},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
class Foo {
|
||||||
|
#x = 1;
|
||||||
|
test() {
|
||||||
|
class X extends (#x in {}) {};
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["classPrivateProperties", "privateIn"]
|
||||||
|
}
|
||||||
116
packages/babel-parser/test/fixtures/experimental/private-in/private-in-class-heritage/output.json
vendored
Normal file
116
packages/babel-parser/test/fixtures/experimental/private-in/private-in-class-heritage/output.json
vendored
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
{
|
||||||
|
"type": "File",
|
||||||
|
"start":0,"end":73,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"program": {
|
||||||
|
"type": "Program",
|
||||||
|
"start":0,"end":73,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"sourceType": "script",
|
||||||
|
"interpreter": null,
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":0,"end":73,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"superClass": null,
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":10,"end":73,"loc":{"start":{"line":1,"column":10},"end":{"line":6,"column":1}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassPrivateProperty",
|
||||||
|
"start":14,"end":21,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":9}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":14,"end":16,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":4}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":15,"end":16,"loc":{"start":{"line":2,"column":3},"end":{"line":2,"column":4},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":19,"end":20,"loc":{"start":{"line":2,"column":7},"end":{"line":2,"column":8}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 1,
|
||||||
|
"raw": "1"
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ClassMethod",
|
||||||
|
"start":24,"end":71,"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":24,"end":28,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":6},"identifierName":"test"},
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"kind": "method",
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":31,"end":71,"loc":{"start":{"line":3,"column":9},"end":{"line":5,"column":3}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":37,"end":66,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":33}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":43,"end":44,"loc":{"start":{"line":4,"column":10},"end":{"line":4,"column":11},"identifierName":"X"},
|
||||||
|
"name": "X"
|
||||||
|
},
|
||||||
|
"superClass": {
|
||||||
|
"type": "BinaryExpression",
|
||||||
|
"start":54,"end":62,"loc":{"start":{"line":4,"column":21},"end":{"line":4,"column":29}},
|
||||||
|
"left": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":54,"end":56,"loc":{"start":{"line":4,"column":21},"end":{"line":4,"column":23}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":55,"end":56,"loc":{"start":{"line":4,"column":22},"end":{"line":4,"column":23},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"operator": "in",
|
||||||
|
"right": {
|
||||||
|
"type": "ObjectExpression",
|
||||||
|
"start":60,"end":62,"loc":{"start":{"line":4,"column":27},"end":{"line":4,"column":29}},
|
||||||
|
"properties": []
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"parenthesized": true,
|
||||||
|
"parenStart": 53
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":64,"end":66,"loc":{"start":{"line":4,"column":31},"end":{"line":4,"column":33}},
|
||||||
|
"body": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "EmptyStatement",
|
||||||
|
"start":66,"end":67,"loc":{"start":{"line":4,"column":33},"end":{"line":4,"column":34}}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
class Foo {
|
||||||
|
#\u{61} = 1;
|
||||||
|
test() {
|
||||||
|
#\u{61} in {};
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["classPrivateProperties", "privateIn"]
|
||||||
|
}
|
||||||
@ -0,0 +1,98 @@
|
|||||||
|
{
|
||||||
|
"type": "File",
|
||||||
|
"start":0,"end":62,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"program": {
|
||||||
|
"type": "Program",
|
||||||
|
"start":0,"end":62,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"sourceType": "script",
|
||||||
|
"interpreter": null,
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":0,"end":62,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"superClass": null,
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":10,"end":62,"loc":{"start":{"line":1,"column":10},"end":{"line":6,"column":1}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassPrivateProperty",
|
||||||
|
"start":14,"end":26,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":14}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":14,"end":21,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":9}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":15,"end":21,"loc":{"start":{"line":2,"column":3},"end":{"line":2,"column":9},"identifierName":"a"},
|
||||||
|
"name": "a"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":24,"end":25,"loc":{"start":{"line":2,"column":12},"end":{"line":2,"column":13}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 1,
|
||||||
|
"raw": "1"
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ClassMethod",
|
||||||
|
"start":29,"end":60,"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":29,"end":33,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":6},"identifierName":"test"},
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"kind": "method",
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":36,"end":60,"loc":{"start":{"line":3,"column":9},"end":{"line":5,"column":3}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ExpressionStatement",
|
||||||
|
"start":42,"end":56,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":18}},
|
||||||
|
"expression": {
|
||||||
|
"type": "BinaryExpression",
|
||||||
|
"start":42,"end":55,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":17}},
|
||||||
|
"left": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":42,"end":49,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":11}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":43,"end":49,"loc":{"start":{"line":4,"column":5},"end":{"line":4,"column":11},"identifierName":"a"},
|
||||||
|
"name": "a"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"operator": "in",
|
||||||
|
"right": {
|
||||||
|
"type": "ObjectExpression",
|
||||||
|
"start":53,"end":55,"loc":{"start":{"line":4,"column":15},"end":{"line":4,"column":17}},
|
||||||
|
"properties": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
class Foo {
|
||||||
|
#x = 1;
|
||||||
|
test() {
|
||||||
|
(#x) in {};
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["classPrivateProperties", "privateIn"]
|
||||||
|
}
|
||||||
105
packages/babel-parser/test/fixtures/experimental/private-in/private-in-parenthesized/output.json
vendored
Normal file
105
packages/babel-parser/test/fixtures/experimental/private-in/private-in-parenthesized/output.json
vendored
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
{
|
||||||
|
"type": "File",
|
||||||
|
"start":0,"end":54,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"errors": [
|
||||||
|
"SyntaxError: Private names are only allowed in property accesses (`obj.#x`) or in `in` expressions (`#x in obj`) (4:7)"
|
||||||
|
],
|
||||||
|
"program": {
|
||||||
|
"type": "Program",
|
||||||
|
"start":0,"end":54,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"sourceType": "script",
|
||||||
|
"interpreter": null,
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":0,"end":54,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"superClass": null,
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":10,"end":54,"loc":{"start":{"line":1,"column":10},"end":{"line":6,"column":1}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassPrivateProperty",
|
||||||
|
"start":14,"end":21,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":9}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":14,"end":16,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":4}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":15,"end":16,"loc":{"start":{"line":2,"column":3},"end":{"line":2,"column":4},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":19,"end":20,"loc":{"start":{"line":2,"column":7},"end":{"line":2,"column":8}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 1,
|
||||||
|
"raw": "1"
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ClassMethod",
|
||||||
|
"start":24,"end":52,"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":24,"end":28,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":6},"identifierName":"test"},
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"kind": "method",
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":31,"end":52,"loc":{"start":{"line":3,"column":9},"end":{"line":5,"column":3}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ExpressionStatement",
|
||||||
|
"start":37,"end":48,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":15}},
|
||||||
|
"expression": {
|
||||||
|
"type": "BinaryExpression",
|
||||||
|
"start":37,"end":47,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":14}},
|
||||||
|
"left": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":38,"end":40,"loc":{"start":{"line":4,"column":5},"end":{"line":4,"column":7}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":39,"end":40,"loc":{"start":{"line":4,"column":6},"end":{"line":4,"column":7},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"parenthesized": true,
|
||||||
|
"parenStart": 37
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"operator": "in",
|
||||||
|
"right": {
|
||||||
|
"type": "ObjectExpression",
|
||||||
|
"start":45,"end":47,"loc":{"start":{"line":4,"column":12},"end":{"line":4,"column":14}},
|
||||||
|
"properties": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
class Foo {
|
||||||
|
test() {
|
||||||
|
#x in {};
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["classPrivateProperties", "privateIn"]
|
||||||
|
}
|
||||||
78
packages/babel-parser/test/fixtures/experimental/private-in/private-in-without-field/output.json
vendored
Normal file
78
packages/babel-parser/test/fixtures/experimental/private-in/private-in-without-field/output.json
vendored
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"type": "File",
|
||||||
|
"start":0,"end":42,"loc":{"start":{"line":1,"column":0},"end":{"line":5,"column":1}},
|
||||||
|
"errors": [
|
||||||
|
"SyntaxError: Private name #x is not defined (3:4)"
|
||||||
|
],
|
||||||
|
"program": {
|
||||||
|
"type": "Program",
|
||||||
|
"start":0,"end":42,"loc":{"start":{"line":1,"column":0},"end":{"line":5,"column":1}},
|
||||||
|
"sourceType": "script",
|
||||||
|
"interpreter": null,
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":0,"end":42,"loc":{"start":{"line":1,"column":0},"end":{"line":5,"column":1}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"superClass": null,
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":10,"end":42,"loc":{"start":{"line":1,"column":10},"end":{"line":5,"column":1}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassMethod",
|
||||||
|
"start":14,"end":40,"loc":{"start":{"line":2,"column":2},"end":{"line":4,"column":3}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":14,"end":18,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":6},"identifierName":"test"},
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"kind": "method",
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":21,"end":40,"loc":{"start":{"line":2,"column":9},"end":{"line":4,"column":3}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ExpressionStatement",
|
||||||
|
"start":27,"end":36,"loc":{"start":{"line":3,"column":4},"end":{"line":3,"column":13}},
|
||||||
|
"expression": {
|
||||||
|
"type": "BinaryExpression",
|
||||||
|
"start":27,"end":35,"loc":{"start":{"line":3,"column":4},"end":{"line":3,"column":12}},
|
||||||
|
"left": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":27,"end":29,"loc":{"start":{"line":3,"column":4},"end":{"line":3,"column":6}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":28,"end":29,"loc":{"start":{"line":3,"column":5},"end":{"line":3,"column":6},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"operator": "in",
|
||||||
|
"right": {
|
||||||
|
"type": "ObjectExpression",
|
||||||
|
"start":33,"end":35,"loc":{"start":{"line":3,"column":10},"end":{"line":3,"column":12}},
|
||||||
|
"properties": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
6
packages/babel-parser/test/fixtures/experimental/private-in/private-in/input.js
vendored
Normal file
6
packages/babel-parser/test/fixtures/experimental/private-in/private-in/input.js
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
class Foo {
|
||||||
|
#x = 1;
|
||||||
|
test() {
|
||||||
|
#x in {};
|
||||||
|
}
|
||||||
|
}
|
||||||
3
packages/babel-parser/test/fixtures/experimental/private-in/private-in/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/experimental/private-in/private-in/options.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["classPrivateProperties", "privateIn"]
|
||||||
|
}
|
||||||
98
packages/babel-parser/test/fixtures/experimental/private-in/private-in/output.json
vendored
Normal file
98
packages/babel-parser/test/fixtures/experimental/private-in/private-in/output.json
vendored
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
{
|
||||||
|
"type": "File",
|
||||||
|
"start":0,"end":52,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"program": {
|
||||||
|
"type": "Program",
|
||||||
|
"start":0,"end":52,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"sourceType": "script",
|
||||||
|
"interpreter": null,
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":0,"end":52,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"superClass": null,
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":10,"end":52,"loc":{"start":{"line":1,"column":10},"end":{"line":6,"column":1}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassPrivateProperty",
|
||||||
|
"start":14,"end":21,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":9}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":14,"end":16,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":4}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":15,"end":16,"loc":{"start":{"line":2,"column":3},"end":{"line":2,"column":4},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":19,"end":20,"loc":{"start":{"line":2,"column":7},"end":{"line":2,"column":8}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 1,
|
||||||
|
"raw": "1"
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ClassMethod",
|
||||||
|
"start":24,"end":50,"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":24,"end":28,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":6},"identifierName":"test"},
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"kind": "method",
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":31,"end":50,"loc":{"start":{"line":3,"column":9},"end":{"line":5,"column":3}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ExpressionStatement",
|
||||||
|
"start":37,"end":46,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":13}},
|
||||||
|
"expression": {
|
||||||
|
"type": "BinaryExpression",
|
||||||
|
"start":37,"end":45,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":12}},
|
||||||
|
"left": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":37,"end":39,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":6}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":38,"end":39,"loc":{"start":{"line":4,"column":5},"end":{"line":4,"column":6},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"operator": "in",
|
||||||
|
"right": {
|
||||||
|
"type": "ObjectExpression",
|
||||||
|
"start":43,"end":45,"loc":{"start":{"line":4,"column":10},"end":{"line":4,"column":12}},
|
||||||
|
"properties": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -123,6 +123,7 @@ export type ParserPlugin =
|
|||||||
'partialApplication' |
|
'partialApplication' |
|
||||||
'pipelineOperator' |
|
'pipelineOperator' |
|
||||||
'placeholders' |
|
'placeholders' |
|
||||||
|
'privateIn' |
|
||||||
'throwExpressions' |
|
'throwExpressions' |
|
||||||
'topLevelAwait' |
|
'topLevelAwait' |
|
||||||
'typescript' |
|
'typescript' |
|
||||||
|
|||||||
@ -0,0 +1,3 @@
|
|||||||
|
src
|
||||||
|
test
|
||||||
|
*.log
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
# @babel/plugin-proposal-private-property-in-object
|
||||||
|
|
||||||
|
> This plugin transforms checks for a private property in an object
|
||||||
|
|
||||||
|
See our website [@babel/plugin-proposal-private-property-in-object](https://babeljs.io/docs/en/next/babel-plugin-proposal-private-property-in-object.html) for more information.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
Using npm:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save-dev
|
||||||
|
@babel/plugin-proposal-private-property-in-object
|
||||||
|
```
|
||||||
|
|
||||||
|
or using yarn:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
yarn add @babel/plugin-proposal-private-property-in-object --dev
|
||||||
|
```
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"name": "@babel/plugin-proposal-private-property-in-object",
|
||||||
|
"version": "7.8.3",
|
||||||
|
"description": "This plugin transforms checks for a private property in an object",
|
||||||
|
"repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-proposal-private-property-in-object",
|
||||||
|
"license": "MIT",
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"main": "lib/index.js",
|
||||||
|
"keywords": [
|
||||||
|
"babel-plugin"
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/helper-create-class-features-plugin": "^7.8.3",
|
||||||
|
"@babel/helper-plugin-utils": "^7.8.3"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@babel/core": "^7.0.0-0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/core": "^7.8.3",
|
||||||
|
"@babel/helper-plugin-test-runner": "^7.8.3"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
/* eslint-disable @babel/development/plugin-name */
|
||||||
|
|
||||||
|
import { declare } from "@babel/helper-plugin-utils";
|
||||||
|
import {
|
||||||
|
createClassFeaturePlugin,
|
||||||
|
FEATURES,
|
||||||
|
} from "@babel/helper-create-class-features-plugin";
|
||||||
|
|
||||||
|
export default declare((api, options) => {
|
||||||
|
api.assertVersion(7);
|
||||||
|
|
||||||
|
return createClassFeaturePlugin({
|
||||||
|
name: "proposal-class-properties",
|
||||||
|
|
||||||
|
feature: FEATURES.privateIn,
|
||||||
|
loose: options.loose,
|
||||||
|
|
||||||
|
manipulateOptions(opts, parserOpts) {
|
||||||
|
parserOpts.plugins.push("privateIn");
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
get #foo() {}
|
||||||
|
|
||||||
|
test(other) {
|
||||||
|
return #foo in other;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
Object.defineProperty(this, _foo, {
|
||||||
|
get: _get_foo,
|
||||||
|
set: void 0
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test(other) {
|
||||||
|
return Object.prototype.hasOwnProperty.call(other, _foo);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
|
||||||
|
|
||||||
|
var _get_foo = function () {};
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#foo = 1;
|
||||||
|
|
||||||
|
test(other) {
|
||||||
|
return #foo in other;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
Object.defineProperty(this, _foo, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test(other) {
|
||||||
|
return Object.prototype.hasOwnProperty.call(other, _foo);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#foo() {}
|
||||||
|
|
||||||
|
test(other) {
|
||||||
|
return #foo in other;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
Object.defineProperty(this, _foo, {
|
||||||
|
value: _foo2
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test(other) {
|
||||||
|
return Object.prototype.hasOwnProperty.call(other, _foo);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
|
||||||
|
|
||||||
|
var _foo2 = function _foo2() {};
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
class Foo {
|
||||||
|
static #foo = "foo";
|
||||||
|
#bar = "bar";
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
return #foo in Foo;
|
||||||
|
}
|
||||||
|
|
||||||
|
test() {
|
||||||
|
return #bar in this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
["external-helpers", { "helperVersion": "7.100.0" }],
|
||||||
|
"proposal-private-property-in-object",
|
||||||
|
"proposal-class-properties",
|
||||||
|
"proposal-private-methods"
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
class Foo {
|
||||||
|
constructor() {
|
||||||
|
_bar.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: "bar"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
return Foo === Foo;
|
||||||
|
}
|
||||||
|
|
||||||
|
test() {
|
||||||
|
return _bar.has(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _bar = new WeakMap();
|
||||||
|
|
||||||
|
var _foo = {
|
||||||
|
writable: true,
|
||||||
|
value: "foo"
|
||||||
|
};
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
class Foo {
|
||||||
|
#foo = 1;
|
||||||
|
#bar = 1;
|
||||||
|
|
||||||
|
test() {
|
||||||
|
class Nested {
|
||||||
|
#bar = 2;
|
||||||
|
|
||||||
|
test() {
|
||||||
|
#foo in this;
|
||||||
|
#bar in this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#foo in this;
|
||||||
|
#bar in this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
Object.defineProperty(this, _foo, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
Object.defineProperty(this, _bar, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test() {
|
||||||
|
let Nested = /*#__PURE__*/function () {
|
||||||
|
function Nested() {
|
||||||
|
babelHelpers.classCallCheck(this, Nested);
|
||||||
|
Object.defineProperty(this, _bar2, {
|
||||||
|
writable: true,
|
||||||
|
value: 2
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Nested, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test() {
|
||||||
|
Object.prototype.hasOwnProperty.call(this, _foo);
|
||||||
|
Object.prototype.hasOwnProperty.call(this, _bar2);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Nested;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _bar2 = babelHelpers.classPrivateFieldLooseKey("bar");
|
||||||
|
|
||||||
|
Object.prototype.hasOwnProperty.call(this, _foo);
|
||||||
|
Object.prototype.hasOwnProperty.call(this, _bar);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
|
||||||
|
|
||||||
|
var _bar = babelHelpers.classPrivateFieldLooseKey("bar");
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
class Foo {
|
||||||
|
#foo = 1;
|
||||||
|
|
||||||
|
test() {
|
||||||
|
class Nested {
|
||||||
|
#foo = 2;
|
||||||
|
|
||||||
|
test() {
|
||||||
|
#foo in this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#foo in this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
Object.defineProperty(this, _foo, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test() {
|
||||||
|
let Nested = /*#__PURE__*/function () {
|
||||||
|
function Nested() {
|
||||||
|
babelHelpers.classCallCheck(this, Nested);
|
||||||
|
Object.defineProperty(this, _foo2, {
|
||||||
|
writable: true,
|
||||||
|
value: 2
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Nested, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test() {
|
||||||
|
Object.prototype.hasOwnProperty.call(this, _foo2);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Nested;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo2 = babelHelpers.classPrivateFieldLooseKey("foo");
|
||||||
|
|
||||||
|
Object.prototype.hasOwnProperty.call(this, _foo);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
class Foo {
|
||||||
|
#foo = 1;
|
||||||
|
|
||||||
|
test() {
|
||||||
|
class Nested {
|
||||||
|
test() {
|
||||||
|
#foo in this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#foo in this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
Object.defineProperty(this, _foo, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test() {
|
||||||
|
let Nested = /*#__PURE__*/function () {
|
||||||
|
function Nested() {
|
||||||
|
babelHelpers.classCallCheck(this, Nested);
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Nested, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test() {
|
||||||
|
Object.prototype.hasOwnProperty.call(this, _foo);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Nested;
|
||||||
|
}();
|
||||||
|
|
||||||
|
Object.prototype.hasOwnProperty.call(this, _foo);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
["external-helpers", { "helperVersion": "7.100.0" }],
|
||||||
|
["proposal-private-property-in-object", { "loose": true }],
|
||||||
|
["proposal-class-properties", { "loose": true }],
|
||||||
|
["proposal-private-methods", { "loose": true }],
|
||||||
|
"transform-classes"
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
static get #foo() {}
|
||||||
|
|
||||||
|
test(other) {
|
||||||
|
return #foo in other;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test(other) {
|
||||||
|
return Object.prototype.hasOwnProperty.call(other, _foo);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
|
||||||
|
|
||||||
|
var _get_foo = function () {};
|
||||||
|
|
||||||
|
Object.defineProperty(Foo, _foo, {
|
||||||
|
get: _get_foo,
|
||||||
|
set: void 0
|
||||||
|
});
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
static #foo = 1;
|
||||||
|
|
||||||
|
test(other) {
|
||||||
|
return #foo in other;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test(other) {
|
||||||
|
return Object.prototype.hasOwnProperty.call(other, _foo);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
|
||||||
|
|
||||||
|
Object.defineProperty(Foo, _foo, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
static #foo() {}
|
||||||
|
|
||||||
|
test(other) {
|
||||||
|
return #foo in other;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test(other) {
|
||||||
|
return Object.prototype.hasOwnProperty.call(other, _foo);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
|
||||||
|
|
||||||
|
var _foo2 = function _foo2() {};
|
||||||
|
|
||||||
|
Object.defineProperty(Foo, _foo, {
|
||||||
|
value: _foo2
|
||||||
|
});
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
get #foo() {}
|
||||||
|
|
||||||
|
test(other) {
|
||||||
|
return #foo in other;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_foo.set(this, {
|
||||||
|
get: _get_foo,
|
||||||
|
set: void 0
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test(other) {
|
||||||
|
return _foo.has(other);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = new WeakMap();
|
||||||
|
|
||||||
|
var _get_foo = function () {};
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#foo = 1;
|
||||||
|
|
||||||
|
test(other) {
|
||||||
|
return #foo in other;
|
||||||
|
}
|
||||||
|
}
|
||||||
22
packages/babel-plugin-proposal-private-property-in-object/test/fixtures/private/field/output.js
vendored
Normal file
22
packages/babel-plugin-proposal-private-property-in-object/test/fixtures/private/field/output.js
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_foo.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test(other) {
|
||||||
|
return _foo.has(other);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = new WeakMap();
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
#foo() {}
|
||||||
|
|
||||||
|
test(other) {
|
||||||
|
return #foo in other;
|
||||||
|
}
|
||||||
|
}
|
||||||
21
packages/babel-plugin-proposal-private-property-in-object/test/fixtures/private/method/output.js
vendored
Normal file
21
packages/babel-plugin-proposal-private-property-in-object/test/fixtures/private/method/output.js
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_foo.add(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test(other) {
|
||||||
|
return _foo.has(other);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = new WeakSet();
|
||||||
|
|
||||||
|
var _foo2 = function _foo2() {};
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
class Foo {
|
||||||
|
static #foo = "foo";
|
||||||
|
#bar = "bar";
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
return #foo in Foo;
|
||||||
|
}
|
||||||
|
|
||||||
|
test() {
|
||||||
|
return #bar in this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
["external-helpers", { "helperVersion": "7.100.0" }],
|
||||||
|
"proposal-private-property-in-object",
|
||||||
|
"proposal-class-properties",
|
||||||
|
"proposal-private-methods"
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
class Foo {
|
||||||
|
constructor() {
|
||||||
|
_bar.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: "bar"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
return Foo === Foo;
|
||||||
|
}
|
||||||
|
|
||||||
|
test() {
|
||||||
|
return _bar.has(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _bar = new WeakMap();
|
||||||
|
|
||||||
|
var _foo = {
|
||||||
|
writable: true,
|
||||||
|
value: "foo"
|
||||||
|
};
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
class Foo {
|
||||||
|
#foo = 1;
|
||||||
|
#bar = 1;
|
||||||
|
|
||||||
|
test() {
|
||||||
|
class Nested {
|
||||||
|
#bar = 2;
|
||||||
|
|
||||||
|
test() {
|
||||||
|
#foo in this;
|
||||||
|
#bar in this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#foo in this;
|
||||||
|
#bar in this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,54 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_foo.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
|
||||||
|
_bar.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test() {
|
||||||
|
let Nested = /*#__PURE__*/function () {
|
||||||
|
function Nested() {
|
||||||
|
babelHelpers.classCallCheck(this, Nested);
|
||||||
|
|
||||||
|
_bar2.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: 2
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Nested, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test() {
|
||||||
|
_foo.has(this);
|
||||||
|
|
||||||
|
_bar2.has(this);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Nested;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _bar2 = new WeakMap();
|
||||||
|
|
||||||
|
_foo.has(this);
|
||||||
|
|
||||||
|
_bar.has(this);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = new WeakMap();
|
||||||
|
|
||||||
|
var _bar = new WeakMap();
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
class Foo {
|
||||||
|
#foo = 1;
|
||||||
|
|
||||||
|
test() {
|
||||||
|
class Nested {
|
||||||
|
#foo = 2;
|
||||||
|
|
||||||
|
test() {
|
||||||
|
#foo in this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#foo in this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_foo.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test() {
|
||||||
|
let Nested = /*#__PURE__*/function () {
|
||||||
|
function Nested() {
|
||||||
|
babelHelpers.classCallCheck(this, Nested);
|
||||||
|
|
||||||
|
_foo2.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: 2
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Nested, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test() {
|
||||||
|
_foo2.has(this);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Nested;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo2 = new WeakMap();
|
||||||
|
|
||||||
|
_foo.has(this);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = new WeakMap();
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
class Foo {
|
||||||
|
#foo = 1;
|
||||||
|
|
||||||
|
test() {
|
||||||
|
class Nested {
|
||||||
|
test() {
|
||||||
|
#foo in this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#foo in this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
|
||||||
|
_foo.set(this, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test() {
|
||||||
|
let Nested = /*#__PURE__*/function () {
|
||||||
|
function Nested() {
|
||||||
|
babelHelpers.classCallCheck(this, Nested);
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Nested, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test() {
|
||||||
|
_foo.has(this);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Nested;
|
||||||
|
}();
|
||||||
|
|
||||||
|
_foo.has(this);
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = new WeakMap();
|
||||||
9
packages/babel-plugin-proposal-private-property-in-object/test/fixtures/private/options.json
vendored
Normal file
9
packages/babel-plugin-proposal-private-property-in-object/test/fixtures/private/options.json
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
["external-helpers", { "helperVersion": "7.100.0" }],
|
||||||
|
"proposal-private-property-in-object",
|
||||||
|
"proposal-class-properties",
|
||||||
|
"proposal-private-methods",
|
||||||
|
"transform-classes"
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
static get #foo() {}
|
||||||
|
|
||||||
|
test(other) {
|
||||||
|
return #foo in other;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test(other) {
|
||||||
|
return other === Foo;
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _get_foo = function () {};
|
||||||
|
|
||||||
|
var _foo = {
|
||||||
|
get: _get_foo,
|
||||||
|
set: void 0
|
||||||
|
};
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
static #foo = 1;
|
||||||
|
|
||||||
|
test(other) {
|
||||||
|
return #foo in other;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test(other) {
|
||||||
|
return other === Foo;
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
};
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
static #foo() {}
|
||||||
|
|
||||||
|
test(other) {
|
||||||
|
return #foo in other;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
let Foo = /*#__PURE__*/function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function Foo() {
|
||||||
|
babelHelpers.classCallCheck(this, Foo);
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.createClass(Foo, [{
|
||||||
|
key: "test",
|
||||||
|
value: function test(other) {
|
||||||
|
return other === Foo;
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
return Foo;
|
||||||
|
}();
|
||||||
|
|
||||||
|
var _foo = function _foo() {};
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
import runner from "@babel/helper-plugin-test-runner";
|
||||||
|
|
||||||
|
runner(__dirname);
|
||||||
@ -80,7 +80,15 @@ defineType("BinaryExpression", {
|
|||||||
validate: assertOneOf(...BINARY_OPERATORS),
|
validate: assertOneOf(...BINARY_OPERATORS),
|
||||||
},
|
},
|
||||||
left: {
|
left: {
|
||||||
validate: assertNodeType("Expression"),
|
validate: (function() {
|
||||||
|
const expression = assertNodeType("Expression");
|
||||||
|
const inOp = assertNodeType("Expression", "PrivateName");
|
||||||
|
|
||||||
|
return function(node, key, val) {
|
||||||
|
const validator = node.operator === "in" ? inOp : expression;
|
||||||
|
validator(node, key, val);
|
||||||
|
};
|
||||||
|
})(),
|
||||||
},
|
},
|
||||||
right: {
|
right: {
|
||||||
validate: assertNodeType("Expression"),
|
validate: assertNodeType("Expression"),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user