@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,187 +1,193 @@
1
- import { readFile } from "@jsenv/filesystem"
2
- import { Abort } from "@jsenv/abort"
3
-
4
- import {
5
- visitNodeV8Directory,
6
- filterV8Coverage,
7
- } from "../coverage_utils/v8_coverage_from_directory.js"
8
- import { composeTwoV8Coverages } from "../coverage_utils/v8_coverage_composition.js"
9
- import { composeTwoFileByFileIstanbulCoverages } from "../coverage_utils/istanbul_coverage_composition.js"
10
- import { v8CoverageToIstanbul } from "../coverage_utils/v8_coverage_to_istanbul.js"
11
- import { composeV8AndIstanbul } from "../coverage_utils/v8_and_istanbul.js"
12
- import { normalizeFileByFileCoveragePaths } from "../coverage_utils/file_by_file_coverage.js"
13
- import { getMissingFileByFileCoverage } from "../coverage_missing/missing_coverage.js"
14
-
15
- export const reportToCoverage = async (
16
- report,
17
- {
18
- signal,
19
- logger,
20
- projectDirectoryUrl,
21
- babelPluginMap,
22
- coverageConfig,
23
- coverageIncludeMissing,
24
- coverageIgnorePredicate,
25
- coverageForceIstanbul,
26
- coverageV8ConflictWarning,
27
- },
28
- ) => {
29
- // collect v8 and istanbul coverage from executions
30
- let { v8Coverage, fileByFileIstanbulCoverage } = await getCoverageFromReport({
31
- signal,
32
- report,
33
- onMissing: ({ file, executionResult, executionName }) => {
34
- // several reasons not to have coverage here:
35
- // 1. the file we executed did not import an instrumented file.
36
- // - a test file without import
37
- // - a test file importing only file excluded from coverage
38
- // - a coverDescription badly configured so that we don't realize
39
- // a file should be covered
40
-
41
- // 2. the file we wanted to executed timedout
42
- // - infinite loop
43
- // - too extensive operation
44
- // - a badly configured or too low allocatedMs for that execution.
45
-
46
- // 3. the file we wanted to execute contains syntax-error
47
-
48
- // in any scenario we are fine because
49
- // coverDescription will generate empty coverage for files
50
- // that were suppose to be coverage but were not.
51
- if (executionResult.status === "completed") {
52
- logger.debug(
53
- `No execution.coverageFileUrl from execution named "${executionName}" of ${file}`,
54
- )
55
- }
56
- },
57
- })
58
-
59
- if (!coverageForceIstanbul && process.env.NODE_V8_COVERAGE) {
60
- await visitNodeV8Directory({
61
- signal,
62
- NODE_V8_COVERAGE: process.env.NODE_V8_COVERAGE,
63
- onV8Coverage: (nodeV8Coverage) => {
64
- const nodeV8CoverageLight = filterV8Coverage(nodeV8Coverage, {
65
- coverageIgnorePredicate,
66
- })
67
- v8Coverage = v8Coverage
68
- ? composeTwoV8Coverages(v8Coverage, nodeV8CoverageLight)
69
- : nodeV8CoverageLight
70
- },
71
- })
72
- }
73
-
74
- // try to merge v8 with istanbul, if any
75
- let fileByFileCoverage
76
- if (v8Coverage) {
77
- let v8FileByFileCoverage = await v8CoverageToIstanbul(v8Coverage, {
78
- signal,
79
- })
80
-
81
- v8FileByFileCoverage = normalizeFileByFileCoveragePaths(
82
- v8FileByFileCoverage,
83
- projectDirectoryUrl,
84
- )
85
-
86
- if (fileByFileIstanbulCoverage) {
87
- fileByFileIstanbulCoverage = normalizeFileByFileCoveragePaths(
88
- fileByFileIstanbulCoverage,
89
- projectDirectoryUrl,
90
- )
91
- fileByFileCoverage = composeV8AndIstanbul(
92
- v8FileByFileCoverage,
93
- fileByFileIstanbulCoverage,
94
- { coverageV8ConflictWarning },
95
- )
96
- } else {
97
- fileByFileCoverage = v8FileByFileCoverage
98
- }
99
- }
100
- // get istanbul only
101
- else if (fileByFileIstanbulCoverage) {
102
- fileByFileCoverage = normalizeFileByFileCoveragePaths(
103
- fileByFileIstanbulCoverage,
104
- projectDirectoryUrl,
105
- )
106
- }
107
- // no coverage found in execution (or zero file where executed)
108
- else {
109
- fileByFileCoverage = {}
110
- }
111
-
112
- // now add coverage for file not covered
113
- if (coverageIncludeMissing) {
114
- const missingFileByFileCoverage = await getMissingFileByFileCoverage({
115
- signal,
116
- projectDirectoryUrl,
117
- coverageConfig,
118
- fileByFileCoverage,
119
- babelPluginMap,
120
- })
121
- Object.assign(fileByFileCoverage, missingFileByFileCoverage)
122
- }
123
-
124
- return fileByFileCoverage
125
- }
126
-
127
- const getCoverageFromReport = async ({ signal, report, onMissing }) => {
128
- const operation = Abort.startOperation()
129
- operation.addAbortSignal(signal)
130
-
131
- try {
132
- let v8Coverage
133
- let fileByFileIstanbulCoverage
134
-
135
- // collect v8 and istanbul coverage from executions
136
- await Object.keys(report).reduce(async (previous, file) => {
137
- operation.throwIfAborted()
138
- await previous
139
-
140
- const executionResultForFile = report[file]
141
- await Object.keys(executionResultForFile).reduce(
142
- async (previous, executionName) => {
143
- operation.throwIfAborted()
144
- await previous
145
-
146
- const executionResultForFileOnRuntime =
147
- executionResultForFile[executionName]
148
- const { coverageFileUrl } = executionResultForFileOnRuntime
149
- if (!coverageFileUrl) {
150
- onMissing({
151
- executionName,
152
- file,
153
- executionResult: executionResultForFileOnRuntime,
154
- })
155
- return
156
- }
157
-
158
- const executionCoverage = await readFile(coverageFileUrl, {
159
- as: "json",
160
- })
161
- if (isV8Coverage(executionCoverage)) {
162
- v8Coverage = v8Coverage
163
- ? composeTwoV8Coverages(v8Coverage, executionCoverage)
164
- : executionCoverage
165
- } else {
166
- fileByFileIstanbulCoverage = fileByFileIstanbulCoverage
167
- ? composeTwoFileByFileIstanbulCoverages(
168
- fileByFileIstanbulCoverage,
169
- executionCoverage,
170
- )
171
- : executionCoverage
172
- }
173
- },
174
- Promise.resolve(),
175
- )
176
- }, Promise.resolve())
177
-
178
- return {
179
- v8Coverage,
180
- fileByFileIstanbulCoverage,
181
- }
182
- } finally {
183
- await operation.end()
184
- }
185
- }
186
-
187
- const isV8Coverage = (coverage) => Boolean(coverage.result)
1
+ import { readFile } from "@jsenv/filesystem"
2
+ import { Abort } from "@jsenv/abort"
3
+
4
+ import {
5
+ visitNodeV8Directory,
6
+ filterV8Coverage,
7
+ } from "../coverage_utils/v8_coverage_from_directory.js"
8
+ import { composeTwoV8Coverages } from "../coverage_utils/v8_coverage_composition.js"
9
+ import { composeTwoFileByFileIstanbulCoverages } from "../coverage_utils/istanbul_coverage_composition.js"
10
+ import { v8CoverageToIstanbul } from "../coverage_utils/v8_coverage_to_istanbul.js"
11
+ import { composeV8AndIstanbul } from "../coverage_utils/v8_and_istanbul.js"
12
+ import { normalizeFileByFileCoveragePaths } from "../coverage_utils/file_by_file_coverage.js"
13
+ import { getMissingFileByFileCoverage } from "../coverage_missing/missing_coverage.js"
14
+
15
+ export const reportToCoverage = async (
16
+ report,
17
+ {
18
+ signal,
19
+ logger,
20
+ projectDirectoryUrl,
21
+ babelPluginMap,
22
+ coverageConfig,
23
+ coverageIncludeMissing,
24
+ coverageIgnorePredicate,
25
+ coverageForceIstanbul,
26
+ coverageV8ConflictWarning,
27
+ },
28
+ ) => {
29
+ // collect v8 and istanbul coverage from executions
30
+ let { v8Coverage, fileByFileIstanbulCoverage } = await getCoverageFromReport({
31
+ signal,
32
+ report,
33
+ onMissing: ({ file, executionResult, executionName }) => {
34
+ // several reasons not to have coverage here:
35
+ // 1. the file we executed did not import an instrumented file.
36
+ // - a test file without import
37
+ // - a test file importing only file excluded from coverage
38
+ // - a coverDescription badly configured so that we don't realize
39
+ // a file should be covered
40
+
41
+ // 2. the file we wanted to executed timedout
42
+ // - infinite loop
43
+ // - too extensive operation
44
+ // - a badly configured or too low allocatedMs for that execution.
45
+
46
+ // 3. the file we wanted to execute contains syntax-error
47
+
48
+ // in any scenario we are fine because
49
+ // coverDescription will generate empty coverage for files
50
+ // that were suppose to be coverage but were not.
51
+ if (executionResult.status === "completed") {
52
+ logger.debug(
53
+ `No execution.coverageFileUrl from execution named "${executionName}" of ${file}`,
54
+ )
55
+ }
56
+ },
57
+ })
58
+
59
+ if (!coverageForceIstanbul && process.env.NODE_V8_COVERAGE) {
60
+ await visitNodeV8Directory({
61
+ signal,
62
+ NODE_V8_COVERAGE: process.env.NODE_V8_COVERAGE,
63
+ onV8Coverage: (nodeV8Coverage) => {
64
+ const nodeV8CoverageLight = filterV8Coverage(nodeV8Coverage, {
65
+ coverageIgnorePredicate,
66
+ })
67
+ v8Coverage = v8Coverage
68
+ ? composeTwoV8Coverages(v8Coverage, nodeV8CoverageLight)
69
+ : nodeV8CoverageLight
70
+ },
71
+ })
72
+ }
73
+
74
+ // try to merge v8 with istanbul, if any
75
+ let fileByFileCoverage
76
+ if (v8Coverage) {
77
+ let v8FileByFileCoverage = await v8CoverageToIstanbul(v8Coverage, {
78
+ signal,
79
+ })
80
+
81
+ v8FileByFileCoverage = normalizeFileByFileCoveragePaths(
82
+ v8FileByFileCoverage,
83
+ projectDirectoryUrl,
84
+ )
85
+
86
+ if (fileByFileIstanbulCoverage) {
87
+ fileByFileIstanbulCoverage = normalizeFileByFileCoveragePaths(
88
+ fileByFileIstanbulCoverage,
89
+ projectDirectoryUrl,
90
+ )
91
+ fileByFileCoverage = composeV8AndIstanbul(
92
+ v8FileByFileCoverage,
93
+ fileByFileIstanbulCoverage,
94
+ { coverageV8ConflictWarning },
95
+ )
96
+ } else {
97
+ fileByFileCoverage = v8FileByFileCoverage
98
+ }
99
+ }
100
+ // get istanbul only
101
+ else if (fileByFileIstanbulCoverage) {
102
+ fileByFileCoverage = normalizeFileByFileCoveragePaths(
103
+ fileByFileIstanbulCoverage,
104
+ projectDirectoryUrl,
105
+ )
106
+ }
107
+ // no coverage found in execution (or zero file where executed)
108
+ else {
109
+ fileByFileCoverage = {}
110
+ }
111
+
112
+ // now add coverage for file not covered
113
+ if (coverageIncludeMissing) {
114
+ const missingFileByFileCoverage = await getMissingFileByFileCoverage({
115
+ signal,
116
+ projectDirectoryUrl,
117
+ coverageConfig,
118
+ fileByFileCoverage,
119
+ babelPluginMap,
120
+ })
121
+ Object.assign(
122
+ fileByFileCoverage,
123
+ normalizeFileByFileCoveragePaths(
124
+ missingFileByFileCoverage,
125
+ projectDirectoryUrl,
126
+ ),
127
+ )
128
+ }
129
+
130
+ return fileByFileCoverage
131
+ }
132
+
133
+ const getCoverageFromReport = async ({ signal, report, onMissing }) => {
134
+ const operation = Abort.startOperation()
135
+ operation.addAbortSignal(signal)
136
+
137
+ try {
138
+ let v8Coverage
139
+ let fileByFileIstanbulCoverage
140
+
141
+ // collect v8 and istanbul coverage from executions
142
+ await Object.keys(report).reduce(async (previous, file) => {
143
+ operation.throwIfAborted()
144
+ await previous
145
+
146
+ const executionResultForFile = report[file]
147
+ await Object.keys(executionResultForFile).reduce(
148
+ async (previous, executionName) => {
149
+ operation.throwIfAborted()
150
+ await previous
151
+
152
+ const executionResultForFileOnRuntime =
153
+ executionResultForFile[executionName]
154
+ const { coverageFileUrl } = executionResultForFileOnRuntime
155
+ if (!coverageFileUrl) {
156
+ onMissing({
157
+ executionName,
158
+ file,
159
+ executionResult: executionResultForFileOnRuntime,
160
+ })
161
+ return
162
+ }
163
+
164
+ const executionCoverage = await readFile(coverageFileUrl, {
165
+ as: "json",
166
+ })
167
+ if (isV8Coverage(executionCoverage)) {
168
+ v8Coverage = v8Coverage
169
+ ? composeTwoV8Coverages(v8Coverage, executionCoverage)
170
+ : executionCoverage
171
+ } else {
172
+ fileByFileIstanbulCoverage = fileByFileIstanbulCoverage
173
+ ? composeTwoFileByFileIstanbulCoverages(
174
+ fileByFileIstanbulCoverage,
175
+ executionCoverage,
176
+ )
177
+ : executionCoverage
178
+ }
179
+ },
180
+ Promise.resolve(),
181
+ )
182
+ }, Promise.resolve())
183
+
184
+ return {
185
+ v8Coverage,
186
+ fileByFileIstanbulCoverage,
187
+ }
188
+ } finally {
189
+ await operation.end()
190
+ }
191
+ }
192
+
193
+ const isV8Coverage = (coverage) => Boolean(coverage.result)