@jsenv/core 23.8.2 → 23.8.7

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 (133) hide show
  1. package/dist/jsenv_browser_system.js +46 -39
  2. package/dist/jsenv_browser_system.js.map +14 -14
  3. package/dist/jsenv_compile_proxy.js.map +6 -6
  4. package/dist/jsenv_exploring_index.js.map +5 -5
  5. package/dist/jsenv_exploring_redirector.js.map +12 -12
  6. package/dist/jsenv_toolbar.js.map +7 -7
  7. package/dist/jsenv_toolbar_injector.js.map +5 -5
  8. package/helpers/babel/.eslintrc.cjs +24 -24
  9. package/helpers/babel/AsyncGenerator/AsyncGenerator.js +81 -81
  10. package/helpers/babel/AwaitValue/AwaitValue.js +3 -3
  11. package/helpers/babel/applyDecoratorDescriptor/applyDecoratorDescriptor.js +33 -33
  12. package/helpers/babel/arrayLikeToArray/arrayLikeToArray.js +7 -7
  13. package/helpers/babel/arrayWithHoles/arrayWithHoles.js +4 -4
  14. package/helpers/babel/arrayWithoutHoles/arrayWithoutHoles.js +6 -6
  15. package/helpers/babel/assertThisInitialized/assertThisInitialized.js +7 -7
  16. package/helpers/babel/asyncGeneratorDelegate/asyncGeneratorDelegate.js +40 -40
  17. package/helpers/babel/asyncIterator/asyncIterator.js +12 -12
  18. package/helpers/babel/asyncToGenerator/asyncToGenerator.js +34 -34
  19. package/helpers/babel/awaitAsyncGenerator/awaitAsyncGenerator.js +5 -5
  20. package/helpers/babel/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +20 -20
  21. package/helpers/babel/classApplyDescriptorGet/classApplyDescriptorGet.js +6 -6
  22. package/helpers/babel/classApplyDescriptorSet/classApplyDescriptorSet.js +13 -13
  23. package/helpers/babel/classCallCheck/classCallCheck.js +5 -5
  24. package/helpers/babel/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -5
  25. package/helpers/babel/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -6
  26. package/helpers/babel/classExtractFieldDescriptor/classExtractFieldDescriptor.js +7 -7
  27. package/helpers/babel/classNameTDZError/classNameTDZError.js +4 -4
  28. package/helpers/babel/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +7 -7
  29. package/helpers/babel/classPrivateFieldGet/classPrivateFieldGet.js +7 -7
  30. package/helpers/babel/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +6 -6
  31. package/helpers/babel/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -5
  32. package/helpers/babel/classPrivateFieldSet/classPrivateFieldSet.js +8 -8
  33. package/helpers/babel/classPrivateMethodGet/classPrivateMethodGet.js +6 -6
  34. package/helpers/babel/classPrivateMethodSet/classPrivateMethodSet.js +3 -3
  35. package/helpers/babel/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +9 -9
  36. package/helpers/babel/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +15 -15
  37. package/helpers/babel/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +6 -6
  38. package/helpers/babel/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -3
  39. package/helpers/babel/construct/construct.js +16 -16
  40. package/helpers/babel/createClass/createClass.js +15 -15
  41. package/helpers/babel/createForOfIteratorHelper/createForOfIteratorHelper.js +60 -60
  42. package/helpers/babel/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +23 -23
  43. package/helpers/babel/createRawReactElement/createRawReactElement.js +50 -50
  44. package/helpers/babel/createSuper/createSuper.js +22 -22
  45. package/helpers/babel/decorate/decorate.js +403 -403
  46. package/helpers/babel/defaults/defaults.js +11 -11
  47. package/helpers/babel/defineEnumerableProperties/defineEnumerableProperties.js +23 -23
  48. package/helpers/babel/defineProperty/defineProperty.js +18 -18
  49. package/helpers/babel/extends/extends.js +14 -14
  50. package/helpers/babel/get/get.js +13 -13
  51. package/helpers/babel/getPrototypeOf/getPrototypeOf.js +4 -4
  52. package/helpers/babel/inherits/inherits.js +15 -15
  53. package/helpers/babel/inheritsLoose/inheritsLoose.js +7 -7
  54. package/helpers/babel/initializerDefineProperty/initializerDefineProperty.js +10 -10
  55. package/helpers/babel/initializerWarningHelper/initializerWarningHelper.js +6 -6
  56. package/helpers/babel/instanceof/instanceof.js +6 -6
  57. package/helpers/babel/interopRequireDefault/interopRequireDefault.js +3 -3
  58. package/helpers/babel/interopRequireWildcard/interopRequireWildcard.js +37 -37
  59. package/helpers/babel/isNativeFunction/isNativeFunction.js +4 -4
  60. package/helpers/babel/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -21
  61. package/helpers/babel/iterableToArray/iterableToArray.js +7 -7
  62. package/helpers/babel/iterableToArrayLimit/iterableToArrayLimit.js +36 -36
  63. package/helpers/babel/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +10 -10
  64. package/helpers/babel/jsx/jsx.js +45 -45
  65. package/helpers/babel/maybeArrayLike/maybeArrayLike.js +10 -10
  66. package/helpers/babel/newArrowCheck/newArrowCheck.js +5 -5
  67. package/helpers/babel/nonIterableRest/nonIterableRest.js +5 -5
  68. package/helpers/babel/nonIterableSpread/nonIterableSpread.js +5 -5
  69. package/helpers/babel/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -3
  70. package/helpers/babel/objectSpread/objectSpread.js +23 -23
  71. package/helpers/babel/objectSpread2/objectSpread2.js +33 -33
  72. package/helpers/babel/objectWithoutProperties/objectWithoutProperties.js +19 -19
  73. package/helpers/babel/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +13 -13
  74. package/helpers/babel/possibleConstructorReturn/possibleConstructorReturn.js +10 -10
  75. package/helpers/babel/readOnlyError/readOnlyError.js +4 -4
  76. package/helpers/babel/readme.md +9 -9
  77. package/helpers/babel/set/set.js +44 -44
  78. package/helpers/babel/setPrototypeOf/setPrototypeOf.js +6 -6
  79. package/helpers/babel/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -8
  80. package/helpers/babel/slicedToArray/slicedToArray.js +10 -10
  81. package/helpers/babel/slicedToArrayLoose/slicedToArrayLoose.js +13 -13
  82. package/helpers/babel/superPropBase/superPropBase.js +10 -10
  83. package/helpers/babel/taggedTemplateLiteral/taggedTemplateLiteral.js +10 -10
  84. package/helpers/babel/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +7 -7
  85. package/helpers/babel/tdz/tdz.js +4 -4
  86. package/helpers/babel/temporalRef/temporalRef.js +6 -6
  87. package/helpers/babel/temporalUndefined/temporalUndefined.js +3 -3
  88. package/helpers/babel/toArray/toArray.js +10 -10
  89. package/helpers/babel/toConsumableArray/toConsumableArray.js +10 -10
  90. package/helpers/babel/toPrimitive/toPrimitive.js +10 -10
  91. package/helpers/babel/toPropertyKey/toPropertyKey.js +6 -6
  92. package/helpers/babel/typeof/typeof.js +14 -14
  93. package/helpers/babel/unsupportedIterableToArray/unsupportedIterableToArray.js +12 -12
  94. package/helpers/babel/wrapAsyncGenerator/wrapAsyncGenerator.js +8 -8
  95. package/helpers/babel/wrapNativeSuper/wrapNativeSuper.js +30 -30
  96. package/helpers/babel/wrapRegExp/wrapRegExp.js +63 -63
  97. package/helpers/babel/writeOnlyError/writeOnlyError.js +4 -4
  98. package/helpers/regenerator-runtime/regenerator-runtime.js +748 -748
  99. package/{LICENSE → license} +21 -21
  100. package/package.json +2 -2
  101. package/src/buildProject.js +300 -300
  102. package/src/execute.js +184 -184
  103. package/src/internal/browser-launcher/jsenv-browser-system.js +203 -199
  104. package/src/internal/building/buildUsingRollup.js +2 -10
  105. package/src/internal/compiling/babel_plugin_import_assertions.js +121 -121
  106. package/src/internal/compiling/babel_plugin_import_metadata.js +22 -22
  107. package/src/internal/compiling/babel_plugin_import_visitor.js +84 -84
  108. package/src/internal/compiling/compile-directory/getOrGenerateCompiledFile.js +268 -268
  109. package/src/internal/compiling/compile-directory/updateMeta.js +154 -154
  110. package/src/internal/compiling/compile-directory/validateCache.js +265 -265
  111. package/src/internal/compiling/compileFile.js +233 -224
  112. package/src/internal/compiling/compileHtml.js +550 -550
  113. package/src/internal/compiling/createCompiledFileService.js +291 -291
  114. package/src/internal/compiling/html_source_file_service.js +403 -404
  115. package/src/internal/compiling/js-compilation-service/jsenvTransform.js +272 -270
  116. package/src/internal/compiling/jsenvCompilerForHtml.js +374 -308
  117. package/src/internal/compiling/jsenvCompilerForJavaScript.js +2 -0
  118. package/src/internal/compiling/startCompileServer.js +1086 -1048
  119. package/src/internal/compiling/transformResultToCompilationResult.js +220 -220
  120. package/src/internal/executing/coverage/babel_plugin_instrument.js +90 -90
  121. package/src/internal/executing/coverage/reportToCoverage.js +193 -187
  122. package/src/internal/executing/executePlan.js +183 -183
  123. package/src/internal/executing/launchAndExecute.js +458 -458
  124. package/src/internal/generateGroupMap/featuresCompatMap.js +29 -0
  125. package/src/internal/generateGroupMap/jsenvBabelPluginCompatMap.js +1 -8
  126. package/src/internal/runtime/createBrowserRuntime/scanBrowserRuntimeFeatures.js +246 -246
  127. package/src/internal/runtime/createNodeRuntime/scanNodeRuntimeFeatures.js +112 -112
  128. package/src/internal/runtime/s.js +727 -727
  129. package/src/internal/toolbar/jsenv-logo.svg +144 -144
  130. package/src/internal/toolbar/toolbar.main.css +196 -196
  131. package/src/internal/toolbar/toolbar.main.js +227 -227
  132. package/src/internal/url_conversion.js +317 -317
  133. 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
+ }