Sha256: f18318b9cc90875fddb1d49ff6483883e7270cc02bfb2120b088a0d9b32d7e4c
Contents?: true
Size: 1.93 KB
Versions: 24
Compression:
Stored size: 1.93 KB
Contents
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _helperPluginUtils = require("@babel/helper-plugin-utils"); var _core = require("@babel/core"); 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;
Version data entries
24 entries across 23 versions & 7 rubygems