@jsenv/core 38.3.10 → 38.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -18
- package/dist/babel_helpers/AsyncGenerator/AsyncGenerator.js +3 -3
- package/dist/babel_helpers/AwaitValue/AwaitValue.js +2 -2
- package/dist/babel_helpers/{overloadYield/overloadYield.js → OverloadYield/OverloadYield.js} +1 -1
- package/dist/babel_helpers/applyDecoratedDescriptor/applyDecoratedDescriptor.js +23 -14
- package/dist/babel_helpers/applyDecs/applyDecs.js +32 -21
- package/dist/babel_helpers/applyDecs2203/applyDecs2203.js +549 -549
- package/dist/babel_helpers/applyDecs2203R/applyDecs2203R.js +27 -15
- package/dist/babel_helpers/applyDecs2301/applyDecs2301.js +29 -18
- package/dist/babel_helpers/applyDecs2305/applyDecs2305.js +362 -541
- package/dist/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +4 -4
- package/dist/babel_helpers/arrayWithHoles/arrayWithHoles.js +2 -2
- package/dist/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +3 -3
- package/dist/babel_helpers/assertThisInitialized/assertThisInitialized.js +5 -3
- package/dist/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +2 -2
- package/dist/babel_helpers/asyncIterator/asyncIterator.js +1 -1
- package/dist/babel_helpers/asyncToGenerator/asyncToGenerator.js +17 -17
- package/dist/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +2 -2
- package/dist/babel_helpers/callSuper/callSuper.js +25 -0
- package/dist/babel_helpers/checkInRHS/checkInRHS.js +10 -8
- package/dist/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +9 -6
- package/dist/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +2 -2
- package/dist/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +3 -3
- package/dist/babel_helpers/classCallCheck/classCallCheck.js +1 -1
- package/dist/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -2
- package/dist/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +7 -2
- package/dist/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +9 -3
- package/dist/babel_helpers/classNameTDZError/classNameTDZError.js +3 -1
- package/dist/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +4 -4
- package/dist/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +4 -4
- package/dist/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +2 -2
- package/dist/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +2 -2
- package/dist/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +5 -5
- package/dist/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +2 -2
- package/dist/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +1 -1
- package/dist/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +11 -7
- package/dist/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +7 -7
- package/dist/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +8 -4
- package/dist/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +1 -1
- package/dist/babel_helpers/construct/construct.js +18 -14
- package/dist/babel_helpers/createClass/createClass.js +1 -1
- package/dist/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +21 -20
- package/dist/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +10 -9
- package/dist/babel_helpers/createRawReactElement/createRawReactElement.js +11 -11
- package/dist/babel_helpers/createSuper/createSuper.js +11 -11
- package/dist/babel_helpers/decorate/decorate.js +255 -170
- package/dist/babel_helpers/defaults/defaults.js +5 -5
- package/dist/babel_helpers/defineAccessor/defineAccessor.js +1 -1
- package/dist/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +11 -11
- package/dist/babel_helpers/defineProperty/defineProperty.js +4 -4
- package/dist/babel_helpers/dispose/dispose.js +39 -39
- package/dist/babel_helpers/extends/extends.js +4 -4
- package/dist/babel_helpers/get/get.js +2 -2
- package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +1 -1
- package/dist/babel_helpers/identity/identity.js +1 -1
- package/dist/babel_helpers/importDeferProxy/importDeferProxy.js +27 -27
- package/dist/babel_helpers/inherits/inherits.js +4 -4
- package/dist/babel_helpers/inheritsLoose/inheritsLoose.js +4 -4
- package/dist/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +5 -3
- package/dist/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +1 -1
- package/dist/babel_helpers/instanceof/instanceof.js +7 -3
- package/dist/babel_helpers/interopRequireDefault/interopRequireDefault.js +1 -1
- package/dist/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +3 -1
- package/dist/babel_helpers/isNativeFunction/isNativeFunction.js +1 -1
- package/dist/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +12 -14
- package/dist/babel_helpers/iterableToArray/iterableToArray.js +1 -1
- package/dist/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +1 -1
- package/dist/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +1 -1
- package/dist/babel_helpers/jsx/jsx.js +1 -1
- package/dist/babel_helpers/maybeArrayLike/maybeArrayLike.js +4 -4
- package/dist/babel_helpers/newArrowCheck/newArrowCheck.js +1 -1
- package/dist/babel_helpers/nonIterableRest/nonIterableRest.js +2 -2
- package/dist/babel_helpers/nonIterableSpread/nonIterableSpread.js +2 -2
- package/dist/babel_helpers/nullishReceiverError/nullishReceiverError.js +1 -1
- package/dist/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +1 -1
- package/dist/babel_helpers/objectSpread/objectSpread.js +8 -8
- package/dist/babel_helpers/objectSpread2/objectSpread2.js +5 -3
- package/dist/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +12 -12
- package/dist/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +10 -10
- package/dist/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +7 -5
- package/dist/babel_helpers/readOnlyError/readOnlyError.js +1 -1
- package/dist/babel_helpers/regeneratorRuntime/regeneratorRuntime.js +1 -1
- package/dist/babel_helpers/set/set.js +22 -19
- package/dist/babel_helpers/setFunctionName/setFunctionName.js +18 -0
- package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +7 -6
- package/dist/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +4 -4
- package/dist/babel_helpers/slicedToArray/slicedToArray.js +5 -5
- package/dist/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +5 -5
- package/dist/babel_helpers/superPropBase/superPropBase.js +4 -4
- package/dist/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +2 -2
- package/dist/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +3 -3
- package/dist/babel_helpers/tdz/tdz.js +1 -1
- package/dist/babel_helpers/temporalRef/temporalRef.js +3 -3
- package/dist/babel_helpers/toArray/toArray.js +5 -5
- package/dist/babel_helpers/toConsumableArray/toConsumableArray.js +5 -5
- package/dist/babel_helpers/toPrimitive/toPrimitive.js +11 -7
- package/dist/babel_helpers/toPropertyKey/toPropertyKey.js +8 -4
- package/dist/babel_helpers/typeof/typeof.js +6 -5
- package/dist/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +7 -7
- package/dist/babel_helpers/using/using.js +20 -20
- package/dist/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +3 -3
- package/dist/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +12 -12
- package/dist/babel_helpers/wrapRegExp/wrapRegExp.js +5 -3
- package/dist/babel_helpers/writeOnlyError/writeOnlyError.js +1 -1
- package/dist/js/ribbon.js +1 -1
- package/dist/js/ws.js +234 -146
- package/dist/jsenv_core.js +1365 -1211
- package/package.json +26 -22
- package/src/build/build.js +22 -14
- package/src/dev/start_dev_server.js +8 -21
- package/src/kitchen/errors.js +29 -24
- package/src/kitchen/kitchen.js +1 -1
- package/src/kitchen/url_graph/references.js +8 -0
- package/src/kitchen/url_graph/url_graph_report.js +5 -3
- package/src/plugins/plugins.js +2 -2
- package/src/plugins/protocol_file/jsenv_plugin_protocol_file.js +17 -7
- package/src/plugins/reference_analysis/js/jsenv_plugin_js_reference_analysis.js +10 -12
- package/src/plugins/ribbon/client/ribbon.js +1 -1
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
/* eslint-disable prefer-spread */
|
|
6
6
|
/* eslint-disable no-void */
|
|
7
7
|
/* eslint-disable no-sequences */
|
|
8
|
-
import toArray from "../toArray/toArray.js"
|
|
9
|
-
import toPropertyKey from "../toPropertyKey/toPropertyKey.js"
|
|
8
|
+
import toArray from "../toArray/toArray.js";
|
|
9
|
+
import toPropertyKey from "../toPropertyKey/toPropertyKey.js";
|
|
10
10
|
|
|
11
11
|
// ClassDefinitionEvaluation (Steps 26-*)
|
|
12
12
|
export default function _decorate(
|
|
@@ -15,98 +15,108 @@ export default function _decorate(
|
|
|
15
15
|
superClass /* : ?Class<*> */,
|
|
16
16
|
mixins /* : ?Array<Function> */,
|
|
17
17
|
) /* : Class<*> */ {
|
|
18
|
-
var api = _getDecoratorsApi()
|
|
18
|
+
var api = _getDecoratorsApi();
|
|
19
19
|
if (mixins) {
|
|
20
20
|
for (var i = 0; i < mixins.length; i++) {
|
|
21
|
-
api = mixins[i](api)
|
|
21
|
+
api = mixins[i](api);
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
var r = factory(function initialize(O) {
|
|
25
|
-
api.initializeInstanceElements(O, decorated.elements)
|
|
26
|
-
}, superClass)
|
|
25
|
+
api.initializeInstanceElements(O, decorated.elements);
|
|
26
|
+
}, superClass);
|
|
27
27
|
var decorated = api.decorateClass(
|
|
28
28
|
_coalesceClassElements(r.d.map(_createElementDescriptor)),
|
|
29
29
|
decorators,
|
|
30
|
-
)
|
|
31
|
-
api.initializeClassElements(r.F, decorated.elements)
|
|
32
|
-
return api.runClassFinishers(r.F, decorated.finishers)
|
|
30
|
+
);
|
|
31
|
+
api.initializeClassElements(r.F, decorated.elements);
|
|
32
|
+
return api.runClassFinishers(r.F, decorated.finishers);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
var _getDecoratorsApi = function () {
|
|
36
36
|
var api = {
|
|
37
37
|
elementsDefinitionOrder: [["method"], ["field"]],
|
|
38
38
|
// InitializeInstanceElements
|
|
39
|
-
initializeInstanceElements(
|
|
40
|
-
|
|
39
|
+
initializeInstanceElements(
|
|
40
|
+
/* ::<C>*/ O /* : C */,
|
|
41
|
+
elements /* : ElementDescriptor[] */,
|
|
42
|
+
) {
|
|
43
|
+
["method", "field"].forEach(function (kind) {
|
|
41
44
|
elements.forEach(function (element /* : ElementDescriptor */) {
|
|
42
45
|
if (element.kind === kind && element.placement === "own") {
|
|
43
|
-
this.defineClassElement(O, element)
|
|
46
|
+
this.defineClassElement(O, element);
|
|
44
47
|
}
|
|
45
|
-
}, this)
|
|
46
|
-
}, this)
|
|
48
|
+
}, this);
|
|
49
|
+
}, this);
|
|
47
50
|
},
|
|
48
51
|
// InitializeClassElements
|
|
49
|
-
initializeClassElements(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
+
initializeClassElements(
|
|
53
|
+
/* ::<C>*/ F /* : Class<C> */,
|
|
54
|
+
elements /* : ElementDescriptor[] */,
|
|
55
|
+
) {
|
|
56
|
+
var proto = F.prototype;
|
|
57
|
+
["method", "field"].forEach(function (kind) {
|
|
52
58
|
elements.forEach(function (element /* : ElementDescriptor */) {
|
|
53
|
-
var placement = element.placement
|
|
54
|
-
if (
|
|
55
|
-
|
|
56
|
-
|
|
59
|
+
var placement = element.placement;
|
|
60
|
+
if (
|
|
61
|
+
element.kind === kind &&
|
|
62
|
+
(placement === "static" || placement === "prototype")
|
|
63
|
+
) {
|
|
64
|
+
var receiver = placement === "static" ? F : proto;
|
|
65
|
+
this.defineClassElement(receiver, element);
|
|
57
66
|
}
|
|
58
|
-
}, this)
|
|
59
|
-
}, this)
|
|
67
|
+
}, this);
|
|
68
|
+
}, this);
|
|
60
69
|
},
|
|
61
70
|
// DefineClassElement
|
|
62
71
|
defineClassElement(
|
|
63
72
|
/* ::<C>*/ receiver /* : C | Class<C> */,
|
|
64
73
|
element /* : ElementDescriptor */,
|
|
65
74
|
) {
|
|
66
|
-
var descriptor /* : PropertyDescriptor */ = element.descriptor
|
|
75
|
+
var descriptor /* : PropertyDescriptor */ = element.descriptor;
|
|
67
76
|
if (element.kind === "field") {
|
|
68
|
-
var initializer = element.initializer
|
|
77
|
+
var initializer = element.initializer;
|
|
69
78
|
descriptor = {
|
|
70
79
|
enumerable: descriptor.enumerable,
|
|
71
80
|
writable: descriptor.writable,
|
|
72
81
|
configurable: descriptor.configurable,
|
|
73
82
|
value: initializer === void 0 ? void 0 : initializer.call(receiver),
|
|
74
|
-
}
|
|
83
|
+
};
|
|
75
84
|
}
|
|
76
|
-
Object.defineProperty(receiver, element.key, descriptor)
|
|
85
|
+
Object.defineProperty(receiver, element.key, descriptor);
|
|
77
86
|
},
|
|
78
87
|
// DecorateClass
|
|
79
88
|
decorateClass(
|
|
80
89
|
elements /* : ElementDescriptor[] */,
|
|
81
90
|
decorators /* : ClassDecorator[] */,
|
|
82
91
|
) /* : ElementsFinishers */ {
|
|
83
|
-
var newElements /* : ElementDescriptor[] */ = []
|
|
84
|
-
var finishers /* : ClassFinisher[] */ = []
|
|
92
|
+
var newElements /* : ElementDescriptor[] */ = [];
|
|
93
|
+
var finishers /* : ClassFinisher[] */ = [];
|
|
85
94
|
var placements /* : Placements */ = {
|
|
86
95
|
static: [],
|
|
87
96
|
prototype: [],
|
|
88
97
|
own: [],
|
|
89
|
-
}
|
|
98
|
+
};
|
|
90
99
|
elements.forEach(function (element /* : ElementDescriptor */) {
|
|
91
|
-
this.addElementPlacement(element, placements)
|
|
92
|
-
}, this)
|
|
100
|
+
this.addElementPlacement(element, placements);
|
|
101
|
+
}, this);
|
|
93
102
|
elements.forEach(function (element /* : ElementDescriptor */) {
|
|
94
|
-
if (!_hasDecorators(element)) return newElements.push(element)
|
|
95
|
-
var elementFinishersExtras /* : ElementFinishersExtras */ =
|
|
96
|
-
element,
|
|
97
|
-
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
finishers.push.apply(finishers, elementFinishersExtras.finishers)
|
|
102
|
-
}, this)
|
|
103
|
+
if (!_hasDecorators(element)) return newElements.push(element);
|
|
104
|
+
var elementFinishersExtras /* : ElementFinishersExtras */ =
|
|
105
|
+
this.decorateElement(element, placements);
|
|
106
|
+
newElements.push(elementFinishersExtras.element);
|
|
107
|
+
newElements.push.apply(newElements, elementFinishersExtras.extras);
|
|
108
|
+
finishers.push.apply(finishers, elementFinishersExtras.finishers);
|
|
109
|
+
}, this);
|
|
103
110
|
if (!decorators) {
|
|
104
|
-
return { elements: newElements, finishers }
|
|
111
|
+
return { elements: newElements, finishers };
|
|
105
112
|
}
|
|
106
|
-
var result /* : ElementsFinishers */ = this.decorateConstructor(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
113
|
+
var result /* : ElementsFinishers */ = this.decorateConstructor(
|
|
114
|
+
newElements,
|
|
115
|
+
decorators,
|
|
116
|
+
);
|
|
117
|
+
finishers.push.apply(finishers, result.finishers);
|
|
118
|
+
result.finishers = finishers;
|
|
119
|
+
return result;
|
|
110
120
|
},
|
|
111
121
|
// AddElementPlacement
|
|
112
122
|
addElementPlacement(
|
|
@@ -114,101 +124,120 @@ var _getDecoratorsApi = function () {
|
|
|
114
124
|
placements /* : Placements */,
|
|
115
125
|
silent /* : boolean */,
|
|
116
126
|
) {
|
|
117
|
-
var keys = placements[element.placement]
|
|
127
|
+
var keys = placements[element.placement];
|
|
118
128
|
if (!silent && keys.indexOf(element.key) !== -1) {
|
|
119
|
-
throw new TypeError(`Duplicated element (${element.key})`)
|
|
129
|
+
throw new TypeError(`Duplicated element (${element.key})`);
|
|
120
130
|
}
|
|
121
|
-
keys.push(element.key)
|
|
131
|
+
keys.push(element.key);
|
|
122
132
|
},
|
|
123
133
|
// DecorateElement
|
|
124
134
|
decorateElement(
|
|
125
135
|
element /* : ElementDescriptor */,
|
|
126
136
|
placements /* : Placements */,
|
|
127
137
|
) /* : ElementFinishersExtras */ {
|
|
128
|
-
var extras /* : ElementDescriptor[] */ = []
|
|
129
|
-
var finishers /* : ClassFinisher[] */ = []
|
|
130
|
-
for (
|
|
138
|
+
var extras /* : ElementDescriptor[] */ = [];
|
|
139
|
+
var finishers /* : ClassFinisher[] */ = [];
|
|
140
|
+
for (
|
|
141
|
+
var decorators = element.decorators, i = decorators.length - 1;
|
|
142
|
+
i >= 0;
|
|
143
|
+
i--
|
|
144
|
+
) {
|
|
131
145
|
// (inlined) RemoveElementPlacement
|
|
132
|
-
var keys = placements[element.placement]
|
|
133
|
-
keys.splice(keys.indexOf(element.key), 1)
|
|
134
|
-
var elementObject /* : ElementObjectInput */ =
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
146
|
+
var keys = placements[element.placement];
|
|
147
|
+
keys.splice(keys.indexOf(element.key), 1);
|
|
148
|
+
var elementObject /* : ElementObjectInput */ =
|
|
149
|
+
this.fromElementDescriptor(element);
|
|
150
|
+
var elementFinisherExtras /* : ElementFinisherExtras */ =
|
|
151
|
+
this.toElementFinisherExtras(
|
|
152
|
+
(0, decorators[i])(elementObject) /* : ElementObjectOutput */ ||
|
|
153
|
+
elementObject,
|
|
154
|
+
);
|
|
155
|
+
element = elementFinisherExtras.element;
|
|
156
|
+
this.addElementPlacement(element, placements);
|
|
140
157
|
if (elementFinisherExtras.finisher) {
|
|
141
|
-
finishers.push(elementFinisherExtras.finisher)
|
|
158
|
+
finishers.push(elementFinisherExtras.finisher);
|
|
142
159
|
}
|
|
143
|
-
var newExtras /* : ElementDescriptor[] | void */ =
|
|
160
|
+
var newExtras /* : ElementDescriptor[] | void */ =
|
|
161
|
+
elementFinisherExtras.extras;
|
|
144
162
|
if (newExtras) {
|
|
145
163
|
for (var j = 0; j < newExtras.length; j++) {
|
|
146
|
-
this.addElementPlacement(newExtras[j], placements)
|
|
164
|
+
this.addElementPlacement(newExtras[j], placements);
|
|
147
165
|
}
|
|
148
|
-
extras.push.apply(extras, newExtras)
|
|
166
|
+
extras.push.apply(extras, newExtras);
|
|
149
167
|
}
|
|
150
168
|
}
|
|
151
|
-
return { element, finishers, extras }
|
|
169
|
+
return { element, finishers, extras };
|
|
152
170
|
},
|
|
153
171
|
// DecorateConstructor
|
|
154
172
|
decorateConstructor(
|
|
155
173
|
elements /* : ElementDescriptor[] */,
|
|
156
174
|
decorators /* : ClassDecorator[] */,
|
|
157
175
|
) /* : ElementsFinishers */ {
|
|
158
|
-
var finishers /* : ClassFinisher[] */ = []
|
|
176
|
+
var finishers /* : ClassFinisher[] */ = [];
|
|
159
177
|
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
160
|
-
var obj /* : ClassObject */ = this.fromClassDescriptor(elements)
|
|
161
|
-
var elementsAndFinisher /* : ElementsFinisher */ =
|
|
162
|
-
(
|
|
163
|
-
|
|
178
|
+
var obj /* : ClassObject */ = this.fromClassDescriptor(elements);
|
|
179
|
+
var elementsAndFinisher /* : ElementsFinisher */ =
|
|
180
|
+
this.toClassDescriptor(
|
|
181
|
+
(0, decorators[i])(obj) /* : ClassObject */ || obj,
|
|
182
|
+
);
|
|
164
183
|
if (elementsAndFinisher.finisher !== undefined) {
|
|
165
|
-
finishers.push(elementsAndFinisher.finisher)
|
|
184
|
+
finishers.push(elementsAndFinisher.finisher);
|
|
166
185
|
}
|
|
167
186
|
if (elementsAndFinisher.elements !== undefined) {
|
|
168
|
-
elements = elementsAndFinisher.elements
|
|
187
|
+
elements = elementsAndFinisher.elements;
|
|
169
188
|
for (var j = 0; j < elements.length - 1; j++) {
|
|
170
189
|
for (var k = j + 1; k < elements.length; k++) {
|
|
171
190
|
if (
|
|
172
191
|
elements[j].key === elements[k].key &&
|
|
173
192
|
elements[j].placement === elements[k].placement
|
|
174
193
|
) {
|
|
175
|
-
throw new TypeError(`Duplicated element (${elements[j].key})`)
|
|
194
|
+
throw new TypeError(`Duplicated element (${elements[j].key})`);
|
|
176
195
|
}
|
|
177
196
|
}
|
|
178
197
|
}
|
|
179
198
|
}
|
|
180
199
|
}
|
|
181
|
-
return { elements, finishers }
|
|
200
|
+
return { elements, finishers };
|
|
182
201
|
},
|
|
183
202
|
// FromElementDescriptor
|
|
184
|
-
fromElementDescriptor(
|
|
203
|
+
fromElementDescriptor(
|
|
204
|
+
element /* : ElementDescriptor */,
|
|
205
|
+
) /* : ElementObject */ {
|
|
185
206
|
var obj /* : ElementObject */ = {
|
|
186
207
|
kind: element.kind,
|
|
187
208
|
key: element.key,
|
|
188
209
|
placement: element.placement,
|
|
189
210
|
descriptor: element.descriptor,
|
|
190
|
-
}
|
|
211
|
+
};
|
|
191
212
|
var desc = {
|
|
192
213
|
value: "Descriptor",
|
|
193
214
|
configurable: true,
|
|
194
|
-
}
|
|
195
|
-
Object.defineProperty(obj, Symbol.toStringTag, desc)
|
|
196
|
-
if (element.kind === "field") obj.initializer = element.initializer
|
|
197
|
-
return obj
|
|
215
|
+
};
|
|
216
|
+
Object.defineProperty(obj, Symbol.toStringTag, desc);
|
|
217
|
+
if (element.kind === "field") obj.initializer = element.initializer;
|
|
218
|
+
return obj;
|
|
198
219
|
},
|
|
199
220
|
// ToElementDescriptors
|
|
200
|
-
toElementDescriptors(
|
|
201
|
-
|
|
221
|
+
toElementDescriptors(
|
|
222
|
+
elementObjects /* : ElementObject[] */,
|
|
223
|
+
) /* : ElementDescriptor[] */ {
|
|
224
|
+
if (elementObjects === undefined) return;
|
|
202
225
|
return toArray(elementObjects).map(function (elementObject) {
|
|
203
|
-
var element = this.toElementDescriptor(elementObject)
|
|
204
|
-
this.disallowProperty(
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
226
|
+
var element = this.toElementDescriptor(elementObject);
|
|
227
|
+
this.disallowProperty(
|
|
228
|
+
elementObject,
|
|
229
|
+
"finisher",
|
|
230
|
+
"An element descriptor",
|
|
231
|
+
);
|
|
232
|
+
this.disallowProperty(elementObject, "extras", "An element descriptor");
|
|
233
|
+
return element;
|
|
234
|
+
}, this);
|
|
208
235
|
},
|
|
209
236
|
// ToElementDescriptor
|
|
210
|
-
toElementDescriptor(
|
|
211
|
-
|
|
237
|
+
toElementDescriptor(
|
|
238
|
+
elementObject /* : ElementObject */,
|
|
239
|
+
) /* : ElementDescriptor */ {
|
|
240
|
+
var kind = String(elementObject.kind);
|
|
212
241
|
if (kind !== "method" && kind !== "field") {
|
|
213
242
|
throw new TypeError(
|
|
214
243
|
`${
|
|
@@ -216,72 +245,102 @@ var _getDecoratorsApi = function () {
|
|
|
216
245
|
' "field", but a decorator created an element descriptor with' +
|
|
217
246
|
' .kind "'
|
|
218
247
|
}${kind}"`,
|
|
219
|
-
)
|
|
248
|
+
);
|
|
220
249
|
}
|
|
221
|
-
var key = toPropertyKey(elementObject.key)
|
|
222
|
-
var placement = String(elementObject.placement)
|
|
223
|
-
if (
|
|
250
|
+
var key = toPropertyKey(elementObject.key);
|
|
251
|
+
var placement = String(elementObject.placement);
|
|
252
|
+
if (
|
|
253
|
+
placement !== "static" &&
|
|
254
|
+
placement !== "prototype" &&
|
|
255
|
+
placement !== "own"
|
|
256
|
+
) {
|
|
224
257
|
throw new TypeError(
|
|
225
258
|
`${
|
|
226
259
|
'An element descriptor\'s .placement property must be one of "static",' +
|
|
227
260
|
' "prototype" or "own", but a decorator created an element descriptor' +
|
|
228
261
|
' with .placement "'
|
|
229
262
|
}${placement}"`,
|
|
230
|
-
)
|
|
263
|
+
);
|
|
231
264
|
}
|
|
232
|
-
var descriptor /* : PropertyDescriptor */ = elementObject.descriptor
|
|
233
|
-
this.disallowProperty(elementObject, "elements", "An element descriptor")
|
|
265
|
+
var descriptor /* : PropertyDescriptor */ = elementObject.descriptor;
|
|
266
|
+
this.disallowProperty(elementObject, "elements", "An element descriptor");
|
|
234
267
|
var element /* : ElementDescriptor */ = {
|
|
235
268
|
kind,
|
|
236
269
|
key,
|
|
237
270
|
placement,
|
|
238
271
|
descriptor: Object.assign({}, descriptor),
|
|
239
|
-
}
|
|
272
|
+
};
|
|
240
273
|
if (kind !== "field") {
|
|
241
|
-
this.disallowProperty(
|
|
274
|
+
this.disallowProperty(
|
|
275
|
+
elementObject,
|
|
276
|
+
"initializer",
|
|
277
|
+
"A method descriptor",
|
|
278
|
+
);
|
|
242
279
|
} else {
|
|
243
|
-
this.disallowProperty(
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
280
|
+
this.disallowProperty(
|
|
281
|
+
descriptor,
|
|
282
|
+
"get",
|
|
283
|
+
"The property descriptor of a field descriptor",
|
|
284
|
+
);
|
|
285
|
+
this.disallowProperty(
|
|
286
|
+
descriptor,
|
|
287
|
+
"set",
|
|
288
|
+
"The property descriptor of a field descriptor",
|
|
289
|
+
);
|
|
290
|
+
this.disallowProperty(
|
|
291
|
+
descriptor,
|
|
292
|
+
"value",
|
|
293
|
+
"The property descriptor of a field descriptor",
|
|
294
|
+
);
|
|
295
|
+
element.initializer = elementObject.initializer;
|
|
247
296
|
}
|
|
248
|
-
return element
|
|
297
|
+
return element;
|
|
249
298
|
},
|
|
250
|
-
toElementFinisherExtras(
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
var
|
|
254
|
-
|
|
299
|
+
toElementFinisherExtras(
|
|
300
|
+
elementObject /* : ElementObject */,
|
|
301
|
+
) /* : ElementFinisherExtras */ {
|
|
302
|
+
var element /* : ElementDescriptor */ =
|
|
303
|
+
this.toElementDescriptor(elementObject);
|
|
304
|
+
var finisher /* : ClassFinisher */ = _optionalCallableProperty(
|
|
305
|
+
elementObject,
|
|
306
|
+
"finisher",
|
|
307
|
+
);
|
|
308
|
+
var extras /* : ElementDescriptors[] */ = this.toElementDescriptors(
|
|
309
|
+
elementObject.extras,
|
|
310
|
+
);
|
|
311
|
+
return { element, finisher, extras };
|
|
255
312
|
},
|
|
256
313
|
// FromClassDescriptor
|
|
257
|
-
fromClassDescriptor(
|
|
314
|
+
fromClassDescriptor(
|
|
315
|
+
elements /* : ElementDescriptor[] */,
|
|
316
|
+
) /* : ClassObject */ {
|
|
258
317
|
var obj = {
|
|
259
318
|
kind: "class",
|
|
260
319
|
elements: elements.map(this.fromElementDescriptor, this),
|
|
261
|
-
}
|
|
262
|
-
var desc = { value: "Descriptor", configurable: true }
|
|
263
|
-
Object.defineProperty(obj, Symbol.toStringTag, desc)
|
|
264
|
-
return obj
|
|
320
|
+
};
|
|
321
|
+
var desc = { value: "Descriptor", configurable: true };
|
|
322
|
+
Object.defineProperty(obj, Symbol.toStringTag, desc);
|
|
323
|
+
return obj;
|
|
265
324
|
},
|
|
266
325
|
// ToClassDescriptor
|
|
267
326
|
toClassDescriptor(obj /* : ClassObject */) /* : ElementsFinisher */ {
|
|
268
|
-
var kind = String(obj.kind)
|
|
327
|
+
var kind = String(obj.kind);
|
|
269
328
|
if (kind !== "class") {
|
|
270
329
|
throw new TypeError(
|
|
271
330
|
`${
|
|
272
331
|
'A class descriptor\'s .kind property must be "class", but a decorator' +
|
|
273
332
|
' created a class descriptor with .kind "'
|
|
274
333
|
}${kind}"`,
|
|
275
|
-
)
|
|
334
|
+
);
|
|
276
335
|
}
|
|
277
|
-
this.disallowProperty(obj, "key", "A class descriptor")
|
|
278
|
-
this.disallowProperty(obj, "placement", "A class descriptor")
|
|
279
|
-
this.disallowProperty(obj, "descriptor", "A class descriptor")
|
|
280
|
-
this.disallowProperty(obj, "initializer", "A class descriptor")
|
|
281
|
-
this.disallowProperty(obj, "extras", "A class descriptor")
|
|
282
|
-
var finisher = _optionalCallableProperty(obj, "finisher")
|
|
283
|
-
var elements = this.toElementDescriptors(obj.elements)
|
|
284
|
-
return { elements, finisher }
|
|
336
|
+
this.disallowProperty(obj, "key", "A class descriptor");
|
|
337
|
+
this.disallowProperty(obj, "placement", "A class descriptor");
|
|
338
|
+
this.disallowProperty(obj, "descriptor", "A class descriptor");
|
|
339
|
+
this.disallowProperty(obj, "initializer", "A class descriptor");
|
|
340
|
+
this.disallowProperty(obj, "extras", "A class descriptor");
|
|
341
|
+
var finisher = _optionalCallableProperty(obj, "finisher");
|
|
342
|
+
var elements = this.toElementDescriptors(obj.elements);
|
|
343
|
+
return { elements, finisher };
|
|
285
344
|
},
|
|
286
345
|
// RunClassFinishers
|
|
287
346
|
runClassFinishers(
|
|
@@ -289,82 +348,105 @@ var _getDecoratorsApi = function () {
|
|
|
289
348
|
finishers /* : ClassFinisher[] */,
|
|
290
349
|
) /* : Class<*> */ {
|
|
291
350
|
for (var i = 0; i < finishers.length; i++) {
|
|
292
|
-
var newConstructor /* : ?Class<*> */ = (0, finishers[i])(constructor)
|
|
351
|
+
var newConstructor /* : ?Class<*> */ = (0, finishers[i])(constructor);
|
|
293
352
|
if (newConstructor !== undefined) {
|
|
294
353
|
// NOTE: This should check if IsConstructor(newConstructor) is false.
|
|
295
354
|
if (typeof newConstructor !== "function") {
|
|
296
|
-
throw new TypeError("Finishers must return a constructor.")
|
|
355
|
+
throw new TypeError("Finishers must return a constructor.");
|
|
297
356
|
}
|
|
298
|
-
constructor = newConstructor
|
|
357
|
+
constructor = newConstructor;
|
|
299
358
|
}
|
|
300
359
|
}
|
|
301
|
-
return constructor
|
|
360
|
+
return constructor;
|
|
302
361
|
},
|
|
303
362
|
disallowProperty(obj, name, objectType) {
|
|
304
363
|
if (obj[name] !== undefined) {
|
|
305
|
-
throw new TypeError(`${objectType} can't have a .${name} property.`)
|
|
364
|
+
throw new TypeError(`${objectType} can't have a .${name} property.`);
|
|
306
365
|
}
|
|
307
366
|
},
|
|
308
|
-
}
|
|
367
|
+
};
|
|
309
368
|
_getDecoratorsApi = function () {
|
|
310
|
-
return api
|
|
311
|
-
}
|
|
312
|
-
return api
|
|
313
|
-
}
|
|
369
|
+
return api;
|
|
370
|
+
};
|
|
371
|
+
return api;
|
|
372
|
+
};
|
|
314
373
|
|
|
315
374
|
// ClassElementEvaluation
|
|
316
|
-
function _createElementDescriptor(
|
|
317
|
-
|
|
318
|
-
|
|
375
|
+
function _createElementDescriptor(
|
|
376
|
+
def /* : ElementDefinition */,
|
|
377
|
+
) /* : ElementDescriptor */ {
|
|
378
|
+
var key = toPropertyKey(def.key);
|
|
379
|
+
var descriptor; /* : PropertyDescriptor */
|
|
319
380
|
if (def.kind === "method") {
|
|
320
381
|
descriptor = {
|
|
321
382
|
value: def.value,
|
|
322
383
|
writable: true,
|
|
323
384
|
configurable: true,
|
|
324
385
|
enumerable: false,
|
|
325
|
-
}
|
|
386
|
+
};
|
|
326
387
|
} else if (def.kind === "get") {
|
|
327
|
-
descriptor = { get: def.value, configurable: true, enumerable: false }
|
|
388
|
+
descriptor = { get: def.value, configurable: true, enumerable: false };
|
|
328
389
|
} else if (def.kind === "set") {
|
|
329
|
-
descriptor = { set: def.value, configurable: true, enumerable: false }
|
|
390
|
+
descriptor = { set: def.value, configurable: true, enumerable: false };
|
|
330
391
|
} else if (def.kind === "field") {
|
|
331
|
-
descriptor = { configurable: true, writable: true, enumerable: true }
|
|
392
|
+
descriptor = { configurable: true, writable: true, enumerable: true };
|
|
332
393
|
}
|
|
333
394
|
var element /* : ElementDescriptor */ = {
|
|
334
395
|
kind: def.kind === "field" ? "field" : "method",
|
|
335
396
|
key,
|
|
336
|
-
placement: def.static
|
|
397
|
+
placement: def.static
|
|
398
|
+
? "static"
|
|
399
|
+
: def.kind === "field"
|
|
400
|
+
? "own"
|
|
401
|
+
: "prototype",
|
|
337
402
|
descriptor,
|
|
338
|
-
}
|
|
339
|
-
if (def.decorators) element.decorators = def.decorators
|
|
340
|
-
if (def.kind === "field") element.initializer = def.value
|
|
341
|
-
return element
|
|
403
|
+
};
|
|
404
|
+
if (def.decorators) element.decorators = def.decorators;
|
|
405
|
+
if (def.kind === "field") element.initializer = def.value;
|
|
406
|
+
return element;
|
|
342
407
|
}
|
|
343
408
|
// CoalesceGetterSetter
|
|
344
|
-
function _coalesceGetterSetter(
|
|
409
|
+
function _coalesceGetterSetter(
|
|
410
|
+
element /* : ElementDescriptor */,
|
|
411
|
+
other /* : ElementDescriptor */,
|
|
412
|
+
) {
|
|
345
413
|
if (element.descriptor.get !== undefined) {
|
|
346
|
-
other.descriptor.get = element.descriptor.get
|
|
414
|
+
other.descriptor.get = element.descriptor.get;
|
|
347
415
|
} else {
|
|
348
|
-
other.descriptor.set = element.descriptor.set
|
|
416
|
+
other.descriptor.set = element.descriptor.set;
|
|
349
417
|
}
|
|
350
418
|
}
|
|
351
419
|
// CoalesceClassElements
|
|
352
|
-
function _coalesceClassElements(
|
|
353
|
-
|
|
354
|
-
|
|
420
|
+
function _coalesceClassElements(
|
|
421
|
+
elements /* : ElementDescriptor[] */,
|
|
422
|
+
) /* : ElementDescriptor[] */ {
|
|
423
|
+
var newElements /* : ElementDescriptor[] */ = [];
|
|
424
|
+
var isSameElement = function (
|
|
425
|
+
other /* : ElementDescriptor */,
|
|
426
|
+
) /* : boolean */ {
|
|
355
427
|
return (
|
|
356
|
-
other.kind === "method" &&
|
|
357
|
-
|
|
358
|
-
|
|
428
|
+
other.kind === "method" &&
|
|
429
|
+
other.key === element.key &&
|
|
430
|
+
other.placement === element.placement
|
|
431
|
+
);
|
|
432
|
+
};
|
|
359
433
|
for (var i = 0; i < elements.length; i++) {
|
|
360
|
-
var element /* : ElementDescriptor */ = elements[i]
|
|
361
|
-
var other /* : ElementDescriptor */
|
|
362
|
-
if (
|
|
363
|
-
|
|
434
|
+
var element /* : ElementDescriptor */ = elements[i];
|
|
435
|
+
var other; /* : ElementDescriptor */
|
|
436
|
+
if (
|
|
437
|
+
element.kind === "method" &&
|
|
438
|
+
(other = newElements.find(isSameElement))
|
|
439
|
+
) {
|
|
440
|
+
if (
|
|
441
|
+
_isDataDescriptor(element.descriptor) ||
|
|
442
|
+
_isDataDescriptor(other.descriptor)
|
|
443
|
+
) {
|
|
364
444
|
if (_hasDecorators(element) || _hasDecorators(other)) {
|
|
365
|
-
throw new ReferenceError(
|
|
445
|
+
throw new ReferenceError(
|
|
446
|
+
`Duplicated methods (${element.key}) can't be decorated.`,
|
|
447
|
+
);
|
|
366
448
|
}
|
|
367
|
-
other.descriptor = element.descriptor
|
|
449
|
+
other.descriptor = element.descriptor;
|
|
368
450
|
} else {
|
|
369
451
|
if (_hasDecorators(element)) {
|
|
370
452
|
if (_hasDecorators(other)) {
|
|
@@ -373,31 +455,34 @@ function _coalesceClassElements(elements /* : ElementDescriptor[] */) /* : Eleme
|
|
|
373
455
|
"Decorators can't be placed on different accessors with for " +
|
|
374
456
|
"the same property ("
|
|
375
457
|
}${element.key}).`,
|
|
376
|
-
)
|
|
458
|
+
);
|
|
377
459
|
}
|
|
378
|
-
other.decorators = element.decorators
|
|
460
|
+
other.decorators = element.decorators;
|
|
379
461
|
}
|
|
380
|
-
_coalesceGetterSetter(element, other)
|
|
462
|
+
_coalesceGetterSetter(element, other);
|
|
381
463
|
}
|
|
382
464
|
} else {
|
|
383
|
-
newElements.push(element)
|
|
465
|
+
newElements.push(element);
|
|
384
466
|
}
|
|
385
467
|
}
|
|
386
|
-
return newElements
|
|
468
|
+
return newElements;
|
|
387
469
|
}
|
|
388
470
|
function _hasDecorators(element /* : ElementDescriptor */) /* : boolean */ {
|
|
389
|
-
return element.decorators && element.decorators.length
|
|
471
|
+
return element.decorators && element.decorators.length;
|
|
390
472
|
}
|
|
391
473
|
function _isDataDescriptor(desc /* : PropertyDescriptor */) /* : boolean */ {
|
|
392
|
-
return
|
|
474
|
+
return (
|
|
475
|
+
desc !== undefined &&
|
|
476
|
+
!(desc.value === undefined && desc.writable === undefined)
|
|
477
|
+
);
|
|
393
478
|
}
|
|
394
479
|
function _optionalCallableProperty /* ::<T>*/(
|
|
395
480
|
obj /* : T */,
|
|
396
481
|
name /* : $Keys<T> */,
|
|
397
482
|
) /* : ?Function */ {
|
|
398
|
-
var value = obj[name]
|
|
483
|
+
var value = obj[name];
|
|
399
484
|
if (value !== undefined && typeof value !== "function") {
|
|
400
|
-
throw new TypeError(`Expected '${name}' to be a function`)
|
|
485
|
+
throw new TypeError(`Expected '${name}' to be a function`);
|
|
401
486
|
}
|
|
402
|
-
return value
|
|
487
|
+
return value;
|
|
403
488
|
}
|