@jsenv/core 23.6.1 → 23.8.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 (135) 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 -130
  10. package/dist/jsenv_toolbar.js.map +13 -48
  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 +5 -3
  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/babel_plugin_import_assertions.js +121 -100
  108. package/src/internal/compiling/babel_plugin_import_metadata.js +22 -0
  109. package/src/internal/compiling/babel_plugin_import_visitor.js +84 -0
  110. package/src/internal/compiling/compile-directory/getOrGenerateCompiledFile.js +268 -265
  111. package/src/internal/compiling/compile-directory/updateMeta.js +154 -150
  112. package/src/internal/compiling/compile-directory/validateCache.js +265 -265
  113. package/src/internal/compiling/compileFile.js +215 -200
  114. package/src/internal/compiling/compileHtml.js +550 -494
  115. package/src/internal/compiling/createCompiledFileService.js +291 -290
  116. package/src/internal/compiling/html_source_file_service.js +403 -379
  117. package/src/internal/compiling/js-compilation-service/jsenvTransform.js +270 -269
  118. package/src/internal/compiling/jsenvCompilerForHtml.js +300 -293
  119. package/src/internal/compiling/startCompileServer.js +1048 -1131
  120. package/src/internal/compiling/transformResultToCompilationResult.js +220 -217
  121. package/src/internal/executing/coverage/babel_plugin_instrument.js +90 -90
  122. package/src/internal/executing/coverage/reportToCoverage.js +187 -187
  123. package/src/internal/executing/executePlan.js +183 -183
  124. package/src/internal/executing/launchAndExecute.js +458 -450
  125. package/src/internal/runtime/createBrowserRuntime/scanBrowserRuntimeFeatures.js +246 -250
  126. package/src/internal/runtime/createNodeRuntime/scanNodeRuntimeFeatures.js +112 -115
  127. package/src/internal/runtime/s.js +727 -727
  128. package/src/internal/toolbar/jsenv-logo.svg +144 -144
  129. package/src/internal/toolbar/toolbar.main.css +196 -188
  130. package/src/internal/toolbar/toolbar.main.js +227 -228
  131. package/src/internal/url_conversion.js +317 -317
  132. package/src/startExploring.js +309 -309
  133. package/src/internal/compiling/babel_plugin_transform_import_specifier.js +0 -86
  134. package/src/internal/toolbar/animation/animation.css +0 -5
  135. package/src/internal/toolbar/variant/variant.css +0 -3
@@ -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
+ }