source: node_modules/@babel/runtime-corejs3/helpers/esm/decorate.js

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 14.5 KB
Line 
1import _mapInstanceProperty from "core-js-pure/features/instance/map.js";
2import _forEachInstanceProperty from "core-js-pure/features/instance/for-each.js";
3import _Object$defineProperty from "core-js-pure/features/object/define-property.js";
4import _pushInstanceProperty from "core-js-pure/features/instance/push.js";
5import _indexOfInstanceProperty from "core-js-pure/features/instance/index-of.js";
6import _spliceInstanceProperty from "core-js-pure/features/instance/splice.js";
7import _Symbol$toStringTag from "core-js-pure/features/symbol/to-string-tag.js";
8import _Object$assign from "core-js-pure/features/object/assign.js";
9import _findInstanceProperty from "core-js-pure/features/instance/find.js";
10import toArray from "./toArray.js";
11import toPropertyKey from "./toPropertyKey.js";
12export default function _decorate(decorators, factory, superClass, mixins) {
13 var _context;
14 var api = _getDecoratorsApi();
15 if (mixins) {
16 for (var i = 0; i < mixins.length; i++) {
17 api = mixins[i](api);
18 }
19 }
20 var r = factory(function initialize(O) {
21 api.initializeInstanceElements(O, decorated.elements);
22 }, superClass);
23 var decorated = api.decorateClass(_coalesceClassElements(_mapInstanceProperty(_context = r.d).call(_context, _createElementDescriptor)), decorators);
24 api.initializeClassElements(r.F, decorated.elements);
25 return api.runClassFinishers(r.F, decorated.finishers);
26}
27function _getDecoratorsApi() {
28 _getDecoratorsApi = function _getDecoratorsApi() {
29 return api;
30 };
31 var api = {
32 elementsDefinitionOrder: [["method"], ["field"]],
33 initializeInstanceElements: function initializeInstanceElements(O, elements) {
34 var _context2;
35 _forEachInstanceProperty(_context2 = ["method", "field"]).call(_context2, function (kind) {
36 _forEachInstanceProperty(elements).call(elements, function (element) {
37 if (element.kind === kind && element.placement === "own") {
38 this.defineClassElement(O, element);
39 }
40 }, this);
41 }, this);
42 },
43 initializeClassElements: function initializeClassElements(F, elements) {
44 var _context3;
45 var proto = F.prototype;
46 _forEachInstanceProperty(_context3 = ["method", "field"]).call(_context3, function (kind) {
47 _forEachInstanceProperty(elements).call(elements, function (element) {
48 var placement = element.placement;
49 if (element.kind === kind && (placement === "static" || placement === "prototype")) {
50 var receiver = placement === "static" ? F : proto;
51 this.defineClassElement(receiver, element);
52 }
53 }, this);
54 }, this);
55 },
56 defineClassElement: function defineClassElement(receiver, element) {
57 var descriptor = element.descriptor;
58 if (element.kind === "field") {
59 var initializer = element.initializer;
60 descriptor = {
61 enumerable: descriptor.enumerable,
62 writable: descriptor.writable,
63 configurable: descriptor.configurable,
64 value: initializer === void 0 ? void 0 : initializer.call(receiver)
65 };
66 }
67 _Object$defineProperty(receiver, element.key, descriptor);
68 },
69 decorateClass: function decorateClass(elements, decorators) {
70 var newElements = [];
71 var finishers = [];
72 var placements = {
73 "static": [],
74 prototype: [],
75 own: []
76 };
77 _forEachInstanceProperty(elements).call(elements, function (element) {
78 this.addElementPlacement(element, placements);
79 }, this);
80 _forEachInstanceProperty(elements).call(elements, function (element) {
81 if (!_hasDecorators(element)) return _pushInstanceProperty(newElements).call(newElements, element);
82 var elementFinishersExtras = this.decorateElement(element, placements);
83 _pushInstanceProperty(newElements).call(newElements, elementFinishersExtras.element);
84 _pushInstanceProperty(newElements).apply(newElements, elementFinishersExtras.extras);
85 _pushInstanceProperty(finishers).apply(finishers, elementFinishersExtras.finishers);
86 }, this);
87 if (!decorators) {
88 return {
89 elements: newElements,
90 finishers: finishers
91 };
92 }
93 var result = this.decorateConstructor(newElements, decorators);
94 _pushInstanceProperty(finishers).apply(finishers, result.finishers);
95 result.finishers = finishers;
96 return result;
97 },
98 addElementPlacement: function addElementPlacement(element, placements, silent) {
99 var keys = placements[element.placement];
100 if (!silent && _indexOfInstanceProperty(keys).call(keys, element.key) !== -1) {
101 throw new TypeError("Duplicated element (" + element.key + ")");
102 }
103 _pushInstanceProperty(keys).call(keys, element.key);
104 },
105 decorateElement: function decorateElement(element, placements) {
106 var extras = [];
107 var finishers = [];
108 for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {
109 var keys = placements[element.placement];
110 _spliceInstanceProperty(keys).call(keys, _indexOfInstanceProperty(keys).call(keys, element.key), 1);
111 var elementObject = this.fromElementDescriptor(element);
112 var elementFinisherExtras = this.toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject);
113 element = elementFinisherExtras.element;
114 this.addElementPlacement(element, placements);
115 if (elementFinisherExtras.finisher) {
116 _pushInstanceProperty(finishers).call(finishers, elementFinisherExtras.finisher);
117 }
118 var newExtras = elementFinisherExtras.extras;
119 if (newExtras) {
120 for (var j = 0; j < newExtras.length; j++) {
121 this.addElementPlacement(newExtras[j], placements);
122 }
123 _pushInstanceProperty(extras).apply(extras, newExtras);
124 }
125 }
126 return {
127 element: element,
128 finishers: finishers,
129 extras: extras
130 };
131 },
132 decorateConstructor: function decorateConstructor(elements, decorators) {
133 var finishers = [];
134 for (var i = decorators.length - 1; i >= 0; i--) {
135 var obj = this.fromClassDescriptor(elements);
136 var elementsAndFinisher = this.toClassDescriptor((0, decorators[i])(obj) || obj);
137 if (elementsAndFinisher.finisher !== undefined) {
138 _pushInstanceProperty(finishers).call(finishers, elementsAndFinisher.finisher);
139 }
140 if (elementsAndFinisher.elements !== undefined) {
141 elements = elementsAndFinisher.elements;
142 for (var j = 0; j < elements.length - 1; j++) {
143 for (var k = j + 1; k < elements.length; k++) {
144 if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) {
145 throw new TypeError("Duplicated element (" + elements[j].key + ")");
146 }
147 }
148 }
149 }
150 }
151 return {
152 elements: elements,
153 finishers: finishers
154 };
155 },
156 fromElementDescriptor: function fromElementDescriptor(element) {
157 var obj = {
158 kind: element.kind,
159 key: element.key,
160 placement: element.placement,
161 descriptor: element.descriptor
162 };
163 var desc = {
164 value: "Descriptor",
165 configurable: true
166 };
167 _Object$defineProperty(obj, _Symbol$toStringTag, desc);
168 if (element.kind === "field") obj.initializer = element.initializer;
169 return obj;
170 },
171 toElementDescriptors: function toElementDescriptors(elementObjects) {
172 var _context4;
173 if (elementObjects === undefined) return;
174 return _mapInstanceProperty(_context4 = toArray(elementObjects)).call(_context4, function (elementObject) {
175 var element = this.toElementDescriptor(elementObject);
176 this.disallowProperty(elementObject, "finisher", "An element descriptor");
177 this.disallowProperty(elementObject, "extras", "An element descriptor");
178 return element;
179 }, this);
180 },
181 toElementDescriptor: function toElementDescriptor(elementObject) {
182 var kind = String(elementObject.kind);
183 if (kind !== "method" && kind !== "field") {
184 throw new TypeError('An element descriptor\'s .kind property must be either "method" or' + ' "field", but a decorator created an element descriptor with' + ' .kind "' + kind + '"');
185 }
186 var key = toPropertyKey(elementObject.key);
187 var placement = String(elementObject.placement);
188 if (placement !== "static" && placement !== "prototype" && placement !== "own") {
189 throw new TypeError('An element descriptor\'s .placement property must be one of "static",' + ' "prototype" or "own", but a decorator created an element descriptor' + ' with .placement "' + placement + '"');
190 }
191 var descriptor = elementObject.descriptor;
192 this.disallowProperty(elementObject, "elements", "An element descriptor");
193 var element = {
194 kind: kind,
195 key: key,
196 placement: placement,
197 descriptor: _Object$assign({}, descriptor)
198 };
199 if (kind !== "field") {
200 this.disallowProperty(elementObject, "initializer", "A method descriptor");
201 } else {
202 this.disallowProperty(descriptor, "get", "The property descriptor of a field descriptor");
203 this.disallowProperty(descriptor, "set", "The property descriptor of a field descriptor");
204 this.disallowProperty(descriptor, "value", "The property descriptor of a field descriptor");
205 element.initializer = elementObject.initializer;
206 }
207 return element;
208 },
209 toElementFinisherExtras: function toElementFinisherExtras(elementObject) {
210 var element = this.toElementDescriptor(elementObject);
211 var finisher = _optionalCallableProperty(elementObject, "finisher");
212 var extras = this.toElementDescriptors(elementObject.extras);
213 return {
214 element: element,
215 finisher: finisher,
216 extras: extras
217 };
218 },
219 fromClassDescriptor: function fromClassDescriptor(elements) {
220 var obj = {
221 kind: "class",
222 elements: _mapInstanceProperty(elements).call(elements, this.fromElementDescriptor, this)
223 };
224 var desc = {
225 value: "Descriptor",
226 configurable: true
227 };
228 _Object$defineProperty(obj, _Symbol$toStringTag, desc);
229 return obj;
230 },
231 toClassDescriptor: function toClassDescriptor(obj) {
232 var kind = String(obj.kind);
233 if (kind !== "class") {
234 throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator' + ' created a class descriptor with .kind "' + kind + '"');
235 }
236 this.disallowProperty(obj, "key", "A class descriptor");
237 this.disallowProperty(obj, "placement", "A class descriptor");
238 this.disallowProperty(obj, "descriptor", "A class descriptor");
239 this.disallowProperty(obj, "initializer", "A class descriptor");
240 this.disallowProperty(obj, "extras", "A class descriptor");
241 var finisher = _optionalCallableProperty(obj, "finisher");
242 var elements = this.toElementDescriptors(obj.elements);
243 return {
244 elements: elements,
245 finisher: finisher
246 };
247 },
248 runClassFinishers: function runClassFinishers(constructor, finishers) {
249 for (var i = 0; i < finishers.length; i++) {
250 var newConstructor = (0, finishers[i])(constructor);
251 if (newConstructor !== undefined) {
252 if (typeof newConstructor !== "function") {
253 throw new TypeError("Finishers must return a constructor.");
254 }
255 constructor = newConstructor;
256 }
257 }
258 return constructor;
259 },
260 disallowProperty: function disallowProperty(obj, name, objectType) {
261 if (obj[name] !== undefined) {
262 throw new TypeError(objectType + " can't have a ." + name + " property.");
263 }
264 }
265 };
266 return api;
267}
268function _createElementDescriptor(def) {
269 var key = toPropertyKey(def.key);
270 var descriptor;
271 if (def.kind === "method") {
272 descriptor = {
273 value: def.value,
274 writable: true,
275 configurable: true,
276 enumerable: false
277 };
278 } else if (def.kind === "get") {
279 descriptor = {
280 get: def.value,
281 configurable: true,
282 enumerable: false
283 };
284 } else if (def.kind === "set") {
285 descriptor = {
286 set: def.value,
287 configurable: true,
288 enumerable: false
289 };
290 } else if (def.kind === "field") {
291 descriptor = {
292 configurable: true,
293 writable: true,
294 enumerable: true
295 };
296 }
297 var element = {
298 kind: def.kind === "field" ? "field" : "method",
299 key: key,
300 placement: def["static"] ? "static" : def.kind === "field" ? "own" : "prototype",
301 descriptor: descriptor
302 };
303 if (def.decorators) element.decorators = def.decorators;
304 if (def.kind === "field") element.initializer = def.value;
305 return element;
306}
307function _coalesceGetterSetter(element, other) {
308 if (element.descriptor.get !== undefined) {
309 other.descriptor.get = element.descriptor.get;
310 } else {
311 other.descriptor.set = element.descriptor.set;
312 }
313}
314function _coalesceClassElements(elements) {
315 var newElements = [];
316 var isSameElement = function isSameElement(other) {
317 return other.kind === "method" && other.key === element.key && other.placement === element.placement;
318 };
319 for (var i = 0; i < elements.length; i++) {
320 var element = elements[i];
321 var other;
322 if (element.kind === "method" && (other = _findInstanceProperty(newElements).call(newElements, isSameElement))) {
323 if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {
324 if (_hasDecorators(element) || _hasDecorators(other)) {
325 throw new ReferenceError("Duplicated methods (" + element.key + ") can't be decorated.");
326 }
327 other.descriptor = element.descriptor;
328 } else {
329 if (_hasDecorators(element)) {
330 if (_hasDecorators(other)) {
331 throw new ReferenceError("Decorators can't be placed on different accessors with for " + "the same property (" + element.key + ").");
332 }
333 other.decorators = element.decorators;
334 }
335 _coalesceGetterSetter(element, other);
336 }
337 } else {
338 _pushInstanceProperty(newElements).call(newElements, element);
339 }
340 }
341 return newElements;
342}
343function _hasDecorators(element) {
344 return element.decorators && element.decorators.length;
345}
346function _isDataDescriptor(desc) {
347 return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);
348}
349function _optionalCallableProperty(obj, name) {
350 var value = obj[name];
351 if (value !== undefined && typeof value !== "function") {
352 throw new TypeError("Expected '" + name + "' to be a function");
353 }
354 return value;
355}
Note: See TracBrowser for help on using the repository browser.