@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.
Files changed (69) hide show
  1. package/dist/jsenv_event_source_client.js +338 -0
  2. package/dist/jsenv_event_source_client.js.map +126 -0
  3. package/dist/jsenv_exploring_index.js.map +7 -7
  4. package/dist/jsenv_redirector.js +1388 -0
  5. package/dist/jsenv_redirector.js.map +384 -0
  6. package/dist/jsenv_toolbar.js +37 -504
  7. package/dist/jsenv_toolbar.js.map +37 -112
  8. package/dist/jsenv_toolbar_injector.js +31 -126
  9. package/dist/jsenv_toolbar_injector.js.map +11 -30
  10. package/{LICENSE → license} +0 -0
  11. package/package.json +2 -3
  12. package/src/buildProject.js +2 -0
  13. package/src/dev_server.js +108 -57
  14. package/src/internal/compiling/compile-directory/getOrGenerateCompiledFile.js +1 -2
  15. package/src/internal/compiling/compileFile.js +51 -23
  16. package/src/internal/compiling/createCompiledFileService.js +8 -0
  17. package/src/internal/compiling/html_source_file_service.js +43 -9
  18. package/src/internal/compiling/jsenvCompilerForHtml.js +146 -107
  19. package/src/internal/compiling/startCompileServer.js +10 -1
  20. package/src/internal/dev_server/event_source_client/event_source_client.js +63 -0
  21. package/src/internal/dev_server/event_source_client/event_source_client_file_info.js +17 -0
  22. package/src/internal/{toolbar/eventsource/connectEventSource.js → dev_server/event_source_client/event_source_connection.js} +47 -78
  23. package/src/internal/dev_server/event_source_client/file_changes.js +82 -0
  24. package/src/internal/dev_server/event_source_client/livereload_preference.js +13 -0
  25. package/src/internal/{exploring → dev_server/exploring}/exploring.css +0 -0
  26. package/src/internal/{exploring → dev_server/exploring}/exploring.html +1 -1
  27. package/src/internal/{exploring → dev_server/exploring}/exploring.js +0 -0
  28. package/src/internal/dev_server/exploring/exploring_file_info.js +21 -0
  29. package/src/internal/{exploring → dev_server/exploring}/fetchExploringJson.js +1 -1
  30. package/src/internal/{exploring/exploring.redirector.html → dev_server/redirector/redirector.html} +1 -1
  31. package/src/internal/{exploring/exploring.redirector.js → dev_server/redirector/redirector.js} +4 -2
  32. package/src/internal/dev_server/redirector/redirector_file_info.js +24 -0
  33. package/src/internal/{toolbar → dev_server/toolbar}/animation/toolbar.animation.js +0 -0
  34. package/src/internal/{toolbar → dev_server/toolbar}/backtolist/toolbar.backtolist.js +0 -0
  35. package/src/internal/{toolbar → dev_server/toolbar}/compilation/compilation.css +0 -0
  36. package/src/internal/{toolbar → dev_server/toolbar}/compilation/toolbar.compilation.js +1 -1
  37. package/src/internal/{toolbar → dev_server/toolbar}/eventsource/eventsource.css +0 -0
  38. package/src/internal/dev_server/toolbar/eventsource/toolbar.eventsource.js +83 -0
  39. package/src/internal/{toolbar → dev_server/toolbar}/execution/execution.css +0 -0
  40. package/src/internal/{toolbar → dev_server/toolbar}/execution/toolbar.execution.js +0 -0
  41. package/src/internal/{toolbar → dev_server/toolbar}/focus/focus.css +0 -0
  42. package/src/internal/{toolbar → dev_server/toolbar}/focus/toolbar.focus.js +0 -0
  43. package/src/internal/{toolbar → dev_server/toolbar}/jsenv-logo.svg +0 -0
  44. package/src/internal/{toolbar → dev_server/toolbar}/notification/toolbar.notification.js +0 -0
  45. package/src/internal/{toolbar → dev_server/toolbar}/responsive/overflow-menu.css +0 -0
  46. package/src/internal/{toolbar → dev_server/toolbar}/responsive/toolbar.responsive.js +0 -0
  47. package/src/internal/{toolbar → dev_server/toolbar}/settings/settings.css +0 -0
  48. package/src/internal/{toolbar → dev_server/toolbar}/settings/toolbar.settings.js +0 -0
  49. package/src/internal/{toolbar → dev_server/toolbar}/theme/jsenv-theme.css +0 -0
  50. package/src/internal/{toolbar → dev_server/toolbar}/theme/light-theme.css +0 -0
  51. package/src/internal/{toolbar → dev_server/toolbar}/theme/toolbar.theme.js +0 -0
  52. package/src/internal/{toolbar → dev_server/toolbar}/toolbar.html +4 -37
  53. package/src/internal/{toolbar → dev_server/toolbar}/toolbar.injector.js +3 -92
  54. package/src/internal/{toolbar → dev_server/toolbar}/toolbar.main.css +0 -0
  55. package/src/internal/{toolbar → dev_server/toolbar}/toolbar.main.js +0 -0
  56. package/src/internal/dev_server/toolbar/toolbar_file_info.js +37 -0
  57. package/src/internal/{toolbar → dev_server/toolbar}/tooltip/tooltip.css +0 -0
  58. package/src/internal/{toolbar → dev_server/toolbar}/tooltip/tooltip.js +0 -0
  59. package/src/internal/{toolbar → dev_server/toolbar}/util/animation.js +0 -0
  60. package/src/internal/{toolbar → dev_server/toolbar}/util/dom.js +0 -0
  61. package/src/internal/{toolbar → dev_server/toolbar}/util/fetching.js +2 -2
  62. package/src/internal/{toolbar → dev_server/toolbar}/util/jsenvLogger.js +0 -0
  63. package/src/internal/{toolbar → dev_server/toolbar}/util/preferences.js +0 -0
  64. package/src/internal/{toolbar → dev_server/toolbar}/util/responsive.js +0 -0
  65. package/src/internal/{toolbar → dev_server/toolbar}/util/util.js +0 -0
  66. package/src/internal/{toolbar → dev_server/toolbar}/variant/variant.js +0 -0
  67. package/src/internal/jsenvInternalFiles.js +0 -58
  68. package/src/internal/toolbar/eventsource/connectCompileServerEventSource.js +0 -74
  69. package/src/internal/toolbar/eventsource/toolbar.eventsource.js +0 -239
@@ -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
- }