diff options
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.js | 97 |
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(); |
