| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.default = void 0; |
| |
| function _helperPluginUtils() { |
| const data = require("@babel/helper-plugin-utils"); |
| |
| _helperPluginUtils = function () { |
| return data; |
| }; |
| |
| return data; |
| } |
| |
| function _core() { |
| const data = require("@babel/core"); |
| |
| _core = function () { |
| return data; |
| }; |
| |
| return data; |
| } |
| |
| var _default = (0, _helperPluginUtils().declare)(api => { |
| api.assertVersion(7); |
| return { |
| name: "transform-new-target", |
| visitor: { |
| MetaProperty(path) { |
| const meta = path.get("meta"); |
| const property = path.get("property"); |
| const { |
| scope |
| } = path; |
| |
| if (meta.isIdentifier({ |
| name: "new" |
| }) && property.isIdentifier({ |
| name: "target" |
| })) { |
| const func = path.findParent(path => { |
| if (path.isClass()) return true; |
| |
| if (path.isFunction() && !path.isArrowFunctionExpression()) { |
| if (path.isClassMethod({ |
| kind: "constructor" |
| })) { |
| return false; |
| } |
| |
| return true; |
| } |
| |
| return false; |
| }); |
| |
| if (!func) { |
| throw path.buildCodeFrameError("new.target must be under a (non-arrow) function or a class."); |
| } |
| |
| const { |
| node |
| } = func; |
| |
| if (!node.id) { |
| if (func.isMethod()) { |
| path.replaceWith(scope.buildUndefinedNode()); |
| return; |
| } |
| |
| node.id = scope.generateUidIdentifier("target"); |
| } |
| |
| const constructor = _core().types.memberExpression(_core().types.thisExpression(), _core().types.identifier("constructor")); |
| |
| if (func.isClass()) { |
| path.replaceWith(constructor); |
| return; |
| } |
| |
| path.replaceWith(_core().types.conditionalExpression(_core().types.binaryExpression("instanceof", _core().types.thisExpression(), _core().types.cloneNode(node.id)), constructor, scope.buildUndefinedNode())); |
| } |
| } |
| |
| } |
| }; |
| }); |
| |
| exports.default = _default; |