@jsenv/core 28.0.0 → 28.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/controllable_child_process.mjs +1 -2
  2. package/dist/controllable_worker_thread.mjs +1 -2
  3. package/dist/js/autoreload.js +27 -11
  4. package/dist/js/execute_using_dynamic_import.js +804 -1
  5. package/dist/js/script_type_module_supervisor.js +129 -0
  6. package/dist/js/supervisor.js +921 -0
  7. package/dist/js/{wrapper.mjs → ws.js} +0 -0
  8. package/dist/main.js +555 -616
  9. package/package.json +13 -13
  10. package/readme.md +2 -2
  11. package/src/build/build.js +8 -8
  12. package/src/build/inject_global_version_mappings.js +3 -3
  13. package/src/build/{resync_ressource_hints.js → resync_resource_hints.js} +10 -12
  14. package/src/build/start_build_server.js +4 -7
  15. package/src/dev/start_dev_server.js +2 -2
  16. package/src/execute/execute.js +1 -1
  17. package/src/execute/run.js +26 -38
  18. package/src/execute/runtimes/browsers/from_playwright.js +51 -77
  19. package/src/execute/runtimes/node/node_child_process.js +36 -36
  20. package/src/execute/runtimes/node/node_worker_thread.js +36 -36
  21. package/src/omega/kitchen.js +33 -14
  22. package/src/omega/omega_server.js +2 -2
  23. package/src/omega/server/file_service.js +5 -5
  24. package/src/omega/url_graph/url_graph_load.js +4 -4
  25. package/src/omega/url_graph/url_info_transformations.js +8 -1
  26. package/src/omega/url_graph.js +3 -3
  27. package/src/plugins/autoreload/client/reload.js +22 -9
  28. package/src/plugins/autoreload/jsenv_plugin_autoreload_client.js +5 -5
  29. package/src/plugins/autoreload/jsenv_plugin_autoreload_server.js +3 -3
  30. package/src/plugins/autoreload/jsenv_plugin_hmr.js +1 -1
  31. package/src/plugins/explorer/jsenv_plugin_explorer.js +1 -1
  32. package/src/plugins/import_meta_hot/html_hot_dependencies.js +6 -6
  33. package/src/plugins/importmap/jsenv_plugin_importmap.js +5 -3
  34. package/src/plugins/inject_globals/inject_globals.js +3 -3
  35. package/src/plugins/inline/jsenv_plugin_data_urls.js +1 -1
  36. package/src/plugins/inline/jsenv_plugin_html_inline_content.js +10 -5
  37. package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +2 -13
  38. package/src/plugins/plugin_controller.js +2 -2
  39. package/src/plugins/plugins.js +5 -5
  40. package/src/plugins/server_events/jsenv_plugin_server_events_client_injection.js +4 -4
  41. package/src/plugins/supervisor/client/script_type_module_supervisor.js +108 -0
  42. package/src/plugins/supervisor/client/supervisor.js +921 -0
  43. package/src/plugins/{html_supervisor/jsenv_plugin_html_supervisor.js → supervisor/jsenv_plugin_supervisor.js} +131 -105
  44. package/src/plugins/toolbar/client/execution/toolbar_execution.js +1 -1
  45. package/src/plugins/toolbar/jsenv_plugin_toolbar.js +5 -5
  46. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +9 -7
  47. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +8 -7
  48. package/src/plugins/transpilation/babel/jsenv_plugin_babel.js +13 -7
  49. package/src/plugins/transpilation/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +6 -4
  50. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +4 -2
  51. package/src/plugins/url_analysis/html/html_urls.js +13 -12
  52. package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +1 -1
  53. package/src/test/coverage/babel_plugin_instrument.js +1 -35
  54. package/src/test/coverage/empty_coverage_factory.js +1 -1
  55. package/src/test/execute_plan.js +7 -3
  56. package/src/test/execute_test_plan.js +2 -1
  57. package/src/test/logs_file_execution.js +49 -8
  58. package/dist/js/html_supervisor_installer.js +0 -1091
  59. package/dist/js/html_supervisor_setup.js +0 -89
  60. package/dist/js/uneval.js +0 -804
  61. package/src/plugins/html_supervisor/client/error_formatter.js +0 -426
  62. package/src/plugins/html_supervisor/client/error_in_notification.js +0 -21
  63. package/src/plugins/html_supervisor/client/error_overlay.js +0 -191
  64. package/src/plugins/html_supervisor/client/html_supervisor_installer.js +0 -315
  65. package/src/plugins/html_supervisor/client/html_supervisor_setup.js +0 -89
  66. package/src/plugins/html_supervisor/client/perf_browser.js +0 -17
  67. package/src/plugins/html_supervisor/client/uneval_exception.js +0 -8
@@ -0,0 +1,129 @@
1
+ let previousExecutionPromise; // https://twitter.com/damienmaillard/status/1554752482273787906
2
+
3
+ const isWebkitOrSafari = typeof window.webkitConvertPointFromNodeToPage === "function";
4
+ const superviseScriptTypeModule = async ({
5
+ src,
6
+ async
7
+ }) => {
8
+ const execute = isWebkitOrSafari ? createExecuteWithDynamicImport({
9
+ src
10
+ }) : createExecuteWithScript({
11
+ src
12
+ });
13
+
14
+ const startExecution = () => {
15
+ const execution = window.__supervisor__.createExecution({
16
+ src,
17
+ type: "js_module",
18
+ execute
19
+ });
20
+
21
+ return execution.start();
22
+ };
23
+
24
+ if (async) {
25
+ startExecution();
26
+ return;
27
+ } // there is guaranteed execution order for non async script type="module"
28
+ // see https://gist.github.com/jakub-g/385ee6b41085303a53ad92c7c8afd7a6#typemodule-vs-non-module-typetextjavascript-vs-script-nomodule
29
+
30
+
31
+ if (previousExecutionPromise) {
32
+ await previousExecutionPromise;
33
+ previousExecutionPromise = null;
34
+ }
35
+
36
+ previousExecutionPromise = startExecution();
37
+ };
38
+
39
+ const createExecuteWithScript = ({
40
+ src
41
+ }) => {
42
+ const currentScript = document.querySelector(`script[type="module"][inlined-from-src="${src}"]`);
43
+ const parentNode = currentScript.parentNode;
44
+ let nodeToReplace;
45
+ let currentScriptClone;
46
+ return async ({
47
+ isReload
48
+ }) => {
49
+ const urlObject = new URL(src, window.location);
50
+ const loadPromise = new Promise((resolve, reject) => {
51
+ currentScriptClone = document.createElement("script");
52
+ Array.from(currentScript.attributes).forEach(attribute => {
53
+ currentScriptClone.setAttribute(attribute.nodeName, attribute.nodeValue);
54
+ });
55
+
56
+ if (isReload) {
57
+ urlObject.searchParams.set("hmr", Date.now());
58
+ nodeToReplace = currentScriptClone;
59
+ currentScriptClone.src = urlObject.href;
60
+ } else {
61
+ currentScriptClone.removeAttribute("jsenv-plugin-owner");
62
+ currentScriptClone.removeAttribute("jsenv-plugin-action");
63
+ currentScriptClone.removeAttribute("inlined-from-src");
64
+ currentScriptClone.removeAttribute("original-position");
65
+ currentScriptClone.removeAttribute("original-src-position");
66
+ nodeToReplace = currentScript;
67
+ currentScriptClone.src = src;
68
+ }
69
+
70
+ currentScriptClone.addEventListener("error", reject);
71
+ currentScriptClone.addEventListener("load", resolve);
72
+ parentNode.replaceChild(currentScriptClone, nodeToReplace);
73
+ });
74
+
75
+ try {
76
+ await loadPromise;
77
+ } catch (e) {
78
+ // eslint-disable-next-line no-throw-literal
79
+ throw {
80
+ message: `Failed to fetch module: ${urlObject.href}`,
81
+ reportedBy: "script_error_event",
82
+ url: urlObject.href,
83
+ // window.error won't be dispatched for this error
84
+ needsReport: true
85
+ };
86
+ } // do not resolve right away, wait for top level execution
87
+
88
+
89
+ try {
90
+ const namespace = await import(urlObject.href);
91
+ return namespace;
92
+ } catch (e) {
93
+ e.reportedBy = "dynamic_import";
94
+ throw e;
95
+ }
96
+ };
97
+ };
98
+
99
+ const createExecuteWithDynamicImport = ({
100
+ src
101
+ }) => {
102
+ return async ({
103
+ isReload
104
+ }) => {
105
+ const urlObject = new URL(src, window.location);
106
+
107
+ if (isReload) {
108
+ urlObject.searchParams.set("hmr", Date.now());
109
+ }
110
+
111
+ try {
112
+ const namespace = await import(urlObject.href);
113
+ return namespace;
114
+ } catch (e) {
115
+ e.reportedBy = "dynamic_import"; // dynamic import would hide the error to the browser
116
+ // so it must be re-reported using window.reportError
117
+
118
+ if (typeof window.reportError === "function") {
119
+ window.reportError(e);
120
+ } else {
121
+ console.error(e);
122
+ }
123
+
124
+ throw e;
125
+ }
126
+ };
127
+ };
128
+
129
+ export { superviseScriptTypeModule };