@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.
- package/{license → LICENSE} +0 -0
- package/dist/browser_runtime/browser_runtime-fbd309a1.js +5137 -0
- package/dist/browser_runtime/browser_runtime-fbd309a1.js.map +1064 -0
- package/dist/{jsenv_browser_system.js → browser_system/browser_system-29eda202.js} +12 -12
- package/dist/{jsenv_browser_system.js.map → browser_system/browser_system-29eda202.js.map} +64 -64
- package/dist/build_manifest.js +12 -0
- package/dist/compile_proxy/assets/s.js-749702e8.map +242 -0
- package/dist/compile_proxy/compile_proxy-405777e6.html +2074 -0
- package/dist/compile_proxy/compile_proxy.html__inline__20-39c0801c.js.map +385 -0
- package/dist/event_source_client/event_source_client-9f14c8b9.js +356 -0
- package/dist/event_source_client/event_source_client-9f14c8b9.js.map +127 -0
- package/dist/redirector/assets/s.js-749702e8.map +242 -0
- package/dist/redirector/redirector-237cd168.html +2118 -0
- package/dist/redirector/redirector.html__inline__15-33acb0b9.js.map +390 -0
- package/dist/toolbar/assets/compilation.css-209d68b4.map +12 -0
- package/dist/toolbar/assets/eventsource.css-38cd0a36.map +12 -0
- package/dist/toolbar/assets/execution.css-0ebe522f.map +12 -0
- package/dist/toolbar/assets/focus.css-3f9c156d.map +12 -0
- package/dist/toolbar/assets/light-theme.css-78b19a80.map +12 -0
- package/dist/toolbar/assets/overflow-menu.css-d9688a1c.map +12 -0
- package/dist/toolbar/assets/s.js-749702e8.map +242 -0
- package/dist/toolbar/assets/settings.css-2b81b245.map +12 -0
- package/dist/toolbar/assets/toolbar.main.css-846920e9.map +28 -0
- package/dist/toolbar/assets/tooltip.css-03395ee6.map +12 -0
- package/dist/toolbar/toolbar-d3d98c2e.html +4778 -0
- package/dist/toolbar/toolbar.main-cab36c15.js.map +795 -0
- package/dist/toolbar_injector/assets/jsenv-logo-188b9ca6.svg +95 -0
- package/dist/{jsenv_toolbar_injector.js → toolbar_injector/toolbar_injector-01f71ce3.js} +62 -137
- package/dist/toolbar_injector/toolbar_injector-01f71ce3.js.map +294 -0
- package/main.js +0 -1
- package/package.json +4 -2
- package/readme.md +10 -7
- package/src/buildProject.js +8 -2
- package/src/dev_server.js +45 -102
- package/src/importUsingChildProcess.js +1 -1
- package/src/internal/{runtime/detectBrowser/detectBrowser.js → browser_detection/browser_detection.js} +0 -0
- package/src/internal/{runtime/detectBrowser → browser_detection}/detectAndroid.js +0 -0
- package/src/internal/{runtime/detectBrowser → browser_detection}/detectChrome.js +0 -0
- package/src/internal/{runtime/detectBrowser → browser_detection}/detectEdge.js +0 -0
- package/src/internal/{runtime/detectBrowser → browser_detection}/detectElectron.js +0 -0
- package/src/internal/{runtime/detectBrowser → browser_detection}/detectFirefox.js +0 -0
- package/src/internal/{runtime/detectBrowser → browser_detection}/detectIOS.js +0 -0
- package/src/internal/{runtime/detectBrowser → browser_detection}/detectInternetExplorer.js +0 -0
- package/src/internal/{runtime/detectBrowser → browser_detection}/detectOpera.js +0 -0
- package/src/internal/{runtime/detectBrowser → browser_detection}/detectSafari.js +0 -0
- package/src/internal/{runtime/detectBrowser → browser_detection}/util.js +0 -0
- package/src/internal/{runtime/createBrowserRuntime/scanBrowserRuntimeFeatures.js → browser_feature_detection/browser_feature_detection.js} +116 -81
- package/src/internal/browser_feature_detection/compile_proxy.html +27 -0
- package/src/internal/{browser-launcher → browser_launcher}/createSharing.js +0 -0
- package/src/internal/{browser-launcher → browser_launcher}/executeHtmlFile.js +7 -4
- package/src/internal/{browser-launcher → browser_launcher}/trackPageToNotify.js +0 -0
- package/src/internal/{browser-launcher/jsenv-browser-system.js → browser_runtime/browser_runtime.js} +4 -4
- package/src/internal/{runtime/createBrowserRuntime/createBrowserSystem.js → browser_runtime/browser_system.js} +3 -2
- package/src/internal/{runtime/createBrowserRuntime → browser_runtime}/createBrowserRuntime.js +7 -5
- package/src/internal/{browser-launcher → browser_runtime}/displayErrorInDocument.js +0 -0
- package/src/internal/{browser-launcher → browser_runtime}/displayErrorNotification.js +2 -4
- package/src/internal/{runtime/createBrowserRuntime → browser_runtime}/evalSource.js +2 -0
- package/src/internal/{runtime/createBrowserRuntime → browser_runtime}/makeNamespaceTransferable.js +0 -0
- package/src/internal/{browser-utils → browser_utils}/fetch-browser.js +2 -0
- package/src/internal/{browser-utils → browser_utils}/fetchAndEvalUsingFetch.js +3 -0
- package/src/internal/{browser-utils → browser_utils}/fetchAndEvalUsingScript.js +2 -0
- package/src/internal/{browser-utils → browser_utils}/fetchJson.js +0 -0
- package/src/internal/{browser-utils → browser_utils}/fetchUsingXHR.js +4 -4
- package/src/internal/building/buildUsingRollup.js +4 -0
- package/src/internal/building/createJsenvRollupPlugin.js +19 -9
- package/src/internal/building/css/applyPostCss.js +19 -8
- package/src/internal/building/css/moveCssUrls.js +44 -0
- package/src/internal/building/css/parseCssRessource.js +67 -17
- package/src/internal/building/css/parseCssUrls.js +29 -23
- package/src/internal/building/css/postcss_plugin_url_visitor.js +11 -20
- package/src/internal/building/css/replaceCssUrls.js +38 -19
- package/src/internal/building/css_module.js +6 -10
- package/src/internal/building/html/parseHtmlRessource.js +37 -11
- package/src/internal/building/parseRessource.js +3 -0
- package/src/internal/building/ressource_builder.js +12 -3
- package/src/internal/compiling/babel_plugin_import_assertions.js +1 -2
- package/src/internal/compiling/compile-directory/validateCache.js +0 -5
- package/src/internal/compiling/compileFile.js +17 -54
- package/src/internal/compiling/createCompiledFileService.js +2 -0
- package/src/internal/compiling/html_source_file_service.js +49 -13
- package/src/internal/compiling/jsenvCompilerForHtml.js +29 -12
- package/src/internal/compiling/startCompileServer.js +39 -33
- package/src/internal/dev_server/event_source_client/event_source_client.js +63 -0
- package/src/internal/{toolbar/eventsource/connectEventSource.js → dev_server/event_source_client/event_source_connection.js} +66 -88
- package/src/internal/dev_server/event_source_client/file_changes.js +82 -0
- package/src/internal/dev_server/event_source_client/livereload_preference.js +13 -0
- package/src/internal/{exploring → dev_server/exploring}/exploring.css +0 -0
- package/src/internal/{exploring → dev_server/exploring}/exploring.html +8 -3
- package/src/internal/{exploring → dev_server/exploring}/exploring.js +0 -0
- package/src/internal/{exploring → dev_server/exploring}/fetchExploringJson.js +4 -9
- package/src/internal/dev_server/redirector/redirector.html +48 -0
- package/src/internal/{toolbar → dev_server/toolbar}/animation/toolbar.animation.js +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/compilation/compilation.css +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/compilation/toolbar.compilation.js +4 -7
- package/src/internal/{toolbar → dev_server/toolbar}/eventsource/eventsource.css +0 -0
- package/src/internal/dev_server/toolbar/eventsource/toolbar.eventsource.js +83 -0
- package/src/internal/{toolbar → dev_server/toolbar}/execution/execution.css +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/execution/toolbar.execution.js +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/focus/focus.css +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/focus/toolbar.focus.js +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/jsenv-logo.svg +0 -0
- package/src/internal/dev_server/toolbar/notification/toolbar.notification.js +152 -0
- package/src/internal/{toolbar → dev_server/toolbar}/responsive/overflow-menu.css +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/responsive/toolbar.responsive.js +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/settings/settings.css +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/settings/toolbar.settings.js +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/theme/jsenv-theme.css +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/theme/light-theme.css +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/theme/toolbar.theme.js +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/toolbar.html +35 -42
- package/src/internal/{toolbar → dev_server/toolbar}/toolbar.injector.js +53 -125
- package/src/internal/{toolbar → dev_server/toolbar}/toolbar.main.css +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/toolbar.main.js +44 -31
- package/src/internal/{toolbar → dev_server/toolbar}/tooltip/tooltip.css +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/tooltip/tooltip.js +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/util/animation.js +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/util/dom.js +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/util/fetching.js +2 -2
- package/src/internal/{toolbar → dev_server/toolbar}/util/jsenvLogger.js +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/util/preferences.js +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/util/responsive.js +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/util/util.js +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/variant/variant.js +0 -0
- package/src/internal/generateGroupMap/one_runtime_compat.js +1 -1
- package/src/internal/generateGroupMap/runtime_compat_composition.js +1 -1
- package/src/internal/generateGroupMap/runtime_support.js +1 -1
- package/src/internal/jsenvInternalFiles.js +0 -84
- package/src/internal/jsenv_builds.js +19 -0
- package/src/internal/{runtime/node-feature-detect/feature-detect-dynamic-import.mjs → node_feature_detection/feature_detect_dynamic_import.mjs} +0 -0
- package/src/internal/{runtime/node-feature-detect/feature-detect-top-level-await.mjs → node_feature_detection/feature_detect_top_level_await.mjs} +0 -0
- package/src/internal/{runtime/node-feature-detect → node_feature_detection}/nodeSupportsDynamicImport.js +0 -0
- package/src/internal/node_feature_detection/nodeSupportsTopLevelAwait.js +16 -0
- package/src/internal/{runtime/createNodeRuntime/scanNodeRuntimeFeatures.js → node_feature_detection/node_feature_detection.js} +12 -13
- package/src/internal/{node-launcher → node_launcher}/createChildProcessOptions.js +0 -0
- package/src/internal/{node-launcher → node_launcher}/createControllableNodeProcess.js +9 -14
- package/src/internal/{node-launcher → node_launcher}/kill_process_tree.js +0 -0
- package/src/internal/{node-launcher → node_launcher}/processOptions.js +0 -0
- package/src/internal/{runtime/detectNode → node_runtime}/detectNode.js +0 -0
- package/src/internal/{runtime/createNodeRuntime → node_runtime}/evalSource.js +1 -1
- package/src/internal/{runtime/createNodeRuntime → node_runtime}/fetchSource.js +1 -1
- package/src/internal/{node-launcher → node_runtime}/nodeControllableFile.mjs +14 -11
- package/src/internal/{runtime/createNodeRuntime/createNodeExecutionWithDynamicImport.js → node_runtime/node_execution_dynamic_import.js} +34 -6
- package/src/internal/node_runtime/node_execution_performance.js +67 -0
- package/src/internal/{runtime/createNodeRuntime/createNodeExecutionWithSystemJs.js → node_runtime/node_execution_systemjs.js} +38 -24
- package/src/internal/{runtime/createNodeRuntime/createNodeSystem.js → node_runtime/node_system.js} +4 -4
- package/src/internal/runtime/computeCompileIdFromGroupId.js +1 -0
- package/src/internal/runtime/resolveGroup.js +1 -1
- package/src/internal/runtime/resolveRuntimeGroup.js +2 -2
- package/src/internal/{semantic-versioning → semantic_versioning}/findHighestVersion.js +0 -0
- package/src/internal/{semantic-versioning → semantic_versioning}/findLowestVersion.js +0 -0
- package/src/internal/{semantic-versioning → semantic_versioning}/index.js +0 -0
- package/src/internal/{semantic-versioning → semantic_versioning}/valueToVersion.js +0 -0
- package/src/internal/{semantic-versioning → semantic_versioning}/versionCompare.js +0 -0
- package/src/internal/{semantic-versioning → semantic_versioning}/versionIsAbove.js +0 -0
- package/src/internal/{semantic-versioning → semantic_versioning}/versionIsBelow.js +0 -0
- package/src/internal/{semantic-versioning → semantic_versioning}/versionIsEqual.js +0 -0
- package/src/launchBrowser.js +3 -3
- package/src/launchNode.js +33 -7
- package/src/requireUsingChildProcess.js +1 -1
- package/dist/jsenv_compile_proxy.js +0 -1339
- package/dist/jsenv_compile_proxy.js.map +0 -378
- package/dist/jsenv_exploring_index.js +0 -1092
- package/dist/jsenv_exploring_index.js.map +0 -353
- package/dist/jsenv_exploring_redirector.js +0 -1386
- package/dist/jsenv_exploring_redirector.js.map +0 -384
- package/dist/jsenv_toolbar.js +0 -3347
- package/dist/jsenv_toolbar.js.map +0 -846
- package/dist/jsenv_toolbar_injector.js.map +0 -320
- package/src/internal/browser-launcher/jsenv_compile_proxy.html +0 -13
- package/src/internal/browser-launcher/jsenv_compile_proxy.js +0 -5
- package/src/internal/exploring/exploring.redirector.html +0 -13
- package/src/internal/exploring/exploring.redirector.js +0 -28
- package/src/internal/node-launcher/node-js-file.js +0 -110
- package/src/internal/runtime/createNodeRuntime/createNodeRuntime.js +0 -32
- package/src/internal/runtime/node-feature-detect/nodeSupportsTopLevelAwait.js +0 -18
- package/src/internal/toolbar/backtolist/toolbar.backtolist.js +0 -33
- package/src/internal/toolbar/eventsource/connectCompileServerEventSource.js +0 -74
- package/src/internal/toolbar/eventsource/toolbar.eventsource.js +0 -239
- package/src/internal/toolbar/notification/toolbar.notification.js +0 -121
- 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")
|