flst / upstream /emscripten /node_modules /@babel /plugin-transform-exponentiation-operator /lib /index.js
| ; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.default = void 0; | |
| var _helperPluginUtils = require("@babel/helper-plugin-utils"); | |
| var _default = exports.default = (0, _helperPluginUtils.declare)(api => { | |
| api.assertVersion("^7.0.0-0 || ^8.0.0-0 || >8.0.0-alpha <8.0.0-beta"); | |
| const { | |
| types: t, | |
| template | |
| } = api; | |
| function build(left, right) { | |
| return t.callExpression(t.memberExpression(t.identifier("Math"), t.identifier("pow")), [left, right]); | |
| } | |
| function maybeMemoize(node, scope) { | |
| if (scope.isStatic(node)) { | |
| return { | |
| assign: node, | |
| ref: t.cloneNode(node) | |
| }; | |
| } | |
| if (scope.path.isPattern()) { | |
| return null; | |
| } | |
| const id = scope.generateUidIdentifierBasedOnNode(node); | |
| scope.push({ | |
| id | |
| }); | |
| return { | |
| assign: t.assignmentExpression("=", t.cloneNode(id), node), | |
| ref: t.cloneNode(id) | |
| }; | |
| } | |
| return { | |
| name: "transform-exponentiation-operator", | |
| visitor: { | |
| AssignmentExpression(path) { | |
| const { | |
| node, | |
| scope | |
| } = path; | |
| if (node.operator !== "**=") return; | |
| if (t.isMemberExpression(node.left)) { | |
| let member1; | |
| let member2; | |
| const object = maybeMemoize(node.left.object, scope); | |
| if (!object) { | |
| path.replaceWith(template.expression.ast`(() => ${path.node})()`); | |
| return; | |
| } | |
| const { | |
| property, | |
| computed | |
| } = node.left; | |
| if (computed) { | |
| const prop = maybeMemoize(property, scope); | |
| member1 = t.memberExpression(object.assign, prop.assign, true); | |
| member2 = t.memberExpression(object.ref, prop.ref, true); | |
| } else { | |
| member1 = t.memberExpression(object.assign, property, false); | |
| member2 = t.memberExpression(object.ref, t.cloneNode(property), false); | |
| } | |
| path.replaceWith(t.assignmentExpression("=", member1, build(member2, node.right))); | |
| } else { | |
| path.replaceWith(t.assignmentExpression("=", node.left, build(t.cloneNode(node.left), node.right))); | |
| } | |
| }, | |
| BinaryExpression(path) { | |
| const { | |
| node | |
| } = path; | |
| if (node.operator === "**") { | |
| path.replaceWith(build(node.left, node.right)); | |
| } | |
| } | |
| } | |
| }; | |
| }); | |
| //# sourceMappingURL=index.js.map | |