@jsenv/core 23.6.1 → 23.8.0

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 (135) hide show
  1. package/{license → LICENSE} +21 -21
  2. package/dist/jsenv_browser_system.js +35 -35
  3. package/dist/jsenv_browser_system.js.map +14 -14
  4. package/dist/jsenv_compile_proxy.js +47 -128
  5. package/dist/jsenv_compile_proxy.js.map +25 -62
  6. package/dist/jsenv_exploring_index.js.map +5 -5
  7. package/dist/jsenv_exploring_redirector.js +47 -54
  8. package/dist/jsenv_exploring_redirector.js.map +17 -19
  9. package/dist/jsenv_toolbar.js +47 -130
  10. package/dist/jsenv_toolbar.js.map +13 -48
  11. package/dist/jsenv_toolbar_injector.js.map +5 -5
  12. package/helpers/babel/.eslintrc.cjs +24 -24
  13. package/helpers/babel/AsyncGenerator/AsyncGenerator.js +81 -81
  14. package/helpers/babel/AwaitValue/AwaitValue.js +3 -3
  15. package/helpers/babel/applyDecoratorDescriptor/applyDecoratorDescriptor.js +33 -33
  16. package/helpers/babel/arrayLikeToArray/arrayLikeToArray.js +7 -7
  17. package/helpers/babel/arrayWithHoles/arrayWithHoles.js +4 -4
  18. package/helpers/babel/arrayWithoutHoles/arrayWithoutHoles.js +6 -6
  19. package/helpers/babel/assertThisInitialized/assertThisInitialized.js +7 -7
  20. package/helpers/babel/asyncGeneratorDelegate/asyncGeneratorDelegate.js +40 -40
  21. package/helpers/babel/asyncIterator/asyncIterator.js +12 -12
  22. package/helpers/babel/asyncToGenerator/asyncToGenerator.js +34 -34
  23. package/helpers/babel/awaitAsyncGenerator/awaitAsyncGenerator.js +5 -5
  24. package/helpers/babel/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +20 -20
  25. package/helpers/babel/classApplyDescriptorGet/classApplyDescriptorGet.js +6 -6
  26. package/helpers/babel/classApplyDescriptorSet/classApplyDescriptorSet.js +13 -13
  27. package/helpers/babel/classCallCheck/classCallCheck.js +5 -5
  28. package/helpers/babel/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -5
  29. package/helpers/babel/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -6
  30. package/helpers/babel/classExtractFieldDescriptor/classExtractFieldDescriptor.js +7 -7
  31. package/helpers/babel/classNameTDZError/classNameTDZError.js +4 -4
  32. package/helpers/babel/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +7 -7
  33. package/helpers/babel/classPrivateFieldGet/classPrivateFieldGet.js +7 -7
  34. package/helpers/babel/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +6 -6
  35. package/helpers/babel/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -5
  36. package/helpers/babel/classPrivateFieldSet/classPrivateFieldSet.js +8 -8
  37. package/helpers/babel/classPrivateMethodGet/classPrivateMethodGet.js +6 -6
  38. package/helpers/babel/classPrivateMethodSet/classPrivateMethodSet.js +3 -3
  39. package/helpers/babel/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +9 -9
  40. package/helpers/babel/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +15 -15
  41. package/helpers/babel/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +6 -6
  42. package/helpers/babel/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -3
  43. package/helpers/babel/construct/construct.js +16 -16
  44. package/helpers/babel/createClass/createClass.js +15 -15
  45. package/helpers/babel/createForOfIteratorHelper/createForOfIteratorHelper.js +60 -60
  46. package/helpers/babel/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +23 -23
  47. package/helpers/babel/createRawReactElement/createRawReactElement.js +50 -50
  48. package/helpers/babel/createSuper/createSuper.js +22 -22
  49. package/helpers/babel/decorate/decorate.js +403 -403
  50. package/helpers/babel/defaults/defaults.js +11 -11
  51. package/helpers/babel/defineEnumerableProperties/defineEnumerableProperties.js +23 -23
  52. package/helpers/babel/defineProperty/defineProperty.js +18 -18
  53. package/helpers/babel/extends/extends.js +14 -14
  54. package/helpers/babel/get/get.js +13 -13
  55. package/helpers/babel/getPrototypeOf/getPrototypeOf.js +4 -4
  56. package/helpers/babel/inherits/inherits.js +15 -15
  57. package/helpers/babel/inheritsLoose/inheritsLoose.js +7 -7
  58. package/helpers/babel/initializerDefineProperty/initializerDefineProperty.js +10 -10
  59. package/helpers/babel/initializerWarningHelper/initializerWarningHelper.js +6 -6
  60. package/helpers/babel/instanceof/instanceof.js +6 -6
  61. package/helpers/babel/interopRequireDefault/interopRequireDefault.js +3 -3
  62. package/helpers/babel/interopRequireWildcard/interopRequireWildcard.js +37 -37
  63. package/helpers/babel/isNativeFunction/isNativeFunction.js +4 -4
  64. package/helpers/babel/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -21
  65. package/helpers/babel/iterableToArray/iterableToArray.js +7 -7
  66. package/helpers/babel/iterableToArrayLimit/iterableToArrayLimit.js +36 -36
  67. package/helpers/babel/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +10 -10
  68. package/helpers/babel/jsx/jsx.js +45 -45
  69. package/helpers/babel/maybeArrayLike/maybeArrayLike.js +10 -10
  70. package/helpers/babel/newArrowCheck/newArrowCheck.js +5 -5
  71. package/helpers/babel/nonIterableRest/nonIterableRest.js +5 -5
  72. package/helpers/babel/nonIterableSpread/nonIterableSpread.js +5 -5
  73. package/helpers/babel/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -3
  74. package/helpers/babel/objectSpread/objectSpread.js +23 -23
  75. package/helpers/babel/objectSpread2/objectSpread2.js +33 -33
  76. package/helpers/babel/objectWithoutProperties/objectWithoutProperties.js +19 -19
  77. package/helpers/babel/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +13 -13
  78. package/helpers/babel/possibleConstructorReturn/possibleConstructorReturn.js +10 -10
  79. package/helpers/babel/readOnlyError/readOnlyError.js +4 -4
  80. package/helpers/babel/readme.md +9 -9
  81. package/helpers/babel/set/set.js +44 -44
  82. package/helpers/babel/setPrototypeOf/setPrototypeOf.js +6 -6
  83. package/helpers/babel/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -8
  84. package/helpers/babel/slicedToArray/slicedToArray.js +10 -10
  85. package/helpers/babel/slicedToArrayLoose/slicedToArrayLoose.js +13 -13
  86. package/helpers/babel/superPropBase/superPropBase.js +10 -10
  87. package/helpers/babel/taggedTemplateLiteral/taggedTemplateLiteral.js +10 -10
  88. package/helpers/babel/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +7 -7
  89. package/helpers/babel/tdz/tdz.js +4 -4
  90. package/helpers/babel/temporalRef/temporalRef.js +6 -6
  91. package/helpers/babel/temporalUndefined/temporalUndefined.js +3 -3
  92. package/helpers/babel/toArray/toArray.js +10 -10
  93. package/helpers/babel/toConsumableArray/toConsumableArray.js +10 -10
  94. package/helpers/babel/toPrimitive/toPrimitive.js +10 -10
  95. package/helpers/babel/toPropertyKey/toPropertyKey.js +6 -6
  96. package/helpers/babel/typeof/typeof.js +14 -14
  97. package/helpers/babel/unsupportedIterableToArray/unsupportedIterableToArray.js +12 -12
  98. package/helpers/babel/wrapAsyncGenerator/wrapAsyncGenerator.js +8 -8
  99. package/helpers/babel/wrapNativeSuper/wrapNativeSuper.js +30 -30
  100. package/helpers/babel/wrapRegExp/wrapRegExp.js +63 -63
  101. package/helpers/babel/writeOnlyError/writeOnlyError.js +4 -4
  102. package/helpers/regenerator-runtime/regenerator-runtime.js +748 -748
  103. package/package.json +5 -3
  104. package/src/buildProject.js +300 -300
  105. package/src/execute.js +184 -184
  106. package/src/internal/browser-launcher/jsenv-browser-system.js +199 -199
  107. package/src/internal/compiling/babel_plugin_import_assertions.js +121 -100
  108. package/src/internal/compiling/babel_plugin_import_metadata.js +22 -0
  109. package/src/internal/compiling/babel_plugin_import_visitor.js +84 -0
  110. package/src/internal/compiling/compile-directory/getOrGenerateCompiledFile.js +268 -265
  111. package/src/internal/compiling/compile-directory/updateMeta.js +154 -150
  112. package/src/internal/compiling/compile-directory/validateCache.js +265 -265
  113. package/src/internal/compiling/compileFile.js +215 -200
  114. package/src/internal/compiling/compileHtml.js +550 -494
  115. package/src/internal/compiling/createCompiledFileService.js +291 -290
  116. package/src/internal/compiling/html_source_file_service.js +403 -379
  117. package/src/internal/compiling/js-compilation-service/jsenvTransform.js +270 -269
  118. package/src/internal/compiling/jsenvCompilerForHtml.js +300 -293
  119. package/src/internal/compiling/startCompileServer.js +1048 -1131
  120. package/src/internal/compiling/transformResultToCompilationResult.js +220 -217
  121. package/src/internal/executing/coverage/babel_plugin_instrument.js +90 -90
  122. package/src/internal/executing/coverage/reportToCoverage.js +187 -187
  123. package/src/internal/executing/executePlan.js +183 -183
  124. package/src/internal/executing/launchAndExecute.js +458 -450
  125. package/src/internal/runtime/createBrowserRuntime/scanBrowserRuntimeFeatures.js +246 -250
  126. package/src/internal/runtime/createNodeRuntime/scanNodeRuntimeFeatures.js +112 -115
  127. package/src/internal/runtime/s.js +727 -727
  128. package/src/internal/toolbar/jsenv-logo.svg +144 -144
  129. package/src/internal/toolbar/toolbar.main.css +196 -188
  130. package/src/internal/toolbar/toolbar.main.js +227 -228
  131. package/src/internal/url_conversion.js +317 -317
  132. package/src/startExploring.js +309 -309
  133. package/src/internal/compiling/babel_plugin_transform_import_specifier.js +0 -86
  134. package/src/internal/toolbar/animation/animation.css +0 -5
  135. package/src/internal/toolbar/variant/variant.css +0 -3
@@ -1,228 +1,227 @@
1
- /* eslint-disable import/max-dependencies */
2
- import { urlIsInsideOf } from "@jsenv/filesystem/src/urlIsInsideOf.js"
3
- import { urlToRelativeUrl } from "@jsenv/filesystem/src/urlToRelativeUrl.js"
4
-
5
- import { fetchExploringJson } from "../exploring/fetchExploringJson.js"
6
- import { startJavaScriptAnimation } from "../toolbar/util/animation.js"
7
- import "./focus/toolbar.focus.js"
8
- import { renderBackToListInToolbar } from "./backtolist/toolbar.backtolist.js"
9
- import {
10
- getToolbarIframe,
11
- deactivateToolbarSection,
12
- setStyles,
13
- } from "./util/dom.js"
14
- import { createPreference } from "./util/preferences.js"
15
- import { hideTooltip, hideAllTooltip } from "./tooltip/tooltip.js"
16
- import {
17
- renderToolbarSettings,
18
- hideSettings,
19
- } from "./settings/toolbar.settings.js"
20
- import { renderToolbarNotification } from "./notification/toolbar.notification.js"
21
- import { renderToolbarTheme } from "./theme/toolbar.theme.js"
22
- import { renderToolbarAnimation } from "./animation/toolbar.animation.js"
23
- import { renderExecutionInToolbar } from "./execution/toolbar.execution.js"
24
- import { renderCompilationInToolbar } from "./compilation/toolbar.compilation.js"
25
- import { initToolbarEventSource } from "./eventsource/toolbar.eventsource.js"
26
- import { makeToolbarResponsive } from "./responsive/toolbar.responsive.js"
27
-
28
- const toolbarVisibilityPreference = createPreference("toolbar")
29
-
30
- const renderToolbar = async () => {
31
- const executedFileCompiledUrl = window.parent.location.href
32
- const compileServerOrigin = window.parent.location.origin
33
- // this should not block the whole toolbar rendering + interactivity
34
- const exploringConfig = await fetchExploringJson()
35
- const { outDirectoryRelativeUrl, livereloading } = exploringConfig
36
- const compileGroup = getCompileGroup({
37
- executedFileCompiledUrl,
38
- outDirectoryRelativeUrl,
39
- compileServerOrigin,
40
- })
41
- const executedFileRelativeUrl = compileGroup.fileRelativeUrl
42
-
43
- const toolbarOverlay = document.querySelector("#toolbar-overlay")
44
- toolbarOverlay.onclick = () => {
45
- hideAllTooltip()
46
- hideSettings()
47
- }
48
-
49
- const toolbarElement = document.querySelector("#toolbar")
50
- exposeOnParentWindow({
51
- toolbar: {
52
- element: toolbarElement,
53
- show: showToolbar,
54
- hide: () => hideToolbar(),
55
- toggle: toogleToolbar,
56
- },
57
- })
58
-
59
- const toolbarVisible = toolbarVisibilityPreference.has()
60
- ? toolbarVisibilityPreference.get()
61
- : true
62
-
63
- if (toolbarVisible) {
64
- showToolbar({ animate: false })
65
- } else {
66
- hideToolbar({ animate: false })
67
- }
68
-
69
- renderBackToListInToolbar({
70
- outDirectoryRelativeUrl,
71
- exploringHtmlFileRelativeUrl: exploringConfig.exploringHtmlFileRelativeUrl,
72
- })
73
-
74
- renderToolbarNotification()
75
- makeToolbarResponsive()
76
- renderToolbarSettings()
77
- renderToolbarAnimation()
78
- renderToolbarTheme()
79
- renderExecutionInToolbar({ executedFileRelativeUrl })
80
- renderCompilationInToolbar({ compileGroup })
81
- // this might become active but we need to detect this somehow
82
- deactivateToolbarSection(document.querySelector("#file-list-link"))
83
- initToolbarEventSource({
84
- executedFileRelativeUrl,
85
- livereloading,
86
- })
87
-
88
- // if user click enter or space quickly while closing toolbar
89
- // it will cancel the closing
90
- // that's why I used toggleToolbar and not hideToolbar
91
- document.querySelector("#button-close-toolbar").onclick = () =>
92
- toogleToolbar()
93
- }
94
-
95
- const exposeOnParentWindow = (object) => {
96
- let { __jsenv__ } = window.parent
97
- if (!__jsenv__) {
98
- __jsenv__ = {}
99
- window.parent.__jsenv__ = {}
100
- }
101
-
102
- Object.assign(__jsenv__, object)
103
- }
104
-
105
- const toogleToolbar = () => {
106
- if (toolbarIsVisible()) {
107
- hideToolbar()
108
- } else {
109
- showToolbar()
110
- }
111
- }
112
-
113
- const toolbarIsVisible = () =>
114
- document.documentElement.hasAttribute("data-toolbar-visible")
115
-
116
- let hideToolbar = () => {
117
- // toolbar hidden by default, nothing to do to hide it by default
118
- sendEventToParent("toolbar-visibility-change", false)
119
- }
120
-
121
- // (by the way it might be cool to have the toolbar auto show when)
122
- // it has something to say (being disconnected from livereload server)
123
- const showToolbar = ({ animate = true } = {}) => {
124
- toolbarVisibilityPreference.set(true)
125
- if (animate) {
126
- document.documentElement.setAttribute("data-toolbar-animation", "")
127
- } else {
128
- document.documentElement.removeAttribute("data-toolbar-animation")
129
- }
130
- document.documentElement.setAttribute("data-toolbar-visible", "")
131
-
132
- sendEventToParent("toolbar-visibility-change", true)
133
-
134
- const toolbarIframe = getToolbarIframe()
135
- const toolbarIframeParent = toolbarIframe.parentNode
136
- const parentWindow = window.parent
137
- const parentDocumentElement =
138
- parentWindow.document.compatMode === "CSS1Compat"
139
- ? parentWindow.document.documentElement
140
- : parentWindow.document.body
141
-
142
- const scrollYMax =
143
- parentDocumentElement.scrollHeight - parentWindow.innerHeight
144
- const scrollY = parentDocumentElement.scrollTop
145
- const scrollYRemaining = scrollYMax - scrollY
146
-
147
- setStyles(toolbarIframeParent, {
148
- "transition-property": "padding-bottom",
149
- "transition-duration": "300ms",
150
- })
151
- // maybe we should use js animation here because we would not conflict with css
152
- const restoreToolbarIframeParentStyles = setStyles(toolbarIframeParent, {
153
- "scroll-padding-bottom": "40px", // same here we should add 40px
154
- "padding-bottom": "40px", // if there is already one we should add 40px
155
- })
156
- const restoreToolbarIframeStyles = setStyles(toolbarIframe, {
157
- height: "40px",
158
- visibility: "visible",
159
- })
160
-
161
- if (scrollYRemaining < 40 && scrollYMax > 0) {
162
- const scrollEnd = scrollY + 40
163
- startJavaScriptAnimation({
164
- duration: 300,
165
- onProgress: ({ progress }) => {
166
- const value = scrollY + (scrollEnd - scrollY) * progress
167
- parentDocumentElement.scrollTop = value
168
- },
169
- })
170
- }
171
-
172
- hideToolbar = () => {
173
- restoreToolbarIframeParentStyles()
174
- restoreToolbarIframeStyles()
175
-
176
- hideTooltip(document.querySelector("#eventsource-indicator"))
177
- hideTooltip(document.querySelector("#execution-indicator"))
178
- toolbarVisibilityPreference.set(false)
179
- if (animate) {
180
- document.documentElement.setAttribute("data-toolbar-animation", "")
181
- } else {
182
- document.documentElement.removeAttribute("data-toolbar-animation")
183
- }
184
- document.documentElement.removeAttribute("data-toolbar-visible")
185
- sendEventToParent("toolbar-visibility-change", false)
186
- }
187
- }
188
-
189
- const getCompileGroup = ({
190
- executedFileCompiledUrl,
191
- outDirectoryRelativeUrl,
192
- compileServerOrigin,
193
- }) => {
194
- const outDirectoryServerUrl = String(
195
- new URL(outDirectoryRelativeUrl, compileServerOrigin),
196
- )
197
- if (urlIsInsideOf(executedFileCompiledUrl, outDirectoryServerUrl)) {
198
- const afterCompileDirectory = urlToRelativeUrl(
199
- executedFileCompiledUrl,
200
- outDirectoryServerUrl,
201
- )
202
- const slashIndex = afterCompileDirectory.indexOf("/")
203
- const fileRelativeUrl = afterCompileDirectory.slice(slashIndex + 1)
204
- return {
205
- fileRelativeUrl,
206
- outDirectoryRelativeUrl,
207
- compileId: afterCompileDirectory.slice(0, slashIndex),
208
- }
209
- }
210
- return {
211
- fileRelativeUrl: new URL(executedFileCompiledUrl).pathname.slice(1),
212
- outDirectoryRelativeUrl,
213
- compileId: null,
214
- }
215
- }
216
-
217
- const sendEventToParent = (type, value) => {
218
- window.parent.postMessage(
219
- {
220
- jsenv: true,
221
- type,
222
- value,
223
- },
224
- "*",
225
- )
226
- }
227
-
228
- window.renderToolbar = renderToolbar
1
+ import { urlIsInsideOf } from "@jsenv/filesystem/src/urlIsInsideOf.js"
2
+ import { urlToRelativeUrl } from "@jsenv/filesystem/src/urlToRelativeUrl.js"
3
+
4
+ import { fetchExploringJson } from "../exploring/fetchExploringJson.js"
5
+ import { startJavaScriptAnimation } from "../toolbar/util/animation.js"
6
+ import "./focus/toolbar.focus.js"
7
+ import { renderBackToListInToolbar } from "./backtolist/toolbar.backtolist.js"
8
+ import {
9
+ getToolbarIframe,
10
+ deactivateToolbarSection,
11
+ setStyles,
12
+ } from "./util/dom.js"
13
+ import { createPreference } from "./util/preferences.js"
14
+ import { hideTooltip, hideAllTooltip } from "./tooltip/tooltip.js"
15
+ import {
16
+ renderToolbarSettings,
17
+ hideSettings,
18
+ } from "./settings/toolbar.settings.js"
19
+ import { renderToolbarNotification } from "./notification/toolbar.notification.js"
20
+ import { renderToolbarTheme } from "./theme/toolbar.theme.js"
21
+ import { renderToolbarAnimation } from "./animation/toolbar.animation.js"
22
+ import { renderExecutionInToolbar } from "./execution/toolbar.execution.js"
23
+ import { renderCompilationInToolbar } from "./compilation/toolbar.compilation.js"
24
+ import { initToolbarEventSource } from "./eventsource/toolbar.eventsource.js"
25
+ import { makeToolbarResponsive } from "./responsive/toolbar.responsive.js"
26
+
27
+ const toolbarVisibilityPreference = createPreference("toolbar")
28
+
29
+ const renderToolbar = async () => {
30
+ const executedFileCompiledUrl = window.parent.location.href
31
+ const compileServerOrigin = window.parent.location.origin
32
+ // this should not block the whole toolbar rendering + interactivity
33
+ const exploringConfig = await fetchExploringJson()
34
+ const { outDirectoryRelativeUrl, livereloading } = exploringConfig
35
+ const compileGroup = getCompileGroup({
36
+ executedFileCompiledUrl,
37
+ outDirectoryRelativeUrl,
38
+ compileServerOrigin,
39
+ })
40
+ const executedFileRelativeUrl = compileGroup.fileRelativeUrl
41
+
42
+ const toolbarOverlay = document.querySelector("#toolbar-overlay")
43
+ toolbarOverlay.onclick = () => {
44
+ hideAllTooltip()
45
+ hideSettings()
46
+ }
47
+
48
+ const toolbarElement = document.querySelector("#toolbar")
49
+ exposeOnParentWindow({
50
+ toolbar: {
51
+ element: toolbarElement,
52
+ show: showToolbar,
53
+ hide: () => hideToolbar(),
54
+ toggle: toogleToolbar,
55
+ },
56
+ })
57
+
58
+ const toolbarVisible = toolbarVisibilityPreference.has()
59
+ ? toolbarVisibilityPreference.get()
60
+ : true
61
+
62
+ if (toolbarVisible) {
63
+ showToolbar({ animate: false })
64
+ } else {
65
+ hideToolbar({ animate: false })
66
+ }
67
+
68
+ renderBackToListInToolbar({
69
+ outDirectoryRelativeUrl,
70
+ exploringHtmlFileRelativeUrl: exploringConfig.exploringHtmlFileRelativeUrl,
71
+ })
72
+
73
+ renderToolbarNotification()
74
+ makeToolbarResponsive()
75
+ renderToolbarSettings()
76
+ renderToolbarAnimation()
77
+ renderToolbarTheme()
78
+ renderExecutionInToolbar({ executedFileRelativeUrl })
79
+ renderCompilationInToolbar({ compileGroup })
80
+ // this might become active but we need to detect this somehow
81
+ deactivateToolbarSection(document.querySelector("#file-list-link"))
82
+ initToolbarEventSource({
83
+ executedFileRelativeUrl,
84
+ livereloading,
85
+ })
86
+
87
+ // if user click enter or space quickly while closing toolbar
88
+ // it will cancel the closing
89
+ // that's why I used toggleToolbar and not hideToolbar
90
+ document.querySelector("#button-close-toolbar").onclick = () =>
91
+ toogleToolbar()
92
+ }
93
+
94
+ const exposeOnParentWindow = (object) => {
95
+ let { __jsenv__ } = window.parent
96
+ if (!__jsenv__) {
97
+ __jsenv__ = {}
98
+ window.parent.__jsenv__ = {}
99
+ }
100
+
101
+ Object.assign(__jsenv__, object)
102
+ }
103
+
104
+ const toogleToolbar = () => {
105
+ if (toolbarIsVisible()) {
106
+ hideToolbar()
107
+ } else {
108
+ showToolbar()
109
+ }
110
+ }
111
+
112
+ const toolbarIsVisible = () =>
113
+ document.documentElement.hasAttribute("data-toolbar-visible")
114
+
115
+ let hideToolbar = () => {
116
+ // toolbar hidden by default, nothing to do to hide it by default
117
+ sendEventToParent("toolbar-visibility-change", false)
118
+ }
119
+
120
+ // (by the way it might be cool to have the toolbar auto show when)
121
+ // it has something to say (being disconnected from livereload server)
122
+ const showToolbar = ({ animate = true } = {}) => {
123
+ toolbarVisibilityPreference.set(true)
124
+ if (animate) {
125
+ document.documentElement.setAttribute("data-toolbar-animation", "")
126
+ } else {
127
+ document.documentElement.removeAttribute("data-toolbar-animation")
128
+ }
129
+ document.documentElement.setAttribute("data-toolbar-visible", "")
130
+
131
+ sendEventToParent("toolbar-visibility-change", true)
132
+
133
+ const toolbarIframe = getToolbarIframe()
134
+ const toolbarIframeParent = toolbarIframe.parentNode
135
+ const parentWindow = window.parent
136
+ const parentDocumentElement =
137
+ parentWindow.document.compatMode === "CSS1Compat"
138
+ ? parentWindow.document.documentElement
139
+ : parentWindow.document.body
140
+
141
+ const scrollYMax =
142
+ parentDocumentElement.scrollHeight - parentWindow.innerHeight
143
+ const scrollY = parentDocumentElement.scrollTop
144
+ const scrollYRemaining = scrollYMax - scrollY
145
+
146
+ setStyles(toolbarIframeParent, {
147
+ "transition-property": "padding-bottom",
148
+ "transition-duration": "300ms",
149
+ })
150
+ // maybe we should use js animation here because we would not conflict with css
151
+ const restoreToolbarIframeParentStyles = setStyles(toolbarIframeParent, {
152
+ "scroll-padding-bottom": "40px", // same here we should add 40px
153
+ "padding-bottom": "40px", // if there is already one we should add 40px
154
+ })
155
+ const restoreToolbarIframeStyles = setStyles(toolbarIframe, {
156
+ height: "40px",
157
+ visibility: "visible",
158
+ })
159
+
160
+ if (scrollYRemaining < 40 && scrollYMax > 0) {
161
+ const scrollEnd = scrollY + 40
162
+ startJavaScriptAnimation({
163
+ duration: 300,
164
+ onProgress: ({ progress }) => {
165
+ const value = scrollY + (scrollEnd - scrollY) * progress
166
+ parentDocumentElement.scrollTop = value
167
+ },
168
+ })
169
+ }
170
+
171
+ hideToolbar = () => {
172
+ restoreToolbarIframeParentStyles()
173
+ restoreToolbarIframeStyles()
174
+
175
+ hideTooltip(document.querySelector("#eventsource-indicator"))
176
+ hideTooltip(document.querySelector("#execution-indicator"))
177
+ toolbarVisibilityPreference.set(false)
178
+ if (animate) {
179
+ document.documentElement.setAttribute("data-toolbar-animation", "")
180
+ } else {
181
+ document.documentElement.removeAttribute("data-toolbar-animation")
182
+ }
183
+ document.documentElement.removeAttribute("data-toolbar-visible")
184
+ sendEventToParent("toolbar-visibility-change", false)
185
+ }
186
+ }
187
+
188
+ const getCompileGroup = ({
189
+ executedFileCompiledUrl,
190
+ outDirectoryRelativeUrl,
191
+ compileServerOrigin,
192
+ }) => {
193
+ const outDirectoryServerUrl = String(
194
+ new URL(outDirectoryRelativeUrl, compileServerOrigin),
195
+ )
196
+ if (urlIsInsideOf(executedFileCompiledUrl, outDirectoryServerUrl)) {
197
+ const afterCompileDirectory = urlToRelativeUrl(
198
+ executedFileCompiledUrl,
199
+ outDirectoryServerUrl,
200
+ )
201
+ const slashIndex = afterCompileDirectory.indexOf("/")
202
+ const fileRelativeUrl = afterCompileDirectory.slice(slashIndex + 1)
203
+ return {
204
+ fileRelativeUrl,
205
+ outDirectoryRelativeUrl,
206
+ compileId: afterCompileDirectory.slice(0, slashIndex),
207
+ }
208
+ }
209
+ return {
210
+ fileRelativeUrl: new URL(executedFileCompiledUrl).pathname.slice(1),
211
+ outDirectoryRelativeUrl,
212
+ compileId: null,
213
+ }
214
+ }
215
+
216
+ const sendEventToParent = (type, value) => {
217
+ window.parent.postMessage(
218
+ {
219
+ jsenv: true,
220
+ type,
221
+ value,
222
+ },
223
+ "*",
224
+ )
225
+ }
226
+
227
+ window.renderToolbar = renderToolbar