@jsenv/core 23.8.2 → 23.8.7

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 (133) hide show
  1. package/dist/jsenv_browser_system.js +46 -39
  2. package/dist/jsenv_browser_system.js.map +14 -14
  3. package/dist/jsenv_compile_proxy.js.map +6 -6
  4. package/dist/jsenv_exploring_index.js.map +5 -5
  5. package/dist/jsenv_exploring_redirector.js.map +12 -12
  6. package/dist/jsenv_toolbar.js.map +7 -7
  7. package/dist/jsenv_toolbar_injector.js.map +5 -5
  8. package/helpers/babel/.eslintrc.cjs +24 -24
  9. package/helpers/babel/AsyncGenerator/AsyncGenerator.js +81 -81
  10. package/helpers/babel/AwaitValue/AwaitValue.js +3 -3
  11. package/helpers/babel/applyDecoratorDescriptor/applyDecoratorDescriptor.js +33 -33
  12. package/helpers/babel/arrayLikeToArray/arrayLikeToArray.js +7 -7
  13. package/helpers/babel/arrayWithHoles/arrayWithHoles.js +4 -4
  14. package/helpers/babel/arrayWithoutHoles/arrayWithoutHoles.js +6 -6
  15. package/helpers/babel/assertThisInitialized/assertThisInitialized.js +7 -7
  16. package/helpers/babel/asyncGeneratorDelegate/asyncGeneratorDelegate.js +40 -40
  17. package/helpers/babel/asyncIterator/asyncIterator.js +12 -12
  18. package/helpers/babel/asyncToGenerator/asyncToGenerator.js +34 -34
  19. package/helpers/babel/awaitAsyncGenerator/awaitAsyncGenerator.js +5 -5
  20. package/helpers/babel/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +20 -20
  21. package/helpers/babel/classApplyDescriptorGet/classApplyDescriptorGet.js +6 -6
  22. package/helpers/babel/classApplyDescriptorSet/classApplyDescriptorSet.js +13 -13
  23. package/helpers/babel/classCallCheck/classCallCheck.js +5 -5
  24. package/helpers/babel/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -5
  25. package/helpers/babel/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -6
  26. package/helpers/babel/classExtractFieldDescriptor/classExtractFieldDescriptor.js +7 -7
  27. package/helpers/babel/classNameTDZError/classNameTDZError.js +4 -4
  28. package/helpers/babel/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +7 -7
  29. package/helpers/babel/classPrivateFieldGet/classPrivateFieldGet.js +7 -7
  30. package/helpers/babel/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +6 -6
  31. package/helpers/babel/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -5
  32. package/helpers/babel/classPrivateFieldSet/classPrivateFieldSet.js +8 -8
  33. package/helpers/babel/classPrivateMethodGet/classPrivateMethodGet.js +6 -6
  34. package/helpers/babel/classPrivateMethodSet/classPrivateMethodSet.js +3 -3
  35. package/helpers/babel/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +9 -9
  36. package/helpers/babel/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +15 -15
  37. package/helpers/babel/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +6 -6
  38. package/helpers/babel/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -3
  39. package/helpers/babel/construct/construct.js +16 -16
  40. package/helpers/babel/createClass/createClass.js +15 -15
  41. package/helpers/babel/createForOfIteratorHelper/createForOfIteratorHelper.js +60 -60
  42. package/helpers/babel/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +23 -23
  43. package/helpers/babel/createRawReactElement/createRawReactElement.js +50 -50
  44. package/helpers/babel/createSuper/createSuper.js +22 -22
  45. package/helpers/babel/decorate/decorate.js +403 -403
  46. package/helpers/babel/defaults/defaults.js +11 -11
  47. package/helpers/babel/defineEnumerableProperties/defineEnumerableProperties.js +23 -23
  48. package/helpers/babel/defineProperty/defineProperty.js +18 -18
  49. package/helpers/babel/extends/extends.js +14 -14
  50. package/helpers/babel/get/get.js +13 -13
  51. package/helpers/babel/getPrototypeOf/getPrototypeOf.js +4 -4
  52. package/helpers/babel/inherits/inherits.js +15 -15
  53. package/helpers/babel/inheritsLoose/inheritsLoose.js +7 -7
  54. package/helpers/babel/initializerDefineProperty/initializerDefineProperty.js +10 -10
  55. package/helpers/babel/initializerWarningHelper/initializerWarningHelper.js +6 -6
  56. package/helpers/babel/instanceof/instanceof.js +6 -6
  57. package/helpers/babel/interopRequireDefault/interopRequireDefault.js +3 -3
  58. package/helpers/babel/interopRequireWildcard/interopRequireWildcard.js +37 -37
  59. package/helpers/babel/isNativeFunction/isNativeFunction.js +4 -4
  60. package/helpers/babel/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -21
  61. package/helpers/babel/iterableToArray/iterableToArray.js +7 -7
  62. package/helpers/babel/iterableToArrayLimit/iterableToArrayLimit.js +36 -36
  63. package/helpers/babel/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +10 -10
  64. package/helpers/babel/jsx/jsx.js +45 -45
  65. package/helpers/babel/maybeArrayLike/maybeArrayLike.js +10 -10
  66. package/helpers/babel/newArrowCheck/newArrowCheck.js +5 -5
  67. package/helpers/babel/nonIterableRest/nonIterableRest.js +5 -5
  68. package/helpers/babel/nonIterableSpread/nonIterableSpread.js +5 -5
  69. package/helpers/babel/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -3
  70. package/helpers/babel/objectSpread/objectSpread.js +23 -23
  71. package/helpers/babel/objectSpread2/objectSpread2.js +33 -33
  72. package/helpers/babel/objectWithoutProperties/objectWithoutProperties.js +19 -19
  73. package/helpers/babel/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +13 -13
  74. package/helpers/babel/possibleConstructorReturn/possibleConstructorReturn.js +10 -10
  75. package/helpers/babel/readOnlyError/readOnlyError.js +4 -4
  76. package/helpers/babel/readme.md +9 -9
  77. package/helpers/babel/set/set.js +44 -44
  78. package/helpers/babel/setPrototypeOf/setPrototypeOf.js +6 -6
  79. package/helpers/babel/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -8
  80. package/helpers/babel/slicedToArray/slicedToArray.js +10 -10
  81. package/helpers/babel/slicedToArrayLoose/slicedToArrayLoose.js +13 -13
  82. package/helpers/babel/superPropBase/superPropBase.js +10 -10
  83. package/helpers/babel/taggedTemplateLiteral/taggedTemplateLiteral.js +10 -10
  84. package/helpers/babel/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +7 -7
  85. package/helpers/babel/tdz/tdz.js +4 -4
  86. package/helpers/babel/temporalRef/temporalRef.js +6 -6
  87. package/helpers/babel/temporalUndefined/temporalUndefined.js +3 -3
  88. package/helpers/babel/toArray/toArray.js +10 -10
  89. package/helpers/babel/toConsumableArray/toConsumableArray.js +10 -10
  90. package/helpers/babel/toPrimitive/toPrimitive.js +10 -10
  91. package/helpers/babel/toPropertyKey/toPropertyKey.js +6 -6
  92. package/helpers/babel/typeof/typeof.js +14 -14
  93. package/helpers/babel/unsupportedIterableToArray/unsupportedIterableToArray.js +12 -12
  94. package/helpers/babel/wrapAsyncGenerator/wrapAsyncGenerator.js +8 -8
  95. package/helpers/babel/wrapNativeSuper/wrapNativeSuper.js +30 -30
  96. package/helpers/babel/wrapRegExp/wrapRegExp.js +63 -63
  97. package/helpers/babel/writeOnlyError/writeOnlyError.js +4 -4
  98. package/helpers/regenerator-runtime/regenerator-runtime.js +748 -748
  99. package/{LICENSE → license} +21 -21
  100. package/package.json +2 -2
  101. package/src/buildProject.js +300 -300
  102. package/src/execute.js +184 -184
  103. package/src/internal/browser-launcher/jsenv-browser-system.js +203 -199
  104. package/src/internal/building/buildUsingRollup.js +2 -10
  105. package/src/internal/compiling/babel_plugin_import_assertions.js +121 -121
  106. package/src/internal/compiling/babel_plugin_import_metadata.js +22 -22
  107. package/src/internal/compiling/babel_plugin_import_visitor.js +84 -84
  108. package/src/internal/compiling/compile-directory/getOrGenerateCompiledFile.js +268 -268
  109. package/src/internal/compiling/compile-directory/updateMeta.js +154 -154
  110. package/src/internal/compiling/compile-directory/validateCache.js +265 -265
  111. package/src/internal/compiling/compileFile.js +233 -224
  112. package/src/internal/compiling/compileHtml.js +550 -550
  113. package/src/internal/compiling/createCompiledFileService.js +291 -291
  114. package/src/internal/compiling/html_source_file_service.js +403 -404
  115. package/src/internal/compiling/js-compilation-service/jsenvTransform.js +272 -270
  116. package/src/internal/compiling/jsenvCompilerForHtml.js +374 -308
  117. package/src/internal/compiling/jsenvCompilerForJavaScript.js +2 -0
  118. package/src/internal/compiling/startCompileServer.js +1086 -1048
  119. package/src/internal/compiling/transformResultToCompilationResult.js +220 -220
  120. package/src/internal/executing/coverage/babel_plugin_instrument.js +90 -90
  121. package/src/internal/executing/coverage/reportToCoverage.js +193 -187
  122. package/src/internal/executing/executePlan.js +183 -183
  123. package/src/internal/executing/launchAndExecute.js +458 -458
  124. package/src/internal/generateGroupMap/featuresCompatMap.js +29 -0
  125. package/src/internal/generateGroupMap/jsenvBabelPluginCompatMap.js +1 -8
  126. package/src/internal/runtime/createBrowserRuntime/scanBrowserRuntimeFeatures.js +246 -246
  127. package/src/internal/runtime/createNodeRuntime/scanNodeRuntimeFeatures.js +112 -112
  128. package/src/internal/runtime/s.js +727 -727
  129. package/src/internal/toolbar/jsenv-logo.svg +144 -144
  130. package/src/internal/toolbar/toolbar.main.css +196 -196
  131. package/src/internal/toolbar/toolbar.main.js +227 -227
  132. package/src/internal/url_conversion.js +317 -317
  133. package/src/startExploring.js +309 -309
@@ -1,309 +1,309 @@
1
- import {
2
- normalizeStructuredMetaMap,
3
- collectFiles,
4
- urlToRelativeUrl,
5
- } from "@jsenv/filesystem"
6
-
7
- import { jsenvCoreDirectoryUrl } from "./internal/jsenvCoreDirectoryUrl.js"
8
- import {
9
- assertProjectDirectoryUrl,
10
- assertProjectDirectoryExists,
11
- } from "./internal/argUtils.js"
12
- import {
13
- startCompileServer,
14
- computeOutDirectoryRelativeUrl,
15
- } from "./internal/compiling/startCompileServer.js"
16
- import { jsenvExplorableConfig } from "./jsenvExplorableConfig.js"
17
- import {
18
- sourcemapMainFileInfo,
19
- sourcemapMappingFileInfo,
20
- jsenvExploringRedirectorHtmlFileInfo,
21
- jsenvExploringRedirectorJsFileInfo,
22
- jsenvExploringIndexHtmlFileInfo,
23
- jsenvExploringIndexJsFileInfo,
24
- jsenvToolbarJsFileInfo,
25
- } from "./internal/jsenvInternalFiles.js"
26
- import { jsenvRuntimeSupportDuringDev } from "./jsenvRuntimeSupportDuringDev.js"
27
-
28
- export const startExploring = async ({
29
- signal = new AbortController().signal,
30
- handleSIGINT = true,
31
-
32
- explorableConfig = jsenvExplorableConfig,
33
- projectDirectoryUrl,
34
- jsenvDirectoryRelativeUrl,
35
- outDirectoryName = "dev",
36
- jsenvToolbar = true,
37
- livereloading = true,
38
- inlineImportMapIntoHTML = true,
39
- keepProcessAlive = true,
40
-
41
- babelPluginMap,
42
- runtimeSupportDuringDev = jsenvRuntimeSupportDuringDev,
43
- compileServerLogLevel,
44
- compileServerCanReadFromFilesystem,
45
- compileServerCanWriteOnFilesystem,
46
- compileServerPort,
47
- compileServerProtocol,
48
- compileServerHttp2,
49
- compileServerCertificate,
50
- compileServerPrivateKey,
51
- sourcemapMethod,
52
- customCompilers,
53
- livereloadWatchConfig,
54
- jsenvDirectoryClean,
55
- }) => {
56
- projectDirectoryUrl = assertProjectDirectoryUrl({ projectDirectoryUrl })
57
- await assertProjectDirectoryExists({ projectDirectoryUrl })
58
-
59
- const outDirectoryRelativeUrl = computeOutDirectoryRelativeUrl({
60
- projectDirectoryUrl,
61
- jsenvDirectoryRelativeUrl,
62
- outDirectoryName,
63
- })
64
-
65
- const redirectFiles = createRedirectFilesService({
66
- projectDirectoryUrl,
67
- outDirectoryRelativeUrl,
68
- })
69
- const serveExploringData = createExploringDataService({
70
- projectDirectoryUrl,
71
- outDirectoryRelativeUrl,
72
- explorableConfig,
73
- livereloading,
74
- })
75
- const serveExplorableListAsJson = createExplorableListAsJsonService({
76
- projectDirectoryUrl,
77
- outDirectoryRelativeUrl,
78
- explorableConfig,
79
- })
80
-
81
- const compileServer = await startCompileServer({
82
- signal,
83
- handleSIGINT,
84
- keepProcessAlive,
85
-
86
- projectDirectoryUrl,
87
- livereloadSSE: livereloading,
88
- jsenvToolbarInjection: jsenvToolbar,
89
- customServices: {
90
- "service:exploring-redirect": (request) => redirectFiles(request),
91
- "service:exploring-data": (request) => serveExploringData(request),
92
- "service:explorables": (request) => serveExplorableListAsJson(request),
93
- },
94
- customCompilers,
95
- jsenvDirectoryRelativeUrl,
96
- outDirectoryName,
97
- inlineImportMapIntoHTML,
98
-
99
- compileServerLogLevel,
100
- compileServerCanReadFromFilesystem,
101
- compileServerCanWriteOnFilesystem,
102
- compileServerPort,
103
- compileServerProtocol,
104
- compileServerHttp2,
105
- compileServerCertificate,
106
- compileServerPrivateKey,
107
- sourcemapMethod,
108
- babelPluginMap,
109
- runtimeSupport: runtimeSupportDuringDev,
110
- livereloadWatchConfig,
111
- jsenvDirectoryClean,
112
- })
113
-
114
- return compileServer
115
- }
116
-
117
- const createRedirectFilesService = ({ projectDirectoryUrl }) => {
118
- const jsenvExploringRedirectorHtmlRelativeUrlForProject = urlToRelativeUrl(
119
- jsenvExploringRedirectorHtmlFileInfo.url,
120
- projectDirectoryUrl,
121
- )
122
- const jsenvExploringRedirectorJsBuildRelativeUrlForProject = urlToRelativeUrl(
123
- jsenvExploringRedirectorJsFileInfo.jsenvBuildUrl,
124
- projectDirectoryUrl,
125
- )
126
- const jsenvExploringJsBuildRelativeUrlForProject = urlToRelativeUrl(
127
- jsenvExploringIndexJsFileInfo.jsenvBuildUrl,
128
- projectDirectoryUrl,
129
- )
130
- const jsenvToolbarJsBuildRelativeUrlForProject = urlToRelativeUrl(
131
- jsenvToolbarJsFileInfo.jsenvBuildUrl,
132
- projectDirectoryUrl,
133
- )
134
-
135
- // unfortunately browser resolves sourcemap to url before redirection (not after).
136
- // It means browser tries to load source map from "/.jsenv/jsenv-toolbar.js.map"
137
- // we could also inline sourcemap but it's not yet possible
138
- // inside buildProject
139
- const jsenvExploringIndexSourcemapInfo = {
140
- pathForBrowser: `/.jsenv/jsenv_exploring_index.js.map`,
141
- pathForServer: `/${jsenvExploringJsBuildRelativeUrlForProject}.map`,
142
- }
143
- const jsenvToolbarSourcemapInfo = {
144
- pathForBrowser: `/.jsenv/jsenv_toolbar.js.map`,
145
- pathForServer: `/${jsenvToolbarJsBuildRelativeUrlForProject}.map`,
146
- }
147
-
148
- return (request) => {
149
- // exploring redirection
150
- if (request.ressource === "/") {
151
- const jsenvExploringRedirectorHtmlServerUrl = `${request.origin}/${jsenvExploringRedirectorHtmlRelativeUrlForProject}`
152
- return {
153
- status: 307,
154
- headers: {
155
- location: jsenvExploringRedirectorHtmlServerUrl,
156
- },
157
- }
158
- }
159
- if (request.ressource === "/.jsenv/exploring.redirector.js") {
160
- const jsenvExploringRedirectorBuildServerUrl = `${request.origin}/${jsenvExploringRedirectorJsBuildRelativeUrlForProject}`
161
- return {
162
- status: 307,
163
- headers: {
164
- location: jsenvExploringRedirectorBuildServerUrl,
165
- },
166
- }
167
- }
168
-
169
- // exploring index
170
- if (request.ressource === "/.jsenv/exploring.index.js") {
171
- const jsenvExploringJsBuildServerUrl = `${request.origin}/${jsenvExploringJsBuildRelativeUrlForProject}`
172
- return {
173
- status: 307,
174
- headers: {
175
- location: jsenvExploringJsBuildServerUrl,
176
- },
177
- }
178
- }
179
- if (request.ressource === jsenvExploringIndexSourcemapInfo.pathForBrowser) {
180
- return {
181
- status: 307,
182
- headers: {
183
- location: `${request.origin}${jsenvExploringIndexSourcemapInfo.pathForServer}`,
184
- },
185
- }
186
- }
187
-
188
- // toolbar
189
- if (request.ressource === "/.jsenv/toolbar.main.js") {
190
- const jsenvToolbarJsBuildServerUrl = `${request.origin}/${jsenvToolbarJsBuildRelativeUrlForProject}`
191
- return {
192
- status: 307,
193
- headers: {
194
- location: jsenvToolbarJsBuildServerUrl,
195
- },
196
- }
197
- }
198
- if (request.ressource === jsenvToolbarSourcemapInfo.pathForBrowser) {
199
- return {
200
- status: 307,
201
- headers: {
202
- location: `${request.origin}${jsenvToolbarSourcemapInfo.pathForServer}`,
203
- },
204
- }
205
- }
206
-
207
- return null
208
- }
209
- }
210
-
211
- const createExploringDataService = ({
212
- projectDirectoryUrl,
213
- outDirectoryRelativeUrl,
214
- explorableConfig,
215
- livereloading,
216
- }) => {
217
- return (request) => {
218
- if (
219
- request.ressource === "/.jsenv/exploring.json" &&
220
- request.method === "GET"
221
- ) {
222
- const data = {
223
- projectDirectoryUrl,
224
- outDirectoryRelativeUrl,
225
- jsenvDirectoryRelativeUrl: urlToRelativeUrl(
226
- jsenvCoreDirectoryUrl,
227
- projectDirectoryUrl,
228
- ),
229
- exploringHtmlFileRelativeUrl: urlToRelativeUrl(
230
- jsenvExploringIndexHtmlFileInfo.url,
231
- projectDirectoryUrl,
232
- ),
233
- sourcemapMainFileRelativeUrl: urlToRelativeUrl(
234
- sourcemapMainFileInfo.url,
235
- jsenvCoreDirectoryUrl,
236
- ),
237
- sourcemapMappingFileRelativeUrl: urlToRelativeUrl(
238
- sourcemapMappingFileInfo.url,
239
- jsenvCoreDirectoryUrl,
240
- ),
241
- explorableConfig,
242
- livereloading,
243
- }
244
- const json = JSON.stringify(data)
245
- return {
246
- status: 200,
247
- headers: {
248
- "cache-control": "no-store",
249
- "content-type": "application/json",
250
- "content-length": Buffer.byteLength(json),
251
- },
252
- body: json,
253
- }
254
- }
255
- return null
256
- }
257
- }
258
-
259
- const createExplorableListAsJsonService = ({
260
- projectDirectoryUrl,
261
- outDirectoryRelativeUrl,
262
- explorableConfig,
263
- }) => {
264
- return async (request) => {
265
- if (
266
- request.ressource === "/.jsenv/explorables.json" &&
267
- request.method === "GET"
268
- ) {
269
- const structuredMetaMapRelativeForExplorable = {}
270
- Object.keys(explorableConfig).forEach((explorableGroup) => {
271
- const explorableGroupConfig = explorableConfig[explorableGroup]
272
- structuredMetaMapRelativeForExplorable[explorableGroup] = {
273
- "**/.jsenv/": false, // temporary (in theory) to avoid visting .jsenv directory in jsenv itself
274
- ...explorableGroupConfig,
275
- [outDirectoryRelativeUrl]: false,
276
- }
277
- })
278
- const structuredMetaMapForExplorable = normalizeStructuredMetaMap(
279
- structuredMetaMapRelativeForExplorable,
280
- projectDirectoryUrl,
281
- )
282
- const matchingFileResultArray = await collectFiles({
283
- directoryUrl: projectDirectoryUrl,
284
- structuredMetaMap: structuredMetaMapForExplorable,
285
- predicate: (meta) =>
286
- Object.keys(meta).some((explorableGroup) =>
287
- Boolean(meta[explorableGroup]),
288
- ),
289
- })
290
- const explorableFiles = matchingFileResultArray.map(
291
- ({ relativeUrl, meta }) => ({
292
- relativeUrl,
293
- meta,
294
- }),
295
- )
296
- const json = JSON.stringify(explorableFiles)
297
- return {
298
- status: 200,
299
- headers: {
300
- "cache-control": "no-store",
301
- "content-type": "application/json",
302
- "content-length": Buffer.byteLength(json),
303
- },
304
- body: json,
305
- }
306
- }
307
- return null
308
- }
309
- }
1
+ import {
2
+ normalizeStructuredMetaMap,
3
+ collectFiles,
4
+ urlToRelativeUrl,
5
+ } from "@jsenv/filesystem"
6
+
7
+ import { jsenvCoreDirectoryUrl } from "./internal/jsenvCoreDirectoryUrl.js"
8
+ import {
9
+ assertProjectDirectoryUrl,
10
+ assertProjectDirectoryExists,
11
+ } from "./internal/argUtils.js"
12
+ import {
13
+ startCompileServer,
14
+ computeOutDirectoryRelativeUrl,
15
+ } from "./internal/compiling/startCompileServer.js"
16
+ import { jsenvExplorableConfig } from "./jsenvExplorableConfig.js"
17
+ import {
18
+ sourcemapMainFileInfo,
19
+ sourcemapMappingFileInfo,
20
+ jsenvExploringRedirectorHtmlFileInfo,
21
+ jsenvExploringRedirectorJsFileInfo,
22
+ jsenvExploringIndexHtmlFileInfo,
23
+ jsenvExploringIndexJsFileInfo,
24
+ jsenvToolbarJsFileInfo,
25
+ } from "./internal/jsenvInternalFiles.js"
26
+ import { jsenvRuntimeSupportDuringDev } from "./jsenvRuntimeSupportDuringDev.js"
27
+
28
+ export const startExploring = async ({
29
+ signal = new AbortController().signal,
30
+ handleSIGINT = true,
31
+
32
+ explorableConfig = jsenvExplorableConfig,
33
+ projectDirectoryUrl,
34
+ jsenvDirectoryRelativeUrl,
35
+ outDirectoryName = "dev",
36
+ jsenvToolbar = true,
37
+ livereloading = true,
38
+ inlineImportMapIntoHTML = true,
39
+ keepProcessAlive = true,
40
+
41
+ babelPluginMap,
42
+ runtimeSupportDuringDev = jsenvRuntimeSupportDuringDev,
43
+ compileServerLogLevel,
44
+ compileServerCanReadFromFilesystem,
45
+ compileServerCanWriteOnFilesystem,
46
+ compileServerPort,
47
+ compileServerProtocol,
48
+ compileServerHttp2,
49
+ compileServerCertificate,
50
+ compileServerPrivateKey,
51
+ sourcemapMethod,
52
+ customCompilers,
53
+ livereloadWatchConfig,
54
+ jsenvDirectoryClean,
55
+ }) => {
56
+ projectDirectoryUrl = assertProjectDirectoryUrl({ projectDirectoryUrl })
57
+ await assertProjectDirectoryExists({ projectDirectoryUrl })
58
+
59
+ const outDirectoryRelativeUrl = computeOutDirectoryRelativeUrl({
60
+ projectDirectoryUrl,
61
+ jsenvDirectoryRelativeUrl,
62
+ outDirectoryName,
63
+ })
64
+
65
+ const redirectFiles = createRedirectFilesService({
66
+ projectDirectoryUrl,
67
+ outDirectoryRelativeUrl,
68
+ })
69
+ const serveExploringData = createExploringDataService({
70
+ projectDirectoryUrl,
71
+ outDirectoryRelativeUrl,
72
+ explorableConfig,
73
+ livereloading,
74
+ })
75
+ const serveExplorableListAsJson = createExplorableListAsJsonService({
76
+ projectDirectoryUrl,
77
+ outDirectoryRelativeUrl,
78
+ explorableConfig,
79
+ })
80
+
81
+ const compileServer = await startCompileServer({
82
+ signal,
83
+ handleSIGINT,
84
+ keepProcessAlive,
85
+
86
+ projectDirectoryUrl,
87
+ livereloadSSE: livereloading,
88
+ jsenvToolbarInjection: jsenvToolbar,
89
+ customServices: {
90
+ "service:exploring-redirect": (request) => redirectFiles(request),
91
+ "service:exploring-data": (request) => serveExploringData(request),
92
+ "service:explorables": (request) => serveExplorableListAsJson(request),
93
+ },
94
+ customCompilers,
95
+ jsenvDirectoryRelativeUrl,
96
+ outDirectoryName,
97
+ inlineImportMapIntoHTML,
98
+
99
+ compileServerLogLevel,
100
+ compileServerCanReadFromFilesystem,
101
+ compileServerCanWriteOnFilesystem,
102
+ compileServerPort,
103
+ compileServerProtocol,
104
+ compileServerHttp2,
105
+ compileServerCertificate,
106
+ compileServerPrivateKey,
107
+ sourcemapMethod,
108
+ babelPluginMap,
109
+ runtimeSupport: runtimeSupportDuringDev,
110
+ livereloadWatchConfig,
111
+ jsenvDirectoryClean,
112
+ })
113
+
114
+ return compileServer
115
+ }
116
+
117
+ const createRedirectFilesService = ({ projectDirectoryUrl }) => {
118
+ const jsenvExploringRedirectorHtmlRelativeUrlForProject = urlToRelativeUrl(
119
+ jsenvExploringRedirectorHtmlFileInfo.url,
120
+ projectDirectoryUrl,
121
+ )
122
+ const jsenvExploringRedirectorJsBuildRelativeUrlForProject = urlToRelativeUrl(
123
+ jsenvExploringRedirectorJsFileInfo.jsenvBuildUrl,
124
+ projectDirectoryUrl,
125
+ )
126
+ const jsenvExploringJsBuildRelativeUrlForProject = urlToRelativeUrl(
127
+ jsenvExploringIndexJsFileInfo.jsenvBuildUrl,
128
+ projectDirectoryUrl,
129
+ )
130
+ const jsenvToolbarJsBuildRelativeUrlForProject = urlToRelativeUrl(
131
+ jsenvToolbarJsFileInfo.jsenvBuildUrl,
132
+ projectDirectoryUrl,
133
+ )
134
+
135
+ // unfortunately browser resolves sourcemap to url before redirection (not after).
136
+ // It means browser tries to load source map from "/.jsenv/jsenv-toolbar.js.map"
137
+ // we could also inline sourcemap but it's not yet possible
138
+ // inside buildProject
139
+ const jsenvExploringIndexSourcemapInfo = {
140
+ pathForBrowser: `/.jsenv/jsenv_exploring_index.js.map`,
141
+ pathForServer: `/${jsenvExploringJsBuildRelativeUrlForProject}.map`,
142
+ }
143
+ const jsenvToolbarSourcemapInfo = {
144
+ pathForBrowser: `/.jsenv/jsenv_toolbar.js.map`,
145
+ pathForServer: `/${jsenvToolbarJsBuildRelativeUrlForProject}.map`,
146
+ }
147
+
148
+ return (request) => {
149
+ // exploring redirection
150
+ if (request.ressource === "/") {
151
+ const jsenvExploringRedirectorHtmlServerUrl = `${request.origin}/${jsenvExploringRedirectorHtmlRelativeUrlForProject}`
152
+ return {
153
+ status: 307,
154
+ headers: {
155
+ location: jsenvExploringRedirectorHtmlServerUrl,
156
+ },
157
+ }
158
+ }
159
+ if (request.ressource === "/.jsenv/exploring.redirector.js") {
160
+ const jsenvExploringRedirectorBuildServerUrl = `${request.origin}/${jsenvExploringRedirectorJsBuildRelativeUrlForProject}`
161
+ return {
162
+ status: 307,
163
+ headers: {
164
+ location: jsenvExploringRedirectorBuildServerUrl,
165
+ },
166
+ }
167
+ }
168
+
169
+ // exploring index
170
+ if (request.ressource === "/.jsenv/exploring.index.js") {
171
+ const jsenvExploringJsBuildServerUrl = `${request.origin}/${jsenvExploringJsBuildRelativeUrlForProject}`
172
+ return {
173
+ status: 307,
174
+ headers: {
175
+ location: jsenvExploringJsBuildServerUrl,
176
+ },
177
+ }
178
+ }
179
+ if (request.ressource === jsenvExploringIndexSourcemapInfo.pathForBrowser) {
180
+ return {
181
+ status: 307,
182
+ headers: {
183
+ location: `${request.origin}${jsenvExploringIndexSourcemapInfo.pathForServer}`,
184
+ },
185
+ }
186
+ }
187
+
188
+ // toolbar
189
+ if (request.ressource === "/.jsenv/toolbar.main.js") {
190
+ const jsenvToolbarJsBuildServerUrl = `${request.origin}/${jsenvToolbarJsBuildRelativeUrlForProject}`
191
+ return {
192
+ status: 307,
193
+ headers: {
194
+ location: jsenvToolbarJsBuildServerUrl,
195
+ },
196
+ }
197
+ }
198
+ if (request.ressource === jsenvToolbarSourcemapInfo.pathForBrowser) {
199
+ return {
200
+ status: 307,
201
+ headers: {
202
+ location: `${request.origin}${jsenvToolbarSourcemapInfo.pathForServer}`,
203
+ },
204
+ }
205
+ }
206
+
207
+ return null
208
+ }
209
+ }
210
+
211
+ const createExploringDataService = ({
212
+ projectDirectoryUrl,
213
+ outDirectoryRelativeUrl,
214
+ explorableConfig,
215
+ livereloading,
216
+ }) => {
217
+ return (request) => {
218
+ if (
219
+ request.ressource === "/.jsenv/exploring.json" &&
220
+ request.method === "GET"
221
+ ) {
222
+ const data = {
223
+ projectDirectoryUrl,
224
+ outDirectoryRelativeUrl,
225
+ jsenvDirectoryRelativeUrl: urlToRelativeUrl(
226
+ jsenvCoreDirectoryUrl,
227
+ projectDirectoryUrl,
228
+ ),
229
+ exploringHtmlFileRelativeUrl: urlToRelativeUrl(
230
+ jsenvExploringIndexHtmlFileInfo.url,
231
+ projectDirectoryUrl,
232
+ ),
233
+ sourcemapMainFileRelativeUrl: urlToRelativeUrl(
234
+ sourcemapMainFileInfo.url,
235
+ jsenvCoreDirectoryUrl,
236
+ ),
237
+ sourcemapMappingFileRelativeUrl: urlToRelativeUrl(
238
+ sourcemapMappingFileInfo.url,
239
+ jsenvCoreDirectoryUrl,
240
+ ),
241
+ explorableConfig,
242
+ livereloading,
243
+ }
244
+ const json = JSON.stringify(data)
245
+ return {
246
+ status: 200,
247
+ headers: {
248
+ "cache-control": "no-store",
249
+ "content-type": "application/json",
250
+ "content-length": Buffer.byteLength(json),
251
+ },
252
+ body: json,
253
+ }
254
+ }
255
+ return null
256
+ }
257
+ }
258
+
259
+ const createExplorableListAsJsonService = ({
260
+ projectDirectoryUrl,
261
+ outDirectoryRelativeUrl,
262
+ explorableConfig,
263
+ }) => {
264
+ return async (request) => {
265
+ if (
266
+ request.ressource === "/.jsenv/explorables.json" &&
267
+ request.method === "GET"
268
+ ) {
269
+ const structuredMetaMapRelativeForExplorable = {}
270
+ Object.keys(explorableConfig).forEach((explorableGroup) => {
271
+ const explorableGroupConfig = explorableConfig[explorableGroup]
272
+ structuredMetaMapRelativeForExplorable[explorableGroup] = {
273
+ "**/.jsenv/": false, // temporary (in theory) to avoid visting .jsenv directory in jsenv itself
274
+ ...explorableGroupConfig,
275
+ [outDirectoryRelativeUrl]: false,
276
+ }
277
+ })
278
+ const structuredMetaMapForExplorable = normalizeStructuredMetaMap(
279
+ structuredMetaMapRelativeForExplorable,
280
+ projectDirectoryUrl,
281
+ )
282
+ const matchingFileResultArray = await collectFiles({
283
+ directoryUrl: projectDirectoryUrl,
284
+ structuredMetaMap: structuredMetaMapForExplorable,
285
+ predicate: (meta) =>
286
+ Object.keys(meta).some((explorableGroup) =>
287
+ Boolean(meta[explorableGroup]),
288
+ ),
289
+ })
290
+ const explorableFiles = matchingFileResultArray.map(
291
+ ({ relativeUrl, meta }) => ({
292
+ relativeUrl,
293
+ meta,
294
+ }),
295
+ )
296
+ const json = JSON.stringify(explorableFiles)
297
+ return {
298
+ status: 200,
299
+ headers: {
300
+ "cache-control": "no-store",
301
+ "content-type": "application/json",
302
+ "content-length": Buffer.byteLength(json),
303
+ },
304
+ body: json,
305
+ }
306
+ }
307
+ return null
308
+ }
309
+ }