@jsenv/test 1.1.2 → 1.1.4

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 (50) hide show
  1. package/dist/jsenv_test.js +4 -2
  2. package/package.json +3 -3
  3. package/src/coverage/babel_plugin_instrument.js +15 -15
  4. package/src/coverage/coverage_reporter_html_directory.js +10 -10
  5. package/src/coverage/coverage_reporter_json_file.js +7 -7
  6. package/src/coverage/coverage_reporter_text_log.js +8 -8
  7. package/src/coverage/empty_coverage_factory.js +24 -24
  8. package/src/coverage/file_by_file_coverage.js +10 -10
  9. package/src/coverage/istanbul_coverage_composition.js +16 -16
  10. package/src/coverage/istanbul_coverage_map_from_coverage.js +8 -8
  11. package/src/coverage/list_files_not_covered.js +4 -4
  12. package/src/coverage/missing_coverage.js +17 -17
  13. package/src/coverage/report_to_coverage.js +52 -52
  14. package/src/coverage/v8_and_istanbul.js +17 -16
  15. package/src/coverage/v8_coverage.js +8 -8
  16. package/src/coverage/v8_coverage_composition.js +12 -12
  17. package/src/coverage/v8_coverage_node_directory.js +42 -42
  18. package/src/coverage/v8_coverage_to_istanbul.js +45 -45
  19. package/src/execution/execute.js +21 -21
  20. package/src/execution/execute_steps.js +129 -129
  21. package/src/execution/execute_test_plan.js +72 -68
  22. package/src/execution/execution_colors.js +2 -2
  23. package/src/execution/execution_steps.js +20 -20
  24. package/src/execution/gc.js +5 -5
  25. package/src/execution/logs_file_execution.js +126 -126
  26. package/src/execution/logs_file_execution.test.mjs +11 -11
  27. package/src/execution/run.js +51 -51
  28. package/src/execution/web_server_param.js +24 -24
  29. package/src/main.js +7 -7
  30. package/src/runtime_browsers/chromium.js +7 -7
  31. package/src/runtime_browsers/firefox.js +10 -10
  32. package/src/runtime_browsers/middleware_istanbul.js +23 -23
  33. package/src/runtime_browsers/middleware_js_supervisor.js +32 -32
  34. package/src/runtime_browsers/using_playwright.js +186 -186
  35. package/src/runtime_browsers/webkit.js +11 -11
  36. package/src/runtime_node/child_exec_options.js +43 -43
  37. package/src/runtime_node/controllable_child_process.mjs +47 -47
  38. package/src/runtime_node/controllable_worker_thread.mjs +37 -37
  39. package/src/runtime_node/exec_options.js +26 -26
  40. package/src/runtime_node/execute_using_dynamic_import.js +26 -26
  41. package/src/runtime_node/exit_codes.js +4 -4
  42. package/src/runtime_node/importmap_node_loader.mjs +24 -24
  43. package/src/runtime_node/importmap_node_loader_file_url.js +1 -1
  44. package/src/runtime_node/kill_process_tree.js +30 -30
  45. package/src/runtime_node/no_experimental_warnings.cjs +4 -4
  46. package/src/runtime_node/no_experimental_warnings_file_url.js +1 -1
  47. package/src/runtime_node/node_child_process.js +128 -128
  48. package/src/runtime_node/node_execution_performance.js +28 -28
  49. package/src/runtime_node/node_worker_thread.js +108 -108
  50. package/src/runtime_node/profiler_v8_coverage.js +21 -21
@@ -10,9 +10,9 @@
10
10
  * - File execution result is returned, it contains status/errors/namespace/consoleCalls
11
11
  */
12
12
 
13
- import { createId } from "@paralleldrive/cuid2"
14
- import { Abort, raceCallbacks } from "@jsenv/abort"
15
- import { ensureParentDirectories } from "@jsenv/filesystem"
13
+ import { createId } from "@paralleldrive/cuid2";
14
+ import { Abort, raceCallbacks } from "@jsenv/abort";
15
+ import { ensureParentDirectories } from "@jsenv/filesystem";
16
16
 
17
17
  export const run = async ({
18
18
  signal = new AbortController().signal,
@@ -31,16 +31,16 @@ export const run = async ({
31
31
  status: "pending",
32
32
  errors: [],
33
33
  namespace: null,
34
- }
35
- const callbacks = []
34
+ };
35
+ const callbacks = [];
36
36
 
37
- const onConsoleRef = { current: () => {} }
38
- const stopSignal = { notify: () => {} }
39
- const runtimeLabel = `${runtime.name}/${runtime.version}`
37
+ const onConsoleRef = { current: () => {} };
38
+ const stopSignal = { notify: () => {} };
39
+ const runtimeLabel = `${runtime.name}/${runtime.version}`;
40
40
 
41
- const runOperation = Abort.startOperation()
42
- runOperation.addAbortSignal(signal)
43
- let timeoutAbortSource
41
+ const runOperation = Abort.startOperation();
42
+ runOperation.addAbortSignal(signal);
43
+ let timeoutAbortSource;
44
44
  if (
45
45
  // ideally we would rather log than the timeout is ignored
46
46
  // when keepRunning is true
@@ -48,59 +48,59 @@ export const run = async ({
48
48
  typeof allocatedMs === "number" &&
49
49
  allocatedMs !== Infinity
50
50
  ) {
51
- timeoutAbortSource = runOperation.timeout(allocatedMs)
51
+ timeoutAbortSource = runOperation.timeout(allocatedMs);
52
52
  }
53
- const consoleCalls = []
53
+ const consoleCalls = [];
54
54
  onConsoleRef.current = ({ type, text }) => {
55
55
  if (mirrorConsole) {
56
56
  if (type === "error") {
57
- process.stderr.write(text)
57
+ process.stderr.write(text);
58
58
  } else {
59
- process.stdout.write(text)
59
+ process.stdout.write(text);
60
60
  }
61
61
  }
62
62
  if (collectConsole) {
63
- consoleCalls.push({ type, text })
63
+ consoleCalls.push({ type, text });
64
64
  }
65
- }
65
+ };
66
66
  if (collectConsole) {
67
- result.consoleCalls = consoleCalls
67
+ result.consoleCalls = consoleCalls;
68
68
  }
69
69
 
70
70
  // we do not keep coverage in memory, it can grow very big
71
71
  // instead we store it on the filesystem
72
72
  // and they can be read later at "coverageFileUrl"
73
- let coverageFileUrl
73
+ let coverageFileUrl;
74
74
  if (coverageEnabled) {
75
75
  coverageFileUrl = new URL(
76
76
  `./${runtime.name}/${createId()}.json`,
77
77
  coverageTempDirectoryUrl,
78
- ).href
79
- await ensureParentDirectories(coverageFileUrl)
78
+ ).href;
79
+ await ensureParentDirectories(coverageFileUrl);
80
80
  if (coverageEnabled) {
81
- result.coverageFileUrl = coverageFileUrl
81
+ result.coverageFileUrl = coverageFileUrl;
82
82
  // written within the child_process/worker_thread or during runtime.run()
83
83
  // for browsers
84
84
  // (because it takes time to serialize and transfer the coverage object)
85
85
  }
86
86
  }
87
87
 
88
- const startMs = Date.now()
88
+ const startMs = Date.now();
89
89
  callbacks.push(() => {
90
- result.duration = Date.now() - startMs
91
- })
90
+ result.duration = Date.now() - startMs;
91
+ });
92
92
 
93
93
  try {
94
- logger.debug(`run() ${runtimeLabel}`)
95
- runOperation.throwIfAborted()
94
+ logger.debug(`run() ${runtimeLabel}`);
95
+ runOperation.throwIfAborted();
96
96
  const winnerPromise = new Promise((resolve) => {
97
97
  raceCallbacks(
98
98
  {
99
99
  aborted: (cb) => {
100
- runOperation.signal.addEventListener("abort", cb)
100
+ runOperation.signal.addEventListener("abort", cb);
101
101
  return () => {
102
- runOperation.signal.removeEventListener("abort", cb)
103
- }
102
+ runOperation.signal.removeEventListener("abort", cb);
103
+ };
104
104
  },
105
105
  runned: async (cb) => {
106
106
  try {
@@ -114,47 +114,47 @@ export const run = async ({
114
114
  keepRunning,
115
115
  stopSignal,
116
116
  onConsole: (log) => onConsoleRef.current(log),
117
- })
118
- cb(runResult)
117
+ });
118
+ cb(runResult);
119
119
  } catch (e) {
120
120
  cb({
121
121
  status: "failed",
122
122
  errors: [e],
123
- })
123
+ });
124
124
  }
125
125
  },
126
126
  },
127
127
  resolve,
128
- )
129
- })
130
- const winner = await winnerPromise
128
+ );
129
+ });
130
+ const winner = await winnerPromise;
131
131
  if (winner.name === "aborted") {
132
- runOperation.throwIfAborted()
132
+ runOperation.throwIfAborted();
133
133
  }
134
- const { status, namespace, errors, performance } = winner.data
135
- result.status = status
136
- result.errors.push(...errors)
137
- result.namespace = namespace
134
+ const { status, namespace, errors, performance } = winner.data;
135
+ result.status = status;
136
+ result.errors.push(...errors);
137
+ result.namespace = namespace;
138
138
  if (collectPerformance) {
139
- result.performance = performance
139
+ result.performance = performance;
140
140
  }
141
141
  } catch (e) {
142
142
  if (Abort.isAbortError(e)) {
143
143
  if (timeoutAbortSource && timeoutAbortSource.signal.aborted) {
144
- result.status = "timedout"
144
+ result.status = "timedout";
145
145
  } else {
146
- result.status = "aborted"
146
+ result.status = "aborted";
147
147
  }
148
148
  } else {
149
- result.status = "failed"
150
- result.errors.push(e)
149
+ result.status = "failed";
150
+ result.errors.push(e);
151
151
  }
152
152
  } finally {
153
- await runOperation.end()
153
+ await runOperation.end();
154
154
  }
155
155
 
156
156
  callbacks.forEach((callback) => {
157
- callback()
158
- })
159
- return result
160
- }
157
+ callback();
158
+ });
159
+ return result;
160
+ };
@@ -1,46 +1,46 @@
1
- import { assertAndNormalizeDirectoryUrl } from "@jsenv/filesystem"
2
- import { pingServer } from "@jsenv/core/src/helpers/ping_server.js"
3
- import { basicFetch } from "@jsenv/core/src/helpers/basic_fetch.js"
1
+ import { assertAndNormalizeDirectoryUrl } from "@jsenv/filesystem";
2
+ import { pingServer } from "@jsenv/core/src/helpers/ping_server.js";
3
+ import { basicFetch } from "@jsenv/core/src/helpers/basic_fetch.js";
4
4
 
5
5
  export const assertAndNormalizeWebServer = async (webServer) => {
6
6
  if (!webServer) {
7
7
  throw new TypeError(
8
8
  `webServer is required when running tests on browser(s)`,
9
- )
9
+ );
10
10
  }
11
11
  const unexpectedParamNames = Object.keys(webServer).filter((key) => {
12
- return !["origin", "moduleUrl", "rootDirectoryUrl"].includes(key)
13
- })
12
+ return !["origin", "moduleUrl", "rootDirectoryUrl"].includes(key);
13
+ });
14
14
  if (unexpectedParamNames.length > 0) {
15
15
  throw new TypeError(
16
16
  `${unexpectedParamNames.join(",")}: there is no such param to webServer`,
17
- )
17
+ );
18
18
  }
19
19
 
20
- let aServerIsListening = await pingServer(webServer.origin)
20
+ let aServerIsListening = await pingServer(webServer.origin);
21
21
  if (!aServerIsListening) {
22
22
  if (!webServer.moduleUrl) {
23
23
  throw new TypeError(
24
24
  `webServer.moduleUrl is required as there is no server listening "${webServer.origin}"`,
25
- )
25
+ );
26
26
  }
27
27
  try {
28
- process.env.IMPORTED_BY_TEST_PLAN = "1"
29
- await import(webServer.moduleUrl)
30
- delete process.env.IMPORTED_BY_TEST_PLAN
28
+ process.env.IMPORTED_BY_TEST_PLAN = "1";
29
+ await import(webServer.moduleUrl);
30
+ delete process.env.IMPORTED_BY_TEST_PLAN;
31
31
  } catch (e) {
32
32
  if (e.code === "ERR_MODULE_NOT_FOUND") {
33
33
  throw new Error(
34
34
  `webServer.moduleUrl does not lead to a file at "${webServer.moduleUrl}"`,
35
- )
35
+ );
36
36
  }
37
- throw e
37
+ throw e;
38
38
  }
39
- aServerIsListening = await pingServer(webServer.origin)
39
+ aServerIsListening = await pingServer(webServer.origin);
40
40
  if (!aServerIsListening) {
41
41
  throw new Error(
42
42
  `webServer.moduleUrl did not start a server listening at "${webServer.origin}", check file at "${webServer.moduleUrl}"`,
43
- )
43
+ );
44
44
  }
45
45
  }
46
46
  const { headers } = await basicFetch(webServer.origin, {
@@ -49,25 +49,25 @@ export const assertAndNormalizeWebServer = async (webServer) => {
49
49
  headers: {
50
50
  "x-server-inspect": "1",
51
51
  },
52
- })
52
+ });
53
53
  if (String(headers["server"]).includes("jsenv_dev_server")) {
54
- webServer.isJsenvDevServer = true
54
+ webServer.isJsenvDevServer = true;
55
55
  const { json } = await basicFetch(`${webServer.origin}/__params__.json`, {
56
56
  rejectUnauthorized: false,
57
- })
57
+ });
58
58
  if (webServer.rootDirectoryUrl === undefined) {
59
- const jsenvDevServerParams = await json()
60
- webServer.rootDirectoryUrl = jsenvDevServerParams.sourceDirectoryUrl
59
+ const jsenvDevServerParams = await json();
60
+ webServer.rootDirectoryUrl = jsenvDevServerParams.sourceDirectoryUrl;
61
61
  } else {
62
62
  webServer.rootDirectoryUrl = assertAndNormalizeDirectoryUrl(
63
63
  webServer.rootDirectoryUrl,
64
64
  "webServer.rootDirectoryUrl",
65
- )
65
+ );
66
66
  }
67
67
  } else {
68
68
  webServer.rootDirectoryUrl = assertAndNormalizeDirectoryUrl(
69
69
  webServer.rootDirectoryUrl,
70
70
  "webServer.rootDirectoryUrl",
71
- )
71
+ );
72
72
  }
73
- }
73
+ };
package/src/main.js CHANGED
@@ -1,10 +1,10 @@
1
1
  // test
2
- export { executeTestPlan } from "./execution/execute_test_plan.js"
2
+ export { executeTestPlan } from "./execution/execute_test_plan.js";
3
3
  // runtimes (used to execute tests)
4
- export { chromium, chromiumIsolatedTab } from "./runtime_browsers/chromium.js"
5
- export { firefox, firefoxIsolatedTab } from "./runtime_browsers/firefox.js"
6
- export { webkit, webkitIsolatedTab } from "./runtime_browsers/webkit.js"
7
- export { nodeChildProcess } from "./runtime_node/node_child_process.js"
8
- export { nodeWorkerThread } from "./runtime_node/node_worker_thread.js"
4
+ export { chromium, chromiumIsolatedTab } from "./runtime_browsers/chromium.js";
5
+ export { firefox, firefoxIsolatedTab } from "./runtime_browsers/firefox.js";
6
+ export { webkit, webkitIsolatedTab } from "./runtime_browsers/webkit.js";
7
+ export { nodeChildProcess } from "./runtime_node/node_child_process.js";
8
+ export { nodeWorkerThread } from "./runtime_node/node_worker_thread.js";
9
9
  // advanced
10
- export { execute } from "./execution/execute.js"
10
+ export { execute } from "./execution/execute.js";
@@ -1,15 +1,15 @@
1
- import { createRuntimeUsingPlaywright } from "./using_playwright.js"
1
+ import { createRuntimeUsingPlaywright } from "./using_playwright.js";
2
2
 
3
3
  export const chromium = (params) => {
4
- return createChromiumRuntine(params)
5
- }
4
+ return createChromiumRuntine(params);
5
+ };
6
6
 
7
7
  export const chromiumIsolatedTab = (params) => {
8
8
  return createChromiumRuntine({
9
9
  ...params,
10
10
  isolatedTab: true,
11
- })
12
- }
11
+ });
12
+ };
13
13
 
14
14
  const createChromiumRuntine = (params) => {
15
15
  return createRuntimeUsingPlaywright({
@@ -19,5 +19,5 @@ const createChromiumRuntine = (params) => {
19
19
  browserVersion: "unset",
20
20
  coveragePlaywrightAPIAvailable: true,
21
21
  ...params,
22
- })
23
- }
22
+ });
23
+ };
@@ -1,15 +1,15 @@
1
- import { createRuntimeUsingPlaywright } from "./using_playwright.js"
1
+ import { createRuntimeUsingPlaywright } from "./using_playwright.js";
2
2
 
3
3
  export const firefox = (params) => {
4
- return createFirefoxRuntime(params)
5
- }
4
+ return createFirefoxRuntime(params);
5
+ };
6
6
 
7
7
  export const firefoxIsolatedTab = (params) => {
8
8
  return createRuntimeUsingPlaywright({
9
9
  ...params,
10
10
  isolatedTab: true,
11
- })
12
- }
11
+ });
12
+ };
13
13
 
14
14
  const createFirefoxRuntime = ({
15
15
  disableOnWindowsBecauseFlaky,
@@ -22,13 +22,13 @@ const createFirefoxRuntime = ({
22
22
  `Windows + firefox detected: executions on firefox will be ignored (firefox is flaky on windows).
23
23
  To disable this warning, use disableOnWindowsBecauseFlaky: true
24
24
  To ignore potential flakyness, use disableOnWindowsBecauseFlaky: false`,
25
- )
26
- disableOnWindowsBecauseFlaky = true
25
+ );
26
+ disableOnWindowsBecauseFlaky = true;
27
27
  }
28
28
  if (disableOnWindowsBecauseFlaky) {
29
29
  return {
30
30
  disabled: true,
31
- }
31
+ };
32
32
  }
33
33
  }
34
34
 
@@ -39,5 +39,5 @@ To ignore potential flakyness, use disableOnWindowsBecauseFlaky: false`,
39
39
  browserVersion: "unset",
40
40
  isolatedTab: true,
41
41
  ...params,
42
- })
43
- }
42
+ });
43
+ };
@@ -1,9 +1,9 @@
1
- import { URL_META } from "@jsenv/url-meta"
2
- import { applyBabelPlugins } from "@jsenv/ast"
3
- import { SOURCEMAP, generateSourcemapDataUrl } from "@jsenv/sourcemap"
4
- import { WEB_URL_CONVERTER } from "@jsenv/core/src/helpers/web_url_converter.js"
1
+ import { URL_META } from "@jsenv/url-meta";
2
+ import { applyBabelPlugins } from "@jsenv/ast";
3
+ import { SOURCEMAP, generateSourcemapDataUrl } from "@jsenv/sourcemap";
4
+ import { WEB_URL_CONVERTER } from "@jsenv/core/src/helpers/web_url_converter.js";
5
5
 
6
- import { babelPluginInstrument } from "../coverage/babel_plugin_instrument.js"
6
+ import { babelPluginInstrument } from "../coverage/babel_plugin_instrument.js";
7
7
 
8
8
  export const initIstanbulMiddleware = async (
9
9
  page,
@@ -12,21 +12,21 @@ export const initIstanbulMiddleware = async (
12
12
  const associations = URL_META.resolveAssociations(
13
13
  { cover: coverageConfig },
14
14
  rootDirectoryUrl,
15
- )
15
+ );
16
16
  await page.route("**", async (route) => {
17
- const request = route.request()
18
- const url = request.url() // transform into a local url
19
- const fileUrl = WEB_URL_CONVERTER.asFileUrl(url, webServer)
17
+ const request = route.request();
18
+ const url = request.url(); // transform into a local url
19
+ const fileUrl = WEB_URL_CONVERTER.asFileUrl(url, webServer);
20
20
  const needsInstrumentation = URL_META.applyAssociations({
21
21
  url: fileUrl,
22
22
  associations,
23
- }).cover
23
+ }).cover;
24
24
  if (!needsInstrumentation) {
25
- route.fallback()
26
- return
25
+ route.fallback();
26
+ return;
27
27
  }
28
- const response = await route.fetch()
29
- const originalBody = await response.text()
28
+ const response = await route.fetch();
29
+ const originalBody = await response.text();
30
30
  try {
31
31
  const result = await applyBabelPlugins({
32
32
  babelPlugins: [babelPluginInstrument],
@@ -38,13 +38,13 @@ export const initIstanbulMiddleware = async (
38
38
  type: "js_module",
39
39
  content: originalBody,
40
40
  },
41
- })
42
- let code = result.code
41
+ });
42
+ let code = result.code;
43
43
  code = SOURCEMAP.writeComment({
44
44
  contentType: "text/javascript",
45
45
  content: code,
46
46
  specifier: generateSourcemapDataUrl(result.map),
47
- })
47
+ });
48
48
  route.fulfill({
49
49
  response,
50
50
  body: code,
@@ -52,14 +52,14 @@ export const initIstanbulMiddleware = async (
52
52
  ...response.headers(),
53
53
  "content-length": Buffer.byteLength(code),
54
54
  },
55
- })
55
+ });
56
56
  } catch (e) {
57
57
  if (e.code === "PARSE_ERROR") {
58
- route.fulfill({ response })
58
+ route.fulfill({ response });
59
59
  } else {
60
- console.error(e)
61
- route.fulfill({ response })
60
+ console.error(e);
61
+ route.fulfill({ response });
62
62
  }
63
63
  }
64
- })
65
- }
64
+ });
65
+ };
@@ -1,19 +1,19 @@
1
- import { readFileSync } from "node:fs"
2
- import { urlToExtension } from "@jsenv/urls"
1
+ import { readFileSync } from "node:fs";
2
+ import { urlToExtension } from "@jsenv/urls";
3
3
  import {
4
4
  injectSupervisorIntoHTML,
5
5
  supervisorFileUrl,
6
- } from "@jsenv/core/src/plugins/supervisor/html_supervisor_injection.js"
6
+ } from "@jsenv/core/src/plugins/supervisor/html_supervisor_injection.js";
7
7
 
8
8
  export const initJsSupervisorMiddleware = async (
9
9
  page,
10
10
  { webServer, fileUrl, fileServerUrl },
11
11
  ) => {
12
- const inlineScriptContents = new Map()
12
+ const inlineScriptContents = new Map();
13
13
 
14
14
  const interceptHtmlToExecute = async ({ route }) => {
15
- const response = await route.fetch()
16
- const originalBody = await response.text()
15
+ const response = await route.fetch();
16
+ const originalBody = await response.text();
17
17
  const injectionResult = await injectSupervisorIntoHTML(
18
18
  {
19
19
  content: originalBody,
@@ -27,11 +27,11 @@ export const initJsSupervisorMiddleware = async (
27
27
  inlineAsRemote: true,
28
28
  webServer,
29
29
  onInlineScript: ({ src, textContent }) => {
30
- const inlineScriptWebUrl = new URL(src, `${webServer.origin}/`).href
31
- inlineScriptContents.set(inlineScriptWebUrl, textContent)
30
+ const inlineScriptWebUrl = new URL(src, `${webServer.origin}/`).href;
31
+ inlineScriptContents.set(inlineScriptWebUrl, textContent);
32
32
  },
33
33
  },
34
- )
34
+ );
35
35
  route.fulfill({
36
36
  response,
37
37
  body: injectionResult.content,
@@ -39,11 +39,11 @@ export const initJsSupervisorMiddleware = async (
39
39
  ...response.headers(),
40
40
  "content-length": Buffer.byteLength(injectionResult.content),
41
41
  },
42
- })
43
- }
42
+ });
43
+ };
44
44
 
45
45
  const interceptInlineScript = ({ url, route }) => {
46
- const inlineScriptContent = inlineScriptContents.get(url)
46
+ const inlineScriptContent = inlineScriptContents.get(url);
47
47
  route.fulfill({
48
48
  status: 200,
49
49
  body: inlineScriptContent,
@@ -51,14 +51,14 @@ export const initJsSupervisorMiddleware = async (
51
51
  "content-type": "text/javascript",
52
52
  "content-length": Buffer.byteLength(inlineScriptContent),
53
53
  },
54
- })
55
- }
54
+ });
55
+ };
56
56
 
57
57
  const interceptFileSystemUrl = ({ url, route }) => {
58
- const relativeUrl = url.slice(webServer.origin.length)
59
- const fsPath = relativeUrl.slice("/@fs/".length)
60
- const fsUrl = `file:///${fsPath}`
61
- const fileContent = readFileSync(new URL(fsUrl), "utf8")
58
+ const relativeUrl = url.slice(webServer.origin.length);
59
+ const fsPath = relativeUrl.slice("/@fs/".length);
60
+ const fsUrl = `file:///${fsPath}`;
61
+ const fileContent = readFileSync(new URL(fsUrl), "utf8");
62
62
  route.fulfill({
63
63
  status: 200,
64
64
  body: fileContent,
@@ -66,33 +66,33 @@ export const initJsSupervisorMiddleware = async (
66
66
  "content-type": "text/javascript",
67
67
  "content-length": Buffer.byteLength(fileContent),
68
68
  },
69
- })
70
- }
69
+ });
70
+ };
71
71
 
72
72
  await page.route("**", async (route) => {
73
- const request = route.request()
74
- const url = request.url()
73
+ const request = route.request();
74
+ const url = request.url();
75
75
  if (url === fileServerUrl && urlToExtension(url) === ".html") {
76
76
  interceptHtmlToExecute({
77
77
  url,
78
78
  request,
79
79
  route,
80
- })
81
- return
80
+ });
81
+ return;
82
82
  }
83
83
  if (inlineScriptContents.has(url)) {
84
84
  interceptInlineScript({
85
85
  url,
86
86
  request,
87
87
  route,
88
- })
89
- return
88
+ });
89
+ return;
90
90
  }
91
- const fsServerUrl = new URL("/@fs/", webServer.origin)
91
+ const fsServerUrl = new URL("/@fs/", webServer.origin);
92
92
  if (url.startsWith(fsServerUrl)) {
93
- interceptFileSystemUrl({ url, request, route })
94
- return
93
+ interceptFileSystemUrl({ url, request, route });
94
+ return;
95
95
  }
96
- route.fallback()
97
- })
98
- }
96
+ route.fallback();
97
+ });
98
+ };