diff options
Diffstat (limited to 'node_modules/@babel/plugin-transform-classes/lib/inline-createSuper-helpers.js')
| -rw-r--r-- | node_modules/@babel/plugin-transform-classes/lib/inline-createSuper-helpers.js | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/node_modules/@babel/plugin-transform-classes/lib/inline-createSuper-helpers.js b/node_modules/@babel/plugin-transform-classes/lib/inline-createSuper-helpers.js new file mode 100644 index 00000000..5d5b2e3a --- /dev/null +++ b/node_modules/@babel/plugin-transform-classes/lib/inline-createSuper-helpers.js @@ -0,0 +1,68 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = addCreateSuperHelper; +var _core = require("@babel/core"); +const helper = _core.template.statement` + function CREATE_SUPER(Derived) { + function isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + + // core-js@3 + if (Reflect.construct.sham) return false; + + // Proxy can't be polyfilled. Every browser implemented + // proxies before or at the same time as Reflect.construct, + // so if they support Proxy they also support Reflect.construct. + if (typeof Proxy === "function") return true; + + // Since Reflect.construct can't be properly polyfilled, some + // implementations (e.g. core-js@2) don't set the correct internal slots. + // Those polyfills don't allow us to subclass built-ins, so we need to + // use our fallback implementation. + try { + // If the internal slots aren't set, this throws an error similar to + // TypeError: this is not a Date object. + Date.prototype.toString.call(Reflect.construct(Date, [], function() {})); + return true; + } catch (e) { + return false; + } + } + + return function () { + var Super = GET_PROTOTYPE_OF(Derived), result; + if (isNativeReflectConstruct()) { + // NOTE: This doesn't work if this.__proto__.constructor has been modified. + var NewTarget = GET_PROTOTYPE_OF(this).constructor; + result = Reflect.construct(Super, arguments, NewTarget); + } else { + result = Super.apply(this, arguments); + } + return POSSIBLE_CONSTRUCTOR_RETURN(this, result); + } + } +`; +const helperIDs = new WeakMap(); +function addCreateSuperHelper(file) { + if (helperIDs.has(file)) { + return (_core.types.cloneNode || _core.types.clone)(helperIDs.get(file)); + } + try { + return file.addHelper("createSuper"); + } catch (_unused) {} + const id = file.scope.generateUidIdentifier("createSuper"); + helperIDs.set(file, id); + const fn = helper({ + CREATE_SUPER: id, + GET_PROTOTYPE_OF: file.addHelper("getPrototypeOf"), + POSSIBLE_CONSTRUCTOR_RETURN: file.addHelper("possibleConstructorReturn") + }); + file.path.unshiftContainer("body", [fn]); + file.scope.registerDeclaration(file.path.get("body.0")); + return _core.types.cloneNode(id); +} + +//# sourceMappingURL=inline-createSuper-helpers.js.map |
