From b3945badea7c0a47e67eef7f9d447a8c161946c6 Mon Sep 17 00:00:00 2001 From: Roman Kuznetsov Date: Wed, 5 Jul 2023 02:20:40 +0300 Subject: [PATCH] feat: wait page load --- package-lock.json | 2923 ++++++++-------------- package.json | 8 +- src/browser/commands/index.js | 2 +- src/browser/commands/openAndWait.ts | 139 + src/config/browser-options.js | 10 + src/config/defaults.js | 6 + src/utils/page-loader.ts | 157 ++ test/src/browser/commands/openAndWait.ts | 201 ++ test/src/browser/utils.js | 12 + test/src/utils/page-loader.ts | 366 +++ 10 files changed, 1974 insertions(+), 1850 deletions(-) create mode 100644 src/browser/commands/openAndWait.ts create mode 100644 src/utils/page-loader.ts create mode 100644 test/src/browser/commands/openAndWait.ts create mode 100644 test/src/utils/page-loader.ts diff --git a/package-lock.json b/package-lock.json index b2be0ebdc..656141ba7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,8 @@ "dependencies": { "@gemini-testing/commander": "2.15.3", "@types/mocha": "^10.0.1", - "@wdio/globals": "^8.5.7", - "@wdio/types": "^8.4.0", + "@wdio/globals": "^8.10.7", + "@wdio/types": "^8.10.4", "@wdio/utils": "^7.26.0", "aliasify": "^1.9.0", "bluebird": "^3.5.1", @@ -39,7 +39,7 @@ "uglifyify": "^3.0.4", "urijs": "^1.19.11", "url-join": "^4.0.1", - "webdriverio": "^8.8.2", + "webdriverio": "^8.10.7", "worker-farm": "^1.7.0", "yallist": "^3.1.1" }, @@ -49,6 +49,7 @@ "devDependencies": { "@commitlint/cli": "^17.1.2", "@commitlint/config-conventional": "^17.1.0", + "@sinonjs/fake-timers": "^10.3.0", "@swc/core": "^1.3.40", "@types/bluebird": "^3.5.38", "@types/chai": "^4.3.4", @@ -58,6 +59,7 @@ "@types/proxyquire": "^1.3.28", "@types/sharp": "^0.31.1", "@types/sinon": "^4.3.3", + "@types/sinonjs__fake-timers": "^8.1.2", "@typescript-eslint/eslint-plugin": "^5.54.1", "@typescript-eslint/parser": "^5.54.1", "app-module-path": "^2.2.0", @@ -1356,6 +1358,95 @@ "node": ">=6.9.0" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -1531,13 +1622,23 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@puppeteer/browsers": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.4.0.tgz", - "integrity": "sha512-3iB5pWn9Sr55PKKwqFWSWjLsTKCOEhKNI+uV3BZesgXuA3IhsX8I3hW0HI+3ksMIPkh2mVYzKSpvgq3oicjG2Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.3.0.tgz", + "integrity": "sha512-an3QdbNPkuU6qpxpbssxAbjRLJcF+eP4L8UqIY3+6n0sbaVxw5pz7PiCLy9g32XEZuoamUlV5ZQPnA6FxvkIHA==", "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", + "http-proxy-agent": "5.0.0", "https-proxy-agent": "5.0.1", "progress": "2.0.3", "proxy-from-env": "1.1.0", @@ -1549,7 +1650,7 @@ "browsers": "lib/cjs/main-cli.js" }, "engines": { - "node": ">=14.1.0" + "node": ">=16.0.0" }, "peerDependencies": { "typescript": ">= 4.7.4" @@ -1560,6 +1661,14 @@ } } }, + "node_modules/@puppeteer/browsers/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "engines": { + "node": ">= 10" + } + }, "node_modules/@puppeteer/browsers/node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -1589,6 +1698,19 @@ } } }, + "node_modules/@puppeteer/browsers/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@puppeteer/browsers/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1660,6 +1782,24 @@ "type-detect": "4.0.8" } }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, "node_modules/@sinonjs/formatio": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", @@ -2110,6 +2250,12 @@ "integrity": "sha512-Tt7w/ylBS/OEAlSCwzB0Db1KbxnkycP/1UkQpbvKFYoUuRn4uYsC3xh5TRPrOjTy0i8TIkSz1JdNL4GPVdf3KQ==", "dev": true }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -2127,9 +2273,9 @@ "integrity": "sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==" }, "node_modules/@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", "dependencies": { "@types/node": "*" } @@ -2459,17 +2605,17 @@ } }, "node_modules/@wdio/config": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.8.0.tgz", - "integrity": "sha512-gm8gXqpiIR0EU9Blkqmxe+xsEoKS2EXpWrKlx2JXyx3Yf7By0UNsZVZHMSO8lLunzUjYIntpWYpmKmBmnlrnKQ==", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.10.7.tgz", + "integrity": "sha512-m7JX9X/RPM+4KZQkSUhPHXeS3PJJky0UB62ZLh28TYCzVxEKNq1gFb6Cvqfn+w6Ym/UCFBaZzDrRLLXUAgUifw==", "dependencies": { - "@wdio/logger": "8.6.6", - "@wdio/types": "8.8.0", - "@wdio/utils": "8.8.0", + "@wdio/logger": "8.10.6", + "@wdio/types": "8.10.4", + "@wdio/utils": "8.10.7", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", - "glob": "^9.3.0", - "import-meta-resolve": "^2.1.0", + "glob": "^10.2.2", + "import-meta-resolve": "^3.0.0", "read-pkg-up": "^9.1.0" }, "engines": { @@ -2477,33 +2623,44 @@ } }, "node_modules/@wdio/config/node_modules/@wdio/logger": { - "version": "8.6.6", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", - "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", + "version": "8.10.6", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.10.6.tgz", + "integrity": "sha512-pJYKecNYS0vu0FxDaii6MYQlYkORDLGdRWi70hrihH20sMZofzMA1tvzRMRk1VTrsUUE4TLJXKdmT2JRMN+OPw==", "dependencies": { "chalk": "^5.1.2", "loglevel": "^1.6.0", "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" + "strip-ansi": "^7.1.0" }, "engines": { "node": "^16.13 || >=18" } }, "node_modules/@wdio/config/node_modules/@wdio/utils": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", - "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.10.7.tgz", + "integrity": "sha512-G9r/bQl4J25WPKeW0e+27gqNvG+x7MyZEOICl6SwyBe0SqO7JBFOBARx4oUEp2zQYmnCRNtCrHa7yM/O4OPuKA==", "dependencies": { - "@wdio/logger": "8.6.6", - "@wdio/types": "8.8.0", - "import-meta-resolve": "^2.2.0", + "@wdio/logger": "8.10.6", + "@wdio/types": "8.10.4", + "import-meta-resolve": "^3.0.0", "p-iteration": "^1.1.8" }, "engines": { "node": "^16.13 || >=18" } }, + "node_modules/@wdio/config/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/@wdio/config/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -2513,9 +2670,9 @@ } }, "node_modules/@wdio/config/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -2549,15 +2706,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@wdio/config/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@wdio/config/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.1.tgz", + "integrity": "sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==", "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.10.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -2581,9 +2757,9 @@ } }, "node_modules/@wdio/config/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", + "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2663,6 +2839,31 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@wdio/config/node_modules/signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@wdio/config/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/@wdio/config/node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", @@ -2686,15 +2887,15 @@ } }, "node_modules/@wdio/globals": { - "version": "8.5.7", - "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.5.7.tgz", - "integrity": "sha512-N2H8AW5jN17SzgR+9qvxScHX7Mc1BoLXTsbnOghTzTibgn7jEcuyLVOFU5INZYQ3YHO26BYVjvPV7ZXzeaDjHQ==", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.10.7.tgz", + "integrity": "sha512-f+oBuQjJAOXoWwUffjbQk26gNGqQ4d8dnB6fVW7C/WwhuButKwm4pyBEp0RpU5G3a5pYn0bQP95cziuozTU1rg==", "engines": { "node": "^16.13 || >=18" }, "optionalDependencies": { "expect-webdriverio": "^4.0.1", - "webdriverio": "8.5.7" + "webdriverio": "8.10.7" } }, "node_modules/@wdio/globals/node_modules/@jest/expect-utils": { @@ -2744,968 +2945,185 @@ "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", "optional": true }, - "node_modules/@wdio/globals/node_modules/@sindresorhus/is": { - "version": "5.4.1", - "resolved": "https://npm.yandex-team.ru/@sindresorhus%2fis/-/is-5.4.1.tgz?rbtorrent=13f9f5ca70a1b6087599b035b953c2de7b4cc924", - "integrity": "sha512-axlrvsHlHlFmKKMEg4VyvMzFr93JWJj4eIfXY1STVuO2fsImCa7ncaiG5gC8HKOX590AW5RtRsC41/B+OfrSqw==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@wdio/globals/node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://npm.yandex-team.ru/@szmarczak%2fhttp-timer/-/http-timer-5.0.1.tgz?rbtorrent=99bd8fa633bb5b8e8ed6651d5ebe2d4ea37d6f54", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "license": "MIT", - "optional": true, - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, "node_modules/@wdio/globals/node_modules/@types/node": { - "version": "18.16.18", - "resolved": "https://npm.yandex-team.ru/@types%2fnode/-/node-18.16.18.tgz?rbtorrent=83fda51c0e701896a61cbc846be4de52182845a2", - "integrity": "sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==", - "license": "MIT", + "version": "18.16.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.19.tgz", + "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==", "optional": true }, - "node_modules/@wdio/globals/node_modules/@wdio/config": { - "version": "8.5.6", - "resolved": "https://npm.yandex-team.ru/@wdio%2fconfig/-/config-8.5.6.tgz?rbtorrent=6ed0b4fe39c132e6fc619acf178046815f79b5de", - "integrity": "sha512-+p6RS9O7NSiFWaezQx/i3ikDQrUMUP5PhQ2RU35tRxENEwNoeEROTC+fL7daE+FaDYo4+ugi46DBOtX9uHhVqA==", - "license": "MIT", - "optional": true, - "dependencies": { - "@wdio/logger": "8.1.0", - "@wdio/types": "8.4.0", - "@wdio/utils": "8.5.6", - "decamelize": "^6.0.0", - "deepmerge-ts": "^4.2.2", - "glob": "^8.0.3", - "import-meta-resolve": "^2.1.0", - "read-pkg-up": "^9.1.0" - }, - "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/@wdio/globals/node_modules/@wdio/logger": { - "version": "8.1.0", - "resolved": "https://npm.yandex-team.ru/@wdio%2flogger/-/logger-8.1.0.tgz?rbtorrent=4d004587a48b17e29c4046fa7977fd9ddf606ef8", - "integrity": "sha512-QRC5b7FF4JIYUCqggnVA0sZ80TwIUFN9JyBSbuGuMxaSLSLujSo7WfuSrnQXVvsRbnJ16wWwJWYigfLkxOW86Q==", - "license": "MIT", + "node_modules/@wdio/globals/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "optional": true, "dependencies": { - "chalk": "^5.1.2", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/@wdio/globals/node_modules/@wdio/logger/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://npm.yandex-team.ru/chalk/-/chalk-5.2.0.tgz?rbtorrent=192bd9725e7a41e810e07d19ea39961b9da483bd", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "license": "MIT", - "optional": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@wdio/globals/node_modules/@wdio/protocols": { - "version": "8.5.7", - "resolved": "https://npm.yandex-team.ru/@wdio%2fprotocols/-/protocols-8.5.7.tgz?rbtorrent=2089ca1003b745743049126418d90772a6027a75", - "integrity": "sha512-ymdXSRqHugEptLdjLnvX7m7TY6cvae1B1yiFJVpaKwj88s4PaCUs7aISexC0ES9s6z8ZWRjZo3mrKPlwZ/IKCw==", - "license": "MIT", - "optional": true - }, - "node_modules/@wdio/globals/node_modules/@wdio/repl": { - "version": "8.1.0", - "resolved": "https://npm.yandex-team.ru/@wdio%2frepl/-/repl-8.1.0.tgz?rbtorrent=a7bd6e73d3dbec80c20bf555c2a946a78a0fd4bd", - "integrity": "sha512-96G4TzbYnRf95+GURo15FYt6iTYq85nbWU6YQedLRAV15RfSp4foKTbAnq++bKKMALNL6gdzTc+HGhQr3Q0sQg==", - "license": "MIT", + "node_modules/@wdio/globals/node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "optional": true, - "dependencies": { - "@types/node": "^18.0.0" - }, "engines": { - "node": "^16.13 || >=18" + "node": ">=8" } }, - "node_modules/@wdio/globals/node_modules/@wdio/types": { - "version": "8.4.0", - "resolved": "https://npm.yandex-team.ru/@wdio%2ftypes/-/types-8.4.0.tgz?rbtorrent=bb68bd8e1df7d6b528dba43c8c4fc7938b1e4e89", - "integrity": "sha512-1eA0D0jS8Ttg67zB2gsZJFUcHcRz4VRjLTjxdLKh70+ZfB1+YZr9tScLgQjc+qsjsK1wKSzOz03uZiidwNnN9g==", - "license": "MIT", + "node_modules/@wdio/globals/node_modules/diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", "optional": true, - "dependencies": { - "@types/node": "^18.0.0" - }, "engines": { - "node": "^16.13 || >=18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@wdio/globals/node_modules/@wdio/utils": { - "version": "8.5.6", - "resolved": "https://npm.yandex-team.ru/@wdio%2futils/-/utils-8.5.6.tgz?rbtorrent=c422d164438fe468aed0c02a4f0a0bde811cb055", - "integrity": "sha512-Al1NWSnA4H/7Sp+DuNisGPqN4x3xcEEGTGyGPQycWbF5ZPPuAT8lQ1v6+SkcpYiuJ5x3MlfaedJsYL10Dbz5PA==", - "license": "MIT", + "node_modules/@wdio/globals/node_modules/expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", "optional": true, "dependencies": { - "@wdio/logger": "8.1.0", - "@wdio/types": "8.4.0", - "import-meta-resolve": "^2.2.0", - "p-iteration": "^1.1.8" + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" }, "engines": { - "node": "^16.13 || >=18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@wdio/globals/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://npm.yandex-team.ru/brace-expansion/-/brace-expansion-2.0.1.tgz?rbtorrent=320d365acd352e486b7140205554b6b4afcbc99b", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", + "node_modules/@wdio/globals/node_modules/expect-webdriverio": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.1.2.tgz", + "integrity": "sha512-punU19F1Nq0m9H7f5+A/OtT/LljA+d04sVB9nHIFDYbumdDBOy3I23EFzCsSZMvMdda5r3stKmKalTX4SG2yhA==", "optional": true, "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@wdio/globals/node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://npm.yandex-team.ru/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz?rbtorrent=424e1ce9d34d84566b14c7218ff859df99f2d205", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@wdio/globals/node_modules/cacheable-request": { - "version": "10.2.12", - "resolved": "https://npm.yandex-team.ru/cacheable-request/-/cacheable-request-10.2.12.tgz?rbtorrent=534b768efea2318336c7fe3ec7a75c5338f78afb", - "integrity": "sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw==", - "license": "MIT", - "optional": true, - "dependencies": { - "@types/http-cache-semantics": "^4.0.1", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.2", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@wdio/globals/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "optional": true, - "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/@wdio/globals/node_modules/chromium-bidi": { - "version": "0.4.4", - "resolved": "https://npm.yandex-team.ru/chromium-bidi/-/chromium-bidi-0.4.4.tgz?rbtorrent=9ec95fda4ed7fa499bd5e74a5eb7fb9d4ead964f", - "integrity": "sha512-4BX5cSaponuvVT1+SbLYTOAgDoVtX/Khoc9UsbFJ/AsPVUeFAM3RiIDFI6XFhLYMi9WmVJqh1ZH+dRpNKkKwiQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "mitt": "3.0.0" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, - "node_modules/@wdio/globals/node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wdio/globals/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://npm.yandex-team.ru/debug/-/debug-4.3.4.tgz?rbtorrent=f132914bb7359f9b0a7f85f6f8a73dd70702bd71", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@wdio/globals/node_modules/decamelize": { - "version": "6.0.0", - "resolved": "https://npm.yandex-team.ru/decamelize/-/decamelize-6.0.0.tgz?rbtorrent=be6b1a94dcb0106912a8308bb3f31c72ad5038af", - "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", - "license": "MIT", - "optional": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wdio/globals/node_modules/deepmerge-ts": { - "version": "4.3.0", - "resolved": "https://npm.yandex-team.ru/deepmerge-ts/-/deepmerge-ts-4.3.0.tgz?rbtorrent=964448cd3cf56d8ce623e7dc0c8230af1fb2f674", - "integrity": "sha512-if3ZYdkD2dClhnXR5reKtG98cwyaRT1NeugQoAPTTfsOpV9kqyeiBF9Qa5RHjemb3KzD5ulqygv6ED3t5j9eJw==", - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@wdio/globals/node_modules/devtools": { - "version": "8.5.7", - "resolved": "https://npm.yandex-team.ru/devtools/-/devtools-8.5.7.tgz?rbtorrent=e46269963e371976e4abb7147469aea1cc82437b", - "integrity": "sha512-ikZQFHtyh77Bis0oiAODM8L5MHyzuzjTO1R5s6Z9DA3axefMgXJFzFebA8ku/MCXnl1+GmPdKp2aHC+4YXPYuQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "^18.0.0", - "@wdio/config": "8.5.6", - "@wdio/logger": "8.1.0", - "@wdio/protocols": "8.5.7", - "@wdio/types": "8.4.0", - "@wdio/utils": "8.5.6", - "chrome-launcher": "^0.15.0", - "edge-paths": "^3.0.5", - "import-meta-resolve": "^2.1.0", - "puppeteer-core": "19.7.2", - "query-selector-shadow-dom": "^1.0.0", - "ua-parser-js": "^1.0.1", - "uuid": "^9.0.0", - "which": "^3.0.0" - }, - "engines": { - "node": "^16.13 || >=18" - } - }, - "node_modules/@wdio/globals/node_modules/devtools-protocol": { - "version": "0.0.1109433", - "resolved": "https://npm.yandex-team.ru/devtools-protocol/-/devtools-protocol-0.0.1109433.tgz?rbtorrent=478632171f47b6bcc08f9b71ad4c9c6df7370e20", - "integrity": "sha512-w1Eqih66egbSr2eOoGZ+NsdF7HdxmKDo3pKFBySEGsmVvwWWNXzNCDcKrbFnd23Jf7kH1M806OfelXwu+Jk11g==", - "license": "BSD-3-Clause", - "optional": true - }, - "node_modules/@wdio/globals/node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "optional": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@wdio/globals/node_modules/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "optional": true, - "dependencies": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@wdio/globals/node_modules/expect-webdriverio": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.1.2.tgz", - "integrity": "sha512-punU19F1Nq0m9H7f5+A/OtT/LljA+d04sVB9nHIFDYbumdDBOy3I23EFzCsSZMvMdda5r3stKmKalTX4SG2yhA==", - "optional": true, - "dependencies": { - "expect": "^29.4.0", - "jest-matcher-utils": "^29.4.0" - }, + "expect": "^29.4.0", + "jest-matcher-utils": "^29.4.0" + }, "engines": { "node": ">=16 || >=18 || >=20" }, "optionalDependencies": { "@wdio/globals": "^8.2.4", - "webdriverio": "^8.2.4" - } - }, - "node_modules/@wdio/globals/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://npm.yandex-team.ru/find-up/-/find-up-6.3.0.tgz?rbtorrent=426d564bda8929e818dbd51aef74d7327d97594a", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "license": "MIT", - "optional": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wdio/globals/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://npm.yandex-team.ru/glob/-/glob-8.1.0.tgz?rbtorrent=4a1b49c73faeab383f2117f1662ae3c24b1b1565", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "license": "ISC", - "optional": true, - "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/@wdio/globals/node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://npm.yandex-team.ru/minimatch/-/minimatch-5.1.6.tgz?rbtorrent=1207d7dfdc5522831e65586973e56b77299a2fae", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", - "optional": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@wdio/globals/node_modules/got": { - "version": "12.6.1", - "resolved": "https://npm.yandex-team.ru/got/-/got-12.6.1.tgz?rbtorrent=54d97ffe9ebad5e130cda8e113b91a0c77ee5dd4", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/@wdio/globals/node_modules/http2-wrapper": { - "version": "2.2.0", - "resolved": "https://npm.yandex-team.ru/http2-wrapper/-/http2-wrapper-2.2.0.tgz?rbtorrent=fac72adc53801aac16a466030a33c7da5df5d693", - "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/@wdio/globals/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://npm.yandex-team.ru/is-plain-obj/-/is-plain-obj-4.1.0.tgz?rbtorrent=6a36d3ad785f7855d75b0e5bc7f4e82798becf86", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wdio/globals/node_modules/jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", - "optional": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@wdio/globals/node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "optional": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@wdio/globals/node_modules/jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", - "optional": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@wdio/globals/node_modules/jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", - "optional": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@wdio/globals/node_modules/jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", - "optional": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@wdio/globals/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://npm.yandex-team.ru/locate-path/-/locate-path-7.2.0.tgz?rbtorrent=9e4cfb336eabaf8dcc889343ddb9ad127780966e", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "license": "MIT", - "optional": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wdio/globals/node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://npm.yandex-team.ru/lowercase-keys/-/lowercase-keys-3.0.0.tgz?rbtorrent=b98a941f32dfe82182d0b804497cda8280401483", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wdio/globals/node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://npm.yandex-team.ru/mimic-response/-/mimic-response-4.0.0.tgz?rbtorrent=be1973fc1a90556e454f187aa43665422b6fa529", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "license": "MIT", - "optional": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wdio/globals/node_modules/minimatch": { - "version": "7.4.6", - "resolved": "https://npm.yandex-team.ru/minimatch/-/minimatch-7.4.6.tgz?rbtorrent=604477e9c6e4fa38fbedb5842b6b44b5d1350db0", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", - "license": "ISC", - "optional": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@wdio/globals/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://npm.yandex-team.ru/ms/-/ms-2.1.2.tgz?rbtorrent=269d2b1e4b633a2572e485adbd93b4085872ffe0", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT", - "optional": true - }, - "node_modules/@wdio/globals/node_modules/normalize-url": { - "version": "8.0.0", - "resolved": "https://npm.yandex-team.ru/normalize-url/-/normalize-url-8.0.0.tgz?rbtorrent=66d000631bad2da6c6393ba9a995e6f9eac375c7", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wdio/globals/node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://npm.yandex-team.ru/p-cancelable/-/p-cancelable-3.0.0.tgz?rbtorrent=e5b24d1f5904e82d1050e2b4921bc81041aa83f1", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@wdio/globals/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://npm.yandex-team.ru/p-limit/-/p-limit-4.0.0.tgz?rbtorrent=04ebc9376d217bf5eae6948162639f4fef0bed01", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wdio/globals/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://npm.yandex-team.ru/p-locate/-/p-locate-6.0.0.tgz?rbtorrent=843ab0db851ee436a6d83342a418ad8542187f54", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "license": "MIT", - "optional": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wdio/globals/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://npm.yandex-team.ru/path-exists/-/path-exists-5.0.0.tgz?rbtorrent=cf3225878ed726e2ef1478824cbe9bd59d332d21", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@wdio/globals/node_modules/pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", - "optional": true, - "dependencies": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@wdio/globals/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@wdio/globals/node_modules/puppeteer-core": { - "version": "19.7.2", - "resolved": "https://npm.yandex-team.ru/puppeteer-core/-/puppeteer-core-19.7.2.tgz?rbtorrent=335d74f13aef6433e06df73bcf6ef99230ef7944", - "integrity": "sha512-PvI+fXqgP0uGJxkyZcX51bnzjFA73MODZOAv0fSD35yR7tvbqwtMV3/Y+hxQ0AMMwzxkEebP6c7po/muqxJvmQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "chromium-bidi": "0.4.4", - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1094867", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.11.0" - }, - "engines": { - "node": ">=14.1.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@wdio/globals/node_modules/puppeteer-core/node_modules/devtools-protocol": { - "version": "0.0.1094867", - "resolved": "https://npm.yandex-team.ru/devtools-protocol/-/devtools-protocol-0.0.1094867.tgz?rbtorrent=fb53efd31986b2c42b3a65fa2c2eb6124ffd4e58", - "integrity": "sha512-pmMDBKiRVjh0uKK6CT1WqZmM3hBVSgD+N2MrgyV1uNizAZMw4tx6i/RTc+/uCsKSCmg0xXx7arCP/OFcIwTsiQ==", - "license": "BSD-3-Clause", - "optional": true - }, - "node_modules/@wdio/globals/node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://npm.yandex-team.ru/quick-lru/-/quick-lru-5.1.1.tgz?rbtorrent=3e1817d08f7f06276cc9e9421c9542dc86cb59c2", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wdio/globals/node_modules/read-pkg": { - "version": "7.1.0", - "resolved": "https://npm.yandex-team.ru/read-pkg/-/read-pkg-7.1.0.tgz?rbtorrent=b2612c88796371e5d6e2603c9e5bc9eb9c5170d3", - "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", - "license": "MIT", - "optional": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^2.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wdio/globals/node_modules/read-pkg-up": { - "version": "9.1.0", - "resolved": "https://npm.yandex-team.ru/read-pkg-up/-/read-pkg-up-9.1.0.tgz?rbtorrent=6fcb3679535185920cfa1be8ab14382aeebdfda3", - "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", - "license": "MIT", - "optional": true, - "dependencies": { - "find-up": "^6.3.0", - "read-pkg": "^7.1.0", - "type-fest": "^2.5.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wdio/globals/node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://npm.yandex-team.ru/responselike/-/responselike-3.0.0.tgz?rbtorrent=35a03f5dcdb553ce246295269addeca90b5fa617", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "license": "MIT", - "optional": true, - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wdio/globals/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://npm.yandex-team.ru/rimraf/-/rimraf-3.0.2.tgz?rbtorrent=e56d76da53e035fd23b4819f6bdcbe4abc4e2961", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "license": "ISC", - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@wdio/globals/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://npm.yandex-team.ru/brace-expansion/-/brace-expansion-1.1.11.tgz?rbtorrent=a6f8ec4328e2858a0be33ed363e562a14b677c34", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "optional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@wdio/globals/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://npm.yandex-team.ru/glob/-/glob-7.2.3.tgz?rbtorrent=f1e3c1229b0ce68ff2e1c79bdb0c4be8b1bcd5e6", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "license": "ISC", - "optional": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "webdriverio": "^8.2.4" } }, - "node_modules/@wdio/globals/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://npm.yandex-team.ru/minimatch/-/minimatch-3.1.2.tgz?rbtorrent=ff75648d716a472d61b2fafcf5250b152d4b84b4", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", + "node_modules/@wdio/globals/node_modules/jest-diff": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", "optional": true, "dependencies": { - "brace-expansion": "^1.1.7" + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" }, "engines": { - "node": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@wdio/globals/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://npm.yandex-team.ru/type-fest/-/type-fest-2.19.0.tgz?rbtorrent=22513d0a716622c760b755a8b11e7ebdcfa5c374", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", + "node_modules/@wdio/globals/node_modules/jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "optional": true, "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wdio/globals/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://npm.yandex-team.ru/uuid/-/uuid-9.0.0.tgz?rbtorrent=edc208d2ac9e251e522a921c7e1f2f1cd6c3a019", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "license": "MIT", - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@wdio/globals/node_modules/webdriver": { - "version": "8.5.7", - "resolved": "https://npm.yandex-team.ru/webdriver/-/webdriver-8.5.7.tgz?rbtorrent=e531be1614ef8e687d75cc7663ce6b0b5fa24f9b", - "integrity": "sha512-KDw72g7EY0tqvSDkfF1YFHIw75VOVKKAesGxag3++8nVtp+YNsE/6xr9iov7UDKjre3tXphgj//r2RouSDCO5g==", - "license": "MIT", + "node_modules/@wdio/globals/node_modules/jest-matcher-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", "optional": true, "dependencies": { - "@types/node": "^18.0.0", - "@types/ws": "^8.5.3", - "@wdio/config": "8.5.6", - "@wdio/logger": "8.1.0", - "@wdio/protocols": "8.5.7", - "@wdio/types": "8.4.0", - "@wdio/utils": "8.5.6", - "deepmerge-ts": "^4.2.2", - "got": "^12.1.0", - "ky": "^0.33.0", - "ws": "^8.8.0" + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" }, "engines": { - "node": "^16.13 || >=18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@wdio/globals/node_modules/webdriverio": { - "version": "8.5.7", - "resolved": "https://npm.yandex-team.ru/webdriverio/-/webdriverio-8.5.7.tgz?rbtorrent=a33a9651e6789d0c0d844aade5b47309ac991ebd", - "integrity": "sha512-gFXozyOCPhxkzNiBnvHbJHJVA8fozCqR/TlsOgbwEyc7ww12ZxhoXT8fqdObVd/MYdm0BKdCIUU3AW06hqakRw==", - "license": "MIT", + "node_modules/@wdio/globals/node_modules/jest-message-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", "optional": true, "dependencies": { - "@types/node": "^18.0.0", - "@wdio/config": "8.5.6", - "@wdio/logger": "8.1.0", - "@wdio/protocols": "8.5.7", - "@wdio/repl": "8.1.0", - "@wdio/types": "8.4.0", - "@wdio/utils": "8.5.6", - "archiver": "^5.0.0", - "aria-query": "^5.0.0", - "css-shorthand-properties": "^1.1.1", - "css-value": "^0.0.1", - "devtools": "8.5.7", - "devtools-protocol": "^0.0.1109433", - "grapheme-splitter": "^1.0.2", - "import-meta-resolve": "^2.1.0", - "is-plain-obj": "^4.1.0", - "lodash.clonedeep": "^4.5.0", - "lodash.zip": "^4.2.0", - "minimatch": "^7.0.0", - "puppeteer-core": "19.7.2", - "query-selector-shadow-dom": "^1.0.0", - "resq": "^1.9.1", - "rgb2hex": "0.2.5", - "serialize-error": "^8.0.0", - "webdriver": "8.5.7" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": "^16.13 || >=18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@wdio/globals/node_modules/which": { - "version": "3.0.1", - "resolved": "https://npm.yandex-team.ru/which/-/which-3.0.1.tgz?rbtorrent=e38ce8136fd6347635e65781f9b4cb7f6a25f358", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "license": "ISC", + "node_modules/@wdio/globals/node_modules/jest-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", + "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", "optional": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@wdio/globals/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://npm.yandex-team.ru/ws/-/ws-8.11.0.tgz?rbtorrent=8ec1c5b8a63bb6574059a6b7ceafb910f3250c9b", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "license": "MIT", + "node_modules/@wdio/globals/node_modules/pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "optional": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@wdio/globals/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://npm.yandex-team.ru/yocto-queue/-/yocto-queue-1.0.0.tgz?rbtorrent=67f0457afe674ec0a4a5f8593f63c99f7513ee6c", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "license": "MIT", + "node_modules/@wdio/globals/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "optional": true, "engines": { - "node": ">=12.20" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@wdio/logger": { @@ -3738,41 +3156,41 @@ } }, "node_modules/@wdio/protocols": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.8.1.tgz", - "integrity": "sha512-nDaycUcm/ATLxcjim0fJyRiezXyyj4ZCq+Xf0S2Cubc0k7+DceFBt7KIMsernNVh2pelzFHEEwxh4DLaqQ71Wg==" + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.10.2.tgz", + "integrity": "sha512-Iv7Nqq6YsMQR9qvOM2mswUcKwx7bdx3cWVSmbMc8hwGJuNCBI+BP1fzmD9OidUftd1CQNvfugsG8Vq8vQWRyGg==" }, "node_modules/@wdio/repl": { - "version": "8.6.6", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.6.6.tgz", - "integrity": "sha512-vyJzqHJ5yOmfVyk5WWo6pRsJ2xhgWl3DVIBdDNR0wKrtFcm/g1jnB+pNf6Eb7NhCDh3oGul25bmhAwWDoxcFYA==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.10.1.tgz", + "integrity": "sha512-VZ1WFHTNKjR8Ga97TtV2SZM6fvRjWbYI2i/f4pJB4PtusorKvONAMJf2LQcUBIyzbVobqr7KSrcjmSwRolI+yw==", "dependencies": { - "@types/node": "^18.0.0" + "@types/node": "^20.1.0" }, "engines": { "node": "^16.13 || >=18" } }, "node_modules/@wdio/repl/node_modules/@types/node": { - "version": "18.16.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.2.tgz", - "integrity": "sha512-GQW/JL/5Fz/0I8RpeBG9lKp0+aNcXEaVL71c0D2Q0QHDTFvlYKT7an0onCUXj85anv7b4/WesqdfchLc0jtsCg==" + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" }, "node_modules/@wdio/types": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.8.0.tgz", - "integrity": "sha512-Ai6yIlwWB32FUfvQKCqSa6nSyHIhSF5BOU9OfE7I2XYkLAJTxu8B6NORHQ+rgoppHSWc4D2V9r21y3etF8AGnQ==", + "version": "8.10.4", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.10.4.tgz", + "integrity": "sha512-aLJ1QQW+hhALeRK3bvMLjIrlUVyhOs3Od+91pR4Z4pLwyeNG1bJZCJRD5bAJK/mm7CnFa0NsdixPS9jJxZcRrw==", "dependencies": { - "@types/node": "^18.0.0" + "@types/node": "^20.1.0" }, "engines": { "node": "^16.13 || >=18" } }, "node_modules/@wdio/types/node_modules/@types/node": { - "version": "18.11.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", - "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==" + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" }, "node_modules/@wdio/utils": { "version": "7.26.0", @@ -5010,9 +4428,9 @@ } }, "node_modules/chromium-bidi": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.6.tgz", - "integrity": "sha512-TQOkWRaLI/IWvoP8XC+7jO4uHTIiAUiklXU1T0qszlUFEai9LgKXIBXy3pOS3EnQZ3bQtMbKUPkug0fTAEHCSw==", + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.9.tgz", + "integrity": "sha512-u3DC6XwgLCA9QJ5ak1voPslCmacQdulZNCPsI3qNXxSnEcZS7DFIbww+5RM2bznMEje7cc0oydavRLRvOIZtHw==", "dependencies": { "mitt": "3.0.0" }, @@ -6053,18 +5471,17 @@ "dev": true }, "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", "dependencies": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.11" } }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6386,20 +5803,20 @@ } }, "node_modules/devtools": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.8.2.tgz", - "integrity": "sha512-iD/Xr5rMjx+VD08akiAuiMR5EhWKj9i489rcDm2vdC9iB8u8HY51s9FbmnIrN5OstYma0x2qOF2zKxM/muJTtw==", - "dependencies": { - "@types/node": "^18.0.0", - "@wdio/config": "8.8.0", - "@wdio/logger": "8.6.6", - "@wdio/protocols": "8.8.1", - "@wdio/types": "8.8.0", - "@wdio/utils": "8.8.0", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.10.7.tgz", + "integrity": "sha512-picJDxsjpaOW7gnQjcQVGDXvxuP1RZ4VNJpvJ+qiy86Gf3l4FGLKYkpJJFAMsIugL0XPs89bIVhjbtIv5NGL1w==", + "dependencies": { + "@types/node": "^20.1.0", + "@wdio/config": "8.10.7", + "@wdio/logger": "8.10.6", + "@wdio/protocols": "8.10.2", + "@wdio/types": "8.10.4", + "@wdio/utils": "8.10.7", "chrome-launcher": "^0.15.0", "edge-paths": "^3.0.5", - "import-meta-resolve": "^2.1.0", - "puppeteer-core": "19.8.5", + "import-meta-resolve": "^3.0.0", + "puppeteer-core": "20.3.0", "query-selector-shadow-dom": "^1.0.0", "ua-parser-js": "^1.0.1", "uuid": "^9.0.0", @@ -6410,47 +5827,58 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1124027", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1124027.tgz", - "integrity": "sha512-OT2sdgQn4llM9/tVcCvoty733KFFIlXVvESceJsfazhmg/dF7C5e3Z8cIN8jNwIikixuE5rufGtD1cvKHXfOcQ==" + "version": "0.0.1149535", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1149535.tgz", + "integrity": "sha512-vpM8tGaYz2nrN9n8rvUEhQCgU05ocejO5WIJySsftEHxUahQ/fWuNyPxXuQNBEmaISYyMZkxCunhjtSEyBl/Dg==" }, "node_modules/devtools/node_modules/@types/node": { - "version": "18.16.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.2.tgz", - "integrity": "sha512-GQW/JL/5Fz/0I8RpeBG9lKp0+aNcXEaVL71c0D2Q0QHDTFvlYKT7an0onCUXj85anv7b4/WesqdfchLc0jtsCg==" + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" }, "node_modules/devtools/node_modules/@wdio/logger": { - "version": "8.6.6", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", - "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", + "version": "8.10.6", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.10.6.tgz", + "integrity": "sha512-pJYKecNYS0vu0FxDaii6MYQlYkORDLGdRWi70hrihH20sMZofzMA1tvzRMRk1VTrsUUE4TLJXKdmT2JRMN+OPw==", "dependencies": { "chalk": "^5.1.2", "loglevel": "^1.6.0", "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" + "strip-ansi": "^7.1.0" }, "engines": { "node": "^16.13 || >=18" } }, "node_modules/devtools/node_modules/@wdio/utils": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", - "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.10.7.tgz", + "integrity": "sha512-G9r/bQl4J25WPKeW0e+27gqNvG+x7MyZEOICl6SwyBe0SqO7JBFOBARx4oUEp2zQYmnCRNtCrHa7yM/O4OPuKA==", "dependencies": { - "@wdio/logger": "8.6.6", - "@wdio/types": "8.8.0", - "import-meta-resolve": "^2.2.0", + "@wdio/logger": "8.10.6", + "@wdio/types": "8.10.4", + "import-meta-resolve": "^3.0.0", "p-iteration": "^1.1.8" }, "engines": { "node": "^16.13 || >=18" } }, + "node_modules/devtools/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/devtools/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -6458,6 +5886,20 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/devtools/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/devtools/node_modules/uuid": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", @@ -6467,9 +5909,9 @@ } }, "node_modules/devtools/node_modules/which": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", - "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dependencies": { "isexe": "^2.0.0" }, @@ -6725,6 +6167,11 @@ "readable-stream": "^2.0.2" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "node_modules/edge-paths": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-3.0.5.tgz", @@ -8463,9 +7910,9 @@ } }, "node_modules/import-meta-resolve": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", - "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz", + "integrity": "sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -8933,6 +8380,23 @@ "node": ">=8" } }, + "node_modules/jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jest-diff": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", @@ -9354,9 +8818,9 @@ } }, "node_modules/lighthouse-logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", - "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", "dependencies": { "debug": "^2.6.9", "marky": "^1.2.2" @@ -10195,11 +9659,11 @@ } }, "node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", + "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/mitt": { @@ -10585,9 +10049,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -11198,7 +10662,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -11217,12 +10680,12 @@ } }, "node_modules/path-scurry": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.7.0.tgz", - "integrity": "sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.0.tgz", + "integrity": "sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g==", "dependencies": { - "lru-cache": "^9.0.0", - "minipass": "^5.0.0" + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -11232,21 +10695,13 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.1.tgz", - "integrity": "sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", "engines": { "node": "14 || >=16.14" } }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/path-to-regexp": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", @@ -11594,24 +11049,19 @@ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, "node_modules/puppeteer-core": { - "version": "19.8.5", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.8.5.tgz", - "integrity": "sha512-zoGhim/oBQbkND6h4Xz4X7l5DkWVH9wH7z0mVty5qa/c0P1Yad47t/npVtt2xS10BiQwzztWKx7Pa2nJ5yykdw==", + "version": "20.3.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.3.0.tgz", + "integrity": "sha512-264pBrIui5bO6NJeOcbJrLa0OCwmA4+WK00JMrLIKTfRiqe2gx8KWTzLsjyw/bizErp3TKS7vt/I0i5fTC+mAw==", "dependencies": { - "@puppeteer/browsers": "0.4.0", - "chromium-bidi": "0.4.6", - "cross-fetch": "3.1.5", + "@puppeteer/browsers": "1.3.0", + "chromium-bidi": "0.4.9", + "cross-fetch": "3.1.6", "debug": "4.3.4", - "devtools-protocol": "0.0.1107588", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", + "devtools-protocol": "0.0.1120988", "ws": "8.13.0" }, "engines": { - "node": ">=14.14.0" + "node": ">=16.0.0" }, "peerDependencies": { "typescript": ">= 4.7.4" @@ -11639,9 +11089,9 @@ } }, "node_modules/puppeteer-core/node_modules/devtools-protocol": { - "version": "0.0.1107588", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", - "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==" + "version": "0.0.1120988", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1120988.tgz", + "integrity": "sha512-39fCpE3Z78IaIPChJsP6Lhmkbf4dWXOmzLk/KFTdRkNk/0JymRIfUynDVRndV9HoDz8PyalK1UH21ST/ivwW5Q==" }, "node_modules/puppeteer-core/node_modules/ms": { "version": "2.1.2", @@ -12305,7 +11755,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -12317,7 +11766,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -12815,6 +12263,20 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "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==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/stringify-package": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", @@ -12833,6 +12295,18 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -13793,19 +13267,19 @@ } }, "node_modules/webdriver": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.8.2.tgz", - "integrity": "sha512-ug+7n0JgRTLG5pGyD53VKValSLFcr0oll1QelH1Gueh/umt3Ipu+SDV+v+lyCZY6CKasCsv80W8oZfpLBj1ClQ==", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.10.7.tgz", + "integrity": "sha512-pBy29S9e8IYKYHfS0gp91Jp9SUvXJQckJKJdj+VNLNL9toSFo10N7xRpv8W1f7HkniXrgESi9GHYNyc1J/5lLA==", "dependencies": { - "@types/node": "^18.0.0", + "@types/node": "^20.1.0", "@types/ws": "^8.5.3", - "@wdio/config": "8.8.0", - "@wdio/logger": "8.6.6", - "@wdio/protocols": "8.8.1", - "@wdio/types": "8.8.0", - "@wdio/utils": "8.8.0", + "@wdio/config": "8.10.7", + "@wdio/logger": "8.10.6", + "@wdio/protocols": "8.10.2", + "@wdio/types": "8.10.4", + "@wdio/utils": "8.10.7", "deepmerge-ts": "^5.0.0", - "got": "^12.1.0", + "got": "^ 12.6.1", "ky": "^0.33.0", "ws": "^8.8.0" }, @@ -13814,9 +13288,9 @@ } }, "node_modules/webdriver/node_modules/@sindresorhus/is": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", - "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.4.1.tgz", + "integrity": "sha512-axlrvsHlHlFmKKMEg4VyvMzFr93JWJj4eIfXY1STVuO2fsImCa7ncaiG5gC8HKOX590AW5RtRsC41/B+OfrSqw==", "engines": { "node": ">=14.16" }, @@ -13836,38 +13310,49 @@ } }, "node_modules/webdriver/node_modules/@types/node": { - "version": "18.16.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.2.tgz", - "integrity": "sha512-GQW/JL/5Fz/0I8RpeBG9lKp0+aNcXEaVL71c0D2Q0QHDTFvlYKT7an0onCUXj85anv7b4/WesqdfchLc0jtsCg==" + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" }, "node_modules/webdriver/node_modules/@wdio/logger": { - "version": "8.6.6", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", - "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", + "version": "8.10.6", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.10.6.tgz", + "integrity": "sha512-pJYKecNYS0vu0FxDaii6MYQlYkORDLGdRWi70hrihH20sMZofzMA1tvzRMRk1VTrsUUE4TLJXKdmT2JRMN+OPw==", "dependencies": { "chalk": "^5.1.2", "loglevel": "^1.6.0", "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" + "strip-ansi": "^7.1.0" }, "engines": { "node": "^16.13 || >=18" } }, "node_modules/webdriver/node_modules/@wdio/utils": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", - "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.10.7.tgz", + "integrity": "sha512-G9r/bQl4J25WPKeW0e+27gqNvG+x7MyZEOICl6SwyBe0SqO7JBFOBARx4oUEp2zQYmnCRNtCrHa7yM/O4OPuKA==", "dependencies": { - "@wdio/logger": "8.6.6", - "@wdio/types": "8.8.0", - "import-meta-resolve": "^2.2.0", + "@wdio/logger": "8.10.6", + "@wdio/types": "8.10.4", + "import-meta-resolve": "^3.0.0", "p-iteration": "^1.1.8" }, "engines": { "node": "^16.13 || >=18" } }, + "node_modules/webdriver/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/webdriver/node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -13877,9 +13362,9 @@ } }, "node_modules/webdriver/node_modules/cacheable-request": { - "version": "10.2.10", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz", - "integrity": "sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ==", + "version": "10.2.12", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.12.tgz", + "integrity": "sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw==", "dependencies": { "@types/http-cache-semantics": "^4.0.1", "get-stream": "^6.0.1", @@ -13894,9 +13379,9 @@ } }, "node_modules/webdriver/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -13905,9 +13390,9 @@ } }, "node_modules/webdriver/node_modules/got": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.0.tgz", - "integrity": "sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==", + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "dependencies": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", @@ -14006,6 +13491,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/webdriver/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/webdriver/node_modules/ws": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", @@ -14027,71 +13526,82 @@ } }, "node_modules/webdriverio": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.8.2.tgz", - "integrity": "sha512-H3h+sHLg9hfQCPLvpd30hi/ZW4lLy73m4zrZ5kJyuuUf38SZFLcfXD3W1RGig88RQ/75Ui164ugwHasTMiQEgw==", - "dependencies": { - "@types/node": "^18.0.0", - "@wdio/config": "8.8.0", - "@wdio/logger": "8.6.6", - "@wdio/protocols": "8.8.1", - "@wdio/repl": "8.6.6", - "@wdio/types": "8.8.0", - "@wdio/utils": "8.8.0", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.10.7.tgz", + "integrity": "sha512-TkkPE3zBxdLRdcsNLqHct2OARnfMYB9/A0ri4sccmc3C3dVFiW99NAstN88nzD1SYzXAbxALRuITVd5oswqqhg==", + "dependencies": { + "@types/node": "^20.1.0", + "@wdio/config": "8.10.7", + "@wdio/logger": "8.10.6", + "@wdio/protocols": "8.10.2", + "@wdio/repl": "8.10.1", + "@wdio/types": "8.10.4", + "@wdio/utils": "8.10.7", "archiver": "^5.0.0", "aria-query": "^5.0.0", "css-shorthand-properties": "^1.1.1", "css-value": "^0.0.1", - "devtools": "8.8.2", - "devtools-protocol": "^0.0.1124027", + "devtools": "8.10.7", + "devtools-protocol": "^0.0.1149535", "grapheme-splitter": "^1.0.2", - "import-meta-resolve": "^2.1.0", + "import-meta-resolve": "^3.0.0", "is-plain-obj": "^4.1.0", "lodash.clonedeep": "^4.5.0", "lodash.zip": "^4.2.0", "minimatch": "^9.0.0", - "puppeteer-core": "19.8.5", + "puppeteer-core": "20.3.0", "query-selector-shadow-dom": "^1.0.0", "resq": "^1.9.1", "rgb2hex": "0.2.5", "serialize-error": "^8.0.0", - "webdriver": "8.8.2" + "webdriver": "8.10.7" }, "engines": { "node": "^16.13 || >=18" } }, "node_modules/webdriverio/node_modules/@types/node": { - "version": "18.11.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", - "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==" + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" }, "node_modules/webdriverio/node_modules/@wdio/logger": { - "version": "8.6.6", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", - "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", + "version": "8.10.6", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.10.6.tgz", + "integrity": "sha512-pJYKecNYS0vu0FxDaii6MYQlYkORDLGdRWi70hrihH20sMZofzMA1tvzRMRk1VTrsUUE4TLJXKdmT2JRMN+OPw==", "dependencies": { "chalk": "^5.1.2", "loglevel": "^1.6.0", "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" + "strip-ansi": "^7.1.0" }, "engines": { "node": "^16.13 || >=18" } }, "node_modules/webdriverio/node_modules/@wdio/utils": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", - "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.10.7.tgz", + "integrity": "sha512-G9r/bQl4J25WPKeW0e+27gqNvG+x7MyZEOICl6SwyBe0SqO7JBFOBARx4oUEp2zQYmnCRNtCrHa7yM/O4OPuKA==", "dependencies": { - "@wdio/logger": "8.6.6", - "@wdio/types": "8.8.0", - "import-meta-resolve": "^2.2.0", + "@wdio/logger": "8.10.6", + "@wdio/types": "8.10.4", + "import-meta-resolve": "^3.0.0", "p-iteration": "^1.1.8" }, - "engines": { - "node": "^16.13 || >=18" + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/webdriverio/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/webdriverio/node_modules/brace-expansion": { @@ -14103,9 +13613,9 @@ } }, "node_modules/webdriverio/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -14125,9 +13635,9 @@ } }, "node_modules/webdriverio/node_modules/minimatch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", - "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", + "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -14138,6 +13648,20 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/webdriverio/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", @@ -14241,6 +13765,23 @@ "node": ">=8" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -15478,6 +15019,64 @@ "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -15612,13 +15211,20 @@ "fastq": "^1.6.0" } }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true + }, "@puppeteer/browsers": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.4.0.tgz", - "integrity": "sha512-3iB5pWn9Sr55PKKwqFWSWjLsTKCOEhKNI+uV3BZesgXuA3IhsX8I3hW0HI+3ksMIPkh2mVYzKSpvgq3oicjG2Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.3.0.tgz", + "integrity": "sha512-an3QdbNPkuU6qpxpbssxAbjRLJcF+eP4L8UqIY3+6n0sbaVxw5pz7PiCLy9g32XEZuoamUlV5ZQPnA6FxvkIHA==", "requires": { "debug": "4.3.4", "extract-zip": "2.0.1", + "http-proxy-agent": "5.0.0", "https-proxy-agent": "5.0.1", "progress": "2.0.3", "proxy-from-env": "1.1.0", @@ -15627,6 +15233,11 @@ "yargs": "17.7.1" }, "dependencies": { + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" + }, "cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -15645,6 +15256,16 @@ "ms": "2.1.2" } }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -15700,6 +15321,26 @@ "type-detect": "4.0.8" } }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + }, + "dependencies": { + "@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + } + } + }, "@sinonjs/formatio": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", @@ -16040,6 +15681,12 @@ "integrity": "sha512-Tt7w/ylBS/OEAlSCwzB0Db1KbxnkycP/1UkQpbvKFYoUuRn4uYsC3xh5TRPrOjTy0i8TIkSz1JdNL4GPVdf3KQ==", "dev": true }, + "@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -16057,9 +15704,9 @@ "integrity": "sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==" }, "@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", "requires": { "@types/node": "*" } @@ -16272,42 +15919,47 @@ } }, "@wdio/config": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.8.0.tgz", - "integrity": "sha512-gm8gXqpiIR0EU9Blkqmxe+xsEoKS2EXpWrKlx2JXyx3Yf7By0UNsZVZHMSO8lLunzUjYIntpWYpmKmBmnlrnKQ==", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.10.7.tgz", + "integrity": "sha512-m7JX9X/RPM+4KZQkSUhPHXeS3PJJky0UB62ZLh28TYCzVxEKNq1gFb6Cvqfn+w6Ym/UCFBaZzDrRLLXUAgUifw==", "requires": { - "@wdio/logger": "8.6.6", - "@wdio/types": "8.8.0", - "@wdio/utils": "8.8.0", + "@wdio/logger": "8.10.6", + "@wdio/types": "8.10.4", + "@wdio/utils": "8.10.7", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", - "glob": "^9.3.0", - "import-meta-resolve": "^2.1.0", + "glob": "^10.2.2", + "import-meta-resolve": "^3.0.0", "read-pkg-up": "^9.1.0" }, "dependencies": { "@wdio/logger": { - "version": "8.6.6", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", - "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", + "version": "8.10.6", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.10.6.tgz", + "integrity": "sha512-pJYKecNYS0vu0FxDaii6MYQlYkORDLGdRWi70hrihH20sMZofzMA1tvzRMRk1VTrsUUE4TLJXKdmT2JRMN+OPw==", "requires": { "chalk": "^5.1.2", "loglevel": "^1.6.0", "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" + "strip-ansi": "^7.1.0" } }, "@wdio/utils": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", - "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.10.7.tgz", + "integrity": "sha512-G9r/bQl4J25WPKeW0e+27gqNvG+x7MyZEOICl6SwyBe0SqO7JBFOBARx4oUEp2zQYmnCRNtCrHa7yM/O4OPuKA==", "requires": { - "@wdio/logger": "8.6.6", - "@wdio/types": "8.8.0", - "import-meta-resolve": "^2.2.0", + "@wdio/logger": "8.10.6", + "@wdio/types": "8.10.4", + "import-meta-resolve": "^3.0.0", "p-iteration": "^1.1.8" } }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -16317,9 +15969,9 @@ } }, "chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" }, "decamelize": { "version": "6.0.0", @@ -16335,15 +15987,25 @@ "path-exists": "^5.0.0" } }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, "glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.1.tgz", + "integrity": "sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==", "requires": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.10.0" } }, "locate-path": { @@ -16355,9 +16017,9 @@ } }, "minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", + "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", "requires": { "brace-expansion": "^2.0.1" } @@ -16404,6 +16066,19 @@ "type-fest": "^2.5.0" } }, + "signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==" + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, "type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", @@ -16417,12 +16092,12 @@ } }, "@wdio/globals": { - "version": "8.5.7", - "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.5.7.tgz", - "integrity": "sha512-N2H8AW5jN17SzgR+9qvxScHX7Mc1BoLXTsbnOghTzTibgn7jEcuyLVOFU5INZYQ3YHO26BYVjvPV7ZXzeaDjHQ==", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.10.7.tgz", + "integrity": "sha512-f+oBuQjJAOXoWwUffjbQk26gNGqQ4d8dnB6fVW7C/WwhuButKwm4pyBEp0RpU5G3a5pYn0bQP95cziuozTU1rg==", "requires": { "expect-webdriverio": "^4.0.1", - "webdriverio": "8.5.7" + "webdriverio": "8.10.7" }, "dependencies": { "@jest/expect-utils": { @@ -16463,129 +16138,12 @@ "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", "optional": true }, - "@sindresorhus/is": { - "version": "5.4.1", - "resolved": "https://npm.yandex-team.ru/@sindresorhus%2fis/-/is-5.4.1.tgz?rbtorrent=13f9f5ca70a1b6087599b035b953c2de7b4cc924", - "integrity": "sha512-axlrvsHlHlFmKKMEg4VyvMzFr93JWJj4eIfXY1STVuO2fsImCa7ncaiG5gC8HKOX590AW5RtRsC41/B+OfrSqw==", - "optional": true - }, - "@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://npm.yandex-team.ru/@szmarczak%2fhttp-timer/-/http-timer-5.0.1.tgz?rbtorrent=99bd8fa633bb5b8e8ed6651d5ebe2d4ea37d6f54", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "optional": true, - "requires": { - "defer-to-connect": "^2.0.1" - } - }, "@types/node": { - "version": "18.16.18", - "resolved": "https://npm.yandex-team.ru/@types%2fnode/-/node-18.16.18.tgz?rbtorrent=83fda51c0e701896a61cbc846be4de52182845a2", - "integrity": "sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==", - "optional": true - }, - "@wdio/config": { - "version": "8.5.6", - "resolved": "https://npm.yandex-team.ru/@wdio%2fconfig/-/config-8.5.6.tgz?rbtorrent=6ed0b4fe39c132e6fc619acf178046815f79b5de", - "integrity": "sha512-+p6RS9O7NSiFWaezQx/i3ikDQrUMUP5PhQ2RU35tRxENEwNoeEROTC+fL7daE+FaDYo4+ugi46DBOtX9uHhVqA==", - "optional": true, - "requires": { - "@wdio/logger": "8.1.0", - "@wdio/types": "8.4.0", - "@wdio/utils": "8.5.6", - "decamelize": "^6.0.0", - "deepmerge-ts": "^4.2.2", - "glob": "^8.0.3", - "import-meta-resolve": "^2.1.0", - "read-pkg-up": "^9.1.0" - } - }, - "@wdio/logger": { - "version": "8.1.0", - "resolved": "https://npm.yandex-team.ru/@wdio%2flogger/-/logger-8.1.0.tgz?rbtorrent=4d004587a48b17e29c4046fa7977fd9ddf606ef8", - "integrity": "sha512-QRC5b7FF4JIYUCqggnVA0sZ80TwIUFN9JyBSbuGuMxaSLSLujSo7WfuSrnQXVvsRbnJ16wWwJWYigfLkxOW86Q==", - "optional": true, - "requires": { - "chalk": "^5.1.2", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "chalk": { - "version": "5.2.0", - "resolved": "https://npm.yandex-team.ru/chalk/-/chalk-5.2.0.tgz?rbtorrent=192bd9725e7a41e810e07d19ea39961b9da483bd", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "optional": true - } - } - }, - "@wdio/protocols": { - "version": "8.5.7", - "resolved": "https://npm.yandex-team.ru/@wdio%2fprotocols/-/protocols-8.5.7.tgz?rbtorrent=2089ca1003b745743049126418d90772a6027a75", - "integrity": "sha512-ymdXSRqHugEptLdjLnvX7m7TY6cvae1B1yiFJVpaKwj88s4PaCUs7aISexC0ES9s6z8ZWRjZo3mrKPlwZ/IKCw==", - "optional": true - }, - "@wdio/repl": { - "version": "8.1.0", - "resolved": "https://npm.yandex-team.ru/@wdio%2frepl/-/repl-8.1.0.tgz?rbtorrent=a7bd6e73d3dbec80c20bf555c2a946a78a0fd4bd", - "integrity": "sha512-96G4TzbYnRf95+GURo15FYt6iTYq85nbWU6YQedLRAV15RfSp4foKTbAnq++bKKMALNL6gdzTc+HGhQr3Q0sQg==", - "optional": true, - "requires": { - "@types/node": "^18.0.0" - } - }, - "@wdio/types": { - "version": "8.4.0", - "resolved": "https://npm.yandex-team.ru/@wdio%2ftypes/-/types-8.4.0.tgz?rbtorrent=bb68bd8e1df7d6b528dba43c8c4fc7938b1e4e89", - "integrity": "sha512-1eA0D0jS8Ttg67zB2gsZJFUcHcRz4VRjLTjxdLKh70+ZfB1+YZr9tScLgQjc+qsjsK1wKSzOz03uZiidwNnN9g==", - "optional": true, - "requires": { - "@types/node": "^18.0.0" - } - }, - "@wdio/utils": { - "version": "8.5.6", - "resolved": "https://npm.yandex-team.ru/@wdio%2futils/-/utils-8.5.6.tgz?rbtorrent=c422d164438fe468aed0c02a4f0a0bde811cb055", - "integrity": "sha512-Al1NWSnA4H/7Sp+DuNisGPqN4x3xcEEGTGyGPQycWbF5ZPPuAT8lQ1v6+SkcpYiuJ5x3MlfaedJsYL10Dbz5PA==", - "optional": true, - "requires": { - "@wdio/logger": "8.1.0", - "@wdio/types": "8.4.0", - "import-meta-resolve": "^2.2.0", - "p-iteration": "^1.1.8" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://npm.yandex-team.ru/brace-expansion/-/brace-expansion-2.0.1.tgz?rbtorrent=320d365acd352e486b7140205554b6b4afcbc99b", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "optional": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://npm.yandex-team.ru/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz?rbtorrent=424e1ce9d34d84566b14c7218ff859df99f2d205", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "version": "18.16.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.19.tgz", + "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==", "optional": true }, - "cacheable-request": { - "version": "10.2.12", - "resolved": "https://npm.yandex-team.ru/cacheable-request/-/cacheable-request-10.2.12.tgz?rbtorrent=534b768efea2318336c7fe3ec7a75c5338f78afb", - "integrity": "sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw==", - "optional": true, - "requires": { - "@types/http-cache-semantics": "^4.0.1", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.2", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - } - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -16596,70 +16154,12 @@ "supports-color": "^7.1.0" } }, - "chromium-bidi": { - "version": "0.4.4", - "resolved": "https://npm.yandex-team.ru/chromium-bidi/-/chromium-bidi-0.4.4.tgz?rbtorrent=9ec95fda4ed7fa499bd5e74a5eb7fb9d4ead964f", - "integrity": "sha512-4BX5cSaponuvVT1+SbLYTOAgDoVtX/Khoc9UsbFJ/AsPVUeFAM3RiIDFI6XFhLYMi9WmVJqh1ZH+dRpNKkKwiQ==", - "optional": true, - "requires": { - "mitt": "3.0.0" - } - }, "ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "optional": true }, - "debug": { - "version": "4.3.4", - "resolved": "https://npm.yandex-team.ru/debug/-/debug-4.3.4.tgz?rbtorrent=f132914bb7359f9b0a7f85f6f8a73dd70702bd71", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "optional": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "6.0.0", - "resolved": "https://npm.yandex-team.ru/decamelize/-/decamelize-6.0.0.tgz?rbtorrent=be6b1a94dcb0106912a8308bb3f31c72ad5038af", - "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", - "optional": true - }, - "deepmerge-ts": { - "version": "4.3.0", - "resolved": "https://npm.yandex-team.ru/deepmerge-ts/-/deepmerge-ts-4.3.0.tgz?rbtorrent=964448cd3cf56d8ce623e7dc0c8230af1fb2f674", - "integrity": "sha512-if3ZYdkD2dClhnXR5reKtG98cwyaRT1NeugQoAPTTfsOpV9kqyeiBF9Qa5RHjemb3KzD5ulqygv6ED3t5j9eJw==", - "optional": true - }, - "devtools": { - "version": "8.5.7", - "resolved": "https://npm.yandex-team.ru/devtools/-/devtools-8.5.7.tgz?rbtorrent=e46269963e371976e4abb7147469aea1cc82437b", - "integrity": "sha512-ikZQFHtyh77Bis0oiAODM8L5MHyzuzjTO1R5s6Z9DA3axefMgXJFzFebA8ku/MCXnl1+GmPdKp2aHC+4YXPYuQ==", - "optional": true, - "requires": { - "@types/node": "^18.0.0", - "@wdio/config": "8.5.6", - "@wdio/logger": "8.1.0", - "@wdio/protocols": "8.5.7", - "@wdio/types": "8.4.0", - "@wdio/utils": "8.5.6", - "chrome-launcher": "^0.15.0", - "edge-paths": "^3.0.5", - "import-meta-resolve": "^2.1.0", - "puppeteer-core": "19.7.2", - "query-selector-shadow-dom": "^1.0.0", - "ua-parser-js": "^1.0.1", - "uuid": "^9.0.0", - "which": "^3.0.0" - } - }, - "devtools-protocol": { - "version": "0.0.1109433", - "resolved": "https://npm.yandex-team.ru/devtools-protocol/-/devtools-protocol-0.0.1109433.tgz?rbtorrent=478632171f47b6bcc08f9b71ad4c9c6df7370e20", - "integrity": "sha512-w1Eqih66egbSr2eOoGZ+NsdF7HdxmKDo3pKFBySEGsmVvwWWNXzNCDcKrbFnd23Jf7kH1M806OfelXwu+Jk11g==", - "optional": true - }, "diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", @@ -16687,79 +16187,10 @@ "requires": { "@wdio/globals": "^8.2.4", "expect": "^29.4.0", - "jest-matcher-utils": "^29.4.0", - "webdriverio": "^8.2.4" - } - }, - "find-up": { - "version": "6.3.0", - "resolved": "https://npm.yandex-team.ru/find-up/-/find-up-6.3.0.tgz?rbtorrent=426d564bda8929e818dbd51aef74d7327d97594a", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "optional": true, - "requires": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - } - }, - "glob": { - "version": "8.1.0", - "resolved": "https://npm.yandex-team.ru/glob/-/glob-8.1.0.tgz?rbtorrent=4a1b49c73faeab383f2117f1662ae3c24b1b1565", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "dependencies": { - "minimatch": { - "version": "5.1.6", - "resolved": "https://npm.yandex-team.ru/minimatch/-/minimatch-5.1.6.tgz?rbtorrent=1207d7dfdc5522831e65586973e56b77299a2fae", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "optional": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "got": { - "version": "12.6.1", - "resolved": "https://npm.yandex-team.ru/got/-/got-12.6.1.tgz?rbtorrent=54d97ffe9ebad5e130cda8e113b91a0c77ee5dd4", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "optional": true, - "requires": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - } - }, - "http2-wrapper": { - "version": "2.2.0", - "resolved": "https://npm.yandex-team.ru/http2-wrapper/-/http2-wrapper-2.2.0.tgz?rbtorrent=fac72adc53801aac16a466030a33c7da5df5d693", - "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", - "optional": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" + "jest-matcher-utils": "^29.4.0", + "webdriverio": "^8.2.4" } }, - "is-plain-obj": { - "version": "4.1.0", - "resolved": "https://npm.yandex-team.ru/is-plain-obj/-/is-plain-obj-4.1.0.tgz?rbtorrent=6a36d3ad785f7855d75b0e5bc7f4e82798becf86", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "optional": true - }, "jest-diff": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", @@ -16821,78 +16252,6 @@ "picomatch": "^2.2.3" } }, - "locate-path": { - "version": "7.2.0", - "resolved": "https://npm.yandex-team.ru/locate-path/-/locate-path-7.2.0.tgz?rbtorrent=9e4cfb336eabaf8dcc889343ddb9ad127780966e", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "optional": true, - "requires": { - "p-locate": "^6.0.0" - } - }, - "lowercase-keys": { - "version": "3.0.0", - "resolved": "https://npm.yandex-team.ru/lowercase-keys/-/lowercase-keys-3.0.0.tgz?rbtorrent=b98a941f32dfe82182d0b804497cda8280401483", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "optional": true - }, - "mimic-response": { - "version": "4.0.0", - "resolved": "https://npm.yandex-team.ru/mimic-response/-/mimic-response-4.0.0.tgz?rbtorrent=be1973fc1a90556e454f187aa43665422b6fa529", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "optional": true - }, - "minimatch": { - "version": "7.4.6", - "resolved": "https://npm.yandex-team.ru/minimatch/-/minimatch-7.4.6.tgz?rbtorrent=604477e9c6e4fa38fbedb5842b6b44b5d1350db0", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", - "optional": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://npm.yandex-team.ru/ms/-/ms-2.1.2.tgz?rbtorrent=269d2b1e4b633a2572e485adbd93b4085872ffe0", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "optional": true - }, - "normalize-url": { - "version": "8.0.0", - "resolved": "https://npm.yandex-team.ru/normalize-url/-/normalize-url-8.0.0.tgz?rbtorrent=66d000631bad2da6c6393ba9a995e6f9eac375c7", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", - "optional": true - }, - "p-cancelable": { - "version": "3.0.0", - "resolved": "https://npm.yandex-team.ru/p-cancelable/-/p-cancelable-3.0.0.tgz?rbtorrent=e5b24d1f5904e82d1050e2b4921bc81041aa83f1", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "optional": true - }, - "p-limit": { - "version": "4.0.0", - "resolved": "https://npm.yandex-team.ru/p-limit/-/p-limit-4.0.0.tgz?rbtorrent=04ebc9376d217bf5eae6948162639f4fef0bed01", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "optional": true, - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "p-locate": { - "version": "6.0.0", - "resolved": "https://npm.yandex-team.ru/p-locate/-/p-locate-6.0.0.tgz?rbtorrent=843ab0db851ee436a6d83342a418ad8542187f54", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "optional": true, - "requires": { - "p-limit": "^4.0.0" - } - }, - "path-exists": { - "version": "5.0.0", - "resolved": "https://npm.yandex-team.ru/path-exists/-/path-exists-5.0.0.tgz?rbtorrent=cf3225878ed726e2ef1478824cbe9bd59d332d21", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "optional": true - }, "pretty-format": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", @@ -16911,201 +16270,6 @@ "optional": true } } - }, - "puppeteer-core": { - "version": "19.7.2", - "resolved": "https://npm.yandex-team.ru/puppeteer-core/-/puppeteer-core-19.7.2.tgz?rbtorrent=335d74f13aef6433e06df73bcf6ef99230ef7944", - "integrity": "sha512-PvI+fXqgP0uGJxkyZcX51bnzjFA73MODZOAv0fSD35yR7tvbqwtMV3/Y+hxQ0AMMwzxkEebP6c7po/muqxJvmQ==", - "optional": true, - "requires": { - "chromium-bidi": "0.4.4", - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1094867", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.11.0" - }, - "dependencies": { - "devtools-protocol": { - "version": "0.0.1094867", - "resolved": "https://npm.yandex-team.ru/devtools-protocol/-/devtools-protocol-0.0.1094867.tgz?rbtorrent=fb53efd31986b2c42b3a65fa2c2eb6124ffd4e58", - "integrity": "sha512-pmMDBKiRVjh0uKK6CT1WqZmM3hBVSgD+N2MrgyV1uNizAZMw4tx6i/RTc+/uCsKSCmg0xXx7arCP/OFcIwTsiQ==", - "optional": true - } - } - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://npm.yandex-team.ru/quick-lru/-/quick-lru-5.1.1.tgz?rbtorrent=3e1817d08f7f06276cc9e9421c9542dc86cb59c2", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "optional": true - }, - "read-pkg": { - "version": "7.1.0", - "resolved": "https://npm.yandex-team.ru/read-pkg/-/read-pkg-7.1.0.tgz?rbtorrent=b2612c88796371e5d6e2603c9e5bc9eb9c5170d3", - "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", - "optional": true, - "requires": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "9.1.0", - "resolved": "https://npm.yandex-team.ru/read-pkg-up/-/read-pkg-up-9.1.0.tgz?rbtorrent=6fcb3679535185920cfa1be8ab14382aeebdfda3", - "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", - "optional": true, - "requires": { - "find-up": "^6.3.0", - "read-pkg": "^7.1.0", - "type-fest": "^2.5.0" - } - }, - "responselike": { - "version": "3.0.0", - "resolved": "https://npm.yandex-team.ru/responselike/-/responselike-3.0.0.tgz?rbtorrent=35a03f5dcdb553ce246295269addeca90b5fa617", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "optional": true, - "requires": { - "lowercase-keys": "^3.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://npm.yandex-team.ru/rimraf/-/rimraf-3.0.2.tgz?rbtorrent=e56d76da53e035fd23b4819f6bdcbe4abc4e2961", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "optional": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://npm.yandex-team.ru/brace-expansion/-/brace-expansion-1.1.11.tgz?rbtorrent=a6f8ec4328e2858a0be33ed363e562a14b677c34", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://npm.yandex-team.ru/glob/-/glob-7.2.3.tgz?rbtorrent=f1e3c1229b0ce68ff2e1c79bdb0c4be8b1bcd5e6", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://npm.yandex-team.ru/minimatch/-/minimatch-3.1.2.tgz?rbtorrent=ff75648d716a472d61b2fafcf5250b152d4b84b4", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://npm.yandex-team.ru/type-fest/-/type-fest-2.19.0.tgz?rbtorrent=22513d0a716622c760b755a8b11e7ebdcfa5c374", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "optional": true - }, - "uuid": { - "version": "9.0.0", - "resolved": "https://npm.yandex-team.ru/uuid/-/uuid-9.0.0.tgz?rbtorrent=edc208d2ac9e251e522a921c7e1f2f1cd6c3a019", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "optional": true - }, - "webdriver": { - "version": "8.5.7", - "resolved": "https://npm.yandex-team.ru/webdriver/-/webdriver-8.5.7.tgz?rbtorrent=e531be1614ef8e687d75cc7663ce6b0b5fa24f9b", - "integrity": "sha512-KDw72g7EY0tqvSDkfF1YFHIw75VOVKKAesGxag3++8nVtp+YNsE/6xr9iov7UDKjre3tXphgj//r2RouSDCO5g==", - "optional": true, - "requires": { - "@types/node": "^18.0.0", - "@types/ws": "^8.5.3", - "@wdio/config": "8.5.6", - "@wdio/logger": "8.1.0", - "@wdio/protocols": "8.5.7", - "@wdio/types": "8.4.0", - "@wdio/utils": "8.5.6", - "deepmerge-ts": "^4.2.2", - "got": "^12.1.0", - "ky": "^0.33.0", - "ws": "^8.8.0" - } - }, - "webdriverio": { - "version": "8.5.7", - "resolved": "https://npm.yandex-team.ru/webdriverio/-/webdriverio-8.5.7.tgz?rbtorrent=a33a9651e6789d0c0d844aade5b47309ac991ebd", - "integrity": "sha512-gFXozyOCPhxkzNiBnvHbJHJVA8fozCqR/TlsOgbwEyc7ww12ZxhoXT8fqdObVd/MYdm0BKdCIUU3AW06hqakRw==", - "optional": true, - "requires": { - "@types/node": "^18.0.0", - "@wdio/config": "8.5.6", - "@wdio/logger": "8.1.0", - "@wdio/protocols": "8.5.7", - "@wdio/repl": "8.1.0", - "@wdio/types": "8.4.0", - "@wdio/utils": "8.5.6", - "archiver": "^5.0.0", - "aria-query": "^5.0.0", - "css-shorthand-properties": "^1.1.1", - "css-value": "^0.0.1", - "devtools": "8.5.7", - "devtools-protocol": "^0.0.1109433", - "grapheme-splitter": "^1.0.2", - "import-meta-resolve": "^2.1.0", - "is-plain-obj": "^4.1.0", - "lodash.clonedeep": "^4.5.0", - "lodash.zip": "^4.2.0", - "minimatch": "^7.0.0", - "puppeteer-core": "19.7.2", - "query-selector-shadow-dom": "^1.0.0", - "resq": "^1.9.1", - "rgb2hex": "0.2.5", - "serialize-error": "^8.0.0", - "webdriver": "8.5.7" - } - }, - "which": { - "version": "3.0.1", - "resolved": "https://npm.yandex-team.ru/which/-/which-3.0.1.tgz?rbtorrent=e38ce8136fd6347635e65781f9b4cb7f6a25f358", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "optional": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "ws": { - "version": "8.11.0", - "resolved": "https://npm.yandex-team.ru/ws/-/ws-8.11.0.tgz?rbtorrent=8ec1c5b8a63bb6574059a6b7ceafb910f3250c9b", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "optional": true, - "requires": {} - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://npm.yandex-team.ru/yocto-queue/-/yocto-queue-1.0.0.tgz?rbtorrent=67f0457afe674ec0a4a5f8593f63c99f7513ee6c", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "optional": true } } }, @@ -17132,37 +16296,37 @@ } }, "@wdio/protocols": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.8.1.tgz", - "integrity": "sha512-nDaycUcm/ATLxcjim0fJyRiezXyyj4ZCq+Xf0S2Cubc0k7+DceFBt7KIMsernNVh2pelzFHEEwxh4DLaqQ71Wg==" + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.10.2.tgz", + "integrity": "sha512-Iv7Nqq6YsMQR9qvOM2mswUcKwx7bdx3cWVSmbMc8hwGJuNCBI+BP1fzmD9OidUftd1CQNvfugsG8Vq8vQWRyGg==" }, "@wdio/repl": { - "version": "8.6.6", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.6.6.tgz", - "integrity": "sha512-vyJzqHJ5yOmfVyk5WWo6pRsJ2xhgWl3DVIBdDNR0wKrtFcm/g1jnB+pNf6Eb7NhCDh3oGul25bmhAwWDoxcFYA==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.10.1.tgz", + "integrity": "sha512-VZ1WFHTNKjR8Ga97TtV2SZM6fvRjWbYI2i/f4pJB4PtusorKvONAMJf2LQcUBIyzbVobqr7KSrcjmSwRolI+yw==", "requires": { - "@types/node": "^18.0.0" + "@types/node": "^20.1.0" }, "dependencies": { "@types/node": { - "version": "18.16.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.2.tgz", - "integrity": "sha512-GQW/JL/5Fz/0I8RpeBG9lKp0+aNcXEaVL71c0D2Q0QHDTFvlYKT7an0onCUXj85anv7b4/WesqdfchLc0jtsCg==" + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" } } }, "@wdio/types": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.8.0.tgz", - "integrity": "sha512-Ai6yIlwWB32FUfvQKCqSa6nSyHIhSF5BOU9OfE7I2XYkLAJTxu8B6NORHQ+rgoppHSWc4D2V9r21y3etF8AGnQ==", + "version": "8.10.4", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.10.4.tgz", + "integrity": "sha512-aLJ1QQW+hhALeRK3bvMLjIrlUVyhOs3Od+91pR4Z4pLwyeNG1bJZCJRD5bAJK/mm7CnFa0NsdixPS9jJxZcRrw==", "requires": { - "@types/node": "^18.0.0" + "@types/node": "^20.1.0" }, "dependencies": { "@types/node": { - "version": "18.11.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", - "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==" + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" } } }, @@ -18140,9 +17304,9 @@ } }, "chromium-bidi": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.6.tgz", - "integrity": "sha512-TQOkWRaLI/IWvoP8XC+7jO4uHTIiAUiklXU1T0qszlUFEai9LgKXIBXy3pOS3EnQZ3bQtMbKUPkug0fTAEHCSw==", + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.9.tgz", + "integrity": "sha512-u3DC6XwgLCA9QJ5ak1voPslCmacQdulZNCPsI3qNXxSnEcZS7DFIbww+5RM2bznMEje7cc0oydavRLRvOIZtHw==", "requires": { "mitt": "3.0.0" } @@ -18990,18 +18154,17 @@ "dev": true }, "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", "requires": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.11" } }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -19247,20 +18410,20 @@ } }, "devtools": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.8.2.tgz", - "integrity": "sha512-iD/Xr5rMjx+VD08akiAuiMR5EhWKj9i489rcDm2vdC9iB8u8HY51s9FbmnIrN5OstYma0x2qOF2zKxM/muJTtw==", - "requires": { - "@types/node": "^18.0.0", - "@wdio/config": "8.8.0", - "@wdio/logger": "8.6.6", - "@wdio/protocols": "8.8.1", - "@wdio/types": "8.8.0", - "@wdio/utils": "8.8.0", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.10.7.tgz", + "integrity": "sha512-picJDxsjpaOW7gnQjcQVGDXvxuP1RZ4VNJpvJ+qiy86Gf3l4FGLKYkpJJFAMsIugL0XPs89bIVhjbtIv5NGL1w==", + "requires": { + "@types/node": "^20.1.0", + "@wdio/config": "8.10.7", + "@wdio/logger": "8.10.6", + "@wdio/protocols": "8.10.2", + "@wdio/types": "8.10.4", + "@wdio/utils": "8.10.7", "chrome-launcher": "^0.15.0", "edge-paths": "^3.0.5", - "import-meta-resolve": "^2.1.0", - "puppeteer-core": "19.8.5", + "import-meta-resolve": "^3.0.0", + "puppeteer-core": "20.3.0", "query-selector-shadow-dom": "^1.0.0", "ua-parser-js": "^1.0.1", "uuid": "^9.0.0", @@ -19268,36 +18431,49 @@ }, "dependencies": { "@types/node": { - "version": "18.16.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.2.tgz", - "integrity": "sha512-GQW/JL/5Fz/0I8RpeBG9lKp0+aNcXEaVL71c0D2Q0QHDTFvlYKT7an0onCUXj85anv7b4/WesqdfchLc0jtsCg==" + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" }, "@wdio/logger": { - "version": "8.6.6", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", - "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", + "version": "8.10.6", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.10.6.tgz", + "integrity": "sha512-pJYKecNYS0vu0FxDaii6MYQlYkORDLGdRWi70hrihH20sMZofzMA1tvzRMRk1VTrsUUE4TLJXKdmT2JRMN+OPw==", "requires": { "chalk": "^5.1.2", "loglevel": "^1.6.0", "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" + "strip-ansi": "^7.1.0" } }, "@wdio/utils": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", - "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.10.7.tgz", + "integrity": "sha512-G9r/bQl4J25WPKeW0e+27gqNvG+x7MyZEOICl6SwyBe0SqO7JBFOBARx4oUEp2zQYmnCRNtCrHa7yM/O4OPuKA==", "requires": { - "@wdio/logger": "8.6.6", - "@wdio/types": "8.8.0", - "import-meta-resolve": "^2.2.0", + "@wdio/logger": "8.10.6", + "@wdio/types": "8.10.4", + "import-meta-resolve": "^3.0.0", "p-iteration": "^1.1.8" } }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, "chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } }, "uuid": { "version": "9.0.0", @@ -19305,9 +18481,9 @@ "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" }, "which": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", - "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "requires": { "isexe": "^2.0.0" } @@ -19315,9 +18491,9 @@ } }, "devtools-protocol": { - "version": "0.0.1124027", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1124027.tgz", - "integrity": "sha512-OT2sdgQn4llM9/tVcCvoty733KFFIlXVvESceJsfazhmg/dF7C5e3Z8cIN8jNwIikixuE5rufGtD1cvKHXfOcQ==" + "version": "0.0.1149535", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1149535.tgz", + "integrity": "sha512-vpM8tGaYz2nrN9n8rvUEhQCgU05ocejO5WIJySsftEHxUahQ/fWuNyPxXuQNBEmaISYyMZkxCunhjtSEyBl/Dg==" }, "diff": { "version": "5.0.0", @@ -19508,6 +18684,11 @@ "readable-stream": "^2.0.2" } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "edge-paths": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-3.0.5.tgz", @@ -20779,9 +19960,9 @@ } }, "import-meta-resolve": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", - "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz", + "integrity": "sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==" }, "imurmurhash": { "version": "0.1.4", @@ -21130,6 +20311,15 @@ "istanbul-lib-report": "^3.0.0" } }, + "jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "jest-diff": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", @@ -21452,9 +20642,9 @@ } }, "lighthouse-logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", - "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", "requires": { "debug": "^2.6.9", "marky": "^1.2.2" @@ -22093,9 +21283,9 @@ } }, "minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==" + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", + "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==" }, "mitt": { "version": "3.0.0", @@ -22396,9 +21586,9 @@ } }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", "requires": { "whatwg-url": "^5.0.0" }, @@ -22888,8 +22078,7 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", @@ -22902,23 +22091,18 @@ "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==" }, "path-scurry": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.7.0.tgz", - "integrity": "sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.0.tgz", + "integrity": "sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g==", "requires": { - "lru-cache": "^9.0.0", - "minipass": "^5.0.0" + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2" }, "dependencies": { "lru-cache": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.1.tgz", - "integrity": "sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==" - }, - "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==" } } }, @@ -23201,20 +22385,15 @@ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, "puppeteer-core": { - "version": "19.8.5", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.8.5.tgz", - "integrity": "sha512-zoGhim/oBQbkND6h4Xz4X7l5DkWVH9wH7z0mVty5qa/c0P1Yad47t/npVtt2xS10BiQwzztWKx7Pa2nJ5yykdw==", + "version": "20.3.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.3.0.tgz", + "integrity": "sha512-264pBrIui5bO6NJeOcbJrLa0OCwmA4+WK00JMrLIKTfRiqe2gx8KWTzLsjyw/bizErp3TKS7vt/I0i5fTC+mAw==", "requires": { - "@puppeteer/browsers": "0.4.0", - "chromium-bidi": "0.4.6", - "cross-fetch": "3.1.5", + "@puppeteer/browsers": "1.3.0", + "chromium-bidi": "0.4.9", + "cross-fetch": "3.1.6", "debug": "4.3.4", - "devtools-protocol": "0.0.1107588", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", + "devtools-protocol": "0.0.1120988", "ws": "8.13.0" }, "dependencies": { @@ -23227,9 +22406,9 @@ } }, "devtools-protocol": { - "version": "0.0.1107588", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", - "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==" + "version": "0.0.1120988", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1120988.tgz", + "integrity": "sha512-39fCpE3Z78IaIPChJsP6Lhmkbf4dWXOmzLk/KFTdRkNk/0JymRIfUynDVRndV9HoDz8PyalK1UH21ST/ivwW5Q==" }, "ms": { "version": "2.1.2", @@ -23721,7 +22900,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -23729,8 +22907,7 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shell-quote": { "version": "1.7.3", @@ -24121,6 +23298,16 @@ "strip-ansi": "^6.0.1" } }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "stringify-package": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", @@ -24135,6 +23322,14 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -24844,27 +24039,27 @@ } }, "webdriver": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.8.2.tgz", - "integrity": "sha512-ug+7n0JgRTLG5pGyD53VKValSLFcr0oll1QelH1Gueh/umt3Ipu+SDV+v+lyCZY6CKasCsv80W8oZfpLBj1ClQ==", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.10.7.tgz", + "integrity": "sha512-pBy29S9e8IYKYHfS0gp91Jp9SUvXJQckJKJdj+VNLNL9toSFo10N7xRpv8W1f7HkniXrgESi9GHYNyc1J/5lLA==", "requires": { - "@types/node": "^18.0.0", + "@types/node": "^20.1.0", "@types/ws": "^8.5.3", - "@wdio/config": "8.8.0", - "@wdio/logger": "8.6.6", - "@wdio/protocols": "8.8.1", - "@wdio/types": "8.8.0", - "@wdio/utils": "8.8.0", + "@wdio/config": "8.10.7", + "@wdio/logger": "8.10.6", + "@wdio/protocols": "8.10.2", + "@wdio/types": "8.10.4", + "@wdio/utils": "8.10.7", "deepmerge-ts": "^5.0.0", - "got": "^12.1.0", + "got": "^ 12.6.1", "ky": "^0.33.0", "ws": "^8.8.0" }, "dependencies": { "@sindresorhus/is": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", - "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==" + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.4.1.tgz", + "integrity": "sha512-axlrvsHlHlFmKKMEg4VyvMzFr93JWJj4eIfXY1STVuO2fsImCa7ncaiG5gC8HKOX590AW5RtRsC41/B+OfrSqw==" }, "@szmarczak/http-timer": { "version": "5.0.1", @@ -24875,41 +24070,46 @@ } }, "@types/node": { - "version": "18.16.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.2.tgz", - "integrity": "sha512-GQW/JL/5Fz/0I8RpeBG9lKp0+aNcXEaVL71c0D2Q0QHDTFvlYKT7an0onCUXj85anv7b4/WesqdfchLc0jtsCg==" + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" }, "@wdio/logger": { - "version": "8.6.6", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", - "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", + "version": "8.10.6", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.10.6.tgz", + "integrity": "sha512-pJYKecNYS0vu0FxDaii6MYQlYkORDLGdRWi70hrihH20sMZofzMA1tvzRMRk1VTrsUUE4TLJXKdmT2JRMN+OPw==", "requires": { "chalk": "^5.1.2", "loglevel": "^1.6.0", "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" + "strip-ansi": "^7.1.0" } }, "@wdio/utils": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", - "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.10.7.tgz", + "integrity": "sha512-G9r/bQl4J25WPKeW0e+27gqNvG+x7MyZEOICl6SwyBe0SqO7JBFOBARx4oUEp2zQYmnCRNtCrHa7yM/O4OPuKA==", "requires": { - "@wdio/logger": "8.6.6", - "@wdio/types": "8.8.0", - "import-meta-resolve": "^2.2.0", + "@wdio/logger": "8.10.6", + "@wdio/types": "8.10.4", + "import-meta-resolve": "^3.0.0", "p-iteration": "^1.1.8" } }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, "cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==" }, "cacheable-request": { - "version": "10.2.10", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz", - "integrity": "sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ==", + "version": "10.2.12", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.12.tgz", + "integrity": "sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw==", "requires": { "@types/http-cache-semantics": "^4.0.1", "get-stream": "^6.0.1", @@ -24921,14 +24121,14 @@ } }, "chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" }, "got": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.0.tgz", - "integrity": "sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==", + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "requires": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", @@ -24985,6 +24185,14 @@ "lowercase-keys": "^3.0.0" } }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, "ws": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", @@ -24994,64 +24202,69 @@ } }, "webdriverio": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.8.2.tgz", - "integrity": "sha512-H3h+sHLg9hfQCPLvpd30hi/ZW4lLy73m4zrZ5kJyuuUf38SZFLcfXD3W1RGig88RQ/75Ui164ugwHasTMiQEgw==", - "requires": { - "@types/node": "^18.0.0", - "@wdio/config": "8.8.0", - "@wdio/logger": "8.6.6", - "@wdio/protocols": "8.8.1", - "@wdio/repl": "8.6.6", - "@wdio/types": "8.8.0", - "@wdio/utils": "8.8.0", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.10.7.tgz", + "integrity": "sha512-TkkPE3zBxdLRdcsNLqHct2OARnfMYB9/A0ri4sccmc3C3dVFiW99NAstN88nzD1SYzXAbxALRuITVd5oswqqhg==", + "requires": { + "@types/node": "^20.1.0", + "@wdio/config": "8.10.7", + "@wdio/logger": "8.10.6", + "@wdio/protocols": "8.10.2", + "@wdio/repl": "8.10.1", + "@wdio/types": "8.10.4", + "@wdio/utils": "8.10.7", "archiver": "^5.0.0", "aria-query": "^5.0.0", "css-shorthand-properties": "^1.1.1", "css-value": "^0.0.1", - "devtools": "8.8.2", - "devtools-protocol": "^0.0.1124027", + "devtools": "8.10.7", + "devtools-protocol": "^0.0.1149535", "grapheme-splitter": "^1.0.2", - "import-meta-resolve": "^2.1.0", + "import-meta-resolve": "^3.0.0", "is-plain-obj": "^4.1.0", "lodash.clonedeep": "^4.5.0", "lodash.zip": "^4.2.0", "minimatch": "^9.0.0", - "puppeteer-core": "19.8.5", + "puppeteer-core": "20.3.0", "query-selector-shadow-dom": "^1.0.0", "resq": "^1.9.1", "rgb2hex": "0.2.5", "serialize-error": "^8.0.0", - "webdriver": "8.8.2" + "webdriver": "8.10.7" }, "dependencies": { "@types/node": { - "version": "18.11.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", - "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==" + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" }, "@wdio/logger": { - "version": "8.6.6", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", - "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", + "version": "8.10.6", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.10.6.tgz", + "integrity": "sha512-pJYKecNYS0vu0FxDaii6MYQlYkORDLGdRWi70hrihH20sMZofzMA1tvzRMRk1VTrsUUE4TLJXKdmT2JRMN+OPw==", "requires": { "chalk": "^5.1.2", "loglevel": "^1.6.0", "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" + "strip-ansi": "^7.1.0" } }, "@wdio/utils": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", - "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.10.7.tgz", + "integrity": "sha512-G9r/bQl4J25WPKeW0e+27gqNvG+x7MyZEOICl6SwyBe0SqO7JBFOBARx4oUEp2zQYmnCRNtCrHa7yM/O4OPuKA==", "requires": { - "@wdio/logger": "8.6.6", - "@wdio/types": "8.8.0", - "import-meta-resolve": "^2.2.0", + "@wdio/logger": "8.10.6", + "@wdio/types": "8.10.4", + "import-meta-resolve": "^3.0.0", "p-iteration": "^1.1.8" } }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -25061,9 +24274,9 @@ } }, "chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" }, "is-plain-obj": { "version": "4.1.0", @@ -25071,12 +24284,20 @@ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" }, "minimatch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", - "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", + "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", "requires": { "brace-expansion": "^2.0.1" } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } } } }, @@ -25162,6 +24383,16 @@ "strip-ansi": "^6.0.0" } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 2f9307856..183ab74e0 100644 --- a/package.json +++ b/package.json @@ -45,8 +45,8 @@ "dependencies": { "@gemini-testing/commander": "2.15.3", "@types/mocha": "^10.0.1", - "@wdio/globals": "^8.5.7", - "@wdio/types": "^8.4.0", + "@wdio/globals": "^8.10.7", + "@wdio/types": "^8.10.4", "@wdio/utils": "^7.26.0", "aliasify": "^1.9.0", "bluebird": "^3.5.1", @@ -73,13 +73,14 @@ "uglifyify": "^3.0.4", "urijs": "^1.19.11", "url-join": "^4.0.1", - "webdriverio": "^8.8.2", + "webdriverio": "^8.10.7", "worker-farm": "^1.7.0", "yallist": "^3.1.1" }, "devDependencies": { "@commitlint/cli": "^17.1.2", "@commitlint/config-conventional": "^17.1.0", + "@sinonjs/fake-timers": "^10.3.0", "@swc/core": "^1.3.40", "@types/bluebird": "^3.5.38", "@types/chai": "^4.3.4", @@ -89,6 +90,7 @@ "@types/proxyquire": "^1.3.28", "@types/sharp": "^0.31.1", "@types/sinon": "^4.3.3", + "@types/sinonjs__fake-timers": "^8.1.2", "@typescript-eslint/eslint-plugin": "^5.54.1", "@typescript-eslint/parser": "^5.54.1", "app-module-path": "^2.2.0", diff --git a/src/browser/commands/index.js b/src/browser/commands/index.js index 9b9277796..fed12ba06 100644 --- a/src/browser/commands/index.js +++ b/src/browser/commands/index.js @@ -1,3 +1,3 @@ "use strict"; -module.exports = ["assert-view", "getConfig", "getPuppeteer", "setOrientation", "scrollIntoView"]; +module.exports = ["assert-view", "getConfig", "getPuppeteer", "setOrientation", "scrollIntoView", "openAndWait"]; diff --git a/src/browser/commands/openAndWait.ts b/src/browser/commands/openAndWait.ts new file mode 100644 index 000000000..d4c1c824a --- /dev/null +++ b/src/browser/commands/openAndWait.ts @@ -0,0 +1,139 @@ +import _ from "lodash"; +import { Matches } from "webdriverio"; +import PageLoader from "../../utils/page-loader"; + +interface Browser { + publicAPI: WebdriverIO.Browser; + config: { + desiredCapabilities: { + browserName: string; + }; + automationProtocol: "webdriver" | "devtools"; + pageLoadTimeout: number; + openAndWaitOpts: { + timeout?: number; + waitNetworkIdle: boolean; + waitNetworkIdleTimeout: number; + rejectOnNetworkError: boolean; + ignoreNetworkErrorsPatterns: Array; + }; + }; +} + +interface WaitOpts { + selector?: string | string[]; + predicate?: () => boolean; + waitNetworkIdle?: boolean; + waitNetworkIdleTimeout?: number; + rejectOnNetworkError?: boolean; + shouldThrowError?: (match: Matches) => boolean; + ignoreNetworkErrorsPatterns?: Array; + timeout?: number; +} + +const emptyPageUrl = "about:blank"; + +const is: Record boolean> = { + image: match => match.headers?.Accept?.includes("image"), + stylesheet: match => match.headers?.Accept?.includes("text/css"), + font: match => _.isString(match.url) && [".ttf", ".woff", ".woff2"].some(ext => match.url.endsWith(ext)), + favicon: match => _.isString(match.url) && match.url.endsWith("/favicon.ico"), +}; + +export = (browser: Browser): void => { + const { publicAPI: session, config } = browser; + const { openAndWaitOpts } = config; + const isChrome = config.desiredCapabilities.browserName === "chrome"; + const isCDP = config.automationProtocol === "devtools"; + + function openAndWait( + uri: string, + { + selector = [], + predicate, + waitNetworkIdle = openAndWaitOpts?.waitNetworkIdle, + waitNetworkIdleTimeout = openAndWaitOpts?.waitNetworkIdleTimeout, + rejectOnNetworkError = openAndWaitOpts?.rejectOnNetworkError, + shouldThrowError = shouldThrowErrorDefault, + ignoreNetworkErrorsPatterns = openAndWaitOpts?.ignoreNetworkErrorsPatterns, + timeout = openAndWaitOpts?.timeout || config?.pageLoadTimeout, + }: WaitOpts = {}, + ): Promise { + waitNetworkIdle &&= isChrome || isCDP; + + if (!uri || uri === emptyPageUrl) { + return session.url(uri); + } + + const selectors = typeof selector === "string" ? [selector] : selector; + + const pageLoader = new PageLoader(session, { + selectors, + predicate, + timeout, + waitNetworkIdle, + waitNetworkIdleTimeout, + }); + + let selectorsResolved = !selectors.length; + let predicateResolved = !predicate; + let networkResolved = !waitNetworkIdle; + + return new Promise((resolve, reject) => { + const handleError = (err: Error): void => { + reject(new Error(`url: ${err.message}`)); + }; + + const checkLoaded = (): void => { + if (selectorsResolved && predicateResolved && networkResolved) { + resolve(); + } + }; + + pageLoader.on("pageLoadError", handleError); + pageLoader.on("selectorsError", handleError); + pageLoader.on("predicateError", handleError); + pageLoader.on("networkError", match => { + if (!rejectOnNetworkError) { + return; + } + + const shouldIgnore = isMatchPatterns(ignoreNetworkErrorsPatterns, match.url); + + if (!shouldIgnore && shouldThrowError(match)) { + reject(new Error(`url: couldn't get content from ${match.url}: ${match.statusCode}`)); + } + }); + pageLoader.on("selectorsExist", () => { + selectorsResolved = true; + checkLoaded(); + }); + + pageLoader.on("predicateResolved", () => { + predicateResolved = true; + checkLoaded(); + }); + + pageLoader.on("networkResolved", () => { + networkResolved = true; + checkLoaded(); + }); + + pageLoader.load(() => session.url(uri)).then(checkLoaded); + }).finally(() => pageLoader.unsubscribe()); + } + + session.addCommand("openAndWait", openAndWait); +}; + +function isMatchPatterns(patterns: Array = [], str: string): boolean { + return patterns.some(pattern => (_.isString(pattern) ? str.includes(pattern) : pattern.exec(str))); +} + +function shouldThrowErrorDefault(match: Matches): boolean { + if (is.favicon(match)) { + return false; + } + + return is.image(match) || is.stylesheet(match) || is.font(match); +} diff --git a/src/config/browser-options.js b/src/config/browser-options.js index e1ef10cf2..b5e66b31c 100644 --- a/src/config/browser-options.js +++ b/src/config/browser-options.js @@ -240,6 +240,16 @@ function buildBrowserOptions(defaultFactory, extra) { }, }), + openAndWaitOpts: option({ + defaultValue: defaultFactory("openAndWaitOpts"), + parseEnv: JSON.parse, + parseCli: JSON.parse, + validate: value => utils.assertOptionalObject(value, "openAndWaitOpts"), + map: value => { + return value === defaults.openAndWaitOpts ? value : { ...defaults.openAndWaitOpts, ...value }; + }, + }), + meta: options.optionalObject("meta"), windowSize: option({ diff --git a/src/config/defaults.js b/src/config/defaults.js index d07fa9748..b649bca3c 100644 --- a/src/config/defaults.js +++ b/src/config/defaults.js @@ -27,6 +27,12 @@ module.exports = { captureElementFromTop: true, allowViewportOverflow: false, }, + openAndWaitOpts: { + waitNetworkIdle: true, + waitNetworkIdleTimeout: 500, + rejectOnNetworkError: true, + ignoreNetworkErrorsPatterns: [], + }, calibrate: false, screenshotMode: "auto", screenshotDelay: 0, diff --git a/src/utils/page-loader.ts b/src/utils/page-loader.ts new file mode 100644 index 000000000..61f7d3ec2 --- /dev/null +++ b/src/utils/page-loader.ts @@ -0,0 +1,157 @@ +import EventEmitter from "events"; +import type { Matches, Mock } from "webdriverio"; +import logger from "./logger"; + +export interface PageLoaderOpts { + selectors: string[]; + predicate?: () => boolean | Promise; + timeout: number; + waitNetworkIdle: boolean; + waitNetworkIdleTimeout: number; +} + +export default class PageLoader extends EventEmitter { + private session: WebdriverIO.Browser; + private mock?: Mock | null; + private selectors: string[]; + private predicate?: () => boolean | Promise; + private timeout: number; + private waitNetworkIdle: boolean; + private waitNetworkIdleTimeout: number; + private totalRequests = 0; + private networkResolved = false; + + constructor( + session: WebdriverIO.Browser, + { selectors, predicate, timeout, waitNetworkIdle, waitNetworkIdleTimeout }: PageLoaderOpts, + ) { + super(); + + this.session = session; + this.selectors = selectors; + this.predicate = predicate; + this.timeout = timeout; + this.waitNetworkIdle = waitNetworkIdle; + this.waitNetworkIdleTimeout = waitNetworkIdleTimeout; + } + + public async load(goToPage: () => Promise): Promise { + await this.initMock(); + + await goToPage().catch(err => { + this.emit("pageLoadError", err); + }); + + this.launchSelectorsPromise(); + this.launchPredicatePromise(); + this.launchNetworkPromise(); + } + + public unsubscribe(): Promise | undefined { + return this.mock?.restore().catch(() => { + logger.warn("PageLoader: Got err while unsubscribing"); + }); + } + + private launchSelectorsPromise(): void { + const selectorPromises = this.selectors.map(async selector => { + const element = await this.session.$(selector); + await element.waitForExist({ timeout: this.timeout }); + }); + + Promise.all(selectorPromises) + .then(() => { + this.emit("selectorsExist"); + }) + .catch(err => { + this.emit("selectorsError", err); + }); + } + + private launchPredicatePromise(): void { + if (!this.predicate) { + return; + } + + this.session + .waitUntil(this.predicate, { timeout: this.timeout }) + .then(() => { + this.emit("predicateResolved"); + }) + .catch(() => { + this.emit("predicateError", new Error(`predicate was never truthy in ${this.timeout}ms`)); + }); + } + + private launchNetworkPromise(): void { + if (!this.waitNetworkIdle) { + return; + } + + setTimeout(() => { + const markSuccess = this.markNetworkIdle(); + if (markSuccess) { + logger.warn(`PageLoader: Network idle timeout`); + } + }, this.timeout); + setTimeout(() => { + if (!this.totalRequests) { + this.markNetworkIdle(); + } + }, this.waitNetworkIdleTimeout); + } + + private async initMock(): Promise { + if (!this.waitNetworkIdle) { + return; + } + + this.mock = await this.session.mock("**").catch(() => { + logger.warn(`PageLoader: Could not create CDP interceptor`); + + return null; + }); + + if (!this.mock) { + this.markNetworkIdle(); + + return; + } + + let pendingRequests = 0; + let pendingIdleTimeout: NodeJS.Timeout; + this.mock.on("request", () => { + this.totalRequests++; + pendingRequests++; + clearTimeout(pendingIdleTimeout); + }); + + this.mock.on("continue", () => { + pendingRequests--; + + if (!pendingRequests) { + pendingIdleTimeout = setTimeout(() => this.markNetworkIdle(), this.waitNetworkIdleTimeout); + } + }); + + this.mock.on("match", (match: Matches) => { + if (this.isMatchError(match)) { + this.emit("networkError", match); + } + }); + } + + private isMatchError(match: Matches): boolean { + return match.statusCode >= 400 && match.statusCode < 600; + } + + private markNetworkIdle(): boolean { + if (this.networkResolved) { + return false; + } + + this.networkResolved = true; + this.emit("networkResolved"); + return true; + } +} diff --git a/test/src/browser/commands/openAndWait.ts b/test/src/browser/commands/openAndWait.ts new file mode 100644 index 000000000..d55b171ec --- /dev/null +++ b/test/src/browser/commands/openAndWait.ts @@ -0,0 +1,201 @@ +"use strict"; + +import webdriverio from "webdriverio"; +import sinon, { SinonStub } from "sinon"; +import FakeTimers from "@sinonjs/fake-timers"; +import clientBridge from "src/browser/client-bridge"; +import PageLoader from "src/utils/page-loader"; +import { DEVTOOLS_PROTOCOL } from "src/constants/config"; +import { mkExistingBrowser_ as mkBrowser_, mkSessionStub_ as mkSessionStubOrigin_ } from "../utils"; +import type ExistingBrowser from "src/browser/existing-browser"; + +type SessionOrigin = ReturnType; +type Session = SessionOrigin & { openAndWait(uri: string, opts: Record): Promise }; + +const mkSessionStub_ = (): Session => { + return mkSessionStubOrigin_() as Session; +}; + +describe('"openAndWait" command', () => { + const sandbox = sinon.sandbox.create(); + let clock: FakeTimers.InstalledClock; + + beforeEach(() => { + clock = FakeTimers.install(); + sandbox.stub(PageLoader.prototype, "unsubscribe"); + }); + + afterEach(async () => { + await clock.runAllAsync(); + clock.uninstall(); + sandbox.restore(); + }); + + const mkPromiseCheck_ = + (done: boolean, type: "resolved" | "rejected") => + async (promise: Promise, ms: number, reason?: string): Promise => { + let settled = false; + + const markSettled = (): void => { + settled = true; + }; + + promise.then(markSettled).catch(markSettled); + + await clock.tickAsync(ms); + + if (!done) { + assert.isFalse(settled); + return; + } + + if (type === "resolved") { + await assert.isFulfilled(promise); + } else { + await assert.isRejected(promise, reason); + } + }; + + const resolvedAfter_ = mkPromiseCheck_(true, "resolved"); + const rejectedAfter_ = mkPromiseCheck_(true, "rejected"); + const notResolvedAfter_ = mkPromiseCheck_(false, "resolved"); + const notRejectedAfer_ = mkPromiseCheck_(false, "rejected"); + + const stubLoad_ = (func: () => Promise): void => { + sandbox.stub(PageLoader.prototype, "load").callsFake(func); + }; + + const emitAfter_ = function (this: PageLoader, event: string, ms: number, eventArg?: T): Promise { + setTimeout(() => this.emit(event, eventArg), ms); + return Promise.resolve(); + }; + + const mkEmitAfter_ = (event: string, ms: number, eventArg?: T) => { + return function (this: PageLoader): Promise { + return emitAfter_.call(this, event, ms, eventArg); + }; + }; + + const initBrowser_ = ({ browser = mkBrowser_(), session = mkSessionStub_() } = {}): Promise => { + sandbox.stub(webdriverio, "attach").resolves(session); + sandbox.stub(clientBridge, "build").resolves(); + + return browser.init({ sessionId: session.sessionId, sessionCaps: session.capabilities, sessionOpts: {} }); + }; + + it("should add command", async () => { + const session = mkSessionStub_(); + + await initBrowser_({ session }); + + assert.calledWith(session.addCommand, "openAndWait", sinon.match.func); + }); + + it("should wait for selectors", async () => { + const session = mkSessionStub_(); + const element = await session.$(".selector"); + session.$ = sandbox.stub().resolves(element); + stubLoad_(mkEmitAfter_("selectorsExist", 100)); + + await initBrowser_({ session }); + + const promise = session.openAndWait("some/url", { selector: ".selector", waitNetworkIdle: false }); + + await Promise.all([notResolvedAfter_(promise, 50), resolvedAfter_(promise, 100)]); + }); + + it("should wait for predicate", async () => { + const session = mkSessionStub_(); + stubLoad_(mkEmitAfter_("predicateResolved", 100)); + + await initBrowser_({ session }); + + const promise = session.openAndWait("some/url", { predicate: sandbox.stub(), waitNetworkIdle: false }); + + await Promise.all([notResolvedAfter_(promise, 50), resolvedAfter_(promise, 100)]); + }); + + it("should wait for network idle", async () => { + const browser = mkBrowser_({ automationProtocol: DEVTOOLS_PROTOCOL }); + const session = mkSessionStub_(); + stubLoad_(mkEmitAfter_("networkResolved", 100)); + + await initBrowser_({ session, browser }); + + const promise = session.openAndWait("some/url", { waitNetworkIdle: true }); + + await Promise.all([notResolvedAfter_(promise, 50), resolvedAfter_(promise, 100)]); + }); + + it("should unsubscribe to pageLoader", async () => { + const browser = mkBrowser_({ automationProtocol: DEVTOOLS_PROTOCOL }); + const session = mkSessionStub_(); + stubLoad_(mkEmitAfter_("networkResolved", 100)); + + await initBrowser_({ session, browser }); + + const promise = session.openAndWait("some/url", { waitNetworkIdle: true }); + + assert.notCalled(PageLoader.prototype.unsubscribe as SinonStub); + await resolvedAfter_(promise, 100); + assert.calledOnce(PageLoader.prototype.unsubscribe as SinonStub); + }); + + ["pageLoadError", "selectorsError", "predicateError"].forEach(event => { + it(`should handle '${event}' event`, async () => { + const browser = mkBrowser_({ automationProtocol: DEVTOOLS_PROTOCOL }); + const session = mkSessionStub_(); + stubLoad_(mkEmitAfter_(event, 100, new Error("error message"))); + + await initBrowser_({ session, browser }); + + const promise = session.openAndWait("some/url", { + selector: [".selector"], + predicate: () => true, + waitNetworkIdle: true, + }); + + await Promise.all([notRejectedAfer_(promise, 50), rejectedAfter_(promise, 100, "url: error message")]); + }); + }); + + describe("should handle 'networkError' event", () => { + it("should not throw", async () => { + const browser = mkBrowser_({ automationProtocol: DEVTOOLS_PROTOCOL }); + const session = mkSessionStub_(); + stubLoad_(function (this: PageLoader): Promise { + setTimeout(() => this.emit("networkError", { url: "content.url", statusCode: 404 }), 50); + setTimeout(() => this.emit("networkResolved", 100)); + return Promise.resolve(); + }); + + await initBrowser_({ session, browser }); + + const promise = session.openAndWait("some/url", { + waitNetworkIdle: true, + waitNetworkIdleTimeout: 100, + rejectOnNetworkError: true, + shouldThrowError: () => false, + }); + + await resolvedAfter_(promise, 100); + }); + + it("should throw", async () => { + const browser = mkBrowser_({ automationProtocol: DEVTOOLS_PROTOCOL }); + const session = mkSessionStub_(); + stubLoad_(mkEmitAfter_("networkError", 100, { url: "content.url", statusCode: 404 })); + + await initBrowser_({ session, browser }); + + const promise = session.openAndWait("some/url", { + waitNetworkIdle: true, + waitNetworkIdleTimeout: 500, + rejectOnNetworkError: true, + shouldThrowError: () => true, + }); + + await rejectedAfter_(promise, 100, "url: couldn't get content from content.url: 404"); + }); + }); +}); diff --git a/test/src/browser/utils.js b/test/src/browser/utils.js index de59022c7..9d07d9dbc 100644 --- a/test/src/browser/utils.js +++ b/test/src/browser/utils.js @@ -1,6 +1,7 @@ "use strict"; const _ = require("lodash"); +const EventEmitter = require("events"); const NewBrowser = require("src/browser/new-browser"); const ExistingBrowser = require("src/browser/existing-browser"); const { WEBDRIVER_PROTOCOL } = require("src/constants/config"); @@ -55,6 +56,16 @@ exports.mkExistingBrowser_ = (opts, browser = "browser", browserVersion, emitter return ExistingBrowser.create(createBrowserConfig_(opts), browser, browserVersion, emitter); }; +exports.mkMockStub_ = () => { + const eventEmitter = new EventEmitter(); + + return { + on: sinon.spy(eventEmitter, "on"), + emit: sinon.spy(eventEmitter, "emit"), + restore: sinon.stub().resolves(), + }; +}; + exports.mkSessionStub_ = () => { const session = {}; const element = { @@ -83,6 +94,7 @@ exports.mkSessionStub_ = () => { session.setTimeouts = sinon.stub().named("setTimeouts").resolves(); session.getPuppeteer = sinon.stub().named("getPuppeteer").resolves({}); session.$ = sinon.stub().named("$").resolves(element); + session.mock = sinon.stub().named("mock").resolves(exports.mkMockStub_()); session.addCommand = sinon.stub().callsFake((name, command, isElement) => { const target = isElement ? element : session; diff --git a/test/src/utils/page-loader.ts b/test/src/utils/page-loader.ts new file mode 100644 index 000000000..38ec8e10e --- /dev/null +++ b/test/src/utils/page-loader.ts @@ -0,0 +1,366 @@ +import proxyquire from "proxyquire"; +import sinon, { SinonStub, SinonSpy } from "sinon"; +import FakeTimers from "@sinonjs/fake-timers"; +import { mkSessionStub_, mkMockStub_ } from "../browser/utils"; +import type PageLoaderType from "../../../src/utils/page-loader"; +import { Element, WaitForOptions } from "webdriverio"; + +type PageLoaderClass = typeof import("../../../src/utils/page-loader").default; +type PageLoaderSpy = Omit & { emit: SinonSpy }; +type Logger = typeof import("../../../src/utils/logger"); + +type MockStub = { + on: SinonSpy; + emit: SinonSpy; + restore: SinonStub; +}; + +const waitUntilMock = (condition: () => boolean, opts?: WaitForOptions): Promise => { + let rejectingTimeout: number; + let destroyed = false; + + return new Promise((resolve, reject) => { + const checkPredicate = (): void => { + if (destroyed) { + return; + } + + if (condition()) { + destroyed = true; + clearTimeout(rejectingTimeout); + resolve(); + } else { + setTimeout(checkPredicate, 20); + } + }; + + rejectingTimeout = setTimeout(() => { + if (destroyed) { + return; + } + + destroyed = true; + reject(); + }, opts?.timeout); + + checkPredicate(); + }); +}; + +describe("utils/page-loader", () => { + const sandbox = sinon.createSandbox(); + let clock: FakeTimers.InstalledClock, loggerStub: Logger, PageLoader: PageLoaderClass; + + const resolveNow_ = (): Promise => Promise.resolve(); + const rejectNow_ = (): Promise => Promise.reject(); + + const resolveAfter_ = (ms: number): Promise => { + return new Promise(resolve => setTimeout(resolve, ms)); + }; + const rejectAfter_ = (ms: number): Promise => { + return new Promise((_, reject) => setTimeout(reject, ms)); + }; + + const mkResolveAfter_ = (ms: number): (() => Promise) => { + return () => resolveAfter_(ms); + }; + const mkRejectAfter_ = (ms: number): (() => Promise) => { + return () => rejectAfter_(ms); + }; + + const mkPageLoader_ = ({ + selectors = [".selector"], + predicate = (): boolean => true, + timeout = 500, + waitNetworkIdle = true, + waitNetworkIdleTimeout = 100, + } = {}): { pageLoader: PageLoaderSpy; sessionStub: WebdriverIO.Browser; mockStub: MockStub } => { + const mockStub = mkMockStub_(); + const sessionStub = mkSessionStub_() as unknown as WebdriverIO.Browser; + const pageLoader = new PageLoader(sessionStub, { + selectors, + predicate, + timeout, + waitNetworkIdle, + waitNetworkIdleTimeout, + }) as unknown as PageLoaderSpy; + + sessionStub.mock = sandbox.stub().resolves(mockStub); + sessionStub.waitUntil = sandbox.spy(waitUntilMock) as WebdriverIO.Browser["waitUntil"]; + + sandbox.spy(pageLoader, "emit"); + + return { pageLoader, sessionStub, mockStub }; + }; + + beforeEach(() => { + clock = FakeTimers.install(); + loggerStub = { + log: sandbox.stub(), + warn: sandbox.stub(), + error: sandbox.stub(), + }; + PageLoader = proxyquire("src/utils/page-loader", { + "./logger": loggerStub, + }).default; + }); + + afterEach(() => { + sandbox.restore(); + clock.uninstall(); + }); + + it("should handle selectors, predicate and network asynchronously", async () => { + let resolvingValue = false; + setTimeout(() => { + resolvingValue = true; + }, 500); + const predicate = (): boolean => resolvingValue; + + const { pageLoader, sessionStub } = mkPageLoader_({ + selectors: [".selector"], + predicate, + waitNetworkIdleTimeout: 500, + timeout: 1000, + }); + + const element = await sessionStub.$(".selector"); + sessionStub.$ = sandbox.stub().resolves(element); + element.waitForExist = mkResolveAfter_(500); + + await pageLoader.load(resolveNow_); + + await clock.tickAsync(500); + + assert.calledWith(pageLoader.emit, "selectorsExist"); + assert.calledWith(pageLoader.emit, "predicateResolved"); + assert.calledWith(pageLoader.emit, "networkResolved"); + }); + + it("should have union timeouts for selectors, predicate and network", async () => { + const predicate = (): boolean => false; + + const { pageLoader, sessionStub, mockStub } = mkPageLoader_({ + selectors: [".selector"], + predicate, + timeout: 1000, + }); + + const element = await sessionStub.$(".selector"); + sessionStub.$ = sandbox.stub().resolves(element); + element.waitForExist = mkRejectAfter_(1000); + + await pageLoader.load(resolveNow_); + mockStub.emit("request"); + + await clock.tickAsync(1000); + + assert.calledWith(pageLoader.emit, "selectorsError"); + assert.calledWith(pageLoader.emit, "predicateError"); + assert.calledWith(pageLoader.emit, "networkResolved"); + }); + + describe("mock", () => { + it("should be inited if 'waitNetworkIdle' is set", async () => { + const { pageLoader, sessionStub, mockStub } = mkPageLoader_({ waitNetworkIdle: true }); + + await pageLoader.load(resolveNow_); + + assert.calledOnceWith(sessionStub.mock, "**"); + assert.calledWith(mockStub.on, "request"); + assert.calledWith(mockStub.on, "continue"); + assert.calledWith(mockStub.on, "match"); + }); + + it("should not be inited if 'waitNetworkIdle' is set to 'false'", async () => { + const { pageLoader, sessionStub, mockStub } = mkPageLoader_({ waitNetworkIdle: false }); + + await pageLoader.load(resolveNow_); + + assert.notCalled(sessionStub.mock as SinonStub); + assert.notCalled(mockStub.on); + assert.notCalled(mockStub.on); + assert.notCalled(mockStub.on); + }); + + it("should be restored", async () => { + const { pageLoader, mockStub } = mkPageLoader_({ + waitNetworkIdle: true, + waitNetworkIdleTimeout: 0, + }); + + await pageLoader.load(resolveNow_); + await pageLoader.unsubscribe(); + + assert.calledOnce(mockStub.restore); + }); + + it("should not be restored if it was not inited", async () => { + const { pageLoader, mockStub } = mkPageLoader_({ + waitNetworkIdle: false, + waitNetworkIdleTimeout: 0, + }); + + await pageLoader.load(resolveNow_); + await pageLoader.unsubscribe(); + + assert.notCalled(mockStub.restore); + }); + + it("should warn on unsubscribe error", async () => { + const { pageLoader, mockStub } = mkPageLoader_({ + waitNetworkIdle: true, + waitNetworkIdleTimeout: 0, + }); + mockStub.restore.rejects(new Error("err")); + + await pageLoader.load(resolveNow_); + await pageLoader.unsubscribe(); + await clock.runAllAsync(); + + assert.calledOnceWith(loggerStub.warn, "PageLoader: Got err while unsubscribing"); + }); + }); + + describe("events", () => { + it("should emit 'pageLoadError' after rejection", async () => { + const { pageLoader } = mkPageLoader_(); + + await pageLoader.load(rejectNow_); + + await clock.nextAsync(); + + assert.calledWith(pageLoader.emit, "pageLoadError"); + }); + + describe("selectors", () => { + it("should wait with passed timeout", async () => { + const { pageLoader, sessionStub } = mkPageLoader_({ + selectors: [".selector"], + timeout: 100, + }); + const element = await sessionStub.$(".selector"); + sessionStub.$ = sandbox.stub().resolves(element); + element.waitForExist = sandbox.stub().callsFake(opts => rejectAfter_(opts?.timeout ?? 100500)); + + await pageLoader.load(resolveNow_); + + assert.calledOnceWith(element.waitForExist, { timeout: 100 }); + }); + + it("should emit 'selectorsExist' after selectors appear", async () => { + const { pageLoader, sessionStub } = mkPageLoader_({ + selectors: [".selector"], + timeout: 1000, + }); + const element = await sessionStub.$(".selector"); + sessionStub.$ = sandbox.stub().resolves(element); + element.waitForExist = mkResolveAfter_(100); + + await pageLoader.load(resolveNow_); + + await clock.tickAsync(50); + assert.neverCalledWith(pageLoader.emit, "selectorsExist"); + await clock.tickAsync(100); + assert.calledWith(pageLoader.emit, "selectorsExist"); + assert.neverCalledWith(pageLoader.emit, "selectorsError"); + }); + + it("should emit 'selectorsError' after selectors timeout", async () => { + const { pageLoader, sessionStub } = mkPageLoader_({ + selectors: [".selector"], + timeout: 100, + }); + const element = await sessionStub.$(".selector"); + sessionStub.$ = sandbox.stub().resolves(element); + element.waitForExist = function (this: Element, opts?: WaitForOptions): Promise { + return rejectAfter_(opts?.timeout ?? 100500); + }; + + await pageLoader.load(resolveNow_); + + await clock.tickAsync(50); + assert.neverCalledWith(pageLoader.emit, "selectorsError"); + await clock.tickAsync(100); + assert.calledWith(pageLoader.emit, "selectorsError"); + assert.neverCalledWith(pageLoader.emit, "selectorsExist"); + }); + }); + + describe("predicate", () => { + it("should emit 'predicateResolved' after predicate resolved", async () => { + let resolvingValue = false; + const predicate = (): boolean => resolvingValue; + const { pageLoader } = mkPageLoader_({ predicate, timeout: 500 }); + setTimeout(() => { + resolvingValue = true; + }, 100); + + await pageLoader.load(resolveNow_); + + await clock.tickAsync(50); + assert.neverCalledWith(pageLoader.emit, "predicateResolved"); + await clock.tickAsync(100); + assert.calledWith(pageLoader.emit, "predicateResolved"); + }); + + it("should emit 'predicateError' after predicate timed out", async () => { + const predicate = (): boolean => false; + const { pageLoader } = mkPageLoader_({ predicate, timeout: 100 }); + + await pageLoader.load(resolveNow_); + + await clock.tickAsync(50); + assert.neverCalledWith(pageLoader.emit, "predicateError"); + await clock.tickAsync(100); + assert.calledWith(pageLoader.emit, "predicateError"); + }); + }); + + describe("network", () => { + it("should emit 'networkResolved' after 'waitNetworkIdleTimeout' ms if there are no requests", async () => { + const { pageLoader } = mkPageLoader_({ waitNetworkIdleTimeout: 100 }); + + await pageLoader.load(resolveNow_); + + await clock.tickAsync(50); + assert.neverCalledWith(pageLoader.emit, "networkResolved"); + await clock.tickAsync(100); + assert.calledWith(pageLoader.emit, "networkResolved"); + }); + + it("should emit 'networkError' on match with error status code", async () => { + const { pageLoader, mockStub } = mkPageLoader_({ timeout: 300, waitNetworkIdleTimeout: 100 }); + const match = { statusCode: 404 }; + + await pageLoader.load(resolveNow_); + mockStub.emit("match", match); + + await clock.nextAsync(); + assert.calledWith(pageLoader.emit, "networkError", match); + }); + + it("should emit 'networkResolved' after 'waitNetworkIdleTimeout' ms if there are no requests", async () => { + const { pageLoader } = mkPageLoader_({ waitNetworkIdleTimeout: 100 }); + + await pageLoader.load(resolveNow_); + + await clock.tickAsync(50); + assert.neverCalledWith(pageLoader.emit, "networkResolved"); + await clock.tickAsync(100); + assert.calledWith(pageLoader.emit, "networkResolved"); + }); + + it("should emit 'networkResolved' on 'timeout' with warn log", async () => { + const { pageLoader, mockStub } = mkPageLoader_({ timeout: 100 }); + + await pageLoader.load(resolveNow_); + mockStub.emit("request"); + + await clock.tickAsync(100); + assert.calledWith(pageLoader.emit, "networkResolved"); + assert.calledOnceWith(loggerStub.warn, "PageLoader: Network idle timeout"); + }); + }); + }); +});