@jsenv/core 24.1.0-alpha.0 → 24.3.1

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 (180) hide show
  1. package/{license → LICENSE} +0 -0
  2. package/dist/browser_runtime/browser_runtime-fbd309a1.js +5137 -0
  3. package/dist/browser_runtime/browser_runtime-fbd309a1.js.map +1064 -0
  4. package/dist/{jsenv_browser_system.js → browser_system/browser_system-29eda202.js} +12 -12
  5. package/dist/{jsenv_browser_system.js.map → browser_system/browser_system-29eda202.js.map} +64 -64
  6. package/dist/build_manifest.js +12 -0
  7. package/dist/compile_proxy/assets/s.js-749702e8.map +242 -0
  8. package/dist/compile_proxy/compile_proxy-405777e6.html +2074 -0
  9. package/dist/compile_proxy/compile_proxy.html__inline__20-39c0801c.js.map +385 -0
  10. package/dist/event_source_client/event_source_client-9f14c8b9.js +356 -0
  11. package/dist/event_source_client/event_source_client-9f14c8b9.js.map +127 -0
  12. package/dist/redirector/assets/s.js-749702e8.map +242 -0
  13. package/dist/redirector/redirector-237cd168.html +2118 -0
  14. package/dist/redirector/redirector.html__inline__15-33acb0b9.js.map +390 -0
  15. package/dist/toolbar/assets/compilation.css-209d68b4.map +12 -0
  16. package/dist/toolbar/assets/eventsource.css-38cd0a36.map +12 -0
  17. package/dist/toolbar/assets/execution.css-0ebe522f.map +12 -0
  18. package/dist/toolbar/assets/focus.css-3f9c156d.map +12 -0
  19. package/dist/toolbar/assets/light-theme.css-78b19a80.map +12 -0
  20. package/dist/toolbar/assets/overflow-menu.css-d9688a1c.map +12 -0
  21. package/dist/toolbar/assets/s.js-749702e8.map +242 -0
  22. package/dist/toolbar/assets/settings.css-2b81b245.map +12 -0
  23. package/dist/toolbar/assets/toolbar.main.css-846920e9.map +28 -0
  24. package/dist/toolbar/assets/tooltip.css-03395ee6.map +12 -0
  25. package/dist/toolbar/toolbar-d3d98c2e.html +4778 -0
  26. package/dist/toolbar/toolbar.main-cab36c15.js.map +795 -0
  27. package/dist/toolbar_injector/assets/jsenv-logo-188b9ca6.svg +95 -0
  28. package/dist/{jsenv_toolbar_injector.js → toolbar_injector/toolbar_injector-01f71ce3.js} +62 -137
  29. package/dist/toolbar_injector/toolbar_injector-01f71ce3.js.map +294 -0
  30. package/main.js +0 -1
  31. package/package.json +4 -2
  32. package/readme.md +10 -7
  33. package/src/buildProject.js +8 -2
  34. package/src/dev_server.js +45 -102
  35. package/src/importUsingChildProcess.js +1 -1
  36. package/src/internal/{runtime/detectBrowser/detectBrowser.js → browser_detection/browser_detection.js} +0 -0
  37. package/src/internal/{runtime/detectBrowser → browser_detection}/detectAndroid.js +0 -0
  38. package/src/internal/{runtime/detectBrowser → browser_detection}/detectChrome.js +0 -0
  39. package/src/internal/{runtime/detectBrowser → browser_detection}/detectEdge.js +0 -0
  40. package/src/internal/{runtime/detectBrowser → browser_detection}/detectElectron.js +0 -0
  41. package/src/internal/{runtime/detectBrowser → browser_detection}/detectFirefox.js +0 -0
  42. package/src/internal/{runtime/detectBrowser → browser_detection}/detectIOS.js +0 -0
  43. package/src/internal/{runtime/detectBrowser → browser_detection}/detectInternetExplorer.js +0 -0
  44. package/src/internal/{runtime/detectBrowser → browser_detection}/detectOpera.js +0 -0
  45. package/src/internal/{runtime/detectBrowser → browser_detection}/detectSafari.js +0 -0
  46. package/src/internal/{runtime/detectBrowser → browser_detection}/util.js +0 -0
  47. package/src/internal/{runtime/createBrowserRuntime/scanBrowserRuntimeFeatures.js → browser_feature_detection/browser_feature_detection.js} +116 -81
  48. package/src/internal/browser_feature_detection/compile_proxy.html +27 -0
  49. package/src/internal/{browser-launcher → browser_launcher}/createSharing.js +0 -0
  50. package/src/internal/{browser-launcher → browser_launcher}/executeHtmlFile.js +7 -4
  51. package/src/internal/{browser-launcher → browser_launcher}/trackPageToNotify.js +0 -0
  52. package/src/internal/{browser-launcher/jsenv-browser-system.js → browser_runtime/browser_runtime.js} +4 -4
  53. package/src/internal/{runtime/createBrowserRuntime/createBrowserSystem.js → browser_runtime/browser_system.js} +3 -2
  54. package/src/internal/{runtime/createBrowserRuntime → browser_runtime}/createBrowserRuntime.js +7 -5
  55. package/src/internal/{browser-launcher → browser_runtime}/displayErrorInDocument.js +0 -0
  56. package/src/internal/{browser-launcher → browser_runtime}/displayErrorNotification.js +2 -4
  57. package/src/internal/{runtime/createBrowserRuntime → browser_runtime}/evalSource.js +2 -0
  58. package/src/internal/{runtime/createBrowserRuntime → browser_runtime}/makeNamespaceTransferable.js +0 -0
  59. package/src/internal/{browser-utils → browser_utils}/fetch-browser.js +2 -0
  60. package/src/internal/{browser-utils → browser_utils}/fetchAndEvalUsingFetch.js +3 -0
  61. package/src/internal/{browser-utils → browser_utils}/fetchAndEvalUsingScript.js +2 -0
  62. package/src/internal/{browser-utils → browser_utils}/fetchJson.js +0 -0
  63. package/src/internal/{browser-utils → browser_utils}/fetchUsingXHR.js +4 -4
  64. package/src/internal/building/buildUsingRollup.js +4 -0
  65. package/src/internal/building/createJsenvRollupPlugin.js +19 -9
  66. package/src/internal/building/css/applyPostCss.js +19 -8
  67. package/src/internal/building/css/moveCssUrls.js +44 -0
  68. package/src/internal/building/css/parseCssRessource.js +67 -17
  69. package/src/internal/building/css/parseCssUrls.js +29 -23
  70. package/src/internal/building/css/postcss_plugin_url_visitor.js +11 -20
  71. package/src/internal/building/css/replaceCssUrls.js +38 -19
  72. package/src/internal/building/css_module.js +6 -10
  73. package/src/internal/building/html/parseHtmlRessource.js +37 -11
  74. package/src/internal/building/parseRessource.js +3 -0
  75. package/src/internal/building/ressource_builder.js +12 -3
  76. package/src/internal/compiling/babel_plugin_import_assertions.js +1 -2
  77. package/src/internal/compiling/compile-directory/validateCache.js +0 -5
  78. package/src/internal/compiling/compileFile.js +17 -54
  79. package/src/internal/compiling/createCompiledFileService.js +2 -0
  80. package/src/internal/compiling/html_source_file_service.js +49 -13
  81. package/src/internal/compiling/jsenvCompilerForHtml.js +29 -12
  82. package/src/internal/compiling/startCompileServer.js +39 -33
  83. package/src/internal/dev_server/event_source_client/event_source_client.js +63 -0
  84. package/src/internal/{toolbar/eventsource/connectEventSource.js → dev_server/event_source_client/event_source_connection.js} +66 -88
  85. package/src/internal/dev_server/event_source_client/file_changes.js +82 -0
  86. package/src/internal/dev_server/event_source_client/livereload_preference.js +13 -0
  87. package/src/internal/{exploring → dev_server/exploring}/exploring.css +0 -0
  88. package/src/internal/{exploring → dev_server/exploring}/exploring.html +8 -3
  89. package/src/internal/{exploring → dev_server/exploring}/exploring.js +0 -0
  90. package/src/internal/{exploring → dev_server/exploring}/fetchExploringJson.js +4 -9
  91. package/src/internal/dev_server/redirector/redirector.html +48 -0
  92. package/src/internal/{toolbar → dev_server/toolbar}/animation/toolbar.animation.js +0 -0
  93. package/src/internal/{toolbar → dev_server/toolbar}/compilation/compilation.css +0 -0
  94. package/src/internal/{toolbar → dev_server/toolbar}/compilation/toolbar.compilation.js +4 -7
  95. package/src/internal/{toolbar → dev_server/toolbar}/eventsource/eventsource.css +0 -0
  96. package/src/internal/dev_server/toolbar/eventsource/toolbar.eventsource.js +83 -0
  97. package/src/internal/{toolbar → dev_server/toolbar}/execution/execution.css +0 -0
  98. package/src/internal/{toolbar → dev_server/toolbar}/execution/toolbar.execution.js +0 -0
  99. package/src/internal/{toolbar → dev_server/toolbar}/focus/focus.css +0 -0
  100. package/src/internal/{toolbar → dev_server/toolbar}/focus/toolbar.focus.js +0 -0
  101. package/src/internal/{toolbar → dev_server/toolbar}/jsenv-logo.svg +0 -0
  102. package/src/internal/dev_server/toolbar/notification/toolbar.notification.js +152 -0
  103. package/src/internal/{toolbar → dev_server/toolbar}/responsive/overflow-menu.css +0 -0
  104. package/src/internal/{toolbar → dev_server/toolbar}/responsive/toolbar.responsive.js +0 -0
  105. package/src/internal/{toolbar → dev_server/toolbar}/settings/settings.css +0 -0
  106. package/src/internal/{toolbar → dev_server/toolbar}/settings/toolbar.settings.js +0 -0
  107. package/src/internal/{toolbar → dev_server/toolbar}/theme/jsenv-theme.css +0 -0
  108. package/src/internal/{toolbar → dev_server/toolbar}/theme/light-theme.css +0 -0
  109. package/src/internal/{toolbar → dev_server/toolbar}/theme/toolbar.theme.js +0 -0
  110. package/src/internal/{toolbar → dev_server/toolbar}/toolbar.html +35 -42
  111. package/src/internal/{toolbar → dev_server/toolbar}/toolbar.injector.js +53 -125
  112. package/src/internal/{toolbar → dev_server/toolbar}/toolbar.main.css +0 -0
  113. package/src/internal/{toolbar → dev_server/toolbar}/toolbar.main.js +44 -31
  114. package/src/internal/{toolbar → dev_server/toolbar}/tooltip/tooltip.css +0 -0
  115. package/src/internal/{toolbar → dev_server/toolbar}/tooltip/tooltip.js +0 -0
  116. package/src/internal/{toolbar → dev_server/toolbar}/util/animation.js +0 -0
  117. package/src/internal/{toolbar → dev_server/toolbar}/util/dom.js +0 -0
  118. package/src/internal/{toolbar → dev_server/toolbar}/util/fetching.js +2 -2
  119. package/src/internal/{toolbar → dev_server/toolbar}/util/jsenvLogger.js +0 -0
  120. package/src/internal/{toolbar → dev_server/toolbar}/util/preferences.js +0 -0
  121. package/src/internal/{toolbar → dev_server/toolbar}/util/responsive.js +0 -0
  122. package/src/internal/{toolbar → dev_server/toolbar}/util/util.js +0 -0
  123. package/src/internal/{toolbar → dev_server/toolbar}/variant/variant.js +0 -0
  124. package/src/internal/generateGroupMap/one_runtime_compat.js +1 -1
  125. package/src/internal/generateGroupMap/runtime_compat_composition.js +1 -1
  126. package/src/internal/generateGroupMap/runtime_support.js +1 -1
  127. package/src/internal/jsenvInternalFiles.js +0 -84
  128. package/src/internal/jsenv_builds.js +19 -0
  129. package/src/internal/{runtime/node-feature-detect/feature-detect-dynamic-import.mjs → node_feature_detection/feature_detect_dynamic_import.mjs} +0 -0
  130. package/src/internal/{runtime/node-feature-detect/feature-detect-top-level-await.mjs → node_feature_detection/feature_detect_top_level_await.mjs} +0 -0
  131. package/src/internal/{runtime/node-feature-detect → node_feature_detection}/nodeSupportsDynamicImport.js +0 -0
  132. package/src/internal/node_feature_detection/nodeSupportsTopLevelAwait.js +16 -0
  133. package/src/internal/{runtime/createNodeRuntime/scanNodeRuntimeFeatures.js → node_feature_detection/node_feature_detection.js} +12 -13
  134. package/src/internal/{node-launcher → node_launcher}/createChildProcessOptions.js +0 -0
  135. package/src/internal/{node-launcher → node_launcher}/createControllableNodeProcess.js +9 -14
  136. package/src/internal/{node-launcher → node_launcher}/kill_process_tree.js +0 -0
  137. package/src/internal/{node-launcher → node_launcher}/processOptions.js +0 -0
  138. package/src/internal/{runtime/detectNode → node_runtime}/detectNode.js +0 -0
  139. package/src/internal/{runtime/createNodeRuntime → node_runtime}/evalSource.js +1 -1
  140. package/src/internal/{runtime/createNodeRuntime → node_runtime}/fetchSource.js +1 -1
  141. package/src/internal/{node-launcher → node_runtime}/nodeControllableFile.mjs +14 -11
  142. package/src/internal/{runtime/createNodeRuntime/createNodeExecutionWithDynamicImport.js → node_runtime/node_execution_dynamic_import.js} +34 -6
  143. package/src/internal/node_runtime/node_execution_performance.js +67 -0
  144. package/src/internal/{runtime/createNodeRuntime/createNodeExecutionWithSystemJs.js → node_runtime/node_execution_systemjs.js} +38 -24
  145. package/src/internal/{runtime/createNodeRuntime/createNodeSystem.js → node_runtime/node_system.js} +4 -4
  146. package/src/internal/runtime/computeCompileIdFromGroupId.js +1 -0
  147. package/src/internal/runtime/resolveGroup.js +1 -1
  148. package/src/internal/runtime/resolveRuntimeGroup.js +2 -2
  149. package/src/internal/{semantic-versioning → semantic_versioning}/findHighestVersion.js +0 -0
  150. package/src/internal/{semantic-versioning → semantic_versioning}/findLowestVersion.js +0 -0
  151. package/src/internal/{semantic-versioning → semantic_versioning}/index.js +0 -0
  152. package/src/internal/{semantic-versioning → semantic_versioning}/valueToVersion.js +0 -0
  153. package/src/internal/{semantic-versioning → semantic_versioning}/versionCompare.js +0 -0
  154. package/src/internal/{semantic-versioning → semantic_versioning}/versionIsAbove.js +0 -0
  155. package/src/internal/{semantic-versioning → semantic_versioning}/versionIsBelow.js +0 -0
  156. package/src/internal/{semantic-versioning → semantic_versioning}/versionIsEqual.js +0 -0
  157. package/src/launchBrowser.js +3 -3
  158. package/src/launchNode.js +33 -7
  159. package/src/requireUsingChildProcess.js +1 -1
  160. package/dist/jsenv_compile_proxy.js +0 -1339
  161. package/dist/jsenv_compile_proxy.js.map +0 -378
  162. package/dist/jsenv_exploring_index.js +0 -1092
  163. package/dist/jsenv_exploring_index.js.map +0 -353
  164. package/dist/jsenv_exploring_redirector.js +0 -1386
  165. package/dist/jsenv_exploring_redirector.js.map +0 -384
  166. package/dist/jsenv_toolbar.js +0 -3347
  167. package/dist/jsenv_toolbar.js.map +0 -846
  168. package/dist/jsenv_toolbar_injector.js.map +0 -320
  169. package/src/internal/browser-launcher/jsenv_compile_proxy.html +0 -13
  170. package/src/internal/browser-launcher/jsenv_compile_proxy.js +0 -5
  171. package/src/internal/exploring/exploring.redirector.html +0 -13
  172. package/src/internal/exploring/exploring.redirector.js +0 -28
  173. package/src/internal/node-launcher/node-js-file.js +0 -110
  174. package/src/internal/runtime/createNodeRuntime/createNodeRuntime.js +0 -32
  175. package/src/internal/runtime/node-feature-detect/nodeSupportsTopLevelAwait.js +0 -18
  176. package/src/internal/toolbar/backtolist/toolbar.backtolist.js +0 -33
  177. package/src/internal/toolbar/eventsource/connectCompileServerEventSource.js +0 -74
  178. package/src/internal/toolbar/eventsource/toolbar.eventsource.js +0 -239
  179. package/src/internal/toolbar/notification/toolbar.notification.js +0 -121
  180. package/src/nodeRuntime.js +0 -5
@@ -1,33 +0,0 @@
1
- export const renderBackToListInToolbar = ({
2
- outDirectoryRelativeUrl,
3
- exploringHtmlFileRelativeUrl,
4
- }) => {
5
- const exploringHtmlFileUrl = `/${outDirectoryRelativeUrl}otherwise/${exploringHtmlFileRelativeUrl}`
6
-
7
- document.querySelector("#file-list-link a").href = exploringHtmlFileUrl
8
- document.querySelector("#file-list-link a").onclick = (clickEvent) => {
9
- if (clickEvent.defaultPrevented) {
10
- return
11
- }
12
-
13
- if (isClickToOpenTab(clickEvent)) {
14
- return
15
- }
16
-
17
- window.parent.location.href = exploringHtmlFileUrl
18
- }
19
- }
20
-
21
- const isClickToOpenTab = (clickEvent) => {
22
- if (clickEvent.button !== 0) {
23
- // Chrome < 55 fires a click event when the middle mouse button is pressed
24
- return true
25
- }
26
- if (clickEvent.metaKey) {
27
- return true
28
- }
29
- if (clickEvent.ctrlKey) {
30
- return true
31
- }
32
- return false
33
- }
@@ -1,74 +0,0 @@
1
- import { connectEventSource } from "./connectEventSource.js"
2
- import { jsenvLogger } from "../util/jsenvLogger.js"
3
-
4
- export const connectCompileServerEventSource = (
5
- fileRelativeUrl,
6
- {
7
- onFileModified,
8
- onFileRemoved,
9
- onConnecting,
10
- onConnectionCancelled,
11
- onConnectionFailed,
12
- onConnected,
13
- lastEventId,
14
- },
15
- ) => {
16
- const eventSourceUrl = `${window.origin}/${fileRelativeUrl}`
17
-
18
- let cancel = () => {}
19
-
20
- const connect = () => {
21
- return new Promise((resolve) => {
22
- cancel = connectEventSource(
23
- eventSourceUrl,
24
- {
25
- "file-modified": ({ data }) => {
26
- jsenvLogger.debug(`${data} modified`)
27
- onFileModified(data)
28
- },
29
- "file-removed": ({ data }) => {
30
- jsenvLogger.debug(`${data} removed`)
31
- onFileRemoved(data)
32
- },
33
- },
34
- {
35
- connecting: ({ cancel }) => {
36
- jsenvLogger.debug(`connecting to ${eventSourceUrl}`)
37
- onConnecting({
38
- cancel: () => {
39
- cancel()
40
- },
41
- })
42
- },
43
- connected: ({ cancel }) => {
44
- jsenvLogger.debug(`connected to ${eventSourceUrl}`)
45
- resolve(true)
46
- onConnected({
47
- cancel: () => {
48
- cancel()
49
- },
50
- })
51
- },
52
- cancelled: ({ connect }) => {
53
- jsenvLogger.debug(`disconnected from ${eventSourceUrl}`)
54
- resolve(false)
55
- onConnectionCancelled({ connect })
56
- },
57
- failed: ({ connect }) => {
58
- jsenvLogger.debug(`disconnected from ${eventSourceUrl}`)
59
- resolve(false)
60
- onConnectionFailed({ connect })
61
- },
62
- retryMaxAttempt: Infinity,
63
- retryAllocatedMs: 20 * 1000,
64
- lastEventId,
65
- },
66
- )
67
- })
68
- }
69
-
70
- return {
71
- connect,
72
- disconnect: () => cancel(),
73
- }
74
- }
@@ -1,239 +0,0 @@
1
- import { removeForceHideElement } from "../util/dom.js"
2
- import { createPromiseAndHooks } from "../util/util.js"
3
- import { createPreference } from "../util/preferences.js"
4
- import { enableVariant } from "../variant/variant.js"
5
-
6
- import {
7
- toggleTooltip,
8
- removeAutoShowTooltip,
9
- autoShowTooltip,
10
- } from "../tooltip/tooltip.js"
11
- import { connectCompileServerEventSource } from "./connectCompileServerEventSource.js"
12
-
13
- const livereloadingPreference = createPreference("livereloading")
14
- let eventSourceState = "default"
15
- let livereloadingAvailableOnServer = false
16
-
17
- export const initToolbarEventSource = ({
18
- executedFileRelativeUrl,
19
- livereloading,
20
- }) => {
21
- const getLivereloadCallback = (originalFileProjectRelativeUrl) => {
22
- const callbacks = window.parent.__jsenv__.livereloadingCallbacks
23
- return callbacks[originalFileProjectRelativeUrl]
24
- }
25
-
26
- removeForceHideElement(document.querySelector("#eventsource-indicator"))
27
- connectEventSource({ executedFileRelativeUrl, getLivereloadCallback })
28
- livereloadingAvailableOnServer = livereloading
29
- if (!livereloadingAvailableOnServer) {
30
- disableLivereloadSetting()
31
- }
32
-
33
- const livereloadCheckbox = document.querySelector("#toggle-livereload")
34
- livereloadCheckbox.checked = shouldLivereload()
35
- livereloadCheckbox.onchange = () => {
36
- livereloadingPreference.set(livereloadCheckbox.checked)
37
- updateEventSourceIndicator()
38
- }
39
- updateEventSourceIndicator()
40
- }
41
-
42
- const shouldLivereload = () => {
43
- return livereloadingAvailableOnServer && getLivereloadingPreference()
44
- }
45
-
46
- const disableLivereloadSetting = () => {
47
- document
48
- .querySelector(".settings-livereload")
49
- .setAttribute("data-disabled", "true")
50
- document
51
- .querySelector(".settings-livereload")
52
- .setAttribute("title", `Livereload not available: disabled by server`)
53
- document.querySelector("#toggle-livereload").disabled = true
54
- }
55
-
56
- const parentEventSource = window.parent.__jsenv_eventsource__()
57
- const latestChangeMap = parentEventSource.latestChangeMap
58
- let eventSourceHooks = {}
59
- let eventSourceConnection
60
- let connectionReadyPromise
61
-
62
- const handleFileChange = ({ file, eventType, livereloadCallback }) => {
63
- latestChangeMap[file] = eventType
64
- updateEventSourceIndicator()
65
-
66
- if (shouldLivereload()) {
67
- if (livereloadCallback) {
68
- livereloadCallback({
69
- file,
70
- latestChangeMap,
71
- reloadPage,
72
- })
73
- } else if (
74
- file.endsWith(".css") ||
75
- file.endsWith(".scss") ||
76
- file.endsWith(".sass")
77
- ) {
78
- reloadAllCss()
79
- delete latestChangeMap[file]
80
- updateEventSourceIndicator()
81
- } else {
82
- reloadPage()
83
- }
84
- }
85
- }
86
-
87
- const reloadAllCss = () => {
88
- const links = Array.from(window.parent.document.getElementsByTagName("link"))
89
- links.forEach((link) => {
90
- if (link.rel === "stylesheet") {
91
- const url = new URL(link.href)
92
- url.searchParams.set("t", Date.now())
93
- link.href = String(url)
94
- }
95
- })
96
- }
97
-
98
- const reloadPage = () => {
99
- window.parent.location.reload(true)
100
- }
101
-
102
- const reloadChanges = () => {
103
- const fullReloadRequired = Object.keys(latestChangeMap).some(
104
- (key) => !key.endsWith(".css"),
105
- )
106
- if (fullReloadRequired) {
107
- reloadPage()
108
- return
109
- }
110
- const cssReloadRequired = Object.keys(latestChangeMap).some((key) =>
111
- key.endsWith(".css"),
112
- )
113
- if (cssReloadRequired) {
114
- reloadAllCss()
115
- Object.keys(latestChangeMap).forEach((key) => {
116
- if (key.endsWith(".css")) {
117
- delete latestChangeMap[key]
118
- }
119
- updateEventSourceIndicator()
120
- })
121
- }
122
- }
123
-
124
- const connectEventSource = ({
125
- executedFileRelativeUrl,
126
- getLivereloadCallback,
127
- }) => {
128
- updateEventSourceIndicator()
129
- connectionReadyPromise = createPromiseAndHooks()
130
-
131
- eventSourceConnection = connectCompileServerEventSource(
132
- executedFileRelativeUrl,
133
- {
134
- onFileModified: (file) => {
135
- handleFileChange({
136
- file,
137
- eventType: "modified",
138
- livereloadCallback: getLivereloadCallback(file),
139
- })
140
- },
141
- onFileRemoved: (file) => {
142
- handleFileChange({
143
- file,
144
- eventType: "removed",
145
- livereloadCallback: getLivereloadCallback(file),
146
- })
147
- },
148
- onFileAdded: (file) => {
149
- handleFileChange({
150
- file,
151
- eventType: "added",
152
- livereloadCallback: getLivereloadCallback(file),
153
- })
154
- },
155
- onConnecting: ({ cancel }) => {
156
- eventSourceState = "connecting"
157
- eventSourceHooks = { abort: cancel }
158
- updateEventSourceIndicator()
159
- },
160
- onConnectionCancelled: ({ connect }) => {
161
- eventSourceState = "disabled"
162
- eventSourceHooks = { connect }
163
- updateEventSourceIndicator()
164
- },
165
- onConnectionFailed: ({ connect }) => {
166
- eventSourceState = "failed"
167
- eventSourceHooks = { reconnect: connect }
168
- updateEventSourceIndicator()
169
- },
170
- onConnected: ({ cancel }) => {
171
- eventSourceState = "connected"
172
- eventSourceHooks = { disconnect: cancel }
173
- updateEventSourceIndicator()
174
- connectionReadyPromise.resolve()
175
- parentEventSource.disconnect()
176
- },
177
- lastEventId: parentEventSource.lastEventId,
178
- },
179
- )
180
-
181
- eventSourceConnection.connect()
182
- }
183
-
184
- const getLivereloadingPreference = () => {
185
- return livereloadingPreference.has() ? livereloadingPreference.get() : true
186
- }
187
-
188
- export const disconnectEventSource = () => {
189
- if (eventSourceConnection) {
190
- eventSourceConnection.disconnect()
191
- eventSourceConnection = undefined
192
- }
193
- }
194
-
195
- export const waitEventSourceReady = () => connectionReadyPromise
196
-
197
- const updateEventSourceIndicator = () => {
198
- const { connect, abort, reconnect } = eventSourceHooks
199
-
200
- const eventSourceIndicator = document.querySelector("#eventsource-indicator")
201
- const changeCount = Object.keys(latestChangeMap).length
202
- enableVariant(eventSourceIndicator, {
203
- eventsource: eventSourceState,
204
- livereload: shouldLivereload() ? "on" : "off",
205
- changes: changeCount > 0 ? "yes" : "no",
206
- })
207
-
208
- const variantNode = document.querySelector(
209
- "#eventsource-indicator > [data-when-active]",
210
- )
211
- variantNode.querySelector("button").onclick = () => {
212
- toggleTooltip(eventSourceIndicator)
213
- }
214
-
215
- if (eventSourceState === "disabled") {
216
- variantNode.querySelector("a").onclick = connect
217
- } else if (eventSourceState === "connecting") {
218
- variantNode.querySelector("a").onclick = abort
219
- } else if (eventSourceState === "connected") {
220
- removeAutoShowTooltip(eventSourceIndicator)
221
- if (changeCount) {
222
- const changeLink = variantNode.querySelector(".eventsource-changes-link")
223
- changeLink.innerHTML = changeCount
224
- changeLink.onclick = () => {
225
- console.log(
226
- JSON.stringify(latestChangeMap, null, " "),
227
- latestChangeMap,
228
- )
229
- // eslint-disable-next-line no-alert
230
- window.parent.alert(JSON.stringify(latestChangeMap, null, " "))
231
- }
232
- variantNode.querySelector(".eventsource-reload-link").onclick =
233
- reloadChanges
234
- }
235
- } else if (eventSourceState === "failed") {
236
- autoShowTooltip(eventSourceIndicator)
237
- variantNode.querySelector("a").onclick = reconnect
238
- }
239
- }
@@ -1,121 +0,0 @@
1
- import { createPreference } from "../util/preferences.js"
2
-
3
- const notificationPreference = createPreference("notification")
4
-
5
- const arrayOfOpenedNotifications = []
6
- export const renderToolbarNotification = () => {
7
- const notifCheckbox = document.querySelector("#toggle-notifs")
8
- notifCheckbox.checked = getNotificationPreference()
9
- notifCheckbox.onchange = () => {
10
- setNotificationPreference(notifCheckbox.checked)
11
- if (notifCheckbox.checked) {
12
- // request permission early
13
- // especially useful on firefox where you can request permission
14
- // only inside a user generated event such as this onchange handler
15
- requestPermission()
16
- } else {
17
- // slice because arrayOfOpenedNotifications can be mutated while looping
18
- arrayOfOpenedNotifications.slice().forEach((notification) => {
19
- notification.close()
20
- })
21
- }
22
- }
23
- }
24
-
25
- export const notifyExecutionResult = (
26
- executedFileRelativeUrl,
27
- execution,
28
- previousExecution,
29
- ) => {
30
- const notificationEnabled = getNotificationPreference()
31
- if (!notificationEnabled) return
32
-
33
- const notificationOptions = {
34
- lang: "en",
35
- icon: getFaviconHref(),
36
- clickToFocus: true,
37
- clickToClose: true,
38
- }
39
-
40
- if (execution.status === "errored") {
41
- if (previousExecution) {
42
- if (previousExecution.status === "completed") {
43
- notify("Broken", {
44
- ...notificationOptions,
45
- body: `${executedFileRelativeUrl} execution now failing.`,
46
- })
47
- } else {
48
- notify("Still failing", {
49
- ...notificationOptions,
50
- body: `${executedFileRelativeUrl} execution still failing.`,
51
- })
52
- }
53
- } else {
54
- notify("Failing", {
55
- ...notificationOptions,
56
- body: `${executedFileRelativeUrl} execution failed.`,
57
- })
58
- }
59
- } else if (previousExecution && previousExecution.status === "errored") {
60
- notify("Fixed", {
61
- ...notificationOptions,
62
- body: `${executedFileRelativeUrl} execution fixed.`,
63
- })
64
- }
65
- }
66
-
67
- const notificationAvailable = typeof window.Notification === "function"
68
-
69
- const getNotificationPreference = () =>
70
- notificationPreference.has() ? notificationPreference.get() : true
71
-
72
- const setNotificationPreference = (value) => notificationPreference.set(value)
73
-
74
- const getFaviconHref = () => {
75
- const link = document.querySelector('link[rel="icon"]')
76
- return link ? link.href : undefined
77
- }
78
-
79
- const notify = notificationAvailable
80
- ? async (
81
- title,
82
- { clickToFocus = false, clickToClose = false, ...options } = {},
83
- ) => {
84
- const permission = await requestPermission()
85
- if (permission === "granted") {
86
- const notification = new Notification(title, options)
87
- arrayOfOpenedNotifications.push(notification)
88
- notification.onclick = () => {
89
- // but if the user navigated inbetween
90
- // focusing window will show something else
91
- // in that case it could be great to do something
92
- // maybe like showing a message saying this execution
93
- // is no longer visible
94
- // we could also navigauate to this file execution but
95
- // there is no guarantee re-executing the file would give same output
96
- // and it would also trigger an other notification
97
- if (clickToFocus) window.focus()
98
- if (clickToClose) notification.close()
99
- }
100
- notification.onclose = () => {
101
- const index = arrayOfOpenedNotifications.indexOf(notification)
102
- if (index > -1) {
103
- arrayOfOpenedNotifications.splice(index, 1)
104
- }
105
- }
106
- return notification
107
- }
108
- return null
109
- }
110
- : () => {}
111
-
112
- let permissionPromise
113
- const requestPermission = notificationAvailable
114
- ? async () => {
115
- if (permissionPromise) return permissionPromise
116
- permissionPromise = Notification.requestPermission()
117
- const permission = await permissionPromise
118
- permissionPromise = undefined
119
- return permission
120
- }
121
- : () => Promise.resolve("denied")
@@ -1,5 +0,0 @@
1
- import { createNodeRuntime } from "./internal/runtime/createNodeRuntime/createNodeRuntime.js"
2
-
3
- export const nodeRuntime = {
4
- create: createNodeRuntime,
5
- }