You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.7 KiB
68 lines
1.7 KiB
"use strict"; |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.default = void 0; |
|
|
|
var _helperPluginUtils = require("@babel/helper-plugin-utils"); |
|
|
|
var _pluginSyntaxLogicalAssignmentOperators = require("@babel/plugin-syntax-logical-assignment-operators"); |
|
|
|
var _core = require("@babel/core"); |
|
|
|
var _default = (0, _helperPluginUtils.declare)(api => { |
|
api.assertVersion(7); |
|
return { |
|
name: "proposal-logical-assignment-operators", |
|
inherits: _pluginSyntaxLogicalAssignmentOperators.default, |
|
visitor: { |
|
AssignmentExpression(path) { |
|
const { |
|
node, |
|
scope |
|
} = path; |
|
const { |
|
operator, |
|
left, |
|
right |
|
} = node; |
|
const operatorTrunc = operator.slice(0, -1); |
|
|
|
if (!_core.types.LOGICAL_OPERATORS.includes(operatorTrunc)) { |
|
return; |
|
} |
|
|
|
const lhs = _core.types.cloneNode(left); |
|
|
|
if (_core.types.isMemberExpression(left)) { |
|
const { |
|
object, |
|
property, |
|
computed |
|
} = left; |
|
const memo = scope.maybeGenerateMemoised(object); |
|
|
|
if (memo) { |
|
left.object = memo; |
|
lhs.object = _core.types.assignmentExpression("=", _core.types.cloneNode(memo), object); |
|
} |
|
|
|
if (computed) { |
|
const memo = scope.maybeGenerateMemoised(property); |
|
|
|
if (memo) { |
|
left.property = memo; |
|
lhs.property = _core.types.assignmentExpression("=", _core.types.cloneNode(memo), property); |
|
} |
|
} |
|
} |
|
|
|
path.replaceWith(_core.types.logicalExpression(operatorTrunc, lhs, _core.types.assignmentExpression("=", left, right))); |
|
} |
|
|
|
} |
|
}; |
|
}); |
|
|
|
exports.default = _default; |