@jsenv/core 24.0.2 → 24.2.2
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/dist/jsenv_event_source_client.js +338 -0
- package/dist/jsenv_event_source_client.js.map +126 -0
- package/dist/jsenv_exploring_index.js.map +7 -7
- package/dist/jsenv_redirector.js +1388 -0
- package/dist/jsenv_redirector.js.map +384 -0
- package/dist/jsenv_toolbar.js +37 -504
- package/dist/jsenv_toolbar.js.map +37 -112
- package/dist/jsenv_toolbar_injector.js +31 -126
- package/dist/jsenv_toolbar_injector.js.map +11 -30
- package/{LICENSE → license} +0 -0
- package/package.json +2 -3
- package/src/buildProject.js +2 -0
- package/src/dev_server.js +108 -57
- package/src/internal/compiling/compile-directory/getOrGenerateCompiledFile.js +1 -2
- package/src/internal/compiling/compileFile.js +51 -23
- package/src/internal/compiling/createCompiledFileService.js +8 -0
- package/src/internal/compiling/html_source_file_service.js +43 -9
- package/src/internal/compiling/jsenvCompilerForHtml.js +146 -107
- package/src/internal/compiling/startCompileServer.js +10 -1
- package/src/internal/dev_server/event_source_client/event_source_client.js +63 -0
- package/src/internal/dev_server/event_source_client/event_source_client_file_info.js +17 -0
- package/src/internal/{toolbar/eventsource/connectEventSource.js → dev_server/event_source_client/event_source_connection.js} +47 -78
- 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 +1 -1
- package/src/internal/{exploring → dev_server/exploring}/exploring.js +0 -0
- package/src/internal/dev_server/exploring/exploring_file_info.js +21 -0
- package/src/internal/{exploring → dev_server/exploring}/fetchExploringJson.js +1 -1
- package/src/internal/{exploring/exploring.redirector.html → dev_server/redirector/redirector.html} +1 -1
- package/src/internal/{exploring/exploring.redirector.js → dev_server/redirector/redirector.js} +4 -2
- package/src/internal/dev_server/redirector/redirector_file_info.js +24 -0
- package/src/internal/{toolbar → dev_server/toolbar}/animation/toolbar.animation.js +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/backtolist/toolbar.backtolist.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 +1 -1
- 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/{toolbar → dev_server/toolbar}/notification/toolbar.notification.js +0 -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 +4 -37
- package/src/internal/{toolbar → dev_server/toolbar}/toolbar.injector.js +3 -92
- package/src/internal/{toolbar → dev_server/toolbar}/toolbar.main.css +0 -0
- package/src/internal/{toolbar → dev_server/toolbar}/toolbar.main.js +0 -0
- package/src/internal/dev_server/toolbar/toolbar_file_info.js +37 -0
- 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/jsenvInternalFiles.js +0 -58
- package/src/internal/toolbar/eventsource/connectCompileServerEventSource.js +0 -74
- package/src/internal/toolbar/eventsource/toolbar.eventsource.js +0 -239
|
@@ -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
|
|
|
File without changes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsenvCoreDirectoryUrl } from "@jsenv/core/src/internal/jsenvCoreDirectoryUrl.js"
|
|
2
|
+
|
|
3
|
+
const htmlSourceUrl = new URL(
|
|
4
|
+
"./src/internal/dev_server/exploring/exploring.html",
|
|
5
|
+
jsenvCoreDirectoryUrl,
|
|
6
|
+
).href
|
|
7
|
+
export const exploringIndexHtmlFileInfo = {
|
|
8
|
+
sourceUrl: htmlSourceUrl,
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const jsSourceRelativeUrl = "./src/internal/dev_server/exploring/exploring.js"
|
|
12
|
+
const jsBuildRelativeUrl = "./jsenv_exploring_index.js"
|
|
13
|
+
const jsBuildUrl = new URL(
|
|
14
|
+
"./dist/jsenv_exploring_index.js",
|
|
15
|
+
jsenvCoreDirectoryUrl,
|
|
16
|
+
).href
|
|
17
|
+
export const exploringIndexJsFileInfo = {
|
|
18
|
+
sourceRelativeUrl: jsSourceRelativeUrl,
|
|
19
|
+
buildRelativeUrl: jsBuildRelativeUrl,
|
|
20
|
+
buildUrl: jsBuildUrl,
|
|
21
|
+
}
|
package/src/internal/{exploring/exploring.redirector.js → dev_server/redirector/redirector.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { scanBrowserRuntimeFeatures } from "
|
|
1
|
+
import { scanBrowserRuntimeFeatures } from "../../runtime/createBrowserRuntime/scanBrowserRuntimeFeatures.js"
|
|
2
2
|
|
|
3
3
|
const redirect = async () => {
|
|
4
4
|
const redirectTarget = new URLSearchParams(window.location.search).get(
|
|
@@ -11,7 +11,9 @@ const redirect = async () => {
|
|
|
11
11
|
const href = `${getDirectoryUrl(
|
|
12
12
|
browserRuntimeFeaturesReport,
|
|
13
13
|
)}${redirectTarget}`
|
|
14
|
-
|
|
14
|
+
// It's IMPORTANT to use location.replace and NOT location.href = url
|
|
15
|
+
// otherwise it would break the back button
|
|
16
|
+
window.location.replace(href)
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
const getDirectoryUrl = ({
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* auto redirection to a compile group depending on browser capabilities
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { jsenvCoreDirectoryUrl } from "@jsenv/core/src/internal/jsenvCoreDirectoryUrl.js"
|
|
6
|
+
|
|
7
|
+
const htmlSourceUrl = new URL(
|
|
8
|
+
"./src/internal/dev_server/redirector/redirector.html",
|
|
9
|
+
jsenvCoreDirectoryUrl,
|
|
10
|
+
).href
|
|
11
|
+
export const redirectorHtmlFileInfo = {
|
|
12
|
+
sourceUrl: htmlSourceUrl,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const jsSourceRelativeUrl = "./src/internal/dev_server/redirector/redirector.js"
|
|
16
|
+
const jsBuildRelativeUrl = "./jsenv_redirector.js"
|
|
17
|
+
const jsSourceUrl = new URL(jsSourceRelativeUrl, jsenvCoreDirectoryUrl).href
|
|
18
|
+
const jsBuildUrl = new URL("./dist/jsenv_redirector.js", jsenvCoreDirectoryUrl)
|
|
19
|
+
export const redirectorJsFileInfo = {
|
|
20
|
+
sourceRelativeUrl: jsSourceRelativeUrl,
|
|
21
|
+
buildRelativeUrl: jsBuildRelativeUrl,
|
|
22
|
+
sourceUrl: jsSourceUrl,
|
|
23
|
+
buildUrl: jsBuildUrl,
|
|
24
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { scanBrowserRuntimeFeatures } from "
|
|
1
|
+
import { scanBrowserRuntimeFeatures } from "../../../runtime/createBrowserRuntime/scanBrowserRuntimeFeatures.js"
|
|
2
2
|
import { removeForceHideElement } from "../util/dom.js"
|
|
3
3
|
import { enableVariant } from "../variant/variant.js"
|
|
4
4
|
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -130,9 +130,9 @@
|
|
|
130
130
|
</svg>
|
|
131
131
|
</button>
|
|
132
132
|
</div>
|
|
133
|
-
<div data-when="eventsource:
|
|
133
|
+
<div data-when="eventsource:disconnected">
|
|
134
134
|
<div class="tooltip">
|
|
135
|
-
|
|
135
|
+
Disconnected from server
|
|
136
136
|
<br />
|
|
137
137
|
<div class="tooltipAction">
|
|
138
138
|
<a href="javascript:void(0);">
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
d="M16 9v4.66l-3.5 3.51V19h-1v-1.83L8 13.65V9h8m0-6h-2v4h-4V3H8v4h-.01C6.9 6.99 6 7.89 6 8.98v5.52L9.5 18v3h5v-3l3.5-3.51V9c0-1.1-.9-2-2-2V3z"
|
|
148
148
|
/>
|
|
149
149
|
</svg>
|
|
150
|
-
|
|
150
|
+
connect
|
|
151
151
|
</a>
|
|
152
152
|
</div>
|
|
153
153
|
</div>
|
|
@@ -155,7 +155,7 @@
|
|
|
155
155
|
<svg>
|
|
156
156
|
<circle
|
|
157
157
|
class="eventsource-circle"
|
|
158
|
-
data-variant="
|
|
158
|
+
data-variant="off"
|
|
159
159
|
cx="20"
|
|
160
160
|
cy="20"
|
|
161
161
|
r="5"
|
|
@@ -218,39 +218,6 @@
|
|
|
218
218
|
</svg>
|
|
219
219
|
</button>
|
|
220
220
|
</div>
|
|
221
|
-
<div data-when="eventsource:disabled">
|
|
222
|
-
<div class="tooltip">
|
|
223
|
-
Disconnected from server
|
|
224
|
-
<br />
|
|
225
|
-
<div class="tooltipAction">
|
|
226
|
-
<a href="javascript:void(0);">
|
|
227
|
-
<svg
|
|
228
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
229
|
-
viewBox="0 0 24 24"
|
|
230
|
-
id="powerIconSvg"
|
|
231
|
-
class="tooltipIcon"
|
|
232
|
-
>
|
|
233
|
-
<path d="M0 0h24v24H0V0z" fill="none" />
|
|
234
|
-
<path
|
|
235
|
-
d="M16 9v4.66l-3.5 3.51V19h-1v-1.83L8 13.65V9h8m0-6h-2v4h-4V3H8v4h-.01C6.9 6.99 6 7.89 6 8.98v5.52L9.5 18v3h5v-3l3.5-3.51V9c0-1.1-.9-2-2-2V3z"
|
|
236
|
-
/>
|
|
237
|
-
</svg>
|
|
238
|
-
connect
|
|
239
|
-
</a>
|
|
240
|
-
</div>
|
|
241
|
-
</div>
|
|
242
|
-
<button>
|
|
243
|
-
<svg>
|
|
244
|
-
<circle
|
|
245
|
-
class="eventsource-circle"
|
|
246
|
-
data-variant="off"
|
|
247
|
-
cx="20"
|
|
248
|
-
cy="20"
|
|
249
|
-
r="5"
|
|
250
|
-
/>
|
|
251
|
-
</svg>
|
|
252
|
-
</button>
|
|
253
|
-
</div>
|
|
254
221
|
</section>
|
|
255
222
|
|
|
256
223
|
<section id="settings" data-responsive-toolbar-element>
|
|
@@ -1,95 +1,6 @@
|
|
|
1
|
-
import { fetchExploringJson } from "@jsenv/core/src/internal/exploring/fetchExploringJson.js"
|
|
1
|
+
import { fetchExploringJson } from "@jsenv/core/src/internal/dev_server/exploring/fetchExploringJson.js"
|
|
2
2
|
import { setAttributes, setStyles } from "./util/dom.js"
|
|
3
3
|
|
|
4
|
-
/*
|
|
5
|
-
We must connect to livereload server asap so that if a file is modified
|
|
6
|
-
while page is loading we are notified of it.
|
|
7
|
-
|
|
8
|
-
Otherwise it's possible that a file is loaded and used by browser then its modified before
|
|
9
|
-
livereload connection is established.
|
|
10
|
-
|
|
11
|
-
When toolbar is loaded it will open an other connection to server sent events and close this one.
|
|
12
|
-
*/
|
|
13
|
-
const connectLivereload = () => {
|
|
14
|
-
const { EventSource } = window
|
|
15
|
-
if (typeof EventSource !== "function") {
|
|
16
|
-
return () => {}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const getLivereloadPreference = () => {
|
|
20
|
-
return localStorage.hasOwnProperty("livereload")
|
|
21
|
-
? JSON.parse(localStorage.getItem("livereload"))
|
|
22
|
-
: true
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const url = document.location.href
|
|
26
|
-
let isOpen = false
|
|
27
|
-
let lastEventId
|
|
28
|
-
const latestChangeMap = {}
|
|
29
|
-
|
|
30
|
-
const events = {
|
|
31
|
-
"file-modified": ({ data }) => {
|
|
32
|
-
latestChangeMap[data] = "modified"
|
|
33
|
-
if (getLivereloadPreference()) {
|
|
34
|
-
window.location.reload(true)
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
"file-removed": ({ data }) => {
|
|
38
|
-
latestChangeMap[data] = "removed"
|
|
39
|
-
if (getLivereloadPreference()) {
|
|
40
|
-
window.location.reload(true)
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
"file-added": ({ data }) => {
|
|
44
|
-
latestChangeMap[data] = "added"
|
|
45
|
-
if (getLivereloadPreference()) {
|
|
46
|
-
window.location.reload(true)
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const eventSourceOrigin = new URL(url).origin
|
|
52
|
-
const eventSource = new EventSource(url, {
|
|
53
|
-
withCredentials: true,
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
const disconnect = () => {
|
|
57
|
-
eventSource.close()
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
eventSource.onopen = () => {
|
|
61
|
-
isOpen = true
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
eventSource.onerror = (errorEvent) => {
|
|
65
|
-
if (errorEvent.target.readyState === EventSource.CLOSED) {
|
|
66
|
-
isOpen = false
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
Object.keys(events).forEach((eventName) => {
|
|
71
|
-
eventSource.addEventListener(eventName, (e) => {
|
|
72
|
-
if (e.origin === eventSourceOrigin) {
|
|
73
|
-
if (e.lastEventId) {
|
|
74
|
-
lastEventId = e.lastEventId
|
|
75
|
-
}
|
|
76
|
-
events[eventName](e)
|
|
77
|
-
}
|
|
78
|
-
})
|
|
79
|
-
})
|
|
80
|
-
|
|
81
|
-
return () => {
|
|
82
|
-
return {
|
|
83
|
-
isOpen,
|
|
84
|
-
latestChangeMap,
|
|
85
|
-
lastEventId,
|
|
86
|
-
disconnect,
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
// eslint-disable-next-line camelcase
|
|
91
|
-
window.__jsenv_eventsource__ = connectLivereload()
|
|
92
|
-
|
|
93
4
|
const injectToolbar = async () => {
|
|
94
5
|
await new Promise((resolve) => {
|
|
95
6
|
if (window.requestIdleCallback) {
|
|
@@ -129,7 +40,7 @@ const injectToolbar = async () => {
|
|
|
129
40
|
})
|
|
130
41
|
const iframeLoadedPromise = iframeToLoadedPromise(iframe)
|
|
131
42
|
const jsenvToolbarHtmlServerUrl = resolveUrl(
|
|
132
|
-
"./src/internal/toolbar/toolbar.html",
|
|
43
|
+
"./src/internal/dev_server/toolbar/toolbar.html",
|
|
133
44
|
jsenvDirectoryServerUrl,
|
|
134
45
|
)
|
|
135
46
|
// set iframe src BEFORE putting it into the DOM (prevent firefox adding an history entry)
|
|
@@ -165,7 +76,7 @@ const injectToolbar = async () => {
|
|
|
165
76
|
|
|
166
77
|
const div = document.createElement("div")
|
|
167
78
|
const jsenvLogoUrl = resolveUrl(
|
|
168
|
-
"./src/internal/toolbar/jsenv-logo.svg",
|
|
79
|
+
"./src/internal/dev_server/toolbar/jsenv-logo.svg",
|
|
169
80
|
jsenvDirectoryServerUrl,
|
|
170
81
|
)
|
|
171
82
|
const jsenvLogoSvgSrc = jsenvLogoUrl
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsenvCoreDirectoryUrl } from "@jsenv/core/src/internal/jsenvCoreDirectoryUrl.js"
|
|
2
|
+
|
|
3
|
+
const injectorSourceRelativeUrl =
|
|
4
|
+
"./src/internal/dev_server/toolbar/toolbar.injector.js"
|
|
5
|
+
const injectorBuildRelativeUrl = "./jsenv_toolbar_injector.js"
|
|
6
|
+
const injectorBuildUrl = new URL(
|
|
7
|
+
"./dist/jsenv_toolbar_injector.js",
|
|
8
|
+
jsenvCoreDirectoryUrl,
|
|
9
|
+
).href
|
|
10
|
+
export const toolbarInjectorFileInfo = {
|
|
11
|
+
sourceRelativeUrl: injectorSourceRelativeUrl,
|
|
12
|
+
buildRelativeUrl: injectorBuildRelativeUrl,
|
|
13
|
+
buildUrl: injectorBuildUrl,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const htmlSourceUrl = new URL(
|
|
17
|
+
"./src/internal/dev_server/toolbar/toolbar.html",
|
|
18
|
+
jsenvCoreDirectoryUrl,
|
|
19
|
+
).href
|
|
20
|
+
export const toolbarHtmlFileInfo = {
|
|
21
|
+
sourceUrl: htmlSourceUrl,
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const jsSourceRelativeUrl = "./src/internal/dev_server/toolbar/toolbar.main.js"
|
|
25
|
+
const jsBuildRelativeUrl = "./jsenv_toolbar.js"
|
|
26
|
+
const jsSourceUrl = new URL(
|
|
27
|
+
"./src/internal/dev_server/toolbar/toolbar.main.js",
|
|
28
|
+
jsenvCoreDirectoryUrl,
|
|
29
|
+
).href
|
|
30
|
+
const jsBuildUrl = new URL("./dist/jsenv_toolbar.js", jsenvCoreDirectoryUrl)
|
|
31
|
+
.href
|
|
32
|
+
export const toolbarJsFileInfo = {
|
|
33
|
+
sourceRelativeUrl: jsSourceRelativeUrl,
|
|
34
|
+
buildRelativeUrl: jsBuildRelativeUrl,
|
|
35
|
+
sourceUrl: jsSourceUrl,
|
|
36
|
+
buildUrl: jsBuildUrl,
|
|
37
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { memoize } from "
|
|
1
|
+
import { memoize } from "../../../memoize.js"
|
|
2
2
|
|
|
3
3
|
const fetchPolyfill = async (...args) => {
|
|
4
4
|
const { fetchUsingXHR } = await loadPolyfill()
|
|
@@ -6,7 +6,7 @@ const fetchPolyfill = async (...args) => {
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
const loadPolyfill = memoize(() =>
|
|
9
|
-
import("
|
|
9
|
+
import("../../../browser-utils/fetchUsingXHR.js"),
|
|
10
10
|
)
|
|
11
11
|
|
|
12
12
|
export const fetchUrl =
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -48,64 +48,6 @@ export const sourcemapMappingFileInfo = {
|
|
|
48
48
|
url: fileSystemPathToUrl(require.resolve("source-map/lib/mappings.wasm")),
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
// Exploring redirection
|
|
52
|
-
// (auto redirection to a compile group depending on browser capabilities)
|
|
53
|
-
export const jsenvExploringRedirectorHtmlFileInfo = {
|
|
54
|
-
url: resolveUrl(
|
|
55
|
-
"./src/internal/exploring/exploring.redirector.html",
|
|
56
|
-
jsenvCoreDirectoryUrl,
|
|
57
|
-
),
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export const jsenvExploringRedirectorJsFileInfo = {
|
|
61
|
-
jsenvRelativeUrl: "./src/internal/exploring/exploring.redirector.js",
|
|
62
|
-
jsenvBuildRelativeUrl: "./jsenv_exploring_redirector.js",
|
|
63
|
-
url: resolveUrl(
|
|
64
|
-
"./src/internal/exploring/exploring.redirector.js",
|
|
65
|
-
jsenvCoreDirectoryUrl,
|
|
66
|
-
),
|
|
67
|
-
jsenvBuildUrl: resolveUrl(
|
|
68
|
-
"./dist/jsenv_exploring_redirector.js",
|
|
69
|
-
jsenvCoreDirectoryUrl,
|
|
70
|
-
),
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Exploring index and toolbar
|
|
74
|
-
export const jsenvExploringIndexJsFileInfo = {
|
|
75
|
-
jsenvRelativeUrl: "./src/internal/exploring/exploring.js",
|
|
76
|
-
jsenvBuildRelativeUrl: "./jsenv_exploring_index.js",
|
|
77
|
-
jsenvBuildUrl: resolveUrl(
|
|
78
|
-
"./dist/jsenv_exploring_index.js",
|
|
79
|
-
jsenvCoreDirectoryUrl,
|
|
80
|
-
),
|
|
81
|
-
}
|
|
82
|
-
export const jsenvExploringIndexHtmlFileInfo = {
|
|
83
|
-
url: resolveUrl(
|
|
84
|
-
"./src/internal/exploring/exploring.html",
|
|
85
|
-
jsenvCoreDirectoryUrl,
|
|
86
|
-
),
|
|
87
|
-
}
|
|
88
|
-
export const jsenvToolbarHtmlFileInfo = {
|
|
89
|
-
url: resolveUrl("./src/internal/toolbar/toolbar.html", jsenvCoreDirectoryUrl),
|
|
90
|
-
}
|
|
91
|
-
export const jsenvToolbarInjectorFileInfo = {
|
|
92
|
-
jsenvRelativeUrl: "./src/internal/toolbar/toolbar.injector.js",
|
|
93
|
-
jsenvBuildRelativeUrl: "./jsenv_toolbar_injector.js",
|
|
94
|
-
jsenvBuildUrl: resolveUrl(
|
|
95
|
-
"./dist/jsenv_toolbar_injector.js",
|
|
96
|
-
jsenvCoreDirectoryUrl,
|
|
97
|
-
),
|
|
98
|
-
}
|
|
99
|
-
export const jsenvToolbarJsFileInfo = {
|
|
100
|
-
jsenvRelativeUrl: "./src/internal/toolbar/toolbar.main.js",
|
|
101
|
-
jsenvBuildRelativeUrl: "./jsenv_toolbar.js",
|
|
102
|
-
url: resolveUrl(
|
|
103
|
-
"./src/internal/toolbar/toolbar.main.js",
|
|
104
|
-
jsenvCoreDirectoryUrl,
|
|
105
|
-
),
|
|
106
|
-
jsenvBuildUrl: resolveUrl("./dist/jsenv_toolbar.js", jsenvCoreDirectoryUrl),
|
|
107
|
-
}
|
|
108
|
-
|
|
109
51
|
export const jsenvSystemJsFileInfo = {
|
|
110
52
|
url: resolveUrl("./src/internal/runtime/s.js", jsenvCoreDirectoryUrl),
|
|
111
53
|
jsenvRelativeUrl: "./src/internal/runtime/s.js",
|