@jsenv/test 1.1.1 → 1.1.3

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 +2 -2
  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
@@ -1,21 +1,21 @@
1
- import { writeFileSync } from "node:fs"
2
- import { createDetailedMessage } from "@jsenv/log"
1
+ import { writeFileSync } from "node:fs";
2
+ import { createDetailedMessage } from "@jsenv/log";
3
3
  import {
4
4
  Abort,
5
5
  createCallbackListNotifiedOnce,
6
6
  raceProcessTeardownEvents,
7
7
  raceCallbacks,
8
- } from "@jsenv/abort"
9
- import { urlIsInsideOf } from "@jsenv/urls"
10
- import { memoize } from "@jsenv/utils/src/memoize/memoize.js"
11
- import { WEB_URL_CONVERTER } from "@jsenv/core/src/helpers/web_url_converter.js"
8
+ } from "@jsenv/abort";
9
+ import { urlIsInsideOf } from "@jsenv/urls";
10
+ import { memoize } from "@jsenv/utils/src/memoize/memoize.js";
11
+ import { WEB_URL_CONVERTER } from "@jsenv/core/src/helpers/web_url_converter.js";
12
12
 
13
- import { filterV8Coverage } from "../coverage/v8_coverage.js"
14
- import { composeTwoFileByFileIstanbulCoverages } from "../coverage/istanbul_coverage_composition.js"
15
- import { initJsSupervisorMiddleware } from "./middleware_js_supervisor.js"
16
- import { initIstanbulMiddleware } from "./middleware_istanbul.js"
13
+ import { filterV8Coverage } from "../coverage/v8_coverage.js";
14
+ import { composeTwoFileByFileIstanbulCoverages } from "../coverage/istanbul_coverage_composition.js";
15
+ import { initJsSupervisorMiddleware } from "./middleware_js_supervisor.js";
16
+ import { initIstanbulMiddleware } from "./middleware_istanbul.js";
17
17
 
18
- const browserPromiseCache = new Map()
18
+ const browserPromiseCache = new Map();
19
19
 
20
20
  export const createRuntimeUsingPlaywright = ({
21
21
  browserName,
@@ -28,7 +28,7 @@ export const createRuntimeUsingPlaywright = ({
28
28
  playwrightLaunchOptions = {},
29
29
  ignoreHTTPSErrors = true,
30
30
  }) => {
31
- const label = `${browserName}${browserVersion}`
31
+ const label = `${browserName}${browserVersion}`;
32
32
  const runtime = {
33
33
  type: "browser",
34
34
  name: browserName,
@@ -36,7 +36,7 @@ export const createRuntimeUsingPlaywright = ({
36
36
  capabilities: {
37
37
  coverageV8: coveragePlaywrightAPIAvailable,
38
38
  },
39
- }
39
+ };
40
40
 
41
41
  runtime.run = async ({
42
42
  signal = new AbortController().signal,
@@ -57,24 +57,24 @@ export const createRuntimeUsingPlaywright = ({
57
57
  keepRunning,
58
58
  onConsole,
59
59
  }) => {
60
- const fileUrl = new URL(fileRelativeUrl, rootDirectoryUrl).href
60
+ const fileUrl = new URL(fileRelativeUrl, rootDirectoryUrl).href;
61
61
  if (!urlIsInsideOf(fileUrl, webServer.rootDirectoryUrl)) {
62
62
  throw new Error(`Cannot execute file that is outside web server root directory
63
63
  --- file ---
64
64
  ${fileUrl}
65
65
  --- web server root directory url ---
66
- ${webServer.rootDirectoryUrl}`)
66
+ ${webServer.rootDirectoryUrl}`);
67
67
  }
68
- const fileServerUrl = WEB_URL_CONVERTER.asWebUrl(fileUrl, webServer)
69
- const cleanupCallbackList = createCallbackListNotifiedOnce()
68
+ const fileServerUrl = WEB_URL_CONVERTER.asWebUrl(fileUrl, webServer);
69
+ const cleanupCallbackList = createCallbackListNotifiedOnce();
70
70
  const cleanup = memoize(async (reason) => {
71
- await cleanupCallbackList.notify({ reason })
72
- })
71
+ await cleanupCallbackList.notify({ reason });
72
+ });
73
73
 
74
- const isBrowserDedicatedToExecution = isolatedTab || !stopAfterAllSignal
74
+ const isBrowserDedicatedToExecution = isolatedTab || !stopAfterAllSignal;
75
75
  let browserAndContextPromise = isBrowserDedicatedToExecution
76
76
  ? null
77
- : browserPromiseCache.get(label)
77
+ : browserPromiseCache.get(label);
78
78
  if (!browserAndContextPromise) {
79
79
  browserAndContextPromise = (async () => {
80
80
  const browser = await launchBrowserUsingPlaywright({
@@ -85,82 +85,82 @@ export const createRuntimeUsingPlaywright = ({
85
85
  ...playwrightLaunchOptions,
86
86
  headless: headful === undefined ? !keepRunning : !headful,
87
87
  },
88
- })
88
+ });
89
89
  if (browser._initializer.version) {
90
- runtime.version = browser._initializer.version
90
+ runtime.version = browser._initializer.version;
91
91
  }
92
- const browserContext = await browser.newContext({ ignoreHTTPSErrors })
93
- return { browser, browserContext }
94
- })()
92
+ const browserContext = await browser.newContext({ ignoreHTTPSErrors });
93
+ return { browser, browserContext };
94
+ })();
95
95
  if (!isBrowserDedicatedToExecution) {
96
- browserPromiseCache.set(label, browserAndContextPromise)
96
+ browserPromiseCache.set(label, browserAndContextPromise);
97
97
  cleanupCallbackList.add(() => {
98
- browserPromiseCache.delete(label)
99
- })
98
+ browserPromiseCache.delete(label);
99
+ });
100
100
  }
101
101
  }
102
- const { browser, browserContext } = await browserAndContextPromise
102
+ const { browser, browserContext } = await browserAndContextPromise;
103
103
  const closeBrowser = async () => {
104
104
  const disconnected = browser.isConnected()
105
105
  ? new Promise((resolve) => {
106
106
  const disconnectedCallback = () => {
107
- browser.removeListener("disconnected", disconnectedCallback)
108
- resolve()
109
- }
110
- browser.on("disconnected", disconnectedCallback)
107
+ browser.removeListener("disconnected", disconnectedCallback);
108
+ resolve();
109
+ };
110
+ browser.on("disconnected", disconnectedCallback);
111
111
  })
112
- : Promise.resolve()
112
+ : Promise.resolve();
113
113
  // for some reason without this 150ms timeout
114
114
  // browser.close() never resolves (playwright does not like something)
115
- await new Promise((resolve) => setTimeout(resolve, 150))
115
+ await new Promise((resolve) => setTimeout(resolve, 150));
116
116
  try {
117
- await browser.close()
117
+ await browser.close();
118
118
  } catch (e) {
119
119
  if (isTargetClosedError(e)) {
120
- return
120
+ return;
121
121
  }
122
- throw e
122
+ throw e;
123
123
  }
124
- await disconnected
125
- }
124
+ await disconnected;
125
+ };
126
126
 
127
- const page = await browserContext.newPage()
127
+ const page = await browserContext.newPage();
128
128
 
129
129
  const istanbulInstrumentationEnabled =
130
130
  coverageEnabled &&
131
131
  (!runtime.capabilities.coverageV8 ||
132
- coverageMethodForBrowsers === "istanbul")
132
+ coverageMethodForBrowsers === "istanbul");
133
133
  if (istanbulInstrumentationEnabled) {
134
134
  await initIstanbulMiddleware(page, {
135
135
  webServer,
136
136
  rootDirectoryUrl,
137
137
  coverageConfig,
138
- })
138
+ });
139
139
  }
140
140
  if (!webServer.isJsenvDevServer) {
141
141
  await initJsSupervisorMiddleware(page, {
142
142
  webServer,
143
143
  fileUrl,
144
144
  fileServerUrl,
145
- })
145
+ });
146
146
  }
147
147
  const closePage = async () => {
148
148
  try {
149
- await page.close()
149
+ await page.close();
150
150
  } catch (e) {
151
151
  if (isTargetClosedError(e)) {
152
- return
152
+ return;
153
153
  }
154
- throw e
154
+ throw e;
155
155
  }
156
- }
156
+ };
157
157
 
158
158
  const result = {
159
159
  status: "pending",
160
160
  namespace: null,
161
161
  errors: [],
162
- }
163
- const callbacks = []
162
+ };
163
+ const callbacks = [];
164
164
  if (coverageEnabled) {
165
165
  if (
166
166
  runtime.capabilities.coverageV8 &&
@@ -168,9 +168,9 @@ export const createRuntimeUsingPlaywright = ({
168
168
  ) {
169
169
  await page.coverage.startJSCoverage({
170
170
  // reportAnonymousScripts: true,
171
- })
171
+ });
172
172
  callbacks.push(async () => {
173
- const v8CoveragesWithWebUrls = await page.coverage.stopJSCoverage()
173
+ const v8CoveragesWithWebUrls = await page.coverage.stopJSCoverage();
174
174
  // we convert urls starting with http:// to file:// because we later
175
175
  // convert the url to filesystem path in istanbulCoverageFromV8Coverage function
176
176
  const v8CoveragesWithFsUrls = v8CoveragesWithWebUrls.map(
@@ -178,47 +178,47 @@ export const createRuntimeUsingPlaywright = ({
178
178
  const fsUrl = WEB_URL_CONVERTER.asFileUrl(
179
179
  v8CoveragesWithWebUrl.url,
180
180
  webServer,
181
- )
181
+ );
182
182
  return {
183
183
  ...v8CoveragesWithWebUrl,
184
184
  url: fsUrl,
185
- }
185
+ };
186
186
  },
187
- )
187
+ );
188
188
  const coverage = await filterV8Coverage(
189
189
  { result: v8CoveragesWithFsUrls },
190
190
  {
191
191
  rootDirectoryUrl,
192
192
  coverageConfig,
193
193
  },
194
- )
194
+ );
195
195
  writeFileSync(
196
196
  new URL(coverageFileUrl),
197
197
  JSON.stringify(coverage, null, " "),
198
- )
199
- })
198
+ );
199
+ });
200
200
  } else {
201
201
  callbacks.push(() => {
202
- const scriptExecutionResults = result.namespace
202
+ const scriptExecutionResults = result.namespace;
203
203
  if (scriptExecutionResults) {
204
204
  const coverage =
205
- generateCoverageForPage(scriptExecutionResults) || {}
205
+ generateCoverageForPage(scriptExecutionResults) || {};
206
206
  writeFileSync(
207
207
  new URL(coverageFileUrl),
208
208
  JSON.stringify(coverage, null, " "),
209
- )
209
+ );
210
210
  }
211
- })
211
+ });
212
212
  }
213
213
  } else {
214
214
  callbacks.push(() => {
215
- const scriptExecutionResults = result.namespace
215
+ const scriptExecutionResults = result.namespace;
216
216
  if (scriptExecutionResults) {
217
217
  Object.keys(scriptExecutionResults).forEach((fileRelativeUrl) => {
218
- delete scriptExecutionResults[fileRelativeUrl].coverage
219
- })
218
+ delete scriptExecutionResults[fileRelativeUrl].coverage;
219
+ });
220
220
  }
221
- })
221
+ });
222
222
  }
223
223
 
224
224
  if (collectPerformance) {
@@ -227,26 +227,26 @@ export const createRuntimeUsingPlaywright = ({
227
227
  /* eslint-disable no-undef */
228
228
  /* istanbul ignore next */
229
229
  () => {
230
- const { performance } = window
230
+ const { performance } = window;
231
231
  if (!performance) {
232
- return null
232
+ return null;
233
233
  }
234
- const measures = {}
235
- const measurePerfEntries = performance.getEntriesByType("measure")
234
+ const measures = {};
235
+ const measurePerfEntries = performance.getEntriesByType("measure");
236
236
  measurePerfEntries.forEach((measurePerfEntry) => {
237
- measures[measurePerfEntry.name] = measurePerfEntry.duration
238
- })
237
+ measures[measurePerfEntry.name] = measurePerfEntry.duration;
238
+ });
239
239
  return {
240
240
  timeOrigin: performance.timeOrigin,
241
241
  timing: performance.timing.toJSON(),
242
242
  navigation: performance.navigation.toJSON(),
243
243
  measures,
244
- }
244
+ };
245
245
  },
246
246
  /* eslint-enable no-undef */
247
- )
248
- result.performance = performance
249
- })
247
+ );
248
+ result.performance = performance;
249
+ });
250
250
  }
251
251
 
252
252
  // https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-console
@@ -258,18 +258,18 @@ export const createRuntimeUsingPlaywright = ({
258
258
  onConsole({
259
259
  type: consoleMessage.type(),
260
260
  text: `${extractTextFromConsoleMessage(consoleMessage)}\n`,
261
- })
261
+ });
262
262
  },
263
- })
264
- cleanupCallbackList.add(removeConsoleListener)
265
- const actionOperation = Abort.startOperation()
266
- actionOperation.addAbortSignal(signal)
263
+ });
264
+ cleanupCallbackList.add(removeConsoleListener);
265
+ const actionOperation = Abort.startOperation();
266
+ actionOperation.addAbortSignal(signal);
267
267
 
268
268
  const winnerPromise = new Promise((resolve, reject) => {
269
269
  raceCallbacks(
270
270
  {
271
271
  aborted: (cb) => {
272
- return actionOperation.addAbortCallback(cb)
272
+ return actionOperation.addAbortCallback(cb);
273
273
  },
274
274
  // https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-error
275
275
  error: (cb) => {
@@ -278,11 +278,11 @@ export const createRuntimeUsingPlaywright = ({
278
278
  eventType: "error",
279
279
  callback: (error) => {
280
280
  if (shouldIgnoreError(error, "error")) {
281
- return
281
+ return;
282
282
  }
283
- cb(transformErrorHook(error))
283
+ cb(transformErrorHook(error));
284
284
  },
285
- })
285
+ });
286
286
  },
287
287
  // https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-pageerror
288
288
  // pageerror: () => {
@@ -304,157 +304,157 @@ export const createRuntimeUsingPlaywright = ({
304
304
  // https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-disconnected
305
305
  if (isBrowserDedicatedToExecution) {
306
306
  browser.on("disconnected", async () => {
307
- cb({ reason: "browser disconnected" })
308
- })
309
- cleanupCallbackList.add(closePage)
310
- cleanupCallbackList.add(closeBrowser)
307
+ cb({ reason: "browser disconnected" });
308
+ });
309
+ cleanupCallbackList.add(closePage);
310
+ cleanupCallbackList.add(closeBrowser);
311
311
  } else {
312
312
  const disconnectedCallback = async () => {
313
- throw new Error("browser disconnected during execution")
314
- }
315
- browser.on("disconnected", disconnectedCallback)
313
+ throw new Error("browser disconnected during execution");
314
+ };
315
+ browser.on("disconnected", disconnectedCallback);
316
316
  page.on("close", () => {
317
- cb({ reason: "page closed" })
318
- })
319
- cleanupCallbackList.add(closePage)
317
+ cb({ reason: "page closed" });
318
+ });
319
+ cleanupCallbackList.add(closePage);
320
320
  cleanupCallbackList.add(() => {
321
- browser.removeListener("disconnected", disconnectedCallback)
322
- })
323
- const notifyPrevious = stopAfterAllSignal.notify
321
+ browser.removeListener("disconnected", disconnectedCallback);
322
+ });
323
+ const notifyPrevious = stopAfterAllSignal.notify;
324
324
  stopAfterAllSignal.notify = async () => {
325
- await notifyPrevious()
326
- browser.removeListener("disconnected", disconnectedCallback)
325
+ await notifyPrevious();
326
+ browser.removeListener("disconnected", disconnectedCallback);
327
327
  logger.debug(
328
328
  `stopAfterAllSignal notified -> closing ${browserName}`,
329
- )
330
- await closeBrowser()
331
- }
329
+ );
330
+ await closeBrowser();
331
+ };
332
332
  }
333
333
  },
334
334
  response: async (cb) => {
335
335
  try {
336
- await page.goto(fileServerUrl, { timeout: 0 })
336
+ await page.goto(fileServerUrl, { timeout: 0 });
337
337
  const returnValue = await page.evaluate(
338
338
  /* eslint-disable no-undef */
339
339
  /* istanbul ignore next */
340
340
  async () => {
341
- let startTime
341
+ let startTime;
342
342
  try {
343
- startTime = window.performance.timing.navigationStart
343
+ startTime = window.performance.timing.navigationStart;
344
344
  } catch (e) {
345
- startTime = Date.now()
345
+ startTime = Date.now();
346
346
  }
347
347
  if (!window.__supervisor__) {
348
- throw new Error("window.__supervisor__ is undefined")
348
+ throw new Error("window.__supervisor__ is undefined");
349
349
  }
350
350
  const executionResultFromJsenvSupervisor =
351
- await window.__supervisor__.getDocumentExecutionResult()
351
+ await window.__supervisor__.getDocumentExecutionResult();
352
352
  return {
353
353
  type: "window_supervisor",
354
354
  startTime,
355
355
  endTime: Date.now(),
356
356
  executionResults:
357
357
  executionResultFromJsenvSupervisor.executionResults,
358
- }
358
+ };
359
359
  },
360
360
  /* eslint-enable no-undef */
361
- )
362
- cb(returnValue)
361
+ );
362
+ cb(returnValue);
363
363
  } catch (e) {
364
- reject(e)
364
+ reject(e);
365
365
  }
366
366
  },
367
367
  },
368
368
  resolve,
369
- )
370
- })
369
+ );
370
+ });
371
371
 
372
372
  const writeResult = async () => {
373
- const winner = await winnerPromise
373
+ const winner = await winnerPromise;
374
374
  if (winner.name === "aborted") {
375
- result.status = "aborted"
376
- return
375
+ result.status = "aborted";
376
+ return;
377
377
  }
378
378
  if (winner.name === "error") {
379
- let error = winner.data
380
- result.status = "failed"
381
- result.errors.push(error)
382
- return
379
+ let error = winner.data;
380
+ result.status = "failed";
381
+ result.errors.push(error);
382
+ return;
383
383
  }
384
384
  if (winner.name === "pageerror") {
385
- let error = winner.data
386
- result.status = "failed"
387
- result.errors.push(error)
388
- return
385
+ let error = winner.data;
386
+ result.status = "failed";
387
+ result.errors.push(error);
388
+ return;
389
389
  }
390
390
  if (winner.name === "closed") {
391
- result.status = "failed"
391
+ result.status = "failed";
392
392
  result.errors.push(
393
393
  isBrowserDedicatedToExecution
394
394
  ? new Error(`browser disconnected during execution`)
395
395
  : new Error(`page closed during execution`),
396
- )
397
- return
396
+ );
397
+ return;
398
398
  }
399
399
  // winner.name === "response"
400
- const { executionResults } = winner.data
401
- result.status = "completed"
402
- result.namespace = executionResults
400
+ const { executionResults } = winner.data;
401
+ result.status = "completed";
402
+ result.namespace = executionResults;
403
403
  Object.keys(executionResults).forEach((key) => {
404
- const executionResult = executionResults[key]
404
+ const executionResult = executionResults[key];
405
405
  if (executionResult.status === "failed") {
406
- result.status = "failed"
406
+ result.status = "failed";
407
407
  if (executionResult.exception) {
408
408
  result.errors.push({
409
409
  ...executionResult.exception,
410
410
  stack: executionResult.exception.text,
411
- })
411
+ });
412
412
  } else {
413
413
  result.errors.push({
414
414
  ...executionResult.error,
415
415
  stack: executionResult.error.stack,
416
- })
416
+ });
417
417
  }
418
418
  }
419
- })
420
- }
419
+ });
420
+ };
421
421
 
422
422
  try {
423
- await writeResult()
423
+ await writeResult();
424
424
  if (collectPerformance) {
425
- result.performance = performance
425
+ result.performance = performance;
426
426
  }
427
427
  await callbacks.reduce(async (previous, callback) => {
428
- await previous
429
- await callback()
430
- }, Promise.resolve())
428
+ await previous;
429
+ await callback();
430
+ }, Promise.resolve());
431
431
  } catch (e) {
432
- result.status = "failed"
433
- result.errors = [e]
432
+ result.status = "failed";
433
+ result.errors = [e];
434
434
  }
435
435
  if (keepRunning) {
436
- stopSignal.notify = cleanup
436
+ stopSignal.notify = cleanup;
437
437
  } else {
438
- await cleanup("execution done")
438
+ await cleanup("execution done");
439
439
  }
440
- return result
441
- }
442
- return runtime
443
- }
440
+ return result;
441
+ };
442
+ return runtime;
443
+ };
444
444
 
445
445
  const generateCoverageForPage = (scriptExecutionResults) => {
446
- let istanbulCoverageComposed = null
446
+ let istanbulCoverageComposed = null;
447
447
  Object.keys(scriptExecutionResults).forEach((fileRelativeUrl) => {
448
- const istanbulCoverage = scriptExecutionResults[fileRelativeUrl].coverage
448
+ const istanbulCoverage = scriptExecutionResults[fileRelativeUrl].coverage;
449
449
  istanbulCoverageComposed = istanbulCoverageComposed
450
450
  ? composeTwoFileByFileIstanbulCoverages(
451
451
  istanbulCoverageComposed,
452
452
  istanbulCoverage,
453
453
  )
454
- : istanbulCoverage
455
- })
456
- return istanbulCoverageComposed
457
- }
454
+ : istanbulCoverage;
455
+ });
456
+ return istanbulCoverageComposed;
457
+ };
458
458
 
459
459
  const launchBrowserUsingPlaywright = async ({
460
460
  signal,
@@ -462,9 +462,9 @@ const launchBrowserUsingPlaywright = async ({
462
462
  stopOnExit,
463
463
  playwrightLaunchOptions,
464
464
  }) => {
465
- const launchBrowserOperation = Abort.startOperation()
466
- launchBrowserOperation.addAbortSignal(signal)
467
- const playwright = await importPlaywright({ browserName })
465
+ const launchBrowserOperation = Abort.startOperation();
466
+ launchBrowserOperation.addAbortSignal(signal);
467
+ const playwright = await importPlaywright({ browserName });
468
468
  if (stopOnExit) {
469
469
  launchBrowserOperation.addAbortSource((abort) => {
470
470
  return raceProcessTeardownEvents(
@@ -476,10 +476,10 @@ const launchBrowserUsingPlaywright = async ({
476
476
  exit: true,
477
477
  },
478
478
  abort,
479
- )
480
- })
479
+ );
480
+ });
481
481
  }
482
- const browserClass = playwright[browserName]
482
+ const browserClass = playwright[browserName];
483
483
  try {
484
484
  const browser = await browserClass.launch({
485
485
  ...playwrightLaunchOptions,
@@ -488,24 +488,24 @@ const launchBrowserUsingPlaywright = async ({
488
488
  handleSIGINT: false,
489
489
  handleSIGTERM: false,
490
490
  handleSIGHUP: false,
491
- })
492
- launchBrowserOperation.throwIfAborted()
493
- return browser
491
+ });
492
+ launchBrowserOperation.throwIfAborted();
493
+ return browser;
494
494
  } catch (e) {
495
495
  if (launchBrowserOperation.signal.aborted && isTargetClosedError(e)) {
496
496
  // rethrow the abort error
497
- launchBrowserOperation.throwIfAborted()
497
+ launchBrowserOperation.throwIfAborted();
498
498
  }
499
- throw e
499
+ throw e;
500
500
  } finally {
501
- await launchBrowserOperation.end()
501
+ await launchBrowserOperation.end();
502
502
  }
503
- }
503
+ };
504
504
 
505
505
  const importPlaywright = async ({ browserName }) => {
506
506
  try {
507
- const namespace = await import("playwright")
508
- return namespace
507
+ const namespace = await import("playwright");
508
+ return namespace;
509
509
  } catch (e) {
510
510
  if (e.code === "ERR_MODULE_NOT_FOUND") {
511
511
  throw new Error(
@@ -516,24 +516,24 @@ const importPlaywright = async ({ browserName }) => {
516
516
  },
517
517
  ),
518
518
  { cause: e },
519
- )
519
+ );
520
520
  }
521
- throw e
521
+ throw e;
522
522
  }
523
- }
523
+ };
524
524
 
525
525
  const isTargetClosedError = (error) => {
526
526
  if (error.message.match(/Protocol error \(.*?\): Target closed/)) {
527
- return true
527
+ return true;
528
528
  }
529
529
  if (error.message.match(/Protocol error \(.*?\): Browser.*?closed/)) {
530
- return true
530
+ return true;
531
531
  }
532
- return error.message.includes("browserContext.close: Browser closed")
533
- }
532
+ return error.message.includes("browserContext.close: Browser closed");
533
+ };
534
534
 
535
535
  const extractTextFromConsoleMessage = (consoleMessage) => {
536
- return consoleMessage.text()
536
+ return consoleMessage.text();
537
537
  // ensure we use a string so that istanbul won't try
538
538
  // to put any coverage statement inside it
539
539
  // ideally we should use uneval no ?
@@ -563,11 +563,11 @@ const extractTextFromConsoleMessage = (consoleMessage) => {
563
563
  // return `${previous} ${string}`
564
564
  // }, "")
565
565
  // return text
566
- }
566
+ };
567
567
 
568
568
  const registerEvent = ({ object, eventType, callback }) => {
569
- object.on(eventType, callback)
569
+ object.on(eventType, callback);
570
570
  return () => {
571
- object.removeListener(eventType, callback)
572
- }
573
- }
571
+ object.removeListener(eventType, callback);
572
+ };
573
+ };