@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
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/* eslint-env browser */
|
|
2
|
+
|
|
3
|
+
import { createEventSourceConnection } from "./event_source_connection.js"
|
|
4
|
+
import {
|
|
5
|
+
getFileChanges,
|
|
6
|
+
addFileChange,
|
|
7
|
+
setFileChangeCallback,
|
|
8
|
+
reloadIfNeeded,
|
|
9
|
+
} from "./file_changes.js"
|
|
10
|
+
import {
|
|
11
|
+
isLivereloadEnabled,
|
|
12
|
+
setLivereloadPreference,
|
|
13
|
+
} from "./livereload_preference.js"
|
|
14
|
+
|
|
15
|
+
const eventsourceConnection = createEventSourceConnection(
|
|
16
|
+
document.location.href,
|
|
17
|
+
{
|
|
18
|
+
"file-added": ({ data }) => {
|
|
19
|
+
addFileChange({
|
|
20
|
+
file: data,
|
|
21
|
+
eventType: "added",
|
|
22
|
+
})
|
|
23
|
+
},
|
|
24
|
+
"file-modified": ({ data }) => {
|
|
25
|
+
addFileChange({
|
|
26
|
+
file: data,
|
|
27
|
+
eventType: "modified",
|
|
28
|
+
})
|
|
29
|
+
},
|
|
30
|
+
"file-removed": ({ data }) => {
|
|
31
|
+
addFileChange({
|
|
32
|
+
file: data,
|
|
33
|
+
eventType: "removed",
|
|
34
|
+
})
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
retryMaxAttempt: Infinity,
|
|
39
|
+
retryAllocatedMs: 20 * 1000,
|
|
40
|
+
},
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
const {
|
|
44
|
+
connect,
|
|
45
|
+
disconnect,
|
|
46
|
+
setConnectionStatusChangeCallback,
|
|
47
|
+
getConnectionStatus,
|
|
48
|
+
} = eventsourceConnection
|
|
49
|
+
|
|
50
|
+
connect()
|
|
51
|
+
|
|
52
|
+
window.__jsenv_event_source_client__ = {
|
|
53
|
+
connect,
|
|
54
|
+
disconnect,
|
|
55
|
+
getConnectionStatus,
|
|
56
|
+
setConnectionStatusChangeCallback,
|
|
57
|
+
getFileChanges,
|
|
58
|
+
addFileChange,
|
|
59
|
+
setFileChangeCallback,
|
|
60
|
+
reloadIfNeeded,
|
|
61
|
+
isLivereloadEnabled,
|
|
62
|
+
setLivereloadPreference,
|
|
63
|
+
}
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/* eslint-env browser */
|
|
2
|
+
|
|
3
|
+
export const createEventSourceConnection = (
|
|
2
4
|
eventSourceUrl,
|
|
3
5
|
events = {},
|
|
4
|
-
{
|
|
5
|
-
connecting = () => {},
|
|
6
|
-
connected = () => {},
|
|
7
|
-
cancelled = () => {},
|
|
8
|
-
failed = () => {},
|
|
9
|
-
retryMaxAttempt = Infinity,
|
|
10
|
-
retryAllocatedMs = Infinity,
|
|
11
|
-
lastEventId,
|
|
12
|
-
} = {},
|
|
6
|
+
{ retryMaxAttempt = Infinity, retryAllocatedMs = Infinity, lastEventId } = {},
|
|
13
7
|
) => {
|
|
14
8
|
const { EventSource } = window
|
|
15
9
|
if (typeof EventSource !== "function") {
|
|
@@ -17,83 +11,57 @@ export const connectEventSource = (
|
|
|
17
11
|
}
|
|
18
12
|
|
|
19
13
|
const eventSourceOrigin = new URL(eventSourceUrl).origin
|
|
14
|
+
Object.keys(events).forEach((eventName) => {
|
|
15
|
+
const eventCallback = events[eventName]
|
|
16
|
+
events[eventName] = (e) => {
|
|
17
|
+
if (e.origin === eventSourceOrigin) {
|
|
18
|
+
if (e.lastEventId) {
|
|
19
|
+
lastEventId = e.lastEventId
|
|
20
|
+
}
|
|
21
|
+
eventCallback(e)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
})
|
|
20
25
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
let
|
|
26
|
+
let connectionStatus = "default"
|
|
27
|
+
let connectionStatusChangeCallback = () => {}
|
|
28
|
+
let _disconnect = () => {}
|
|
24
29
|
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
)
|
|
30
|
+
const goToStatus = (newStatus) => {
|
|
31
|
+
if (newStatus !== connectionStatus) {
|
|
32
|
+
connectionStatus = newStatus
|
|
33
|
+
connectionStatusChangeCallback()
|
|
34
|
+
}
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
const attemptConnection = (url) => {
|
|
34
38
|
const eventSource = new EventSource(url, {
|
|
35
39
|
withCredentials: true,
|
|
36
40
|
})
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
_disconnect = () => {
|
|
42
|
+
if (
|
|
43
|
+
connectionStatus !== "connecting" &&
|
|
44
|
+
connectionStatus !== "connected"
|
|
45
|
+
) {
|
|
46
|
+
console.warn(
|
|
47
|
+
`disconnect() ignored because connection is ${connectionStatus}`,
|
|
48
|
+
)
|
|
42
49
|
return
|
|
43
50
|
}
|
|
44
|
-
connectionStatus = "aborted"
|
|
45
51
|
eventSource.onerror = undefined
|
|
46
52
|
eventSource.close()
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
eventSource.onopen = () => {
|
|
53
|
-
connectionStatus = "connected"
|
|
54
|
-
const disconnect = () => {
|
|
55
|
-
if (connectionStatus !== "connected") {
|
|
56
|
-
console.warn(
|
|
57
|
-
`disconnect ignored because connection is ${connectionStatus}`,
|
|
58
|
-
)
|
|
59
|
-
return
|
|
60
|
-
}
|
|
61
|
-
connectionStatus = "disconnected"
|
|
62
|
-
eventSource.onerror = undefined
|
|
63
|
-
eventSource.close()
|
|
64
|
-
cancelled({ connect: reconnect })
|
|
65
|
-
}
|
|
66
|
-
cancelCurrentConnection = disconnect
|
|
67
|
-
connected({ cancel: disconnect })
|
|
53
|
+
Object.keys(events).forEach((eventName) => {
|
|
54
|
+
eventSource.removeEventListener(eventName, events[eventName])
|
|
55
|
+
})
|
|
56
|
+
goToStatus("disconnected")
|
|
68
57
|
}
|
|
69
|
-
|
|
70
58
|
let retryCount = 0
|
|
71
59
|
let firstRetryMs = Date.now()
|
|
72
|
-
|
|
73
60
|
eventSource.onerror = (errorEvent) => {
|
|
74
|
-
const considerFailed = () => {
|
|
75
|
-
connectionStatus = "disconnected"
|
|
76
|
-
failed({
|
|
77
|
-
cancel: () => {
|
|
78
|
-
if (connectionStatus !== "failed") {
|
|
79
|
-
console.warn(
|
|
80
|
-
`disable ignored because connection is ${connectionStatus}`,
|
|
81
|
-
)
|
|
82
|
-
return
|
|
83
|
-
}
|
|
84
|
-
connectionStatus = "disabled"
|
|
85
|
-
cancelled({ connect: reconnect })
|
|
86
|
-
},
|
|
87
|
-
connect: reconnect,
|
|
88
|
-
})
|
|
89
|
-
}
|
|
90
|
-
|
|
91
61
|
if (errorEvent.target.readyState === EventSource.CONNECTING) {
|
|
92
62
|
if (retryCount > retryMaxAttempt) {
|
|
93
63
|
console.info(`could not connect after ${retryMaxAttempt} attempt`)
|
|
94
|
-
|
|
95
|
-
eventSource.close()
|
|
96
|
-
considerFailed()
|
|
64
|
+
_disconnect()
|
|
97
65
|
return
|
|
98
66
|
}
|
|
99
67
|
|
|
@@ -105,33 +73,26 @@ export const connectEventSource = (
|
|
|
105
73
|
console.info(
|
|
106
74
|
`could not connect in less than ${retryAllocatedMs} ms`,
|
|
107
75
|
)
|
|
108
|
-
|
|
109
|
-
eventSource.close()
|
|
110
|
-
considerFailed()
|
|
76
|
+
_disconnect()
|
|
111
77
|
return
|
|
112
78
|
}
|
|
113
79
|
}
|
|
114
80
|
|
|
115
|
-
connectionStatus = "connecting"
|
|
116
81
|
retryCount++
|
|
117
|
-
connecting
|
|
82
|
+
goToStatus("connecting")
|
|
118
83
|
return
|
|
119
84
|
}
|
|
120
85
|
|
|
121
86
|
if (errorEvent.target.readyState === EventSource.CLOSED) {
|
|
122
|
-
|
|
87
|
+
_disconnect()
|
|
123
88
|
return
|
|
124
89
|
}
|
|
125
90
|
}
|
|
91
|
+
eventSource.onopen = () => {
|
|
92
|
+
goToStatus("connected")
|
|
93
|
+
}
|
|
126
94
|
Object.keys(events).forEach((eventName) => {
|
|
127
|
-
eventSource.addEventListener(eventName,
|
|
128
|
-
if (e.origin === eventSourceOrigin) {
|
|
129
|
-
if (e.lastEventId) {
|
|
130
|
-
lastEventId = e.lastEventId
|
|
131
|
-
}
|
|
132
|
-
events[eventName](e)
|
|
133
|
-
}
|
|
134
|
-
})
|
|
95
|
+
eventSource.addEventListener(eventName, events[eventName])
|
|
135
96
|
})
|
|
136
97
|
if (!events.hasOwnProperty("welcome")) {
|
|
137
98
|
eventSource.addEventListener("welcome", (e) => {
|
|
@@ -140,20 +101,37 @@ export const connectEventSource = (
|
|
|
140
101
|
}
|
|
141
102
|
})
|
|
142
103
|
}
|
|
104
|
+
goToStatus("connecting")
|
|
143
105
|
}
|
|
144
106
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
107
|
+
let connect = () => {
|
|
108
|
+
attemptConnection(eventSourceUrl)
|
|
109
|
+
connect = () => {
|
|
110
|
+
attemptConnection(
|
|
111
|
+
lastEventId
|
|
112
|
+
? addLastEventIdIntoUrlSearchParams(eventSourceUrl, lastEventId)
|
|
113
|
+
: eventSourceUrl,
|
|
114
|
+
)
|
|
115
|
+
}
|
|
148
116
|
}
|
|
149
117
|
|
|
150
118
|
const removePageUnloadListener = listenPageUnload(() => {
|
|
151
|
-
|
|
119
|
+
_disconnect()
|
|
152
120
|
})
|
|
153
121
|
|
|
154
|
-
|
|
122
|
+
const destroy = () => {
|
|
155
123
|
removePageUnloadListener()
|
|
156
|
-
|
|
124
|
+
_disconnect()
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return {
|
|
128
|
+
getConnectionStatus: () => connectionStatus,
|
|
129
|
+
setConnectionStatusChangeCallback: (callback) => {
|
|
130
|
+
connectionStatusChangeCallback = callback
|
|
131
|
+
},
|
|
132
|
+
connect,
|
|
133
|
+
disconnect: () => _disconnect(),
|
|
134
|
+
destroy,
|
|
157
135
|
}
|
|
158
136
|
}
|
|
159
137
|
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/* eslint-env browser */
|
|
2
|
+
|
|
3
|
+
import { isLivereloadEnabled } from "./livereload_preference.js"
|
|
4
|
+
|
|
5
|
+
let fileChanges = {}
|
|
6
|
+
let filechangeCallback = () => {}
|
|
7
|
+
|
|
8
|
+
export const getFileChanges = () => fileChanges
|
|
9
|
+
|
|
10
|
+
export const addFileChange = ({ file, eventType }) => {
|
|
11
|
+
fileChanges[file] = eventType
|
|
12
|
+
if (isLivereloadEnabled()) {
|
|
13
|
+
reloadIfNeeded()
|
|
14
|
+
} else {
|
|
15
|
+
filechangeCallback()
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const setFileChangeCallback = (callback) => {
|
|
20
|
+
filechangeCallback = callback
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const reloadIfNeeded = () => {
|
|
24
|
+
const customReloads = []
|
|
25
|
+
const cssReloads = []
|
|
26
|
+
const fullReloads = []
|
|
27
|
+
|
|
28
|
+
Object.keys(fileChanges).forEach((key) => {
|
|
29
|
+
const livereloadCallback = window.__jsenv__.livereloadingCallbacks[key]
|
|
30
|
+
if (livereloadCallback) {
|
|
31
|
+
customReloads.push(() => {
|
|
32
|
+
delete fileChanges[key]
|
|
33
|
+
livereloadCallback({
|
|
34
|
+
reloadPage,
|
|
35
|
+
})
|
|
36
|
+
})
|
|
37
|
+
} else if (
|
|
38
|
+
key.endsWith(".css") ||
|
|
39
|
+
key.endsWith(".scss") ||
|
|
40
|
+
key.endsWith(".sass")
|
|
41
|
+
) {
|
|
42
|
+
cssReloads.push(() => {
|
|
43
|
+
delete fileChanges[key]
|
|
44
|
+
})
|
|
45
|
+
} else {
|
|
46
|
+
fullReloads.push(key)
|
|
47
|
+
}
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
if (fullReloads.length > 0) {
|
|
51
|
+
reloadPage()
|
|
52
|
+
return
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
customReloads.forEach((customReload) => {
|
|
56
|
+
customReload()
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
if (cssReloads.length) {
|
|
60
|
+
reloadAllCss()
|
|
61
|
+
cssReloads.forEach((cssReload) => {
|
|
62
|
+
cssReload()
|
|
63
|
+
})
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
filechangeCallback()
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const reloadAllCss = () => {
|
|
70
|
+
const links = Array.from(window.parent.document.getElementsByTagName("link"))
|
|
71
|
+
links.forEach((link) => {
|
|
72
|
+
if (link.rel === "stylesheet") {
|
|
73
|
+
const url = new URL(link.href)
|
|
74
|
+
url.searchParams.set("t", Date.now())
|
|
75
|
+
link.href = String(url)
|
|
76
|
+
}
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const reloadPage = () => {
|
|
81
|
+
window.parent.location.reload(true)
|
|
82
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/* eslint-env browser */
|
|
2
|
+
|
|
3
|
+
export const isLivereloadEnabled = () => {
|
|
4
|
+
const value = window.localStorage.hasOwnProperty("livereload")
|
|
5
|
+
if (value === "0") {
|
|
6
|
+
return false
|
|
7
|
+
}
|
|
8
|
+
return true
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const setLivereloadPreference = (value) => {
|
|
12
|
+
window.localStorage.setItem("livereload", value ? "1" : "0")
|
|
13
|
+
}
|
|
File without changes
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<title>Exploring</title>
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
6
|
<meta charset="utf-8" />
|
|
7
|
-
<link rel="icon" href="
|
|
7
|
+
<link rel="icon" href="../../jsenv.png" />
|
|
8
8
|
<link rel="stylesheet" type="text/css" href="./exploring.css" />
|
|
9
9
|
</head>
|
|
10
10
|
|
|
@@ -35,7 +35,12 @@
|
|
|
35
35
|
<div id="explorables-header">
|
|
36
36
|
<div id="explorables_header_and_menu">
|
|
37
37
|
<h2 style="white-space: nowrap">
|
|
38
|
-
<svg
|
|
38
|
+
<svg
|
|
39
|
+
id="fileIconSvgConfig"
|
|
40
|
+
viewBox="0 0 24 24"
|
|
41
|
+
width="32"
|
|
42
|
+
height="32"
|
|
43
|
+
>
|
|
39
44
|
<path d="M0 0h24v24H0V0z" fill="none" />
|
|
40
45
|
<path
|
|
41
46
|
d="M8 16h8v2H8zm0-4h8v2H8zm6-10H6c-1.1 0-2 .9-2 2v16c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11z"
|
|
@@ -69,6 +74,6 @@
|
|
|
69
74
|
</section>
|
|
70
75
|
</article>
|
|
71
76
|
</div>
|
|
72
|
-
<script src="
|
|
77
|
+
<script type="module" src="./exploring.js"></script>
|
|
73
78
|
</body>
|
|
74
79
|
</html>
|
|
File without changes
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { fetchJson } from "../browser-utils/fetchJson.js"
|
|
1
|
+
import { fetchJson } from "../../browser_utils/fetchJson.js"
|
|
4
2
|
|
|
5
3
|
export const fetchExploringJson = async ({ signal } = {}) => {
|
|
6
4
|
try {
|
|
@@ -13,12 +11,9 @@ export const fetchExploringJson = async ({ signal } = {}) => {
|
|
|
13
11
|
throw e
|
|
14
12
|
}
|
|
15
13
|
throw new Error(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
["error stack"]: e.stack,
|
|
20
|
-
},
|
|
21
|
-
),
|
|
14
|
+
`Cannot communicate with exploring server due to a network error
|
|
15
|
+
--- error stack ---
|
|
16
|
+
${e.stack}`,
|
|
22
17
|
)
|
|
23
18
|
}
|
|
24
19
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Jsenv redirector</title>
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<meta charset="utf-8" />
|
|
7
|
+
<link rel="icon" href="data:," />
|
|
8
|
+
</head>
|
|
9
|
+
|
|
10
|
+
<body>
|
|
11
|
+
<script
|
|
12
|
+
type="importmap"
|
|
13
|
+
src="../../../../node_resolution.importmap"
|
|
14
|
+
></script>
|
|
15
|
+
<script type="module">
|
|
16
|
+
import { scanBrowserRuntimeFeatures } from "../../browser_feature_detection/browser_feature_detection.js"
|
|
17
|
+
|
|
18
|
+
const redirect = async () => {
|
|
19
|
+
const redirectTarget = new URLSearchParams(window.location.search).get(
|
|
20
|
+
"redirect",
|
|
21
|
+
)
|
|
22
|
+
const browserRuntimeFeaturesReport = await scanBrowserRuntimeFeatures({
|
|
23
|
+
failFastOnFeatureDetection: true,
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
const href = `${getDirectoryUrl(
|
|
27
|
+
browserRuntimeFeaturesReport,
|
|
28
|
+
)}${redirectTarget}`
|
|
29
|
+
// It's IMPORTANT to use location.replace and NOT location.href = url
|
|
30
|
+
// otherwise it would break the back button
|
|
31
|
+
window.location.replace(href)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const getDirectoryUrl = ({
|
|
35
|
+
canAvoidCompilation,
|
|
36
|
+
outDirectoryRelativeUrl,
|
|
37
|
+
compileId,
|
|
38
|
+
}) => {
|
|
39
|
+
if (canAvoidCompilation) {
|
|
40
|
+
return `/`
|
|
41
|
+
}
|
|
42
|
+
return `/${outDirectoryRelativeUrl}${compileId}/`
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
redirect()
|
|
46
|
+
</script>
|
|
47
|
+
</body>
|
|
48
|
+
</html>
|
|
File without changes
|
|
File without changes
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { scanBrowserRuntimeFeatures } from "
|
|
1
|
+
import { scanBrowserRuntimeFeatures } from "../../../browser_feature_detection/browser_feature_detection.js"
|
|
2
2
|
import { removeForceHideElement } from "../util/dom.js"
|
|
3
3
|
import { enableVariant } from "../variant/variant.js"
|
|
4
4
|
|
|
@@ -133,8 +133,7 @@ const getBrowserSupportMessage = ({
|
|
|
133
133
|
}) => {
|
|
134
134
|
const parts = []
|
|
135
135
|
|
|
136
|
-
|
|
137
|
-
if (importmapSupported) {
|
|
136
|
+
if (featuresReport.importmap) {
|
|
138
137
|
if (!missingOnly) {
|
|
139
138
|
if (inlineImportMapIntoHTML) {
|
|
140
139
|
parts.push(`importmaps are supported (only when inlined in html files)`)
|
|
@@ -146,8 +145,7 @@ const getBrowserSupportMessage = ({
|
|
|
146
145
|
parts.push(`importmaps are not supported`)
|
|
147
146
|
}
|
|
148
147
|
|
|
149
|
-
|
|
150
|
-
if (dynamicImportSupported) {
|
|
148
|
+
if (featuresReport.dynamicImport) {
|
|
151
149
|
if (!missingOnly) {
|
|
152
150
|
parts.push(`dynamic imports are supported`)
|
|
153
151
|
}
|
|
@@ -155,8 +153,7 @@ const getBrowserSupportMessage = ({
|
|
|
155
153
|
parts.push(`dynamic imports are not supported`)
|
|
156
154
|
}
|
|
157
155
|
|
|
158
|
-
|
|
159
|
-
if (topLevelAwaitSupported) {
|
|
156
|
+
if (featuresReport.topLevelAwait) {
|
|
160
157
|
if (!missingOnly) {
|
|
161
158
|
parts.push(`top level await is supported`)
|
|
162
159
|
}
|
|
File without changes
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { removeForceHideElement } from "../util/dom.js"
|
|
2
|
+
import { enableVariant } from "../variant/variant.js"
|
|
3
|
+
import {
|
|
4
|
+
toggleTooltip,
|
|
5
|
+
removeAutoShowTooltip,
|
|
6
|
+
autoShowTooltip,
|
|
7
|
+
} from "../tooltip/tooltip.js"
|
|
8
|
+
|
|
9
|
+
let livereloadingAvailableOnServer = false
|
|
10
|
+
const parentEventSourceClient = window.parent.__jsenv_event_source_client__
|
|
11
|
+
|
|
12
|
+
export const initToolbarEventSource = ({ livereloading }) => {
|
|
13
|
+
removeForceHideElement(document.querySelector("#eventsource-indicator"))
|
|
14
|
+
livereloadingAvailableOnServer = livereloading
|
|
15
|
+
if (!livereloadingAvailableOnServer) {
|
|
16
|
+
disableLivereloadSetting()
|
|
17
|
+
}
|
|
18
|
+
parentEventSourceClient.setConnectionStatusChangeCallback(() => {
|
|
19
|
+
updateEventSourceIndicator()
|
|
20
|
+
})
|
|
21
|
+
const livereloadCheckbox = document.querySelector("#toggle-livereload")
|
|
22
|
+
livereloadCheckbox.checked = parentEventSourceClient.isLivereloadEnabled()
|
|
23
|
+
livereloadCheckbox.onchange = () => {
|
|
24
|
+
parentEventSourceClient.setLivereloadPreference(livereloadCheckbox.checked)
|
|
25
|
+
updateEventSourceIndicator()
|
|
26
|
+
}
|
|
27
|
+
updateEventSourceIndicator()
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const updateEventSourceIndicator = () => {
|
|
31
|
+
const eventSourceIndicator = document.querySelector("#eventsource-indicator")
|
|
32
|
+
const fileChanges = parentEventSourceClient.getFileChanges()
|
|
33
|
+
const changeCount = Object.keys(fileChanges).length
|
|
34
|
+
const eventSourceConnectionState =
|
|
35
|
+
parentEventSourceClient.getConnectionStatus()
|
|
36
|
+
enableVariant(eventSourceIndicator, {
|
|
37
|
+
eventsource: eventSourceConnectionState,
|
|
38
|
+
livereload: parentEventSourceClient.isLivereloadEnabled() ? "on" : "off",
|
|
39
|
+
changes: changeCount > 0 ? "yes" : "no",
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
const variantNode = document.querySelector(
|
|
43
|
+
"#eventsource-indicator > [data-when-active]",
|
|
44
|
+
)
|
|
45
|
+
variantNode.querySelector("button").onclick = () => {
|
|
46
|
+
toggleTooltip(eventSourceIndicator)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (eventSourceConnectionState === "connecting") {
|
|
50
|
+
variantNode.querySelector("a").onclick = () => {
|
|
51
|
+
parentEventSourceClient.disconnect()
|
|
52
|
+
}
|
|
53
|
+
} else if (eventSourceConnectionState === "connected") {
|
|
54
|
+
removeAutoShowTooltip(eventSourceIndicator)
|
|
55
|
+
if (changeCount) {
|
|
56
|
+
const changeLink = variantNode.querySelector(".eventsource-changes-link")
|
|
57
|
+
changeLink.innerHTML = changeCount
|
|
58
|
+
changeLink.onclick = () => {
|
|
59
|
+
console.log(JSON.stringify(fileChanges, null, " "), fileChanges)
|
|
60
|
+
// eslint-disable-next-line no-alert
|
|
61
|
+
window.parent.alert(JSON.stringify(fileChanges, null, " "))
|
|
62
|
+
}
|
|
63
|
+
variantNode.querySelector(".eventsource-reload-link").onclick = () => {
|
|
64
|
+
parentEventSourceClient.reloadIfNeeded()
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
} else if (eventSourceConnectionState === "disconnected") {
|
|
68
|
+
autoShowTooltip(eventSourceIndicator)
|
|
69
|
+
variantNode.querySelector("a").onclick = () => {
|
|
70
|
+
parentEventSourceClient.connect()
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const disableLivereloadSetting = () => {
|
|
76
|
+
document
|
|
77
|
+
.querySelector(".settings-livereload")
|
|
78
|
+
.setAttribute("data-disabled", "true")
|
|
79
|
+
document
|
|
80
|
+
.querySelector(".settings-livereload")
|
|
81
|
+
.setAttribute("title", `Livereload not available: disabled by server`)
|
|
82
|
+
document.querySelector("#toggle-livereload").disabled = true
|
|
83
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|