summaryrefslogtreecommitdiff
path: root/node_modules/@babel/helper-create-class-features-plugin/lib/misc.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@babel/helper-create-class-features-plugin/lib/misc.js')
-rw-r--r--node_modules/@babel/helper-create-class-features-plugin/lib/misc.js47
1 files changed, 28 insertions, 19 deletions
diff --git a/node_modules/@babel/helper-create-class-features-plugin/lib/misc.js b/node_modules/@babel/helper-create-class-features-plugin/lib/misc.js
index 27b5a844..f11864b6 100644
--- a/node_modules/@babel/helper-create-class-features-plugin/lib/misc.js
+++ b/node_modules/@babel/helper-create-class-features-plugin/lib/misc.js
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
});
exports.extractComputedKeys = extractComputedKeys;
exports.injectInitialization = injectInitialization;
+exports.memoiseComputedKey = memoiseComputedKey;
var _core = require("@babel/core");
var _helperEnvironmentVisitor = require("@babel/helper-environment-visitor");
const findBareSupers = _core.traverse.visitors.merge([{
@@ -82,10 +83,32 @@ function injectInitialization(path, constructor, nodes, renamer, lastReturnsThis
constructor.get("body").unshiftContainer("body", nodes);
}
}
+function memoiseComputedKey(keyNode, scope, hint) {
+ const isUidReference = _core.types.isIdentifier(keyNode) && scope.hasUid(keyNode.name);
+ if (isUidReference) {
+ return;
+ }
+ const isMemoiseAssignment = _core.types.isAssignmentExpression(keyNode, {
+ operator: "="
+ }) && _core.types.isIdentifier(keyNode.left) && scope.hasUid(keyNode.left.name);
+ if (isMemoiseAssignment) {
+ return _core.types.cloneNode(keyNode);
+ } else {
+ const ident = _core.types.identifier(hint);
+ scope.push({
+ id: ident,
+ kind: "let"
+ });
+ return _core.types.assignmentExpression("=", _core.types.cloneNode(ident), keyNode);
+ }
+}
function extractComputedKeys(path, computedPaths, file) {
+ const {
+ scope
+ } = path;
const declarations = [];
const state = {
- classBinding: path.node.id && path.scope.getBinding(path.node.id.name),
+ classBinding: path.node.id && scope.getBinding(path.node.id.name),
file
};
for (const computedPath of computedPaths) {
@@ -97,24 +120,10 @@ function extractComputedKeys(path, computedPaths, file) {
}
const computedNode = computedPath.node;
if (!computedKey.isConstantExpression()) {
- const scope = path.scope;
- const isUidReference = _core.types.isIdentifier(computedKey.node) && scope.hasUid(computedKey.node.name);
- const isMemoiseAssignment = computedKey.isAssignmentExpression({
- operator: "="
- }) && _core.types.isIdentifier(computedKey.node.left) && scope.hasUid(computedKey.node.left.name);
- if (isUidReference) {
- continue;
- } else if (isMemoiseAssignment) {
- declarations.push(_core.types.expressionStatement(_core.types.cloneNode(computedNode.key)));
- computedNode.key = _core.types.cloneNode(computedNode.key.left);
- } else {
- const ident = path.scope.generateUidIdentifierBasedOnNode(computedNode.key);
- scope.push({
- id: ident,
- kind: "let"
- });
- declarations.push(_core.types.expressionStatement(_core.types.assignmentExpression("=", _core.types.cloneNode(ident), computedNode.key)));
- computedNode.key = _core.types.cloneNode(ident);
+ const assignment = memoiseComputedKey(computedKey.node, scope, scope.generateUidBasedOnNode(computedKey.node));
+ if (assignment) {
+ declarations.push(_core.types.expressionStatement(assignment));
+ computedNode.key = _core.types.cloneNode(assignment.left);
}
}
}