react-fix-binds
Version:
Fix React autobind using class components
71 lines (57 loc) • 2.19 kB
JavaScript
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;
}
}
;