summaryrefslogtreecommitdiff
path: root/node_modules/@babel/helper-create-class-features-plugin/lib/fields.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@babel/helper-create-class-features-plugin/lib/fields.js')
-rw-r--r--node_modules/@babel/helper-create-class-features-plugin/lib/fields.js97
1 files changed, 58 insertions, 39 deletions
diff --git a/node_modules/@babel/helper-create-class-features-plugin/lib/fields.js b/node_modules/@babel/helper-create-class-features-plugin/lib/fields.js
index 66022633..7a10b103 100644
--- a/node_modules/@babel/helper-create-class-features-plugin/lib/fields.js
+++ b/node_modules/@babel/helper-create-class-features-plugin/lib/fields.js
@@ -10,8 +10,8 @@ exports.buildPrivateNamesNodes = buildPrivateNamesNodes;
exports.privateNameVisitorFactory = privateNameVisitorFactory;
exports.transformPrivateNamesUsage = transformPrivateNamesUsage;
var _core = require("@babel/core");
+var _traverse = require("@babel/traverse");
var _helperReplaceSupers = require("@babel/helper-replace-supers");
-var _helperEnvironmentVisitor = require("@babel/helper-environment-visitor");
var _helperMemberExpressionToFunctions = require("@babel/helper-member-expression-to-functions");
var _helperOptimiseCallExpression = require("@babel/helper-optimise-call-expression");
var _helperAnnotateAsPure = require("@babel/helper-annotate-as-pure");
@@ -122,7 +122,7 @@ function buildPrivateNamesNodes(privateNamesMap, privateFieldsAsProperties, priv
return initNodes;
}
function privateNameVisitorFactory(visitor) {
- const nestedVisitor = _core.traverse.visitors.merge([Object.assign({}, visitor), _helperEnvironmentVisitor.default]);
+ const nestedVisitor = _traverse.visitors.environmentVisitor(Object.assign({}, visitor));
const privateNameVisitor = Object.assign({}, visitor, {
Class(path) {
const {
@@ -176,7 +176,7 @@ const privateNameVisitor = privateNameVisitorFactory({
name
} = node.id;
if (!privateNamesMap.has(name)) return;
- if (redeclared && redeclared.includes(name)) return;
+ if (redeclared != null && redeclared.includes(name)) return;
this.handle(parentPath, noDocumentAll);
}
});
@@ -211,7 +211,7 @@ const privateInVisitor = privateNameVisitorFactory({
name
} = left.id;
if (!privateNamesMap.has(name)) return;
- if (redeclared && redeclared.includes(name)) return;
+ if (redeclared != null && redeclared.includes(name)) return;
unshadow(this.classRef.name, path.scope, this.innerBinding);
if (privateFieldsAsProperties) {
const {
@@ -247,6 +247,11 @@ function buildStaticPrivateFieldAccess(expr, noUninitializedPrivateFieldAccess)
if (noUninitializedPrivateFieldAccess) return expr;
return _core.types.memberExpression(expr, _core.types.identifier("_"));
}
+function autoInherits(fn) {
+ return function (member) {
+ return _core.types.inherits(fn.apply(this, arguments), member.node);
+ };
+}
const privateNameHandlerSpec = {
memoise(member, count) {
const {
@@ -270,7 +275,7 @@ const privateNameHandlerSpec = {
}
return _core.types.cloneNode(object);
},
- get(member) {
+ get: autoInherits(function (member) {
const {
classRef,
privateNamesMap,
@@ -278,9 +283,10 @@ const privateNameHandlerSpec = {
innerBinding,
noUninitializedPrivateFieldAccess
} = this;
+ const privateName = member.node.property;
const {
name
- } = member.node.property.id;
+ } = privateName.id;
const {
id,
static: isStatic,
@@ -290,33 +296,34 @@ const privateNameHandlerSpec = {
setId
} = privateNamesMap.get(name);
const isGetterOrSetter = getId || setId;
+ const cloneId = id => _core.types.inherits(_core.types.cloneNode(id), privateName);
if (isStatic) {
unshadow(classRef.name, member.scope, innerBinding);
if (!newHelpers(file)) {
const helperName = isMethod && !isGetterOrSetter ? "classStaticPrivateMethodGet" : "classStaticPrivateFieldSpecGet";
- return _core.types.callExpression(file.addHelper(helperName), [this.receiver(member), _core.types.cloneNode(classRef), _core.types.cloneNode(id)]);
+ return _core.types.callExpression(file.addHelper(helperName), [this.receiver(member), _core.types.cloneNode(classRef), cloneId(id)]);
}
const receiver = this.receiver(member);
const skipCheck = _core.types.isIdentifier(receiver) && receiver.name === classRef.name;
if (!isMethod) {
if (skipCheck) {
- return buildStaticPrivateFieldAccess(_core.types.cloneNode(id), noUninitializedPrivateFieldAccess);
+ return buildStaticPrivateFieldAccess(cloneId(id), noUninitializedPrivateFieldAccess);
}
- return buildStaticPrivateFieldAccess(_core.types.callExpression(file.addHelper("assertClassBrand"), [_core.types.cloneNode(classRef), receiver, _core.types.cloneNode(id)]), noUninitializedPrivateFieldAccess);
+ return buildStaticPrivateFieldAccess(_core.types.callExpression(file.addHelper("assertClassBrand"), [_core.types.cloneNode(classRef), receiver, cloneId(id)]), noUninitializedPrivateFieldAccess);
}
if (getId) {
if (skipCheck) {
- return _core.types.callExpression(_core.types.cloneNode(getId), [receiver]);
+ return _core.types.callExpression(cloneId(getId), [receiver]);
}
- return _core.types.callExpression(file.addHelper("classPrivateGetter"), [_core.types.cloneNode(classRef), receiver, _core.types.cloneNode(getId)]);
+ return _core.types.callExpression(file.addHelper("classPrivateGetter"), [_core.types.cloneNode(classRef), receiver, cloneId(getId)]);
}
if (setId) {
const err = _core.types.buildUndefinedNode();
if (skipCheck) return err;
return _core.types.sequenceExpression([_core.types.callExpression(file.addHelper("assertClassBrand"), [_core.types.cloneNode(classRef), receiver]), err]);
}
- if (skipCheck) return _core.types.cloneNode(id);
- return _core.types.callExpression(file.addHelper("assertClassBrand"), [_core.types.cloneNode(classRef), receiver, _core.types.cloneNode(id)]);
+ if (skipCheck) return cloneId(id);
+ return _core.types.callExpression(file.addHelper("assertClassBrand"), [_core.types.cloneNode(classRef), receiver, cloneId(id)]);
}
if (isMethod) {
if (isGetterOrSetter) {
@@ -324,34 +331,35 @@ const privateNameHandlerSpec = {
return _core.types.sequenceExpression([this.receiver(member), writeOnlyError(file, name)]);
}
if (!newHelpers(file)) {
- return _core.types.callExpression(file.addHelper("classPrivateFieldGet"), [this.receiver(member), _core.types.cloneNode(id)]);
+ return _core.types.callExpression(file.addHelper("classPrivateFieldGet"), [this.receiver(member), cloneId(id)]);
}
- return _core.types.callExpression(file.addHelper("classPrivateGetter"), [_core.types.cloneNode(id), this.receiver(member), _core.types.cloneNode(getId)]);
+ return _core.types.callExpression(file.addHelper("classPrivateGetter"), [_core.types.cloneNode(id), this.receiver(member), cloneId(getId)]);
}
if (!newHelpers(file)) {
- return _core.types.callExpression(file.addHelper("classPrivateMethodGet"), [this.receiver(member), _core.types.cloneNode(id), _core.types.cloneNode(methodId)]);
+ return _core.types.callExpression(file.addHelper("classPrivateMethodGet"), [this.receiver(member), _core.types.cloneNode(id), cloneId(methodId)]);
}
- return _core.types.callExpression(file.addHelper("assertClassBrand"), [_core.types.cloneNode(id), this.receiver(member), _core.types.cloneNode(methodId)]);
+ return _core.types.callExpression(file.addHelper("assertClassBrand"), [_core.types.cloneNode(id), this.receiver(member), cloneId(methodId)]);
}
if (newHelpers(file)) {
- return _core.types.callExpression(file.addHelper("classPrivateFieldGet2"), [_core.types.cloneNode(id), this.receiver(member)]);
+ return _core.types.callExpression(file.addHelper("classPrivateFieldGet2"), [cloneId(id), this.receiver(member)]);
}
- return _core.types.callExpression(file.addHelper("classPrivateFieldGet"), [this.receiver(member), _core.types.cloneNode(id)]);
- },
+ return _core.types.callExpression(file.addHelper("classPrivateFieldGet"), [this.receiver(member), cloneId(id)]);
+ }),
boundGet(member) {
this.memoise(member, 1);
return _core.types.callExpression(_core.types.memberExpression(this.get(member), _core.types.identifier("bind")), [this.receiver(member)]);
},
- set(member, value) {
+ set: autoInherits(function (member, value) {
const {
classRef,
privateNamesMap,
file,
noUninitializedPrivateFieldAccess
} = this;
+ const privateName = member.node.property;
const {
name
- } = member.node.property.id;
+ } = privateName.id;
const {
id,
static: isStatic,
@@ -360,10 +368,11 @@ const privateNameHandlerSpec = {
getId
} = privateNamesMap.get(name);
const isGetterOrSetter = getId || setId;
+ const cloneId = id => _core.types.inherits(_core.types.cloneNode(id), privateName);
if (isStatic) {
if (!newHelpers(file)) {
const helperName = isMethod && !isGetterOrSetter ? "classStaticPrivateMethodSet" : "classStaticPrivateFieldSpecSet";
- return _core.types.callExpression(file.addHelper(helperName), [this.receiver(member), _core.types.cloneNode(classRef), _core.types.cloneNode(id), value]);
+ return _core.types.callExpression(file.addHelper(helperName), [this.receiver(member), _core.types.cloneNode(classRef), cloneId(id), value]);
}
const receiver = this.receiver(member);
const skipCheck = _core.types.isIdentifier(receiver) && receiver.name === classRef.name;
@@ -376,24 +385,24 @@ const privateNameHandlerSpec = {
if (skipCheck) {
return _core.types.callExpression(_core.types.cloneNode(setId), [receiver, value]);
}
- return _core.types.callExpression(file.addHelper("classPrivateSetter"), [_core.types.cloneNode(classRef), _core.types.cloneNode(setId), receiver, value]);
+ return _core.types.callExpression(file.addHelper("classPrivateSetter"), [_core.types.cloneNode(classRef), cloneId(setId), receiver, value]);
}
- return _core.types.assignmentExpression("=", buildStaticPrivateFieldAccess(_core.types.cloneNode(id), noUninitializedPrivateFieldAccess), skipCheck ? value : _core.types.callExpression(file.addHelper("assertClassBrand"), [_core.types.cloneNode(classRef), receiver, value]));
+ return _core.types.assignmentExpression("=", buildStaticPrivateFieldAccess(cloneId(id), noUninitializedPrivateFieldAccess), skipCheck ? value : _core.types.callExpression(file.addHelper("assertClassBrand"), [_core.types.cloneNode(classRef), receiver, value]));
}
if (isMethod) {
if (setId) {
if (!newHelpers(file)) {
- return _core.types.callExpression(file.addHelper("classPrivateFieldSet"), [this.receiver(member), _core.types.cloneNode(id), value]);
+ return _core.types.callExpression(file.addHelper("classPrivateFieldSet"), [this.receiver(member), cloneId(id), value]);
}
- return _core.types.callExpression(file.addHelper("classPrivateSetter"), [_core.types.cloneNode(id), _core.types.cloneNode(setId), this.receiver(member), value]);
+ return _core.types.callExpression(file.addHelper("classPrivateSetter"), [_core.types.cloneNode(id), cloneId(setId), this.receiver(member), value]);
}
return _core.types.sequenceExpression([this.receiver(member), value, readOnlyError(file, name)]);
}
if (newHelpers(file)) {
- return _core.types.callExpression(file.addHelper("classPrivateFieldSet2"), [_core.types.cloneNode(id), this.receiver(member), value]);
+ return _core.types.callExpression(file.addHelper("classPrivateFieldSet2"), [cloneId(id), this.receiver(member), value]);
}
- return _core.types.callExpression(file.addHelper("classPrivateFieldSet"), [this.receiver(member), _core.types.cloneNode(id), value]);
- },
+ return _core.types.callExpression(file.addHelper("classPrivateFieldSet"), [this.receiver(member), cloneId(id), value]);
+ }),
destructureSet(member) {
const {
classRef,
@@ -401,15 +410,17 @@ const privateNameHandlerSpec = {
file,
noUninitializedPrivateFieldAccess
} = this;
+ const privateName = member.node.property;
const {
name
- } = member.node.property.id;
+ } = privateName.id;
const {
id,
static: isStatic,
method: isMethod,
setId
} = privateNamesMap.get(name);
+ const cloneId = id => _core.types.inherits(_core.types.cloneNode(id), privateName);
if (!newHelpers(file)) {
if (isStatic) {
try {
@@ -417,9 +428,9 @@ const privateNameHandlerSpec = {
} catch (_unused) {
throw new Error("Babel can not transpile `[C.#p] = [0]` with @babel/helpers < 7.13.10, \n" + "please update @babel/helpers to the latest version.");
}
- return _core.types.memberExpression(_core.types.callExpression(helper, [this.receiver(member), _core.types.cloneNode(classRef), _core.types.cloneNode(id)]), _core.types.identifier("value"));
+ return _core.types.memberExpression(_core.types.callExpression(helper, [this.receiver(member), _core.types.cloneNode(classRef), cloneId(id)]), _core.types.identifier("value"));
}
- return _core.types.memberExpression(_core.types.callExpression(file.addHelper("classPrivateFieldDestructureSet"), [this.receiver(member), _core.types.cloneNode(id)]), _core.types.identifier("value"));
+ return _core.types.memberExpression(_core.types.callExpression(file.addHelper("classPrivateFieldDestructureSet"), [this.receiver(member), cloneId(id)]), _core.types.identifier("value"));
}
if (isMethod && !setId) {
return _core.types.memberExpression(_core.types.sequenceExpression([member.node.object, readOnlyError(file, name)]), _core.types.identifier("_"));
@@ -557,7 +568,7 @@ function buildPrivateInstanceFieldInitSpec(ref, prop, privateNamesMap, state) {
}
}
const helper = state.addHelper("classPrivateFieldInitSpec");
- return inheritPropComments(_core.types.expressionStatement(_core.types.callExpression(helper, [_core.types.thisExpression(), _core.types.cloneNode(id), newHelpers(state) ? value : _core.template.expression.ast`{ writable: true, value: ${value} }`])), prop);
+ return inheritLoc(inheritPropComments(_core.types.expressionStatement(_core.types.callExpression(helper, [_core.types.thisExpression(), inheritLoc(_core.types.cloneNode(id), prop.node.key), newHelpers(state) ? value : _core.template.expression.ast`{ writable: true, value: ${value} }`])), prop), prop.node);
}
function buildPrivateStaticFieldInitSpec(prop, privateNamesMap, noUninitializedPrivateFieldAccess) {
const privateName = privateNamesMap.get(prop.node.key.id.name);
@@ -670,14 +681,14 @@ function buildPrivateAccessorInitialization(ref, prop, privateNamesMap, state) {
}
}
const helper = state.addHelper("classPrivateFieldInitSpec");
- return inheritPropComments(_core.template.statement.ast`${helper}(
+ return inheritLoc(inheritPropComments(_core.template.statement.ast`${helper}(
${_core.types.thisExpression()},
${_core.types.cloneNode(id)},
{
get: ${getId ? getId.name : prop.scope.buildUndefinedNode()},
set: ${setId ? setId.name : prop.scope.buildUndefinedNode()}
},
- )`, prop);
+ )`, prop), prop.node);
}
function buildPrivateInstanceMethodInitialization(ref, prop, privateNamesMap, state) {
const privateName = privateNamesMap.get(prop.node.key.id.name);
@@ -808,7 +819,7 @@ function buildPrivateMethodDeclaration(file, prop, privateNamesMap, privateField
}
return inheritPropComments(_core.types.functionDeclaration(_core.types.cloneNode(declId), params, body, generator, async), prop);
}
-const thisContextVisitor = _core.traverse.visitors.merge([{
+const thisContextVisitor = _traverse.visitors.environmentVisitor({
Identifier(path, state) {
if (state.argumentsPath && path.node.name === "arguments") {
state.argumentsPath.push(path);
@@ -838,7 +849,7 @@ const thisContextVisitor = _core.traverse.visitors.merge([{
path.replaceWith(scope.buildUndefinedNode());
}
}
-}, _helperEnvironmentVisitor.default]);
+});
const innerReferencesVisitor = {
ReferencedIdentifier(path, state) {
if (path.scope.bindingIdentifierEquals(path.node.name, state.innerBinding)) {
@@ -879,6 +890,12 @@ function inheritPropComments(node, prop) {
_core.types.inheritInnerComments(node, prop.node);
return node;
}
+function inheritLoc(node, original) {
+ node.start = original.start;
+ node.end = original.end;
+ node.loc = original.loc;
+ return node;
+}
function buildFieldsInitNodes(ref, superRef, props, privateNamesMap, file, setPublicClassFields, privateFieldsAsSymbolsOrProperties, noUninitializedPrivateFieldAccess, constantSuper, innerBindingRef) {
var _ref, _ref2;
let classRefFlags = 0;
@@ -896,7 +913,9 @@ function buildFieldsInitNodes(ref, superRef, props, privateNamesMap, file, setPu
const classRefForInnerBinding = (_ref = ref) != null ? _ref : props[0].scope.generateUidIdentifier((innerBindingRef == null ? void 0 : innerBindingRef.name) || "Class");
(_ref2 = ref) != null ? _ref2 : ref = _core.types.cloneNode(innerBindingRef);
for (const prop of props) {
- prop.isClassProperty() && ts.assertFieldTransformed(prop);
+ if (prop.isClassProperty()) {
+ ts.assertFieldTransformed(prop);
+ }
const isStatic = !(_core.types.isStaticBlock != null && _core.types.isStaticBlock(prop.node)) && prop.node.static;
const isInstance = !isStatic;
const isPrivate = prop.isPrivate();