@jsenv/core 27.0.0-alpha.8 → 27.0.0-alpha.82
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.
- package/dist/babel_helpers/AsyncGenerator/AsyncGenerator.js +95 -0
- package/dist/babel_helpers/AwaitValue/AwaitValue.js +3 -0
- package/dist/babel_helpers/applyDecoratorDescriptor/applyDecoratorDescriptor.js +29 -0
- package/dist/babel_helpers/applyDecs/applyDecs.js +756 -0
- package/dist/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +9 -0
- package/dist/babel_helpers/arrayWithHoles/arrayWithHoles.js +4 -0
- package/dist/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +5 -0
- package/dist/babel_helpers/assertThisInitialized/assertThisInitialized.js +8 -0
- package/dist/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +52 -0
- package/dist/babel_helpers/asyncIterator/asyncIterator.js +78 -0
- package/dist/babel_helpers/asyncToGenerator/asyncToGenerator.js +39 -0
- package/dist/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +4 -0
- package/dist/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +24 -0
- package/dist/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +7 -0
- package/dist/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +14 -0
- package/dist/babel_helpers/classCallCheck/classCallCheck.js +5 -0
- package/dist/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -0
- package/dist/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -0
- package/dist/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +8 -0
- package/dist/babel_helpers/classNameTDZError/classNameTDZError.js +4 -0
- package/dist/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +6 -0
- package/dist/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +6 -0
- package/dist/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +7 -0
- package/dist/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -0
- package/dist/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +7 -0
- package/dist/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +7 -0
- package/dist/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +3 -0
- package/dist/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +8 -0
- package/dist/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +9 -0
- package/dist/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +5 -0
- package/dist/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -0
- package/dist/babel_helpers/construct/construct.js +15 -0
- package/dist/babel_helpers/createClass/createClass.js +18 -0
- package/dist/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +63 -0
- package/dist/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +22 -0
- package/dist/babel_helpers/createRawReactElement/createRawReactElement.js +50 -0
- package/dist/babel_helpers/createSuper/createSuper.js +22 -0
- package/dist/babel_helpers/decorate/decorate.js +622 -0
- package/dist/babel_helpers/defaults/defaults.js +14 -0
- package/dist/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +26 -0
- package/dist/babel_helpers/defineProperty/defineProperty.js +19 -0
- package/dist/babel_helpers/extends/extends.js +16 -0
- package/dist/babel_helpers/get/get.js +21 -0
- package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +2 -0
- package/dist/babel_helpers/identity/identity.js +3 -0
- package/dist/babel_helpers/inherits/inherits.js +21 -0
- package/dist/babel_helpers/inheritsLoose/inheritsLoose.js +6 -0
- package/dist/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +10 -0
- package/dist/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +3 -0
- package/dist/babel_helpers/instanceof/instanceof.js +7 -0
- package/dist/babel_helpers/interopRequireDefault/interopRequireDefault.js +5 -0
- package/dist/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +49 -0
- package/dist/babel_helpers/isNativeFunction/isNativeFunction.js +4 -0
- package/dist/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -0
- package/dist/babel_helpers/iterableToArray/iterableToArray.js +3 -0
- package/dist/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +38 -0
- package/dist/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +13 -0
- package/dist/babel_helpers/jsx/jsx.js +49 -0
- package/dist/babel_helpers/maybeArrayLike/maybeArrayLike.js +10 -0
- package/dist/babel_helpers/newArrowCheck/newArrowCheck.js +5 -0
- package/dist/babel_helpers/nonIterableRest/nonIterableRest.js +3 -0
- package/dist/babel_helpers/nonIterableSpread/nonIterableSpread.js +3 -0
- package/dist/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -0
- package/dist/babel_helpers/objectSpread/objectSpread.js +22 -0
- package/dist/babel_helpers/objectSpread2/objectSpread2.js +41 -0
- package/dist/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +20 -0
- package/dist/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +15 -0
- package/dist/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +10 -0
- package/dist/babel_helpers/readOnlyError/readOnlyError.js +4 -0
- package/dist/babel_helpers/set/set.js +51 -0
- package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +5 -0
- package/dist/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -0
- package/dist/babel_helpers/slicedToArray/slicedToArray.js +5 -0
- package/dist/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +7 -0
- package/dist/babel_helpers/superPropBase/superPropBase.js +10 -0
- package/dist/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +11 -0
- package/dist/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +8 -0
- package/dist/babel_helpers/tdz/tdz.js +4 -0
- package/dist/babel_helpers/temporalRef/temporalRef.js +5 -0
- package/dist/babel_helpers/temporalUndefined/temporalUndefined.js +3 -0
- package/dist/babel_helpers/toArray/toArray.js +5 -0
- package/dist/babel_helpers/toConsumableArray/toConsumableArray.js +5 -0
- package/dist/babel_helpers/toPrimitive/toPrimitive.js +14 -0
- package/dist/babel_helpers/toPropertyKey/toPropertyKey.js +5 -0
- package/dist/babel_helpers/typeof/typeof.js +7 -0
- package/dist/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +10 -0
- package/dist/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +7 -0
- package/dist/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +35 -0
- package/dist/babel_helpers/wrapRegExp/wrapRegExp.js +67 -0
- package/dist/babel_helpers/writeOnlyError/writeOnlyError.js +4 -0
- package/dist/html/explorer.html +557 -0
- package/dist/js/controllable_file.mjs +227 -0
- package/dist/js/event_source_client.js +324 -0
- package/dist/js/global_this.js +32 -0
- package/dist/js/html_supervisor_installer.js +522 -0
- package/dist/js/html_supervisor_setup.js +82 -0
- package/dist/js/import_meta_hot.js +84 -0
- package/dist/js/inline_content.js +8 -0
- package/dist/js/new_stylesheet.js +409 -0
- package/dist/js/regenerator_runtime.js +721 -0
- package/dist/js/s.js +429 -0
- package/dist/main.js +13422 -0
- package/dist/other/jsenv.png +0 -0
- package/dist/s.js +626 -0
- package/dist/s.js.map +204 -0
- package/package.json +57 -51
- package/readme.md +6 -14
- package/src/build/build.js +1074 -563
- package/src/build/build_urls_generator.js +65 -24
- package/src/build/graph_utils.js +31 -0
- package/src/build/{inject_version_mappings.js → inject_global_version_mappings.js} +49 -18
- package/src/build/inject_service_worker_urls.js +79 -0
- package/src/build/resync_ressource_hints.js +115 -0
- package/src/build/start_build_server.js +210 -0
- package/src/dev/plugins/explorer/client/explorer.html +1 -1
- package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +9 -13
- package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +3 -1
- package/src/dev/start_dev_server.js +165 -38
- package/src/execute/execute.js +35 -8
- package/src/execute/run.js +21 -57
- package/src/execute/runtimes/browsers/from_playwright.js +220 -150
- package/src/execute/runtimes/node/child_exec_options.js +1 -1
- package/src/execute/runtimes/node/controllable_file.mjs +26 -10
- package/src/execute/runtimes/node/kill_process_tree.js +2 -4
- package/src/execute/runtimes/node/node_execution_performance.js +67 -0
- package/src/execute/runtimes/node/node_process.js +288 -39
- package/src/main.js +27 -0
- package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +30 -7
- package/src/omega/{runtime_support/runtime_support.js → compat/runtime_compat.js} +14 -16
- package/src/omega/errors.js +63 -67
- package/src/omega/fetched_content_compliance.js +24 -0
- package/src/omega/file_url_converter.js +9 -51
- package/src/omega/kitchen.js +605 -467
- package/src/omega/omega_server.js +2 -3
- package/src/omega/server/file_service.js +88 -41
- package/src/omega/server/user_agent.js +5 -6
- package/src/omega/url_graph/url_graph_load.js +31 -23
- package/src/omega/url_graph/url_graph_report.js +94 -51
- package/src/omega/url_graph/url_info_transformations.js +37 -17
- package/src/omega/url_graph.js +88 -19
- package/src/omega/url_specifier_encoding.js +59 -0
- package/src/omega/web_workers.js +42 -0
- package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/autoreload_preference.js +0 -0
- package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/event_source_client.js +19 -12
- package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/reload.js +0 -0
- package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/url_helpers.js +0 -0
- package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +41 -0
- package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js +204 -0
- package/src/plugins/autoreload/jsenv_plugin_autoreload.js +25 -0
- package/src/plugins/autoreload/jsenv_plugin_hmr.js +35 -0
- package/src/plugins/bundling/css/bundle_css.js +140 -0
- package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
- package/src/plugins/bundling/js_module/bundle_js_module.js +343 -0
- package/src/plugins/bundling/jsenv_plugin_bundling.js +54 -0
- package/src/plugins/cache_control/jsenv_plugin_cache_control.js +34 -0
- package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +54 -41
- package/src/plugins/file_urls/jsenv_plugin_file_urls.js +183 -0
- package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_document.js +0 -0
- package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_notification.js +0 -0
- package/src/plugins/html_supervisor/client/html_supervisor_installer.js +254 -0
- package/src/plugins/html_supervisor/client/html_supervisor_setup.js +82 -0
- package/src/{omega/core_plugins → plugins}/html_supervisor/client/perf_browser.js +0 -0
- package/src/{omega/core_plugins → plugins}/html_supervisor/client/uneval_exception.js +0 -0
- package/src/{omega/core_plugins → plugins}/html_supervisor/jsenv_plugin_html_supervisor.js +73 -55
- package/src/plugins/http_urls/jsenv_plugin_http_urls.js +12 -0
- package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/babel_plugin_metadata_import_meta_hot.js +4 -5
- package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/client/import_meta_hot.js +3 -1
- package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/html_hot_dependencies.js +7 -4
- package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +100 -0
- package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +33 -8
- package/src/plugins/import_meta_url/client/import_meta_url_browser.js +52 -0
- package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +9 -0
- package/src/{omega/core_plugins → plugins}/importmap/jsenv_plugin_importmap.js +40 -36
- package/src/plugins/inject_globals/inject_globals.js +57 -0
- package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +24 -0
- package/src/{omega/core_plugins → plugins}/inline/client/inline_content.js +0 -0
- package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_data_urls.js +22 -21
- package/src/plugins/inline/jsenv_plugin_html_inline_content.js +161 -0
- package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
- package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +8 -11
- package/src/plugins/inline/jsenv_plugin_js_inline_content.js +294 -0
- package/src/plugins/leading_slash/jsenv_plugin_leading_slash.js +13 -0
- package/src/plugins/minification/css/minify_css.js +9 -0
- package/src/plugins/minification/html/minify_html.js +13 -0
- package/src/{build/plugins/minify_js/jsenv_plugin_minify_js.js → plugins/minification/js/minify_js.js} +6 -22
- package/src/plugins/minification/jsenv_plugin_minification.js +78 -0
- package/src/plugins/minification/json/minify_json.js +8 -0
- package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +162 -0
- package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +12 -0
- package/src/{omega → plugins}/plugin_controller.js +57 -12
- package/src/plugins/plugins.js +89 -0
- package/src/plugins/transpilation/as_js_classic/client/s.js +429 -0
- package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js +47 -0
- package/src/plugins/transpilation/as_js_classic/helpers/systemjs_old.js +43 -0
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +211 -0
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +304 -0
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_workers.js +55 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +0 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +0 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_structure.js +14 -17
- package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugins_compatibility.js +0 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/jsenv_plugin_babel.js +39 -32
- package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +30 -6
- package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/new_stylesheet.js +0 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +0 -0
- package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
- package/src/plugins/transpilation/babel/require_babel_plugin.js +8 -0
- package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
- package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +184 -0
- package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +79 -0
- package/src/plugins/transpilation/jsenv_plugin_transpilation.js +46 -0
- package/src/plugins/url_analysis/css/css_urls.js +49 -0
- package/src/plugins/url_analysis/html/html_urls.js +272 -0
- package/src/plugins/url_analysis/js/js_urls.js +68 -0
- package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +103 -0
- package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +20 -0
- package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +9 -5
- package/src/plugins/url_version/jsenv_plugin_url_version.js +28 -0
- package/src/require_from_jsenv.js +3 -0
- package/src/test/execute_plan.js +85 -44
- package/src/test/execute_test_plan.js +37 -25
- package/src/test/execution_steps.js +2 -5
- package/src/test/logs_file_execution.js +56 -49
- package/main.js +0 -19
- package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +0 -227
- package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
- package/src/dev/plugins/autoreload/client/event_source_connection.js +0 -195
- package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +0 -374
- package/src/dev/plugins/autoreload/sse_service.js +0 -149
- package/src/execute/runtimes/node/controlled_process.js +0 -316
- package/src/omega/core_plugins/babel/new_stylesheet/client/.eslintrc.cjs +0 -24
- package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
- package/src/omega/core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +0 -58
- package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +0 -168
- package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +0 -77
- package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -98
- package/src/omega/core_plugins/import_assertions/helpers/json_module.js +0 -12
- package/src/omega/core_plugins/import_assertions/helpers/text_module.js +0 -6
- package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +0 -211
- package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +0 -13
- package/src/omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js +0 -142
- package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +0 -207
- package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
- package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +0 -77
- package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +0 -50
- package/src/omega/core_plugins.js +0 -39
- package/src/omega/runtime_support/default_runtime_support.js +0 -13
- package/src/omega/url_graph/url_graph_sort.js +0 -29
- package/src/omega/url_mentions/css_url_mentions.js +0 -63
- package/src/omega/url_mentions/html_url_mentions.js +0 -185
- package/src/omega/url_mentions/js_module_url_mentions.js +0 -91
- package/src/omega/url_mentions/parse_url_mentions.js +0 -37
- package/src/omega/url_mentions/worker_classic_url_mentions.js +0 -37
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Script } from "node:vm"
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
import { createDetailedMessage } from "@jsenv/log"
|
|
3
4
|
import {
|
|
4
5
|
Abort,
|
|
5
6
|
createCallbackListNotifiedOnce,
|
|
6
7
|
raceProcessTeardownEvents,
|
|
8
|
+
raceCallbacks,
|
|
7
9
|
} from "@jsenv/abort"
|
|
8
|
-
import { moveUrl } from "@jsenv/
|
|
9
|
-
|
|
10
|
+
import { moveUrl } from "@jsenv/urls"
|
|
10
11
|
import { memoize } from "@jsenv/utils/memoize/memoize.js"
|
|
11
12
|
import { filterV8Coverage } from "@jsenv/utils/coverage/v8_coverage_from_directory.js"
|
|
12
13
|
import { composeTwoFileByFileIstanbulCoverages } from "@jsenv/utils/coverage/istanbul_coverage_composition.js"
|
|
@@ -34,7 +35,7 @@ export const createRuntimeFromPlaywright = ({
|
|
|
34
35
|
server,
|
|
35
36
|
|
|
36
37
|
// measurePerformance,
|
|
37
|
-
|
|
38
|
+
collectPerformance,
|
|
38
39
|
collectCoverage = false,
|
|
39
40
|
coverageForceIstanbul,
|
|
40
41
|
urlShouldBeCovered,
|
|
@@ -42,10 +43,7 @@ export const createRuntimeFromPlaywright = ({
|
|
|
42
43
|
stopAfterAllSignal,
|
|
43
44
|
stopSignal,
|
|
44
45
|
keepRunning,
|
|
45
|
-
onStop,
|
|
46
|
-
onError,
|
|
47
46
|
onConsole,
|
|
48
|
-
onResult,
|
|
49
47
|
|
|
50
48
|
executablePath,
|
|
51
49
|
headful = false,
|
|
@@ -74,11 +72,27 @@ export const createRuntimeFromPlaywright = ({
|
|
|
74
72
|
}
|
|
75
73
|
const { browser, browserContext } = await browserAndContextPromise
|
|
76
74
|
const closeBrowser = async () => {
|
|
75
|
+
const disconnected = browser.isConnected()
|
|
76
|
+
? new Promise((resolve) => {
|
|
77
|
+
const disconnectedCallback = () => {
|
|
78
|
+
browser.removeListener("disconnected", disconnectedCallback)
|
|
79
|
+
resolve()
|
|
80
|
+
}
|
|
81
|
+
browser.on("disconnected", disconnectedCallback)
|
|
82
|
+
})
|
|
83
|
+
: Promise.resolve()
|
|
84
|
+
// for some reason without this 100ms timeout
|
|
85
|
+
// browser.close() never resolves (playwright does not like something)
|
|
86
|
+
await new Promise((resolve) => setTimeout(resolve, 100))
|
|
77
87
|
try {
|
|
78
|
-
await
|
|
88
|
+
await browser.close()
|
|
79
89
|
} catch (e) {
|
|
80
|
-
|
|
90
|
+
if (isTargetClosedError(e)) {
|
|
91
|
+
return
|
|
92
|
+
}
|
|
93
|
+
throw e
|
|
81
94
|
}
|
|
95
|
+
await disconnected
|
|
82
96
|
}
|
|
83
97
|
const page = await browserContext.newPage()
|
|
84
98
|
const closePage = async () => {
|
|
@@ -88,44 +102,9 @@ export const createRuntimeFromPlaywright = ({
|
|
|
88
102
|
if (isTargetClosedError(e)) {
|
|
89
103
|
return
|
|
90
104
|
}
|
|
91
|
-
|
|
105
|
+
throw e
|
|
92
106
|
}
|
|
93
107
|
}
|
|
94
|
-
// https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-disconnected
|
|
95
|
-
if (isBrowserDedicatedToExecution) {
|
|
96
|
-
browser.on("disconnected", async () => {
|
|
97
|
-
await cleanup("browser disconnected")
|
|
98
|
-
onStop({ reason: "browser disconnected" })
|
|
99
|
-
})
|
|
100
|
-
cleanupCallbackList.add(closePage)
|
|
101
|
-
cleanupCallbackList.add(closeBrowser)
|
|
102
|
-
} else {
|
|
103
|
-
const disconnectedCallback = async () => {
|
|
104
|
-
await cleanup("browser disconnected")
|
|
105
|
-
onError(new Error("browser disconnected during execution"))
|
|
106
|
-
}
|
|
107
|
-
browser.on("disconnected", disconnectedCallback)
|
|
108
|
-
page.on("close", () => {
|
|
109
|
-
onStop({ reason: "page closed" })
|
|
110
|
-
})
|
|
111
|
-
cleanupCallbackList.add(closePage)
|
|
112
|
-
const notifyPrevious = stopAfterAllSignal.notify
|
|
113
|
-
stopAfterAllSignal.notify = async () => {
|
|
114
|
-
await notifyPrevious()
|
|
115
|
-
browser.removeListener("disconnected", disconnectedCallback)
|
|
116
|
-
await closeBrowser()
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
const stopTrackingToNotify = trackPageToNotify(page, {
|
|
120
|
-
onError: (error) => {
|
|
121
|
-
error = transformErrorHook(error)
|
|
122
|
-
if (!ignoreErrorHook(error)) {
|
|
123
|
-
onError(error)
|
|
124
|
-
}
|
|
125
|
-
},
|
|
126
|
-
onConsole,
|
|
127
|
-
})
|
|
128
|
-
cleanupCallbackList.add(stopTrackingToNotify)
|
|
129
108
|
|
|
130
109
|
let resultTransformer = (result) => result
|
|
131
110
|
if (collectCoverage) {
|
|
@@ -169,30 +148,213 @@ export const createRuntimeFromPlaywright = ({
|
|
|
169
148
|
resultTransformer = composeTransformer(
|
|
170
149
|
resultTransformer,
|
|
171
150
|
async (result) => {
|
|
172
|
-
|
|
151
|
+
const scriptExecutionResults = result.namespace
|
|
152
|
+
if (scriptExecutionResults) {
|
|
153
|
+
result.coverage = generateCoverageForPage(scriptExecutionResults)
|
|
154
|
+
}
|
|
173
155
|
return result
|
|
174
156
|
},
|
|
175
157
|
)
|
|
176
158
|
}
|
|
177
159
|
} else {
|
|
178
160
|
resultTransformer = composeTransformer(resultTransformer, (result) => {
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
161
|
+
const scriptExecutionResults = result.namespace
|
|
162
|
+
if (scriptExecutionResults) {
|
|
163
|
+
Object.keys(scriptExecutionResults).forEach((fileRelativeUrl) => {
|
|
164
|
+
delete scriptExecutionResults[fileRelativeUrl].coverage
|
|
165
|
+
})
|
|
166
|
+
}
|
|
183
167
|
return result
|
|
184
168
|
})
|
|
185
169
|
}
|
|
170
|
+
|
|
171
|
+
if (collectPerformance) {
|
|
172
|
+
resultTransformer = composeTransformer(
|
|
173
|
+
resultTransformer,
|
|
174
|
+
async (result) => {
|
|
175
|
+
const performance = await page.evaluate(
|
|
176
|
+
/* eslint-disable no-undef */
|
|
177
|
+
/* istanbul ignore next */
|
|
178
|
+
() => {
|
|
179
|
+
const { performance } = window
|
|
180
|
+
if (!performance) {
|
|
181
|
+
return null
|
|
182
|
+
}
|
|
183
|
+
const measures = {}
|
|
184
|
+
const measurePerfEntries = performance.getEntriesByType("measure")
|
|
185
|
+
measurePerfEntries.forEach((measurePerfEntry) => {
|
|
186
|
+
measures[measurePerfEntry.name] = measurePerfEntry.duration
|
|
187
|
+
})
|
|
188
|
+
return {
|
|
189
|
+
timeOrigin: performance.timeOrigin,
|
|
190
|
+
timing: performance.timing.toJSON(),
|
|
191
|
+
navigation: performance.navigation.toJSON(),
|
|
192
|
+
measures,
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
/* eslint-enable no-undef */
|
|
196
|
+
)
|
|
197
|
+
result.performance = performance
|
|
198
|
+
return result
|
|
199
|
+
},
|
|
200
|
+
)
|
|
201
|
+
}
|
|
202
|
+
|
|
186
203
|
const fileClientUrl = new URL(fileRelativeUrl, `${server.origin}/`).href
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
204
|
+
|
|
205
|
+
// https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-console
|
|
206
|
+
const removeConsoleListener = registerEvent({
|
|
207
|
+
object: page,
|
|
208
|
+
eventType: "console",
|
|
209
|
+
// https://github.com/microsoft/playwright/blob/master/docs/api.md#event-console
|
|
210
|
+
callback: async (consoleMessage) => {
|
|
211
|
+
onConsole({
|
|
212
|
+
type: consoleMessage.type(),
|
|
213
|
+
text: `${extractTextFromConsoleMessage(consoleMessage)}
|
|
214
|
+
`,
|
|
215
|
+
})
|
|
216
|
+
},
|
|
217
|
+
})
|
|
218
|
+
cleanupCallbackList.add(removeConsoleListener)
|
|
219
|
+
const actionOperation = Abort.startOperation()
|
|
220
|
+
actionOperation.addAbortSignal(signal)
|
|
221
|
+
const winnerPromise = new Promise((resolve, reject) => {
|
|
222
|
+
raceCallbacks(
|
|
223
|
+
{
|
|
224
|
+
aborted: (cb) => {
|
|
225
|
+
return actionOperation.addAbortCallback(cb)
|
|
226
|
+
},
|
|
227
|
+
// https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-error
|
|
228
|
+
error: (cb) => {
|
|
229
|
+
return registerEvent({
|
|
230
|
+
object: page,
|
|
231
|
+
eventType: "error",
|
|
232
|
+
callback: (error) => {
|
|
233
|
+
if (ignoreErrorHook(error)) {
|
|
234
|
+
return
|
|
235
|
+
}
|
|
236
|
+
cb(transformErrorHook(error))
|
|
237
|
+
},
|
|
238
|
+
})
|
|
239
|
+
},
|
|
240
|
+
// https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-pageerror
|
|
241
|
+
pageerror: (cb) => {
|
|
242
|
+
return registerEvent({
|
|
243
|
+
object: page,
|
|
244
|
+
eventType: "pageerror",
|
|
245
|
+
callback: (error) => {
|
|
246
|
+
if (ignoreErrorHook(error)) {
|
|
247
|
+
return
|
|
248
|
+
}
|
|
249
|
+
cb(transformErrorHook(error))
|
|
250
|
+
},
|
|
251
|
+
})
|
|
252
|
+
},
|
|
253
|
+
closed: (cb) => {
|
|
254
|
+
// https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-disconnected
|
|
255
|
+
if (isBrowserDedicatedToExecution) {
|
|
256
|
+
browser.on("disconnected", async () => {
|
|
257
|
+
cb({ reason: "browser disconnected" })
|
|
258
|
+
})
|
|
259
|
+
cleanupCallbackList.add(closePage)
|
|
260
|
+
cleanupCallbackList.add(closeBrowser)
|
|
261
|
+
} else {
|
|
262
|
+
const disconnectedCallback = async () => {
|
|
263
|
+
throw new Error("browser disconnected during execution")
|
|
264
|
+
}
|
|
265
|
+
browser.on("disconnected", disconnectedCallback)
|
|
266
|
+
page.on("close", () => {
|
|
267
|
+
cb({ reason: "page closed" })
|
|
268
|
+
})
|
|
269
|
+
cleanupCallbackList.add(closePage)
|
|
270
|
+
cleanupCallbackList.add(() => {
|
|
271
|
+
browser.removeListener("disconnected", disconnectedCallback)
|
|
272
|
+
})
|
|
273
|
+
const notifyPrevious = stopAfterAllSignal.notify
|
|
274
|
+
stopAfterAllSignal.notify = async () => {
|
|
275
|
+
await notifyPrevious()
|
|
276
|
+
browser.removeListener("disconnected", disconnectedCallback)
|
|
277
|
+
await closeBrowser()
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
response: async (cb) => {
|
|
282
|
+
try {
|
|
283
|
+
await page.goto(fileClientUrl, { timeout: 0 })
|
|
284
|
+
const result = await page.evaluate(
|
|
285
|
+
/* eslint-disable no-undef */
|
|
286
|
+
/* istanbul ignore next */
|
|
287
|
+
() => {
|
|
288
|
+
if (!window.__html_supervisor__) {
|
|
289
|
+
throw new Error(`window.__html_supervisor__ not found`)
|
|
290
|
+
}
|
|
291
|
+
return window.__html_supervisor__.getScriptExecutionResults()
|
|
292
|
+
},
|
|
293
|
+
/* eslint-enable no-undef */
|
|
294
|
+
)
|
|
295
|
+
const { status, scriptExecutionResults } = result
|
|
296
|
+
if (status === "errored") {
|
|
297
|
+
const { exceptionSource } = result
|
|
298
|
+
const error = evalException(exceptionSource, {
|
|
299
|
+
rootDirectoryUrl,
|
|
300
|
+
server,
|
|
301
|
+
transformErrorHook,
|
|
302
|
+
})
|
|
303
|
+
cb({
|
|
304
|
+
status: "errored",
|
|
305
|
+
error,
|
|
306
|
+
namespace: scriptExecutionResults,
|
|
307
|
+
})
|
|
308
|
+
} else {
|
|
309
|
+
cb({
|
|
310
|
+
status: "completed",
|
|
311
|
+
namespace: scriptExecutionResults,
|
|
312
|
+
})
|
|
313
|
+
}
|
|
314
|
+
} catch (e) {
|
|
315
|
+
reject(e)
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
},
|
|
319
|
+
resolve,
|
|
320
|
+
)
|
|
193
321
|
})
|
|
194
|
-
|
|
195
|
-
|
|
322
|
+
|
|
323
|
+
const getResult = async () => {
|
|
324
|
+
const winner = await winnerPromise
|
|
325
|
+
if (winner.name === "aborted") {
|
|
326
|
+
return {
|
|
327
|
+
status: "aborted",
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
if (winner.name === "error" || winner.name === "pageerror") {
|
|
331
|
+
const error = winner.data
|
|
332
|
+
return {
|
|
333
|
+
status: "errored",
|
|
334
|
+
error,
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
if (winner.name === "closed") {
|
|
338
|
+
return {
|
|
339
|
+
status: "errored",
|
|
340
|
+
error: isBrowserDedicatedToExecution
|
|
341
|
+
? new Error(`browser disconnected during execution`)
|
|
342
|
+
: new Error(`page closed during execution`),
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return winner.data
|
|
346
|
+
}
|
|
347
|
+
let result
|
|
348
|
+
|
|
349
|
+
try {
|
|
350
|
+
result = await getResult()
|
|
351
|
+
result = await resultTransformer(result)
|
|
352
|
+
} catch (e) {
|
|
353
|
+
result = {
|
|
354
|
+
status: "errored",
|
|
355
|
+
error: e,
|
|
356
|
+
}
|
|
357
|
+
}
|
|
196
358
|
if (keepRunning) {
|
|
197
359
|
stopSignal.notify = cleanup
|
|
198
360
|
} else {
|
|
@@ -214,40 +376,6 @@ export const createRuntimeFromPlaywright = ({
|
|
|
214
376
|
return runtime
|
|
215
377
|
}
|
|
216
378
|
|
|
217
|
-
const getResult = async ({
|
|
218
|
-
page,
|
|
219
|
-
rootDirectoryUrl,
|
|
220
|
-
server,
|
|
221
|
-
transformErrorHook,
|
|
222
|
-
}) => {
|
|
223
|
-
const result = await page.evaluate(
|
|
224
|
-
/* eslint-disable no-undef */
|
|
225
|
-
/* istanbul ignore next */
|
|
226
|
-
() => {
|
|
227
|
-
return window.__html_supervisor__.getScriptExecutionResults()
|
|
228
|
-
},
|
|
229
|
-
/* eslint-enable no-undef */
|
|
230
|
-
)
|
|
231
|
-
const { status, scriptExecutionResults } = result
|
|
232
|
-
if (status === "errored") {
|
|
233
|
-
const { exceptionSource } = result
|
|
234
|
-
const error = evalException(exceptionSource, {
|
|
235
|
-
rootDirectoryUrl,
|
|
236
|
-
server,
|
|
237
|
-
transformErrorHook,
|
|
238
|
-
})
|
|
239
|
-
return {
|
|
240
|
-
status: "errored",
|
|
241
|
-
error,
|
|
242
|
-
namespace: scriptExecutionResults,
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
return {
|
|
246
|
-
status: "completed",
|
|
247
|
-
namespace: scriptExecutionResults,
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
251
379
|
const generateCoverageForPage = (scriptExecutionResults) => {
|
|
252
380
|
let istanbulCoverageComposed = null
|
|
253
381
|
Object.keys(scriptExecutionResults).forEach((fileRelativeUrl) => {
|
|
@@ -262,31 +390,6 @@ const generateCoverageForPage = (scriptExecutionResults) => {
|
|
|
262
390
|
return istanbulCoverageComposed
|
|
263
391
|
}
|
|
264
392
|
|
|
265
|
-
const stopBrowser = async (browser) => {
|
|
266
|
-
const disconnected = browser.isConnected()
|
|
267
|
-
? new Promise((resolve) => {
|
|
268
|
-
const disconnectedCallback = () => {
|
|
269
|
-
browser.removeListener("disconnected", disconnectedCallback)
|
|
270
|
-
resolve()
|
|
271
|
-
}
|
|
272
|
-
browser.on("disconnected", disconnectedCallback)
|
|
273
|
-
})
|
|
274
|
-
: Promise.resolve()
|
|
275
|
-
|
|
276
|
-
// for some reason without this 100ms timeout
|
|
277
|
-
// browser.close() never resolves (playwright does not like something)
|
|
278
|
-
await new Promise((resolve) => setTimeout(resolve, 100))
|
|
279
|
-
try {
|
|
280
|
-
await browser.close()
|
|
281
|
-
} catch (e) {
|
|
282
|
-
if (isTargetClosedError(e)) {
|
|
283
|
-
return
|
|
284
|
-
}
|
|
285
|
-
throw e
|
|
286
|
-
}
|
|
287
|
-
await disconnected
|
|
288
|
-
}
|
|
289
|
-
|
|
290
393
|
const launchBrowserUsingPlaywright = async ({
|
|
291
394
|
signal,
|
|
292
395
|
browserName,
|
|
@@ -366,39 +469,6 @@ const isTargetClosedError = (error) => {
|
|
|
366
469
|
return false
|
|
367
470
|
}
|
|
368
471
|
|
|
369
|
-
const trackPageToNotify = (page, { onError, onConsole }) => {
|
|
370
|
-
// https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-error
|
|
371
|
-
const removeErrorListener = registerEvent({
|
|
372
|
-
object: page,
|
|
373
|
-
eventType: "error",
|
|
374
|
-
callback: onError,
|
|
375
|
-
})
|
|
376
|
-
// https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-pageerror
|
|
377
|
-
const removePageErrorListener = registerEvent({
|
|
378
|
-
object: page,
|
|
379
|
-
eventType: "pageerror",
|
|
380
|
-
callback: onError,
|
|
381
|
-
})
|
|
382
|
-
// https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-console
|
|
383
|
-
const removeConsoleListener = registerEvent({
|
|
384
|
-
object: page,
|
|
385
|
-
eventType: "console",
|
|
386
|
-
// https://github.com/microsoft/playwright/blob/master/docs/api.md#event-console
|
|
387
|
-
callback: async (consoleMessage) => {
|
|
388
|
-
onConsole({
|
|
389
|
-
type: consoleMessage.type(),
|
|
390
|
-
text: `${extractTextFromConsoleMessage(consoleMessage)}
|
|
391
|
-
`,
|
|
392
|
-
})
|
|
393
|
-
},
|
|
394
|
-
})
|
|
395
|
-
return () => {
|
|
396
|
-
removeErrorListener()
|
|
397
|
-
removePageErrorListener()
|
|
398
|
-
removeConsoleListener()
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
|
|
402
472
|
const composeTransformer = (previousTransformer, transformer) => {
|
|
403
473
|
return async (value) => {
|
|
404
474
|
const transformedValue = await previousTransformer(value)
|
|
@@ -1,17 +1,33 @@
|
|
|
1
1
|
import v8 from "node:v8"
|
|
2
2
|
import { uneval } from "@jsenv/uneval"
|
|
3
|
+
import { startObservingPerformances } from "./node_execution_performance.js"
|
|
3
4
|
|
|
4
5
|
const ACTIONS_AVAILABLE = {
|
|
5
|
-
"execute-using-dynamic-import": async ({ fileUrl }) => {
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
"execute-using-dynamic-import": async ({ fileUrl, collectPerformance }) => {
|
|
7
|
+
const getNamespace = async () => {
|
|
8
|
+
const namespace = await import(fileUrl)
|
|
9
|
+
const namespaceResolved = {}
|
|
10
|
+
await Promise.all([
|
|
11
|
+
...Object.keys(namespace).map(async (key) => {
|
|
12
|
+
const value = await namespace[key]
|
|
13
|
+
namespaceResolved[key] = value
|
|
14
|
+
}),
|
|
15
|
+
])
|
|
16
|
+
return namespaceResolved
|
|
17
|
+
}
|
|
18
|
+
if (collectPerformance) {
|
|
19
|
+
const getPerformance = startObservingPerformances()
|
|
20
|
+
const namespace = await getNamespace()
|
|
21
|
+
const performance = await getPerformance()
|
|
22
|
+
return {
|
|
23
|
+
namespace,
|
|
24
|
+
performance,
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const namespace = await getNamespace()
|
|
28
|
+
return {
|
|
29
|
+
namespace,
|
|
30
|
+
}
|
|
15
31
|
},
|
|
16
32
|
"execute-using-require": async ({ fileUrl }) => {
|
|
17
33
|
const { createRequire } = await import("module")
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
const require = createRequire(import.meta.url)
|
|
1
|
+
import { requireFromJsenv } from "@jsenv/core/src/require_from_jsenv.js"
|
|
4
2
|
|
|
5
3
|
// see also https://github.com/sindresorhus/execa/issues/96
|
|
6
4
|
export const killProcessTree = async (
|
|
7
5
|
processId,
|
|
8
6
|
{ signal, timeout = 2000 },
|
|
9
7
|
) => {
|
|
10
|
-
const pidtree =
|
|
8
|
+
const pidtree = requireFromJsenv("pidtree")
|
|
11
9
|
|
|
12
10
|
let descendantProcessIds
|
|
13
11
|
try {
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { PerformanceObserver, performance } from "node:perf_hooks"
|
|
2
|
+
|
|
3
|
+
export const startObservingPerformances = () => {
|
|
4
|
+
const measureEntries = []
|
|
5
|
+
// https://nodejs.org/dist/latest-v16.x/docs/api/perf_hooks.html
|
|
6
|
+
const perfObserver = new PerformanceObserver(
|
|
7
|
+
(
|
|
8
|
+
// https://nodejs.org/dist/latest-v16.x/docs/api/perf_hooks.html#perf_hooks_class_performanceobserverentrylist
|
|
9
|
+
list,
|
|
10
|
+
) => {
|
|
11
|
+
const perfMeasureEntries = list.getEntriesByType("measure")
|
|
12
|
+
measureEntries.push(...perfMeasureEntries)
|
|
13
|
+
},
|
|
14
|
+
)
|
|
15
|
+
perfObserver.observe({
|
|
16
|
+
entryTypes: ["measure"],
|
|
17
|
+
})
|
|
18
|
+
return async () => {
|
|
19
|
+
// wait for node to call the performance observer
|
|
20
|
+
await new Promise((resolve) => {
|
|
21
|
+
setTimeout(resolve)
|
|
22
|
+
})
|
|
23
|
+
performance.clearMarks()
|
|
24
|
+
perfObserver.disconnect()
|
|
25
|
+
return {
|
|
26
|
+
...readNodePerformance(),
|
|
27
|
+
measures: measuresFromMeasureEntries(measureEntries),
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const readNodePerformance = () => {
|
|
33
|
+
const nodePerformance = {
|
|
34
|
+
nodeTiming: asPlainObject(performance.nodeTiming),
|
|
35
|
+
timeOrigin: performance.timeOrigin,
|
|
36
|
+
eventLoopUtilization: performance.eventLoopUtilization(),
|
|
37
|
+
}
|
|
38
|
+
return nodePerformance
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// remove getters that cannot be stringified
|
|
42
|
+
const asPlainObject = (objectWithGetters) => {
|
|
43
|
+
const objectWithoutGetters = {}
|
|
44
|
+
Object.keys(objectWithGetters).forEach((key) => {
|
|
45
|
+
objectWithoutGetters[key] = objectWithGetters[key]
|
|
46
|
+
})
|
|
47
|
+
return objectWithoutGetters
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const measuresFromMeasureEntries = (measureEntries) => {
|
|
51
|
+
const measures = {}
|
|
52
|
+
// Sort to ensure measures order is predictable
|
|
53
|
+
// It seems to be already predictable on Node 16+ but
|
|
54
|
+
// it's not the case on Node 14.
|
|
55
|
+
measureEntries.sort((a, b) => {
|
|
56
|
+
return a.startTime - b.startTime
|
|
57
|
+
})
|
|
58
|
+
measureEntries.forEach(
|
|
59
|
+
(
|
|
60
|
+
// https://nodejs.org/dist/latest-v16.x/docs/api/perf_hooks.html#perf_hooks_class_performanceentry
|
|
61
|
+
perfMeasureEntry,
|
|
62
|
+
) => {
|
|
63
|
+
measures[perfMeasureEntry.name] = perfMeasureEntry.duration
|
|
64
|
+
},
|
|
65
|
+
)
|
|
66
|
+
return measures
|
|
67
|
+
}
|