diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4ad428c99c1..d3f0dea2c8d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -19,8 +19,6 @@ updates: - dependency-name: "@cucumber/cucumber" - dependency-name: "jsdom" - dependency-name: "pretty-ms" - - dependency-name: "@puppeteer/browsers" - - dependency-name: "inquirer" - package-ecosystem: npm directory: "/" target-branch: v7 @@ -52,6 +50,7 @@ updates: - dependency-name: "tempy" - dependency-name: "rimraf" - dependency-name: "inquirer" + - dependency-name: "url-join" - dependency-name: "camelcase" - dependency-name: "pretty-ms" - dependency-name: "dateformat" diff --git a/.github/workflows/expense.yml b/.github/workflows/expense.yml index c9ca359e7bb..b53763dd277 100644 --- a/.github/workflows/expense.yml +++ b/.github/workflows/expense.yml @@ -52,11 +52,19 @@ jobs: needs: [authorize] runs-on: ubuntu-latest steps: - - name: Run Expense Flow - uses: webdriverio/expense-action@v1 + - uses: actions/checkout@v4 + with: + ref: 'main' + fetch-depth: 0 + - uses: actions/setup-node@v4 with: - prNumber: ${{ github.event.inputs.prNumber }} - amount: ${{ github.event.inputs.amount }} + node-version: 20.x + - name: Install Dependencies + run: npm ci + - name: Run Expense Flow + run: npm run sendExpenseMail env: + PR_NUMBER: ${{ github.event.inputs.prNumber }} + AMOUNT: ${{ github.event.inputs.amount }} RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }} GH_TOKEN: ${{ secrets.WDIO_BOT_GITHUB_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 762c89f46ba..2a4c49192b5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -69,7 +69,7 @@ jobs: - name: Lint / Typings / Unit / Smoke / Component Tests run: npm run test - name: E2E Protocol Tests - uses: nick-fields/retry@v3 + uses: nick-fields/retry@v2 with: timeout_minutes: 20 max_attempts: 3 @@ -105,7 +105,7 @@ jobs: env: GITHUB_AUTH: ${{ secrets.GITHUB_TOKEN }} - name: E2E Protocol Tests - uses: nick-fields/retry@v3 + uses: nick-fields/retry@v2 with: timeout_minutes: 20 max_attempts: 3 diff --git a/BACKERS.md b/BACKERS.md index 4c5401e7cf3..fd0c2608921 100644 --- a/BACKERS.md +++ b/BACKERS.md @@ -3,7 +3,6 @@ WebdriverIO is an MIT-licensed open-source project with its ongoing development made possible entirely by the support of the awesome sponsors and backers listed in this file. If you'd like to join them, please consider sponsoring WebdriverIO's development through: - [OpenCollective](https://opencollective.com/webdriverio) -- [GitHub Sponsors](https://github.com/sponsors/webdriverio) - [Tidelift](https://www.tidelift.com/) or - via donating to individual contributor: [@christian-bromann](https://github.com/sponsors/christian-bromann) @@ -16,27 +15,21 @@ We would like to thank ❤️🙏 all our Bakers and sponsors: We are immensely grateful to our exclusive Premium Sponsor for their invaluable support in the development of this project:

- BrowserStack -       - Sauce Labs + BrowserStack

### 🥇 Gold Sponsor -[Become a Gold Sponsor](https://github.com/sponsors/christian-bromann/sponsorships?tier_id=303973&preview=false) +[Become a Gold Sponsor](https://github.com/sponsors/christian-bromann/sponsorships?sponsor=christian-bromann&tier_id=303973&preview=false) ### 🥈 Silver Sponsor

- Lambdatest + Lambdatest

-[Become a Silver Sponsor](https://github.com/sponsors/christian-bromann/sponsorships?tier_id=303966&preview=false) +[Become a Silver Sponsor](https://github.com/sponsors/christian-bromann/sponsorships?sponsor=christian-bromann&tier_id=303966&preview=false) ### 🥉 Bronze Sponsor -

- Eslint -

- -[Become a Bronze Sponsor](https://github.com/sponsors/christian-bromann/sponsorships?tier_id=303965&preview=false) +[Become a Bronze Sponsor](https://github.com/sponsors/christian-bromann/sponsorships?sponsor=christian-bromann&tier_id=303965&preview=false) diff --git a/CHANGELOG.md b/CHANGELOG.md index f04b81e0c66..1dad6f03658 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,178 +21,6 @@ See [CHANGELOG - v7](https://github.com/webdriverio/webdriverio/blob/v7/CHANGELO --- -## v8.32.1 (2024-02-16) - -#### :bug: Bug Fix -* `wdio-browserstack-service` - * [#12249](https://github.com/webdriverio/webdriverio/pull/12249) (@wdio/wdio-browserstack-service) fix: add filename in app upload formData ([@innovater21](https://github.com/innovater21)) - -#### Committers: 1 -- Abhishek Jha ([@innovater21](https://github.com/innovater21)) - - -## v8.32.0 (2024-02-14) - -#### :boom: Breaking Change -* `wdio-protocols` - * [#12209](https://github.com/webdriverio/webdriverio/pull/12209) feat: remove appium commands ([@wswebcreation](https://github.com/wswebcreation)) - -#### :bug: Bug Fix -* `wdio-browserstack-service` - * [#12210](https://github.com/webdriverio/webdriverio/pull/12210) fix: WDIO Cucumber Test Tags ([@sauravdas1997](https://github.com/sauravdas1997)) - * [#12204](https://github.com/webdriverio/webdriverio/pull/12204) Added null check on fetching capabilities ([@sriteja777](https://github.com/sriteja777)) - -#### :nail_care: Polish -* `wdio-cli` - * [#12247](https://github.com/webdriverio/webdriverio/pull/12247) (@wdio/cli): replace base url question with visual testing support question in configurator wizard ([@christian-bromann](https://github.com/christian-bromann)) - -#### :memo: Documentation -* Other - * [#12207](https://github.com/webdriverio/webdriverio/pull/12207) update Frameworks.md and remove 's' from cucumber option 'names' to '… ([@rajivnw](https://github.com/rajivnw)) - * [#12228](https://github.com/webdriverio/webdriverio/pull/12228) chore: update default baseline for visual tests ([@wswebcreation](https://github.com/wswebcreation)) -* `webdriverio` - * [#12226](https://github.com/webdriverio/webdriverio/pull/12226) [Docs] moveTo docs updated ([@M-Hammad-Faisal](https://github.com/M-Hammad-Faisal)) - -#### :house: Internal -* [#12232](https://github.com/webdriverio/webdriverio/pull/12232) (internal): replace expense workflow with custom action ([@christian-bromann](https://github.com/christian-bromann)) - -#### Committers: 6 -- Christian Bromann ([@christian-bromann](https://github.com/christian-bromann)) -- Muhammad Hammad Faisal ([@M-Hammad-Faisal](https://github.com/M-Hammad-Faisal)) -- Sriteja Sugoor ([@sriteja777](https://github.com/sriteja777)) -- Wim Selles ([@wswebcreation](https://github.com/wswebcreation)) -- [@rajivnw](https://github.com/rajivnw) -- [@sauravdas1997](https://github.com/sauravdas1997) - - -## v8.31.1 (2024-02-09) - -#### :bug: Bug Fix -* `webdriverio` - * [#12200](https://github.com/webdriverio/webdriverio/pull/12200) (webdriverio): don't fail getContext is not supported, e.g. using Tizen TV driver ([@christian-bromann](https://github.com/christian-bromann)) -* `wdio-browser-runner` - * [#12198](https://github.com/webdriverio/webdriverio/pull/12198) (@wdio/browser-runner): fix scope propagation for not found elements ([@christian-bromann](https://github.com/christian-bromann)) -* `wdio-cli` - * [#12199](https://github.com/webdriverio/webdriverio/pull/12199) (@wdio/cli): ensure ts-node is installed if tsconfig.json is found ([@christian-bromann](https://github.com/christian-bromann)) - -#### :nail_care: Polish -* `wdio-cli`, `wdio-config`, `wdio-types` - * [#11992](https://github.com/webdriverio/webdriverio/pull/11992) feat(wdio-prefix): introduce `wdio:{maxInstances,specs,exclude}` to WebdriverIO.Capabilities ([@vobu](https://github.com/vobu)) - -#### Committers: 2 -- Christian Bromann ([@christian-bromann](https://github.com/christian-bromann)) -- Volker Buzek ([@vobu](https://github.com/vobu)) - - -## v8.31.0 (2024-02-07) - -#### :nail_care: Polish -* `wdio-browser-runner`, `wdio-cli`, `wdio-globals`, `wdio-jasmine-framework`, `wdio-runner`, `wdio-types` - * [#12189](https://github.com/webdriverio/webdriverio/pull/12189) (@wdio/cli): allow to define path for snapshot file ([@christian-bromann](https://github.com/christian-bromann)) - -#### :memo: Documentation -* [#12186](https://github.com/webdriverio/webdriverio/pull/12186) File Downloads Best Practices ([@M-Hammad-Faisal](https://github.com/M-Hammad-Faisal)) - -#### Committers: 2 -- Christian Bromann ([@christian-bromann](https://github.com/christian-bromann)) -- Muhammad Hammad Faisal ([@M-Hammad-Faisal](https://github.com/M-Hammad-Faisal)) - - -## v8.30.0 (2024-02-06) - -#### :rocket: New Feature -* `devtools`, `wdio-utils`, `webdriver`, `webdriverio` - * [#12147](https://github.com/webdriverio/webdriverio/pull/12147) (webdriverio): allow to define new capabilities when calling `reloadSession ([@christian-bromann](https://github.com/christian-bromann)) - -#### :bug: Bug Fix -* `wdio-browser-runner`, `wdio-globals`, `wdio-jasmine-framework`, `wdio-junit-reporter`, `wdio-runner`, `wdio-types` - * [#12184](https://github.com/webdriverio/webdriverio/pull/12184) (@wdio/browser-runner): allow services and other hooks to register custom matcher ([@christian-bromann](https://github.com/christian-bromann)) - -#### :nail_care: Polish -* `wdio-types`, `webdriver` - * [#12146](https://github.com/webdriverio/webdriverio/pull/12146) (webdriver): have a more reliable way to shut down attached session driver ([@christian-bromann](https://github.com/christian-bromann)) - -#### :memo: Documentation -* [#12148](https://github.com/webdriverio/webdriverio/pull/12148) feat: add native app compare docs ([@wswebcreation](https://github.com/wswebcreation)) - -#### Committers: 2 -- Christian Bromann ([@christian-bromann](https://github.com/christian-bromann)) -- Wim Selles ([@wswebcreation](https://github.com/wswebcreation)) - - -## v8.29.7 (2024-02-02) - -#### :rocket: New Feature -* `wdio-cli`, `wdio-spec-reporter` - * [#12092](https://github.com/webdriverio/webdriverio/pull/12092) (@wdio/spec-reporter): introduce `color` option to disable colors for spec reporter ([@M-Hammad-Faisal](https://github.com/M-Hammad-Faisal)) - -#### :bug: Bug Fix -* `wdio-protocols` - * [#12141](https://github.com/webdriverio/webdriverio/pull/12141) fix upload file in selenium 4 ([@lacell75](https://github.com/lacell75)) - -#### :nail_care: Polish -* `wdio-browser-runner`, `webdriverio` - * [#12145](https://github.com/webdriverio/webdriverio/pull/12145) (@wdio/browser-runner): document stencil component testing integration better ([@christian-bromann](https://github.com/christian-bromann)) - -#### Committers: 3 -- Christian Bromann ([@christian-bromann](https://github.com/christian-bromann)) -- Fabien CELLIER ([@lacell75](https://github.com/lacell75)) -- Muhammad Hammad Faisal ([@M-Hammad-Faisal](https://github.com/M-Hammad-Faisal)) - - -## v8.29.5 (2024-02-01) - -#### :bug: Bug Fix -* `wdio-browser-runner`, `wdio-runner` - * [#12140](https://github.com/webdriverio/webdriverio/pull/12140) (@wdio/browser-runner): improved stencil test integration ([@christian-bromann](https://github.com/christian-bromann)) - -#### Committers: 1 -- Christian Bromann ([@christian-bromann](https://github.com/christian-bromann)) - - -## v8.29.4 (2024-01-31) - -#### :bug: Bug Fix -* `wdio-appium-service` - * [#12137](https://github.com/webdriverio/webdriverio/pull/12137) Fix Bug#12134 adding a step to clean the buffer after first log. ([@lararojasmr](https://github.com/lararojasmr)) - -#### Committers: 1 -- Manuel Lara ([@lararojasmr](https://github.com/lararojasmr)) - - -## v8.29.3 (2024-01-30) - -#### :rocket: New Feature -* `wdio-config` - * [#12077](https://github.com/webdriverio/webdriverio/pull/12077) Feat: Add free text search to '--exclude' param ([@tech-dm-klymenko](https://github.com/tech-dm-klymenko)) - -#### :bug: Bug Fix -* `wdio-allure-reporter` - * [#12129](https://github.com/webdriverio/webdriverio/pull/12129) Fix problem with tests which had been finished before the parent suite finished ([@epszaw](https://github.com/epszaw)) -* `wdio-appium-service` - * [#12095](https://github.com/webdriverio/webdriverio/pull/12095) Bug #12094 - Fix _appiumStart method ([@lararojasmr](https://github.com/lararojasmr)) -* `wdio-spec-reporter` - * [#12044](https://github.com/webdriverio/webdriverio/pull/12044) Issue 11996: Not skip duplicate steps ([@perillai](https://github.com/perillai)) - -#### :nail_care: Polish -* `devtools` - * [#12127](https://github.com/webdriverio/webdriverio/pull/12127) update ua-parser-js for ReDoS ([@smarkows](https://github.com/smarkows)) - -#### :memo: Documentation -* `webdriverio` - * [#12131](https://github.com/webdriverio/webdriverio/pull/12131) Missing ' in $ example ([@Meeeee3443](https://github.com/Meeeee3443)) - * [#12124](https://github.com/webdriverio/webdriverio/pull/12124) (docs): partnership with BrowserStack ([@christian-bromann](https://github.com/christian-bromann)) - -#### Committers: 7 -- Christian Bromann ([@christian-bromann](https://github.com/christian-bromann)) -- Dmytro Klymenko ([@tech-dm-klymenko](https://github.com/tech-dm-klymenko)) -- Konstantin Epishev ([@epszaw](https://github.com/epszaw)) -- Manuel Lara ([@lararojasmr](https://github.com/lararojasmr)) -- Perillai ([@perillai](https://github.com/perillai)) -- Simon Markowski ([@smarkows](https://github.com/smarkows)) -- [@Meeeee3443](https://github.com/Meeeee3443) - - ## v8.29.2 (2024-01-26) #### 🐛 Bug Fix @@ -752,10 +580,6 @@ See [CHANGELOG - v7](https://github.com/webdriverio/webdriverio/blob/v7/CHANGELO ## v8.21.0 (2023-11-02) -#### :boom: Breaking Change -* `webdriverio` - * [#11529](https://github.com/webdriverio/webdriverio/pull/11529) changed moveTo to like it's been implemented in click ([@udarrr](https://github.com/udarrr)) - #### :bug: Bug Fix * `webdriverio` * [#11537](https://github.com/webdriverio/webdriverio/pull/11537) Fix name selector to allow other characters ([@aristotelos](https://github.com/aristotelos)) @@ -768,6 +592,8 @@ See [CHANGELOG - v7](https://github.com/webdriverio/webdriverio/blob/v7/CHANGELO #### :nail_care: Polish * `wdio-browserstack-service` * [#11488](https://github.com/webdriverio/webdriverio/pull/11488) [browserstack-service] Add more CIs ([@samarsault](https://github.com/samarsault)) +* `webdriverio` + * [#11529](https://github.com/webdriverio/webdriverio/pull/11529) changed moveTo to like it's been implemented in click ([@udarrr](https://github.com/udarrr)) * `wdio-types`, `wdio-utils` * [#11509](https://github.com/webdriverio/webdriverio/pull/11509) (@wdio/utils): Add envDetector for browserstack ([@Pi-fe](https://github.com/Pi-fe)) diff --git a/GOVERNANCE.md b/GOVERNANCE.md index ddbc17bd3de..618601d0ed9 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -215,7 +215,6 @@ The project currently contributes back to the following collectives: - [Eslint](https://opencollective.com/eslint) - [typescript-eslint](https://opencollective.com/typescript-eslint) - [Vitest](https://opencollective.com/vitest) -- [Mocha](https://opencollective.com/mochajs) - [Vite](https://opencollective.com/vite) - [Jest](https://opencollective.com/jest) - [Husky](https://opencollective.com/husky) diff --git a/README.md b/README.md index d8577ff06ad..109f86186b2 100644 --- a/README.md +++ b/README.md @@ -162,21 +162,13 @@ Does your company use WebdriverIO? Ask your manager or marketing team if your co We are immensely grateful to our exclusive Premium Sponsor for their invaluable support in the development of this project:

- BrowserStack -       - Sauce Labs + BrowserStack

### 🥈 Silver Sponsor

- Lambdatest -

- -### 🥉 Bronze Sponsor - -

- Eslint + Lambdatest

## :page_facing_up: License diff --git a/__mocks__/@wdio/reporter.ts b/__mocks__/@wdio/reporter.ts index 13de770fedc..c1829fea6f8 100644 --- a/__mocks__/@wdio/reporter.ts +++ b/__mocks__/@wdio/reporter.ts @@ -1,11 +1,10 @@ import { vi } from 'vitest' import { EventEmitter } from 'node:events' -import HookStats from '../../packages/wdio-reporter/src/stats/hook.ts' -import RunnerStats from '../../packages/wdio-reporter/src/stats/runner.ts' -import SuiteStats from '../../packages/wdio-reporter/src/stats/suite.ts' -import TestStats from '../../packages/wdio-reporter/src/stats/test.ts' -import { Chalk } from '../chalk.ts' +import HookStats from '../../packages/wdio-reporter/src/stats/hook' +import RunnerStats from '../../packages/wdio-reporter/src/stats/runner' +import SuiteStats from '../../packages/wdio-reporter/src/stats/suite' +import TestStats from '../../packages/wdio-reporter/src/stats/test' export default class WDIOReporter extends EventEmitter { outputStream: { write: Function } @@ -23,7 +22,6 @@ export default class WDIOReporter extends EventEmitter { failures: number } retries: number - _chalk: Chalk runnerStat?: RunnerStats constructor (public options: any) { super() @@ -43,7 +41,6 @@ export default class WDIOReporter extends EventEmitter { failures: 0 } this.retries = 0 - this._chalk = new Chalk(!options.color ? { level : 0 } : {}) } get isSynchronised () { @@ -82,4 +79,4 @@ export default class WDIOReporter extends EventEmitter { onRunnerEnd () {} } -export { HookStats, RunnerStats, SuiteStats, TestStats } +export { HookStats, RunnerStats, SuiteStats, TestStats } \ No newline at end of file diff --git a/__mocks__/@wdio/utils/node.ts b/__mocks__/@wdio/utils/node.ts index 8c1cc610e45..c934400adfc 100644 --- a/__mocks__/@wdio/utils/node.ts +++ b/__mocks__/@wdio/utils/node.ts @@ -1,4 +1,3 @@ import { vi } from 'vitest' export const canAccess = vi.fn() -export const startWebDriver = vi.fn().mockResolvedValue({ pid: 42 }) diff --git a/__mocks__/chalk.ts b/__mocks__/chalk.ts index c7b3e518676..c212fd8f61d 100644 --- a/__mocks__/chalk.ts +++ b/__mocks__/chalk.ts @@ -1,33 +1,26 @@ import { vi } from 'vitest' -class Chalk { - supportsColor = { hasBasic: true } +const chalkMock: any = {} +chalkMock.cyanBright = vi.fn().mockImplementation((msg) => `cyanBright ${msg}`) +chalkMock.greenBright = vi.fn().mockImplementation((msg) => `greenBright ${msg}`) +chalkMock.whiteBright = vi.fn().mockImplementation((msg) => `whiteBright ${msg}`) +chalkMock.redBright = vi.fn().mockImplementation((msg) => `redBright ${msg}`) +chalkMock.cyan = vi.fn().mockImplementation((msg) => `cyan ${msg}`) +chalkMock.blue = vi.fn().mockImplementation((msg) => `blue ${msg}`) +chalkMock.grey = vi.fn().mockImplementation((msg) => `grey ${msg}`) +chalkMock.green = vi.fn().mockImplementation((msg) => `green ${msg}`) +chalkMock.red = vi.fn().mockImplementation((...msg: string[]) => `red ${msg.join(' ')}`) +chalkMock.gray = vi.fn().mockImplementation((...msg: string[]) => `gray ${msg.join(' ')}`) +chalkMock.black = vi.fn().mockImplementation((msg) => `black ${msg}`) +chalkMock.white = chalkMock +chalkMock.yellow = vi.fn().mockImplementation((...msg: string[]) => `yellow ${msg.join(' ')}`) +chalkMock.magenta = vi.fn().mockImplementation((msg) => `magenta ${msg}`) +chalkMock.bgGreen = vi.fn().mockImplementation((msg) => `bgGreen ${msg}`) +chalkMock.dim = vi.fn().mockImplementation((msg) => `dim ${msg}`) +chalkMock.supportsColor = { hasBasic: true } +chalkMock.bgYellow = chalkMock +chalkMock.bgRed = chalkMock +chalkMock.bold = function (msg: string) { return `bold ${msg}` } +chalkMock.bold.__proto__ = chalkMock - private color = true - constructor(options:{level?:number}){ - this.color = options.level === 0 ? false : this.color - } - - bold(msg: string) { return `bold ${msg}` } - bgYellow(msg: string) { return `bgYellow ${msg}` } - bgRed(msg: string) { return `bgRed ${msg}` } - cyanBright = vi.fn().mockImplementation((msg) => this.color ? `cyanBright ${msg}` : msg) - greenBright = vi.fn().mockImplementation((msg) => this.color ? `greenBright ${msg}` : msg) - whiteBright = vi.fn().mockImplementation((msg) => this.color ? `whiteBright ${msg}` : msg) - redBright = vi.fn().mockImplementation((msg) => this.color ? `redBright ${msg}` : msg) - cyan = vi.fn().mockImplementation((msg) => this.color ? `cyan ${msg}` : msg) - white = vi.fn().mockImplementation((msg) => this.color ? `white ${msg}` : msg) - blue = vi.fn().mockImplementation((msg) => this.color ? `blue ${msg}` : msg) - grey = vi.fn().mockImplementation((msg) => this.color ? `grey ${msg}` : msg) - green = vi.fn().mockImplementation((msg) => this.color ? `green ${msg}` : msg) - red = vi.fn().mockImplementation((...msg: string[]) => this.color ? `red ${msg.join(' ')}` : msg.join(' ')) - gray = vi.fn().mockImplementation((...msg: string[]) => this.color ? `gray ${msg.join(' ')}` : msg.join(' ')) - black = vi.fn().mockImplementation((msg) => this.color ? `black ${msg}` : msg) - yellow = vi.fn().mockImplementation((...msg: string[]) => this.color ? `yellow ${msg.join(' ')}` : msg.join(' ')) - magenta = vi.fn().mockImplementation((msg) => this.color ? `magenta ${msg}` : msg) - bgGreen = vi.fn().mockImplementation((msg) => this.color ? `bgGreen ${msg}` : msg) - dim = vi.fn().mockImplementation((msg) => this.color ? `dim ${msg}` : msg) -} - -export default new Chalk({}) -export { Chalk } +export default chalkMock diff --git a/__mocks__/expect-webdriverio.ts b/__mocks__/expect-webdriverio.ts index 5b60f1afafe..835d43cbf49 100644 --- a/__mocks__/expect-webdriverio.ts +++ b/__mocks__/expect-webdriverio.ts @@ -2,5 +2,4 @@ import { vi } from 'vitest' process.env.WDIO_ASSERTION_LIB_ACTIVATED = '1' const setOptions = vi.fn() const expect = vi.fn() -const matchers = new Map() -export { setOptions, expect, matchers } +export { setOptions, expect } diff --git a/e2e/attach.test.ts b/e2e/attach.test.ts index d625dafae69..28f3d8566ee 100644 --- a/e2e/attach.test.ts +++ b/e2e/attach.test.ts @@ -23,8 +23,4 @@ test('allow to attach to an existing session', async () => { expect(await otherBrowser.getTitle()).toBe('WebdriverJS Testpage') await otherBrowser.deleteSession() - - const error = await browser.status().catch((err) => err) - expect(error.message).not.toBe('ChromeDriver ready for new sessions.') - expect(error.message).toEqual(expect.stringContaining('ECONNREFUSED')) }) diff --git a/e2e/browser-runner/components/StencilComponentNoShadow.tsx b/e2e/browser-runner/components/StencilComponentNoShadow.tsx deleted file mode 100644 index 7161914a415..00000000000 --- a/e2e/browser-runner/components/StencilComponentNoShadow.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { Component } from '@stencil/core' - -@Component({ - tag: 'no-shadow-component' -}) -export class NoShadowComponent { - render() { - return ( - <> - Hello World! - - ) - } -} diff --git a/e2e/browser-runner/lit.test.js b/e2e/browser-runner/lit.test.js index 6f4756cc9c8..317ce222948 100644 --- a/e2e/browser-runner/lit.test.js +++ b/e2e/browser-runner/lit.test.js @@ -73,15 +73,6 @@ describe('Lit Component testing', () => { expect(await innerElem.getText()).toBe('Hello Sir, WebdriverIO! Does this work?') }) - it('does not stale on elements not found', async () => { - const start = Date.now() - await expect($('non-existing-element')).not.toBePresent() - await expect($('non-existing-element')).not.toBeDisplayed() - await expect(await $('non-existing-element')).not.toBePresent() - await expect(await $('non-existing-element')).not.toBeDisplayed() - expect(Date.now() - start).toBeLessThan(1000) - }) - it('should support snapshot testing', async () => { render( html``, @@ -90,7 +81,7 @@ describe('Lit Component testing', () => { const elem = $('simple-greeting') await expect(elem).toMatchSnapshot() - await expect(elem).toMatchInlineSnapshot('""') + await expect(elem).toMatchInlineSnapshot(`""`) await expect(elem.getCSSProperty('background-color')).toMatchSnapshot() await expect(elem.getCSSProperty('background-color')).toMatchInlineSnapshot(` { @@ -327,19 +318,6 @@ describe('Lit Component testing', () => { expect(await browser.someCustomCommand()).toBe('Hello World') }) - it('supports custom matchers added by services', async () => { - await expect('foo').toBeFoo() - - let error - try { - await expect('bar').toBeFoo() - } catch (err) { - error = err - } - - expect(error.message).toBe('expected bar to be foo') - }) - describe('a11y selectors', () => { it('aria label is received from element content', async () => { // https://www.w3.org/TR/accname-1.1/#step2B diff --git a/e2e/browser-runner/stencil.test.tsx b/e2e/browser-runner/stencil.test.tsx index 92c4a53f755..ea423d1c6c0 100644 --- a/e2e/browser-runner/stencil.test.tsx +++ b/e2e/browser-runner/stencil.test.tsx @@ -1,13 +1,12 @@ -import { $, browser, expect } from '@wdio/globals' -import { render, waitForChanges } from '@wdio/browser-runner/stencil' +import { $, expect } from '@wdio/globals' +import { render } from '@wdio/browser-runner/stencil' import { AppProfile } from './components/StencilComponent.jsx' import { NestedComponent } from './components/StencilComponentNested.jsx' -import { NoShadowComponent } from './components/StencilComponentNoShadow.jsx' describe('Stencil Component Testing', () => { it('should render component correctly', async () => { - const page = render({ + render({ components: [AppProfile, NestedComponent], autoApplyChanges: true, template: () => ( @@ -15,12 +14,6 @@ describe('Stencil Component Testing', () => { ) }) - - expect(page.container.tagName.toLowerCase()).toBe('stencil-stage') - expect(page.root.tagName.toLowerCase()).toBe('app-profile') - expect(typeof (await page.$container).elementId).toBe('string') - expect(typeof (await page.$root).elementId).toBe('string') - await expect($('>>>.app-profile')).toHaveText( expect.stringContaining('Hello! My name is Stencil.') ) @@ -28,7 +21,8 @@ describe('Stencil Component Testing', () => { /** * this assertion for Safari due to: https://github.com/w3c/webdriver/issues/1786 */ - if (browser.capabilities.browserName?.toLowerCase() !== 'safari') { + // eslint-disable-next-line no-undef + if ((browser.capabilities as WebdriverIO.Capabilities).browserName?.toLowerCase() !== 'safari') { await expect($('>>>.app-profile')).toHaveText( expect.stringContaining('I am a nested component!') ) @@ -48,52 +42,4 @@ describe('Stencil Component Testing', () => { } `) }) - - it('can determine root if rendered somewhere nested', async () => { - const page = render({ - components: [AppProfile, NestedComponent], - template: () => ( -
-
- {/* @ts-ignore: types don't exist as we don't compile the components with Stencil */} - -
-
- ) - }) - - expect(page.root.tagName.toLowerCase()).toBe('app-profile') - expect(page.root.parentElement?.parentElement?.parentElement?.tagName.toLowerCase()).toBe('stencil-stage') - }) - - it('can render via html', async () => { - const page = render({ - components: [NestedComponent], - html: '' - }) - - await expect(page.$root.$('>>> i')).toHaveText('I am a unknown!') - }) - - it('can wait for changes', async () => { - const page = render({ - components: [NoShadowComponent], - html: '' - }) - - expect(page.root.outerHTML).toBe('') - await waitForChanges() - expect(page.root.outerHTML).toBe('Hello World!') - }) - - it('can unmount', async () => { - const page = render({ - components: [NestedComponent], - html: '' - }) - - await expect(page.root).toBeExisting() - page.unmount() - await expect(page.root).not.toBeExisting() - }) }) diff --git a/e2e/browser-runner/wdio.conf.js b/e2e/browser-runner/wdio.conf.js index 83566a4f670..5083b849ef2 100644 --- a/e2e/browser-runner/wdio.conf.js +++ b/e2e/browser-runner/wdio.conf.js @@ -2,7 +2,6 @@ import os from 'node:os' import url from 'node:url' import path from 'node:path' import { loadEnv } from 'vite' -import { expect } from '@wdio/globals' const isMac = os.platform() === 'darwin' && process.env.CI const isWindows = os.platform() === 'win32' @@ -66,28 +65,6 @@ export const config = { require: ['./__fixtures__/setup.js'] }, - /** - * in order to test custom matchers added by services, we push a service instance - * to the service list - */ - services: [[{ - before() { - expect.extend({ - toBeFoo(received) { - return received === 'foo' - ? { - message: () => `expected ${received} not to be foo`, - pass: true - } - : { - message: () => `expected ${received} to be foo`, - pass: false - } - } - }) - } - }, {}]], - before: () => { /** * only run this test in lit diff --git a/e2e/wdio/headless/test.e2e.ts b/e2e/wdio/headless/test.e2e.ts index a0c7390f831..83752cc6a54 100644 --- a/e2e/wdio/headless/test.e2e.ts +++ b/e2e/wdio/headless/test.e2e.ts @@ -4,16 +4,13 @@ describe('main suite 1', () => { it('foobar test', async () => { const browserName = (browser.capabilities as WebdriverIO.Capabilities).browserName await browser.url('http://guinea-pig.webdriver.io/') - - const actualUA = (await $('#useragent').getText()).toLowerCase() - const expectedUA = browserName ? browserName.replace(' ', '').replace('-headless-shell', '') : browserName - await expect(actualUA).toContain(expectedUA) + await expect((await $('#useragent').getText()).toLowerCase()).toContain(browserName ? browserName.replace(' ', '') : browserName) }) it('supports snapshot testing', async () => { await browser.url('http://guinea-pig.webdriver.io/') await expect($('.findme')).toMatchSnapshot() - await expect($('.findme')).toMatchInlineSnapshot('"

Test CSS Attributes

"') + await expect($('.findme')).toMatchInlineSnapshot(`"

Test CSS Attributes

"`) }) it('should allow to check for PWA', async () => { @@ -294,22 +291,9 @@ describe('main suite 1', () => { } }) - describe('reloadSession', () => { - it('can reload a session', async () => { - const sessionId = browser.sessionId - await browser.reloadSession() - expect(browser.sessionId).not.toBe(sessionId) - }) - - it('can reload a session with new capabilities', async () => { - expect((browser.capabilities as WebdriverIO.Capabilities).browserName).toBe('chrome-headless-shell') - await browser.reloadSession({ - browserName: 'edge', - 'ms:edgeOptions': { - args: ['headless', 'disable-gpu'] - } - }) - expect((browser.capabilities as WebdriverIO.Capabilities).browserName).toBe('edge-headless-shell') - }) + it('can reload a session', async () => { + const sessionId = browser.sessionId + await browser.reloadSession() + expect(browser.sessionId).not.toBe(sessionId) }) }) diff --git a/e2e/wdio/wdio.conf.ts b/e2e/wdio/wdio.conf.ts index 12218db197d..0a6b059768a 100644 --- a/e2e/wdio/wdio.conf.ts +++ b/e2e/wdio/wdio.conf.ts @@ -17,9 +17,7 @@ export const config: Options.Testrunner = { capabilities: [{ browserName: 'chrome', browserVersion: 'stable', - 'goog:chromeOptions': { - args: ['headless', 'disable-gpu'] - } + 'wdio:devtoolsOptions': { headless: true, dumpio: true } }], bail: 1, services: ['devtools'], diff --git a/examples/wdio/vite-vue-example/package.json b/examples/wdio/vite-vue-example/package.json index 5f6c09250e2..321d0caf4e6 100644 --- a/examples/wdio/vite-vue-example/package.json +++ b/examples/wdio/vite-vue-example/package.json @@ -17,7 +17,7 @@ "@testing-library/vue": "^8.0.1", "@types/mocha": "^10.0.6", "@vitejs/plugin-vue": "^5.0.3", - "expect-webdriverio": "^4.11.2", + "expect-webdriverio": "^4.9.3", "mocha": "^10.2.0", "typescript": "^5.3.3", "vite": "^5.0.12", diff --git a/lerna.json b/lerna.json index 1e7065ab9f4..63a389417b0 100644 --- a/lerna.json +++ b/lerna.json @@ -3,7 +3,7 @@ "packages": [ "packages/*" ], - "version": "8.32.1", + "version": "8.29.2", "command": { "bootstrap": { "npmClientArgs": [ diff --git a/package-lock.json b/package-lock.json index 8df96646fbf..c7ffd7890c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,16 +10,16 @@ "packages/*" ], "devDependencies": { - "@aws-sdk/client-cloudfront": "^3.513.0", - "@aws-sdk/client-s3": "^3.513.0", - "@aws-sdk/lib-storage": "^3.513.0", + "@aws-sdk/client-cloudfront": "^3.496.0", + "@aws-sdk/client-s3": "^3.496.0", + "@aws-sdk/lib-storage": "^3.496.0", "@octokit/rest": "^19.0.13", "@preact/preset-vite": "^2.8.1", "@react-email/components": "^0.0.14", "@react-email/tailwind": "^0.0.14", - "@serenity-js/core": "^3.17.0", - "@stencil/core": "^4.12.2", - "@sveltejs/vite-plugin-svelte": "^3.0.2", + "@serenity-js/core": "^3.15.1", + "@stencil/core": "^4.10.0", + "@sveltejs/vite-plugin-svelte": "^3.0.1", "@types/archiver": "^6.0.2", "@types/cheerio": "^0.22.35", "@types/eslint": "^8.56.2", @@ -27,17 +27,18 @@ "@types/lodash.clonedeep": "^4.5.9", "@types/lodash.zip": "^4.2.9", "@types/mime-types": "^2.1.4", - "@types/node": "^20.11.17", + "@types/node": "^20.11.5", + "@types/react": "^18.2.48", "@types/shelljs": "^0.8.15", "@types/split2": "^4.2.3", "@types/unzipper": "^0.10.9", - "@types/uuid": "^9.0.8", - "@typescript-eslint/eslint-plugin": "^7.0.1", - "@typescript-eslint/parser": "^7.0.1", - "@typescript-eslint/utils": "^7.0.1", + "@types/uuid": "^9.0.7", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", + "@typescript-eslint/utils": "^6.19.0", "@vitejs/plugin-react": "^4.2.1", - "@vitejs/plugin-vue": "^5.0.4", - "@vitest/coverage-v8": "^1.2.2", + "@vitejs/plugin-vue": "^5.0.3", + "@vitest/coverage-v8": "^1.2.1", "camelcase": "^8.0.0", "cddl": "^0.8.5", "cddl2ts": "^0.2.2", @@ -50,19 +51,22 @@ "ejs-lint": "^2.0.0", "eslint": "^8.56.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-unicorn": "^51.0.1", + "eslint-plugin-unicorn": "^50.0.1", "eslint-plugin-wdio": "^8.24.12", "eta": "^3.2.0", "glob": "^10.3.10", - "husky": "^9.0.11", + "husky": "^8.0.3", "inquirer": "^9.2.12", "jsdom": "^22.1.0", - "lerna": "^8.1.2", + "lerna": "^8.0.2", "lerna-changelog": "^2.2.0", "mime-types": "^2.1.35", "npm-run-all": "^4.1.5", + "react": "^18.2.0", + "recast": "^0.23.4", "recursive-readdir": "^2.2.3", "request": "^2.88.2", + "resend": "^3.1.0", "rimraf": "^5.0.5", "shelljs": "^0.8.5", "shx": "^0.3.4", @@ -70,7 +74,8 @@ "ts-node": "^10.9.2", "typescript": "^5.3.3", "unzipper": "^0.10.14", - "vitest": "^1.2.2" + "url-join": "^5.0.0", + "vitest": "^1.2.1" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -244,28 +249,29 @@ "dev": true }, "node_modules/@aws-sdk/client-cloudfront": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.515.0.tgz", - "integrity": "sha512-aDiTeB2QEX6M9I3yqchCce4z78wRuDOh3oZq2eiBueJqk3R3RGm8zDdsiJ+U9N6NVSmcm7Xs55Ws8NUJZGwizw==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.496.0.tgz", + "integrity": "sha512-8sIyrJstom//Ow5d5ParGunC2x7DmmyXjQ7psBVyzKN9IEtjJGqMVsbhR0lC5+kmNLLUUPMB6oz6yJCpMNSCnw==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.515.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", + "@aws-sdk/client-sts": "3.496.0", + "@aws-sdk/core": "3.496.0", + "@aws-sdk/credential-provider-node": "3.496.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-signing": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", "@aws-sdk/xml-builder": "3.496.0", "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", + "@smithy/core": "^1.3.1", "@smithy/fetch-http-handler": "^2.4.1", "@smithy/hash-node": "^2.1.1", "@smithy/invalid-dependency": "^2.1.1", @@ -284,9 +290,8 @@ "@smithy/util-body-length-browser": "^2.1.1", "@smithy/util-body-length-node": "^2.2.1", "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", + "@smithy/util-defaults-mode-node": "^2.1.1", "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", "@smithy/util-retry": "^2.1.1", "@smithy/util-stream": "^2.1.1", "@smithy/util-utf8": "^2.1.1", @@ -298,79 +303,47 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/client-sso": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.515.0.tgz", - "integrity": "sha512-4oGBLW476zmkdN98lAns3bObRNO+DLOfg4MDUSR6l6GYBV/zGAtoy2O/FhwYKgA2L5h2ZtElGopLlk/1Q0ePLw==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.515.0.tgz", - "integrity": "sha512-zACa8LNlPUdlNUBqQRf5a3MfouLNtcBfm84v2c8M976DwJrMGONPe1QjyLLsD38uESQiXiVQRruj/b000iMXNw==", + "node_modules/@aws-sdk/client-s3": { + "version": "3.501.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.501.0.tgz", + "integrity": "sha512-ovxYSGdnEdr4UrNiT+9e3ov2XULFr0bcyoXJkYxnkXPDg9Y65nuZgZAIZQMS6wnJVmNrUprhqTSQB3KHXvaEuQ==", "dev": true, "dependencies": { + "@aws-crypto/sha1-browser": "3.0.0", "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", + "@aws-sdk/client-sts": "3.501.0", + "@aws-sdk/core": "3.496.0", + "@aws-sdk/credential-provider-node": "3.501.0", + "@aws-sdk/middleware-bucket-endpoint": "3.496.0", + "@aws-sdk/middleware-expect-continue": "3.496.0", + "@aws-sdk/middleware-flexible-checksums": "3.496.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-location-constraint": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-sdk-s3": "3.499.0", + "@aws-sdk/middleware-signing": "3.496.0", + "@aws-sdk/middleware-ssec": "3.498.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/signature-v4-multi-region": "3.499.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", + "@aws-sdk/xml-builder": "3.496.0", "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", + "@smithy/core": "^1.3.1", + "@smithy/eventstream-serde-browser": "^2.1.1", + "@smithy/eventstream-serde-config-resolver": "^2.1.1", + "@smithy/eventstream-serde-node": "^2.1.1", "@smithy/fetch-http-handler": "^2.4.1", + "@smithy/hash-blob-browser": "^2.1.1", "@smithy/hash-node": "^2.1.1", + "@smithy/hash-stream-node": "^2.1.1", "@smithy/invalid-dependency": "^2.1.1", + "@smithy/md5-js": "^2.1.1", "@smithy/middleware-content-length": "^2.1.1", "@smithy/middleware-endpoint": "^2.4.1", "@smithy/middleware-retry": "^2.1.1", @@ -386,40 +359,40 @@ "@smithy/util-body-length-browser": "^2.1.1", "@smithy/util-body-length-node": "^2.2.1", "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", + "@smithy/util-defaults-mode-node": "^2.1.1", "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", "@smithy/util-retry": "^2.1.1", + "@smithy/util-stream": "^2.1.1", "@smithy/util-utf8": "^2.1.1", + "@smithy/util-waiter": "^2.1.1", + "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.515.0" } }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/client-sts": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.515.0.tgz", - "integrity": "sha512-ScYuvaIDgip3atOJIA1FU2n0gJkEdveu1KrrCPathoUCV5zpK8qQmO/n+Fj/7hKFxeKdFbB+4W4CsJWYH94nlg==", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sts": { + "version": "3.501.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.501.0.tgz", + "integrity": "sha512-Uwc/xuxsA46dZS5s+4U703LBNDrGpWF7RB4XYEEMD21BLfGuqntxLLQux8xxKt3Pcur0CsXNja5jXt3uLnE5MA==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", + "@aws-sdk/core": "3.496.0", + "@aws-sdk/credential-provider-node": "3.501.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", + "@smithy/core": "^1.3.1", "@smithy/fetch-http-handler": "^2.4.1", "@smithy/hash-node": "^2.1.1", "@smithy/invalid-dependency": "^2.1.1", @@ -438,7 +411,7 @@ "@smithy/util-body-length-browser": "^2.1.1", "@smithy/util-body-length-node": "^2.2.1", "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", + "@smithy/util-defaults-mode-node": "^2.1.1", "@smithy/util-endpoints": "^1.1.1", "@smithy/util-middleware": "^2.1.1", "@smithy/util-retry": "^2.1.1", @@ -446,60 +419,21 @@ "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.515.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.515.0.tgz", - "integrity": "sha512-45vxdyqhTAaUMERYVWOziG3K8L2TV9G4ryQS/KZ84o7NAybE9GMdoZRVmGHAO7mJJ1wQiYCM/E+i5b3NW9JfNA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.515.0.tgz", - "integrity": "sha512-Ba6FXK77vU4WyheiamNjEuTFmir0eAXuJGPO27lBaA8g+V/seXGHScsbOG14aQGDOr2P02OPwKGZrWWA7BFpfQ==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-stream": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.515.0.tgz", - "integrity": "sha512-ouDlNZdv2TKeVEA/YZk2+XklTXyAAGdbWnl4IgN9ItaodWI+lZjdIoNC8BAooVH+atIV/cZgoGTGQL7j2TxJ9A==", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.501.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.501.0.tgz", + "integrity": "sha512-6UXnwLtYIr298ljveumCVXsH+x7csGscK5ylY+veRFy514NqyloRdJt8JY26hhh5SF9MYnkW+JyWSJ2Ls3tOjQ==", "dev": true, "dependencies": { - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/credential-provider-env": "3.515.0", - "@aws-sdk/credential-provider-process": "3.515.0", - "@aws-sdk/credential-provider-sso": "3.515.0", - "@aws-sdk/credential-provider-web-identity": "3.515.0", - "@aws-sdk/types": "3.515.0", + "@aws-sdk/credential-provider-env": "3.496.0", + "@aws-sdk/credential-provider-process": "3.496.0", + "@aws-sdk/credential-provider-sso": "3.501.0", + "@aws-sdk/credential-provider-web-identity": "3.496.0", + "@aws-sdk/types": "3.496.0", "@smithy/credential-provider-imds": "^2.2.1", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", @@ -510,19 +444,18 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.515.0.tgz", - "integrity": "sha512-Y4kHSpbxksiCZZNcvsiKUd8Fb2XlyUuONEwqWFNL82ZH6TCCjBGS31wJQCSxBHqYcOL3tiORUEJkoO7uS30uQA==", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.501.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.501.0.tgz", + "integrity": "sha512-NM62D8gYrQ1nyLYwW4k48B2/lMHDzHDcQccS1wJakr6bg5sdtG06CumwlVcY+LAa0o1xRnhHmh/yiwj/nN4avw==", "dev": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.515.0", - "@aws-sdk/credential-provider-http": "3.515.0", - "@aws-sdk/credential-provider-ini": "3.515.0", - "@aws-sdk/credential-provider-process": "3.515.0", - "@aws-sdk/credential-provider-sso": "3.515.0", - "@aws-sdk/credential-provider-web-identity": "3.515.0", - "@aws-sdk/types": "3.515.0", + "@aws-sdk/credential-provider-env": "3.496.0", + "@aws-sdk/credential-provider-ini": "3.501.0", + "@aws-sdk/credential-provider-process": "3.496.0", + "@aws-sdk/credential-provider-sso": "3.501.0", + "@aws-sdk/credential-provider-web-identity": "3.496.0", + "@aws-sdk/types": "3.496.0", "@smithy/credential-provider-imds": "^2.2.1", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", @@ -533,141 +466,15 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.515.0.tgz", - "integrity": "sha512-pSjiOA2FM63LHRKNDvEpBRp80FVGT0Mw/gzgbqFXP+sewk0WVonYbEcMDTJptH3VsLPGzqH/DQ1YL/aEIBuXFQ==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.515.0.tgz", - "integrity": "sha512-j7vUkiSmuhpBvZYoPTRTI4ePnQbiZMFl6TNhg9b9DprC1zHkucsZnhRhqjOVlrw/H6J4jmcPGcHHTZ5WQNI5xQ==", - "dev": true, - "dependencies": { - "@aws-sdk/client-sso": "3.515.0", - "@aws-sdk/token-providers": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.515.0.tgz", - "integrity": "sha512-66+2g4z3fWwdoGReY8aUHvm6JrKZMTRxjuizljVmMyOBttKPeBYXvUTop/g3ZGUx1f8j+C5qsGK52viYBvtjuQ==", - "dev": true, - "dependencies": { - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.515.0.tgz", - "integrity": "sha512-I1MwWPzdRKM1luvdDdjdGsDjNVPhj9zaIytEchjTY40NcKOg+p2evLD2y69ozzg8pyXK63r8DdvDGOo9QPuh0A==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/middleware-logger": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.515.0.tgz", - "integrity": "sha512-qXomJzg2m/5seQOxHi/yOXOKfSjwrrJSmEmfwJKJyQgdMbBcjz3Cz0H/1LyC6c5hHm6a/SZgSTzDAbAoUmyL+Q==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.515.0.tgz", - "integrity": "sha512-dokHLbTV3IHRIBrw9mGoxcNTnQsjlm7TpkJhPdGT9T4Mq399EyQo51u6IsVMm07RXLl2Zw7u+u9p+qWBFzmFRA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.515.0.tgz", - "integrity": "sha512-nOqZjGA/GkjuJ5fUshec9Fv6HFd7ovOTxMJbw3MfAhqXuVZ6dKF41lpVJ4imNsgyFt3shUg9WDY8zGFjlYMB3g==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.515.0.tgz", - "integrity": "sha512-RIRx9loxMgEAc/r1wPfnfShOuzn4RBi8pPPv6/jhhITEeMnJe6enAh2k5y9DdiVDDgCWZgVFSv0YkAIfzAFsnQ==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/token-providers": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.515.0.tgz", - "integrity": "sha512-MQuf04rIcTXqwDzmyHSpFPF1fKEzRl64oXtCRUF3ddxTdK6wxXkePfK6wNCuL+GEbEcJAoCtIGIRpzGPJvQjHA==", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.501.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.501.0.tgz", + "integrity": "sha512-y90dlvvZ55PwecODFdMx0NiNlJJfm7X6S61PKdLNCMRcu1YK+eWn0CmPHGHobBUQ4SEYhnFLcHSsf+VMim6BtQ==", "dev": true, "dependencies": { - "@aws-sdk/client-sso-oidc": "3.515.0", - "@aws-sdk/types": "3.515.0", + "@aws-sdk/client-sso": "3.496.0", + "@aws-sdk/token-providers": "3.501.0", + "@aws-sdk/types": "3.496.0", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", "@smithy/types": "^2.9.1", @@ -677,110 +484,27 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", - "dev": true, - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/util-endpoints": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.515.0.tgz", - "integrity": "sha512-UJi+jdwcGFV/F7d3+e2aQn5yZOVpDiAgfgNhPnEtgV0WozJ5/ZUeZBgWvSc/K415N4A4D/9cbBc7+I+35qzcDQ==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/types": "^2.9.1", - "@smithy/util-endpoints": "^1.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.515.0.tgz", - "integrity": "sha512-pTWQb0JCafTmLHLDv3Qqs/nAAJghcPdGQIBpsCStb0YEzg3At/dOi2AIQ683yYnXmeOxLXJDzmlsovfVObJScw==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/types": "^2.9.1", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.515.0.tgz", - "integrity": "sha512-A/KJ+/HTohHyVXLH+t/bO0Z2mPrQgELbQO8tX+B2nElo8uklj70r5cT7F8ETsI9oOy+HDVpiL5/v45ZgpUOiPg==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.515.0.tgz", - "integrity": "sha512-K527n83hrMUdosxOYTzL63wtlJtmN5SUJZnGY1sUR6UyOrnOr9lS6t3AB6BgHqLFRFZJqSqmhflv2cOD7P1UPg==", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/token-providers": { + "version": "3.501.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.501.0.tgz", + "integrity": "sha512-MvLPhNxlStmQqVm2crGLUqYWvK/AbMmI9j4FbEfJ15oG/I+730zjSJQEy2MvdiqbJRDPZ/tRCL89bUedOrmi0g==", "dev": true, "dependencies": { - "@aws-crypto/sha1-browser": "3.0.0", "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.515.0", - "@aws-sdk/middleware-bucket-endpoint": "3.515.0", - "@aws-sdk/middleware-expect-continue": "3.515.0", - "@aws-sdk/middleware-flexible-checksums": "3.515.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-location-constraint": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-sdk-s3": "3.515.0", - "@aws-sdk/middleware-signing": "3.515.0", - "@aws-sdk/middleware-ssec": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/signature-v4-multi-region": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", - "@aws-sdk/xml-builder": "3.496.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", - "@smithy/eventstream-serde-browser": "^2.1.1", - "@smithy/eventstream-serde-config-resolver": "^2.1.1", - "@smithy/eventstream-serde-node": "^2.1.1", "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-blob-browser": "^2.1.1", "@smithy/hash-node": "^2.1.1", - "@smithy/hash-stream-node": "^2.1.1", "@smithy/invalid-dependency": "^2.1.1", - "@smithy/md5-js": "^2.1.1", "@smithy/middleware-content-length": "^2.1.1", "@smithy/middleware-endpoint": "^2.4.1", "@smithy/middleware-retry": "^2.1.1", @@ -788,7 +512,9 @@ "@smithy/middleware-stack": "^2.1.1", "@smithy/node-config-provider": "^2.2.1", "@smithy/node-http-handler": "^2.3.1", + "@smithy/property-provider": "^2.1.1", "@smithy/protocol-http": "^3.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", "@smithy/smithy-client": "^2.3.1", "@smithy/types": "^2.9.1", "@smithy/url-parser": "^2.1.1", @@ -796,39 +522,36 @@ "@smithy/util-body-length-browser": "^2.1.1", "@smithy/util-body-length-node": "^2.2.1", "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", + "@smithy/util-defaults-mode-node": "^2.1.1", "@smithy/util-endpoints": "^1.1.1", "@smithy/util-retry": "^2.1.1", - "@smithy/util-stream": "^2.1.1", "@smithy/util-utf8": "^2.1.1", - "@smithy/util-waiter": "^2.1.1", - "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.515.0.tgz", - "integrity": "sha512-4oGBLW476zmkdN98lAns3bObRNO+DLOfg4MDUSR6l6GYBV/zGAtoy2O/FhwYKgA2L5h2ZtElGopLlk/1Q0ePLw==", + "node_modules/@aws-sdk/client-sso": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.496.0.tgz", + "integrity": "sha512-fuaMuxKg7CMUsP9l3kxYWCOxFsBjdA0xj5nlikaDm1661/gB4KkAiGqRY8LsQkpNXvXU8Nj+f7oCFADFyGYzyw==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", + "@aws-sdk/core": "3.496.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", + "@smithy/core": "^1.3.1", "@smithy/fetch-http-handler": "^2.4.1", "@smithy/hash-node": "^2.1.1", "@smithy/invalid-dependency": "^2.1.1", @@ -847,9 +570,8 @@ "@smithy/util-body-length-browser": "^2.1.1", "@smithy/util-body-length-node": "^2.2.1", "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", + "@smithy/util-defaults-mode-node": "^2.1.1", "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", "@smithy/util-retry": "^2.1.1", "@smithy/util-utf8": "^2.1.1", "tslib": "^2.5.0" @@ -858,27 +580,27 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.515.0.tgz", - "integrity": "sha512-zACa8LNlPUdlNUBqQRf5a3MfouLNtcBfm84v2c8M976DwJrMGONPe1QjyLLsD38uESQiXiVQRruj/b000iMXNw==", + "node_modules/@aws-sdk/client-sts": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.496.0.tgz", + "integrity": "sha512-3pSdqgegdwbK3CT1WvGHhA+Bf91R9cr8G1Ynp+iU2wZvy8ueJfMUk0NYfjo3EEv0YhSbMLKuduzZfvQHFHXYhw==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", + "@aws-sdk/core": "3.496.0", + "@aws-sdk/credential-provider-node": "3.496.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", + "@smithy/core": "^1.3.1", "@smithy/fetch-http-handler": "^2.4.1", "@smithy/hash-node": "^2.1.1", "@smithy/invalid-dependency": "^2.1.1", @@ -897,143 +619,61 @@ "@smithy/util-body-length-browser": "^2.1.1", "@smithy/util-body-length-node": "^2.2.1", "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", + "@smithy/util-defaults-mode-node": "^2.1.1", "@smithy/util-endpoints": "^1.1.1", "@smithy/util-middleware": "^2.1.1", "@smithy/util-retry": "^2.1.1", "@smithy/util-utf8": "^2.1.1", + "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.515.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sts": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.515.0.tgz", - "integrity": "sha512-ScYuvaIDgip3atOJIA1FU2n0gJkEdveu1KrrCPathoUCV5zpK8qQmO/n+Fj/7hKFxeKdFbB+4W4CsJWYH94nlg==", + "node_modules/@aws-sdk/core": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.496.0.tgz", + "integrity": "sha512-yT+ug7Cw/3eJi7x2es0+46x12+cIJm5Xv+GPWsrTFD1TKgqO/VPEgfDtHFagDNbFmjNQA65Ygc/kEdIX9ICX/A==", "dev": true, "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", + "@smithy/core": "^1.3.1", "@smithy/protocol-http": "^3.1.1", + "@smithy/signature-v4": "^2.1.1", "@smithy/smithy-client": "^2.3.1", "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.515.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.515.0.tgz", - "integrity": "sha512-45vxdyqhTAaUMERYVWOziG3K8L2TV9G4ryQS/KZ84o7NAybE9GMdoZRVmGHAO7mJJ1wQiYCM/E+i5b3NW9JfNA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.515.0.tgz", - "integrity": "sha512-Ba6FXK77vU4WyheiamNjEuTFmir0eAXuJGPO27lBaA8g+V/seXGHScsbOG14aQGDOr2P02OPwKGZrWWA7BFpfQ==", + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.496.0.tgz", + "integrity": "sha512-lukQMJ8SWWP5RqkRNOHi/H+WMhRvSWa3Fc5Jf/VP6xHiPLfF1XafcvthtV91e0VwPCiseI+HqChrcGq8pvnxHw==", "dev": true, "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/node-http-handler": "^2.3.1", + "@aws-sdk/types": "3.496.0", "@smithy/property-provider": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", "@smithy/types": "^2.9.1", - "@smithy/util-stream": "^2.1.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.515.0.tgz", - "integrity": "sha512-ouDlNZdv2TKeVEA/YZk2+XklTXyAAGdbWnl4IgN9ItaodWI+lZjdIoNC8BAooVH+atIV/cZgoGTGQL7j2TxJ9A==", + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.496.0.tgz", + "integrity": "sha512-2nD1jp1sIwcQaWK1y/9ruQOkW16RUxZpzgjbW/gnK3iiUXwx+/FNQWxshud+GTSx3Q4x6eIhqsbjtP4VVPPuUA==", "dev": true, "dependencies": { - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/credential-provider-env": "3.515.0", - "@aws-sdk/credential-provider-process": "3.515.0", - "@aws-sdk/credential-provider-sso": "3.515.0", - "@aws-sdk/credential-provider-web-identity": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.515.0.tgz", - "integrity": "sha512-Y4kHSpbxksiCZZNcvsiKUd8Fb2XlyUuONEwqWFNL82ZH6TCCjBGS31wJQCSxBHqYcOL3tiORUEJkoO7uS30uQA==", - "dev": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.515.0", - "@aws-sdk/credential-provider-http": "3.515.0", - "@aws-sdk/credential-provider-ini": "3.515.0", - "@aws-sdk/credential-provider-process": "3.515.0", - "@aws-sdk/credential-provider-sso": "3.515.0", - "@aws-sdk/credential-provider-web-identity": "3.515.0", - "@aws-sdk/types": "3.515.0", + "@aws-sdk/credential-provider-env": "3.496.0", + "@aws-sdk/credential-provider-process": "3.496.0", + "@aws-sdk/credential-provider-sso": "3.496.0", + "@aws-sdk/credential-provider-web-identity": "3.496.0", + "@aws-sdk/types": "3.496.0", "@smithy/credential-provider-imds": "^2.2.1", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", @@ -1044,13 +684,19 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.515.0.tgz", - "integrity": "sha512-pSjiOA2FM63LHRKNDvEpBRp80FVGT0Mw/gzgbqFXP+sewk0WVonYbEcMDTJptH3VsLPGzqH/DQ1YL/aEIBuXFQ==", + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.496.0.tgz", + "integrity": "sha512-IVF9RvLePfRa5S5/eBIRChJCWOzQkGwM8P/L79Gl84u/cH2oSG4NtUI/YTDlrtmnYn7YsGhINSV0WnzfF2twfQ==", "dev": true, "dependencies": { - "@aws-sdk/types": "3.515.0", + "@aws-sdk/credential-provider-env": "3.496.0", + "@aws-sdk/credential-provider-ini": "3.496.0", + "@aws-sdk/credential-provider-process": "3.496.0", + "@aws-sdk/credential-provider-sso": "3.496.0", + "@aws-sdk/credential-provider-web-identity": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@smithy/credential-provider-imds": "^2.2.1", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", "@smithy/types": "^2.9.1", @@ -1060,15 +706,13 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.515.0.tgz", - "integrity": "sha512-j7vUkiSmuhpBvZYoPTRTI4ePnQbiZMFl6TNhg9b9DprC1zHkucsZnhRhqjOVlrw/H6J4jmcPGcHHTZ5WQNI5xQ==", + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.496.0.tgz", + "integrity": "sha512-/YZscCTGOKVmGr916Th4XF8Sz6JDtZ/n2loHG9exok9iy/qIbACsTRNLP9zexPxhPoue/oZqecY5xbVljfY34A==", "dev": true, "dependencies": { - "@aws-sdk/client-sso": "3.515.0", - "@aws-sdk/token-providers": "3.515.0", - "@aws-sdk/types": "3.515.0", + "@aws-sdk/types": "3.496.0", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", "@smithy/types": "^2.9.1", @@ -1078,107 +722,15 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.515.0.tgz", - "integrity": "sha512-66+2g4z3fWwdoGReY8aUHvm6JrKZMTRxjuizljVmMyOBttKPeBYXvUTop/g3ZGUx1f8j+C5qsGK52viYBvtjuQ==", - "dev": true, - "dependencies": { - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.515.0.tgz", - "integrity": "sha512-I1MwWPzdRKM1luvdDdjdGsDjNVPhj9zaIytEchjTY40NcKOg+p2evLD2y69ozzg8pyXK63r8DdvDGOo9QPuh0A==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-logger": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.515.0.tgz", - "integrity": "sha512-qXomJzg2m/5seQOxHi/yOXOKfSjwrrJSmEmfwJKJyQgdMbBcjz3Cz0H/1LyC6c5hHm6a/SZgSTzDAbAoUmyL+Q==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.515.0.tgz", - "integrity": "sha512-dokHLbTV3IHRIBrw9mGoxcNTnQsjlm7TpkJhPdGT9T4Mq399EyQo51u6IsVMm07RXLl2Zw7u+u9p+qWBFzmFRA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.515.0.tgz", - "integrity": "sha512-nOqZjGA/GkjuJ5fUshec9Fv6HFd7ovOTxMJbw3MfAhqXuVZ6dKF41lpVJ4imNsgyFt3shUg9WDY8zGFjlYMB3g==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.515.0.tgz", - "integrity": "sha512-RIRx9loxMgEAc/r1wPfnfShOuzn4RBi8pPPv6/jhhITEeMnJe6enAh2k5y9DdiVDDgCWZgVFSv0YkAIfzAFsnQ==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/token-providers": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.515.0.tgz", - "integrity": "sha512-MQuf04rIcTXqwDzmyHSpFPF1fKEzRl64oXtCRUF3ddxTdK6wxXkePfK6wNCuL+GEbEcJAoCtIGIRpzGPJvQjHA==", + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.496.0.tgz", + "integrity": "sha512-eP7GxpT2QYubSDG7uk1GJW4eNymZCq65IxDyEFCXOP/kfqkxriCY+iVEFG6/Mo3LxvgrgHXU4jxrCAXMAWN43g==", "dev": true, "dependencies": { - "@aws-sdk/client-sso-oidc": "3.515.0", - "@aws-sdk/types": "3.515.0", + "@aws-sdk/client-sso": "3.496.0", + "@aws-sdk/token-providers": "3.496.0", + "@aws-sdk/types": "3.496.0", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", "@smithy/types": "^2.9.1", @@ -1188,79 +740,14 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", - "dev": true, - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-endpoints": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.515.0.tgz", - "integrity": "sha512-UJi+jdwcGFV/F7d3+e2aQn5yZOVpDiAgfgNhPnEtgV0WozJ5/ZUeZBgWvSc/K415N4A4D/9cbBc7+I+35qzcDQ==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/types": "^2.9.1", - "@smithy/util-endpoints": "^1.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.515.0.tgz", - "integrity": "sha512-pTWQb0JCafTmLHLDv3Qqs/nAAJghcPdGQIBpsCStb0YEzg3At/dOi2AIQ683yYnXmeOxLXJDzmlsovfVObJScw==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/types": "^2.9.1", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.515.0.tgz", - "integrity": "sha512-A/KJ+/HTohHyVXLH+t/bO0Z2mPrQgELbQO8tX+B2nElo8uklj70r5cT7F8ETsI9oOy+HDVpiL5/v45ZgpUOiPg==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.515.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/core": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.513.0.tgz", - "integrity": "sha512-L+9DL4apWuqNKVOMJ8siAuWoRM9rZf9w1iPv8S2o83WO2jVK7E/m+rNW1dFo9HsA5V1ccDl2H2qLXx24HiHmOw==", + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.496.0.tgz", + "integrity": "sha512-IbP+qLlvJSpNPj+zW6TtFuLRTK5Tf0hW+2pom4vFyi5YSH4pn8UOC136UdewX8vhXGS9BJQ5zBDMasIyl5VeGQ==", "dev": true, "dependencies": { - "@smithy/core": "^1.3.2", - "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", + "@aws-sdk/types": "3.496.0", + "@smithy/property-provider": "^2.1.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, @@ -1269,9 +756,9 @@ } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.515.0.tgz", - "integrity": "sha512-/7z/3KnMs1ODNS9c8Skj/DFTsy6/v7n17clh1IGOcTYhhioCMA3MIzIZecWFeLjPYcUSkNQHIIjKFQt1nhZkwA==", + "version": "3.501.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.501.0.tgz", + "integrity": "sha512-XZREd1O0S8AjM3RS85T2QCVJzXk+BSAGNOFvGP8t2al2Ti35O4+AvSHT75rmOGAZAsthtL2o9bt0h1VFnaIP+g==", "dev": true, "dependencies": { "@smithy/abort-controller": "^2.1.1", @@ -1290,12 +777,12 @@ } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.515.0.tgz", - "integrity": "sha512-Vm423j3udFrhKPaKiXtie+6aF05efjX8lhAu5VOruIvbam7olvdWNdkH7sGWlz1ko3CVa7PwOYjGHiOOhxpEOA==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.496.0.tgz", + "integrity": "sha512-B+ilBMSs3+LJuo2bl2KB8GFdu+8PPVtYEWtwhNkmnaU8iMisgMBp5uuM8sUDvJX7I4iSF0WbgnhguX4cJqfAew==", "dev": true, "dependencies": { - "@aws-sdk/types": "3.515.0", + "@aws-sdk/types": "3.496.0", "@aws-sdk/util-arn-parser": "3.495.0", "@smithy/node-config-provider": "^2.2.1", "@smithy/protocol-http": "^3.1.1", @@ -1307,26 +794,13 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", - "dev": true, - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.515.0.tgz", - "integrity": "sha512-TWCXulivab4reOMx/vxa/IwnPX78fLwI9NUoAxjsqB6W9qjmSnPD43BSVeGvbbl/YNmgk7XfMbZb6IgxW7RyzA==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.496.0.tgz", + "integrity": "sha512-+exo5DVc+BeDus2iI6Fz1thefHGDXxUhHZ+4VHQ6HkStMy3Y22HugyEGHSQZmtRL86Hjr7dFbEWFsC47a2ItGA==", "dev": true, "dependencies": { - "@aws-sdk/types": "3.515.0", + "@aws-sdk/types": "3.496.0", "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1335,28 +809,15 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", - "dev": true, - "dependencies": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.515.0.tgz", - "integrity": "sha512-ydGjnqNeYlJaAkmQeQnS4pZRAAvzefdm8c234Qh0Fg55xRwHTNLp7uYsdfkTjrdAlj6YIO3Zr6vK6VJ6MGCwug==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.496.0.tgz", + "integrity": "sha512-yQIWfjEMvgsAJ7ku224vXDjXPD+f9zfKZFialJva8VUlEr7hQp4CQ0rxV3YThSaixKEDDs5k6kOjWAd2BPGr2A==", "dev": true, "dependencies": { "@aws-crypto/crc32": "3.0.0", "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.515.0", + "@aws-sdk/types": "3.496.0", "@smithy/is-array-buffer": "^2.1.1", "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", @@ -1367,12 +828,14 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.496.0.tgz", + "integrity": "sha512-jUdPpSJeqCYXf6hSjfwsfHway7peIV8Vz51w/BN91bF4vB/bYwAC5o9/iJiK/EoByp5asxA8fg9wFOyGjzdbLg==", "dev": true, "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, @@ -1381,12 +844,12 @@ } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.515.0.tgz", - "integrity": "sha512-ORFC5oijjTJsHhUXy9o52/vl5Irf6e83bE/8tBp+sVVx81+E8zTTWZbysoa41c0B5Ycd0H3wCWutvjdXT16ydQ==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.496.0.tgz", + "integrity": "sha512-i4ocJ2Zs86OtPREbB18InFukhqg2qtBxb5gywv79IHDPVmpOYE4m/3v3yGUrkjfF2GTlUL0k5FskNNqw41yfng==", "dev": true, "dependencies": { - "@aws-sdk/types": "3.515.0", + "@aws-sdk/types": "3.496.0", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, @@ -1394,12 +857,13 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint/node_modules/@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.496.0.tgz", + "integrity": "sha512-EwMVSY6iBMeGbVnvwdaFl/ClMS/YWtxCAo+bcEtgk8ltRuo7qgbJem8Km/fvWC1vdWvIbe4ArdJ8iGzq62ffAw==", "dev": true, "dependencies": { + "@aws-sdk/types": "3.496.0", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, @@ -1407,33 +871,35 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.515.0.tgz", - "integrity": "sha512-vB8JwiTEAqm1UT9xfugnCgl0H0dtBLUQQK99JwQEWjHPZmQ3HQuVkykmJRY3X0hzKMEgqXodz0hZOvf3Hq1mvQ==", + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.496.0.tgz", + "integrity": "sha512-+IuOcFsfqg2WAnaEzH6KhVbicqCxtOq9w3DH2jwTpddRlCx2Kqf6wCzg8luhHRGyjBZdsbIS+OXwyMevoppawA==", "dev": true, "dependencies": { - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-arn-parser": "3.495.0", - "@smithy/node-config-provider": "^2.2.1", + "@aws-sdk/types": "3.496.0", "@smithy/protocol-http": "^3.1.1", - "@smithy/signature-v4": "^2.1.1", - "@smithy/smithy-client": "^2.3.1", "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.499.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.499.0.tgz", + "integrity": "sha512-thTb47U1hYHk5ei+yO0D0aehbgQXeAcgvyyxOID9/HDuRfWuTvKdclWh/goIeDfvSS87VBukEAjnCa5JYBwzug==", "dev": true, "dependencies": { + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-arn-parser": "3.495.0", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/signature-v4": "^2.1.1", + "@smithy/smithy-client": "^2.3.1", "@smithy/types": "^2.9.1", + "@smithy/util-config-provider": "^2.2.1", "tslib": "^2.5.0" }, "engines": { @@ -1441,12 +907,12 @@ } }, "node_modules/@aws-sdk/middleware-signing": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.515.0.tgz", - "integrity": "sha512-SdjCyQCL702I07KhCiBFcoh6+NYtnruHJQIzWwMpBteuYHnCHW1k9uZ6pqacsS+Y6qpAKfTVNpQx2zP2s6QoHA==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.496.0.tgz", + "integrity": "sha512-Oq73Brs4IConvWnRlh8jM1V7LHoTw9SVQklu/QW2FPlNrB3B8fuTdWHHYIWv7ybw1bykXoCY99v865Mmq/Or/g==", "dev": true, "dependencies": { - "@aws-sdk/types": "3.515.0", + "@aws-sdk/types": "3.496.0", "@smithy/property-provider": "^2.1.1", "@smithy/protocol-http": "^3.1.1", "@smithy/signature-v4": "^2.1.1", @@ -1458,12 +924,13 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.498.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.498.0.tgz", + "integrity": "sha512-sWujXgzeTqMZzj/pRYEnnEbSzhBosqw9DXHOY1Mg2igI9NEfGlB7lPARp6aKmCaYlP3Bcj2X86vKCqF53mbyig==", "dev": true, "dependencies": { + "@aws-sdk/types": "3.496.0", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, @@ -1471,13 +938,15 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.515.0.tgz", - "integrity": "sha512-0qLjKiorosVBzzaV/o7MEyS9xqLLu02qGbP564Z/FZY74JUQEpBNedgveMUbb6lqr85RnOuwZ0GZ0cBRfH2brQ==", + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.496.0.tgz", + "integrity": "sha512-+iMtRxFk0GmFWNUF4ilxylOQd9PZdR4ZC9jkcPIh1PZlvKtpCyFywKlk5RRZKklSoJ/CttcqwhMvOXTNbWm/0w==", "dev": true, "dependencies": { - "@aws-sdk/types": "3.515.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, @@ -1485,13 +954,17 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-ssec/node_modules/@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.496.0.tgz", + "integrity": "sha512-URrNVOPHPgEDm6QFu6lDC2cUFs+Jx23mA3jEwCvoKlXiEY/ZoWjH8wlX3OMUlLrF1qoUTuD03jjrJzF6zoCgug==", "dev": true, "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/node-config-provider": "^2.2.1", "@smithy/types": "^2.9.1", + "@smithy/util-config-provider": "^2.2.1", + "@smithy/util-middleware": "^2.1.1", "tslib": "^2.5.0" }, "engines": { @@ -1499,13 +972,13 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.515.0.tgz", - "integrity": "sha512-5lrCn4DSE0zL41k0L6moqcdExZhWdAnV0/oMEagrISzQYoia+aNTEeyVD3xqJhRbEW4gCj3Uoyis6c8muf7b9g==", + "version": "3.499.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.499.0.tgz", + "integrity": "sha512-8HSFnZErRm7lAfk+Epxrf4QNdQEamg1CnbLybtKQQEjmvxLuXYvj16KlpYEZIwEENOMEvnCqMc7syTPkmjVhJA==", "dev": true, "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.515.0", - "@aws-sdk/types": "3.515.0", + "@aws-sdk/middleware-sdk-s3": "3.499.0", + "@aws-sdk/types": "3.496.0", "@smithy/protocol-http": "^3.1.1", "@smithy/signature-v4": "^2.1.1", "@smithy/types": "^2.9.1", @@ -1515,13 +988,48 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", + "node_modules/@aws-sdk/token-providers": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.496.0.tgz", + "integrity": "sha512-fyi8RcObEa1jNETJdc2H6q9VHrrdKCj/b6+fbLvymb7mUVRd0aWUn+24SNUImnSOnrwYnwaMfyyEC388X4MbFQ==", "dev": true, "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", + "@smithy/config-resolver": "^2.1.1", + "@smithy/fetch-http-handler": "^2.4.1", + "@smithy/hash-node": "^2.1.1", + "@smithy/invalid-dependency": "^2.1.1", + "@smithy/middleware-content-length": "^2.1.1", + "@smithy/middleware-endpoint": "^2.4.1", + "@smithy/middleware-retry": "^2.1.1", + "@smithy/middleware-serde": "^2.1.1", + "@smithy/middleware-stack": "^2.1.1", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/node-http-handler": "^2.3.1", + "@smithy/property-provider": "^2.1.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/smithy-client": "^2.3.1", "@smithy/types": "^2.9.1", + "@smithy/url-parser": "^2.1.1", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.1", + "@smithy/util-defaults-mode-node": "^2.1.1", + "@smithy/util-endpoints": "^1.1.1", + "@smithy/util-retry": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", "tslib": "^2.5.0" }, "engines": { @@ -1529,9 +1037,9 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.511.0.tgz", - "integrity": "sha512-P03ufufxmkvd7nO46oOeEqYIMPJ8qMCKxAsfJk1JBVPQ1XctVntbail4/UFnrnzij8DTl4Mk/D62uGo7+RolXA==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.496.0.tgz", + "integrity": "sha512-umkGadK4QuNQaMoDICMm7NKRI/mYSXiyPjcn3d53BhsuArYU/52CebGQKdt4At7SwwsiVJZw9RNBHyN5Mm0HVw==", "dev": true, "dependencies": { "@smithy/types": "^2.9.1", @@ -1553,6 +1061,21 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.496.0.tgz", + "integrity": "sha512-1QzOiWHi383ZwqSi/R2KgKCd7M+6DxkxI5acqLPm8mvDRDP2jRjrnVaC0g9/tlttWousGEemDUWStwrD2mVYSw==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/types": "^2.9.1", + "@smithy/util-endpoints": "^1.1.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/util-locate-window": { "version": "3.495.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz", @@ -1565,6 +1088,41 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.496.0.tgz", + "integrity": "sha512-4j2spN+h0I0qfSMsGvJXTfQBu1e18rPdekKvzsGJxhaAE1tNgUfUT4nbvc5uVn0sNjZmirskmJ3kfbzVOrqIFg==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/types": "^2.9.1", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.496.0.tgz", + "integrity": "sha512-h0Ax0jlDc7UIo3KoSI4C4tVLBFoiAdx3+DhTVfgLS7x93d41dMlziPoBX2RgdcFn37qnzw6AQKTVTMwDbRCGpg==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.496.0", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, "node_modules/@aws-sdk/util-utf8-browser": { "version": "3.259.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", @@ -1648,20 +1206,20 @@ } }, "node_modules/@babel/core": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", - "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.9", - "@babel/parser": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1902,13 +1460,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", - "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", "dependencies": { - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" }, "engines": { "node": ">=6.9.0" @@ -1968,9 +1526,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", - "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -2086,22 +1644,22 @@ } }, "node_modules/@babel/template": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", - "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", - "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", "dependencies": { "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", @@ -2109,8 +1667,8 @@ "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2119,9 +1677,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -2448,6 +2006,28 @@ "node": ">=14" } }, + "node_modules/@cucumber/cucumber/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@cucumber/cucumber/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@cucumber/cucumber/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -2569,11 +2149,11 @@ } }, "node_modules/@cucumber/gherkin": { - "version": "28.0.0", - "resolved": "https://registry.npmjs.org/@cucumber/gherkin/-/gherkin-28.0.0.tgz", - "integrity": "sha512-Ee6zJQq0OmIUPdW0mSnsCsrWA2PZAELNDPICD2pLfs0Oz7RAPgj80UsD2UCtqyAhw2qAR62aqlktKUlai5zl/A==", + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin/-/gherkin-27.0.0.tgz", + "integrity": "sha512-j5rCsjqzRiC3iVTier3sa0kzyNbkcAmF7xr7jKnyO7qDeK3Z8Ye1P3KSVpeQRMY+KCDJ3WbTDdyxH0FwfA/fIw==", "dependencies": { - "@cucumber/messages": ">=19.1.4 <=24" + "@cucumber/messages": ">=19.1.4 <=22" } }, "node_modules/@cucumber/gherkin-streams": { @@ -2661,6 +2241,35 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/@cucumber/gherkin/node_modules/@cucumber/messages": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@cucumber/messages/-/messages-22.0.0.tgz", + "integrity": "sha512-EuaUtYte9ilkxcKmfqGF9pJsHRUU0jwie5ukuZ/1NPTuHS1LxHPsGEODK17RPRbZHOFhqybNzG2rHAwThxEymg==", + "dependencies": { + "@types/uuid": "9.0.1", + "class-transformer": "0.5.1", + "reflect-metadata": "0.1.13", + "uuid": "9.0.0" + } + }, + "node_modules/@cucumber/gherkin/node_modules/@types/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==" + }, + "node_modules/@cucumber/gherkin/node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + }, + "node_modules/@cucumber/gherkin/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@cucumber/html-formatter": { "version": "20.4.0", "resolved": "https://registry.npmjs.org/@cucumber/html-formatter/-/html-formatter-20.4.0.tgz", @@ -2688,11 +2297,6 @@ "uuid": "9.0.1" } }, - "node_modules/@cucumber/messages/node_modules/@types/uuid": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", - "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==" - }, "node_modules/@cucumber/messages/node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -3557,13 +3161,13 @@ "integrity": "sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==" }, "node_modules/@lerna/create": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.1.2.tgz", - "integrity": "sha512-GzScCIkAW3tg3+Yn/MKCH9963bzG+zpjGz2NdfYDlYWI7p0f/SH46v1dqpPpYmZ2E/m3JK8HjTNNNL8eIm8/YQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.0.2.tgz", + "integrity": "sha512-AueSlfiYXqEmy9/EIc17mjlaHFuv734dfgVBegyoefIA7hdeoExtsXnACWf8Tw5af6gwyTL3KAp6QQyc1sTuZQ==", "dev": true, "dependencies": { "@npmcli/run-script": "7.0.2", - "@nx/devkit": ">=17.1.2 < 19", + "@nx/devkit": ">=17.1.2 < 18", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "19.0.11", "byte-size": "8.1.1", @@ -3600,7 +3204,7 @@ "npm-packlist": "5.1.1", "npm-registry-fetch": "^14.0.5", "npmlog": "^6.0.2", - "nx": ">=17.1.2 < 19", + "nx": ">=17.1.2 < 18", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-queue": "6.6.2", @@ -3746,6 +3350,15 @@ } } }, + "node_modules/@lerna/create/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@lerna/create/node_modules/execa": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", @@ -3769,6 +3382,21 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/@lerna/create/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@lerna/create/node_modules/get-stream": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", @@ -4030,9 +3658,9 @@ } }, "node_modules/@lerna/create/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -4110,11 +3738,11 @@ "dev": true }, "node_modules/@ljharb/through": { - "version": "2.3.12", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.12.tgz", - "integrity": "sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.11.tgz", + "integrity": "sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==", "dependencies": { - "call-bind": "^1.0.5" + "call-bind": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4168,9 +3796,9 @@ } }, "node_modules/@npmcli/agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.1.tgz", - "integrity": "sha512-H4FrOVtNyWC8MUwL3UfjOsAihHvT1Pe8POj3JvjXhSTJipsZMtgUALCT4mGyYZNxymkUfOw3PUj6dE4QPp6osQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.0.tgz", + "integrity": "sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==", "dev": true, "dependencies": { "agent-base": "^7.1.0", @@ -4196,9 +3824,9 @@ } }, "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.1.tgz", - "integrity": "sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", "dev": true, "dependencies": { "agent-base": "^7.1.0", @@ -4209,9 +3837,9 @@ } }, "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.3.tgz", - "integrity": "sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", "dev": true, "dependencies": { "agent-base": "^7.0.2", @@ -4222,9 +3850,9 @@ } }, "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -4307,18 +3935,18 @@ } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true, "engines": { "node": "14 || >=16.14" } }, "node_modules/@npmcli/git/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -4494,21 +4122,21 @@ } }, "node_modules/@nrwl/devkit": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-18.0.4.tgz", - "integrity": "sha512-fKHnjg4/9MdFd2U4e8p6ja9fRa864DCyF70kB4YUB9NuUIgWLQ15Uj6wXC3xjdXmxQRyHDa7ORodVoFzdo4UCg==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.2.8.tgz", + "integrity": "sha512-l2dFy5LkWqSA45s6pee6CoqJeluH+sjRdVnAAQfjLHRNSx6mFAKblyzq5h1f4P0EUCVVVqLs+kVqmNx5zxYqvw==", "dev": true, "dependencies": { - "@nx/devkit": "18.0.4" + "@nx/devkit": "17.2.8" } }, "node_modules/@nrwl/tao": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-18.0.4.tgz", - "integrity": "sha512-/PzGOJevlDQnp5RPXF3WDe+w1cdohGkY+mbJUgDVA4Q5JEPT1DtE10h9GgdHdzkPjVPNYsaI4Vs/53NUdlVHHA==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-17.2.8.tgz", + "integrity": "sha512-Qpk5YKeJ+LppPL/wtoDyNGbJs2MsTi6qyX/RdRrEc8lc4bk6Cw3Oul1qTXCI6jT0KzTz+dZtd0zYD/G7okkzvg==", "dev": true, "dependencies": { - "nx": "18.0.4", + "nx": "17.2.8", "tslib": "^2.3.0" }, "bin": { @@ -4516,19 +4144,18 @@ } }, "node_modules/@nx/devkit": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-18.0.4.tgz", - "integrity": "sha512-Vs1AXgOjMJyaWpKopD04dy0FwQ22n5ZR1bFf98Ab4Ht0WJwJE90IpUVAkwI03n5BYxAKOlQnFltsB4gu6Y8mZQ==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.2.8.tgz", + "integrity": "sha512-6LtiQihtZwqz4hSrtT5cCG5XMCWppG6/B8c1kNksg97JuomELlWyUyVF+sxmeERkcLYFaKPTZytP0L3dmCFXaw==", "dev": true, "dependencies": { - "@nrwl/devkit": "18.0.4", + "@nrwl/devkit": "17.2.8", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", - "semver": "^7.5.3", + "semver": "7.5.3", "tmp": "~0.2.1", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" + "tslib": "^2.3.0" }, "peerDependencies": { "nx": ">= 16 <= 18" @@ -4547,9 +4174,9 @@ } }, "node_modules/@nx/devkit/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -4568,9 +4195,9 @@ "dev": true }, "node_modules/@nx/nx-darwin-arm64": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.0.4.tgz", - "integrity": "sha512-9KJVONxUwdnFHHRNocsg7q5pliOTTfbjlr3rvhLuroV5HeTJFhUipKCQrVEhLy8e4auRdLuSz/HsgpJat3Z2cg==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.2.8.tgz", + "integrity": "sha512-dMb0uxug4hM7tusISAU1TfkDK3ixYmzc1zhHSZwpR7yKJIyKLtUpBTbryt8nyso37AS1yH+dmfh2Fj2WxfBHTg==", "cpu": [ "arm64" ], @@ -4584,9 +4211,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-18.0.4.tgz", - "integrity": "sha512-rFKHjeU0Ngz1R7UJAsbncpqwuFDjUdpcvI783r6s2eP7JoiiwtDBXvDcHiy8Odk0lPYmwDELaFZBhvdENqaDNA==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.8.tgz", + "integrity": "sha512-0cXzp1tGr7/6lJel102QiLA4NkaLCkQJj6VzwbwuvmuCDxPbpmbz7HC1tUteijKBtOcdXit1/MEoEU007To8Bw==", "cpu": [ "x64" ], @@ -4600,9 +4227,9 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.0.4.tgz", - "integrity": "sha512-jJx47wgRoUxVpQ+WG5+yLdxtJVuVgjphiTMRc0LOfUwKQaEHWyCA0hMK5fNmo0FAHIhGVCb/j2j9FxnCWTWpkg==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.8.tgz", + "integrity": "sha512-YFMgx5Qpp2btCgvaniDGdu7Ctj56bfFvbbaHQWmOeBPK1krNDp2mqp8HK6ZKOfEuDJGOYAp7HDtCLvdZKvJxzA==", "cpu": [ "x64" ], @@ -4616,9 +4243,9 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.0.4.tgz", - "integrity": "sha512-C3qWbFhEMIdTzvAHlIUHecZN3YBu7bx3S0p3gPNGmEMUMbYHP2zMlimBrZIbAxzntyGqWCqhXiFB21QhJ0t1Dw==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.8.tgz", + "integrity": "sha512-iN2my6MrhLRkVDtdivQHugK8YmR7URo1wU9UDuHQ55z3tEcny7LV3W9NSsY9UYPK/FrxdDfevj0r2hgSSdhnzA==", "cpu": [ "arm" ], @@ -4632,9 +4259,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.0.4.tgz", - "integrity": "sha512-PxVMh9ikp8Q3hKagb66FAsek8O/08GcMF5dXBH7xc5AiQMaZ6Az/gAXOeHp274nmu3StQEpl9Il/YH6Z9f4V0w==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.8.tgz", + "integrity": "sha512-Iy8BjoW6mOKrSMiTGujUcNdv+xSM1DALTH6y3iLvNDkGbjGK1Re6QNnJAzqcXyDpv32Q4Fc57PmuexyysZxIGg==", "cpu": [ "arm64" ], @@ -4648,9 +4275,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.0.4.tgz", - "integrity": "sha512-Iz7Z4h2/dXJJvBcyeRHa+d3Ncc4Qz+OiGm6iRDXv4zjFm5EyC1tkSZIFNlNiRjmTToNHFr4savrCjCh8wRYejw==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.8.tgz", + "integrity": "sha512-9wkAxWzknjpzdofL1xjtU6qPFF1PHlvKCZI3hgEYJDo4mQiatGI+7Ttko+lx/ZMP6v4+Umjtgq7+qWrApeKamQ==", "cpu": [ "arm64" ], @@ -4664,9 +4291,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.0.4.tgz", - "integrity": "sha512-BVLkegIwxHnEB64VBraBxyC01D3C3dVNxq2b4iNaqr4mpWNmos+G/mvcTU3NS7W8ZjpBjlXgdEkpgkl2hMKTEA==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.8.tgz", + "integrity": "sha512-sjG1bwGsjLxToasZ3lShildFsF0eyeGu+pOQZIp9+gjFbeIkd19cTlCnHrOV9hoF364GuKSXQyUlwtFYFR4VTQ==", "cpu": [ "x64" ], @@ -4680,9 +4307,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.0.4.tgz", - "integrity": "sha512-WgVy41psjCE9uxjFi4P62UrWyKQ1e2IN2FZaIuwXEB9h8OU/+g9PFpL1Cs1llNoEKnapKXX4+9b5FHF9i7EKQw==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.8.tgz", + "integrity": "sha512-QiakXZ1xBCIptmkGEouLHQbcM4klQkcr+kEaz2PlNwy/sW3gH1b/1c0Ed5J1AN9xgQxWspriAONpScYBRgxdhA==", "cpu": [ "x64" ], @@ -4696,9 +4323,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.0.4.tgz", - "integrity": "sha512-YoxhOrVKnS+kcNTnCg9M61cbigzGErYgnlI8kdZzH2ArD7mhv8bfZnSZUInf5Y8oDBVpKusel7AkCSofzSwigA==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.8.tgz", + "integrity": "sha512-XBWUY/F/GU3vKN9CAxeI15gM4kr3GOBqnzFZzoZC4qJt2hKSSUEWsMgeZtsMgeqEClbi4ZyCCkY7YJgU32WUGA==", "cpu": [ "arm64" ], @@ -4712,9 +4339,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.0.4.tgz", - "integrity": "sha512-FdAdl5buvtUXp8hZVRkK0AZeiCu35l0u+yHsulNViYdh3OXRT1hYJ0CeqpxlLfvbHqB9JzDPtJtG0dpKHH/O0Q==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.8.tgz", + "integrity": "sha512-HTqDv+JThlLzbcEm/3f+LbS5/wYQWzb5YDXbP1wi7nlCTihNZOLNqGOkEmwlrR5tAdNHPRpHSmkYg4305W0CtA==", "cpu": [ "x64" ], @@ -4983,11 +4610,11 @@ } }, "node_modules/@percy/appium-app": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@percy/appium-app/-/appium-app-2.0.4.tgz", - "integrity": "sha512-H2TBFTOPJITmkhjudVPbhHZ1NXRl1P6ty+B67nWKzExdjWR6cfuTedDh/3N0qN49CI/gBPkIuskk5EekdPx8gg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@percy/appium-app/-/appium-app-2.0.3.tgz", + "integrity": "sha512-6INeUJSyK2LzWV4Cc9bszNqKr3/NLcjFelUC2grjPnm6+jLA29inBF4ZE3PeTfLeCSw/0jyCGWV5fr9AyxtzCA==", "dependencies": { - "@percy/sdk-utils": "^1.28.0", + "@percy/sdk-utils": "^1.27.0-beta.0", "tmp": "^0.2.1" }, "engines": { @@ -4995,19 +4622,19 @@ } }, "node_modules/@percy/sdk-utils": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@percy/sdk-utils/-/sdk-utils-1.28.0.tgz", - "integrity": "sha512-K4fziY+OXJJtNVfecO3jI3VQFuei2Lf8/5nlQvnx+U9v8fGFrkc0aE+gIlP3Ce5qzJbotgAlV1Dd0bZ2y7i7vw==", + "version": "1.27.7", + "resolved": "https://registry.npmjs.org/@percy/sdk-utils/-/sdk-utils-1.27.7.tgz", + "integrity": "sha512-E21dIEQ9wwGDno41FdMDYf6jJow5scbWGClqKE/ptB+950W4UF5C4hxhVVQoEJxDdLE/Gy/8ZJR7upvPHShWDg==", "engines": { "node": ">=14" } }, "node_modules/@percy/selenium-webdriver": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@percy/selenium-webdriver/-/selenium-webdriver-2.0.4.tgz", - "integrity": "sha512-KZshKLQKCFF6gxycu5kNCodQXu+m1Z2SfLKvnV8Ly3KhfUpDhuSg6ohhSOA4HHl0qqpaHf/sDzOV6TWbybTn8A==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@percy/selenium-webdriver/-/selenium-webdriver-2.0.3.tgz", + "integrity": "sha512-JfLJVRkwNfqVofe7iGKtoQbOcKSSj9t4pWFbSUk95JfwAA7b9/c+dlBsxgIRrdrMYzLRjnJkYAFSZkJ4F4A19A==", "dependencies": { - "@percy/sdk-utils": "^1.28.0", + "@percy/sdk-utils": "^1.27.2", "node-request-interceptor": "^0.6.3" }, "engines": { @@ -5616,9 +5243,9 @@ } }, "node_modules/@serenity-js/core": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/@serenity-js/core/-/core-3.17.0.tgz", - "integrity": "sha512-virYURHd3u7dBAn4b2tA1sFT6+dn/kfr3/N8iqz9esK8ORpwwSo8vFr7q78zJmpwBXMXo4PIQGWp9kleN5unHw==", + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/@serenity-js/core/-/core-3.15.1.tgz", + "integrity": "sha512-dtmWrCQw9VCUuG56vXmZis0eSN1ERed5SEKInUfvXuJqyXuvbW+kli2MRopYCNdPeP570PpMCSKmoQV+zpCl5Q==", "dev": true, "dependencies": { "@paralleldrive/cuid2": "2.2.2", @@ -5628,7 +5255,8 @@ "fast-glob": "3.3.2", "filenamify": "4.3.0", "graceful-fs": "4.2.11", - "semver": "7.6.0", + "moment": "2.30.1", + "semver": "7.5.4", "tiny-types": "1.21.0", "upath": "2.0.1", "validate-npm-package-name": "5.0.0" @@ -5689,15 +5317,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/@serenity-js/core/node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/@serenity-js/core/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -5711,9 +5330,9 @@ } }, "node_modules/@serenity-js/core/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -5744,9 +5363,9 @@ } }, "node_modules/@sigstore/core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.0.0.tgz", - "integrity": "sha512-dW2qjbWLRKGu6MIDUTBuJwXCnR8zivcSpf5inUzk7y84zqy/dji0/uahppoIgMoKeR+6pUZucrwHfkQQtiG9Rw==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-0.2.0.tgz", + "integrity": "sha512-THobAPPZR9pDH2CAvDLpkrYedt7BlZnsyxDe+Isq4ZmGfPy5juOFZq487vCU2EgKD7aHSiTfE/i7sN7aEdzQnA==", "dev": true, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -5884,9 +5503,9 @@ } }, "node_modules/@sigstore/sign/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -5980,13 +5599,13 @@ } }, "node_modules/@sigstore/verify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.0.0.tgz", - "integrity": "sha512-sRU6nblDBQ4pVTWni019Kij+XQj4RP75WXN5z3qHk81dt/L8A7r3v8RgRInTup4/Jf90WNods9CcbnWj7zJ26w==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-0.1.0.tgz", + "integrity": "sha512-2UzMNYAa/uaz11NhvgRnIQf4gpLTJ59bhb8ESXaoSS5sxedfS+eLak8bsdMc+qpNQfITUTFoSKFx5h8umlRRiA==", "dev": true, "dependencies": { "@sigstore/bundle": "^2.1.1", - "@sigstore/core": "^1.0.0", + "@sigstore/core": "^0.2.0", "@sigstore/protobuf-specs": "^0.2.1" }, "engines": { @@ -6070,9 +5689,9 @@ } }, "node_modules/@smithy/core": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.2.tgz", - "integrity": "sha512-tYDmTp0f2TZVE18jAOH1PnmkngLQ+dOGUlMd1u67s87ieueNeyqhja6z/Z4MxhybEiXKOWFOmGjfTZWFxljwJw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.1.tgz", + "integrity": "sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q==", "dev": true, "dependencies": { "@smithy/middleware-endpoint": "^2.4.1", @@ -6580,9 +6199,9 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.0.tgz", - "integrity": "sha512-iFJp/N4EtkanFpBUtSrrIbtOIBf69KNuve03ic1afhJ9/korDxdM0c6cCH4Ehj/smI9pDCfVv+bqT3xZjF2WaA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz", + "integrity": "sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA==", "dev": true, "dependencies": { "@smithy/config-resolver": "^2.1.1", @@ -6709,9 +6328,9 @@ } }, "node_modules/@stencil/core": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.12.2.tgz", - "integrity": "sha512-WEMpoqwMV4hY/ab2z9NxRhSeZwuKEugjyn6Vd+qA9xqZh6VNUL27QbP8vCa7IeqD4Zql4JBtKu3lVuBHutWE6w==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.11.0.tgz", + "integrity": "sha512-zsKhgIkTGo+s7IthitxR/MKiMS3Ck1yIypOdXr0aE6ofboKqe9NdffTcxZ0vel0wD2bZYOb6WfPMzuhRKk6+FA==", "dev": true, "bin": { "stencil": "bin/stencil" @@ -6722,12 +6341,12 @@ } }, "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.2.tgz", - "integrity": "sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.1.tgz", + "integrity": "sha512-CGURX6Ps+TkOovK6xV+Y2rn8JKa8ZPUHPZ/NKgCxAmgBrXReavzFl8aOSCj3kQ1xqT7yGJj53hjcV/gqwDAaWA==", "dev": true, "dependencies": { - "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0", + "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0-next.0 || ^2.0.0", "debug": "^4.3.4", "deepmerge": "^4.3.1", "kleur": "^4.1.5", @@ -7401,9 +7020,9 @@ } }, "node_modules/@types/node": { - "version": "20.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz", - "integrity": "sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==", + "version": "20.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.10.tgz", + "integrity": "sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==", "dependencies": { "undici-types": "~5.26.4" } @@ -7429,9 +7048,7 @@ "version": "15.7.11", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "node_modules/@types/qs": { "version": "6.9.11", @@ -7446,12 +7063,10 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.2.55", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.55.tgz", - "integrity": "sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA==", + "version": "18.2.48", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", + "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", "dev": true, - "optional": true, - "peer": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -7488,9 +7103,7 @@ "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "node_modules/@types/semver": { "version": "7.5.6", @@ -7594,9 +7207,9 @@ } }, "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", + "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==" }, "node_modules/@types/which": { "version": "2.0.2", @@ -7634,16 +7247,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.1.tgz", - "integrity": "sha512-OLvgeBv3vXlnnJGIAgCLYKjgMEU+wBGj07MQ/nxAaON+3mLzX7mJbhRYrVGiVvFiXtwFlkcBa/TtmglHy0UbzQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.1.tgz", + "integrity": "sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.0.1", - "@typescript-eslint/type-utils": "7.0.1", - "@typescript-eslint/utils": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/type-utils": "6.19.1", + "@typescript-eslint/utils": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -7659,8 +7272,8 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -7668,6 +7281,53 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz", + "integrity": "sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz", + "integrity": "sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz", + "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.19.1", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -7681,9 +7341,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7702,15 +7362,15 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.0.1.tgz", - "integrity": "sha512-8GcRRZNzaHxKzBPU3tKtFNing571/GwPBeCvmAUw0yBtfE2XVd0zFKJIMSWkHJcPQi0ekxjIts6L/rrZq5cxGQ==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.0.tgz", + "integrity": "sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.0.1", - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/typescript-estree": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", "debug": "^4.3.4" }, "engines": { @@ -7721,7 +7381,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -7730,13 +7390,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.0.1.tgz", - "integrity": "sha512-v7/T7As10g3bcWOOPAcbnMDuvctHzCFYCG/8R4bK4iYzdFqsZTbXGln0cZNVcwQcwewsYU2BJLay8j0/4zOk4w==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz", + "integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1" + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -7747,13 +7407,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.0.1.tgz", - "integrity": "sha512-YtT9UcstTG5Yqy4xtLiClm1ZpM/pWVGFnkAa90UfdkkZsR1eP2mR/1jbHeYp8Ay1l1JHPyGvoUYR6o3On5Nhmw==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.1.tgz", + "integrity": "sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.0.1", - "@typescript-eslint/utils": "7.0.1", + "@typescript-eslint/typescript-estree": "6.19.1", + "@typescript-eslint/utils": "6.19.1", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -7765,7 +7425,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -7773,10 +7433,101 @@ } } }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz", + "integrity": "sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz", + "integrity": "sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz", + "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.19.1", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/types": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.0.1.tgz", - "integrity": "sha512-uJDfmirz4FHib6ENju/7cz9SdMSkeVvJDK3VcMFvf/hAShg8C74FW+06MaQPODHfDJp/z/zHfgawIJRjlu0RLg==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz", + "integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -7787,13 +7538,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.1.tgz", - "integrity": "sha512-SO9wHb6ph0/FN5OJxH4MiPscGah5wjOd0RRpaLvuBv9g8565Fgu0uMySFEPqwPHiQU90yzJ2FjRYKGrAhS1xig==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz", + "integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7827,9 +7578,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7848,17 +7599,17 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.0.1.tgz", - "integrity": "sha512-oe4his30JgPbnv+9Vef1h48jm0S6ft4mNwi9wj7bX10joGn07QRfqIqFHoMiajrtoU88cIhXf8ahwgrcbNLgPA==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.1.tgz", + "integrity": "sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.0.1", - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/typescript-estree": "7.0.1", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/typescript-estree": "6.19.1", "semver": "^7.5.4" }, "engines": { @@ -7869,7 +7620,82 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz", + "integrity": "sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz", + "integrity": "sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz", + "integrity": "sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz", + "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.19.1", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { @@ -7885,9 +7711,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7906,12 +7732,12 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.1.tgz", - "integrity": "sha512-hwAgrOyk++RTXrP4KzCg7zB2U0xt7RUU0ZdMSCsqF3eKUwkdXUMyTb0qdCuji7VIbcpG62kKTU9M1J1c9UpFBw==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz", + "integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.0.1", + "@typescript-eslint/types": "6.19.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -7948,9 +7774,9 @@ } }, "node_modules/@vitejs/plugin-vue": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", - "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz", + "integrity": "sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA==", "dev": true, "engines": { "node": "^18.0.0 || >=20.0.0" @@ -7988,13 +7814,13 @@ } }, "node_modules/@vitest/expect": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.2.tgz", - "integrity": "sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.1.tgz", + "integrity": "sha512-/bqGXcHfyKgFWYwIgFr1QYDaR9e64pRKxgBNWNXPefPFRhgm+K3+a/dS0cUGEreWngets3dlr8w8SBRw2fCfFQ==", "dev": true, "dependencies": { - "@vitest/spy": "1.2.2", - "@vitest/utils": "1.2.2", + "@vitest/spy": "1.2.1", + "@vitest/utils": "1.2.1", "chai": "^4.3.10" }, "funding": { @@ -8002,12 +7828,12 @@ } }, "node_modules/@vitest/runner": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.2.tgz", - "integrity": "sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.1.tgz", + "integrity": "sha512-zc2dP5LQpzNzbpaBt7OeYAvmIsRS1KpZQw4G3WM/yqSV1cQKNKwLGmnm79GyZZjMhQGlRcSFMImLjZaUQvNVZQ==", "dev": true, "dependencies": { - "@vitest/utils": "1.2.2", + "@vitest/utils": "1.2.1", "p-limit": "^5.0.0", "pathe": "^1.1.1" }, @@ -8056,9 +7882,9 @@ } }, "node_modules/@vitest/spy": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.2.tgz", - "integrity": "sha512-k9Gcahssw8d7X3pSLq3e3XEu/0L78mUkCjivUqCQeXJm9clfXR/Td8+AP+VC1O6fKPIDLcHDTAmBOINVuv6+7g==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.1.tgz", + "integrity": "sha512-vG3a/b7INKH7L49Lbp0IWrG6sw9j4waWAucwnksPB1r1FTJgV7nkBByd9ufzu6VWya/QTvQW4V9FShZbZIB2UQ==", "dependencies": { "tinyspy": "^2.2.0" }, @@ -8067,9 +7893,9 @@ } }, "node_modules/@vitest/utils": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.2.tgz", - "integrity": "sha512-WKITBHLsBHlpjnDQahr+XK6RE7MiAsgrIkr0pGhQ9ygoxBfUeG0lUG5iLlzqjmKSlBv3+j5EGsriBzh+C3Tq9g==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-bsH6WVZYe/J2v3+81M5LDU8kW76xWObKIURpPrOXm2pjBniBu2MERI/XP60GpS4PHU3jyK50LUutOwrx4CyHUg==", "dev": true, "dependencies": { "diff-sequences": "^29.6.3", @@ -8516,31 +8342,11 @@ } }, "node_modules/allure-js-commons": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/allure-js-commons/-/allure-js-commons-2.12.1.tgz", - "integrity": "sha512-gx8DBwUrXpfoielzTp8bvUIa+IERaO0ZMlu7NioembuHawVOINQSuX63o1TH1S8k7K4A2gHoiHf+v2x4BAmAaQ==", + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/allure-js-commons/-/allure-js-commons-2.11.1.tgz", + "integrity": "sha512-A7Eiofwj46JBbK2XsM9FKmbhTYrdok+5M2EzI5ueJ/S+T12xvINBrrKdtjkqFvz/oH9qA/iKHawlJc4MSQbxLQ==", "dependencies": { - "properties": "^1.2.1", - "strip-ansi": "^5.2.0" - } - }, - "node_modules/allure-js-commons/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/allure-js-commons/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "properties": "^1.2.1" } }, "node_modules/ansi-align": { @@ -8988,9 +8794,9 @@ } }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", "dev": true, "dependencies": { "follow-redirects": "^1.15.4", @@ -10589,9 +10395,15 @@ } }, "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -10604,9 +10416,6 @@ "engines": { "node": ">= 8.10.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -11591,9 +11400,9 @@ } }, "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -12046,8 +11855,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, - "peer": true + "dev": true }, "node_modules/csv-stringify": { "version": "6.4.5", @@ -12603,14 +12411,14 @@ "link": true }, "node_modules/devtools-protocol": { - "version": "0.0.1260888", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1260888.tgz", - "integrity": "sha512-9rTIZ4ZjWwalCPiaY+kPiALLfOKgAz5CTi/Zb1L+qSZ8PH3zVo1T8JcgXIIqg1iM3pZ6hF+n9xO5r2jZ/SF+jg==" + "version": "0.0.1249869", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1249869.tgz", + "integrity": "sha512-Ctp4hInA0BEavlUoRy9mhGq0i+JSo/AwVyX2EFgZmV1kYB+Zq+EMBAn52QWu6FbRr10hRb6pBl420upbp4++vg==" }, "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "engines": { "node": ">=0.3.1" } @@ -12736,14 +12544,14 @@ } }, "node_modules/dotenv": { - "version": "16.4.4", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.4.tgz", - "integrity": "sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==", + "version": "16.4.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz", + "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==", "engines": { "node": ">=12" }, "funding": { - "url": "https://dotenvx.com" + "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, "node_modules/dotenv-expand": { @@ -12879,12 +12687,12 @@ } }, "node_modules/edgedriver": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/edgedriver/-/edgedriver-5.3.10.tgz", - "integrity": "sha512-RFSHYMNtcF1PjaGZCA2rdQQ8hSTLPZgcYgeY1V6dC+tR4NhZXwFAku+8hCbRYh7ZlwKKrTbVu9FwknjFddIuuw==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/edgedriver/-/edgedriver-5.3.9.tgz", + "integrity": "sha512-G0wNgFMFRDnFfKaXG2R6HiyVHqhKwdQ3EgoxW3wPlns2wKqem7F+HgkWBcevN7Vz0nN4AXtskID7/6jsYDXcKw==", "hasInstallScript": true, "dependencies": { - "@wdio/logger": "^8.28.0", + "@wdio/logger": "^8.16.17", "decamelize": "^6.0.0", "edge-paths": "^3.0.5", "node-fetch": "^3.3.2", @@ -13959,9 +13767,9 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "51.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-51.0.1.tgz", - "integrity": "sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==", + "version": "50.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-50.0.1.tgz", + "integrity": "sha512-KxenCZxqSYW0GWHH18okDlOQcpezcitm5aOSz6EnobyJ6BIByiPDviQRjJIUAjG/tMN11958MxaQ+qCoU6lfDA==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", @@ -14389,11 +14197,11 @@ } }, "node_modules/expect-webdriverio": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.11.8.tgz", - "integrity": "sha512-BRezX8yEWZN7H5eYde/4EeDbVu8HRWq7VKyRrx4s2RnMa23wF+axZC83a4F/eezP6Kek700n3dA3Ph8RSE6GAQ==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.9.3.tgz", + "integrity": "sha512-ASHsFc/QaK5ipF4ct3e8hd3elm8wNXk/Qa3EemtYDmfUQ4uzwqDf75m/QFQpwVNCjEpkNP7Be/6X9kz7bN0P9Q==", "dependencies": { - "@vitest/snapshot": "^1.2.2", + "@vitest/snapshot": "^1.2.1", "expect": "^29.7.0", "jest-matcher-utils": "^29.7.0", "lodash.isequal": "^4.5.0" @@ -14402,9 +14210,9 @@ "node": ">=16 || >=18 || >=20" }, "optionalDependencies": { - "@wdio/globals": "^8.29.3", - "@wdio/logger": "^8.28.0", - "webdriverio": "^8.29.3" + "@wdio/globals": "^8.27.0", + "@wdio/logger": "^8.24.12", + "webdriverio": "^8.27.0" } }, "node_modules/exponential-backoff": { @@ -14565,15 +14373,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/extract-zip/node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -14714,25 +14513,29 @@ } }, "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", "dependencies": { - "escape-string-regexp": "^1.0.5" + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" }, "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "engines": { - "node": ">=0.8.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/file-entry-cache": { @@ -15336,12 +15139,12 @@ } }, "node_modules/geckodriver": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-4.3.2.tgz", - "integrity": "sha512-TNOoy+ULXJWI5XOq7CXD3PAD9TJa4NjMe7nKUXjlIsf+vezuaRsFgPwcgYdEem1K7106wabYsqr7Kqn51g0sJg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-4.3.1.tgz", + "integrity": "sha512-ol7JLsj55o5k+z7YzeSy2mdJROXMAxIa+uzr3A1yEMr5HISqQOTslE3ZeARcxR4jpAY3fxmHM+sq32qbe/eXfA==", "hasInstallScript": true, "dependencies": { - "@wdio/logger": "^8.28.0", + "@wdio/logger": "^8.24.12", "decamelize": "^6.0.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", @@ -15749,9 +15552,9 @@ } }, "node_modules/git-semver-tags/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -16453,15 +16256,15 @@ } }, "node_modules/husky": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", - "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true, "bin": { - "husky": "bin.mjs" + "husky": "lib/bin.js" }, "engines": { - "node": ">=18" + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/typicode" @@ -16692,9 +16495,9 @@ } }, "node_modules/init-package-json/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -16725,18 +16528,17 @@ "dev": true }, "node_modules/inquirer": { - "version": "9.2.14", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.14.tgz", - "integrity": "sha512-4ByIMt677Iz5AvjyKrDpzaepIyMewNvDcvwpVVRZNmy9dLakVoVgdCHZXbK1SlVJra1db0JZ6XkJyHsanpdrdQ==", - "dev": true, + "version": "9.2.12", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz", + "integrity": "sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==", "dependencies": { - "@ljharb/through": "^2.3.12", + "@ljharb/through": "^2.3.11", "ansi-escapes": "^4.3.2", "chalk": "^5.3.0", "cli-cursor": "^3.1.0", "cli-width": "^4.1.0", "external-editor": "^3.1.0", - "figures": "^3.2.0", + "figures": "^5.0.0", "lodash": "^4.17.21", "mute-stream": "1.0.0", "ora": "^5.4.1", @@ -16747,7 +16549,7 @@ "wrap-ansi": "^6.2.0" }, "engines": { - "node": ">=18" + "node": ">=14.18.0" } }, "node_modules/internal-slot": { @@ -18025,9 +17827,9 @@ } }, "node_modules/junit-report-builder": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/junit-report-builder/-/junit-report-builder-3.2.1.tgz", - "integrity": "sha512-IMCp5XyDQ4YESDE4Za7im3buM0/7cMnRfe17k2X8B05FnUl9vqnaliX6cgOEmPIeWKfJrEe/gANRq/XgqttCqQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junit-report-builder/-/junit-report-builder-3.1.0.tgz", + "integrity": "sha512-uKcPKbjl/v3pqQUuQuCehmuObAb9adZiZleKp0JijMmKPpBh5rl9YvyPjVqzaLkA0dROnMnQvjXQF37VbYoofw==", "dependencies": { "date-format": "4.0.3", "lodash": "^4.17.21", @@ -18178,14 +17980,14 @@ } }, "node_modules/lerna": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.1.2.tgz", - "integrity": "sha512-RCyBAn3XsqqvHbz3TxLfD7ylqzCi1A2UJnFEZmhURgx589vM3qYWQa/uOMeEEf565q6cAdtmulITciX1wgkAtw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.0.2.tgz", + "integrity": "sha512-nnOIGI5V5Af9gfraNcMVoV1Fry/y7/h3nCQYk0/CMzBYDD+xbNL3DH8+c82AJkNR5ABslmpXjW4DLJ11/1b3CQ==", "dev": true, "dependencies": { - "@lerna/create": "8.1.2", + "@lerna/create": "8.0.2", "@npmcli/run-script": "7.0.2", - "@nx/devkit": ">=17.1.2 < 19", + "@nx/devkit": ">=17.1.2 < 18", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "19.0.11", "byte-size": "8.1.1", @@ -18228,7 +18030,7 @@ "npm-packlist": "5.1.1", "npm-registry-fetch": "^14.0.5", "npmlog": "^6.0.2", - "nx": ">=17.1.2 < 19", + "nx": ">=17.1.2 < 18", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-pipe": "3.1.0", @@ -18570,6 +18372,15 @@ } } }, + "node_modules/lerna/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/lerna/node_modules/execa": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", @@ -18593,6 +18404,21 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/lerna/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lerna/node_modules/get-port": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", @@ -19126,9 +18952,9 @@ } }, "node_modules/libnpmpublish/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -19472,11 +19298,11 @@ } }, "node_modules/locate-app": { - "version": "2.2.18", - "resolved": "https://registry.npmjs.org/locate-app/-/locate-app-2.2.18.tgz", - "integrity": "sha512-F1W7AospcYxSSBh8b2Km34/0t9tpLolXxzIbjnsyWdv5YgM2S/xWs0FRubqOXcTptsgrPCMKMszb9o1v1YBYVQ==", + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/locate-app/-/locate-app-2.2.11.tgz", + "integrity": "sha512-dSlpKcHeEUUxOgs15WUfRmnaLzFaCKCE0ktuaPIBrw2BFsb2QkqucJNlEREeCyrsPa0VfY2AYa+toGabI9Pffg==", "dependencies": { - "n12": "1.8.21", + "n12": "1.8.14", "type-fest": "2.13.0", "userhome": "1.0.0" } @@ -20545,9 +20371,9 @@ } }, "node_modules/mocha": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", - "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -20556,12 +20382,13 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "8.1.0", + "glob": "7.2.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", + "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -20576,6 +20403,10 @@ }, "engines": { "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/ansi-colors": { @@ -20605,32 +20436,6 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -20666,32 +20471,42 @@ } }, "node_modules/mocha/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=12" + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/mocha/node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "is-glob": "^4.0.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 6" + "node": "*" } }, "node_modules/mocha/node_modules/js-yaml": { @@ -20721,6 +20536,17 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/mocha/node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -20822,6 +20648,15 @@ "node": ">=0.10.0" } }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -20941,9 +20776,9 @@ } }, "node_modules/n12": { - "version": "1.8.21", - "resolved": "https://registry.npmjs.org/n12/-/n12-1.8.21.tgz", - "integrity": "sha512-4NVVx4jW9QhmGyI80v9tpK6S0ZP3pO8Z2X0YKE6whBLDz5MjOWmpQDVS5eh5dfXTn9t1sSFaw1HM8NB4KN6wwQ==" + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/n12/-/n12-1.8.14.tgz", + "integrity": "sha512-X4UcLstb71zFbrVjJfUszt5icPROLWWFAhLEaJOlDaSdd3BKzkXu4bEnHOX7pyZPWSSMQ4YSfpnQZxfiq4KESA==" }, "node_modules/nanoid": { "version": "3.3.7", @@ -21151,9 +20986,9 @@ } }, "node_modules/node-gyp/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -21211,9 +21046,9 @@ } }, "node_modules/node-gyp/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -21388,9 +21223,9 @@ } }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -21461,9 +21296,9 @@ } }, "node_modules/npm-install-checks/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -21532,9 +21367,9 @@ } }, "node_modules/npm-package-arg/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -21638,9 +21473,9 @@ } }, "node_modules/npm-pick-manifest/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -21671,9 +21506,9 @@ } }, "node_modules/npm-pick-manifest/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -22206,17 +22041,17 @@ "dev": true }, "node_modules/nx": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/nx/-/nx-18.0.4.tgz", - "integrity": "sha512-Njb1fGppOw/wM7nOA1hYlLduV2aL4PdXSv5QS5cVYicHT5tw5RnG/0z4j9e6QfFj2EydxVeDUtlGR98diZ3/Yw==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/nx/-/nx-17.2.8.tgz", + "integrity": "sha512-rM5zXbuXLEuqQqcjVjClyvHwRJwt+NVImR2A6KFNG40Z60HP6X12wAxxeLHF5kXXTDRU0PFhf/yACibrpbPrAw==", "dev": true, "hasInstallScript": true, "dependencies": { - "@nrwl/tao": "18.0.4", + "@nrwl/tao": "17.2.8", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.6", - "axios": "^1.6.0", + "axios": "^1.5.1", "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", @@ -22227,17 +22062,17 @@ "figures": "3.2.0", "flat": "^5.0.2", "fs-extra": "^11.1.0", + "glob": "7.1.4", "ignore": "^5.0.4", "jest-diff": "^29.4.1", "js-yaml": "4.1.0", "jsonc-parser": "3.2.0", "lines-and-columns": "~2.0.3", - "minimatch": "9.0.3", + "minimatch": "3.0.5", "node-machine-id": "1.1.12", "npm-run-path": "^4.0.1", "open": "^8.4.0", - "ora": "5.3.0", - "semver": "^7.5.3", + "semver": "7.5.3", "string-width": "^4.2.3", "strong-log-transformer": "^2.1.0", "tar-stream": "~2.2.0", @@ -22252,19 +22087,19 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "18.0.4", - "@nx/nx-darwin-x64": "18.0.4", - "@nx/nx-freebsd-x64": "18.0.4", - "@nx/nx-linux-arm-gnueabihf": "18.0.4", - "@nx/nx-linux-arm64-gnu": "18.0.4", - "@nx/nx-linux-arm64-musl": "18.0.4", - "@nx/nx-linux-x64-gnu": "18.0.4", - "@nx/nx-linux-x64-musl": "18.0.4", - "@nx/nx-win32-arm64-msvc": "18.0.4", - "@nx/nx-win32-x64-msvc": "18.0.4" + "@nx/nx-darwin-arm64": "17.2.8", + "@nx/nx-darwin-x64": "17.2.8", + "@nx/nx-freebsd-x64": "17.2.8", + "@nx/nx-linux-arm-gnueabihf": "17.2.8", + "@nx/nx-linux-arm64-gnu": "17.2.8", + "@nx/nx-linux-arm64-musl": "17.2.8", + "@nx/nx-linux-x64-gnu": "17.2.8", + "@nx/nx-linux-x64-musl": "17.2.8", + "@nx/nx-win32-arm64-msvc": "17.2.8", + "@nx/nx-win32-x64-msvc": "17.2.8" }, "peerDependencies": { - "@swc-node/register": "^1.8.0", + "@swc-node/register": "^1.6.7", "@swc/core": "^1.3.85" }, "peerDependenciesMeta": { @@ -22297,6 +22132,16 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/nx/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/nx/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -22355,6 +22200,47 @@ "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, + "node_modules/nx/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/nx/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/nx/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -22379,44 +22265,34 @@ "node": ">=10" } }, - "node_modules/nx/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "dependencies": { - "path-key": "^3.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/nx/node_modules/ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "node_modules/nx/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "path-key": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/nx/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -23323,13 +23199,13 @@ } }, "node_modules/pacote/node_modules/@sigstore/sign": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.2.tgz", - "integrity": "sha512-mAifqvvGOCkb5BJ5d/SRrVP5+kKCGxtcHuti6lgqZalIfNxikxlJMMptOqFp9+xV5LAnJMSaMWtzvcgNZ3PlPA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.1.tgz", + "integrity": "sha512-U5sKQEj+faE1MsnLou1f4DQQHeFZay+V9s9768lw48J4pKykPj34rWyI1lsMOGJ3Mae47Ye6q3HAJvgXO21rkQ==", "dev": true, "dependencies": { "@sigstore/bundle": "^2.1.1", - "@sigstore/core": "^1.0.0", + "@sigstore/core": "^0.2.0", "@sigstore/protobuf-specs": "^0.2.1", "make-fetch-happen": "^13.0.0" }, @@ -23441,9 +23317,9 @@ } }, "node_modules/pacote/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -23585,9 +23461,9 @@ } }, "node_modules/pacote/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -23612,17 +23488,17 @@ } }, "node_modules/pacote/node_modules/sigstore": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.2.1.tgz", - "integrity": "sha512-OBBSKvmjr4DCyUb+IC2p7wooOCsCNwaqvCilTJVNPo0y8lJl+LsCrfz4LtMwnw3Gn+8frt816wi1+DWZTUCpBQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.2.0.tgz", + "integrity": "sha512-fcU9clHwEss2/M/11FFM8Jwc4PjBgbhXoNskoK5guoK0qGQBSeUbQZRJ+B2fDFIvhyf0gqCaPrel9mszbhAxug==", "dev": true, "dependencies": { "@sigstore/bundle": "^2.1.1", - "@sigstore/core": "^1.0.0", + "@sigstore/core": "^0.2.0", "@sigstore/protobuf-specs": "^0.2.1", - "@sigstore/sign": "^2.2.2", + "@sigstore/sign": "^2.2.1", "@sigstore/tuf": "^2.3.0", - "@sigstore/verify": "^1.0.0" + "@sigstore/verify": "^0.1.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -24914,9 +24790,9 @@ } }, "node_modules/read-package-json/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -25488,6 +25364,18 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, + "node_modules/resend": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/resend/-/resend-3.1.0.tgz", + "integrity": "sha512-H+Ll0bAim1L1slAGzjPZlYAlWqihHAdCM14POqJ0AUgEPfwZQ3Eb6Z9HCO5Wsi3IDMHihPx+O77kzgprj5CchQ==", + "dev": true, + "dependencies": { + "@react-email/render": "0.0.12" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -26632,9 +26520,9 @@ } }, "node_modules/sigstore/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -28279,9 +28167,9 @@ } }, "node_modules/tuf-js/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -28896,6 +28784,15 @@ "punycode": "^2.1.0" } }, + "node_modules/url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -29081,9 +28978,9 @@ } }, "node_modules/vite-node": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.2.tgz", - "integrity": "sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.1.tgz", + "integrity": "sha512-fNzHmQUSOY+y30naohBvSW7pPn/xn3Ib/uqm+5wAJQJiqQsU0NBR78XdRJb04l4bOFKjpTWld0XAfkKlrDbySg==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -29524,16 +29421,16 @@ } }, "node_modules/vitest": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.2.tgz", - "integrity": "sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.1.tgz", + "integrity": "sha512-TRph8N8rnSDa5M2wKWJCMnztCZS9cDcgVTQ6tsTFTG/odHJ4l5yNVqvbeDJYJRZ6is3uxaEpFs8LL6QM+YFSdA==", "dev": true, "dependencies": { - "@vitest/expect": "1.2.2", - "@vitest/runner": "1.2.2", - "@vitest/snapshot": "1.2.2", - "@vitest/spy": "1.2.2", - "@vitest/utils": "1.2.2", + "@vitest/expect": "1.2.1", + "@vitest/runner": "1.2.1", + "@vitest/snapshot": "1.2.1", + "@vitest/spy": "1.2.1", + "@vitest/utils": "1.2.1", "acorn-walk": "^8.3.2", "cac": "^6.7.14", "chai": "^4.3.10", @@ -29546,9 +29443,9 @@ "std-env": "^3.5.0", "strip-literal": "^1.3.0", "tinybench": "^2.5.1", - "tinypool": "^0.8.2", + "tinypool": "^0.8.1", "vite": "^5.0.0", - "vite-node": "1.2.2", + "vite-node": "1.2.1", "why-is-node-running": "^2.2.2" }, "bin": { @@ -29589,6 +29486,20 @@ } } }, + "node_modules/vitest/node_modules/@vitest/snapshot": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.1.tgz", + "integrity": "sha512-Tmp/IcYEemKaqAYCS08sh0vORLJkMr0NRV76Gl8sHGxXT5151cITJCET20063wk0Yr/1koQ6dnmP6eEqezmd/Q==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/vitest/node_modules/acorn-walk": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", @@ -29878,9 +29789,9 @@ } }, "node_modules/winston-transport": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", - "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz", + "integrity": "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==", "dependencies": { "logform": "^2.3.2", "readable-stream": "^3.6.0", @@ -30281,12 +30192,12 @@ } }, "node_modules/yauzl": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.0.0.tgz", - "integrity": "sha512-6LiN2QaAWal/+uTf0N5nt4oAsSgddNO69kkLF0lXFY8J8Zt9WrcJq9saIIsg9vyOAnQ9m/dxoyPRMzo3G5BZHg==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dependencies": { "buffer-crc32": "~0.2.3", - "pend": "~1.2.0" + "fd-slicer": "~1.1.0" } }, "node_modules/yazl": { @@ -30353,15 +30264,15 @@ } }, "packages/devtools": { - "version": "8.32.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@types/node": "^20.1.0", - "@wdio/config": "8.31.1", + "@wdio/config": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/protocols": "8.24.12", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "chrome-launcher": "^1.0.0", "edge-paths": "^3.0.5", "import-meta-resolve": "^4.0.0", @@ -30374,7 +30285,7 @@ "devDependencies": { "@types/ua-parser-js": "^0.7.33", "@types/uuid": "^9.0.0", - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" }, "engines": { "node": "^16.13 || >=18" @@ -30405,12 +30316,12 @@ }, "packages/wdio-allure-reporter": { "name": "@wdio/allure-reporter", - "version": "8.31.1", + "version": "8.29.2", "license": "MIT", "dependencies": { "@types/node": "^20.1.0", - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "allure-js-commons": "^2.5.0", "csv-stringify": "^6.0.4", "strip-ansi": "^7.1.0" @@ -30446,17 +30357,17 @@ }, "packages/wdio-appium-service": { "name": "@wdio/appium-service", - "version": "8.32.1", + "version": "8.29.1", "license": "MIT", "dependencies": { - "@wdio/config": "8.31.1", + "@wdio/config": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "get-port": "^7.0.0", "import-meta-resolve": "^4.0.0", "param-case": "^3.0.4", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "engines": { "node": "^16.13 || >=18" @@ -30464,24 +30375,24 @@ }, "packages/wdio-browser-runner": { "name": "@wdio/browser-runner", - "version": "8.32.1", + "version": "8.29.2", "license": "MIT", "dependencies": { "@babel/plugin-proposal-class-properties": "^7.18.6", "@originjs/vite-plugin-commonjs": "^1.0.3", "@types/istanbul-lib-source-maps": "^4.0.1", "@vitest/spy": "^1.0.1", - "@wdio/globals": "8.32.1", - "@wdio/local-runner": "8.32.1", + "@wdio/globals": "8.29.1", + "@wdio/local-runner": "8.29.2", "@wdio/logger": "8.28.0", - "@wdio/mocha-framework": "8.31.1", - "@wdio/protocols": "8.32.0", - "@wdio/runner": "8.32.1", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/mocha-framework": "8.29.1", + "@wdio/protocols": "^8.24.12", + "@wdio/runner": "8.29.2", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "deepmerge-ts": "^5.0.0", "expect": "^29.7.0", - "expect-webdriverio": "^4.11.2", + "expect-webdriverio": "^4.9.3", "get-port": "^7.0.0", "import-meta-resolve": "^4.0.0", "istanbul-lib-coverage": "^3.2.0", @@ -30496,8 +30407,8 @@ "vite": "~4.5.0", "vite-plugin-istanbul": "^5.0.0", "vite-plugin-top-level-await": "^1.3.0", - "webdriver": "8.32.0", - "webdriverio": "8.32.1" + "webdriver": "8.29.1", + "webdriverio": "8.29.1" }, "engines": { "node": "^16.13 || >=18" @@ -30574,15 +30485,15 @@ }, "packages/wdio-browserstack-service": { "name": "@wdio/browserstack-service", - "version": "8.32.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@percy/appium-app": "^2.0.1", "@percy/selenium-webdriver": "^2.0.3", "@types/gitconfiglocal": "^2.0.1", "@wdio/logger": "8.28.0", - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "browserstack-local": "^1.5.1", "chalk": "^5.3.0", "csv-writer": "^1.6.0", @@ -30591,13 +30502,13 @@ "gitconfiglocal": "^2.1.0", "got": "^12.6.1", "uuid": "^9.0.0", - "webdriverio": "8.32.1", + "webdriverio": "8.29.1", "winston-transport": "^4.5.0", - "yauzl": "^3.0.0" + "yauzl": "^2.10.0" }, "devDependencies": { "@types/node": "^20.1.0", - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" }, "engines": { "node": "^16.13 || >=18" @@ -30620,17 +30531,17 @@ }, "packages/wdio-cli": { "name": "@wdio/cli", - "version": "8.32.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@types/node": "^20.1.1", "@vitest/snapshot": "^1.2.1", - "@wdio/config": "8.31.1", - "@wdio/globals": "8.32.1", + "@wdio/config": "8.29.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/protocols": "8.24.12", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "async-exit-hook": "^2.0.1", "chalk": "^5.2.0", "chokidar": "^3.5.3", @@ -30645,7 +30556,7 @@ "lodash.union": "^4.6.0", "read-pkg-up": "^10.0.0", "recursive-readdir": "^2.2.3", - "webdriverio": "8.32.1", + "webdriverio": "8.29.1", "yargs": "^17.7.2" }, "bin": { @@ -30665,32 +30576,6 @@ "node": "^16.13 || >=18" } }, - "packages/wdio-cli/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/wdio-cli/node_modules/figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "packages/wdio-cli/node_modules/find-up": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", @@ -30717,31 +30602,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "packages/wdio-cli/node_modules/inquirer": { - "version": "9.2.12", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz", - "integrity": "sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==", - "dependencies": { - "@ljharb/through": "^2.3.11", - "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", - "cli-cursor": "^3.1.0", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "figures": "^5.0.0", - "lodash": "^4.17.21", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=14.18.0" - } - }, "packages/wdio-cli/node_modules/json-parse-even-better-errors": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", @@ -30938,11 +30798,11 @@ }, "packages/wdio-concise-reporter": { "name": "@wdio/concise-reporter", - "version": "8.31.1", + "version": "8.29.1", "license": "MIT", "dependencies": { - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "chalk": "^5.0.1", "pretty-ms": "^7.0.1" }, @@ -30952,12 +30812,12 @@ }, "packages/wdio-config": { "name": "@wdio/config", - "version": "8.31.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", "glob": "^10.2.2", @@ -30996,18 +30856,18 @@ }, "packages/wdio-crossbrowsertesting-service": { "name": "@wdio/crossbrowsertesting-service", - "version": "8.32.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "cbt_tunnels": "^1.2.2", "got": "^12.6.1", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "devDependencies": { "@types/node": "^20.1.0", - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" }, "engines": { "node": "^16.13 || >=18" @@ -31015,16 +30875,16 @@ }, "packages/wdio-cucumber-framework": { "name": "@wdio/cucumber-framework", - "version": "8.32.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@cucumber/cucumber": "9.5.1", - "@cucumber/gherkin": "28.0.0", + "@cucumber/gherkin": "27.0.0", "@cucumber/messages": "24.0.1", "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "glob": "^10.2.2", "got": "^12.6.1", "is-glob": "^4.0.0" @@ -31038,28 +30898,28 @@ }, "packages/wdio-devtools-service": { "name": "@wdio/devtools-service", - "version": "8.32.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@babel/core": "^7.18.0", "@tracerbench/trace-event": "^8.0.0", "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "babel-plugin-istanbul": "^6.1.1", - "devtools-protocol": "^0.0.1260888", + "devtools-protocol": "^0.0.1249869", "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-report": "^3.0.0", "istanbul-reports": "^3.1.4", "lighthouse": "8.6.0", "puppeteer-core": "20.3.0", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "devDependencies": { "@types/babel__core": "^7.1.19", "@types/istanbul-lib-report": "^3.0.0", "@types/istanbul-reports": "^3.0.1", - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" }, "engines": { "node": "^16.13 || >=18" @@ -31067,11 +30927,11 @@ }, "packages/wdio-dot-reporter": { "name": "@wdio/dot-reporter", - "version": "8.31.1", + "version": "8.29.1", "license": "MIT", "dependencies": { - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "chalk": "^5.0.1" }, "devDependencies": { @@ -31084,10 +30944,10 @@ }, "packages/wdio-firefox-profile-service": { "name": "@wdio/firefox-profile-service", - "version": "8.31.1", + "version": "8.29.1", "license": "MIT", "dependencies": { - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "firefox-profile": "^4.5.0" }, "engines": { @@ -31096,27 +30956,27 @@ }, "packages/wdio-globals": { "name": "@wdio/globals", - "version": "8.32.1", + "version": "8.29.1", "license": "MIT", "engines": { "node": "^16.13 || >=18" }, "optionalDependencies": { - "expect-webdriverio": "^4.11.2", - "webdriverio": "8.32.1" + "expect-webdriverio": "^4.9.3", + "webdriverio": "8.29.1" } }, "packages/wdio-jasmine-framework": { "name": "@wdio/jasmine-framework", - "version": "8.32.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@types/node": "^20.1.0", - "@wdio/globals": "8.32.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", - "expect-webdriverio": "^4.11.2", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", + "expect-webdriverio": "^4.9.3", "jasmine": "^5.0.0" }, "devDependencies": { @@ -31128,11 +30988,11 @@ }, "packages/wdio-json-reporter": { "name": "@wdio/json-reporter", - "version": "8.31.1", + "version": "8.29.1", "license": "MIT", "dependencies": { - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1" + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1" }, "engines": { "node": "^16.13 || >=18" @@ -31140,11 +31000,11 @@ }, "packages/wdio-junit-reporter": { "name": "@wdio/junit-reporter", - "version": "8.31.1", + "version": "8.29.1", "license": "MIT", "dependencies": { - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "json-stringify-safe": "^5.0.1", "junit-report-builder": "^3.0.0" }, @@ -31157,14 +31017,14 @@ }, "packages/wdio-local-runner": { "name": "@wdio/local-runner", - "version": "8.32.1", + "version": "8.29.2", "license": "MIT", "dependencies": { "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", "@wdio/repl": "8.24.12", - "@wdio/runner": "8.32.1", - "@wdio/types": "8.31.1", + "@wdio/runner": "8.29.2", + "@wdio/types": "8.29.1", "async-exit-hook": "^2.0.1", "split2": "^4.1.0", "stream-buffers": "^3.0.2" @@ -31226,14 +31086,14 @@ }, "packages/wdio-mocha-framework": { "name": "@wdio/mocha-framework", - "version": "8.31.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@types/mocha": "^10.0.0", "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "mocha": "^10.0.0" }, "engines": { @@ -31242,7 +31102,7 @@ }, "packages/wdio-protocols": { "name": "@wdio/protocols", - "version": "8.32.0", + "version": "8.24.12", "license": "MIT" }, "packages/wdio-repl": { @@ -31258,12 +31118,12 @@ }, "packages/wdio-reporter": { "name": "@wdio/reporter", - "version": "8.31.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "diff": "^5.0.0", "object-inspect": "^1.12.0" }, @@ -31280,20 +31140,20 @@ }, "packages/wdio-runner": { "name": "@wdio/runner", - "version": "8.32.1", + "version": "8.29.2", "license": "MIT", "dependencies": { "@types/node": "^20.1.0", - "@wdio/config": "8.31.1", - "@wdio/globals": "8.32.1", + "@wdio/config": "8.29.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "deepmerge-ts": "^5.0.0", - "expect-webdriverio": "^4.11.2", + "expect-webdriverio": "^4.9.3", "gaze": "^1.1.2", - "webdriver": "8.32.0", - "webdriverio": "8.32.1" + "webdriver": "8.29.1", + "webdriverio": "8.29.1" }, "engines": { "node": "^16.13 || >=18" @@ -31301,19 +31161,19 @@ }, "packages/wdio-sauce-service": { "name": "@wdio/sauce-service", - "version": "8.32.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "ip": "^1.1.8", "saucelabs": "7.5.0", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "devDependencies": { "@types/ip": "^1.1.0", - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" }, "engines": { "node": "^16.13 || >=18" @@ -31321,18 +31181,18 @@ }, "packages/wdio-shared-store-service": { "name": "@wdio/shared-store-service", - "version": "8.32.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@polka/parse": "^1.0.0-next.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "got": "^12.6.1", "polka": "^0.5.2", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "devDependencies": { - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" }, "engines": { "node": "^16.13 || >=18" @@ -31351,10 +31211,10 @@ }, "packages/wdio-smoke-test-reporter": { "name": "@wdio/smoke-test-reporter", - "version": "8.31.1", + "version": "8.29.1", "license": "MIT", "dependencies": { - "@wdio/reporter": "8.31.1" + "@wdio/reporter": "8.29.1" }, "engines": { "node": "^16.13 || >=18" @@ -31373,11 +31233,11 @@ }, "packages/wdio-spec-reporter": { "name": "@wdio/spec-reporter", - "version": "8.31.1", + "version": "8.29.1", "license": "MIT", "dependencies": { - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "chalk": "^5.1.2", "easy-table": "^1.2.0", "pretty-ms": "^7.0.0" @@ -31388,11 +31248,11 @@ }, "packages/wdio-static-server-service": { "name": "@wdio/static-server-service", - "version": "8.31.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "express": "^4.14.0", "morgan": "^1.7.0" }, @@ -31406,12 +31266,12 @@ }, "packages/wdio-sumologic-reporter": { "name": "@wdio/sumologic-reporter", - "version": "8.31.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@wdio/logger": "8.28.0", - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "dateformat": "4.5.1", "got": "^12.6.1", "json-stringify-safe": "^5.0.1" @@ -31434,18 +31294,18 @@ }, "packages/wdio-testingbot-service": { "name": "@wdio/testingbot-service", - "version": "8.32.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "got": "^12.6.1", "testingbot-tunnel-launcher": "^1.1.7", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "devDependencies": { "@types/node": "^20.1.0", - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" }, "engines": { "node": "^16.13 || >=18" @@ -31453,7 +31313,7 @@ }, "packages/wdio-types": { "name": "@wdio/types", - "version": "8.31.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@types/node": "^20.1.0" @@ -31464,12 +31324,12 @@ }, "packages/wdio-utils": { "name": "@wdio/utils", - "version": "8.31.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@puppeteer/browsers": "^1.6.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "decamelize": "^6.0.0", "deepmerge-ts": "^5.1.0", "edgedriver": "^5.3.5", @@ -31495,18 +31355,18 @@ }, "packages/wdio-webdriver-mock-service": { "name": "@wdio/webdriver-mock-service", - "version": "8.32.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@types/uuid": "^9.0.0", - "@wdio/protocols": "8.32.0", - "@wdio/types": "8.31.1", + "@wdio/protocols": "8.24.12", + "@wdio/types": "8.29.1", "nock": "^13.2.4", "uuid": "^9.0.0", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "devDependencies": { - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" }, "engines": { "node": "^16.13 || >=18" @@ -31525,16 +31385,16 @@ } }, "packages/webdriver": { - "version": "8.32.0", + "version": "8.29.1", "license": "MIT", "dependencies": { "@types/node": "^20.1.0", "@types/ws": "^8.5.3", - "@wdio/config": "8.31.1", + "@wdio/config": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/protocols": "8.24.12", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "deepmerge-ts": "^5.1.0", "got": "^12.6.1", "ky": "^0.33.0", @@ -31545,21 +31405,21 @@ } }, "packages/webdriverio": { - "version": "8.32.1", + "version": "8.29.1", "license": "MIT", "dependencies": { "@types/node": "^20.1.0", - "@wdio/config": "8.31.1", + "@wdio/config": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", + "@wdio/protocols": "8.24.12", "@wdio/repl": "8.24.12", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "archiver": "^6.0.0", "aria-query": "^5.0.0", "css-shorthand-properties": "^1.1.1", "css-value": "^0.0.1", - "devtools-protocol": "^0.0.1260888", + "devtools-protocol": "^0.0.1249869", "grapheme-splitter": "^1.0.2", "import-meta-resolve": "^4.0.0", "is-plain-obj": "^4.1.0", @@ -31571,7 +31431,7 @@ "resq": "^1.9.1", "rgb2hex": "0.2.5", "serialize-error": "^11.0.1", - "webdriver": "8.32.0" + "webdriver": "8.29.1" }, "devDependencies": { "@types/archiver": "^6.0.2", @@ -31631,17 +31491,6 @@ "node": ">= 14" } }, - "packages/webdriverio/node_modules/chromium-bidi": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", - "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", - "dependencies": { - "mitt": "3.0.0" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, "packages/webdriverio/node_modules/cross-fetch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", @@ -31724,6 +31573,17 @@ } } }, + "packages/webdriverio/node_modules/puppeteer-core/node_modules/chromium-bidi": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", + "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, "packages/webdriverio/node_modules/puppeteer-core/node_modules/devtools-protocol": { "version": "0.0.1147663", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", @@ -31959,28 +31819,29 @@ } }, "@aws-sdk/client-cloudfront": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.515.0.tgz", - "integrity": "sha512-aDiTeB2QEX6M9I3yqchCce4z78wRuDOh3oZq2eiBueJqk3R3RGm8zDdsiJ+U9N6NVSmcm7Xs55Ws8NUJZGwizw==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.496.0.tgz", + "integrity": "sha512-8sIyrJstom//Ow5d5ParGunC2x7DmmyXjQ7psBVyzKN9IEtjJGqMVsbhR0lC5+kmNLLUUPMB6oz6yJCpMNSCnw==", "dev": true, "requires": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.515.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", + "@aws-sdk/client-sts": "3.496.0", + "@aws-sdk/core": "3.496.0", + "@aws-sdk/credential-provider-node": "3.496.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-signing": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", "@aws-sdk/xml-builder": "3.496.0", "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", + "@smithy/core": "^1.3.1", "@smithy/fetch-http-handler": "^2.4.1", "@smithy/hash-node": "^2.1.1", "@smithy/invalid-dependency": "^2.1.1", @@ -31999,422 +31860,48 @@ "@smithy/util-body-length-browser": "^2.1.1", "@smithy/util-body-length-node": "^2.2.1", "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", + "@smithy/util-defaults-mode-node": "^2.1.1", "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", "@smithy/util-retry": "^2.1.1", "@smithy/util-stream": "^2.1.1", "@smithy/util-utf8": "^2.1.1", "@smithy/util-waiter": "^2.1.1", "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" - }, - "dependencies": { - "@aws-sdk/client-sso": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.515.0.tgz", - "integrity": "sha512-4oGBLW476zmkdN98lAns3bObRNO+DLOfg4MDUSR6l6GYBV/zGAtoy2O/FhwYKgA2L5h2ZtElGopLlk/1Q0ePLw==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/client-sso-oidc": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.515.0.tgz", - "integrity": "sha512-zACa8LNlPUdlNUBqQRf5a3MfouLNtcBfm84v2c8M976DwJrMGONPe1QjyLLsD38uESQiXiVQRruj/b000iMXNw==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/client-sts": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.515.0.tgz", - "integrity": "sha512-ScYuvaIDgip3atOJIA1FU2n0gJkEdveu1KrrCPathoUCV5zpK8qQmO/n+Fj/7hKFxeKdFbB+4W4CsJWYH94nlg==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-env": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.515.0.tgz", - "integrity": "sha512-45vxdyqhTAaUMERYVWOziG3K8L2TV9G4ryQS/KZ84o7NAybE9GMdoZRVmGHAO7mJJ1wQiYCM/E+i5b3NW9JfNA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-http": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.515.0.tgz", - "integrity": "sha512-Ba6FXK77vU4WyheiamNjEuTFmir0eAXuJGPO27lBaA8g+V/seXGHScsbOG14aQGDOr2P02OPwKGZrWWA7BFpfQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-stream": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-ini": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.515.0.tgz", - "integrity": "sha512-ouDlNZdv2TKeVEA/YZk2+XklTXyAAGdbWnl4IgN9ItaodWI+lZjdIoNC8BAooVH+atIV/cZgoGTGQL7j2TxJ9A==", - "dev": true, - "requires": { - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/credential-provider-env": "3.515.0", - "@aws-sdk/credential-provider-process": "3.515.0", - "@aws-sdk/credential-provider-sso": "3.515.0", - "@aws-sdk/credential-provider-web-identity": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-node": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.515.0.tgz", - "integrity": "sha512-Y4kHSpbxksiCZZNcvsiKUd8Fb2XlyUuONEwqWFNL82ZH6TCCjBGS31wJQCSxBHqYcOL3tiORUEJkoO7uS30uQA==", - "dev": true, - "requires": { - "@aws-sdk/credential-provider-env": "3.515.0", - "@aws-sdk/credential-provider-http": "3.515.0", - "@aws-sdk/credential-provider-ini": "3.515.0", - "@aws-sdk/credential-provider-process": "3.515.0", - "@aws-sdk/credential-provider-sso": "3.515.0", - "@aws-sdk/credential-provider-web-identity": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-process": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.515.0.tgz", - "integrity": "sha512-pSjiOA2FM63LHRKNDvEpBRp80FVGT0Mw/gzgbqFXP+sewk0WVonYbEcMDTJptH3VsLPGzqH/DQ1YL/aEIBuXFQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-sso": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.515.0.tgz", - "integrity": "sha512-j7vUkiSmuhpBvZYoPTRTI4ePnQbiZMFl6TNhg9b9DprC1zHkucsZnhRhqjOVlrw/H6J4jmcPGcHHTZ5WQNI5xQ==", - "dev": true, - "requires": { - "@aws-sdk/client-sso": "3.515.0", - "@aws-sdk/token-providers": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-web-identity": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.515.0.tgz", - "integrity": "sha512-66+2g4z3fWwdoGReY8aUHvm6JrKZMTRxjuizljVmMyOBttKPeBYXvUTop/g3ZGUx1f8j+C5qsGK52viYBvtjuQ==", - "dev": true, - "requires": { - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-host-header": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.515.0.tgz", - "integrity": "sha512-I1MwWPzdRKM1luvdDdjdGsDjNVPhj9zaIytEchjTY40NcKOg+p2evLD2y69ozzg8pyXK63r8DdvDGOo9QPuh0A==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-logger": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.515.0.tgz", - "integrity": "sha512-qXomJzg2m/5seQOxHi/yOXOKfSjwrrJSmEmfwJKJyQgdMbBcjz3Cz0H/1LyC6c5hHm6a/SZgSTzDAbAoUmyL+Q==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.515.0.tgz", - "integrity": "sha512-dokHLbTV3IHRIBrw9mGoxcNTnQsjlm7TpkJhPdGT9T4Mq399EyQo51u6IsVMm07RXLl2Zw7u+u9p+qWBFzmFRA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-user-agent": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.515.0.tgz", - "integrity": "sha512-nOqZjGA/GkjuJ5fUshec9Fv6HFd7ovOTxMJbw3MfAhqXuVZ6dKF41lpVJ4imNsgyFt3shUg9WDY8zGFjlYMB3g==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/region-config-resolver": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.515.0.tgz", - "integrity": "sha512-RIRx9loxMgEAc/r1wPfnfShOuzn4RBi8pPPv6/jhhITEeMnJe6enAh2k5y9DdiVDDgCWZgVFSv0YkAIfzAFsnQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/token-providers": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.515.0.tgz", - "integrity": "sha512-MQuf04rIcTXqwDzmyHSpFPF1fKEzRl64oXtCRUF3ddxTdK6wxXkePfK6wNCuL+GEbEcJAoCtIGIRpzGPJvQjHA==", - "dev": true, - "requires": { - "@aws-sdk/client-sso-oidc": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", - "dev": true, - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-endpoints": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.515.0.tgz", - "integrity": "sha512-UJi+jdwcGFV/F7d3+e2aQn5yZOVpDiAgfgNhPnEtgV0WozJ5/ZUeZBgWvSc/K415N4A4D/9cbBc7+I+35qzcDQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/types": "^2.9.1", - "@smithy/util-endpoints": "^1.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.515.0.tgz", - "integrity": "sha512-pTWQb0JCafTmLHLDv3Qqs/nAAJghcPdGQIBpsCStb0YEzg3At/dOi2AIQ683yYnXmeOxLXJDzmlsovfVObJScw==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/types": "^2.9.1", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-user-agent-node": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.515.0.tgz", - "integrity": "sha512-A/KJ+/HTohHyVXLH+t/bO0Z2mPrQgELbQO8tX+B2nElo8uklj70r5cT7F8ETsI9oOy+HDVpiL5/v45ZgpUOiPg==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - } } }, "@aws-sdk/client-s3": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.515.0.tgz", - "integrity": "sha512-K527n83hrMUdosxOYTzL63wtlJtmN5SUJZnGY1sUR6UyOrnOr9lS6t3AB6BgHqLFRFZJqSqmhflv2cOD7P1UPg==", + "version": "3.501.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.501.0.tgz", + "integrity": "sha512-ovxYSGdnEdr4UrNiT+9e3ov2XULFr0bcyoXJkYxnkXPDg9Y65nuZgZAIZQMS6wnJVmNrUprhqTSQB3KHXvaEuQ==", "dev": true, "requires": { "@aws-crypto/sha1-browser": "3.0.0", "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/credential-provider-node": "3.515.0", - "@aws-sdk/middleware-bucket-endpoint": "3.515.0", - "@aws-sdk/middleware-expect-continue": "3.515.0", - "@aws-sdk/middleware-flexible-checksums": "3.515.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-location-constraint": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-sdk-s3": "3.515.0", - "@aws-sdk/middleware-signing": "3.515.0", - "@aws-sdk/middleware-ssec": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/signature-v4-multi-region": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", + "@aws-sdk/client-sts": "3.501.0", + "@aws-sdk/core": "3.496.0", + "@aws-sdk/credential-provider-node": "3.501.0", + "@aws-sdk/middleware-bucket-endpoint": "3.496.0", + "@aws-sdk/middleware-expect-continue": "3.496.0", + "@aws-sdk/middleware-flexible-checksums": "3.496.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-location-constraint": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-sdk-s3": "3.499.0", + "@aws-sdk/middleware-signing": "3.496.0", + "@aws-sdk/middleware-ssec": "3.498.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/signature-v4-multi-region": "3.499.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", "@aws-sdk/xml-builder": "3.496.0", "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", + "@smithy/core": "^1.3.1", "@smithy/eventstream-serde-browser": "^2.1.1", "@smithy/eventstream-serde-config-resolver": "^2.1.1", "@smithy/eventstream-serde-node": "^2.1.1", @@ -32439,7 +31926,7 @@ "@smithy/util-body-length-browser": "^2.1.1", "@smithy/util-body-length-node": "^2.2.1", "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", + "@smithy/util-defaults-mode-node": "^2.1.1", "@smithy/util-endpoints": "^1.1.1", "@smithy/util-retry": "^2.1.1", "@smithy/util-stream": "^2.1.1", @@ -32449,119 +31936,27 @@ "tslib": "^2.5.0" }, "dependencies": { - "@aws-sdk/client-sso": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.515.0.tgz", - "integrity": "sha512-4oGBLW476zmkdN98lAns3bObRNO+DLOfg4MDUSR6l6GYBV/zGAtoy2O/FhwYKgA2L5h2ZtElGopLlk/1Q0ePLw==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/client-sso-oidc": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.515.0.tgz", - "integrity": "sha512-zACa8LNlPUdlNUBqQRf5a3MfouLNtcBfm84v2c8M976DwJrMGONPe1QjyLLsD38uESQiXiVQRruj/b000iMXNw==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", - "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/hash-node": "^2.1.1", - "@smithy/invalid-dependency": "^2.1.1", - "@smithy/middleware-content-length": "^2.1.1", - "@smithy/middleware-endpoint": "^2.4.1", - "@smithy/middleware-retry": "^2.1.1", - "@smithy/middleware-serde": "^2.1.1", - "@smithy/middleware-stack": "^2.1.1", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/url-parser": "^2.1.1", - "@smithy/util-base64": "^2.1.1", - "@smithy/util-body-length-browser": "^2.1.1", - "@smithy/util-body-length-node": "^2.2.1", - "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", - "@smithy/util-endpoints": "^1.1.1", - "@smithy/util-middleware": "^2.1.1", - "@smithy/util-retry": "^2.1.1", - "@smithy/util-utf8": "^2.1.1", - "tslib": "^2.5.0" - } - }, "@aws-sdk/client-sts": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.515.0.tgz", - "integrity": "sha512-ScYuvaIDgip3atOJIA1FU2n0gJkEdveu1KrrCPathoUCV5zpK8qQmO/n+Fj/7hKFxeKdFbB+4W4CsJWYH94nlg==", + "version": "3.501.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.501.0.tgz", + "integrity": "sha512-Uwc/xuxsA46dZS5s+4U703LBNDrGpWF7RB4XYEEMD21BLfGuqntxLLQux8xxKt3Pcur0CsXNja5jXt3uLnE5MA==", "dev": true, "requires": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.513.0", - "@aws-sdk/middleware-host-header": "3.515.0", - "@aws-sdk/middleware-logger": "3.515.0", - "@aws-sdk/middleware-recursion-detection": "3.515.0", - "@aws-sdk/middleware-user-agent": "3.515.0", - "@aws-sdk/region-config-resolver": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@aws-sdk/util-user-agent-browser": "3.515.0", - "@aws-sdk/util-user-agent-node": "3.515.0", + "@aws-sdk/core": "3.496.0", + "@aws-sdk/credential-provider-node": "3.501.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", "@smithy/config-resolver": "^2.1.1", - "@smithy/core": "^1.3.2", + "@smithy/core": "^1.3.1", "@smithy/fetch-http-handler": "^2.4.1", "@smithy/hash-node": "^2.1.1", "@smithy/invalid-dependency": "^2.1.1", @@ -32580,7 +31975,7 @@ "@smithy/util-body-length-browser": "^2.1.1", "@smithy/util-body-length-node": "^2.2.1", "@smithy/util-defaults-mode-browser": "^2.1.1", - "@smithy/util-defaults-mode-node": "^2.2.0", + "@smithy/util-defaults-mode-node": "^2.1.1", "@smithy/util-endpoints": "^1.1.1", "@smithy/util-middleware": "^2.1.1", "@smithy/util-retry": "^2.1.1", @@ -32589,47 +31984,17 @@ "tslib": "^2.5.0" } }, - "@aws-sdk/credential-provider-env": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.515.0.tgz", - "integrity": "sha512-45vxdyqhTAaUMERYVWOziG3K8L2TV9G4ryQS/KZ84o7NAybE9GMdoZRVmGHAO7mJJ1wQiYCM/E+i5b3NW9JfNA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-http": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.515.0.tgz", - "integrity": "sha512-Ba6FXK77vU4WyheiamNjEuTFmir0eAXuJGPO27lBaA8g+V/seXGHScsbOG14aQGDOr2P02OPwKGZrWWA7BFpfQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/fetch-http-handler": "^2.4.1", - "@smithy/node-http-handler": "^2.3.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/protocol-http": "^3.1.1", - "@smithy/smithy-client": "^2.3.1", - "@smithy/types": "^2.9.1", - "@smithy/util-stream": "^2.1.1", - "tslib": "^2.5.0" - } - }, "@aws-sdk/credential-provider-ini": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.515.0.tgz", - "integrity": "sha512-ouDlNZdv2TKeVEA/YZk2+XklTXyAAGdbWnl4IgN9ItaodWI+lZjdIoNC8BAooVH+atIV/cZgoGTGQL7j2TxJ9A==", + "version": "3.501.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.501.0.tgz", + "integrity": "sha512-6UXnwLtYIr298ljveumCVXsH+x7csGscK5ylY+veRFy514NqyloRdJt8JY26hhh5SF9MYnkW+JyWSJ2Ls3tOjQ==", "dev": true, "requires": { - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/credential-provider-env": "3.515.0", - "@aws-sdk/credential-provider-process": "3.515.0", - "@aws-sdk/credential-provider-sso": "3.515.0", - "@aws-sdk/credential-provider-web-identity": "3.515.0", - "@aws-sdk/types": "3.515.0", + "@aws-sdk/credential-provider-env": "3.496.0", + "@aws-sdk/credential-provider-process": "3.496.0", + "@aws-sdk/credential-provider-sso": "3.501.0", + "@aws-sdk/credential-provider-web-identity": "3.496.0", + "@aws-sdk/types": "3.496.0", "@smithy/credential-provider-imds": "^2.2.1", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", @@ -32638,32 +32003,18 @@ } }, "@aws-sdk/credential-provider-node": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.515.0.tgz", - "integrity": "sha512-Y4kHSpbxksiCZZNcvsiKUd8Fb2XlyUuONEwqWFNL82ZH6TCCjBGS31wJQCSxBHqYcOL3tiORUEJkoO7uS30uQA==", - "dev": true, - "requires": { - "@aws-sdk/credential-provider-env": "3.515.0", - "@aws-sdk/credential-provider-http": "3.515.0", - "@aws-sdk/credential-provider-ini": "3.515.0", - "@aws-sdk/credential-provider-process": "3.515.0", - "@aws-sdk/credential-provider-sso": "3.515.0", - "@aws-sdk/credential-provider-web-identity": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@smithy/credential-provider-imds": "^2.2.1", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/credential-provider-process": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.515.0.tgz", - "integrity": "sha512-pSjiOA2FM63LHRKNDvEpBRp80FVGT0Mw/gzgbqFXP+sewk0WVonYbEcMDTJptH3VsLPGzqH/DQ1YL/aEIBuXFQ==", + "version": "3.501.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.501.0.tgz", + "integrity": "sha512-NM62D8gYrQ1nyLYwW4k48B2/lMHDzHDcQccS1wJakr6bg5sdtG06CumwlVcY+LAa0o1xRnhHmh/yiwj/nN4avw==", "dev": true, "requires": { - "@aws-sdk/types": "3.515.0", + "@aws-sdk/credential-provider-env": "3.496.0", + "@aws-sdk/credential-provider-ini": "3.501.0", + "@aws-sdk/credential-provider-process": "3.496.0", + "@aws-sdk/credential-provider-sso": "3.501.0", + "@aws-sdk/credential-provider-web-identity": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@smithy/credential-provider-imds": "^2.2.1", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", "@smithy/types": "^2.9.1", @@ -32671,164 +32022,167 @@ } }, "@aws-sdk/credential-provider-sso": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.515.0.tgz", - "integrity": "sha512-j7vUkiSmuhpBvZYoPTRTI4ePnQbiZMFl6TNhg9b9DprC1zHkucsZnhRhqjOVlrw/H6J4jmcPGcHHTZ5WQNI5xQ==", + "version": "3.501.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.501.0.tgz", + "integrity": "sha512-y90dlvvZ55PwecODFdMx0NiNlJJfm7X6S61PKdLNCMRcu1YK+eWn0CmPHGHobBUQ4SEYhnFLcHSsf+VMim6BtQ==", "dev": true, "requires": { - "@aws-sdk/client-sso": "3.515.0", - "@aws-sdk/token-providers": "3.515.0", - "@aws-sdk/types": "3.515.0", + "@aws-sdk/client-sso": "3.496.0", + "@aws-sdk/token-providers": "3.501.0", + "@aws-sdk/types": "3.496.0", "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" } }, - "@aws-sdk/credential-provider-web-identity": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.515.0.tgz", - "integrity": "sha512-66+2g4z3fWwdoGReY8aUHvm6JrKZMTRxjuizljVmMyOBttKPeBYXvUTop/g3ZGUx1f8j+C5qsGK52viYBvtjuQ==", - "dev": true, - "requires": { - "@aws-sdk/client-sts": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-host-header": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.515.0.tgz", - "integrity": "sha512-I1MwWPzdRKM1luvdDdjdGsDjNVPhj9zaIytEchjTY40NcKOg+p2evLD2y69ozzg8pyXK63r8DdvDGOo9QPuh0A==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-logger": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.515.0.tgz", - "integrity": "sha512-qXomJzg2m/5seQOxHi/yOXOKfSjwrrJSmEmfwJKJyQgdMbBcjz3Cz0H/1LyC6c5hHm6a/SZgSTzDAbAoUmyL+Q==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.515.0.tgz", - "integrity": "sha512-dokHLbTV3IHRIBrw9mGoxcNTnQsjlm7TpkJhPdGT9T4Mq399EyQo51u6IsVMm07RXLl2Zw7u+u9p+qWBFzmFRA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-user-agent": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.515.0.tgz", - "integrity": "sha512-nOqZjGA/GkjuJ5fUshec9Fv6HFd7ovOTxMJbw3MfAhqXuVZ6dKF41lpVJ4imNsgyFt3shUg9WDY8zGFjlYMB3g==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@aws-sdk/util-endpoints": "3.515.0", - "@smithy/protocol-http": "^3.1.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/region-config-resolver": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.515.0.tgz", - "integrity": "sha512-RIRx9loxMgEAc/r1wPfnfShOuzn4RBi8pPPv6/jhhITEeMnJe6enAh2k5y9DdiVDDgCWZgVFSv0YkAIfzAFsnQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/node-config-provider": "^2.2.1", - "@smithy/types": "^2.9.1", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.1", - "tslib": "^2.5.0" - } - }, "@aws-sdk/token-providers": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.515.0.tgz", - "integrity": "sha512-MQuf04rIcTXqwDzmyHSpFPF1fKEzRl64oXtCRUF3ddxTdK6wxXkePfK6wNCuL+GEbEcJAoCtIGIRpzGPJvQjHA==", + "version": "3.501.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.501.0.tgz", + "integrity": "sha512-MvLPhNxlStmQqVm2crGLUqYWvK/AbMmI9j4FbEfJ15oG/I+730zjSJQEy2MvdiqbJRDPZ/tRCL89bUedOrmi0g==", "dev": true, "requires": { - "@aws-sdk/client-sso-oidc": "3.515.0", - "@aws-sdk/types": "3.515.0", - "@smithy/property-provider": "^2.1.1", - "@smithy/shared-ini-file-loader": "^2.3.1", - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", - "dev": true, - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-endpoints": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.515.0.tgz", - "integrity": "sha512-UJi+jdwcGFV/F7d3+e2aQn5yZOVpDiAgfgNhPnEtgV0WozJ5/ZUeZBgWvSc/K415N4A4D/9cbBc7+I+35qzcDQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/types": "^2.9.1", - "@smithy/util-endpoints": "^1.1.1", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.515.0.tgz", - "integrity": "sha512-pTWQb0JCafTmLHLDv3Qqs/nAAJghcPdGQIBpsCStb0YEzg3At/dOi2AIQ683yYnXmeOxLXJDzmlsovfVObJScw==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", - "@smithy/types": "^2.9.1", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-user-agent-node": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.515.0.tgz", - "integrity": "sha512-A/KJ+/HTohHyVXLH+t/bO0Z2mPrQgELbQO8tX+B2nElo8uklj70r5cT7F8ETsI9oOy+HDVpiL5/v45ZgpUOiPg==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.515.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", + "@smithy/config-resolver": "^2.1.1", + "@smithy/fetch-http-handler": "^2.4.1", + "@smithy/hash-node": "^2.1.1", + "@smithy/invalid-dependency": "^2.1.1", + "@smithy/middleware-content-length": "^2.1.1", + "@smithy/middleware-endpoint": "^2.4.1", + "@smithy/middleware-retry": "^2.1.1", + "@smithy/middleware-serde": "^2.1.1", + "@smithy/middleware-stack": "^2.1.1", "@smithy/node-config-provider": "^2.2.1", + "@smithy/node-http-handler": "^2.3.1", + "@smithy/property-provider": "^2.1.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/smithy-client": "^2.3.1", "@smithy/types": "^2.9.1", + "@smithy/url-parser": "^2.1.1", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.1", + "@smithy/util-defaults-mode-node": "^2.1.1", + "@smithy/util-endpoints": "^1.1.1", + "@smithy/util-retry": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", "tslib": "^2.5.0" } } } }, + "@aws-sdk/client-sso": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.496.0.tgz", + "integrity": "sha512-fuaMuxKg7CMUsP9l3kxYWCOxFsBjdA0xj5nlikaDm1661/gB4KkAiGqRY8LsQkpNXvXU8Nj+f7oCFADFyGYzyw==", + "dev": true, + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.496.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", + "@smithy/config-resolver": "^2.1.1", + "@smithy/core": "^1.3.1", + "@smithy/fetch-http-handler": "^2.4.1", + "@smithy/hash-node": "^2.1.1", + "@smithy/invalid-dependency": "^2.1.1", + "@smithy/middleware-content-length": "^2.1.1", + "@smithy/middleware-endpoint": "^2.4.1", + "@smithy/middleware-retry": "^2.1.1", + "@smithy/middleware-serde": "^2.1.1", + "@smithy/middleware-stack": "^2.1.1", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/node-http-handler": "^2.3.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/url-parser": "^2.1.1", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.1", + "@smithy/util-defaults-mode-node": "^2.1.1", + "@smithy/util-endpoints": "^1.1.1", + "@smithy/util-retry": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/client-sts": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.496.0.tgz", + "integrity": "sha512-3pSdqgegdwbK3CT1WvGHhA+Bf91R9cr8G1Ynp+iU2wZvy8ueJfMUk0NYfjo3EEv0YhSbMLKuduzZfvQHFHXYhw==", + "dev": true, + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.496.0", + "@aws-sdk/credential-provider-node": "3.496.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", + "@smithy/config-resolver": "^2.1.1", + "@smithy/core": "^1.3.1", + "@smithy/fetch-http-handler": "^2.4.1", + "@smithy/hash-node": "^2.1.1", + "@smithy/invalid-dependency": "^2.1.1", + "@smithy/middleware-content-length": "^2.1.1", + "@smithy/middleware-endpoint": "^2.4.1", + "@smithy/middleware-retry": "^2.1.1", + "@smithy/middleware-serde": "^2.1.1", + "@smithy/middleware-stack": "^2.1.1", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/node-http-handler": "^2.3.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/url-parser": "^2.1.1", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.1", + "@smithy/util-defaults-mode-node": "^2.1.1", + "@smithy/util-endpoints": "^1.1.1", + "@smithy/util-middleware": "^2.1.1", + "@smithy/util-retry": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + } + }, "@aws-sdk/core": { - "version": "3.513.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.513.0.tgz", - "integrity": "sha512-L+9DL4apWuqNKVOMJ8siAuWoRM9rZf9w1iPv8S2o83WO2jVK7E/m+rNW1dFo9HsA5V1ccDl2H2qLXx24HiHmOw==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.496.0.tgz", + "integrity": "sha512-yT+ug7Cw/3eJi7x2es0+46x12+cIJm5Xv+GPWsrTFD1TKgqO/VPEgfDtHFagDNbFmjNQA65Ygc/kEdIX9ICX/A==", "dev": true, "requires": { - "@smithy/core": "^1.3.2", + "@smithy/core": "^1.3.1", "@smithy/protocol-http": "^3.1.1", "@smithy/signature-v4": "^2.1.1", "@smithy/smithy-client": "^2.3.1", @@ -32836,10 +32190,99 @@ "tslib": "^2.5.0" } }, + "@aws-sdk/credential-provider-env": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.496.0.tgz", + "integrity": "sha512-lukQMJ8SWWP5RqkRNOHi/H+WMhRvSWa3Fc5Jf/VP6xHiPLfF1XafcvthtV91e0VwPCiseI+HqChrcGq8pvnxHw==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.496.0", + "@smithy/property-provider": "^2.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.496.0.tgz", + "integrity": "sha512-2nD1jp1sIwcQaWK1y/9ruQOkW16RUxZpzgjbW/gnK3iiUXwx+/FNQWxshud+GTSx3Q4x6eIhqsbjtP4VVPPuUA==", + "dev": true, + "requires": { + "@aws-sdk/credential-provider-env": "3.496.0", + "@aws-sdk/credential-provider-process": "3.496.0", + "@aws-sdk/credential-provider-sso": "3.496.0", + "@aws-sdk/credential-provider-web-identity": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@smithy/credential-provider-imds": "^2.2.1", + "@smithy/property-provider": "^2.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.496.0.tgz", + "integrity": "sha512-IVF9RvLePfRa5S5/eBIRChJCWOzQkGwM8P/L79Gl84u/cH2oSG4NtUI/YTDlrtmnYn7YsGhINSV0WnzfF2twfQ==", + "dev": true, + "requires": { + "@aws-sdk/credential-provider-env": "3.496.0", + "@aws-sdk/credential-provider-ini": "3.496.0", + "@aws-sdk/credential-provider-process": "3.496.0", + "@aws-sdk/credential-provider-sso": "3.496.0", + "@aws-sdk/credential-provider-web-identity": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@smithy/credential-provider-imds": "^2.2.1", + "@smithy/property-provider": "^2.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.496.0.tgz", + "integrity": "sha512-/YZscCTGOKVmGr916Th4XF8Sz6JDtZ/n2loHG9exok9iy/qIbACsTRNLP9zexPxhPoue/oZqecY5xbVljfY34A==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.496.0", + "@smithy/property-provider": "^2.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.496.0.tgz", + "integrity": "sha512-eP7GxpT2QYubSDG7uk1GJW4eNymZCq65IxDyEFCXOP/kfqkxriCY+iVEFG6/Mo3LxvgrgHXU4jxrCAXMAWN43g==", + "dev": true, + "requires": { + "@aws-sdk/client-sso": "3.496.0", + "@aws-sdk/token-providers": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@smithy/property-provider": "^2.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.496.0.tgz", + "integrity": "sha512-IbP+qLlvJSpNPj+zW6TtFuLRTK5Tf0hW+2pom4vFyi5YSH4pn8UOC136UdewX8vhXGS9BJQ5zBDMasIyl5VeGQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.496.0", + "@smithy/property-provider": "^2.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + } + }, "@aws-sdk/lib-storage": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.515.0.tgz", - "integrity": "sha512-/7z/3KnMs1ODNS9c8Skj/DFTsy6/v7n17clh1IGOcTYhhioCMA3MIzIZecWFeLjPYcUSkNQHIIjKFQt1nhZkwA==", + "version": "3.501.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.501.0.tgz", + "integrity": "sha512-XZREd1O0S8AjM3RS85T2QCVJzXk+BSAGNOFvGP8t2al2Ti35O4+AvSHT75rmOGAZAsthtL2o9bt0h1VFnaIP+g==", "dev": true, "requires": { "@smithy/abort-controller": "^2.1.1", @@ -32852,114 +32295,101 @@ } }, "@aws-sdk/middleware-bucket-endpoint": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.515.0.tgz", - "integrity": "sha512-Vm423j3udFrhKPaKiXtie+6aF05efjX8lhAu5VOruIvbam7olvdWNdkH7sGWlz1ko3CVa7PwOYjGHiOOhxpEOA==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.496.0.tgz", + "integrity": "sha512-B+ilBMSs3+LJuo2bl2KB8GFdu+8PPVtYEWtwhNkmnaU8iMisgMBp5uuM8sUDvJX7I4iSF0WbgnhguX4cJqfAew==", "dev": true, "requires": { - "@aws-sdk/types": "3.515.0", + "@aws-sdk/types": "3.496.0", "@aws-sdk/util-arn-parser": "3.495.0", "@smithy/node-config-provider": "^2.2.1", "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", "@smithy/util-config-provider": "^2.2.1", "tslib": "^2.5.0" - }, - "dependencies": { - "@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", - "dev": true, - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - } } }, "@aws-sdk/middleware-expect-continue": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.515.0.tgz", - "integrity": "sha512-TWCXulivab4reOMx/vxa/IwnPX78fLwI9NUoAxjsqB6W9qjmSnPD43BSVeGvbbl/YNmgk7XfMbZb6IgxW7RyzA==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.496.0.tgz", + "integrity": "sha512-+exo5DVc+BeDus2iI6Fz1thefHGDXxUhHZ+4VHQ6HkStMy3Y22HugyEGHSQZmtRL86Hjr7dFbEWFsC47a2ItGA==", "dev": true, "requires": { - "@aws-sdk/types": "3.515.0", + "@aws-sdk/types": "3.496.0", "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" - }, - "dependencies": { - "@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", - "dev": true, - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - } } }, "@aws-sdk/middleware-flexible-checksums": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.515.0.tgz", - "integrity": "sha512-ydGjnqNeYlJaAkmQeQnS4pZRAAvzefdm8c234Qh0Fg55xRwHTNLp7uYsdfkTjrdAlj6YIO3Zr6vK6VJ6MGCwug==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.496.0.tgz", + "integrity": "sha512-yQIWfjEMvgsAJ7ku224vXDjXPD+f9zfKZFialJva8VUlEr7hQp4CQ0rxV3YThSaixKEDDs5k6kOjWAd2BPGr2A==", "dev": true, "requires": { "@aws-crypto/crc32": "3.0.0", "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.515.0", + "@aws-sdk/types": "3.496.0", "@smithy/is-array-buffer": "^2.1.1", "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", "@smithy/util-utf8": "^2.1.1", "tslib": "^2.5.0" - }, - "dependencies": { - "@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", - "dev": true, - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - } + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.496.0.tgz", + "integrity": "sha512-jUdPpSJeqCYXf6hSjfwsfHway7peIV8Vz51w/BN91bF4vB/bYwAC5o9/iJiK/EoByp5asxA8fg9wFOyGjzdbLg==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.496.0", + "@smithy/protocol-http": "^3.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" } }, "@aws-sdk/middleware-location-constraint": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.515.0.tgz", - "integrity": "sha512-ORFC5oijjTJsHhUXy9o52/vl5Irf6e83bE/8tBp+sVVx81+E8zTTWZbysoa41c0B5Ycd0H3wCWutvjdXT16ydQ==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.496.0.tgz", + "integrity": "sha512-i4ocJ2Zs86OtPREbB18InFukhqg2qtBxb5gywv79IHDPVmpOYE4m/3v3yGUrkjfF2GTlUL0k5FskNNqw41yfng==", "dev": true, "requires": { - "@aws-sdk/types": "3.515.0", + "@aws-sdk/types": "3.496.0", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.496.0.tgz", + "integrity": "sha512-EwMVSY6iBMeGbVnvwdaFl/ClMS/YWtxCAo+bcEtgk8ltRuo7qgbJem8Km/fvWC1vdWvIbe4ArdJ8iGzq62ffAw==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.496.0", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-recursion-detection": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.496.0.tgz", + "integrity": "sha512-+IuOcFsfqg2WAnaEzH6KhVbicqCxtOq9w3DH2jwTpddRlCx2Kqf6wCzg8luhHRGyjBZdsbIS+OXwyMevoppawA==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.496.0", + "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" - }, - "dependencies": { - "@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", - "dev": true, - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - } } }, "@aws-sdk/middleware-sdk-s3": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.515.0.tgz", - "integrity": "sha512-vB8JwiTEAqm1UT9xfugnCgl0H0dtBLUQQK99JwQEWjHPZmQ3HQuVkykmJRY3X0hzKMEgqXodz0hZOvf3Hq1mvQ==", + "version": "3.499.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.499.0.tgz", + "integrity": "sha512-thTb47U1hYHk5ei+yO0D0aehbgQXeAcgvyyxOID9/HDuRfWuTvKdclWh/goIeDfvSS87VBukEAjnCa5JYBwzug==", "dev": true, "requires": { - "@aws-sdk/types": "3.515.0", + "@aws-sdk/types": "3.496.0", "@aws-sdk/util-arn-parser": "3.495.0", "@smithy/node-config-provider": "^2.2.1", "@smithy/protocol-http": "^3.1.1", @@ -32968,100 +32398,124 @@ "@smithy/types": "^2.9.1", "@smithy/util-config-provider": "^2.2.1", "tslib": "^2.5.0" - }, - "dependencies": { - "@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", - "dev": true, - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - } } }, "@aws-sdk/middleware-signing": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.515.0.tgz", - "integrity": "sha512-SdjCyQCL702I07KhCiBFcoh6+NYtnruHJQIzWwMpBteuYHnCHW1k9uZ6pqacsS+Y6qpAKfTVNpQx2zP2s6QoHA==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.496.0.tgz", + "integrity": "sha512-Oq73Brs4IConvWnRlh8jM1V7LHoTw9SVQklu/QW2FPlNrB3B8fuTdWHHYIWv7ybw1bykXoCY99v865Mmq/Or/g==", "dev": true, "requires": { - "@aws-sdk/types": "3.515.0", + "@aws-sdk/types": "3.496.0", "@smithy/property-provider": "^2.1.1", "@smithy/protocol-http": "^3.1.1", "@smithy/signature-v4": "^2.1.1", "@smithy/types": "^2.9.1", "@smithy/util-middleware": "^2.1.1", "tslib": "^2.5.0" - }, - "dependencies": { - "@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", - "dev": true, - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - } } }, "@aws-sdk/middleware-ssec": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.515.0.tgz", - "integrity": "sha512-0qLjKiorosVBzzaV/o7MEyS9xqLLu02qGbP564Z/FZY74JUQEpBNedgveMUbb6lqr85RnOuwZ0GZ0cBRfH2brQ==", + "version": "3.498.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.498.0.tgz", + "integrity": "sha512-sWujXgzeTqMZzj/pRYEnnEbSzhBosqw9DXHOY1Mg2igI9NEfGlB7lPARp6aKmCaYlP3Bcj2X86vKCqF53mbyig==", "dev": true, "requires": { - "@aws-sdk/types": "3.515.0", + "@aws-sdk/types": "3.496.0", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" - }, - "dependencies": { - "@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", - "dev": true, - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - } + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.496.0.tgz", + "integrity": "sha512-+iMtRxFk0GmFWNUF4ilxylOQd9PZdR4ZC9jkcPIh1PZlvKtpCyFywKlk5RRZKklSoJ/CttcqwhMvOXTNbWm/0w==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@smithy/protocol-http": "^3.1.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/region-config-resolver": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.496.0.tgz", + "integrity": "sha512-URrNVOPHPgEDm6QFu6lDC2cUFs+Jx23mA3jEwCvoKlXiEY/ZoWjH8wlX3OMUlLrF1qoUTuD03jjrJzF6zoCgug==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.496.0", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/types": "^2.9.1", + "@smithy/util-config-provider": "^2.2.1", + "@smithy/util-middleware": "^2.1.1", + "tslib": "^2.5.0" } }, "@aws-sdk/signature-v4-multi-region": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.515.0.tgz", - "integrity": "sha512-5lrCn4DSE0zL41k0L6moqcdExZhWdAnV0/oMEagrISzQYoia+aNTEeyVD3xqJhRbEW4gCj3Uoyis6c8muf7b9g==", + "version": "3.499.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.499.0.tgz", + "integrity": "sha512-8HSFnZErRm7lAfk+Epxrf4QNdQEamg1CnbLybtKQQEjmvxLuXYvj16KlpYEZIwEENOMEvnCqMc7syTPkmjVhJA==", "dev": true, "requires": { - "@aws-sdk/middleware-sdk-s3": "3.515.0", - "@aws-sdk/types": "3.515.0", + "@aws-sdk/middleware-sdk-s3": "3.499.0", + "@aws-sdk/types": "3.496.0", "@smithy/protocol-http": "^3.1.1", "@smithy/signature-v4": "^2.1.1", "@smithy/types": "^2.9.1", "tslib": "^2.5.0" - }, - "dependencies": { - "@aws-sdk/types": { - "version": "3.515.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz", - "integrity": "sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==", - "dev": true, - "requires": { - "@smithy/types": "^2.9.1", - "tslib": "^2.5.0" - } - } + } + }, + "@aws-sdk/token-providers": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.496.0.tgz", + "integrity": "sha512-fyi8RcObEa1jNETJdc2H6q9VHrrdKCj/b6+fbLvymb7mUVRd0aWUn+24SNUImnSOnrwYnwaMfyyEC388X4MbFQ==", + "dev": true, + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.496.0", + "@aws-sdk/middleware-logger": "3.496.0", + "@aws-sdk/middleware-recursion-detection": "3.496.0", + "@aws-sdk/middleware-user-agent": "3.496.0", + "@aws-sdk/region-config-resolver": "3.496.0", + "@aws-sdk/types": "3.496.0", + "@aws-sdk/util-endpoints": "3.496.0", + "@aws-sdk/util-user-agent-browser": "3.496.0", + "@aws-sdk/util-user-agent-node": "3.496.0", + "@smithy/config-resolver": "^2.1.1", + "@smithy/fetch-http-handler": "^2.4.1", + "@smithy/hash-node": "^2.1.1", + "@smithy/invalid-dependency": "^2.1.1", + "@smithy/middleware-content-length": "^2.1.1", + "@smithy/middleware-endpoint": "^2.4.1", + "@smithy/middleware-retry": "^2.1.1", + "@smithy/middleware-serde": "^2.1.1", + "@smithy/middleware-stack": "^2.1.1", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/node-http-handler": "^2.3.1", + "@smithy/property-provider": "^2.1.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/url-parser": "^2.1.1", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-body-length-browser": "^2.1.1", + "@smithy/util-body-length-node": "^2.2.1", + "@smithy/util-defaults-mode-browser": "^2.1.1", + "@smithy/util-defaults-mode-node": "^2.1.1", + "@smithy/util-endpoints": "^1.1.1", + "@smithy/util-retry": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", + "tslib": "^2.5.0" } }, "@aws-sdk/types": { - "version": "3.511.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.511.0.tgz", - "integrity": "sha512-P03ufufxmkvd7nO46oOeEqYIMPJ8qMCKxAsfJk1JBVPQ1XctVntbail4/UFnrnzij8DTl4Mk/D62uGo7+RolXA==", + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.496.0.tgz", + "integrity": "sha512-umkGadK4QuNQaMoDICMm7NKRI/mYSXiyPjcn3d53BhsuArYU/52CebGQKdt4At7SwwsiVJZw9RNBHyN5Mm0HVw==", "dev": true, "requires": { "@smithy/types": "^2.9.1", @@ -33077,6 +32531,18 @@ "tslib": "^2.5.0" } }, + "@aws-sdk/util-endpoints": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.496.0.tgz", + "integrity": "sha512-1QzOiWHi383ZwqSi/R2KgKCd7M+6DxkxI5acqLPm8mvDRDP2jRjrnVaC0g9/tlttWousGEemDUWStwrD2mVYSw==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.496.0", + "@smithy/types": "^2.9.1", + "@smithy/util-endpoints": "^1.1.1", + "tslib": "^2.5.0" + } + }, "@aws-sdk/util-locate-window": { "version": "3.495.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz", @@ -33086,6 +32552,30 @@ "tslib": "^2.5.0" } }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.496.0.tgz", + "integrity": "sha512-4j2spN+h0I0qfSMsGvJXTfQBu1e18rPdekKvzsGJxhaAE1tNgUfUT4nbvc5uVn0sNjZmirskmJ3kfbzVOrqIFg==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.496.0", + "@smithy/types": "^2.9.1", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.496.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.496.0.tgz", + "integrity": "sha512-h0Ax0jlDc7UIo3KoSI4C4tVLBFoiAdx3+DhTVfgLS7x93d41dMlziPoBX2RgdcFn37qnzw6AQKTVTMwDbRCGpg==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.496.0", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/types": "^2.9.1", + "tslib": "^2.5.0" + } + }, "@aws-sdk/util-utf8-browser": { "version": "3.259.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", @@ -33150,20 +32640,20 @@ "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==" }, "@babel/core": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", - "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.9", - "@babel/parser": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -33331,13 +32821,13 @@ "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==" }, "@babel/helpers": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", - "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", "requires": { - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" } }, "@babel/highlight": { @@ -33381,9 +32871,9 @@ } }, "@babel/parser": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", - "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==" + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==" }, "@babel/plugin-proposal-class-properties": { "version": "7.18.6", @@ -33453,19 +32943,19 @@ } }, "@babel/template": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", - "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", - "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", "requires": { "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", @@ -33473,16 +32963,16 @@ "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "requires": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -33739,6 +33229,19 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -33825,11 +33328,39 @@ } }, "@cucumber/gherkin": { - "version": "28.0.0", - "resolved": "https://registry.npmjs.org/@cucumber/gherkin/-/gherkin-28.0.0.tgz", - "integrity": "sha512-Ee6zJQq0OmIUPdW0mSnsCsrWA2PZAELNDPICD2pLfs0Oz7RAPgj80UsD2UCtqyAhw2qAR62aqlktKUlai5zl/A==", + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin/-/gherkin-27.0.0.tgz", + "integrity": "sha512-j5rCsjqzRiC3iVTier3sa0kzyNbkcAmF7xr7jKnyO7qDeK3Z8Ye1P3KSVpeQRMY+KCDJ3WbTDdyxH0FwfA/fIw==", "requires": { - "@cucumber/messages": ">=19.1.4 <=24" + "@cucumber/messages": ">=19.1.4 <=22" + }, + "dependencies": { + "@cucumber/messages": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@cucumber/messages/-/messages-22.0.0.tgz", + "integrity": "sha512-EuaUtYte9ilkxcKmfqGF9pJsHRUU0jwie5ukuZ/1NPTuHS1LxHPsGEODK17RPRbZHOFhqybNzG2rHAwThxEymg==", + "requires": { + "@types/uuid": "9.0.1", + "class-transformer": "0.5.1", + "reflect-metadata": "0.1.13", + "uuid": "9.0.0" + } + }, + "@types/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==" + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + }, + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + } } }, "@cucumber/gherkin-streams": { @@ -33924,11 +33455,6 @@ "uuid": "9.0.1" }, "dependencies": { - "@types/uuid": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", - "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==" - }, "uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -34449,13 +33975,13 @@ "integrity": "sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==" }, "@lerna/create": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.1.2.tgz", - "integrity": "sha512-GzScCIkAW3tg3+Yn/MKCH9963bzG+zpjGz2NdfYDlYWI7p0f/SH46v1dqpPpYmZ2E/m3JK8HjTNNNL8eIm8/YQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.0.2.tgz", + "integrity": "sha512-AueSlfiYXqEmy9/EIc17mjlaHFuv734dfgVBegyoefIA7hdeoExtsXnACWf8Tw5af6gwyTL3KAp6QQyc1sTuZQ==", "dev": true, "requires": { "@npmcli/run-script": "7.0.2", - "@nx/devkit": ">=17.1.2 < 19", + "@nx/devkit": ">=17.1.2 < 18", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "19.0.11", "byte-size": "8.1.1", @@ -34492,7 +34018,7 @@ "npm-packlist": "5.1.1", "npm-registry-fetch": "^14.0.5", "npmlog": "^6.0.2", - "nx": ">=17.1.2 < 19", + "nx": ">=17.1.2 < 18", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-queue": "6.6.2", @@ -34600,6 +34126,12 @@ "path-type": "^4.0.0" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, "execa": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", @@ -34617,6 +34149,15 @@ "strip-final-newline": "^2.0.0" } }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, "get-stream": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", @@ -34799,9 +34340,9 @@ "dev": true }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -34862,11 +34403,11 @@ } }, "@ljharb/through": { - "version": "2.3.12", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.12.tgz", - "integrity": "sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.11.tgz", + "integrity": "sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==", "requires": { - "call-bind": "^1.0.5" + "call-bind": "^1.0.2" } }, "@noble/hashes": { @@ -34902,9 +34443,9 @@ } }, "@npmcli/agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.1.tgz", - "integrity": "sha512-H4FrOVtNyWC8MUwL3UfjOsAihHvT1Pe8POj3JvjXhSTJipsZMtgUALCT4mGyYZNxymkUfOw3PUj6dE4QPp6osQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.0.tgz", + "integrity": "sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==", "dev": true, "requires": { "agent-base": "^7.1.0", @@ -34924,9 +34465,9 @@ } }, "http-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.1.tgz", - "integrity": "sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", "dev": true, "requires": { "agent-base": "^7.1.0", @@ -34934,9 +34475,9 @@ } }, "https-proxy-agent": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.3.tgz", - "integrity": "sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", "dev": true, "requires": { "agent-base": "^7.0.2", @@ -34944,9 +34485,9 @@ } }, "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true }, "socks-proxy-agent": { @@ -35015,15 +34556,15 @@ }, "dependencies": { "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -35158,38 +34699,37 @@ } }, "@nrwl/devkit": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-18.0.4.tgz", - "integrity": "sha512-fKHnjg4/9MdFd2U4e8p6ja9fRa864DCyF70kB4YUB9NuUIgWLQ15Uj6wXC3xjdXmxQRyHDa7ORodVoFzdo4UCg==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.2.8.tgz", + "integrity": "sha512-l2dFy5LkWqSA45s6pee6CoqJeluH+sjRdVnAAQfjLHRNSx6mFAKblyzq5h1f4P0EUCVVVqLs+kVqmNx5zxYqvw==", "dev": true, "requires": { - "@nx/devkit": "18.0.4" + "@nx/devkit": "17.2.8" } }, "@nrwl/tao": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-18.0.4.tgz", - "integrity": "sha512-/PzGOJevlDQnp5RPXF3WDe+w1cdohGkY+mbJUgDVA4Q5JEPT1DtE10h9GgdHdzkPjVPNYsaI4Vs/53NUdlVHHA==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-17.2.8.tgz", + "integrity": "sha512-Qpk5YKeJ+LppPL/wtoDyNGbJs2MsTi6qyX/RdRrEc8lc4bk6Cw3Oul1qTXCI6jT0KzTz+dZtd0zYD/G7okkzvg==", "dev": true, "requires": { - "nx": "18.0.4", + "nx": "17.2.8", "tslib": "^2.3.0" } }, "@nx/devkit": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-18.0.4.tgz", - "integrity": "sha512-Vs1AXgOjMJyaWpKopD04dy0FwQ22n5ZR1bFf98Ab4Ht0WJwJE90IpUVAkwI03n5BYxAKOlQnFltsB4gu6Y8mZQ==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.2.8.tgz", + "integrity": "sha512-6LtiQihtZwqz4hSrtT5cCG5XMCWppG6/B8c1kNksg97JuomELlWyUyVF+sxmeERkcLYFaKPTZytP0L3dmCFXaw==", "dev": true, "requires": { - "@nrwl/devkit": "18.0.4", + "@nrwl/devkit": "17.2.8", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", - "semver": "^7.5.3", + "semver": "7.5.3", "tmp": "~0.2.1", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" + "tslib": "^2.3.0" }, "dependencies": { "lru-cache": { @@ -35202,9 +34742,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -35219,72 +34759,72 @@ } }, "@nx/nx-darwin-arm64": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.0.4.tgz", - "integrity": "sha512-9KJVONxUwdnFHHRNocsg7q5pliOTTfbjlr3rvhLuroV5HeTJFhUipKCQrVEhLy8e4auRdLuSz/HsgpJat3Z2cg==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.2.8.tgz", + "integrity": "sha512-dMb0uxug4hM7tusISAU1TfkDK3ixYmzc1zhHSZwpR7yKJIyKLtUpBTbryt8nyso37AS1yH+dmfh2Fj2WxfBHTg==", "dev": true, "optional": true }, "@nx/nx-darwin-x64": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-18.0.4.tgz", - "integrity": "sha512-rFKHjeU0Ngz1R7UJAsbncpqwuFDjUdpcvI783r6s2eP7JoiiwtDBXvDcHiy8Odk0lPYmwDELaFZBhvdENqaDNA==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.8.tgz", + "integrity": "sha512-0cXzp1tGr7/6lJel102QiLA4NkaLCkQJj6VzwbwuvmuCDxPbpmbz7HC1tUteijKBtOcdXit1/MEoEU007To8Bw==", "dev": true, "optional": true }, "@nx/nx-freebsd-x64": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.0.4.tgz", - "integrity": "sha512-jJx47wgRoUxVpQ+WG5+yLdxtJVuVgjphiTMRc0LOfUwKQaEHWyCA0hMK5fNmo0FAHIhGVCb/j2j9FxnCWTWpkg==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.8.tgz", + "integrity": "sha512-YFMgx5Qpp2btCgvaniDGdu7Ctj56bfFvbbaHQWmOeBPK1krNDp2mqp8HK6ZKOfEuDJGOYAp7HDtCLvdZKvJxzA==", "dev": true, "optional": true }, "@nx/nx-linux-arm-gnueabihf": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.0.4.tgz", - "integrity": "sha512-C3qWbFhEMIdTzvAHlIUHecZN3YBu7bx3S0p3gPNGmEMUMbYHP2zMlimBrZIbAxzntyGqWCqhXiFB21QhJ0t1Dw==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.8.tgz", + "integrity": "sha512-iN2my6MrhLRkVDtdivQHugK8YmR7URo1wU9UDuHQ55z3tEcny7LV3W9NSsY9UYPK/FrxdDfevj0r2hgSSdhnzA==", "dev": true, "optional": true }, "@nx/nx-linux-arm64-gnu": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.0.4.tgz", - "integrity": "sha512-PxVMh9ikp8Q3hKagb66FAsek8O/08GcMF5dXBH7xc5AiQMaZ6Az/gAXOeHp274nmu3StQEpl9Il/YH6Z9f4V0w==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.8.tgz", + "integrity": "sha512-Iy8BjoW6mOKrSMiTGujUcNdv+xSM1DALTH6y3iLvNDkGbjGK1Re6QNnJAzqcXyDpv32Q4Fc57PmuexyysZxIGg==", "dev": true, "optional": true }, "@nx/nx-linux-arm64-musl": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.0.4.tgz", - "integrity": "sha512-Iz7Z4h2/dXJJvBcyeRHa+d3Ncc4Qz+OiGm6iRDXv4zjFm5EyC1tkSZIFNlNiRjmTToNHFr4savrCjCh8wRYejw==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.8.tgz", + "integrity": "sha512-9wkAxWzknjpzdofL1xjtU6qPFF1PHlvKCZI3hgEYJDo4mQiatGI+7Ttko+lx/ZMP6v4+Umjtgq7+qWrApeKamQ==", "dev": true, "optional": true }, "@nx/nx-linux-x64-gnu": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.0.4.tgz", - "integrity": "sha512-BVLkegIwxHnEB64VBraBxyC01D3C3dVNxq2b4iNaqr4mpWNmos+G/mvcTU3NS7W8ZjpBjlXgdEkpgkl2hMKTEA==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.8.tgz", + "integrity": "sha512-sjG1bwGsjLxToasZ3lShildFsF0eyeGu+pOQZIp9+gjFbeIkd19cTlCnHrOV9hoF364GuKSXQyUlwtFYFR4VTQ==", "dev": true, "optional": true }, "@nx/nx-linux-x64-musl": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.0.4.tgz", - "integrity": "sha512-WgVy41psjCE9uxjFi4P62UrWyKQ1e2IN2FZaIuwXEB9h8OU/+g9PFpL1Cs1llNoEKnapKXX4+9b5FHF9i7EKQw==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.8.tgz", + "integrity": "sha512-QiakXZ1xBCIptmkGEouLHQbcM4klQkcr+kEaz2PlNwy/sW3gH1b/1c0Ed5J1AN9xgQxWspriAONpScYBRgxdhA==", "dev": true, "optional": true }, "@nx/nx-win32-arm64-msvc": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.0.4.tgz", - "integrity": "sha512-YoxhOrVKnS+kcNTnCg9M61cbigzGErYgnlI8kdZzH2ArD7mhv8bfZnSZUInf5Y8oDBVpKusel7AkCSofzSwigA==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.8.tgz", + "integrity": "sha512-XBWUY/F/GU3vKN9CAxeI15gM4kr3GOBqnzFZzoZC4qJt2hKSSUEWsMgeZtsMgeqEClbi4ZyCCkY7YJgU32WUGA==", "dev": true, "optional": true }, "@nx/nx-win32-x64-msvc": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.0.4.tgz", - "integrity": "sha512-FdAdl5buvtUXp8hZVRkK0AZeiCu35l0u+yHsulNViYdh3OXRT1hYJ0CeqpxlLfvbHqB9JzDPtJtG0dpKHH/O0Q==", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.8.tgz", + "integrity": "sha512-HTqDv+JThlLzbcEm/3f+LbS5/wYQWzb5YDXbP1wi7nlCTihNZOLNqGOkEmwlrR5tAdNHPRpHSmkYg4305W0CtA==", "dev": true, "optional": true }, @@ -35497,25 +35037,25 @@ } }, "@percy/appium-app": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@percy/appium-app/-/appium-app-2.0.4.tgz", - "integrity": "sha512-H2TBFTOPJITmkhjudVPbhHZ1NXRl1P6ty+B67nWKzExdjWR6cfuTedDh/3N0qN49CI/gBPkIuskk5EekdPx8gg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@percy/appium-app/-/appium-app-2.0.3.tgz", + "integrity": "sha512-6INeUJSyK2LzWV4Cc9bszNqKr3/NLcjFelUC2grjPnm6+jLA29inBF4ZE3PeTfLeCSw/0jyCGWV5fr9AyxtzCA==", "requires": { - "@percy/sdk-utils": "^1.28.0", + "@percy/sdk-utils": "^1.27.0-beta.0", "tmp": "^0.2.1" } }, "@percy/sdk-utils": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@percy/sdk-utils/-/sdk-utils-1.28.0.tgz", - "integrity": "sha512-K4fziY+OXJJtNVfecO3jI3VQFuei2Lf8/5nlQvnx+U9v8fGFrkc0aE+gIlP3Ce5qzJbotgAlV1Dd0bZ2y7i7vw==" + "version": "1.27.7", + "resolved": "https://registry.npmjs.org/@percy/sdk-utils/-/sdk-utils-1.27.7.tgz", + "integrity": "sha512-E21dIEQ9wwGDno41FdMDYf6jJow5scbWGClqKE/ptB+950W4UF5C4hxhVVQoEJxDdLE/Gy/8ZJR7upvPHShWDg==" }, "@percy/selenium-webdriver": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@percy/selenium-webdriver/-/selenium-webdriver-2.0.4.tgz", - "integrity": "sha512-KZshKLQKCFF6gxycu5kNCodQXu+m1Z2SfLKvnV8Ly3KhfUpDhuSg6ohhSOA4HHl0qqpaHf/sDzOV6TWbybTn8A==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@percy/selenium-webdriver/-/selenium-webdriver-2.0.3.tgz", + "integrity": "sha512-JfLJVRkwNfqVofe7iGKtoQbOcKSSj9t4pWFbSUk95JfwAA7b9/c+dlBsxgIRrdrMYzLRjnJkYAFSZkJ4F4A19A==", "requires": { - "@percy/sdk-utils": "^1.28.0", + "@percy/sdk-utils": "^1.27.2", "node-request-interceptor": "^0.6.3" } }, @@ -35894,9 +35434,9 @@ } }, "@serenity-js/core": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/@serenity-js/core/-/core-3.17.0.tgz", - "integrity": "sha512-virYURHd3u7dBAn4b2tA1sFT6+dn/kfr3/N8iqz9esK8ORpwwSo8vFr7q78zJmpwBXMXo4PIQGWp9kleN5unHw==", + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/@serenity-js/core/-/core-3.15.1.tgz", + "integrity": "sha512-dtmWrCQw9VCUuG56vXmZis0eSN1ERed5SEKInUfvXuJqyXuvbW+kli2MRopYCNdPeP570PpMCSKmoQV+zpCl5Q==", "dev": true, "requires": { "@paralleldrive/cuid2": "2.2.2", @@ -35906,7 +35446,8 @@ "fast-glob": "3.3.2", "filenamify": "4.3.0", "graceful-fs": "4.2.11", - "semver": "7.6.0", + "moment": "2.30.1", + "semver": "7.5.4", "tiny-types": "1.21.0", "upath": "2.0.1", "validate-npm-package-name": "5.0.0" @@ -35946,12 +35487,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -35962,9 +35497,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -35988,9 +35523,9 @@ } }, "@sigstore/core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.0.0.tgz", - "integrity": "sha512-dW2qjbWLRKGu6MIDUTBuJwXCnR8zivcSpf5inUzk7y84zqy/dji0/uahppoIgMoKeR+6pUZucrwHfkQQtiG9Rw==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-0.2.0.tgz", + "integrity": "sha512-THobAPPZR9pDH2CAvDLpkrYedt7BlZnsyxDe+Isq4ZmGfPy5juOFZq487vCU2EgKD7aHSiTfE/i7sN7aEdzQnA==", "dev": true }, "@sigstore/protobuf-specs": { @@ -36098,9 +35633,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -36174,13 +35709,13 @@ } }, "@sigstore/verify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.0.0.tgz", - "integrity": "sha512-sRU6nblDBQ4pVTWni019Kij+XQj4RP75WXN5z3qHk81dt/L8A7r3v8RgRInTup4/Jf90WNods9CcbnWj7zJ26w==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-0.1.0.tgz", + "integrity": "sha512-2UzMNYAa/uaz11NhvgRnIQf4gpLTJ59bhb8ESXaoSS5sxedfS+eLak8bsdMc+qpNQfITUTFoSKFx5h8umlRRiA==", "dev": true, "requires": { "@sigstore/bundle": "^2.1.1", - "@sigstore/core": "^1.0.0", + "@sigstore/core": "^0.2.0", "@sigstore/protobuf-specs": "^0.2.1" }, "dependencies": { @@ -36248,9 +35783,9 @@ } }, "@smithy/core": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.2.tgz", - "integrity": "sha512-tYDmTp0f2TZVE18jAOH1PnmkngLQ+dOGUlMd1u67s87ieueNeyqhja6z/Z4MxhybEiXKOWFOmGjfTZWFxljwJw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.1.tgz", + "integrity": "sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q==", "dev": true, "requires": { "@smithy/middleware-endpoint": "^2.4.1", @@ -36668,9 +36203,9 @@ } }, "@smithy/util-defaults-mode-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.0.tgz", - "integrity": "sha512-iFJp/N4EtkanFpBUtSrrIbtOIBf69KNuve03ic1afhJ9/korDxdM0c6cCH4Ehj/smI9pDCfVv+bqT3xZjF2WaA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz", + "integrity": "sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA==", "dev": true, "requires": { "@smithy/config-resolver": "^2.1.1", @@ -36770,18 +36305,18 @@ } }, "@stencil/core": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.12.2.tgz", - "integrity": "sha512-WEMpoqwMV4hY/ab2z9NxRhSeZwuKEugjyn6Vd+qA9xqZh6VNUL27QbP8vCa7IeqD4Zql4JBtKu3lVuBHutWE6w==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.11.0.tgz", + "integrity": "sha512-zsKhgIkTGo+s7IthitxR/MKiMS3Ck1yIypOdXr0aE6ofboKqe9NdffTcxZ0vel0wD2bZYOb6WfPMzuhRKk6+FA==", "dev": true }, "@sveltejs/vite-plugin-svelte": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.2.tgz", - "integrity": "sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.1.tgz", + "integrity": "sha512-CGURX6Ps+TkOovK6xV+Y2rn8JKa8ZPUHPZ/NKgCxAmgBrXReavzFl8aOSCj3kQ1xqT7yGJj53hjcV/gqwDAaWA==", "dev": true, "requires": { - "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0", + "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0-next.0 || ^2.0.0", "debug": "^4.3.4", "deepmerge": "^4.3.1", "kleur": "^4.1.5", @@ -37317,9 +36852,9 @@ } }, "@types/node": { - "version": "20.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz", - "integrity": "sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==", + "version": "20.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.10.tgz", + "integrity": "sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==", "requires": { "undici-types": "~5.26.4" } @@ -37345,9 +36880,7 @@ "version": "15.7.11", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "@types/qs": { "version": "6.9.11", @@ -37362,12 +36895,10 @@ "dev": true }, "@types/react": { - "version": "18.2.55", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.55.tgz", - "integrity": "sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA==", + "version": "18.2.48", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", + "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", "dev": true, - "optional": true, - "peer": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -37404,9 +36935,7 @@ "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "@types/semver": { "version": "7.5.6", @@ -37510,9 +37039,9 @@ } }, "@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", + "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==" }, "@types/which": { "version": "2.0.2", @@ -37550,16 +37079,16 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.1.tgz", - "integrity": "sha512-OLvgeBv3vXlnnJGIAgCLYKjgMEU+wBGj07MQ/nxAaON+3mLzX7mJbhRYrVGiVvFiXtwFlkcBa/TtmglHy0UbzQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.1.tgz", + "integrity": "sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.0.1", - "@typescript-eslint/type-utils": "7.0.1", - "@typescript-eslint/utils": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/type-utils": "6.19.1", + "@typescript-eslint/utils": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -37568,6 +37097,32 @@ "ts-api-utils": "^1.0.1" }, "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz", + "integrity": "sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1" + } + }, + "@typescript-eslint/types": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz", + "integrity": "sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==", + "dev": true + }, + "@typescript-eslint/visitor-keys": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz", + "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.19.1", + "eslint-visitor-keys": "^3.4.1" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -37578,9 +37133,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -37595,54 +37150,112 @@ } }, "@typescript-eslint/parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.0.1.tgz", - "integrity": "sha512-8GcRRZNzaHxKzBPU3tKtFNing571/GwPBeCvmAUw0yBtfE2XVd0zFKJIMSWkHJcPQi0ekxjIts6L/rrZq5cxGQ==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.0.tgz", + "integrity": "sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.0.1", - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/typescript-estree": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1", + "@typescript-eslint/scope-manager": "6.19.0", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.0.1.tgz", - "integrity": "sha512-v7/T7As10g3bcWOOPAcbnMDuvctHzCFYCG/8R4bK4iYzdFqsZTbXGln0cZNVcwQcwewsYU2BJLay8j0/4zOk4w==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz", + "integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1" + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0" } }, "@typescript-eslint/type-utils": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.0.1.tgz", - "integrity": "sha512-YtT9UcstTG5Yqy4xtLiClm1ZpM/pWVGFnkAa90UfdkkZsR1eP2mR/1jbHeYp8Ay1l1JHPyGvoUYR6o3On5Nhmw==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.1.tgz", + "integrity": "sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.0.1", - "@typescript-eslint/utils": "7.0.1", + "@typescript-eslint/typescript-estree": "6.19.1", + "@typescript-eslint/utils": "6.19.1", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "@typescript-eslint/types": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz", + "integrity": "sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz", + "integrity": "sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz", + "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.19.1", + "eslint-visitor-keys": "^3.4.1" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "@typescript-eslint/types": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.0.1.tgz", - "integrity": "sha512-uJDfmirz4FHib6ENju/7cz9SdMSkeVvJDK3VcMFvf/hAShg8C74FW+06MaQPODHfDJp/z/zHfgawIJRjlu0RLg==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz", + "integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.1.tgz", - "integrity": "sha512-SO9wHb6ph0/FN5OJxH4MiPscGah5wjOd0RRpaLvuBv9g8565Fgu0uMySFEPqwPHiQU90yzJ2FjRYKGrAhS1xig==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz", + "integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1", + "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/visitor-keys": "6.19.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -37661,9 +37274,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -37678,20 +37291,62 @@ } }, "@typescript-eslint/utils": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.0.1.tgz", - "integrity": "sha512-oe4his30JgPbnv+9Vef1h48jm0S6ft4mNwi9wj7bX10joGn07QRfqIqFHoMiajrtoU88cIhXf8ahwgrcbNLgPA==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.1.tgz", + "integrity": "sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.0.1", - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/typescript-estree": "7.0.1", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/typescript-estree": "6.19.1", "semver": "^7.5.4" }, "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz", + "integrity": "sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1" + } + }, + "@typescript-eslint/types": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz", + "integrity": "sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz", + "integrity": "sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz", + "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.19.1", + "eslint-visitor-keys": "^3.4.1" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -37702,9 +37357,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -37719,12 +37374,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.1.tgz", - "integrity": "sha512-hwAgrOyk++RTXrP4KzCg7zB2U0xt7RUU0ZdMSCsqF3eKUwkdXUMyTb0qdCuji7VIbcpG62kKTU9M1J1c9UpFBw==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz", + "integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.0.1", + "@typescript-eslint/types": "6.19.0", "eslint-visitor-keys": "^3.4.1" } }, @@ -37748,9 +37403,9 @@ } }, "@vitejs/plugin-vue": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", - "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz", + "integrity": "sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA==", "dev": true, "requires": {} }, @@ -37776,23 +37431,23 @@ } }, "@vitest/expect": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.2.tgz", - "integrity": "sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.1.tgz", + "integrity": "sha512-/bqGXcHfyKgFWYwIgFr1QYDaR9e64pRKxgBNWNXPefPFRhgm+K3+a/dS0cUGEreWngets3dlr8w8SBRw2fCfFQ==", "dev": true, "requires": { - "@vitest/spy": "1.2.2", - "@vitest/utils": "1.2.2", + "@vitest/spy": "1.2.1", + "@vitest/utils": "1.2.1", "chai": "^4.3.10" } }, "@vitest/runner": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.2.tgz", - "integrity": "sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.1.tgz", + "integrity": "sha512-zc2dP5LQpzNzbpaBt7OeYAvmIsRS1KpZQw4G3WM/yqSV1cQKNKwLGmnm79GyZZjMhQGlRcSFMImLjZaUQvNVZQ==", "dev": true, "requires": { - "@vitest/utils": "1.2.2", + "@vitest/utils": "1.2.1", "p-limit": "^5.0.0", "pathe": "^1.1.1" }, @@ -37825,17 +37480,17 @@ } }, "@vitest/spy": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.2.tgz", - "integrity": "sha512-k9Gcahssw8d7X3pSLq3e3XEu/0L78mUkCjivUqCQeXJm9clfXR/Td8+AP+VC1O6fKPIDLcHDTAmBOINVuv6+7g==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.1.tgz", + "integrity": "sha512-vG3a/b7INKH7L49Lbp0IWrG6sw9j4waWAucwnksPB1r1FTJgV7nkBByd9ufzu6VWya/QTvQW4V9FShZbZIB2UQ==", "requires": { "tinyspy": "^2.2.0" } }, "@vitest/utils": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.2.tgz", - "integrity": "sha512-WKITBHLsBHlpjnDQahr+XK6RE7MiAsgrIkr0pGhQ9ygoxBfUeG0lUG5iLlzqjmKSlBv3+j5EGsriBzh+C3Tq9g==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-bsH6WVZYe/J2v3+81M5LDU8kW76xWObKIURpPrOXm2pjBniBu2MERI/XP60GpS4PHU3jyK50LUutOwrx4CyHUg==", "dev": true, "requires": { "diff-sequences": "^29.6.3", @@ -37959,8 +37614,8 @@ "version": "file:packages/wdio-allure-reporter", "requires": { "@types/node": "^20.1.0", - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "allure-js-commons": "^2.5.0", "csv-stringify": "^6.0.4", "strip-ansi": "^7.1.0" @@ -37984,14 +37639,14 @@ "@wdio/appium-service": { "version": "file:packages/wdio-appium-service", "requires": { - "@wdio/config": "8.31.1", + "@wdio/config": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "get-port": "^7.0.0", "import-meta-resolve": "^4.0.0", "param-case": "^3.0.4", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" } }, "@wdio/browser-runner": { @@ -38001,17 +37656,17 @@ "@originjs/vite-plugin-commonjs": "^1.0.3", "@types/istanbul-lib-source-maps": "^4.0.1", "@vitest/spy": "^1.0.1", - "@wdio/globals": "8.32.1", - "@wdio/local-runner": "8.32.1", + "@wdio/globals": "8.29.1", + "@wdio/local-runner": "8.29.2", "@wdio/logger": "8.28.0", - "@wdio/mocha-framework": "8.31.1", - "@wdio/protocols": "8.32.0", - "@wdio/runner": "8.32.1", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/mocha-framework": "8.29.1", + "@wdio/protocols": "^8.24.12", + "@wdio/runner": "8.29.2", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "deepmerge-ts": "^5.0.0", "expect": "^29.7.0", - "expect-webdriverio": "^4.11.2", + "expect-webdriverio": "^4.9.3", "get-port": "^7.0.0", "import-meta-resolve": "^4.0.0", "istanbul-lib-coverage": "^3.2.0", @@ -38026,8 +37681,8 @@ "vite": "~4.5.0", "vite-plugin-istanbul": "^5.0.0", "vite-plugin-top-level-await": "^1.3.0", - "webdriver": "8.32.0", - "webdriverio": "8.32.1" + "webdriver": "8.29.1", + "webdriverio": "8.29.1" }, "dependencies": { "rollup": { @@ -38058,10 +37713,10 @@ "@percy/selenium-webdriver": "^2.0.3", "@types/gitconfiglocal": "^2.0.1", "@types/node": "^20.1.0", - "@wdio/globals": "8.32.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "browserstack-local": "^1.5.1", "chalk": "^5.3.0", "csv-writer": "^1.6.0", @@ -38070,9 +37725,9 @@ "gitconfiglocal": "^2.1.0", "got": "^12.6.1", "uuid": "^9.0.0", - "webdriverio": "8.32.1", + "webdriverio": "8.29.1", "winston-transport": "^4.5.0", - "yauzl": "^3.0.0" + "yauzl": "^2.10.0" }, "dependencies": { "uuid": { @@ -38095,12 +37750,12 @@ "@types/recursive-readdir": "^2.2.1", "@types/yargs": "^17.0.24", "@vitest/snapshot": "^1.2.1", - "@wdio/config": "8.31.1", - "@wdio/globals": "8.32.1", + "@wdio/config": "8.29.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/protocols": "8.24.12", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "async-exit-hook": "^2.0.1", "chalk": "^5.2.0", "chokidar": "^3.5.3", @@ -38115,24 +37770,10 @@ "lodash.union": "^4.6.0", "read-pkg-up": "^10.0.0", "recursive-readdir": "^2.2.3", - "webdriverio": "8.32.1", + "webdriverio": "8.29.1", "yargs": "^17.7.2" }, "dependencies": { - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" - }, - "figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "requires": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - } - }, "find-up": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", @@ -38150,28 +37791,6 @@ "lru-cache": "^10.0.1" } }, - "inquirer": { - "version": "9.2.12", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz", - "integrity": "sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==", - "requires": { - "@ljharb/through": "^2.3.11", - "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", - "cli-cursor": "^3.1.0", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "figures": "^5.0.0", - "lodash": "^4.17.21", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - } - }, "json-parse-even-better-errors": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", @@ -38300,8 +37919,8 @@ "@wdio/concise-reporter": { "version": "file:packages/wdio-concise-reporter", "requires": { - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "chalk": "^5.0.1", "pretty-ms": "^7.0.1" } @@ -38310,8 +37929,8 @@ "version": "file:packages/wdio-config", "requires": { "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", "glob": "^10.2.2", @@ -38343,25 +37962,25 @@ "version": "file:packages/wdio-crossbrowsertesting-service", "requires": { "@types/node": "^20.1.0", - "@wdio/globals": "8.32.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "cbt_tunnels": "^1.2.2", "got": "^12.6.1", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" } }, "@wdio/cucumber-framework": { "version": "file:packages/wdio-cucumber-framework", "requires": { "@cucumber/cucumber": "9.5.1", - "@cucumber/gherkin": "28.0.0", + "@cucumber/gherkin": "27.0.0", "@cucumber/messages": "24.0.1", "@types/is-glob": "^4.0.1", "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "glob": "^10.2.2", "got": "^12.6.1", "is-glob": "^4.0.0" @@ -38376,25 +37995,25 @@ "@types/istanbul-lib-report": "^3.0.0", "@types/istanbul-reports": "^3.0.1", "@types/node": "^20.1.0", - "@wdio/globals": "8.32.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "babel-plugin-istanbul": "^6.1.1", - "devtools-protocol": "^0.0.1260888", + "devtools-protocol": "^0.0.1249869", "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-report": "^3.0.0", "istanbul-reports": "^3.1.4", "lighthouse": "8.6.0", "puppeteer-core": "20.3.0", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" } }, "@wdio/dot-reporter": { "version": "file:packages/wdio-dot-reporter", "requires": { "@types/tmp": "^0.2.3", - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "chalk": "^5.0.1", "tmp": "^0.2.1" } @@ -38402,15 +38021,15 @@ "@wdio/firefox-profile-service": { "version": "file:packages/wdio-firefox-profile-service", "requires": { - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "firefox-profile": "^4.5.0" } }, "@wdio/globals": { "version": "file:packages/wdio-globals", "requires": { - "expect-webdriverio": "^4.11.2", - "webdriverio": "8.32.1" + "expect-webdriverio": "^4.9.3", + "webdriverio": "8.29.1" } }, "@wdio/jasmine-framework": { @@ -38418,27 +38037,27 @@ "requires": { "@types/jasmine": "5.1.4", "@types/node": "^20.1.0", - "@wdio/globals": "8.32.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", - "expect-webdriverio": "^4.11.2", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", + "expect-webdriverio": "^4.9.3", "jasmine": "^5.0.0" } }, "@wdio/json-reporter": { "version": "file:packages/wdio-json-reporter", "requires": { - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1" + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1" } }, "@wdio/junit-reporter": { "version": "file:packages/wdio-junit-reporter", "requires": { "@types/json-stringify-safe": "^5.0.0", - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "json-stringify-safe": "^5.0.1", "junit-report-builder": "^3.0.0" } @@ -38451,8 +38070,8 @@ "@types/stream-buffers": "^3.0.4", "@wdio/logger": "8.28.0", "@wdio/repl": "8.24.12", - "@wdio/runner": "8.32.1", - "@wdio/types": "8.31.1", + "@wdio/runner": "8.29.2", + "@wdio/types": "8.29.1", "async-exit-hook": "^2.0.1", "split2": "^4.1.0", "stream-buffers": "^3.0.2" @@ -38495,8 +38114,8 @@ "@types/mocha": "^10.0.0", "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "mocha": "^10.0.0" } }, @@ -38518,7 +38137,7 @@ "@types/supports-color": "^8.1.1", "@types/tmp": "^0.2.3", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "diff": "^5.0.0", "object-inspect": "^1.12.0", "tmp": "^0.2.1" @@ -38528,41 +38147,41 @@ "version": "file:packages/wdio-runner", "requires": { "@types/node": "^20.1.0", - "@wdio/config": "8.31.1", - "@wdio/globals": "8.32.1", + "@wdio/config": "8.29.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "deepmerge-ts": "^5.0.0", - "expect-webdriverio": "^4.11.2", + "expect-webdriverio": "^4.9.3", "gaze": "^1.1.2", - "webdriver": "8.32.0", - "webdriverio": "8.32.1" + "webdriver": "8.29.1", + "webdriverio": "8.29.1" } }, "@wdio/sauce-service": { "version": "file:packages/wdio-sauce-service", "requires": { "@types/ip": "^1.1.0", - "@wdio/globals": "8.32.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "ip": "^1.1.8", "saucelabs": "7.5.0", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" } }, "@wdio/shared-store-service": { "version": "file:packages/wdio-shared-store-service", "requires": { "@polka/parse": "^1.0.0-next.0", - "@wdio/globals": "8.32.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "got": "^12.6.1", "polka": "^0.5.2", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" } }, "@wdio/smoke-test-cjs-service": { @@ -38574,7 +38193,7 @@ "@wdio/smoke-test-reporter": { "version": "file:packages/wdio-smoke-test-reporter", "requires": { - "@wdio/reporter": "8.31.1" + "@wdio/reporter": "8.29.1" } }, "@wdio/smoke-test-service": { @@ -38586,8 +38205,8 @@ "@wdio/spec-reporter": { "version": "file:packages/wdio-spec-reporter", "requires": { - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "chalk": "^5.1.2", "easy-table": "^1.2.0", "pretty-ms": "^7.0.0" @@ -38599,7 +38218,7 @@ "@types/express": "^4.17.8", "@types/morgan": "^1.9.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "express": "^4.14.0", "morgan": "^1.7.0" } @@ -38610,8 +38229,8 @@ "@types/dateformat": "^5.0.0", "@types/json-stringify-safe": "^5.0.0", "@wdio/logger": "8.28.0", - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "dateformat": "4.5.1", "got": "^12.6.1", "json-stringify-safe": "^5.0.1" @@ -38628,12 +38247,12 @@ "version": "file:packages/wdio-testingbot-service", "requires": { "@types/node": "^20.1.0", - "@wdio/globals": "8.32.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "got": "^12.6.1", "testingbot-tunnel-launcher": "^1.1.7", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" } }, "@wdio/types": { @@ -38647,7 +38266,7 @@ "requires": { "@puppeteer/browsers": "^1.6.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "decamelize": "^6.0.0", "deepmerge-ts": "^5.1.0", "edgedriver": "^5.3.5", @@ -38671,12 +38290,12 @@ "version": "file:packages/wdio-webdriver-mock-service", "requires": { "@types/uuid": "^9.0.0", - "@wdio/globals": "8.32.1", - "@wdio/protocols": "8.32.0", - "@wdio/types": "8.31.1", + "@wdio/globals": "8.29.1", + "@wdio/protocols": "8.24.12", + "@wdio/types": "8.29.1", "nock": "^13.2.4", "uuid": "^9.0.0", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "dependencies": { "uuid": { @@ -38827,27 +38446,11 @@ } }, "allure-js-commons": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/allure-js-commons/-/allure-js-commons-2.12.1.tgz", - "integrity": "sha512-gx8DBwUrXpfoielzTp8bvUIa+IERaO0ZMlu7NioembuHawVOINQSuX63o1TH1S8k7K4A2gHoiHf+v2x4BAmAaQ==", + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/allure-js-commons/-/allure-js-commons-2.11.1.tgz", + "integrity": "sha512-A7Eiofwj46JBbK2XsM9FKmbhTYrdok+5M2EzI5ueJ/S+T12xvINBrrKdtjkqFvz/oH9qA/iKHawlJc4MSQbxLQ==", "requires": { - "properties": "^1.2.1", - "strip-ansi": "^5.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } + "properties": "^1.2.1" } }, "ansi-align": { @@ -39191,9 +38794,9 @@ "integrity": "sha512-pXnVMfJKSIWU2Ml4JHP7pZEPIrgBO1Fd3WGx+fPBsS+KRGhE4vxooD8XBGWbQOIVSZsVK7pUDBBkCicNu80yzQ==" }, "axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", "dev": true, "requires": { "follow-redirects": "^1.15.4", @@ -40445,9 +40048,9 @@ } }, "chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -41237,9 +40840,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -41587,8 +41190,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, - "peer": true + "dev": true }, "csv-stringify": { "version": "6.4.5", @@ -41992,18 +41594,18 @@ "@types/node": "^20.1.0", "@types/ua-parser-js": "^0.7.33", "@types/uuid": "^9.0.0", - "@wdio/config": "8.31.1", - "@wdio/globals": "8.32.1", + "@wdio/config": "8.29.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/protocols": "8.24.12", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "chrome-launcher": "^1.0.0", "edge-paths": "^3.0.5", "import-meta-resolve": "^4.0.0", "puppeteer-core": "20.3.0", "query-selector-shadow-dom": "^1.0.0", - "ua-parser-js": "^1.0.37", + "ua-parser-js": "1.0.37", "uuid": "^9.0.0", "which": "^4.0.0" }, @@ -42016,14 +41618,14 @@ } }, "devtools-protocol": { - "version": "0.0.1260888", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1260888.tgz", - "integrity": "sha512-9rTIZ4ZjWwalCPiaY+kPiALLfOKgAz5CTi/Zb1L+qSZ8PH3zVo1T8JcgXIIqg1iM3pZ6hF+n9xO5r2jZ/SF+jg==" + "version": "0.0.1249869", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1249869.tgz", + "integrity": "sha512-Ctp4hInA0BEavlUoRy9mhGq0i+JSo/AwVyX2EFgZmV1kYB+Zq+EMBAn52QWu6FbRr10hRb6pBl420upbp4++vg==" }, "diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" }, "diff-sequences": { "version": "29.6.3", @@ -42112,9 +41714,9 @@ } }, "dotenv": { - "version": "16.4.4", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.4.tgz", - "integrity": "sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==" + "version": "16.4.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz", + "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==" }, "dotenv-expand": { "version": "10.0.0", @@ -42233,11 +41835,11 @@ } }, "edgedriver": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/edgedriver/-/edgedriver-5.3.10.tgz", - "integrity": "sha512-RFSHYMNtcF1PjaGZCA2rdQQ8hSTLPZgcYgeY1V6dC+tR4NhZXwFAku+8hCbRYh7ZlwKKrTbVu9FwknjFddIuuw==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/edgedriver/-/edgedriver-5.3.9.tgz", + "integrity": "sha512-G0wNgFMFRDnFfKaXG2R6HiyVHqhKwdQ3EgoxW3wPlns2wKqem7F+HgkWBcevN7Vz0nN4AXtskID7/6jsYDXcKw==", "requires": { - "@wdio/logger": "^8.28.0", + "@wdio/logger": "^8.16.17", "decamelize": "^6.0.0", "edge-paths": "^3.0.5", "node-fetch": "^3.3.2", @@ -43075,9 +42677,9 @@ } }, "eslint-plugin-unicorn": { - "version": "51.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-51.0.1.tgz", - "integrity": "sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==", + "version": "50.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-50.0.1.tgz", + "integrity": "sha512-KxenCZxqSYW0GWHH18okDlOQcpezcitm5aOSz6EnobyJ6BIByiPDviQRjJIUAjG/tMN11958MxaQ+qCoU6lfDA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.22.20", @@ -43310,17 +42912,17 @@ } }, "expect-webdriverio": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.11.8.tgz", - "integrity": "sha512-BRezX8yEWZN7H5eYde/4EeDbVu8HRWq7VKyRrx4s2RnMa23wF+axZC83a4F/eezP6Kek700n3dA3Ph8RSE6GAQ==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.9.3.tgz", + "integrity": "sha512-ASHsFc/QaK5ipF4ct3e8hd3elm8wNXk/Qa3EemtYDmfUQ4uzwqDf75m/QFQpwVNCjEpkNP7Be/6X9kz7bN0P9Q==", "requires": { - "@vitest/snapshot": "^1.2.2", - "@wdio/globals": "^8.29.3", - "@wdio/logger": "^8.28.0", + "@vitest/snapshot": "^1.2.1", + "@wdio/globals": "^8.27.0", + "@wdio/logger": "^8.24.12", "expect": "^29.7.0", "jest-matcher-utils": "^29.7.0", "lodash.isequal": "^4.5.0", - "webdriverio": "^8.29.3" + "webdriverio": "^8.27.0" } }, "exponential-backoff": { @@ -43452,15 +43054,6 @@ "requires": { "pump": "^3.0.0" } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } } } }, @@ -43570,17 +43163,18 @@ } }, "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", "requires": { - "escape-string-regexp": "^1.0.5" + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" }, "dependencies": { "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" } } }, @@ -44040,11 +43634,11 @@ } }, "geckodriver": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-4.3.2.tgz", - "integrity": "sha512-TNOoy+ULXJWI5XOq7CXD3PAD9TJa4NjMe7nKUXjlIsf+vezuaRsFgPwcgYdEem1K7106wabYsqr7Kqn51g0sJg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-4.3.1.tgz", + "integrity": "sha512-ol7JLsj55o5k+z7YzeSy2mdJROXMAxIa+uzr3A1yEMr5HISqQOTslE3ZeARcxR4jpAY3fxmHM+sq32qbe/eXfA==", "requires": { - "@wdio/logger": "^8.28.0", + "@wdio/logger": "^8.24.12", "decamelize": "^6.0.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", @@ -44342,9 +43936,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -44877,9 +44471,9 @@ } }, "husky": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", - "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true }, "iconv-lite": { @@ -45042,9 +44636,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -45070,18 +44664,17 @@ } }, "inquirer": { - "version": "9.2.14", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.14.tgz", - "integrity": "sha512-4ByIMt677Iz5AvjyKrDpzaepIyMewNvDcvwpVVRZNmy9dLakVoVgdCHZXbK1SlVJra1db0JZ6XkJyHsanpdrdQ==", - "dev": true, + "version": "9.2.12", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz", + "integrity": "sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==", "requires": { - "@ljharb/through": "^2.3.12", + "@ljharb/through": "^2.3.11", "ansi-escapes": "^4.3.2", "chalk": "^5.3.0", "cli-cursor": "^3.1.0", "cli-width": "^4.1.0", "external-editor": "^3.1.0", - "figures": "^3.2.0", + "figures": "^5.0.0", "lodash": "^4.17.21", "mute-stream": "1.0.0", "ora": "^5.4.1", @@ -45989,9 +45582,9 @@ } }, "junit-report-builder": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/junit-report-builder/-/junit-report-builder-3.2.1.tgz", - "integrity": "sha512-IMCp5XyDQ4YESDE4Za7im3buM0/7cMnRfe17k2X8B05FnUl9vqnaliX6cgOEmPIeWKfJrEe/gANRq/XgqttCqQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junit-report-builder/-/junit-report-builder-3.1.0.tgz", + "integrity": "sha512-uKcPKbjl/v3pqQUuQuCehmuObAb9adZiZleKp0JijMmKPpBh5rl9YvyPjVqzaLkA0dROnMnQvjXQF37VbYoofw==", "requires": { "date-format": "4.0.3", "lodash": "^4.17.21", @@ -46113,14 +45706,14 @@ "dev": true }, "lerna": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.1.2.tgz", - "integrity": "sha512-RCyBAn3XsqqvHbz3TxLfD7ylqzCi1A2UJnFEZmhURgx589vM3qYWQa/uOMeEEf565q6cAdtmulITciX1wgkAtw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.0.2.tgz", + "integrity": "sha512-nnOIGI5V5Af9gfraNcMVoV1Fry/y7/h3nCQYk0/CMzBYDD+xbNL3DH8+c82AJkNR5ABslmpXjW4DLJ11/1b3CQ==", "dev": true, "requires": { - "@lerna/create": "8.1.2", + "@lerna/create": "8.0.2", "@npmcli/run-script": "7.0.2", - "@nx/devkit": ">=17.1.2 < 19", + "@nx/devkit": ">=17.1.2 < 18", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "19.0.11", "byte-size": "8.1.1", @@ -46163,7 +45756,7 @@ "npm-packlist": "5.1.1", "npm-registry-fetch": "^14.0.5", "npmlog": "^6.0.2", - "nx": ">=17.1.2 < 19", + "nx": ">=17.1.2 < 18", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-pipe": "3.1.0", @@ -46274,6 +45867,12 @@ "path-type": "^4.0.0" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, "execa": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", @@ -46291,6 +45890,15 @@ "strip-final-newline": "^2.0.0" } }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, "get-port": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", @@ -46810,9 +46418,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -47086,11 +46694,11 @@ "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==" }, "locate-app": { - "version": "2.2.18", - "resolved": "https://registry.npmjs.org/locate-app/-/locate-app-2.2.18.tgz", - "integrity": "sha512-F1W7AospcYxSSBh8b2Km34/0t9tpLolXxzIbjnsyWdv5YgM2S/xWs0FRubqOXcTptsgrPCMKMszb9o1v1YBYVQ==", + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/locate-app/-/locate-app-2.2.11.tgz", + "integrity": "sha512-dSlpKcHeEUUxOgs15WUfRmnaLzFaCKCE0ktuaPIBrw2BFsb2QkqucJNlEREeCyrsPa0VfY2AYa+toGabI9Pffg==", "requires": { - "n12": "1.8.21", + "n12": "1.8.14", "type-fest": "2.13.0", "userhome": "1.0.0" }, @@ -47942,9 +47550,9 @@ } }, "mocha": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", - "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "requires": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -47953,12 +47561,13 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "8.1.0", + "glob": "7.2.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", + "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -47986,21 +47595,6 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -48030,23 +47624,35 @@ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" }, "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, "js-yaml": { @@ -48070,6 +47676,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==" + }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -48137,6 +47748,12 @@ "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true }, + "moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "dev": true + }, "morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -48239,9 +47856,9 @@ } }, "n12": { - "version": "1.8.21", - "resolved": "https://registry.npmjs.org/n12/-/n12-1.8.21.tgz", - "integrity": "sha512-4NVVx4jW9QhmGyI80v9tpK6S0ZP3pO8Z2X0YKE6whBLDz5MjOWmpQDVS5eh5dfXTn9t1sSFaw1HM8NB4KN6wwQ==" + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/n12/-/n12-1.8.14.tgz", + "integrity": "sha512-X4UcLstb71zFbrVjJfUszt5icPROLWWFAhLEaJOlDaSdd3BKzkXu4bEnHOX7pyZPWSSMQ4YSfpnQZxfiq4KESA==" }, "nanoid": { "version": "3.3.7", @@ -48391,9 +48008,9 @@ } }, "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true }, "make-fetch-happen": { @@ -48437,9 +48054,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -48590,9 +48207,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -48644,9 +48261,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -48702,9 +48319,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -48785,9 +48402,9 @@ } }, "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true }, "npm-normalize-package-bin": { @@ -48809,9 +48426,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -49228,26 +48845,26 @@ "dev": true }, "nx": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/nx/-/nx-18.0.4.tgz", - "integrity": "sha512-Njb1fGppOw/wM7nOA1hYlLduV2aL4PdXSv5QS5cVYicHT5tw5RnG/0z4j9e6QfFj2EydxVeDUtlGR98diZ3/Yw==", - "dev": true, - "requires": { - "@nrwl/tao": "18.0.4", - "@nx/nx-darwin-arm64": "18.0.4", - "@nx/nx-darwin-x64": "18.0.4", - "@nx/nx-freebsd-x64": "18.0.4", - "@nx/nx-linux-arm-gnueabihf": "18.0.4", - "@nx/nx-linux-arm64-gnu": "18.0.4", - "@nx/nx-linux-arm64-musl": "18.0.4", - "@nx/nx-linux-x64-gnu": "18.0.4", - "@nx/nx-linux-x64-musl": "18.0.4", - "@nx/nx-win32-arm64-msvc": "18.0.4", - "@nx/nx-win32-x64-msvc": "18.0.4", + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/nx/-/nx-17.2.8.tgz", + "integrity": "sha512-rM5zXbuXLEuqQqcjVjClyvHwRJwt+NVImR2A6KFNG40Z60HP6X12wAxxeLHF5kXXTDRU0PFhf/yACibrpbPrAw==", + "dev": true, + "requires": { + "@nrwl/tao": "17.2.8", + "@nx/nx-darwin-arm64": "17.2.8", + "@nx/nx-darwin-x64": "17.2.8", + "@nx/nx-freebsd-x64": "17.2.8", + "@nx/nx-linux-arm-gnueabihf": "17.2.8", + "@nx/nx-linux-arm64-gnu": "17.2.8", + "@nx/nx-linux-arm64-musl": "17.2.8", + "@nx/nx-linux-x64-gnu": "17.2.8", + "@nx/nx-linux-x64-musl": "17.2.8", + "@nx/nx-win32-arm64-msvc": "17.2.8", + "@nx/nx-win32-x64-msvc": "17.2.8", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.6", - "axios": "^1.6.0", + "axios": "^1.5.1", "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", @@ -49258,17 +48875,17 @@ "figures": "3.2.0", "flat": "^5.0.2", "fs-extra": "^11.1.0", + "glob": "7.1.4", "ignore": "^5.0.4", "jest-diff": "^29.4.1", "js-yaml": "4.1.0", "jsonc-parser": "3.2.0", "lines-and-columns": "~2.0.3", - "minimatch": "9.0.3", + "minimatch": "3.0.5", "node-machine-id": "1.1.12", "npm-run-path": "^4.0.1", "open": "^8.4.0", - "ora": "5.3.0", - "semver": "^7.5.3", + "semver": "7.5.3", "string-width": "^4.2.3", "strong-log-transformer": "^2.1.0", "tar-stream": "~2.2.0", @@ -49294,6 +48911,16 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -49331,6 +48958,35 @@ "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", "dev": true }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -49349,6 +49005,15 @@ "yallist": "^4.0.0" } }, + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -49358,26 +49023,10 @@ "path-key": "^3.0.0" } }, - "ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -50041,13 +49690,13 @@ } }, "@sigstore/sign": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.2.tgz", - "integrity": "sha512-mAifqvvGOCkb5BJ5d/SRrVP5+kKCGxtcHuti6lgqZalIfNxikxlJMMptOqFp9+xV5LAnJMSaMWtzvcgNZ3PlPA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.1.tgz", + "integrity": "sha512-U5sKQEj+faE1MsnLou1f4DQQHeFZay+V9s9768lw48J4pKykPj34rWyI1lsMOGJ3Mae47Ye6q3HAJvgXO21rkQ==", "dev": true, "requires": { "@sigstore/bundle": "^2.1.1", - "@sigstore/core": "^1.0.0", + "@sigstore/core": "^0.2.0", "@sigstore/protobuf-specs": "^0.2.1", "make-fetch-happen": "^13.0.0" } @@ -50132,9 +49781,9 @@ "dev": true }, "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true }, "make-fetch-happen": { @@ -50244,9 +49893,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -50264,17 +49913,17 @@ } }, "sigstore": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.2.1.tgz", - "integrity": "sha512-OBBSKvmjr4DCyUb+IC2p7wooOCsCNwaqvCilTJVNPo0y8lJl+LsCrfz4LtMwnw3Gn+8frt816wi1+DWZTUCpBQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.2.0.tgz", + "integrity": "sha512-fcU9clHwEss2/M/11FFM8Jwc4PjBgbhXoNskoK5guoK0qGQBSeUbQZRJ+B2fDFIvhyf0gqCaPrel9mszbhAxug==", "dev": true, "requires": { "@sigstore/bundle": "^2.1.1", - "@sigstore/core": "^1.0.0", + "@sigstore/core": "^0.2.0", "@sigstore/protobuf-specs": "^0.2.1", - "@sigstore/sign": "^2.2.2", + "@sigstore/sign": "^2.2.1", "@sigstore/tuf": "^2.3.0", - "@sigstore/verify": "^1.0.0" + "@sigstore/verify": "^0.1.0" } }, "ssri": { @@ -51209,9 +50858,9 @@ "dev": true }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -51696,6 +51345,15 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, + "resend": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/resend/-/resend-3.1.0.tgz", + "integrity": "sha512-H+Ll0bAim1L1slAGzjPZlYAlWqihHAdCM14POqJ0AUgEPfwZQ3Eb6Z9HCO5Wsi3IDMHihPx+O77kzgprj5CchQ==", + "dev": true, + "requires": { + "@react-email/render": "0.0.12" + } + }, "resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -52562,9 +52220,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -53855,9 +53513,9 @@ } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -54315,6 +53973,12 @@ "punycode": "^2.1.0" } }, + "url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "dev": true + }, "url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -54597,9 +54261,9 @@ } }, "vite-node": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.2.tgz", - "integrity": "sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.1.tgz", + "integrity": "sha512-fNzHmQUSOY+y30naohBvSW7pPn/xn3Ib/uqm+5wAJQJiqQsU0NBR78XdRJb04l4bOFKjpTWld0XAfkKlrDbySg==", "dev": true, "requires": { "cac": "^6.7.14", @@ -54646,16 +54310,16 @@ "requires": {} }, "vitest": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.2.tgz", - "integrity": "sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.1.tgz", + "integrity": "sha512-TRph8N8rnSDa5M2wKWJCMnztCZS9cDcgVTQ6tsTFTG/odHJ4l5yNVqvbeDJYJRZ6is3uxaEpFs8LL6QM+YFSdA==", "dev": true, "requires": { - "@vitest/expect": "1.2.2", - "@vitest/runner": "1.2.2", - "@vitest/snapshot": "1.2.2", - "@vitest/spy": "1.2.2", - "@vitest/utils": "1.2.2", + "@vitest/expect": "1.2.1", + "@vitest/runner": "1.2.1", + "@vitest/snapshot": "1.2.1", + "@vitest/spy": "1.2.1", + "@vitest/utils": "1.2.1", "acorn-walk": "^8.3.2", "cac": "^6.7.14", "chai": "^4.3.10", @@ -54668,12 +54332,23 @@ "std-env": "^3.5.0", "strip-literal": "^1.3.0", "tinybench": "^2.5.1", - "tinypool": "^0.8.2", + "tinypool": "^0.8.1", "vite": "^5.0.0", - "vite-node": "1.2.2", + "vite-node": "1.2.1", "why-is-node-running": "^2.2.2" }, "dependencies": { + "@vitest/snapshot": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.1.tgz", + "integrity": "sha512-Tmp/IcYEemKaqAYCS08sh0vORLJkMr0NRV76Gl8sHGxXT5151cITJCET20063wk0Yr/1koQ6dnmP6eEqezmd/Q==", + "dev": true, + "requires": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + } + }, "acorn-walk": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", @@ -54775,11 +54450,11 @@ "requires": { "@types/node": "^20.1.0", "@types/ws": "^8.5.3", - "@wdio/config": "8.31.1", + "@wdio/config": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/protocols": "8.24.12", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "deepmerge-ts": "^5.1.0", "got": "^12.6.1", "ky": "^0.33.0", @@ -54794,17 +54469,17 @@ "@types/lodash.clonedeep": "^4.5.6", "@types/lodash.zip": "^4.2.6", "@types/node": "^20.1.0", - "@wdio/config": "8.31.1", + "@wdio/config": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", + "@wdio/protocols": "8.24.12", "@wdio/repl": "8.24.12", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "archiver": "^6.0.0", "aria-query": "^5.0.0", "css-shorthand-properties": "^1.1.1", "css-value": "^0.0.1", - "devtools-protocol": "^0.0.1260888", + "devtools-protocol": "^0.0.1249869", "got": "^12.6.0", "grapheme-splitter": "^1.0.2", "import-meta-resolve": "^4.0.0", @@ -54817,7 +54492,7 @@ "resq": "^1.9.1", "rgb2hex": "0.2.5", "serialize-error": "^11.0.1", - "webdriver": "8.32.0" + "webdriver": "8.29.1" }, "dependencies": { "@puppeteer/browsers": { @@ -54842,14 +54517,6 @@ "debug": "^4.3.4" } }, - "chromium-bidi": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", - "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", - "requires": { - "mitt": "3.0.0" - } - }, "cross-fetch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", @@ -54909,6 +54576,14 @@ "ws": "8.13.0" }, "dependencies": { + "chromium-bidi": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", + "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", + "requires": { + "mitt": "3.0.0" + } + }, "devtools-protocol": { "version": "0.0.1147663", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", @@ -55056,9 +54731,9 @@ } }, "winston-transport": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", - "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz", + "integrity": "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==", "requires": { "logform": "^2.3.2", "readable-stream": "^3.6.0", @@ -55354,12 +55029,12 @@ } }, "yauzl": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.0.0.tgz", - "integrity": "sha512-6LiN2QaAWal/+uTf0N5nt4oAsSgddNO69kkLF0lXFY8J8Zt9WrcJq9saIIsg9vyOAnQ9m/dxoyPRMzo3G5BZHg==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "requires": { "buffer-crc32": "~0.2.3", - "pend": "~1.2.0" + "fd-slicer": "~1.1.0" } }, "yazl": { diff --git a/package.json b/package.json index 48d0060751a..cc15bfd3811 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "docs:generate": "run-s clean:website generate:bidi && node --loader ts-node/esm ./scripts/docs-generation/generateDocs.ts", "docs:build": "cd ./website && npm run build && cd ..", "docs:deploy": "node --loader ts-node/esm ./scripts/updateDocs.ts", + "sendExpenseMail": "node --loader ts-node/esm ./scripts/expense.ts", "test": "run-s test:eslint test:ejslint test:typings test:unit:run test:smoke test:component", "test:depcheck": "node --loader ts-node/esm ./scripts/depcheck.ts", "test:eslint": "eslint --cache packages examples scripts tests", @@ -68,16 +69,16 @@ "postinstall:husky": "husky install" }, "devDependencies": { - "@aws-sdk/client-cloudfront": "^3.513.0", - "@aws-sdk/client-s3": "^3.513.0", - "@aws-sdk/lib-storage": "^3.513.0", + "@aws-sdk/client-cloudfront": "^3.496.0", + "@aws-sdk/client-s3": "^3.496.0", + "@aws-sdk/lib-storage": "^3.496.0", "@octokit/rest": "^19.0.13", "@preact/preset-vite": "^2.8.1", "@react-email/components": "^0.0.14", "@react-email/tailwind": "^0.0.14", - "@serenity-js/core": "^3.17.0", - "@stencil/core": "^4.12.2", - "@sveltejs/vite-plugin-svelte": "^3.0.2", + "@serenity-js/core": "^3.15.1", + "@stencil/core": "^4.10.0", + "@sveltejs/vite-plugin-svelte": "^3.0.1", "@types/archiver": "^6.0.2", "@types/cheerio": "^0.22.35", "@types/eslint": "^8.56.2", @@ -85,17 +86,18 @@ "@types/lodash.clonedeep": "^4.5.9", "@types/lodash.zip": "^4.2.9", "@types/mime-types": "^2.1.4", - "@types/node": "^20.11.17", + "@types/node": "^20.11.5", + "@types/react": "^18.2.48", "@types/shelljs": "^0.8.15", "@types/split2": "^4.2.3", "@types/unzipper": "^0.10.9", - "@types/uuid": "^9.0.8", - "@typescript-eslint/eslint-plugin": "^7.0.1", - "@typescript-eslint/parser": "^7.0.1", - "@typescript-eslint/utils": "^7.0.1", + "@types/uuid": "^9.0.7", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", + "@typescript-eslint/utils": "^6.19.0", "@vitejs/plugin-react": "^4.2.1", - "@vitejs/plugin-vue": "^5.0.4", - "@vitest/coverage-v8": "^1.2.2", + "@vitejs/plugin-vue": "^5.0.3", + "@vitest/coverage-v8": "^1.2.1", "camelcase": "^8.0.0", "cddl": "^0.8.5", "cddl2ts": "^0.2.2", @@ -108,19 +110,22 @@ "ejs-lint": "^2.0.0", "eslint": "^8.56.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-unicorn": "^51.0.1", + "eslint-plugin-unicorn": "^50.0.1", "eslint-plugin-wdio": "^8.24.12", "eta": "^3.2.0", "glob": "^10.3.10", - "husky": "^9.0.11", + "husky": "^8.0.3", "inquirer": "^9.2.12", "jsdom": "^22.1.0", - "lerna": "^8.1.2", + "lerna": "^8.0.2", "lerna-changelog": "^2.2.0", "mime-types": "^2.1.35", "npm-run-all": "^4.1.5", + "react": "^18.2.0", + "recast": "^0.23.4", "recursive-readdir": "^2.2.3", "request": "^2.88.2", + "resend": "^3.1.0", "rimraf": "^5.0.5", "shelljs": "^0.8.5", "shx": "^0.3.4", @@ -128,6 +133,7 @@ "ts-node": "^10.9.2", "typescript": "^5.3.3", "unzipper": "^0.10.14", - "vitest": "^1.2.2" + "url-join": "^5.0.0", + "vitest": "^1.2.1" } } diff --git a/packages/devtools/package.json b/packages/devtools/package.json index 86dd7b75dbd..76b7844d074 100644 --- a/packages/devtools/package.json +++ b/packages/devtools/package.json @@ -1,6 +1,6 @@ { "name": "devtools", - "version": "8.32.1", + "version": "8.29.1", "description": "A Chrome DevTools protocol binding that maps WebDriver commands into Chrome DevTools commands using Puppeteer", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/devtools", @@ -39,11 +39,11 @@ "typeScriptVersion": "3.8.3", "dependencies": { "@types/node": "^20.1.0", - "@wdio/config": "8.31.1", + "@wdio/config": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/protocols": "8.24.12", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "chrome-launcher": "^1.0.0", "edge-paths": "^3.0.5", "import-meta-resolve": "^4.0.0", @@ -56,6 +56,6 @@ "devDependencies": { "@types/ua-parser-js": "^0.7.33", "@types/uuid": "^9.0.0", - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" } } diff --git a/packages/devtools/src/cjs/index.ts b/packages/devtools/src/cjs/index.ts index b98728e201e..4e0bd76afbf 100644 --- a/packages/devtools/src/cjs/index.ts +++ b/packages/devtools/src/cjs/index.ts @@ -29,9 +29,9 @@ class Devtools { * @param {Object} instance the object we get from a new browser session. * @returns {string} the new session id of the browser */ - static async reloadSession (instance: any, newCapabilities: any) { + static async reloadSession (instance: any) { const Devtools = (await import('../index.js')).default - return Devtools.reloadSession(instance, newCapabilities) + return Devtools.reloadSession(instance) } static get Devtools () { diff --git a/packages/devtools/src/index.ts b/packages/devtools/src/index.ts index e499b00195f..d2f6c72fce1 100644 --- a/packages/devtools/src/index.ts +++ b/packages/devtools/src/index.ts @@ -120,12 +120,9 @@ export default class DevTools { * @param {object} instance the object we get from a new browser session. * @returns {string} the new session id of the browser */ - static async reloadSession (instance: Client, newCapabilities: WebdriverIO.Capabilities): Promise { + static async reloadSession (instance: any): Promise { const { session } = sessionMap.get(instance.sessionId) - const browser = await launch({ - ...instance.requestedCapabilities as WebdriverIO.Capabilities, - ...(newCapabilities || {}) - }) + const browser = await launch(instance.requestedCapabilities) const pages = await browser.pages() session.initBrowser.call(session, browser, pages) instance.puppeteer = browser diff --git a/packages/devtools/src/types.ts b/packages/devtools/src/types.ts index 0231d03a3e2..ece89496cf3 100644 --- a/packages/devtools/src/types.ts +++ b/packages/devtools/src/types.ts @@ -3,7 +3,6 @@ import type { EventEmitter } from 'node:events' import type { Options, Capabilities } from '@wdio/types' import type { ProtocolCommands } from '@wdio/protocols' import type { LaunchOptions, BrowserLaunchArgumentOptions, BrowserConnectOptions, ConnectOptions } from 'puppeteer-core' -import type { Browser } from 'puppeteer-core/lib/esm/puppeteer/api/Browser.js' import type { EventEmitter as PuppeteerEventEmitter } from 'puppeteer-core/lib/esm/puppeteer/common/EventEmitter.js' declare global { @@ -44,9 +43,7 @@ export interface BaseClient extends EventEmitter { options: Options.WebDriver } -export interface Client extends BaseClient, ProtocolCommands { - puppeteer: Browser -} +export interface Client extends BaseClient, ProtocolCommands {} /** * Interface keeping together information allowing to remove active listener from emitter. diff --git a/packages/wdio-allure-reporter/package.json b/packages/wdio-allure-reporter/package.json index f2a43d9fffb..80ad1211799 100644 --- a/packages/wdio-allure-reporter/package.json +++ b/packages/wdio-allure-reporter/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/allure-reporter", - "version": "8.31.1", + "version": "8.29.2", "description": "A WebdriverIO reporter plugin to create Allure Test Reports", "author": "Boris Osipov ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-allure-reporter", @@ -40,8 +40,8 @@ }, "dependencies": { "@types/node": "^20.1.0", - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "allure-js-commons": "^2.5.0", "csv-stringify": "^6.0.4", "strip-ansi": "^7.1.0" diff --git a/packages/wdio-allure-reporter/src/reporter.ts b/packages/wdio-allure-reporter/src/reporter.ts index fd30e5a5a71..76a5d4a1d49 100644 --- a/packages/wdio-allure-reporter/src/reporter.ts +++ b/packages/wdio-allure-reporter/src/reporter.ts @@ -137,10 +137,6 @@ export default class AllureReporter extends WDIOReporter { while (this._state.currentAllureTestOrStep) { const currentTest = this._state.pop() as AllureTest | AllureStep - const isAnyStepFailed = currentTest.wrappedItem.steps.some((step) => step.status === AllureStatus.FAILED) - - currentTest.stage = Stage.FINISHED - currentTest.status = isAnyStepFailed ? AllureStatus.FAILED : AllureStatus.PASSED if (currentTest instanceof AllureTest) { setAllureIds(currentTest, this._state.currentSuite) @@ -182,14 +178,14 @@ export default class AllureReporter extends WDIOReporter { } } - _endTest(status: AllureStatus, error?: Error, stage?: Stage) { + _endTest(status: AllureStatus, error?: Error) { if (!this._state.currentAllureTestOrStep) { return } const currentSpec = this._state.pop() as AllureTest | AllureStep - currentSpec.stage = stage ?? Stage.FINISHED + currentSpec.stage = Stage.FINISHED currentSpec.status = status if (error) { @@ -353,21 +349,36 @@ export default class AllureReporter extends WDIOReporter { }) const suiteChildren = [...suite.tests!, ...suite.hooks] + // A scenario is it skipped if every steps are skipped and hooks are passed or skipped const isSkipped = suite.tests.every(item => [AllureStatus.SKIPPED].includes(item.state as AllureStatus)) && suite.hooks.every(item => [AllureStatus.PASSED, AllureStatus.SKIPPED].includes(item.state as AllureStatus)) if (isSkipped) { - this._endTest(AllureStatus.SKIPPED, undefined, Stage.PENDING) + const currentTest = this._state.pop() as AllureTest + + currentTest.status = AllureStatus.SKIPPED + currentTest.stage = Stage.PENDING + setAllureIds(currentTest, this._state.currentSuite) + currentTest.endTest() return } const isFailed = suiteChildren.find(item => item.state === AllureStatus.FAILED) if (isFailed) { - const testStatus = getTestStatus(isFailed) + const currentTest = this._state.pop() as AllureTest + + currentTest.status = getTestStatus(isFailed) + currentTest.stage = Stage.FINISHED const error = getErrorFromFailedTest(isFailed) - this._endTest(testStatus, error) + if (error) { + currentTest.detailsMessage = error.message + currentTest.detailsTrace = error.stack + } + + setAllureIds(currentTest, this._state.currentSuite) + currentTest.endTest() return } @@ -376,7 +387,12 @@ export default class AllureReporter extends WDIOReporter { const isPartiallySkipped = suiteChildren.every(item => [AllureStatus.PASSED, AllureStatus.SKIPPED].includes(item.state as AllureStatus)) if (isPassed || isPartiallySkipped) { - this._endTest(AllureStatus.PASSED) + const currentTest = this._state.pop() as AllureTest + + currentTest.status = AllureStatus.PASSED + currentTest.stage = Stage.FINISHED + setAllureIds(currentTest, this._state.currentSuite) + currentTest.endTest() return } diff --git a/packages/wdio-allure-reporter/tests/cucumber.suite.test.ts b/packages/wdio-allure-reporter/tests/cucumber.suite.test.ts index 361788c371c..8ff8edc9d2e 100644 --- a/packages/wdio-allure-reporter/tests/cucumber.suite.test.ts +++ b/packages/wdio-allure-reporter/tests/cucumber.suite.test.ts @@ -359,44 +359,6 @@ describe('reporter option "useCucumberStepReporter" set to true', () => { }) }) - describe('Unfinished tests', () => { - outputDir = temporaryDirectory() - - beforeAll(() => { - reporter = new AllureReporter({ outputDir, useCucumberStepReporter: true }) - - reporter.onRunnerStart(runnerStart()) - reporter.onSuiteStart(cucumberHelper.featureStart()) - reporter.onSuiteStart(cucumberHelper.scenarioStart('my-awesome-feature-at-scenario-level')) - reporter.onTestStart(cucumberHelper.testStart()) - - const suiteResults: any = { tests: [cucumberHelper.testPass()], hooks: new Array(2).fill(cucumberHelper.hookEnd()) } - - reporter.onSuiteEnd(cucumberHelper.scenarioEnd(suiteResults)) - reporter.onSuiteEnd(cucumberHelper.featureEnd(suiteResults)) - reporter.onRunnerEnd(runnerEnd()) - - const { results, containers } = getResults(outputDir) - - expect(results).toHaveLength(1) - expect(containers).toHaveLength(1) - - allureResult = results[0] - allureContainer = containers[0] - }) - - afterAll(() => { - clean(outputDir) - vi.resetAllMocks() - }) - - it('sets stage and status for tests which haven\'t been finished before the feature', () => { - expect(allureResult.steps).toHaveLength(1) - expect(allureResult.steps[0].stage).toBe(Stage.FINISHED) - expect(allureResult.steps[0].status).toBe(Status.PASSED) - }) - }) - describe('Skipped test after several steps passed', () => { outputDir = temporaryDirectory() diff --git a/packages/wdio-appium-service/package.json b/packages/wdio-appium-service/package.json index d153cd68343..e436c08f5f6 100644 --- a/packages/wdio-appium-service/package.json +++ b/packages/wdio-appium-service/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/appium-service", - "version": "8.32.1", + "version": "8.29.1", "description": "A WebdriverIO service to start & stop Appium Server", "author": "Morten Bjerg Gregersen ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-appium-service", @@ -33,14 +33,14 @@ }, "typeScriptVersion": "3.8.3", "dependencies": { - "@wdio/config": "8.31.1", + "@wdio/config": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "get-port": "^7.0.0", "import-meta-resolve": "^4.0.0", "param-case": "^3.0.4", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "publishConfig": { "access": "public" diff --git a/packages/wdio-appium-service/src/launcher.ts b/packages/wdio-appium-service/src/launcher.ts index 8b9f96a5da7..fb60b9b1d59 100644 --- a/packages/wdio-appium-service/src/launcher.ts +++ b/packages/wdio-appium-service/src/launcher.ts @@ -192,7 +192,6 @@ export default class AppiumLauncher implements Services.ServiceInstance { process.stdout.on('data', (data) => { outputBuffer += data.toString() if (outputBuffer.includes('Appium REST http interface listener started')) { - outputBuffer = '' log.info(`Appium started with ID: ${process.pid}`) clearTimeout(timeoutId) resolve(process) diff --git a/packages/wdio-browser-runner/package.json b/packages/wdio-browser-runner/package.json index e18c6aeff56..0f577ec10d9 100644 --- a/packages/wdio-browser-runner/package.json +++ b/packages/wdio-browser-runner/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/browser-runner", - "version": "8.32.1", + "version": "8.29.2", "description": "A WebdriverIO runner to run unit tests tests in the browser.", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-browser-runner", @@ -37,17 +37,17 @@ "@originjs/vite-plugin-commonjs": "^1.0.3", "@types/istanbul-lib-source-maps": "^4.0.1", "@vitest/spy": "^1.0.1", - "@wdio/globals": "8.32.1", - "@wdio/local-runner": "8.32.1", + "@wdio/globals": "8.29.1", + "@wdio/local-runner": "8.29.2", "@wdio/logger": "8.28.0", - "@wdio/mocha-framework": "8.31.1", - "@wdio/protocols": "8.32.0", - "@wdio/runner": "8.32.1", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/mocha-framework": "8.29.1", + "@wdio/protocols": "^8.24.12", + "@wdio/runner": "8.29.2", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "deepmerge-ts": "^5.0.0", "expect": "^29.7.0", - "expect-webdriverio": "^4.11.2", + "expect-webdriverio": "^4.9.3", "get-port": "^7.0.0", "import-meta-resolve": "^4.0.0", "istanbul-lib-coverage": "^3.2.0", @@ -62,8 +62,8 @@ "vite": "~4.5.0", "vite-plugin-istanbul": "^5.0.0", "vite-plugin-top-level-await": "^1.3.0", - "webdriver": "8.32.0", - "webdriverio": "8.32.1" + "webdriver": "8.29.1", + "webdriverio": "8.29.1" }, "scripts": { "prepare": "rimraf node_modules/@wdio/config node_modules/@wdio/repl node_modules/@wdio/utils" diff --git a/packages/wdio-browser-runner/src/browser/driver.ts b/packages/wdio-browser-runner/src/browser/driver.ts index d901da92970..ddd1fcdb6b2 100644 --- a/packages/wdio-browser-runner/src/browser/driver.ts +++ b/packages/wdio-browser-runner/src/browser/driver.ts @@ -4,7 +4,7 @@ import { getEnvironmentVars } from 'webdriver' import { MESSAGE_TYPES, type Workers } from '@wdio/types' import { browser } from '@wdio/globals' -import { getCID, sanitizeConsoleArgs } from './utils.js' +import { getCID } from './utils.js' import { WDIO_EVENT_NAME } from '../constants.js' const COMMAND_TIMEOUT = 30 * 1000 // 30s @@ -185,7 +185,7 @@ export default class ProxyDriver { import.meta.hot?.send(WDIO_EVENT_NAME, this.#consoleMessage({ name: 'consoleEvent', type: method, - args: sanitizeConsoleArgs(args), + args, cid })) origCommand(...args) diff --git a/packages/wdio-browser-runner/src/browser/expect.ts b/packages/wdio-browser-runner/src/browser/expect.ts index 96d7b62682b..4d0422f02d1 100644 --- a/packages/wdio-browser-runner/src/browser/expect.ts +++ b/packages/wdio-browser-runner/src/browser/expect.ts @@ -1,5 +1,6 @@ import { expect, type MatcherContext, type ExpectationResult, type SyncExpectationResult } from 'expect' import { MESSAGE_TYPES, type Workers } from '@wdio/types' +import { matchers } from 'virtual:wdio' import { $ } from '@wdio/globals' import type { ChainablePromiseElement } from 'webdriverio' @@ -25,13 +26,14 @@ const matcherRequests = new Map() const COMMAND_TIMEOUT = 30 * 1000 // 30s /** - * Matcher factory enables to run all matchers within the browser by sending all necessary information - * to the worker process and execute the actual assertion in the Node.js environment. - * @param matcherName name of the matcher - * @returns a matcher result computed in the Node.js environment + * Set up expect-webdriverio matchers for the browser environment. + * Every assertion is send to the testrunner via a websocket connection + * and is executed in the Node.js environment. This allows us to enable + * matchers that require Node.js specific modules like `fs` or `child_process`, + * for visual regression or snapshot testing for example. */ -function createMatcher (matcherName: string) { - return async function (this: MatcherContext, context: WebdriverIO.Browser | WebdriverIO.Element | ChainablePromiseElement | ChainablePromiseArray, ...args: any[]) { +expect.extend(matchers.reduce((acc, matcherName) => { + acc[matcherName] = async function (context: WebdriverIO.Browser | WebdriverIO.Element | ChainablePromiseElement | ChainablePromiseArray, ...args: any[]) { const cid = getCID() if (!import.meta.hot || !cid) { return { @@ -56,28 +58,26 @@ function createMatcher (matcherName: string) { args: args } - const isContextObject = typeof context === 'object' - /** * Check if context is an WebdriverIO.Element */ - if (isContextObject && 'selector' in context && 'selector' in context) { + if ('elementId' in context && typeof context.elementId === 'string') { expectRequest.element = context } /** * Check if context is ChainablePromiseElement */ - if (isContextObject && 'then' in context && typeof (context as any).selector === 'object') { + if ('then' in context && typeof (context as any).selector === 'object') { expectRequest.element = await context } /** - * Check if context is a `Element` and transform it into a WebdriverIO.Element + * Check if context is a `Element` and transtform it into a WebdriverIO.Element */ if (context instanceof Element) { expectRequest.element = await $(context as any as HTMLElement) - } else if (isContextObject && !('sessionId' in context)) { + } else if (typeof context === 'object' && !('sessionId' in context)) { /** * check if context is an object or promise and resolve it * but not pass through the browser object @@ -86,11 +86,6 @@ function createMatcher (matcherName: string) { if ('then' in context) { expectRequest.context = await context } - } else if (!isContextObject) { - /** - * if context is not an object or promise, pass it through - */ - expectRequest.context = context } /** @@ -124,11 +119,7 @@ function createMatcher (matcherName: string) { } import.meta.hot.send(WDIO_EVENT_NAME, { type: MESSAGE_TYPES.expectRequestMessage, value: expectRequest }) - const contextString = isContextObject - ? 'elementId' in context - ? 'WebdriverIO.Element' - : 'WebdriverIO.Browser' - : context + const contextString = 'elementId' in context ? 'WebdriverIO.Element' : 'WebdriverIO.Browser' return new Promise((resolve, reject) => { const commandTimeout = setTimeout( @@ -139,39 +130,16 @@ function createMatcher (matcherName: string) { matcherRequests.set(expectRequest.id, { resolve, commandTimeout }) }) } -} - -/** - * request all available matchers from the testrunner - */ -import.meta.hot?.send(WDIO_EVENT_NAME, { type: MESSAGE_TYPES.expectMatchersRequest }) + return acc +}, {} as Record>)) /** * listen on assertion results from testrunner */ import.meta.hot?.on(WDIO_EVENT_NAME, (message: Workers.SocketMessage) => { - /** - * Set up `expect-webdriverio` matchers for the browser environment. - * Every assertion is send to the testrunner via a websocket connection - * and is executed in the Node.js environment. This allows us to enable - * matchers that require Node.js specific modules like `fs` or `child_process`, - * for visual regression or snapshot testing for example. - * - * The testrunner will send a list of available matchers to the browser - * since there might services or other hooks that add custom matchers. - */ - if (message.type === MESSAGE_TYPES.expectMatchersResponse) { - const matchers = message.value.matchers.reduce((acc, matcherName) => { - acc[matcherName] = createMatcher(matcherName) - return acc - }, {} as Record>) - expect.extend(matchers) - } - if (message.type !== MESSAGE_TYPES.expectResponseMessage) { return } - const payload = matcherRequests.get(message.value.id) if (!payload) { return console.warn(`Couldn't find payload for assertion result with id ${message.value.id}`) diff --git a/packages/wdio-browser-runner/src/browser/utils.ts b/packages/wdio-browser-runner/src/browser/utils.ts index 9a5f81009d9..ca14f9582af 100644 --- a/packages/wdio-browser-runner/src/browser/utils.ts +++ b/packages/wdio-browser-runner/src/browser/utils.ts @@ -25,30 +25,3 @@ export const showPopupWarning = (name: string, value: T, defaultValue?: T) => \`\`\``) return value } - -export function sanitizeConsoleArgs (args: unknown[]) { - return args.map((arg: any) => { - try { - if (arg && typeof arg.selector === 'string') { - return `WebdriverIO.Element<"${arg.selector}">` - } - if (arg && typeof arg.sessionId === 'string') { - return `WebdriverIO.Browser<${arg.capabilities.browserName}>` - } - } catch (err) { - // ignore - } - - if ( - arg instanceof HTMLElement || - (arg && typeof arg === 'object' && typeof arg.then === 'function') || - typeof arg === 'function' - ) { - return arg.toString() - } - if (arg instanceof Error) { - return arg.stack - } - return arg - }) -} diff --git a/packages/wdio-browser-runner/src/browser/integrations/stencil.ts b/packages/wdio-browser-runner/src/vite/frameworks/fixtures/stencil.ts similarity index 84% rename from packages/wdio-browser-runner/src/browser/integrations/stencil.ts rename to packages/wdio-browser-runner/src/vite/frameworks/fixtures/stencil.ts index 2d629b2a4a6..7d4fe2b3b69 100644 --- a/packages/wdio-browser-runner/src/browser/integrations/stencil.ts +++ b/packages/wdio-browser-runner/src/vite/frameworks/fixtures/stencil.ts @@ -1,6 +1,4 @@ import { h } from '@stencil/core' -import { $ } from '@wdio/globals' -import type { StencilEnvironment } from '../../../stencil/index.d.ts' /** * Emulate Node.js `nextTick` function in browser. @@ -8,18 +6,14 @@ import type { StencilEnvironment } from '../../../stencil/index.d.ts' */ process.nextTick = (cb) => setTimeout(cb, 0) -/** - * in case the user has his tsconfig.json configured to expect "jsx" to be "react" - */ // @ts-expect-error window.React = { - createElement: h + createElement: h, } import type { ComponentRuntimeMeta, ComponentTestingConstructor, - HostElement, HostRef, LazyBundlesRuntimeData, NewSpecPageOptions, @@ -34,10 +28,20 @@ import { setSupportsShadowDom, startAutoApplyChanges, styles, + win, writeTask, // @ts-expect-error } from '@stencil/core/internal/testing/index.js' +interface StencilEnvironment { + /** + * After changes have been made to a component, such as a update to a property or + * attribute, the test page does not automatically apply the changes. In order to + * wait for, and apply the update, call await `flushAll()`. + */ + flushAll: () => void +} + /** * Creates a new spec page for unit testing * @param opts the options to apply to the spec page that influence its configuration and operation @@ -48,16 +52,15 @@ export function render(opts: NewSpecPageOptions): StencilEnvironment { throw new Error('NewSpecPageOptions required') } - const components = opts.components || [] const stencilStage = document.querySelector('stencil-stage') if (stencilStage) { stencilStage.remove() } - const container = document.createElement('stencil-stage') - document.body.appendChild(container) + const stage = document.createElement('stencil-stage') + document.body.appendChild(stage) - if (Array.isArray(components)) { - registerComponents(components) + if (Array.isArray(opts.components)) { + registerComponents(opts.components) } if (opts.hydrateClientSide) { @@ -75,7 +78,16 @@ export function render(opts: NewSpecPageOptions): StencilEnvironment { } } const cmpTags = new Set() - const lazyBundles: LazyBundlesRuntimeData = components.map((Cstr: ComponentTestingConstructor) => { + const doc = win.document + + const page = { + win: win, + doc: doc, + body: stage as any, + styles + } as const + + const lazyBundles: LazyBundlesRuntimeData = opts.components.map((Cstr: ComponentTestingConstructor) => { // eslint-disable-next-line eqeqeq if (Cstr.COMPILER_META == null) { throw new Error('Invalid component class: Missing static "COMPILER_META" property.') @@ -102,29 +114,20 @@ export function render(opts: NewSpecPageOptions): StencilEnvironment { registerModule(bundleId, Cstr) /** - * Register the component as a custom element only if not already registered + * Register the component as a custom element */ - if (!customElements.get(Cstr.COMPILER_META.tagName)) { - customElements.define(Cstr.COMPILER_META.tagName, Cstr as any) - } + customElements.define(Cstr.COMPILER_META.tagName, Cstr as any) const lazyBundleRuntimeMeta = formatLazyBundleRuntimeMeta(bundleId, [Cstr.COMPILER_META]) return lazyBundleRuntimeMeta }) - const page = { - container, - styles, - flushAll, - unmount: () => container.remove() - } as const - if (typeof opts.direction === 'string') { - document.documentElement.setAttribute('dir', opts.direction) + page.doc.documentElement.setAttribute('dir', opts.direction) } if (typeof opts.language === 'string') { - document.documentElement.setAttribute('lang', opts.language) + page.doc.documentElement.setAttribute('lang', opts.language) } bootstrapLazy(lazyBundles) @@ -139,46 +142,38 @@ export function render(opts: NewSpecPageOptions): StencilEnvironment { $flags$: 0, $modeName$: undefined, $cmpMeta$: cmpMeta, - $hostElement$: container, + $hostElement$: page.body, } renderVdom(ref, opts.template()) - } else if (typeof opts.html === 'string') { - container.innerHTML = opts.html } let rootComponent: any = null Object.defineProperty(page, 'root', { get() { if (!rootComponent) { - rootComponent = findRootComponent(cmpTags, container) + rootComponent = findRootComponent(cmpTags, page.body) } if (rootComponent) { return rootComponent } - return container.firstElementChild + const firstElementChild = page.body.firstElementChild + if (!firstElementChild) { + return firstElementChild as any + } + return null }, }) - Object.defineProperty(page, '$root', { - get() { - return $((page as any).root) - } - }) - Object.defineProperty(page, '$container', { - get() { - return $(container) - } - }) - if (opts.hydrateServerSide) { - insertVdomAnnotations(document, []) + insertVdomAnnotations(doc, []) } if (opts.autoApplyChanges) { startAutoApplyChanges() } - return page as StencilEnvironment + flushAll() + return { flushAll } } /** @@ -281,39 +276,6 @@ function findRootComponent(cmpTags: Set, node: Element): Element | null return null } -/** - * Helper method to wait until all Stencil components are rendered - */ -export function waitForChanges (documentElement = document.documentElement) { - return new Promise((resolve) => { - requestAnimationFrame(() => { - const promiseChain: Promise[] = [] - - const waitComponentOnReady = (elm: Element | ShadowRoot, promises: Promise[]) => { - if ('shadowRoot' in elm && elm.shadowRoot instanceof ShadowRoot) { - waitComponentOnReady(elm.shadowRoot, promises) - } - const children = elm.children - const len = children.length - for (let i = 0; i < len; i++) { - const childElm = children[i] - const childStencilElm = childElm as HostElement - if (childElm.tagName.includes('-') && typeof childStencilElm.componentOnReady === 'function') { - promises.push(childStencilElm.componentOnReady().then(() => {})) - } - waitComponentOnReady(childElm, promises) - } - } - - waitComponentOnReady(documentElement, promiseChain) - - Promise.all(promiseChain) - .then(() => resolve()) - .catch(() => resolve()) - }) - }) -} - /** * A set of flags used for bitwise calculations against {@link ComponentRuntimeMeta#$flags$}. * diff --git a/packages/wdio-browser-runner/src/vite/frameworks/stencil.ts b/packages/wdio-browser-runner/src/vite/frameworks/stencil.ts index 05164ef8939..e1699de1233 100644 --- a/packages/wdio-browser-runner/src/vite/frameworks/stencil.ts +++ b/packages/wdio-browser-runner/src/vite/frameworks/stencil.ts @@ -1,7 +1,7 @@ import path from 'node:path' import url from 'node:url' -import { findStaticImports, parseStaticImport, type ParsedStaticImport } from 'mlly' +import { findStaticImports, parseStaticImport } from 'mlly' import type { InlineConfig, Plugin } from 'vite' import { hasFileByExtensions } from '../utils.js' @@ -20,7 +20,7 @@ export async function isUsingStencilJS(rootDir: string, options: WebdriverIO.Bro } export async function optimizeForStencil(rootDir: string) { - const stencilConfig = await importStencilConfig(rootDir) + const stencilConfig = await import(path.join(rootDir, 'stencil.config.ts')).catch(() => ({ config: {} })) const stencilPlugins = stencilConfig.config.plugins const stencilOptimizations: InlineConfig = { plugins: [await stencilVitePlugin(rootDir)], @@ -47,7 +47,7 @@ export async function optimizeForStencil(rootDir: string) { async function stencilVitePlugin(rootDir: string): Promise { const { transpileSync, ts } = await import('@stencil/core/compiler/stencil.js') - const stencilHelperPath = path.resolve(__dirname, '..', '..', 'browser', 'integrations', 'stencil.js') + const stencilHelperPath = path.resolve(__dirname, 'fixtures', 'stencil.js') return { name: 'wdio-stencil', enforce: 'pre', @@ -62,22 +62,7 @@ async function stencilVitePlugin(rootDir: string): Promise { .filter((imp) => imp.specifier === STENCIL_IMPORT) .map((imp) => parseStaticImport(imp)) const isStencilComponent = stencilImports.some((imp) => 'Component' in (imp.namedImports || {})) - - /** - * if file doesn't define a Stencil component - */ if (!isStencilComponent) { - /** - * if a test imports the `@wdio/browser-runner/stencil` package we want to automatically - * import `h` and `Fragment` from the `@stencil/core` package - */ - const stencilHelperImport = staticImports.find((imp) => imp.specifier === '@wdio/browser-runner/stencil') - if (stencilHelperImport) { - const imports = parseStaticImport(stencilHelperImport) - if ('render' in (imports.namedImports || {})) { - code = injectStencilImports(code, stencilImports) - } - } return { code } } @@ -115,7 +100,14 @@ async function stencilVitePlugin(rootDir: string): Promise { * StencilJS does not import the `h` or `Fragment` function by default. We need to add it so the user * doesn't need to. */ - transformedCode = injectStencilImports(transformedCode, stencilImports) + const hasRenderFunctionImport = stencilImports.some((imp) => 'h' in (imp.namedImports || {})) + if (!hasRenderFunctionImport) { + transformedCode = `import { h } from '@stencil/core';\n${transformedCode}` + } + const hasFragmentImport = stencilImports.some((imp) => 'Fragment' in (imp.namedImports || {})) + if (!hasFragmentImport) { + transformedCode = `import { Fragment } from '@stencil/core';\n${transformedCode}` + } return { ...transpiledCode, @@ -126,23 +118,6 @@ async function stencilVitePlugin(rootDir: string): Promise { } } -/** - * StencilJS does not import the `h` or `Fragment` function by default. We need to add it so the user - * doesn't need to. - */ -function injectStencilImports(code: string, imports: ParsedStaticImport[]) { - const hasRenderFunctionImport = imports.some((imp) => 'h' in (imp.namedImports || {})) - if (!hasRenderFunctionImport) { - code = `import { h } from '@stencil/core/internal/client';\n${code}` - } - const hasFragmentImport = imports.some((imp) => 'Fragment' in (imp.namedImports || {})) - if (!hasFragmentImport) { - code = `import { Fragment } from '@stencil/core/internal/client';\n${code}` - } - - return code -} - let _tsCompilerOptions: CompilerOptions | null = null /** @@ -181,21 +156,3 @@ function getCompilerOptions(ts: any, rootDir: string): CompilerOptions | null { _tsCompilerOptions = parseResult.options return _tsCompilerOptions } - -/** - * helper method to import a Stencil config file - */ -export async function importStencilConfig(rootDir: string) { - const configPath = path.join(rootDir, 'stencil.config.ts') - const config = await import(configPath).catch(() => ({ config: {} })) - - /** - * if we import the config within a CJS environment we need to - * access the default property even though there is a named export - */ - if ('default' in config) { - return config.default - } - - return config -} diff --git a/packages/wdio-browser-runner/src/vite/plugins/testrunner.ts b/packages/wdio-browser-runner/src/vite/plugins/testrunner.ts index 4653f9eca07..2e738145cd4 100644 --- a/packages/wdio-browser-runner/src/vite/plugins/testrunner.ts +++ b/packages/wdio-browser-runner/src/vite/plugins/testrunner.ts @@ -3,6 +3,7 @@ import path from 'node:path' import { builtinModules } from 'node:module' import logger from '@wdio/logger' +import { matchers } from 'expect-webdriverio' import { polyfillPath } from 'modern-node-polyfills' import { deepmerge } from 'deepmerge-ts' import { resolve } from 'import-meta-resolve' @@ -115,6 +116,7 @@ export function testrunner(options: WebdriverIO.BrowserRunnerOptions): Plugin[] import { fn } from '@wdio/browser-runner' export const commands = ${JSON.stringify(protocolCommandList)} export const automationProtocolPath = ${JSON.stringify(automationProtocolPath)} + export const matchers = ${JSON.stringify(Object.keys(matchers))} export const wrappedFn = (...args) => fn()(...args) ` } diff --git a/packages/wdio-browser-runner/src/vite/utils.ts b/packages/wdio-browser-runner/src/vite/utils.ts index 6cd8133eb30..d511b320f5c 100644 --- a/packages/wdio-browser-runner/src/vite/utils.ts +++ b/packages/wdio-browser-runner/src/vite/utils.ts @@ -19,13 +19,6 @@ export async function getTemplate(options: WebdriverIO.BrowserRunnerOptions, env const alias = (options.viteConfig as (InlineConfig | undefined))?.resolve?.alias || {} const usesTailwindCSS = await hasFileByExtensions(path.join(root, 'tailwind.config')) - /** - * clean up some values that might cause serialization issues - */ - if ('runner' in env.config) { - delete env.config.runner - } - let vueDeps = '' if (options.preset === 'vue') { try { diff --git a/packages/wdio-browser-runner/stencil/index.d.ts b/packages/wdio-browser-runner/stencil/index.d.ts index d7cc6110621..3359419a338 100644 --- a/packages/wdio-browser-runner/stencil/index.d.ts +++ b/packages/wdio-browser-runner/stencil/index.d.ts @@ -2,11 +2,11 @@ /** * Options pertaining to the creation and functionality of a {@link SpecPage} */ -export interface RenderOptions { +interface RenderOptions { /** * An array of components to test. Component classes can be imported into the spec file, then their reference should be added to the `component` array in order to be used throughout the test. */ - components?: any[]; + components: any[]; /** * If `false`, do not flush the render queue on initial test setup. */ @@ -17,10 +17,6 @@ export interface RenderOptions { * It will render the specified template (JSX) into `document.body`. */ template?: () => any; - /** - * The initial HTML used to generate the test. This can be useful to construct a collection of components working together, and assign HTML attributes. - */ - html?: string; /** * Sets the mocked `lang` attribute on ``. */ @@ -28,17 +24,25 @@ export interface RenderOptions { /** * Useful for debugging hydrating components client-side. Sets that the `html` option already includes annotated prerender attributes and comments. */ - // hydrateClientSide?: boolean; + hydrateClientSide?: boolean; /** * Useful for debugging hydrating components server-side. The output HTML will also include prerender annotations. */ - // hydrateServerSide?: boolean; + hydrateServerSide?: boolean; + /** + * Sets the mocked `document.referrer`. + */ + referrer?: string; + /** + * Manually set if the mocked document supports Shadow DOM or not. Default is `true`. + */ + supportsShadowDom?: boolean; /** * When a component is pre-rendered it includes HTML annotations, such as `s-id` attributes and `` comments. This information is used by clientside hydrating. Default is `false`. */ - // includeAnnotations?: boolean; + includeAnnotations?: boolean; /** - * By default, any changes to component properties and attributes must `page.waitForChanges()` in order to test the updates. As an option, `autoApplyChanges` continuously flushes the queue on the background. Default is `false`. + * By default, any changes to component properties and attributes must `page.waitForChanges()` in order to test the updates. As an option, `autoAppluChanges` continuously flushes the queue on the background. Default is `false`. */ autoApplyChanges?: boolean; /** @@ -51,51 +55,16 @@ export interface RenderOptions { * When `true` all `BuildConditionals` will be assigned to the global testing `BUILD` object, regardless of their * value. When `false`, only `BuildConditionals` with a value of `true` will be assigned to the `BUILD` object. */ - // strictBuild?: boolean; + strictBuild?: boolean; } -export interface StencilEnvironment { +interface StencilEnvironment { /** * After changes have been made to a component, such as a update to a property or * attribute, the test page does not automatically apply the changes. In order to * wait for, and apply the update, call await `flushAll()`. */ flushAll: () => void - /** - * All styles defined by components. - */ - styles: Record - /** - * Container element in which the template is being rendered into. - */ - container: HTMLElement - /** - * The container element as WebdriverIO element. - */ - $container: WebdriverIO.Element - /** - * The root component of the template. - */ - root: HTMLElement - /** - * The root component as WebdriverIO element. - */ - $root: WebdriverIO.Element - /** - * Removes the container element from the DOM. - */ - unmount: () => void } -/** - * Renders a Stencil component for testing into the page. - * @param opts options for the test page - * @returns a testing environment for the rendered component - */ export function render(opts: RenderOptions): StencilEnvironment - -/** - * Waits for the next update cycle to complete. - * @returns a promise that resolves when the update cycle completes - */ -export function waitForChanges(): Promise diff --git a/packages/wdio-browser-runner/tests/browser/utils.test.ts b/packages/wdio-browser-runner/tests/browser/utils.test.ts index 1bddde417b5..54bcaa06c95 100644 --- a/packages/wdio-browser-runner/tests/browser/utils.test.ts +++ b/packages/wdio-browser-runner/tests/browser/utils.test.ts @@ -1,7 +1,5 @@ -// @vitest-environment jsdom - import { vi, describe, it, beforeAll, afterAll, expect } from 'vitest' -import { showPopupWarning, sanitizeConsoleArgs } from '../../src/browser/utils.js' +import { showPopupWarning } from '../../src/browser/utils.js' describe('browser utils', () => { const consoleWarn = console.warn.bind(console) @@ -19,31 +17,6 @@ describe('browser utils', () => { expect(console.warn).toBeCalledTimes(3) }) - it('sanitizeConsoleArgs', () => { - expect(sanitizeConsoleArgs([ - 1, - 'foo', - { foo: 'bar' }, - { selector: '.foobar' }, - { - sessionId: 'foobar', - capabilities: { browserName: 'chrome' } - }, - new Error('foobar'), - Promise.resolve('foobar'), - () => {} - ])).toEqual([ - 1, - 'foo', - { foo: 'bar' }, - 'WebdriverIO.Element<".foobar">', - 'WebdriverIO.Browser', - expect.stringContaining('Error: foobar'), - '[object Promise]', - '() => {\n }' - ]) - }) - afterAll(() => { console.warn = consoleWarn }) diff --git a/packages/wdio-browser-runner/tests/vite/__snapshots__/utils.test.ts.snap b/packages/wdio-browser-runner/tests/vite/__snapshots__/utils.test.ts.snap index f7c998fbb0e..3d3c3267a06 100644 --- a/packages/wdio-browser-runner/tests/vite/__snapshots__/utils.test.ts.snap +++ b/packages/wdio-browser-runner/tests/vite/__snapshots__/utils.test.ts.snap @@ -43,7 +43,7 @@ exports[`getTemplate > renders template correctly 1`] = ` /** * Inject environment variables */ - window.__wdioEnv__ = {"config":{}} + window.__wdioEnv__ = {} window.__wdioSpec__ = '/spec.js' window.__wdioEvents__ = [] /** diff --git a/packages/wdio-browser-runner/tests/vite/communicator.test.ts b/packages/wdio-browser-runner/tests/vite/communicator.test.ts index ddb919874da..c26e05dd2b2 100644 --- a/packages/wdio-browser-runner/tests/vite/communicator.test.ts +++ b/packages/wdio-browser-runner/tests/vite/communicator.test.ts @@ -1,6 +1,5 @@ import path from 'node:path' import { describe, it, expect, vi } from 'vitest' -import { MESSAGE_TYPES } from '@wdio/types' import { ServerWorkerCommunicator } from '../../src/communicator.js' import { SESSIONS } from '../../src/constants.js' @@ -30,7 +29,7 @@ describe('ServerWorkerCommunicator', () => { await onWorkerMessage({ name: 'sessionEnded', cid: '0-0' }, {}, {}) expect(SESSIONS.size).toBe(0) expect(communicator.coverageMaps).toHaveLength(0) - await onWorkerMessage({ name: 'workerEvent', args: { type: MESSAGE_TYPES.coverageMap } }, {}, {}) + await onWorkerMessage({ name: 'workerEvent', args: { type: 7 } }, {}, {}) expect(communicator.coverageMaps).toHaveLength(1) const onBrowserEvent = server.onBrowserEvent.mock.calls[0][0] diff --git a/packages/wdio-browser-runner/tests/vite/frameworks/stencil.test.ts b/packages/wdio-browser-runner/tests/vite/frameworks/stencil.test.ts index f449363dd93..d87da67be77 100644 --- a/packages/wdio-browser-runner/tests/vite/frameworks/stencil.test.ts +++ b/packages/wdio-browser-runner/tests/vite/frameworks/stencil.test.ts @@ -71,7 +71,7 @@ test('optimizeForStencil', async () => { "import { Component, Prop, h } from '@stencil/core'", '/foo/bar/StencilComponent.tsx', {}) ).toEqual({ - code: "import { Fragment } from '@stencil/core/internal/client';\nthe transpiled code", + code: "import { Fragment } from '@stencil/core';\nthe transpiled code", inputFilePath: '/foo/bar/StencilComponent.tsx' }) expect((opt.plugins?.[0] as any).transform( @@ -81,47 +81,3 @@ test('optimizeForStencil', async () => { code: "import { Component, Prop, h } from 'something else'" }) }) - -test('auto imports "h" from Stencil', async () => { - const opt = await optimizeForStencil('/foo/bar') - const codeWithoutFragment = ` - import { some as thing } from '@stencil/core'; - import { h, foobar } from '@stencil/core'; - import { render as renderMe } from '@wdio/browser-runner/stencil'; - - console.log("Hello"); - ` - - const transformedCode = (opt.plugins?.[0] as any).transform( - codeWithoutFragment, - '/foo/bar/StencilComponent.tsx', {} - ) - expect(transformedCode).toEqual({ - code: expect.stringContaining('import { Fragment } from \'@stencil/core/internal/client\';') - }) - expect(transformedCode).toEqual({ - code: expect.not.stringContaining('import { h } from \'@stencil/core\';') - }) -}) - -test('auto imports "h" and "Fragment" from Stencil', async () => { - const opt = await optimizeForStencil('/foo/bar') - const codeWithoutAny = ` - import { some as thing } from '@stencil/core'; - import { foobar } from '@stencil/core'; - import { render as renderMe } from '@wdio/browser-runner/stencil'; - - console.log("Hello"); - ` - - const transformedCode = (opt.plugins?.[0] as any).transform( - codeWithoutAny, - '/foo/bar/StencilComponent.tsx', {} - ) - expect(transformedCode).toEqual({ - code: expect.stringContaining('import { Fragment } from \'@stencil/core/internal/client\';') - }) - expect(transformedCode).toEqual({ - code: expect.stringContaining('import { h } from \'@stencil/core/internal/client\';') - }) -}) diff --git a/packages/wdio-browser-runner/tests/vite/utils.test.ts b/packages/wdio-browser-runner/tests/vite/utils.test.ts index 0d46aab4f57..ef36e400bac 100644 --- a/packages/wdio-browser-runner/tests/vite/utils.test.ts +++ b/packages/wdio-browser-runner/tests/vite/utils.test.ts @@ -31,7 +31,7 @@ if (os.platform() !== 'win32') { describe('getTemplate', () => { it('fails if vue helpers are not installed', async () => { vi.mocked(resolve).mockRejectedValue(new Error('not there')) - await expect(getTemplate({ preset: 'vue' }, { config: {} } as any, '')) + await expect(getTemplate({ preset: 'vue' }, {} as any, '')) .rejects.toThrow(/Fail to set-up Vue environment/) }) @@ -44,7 +44,7 @@ if (os.platform() !== 'win32') { process.env.CI = '1' } const p: any = { env: { some: 'env' }, cwd: () => '/some/cwd' } - expect(await getTemplate({ preset: 'vue' }, { config: {} } as any, '/spec.js', p)).toMatchSnapshot() + expect(await getTemplate({ preset: 'vue' }, {} as any, '/spec.js', p)).toMatchSnapshot() expect(fs.readFile).toBeCalledTimes(2) }) }) diff --git a/packages/wdio-browserstack-service/package.json b/packages/wdio-browserstack-service/package.json index d737337f651..3a6a42accb0 100644 --- a/packages/wdio-browserstack-service/package.json +++ b/packages/wdio-browserstack-service/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/browserstack-service", - "version": "8.32.1", + "version": "8.29.1", "description": "WebdriverIO service for better Browserstack integration", "author": "Adam Bjerstedt ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-browserstack-service", @@ -34,8 +34,8 @@ "@percy/selenium-webdriver": "^2.0.3", "@types/gitconfiglocal": "^2.0.1", "@wdio/logger": "8.28.0", - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "browserstack-local": "^1.5.1", "chalk": "^5.3.0", "csv-writer": "^1.6.0", @@ -44,16 +44,16 @@ "gitconfiglocal": "^2.1.0", "got": "^12.6.1", "uuid": "^9.0.0", - "webdriverio": "8.32.1", + "webdriverio": "8.29.1", "winston-transport": "^4.5.0", - "yauzl": "^3.0.0" + "yauzl": "^2.10.0" }, "peerDependencies": { "@wdio/cli": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "devDependencies": { "@types/node": "^20.1.0", - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" }, "publishConfig": { "access": "public" diff --git a/packages/wdio-browserstack-service/src/@types/bstack-service-types.d.ts b/packages/wdio-browserstack-service/src/@types/bstack-service-types.d.ts index e139b420130..4955257726a 100644 --- a/packages/wdio-browserstack-service/src/@types/bstack-service-types.d.ts +++ b/packages/wdio-browserstack-service/src/@types/bstack-service-types.d.ts @@ -2,10 +2,12 @@ declare namespace WebdriverIO { interface Browser { getAccessibilityResultsSummary: () => Promise<{ [key: string]: any; }>, getAccessibilityResults: () => Promise> + performScan: () => Promise } interface MultiRemoteBrowser { getAccessibilityResultsSummary: () => Promise<{ [key: string]: any; }>, getAccessibilityResults: () => Promise> + performScan: () => Promise } } diff --git a/packages/wdio-browserstack-service/src/accessibility-handler.ts b/packages/wdio-browserstack-service/src/accessibility-handler.ts index a20ee51f966..525388841ec 100644 --- a/packages/wdio-browserstack-service/src/accessibility-handler.ts +++ b/packages/wdio-browserstack-service/src/accessibility-handler.ts @@ -1,3 +1,5 @@ +import util from 'node:util' + import type { Capabilities, Frameworks } from '@wdio/types' import type { ITestCaseHookParameter } from './cucumber-types.js' @@ -5,6 +7,7 @@ import type { ITestCaseHookParameter } from './cucumber-types.js' import { getA11yResultsSummary, getA11yResults, + performA11yScan, getUniqueIdentifier, getUniqueIdentifierForCucumber, isAccessibilityAutomationSession, @@ -14,7 +17,8 @@ import { validateCapsWithA11y, isTrue } from './util.js' -import { testForceStop, testStartEvent, testStop } from './scripts/test-event-scripts.js' +import accessibilityScripts from './scripts/accessibility-scripts.js' + import { BStackLogger } from './bstackLogger.js' class _AccessibilityHandler { @@ -24,6 +28,8 @@ class _AccessibilityHandler { private _accessibility?: boolean private _accessibilityOptions?: { [key: string]: any; } private _testMetadata: { [key: string]: any; } = {} + private static _a11yScanSessionMap: { [key: string]: any; } = {} + private _sessionId: string | null = null constructor ( private _browser: WebdriverIO.Browser | WebdriverIO.MultiRemoteBrowser, @@ -80,7 +86,8 @@ class _AccessibilityHandler { } } - async before () { + async before (sessionId: string) { + this._sessionId = sessionId this._accessibility = isTrue(this._getCapabilityValue(this._caps, 'accessibility', 'browserstack.accessibility')) if (isBrowserstackSession(this._browser) && isAccessibilityAutomationSession(this._accessibility)) { @@ -97,6 +104,33 @@ class _AccessibilityHandler { (this._browser as WebdriverIO.Browser).getAccessibilityResults = async () => { return await getA11yResults((this._browser as WebdriverIO.Browser), isBrowserstackSession(this._browser), this._accessibility) } + + (this._browser as WebdriverIO.Browser).performScan = async () => { + return await performA11yScan((this._browser as WebdriverIO.Browser), isBrowserstackSession(this._browser), this._accessibility) + } + + if (this._accessibility) { + if (Array.isArray(accessibilityScripts.commandsToWrap)) { + const that = this + accessibilityScripts.commandsToWrap.forEach(async function (command) { + if (command.name && command.class) { + await (that._browser as WebdriverIO.Browser).overwriteCommand(command.name, async function (origFunction: Function, ...args: any[]) { + if ( + that._sessionId && AccessibilityHandler._a11yScanSessionMap[that._sessionId] && + ( + !command.name.includes('execute') || + !AccessibilityHandler.isBrowserstackScript(args.length ? args[0] : null) + ) + ) { + BStackLogger.debug(`Performing scan for ${command.class} ${command.name}`) + await performA11yScan(that._browser, true, true, command.name) + } + return origFunction(...args) + }, command.class === 'Element') + } + }) + } + } } async beforeTest (suiteTitle: string | undefined, test: Frameworks.Test) { @@ -111,17 +145,16 @@ class _AccessibilityHandler { const testIdentifier = this.getIdentifier(test) const isPageOpened = await this.checkIfPageOpened(this._browser, testIdentifier, shouldScanTest) + if (this._sessionId) { + /* For case with multiple tests under onw browser, before hook of 2nd test should change this map value */ + AccessibilityHandler._a11yScanSessionMap[this._sessionId] = shouldScanTest + } + if (!isPageOpened) { return } try { - if (shouldScanTest) { - BStackLogger.info('Setup for Accessibility testing has started. Automate test case execution will begin momentarily.') - await this.sendTestStartEvent(this._browser as WebdriverIO.Browser) - } else { - await this.sendTestForceStopEvent(this._browser as WebdriverIO.Browser) - } this._testMetadata[testIdentifier].accessibilityScanStarted = shouldScanTest if (shouldScanTest) { @@ -133,7 +166,6 @@ class _AccessibilityHandler { } async afterTest (suiteTitle: string | undefined, test: Frameworks.Test) { - BStackLogger.debug('Accessibility after test hook. Before sending test stop event') if ( this._framework !== 'mocha' || !this.shouldRunTestHooks(this._browser, this._accessibility) @@ -187,20 +219,19 @@ class _AccessibilityHandler { const gherkinDocument = world.gherkinDocument const featureData = gherkinDocument.feature const uniqueId = getUniqueIdentifierForCucumber(world) - const shouldScanScenario = shouldScanTestForAccessibility(featureData?.name, pickleData.name, this._accessibilityOptions, world, true) + const shouldScanScenario = shouldScanTestForAccessibility(featureData?.name, pickleData.name, this._accessibilityOptions) const isPageOpened = await this.checkIfPageOpened(this._browser, uniqueId, shouldScanScenario) + if (this._sessionId) { + /* For case with multiple tests under onw browser, before hook of 2nd test should change this map value */ + AccessibilityHandler._a11yScanSessionMap[this._sessionId] = shouldScanScenario + } + if (!isPageOpened) { return } try { - if (shouldScanScenario) { - BStackLogger.info('Setup for Accessibility testing has started. Automate test case execution will begin momentarily.') - await this.sendTestStartEvent(this._browser as WebdriverIO.Browser) - } else { - await this.sendTestForceStopEvent(this._browser as WebdriverIO.Browser) - } this._testMetadata[uniqueId].accessibilityScanStarted = shouldScanScenario if (shouldScanScenario) { @@ -212,7 +243,6 @@ class _AccessibilityHandler { } async afterScenario (world: ITestCaseHookParameter) { - BStackLogger.debug('Accessibility after scenario hook. Before sending test stop event') if (!this.shouldRunTestHooks(this._browser, this._accessibility)) { return } @@ -258,16 +288,11 @@ class _AccessibilityHandler { * private methods */ - private sendTestStartEvent(browser: WebdriverIO.Browser) { - return (browser as WebdriverIO.Browser).executeAsync(testStartEvent) - } - - private sendTestForceStopEvent(browser: WebdriverIO.Browser) { - return (browser as WebdriverIO.Browser).execute(testForceStop) - } - - private sendTestStopEvent(browser: WebdriverIO.Browser, dataForExtension: any) { - return (browser as WebdriverIO.Browser).executeAsync(testStop, dataForExtension) + private async sendTestStopEvent(browser: WebdriverIO.Browser, dataForExtension: any) { + BStackLogger.debug('Performing scan before saving results') + await performA11yScan(browser, true, true) + const results: unknown = await (browser as WebdriverIO.Browser).executeAsync(accessibilityScripts.saveTestResults as string, dataForExtension) + BStackLogger.debug(util.format(results as string)) } private getIdentifier (test: Frameworks.Test | ITestCaseHookParameter) { @@ -301,6 +326,20 @@ class _AccessibilityHandler { return pageOpen } + + private static isBrowserstackScript(script: string | null): Boolean { + if (!script) { + return true + } + try { + return ( + script.toLowerCase().indexOf('browserstack_executor') !== -1 || + script.toLowerCase().indexOf('browserstack_accessibility_automation_script') !== -1 + ) + } catch (err: any) { + return true + } + } } // https://github.com/microsoft/TypeScript/issues/6543 diff --git a/packages/wdio-browserstack-service/src/launcher.ts b/packages/wdio-browserstack-service/src/launcher.ts index 80df876ee3c..0d2ed1fa100 100644 --- a/packages/wdio-browserstack-service/src/launcher.ts +++ b/packages/wdio-browserstack-service/src/launcher.ts @@ -449,8 +449,7 @@ export default class BrowserstackLauncherService implements Services.ServiceInst const form = new FormData() if (app.app) { - const fileName = path.basename(app.app) - form.append('file', new FileStream(fs.createReadStream(app.app)), fileName) + form.append('file', new FileStream(fs.createReadStream(app.app))) } if (app.customId) { form.append('custom_id', app.customId) diff --git a/packages/wdio-browserstack-service/src/reporter.ts b/packages/wdio-browserstack-service/src/reporter.ts index 7812fbb1f3e..4630f935ff8 100644 --- a/packages/wdio-browserstack-service/src/reporter.ts +++ b/packages/wdio-browserstack-service/src/reporter.ts @@ -50,7 +50,7 @@ class _TestReporter extends WDIOReporter { } private getUserCaps(runnerStats: RunnerStats) { - return runnerStats.instanceOptions[runnerStats.sessionId]?.capabilities + return runnerStats.instanceOptions[runnerStats.sessionId].capabilities } registerListeners () { diff --git a/packages/wdio-browserstack-service/src/scripts/accessibility-scripts.ts b/packages/wdio-browserstack-service/src/scripts/accessibility-scripts.ts new file mode 100644 index 00000000000..48b5a26aab8 --- /dev/null +++ b/packages/wdio-browserstack-service/src/scripts/accessibility-scripts.ts @@ -0,0 +1,69 @@ +import path from 'node:path' +import fs from 'node:fs' +import os from 'node:os' + +class AccessibilityScripts { + private static instance: AccessibilityScripts | null = null + + public performScan: string | null = null + public getResults: string | null = null + public getResultsSummary: string | null = null + public saveTestResults: string | null = null + public commandsToWrap: Array | null = null + + public browserstackFolderPath = path.join(os.homedir(), '.browserstack') + public commandsPath = path.join(this.browserstackFolderPath, 'commands.json') + + constructor() {} + + public static checkAndGetInstance() { + if (!AccessibilityScripts.instance) { + AccessibilityScripts.instance = new AccessibilityScripts() + AccessibilityScripts.instance.readFromExistingFile() + } + return AccessibilityScripts.instance + } + + private readFromExistingFile() { + try { + if (fs.existsSync(this.commandsPath)) { + const data = fs.readFileSync(this.commandsPath, 'utf8') + if (data) { + this.update(JSON.parse(data)) + } + } + } catch (error: any) { + /* Do nothing */ + } + } + + public update(data: { commands: [any], scripts: { scan: null; getResults: null; getResultsSummary: null; saveResults: null; }; }) { + if (data.scripts) { + this.performScan = data.scripts.scan + this.getResults = data.scripts.getResults + this.getResultsSummary = data.scripts.getResultsSummary + this.saveTestResults = data.scripts.saveResults + } + if (data.commands && data.commands.length) { + this.commandsToWrap = data.commands + } + } + + public store() { + if (!fs.existsSync(this.browserstackFolderPath)){ + fs.mkdirSync(this.browserstackFolderPath) + } + + fs.writeFileSync(this.commandsPath, JSON.stringify({ + commands: this.commandsToWrap, + scripts: { + scan: this.performScan, + getResults: this.getResults, + getResultsSummary: this.getResultsSummary, + saveResults: this.saveTestResults, + } + })) + } +} + +export default AccessibilityScripts.checkAndGetInstance() diff --git a/packages/wdio-browserstack-service/src/scripts/test-event-scripts.ts b/packages/wdio-browserstack-service/src/scripts/test-event-scripts.ts deleted file mode 100644 index 3baee1fb609..00000000000 --- a/packages/wdio-browserstack-service/src/scripts/test-event-scripts.ts +++ /dev/null @@ -1,68 +0,0 @@ -export function testStartEvent() { - const callback = arguments[arguments.length - 1] - const fn = () => { - window.addEventListener('A11Y_TAP_STARTED', fn2) - const e = new CustomEvent('A11Y_FORCE_START') - window.dispatchEvent(e) - } - const fn2 = () => { - window.removeEventListener('A11Y_TAP_STARTED', fn) - callback() - } - fn() -} - -export function testForceStop() { - const e = new CustomEvent('A11Y_FORCE_STOP') - window.dispatchEvent(e) -} - -export function testStop(this: any) { - const callback = arguments[arguments.length - 1] - - this.res = null - if (arguments[0].saveResults) { - window.addEventListener('A11Y_TAP_TRANSPORTER', (event: any) => { - (window as any).tapTransporterData = event.detail - this.res = (window as any).tapTransporterData - callback(this.res) - }) - } - const e = new CustomEvent('A11Y_TEST_END', { detail: arguments[0] }) - window.dispatchEvent(e) - if (arguments[0].saveResults !== true ) { - callback() - } -} - -export function accessibilityResults() : Promise> { - return new Promise(function (resolve, reject) { - try { - const event = new CustomEvent('A11Y_TAP_GET_RESULTS') - const fn = function (event: any) { - window.removeEventListener('A11Y_RESULTS_RESPONSE', fn) - resolve(event.detail.data) - } - window.addEventListener('A11Y_RESULTS_RESPONSE', fn) - window.dispatchEvent(event) - } catch { - reject() - } - }) -} - -export function accessibilityResultsSummary() : Promise<{ [key: string]: any; }> { - return new Promise(function (resolve, reject) { - try { - const event = new CustomEvent('A11Y_TAP_GET_RESULTS_SUMMARY') - const fn = function (event: any) { - window.removeEventListener('A11Y_RESULTS_SUMMARY_RESPONSE', fn) - resolve(event.detail.summary) - } - window.addEventListener('A11Y_RESULTS_SUMMARY_RESPONSE', fn) - window.dispatchEvent(event) - } catch { - reject() - } - }) -} diff --git a/packages/wdio-browserstack-service/src/service.ts b/packages/wdio-browserstack-service/src/service.ts index ea99513fd0c..36c5fa93377 100644 --- a/packages/wdio-browserstack-service/src/service.ts +++ b/packages/wdio-browserstack-service/src/service.ts @@ -144,6 +144,22 @@ export default class BrowserstackService implements Services.ServiceInstance { await this._insightsHandler.before() } + if (isBrowserstackSession(this._browser)) { + try { + this._accessibilityHandler = new AccessibilityHandler( + this._browser, + this._caps, + this._isAppAutomate(), + this._config.framework, + this._accessibility, + this._options.accessibilityOptions + ) + await this._accessibilityHandler.before(sessionId) + } catch (err) { + BStackLogger.error(`[Accessibility Test Run] Error in service class before function: ${err}`) + } + } + /** * register command event */ @@ -183,22 +199,6 @@ export default class BrowserstackService implements Services.ServiceInstance { } } - if (this._browser && isBrowserstackSession(this._browser)) { - try { - this._accessibilityHandler = new AccessibilityHandler( - this._browser, - this._caps, - this._isAppAutomate(), - this._config.framework, - this._accessibility, - this._options.accessibilityOptions - ) - await this._accessibilityHandler.before() - } catch (err) { - BStackLogger.error(`[Accessibility Test Run] Error in service class before function: ${err}`) - } - } - return await this._printSessionURL() } diff --git a/packages/wdio-browserstack-service/src/util.ts b/packages/wdio-browserstack-service/src/util.ts index cde9ea2ee99..dba326d1358 100644 --- a/packages/wdio-browserstack-service/src/util.ts +++ b/packages/wdio-browserstack-service/src/util.ts @@ -27,10 +27,10 @@ import type { ITestCaseHookParameter } from './cucumber-types.js' import { ACCESSIBILITY_API_URL, BROWSER_DESCRIPTION, DATA_ENDPOINT, DATA_EVENT_ENDPOINT, DATA_SCREENSHOT_ENDPOINT, UPLOAD_LOGS_ADDRESS, UPLOAD_LOGS_ENDPOINT, consoleHolder } from './constants.js' import RequestQueueHandler from './request-handler.js' import CrashReporter from './crash-reporter.js' -import { accessibilityResults, accessibilityResultsSummary } from './scripts/test-event-scripts.js' import { BStackLogger } from './bstackLogger.js' import { FileStream } from './fileStream.js' import BrowserstackLauncherService from './launcher.js' +import AccessibilityScripts from './scripts/accessibility-scripts.js' const pGitconfig = promisify(gitconfig) const __filename = fileURLToPath(import.meta.url) @@ -343,20 +343,11 @@ export const validateCapsWithA11y = (deviceName?: any, platformMeta?: { [key: st return false } -export const shouldScanTestForAccessibility = (suiteTitle: string | undefined, testTitle: string, accessibilityOptions?: { [key: string]: any; }, world?: { [key: string]: any; }, isCucumber?: boolean ) => { +export const shouldScanTestForAccessibility = (suiteTitle: string | undefined, testTitle: string, accessibilityOptions?: { [key: string]: any; }) => { try { const includeTags = Array.isArray(accessibilityOptions?.includeTagsInTestingScope) ? accessibilityOptions?.includeTagsInTestingScope : [] const excludeTags = Array.isArray(accessibilityOptions?.excludeTagsInTestingScope) ? accessibilityOptions?.excludeTagsInTestingScope : [] - if (isCucumber) { - const tagsList: string[] = [] - world?.pickle?.tags.map((tag: { [key: string]: any; }) => tagsList.push(tag.name)) - const excluded = excludeTags?.some((exclude) => tagsList.includes(exclude)) - const included = includeTags?.length === 0 || includeTags?.some((include) => tagsList.includes(include)) - - return !excluded && included - } - const fullTestName = suiteTitle + ' ' + testTitle const excluded = excludeTags?.some((exclude) => fullTestName.includes(exclude)) const included = includeTags?.length === 0 || includeTags?.some((include) => fullTestName.includes(include)) @@ -396,7 +387,10 @@ export const createAccessibilityTestRun = errorHandler(async function createAcce 'source': { frameworkName: 'WebdriverIO-' + config.framework, frameworkVersion: bsConfig.bstackServiceVersion, - sdkVersion: bsConfig.bstackServiceVersion + sdkVersion: bsConfig.bstackServiceVersion, + language: 'ECMAScript', + testFramework: 'webdriverIO', + testFrameworkVersion: bsConfig.bstackServiceVersion }, 'settings': bsConfig.accessibilityOptions || {}, 'versionControl': await getGitMetaData(), @@ -419,7 +413,7 @@ export const createAccessibilityTestRun = errorHandler(async function createAcce try { const response: any = await nodeRequest( - 'POST', 'test_runs', requestOptions, ACCESSIBILITY_API_URL + 'POST', 'v2/test_runs', requestOptions, ACCESSIBILITY_API_URL ) BStackLogger.debug(`[Create Accessibility Test Run] Success response: ${JSON.stringify(response)}`) @@ -430,9 +424,13 @@ export const createAccessibilityTestRun = errorHandler(async function createAcce if (response.data.id) { process.env.BS_A11Y_TEST_RUN_ID = response.data.id } - BStackLogger.debug(`BrowserStack Accessibility Automation Test Run ID: ${response.data.id}`) + if (response.data) { + AccessibilityScripts.update(response.data) + AccessibilityScripts.store() + } + return response.data.scannerVersion } catch (error : any) { if (error.response) { @@ -464,6 +462,27 @@ export const createAccessibilityTestRun = errorHandler(async function createAcce } }) +export const performA11yScan = async (browser: WebdriverIO.Browser | WebdriverIO.MultiRemoteBrowser, isBrowserStackSession?: boolean, isAccessibility?: boolean | string, commandName?: string) : Promise => { + if (!isBrowserStackSession) { + BStackLogger.warn('Not a BrowserStack Automate session, cannot perform Accessibility scan.') + return // since we are running only on Automate as of now + } + + if (!isAccessibilityAutomationSession(isAccessibility)) { + BStackLogger.warn('Not an Accessibility Automation session, cannot perform Accessibility scan.') + return + } + + try { + const results: unknown = await (browser as WebdriverIO.Browser).executeAsync(AccessibilityScripts.performScan as string, { 'method': commandName || '' }) + BStackLogger.debug(util.format(results as string)) + return results + } catch (err : any) { + BStackLogger.error('Accessibility Scan could not be performed : ' + err) + return + } +} + export const getA11yResults = async (browser: WebdriverIO.Browser, isBrowserStackSession?: boolean, isAccessibility?: boolean | string) : Promise> => { if (!isBrowserStackSession) { BStackLogger.warn('Not a BrowserStack Automate session, cannot retrieve Accessibility results.') @@ -476,7 +495,9 @@ export const getA11yResults = async (browser: WebdriverIO.Browser, isBrowserStac } try { - const results = await (browser as WebdriverIO.Browser).execute(accessibilityResults) + BStackLogger.debug('Performing scan before getting results') + await performA11yScan(browser, isBrowserStackSession, isAccessibility) + const results: Array<{ [key: string]: any; }> = await (browser as WebdriverIO.Browser).executeAsync(AccessibilityScripts.getResults as string) return results } catch { BStackLogger.error('No accessibility results were found.') @@ -495,7 +516,9 @@ export const getA11yResultsSummary = async (browser: WebdriverIO.Browser, isBrow } try { - const summaryResults = await (browser as WebdriverIO.Browser).execute(accessibilityResultsSummary) + BStackLogger.debug('Performing scan before getting results summary') + await performA11yScan(browser, isBrowserStackSession, isAccessibility) + const summaryResults: { [key: string]: any; } = await (browser as WebdriverIO.Browser).executeAsync(AccessibilityScripts.getResultsSummary as string) return summaryResults } catch { BStackLogger.error('No accessibility summary was found.') diff --git a/packages/wdio-browserstack-service/tests/util.test.ts b/packages/wdio-browserstack-service/tests/util.test.ts index c0ed2670f27..272b168f1a0 100644 --- a/packages/wdio-browserstack-service/tests/util.test.ts +++ b/packages/wdio-browserstack-service/tests/util.test.ts @@ -1026,15 +1026,6 @@ describe('validateCapsWithA11y', () => { }) describe('shouldScanTestForAccessibility', () => { - const cucumberWorldObj = { - pickle: { - tags: [ - { - name: 'someTag' - } - ] - } - } it('returns true if full test name contains includeTags', async () => { expect(shouldScanTestForAccessibility('suite title', 'test title', { includeTagsInTestingScope: 'title' })).toEqual(true) }) @@ -1042,14 +1033,6 @@ describe('shouldScanTestForAccessibility', () => { it('returns false if full test name contains excludeTags', async () => { expect(shouldScanTestForAccessibility('suite title', 'test title', { excludeTagsInTestingScope: 'title' })).toEqual(true) }) - - it('returns true if cucumber tags contain includeTags', async () => { - expect(shouldScanTestForAccessibility('suite title', 'test title', { includeTagsInTestingScope: 'someTag' }, cucumberWorldObj, true )).toEqual(true) - }) - - it('returns false if cucumber tags contain excludeTags', async () => { - expect(shouldScanTestForAccessibility('suite title', 'test title', { excludeTagsInTestingScope: 'someTag' }, cucumberWorldObj, true)).toEqual(true) - }) }) describe('isAccessibilityAutomationSession', () => { diff --git a/packages/wdio-cli/package.json b/packages/wdio-cli/package.json index 44956fe0675..ed311e16fb4 100644 --- a/packages/wdio-cli/package.json +++ b/packages/wdio-cli/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/cli", - "version": "8.32.1", + "version": "8.29.1", "description": "WebdriverIO testrunner command line interface", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-cli", @@ -47,12 +47,12 @@ "dependencies": { "@types/node": "^20.1.1", "@vitest/snapshot": "^1.2.1", - "@wdio/config": "8.31.1", - "@wdio/globals": "8.32.1", + "@wdio/config": "8.29.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/protocols": "8.24.12", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "async-exit-hook": "^2.0.1", "chalk": "^5.2.0", "chokidar": "^3.5.3", @@ -67,7 +67,7 @@ "lodash.union": "^4.6.0", "read-pkg-up": "^10.0.0", "recursive-readdir": "^2.2.3", - "webdriverio": "8.32.1", + "webdriverio": "8.29.1", "yargs": "^17.7.2" }, "devDependencies": { diff --git a/packages/wdio-cli/src/constants.ts b/packages/wdio-cli/src/constants.ts index bb73c1bfa84..8561616266d 100644 --- a/packages/wdio-cli/src/constants.ts +++ b/packages/wdio-cli/src/constants.ts @@ -118,9 +118,9 @@ export const SUPPORTED_PACKAGES = { ], service: [ // internal or community driver services - { name: 'visual', value: '@wdio/visual-service$--$visual' }, { name: 'vite', value: 'wdio-vite-service$--$vite' }, { name: 'nuxt', value: 'wdio-nuxt-service$--$nuxt' }, + { name: 'visual', value: '@wdio/visual-service$--$visual' }, { name: 'firefox-profile', value: '@wdio/firefox-profile-service$--$firefox-profile' }, { name: 'gmail', value: 'wdio-gmail-service$--$gmail' }, { name: 'sauce', value: '@wdio/sauce-service$--$sauce' }, @@ -585,17 +585,6 @@ export const QUESTIONNAIRE = [{ message: 'Do you want to add a plugin to your test setup?', choices: SUPPORTED_PACKAGES.plugin, default: [] -}, { - type: 'confirm', - name: 'includeVisualTesting', - message: 'Would you like to include Visual Testing to your setup? For more information see https://webdriver.io/docs/visual-testing!', - default: false, - when: /* istanbul ignore next */ (answers: Questionnair) => { - /** - * visual testing mostly makes sense for e2e and component tests - */ - return ['e2e', 'component'].includes(getTestingPurpose(answers)) - } }, { type: 'checkbox', name: 'services', @@ -641,9 +630,6 @@ export const QUESTIONNAIRE = [{ if (isNuxtProject) { defaultServices.push('nuxt') } - if (answers.includeVisualTesting) { - defaultServices.push('visual') - } return selectDefaultService(defaultServices) } }, { @@ -664,6 +650,22 @@ export const QUESTIONNAIRE = [{ message: 'In which directory should the mochawesome json reports get stored?', default: './', when: /* istanbul ignore next */ (answers: Questionnair) => answers.reporters.includes('mochawesome') +}, { + type: 'input', + name: 'baseUrl', + message: 'What is the base url?', + default: 'http://localhost', + // no base url for: + when: /* istanbul ignore next */ (answers: Questionnair) => ( + // unit and component testing in the browser + !isBrowserRunner(answers) && + // mobile testing with Appium + answers.e2eEnvironment !== 'mobile' && + // nor for VS Code, Electron or MacOS testing + !['vscode', 'electron', 'macos'].includes(getTestingPurpose(answers)) && + // nor for Nuxt projects + !isNuxtProject + ) }, { type: 'confirm', name: 'npmInstall', @@ -895,17 +897,6 @@ export const TESTRUNNER_DEFAULTS: Options.Definition = { } } }, - /** - * Overrides default snapshot path. For example, to store snapshots next to test files. - */ - resolveSnapshotPath: { - type: 'function', - validate: (param: Options.Testrunner['resolveSnapshotPath']) => { - if (param && typeof param !== 'function') { - throw new Error('the "resolveSnapshotPath" options needs to be a function') - } - } - }, /** * The number of times to retry the entire specfile when it fails as a whole */ diff --git a/packages/wdio-cli/src/interface.ts b/packages/wdio-cli/src/interface.ts index 199e4b640df..603ee782196 100644 --- a/packages/wdio-cli/src/interface.ts +++ b/packages/wdio-cli/src/interface.ts @@ -29,7 +29,7 @@ interface CLIInterfaceEvent { export default class WDIOCLInterface extends EventEmitter { #snapshotManager = new SnapshotManager({ - updateSnapshot: 'new' // ignored in this context + updateSnapshot: 'new' }) public hasAnsiSupport: boolean @@ -112,16 +112,16 @@ export default class WDIOCLInterface extends EventEmitter { : '' this.log(chalk.bold(`\nExecution of ${chalk.blue(this.totalWorkerCnt)} workers${shardNote} started at`), this._start.toISOString()) if (this._inDebugMode) { - this.log(chalk.bgYellow(chalk.black('DEBUG mode enabled!'))) + this.log(chalk.bgYellow.black('DEBUG mode enabled!')) } if (this._isWatchMode) { - this.log(chalk.bgYellow(chalk.black('WATCH mode enabled!'))) + this.log(chalk.bgYellow.black('WATCH mode enabled!')) } this.log('') } onSpecRunning (rid: string) { - this.onJobComplete(rid, this._jobs.get(rid), 0, chalk.bold(chalk.cyan('RUNNING'))) + this.onJobComplete(rid, this._jobs.get(rid), 0, chalk.bold.cyan('RUNNING')) } onSpecRetry (rid: string, job?: Workers.Job, retries = 0) { @@ -130,11 +130,11 @@ export default class WDIOCLInterface extends EventEmitter { } onSpecPass (rid: string, job?: Workers.Job, retries = 0) { - this.onJobComplete(rid, job, retries, chalk.bold(chalk.green('PASSED'))) + this.onJobComplete(rid, job, retries, chalk.bold.green('PASSED')) } onSpecFailure (rid: string, job?: Workers.Job, retries = 0) { - this.onJobComplete(rid, job, retries, chalk.bold(chalk.red('FAILED'))) + this.onJobComplete(rid, job, retries, chalk.bold.red('FAILED')) } onSpecSkip (rid: string, job?: Workers.Job) { @@ -261,7 +261,7 @@ export default class WDIOCLInterface extends EventEmitter { if (event.name === 'error') { return this.log( `[${event.cid}]`, - chalk.white(chalk.bgRed(chalk.bold(' Error: '))), + chalk.white.bgRed.bold(' Error: '), event.content ? (event.content.message || event.content.stack || event.content) : '' ) } @@ -310,7 +310,7 @@ export default class WDIOCLInterface extends EventEmitter { const reporter = this._messages.reporter this._messages.reporter = {} for (const [reporterName, messages] of Object.entries(reporter)) { - this.log('\n', chalk.bold(chalk.magenta(`"${reporterName}" Reporter:`))) + this.log('\n', chalk.bold.magenta(`"${reporterName}" Reporter:`)) this.log(messages.join('')) } } diff --git a/packages/wdio-cli/src/launcher.ts b/packages/wdio-cli/src/launcher.ts index eaa8f66ade4..98be6618896 100644 --- a/packages/wdio-cli/src/launcher.ts +++ b/packages/wdio-cli/src/launcher.ts @@ -14,6 +14,7 @@ import { runLauncherHook, runOnCompleteHook, runServiceHook } from './utils.js' import { TESTRUNNER_DEFAULTS, WORKER_GROUPLOGS_MESSAGES } from './constants.js' import type { HookError } from './utils.js' import type { RunCommandArguments } from './types.js' + const log = logger('@wdio/cli:launcher') interface Schedule { @@ -187,7 +188,7 @@ class Launcher { /** * run without triggering onPrepare/onComplete hooks */ - private _runMode(config: Required, caps: Capabilities.RemoteCapabilities): Promise { + private _runMode (config: Required, caps: Capabilities.RemoteCapabilities): Promise { /** * fail if no caps were found */ @@ -228,7 +229,7 @@ class Launcher { */ const availableInstances = this.isParallelMultiremote ? config.maxInstances || 1 : config.runner === 'browser' ? 1 - : (capabilities as Capabilities.DesiredCapabilities).maxInstances || (capabilities as WebdriverIO.Capabilities)['wdio:maxInstances'] || config.maxInstancesPerCapability + : (capabilities as Capabilities.DesiredCapabilities).maxInstances || config.maxInstancesPerCapability this._schedule.push({ cid: cid++, @@ -270,19 +271,9 @@ class Launcher { * Format the specs into an array of objects with files and retries */ private _formatSpecs(capabilities: (Capabilities.DesiredCapabilities | Capabilities.W3CCapabilities | Capabilities.RemoteCapabilities), specFileRetries: number) { - let caps: WebdriverIO.Capabilities - if ('alwaysMatch' in capabilities) { - caps = capabilities.alwaysMatch - } else if (typeof Object.keys(capabilities)[0] === 'object' && 'capabilities' in (capabilities as Capabilities.MultiRemoteCapabilities)[Object.keys(capabilities)[0]]) { - caps = {} - } else { - caps = capabilities as WebdriverIO.Capabilities - } - const specs = caps.specs || caps['wdio:specs'] - const excludes = caps.exclude || caps['wdio:exclude'] - const files = this.configParser.getSpecs(specs, excludes) + const files = this.configParser.getSpecs((capabilities as Capabilities.DesiredCapabilities).specs, (capabilities as Capabilities.DesiredCapabilities).exclude) - return files.map((file: string | string[]) => { + return files.map(file => { if (typeof file === 'string') { return { files: [file], retries: specFileRetries } } else if (Array.isArray(file)) { @@ -495,7 +486,7 @@ class Launcher { worker.on('exit', this._endHandler.bind(this)) } - private _workerHookError(error: HookError) { + private _workerHookError (error: HookError) { if (!this.interface) { throw new Error('Internal Error: no interface initialized, call run() first') } @@ -511,7 +502,7 @@ class Launcher { * @param {number} cid capability id (unique identifier for a capability) * @return {String} runner id (combination of cid and test id e.g. 0a, 0b, 1a, 1b ...) */ - private _getRunnerId(cid: number): string { + private _getRunnerId (cid: number): string { if (!this._rid[cid]) { this._rid[cid] = 0 } @@ -589,7 +580,7 @@ class Launcher { * having dead driver processes. To do so let the runner end its Selenium * session first before killing */ - private _exitHandler(callback?: (value: boolean) => void): void | Promise { + private _exitHandler (callback?: (value: boolean) => void): void | Promise { if (!callback || !this.runner || !this.interface) { return } diff --git a/packages/wdio-cli/src/templates/exampleFiles/browser/Component.lit.test.ejs b/packages/wdio-cli/src/templates/exampleFiles/browser/Component.lit.test.ejs index 144ff4d8d2a..7a6c24e8131 100644 --- a/packages/wdio-cli/src/templates/exampleFiles/browser/Component.lit.test.ejs +++ b/packages/wdio-cli/src/templates/exampleFiles/browser/Component.lit.test.ejs @@ -17,8 +17,6 @@ describe('Lit component testing', () => { await button.click() await button.click() - await expect(button).toHaveText('count is 2')<%- - answers.includeVisualTesting ? ` - await expect(button).toMatchElementSnapshot('counterButton')` : '' %> + await expect(button).toHaveText('count is 2') }) }) diff --git a/packages/wdio-cli/src/templates/exampleFiles/browser/Component.preact.test.ejs b/packages/wdio-cli/src/templates/exampleFiles/browser/Component.preact.test.ejs index 03a4644e9e7..10a8b548bc7 100644 --- a/packages/wdio-cli/src/templates/exampleFiles/browser/Component.preact.test.ejs +++ b/packages/wdio-cli/src/templates/exampleFiles/browser/Component.preact.test.ejs @@ -52,8 +52,6 @@ describe('Preact Component Tests', () => { await component.click() await component.click() - await expect(component).toHaveText('count is 2')<%- - answers.includeVisualTesting ? ` - await expect(component).toMatchElementSnapshot('counterButton')` : '' %> + await expect(component).toHaveText('count is 2') }) }) diff --git a/packages/wdio-cli/src/templates/exampleFiles/browser/Component.react.test.ejs b/packages/wdio-cli/src/templates/exampleFiles/browser/Component.react.test.ejs index 3e3eb579bd7..089093c2e78 100644 --- a/packages/wdio-cli/src/templates/exampleFiles/browser/Component.react.test.ejs +++ b/packages/wdio-cli/src/templates/exampleFiles/browser/Component.react.test.ejs @@ -51,8 +51,6 @@ describe('React Component Tests', () => { await component.click() await component.click() - await expect(component).toHaveText('count is 2')<%- - answers.includeVisualTesting ? ` - await expect(component).toMatchElementSnapshot('counterButton')` : '' %> + await expect(component).toHaveText('count is 2') }) }) diff --git a/packages/wdio-cli/src/templates/exampleFiles/browser/Component.solid.test.ejs b/packages/wdio-cli/src/templates/exampleFiles/browser/Component.solid.test.ejs index dc09af9b195..711cd73314c 100644 --- a/packages/wdio-cli/src/templates/exampleFiles/browser/Component.solid.test.ejs +++ b/packages/wdio-cli/src/templates/exampleFiles/browser/Component.solid.test.ejs @@ -51,8 +51,6 @@ describe('Preact Component Tests', () => { await component.click() await component.click() - await expect(component).toHaveText('count is 2')<%- - answers.includeVisualTesting ? ` - await expect(component).toMatchElementSnapshot('counterButton')` : '' %> + await expect(component).toHaveText('count is 2') }) }) diff --git a/packages/wdio-cli/src/templates/exampleFiles/browser/Component.stencil.test.ejs b/packages/wdio-cli/src/templates/exampleFiles/browser/Component.stencil.test.ejs index 337f9f102ad..e8850b2d5b6 100644 --- a/packages/wdio-cli/src/templates/exampleFiles/browser/Component.stencil.test.ejs +++ b/packages/wdio-cli/src/templates/exampleFiles/browser/Component.stencil.test.ejs @@ -38,8 +38,6 @@ describe('Stencil component testing', () => { await button.click() flushAll() - await expect(button).toHaveText('count is 44')<%- - answers.includeVisualTesting ? ` - await expect(button).toMatchElementSnapshot('counterButton')` : '' %> + await expect(button).toHaveText('count is 44') }) }) diff --git a/packages/wdio-cli/src/templates/exampleFiles/browser/Component.svelte.test.ejs b/packages/wdio-cli/src/templates/exampleFiles/browser/Component.svelte.test.ejs index c6e60e0a41b..85bec6b7276 100644 --- a/packages/wdio-cli/src/templates/exampleFiles/browser/Component.svelte.test.ejs +++ b/packages/wdio-cli/src/templates/exampleFiles/browser/Component.svelte.test.ejs @@ -51,8 +51,6 @@ describe('Svelte Component Testing', () => { await component.click() await component.click() - await expect(component).toHaveText('count is 2')<%- - answers.includeVisualTesting ? ` - await expect(component).toMatchElementSnapshot('counterButton')` : '' %> + await expect(component).toHaveText('count is 2') }) }) diff --git a/packages/wdio-cli/src/templates/exampleFiles/browser/Component.vue.test.ejs b/packages/wdio-cli/src/templates/exampleFiles/browser/Component.vue.test.ejs index b821d9fe537..780a161b97c 100644 --- a/packages/wdio-cli/src/templates/exampleFiles/browser/Component.vue.test.ejs +++ b/packages/wdio-cli/src/templates/exampleFiles/browser/Component.vue.test.ejs @@ -55,8 +55,6 @@ describe('Vue Component Testing', () => { await component.click() await component.click() - await expect(component).toHaveText('count is 2')<%- - answers.includeVisualTesting ? ` - await expect(component).toMatchElementSnapshot('counterButton')` : '' %> + await expect(component).toHaveText('count is 2') }) }) diff --git a/packages/wdio-cli/src/templates/snippets/cucumber.ejs b/packages/wdio-cli/src/templates/snippets/cucumber.ejs index 0780143cb44..51f8fc0c6eb 100644 --- a/packages/wdio-cli/src/templates/snippets/cucumber.ejs +++ b/packages/wdio-cli/src/templates/snippets/cucumber.ejs @@ -11,8 +11,6 @@ dryRun: false, // abort the run on first failure failFast: false, - // Only execute the scenarios with name matching the expression (repeatable). - name: [], // hide step definition snippets for pending steps snippets: true, // hide source uris @@ -47,4 +45,4 @@ // timeout for step definitions timeout: 60000, }, -<% } %> +<% } %> \ No newline at end of file diff --git a/packages/wdio-cli/src/templates/snippets/testWithPO.js.ejs b/packages/wdio-cli/src/templates/snippets/testWithPO.js.ejs index 22454434815..d6cfd0883a7 100644 --- a/packages/wdio-cli/src/templates/snippets/testWithPO.js.ejs +++ b/packages/wdio-cli/src/templates/snippets/testWithPO.js.ejs @@ -15,8 +15,6 @@ describe('My Login application', () => { await LoginPage.login('tomsmith', 'SuperSecretPassword!') await expect(SecurePage.flashAlert).toBeExisting() await expect(SecurePage.flashAlert).toHaveTextContaining( - 'You logged into a secure area!')<%- - answers.includeVisualTesting ? ` - await expect(SecurePage.flashAlert).toMatchElementSnapshot('flashAlert')` : '' %> + 'You logged into a secure area!') }) }) diff --git a/packages/wdio-cli/src/templates/snippets/testWithoutPO.js.ejs b/packages/wdio-cli/src/templates/snippets/testWithoutPO.js.ejs index 13606084543..9a89c55b221 100644 --- a/packages/wdio-cli/src/templates/snippets/testWithoutPO.js.ejs +++ b/packages/wdio-cli/src/templates/snippets/testWithoutPO.js.ejs @@ -12,8 +12,6 @@ describe('My Login application', () => { await expect($('#flash')).toBeExisting() await expect($('#flash')).toHaveTextContaining( - 'You logged into a secure area!')<%- - answers.includeVisualTesting ? ` - await expect($('#flash')).toMatchElementSnapshot('flashAlert')` : '' %> + 'You logged into a secure area!') }) }) diff --git a/packages/wdio-cli/src/templates/wdio.conf.tpl.ejs b/packages/wdio-cli/src/templates/wdio.conf.tpl.ejs index 0d36c338235..f4ae49477b6 100644 --- a/packages/wdio-cli/src/templates/wdio.conf.tpl.ejs +++ b/packages/wdio-cli/src/templates/wdio.conf.tpl.ejs @@ -167,7 +167,7 @@ if (answers.isUsingTypeScript) { // with `/`, the base url gets prepended, not including the path portion of your baseUrl. // If your `url` parameter starts without a scheme or `/` (like `some/path`), the base url // gets prepended directly. - // baseUrl: 'http://localhost:8080', + baseUrl: '<%- answers.baseUrl %>', // // Default timeout for all waitFor* commands. waitforTimeout: 10000, diff --git a/packages/wdio-cli/src/types.ts b/packages/wdio-cli/src/types.ts index 984adc54e96..97de75314c3 100644 --- a/packages/wdio-cli/src/types.ts +++ b/packages/wdio-cli/src/types.ts @@ -37,7 +37,7 @@ export interface Questionnair { serenityLibPath?: string plugins: string[] outputDir?: string - includeVisualTesting: boolean + baseUrl: string npmInstall: boolean createPackageJSON?: boolean projectRootCorrect?: boolean diff --git a/packages/wdio-cli/src/utils.ts b/packages/wdio-cli/src/utils.ts index b3856696ee6..e57ef1c8696 100644 --- a/packages/wdio-cli/src/utils.ts +++ b/packages/wdio-cli/src/utils.ts @@ -633,10 +633,7 @@ export function specifyVersionIfNeeded(packagesToInstall: string[], version: str const { value } = version.matchAll(VERSION_REGEXP).next() const [major, minor, patch, tagName, build] = (value || []).slice(1, -1) // drop commit bit return packagesToInstall.map((p) => { - if ( - (p.startsWith('@wdio') && p !== '@wdio/visual-service') || - ['devtools', 'webdriver', 'webdriverio'].includes(p) - ) { + if (p.startsWith('@wdio') || ['devtools', 'webdriver', 'webdriverio'].includes(p)) { const tag = major && npmTag === 'latest' ? `^${major}.${minor}.${patch}-${tagName}.${build}` : npmTag @@ -721,7 +718,7 @@ export async function createPackageJSON(parsedAnswers: ParsedAnswers) { dependencies: {}, devDependencies: {} }, null, 2)) - console.log(chalk.green(chalk.bold('✔ Success!\n'))) + console.log(chalk.green.bold('✔ Success!\n')) } } @@ -750,13 +747,6 @@ export async function npmInstall(parsedAnswers: ParsedAnswers, npmTag: string) { parsedAnswers.packagesToInstall.push('solid-js') } - /** - * add visual service if user selected support for it - */ - if (parsedAnswers.includeVisualTesting) { - parsedAnswers.packagesToInstall.push('@wdio/visual-service') - } - /** * add dependency for Lit testing */ @@ -818,7 +808,7 @@ export async function npmInstall(parsedAnswers: ParsedAnswers, npmTag: string) { console.log(`Installing packages using ${pm}:${SEP}${parsedAnswers.packagesToInstall.join(SEP)}`) const success = await installPackages(cwd, parsedAnswers.packagesToInstall, true) if (success) { - console.log(chalk.green(chalk.bold('✔ Success!\n'))) + console.log(chalk.green.bold('✔ Success!\n')) } } else { const installationCommand = getInstallCommand(pm, parsedAnswers.packagesToInstall, true) @@ -846,17 +836,9 @@ export function detectPackageManager(argv = process.argv) { export async function setupTypeScript(parsedAnswers: ParsedAnswers) { /** * don't create a `tsconfig.json` if user doesn't want to use TypeScript + * or if a `tsconfig.json` already exists */ - if (!parsedAnswers.isUsingTypeScript) { - return - } - - /** - * don't set up TypeScript if a `tsconfig.json` already exists but ensure we install `ts-node` - * as it is a requirement for running TypeScript tests - */ - if (parsedAnswers.hasRootTSConfig) { - parsedAnswers.packagesToInstall.push('ts-node') + if (!parsedAnswers.isUsingTypeScript || parsedAnswers.hasRootTSConfig) { return } @@ -954,7 +936,7 @@ export async function setupTypeScript(parsedAnswers: ParsedAnswers) { JSON.stringify(config, null, 4) ) - console.log(chalk.green(chalk.bold('✔ Success!\n'))) + console.log(chalk.green.bold('✔ Success!\n')) } function getPreset (parsedAnswers: ParsedAnswers) { @@ -1007,7 +989,7 @@ export async function setupBabel(parsedAnswers: ParsedAnswers) { ] }, null, 4)}` ) - console.log(chalk.green(chalk.bold('✔ Success!\n'))) + console.log(chalk.green.bold('✔ Success!\n')) } } @@ -1020,12 +1002,12 @@ export async function createWDIOConfig(parsedAnswers: ParsedAnswers) { _: new EjsHelpers({ useEsm: parsedAnswers.esmSupport, useTypeScript: parsedAnswers.isUsingTypeScript }) }) await fs.writeFile(parsedAnswers.wdioConfigPath, renderedTpl) - console.log(chalk.green(chalk.bold('✔ Success!\n'))) + console.log(chalk.green.bold('✔ Success!\n')) if (parsedAnswers.generateTestFiles) { console.log('Autogenerating test files...') await generateTestFiles(parsedAnswers) - console.log(chalk.green(chalk.bold('✔ Success!\n'))) + console.log(chalk.green.bold('✔ Success!\n')) } } catch (err: any) { throw new Error(`⚠️ Couldn't write config file: ${err.stack}`) @@ -1083,7 +1065,7 @@ export async function createWDIOScript(parsedAnswers: ParsedAnswers) { return false } } - console.log(chalk.green(chalk.bold('✔ Success!'))) + console.log(chalk.green.bold('✔ Success!')) return true } diff --git a/packages/wdio-cli/tests/__snapshots__/utils.test.ts.snap b/packages/wdio-cli/tests/__snapshots__/utils.test.ts.snap index c87d19e0ec8..998c3a8dba3 100644 --- a/packages/wdio-cli/tests/__snapshots__/utils.test.ts.snap +++ b/packages/wdio-cli/tests/__snapshots__/utils.test.ts.snap @@ -3,9 +3,9 @@ exports[`getAnswers 1`] = ` { "backend": "On my local machine", + "baseUrl": "http://localhost", "framework": "@wdio/mocha-framework$--$mocha", "generateTestFiles": true, - "includeVisualTesting": false, "isUsingCompiler": "TypeScript (https://www.typescriptlang.org/)", "npmInstall": true, "plugins": [], @@ -108,7 +108,6 @@ exports[`npmInstall 1`] = ` "bar$--$foo", "@testing-library/vue", "@testing-library/jest-dom", - "@wdio/visual-service", "@types/jasmine", ], true, diff --git a/packages/wdio-cli/tests/config.test.ts b/packages/wdio-cli/tests/config.test.ts index 438a843f3da..e1dbeeffddc 100644 --- a/packages/wdio-cli/tests/config.test.ts +++ b/packages/wdio-cli/tests/config.test.ts @@ -10,7 +10,7 @@ vi.mock('node:fs/promises', () => ({ test('runConfig with yes param', async () => { const answers = await getAnswers(true) expect(answers.backend).toEqual('On my local machine') - expect(answers.includeVisualTesting).toEqual(false) + expect(answers.baseUrl).toEqual('http://localhost') expect(answers.generateTestFiles).toBeTruthy() expect(answers.usePageObjects).toBeTruthy() expect(answers.framework).toEqual('@wdio/mocha-framework$--$mocha') diff --git a/packages/wdio-cli/tests/interface.test.ts b/packages/wdio-cli/tests/interface.test.ts index 6e82d087624..9803b596c4c 100644 --- a/packages/wdio-cli/tests/interface.test.ts +++ b/packages/wdio-cli/tests/interface.test.ts @@ -147,7 +147,7 @@ describe('cli interface', () => { }) expect(wdioClInterface.log).toBeCalledTimes(1) - expect(wdioClInterface.log).toBeCalledWith('[0-0]', 'white bgRed bold Error: ', 'foo') + expect(wdioClInterface.log).toBeCalledWith('[0-0]', 'bold Error: ', 'foo') }) it('should print message on worker error', () => { @@ -160,7 +160,7 @@ describe('cli interface', () => { }) expect(wdioClInterface.log).toBeCalledTimes(1) - expect(wdioClInterface.log).toBeCalledWith('[0-0]', 'white bgRed bold Error: ', 'bar') + expect(wdioClInterface.log).toBeCalledWith('[0-0]', 'bold Error: ', 'bar') }) it('should ignore messages that do not contain a proper origin', () => { @@ -280,7 +280,7 @@ describe('cli interface', () => { cid, job, retries: 0, - message: chalk.bold(chalk.cyan('RUNNING')) + message: chalk.bold.cyan('RUNNING') }, { method: 'onSpecRetry', cid, @@ -292,13 +292,13 @@ describe('cli interface', () => { cid, job, retries, - message: chalk.bold(chalk.green('PASSED')) + message: chalk.bold.green('PASSED') }, { method: 'onSpecFailure', cid, job, retries, - message: chalk.bold(chalk.red('FAILED')) + message: chalk.bold.red('FAILED') }] scenarios.forEach(scenario => { diff --git a/packages/wdio-cli/tests/launcher.test.ts b/packages/wdio-cli/tests/launcher.test.ts index 3faac0fbfda..0ddc6aed992 100644 --- a/packages/wdio-cli/tests/launcher.test.ts +++ b/packages/wdio-cli/tests/launcher.test.ts @@ -181,28 +181,6 @@ describe('launcher', () => { expect(launcher['_runSpecs']).toBeCalledTimes(1) }) - - it('should mixin wdio:maxInstances per capability + precedence over maxInstancesPerCapability', () => { - const wdioPrefixMaxInstances = [ - { - browserName: 'chrome', - 'wdio:maxInstances': 11 - }, - { - browserName: 'safari', - 'wdio:maxInstances': 22 - } - ] - launcher['_runSpecs'] = vi.fn() - launcher['_runMode']( - { specs: ['./'], maxInstancesPerCapability: 3 } as any, - wdioPrefixMaxInstances - ) - - expect(launcher['_schedule']).toHaveLength(2) - expect(launcher['_schedule'][0].availableInstances).toBe(11) - expect(launcher['_schedule'][1].availableInstances).toBe(22) - }) }) describe('hasTriggeredExitRoutine', () => { diff --git a/packages/wdio-cli/tests/utils.test.ts b/packages/wdio-cli/tests/utils.test.ts index 2ca7a256f29..d17490c6dc2 100644 --- a/packages/wdio-cli/tests/utils.test.ts +++ b/packages/wdio-cli/tests/utils.test.ts @@ -867,8 +867,7 @@ test('npmInstall', async () => { framework: 'jasmine', installTestingLibrary: true, packagesToInstall: ['foo$--$bar', 'bar$--$foo'], - npmInstall: true, - includeVisualTesting: true + npmInstall: true } as any await npmInstall(parsedAnswers, 'next') expect(installPackages).toBeCalledTimes(1) @@ -911,45 +910,6 @@ test('setupTypeScript', async () => { expect(parsedAnswers.packagesToInstall).toEqual(['ts-node', 'typescript']) }) -test('setupTypeScript does not create tsconfig.json if TypeScript was not selected', async () => { - const parsedAnswers = { - isUsingTypeScript: false, - esmSupport: true, - rawAnswers: { - framework: 'foo', - services: [ - 'wdio-foobar-service$--$foobar', - 'wdio-electron-service$--$electron' - ] - }, - packagesToInstall: [], - tsConfigFilePath: '/foobar/tsconfig.json' - } as any - await setupTypeScript(parsedAnswers) - expect(fs.writeFile).not.toBeCalled() - expect(parsedAnswers.packagesToInstall).toEqual([]) -}) - -test('setupTypeScript does not create tsconfig.json if there is already one', async () => { - const parsedAnswers = { - isUsingTypeScript: true, - esmSupport: true, - rawAnswers: { - framework: 'foo', - services: [ - 'wdio-foobar-service$--$foobar', - 'wdio-electron-service$--$electron' - ] - }, - packagesToInstall: [], - tsConfigFilePath: '/foobar/tsconfig.json', - hasRootTSConfig: true - } as any - await setupTypeScript(parsedAnswers) - expect(fs.writeFile).not.toBeCalled() - expect(parsedAnswers.packagesToInstall).toEqual(['ts-node']) -}) - test('setup Babel', async () => { await setupBabel({} as any) expect(fs.writeFile).toBeCalledTimes(0) diff --git a/packages/wdio-concise-reporter/package.json b/packages/wdio-concise-reporter/package.json index 0510cb9af13..13506e443a3 100644 --- a/packages/wdio-concise-reporter/package.json +++ b/packages/wdio-concise-reporter/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/concise-reporter", - "version": "8.31.1", + "version": "8.29.1", "description": "A concise reporter for WebdriverIO", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-concise-reporter", @@ -29,8 +29,8 @@ }, "typeScriptVersion": "3.8.3", "dependencies": { - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "chalk": "^5.0.1", "pretty-ms": "^7.0.1" }, diff --git a/packages/wdio-config/package.json b/packages/wdio-config/package.json index 732331ae5fb..e9488cc30da 100644 --- a/packages/wdio-config/package.json +++ b/packages/wdio-config/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/config", - "version": "8.31.1", + "version": "8.29.1", "description": "A helper utility to parse and validate WebdriverIO options", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-config", @@ -37,8 +37,8 @@ }, "dependencies": { "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", "glob": "^10.2.2", diff --git a/packages/wdio-config/src/node/ConfigParser.ts b/packages/wdio-config/src/node/ConfigParser.ts index 12c73cf691b..3c5cea8cd85 100644 --- a/packages/wdio-config/src/node/ConfigParser.ts +++ b/packages/wdio-config/src/node/ConfigParser.ts @@ -31,9 +31,7 @@ interface TestrunnerOptionsWithParameters extends Omit, 'specs' | 'exclude'> { specs?: Spec[] - 'wdio:specs'?: Spec[] exclude?: string[] - 'wdio:exclude'?: string[] } export default class ConfigParser { @@ -71,7 +69,7 @@ export default class ConfigParser { /** * initializes the config object */ - async initialize(object: MergeConfig = {}) { + async initialize (object: MergeConfig = {}) { /** * only run auto compile functionality once but allow the config parse to be initialized * multiple times, e.g. when used with the packages/wdio-cli/src/watcher.ts @@ -171,17 +169,12 @@ export default class ConfigParser { this._config = deepmerge(this._config, object) as TestrunnerOptionsWithParameters /** - * overwrite config specs that got piped into the wdio command, - * also adhering to the wdio-prefixes from a capability + * overwrite config specs that got piped into the wdio command */ - if (object['wdio:specs'] && object['wdio:specs'].length > 0) { - this._config.specs = object['wdio:specs'] as Spec[] - } else if (object.specs && object.specs.length > 0) { + if (object.specs && object.specs.length > 0) { this._config.specs = object.specs as string[] } - if (object['wdio:exclude'] && object['wdio:exclude'].length > 0) { - this._config.exclude = object['wdio:exclude'] as string[] - } else if (object.exclude && object.exclude.length > 0) { + if (object.exclude && object.exclude.length > 0) { this._config.exclude = object.exclude as string[] } @@ -213,18 +206,8 @@ export default class ConfigParser { if (addPathToSpecs && spec.length > 0) { this._config.specs = this.setFilePathToFilterOptions(spec, this._config.specs!) } - /** - * At this step function allKeywordsContainPath() allows us to make sure - * that all arguments, passed to '--exclude' param, are paths to specs. - * So they can be processed in setFilePathToFilterOptions() - * Otherwise, the application crashes with an error. - * Therefore, if --exclude contains not paths, but keywords, e.g. 'dialog', 'test.component' etc., - * then filtering of excluded specs occurs in the filterSpecs() method - */ - if (exclude.length > 0 && allKeywordsContainPath(exclude)) { + if (addPathToSpecs && exclude.length > 0) { this._config.exclude = this.setFilePathToFilterOptions(exclude, this._config.exclude!) - } else if (exclude.length > 0) { - this._config.exclude = exclude } } @@ -276,18 +259,16 @@ export default class ConfigParser { // when CLI --spec is explicitly specified, this._config.specs contains the filtered // specs matching the passed pattern else the specs defined inside the config are returned let specs = ConfigParser.getFilePaths(this._config.specs!, this._config.rootDir, this._pathService) - let exclude = allKeywordsContainPath(this._config.exclude!) - ? ConfigParser.getFilePaths(this._config.exclude!, this._config.rootDir, this._pathService) - : this._config.exclude || [] + let exclude = ConfigParser.getFilePaths(this._config.exclude!, this._config.rootDir, this._pathService) const suites = Array.isArray(this._config.suite) ? this._config.suite : [] // only use capability excludes if (CLI) --exclude or config exclude are not defined - if (Array.isArray(capExclude) && exclude.length === 0) { + if (Array.isArray(capExclude) && exclude.length === 0){ exclude = ConfigParser.getFilePaths(capExclude, this._config.rootDir, this._pathService) } // only use capability specs if (CLI) --spec is not defined - if (!isSpecParamPassed && Array.isArray(capSpecs)) { + if (!isSpecParamPassed && Array.isArray(capSpecs)){ specs = ConfigParser.getFilePaths(capSpecs, this._config.rootDir, this._pathService) } @@ -388,7 +369,7 @@ export default class ConfigParser { /** * return configs */ - getConfig() { + getConfig () { if (!this.#isInitialised) { throw new Error('ConfigParser was not initialized, call "await config.initialize()" first!') } @@ -473,35 +454,21 @@ export default class ConfigParser { * returns specs files with the excludes filtered * * @param {String[] | String[][]} spec files - list of spec files - * @param {string[]} excludeList files - list of exclude files + * @param {string[]} exclude files - list of exclude files * @return {String[] | String[][]} list of spec files with excludes removed */ - filterSpecs(specs: Spec[], excludeList: string[]) { - // If 'exclude' is array of paths - if (allKeywordsContainPath(excludeList)) { - return specs.reduce((returnVal: Spec[], currSpec) => { - if (Array.isArray(currSpec)) { - returnVal.push(currSpec.filter(specItem => !excludeList.includes(specItem))) - } else if (excludeList.indexOf(currSpec) === -1) { - returnVal.push(currSpec) - } - return returnVal - }, []) - } - // If 'exclude' is array of keywords - return specs.reduce((returnVal: Spec[], currSpec) => { - if (Array.isArray(currSpec)) { - returnVal.push(currSpec.filter(specItem => !excludeList.some(excludeVal => specItem.includes(excludeVal)))) - } - const isSpecExcluded = excludeList.some(excludedVal => currSpec.includes(excludedVal)) - if (!isSpecExcluded) { - returnVal.push(currSpec) + filterSpecs(specs: Spec[], exclude: string[]) { + return specs.reduce((returnVal: Spec[], spec) => { + if (Array.isArray(spec)) { + returnVal.push(spec.filter(specItem => !exclude.includes(specItem))) + } else if (exclude.indexOf(spec) === -1) { + returnVal.push(spec) } return returnVal }, []) } - shard(specs: Spec[]) { + shard (specs: Spec[]) { if (!this._config.shard || this._config.shard.total === 1) { return specs } @@ -512,8 +479,4 @@ export default class ConfigParser { const end = current === total ? undefined : specsPerShard * current return specs.slice(current * specsPerShard - specsPerShard, end) } -} - -function allKeywordsContainPath(excludedSpecList: string[]) { - return excludedSpecList.every(val => val.includes('/') || val.includes('\\')) -} +} \ No newline at end of file diff --git a/packages/wdio-config/tests/__fixtures__/prefix-test-01.ts b/packages/wdio-config/tests/__fixtures__/prefix-test-01.ts deleted file mode 100644 index b1a1300c560..00000000000 --- a/packages/wdio-config/tests/__fixtures__/prefix-test-01.ts +++ /dev/null @@ -1 +0,0 @@ -// .keepMe \ No newline at end of file diff --git a/packages/wdio-config/tests/__fixtures__/prefix-test-02.ts b/packages/wdio-config/tests/__fixtures__/prefix-test-02.ts deleted file mode 100644 index b1a1300c560..00000000000 --- a/packages/wdio-config/tests/__fixtures__/prefix-test-02.ts +++ /dev/null @@ -1 +0,0 @@ -// .keepMe \ No newline at end of file diff --git a/packages/wdio-config/tests/__fixtures__/wdio.wdio-prefix.conf.ts b/packages/wdio-config/tests/__fixtures__/wdio.wdio-prefix.conf.ts deleted file mode 100644 index ac8f34e7d4e..00000000000 --- a/packages/wdio-config/tests/__fixtures__/wdio.wdio-prefix.conf.ts +++ /dev/null @@ -1,38 +0,0 @@ -import path from 'node:path' -import url from 'node:url' - -import type { Testrunner } from '../../../wdio-types/src/Options.js' -import { config as baseConfig } from './wdio.conf.js' - -const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) - -const _config: Testrunner = { - ...baseConfig, - specs: [ - path.resolve(__dirname, '**/*.ts') - ], - exclude: [ - path.resolve(__dirname, 'test.es6') - ], - capabilities: [ - { - browserName: 'chrome', - 'wdio:maxInstances': 4711, - 'wdio:specs': [ - path.resolve(__dirname, 'prefix-test-01.ts') - ], - 'wdio:exclude': [ - path.resolve(__dirname, 'prefix-test-02.ts') - ] - }, - { - browserName: 'safari', - 'wdio:maxInstances': 4711, - 'wdio:specs': [ - path.resolve(__dirname, 'prefix-test-02.ts') - ] - }] -} - -export { _config as config } - diff --git a/packages/wdio-config/tests/node/configparser.test.ts b/packages/wdio-config/tests/node/configparser.test.ts index c007ffb5472..7b9aa306c89 100644 --- a/packages/wdio-config/tests/node/configparser.test.ts +++ b/packages/wdio-config/tests/node/configparser.test.ts @@ -23,7 +23,6 @@ const FIXTURES_CONF = path.resolve(FIXTURES_PATH, 'wdio.conf.ts') const FIXTURES_CONF_RDC = path.resolve(FIXTURES_PATH, 'wdio.conf.rdc.ts') const FIXTURES_CONF_ARRAY = path.resolve(FIXTURES_PATH, 'wdio.array.conf.ts') const FIXTURES_LOCAL_CONF = path.resolve(FIXTURES_PATH, 'wdio.local.conf.ts') -const FIXTURES_PREFIX_CONF = path.resolve(FIXTURES_PATH, 'wdio.wdio-prefix.conf.ts') const FIXTURES_DEFAULT_CONF = path.resolve(FIXTURES_PATH, 'wdio.default.conf.ts') const FIXTURES_CUCUMBER_FEATURE_A_LINE_2 = path.resolve(FIXTURES_PATH, 'test-a.feature:2') const FIXTURES_CUCUMBER_FEATURE_A_LINE_2_AND_12 = path.resolve(FIXTURES_PATH, 'test-a.feature:2:12') @@ -89,12 +88,12 @@ async function MockedFileSystem_LoadingAsMuchAsCanFromFileSystem(): Promise { it('should allow specifying mutliple single spec file', async () => { const configParser = await ConfigParserForTestWithAllFiles(FIXTURES_CONF) - await configParser.initialize({ spec: [INDEX_PATH, FIXTURES_CONF] }) + await configParser.initialize({ spec : [INDEX_PATH, FIXTURES_CONF] }) const specs = configParser.getSpecs() expect(specs).toHaveLength(2) @@ -425,7 +421,7 @@ describe('ConfigParser', () => { it('should allow to specify partial matching spec file', async () => { const configParser = await ConfigParserForTestWithAllFiles(FIXTURES_CONF) - await configParser.initialize({ spec: ['PathService'] }) + await configParser.initialize({ spec : ['PathService'] }) const specs = configParser.getSpecs() expect(specs).toContain(path.join(__dirname, 'FileSystemPathService.test.ts')) @@ -433,7 +429,7 @@ describe('ConfigParser', () => { it('should handle an array in the config_specs', async () => { const configParser = await ConfigParserForTestWithAllFiles(FIXTURES_CONF_ARRAY) - await configParser.initialize({ spec: ['PathService'] }) + await configParser.initialize({ spec : ['PathService'] }) const specs = configParser.getSpecs() expect(specs).toContain(path.join(__dirname, 'FileSystemPathService.test.ts')) @@ -441,7 +437,7 @@ describe('ConfigParser', () => { it('should exclude duplicate spec files', async () => { const configParser = await ConfigParserForTestWithAllFiles(FIXTURES_CONF) - await configParser.initialize({ spec: [INDEX_PATH, INDEX_PATH] }) + await configParser.initialize({ spec : [INDEX_PATH, INDEX_PATH] }) const specs = configParser.getSpecs() expect(specs).toHaveLength(1) @@ -613,25 +609,6 @@ describe('ConfigParser', () => { expect(specs).toContain(configParserPath) }) - it('should overwrite specs w/ wdio:specs files from capabilitoes', async () => { - const configParser = await ConfigParserForTest(FIXTURES_PREFIX_CONF) - const prefixedTestFile = path.resolve(FIXTURES_PATH, 'prefix-test-01.ts') - await configParser.initialize({ 'wdio:specs': [prefixedTestFile] }) - - const specs = configParser.getSpecs([prefixedTestFile]) - expect(specs).toContain(prefixedTestFile) - }) - - it('should overwrite exclude w/ wdio:exclude files from capabilities', async () => { - const configParser = await ConfigParserForTest(FIXTURES_PREFIX_CONF) - const prefixedTestFile = path.resolve(FIXTURES_PATH, 'prefix-test-01.ts') - const excludedTestFile = path.resolve(FIXTURES_PATH, 'prefix-test-02.ts') - await configParser.initialize({ 'wdio:specs': [prefixedTestFile], 'wdio:exclude' : [excludedTestFile] }) - - const specs = configParser.getSpecs([prefixedTestFile, excludedTestFile]) - expect(specs).not.toContain(excludedTestFile) - }) - it('should set hooks to empty arrays as default', async () => { const configParser = await ConfigParserForTest(FIXTURES_CONF) await configParser.initialize({}) @@ -845,7 +822,7 @@ describe('ConfigParser', () => { ]) }) - it('should not include spec if blank spec parameter passed', async () => { + it('should not include spec if blank spec parameter passed', async ()=> { const configParser = await ConfigParserForTestWithAllFiles(FIXTURES_CONF) await configParser.initialize({ suite: ['mobile'], spec: [] }) diff --git a/packages/wdio-crossbrowsertesting-service/package.json b/packages/wdio-crossbrowsertesting-service/package.json index 4fb5c97e2ac..f0d6f15cacc 100644 --- a/packages/wdio-crossbrowsertesting-service/package.json +++ b/packages/wdio-crossbrowsertesting-service/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/crossbrowsertesting-service", - "version": "8.32.1", + "version": "8.29.1", "description": "A WebdriverIO service that manages local tunnel and job metadata for CrossBrowserTesting users.", "author": "Daphne Magsby ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-crossbrowsertesting-service", @@ -30,14 +30,14 @@ "typeScriptVersion": "3.8.3", "dependencies": { "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "cbt_tunnels": "^1.2.2", "got": "^12.6.1", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "devDependencies": { "@types/node": "^20.1.0", - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" }, "publishConfig": { "access": "public" diff --git a/packages/wdio-cucumber-framework/package.json b/packages/wdio-cucumber-framework/package.json index 5dd81d59665..a049ea2bed9 100644 --- a/packages/wdio-cucumber-framework/package.json +++ b/packages/wdio-cucumber-framework/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/cucumber-framework", - "version": "8.32.1", + "version": "8.29.1", "description": "A WebdriverIO plugin. Adapter for Cucumber.js testing framework.", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-cucumber-framework", @@ -39,12 +39,12 @@ "typeScriptVersion": "3.8.3", "dependencies": { "@cucumber/cucumber": "9.5.1", - "@cucumber/gherkin": "28.0.0", + "@cucumber/gherkin": "27.0.0", "@cucumber/messages": "24.0.1", "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "glob": "^10.2.2", "got": "^12.6.1", "is-glob": "^4.0.0" diff --git a/packages/wdio-devtools-service/package.json b/packages/wdio-devtools-service/package.json index 06404e3b975..7bd707f04c3 100644 --- a/packages/wdio-devtools-service/package.json +++ b/packages/wdio-devtools-service/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/devtools-service", - "version": "8.32.1", + "version": "8.29.1", "description": "A WebdriverIO service that allows you to run Chrome DevTools commands in your tests", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-devtools-service", @@ -37,15 +37,15 @@ "@tracerbench/trace-event": "^8.0.0", "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "babel-plugin-istanbul": "^6.1.1", - "devtools-protocol": "^0.0.1260888", + "devtools-protocol": "^0.0.1249869", "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-report": "^3.0.0", "istanbul-reports": "^3.1.4", "lighthouse": "8.6.0", "puppeteer-core": "20.3.0", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "publishConfig": { "access": "public" @@ -54,6 +54,6 @@ "@types/babel__core": "^7.1.19", "@types/istanbul-lib-report": "^3.0.0", "@types/istanbul-reports": "^3.0.1", - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" } } diff --git a/packages/wdio-dot-reporter/package.json b/packages/wdio-dot-reporter/package.json index 7951e8dc4ba..d6eaafc9a5c 100644 --- a/packages/wdio-dot-reporter/package.json +++ b/packages/wdio-dot-reporter/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/dot-reporter", - "version": "8.31.1", + "version": "8.29.1", "description": "A WebdriverIO plugin to report in dot style", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-dot-reporter", @@ -28,8 +28,8 @@ }, "typeScriptVersion": "3.8.3", "dependencies": { - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "chalk": "^5.0.1" }, "devDependencies": { diff --git a/packages/wdio-firefox-profile-service/package.json b/packages/wdio-firefox-profile-service/package.json index 3c06bf98db1..3cba6568f8f 100644 --- a/packages/wdio-firefox-profile-service/package.json +++ b/packages/wdio-firefox-profile-service/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/firefox-profile-service", - "version": "8.31.1", + "version": "8.29.1", "description": "WebdriverIO service that lets you define your Firefox profile in your wdio.conf.js", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-firefox-profile-service", @@ -36,7 +36,7 @@ }, "typeScriptVersion": "3.8.3", "dependencies": { - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "firefox-profile": "^4.5.0" }, "publishConfig": { diff --git a/packages/wdio-globals/package.json b/packages/wdio-globals/package.json index b6d9b176e56..c024a4cbcd4 100644 --- a/packages/wdio-globals/package.json +++ b/packages/wdio-globals/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/globals", - "version": "8.32.1", + "version": "8.29.1", "description": "A helper utility for importing global variables directly", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-globals", @@ -42,7 +42,7 @@ "access": "public" }, "optionalDependencies": { - "expect-webdriverio": "^4.11.2", - "webdriverio": "8.32.1" + "expect-webdriverio": "^4.9.3", + "webdriverio": "8.29.1" } } diff --git a/packages/wdio-jasmine-framework/package.json b/packages/wdio-jasmine-framework/package.json index 4b1cd355bac..cc087f363dd 100644 --- a/packages/wdio-jasmine-framework/package.json +++ b/packages/wdio-jasmine-framework/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/jasmine-framework", - "version": "8.32.1", + "version": "8.29.1", "description": "A WebdriverIO plugin. Adapter for Jasmine testing framework.", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-jasmine-framework", @@ -33,11 +33,11 @@ }, "dependencies": { "@types/node": "^20.1.0", - "@wdio/globals": "8.32.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", - "expect-webdriverio": "^4.11.2", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", + "expect-webdriverio": "^4.9.3", "jasmine": "^5.0.0" }, "devDependencies": { diff --git a/packages/wdio-jasmine-framework/src/index.ts b/packages/wdio-jasmine-framework/src/index.ts index 4b3f63a80f0..7d461d09481 100644 --- a/packages/wdio-jasmine-framework/src/index.ts +++ b/packages/wdio-jasmine-framework/src/index.ts @@ -436,7 +436,7 @@ class JasmineAdapter { // @ts-expect-error not exported in jasmine const syncMatchers: jasmine.CustomAsyncMatcherFactories = this.#transformMatchers(jasmine.matchers) - const wdioMatchers: jasmine.CustomAsyncMatcherFactories = [...matchers.entries()].reduce((prev, [name, fn]) => { + const wdioMatchers: jasmine.CustomAsyncMatcherFactories = Object.entries(matchers as Record).reduce((prev, [name, fn]) => { prev[name] = () => ({ async compare (...args: unknown[]) { const context = getConfig() diff --git a/packages/wdio-jasmine-framework/src/utils.ts b/packages/wdio-jasmine-framework/src/utils.ts index 515820addb3..8687965ae6a 100644 --- a/packages/wdio-jasmine-framework/src/utils.ts +++ b/packages/wdio-jasmine-framework/src/utils.ts @@ -10,7 +10,7 @@ const buildJasmineFromJestResult = (result: JestExpectationResult, isNot: boolea } } -export const jestResultToJasmine = (result: JestExpectationResult | Promise, isNot: boolean) => { +export const jestResultToJasmine = (result: JestExpectationResult, isNot: boolean) => { if (result instanceof Promise) { return result.then(jestStyleResult => buildJasmineFromJestResult(jestStyleResult, isNot)) } diff --git a/packages/wdio-jasmine-framework/tests/adapter.test.ts b/packages/wdio-jasmine-framework/tests/adapter.test.ts index a03b36b67c9..afe4e239857 100644 --- a/packages/wdio-jasmine-framework/tests/adapter.test.ts +++ b/packages/wdio-jasmine-framework/tests/adapter.test.ts @@ -10,7 +10,9 @@ import JasmineAdapterFactory, { JasmineAdapter } from '../src/index.js' vi.mock('jasmine') vi.mock('expect-webdriverio', () => ({ expect: {}, - matchers: new Map([['toHaveTitle', vi.fn()]]), + matchers: { + toHaveTitle: vi.fn() + }, getConfig: vi.fn() })) vi.mock('@wdio/logger', () => import(path.join(process.cwd(), '__mocks__', '@wdio/logger'))) @@ -26,7 +28,7 @@ const AFTER_HOOK_IDX = 3 globalThis.jasmine = { addMatchers: 'addMatchers', addAsyncMatchers: 'addAsyncMatchers' -} as any +} const wdioReporter: EventEmitter = { write: vi.fn(), diff --git a/packages/wdio-json-reporter/package.json b/packages/wdio-json-reporter/package.json index 286bc36326f..7c9b0d2e969 100644 --- a/packages/wdio-json-reporter/package.json +++ b/packages/wdio-json-reporter/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/json-reporter", - "version": "8.31.1", + "version": "8.29.1", "description": "A WebdriverIO plugin to report results in json format.", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-json-reporter", @@ -35,8 +35,8 @@ "types": "./build/index.d.ts", "typeScriptVersion": "3.8.3", "dependencies": { - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1" + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1" }, "publishConfig": { "access": "public" diff --git a/packages/wdio-junit-reporter/package.json b/packages/wdio-junit-reporter/package.json index 214678e20d6..11901d338b8 100644 --- a/packages/wdio-junit-reporter/package.json +++ b/packages/wdio-junit-reporter/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/junit-reporter", - "version": "8.31.1", + "version": "8.29.1", "description": "A WebdriverIO reporter that creates Jenkins compatible XML based JUnit reports", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-junit-reporter", @@ -31,8 +31,8 @@ }, "typeScriptVersion": "3.8.3", "dependencies": { - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "json-stringify-safe": "^5.0.1", "junit-report-builder": "^3.0.0" }, diff --git a/packages/wdio-junit-reporter/tests/__snapshots__/reporter.test.ts.snap b/packages/wdio-junit-reporter/tests/__snapshots__/reporter.test.ts.snap index 5f8793092db..d5b3292aed5 100644 --- a/packages/wdio-junit-reporter/tests/__snapshots__/reporter.test.ts.snap +++ b/packages/wdio-junit-reporter/tests/__snapshots__/reporter.test.ts.snap @@ -10,61 +10,61 @@ exports[`wdio-junit-reporter > can format output 4`] = `"{"a":"@@@@@@@@@@@@@@@@@ exports[`wdio-junit-reporter > can format output 5`] = `"{"a":["@","@","@","@","@","@","@","@","@","@","(90 more items)"]}"`; -exports[`wdio-junit-reporter > ensures that capabilities passed to buildJunitXml are not null/undefined 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; +exports[`wdio-junit-reporter > ensures that capabilities passed to buildJunitXml are not null/undefined 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; -exports[`wdio-junit-reporter > generates xml output (Cucumber-style) (with packageName) 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; +exports[`wdio-junit-reporter > generates xml output (Cucumber-style) (with packageName) 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; -exports[`wdio-junit-reporter > generates xml output (Cucumber-style) 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; +exports[`wdio-junit-reporter > generates xml output (Cucumber-style) 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; -exports[`wdio-junit-reporter > generates xml output 1`] = `")atF(/path/to/project/node_modules/core-js/library/modules/_export.js:35:28)atContext.executeSync(/path/to/project/packages/wdio-sync/src/index.js:26:12)at/path/to/project/packages/wdio-sync/src/index.js:161:33]]>"`; +exports[`wdio-junit-reporter > generates xml output 1`] = `")atF(/path/to/project/node_modules/core-js/library/modules/_export.js:35:28)atContext.executeSync(/path/to/project/packages/wdio-sync/src/index.js:26:12)at/path/to/project/packages/wdio-sync/src/index.js:161:33]]>"`; -exports[`wdio-junit-reporter > generates xml output correctly when error options are set (Cucumber-style) 1`] = `"(./step_definitions/steps.js:642:21)]]>(./step_definitions/steps.js:642:21)]]>"`; +exports[`wdio-junit-reporter > generates xml output correctly when error options are set (Cucumber-style) 1`] = `"(./step_definitions/steps.js:642:21)]]>(./step_definitions/steps.js:642:21)]]>"`; -exports[`wdio-junit-reporter > generates xml output correctly when error options are set 1`] = `")atF(/path/to/project/node_modules/core-js/library/modules/_export.js:35:28)atContext.executeSync(/path/to/project/packages/wdio-sync/src/index.js:26:12)at/path/to/project/packages/wdio-sync/src/index.js:161:33]]>)atF(/path/to/project/node_modules/core-js/library/modules/_export.js:35:28)atContext.executeSync(/path/to/project/packages/wdio-sync/src/index.js:26:12)at/path/to/project/packages/wdio-sync/src/index.js:161:33]]>"`; +exports[`wdio-junit-reporter > generates xml output correctly when error options are set 1`] = `")atF(/path/to/project/node_modules/core-js/library/modules/_export.js:35:28)atContext.executeSync(/path/to/project/packages/wdio-sync/src/index.js:26:12)at/path/to/project/packages/wdio-sync/src/index.js:161:33]]>)atF(/path/to/project/node_modules/core-js/library/modules/_export.js:35:28)atContext.executeSync(/path/to/project/packages/wdio-sync/src/index.js:26:12)at/path/to/project/packages/wdio-sync/src/index.js:161:33]]>"`; -exports[`wdio-junit-reporter > generates xml output correctly when having classNameFormat override with cucumber 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; +exports[`wdio-junit-reporter > generates xml output correctly when having classNameFormat override with cucumber 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; -exports[`wdio-junit-reporter > generates xml output correctly when having classNameFormat override with mocha 1`] = `"(/some/file.js:10:15)]]>"`; +exports[`wdio-junit-reporter > generates xml output correctly when having classNameFormat override with mocha 1`] = `"(/some/file.js:10:15)]]>"`; -exports[`wdio-junit-reporter > generates xml output correctly when having nested array of suites 1`] = `""`; +exports[`wdio-junit-reporter > generates xml output correctly when having nested array of suites 1`] = `""`; -exports[`wdio-junit-reporter > generates xml output correctly when having nested suites 1`] = `""`; +exports[`wdio-junit-reporter > generates xml output correctly when having nested suites 1`] = `""`; -exports[`wdio-junit-reporter > generates xml output correctly when having testSuiteNameFormat override with cucumber 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; +exports[`wdio-junit-reporter > generates xml output correctly when having testSuiteNameFormat override with cucumber 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; -exports[`wdio-junit-reporter > generates xml output correctly when having testSuiteNameFormat override with mocha 1`] = `"(/some/file.js:10:15)]]>"`; +exports[`wdio-junit-reporter > generates xml output correctly when having testSuiteNameFormat override with mocha 1`] = `"(/some/file.js:10:15)]]>"`; -exports[`wdio-junit-reporter > generates xml output correctly when the addFileAttribute option is set (Cucumber-style) 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; +exports[`wdio-junit-reporter > generates xml output correctly when the addFileAttribute option is set (Cucumber-style) 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; -exports[`wdio-junit-reporter > generates xml output correctly when the addFileAttribute option is set 1`] = `")atF(/path/to/project/node_modules/core-js/library/modules/_export.js:35:28)atContext.executeSync(/path/to/project/packages/wdio-sync/src/index.js:26:12)at/path/to/project/packages/wdio-sync/src/index.js:161:33]]>"`; +exports[`wdio-junit-reporter > generates xml output correctly when the addFileAttribute option is set 1`] = `")atF(/path/to/project/node_modules/core-js/library/modules/_export.js:35:28)atContext.executeSync(/path/to/project/packages/wdio-sync/src/index.js:26:12)at/path/to/project/packages/wdio-sync/src/index.js:161:33]]>"`; -exports[`wdio-junit-reporter > generates xml output for multiple describe blocks 1`] = `")atF(/path/to/project/node_modules/core-js/library/modules/_export.js:35:28)atContext.executeSync(/path/to/project/packages/wdio-sync/src/index.js:26:12)at/path/to/project/packages/wdio-sync/src/index.js:161:33]]>)atF(/path/to/project/node_modules/core-js/library/modules/_export.js:35:28)atContext.executeSync(/path/to/project/packages/wdio-sync/src/index.js:26:12)at/path/to/project/packages/wdio-sync/src/index.js:161:33]]>"`; +exports[`wdio-junit-reporter > generates xml output for multiple describe blocks 1`] = `")atF(/path/to/project/node_modules/core-js/library/modules/_export.js:35:28)atContext.executeSync(/path/to/project/packages/wdio-sync/src/index.js:26:12)at/path/to/project/packages/wdio-sync/src/index.js:161:33]]>)atF(/path/to/project/node_modules/core-js/library/modules/_export.js:35:28)atContext.executeSync(/path/to/project/packages/wdio-sync/src/index.js:26:12)at/path/to/project/packages/wdio-sync/src/index.js:161:33]]>"`; -exports[`wdio-junit-reporter > generates xml output if after each hook failed 1`] = `""`; +exports[`wdio-junit-reporter > generates xml output if after each hook failed 1`] = `""`; -exports[`wdio-junit-reporter > generates xml output if before all hook failed 1`] = `""`; +exports[`wdio-junit-reporter > generates xml output if before all hook failed 1`] = `""`; -exports[`wdio-junit-reporter > generates xml output if before each hook failed 1`] = `""`; +exports[`wdio-junit-reporter > generates xml output if before each hook failed 1`] = `""`; -exports[`wdio-junit-reporter > generates xml output when test is marked as skipped 1`] = `""`; +exports[`wdio-junit-reporter > generates xml output when test is marked as skipped 1`] = `""`; -exports[`wdio-junit-reporter > generates xml output with correct information when test is ran against Browserstack for Android apps 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; +exports[`wdio-junit-reporter > generates xml output with correct information when test is ran against Browserstack for Android apps 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; -exports[`wdio-junit-reporter > generates xml output with correct information when test is ran against Browserstack for iOS apps 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; +exports[`wdio-junit-reporter > generates xml output with correct information when test is ran against Browserstack for iOS apps 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; -exports[`wdio-junit-reporter > generates xml output without ansi 1`] = `"(/some/file.js:10:15)]]>"`; +exports[`wdio-junit-reporter > generates xml output without ansi 1`] = `"(/some/file.js:10:15)]]>"`; exports[`wdio-junit-reporter > has a suiteNameFormat option for setting names manually 1`] = `"Skipped_ _test"`; -exports[`wdio-junit-reporter > scenario will be marked failed if a single scenario step fails (Cucumber-style) 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; +exports[`wdio-junit-reporter > scenario will be marked failed if a single scenario step fails (Cucumber-style) 1`] = `"(./step_definitions/steps.js:642:21)]]>"`; -exports[`wdio-junit-reporter > scenario will be marked failed if a single scenario step throws an error but there is no error object in JSON (Cucumber-style) 1`] = `""`; +exports[`wdio-junit-reporter > scenario will be marked failed if a single scenario step throws an error but there is no error object in JSON (Cucumber-style) 1`] = `""`; -exports[`wdio-junit-reporter > scenario will be marked failed if a single scenario step throws an error but there is no error object in JSON 1`] = `""`; +exports[`wdio-junit-reporter > scenario will be marked failed if a single scenario step throws an error but there is no error object in JSON 1`] = `""`; -exports[`wdio-junit-reporter > scenario will be marked skipped if a single scenario step is pending (Cucumber-style) 1`] = `""`; +exports[`wdio-junit-reporter > scenario will be marked skipped if a single scenario step is pending (Cucumber-style) 1`] = `""`; -exports[`wdio-junit-reporter > should build the xml if feature and scenario are unordered in JSON (Cucumber-style) 1`] = `""`; +exports[`wdio-junit-reporter > should build the xml if feature and scenario are unordered in JSON (Cucumber-style) 1`] = `""`; exports[`wdio-junit-reporter > should prepare name 1`] = `"Skipped test"`; diff --git a/packages/wdio-local-runner/package.json b/packages/wdio-local-runner/package.json index e48f489f404..c1310805c73 100644 --- a/packages/wdio-local-runner/package.json +++ b/packages/wdio-local-runner/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/local-runner", - "version": "8.32.1", + "version": "8.29.2", "description": "A WebdriverIO runner to run tests locally", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-local-runner", @@ -33,8 +33,8 @@ "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", "@wdio/repl": "8.24.12", - "@wdio/runner": "8.32.1", - "@wdio/types": "8.31.1", + "@wdio/runner": "8.29.2", + "@wdio/types": "8.29.1", "async-exit-hook": "^2.0.1", "split2": "^4.1.0", "stream-buffers": "^3.0.2" diff --git a/packages/wdio-mocha-framework/package.json b/packages/wdio-mocha-framework/package.json index 73cbaad319e..3e807d5128b 100644 --- a/packages/wdio-mocha-framework/package.json +++ b/packages/wdio-mocha-framework/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/mocha-framework", - "version": "8.31.1", + "version": "8.29.1", "description": "A WebdriverIO plugin. Adapter for Mocha testing framework.", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-mocha-framework", @@ -39,8 +39,8 @@ "@types/mocha": "^10.0.0", "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "mocha": "^10.0.0" }, "publishConfig": { diff --git a/packages/wdio-protocols/package.json b/packages/wdio-protocols/package.json index 9b102277e49..88269e6d447 100644 --- a/packages/wdio-protocols/package.json +++ b/packages/wdio-protocols/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/protocols", - "version": "8.32.0", + "version": "8.24.12", "description": "Utility package providing information about automation protocols", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-protocols", diff --git a/packages/wdio-protocols/src/protocols/jsonwp.ts b/packages/wdio-protocols/src/protocols/jsonwp.ts index 775cba56153..0756f72234a 100644 --- a/packages/wdio-protocols/src/protocols/jsonwp.ts +++ b/packages/wdio-protocols/src/protocols/jsonwp.ts @@ -1215,6 +1215,72 @@ export default { ], }, }, + '/session/:sessionId/touch/down': { + POST: { + command: 'touchDown', + description: 'Finger down on the screen.', + ref: 'https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidtouchdown', + deprecated: TOUCH_DEPRECATION_NOTICE, + parameters: [ + { + name: 'x', + type: 'number', + description: 'x coordinate on the screen', + required: true, + }, + { + name: 'y', + type: 'number', + description: 'y coordinate on the screen', + required: true, + }, + ], + }, + }, + '/session/:sessionId/touch/up': { + POST: { + command: 'touchUp', + description: 'Finger up on the screen.', + ref: 'https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidtouchup', + deprecated: TOUCH_DEPRECATION_NOTICE, + parameters: [ + { + name: 'x', + type: 'number', + description: 'x coordinate on the screen', + required: true, + }, + { + name: 'y', + type: 'number', + description: 'y coordinate on the screen', + required: true, + }, + ], + }, + }, + '/session/:sessionId/touch/move': { + POST: { + command: 'touchMove', + description: 'Finger move on the screen.', + ref: 'https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidtouchmove', + deprecated: TOUCH_DEPRECATION_NOTICE, + parameters: [ + { + name: 'x', + type: 'number', + description: 'x coordinate on the screen', + required: true, + }, + { + name: 'y', + type: 'number', + description: 'y coordinate on the screen', + required: true, + }, + ], + }, + }, '/session/:sessionId/touch/scroll': { POST: { command: 'touchScroll', @@ -1260,6 +1326,23 @@ export default { ], }, }, + '/session/:sessionId/touch/longclick': { + POST: { + command: 'touchLongClick', + description: + 'Long press on the touch screen using finger motion events.', + ref: 'https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidtouchlongclick', + deprecated: TOUCH_DEPRECATION_NOTICE, + parameters: [ + { + name: 'element', + type: 'string', + description: 'ID of the element to long press on', + required: true, + }, + ], + }, + }, '/session/:sessionId/touch/flick': { POST: { command: 'touchFlick', diff --git a/packages/wdio-protocols/src/protocols/selenium.ts b/packages/wdio-protocols/src/protocols/selenium.ts index 76b410eba2f..2c519e81ebf 100644 --- a/packages/wdio-protocols/src/protocols/selenium.ts +++ b/packages/wdio-protocols/src/protocols/selenium.ts @@ -1,5 +1,5 @@ export default { - '/session/:sessionId/se/file': { + '/session/:sessionId/file': { POST: { command: 'file', description: diff --git a/packages/wdio-reporter/package.json b/packages/wdio-reporter/package.json index 1659a5c79c8..db34e278f9a 100644 --- a/packages/wdio-reporter/package.json +++ b/packages/wdio-reporter/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/reporter", - "version": "8.31.1", + "version": "8.29.1", "description": "A WebdriverIO utility to help reporting all events", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-reporter", @@ -43,7 +43,7 @@ "dependencies": { "@types/node": "^20.1.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "diff": "^5.0.0", "object-inspect": "^1.12.0" }, diff --git a/packages/wdio-runner/package.json b/packages/wdio-runner/package.json index bf83b37f715..7237f056f18 100644 --- a/packages/wdio-runner/package.json +++ b/packages/wdio-runner/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/runner", - "version": "8.32.1", + "version": "8.29.2", "description": "A WebdriverIO service that runs tests in arbitrary environments", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-runner", @@ -30,16 +30,16 @@ "typeScriptVersion": "3.8.3", "dependencies": { "@types/node": "^20.1.0", - "@wdio/config": "8.31.1", - "@wdio/globals": "8.32.1", + "@wdio/config": "8.29.1", + "@wdio/globals": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "deepmerge-ts": "^5.0.0", - "expect-webdriverio": "^4.11.2", + "expect-webdriverio": "^4.9.3", "gaze": "^1.1.2", - "webdriver": "8.32.0", - "webdriverio": "8.32.1" + "webdriver": "8.29.1", + "webdriverio": "8.29.1" }, "publishConfig": { "access": "public" diff --git a/packages/wdio-runner/src/browser.ts b/packages/wdio-runner/src/browser.ts index 64c94f0ef66..f971e874f96 100644 --- a/packages/wdio-runner/src/browser.ts +++ b/packages/wdio-runner/src/browser.ts @@ -35,6 +35,7 @@ declare global { export default class BrowserFramework implements Omit { #runnerOptions: any // `any` here because we don't want to create a dependency to @wdio/browser-runner + #testStatePromise: Promise #resolveTestStatePromise?: (value: TestState) => void constructor ( @@ -49,6 +50,14 @@ export default class BrowserFramework implements Omit { const [, runnerOptions] = Array.isArray(_config.runner) ? _config.runner : [] this.#runnerOptions = runnerOptions || {} + + /** + * create promise to resolve test state which is being sent through the socket + * connection from the browser through the main process to the worker + */ + this.#testStatePromise = new Promise((resolve) => { + this.#resolveTestStatePromise = resolve + }) } /** @@ -97,14 +106,6 @@ export default class BrowserFramework implements Omit { const timeout = this._config.mochaOpts?.timeout || DEFAULT_TIMEOUT log.info(`Run spec file ${spec} for cid ${this._cid}`) - /** - * create promise to resolve test state which is being sent through the socket - * connection from the browser through the main process to the worker - */ - const testStatePromise = new Promise((resolve) => { - this.#resolveTestStatePromise = resolve - }) - /** * if a `sessionId` is part of `this._config` it means we are in watch mode and are * re-using a previous session. Since Vite has already a hot-reload feature, there @@ -138,7 +139,7 @@ export default class BrowserFramework implements Omit { this.#checkForTestError.bind(this), ERROR_CHECK_INTERVAL) - const state: TestState = await testStatePromise + const state: TestState = await this.#testStatePromise clearTimeout(testTimeout) clearInterval(errorInterval) @@ -231,13 +232,6 @@ export default class BrowserFramework implements Omit { if (message.type === MESSAGE_TYPES.browserTestResult) { return this.#handleTestFinish(message.value) } - - if (message.type === MESSAGE_TYPES.expectMatchersRequest) { - return this.#sendWorkerResponse( - id, - this.#expectMatcherResponse({ matchers: Array.from(matchers.keys()) }) - ) - } } async #handleHook (id: number, payload: Workers.HookTriggerEvent) { @@ -254,13 +248,6 @@ export default class BrowserFramework implements Omit { return this.#sendWorkerResponse(id, this.#hookResponse({ id: payload.id, error })) } - #expectMatcherResponse (value: Workers.ExpectMatchersResponse): Workers.SocketMessage { - return { - type: MESSAGE_TYPES.expectMatchersResponse, - value - } - } - #hookResponse (value: Workers.HookResultEvent): Workers.SocketMessage { return { type: MESSAGE_TYPES.hookResultMessage, @@ -349,7 +336,7 @@ export default class BrowserFramework implements Omit { /** * find matcher, e.g. `toBeDisplayed` or `toHaveTitle` */ - const matcher = matchers.get(payload.matcherName) + const matcher = matchers[payload.matcherName as keyof typeof matchers] if (!matcher) { const message = `Couldn't find matcher with name "${payload.matcherName}"` return this.#sendWorkerResponse(id, this.#expectResponse({ id: payload.id, pass: false, message })) diff --git a/packages/wdio-runner/src/index.ts b/packages/wdio-runner/src/index.ts index f198cc14769..a413d15e40b 100644 --- a/packages/wdio-runner/src/index.ts +++ b/packages/wdio-runner/src/index.ts @@ -73,10 +73,7 @@ export default class Runner extends EventEmitter { /** * add built-in services */ - this._snapshotService = SnapshotService.initiate({ - updateState: this._config.updateSnapshots, - resolveSnapshotPath: this._config.resolveSnapshotPath - }) + this._snapshotService = SnapshotService.initiate(this._config.updateSnapshots) this._configParser.addService(this._snapshotService) /** diff --git a/packages/wdio-runner/tests/index.test.ts b/packages/wdio-runner/tests/index.test.ts index a14d7d18a53..51914a832c0 100644 --- a/packages/wdio-runner/tests/index.test.ts +++ b/packages/wdio-runner/tests/index.test.ts @@ -346,8 +346,7 @@ describe('wdio-runner', () => { reporters: [], beforeSession: [], runner: 'local', - updateSnapshots: 'do it', - resolveSnapshotPath: 'resolve me' + updateSnapshots: 'do it' } vi.spyOn(ConfigParser.prototype, 'getConfig').mockReturnValue(config) const addServiceSpy = vi.spyOn(ConfigParser.prototype, 'addService') @@ -359,10 +358,7 @@ describe('wdio-runner', () => { expect(addServiceSpy).toBeCalledWith({ results: ['foobar'] }) - expect(SnapshotService.initiate).toBeCalledWith({ - updateState: 'do it', - resolveSnapshotPath: 'resolve me' - }) + expect(SnapshotService.initiate).toBeCalledWith('do it') expect(process.send).toBeCalledWith({ origin: 'worker', name: 'snapshot', diff --git a/packages/wdio-sauce-service/package.json b/packages/wdio-sauce-service/package.json index 225fd6d20e6..ae3211862d6 100644 --- a/packages/wdio-sauce-service/package.json +++ b/packages/wdio-sauce-service/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/sauce-service", - "version": "8.32.1", + "version": "8.29.1", "description": "WebdriverIO service that provides a better integration into Sauce Labs", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-sauce-service", @@ -31,15 +31,15 @@ "typeScriptVersion": "3.8.3", "dependencies": { "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "ip": "^1.1.8", "saucelabs": "7.5.0", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "devDependencies": { "@types/ip": "^1.1.0", - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" }, "publishConfig": { "access": "public" diff --git a/packages/wdio-shared-store-service/package.json b/packages/wdio-shared-store-service/package.json index 95b5792cb1c..894141be6a1 100644 --- a/packages/wdio-shared-store-service/package.json +++ b/packages/wdio-shared-store-service/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/shared-store-service", - "version": "8.32.1", + "version": "8.29.1", "description": "A WebdriverIO service to exchange data across processes", "author": "Mykola Grybyk ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-shared-store-service", @@ -41,13 +41,13 @@ "dependencies": { "@polka/parse": "^1.0.0-next.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "got": "^12.6.1", "polka": "^0.5.2", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "devDependencies": { - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" }, "publishConfig": { "access": "public" diff --git a/packages/wdio-smoke-test-reporter/package.json b/packages/wdio-smoke-test-reporter/package.json index 6867038f272..1371ff17975 100644 --- a/packages/wdio-smoke-test-reporter/package.json +++ b/packages/wdio-smoke-test-reporter/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/smoke-test-reporter", - "version": "8.31.1", + "version": "8.29.1", "description": "A WebdriverIO utility to smoke test reporters for internal testing purposes.", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-smoke-test-reporter", @@ -24,7 +24,7 @@ }, "typeScriptVersion": "3.8.3", "dependencies": { - "@wdio/reporter": "8.31.1" + "@wdio/reporter": "8.29.1" }, "publishConfig": { "access": "public" diff --git a/packages/wdio-spec-reporter/README.md b/packages/wdio-spec-reporter/README.md index 84cf4ba33e6..342cdd63569 100644 --- a/packages/wdio-spec-reporter/README.md +++ b/packages/wdio-spec-reporter/README.md @@ -85,7 +85,7 @@ Default: `false` ``` ### addConsoleLogs -Set to `true` to show console logs from steps in final report +Set to true to show console logs from steps in final report Type: `boolean` Default: `false` @@ -100,7 +100,7 @@ Default: `false` ``` ### realtimeReporting -Set to `true` to display test status realtime than just at the end of the run +Set to true to display test status realtime than just at the end of the run Type: `boolean` Default: `false` @@ -115,7 +115,7 @@ Default: `false` ``` ### showPreface -Set to `false` to disable `[ MutliRemoteBrowser ... ]` preface in the reports. +Set to false to disable `[ MutliRemoteBrowser ... ]` preface in the reports. Type: `boolean` Default: `true` @@ -164,21 +164,6 @@ and with `true` (default) each line will be prefixed with the preface: [loremipsum 50 Windows 10 #0-0] ``` -### color -Set to `true` to display colored output in terminal - -Type: `boolean` -Default: `true` - -```js -[ - "spec", - { - color: true, - }, -] -``` - ## Environment Options There are certain options you can set through environment variables: diff --git a/packages/wdio-spec-reporter/package.json b/packages/wdio-spec-reporter/package.json index 24a19644c6f..a109e29e863 100644 --- a/packages/wdio-spec-reporter/package.json +++ b/packages/wdio-spec-reporter/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/spec-reporter", - "version": "8.31.1", + "version": "8.29.1", "description": "A WebdriverIO plugin to report in spec style", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-spec-reporter", @@ -29,8 +29,8 @@ }, "typeScriptVersion": "3.8.3", "dependencies": { - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "chalk": "^5.1.2", "easy-table": "^1.2.0", "pretty-ms": "^7.0.0" diff --git a/packages/wdio-spec-reporter/src/index.ts b/packages/wdio-spec-reporter/src/index.ts index 79de2a4ae81..2588d1305a7 100644 --- a/packages/wdio-spec-reporter/src/index.ts +++ b/packages/wdio-spec-reporter/src/index.ts @@ -1,11 +1,12 @@ -import prettyMs from 'pretty-ms' import { format } from 'node:util' -import type { Capabilities } from '@wdio/types' -import { Chalk, type ChalkInstance } from 'chalk' -import WDIOReporter, { TestStats } from '@wdio/reporter' +import chalk from 'chalk' +import prettyMs from 'pretty-ms' import type { SuiteStats, HookStats, RunnerStats, Argument } from '@wdio/reporter' +import WDIOReporter, { TestStats } from '@wdio/reporter' +import type { Capabilities } from '@wdio/types' + import { buildTableData, printTable, getFormattedRows, sauceAuthenticationToken } from './utils.js' -import { ChalkColors, type SpecReporterOptions, type TestLink, type StateCount, type Symbols, State } from './types.js' +import type { StateCount, Symbols, SpecReporterOptions, TestLink } from './types.js' const DEFAULT_INDENT = ' ' @@ -42,7 +43,7 @@ export default class SpecReporter extends WDIOReporter { pending: '?', failed: '✖' } - private _chalk: ChalkInstance + private _onlyFailures = false private _sauceLabsSharableLinks = true @@ -68,16 +69,7 @@ export default class SpecReporter extends WDIOReporter { return this._originalStdoutWrite(chunk, encoding, callback) } } - this._chalk = new Chalk(options.color === false ? { level:0 } : {}) - } - /** - * @param state state of test execution - * @param msg the message to print in terminal - * @returns colord value based on chalk to print in terminal - */ - setMessageColor(message:string, state?: State): string{ - return this._chalk[this.getColor(state)](message) } onRunnerStart (runner: RunnerStats) { @@ -142,7 +134,7 @@ export default class SpecReporter extends WDIOReporter { return } - const title = stat.title, state = (stat as TestStats).state as State + const title = stat.title, state = (stat as TestStats).state const divider = '------------------------------------------------------------------' const indent = (stat.type==='test') ? @@ -156,8 +148,8 @@ export default class SpecReporter extends WDIOReporter { const content = stat.type === 'test' ? `${this._preface} ${indent}` + - `${this.setMessageColor(this.getSymbol(state), state)} ${title}` + - ` » ${this.setMessageColor('[', state)} ${this._suiteName} ${this.setMessageColor(']', state)}` + `${chalk[this.getColor(state)](this.getSymbol(state))} ${title}` + + ` » ${chalk[this.getColor(state)]('[')} ${this._suiteName} ${chalk[this.getColor(state)](']')}` : stat.type !== 'hook' ? `${suiteStartBanner}${this._preface} ${title}` : title @@ -359,24 +351,24 @@ export default class SpecReporter extends WDIOReporter { // display suite description (Cucumber only) if (suite.description) { output.push(...suite.description.trim().split('\n') - .map((l) => `${suiteIndent}${this.setMessageColor(l.trim())}`)) + .map((l) => `${suiteIndent}${chalk.grey(l.trim())}`)) output.push('') // empty line } // display suite rule (Cucumber only) if (suite.rule) { output.push(...suite.rule.trim().split('\n') - .map((l) => `${suiteIndent}${this.setMessageColor(l.trim())}`)) + .map((l) => `${suiteIndent}${chalk.grey(l.trim())}`)) } const eventsToReport = this.getEventsToReport(suite) for (const test of eventsToReport) { const testTitle = `${test.title} ${(test instanceof TestStats && test.retries && test.retries > 0) ? `(${test.retries} retries)` : ''}` - const state = test.state as State + const state = test.state const testIndent = `${DEFAULT_INDENT}${suiteIndent}` // Output for a single test - output.push(`${testIndent}${this.setMessageColor(this.getSymbol(state), state)} ${testTitle.trim()}`) + output.push(`${testIndent}${chalk[this.getColor(state)](this.getSymbol(state))} ${testTitle.trim()}`) // print cucumber data table cells and docstring const arg = (test as TestStats).argument @@ -435,21 +427,21 @@ export default class SpecReporter extends WDIOReporter { // Get the passes if (this._stateCounts.passed > 0) { const text = `${this._stateCounts.passed} passing ${duration}` - output.push(this.setMessageColor(text, State.PASSED)) + output.push(chalk[this.getColor('passed')](text)) duration = '' } // Get the failures if (this._stateCounts.failed > 0) { const text = `${this._stateCounts.failed} failing ${duration}`.trim() - output.push(this.setMessageColor(text, State.FAILED)) + output.push(chalk[this.getColor('failed')](text)) duration = '' } // Get the skipped tests if (this._stateCounts.skipped > 0) { const text = `${this._stateCounts.skipped} skipped ${duration}`.trim() - output.push(this.setMessageColor(text, State.SKIPPED)) + output.push(chalk[this.getColor('skipped')](text)) } return output @@ -468,7 +460,7 @@ export default class SpecReporter extends WDIOReporter { const suiteTitle = suite.title const eventsToReport = this.getEventsToReport(suite) for (const test of eventsToReport) { - if (test.state !== State.FAILED) { + if (test.state !== 'failed') { continue } @@ -482,10 +474,10 @@ export default class SpecReporter extends WDIOReporter { ) for (const error of errors) { !error?.stack?.includes('new AssertionError') - ? output.push(this.setMessageColor(error.message, State.FAILED)) + ? output.push(chalk.red(error.message)) : output.push(...error.message.split('\n')) if (error.stack) { - output.push(...error.stack.split(/\n/g).map(value => this.setMessageColor(value))) + output.push(...error.stack.split(/\n/g).map(value => chalk.gray(value))) } } } @@ -565,20 +557,20 @@ export default class SpecReporter extends WDIOReporter { * @param {string} state Test state * @return {String} State color */ - getColor (state?: string): ChalkColors { + getColor (state?: string) { // In case of an unknown state - let color = ChalkColors.GRAY + let color: keyof typeof chalk = 'gray' switch (state) { - case State.PASSED: - color = ChalkColors.GREEN + case 'passed': + color = 'green' break - case State.PENDING: - case State.SKIPPED: - color = ChalkColors.CYAN + case 'pending': + case 'skipped': + color = 'cyan' break - case State.FAILED: - color = ChalkColors.RED + case 'failed': + color = 'red' break } @@ -587,12 +579,11 @@ export default class SpecReporter extends WDIOReporter { /** * Get information about the enviroment - * @param capability + * @param {Object} caps Enviroment details * @param {Boolean} verbose - * @param isMultiremote * @return {String} Enviroment string */ - getEnviromentCombo (capability: Capabilities.RemoteCapability, verbose = true, isMultiremote = false): string { + getEnviromentCombo (capability: Capabilities.RemoteCapability, verbose = true, isMultiremote = false) { if (isMultiremote) { const browserNames = Object.values(capability).map((c) => c.browserName) const browserName = browserNames.length > 1 diff --git a/packages/wdio-spec-reporter/src/types.ts b/packages/wdio-spec-reporter/src/types.ts index ba5ce11d0ba..73397607450 100644 --- a/packages/wdio-spec-reporter/src/types.ts +++ b/packages/wdio-spec-reporter/src/types.ts @@ -47,39 +47,13 @@ export interface SpecReporterOptions { * * @default: `false` */ - realtimeReporting?: boolean + realtimeReporting?: boolean /** * Ability to show or hide preface on each line of the report ('[MultiRemote ...]') * * @default: `true` */ - showPreface?: boolean - /** - * Ability to enable or disable colored output in terminal') - * - * @default: `true` - */ - color?: boolean -} - -export enum ChalkColors { - RED = 'red', - GREEN = 'green', - CYAN = 'cyan', - GRAY = 'gray', - GREY = 'grey', - BLACCK = 'black', - YELLOW = 'yellow', - BLUE = 'blue', - MAGENTA = 'magenta', - WHITE = 'white', -} - -export enum State { - FAILED = 'failed', - PASSED = 'passed', - PENDING = 'pending', - SKIPPED = 'skipped', + showPreface?: boolean } export interface TestLink { diff --git a/packages/wdio-spec-reporter/tests/__snapshots__/index.test.ts.snap b/packages/wdio-spec-reporter/tests/__snapshots__/index.test.ts.snap index c8565e9d88c..cbff772d298 100644 --- a/packages/wdio-spec-reporter/tests/__snapshots__/index.test.ts.snap +++ b/packages/wdio-spec-reporter/tests/__snapshots__/index.test.ts.snap @@ -24,10 +24,10 @@ exports[`SpecReporter > getResultDisplay > should not print if argument is a sin [ "» /foo/bar/loo.e2e.js", "Foo test", - "gray Some important", - "gray description to read!", + "grey Some important", + "grey description to read!", "", - "gray Very important business rule", + "grey Very important business rule", " green ✓ foo", " """", " some different format", @@ -41,10 +41,10 @@ exports[`SpecReporter > getResultDisplay > should not print if data table is emp [ "» /foo/bar/loo.e2e.js", "Foo test", - "gray Some important", - "gray description to read!", + "grey Some important", + "grey description to read!", "", - "gray Very important business rule", + "grey Very important business rule", " green ✓ foo", " green ✓ bar", "", @@ -55,10 +55,10 @@ exports[`SpecReporter > getResultDisplay > should not print if the argument is u [ "» /foo/bar/loo.e2e.js", "Foo test", - "gray Some important", - "gray description to read!", + "grey Some important", + "grey description to read!", "", - "gray Very important business rule", + "grey Very important business rule", " green ✓ foo", " green ✓ bar", "", @@ -69,10 +69,10 @@ exports[`SpecReporter > getResultDisplay > should print data tables 1`] = ` [ "» /foo/bar/loo.e2e.js", "Foo test", - "gray Some important", - "gray description to read!", + "grey Some important", + "grey description to read!", "", - "gray Very important business rule", + "grey Very important business rule", " green ✓ foo", " │ Vegetable │ Rating │", " │ Apricot │ 5 │", @@ -87,10 +87,10 @@ exports[`SpecReporter > getResultDisplay > should print if the doc string is a b [ "» /foo/bar/loo.e2e.js", "Foo test", - "gray Some important", - "gray description to read!", + "grey Some important", + "grey description to read!", "", - "gray Very important business rule", + "grey Very important business rule", " green ✓ foo", " """", " """", @@ -105,10 +105,10 @@ exports[`SpecReporter > getResultDisplay > should print multiple lines doc strin [ "» /foo/bar/loo.e2e.js", "Foo test", - "gray Some important", - "gray description to read!", + "grey Some important", + "grey description to read!", "", - "gray Very important business rule", + "grey Very important business rule", " green ✓ foo", " """", " Docstring line 1", diff --git a/packages/wdio-spec-reporter/tests/index.test.ts b/packages/wdio-spec-reporter/tests/index.test.ts index 740d95ba844..fc26a288fbb 100644 --- a/packages/wdio-spec-reporter/tests/index.test.ts +++ b/packages/wdio-spec-reporter/tests/index.test.ts @@ -1,19 +1,18 @@ import path from 'node:path' +import { describe, expect, it, vi, beforeEach, beforeAll } from 'vitest' +import { runnerEnd } from '../../wdio-allure-reporter/tests/__fixtures__/runner.js' +import SpecReporter from '../src/index.js' import { RUNNER, - SUITES, SUITE_UIDS, + SUITES, SUITES_NO_TESTS, - SUITES_WITH_RETRY, SUITES_WITH_DATA_TABLE, + SUITES_NO_TESTS_WITH_HOOK_ERROR, SUITES_MULTIPLE_ERRORS, SUITES_WITH_DOC_STRING, - SUITES_NO_TESTS_WITH_HOOK_ERROR, + SUITES_WITH_RETRY } from './__fixtures__/testdata.js' -import { State } from '../src/types.js' -import SpecReporter from '../src/index.js' -import { beforeAll, beforeEach, describe, expect, it, vi } from 'vitest' -import { runnerEnd } from '../../wdio-allure-reporter/tests/__fixtures__/runner.js' vi.mock('chalk') vi.mock('@wdio/reporter', () => import(path.join(process.cwd(), '__mocks__', '@wdio/reporter'))) @@ -95,7 +94,7 @@ describe('SpecReporter', () => { beforeAll(() => { reporter.onTestPass({ title:'test1', - state:State.PASSED + state:'passed' } as any) }) @@ -108,7 +107,7 @@ describe('SpecReporter', () => { beforeAll(() => { reporter.onTestFail({ title:'test1', - state:State.FAILED + state:'failed' } as any) }) @@ -121,7 +120,7 @@ describe('SpecReporter', () => { beforeAll(() => { reporter.onTestSkip({ title:'test1', - state:State.SKIPPED, + state:'skipped', pendingReason: 'some random reason' } as any) }) @@ -410,7 +409,8 @@ describe('SpecReporter', () => { it('should print multiple lines doc string', () => { tmpReporter.getOrderedSuites = vi.fn(() => { - return Object.values(JSON.parse(JSON.stringify(SUITES_WITH_DOC_STRING))) as any[] + const suites = Object.values(JSON.parse(JSON.stringify(SUITES_WITH_DOC_STRING))) as any[] + return suites }) const result = tmpReporter.getResultDisplay() expect(result).toMatchSnapshot() @@ -555,7 +555,7 @@ describe('SpecReporter', () => { hooks: [{ type: 'hook', title: '"before all" hook in "{root}"', - state: State.FAILED + state: 'failed' }, { type: 'hook', title: '"after all" hook in "{root}"', @@ -563,7 +563,7 @@ describe('SpecReporter', () => { }, { type: 'hook', title: '"after all" hook in "{root}"', - state: State.FAILED + state: 'failed' }] }] as any const result = tmpReporter.getOrderedSuites() @@ -593,15 +593,15 @@ describe('SpecReporter', () => { describe('getSymbol', () => { it('should get the checkbox symbol', () => { - expect(tmpReporter.getSymbol(State.PASSED)).toBe('✓') + expect(tmpReporter.getSymbol('passed')).toBe('✓') }) it('should get the x symbol', () => { - expect(tmpReporter.getSymbol(State.FAILED)).toBe('✖') + expect(tmpReporter.getSymbol('failed')).toBe('✖') }) it('should get the - symbol', () => { - expect(tmpReporter.getSymbol(State.SKIPPED)).toBe('-') + expect(tmpReporter.getSymbol('skipped')).toBe('-') }) it('should get the ? symbol', () => { @@ -616,15 +616,15 @@ describe('SpecReporter', () => { }) it('should get new passed symbol', () => { - expect(tmpReporter.getSymbol(State.PASSED)).toBe(options.symbols.passed) + expect(tmpReporter.getSymbol('passed')).toBe(options.symbols.passed) }) it('should get new failed symbol', () => { - expect(tmpReporter.getSymbol(State.FAILED)).toBe(options.symbols.failed) + expect(tmpReporter.getSymbol('failed')).toBe(options.symbols.failed) }) it('should get the skipped symbol that is not set', () => { - expect(tmpReporter.getSymbol(State.SKIPPED)).toBe('-') + expect(tmpReporter.getSymbol('skipped')).toBe('-') }) }) @@ -639,7 +639,7 @@ describe('SpecReporter', () => { tmpReporter['_consoleOutput']='Printing to console spec' tmpReporter.onTestPass({ title:'test1', - state:State.PASSED + state:'passed' } as any) expect(tmpReporter.getResultDisplay().toString()).toContain('Printing to console spec') tmpReporter.onSuiteEnd() @@ -654,7 +654,7 @@ describe('SpecReporter', () => { tmpReporter['_consoleOutput']='Printing to console spec' tmpReporter.onTestFail({ title:'test1', - state:State.FAILED + state:'failed' } as any) expect(tmpReporter.getResultDisplay().toString()).toContain('Printing to console spec') tmpReporter.onSuiteEnd() @@ -669,7 +669,7 @@ describe('SpecReporter', () => { tmpReporter['_consoleOutput']='Printing to console spec' tmpReporter.onTestSkip({ title:'test1', - state:State.SKIPPED + state:'skipped' } as any) expect(tmpReporter.getResultDisplay().toString()).toContain('Printing to console spec') tmpReporter.onSuiteEnd() @@ -683,7 +683,7 @@ describe('SpecReporter', () => { tmpReporter['_orderedSuites'] = Object.values(SUITES) as any tmpReporter.onTestSkip({ title:'test1', - state:State.SKIPPED, + state:'skipped', pendingReason:'some random Reasons' } as any) expect(tmpReporter.getResultDisplay().toString()).toContain('Pending Reasons') @@ -801,16 +801,16 @@ describe('SpecReporter', () => { describe('getColor', () => { it('should get green', () => { - expect(tmpReporter.getColor(State.PASSED)).toBe('green') + expect(tmpReporter.getColor('passed')).toBe('green') }) it('should get red', () => { - expect(tmpReporter.getColor(State.FAILED)).toBe('red') + expect(tmpReporter.getColor('failed')).toBe('red') }) it('should get cyan', () => { - expect(tmpReporter.getColor(State.SKIPPED)).toBe('cyan') - expect(tmpReporter.getColor(State.PENDING)).toBe('cyan') + expect(tmpReporter.getColor('skipped')).toBe('cyan') + expect(tmpReporter.getColor('pending')).toBe('cyan') }) it('should get null', () => { @@ -818,22 +818,6 @@ describe('SpecReporter', () => { }) }) - describe('colors in terminal', () => { - it('should give colors', () => { - const tmpReporter = new SpecReporter({}) - expect(tmpReporter.setMessageColor('test', State.PASSED)).toEqual('green test') - expect(tmpReporter.setMessageColor('test', State.FAILED)).toEqual('red test') - expect(tmpReporter.setMessageColor('test', State.SKIPPED)).toEqual('cyan test') - }) - - it('should not give any color', () => { - const tmpReporter = new SpecReporter({ color: false }) - expect(tmpReporter.setMessageColor('test', State.PASSED)).toEqual('test') - expect(tmpReporter.setMessageColor('test', State.FAILED)).toEqual('test') - expect(tmpReporter.setMessageColor('test', State.SKIPPED)).toEqual('test') - }) - }) - describe('getEnviromentCombo', () => { it('should return Multibrowser as capability if multiremote is used', () => { expect(tmpReporter.getEnviromentCombo({ @@ -1013,11 +997,11 @@ describe('SpecReporter', () => { tmpReporter['_consoleOutput']='Printing to console spec' tmpReporter.onTestPass({ title:'test1', - state:State.PASSED + state:'passed' } as any) expect(tmpReporter.printCurrentStats).toBeCalledWith({ title:'test1', - state:State.PASSED + state:'passed' }) tmpReporter.onSuiteEnd() tmpReporter.onRunnerEnd(runnerEnd()) @@ -1032,11 +1016,11 @@ describe('SpecReporter', () => { tmpReporter['_consoleOutput']='Printing to console spec' tmpReporter.onTestPass({ title:'test1', - state:State.FAILED + state:'failed' } as any) expect(tmpReporter.printCurrentStats).toBeCalledWith({ title:'test1', - state:State.FAILED + state:'failed' }) tmpReporter.onSuiteEnd() tmpReporter.onRunnerEnd(runnerEnd()) @@ -1051,11 +1035,11 @@ describe('SpecReporter', () => { tmpReporter['_consoleOutput']='Printing to console spec' tmpReporter.onTestPass({ title:'test1', - state:State.SKIPPED + state:'skipped' } as any) expect(tmpReporter.printCurrentStats).toBeCalledWith({ title:'test1', - state:State.SKIPPED + state:'skipped' }) tmpReporter.onSuiteEnd() tmpReporter.onRunnerEnd(runnerEnd()) @@ -1071,11 +1055,11 @@ describe('SpecReporter', () => { tmpReporter['_consoleOutput']='Printing to console spec' tmpReporter.onHookEnd({ title:'test1', - state:State.FAILED + state:'failed' } as any) expect(tmpReporter.printCurrentStats).toBeCalledWith({ title:'test1', - state:State.FAILED + state:'failed' }) tmpReporter.onSuiteEnd() tmpReporter.onRunnerEnd(runnerEnd()) diff --git a/packages/wdio-static-server-service/package.json b/packages/wdio-static-server-service/package.json index 734d3587ff4..296a8952305 100644 --- a/packages/wdio-static-server-service/package.json +++ b/packages/wdio-static-server-service/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/static-server-service", - "version": "8.31.1", + "version": "8.29.1", "description": "A WebdriverIO service that can serve your static websites", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-static-server-service", @@ -35,7 +35,7 @@ "typeScriptVersion": "3.8.3", "dependencies": { "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "express": "^4.14.0", "morgan": "^1.7.0" }, diff --git a/packages/wdio-sumologic-reporter/package.json b/packages/wdio-sumologic-reporter/package.json index 2443ca50ed2..0822194fd76 100644 --- a/packages/wdio-sumologic-reporter/package.json +++ b/packages/wdio-sumologic-reporter/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/sumologic-reporter", - "version": "8.31.1", + "version": "8.29.1", "description": "A WebdriverIO reporter that sends test results to Sumologic for data analyses", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-sumologic-reporter", @@ -31,8 +31,8 @@ "typeScriptVersion": "3.8.3", "dependencies": { "@wdio/logger": "8.28.0", - "@wdio/reporter": "8.31.1", - "@wdio/types": "8.31.1", + "@wdio/reporter": "8.29.1", + "@wdio/types": "8.29.1", "dateformat": "4.5.1", "got": "^12.6.1", "json-stringify-safe": "^5.0.1" diff --git a/packages/wdio-testingbot-service/package.json b/packages/wdio-testingbot-service/package.json index 4232527ac0e..5ed13f92d0c 100644 --- a/packages/wdio-testingbot-service/package.json +++ b/packages/wdio-testingbot-service/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/testingbot-service", - "version": "8.32.1", + "version": "8.29.1", "description": "A WebdriverIO service that provides a better integration into TestingBot", "author": "Jochen Delabie ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-testingbot-service", @@ -31,14 +31,14 @@ "typeScriptVersion": "3.8.3", "dependencies": { "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "got": "^12.6.1", "testingbot-tunnel-launcher": "^1.1.7", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "devDependencies": { "@types/node": "^20.1.0", - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" }, "publishConfig": { "access": "public" diff --git a/packages/wdio-types/package.json b/packages/wdio-types/package.json index 69e1f58500c..6cefdc5670a 100644 --- a/packages/wdio-types/package.json +++ b/packages/wdio-types/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/types", - "version": "8.31.1", + "version": "8.29.1", "description": "Utility package providing type information for a variety of WebdriverIO interfaces", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-types", diff --git a/packages/wdio-types/src/Capabilities.ts b/packages/wdio-types/src/Capabilities.ts index 87974f2452a..88e38cffa6c 100644 --- a/packages/wdio-types/src/Capabilities.ts +++ b/packages/wdio-types/src/Capabilities.ts @@ -5,38 +5,38 @@ import type { type JSONLike = | { [property: string]: JSONLike } | readonly JSONLike[] | string | number | boolean | null -export type PageLoadingStrategy = 'none' | 'eager' | 'normal' +export type PageLoadingStrategy = 'none' | 'eager' | 'normal'; export type LoggingPreferenceType = 'OFF' | 'SEVERE' | 'WARNING' | 'INFO' | 'CONFIG' | 'FINE' | - 'FINER' | 'FINEST' | 'ALL' + 'FINER' | 'FINEST' | 'ALL'; export interface LoggingPreferences { - browser?: LoggingPreferenceType - driver?: LoggingPreferenceType - server?: LoggingPreferenceType - client?: LoggingPreferenceType + browser?: LoggingPreferenceType; + driver?: LoggingPreferenceType; + server?: LoggingPreferenceType; + client?: LoggingPreferenceType; } -export type Timeouts = Record<'script' | 'pageLoad' | 'implicit', number> +export type Timeouts = Record<'script' | 'pageLoad' | 'implicit', number>; -export type ProxyTypes = 'pac' | 'noproxy' | 'autodetect' | 'system' | 'manual' +export type ProxyTypes = 'pac' | 'noproxy' | 'autodetect' | 'system' | 'manual'; export interface ProxyObject { - proxyType?: ProxyTypes - proxyAutoconfigUrl?: string - ftpProxy?: string - ftpProxyPort?: number - httpProxy?: string - httpProxyPort?: number - sslProxy?: string - sslProxyPort?: number - socksProxy?: string - socksProxyPort?: number - socksVersion?: string - socksUsername?: string - socksPassword?: string - noProxy?: string[] + proxyType?: ProxyTypes; + proxyAutoconfigUrl?: string; + ftpProxy?: string; + ftpProxyPort?: number; + httpProxy?: string; + httpProxyPort?: number; + sslProxy?: string; + sslProxyPort?: number; + socksProxy?: string; + socksProxyPort?: number; + socksVersion?: string; + socksUsername?: string; + socksPassword?: string; + noProxy?: string[]; } declare global { @@ -45,43 +45,43 @@ declare global { /** * Identifies the user agent. */ - browserName?: string + browserName?: string; /** * Identifies the version of the user agent. */ - browserVersion?: string + browserVersion?: string; /** * Identifies the operating system of the endpoint node. */ - platformName?: string + platformName?: string; /** * Indicates whether untrusted and self-signed TLS certificates are implicitly trusted on navigation for the duration of the session. */ - acceptInsecureCerts?: boolean + acceptInsecureCerts?: boolean; /** * Defines the current session’s page load strategy. */ - pageLoadStrategy?: PageLoadingStrategy + pageLoadStrategy?: PageLoadingStrategy; /** * Defines the current session’s proxy configuration. */ - proxy?: ProxyObject + proxy?: ProxyObject; /** * Indicates whether the remote end supports all of the resizing and repositioning commands. */ - setWindowRect?: boolean + setWindowRect?: boolean; /** * Describes the timeouts imposed on certain session operations. */ - timeouts?: Timeouts + timeouts?: Timeouts; /** * Defines the current session’s strict file interactability. */ - strictFileInteractability?: boolean + strictFileInteractability?: boolean, /** * Describes the current session’s user prompt handler. Defaults to the dismiss and notify state. */ - unhandledPromptBehavior?: string + unhandledPromptBehavior?: string; /** * WebDriver clients opt in to a bidirectional connection by requesting a capability with the name "webSocketUrl" and value true. */ @@ -91,17 +91,17 @@ declare global { } export interface W3CCapabilities { - alwaysMatch: WebdriverIO.Capabilities - firstMatch: WebdriverIO.Capabilities[] + alwaysMatch: WebdriverIO.Capabilities; + firstMatch: WebdriverIO.Capabilities[]; } -export type RemoteCapabilities = (DesiredCapabilities | W3CCapabilities)[] | MultiRemoteCapabilities | MultiRemoteCapabilities[] +export type RemoteCapabilities = (DesiredCapabilities | W3CCapabilities)[] | MultiRemoteCapabilities | MultiRemoteCapabilities[]; export interface MultiRemoteCapabilities { - [instanceName: string]: WebDriverIOOptions + [instanceName: string]: WebDriverIOOptions; } -export type RemoteCapability = DesiredCapabilities | W3CCapabilities | MultiRemoteCapabilities +export type RemoteCapability = DesiredCapabilities | W3CCapabilities | MultiRemoteCapabilities; /** * @deprecated use `WebdriverIO.Capabilities` instead @@ -112,43 +112,43 @@ export interface DesiredCapabilities extends WebdriverIO.Capabilities, SauceLabs ChromeCapabilities, BrowserStackCapabilities, AppiumXCUITestCapabilities, LambdaTestCapabilities { // Read-only capabilities - cssSelectorsEnabled?: boolean - handlesAlerts?: boolean - version?: string - platform?: string - public?: any + cssSelectorsEnabled?: boolean; + handlesAlerts?: boolean; + version?: string; + platform?: string; + public?: any; loggingPrefs?: { - browser?: LoggingPreferences - driver?: LoggingPreferences - server?: LoggingPreferences - client?: LoggingPreferences - } + browser?: LoggingPreferences; + driver?: LoggingPreferences; + server?: LoggingPreferences; + client?: LoggingPreferences; + }; // Read-write capabilities - javascriptEnabled?: boolean - databaseEnabled?: boolean - locationContextEnabled?: boolean - applicationCacheEnabled?: boolean - browserConnectionEnabled?: boolean - webStorageEnabled?: boolean - acceptSslCerts?: boolean - rotatable?: boolean - nativeEvents?: boolean - unexpectedAlertBehaviour?: string - elementScrollBehavior?: number + javascriptEnabled?: boolean; + databaseEnabled?: boolean; + locationContextEnabled?: boolean; + applicationCacheEnabled?: boolean; + browserConnectionEnabled?: boolean; + webStorageEnabled?: boolean; + acceptSslCerts?: boolean; + rotatable?: boolean; + nativeEvents?: boolean; + unexpectedAlertBehaviour?: string; + elementScrollBehavior?: number; // RemoteWebDriver specific - 'webdriver.remote.sessionid'?: string - 'webdriver.remote.quietExceptions'?: boolean + 'webdriver.remote.sessionid'?: string; + 'webdriver.remote.quietExceptions'?: boolean; // Selenese-Backed-WebDriver specific - 'selenium.server.url'?: string + 'selenium.server.url'?: string; // webdriverio specific - specs?: string[] - exclude?: string[] - excludeDriverLogs?: string[] + specs?: string[]; + exclude?: string[]; + excludeDriverLogs?: string[]; } export interface VendorExtensions extends EdgeCapabilities, AppiumCapabilities, WebdriverIO.WDIODevtoolsOptions, WebdriverIOCapabilities, WebdriverIO.WDIOVSCodeServiceOptions { @@ -170,7 +170,7 @@ export interface VendorExtensions extends EdgeCapabilities, AppiumCapabilities, 'bstack:options'?: BrowserStackCapabilities 'browserstack.local'?: boolean 'browserstack.accessibility'?: boolean - 'browserstack.accessibilityOptions'?: { [key: string]: any } + 'browserstack.accessibilityOptions'?: { [key: string]: any; } /** * @private */ @@ -197,7 +197,7 @@ export interface VendorExtensions extends EdgeCapabilities, AppiumCapabilities, // Safari specific 'safari.options'?: { [name: string]: any - } + }; /** * Selenium 4.0 Specific @@ -211,47 +211,10 @@ export interface VendorExtensions extends EdgeCapabilities, AppiumCapabilities, } export interface WebdriverIOCapabilities { - /** - * process id of driver attached to given session - */ - 'wdio:driverPID'?: number 'wdio:chromedriverOptions'?: WebdriverIO.ChromedriverOptions 'wdio:safaridriverOptions'?: WebdriverIO.SafaridriverOptions 'wdio:geckodriverOptions'?: WebdriverIO.GeckodriverOptions 'wdio:edgedriverOptions'?: WebdriverIO.EdgedriverOptions - /** - * Maximum number of total parallel running workers (per capability) - */ - 'wdio:maxInstances'?: number - /** - * Maximum number of total parallel running workers (per capability) - * @deprecated please use `wdio:maxInstances` instead - */ - maxInstances?: number - - /** - * Define specs for test execution. You can either specify a glob - * pattern to match multiple files at once or wrap a glob or set of - * paths into an array to run them within a single worker process. - */ - 'wdio:specs'?: string[] - /** - * Define specs for test execution. You can either specify a glob - * pattern to match multiple files at once or wrap a glob or set of - * paths into an array to run them within a single worker process. - * @deprecated please use `wdio:specs` instead - */ - specs?: string[] - - /** - * Exclude specs from test execution. - */ - 'wdio:exclude'?: string[] - /** - * Exclude specs from test execution. - * @deprecated please use `wdio:exclude` instead - */ - exclude?: string[] } export interface ChromeOptions { @@ -365,21 +328,21 @@ interface MicrosoftEdgeOptions extends ChromeOptions { export type FirefoxLogLevels = 'trace' | 'debug' | 'config' | - 'info' | 'warn' | 'error' | 'fatal' + 'info' | 'warn' | 'error' | 'fatal'; export interface FirefoxLogObject { level: FirefoxLogLevels } export interface GeckodriverCapabilities { - 'firefox_binary'?: string - firefoxProfileTemplate?: string - captureNetworkTraffic?: boolean - addCustomRequestHeaders?: boolean - trustAllSSLCertificates?: boolean - changeMaxConnections?: boolean - profile?: string - pageLoadingStrategy?: string + 'firefox_binary'?: string; + firefoxProfileTemplate?: string; + captureNetworkTraffic?: boolean; + addCustomRequestHeaders?: boolean; + trustAllSSLCertificates?: boolean; + changeMaxConnections?: boolean; + profile?: string; + pageLoadingStrategy?: string; } export interface FirefoxOptions { @@ -432,22 +395,22 @@ export interface MoonOptions extends SelenoidOptions { // Selenium Grid specific export interface GridCapabilities { // Grid-specific - seleniumProtocol?: string - maxInstances?: number - environment?: string + seleniumProtocol?: string; + maxInstances?: number; + environment?: string; } // Edge specific export interface EdgeCapabilities { - 'ms:inPrivate'?: boolean - 'ms:extensionPaths'?: string[] - 'ms:startPage'?: string + 'ms:inPrivate'?: boolean; + 'ms:extensionPaths'?: string[]; + 'ms:startPage'?: string; } // Chrome specific export interface ChromeCapabilities { - chromeOptions?: ChromeOptions - mobileEmulationEnabled?: boolean + chromeOptions?: ChromeOptions; + mobileEmulationEnabled?: boolean; } /** @@ -467,7 +430,7 @@ export interface AppiumCapabilities { * + 'XCUITest' or 'Instruments' for iOS * + 'YouiEngine' for application built with You.i Engine */ - 'appium:automationName'?: string + 'appium:automationName'?: string; /** * Which mobile OS platform to use. * @@ -476,11 +439,11 @@ export interface AppiumCapabilities { * + 'Android' * + 'FirefoxOS' */ - 'appium:platformName'?: string + 'appium:platformName'?: string; /** * Expected mobile OS version, eg: '7.1', '4.4' etc. */ - 'appium:platformVersion'?: string + 'appium:platformVersion'?: string; /** * The kind of mobile device or emulator to use, for each platform, it accept different kind of values. * @@ -493,7 +456,7 @@ export interface AppiumCapabilities { * ### For Android, this capability is currently ignored, though it remains required. * Note: This document is written with appium 1.22.1 release, this behavior may changed later. */ - 'appium:deviceName'?: string + 'appium:deviceName'?: string; /** * The absolute local path or remote http URL to a .ipa file (IOS), .app folder (IOS Simulator), .apk file (Android) * or [.apks file (Android App Bundle)](https://appium.github.io/appium.io/docs/en/writing-running-appium/android/android-appbundle/index.html), @@ -503,41 +466,41 @@ export interface AppiumCapabilities { * Note that this capability is not required for Android if you specify appPackage and appActivity capabilities. * UiAutomator2 and XCUITest allow to start the session without app or appPackage. */ - 'appium:app'?: string + 'appium:app'?: string; /** * The id of the app to be tested. eg: 'com.android.chrome'. */ - 'appium:appPackage'?: string - 'appium:appWaitActivity'?: string - 'appium:newCommandTimeout'?: number - 'appium:language'?: string - 'appium:locale'?: string + 'appium:appPackage'?: string; + 'appium:appWaitActivity'?: string; + 'appium:newCommandTimeout'?: number; + 'appium:language'?: string; + 'appium:locale'?: string; /** * iOS Unique Device Identifier */ - 'appium:udid'?: string - 'appium:orientation'?: string - 'appium:autoWebview'?: boolean - 'appium:noReset'?: boolean - 'appium:fullReset'?: boolean - 'appium:eventTimings'?: boolean - 'appium:enablePerformanceLogging'?: boolean - 'appium:printPageSourceOnFindFailure'?: boolean - 'appium:nativeWebTap'?: boolean + 'appium:udid'?: string; + 'appium:orientation'?: string; + 'appium:autoWebview'?: boolean; + 'appium:noReset'?: boolean; + 'appium:fullReset'?: boolean; + 'appium:eventTimings'?: boolean; + 'appium:enablePerformanceLogging'?: boolean; + 'appium:printPageSourceOnFindFailure'?: boolean; + 'appium:nativeWebTap'?: boolean; /** * Users as directConnect feature by the server * https://appiumpro.com/editions/86-connecting-directly-to-appium-hosts-in-distributed-environments */ - 'appium:directConnectProtocol'?: string - 'appium:directConnectHost'?: string - 'appium:directConnectPort'?: number - 'appium:directConnectPath'?: string + 'appium:directConnectProtocol'?: string; + 'appium:directConnectHost'?: string; + 'appium:directConnectPort'?: number; + 'appium:directConnectPath'?: string; /** * Windows-specific capability: Please see https://github.com/appium/appium-windows-driver#usage * This is a hexadecimal handle of an existing application top level window to attach to. Either this * capability or 'appium:app' must be provided on session startup. */ - 'appium:appTopLevelWindow'?: string + 'appium:appTopLevelWindow'?: string; } /** @@ -546,100 +509,100 @@ export interface AppiumCapabilities { * @see https://appium.github.io/appium.io/docs/en/writing-running-appium/caps/#android-only */ export interface AppiumAndroidCapabilities { - 'appium:appiumVersion'?: string - 'appium:appActivity'?: string - 'appium:appPackage'?: string - 'appium:appWaitActivity'?: string - 'appium:appWaitPackage'?: string - 'appium:appWaitDuration'?: number - 'appium:deviceReadyTimeout'?: number - 'appium:allowTestPackages'?: boolean - 'appium:androidCoverage'?: string - 'appium:androidCoverageEndIntent'?: string - 'appium:androidDeviceReadyTimeout'?: number - 'appium:androidInstallTimeout'?: number - 'appium:androidInstallPath'?: string - 'appium:adbPort'?: number - 'appium:systemPort'?: number - 'appium:remoteAdbHost'?: string - 'appium:androidDeviceSocket'?: string - 'appium:avd'?: string - 'appium:avdLaunchTimeout'?: number - 'appium:avdReadyTimeout'?: number - 'appium:avdArgs'?: string - 'appium:useKeystore'?: boolean - 'appium:keystorePath'?: string - 'appium:keystorePassword'?: string - 'appium:keyAlias'?: string - 'appium:keyPassword'?: string - 'appium:chromedriverExecutable'?: string - 'appium:chromedriverArgs'?: string[] - 'appium:chromedriverExecutableDir'?: string - 'appium:chromedriverChromeMappingFile'?: string - 'appium:chromedriverUseSystemExecutable'?: boolean - 'appium:autoWebviewTimeout'?: number - 'appium:chromedriverPort'?: number + 'appium:appiumVersion'?: string; + 'appium:appActivity'?: string; + 'appium:appPackage'?: string; + 'appium:appWaitActivity'?: string; + 'appium:appWaitPackage'?: string; + 'appium:appWaitDuration'?: number; + 'appium:deviceReadyTimeout'?: number; + 'appium:allowTestPackages'?: boolean; + 'appium:androidCoverage'?: string; + 'appium:androidCoverageEndIntent'?: string; + 'appium:androidDeviceReadyTimeout'?: number; + 'appium:androidInstallTimeout'?: number; + 'appium:androidInstallPath'?: string; + 'appium:adbPort'?: number; + 'appium:systemPort'?: number; + 'appium:remoteAdbHost'?: string; + 'appium:androidDeviceSocket'?: string; + 'appium:avd'?: string; + 'appium:avdLaunchTimeout'?: number; + 'appium:avdReadyTimeout'?: number; + 'appium:avdArgs'?: string; + 'appium:useKeystore'?: boolean; + 'appium:keystorePath'?: string; + 'appium:keystorePassword'?: string; + 'appium:keyAlias'?: string; + 'appium:keyPassword'?: string; + 'appium:chromedriverExecutable'?: string; + 'appium:chromedriverArgs'?: string[]; + 'appium:chromedriverExecutableDir'?: string; + 'appium:chromedriverChromeMappingFile'?: string; + 'appium:chromedriverUseSystemExecutable'?: boolean; + 'appium:autoWebviewTimeout'?: number; + 'appium:chromedriverPort'?: number; 'appium:chromedriverPorts'?: (number | number[])[] - 'appium:intentAction'?: string - 'appium:intentCategory'?: string - 'appium:intentFlags'?: string - 'appium:optionalIntentArguments'?: string - 'appium:dontStopAppOnReset'?: boolean - 'appium:unicodeKeyboard'?: boolean - 'appium:resetKeyboard'?: boolean - 'appium:noSign'?: boolean - 'appium:ignoreUnimportantViews'?: boolean - 'appium:disableAndroidWatchers'?: boolean - 'appium:recreateChromeDriverSessions'?: boolean - 'appium:nativeWebScreenshot'?: boolean - 'appium:androidScreenshotPath'?: string - 'appium:autoGrantPermissions'?: boolean - 'appium:networkSpeed'?: string - 'appium:gpsEnabled'?: boolean - 'appium:isHeadless'?: boolean - 'appium:adbExecTimeout'?: number - 'appium:localeScript'?: string - 'appium:skipDeviceInitialization'?: boolean - 'appium:chromedriverDisableBuildCheck'?: boolean - 'appium:skipUnlock'?: boolean - 'appium:unlockType'?: string - 'appium:unlockKey'?: string - 'appium:autoLaunch'?: boolean - 'appium:skipLogcatCapture'?: boolean - 'appium:uninstallOtherPackages'?: string - 'appium:disableWindowAnimation'?: boolean - 'appium:otherApps'?: string | string[] - 'appium:uiautomator2ServerLaunchTimeout'?: number - 'appium:uiautomator2ServerInstallTimeout'?: number - 'appium:skipServerInstallation'?: boolean - 'appium:espressoServerLaunchTimeout'?: number - 'appium:disableSuppressAccessibilityService'?: boolean - 'appium:hideKeyboard'?: boolean - 'appium:autoWebviewName'?: string + 'appium:intentAction'?: string; + 'appium:intentCategory'?: string; + 'appium:intentFlags'?: string; + 'appium:optionalIntentArguments'?: string; + 'appium:dontStopAppOnReset'?: boolean; + 'appium:unicodeKeyboard'?: boolean; + 'appium:resetKeyboard'?: boolean; + 'appium:noSign'?: boolean; + 'appium:ignoreUnimportantViews'?: boolean; + 'appium:disableAndroidWatchers'?: boolean; + 'appium:recreateChromeDriverSessions'?: boolean; + 'appium:nativeWebScreenshot'?: boolean; + 'appium:androidScreenshotPath'?: string; + 'appium:autoGrantPermissions'?: boolean; + 'appium:networkSpeed'?: string; + 'appium:gpsEnabled'?: boolean; + 'appium:isHeadless'?: boolean; + 'appium:adbExecTimeout'?: number; + 'appium:localeScript'?: string; + 'appium:skipDeviceInitialization'?: boolean; + 'appium:chromedriverDisableBuildCheck'?: boolean; + 'appium:skipUnlock'?: boolean; + 'appium:unlockType'?: string; + 'appium:unlockKey'?: string; + 'appium:autoLaunch'?: boolean; + 'appium:skipLogcatCapture'?: boolean; + 'appium:uninstallOtherPackages'?: string; + 'appium:disableWindowAnimation'?: boolean; + 'appium:otherApps'?: string | string[]; + 'appium:uiautomator2ServerLaunchTimeout'?: number; + 'appium:uiautomator2ServerInstallTimeout'?: number; + 'appium:skipServerInstallation'?: boolean; + 'appium:espressoServerLaunchTimeout'?: number; + 'appium:disableSuppressAccessibilityService'?: boolean; + 'appium:hideKeyboard'?: boolean; + 'appium:autoWebviewName'?: string; - 'appium:uiautomator2ServerReadTimeout'?: number - 'appium:appWaitForLaunch'?: boolean - 'appium:remoteAppsCacheLimit'?: number - 'appium:enforceAppInstall'?: boolean - 'appium:clearDeviceLogsOnStart'?: boolean - 'appium:buildToolsVersion'?: string - 'appium:suppressKillServer'?: boolean - 'appium:ignoreHiddenApiPolicyError'?: boolean - 'appium:mockLocationApp'?: string - 'appium:logcatFormat'?: string - 'appium:logcatFilterSpecs'?: string - 'appium:allowDelayAdb'?: boolean - 'appium:avdEnv'?: { [key: string]: string } - 'appium:unlockStrategy'?: string - 'appium:unlockSuccessTimeout'?: number - 'appium:webviewDevtoolsPort'?: number - 'appium:ensureWebviewsHavePages'?: boolean - 'appium:enableWebviewDetailsCollection'?: boolean - 'appium:extractChromeAndroidPackageFromContextName'?: boolean - 'appium:showChromedriverLog'?: boolean - 'appium:chromeOptions'?: { [key: string]: any } - 'appium:chromeLoggingPrefs'?: { [key: string]: any } - 'appium:userProfile'?: number + 'appium:uiautomator2ServerReadTimeout'?: number; + 'appium:appWaitForLaunch'?: boolean; + 'appium:remoteAppsCacheLimit'?: number; + 'appium:enforceAppInstall'?: boolean; + 'appium:clearDeviceLogsOnStart'?: boolean; + 'appium:buildToolsVersion'?: string; + 'appium:suppressKillServer'?: boolean; + 'appium:ignoreHiddenApiPolicyError'?: boolean; + 'appium:mockLocationApp'?: string; + 'appium:logcatFormat'?: string; + 'appium:logcatFilterSpecs'?: string; + 'appium:allowDelayAdb'?: boolean; + 'appium:avdEnv'?: { [key: string]: string }; + 'appium:unlockStrategy'?: string; + 'appium:unlockSuccessTimeout'?: number; + 'appium:webviewDevtoolsPort'?: number; + 'appium:ensureWebviewsHavePages'?: boolean; + 'appium:enableWebviewDetailsCollection'?: boolean; + 'appium:extractChromeAndroidPackageFromContextName'?: boolean; + 'appium:showChromedriverLog'?: boolean; + 'appium:chromeOptions'?: { [key: string]: any }; + 'appium:chromeLoggingPrefs'?: { [key: string]: any }; + 'appium:userProfile'?: number; } /** @@ -648,169 +611,169 @@ export interface AppiumAndroidCapabilities { * @see https://github.com/appium/appium-xcuitest-driver */ export interface AppiumXCUITestCapabilities { - 'appium:platformName'?: string - 'appium:browserName'?: string - 'appium:app'?: string - 'appium:calendarFormat'?: string - 'appium:bundleId'?: string - 'appium:launchTimeout'?: number - 'appium:udid'?: string - 'appium:appName'?: string - 'appium:waitForAppScript'?: string - 'appium:sendKeyStrategy'?: string - 'appium:screenshotWaitTimeout'?: number - 'appium:interKeyDelay'?: number - 'appium:nativeInstrumentsLib'?: boolean - 'appium:autoAcceptAlerts'?: boolean - 'appium:autoDismissAlerts'?: boolean - 'appium:nativeWebTap'?: boolean - 'appium:safariInitialUrl'?: string - 'appium:safariAllowPopups'?: boolean - 'appium:safariIgnoreFraudWarning'?: boolean - 'appium:safariOpenLinksInBackground'?: boolean - 'appium:safariShowFullResponse'?: boolean - 'appium:keepKeyChains'?: boolean - 'appium:locationServicesEnabled'?: boolean - 'appium:locationServicesAuthorized'?: boolean - 'appium:resetLocationService'?: boolean - 'appium:localizableStringsDir'?: string - 'appium:processArguments'?: string | AppiumXCUIProcessArguments - 'appium:showIOSLog'?: boolean - 'appium:webviewConnectRetries'?: number - 'appium:clearSystemFiles'?: boolean - 'appium:customSSLCert'?: string - 'appium:webkitResponseTimeout'?: number - 'appium:webkitDebugProxyPort'?: number - 'appium:remoteDebugProxy'?: string - 'appium:enablePerformanceLogging'?: boolean - 'appium:enableAsyncExecuteFromHttps'?: boolean - 'appium:fullContextList'?: boolean - 'appium:ignoreAboutBlankUrl'?: boolean - 'appium:skipLogCapture'?: boolean - 'appium:deviceName'?: string - 'appium:showXcodeLog'?: boolean - 'appium:wdaLocalPort'?: number - 'appium:wdaBaseUrl'?: string - 'appium:iosInstallPause'?: number - 'appium:xcodeConfigFile'?: string - 'appium:xcodeOrgId'?: string - 'appium:xcodeSigningId'?: string - 'appium:keychainPath'?: string - 'appium:keychainPassword'?: string - 'appium:bootstrapPath'?: string - 'appium:agentPath'?: string - 'appium:tapWithShortPressDuration'?: number - 'appium:scaleFactor'?: string - 'appium:usePrebuiltWDA'?: boolean - 'appium:usePreinstalledWDA'?: boolean - 'appium:webDriverAgentUrl'?: string - 'appium:derivedDataPath'?: string - 'appium:launchWithIDB'?: boolean - 'appium:useNewWDA'?: boolean - 'appium:wdaLaunchTimeout'?: number - 'appium:wdaConnectionTimeout'?: number - 'appium:updatedWDABundleId'?: string - 'appium:resetOnSessionStartOnly'?: boolean - 'appium:commandTimeouts'?: string | AppiumXCUICommandTimeouts - 'appium:wdaStartupRetries'?: number - 'appium:wdaStartupRetryInterval'?: number - 'appium:prebuildWDA'?: boolean - 'appium:connectHardwareKeyboard'?: boolean - 'appium:forceTurnOnSoftwareKeyboardSimulator'?: boolean - 'appium:simulatorPasteboardAutomaticSync'?: string - 'appium:simulatorDevicesSetPath'?: string - 'appium:calendarAccessAuthorized'?: boolean - 'appium:useSimpleBuildTest'?: boolean - 'appium:waitForQuiescence'?: boolean - 'appium:maxTypingFrequency'?: number - 'appium:nativeTyping'?: boolean - 'appium:simpleIsVisibleCheck'?: boolean - 'appium:shouldUseSingletonTestManager'?: boolean - 'appium:isHeadless'?: boolean - 'appium:autoGrantPermissions'?: boolean - 'appium:useXctestrunFile'?: boolean - 'appium:absoluteWebLocations'?: boolean - 'appium:simulatorWindowCenter'?: string - 'appium:simulatorStartupTimeout'?: number - 'appium:simulatorTracePointer'?: boolean - 'appium:useJSONSource'?: boolean - 'appium:enforceFreshSimulatorCreation'?: boolean - 'appium:shutdownOtherSimulators'?: boolean - 'appium:keychainsExcludePatterns'?: string - 'appium:showSafariConsoleLog'?: boolean - 'appium:showSafariNetworkLog'?: boolean - 'appium:safariGarbageCollect'?: boolean - 'appium:safariGlobalPreferences'?: AppiumXCUISafariGlobalPreferences - 'appium:safariLogAllCommunication'?: boolean - 'appium:safariLogAllCommunicationHexDump'?: boolean - 'appium:safariSocketChunkSize'?: number - 'appium:mjpegServerPort'?: number - 'appium:reduceMotion'?: boolean - 'appium:mjpegScreenshotUrl'?: string - 'appium:permissions'?: string - 'appium:screenshotQuality'?: number - 'appium:wdaEventloopIdleDelay'?: number - 'appium:otherApps'?: string | string[] - 'appium:includeSafariInWebviews'?: boolean - 'appium:additionalWebviewBundleIds'?: Array - 'appium:webviewConnectTimeout'?: number - 'appium:iosSimulatorLogsPredicate'?: string - 'appium:appPushTimeout'?: number - 'appium:nativeWebTapStrict'?: boolean - 'appium:safariWebInspectorMaxFrameLength'?: number - 'appium:allowProvisioningDeviceRegistration'?: boolean - 'appium:waitForIdleTimeout'?: number - 'appium:resultBundlePath'?: string - 'appium:resultBundleVersion'?: number - 'appium:safariIgnoreWebHostnames'?: string - 'appium:includeDeviceCapsToSessionInfo'?: boolean - 'appium:disableAutomaticScreenshots'?: boolean - 'appium:shouldTerminateApp'?: boolean - 'appium:forceAppLaunch'?: boolean - 'appium:useNativeCachingStrategy'?: boolean - 'appium:appInstallStrategy'?: string + 'appium:platformName'?: string; + 'appium:browserName'?: string; + 'appium:app'?: string; + 'appium:calendarFormat'?: string; + 'appium:bundleId'?: string; + 'appium:launchTimeout'?: number; + 'appium:udid'?: string; + 'appium:appName'?: string; + 'appium:waitForAppScript'?: string; + 'appium:sendKeyStrategy'?: string; + 'appium:screenshotWaitTimeout'?: number; + 'appium:interKeyDelay'?: number; + 'appium:nativeInstrumentsLib'?: boolean; + 'appium:autoAcceptAlerts'?: boolean; + 'appium:autoDismissAlerts'?: boolean; + 'appium:nativeWebTap'?: boolean; + 'appium:safariInitialUrl'?: string; + 'appium:safariAllowPopups'?: boolean; + 'appium:safariIgnoreFraudWarning'?: boolean; + 'appium:safariOpenLinksInBackground'?: boolean; + 'appium:safariShowFullResponse'?: boolean; + 'appium:keepKeyChains'?: boolean; + 'appium:locationServicesEnabled'?: boolean; + 'appium:locationServicesAuthorized'?: boolean; + 'appium:resetLocationService'?: boolean; + 'appium:localizableStringsDir'?: string; + 'appium:processArguments'?: string|AppiumXCUIProcessArguments; + 'appium:showIOSLog'?: boolean; + 'appium:webviewConnectRetries'?: number; + 'appium:clearSystemFiles'?: boolean; + 'appium:customSSLCert'?: string; + 'appium:webkitResponseTimeout'?: number; + 'appium:webkitDebugProxyPort'?: number; + 'appium:remoteDebugProxy'?: string; + 'appium:enablePerformanceLogging'?: boolean; + 'appium:enableAsyncExecuteFromHttps'?: boolean; + 'appium:fullContextList'?: boolean; + 'appium:ignoreAboutBlankUrl'?: boolean; + 'appium:skipLogCapture'?: boolean; + 'appium:deviceName'?: string; + 'appium:showXcodeLog'?: boolean; + 'appium:wdaLocalPort'?: number; + 'appium:wdaBaseUrl'?: string; + 'appium:iosInstallPause'?: number; + 'appium:xcodeConfigFile'?: string; + 'appium:xcodeOrgId'?: string; + 'appium:xcodeSigningId'?: string; + 'appium:keychainPath'?: string; + 'appium:keychainPassword'?: string; + 'appium:bootstrapPath'?: string; + 'appium:agentPath'?: string; + 'appium:tapWithShortPressDuration'?: number; + 'appium:scaleFactor'?: string; + 'appium:usePrebuiltWDA'?: boolean; + 'appium:usePreinstalledWDA'?: boolean; + 'appium:webDriverAgentUrl'?: string; + 'appium:derivedDataPath'?: string; + 'appium:launchWithIDB'?: boolean; + 'appium:useNewWDA'?: boolean; + 'appium:wdaLaunchTimeout'?: number; + 'appium:wdaConnectionTimeout'?: number; + 'appium:updatedWDABundleId'?: string; + 'appium:resetOnSessionStartOnly'?: boolean; + 'appium:commandTimeouts'?: string|AppiumXCUICommandTimeouts; + 'appium:wdaStartupRetries'?: number; + 'appium:wdaStartupRetryInterval'?: number; + 'appium:prebuildWDA'?: boolean; + 'appium:connectHardwareKeyboard'?: boolean; + 'appium:forceTurnOnSoftwareKeyboardSimulator'?: boolean; + 'appium:simulatorPasteboardAutomaticSync'?: string; + 'appium:simulatorDevicesSetPath'?: string; + 'appium:calendarAccessAuthorized'?: boolean; + 'appium:useSimpleBuildTest'?: boolean; + 'appium:waitForQuiescence'?: boolean; + 'appium:maxTypingFrequency'?: number; + 'appium:nativeTyping'?: boolean; + 'appium:simpleIsVisibleCheck'?: boolean; + 'appium:shouldUseSingletonTestManager'?: boolean; + 'appium:isHeadless'?: boolean; + 'appium:autoGrantPermissions'?: boolean; + 'appium:useXctestrunFile'?: boolean; + 'appium:absoluteWebLocations'?: boolean; + 'appium:simulatorWindowCenter'?: string; + 'appium:simulatorStartupTimeout'?: number; + 'appium:simulatorTracePointer'?: boolean; + 'appium:useJSONSource'?: boolean; + 'appium:enforceFreshSimulatorCreation'?: boolean; + 'appium:shutdownOtherSimulators'?: boolean; + 'appium:keychainsExcludePatterns'?: string; + 'appium:showSafariConsoleLog'?: boolean; + 'appium:showSafariNetworkLog'?: boolean; + 'appium:safariGarbageCollect'?: boolean; + 'appium:safariGlobalPreferences'?: AppiumXCUISafariGlobalPreferences; + 'appium:safariLogAllCommunication'?: boolean; + 'appium:safariLogAllCommunicationHexDump'?: boolean; + 'appium:safariSocketChunkSize'?: number; + 'appium:mjpegServerPort'?: number; + 'appium:reduceMotion'?: boolean; + 'appium:mjpegScreenshotUrl'?: string; + 'appium:permissions'?: string; + 'appium:screenshotQuality'?: number; + 'appium:wdaEventloopIdleDelay'?: number; + 'appium:otherApps'?: string | string[]; + 'appium:includeSafariInWebviews'?: boolean; + 'appium:additionalWebviewBundleIds'?: Array; + 'appium:webviewConnectTimeout'?: number; + 'appium:iosSimulatorLogsPredicate'?: string; + 'appium:appPushTimeout'?: number; + 'appium:nativeWebTapStrict'?: boolean; + 'appium:safariWebInspectorMaxFrameLength'?: number; + 'appium:allowProvisioningDeviceRegistration'?: boolean; + 'appium:waitForIdleTimeout'?: number; + 'appium:resultBundlePath'?: string; + 'appium:resultBundleVersion'?: number; + 'appium:safariIgnoreWebHostnames'?: string; + 'appium:includeDeviceCapsToSessionInfo'?: boolean; + 'appium:disableAutomaticScreenshots'?: boolean; + 'appium:shouldTerminateApp'?: boolean; + 'appium:forceAppLaunch'?: boolean; + 'appium:useNativeCachingStrategy'?: boolean; + 'appium:appInstallStrategy'?: string; /** * Windows Application Driver capabilities */ - 'appium:appArguments'?: string + 'appium:appArguments'?: string; } export interface AppiumXCUISafariGlobalPreferences { - [key: string]: any + [key: string]: any; } export interface AppiumXCUIProcessArguments { args?: Array - env?: { [key: string]: any } + env?: { [key: string]: any;} } export interface AppiumXCUICommandTimeouts { - [key: string]: any + [key: string]: any; } // IE specific export interface IECapabilities { - 'ie.forceCreateProcessApi'?: boolean - 'ie.browserCommandLineSwitches'?: string - 'ie.usePerProcessProxy'?: boolean - 'ie.ensureCleanSession'?: boolean - 'ie.setProxyByServer'?: boolean - 'ie.fileUploadDialogTimeout'?: number - 'ie.edgechromium'?: boolean - 'ie.edgepath'?: string - ignoreProtectedModeSettings?: boolean - ignoreZoomSetting?: boolean - initialBrowserUrl?: string - enablePersistentHover?: boolean - enableElementCacheCleanup?: boolean - requireWindowFocus?: boolean - browserAttachTimeout?: number - logFile?: string - logLevel?: string - host?: string - extractPath?: string - silent?: string - killProcessesByName?: boolean + 'ie.forceCreateProcessApi'?: boolean; + 'ie.browserCommandLineSwitches'?: string; + 'ie.usePerProcessProxy'?: boolean; + 'ie.ensureCleanSession'?: boolean; + 'ie.setProxyByServer'?: boolean; + 'ie.fileUploadDialogTimeout'?: number; + 'ie.edgechromium'?: boolean; + 'ie.edgepath'?: string; + ignoreProtectedModeSettings?: boolean; + ignoreZoomSetting?: boolean; + initialBrowserUrl?: string; + enablePersistentHover?: boolean; + enableElementCacheCleanup?: boolean; + requireWindowFocus?: boolean; + browserAttachTimeout?: number; + logFile?: string; + logLevel?: string; + host?: string; + extractPath?: string; + silent?: string; + killProcessesByName?: boolean; } /** @@ -1104,12 +1067,12 @@ export interface SauceLabsCapabilities { appiumVersion?: string } -export interface LambdaTestCapabilities { +export interface LambdaTestCapabilities{ username?: string accessKey?: string platformName?: string browserName?: string - browserVersion?: string + browserVersion? : string /** * Set the resolution of the VM. */ @@ -1191,7 +1154,7 @@ export interface BrowserStackCapabilities { */ debug?: boolean networkLogs?: boolean - /** + /** * https://www.browserstack.com/docs/app-automate/appium/debug-failed-tests/network-logs * Enable viewing the response data in the Network Logs tab on your session */ @@ -1354,12 +1317,12 @@ export interface BrowserStackCapabilities { buildIdentifier?: string accessibility?: boolean - accessibilityOptions?: { [key: string]: any } + accessibilityOptions?: { [key: string]: any; } 'browserstack.buildIdentifier'?: string 'browserstack.localIdentifier'?: string 'browserstack.accessibility'?: boolean - 'browserstack.accessibilityOptions'?: { [key: string]: any } + 'browserstack.accessibilityOptions'?: { [key: string]: any; } } export interface SauceLabsVisualCapabilities { @@ -1453,38 +1416,38 @@ export interface SauceLabsVisualCapabilities { * https://testingbot.com/support/other/test-options#platform */ export interface TestingbotCapabilities { - name?: string - tags?: string[] - build?: string | number | number - public?: boolean - 'tunnel-identifier'?: string - realDevice?: boolean - 'selenium-version'?: string - chromedriverVersion?: string - iedriverVersion?: string - edgedriverVersion?: string - geckodriverVersion?: string - operaDriverVersion?: string - timeZone?: string - upload?: string - 'testingbot.geoCountryCode'?: string - idletimeout?: number - 'load-extension'?: string + name?: string; + tags?: string[]; + build?: string | number | number; + public?: boolean; + 'tunnel-identifier'?: string; + realDevice?: boolean; + 'selenium-version'?: string; + chromedriverVersion?: string; + iedriverVersion?: string; + edgedriverVersion?: string; + geckodriverVersion?: string; + operaDriverVersion?: string; + timeZone?: string; + upload?: string; + 'testingbot.geoCountryCode'?: string; + idletimeout?: number; + 'load-extension'?: string; } export interface SeleniumRCCapabilities { // Selenium RC (1.0) only - commandLineFlags?: string - executablePath?: string - timeoutInSeconds?: number - onlyProxySeleniumTraffic?: boolean - avoidProxy?: boolean - proxyEverything?: boolean - proxyRequired?: boolean - browserSideLog?: boolean - optionsSet?: boolean - singleWindow?: boolean - dontInjectRegex?: RegExp - userJSInjection?: boolean - userExtensions?: string + commandLineFlags?: string; + executablePath?: string; + timeoutInSeconds?: number; + onlyProxySeleniumTraffic?: boolean; + avoidProxy?: boolean; + proxyEverything?: boolean; + proxyRequired?: boolean; + browserSideLog?: boolean; + optionsSet?: boolean; + singleWindow?: boolean; + dontInjectRegex?: RegExp; + userJSInjection?: boolean; + userExtensions?: string; } diff --git a/packages/wdio-types/src/Options.ts b/packages/wdio-types/src/Options.ts index 7bfe5ecb5c0..848df763093 100644 --- a/packages/wdio-types/src/Options.ts +++ b/packages/wdio-types/src/Options.ts @@ -409,11 +409,6 @@ export interface Testrunner extends Hooks, Omit, We * Set to true if you want to update your snapshots. */ updateSnapshots?: 'all' | 'new' | 'none' - /** - * Overrides default snapshot path. For example, to store snapshots next to test files. - * @default __snapshots__ stores snapshot files in __snapshots__ directory next to the test file. - */ - resolveSnapshotPath?: (testPath: string, snapExtension: string) => string /** * The number of retry attempts for an entire specfile when it fails as a whole. */ diff --git a/packages/wdio-types/src/Workers.ts b/packages/wdio-types/src/Workers.ts index 963fbaa4ac8..f686900d00e 100644 --- a/packages/wdio-types/src/Workers.ts +++ b/packages/wdio-types/src/Workers.ts @@ -85,8 +85,6 @@ export enum MESSAGE_TYPES { hookResultMessage, expectRequestMessage, expectResponseMessage, - expectMatchersRequest, - expectMatchersResponse, coverageMap, customCommand, initiateBrowserStateRequest, @@ -111,8 +109,6 @@ export type SocketMessageValue = { [MESSAGE_TYPES.hookResultMessage]: HookResultEvent [MESSAGE_TYPES.expectRequestMessage]: ExpectRequestEvent [MESSAGE_TYPES.expectResponseMessage]: ExpectResponseEvent - [MESSAGE_TYPES.expectMatchersRequest]: never - [MESSAGE_TYPES.expectMatchersResponse]: ExpectMatchersResponse [MESSAGE_TYPES.coverageMap]: any [MESSAGE_TYPES.customCommand]: CustomCommandEvent [MESSAGE_TYPES.initiateBrowserStateRequest]: BrowserStateRequest @@ -133,10 +129,6 @@ export interface ConsoleEvent { cid: string } -export interface ExpectMatchersResponse { - matchers: string[] -} - export interface BrowserTestResults { failures: number events: any[] diff --git a/packages/wdio-utils/package.json b/packages/wdio-utils/package.json index f738dafb416..95bc17e6bee 100644 --- a/packages/wdio-utils/package.json +++ b/packages/wdio-utils/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/utils", - "version": "8.31.1", + "version": "8.29.1", "description": "A WDIO helper utility to provide several utility functions used across the project.", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-utils", @@ -39,7 +39,7 @@ "dependencies": { "@puppeteer/browsers": "^1.6.0", "@wdio/logger": "8.28.0", - "@wdio/types": "8.31.1", + "@wdio/types": "8.29.1", "decamelize": "^6.0.0", "deepmerge-ts": "^5.1.0", "edgedriver": "^5.3.5", diff --git a/packages/wdio-utils/src/startWebDriver.ts b/packages/wdio-utils/src/startWebDriver.ts index 6f9a468e22d..3c37d06bc72 100644 --- a/packages/wdio-utils/src/startWebDriver.ts +++ b/packages/wdio-utils/src/startWebDriver.ts @@ -14,9 +14,6 @@ export async function startWebDriver (options: Options.WebDriver) { return } - /** - * only import `startWebDriver` when run in Node.js - */ if (globalThis.process) { const { startWebDriver } = await import('./node/index.js') return startWebDriver(options) diff --git a/packages/wdio-webdriver-mock-service/package.json b/packages/wdio-webdriver-mock-service/package.json index f07fe36d2e0..2a59053eda6 100644 --- a/packages/wdio-webdriver-mock-service/package.json +++ b/packages/wdio-webdriver-mock-service/package.json @@ -1,6 +1,6 @@ { "name": "@wdio/webdriver-mock-service", - "version": "8.32.1", + "version": "8.29.1", "description": "A WebdriverIO service to stub all endpoints for internal testing purposes.", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-webdriver-mock-service", @@ -26,14 +26,14 @@ "typeScriptVersion": "3.8.3", "dependencies": { "@types/uuid": "^9.0.0", - "@wdio/protocols": "8.32.0", - "@wdio/types": "8.31.1", + "@wdio/protocols": "8.24.12", + "@wdio/types": "8.29.1", "nock": "^13.2.4", "uuid": "^9.0.0", - "webdriverio": "8.32.1" + "webdriverio": "8.29.1" }, "devDependencies": { - "@wdio/globals": "8.32.1" + "@wdio/globals": "8.29.1" }, "publishConfig": { "access": "public" diff --git a/packages/webdriver/package.json b/packages/webdriver/package.json index 5dde38396e1..6d8ae33d47c 100644 --- a/packages/webdriver/package.json +++ b/packages/webdriver/package.json @@ -1,6 +1,6 @@ { "name": "webdriver", - "version": "8.32.0", + "version": "8.29.1", "description": "A Node.js bindings implementation for the W3C WebDriver and Mobile JSONWire Protocol", "author": "Christian Bromann ", "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/webdriver", @@ -38,11 +38,11 @@ "dependencies": { "@types/node": "^20.1.0", "@types/ws": "^8.5.3", - "@wdio/config": "8.31.1", + "@wdio/config": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/protocols": "8.24.12", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "deepmerge-ts": "^5.1.0", "got": "^12.6.1", "ky": "^0.33.0", diff --git a/packages/webdriver/src/command.ts b/packages/webdriver/src/command.ts index 05d6a096310..b0d11a078c5 100644 --- a/packages/webdriver/src/command.ts +++ b/packages/webdriver/src/command.ts @@ -1,3 +1,4 @@ +import type { ChildProcess } from 'node:child_process' import logger from '@wdio/logger' import { commandCallStructure, isValidParameter, getArgumentType } from '@wdio/utils' import { @@ -12,6 +13,10 @@ import type { BaseClient, BidiCommands, BidiResponses } from './types.js' const log = logger('webdriver') const BIDI_COMMANDS: BidiCommands[] = Object.values(WebDriverBidiProtocol).map((def) => def.socket.command) +interface BaseClientWithEventHandler extends BaseClient { + _driverProcess?: ChildProcess +} + export default function ( method: string, endpointUri: string, @@ -20,7 +25,7 @@ export default function ( ) { const { command, deprecated, ref, parameters, variables = [], isHubCommand = false } = commandInfo - return async function protocolCommand (this: BaseClient, ...args: any[]): Promise { + return async function protocolCommand (this: BaseClientWithEventHandler, ...args: any[]): Promise { const isBidiCommand = BIDI_COMMANDS.includes(command as BidiCommands) let endpoint = endpointUri // clone endpointUri in case we change it const commandParams = [...variables.map((v) => Object.assign(v, { @@ -120,9 +125,6 @@ export default function ( request.on('performance', (...args) => this.emit('request.performance', ...args)) this.emit('command', { method, endpoint, body }) log.info('COMMAND', commandCallStructure(command, args)) - /** - * use then here so we can better unit test what happens before and after the request - */ return request.makeRequest(this.options, this.sessionId).then((result) => { if (typeof result.value !== 'undefined') { let resultLog = result.value @@ -139,16 +141,16 @@ export default function ( this.emit('result', { method, endpoint, body, result }) if (command === 'deleteSession') { - const shutdownDriver = body.deleteSessionOpts?.shutdownDriver !== false /** * kill driver process if there is one */ - if (shutdownDriver && 'wdio:driverPID' in this.capabilities && this.capabilities['wdio:driverPID']) { - log.info(`Kill driver process with PID ${this.capabilities['wdio:driverPID']}`) - const killedSuccessfully = process.kill(this.capabilities['wdio:driverPID'], 'SIGKILL') + if (this._driverProcess && body.deleteSessionOpts?.shutdownDriver !== false) { + log.info(`Kill ${this._driverProcess.spawnfile} driver process with command line: ${this._driverProcess.spawnargs.slice(1).join(' ')}`) + const killedSuccessfully = this._driverProcess.kill('SIGKILL') if (!killedSuccessfully) { - log.warn('Failed to kill driver process, manually clean-up might be required') + log.warn('Failed to kill driver process, manully clean-up might be required') } + this._driverProcess = undefined setTimeout(() => { /** @@ -170,7 +172,6 @@ export default function ( logger.clearLogger() } } - return result.value }) } diff --git a/packages/webdriver/src/index.ts b/packages/webdriver/src/index.ts index fe1c1dc55a7..80ee707b338 100644 --- a/packages/webdriver/src/index.ts +++ b/packages/webdriver/src/index.ts @@ -1,11 +1,8 @@ -import type { ChildProcess } from 'node:child_process' - import logger from '@wdio/logger' import { webdriverMonad, sessionEnvironmentDetector, startWebDriver } from '@wdio/utils' import { validateConfig } from '@wdio/config' -import { deepmerge } from 'deepmerge-ts' -import type { Options } from '@wdio/types' +import type { Options, Capabilities } from '@wdio/types' import command from './command.js' import { DEFAULTS } from './constants.js' @@ -36,13 +33,8 @@ export default class WebDriver { const environment = sessionEnvironmentDetector({ capabilities, requestedCapabilities }) const environmentPrototype = getEnvironmentVars(environment) const protocolCommands = getPrototype(environment) - - /** - * attach driver process to instance capabilities so we can kill the driver process - * even after attaching to this session - */ - if (driverProcess?.pid) { - capabilities['wdio:driverPID'] = driverProcess.pid + const driverPrototype: Record = { + _driverProcess: { value: driverProcess, configurable: false, writable: true } } /** @@ -61,6 +53,7 @@ export default class WebDriver { ...protocolCommands, ...environmentPrototype, ...userPrototype, + ...driverPrototype, ...bidiPrototype } ) @@ -151,31 +144,14 @@ export default class WebDriver { * @param {object} instance the object we get from a new browser session. * @returns {string} the new session id of the browser */ - static async reloadSession(instance: Client, newCapabilities?: WebdriverIO.Capabilities) { - const capabilities = deepmerge(instance.requestedCapabilities, newCapabilities || {}) - const params: Options.WebDriver = { ...instance.options, capabilities } - - let driverProcess: ChildProcess | undefined - if (newCapabilities?.browserName) { - delete params.port - delete params.hostname - driverProcess = await startWebDriver(params) + static async reloadSession(instance: Client) { + const params: Options.WebDriver = { + ...instance.options, + capabilities: instance.requestedCapabilities as Capabilities.DesiredCapabilities } - - const { sessionId, capabilities: newSessionCapabilities } = await startWebDriverSession(params) - - /** - * attach driver process to instance capabilities so we can kill the driver process - * even after attaching to this session - */ - if (driverProcess?.pid) { - newSessionCapabilities['wdio:driverPID'] = driverProcess.pid - } - - instance.options.hostname = params.hostname - instance.options.port = params.port + const { sessionId, capabilities } = await startWebDriverSession(params) instance.sessionId = sessionId - instance.capabilities = newSessionCapabilities + instance.capabilities = capabilities return sessionId } diff --git a/packages/webdriver/tests/index.test.ts b/packages/webdriver/tests/index.test.ts index 2b9142a066f..a46d0db61b6 100644 --- a/packages/webdriver/tests/index.test.ts +++ b/packages/webdriver/tests/index.test.ts @@ -4,7 +4,6 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest' // @ts-ignore mock feature import logger, { logMock } from '@wdio/logger' import { sessionEnvironmentDetector } from '@wdio/utils' -import { startWebDriver } from '@wdio/utils' import type { Capabilities } from '@wdio/types' import WebDriver, { getPrototype, DEFAULTS, command } from '../src/index.js' @@ -290,27 +289,9 @@ describe('WebDriver', () => { path: '/', capabilities: { browserName: 'firefox' } }) - vi.mocked(startWebDriver).mockClear() await WebDriver.reloadSession(session) - expect(startWebDriver).not.toHaveBeenCalledOnce() expect(got).toHaveBeenCalledTimes(2) }) - - it('starts a new driver process if browserName is given', async () => { - vi.mocked(startWebDriver).mockImplementation((params) => { - params.hostname = 'localhost' - params.port = 4444 - return { pid: 1234 } as any - }) - const session = await WebDriver.newSession({ - path: '/', - capabilities: { browserName: 'firefox' } - }) - vi.mocked(startWebDriver).mockClear() - await WebDriver.reloadSession(session, { browserName: 'chrome' }) - expect(startWebDriver).toHaveBeenCalledOnce() - expect((session.capabilities as WebdriverIO.Capabilities)['wdio:driverPID']).toBe(1234) - }) }) it('ensure that WebDriver interface exports protocols and other objects', () => { @@ -321,6 +302,5 @@ describe('WebDriver', () => { vi.mocked(logger.setLevel).mockClear() vi.mocked(got).mockClear() vi.mocked(sessionEnvironmentDetector).mockClear() - vi.mocked(startWebDriver).mockClear() }) }) diff --git a/packages/webdriverio/README.md b/packages/webdriverio/README.md index 21f6f43ff9f..10abd623cdf 100644 --- a/packages/webdriverio/README.md +++ b/packages/webdriverio/README.md @@ -46,10 +46,6 @@ For more information on [options](https://webdriver.io/docs/options#webdriver-op
Package Sponsors:

- BrowserStack - -   - - Sauce Labs + BrowserStack

diff --git a/packages/webdriverio/package.json b/packages/webdriverio/package.json index 0c053eb534f..600d4cf654a 100644 --- a/packages/webdriverio/package.json +++ b/packages/webdriverio/package.json @@ -1,7 +1,7 @@ { "name": "webdriverio", "description": "Next-gen browser and mobile automation test framework for Node.js", - "version": "8.32.1", + "version": "8.29.1", "homepage": "https://webdriver.io", "author": "Christian Bromann ", "license": "MIT", @@ -69,17 +69,17 @@ }, "dependencies": { "@types/node": "^20.1.0", - "@wdio/config": "8.31.1", + "@wdio/config": "8.29.1", "@wdio/logger": "8.28.0", - "@wdio/protocols": "8.32.0", + "@wdio/protocols": "8.24.12", "@wdio/repl": "8.24.12", - "@wdio/types": "8.31.1", - "@wdio/utils": "8.31.1", + "@wdio/types": "8.29.1", + "@wdio/utils": "8.29.1", "archiver": "^6.0.0", "aria-query": "^5.0.0", "css-shorthand-properties": "^1.1.1", "css-value": "^0.0.1", - "devtools-protocol": "^0.0.1260888", + "devtools-protocol": "^0.0.1249869", "grapheme-splitter": "^1.0.2", "import-meta-resolve": "^4.0.0", "is-plain-obj": "^4.1.0", @@ -91,7 +91,7 @@ "resq": "^1.9.1", "rgb2hex": "0.2.5", "serialize-error": "^11.0.1", - "webdriver": "8.32.0" + "webdriver": "8.29.1" }, "peerDependencies": { "devtools": "^8.14.0" diff --git a/packages/webdriverio/src/commands/browser/$$.ts b/packages/webdriverio/src/commands/browser/$$.ts index d781bf032ac..57c1be522f0 100644 --- a/packages/webdriverio/src/commands/browser/$$.ts +++ b/packages/webdriverio/src/commands/browser/$$.ts @@ -24,7 +24,7 @@ import type { Selector } from '../../types.js' * ```js * // print all image sources * for await (const img of $$('img')) { - * console.log(await img.getAttribute('src')) + * console.log(await img.getAttribute('src)) * } * ``` * @@ -58,8 +58,7 @@ export async function $$ ( if (Array.isArray(selector) && isElement(selector[0])) { res = [] for (const el of selector) { - const $el = await findElement.call(this, el) - $el && res.push($el) + res.push(await findElement.call(this, el)) } } diff --git a/packages/webdriverio/src/commands/browser/reloadSession.ts b/packages/webdriverio/src/commands/browser/reloadSession.ts index 47aeabe0871..a158000f675 100644 --- a/packages/webdriverio/src/commands/browser/reloadSession.ts +++ b/packages/webdriverio/src/commands/browser/reloadSession.ts @@ -18,34 +18,20 @@ const log = logger('webdriverio') await browser.reloadSession() console.log(browser.sessionId) // outputs: 9a0d9bf9d4864160aa982c50cf18a573 }) - - it('should reload my session with new capabilities', async () => { - console.log(browser.capabilities.browserName) // outputs: chrome - await browser.reloadSession({ - browserName: 'firefox' - }) - console.log(browser.capabilities.browserName) // outputs: firefox - }) * * * @alias browser.reloadSession - * @param newCapabilities new capabilities to create a session with * @type utility * */ -export async function reloadSession (this: WebdriverIO.Browser, newCapabilities?: WebdriverIO.Capabilities) { +export async function reloadSession (this: WebdriverIO.Browser) { const oldSessionId = (this as WebdriverIO.Browser).sessionId - /** - * if a new browser name is given we can shut down the driver since we start a new one - */ - const shutdownDriver = Boolean(newCapabilities?.browserName) - /** * end current running session, if session already gone suppress exceptions */ try { - await this.deleteSession({ shutdownDriver }) + await this.deleteSession({ shutdownDriver: false }) } catch (err: any) { /** * ignoring all exceptions that could be caused by browser.deleteSession() @@ -61,7 +47,7 @@ export async function reloadSession (this: WebdriverIO.Browser, newCapabilities? } const ProtocolDriver = (await import(this.options.automationProtocol!)).default - await ProtocolDriver.reloadSession(this, newCapabilities) + await ProtocolDriver.reloadSession(this) const options = this.options as Options.Testrunner if (Array.isArray(options.onReload) && options.onReload.length) { diff --git a/packages/webdriverio/src/commands/element/isClickable.ts b/packages/webdriverio/src/commands/element/isClickable.ts index c134872bfb4..6b3a2df3a6b 100644 --- a/packages/webdriverio/src/commands/element/isClickable.ts +++ b/packages/webdriverio/src/commands/element/isClickable.ts @@ -46,11 +46,7 @@ export async function isClickable (this: WebdriverIO.Element) { return false } - /** - * some Appium platforms don't support the `getContext` method, in that case - * we can't determine if we are in a native context or not, so we return undefined - */ - if (this.isMobile && await this.getContext().catch(() => undefined) === 'NATIVE_APP') { + if (this.isMobile && await this.getContext() === 'NATIVE_APP') { throw new Error('Method not supported in mobile native environment. It is unlikely that you need to use this command.') } diff --git a/packages/webdriverio/src/commands/element/isEqual.ts b/packages/webdriverio/src/commands/element/isEqual.ts index bb29ae20468..f6e1511a4bb 100644 --- a/packages/webdriverio/src/commands/element/isEqual.ts +++ b/packages/webdriverio/src/commands/element/isEqual.ts @@ -37,11 +37,7 @@ export async function isEqual ( // mobile native if (browser.isMobile) { - /** - * some Appium platforms don't support the `getContext` method, in that case - * we can't determine if we are in a native context or not, so we return undefined - */ - const context = await browser.getContext().catch(() => undefined) + const context = await browser.getContext() const contextId = typeof context === 'string' ? context : context?.id diff --git a/packages/webdriverio/src/commands/element/moveTo.ts b/packages/webdriverio/src/commands/element/moveTo.ts index e9b64a36f5d..0444c8b4ebc 100644 --- a/packages/webdriverio/src/commands/element/moveTo.ts +++ b/packages/webdriverio/src/commands/element/moveTo.ts @@ -13,8 +13,8 @@ type MoveToOptions = { * is not visible, it will be scrolled into view. * * @param {MoveToOptions=} options moveTo command options - * @param {Number=} options.xOffset X offset to move to, relative to the center of the element. If not specified, the mouse will move to the center of the element. - * @param {Number=} options.yOffset Y offset to move to, relative to the center of the element. If not specified, the mouse will move to the center of the element. + * @param {Number=} options.xOffset X offset to move to, relative to the top-left corner of the element. If not specified, the mouse will move to the middle of the element. + * @param {Number=} options.yOffset Y offset to move to, relative to the top-left corner of the element. If not specified, the mouse will move to the middle of the element. * * @see https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidmoveto * @type protocol diff --git a/packages/webdriverio/src/middlewares.ts b/packages/webdriverio/src/middlewares.ts index 3c31e0e1a8e..9e1245f89c3 100644 --- a/packages/webdriverio/src/middlewares.ts +++ b/packages/webdriverio/src/middlewares.ts @@ -2,7 +2,7 @@ import { ELEMENT_KEY } from 'webdriver' import refetchElement from './utils/refetchElement.js' import implicitWait from './utils/implicitWait.js' -import { getBrowserObject, isStaleElementError } from './utils/index.js' +import { getBrowserObject } from './utils/index.js' /** * This method is an command wrapper for elements that checks if a command is called @@ -37,7 +37,7 @@ export const elementErrorHandler = (fn: Function) => (commandName: string, comma return result } catch (err: any) { - if (err.name === 'stale element reference' || isStaleElementError(err)) { + if (err.name === 'stale element reference') { const element = await refetchElement(this, commandName) this.elementId = element.elementId this.parent = element.parent diff --git a/packages/webdriverio/src/types.ts b/packages/webdriverio/src/types.ts index 99c44d2b374..94f3a93af51 100644 --- a/packages/webdriverio/src/types.ts +++ b/packages/webdriverio/src/types.ts @@ -10,7 +10,6 @@ import type * as ElementCommands from './commands/element.js' import type DevtoolsInterception from './utils/interception/devtools.js' import type { Matches } from './utils/interception/types.js' -export * from './utils/interception/types.js' export type RemoteOptions = Options.WebdriverIO & Omit type $BrowserCommands = typeof BrowserCommands diff --git a/packages/webdriverio/src/utils/index.ts b/packages/webdriverio/src/utils/index.ts index d53934ae8ee..3e37c372605 100644 --- a/packages/webdriverio/src/utils/index.ts +++ b/packages/webdriverio/src/utils/index.ts @@ -67,7 +67,7 @@ export const getPrototype = (scope: 'browser' | 'element') => { * @param {?Object|undefined} res body object from response or null * @return {?string} element id or null if element couldn't be found */ -export const getElementFromResponse = (res?: ElementReference) => { +export const getElementFromResponse = (res: ElementReference) => { /** * a function selector can return null */ @@ -223,17 +223,6 @@ export function isElement (o: Selector){ ) } -export function isStaleElementError (err: Error) { - return ( - // Chrome - err.message.includes('stale element reference') || - // Firefox - err.message.includes('is no longer attached to the DOM') || - // Safari - err.message.includes('Stale element found') - ) -} - /** * logic to find an element */ @@ -303,16 +292,7 @@ export async function findElement( const uid = Math.random().toString().slice(2) window.__wdio_element[uid] = selector as HTMLElement selector = ((id: string) => window.__wdio_element[id]) as any as ElementFunction - let elem = await fetchElementByJSFunction(selector, this, uid).catch((err) => { - /** - * WebDriver throws a stale element reference error if the element is not found - * and therefor can't be serialized - */ - if (isStaleElementError(err)) { - return undefined - } - throw err - }) + let elem = await fetchElementByJSFunction(selector, this, uid) elem = Array.isArray(elem) ? elem[0] : elem return getElementFromResponse(elem) ? elem : notFoundError } diff --git a/packages/webdriverio/tests/commands/element/isClickable.test.ts b/packages/webdriverio/tests/commands/element/isClickable.test.ts index baba8efa503..7552c2022b3 100644 --- a/packages/webdriverio/tests/commands/element/isClickable.test.ts +++ b/packages/webdriverio/tests/commands/element/isClickable.test.ts @@ -50,18 +50,6 @@ describe('isClickable test', () => { await expect(() => elem.isClickable.call(scope)).rejects.toThrow() }) - it('should not throw if getContext fails', async () => { - const scope = { - isDisplayed: vi.fn().mockResolvedValue(true), - execute: vi.fn(), - options: {}, - isMobile: true, - getContext: vi.fn().mockRejectedValue(new Error('command does not exist')) - } - await elem.isClickable.call(scope) - expect(scope.execute).toBeCalledTimes(1) - }) - afterEach(() => { vi.mocked(got).mockClear() }) diff --git a/packages/webdriverio/tests/utils/index.test.ts b/packages/webdriverio/tests/utils/index.test.ts index e5c5441ac33..16d98d721bf 100644 --- a/packages/webdriverio/tests/utils/index.test.ts +++ b/packages/webdriverio/tests/utils/index.test.ts @@ -1,7 +1,7 @@ import { describe, it, expect, vi } from 'vitest' import { ELEMENT_KEY } from 'webdriver' -import { findElement, isStaleElementError } from '../../src/utils/index.js' +import { findElement } from '../../src/utils/index.js' vi.mock('is-plain-obj', () => ({ default: vi.fn().mockReturnValue(false) @@ -14,7 +14,7 @@ describe('findElement', () => { elementId: 'source-elem', execute: vi.fn().mockReturnValue(elemRes) } - expect(await findElement.call(browser, () => 'testme' as any as HTMLElement)).toEqual(elemRes) + expect(await findElement.call(browser, () => 'testme')).toEqual(elemRes) expect(browser.execute).toBeCalledWith(expect.any(String), browser) }) @@ -22,9 +22,9 @@ describe('findElement', () => { const elemRes = { [ELEMENT_KEY]: 'element-0' } const browser: any = { elementId: 'source-elem', - execute: vi.fn().mockResolvedValue(elemRes) + execute: vi.fn().mockReturnValue(elemRes) } - const domNode = { nodeType: 1, nodeName: 'DivElement' } as HTMLElement + const domNode = { nodeType: 1, nodeName: 'DivElement' } // @ts-expect-error globalThis.window = {} expect(await findElement.call(browser, domNode)).toEqual(elemRes) @@ -34,33 +34,4 @@ describe('findElement', () => { expect.any(String) ) }) - - it('should not find element using JS function with referenceId', async () => { - const browser: any = { - elementId: 'source-elem', - execute: vi.fn().mockRejectedValue(new Error('stale element reference: element is not attached to the page document')) - } - const domNode = { nodeType: 1, nodeName: 'DivElement' } as HTMLElement - // @ts-expect-error - globalThis.window = {} - expect(await findElement.call(browser, domNode)).toEqual( - expect.objectContaining({ message: 'DOM Node couldn\'t be found anymore' }) - ) - expect(browser.execute).toBeCalledWith( - expect.any(String), - browser, - expect.any(String) - ) - }) -}) - -it('isStaleElementError', () => { - const staleElementChromeError = new Error('stale element reference: element is not attached to the page document') - expect(isStaleElementError(staleElementChromeError)).toBe(true) - const staleElementFirefoxError = new Error('The element is no longer attached to the DOM') - expect(isStaleElementError(staleElementFirefoxError)).toBe(true) - const staleElementSafariError = new Error('A node reference could not be resolved: Stale element found when trying to create the node handle') - expect(isStaleElementError(staleElementSafariError)).toBe(true) - const otherError = new Error('something else') - expect(isStaleElementError(otherError)).toBe(false) }) diff --git a/scripts/bidi/downloadSpec.ts b/scripts/bidi/downloadSpec.ts index e7bfa5b25a9..36dccaf9334 100644 --- a/scripts/bidi/downloadSpec.ts +++ b/scripts/bidi/downloadSpec.ts @@ -33,14 +33,7 @@ export default async function downloadSpec (page = 1) { repo, page, per_page: 100 - }).catch((error) => { - console.log(`Failed to download spec file: ${error.message}`) }) - - if (!artifacts || artifacts.data.artifacts.length === 0) { - return false - } - // eslint-disable-next-line camelcase const cddlBuilds = artifacts.data.artifacts.filter(({ name, workflow_run }) => ( name === 'cddl' && diff --git a/scripts/docs-generation/3rdPartyDocs.ts b/scripts/docs-generation/3rdPartyDocs.ts index 674d2848ea2..a4ba35deac0 100644 --- a/scripts/docs-generation/3rdPartyDocs.ts +++ b/scripts/docs-generation/3rdPartyDocs.ts @@ -1,6 +1,7 @@ import fs from 'node:fs/promises' import url from 'node:url' import path from 'node:path' +import urljoin from 'url-join' import { downloadFromGitHub } from '../utils/index.js' import { buildPreface } from '../utils/helpers.js' @@ -155,7 +156,7 @@ function normalizeDoc(readme: string, githubUrl: string, branch: string, preface const stringInParentheses = urlMatcher[2] const url = ( stringInParentheses.startsWith('http') || stringInParentheses.startsWith('#') ) ? stringInParentheses - : `${githubUrl}/blob/${branch}/${stringInParentheses}` + : urljoin(githubUrl, 'blob', branch, stringInParentheses) readmeArr[idx] = readmeArr[idx].replace(`](${stringInParentheses})`, `](${url})`) } }) diff --git a/scripts/expense.ts b/scripts/expense.ts new file mode 100644 index 00000000000..112ac484edc --- /dev/null +++ b/scripts/expense.ts @@ -0,0 +1,131 @@ +#!/usr/bin/env node + +import crypto from 'node:crypto' +import { Resend } from 'resend' +import { Octokit } from '@octokit/rest' + +import Email from './templates/expenseMail.js' + +const owner = 'webdriverio' +const repo = 'webdriverio' +const from = 'WebdriverIO Team ' +const bcc = 'expense@webdriver.io' + +/** + * create a authentication key for contributor + */ +const randomString = crypto.randomUUID() +const secretKey = crypto.createHash('sha256').update(randomString).digest('hex') + +/** + * check if `GH_TOKEN` environment variable is set to interact with GitHub API + */ +if (!process.env.GH_TOKEN) { + throw new Error( + 'Please export a "GH_TOKEN" access token to generate the changelog.\n' + + 'See also https://github.com/webdriverio/webdriverio/blob/main/CONTRIBUTING.md#release-new-version' + ) +} + +/** + * make sure `AMOUNT` and `PR_NUMBER` environment variables are set + */ +if (!process.env.AMOUNT) { + throw new Error('Please export an "AMOUNT" environment variable.') +} +if (!process.env.PR_NUMBER) { + throw new Error('Please export a "PR_NUMBER" environment variable.') +} + +/** + * ensure that Resend API key is given + */ +if (!process.env.RESEND_API_KEY) { + throw new Error('Please export a "RESEND_API_KEY" access token into the environment.') +} + +const prNumber = parseInt(process.env.PR_NUMBER, 10) +const expenseAmount = parseInt(process.env.AMOUNT, 10) +const prURL = `https://github.com/${owner}/${repo}/pull/${prNumber}` + +const api = new Octokit({ auth: process.env.GH_TOKEN }) +const commits = await api.pulls.listCommits({ + owner, + repo, + pull_number: prNumber +}) +const pr = await api.pulls.get({ + owner: 'webdriverio', + repo: 'webdriverio', + pull_number: prNumber +}) + +if (!pr.data.merge_commit_sha) { + throw new Error('Pull request has not been merged yet!') +} + +if (pr.data.labels.find((label) => label.name.includes('Expensable'))) { + throw new Error('Pull request has already been expensed!') +} + +/** + * currently we only support one author per PR, so the person + * who makes the first commit receives the funds + */ +const prAuthors = new Set(commits.data.map((commit) => commit.commit.author?.email).filter(Boolean)) +const prAuthorEmail = prAuthors.values().next().value + +console.log(`Send expense email to ${prAuthorEmail} for PR #${prNumber}`) +console.log(`Amount to be expensed: $${expenseAmount}`) + +const resend = new Resend(process.env.RESEND_API_KEY) +const subject = 'Thank you for contributing to WebdriverIO!' +const data = await resend.emails.send({ + from, + to: prAuthorEmail, + bcc, + subject, + text: subject, + react: Email({ + username: pr.data.user.login, + prNumber, + prURL, + expenseAmount, + secretKey + }) +}) + +if (data.error) { + throw new Error(`Could not send email: ${data.error}`) +} + +/** + * Add a comment to the PR that an expense email has been sent out + */ +console.log(`Adding comment to PR #${prNumber}, letting user know...`) +await api.issues.createComment({ + owner, + repo, + issue_number: prNumber, + body: `Hey __${pr.data.user.login}__ 👋 + +Thank you for your contribution to WebdriverIO! Your pull request has been marked as an "Expensable" contribution. +We've sent you an email with further instructions on how to claim your expenses from our development fund. Please +make sure to check your spam folder as well. If you have any questions, feel free to reach out to us at __expense@webdriver.io__ +or in the contributing channel on [Discord](https://discord.webdriver.io). + +We are looking forward to more contributions from you in the future 🙌 + +Have a nice day, +The WebdriverIO Team 🤖` +}) + +console.log(`Adding expense label to PR #${prNumber}...`) +await api.issues.addLabels({ + owner, + repo, + issue_number: prNumber, + labels: [`Expensable $${expenseAmount} 💸`] +}) + +console.log('All good 🎉 feels good to give back!') diff --git a/scripts/templates/expenseMail.tsx b/scripts/templates/expenseMail.tsx new file mode 100644 index 00000000000..b4482e4b49d --- /dev/null +++ b/scripts/templates/expenseMail.tsx @@ -0,0 +1,125 @@ +import { + Body, + Button, + Container, + Head, + Heading, + Hr, + Html, + Img, + Link, + Preview, + Section, + Text, + CodeInline, + CodeBlock, + a11yDark +} from '@react-email/components' +import { Tailwind } from '@react-email/tailwind' +import * as React from 'react' + +interface ExpenseEmailProps { + username: string + prNumber: number + prURL: string + expenseAmount: number + secretKey: string +} + +export const ExpenseEmail = ({ + username, + prNumber, + prURL, + expenseAmount, + secretKey +}: ExpenseEmailProps) => { + const previewText = `Thank you for your work on PR #${prNumber}. You are eligible to expense your work.` + const date = new Date() + const formattedDate = ( + `${date.getMonth() + 1}`.padStart(2, '0') + '/' + + `${date.getDate()}`.padStart(2, '0') + '/' + + date.getFullYear() + ) + return ( + + + {previewText} + + + +
+ WebdriverIO +
+ + Thank you for contributing to WebdriverIO! + + + Hello {username}, + + + The WebdriverIO team would like to thank you deeply for your contribution on pull request + #{prNumber} + . + This project thrives on the invaluable involvement of our community and we would like to + give back to everyone who has taken time to improve the project. + + + The reviewer of your pull request has granted you an expense of ${expenseAmount} 💸 + + + Submit your expense via OpenCollective by clicking the button below. Create an account, + select Invoice, enter your address, select a payment method, and click Next. + Fill in expense details on the next page, including your pull request URL in the Expense + title and the pull request title in the Expense description. Set the + date to {formattedDate} and the amount to ${expenseAmount}. Finally, paste + the provided key into the notes section on the last page. + + + + With this key we ensure that the author of the pull request (you) can authenticate this expense, so please + don't share it with anyone. Lastly, make sure all your data is correct and click Submit expense. + Once your expense has been approved, you will receive the money within 1-2 weeks. + +
+ +
+
+ + Your are eligible to expense your work within the next 30 days. If you + have any questions, please reply to this email. You can find more information + about our expense policy in our{' '} + + governance documentation + . + +
+ +
+ + ) +} + +const container = { + border: '1px solid #eee', + borderRadius: '5px', + boxShadow: '0 5px 10px rgba(20,50,70,.2)', + marginTop: '20px', +} + +export default ExpenseEmail diff --git a/tests/smoke.runner.js b/tests/smoke.runner.js index b5e58ccc6f4..7a81aee7716 100644 --- a/tests/smoke.runner.js +++ b/tests/smoke.runner.js @@ -740,90 +740,6 @@ const runSpecsWithFlagNoArg = async () => { assert.strictEqual(passed, 3) assert.strictEqual(skippedSpecs, 0) } - -const cliExcludeParamValidationAllExcludedByKeyword = async () => { - const { passed, skippedSpecs, failed } = await launch( - 'cliExcludeParamValidationAllExcluded', - path.resolve(__dirname, 'tests-cli-exclude-arg/wdio.conf.js'), - { - exclude: ['general'] - } - ).catch((err) => err) // expected error - - assert.strictEqual(passed, undefined) - assert.strictEqual(skippedSpecs, undefined) - assert.strictEqual(failed, undefined) -} - -const cliExcludeParamValidationSomeExcludedByKeyword = async () => { - const { passed, skippedSpecs, failed } = await launch( - 'cliExcludeParamValidationAllExcluded', - path.resolve(__dirname, 'tests-cli-exclude-arg/wdio.conf.js'), - { - exclude: ['general2'] - } - ) - - assert.strictEqual(passed, 2) - assert.strictEqual(skippedSpecs, 0) - assert.strictEqual(failed, 0) -} - -const cliExcludeParamValidationSomeExcludedByPath = async () => { - const { passed, skippedSpecs, failed } = await launch( - 'cliExcludeParamValidationAllExcluded', - path.resolve(__dirname, 'tests-cli-exclude-arg/wdio.conf.js'), - { - exclude: ['./general.test.js'] - } - ) - - assert.strictEqual(passed, 2) - assert.strictEqual(skippedSpecs, 0) - assert.strictEqual(failed, 0) -} - -const cliExcludeParamValidationExcludeNonExistentByKeyword = async () => { - const { passed, skippedSpecs, failed } = await launch( - 'cliExcludeParamValidationAllExcluded', - path.resolve(__dirname, 'tests-cli-exclude-arg/wdio.conf.js'), - { - exclude: ['newgeneral'] - } - ) - - assert.strictEqual(passed, 3) - assert.strictEqual(skippedSpecs, 0) - assert.strictEqual(failed, 0) -} - -const cliExcludeParamValidationExcludeFromConfigByKeyword = async () => { - const { passed, skippedSpecs, failed } = await launch( - 'cliExcludeParamValidationAllExcluded', - path.resolve(__dirname, 'tests-cli-exclude-arg/wdio.with-exclude-prop.conf.js') - ) - - assert.strictEqual(passed, 2) - assert.strictEqual(skippedSpecs, 0) - assert.strictEqual(failed, 0) -} - -const cliExcludeParamValidationExcludeMultipleSpecsByPath = async () => { - const { passed, skippedSpecs, failed } = await launch( - 'cliExcludeParamValidationAllExcluded', - path.resolve(__dirname, 'tests-cli-exclude-arg/wdio.conf.js'), - { - exclude: [ - './general.test.js', - './general2.test.js' - ] - } - ) - - assert.strictEqual(passed, 1) - assert.strictEqual(skippedSpecs, 0) - assert.strictEqual(failed, 0) -} // *** END - tests for CLI --spec *** // ************************* @@ -942,13 +858,7 @@ const jasmineAfterHookArgsValidation = async () => { runSpecsWithFlagDirectPath, runSpecsWithFlagNoArg, jasmineHooksTestrunner, - jasmineAfterHookArgsValidation, - cliExcludeParamValidationAllExcludedByKeyword, - cliExcludeParamValidationSomeExcludedByKeyword, - cliExcludeParamValidationSomeExcludedByPath, - cliExcludeParamValidationExcludeNonExistentByKeyword, - cliExcludeParamValidationExcludeFromConfigByKeyword, - cliExcludeParamValidationExcludeMultipleSpecsByPath + jasmineAfterHookArgsValidation ] console.log('\nRunning smoke tests...\n') diff --git a/tests/tests-cli-exclude-arg/general.test.js b/tests/tests-cli-exclude-arg/general.test.js deleted file mode 100644 index c0e563a0931..00000000000 --- a/tests/tests-cli-exclude-arg/general.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import { browser, expect } from '@wdio/globals' - -describe('webdriver.io page', () => { - it('should have the right title', async () => { - await browser.url('https://webdriver.io') - await expect(browser).toHaveTitle('WebdriverIO · Next-gen browser and mobile automation test framework for Node.js | WebdriverIO') - }) -}) diff --git a/tests/tests-cli-exclude-arg/general2.test.js b/tests/tests-cli-exclude-arg/general2.test.js deleted file mode 100644 index c0e563a0931..00000000000 --- a/tests/tests-cli-exclude-arg/general2.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import { browser, expect } from '@wdio/globals' - -describe('webdriver.io page', () => { - it('should have the right title', async () => { - await browser.url('https://webdriver.io') - await expect(browser).toHaveTitle('WebdriverIO · Next-gen browser and mobile automation test framework for Node.js | WebdriverIO') - }) -}) diff --git a/tests/tests-cli-exclude-arg/general3.test.js b/tests/tests-cli-exclude-arg/general3.test.js deleted file mode 100644 index c0e563a0931..00000000000 --- a/tests/tests-cli-exclude-arg/general3.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import { browser, expect } from '@wdio/globals' - -describe('webdriver.io page', () => { - it('should have the right title', async () => { - await browser.url('https://webdriver.io') - await expect(browser).toHaveTitle('WebdriverIO · Next-gen browser and mobile automation test framework for Node.js | WebdriverIO') - }) -}) diff --git a/tests/tests-cli-exclude-arg/wdio.conf.js b/tests/tests-cli-exclude-arg/wdio.conf.js deleted file mode 100644 index d9aaf6d7f10..00000000000 --- a/tests/tests-cli-exclude-arg/wdio.conf.js +++ /dev/null @@ -1,50 +0,0 @@ -import url from 'node:url' - -const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) - -export const config = { - /** - * specify test files - */ - specs: [ - './general.test.js', - './general2.test.js', - './general3.test.js', - ], - - /** - * capabilities - */ - capabilities: [{ - browserName: 'chrome', - 'goog:chromeOptions': { - args: ['headless', 'disable-gpu'] - } - }], - - /** - * test configurations - */ - logLevel: 'trace', - framework: 'mocha', - outputDir: __dirname, - - reporters: ['spec', 'dot', 'junit'], - - mochaOpts: { - ui: 'bdd', - timeout: 15000 - }, - - /** - * hooks - */ - onPrepare: function() { - // eslint-disable-next-line - console.log('let\'s go') - }, - onComplete: function() { - // eslint-disable-next-line - console.log('that\'s it') - } -} diff --git a/tests/tests-cli-exclude-arg/wdio.with-exclude-prop.conf.js b/tests/tests-cli-exclude-arg/wdio.with-exclude-prop.conf.js deleted file mode 100644 index 274911e9655..00000000000 --- a/tests/tests-cli-exclude-arg/wdio.with-exclude-prop.conf.js +++ /dev/null @@ -1,54 +0,0 @@ -import url from 'node:url' - -const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) - -export const config = { - /** - * specify test files - */ - specs: [ - './general.test.js', - './general2.test.js', - './general3.test.js', - ], - - exclude: [ - 'general2', - ], - - /** - * capabilities - */ - capabilities: [{ - browserName: 'chrome', - 'goog:chromeOptions': { - args: ['headless', 'disable-gpu'] - } - }], - - /** - * test configurations - */ - logLevel: 'trace', - framework: 'mocha', - outputDir: __dirname, - - reporters: ['spec', 'dot', 'junit'], - - mochaOpts: { - ui: 'bdd', - timeout: 15000 - }, - - /** - * hooks - */ - onPrepare: function() { - // eslint-disable-next-line - console.log('let\'s go') - }, - onComplete: function() { - // eslint-disable-next-line - console.log('that\'s it') - } -} diff --git a/tests/typings/webdriverio/capabilityOptions.ts b/tests/typings/webdriverio/capabilityOptions.ts deleted file mode 100644 index 2bb31184fc6..00000000000 --- a/tests/typings/webdriverio/capabilityOptions.ts +++ /dev/null @@ -1,20 +0,0 @@ -// including per-browser/-capability options -interface myCapabilities extends WebdriverIO.Capabilities { -} -interface myConfig extends WebdriverIO.Config { - capabilities: myCapabilities[] -} - -const config: myConfig = { - capabilities: [ - { - browserName: 'chrome', - maxInstances: 3 ,// <-- assert, but deprecated - 'wdio:maxInstances': 3, // <-- assert - specs: ['foo'], // <-- assert, but deprecated - 'wdio:specs': ['foo'], // <-- assert - exclude: ['bar'], // <-- assert, but deprecated - 'wdio:exclude': ['bar'] // <-- assert - } - ] -} \ No newline at end of file diff --git a/website/_sidebars.json b/website/_sidebars.json index 78e1efb2d7f..f551cccf78c 100644 --- a/website/_sidebars.json +++ b/website/_sidebars.json @@ -42,17 +42,7 @@ "type": "category", "label": "Guides", "items": [ - { - "type": "category", - "label": "Best Practices", - "link": { - "type": "doc", - "id": "bestpractices" - }, - "items": [ - "best-practices/file-download" - ] - }, + "bestpractices", "selectors", "timeouts", "emulation", diff --git a/website/blog/2024-01-29-browserstack-partnership.md b/website/blog/2024-01-29-browserstack-partnership.md index c6a0654584d..891787bd134 100644 --- a/website/blog/2024-01-29-browserstack-partnership.md +++ b/website/blog/2024-01-29-browserstack-partnership.md @@ -11,7 +11,7 @@ We are thrilled to share some fantastic news: WebdriverIO and [BrowserStack](htt

diff --git a/website/blog/2024-02-05-saucelabs-partnership.md b/website/blog/2024-02-05-saucelabs-partnership.md deleted file mode 100644 index 5bfcce66fcf..00000000000 --- a/website/blog/2024-02-05-saucelabs-partnership.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "Sauce Labs joins WebdriverIOs Partnership Program as Premium Sponsor" -author: Christian Bromann -authorURL: http://twitter.com/bromann -authorImageURL: https://s.gravatar.com/avatar/d98b16d7c93d15865f34a225dd4b1254?s=80 ---- - -We are thrilled to announce an exciting development in our journey towards innovation in software testing and quality assurance. [Sauce Labs](https://saucelabs.com/), a pioneering force in the continuous testing arena, is joining forces with us through our Partnership Program. This collaboration marks a significant milestone in our quest to expand our development fund, enabling us to enhance our work on major releases and introduce groundbreaking features yet to be unveiled. - -

- -

- -Sauce Labs has earned a reputation as a leader in providing solutions that empower organizations worldwide to achieve excellence in software delivery. Their platform, trusted by thousands of development teams, ensures that digital products function seamlessly across every browser, operating system, and device. This commitment to quality guarantees a flawless user experience, showcasing Sauce Labs' dedication to software excellence. - -The company has been technically sponsoring the project almost since day one. My early work on WebdriverIO has opened an opportunity to work at Sauce Labs and during my 7-year tenure there, I was allowed and encouraged to work on this framework. Even some of Sauce Labs products have been heavily inspired by the work in WebdriverIO, e.g. their [performance testing](https://www.youtube.com/watch?v=rP-j9uPPbt8) and [extended debugging](https://www.youtube.com/watch?v=pkWv-JIf4eo) capabilities. - -It makes me personally very happy to see Sauce Labs staying invested in the Open-Source testing ecosystem. Being the originators of [Selenium](https://www.selenium.dev/) and creators of [Appium](https://appium.io) Sauce Labs remains a strong supporter of open-governed tools like WebdriverIO. - -Thank you 🙏 diff --git a/website/blog/2024-02-15-new-contributor-stipend-program.md b/website/blog/2024-02-15-new-contributor-stipend-program.md deleted file mode 100644 index 6a8ac691995..00000000000 --- a/website/blog/2024-02-15-new-contributor-stipend-program.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: "A New Contributor Stipend Program for WebdriverIO" -author: Christian Bromann -authorURL: http://twitter.com/bromann -authorImageURL: https://s.gravatar.com/avatar/d98b16d7c93d15865f34a225dd4b1254?s=80 ---- - -The WebdriverIO community is on the verge of an exciting new era, supported by strategic partnerships with [BrowserStack](https://www.browserstack.com/) and [Sauce Labs](https://saucelabs.com/), along with continuous support from other sponsors like [LambdaTest](https://www.lambdatest.com/). This collective endeavor signifies a crucial milestone for the WebdriverIO project, as we utilize these additional resources to foster the growth and enrichment of our ecosystem. - -## Towards a Sustainable Open Source Model - -WebdriverIO's story began with its inception into the JS Foundation in 2017, which later evolved into the OpenJS Foundation. Since then, it has thrived as an open-governed, community-driven endeavor, witnessing continuous growth in NPM downloads, the introduction of innovative plugins and reporters, and the rollout of new functionalities. This expansion is a testament to the hard work and dedication of the global testing community, including project users and contributors from leading testing cloud providers. - -WebdriverIO's core principle is its dedication to open governance, an aspect that has attracted the trust and confidence of its users, especially those in the enterprise world. The project's growth has been organic, independent of Venture Capital, corporate objectives and sales requirements, guaranteeing that its development aligns with the true needs of our user community and all features remain free of charge. - -With the project's continuous expansion, marked by increasing NPM downloads, new functionalities, plugins, and reporters, the importance of nurturing a healthy and sustainable growth path has never been more critical. Our recent alliances with top cloud services for automated testing demonstrate our dedication to responsibly managing these resources, with the aim to widen our network of contributors and enrich the entire ecosystem. - -## Introducing the Stipend Program - -Central to our ethos is the belief that financial support of the WebdriverIO ecosystem is a worthy endeavor. Whether it's the occasional contributions from casual participants or the continuous dedication of our core team members, every contribution is a building block of our project's success. Currently, the project benefits from a monthly donation inflow of `$3,879`, sourced through various channels like [Tidelift](https://tidelift.com/subscription/pkg/npm-webdriverio?utm_source=npm-webdriverio&utm_medium=github_sponsor_button), [Thanks.dev](https://thanks.dev), [GitHub Sponsors](https://github.com/sponsors/webdriverio), and our [Open Collective](https://opencollective.com/webdriverio). These funds have empowered the Technical Steering Committee to finalize new [governance policies](https://github.com/webdriverio/webdriverio/blob/main/GOVERNANCE.md#allocation-of-funds), outlining our strategic approach to fund allocation. - -Our monthly budget is allocated across four key areas: - -- Project Development receives the largest share, with 60% of the funds dedicated to fostering growth and innovation. -- Travel and Event Expenses account for 20%, supporting our participation in and hosting of industry events and meetups. -- Support Systems are allocated 10% of the budget, ensuring our infrastructure and community support mechanisms remain robust. -- Lastly, Dependencies, crucial external projects and tools we rely on, also receive 10% of our financial resources. - -### Dedication to Project Development - -Our financial strategy gives top priority to project development, dedicating 60% of our resources to it. This funding aims to draw contributions from a wide range of people, increasing our base of dedicated contributors. By dividing the funds, allocating 35% to individuals not directly involved with the project and 65% to our project contributors and the Technical Steering Committee (TSC) members, we seek to foster a strong sense of community and shared ownership. This approach is vital for ensuring the long-term prosperity and stability of our project. - -As part of this strategy, we have developed an automated expense process using a [GitHub Action](https://github.com/webdriverio/expense-action) to help run this program. You can read more about how this process works on my [personal blog](https://bromann.dev/post/automated-contributor-expense-process/). - -### Supporting Community Engagement and Events - -Recognizing the importance of community engagement, especially in the aftermath of Covid-19, we are allocating funds towards travel and event expenses. This decision emphasizes our commitment to creating user meetups and supporting the broader community in hosting WebdriverIO-related events. It reflects our desire to not only maintain but also to strengthen the community ties that form the backbone of our project. - -### Enhancing Support Systems - -A small fraction of our monthly budget is allocated to various essentials that support our project's community growth and upkeep. Our intention is to invest in translating our documentation and financially support those who contribute to this effort. Additionally, we aim to cover ongoing costs for infrastructure needed to host project-related materials, as well as provide our maintainers with the software tools necessary to enhance their contributions to the project. - -### Acknowledging Dependencies - -Finally, we're committed to giving back to the projects and communities that are crucial to WebdriverIO's success. We believe it's vital for open-source projects benefiting from generous donations to support their key dependencies. Thanks to [Thanks.dev](https://thanks.dev), we can identify and financially support our most critical dependencies based on their significance to our project and the funds we allocate monthly for this purpose. Noteworthy dependencies include: - -- Individual open-source champions like [Sindre Sorhus](https://opencollective.com/sindresorhus) and [isaacs](https://github.com/sponsors/isaacs), whose contributions to various dependencies are invaluable. -- The Vite ecosystem: we use [Vitest](https://vitest.dev/) across almost all our projects, and we couldn't provide such powerful component testing capabilities without [Vite](https://vitejs.dev/) under the hood -- The [Eslint](https://opencollective.com/eslint) project and its related [ecosystem projects](https://opencollective.com/typescript-eslint) are fundamental to maintaining a high code quality of our projects and have significantly [inspired](https://eslint.org/blog/2022/02/paying-contributors-sponsoring-projects/) our contributor stipend program. - -## Looking Ahead - -As we embrace this new chapter, we're excited about the prospects of accelerating growth through strategic investments in our community and project. The early feedback from our initiatives has been [overwhelmingly positive](https://twitter.com/vobu/status/1755560452015157273), and we are committed to refining our processes for even greater efficiency and transparency. - -

- Twitter Excitement -

- -We extend our heartfelt gratitude to our sponsors for their invaluable support, and we warmly welcome [further sponsorship](https://opencollective.com/webdriverio) to join us in this journey. Together, we are setting the stage for an even brighter future for WebdriverIO and its thriving ecosystem. diff --git a/website/docs/Capabilities.md b/website/docs/Capabilities.md index 1f5873342d4..ab3f246d075 100644 --- a/website/docs/Capabilities.md +++ b/website/docs/Capabilities.md @@ -38,40 +38,6 @@ While the amount of fixed defined capabilities is very low, everyone can provide WebdriverIO manages installing and running browser driver for you. WebdriverIO uses a custom capability that allows you to pass in parameters to the driver. -#### `wdio:chromedriverOptions` - -Specific options passed into Chromedriver when starting it. - -#### `wdio:geckodriverOptions` - -Specific options passed into Geckodriver when starting it. - -#### `wdio:edgedriverOptions` - -Specific options passed into Edgedriver when starting it. - -#### `wdio:safaridriverOptions` - -Specific options passed into Safari when starting it. - -#### `wdio:maxInstances` - -Maximum number of total parallel running workers for the specific browser/capability. Takes precedence over [maxInstances](#configuration#maxInstances) and [maxInstancesPerCapability](configuration/#maxinstancespercapability). - -Type: `number` - -#### `wdio:specs` - -Define specs for test execution for that browser/capability. Same as the [regular `specs` configuration option](configuration#specs), but specific to the browser/capability. Takes precedence over `specs`. - -Type: `(String | String[])[]` - -#### `wdio:exclude` - -Exclude specs from test execution for that browser/capability. Same as the [regular `exclude` configuration option](configuration#exclude), but specific to the browser/capability. Takes precedence over `exclude`. - -Type: `String[]` - #### Common Driver Options While all driver offer different parameters for configuration, there are some common ones that WebdriverIO understand and uses for setting up your driver or browser: diff --git a/website/docs/Configuration.md b/website/docs/Configuration.md index 1ef910a0b08..183e28aca9e 100644 --- a/website/docs/Configuration.md +++ b/website/docs/Configuration.md @@ -366,6 +366,7 @@ Options: `mocha` | `jasmine` ### mochaOpts, jasmineOpts and cucumberOpts + Specific framework-related options. See the framework adapter documentation on which options are available. Read more on this in [Frameworks](frameworks). Type: `Object`
@@ -427,26 +428,6 @@ A list of glob supporting string patterns that tell the testrunner to have it ad Type: `String[]`
Default: `[]` -### updateSnapshots - -Set to true if you want to update your snapshots. Ideally used as part of a CLI parameter, e.g. `wdio run wdio.conf.js --s`. - -Type: `'new' | 'all' | 'none'`
-Default: `none` if not provided and tests run in CI, `new` if not provided, otherwise what's been provided - -### resolveSnapshotPath - -Overrides default snapshot path. For example, to store snapshots next to test files. - -```ts title="wdio.conf.ts" -export const config: WebdriverIO.Config = { - resolveSnapshotPath: (testPath, snapExtension) => testPath + snapExtension, -} -``` - -Type: `(testPath: string, snapExtension: string) => string`
-Default: stores snapshot files in `__snapshots__` directory next to test file - ### autoCompileOpts Compiler options when using WebdriverIO with TypeScript or Babel. diff --git a/website/docs/Frameworks.md b/website/docs/Frameworks.md index 9161f30370d..39439f89f9a 100644 --- a/website/docs/Frameworks.md +++ b/website/docs/Frameworks.md @@ -307,7 +307,7 @@ Abort the run on first failure. Type: `boolean`
Default: `false` -#### name +#### names Only execute the scenarios with name matching the expression (repeatable). Type: `RegExp[]`
diff --git a/website/docs/OrganizingTestSuites.md b/website/docs/OrganizingTestSuites.md index 2976b8a36d7..52ea0f246b7 100644 --- a/website/docs/OrganizingTestSuites.md +++ b/website/docs/OrganizingTestSuites.md @@ -207,14 +207,6 @@ Or, exclude a spec file when filtering using a suite: wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog -``` - When the `--exclude` option is provided, it will override any patterns defined by the config or capability level's `exclude` parameter. ## Run Suites and Test Specs diff --git a/website/docs/Sponsor.md b/website/docs/Sponsor.md index 9ca4010c172..d94bdfc107c 100644 --- a/website/docs/Sponsor.md +++ b/website/docs/Sponsor.md @@ -55,15 +55,6 @@ You can also try to convince your employer to sponsor WebdriverIO as a business. link="https://www.browserstack.com/automation-webdriverio" /> - - ### 🥇 Gold Become a [Gold Sponsor](https://opencollective.com/webdriverio/contribute/gold-sponsor-26921/checkout?interval=month&amount=500&contributeAs=me). @@ -75,19 +66,8 @@ Become a [Gold Sponsor](https://opencollective.com/webdriverio/contribute/gold-s darkImageSrc="/img/sponsors/lambdatest_white.svg" alt="Lambdatest" link="https://www.lambdatest.com/" - width="250" /> -Become a [Silver Sponsor](https://opencollective.com/webdriverio/contribute/silver-sponsor-69223/checkout?interval=month&amount=250&contributeAs=me). - ### 🥉 Bronze - - Become a [Bronze Sponsor](https://opencollective.com/webdriverio/contribute/bronze-sponsor-69224/checkout?interval=month&amount=100&contributeAs=me). diff --git a/website/docs/VisualTesting.md b/website/docs/VisualTesting.md index 9c3b5d3dc57..2ba67817d3f 100644 --- a/website/docs/VisualTesting.md +++ b/website/docs/VisualTesting.md @@ -8,14 +8,7 @@ import TabItem from '@theme/TabItem'; ## What can it do? -WebdriverIO provides image comparisons on screens, elements or a full-page for - -- 🖥️ Desktop browsers (Chrome / Firefox / Safari / Microsoft Edge) -- 📱 Mobile / Tablet browsers (Chrome on Android emulators / Safari on iOS Simulators / Simulators / real devices) via Appium -- 📱 Native Apps (Android emulators / iOS Simulators / real devices) via Appium (🌟 __NEW__ 🌟) -- 📳 Hybrid apps via Appium - -through the [`@wdio/visual-service`](https://www.npmjs.com/package/@wdio/visual-service) which is a lightweight WebdriverIO service. +WebdriverIO provides image comparisons on screens, elements or a full-page for browsers, mobile browsers as well as hybrid apps through the [`@wdio/visual-service`](https://www.npmjs.com/package/@wdio/visual-service) which is a lightweight WebdriverIO service. This allows you to: @@ -24,15 +17,19 @@ This allows you to: - __block out custom regions__ and even __automatically exclude__ a status and or toolbars (mobile only) during a comparison - increase the element dimensions screenshots - use __different comparison methods__ and a set of __additional matchers__ for better readable tests -- verify how your website will __support tabbing with your keyboard)__, see also [Tabbing through a website](#tabbing-through-a-website) +- You can now verify how your website will __support tabbing with your keyboard)__, see also [Tabbing through a website](#tabbing-through-a-website) - and much more, see the [service](./visual-testing/service-options) and [method](./visual-testing/method-options) options The service is a lightweight module to retrieve the needed data and screenshots for all browsers/devices. The comparison power comes from [ResembleJS](https://github.com/Huddle/Resemble.js). If you want to compare images online you can check the [online tool](http://rsmbl.github.io/Resemble.js/). -:::info NOTE For Native/Hybrid Apps -The methods `saveScreen`, `saveElement`, `checkScreen`, `checkElement` and the matchers `toMatchScreenSnapshot` and `toMatchElementSnapshot` can be used for Native Apps/Context. +It can be used for: + +- 🖥️ Desktop browsers (Chrome / Firefox / Safari / Microsoft Edge) +- 📱 Mobile / Tablet browsers (Chrome / Safari on emulators / real devices) via Appium +- 📳 Hybrid apps via Appium -Please use the property `isHybridApp:true` in your service settings when you want to use it for Hybrid Apps. +:::info NOTE For Hybrid Apps +Please use the property `isHybridApp:true` in your service settings ::: ## Installation @@ -87,7 +84,7 @@ export const config = { } ``` -More service options can be found [here](/docs/visual-testing/service-options). Once set up in your WebdriverIO configuration, you can go ahead and add visual assertions to [your tests](/docs/visual-testing/writing-tests). +More service options can be found [here](/docs/visual-testing/service-options). Once set-up in your WebdriverIO configuration you can go ahead and add visual assertions to [your tests](/docs/visual-testing/writing-tests). ### WebdriverIO MultiRemote @@ -162,7 +159,7 @@ await browser.deleteSession() ### Tabbing through a website You can check if a website is accessible by using the keyboard TAB-key. Testing this part of accessibility has always been a time-consuming (manual) job and pretty hard to do through automation. -With the methods `saveTabbablePage` and `checkTabbablePage`, you can now draw lines and dots on your website to verify the tabbing order. +With the methods `saveTabbablePage` and `checkTabbablePage` you can now draw lines and dots on your website to verify the tabbing order. Be aware of the fact that this is only useful for desktop browsers and **NOT**** for mobile devices. All desktop browsers support this feature. @@ -196,7 +193,7 @@ Both methods use the same options as the [`saveFullPageScreen`](https://github.c This is an example of how the tabbing works on our [guinea pig website](http://guinea-pig.webdriver.io/image-compare.html): -![WDIO tabbing example](/img/visual/tabbable-chrome-latest-1366x768.png) +![WDIO tabbing example](./visual-testing/img/tabbable-chrome-latest-1366x768.png) ## Typescript support @@ -216,7 +213,7 @@ Aside from the general [project requirements](/docs/gettingstarted#system-requir By default, binaries for macOS, Linux and Windows will be downloaded during your project's `npm install`. If you don't have a supported OS or processor architecture, the module will be compiled on your system. This requires several dependencies, including Cairo and Pango. -For detailed installation information, see the [node-canvas wiki](https://github.com/Automattic/node-canvas/wiki/_pages). One-line installation instructions for common OSes are below. Note that `libgif/giflib`, `librsvg` and `libjpeg` are optional and only required if you need GIF, SVG and JPEG support, respectively. Cairo v1.10.0 or later is required. +For detailed installation information, see the [node-canvas wiki](https://github.com/Automattic/node-canvas/wiki/_pages). One-line installation instructions for common OSes are below. Note that libgif/giflib, librsvg and libjpeg are optional and only required if you need GIF, SVG and JPEG support, respectively. Cairo v1.10.0 or later is required. await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/docs/component-testing/Stencil.md b/website/docs/component-testing/Stencil.md index 08c44aee310..d69219e1a22 100644 --- a/website/docs/component-testing/Stencil.md +++ b/website/docs/component-testing/Stencil.md @@ -7,7 +7,7 @@ title: Stencil ## Setup -To set up WebdriverIO within your Stencil project, follow the [instructions](/docs/component-testing#set-up) in our component testing docs. Make sure to select `stencil` as preset within your runner options, e.g.: +To setup WebdriverIO within your Stencil project, follow the [instructions](/docs/component-testing#set-up) in our component testing docs. Make sure to select `stencil` as preset within your runner options, e.g.: ```js // wdio.conf.js @@ -34,7 +34,7 @@ npx wdio run ./wdio.conf.ts ## Writing Tests -Given you have the following Stencil components: +Given you have the following Stencil component: ```tsx title="./components/Component.tsx" import { Component, Prop, h } from '@stencil/core' @@ -63,9 +63,7 @@ export class MyName { } ``` -### `render` - -In your test use the `render` method from `@wdio/browser-runner/stencil` to attach the component to the test page. To interact with the component we recommend using WebdriverIO commands as they behave closer to actual user interactions, e.g.: +In your test use the `render` method from `@wdio/browser-runner/stencil` to attach the component to the test page. To interact with the component we recommend to use WebdriverIO commands as they behave more close to actual user interactions, e.g.: ```tsx title="app.test.tsx" import { expect } from '@wdio/globals' @@ -86,125 +84,38 @@ describe('Stencil Component Testing', () => { }) ``` -#### Render Options - -The `render` method provides the following options: - -##### `components` - -An array of components to test. Component classes can be imported into the spec file, then their reference should be added to the `component` array to be used throughout the test. - -__Type:__ `CustomElementConstructor[]`
-__Default:__ `[]` - -##### `flushQueue` - -If `false`, do not flush the render queue on the initial test setup. - -__Type:__ `boolean`
-__Default:__ `true` - -##### `template` - -The initial JSX that is used to generate the test. Use `template` when you want to initialize a component using their properties, instead of their HTML attributes. It will render the specified template (JSX) into `document.body`. - -__Type:__ `JSX.Template` - -##### `html` - -The initial HTML used to generate the test. This can be useful to construct a collection of components working together, and assign HTML attributes. - -__Type:__ `string` - -##### `language` - -Sets the mocked `lang` attribute on ``. - -__Type:__ `string` - -##### `autoApplyChanges` - -By default, any changes to component properties and attributes must `env.waitForChanges()` to test the updates. As an option, `autoApplyChanges` continuously flushes the queue in the background. - -__Type:__ `boolean`
-__Default:__ `false` - -##### `attachStyles` - -By default, styles are not attached to the DOM and they are not reflected in the serialized HTML. Setting this option to `true` will include the component's styles in the serializable output. - -__Type:__ `boolean`
-__Default:__ `false` - -#### Render Environment - -The `render` method returns an environment object that provides certain utility helpers to manage the component's environment. - -##### `flushAll` - -After changes have been made to a component, such as an update to a property or attribute, the test page does not automatically apply the changes. To wait for, and apply the update, call `await flushAll()` - -__Type:__ `() => void` - -##### `unmount` - -Removes the container element from the DOM. - -__Type:__ `() => void` - -##### `styles` - -All styles defined by components. - -__Type:__ `Record` - -##### `container` - -Container element in which the template is being rendered. - -__Type:__ `HTMLElement` - -##### `$container` - -The container element as a WebdriverIO element. - -__Type:__ `WebdriverIO.Element` - -##### `root` - -The root component of the template. +## Element Updates -__Type:__ `HTMLElement` +If you define properties or state in your Stencil component you have to manage when these changes should be applied to the component to be re-rendered. For that use the `flushAll` method that is returned from the `render` method, e.g.: -##### `$root` +```ts +const { flushAll } = render({ + components: [AppLogin], + template: () => +}) -The root component as a WebdriverIO element. +// update component state via +await $('...').click() -__Type:__ `WebdriverIO.Element` +flushAll() -### `waitForChanges` +// assert after update +await expect($('...')).toHaveElementClass('...') +``` -Helper method to wait for the component to be ready. +If you prefer to apply changes automatically, set the `autoApplyChanges` flag, e.g.: ```ts -import { render, waitForChanges } from '@wdio/browser-runner/stencil' -import { MyComponent } from './component.tsx' - -const page = render({ - components: [MyComponent], - html: '' +const { flushAll } = render({ + components: [AppLogin], + template: () => , + autoApplyChanges: true }) - -expect(page.root.querySelector('div')).not.toBeDefined() -await waitForChanges() -expect(page.root.querySelector('div')).toBeDefined() +// update component state and assert immediatelly +await $('...').click() +await expect($('...')).toHaveElementClass('...') ``` -## Element Updates - -If you define properties or states in your Stencil component you have to manage when these changes should be applied to the component to be re-rendered. - - ## Examples You can find a full example of a WebdriverIO component test suite for Stencil in our [example repository](https://github.com/webdriverio/component-testing-examples/tree/main/stencil-component-starter). diff --git a/website/static/img/visual/tabbable-chrome-latest-1366x768.png b/website/docs/visual-testing/img/tabbable-chrome-latest-1366x768.png similarity index 100% rename from website/static/img/visual/tabbable-chrome-latest-1366x768.png rename to website/docs/visual-testing/img/tabbable-chrome-latest-1366x768.png diff --git a/website/static/img/visual/android.blockouts.png b/website/docs/visual-testing/img/test-output/android.blockouts.png similarity index 100% rename from website/static/img/visual/android.blockouts.png rename to website/docs/visual-testing/img/test-output/android.blockouts.png diff --git a/website/static/img/visual/button-check.png b/website/docs/visual-testing/img/test-output/button-check.png similarity index 100% rename from website/static/img/visual/button-check.png rename to website/docs/visual-testing/img/test-output/button-check.png diff --git a/website/static/img/visual/examplePage-chrome-latest-1366x768.png b/website/docs/visual-testing/img/test-output/examplePage-chrome-latest-1366x768.png similarity index 100% rename from website/static/img/visual/examplePage-chrome-latest-1366x768.png rename to website/docs/visual-testing/img/test-output/examplePage-chrome-latest-1366x768.png diff --git a/website/static/img/visual/fullPage-EmulatorAndroidGoogleAPIPortraitChromeDriver14.0-384x640.png b/website/docs/visual-testing/img/test-output/fullPage-EmulatorAndroidGoogleAPIPortraitChromeDriver14.0-384x640.png similarity index 100% rename from website/static/img/visual/fullPage-EmulatorAndroidGoogleAPIPortraitChromeDriver14.0-384x640.png rename to website/docs/visual-testing/img/test-output/fullPage-EmulatorAndroidGoogleAPIPortraitChromeDriver14.0-384x640.png diff --git a/website/static/img/visual/fullPage-Iphone12Portrait16-390x844.png b/website/docs/visual-testing/img/test-output/fullPage-Iphone12Portrait16-390x844.png similarity index 100% rename from website/static/img/visual/fullPage-Iphone12Portrait16-390x844.png rename to website/docs/visual-testing/img/test-output/fullPage-Iphone12Portrait16-390x844.png diff --git a/website/static/img/visual/fullPage-chrome-latest-1366x768.png b/website/docs/visual-testing/img/test-output/fullPage-chrome-latest-1366x768.png similarity index 100% rename from website/static/img/visual/fullPage-chrome-latest-1366x768.png rename to website/docs/visual-testing/img/test-output/fullPage-chrome-latest-1366x768.png diff --git a/website/static/img/visual/fullpage-check.png b/website/docs/visual-testing/img/test-output/fullpage-check.png similarity index 100% rename from website/static/img/visual/fullpage-check.png rename to website/docs/visual-testing/img/test-output/fullpage-check.png diff --git a/website/static/img/visual/ios.blockouts.png b/website/docs/visual-testing/img/test-output/ios.blockouts.png similarity index 100% rename from website/static/img/visual/ios.blockouts.png rename to website/docs/visual-testing/img/test-output/ios.blockouts.png diff --git a/website/static/img/visual/screen-check.png b/website/docs/visual-testing/img/test-output/screen-check.png similarity index 100% rename from website/static/img/visual/screen-check.png rename to website/docs/visual-testing/img/test-output/screen-check.png diff --git a/website/static/img/visual/screenshot-EmulatorAndroidGoogleAPIPortraitChromeDriver14.0-384x640.png b/website/docs/visual-testing/img/test-output/screenshot-EmulatorAndroidGoogleAPIPortraitChromeDriver14.0-384x640.png similarity index 100% rename from website/static/img/visual/screenshot-EmulatorAndroidGoogleAPIPortraitChromeDriver14.0-384x640.png rename to website/docs/visual-testing/img/test-output/screenshot-EmulatorAndroidGoogleAPIPortraitChromeDriver14.0-384x640.png diff --git a/website/static/img/visual/screenshot-EmulatorAndroidGoogleAPIPortraitNativeWebScreenshot14.0-384x640.png b/website/docs/visual-testing/img/test-output/screenshot-EmulatorAndroidGoogleAPIPortraitNativeWebScreenshot14.0-384x640.png similarity index 100% rename from website/static/img/visual/screenshot-EmulatorAndroidGoogleAPIPortraitNativeWebScreenshot14.0-384x640.png rename to website/docs/visual-testing/img/test-output/screenshot-EmulatorAndroidGoogleAPIPortraitNativeWebScreenshot14.0-384x640.png diff --git a/website/static/img/visual/screenshot-Iphone12Portrait15-390x844.png b/website/docs/visual-testing/img/test-output/screenshot-Iphone12Portrait15-390x844.png similarity index 100% rename from website/static/img/visual/screenshot-Iphone12Portrait15-390x844.png rename to website/docs/visual-testing/img/test-output/screenshot-Iphone12Portrait15-390x844.png diff --git a/website/static/img/visual/wdioLogo-EmulatorAndroidGoogleAPIPortraitNativeWebScreenshot14.0-384x640.png b/website/docs/visual-testing/img/test-output/wdioLogo-EmulatorAndroidGoogleAPIPortraitNativeWebScreenshot14.0-384x640.png similarity index 100% rename from website/static/img/visual/wdioLogo-EmulatorAndroidGoogleAPIPortraitNativeWebScreenshot14.0-384x640.png rename to website/docs/visual-testing/img/test-output/wdioLogo-EmulatorAndroidGoogleAPIPortraitNativeWebScreenshot14.0-384x640.png diff --git a/website/static/img/visual/wdioLogo-Iphone12Portrait16-390x844.png b/website/docs/visual-testing/img/test-output/wdioLogo-Iphone12Portrait16-390x844.png similarity index 100% rename from website/static/img/visual/wdioLogo-Iphone12Portrait16-390x844.png rename to website/docs/visual-testing/img/test-output/wdioLogo-Iphone12Portrait16-390x844.png diff --git a/website/static/img/visual/wdioLogo-chrome-latest-1-1366x768.png b/website/docs/visual-testing/img/test-output/wdioLogo-chrome-latest-1-1366x768.png similarity index 100% rename from website/static/img/visual/wdioLogo-chrome-latest-1-1366x768.png rename to website/docs/visual-testing/img/test-output/wdioLogo-chrome-latest-1-1366x768.png diff --git a/website/docs/visual-testing/method-options.md b/website/docs/visual-testing/method-options.md index c61a66115be..de5e3461efe 100644 --- a/website/docs/visual-testing/method-options.md +++ b/website/docs/visual-testing/method-options.md @@ -92,7 +92,7 @@ Compare images and discard alpha. ### `blockOutSideBar` - **Type:** `boolean` -- **Default:** `true` +- **Default:** `false` - **Mandatory:** no - **Remark:** _Can only be used for `checkScreen()`. It will override the plugin setting. This is **iPad only**_ @@ -101,7 +101,7 @@ Automatically block out the sidebar for iPads in landscape mode during compariso ### `blockOutStatusBar` - **Type:** `boolean` -- **Default:** `true` +- **Default:** `false` - **Mandatory:** no - **Remark:** _Can also be used for `checkElement`, `checkScreen()` and `checkFullPageScreen()`. It will override the plugin setting. This is **Mobile only**_ @@ -110,7 +110,7 @@ Automatically block out the status and address bar during comparisons. This prev ### `blockOutToolBar` - **Type:** `boolean` -- **Default:** `true` +- **Default:** `false` - **Mandatory:** no - **Remark:** _Can also be used for `checkElement`, `checkScreen()` and `checkFullPageScreen()`. It will override the plugin setting. This is **Mobile only**_ diff --git a/website/docs/visual-testing/methods.md b/website/docs/visual-testing/methods.md index c4c4b9ac926..0909ab22387 100644 --- a/website/docs/visual-testing/methods.md +++ b/website/docs/visual-testing/methods.md @@ -30,13 +30,6 @@ await browser.saveElement( ); ``` -#### Support - -- Desktop Browsers -- Mobile Browsers -- Mobile Hybrid Apps -- Mobile Native Apps - #### Parameters - **`element`:** @@ -70,13 +63,6 @@ await browser.saveScreen( ); ``` -#### Support - -- Desktop Browsers -- Mobile Browsers -- Mobile Hybrid Apps -- Mobile Native Apps - #### Parameters - **`tag`:** - **Mandatory:** Yes @@ -106,11 +92,6 @@ await browser.saveFullPageScreen( ); ``` -#### Support - -- Desktop Browsers -- Mobile Browsers - #### Parameters - **`tag`:** - **Mandatory:** Yes @@ -140,10 +121,6 @@ await browser.saveTabbablePage( ); ``` -#### Support - -- Desktop Browsers - #### Parameters - **`tag`:** - **Mandatory:** Yes @@ -192,13 +169,6 @@ await browser.checkElement( ); ``` -#### Support - -- Desktop Browsers -- Mobile Browsers -- Mobile Hybrid Apps -- Mobile Native Apps - #### Parameters - **`element`:** - **Mandatory:** Yes @@ -231,13 +201,6 @@ await browser.checkScreen( ); ``` -#### Support - -- Desktop Browsers -- Mobile Browsers -- Mobile Hybrid Apps -- Mobile Native Apps - #### Parameters - **`tag`:** - **Mandatory:** Yes @@ -267,11 +230,6 @@ await browser.checkFullPageScreen( ); ``` -#### Support - -- Desktop Browsers -- Mobile Browsers - #### Parameters - **`tag`:** - **Mandatory:** Yes @@ -301,10 +259,6 @@ await browser.checkTabbablePage( ); ``` -#### Support - -- Desktop Browsers - #### Parameters - **`tag`:** - **Mandatory:** Yes diff --git a/website/docs/visual-testing/service-options.md b/website/docs/visual-testing/service-options.md index 895e990fffe..5078916a18e 100644 --- a/website/docs/visual-testing/service-options.md +++ b/website/docs/visual-testing/service-options.md @@ -92,17 +92,17 @@ This can only be done when the device name **CAN** automatically be determined a - **Type:** `boolean` - **Mandatory:** No -- **Default:** `true` +- **Default:** `false` -If no baseline image is found during the comparison the image is automatically copied to the baseline folder. +If no baseline image is found during the comparison the image is automatically copied to the baseline folder when this is set to `true` ### `baselineFolder` - **Type:** `any` - **Mandatory:** No -- **Default:** `.path/to/testfile/__snapshots__/` +- **Default:** `./wic/baseline/` -The directory will hold all the baseline images that are used during the comparison. If not set, the default value will be used which will store the files in a `__snapshots__/`-folder next to the spec that executes the visual tests. A function that accepts an option object can also be used to set the `baselineFolder` value: +The directory will hold all the baseline images that are used during the comparison. If not set, the default value will be used. A function that accepts an option object can also be used to set the `baselineFolder` value: ```js { @@ -349,4 +349,4 @@ The width of the line. ## Compare options -The compare options can also be set as service options, they are described in the [Method Compare options](./method-options#compare-check-options) +The compare options can be set as service options, see [Method Compare options](./method-options#compare-check-options) diff --git a/website/docs/visual-testing/test-output.md b/website/docs/visual-testing/test-output.md index 4f34aa82e61..f29f0ca63fe 100644 --- a/website/docs/visual-testing/test-output.md +++ b/website/docs/visual-testing/test-output.md @@ -49,13 +49,13 @@ await browser.saveElement("#element-id", "example-element-tag") ]} > -![saveElement Desktop](/img/visual/wdioLogo-chrome-latest-1-1366x768.png) +![saveElement Desktop](./img/test-output/wdioLogo-chrome-latest-1-1366x768.png) -![saveElement Mobile Android](/img/visual/wdioLogo-EmulatorAndroidGoogleAPIPortraitNativeWebScreenshot14.0-384x640.png) +![saveElement Mobile Android](./img/test-output/wdioLogo-EmulatorAndroidGoogleAPIPortraitNativeWebScreenshot14.0-384x640.png) -![saveElement Mobile iOS](/img/visual/wdioLogo-Iphone12Portrait16-390x844.png) +![saveElement Mobile iOS](./img/test-output/wdioLogo-Iphone12Portrait16-390x844.png)
@@ -76,13 +76,13 @@ await browser.saveScreen("example-page-tag") ]} > -![saveScreen Desktop](/img/visual/examplePage-chrome-latest-1366x768.png) +![saveScreen Desktop](./img/test-output/examplePage-chrome-latest-1366x768.png) -![saveScreen Mobile Android ChromeDriver](/img/visual/screenshot-EmulatorAndroidGoogleAPIPortraitChromeDriver14.0-384x640.png) +![saveScreen Mobile Android ChromeDriver](./img/test-output/screenshot-EmulatorAndroidGoogleAPIPortraitChromeDriver14.0-384x640.png) -![saveScreen Mobile Android nativeWebScreenshot](/img/visual/screenshot-EmulatorAndroidGoogleAPIPortraitNativeWebScreenshot14.0-384x640.png) +![saveScreen Mobile Android nativeWebScreenshot](./img/test-output/screenshot-EmulatorAndroidGoogleAPIPortraitNativeWebScreenshot14.0-384x640.png) @@ -90,7 +90,7 @@ await browser.saveScreen("example-page-tag") iOS `saveScreen` executions are by default not with the device bezel corners. To have this please add the `addIOSBezelCorners:true` option when instantiating the service, see [this](./service-options#addiosbezelcorners) ::: -![saveScreen Mobile iOS](/img/visual/screenshot-Iphone12Portrait15-390x844.png) +![saveScreen Mobile iOS](./img/test-output/screenshot-Iphone12Portrait15-390x844.png) @@ -110,13 +110,13 @@ await browser.saveFullPageScreen("full-page-tag") ]} > -![saveFullPageScreens Desktop](/img/visual/fullPage-chrome-latest-1366x768.png) +![saveFullPageScreens Desktop](./img/test-output/fullPage-chrome-latest-1366x768.png) -![saveFullPageScreens Mobile Android](/img/visual/fullPage-EmulatorAndroidGoogleAPIPortraitChromeDriver14.0-384x640.png) +![saveFullPageScreens Mobile Android](./img/test-output/fullPage-EmulatorAndroidGoogleAPIPortraitChromeDriver14.0-384x640.png) -![saveFullPageScreens Mobile iOS](/img/visual/fullPage-Iphone12Portrait16-390x844.png) +![saveFullPageScreens Mobile iOS](./img/test-output/fullPage-Iphone12Portrait16-390x844.png) @@ -175,7 +175,7 @@ await browser.checkElement("#element-id", "example-element-tag") The button text has been changed from `Get Started` to `Getting Started!` and detected as a change. ::: -![Button Check Result](/img/visual/button-check.png) +![Button Check Result](./img/test-output/button-check.png) @@ -188,7 +188,7 @@ await browser.checkScreen("example-page-tag") The button text has been changed from `Get Started` to `Getting Started!` and detected as a change. ::: -![Button Check Result](/img/visual/screen-check.png) +![Button Check Result](./img/test-output/screen-check.png) @@ -202,7 +202,7 @@ await browser.checkFullPageScreen("full-page-tag") The button text has been changed from `Get Started` to `Getting Started!` and detected as a change. ::: -![Button Check Result](/img/visual/fullpage-check.png) +![Button Check Result](./img/test-output/fullpage-check.png) @@ -210,25 +210,14 @@ The button text has been changed from `Get Started` to `Getting Started!` and de ## Block-Outs -Here you will find an example output for block-outs in Android NativeWebScreenshot and iOS where the status+address and toolbar are blocked out. - - - - -![Blockouts Android](/img/visual/android.blockouts.png) +:::info +Not all block-out options are shown here, but below you will find an output for Android NativeWebScreenshot and iOS where the status+address and toolbar are blocked out. +::: - +### Android nativeWebScreenshot - +![Blockouts Android](./img/test-output/android.blockouts.png) -![Blockouts iOS](/img/visual/ios.blockouts.png) +### iOS - - - +![Blockouts iOS](./img/test-output/ios.blockouts.png) diff --git a/website/docs/visual-testing/writing-tests.md b/website/docs/visual-testing/writing-tests.md index 1e8cea55fb5..db0fd0cd0c3 100644 --- a/website/docs/visual-testing/writing-tests.md +++ b/website/docs/visual-testing/writing-tests.md @@ -33,15 +33,6 @@ describe('Mocha Example', () => { }) it('using visual matchers to assert against baseline', async () => { - // Check screen to exactly match with baseline - await expect(browser).toMatchScreenSnapshot('partialPage') - // check an element to have a mismatch percentage of 5% with the baseline - await expect(browser).toMatchScreenSnapshot('partialPage', 5) - // check an element with options for `saveScreen` command - await expect(browser).toMatchScreenSnapshot('partialPage', { - /* some options */ - }) - // Check an element to exactly match with baseline await expect($('#element-id')).toMatchElementSnapshot('firstButtonElement') // check an element to have a mismatch percentage of 5% with the baseline @@ -142,15 +133,6 @@ describe('Jasmine Example', () => { }) it('using visual matchers to assert against baseline', async () => { - // Check screen to exactly match with baseline - await expect(browser).toMatchScreenSnapshot('partialPage') - // check an element to have a mismatch percentage of 5% with the baseline - await expect(browser).toMatchScreenSnapshot('partialPage', 5) - // check an element with options for `saveScreen` command - await expect(browser).toMatchScreenSnapshot('partialPage', { - /* some options */ - }) - // Check an element to exactly match with baseline await expect($('#element-id')).toMatchElementSnapshot('firstButtonElement') // check an element to have a mismatch percentage of 5% with the baseline @@ -270,15 +252,6 @@ When('I save some screenshots', async function () { }) Then('I should be able to match some screenshots with a baseline', async function () { - // Check screen to exactly match with baseline - await expect(browser).toMatchScreenSnapshot('partialPage') - // check an element to have a mismatch percentage of 5% with the baseline - await expect(browser).toMatchScreenSnapshot('partialPage', 5) - // check an element with options for `saveScreen` command - await expect(browser).toMatchScreenSnapshot('partialPage', { - /* some options */ - }) - // Check an element to exactly match with baseline await expect($('#element-id')).toMatchElementSnapshot('firstButtonElement') // check an element to have a mismatch percentage of 5% with the baseline @@ -347,24 +320,15 @@ Then('I should be able to compare some screenshots with a baseline', async funct :::note IMPORTANT -This service provides `save` and `check` methods. If you run your tests for the first time you **SHOULD NOT** combine `save` and `compare` methods, the `check`-methods will automatically create a baseline image for you - -```sh -##################################################################################### - INFO: - Autosaved the image to - /Users/wswebcreation/sample/baselineFolder/desktop_chrome/examplePage-chrome-latest-1366x768.png -##################################################################################### -``` - - -When you've [disabled to automatically save baseline images](service-options#autosavebaseline), the Promise will be rejected with the following warning. +This service provides `save` and `check` methods. If you run your tests for the first time you **SHOULD NOT** combine `save` and `compare` methods, the `check`-methods will automatically reject your promise if there is no baseline image with the following warning. ```sh ##################################################################################### Baseline image not found, save the actual image manually to the baseline. The image can be found here: /Users/wswebcreation/sample/.tmp/actual/desktop_chrome/examplePage-chrome-latest-1366x768.png + If you want the module to auto save a non existing image to the baseline you + can provide 'autoSaveBaseline: true' to the options. ##################################################################################### ``` diff --git a/website/docusaurus.config.ts b/website/docusaurus.config.ts index 648c08a732f..2cdd8f2c47f 100644 --- a/website/docusaurus.config.ts +++ b/website/docusaurus.config.ts @@ -181,11 +181,6 @@ const config: Config = { BrowserStack ` - }, { - html: ` - - Sauce Labs - ` }] }], logo: { diff --git a/website/i18n/ar/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md b/website/i18n/ar/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md index 70a276ee9e9..176594cc7f5 100644 --- a/website/i18n/ar/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md @@ -207,14 +207,6 @@ Or, exclude a spec file when filtering using a suite: wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog -``` - When the `--exclude` option is provided, it will override any patterns defined by the config or capability level's `exclude` parameter. ## Run Suites and Test Specs diff --git a/website/i18n/ar/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md b/website/i18n/ar/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md deleted file mode 100644 index 7b139de3737..00000000000 --- a/website/i18n/ar/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -id: file-download -title: File Download ---- - -When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. - -Here, we provide best practices for file downloads and demonstrate how to configure download directories for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**. - -## Download Paths - -**Hardcoding** download paths in test scripts can lead to maintenance issues and portability problems. Utilize **relative paths** for download directories to ensure portability and compatibility across different environments. - -```javascript -// 👎 -// Hardcoded download path -const downloadPath = '/path/to/downloads'; - -// 👍 -// Relative download path -const downloadPath = path.join(__dirname, 'downloads'); -``` - -## Wait Strategies - -Failing to implement proper wait strategies can lead to race conditions or unreliable tests, especially for download completion. Implement **explicit** wait strategies to wait for file downloads to complete, ensuring synchronization between test steps. - -```javascript -// 👎 -// No explicit wait for download completion -await browser.pause(5000); - -// 👍 -// Wait for file download completion -await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/i18n/bg/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md b/website/i18n/bg/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md index 70a276ee9e9..176594cc7f5 100644 --- a/website/i18n/bg/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md +++ b/website/i18n/bg/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md @@ -207,14 +207,6 @@ Or, exclude a spec file when filtering using a suite: wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog -``` - When the `--exclude` option is provided, it will override any patterns defined by the config or capability level's `exclude` parameter. ## Run Suites and Test Specs diff --git a/website/i18n/bg/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md b/website/i18n/bg/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md deleted file mode 100644 index 7b139de3737..00000000000 --- a/website/i18n/bg/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -id: file-download -title: File Download ---- - -When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. - -Here, we provide best practices for file downloads and demonstrate how to configure download directories for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**. - -## Download Paths - -**Hardcoding** download paths in test scripts can lead to maintenance issues and portability problems. Utilize **relative paths** for download directories to ensure portability and compatibility across different environments. - -```javascript -// 👎 -// Hardcoded download path -const downloadPath = '/path/to/downloads'; - -// 👍 -// Relative download path -const downloadPath = path.join(__dirname, 'downloads'); -``` - -## Wait Strategies - -Failing to implement proper wait strategies can lead to race conditions or unreliable tests, especially for download completion. Implement **explicit** wait strategies to wait for file downloads to complete, ensuring synchronization between test steps. - -```javascript -// 👎 -// No explicit wait for download completion -await browser.pause(5000); - -// 👍 -// Wait for file download completion -await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/i18n/de/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md b/website/i18n/de/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md index f39fe70834b..3dac42eade8 100644 --- a/website/i18n/de/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md +++ b/website/i18n/de/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md @@ -231,14 +231,6 @@ Oder schließen Sie eine Test-Datei aus, wenn Sie mit einer Suite filtern: wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog -``` - Wenn die Option `--exclude` angegeben wird, überschreibt sie alle Muster, die durch den Parameter `Exclude` der Konfigurations- oder auf Capability-Ebene definiert sind. ## Ausführen von Suites und Test Datein diff --git a/website/i18n/de/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md b/website/i18n/de/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md deleted file mode 100644 index 7b139de3737..00000000000 --- a/website/i18n/de/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -id: file-download -title: File Download ---- - -When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. - -Here, we provide best practices for file downloads and demonstrate how to configure download directories for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**. - -## Download Paths - -**Hardcoding** download paths in test scripts can lead to maintenance issues and portability problems. Utilize **relative paths** for download directories to ensure portability and compatibility across different environments. - -```javascript -// 👎 -// Hardcoded download path -const downloadPath = '/path/to/downloads'; - -// 👍 -// Relative download path -const downloadPath = path.join(__dirname, 'downloads'); -``` - -## Wait Strategies - -Failing to implement proper wait strategies can lead to race conditions or unreliable tests, especially for download completion. Implement **explicit** wait strategies to wait for file downloads to complete, ensuring synchronization between test steps. - -```javascript -// 👎 -// No explicit wait for download completion -await browser.pause(5000); - -// 👍 -// Wait for file download completion -await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/i18n/es/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md b/website/i18n/es/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md index 0a795abd4ac..ebf951186cb 100644 --- a/website/i18n/es/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md +++ b/website/i18n/es/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md @@ -207,14 +207,6 @@ O, excluir un archivo de especificaciones al filtrar usando una suite: wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog -``` - Cuando se proporciona la opción `--spec` , sobreescribirá cualquier patrón definido por el parámetro `especificaciones` del nivel de configuración o capacidad. ## Ejecutar suites y pruebas diff --git a/website/i18n/es/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md b/website/i18n/es/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md deleted file mode 100644 index 7b139de3737..00000000000 --- a/website/i18n/es/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -id: file-download -title: File Download ---- - -When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. - -Here, we provide best practices for file downloads and demonstrate how to configure download directories for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**. - -## Download Paths - -**Hardcoding** download paths in test scripts can lead to maintenance issues and portability problems. Utilize **relative paths** for download directories to ensure portability and compatibility across different environments. - -```javascript -// 👎 -// Hardcoded download path -const downloadPath = '/path/to/downloads'; - -// 👍 -// Relative download path -const downloadPath = path.join(__dirname, 'downloads'); -``` - -## Wait Strategies - -Failing to implement proper wait strategies can lead to race conditions or unreliable tests, especially for download completion. Implement **explicit** wait strategies to wait for file downloads to complete, ensuring synchronization between test steps. - -```javascript -// 👎 -// No explicit wait for download completion -await browser.pause(5000); - -// 👍 -// Wait for file download completion -await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/i18n/fa/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md b/website/i18n/fa/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md index b6aead62039..ce107d0882a 100644 --- a/website/i18n/fa/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md +++ b/website/i18n/fa/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md @@ -207,14 +207,6 @@ Or, exclude a spec file when filtering using a suite: wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog -``` - When the `--exclude` option is provided, it will override any patterns defined by the config or capability level's `exclude` parameter. ## Run Suites and Test Specs diff --git a/website/i18n/fa/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md b/website/i18n/fa/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md deleted file mode 100644 index 7b139de3737..00000000000 --- a/website/i18n/fa/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -id: file-download -title: File Download ---- - -When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. - -Here, we provide best practices for file downloads and demonstrate how to configure download directories for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**. - -## Download Paths - -**Hardcoding** download paths in test scripts can lead to maintenance issues and portability problems. Utilize **relative paths** for download directories to ensure portability and compatibility across different environments. - -```javascript -// 👎 -// Hardcoded download path -const downloadPath = '/path/to/downloads'; - -// 👍 -// Relative download path -const downloadPath = path.join(__dirname, 'downloads'); -``` - -## Wait Strategies - -Failing to implement proper wait strategies can lead to race conditions or unreliable tests, especially for download completion. Implement **explicit** wait strategies to wait for file downloads to complete, ensuring synchronization between test steps. - -```javascript -// 👎 -// No explicit wait for download completion -await browser.pause(5000); - -// 👍 -// Wait for file download completion -await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md b/website/i18n/fr/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md index 70a276ee9e9..176594cc7f5 100644 --- a/website/i18n/fr/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md +++ b/website/i18n/fr/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md @@ -207,14 +207,6 @@ Or, exclude a spec file when filtering using a suite: wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog -``` - When the `--exclude` option is provided, it will override any patterns defined by the config or capability level's `exclude` parameter. ## Run Suites and Test Specs diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md b/website/i18n/fr/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md deleted file mode 100644 index 7b139de3737..00000000000 --- a/website/i18n/fr/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -id: file-download -title: File Download ---- - -When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. - -Here, we provide best practices for file downloads and demonstrate how to configure download directories for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**. - -## Download Paths - -**Hardcoding** download paths in test scripts can lead to maintenance issues and portability problems. Utilize **relative paths** for download directories to ensure portability and compatibility across different environments. - -```javascript -// 👎 -// Hardcoded download path -const downloadPath = '/path/to/downloads'; - -// 👍 -// Relative download path -const downloadPath = path.join(__dirname, 'downloads'); -``` - -## Wait Strategies - -Failing to implement proper wait strategies can lead to race conditions or unreliable tests, especially for download completion. Implement **explicit** wait strategies to wait for file downloads to complete, ensuring synchronization between test steps. - -```javascript -// 👎 -// No explicit wait for download completion -await browser.pause(5000); - -// 👍 -// Wait for file download completion -await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/i18n/hi/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md b/website/i18n/hi/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md index e75fa72fa69..68359f5cf59 100644 --- a/website/i18n/hi/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md +++ b/website/i18n/hi/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md @@ -207,14 +207,6 @@ wdio wdio.conf.js --exclude ./test/specs/signup.js --exclude ./test/specs/forgot wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog -``` - जब `--exclude` विकल्प प्रदान किया जाता है, तो यह कॉन्फ़िगरेशन या क्षमता स्तर के `exclude` पैरामीटर द्वारा परिभाषित किसी भी पैटर्न को ओवरराइड कर देगा। ## सूट और टेस्ट स्पेक्स चलाएं diff --git a/website/i18n/hi/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md b/website/i18n/hi/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md deleted file mode 100644 index 7b139de3737..00000000000 --- a/website/i18n/hi/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -id: file-download -title: File Download ---- - -When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. - -Here, we provide best practices for file downloads and demonstrate how to configure download directories for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**. - -## Download Paths - -**Hardcoding** download paths in test scripts can lead to maintenance issues and portability problems. Utilize **relative paths** for download directories to ensure portability and compatibility across different environments. - -```javascript -// 👎 -// Hardcoded download path -const downloadPath = '/path/to/downloads'; - -// 👍 -// Relative download path -const downloadPath = path.join(__dirname, 'downloads'); -``` - -## Wait Strategies - -Failing to implement proper wait strategies can lead to race conditions or unreliable tests, especially for download completion. Implement **explicit** wait strategies to wait for file downloads to complete, ensuring synchronization between test steps. - -```javascript -// 👎 -// No explicit wait for download completion -await browser.pause(5000); - -// 👍 -// Wait for file download completion -await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/i18n/it/docusaurus-plugin-content-docs/current/BestPractices.md b/website/i18n/it/docusaurus-plugin-content-docs/current/BestPractices.md index 0cb67229f11..da34c89f815 100644 --- a/website/i18n/it/docusaurus-plugin-content-docs/current/BestPractices.md +++ b/website/i18n/it/docusaurus-plugin-content-docs/current/BestPractices.md @@ -21,7 +21,7 @@ await $('.button'); All these selectors should return a single element. ```js -// 👍 +// 👍 await $('aria/Submit'); await $('[test-id="submit-button"]'); await $('#submit-button'); @@ -50,7 +50,7 @@ await $('table tr td'); The only time you should use chaining is when you want to combine different [selector strategies](https://webdriver.io/docs/selectors/#custom-selector-strategies). In the example we use the [Deep Selectors](https://webdriver.io/docs/selectors#deep-selectors), which is a strategy to go inside the shadow DOM of an element. ``` js -// 👍 +// 👍 await $('custom-datepicker').$('>>>#calendar').$('aria/Select'); ``` @@ -206,4 +206,4 @@ If abstracted away it could look something like below where the logic is put in ```js // 👍 await form.submitData(new Person('bob@webdriver.io')) -``` +``` \ No newline at end of file diff --git a/website/i18n/it/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md b/website/i18n/it/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md index 70a276ee9e9..176594cc7f5 100644 --- a/website/i18n/it/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md +++ b/website/i18n/it/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md @@ -207,14 +207,6 @@ Or, exclude a spec file when filtering using a suite: wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog -``` - When the `--exclude` option is provided, it will override any patterns defined by the config or capability level's `exclude` parameter. ## Run Suites and Test Specs diff --git a/website/i18n/it/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md b/website/i18n/it/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md deleted file mode 100644 index 7b139de3737..00000000000 --- a/website/i18n/it/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -id: file-download -title: File Download ---- - -When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. - -Here, we provide best practices for file downloads and demonstrate how to configure download directories for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**. - -## Download Paths - -**Hardcoding** download paths in test scripts can lead to maintenance issues and portability problems. Utilize **relative paths** for download directories to ensure portability and compatibility across different environments. - -```javascript -// 👎 -// Hardcoded download path -const downloadPath = '/path/to/downloads'; - -// 👍 -// Relative download path -const downloadPath = path.join(__dirname, 'downloads'); -``` - -## Wait Strategies - -Failing to implement proper wait strategies can lead to race conditions or unreliable tests, especially for download completion. Implement **explicit** wait strategies to wait for file downloads to complete, ensuring synchronization between test steps. - -```javascript -// 👎 -// No explicit wait for download completion -await browser.pause(5000); - -// 👍 -// Wait for file download completion -await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/BestPractices.md b/website/i18n/ja/docusaurus-plugin-content-docs/current/BestPractices.md index 0cb67229f11..da34c89f815 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/BestPractices.md +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/BestPractices.md @@ -21,7 +21,7 @@ await $('.button'); All these selectors should return a single element. ```js -// 👍 +// 👍 await $('aria/Submit'); await $('[test-id="submit-button"]'); await $('#submit-button'); @@ -50,7 +50,7 @@ await $('table tr td'); The only time you should use chaining is when you want to combine different [selector strategies](https://webdriver.io/docs/selectors/#custom-selector-strategies). In the example we use the [Deep Selectors](https://webdriver.io/docs/selectors#deep-selectors), which is a strategy to go inside the shadow DOM of an element. ``` js -// 👍 +// 👍 await $('custom-datepicker').$('>>>#calendar').$('aria/Select'); ``` @@ -206,4 +206,4 @@ If abstracted away it could look something like below where the logic is put in ```js // 👍 await form.submitData(new Person('bob@webdriver.io')) -``` +``` \ No newline at end of file diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md b/website/i18n/ja/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md index 70a276ee9e9..176594cc7f5 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md @@ -207,14 +207,6 @@ Or, exclude a spec file when filtering using a suite: wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog -``` - When the `--exclude` option is provided, it will override any patterns defined by the config or capability level's `exclude` parameter. ## Run Suites and Test Specs diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md b/website/i18n/ja/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md deleted file mode 100644 index 7b139de3737..00000000000 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -id: file-download -title: File Download ---- - -When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. - -Here, we provide best practices for file downloads and demonstrate how to configure download directories for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**. - -## Download Paths - -**Hardcoding** download paths in test scripts can lead to maintenance issues and portability problems. Utilize **relative paths** for download directories to ensure portability and compatibility across different environments. - -```javascript -// 👎 -// Hardcoded download path -const downloadPath = '/path/to/downloads'; - -// 👍 -// Relative download path -const downloadPath = path.join(__dirname, 'downloads'); -``` - -## Wait Strategies - -Failing to implement proper wait strategies can lead to race conditions or unreliable tests, especially for download completion. Implement **explicit** wait strategies to wait for file downloads to complete, ensuring synchronization between test steps. - -```javascript -// 👎 -// No explicit wait for download completion -await browser.pause(5000); - -// 👍 -// Wait for file download completion -await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/i18n/pl/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md b/website/i18n/pl/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md index 70a276ee9e9..176594cc7f5 100644 --- a/website/i18n/pl/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md +++ b/website/i18n/pl/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md @@ -207,14 +207,6 @@ Or, exclude a spec file when filtering using a suite: wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog -``` - When the `--exclude` option is provided, it will override any patterns defined by the config or capability level's `exclude` parameter. ## Run Suites and Test Specs diff --git a/website/i18n/pl/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md b/website/i18n/pl/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md deleted file mode 100644 index 7b139de3737..00000000000 --- a/website/i18n/pl/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -id: file-download -title: File Download ---- - -When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. - -Here, we provide best practices for file downloads and demonstrate how to configure download directories for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**. - -## Download Paths - -**Hardcoding** download paths in test scripts can lead to maintenance issues and portability problems. Utilize **relative paths** for download directories to ensure portability and compatibility across different environments. - -```javascript -// 👎 -// Hardcoded download path -const downloadPath = '/path/to/downloads'; - -// 👍 -// Relative download path -const downloadPath = path.join(__dirname, 'downloads'); -``` - -## Wait Strategies - -Failing to implement proper wait strategies can lead to race conditions or unreliable tests, especially for download completion. Implement **explicit** wait strategies to wait for file downloads to complete, ensuring synchronization between test steps. - -```javascript -// 👎 -// No explicit wait for download completion -await browser.pause(5000); - -// 👍 -// Wait for file download completion -await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/i18n/ru/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md b/website/i18n/ru/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md index 70a276ee9e9..176594cc7f5 100644 --- a/website/i18n/ru/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md +++ b/website/i18n/ru/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md @@ -207,14 +207,6 @@ Or, exclude a spec file when filtering using a suite: wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog -``` - When the `--exclude` option is provided, it will override any patterns defined by the config or capability level's `exclude` parameter. ## Run Suites and Test Specs diff --git a/website/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md b/website/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md deleted file mode 100644 index 7b139de3737..00000000000 --- a/website/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -id: file-download -title: File Download ---- - -When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. - -Here, we provide best practices for file downloads and demonstrate how to configure download directories for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**. - -## Download Paths - -**Hardcoding** download paths in test scripts can lead to maintenance issues and portability problems. Utilize **relative paths** for download directories to ensure portability and compatibility across different environments. - -```javascript -// 👎 -// Hardcoded download path -const downloadPath = '/path/to/downloads'; - -// 👍 -// Relative download path -const downloadPath = path.join(__dirname, 'downloads'); -``` - -## Wait Strategies - -Failing to implement proper wait strategies can lead to race conditions or unreliable tests, especially for download completion. Implement **explicit** wait strategies to wait for file downloads to complete, ensuring synchronization between test steps. - -```javascript -// 👎 -// No explicit wait for download completion -await browser.pause(5000); - -// 👍 -// Wait for file download completion -await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/i18n/ta/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md b/website/i18n/ta/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md index a943fb9cbbe..176594cc7f5 100644 --- a/website/i18n/ta/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md +++ b/website/i18n/ta/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md @@ -204,16 +204,7 @@ wdio wdio.conf.js --exclude ./test/specs/signup.js --exclude ./test/specs/forgot Or, exclude a spec file when filtering using a suite: ```sh -wdio wdio.conf.js --suite login --exclude ./test/specs/ -e2e/login.js -``` - -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog +wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` When the `--exclude` option is provided, it will override any patterns defined by the config or capability level's `exclude` parameter. diff --git a/website/i18n/ta/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md b/website/i18n/ta/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md deleted file mode 100644 index 7b139de3737..00000000000 --- a/website/i18n/ta/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -id: file-download -title: File Download ---- - -When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. - -Here, we provide best practices for file downloads and demonstrate how to configure download directories for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**. - -## Download Paths - -**Hardcoding** download paths in test scripts can lead to maintenance issues and portability problems. Utilize **relative paths** for download directories to ensure portability and compatibility across different environments. - -```javascript -// 👎 -// Hardcoded download path -const downloadPath = '/path/to/downloads'; - -// 👍 -// Relative download path -const downloadPath = path.join(__dirname, 'downloads'); -``` - -## Wait Strategies - -Failing to implement proper wait strategies can lead to race conditions or unreliable tests, especially for download completion. Implement **explicit** wait strategies to wait for file downloads to complete, ensuring synchronization between test steps. - -```javascript -// 👎 -// No explicit wait for download completion -await browser.pause(5000); - -// 👍 -// Wait for file download completion -await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/i18n/uk/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md b/website/i18n/uk/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md index 70a276ee9e9..176594cc7f5 100644 --- a/website/i18n/uk/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md +++ b/website/i18n/uk/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md @@ -207,14 +207,6 @@ Or, exclude a spec file when filtering using a suite: wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog -``` - When the `--exclude` option is provided, it will override any patterns defined by the config or capability level's `exclude` parameter. ## Run Suites and Test Specs diff --git a/website/i18n/uk/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md b/website/i18n/uk/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md deleted file mode 100644 index 7b139de3737..00000000000 --- a/website/i18n/uk/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -id: file-download -title: File Download ---- - -When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. - -Here, we provide best practices for file downloads and demonstrate how to configure download directories for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**. - -## Download Paths - -**Hardcoding** download paths in test scripts can lead to maintenance issues and portability problems. Utilize **relative paths** for download directories to ensure portability and compatibility across different environments. - -```javascript -// 👎 -// Hardcoded download path -const downloadPath = '/path/to/downloads'; - -// 👍 -// Relative download path -const downloadPath = path.join(__dirname, 'downloads'); -``` - -## Wait Strategies - -Failing to implement proper wait strategies can lead to race conditions or unreliable tests, especially for download completion. Implement **explicit** wait strategies to wait for file downloads to complete, ensuring synchronization between test steps. - -```javascript -// 👎 -// No explicit wait for download completion -await browser.pause(5000); - -// 👍 -// Wait for file download completion -await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md index 31172467fce..7053b267981 100644 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/OrganizingTestSuites.md @@ -231,14 +231,6 @@ Or, exclude a spec file when filtering using a suite: wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js ``` -If the `--exclude` value does not point to a particular spec file, it is instead used to filter the spec filenames defined in your configuration. - -To exclude all specs with the word “dialog” in the spec file names, you could use: - -```sh -wdio wdio.conf.js --exclude dialog -``` - When the `--exclude` option is provided, it will override any patterns defined by the config or capability level's `exclude` parameter. ## Run Suites and Test Specs diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md deleted file mode 100644 index 7b139de3737..00000000000 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/FileDownloads.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -id: file-download -title: File Download ---- - -When automating file downloads in web testing, it's essential to handle them consistently across different browsers to ensure reliable test execution. - -Here, we provide best practices for file downloads and demonstrate how to configure download directories for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**. - -## Download Paths - -**Hardcoding** download paths in test scripts can lead to maintenance issues and portability problems. Utilize **relative paths** for download directories to ensure portability and compatibility across different environments. - -```javascript -// 👎 -// Hardcoded download path -const downloadPath = '/path/to/downloads'; - -// 👍 -// Relative download path -const downloadPath = path.join(__dirname, 'downloads'); -``` - -## Wait Strategies - -Failing to implement proper wait strategies can lead to race conditions or unreliable tests, especially for download completion. Implement **explicit** wait strategies to wait for file downloads to complete, ensuring synchronization between test steps. - -```javascript -// 👎 -// No explicit wait for download completion -await browser.pause(5000); - -// 👍 -// Wait for file download completion -await waitUntil(async ()=> await fs.existsSync(downloadPath), 5000); -``` - -## Configuring Download Directories - -To override file download behavior for **Google Chrome**, **Mozilla Firefox**, and **Microsoft Edge**, provide the download directory in the WebDriverIO capabilities: - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L8-L16 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L20-L32 - -``` - - - - - -```javascript reference title="wdio.conf.js" - -https://github.com/webdriverio/example-recipes/blob/84dda93011234d0b2a34ee0cfb3cdfa2a06136a5/testDownloadBehavior/wdio.conf.js#L36-L44 - -``` - - - - - -For an example implementation, refer to the [WebdriverIO Test Download Behavior Recipe](https://github.com/webdriverio/example-recipes/tree/main/testDownloadBehavior). - -## Configuring Chromium Browser Downloads - -To change the download path for __Chromium-based__ browsers (such as Chrome, Edge, Brave, etc.) using WebDriverIOs `getPuppeteer` method for accessing Chrome DevTools. - -```javascript -const page = await browser.getPuppeteer(); -// Initiate a CDP Session: -const cdpSession = await page.target().createCDPSession(); -// Set the Download Path: -await cdpSession.send('Browser.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadPath }); -``` - -## Handling Multiple File Downloads - -When dealing with scenarios involving multiple file downloads, it's essential to implement strategies to manage and validate each download effectively. Consider the following approaches: - -__Sequential Download Handling:__ Download files one by one and verify each download before initiating the next one to ensure orderly execution and accurate validation. - -__Parallel Download Handling:__ Utilize asynchronous programming techniques to initiate multiple file downloads simultaneously, optimizing test execution time. Implement robust validation mechanisms to verify all downloads upon completion. - -## Cross-Browser Compatibility Considerations - -While WebDriverIO provides a unified interface for browser automation, it's essential to account for variations in browser behavior and capabilities. Consider testing your file download functionality across different browsers to ensure compatibility and consistency. - -__Browser-Specific Configurations:__ Adjust download path settings and wait strategies to accommodate differences in browser behavior and preferences across Chrome, Firefox, Edge, and other supported browsers. - -__Browser Version Compatibility:__ Regularly update your WebDriverIO and browser versions to leverage the latest features and enhancements while ensuring compatibility with your existing test suite. diff --git a/website/src/components/ImageSwitcher.tsx b/website/src/components/ImageSwitcher.tsx index db0152da96a..61baa9309e3 100644 --- a/website/src/components/ImageSwitcher.tsx +++ b/website/src/components/ImageSwitcher.tsx @@ -2,7 +2,7 @@ import React from 'react' import BrowserOnly from '@docusaurus/BrowserOnly' import { useColorMode } from '@docusaurus/theme-common' -export function ImageSwitcher ({ lightImageSrc, darkImageSrc, alt, link, ...args }) { +export function ImageSwitcher ({ lightImageSrc, darkImageSrc, alt, link }) { return {() => { const { isDarkTheme } = useColorMode() @@ -10,13 +10,13 @@ export function ImageSwitcher ({ lightImageSrc, darkImageSrc, alt, link, ...args if (link) { return ( - {alt} + {alt} ) } return ( - {alt} + {alt} ) }} diff --git a/website/src/css/sponsors.css b/website/src/css/sponsors.css index 9d13592bb3b..d318a0dbcdd 100644 --- a/website/src/css/sponsors.css +++ b/website/src/css/sponsors.css @@ -12,7 +12,7 @@ .sponsorSection > div { display: flex; flex-direction: row; - width: 460px; + width: 500px; border: 1px solid var(--ifm-color-primary); border-radius: 10px; margin: 0 auto; diff --git a/website/src/pages/index.tsx b/website/src/pages/index.tsx index d958b3bc937..aa9cc9912c5 100644 --- a/website/src/pages/index.tsx +++ b/website/src/pages/index.tsx @@ -98,20 +98,13 @@ function Home() {
- Sponsored by + Supported by the following 💎 Premium Sponsors: -   and   -
diff --git a/website/static/img/blog/vobu.png b/website/static/img/blog/vobu.png deleted file mode 100644 index 0ea5ea72b36..00000000000 Binary files a/website/static/img/blog/vobu.png and /dev/null differ diff --git a/website/static/img/blog/wdio-plus-sl-black.png b/website/static/img/blog/wdio-plus-sl-black.png deleted file mode 100644 index 3e5d95f4dd3..00000000000 Binary files a/website/static/img/blog/wdio-plus-sl-black.png and /dev/null differ diff --git a/website/static/img/blog/wdio-plus-sl-white.png b/website/static/img/blog/wdio-plus-sl-white.png deleted file mode 100644 index f1a75373212..00000000000 Binary files a/website/static/img/blog/wdio-plus-sl-white.png and /dev/null differ diff --git a/website/static/img/sponsors/eslint_black.svg b/website/static/img/sponsors/eslint_black.svg deleted file mode 100644 index 95a8a333fdd..00000000000 --- a/website/static/img/sponsors/eslint_black.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/website/static/img/sponsors/eslint_white.svg b/website/static/img/sponsors/eslint_white.svg deleted file mode 100644 index d0a240ab87d..00000000000 --- a/website/static/img/sponsors/eslint_white.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/website/static/img/sponsors/saucelabs_black.svg b/website/static/img/sponsors/saucelabs_black.svg deleted file mode 100644 index 16bd9c3ea99..00000000000 --- a/website/static/img/sponsors/saucelabs_black.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/website/static/img/sponsors/saucelabs_white.svg b/website/static/img/sponsors/saucelabs_white.svg deleted file mode 100644 index de0fa1be82e..00000000000 --- a/website/static/img/sponsors/saucelabs_white.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - -