12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- "use strict";
- 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-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
|