UNPKG

2.02 kBJavaScriptView Raw
1"use strict";
2
3require("core-js/modules/es.function.bind");
4
5require("core-js/modules/es.object.define-property");
6
7require("core-js/modules/es.reflect.apply");
8
9require("core-js/modules/es.reflect.define-property");
10
11Object.defineProperty(exports, "__esModule", {
12 value: true
13});
14exports["default"] = makeClassMemberDecorator;
15
16/**
17 * Helper to decorate class member
18 * Supports class plain methods, field syntax and lazy methods
19 * @param {Function} decorate Actual decorator function.
20 * Example:
21 * decoratedFn => function () {
22 * // do stuff...
23 * return Reflect.apply(decoratedFn, this, arguments);
24 * }
25 * @returns {Function} Class member decorator ((target, name, descriptor) => newDescriptor)
26 */
27function makeClassMemberDecorator(decorate) {
28 return function decorateClassMember(target, name, descriptor) {
29 var configurable = descriptor.configurable,
30 enumerable = descriptor.enumerable,
31 value = descriptor.value,
32 _get = descriptor.get,
33 initializer = descriptor.initializer;
34
35 if (value) {
36 return {
37 configurable: configurable,
38 enumerable: enumerable,
39 value: decorate(value)
40 };
41 } // support lazy initializer
42
43
44 if (_get || initializer) {
45 return {
46 configurable: configurable,
47 enumerable: enumerable,
48 get: function get() {
49 // This happens if someone accesses the
50 // property directly on the prototype
51 if (this === target) {
52 return null;
53 }
54
55 var resolvedValue = initializer ? Reflect.apply(initializer, this, []) : Reflect.apply(_get, this, []);
56 var decoratedValue = decorate(resolvedValue).bind(this);
57 Reflect.defineProperty(this, name, {
58 configurable: configurable,
59 enumerable: enumerable,
60 value: decoratedValue
61 });
62 return decoratedValue;
63 }
64 };
65 }
66
67 throw new Error('called makeClassMemberDecorator on unsupported descriptor');
68 };
69}
\No newline at end of file