@jsenv/core 34.1.0 → 34.1.1
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.js +37 -29
- package/package.json +1 -1
- package/src/dev/file_service.js +5 -10
- package/src/execute/runtimes/browsers/from_playwright.js +7 -12
- package/src/execute/runtimes/browsers/middleware_istanbul.js +2 -6
- package/src/test/execute_test_plan.js +2 -2
- package/src/web_url_converter.js +28 -0
package/dist/jsenv.js
CHANGED
|
@@ -22633,6 +22633,35 @@ const canUseVersionedUrl = urlInfo => {
|
|
|
22633
22633
|
return urlInfo.type !== "webmanifest";
|
|
22634
22634
|
};
|
|
22635
22635
|
|
|
22636
|
+
const WEB_URL_CONVERTER = {
|
|
22637
|
+
asWebUrl: (fileUrl, webServer) => {
|
|
22638
|
+
if (urlIsInsideOf(fileUrl, webServer.rootDirectoryUrl)) {
|
|
22639
|
+
return moveUrl({
|
|
22640
|
+
url: fileUrl,
|
|
22641
|
+
from: webServer.rootDirectoryUrl,
|
|
22642
|
+
to: `${webServer.origin}/`
|
|
22643
|
+
});
|
|
22644
|
+
}
|
|
22645
|
+
const fsRootUrl = ensureWindowsDriveLetter("file:///", fileUrl);
|
|
22646
|
+
return `${webServer.origin}/@fs/${fileUrl.slice(fsRootUrl.length)}`;
|
|
22647
|
+
},
|
|
22648
|
+
asFileUrl: (webUrl, webServer) => {
|
|
22649
|
+
const {
|
|
22650
|
+
pathname,
|
|
22651
|
+
search
|
|
22652
|
+
} = new URL(webUrl);
|
|
22653
|
+
if (pathname.startsWith("/@fs/")) {
|
|
22654
|
+
const fsRootRelativeUrl = pathname.slice("/@fs/".length);
|
|
22655
|
+
return `file:///${fsRootRelativeUrl}${search}`;
|
|
22656
|
+
}
|
|
22657
|
+
return moveUrl({
|
|
22658
|
+
url: webUrl,
|
|
22659
|
+
from: `${webServer.origin}/`,
|
|
22660
|
+
to: webServer.rootDirectoryUrl
|
|
22661
|
+
});
|
|
22662
|
+
}
|
|
22663
|
+
};
|
|
22664
|
+
|
|
22636
22665
|
/*
|
|
22637
22666
|
* This plugin is very special because it is here
|
|
22638
22667
|
* to provide "serverEvents" used by other plugins
|
|
@@ -23082,18 +23111,9 @@ const inferParentFromRequest = (request, sourceDirectoryUrl) => {
|
|
|
23082
23111
|
const refererUrlObject = new URL(referer);
|
|
23083
23112
|
refererUrlObject.searchParams.delete("hmr");
|
|
23084
23113
|
refererUrlObject.searchParams.delete("v");
|
|
23085
|
-
|
|
23086
|
-
|
|
23087
|
-
|
|
23088
|
-
} = refererUrlObject;
|
|
23089
|
-
if (pathname.startsWith("/@fs/")) {
|
|
23090
|
-
const fsRootRelativeUrl = pathname.slice("/@fs/".length);
|
|
23091
|
-
return `file:///${fsRootRelativeUrl}${search}`;
|
|
23092
|
-
}
|
|
23093
|
-
return moveUrl({
|
|
23094
|
-
url: referer,
|
|
23095
|
-
from: `${request.origin}/`,
|
|
23096
|
-
to: sourceDirectoryUrl
|
|
23114
|
+
return WEB_URL_CONVERTER.asFileUrl(referer, {
|
|
23115
|
+
origin: request.origin,
|
|
23116
|
+
rootDirectoryUrl: sourceDirectoryUrl
|
|
23097
23117
|
});
|
|
23098
23118
|
};
|
|
23099
23119
|
|
|
@@ -25090,9 +25110,9 @@ const executeTestPlan = async ({
|
|
|
25090
25110
|
gcBetweenExecutions = logMemoryHeapUsage,
|
|
25091
25111
|
coverageEnabled = process.argv.includes("--coverage"),
|
|
25092
25112
|
coverageConfig = {
|
|
25093
|
-
"file:///**/.*": false,
|
|
25094
|
-
"file:///**/.*/": false,
|
|
25095
25113
|
"file:///**/node_modules/": false,
|
|
25114
|
+
"./**/.*": false,
|
|
25115
|
+
"./**/.*/": false,
|
|
25096
25116
|
"./**/src/**/*.js": true,
|
|
25097
25117
|
"./**/src/**/*.ts": true,
|
|
25098
25118
|
"./**/src/**/*.jsx": true,
|
|
@@ -25443,11 +25463,7 @@ const initIstanbulMiddleware = async (page, {
|
|
|
25443
25463
|
await page.route("**", async route => {
|
|
25444
25464
|
const request = route.request();
|
|
25445
25465
|
const url = request.url(); // transform into a local url
|
|
25446
|
-
const fileUrl =
|
|
25447
|
-
url,
|
|
25448
|
-
from: `${webServer.origin}/`,
|
|
25449
|
-
to: rootDirectoryUrl
|
|
25450
|
-
});
|
|
25466
|
+
const fileUrl = WEB_URL_CONVERTER.asFileUrl(url, webServer);
|
|
25451
25467
|
const needsInstrumentation = URL_META.applyAssociations({
|
|
25452
25468
|
url: fileUrl,
|
|
25453
25469
|
associations
|
|
@@ -25544,11 +25560,7 @@ ${fileUrl}
|
|
|
25544
25560
|
--- web server root directory url ---
|
|
25545
25561
|
${webServer.rootDirectoryUrl}`);
|
|
25546
25562
|
}
|
|
25547
|
-
const fileServerUrl =
|
|
25548
|
-
url: fileUrl,
|
|
25549
|
-
from: webServer.rootDirectoryUrl,
|
|
25550
|
-
to: `${webServer.origin}/`
|
|
25551
|
-
});
|
|
25563
|
+
const fileServerUrl = WEB_URL_CONVERTER.asWebUrl(fileUrl, webServer);
|
|
25552
25564
|
const cleanupCallbackList = createCallbackListNotifiedOnce();
|
|
25553
25565
|
const cleanup = memoize(async reason => {
|
|
25554
25566
|
await cleanupCallbackList.notify({
|
|
@@ -25646,11 +25658,7 @@ ${webServer.rootDirectoryUrl}`);
|
|
|
25646
25658
|
// we convert urls starting with http:// to file:// because we later
|
|
25647
25659
|
// convert the url to filesystem path in istanbulCoverageFromV8Coverage function
|
|
25648
25660
|
const v8CoveragesWithFsUrls = v8CoveragesWithWebUrls.map(v8CoveragesWithWebUrl => {
|
|
25649
|
-
const fsUrl =
|
|
25650
|
-
url: v8CoveragesWithWebUrl.url,
|
|
25651
|
-
from: `${webServer.origin}/`,
|
|
25652
|
-
to: webServer.rootDirectoryUrl
|
|
25653
|
-
});
|
|
25661
|
+
const fsUrl = WEB_URL_CONVERTER.asFileUrl(v8CoveragesWithWebUrl.url, webServer);
|
|
25654
25662
|
return {
|
|
25655
25663
|
...v8CoveragesWithWebUrl,
|
|
25656
25664
|
url: fsUrl
|
package/package.json
CHANGED
package/src/dev/file_service.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs"
|
|
2
2
|
import { serveDirectory, composeTwoResponses } from "@jsenv/server"
|
|
3
3
|
import { bufferToEtag } from "@jsenv/filesystem"
|
|
4
|
-
import {
|
|
4
|
+
import { asUrlWithoutSearch } from "@jsenv/urls"
|
|
5
5
|
import { URL_META } from "@jsenv/url-meta"
|
|
6
6
|
|
|
7
|
+
import { WEB_URL_CONVERTER } from "../web_url_converter.js"
|
|
7
8
|
import { watchSourceFiles } from "../watch_source_files.js"
|
|
8
9
|
import { explorerHtmlFileUrl } from "@jsenv/core/src/plugins/explorer/jsenv_plugin_explorer.js"
|
|
9
10
|
import { createUrlGraph } from "@jsenv/core/src/kitchen/url_graph.js"
|
|
@@ -437,14 +438,8 @@ const inferParentFromRequest = (request, sourceDirectoryUrl) => {
|
|
|
437
438
|
const refererUrlObject = new URL(referer)
|
|
438
439
|
refererUrlObject.searchParams.delete("hmr")
|
|
439
440
|
refererUrlObject.searchParams.delete("v")
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
return `file:///${fsRootRelativeUrl}${search}`
|
|
444
|
-
}
|
|
445
|
-
return moveUrl({
|
|
446
|
-
url: referer,
|
|
447
|
-
from: `${request.origin}/`,
|
|
448
|
-
to: sourceDirectoryUrl,
|
|
441
|
+
return WEB_URL_CONVERTER.asFileUrl(referer, {
|
|
442
|
+
origin: request.origin,
|
|
443
|
+
rootDirectoryUrl: sourceDirectoryUrl,
|
|
449
444
|
})
|
|
450
445
|
}
|
|
@@ -6,9 +6,10 @@ import {
|
|
|
6
6
|
raceProcessTeardownEvents,
|
|
7
7
|
raceCallbacks,
|
|
8
8
|
} from "@jsenv/abort"
|
|
9
|
-
import {
|
|
9
|
+
import { urlIsInsideOf } from "@jsenv/urls"
|
|
10
10
|
import { memoize } from "@jsenv/utils/src/memoize/memoize.js"
|
|
11
11
|
|
|
12
|
+
import { WEB_URL_CONVERTER } from "../../../web_url_converter.js"
|
|
12
13
|
import { initJsSupervisorMiddleware } from "./middleware_js_supervisor.js"
|
|
13
14
|
import { initIstanbulMiddleware } from "./middleware_istanbul.js"
|
|
14
15
|
import { filterV8Coverage } from "@jsenv/core/src/test/coverage/v8_coverage.js"
|
|
@@ -62,12 +63,7 @@ ${fileUrl}
|
|
|
62
63
|
--- web server root directory url ---
|
|
63
64
|
${webServer.rootDirectoryUrl}`)
|
|
64
65
|
}
|
|
65
|
-
const fileServerUrl =
|
|
66
|
-
url: fileUrl,
|
|
67
|
-
from: webServer.rootDirectoryUrl,
|
|
68
|
-
to: `${webServer.origin}/`,
|
|
69
|
-
})
|
|
70
|
-
|
|
66
|
+
const fileServerUrl = WEB_URL_CONVERTER.asWebUrl(fileUrl, webServer)
|
|
71
67
|
const cleanupCallbackList = createCallbackListNotifiedOnce()
|
|
72
68
|
const cleanup = memoize(async (reason) => {
|
|
73
69
|
await cleanupCallbackList.notify({ reason })
|
|
@@ -168,11 +164,10 @@ ${webServer.rootDirectoryUrl}`)
|
|
|
168
164
|
// convert the url to filesystem path in istanbulCoverageFromV8Coverage function
|
|
169
165
|
const v8CoveragesWithFsUrls = v8CoveragesWithWebUrls.map(
|
|
170
166
|
(v8CoveragesWithWebUrl) => {
|
|
171
|
-
const fsUrl =
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
})
|
|
167
|
+
const fsUrl = WEB_URL_CONVERTER.asFileUrl(
|
|
168
|
+
v8CoveragesWithWebUrl.url,
|
|
169
|
+
webServer,
|
|
170
|
+
)
|
|
176
171
|
return {
|
|
177
172
|
...v8CoveragesWithWebUrl,
|
|
178
173
|
url: fsUrl,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { URL_META } from "@jsenv/url-meta"
|
|
2
|
-
import { moveUrl } from "@jsenv/urls"
|
|
3
2
|
import { applyBabelPlugins } from "@jsenv/ast"
|
|
4
3
|
import { SOURCEMAP, generateSourcemapDataUrl } from "@jsenv/sourcemap"
|
|
5
4
|
|
|
5
|
+
import { WEB_URL_CONVERTER } from "../../../web_url_converter.js"
|
|
6
6
|
import { babelPluginInstrument } from "../../../test/coverage/babel_plugin_instrument.js"
|
|
7
7
|
|
|
8
8
|
export const initIstanbulMiddleware = async (
|
|
@@ -16,11 +16,7 @@ export const initIstanbulMiddleware = async (
|
|
|
16
16
|
await page.route("**", async (route) => {
|
|
17
17
|
const request = route.request()
|
|
18
18
|
const url = request.url() // transform into a local url
|
|
19
|
-
const fileUrl =
|
|
20
|
-
url,
|
|
21
|
-
from: `${webServer.origin}/`,
|
|
22
|
-
to: rootDirectoryUrl,
|
|
23
|
-
})
|
|
19
|
+
const fileUrl = WEB_URL_CONVERTER.asFileUrl(url, webServer)
|
|
24
20
|
const needsInstrumentation = URL_META.applyAssociations({
|
|
25
21
|
url: fileUrl,
|
|
26
22
|
associations,
|
|
@@ -64,9 +64,9 @@ export const executeTestPlan = async ({
|
|
|
64
64
|
|
|
65
65
|
coverageEnabled = process.argv.includes("--coverage"),
|
|
66
66
|
coverageConfig = {
|
|
67
|
-
"file:///**/.*": false,
|
|
68
|
-
"file:///**/.*/": false,
|
|
69
67
|
"file:///**/node_modules/": false,
|
|
68
|
+
"./**/.*": false,
|
|
69
|
+
"./**/.*/": false,
|
|
70
70
|
"./**/src/**/*.js": true,
|
|
71
71
|
"./**/src/**/*.ts": true,
|
|
72
72
|
"./**/src/**/*.jsx": true,
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ensureWindowsDriveLetter } from "@jsenv/filesystem"
|
|
2
|
+
import { urlIsInsideOf, moveUrl } from "@jsenv/urls"
|
|
3
|
+
|
|
4
|
+
export const WEB_URL_CONVERTER = {
|
|
5
|
+
asWebUrl: (fileUrl, webServer) => {
|
|
6
|
+
if (urlIsInsideOf(fileUrl, webServer.rootDirectoryUrl)) {
|
|
7
|
+
return moveUrl({
|
|
8
|
+
url: fileUrl,
|
|
9
|
+
from: webServer.rootDirectoryUrl,
|
|
10
|
+
to: `${webServer.origin}/`,
|
|
11
|
+
})
|
|
12
|
+
}
|
|
13
|
+
const fsRootUrl = ensureWindowsDriveLetter("file:///", fileUrl)
|
|
14
|
+
return `${webServer.origin}/@fs/${fileUrl.slice(fsRootUrl.length)}`
|
|
15
|
+
},
|
|
16
|
+
asFileUrl: (webUrl, webServer) => {
|
|
17
|
+
const { pathname, search } = new URL(webUrl)
|
|
18
|
+
if (pathname.startsWith("/@fs/")) {
|
|
19
|
+
const fsRootRelativeUrl = pathname.slice("/@fs/".length)
|
|
20
|
+
return `file:///${fsRootRelativeUrl}${search}`
|
|
21
|
+
}
|
|
22
|
+
return moveUrl({
|
|
23
|
+
url: webUrl,
|
|
24
|
+
from: `${webServer.origin}/`,
|
|
25
|
+
to: webServer.rootDirectoryUrl,
|
|
26
|
+
})
|
|
27
|
+
},
|
|
28
|
+
}
|