codeceptjs 3.7.6-beta.4 → 4.0.0-beta.10.esm-aria

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 (191) hide show
  1. package/README.md +1 -3
  2. package/bin/codecept.js +51 -53
  3. package/bin/test-server.js +14 -3
  4. package/docs/webapi/click.mustache +5 -1
  5. package/lib/actor.js +15 -11
  6. package/lib/ai.js +72 -107
  7. package/lib/assert/empty.js +9 -8
  8. package/lib/assert/equal.js +15 -17
  9. package/lib/assert/error.js +2 -2
  10. package/lib/assert/include.js +9 -11
  11. package/lib/assert/throws.js +1 -1
  12. package/lib/assert/truth.js +8 -5
  13. package/lib/assert.js +18 -18
  14. package/lib/codecept.js +102 -75
  15. package/lib/colorUtils.js +48 -50
  16. package/lib/command/check.js +32 -27
  17. package/lib/command/configMigrate.js +11 -10
  18. package/lib/command/definitions.js +16 -10
  19. package/lib/command/dryRun.js +16 -16
  20. package/lib/command/generate.js +62 -27
  21. package/lib/command/gherkin/init.js +36 -38
  22. package/lib/command/gherkin/snippets.js +14 -14
  23. package/lib/command/gherkin/steps.js +21 -18
  24. package/lib/command/info.js +8 -8
  25. package/lib/command/init.js +36 -29
  26. package/lib/command/interactive.js +11 -10
  27. package/lib/command/list.js +10 -9
  28. package/lib/command/run-multiple/chunk.js +5 -5
  29. package/lib/command/run-multiple/collection.js +5 -5
  30. package/lib/command/run-multiple/run.js +3 -3
  31. package/lib/command/run-multiple.js +16 -13
  32. package/lib/command/run-rerun.js +6 -7
  33. package/lib/command/run-workers.js +24 -9
  34. package/lib/command/run.js +23 -8
  35. package/lib/command/utils.js +20 -18
  36. package/lib/command/workers/runTests.js +197 -114
  37. package/lib/config.js +124 -51
  38. package/lib/container.js +438 -87
  39. package/lib/data/context.js +6 -5
  40. package/lib/data/dataScenarioConfig.js +1 -1
  41. package/lib/data/dataTableArgument.js +1 -1
  42. package/lib/data/table.js +1 -1
  43. package/lib/effects.js +94 -10
  44. package/lib/element/WebElement.js +2 -2
  45. package/lib/els.js +11 -9
  46. package/lib/event.js +11 -10
  47. package/lib/globals.js +141 -0
  48. package/lib/heal.js +12 -12
  49. package/lib/helper/AI.js +11 -11
  50. package/lib/helper/ApiDataFactory.js +50 -19
  51. package/lib/helper/Appium.js +19 -27
  52. package/lib/helper/FileSystem.js +32 -12
  53. package/lib/helper/GraphQL.js +3 -3
  54. package/lib/helper/GraphQLDataFactory.js +4 -4
  55. package/lib/helper/JSONResponse.js +25 -29
  56. package/lib/helper/Mochawesome.js +7 -4
  57. package/lib/helper/Playwright.js +902 -164
  58. package/lib/helper/Puppeteer.js +383 -76
  59. package/lib/helper/REST.js +29 -12
  60. package/lib/helper/WebDriver.js +268 -61
  61. package/lib/helper/clientscripts/PollyWebDriverExt.js +1 -1
  62. package/lib/helper/errors/ConnectionRefused.js +6 -6
  63. package/lib/helper/errors/ElementAssertion.js +11 -16
  64. package/lib/helper/errors/ElementNotFound.js +5 -9
  65. package/lib/helper/errors/RemoteBrowserConnectionRefused.js +5 -5
  66. package/lib/helper/extras/Console.js +11 -11
  67. package/lib/helper/extras/PlaywrightLocator.js +110 -0
  68. package/lib/helper/extras/PlaywrightPropEngine.js +18 -18
  69. package/lib/helper/extras/PlaywrightReactVueLocator.js +18 -9
  70. package/lib/helper/extras/PlaywrightRestartOpts.js +34 -23
  71. package/lib/helper/extras/Popup.js +1 -1
  72. package/lib/helper/extras/React.js +29 -30
  73. package/lib/helper/network/actions.js +29 -44
  74. package/lib/helper/network/utils.js +76 -83
  75. package/lib/helper/scripts/blurElement.js +6 -6
  76. package/lib/helper/scripts/focusElement.js +6 -6
  77. package/lib/helper/scripts/highlightElement.js +9 -9
  78. package/lib/helper/scripts/isElementClickable.js +34 -34
  79. package/lib/helper.js +2 -1
  80. package/lib/history.js +23 -20
  81. package/lib/hooks.js +10 -10
  82. package/lib/html.js +90 -100
  83. package/lib/index.js +48 -21
  84. package/lib/listener/config.js +19 -12
  85. package/lib/listener/emptyRun.js +6 -7
  86. package/lib/listener/enhancedGlobalRetry.js +6 -6
  87. package/lib/listener/exit.js +4 -3
  88. package/lib/listener/globalRetry.js +5 -5
  89. package/lib/listener/globalTimeout.js +30 -14
  90. package/lib/listener/helpers.js +39 -14
  91. package/lib/listener/mocha.js +3 -4
  92. package/lib/listener/result.js +4 -5
  93. package/lib/listener/retryEnhancer.js +3 -3
  94. package/lib/listener/steps.js +8 -7
  95. package/lib/listener/store.js +3 -3
  96. package/lib/locator.js +213 -192
  97. package/lib/mocha/asyncWrapper.js +105 -62
  98. package/lib/mocha/bdd.js +99 -13
  99. package/lib/mocha/cli.js +59 -26
  100. package/lib/mocha/factory.js +78 -19
  101. package/lib/mocha/featureConfig.js +1 -1
  102. package/lib/mocha/gherkin.js +56 -24
  103. package/lib/mocha/hooks.js +12 -3
  104. package/lib/mocha/index.js +13 -4
  105. package/lib/mocha/inject.js +22 -5
  106. package/lib/mocha/scenarioConfig.js +2 -2
  107. package/lib/mocha/suite.js +9 -2
  108. package/lib/mocha/test.js +10 -7
  109. package/lib/mocha/ui.js +28 -18
  110. package/lib/output.js +10 -8
  111. package/lib/parser.js +44 -44
  112. package/lib/pause.js +15 -16
  113. package/lib/plugin/analyze.js +19 -12
  114. package/lib/plugin/auth.js +20 -21
  115. package/lib/plugin/autoDelay.js +12 -8
  116. package/lib/plugin/coverage.js +28 -11
  117. package/lib/plugin/customLocator.js +3 -3
  118. package/lib/plugin/customReporter.js +3 -2
  119. package/lib/plugin/enhancedRetryFailedStep.js +6 -6
  120. package/lib/plugin/heal.js +14 -9
  121. package/lib/plugin/htmlReporter.js +724 -99
  122. package/lib/plugin/pageInfo.js +10 -10
  123. package/lib/plugin/pauseOnFail.js +4 -3
  124. package/lib/plugin/retryFailedStep.js +48 -5
  125. package/lib/plugin/screenshotOnFail.js +75 -37
  126. package/lib/plugin/stepByStepReport.js +14 -14
  127. package/lib/plugin/stepTimeout.js +4 -3
  128. package/lib/plugin/subtitles.js +6 -5
  129. package/lib/recorder.js +33 -14
  130. package/lib/rerun.js +69 -26
  131. package/lib/result.js +4 -4
  132. package/lib/retryCoordinator.js +2 -2
  133. package/lib/secret.js +18 -17
  134. package/lib/session.js +95 -89
  135. package/lib/step/base.js +7 -7
  136. package/lib/step/comment.js +2 -2
  137. package/lib/step/config.js +1 -1
  138. package/lib/step/func.js +3 -3
  139. package/lib/step/helper.js +3 -3
  140. package/lib/step/meta.js +5 -5
  141. package/lib/step/record.js +11 -11
  142. package/lib/step/retry.js +3 -3
  143. package/lib/step/section.js +3 -3
  144. package/lib/step.js +7 -10
  145. package/lib/steps.js +9 -5
  146. package/lib/store.js +1 -1
  147. package/lib/template/heal.js +1 -1
  148. package/lib/template/prompts/generatePageObject.js +31 -0
  149. package/lib/template/prompts/healStep.js +13 -0
  150. package/lib/template/prompts/writeStep.js +9 -0
  151. package/lib/test-server.js +17 -6
  152. package/lib/timeout.js +1 -7
  153. package/lib/transform.js +8 -8
  154. package/lib/translation.js +32 -18
  155. package/lib/utils/mask_data.js +4 -10
  156. package/lib/utils.js +66 -64
  157. package/lib/workerStorage.js +17 -17
  158. package/lib/workers.js +214 -84
  159. package/package.json +41 -37
  160. package/translations/de-DE.js +2 -2
  161. package/translations/fr-FR.js +2 -2
  162. package/translations/index.js +23 -10
  163. package/translations/it-IT.js +2 -2
  164. package/translations/ja-JP.js +2 -2
  165. package/translations/nl-NL.js +2 -2
  166. package/translations/pl-PL.js +2 -2
  167. package/translations/pt-BR.js +2 -2
  168. package/translations/ru-RU.js +2 -2
  169. package/translations/utils.js +4 -3
  170. package/translations/zh-CN.js +2 -2
  171. package/translations/zh-TW.js +2 -2
  172. package/typings/index.d.ts +5 -3
  173. package/typings/promiseBasedTypes.d.ts +4 -0
  174. package/typings/types.d.ts +4 -0
  175. package/lib/helper/Nightmare.js +0 -1486
  176. package/lib/helper/Protractor.js +0 -1840
  177. package/lib/helper/TestCafe.js +0 -1391
  178. package/lib/helper/clientscripts/nightmare.js +0 -213
  179. package/lib/helper/testcafe/testControllerHolder.js +0 -42
  180. package/lib/helper/testcafe/testcafe-utils.js +0 -61
  181. package/lib/plugin/allure.js +0 -15
  182. package/lib/plugin/autoLogin.js +0 -5
  183. package/lib/plugin/commentStep.js +0 -141
  184. package/lib/plugin/eachElement.js +0 -127
  185. package/lib/plugin/fakerTransform.js +0 -49
  186. package/lib/plugin/retryTo.js +0 -16
  187. package/lib/plugin/selenoid.js +0 -364
  188. package/lib/plugin/standardActingHelpers.js +0 -6
  189. package/lib/plugin/tryTo.js +0 -16
  190. package/lib/plugin/wdio.js +0 -247
  191. package/lib/within.js +0 -90
@@ -1,15 +1,16 @@
1
- let webdriverio
2
-
3
- const fs = require('fs')
4
- const axios = require('axios').default
5
- const { v4: uuidv4 } = require('uuid')
6
-
7
- const Webdriver = require('./WebDriver')
8
- const AssertionFailedError = require('../assert/error')
9
- const { truth } = require('../assert/truth')
10
- const recorder = require('../recorder')
11
- const Locator = require('../locator')
12
- const ConnectionRefused = require('./errors/ConnectionRefused')
1
+ import * as webdriverio from 'webdriverio'
2
+ import fs from 'fs'
3
+ import axios from 'axios'
4
+ import { v4 as uuidv4 } from 'uuid'
5
+
6
+ import Webdriver from './WebDriver.js'
7
+ import AssertionFailedError from '../assert/error.js'
8
+ import { truth } from '../assert/truth.js'
9
+ import recorder from '../recorder.js'
10
+ import Locator from '../locator.js'
11
+ import ConnectionRefused from './errors/ConnectionRefused.js'
12
+ import ElementNotFound from './errors/ElementNotFound.js'
13
+ import { dontSeeElementError } from './errors/ElementAssertion.js'
13
14
 
14
15
  const mobileRoot = '//*'
15
16
  const webRoot = 'body'
@@ -181,7 +182,6 @@ class Appium extends Webdriver {
181
182
  this.appiumV2 = config.appiumV2 || true
182
183
  this.axios = axios.create()
183
184
 
184
- webdriverio = require('webdriverio')
185
185
  if (!config.appiumV2) {
186
186
  console.log('The Appium core team does not maintain Appium 1.x anymore since the 1st of January 2022. Appium 2.x is used by default.')
187
187
  console.log('More info: https://bit.ly/appium-v2-migration')
@@ -1549,11 +1549,9 @@ class Appium extends Webdriver {
1549
1549
  // For mobile native apps, use safe isDisplayed wrapper
1550
1550
  const parsedLocator = parseLocator.call(this, locator)
1551
1551
  const res = await this._locate(parsedLocator, false)
1552
- const { truth } = require('../assert/truth')
1553
- const Locator = require('../locator')
1554
1552
 
1555
1553
  if (!res || res.length === 0) {
1556
- return truth(`elements of ${new Locator(parsedLocator)}`, 'to be seen').negate(false)
1554
+ return truth(`elements of ${Locator.build(parsedLocator)}`, 'to be seen').negate(false)
1557
1555
  }
1558
1556
 
1559
1557
  const selected = []
@@ -1563,7 +1561,7 @@ class Appium extends Webdriver {
1563
1561
  }
1564
1562
 
1565
1563
  try {
1566
- return truth(`elements of ${new Locator(parsedLocator)}`, 'to be seen').negate(selected)
1564
+ return truth(`elements of ${Locator.build(parsedLocator)}`, 'to be seen').negate(selected)
1567
1565
  } catch (err) {
1568
1566
  throw err
1569
1567
  }
@@ -1714,10 +1712,6 @@ class Appium extends Webdriver {
1714
1712
  // For mobile native apps, use safe isDisplayed wrapper
1715
1713
  const parsedLocator = parseLocator.call(this, locator)
1716
1714
  const res = await this._locate(parsedLocator, true)
1717
- const ElementNotFound = require('./errors/ElementNotFound')
1718
- const { truth } = require('../assert/truth')
1719
- const { dontSeeElementError } = require('./errors/ElementAssertion')
1720
- const Locator = require('../locator')
1721
1715
 
1722
1716
  if (!res || res.length === 0) {
1723
1717
  throw new ElementNotFound(parsedLocator)
@@ -1730,7 +1724,7 @@ class Appium extends Webdriver {
1730
1724
  }
1731
1725
 
1732
1726
  try {
1733
- return truth(`elements of ${new Locator(parsedLocator)}`, 'to be seen').assert(selected)
1727
+ return truth(`elements of ${Locator.build(parsedLocator)}`, 'to be seen').assert(selected)
1734
1728
  } catch (e) {
1735
1729
  dontSeeElementError(parsedLocator)
1736
1730
  }
@@ -1784,7 +1778,6 @@ class Appium extends Webdriver {
1784
1778
  // For mobile native apps, use safe isDisplayed wrapper
1785
1779
  const parsedLocator = parseLocator.call(this, locator)
1786
1780
  const aSec = sec || this.options.waitForTimeoutInSeconds
1787
- const Locator = require('../locator')
1788
1781
 
1789
1782
  return this.browser.waitUntil(
1790
1783
  async () => {
@@ -1801,7 +1794,7 @@ class Appium extends Webdriver {
1801
1794
  },
1802
1795
  {
1803
1796
  timeout: aSec * 1000,
1804
- timeoutMsg: `element (${new Locator(parsedLocator)}) still not visible after ${aSec} sec`,
1797
+ timeoutMsg: `element (${Locator.build(parsedLocator)}) still not visible after ${aSec} sec`,
1805
1798
  },
1806
1799
  )
1807
1800
  }
@@ -1816,7 +1809,6 @@ class Appium extends Webdriver {
1816
1809
  // For mobile native apps, use safe isDisplayed wrapper
1817
1810
  const parsedLocator = parseLocator.call(this, locator)
1818
1811
  const aSec = sec || this.options.waitForTimeoutInSeconds
1819
- const Locator = require('../locator')
1820
1812
 
1821
1813
  return this.browser.waitUntil(
1822
1814
  async () => {
@@ -1831,7 +1823,7 @@ class Appium extends Webdriver {
1831
1823
 
1832
1824
  return selected.length === 0
1833
1825
  },
1834
- { timeout: aSec * 1000, timeoutMsg: `element (${new Locator(parsedLocator)}) still visible after ${aSec} sec` },
1826
+ { timeout: aSec * 1000, timeoutMsg: `element (${Locator.build(parsedLocator)}) still visible after ${aSec} sec` },
1835
1827
  )
1836
1828
  }
1837
1829
 
@@ -1908,4 +1900,4 @@ function onlyForApps(expectedPlatform) {
1908
1900
  }
1909
1901
  }
1910
1902
 
1911
- module.exports = Appium
1903
+ export default Appium
@@ -1,11 +1,11 @@
1
- const assert = require('assert')
2
- const path = require('path')
3
- const fs = require('fs')
1
+ import assert from 'assert'
2
+ import path from 'path'
3
+ import fs from 'fs'
4
4
 
5
- const Helper = require('@codeceptjs/helper')
6
- const { fileExists } = require('../utils')
7
- const { fileIncludes } = require('../assert/include')
8
- const { fileEquals } = require('../assert/equal')
5
+ import Helper from '@codeceptjs/helper'
6
+ import { fileExists } from '../utils.js'
7
+ import { fileIncludes } from '../assert/include.js'
8
+ import { fileEquals } from '../assert/equal.js'
9
9
 
10
10
  /**
11
11
  * Helper for testing filesystem.
@@ -38,7 +38,12 @@ class FileSystem extends Helper {
38
38
  }
39
39
 
40
40
  _before() {
41
- this.debugSection('Dir', this.dir)
41
+ try {
42
+ this.debugSection('Dir', this.dir)
43
+ } catch (e) {
44
+ // Fallback debug for ESM transition
45
+ console.log(`[Dir] ${this.dir}`)
46
+ }
42
47
  }
43
48
 
44
49
  /**
@@ -48,7 +53,12 @@ class FileSystem extends Helper {
48
53
  */
49
54
  amInPath(openPath) {
50
55
  this.dir = path.join(global.codecept_dir, openPath)
51
- this.debugSection('Dir', this.dir)
56
+ try {
57
+ this.debugSection('Dir', this.dir)
58
+ } catch (e) {
59
+ // Fallback debug for ESM transition
60
+ console.log(`[Dir] ${this.dir}`)
61
+ }
52
62
  }
53
63
 
54
64
  /**
@@ -66,7 +76,12 @@ class FileSystem extends Helper {
66
76
  */
67
77
  seeFile(name) {
68
78
  this.file = path.join(this.dir, name)
69
- this.debugSection('File', this.file)
79
+ try {
80
+ this.debugSection('File', this.file)
81
+ } catch (e) {
82
+ // Fallback debug for ESM transition
83
+ console.log(`[File] ${this.file}`)
84
+ }
70
85
  assert.ok(fileExists(this.file), `File ${name} not found in ${this.dir}`)
71
86
  }
72
87
 
@@ -86,7 +101,12 @@ class FileSystem extends Helper {
86
101
  if (sec === 0) assert.fail('Use `seeFile` instead of waiting 0 seconds!')
87
102
  const waitTimeout = sec * 1000
88
103
  this.file = path.join(this.dir, name)
89
- this.debugSection('File', this.file)
104
+ try {
105
+ this.debugSection('File', this.file)
106
+ } catch (e) {
107
+ // Fallback debug for ESM transition
108
+ console.log(`[File] ${this.file}`)
109
+ }
90
110
  return isFileExists(this.file, waitTimeout).catch(() => {
91
111
  throw new Error(`file (${name}) still not present in directory ${this.dir} after ${waitTimeout / 1000} sec`)
92
112
  })
@@ -179,7 +199,7 @@ class FileSystem extends Helper {
179
199
  }
180
200
  }
181
201
 
182
- module.exports = FileSystem
202
+ export { FileSystem as default }
183
203
 
184
204
  /**
185
205
  * @param {string} file
@@ -1,5 +1,5 @@
1
- const axios = require('axios').default
2
- const Helper = require('@codeceptjs/helper')
1
+ import axios from 'axios'
2
+ import HelperModule from '@codeceptjs/helper'
3
3
 
4
4
  /**
5
5
  * GraphQL helper allows to send additional requests to a GraphQl endpoint during acceptance tests.
@@ -227,4 +227,4 @@ class GraphQL extends Helper {
227
227
  this.haveRequestHeaders({ Authorization: `Bearer ${accessToken}` })
228
228
  }
229
229
  }
230
- module.exports = GraphQL
230
+ export default GraphQL
@@ -1,7 +1,7 @@
1
- const path = require('path')
1
+ import path from 'path'
2
2
 
3
- const Helper = require('@codeceptjs/helper')
4
- const GraphQL = require('./GraphQL')
3
+ import HelperModule from '@codeceptjs/helper'
4
+ import GraphQL from './GraphQL.js'
5
5
 
6
6
  /**
7
7
  * Helper for managing remote data using GraphQL queries.
@@ -305,4 +305,4 @@ class GraphQLDataFactory extends Helper {
305
305
  }
306
306
  }
307
307
 
308
- module.exports = GraphQLDataFactory
308
+ export default GraphQLDataFactory
@@ -1,6 +1,6 @@
1
- const Helper = require('@codeceptjs/helper')
2
- const assert = require('assert')
3
- const joi = require('joi')
1
+ import Helper from '@codeceptjs/helper'
2
+ import assert from 'assert'
3
+ import { z } from 'zod'
4
4
 
5
5
  /**
6
6
  * This helper allows performing assertions on JSON responses paired with following helpers:
@@ -83,14 +83,7 @@ class JSONResponse extends Helper {
83
83
  this.response = null
84
84
  }
85
85
 
86
- static _checkRequirements() {
87
- try {
88
- require('joi')
89
- } catch (e) {
90
- return ['joi']
91
- }
92
- }
93
-
86
+
94
87
  /**
95
88
  * Checks that response code is equal to the provided one
96
89
  *
@@ -302,28 +295,28 @@ class JSONResponse extends Helper {
302
295
  }
303
296
 
304
297
  /**
305
- * Validates JSON structure of response using [joi library](https://joi.dev).
306
- * See [joi API](https://joi.dev/api/) for complete reference on usage.
298
+ * Validates JSON structure of response using [Zod library](https://zod.dev).
299
+ * See [Zod API](https://zod.dev/) for complete reference on usage.
307
300
  *
308
- * Use pre-initialized joi instance by passing function callback:
301
+ * Use pre-initialized Zod instance by passing function callback:
309
302
  *
310
303
  * ```js
311
304
  * // response.data is { name: 'jon', id: 1 }
312
305
  *
313
- * I.seeResponseMatchesJsonSchema(joi => {
314
- * return joi.object({
315
- * name: joi.string(),
316
- * id: joi.number()
306
+ * I.seeResponseMatchesJsonSchema(z => {
307
+ * return z.object({
308
+ * name: z.string(),
309
+ * id: z.number()
317
310
  * })
318
311
  * });
319
312
  *
320
313
  * // or pass a valid schema
321
- * const joi = require('joi');
314
+ * import { z } from 'zod';
322
315
  *
323
- * I.seeResponseMatchesJsonSchema(joi.object({
324
- * name: joi.string(),
325
- * id: joi.number();
326
- * });
316
+ * I.seeResponseMatchesJsonSchema(z.object({
317
+ * name: z.string(),
318
+ * id: z.number()
319
+ * }));
327
320
  * ```
328
321
  *
329
322
  * @param {any} fnOrSchema
@@ -332,14 +325,17 @@ class JSONResponse extends Helper {
332
325
  this._checkResponseReady()
333
326
  let schema = fnOrSchema
334
327
  if (typeof fnOrSchema === 'function') {
335
- schema = fnOrSchema(joi)
328
+ schema = fnOrSchema(z)
336
329
  const body = fnOrSchema.toString()
337
330
  fnOrSchema.toString = () => `${body.split('\n')[1]}...`
338
331
  }
339
- if (!schema) throw new Error('Empty Joi schema provided, see https://joi.dev/ for details')
340
- if (!joi.isSchema(schema)) throw new Error('Invalid Joi schema provided, see https://joi.dev/ for details')
341
- schema.toString = () => schema.describe()
342
- joi.assert(this.response.data, schema)
332
+ if (!schema) throw new Error('Empty Zod schema provided, see https://zod.dev/ for details')
333
+ if (!(schema instanceof z.ZodType)) throw new Error('Invalid Zod schema provided, see https://zod.dev/ for details')
334
+ schema.toString = () => schema._def.description || JSON.stringify(schema._def)
335
+ const result = schema.parse(this.response.data)
336
+ if (!result) {
337
+ throw new Error('Schema validation failed')
338
+ }
343
339
  }
344
340
 
345
341
  _checkResponseReady() {
@@ -376,4 +372,4 @@ class JSONResponse extends Helper {
376
372
  }
377
373
  }
378
374
 
379
- module.exports = JSONResponse
375
+ export { JSONResponse as default }
@@ -1,9 +1,10 @@
1
1
  let currentTest
2
2
  let currentSuite
3
3
 
4
- const Helper = require('@codeceptjs/helper')
5
- const { clearString } = require('../utils')
6
- const { testToFileName } = require('../mocha/test')
4
+ import Helper from '@codeceptjs/helper'
5
+ import { createRequire } from 'module'
6
+ import { clearString } from '../utils.js'
7
+ import { testToFileName } from '../mocha/test.js'
7
8
 
8
9
  class Mochawesome extends Helper {
9
10
  constructor(config) {
@@ -15,6 +16,8 @@ class Mochawesome extends Helper {
15
16
  disableScreenshots: false,
16
17
  }
17
18
 
19
+ // ESM-compatible require for CommonJS module
20
+ const require = createRequire(import.meta.url)
18
21
  this._addContext = require('mochawesome/addContext')
19
22
 
20
23
  this._createConfig(config)
@@ -90,4 +93,4 @@ class Mochawesome extends Helper {
90
93
  }
91
94
  }
92
95
 
93
- module.exports = Mochawesome
96
+ export default Mochawesome