@jsenv/core 23.2.2 → 23.4.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/{license → LICENSE} +0 -0
- package/package.json +13 -14
- package/readme.md +4 -4
- package/src/buildProject.js +12 -13
- package/src/execute.js +92 -93
- package/src/executeTestPlan.js +9 -8
- package/src/internal/browser-launcher/executeHtmlFile.js +26 -23
- package/src/internal/building/buildUsingRollup.js +3 -4
- package/src/internal/building/build_logs.js +7 -6
- package/src/internal/building/createJsenvRollupPlugin.js +9 -14
- package/src/internal/building/url_trace.js +3 -4
- package/src/internal/compiling/createCompiledFileService.js +21 -6
- package/src/internal/compiling/startCompileServer.js +55 -46
- package/src/internal/executing/coverage/babel_plugin_instrument.js +1 -0
- package/src/internal/executing/coverage/reportToCoverage.js +147 -120
- package/src/internal/executing/{coverage → coverage_empty}/createEmptyCoverage.js +0 -0
- package/src/internal/executing/coverage_empty/list_files_not_covered.js +20 -0
- package/src/internal/executing/{coverage → coverage_empty}/relativeUrlToEmptyCoverage.js +3 -4
- package/src/internal/executing/{coverage/generateCoverageHtmlDirectory.js → coverage_reporter/coverage_reporter_html_directory.js} +11 -4
- package/src/internal/executing/{coverage/generateCoverageJsonFile.js → coverage_reporter/coverage_reporter_json_file.js} +0 -0
- package/src/internal/executing/{coverage/generateCoverageTextLog.js → coverage_reporter/coverage_reporter_text_log.js} +4 -2
- package/src/internal/executing/{coverage → coverage_reporter}/istanbulCoverageMapFromCoverage.js +0 -0
- package/src/internal/executing/{coverage/normalizeIstanbulCoverage.js → coverage_utils/file_by_file_coverage.js} +9 -7
- package/src/internal/executing/coverage_utils/istanbul_coverage_composition.js +28 -0
- package/src/internal/executing/coverage_utils/v8_and_istanbul.js +38 -0
- package/src/internal/executing/coverage_utils/v8_coverage_composition.js +23 -0
- package/src/internal/executing/coverage_utils/v8_coverage_from_directory.js +65 -0
- package/src/internal/executing/coverage_utils/v8_coverage_to_istanbul.js +90 -0
- package/src/internal/executing/createSummaryLog.js +15 -15
- package/src/internal/executing/executeConcurrently.js +92 -32
- package/src/internal/executing/executePlan.js +84 -81
- package/src/internal/executing/executionLogs.js +14 -18
- package/src/internal/executing/execution_colors.js +6 -12
- package/src/internal/executing/launchAndExecute.js +172 -169
- package/src/internal/node-launcher/createControllableNodeProcess.js +26 -23
- package/src/launchBrowser.js +72 -69
- package/src/launchNode.js +11 -99
- package/src/startExploring.js +2 -17
- package/src/abort/abortable.js +0 -172
- package/src/abort/callback_list.js +0 -64
- package/src/abort/callback_race.js +0 -34
- package/src/abort/cleaner.js +0 -22
- package/src/abort/main.js +0 -32
- package/src/abort/process_teardown_events.js +0 -59
- package/src/internal/createCallbackList.js +0 -21
- package/src/internal/executing/coverage/composeIstanbulCoverages.js +0 -108
- package/src/internal/executing/coverage/composeV8Coverages.js +0 -20
- package/src/internal/executing/coverage/istanbulCoverageFromCoverages.js +0 -43
- package/src/internal/executing/coverage/istanbulCoverageFromV8Coverage.js +0 -79
- package/src/internal/executing/coverage/v8CoverageFromAllV8Coverages.js +0 -40
- package/src/internal/executing/coverage/v8CoverageFromNodeV8Directory.js +0 -67
- package/src/internal/executing/logUtils.js +0 -30
- package/src/internal/executing/writeLog.js +0 -106
- package/src/internal/executing/writeLog.test-manual.js +0 -62
- package/src/internal/logs/log_style.js +0 -40
- package/src/signal/signal.js +0 -65
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/* eslint-disable import/max-dependencies */
|
|
2
1
|
import { extname } from "node:path"
|
|
3
2
|
import { normalizeImportMap } from "@jsenv/importmap"
|
|
4
3
|
import { isSpecifierForNodeCoreModule } from "@jsenv/importmap/src/isSpecifierForNodeCoreModule.js"
|
|
@@ -15,15 +14,14 @@ import {
|
|
|
15
14
|
urlToMeta,
|
|
16
15
|
} from "@jsenv/filesystem"
|
|
17
16
|
import { createWorkersForJavaScriptModules } from "@jsenv/workers"
|
|
17
|
+
import { UNICODE } from "@jsenv/log"
|
|
18
18
|
|
|
19
|
-
import { Abortable } from "@jsenv/core/src/abort/main.js"
|
|
20
19
|
import { createUrlConverter } from "@jsenv/core/src/internal/url_conversion.js"
|
|
21
20
|
import { createUrlFetcher } from "@jsenv/core/src/internal/building/url_fetcher.js"
|
|
22
21
|
import { createUrlLoader } from "@jsenv/core/src/internal/building/url_loader.js"
|
|
23
22
|
import { stringifyUrlTrace } from "@jsenv/core/src/internal/building/url_trace.js"
|
|
24
23
|
import { sortObjectByPathnames } from "@jsenv/core/src/internal/building/sortObjectByPathnames.js"
|
|
25
24
|
import { jsenvHelpersDirectoryInfo } from "@jsenv/core/src/internal/jsenvInternalFiles.js"
|
|
26
|
-
import { infoSign } from "@jsenv/core/src/internal/logs/log_style.js"
|
|
27
25
|
import { setUrlSearchParamsDescriptor } from "@jsenv/core/src/internal/url_utils.js"
|
|
28
26
|
|
|
29
27
|
import {
|
|
@@ -753,16 +751,13 @@ export const createJsenvRollupPlugin = async ({
|
|
|
753
751
|
|
|
754
752
|
let url = asServerUrl(rollupUrl)
|
|
755
753
|
|
|
756
|
-
const loadResult = await
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
})
|
|
764
|
-
},
|
|
765
|
-
)
|
|
754
|
+
const loadResult = await buildOperation.withSignal((signal) => {
|
|
755
|
+
return urlLoader.loadUrl(rollupUrl, {
|
|
756
|
+
signal,
|
|
757
|
+
logger,
|
|
758
|
+
ressourceBuilder,
|
|
759
|
+
})
|
|
760
|
+
})
|
|
766
761
|
|
|
767
762
|
url = loadResult.url
|
|
768
763
|
const code = loadResult.code
|
|
@@ -1368,7 +1363,7 @@ const prepareEntryPoints = async (
|
|
|
1368
1363
|
buildDirectoryUrl,
|
|
1369
1364
|
)
|
|
1370
1365
|
|
|
1371
|
-
logger.debug(`${
|
|
1366
|
+
logger.debug(`${UNICODE.INFO} load entry point ${entryProjectRelativeUrl}`)
|
|
1372
1367
|
|
|
1373
1368
|
const entryServerUrl = resolveUrl(
|
|
1374
1369
|
entryProjectRelativeUrl,
|
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
// https://github.com/babel/babel/blob/eea156b2cb8deecfcf82d52aa1b71ba4995c7d68/packages/babel-code-frame/src/index.js#L1
|
|
5
5
|
|
|
6
6
|
import { urlToFileSystemPath } from "@jsenv/filesystem"
|
|
7
|
-
|
|
8
|
-
import { setANSIColor, ANSI_GREY, ANSI_RED } from "../logs/log_style.js"
|
|
7
|
+
import { ANSI } from "@jsenv/log"
|
|
9
8
|
|
|
10
9
|
export const stringifyUrlTrace = (trace) => {
|
|
11
10
|
let string = ""
|
|
@@ -89,8 +88,8 @@ export const showSourceLocation = ({
|
|
|
89
88
|
let mark = (string) => string
|
|
90
89
|
let aside = (string) => string
|
|
91
90
|
if (color) {
|
|
92
|
-
mark = (string) =>
|
|
93
|
-
aside = (string) =>
|
|
91
|
+
mark = (string) => ANSI.color(string, ANSI.RED)
|
|
92
|
+
aside = (string) => ANSI.color(string, ANSI.GREY)
|
|
94
93
|
}
|
|
95
94
|
|
|
96
95
|
const lines = source.split(/\r?\n/)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { nextService, fetchFileSystem } from "@jsenv/server"
|
|
2
2
|
import {
|
|
3
3
|
resolveUrl,
|
|
4
4
|
resolveDirectoryUrl,
|
|
@@ -71,7 +71,10 @@ export const createCompiledFileService = ({
|
|
|
71
71
|
|
|
72
72
|
return (request) => {
|
|
73
73
|
const { origin, ressource } = request
|
|
74
|
-
|
|
74
|
+
// we use "ressourceToPathname" to remove eventual query param from the url
|
|
75
|
+
// Without this a pattern like "**/*.js" would not match "file.js?t=1"
|
|
76
|
+
// This would result in file not being compiled when they should
|
|
77
|
+
const requestUrl = `${origin}${ressourceToPathname(ressource)}`
|
|
75
78
|
|
|
76
79
|
const requestCompileInfo = serverUrlToCompileInfo(requestUrl, {
|
|
77
80
|
outDirectoryRelativeUrl,
|
|
@@ -88,10 +91,13 @@ export const createCompiledFileService = ({
|
|
|
88
91
|
// this is just to allow some files to be written inside outDirectory and read directly
|
|
89
92
|
// if asked by the client (such as env.json, groupMap.json, meta.json)
|
|
90
93
|
if (!compileId) {
|
|
91
|
-
return
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
94
|
+
return fetchFileSystem(
|
|
95
|
+
new URL(request.ressource.slice(1), projectDirectoryUrl),
|
|
96
|
+
{
|
|
97
|
+
headers: request.headers,
|
|
98
|
+
etagEnabled: true,
|
|
99
|
+
},
|
|
100
|
+
)
|
|
95
101
|
}
|
|
96
102
|
|
|
97
103
|
const allowedCompileIds = [
|
|
@@ -273,3 +279,12 @@ const babelPluginMapFromCompileId = (
|
|
|
273
279
|
|
|
274
280
|
return babelPluginMapForGroup
|
|
275
281
|
}
|
|
282
|
+
|
|
283
|
+
const ressourceToPathname = (ressource) => {
|
|
284
|
+
const searchSeparatorIndex = ressource.indexOf("?")
|
|
285
|
+
const pathname =
|
|
286
|
+
searchSeparatorIndex === -1
|
|
287
|
+
? ressource
|
|
288
|
+
: ressource.slice(0, searchSeparatorIndex)
|
|
289
|
+
return pathname
|
|
290
|
+
}
|
|
@@ -2,7 +2,7 @@ import { readFileSync } from "node:fs"
|
|
|
2
2
|
import {
|
|
3
3
|
jsenvAccessControlAllowedHeaders,
|
|
4
4
|
startServer,
|
|
5
|
-
|
|
5
|
+
fetchFileSystem,
|
|
6
6
|
createSSERoom,
|
|
7
7
|
composeServicesWithTiming,
|
|
8
8
|
urlToContentType,
|
|
@@ -23,13 +23,15 @@ import {
|
|
|
23
23
|
urlIsInsideOf,
|
|
24
24
|
urlToBasename,
|
|
25
25
|
} from "@jsenv/filesystem"
|
|
26
|
+
import {
|
|
27
|
+
createCallbackList,
|
|
28
|
+
createCallbackListNotifiedOnce,
|
|
29
|
+
} from "@jsenv/abort"
|
|
26
30
|
|
|
27
|
-
import { Abortable } from "@jsenv/core/src/abort/main.js"
|
|
28
31
|
import { isBrowserPartOfSupportedRuntimes } from "@jsenv/core/src/internal/generateGroupMap/runtime_support.js"
|
|
29
32
|
import { loadBabelPluginMapFromFile } from "./load_babel_plugin_map_from_file.js"
|
|
30
33
|
import { extractSyntaxBabelPluginMap } from "./babel_plugins.js"
|
|
31
34
|
import { generateGroupMap } from "../generateGroupMap/generateGroupMap.js"
|
|
32
|
-
import { createCallbackList } from "../createCallbackList.js"
|
|
33
35
|
import {
|
|
34
36
|
jsenvCompileProxyFileInfo,
|
|
35
37
|
sourcemapMainFileInfo,
|
|
@@ -46,6 +48,7 @@ import { createTransformHtmlSourceFileService } from "./html_source_file_service
|
|
|
46
48
|
|
|
47
49
|
export const startCompileServer = async ({
|
|
48
50
|
signal = new AbortController().signal,
|
|
51
|
+
handleSIGINT,
|
|
49
52
|
compileServerLogLevel,
|
|
50
53
|
|
|
51
54
|
projectDirectoryUrl,
|
|
@@ -215,12 +218,12 @@ export const startCompileServer = async ({
|
|
|
215
218
|
...babelPluginMap,
|
|
216
219
|
}
|
|
217
220
|
|
|
218
|
-
const
|
|
221
|
+
const serverStopCallbackList = createCallbackListNotifiedOnce()
|
|
219
222
|
|
|
220
223
|
let projectFileRequestedCallback = () => {}
|
|
221
224
|
if (livereloadSSE) {
|
|
222
225
|
const sseSetup = setupServerSentEventsForLivereload({
|
|
223
|
-
|
|
226
|
+
serverStopCallbackList,
|
|
224
227
|
projectDirectoryUrl,
|
|
225
228
|
jsenvDirectoryRelativeUrl,
|
|
226
229
|
outDirectoryRelativeUrl,
|
|
@@ -230,7 +233,7 @@ export const startCompileServer = async ({
|
|
|
230
233
|
|
|
231
234
|
projectFileRequestedCallback = sseSetup.projectFileRequestedCallback
|
|
232
235
|
const serveSSEForLivereload = createSSEForLivereloadService({
|
|
233
|
-
|
|
236
|
+
serverStopCallbackList,
|
|
234
237
|
outDirectoryRelativeUrl,
|
|
235
238
|
trackMainAndDependencies: sseSetup.trackMainAndDependencies,
|
|
236
239
|
})
|
|
@@ -296,7 +299,6 @@ export const startCompileServer = async ({
|
|
|
296
299
|
projectDirectoryUrl,
|
|
297
300
|
}),
|
|
298
301
|
"service:compiled file": createCompiledFileService({
|
|
299
|
-
compileServerOperation,
|
|
300
302
|
logger,
|
|
301
303
|
|
|
302
304
|
projectDirectoryUrl,
|
|
@@ -345,9 +347,9 @@ export const startCompileServer = async ({
|
|
|
345
347
|
}
|
|
346
348
|
|
|
347
349
|
const compileServer = await startServer({
|
|
348
|
-
signal
|
|
350
|
+
signal,
|
|
349
351
|
stopOnExit: false,
|
|
350
|
-
stopOnSIGINT:
|
|
352
|
+
stopOnSIGINT: handleSIGINT,
|
|
351
353
|
stopOnInternalError: false,
|
|
352
354
|
sendServerInternalErrorDetails: true,
|
|
353
355
|
keepProcessAlive,
|
|
@@ -380,9 +382,9 @@ export const startCompileServer = async ({
|
|
|
380
382
|
...customServices,
|
|
381
383
|
...jsenvServices,
|
|
382
384
|
}),
|
|
383
|
-
onStop: () => {
|
|
385
|
+
onStop: (reason) => {
|
|
384
386
|
onStop()
|
|
385
|
-
|
|
387
|
+
serverStopCallbackList.notify(reason)
|
|
386
388
|
},
|
|
387
389
|
})
|
|
388
390
|
|
|
@@ -559,7 +561,7 @@ const compareValueJson = (left, right) => {
|
|
|
559
561
|
*
|
|
560
562
|
*/
|
|
561
563
|
const setupServerSentEventsForLivereload = ({
|
|
562
|
-
|
|
564
|
+
serverStopCallbackList,
|
|
563
565
|
projectDirectoryUrl,
|
|
564
566
|
jsenvDirectoryRelativeUrl,
|
|
565
567
|
outDirectoryRelativeUrl,
|
|
@@ -582,7 +584,7 @@ const setupServerSentEventsForLivereload = ({
|
|
|
582
584
|
return
|
|
583
585
|
}
|
|
584
586
|
|
|
585
|
-
projectFileRequested.notify(relativeUrl, request)
|
|
587
|
+
projectFileRequested.notify({ relativeUrl, request })
|
|
586
588
|
}
|
|
587
589
|
const watchDescription = {
|
|
588
590
|
...livereloadWatchConfig,
|
|
@@ -605,7 +607,7 @@ const setupServerSentEventsForLivereload = ({
|
|
|
605
607
|
recursive: true,
|
|
606
608
|
},
|
|
607
609
|
)
|
|
608
|
-
|
|
610
|
+
serverStopCallbackList.add(unregisterDirectoryLifecyle)
|
|
609
611
|
|
|
610
612
|
const getDependencySet = (mainRelativeUrl) => {
|
|
611
613
|
if (trackerMap.has(mainRelativeUrl)) {
|
|
@@ -618,7 +620,7 @@ const setupServerSentEventsForLivereload = ({
|
|
|
618
620
|
}
|
|
619
621
|
|
|
620
622
|
// each time a file is requested for the first time its dependencySet is computed
|
|
621
|
-
projectFileRequested.
|
|
623
|
+
projectFileRequested.add(({ relativeUrl: mainRelativeUrl }) => {
|
|
622
624
|
// for now no use case of livereloading on node.js
|
|
623
625
|
// and for browsers only html file can be main files
|
|
624
626
|
// this avoid collecting dependencies of non html files that will never be used
|
|
@@ -632,8 +634,8 @@ const setupServerSentEventsForLivereload = ({
|
|
|
632
634
|
dependencySet.add(mainRelativeUrl)
|
|
633
635
|
trackerMap.set(mainRelativeUrl, dependencySet)
|
|
634
636
|
|
|
635
|
-
const
|
|
636
|
-
(relativeUrl, request) => {
|
|
637
|
+
const removeDependencyRequestedCallback = projectFileRequested.add(
|
|
638
|
+
({ relativeUrl, request }) => {
|
|
637
639
|
if (dependencySet.has(relativeUrl)) {
|
|
638
640
|
return
|
|
639
641
|
}
|
|
@@ -656,10 +658,10 @@ const setupServerSentEventsForLivereload = ({
|
|
|
656
658
|
dependencySet.add(relativeUrl)
|
|
657
659
|
},
|
|
658
660
|
)
|
|
659
|
-
const
|
|
661
|
+
const removeMainRemovedCallback = projectFileRemoved.add((relativeUrl) => {
|
|
660
662
|
if (relativeUrl === mainRelativeUrl) {
|
|
661
|
-
|
|
662
|
-
|
|
663
|
+
removeDependencyRequestedCallback()
|
|
664
|
+
removeMainRemovedCallback()
|
|
663
665
|
trackerMap.delete(mainRelativeUrl)
|
|
664
666
|
}
|
|
665
667
|
})
|
|
@@ -671,19 +673,19 @@ const setupServerSentEventsForLivereload = ({
|
|
|
671
673
|
) => {
|
|
672
674
|
livereloadLogger.debug(`track ${mainRelativeUrl} and its dependencies`)
|
|
673
675
|
|
|
674
|
-
const
|
|
676
|
+
const removeModifiedCallback = projectFileModified.add((relativeUrl) => {
|
|
675
677
|
const dependencySet = getDependencySet(mainRelativeUrl)
|
|
676
678
|
if (dependencySet.has(relativeUrl)) {
|
|
677
679
|
modified(relativeUrl)
|
|
678
680
|
}
|
|
679
681
|
})
|
|
680
|
-
const
|
|
682
|
+
const removeRemovedCallback = projectFileRemoved.add((relativeUrl) => {
|
|
681
683
|
const dependencySet = getDependencySet(mainRelativeUrl)
|
|
682
684
|
if (dependencySet.has(relativeUrl)) {
|
|
683
685
|
removed(relativeUrl)
|
|
684
686
|
}
|
|
685
687
|
})
|
|
686
|
-
const
|
|
688
|
+
const removeAddedCallback = projectFileAdded.add((relativeUrl) => {
|
|
687
689
|
const dependencySet = getDependencySet(mainRelativeUrl)
|
|
688
690
|
if (dependencySet.has(relativeUrl)) {
|
|
689
691
|
added(relativeUrl)
|
|
@@ -694,9 +696,9 @@ const setupServerSentEventsForLivereload = ({
|
|
|
694
696
|
livereloadLogger.debug(
|
|
695
697
|
`stop tracking ${mainRelativeUrl} and its dependencies.`,
|
|
696
698
|
)
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
699
|
+
removeModifiedCallback()
|
|
700
|
+
removeRemovedCallback()
|
|
701
|
+
removeAddedCallback()
|
|
700
702
|
}
|
|
701
703
|
}
|
|
702
704
|
|
|
@@ -768,7 +770,7 @@ const setupServerSentEventsForLivereload = ({
|
|
|
768
770
|
}
|
|
769
771
|
|
|
770
772
|
const createSSEForLivereloadService = ({
|
|
771
|
-
|
|
773
|
+
serverStopCallbackList,
|
|
772
774
|
outDirectoryRelativeUrl,
|
|
773
775
|
trackMainAndDependencies,
|
|
774
776
|
}) => {
|
|
@@ -802,13 +804,11 @@ const createSSEForLivereloadService = ({
|
|
|
802
804
|
},
|
|
803
805
|
})
|
|
804
806
|
|
|
805
|
-
const removeSSECleanupCallback =
|
|
806
|
-
()
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
},
|
|
811
|
-
)
|
|
807
|
+
const removeSSECleanupCallback = serverStopCallbackList.add(() => {
|
|
808
|
+
removeSSECleanupCallback()
|
|
809
|
+
sseRoom.close()
|
|
810
|
+
stopTracking()
|
|
811
|
+
})
|
|
812
812
|
cache.push({
|
|
813
813
|
mainFileRelativeUrl,
|
|
814
814
|
sseRoom,
|
|
@@ -857,10 +857,13 @@ const createCompilationAssetFileService = ({ projectDirectoryUrl }) => {
|
|
|
857
857
|
const { origin, ressource } = request
|
|
858
858
|
const requestUrl = `${origin}${ressource}`
|
|
859
859
|
if (urlIsCompilationAsset(requestUrl)) {
|
|
860
|
-
return
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
860
|
+
return fetchFileSystem(
|
|
861
|
+
new URL(request.ressource.slice(1), projectDirectoryUrl),
|
|
862
|
+
{
|
|
863
|
+
headers: request.headers,
|
|
864
|
+
etagEnabled: true,
|
|
865
|
+
},
|
|
866
|
+
)
|
|
864
867
|
}
|
|
865
868
|
return null
|
|
866
869
|
}
|
|
@@ -916,10 +919,13 @@ const createSourceFileService = ({
|
|
|
916
919
|
const relativeUrl = ressource.slice(1)
|
|
917
920
|
projectFileRequestedCallback(relativeUrl, request)
|
|
918
921
|
|
|
919
|
-
const responsePromise =
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
922
|
+
const responsePromise = fetchFileSystem(
|
|
923
|
+
new URL(request.ressource.slice(1), projectDirectoryUrl),
|
|
924
|
+
{
|
|
925
|
+
headers: request.headers,
|
|
926
|
+
etagEnabled: projectFileEtagEnabled,
|
|
927
|
+
},
|
|
928
|
+
)
|
|
923
929
|
|
|
924
930
|
return responsePromise
|
|
925
931
|
}
|
|
@@ -1051,10 +1057,13 @@ const createOutFilesService = async ({
|
|
|
1051
1057
|
if (!isOutRootFile(requestUrl)) {
|
|
1052
1058
|
return null
|
|
1053
1059
|
}
|
|
1054
|
-
return
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1060
|
+
return fetchFileSystem(
|
|
1061
|
+
new URL(request.ressource.slice(1), projectDirectoryUrl),
|
|
1062
|
+
{
|
|
1063
|
+
headers: request.headers,
|
|
1064
|
+
etagEnabled: true,
|
|
1065
|
+
},
|
|
1066
|
+
)
|
|
1058
1067
|
}
|
|
1059
1068
|
}
|
|
1060
1069
|
// serve from memory
|