UNPKG

react-tracking

Version:
69 lines (58 loc) 2.02 kB
"use strict"; require("core-js/modules/es6.object.define-property"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = makeClassMemberDecorator; require("core-js/modules/es6.reflect.define-property"); require("core-js/modules/es6.function.bind"); require("core-js/modules/es6.reflect.apply"); /** * Helper to decorate class member * Supports class plain methods, field syntax and lazy methods * @param {Function} decorate Actual decorator function. * Example: * decoratedFn => function () { * // do stuff... * return Reflect.apply(decoratedFn, this, arguments); * } * @returns {Function} Class member decorator ((target, name, descriptor) => newDescriptor) */ function makeClassMemberDecorator(decorate) { return function decorateClassMember(target, name, descriptor) { var configurable = descriptor.configurable, enumerable = descriptor.enumerable, value = descriptor.value, _get = descriptor.get, initializer = descriptor.initializer; if (value) { return { configurable: configurable, enumerable: enumerable, value: decorate(value) }; } // support lazy initializer if (_get || initializer) { return { configurable: configurable, enumerable: enumerable, get: function get() { // This happens if someone accesses the // property directly on the prototype if (this === target) { return null; } var resolvedValue = initializer ? Reflect.apply(initializer, this, []) : Reflect.apply(_get, this, []); var decoratedValue = decorate(resolvedValue).bind(this); Reflect.defineProperty(this, name, { configurable: configurable, enumerable: enumerable, value: decoratedValue }); return decoratedValue; } }; } throw new Error('called makeClassMemberDecorator on unsupported descriptor'); }; }