From db529b39aa2dfc6697d51364152eb527489b7e05 Mon Sep 17 00:00:00 2001 From: dprevost-perso Date: Mon, 3 Aug 2026 07:25:22 -0400 Subject: [PATCH 1/6] POC multiRemote --- package-lock.json | 90 +++++++++++++++------ package.json | 1 - src/matchers/asymmetrics/multiRemoteText.ts | 75 +++++++++++++++++ src/matchers/asymmetrics/oneOf.ts | 7 +- src/matchers/browser/toHaveTitle.ts | 69 ++++++++++++++-- test/__mocks__/@wdio/globals.ts | 23 ++++++ types-checks-filter-out-node_modules.js | 2 + types/expect-webdriverio.d.ts | 24 +++++- yalc.lock | 10 +++ 9 files changed, 262 insertions(+), 39 deletions(-) create mode 100644 src/matchers/asymmetrics/multiRemoteText.ts create mode 100644 yalc.lock diff --git a/package-lock.json b/package-lock.json index 0e22f7bc9..0c57fcd93 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,6 +55,63 @@ } } }, + ".yalc/webdriverio": { + "version": "9.30.0-multiremote.0", + "license": "MIT", + "dependencies": { + "@types/node": "^20.11.30", + "@types/sinonjs__fake-timers": "^8.1.5", + "@wdio/config": "*", + "@wdio/logger": "9.29.1", + "@wdio/protocols": "*", + "@wdio/repl": "*", + "@wdio/types": "*", + "@wdio/utils": "*", + "archiver": "^7.0.1", + "aria-query": "^5.3.0", + "cheerio": "^1.0.0-rc.12", + "css-shorthand-properties": "^1.1.1", + "css-value": "^0.0.1", + "grapheme-splitter": "^1.0.4", + "htmlfy": "^0.8.1", + "is-plain-obj": "^4.1.0", + "jszip": "^3.10.1", + "lodash.clonedeep": "^4.5.0", + "lodash.zip": "^4.2.0", + "query-selector-shadow-dom": "^1.0.1", + "resq": "^1.11.0", + "rgb2hex": "0.2.5", + "serialize-error": "^12.0.0", + "urlpattern-polyfill": "^10.0.0", + "webdriver": "*" + }, + "engines": { + "node": ">=18.20.0" + }, + "peerDependencies": { + "puppeteer-core": ">=22.x || <=24.x" + }, + "peerDependenciesMeta": { + "puppeteer-core": { + "optional": true + } + } + }, + ".yalc/webdriverio/node_modules/@types/node": { + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + ".yalc/webdriverio/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, "node_modules/@babel/code-frame": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", @@ -2473,6 +2530,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", + "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", + "license": "MIT" + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -3283,9 +3346,9 @@ } }, "node_modules/@wdio/types/node_modules/@types/node": { - "version": "20.19.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", - "integrity": "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==", + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -9770,27 +9833,6 @@ } } }, - "node_modules/webdriverio/node_modules/@types/node": { - "version": "20.19.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz", - "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/webdriverio/node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", - "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", - "license": "MIT" - }, - "node_modules/webdriverio/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", diff --git a/package.json b/package.json index 5061eac24..74a97fa94 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,6 @@ "tsc:root-types": "node types-checks-filter-out-node_modules.js", "test": "run-s test:*", "test:tsc": "tsc --project tsconfig.json --noEmit --rootDir .", - "test:lint": "eslint .", "test:unit": "vitest --run", "test:types": "npm run ts && npm run tsc:root-types", "ts": "run-s ts:* ts:*:*", diff --git a/src/matchers/asymmetrics/multiRemoteText.ts b/src/matchers/asymmetrics/multiRemoteText.ts new file mode 100644 index 000000000..a0ea548f5 --- /dev/null +++ b/src/matchers/asymmetrics/multiRemoteText.ts @@ -0,0 +1,75 @@ +// import type { StringOptions } from 'expect-webdriverio' +// import { compareText, } from '../../utils.js' +// import { WdioAsymmetricMatchers } from './asymmetricsUtils.js' +// import { OneOfMatcher } from './oneOf.js' + +// /** +// * oneOf matcher is used to check if a string matches any of the provided strings or regular expressions. +// */ +// export class MultiRemoteText extends WdioAsymmetricMatchers>> { +// public options: StringOptions = {} + +// constructor(browser: WebdriverIO.MultiRemoteBrowser, sample: MaybeArrayOrMultiRemoteValues>) { +// super(sample) +// } + +// private setOptions(options: StringOptions): MultiRemoteText { +// this.options = options +// return this +// } + +// public asymmetricMatch(actual: string | string[]): boolean { +// if (Array.isArray(this.sample) && Array.isArray(actual)) { +// return this.sample.every((sampleValue, index) => { +// return compareText(actual[index], sampleValue, this.options).success +// }) +// } else if (typeof this.sample === 'object' ) { +// const intanceNames = Object.keys(this.sample) +// const expectedValues = Object.values(this.sample) +// return browser.select(intanceNames) +// } +// return compareText(actual, this.sample, this.options).success +// } + +// public withOptions(options: StringOptions): MultiRemoteText { +// // When `toHave` Matchers want to injects their global options into the asymmetric matcher, +// // we need to clone it to avoid mutating the original matcher instance if reuses in multiple assertions with different options. +// return new MultiRemoteText(...this.sample).setOptions(options) +// } + +// // Allow pretty-print in failure messages without quote for a better generic message +// public toAsymmetricMatcher() { +// // 1. Determine the prefix based on string options +// let prefix = '' + +// if (this.options.containing) { +// prefix = 'containing' +// } else if (this.options.atStart) { +// prefix = 'startingWith' +// } else if (this.options.atEnd) { +// prefix = 'endingWith' +// } else if (typeof this.options.atIndex === 'number') { +// prefix = `matchingAtIndex<${this.options.atIndex}>` +// } + +// // 2. Handle whether sample is an array (oneOf) or a single value +// const isArray = Array.isArray(this.sample) +// const samples = isArray ? this.sample : [this.sample] + +// const formattedSamples = samples +// .map((s) => (s instanceof RegExp ? s.toString() : `"${s}"`)) +// .join(', ') + +// // 3. Combine prefix with 'OneOf' suffix if it's an array, otherwise keep casing clean +// if (isArray) { +// prefix = prefix ? prefix + 'OneOf' : 'oneOf' +// } + +// // Return final structured matcher format +// return prefix ? `${prefix}<${formattedSamples}>` : formattedSamples +// } +// } + +// export function oneOf(...sample: Array | null>): OneOfMatcher { +// return new OneOfMatcher(...sample) +// } diff --git a/src/matchers/asymmetrics/oneOf.ts b/src/matchers/asymmetrics/oneOf.ts index f1dcf1899..854f1e6f1 100644 --- a/src/matchers/asymmetrics/oneOf.ts +++ b/src/matchers/asymmetrics/oneOf.ts @@ -1,15 +1,12 @@ -import type { HTMLOptions, StringOptions } from 'expect-webdriverio' +import type { StringOptions } from 'expect-webdriverio' import { compareTextWithArray } from '../../utils.js' import { WdioAsymmetricMatchers } from './asymmetricsUtils.js' /** * oneOf matcher is used to check if a string matches any of the provided strings or regular expressions. - * StringOptions is injected by the matcher for customization of the matching behavior. - * @see oneOfWithContextMatcher */ export class OneOfMatcher extends WdioAsymmetricMatchers | null>> { - // TODO support HTML options - public options: StringOptions | HTMLOptions = {} + public options: StringOptions= {} constructor(...sample: Array | null>) { super(sample) diff --git a/src/matchers/browser/toHaveTitle.ts b/src/matchers/browser/toHaveTitle.ts index 28e3b8035..db2d7dcc0 100644 --- a/src/matchers/browser/toHaveTitle.ts +++ b/src/matchers/browser/toHaveTitle.ts @@ -1,9 +1,22 @@ -import { waitUntil, enhanceError, compareText } from '../../utils.js' +import { waitUntil, enhanceError, compareText, isAsymmetricMatcher } from '../../utils.js' import { DEFAULT_OPTIONS } from '../../constants.js' +import type { StrategyResult } from '../../util/executeCommand.js' export async function toHaveTitle( browser: WebdriverIO.Browser, expectedValue: string | RegExp | AsymmetricMatcher, + options?: ExpectWebdriverIO.StringOptions +): Promise + +export async function toHaveTitle( + browser: WebdriverIO.MultiRemoteBrowser, + expectedValue: MaybeArrayOrMultiRemoteValues>, + options: ExpectWebdriverIO.StringOptions +): Promise + +export async function toHaveTitle( + browser: WebdriverIO.Browser | WebdriverIO.MultiRemoteBrowser, + expectedValue: MaybeArrayOrMultiRemoteValues>, options: ExpectWebdriverIO.StringOptions = DEFAULT_OPTIONS ) { const { expectation = 'title', verb = 'have', isNot, matcherName = 'toHaveTitle' } = this @@ -16,11 +29,14 @@ export async function toHaveTitle( const { actual, success } = await waitUntil( async () => { - const actual = await browser.getTitle() - - const compareResult = compareText(actual, expectedValue, options) - return { actual, success: compareResult.success, subject: browser } + if (browser.isMultiremote) { + return await compareMultiRemoteTitles(browser, expectedValue, options) + } else if (typeof expectedValue === 'object' || Array.isArray(expectedValue) && !isAsymmetricMatcher(expectedValue)) { + throw new Error('Expected value object or array is not supported for a single browser instance. Use a string, RegExp or asymmetric matcher instead.') + } else { + return await compareBrowserTitle(browser, expectedValue, options) + } }, isNot, { wait: options.wait, interval: options.interval } @@ -41,3 +57,46 @@ export async function toHaveTitle( return result } + +const compareBrowserTitle = async ( + browser: WebdriverIO.Browser, + expectedValue: string | RegExp | AsymmetricMatcher, + options: ExpectWebdriverIO.StringOptions +): Promise> => { + const actual = await browser.getTitle() + const result = compareText(actual, expectedValue, options) + return { actual: result.actual, success: result.success, subject: browser } +} + +const compareMultiRemoteTitles = async ( + browser: WebdriverIO.MultiRemoteBrowser, + expectedValue: MaybeArrayOrMultiRemoteValues>, + options: ExpectWebdriverIO.StringOptions +): Promise>> => { + let browserNames: string[] | undefined + let expectedValues: MaybeArray> | undefined + + if (typeof expectedValue === 'object') { + browserNames = Object.keys(expectedValue) + if (browserNames.length === 0) { + throw new Error('Expected value object is empty. Please provide at least one browser instance name with its expected title.') + } + + expectedValues = Object.values(expectedValue) + } else { + expectedValues = expectedValue + } + const actual = await (browserNames ? browser.select(browserNames) : browser).getTitle() + + if (Array.isArray(actual)){ + const results = actual.map((title, index) => compareText(title, Array.isArray(expectedValues) ? expectedValues[index] : expectedValues, options)) + return { actual: results.map(r => r.actual), success: results.every(r => r.success), subject: browser } + } else if (Array.isArray(expectedValues)) { + throw new Error('Expected value is an array but actual value is not. Please provide a single expected value for a single browser instance.') + } + + const result = compareText(actual, expectedValues, options) + return { ...result, subject: browser } + +} + diff --git a/test/__mocks__/@wdio/globals.ts b/test/__mocks__/@wdio/globals.ts index d7c5e30fd..337670fd7 100644 --- a/test/__mocks__/@wdio/globals.ts +++ b/test/__mocks__/@wdio/globals.ts @@ -215,3 +215,26 @@ export const browserFactory = (elementArrayLength = 2): WebdriverIO.Browser => { } export const browser = browserFactory() + +export const multiRemoteBrowserFactory = (): WebdriverIO.MultiRemoteBrowser => { + const chromeBrowser = browserFactory() + const firefoxBrowser = browserFactory() + const multiRemoteBrowser = { + 'chrome': chromeBrowser, + 'firefox': firefoxBrowser, + select: vi.fn(), + } satisfies Partial as unknown as WebdriverIO.MultiRemoteBrowser + + vi.mocked(multiRemoteBrowser.select).mockImplementation((instanceNames: string[]) => { + const selectedBrowsers: Record = {} + for (const name of instanceNames) { + selectedBrowsers[name] = multiRemoteBrowser[name as keyof WebdriverIO.MultiRemoteBrowser] as WebdriverIO.Browser + } + // TODO dpreovst to review + return selectedBrowsers as unknown as WebdriverIO.MultiRemoteBrowser + }) + + return multiRemoteBrowser +} + +export const multiRemoteBrowser = multiRemoteBrowserFactory() diff --git a/types-checks-filter-out-node_modules.js b/types-checks-filter-out-node_modules.js index f2cf264b3..f04f4df2a 100644 --- a/types-checks-filter-out-node_modules.js +++ b/types-checks-filter-out-node_modules.js @@ -12,6 +12,8 @@ const excludeList = [ 'node_modules/urlpattern-polyfill/dist/index.d.ts', 'node_modules/webdriverio/build/commands/browser/getPuppeteer.d.ts', 'node_modules/webdriverio/build/types.d.ts', + '.yalc/webdriverio/build/clock.d.ts', + '.yalc/webdriverio/build/commands/browser/emulate.d.ts', // Add more paths or patterns as needed ] diff --git a/types/expect-webdriverio.d.ts b/types/expect-webdriverio.d.ts index 8e788531c..ab65b74f7 100644 --- a/types/expect-webdriverio.d.ts +++ b/types/expect-webdriverio.d.ts @@ -51,6 +51,8 @@ type MaybeArrayOrOneOf = T | (T | ExpectWebdriverIO.OneOfPartialMatcher = T | ExpectWebdriverIO.OneOfPartialMatcher> +type MaybeArrayOrMultiRemoteValues = T | MaybeArray | Record + /** * Real Promise and wdio chainable promise types. */ @@ -78,6 +80,7 @@ type MockPromise = Promise * Type helpers allowing to use the function when the expect(actual: T) is of the expected type T. */ type FnWhenBrowser = ActualT extends WebdriverIO.Browser ? Fn : never +type FnWhenBrowserOrMultiRemote = ActualT extends WebdriverIO.Browser ? FnBrowser : ActualT extends WebdriverIO.MultiRemoteBrowser ? FnMultiRemote : never /** * Enables distinct function signatures for single elements versus arrays of elements. * @@ -109,10 +112,23 @@ interface WdioBrowserMatchers<_R, ActualT>{ */ toHaveUrl: FnWhenBrowser, options?: ExpectWebdriverIO.StringOptions) => Promise> - /** - * `WebdriverIO.Browser` -> `getTitle` - */ - toHaveTitle: FnWhenBrowser, options?: ExpectWebdriverIO.StringOptions) => Promise> + toHaveTitle: FnWhenBrowserOrMultiRemote `getTitle` + */ + ( + title: string | RegExp | ExpectWebdriverIO.PartialMatcher, + options?: ExpectWebdriverIO.StringOptions + ) => Promise, + + /** + * `WebdriverIO.MultiRemoteBrowser` -> `getTitle` + */ + ( + title: MaybeArrayOrMultiRemoteValues>, + options?: ExpectWebdriverIO.StringOptions + ) => Promise + > /** * `WebdriverIO.Browser` -> `execute` diff --git a/yalc.lock b/yalc.lock new file mode 100644 index 000000000..55657e366 --- /dev/null +++ b/yalc.lock @@ -0,0 +1,10 @@ +{ + "version": "v1", + "packages": { + "webdriverio": { + "signature": "03c36b16eefcd1ce8383ca77aa23c9e7", + "file": true, + "replaced": "9.30.0-multiremote.0" + } + } +} \ No newline at end of file From 927f1b7ef223df2973f584f0a8ce9d26d8deca2b Mon Sep 17 00:00:00 2001 From: dprevost-perso Date: Mon, 3 Aug 2026 20:22:29 -0400 Subject: [PATCH 2/6] custom wdio with yalc --- package-lock.json | 102 ++++++-------------- package.json | 4 +- playgrounds/multi-remote-mocha/package.json | 2 +- playgrounds/multi-remote-mocha/yalc.lock | 10 ++ types-checks-filter-out-node_modules.js | 3 +- yalc.lock | 13 ++- 6 files changed, 57 insertions(+), 77 deletions(-) create mode 100644 playgrounds/multi-remote-mocha/yalc.lock diff --git a/package-lock.json b/package-lock.json index 0c57fcd93..7e72448cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "@vitest/coverage-v8": "^4.1.10", "@vitest/eslint-plugin": "^1.6.26", "@wdio/eslint": "^0.1.3", - "@wdio/types": "^9.30.1", + "@wdio/types": "file:.yalc/@wdio/types", "eslint": "^9.39.5", "husky": "^9.1.7", "npm-run-all2": "^9.0.3", @@ -33,7 +33,7 @@ "strip-ansi": "^7.2.0", "typescript": "^5.9.3", "vitest": "^4.1.10", - "webdriverio": "^9.30.1" + "webdriverio": "file:.yalc/webdriverio" }, "engines": { "node": ">=20" @@ -55,8 +55,33 @@ } } }, + ".yalc/@wdio/types": { + "version": "9.30.1", + "license": "MIT", + "dependencies": { + "@types/node": "^20.1.0" + }, + "engines": { + "node": ">=18.20.0" + } + }, + ".yalc/@wdio/types/node_modules/@types/node": { + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + ".yalc/@wdio/types/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, ".yalc/webdriverio": { - "version": "9.30.0-multiremote.0", + "version": "9.30.1", "license": "MIT", "dependencies": { "@types/node": "^20.11.30", @@ -3334,31 +3359,8 @@ "license": "MIT" }, "node_modules/@wdio/types": { - "version": "9.30.1", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.30.1.tgz", - "integrity": "sha512-umKQDbSmu3/ucUsIA5UUTK5gCWnClyVpWz3fC39044rCXQ3zCd1a3GoJibbAITKiwnPFf2yU3LvTa+C78sh9Lg==", - "license": "MIT", - "dependencies": { - "@types/node": "^20.1.0" - }, - "engines": { - "node": ">=18.20.0" - } - }, - "node_modules/@wdio/types/node_modules/@types/node": { - "version": "20.19.43", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", - "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@wdio/types/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" + "resolved": ".yalc/@wdio/types", + "link": true }, "node_modules/@wdio/utils": { "version": "9.30.1", @@ -9790,48 +9792,8 @@ "license": "MIT" }, "node_modules/webdriverio": { - "version": "9.30.1", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.30.1.tgz", - "integrity": "sha512-HvoMHVPj1Ky04h0kEELKilWuzAi0Ctpmfw5V7LStQmOzbXkzfxxMutSB3SezJAYCWCnZ6zsEw7TdDWubWGY7qA==", - "license": "MIT", - "dependencies": { - "@types/node": "^20.11.30", - "@types/sinonjs__fake-timers": "^8.1.5", - "@wdio/config": "9.30.1", - "@wdio/logger": "9.29.1", - "@wdio/protocols": "9.30.1", - "@wdio/repl": "9.16.2", - "@wdio/types": "9.30.1", - "@wdio/utils": "9.30.1", - "archiver": "^7.0.1", - "aria-query": "^5.3.0", - "cheerio": "^1.0.0-rc.12", - "css-shorthand-properties": "^1.1.1", - "css-value": "^0.0.1", - "grapheme-splitter": "^1.0.4", - "htmlfy": "^0.8.1", - "is-plain-obj": "^4.1.0", - "jszip": "^3.10.1", - "lodash.clonedeep": "^4.5.0", - "lodash.zip": "^4.2.0", - "query-selector-shadow-dom": "^1.0.1", - "resq": "^1.11.0", - "rgb2hex": "0.2.5", - "serialize-error": "^12.0.0", - "urlpattern-polyfill": "^10.0.0", - "webdriver": "9.30.1" - }, - "engines": { - "node": ">=18.20.0" - }, - "peerDependencies": { - "puppeteer-core": ">=22.x || <=24.x" - }, - "peerDependenciesMeta": { - "puppeteer-core": { - "optional": true - } - } + "resolved": ".yalc/webdriverio", + "link": true }, "node_modules/whatwg-encoding": { "version": "3.1.1", diff --git a/package.json b/package.json index 74a97fa94..bf923e35e 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "@vitest/coverage-v8": "^4.1.10", "@vitest/eslint-plugin": "^1.6.26", "@wdio/eslint": "^0.1.3", - "@wdio/types": "^9.30.1", + "@wdio/types": "file:.yalc/@wdio/types", "eslint": "^9.39.5", "husky": "^9.1.7", "npm-run-all2": "^9.0.3", @@ -100,7 +100,7 @@ "strip-ansi": "^7.2.0", "typescript": "^5.9.3", "vitest": "^4.1.10", - "webdriverio": "^9.30.1" + "webdriverio": "file:.yalc/webdriverio" }, "peerDependencies": { "@wdio/globals": "^9.0.0", diff --git a/playgrounds/multi-remote-mocha/package.json b/playgrounds/multi-remote-mocha/package.json index 051be45c8..5a8f660e7 100644 --- a/playgrounds/multi-remote-mocha/package.json +++ b/playgrounds/multi-remote-mocha/package.json @@ -11,7 +11,7 @@ "checks:all": "npm run typecheck && npm run lint && npm test" }, "devDependencies": { - "@wdio/mocha-framework": "^9.30.1", + "@wdio/mocha-framework": "file:.yalc/@wdio/mocha-framework", "eslint-plugin-mocha": "^11.3.0", "expect-webdriverio": "file:../.." }, diff --git a/playgrounds/multi-remote-mocha/yalc.lock b/playgrounds/multi-remote-mocha/yalc.lock new file mode 100644 index 000000000..490ec4e67 --- /dev/null +++ b/playgrounds/multi-remote-mocha/yalc.lock @@ -0,0 +1,10 @@ +{ + "version": "v1", + "packages": { + "@wdio/mocha-framework": { + "signature": "f5e7cba226f4b49b46c10b249e62cdce", + "file": true, + "replaced": "^9.30.1" + } + } +} \ No newline at end of file diff --git a/types-checks-filter-out-node_modules.js b/types-checks-filter-out-node_modules.js index f04f4df2a..0ffe43bcd 100644 --- a/types-checks-filter-out-node_modules.js +++ b/types-checks-filter-out-node_modules.js @@ -12,8 +12,7 @@ const excludeList = [ 'node_modules/urlpattern-polyfill/dist/index.d.ts', 'node_modules/webdriverio/build/commands/browser/getPuppeteer.d.ts', 'node_modules/webdriverio/build/types.d.ts', - '.yalc/webdriverio/build/clock.d.ts', - '.yalc/webdriverio/build/commands/browser/emulate.d.ts', + '.yalc/' // Add more paths or patterns as needed ] diff --git a/yalc.lock b/yalc.lock index 55657e366..e57b42d1f 100644 --- a/yalc.lock +++ b/yalc.lock @@ -2,9 +2,18 @@ "version": "v1", "packages": { "webdriverio": { - "signature": "03c36b16eefcd1ce8383ca77aa23c9e7", + "signature": "4d1e8fff5fd9509e8adbf5bc736ce145", "file": true, - "replaced": "9.30.0-multiremote.0" + "replaced": "^9.30.1" + }, + "@wdio/mocha-framework": { + "signature": "f5e7cba226f4b49b46c10b249e62cdce", + "file": true + }, + "@wdio/types": { + "signature": "14c34a998d912ea8cd21174a62dda558", + "file": true, + "replaced": "^9.30.1" } } } \ No newline at end of file From f4b9de7ff6779db0436bce9796cfe76fb872e225 Mon Sep 17 00:00:00 2001 From: dprevost-perso Date: Mon, 3 Aug 2026 20:57:16 -0400 Subject: [PATCH 3/6] More yalc --- playgrounds/package.json | 15 ++++++++++----- playgrounds/yalc.lock | 25 +++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 playgrounds/yalc.lock diff --git a/playgrounds/package.json b/playgrounds/package.json index c45b5e92d..7c8646e51 100644 --- a/playgrounds/package.json +++ b/playgrounds/package.json @@ -4,7 +4,12 @@ "type": "module", "private": true, "description": "Playground projects common dependencies", - "workspaces": ["./jasmine", "./jest", "./mocha", "./multi-remote-mocha"], + "workspaces": [ + "./jasmine", + "./jest", + "./mocha", + "./multi-remote-mocha" + ], "scripts": { "preinstall": "cd .. && npm run compile", "setup": "npm install", @@ -15,10 +20,10 @@ "snapshots:update": "npm exec --workspace=mocha --call 'npm run snapshots:update'" }, "devDependencies": { - "@wdio/cli": "^9.30.0", - "@wdio/globals": "^9.29.1", - "@wdio/local-runner": "^9.30.0", - "@wdio/spec-reporter": "^9.29.1", + "@wdio/cli": "file:.yalc/@wdio/cli", + "@wdio/globals": "file:.yalc/@wdio/globals", + "@wdio/local-runner": "file:.yalc/@wdio/local-runner", + "@wdio/spec-reporter": "file:.yalc/@wdio/spec-reporter", "@wdio/visual-service": "^10.1.0", "eslint": "^9.39.4", "ts-node": "^10.9.2", diff --git a/playgrounds/yalc.lock b/playgrounds/yalc.lock new file mode 100644 index 000000000..0133bcf79 --- /dev/null +++ b/playgrounds/yalc.lock @@ -0,0 +1,25 @@ +{ + "version": "v1", + "packages": { + "@wdio/cli": { + "signature": "2e046160db3d01a285b1ec8616390f54", + "file": true, + "replaced": "^9.30.0" + }, + "@wdio/globals": { + "signature": "175d9b28d35f5ff1f33d2a40df2a001f", + "file": true, + "replaced": "^9.29.1" + }, + "@wdio/local-runner": { + "signature": "6f8e94369de4354eaaceb01a28b7b1d1", + "file": true, + "replaced": "^9.30.0" + }, + "@wdio/spec-reporter": { + "signature": "5436f1477dd3c27922186f336a7e9817", + "file": true, + "replaced": "^9.29.1" + } + } +} \ No newline at end of file From 09ad6ea66ffd31e6acc6a4bbdd727e517f709d4e Mon Sep 17 00:00:00 2001 From: dprevost-perso Date: Tue, 4 Aug 2026 06:21:36 -0400 Subject: [PATCH 4/6] more yalc --- package-lock.json | 664 +++++++++++++++++++++++++++++++--- package.json | 2 + playgrounds/package-lock.json | 572 ++++++++++++++--------------- playgrounds/package.json | 4 +- playgrounds/yalc.lock | 12 +- yalc.lock | 8 +- 6 files changed, 918 insertions(+), 344 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7e72448cc..daa00c6c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,8 @@ "license": "MIT", "dependencies": { "@vitest/snapshot": "^4.1.10", + "@wdio/mocha-framework": "file:.yalc/@wdio/mocha-framework", + "@wdio/utils": "file:.yalc/@wdio/utils", "deep-eql": "^5.0.2", "expect": "^30.4.1", "jest-matcher-utils": "^30.4.1" @@ -55,9 +57,39 @@ } } }, - ".yalc/@wdio/types": { + ".yalc/@wdio/mocha-framework": { "version": "9.30.1", "license": "MIT", + "dependencies": { + "@types/mocha": "^10.0.6", + "@types/node": "^20.11.28", + "@wdio/logger": "9.29.1", + "@wdio/types": "*", + "@wdio/utils": "*", + "mocha": "^10.3.0" + }, + "engines": { + "node": ">=18.20.0" + } + }, + ".yalc/@wdio/mocha-framework/node_modules/@types/node": { + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + ".yalc/@wdio/mocha-framework/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + ".yalc/@wdio/types": { + "version": "9.30.1-multiremote.0", + "license": "MIT", "dependencies": { "@types/node": "^20.1.0" }, @@ -80,8 +112,31 @@ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, + ".yalc/@wdio/utils": { + "version": "9.30.1-multiremote.0", + "license": "MIT", + "dependencies": { + "@puppeteer/browsers": "^2.2.0", + "@wdio/logger": "9.29.1", + "@wdio/types": "*", + "decamelize": "^6.0.0", + "deepmerge-ts": "^7.0.3", + "edgedriver": "^6.1.2", + "geckodriver": "^6.1.1", + "get-port": "^7.0.0", + "import-meta-resolve": "^4.0.0", + "locate-app": "^2.2.24", + "mitt": "^3.0.1", + "safaridriver": "^1.0.0", + "split2": "^4.2.0", + "wait-port": "^1.1.0" + }, + "engines": { + "node": ">=18.20.0" + } + }, ".yalc/webdriverio": { - "version": "9.30.1", + "version": "9.30.1-multiremote.0", "license": "MIT", "dependencies": { "@types/node": "^20.11.30", @@ -2529,7 +2584,6 @@ "version": "10.0.10", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", - "dev": true, "license": "MIT" }, "node_modules/@types/ms": { @@ -3227,6 +3281,52 @@ "node": ">=18.20.0" } }, + "node_modules/@wdio/config/node_modules/@types/node": { + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@wdio/config/node_modules/@wdio/types": { + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.30.1.tgz", + "integrity": "sha512-umKQDbSmu3/ucUsIA5UUTK5gCWnClyVpWz3fC39044rCXQ3zCd1a3GoJibbAITKiwnPFf2yU3LvTa+C78sh9Lg==", + "license": "MIT", + "dependencies": { + "@types/node": "^20.1.0" + }, + "engines": { + "node": ">=18.20.0" + } + }, + "node_modules/@wdio/config/node_modules/@wdio/utils": { + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.30.1.tgz", + "integrity": "sha512-V+JE4G6ZO9ubdjDfHDHgp/2EWs5WCXk4IT2c2ZMoWy2qALqq4wqaeZ0ce05c3z0+N+8+xMS/Q9donDiIY1yk5A==", + "license": "MIT", + "dependencies": { + "@puppeteer/browsers": "^2.2.0", + "@wdio/logger": "9.29.1", + "@wdio/types": "9.30.1", + "decamelize": "^6.0.0", + "deepmerge-ts": "^7.0.3", + "edgedriver": "^6.1.2", + "geckodriver": "^6.1.1", + "get-port": "^7.0.0", + "import-meta-resolve": "^4.0.0", + "locate-app": "^2.2.24", + "mitt": "^3.0.1", + "safaridriver": "^1.0.0", + "split2": "^4.2.0", + "wait-port": "^1.1.0" + }, + "engines": { + "node": ">=18.20.0" + } + }, "node_modules/@wdio/config/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -3270,6 +3370,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@wdio/config/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, "node_modules/@wdio/eslint": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@wdio/eslint/-/eslint-0.1.3.tgz", @@ -3325,6 +3431,10 @@ "node": ">=18.20.0" } }, + "node_modules/@wdio/mocha-framework": { + "resolved": ".yalc/@wdio/mocha-framework", + "link": true + }, "node_modules/@wdio/protocols": { "version": "9.30.1", "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-9.30.1.tgz", @@ -3363,29 +3473,8 @@ "link": true }, "node_modules/@wdio/utils": { - "version": "9.30.1", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.30.1.tgz", - "integrity": "sha512-V+JE4G6ZO9ubdjDfHDHgp/2EWs5WCXk4IT2c2ZMoWy2qALqq4wqaeZ0ce05c3z0+N+8+xMS/Q9donDiIY1yk5A==", - "license": "MIT", - "dependencies": { - "@puppeteer/browsers": "^2.2.0", - "@wdio/logger": "9.29.1", - "@wdio/types": "9.30.1", - "decamelize": "^6.0.0", - "deepmerge-ts": "^7.0.3", - "edgedriver": "^6.1.2", - "geckodriver": "^6.1.1", - "get-port": "^7.0.0", - "import-meta-resolve": "^4.0.0", - "locate-app": "^2.2.24", - "mitt": "^3.0.1", - "safaridriver": "^1.0.0", - "split2": "^4.2.0", - "wait-port": "^1.1.0" - }, - "engines": { - "node": ">=18.20.0" - } + "resolved": ".yalc/@wdio/utils", + "link": true }, "node_modules/@zip.js/zip.js": { "version": "2.8.34", @@ -3459,6 +3548,15 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-regex": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", @@ -3487,7 +3585,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -3501,7 +3598,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -3604,7 +3700,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, "license": "Python-2.0" }, "node_modules/aria-query": { @@ -3863,6 +3958,18 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -3878,6 +3985,24 @@ "balanced-match": "^1.0.0" } }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "license": "ISC" + }, "node_modules/browserslist": { "version": "4.28.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", @@ -4599,6 +4724,15 @@ "node": ">=8" } }, + "node_modules/diff": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -4815,7 +4949,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -5425,11 +5558,22 @@ "node": ">=16.0.0" } }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -5455,6 +5599,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -5496,14 +5649,12 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -5761,6 +5912,15 @@ "node": ">=8" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -5955,7 +6115,6 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -5977,6 +6136,18 @@ "node": ">= 12" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-builtin-module": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-5.0.0.tgz", @@ -6013,7 +6184,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6032,7 +6202,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -6086,6 +6255,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", @@ -6620,7 +6798,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", - "dev": true, "funding": [ { "type": "github", @@ -7123,7 +7300,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -7386,6 +7562,292 @@ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "license": "MIT" }, + "node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/mocha/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/mocha/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "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" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "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", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "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==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "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==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mocha/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/mocha/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.2.tgz", + "integrity": "sha512-Nt9ZJjXTv5R8MHbqby/wXQ6Gi0Bb3TcYZkR1bzuL4yB2OxWPkXknz513gEF0GoA6tn00UpbPvERW8rzCuWCA6w==", + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/modern-tar": { "version": "0.7.7", "resolved": "https://registry.npmjs.org/modern-tar/-/modern-tar-0.7.7.tgz", @@ -7726,7 +8188,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -7742,7 +8203,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -7898,7 +8358,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8215,6 +8674,15 @@ "dev": true, "license": "MIT" }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/rc9": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", @@ -8775,6 +9243,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -9108,7 +9585,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9315,6 +9791,18 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/ts-api-utils": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", @@ -9776,6 +10264,43 @@ "undici-types": "~6.21.0" } }, + "node_modules/webdriver/node_modules/@wdio/types": { + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.30.1.tgz", + "integrity": "sha512-umKQDbSmu3/ucUsIA5UUTK5gCWnClyVpWz3fC39044rCXQ3zCd1a3GoJibbAITKiwnPFf2yU3LvTa+C78sh9Lg==", + "license": "MIT", + "dependencies": { + "@types/node": "^20.1.0" + }, + "engines": { + "node": ">=18.20.0" + } + }, + "node_modules/webdriver/node_modules/@wdio/utils": { + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.30.1.tgz", + "integrity": "sha512-V+JE4G6ZO9ubdjDfHDHgp/2EWs5WCXk4IT2c2ZMoWy2qALqq4wqaeZ0ce05c3z0+N+8+xMS/Q9donDiIY1yk5A==", + "license": "MIT", + "dependencies": { + "@puppeteer/browsers": "^2.2.0", + "@wdio/logger": "9.29.1", + "@wdio/types": "9.30.1", + "decamelize": "^6.0.0", + "deepmerge-ts": "^7.0.3", + "edgedriver": "^6.1.2", + "geckodriver": "^6.1.1", + "get-port": "^7.0.0", + "import-meta-resolve": "^4.0.0", + "locate-app": "^2.2.24", + "mitt": "^3.0.1", + "safaridriver": "^1.0.0", + "split2": "^4.2.0", + "wait-port": "^1.1.0" + }, + "engines": { + "node": ">=18.20.0" + } + }, "node_modules/webdriver/node_modules/undici": { "version": "6.28.0", "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", @@ -9906,6 +10431,12 @@ "node": ">=0.10.0" } }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "license": "Apache-2.0" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -10157,6 +10688,54 @@ "node": ">=12" } }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/yargs/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -10215,7 +10794,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" diff --git a/package.json b/package.json index bf923e35e..088251619 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,8 @@ }, "dependencies": { "@vitest/snapshot": "^4.1.10", + "@wdio/mocha-framework": "file:.yalc/@wdio/mocha-framework", + "@wdio/utils": "file:.yalc/@wdio/utils", "deep-eql": "^5.0.2", "expect": "^30.4.1", "jest-matcher-utils": "^30.4.1" diff --git a/playgrounds/package-lock.json b/playgrounds/package-lock.json index 9e38155b7..b9593fa4d 100644 --- a/playgrounds/package-lock.json +++ b/playgrounds/package-lock.json @@ -15,14 +15,16 @@ "./multi-remote-mocha" ], "devDependencies": { - "@wdio/cli": "^9.30.0", - "@wdio/globals": "^9.29.1", - "@wdio/local-runner": "^9.30.0", - "@wdio/spec-reporter": "^9.29.1", + "@wdio/cli": "file:.yalc/@wdio/cli", + "@wdio/globals": "file:.yalc/@wdio/globals", + "@wdio/local-runner": "file:.yalc/@wdio/local-runner", + "@wdio/spec-reporter": "file:.yalc/@wdio/spec-reporter", + "@wdio/utils": "file:.yalc/@wdio/utils", "@wdio/visual-service": "^10.1.0", "eslint": "^9.39.4", "ts-node": "^10.9.2", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "webdriverio": "file:.yalc/webdriverio" } }, "..": { @@ -31,6 +33,8 @@ "license": "MIT", "dependencies": { "@vitest/snapshot": "^4.1.10", + "@wdio/mocha-framework": "file:.yalc/@wdio/mocha-framework", + "@wdio/utils": "file:.yalc/@wdio/utils", "deep-eql": "^5.0.2", "expect": "^30.4.1", "jest-matcher-utils": "^30.4.1" @@ -45,7 +49,7 @@ "@vitest/coverage-v8": "^4.1.10", "@vitest/eslint-plugin": "^1.6.26", "@wdio/eslint": "^0.1.3", - "@wdio/types": "^9.30.1", + "@wdio/types": "file:.yalc/@wdio/types", "eslint": "^9.39.5", "husky": "^9.1.7", "npm-run-all2": "^9.0.3", @@ -54,7 +58,7 @@ "strip-ansi": "^7.2.0", "typescript": "^5.9.3", "vitest": "^4.1.10", - "webdriverio": "^9.30.1" + "webdriverio": "file:.yalc/webdriverio" }, "engines": { "node": ">=20" @@ -8051,6 +8055,163 @@ "node": ">= 14" } }, + ".yalc/@wdio/cli": { + "version": "9.30.1", + "license": "MIT", + "dependencies": { + "@vitest/snapshot": "^2.1.1", + "@wdio/config": "*", + "@wdio/globals": "*", + "@wdio/logger": "9.29.1", + "@wdio/protocols": "*", + "@wdio/types": "*", + "@wdio/utils": "*", + "async-exit-hook": "^2.0.1", + "chalk": "^5.4.1", + "chokidar": "^4.0.0", + "create-wdio": "*", + "dotenv": "^17.2.0", + "import-meta-resolve": "^4.0.0", + "lodash.flattendeep": "^4.4.0", + "lodash.pickby": "^4.6.0", + "lodash.union": "^4.6.0", + "read-pkg-up": "^10.0.0", + "tsx": "^4.7.2", + "webdriverio": "*", + "yargs": "^17.7.2" + }, + "bin": { + "wdio": "bin/wdio.js" + }, + "engines": { + "node": ">=18.20.0" + } + }, + ".yalc/@wdio/globals": { + "version": "9.29.1", + "license": "MIT", + "engines": { + "node": ">=18.20.0" + }, + "peerDependencies": { + "expect-webdriverio": "^5.6.5", + "webdriverio": "^9.0.0" + }, + "peerDependenciesMeta": { + "expect-webdriverio": { + "optional": false + }, + "webdriverio": { + "optional": false + } + } + }, + ".yalc/@wdio/local-runner": { + "version": "9.30.1", + "license": "MIT", + "dependencies": { + "@types/node": "^20.1.0", + "@wdio/logger": "9.29.1", + "@wdio/repl": "*", + "@wdio/runner": "*", + "@wdio/types": "*", + "@wdio/xvfb": "9.30.1", + "exit-hook": "^4.0.0", + "expect-webdriverio": "^5.6.5", + "split2": "^4.1.0", + "stream-buffers": "^3.0.2" + }, + "engines": { + "node": ">=18.20.0" + } + }, + ".yalc/@wdio/local-runner/node_modules/@types/node": { + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + ".yalc/@wdio/local-runner/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + ".yalc/@wdio/spec-reporter": { + "version": "9.30.1", + "license": "MIT", + "dependencies": { + "@wdio/reporter": "*", + "@wdio/types": "*", + "chalk": "^5.1.2", + "easy-table": "^1.2.0", + "pretty-ms": "^9.0.0" + }, + "engines": { + "node": ">=18.20.0" + } + }, + ".yalc/@wdio/utils": {}, + ".yalc/webdriverio": { + "version": "9.30.1", + "license": "MIT", + "dependencies": { + "@types/node": "^20.11.30", + "@types/sinonjs__fake-timers": "^8.1.5", + "@wdio/config": "*", + "@wdio/logger": "9.29.1", + "@wdio/protocols": "*", + "@wdio/repl": "*", + "@wdio/types": "*", + "@wdio/utils": "*", + "archiver": "^7.0.1", + "aria-query": "^5.3.0", + "cheerio": "^1.0.0-rc.12", + "css-shorthand-properties": "^1.1.1", + "css-value": "^0.0.1", + "grapheme-splitter": "^1.0.4", + "htmlfy": "^0.8.1", + "is-plain-obj": "^4.1.0", + "jszip": "^3.10.1", + "lodash.clonedeep": "^4.5.0", + "lodash.zip": "^4.2.0", + "query-selector-shadow-dom": "^1.0.1", + "resq": "^1.11.0", + "rgb2hex": "0.2.5", + "serialize-error": "^12.0.0", + "urlpattern-polyfill": "^10.0.0", + "webdriver": "*" + }, + "engines": { + "node": ">=18.20.0" + }, + "peerDependencies": { + "puppeteer-core": ">=22.x || <=24.x" + }, + "peerDependenciesMeta": { + "puppeteer-core": { + "optional": true + } + } + }, + ".yalc/webdriverio/node_modules/@types/node": { + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + ".yalc/webdriverio/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, "jasmine": { "name": "expect-wdio-playground-jasmine", "version": "1.0.0", @@ -8106,7 +8267,7 @@ "name": "expect-wdio-playground-multi-remote-mocha", "version": "1.0.0", "devDependencies": { - "@wdio/mocha-framework": "^9.30.1", + "@wdio/mocha-framework": "file:.yalc/@wdio/mocha-framework", "eslint-plugin-mocha": "^11.3.0", "expect-webdriverio": "file:../.." }, @@ -8117,6 +8278,39 @@ "@wdio/spec-reporter": "*" } }, + "multi-remote-mocha/.yalc/@wdio/mocha-framework": { + "version": "9.30.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mocha": "^10.0.6", + "@types/node": "^20.11.28", + "@wdio/logger": "9.29.1", + "@wdio/types": "*", + "@wdio/utils": "*", + "mocha": "^10.3.0" + }, + "engines": { + "node": ">=18.20.0" + } + }, + "multi-remote-mocha/node_modules/@types/node": { + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "multi-remote-mocha/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/code-frame": { "version": "7.29.7", "license": "MIT", @@ -10968,63 +11162,8 @@ } }, "node_modules/@wdio/cli": { - "version": "9.30.0", - "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-9.30.0.tgz", - "integrity": "sha512-e5IqOvfjnyMfSYM6c++qe66kwMw24TA11b/sYDa3oPsHps06JaRzFqM4U0HZIUa+9QpNheat87VYJWrsRCKv1g==", - "license": "MIT", - "dependencies": { - "@vitest/snapshot": "^2.1.1", - "@wdio/config": "9.30.0", - "@wdio/globals": "9.29.1", - "@wdio/logger": "9.29.1", - "@wdio/protocols": "9.30.0", - "@wdio/types": "9.29.1", - "@wdio/utils": "9.30.0", - "async-exit-hook": "^2.0.1", - "chalk": "^5.4.1", - "chokidar": "^4.0.0", - "create-wdio": "9.30.0", - "dotenv": "^17.2.0", - "import-meta-resolve": "^4.0.0", - "lodash.flattendeep": "^4.4.0", - "lodash.pickby": "^4.6.0", - "lodash.union": "^4.6.0", - "read-pkg-up": "^10.0.0", - "tsx": "^4.7.2", - "webdriverio": "9.30.0", - "yargs": "^17.7.2" - }, - "bin": { - "wdio": "bin/wdio.js" - }, - "engines": { - "node": ">=18.20.0" - } - }, - "node_modules/@wdio/cli/node_modules/@wdio/utils": { - "version": "9.30.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.30.0.tgz", - "integrity": "sha512-MhTx8jKOtspogeMUmASFsmL6vRetwCpvfcAFHauYZ62UzPjFwHThIXorzoG90mrcS9Yl+c8Sj9BfX+bdxwXfsg==", - "license": "MIT", - "dependencies": { - "@puppeteer/browsers": "^2.2.0", - "@wdio/logger": "9.29.1", - "@wdio/types": "9.29.1", - "decamelize": "^6.0.0", - "deepmerge-ts": "^7.0.3", - "edgedriver": "^6.1.2", - "geckodriver": "^6.1.1", - "get-port": "^7.0.0", - "import-meta-resolve": "^4.0.0", - "locate-app": "^2.2.24", - "mitt": "^3.0.1", - "safaridriver": "^1.0.0", - "split2": "^4.2.0", - "wait-port": "^1.1.0" - }, - "engines": { - "node": ">=18.20.0" - } + "resolved": ".yalc/@wdio/cli", + "link": true }, "node_modules/@wdio/config": { "version": "9.30.0", @@ -11084,25 +11223,8 @@ } }, "node_modules/@wdio/globals": { - "version": "9.29.1", - "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-9.29.1.tgz", - "integrity": "sha512-F96BKppx4HGD64v+s57TM4K4zaxqUCg2RXHk6sjB2xrSa7P+d2VYV28ID2ddF7iSodVfPlpa1i2/jy8jMGrU8w==", - "license": "MIT", - "engines": { - "node": ">=18.20.0" - }, - "peerDependencies": { - "expect-webdriverio": "^5.6.5", - "webdriverio": "^9.0.0" - }, - "peerDependenciesMeta": { - "expect-webdriverio": { - "optional": false - }, - "webdriverio": { - "optional": false - } - } + "resolved": ".yalc/@wdio/globals", + "link": true }, "node_modules/@wdio/image-comparison-core": { "version": "2.1.0", @@ -11168,43 +11290,41 @@ "node": ">=18.20.0" } }, - "node_modules/@wdio/jasmine-framework/node_modules/undici-types": { - "version": "6.21.0", + "node_modules/@wdio/jasmine-framework/node_modules/@wdio/utils": { + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.30.1.tgz", + "integrity": "sha512-V+JE4G6ZO9ubdjDfHDHgp/2EWs5WCXk4IT2c2ZMoWy2qALqq4wqaeZ0ce05c3z0+N+8+xMS/Q9donDiIY1yk5A==", "dev": true, - "license": "MIT" - }, - "node_modules/@wdio/local-runner": { - "version": "9.30.0", - "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-9.30.0.tgz", - "integrity": "sha512-7W+vjAsccGXuy2g83vsc5zKwZSkmnEZDEzsORGhorJAWJPd3NwZ8LyyudBxWvSS4sLbJB0Ix4wx70lA8YoiQMA==", "license": "MIT", "dependencies": { - "@types/node": "^20.1.0", + "@puppeteer/browsers": "^2.2.0", "@wdio/logger": "9.29.1", - "@wdio/repl": "9.16.2", - "@wdio/runner": "9.30.0", - "@wdio/types": "9.29.1", - "@wdio/xvfb": "9.30.0", - "exit-hook": "^4.0.0", - "expect-webdriverio": "^5.6.5", - "split2": "^4.1.0", - "stream-buffers": "^3.0.2" + "@wdio/types": "9.30.1", + "decamelize": "^6.0.0", + "deepmerge-ts": "^7.0.3", + "edgedriver": "^6.1.2", + "geckodriver": "^6.1.1", + "get-port": "^7.0.0", + "import-meta-resolve": "^4.0.0", + "locate-app": "^2.2.24", + "mitt": "^3.0.1", + "safaridriver": "^1.0.0", + "split2": "^4.2.0", + "wait-port": "^1.1.0" }, "engines": { "node": ">=18.20.0" } }, - "node_modules/@wdio/local-runner/node_modules/@types/node": { - "version": "20.19.42", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@wdio/local-runner/node_modules/undici-types": { + "node_modules/@wdio/jasmine-framework/node_modules/undici-types": { "version": "6.21.0", + "dev": true, "license": "MIT" }, + "node_modules/@wdio/local-runner": { + "resolved": ".yalc/@wdio/local-runner", + "link": true + }, "node_modules/@wdio/logger": { "version": "9.29.1", "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.29.1.tgz", @@ -11222,48 +11342,8 @@ } }, "node_modules/@wdio/mocha-framework": { - "version": "9.30.1", - "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-9.30.1.tgz", - "integrity": "sha512-wGklhggr0kTMk6yDynCE+sdIQg+oSaHTDXWyXk0p0AGOjhTbm3sedg2fzawJLs/ecYjYS0VqPw/0JrBsWi3AaA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mocha": "^10.0.6", - "@types/node": "^20.11.28", - "@wdio/logger": "9.29.1", - "@wdio/types": "9.30.1", - "@wdio/utils": "9.30.1", - "mocha": "^10.3.0" - }, - "engines": { - "node": ">=18.20.0" - } - }, - "node_modules/@wdio/mocha-framework/node_modules/@types/node": { - "version": "20.19.42", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@wdio/mocha-framework/node_modules/@wdio/types": { - "version": "9.30.1", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.30.1.tgz", - "integrity": "sha512-umKQDbSmu3/ucUsIA5UUTK5gCWnClyVpWz3fC39044rCXQ3zCd1a3GoJibbAITKiwnPFf2yU3LvTa+C78sh9Lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^20.1.0" - }, - "engines": { - "node": ">=18.20.0" - } - }, - "node_modules/@wdio/mocha-framework/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" + "resolved": "multi-remote-mocha/.yalc/@wdio/mocha-framework", + "link": true }, "node_modules/@wdio/protocols": { "version": "9.30.0", @@ -11392,22 +11472,54 @@ "version": "6.21.0", "license": "MIT" }, - "node_modules/@wdio/spec-reporter": { - "version": "9.29.1", - "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-9.29.1.tgz", - "integrity": "sha512-iqlHW/qGDRGmxQKN7XyCHxfKphTbPNnniV3yxNXZRSGHCCQok5KFKOnj4fpUCKEyD5jtPAmP6Y0qc1UyR3Dc3Q==", + "node_modules/@wdio/runner/node_modules/webdriverio": { + "version": "9.30.0", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.30.0.tgz", + "integrity": "sha512-cmV/uSbCvnJ99QejGPVGlzb9MjiSYUts8VjdESnDKvA7JvRMIJK0l807Js7HDK/g6KG7j+D2apsFHGlT7W5UeA==", "license": "MIT", "dependencies": { - "@wdio/reporter": "9.29.1", + "@types/node": "^20.11.30", + "@types/sinonjs__fake-timers": "^8.1.5", + "@wdio/config": "9.30.0", + "@wdio/logger": "9.29.1", + "@wdio/protocols": "9.30.0", + "@wdio/repl": "9.16.2", "@wdio/types": "9.29.1", - "chalk": "^5.1.2", - "easy-table": "^1.2.0", - "pretty-ms": "^9.0.0" + "@wdio/utils": "9.30.0", + "archiver": "^7.0.1", + "aria-query": "^5.3.0", + "cheerio": "^1.0.0-rc.12", + "css-shorthand-properties": "^1.1.1", + "css-value": "^0.0.1", + "grapheme-splitter": "^1.0.4", + "htmlfy": "^0.8.1", + "is-plain-obj": "^4.1.0", + "jszip": "^3.10.1", + "lodash.clonedeep": "^4.5.0", + "lodash.zip": "^4.2.0", + "query-selector-shadow-dom": "^1.0.1", + "resq": "^1.11.0", + "rgb2hex": "0.2.5", + "serialize-error": "^12.0.0", + "urlpattern-polyfill": "^10.0.0", + "webdriver": "9.30.0" }, "engines": { "node": ">=18.20.0" + }, + "peerDependencies": { + "puppeteer-core": ">=22.x || <=24.x" + }, + "peerDependenciesMeta": { + "puppeteer-core": { + "optional": true + } } }, + "node_modules/@wdio/spec-reporter": { + "resolved": ".yalc/@wdio/spec-reporter", + "link": true + }, "node_modules/@wdio/types": { "version": "9.29.1", "resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.29.1.tgz", @@ -11436,60 +11548,8 @@ "license": "MIT" }, "node_modules/@wdio/utils": { - "version": "9.30.1", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.30.1.tgz", - "integrity": "sha512-V+JE4G6ZO9ubdjDfHDHgp/2EWs5WCXk4IT2c2ZMoWy2qALqq4wqaeZ0ce05c3z0+N+8+xMS/Q9donDiIY1yk5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@puppeteer/browsers": "^2.2.0", - "@wdio/logger": "9.29.1", - "@wdio/types": "9.30.1", - "decamelize": "^6.0.0", - "deepmerge-ts": "^7.0.3", - "edgedriver": "^6.1.2", - "geckodriver": "^6.1.1", - "get-port": "^7.0.0", - "import-meta-resolve": "^4.0.0", - "locate-app": "^2.2.24", - "mitt": "^3.0.1", - "safaridriver": "^1.0.0", - "split2": "^4.2.0", - "wait-port": "^1.1.0" - }, - "engines": { - "node": ">=18.20.0" - } - }, - "node_modules/@wdio/utils/node_modules/@types/node": { - "version": "20.19.43", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", - "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@wdio/utils/node_modules/@wdio/types": { - "version": "9.30.1", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.30.1.tgz", - "integrity": "sha512-umKQDbSmu3/ucUsIA5UUTK5gCWnClyVpWz3fC39044rCXQ3zCd1a3GoJibbAITKiwnPFf2yU3LvTa+C78sh9Lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^20.1.0" - }, - "engines": { - "node": ">=18.20.0" - } - }, - "node_modules/@wdio/utils/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" + "resolved": ".yalc/@wdio/utils", + "link": true }, "node_modules/@wdio/visual-service": { "version": "10.1.0", @@ -11505,9 +11565,9 @@ } }, "node_modules/@wdio/xvfb": { - "version": "9.30.0", - "resolved": "https://registry.npmjs.org/@wdio/xvfb/-/xvfb-9.30.0.tgz", - "integrity": "sha512-v2vkweVbf1nI3lqRjVMbRyWFqHxPrDE95sLq0IZLjZ8fnXtWWIF61ZxfUhLdrMKB6s3gXnOyZuWgEJFD7iDBGQ==", + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/@wdio/xvfb/-/xvfb-9.30.1.tgz", + "integrity": "sha512-ZvGUg+udJWsVmE8yC26pMMCYmvblBEItRxZ6MW/Ucf710dJUs14sY23LM9m33v/uqCYim5EsSNSxV0SaKTbveQ==", "license": "MIT", "dependencies": { "@wdio/logger": "9.29.1" @@ -17766,84 +17826,8 @@ "license": "MIT" }, "node_modules/webdriverio": { - "version": "9.30.0", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.30.0.tgz", - "integrity": "sha512-cmV/uSbCvnJ99QejGPVGlzb9MjiSYUts8VjdESnDKvA7JvRMIJK0l807Js7HDK/g6KG7j+D2apsFHGlT7W5UeA==", - "license": "MIT", - "dependencies": { - "@types/node": "^20.11.30", - "@types/sinonjs__fake-timers": "^8.1.5", - "@wdio/config": "9.30.0", - "@wdio/logger": "9.29.1", - "@wdio/protocols": "9.30.0", - "@wdio/repl": "9.16.2", - "@wdio/types": "9.29.1", - "@wdio/utils": "9.30.0", - "archiver": "^7.0.1", - "aria-query": "^5.3.0", - "cheerio": "^1.0.0-rc.12", - "css-shorthand-properties": "^1.1.1", - "css-value": "^0.0.1", - "grapheme-splitter": "^1.0.4", - "htmlfy": "^0.8.1", - "is-plain-obj": "^4.1.0", - "jszip": "^3.10.1", - "lodash.clonedeep": "^4.5.0", - "lodash.zip": "^4.2.0", - "query-selector-shadow-dom": "^1.0.1", - "resq": "^1.11.0", - "rgb2hex": "0.2.5", - "serialize-error": "^12.0.0", - "urlpattern-polyfill": "^10.0.0", - "webdriver": "9.30.0" - }, - "engines": { - "node": ">=18.20.0" - }, - "peerDependencies": { - "puppeteer-core": ">=22.x || <=24.x" - }, - "peerDependenciesMeta": { - "puppeteer-core": { - "optional": true - } - } - }, - "node_modules/webdriverio/node_modules/@types/node": { - "version": "20.19.42", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/webdriverio/node_modules/@wdio/utils": { - "version": "9.30.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.30.0.tgz", - "integrity": "sha512-MhTx8jKOtspogeMUmASFsmL6vRetwCpvfcAFHauYZ62UzPjFwHThIXorzoG90mrcS9Yl+c8Sj9BfX+bdxwXfsg==", - "license": "MIT", - "dependencies": { - "@puppeteer/browsers": "^2.2.0", - "@wdio/logger": "9.29.1", - "@wdio/types": "9.29.1", - "decamelize": "^6.0.0", - "deepmerge-ts": "^7.0.3", - "edgedriver": "^6.1.2", - "geckodriver": "^6.1.1", - "get-port": "^7.0.0", - "import-meta-resolve": "^4.0.0", - "locate-app": "^2.2.24", - "mitt": "^3.0.1", - "safaridriver": "^1.0.0", - "split2": "^4.2.0", - "wait-port": "^1.1.0" - }, - "engines": { - "node": ">=18.20.0" - } - }, - "node_modules/webdriverio/node_modules/undici-types": { - "version": "6.21.0", - "license": "MIT" + "resolved": ".yalc/webdriverio", + "link": true }, "node_modules/whatwg-encoding": { "version": "3.1.1", diff --git a/playgrounds/package.json b/playgrounds/package.json index 7c8646e51..afce52893 100644 --- a/playgrounds/package.json +++ b/playgrounds/package.json @@ -24,9 +24,11 @@ "@wdio/globals": "file:.yalc/@wdio/globals", "@wdio/local-runner": "file:.yalc/@wdio/local-runner", "@wdio/spec-reporter": "file:.yalc/@wdio/spec-reporter", + "@wdio/utils": "file:.yalc/@wdio/utils", "@wdio/visual-service": "^10.1.0", "eslint": "^9.39.4", "ts-node": "^10.9.2", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "webdriverio": "file:.yalc/webdriverio" } } diff --git a/playgrounds/yalc.lock b/playgrounds/yalc.lock index 0133bcf79..a3e17af35 100644 --- a/playgrounds/yalc.lock +++ b/playgrounds/yalc.lock @@ -3,23 +3,27 @@ "packages": { "@wdio/cli": { "signature": "2e046160db3d01a285b1ec8616390f54", - "file": true, + "pure": true, "replaced": "^9.30.0" }, "@wdio/globals": { "signature": "175d9b28d35f5ff1f33d2a40df2a001f", - "file": true, + "pure": true, "replaced": "^9.29.1" }, "@wdio/local-runner": { "signature": "6f8e94369de4354eaaceb01a28b7b1d1", - "file": true, + "pure": true, "replaced": "^9.30.0" }, "@wdio/spec-reporter": { "signature": "5436f1477dd3c27922186f336a7e9817", - "file": true, + "pure": true, "replaced": "^9.29.1" + }, + "webdriverio": { + "signature": "83d918d9a35f034c779e6f860a672710", + "pure": true } } } \ No newline at end of file diff --git a/yalc.lock b/yalc.lock index e57b42d1f..589702316 100644 --- a/yalc.lock +++ b/yalc.lock @@ -2,7 +2,7 @@ "version": "v1", "packages": { "webdriverio": { - "signature": "4d1e8fff5fd9509e8adbf5bc736ce145", + "signature": "e9cb57d6a2b63e71f3ba4ffc461c9e3a", "file": true, "replaced": "^9.30.1" }, @@ -11,9 +11,13 @@ "file": true }, "@wdio/types": { - "signature": "14c34a998d912ea8cd21174a62dda558", + "signature": "50e851f7bb48646e024ff160043f8831", "file": true, "replaced": "^9.30.1" + }, + "@wdio/utils": { + "signature": "e822b7e6883d5dca53969c00f72d4a18", + "file": true } } } \ No newline at end of file From 57d310edfe50ee4489fd7679b26bacda43fa5bdd Mon Sep 17 00:00:00 2001 From: dprevost-perso Date: Tue, 4 Aug 2026 06:21:59 -0400 Subject: [PATCH 5/6] Fixes + e2e --- .../test/specs/wdio-matchers.test.ts | 43 +++++++++++++++++++ playgrounds/multi-remote-mocha/wdio.conf.ts | 21 ++++----- src/matchers/browser/toHaveTitle.ts | 2 +- test/matchers/browserMatchers.test.ts | 6 +-- 4 files changed, 58 insertions(+), 14 deletions(-) create mode 100644 playgrounds/multi-remote-mocha/test/specs/wdio-matchers.test.ts diff --git a/playgrounds/multi-remote-mocha/test/specs/wdio-matchers.test.ts b/playgrounds/multi-remote-mocha/test/specs/wdio-matchers.test.ts new file mode 100644 index 000000000..c2c4ebba6 --- /dev/null +++ b/playgrounds/multi-remote-mocha/test/specs/wdio-matchers.test.ts @@ -0,0 +1,43 @@ +import { multiRemoteBrowser } from '@wdio/globals' + +describe('WebdriverIO Custom Matchers', () => { + beforeEach(async () => { + await multiRemoteBrowser.url('https://webdriver.io') + }) + + describe('Browser matchers', () => { + it('should verify browser title', async () => { + await expect(multiRemoteBrowser).toHaveTitle('WebdriverIO ยท Next-gen browser and mobile automation test framework for Node.js | WebdriverIO') + }) + + it('should verify browser title contains text', async () => { + await expect(multiRemoteBrowser).toHaveTitle(expect.stringContaining('WebdriverIO')) + }) + + it('should verify browser title contains text for each browser by array', async () => { + await expect(multiRemoteBrowser).toHaveTitle([expect.stringContaining('WebdriverIO'), expect.stringContaining('WebdriverIO')]) + }) + + it('should verify browser title contains text for each browser by map', async () => { + await expect(multiRemoteBrowser).toHaveTitle({ + chrome: expect.stringContaining('WebdriverIO'), + firefox: expect.stringContaining('WebdriverIO') + }) + }) + + it.only('should verify browser title contains text for one browser', async () => { + await expect(multiRemoteBrowser).toHaveTitle({ + firefox: expect.stringContaining('WebdriverIO') + }) + }) + + + // it('should verify browser URL', async () => { + // await expect(multiRemoteBrowser).toHaveUrl('https://webdriver.io/') + // }) + + // it('should verify URL contains path', async () => { + // await expect(multiRemoteBrowser).toHaveUrl(expect.stringContaining('webdriver.io')) + // }) + }) +}) diff --git a/playgrounds/multi-remote-mocha/wdio.conf.ts b/playgrounds/multi-remote-mocha/wdio.conf.ts index 959ddbe6a..d64f7beb1 100644 --- a/playgrounds/multi-remote-mocha/wdio.conf.ts +++ b/playgrounds/multi-remote-mocha/wdio.conf.ts @@ -15,9 +15,10 @@ export const config: WebdriverIO.MultiremoteConfig = { // ================== // specs: [ - './test/specs/**/*.test.ts', + //'./test/specs/**/*.test.ts', //'./test/specs/**/basic-matchers.test.ts', //'./test/specs/**/network-matchers.test.ts' + './test/specs/**/wdio-matchers.test.ts' ], maxInstances: 10, @@ -46,15 +47,15 @@ export const config: WebdriverIO.MultiremoteConfig = { } } }, - chromium: { - capabilities: { - browserName: 'chromium', - browserVersion: 'latest', - 'goog:chromeOptions': { - args: ['headless','disable-gpu'] - } - } - }, + // chromium: { + // capabilities: { + // browserName: 'chromium', + // browserVersion: 'latest', + // 'goog:chromeOptions': { + // args: ['headless','disable-gpu'] + // } + // } + // }, }], // diff --git a/src/matchers/browser/toHaveTitle.ts b/src/matchers/browser/toHaveTitle.ts index db2d7dcc0..978c25fd4 100644 --- a/src/matchers/browser/toHaveTitle.ts +++ b/src/matchers/browser/toHaveTitle.ts @@ -76,7 +76,7 @@ const compareMultiRemoteTitles = async ( let browserNames: string[] | undefined let expectedValues: MaybeArray> | undefined - if (typeof expectedValue === 'object') { + if (typeof expectedValue === 'object' && !Array.isArray(expectedValue) && !isAsymmetricMatcher(expectedValue) && !(expectedValue instanceof RegExp)) { browserNames = Object.keys(expectedValue) if (browserNames.length === 0) { throw new Error('Expected value object is empty. Please provide at least one browser instance name with its expected title.') diff --git a/test/matchers/browserMatchers.test.ts b/test/matchers/browserMatchers.test.ts index 2fdb2b96c..613d7560f 100644 --- a/test/matchers/browserMatchers.test.ts +++ b/test/matchers/browserMatchers.test.ts @@ -1,6 +1,6 @@ import { vi, test, describe, expect, beforeEach } from 'vitest' import { browser } from '@wdio/globals' -import { toHaveUrl } from '../../src/matchers/browser/toHaveUrl.js' +// import { toHaveUrl } from '../../src/matchers/browser/toHaveUrl.js' import { toHaveTitle } from '../../src/matchers/browser/toHaveTitle.js' import { matcherNameLastWords } from '../__fixtures__/utils' import stripAnsi from 'strip-ansi' @@ -8,7 +8,7 @@ import stripAnsi from 'strip-ansi' vi.mock('@wdio/globals') const browserMatchers = new Map([ - [toHaveUrl, browser.getUrl], + // [toHaveUrl, browser.getUrl], [toHaveTitle, browser.getTitle], ]) @@ -121,7 +121,7 @@ Received : " Valid Text "` Expect window to have ${matcherNameLastWords(matcherFn.name)} Expected: " Valid Text " -Received: " Wrong Text "` +Received: "Wrong Text"` ) }) }) From 7ec88193bf7dfbb26765c28209db03bf3db99df7 Mon Sep 17 00:00:00 2001 From: dprevost-perso Date: Tue, 4 Aug 2026 07:23:36 -0400 Subject: [PATCH 6/6] ylacing `@wdio/runner` was needed --- package-lock.json | 4 +- playgrounds/package-lock.json | 164 +++++++++++----------------------- playgrounds/package.json | 3 + playgrounds/yalc.lock | 6 +- yalc.lock | 4 +- 5 files changed, 64 insertions(+), 117 deletions(-) diff --git a/package-lock.json b/package-lock.json index daa00c6c4..d31ac66ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -113,7 +113,7 @@ "license": "MIT" }, ".yalc/@wdio/utils": { - "version": "9.30.1-multiremote.0", + "version": "9.30.1-multiremote.1", "license": "MIT", "dependencies": { "@puppeteer/browsers": "^2.2.0", @@ -136,7 +136,7 @@ } }, ".yalc/webdriverio": { - "version": "9.30.1-multiremote.0", + "version": "9.30.1-multiremote.1", "license": "MIT", "dependencies": { "@types/node": "^20.11.30", diff --git a/playgrounds/package-lock.json b/playgrounds/package-lock.json index b9593fa4d..9a9108789 100644 --- a/playgrounds/package-lock.json +++ b/playgrounds/package-lock.json @@ -14,6 +14,9 @@ "./mocha", "./multi-remote-mocha" ], + "dependencies": { + "@wdio/runner": "file:.yalc/@wdio/runner" + }, "devDependencies": { "@wdio/cli": "file:.yalc/@wdio/cli", "@wdio/globals": "file:.yalc/@wdio/globals", @@ -8140,6 +8143,52 @@ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, + ".yalc/@wdio/runner": { + "version": "9.30.1-multiremote.1", + "license": "MIT", + "dependencies": { + "@types/node": "^20.11.28", + "@wdio/config": "*", + "@wdio/dot-reporter": "*", + "@wdio/globals": "*", + "@wdio/logger": "9.29.1", + "@wdio/types": "*", + "@wdio/utils": "*", + "deepmerge-ts": "^7.0.3", + "webdriver": "*", + "webdriverio": "*" + }, + "engines": { + "node": ">=18.20.0" + }, + "peerDependencies": { + "expect-webdriverio": "^5.6.5", + "webdriverio": "^9.0.0" + }, + "peerDependenciesMeta": { + "expect-webdriverio": { + "optional": false + }, + "webdriverio": { + "optional": false + } + } + }, + ".yalc/@wdio/runner/node_modules/@types/node": { + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + ".yalc/@wdio/runner/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, ".yalc/@wdio/spec-reporter": { "version": "9.30.1", "license": "MIT", @@ -8156,7 +8205,7 @@ }, ".yalc/@wdio/utils": {}, ".yalc/webdriverio": { - "version": "9.30.1", + "version": "9.30.1-multiremote.1", "license": "MIT", "dependencies": { "@types/node": "^20.11.30", @@ -11404,117 +11453,8 @@ "license": "MIT" }, "node_modules/@wdio/runner": { - "version": "9.30.0", - "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-9.30.0.tgz", - "integrity": "sha512-gvUExYXZtziIM4TmWMd98cvVUt2jTQ54k8gIYxBJ8w8N6BQfrko08IKWrVjoNOanJzLMHjqtCWWx4DXR3JtozQ==", - "license": "MIT", - "dependencies": { - "@types/node": "^20.11.28", - "@wdio/config": "9.30.0", - "@wdio/dot-reporter": "9.29.1", - "@wdio/globals": "9.29.1", - "@wdio/logger": "9.29.1", - "@wdio/types": "9.29.1", - "@wdio/utils": "9.30.0", - "deepmerge-ts": "^7.0.3", - "webdriver": "9.30.0", - "webdriverio": "9.30.0" - }, - "engines": { - "node": ">=18.20.0" - }, - "peerDependencies": { - "expect-webdriverio": "^5.6.5", - "webdriverio": "^9.0.0" - }, - "peerDependenciesMeta": { - "expect-webdriverio": { - "optional": false - }, - "webdriverio": { - "optional": false - } - } - }, - "node_modules/@wdio/runner/node_modules/@types/node": { - "version": "20.19.42", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@wdio/runner/node_modules/@wdio/utils": { - "version": "9.30.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.30.0.tgz", - "integrity": "sha512-MhTx8jKOtspogeMUmASFsmL6vRetwCpvfcAFHauYZ62UzPjFwHThIXorzoG90mrcS9Yl+c8Sj9BfX+bdxwXfsg==", - "license": "MIT", - "dependencies": { - "@puppeteer/browsers": "^2.2.0", - "@wdio/logger": "9.29.1", - "@wdio/types": "9.29.1", - "decamelize": "^6.0.0", - "deepmerge-ts": "^7.0.3", - "edgedriver": "^6.1.2", - "geckodriver": "^6.1.1", - "get-port": "^7.0.0", - "import-meta-resolve": "^4.0.0", - "locate-app": "^2.2.24", - "mitt": "^3.0.1", - "safaridriver": "^1.0.0", - "split2": "^4.2.0", - "wait-port": "^1.1.0" - }, - "engines": { - "node": ">=18.20.0" - } - }, - "node_modules/@wdio/runner/node_modules/undici-types": { - "version": "6.21.0", - "license": "MIT" - }, - "node_modules/@wdio/runner/node_modules/webdriverio": { - "version": "9.30.0", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.30.0.tgz", - "integrity": "sha512-cmV/uSbCvnJ99QejGPVGlzb9MjiSYUts8VjdESnDKvA7JvRMIJK0l807Js7HDK/g6KG7j+D2apsFHGlT7W5UeA==", - "license": "MIT", - "dependencies": { - "@types/node": "^20.11.30", - "@types/sinonjs__fake-timers": "^8.1.5", - "@wdio/config": "9.30.0", - "@wdio/logger": "9.29.1", - "@wdio/protocols": "9.30.0", - "@wdio/repl": "9.16.2", - "@wdio/types": "9.29.1", - "@wdio/utils": "9.30.0", - "archiver": "^7.0.1", - "aria-query": "^5.3.0", - "cheerio": "^1.0.0-rc.12", - "css-shorthand-properties": "^1.1.1", - "css-value": "^0.0.1", - "grapheme-splitter": "^1.0.4", - "htmlfy": "^0.8.1", - "is-plain-obj": "^4.1.0", - "jszip": "^3.10.1", - "lodash.clonedeep": "^4.5.0", - "lodash.zip": "^4.2.0", - "query-selector-shadow-dom": "^1.0.1", - "resq": "^1.11.0", - "rgb2hex": "0.2.5", - "serialize-error": "^12.0.0", - "urlpattern-polyfill": "^10.0.0", - "webdriver": "9.30.0" - }, - "engines": { - "node": ">=18.20.0" - }, - "peerDependencies": { - "puppeteer-core": ">=22.x || <=24.x" - }, - "peerDependenciesMeta": { - "puppeteer-core": { - "optional": true - } - } + "resolved": ".yalc/@wdio/runner", + "link": true }, "node_modules/@wdio/spec-reporter": { "resolved": ".yalc/@wdio/spec-reporter", diff --git a/playgrounds/package.json b/playgrounds/package.json index afce52893..256413f21 100644 --- a/playgrounds/package.json +++ b/playgrounds/package.json @@ -30,5 +30,8 @@ "ts-node": "^10.9.2", "typescript": "^5.9.3", "webdriverio": "file:.yalc/webdriverio" + }, + "dependencies": { + "@wdio/runner": "file:.yalc/@wdio/runner" } } diff --git a/playgrounds/yalc.lock b/playgrounds/yalc.lock index a3e17af35..88c39765d 100644 --- a/playgrounds/yalc.lock +++ b/playgrounds/yalc.lock @@ -22,8 +22,12 @@ "replaced": "^9.29.1" }, "webdriverio": { - "signature": "83d918d9a35f034c779e6f860a672710", + "signature": "f8dfce0f0b5770fbcf87d26a3f1684c1", "pure": true + }, + "@wdio/runner": { + "signature": "0fee5a4af7522f82027d91e4c3b7a4f9", + "file": true } } } \ No newline at end of file diff --git a/yalc.lock b/yalc.lock index 589702316..c7107df1a 100644 --- a/yalc.lock +++ b/yalc.lock @@ -2,7 +2,7 @@ "version": "v1", "packages": { "webdriverio": { - "signature": "e9cb57d6a2b63e71f3ba4ffc461c9e3a", + "signature": "f8dfce0f0b5770fbcf87d26a3f1684c1", "file": true, "replaced": "^9.30.1" }, @@ -16,7 +16,7 @@ "replaced": "^9.30.1" }, "@wdio/utils": { - "signature": "e822b7e6883d5dca53969c00f72d4a18", + "signature": "2fa15bacae2cd25f856ed89be0da51a3", "file": true } }