@jsenv/core 23.5.2 → 23.7.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.
Files changed (123) hide show
  1. package/{license → LICENSE} +21 -21
  2. package/dist/jsenv_browser_system.js +35 -35
  3. package/dist/jsenv_browser_system.js.map +14 -14
  4. package/dist/jsenv_compile_proxy.js +47 -128
  5. package/dist/jsenv_compile_proxy.js.map +25 -62
  6. package/dist/jsenv_exploring_index.js.map +5 -5
  7. package/dist/jsenv_exploring_redirector.js +47 -54
  8. package/dist/jsenv_exploring_redirector.js.map +17 -19
  9. package/dist/jsenv_toolbar.js +47 -128
  10. package/dist/jsenv_toolbar.js.map +12 -47
  11. package/dist/jsenv_toolbar_injector.js.map +5 -5
  12. package/helpers/babel/.eslintrc.cjs +24 -24
  13. package/helpers/babel/AsyncGenerator/AsyncGenerator.js +81 -81
  14. package/helpers/babel/AwaitValue/AwaitValue.js +3 -3
  15. package/helpers/babel/applyDecoratorDescriptor/applyDecoratorDescriptor.js +33 -33
  16. package/helpers/babel/arrayLikeToArray/arrayLikeToArray.js +7 -7
  17. package/helpers/babel/arrayWithHoles/arrayWithHoles.js +4 -4
  18. package/helpers/babel/arrayWithoutHoles/arrayWithoutHoles.js +6 -6
  19. package/helpers/babel/assertThisInitialized/assertThisInitialized.js +7 -7
  20. package/helpers/babel/asyncGeneratorDelegate/asyncGeneratorDelegate.js +40 -40
  21. package/helpers/babel/asyncIterator/asyncIterator.js +12 -12
  22. package/helpers/babel/asyncToGenerator/asyncToGenerator.js +34 -34
  23. package/helpers/babel/awaitAsyncGenerator/awaitAsyncGenerator.js +5 -5
  24. package/helpers/babel/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +20 -20
  25. package/helpers/babel/classApplyDescriptorGet/classApplyDescriptorGet.js +6 -6
  26. package/helpers/babel/classApplyDescriptorSet/classApplyDescriptorSet.js +13 -13
  27. package/helpers/babel/classCallCheck/classCallCheck.js +5 -5
  28. package/helpers/babel/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -5
  29. package/helpers/babel/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -6
  30. package/helpers/babel/classExtractFieldDescriptor/classExtractFieldDescriptor.js +7 -7
  31. package/helpers/babel/classNameTDZError/classNameTDZError.js +4 -4
  32. package/helpers/babel/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +7 -7
  33. package/helpers/babel/classPrivateFieldGet/classPrivateFieldGet.js +7 -7
  34. package/helpers/babel/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +6 -6
  35. package/helpers/babel/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -5
  36. package/helpers/babel/classPrivateFieldSet/classPrivateFieldSet.js +8 -8
  37. package/helpers/babel/classPrivateMethodGet/classPrivateMethodGet.js +6 -6
  38. package/helpers/babel/classPrivateMethodSet/classPrivateMethodSet.js +3 -3
  39. package/helpers/babel/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +9 -9
  40. package/helpers/babel/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +15 -15
  41. package/helpers/babel/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +6 -6
  42. package/helpers/babel/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -3
  43. package/helpers/babel/construct/construct.js +16 -16
  44. package/helpers/babel/createClass/createClass.js +15 -15
  45. package/helpers/babel/createForOfIteratorHelper/createForOfIteratorHelper.js +60 -60
  46. package/helpers/babel/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +23 -23
  47. package/helpers/babel/createRawReactElement/createRawReactElement.js +50 -50
  48. package/helpers/babel/createSuper/createSuper.js +22 -22
  49. package/helpers/babel/decorate/decorate.js +403 -403
  50. package/helpers/babel/defaults/defaults.js +11 -11
  51. package/helpers/babel/defineEnumerableProperties/defineEnumerableProperties.js +23 -23
  52. package/helpers/babel/defineProperty/defineProperty.js +18 -18
  53. package/helpers/babel/extends/extends.js +14 -14
  54. package/helpers/babel/get/get.js +13 -13
  55. package/helpers/babel/getPrototypeOf/getPrototypeOf.js +4 -4
  56. package/helpers/babel/inherits/inherits.js +15 -15
  57. package/helpers/babel/inheritsLoose/inheritsLoose.js +7 -7
  58. package/helpers/babel/initializerDefineProperty/initializerDefineProperty.js +10 -10
  59. package/helpers/babel/initializerWarningHelper/initializerWarningHelper.js +6 -6
  60. package/helpers/babel/instanceof/instanceof.js +6 -6
  61. package/helpers/babel/interopRequireDefault/interopRequireDefault.js +3 -3
  62. package/helpers/babel/interopRequireWildcard/interopRequireWildcard.js +37 -37
  63. package/helpers/babel/isNativeFunction/isNativeFunction.js +4 -4
  64. package/helpers/babel/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -21
  65. package/helpers/babel/iterableToArray/iterableToArray.js +7 -7
  66. package/helpers/babel/iterableToArrayLimit/iterableToArrayLimit.js +36 -36
  67. package/helpers/babel/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +10 -10
  68. package/helpers/babel/jsx/jsx.js +45 -45
  69. package/helpers/babel/maybeArrayLike/maybeArrayLike.js +10 -10
  70. package/helpers/babel/newArrowCheck/newArrowCheck.js +5 -5
  71. package/helpers/babel/nonIterableRest/nonIterableRest.js +5 -5
  72. package/helpers/babel/nonIterableSpread/nonIterableSpread.js +5 -5
  73. package/helpers/babel/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -3
  74. package/helpers/babel/objectSpread/objectSpread.js +23 -23
  75. package/helpers/babel/objectSpread2/objectSpread2.js +33 -33
  76. package/helpers/babel/objectWithoutProperties/objectWithoutProperties.js +19 -19
  77. package/helpers/babel/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +13 -13
  78. package/helpers/babel/possibleConstructorReturn/possibleConstructorReturn.js +10 -10
  79. package/helpers/babel/readOnlyError/readOnlyError.js +4 -4
  80. package/helpers/babel/readme.md +9 -9
  81. package/helpers/babel/set/set.js +44 -44
  82. package/helpers/babel/setPrototypeOf/setPrototypeOf.js +6 -6
  83. package/helpers/babel/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -8
  84. package/helpers/babel/slicedToArray/slicedToArray.js +10 -10
  85. package/helpers/babel/slicedToArrayLoose/slicedToArrayLoose.js +13 -13
  86. package/helpers/babel/superPropBase/superPropBase.js +10 -10
  87. package/helpers/babel/taggedTemplateLiteral/taggedTemplateLiteral.js +10 -10
  88. package/helpers/babel/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +7 -7
  89. package/helpers/babel/tdz/tdz.js +4 -4
  90. package/helpers/babel/temporalRef/temporalRef.js +6 -6
  91. package/helpers/babel/temporalUndefined/temporalUndefined.js +3 -3
  92. package/helpers/babel/toArray/toArray.js +10 -10
  93. package/helpers/babel/toConsumableArray/toConsumableArray.js +10 -10
  94. package/helpers/babel/toPrimitive/toPrimitive.js +10 -10
  95. package/helpers/babel/toPropertyKey/toPropertyKey.js +6 -6
  96. package/helpers/babel/typeof/typeof.js +14 -14
  97. package/helpers/babel/unsupportedIterableToArray/unsupportedIterableToArray.js +12 -12
  98. package/helpers/babel/wrapAsyncGenerator/wrapAsyncGenerator.js +8 -8
  99. package/helpers/babel/wrapNativeSuper/wrapNativeSuper.js +30 -30
  100. package/helpers/babel/wrapRegExp/wrapRegExp.js +63 -63
  101. package/helpers/babel/writeOnlyError/writeOnlyError.js +4 -4
  102. package/helpers/regenerator-runtime/regenerator-runtime.js +748 -748
  103. package/package.json +4 -2
  104. package/src/buildProject.js +300 -300
  105. package/src/execute.js +184 -184
  106. package/src/internal/browser-launcher/jsenv-browser-system.js +199 -199
  107. package/src/internal/compiling/compile-directory/getOrGenerateCompiledFile.js +20 -30
  108. package/src/internal/compiling/compile-directory/validateCache.js +23 -15
  109. package/src/internal/compiling/compileFile.js +36 -59
  110. package/src/internal/compiling/compileHtml.js +1 -4
  111. package/src/internal/compiling/createCompiledFileService.js +290 -290
  112. package/src/internal/compiling/startCompileServer.js +1052 -1131
  113. package/src/internal/executing/coverage/babel_plugin_instrument.js +90 -90
  114. package/src/internal/executing/coverage/reportToCoverage.js +187 -187
  115. package/src/internal/executing/executePlan.js +183 -183
  116. package/src/internal/executing/launchAndExecute.js +458 -450
  117. package/src/internal/runtime/createBrowserRuntime/scanBrowserRuntimeFeatures.js +246 -250
  118. package/src/internal/runtime/createNodeRuntime/scanNodeRuntimeFeatures.js +112 -115
  119. package/src/internal/runtime/s.js +727 -727
  120. package/src/internal/toolbar/jsenv-logo.svg +144 -144
  121. package/src/internal/url_conversion.js +317 -317
  122. package/src/launchNode.js +210 -210
  123. package/src/startExploring.js +309 -309
@@ -1,403 +1,403 @@
1
- /* eslint-disable block-scoped-var */
2
- /* eslint-disable no-nested-ternary */
3
- /* eslint-disable no-negated-condition */
4
- /* eslint-disable consistent-return */
5
- /* eslint-disable prefer-spread */
6
- /* eslint-disable no-void */
7
- /* eslint-disable no-sequences */
8
- import toArray from "../toArray/toArray.js"
9
- import toPropertyKey from "../toPropertyKey/toPropertyKey.js"
10
-
11
- // ClassDefinitionEvaluation (Steps 26-*)
12
- export default function _decorate(
13
- decorators /* : ClassDecorator[] */,
14
- factory /* : ClassFactory */,
15
- superClass /* : ?Class<*> */,
16
- mixins /* : ?Array<Function> */,
17
- ) /* : Class<*> */ {
18
- var api = _getDecoratorsApi()
19
- if (mixins) {
20
- for (var i = 0; i < mixins.length; i++) {
21
- api = mixins[i](api)
22
- }
23
- }
24
- var r = factory(function initialize(O) {
25
- api.initializeInstanceElements(O, decorated.elements)
26
- }, superClass)
27
- var decorated = api.decorateClass(
28
- _coalesceClassElements(r.d.map(_createElementDescriptor)),
29
- decorators,
30
- )
31
- api.initializeClassElements(r.F, decorated.elements)
32
- return api.runClassFinishers(r.F, decorated.finishers)
33
- }
34
-
35
- var _getDecoratorsApi = function () {
36
- var api = {
37
- elementsDefinitionOrder: [["method"], ["field"]],
38
- // InitializeInstanceElements
39
- initializeInstanceElements(/* ::<C>*/ O /* : C */, elements /* : ElementDescriptor[] */) {
40
- ;["method", "field"].forEach(function (kind) {
41
- elements.forEach(function (element /* : ElementDescriptor */) {
42
- if (element.kind === kind && element.placement === "own") {
43
- this.defineClassElement(O, element)
44
- }
45
- }, this)
46
- }, this)
47
- },
48
- // InitializeClassElements
49
- initializeClassElements(/* ::<C>*/ F /* : Class<C> */, elements /* : ElementDescriptor[] */) {
50
- var proto = F.prototype
51
- ;["method", "field"].forEach(function (kind) {
52
- elements.forEach(function (element /* : ElementDescriptor */) {
53
- var placement = element.placement
54
- if (element.kind === kind && (placement === "static" || placement === "prototype")) {
55
- var receiver = placement === "static" ? F : proto
56
- this.defineClassElement(receiver, element)
57
- }
58
- }, this)
59
- }, this)
60
- },
61
- // DefineClassElement
62
- defineClassElement(
63
- /* ::<C>*/ receiver /* : C | Class<C> */,
64
- element /* : ElementDescriptor */,
65
- ) {
66
- var descriptor /* : PropertyDescriptor */ = element.descriptor
67
- if (element.kind === "field") {
68
- var initializer = element.initializer
69
- descriptor = {
70
- enumerable: descriptor.enumerable,
71
- writable: descriptor.writable,
72
- configurable: descriptor.configurable,
73
- value: initializer === void 0 ? void 0 : initializer.call(receiver),
74
- }
75
- }
76
- Object.defineProperty(receiver, element.key, descriptor)
77
- },
78
- // DecorateClass
79
- decorateClass(
80
- elements /* : ElementDescriptor[] */,
81
- decorators /* : ClassDecorator[] */,
82
- ) /* : ElementsFinishers */ {
83
- var newElements /* : ElementDescriptor[] */ = []
84
- var finishers /* : ClassFinisher[] */ = []
85
- var placements /* : Placements */ = {
86
- static: [],
87
- prototype: [],
88
- own: [],
89
- }
90
- elements.forEach(function (element /* : ElementDescriptor */) {
91
- this.addElementPlacement(element, placements)
92
- }, this)
93
- elements.forEach(function (element /* : ElementDescriptor */) {
94
- if (!_hasDecorators(element)) return newElements.push(element)
95
- var elementFinishersExtras /* : ElementFinishersExtras */ = this.decorateElement(
96
- element,
97
- placements,
98
- )
99
- newElements.push(elementFinishersExtras.element)
100
- newElements.push.apply(newElements, elementFinishersExtras.extras)
101
- finishers.push.apply(finishers, elementFinishersExtras.finishers)
102
- }, this)
103
- if (!decorators) {
104
- return { elements: newElements, finishers }
105
- }
106
- var result /* : ElementsFinishers */ = this.decorateConstructor(newElements, decorators)
107
- finishers.push.apply(finishers, result.finishers)
108
- result.finishers = finishers
109
- return result
110
- },
111
- // AddElementPlacement
112
- addElementPlacement(
113
- element /* : ElementDescriptor */,
114
- placements /* : Placements */,
115
- silent /* : boolean */,
116
- ) {
117
- var keys = placements[element.placement]
118
- if (!silent && keys.indexOf(element.key) !== -1) {
119
- throw new TypeError(`Duplicated element (${element.key})`)
120
- }
121
- keys.push(element.key)
122
- },
123
- // DecorateElement
124
- decorateElement(
125
- element /* : ElementDescriptor */,
126
- placements /* : Placements */,
127
- ) /* : ElementFinishersExtras */ {
128
- var extras /* : ElementDescriptor[] */ = []
129
- var finishers /* : ClassFinisher[] */ = []
130
- for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {
131
- // (inlined) RemoveElementPlacement
132
- var keys = placements[element.placement]
133
- keys.splice(keys.indexOf(element.key), 1)
134
- var elementObject /* : ElementObjectInput */ = this.fromElementDescriptor(element)
135
- var elementFinisherExtras /* : ElementFinisherExtras */ = this.toElementFinisherExtras(
136
- (0, decorators[i])(elementObject) /* : ElementObjectOutput */ || elementObject,
137
- )
138
- element = elementFinisherExtras.element
139
- this.addElementPlacement(element, placements)
140
- if (elementFinisherExtras.finisher) {
141
- finishers.push(elementFinisherExtras.finisher)
142
- }
143
- var newExtras /* : ElementDescriptor[] | void */ = elementFinisherExtras.extras
144
- if (newExtras) {
145
- for (var j = 0; j < newExtras.length; j++) {
146
- this.addElementPlacement(newExtras[j], placements)
147
- }
148
- extras.push.apply(extras, newExtras)
149
- }
150
- }
151
- return { element, finishers, extras }
152
- },
153
- // DecorateConstructor
154
- decorateConstructor(
155
- elements /* : ElementDescriptor[] */,
156
- decorators /* : ClassDecorator[] */,
157
- ) /* : ElementsFinishers */ {
158
- var finishers /* : ClassFinisher[] */ = []
159
- for (var i = decorators.length - 1; i >= 0; i--) {
160
- var obj /* : ClassObject */ = this.fromClassDescriptor(elements)
161
- var elementsAndFinisher /* : ElementsFinisher */ = this.toClassDescriptor(
162
- (0, decorators[i])(obj) /* : ClassObject */ || obj,
163
- )
164
- if (elementsAndFinisher.finisher !== undefined) {
165
- finishers.push(elementsAndFinisher.finisher)
166
- }
167
- if (elementsAndFinisher.elements !== undefined) {
168
- elements = elementsAndFinisher.elements
169
- for (var j = 0; j < elements.length - 1; j++) {
170
- for (var k = j + 1; k < elements.length; k++) {
171
- if (
172
- elements[j].key === elements[k].key &&
173
- elements[j].placement === elements[k].placement
174
- ) {
175
- throw new TypeError(`Duplicated element (${elements[j].key})`)
176
- }
177
- }
178
- }
179
- }
180
- }
181
- return { elements, finishers }
182
- },
183
- // FromElementDescriptor
184
- fromElementDescriptor(element /* : ElementDescriptor */) /* : ElementObject */ {
185
- var obj /* : ElementObject */ = {
186
- kind: element.kind,
187
- key: element.key,
188
- placement: element.placement,
189
- descriptor: element.descriptor,
190
- }
191
- var desc = {
192
- value: "Descriptor",
193
- configurable: true,
194
- }
195
- Object.defineProperty(obj, Symbol.toStringTag, desc)
196
- if (element.kind === "field") obj.initializer = element.initializer
197
- return obj
198
- },
199
- // ToElementDescriptors
200
- toElementDescriptors(elementObjects /* : ElementObject[] */) /* : ElementDescriptor[] */ {
201
- if (elementObjects === undefined) return
202
- return toArray(elementObjects).map(function (elementObject) {
203
- var element = this.toElementDescriptor(elementObject)
204
- this.disallowProperty(elementObject, "finisher", "An element descriptor")
205
- this.disallowProperty(elementObject, "extras", "An element descriptor")
206
- return element
207
- }, this)
208
- },
209
- // ToElementDescriptor
210
- toElementDescriptor(elementObject /* : ElementObject */) /* : ElementDescriptor */ {
211
- var kind = String(elementObject.kind)
212
- if (kind !== "method" && kind !== "field") {
213
- throw new TypeError(
214
- `${
215
- 'An element descriptor\'s .kind property must be either "method" or' +
216
- ' "field", but a decorator created an element descriptor with' +
217
- ' .kind "'
218
- }${kind}"`,
219
- )
220
- }
221
- var key = toPropertyKey(elementObject.key)
222
- var placement = String(elementObject.placement)
223
- if (placement !== "static" && placement !== "prototype" && placement !== "own") {
224
- throw new TypeError(
225
- `${
226
- 'An element descriptor\'s .placement property must be one of "static",' +
227
- ' "prototype" or "own", but a decorator created an element descriptor' +
228
- ' with .placement "'
229
- }${placement}"`,
230
- )
231
- }
232
- var descriptor /* : PropertyDescriptor */ = elementObject.descriptor
233
- this.disallowProperty(elementObject, "elements", "An element descriptor")
234
- var element /* : ElementDescriptor */ = {
235
- kind,
236
- key,
237
- placement,
238
- descriptor: Object.assign({}, descriptor),
239
- }
240
- if (kind !== "field") {
241
- this.disallowProperty(elementObject, "initializer", "A method descriptor")
242
- } else {
243
- this.disallowProperty(descriptor, "get", "The property descriptor of a field descriptor")
244
- this.disallowProperty(descriptor, "set", "The property descriptor of a field descriptor")
245
- this.disallowProperty(descriptor, "value", "The property descriptor of a field descriptor")
246
- element.initializer = elementObject.initializer
247
- }
248
- return element
249
- },
250
- toElementFinisherExtras(elementObject /* : ElementObject */) /* : ElementFinisherExtras */ {
251
- var element /* : ElementDescriptor */ = this.toElementDescriptor(elementObject)
252
- var finisher /* : ClassFinisher */ = _optionalCallableProperty(elementObject, "finisher")
253
- var extras /* : ElementDescriptors[] */ = this.toElementDescriptors(elementObject.extras)
254
- return { element, finisher, extras }
255
- },
256
- // FromClassDescriptor
257
- fromClassDescriptor(elements /* : ElementDescriptor[] */) /* : ClassObject */ {
258
- var obj = {
259
- kind: "class",
260
- elements: elements.map(this.fromElementDescriptor, this),
261
- }
262
- var desc = { value: "Descriptor", configurable: true }
263
- Object.defineProperty(obj, Symbol.toStringTag, desc)
264
- return obj
265
- },
266
- // ToClassDescriptor
267
- toClassDescriptor(obj /* : ClassObject */) /* : ElementsFinisher */ {
268
- var kind = String(obj.kind)
269
- if (kind !== "class") {
270
- throw new TypeError(
271
- `${
272
- 'A class descriptor\'s .kind property must be "class", but a decorator' +
273
- ' created a class descriptor with .kind "'
274
- }${kind}"`,
275
- )
276
- }
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 }
285
- },
286
- // RunClassFinishers
287
- runClassFinishers(
288
- constructor /* : Class<*> */,
289
- finishers /* : ClassFinisher[] */,
290
- ) /* : Class<*> */ {
291
- for (var i = 0; i < finishers.length; i++) {
292
- var newConstructor /* : ?Class<*> */ = (0, finishers[i])(constructor)
293
- if (newConstructor !== undefined) {
294
- // NOTE: This should check if IsConstructor(newConstructor) is false.
295
- if (typeof newConstructor !== "function") {
296
- throw new TypeError("Finishers must return a constructor.")
297
- }
298
- constructor = newConstructor
299
- }
300
- }
301
- return constructor
302
- },
303
- disallowProperty(obj, name, objectType) {
304
- if (obj[name] !== undefined) {
305
- throw new TypeError(`${objectType} can't have a .${name} property.`)
306
- }
307
- },
308
- }
309
- _getDecoratorsApi = function () {
310
- return api
311
- }
312
- return api
313
- }
314
-
315
- // ClassElementEvaluation
316
- function _createElementDescriptor(def /* : ElementDefinition */) /* : ElementDescriptor */ {
317
- var key = toPropertyKey(def.key)
318
- var descriptor /* : PropertyDescriptor */
319
- if (def.kind === "method") {
320
- descriptor = {
321
- value: def.value,
322
- writable: true,
323
- configurable: true,
324
- enumerable: false,
325
- }
326
- } else if (def.kind === "get") {
327
- descriptor = { get: def.value, configurable: true, enumerable: false }
328
- } else if (def.kind === "set") {
329
- descriptor = { set: def.value, configurable: true, enumerable: false }
330
- } else if (def.kind === "field") {
331
- descriptor = { configurable: true, writable: true, enumerable: true }
332
- }
333
- var element /* : ElementDescriptor */ = {
334
- kind: def.kind === "field" ? "field" : "method",
335
- key,
336
- placement: def.static ? "static" : def.kind === "field" ? "own" : "prototype",
337
- descriptor,
338
- }
339
- if (def.decorators) element.decorators = def.decorators
340
- if (def.kind === "field") element.initializer = def.value
341
- return element
342
- }
343
- // CoalesceGetterSetter
344
- function _coalesceGetterSetter(element /* : ElementDescriptor */, other /* : ElementDescriptor */) {
345
- if (element.descriptor.get !== undefined) {
346
- other.descriptor.get = element.descriptor.get
347
- } else {
348
- other.descriptor.set = element.descriptor.set
349
- }
350
- }
351
- // CoalesceClassElements
352
- function _coalesceClassElements(elements /* : ElementDescriptor[] */) /* : ElementDescriptor[] */ {
353
- var newElements /* : ElementDescriptor[] */ = []
354
- var isSameElement = function (other /* : ElementDescriptor */) /* : boolean */ {
355
- return (
356
- other.kind === "method" && other.key === element.key && other.placement === element.placement
357
- )
358
- }
359
- for (var i = 0; i < elements.length; i++) {
360
- var element /* : ElementDescriptor */ = elements[i]
361
- var other /* : ElementDescriptor */
362
- if (element.kind === "method" && (other = newElements.find(isSameElement))) {
363
- if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {
364
- if (_hasDecorators(element) || _hasDecorators(other)) {
365
- throw new ReferenceError(`Duplicated methods (${element.key}) can't be decorated.`)
366
- }
367
- other.descriptor = element.descriptor
368
- } else {
369
- if (_hasDecorators(element)) {
370
- if (_hasDecorators(other)) {
371
- throw new ReferenceError(
372
- `${
373
- "Decorators can't be placed on different accessors with for " +
374
- "the same property ("
375
- }${element.key}).`,
376
- )
377
- }
378
- other.decorators = element.decorators
379
- }
380
- _coalesceGetterSetter(element, other)
381
- }
382
- } else {
383
- newElements.push(element)
384
- }
385
- }
386
- return newElements
387
- }
388
- function _hasDecorators(element /* : ElementDescriptor */) /* : boolean */ {
389
- return element.decorators && element.decorators.length
390
- }
391
- function _isDataDescriptor(desc /* : PropertyDescriptor */) /* : boolean */ {
392
- return desc !== undefined && !(desc.value === undefined && desc.writable === undefined)
393
- }
394
- function _optionalCallableProperty /* ::<T>*/(
395
- obj /* : T */,
396
- name /* : $Keys<T> */,
397
- ) /* : ?Function */ {
398
- var value = obj[name]
399
- if (value !== undefined && typeof value !== "function") {
400
- throw new TypeError(`Expected '${name}' to be a function`)
401
- }
402
- return value
403
- }
1
+ /* eslint-disable block-scoped-var */
2
+ /* eslint-disable no-nested-ternary */
3
+ /* eslint-disable no-negated-condition */
4
+ /* eslint-disable consistent-return */
5
+ /* eslint-disable prefer-spread */
6
+ /* eslint-disable no-void */
7
+ /* eslint-disable no-sequences */
8
+ import toArray from "../toArray/toArray.js"
9
+ import toPropertyKey from "../toPropertyKey/toPropertyKey.js"
10
+
11
+ // ClassDefinitionEvaluation (Steps 26-*)
12
+ export default function _decorate(
13
+ decorators /* : ClassDecorator[] */,
14
+ factory /* : ClassFactory */,
15
+ superClass /* : ?Class<*> */,
16
+ mixins /* : ?Array<Function> */,
17
+ ) /* : Class<*> */ {
18
+ var api = _getDecoratorsApi()
19
+ if (mixins) {
20
+ for (var i = 0; i < mixins.length; i++) {
21
+ api = mixins[i](api)
22
+ }
23
+ }
24
+ var r = factory(function initialize(O) {
25
+ api.initializeInstanceElements(O, decorated.elements)
26
+ }, superClass)
27
+ var decorated = api.decorateClass(
28
+ _coalesceClassElements(r.d.map(_createElementDescriptor)),
29
+ decorators,
30
+ )
31
+ api.initializeClassElements(r.F, decorated.elements)
32
+ return api.runClassFinishers(r.F, decorated.finishers)
33
+ }
34
+
35
+ var _getDecoratorsApi = function () {
36
+ var api = {
37
+ elementsDefinitionOrder: [["method"], ["field"]],
38
+ // InitializeInstanceElements
39
+ initializeInstanceElements(/* ::<C>*/ O /* : C */, elements /* : ElementDescriptor[] */) {
40
+ ;["method", "field"].forEach(function (kind) {
41
+ elements.forEach(function (element /* : ElementDescriptor */) {
42
+ if (element.kind === kind && element.placement === "own") {
43
+ this.defineClassElement(O, element)
44
+ }
45
+ }, this)
46
+ }, this)
47
+ },
48
+ // InitializeClassElements
49
+ initializeClassElements(/* ::<C>*/ F /* : Class<C> */, elements /* : ElementDescriptor[] */) {
50
+ var proto = F.prototype
51
+ ;["method", "field"].forEach(function (kind) {
52
+ elements.forEach(function (element /* : ElementDescriptor */) {
53
+ var placement = element.placement
54
+ if (element.kind === kind && (placement === "static" || placement === "prototype")) {
55
+ var receiver = placement === "static" ? F : proto
56
+ this.defineClassElement(receiver, element)
57
+ }
58
+ }, this)
59
+ }, this)
60
+ },
61
+ // DefineClassElement
62
+ defineClassElement(
63
+ /* ::<C>*/ receiver /* : C | Class<C> */,
64
+ element /* : ElementDescriptor */,
65
+ ) {
66
+ var descriptor /* : PropertyDescriptor */ = element.descriptor
67
+ if (element.kind === "field") {
68
+ var initializer = element.initializer
69
+ descriptor = {
70
+ enumerable: descriptor.enumerable,
71
+ writable: descriptor.writable,
72
+ configurable: descriptor.configurable,
73
+ value: initializer === void 0 ? void 0 : initializer.call(receiver),
74
+ }
75
+ }
76
+ Object.defineProperty(receiver, element.key, descriptor)
77
+ },
78
+ // DecorateClass
79
+ decorateClass(
80
+ elements /* : ElementDescriptor[] */,
81
+ decorators /* : ClassDecorator[] */,
82
+ ) /* : ElementsFinishers */ {
83
+ var newElements /* : ElementDescriptor[] */ = []
84
+ var finishers /* : ClassFinisher[] */ = []
85
+ var placements /* : Placements */ = {
86
+ static: [],
87
+ prototype: [],
88
+ own: [],
89
+ }
90
+ elements.forEach(function (element /* : ElementDescriptor */) {
91
+ this.addElementPlacement(element, placements)
92
+ }, this)
93
+ elements.forEach(function (element /* : ElementDescriptor */) {
94
+ if (!_hasDecorators(element)) return newElements.push(element)
95
+ var elementFinishersExtras /* : ElementFinishersExtras */ = this.decorateElement(
96
+ element,
97
+ placements,
98
+ )
99
+ newElements.push(elementFinishersExtras.element)
100
+ newElements.push.apply(newElements, elementFinishersExtras.extras)
101
+ finishers.push.apply(finishers, elementFinishersExtras.finishers)
102
+ }, this)
103
+ if (!decorators) {
104
+ return { elements: newElements, finishers }
105
+ }
106
+ var result /* : ElementsFinishers */ = this.decorateConstructor(newElements, decorators)
107
+ finishers.push.apply(finishers, result.finishers)
108
+ result.finishers = finishers
109
+ return result
110
+ },
111
+ // AddElementPlacement
112
+ addElementPlacement(
113
+ element /* : ElementDescriptor */,
114
+ placements /* : Placements */,
115
+ silent /* : boolean */,
116
+ ) {
117
+ var keys = placements[element.placement]
118
+ if (!silent && keys.indexOf(element.key) !== -1) {
119
+ throw new TypeError(`Duplicated element (${element.key})`)
120
+ }
121
+ keys.push(element.key)
122
+ },
123
+ // DecorateElement
124
+ decorateElement(
125
+ element /* : ElementDescriptor */,
126
+ placements /* : Placements */,
127
+ ) /* : ElementFinishersExtras */ {
128
+ var extras /* : ElementDescriptor[] */ = []
129
+ var finishers /* : ClassFinisher[] */ = []
130
+ for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {
131
+ // (inlined) RemoveElementPlacement
132
+ var keys = placements[element.placement]
133
+ keys.splice(keys.indexOf(element.key), 1)
134
+ var elementObject /* : ElementObjectInput */ = this.fromElementDescriptor(element)
135
+ var elementFinisherExtras /* : ElementFinisherExtras */ = this.toElementFinisherExtras(
136
+ (0, decorators[i])(elementObject) /* : ElementObjectOutput */ || elementObject,
137
+ )
138
+ element = elementFinisherExtras.element
139
+ this.addElementPlacement(element, placements)
140
+ if (elementFinisherExtras.finisher) {
141
+ finishers.push(elementFinisherExtras.finisher)
142
+ }
143
+ var newExtras /* : ElementDescriptor[] | void */ = elementFinisherExtras.extras
144
+ if (newExtras) {
145
+ for (var j = 0; j < newExtras.length; j++) {
146
+ this.addElementPlacement(newExtras[j], placements)
147
+ }
148
+ extras.push.apply(extras, newExtras)
149
+ }
150
+ }
151
+ return { element, finishers, extras }
152
+ },
153
+ // DecorateConstructor
154
+ decorateConstructor(
155
+ elements /* : ElementDescriptor[] */,
156
+ decorators /* : ClassDecorator[] */,
157
+ ) /* : ElementsFinishers */ {
158
+ var finishers /* : ClassFinisher[] */ = []
159
+ for (var i = decorators.length - 1; i >= 0; i--) {
160
+ var obj /* : ClassObject */ = this.fromClassDescriptor(elements)
161
+ var elementsAndFinisher /* : ElementsFinisher */ = this.toClassDescriptor(
162
+ (0, decorators[i])(obj) /* : ClassObject */ || obj,
163
+ )
164
+ if (elementsAndFinisher.finisher !== undefined) {
165
+ finishers.push(elementsAndFinisher.finisher)
166
+ }
167
+ if (elementsAndFinisher.elements !== undefined) {
168
+ elements = elementsAndFinisher.elements
169
+ for (var j = 0; j < elements.length - 1; j++) {
170
+ for (var k = j + 1; k < elements.length; k++) {
171
+ if (
172
+ elements[j].key === elements[k].key &&
173
+ elements[j].placement === elements[k].placement
174
+ ) {
175
+ throw new TypeError(`Duplicated element (${elements[j].key})`)
176
+ }
177
+ }
178
+ }
179
+ }
180
+ }
181
+ return { elements, finishers }
182
+ },
183
+ // FromElementDescriptor
184
+ fromElementDescriptor(element /* : ElementDescriptor */) /* : ElementObject */ {
185
+ var obj /* : ElementObject */ = {
186
+ kind: element.kind,
187
+ key: element.key,
188
+ placement: element.placement,
189
+ descriptor: element.descriptor,
190
+ }
191
+ var desc = {
192
+ value: "Descriptor",
193
+ configurable: true,
194
+ }
195
+ Object.defineProperty(obj, Symbol.toStringTag, desc)
196
+ if (element.kind === "field") obj.initializer = element.initializer
197
+ return obj
198
+ },
199
+ // ToElementDescriptors
200
+ toElementDescriptors(elementObjects /* : ElementObject[] */) /* : ElementDescriptor[] */ {
201
+ if (elementObjects === undefined) return
202
+ return toArray(elementObjects).map(function (elementObject) {
203
+ var element = this.toElementDescriptor(elementObject)
204
+ this.disallowProperty(elementObject, "finisher", "An element descriptor")
205
+ this.disallowProperty(elementObject, "extras", "An element descriptor")
206
+ return element
207
+ }, this)
208
+ },
209
+ // ToElementDescriptor
210
+ toElementDescriptor(elementObject /* : ElementObject */) /* : ElementDescriptor */ {
211
+ var kind = String(elementObject.kind)
212
+ if (kind !== "method" && kind !== "field") {
213
+ throw new TypeError(
214
+ `${
215
+ 'An element descriptor\'s .kind property must be either "method" or' +
216
+ ' "field", but a decorator created an element descriptor with' +
217
+ ' .kind "'
218
+ }${kind}"`,
219
+ )
220
+ }
221
+ var key = toPropertyKey(elementObject.key)
222
+ var placement = String(elementObject.placement)
223
+ if (placement !== "static" && placement !== "prototype" && placement !== "own") {
224
+ throw new TypeError(
225
+ `${
226
+ 'An element descriptor\'s .placement property must be one of "static",' +
227
+ ' "prototype" or "own", but a decorator created an element descriptor' +
228
+ ' with .placement "'
229
+ }${placement}"`,
230
+ )
231
+ }
232
+ var descriptor /* : PropertyDescriptor */ = elementObject.descriptor
233
+ this.disallowProperty(elementObject, "elements", "An element descriptor")
234
+ var element /* : ElementDescriptor */ = {
235
+ kind,
236
+ key,
237
+ placement,
238
+ descriptor: Object.assign({}, descriptor),
239
+ }
240
+ if (kind !== "field") {
241
+ this.disallowProperty(elementObject, "initializer", "A method descriptor")
242
+ } else {
243
+ this.disallowProperty(descriptor, "get", "The property descriptor of a field descriptor")
244
+ this.disallowProperty(descriptor, "set", "The property descriptor of a field descriptor")
245
+ this.disallowProperty(descriptor, "value", "The property descriptor of a field descriptor")
246
+ element.initializer = elementObject.initializer
247
+ }
248
+ return element
249
+ },
250
+ toElementFinisherExtras(elementObject /* : ElementObject */) /* : ElementFinisherExtras */ {
251
+ var element /* : ElementDescriptor */ = this.toElementDescriptor(elementObject)
252
+ var finisher /* : ClassFinisher */ = _optionalCallableProperty(elementObject, "finisher")
253
+ var extras /* : ElementDescriptors[] */ = this.toElementDescriptors(elementObject.extras)
254
+ return { element, finisher, extras }
255
+ },
256
+ // FromClassDescriptor
257
+ fromClassDescriptor(elements /* : ElementDescriptor[] */) /* : ClassObject */ {
258
+ var obj = {
259
+ kind: "class",
260
+ elements: elements.map(this.fromElementDescriptor, this),
261
+ }
262
+ var desc = { value: "Descriptor", configurable: true }
263
+ Object.defineProperty(obj, Symbol.toStringTag, desc)
264
+ return obj
265
+ },
266
+ // ToClassDescriptor
267
+ toClassDescriptor(obj /* : ClassObject */) /* : ElementsFinisher */ {
268
+ var kind = String(obj.kind)
269
+ if (kind !== "class") {
270
+ throw new TypeError(
271
+ `${
272
+ 'A class descriptor\'s .kind property must be "class", but a decorator' +
273
+ ' created a class descriptor with .kind "'
274
+ }${kind}"`,
275
+ )
276
+ }
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 }
285
+ },
286
+ // RunClassFinishers
287
+ runClassFinishers(
288
+ constructor /* : Class<*> */,
289
+ finishers /* : ClassFinisher[] */,
290
+ ) /* : Class<*> */ {
291
+ for (var i = 0; i < finishers.length; i++) {
292
+ var newConstructor /* : ?Class<*> */ = (0, finishers[i])(constructor)
293
+ if (newConstructor !== undefined) {
294
+ // NOTE: This should check if IsConstructor(newConstructor) is false.
295
+ if (typeof newConstructor !== "function") {
296
+ throw new TypeError("Finishers must return a constructor.")
297
+ }
298
+ constructor = newConstructor
299
+ }
300
+ }
301
+ return constructor
302
+ },
303
+ disallowProperty(obj, name, objectType) {
304
+ if (obj[name] !== undefined) {
305
+ throw new TypeError(`${objectType} can't have a .${name} property.`)
306
+ }
307
+ },
308
+ }
309
+ _getDecoratorsApi = function () {
310
+ return api
311
+ }
312
+ return api
313
+ }
314
+
315
+ // ClassElementEvaluation
316
+ function _createElementDescriptor(def /* : ElementDefinition */) /* : ElementDescriptor */ {
317
+ var key = toPropertyKey(def.key)
318
+ var descriptor /* : PropertyDescriptor */
319
+ if (def.kind === "method") {
320
+ descriptor = {
321
+ value: def.value,
322
+ writable: true,
323
+ configurable: true,
324
+ enumerable: false,
325
+ }
326
+ } else if (def.kind === "get") {
327
+ descriptor = { get: def.value, configurable: true, enumerable: false }
328
+ } else if (def.kind === "set") {
329
+ descriptor = { set: def.value, configurable: true, enumerable: false }
330
+ } else if (def.kind === "field") {
331
+ descriptor = { configurable: true, writable: true, enumerable: true }
332
+ }
333
+ var element /* : ElementDescriptor */ = {
334
+ kind: def.kind === "field" ? "field" : "method",
335
+ key,
336
+ placement: def.static ? "static" : def.kind === "field" ? "own" : "prototype",
337
+ descriptor,
338
+ }
339
+ if (def.decorators) element.decorators = def.decorators
340
+ if (def.kind === "field") element.initializer = def.value
341
+ return element
342
+ }
343
+ // CoalesceGetterSetter
344
+ function _coalesceGetterSetter(element /* : ElementDescriptor */, other /* : ElementDescriptor */) {
345
+ if (element.descriptor.get !== undefined) {
346
+ other.descriptor.get = element.descriptor.get
347
+ } else {
348
+ other.descriptor.set = element.descriptor.set
349
+ }
350
+ }
351
+ // CoalesceClassElements
352
+ function _coalesceClassElements(elements /* : ElementDescriptor[] */) /* : ElementDescriptor[] */ {
353
+ var newElements /* : ElementDescriptor[] */ = []
354
+ var isSameElement = function (other /* : ElementDescriptor */) /* : boolean */ {
355
+ return (
356
+ other.kind === "method" && other.key === element.key && other.placement === element.placement
357
+ )
358
+ }
359
+ for (var i = 0; i < elements.length; i++) {
360
+ var element /* : ElementDescriptor */ = elements[i]
361
+ var other /* : ElementDescriptor */
362
+ if (element.kind === "method" && (other = newElements.find(isSameElement))) {
363
+ if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {
364
+ if (_hasDecorators(element) || _hasDecorators(other)) {
365
+ throw new ReferenceError(`Duplicated methods (${element.key}) can't be decorated.`)
366
+ }
367
+ other.descriptor = element.descriptor
368
+ } else {
369
+ if (_hasDecorators(element)) {
370
+ if (_hasDecorators(other)) {
371
+ throw new ReferenceError(
372
+ `${
373
+ "Decorators can't be placed on different accessors with for " +
374
+ "the same property ("
375
+ }${element.key}).`,
376
+ )
377
+ }
378
+ other.decorators = element.decorators
379
+ }
380
+ _coalesceGetterSetter(element, other)
381
+ }
382
+ } else {
383
+ newElements.push(element)
384
+ }
385
+ }
386
+ return newElements
387
+ }
388
+ function _hasDecorators(element /* : ElementDescriptor */) /* : boolean */ {
389
+ return element.decorators && element.decorators.length
390
+ }
391
+ function _isDataDescriptor(desc /* : PropertyDescriptor */) /* : boolean */ {
392
+ return desc !== undefined && !(desc.value === undefined && desc.writable === undefined)
393
+ }
394
+ function _optionalCallableProperty /* ::<T>*/(
395
+ obj /* : T */,
396
+ name /* : $Keys<T> */,
397
+ ) /* : ?Function */ {
398
+ var value = obj[name]
399
+ if (value !== undefined && typeof value !== "function") {
400
+ throw new TypeError(`Expected '${name}' to be a function`)
401
+ }
402
+ return value
403
+ }