@jsenv/cli 0.1.25 → 0.1.27

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 (205) hide show
  1. package/package.json +1 -1
  2. package/template-node-package/.jsenv/jsenv_tests_output.txt +1 -1
  3. package/template-node-package/eslint.config.mjs +5 -0
  4. package/template-node-package/package.json +4 -6
  5. package/template-web/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js +1 -1
  6. package/template-web/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js.map +3 -3
  7. package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js +377 -0
  8. package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js.map +11 -0
  9. package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/import_meta_hot.js +83 -0
  10. package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/ribbon.js +95 -0
  11. package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/server_events_client.js +458 -0
  12. package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/independent/assert/dist/jsenv_assert_browser.js +6193 -0
  13. package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/ast/src/html/html_src_set.js +18 -0
  14. package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/plugin-supervisor/dist/js/supervisor.js +1251 -0
  15. package/template-web/.jsenv/chrome@128.00/app/animals.js +11 -0
  16. package/template-web/.jsenv/chrome@128.00/app/counter.js +11 -0
  17. package/template-web/.jsenv/chrome@128.00/index.html +69 -0
  18. package/template-web/.jsenv/chrome@128.00/index.html@L7C5-L20C13.css +12 -0
  19. package/template-web/.jsenv/chrome@128.00/index.html@L9C7-L13C16.js +5 -0
  20. package/template-web/.jsenv/chrome@128.00/jsenv_logo.svg +140 -0
  21. package/template-web/.jsenv/chrome@128.00/main.css +4 -0
  22. package/template-web/.jsenv/chrome@128.00/main.js +35 -0
  23. package/template-web/.jsenv/chrome@128.00/main.js.map +11 -0
  24. package/template-web/.jsenv/chrome@128.00/tests/animals.test.html +52 -0
  25. package/template-web/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js +19 -0
  26. package/template-web/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js.map +11 -0
  27. package/template-web/.jsenv/chrome@128.00/tests/animals.test.html@L9C7-L13C16.js +5 -0
  28. package/template-web/.jsenv/jsenv_tests_output.txt +3 -3
  29. package/template-web/eslint.config.mjs +6 -0
  30. package/template-web/package.json +5 -8
  31. package/template-web/src/tests/animals.test.html +1 -1
  32. package/template-web-components/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js +1 -1
  33. package/template-web-components/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js.map +3 -3
  34. package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js +377 -0
  35. package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js.map +11 -0
  36. package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/import_meta_hot.js +83 -0
  37. package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/ribbon.js +95 -0
  38. package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/server_events_client.js +458 -0
  39. package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/independent/assert/dist/jsenv_assert_browser.js +6193 -0
  40. package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/independent/custom-elements-redefine/src/main.js +209 -0
  41. package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/ast/src/html/html_src_set.js +18 -0
  42. package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/plugin-supervisor/dist/js/supervisor.js +1251 -0
  43. package/template-web-components/.jsenv/chrome@128.00/app/animals.js +11 -0
  44. package/template-web-components/.jsenv/chrome@128.00/app/app_custom_element.css +4 -0
  45. package/template-web-components/.jsenv/chrome@128.00/app/app_custom_element.js +33 -0
  46. package/template-web-components/.jsenv/chrome@128.00/app/app_custom_element.js.map +11 -0
  47. package/template-web-components/.jsenv/chrome@128.00/app/counter.js +11 -0
  48. package/template-web-components/.jsenv/chrome@128.00/app/custom_elements_redefine.js +9 -0
  49. package/template-web-components/.jsenv/chrome@128.00/app/custom_elements_redefine.js.map +11 -0
  50. package/template-web-components/.jsenv/chrome@128.00/index.html +69 -0
  51. package/template-web-components/.jsenv/chrome@128.00/index.html@L7C5-L20C13.css +12 -0
  52. package/template-web-components/.jsenv/chrome@128.00/index.html@L9C7-L13C16.js +5 -0
  53. package/template-web-components/.jsenv/chrome@128.00/jsenv_logo.svg +140 -0
  54. package/template-web-components/.jsenv/chrome@128.00/main.js +15 -0
  55. package/template-web-components/.jsenv/chrome@128.00/main.js.map +11 -0
  56. package/template-web-components/.jsenv/chrome@128.00/tests/animals.test.html +52 -0
  57. package/template-web-components/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js +19 -0
  58. package/template-web-components/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js.map +11 -0
  59. package/template-web-components/.jsenv/chrome@128.00/tests/animals.test.html@L9C7-L13C16.js +5 -0
  60. package/template-web-components/.jsenv/jsenv_tests_output.txt +2 -2
  61. package/template-web-components/eslint.config.mjs +6 -0
  62. package/template-web-components/package.json +5 -8
  63. package/template-web-components/src/tests/animals.test.html +1 -1
  64. package/template-web-preact/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js +1 -1
  65. package/template-web-preact/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js.map +3 -3
  66. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js +377 -0
  67. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js.map +11 -0
  68. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/import_meta_hot.js +83 -0
  69. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/ribbon.js +95 -0
  70. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/server_events_client.js +458 -0
  71. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/computeKey.js +38 -0
  72. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/computeKey.js.map +11 -0
  73. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/constants.js +13 -0
  74. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/index.js +210 -0
  75. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/index.js.map +11 -0
  76. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/catchError.js +17 -0
  77. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/catchError.js.map +11 -0
  78. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/debounceRendering.js +21 -0
  79. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/debounceRendering.js.map +11 -0
  80. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/signaturesForType.js +2 -0
  81. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/unmount.js +20 -0
  82. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/unmount.js.map +11 -0
  83. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/vnode.js +62 -0
  84. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/vnode.js.map +11 -0
  85. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/vnodesForComponent.js +3 -0
  86. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/utils/src/index.js +43 -0
  87. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/debug/dist/debug.module.js +2 -0
  88. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/debug/dist/debug.module.js.map +175 -0
  89. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/devtools/dist/devtools.module.js +2 -0
  90. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/devtools/dist/devtools.module.js.map +29 -0
  91. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/dist/preact.module.js +2 -0
  92. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/dist/preact.module.js.map +266 -0
  93. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/hooks/dist/hooks.module.js +195 -0
  94. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/hooks/dist/hooks.module.js.map +168 -0
  95. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js +2 -0
  96. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js.map +77 -0
  97. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/independent/assert/dist/jsenv_assert_browser.js +6193 -0
  98. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/ast/src/html/html_src_set.js +18 -0
  99. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/plugin-supervisor/dist/js/supervisor.js +1251 -0
  100. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/related/plugin-preact/src/client/preact_refresh.js +36 -0
  101. package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/related/plugin-preact/src/client/preact_refresh.js.map +11 -0
  102. package/template-web-preact/.jsenv/chrome@128.00/app/animals.js +11 -0
  103. package/template-web-preact/.jsenv/chrome@128.00/app/app.css +43 -0
  104. package/template-web-preact/.jsenv/chrome@128.00/app/app.jsx +97 -0
  105. package/template-web-preact/.jsenv/chrome@128.00/app/app.jsx.map +44 -0
  106. package/template-web-preact/.jsenv/chrome@128.00/app/counter.jsx +47 -0
  107. package/template-web-preact/.jsenv/chrome@128.00/app/counter.jsx.map +33 -0
  108. package/template-web-preact/.jsenv/chrome@128.00/index.html +68 -0
  109. package/template-web-preact/.jsenv/chrome@128.00/index.html@L11C7-L15C16.js +5 -0
  110. package/template-web-preact/.jsenv/chrome@128.00/index.html@L7C5-L21C13.css +10 -0
  111. package/template-web-preact/.jsenv/chrome@128.00/main.jsx +9 -0
  112. package/template-web-preact/.jsenv/chrome@128.00/main.jsx.map +24 -0
  113. package/template-web-preact/.jsenv/chrome@128.00/preact_logo.svg +6 -0
  114. package/template-web-preact/.jsenv/chrome@128.00/tests/animals.test.html +53 -0
  115. package/template-web-preact/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js +19 -0
  116. package/template-web-preact/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js.map +11 -0
  117. package/template-web-preact/.jsenv/chrome@128.00/tests/animals.test.html@L9C7-L13C16.js +5 -0
  118. package/template-web-preact/.jsenv/craft/app/app.jsx +4 -1
  119. package/template-web-preact/.jsenv/jsenv_tests_output.txt +2 -2
  120. package/template-web-preact/eslint.config.mjs +7 -0
  121. package/template-web-preact/package.json +5 -9
  122. package/template-web-preact/src/app/app.jsx +1 -1
  123. package/template-web-preact/src/main.jsx +0 -1
  124. package/template-web-preact/src/tests/animals.test.html +1 -1
  125. package/template-web-react/.jsenv/chrome@127.00/app/app.jsx +1 -1
  126. package/template-web-react/.jsenv/chrome@127.00/app/counter.jsx +1 -1
  127. package/template-web-react/.jsenv/chrome@127.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/index.development.js__compile_info__.json +2 -2
  128. package/template-web-react/.jsenv/chrome@127.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/jsx-dev-runtime.development.js__compile_info__.json +2 -2
  129. package/template-web-react/.jsenv/chrome@127.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/client.development.js__compile_info__.json +2 -2
  130. package/template-web-react/.jsenv/chrome@127.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-refresh/runtime.development.js__compile_info__.json +2 -2
  131. package/template-web-react/.jsenv/chrome@127.00/cjs_to_esm/__compile_context__.json +1 -1
  132. package/template-web-react/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js +1 -1
  133. package/template-web-react/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js.map +3 -3
  134. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js +377 -0
  135. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js.map +11 -0
  136. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/import_meta_hot.js +83 -0
  137. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/ribbon.js +95 -0
  138. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/server_events_client.js +458 -0
  139. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/index.js +7 -0
  140. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/jsx-dev-runtime.js +7 -0
  141. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/react/jsx-dev-runtime.jsx +4085 -0
  142. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/react/jsx-dev-runtime.jsx.map +22 -0
  143. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/react.jsx +2796 -0
  144. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/react.jsx.map +17 -0
  145. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/client.js +25 -0
  146. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/react-dom/client.jsx +30568 -0
  147. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/react-dom/client.jsx.map +24 -0
  148. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-refresh/runtime.js +685 -0
  149. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-refresh/runtime.js.map +17 -0
  150. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/independent/assert/dist/jsenv_assert_browser.js +6193 -0
  151. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/ast/src/html/html_src_set.js +18 -0
  152. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/plugin-supervisor/dist/js/supervisor.js +1251 -0
  153. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/related/plugin-react/src/client/react_refresh.js +33 -0
  154. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/related/plugin-react/src/client/react_refresh.js.map +11 -0
  155. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/related/plugin-react/src/client/react_refresh_preamble.js +22 -0
  156. package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/related/plugin-react/src/client/react_refresh_preamble.js.map +11 -0
  157. package/template-web-react/.jsenv/chrome@128.00/app/animals.js +11 -0
  158. package/template-web-react/.jsenv/chrome@128.00/app/app.css +43 -0
  159. package/template-web-react/.jsenv/chrome@128.00/app/app.jsx +98 -0
  160. package/template-web-react/.jsenv/chrome@128.00/app/app.jsx.map +49 -0
  161. package/template-web-react/.jsenv/chrome@128.00/app/counter.jsx +45 -0
  162. package/template-web-react/.jsenv/chrome@128.00/app/counter.jsx.map +32 -0
  163. package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/index.development.js +2796 -0
  164. package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/index.development.js__compile_info__.json +18 -0
  165. package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/index.development.map +1 -0
  166. package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/jsx-dev-runtime.development.js +4085 -0
  167. package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/jsx-dev-runtime.development.js__compile_info__.json +26 -0
  168. package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/jsx-dev-runtime.development.map +1 -0
  169. package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/client.development.js +30568 -0
  170. package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/client.development.js__compile_info__.json +30 -0
  171. package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/client.development.map +1 -0
  172. package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-refresh/runtime.development.js +685 -0
  173. package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-refresh/runtime.development.js__compile_info__.json +18 -0
  174. package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-refresh/runtime.development.map +1 -0
  175. package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/__compile_context__.json +3 -0
  176. package/template-web-react/.jsenv/chrome@128.00/index.html +68 -0
  177. package/template-web-react/.jsenv/chrome@128.00/index.html@L11C7-L15C16.js +5 -0
  178. package/template-web-react/.jsenv/chrome@128.00/index.html@L7C5-L21C13.css +10 -0
  179. package/template-web-react/.jsenv/chrome@128.00/main.jsx +21 -0
  180. package/template-web-react/.jsenv/chrome@128.00/main.jsx.map +33 -0
  181. package/template-web-react/.jsenv/chrome@128.00/react_logo.svg +7 -0
  182. package/template-web-react/.jsenv/chrome@128.00/tests/animals.test.html +53 -0
  183. package/template-web-react/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js +19 -0
  184. package/template-web-react/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js.map +11 -0
  185. package/template-web-react/.jsenv/chrome@128.00/tests/animals.test.html@L9C7-L13C16.js +5 -0
  186. package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/index.production.js__compile_info__.json +2 -2
  187. package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/jsx-runtime.production.js__compile_info__.json +2 -2
  188. package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/client.production.js__compile_info__.json +2 -2
  189. package/template-web-react/.jsenv/craft/cjs_to_esm/__compile_context__.json +1 -1
  190. package/template-web-react/.jsenv/jsenv_tests_output.txt +3 -3
  191. package/template-web-react/eslint.config.mjs +7 -0
  192. package/template-web-react/package.json +6 -10
  193. package/template-web-react/src/app/app.jsx +0 -1
  194. package/template-web-react/src/main.jsx +0 -1
  195. package/template-web-react/src/tests/animals.test.html +1 -1
  196. package/template-node-package/.eslintignore +0 -2
  197. package/template-node-package/.eslintrc.cjs +0 -102
  198. package/template-web/.eslintignore +0 -3
  199. package/template-web/.eslintrc.cjs +0 -138
  200. package/template-web-components/.eslintignore +0 -3
  201. package/template-web-components/.eslintrc.cjs +0 -138
  202. package/template-web-preact/.eslintignore +0 -3
  203. package/template-web-preact/.eslintrc.cjs +0 -175
  204. package/template-web-react/.eslintignore +0 -3
  205. package/template-web-react/.eslintrc.cjs +0 -175
@@ -0,0 +1,1251 @@
1
+ window.__supervisor__ = (() => {
2
+ const notImplemented = () => {
3
+ throw new Error("window.__supervisor__.setup() not called");
4
+ };
5
+ const supervisor = {
6
+ reportException: notImplemented,
7
+ superviseScript: notImplemented,
8
+ superviseScriptTypeModule: notImplemented,
9
+ reloadSupervisedScript: notImplemented,
10
+ getDocumentExecutionResult: notImplemented
11
+ };
12
+ const isWebkitOrSafari = typeof window.webkitConvertPointFromNodeToPage === "function";
13
+ const executionResults = {};
14
+ let documentTimingsOrigin;
15
+ try {
16
+ documentTimingsOrigin = window.performance.timing.navigationStart;
17
+ } catch (_unused) {
18
+ documentTimingsOrigin = Date.now();
19
+ }
20
+ const documentTimings = {
21
+ origin: documentTimingsOrigin,
22
+ start: Date.now() - documentTimingsOrigin,
23
+ end: null
24
+ };
25
+ supervisor.setup = ({
26
+ rootDirectoryUrl,
27
+ scriptInfos,
28
+ serverIsJsenvDevServer,
29
+ logs,
30
+ errorOverlay,
31
+ errorBaseUrl,
32
+ openInEditor
33
+ }) => {
34
+ const executions = {};
35
+ const promises = [];
36
+ let remainingScriptCount = scriptInfos.length;
37
+
38
+ // respect execution order
39
+ // - wait for classic scripts to be done (non async)
40
+ // - wait module script previous execution (non async)
41
+ // see https://gist.github.com/jakub-g/385ee6b41085303a53ad92c7c8afd7a6#typemodule-vs-non-module-typetextjavascript-vs-script-nomodule
42
+ const executionQueue = [];
43
+ let executing = false;
44
+ const addToExecutionQueue = async execution => {
45
+ if (execution.async) {
46
+ execution.execute();
47
+ return;
48
+ }
49
+ if (executing) {
50
+ executionQueue.push(execution);
51
+ return;
52
+ }
53
+ execThenDequeue(execution);
54
+ };
55
+ const execThenDequeue = async execution => {
56
+ executing = true;
57
+ // start next js module execution as soon as current js module starts to execute
58
+ // (do not wait in case of top level await)
59
+ let resolveExecutingPromise;
60
+ const executingPromise = new Promise(resolve => {
61
+ resolveExecutingPromise = resolve;
62
+ });
63
+ const promise = execution.execute({
64
+ onExecuting: () => resolveExecutingPromise()
65
+ });
66
+ await Promise.race([promise, executingPromise]);
67
+ executing = false;
68
+ if (executionQueue.length) {
69
+ const nextExecution = executionQueue.shift();
70
+ execThenDequeue(nextExecution);
71
+ }
72
+ };
73
+ const asExecutionId = src => {
74
+ const url = new URL(src, window.location).href;
75
+ if (url.startsWith(window.location.origin)) {
76
+ return src;
77
+ }
78
+ return url;
79
+ };
80
+ const createExecutionController = (src, type) => {
81
+ const result = {
82
+ status: "pending",
83
+ coverage: null,
84
+ exception: null,
85
+ value: null,
86
+ timings: {
87
+ start: null,
88
+ end: null
89
+ }
90
+ };
91
+ let resolve;
92
+ const promise = new Promise(_resolve => {
93
+ resolve = _resolve;
94
+ });
95
+ promises.push(promise);
96
+ executionResults[src] = result;
97
+ const start = () => {
98
+ result.timings.start = Date.now() - documentTimingsOrigin;
99
+ result.coverage = null;
100
+ result.status = "started";
101
+ result.exception = null;
102
+ if (logs) {
103
+ console.group("[jsenv] ".concat(src, " execution started (").concat(type, ")"));
104
+ }
105
+ };
106
+ const end = () => {
107
+ remainingScriptCount--;
108
+ result.timings.end = Date.now() - documentTimingsOrigin;
109
+ result.coverage = window.__coverage__;
110
+ if (logs) {
111
+ console.log("execution ".concat(result.status));
112
+ console.groupEnd();
113
+ }
114
+ if (remainingScriptCount === 0) {
115
+ documentTimings.end = Date.now() - documentTimingsOrigin;
116
+ }
117
+ resolve();
118
+ };
119
+ const complete = () => {
120
+ result.status = "completed";
121
+ end();
122
+ };
123
+ const fail = (error, info) => {
124
+ result.status = "failed";
125
+ const exception = supervisor.createException(error, info);
126
+ result.exception = exception;
127
+ end();
128
+ };
129
+ return {
130
+ result,
131
+ start,
132
+ complete,
133
+ fail
134
+ };
135
+ };
136
+ const prepareJsClassicRemoteExecution = src => {
137
+ const urlObject = new URL(src, window.location);
138
+ const url = urlObject.href;
139
+ const {
140
+ result,
141
+ start,
142
+ complete,
143
+ fail
144
+ } = createExecutionController(src, "js_classic");
145
+ let parentNode;
146
+ let currentScript;
147
+ let nodeToReplace;
148
+ let currentScriptClone;
149
+ const init = () => {
150
+ currentScript = document.currentScript;
151
+ parentNode = currentScript.parentNode;
152
+ executions[src].async = currentScript.async;
153
+ };
154
+ const execute = async ({
155
+ isReload
156
+ } = {}) => {
157
+ start();
158
+ currentScriptClone = prepareScriptToLoad(currentScript);
159
+ if (isReload) {
160
+ urlObject.searchParams.set("hot", Date.now());
161
+ nodeToReplace = currentScriptClone;
162
+ currentScriptClone.src = urlObject.href;
163
+ } else {
164
+ nodeToReplace = currentScript;
165
+ currentScriptClone.src = url;
166
+ }
167
+ const scriptLoadPromise = getScriptLoadPromise(currentScriptClone);
168
+ parentNode.replaceChild(currentScriptClone, nodeToReplace);
169
+ const {
170
+ detectedBy,
171
+ failed,
172
+ errorEvent
173
+ } = await scriptLoadPromise;
174
+ if (failed) {
175
+ const messageDefault = "Error while loading script";
176
+ const {
177
+ error,
178
+ message,
179
+ filename,
180
+ lineno,
181
+ colno
182
+ } = errorEvent;
183
+ if (detectedBy === "script_error_event") {
184
+ // window.error won't be dispatched for this error
185
+ reportErrorBackToBrowser(error || errorEvent);
186
+ }
187
+ fail(error || message || messageDefault, {
188
+ message: messageDefault,
189
+ reportedBy: "script_error_event",
190
+ url: filename || urlObject.href,
191
+ line: lineno,
192
+ column: colno
193
+ });
194
+ if (detectedBy === "script_error_event") {
195
+ supervisor.reportException(result.exception);
196
+ }
197
+ } else {
198
+ complete();
199
+ }
200
+ return result;
201
+ };
202
+ executions[src] = {
203
+ init,
204
+ execute
205
+ };
206
+ };
207
+ const prepareJsClassicInlineExecution = src => {
208
+ const {
209
+ start,
210
+ complete,
211
+ fail
212
+ } = createExecutionController(src, "js_classic");
213
+ const end = complete;
214
+ const error = e => {
215
+ reportErrorBackToBrowser(e); // supervision shallowed the error, report back to browser
216
+ fail(e);
217
+ };
218
+ executions[src] = {
219
+ isInline: true,
220
+ start,
221
+ end,
222
+ error
223
+ };
224
+ };
225
+
226
+ // https://twitter.com/damienmaillard/status/1554752482273787906
227
+ const prepareJsModuleExecutionWithDynamicImport = src => {
228
+ const urlObject = new URL(src, window.location);
229
+ const {
230
+ result,
231
+ start,
232
+ complete,
233
+ fail
234
+ } = createExecutionController(src, "js_classic");
235
+ let importFn;
236
+ let currentScript;
237
+ const init = _importFn => {
238
+ importFn = _importFn;
239
+ currentScript = document.querySelector("script[type=\"module\"][inlined-from-src=\"".concat(src, "\"]"));
240
+ executions[src].async = currentScript.async;
241
+ };
242
+ const execute = async ({
243
+ isReload
244
+ } = {}) => {
245
+ start();
246
+ if (isReload) {
247
+ urlObject.searchParams.set("hot", Date.now());
248
+ }
249
+ try {
250
+ const namespace = await importFn(urlObject.href);
251
+ complete(namespace);
252
+ return result;
253
+ } catch (e) {
254
+ fail(e, {
255
+ message: "Error while importing module",
256
+ reportedBy: "dynamic_import",
257
+ url: urlObject.href
258
+ });
259
+ if (isWebkitOrSafari) {
260
+ supervisor.reportException(result.exception);
261
+ }
262
+ return result;
263
+ }
264
+ };
265
+ executions[src] = {
266
+ init,
267
+ execute
268
+ };
269
+ };
270
+ const prepareJsModuleExecutionWithScriptThenDynamicImport = src => {
271
+ const urlObject = new URL(src, window.location);
272
+ const {
273
+ result,
274
+ start,
275
+ complete,
276
+ fail
277
+ } = createExecutionController(src, "js_module");
278
+ let importFn;
279
+ let currentScript;
280
+ let parentNode;
281
+ let nodeToReplace;
282
+ let currentScriptClone;
283
+ const init = _importFn => {
284
+ importFn = _importFn;
285
+ currentScript = document.querySelector("script[type=\"module\"][inlined-from-src=\"".concat(src, "\"]"));
286
+ parentNode = currentScript.parentNode;
287
+ executions[src].async = currentScript.async;
288
+ };
289
+ const execute = async ({
290
+ isReload,
291
+ onExecuting = () => {}
292
+ } = {}) => {
293
+ start();
294
+ currentScriptClone = prepareScriptToLoad(currentScript);
295
+ if (isReload) {
296
+ urlObject.searchParams.set("hot", Date.now());
297
+ nodeToReplace = currentScriptClone;
298
+ currentScriptClone.src = urlObject.href;
299
+ } else {
300
+ nodeToReplace = currentScript;
301
+ currentScriptClone.src = urlObject.href;
302
+ }
303
+ const scriptLoadResultPromise = getScriptLoadPromise(currentScriptClone);
304
+ parentNode.replaceChild(currentScriptClone, nodeToReplace);
305
+ const {
306
+ detectedBy,
307
+ failed,
308
+ errorEvent
309
+ } = await scriptLoadResultPromise;
310
+ if (failed) {
311
+ const messageDefault = "Error while loading module";
312
+ const {
313
+ error,
314
+ message,
315
+ filename,
316
+ lineno,
317
+ colno
318
+ } = errorEvent;
319
+ // if (detectedBy === "script_error_event") {
320
+ // reportErrorBackToBrowser(error)
321
+ // }
322
+ fail(error || message || messageDefault, {
323
+ message: messageDefault,
324
+ reportedBy: "script_error_event",
325
+ url: filename || urlObject.href,
326
+ line: lineno,
327
+ column: colno
328
+ });
329
+ if (detectedBy === "script_error_event") {
330
+ supervisor.reportException(result.exception);
331
+ }
332
+ return result;
333
+ }
334
+ onExecuting();
335
+ result.status = "executing";
336
+ if (logs) {
337
+ console.log("load ended");
338
+ }
339
+ try {
340
+ const namespace = await importFn(urlObject.href);
341
+ complete(namespace);
342
+ return result;
343
+ } catch (e) {
344
+ fail(e, {
345
+ message: "Error while importing module: ".concat(urlObject.href),
346
+ reportedBy: "dynamic_import",
347
+ url: urlObject.href
348
+ });
349
+ return result;
350
+ }
351
+ };
352
+ executions[src] = {
353
+ init,
354
+ execute
355
+ };
356
+ };
357
+ const prepareJsModuleRemoteExecution = isWebkitOrSafari ? prepareJsModuleExecutionWithDynamicImport : prepareJsModuleExecutionWithScriptThenDynamicImport;
358
+ const prepareJsModuleInlineExecution = src => {
359
+ const {
360
+ start,
361
+ complete,
362
+ fail
363
+ } = createExecutionController(src, "js_module");
364
+ const end = complete;
365
+ const error = e => {
366
+ // supervision shallowed the error, report back to browser
367
+ reportErrorBackToBrowser(e);
368
+ fail(e);
369
+ };
370
+ executions[src] = {
371
+ isInline: true,
372
+ start,
373
+ end,
374
+ error
375
+ };
376
+ };
377
+ supervisor.setupReportException({
378
+ logs,
379
+ serverIsJsenvDevServer,
380
+ rootDirectoryUrl,
381
+ errorOverlay,
382
+ errorBaseUrl,
383
+ openInEditor
384
+ });
385
+ scriptInfos.forEach(scriptInfo => {
386
+ const {
387
+ type,
388
+ src,
389
+ isInline
390
+ } = scriptInfo;
391
+ if (type === "js_module") {
392
+ if (isInline) {
393
+ prepareJsModuleInlineExecution(src);
394
+ } else {
395
+ prepareJsModuleRemoteExecution(src);
396
+ }
397
+ } else if (isInline) {
398
+ prepareJsClassicInlineExecution(src);
399
+ } else {
400
+ prepareJsClassicRemoteExecution(src);
401
+ }
402
+ });
403
+
404
+ // js classic
405
+ supervisor.jsClassicStart = inlineSrc => {
406
+ executions[inlineSrc].start();
407
+ };
408
+ supervisor.jsClassicEnd = inlineSrc => {
409
+ executions[inlineSrc].end();
410
+ };
411
+ supervisor.jsClassicError = (inlineSrc, e) => {
412
+ executions[inlineSrc].error(e);
413
+ };
414
+ supervisor.superviseScript = src => {
415
+ const execution = executions[asExecutionId(src)];
416
+ execution.init();
417
+ return addToExecutionQueue(execution);
418
+ };
419
+ // js module
420
+ supervisor.jsModuleStart = inlineSrc => {
421
+ executions[inlineSrc].start();
422
+ };
423
+ supervisor.jsModuleEnd = inlineSrc => {
424
+ executions[inlineSrc].end();
425
+ };
426
+ supervisor.jsModuleError = (inlineSrc, e) => {
427
+ executions[inlineSrc].error(e);
428
+ };
429
+ supervisor.superviseScriptTypeModule = (src, importFn) => {
430
+ const execution = executions[asExecutionId(src)];
431
+ execution.init(importFn);
432
+ return addToExecutionQueue(execution);
433
+ };
434
+ supervisor.reloadSupervisedScript = src => {
435
+ const execution = executions[src];
436
+ if (!execution) {
437
+ throw new Error("no execution for ".concat(src));
438
+ }
439
+ if (execution.isInline) {
440
+ throw new Error("cannot reload inline script ".concat(src));
441
+ }
442
+ return execution.execute({
443
+ isReload: true
444
+ });
445
+ };
446
+ supervisor.getDocumentExecutionResult = async () => {
447
+ await Promise.all(promises);
448
+ return {
449
+ timings: documentTimings,
450
+ status: "completed",
451
+ executionResults
452
+ };
453
+ };
454
+ };
455
+ const reportErrorBackToBrowser = error => {
456
+ if (typeof window.reportError === "function") {
457
+ window.reportError(error);
458
+ } else {
459
+ console.error(error);
460
+ }
461
+ };
462
+ supervisor.setupReportException = ({
463
+ logs,
464
+ rootDirectoryUrl,
465
+ serverIsJsenvDevServer,
466
+ errorNotification,
467
+ errorOverlay,
468
+ errorBaseUrl,
469
+ openInEditor
470
+ }) => {
471
+ const DYNAMIC_IMPORT_FETCH_ERROR = "dynamic_import_fetch_error";
472
+ const DYNAMIC_IMPORT_EXPORT_MISSING = "dynamic_import_export_missing";
473
+ const DYNAMIC_IMPORT_SYNTAX_ERROR = "dynamic_import_syntax_error";
474
+ const createException = (reason,
475
+ // can be error, string, object
476
+ {
477
+ message,
478
+ reportedBy,
479
+ url,
480
+ line,
481
+ column
482
+ } = {}) => {
483
+ const exception = {
484
+ runtime: "browser",
485
+ reason,
486
+ isException: true,
487
+ isError: false,
488
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/throw
489
+ reportedBy,
490
+ code: null,
491
+ name: null,
492
+ message: null,
493
+ stack: "",
494
+ // the stack v8 format
495
+ stackSourcemapped: null,
496
+ stackOriginal: "",
497
+ // the stack from runtime, not normalized to v8
498
+ stackTrace: "",
499
+ // the stack trace (without error name and message)
500
+ stackFrames: undefined,
501
+ withServerUrls: {
502
+ message: "",
503
+ stack: "",
504
+ stackTrace: ""
505
+ },
506
+ meta: null,
507
+ site: {
508
+ ownerSite: null,
509
+ isInline: null,
510
+ url: null,
511
+ line: null,
512
+ column: null
513
+ }
514
+ };
515
+ const writeBasicProperties = () => {
516
+ if (reason === undefined) {
517
+ exception.message = "undefined";
518
+ return;
519
+ }
520
+ if (reason === null) {
521
+ exception.message = "null";
522
+ return;
523
+ }
524
+ if (typeof reason === "string") {
525
+ exception.message = reason;
526
+ return;
527
+ }
528
+ if (typeof reason !== "object") {
529
+ exception.message = JSON.stringify(reason);
530
+ return;
531
+ }
532
+ // isError can be false when reason is an ErrorEvent for instance
533
+ exception.isError = reason instanceof Error;
534
+ exception.name = getErrorName(reason);
535
+ exception.message = reason.message || message || "";
536
+ let stackFrames;
537
+ if (exception.isError && Error.captureStackTrace &&
538
+ // captureStackTrace exists on webkit but error.stack is not v8
539
+ !isWebkitOrSafari) {
540
+ // stackTrace formatted by V8
541
+ const {
542
+ prepareStackTrace
543
+ } = Error;
544
+ Error.prepareStackTrace = (e, callSites) => {
545
+ Error.prepareStackTrace = prepareStackTrace;
546
+ const getPropertiesFromEvalOrigin = origin => {
547
+ // Most eval() calls are in this format
548
+ const topLevelEvalMatch = /^eval at [^(]+ \(.+:\d+:\d+\)$/.exec(origin);
549
+ if (topLevelEvalMatch) {
550
+ const source = topLevelEvalMatch[2];
551
+ const line = Number(topLevelEvalMatch[3]);
552
+ const column = topLevelEvalMatch[4] - 1;
553
+ return {
554
+ url: source,
555
+ line,
556
+ column
557
+ };
558
+ }
559
+ // Parse nested eval() calls using recursion
560
+ const nestedEvalMatch = /^eval at [^(]+ \(.+\)$/.exec(origin);
561
+ if (nestedEvalMatch) {
562
+ return getPropertiesFromEvalOrigin(nestedEvalMatch[2]);
563
+ }
564
+ return null;
565
+ };
566
+ stackFrames = [];
567
+ for (const callSite of callSites) {
568
+ const url = callSite.getFileName() || callSite.getScriptNameOrSourceURL();
569
+ const line = callSite.getLineNumber();
570
+ const column = callSite.getColumnNumber();
571
+ const site = resolveUrlSite({
572
+ url,
573
+ line,
574
+ column
575
+ });
576
+ const stackFrame = {
577
+ raw: " at ".concat(String(callSite)),
578
+ url: site.url,
579
+ line: site.line,
580
+ column: site.column,
581
+ functionName: callSite.getFunctionName(),
582
+ isNative: callSite.isNative(),
583
+ isEval: callSite.isEval(),
584
+ isConstructor: callSite.isConstructor(),
585
+ isAsync: callSite.isAsync(),
586
+ evalSite: null
587
+ };
588
+ if (stackFrame.isEval) {
589
+ const evalOrigin = stackFrame.getEvalOrigin();
590
+ if (evalOrigin) {
591
+ stackFrame.evalSite = getPropertiesFromEvalOrigin(evalOrigin);
592
+ }
593
+ }
594
+ stackFrames.push(stackFrame);
595
+ }
596
+ let stackTrace = "";
597
+ for (const stackFrame of stackFrames) {
598
+ if (stackTrace) stackTrace += "\n";
599
+ stackTrace += stackFrame.raw;
600
+ }
601
+ exception.stackTrace = stackTrace;
602
+ let stack = "";
603
+ const name = getErrorName(reason);
604
+ const message = reason.message || "";
605
+ stack += "".concat(name, ": ").concat(message);
606
+ if (stackTrace) {
607
+ stack += "\n".concat(stackTrace);
608
+ }
609
+ return stack;
610
+ };
611
+ exception.stackSourcemapped = true;
612
+ exception.stack = reason.stack;
613
+ if (stackFrames === undefined) {
614
+ // Error.prepareStackTrace not trigerred
615
+ // - reason is not an error
616
+ // - reason.stack already get
617
+ Error.prepareStackTrace = prepareStackTrace;
618
+ exception.stackTrace = getErrorStackTrace(reason);
619
+ } else {
620
+ exception.stackFrames = stackFrames;
621
+ const [firstCallFrame] = stackFrames;
622
+ if (exception.site.url === null && firstCallFrame && firstCallFrame.url) {
623
+ Object.assign(exception.site, {
624
+ url: firstCallFrame.url,
625
+ line: firstCallFrame.line,
626
+ column: firstCallFrame.column
627
+ });
628
+ }
629
+ }
630
+ } else {
631
+ exception.stackSourcemapped = false;
632
+ exception.stackTrace = reason.stack;
633
+ exception.stack = stringifyStack(exception);
634
+ }
635
+ if (exception.site.url === null && reason.url) {
636
+ Object.assign(exception.site, resolveUrlSite({
637
+ url: reason.url
638
+ }));
639
+ }
640
+ {
641
+ // chrome
642
+ if (exception.message.includes("does not provide an export named")) {
643
+ exception.code = DYNAMIC_IMPORT_EXPORT_MISSING;
644
+ }
645
+ // firefox
646
+ if (exception.message.startsWith("import not found:") || exception.message.startsWith("ambiguous indirect export:") || exception.message.includes("doesn't provide an export named:")) {
647
+ exception.code = DYNAMIC_IMPORT_EXPORT_MISSING;
648
+ }
649
+ // safari
650
+ if (exception.message.startsWith("import binding name")) {
651
+ exception.code = DYNAMIC_IMPORT_EXPORT_MISSING;
652
+ }
653
+ if (exception.message.includes("Importing a module script failed")) {
654
+ exception.code = DYNAMIC_IMPORT_FETCH_ERROR;
655
+ }
656
+ }
657
+ {
658
+ if (!exception.code && exception.name === "SyntaxError" && typeof line === "number") {
659
+ exception.code = DYNAMIC_IMPORT_SYNTAX_ERROR;
660
+ }
661
+ }
662
+ };
663
+ writeBasicProperties();
664
+
665
+ // then if it fails, use url+line+column passed
666
+ if (exception.site.url === null && url) {
667
+ if (typeof line === "string") {
668
+ line = parseInt(line);
669
+ }
670
+ if (typeof column === "string") {
671
+ column = parseInt(column);
672
+ }
673
+ const fileUrlSite = resolveUrlSite({
674
+ url,
675
+ line,
676
+ column
677
+ });
678
+ const decreaseLine = () => {
679
+ const {
680
+ ownerSite
681
+ } = fileUrlSite;
682
+ if (ownerSite) {
683
+ if (typeof ownerSite.line === "number") {
684
+ ownerSite.line = fileUrlSite.ownerSite.line - 1;
685
+ }
686
+ }
687
+ if (typeof fileUrlSite.line === "number") {
688
+ fileUrlSite.line = fileUrlSite.line - 1;
689
+ }
690
+ };
691
+ if (fileUrlSite.isInline) {
692
+ // chrome
693
+ if (Error.captureStackTrace && !isWebkitOrSafari) ;
694
+ // firefox and webkit
695
+ else if (exception.name === "SyntaxError") {
696
+ if (exception.code === DYNAMIC_IMPORT_EXPORT_MISSING || exception.code === DYNAMIC_IMPORT_SYNTAX_ERROR) {
697
+ decreaseLine();
698
+ } else {
699
+ decreaseLine();
700
+ decreaseLine();
701
+ }
702
+ } else {
703
+ decreaseLine();
704
+ }
705
+ }
706
+ Object.assign(exception.site, fileUrlSite);
707
+ }
708
+ exception.withServerUrls.message = exception.message;
709
+ exception.withServerUrls.stackTrace = exception.stackTrace;
710
+ exception.withServerUrls.stack = exception.stack;
711
+ exception.message = exception.message ? replaceUrls(exception.message, serverUrlSite => {
712
+ const fileUrlSite = resolveUrlSite(serverUrlSite);
713
+ return stringifyUrlSite(fileUrlSite);
714
+ }) : "";
715
+ exception.stackTrace = exception.stackTrace ? replaceUrls(exception.stackTrace, serverUrlSite => {
716
+ const fileUrlSite = resolveUrlSite(serverUrlSite);
717
+ if (exception.site.url === null) {
718
+ Object.assign(exception.site, fileUrlSite);
719
+ }
720
+ return stringifyUrlSite(fileUrlSite);
721
+ }) : "";
722
+ exception.stack = stringifyStack({
723
+ name: exception.name,
724
+ message: exception.message,
725
+ stackTrace: exception.stackTrace
726
+ });
727
+ exception.text = stringifyStack({
728
+ name: exception.name,
729
+ message: exception.message,
730
+ stackTrace: exception.stackTrace
731
+ });
732
+ return exception;
733
+ };
734
+ const stringifyStack = ({
735
+ codeFrame,
736
+ name,
737
+ message,
738
+ stackTrace
739
+ }) => {
740
+ let stack = "";
741
+ if (codeFrame) {
742
+ stack += "".concat(codeFrame, "\n");
743
+ }
744
+ if (name && message) {
745
+ stack += "".concat(name, ": ").concat(message);
746
+ } else if (message) {
747
+ stack += message;
748
+ }
749
+ if (stackTrace) {
750
+ stack += "\n".concat(stackTrace);
751
+ }
752
+ return stack;
753
+ };
754
+ const stringifyUrlSite = ({
755
+ url,
756
+ line,
757
+ column
758
+ }) => {
759
+ if (typeof line === "number" && typeof column === "number") {
760
+ return "".concat(url, ":").concat(line, ":").concat(column);
761
+ }
762
+ if (typeof line === "number") {
763
+ return "".concat(url, ":").concat(line);
764
+ }
765
+ return url;
766
+ };
767
+ const resolveUrlSite = ({
768
+ url,
769
+ line,
770
+ column
771
+ }) => {
772
+ const inlineUrlMatch = url.match(/@L([0-9]+)C([0-9]+)-L([0-9]+)C([0-9]+)(\.\w+)$/);
773
+ if (inlineUrlMatch) {
774
+ const htmlUrl = url.slice(0, inlineUrlMatch.index);
775
+ const tagLineStart = parseInt(inlineUrlMatch[1]);
776
+ const tagColumnStart = parseInt(inlineUrlMatch[2]);
777
+ const tagLineEnd = parseInt(inlineUrlMatch[3]);
778
+ const tagColumnEnd = parseInt(inlineUrlMatch[4]);
779
+ const extension = inlineUrlMatch[5];
780
+ url = htmlUrl;
781
+ const fileUrl = resolveFileUrl(url);
782
+ const ownerSiteUrl = "".concat(fileUrl, "@L").concat(tagLineStart, "C").concat(tagColumnStart, "-L").concat(tagLineEnd, "C").concat(tagColumnEnd).concat(extension);
783
+ const ownerSite = {
784
+ url: ownerSiteUrl,
785
+ ownerLine: tagLineStart,
786
+ ownerColumn: tagColumnStart,
787
+ inlineLine: typeof line === "number" ? line - 1 : undefined,
788
+ inlineColumn: column
789
+ };
790
+ return {
791
+ ownerSite,
792
+ isInline: true,
793
+ serverUrl: url,
794
+ url: fileUrl,
795
+ line: typeof ownerSite.inlineLine === "number" ? ownerSite.ownerLine + ownerSite.inlineLine : ownerSite.ownerLine,
796
+ column: typeof ownerSite.inlineColumn === "number" ? ownerSite.inlineColumn : ownerSite.ownerColumn
797
+ };
798
+ }
799
+ return {
800
+ isInline: false,
801
+ serverUrl: url,
802
+ url: resolveFileUrl(url),
803
+ line,
804
+ column
805
+ };
806
+ };
807
+ const getErrorStackTrace = error => {
808
+ let stack = error.stack;
809
+ if (!stack) return "";
810
+ const name = getErrorName(error);
811
+ const messageInStack = "".concat(name, ": ").concat(error.message);
812
+ if (stack.startsWith(messageInStack)) {
813
+ stack = stack.slice(messageInStack.length);
814
+ }
815
+ const nextLineIndex = stack.indexOf("\n");
816
+ if (nextLineIndex > -1) {
817
+ stack = stack.slice(nextLineIndex + 1);
818
+ }
819
+ return stack;
820
+ };
821
+ const resolveFileUrl = url => {
822
+ let urlObject;
823
+ try {
824
+ urlObject = new URL(url, window.origin);
825
+ } catch (_unused2) {
826
+ return url;
827
+ }
828
+ if (urlObject.origin === window.origin) {
829
+ urlObject = new URL("".concat(urlObject.pathname.slice(1)).concat(urlObject.search), rootDirectoryUrl);
830
+ }
831
+ if (urlObject.href.startsWith("file:")) {
832
+ const atFsIndex = urlObject.pathname.indexOf("/@fs/");
833
+ if (atFsIndex > -1) {
834
+ const afterAtFs = urlObject.pathname.slice(atFsIndex + "/@fs/".length);
835
+ return new URL(afterAtFs, "file:///").href;
836
+ }
837
+ }
838
+ return urlObject.href;
839
+ };
840
+
841
+ // `Error: yo
842
+ // at Object.execute (http://127.0.0.1:57300/build/src/__test__/file-throw.js:9:13)
843
+ // at doExec (http://127.0.0.1:3000/src/__test__/file-throw.js:452:38)
844
+ // at postOrderExec (http://127.0.0.1:3000/src/__test__/file-throw.js:448:16)
845
+ // at http://127.0.0.1:3000/src/__test__/file-throw.js:399:18`.replace(/(?:https?|ftp|file):\/\/(.*+)$/gm, (...args) => {
846
+ // debugger
847
+ // })
848
+ const replaceUrls = (source, replace) => {
849
+ return source.replace(/(?:https?|ftp|file):\/\/\S+/g, match => {
850
+ let replacement = "";
851
+ const lastChar = match[match.length - 1];
852
+
853
+ // hotfix because our url regex sucks a bit
854
+ const endsWithSeparationChar = lastChar === ")" || lastChar === ":";
855
+ if (endsWithSeparationChar) {
856
+ match = match.slice(0, -1);
857
+ }
858
+ const lineAndColumnPattern = /:([0-9]+):([0-9]+)$/;
859
+ const lineAndColumMatch = match.match(lineAndColumnPattern);
860
+ if (lineAndColumMatch) {
861
+ const lineAndColumnString = lineAndColumMatch[0];
862
+ const lineString = lineAndColumMatch[1];
863
+ const columnString = lineAndColumMatch[2];
864
+ replacement = replace({
865
+ url: match.slice(0, -lineAndColumnString.length),
866
+ line: lineString ? parseInt(lineString) : null,
867
+ column: columnString ? parseInt(columnString) : null
868
+ });
869
+ } else {
870
+ const linePattern = /:([0-9]+)$/;
871
+ const lineMatch = match.match(linePattern);
872
+ if (lineMatch) {
873
+ const lineString = lineMatch[0];
874
+ replacement = replace({
875
+ url: match.slice(0, -lineString.length),
876
+ line: parseInt(lineMatch[1])
877
+ });
878
+ } else {
879
+ replacement = replace({
880
+ url: match
881
+ });
882
+ }
883
+ }
884
+ if (endsWithSeparationChar) {
885
+ return "".concat(replacement).concat(lastChar);
886
+ }
887
+ return replacement;
888
+ });
889
+ };
890
+ let displayErrorNotification;
891
+ {
892
+ const {
893
+ Notification
894
+ } = window;
895
+ displayErrorNotification = typeof Notification === "function" ? ({
896
+ title,
897
+ text,
898
+ icon
899
+ }) => {
900
+ if (Notification.permission === "granted") {
901
+ const notification = new Notification(title, {
902
+ lang: "en",
903
+ body: text,
904
+ icon
905
+ });
906
+ notification.onclick = () => {
907
+ window.focus();
908
+ };
909
+ }
910
+ } : () => {};
911
+ }
912
+ const JSENV_ERROR_OVERLAY_TAGNAME = "jsenv-error-overlay";
913
+ let displayJsenvErrorOverlay;
914
+ {
915
+ displayJsenvErrorOverlay = params => {
916
+ if (logs) {
917
+ console.log("display jsenv error overlay", params);
918
+ }
919
+ let jsenvErrorOverlay = new JsenvErrorOverlay(params);
920
+ document.querySelectorAll(JSENV_ERROR_OVERLAY_TAGNAME).forEach(node => {
921
+ node.parentNode.removeChild(node);
922
+ });
923
+ const appendIntoRespectingLineBreaksAndIndentation = (node, parentNode, {
924
+ indent = 2
925
+ } = {}) => {
926
+ const indentMinusOne = " ".repeat(indent - 1);
927
+ const desiredIndent = " ".repeat(indent);
928
+ const previousSibling = parentNode.childNodes[parentNode.childNodes.length - 1];
929
+ if (previousSibling && previousSibling.nodeName === "#text") {
930
+ if (previousSibling.nodeValue === "\n".concat(indentMinusOne)) {
931
+ previousSibling.nodeValue = "\n".concat(desiredIndent);
932
+ }
933
+ if (previousSibling.nodeValue !== "\n".concat(desiredIndent)) {
934
+ previousSibling.nodeValue = "\n".concat(desiredIndent);
935
+ }
936
+ } else {
937
+ parentNode.appendChild(document.createTextNode("\n".concat(desiredIndent)));
938
+ }
939
+ parentNode.appendChild(node);
940
+ };
941
+ appendIntoRespectingLineBreaksAndIndentation(jsenvErrorOverlay, document.body);
942
+ const removeErrorOverlay = () => {
943
+ if (jsenvErrorOverlay && jsenvErrorOverlay.parentNode) {
944
+ document.body.removeChild(jsenvErrorOverlay);
945
+ jsenvErrorOverlay = null;
946
+ }
947
+ };
948
+ return removeErrorOverlay;
949
+ };
950
+ class JsenvErrorOverlay extends HTMLElement {
951
+ constructor(exception) {
952
+ super();
953
+ const root = this.attachShadow({
954
+ mode: "open"
955
+ });
956
+ const tips = [];
957
+ tips.push("Click outside to close.");
958
+ const tip = tips.join("\n <br />\n ");
959
+ root.innerHTML = "\n<style>\n ".concat(overlayCSS, "\n</style>\n<div class=\"backdrop\"></div>\n<div class=\"overlay\" data-theme=\"dark\">\n <h1 class=\"title\">\n An error occured\n </h1>\n <pre class=\"text\"></pre>\n <div class=\"tip\">\n ").concat(tip, "\n </div>\n</div>");
960
+ root.querySelector(".backdrop").onclick = () => {
961
+ if (!this.parentNode) {
962
+ // not in document anymore
963
+ return;
964
+ }
965
+ root.querySelector(".backdrop").onclick = null;
966
+ this.parentNode.removeChild(this);
967
+ };
968
+ const renderException = () => {
969
+ const {
970
+ cause = {}
971
+ } = exception;
972
+ const {
973
+ trace = {}
974
+ } = cause;
975
+ root.querySelector(".text").innerHTML = stringifyStack({
976
+ codeFrame: trace.codeFrame ? generateClickableText(trace.codeFrame) : "",
977
+ name: exception.name,
978
+ message: exception.message ? generateClickableText(exception.message) : "",
979
+ stackTrace: exception.stackTrace ? generateClickableText(exception.stackTrace) : ""
980
+ });
981
+ if (cause) {
982
+ const causeText = stringifyStack({
983
+ name: getErrorName(cause),
984
+ message: cause.reason ? generateClickableText(cause.reason) : cause.stack ? generateClickableText(cause.stack) : ""
985
+ });
986
+ if (causeText) {
987
+ const causeTextIndented = prefixRemainingLines(causeText, " ");
988
+ root.querySelector(".text").innerHTML += "\n [cause]: ".concat(causeTextIndented);
989
+ }
990
+ }
991
+ if (!exception.stackTrace && (exception.reportedBy === "script_error_event" || exception.reportedBy === "window_error_event" || exception.name === "SyntaxError" || exception.code === DYNAMIC_IMPORT_FETCH_ERROR || exception.code === DYNAMIC_IMPORT_EXPORT_MISSING || exception.code === DYNAMIC_IMPORT_SYNTAX_ERROR)) {
992
+ let traceSite = stringifyUrlSite(trace);
993
+ if (traceSite) {
994
+ root.querySelector(".text").innerHTML += "\n at ".concat(generateClickableText(traceSite));
995
+ }
996
+ }
997
+ };
998
+ renderException();
999
+ if (exception.site.url && serverIsJsenvDevServer) {
1000
+ (async () => {
1001
+ try {
1002
+ if (exception.code === DYNAMIC_IMPORT_FETCH_ERROR || exception.reportedBy === "script_error_event") {
1003
+ const errorCauseFile = exception.site.ownerSite ? exception.site.ownerSite.url : exception.site.url;
1004
+ const errorCauseAPIUrl = "/__get_error_cause__/".concat(encodeURIComponent(errorCauseFile));
1005
+ const response = await window.fetch(errorCauseAPIUrl);
1006
+ if (response.status !== 200) {
1007
+ return;
1008
+ }
1009
+ const causeInfo = await response.json();
1010
+ if (!causeInfo) {
1011
+ return;
1012
+ }
1013
+ exception.cause = causeInfo;
1014
+ renderException();
1015
+ return;
1016
+ }
1017
+ if (exception.site.line !== undefined) {
1018
+ const errorTraceFile = exception.site.ownerSite ? stringifyUrlSite({
1019
+ url: exception.site.ownerSite.url,
1020
+ line: exception.site.ownerSite.inlineLine,
1021
+ column: exception.site.ownerSite.inlineColumn
1022
+ }) : stringifyUrlSite(exception.site);
1023
+ const errorTraceAPIUrl = "/__get_cause_trace__/".concat(encodeURIComponent(errorTraceFile));
1024
+ const urlToFetch = new URL(errorTraceAPIUrl, window.origin);
1025
+ if (!exception.stackSourcemapped) {
1026
+ urlToFetch.searchParams.set("remap", "");
1027
+ }
1028
+ const response = await window.fetch(urlToFetch);
1029
+ if (response.status !== 200) {
1030
+ return;
1031
+ }
1032
+ const causeTrace = await response.json();
1033
+ exception.cause = {
1034
+ trace: causeTrace
1035
+ };
1036
+ renderException();
1037
+ return;
1038
+ }
1039
+ } catch (_unused3) {
1040
+ // happens if server is closed for instance
1041
+ return;
1042
+ }
1043
+ })();
1044
+ }
1045
+ }
1046
+ }
1047
+ const generateClickableText = text => {
1048
+ const textWithHtmlLinks = makeLinksClickable(text, {
1049
+ createLink: ({
1050
+ url,
1051
+ line,
1052
+ column
1053
+ }) => {
1054
+ const urlSite = resolveUrlSite({
1055
+ url,
1056
+ line,
1057
+ column
1058
+ });
1059
+ if (errorBaseUrl) {
1060
+ if (urlSite.url.startsWith(rootDirectoryUrl)) {
1061
+ urlSite.url = "".concat(errorBaseUrl).concat(urlSite.url.slice(rootDirectoryUrl.length));
1062
+ } else {
1063
+ urlSite.url = "file:///mocked_for_snapshots";
1064
+ }
1065
+ }
1066
+ const urlWithLineAndColumn = stringifyUrlSite(urlSite);
1067
+ return {
1068
+ href: urlSite.url.startsWith("file:") && openInEditor ? "javascript:window.fetch('/__open_in_editor__/".concat(encodeURIComponent(urlWithLineAndColumn), "')") : urlSite.url,
1069
+ text: urlWithLineAndColumn
1070
+ };
1071
+ }
1072
+ });
1073
+ return textWithHtmlLinks;
1074
+ };
1075
+ const makeLinksClickable = (string, {
1076
+ createLink = ({
1077
+ url
1078
+ }) => url
1079
+ }) => {
1080
+ // normalize line breaks
1081
+ string = string.replace(/\r\n/g, "\n");
1082
+ string = escapeHtml(string);
1083
+ // render links
1084
+ string = replaceUrls(string, ({
1085
+ url,
1086
+ line,
1087
+ column
1088
+ }) => {
1089
+ const {
1090
+ href,
1091
+ text
1092
+ } = createLink({
1093
+ url,
1094
+ line,
1095
+ column
1096
+ });
1097
+ return link({
1098
+ href,
1099
+ text
1100
+ });
1101
+ });
1102
+ return string;
1103
+ };
1104
+ const prefixRemainingLines = (text, prefix) => {
1105
+ const lines = text.split(/\r?\n/);
1106
+ const firstLine = lines.shift();
1107
+ let result = firstLine;
1108
+ let i = 0;
1109
+ while (i < lines.length) {
1110
+ const line = lines[i];
1111
+ i++;
1112
+ result += line.length ? "\n".concat(prefix).concat(line) : "\n";
1113
+ }
1114
+ return result;
1115
+ };
1116
+ const escapeHtml = string => {
1117
+ return string.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
1118
+ };
1119
+ const link = ({
1120
+ href,
1121
+ text = href
1122
+ }) => "<a href=\"".concat(href, "\">").concat(text, "</a>");
1123
+ if (customElements && !customElements.get(JSENV_ERROR_OVERLAY_TAGNAME)) {
1124
+ customElements.define(JSENV_ERROR_OVERLAY_TAGNAME, JsenvErrorOverlay);
1125
+ }
1126
+ const overlayCSS = "\n :host {\n position: fixed;\n z-index: 99999;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n overflow-y: scroll;\n margin: 0;\n background: rgba(0, 0, 0, 0.66);\n }\n \n .backdrop {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n }\n \n .overlay {\n position: relative;\n background: rgba(0, 0, 0, 0.95);\n width: 800px;\n margin: 30px auto;\n padding: 25px 40px;\n padding-top: 0;\n overflow: hidden; /* for h1 margins */\n border-radius: 4px 8px;\n box-shadow: 0 20px 40px rgb(0 0 0 / 30%), 0 15px 12px rgb(0 0 0 / 20%);\n box-sizing: border-box;\n font-family: monospace;\n direction: ltr;\n }\n \n h1 {\n color: red;\n text-align: center;\n }\n \n pre {\n overflow: auto;\n max-width: 100%;\n /* padding is nice + prevents scrollbar from hiding the text behind it */\n /* does not work nicely on firefox though https://bugzilla.mozilla.org/show_bug.cgi?id=748518 */\n padding: 20px; \n }\n \n .tip {\n border-top: 1px solid #999;\n padding-top: 12px;\n }\n \n [data-theme=\"dark\"] {\n color: #999;\n }\n [data-theme=\"dark\"] pre {\n background: #111;\n border: 1px solid #333;\n color: #eee;\n }\n \n [data-theme=\"light\"] {\n color: #EEEEEE;\n }\n [data-theme=\"light\"] pre {\n background: #1E1E1E;\n border: 1px solid white;\n color: #EEEEEE;\n }\n \n pre a {\n color: inherit;\n }";
1127
+ }
1128
+ supervisor.createException = createException;
1129
+ supervisor.reportException = exception => {
1130
+ if (errorOverlay) {
1131
+ const removeErrorOverlay = displayJsenvErrorOverlay(exception);
1132
+ if (window.__reloader__) {
1133
+ const onchange = window.__reloader__.status.onchange;
1134
+ window.__reloader__.status.onchange = () => {
1135
+ onchange();
1136
+ if (window.__reloader__.status.value === "reloading") {
1137
+ removeErrorOverlay();
1138
+ }
1139
+ };
1140
+ }
1141
+ }
1142
+ if (errorNotification) {
1143
+ displayErrorNotification({
1144
+ title: "An error occured",
1145
+ text: "todo"
1146
+ });
1147
+ }
1148
+ return exception;
1149
+ };
1150
+ window.addEventListener("error", errorEvent => {
1151
+ if (!errorEvent.isTrusted) {
1152
+ // ignore custom error event (not sent by browser)
1153
+ if (logs) {
1154
+ console.log("ignore non trusted error event", errorEvent);
1155
+ }
1156
+ return;
1157
+ }
1158
+ if (logs) {
1159
+ console.log('window "error" event received', errorEvent);
1160
+ }
1161
+ const {
1162
+ error,
1163
+ message,
1164
+ filename,
1165
+ lineno,
1166
+ colno
1167
+ } = errorEvent;
1168
+ const exception = supervisor.createException(error || message, {
1169
+ // when error is reported within a worker error is null
1170
+ // but there is a message property on errorEvent
1171
+ reportedBy: "window_error_event",
1172
+ message,
1173
+ url: filename,
1174
+ line: lineno,
1175
+ column: colno
1176
+ });
1177
+ supervisor.reportException(exception);
1178
+ });
1179
+ window.addEventListener("unhandledrejection", event => {
1180
+ if (event.defaultPrevented) {
1181
+ return;
1182
+ }
1183
+ const exception = supervisor.createException(event.reason, {
1184
+ reportedBy: "window_unhandledrejection_event"
1185
+ });
1186
+ supervisor.reportException(exception);
1187
+ });
1188
+ };
1189
+ const prepareScriptToLoad = script => {
1190
+ // do not use script.cloneNode()
1191
+ // bcause https://stackoverflow.com/questions/28771542/why-dont-clonenode-script-tags-execute
1192
+ const scriptClone = document.createElement("script");
1193
+ // browsers set async by default when creating script(s)
1194
+ // we want an exact copy to preserves how code is executed
1195
+ scriptClone.async = false;
1196
+ Array.from(script.attributes).forEach(attribute => {
1197
+ scriptClone.setAttribute(attribute.nodeName, attribute.nodeValue);
1198
+ });
1199
+ scriptClone.removeAttribute("jsenv-cooked-by");
1200
+ scriptClone.removeAttribute("jsenv-inlined-by");
1201
+ scriptClone.removeAttribute("jsenv-injected-by");
1202
+ scriptClone.removeAttribute("inlined-from-src");
1203
+ scriptClone.removeAttribute("original-position");
1204
+ scriptClone.removeAttribute("original-src-position");
1205
+ return scriptClone;
1206
+ };
1207
+ const getScriptLoadPromise = async script => {
1208
+ return new Promise(resolve => {
1209
+ const windowErrorEventCallback = errorEvent => {
1210
+ if (errorEvent.filename === script.src) {
1211
+ removeWindowErrorEventCallback();
1212
+ resolve({
1213
+ detectedBy: "window_error_event",
1214
+ failed: true,
1215
+ errorEvent
1216
+ });
1217
+ }
1218
+ };
1219
+ const removeWindowErrorEventCallback = () => {
1220
+ window.removeEventListener("error", windowErrorEventCallback);
1221
+ };
1222
+ window.addEventListener("error", windowErrorEventCallback);
1223
+ script.addEventListener("error", errorEvent => {
1224
+ removeWindowErrorEventCallback();
1225
+ resolve({
1226
+ detectedBy: "script_error_event",
1227
+ failed: true,
1228
+ errorEvent
1229
+ });
1230
+ });
1231
+ script.addEventListener("load", () => {
1232
+ removeWindowErrorEventCallback();
1233
+ resolve({
1234
+ detectedBy: "script_load_event"
1235
+ });
1236
+ });
1237
+ });
1238
+ };
1239
+ const getErrorName = value => {
1240
+ const {
1241
+ constructor
1242
+ } = value;
1243
+ if (constructor) {
1244
+ if (constructor.name !== "Object") {
1245
+ return constructor.name;
1246
+ }
1247
+ }
1248
+ return value.name || "Error";
1249
+ };
1250
+ return supervisor;
1251
+ })();