UNPKG

react-fix-binds

Version:

Fix React autobind using class components

71 lines (57 loc) 2.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; exports.default = fixBind; var BINDS = Symbol(); function fixBind(target, property, descriptor) { if (!property && !descriptor && target.constructor !== Object) return fixBindInstance(target); return fixBindMaybeCalledDecorator(target, property, descriptor); } function fixBindInstance(target) { var klass = target.constructor; if (!klass[BINDS]) return; klass[BINDS].forEach(function (bind) { delete target[bind.property]; }); } function fixBindMaybeCalledDecorator(options, property, descriptor) { if (!property && !descriptor) return function (target, property, descriptor) { return fixBindDecorator(target, property, descriptor, options); }; return fixBindDecorator(options, property, descriptor, {}); } function fixBindDecorator(target, property, descriptor, options) { var klass = target.constructor; if (!klass[BINDS]) { klass[BINDS] = []; } klass[BINDS].push({ property: property, options: options }); if (options.autobind) { var _ret = function () { var _ref = descriptor || {}, enumerable = _ref.enumerable, _ref$configurable = _ref.configurable, configurable = _ref$configurable === undefined ? true : _ref$configurable, _ref$writable = _ref.writable, writable = _ref$writable === undefined ? true : _ref$writable; var method = target[property]; return { v: { enumerable: enumerable, configurable: true, get: function get() { var boundMethod = method.bind(this); Object.defineProperty({ enumerable: enumerable, configurable: configurable, value: boundMethod }); return boundMethod; } } }; }(); if ((typeof _ret === "undefined" ? "undefined" : _typeof(_ret)) === "object") return _ret.v; } }