From 8dc95b3255768823b0c67dd8ba64def49e2889bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 12 Apr 2023 10:59:16 +0200 Subject: [PATCH 01/25] test(e2e): remove Protractor NPM package refs #618 --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index b7cf7d4e8..14c4442a9 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,6 @@ "fs-extra": "^10.1.0", "jasmine-core": "~4.2.0", "jasmine-spec-reporter": "~7.0.0", - "protractor": "~7.0.0", "ts-node": "^10.8.2", "typescript": "~4.7.4", "webpack-dev-server": "^4.9.3" -- GitLab From 415416412e0e0cf997cdcb242cee3c31adff6bb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 13 Apr 2023 15:36:42 +0200 Subject: [PATCH 02/25] test(e2e): execution of npm init wdio refs #618 --- package-lock.json | 7595 +++++++++++++++++++++++++++++-- package.json | 10 +- test/pageobjects/login.page.ts | 42 + test/pageobjects/page.ts | 13 + test/pageobjects/secure.page.ts | 17 + test/specs/example.e2e.ts | 15 + wdio.conf.ts | 312 ++ 7 files changed, 7511 insertions(+), 493 deletions(-) create mode 100644 test/pageobjects/login.page.ts create mode 100644 test/pageobjects/page.ts create mode 100644 test/pageobjects/secure.page.ts create mode 100644 test/specs/example.e2e.ts create mode 100644 wdio.conf.ts diff --git a/package-lock.json b/package-lock.json index 38115b303..cfb1cdd76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,6 +65,11 @@ "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/eslint-plugin-tslint": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", + "@wdio/cli": "^8.8.2", + "@wdio/jasmine-framework": "^8.8.2", + "@wdio/local-runner": "^8.8.2", + "@wdio/spec-reporter": "^8.8.0", + "chromedriver": "^111.0.0", "codelyzer": "^6.0.2", "electron": "^19.0.7", "electron-builder": "^23.1.0", @@ -73,9 +78,10 @@ "fs-extra": "^10.1.0", "jasmine-core": "~4.2.0", "jasmine-spec-reporter": "~7.0.0", - "protractor": "~7.0.0", "ts-node": "^10.8.2", "typescript": "~4.7.4", + "wdio-chromedriver-service": "^8.1.1", + "wdio-wait-for": "^3.0.3", "webpack-dev-server": "^4.9.3" } }, @@ -3605,6 +3611,117 @@ "node": ">=8" } }, + "node_modules/@jest/expect-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.4.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.25.16" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": 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/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -3883,6 +4000,103 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "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==", + "dev": true, + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=14.1.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@puppeteer/browsers/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@puppeteer/browsers/node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/@puppeteer/browsers/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@puppeteer/browsers/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@schematics/angular": { "version": "14.2.9", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.9.tgz", @@ -3899,6 +4113,12 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@sinclair/typebox": { + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "dev": true + }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -3920,6 +4140,12 @@ "node": ">=6" } }, + "node_modules/@testim/chrome-version": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.1.3.tgz", + "integrity": "sha512-g697J3WxV/Zytemz8aTuKjTGYtta9+02kva3C1xc7KXB8GdbfE1akGJIsZLyY/FSh2QrnE+fiB7vmWU3XNcb6A==", + "dev": true + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -4105,6 +4331,12 @@ "@types/node": "*" } }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, "node_modules/@types/http-proxy": { "version": "1.17.9", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", @@ -4113,6 +4345,30 @@ "@types/node": "*" } }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, "node_modules/@types/jasmine": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.0.3.tgz", @@ -4177,6 +4433,12 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, "node_modules/@types/pako": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.4.tgz", @@ -4202,7 +4464,8 @@ "version": "0.0.32", "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", "integrity": "sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/@types/qs": { "version": "6.9.7", @@ -4223,7 +4486,8 @@ "version": "3.0.20", "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.20.tgz", "integrity": "sha512-6d8Q5fqS9DWOXEhMDiF6/2FjyHdmP/jSTAUyeQR7QwrFeNmYyzmvGxD5aLIHL445HjWgibs0eAig+KPnbaesXA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/@types/semver": { "version": "7.3.13", @@ -4261,6 +4525,12 @@ "resolved": "https://registry.npmjs.org/@types/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-hkgzYF+qnIl8uTO8rmUSVSfQ8BIfMXC4yJAF4n8BE758YsKBZvFC4NumnAegj7KmylP0liEZNpb9RRGFMbFejA==" }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, "node_modules/@types/verror": { "version": "1.10.6", "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz", @@ -4268,6 +4538,12 @@ "dev": true, "optional": true }, + "node_modules/@types/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.2.tgz", + "integrity": "sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==", + "dev": true + }, "node_modules/@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -4291,6 +4567,16 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.43.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", @@ -4496,6 +4782,732 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@wdio/cli": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-8.8.2.tgz", + "integrity": "sha512-cw0XFom5E/zBFQcBmDk4ki2prPkw/aH6+gD2TBhno7DHlGw8u7X3WazKZYzB7FtCkcmsqp3lDQ5FggnjOa78vQ==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0", + "@wdio/config": "8.8.0", + "@wdio/globals": "8.8.2", + "@wdio/logger": "8.6.6", + "@wdio/protocols": "8.8.1", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "async-exit-hook": "^2.0.1", + "chalk": "^5.0.1", + "chokidar": "^3.5.3", + "cli-spinners": "^2.6.1", + "ejs": "^3.1.8", + "execa": "^7.0.0", + "import-meta-resolve": "^2.1.0", + "inquirer": "9.1.5", + "lodash.flattendeep": "^4.4.0", + "lodash.pickby": "^4.6.0", + "lodash.union": "^4.6.0", + "read-pkg-up": "9.1.0", + "recursive-readdir": "^2.2.2", + "webdriverio": "8.8.2", + "yargs": "^17.5.1", + "yarn-install": "^1.0.0" + }, + "bin": { + "wdio": "bin/wdio.js" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/cli/node_modules/ansi-escapes": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.1.0.tgz", + "integrity": "sha512-bQyg9bzRntwR/8b89DOEhGwctcwCrbWW/TuqTQnpqpy5Fz3aovcOTj5i8NJV6AHc8OGNdMaqdxAWww8pz2kiKg==", + "dev": true, + "dependencies": { + "type-fest": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/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==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@wdio/cli/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==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@wdio/cli/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==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@wdio/cli/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/cli-width": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.0.0.tgz", + "integrity": "sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@wdio/cli/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==", + "dev": true + }, + "node_modules/@wdio/cli/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@wdio/cli/node_modules/figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/@wdio/cli/node_modules/inquirer": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.1.5.tgz", + "integrity": "sha512-3ygAIh8gcZavV9bj6MTdYddG2zPSYswP808fKS46NOwlF0zZljVpnLCHODDqItWJDbDpLb3aouAxGaJbkxoppA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^6.0.0", + "chalk": "^5.2.0", + "cli-cursor": "^4.0.0", + "cli-width": "^4.0.0", + "external-editor": "^3.0.3", + "figures": "^5.0.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^6.1.2", + "run-async": "^2.4.0", + "rxjs": "^7.8.0", + "string-width": "^5.1.2", + "strip-ansi": "^7.0.1", + "through": "^2.3.6", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/@wdio/cli/node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@wdio/cli/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/ora": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.0.tgz", + "integrity": "sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==", + "dev": true, + "dependencies": { + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@wdio/cli/node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/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==", + "dev": true, + "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/@wdio/cli/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@wdio/cli/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/node_modules/type-fest": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.8.0.tgz", + "integrity": "sha512-FVNSzGQz9Th+/9R6Lvv7WIAkstylfHN2/JYxkyhhmKFYh9At2DST8t6L6Lref9eYO8PXFTfG9Sg1Agg0K3vq3Q==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/cli/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==", + "dev": true, + "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/@wdio/config": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.8.0.tgz", + "integrity": "sha512-gm8gXqpiIR0EU9Blkqmxe+xsEoKS2EXpWrKlx2JXyx3Yf7By0UNsZVZHMSO8lLunzUjYIntpWYpmKmBmnlrnKQ==", + "dev": true, + "dependencies": { + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "decamelize": "^6.0.0", + "deepmerge-ts": "^5.0.0", + "glob": "^9.3.0", + "import-meta-resolve": "^2.1.0", + "read-pkg-up": "^9.1.0" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/config/node_modules/decamelize": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", + "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@wdio/config/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wdio/globals": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.8.2.tgz", + "integrity": "sha512-uwImTbqbFlHezAl4qtdXMZtZQo22bhENmt6eQ0pJwevtO1U53ZB4x9uDOYtSym8xKCdZILu46uI/THDm+vm2hA==", + "dev": true, + "engines": { + "node": "^16.13 || >=18" + }, + "optionalDependencies": { + "expect-webdriverio": "^4.0.1", + "webdriverio": "8.8.2" + } + }, + "node_modules/@wdio/jasmine-framework": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/jasmine-framework/-/jasmine-framework-8.8.2.tgz", + "integrity": "sha512-lFp+WDvDvfYABMwyufhAd3AMJoUii5LCOJmNNmoUsJ0YvP327KRNKfOU7Xdh7HQZfe49whRzfytE5hTexeIFlQ==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0", + "@wdio/globals": "8.8.2", + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "expect-webdriverio": "^4.0.1", + "jasmine": "^4.2.1" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/local-runner": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-8.8.2.tgz", + "integrity": "sha512-7zf7FxjRXqqvrtyzFhWsSXlqw8ldTt/3E6SBvwrn4iS/kL3QzyiVMtZ/ILHfLnIZXvUc5CWNpNJ1WWejYmbNWA==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0", + "@wdio/logger": "8.6.6", + "@wdio/repl": "8.6.6", + "@wdio/runner": "8.8.2", + "@wdio/types": "8.8.0", + "async-exit-hook": "^2.0.1", + "split2": "^4.1.0", + "stream-buffers": "^3.0.2" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "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==", + "dev": true, + "dependencies": { + "chalk": "^5.1.2", + "loglevel": "^1.6.0", + "loglevel-plugin-prefix": "^0.8.4", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/logger/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==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/reporter": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-8.8.0.tgz", + "integrity": "sha512-qbbLj5ZqtrHOs2sN/wHen+agIUA1EHB48HRyb17wQapZItmIE16D8ctxAISx7yQ6RpjZYPp+zYhUJ20DFpJhGg==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0", + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "diff": "^5.0.0", + "object-inspect": "^1.12.0", + "supports-color": "9.3.1" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/reporter/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/@wdio/reporter/node_modules/supports-color": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.3.1.tgz", + "integrity": "sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@wdio/runner": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-8.8.2.tgz", + "integrity": "sha512-k7gkfhZesnN2dJMzEg+oRQA3a9pEWJSRm7AlidmvQnQkcSC3JzvTtCCqoLaBTxScktOCOUahQ9H+Lf8z/P5Cag==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0", + "@wdio/config": "8.8.0", + "@wdio/globals": "8.8.2", + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "deepmerge-ts": "^5.0.0", + "expect-webdriverio": "^4.0.1", + "gaze": "^1.1.2", + "webdriver": "8.8.2", + "webdriverio": "8.8.2" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/spec-reporter": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-8.8.0.tgz", + "integrity": "sha512-ZbW0w8ugXIZ7niYCY9rWWm1oxcrH/ceyQl6nBldARvB0IOroleS5hNtp+dd97Y+OxHv/2AD6MQ4yCmS+ukLEgg==", + "dev": true, + "dependencies": { + "@wdio/reporter": "8.8.0", + "@wdio/types": "8.8.0", + "chalk": "^5.1.2", + "easy-table": "^1.2.0", + "pretty-ms": "^7.0.0" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/spec-reporter/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==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@wdio/types": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.8.0.tgz", + "integrity": "sha512-Ai6yIlwWB32FUfvQKCqSa6nSyHIhSF5BOU9OfE7I2XYkLAJTxu8B6NORHQ+rgoppHSWc4D2V9r21y3etF8AGnQ==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.0" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/@wdio/utils": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", + "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", + "dev": true, + "dependencies": { + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "import-meta-resolve": "^2.2.0", + "p-iteration": "^1.1.8" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -4769,7 +5781,8 @@ "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.3.0" } @@ -5086,6 +6099,107 @@ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, + "node_modules/archiver": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", + "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.3", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/archiver-utils/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": 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" + } + }, + "node_modules/archiver-utils/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/archiver/node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/archiver/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/are-we-there-yet": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", @@ -5191,7 +6305,8 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -5218,7 +6333,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -5300,7 +6416,8 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "safer-buffer": "~2.1.0" } @@ -5309,7 +6426,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "devOptional": true, + "optional": true, "engines": { "node": ">=0.8" } @@ -5427,11 +6544,24 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": "*" } @@ -5440,7 +6570,19 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "devOptional": true + "optional": true, + "peer": true + }, + "node_modules/axios": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz", + "integrity": "sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } }, "node_modules/axobject-query": { "version": "2.0.2", @@ -5590,7 +6732,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "tweetnacl": "^0.14.3" } @@ -5644,7 +6787,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "minimist": "^1.2.0" }, @@ -5853,7 +6997,8 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz", "integrity": "sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "https-proxy-agent": "^2.2.1" } @@ -5862,7 +7007,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "es6-promisify": "^5.0.0" }, @@ -5874,7 +7020,8 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -5883,7 +7030,8 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -6104,6 +7252,181 @@ "node": ">= 0.8" } }, + "node_modules/cac": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/cac/-/cac-3.0.4.tgz", + "integrity": "sha512-hq4rxE3NT5PlaEiVV39Z45d6MoFcQZG5dsgJqtAUeOz3408LEQAElToDkf9i5IYSCOmK0If/81dLg7nKxqPR0w==", + "dev": true, + "dependencies": { + "camelcase-keys": "^3.0.0", + "chalk": "^1.1.3", + "indent-string": "^3.0.0", + "minimist": "^1.2.0", + "read-pkg-up": "^1.0.1", + "suffix": "^0.1.0", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cac/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/cac/node_modules/indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cac/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/cac/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/cac/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/cacache": { "version": "16.1.2", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz", @@ -6132,6 +7455,15 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "dev": true, + "engines": { + "node": ">=14.16" + } + }, "node_modules/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -6211,6 +7543,28 @@ "node": ">=6" } }, + "node_modules/camelcase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-3.0.0.tgz", + "integrity": "sha512-U4E6A6aFyYnNW+tDt5/yIUKQURKXe3WMFPfX4FxrQFcwZ/R08AUk1xWcUtlr7oq6CV07Ji+aa69V2g7BSpblnQ==", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001431", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", @@ -6230,7 +7584,8 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/cfb": { "version": "1.2.2", @@ -6363,6 +7718,36 @@ "node": ">=10" } }, + "node_modules/chrome-launcher": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz", + "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -6371,6 +7756,75 @@ "node": ">=6.0" } }, + "node_modules/chromedriver": { + "version": "111.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-111.0.0.tgz", + "integrity": "sha512-XavNYNBBfKIrT8Oi/ywJ0DoOOU+jHF5bQWTkqStFsAXvfCV9VzYN3J+TGAvZdrpXeoixqPRGUxQ2yZhD2iowdQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@testim/chrome-version": "^1.1.3", + "axios": "^1.2.1", + "compare-versions": "^5.0.1", + "extract-zip": "^2.0.1", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^1.1.0", + "tcp-port-used": "^1.0.1" + }, + "bin": { + "chromedriver": "bin/chromedriver" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/chromedriver/node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/chromedriver/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, "node_modules/chromium-pickle-js": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", @@ -6681,6 +8135,41 @@ "node": ">=0.10.0" } }, + "node_modules/compare-versions": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.3.tgz", + "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==", + "dev": true + }, + "node_modules/compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "dev": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/compress-commons/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -7036,6 +8525,33 @@ "node": ">=0.8" } }, + "node_modules/crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/crc32-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -7195,6 +8711,15 @@ "node": ">=8" } }, + "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==", + "dev": true, + "dependencies": { + "node-fetch": "2.6.7" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -7313,6 +8838,18 @@ "fastparse": "^1.1.2" } }, + "node_modules/css-shorthand-properties": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", + "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==", + "dev": true + }, + "node_modules/css-value": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", + "integrity": "sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==", + "dev": true + }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -8068,7 +9605,8 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "assert-plus": "^1.0.0" }, @@ -8105,7 +9643,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -8145,6 +9684,15 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge-ts": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", + "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", + "dev": true, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -8201,7 +9749,8 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", "integrity": "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "globby": "^5.0.0", "is-path-cwd": "^1.0.0", @@ -8219,7 +9768,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "array-uniq": "^1.0.1" }, @@ -8231,7 +9781,8 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8241,7 +9792,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8261,7 +9813,8 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "array-union": "^1.0.1", "arrify": "^1.0.0", @@ -8278,7 +9831,8 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8286,20 +9840,12 @@ "node": "*" } }, - "node_modules/del/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/del/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -8365,6 +9911,61 @@ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, + "node_modules/devtools": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.8.2.tgz", + "integrity": "sha512-iD/Xr5rMjx+VD08akiAuiMR5EhWKj9i489rcDm2vdC9iB8u8HY51s9FbmnIrN5OstYma0x2qOF2zKxM/muJTtw==", + "dev": true, + "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", + "chrome-launcher": "^0.15.0", + "edge-paths": "^3.0.5", + "import-meta-resolve": "^2.1.0", + "puppeteer-core": "19.8.5", + "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/devtools-protocol": { + "version": "0.0.1124027", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1124027.tgz", + "integrity": "sha512-OT2sdgQn4llM9/tVcCvoty733KFFIlXVvESceJsfazhmg/dF7C5e3Z8cIN8jNwIikixuE5rufGtD1cvKHXfOcQ==", + "dev": true + }, + "node_modules/devtools/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "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==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/dfa": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", @@ -8380,6 +9981,15 @@ "node": ">=0.3.1" } }, + "node_modules/diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/dir-compare": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", @@ -8675,16 +10285,51 @@ "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", "dev": true }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/easy-table": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", + "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "optionalDependencies": { + "wcwidth": "^1.0.1" + } + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, + "node_modules/edge-paths": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-3.0.5.tgz", + "integrity": "sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==", + "dev": true, + "dependencies": { + "@types/which": "^2.0.1", + "which": "^2.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/shirshak55" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -9107,6 +10752,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -9189,13 +10860,15 @@ "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/es6-promisify": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "es6-promise": "^4.0.3" } @@ -10406,11 +12079,45 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">= 0.8.0" } }, + "node_modules/expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "dev": 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/expect-webdriverio": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.1.3.tgz", + "integrity": "sha512-tn7kMH/WVrVwwzPaCXMuFYiGXx15LwpxwkJkC/WmF6xptcqW7kaEZco7sxHjtEXpKV7QVGsfY1Z0PcwW4gj5OA==", + "dev": true, + "dependencies": { + "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/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -10520,7 +12227,8 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/external-editor": { "version": "3.1.0", @@ -10880,11 +12588,21 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": "*" } @@ -10903,6 +12621,15 @@ "node": ">= 6" } }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "dev": true, + "engines": { + "node": ">= 14.17" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -10945,6 +12672,12 @@ "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", "dev": true }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -11079,9 +12812,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -11130,7 +12863,8 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "assert-plus": "^1.0.0" } @@ -11311,6 +13045,18 @@ "delegate": "^3.1.2" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -11426,7 +13172,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=4" } @@ -11436,7 +13183,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "deprecated": "this library is no longer supported", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -11449,7 +13197,8 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -11465,7 +13214,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/has": { "version": "1.0.3", @@ -11683,9 +13433,9 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, "node_modules/http-deceiver": { @@ -11868,7 +13618,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -11879,6 +13630,19 @@ "npm": ">=1.3.7" } }, + "node_modules/http2-wrapper": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", + "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -12025,7 +13789,8 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/immutable": { "version": "4.1.0", @@ -12055,6 +13820,16 @@ "node": ">=4" } }, + "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==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -12195,12 +13970,12 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -12222,6 +13997,15 @@ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, + "node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -12246,6 +14030,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -12395,6 +14193,15 @@ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -12434,7 +14241,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -12443,7 +14251,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "is-path-inside": "^1.0.0" }, @@ -12455,7 +14264,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "path-is-inside": "^1.0.1" }, @@ -12518,6 +14328,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -12571,11 +14390,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", @@ -12588,6 +14427,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -12600,6 +14460,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-what": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", @@ -12616,6 +14489,20 @@ "node": ">=8" } }, + "node_modules/is2": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", + "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "ip-regex": "^4.1.0", + "is-url": "^1.2.4" + }, + "engines": { + "node": ">=v0.10.0" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -12642,7 +14529,8 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", @@ -12949,11 +14837,368 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", "integrity": "sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">= 6.9.x" } }, + "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==", + "dev": 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/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": 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/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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==", + "dev": 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/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": 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/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": 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/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": 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/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": 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/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": 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/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -13016,7 +15261,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/jsdoc-type-pratt-parser": { "version": "3.1.0", @@ -13053,7 +15299,8 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/json-schema-traverse": { "version": "1.0.0", @@ -13070,7 +15317,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "devOptional": true + "optional": true }, "node_modules/json5": { "version": "2.2.1", @@ -13113,7 +15360,8 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -13128,25 +15376,28 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/jsprim/node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "devOptional": true, "engines": [ "node >=0.6.0" - ] + ], + "optional": true, + "peer": true }, "node_modules/jsprim/node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "devOptional": true, "engines": [ "node >=0.6.0" ], + "optional": true, + "peer": true, "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -13157,7 +15408,8 @@ "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -13169,7 +15421,8 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/karma-source-map-support": { "version": "1.4.0", @@ -13232,12 +15485,36 @@ "node": ">= 8" } }, + "node_modules/ky": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, "node_modules/lazy-val": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", "dev": true }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, "node_modules/less": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", @@ -13367,16 +15644,70 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "immediate": "~3.0.5" } }, + "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==", + "dev": true, + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -13414,17 +15745,71 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.pickby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", + "integrity": "sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==", + "dev": true + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true + }, + "node_modules/lodash.zip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", + "dev": true + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -13624,6 +16009,15 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/map-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", @@ -13641,6 +16035,12 @@ "node": ">= 12" } }, + "node_modules/marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "dev": true + }, "node_modules/matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", @@ -13811,6 +16211,18 @@ "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -13975,6 +16387,12 @@ "node": ">= 8" } }, + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true + }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -13986,6 +16404,12 @@ "node": ">=10" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, "node_modules/moment-mini": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", @@ -14219,6 +16643,26 @@ "dev": true, "optional": true }, + "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==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -14329,6 +16773,21 @@ "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -14566,7 +17025,8 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": "*" } @@ -14871,6 +17331,15 @@ "node": ">=6" } }, + "node_modules/p-iteration": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/p-iteration/-/p-iteration-1.1.8.tgz", + "integrity": "sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -15057,6 +17526,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", @@ -15157,7 +17635,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/path-key": { "version": "3.1.1", @@ -15172,6 +17651,40 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.4.tgz", + "integrity": "sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==", + "dev": true, + "dependencies": { + "lru-cache": "^9.0.0", + "minipass": "^5.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.0.1.tgz", + "integrity": "sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -15237,7 +17750,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/picocolors": { "version": "1.0.0", @@ -15255,6 +17769,14 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -16012,6 +18534,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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==", + "dev": 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/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dev": true, + "dependencies": { + "parse-ms": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/primeicons": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-6.0.1.tgz", @@ -16095,7 +18658,8 @@ "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz", "integrity": "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==", "deprecated": "We have news to share - Protractor is deprecated and will reach end-of-life by Summer 2023. To learn more and find out about other options please refer to this post on the Angular blog. Thank you for using and contributing to Protractor. https://goo.gle/state-of-e2e-in-angular", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "@types/q": "^0.0.32", "@types/selenium-webdriver": "^3.0.0", @@ -16125,7 +18689,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -16134,7 +18699,8 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -16143,7 +18709,8 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -16153,7 +18720,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -16169,7 +18737,8 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -16180,7 +18749,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=8" } @@ -16189,7 +18759,8 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -16201,7 +18772,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -16213,13 +18785,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/protractor/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -16239,7 +18813,8 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", "integrity": "sha512-KbdGQTf5jbZgltoHs31XGiChAPumMSY64OZMWLNYnEnMfG5uwGBhffePwuskexjT+/Jea/gU3qAU8344hNohSw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "exit": "^0.1.2", "glob": "^7.0.6", @@ -16253,13 +18828,15 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", "integrity": "sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/protractor/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16271,7 +18848,8 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -16281,7 +18859,8 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -16290,7 +18869,8 @@ "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "source-map": "^0.5.6" } @@ -16299,7 +18879,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ansi-regex": "^2.0.0" }, @@ -16311,7 +18892,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.8.0" } @@ -16320,7 +18902,8 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -16334,7 +18917,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=8" } @@ -16343,7 +18927,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -16358,7 +18943,8 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -16370,13 +18956,15 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/protractor/node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -16398,7 +18986,8 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -16419,6 +19008,12 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "node_modules/proxy-middleware": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", @@ -16434,11 +19029,18 @@ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "optional": true }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/pump": { "version": "3.0.0", @@ -16458,11 +19060,83 @@ "node": ">=6" } }, + "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==", + "dev": true, + "dependencies": { + "@puppeteer/browsers": "0.4.0", + "chromium-bidi": "0.4.6", + "cross-fetch": "3.1.5", + "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", + "ws": "8.13.0" + }, + "engines": { + "node": ">=14.14.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "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==", + "dev": true + }, + "node_modules/puppeteer-core/node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/puppeteer-core/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -16482,6 +19156,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/query-selector-shadow-dom": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", + "integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -16501,6 +19181,18 @@ } ] }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/quote-stream": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", @@ -16573,6 +19265,12 @@ "node": ">=0.10.0" } }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -16581,14 +19279,6 @@ "pify": "^2.3.0" } }, - "node_modules/read-cache/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/read-config-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", @@ -16636,6 +19326,147 @@ "node": ">=10" } }, + "node_modules/read-pkg": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", + "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", + "dev": 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/read-pkg-up": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", + "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", + "dev": 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/read-pkg-up/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": 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/read-pkg-up/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": 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/read-pkg-up/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": 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/read-pkg-up/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": 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/read-pkg-up/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -16650,6 +19481,15 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dev": true, + "dependencies": { + "minimatch": "^5.1.0" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -16661,6 +19501,40 @@ "node": ">=8.10.0" } }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/recursive-readdir/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -16903,7 +19777,8 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -16934,7 +19809,8 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -16948,7 +19824,8 @@ "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.6" } @@ -16957,7 +19834,8 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -16971,7 +19849,8 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "devOptional": true, + "optional": true, + "peer": true, "bin": { "uuid": "bin/uuid" } @@ -16996,7 +19875,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/requirejs": { "version": "2.3.6", @@ -17032,6 +19912,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -17085,6 +19971,21 @@ "lowercase-keys": "^1.0.0" } }, + "node_modules/resq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resq/-/resq-1.11.0.tgz", + "integrity": "sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^2.0.1" + } + }, + "node_modules/resq/node_modules/fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", + "dev": true + }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -17115,6 +20016,12 @@ "node": ">=0.10.0" } }, + "node_modules/rgb2hex": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.5.tgz", + "integrity": "sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==", + "dev": true + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -17232,9 +20139,9 @@ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "node_modules/rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "dependencies": { "tslib": "^2.1.0" } @@ -17329,7 +20236,8 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "https-proxy-agent": "^2.2.1" }, @@ -17341,7 +20249,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "es6-promisify": "^5.0.0" }, @@ -17353,7 +20262,8 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -17362,7 +20272,8 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -17466,7 +20377,8 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "jszip": "^3.1.3", "rimraf": "^2.5.4", @@ -17481,7 +20393,8 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17491,7 +20404,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -17511,7 +20425,8 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17523,7 +20438,8 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -17535,7 +20451,8 @@ "version": "0.0.30", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", "integrity": "sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "os-tmpdir": "~1.0.1" }, @@ -17787,7 +20704,8 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/setprototypeof": { "version": "1.2.0", @@ -18131,6 +21049,15 @@ "node": "*" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -18152,7 +21079,8 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -18184,6 +21112,27 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/stat-mode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", @@ -18407,6 +21356,91 @@ "node": ">= 0.8" } }, + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dev": true, + "dependencies": { + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stdin-discarder/node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/stdin-discarder/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/stdin-discarder/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-buffers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", + "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, "node_modules/stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", @@ -18477,6 +21511,18 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -18583,6 +21629,15 @@ "node": "*" } }, + "node_modules/suffix": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/suffix/-/suffix-0.1.1.tgz", + "integrity": "sha512-j5uf6MJtMCfC4vBe5LFktSe4bGyNTBk7I2Kdri0jeLrcv5B9pWfxVa5JQpoxgtR8vaVB7bVxsWgnfQbX5wkhAA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/sumchecker": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", @@ -18655,6 +21710,81 @@ "node": ">=10" } }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tcp-port-used": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", + "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", + "dev": true, + "dependencies": { + "debug": "4.3.1", + "is2": "^2.0.6" + } + }, + "node_modules/tcp-port-used/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -18919,6 +22049,12 @@ "node": ">=0.6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "node_modules/traverse": { "version": "0.6.7", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", @@ -19213,7 +22349,8 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -19225,7 +22362,8 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/type": { "version": "1.2.0", @@ -19312,6 +22450,25 @@ "node": ">=4.2.0" } }, + "node_modules/ua-parser-js": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", + "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -19340,6 +22497,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -19624,6 +22791,60 @@ "defaults": "^1.0.3" } }, + "node_modules/wdio-chromedriver-service": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/wdio-chromedriver-service/-/wdio-chromedriver-service-8.1.1.tgz", + "integrity": "sha512-pN3GiOkTIMnalfq4PJAHdX95pDp1orHnTY8W1fIbd6ok81ba97UjerTgS7lUDRUh1p0MAm35Ww0uc0/9wzB7SA==", + "dev": true, + "dependencies": { + "@wdio/logger": "^8.1.0", + "fs-extra": "^11.1.0", + "split2": "^4.1.0", + "tcp-port-used": "^1.0.2" + }, + "engines": { + "node": "^16.13 || >=18" + }, + "peerDependencies": { + "@wdio/types": "^7.0.0 || ^8.0.0-alpha.219", + "chromedriver": "*", + "webdriverio": "^7.0.0 || ^8.0.0-alpha.219" + }, + "peerDependenciesMeta": { + "@wdio/types": { + "optional": true + }, + "chromedriver": { + "optional": true + }, + "webdriverio": { + "optional": false + } + } + }, + "node_modules/wdio-chromedriver-service/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/wdio-wait-for": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/wdio-wait-for/-/wdio-wait-for-3.0.3.tgz", + "integrity": "sha512-y/n7tpExl54SOwbk27Ngz9ch4qP+250OhL6yYrxB5GLL5jZWcechTBbSJwOZNTUT6jZomoPFT9t77NFpqdJsig==", + "dev": true, + "engines": { + "node": "^16.13 || >=18" + } + }, "node_modules/web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", @@ -19633,11 +22854,34 @@ "node": ">= 8" } }, + "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==", + "dev": true, + "dependencies": { + "@types/node": "^18.0.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", + "deepmerge-ts": "^5.0.0", + "got": "^12.1.0", + "ky": "^0.33.0", + "ws": "^8.8.0" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, "node_modules/webdriver-js-extender": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "@types/selenium-webdriver": "^3.0.0", "selenium-webdriver": "^3.0.1" @@ -19650,7 +22894,8 @@ "version": "12.1.8", "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.8.tgz", "integrity": "sha512-qJR36SXG2VwKugPcdwhaqcLQOD7r8P2Xiv9sfNbfZrKBnX243iAkOueX1yAmeNgIKhJ3YAT/F2gq6IiEZzahsg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "adm-zip": "^0.4.9", "chalk": "^1.1.1", @@ -19675,7 +22920,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -19684,7 +22930,8 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -19693,7 +22940,8 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -19703,7 +22951,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -19719,7 +22968,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -19739,13 +22989,15 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "devOptional": true + "optional": true, + "peer": true }, "node_modules/webdriver-manager/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -19757,7 +23009,8 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -19769,7 +23022,8 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "devOptional": true, + "optional": true, + "peer": true, "bin": { "semver": "bin/semver" } @@ -19778,7 +23032,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "ansi-regex": "^2.0.0" }, @@ -19790,11 +23045,329 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.8.0" } }, + "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==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/webdriver/node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/webdriver/node_modules/cacheable-request": { + "version": "10.2.9", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.9.tgz", + "integrity": "sha512-CaAMr53AS1Tb9evO1BIWFnZjSr8A4pbXofpsNVWPMDZZj3ZQKHwsQG9BrTqQ4x5ZYJXz1T2b8LLtTZODxSpzbg==", + "dev": 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/webdriver/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriver/node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriver/node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": 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/webdriver/node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/webdriver/node_modules/keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/webdriver/node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriver/node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriver/node_modules/normalize-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriver/node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/webdriver/node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "dev": true, + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriverio": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.8.2.tgz", + "integrity": "sha512-H3h+sHLg9hfQCPLvpd30hi/ZW4lLy73m4zrZ5kJyuuUf38SZFLcfXD3W1RGig88RQ/75Ui164ugwHasTMiQEgw==", + "dev": true, + "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", + "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", + "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": "^9.0.0", + "puppeteer-core": "19.8.5", + "query-selector-shadow-dom": "^1.0.0", + "resq": "^1.9.1", + "rgb2hex": "0.2.5", + "serialize-error": "^8.0.0", + "webdriver": "8.8.2" + }, + "engines": { + "node": "^16.13 || >=18" + } + }, + "node_modules/webdriverio/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/webdriverio/node_modules/deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/webdriverio/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriverio/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/webdriverio/node_modules/minimatch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", + "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webdriverio/node_modules/serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webdriverio/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, "node_modules/webpack": { "version": "5.75.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", @@ -20083,6 +23656,16 @@ "node": ">=12" } }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -20113,11 +23696,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "devOptional": true + "optional": true, + "peer": true + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/wide-align": { "version": "1.1.5", @@ -20278,15 +23897,15 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -20321,7 +23940,8 @@ "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -20334,7 +23954,8 @@ "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "devOptional": true, + "optional": true, + "peer": true, "engines": { "node": ">=4.0" } @@ -20412,6 +24033,117 @@ "node": ">=12" } }, + "node_modules/yarn-install": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yarn-install/-/yarn-install-1.0.0.tgz", + "integrity": "sha512-VO1u181msinhPcGvQTVMnHVOae8zjX/NSksR17e6eXHRveDvHCF5mGjh9hkN8mzyfnCqcBe42LdTs7bScuTaeg==", + "dev": true, + "dependencies": { + "cac": "^3.0.3", + "chalk": "^1.1.3", + "cross-spawn": "^4.0.2" + }, + "bin": { + "yarn-install": "bin/yarn-install.js", + "yarn-remove": "bin/yarn-remove.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yarn-install/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yarn-install/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yarn-install/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yarn-install/node_modules/cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "node_modules/yarn-install/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/yarn-install/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yarn-install/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/yarn-install/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/yarn-install/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -20443,6 +24175,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/zone.js": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", @@ -22843,6 +26603,89 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" }, + "@jest/expect-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "dev": true, + "requires": { + "jest-get-type": "^29.4.3" + } + }, + "@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.25.16" + } + }, + "@jest/types": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -23047,6 +26890,71 @@ "which": "^2.0.2" } }, + "@puppeteer/browsers": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.4.0.tgz", + "integrity": "sha512-3iB5pWn9Sr55PKKwqFWSWjLsTKCOEhKNI+uV3BZesgXuA3IhsX8I3hW0HI+3ksMIPkh2mVYzKSpvgq3oicjG2Q==", + "dev": true, + "requires": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + } + } + }, "@schematics/angular": { "version": "14.2.9", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.9.tgz", @@ -23058,6 +26966,12 @@ "jsonc-parser": "3.1.0" } }, + "@sinclair/typebox": { + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "dev": true + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -23073,6 +26987,12 @@ "defer-to-connect": "^1.0.1" } }, + "@testim/chrome-version": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.1.3.tgz", + "integrity": "sha512-g697J3WxV/Zytemz8aTuKjTGYtta9+02kva3C1xc7KXB8GdbfE1akGJIsZLyY/FSh2QrnE+fiB7vmWU3XNcb6A==", + "dev": true + }, "@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -23254,6 +27174,12 @@ "@types/node": "*" } }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, "@types/http-proxy": { "version": "1.17.9", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", @@ -23262,6 +27188,30 @@ "@types/node": "*" } }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, "@types/jasmine": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.0.3.tgz", @@ -23326,6 +27276,12 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, "@types/pako": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.4.tgz", @@ -23351,7 +27307,8 @@ "version": "0.0.32", "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", "integrity": "sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==", - "devOptional": true + "optional": true, + "peer": true }, "@types/qs": { "version": "6.9.7", @@ -23372,7 +27329,8 @@ "version": "3.0.20", "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.20.tgz", "integrity": "sha512-6d8Q5fqS9DWOXEhMDiF6/2FjyHdmP/jSTAUyeQR7QwrFeNmYyzmvGxD5aLIHL445HjWgibs0eAig+KPnbaesXA==", - "devOptional": true + "optional": true, + "peer": true }, "@types/semver": { "version": "7.3.13", @@ -23410,6 +27368,12 @@ "resolved": "https://registry.npmjs.org/@types/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-hkgzYF+qnIl8uTO8rmUSVSfQ8BIfMXC4yJAF4n8BE758YsKBZvFC4NumnAegj7KmylP0liEZNpb9RRGFMbFejA==" }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, "@types/verror": { "version": "1.10.6", "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz", @@ -23417,6 +27381,12 @@ "dev": true, "optional": true }, + "@types/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.2.tgz", + "integrity": "sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==", + "dev": true + }, "@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -23440,6 +27410,16 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, "@typescript-eslint/eslint-plugin": { "version": "5.43.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", @@ -23548,6 +27528,510 @@ "eslint-visitor-keys": "^3.3.0" } }, + "@wdio/cli": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-8.8.2.tgz", + "integrity": "sha512-cw0XFom5E/zBFQcBmDk4ki2prPkw/aH6+gD2TBhno7DHlGw8u7X3WazKZYzB7FtCkcmsqp3lDQ5FggnjOa78vQ==", + "dev": true, + "requires": { + "@types/node": "^18.0.0", + "@wdio/config": "8.8.0", + "@wdio/globals": "8.8.2", + "@wdio/logger": "8.6.6", + "@wdio/protocols": "8.8.1", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "async-exit-hook": "^2.0.1", + "chalk": "^5.0.1", + "chokidar": "^3.5.3", + "cli-spinners": "^2.6.1", + "ejs": "^3.1.8", + "execa": "^7.0.0", + "import-meta-resolve": "^2.1.0", + "inquirer": "9.1.5", + "lodash.flattendeep": "^4.4.0", + "lodash.pickby": "^4.6.0", + "lodash.union": "^4.6.0", + "read-pkg-up": "9.1.0", + "recursive-readdir": "^2.2.2", + "webdriverio": "8.8.2", + "yargs": "^17.5.1", + "yarn-install": "^1.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.1.0.tgz", + "integrity": "sha512-bQyg9bzRntwR/8b89DOEhGwctcwCrbWW/TuqTQnpqpy5Fz3aovcOTj5i8NJV6AHc8OGNdMaqdxAWww8pz2kiKg==", + "dev": true, + "requires": { + "type-fest": "^3.0.0" + } + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true + }, + "cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "requires": { + "restore-cursor": "^4.0.0" + } + }, + "cli-width": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.0.0.tgz", + "integrity": "sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true + }, + "execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dev": true, + "requires": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + } + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true + }, + "inquirer": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.1.5.tgz", + "integrity": "sha512-3ygAIh8gcZavV9bj6MTdYddG2zPSYswP808fKS46NOwlF0zZljVpnLCHODDqItWJDbDpLb3aouAxGaJbkxoppA==", + "dev": true, + "requires": { + "ansi-escapes": "^6.0.0", + "chalk": "^5.2.0", + "cli-cursor": "^4.0.0", + "cli-width": "^4.0.0", + "external-editor": "^3.0.3", + "figures": "^5.0.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^6.1.2", + "run-async": "^2.4.0", + "rxjs": "^7.8.0", + "string-width": "^5.1.2", + "strip-ansi": "^7.0.1", + "through": "^2.3.6", + "wrap-ansi": "^8.1.0" + } + }, + "is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true + }, + "log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, + "requires": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + } + }, + "mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "ora": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.0.tgz", + "integrity": "sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==", + "dev": true, + "requires": { + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "type-fest": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.8.0.tgz", + "integrity": "sha512-FVNSzGQz9Th+/9R6Lvv7WIAkstylfHN2/JYxkyhhmKFYh9At2DST8t6L6Lref9eYO8PXFTfG9Sg1Agg0K3vq3Q==", + "dev": true + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@wdio/config": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.8.0.tgz", + "integrity": "sha512-gm8gXqpiIR0EU9Blkqmxe+xsEoKS2EXpWrKlx2JXyx3Yf7By0UNsZVZHMSO8lLunzUjYIntpWYpmKmBmnlrnKQ==", + "dev": true, + "requires": { + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "decamelize": "^6.0.0", + "deepmerge-ts": "^5.0.0", + "glob": "^9.3.0", + "import-meta-resolve": "^2.1.0", + "read-pkg-up": "^9.1.0" + }, + "dependencies": { + "decamelize": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", + "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", + "dev": true + }, + "glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + } + }, + "minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true + } + } + }, + "@wdio/globals": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.8.2.tgz", + "integrity": "sha512-uwImTbqbFlHezAl4qtdXMZtZQo22bhENmt6eQ0pJwevtO1U53ZB4x9uDOYtSym8xKCdZILu46uI/THDm+vm2hA==", + "dev": true, + "requires": { + "expect-webdriverio": "^4.0.1", + "webdriverio": "8.8.2" + } + }, + "@wdio/jasmine-framework": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/jasmine-framework/-/jasmine-framework-8.8.2.tgz", + "integrity": "sha512-lFp+WDvDvfYABMwyufhAd3AMJoUii5LCOJmNNmoUsJ0YvP327KRNKfOU7Xdh7HQZfe49whRzfytE5hTexeIFlQ==", + "dev": true, + "requires": { + "@types/node": "^18.0.0", + "@wdio/globals": "8.8.2", + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "expect-webdriverio": "^4.0.1", + "jasmine": "^4.2.1" + } + }, + "@wdio/local-runner": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-8.8.2.tgz", + "integrity": "sha512-7zf7FxjRXqqvrtyzFhWsSXlqw8ldTt/3E6SBvwrn4iS/kL3QzyiVMtZ/ILHfLnIZXvUc5CWNpNJ1WWejYmbNWA==", + "dev": true, + "requires": { + "@types/node": "^18.0.0", + "@wdio/logger": "8.6.6", + "@wdio/repl": "8.6.6", + "@wdio/runner": "8.8.2", + "@wdio/types": "8.8.0", + "async-exit-hook": "^2.0.1", + "split2": "^4.1.0", + "stream-buffers": "^3.0.2" + } + }, + "@wdio/logger": { + "version": "8.6.6", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", + "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", + "dev": 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://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true + } + } + }, + "@wdio/protocols": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.8.1.tgz", + "integrity": "sha512-nDaycUcm/ATLxcjim0fJyRiezXyyj4ZCq+Xf0S2Cubc0k7+DceFBt7KIMsernNVh2pelzFHEEwxh4DLaqQ71Wg==", + "dev": true + }, + "@wdio/repl": { + "version": "8.6.6", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.6.6.tgz", + "integrity": "sha512-vyJzqHJ5yOmfVyk5WWo6pRsJ2xhgWl3DVIBdDNR0wKrtFcm/g1jnB+pNf6Eb7NhCDh3oGul25bmhAwWDoxcFYA==", + "dev": true, + "requires": { + "@types/node": "^18.0.0" + } + }, + "@wdio/reporter": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-8.8.0.tgz", + "integrity": "sha512-qbbLj5ZqtrHOs2sN/wHen+agIUA1EHB48HRyb17wQapZItmIE16D8ctxAISx7yQ6RpjZYPp+zYhUJ20DFpJhGg==", + "dev": true, + "requires": { + "@types/node": "^18.0.0", + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "diff": "^5.0.0", + "object-inspect": "^1.12.0", + "supports-color": "9.3.1" + }, + "dependencies": { + "diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true + }, + "supports-color": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.3.1.tgz", + "integrity": "sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==", + "dev": true + } + } + }, + "@wdio/runner": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-8.8.2.tgz", + "integrity": "sha512-k7gkfhZesnN2dJMzEg+oRQA3a9pEWJSRm7AlidmvQnQkcSC3JzvTtCCqoLaBTxScktOCOUahQ9H+Lf8z/P5Cag==", + "dev": true, + "requires": { + "@types/node": "^18.0.0", + "@wdio/config": "8.8.0", + "@wdio/globals": "8.8.2", + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "@wdio/utils": "8.8.0", + "deepmerge-ts": "^5.0.0", + "expect-webdriverio": "^4.0.1", + "gaze": "^1.1.2", + "webdriver": "8.8.2", + "webdriverio": "8.8.2" + } + }, + "@wdio/spec-reporter": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-8.8.0.tgz", + "integrity": "sha512-ZbW0w8ugXIZ7niYCY9rWWm1oxcrH/ceyQl6nBldARvB0IOroleS5hNtp+dd97Y+OxHv/2AD6MQ4yCmS+ukLEgg==", + "dev": true, + "requires": { + "@wdio/reporter": "8.8.0", + "@wdio/types": "8.8.0", + "chalk": "^5.1.2", + "easy-table": "^1.2.0", + "pretty-ms": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true + } + } + }, + "@wdio/types": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.8.0.tgz", + "integrity": "sha512-Ai6yIlwWB32FUfvQKCqSa6nSyHIhSF5BOU9OfE7I2XYkLAJTxu8B6NORHQ+rgoppHSWc4D2V9r21y3etF8AGnQ==", + "dev": true, + "requires": { + "@types/node": "^18.0.0" + } + }, + "@wdio/utils": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", + "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", + "dev": true, + "requires": { + "@wdio/logger": "8.6.6", + "@wdio/types": "8.8.0", + "import-meta-resolve": "^2.2.0", + "p-iteration": "^1.1.8" + } + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -23794,7 +28278,8 @@ "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "devOptional": true + "optional": true, + "peer": true }, "agent-base": { "version": "6.0.2", @@ -24034,6 +28519,93 @@ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, + "archiver": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", + "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "async": "^3.2.3", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "dependencies": { + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "requires": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": 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://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, "are-we-there-yet": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", @@ -24130,7 +28702,8 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "devOptional": true + "optional": true, + "peer": true }, "array.prototype.flat": { "version": "1.3.1", @@ -24148,7 +28721,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "devOptional": true + "optional": true, + "peer": true }, "asar": { "version": "3.2.0", @@ -24208,7 +28782,8 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "safer-buffer": "~2.1.0" } @@ -24217,7 +28792,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "devOptional": true + "optional": true }, "ast-transform": { "version": "0.0.0", @@ -24296,17 +28871,36 @@ "postcss-value-parser": "^4.2.0" } }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "devOptional": true + "optional": true, + "peer": true }, "aws4": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "devOptional": true + "optional": true, + "peer": true + }, + "axios": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz", + "integrity": "sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } }, "axobject-query": { "version": "2.0.2", @@ -24418,7 +29012,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "tweetnacl": "^0.14.3" } @@ -24465,7 +29060,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "minimist": "^1.2.0" } @@ -24642,7 +29238,8 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz", "integrity": "sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "https-proxy-agent": "^2.2.1" }, @@ -24651,7 +29248,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "es6-promisify": "^5.0.0" } @@ -24660,7 +29258,8 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ms": "^2.1.1" } @@ -24669,7 +29268,8 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -24838,6 +29438,144 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" }, + "cac": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/cac/-/cac-3.0.4.tgz", + "integrity": "sha512-hq4rxE3NT5PlaEiVV39Z45d6MoFcQZG5dsgJqtAUeOz3408LEQAElToDkf9i5IYSCOmK0If/81dLg7nKxqPR0w==", + "dev": true, + "requires": { + "camelcase-keys": "^3.0.0", + "chalk": "^1.1.3", + "indent-string": "^3.0.0", + "minimist": "^1.2.0", + "read-pkg-up": "^1.0.1", + "suffix": "^0.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } + } + }, "cacache": { "version": "16.1.2", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz", @@ -24863,6 +29601,12 @@ "unique-filename": "^1.1.1" } }, + "cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "dev": true + }, "cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -24920,6 +29664,24 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, + "camelcase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-3.0.0.tgz", + "integrity": "sha512-U4E6A6aFyYnNW+tDt5/yIUKQURKXe3WMFPfX4FxrQFcwZ/R08AUk1xWcUtlr7oq6CV07Ji+aa69V2g7BSpblnQ==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "dev": true + } + } + }, "caniuse-lite": { "version": "1.0.30001431", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", @@ -24929,7 +29691,8 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "devOptional": true + "optional": true, + "peer": true }, "cfb": { "version": "1.2.2", @@ -25029,11 +29792,78 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, + "chrome-launcher": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz", + "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==", + "dev": true, + "requires": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + } + } + }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" }, + "chromedriver": { + "version": "111.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-111.0.0.tgz", + "integrity": "sha512-XavNYNBBfKIrT8Oi/ywJ0DoOOU+jHF5bQWTkqStFsAXvfCV9VzYN3J+TGAvZdrpXeoixqPRGUxQ2yZhD2iowdQ==", + "dev": true, + "requires": { + "@testim/chrome-version": "^1.1.3", + "axios": "^1.2.1", + "compare-versions": "^5.0.1", + "extract-zip": "^2.0.1", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^1.1.0", + "tcp-port-used": "^1.0.1" + }, + "dependencies": { + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "chromium-bidi": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.6.tgz", + "integrity": "sha512-TQOkWRaLI/IWvoP8XC+7jO4uHTIiAUiklXU1T0qszlUFEai9LgKXIBXy3pOS3EnQZ3bQtMbKUPkug0fTAEHCSw==", + "dev": true, + "requires": { + "mitt": "3.0.0" + } + }, "chromium-pickle-js": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", @@ -25268,6 +30098,37 @@ "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", "dev": true }, + "compare-versions": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.3.tgz", + "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==", + "dev": true + }, + "compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "dev": true, + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -25536,6 +30397,29 @@ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" }, + "crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -25658,6 +30542,15 @@ } } }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "requires": { + "node-fetch": "2.6.7" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -25734,6 +30627,18 @@ "fastparse": "^1.1.2" } }, + "css-shorthand-properties": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", + "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==", + "dev": true + }, + "css-value": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", + "integrity": "sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==", + "dev": true + }, "css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -26353,7 +31258,8 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "assert-plus": "^1.0.0" } @@ -26379,7 +31285,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "devOptional": true + "optional": true, + "peer": true }, "decompress-response": { "version": "3.3.0", @@ -26410,6 +31317,12 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "deepmerge-ts": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", + "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", + "dev": true + }, "default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -26451,7 +31364,8 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", "integrity": "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "globby": "^5.0.0", "is-path-cwd": "^1.0.0", @@ -26466,7 +31380,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "array-uniq": "^1.0.1" } @@ -26475,7 +31390,8 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -26485,7 +31401,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -26499,7 +31416,8 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "array-union": "^1.0.1", "arrify": "^1.0.0", @@ -26513,22 +31431,18 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "brace-expansion": "^1.1.7" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "devOptional": true - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "glob": "^7.1.3" } @@ -26580,6 +31494,51 @@ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, + "devtools": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.8.2.tgz", + "integrity": "sha512-iD/Xr5rMjx+VD08akiAuiMR5EhWKj9i489rcDm2vdC9iB8u8HY51s9FbmnIrN5OstYma0x2qOF2zKxM/muJTtw==", + "dev": true, + "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", + "chrome-launcher": "^0.15.0", + "edge-paths": "^3.0.5", + "import-meta-resolve": "^2.1.0", + "puppeteer-core": "19.8.5", + "query-selector-shadow-dom": "^1.0.0", + "ua-parser-js": "^1.0.1", + "uuid": "^9.0.0", + "which": "^3.0.0" + }, + "dependencies": { + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "dev": true + }, + "which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", + "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "devtools-protocol": { + "version": "0.0.1124027", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1124027.tgz", + "integrity": "sha512-OT2sdgQn4llM9/tVcCvoty733KFFIlXVvESceJsfazhmg/dF7C5e3Z8cIN8jNwIikixuE5rufGtD1cvKHXfOcQ==", + "dev": true + }, "dfa": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", @@ -26592,6 +31551,12 @@ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, + "diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true + }, "dir-compare": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", @@ -26827,16 +31792,43 @@ "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", "dev": true }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "easy-table": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", + "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "wcwidth": "^1.0.1" + } + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, + "edge-paths": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-3.0.5.tgz", + "integrity": "sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==", + "dev": true, + "requires": { + "@types/which": "^2.0.1", + "which": "^2.0.2" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -27167,6 +32159,31 @@ "unbox-primitive": "^1.0.2" } }, + "es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -27239,13 +32256,15 @@ "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "devOptional": true + "optional": true, + "peer": true }, "es6-promisify": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "es6-promise": "^4.0.3" } @@ -28049,7 +33068,33 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "devOptional": true + "optional": true, + "peer": true + }, + "expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "dev": true, + "requires": { + "@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" + } + }, + "expect-webdriverio": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.1.3.tgz", + "integrity": "sha512-tn7kMH/WVrVwwzPaCXMuFYiGXx15LwpxwkJkC/WmF6xptcqW7kaEZco7sxHjtEXpKV7QVGsfY1Z0PcwW4gj5OA==", + "dev": true, + "requires": { + "@wdio/globals": "^8.2.4", + "expect": "^29.4.0", + "jest-matcher-utils": "^29.4.0", + "webdriverio": "^8.2.4" + } }, "express": { "version": "4.18.2", @@ -28144,7 +33189,8 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "devOptional": true + "optional": true, + "peer": true }, "external-editor": { "version": "3.1.0", @@ -28433,11 +33479,21 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "devOptional": true + "optional": true, + "peer": true }, "form-data": { "version": "4.0.0", @@ -28450,6 +33506,12 @@ "mime-types": "^2.1.12" } }, + "form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "dev": true + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -28476,6 +33538,12 @@ "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", "dev": true }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -28576,9 +33644,9 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -28609,7 +33677,8 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "assert-plus": "^1.0.0" } @@ -28750,6 +33819,15 @@ "delegate": "^3.1.2" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -28846,13 +33924,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "devOptional": true + "optional": true, + "peer": true }, "har-validator": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -28862,7 +33942,8 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -28874,7 +33955,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "devOptional": true + "optional": true, + "peer": true } } }, @@ -29045,9 +34127,9 @@ "dev": true }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, "http-deceiver": { @@ -29179,13 +34261,24 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, + "http2-wrapper": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", + "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", + "dev": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + } + }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -29272,7 +34365,8 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "devOptional": true + "optional": true, + "peer": true }, "immutable": { "version": "4.1.0", @@ -29295,6 +34389,12 @@ } } }, + "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==", + "dev": true + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -29404,12 +34504,12 @@ "dev": true }, "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "requires": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" } @@ -29425,6 +34525,12 @@ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, + "ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "dev": true + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -29440,6 +34546,17 @@ "has-tostringtag": "^1.0.0" } }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -29538,6 +34655,12 @@ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -29562,13 +34685,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", - "devOptional": true + "optional": true, + "peer": true }, "is-path-in-cwd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "is-path-inside": "^1.0.0" }, @@ -29577,7 +34702,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "path-is-inside": "^1.0.1" } @@ -29620,6 +34746,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -29652,17 +34784,49 @@ "has-symbols": "^1.0.2" } }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "devOptional": true + "optional": true, + "peer": true }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -29672,6 +34836,16 @@ "call-bind": "^1.0.2" } }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "is-what": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", @@ -29685,6 +34859,17 @@ "is-docker": "^2.0.0" } }, + "is2": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", + "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "ip-regex": "^4.1.0", + "is-url": "^1.2.4" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -29705,7 +34890,8 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "devOptional": true + "optional": true, + "peer": true }, "istanbul-lib-coverage": { "version": "3.2.0", @@ -29799,15 +34985,458 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jalhyd": { + "version": "file:jalhyd", + "requires": { + "@types/base-64": "^1.0.0", + "@types/jasmine": "^4.0.3", + "@types/lodash": "^4.14.191", + "@types/node": "^18.0.3", + "@typescript-eslint/eslint-plugin": "^5.30.6", + "@typescript-eslint/parser": "^5.30.6", + "base-64": "^1.0.0", + "buffer": "^6.0.3", + "eslint": "^8.19.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-jsdoc": "^39.3.3", + "eslint-plugin-prefer-arrow": "^1.2.3", + "find": "^0.3.0", + "jasmine": "^4.2.1", + "jasmine-core": "^4.2.0", + "jasmine-node": "^3.0.0", + "jasmine-ts": "^0.4.0", + "replace-in-file": "^6.3.5", + "requirejs": "^2.3.6", + "rimraf": "^3.0.2", + "ts-node": "^10.8.2", + "typedoc": "^0.23.7", + "typescript": "^4.7.4" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + } + } + }, + "jasmine": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-4.5.0.tgz", + "integrity": "sha512-9olGRvNZyADIwYL9XBNBst5BTU/YaePzuddK+YRslc7rI9MdTIE4r3xaBKbv2GEmzYYUfMOdTR8/i6JfLZaxSQ==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "jasmine-core": "^4.5.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": 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" + } + }, + "jasmine-core": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz", + "integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "jasmine-core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.2.0.tgz", + "integrity": "sha512-OcFpBrIhnbmb9wfI8cqPSJ50pv3Wg4/NSgoZIqHzIwO/2a9qivJWzv8hUvaREIMYYJBas6AvfXATFdVuzzCqVw==", + "dev": true + }, + "jasmine-growl-reporter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jasmine-growl-reporter/-/jasmine-growl-reporter-2.0.0.tgz", + "integrity": "sha512-RYwVfPaGgxQQSHDOt6jQ99/KAkFQ/Fiwg/AzBS+uO9A4UhGhxb7hwXaUUSU/Zs0MxBoFNqmIRC+7P4/+5O3lXg==", + "dev": true, + "requires": { + "growl": "^1.10.5" + } + }, + "jasmine-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jasmine-node/-/jasmine-node-3.0.0.tgz", + "integrity": "sha512-vUa5Q7bQYwHHqi6FlJYndiKqZp+d+c3MKe0QUMwwrC4JRmoRV3zkg0buxB/uQ6qLh0NO34TNstpAnvaZ6xGlAA==", + "dev": true, + "requires": { + "coffeescript": "~1.12.7", + "gaze": "~1.1.2", + "jasmine-growl-reporter": "~2.0.0", + "jasmine-reporters": "~1.0.0", + "mkdirp": "~0.3.5", + "requirejs": "~2.3.6", + "underscore": "~1.9.1", + "walkdir": "~0.0.12" + }, + "dependencies": { + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==", + "dev": true + }, + "underscore": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz", + "integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==", + "dev": true + } + } + }, + "jasmine-reporters": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jasmine-reporters/-/jasmine-reporters-1.0.2.tgz", + "integrity": "sha512-KrMRwzykkIKfkXr5UhCs/4BRJpws4VmNOeHIVKX8EBa9lYysVik3phkKrJCnCUE2lUCZDIA4rAmFrDgw546IzA==", + "dev": true, + "requires": { + "mkdirp": "~0.3.5" + }, + "dependencies": { + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==", + "dev": true + } + } + }, + "jasmine-spec-reporter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-7.0.0.tgz", + "integrity": "sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==", + "dev": true, + "requires": { + "colors": "1.4.0" + } + }, + "jasmine-ts": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/jasmine-ts/-/jasmine-ts-0.4.0.tgz", + "integrity": "sha512-bIAWJKUwxfuZfGI1ctEbny7+dsyFzsN0eLzOokxh0qIUCofai2WUEKoe3MMllkGEBXJzbEVYr2IyhJBv4j7SBA==", + "dev": true, + "requires": { + "yargs": "^17.0.1" + } + }, + "jasminewd2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==", + "optional": true, + "peer": true + }, + "jest-diff": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -29819,183 +35448,6 @@ } } }, - "jalhyd": { - "version": "file:jalhyd", - "requires": { - "@types/base-64": "^1.0.0", - "@types/jasmine": "^4.0.3", - "@types/lodash": "^4.14.191", - "@types/node": "^18.0.3", - "@typescript-eslint/eslint-plugin": "^5.30.6", - "@typescript-eslint/parser": "^5.30.6", - "base-64": "^1.0.0", - "buffer": "^6.0.3", - "eslint": "^8.19.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-jsdoc": "^39.3.3", - "eslint-plugin-prefer-arrow": "^1.2.3", - "find": "^0.3.0", - "jasmine": "^4.2.1", - "jasmine-core": "^4.2.0", - "jasmine-node": "^3.0.0", - "jasmine-ts": "^0.4.0", - "replace-in-file": "^6.3.5", - "requirejs": "^2.3.6", - "rimraf": "^3.0.2", - "ts-node": "^10.8.2", - "typedoc": "^0.23.7", - "typescript": "^4.7.4" - }, - "dependencies": { - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - } - } - }, - "jasmine": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-4.5.0.tgz", - "integrity": "sha512-9olGRvNZyADIwYL9XBNBst5BTU/YaePzuddK+YRslc7rI9MdTIE4r3xaBKbv2GEmzYYUfMOdTR8/i6JfLZaxSQ==", - "dev": true, - "requires": { - "glob": "^7.1.6", - "jasmine-core": "^4.5.0" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": 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" - } - }, - "jasmine-core": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz", - "integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "jasmine-core": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.2.0.tgz", - "integrity": "sha512-OcFpBrIhnbmb9wfI8cqPSJ50pv3Wg4/NSgoZIqHzIwO/2a9qivJWzv8hUvaREIMYYJBas6AvfXATFdVuzzCqVw==", - "dev": true - }, - "jasmine-growl-reporter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jasmine-growl-reporter/-/jasmine-growl-reporter-2.0.0.tgz", - "integrity": "sha512-RYwVfPaGgxQQSHDOt6jQ99/KAkFQ/Fiwg/AzBS+uO9A4UhGhxb7hwXaUUSU/Zs0MxBoFNqmIRC+7P4/+5O3lXg==", - "dev": true, - "requires": { - "growl": "^1.10.5" - } - }, - "jasmine-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jasmine-node/-/jasmine-node-3.0.0.tgz", - "integrity": "sha512-vUa5Q7bQYwHHqi6FlJYndiKqZp+d+c3MKe0QUMwwrC4JRmoRV3zkg0buxB/uQ6qLh0NO34TNstpAnvaZ6xGlAA==", - "dev": true, - "requires": { - "coffeescript": "~1.12.7", - "gaze": "~1.1.2", - "jasmine-growl-reporter": "~2.0.0", - "jasmine-reporters": "~1.0.0", - "mkdirp": "~0.3.5", - "requirejs": "~2.3.6", - "underscore": "~1.9.1", - "walkdir": "~0.0.12" - }, - "dependencies": { - "mkdirp": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", - "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==", - "dev": true - }, - "underscore": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz", - "integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==", - "dev": true - } - } - }, - "jasmine-reporters": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jasmine-reporters/-/jasmine-reporters-1.0.2.tgz", - "integrity": "sha512-KrMRwzykkIKfkXr5UhCs/4BRJpws4VmNOeHIVKX8EBa9lYysVik3phkKrJCnCUE2lUCZDIA4rAmFrDgw546IzA==", - "dev": true, - "requires": { - "mkdirp": "~0.3.5" - }, - "dependencies": { - "mkdirp": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", - "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==", - "dev": true - } - } - }, - "jasmine-spec-reporter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-7.0.0.tgz", - "integrity": "sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==", - "dev": true, - "requires": { - "colors": "1.4.0" - } - }, - "jasmine-ts": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/jasmine-ts/-/jasmine-ts-0.4.0.tgz", - "integrity": "sha512-bIAWJKUwxfuZfGI1ctEbny7+dsyFzsN0eLzOokxh0qIUCofai2WUEKoe3MMllkGEBXJzbEVYr2IyhJBv4j7SBA==", - "dev": true, - "requires": { - "yargs": "^17.0.1" - } - }, - "jasminewd2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", - "integrity": "sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==", - "devOptional": true - }, "jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -30045,7 +35497,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "devOptional": true + "optional": true, + "peer": true }, "jsdoc-type-pratt-parser": { "version": "3.1.0", @@ -30073,7 +35526,8 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "devOptional": true + "optional": true, + "peer": true }, "json-schema-traverse": { "version": "1.0.0", @@ -30090,7 +35544,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "devOptional": true + "optional": true }, "json5": { "version": "2.2.1", @@ -30122,7 +35576,8 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -30134,19 +35589,22 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "devOptional": true + "optional": true, + "peer": true }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "devOptional": true + "optional": true, + "peer": true }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -30159,7 +35617,8 @@ "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -30171,7 +35630,8 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "devOptional": true + "optional": true, + "peer": true } } }, @@ -30222,12 +35682,27 @@ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" }, + "ky": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", + "dev": true + }, "lazy-val": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", "dev": true }, + "lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + } + }, "less": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", @@ -30311,16 +35786,68 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "immediate": "~3.0.5" } }, + "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==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "marky": "^1.2.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + } + } + }, "loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -30349,17 +35876,71 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.pickby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", + "integrity": "sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==", + "dev": true + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true + }, + "lodash.zip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", + "dev": true + }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -30502,6 +36083,12 @@ "ssri": "^9.0.0" } }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + }, "map-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", @@ -30513,6 +36100,12 @@ "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.2.tgz", "integrity": "sha512-JjBTFTAvuTgANXx82a5vzK9JLSMoV6V3LBVn4Uhdso6t7vXrGx7g1Cd2r6NYSsxrYbQGFCMqBDhFHyK5q2UvcQ==" }, + "marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "dev": true + }, "matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", @@ -30647,6 +36240,12 @@ "mime-db": "1.52.0" } }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -30764,11 +36363,23 @@ "yallist": "^4.0.0" } }, + "mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true + }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, "moment-mini": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", @@ -30957,6 +36568,15 @@ "dev": true, "optional": true }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, "node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -31040,6 +36660,18 @@ "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -31229,7 +36861,8 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "devOptional": true + "optional": true, + "peer": true }, "object-assign": { "version": "4.1.1", @@ -31439,6 +37072,12 @@ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, + "p-iteration": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/p-iteration/-/p-iteration-1.1.8.tgz", + "integrity": "sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ==", + "dev": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -31578,6 +37217,12 @@ "lines-and-columns": "^1.1.6" } }, + "parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true + }, "parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", @@ -31666,7 +37311,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "devOptional": true + "optional": true, + "peer": true }, "path-key": { "version": "3.1.1", @@ -31678,6 +37324,30 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-scurry": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.4.tgz", + "integrity": "sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==", + "dev": true, + "requires": { + "lru-cache": "^9.0.0", + "minipass": "^5.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.0.1.tgz", + "integrity": "sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==", + "dev": true + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + } + } + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -31729,7 +37399,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "devOptional": true + "optional": true, + "peer": true }, "picocolors": { "version": "1.0.0", @@ -31741,6 +37412,11 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -32178,6 +37854,34 @@ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" }, + "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==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dev": true, + "requires": { + "parse-ms": "^2.1.0" + } + }, "primeicons": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-6.0.1.tgz", @@ -32240,7 +37944,8 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz", "integrity": "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "@types/q": "^0.0.32", "@types/selenium-webdriver": "^3.0.0", @@ -32263,19 +37968,22 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "devOptional": true + "optional": true, + "peer": true }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "devOptional": true + "optional": true, + "peer": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -32285,7 +37993,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -32298,7 +38007,8 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -32309,13 +38019,15 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true + "optional": true, + "peer": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ansi-regex": "^5.0.1" } @@ -32326,7 +38038,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "color-name": "~1.1.4" } @@ -32335,13 +38048,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true + "optional": true, + "peer": true }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -32355,7 +38070,8 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", "integrity": "sha512-KbdGQTf5jbZgltoHs31XGiChAPumMSY64OZMWLNYnEnMfG5uwGBhffePwuskexjT+/Jea/gU3qAU8344hNohSw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "exit": "^0.1.2", "glob": "^7.0.6", @@ -32366,13 +38082,15 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", "integrity": "sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ==", - "devOptional": true + "optional": true, + "peer": true }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "brace-expansion": "^1.1.7" } @@ -32381,19 +38099,22 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==", - "devOptional": true + "optional": true, + "peer": true }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "devOptional": true + "optional": true, + "peer": true }, "source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "source-map": "^0.5.6" } @@ -32402,7 +38123,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ansi-regex": "^2.0.0" } @@ -32411,13 +38133,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "devOptional": true + "optional": true, + "peer": true }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -32428,13 +38152,15 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true + "optional": true, + "peer": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "color-convert": "^2.0.1" } @@ -32443,7 +38169,8 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ansi-regex": "^5.0.1" } @@ -32454,13 +38181,15 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "devOptional": true + "optional": true, + "peer": true }, "yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -32479,7 +38208,8 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -32496,6 +38226,12 @@ "ipaddr.js": "1.9.1" } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "proxy-middleware": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", @@ -32508,11 +38244,18 @@ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "optional": true }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "devOptional": true + "optional": true, + "peer": true }, "pump": { "version": "3.0.0", @@ -32529,11 +38272,60 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, + "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==", + "dev": true, + "requires": { + "@puppeteer/browsers": "0.4.0", + "chromium-bidi": "0.4.6", + "cross-fetch": "3.1.5", + "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", + "ws": "8.13.0" + }, + "dependencies": { + "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==", + "dev": true + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "devOptional": true + "optional": true, + "peer": true }, "qs": { "version": "6.11.0", @@ -32543,11 +38335,23 @@ "side-channel": "^1.0.4" } }, + "query-selector-shadow-dom": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", + "integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==", + "dev": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, "quote-stream": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", @@ -32606,19 +38410,18 @@ } } }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "requires": { "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - } } }, "read-config-file": { @@ -32661,6 +38464,94 @@ "npm-normalize-package-bin": "^1.0.1" } }, + "read-pkg": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", + "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", + "dev": 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" + }, + "dependencies": { + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", + "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", + "dev": true, + "requires": { + "find-up": "^6.3.0", + "read-pkg": "^7.1.0", + "type-fest": "^2.5.0" + }, + "dependencies": { + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "requires": { + "p-limit": "^4.0.0" + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true + } + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -32675,6 +38566,15 @@ "util-deprecate": "~1.0.1" } }, + "readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dev": true, + "requires": { + "minimatch": "^5.1.0" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -32683,6 +38583,36 @@ "picomatch": "^2.2.1" } }, + "recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "requires": { + "minimatch": "^3.0.5" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, "reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -32868,7 +38798,8 @@ "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -32896,7 +38827,8 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -32907,13 +38839,15 @@ "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "devOptional": true + "optional": true, + "peer": true }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -32923,7 +38857,8 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "devOptional": true + "optional": true, + "peer": true } } }, @@ -32941,7 +38876,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "devOptional": true + "optional": true, + "peer": true }, "requirejs": { "version": "2.3.6", @@ -32964,6 +38900,12 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -33007,6 +38949,23 @@ "lowercase-keys": "^1.0.0" } }, + "resq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resq/-/resq-1.11.0.tgz", + "integrity": "sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1" + }, + "dependencies": { + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", + "dev": true + } + } + }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -33027,6 +38986,12 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, + "rgb2hex": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.5.tgz", + "integrity": "sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -33111,9 +39076,9 @@ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "requires": { "tslib": "^2.1.0" } @@ -33171,7 +39136,8 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "https-proxy-agent": "^2.2.1" }, @@ -33180,7 +39146,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "es6-promisify": "^5.0.0" } @@ -33189,7 +39156,8 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ms": "^2.1.1" } @@ -33198,7 +39166,8 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -33284,7 +39253,8 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "jszip": "^3.1.3", "rimraf": "^2.5.4", @@ -33296,7 +39266,8 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -33306,7 +39277,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -33320,7 +39292,8 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "brace-expansion": "^1.1.7" } @@ -33329,7 +39302,8 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "glob": "^7.1.3" } @@ -33338,7 +39312,8 @@ "version": "0.0.30", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", "integrity": "sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "os-tmpdir": "~1.0.1" } @@ -33550,7 +39525,8 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "devOptional": true + "optional": true, + "peer": true }, "setprototypeof": { "version": "1.2.0", @@ -33830,6 +39806,12 @@ "through": "2" } }, + "split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true + }, "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -33848,7 +39830,8 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -33869,6 +39852,23 @@ "minipass": "^3.1.1" } }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, "stat-mode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", @@ -34042,6 +40042,64 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, + "stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dev": true, + "requires": { + "bl": "^5.0.0" + }, + "dependencies": { + "bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "requires": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "requires": { + "internal-slot": "^1.0.4" + } + }, + "stream-buffers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", + "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", + "dev": true + }, "stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", @@ -34100,6 +40158,15 @@ "ansi-regex": "^5.0.1" } }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -34170,6 +40237,12 @@ "normalize-path": "^3.0.0" } }, + "suffix": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/suffix/-/suffix-0.1.1.tgz", + "integrity": "sha512-j5uf6MJtMCfC4vBe5LFktSe4bGyNTBk7I2Kdri0jeLrcv5B9pWfxVa5JQpoxgtR8vaVB7bVxsWgnfQbX5wkhAA==", + "dev": true + }, "sumchecker": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", @@ -34221,6 +40294,73 @@ "yallist": "^4.0.0" } }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + }, + "dependencies": { + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + } + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "tcp-port-used": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", + "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", + "dev": true, + "requires": { + "debug": "4.3.1", + "is2": "^2.0.6" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } + } + }, "temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -34421,6 +40561,12 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "traverse": { "version": "0.6.7", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", @@ -34649,7 +40795,8 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "safe-buffer": "^5.0.1" } @@ -34658,7 +40805,8 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "devOptional": true + "optional": true, + "peer": true }, "type": { "version": "1.2.0", @@ -34717,6 +40865,12 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" }, + "ua-parser-js": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", + "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", + "dev": true + }, "uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -34736,6 +40890,16 @@ "which-boxed-primitive": "^1.0.2" } }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -34966,17 +41130,190 @@ "defaults": "^1.0.3" } }, + "wdio-chromedriver-service": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/wdio-chromedriver-service/-/wdio-chromedriver-service-8.1.1.tgz", + "integrity": "sha512-pN3GiOkTIMnalfq4PJAHdX95pDp1orHnTY8W1fIbd6ok81ba97UjerTgS7lUDRUh1p0MAm35Ww0uc0/9wzB7SA==", + "dev": true, + "requires": { + "@wdio/logger": "^8.1.0", + "fs-extra": "^11.1.0", + "split2": "^4.1.0", + "tcp-port-used": "^1.0.2" + }, + "dependencies": { + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "wdio-wait-for": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/wdio-wait-for/-/wdio-wait-for-3.0.3.tgz", + "integrity": "sha512-y/n7tpExl54SOwbk27Ngz9ch4qP+250OhL6yYrxB5GLL5jZWcechTBbSJwOZNTUT6jZomoPFT9t77NFpqdJsig==", + "dev": true + }, "web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", "dev": true }, + "webdriver": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.8.2.tgz", + "integrity": "sha512-ug+7n0JgRTLG5pGyD53VKValSLFcr0oll1QelH1Gueh/umt3Ipu+SDV+v+lyCZY6CKasCsv80W8oZfpLBj1ClQ==", + "dev": true, + "requires": { + "@types/node": "^18.0.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", + "deepmerge-ts": "^5.0.0", + "got": "^12.1.0", + "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==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.1" + } + }, + "cacheable-request": { + "version": "10.2.9", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.9.tgz", + "integrity": "sha512-CaAMr53AS1Tb9evO1BIWFnZjSr8A4pbXofpsNVWPMDZZj3ZQKHwsQG9BrTqQ4x5ZYJXz1T2b8LLtTZODxSpzbg==", + "dev": 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" + } + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } + } + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true + }, + "got": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.0.tgz", + "integrity": "sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==", + "dev": 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" + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "dev": true + }, + "mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "dev": true + }, + "normalize-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "dev": true + }, + "p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "dev": true + }, + "responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "dev": true, + "requires": { + "lowercase-keys": "^3.0.0" + } + } + } + }, "webdriver-js-extender": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "@types/selenium-webdriver": "^3.0.0", "selenium-webdriver": "^3.0.1" @@ -34986,7 +41323,8 @@ "version": "12.1.8", "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.8.tgz", "integrity": "sha512-qJR36SXG2VwKugPcdwhaqcLQOD7r8P2Xiv9sfNbfZrKBnX243iAkOueX1yAmeNgIKhJ3YAT/F2gq6IiEZzahsg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "adm-zip": "^0.4.9", "chalk": "^1.1.1", @@ -35005,19 +41343,22 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "devOptional": true + "optional": true, + "peer": true }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "devOptional": true + "optional": true, + "peer": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -35027,7 +41368,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -35040,7 +41382,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -35054,13 +41397,15 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "devOptional": true + "optional": true, + "peer": true }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "brace-expansion": "^1.1.7" } @@ -35069,7 +41414,8 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "glob": "^7.1.3" } @@ -35078,13 +41424,15 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "devOptional": true + "optional": true, + "peer": true }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "ansi-regex": "^2.0.0" } @@ -35093,10 +41441,122 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "devOptional": true + "optional": true, + "peer": true + } + } + }, + "webdriverio": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.8.2.tgz", + "integrity": "sha512-H3h+sHLg9hfQCPLvpd30hi/ZW4lLy73m4zrZ5kJyuuUf38SZFLcfXD3W1RGig88RQ/75Ui164ugwHasTMiQEgw==", + "dev": true, + "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", + "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", + "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": "^9.0.0", + "puppeteer-core": "19.8.5", + "query-selector-shadow-dom": "^1.0.0", + "resq": "^1.9.1", + "rgb2hex": "0.2.5", + "serialize-error": "^8.0.0", + "webdriver": "8.8.2" + }, + "dependencies": { + "aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "requires": { + "deep-equal": "^2.0.5" + } + }, + "deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + } + }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "minimatch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", + "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true } } }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, "webpack": { "version": "5.75.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", @@ -35291,6 +41751,16 @@ "iconv-lite": "0.6.3" } }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -35312,11 +41782,38 @@ "is-symbol": "^1.0.3" } }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "devOptional": true + "optional": true, + "peer": true + }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } }, "wide-align": { "version": "1.1.5", @@ -35436,9 +41933,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "requires": {} }, "xlsx": { @@ -35459,7 +41956,8 @@ "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -35469,7 +41967,8 @@ "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "devOptional": true + "optional": true, + "peer": true } } }, @@ -35528,6 +42027,94 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" }, + "yarn-install": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yarn-install/-/yarn-install-1.0.0.tgz", + "integrity": "sha512-VO1u181msinhPcGvQTVMnHVOae8zjX/NSksR17e6eXHRveDvHCF5mGjh9hkN8mzyfnCqcBe42LdTs7bScuTaeg==", + "dev": true, + "requires": { + "cac": "^3.0.3", + "chalk": "^1.1.3", + "cross-spawn": "^4.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + } + } + }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -35550,6 +42137,30 @@ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true }, + "zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "zone.js": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", diff --git a/package.json b/package.json index 14c4442a9..5f9625d2d 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,8 @@ "viz": "tsviz -recursive src/ nghyd_class_diagram.png", "webapp-nocompile": "\"node_modules/.bin/http-server\" dist", "webapp": "npm run build-no-pdf && npm run webapp-nocompile", - "service-worker-version": "./scripts/update-service-worker-config.sh" + "service-worker-version": "./scripts/update-service-worker-config.sh", + "wdio": "wdio run ./wdio.conf.ts" }, "private": true, "dependencies": { @@ -94,6 +95,11 @@ "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/eslint-plugin-tslint": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", + "@wdio/cli": "^8.8.2", + "@wdio/jasmine-framework": "^8.8.2", + "@wdio/local-runner": "^8.8.2", + "@wdio/spec-reporter": "^8.8.0", + "chromedriver": "^111.0.0", "codelyzer": "^6.0.2", "electron": "^19.0.7", "electron-builder": "^23.1.0", @@ -104,6 +110,8 @@ "jasmine-spec-reporter": "~7.0.0", "ts-node": "^10.8.2", "typescript": "~4.7.4", + "wdio-chromedriver-service": "^8.1.1", + "wdio-wait-for": "^3.0.3", "webpack-dev-server": "^4.9.3" } } diff --git a/test/pageobjects/login.page.ts b/test/pageobjects/login.page.ts new file mode 100644 index 000000000..b117fb0d6 --- /dev/null +++ b/test/pageobjects/login.page.ts @@ -0,0 +1,42 @@ +import { ChainablePromiseElement } from 'webdriverio'; + +import Page from './page'; + +/** + * sub page containing specific selectors and methods for a specific page + */ +class LoginPage extends Page { + /** + * define selectors using getter methods + */ + public get inputUsername () { + return $('#username'); + } + + public get inputPassword () { + return $('#password'); + } + + public get btnSubmit () { + return $('button[type="submit"]'); + } + + /** + * a method to encapsule automation code to interact with the page + * e.g. to login using username and password + */ + public async login (username: string, password: string) { + await this.inputUsername.setValue(username); + await this.inputPassword.setValue(password); + await this.btnSubmit.click(); + } + + /** + * overwrite specific options to adapt it to page object + */ + public open () { + return super.open('login'); + } +} + +export default new LoginPage(); diff --git a/test/pageobjects/page.ts b/test/pageobjects/page.ts new file mode 100644 index 000000000..fc8be3339 --- /dev/null +++ b/test/pageobjects/page.ts @@ -0,0 +1,13 @@ +/** +* main page object containing all methods, selectors and functionality +* that is shared across all page objects +*/ +export default class Page { + /** + * Opens a sub page of the page + * @param path path of the sub page (e.g. /path/to/page.html) + */ + public open (path: string) { + return browser.url(`https://the-internet.herokuapp.com/${path}`) + } +} diff --git a/test/pageobjects/secure.page.ts b/test/pageobjects/secure.page.ts new file mode 100644 index 000000000..35b7dca15 --- /dev/null +++ b/test/pageobjects/secure.page.ts @@ -0,0 +1,17 @@ +import { ChainablePromiseElement } from 'webdriverio'; + +import Page from './page'; + +/** + * sub page containing specific selectors and methods for a specific page + */ +class SecurePage extends Page { + /** + * define selectors using getter methods + */ + public get flashAlert () { + return $('#flash'); + } +} + +export default new SecurePage(); diff --git a/test/specs/example.e2e.ts b/test/specs/example.e2e.ts new file mode 100644 index 000000000..4f6453e7d --- /dev/null +++ b/test/specs/example.e2e.ts @@ -0,0 +1,15 @@ +import LoginPage from '../pageobjects/login.page'; +import SecurePage from '../pageobjects/secure.page'; + +describe('My Login application', () => { + it('should login with valid credentials', async () => { + await LoginPage.open(); + + await LoginPage.login('tomsmith', 'SuperSecretPassword!'); + await expect(SecurePage.flashAlert).toBeExisting(); + await expect(SecurePage.flashAlert).toHaveTextContaining( + 'You logged into a secure area!'); + }); +}); + + diff --git a/wdio.conf.ts b/wdio.conf.ts new file mode 100644 index 000000000..a891a4ab4 --- /dev/null +++ b/wdio.conf.ts @@ -0,0 +1,312 @@ +import type { Options } from '@wdio/types' + +export const config: Options.Testrunner = { + // + // ==================== + // Runner Configuration + // ==================== + // WebdriverIO supports running e2e tests as well as unit and component tests. + runner: 'local', + autoCompileOpts: { + autoCompile: true, + tsNodeOpts: { + project: './test/tsconfig.json', + transpileOnly: true + } + }, + + + // + // ================== + // Specify Test Files + // ================== + // Define which test specs should run. The pattern is relative to the directory + // of the configuration file being run. + // + // The specs are defined as an array of spec files (optionally using wildcards + // that will be expanded). The test for each spec file will be run in a separate + // worker process. In order to have a group of spec files run in the same worker + // process simply enclose them in an array within the specs array. + // + // If you are calling `wdio` from an NPM script (see https://docs.npmjs.com/cli/run-script), + // then the current working directory is where your `package.json` resides, so `wdio` + // will be called from there. + // + specs: [ + './test/specs/**/*.ts' + ], + // Patterns to exclude. + exclude: [ + // 'path/to/excluded/files' + ], + // + // ============ + // Capabilities + // ============ + // Define your capabilities here. WebdriverIO can run multiple capabilities at the same + // time. Depending on the number of capabilities, WebdriverIO launches several test + // sessions. Within your capabilities you can overwrite the spec and exclude options in + // order to group specific specs to a specific capability. + // + // First, you can define how many instances should be started at the same time. Let's + // say you have 3 different capabilities (Chrome, Firefox, and Safari) and you have + // set maxInstances to 1; wdio will spawn 3 processes. Therefore, if you have 10 spec + // files and you set maxInstances to 10, all spec files will get tested at the same time + // and 30 processes will get spawned. The property handles how many capabilities + // from the same test should run tests. + // + maxInstances: 10, + // + // If you have trouble getting all important capabilities together, check out the + // Sauce Labs platform configurator - a great tool to configure your capabilities: + // https://saucelabs.com/platform/platform-configurator + // + capabilities: [{ + + // maxInstances can get overwritten per capability. So if you have an in-house Selenium + // grid with only 5 firefox instances available you can make sure that not more than + // 5 instances get started at a time. + maxInstances: 5, + // + browserName: 'chrome', + acceptInsecureCerts: true + // If outputDir is provided WebdriverIO can capture driver session logs + // it is possible to configure which logTypes to include/exclude. + // excludeDriverLogs: ['*'], // pass '*' to exclude all driver session logs + // excludeDriverLogs: ['bugreport', 'server'], + }], + // + // =================== + // Test Configurations + // =================== + // Define all options that are relevant for the WebdriverIO instance here + // + // Level of logging verbosity: trace | debug | info | warn | error | silent + logLevel: 'info', + // + // Set specific log levels per logger + // loggers: + // - webdriver, webdriverio + // - @wdio/browserstack-service, @wdio/devtools-service, @wdio/sauce-service + // - @wdio/mocha-framework, @wdio/jasmine-framework + // - @wdio/local-runner + // - @wdio/sumologic-reporter + // - @wdio/cli, @wdio/config, @wdio/utils + // Level of logging verbosity: trace | debug | info | warn | error | silent + // logLevels: { + // webdriver: 'info', + // '@wdio/appium-service': 'info' + // }, + // + // If you only want to run your tests until a specific amount of tests have failed use + // bail (default is 0 - don't bail, run all tests). + bail: 0, + // + // Set a base URL in order to shorten url command calls. If your `url` parameter starts + // with `/`, the base url gets prepended, not including the path portion of your baseUrl. + // If your `url` parameter starts without a scheme or `/` (like `some/path`), the base url + // gets prepended directly. + baseUrl: 'http://localhost:4200/', + // + // Default timeout for all waitFor* commands. + waitforTimeout: 10000, + // + // Default timeout in milliseconds for request + // if browser driver or grid doesn't send response + connectionRetryTimeout: 120000, + // + // Default request retries count + connectionRetryCount: 3, + // + // Test runner services + // Services take over a specific job you don't want to take care of. They enhance + // your test setup with almost no effort. Unlike plugins, they don't add new + // commands. Instead, they hook themselves up into the test process. + services: ['chromedriver'], + + // Framework you want to run your specs with. + // The following are supported: Mocha, Jasmine, and Cucumber + // see also: https://webdriver.io/docs/frameworks + // + // Make sure you have the wdio adapter package for the specific framework installed + // before running any tests. + framework: 'jasmine', + // + // The number of times to retry the entire specfile when it fails as a whole + // specFileRetries: 1, + // + // Delay in seconds between the spec file retry attempts + // specFileRetriesDelay: 0, + // + // Whether or not retried specfiles should be retried immediately or deferred to the end of the queue + // specFileRetriesDeferred: false, + // + // Test reporter for stdout. + // The only one supported by default is 'dot' + // see also: https://webdriver.io/docs/dot-reporter + reporters: ['spec'], + + + + // + // Options to be passed to Jasmine. + jasmineOpts: { + // Jasmine default timeout + defaultTimeoutInterval: 60000, + // + // The Jasmine framework allows interception of each assertion in order to log the state of the application + // or website depending on the result. For example, it is pretty handy to take a screenshot every time + // an assertion fails. + expectationResultHandler: function(passed, assertion) { + // do something + } + }, + + // + // ===== + // Hooks + // ===== + // WebdriverIO provides several hooks you can use to interfere with the test process in order to enhance + // it and to build services around it. You can either apply a single function or an array of + // methods to it. If one of them returns with a promise, WebdriverIO will wait until that promise got + // resolved to continue. + /** + * Gets executed once before all workers get launched. + * @param {Object} config wdio configuration object + * @param {Array.<Object>} capabilities list of capabilities details + */ + // onPrepare: function (config, capabilities) { + // }, + /** + * Gets executed before a worker process is spawned and can be used to initialise specific service + * for that worker as well as modify runtime environments in an async fashion. + * @param {String} cid capability id (e.g 0-0) + * @param {[type]} caps object containing capabilities for session that will be spawn in the worker + * @param {[type]} specs specs to be run in the worker process + * @param {[type]} args object that will be merged with the main configuration once worker is initialized + * @param {[type]} execArgv list of string arguments passed to the worker process + */ + // onWorkerStart: function (cid, caps, specs, args, execArgv) { + // }, + /** + * Gets executed just after a worker process has exited. + * @param {String} cid capability id (e.g 0-0) + * @param {Number} exitCode 0 - success, 1 - fail + * @param {[type]} specs specs to be run in the worker process + * @param {Number} retries number of retries used + */ + // onWorkerEnd: function (cid, exitCode, specs, retries) { + // }, + /** + * Gets executed just before initialising the webdriver session and test framework. It allows you + * to manipulate configurations depending on the capability or spec. + * @param {Object} config wdio configuration object + * @param {Array.<Object>} capabilities list of capabilities details + * @param {Array.<String>} specs List of spec file paths that are to be run + * @param {String} cid worker id (e.g. 0-0) + */ + // beforeSession: function (config, capabilities, specs, cid) { + // }, + /** + * Gets executed before test execution begins. At this point you can access to all global + * variables like `browser`. It is the perfect place to define custom commands. + * @param {Array.<Object>} capabilities list of capabilities details + * @param {Array.<String>} specs List of spec file paths that are to be run + * @param {Object} browser instance of created browser/device session + */ + // before: function (capabilities, specs) { + // }, + /** + * Runs before a WebdriverIO command gets executed. + * @param {String} commandName hook command name + * @param {Array} args arguments that command would receive + */ + // beforeCommand: function (commandName, args) { + // }, + /** + * Hook that gets executed before the suite starts + * @param {Object} suite suite details + */ + // beforeSuite: function (suite) { + // }, + /** + * Function to be executed before a test (in Mocha/Jasmine) starts. + */ + // beforeTest: function (test, context) { + // }, + /** + * Hook that gets executed _before_ a hook within the suite starts (e.g. runs before calling + * beforeEach in Mocha) + */ + // beforeHook: function (test, context) { + // }, + /** + * Hook that gets executed _after_ a hook within the suite starts (e.g. runs after calling + * afterEach in Mocha) + */ + // afterHook: function (test, context, { error, result, duration, passed, retries }) { + // }, + /** + * Function to be executed after a test (in Mocha/Jasmine only) + * @param {Object} test test object + * @param {Object} context scope object the test was executed with + * @param {Error} result.error error object in case the test fails, otherwise `undefined` + * @param {Any} result.result return object of test function + * @param {Number} result.duration duration of test + * @param {Boolean} result.passed true if test has passed, otherwise false + * @param {Object} result.retries informations to spec related retries, e.g. `{ attempts: 0, limit: 0 }` + */ + // afterTest: function(test, context, { error, result, duration, passed, retries }) { + // }, + + + /** + * Hook that gets executed after the suite has ended + * @param {Object} suite suite details + */ + // afterSuite: function (suite) { + // }, + /** + * Runs after a WebdriverIO command gets executed + * @param {String} commandName hook command name + * @param {Array} args arguments that command would receive + * @param {Number} result 0 - command success, 1 - command error + * @param {Object} error error object if any + */ + // afterCommand: function (commandName, args, result, error) { + // }, + /** + * Gets executed after all tests are done. You still have access to all global variables from + * the test. + * @param {Number} result 0 - test pass, 1 - test fail + * @param {Array.<Object>} capabilities list of capabilities details + * @param {Array.<String>} specs List of spec file paths that ran + */ + // after: function (result, capabilities, specs) { + // }, + /** + * Gets executed right after terminating the webdriver session. + * @param {Object} config wdio configuration object + * @param {Array.<Object>} capabilities list of capabilities details + * @param {Array.<String>} specs List of spec file paths that ran + */ + // afterSession: function (config, capabilities, specs) { + // }, + /** + * Gets executed after all workers got shut down and the process is about to exit. An error + * thrown in the onComplete hook will result in the test run failing. + * @param {Object} exitCode 0 - success, 1 - fail + * @param {Object} config wdio configuration object + * @param {Array.<Object>} capabilities list of capabilities details + * @param {<Object>} results object containing test results + */ + // onComplete: function(exitCode, config, capabilities, results) { + // }, + /** + * Gets executed when a refresh happens. + * @param {String} oldSessionId session ID of the old session + * @param {String} newSessionId session ID of the new session + */ + // onReload: function(oldSessionId, newSessionId) { + // } +} -- GitLab From d1dbb22f4cc0222b2bb9f48ca7d5018a78fd771a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 13 Apr 2023 16:45:00 +0200 Subject: [PATCH 03/25] test(e2e): add headless parameter to wdio configuration refs #618 --- wdio.conf.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wdio.conf.ts b/wdio.conf.ts index a891a4ab4..e17de0a7e 100644 --- a/wdio.conf.ts +++ b/wdio.conf.ts @@ -62,7 +62,10 @@ export const config: Options.Testrunner = { // https://saucelabs.com/platform/platform-configurator // capabilities: [{ - + 'goog:chromeOptions': { + args: ['--headless'], + }, + // maxInstances can get overwritten per capability. So if you have an in-house Selenium // grid with only 5 firefox instances available you can make sure that not more than // 5 instances get started at a time. -- GitLab From 9cf7d68d0b91a24eb9d8c12ec3aac9a97ea72ca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 14 Apr 2023 08:44:44 +0200 Subject: [PATCH 04/25] test(e2e): install jscodeshift @wdio/codemod refs #618 --- package-lock.json | 3912 +++++++++++++++++++++++++++++++++++++++++++-- package.json | 4 +- 2 files changed, 3776 insertions(+), 140 deletions(-) diff --git a/package-lock.json b/package-lock.json index cfb1cdd76..98cf0980e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,7 @@ "@ngx-matomo/tracker": "^3.0.0", "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", + "@wdio/codemod": "^0.12.0", "angular2-hotkeys": "^13.1.0", "chartjs-plugin-zoom": "^2.0.0", "core-js": "^3.23.3", @@ -33,6 +34,7 @@ "he": "^1.2.0", "http-server": "^14.1.1", "jalhyd": "file:./jalhyd", + "jscodeshift": "^0.14.0", "katex": "^0.16.0", "material-design-icons": "^3.0.1", "mathjax": "^3.2.2", @@ -950,9 +952,9 @@ "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==" }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -1080,16 +1082,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", - "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", + "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" }, "engines": { @@ -1158,12 +1161,25 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name/node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -1181,11 +1197,11 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -1203,18 +1219,31 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -1257,15 +1286,29 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers/node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -1321,9 +1364,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", "engines": { "node": ">=6.9.0" } @@ -1369,9 +1412,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1701,6 +1744,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.21.4.tgz", + "integrity": "sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", @@ -1726,6 +1783,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", + "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -1820,6 +1891,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", + "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", @@ -1972,6 +2057,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz", + "integrity": "sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-flow": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.18.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", @@ -2046,13 +2146,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", + "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -2292,6 +2392,23 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz", + "integrity": "sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", @@ -2417,6 +2534,22 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/preset-flow": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.21.4.tgz", + "integrity": "sha512-F24cSq4DIBmhq4OzK3dE63NHagb27OPE3eWR+HLekt4Z3Y5MzIIUGF3LlLgV0gN8vzbDViSY7HnrReNVCJXTeA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-transform-flow-strip-types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", @@ -2432,6 +2565,136 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-typescript": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz", + "integrity": "sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-syntax-jsx": "^7.21.4", + "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@babel/plugin-transform-typescript": "^7.21.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.21.0.tgz", + "integrity": "sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==", + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/register/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/@babel/runtime": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", @@ -2457,18 +2720,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", + "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", + "@babel/parser": "^7.21.4", + "@babel/types": "^7.21.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2477,12 +2740,13 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", + "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", "dependencies": { - "@babel/types": "^7.20.2", + "@babel/types": "^7.21.4", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -2490,9 +2754,9 @@ } }, "node_modules/@babel/traverse/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -2503,9 +2767,9 @@ } }, "node_modules/@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", + "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -5225,6 +5489,278 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@wdio/codemod": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@wdio/codemod/-/codemod-0.12.0.tgz", + "integrity": "sha512-OJKr096kz1QbxpbVhwWY/pijBIO5mgj4ZxZhKB5EMXKUYnRXsZukxFCDErbnUv++mgfOAH9EvC1msprjBVfEMg==", + "dependencies": { + "camelcase": "^6.3.0", + "jscodeshift": "^0.13.1", + "lodash.flattendeep": "^4.4.0", + "param-case": "^3.0.4" + } + }, + "node_modules/@wdio/codemod/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@wdio/codemod/node_modules/ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@wdio/codemod/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wdio/codemod/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/codemod/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@wdio/codemod/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@wdio/codemod/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@wdio/codemod/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/jscodeshift": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", + "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", + "dependencies": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^3.1.10", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.20.4", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/@wdio/codemod/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/recast": { + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", + "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", + "dependencies": { + "ast-types": "0.14.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@wdio/codemod/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@wdio/codemod/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wdio/codemod/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@wdio/config": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.8.0.tgz", @@ -6262,6 +6798,30 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -6311,6 +6871,14 @@ "node": ">=0.10.0" } }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array.prototype.flat": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", @@ -6431,6 +6999,14 @@ "node": ">=0.8" } }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ast-transform": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", @@ -6512,6 +7088,17 @@ "node": ">= 4.0.0" } }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.13", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", @@ -6593,6 +7180,14 @@ "ast-types-flow": "0.0.7" } }, + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/babel-loader": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", @@ -6688,11 +7283,39 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/base-64": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==" }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -7455,6 +8078,25 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -7840,6 +8482,96 @@ "node": ">=8" } }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -8055,6 +8787,18 @@ "node": ">=0.8.0" } }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -8141,6 +8885,11 @@ "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==", "dev": true }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "node_modules/compress-commons": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", @@ -8360,6 +9109,14 @@ "url": "https://github.com/sponsors/mesqueeb" } }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/copy-webpack-plugin": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", @@ -9649,6 +10406,14 @@ "node": ">=0.10.0" } }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -9745,6 +10510,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/del": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", @@ -10249,6 +11026,15 @@ "dottojs": "bin/dot-packer" } }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/dotenv": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", @@ -12085,6 +12871,131 @@ "node": ">= 0.8.0" } }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/expect": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", @@ -12230,6 +13141,18 @@ "optional": true, "peer": true }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -12265,6 +13188,54 @@ "node": ">=0.6.0" } }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -12569,6 +13540,14 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "node_modules/flow-parser": { + "version": "0.203.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.203.1.tgz", + "integrity": "sha512-Nw2M8MPP/Zb+yhvmPDEjzkCXLtgyWGKXZjAYOVftm+wIf3xd4FKa7nRI9v67rODs0WzxMbPc8IPs/7o/dyxo/Q==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", @@ -12597,6 +13576,14 @@ "is-callable": "^1.1.3" } }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -12658,6 +13645,17 @@ "url": "https://www.patreon.com/infusion" } }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -12859,6 +13857,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -13310,6 +14316,64 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/hdr-histogram-js": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", @@ -14014,6 +15078,17 @@ "node": ">= 0.10" } }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -14088,6 +15163,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -14123,6 +15203,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -14138,6 +15229,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -14152,6 +15256,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -14304,14 +15419,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-plain-object/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -14478,6 +15585,14 @@ "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -14525,6 +15640,14 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -15264,6 +16387,102 @@ "optional": true, "peer": true }, + "node_modules/jscodeshift": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", + "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "dependencies": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.21.0", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/jscodeshift/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jscodeshift/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jscodeshift/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jscodeshift/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jscodeshift/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jscodeshift/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jsdoc-type-pratt-parser": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", @@ -15777,8 +16996,7 @@ "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", @@ -15908,6 +17126,14 @@ "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", "dev": true }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -16009,6 +17235,14 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -16024,6 +17258,17 @@ "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", "dev": true }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/marked": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.2.tgz", @@ -16393,6 +17638,18 @@ "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", "dev": true }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -16496,6 +17753,27 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -16636,6 +17914,15 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "optional": true }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node_modules/node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", @@ -16643,6 +17930,37 @@ "dev": true, "optional": true }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-dir/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/node-dir/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -17040,6 +18358,84 @@ "node": ">=0.10.0" } }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -17073,6 +18469,17 @@ "node": ">= 0.4" } }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", @@ -17091,6 +18498,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object.values": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", @@ -17498,6 +18916,15 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -17609,6 +19036,14 @@ "node": ">= 0.8" } }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -17798,6 +19233,14 @@ "node": ">=0.10.0" } }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "engines": { + "node": ">= 6" + } + }, "node_modules/piscina": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", @@ -17873,6 +19316,14 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss": { "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", @@ -19501,6 +20952,39 @@ "node": ">=8.10.0" } }, + "node_modules/recast": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", + "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", + "dependencies": { + "ast-types": "0.15.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/ast-types": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/recast/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/recursive-readdir": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", @@ -19569,6 +21053,18 @@ "@babel/runtime": "^7.8.4" } }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/regex-parser": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", @@ -19643,6 +21139,22 @@ "jsesc": "bin/jsesc" } }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/replace-in-file": { "version": "6.3.5", "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz", @@ -19926,6 +21438,12 @@ "node": ">=8" } }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, "node_modules/resolve-url-loader": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", @@ -19998,6 +21516,14 @@ "node": ">=8" } }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -20151,6 +21677,14 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dependencies": { + "ret": "~0.1.10" + } + }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -20700,6 +22234,39 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "devOptional": true }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -20868,6 +22435,186 @@ "npm": ">= 3.0.0" } }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -20942,6 +22689,19 @@ "webpack": "^5.72.1" } }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -20959,6 +22719,12 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -21049,6 +22815,17 @@ "node": "*" } }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -21234,6 +23011,94 @@ "node": ">= 0.8.0" } }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/static-module": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", @@ -21785,6 +23650,17 @@ } } }, + "node_modules/temp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "dependencies": { + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -21795,6 +23671,56 @@ "fs-extra": "^10.0.0" } }, + "node_modules/temp/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/temp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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" + } + }, + "node_modules/temp/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/temp/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/terser": { "version": "5.14.2", "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", @@ -22021,6 +23947,28 @@ "node": ">=4" } }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -22030,6 +23978,20 @@ "node": ">=6" } }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -22580,6 +24542,28 @@ "node": ">= 0.8.0" } }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -22619,6 +24603,50 @@ "node": ">= 0.8" } }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", @@ -22652,6 +24680,12 @@ "punycode": "^2.1.0" } }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, "node_modules/url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", @@ -22669,6 +24703,14 @@ "node": ">=4" } }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/utf8-byte-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", @@ -23896,6 +25938,16 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "node_modules/ws": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", @@ -24751,9 +26803,9 @@ "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==" }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", "requires": { "@babel/highlight": "^7.18.6" } @@ -24850,16 +26902,17 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", - "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", + "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" } }, @@ -24906,12 +26959,24 @@ } }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "dependencies": { + "@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + } } }, "@babel/helper-hoist-variables": { @@ -24923,11 +26988,11 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "requires": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.21.0" } }, "@babel/helper-module-imports": { @@ -24939,18 +27004,30 @@ } }, "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" + }, + "dependencies": { + "@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + } } }, "@babel/helper-optimise-call-expression": { @@ -24978,15 +27055,28 @@ } }, "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "dependencies": { + "@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + } } }, "@babel/helper-simple-access": { @@ -25024,9 +27114,9 @@ "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==" }, "@babel/helper-wrap-function": { "version": "7.19.0", @@ -25060,9 +27150,9 @@ } }, "@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==" + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -25266,6 +27356,14 @@ "@babel/helper-plugin-utils": "^7.8.3" } }, + "@babel/plugin-syntax-flow": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.21.4.tgz", + "integrity": "sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, "@babel/plugin-syntax-import-assertions": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", @@ -25282,6 +27380,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-jsx": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", + "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -25346,6 +27452,14 @@ "@babel/helper-plugin-utils": "^7.14.5" } }, + "@babel/plugin-syntax-typescript": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", + "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, "@babel/plugin-transform-arrow-functions": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", @@ -25438,6 +27552,15 @@ "@babel/helper-plugin-utils": "^7.18.6" } }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz", + "integrity": "sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-flow": "^7.18.6" + } + }, "@babel/plugin-transform-for-of": { "version": "7.18.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", @@ -25482,13 +27605,13 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", + "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" } }, "@babel/plugin-transform-modules-systemjs": { @@ -25631,6 +27754,17 @@ "@babel/helper-plugin-utils": "^7.18.9" } }, + "@babel/plugin-transform-typescript": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz", + "integrity": "sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + } + }, "@babel/plugin-transform-unicode-escapes": { "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", @@ -25737,6 +27871,16 @@ } } }, + "@babel/preset-flow": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.21.4.tgz", + "integrity": "sha512-F24cSq4DIBmhq4OzK3dE63NHagb27OPE3eWR+HLekt4Z3Y5MzIIUGF3LlLgV0gN8vzbDViSY7HnrReNVCJXTeA==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-transform-flow-strip-types": "^7.21.0" + } + }, "@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", @@ -25749,6 +27893,99 @@ "esutils": "^2.0.2" } }, + "@babel/preset-typescript": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz", + "integrity": "sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-syntax-jsx": "^7.21.4", + "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@babel/plugin-transform-typescript": "^7.21.3" + } + }, + "@babel/register": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.21.0.tgz", + "integrity": "sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==", + "requires": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, "@babel/runtime": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", @@ -25768,36 +28005,37 @@ } }, "@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", + "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", + "@babel/parser": "^7.21.4", + "@babel/types": "^7.21.4", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", + "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", "requires": { - "@babel/types": "^7.20.2", + "@babel/types": "^7.21.4", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" } }, "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -25807,9 +28045,9 @@ } }, "@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", + "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -27816,6 +30054,217 @@ } } }, + "@wdio/codemod": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@wdio/codemod/-/codemod-0.12.0.tgz", + "integrity": "sha512-OJKr096kz1QbxpbVhwWY/pijBIO5mgj4ZxZhKB5EMXKUYnRXsZukxFCDErbnUv++mgfOAH9EvC1msprjBVfEMg==", + "requires": { + "camelcase": "^6.3.0", + "jscodeshift": "^0.13.1", + "lodash.flattendeep": "^4.4.0", + "param-case": "^3.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "requires": { + "tslib": "^2.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "jscodeshift": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", + "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", + "requires": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^3.1.10", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.20.4", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "recast": { + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", + "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", + "requires": { + "ast-types": "0.14.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, "@wdio/config": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.8.0.tgz", @@ -28668,6 +31117,21 @@ } } }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -28705,6 +31169,11 @@ "optional": true, "peer": true }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==" + }, "array.prototype.flat": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", @@ -28794,6 +31263,11 @@ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "optional": true }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==" + }, "ast-transform": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", @@ -28858,6 +31332,11 @@ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, "autoprefixer": { "version": "10.4.13", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", @@ -28911,6 +31390,12 @@ "ast-types-flow": "0.0.7" } }, + "babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "requires": {} + }, "babel-loader": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", @@ -28985,6 +31470,30 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, "base-64": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", @@ -29601,6 +32110,22 @@ "unique-filename": "^1.1.1" } }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, "cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -29876,6 +32401,78 @@ "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", "dev": true }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -30036,6 +32633,15 @@ "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==", "dev": true }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -30104,6 +32710,11 @@ "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==", "dev": true }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "compress-commons": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", @@ -30286,6 +32897,11 @@ "is-what": "^3.14.1" } }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==" + }, "copy-webpack-plugin": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", @@ -31288,6 +33904,11 @@ "optional": true, "peer": true }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" + }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -31360,6 +33981,15 @@ "object-keys": "^1.1.1" } }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, "del": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", @@ -31759,6 +34389,15 @@ "integrity": "sha512-/nt74Rm+PcfnirXGEdhZleTwGC2LMnuKTeeTIlI82xb5loBBoXNYzr2ezCroPSMtilK8EZIfcNZwOcHN+ib1Lg==", "dev": true }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "dotenv": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", @@ -33071,6 +35710,107 @@ "optional": true, "peer": true }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, "expect": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", @@ -33192,6 +35932,15 @@ "optional": true, "peer": true }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -33220,6 +35969,44 @@ } } }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, "extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -33474,6 +36261,11 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "flow-parser": { + "version": "0.203.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.203.1.tgz", + "integrity": "sha512-Nw2M8MPP/Zb+yhvmPDEjzkCXLtgyWGKXZjAYOVftm+wIf3xd4FKa7nRI9v67rODs0WzxMbPc8IPs/7o/dyxo/Q==" + }, "follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", @@ -33488,6 +36280,11 @@ "is-callable": "^1.1.3" } }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -33527,6 +36324,14 @@ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "requires": { + "map-cache": "^0.2.2" + } + }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -33673,6 +36478,11 @@ "get-intrinsic": "^1.1.1" } }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==" + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -34025,6 +36835,53 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "hdr-histogram-js": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", @@ -34536,6 +37393,14 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -34589,6 +37454,11 @@ "has-tostringtag": "^1.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -34612,6 +37482,14 @@ "has": "^1.0.3" } }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -34621,11 +37499,29 @@ "has-tostringtag": "^1.0.0" } }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -34727,13 +37623,6 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - } } }, "is-regex": { @@ -34851,6 +37740,11 @@ "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, "is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -34886,6 +37780,11 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -35500,6 +38399,77 @@ "optional": true, "peer": true }, + "jscodeshift": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", + "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "requires": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.21.0", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "jsdoc-type-pratt-parser": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", @@ -35908,8 +38878,7 @@ "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==" }, "lodash.isplainobject": { "version": "4.0.6", @@ -36007,6 +38976,14 @@ "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", "dev": true }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + } + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -36083,6 +39060,11 @@ "ssri": "^9.0.0" } }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -36095,6 +39077,14 @@ "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", "dev": true }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "requires": { + "object-visit": "^1.0.0" + } + }, "marked": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.2.tgz", @@ -36369,6 +39359,15 @@ "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", "dev": true }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -36453,6 +39452,24 @@ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -36561,6 +39578,15 @@ } } }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", @@ -36568,6 +39594,33 @@ "dev": true, "optional": true }, + "node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "requires": { + "minimatch": "^3.0.2" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, "node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -36870,6 +39923,67 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "devOptional": true }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -36891,6 +40005,14 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "requires": { + "isobject": "^3.0.0" + } + }, "object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", @@ -36903,6 +40025,14 @@ "object-keys": "^1.1.1" } }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "requires": { + "isobject": "^3.0.1" + } + }, "object.values": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", @@ -37198,6 +40328,15 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -37291,6 +40430,11 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==" + }, "path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -37432,6 +40576,11 @@ "pinkie": "^2.0.0" } }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" + }, "piscina": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", @@ -37495,6 +40644,11 @@ } } }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==" + }, "postcss": { "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", @@ -38583,6 +41737,32 @@ "picomatch": "^2.2.1" } }, + "recast": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", + "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", + "requires": { + "ast-types": "0.15.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "dependencies": { + "ast-types": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "requires": { + "tslib": "^2.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, "recursive-readdir": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", @@ -38644,6 +41824,15 @@ "@babel/runtime": "^7.8.4" } }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, "regex-parser": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", @@ -38699,6 +41888,16 @@ } } }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" + }, "replace-in-file": { "version": "6.3.5", "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz", @@ -38911,6 +42110,11 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==" + }, "resolve-url-loader": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", @@ -38975,6 +42179,11 @@ "signal-exit": "^3.0.2" } }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, "retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -39088,6 +42297,14 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "requires": { + "ret": "~0.1.10" + } + }, "safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -39521,6 +42738,32 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "devOptional": true }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -39656,6 +42899,151 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -39707,6 +43095,18 @@ "source-map-js": "^1.0.2" } }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -39723,6 +43123,11 @@ } } }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -39806,6 +43211,14 @@ "through": "2" } }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, "split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -39945,6 +43358,76 @@ } } }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, "static-module": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", @@ -40361,6 +43844,54 @@ } } }, + "temp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "requires": { + "rimraf": "~2.6.2" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, "temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -40542,12 +44073,41 @@ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "dev": true }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -40960,6 +44520,24 @@ "qs": "^6.4.0" } }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, "unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -40993,6 +44571,42 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==" + } + } + }, "update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", @@ -41010,6 +44624,11 @@ "punycode": "^2.1.0" } }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==" + }, "url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", @@ -41024,6 +44643,11 @@ "prepend-http": "^2.0.0" } }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, "utf8-byte-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", @@ -41932,6 +45556,16 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "ws": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", diff --git a/package.json b/package.json index 5f9625d2d..faa6dfc19 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "@ngx-matomo/tracker": "^3.0.0", "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", - "ng2-charts": "^4.1.1", + "@wdio/codemod": "^0.12.0", "angular2-hotkeys": "^13.1.0", "chartjs-plugin-zoom": "^2.0.0", "core-js": "^3.23.3", @@ -64,10 +64,12 @@ "he": "^1.2.0", "http-server": "^14.1.1", "jalhyd": "file:./jalhyd", + "jscodeshift": "^0.14.0", "katex": "^0.16.0", "material-design-icons": "^3.0.1", "mathjax": "^3.2.2", "mermaid": "^9.1.3", + "ng2-charts": "^4.1.1", "ngx-markdown": "^14.0.1", "ngx-material-file-input": "^4.0.0", "ngx-webstorage-service": "^5.0.0", -- GitLab From 994f1dcd620f3ae471ac3effdc1f2db6593d3bce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 14 Apr 2023 09:05:32 +0200 Subject: [PATCH 05/25] test(e2e): transform e2e folder refs #618 --- e2e/app.e2e-spec.ts | 3 +- e2e/app.po.ts | 4 +- e2e/bief-empty-fields.e2e-spec.ts | 5 +- e2e/calc-all-examples.e2e-spec.ts | 21 +- e2e/calculate-all-params.e2e-spec.ts | 7 +- e2e/calculate-button-validation.e2e-spec.ts | 69 ++++--- e2e/calculate-linked-params.e2e-spec.ts | 45 +++-- e2e/calculator.po.ts | 179 +++++++++--------- e2e/check-translations.e2e-spec.ts | 9 +- e2e/cloisons.e2e-spec.ts | 13 +- e2e/clone-all-calc.e2e-spec.ts | 7 +- e2e/clone-calc.e2e-spec.ts | 29 ++- e2e/compute-reset-chained-links.e2e-spec.ts | 49 +++-- e2e/cote-amont-aval-bief.e2e-spec.ts | 37 ++-- e2e/courbe-remous-empty-fields.e2e-spec.ts | 5 +- e2e/diagramme-modules.e2e-spec.ts | 13 +- e2e/documentation.e2e-spec.ts | 30 ++- e2e/duplicate-results.e2e-spec.ts | 9 +- e2e/examples-empty-fields.e2e-spec.ts | 61 +++--- e2e/lechapt-calmon.e2e-spec.ts | 21 +- e2e/link-parallel-devices.e2e-spec.ts | 9 +- e2e/link-to-deleted-module.e2e-spec.ts | 25 ++- e2e/linked-parameter-section-type.e2e-spec.ts | 7 +- e2e/list.e2e-spec.ts | 3 +- e2e/list.po.ts | 20 +- e2e/load-linked-params.e2e-spec.ts | 21 +- e2e/load-malformed-files.e2e-spec.ts | 27 ++- e2e/load-save-session.e2e-spec.ts | 59 +++--- e2e/navbar.po.ts | 42 ++-- e2e/navigate-through-calculators.e2e-spec.ts | 3 +- e2e/notes.e2e-spec.ts | 55 +++--- e2e/ouvrages-empty-fields.e2e-spec.ts | 35 ++-- e2e/pab-cloisons-empty-fields.e2e-spec.ts | 19 +- e2e/pab.e2e-spec.ts | 121 ++++++------ e2e/parallel-structures.e2e-spec.ts | 5 +- e2e/predam-empty-fields.e2e-spec.ts | 33 ++-- e2e/predam-log.e2e-spec.ts | 7 +- e2e/preferences.e2e-spec.ts | 23 ++- e2e/preferences.po.ts | 31 ++- e2e/pressure-loss-empty-fields.e2e-spec.ts | 7 +- e2e/pressure-loss.e2e-spec.ts | 15 +- e2e/regime-uniforme-empty-fields.e2e-spec.ts | 5 +- e2e/remous.e2e-spec.ts | 35 ++-- e2e/reset-param-mode.e2e-spec.ts | 39 ++-- e2e/reset-results.e2e-spec.ts | 27 ++- e2e/section-empty-fields.e2e-spec.ts | 5 +- e2e/select-default-value.e2e-spec.ts | 9 +- e2e/sidenav.po.ts | 31 ++- e2e/solveur.e2e-spec.ts | 127 ++++++------- e2e/translation.e2e-spec.ts | 27 ++- e2e/util.po.ts | 12 +- e2e/valeurs-erronees.e2e-spec.ts | 23 ++- e2e/variable-param-cancel.e2e-spec.ts | 7 +- 53 files changed, 734 insertions(+), 796 deletions(-) diff --git a/e2e/app.e2e-spec.ts b/e2e/app.e2e-spec.ts index 660387982..c96c25ca8 100644 --- a/e2e/app.e2e-spec.ts +++ b/e2e/app.e2e-spec.ts @@ -1,5 +1,4 @@ import { AppPage } from "./app.po"; -import { browser } from "protractor"; /** * Start app @@ -13,7 +12,7 @@ describe("ngHyd − start page", () => { it("when app starts, user should be redirected to /list page", async () => { await page.navigateTo(); - const url = await browser.driver.getCurrentUrl(); + const url = await browser.getUrl(); expect(url).toContain("/list"); }); }); diff --git a/e2e/app.po.ts b/e2e/app.po.ts index 308423637..494a18afd 100644 --- a/e2e/app.po.ts +++ b/e2e/app.po.ts @@ -1,7 +1,5 @@ -import { browser } from "protractor"; - export class AppPage { navigateTo() { - return browser.get("/"); + return browser.url("/"); } } diff --git a/e2e/bief-empty-fields.e2e-spec.ts b/e2e/bief-empty-fields.e2e-spec.ts index 391c45238..bf33f257a 100644 --- a/e2e/bief-empty-fields.e2e-spec.ts +++ b/e2e/bief-empty-fields.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; @@ -21,14 +20,14 @@ describe("Check fields are empty in 'up/downstream elevations of a reach' calcul // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("", async () => { // open "up/downstream elevations of a reach" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(21); - await browser.sleep(200); + await browser.pause(200); expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "Long", "YB", "ZF1", "ZF2", "Q", "Z1", "Z2", "Dx"], [true, true, true, true, true, true, true, true, true, true])) diff --git a/e2e/calc-all-examples.e2e-spec.ts b/e2e/calc-all-examples.e2e-spec.ts index 570e5f19c..8f228a167 100644 --- a/e2e/calc-all-examples.e2e-spec.ts +++ b/e2e/calc-all-examples.e2e-spec.ts @@ -1,6 +1,5 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; @@ -31,7 +30,7 @@ describe("ngHyd − example sessions −", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); // for each calculator let lastExampleFound = true; @@ -40,29 +39,29 @@ describe("ngHyd − example sessions −", () => { if (i == 0) { // start page await navbar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); } else { // empty session await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sideNav.clickNewSessionButton(); - await browser.sleep(1000); + await browser.pause(1000); } - const examples = await element.all(by.css("#examples-list .load-example")); - await browser.sleep(200); + const examples = await $$("#examples-list .load-example"); + await browser.pause(200); if (examples.length > i) { // click example #i - await examples[i].click(); - await browser.sleep(200); + await (await examples.i).click(); + await browser.pause(200); const nbModules = await navbar.getCalculatorEntriesCount(); - await browser.sleep(200); + await browser.pause(200); for (let j = 0; j < nbModules; j++) { // select module await navbar.openNthCalculator(j); - await browser.sleep(50); + await browser.pause(50); // calculate module await calcPage.getCalculateButton().click(); // check results diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index f19c2f7d0..83882f4e7 100644 --- a/e2e/calculate-all-params.e2e-spec.ts +++ b/e2e/calculate-all-params.e2e-spec.ts @@ -2,7 +2,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; -import { browser, element, by } from "protractor"; import { testedCalcTypes } from "./tested_calctypes"; import { scrollPageToTop } from "./util.po"; @@ -25,7 +24,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); // increase timeout to avoid "Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL" message jasmine.DEFAULT_TIMEOUT_INTERVAL = 10 * 60 * 1000; // 10 min @@ -63,7 +62,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { if (ct === 30 && i > 0) { // prevents "Element is not clickable at point" await scrollPageToTop(); - const inputLink = element(by.css("#pb-data-results-selector .drs-item a")); + const inputLink = $("#pb-data-results-selector .drs-item a"); await inputLink.click(); } // grab input again because calculating the module just refreshed all the fieldsets @@ -71,7 +70,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { // click "calc" mode button for this parameter await calcPage.setParamMode(input, "cal"); // check that only 1 button is in "calc" state - const nbParamsCalc = await calcPage.getCheckedCalcModeButtons().count(); + const nbParamsCalc = await calcPage.getCheckedCalcModeButtons().length; expect(nbParamsCalc).toBe(1); // check that "compute" button is active const calcButton = await calcPage.checkCalcButtonEnabled(true); diff --git a/e2e/calculate-button-validation.e2e-spec.ts b/e2e/calculate-button-validation.e2e-spec.ts index 0f472f43e..ee17d4f6d 100644 --- a/e2e/calculate-button-validation.e2e-spec.ts +++ b/e2e/calculate-button-validation.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; import { PreferencesPage } from "./preferences.po"; describe("Calculate button - ", () => { @@ -21,46 +20,46 @@ describe("Calculate button - ", () => { await prefPage.navigateTo(); // disable evil option "empty fields on module creation" await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("check button status only depends on calculator (no link between calculators)", async () => { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open PAB: chute calculator await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open PAB: dimensions await listPage.clickMenuEntryForCalcType(5); - await browser.sleep(200); + await browser.pause(200); // fill width field with invalid data const inputW = calcPage.getInputById("W"); - await inputW.clear(); - await browser.sleep(20); - await inputW.sendKeys("-1"); - await browser.sleep(200); + await inputW.clearValue(); + await browser.pause(20); + await inputW.setValue("-1"); + await browser.pause(200); // check that "compute" button is inactive await calcPage.checkCalcButtonEnabled(false); // back to PAB: chute await navBar.clickCalculatorTab(0); - await browser.sleep(200); + await browser.pause(200); // check that "compute" button is active await calcPage.checkCalcButtonEnabled(true); // back to PAB: dimensions await navBar.clickCalculatorTab(1); - await browser.sleep(200); + await browser.pause(200); // check that "compute" button is inactive await calcPage.checkCalcButtonEnabled(false); @@ -70,25 +69,25 @@ describe("Calculate button - ", () => { it("invalid data in Q input", async () => { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open prébarrages calculator await listPage.clickMenuEntryForCalcType(30); - await browser.sleep(200); + await browser.pause(200); // Q input - const inputQ = element(by.id("Q")); - await inputQ.clear(); - await browser.sleep(200); - await inputQ.sendKeys("-1"); - await browser.sleep(200); + const inputQ = $("#Q"); + await inputQ.clearValue(); + await browser.pause(200); + await inputQ.setValue("-1"); + await browser.pause(200); await calcPage.checkCalcButtonEnabled(false); // upstream item // look for g element with id starting by "flowchart-amont-" // Mermaid changed the way ids are generated, it preprends "flowchart-" and appends a number to the id given in the graph description - const upstream = element(by.css("g[id^='flowchart-amont-']")); + const upstream = $("g[id^='flowchart-amont-']"); // should be displayed in error expect(await upstream.getAttribute('class')).toContain("node-highlighted-error"); // upstream item is now selected by default (was 'node-error') }); @@ -96,28 +95,28 @@ describe("Calculate button - ", () => { it("add basin, invalid data in Q input", async () => { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open prébarrages calculator await listPage.clickMenuEntryForCalcType(30); - await browser.sleep(200); + await browser.pause(200); // "add basin" button - const addBasinBtn = element(by.id("add-basin")); + const addBasinBtn = $("#add-basin"); await addBasinBtn.click(); - await browser.sleep(200); + await browser.pause(200); // upstream item - const upstream = element(by.css("g[id^='flowchart-amont-']")); // Mermaid generated id + const upstream = $("g[id^='flowchart-amont-']"); // Mermaid generated id await upstream.click(); - await browser.sleep(200); + await browser.pause(200); // invalid data in Q input - const inputQ = element(by.id("Q")); - await inputQ.clear(); - await browser.sleep(200); - await inputQ.sendKeys("-1"); - await browser.sleep(200); + const inputQ = $("#Q"); + await inputQ.clearValue(); + await browser.pause(200); + await inputQ.setValue("-1"); + await browser.pause(200); // calculate button disabled ? await calcPage.checkCalcButtonEnabled(false); @@ -126,10 +125,10 @@ describe("Calculate button - ", () => { expect(await upstream.getAttribute('class')).toContain("node-highlighted-error"); // upstream item is now selected by default (was 'node-error') // valid data in Q input - await inputQ.clear(); - await browser.sleep(200); - await inputQ.sendKeys("1"); - await browser.sleep(200); + await inputQ.clearValue(); + await browser.pause(200); + await inputQ.setValue("1"); + await browser.pause(200); // calculate button still disabled ? (the basin is not connected to anything) await calcPage.checkCalcButtonEnabled(false); diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts index f87d9b168..0f26d5a0d 100644 --- a/e2e/calculate-linked-params.e2e-spec.ts +++ b/e2e/calculate-linked-params.e2e-spec.ts @@ -2,7 +2,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; -import { browser, by } from "protractor"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue } from "./util.po"; @@ -40,7 +39,7 @@ describe("ngHyd − calculate with linked parameters", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); async function computeAndCheckPresenceOfResults() { @@ -231,12 +230,12 @@ describe("ngHyd − calculate with linked parameters", () => { // load session file await navBar.clickNewCalculatorButton(); await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-multivar-link.json"); - await browser.sleep(500); - expect(await navBar.getAllCalculatorTabs().count()).toBe(2); + await browser.pause(500); + expect(await navBar.getAllCalculatorTabs().length).toBe(2); // calculate await navBar.clickCalculatorTab(0); @@ -249,16 +248,16 @@ describe("ngHyd − calculate with linked parameters", () => { // check that there are 6 parameters columns in the variated results table : // Q, Z2, Z1, + 4 for device #1 - expect(await calcPage.getAllVariatedResultsTableHeaders().count()).toBe(7); + expect(await calcPage.getAllVariatedResultsTableHeaders().length).toBe(7); // check that number of rows in the variated results table equals number of variated values const varRows = calcPage.getAllVariatedResultsRows(); - const nbRows = await varRows.count(); + const nbRows = await varRows.length; expect(nbRows).toBe(191); // boundaries are included // check that all parameters have values for all iterations (Z2 might miss some if repeat strategy is not applied) const lastRow = varRows.get(nbRows - 1); - const tds = await lastRow.all(by.css("td")); + const tds = await lastRow.$$("td"); tds.forEach((td) => { expect(td.getText()).not.toBe(""); }); @@ -268,16 +267,16 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); // load session await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-pab-chain-nghyd-329.json"); - await browser.sleep(200); - expect(await navBar.getAllCalculatorTabs().count()).toBe(3); + await browser.pause(200); + expect(await navBar.getAllCalculatorTabs().length).toBe(3); // calculate PAB-Dimensions await navBar.clickCalculatorTab(2); - await browser.sleep(200); + await browser.pause(200); // click "compute" button const calcButton = calcPage.getCalculateButton(); await calcButton.click(); @@ -293,11 +292,11 @@ describe("ngHyd − calculate with linked parameters", () => { // click PAB-Nombre tab await navBar.clickCalculatorTab(0); - await browser.sleep(200); + await browser.pause(200); // go back to PAB-Dimensions await navBar.clickCalculatorTab(2); - await browser.sleep(200); + await browser.pause(200); // check that ERR is not present in Volume line of results table frt = calcPage.getFixedResultsTable(); @@ -310,9 +309,9 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − a link target parameter should not be able to link to another parameter", async () => { // create 1st PAB-Chute await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // upstream water level should not have link mode (only one calculator) const Z1_1 = calcPage.getInputById("Z1"); @@ -320,20 +319,20 @@ describe("ngHyd − calculate with linked parameters", () => { // create 2nd PAB-Chute await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // back to 1st calculator await navBar.clickCalculatorTab(0); - await browser.sleep(200); + await browser.pause(200); // upstream water level should have link mode (now there are 2 calculators) expect(await calcPage.inputHasLinkModeButton(Z1_1)).toBe(true); // back to 2nd calculator await navBar.clickCalculatorTab(1); - await browser.sleep(200); + await browser.pause(200); // link upstream water level in 2nd calculator to upstream water level in 1st one const Z1_2 = calcPage.getInputById("Z1"); @@ -341,7 +340,7 @@ describe("ngHyd − calculate with linked parameters", () => { // back to 1st calculator await navBar.clickCalculatorTab(0); - await browser.sleep(200); + await browser.pause(200); // upstream water level should not have link mode (already a link target) expect(await calcPage.inputHasLinkModeButton(Z1_1)).toBe(false); diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index d7552190a..7e2074d14 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -1,14 +1,13 @@ -import { by, element, ElementFinder, browser, protractor, ElementArrayFinder, Key } from "protractor"; import { scrollPageToTop, scrollToElement } from "./util.po"; export class CalculatorPage { getInputLabels() { - return element.all(by.css("ngparam-input input:not([disabled]) label")); + return $$("ngparam-input input:not([disabled]) label"); } getParamInputs() { - return element.all(by.css("ngparam-input input.form-control")); + return $$("ngparam-input input.form-control"); } async getParamInputsHavingCalcMode() { @@ -23,28 +22,28 @@ export class CalculatorPage { } getHeader1() { - return element(by.css("h1")); + return $("h1"); } /** * return all selects in the calculator which id is in the form "select_*" */ getAllCalculatorSelects(): ElementArrayFinder { - return element.all(by.css("mat-select[id^=select_]")); // all mat-select with id starting with "select_" + return $$("mat-select[id^=select_]"); // all mat-select with id starting with "select_" } /** * get the option count of a select */ async getMatselectOptionCount(select: string | ElementFinder) { - const sel = select instanceof ElementFinder ? select : element(by.id(select)); + const sel = select instanceof ElementFinder ? select : $(`#${select}`); await scrollToElement(sel); - if (await sel.isPresent() && await sel.isDisplayed()) { + if ((await sel.isExisting()) && (await sel.isDisplayed())) { await sel.click(); - const options = element.all(by.css(".cdk-overlay-container mat-option")); - await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown - return await options.count(); + const options = $$(".cdk-overlay-container mat-option"); + // FIXME>>>>await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown + return await options.length; } } @@ -52,19 +51,19 @@ export class CalculatorPage { * get the text of the all given select options */ async getMatselectOptionsText(select: string | ElementFinder): Promise<string[]> { - const sel = select instanceof ElementFinder ? select : element(by.id(select)); + const sel = select instanceof ElementFinder ? select : $(`#${select}`); await scrollToElement(sel); - if (await sel.isPresent() && await sel.isDisplayed()) { + if ((await sel.isExisting()) && (await sel.isDisplayed())) { await sel.click(); - const options = element.all(by.css(".cdk-overlay-container mat-option span")); + const options = $$(".cdk-overlay-container mat-option span"); let res = []; - const nopt = await options.count(); + const nopt = await options.length; for (let o = 0; o < nopt; o++) { const opt = options.get(o); res.push(await opt.getText()) } - await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown + // FIXME>>>>await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown return res; } @@ -75,7 +74,7 @@ export class CalculatorPage { */ async getSelectCurrentOption(select: ElementFinder): Promise<ElementFinder> { const id = await select.getAttribute("id"); - return element(by.css("mat-select#" + id + " div[id^=mat-select-value-]")) + return $("mat-select#" + id + " div[id^=mat-select-value-]"); } /** @@ -83,25 +82,25 @@ export class CalculatorPage { */ async getMatselectCurrentOptionText(select: ElementFinder): Promise<string> { const currentOption = await this.getSelectCurrentOption(select); - return await currentOption.element(by.css("span span")).getText(); + return await currentOption.$("span span").getText(); } getSelectById(id: string) { - return element(by.id(id)); + return $(`#${id}`); } async isMatSelectPresent(id: string) { - const sel: ElementFinder = element(by.css("mat-select#" + id)); - return await sel.isPresent(); + const sel: ElementFinder = $("mat-select#" + id); + return await sel.isExisting(); } async getSelectValueText(select: ElementFinder) { - return await select.element(by.css(".mat-select-value-text > span")).getText(); + return await select.$(".mat-select-value-text > span").getText(); } async isSelectEmpty(select: ElementFinder) { try { - const text = select.element(by.css(".mat-select-value-text > span")); + const text = select.$(".mat-select-value-text > span"); await text.getAttribute("outerHTML"); // await anything trigger the error return false; } catch (e) { // should be NoSuchElementError @@ -110,51 +109,51 @@ export class CalculatorPage { } getInputById(id: string) { - return element(by.id(id)); + return $(`#${id}`); } getSaveSessionButton() { - return element(by.css("dialog-save-session button[type=submit]")); + return $("dialog-save-session button[type=submit]"); } getCalculateButton() { - return element(by.css("button#trigger-calculate")); + return $("button#trigger-calculate"); } getGeneratePabButton() { - return element(by.css("button#generate-pab")); + return $("button#generate-pab"); } getCheckedCalcModeButtons() { - return element.all(by.css(`mat-button-toggle.radio_cal[ng-reflect-checked="true"]`)); + return $$(`mat-button-toggle.radio_cal[ng-reflect-checked="true"]`); } getAddStructureButton() { - return element(by.css("fieldset-container.structure-fieldsetcontainer .hyd-window-btns button.add-structure")); + return $("structure-fieldset-container .hyd-window-btns button.add-structure"); } getCopyStructureButton() { - return element(by.css("fieldset-container.structure-fieldsetcontainer .hyd-window-btns button.copy-structure")); + return $("structure-fieldset-container .hyd-window-btns button.copy-structure"); } getAllLinkButtons() { - return element.all(by.css("mat-button-toggle.radio_link")); + return $$("mat-button-toggle.radio_link"); } getPabResultsTable() { - return element(by.css(".pab-results-table-inner-container table")); + return $(".pab-results-table-inner-container table"); } getVariatedResultsTable() { - return element(by.css(".var-results-inner-container table")); + return $(".var-results-inner-container table"); } getAllVariatedResultsTableHeaders() { - return element.all(by.css("fixedvar-results var-results table thead th")); + return $$("fixedvar-results var-results table thead th"); } getAllVariatedResultsRows() { - return element.all(by.css("fixedvar-results var-results table tbody tr")); + return $$("fixedvar-results var-results table tbody tr"); } // scrollTo(elt: ElementFinder) { @@ -164,42 +163,42 @@ export class CalculatorPage { // } getFixedResultsTable() { - return element(by.css(".fixed-results-inner-container table")); + return $(".fixed-results-inner-container table"); } getAllFixedResultsRows() { - return element.all(by.css("fixed-results table tbody tr")); + return $$("fixed-results table tbody tr"); } /** return nth <tr> of given <table>, starting at 1 */ getNthRow(table: ElementFinder, n: number) { - return table.element(by.css("tbody > tr:nth-of-type(" + n + ")")); + return table.$("tbody > tr:nth-of-type(" + n + ")"); } /** return nth <td> of given <tr>, starting at 1 */ getNthColumn(tr: ElementFinder, n: number) { - return tr.element(by.css("td:nth-of-type(" + n + ")")); + return tr.$("td:nth-of-type(" + n + ")"); } async isNgParamPresent(id: string) { - const inp: ElementFinder = element(by.css("ngparam-input input#" + id)); - return await inp.isPresent(); + const inp: ElementFinder = $("ngparam-input input#" + id); + return await inp.isExisting(); } async inputHasCalcModeButton(input: ElementFinder) { // get parent (div.container) const container = await this.findParentContainer(input); // find radio buttons - const button: ElementFinder = container.element(by.css("mat-button-toggle.radio_cal > button")); - return await button.isPresent(); + const button: ElementFinder = container.$("mat-button-toggle.radio_cal > button"); + return await button.isExisting(); } async inputHasLinkModeButton(input: ElementFinder) { // get parent (div.container) const container = await this.findParentContainer(input); // find radio buttons - const button: ElementFinder = container.element(by.css("mat-button-toggle.radio_link > button")); - return await button.isPresent(); + const button: ElementFinder = container.$("mat-button-toggle.radio_link > button"); + return await button.isExisting(); } /** @@ -209,8 +208,8 @@ export class CalculatorPage { // get parent (div.container) const container = await this.findParentContainer(input); // find fixed radio button - const button: ElementFinder = container.element(by.css("mat-button-toggle.radio_fix")); - return await button.getAttribute("ng-reflect-checked") === "true"; + const button: ElementFinder = container.$("mat-button-toggle.radio_fix"); + return (await button.getAttribute("ng-reflect-checked")) === "true"; } /** @@ -220,8 +219,8 @@ export class CalculatorPage { // get parent (div.container) const container = await this.findParentContainer(input); // find calc radio button - const button: ElementFinder = container.element(by.css("mat-button-toggle.radio_cal")); - return await button.getAttribute("ng-reflect-checked") === "true"; + const button: ElementFinder = container.$("mat-button-toggle.radio_cal"); + return (await button.getAttribute("ng-reflect-checked")) === "true"; } /** @@ -231,33 +230,29 @@ export class CalculatorPage { // get parent (div.container) const container = await this.findParentContainer(input); // find calc radio button - const button: ElementFinder = container.element(by.css("mat-button-toggle.radio_link")); - return await button.getAttribute("ng-reflect-checked") === "true"; + const button: ElementFinder = container.$("mat-button-toggle.radio_link"); + return (await button.getAttribute("ng-reflect-checked")) === "true"; } async hasResults() { - return ( - await this.presentAndVisible("fixedvar-results fixed-results > .fixed-results-container") - || - await this.presentAndVisible("fixedvar-results results-chart > chart-results-container") - || - await this.presentAndVisible("section-results fixed-results > .fixed-results-container") - || - await this.presentAndVisible("remous-results #main-chart") - || - await this.presentAndVisible("pab-results pab-results-table") - || - await this.presentAndVisible("pb-results pb-results-table") - || - await this.presentAndVisible("macrorugo-compound-results macrorugo-compound-results-table") - || - await this.presentAndVisible("jet-results .fixed-results-container") - ); + return ((await this.presentAndVisible("fixedvar-results fixed-results > .fixed-results-container")) + || + (await this.presentAndVisible("fixedvar-results results-chart > chart-results-container")) + || + (await this.presentAndVisible("section-results fixed-results > .fixed-results-container")) + || + (await this.presentAndVisible("remous-results #main-chart")) + || + (await this.presentAndVisible("pab-results pab-results-table")) + || + (await this.presentAndVisible("pb-results pb-results-table")) + || + (await this.presentAndVisible("macrorugo-compound-results macrorugo-compound-results-table")) || (await this.presentAndVisible("jet-results .fixed-results-container"))); } async presentAndVisible(selector: string): Promise<boolean> { - const elt = element(by.css(selector)); - return await elt.isPresent() && await elt.isDisplayed(); + const elt = $(selector); + return (await elt.isExisting()) && (await elt.isDisplayed()); } /** @@ -274,13 +269,13 @@ export class CalculatorPage { invalidValues.push(""); } - const nbCols = await table.all(by.css("thead th")).count(); - const rows = await table.all(by.css("tbody tr")); + const nbCols = await table.$$("thead th").length; + const rows = await table.$$("tbody tr"); for (const row of rows) { for (let i = 0; i < nbCols; i++) { // get i_th column of n_th row - const val = await row.element(by.css("td:nth-of-type(" + (i + 1) + ")")).getText(); + const val = await row.$("td:nth-of-type(" + (i + 1) + ")").getText(); // console.log(`TABLE VAL ${n}/${i}=>`, val); ok = ok && !invalidValues.includes(val); } @@ -299,38 +294,38 @@ export class CalculatorPage { ok = true; // check fixed results const frt = this.getFixedResultsTable(); - if (await frt.isPresent() && await frt.isDisplayed()) { - ok = ok && await this.allRowsHaveValidResults(frt); + if ((await frt.isExisting()) && (await frt.isDisplayed())) { + ok = ok && (await this.allRowsHaveValidResults(frt)); } // check variated results const vrt = this.getVariatedResultsTable(); - if (await vrt.isPresent() && await vrt.isDisplayed()) { - ok = ok && await this.allRowsHaveValidResults(vrt); + if ((await vrt.isExisting()) && (await vrt.isDisplayed())) { + ok = ok && (await this.allRowsHaveValidResults(vrt)); } // check PAB results const prt = this.getPabResultsTable(); - if (await prt.isPresent() && await prt.isDisplayed()) { - ok = ok && await this.allRowsHaveValidResults(prt, true); + if ((await prt.isExisting()) && (await prt.isDisplayed())) { + ok = ok && (await this.allRowsHaveValidResults(prt, true)); } } return ok; } async hasLog() { - return await this.nbLogEntries() > 0; + return (await this.nbLogEntries()) > 0; } async nbLogEntries() { - return await element.all(by.css("log-entry")).count(); + return await $$("log-entry").length; } async clickSaveCalcButton() { await scrollPageToTop(); - return await element(by.css("#save-calc")).click(); + return await $("#save-calc").click(); } async clickCloneCalcButton() { - const cloneButton = element(by.css("#clone-calc")); + const cloneButton = $("#clone-calc"); return await cloneButton.click(); } @@ -344,8 +339,8 @@ export class CalculatorPage { // find parent element of elt having class "container" async findParentContainer(elt: ElementFinder): Promise<ElementFinder> { let i = 8; // garde fous - while ((await elt.getAttribute("class") !== "container") && (i >= 0)) { - elt = elt.element(by.xpath("..")); + while (((await elt.getAttribute("class")) !== "container") && (i >= 0)) { + elt = elt.$(".."); i--; } return elt; @@ -359,15 +354,15 @@ export class CalculatorPage { // get parent (div.container) const container = await this.findParentContainer(elt); // find radio buttons - const button = container.element(by.css("mat-button-toggle.radio_" + mode + " > button")); + const button = container.$("mat-button-toggle.radio_" + mode + " > button"); await scrollPageToTop(); // sometimes button slides behind navbar and click() fails await button.click(); // for "var" mode, close the modal if (mode === "var") { - await browser.sleep(500); // wait for the modal to appear + await browser.pause(500); // wait for the modal to appear //await element(by.css("dialog-edit-param-values .mat-dialog-actions button")).click(); // clique "annuler" et non "valider" : - await element(by.css("dialog-edit-param-values .mat-dialog-actions button.mat-warn")).click(); - await browser.sleep(500); // wait for the navbar to reappear after modal dismissal + await $("dialog-edit-param-values .mat-dialog-actions button.mat-warn").click(); + await browser.pause(500); // wait for the navbar to reappear after modal dismissal } } @@ -378,7 +373,7 @@ export class CalculatorPage { // get parent (div.container) const container = await this.findParentContainer(elt) as ElementFinder; // find <select> - const select = container.element(by.css("param-link mat-select")); + const select = container.$("param-link mat-select"); return select; } @@ -414,8 +409,8 @@ export class CalculatorPage { if (!hasDot && !hasExponent && !isN) { keys = "." + keys; } - if (!isOb && await i.getAttribute("disabled") === null) { - await i.sendKeys(keys); + if (!isOb && (await i.getAttribute("disabled")) === null) { + await i.setValue(keys); } } }); @@ -456,7 +451,7 @@ export class CalculatorPage { * get help button related to calculator */ getCalculatorHelpButton() { - return element(by.css("#help-calc")); + return $("#help-calc"); } /** diff --git a/e2e/check-translations.e2e-spec.ts b/e2e/check-translations.e2e-spec.ts index df1c7282e..cd0493c6f 100644 --- a/e2e/check-translations.e2e-spec.ts +++ b/e2e/check-translations.e2e-spec.ts @@ -2,7 +2,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; -import { browser } from "protractor"; import { SideNav } from "./sidenav.po"; import { testedCalcTypes } from "./tested_calctypes"; @@ -39,7 +38,7 @@ describe("ngHyd − check translation of all calculators", () => { beforeAll(async () => { await prefPage.navigateTo(); await prefPage.changeLanguage(i); - await browser.sleep(200); + await browser.pause(200); await navBar.clickNewCalculatorButton(); }); @@ -78,13 +77,13 @@ describe("ngHyd − check translation of all calculators", () => { } // check absence of "*** message not found" in whole DOM - expect(await browser.getPageSource()).not.toContain("*** message not found", "missing translations found"); + expect(await browser.getSource()).not.toContain("*** message not found", "missing translations found"); // empty session await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sideNav.clickNewSessionButton(); - browser.sleep(200); + browser.pause(200); }); } }); diff --git a/e2e/cloisons.e2e-spec.ts b/e2e/cloisons.e2e-spec.ts index f08cac6a0..f372175d1 100644 --- a/e2e/cloisons.e2e-spec.ts +++ b/e2e/cloisons.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; -import { browser } from "protractor"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue } from "./util.po"; @@ -25,7 +24,7 @@ describe("ngHyd − cloisons", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when all parent Nub parameters are linked, Structure parameter modes should be alterable without problem", async () => { @@ -33,10 +32,10 @@ describe("ngHyd − cloisons", () => { // 1. create target module for linked parameters await listPage.clickMenuEntryForCalcType(10); // Cloisons - await browser.sleep(300); + await browser.pause(300); // 2. create module to test await calcPage.clickCloneCalcButton(); - await browser.sleep(300); + await browser.pause(300); // 3. link every parameter except Structure ones await calcPage.setParamMode(calcPage.getInputById("calc_Q"), "link"); @@ -45,14 +44,14 @@ describe("ngHyd − cloisons", () => { await calcPage.setParamMode(calcPage.getInputById("BB"), "link"); await calcPage.setParamMode(calcPage.getInputById("PB"), "link"); await calcPage.setParamMode(calcPage.getInputById("DH"), "link"); - await browser.sleep(300); + await browser.pause(300); // 4. change LoiDebit await changeSelectValue(calcPage.getSelectById("select_loidebit"), 1); - await browser.sleep(300); + await browser.pause(300); // 5. check number of inputs in CALC mode - expect(await calcPage.getCheckedCalcModeButtons().count()).toBe(1); + expect(await calcPage.getCheckedCalcModeButtons().length).toBe(1); // 6. try calculating the module await calcPage.getCalculateButton().click(); diff --git a/e2e/clone-all-calc.e2e-spec.ts b/e2e/clone-all-calc.e2e-spec.ts index 9c454e864..f8a588fec 100644 --- a/e2e/clone-all-calc.e2e-spec.ts +++ b/e2e/clone-all-calc.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po"; import { testedCalcTypes } from "./tested_calctypes"; import { scrollPageToTop } from "./util.po"; @@ -26,7 +25,7 @@ describe("ngHyd − clone all calculators with all possible <select> values", () // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); describe("", () => { @@ -56,10 +55,10 @@ describe("ngHyd − clone all calculators with all possible <select> values", () // clone calculator await scrollPageToTop(); await calcPage.clickCloneCalcButton(); - await browser.sleep(300); + await browser.pause(300); // check existence of the cloned module - expect(await navbar.getAllCalculatorTabs().count()).toBe(2); + expect(await navbar.getAllCalculatorTabs().length).toBe(2); // @TODO check <select> values diff --git a/e2e/clone-calc.e2e-spec.ts b/e2e/clone-calc.e2e-spec.ts index 68be69080..1fcb7dd4f 100644 --- a/e2e/clone-calc.e2e-spec.ts +++ b/e2e/clone-calc.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue, scrollPageToTop } from "./util.po"; @@ -25,26 +24,26 @@ describe("ngHyd − clone a calculator", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when cloning a calculator, the clone should have the same values for all parameters", async () => { await navbar.clickNewCalculatorButton(); // 1. create target modules for linked parameter await listPage.clickMenuEntryForCalcType(3); // Régime uniforme - await browser.sleep(500); + await browser.pause(500); const debitRU = calcPage.getInputById("calc_Q"); // "Débit" is calculated by default await calcPage.setParamMode(debitRU, "fix"); - await browser.sleep(500); + await browser.pause(500); await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(4); // Courbe de remous - await browser.sleep(500); + await browser.pause(500); // 2. create source module to clone await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(2); // Section paramétrée - await browser.sleep(500); + await browser.pause(500); // 3. change and store source parameter values const sourceValues = { @@ -52,26 +51,26 @@ describe("ngHyd − clone a calculator", () => { Ks: 42 }; await changeSelectValue(calcPage.getSelectById("select_section"), 3); // mode "parabolique" - await calcPage.getInputById("k").clear(); - await calcPage.getInputById("k").sendKeys(sourceValues["k"]); - await calcPage.getInputById("Ks").clear(); - await calcPage.getInputById("Ks").sendKeys(sourceValues["Ks"]); + await calcPage.getInputById("k").clearValue(); + await calcPage.getInputById("k").setValue(sourceValues["k"]); + await calcPage.getInputById("Ks").clearValue(); + await calcPage.getInputById("Ks").setValue(sourceValues["Ks"]); // link "Débit" to "Courbe de remous" const debitSP = calcPage.getInputById("Q"); await calcPage.setParamMode(debitSP, "link"); - await browser.sleep(500); + await browser.pause(500); await changeSelectValue(calcPage.getSelectById("linked_Q"), 1); // "Courbe de remous" - await browser.sleep(500); + await browser.pause(500); // otherwise clickCloneCalcButton() fails with "Element is not clickable at point" await scrollPageToTop(); await calcPage.clickCloneCalcButton(); - await browser.sleep(500); + await browser.pause(500); // 4. check existence of the cloned module - expect(await navbar.getAllCalculatorTabs().count()).toBe(4); + expect(await navbar.getAllCalculatorTabs().length).toBe(4); await navbar.clickCalculatorTab(3); // n°3 should be the latest - await browser.sleep(500); + await browser.pause(500); // 5. compare values Object.keys(sourceValues).forEach(async (k) => { diff --git a/e2e/compute-reset-chained-links.e2e-spec.ts b/e2e/compute-reset-chained-links.e2e-spec.ts index 9f402a179..6152104ec 100644 --- a/e2e/compute-reset-chained-links.e2e-spec.ts +++ b/e2e/compute-reset-chained-links.e2e-spec.ts @@ -2,7 +2,6 @@ import { AppPage } from "./app.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; -import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po"; /** @@ -31,12 +30,12 @@ describe("ngHyd − compute then reset chained results − ", () => { // load session file await startPage.navigateTo(); await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-cascade-params.json"); - await browser.sleep(500); - expect(await navbar.getAllCalculatorTabs().count()).toBe(3); + await browser.pause(500); + expect(await navbar.getAllCalculatorTabs().length).toBe(3); // 1. get down-most module await navbar.clickCalculatorTabForUid("Y2l2Y3"); @@ -61,8 +60,8 @@ describe("ngHyd − compute then reset chained results − ", () => { await navbar.clickCalculatorTabForUid("ZTFxeW"); // modify an input that is not linked - await calcPage.getInputById("Ks").clear(); - await calcPage.getInputById("Ks").sendKeys("42"); + await calcPage.getInputById("Ks").clearValue(); + await calcPage.getInputById("Ks").setValue("42"); // other 2 modules should still have their results for (let i = 1; i < 3; i++) { @@ -75,8 +74,8 @@ describe("ngHyd − compute then reset chained results − ", () => { await navbar.clickCalculatorTabForUid("ZTFxeW"); // modify input that is linked - await calcPage.getInputById("LargeurBerge").clear(); - await calcPage.getInputById("LargeurBerge").sendKeys("2.6"); + await calcPage.getInputById("LargeurBerge").clearValue(); + await calcPage.getInputById("LargeurBerge").setValue("2.6"); // check all 3 modules for absence of results for (let i = 0; i < 3; i++) { @@ -90,12 +89,12 @@ describe("ngHyd − compute then reset chained results − ", () => { // load session file await startPage.navigateTo(); await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-cascade-results.json"); - await browser.sleep(500); - expect(await navbar.getAllCalculatorTabs().count()).toBe(3); + await browser.pause(500); + expect(await navbar.getAllCalculatorTabs().length).toBe(3); // 1. get down-most module (PAB Dimensions) await navbar.clickCalculatorTabForUid("eHh5YX"); @@ -115,8 +114,8 @@ describe("ngHyd − compute then reset chained results − ", () => { await navbar.clickCalculatorTabForUid("MGg5OH"); // modify any input (for ex. "Ks") - await calcPage.getInputById("Ks").clear(); - await calcPage.getInputById("Ks").sendKeys("42"); + await calcPage.getInputById("Ks").clearValue(); + await calcPage.getInputById("Ks").setValue("42"); // check all 3 modules for absence of results for (let i = 0; i < 3; i++) { @@ -130,20 +129,20 @@ describe("ngHyd − compute then reset chained results − ", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); // start page await navbar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // load session file await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-results-invalidation.json"); - await browser.sleep(500); - expect(await navbar.getAllCalculatorTabs().count()).toBe(2); + await browser.pause(500); + expect(await navbar.getAllCalculatorTabs().length).toBe(2); // get down-most module (Ouvrages) await navbar.clickCalculatorTabForUid("amd2OG"); @@ -158,8 +157,8 @@ describe("ngHyd − compute then reset chained results − ", () => { await navbar.clickCalculatorTabForUid("aTgwMm"); // modify an input that is not linked - await calcPage.getInputById("Z2").clear(); - await calcPage.getInputById("Z2").sendKeys("101.8"); + await calcPage.getInputById("Z2").clearValue(); + await calcPage.getInputById("Z2").setValue("101.8"); // the down-most module should still have its results await navbar.clickCalculatorTabForUid("amd2OG"); @@ -178,8 +177,8 @@ describe("ngHyd − compute then reset chained results − ", () => { // modify an input that is linked await navbar.clickCalculatorTabForUid("aTgwMm"); - await calcPage.getInputById("0_ZDV").clear(); - await calcPage.getInputById("0_ZDV").sendKeys("101"); + await calcPage.getInputById("0_ZDV").clearValue(); + await calcPage.getInputById("0_ZDV").setValue("101"); // the down-most module should not have its results anymore await navbar.clickCalculatorTabForUid("amd2OG"); diff --git a/e2e/cote-amont-aval-bief.e2e-spec.ts b/e2e/cote-amont-aval-bief.e2e-spec.ts index 1c73805f0..294151d0f 100644 --- a/e2e/cote-amont-aval-bief.e2e-spec.ts +++ b/e2e/cote-amont-aval-bief.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser, by, element } from "protractor"; import { PreferencesPage } from "./preferences.po" import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; @@ -20,36 +19,38 @@ describe("ngHyd − up/downstream elevations of a reach", () => { beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("check hydraulic details availability - flow calculation", async () => { // open "up/downstream elevations of a reach" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(21); - await browser.sleep(200); + await browser.pause(200); // set upstream flow in calculate mode - const flowCalcBtn = element(by.xpath("//field-set[4]/mat-card-content/param-field-line[1]/div/div[2]/mat-button-toggle-group/mat-button-toggle[3]")); + const flowCalcBtn = $( + "//field-set[4]/mat-card-content/param-field-line[1]/div/div[2]/mat-button-toggle-group/mat-button-toggle[3]" + ); await flowCalcBtn.click(); // check details buttons are disabled - const upDetailsBtn = element(by.id("generate-sp-aval")); + const upDetailsBtn = $("#generate-sp-aval"); expect(upDetailsBtn.isEnabled()).toBe(false); - const downDetailsBtn = element(by.id("generate-sp-amont")); + const downDetailsBtn = $("#generate-sp-amont"); expect(downDetailsBtn.isEnabled()).toBe(false); // set value to upstream water elevation so that flow calculation leads to no error const upWEinput = calcPage.getInputById("Z1"); - await upWEinput.clear(); - await upWEinput.sendKeys("100.664"); + await upWEinput.clearValue(); + await upWEinput.setValue("100.664"); // run calculation const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(2000); + await browser.pause(2000); // check details buttons are enabled expect(upDetailsBtn.isEnabled()).toBe(true); @@ -57,7 +58,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { // click upstream hydraulic details button await upDetailsBtn.click(); - await browser.sleep(500); + await browser.pause(500); // a second calculator should be created let calcs = navBar.getAllCalculatorTabs(); @@ -66,7 +67,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { // click downstream hydraulic details button await navBar.openNthCalculator(0); await upDetailsBtn.click(); - await browser.sleep(500); + await browser.pause(500); // a third calculator should be created calcs = navBar.getAllCalculatorTabs(); @@ -77,18 +78,18 @@ describe("ngHyd − up/downstream elevations of a reach", () => { // open "up/downstream elevations of a reach" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(21); - await browser.sleep(200); + await browser.pause(200); // check details buttons status - const upDetailsBtn = element(by.id("generate-sp-aval")); + const upDetailsBtn = $("#generate-sp-aval"); expect(upDetailsBtn.isEnabled()).toBe(true); - const downDetailsBtn = element(by.id("generate-sp-amont")); + const downDetailsBtn = $("#generate-sp-amont"); expect(downDetailsBtn.isEnabled()).toBe(false); // run calculation const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(2000); + await browser.pause(2000); // check details buttons are enabled expect(upDetailsBtn.isEnabled()).toBe(true); @@ -96,7 +97,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { // click upstream hydraulic details button await upDetailsBtn.click(); - await browser.sleep(500); + await browser.pause(500); // a second calculator should be created let calcs = navBar.getAllCalculatorTabs(); @@ -105,7 +106,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { // click downstream hydraulic details button await navBar.openNthCalculator(0); await upDetailsBtn.click(); - await browser.sleep(500); + await browser.pause(500); // a third calculator should be created calcs = navBar.getAllCalculatorTabs(); diff --git a/e2e/courbe-remous-empty-fields.e2e-spec.ts b/e2e/courbe-remous-empty-fields.e2e-spec.ts index 4674b1c5c..35dbdf61b 100644 --- a/e2e/courbe-remous-empty-fields.e2e-spec.ts +++ b/e2e/courbe-remous-empty-fields.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; @@ -21,14 +20,14 @@ describe("Check fields are empty in 'backwater curves' calculator when created w // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("", async () => { // open "backwater curves" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(4); - await browser.sleep(200); + await browser.pause(200); expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "Long", "YB", "ZF1", "ZF2", "Q", "Z1", "Z2", "Dx"], [true, true, true, true, true, true, true, true, true, true])) diff --git a/e2e/diagramme-modules.e2e-spec.ts b/e2e/diagramme-modules.e2e-spec.ts index 87a6c8d0a..a10251f05 100644 --- a/e2e/diagramme-modules.e2e-spec.ts +++ b/e2e/diagramme-modules.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser, by, element } from "protractor"; import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; import { SideNav } from "./sidenav.po"; @@ -40,23 +39,23 @@ describe("modules diagram", () => { // open predam calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(30); - await browser.sleep(200); + await browser.pause(200); // open modules diagram await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sideNav.clickDiagramButton(); - await browser.sleep(200); + await browser.pause(200); // click first module - const nodes = element.all(by.css("g.node.default")); + const nodes = $$("g.node.default"); const node0 = nodes.get(0); const n0id = removeMermaidIdFormat(await node0.getAttribute("id")); await node0.click(); - await browser.sleep(200); + await browser.pause(200); // check calculator is open - const url = await browser.driver.getCurrentUrl(); + const url = await browser.getUrl(); expect(url).toContain("/#/calculator/" + n0id); }); }); diff --git a/e2e/documentation.e2e-spec.ts b/e2e/documentation.e2e-spec.ts index a3a4f14d8..b1e8d50cc 100644 --- a/e2e/documentation.e2e-spec.ts +++ b/e2e/documentation.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; import { PreferencesPage } from "./preferences.po"; describe("documentation − ", () => { @@ -22,45 +21,42 @@ describe("documentation − ", () => { async function checkMathjaxInHelp(lang: number) { // change language setup await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.changeLanguage(lang); - await browser.sleep(200); + await browser.pause(200); // start page await navbar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open "fish ladder: fall" calculator await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // click help await calcPage.getCalculatorHelpButton().click(); - await browser.sleep(200); + await browser.pause(200); - browser.getAllWindowHandles().then(async (handles) => { + browser.getWindowHandles().then(async (handles) => { const old = browser.ignoreSynchronization - browser.ignoreSynchronization = true; // deprecated but the only solution to work in the newly opened tab // switch to help tab - browser.switchTo().window(handles[1]).then(async () => { - await browser.sleep(200); + browser.switchToWindow(handles[1]).then(async () => { + await browser.pause(200); // check Mathjax element is present - expect(await element(by.css("mjx-container")).isPresent()).toBe(true); + expect(await $("mjx-container").isExisting()).toBe(true); }).then(async () => { // close help tab // await browser.close(); // await browser.sleep(200); // switch back to calculator (required to avoid failure of next language test) - await browser.switchTo().window(handles[0]); - await browser.sleep(200); + await browser.switchToWindow(handles[0]); + await browser.pause(200); // browser.ignoreSynchronization = false; }).then(async () => { // switch back to calculator (required to avoid failure of next language test) - await browser.switchTo().window(handles[0]); - await browser.sleep(200); - // browser.ignoreSynchronization = false; - browser.ignoreSynchronization = old; + await browser.switchToWindow(handles[0]); + await browser.pause(200); }); }); } diff --git a/e2e/duplicate-results.e2e-spec.ts b/e2e/duplicate-results.e2e-spec.ts index bc2032048..aed31aaec 100644 --- a/e2e/duplicate-results.e2e-spec.ts +++ b/e2e/duplicate-results.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po" import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; @@ -20,16 +19,16 @@ describe("ngHyd − check that results are not duplicated", () => { beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("in 'baffle fishway: setup' calculator", async () => { // open baffle fishway setup calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(28); - await browser.sleep(200); + await browser.pause(200); // run calculation const calcButton = calcPage.getCalculateButton(); @@ -37,7 +36,7 @@ describe("ngHyd − check that results are not duplicated", () => { // check result count const fixRows = calcPage.getAllFixedResultsRows(); - const nbRows = await fixRows.count(); + const nbRows = await fixRows.length; console.log(nbRows); expect(nbRows).toBe(24); // boundaries are included }); diff --git a/e2e/examples-empty-fields.e2e-spec.ts b/e2e/examples-empty-fields.e2e-spec.ts index dd59b1a13..eb6b8c32a 100644 --- a/e2e/examples-empty-fields.e2e-spec.ts +++ b/e2e/examples-empty-fields.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser, by, element } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" @@ -21,24 +20,24 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on beforeEach(async () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when a standard fish ladder calculator is created", async () => { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open 1st example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[0].click(); - await browser.sleep(50); + const examples = await $$("#examples-list .load-example"); + await (await examples)[0].click(); + await browser.pause(50); // select wall module await navBar.openNthCalculator(4); - await browser.sleep(50); + await browser.pause(50); // check fields are not empty const inputIds = ["Z1", "LB", "PB", "0_L", "0_CdWSL"]; @@ -49,30 +48,30 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on it("calculated parameter initial value when discharge law is modified", async () => { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open 1st example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[0].click(); - await browser.sleep(50); + const examples = await $$("#examples-list .load-example"); + await (await examples)[0].click(); + await browser.pause(50); // select wall module await navBar.openNthCalculator(4); - await browser.sleep(50); + await browser.pause(50); // modify 1st structure discharge law const dischargeSelect = calcPage.getSelectById("select_loidebit"); await changeSelectValue(dischargeSelect, 1); - await browser.sleep(200); + await browser.pause(200); // open initial dialog - const initDlgButton = element(by.className("param-computed-more")); + const initDlgButton = $(".param-computed-more"); await initDlgButton.click(); - await browser.sleep(200); + await browser.pause(200); // check input value is not null const input = calcPage.getInputById("initval-input"); - const underlyingInput = input.element(by.id("0_h1")); + const underlyingInput = input.$("#0_h1"); const txt = await underlyingInput.getAttribute("value"); expect(txt === "").toEqual(false); }); @@ -92,48 +91,48 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea beforeEach(async () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when calculation is run on a generated fish ladder calculator", async () => { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open 1st example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[0].click(); - await browser.sleep(50); + const examples = await $$("#examples-list .load-example"); + await (await examples)[0].click(); + await browser.pause(50); // select wall module await navBar.openNthCalculator(4); - await browser.sleep(50); + await browser.pause(50); // run calculation const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(200); + await browser.pause(200); // click "generate PAB" button const genButton = calcPage.getGeneratePabButton(); await genButton.click(); - await browser.sleep(200); + await browser.pause(200); // write "6" in basin count input const nbBassins = calcPage.getInputById("generatePabNbBassins"); - await nbBassins.sendKeys("6"); - await browser.sleep(50); + await nbBassins.setValue("6"); + await browser.pause(50); // click "Generate PAB" - await element(by.css("dialog-generate-pab button#do-generate")).click(); - await browser.sleep(1000); + await $("dialog-generate-pab button#do-generate").click(); + await browser.pause(1000); // calculate PAB const calcButtonPAB = calcPage.getCalculateButton(); await calcButtonPAB.click(); - await browser.sleep(200); + await browser.pause(200); // check that result is not empty const hasResults = await calcPage.hasResults(); diff --git a/e2e/lechapt-calmon.e2e-spec.ts b/e2e/lechapt-calmon.e2e-spec.ts index 70ee97d0a..7a0f68ddd 100644 --- a/e2e/lechapt-calmon.e2e-spec.ts +++ b/e2e/lechapt-calmon.e2e-spec.ts @@ -1,5 +1,4 @@ import { ListPage } from "./list.po"; -import { browser, by } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; @@ -25,19 +24,19 @@ describe("Lechapt&Calmon - ", () => { beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); async function setup() { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open Lechapt-Calmon (pressure loss) calculator await listPage.clickMenuEntryForCalcType(35); - await browser.sleep(200); + await browser.pause(200); } it("when material is modified, results should change", async () => { @@ -46,28 +45,28 @@ describe("Lechapt&Calmon - ", () => { // select last material type const materialSelect = calcPage.getSelectById("select_material"); await changeSelectValue(materialSelect, 8); - await browser.sleep(200); + await browser.pause(200); // run calculation const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(200); + await browser.pause(200); // store total pressure loss result const res1 = calcPage.getAllFixedResultsRows().get(4); - const pl1 = await res1.all(by.css("td")).get(1).getText(); + const pl1 = await res1.$$("td")[1].getText(); // select first material type await changeSelectValue(materialSelect, 0); - await browser.sleep(200); + await browser.pause(200); // run calculation await calcButton.click(); - await browser.sleep(200); + await browser.pause(200); // compare total pressure loss result with first calculaiotn const res2 = calcPage.getAllFixedResultsRows().get(4); - const pl2 = await res2.all(by.css("td")).get(1).getText(); + const pl2 = await res2.$$("td")[1].getText(); expect(pl1).not.toEqual(pl2); }); diff --git a/e2e/link-parallel-devices.e2e-spec.ts b/e2e/link-parallel-devices.e2e-spec.ts index 768c320af..845ccfdad 100644 --- a/e2e/link-parallel-devices.e2e-spec.ts +++ b/e2e/link-parallel-devices.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; -import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; @@ -21,14 +20,14 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when creating Parallel Structures, devices should be linkable to one another", async () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(8); await calcPage.getAddStructureButton().click(); - const nb1 = await calcPage.getAllLinkButtons().count(); + const nb1 = await calcPage.getAllLinkButtons().length; expect(nb1).toBe(8); // link buttons on children but not on parent }); @@ -36,7 +35,7 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); await calcPage.getAddStructureButton().click(); - const nb2 = await calcPage.getAllLinkButtons().count(); + const nb2 = await calcPage.getAllLinkButtons().length; expect(nb2).toBe(6); // link buttons on children but not on parent }); @@ -44,7 +43,7 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(9); await calcPage.getAddStructureButton().click(); - const nb3 = await calcPage.getAllLinkButtons().count(); + const nb3 = await calcPage.getAllLinkButtons().length; expect(nb3).toBe(6); // link buttons on children but not on parent }); }); diff --git a/e2e/link-to-deleted-module.e2e-spec.ts b/e2e/link-to-deleted-module.e2e-spec.ts index 380f97354..da428de98 100644 --- a/e2e/link-to-deleted-module.e2e-spec.ts +++ b/e2e/link-to-deleted-module.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser, by, element } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; @@ -23,27 +22,27 @@ describe("linked parameter - ", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); await navBar.clickNewCalculatorButton(); }); it("delete linked module", async () => { // open "channel flow with hydraulic structures" example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[1].click(); - await browser.sleep(500); + const examples = await $$("#examples-list .load-example"); + await (await examples)[1].click(); + await browser.pause(500); // select "up/downstream elevations of a reach" tab await navBar.clickCalculatorTab(1); - await browser.sleep(500); + await browser.pause(500); // close "solver" calculator await navBar.middleClickCalculatorTab(3); // reselect "up/downstream elevations of a reach" tab await navBar.clickCalculatorTab(1); - await browser.sleep(500); + await browser.pause(500); // close second "parallel structures" calculator await navBar.middleClickCalculatorTab(2); @@ -59,20 +58,20 @@ describe("linked parameter - ", () => { it("delete linked module and duplicate remaining one", async () => { // open "fish ladder: fall" calculator await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // clone calculator await calcPage.clickCloneCalcButton(); - await browser.sleep(200); + await browser.pause(200); // set DH in link mode let inpDH = calcPage.getInputById("DH"); await calcPage.setParamMode(inpDH, "link"); - await browser.sleep(200); + await browser.pause(200); // close 1st calculator await navBar.middleClickCalculatorTab(0); - await browser.sleep(200); + await browser.pause(200); // check DH input is in "fixed" state in remaining calculator (not the aim of this test) inpDH = calcPage.getInputById("DH"); @@ -83,11 +82,11 @@ describe("linked parameter - ", () => { // clone calculator await calcPage.clickCloneCalcButton(); - await browser.sleep(200); + await browser.pause(200); // select 1st tab await navBar.clickCalculatorTab(0); - await browser.sleep(500); + await browser.pause(500); // check DH input is in "calc" mode inpDH = calcPage.getInputById("DH"); diff --git a/e2e/linked-parameter-section-type.e2e-spec.ts b/e2e/linked-parameter-section-type.e2e-spec.ts index 36dce48fa..e663ff009 100644 --- a/e2e/linked-parameter-section-type.e2e-spec.ts +++ b/e2e/linked-parameter-section-type.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser } from "protractor"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; @@ -22,7 +21,7 @@ describe("linked parameter in calculator with section - ", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("modify section type", async () => { @@ -31,12 +30,12 @@ describe("linked parameter in calculator with section - ", () => { // open first "parametric section" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(2); - await browser.sleep(200); + await browser.pause(200); // open second "parametric section" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(2); - await browser.sleep(200); + await browser.pause(200); // set Q parameter to linked mode const inputQ = calcPage.getInputById("Q"); diff --git a/e2e/list.e2e-spec.ts b/e2e/list.e2e-spec.ts index 2b2679a5c..c89367c94 100644 --- a/e2e/list.e2e-spec.ts +++ b/e2e/list.e2e-spec.ts @@ -1,5 +1,4 @@ import { ListPage } from "./list.po"; -import { element, by } from "protractor"; /** * Show calculators list (home page) @@ -19,7 +18,7 @@ describe("ngHyd − list page", () => { it("when list is open, link to doc should be well-formed (2-letter language code)", async () => { await page.navigateTo(); - const docLink = element(by.css("a#header-doc")); + const docLink = $("a#header-doc"); const href = await docLink.getAttribute("href"); const re = new RegExp("assets/docs/[a-z]{2}/index.html"); expect(re.test(href)).toBe(true); diff --git a/e2e/list.po.ts b/e2e/list.po.ts index 52c574577..7d09d78bc 100644 --- a/e2e/list.po.ts +++ b/e2e/list.po.ts @@ -1,24 +1,22 @@ -import { browser, by, element } from "protractor"; - export class ListPage { navigateTo() { - return browser.get("/#/list"); + return browser.url("/#/list"); } getThemesCards() { - return element.all(by.css("mat-card.compute-nodes-theme")); + return $$("mat-card.compute-nodes-theme"); } async getThemesCardsLength() { - return await this.getThemesCards().count(); + return await this.getThemesCards().length; } getCalculatorsMenuEntries() { - return element.all(by.css("mat-card.compute-nodes-theme button.theme-calculator")); + return $$("mat-card.compute-nodes-theme button.theme-calculator"); } async getCalculatorsMenuLength() { - return await this.getCalculatorsMenuEntries().count(); + return await this.getCalculatorsMenuEntries().length; } async getAvailableCalcTypes() { @@ -38,18 +36,18 @@ export class ListPage { async clickRandomCalculatorMenuEntry() { const menuEntries = this.getCalculatorsMenuEntries(); - const l = await menuEntries.count(); + const l = await menuEntries.length; const r = Math.min((Math.floor(Math.random() * l)), (l - 1)); - return menuEntries.get(r).click(); + return menuEntries[r].click(); } async clickMenuEntryForCalcType(type: number) { - const but = element(by.css("#create-calc-" + type)); + const but = $("#create-calc-" + type); return but.click(); } async getCalcMenuTextForCalcType(type: number): Promise<string> { - const but = element(by.css("#create-calc-" + type)); + const but = $("#create-calc-" + type); return but.getText(); } } diff --git a/e2e/load-linked-params.e2e-spec.ts b/e2e/load-linked-params.e2e-spec.ts index 32d976aff..dbeb39faf 100644 --- a/e2e/load-linked-params.e2e-spec.ts +++ b/e2e/load-linked-params.e2e-spec.ts @@ -1,7 +1,6 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; -import { browser } from "protractor"; import { PreferencesPage } from "./preferences.po"; /** @@ -26,29 +25,29 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { // force language to prevent issues due to default browser language await prefPage.navigateTo(); await prefPage.changeLanguage(1); // fr - await browser.sleep(200); + await browser.pause(200); // disable evil option "empty fields on module creation" await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); // start page await navbar.clickNewCalculatorButton(); }); it("when loading session-liens-spaghetti.json, all links should point to the right target", async () => { await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-liens-spaghetti.json"); - await browser.sleep(500); + await browser.pause(500); - expect(await navbar.getAllCalculatorTabs().count()).toBe(5); + expect(await navbar.getAllCalculatorTabs().length).toBe(5); // 1. check Section paramétrée await navbar.clickCalculatorTab(0); - await browser.sleep(500); + await browser.pause(500); // check target params values const sp_lb = calcPage.getSelectById("linked_LargeurBerge"); @@ -57,7 +56,7 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { // 2. check Passe à macro-rugosités await navbar.clickCalculatorTab(1); - await browser.sleep(500); + await browser.pause(500); // check target params values const mr_zf1 = calcPage.getSelectById("linked_ZF1"); @@ -70,7 +69,7 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { // 3. check Lois d'ouvrages await navbar.clickCalculatorTab(2); - await browser.sleep(500); + await browser.pause(500); // check target params values // const lo_z2 = calcPage.getSelectById("linked_Z2"); @@ -98,7 +97,7 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { // 5. check Déver. dénoyés await navbar.clickCalculatorTab(4); - await browser.sleep(500); + await browser.pause(500); // check target params values // const lo_br = calcPage.getSelectById("linked_BR"); diff --git a/e2e/load-malformed-files.e2e-spec.ts b/e2e/load-malformed-files.e2e-spec.ts index 9204d87b6..f8ad8dc99 100644 --- a/e2e/load-malformed-files.e2e-spec.ts +++ b/e2e/load-malformed-files.e2e-spec.ts @@ -1,6 +1,5 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; -import { browser, element, by } from "protractor"; import { PreferencesPage } from "./preferences.po"; /** @@ -26,55 +25,55 @@ describe("ngHyd − load malformed session files − ", () => { // force language to prevent issues due to default browser language await prefPage.navigateTo(); await prefPage.changeLanguage(1); // fr - await browser.sleep(200); + await browser.pause(200); await navbar.clickNewCalculatorButton(); }); it("when loading session-bad-syntax.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-bad-syntax.json"); - const err = element(by.css(".file-problem .mat-list-item-content")); + const err = $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("La syntaxe du fichier semble incorrecte"); }); it("when loading session-missing-info.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-missing-info.json"); - const err = element(by.css(".file-problem .mat-list-item-content")); + const err = $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("La syntaxe du fichier semble incorrecte"); }); it("when loading session-empty-modules-list.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-empty-modules-list.json"); - const err = element(by.css(".file-problem .mat-list-item-content")); + const err = $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("Le fichier ne contient aucun module"); }); it("when loading session-format-too-old.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-format-too-old.json", false); - const err = element(by.css(".file-problem .mat-list-item-content")); + const err = $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("Mauvaise version du format de fichier"); }); }); diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index b56572375..7bce10834 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -3,7 +3,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; -import { browser, by, element } from "protractor"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue, expectNumber } from "./util.po"; @@ -43,7 +42,7 @@ async function saveSession(): Promise<string> { deleteDownloadedFile(sessionFile); await calcPage.clickSaveCalcButton(); - await browser.sleep(500); + await browser.pause(500); // cf. protractor.conf.fs, exports.config.capabilities.chromeOptions.prefs.download.default_directory // protractor.conf.fs/exports.config.capabilities.chromeOptions.prefs.download.default_directory DOES NOT WORK ! @@ -60,10 +59,10 @@ async function saveSession(): Promise<string> { if (true) { await calcPage.getSaveSessionButton().click(); } else { - const cancel = element(by.css("dialog-save-session button.mat-primary")); + const cancel = $("dialog-save-session button.mat-primary"); await cancel.click(); } - await browser.sleep(200); + await browser.pause(200); // browser.ignoreSynchronization = false; // await browser.waitForAngularEnabled(true); @@ -88,10 +87,10 @@ async function saveSession(): Promise<string> { async function loadSession(path: string) { await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile(path); } @@ -118,41 +117,41 @@ describe("ngHyd − save and load sessions", () => { await startPage.navigateTo(); await loadSession("./session/session-6-calc.test.json"); - await browser.sleep(1000); + await browser.pause(1000); - expect(await navbar.getAllCalculatorTabs().count()).toBe(6); + expect(await navbar.getAllCalculatorTabs().length).toBe(6); }); it("when loading session-optional-params.test.json file from home page, the calculator should be loaded", async () => { await startPage.navigateTo(); await loadSession("./session/session-optional-params.test.json"); - await browser.sleep(200); + await browser.pause(200); - expect(await navbar.getAllCalculatorTabs().count()).toBe(1); + expect(await navbar.getAllCalculatorTabs().length).toBe(1); }); it("when saving a calculator, the current parameter values should be found in the file", async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(2); // Section paramétrée - await browser.sleep(500); + await browser.pause(500); await changeSelectValue(calcPage.getSelectById("select_section"), 2); // mode "trapezoidal" - await calcPage.getInputById("Ks").clear(); // coefficient de Strickler - await browser.sleep(200); - await calcPage.getInputById("Ks").sendKeys("42"); - await browser.sleep(200); + await calcPage.getInputById("Ks").clearValue(); // coefficient de Strickler + await browser.pause(200); + await calcPage.getInputById("Ks").setValue("42"); + await browser.pause(200); const filename = await saveSession(); - await browser.sleep(500); + await browser.pause(500); const fileContent = fs.readFileSync(filename, { encoding: "utf8" }); - await browser.sleep(200); + await browser.pause(200); expect(fileContent).toContain(`"nodeType":"SectionTrapeze"`); expect(fileContent).toContain(`{"symbol":"Ks","mode":"SINGLE","value":42}`); @@ -161,7 +160,7 @@ describe("ngHyd − save and load sessions", () => { xit("select value must be recovered when loading a session file", async () => { // start page await startPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); const calcTypes = await listPage.getAvailableCalcTypes(); @@ -176,27 +175,27 @@ describe("ngHyd − save and load sessions", () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); // start page await navbar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); } else { // empty session await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickNewSessionButton(); - await browser.sleep(200); + await browser.pause(200); } // open calculator await listPage.clickMenuEntryForCalcType(ct); - await browser.sleep(200); + await browser.pause(200); // detect selects const selects = calcPage.getAllCalculatorSelects(); - const nsel = await selects.count(); + const nsel = await selects.length; for (let s = 0; s < nsel; s++) { // /!\ ElementArrayFinder.each() is ASYNCHRONOUS !! https://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.each const sel = selects.get(s); const selId = await sel.getAttribute("id"); @@ -212,15 +211,15 @@ describe("ngHyd − save and load sessions", () => { // select next select option (optionally looping) const nextInd = (ind + 1) % optionCount; await changeSelectValue(sel, nextInd); - await browser.sleep(200); + await browser.pause(200); // save session const filename = await saveSession(); - await browser.sleep(200); + await browser.pause(200); // load session await loadSession(filename); // bug here : the click on the menu button (top left) takes 40s to take effect and open the side nav!) - await browser.sleep(200); + await browser.pause(200); // the displayed calculator is now the loaded one // check the calculator has been loaded @@ -231,13 +230,13 @@ describe("ngHyd − save and load sessions", () => { // check the same option is in the select const optTxt2 = await calcPage.getMatselectCurrentOptionText(sel2); - await browser.sleep(100); + await browser.pause(100); const ind2 = options.indexOf(optTxt2); expectNumber(`calc ${ct} select ${selId} : opt index`, ind2, nextInd); // close last calculator (the loaded one) await navbar.middleClickCalculatorTab(1); - await browser.sleep(200); + await browser.pause(200); // check last calculator has been closed expectNumber(`calc ${ct} select ${selId} : num calcs(2)`, await navbar.getCalculatorEntriesCount(), 1); diff --git a/e2e/navbar.po.ts b/e2e/navbar.po.ts index 814da4e21..9343ede38 100644 --- a/e2e/navbar.po.ts +++ b/e2e/navbar.po.ts @@ -1,8 +1,6 @@ -import { browser, Button, by, element, protractor } from "protractor"; - export class Navbar { getAllCalculatorTabs() { - return element.all(by.css("#tabs-container button.calculator-button")); + return $$("#tabs-container button.calculator-button"); } /** @@ -11,14 +9,14 @@ export class Navbar { */ async getCalculatorEntriesCount() { // if dropDown calculators select is visible - const dropDown = element(by.css("mat-select#selectCalculator")); - if (await dropDown.isPresent() && await dropDown.isDisplayed()) { + const dropDown = $("mat-select#selectCalculator"); + if ((await dropDown.isExisting()) && (await dropDown.isDisplayed())) { await dropDown.click(); - const options = element.all(by.css(".cdk-overlay-container mat-option")); - await dropDown.sendKeys(protractor.Key.ESCAPE); // close dropdown - return await options.count(); + const options = $$(".cdk-overlay-container mat-option"); + // FIXME>>>>await dropDown.sendKeys(protractor.Key.ESCAPE); // close dropdown + return await options.length; } else { - return (await element.all(by.css("#tabs-container button.calculator-button"))).length; + return (await $$("#tabs-container button.calculator-button")).length; } } @@ -28,36 +26,36 @@ export class Navbar { */ async openNthCalculator(n: number) { // if dropDown calculators select is visible - const dropDown = element(by.css("mat-select#selectCalculator")); - if (await dropDown.isPresent() && await dropDown.isDisplayed()) { + const dropDown = $("mat-select#selectCalculator"); + if ((await dropDown.isExisting()) && (await dropDown.isDisplayed())) { await dropDown.click(); // 1st option is not necessarly "mat-option-0"... - const options = element.all(by.css(".cdk-overlay-container mat-option")); + const options = $$(".cdk-overlay-container mat-option"); const option = options.get(n); await option.click(); } else { const tabs = this.getAllCalculatorTabs(); - await tabs.get(n).click(); + await (await tabs.n).click(); } } getCalculatorTabForUid(uid: string) { - return element(by.css("#tabs-container button.calculator-button.calculator-uid-" + uid)); + return $("#tabs-container button.calculator-button.calculator-uid-" + uid); } getNewCalculatorButton() { - return element(by.css("#new-calculator")); + return $("#new-calculator"); } getMenuButton() { - return element(by.css("#open-menu")); + return $("#open-menu"); } async clickCalculatorTab(n: number) { const tabs = this.getAllCalculatorTabs(); - await tabs.get(n).click(); + await (await tabs.n).click(); } async clickCalculatorTabForUid(uid: string) { @@ -67,9 +65,9 @@ export class Navbar { async clickRandomCalculatorTab(n: number) { const tabs = this.getAllCalculatorTabs(); - const l = await tabs.count(); + const l = await tabs.length; const r = Math.min((Math.floor(Math.random() * l)), (l - 1)); - await tabs.get(r).click(); + await (await tabs.r).click(); } /** @@ -78,10 +76,10 @@ export class Navbar { */ async middleClickCalculatorTab(n: number, confirmCloseDialog: boolean = true) { const calcTabs = this.getAllCalculatorTabs(); - await browser.actions().click(calcTabs.get(n), Button.MIDDLE).perform(); + // FIXME>>>> await browser.actions().click(calcTabs.get(n), Button.MIDDLE).perform(); if (confirmCloseDialog) { - const btns = element.all(by.css("dialog-confirm-close-calc .mat-dialog-actions button")); - await btns.get(1).click(); + const btns = $$("dialog-confirm-close-calc .mat-dialog-actions button"); + await (await btns)[1].click(); } } diff --git a/e2e/navigate-through-calculators.e2e-spec.ts b/e2e/navigate-through-calculators.e2e-spec.ts index 8383a7493..e7631f47f 100644 --- a/e2e/navigate-through-calculators.e2e-spec.ts +++ b/e2e/navigate-through-calculators.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; -import { browser } from "protractor"; /** * Use navbar buttons to navigate from one open calculator to another @@ -23,7 +22,7 @@ describe("ngHyd − create calculators and navigate among them", () => { for (let i = 0; i < 6; i++) { if (i > 0) { await navbar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); } await listPage.clickRandomCalculatorMenuEntry(); } diff --git a/e2e/notes.e2e-spec.ts b/e2e/notes.e2e-spec.ts index dd0454099..40bf8caa1 100644 --- a/e2e/notes.e2e-spec.ts +++ b/e2e/notes.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser, by, element } from "protractor"; import { AppPage } from "./app.po"; import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; @@ -19,74 +18,74 @@ describe("check calculator notes", () => { it(" - notes should display properly when opened from a calculator", async () => { await startPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); // open PAB: chute calculator await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // open notes await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickNotesButton(); - await browser.sleep(200); + await browser.pause(200); // input some text - const ta = element(by.css("textarea")); - await ta.clear(); - await ta.sendKeys("azerty123"); - await browser.sleep(200); + const ta = $("textarea"); + await ta.clearValue(); + await ta.setValue("azerty123"); + await browser.pause(200); // reopen calculator await navBar.openNthCalculator(0); - await browser.sleep(200); + await browser.pause(200); // reopen notes await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickNotesButton(); - await browser.sleep(200); + await browser.pause(200); // check text - const md = element(by.css("markdown p")); - await browser.sleep(200); + const md = $("markdown p"); + await browser.pause(200); expect(await md.getText()).toEqual("azerty123"); }); it(" - notes should display properly when opened from modules diagram", async () => { await startPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); // open PAB: chute calculator await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // open notes await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickNotesButton(); - await browser.sleep(200); + await browser.pause(200); // input some text - const ta = element(by.css("textarea")); - await ta.clear(); - await ta.sendKeys("azerty123"); - await browser.sleep(200); + const ta = $("textarea"); + await ta.clearValue(); + await ta.setValue("azerty123"); + await browser.pause(200); // open modules diagram await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickDiagramButton(); - await browser.sleep(200); + await browser.pause(200); // open notes - const notesLink = element(by.css("#show-notes a")); + const notesLink = $("#show-notes a"); notesLink.click(); - await browser.sleep(200); + await browser.pause(200); // check text - const md = element(by.css("markdown p")); - await browser.sleep(200); + const md = $("markdown p"); + await browser.pause(200); expect(await md.getText()).toEqual("azerty123"); }); }); diff --git a/e2e/ouvrages-empty-fields.e2e-spec.ts b/e2e/ouvrages-empty-fields.e2e-spec.ts index 06891af7e..2b7e3620b 100644 --- a/e2e/ouvrages-empty-fields.e2e-spec.ts +++ b/e2e/ouvrages-empty-fields.e2e-spec.ts @@ -1,5 +1,4 @@ import { ListPage } from "./list.po"; -import { browser, by, element } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; @@ -26,19 +25,19 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () beforeEach(async () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); async function setup() { // start page await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open structures calculator await listPage.clickMenuEntryForCalcType(8); - await browser.sleep(200); + await browser.pause(200); } it("when a structure calculator is created", async () => { @@ -52,7 +51,7 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () // change 1st structure type to rectangular weir const structSelect = calcPage.getSelectById("select_structure"); await changeSelectValue(structSelect, 1); - await browser.sleep(200); + await browser.pause(200); // check 1st structure empty fields const inputIds2 = ["Q", "Z1", "Z2", "0_ZDV", "0_L", "0_CdWR"]; @@ -92,18 +91,18 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () // change 1st structure type to rectangular weir const structSelect = calcPage.getSelectById("select_structure"); await changeSelectValue(structSelect, 1); - await browser.sleep(200); + await browser.pause(200); // copy structure const addStruct = calcPage.getCopyStructureButton(); await addStruct.click(); - await browser.sleep(200); + await browser.pause(200); // change 2nd structure type to rectangular gate - const selects = await element.all(by.css("mat-select#select_structure")); + const selects = await $$("mat-select#select_structure"); const structSelect2 = selects[1]; await changeSelectValue(structSelect2, 5); - await browser.sleep(200); + await browser.pause(200); // check empty fields const inputIds = ["1_ZDV", "1_L", "1_W", "1_CdGR"]; @@ -116,13 +115,13 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () // fill const inp = calcPage.getInputById("0_ZDV"); - await inp.clear(); - await inp.sendKeys("1"); + await inp.clearValue(); + await inp.setValue("1"); // copy structure const addStruct = calcPage.getCopyStructureButton(); await addStruct.click(); - await browser.sleep(200); + await browser.pause(200); // check empty fields const inputIds = ["1_ZDV", "1_L", "1_W", "1_CdGR"]; @@ -136,12 +135,12 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () // change 1st structure type to rectangular weir const structSelect = calcPage.getSelectById("select_structure"); await changeSelectValue(structSelect, 1); - await browser.sleep(200); + await browser.pause(200); // change discharge law to Larinier const dischargeSelect = calcPage.getSelectById("select_loidebit"); await changeSelectValue(dischargeSelect, 3); - await browser.sleep(200); + await browser.pause(200); // check empty fields const inputIds = ["0_ZDV", "0_L", "0_CdWSL"]; @@ -154,13 +153,13 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () // fill const inp = calcPage.getInputById("0_ZDV"); - await inp.clear(); - await inp.sendKeys("1"); + await inp.clearValue(); + await inp.setValue("1"); // copy structure const addStruct = calcPage.getAddStructureButton(); await addStruct.click(); - await browser.sleep(200); + await browser.pause(200); // check empty fields const inputIds = ["1_ZDV", "1_L", "1_W", "1_CdGR"]; diff --git a/e2e/pab-cloisons-empty-fields.e2e-spec.ts b/e2e/pab-cloisons-empty-fields.e2e-spec.ts index 749c1708e..1885d8fe6 100644 --- a/e2e/pab-cloisons-empty-fields.e2e-spec.ts +++ b/e2e/pab-cloisons-empty-fields.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { PreferencesPage } from "./preferences.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; @@ -9,15 +8,15 @@ import { Navbar } from "./navbar.po"; */ async function enableEmptyFieldsOption(prefPage: PreferencesPage) { await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); } async function fillInput(calcPage: CalculatorPage, symbol: string) { const inp = calcPage.getInputById(symbol); - await inp.clear(); - await inp.sendKeys("1"); + await inp.clearValue(); + await inp.setValue("1"); } /** @@ -46,7 +45,7 @@ describe("ngHyd - check the cross walls calculator has empty fields - ", () => { // open cross walls calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); - await browser.sleep(200); + await browser.pause(200); // fill inputs await fillInput(calcPage, "Z1"); @@ -61,12 +60,12 @@ describe("ngHyd - check the cross walls calculator has empty fields - ", () => { // calculate const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(200); + await browser.pause(200); // click "generate PAB" button const genButton = calcPage.getGeneratePabButton(); await genButton.click(); - await browser.sleep(200); + await browser.pause(200); await calcPage.checkEmptyOrFilledFields(["generatePabNbBassins"], [true]); }); @@ -97,7 +96,7 @@ describe("ngHyd - check the cross walls calculator has no empty field - ", () => // open cross walls calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); - await browser.sleep(200); + await browser.pause(200); // fill inputs await fillInput(calcPage, "Z1"); @@ -112,7 +111,7 @@ describe("ngHyd - check the cross walls calculator has no empty field - ", () => // calculate const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(200); + await browser.pause(200); await calcPage.checkEmptyOrFilledFields(["Z1", "LB", "BB", "PB", "DH", "0_h1", "0_L", "0_CdWSL"], [false, false, false, false, false, false, false, false]); }); diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 00e798f1e..2bf3c72b2 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; import { AppPage } from "./app.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; @@ -32,7 +31,7 @@ describe("ngHyd − Passe à Bassins", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when PAB is created from scratch", async () => { @@ -40,8 +39,8 @@ describe("ngHyd − Passe à Bassins", () => { await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(15); // check that pab-table is present - const innerFieldsets = element.all(by.css(".pab-data-table")); - expect(await innerFieldsets.count()).toBe(1); + const innerFieldsets = $$(".pab-data-table"); + expect(await innerFieldsets.length).toBe(1); // calculate PAB const calcButton = calcPage.getCalculateButton(); @@ -59,11 +58,11 @@ describe("ngHyd − Passe à Bassins", () => { await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); const c_Z1 = calcPage.getInputById("Z1"); - await c_Z1.clear(); - await c_Z1.sendKeys("78.27"); + await c_Z1.clearValue(); + await c_Z1.setValue("78.27"); const c_Z2 = calcPage.getInputById("Z1"); - await c_Z2.clear(); - await c_Z2.sendKeys("74.86"); + await c_Z2.clearValue(); + await c_Z2.setValue("74.86"); // PAB - nombre await navbar.clickNewCalculatorButton(); @@ -73,8 +72,8 @@ describe("ngHyd − Passe à Bassins", () => { const n_DH = calcPage.getInputById("DH"); await calcPage.setParamMode(n_DH, "cal"); const n_N = calcPage.getInputById("N"); - await n_N.clear(); - await n_N.sendKeys("15"); + await n_N.clearValue(); + await n_N.setValue("15"); // PAB - dimensions await navbar.clickNewCalculatorButton(); @@ -82,14 +81,14 @@ describe("ngHyd − Passe à Bassins", () => { const d_V = calcPage.getInputById("V"); await calcPage.setParamMode(d_V, "cal"); const d_Y = calcPage.getInputById("Y"); - await d_Y.clear(); - await d_Y.sendKeys("1.5"); + await d_Y.clearValue(); + await d_Y.setValue("1.5"); const d_L = calcPage.getInputById("L"); - await d_L.clear(); - await d_L.sendKeys("3.100"); + await d_L.clearValue(); + await d_L.setValue("3.100"); const d_W = calcPage.getInputById("W"); - await d_W.clear(); - await d_W.sendKeys("2.5"); + await d_W.clearValue(); + await d_W.setValue("2.5"); // PAB - puissance dissipée (volume) await navbar.clickNewCalculatorButton(); @@ -101,8 +100,8 @@ describe("ngHyd − Passe à Bassins", () => { const p_V = calcPage.getInputById("V"); await calcPage.setParamMode(p_V, "link"); const p_PV = calcPage.getInputById("PV"); - await p_PV.clear(); - await p_PV.sendKeys("150"); + await p_PV.clearValue(); + await p_PV.setValue("150"); // PAB - cloisons await navbar.clickNewCalculatorButton(); @@ -116,8 +115,8 @@ describe("ngHyd − Passe à Bassins", () => { const cl_Z1 = calcPage.getInputById("Z1"); await calcPage.setParamMode(cl_Z1, "link"); const cl_PB = calcPage.getInputById("PB"); - await cl_PB.clear(); - await cl_PB.sendKeys("1.5"); + await cl_PB.clearValue(); + await cl_PB.setValue("1.5"); // calculate Cloisons const calcButtonCl = calcPage.getCalculateButton(); @@ -127,16 +126,16 @@ describe("ngHyd − Passe à Bassins", () => { await scrollPageToTop(); // generate PAB const genButton = calcPage.getGeneratePabButton(); - await genButton.isPresent(); + await genButton.isExisting(); await genButton.isDisplayed(); await genButton.click(); const nbBassins = calcPage.getInputById("generatePabNbBassins"); - await nbBassins.clear(); - await nbBassins.sendKeys("9"); + await nbBassins.clearValue(); + await nbBassins.setValue("9"); // click "Generate" - await element(by.css("dialog-generate-pab button#do-generate")).click(); - await browser.sleep(1000); + await $("dialog-generate-pab button#do-generate").click(); + await browser.pause(1000); // calculate PAB const calcButtonPAB = calcPage.getCalculateButton(); @@ -154,7 +153,7 @@ describe("ngHyd − Passe à Bassins", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("from a Cloisons among many", async () => { @@ -168,14 +167,14 @@ describe("ngHyd − Passe à Bassins", () => { // choose one of them and change its parameters await navbar.clickCalculatorTab(1); const Z1 = calcPage.getInputById("Z1"); - await Z1.clear(); - await Z1.sendKeys("114"); + await Z1.clearValue(); + await Z1.setValue("114"); const LB = calcPage.getInputById("LB"); - await LB.clear(); - await LB.sendKeys("11.5"); + await LB.clearValue(); + await LB.setValue("11.5"); const DH = calcPage.getInputById("DH"); - await DH.clear(); - await DH.sendKeys("0.72"); + await DH.clearValue(); + await DH.setValue("0.72"); // calculate Cloisons const calcButtonCl = calcPage.getCalculateButton(); @@ -188,27 +187,27 @@ describe("ngHyd − Passe à Bassins", () => { await genButton.click(); const debit = calcPage.getInputById("generatePabDebit"); expect(await debit.getAttribute("value")).toBe("0.564"); - await debit.clear(); - await browser.sleep(300); + await debit.clearValue(); + await browser.pause(300); // send "1.6" in 3 movements, because "." triggers an error and Angular can't cope with the subsequent keys - await debit.sendKeys("1"); - await browser.sleep(300); - await debit.sendKeys("."); - await browser.sleep(300); - await debit.sendKeys("6"); - await browser.sleep(300); + await debit.setValue("1"); + await browser.pause(300); + await debit.setValue("."); + await browser.pause(300); + await debit.setValue("6"); + await browser.pause(300); const coteAmont = calcPage.getInputById("generatePabCoteAmont"); expect(await coteAmont.getAttribute("value")).toBe("114"); - await coteAmont.clear(); - await coteAmont.sendKeys("115"); + await coteAmont.clearValue(); + await coteAmont.setValue("115"); const nbBassins = calcPage.getInputById("generatePabNbBassins"); expect(await nbBassins.getAttribute("value")).toBe("6"); - await nbBassins.clear(); - await nbBassins.sendKeys("5"); + await nbBassins.clearValue(); + await nbBassins.setValue("5"); // click "Generate" - await element(by.css("dialog-generate-pab button#do-generate")).click(); - await browser.sleep(1000); + await $("dialog-generate-pab button#do-generate").click(); + await browser.pause(1000); // check parameters values const P_Q = calcPage.getInputById("Q"); @@ -217,8 +216,8 @@ describe("ngHyd − Passe à Bassins", () => { expect(await P_Z2.getAttribute("value")).toBe("111.4"); // check number of basins - const innerFieldsets = element.all(by.css("td.basin_number")); - expect(await innerFieldsets.count()).toBe(5); + const innerFieldsets = $$("td.basin_number"); + expect(await innerFieldsets.length).toBe(5); // calculate PAB const calcButton = calcPage.getCalculateButton(); @@ -234,24 +233,24 @@ describe("ngHyd − Passe à Bassins", () => { await startPage.navigateTo(); // load await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-pab-complete.json"); - await browser.sleep(500); + await browser.pause(500); // check existence of the loaded modules - expect(await navbar.getAllCalculatorTabs().count()).toBe(6); + expect(await navbar.getAllCalculatorTabs().length).toBe(6); // check parameters values await navbar.clickCalculatorTab(5); - await browser.sleep(700); + await browser.pause(700); const P_Q = calcPage.getInputById("Q"); expect(await P_Q.getAttribute("value")).toBe("0.275"); const P_Z2 = calcPage.getInputById("Z2"); expect(await P_Z2.getAttribute("value")).toBe("74.865"); // check number of basins - const innerFieldsets = element.all(by.css("td.basin_number")); - expect(await innerFieldsets.count()).toBe(15); + const innerFieldsets = $$("td.basin_number"); + expect(await innerFieldsets.length).toBe(15); // calculate PAB const calcButton = calcPage.getCalculateButton(); @@ -270,13 +269,13 @@ describe("ngHyd − Passe à Bassins", () => { await startPage.navigateTo(); // load await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-pab-regulee-variee.json"); - await browser.sleep(500); + await browser.pause(500); // check existence of the loaded module - expect(await navbar.getAllCalculatorTabs().count()).toBe(1); + expect(await navbar.getAllCalculatorTabs().length).toBe(1); await navbar.clickCalculatorTab(0); // calculate @@ -287,13 +286,13 @@ describe("ngHyd − Passe à Bassins", () => { expect(hasResults).toBe(true); // check presence of logs - await browser.sleep(300); + await browser.pause(300); expect(await calcPage.nbLogEntries()).toBe(2); // change iteration const pve = calcPage.getSelectById("pab-variating-element"); await changeSelectValue(pve, 3); - await browser.sleep(300); + await browser.pause(300); // check absence of logs expect(await calcPage.nbLogEntries()).toBe(2); }); diff --git a/e2e/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index 0653fbe85..4d257594b 100644 --- a/e2e/parallel-structures.e2e-spec.ts +++ b/e2e/parallel-structures.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; @@ -21,14 +20,14 @@ describe("Check calculated parameter remains the same when copying a structure", // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("", async () => { // open "fish ladder: cross walls" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); - await browser.sleep(200); + await browser.pause(200); // check L in first structure calc toggle is not checked const L1 = calcPage.getInputById("0_L"); diff --git a/e2e/predam-empty-fields.e2e-spec.ts b/e2e/predam-empty-fields.e2e-spec.ts index 1c9f5dd98..8c4182b1a 100644 --- a/e2e/predam-empty-fields.e2e-spec.ts +++ b/e2e/predam-empty-fields.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser, by, element } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; @@ -23,9 +22,9 @@ describe("ngHyd − check that predam fields are empty", () => { beforeEach(async () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("on creation", async () => { @@ -33,7 +32,7 @@ describe("ngHyd − check that predam fields are empty", () => { // open predam calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(30); - await browser.sleep(200); + await browser.pause(200); // check upstream inputs await calcPage.checkEmptyInput("Q"); @@ -41,26 +40,26 @@ describe("ngHyd − check that predam fields are empty", () => { await calcPage.checkEmptyInput("Z2"); // check basin 1 inputs - let node = element(by.css("g.node.basin")); + let node = $("g.node.basin"); await node.click(); - await browser.sleep(200); + await browser.pause(200); await calcPage.checkEmptyInput("0_S"); await calcPage.checkEmptyInput("0_ZF"); // check walls inputs - const walls = element.all(by.css("g.node.wall")); - expect(walls.count()).toEqual(2); + const walls = $$("g.node.wall"); + expect(walls.length).toEqual(2); await walls.each(async (w) => { await w.click(); - await browser.sleep(200); + await browser.pause(200); await calcPage.checkEmptyInput("0_ZDV"); await calcPage.checkEmptyInput("0_L"); }); // check downstream basin inputs - node = element(by.css("g[id^='flowchart-aval-']")); // Mermaid generated id + node = $("g[id^='flowchart-aval-']"); // Mermaid generated id await node.click(); - await browser.sleep(200); + await browser.pause(200); calcPage.checkEmptyInput("Q"); // Z1 is calculated calcPage.checkEmptyInput("Z2"); @@ -70,12 +69,12 @@ describe("ngHyd − check that predam fields are empty", () => { // open predam calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(30); - await browser.sleep(200); + await browser.pause(200); // add basin - const addBasinBtn = element(by.id("add-basin")); + const addBasinBtn = $("#add-basin"); await addBasinBtn.click(); - await browser.sleep(200); + await browser.pause(200); // check "surface" input is empty let inp = calcPage.getInputById("3_S"); @@ -92,14 +91,14 @@ describe("ngHyd − check that predam fields are empty", () => { // open predam calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(30); - await browser.sleep(200); + await browser.pause(200); // add wall - const addWallBtn = element(by.id("add-wall")); + const addWallBtn = $("#add-wall"); await addWallBtn.click(); // connect basins - const connectBasinsBtn = element(by.id("validate-connect-basins")); + const connectBasinsBtn = $("#validate-connect-basins"); await connectBasinsBtn.click(); // check ZDV input is empty diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index 7b3a51cf7..102fb8194 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; @@ -20,9 +19,9 @@ describe("check that low iteration count leads to log messages", () => { beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.disableEvilEmptyFields(); - await browser.sleep(100); + await browser.pause(100); }); it("", async () => { @@ -34,7 +33,7 @@ describe("check that low iteration count leads to log messages", () => { // open predam calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(30); - await browser.sleep(200); + await browser.pause(200); // run calculation const calcButton = calcPage.getCalculateButton(); diff --git a/e2e/preferences.e2e-spec.ts b/e2e/preferences.e2e-spec.ts index e7c3d95f3..6b00a4d81 100644 --- a/e2e/preferences.e2e-spec.ts +++ b/e2e/preferences.e2e-spec.ts @@ -1,5 +1,4 @@ import { PreferencesPage } from "./preferences.po"; -import { browser } from "protractor"; /** * Open app preferences, check the default values, the validators, the language change @@ -38,14 +37,14 @@ describe("ngHyd − preferences page", () => { const numericFields = page.getNumericFormFields(); await numericFields.each(async (nf) => { // add a letter after the numerical value - await page.getInputForField(nf).sendKeys("d"); - expect(page.getErrorsForField(nf).isPresent()).toBe(true); + await page.getInputForField(nf).setValue("d"); + expect(page.getErrorsForField(nf).isExisting()).toBe(true); // empty input - await page.getInputForField(nf).clear(); - expect(page.getErrorsForField(nf).isPresent()).toBe(true); + await page.getInputForField(nf).clearValue(); + expect(page.getErrorsForField(nf).isExisting()).toBe(true); // send bad value - await page.getInputForField(nf).sendKeys("50000"); - expect(page.getErrorsForField(nf).isPresent()).toBe(true); + await page.getInputForField(nf).setValue("50000"); + expect(page.getErrorsForField(nf).isExisting()).toBe(true); }); }); @@ -53,18 +52,18 @@ describe("ngHyd − preferences page", () => { const numericFields = page.getNumericFormFields(); await numericFields.each(async (nf) => { // send correct value - await page.getInputForField(nf).clear(); - await page.getInputForField(nf).sendKeys("1"); - expect(page.getErrorsForField(nf).isPresent()).toBe(false); + await page.getInputForField(nf).clearValue(); + await page.getInputForField(nf).setValue("1"); + expect(page.getErrorsForField(nf).isExisting()).toBe(false); }); }); it("when language is changed, language should change", async () => { await page.changeLanguage(0); - await browser.sleep(200); + await browser.pause(200); const val1 = await page.getHeader1().getText(); await page.changeLanguage(1); - await browser.sleep(200); + await browser.pause(200); const val2 = await page.getHeader1().getText(); expect(val1).not.toEqual(val2); }); diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index 39604b8cb..401b32dca 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -1,33 +1,32 @@ -import { browser, by, element, ElementFinder } from "protractor"; import { changeSelectValue } from "./util.po"; export class PreferencesPage { navigateTo() { - return browser.get("/#/setup"); + return browser.url("/#/setup"); } getHeader1() { - return element(by.css("h1")); + return $("h1"); } getLanguageSelect() { - return element(by.css(`mat-select[data-testid="language-select"]`)); + return $(`mat-select[data-testid="language-select"]`); } getEmptyFieldsCheckbox() { - return element(by.css(`mat-checkbox#cb_emptyFields`)); + return $(`mat-checkbox#cb_emptyFields`); } getInputLabels() { - return element.all(by.css("label.mat-form-field-label")); + return $$("label.mat-form-field-label"); } getNumericFormFields() { - return element.all(by.css(`mat-form-field[data-testclass="numeric-input"]`)); + return $$(`mat-form-field[data-testclass="numeric-input"]`); } getInputForField(ff: ElementFinder) { - return ff.element(by.css("input")); + return ff.$("input"); } /** @@ -35,11 +34,11 @@ export class PreferencesPage { */ getInputFromName(name: string) { const cssSelector: string = `input[name="${name}"]`; - return element(by.css(cssSelector)); + return $(cssSelector); } getErrorsForField(ff: ElementFinder) { - return ff.element(by.css("mat-error")); + return ff.$("mat-error"); } async changeLanguage(index: number) { @@ -49,7 +48,7 @@ export class PreferencesPage { async enableEvilEmptyFields() { const cb = this.getEmptyFieldsCheckbox(); - const underlyingCB = cb.element(by.css(`input.mat-checkbox-input`)); + const underlyingCB = cb.$(`input.mat-checkbox-input`); if (!underlyingCB.isSelected()) { await cb.click(); } @@ -57,7 +56,7 @@ export class PreferencesPage { async disableEvilEmptyFields() { const cb = this.getEmptyFieldsCheckbox(); - const underlyingCB = cb.element(by.css(`input.mat-checkbox-input`)); + const underlyingCB = cb.$(`input.mat-checkbox-input`); if (underlyingCB.isSelected()) { await cb.click(); } @@ -69,7 +68,7 @@ export class PreferencesPage { */ async setEmptyFields(b: boolean) { await this.navigateTo(); - await browser.sleep(200); + await browser.pause(200); if (b) { await this.enableEvilEmptyFields(); @@ -77,12 +76,12 @@ export class PreferencesPage { else { await this.disableEvilEmptyFields(); } - await browser.sleep(200); + await browser.pause(200); } async setIterationCount(n: number) { const input = this.getInputFromName("nmi"); - input.clear(); - await input.sendKeys(n.toString()); + input.clearValue(); + await input.setValue(n.toString()); } } diff --git a/e2e/pressure-loss-empty-fields.e2e-spec.ts b/e2e/pressure-loss-empty-fields.e2e-spec.ts index f02085bc3..b040c04cc 100644 --- a/e2e/pressure-loss-empty-fields.e2e-spec.ts +++ b/e2e/pressure-loss-empty-fields.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue } from "./util.po"; @@ -22,19 +21,19 @@ describe("Check fields are empty in 'pressure loss' calculator when created with // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("with Lechapt-Calmon pressure loss law", async () => { // open "pressure loss" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(35); - await browser.sleep(200); + await browser.pause(200); // select Lechapt-Calmon pressure loss law const materialSelect = calcPage.getSelectById("select_pressurelosstype"); await changeSelectValue(materialSelect, 0); - await browser.sleep(200); + await browser.pause(200); expect(calcPage.checkEmptyOrFilledFields(["Q", "D", "Lg", "Kloc"], [true, true, true, true])); }); diff --git a/e2e/pressure-loss.e2e-spec.ts b/e2e/pressure-loss.e2e-spec.ts index af37c218b..38b8e993a 100644 --- a/e2e/pressure-loss.e2e-spec.ts +++ b/e2e/pressure-loss.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue } from "./util.po"; @@ -22,7 +21,7 @@ describe("Pressure loss - ", () => { // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); describe("modify pressure loss law displays the appropriate fields - ", () => { @@ -30,12 +29,12 @@ describe("Pressure loss - ", () => { // open "pressure loss" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(35); - await browser.sleep(200); + await browser.pause(200); // select Lechapt-Calmon pressure loss law const materialSelect = calcPage.getSelectById("select_pressurelosstype"); await changeSelectValue(materialSelect, 0); - await browser.sleep(200); + await browser.pause(200); // check inputs presence expect(await calcPage.isNgParamPresent("Q")).toBe(true); @@ -54,18 +53,18 @@ describe("Pressure loss - ", () => { // open "pressure loss" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(35); - await browser.sleep(200); + await browser.pause(200); // select Strickler pressure loss law const materialSelect = calcPage.getSelectById("select_pressurelosstype"); await changeSelectValue(materialSelect, 1); - await browser.sleep(200); + await browser.pause(200); debugger // check inputs presence - const ks = element(by.id("0_Ks")); - expect(await ks.isPresent()).toBe(true); // isNgParamPresent does not work on "0_Ks". Why ? Mystery... + const ks = $("#0_Ks"); + expect(await ks.isExisting()).toBe(true); // isNgParamPresent does not work on "0_Ks". Why ? Mystery... expect(await calcPage.isNgParamPresent("Q")).toBe(true); expect(await calcPage.isNgParamPresent("D")).toBe(true); diff --git a/e2e/regime-uniforme-empty-fields.e2e-spec.ts b/e2e/regime-uniforme-empty-fields.e2e-spec.ts index 6c5f1887f..636ba6336 100644 --- a/e2e/regime-uniforme-empty-fields.e2e-spec.ts +++ b/e2e/regime-uniforme-empty-fields.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; @@ -21,14 +20,14 @@ describe("Check fields are empty in 'uniform flow' calculator when created with // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("", async () => { // open "uniform flow" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); - await browser.sleep(200); + await browser.pause(200); expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "If", "YB", "Q", "Y"], [true, true, true, true, true, true])) }); diff --git a/e2e/remous.e2e-spec.ts b/e2e/remous.e2e-spec.ts index e6a584333..80fb6cd12 100644 --- a/e2e/remous.e2e-spec.ts +++ b/e2e/remous.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; -import { browser } from "protractor"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; @@ -28,7 +27,7 @@ describe("ngHyd − remous", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when leaving calculated remous page then coming back to it, logs should not be duplicated", async () => { @@ -36,20 +35,20 @@ describe("ngHyd − remous", () => { // 1. create new Remous await listPage.clickMenuEntryForCalcType(4); - await browser.sleep(300); + await browser.pause(300); // 2. calculate it, there should be 6 messages in the log await calcPage.getCalculateButton().click(); expect(await calcPage.nbLogEntries()).toBe(6); - await browser.sleep(300); + await browser.pause(300); // 3. go to home page (simplest example) await navBar.clickNewCalculatorButton(); - await browser.sleep(300); + await browser.pause(300); // 4. go back to Remous await navBar.clickCalculatorTab(0); - await browser.sleep(300); + await browser.pause(300); // 5. there should still be 6 messages in the log expect(await calcPage.nbLogEntries()).toBe(6); @@ -60,17 +59,17 @@ describe("ngHyd − remous", () => { // 1. create new Remous await listPage.clickMenuEntryForCalcType(4); - await browser.sleep(300); + await browser.pause(300); // 2. Set to trapezoidal section with bank slope of 2m/m and 20 meter width bed await changeSelectValue(calcPage.getSelectById("select_section"), 2); - await browser.sleep(300); - await calcPage.getInputById("LargeurFond").clear(); - await browser.sleep(300); - await calcPage.getInputById("LargeurFond").sendKeys("20"); - await calcPage.getInputById("Fruit").clear(); - await browser.sleep(300); - await calcPage.getInputById("Fruit").sendKeys("2"); + await browser.pause(300); + await calcPage.getInputById("LargeurFond").clearValue(); + await browser.pause(300); + await calcPage.getInputById("LargeurFond").setValue("20"); + await calcPage.getInputById("Fruit").clearValue(); + await browser.pause(300); + await calcPage.getInputById("Fruit").setValue("2"); // 3. Calculate, the calculation should succeed await calcPage.getCalculateButton().click(); @@ -81,15 +80,15 @@ describe("ngHyd − remous", () => { it("Check that calculation with dx >= reach length fails", async () => { // load backwater curve session file with Dx>=Long await navBar.clickMenuButton(); - await browser.sleep(500); + await browser.pause(500); await sidenav.clickLoadSessionButton(); - await browser.sleep(500); + await browser.pause(500); await sidenav.loadSessionFile("./session/session-remous-dx-bief.json"); - await browser.sleep(1000); + await browser.pause(1000); // Calculate, the calculation should fail await calcPage.getCalculateButton().click(); - await browser.sleep(1000); + await browser.pause(1000); // check error message in log expect(await calcPage.nbLogEntries()).toBe(1); diff --git a/e2e/reset-param-mode.e2e-spec.ts b/e2e/reset-param-mode.e2e-spec.ts index b4c87cf4e..f8a061df1 100644 --- a/e2e/reset-param-mode.e2e-spec.ts +++ b/e2e/reset-param-mode.e2e-spec.ts @@ -1,5 +1,4 @@ import { ListPage } from "./list.po"; -import { browser, by, element } from "protractor"; /** * Parameter mode should be set to its previous mode (fixed/var/...) when cancel is pressed @@ -15,26 +14,26 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { it("when min/max/list values dialog is cancelled on 'fish ladder: fall' calculator", async () => { // start page await listPage.navigateTo(); - await browser.sleep(500); + await browser.pause(500); // open 'PAB fall' calculator await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(500); + await browser.pause(500); // click "calc" radio on Z1 parameter - const z1calcbtn = element(by.id("mat-button-toggle-3")); + const z1calcbtn = $("#mat-button-toggle-3"); await z1calcbtn.click(); - await browser.sleep(200); + await browser.pause(200); // click "var" radio on Z1 parameter - const z1varbtn = element(by.id("mat-button-toggle-2")); + const z1varbtn = $("#mat-button-toggle-2"); await z1varbtn.click(); - await browser.sleep(200); + await browser.pause(200); // click cancel button - const cancelbtn = element(by.id("btn-cancel")); + const cancelbtn = $("#btn-cancel"); await cancelbtn.click(); - await browser.sleep(200); + await browser.pause(200); // check Z1 var toggle is not checked expect(await z1varbtn.getAttribute("ng-reflect-checked")).toBe("false"); @@ -46,32 +45,32 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { it("when min/max/list values dialog is cancelled on 'fish ladder' calculator", async () => { // start page await listPage.navigateTo(); - await browser.sleep(500); + await browser.pause(500); // open PAB calculator await listPage.clickMenuEntryForCalcType(15); - await browser.sleep(500); + await browser.pause(500); // "fixed" radio on Q parameter - const qfixbtn = element(by.id("mat-button-toggle-1")); - await browser.sleep(50); + const qfixbtn = $("#mat-button-toggle-1"); + await browser.pause(50); // "var" radio on Z1 parameter - const z1varbtn = element(by.id("mat-button-toggle-6")); - await browser.sleep(50); + const z1varbtn = $("#mat-button-toggle-6"); + await browser.pause(50); // "calc" radio on Z1 parameter - const z1calcbtn = element(by.id("mat-button-toggle-7")); - await browser.sleep(50); + const z1calcbtn = $("#mat-button-toggle-7"); + await browser.pause(50); // click "var" radio on Z1 parameter await z1varbtn.click(); - await browser.sleep(200); + await browser.pause(200); // click cancel button - const cancelbtn = element(by.id("btn-cancel")); + const cancelbtn = $("#btn-cancel"); await cancelbtn.click(); - await browser.sleep(200); + await browser.pause(200); // check Q fix toggle is checked expect(await qfixbtn.getAttribute("ng-reflect-checked")).toBe("true"); diff --git a/e2e/reset-results.e2e-spec.ts b/e2e/reset-results.e2e-spec.ts index e0582c7f0..9d1e3dba6 100644 --- a/e2e/reset-results.e2e-spec.ts +++ b/e2e/reset-results.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; @@ -26,26 +25,26 @@ describe("Check results are reset after application settings modification - ", ( // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); async function runTestWithParamater(param: string, val1: number, val2: number) { // set starting compute precision const input = prefPage.getInputFromName(param); - await input.clear(); - await browser.sleep(20); - await input.sendKeys(val1.toString()); - await browser.sleep(200); + await input.clearValue(); + await browser.pause(20); + await input.setValue(val1.toString()); + await browser.pause(200); // open "fish ladder: fall" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // click "compute" button const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(200); + await browser.pause(200); // results should be here let hasResults = await calcPage.hasResults(); @@ -53,16 +52,16 @@ describe("Check results are reset after application settings modification - ", ( // reopen settings await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); const setupBtn = sideNav.getSetupButton(); await setupBtn.click(); - await browser.sleep(200); + await browser.pause(200); // modify compute precision - await input.clear(); - await browser.sleep(20); - await input.sendKeys(val2.toString()); - await browser.sleep(200); + await input.clearValue(); + await browser.pause(20); + await input.setValue(val2.toString()); + await browser.pause(200); // back to calculator await navBar.openNthCalculator(0); diff --git a/e2e/section-empty-fields.e2e-spec.ts b/e2e/section-empty-fields.e2e-spec.ts index 9a72987ac..947930354 100644 --- a/e2e/section-empty-fields.e2e-spec.ts +++ b/e2e/section-empty-fields.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; @@ -21,14 +20,14 @@ describe("Check fields are empty in 'parametric section' calculator when created // enable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.enableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("", async () => { // open "parametric section" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(2); - await browser.sleep(200); + await browser.pause(200); expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "If", "YB", "Q", "Y"], [true, true, true, true, true, true])); }); diff --git a/e2e/select-default-value.e2e-spec.ts b/e2e/select-default-value.e2e-spec.ts index 9ec1205cd..a1323b092 100644 --- a/e2e/select-default-value.e2e-spec.ts +++ b/e2e/select-default-value.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; @@ -21,17 +20,17 @@ describe("check the select default value - ", () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); await prefPage.changeLanguage(1); // fr - await browser.sleep(200); + await browser.pause(200); }); it("in the 'backwater curve' calculator", async () => { // open backwater curve calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(4); - await browser.sleep(200); + await browser.pause(200); // in the calculator configuration file, the default resolution method is 'Trapezes'. // let's check this... @@ -44,7 +43,7 @@ describe("check the select default value - ", () => { // open "up/downstream elevations of a reach" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(21); - await browser.sleep(200); + await browser.pause(200); // in the calculator configuration file, the default section method is 'Rectangulaire'. // let's check this... diff --git a/e2e/sidenav.po.ts b/e2e/sidenav.po.ts index 596db0a86..94ba72779 100644 --- a/e2e/sidenav.po.ts +++ b/e2e/sidenav.po.ts @@ -1,65 +1,64 @@ -import { browser, by, element } from "protractor"; import * as path from "path"; export class SideNav { getLoadSessionButton() { - return element(by.css("#side-nav-load-session")); + return $("#side-nav-load-session"); } getNewSessionButton() { - return element(by.css("#side-nav-empty-session")); + return $("#side-nav-empty-session"); } getDiagramButton() { - return element(by.css("#side-nav-diagram")); + return $("#side-nav-diagram"); } getSetupButton() { - return element(by.css("#side-nav-setup")); + return $("#side-nav-setup"); } getFileInput() { - return element(by.css(`dialog-load-session input[type="file"]`)); + return $(`dialog-load-session input[type="file"]`); } getFileLoadButton() { - return element(by.css(`dialog-load-session button[type="submit"]`)); + return $(`dialog-load-session button[type="submit"]`); } getConfirmNewSessionButton() { - return element(by.css(`button#confirm-new-session`)); + return $(`button#confirm-new-session`); } getNotesButton() { - return element(by.css("#side-nav-session-props")); + return $("#side-nav-session-props"); } async clickLoadSessionButton() { const ncb = this.getLoadSessionButton(); - await browser.sleep(500); + await browser.pause(500); await ncb.click(); } async clickDiagramButton() { const ncb = this.getDiagramButton(); - await browser.sleep(500); + await browser.pause(500); await ncb.click(); } async clickNewSessionButton() { const ncb = this.getNewSessionButton(); - await browser.sleep(200); + await browser.pause(200); await ncb.click(); - await browser.sleep(200); + await browser.pause(200); await this.getConfirmNewSessionButton().click(); } async loadSessionFile(file: string, click: boolean = true) { const absolutePath = path.resolve(__dirname, file); const input = this.getFileInput(); - await input.sendKeys(absolutePath); - await browser.sleep(500); + await input.setValue(absolutePath); + await browser.pause(500); if (click) { await this.getFileLoadButton().click(); } @@ -67,7 +66,7 @@ export class SideNav { async clickNotesButton() { const nb = this.getNotesButton(); - await browser.sleep(200); + await browser.pause(200); await nb.click(); } } diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index 1b4740864..2b09a3387 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -1,7 +1,6 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue, scrollPageToTop } from "./util.po"; @@ -29,21 +28,21 @@ describe("Solveur - ", () => { await prefPage.setEmptyFields(false); // force language to prevent issues due to default browser language await prefPage.changeLanguage(1); // fr - await browser.sleep(200); + await browser.pause(200); await navbar.clickNewCalculatorButton(); }); it("load > calculate", async () => { await navbar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.sleep(200); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-solveur-chutes.json"); - await browser.sleep(200); + await browser.pause(200); - expect(await navbar.getAllCalculatorTabs().count()).toBe(4); + expect(await navbar.getAllCalculatorTabs().length).toBe(4); await navbar.clickCalculatorTab(3); // n°3 should be the latest // check input values @@ -79,16 +78,16 @@ describe("Solveur - ", () => { it("create > feed > calculate > clone > calculate clone", async () => { // 1. create empty Solveur await listPage.clickMenuEntryForCalcType(22); // Solveur - await browser.sleep(500); + await browser.pause(500); // 2. create PAB:Chute, PAB:Nombre and PAB:Puissance linked to one another await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); // PAB:Chute - await browser.sleep(500); + await browser.pause(500); await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(13); // PAB:Nombre - await browser.sleep(500); + await browser.pause(500); // link DHT to PAB:Chute.DH const dht = calcPage.getInputById("DHT"); await calcPage.setParamMode(dht, "link"); @@ -98,7 +97,7 @@ describe("Solveur - ", () => { await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(6); // PAB:Puissance - await browser.sleep(500); + await browser.pause(500); // link DH to PAB:Nombre.DH const dh_puiss = calcPage.getInputById("DH"); await calcPage.setParamMode(dh_puiss, "link"); @@ -107,10 +106,10 @@ describe("Solveur - ", () => { await navbar.clickCalculatorTab(0); await changeSelectValue(calcPage.getSelectById("select_target_nub"), 1); // "Puissance / PV" - await browser.sleep(500); + await browser.pause(500); await changeSelectValue(calcPage.getSelectById("select_searched_param"), 2); // "Chute / Z2" - await browser.sleep(500); - await calcPage.getInputById("Ytarget").sendKeys("318"); + await browser.pause(500); + await calcPage.getInputById("Ytarget").setValue("318"); // check that "compute" button is active const calcButton = await calcPage.checkCalcButtonEnabled(true); @@ -123,10 +122,10 @@ describe("Solveur - ", () => { await scrollPageToTop(); // otherwise clickCloneCalcButton() fails with "Element is not clickable at point" await calcPage.clickCloneCalcButton(); - await browser.sleep(500); + await browser.pause(500); // 4. check existence of the cloned module - expect(await navbar.getAllCalculatorTabs().count()).toBe(5); + expect(await navbar.getAllCalculatorTabs().length).toBe(5); await navbar.clickCalculatorTab(4); // n°4 should be the latest // check that result is empty @@ -144,24 +143,24 @@ describe("Solveur - ", () => { it("channel flow example > solver > change searched parameter > run calculation", async () => { // open "channel flow with hydraulic structures" example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[1].click(); - await browser.sleep(500); + const examples = await $$("#examples-list .load-example"); + await (await examples)[1].click(); + await browser.pause(500); // select solver tab await navbar.clickCalculatorTab(3); - await browser.sleep(500); + await browser.pause(500); // modify searched parameter const sel = calcPage.getSelectById("select_searched_param"); await changeSelectValue(sel, 11); - await browser.sleep(300); + await browser.pause(300); const selText = await calcPage.getSelectValueText(sel); // run calculation const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(500); + await browser.pause(500); // check "search parameter" value has not changed expect(await calcPage.getSelectValueText(sel)).toEqual(selText); @@ -169,13 +168,13 @@ describe("Solveur - ", () => { it("check solver searched parameter is set to 'bottom slope'", async () => { // open "canal critical slope" example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[3].click(); - await browser.sleep(500); + const examples = await $$("#examples-list .load-example"); + await (await examples)[3].click(); + await browser.pause(500); // select solver tab await navbar.clickCalculatorTab(2); - await browser.sleep(500); + await browser.pause(500); // check selected searched parameter text const sel = calcPage.getSelectById("select_searched_param"); @@ -202,10 +201,10 @@ describe("Solveur - nghyd#601 with empty fields option", () => { async function openCalculator(id: number) { await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(id); - await browser.sleep(200); + await browser.pause(200); } async function openSolver() { @@ -223,10 +222,10 @@ describe("Solveur - nghyd#601 with empty fields option", () => { // check inputs are empty await calcPage.checkEmptyInput("Ytarget"); - await browser.sleep(200); + await browser.pause(200); await calcPage.checkEmptyInput("Xinit"); - await browser.sleep(200); + await browser.pause(200); }); it("check solver with empty fields option does not fill target parameter input", async () => { @@ -239,43 +238,43 @@ describe("Solveur - nghyd#601 with empty fields option", () => { // link Q to first calculator's const inpQ = calcPage.getInputById("Q"); await calcPage.setParamMode(inpQ, "link"); - await browser.sleep(200); + await browser.pause(200); // open new solver calculator await openSolver(); // check target parameter input is empty await calcPage.checkEmptyInput("Ytarget"); - await browser.sleep(200); + await browser.pause(200); // check initial value input is not empty await calcPage.checkEmptyInput("Xinit"); - await browser.sleep(200); + await browser.pause(200); }); it("check removing and recreating solver with empty fields option does not fill target parameter input", async () => { await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open "channel flow with hydraulic structures" example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[1].click(); - await browser.sleep(500); + const examples = await $$("#examples-list .load-example"); + await (await examples)[1].click(); + await browser.pause(500); // close existing "solver" calculator await navBar.middleClickCalculatorTab(3); - await browser.sleep(500); + await browser.pause(500); // open new solver calculator await openSolver(); // check target parameter input is empty await calcPage.checkEmptyInput("Ytarget"); - await browser.sleep(200); + await browser.pause(200); // check initial value input is not empty await calcPage.checkEmptyInput("Xinit", false); - await browser.sleep(200); + await browser.pause(200); }); }); @@ -297,10 +296,10 @@ describe("Solveur - nghyd#601 without empty fields option", () => { async function openCalculator(id: number) { await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(id); - await browser.sleep(200); + await browser.pause(200); } async function openSolver() { @@ -320,10 +319,10 @@ describe("Solveur - nghyd#601 without empty fields option", () => { // check inputs are empty await calcPage.checkEmptyInput("Ytarget"); - await browser.sleep(200); + await browser.pause(200); await calcPage.checkEmptyInput("Xinit"); - await browser.sleep(200); + await browser.pause(200); }); it("check solver without empty fields option fills inputs", async () => { @@ -336,65 +335,65 @@ describe("Solveur - nghyd#601 without empty fields option", () => { // link Q to first calculator's const inpQ = calcPage.getInputById("Q"); await calcPage.setParamMode(inpQ, "link"); - await browser.sleep(200); + await browser.pause(200); // open new solver calculator await openSolver(); // check target parameter input is not empty await calcPage.checkEmptyInput("Ytarget", false); - await browser.sleep(200); + await browser.pause(200); // check initial value input is not empty await calcPage.checkEmptyInput("Xinit", false); - await browser.sleep(200); + await browser.pause(200); }); it("check removing and recreating solver without empty fields option fills inputs", async () => { await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open "channel flow with hydraulic structures" example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[1].click(); - await browser.sleep(500); + const examples = await $$("#examples-list .load-example"); + await (await examples)[1].click(); + await browser.pause(500); // close existing "solver" calculator await navBar.middleClickCalculatorTab(3); - await browser.sleep(500); + await browser.pause(500); // open new solver calculator await openSolver(); // check target parameter input is not empty await calcPage.checkEmptyInput("Ytarget", false); - await browser.sleep(200); + await browser.pause(200); // check initial value input is not empty await calcPage.checkEmptyInput("Xinit", false); - await browser.sleep(200); + await browser.pause(200); }); it(" with empty fields option, check selecting a target module does not fill inputs", async () => { // enable evil option "empty fields on module creation" await prefPage.setEmptyFields(true); - await browser.sleep(200); + await browser.pause(200); await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); // open "channel flow with hydraulic structures" example - const examples = await element.all(by.css("#examples-list .load-example")); - await examples[1].click(); - await browser.sleep(500); + const examples = await $$("#examples-list .load-example"); + await (await examples)[1].click(); + await browser.pause(500); // close existing "solver" calculator await navBar.middleClickCalculatorTab(3); - await browser.sleep(500); + await browser.pause(500); // open new solver calculator await openSolver(); - await browser.sleep(500); + await browser.pause(500); // select other target module const ntc = calcPage.getSelectById("select_target_nub"); @@ -402,7 +401,7 @@ describe("Solveur - nghyd#601 without empty fields option", () => { // check target value input is empty await calcPage.checkEmptyInput("Ytarget", true); - await browser.sleep(200); + await browser.pause(200); }); }); @@ -421,10 +420,10 @@ describe("Solveur - nghyd#606 - a single module cannot be used with solver", () async function openCalculator(id: number) { await navBar.clickNewCalculatorButton(); - await browser.sleep(200); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(id); - await browser.sleep(200); + await browser.pause(200); } async function openSolver() { @@ -448,7 +447,7 @@ describe("Solveur - nghyd#606 - a single module cannot be used with solver", () // set speed as target parameter const trs = calcPage.getSelectById("select_target_result"); await changeSelectValue(trs, 1); - await browser.sleep(200); + await browser.pause(200); // check searched parameter has options const sps = calcPage.getSelectById("select_searched_param"); diff --git a/e2e/translation.e2e-spec.ts b/e2e/translation.e2e-spec.ts index ca1b51b31..00f0e3316 100644 --- a/e2e/translation.e2e-spec.ts +++ b/e2e/translation.e2e-spec.ts @@ -1,6 +1,5 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; -import { browser, by } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; @@ -28,12 +27,12 @@ describe("Check translation", () => { // *** results in french *** prefPage.changeLanguage(1); // fr - await browser.sleep(200); + await browser.pause(200); // open "fish ladder: fall" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // set Z2 to variated mode const inpZ2 = calcPage.getInputById("Z2"); @@ -41,7 +40,7 @@ describe("Check translation", () => { // run calculation await calcPage.getCalculateButton().click(); - await browser.sleep(500); + await browser.pause(500); // "variable for X axis" select label const selXaxis = calcPage.getSelectById("selectX"); @@ -53,30 +52,30 @@ describe("Check translation", () => { // fixed results variables const frr = calcPage.getAllFixedResultsRows(); - let lbl1 = await frr.all(by.css("td")).get(0).getText(); + let lbl1 = await frr.$$("td")[0].getText(); expect(lbl1).toEqual("Cote amont (m)"); // variated results headers const vrh = calcPage.getAllVariatedResultsTableHeaders(); - let lbl2 = await vrh.get(0).getText(); + let lbl2 = await vrh[0].getText(); expect(lbl2).toEqual("Cote aval"); - let lbl3 = await vrh.get(1).getText(); + let lbl3 = await vrh[1].getText(); expect(lbl3).toEqual("Chute (m)"); // *** results in english *** // setup -> english await navBar.clickMenuButton(); - await browser.sleep(200); + await browser.pause(200); const setupBtn = sideNav.getSetupButton(); await setupBtn.click(); - await browser.sleep(200); + await browser.pause(200); await prefPage.changeLanguage(0); // en - await browser.sleep(200); + await browser.pause(200); // back to calculator await navBar.clickCalculatorTab(0); - await browser.sleep(200); + await browser.pause(200); // "variable for X axis" select label expect(await calcPage.getMatselectCurrentOptionText(selXaxis)).toEqual("Downstream elevation"); @@ -85,13 +84,13 @@ describe("Check translation", () => { expect(await calcPage.getMatselectCurrentOptionText(selYaxis)).toEqual("DH : Fall (m)"); // fixed results variables - lbl1 = await frr.all(by.css("td")).get(0).getText(); + lbl1 = await frr.$$("td")[0].getText(); expect(lbl1).toEqual("Upstream elevation (m)"); // variated results headers - lbl2 = await vrh.get(0).getText(); + lbl2 = await vrh[0].getText(); expect(lbl2).toEqual("Downstream elevation"); - lbl3 = await vrh.get(1).getText(); + lbl3 = await vrh[1].getText(); expect(lbl3).toEqual("Fall (m)"); }); }); diff --git a/e2e/util.po.ts b/e2e/util.po.ts index aded71c16..3d6b41b9f 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -1,18 +1,16 @@ -import { ElementFinder, browser, by, element } from "protractor"; - /** * scroll page to make element visible */ export async function scrollToElement(elem: ElementFinder) { - await browser.executeScript("arguments[0].scrollIntoView({ block: 'center' });", elem.getWebElement()); - await browser.sleep(50); + await browser.execute("arguments[0].scrollIntoView({ block: 'center' });", elem); + await browser.pause(50); } /** * scroll page to top */ export async function scrollPageToTop() { - await browser.executeScript("window.scrollTo(0, 0);"); + await browser.execute("window.scrollTo(0, 0);"); } /** @@ -31,7 +29,7 @@ export function expectNumber(msg: string, val: number, expected: number) { export async function changeSelectValue(elt: ElementFinder, index: number) { await elt.click(); const optionId = ".cdk-overlay-container mat-option:nth-of-type(" + (index + 1) + ")"; - const option = element(by.css(optionId)); + const option = $(optionId); await option.click(); - await browser.sleep(200); + await browser.pause(200); } diff --git a/e2e/valeurs-erronees.e2e-spec.ts b/e2e/valeurs-erronees.e2e-spec.ts index 73f815a39..716ce4060 100644 --- a/e2e/valeurs-erronees.e2e-spec.ts +++ b/e2e/valeurs-erronees.e2e-spec.ts @@ -1,4 +1,3 @@ -import { browser } from "protractor"; import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; @@ -20,37 +19,37 @@ describe("ngHyd - check invalid values are removed - ", () => { beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); - await browser.sleep(200); + await browser.pause(200); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("when switching to another calculator", async () => { // open PAB dimensions calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); - await browser.sleep(200); + await browser.pause(200); // modify W input with invalid value const inputW = calcPage.getInputById("W"); - await browser.sleep(200); - await inputW.clear(); - await browser.sleep(200); - await inputW.sendKeys("-1"); - await browser.sleep(200); + await browser.pause(200); + await inputW.clearValue(); + await browser.pause(200); + await inputW.setValue("-1"); + await browser.pause(200); // open another calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); - await browser.sleep(200); + await browser.pause(200); // back to first calculator await navBar.openNthCalculator(0); - await browser.sleep(200); + await browser.pause(200); // check invalid value is removed const w = await inputW.getAttribute("value"); - await browser.sleep(200); + await browser.pause(200); expect(w).toEqual(""); // check that "compute" button is disabled diff --git a/e2e/variable-param-cancel.e2e-spec.ts b/e2e/variable-param-cancel.e2e-spec.ts index c76b73945..46219fd4b 100644 --- a/e2e/variable-param-cancel.e2e-spec.ts +++ b/e2e/variable-param-cancel.e2e-spec.ts @@ -1,5 +1,4 @@ import { ListPage } from "./list.po"; -import { by, element } from "protractor"; /** * Check that a cancel button is present in min/max/list edition dialog @@ -20,11 +19,11 @@ describe("ngHyd - check cancel button for variable parameters - ", () => { await listPage.clickMenuEntryForCalcType(12); // click "var" radio on Z1 parameter - const z1btn = element(by.id("mat-button-toggle-2-button")); + const z1btn = $("#mat-button-toggle-2-button"); await z1btn.click(); // cancel button presence - const cancelbtn = element(by.id("btn-cancel")); - expect(await cancelbtn.isPresent() && await cancelbtn.isDisplayed()).toBeTruthy(); + const cancelbtn = $("#btn-cancel"); + expect((await cancelbtn.isExisting()) && (await cancelbtn.isDisplayed())).toBeTruthy(); }); }); -- GitLab From 54aa396d47e064f1a53fea7a832b47627c15bdf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 14 Apr 2023 13:56:53 +0200 Subject: [PATCH 06/25] test(e2e): add @wdio/types NPM package refs #618 --- package-lock.json | 3 +-- package.json | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 98cf0980e..ae33daccd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,6 +27,7 @@ "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", "@wdio/codemod": "^0.12.0", + "@wdio/types": "^8.8.0", "angular2-hotkeys": "^13.1.0", "chartjs-plugin-zoom": "^2.0.0", "core-js": "^3.23.3", @@ -6021,7 +6022,6 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.8.0.tgz", "integrity": "sha512-Ai6yIlwWB32FUfvQKCqSa6nSyHIhSF5BOU9OfE7I2XYkLAJTxu8B6NORHQ+rgoppHSWc4D2V9r21y3etF8AGnQ==", - "dev": true, "dependencies": { "@types/node": "^18.0.0" }, @@ -30464,7 +30464,6 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.8.0.tgz", "integrity": "sha512-Ai6yIlwWB32FUfvQKCqSa6nSyHIhSF5BOU9OfE7I2XYkLAJTxu8B6NORHQ+rgoppHSWc4D2V9r21y3etF8AGnQ==", - "dev": true, "requires": { "@types/node": "^18.0.0" } diff --git a/package.json b/package.json index faa6dfc19..da623ef02 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", "@wdio/codemod": "^0.12.0", + "@wdio/types": "^8.8.0", "angular2-hotkeys": "^13.1.0", "chartjs-plugin-zoom": "^2.0.0", "core-js": "^3.23.3", -- GitLab From 27cd0d484c60eb440328054012eb2b7141beaf60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 14 Apr 2023 14:04:29 +0200 Subject: [PATCH 07/25] test(e2e): configure wdio to point to e2e folder refs #618 --- wdio.conf.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wdio.conf.ts b/wdio.conf.ts index e17de0a7e..8f5d4c440 100644 --- a/wdio.conf.ts +++ b/wdio.conf.ts @@ -10,7 +10,7 @@ export const config: Options.Testrunner = { autoCompileOpts: { autoCompile: true, tsNodeOpts: { - project: './test/tsconfig.json', + project: './e2e/tsconfig.e2e.json', transpileOnly: true } }, @@ -33,7 +33,7 @@ export const config: Options.Testrunner = { // will be called from there. // specs: [ - './test/specs/**/*.ts' + './e2e/**/*.ts' ], // Patterns to exclude. exclude: [ -- GitLab From 50c3266533b6131a785fa4f7339dc76802f65ba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 14 Apr 2023 14:06:13 +0200 Subject: [PATCH 08/25] test(e2e): add @wdio/globals NPM package to fix VSCode error messages refs #618 --- e2e/bief-empty-fields.e2e-spec.ts | 1 + e2e/calculator.po.ts | 1 + e2e/list.po.ts | 2 + e2e/navbar.po.ts | 2 + e2e/preferences.po.ts | 1 + e2e/util.po.ts | 2 + package-lock.json | 927 +++++++++++++++--------------- package.json | 1 + 8 files changed, 473 insertions(+), 464 deletions(-) diff --git a/e2e/bief-empty-fields.e2e-spec.ts b/e2e/bief-empty-fields.e2e-spec.ts index bf33f257a..6977ce3ee 100644 --- a/e2e/bief-empty-fields.e2e-spec.ts +++ b/e2e/bief-empty-fields.e2e-spec.ts @@ -2,6 +2,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check fields are empty in 'up/downstream elevations of a reach' calculator when created with 'empty fields' option", () => { let listPage: ListPage; diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 7e2074d14..07a745a13 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -1,4 +1,5 @@ import { scrollPageToTop, scrollToElement } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' export class CalculatorPage { diff --git a/e2e/list.po.ts b/e2e/list.po.ts index 7d09d78bc..bfe96bb14 100644 --- a/e2e/list.po.ts +++ b/e2e/list.po.ts @@ -1,3 +1,5 @@ +import { browser, $, $$, expect } from '@wdio/globals' + export class ListPage { navigateTo() { return browser.url("/#/list"); diff --git a/e2e/navbar.po.ts b/e2e/navbar.po.ts index 9343ede38..aa2c8630d 100644 --- a/e2e/navbar.po.ts +++ b/e2e/navbar.po.ts @@ -1,3 +1,5 @@ +import { browser, $, $$, expect } from '@wdio/globals' + export class Navbar { getAllCalculatorTabs() { return $$("#tabs-container button.calculator-button"); diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index 401b32dca..49e057669 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -1,4 +1,5 @@ import { changeSelectValue } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' export class PreferencesPage { navigateTo() { diff --git a/e2e/util.po.ts b/e2e/util.po.ts index 3d6b41b9f..d4c99fb85 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -1,3 +1,5 @@ +import { browser, $, $$, expect } from '@wdio/globals' + /** * scroll page to make element visible */ diff --git a/package-lock.json b/package-lock.json index ae33daccd..32150d1ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,6 +27,7 @@ "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", "@wdio/codemod": "^0.12.0", + "@wdio/globals": "^8.8.2", "@wdio/types": "^8.8.0", "angular2-hotkeys": "^13.1.0", "chartjs-plugin-zoom": "^2.0.0", @@ -3880,7 +3881,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", - "dev": true, + "devOptional": true, "dependencies": { "jest-get-type": "^29.4.3" }, @@ -3892,7 +3893,7 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, + "devOptional": true, "dependencies": { "@sinclair/typebox": "^0.25.16" }, @@ -3904,7 +3905,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", - "dev": true, + "devOptional": true, "dependencies": { "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -3921,7 +3922,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3936,7 +3937,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3952,7 +3953,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3964,13 +3965,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "devOptional": true }, "node_modules/@jest/types/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -3979,7 +3980,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4269,7 +4270,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.4.0.tgz", "integrity": "sha512-3iB5pWn9Sr55PKKwqFWSWjLsTKCOEhKNI+uV3BZesgXuA3IhsX8I3hW0HI+3ksMIPkh2mVYzKSpvgq3oicjG2Q==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -4299,7 +4300,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, + "devOptional": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -4313,7 +4314,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -4333,7 +4334,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "dependencies": { "pump": "^3.0.0" }, @@ -4348,7 +4349,7 @@ "version": "17.7.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dev": true, + "devOptional": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4382,7 +4383,7 @@ "version": "0.25.24", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true + "devOptional": true }, "node_modules/@sindresorhus/is": { "version": "0.14.0", @@ -4600,7 +4601,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true + "devOptional": true }, "node_modules/@types/http-proxy": { "version": "1.17.9", @@ -4614,13 +4615,13 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "devOptional": true }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, + "devOptional": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -4629,7 +4630,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, + "devOptional": true, "dependencies": { "@types/istanbul-lib-report": "*" } @@ -4702,7 +4703,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true + "devOptional": true }, "node_modules/@types/pako": { "version": "1.0.4", @@ -4794,7 +4795,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "devOptional": true }, "node_modules/@types/verror": { "version": "1.10.6", @@ -4807,7 +4808,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.2.tgz", "integrity": "sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==", - "dev": true + "devOptional": true }, "node_modules/@types/ws": { "version": "8.5.3", @@ -4821,7 +4822,7 @@ "version": "17.0.13", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dev": true, + "devOptional": true, "dependencies": { "@types/yargs-parser": "*" } @@ -4830,7 +4831,7 @@ "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "devOptional": true }, "node_modules/@types/yauzl": { "version": "2.10.0", @@ -5766,7 +5767,7 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.8.0.tgz", "integrity": "sha512-gm8gXqpiIR0EU9Blkqmxe+xsEoKS2EXpWrKlx2JXyx3Yf7By0UNsZVZHMSO8lLunzUjYIntpWYpmKmBmnlrnKQ==", - "dev": true, + "devOptional": true, "dependencies": { "@wdio/logger": "8.6.6", "@wdio/types": "8.8.0", @@ -5785,7 +5786,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", - "dev": true, + "devOptional": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -5797,7 +5798,7 @@ "version": "9.3.5", "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, + "devOptional": true, "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", @@ -5815,7 +5816,7 @@ "version": "8.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, + "devOptional": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5830,7 +5831,7 @@ "version": "4.2.8", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -5839,7 +5840,6 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.8.2.tgz", "integrity": "sha512-uwImTbqbFlHezAl4qtdXMZtZQo22bhENmt6eQ0pJwevtO1U53ZB4x9uDOYtSym8xKCdZILu46uI/THDm+vm2hA==", - "dev": true, "engines": { "node": "^16.13 || >=18" }, @@ -5889,7 +5889,7 @@ "version": "8.6.6", "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", - "dev": true, + "devOptional": true, "dependencies": { "chalk": "^5.1.2", "loglevel": "^1.6.0", @@ -5904,7 +5904,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "dev": true, + "devOptional": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -5916,13 +5916,13 @@ "version": "8.8.1", "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.8.1.tgz", "integrity": "sha512-nDaycUcm/ATLxcjim0fJyRiezXyyj4ZCq+Xf0S2Cubc0k7+DceFBt7KIMsernNVh2pelzFHEEwxh4DLaqQ71Wg==", - "dev": true + "devOptional": true }, "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==", - "dev": true, + "devOptional": true, "dependencies": { "@types/node": "^18.0.0" }, @@ -6033,7 +6033,7 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", - "dev": true, + "devOptional": true, "dependencies": { "@wdio/logger": "8.6.6", "@wdio/types": "8.8.0", @@ -6639,7 +6639,7 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", - "dev": true, + "devOptional": true, "dependencies": { "archiver-utils": "^2.1.0", "async": "^3.2.3", @@ -6657,7 +6657,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, + "devOptional": true, "dependencies": { "glob": "^7.1.4", "graceful-fs": "^4.2.0", @@ -6678,7 +6678,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "devOptional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6688,7 +6688,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, + "devOptional": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6708,7 +6708,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6720,13 +6720,13 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true + "devOptional": true }, "node_modules/archiver/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -7135,7 +7135,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.4" }, @@ -7706,7 +7706,7 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, + "devOptional": true, "engines": { "node": "*" } @@ -8101,7 +8101,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "dev": true, + "devOptional": true, "engines": { "node": ">=14.16" } @@ -8364,7 +8364,7 @@ "version": "0.15.1", "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz", "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==", - "dev": true, + "devOptional": true, "dependencies": { "@types/node": "*", "escape-string-regexp": "^4.0.0", @@ -8382,7 +8382,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -8459,7 +8459,7 @@ "version": "0.4.6", "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.6.tgz", "integrity": "sha512-TQOkWRaLI/IWvoP8XC+7jO4uHTIiAUiklXU1T0qszlUFEai9LgKXIBXy3pOS3EnQZ3bQtMbKUPkug0fTAEHCSw==", - "dev": true, + "devOptional": true, "dependencies": { "mitt": "3.0.0" }, @@ -8477,7 +8477,7 @@ "version": "3.6.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -8894,7 +8894,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", - "dev": true, + "devOptional": true, "dependencies": { "buffer-crc32": "^0.2.13", "crc32-stream": "^4.0.2", @@ -8909,7 +8909,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -9286,7 +9286,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "dev": true, + "devOptional": true, "dependencies": { "crc-32": "^1.2.0", "readable-stream": "^3.4.0" @@ -9299,7 +9299,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -9472,7 +9472,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, + "devOptional": true, "dependencies": { "node-fetch": "2.6.7" } @@ -9599,13 +9599,13 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==", - "dev": true + "devOptional": true }, "node_modules/css-value": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", "integrity": "sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==", - "dev": true + "devOptional": true }, "node_modules/css-what": { "version": "6.1.0", @@ -10453,7 +10453,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=16.0.0" } @@ -10498,7 +10498,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, + "devOptional": true, "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -10692,7 +10692,7 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.8.2.tgz", "integrity": "sha512-iD/Xr5rMjx+VD08akiAuiMR5EhWKj9i489rcDm2vdC9iB8u8HY51s9FbmnIrN5OstYma0x2qOF2zKxM/muJTtw==", - "dev": true, + "devOptional": true, "dependencies": { "@types/node": "^18.0.0", "@wdio/config": "8.8.0", @@ -10717,13 +10717,13 @@ "version": "0.0.1124027", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1124027.tgz", "integrity": "sha512-OT2sdgQn4llM9/tVcCvoty733KFFIlXVvESceJsfazhmg/dF7C5e3Z8cIN8jNwIikixuE5rufGtD1cvKHXfOcQ==", - "dev": true + "devOptional": true }, "node_modules/devtools/node_modules/uuid": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "dev": true, + "devOptional": true, "bin": { "uuid": "dist/bin/uuid" } @@ -10732,7 +10732,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", - "dev": true, + "devOptional": true, "dependencies": { "isexe": "^2.0.0" }, @@ -10762,7 +10762,7 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, + "devOptional": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -11104,7 +11104,7 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-3.0.5.tgz", "integrity": "sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==", - "dev": true, + "devOptional": true, "dependencies": { "@types/which": "^2.0.1", "which": "^2.0.2" @@ -11436,7 +11436,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, + "devOptional": true, "dependencies": { "once": "^1.4.0" } @@ -11542,7 +11542,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -11562,7 +11562,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "devOptional": true }, "node_modules/es-module-lexer": { "version": "0.9.3", @@ -13000,7 +13000,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "dev": true, + "devOptional": true, "dependencies": { "@jest/expect-utils": "^29.5.0", "jest-get-type": "^29.4.3", @@ -13016,7 +13016,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.1.3.tgz", "integrity": "sha512-tn7kMH/WVrVwwzPaCXMuFYiGXx15LwpxwkJkC/WmF6xptcqW7kaEZco7sxHjtEXpKV7QVGsfY1Z0PcwW4gj5OA==", - "dev": true, + "devOptional": true, "dependencies": { "expect": "^29.4.0", "jest-matcher-utils": "^29.4.0" @@ -13365,7 +13365,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, + "devOptional": true, "dependencies": { "pend": "~1.2.0" } @@ -13571,7 +13571,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, + "devOptional": true, "dependencies": { "is-callable": "^1.1.3" } @@ -13612,7 +13612,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 14.17" } @@ -13674,7 +13674,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "devOptional": true }, "node_modules/fs-extra": { "version": "10.1.0", @@ -13751,7 +13751,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, + "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14055,7 +14055,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, + "devOptional": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -14112,7 +14112,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "devOptional": true }, "node_modules/graphlib": { "version": "2.1.8", @@ -14259,7 +14259,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, + "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14276,7 +14276,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, + "devOptional": true, "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -14299,7 +14299,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, + "devOptional": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -14406,7 +14406,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, + "devOptional": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -14418,7 +14418,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, + "devOptional": true, "dependencies": { "yallist": "^4.0.0" }, @@ -14500,7 +14500,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "devOptional": true }, "node_modules/http-deceiver": { "version": "1.2.7", @@ -14698,7 +14698,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", - "dev": true, + "devOptional": true, "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" @@ -14888,7 +14888,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", - "dev": true, + "devOptional": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -15037,7 +15037,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, + "devOptional": true, "dependencies": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", @@ -15093,7 +15093,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -15109,7 +15109,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -15128,7 +15128,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, + "devOptional": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -15151,7 +15151,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -15172,7 +15172,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.4" }, @@ -15218,7 +15218,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, + "devOptional": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -15312,7 +15312,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, + "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15341,7 +15341,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, + "devOptional": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -15423,7 +15423,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -15439,7 +15439,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, + "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15448,7 +15448,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -15471,7 +15471,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, + "devOptional": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -15486,7 +15486,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, + "devOptional": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -15501,7 +15501,7 @@ "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, + "devOptional": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -15550,7 +15550,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, + "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15571,7 +15571,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -15970,7 +15970,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", - "dev": true, + "devOptional": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.4.3", @@ -15985,7 +15985,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -16000,7 +16000,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16016,7 +16016,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -16028,13 +16028,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "devOptional": true }, "node_modules/jest-diff/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -16043,7 +16043,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -16055,7 +16055,7 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, + "devOptional": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -16064,7 +16064,7 @@ "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==", - "dev": true, + "devOptional": true, "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.5.0", @@ -16079,7 +16079,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -16094,7 +16094,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16110,7 +16110,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -16122,13 +16122,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "devOptional": true }, "node_modules/jest-matcher-utils/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -16137,7 +16137,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -16149,7 +16149,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", - "dev": true, + "devOptional": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.5.0", @@ -16169,7 +16169,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -16184,7 +16184,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16200,7 +16200,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -16212,13 +16212,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "devOptional": true }, "node_modules/jest-message-util/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -16227,7 +16227,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -16239,7 +16239,7 @@ "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==", - "dev": true, + "devOptional": true, "dependencies": { "@jest/types": "^29.5.0", "@types/node": "*", @@ -16256,7 +16256,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -16271,7 +16271,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16287,7 +16287,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -16299,13 +16299,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "devOptional": true }, "node_modules/jest-util/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -16314,7 +16314,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -16708,7 +16708,7 @@ "version": "0.33.3", "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=14.16" }, @@ -16726,7 +16726,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, + "devOptional": true, "dependencies": { "readable-stream": "^2.0.5" }, @@ -16873,7 +16873,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "^2.6.9", "marky": "^1.2.2" @@ -16883,7 +16883,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "devOptional": true, "dependencies": { "ms": "2.0.0" } @@ -16892,7 +16892,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "devOptional": true }, "node_modules/lines-and-columns": { "version": "1.2.4", @@ -16968,7 +16968,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true + "devOptional": true }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -16979,19 +16979,19 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true + "devOptional": true }, "node_modules/lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true + "devOptional": true }, "node_modules/lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true + "devOptional": true }, "node_modules/lodash.flattendeep": { "version": "4.4.0", @@ -17002,7 +17002,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "devOptional": true }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -17020,13 +17020,13 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", - "dev": true + "devOptional": true }, "node_modules/lodash.zip": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", - "dev": true + "devOptional": true }, "node_modules/log-symbols": { "version": "4.1.0", @@ -17111,7 +17111,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.6.0" }, @@ -17124,7 +17124,7 @@ "version": "0.8.4", "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true + "devOptional": true }, "node_modules/lower-case": { "version": "2.0.2", @@ -17284,7 +17284,7 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", - "dev": true + "devOptional": true }, "node_modules/matcher": { "version": "3.0.0", @@ -17636,7 +17636,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", - "dev": true + "devOptional": true }, "node_modules/mixin-deep": { "version": "1.3.2", @@ -17665,7 +17665,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true + "devOptional": true }, "node_modules/moment-mini": { "version": "2.29.4", @@ -17965,7 +17965,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, + "devOptional": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -18095,7 +18095,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, + "devOptional": true, "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -18448,7 +18448,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -18464,7 +18464,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.4" } @@ -18484,7 +18484,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -18753,7 +18753,7 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/p-iteration/-/p-iteration-1.1.8.tgz", "integrity": "sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8.0.0" } @@ -19090,7 +19090,7 @@ "version": "1.6.4", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.4.tgz", "integrity": "sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==", - "dev": true, + "devOptional": true, "dependencies": { "lru-cache": "^9.0.0", "minipass": "^5.0.0" @@ -19106,7 +19106,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.0.1.tgz", "integrity": "sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==", - "dev": true, + "devOptional": true, "engines": { "node": "14 || >=16.14" } @@ -19115,7 +19115,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -19179,7 +19179,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "devOptional": true }, "node_modules/performance-now": { "version": "2.1.0", @@ -19989,7 +19989,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", - "dev": true, + "devOptional": true, "dependencies": { "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", @@ -20003,7 +20003,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -20074,7 +20074,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.4.0" } @@ -20463,7 +20463,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "devOptional": true }, "node_modules/proxy-middleware": { "version": "0.15.0", @@ -20497,7 +20497,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, + "devOptional": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -20515,7 +20515,7 @@ "version": "19.8.5", "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.8.5.tgz", "integrity": "sha512-zoGhim/oBQbkND6h4Xz4X7l5DkWVH9wH7z0mVty5qa/c0P1Yad47t/npVtt2xS10BiQwzztWKx7Pa2nJ5yykdw==", - "dev": true, + "devOptional": true, "dependencies": { "@puppeteer/browsers": "0.4.0", "chromium-bidi": "0.4.6", @@ -20545,13 +20545,13 @@ "version": "0.0.1107588", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", - "dev": true + "devOptional": true }, "node_modules/puppeteer-core/node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -20571,7 +20571,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "dependencies": { "pump": "^3.0.0" }, @@ -20611,7 +20611,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", "integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==", - "dev": true + "devOptional": true }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -20636,7 +20636,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -20720,7 +20720,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "devOptional": true }, "node_modules/read-cache": { "version": "1.0.0", @@ -20781,7 +20781,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", - "dev": true, + "devOptional": true, "dependencies": { "@types/normalize-package-data": "^2.4.1", "normalize-package-data": "^3.0.2", @@ -20799,7 +20799,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", - "dev": true, + "devOptional": true, "dependencies": { "find-up": "^6.3.0", "read-pkg": "^7.1.0", @@ -20816,7 +20816,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, + "devOptional": true, "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -20832,7 +20832,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, + "devOptional": true, "dependencies": { "p-locate": "^6.0.0" }, @@ -20847,7 +20847,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, + "devOptional": true, "dependencies": { "yocto-queue": "^1.0.0" }, @@ -20862,7 +20862,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, + "devOptional": true, "dependencies": { "p-limit": "^4.0.0" }, @@ -20877,7 +20877,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, + "devOptional": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -20886,7 +20886,7 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=12.20" }, @@ -20898,7 +20898,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, + "devOptional": true, "engines": { "node": ">=12.20" }, @@ -20910,7 +20910,7 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=12.20" }, @@ -20936,7 +20936,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dev": true, + "devOptional": true, "dependencies": { "minimatch": "^5.1.0" } @@ -21074,7 +21074,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -21428,7 +21428,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "devOptional": true }, "node_modules/resolve-from": { "version": "5.0.0", @@ -21493,7 +21493,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/resq/-/resq-1.11.0.tgz", "integrity": "sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==", - "dev": true, + "devOptional": true, "dependencies": { "fast-deep-equal": "^2.0.1" } @@ -21502,7 +21502,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", - "dev": true + "devOptional": true }, "node_modules/restore-cursor": { "version": "3.1.0", @@ -21546,7 +21546,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.5.tgz", "integrity": "sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==", - "dev": true + "devOptional": true }, "node_modules/rimraf": { "version": "3.0.2", @@ -22369,7 +22369,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -22734,7 +22734,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, + "devOptional": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -22744,13 +22744,13 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "devOptional": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, + "devOptional": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -22760,7 +22760,7 @@ "version": "3.0.12", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true + "devOptional": true }, "node_modules/spdy": { "version": "4.0.2", @@ -22893,7 +22893,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, + "devOptional": true, "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -22905,7 +22905,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -23289,7 +23289,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, + "devOptional": true, "dependencies": { "internal-slot": "^1.0.4" }, @@ -23579,7 +23579,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, + "devOptional": true, "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -23591,13 +23591,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "devOptional": true }, "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, + "devOptional": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -23613,7 +23613,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -24015,7 +24015,7 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "devOptional": true }, "node_modules/traverse": { "version": "0.6.7", @@ -24416,7 +24416,7 @@ "version": "1.0.35", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", - "dev": true, + "devOptional": true, "funding": [ { "type": "opencollective", @@ -24463,7 +24463,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, + "devOptional": true, "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -24748,7 +24748,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, + "devOptional": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -24900,7 +24900,7 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.8.2.tgz", "integrity": "sha512-ug+7n0JgRTLG5pGyD53VKValSLFcr0oll1QelH1Gueh/umt3Ipu+SDV+v+lyCZY6CKasCsv80W8oZfpLBj1ClQ==", - "dev": true, + "devOptional": true, "dependencies": { "@types/node": "^18.0.0", "@types/ws": "^8.5.3", @@ -25097,7 +25097,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=14.16" }, @@ -25109,7 +25109,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, + "devOptional": true, "dependencies": { "defer-to-connect": "^2.0.1" }, @@ -25121,7 +25121,7 @@ "version": "10.2.9", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.9.tgz", "integrity": "sha512-CaAMr53AS1Tb9evO1BIWFnZjSr8A4pbXofpsNVWPMDZZj3ZQKHwsQG9BrTqQ4x5ZYJXz1T2b8LLtTZODxSpzbg==", - "dev": true, + "devOptional": true, "dependencies": { "@types/http-cache-semantics": "^4.0.1", "get-stream": "^6.0.1", @@ -25139,7 +25139,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, + "devOptional": true, "dependencies": { "mimic-response": "^3.1.0" }, @@ -25154,7 +25154,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -25166,7 +25166,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" } @@ -25175,7 +25175,7 @@ "version": "12.6.0", "resolved": "https://registry.npmjs.org/got/-/got-12.6.0.tgz", "integrity": "sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==", - "dev": true, + "devOptional": true, "dependencies": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", @@ -25200,13 +25200,13 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "devOptional": true }, "node_modules/webdriver/node_modules/keyv": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "dev": true, + "devOptional": true, "dependencies": { "json-buffer": "3.0.1" } @@ -25215,7 +25215,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "dev": true, + "devOptional": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -25227,7 +25227,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "dev": true, + "devOptional": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -25239,7 +25239,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=14.16" }, @@ -25251,7 +25251,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=12.20" } @@ -25260,7 +25260,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "dev": true, + "devOptional": true, "dependencies": { "lowercase-keys": "^3.0.0" }, @@ -25275,7 +25275,7 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.8.2.tgz", "integrity": "sha512-H3h+sHLg9hfQCPLvpd30hi/ZW4lLy73m4zrZ5kJyuuUf38SZFLcfXD3W1RGig88RQ/75Ui164ugwHasTMiQEgw==", - "dev": true, + "devOptional": true, "dependencies": { "@types/node": "^18.0.0", "@wdio/config": "8.8.0", @@ -25311,7 +25311,7 @@ "version": "5.1.3", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, + "devOptional": true, "dependencies": { "deep-equal": "^2.0.5" } @@ -25320,7 +25320,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "dev": true, + "devOptional": true, "dependencies": { "call-bind": "^1.0.2", "es-get-iterator": "^1.1.2", @@ -25348,7 +25348,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, + "devOptional": true, "engines": { "node": ">=12" }, @@ -25360,13 +25360,13 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "devOptional": true }, "node_modules/webdriverio/node_modules/minimatch": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", - "dev": true, + "devOptional": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -25381,7 +25381,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", - "dev": true, + "devOptional": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -25396,7 +25396,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -25408,7 +25408,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "devOptional": true }, "node_modules/webpack": { "version": "5.75.0", @@ -25702,7 +25702,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, + "devOptional": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -25726,7 +25726,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, + "devOptional": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -25742,7 +25742,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, + "devOptional": true, "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", @@ -25764,7 +25764,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, + "devOptional": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -26200,7 +26200,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, + "devOptional": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -26231,7 +26231,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "dev": true, + "devOptional": true, "dependencies": { "archiver-utils": "^2.1.0", "compress-commons": "^4.1.0", @@ -26245,7 +26245,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -28845,7 +28845,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", - "dev": true, + "devOptional": true, "requires": { "jest-get-type": "^29.4.3" } @@ -28854,7 +28854,7 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, + "devOptional": true, "requires": { "@sinclair/typebox": "^0.25.16" } @@ -28863,7 +28863,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", - "dev": true, + "devOptional": true, "requires": { "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -28877,7 +28877,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -28886,7 +28886,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -28896,7 +28896,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -28905,19 +28905,19 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "devOptional": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "devOptional": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -29132,7 +29132,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.4.0.tgz", "integrity": "sha512-3iB5pWn9Sr55PKKwqFWSWjLsTKCOEhKNI+uV3BZesgXuA3IhsX8I3hW0HI+3ksMIPkh2mVYzKSpvgq3oicjG2Q==", - "dev": true, + "devOptional": true, "requires": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -29148,7 +29148,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, + "devOptional": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -29159,7 +29159,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, + "devOptional": true, "requires": { "@types/yauzl": "^2.9.1", "debug": "^4.1.1", @@ -29171,7 +29171,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "requires": { "pump": "^3.0.0" } @@ -29180,7 +29180,7 @@ "version": "17.7.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", - "dev": true, + "devOptional": true, "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -29208,7 +29208,7 @@ "version": "0.25.24", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true + "devOptional": true }, "@sindresorhus/is": { "version": "0.14.0", @@ -29416,7 +29416,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true + "devOptional": true }, "@types/http-proxy": { "version": "1.17.9", @@ -29430,13 +29430,13 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "devOptional": true }, "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, + "devOptional": true, "requires": { "@types/istanbul-lib-coverage": "*" } @@ -29445,7 +29445,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, + "devOptional": true, "requires": { "@types/istanbul-lib-report": "*" } @@ -29518,7 +29518,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true + "devOptional": true }, "@types/pako": { "version": "1.0.4", @@ -29610,7 +29610,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "devOptional": true }, "@types/verror": { "version": "1.10.6", @@ -29623,7 +29623,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.2.tgz", "integrity": "sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==", - "dev": true + "devOptional": true }, "@types/ws": { "version": "8.5.3", @@ -29637,7 +29637,7 @@ "version": "17.0.13", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dev": true, + "devOptional": true, "requires": { "@types/yargs-parser": "*" } @@ -29646,7 +29646,7 @@ "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "devOptional": true }, "@types/yauzl": { "version": "2.10.0", @@ -30269,7 +30269,7 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.8.0.tgz", "integrity": "sha512-gm8gXqpiIR0EU9Blkqmxe+xsEoKS2EXpWrKlx2JXyx3Yf7By0UNsZVZHMSO8lLunzUjYIntpWYpmKmBmnlrnKQ==", - "dev": true, + "devOptional": true, "requires": { "@wdio/logger": "8.6.6", "@wdio/types": "8.8.0", @@ -30285,13 +30285,13 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", - "dev": true + "devOptional": true }, "glob": { "version": "9.3.5", "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, + "devOptional": true, "requires": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", @@ -30303,7 +30303,7 @@ "version": "8.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, + "devOptional": true, "requires": { "brace-expansion": "^2.0.1" } @@ -30312,7 +30312,7 @@ "version": "4.2.8", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true + "devOptional": true } } }, @@ -30320,7 +30320,6 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.8.2.tgz", "integrity": "sha512-uwImTbqbFlHezAl4qtdXMZtZQo22bhENmt6eQ0pJwevtO1U53ZB4x9uDOYtSym8xKCdZILu46uI/THDm+vm2hA==", - "dev": true, "requires": { "expect-webdriverio": "^4.0.1", "webdriverio": "8.8.2" @@ -30361,7 +30360,7 @@ "version": "8.6.6", "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.6.6.tgz", "integrity": "sha512-MS+Y5yqFGx2zVXMOfuBQAVdFsP4DuYz+/hM552xwiDWjGg6EZHoccqUYgH3J5zpu3JFpYV3R/a5jExFiGGck6g==", - "dev": true, + "devOptional": true, "requires": { "chalk": "^5.1.2", "loglevel": "^1.6.0", @@ -30373,7 +30372,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "dev": true + "devOptional": true } } }, @@ -30381,13 +30380,13 @@ "version": "8.8.1", "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.8.1.tgz", "integrity": "sha512-nDaycUcm/ATLxcjim0fJyRiezXyyj4ZCq+Xf0S2Cubc0k7+DceFBt7KIMsernNVh2pelzFHEEwxh4DLaqQ71Wg==", - "dev": true + "devOptional": true }, "@wdio/repl": { "version": "8.6.6", "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.6.6.tgz", "integrity": "sha512-vyJzqHJ5yOmfVyk5WWo6pRsJ2xhgWl3DVIBdDNR0wKrtFcm/g1jnB+pNf6Eb7NhCDh3oGul25bmhAwWDoxcFYA==", - "dev": true, + "devOptional": true, "requires": { "@types/node": "^18.0.0" } @@ -30472,7 +30471,7 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.8.0.tgz", "integrity": "sha512-JUl1AwdtrJ3GzwtEmLyLohh29ycKkTKQ9S7K5Tc3p4kC3d9YmFKsifVj9riyJUFFrbICO0d35O63kNzsVMYj/w==", - "dev": true, + "devOptional": true, "requires": { "@wdio/logger": "8.6.6", "@wdio/types": "8.8.0", @@ -30971,7 +30970,7 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", - "dev": true, + "devOptional": true, "requires": { "archiver-utils": "^2.1.0", "async": "^3.2.3", @@ -30986,13 +30985,13 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true + "devOptional": true }, "readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -31005,7 +31004,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, + "devOptional": true, "requires": { "glob": "^7.1.4", "graceful-fs": "^4.2.0", @@ -31023,7 +31022,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "devOptional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -31033,7 +31032,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, + "devOptional": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -31047,7 +31046,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -31353,7 +31352,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true + "devOptional": true }, "aws-sign2": { "version": "0.7.0", @@ -31814,7 +31813,7 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true + "devOptional": true }, "buffer-equal": { "version": "1.0.0", @@ -32129,7 +32128,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "dev": true + "devOptional": true }, "cacheable-request": { "version": "6.1.0", @@ -32320,7 +32319,7 @@ "version": "0.15.1", "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz", "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==", - "dev": true, + "devOptional": true, "requires": { "@types/node": "*", "escape-string-regexp": "^4.0.0", @@ -32332,7 +32331,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "devOptional": true } } }, @@ -32383,7 +32382,7 @@ "version": "0.4.6", "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.6.tgz", "integrity": "sha512-TQOkWRaLI/IWvoP8XC+7jO4uHTIiAUiklXU1T0qszlUFEai9LgKXIBXy3pOS3EnQZ3bQtMbKUPkug0fTAEHCSw==", - "dev": true, + "devOptional": true, "requires": { "mitt": "3.0.0" } @@ -32398,7 +32397,7 @@ "version": "3.6.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", - "dev": true + "devOptional": true }, "class-utils": { "version": "0.3.6", @@ -32718,7 +32717,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", - "dev": true, + "devOptional": true, "requires": { "buffer-crc32": "^0.2.13", "crc32-stream": "^4.0.2", @@ -32730,7 +32729,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -33016,7 +33015,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "dev": true, + "devOptional": true, "requires": { "crc-32": "^1.2.0", "readable-stream": "^3.4.0" @@ -33026,7 +33025,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -33161,7 +33160,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, + "devOptional": true, "requires": { "node-fetch": "2.6.7" } @@ -33246,13 +33245,13 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==", - "dev": true + "devOptional": true }, "css-value": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", "integrity": "sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==", - "dev": true + "devOptional": true }, "css-what": { "version": "6.1.0", @@ -33941,7 +33940,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", - "dev": true + "devOptional": true }, "default-gateway": { "version": "6.0.3", @@ -33974,7 +33973,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, + "devOptional": true, "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -34127,7 +34126,7 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.8.2.tgz", "integrity": "sha512-iD/Xr5rMjx+VD08akiAuiMR5EhWKj9i489rcDm2vdC9iB8u8HY51s9FbmnIrN5OstYma0x2qOF2zKxM/muJTtw==", - "dev": true, + "devOptional": true, "requires": { "@types/node": "^18.0.0", "@wdio/config": "8.8.0", @@ -34149,13 +34148,13 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "dev": true + "devOptional": true }, "which": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", - "dev": true, + "devOptional": true, "requires": { "isexe": "^2.0.0" } @@ -34166,7 +34165,7 @@ "version": "0.0.1124027", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1124027.tgz", "integrity": "sha512-OT2sdgQn4llM9/tVcCvoty733KFFIlXVvESceJsfazhmg/dF7C5e3Z8cIN8jNwIikixuE5rufGtD1cvKHXfOcQ==", - "dev": true + "devOptional": true }, "dfa": { "version": "1.2.0", @@ -34184,7 +34183,7 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true + "devOptional": true }, "dir-compare": { "version": "2.4.0", @@ -34461,7 +34460,7 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-3.0.5.tgz", "integrity": "sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==", - "dev": true, + "devOptional": true, "requires": { "@types/which": "^2.0.1", "which": "^2.0.2" @@ -34716,7 +34715,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, + "devOptional": true, "requires": { "once": "^1.4.0" } @@ -34801,7 +34800,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -34818,7 +34817,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "devOptional": true } } }, @@ -35814,7 +35813,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "dev": true, + "devOptional": true, "requires": { "@jest/expect-utils": "^29.5.0", "jest-get-type": "^29.4.3", @@ -35827,7 +35826,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-4.1.3.tgz", "integrity": "sha512-tn7kMH/WVrVwwzPaCXMuFYiGXx15LwpxwkJkC/WmF6xptcqW7kaEZco7sxHjtEXpKV7QVGsfY1Z0PcwW4gj5OA==", - "dev": true, + "devOptional": true, "requires": { "@wdio/globals": "^8.2.4", "expect": "^29.4.0", @@ -36119,7 +36118,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, + "devOptional": true, "requires": { "pend": "~1.2.0" } @@ -36274,7 +36273,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, + "devOptional": true, "requires": { "is-callable": "^1.1.3" } @@ -36306,7 +36305,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "dev": true + "devOptional": true }, "forwarded": { "version": "0.2.0", @@ -36346,7 +36345,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "devOptional": true }, "fs-extra": { "version": "10.1.0", @@ -36404,7 +36403,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true + "devOptional": true }, "gauge": { "version": "4.0.4", @@ -36632,7 +36631,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, + "devOptional": true, "requires": { "get-intrinsic": "^1.1.3" } @@ -36682,7 +36681,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "devOptional": true }, "graphlib": { "version": "2.1.8", @@ -36798,7 +36797,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true + "devOptional": true }, "has-flag": { "version": "3.0.0", @@ -36809,7 +36808,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, + "devOptional": true, "requires": { "get-intrinsic": "^1.1.1" } @@ -36823,7 +36822,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, + "devOptional": true, "requires": { "has-symbols": "^1.0.2" } @@ -36912,7 +36911,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, + "devOptional": true, "requires": { "lru-cache": "^6.0.0" }, @@ -36921,7 +36920,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, + "devOptional": true, "requires": { "yallist": "^4.0.0" } @@ -36986,7 +36985,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "devOptional": true }, "http-deceiver": { "version": "1.2.7", @@ -37129,7 +37128,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", - "dev": true, + "devOptional": true, "requires": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" @@ -37249,7 +37248,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", - "dev": true + "devOptional": true }, "imurmurhash": { "version": "0.1.4", @@ -37363,7 +37362,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, + "devOptional": true, "requires": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", @@ -37404,7 +37403,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -37414,7 +37413,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -37430,7 +37429,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, + "devOptional": true, "requires": { "has-bigints": "^1.0.1" } @@ -37447,7 +37446,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -37462,7 +37461,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true + "devOptional": true }, "is-ci": { "version": "3.0.1", @@ -37493,7 +37492,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, + "devOptional": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -37554,7 +37553,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true + "devOptional": true }, "is-negative-zero": { "version": "2.0.2", @@ -37571,7 +37570,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, + "devOptional": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -37628,7 +37627,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -37638,13 +37637,13 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true + "devOptional": true }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2" } @@ -37658,7 +37657,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, + "devOptional": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -37667,7 +37666,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, + "devOptional": true, "requires": { "has-symbols": "^1.0.2" } @@ -37676,7 +37675,7 @@ "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, + "devOptional": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -37713,7 +37712,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true + "devOptional": true }, "is-weakref": { "version": "1.0.2", @@ -37728,7 +37727,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -38085,7 +38084,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", - "dev": true, + "devOptional": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^29.4.3", @@ -38097,7 +38096,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -38106,7 +38105,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -38116,7 +38115,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -38125,19 +38124,19 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "devOptional": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "devOptional": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -38148,13 +38147,13 @@ "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true + "devOptional": true }, "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==", - "dev": true, + "devOptional": true, "requires": { "chalk": "^4.0.0", "jest-diff": "^29.5.0", @@ -38166,7 +38165,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -38175,7 +38174,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -38185,7 +38184,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -38194,19 +38193,19 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "devOptional": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "devOptional": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -38217,7 +38216,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", - "dev": true, + "devOptional": true, "requires": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.5.0", @@ -38234,7 +38233,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -38243,7 +38242,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -38253,7 +38252,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -38262,19 +38261,19 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "devOptional": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "devOptional": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -38285,7 +38284,7 @@ "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==", - "dev": true, + "devOptional": true, "requires": { "@jest/types": "^29.5.0", "@types/node": "*", @@ -38299,7 +38298,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "requires": { "color-convert": "^2.0.1" } @@ -38308,7 +38307,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -38318,7 +38317,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "requires": { "color-name": "~1.1.4" } @@ -38327,19 +38326,19 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "devOptional": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "devOptional": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -38655,7 +38654,7 @@ "version": "0.33.3", "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", - "dev": true + "devOptional": true }, "lazy-val": { "version": "1.0.5", @@ -38667,7 +38666,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, + "devOptional": true, "requires": { "readable-stream": "^2.0.5" } @@ -38765,7 +38764,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", - "dev": true, + "devOptional": true, "requires": { "debug": "^2.6.9", "marky": "^1.2.2" @@ -38775,7 +38774,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "devOptional": true, "requires": { "ms": "2.0.0" } @@ -38784,7 +38783,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "devOptional": true } } }, @@ -38849,7 +38848,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true + "devOptional": true }, "lodash.debounce": { "version": "4.0.8", @@ -38860,19 +38859,19 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true + "devOptional": true }, "lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true + "devOptional": true }, "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true + "devOptional": true }, "lodash.flattendeep": { "version": "4.4.0", @@ -38883,7 +38882,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "devOptional": true }, "lodash.merge": { "version": "4.6.2", @@ -38901,13 +38900,13 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", - "dev": true + "devOptional": true }, "lodash.zip": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", - "dev": true + "devOptional": true }, "log-symbols": { "version": "4.1.0", @@ -38967,13 +38966,13 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "dev": true + "devOptional": true }, "loglevel-plugin-prefix": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true + "devOptional": true }, "lower-case": { "version": "2.0.2", @@ -39093,7 +39092,7 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", - "dev": true + "devOptional": true }, "matcher": { "version": "3.0.0", @@ -39356,7 +39355,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", - "dev": true + "devOptional": true }, "mixin-deep": { "version": "1.3.2", @@ -39376,7 +39375,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true + "devOptional": true }, "moment-mini": { "version": "2.29.4", @@ -39624,7 +39623,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, + "devOptional": true, "requires": { "whatwg-url": "^5.0.0" } @@ -39716,7 +39715,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, + "devOptional": true, "requires": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -39992,7 +39991,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -40002,7 +40001,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "devOptional": true }, "object-visit": { "version": "1.0.1", @@ -40016,7 +40015,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -40205,7 +40204,7 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/p-iteration/-/p-iteration-1.1.8.tgz", "integrity": "sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ==", - "dev": true + "devOptional": true }, "p-limit": { "version": "2.3.0", @@ -40471,7 +40470,7 @@ "version": "1.6.4", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.4.tgz", "integrity": "sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==", - "dev": true, + "devOptional": true, "requires": { "lru-cache": "^9.0.0", "minipass": "^5.0.0" @@ -40481,13 +40480,13 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.0.1.tgz", "integrity": "sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==", - "dev": true + "devOptional": true }, "minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true + "devOptional": true } } }, @@ -40536,7 +40535,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "devOptional": true }, "performance-now": { "version": "2.1.0", @@ -41011,7 +41010,7 @@ "version": "29.5.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", - "dev": true, + "devOptional": true, "requires": { "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", @@ -41022,7 +41021,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "devOptional": true } } }, @@ -41069,7 +41068,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "devOptional": true }, "promise-inflight": { "version": "1.0.1", @@ -41383,7 +41382,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "devOptional": true }, "proxy-middleware": { "version": "0.15.0", @@ -41414,7 +41413,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, + "devOptional": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -41429,7 +41428,7 @@ "version": "19.8.5", "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.8.5.tgz", "integrity": "sha512-zoGhim/oBQbkND6h4Xz4X7l5DkWVH9wH7z0mVty5qa/c0P1Yad47t/npVtt2xS10BiQwzztWKx7Pa2nJ5yykdw==", - "dev": true, + "devOptional": true, "requires": { "@puppeteer/browsers": "0.4.0", "chromium-bidi": "0.4.6", @@ -41448,13 +41447,13 @@ "version": "0.0.1107588", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", - "dev": true + "devOptional": true }, "extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, + "devOptional": true, "requires": { "@types/yauzl": "^2.9.1", "debug": "^4.1.1", @@ -41466,7 +41465,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "requires": { "pump": "^3.0.0" } @@ -41492,7 +41491,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", "integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==", - "dev": true + "devOptional": true }, "queue-microtask": { "version": "1.2.3", @@ -41503,7 +41502,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true + "devOptional": true }, "quote-stream": { "version": "1.0.2", @@ -41567,7 +41566,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "devOptional": true }, "read-cache": { "version": "1.0.0", @@ -41621,7 +41620,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", - "dev": true, + "devOptional": true, "requires": { "@types/normalize-package-data": "^2.4.1", "normalize-package-data": "^3.0.2", @@ -41633,7 +41632,7 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true + "devOptional": true } } }, @@ -41641,7 +41640,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", - "dev": true, + "devOptional": true, "requires": { "find-up": "^6.3.0", "read-pkg": "^7.1.0", @@ -41652,7 +41651,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, + "devOptional": true, "requires": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -41662,7 +41661,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, + "devOptional": true, "requires": { "p-locate": "^6.0.0" } @@ -41671,7 +41670,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, + "devOptional": true, "requires": { "yocto-queue": "^1.0.0" } @@ -41680,7 +41679,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, + "devOptional": true, "requires": { "p-limit": "^4.0.0" } @@ -41689,19 +41688,19 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true + "devOptional": true }, "type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true + "devOptional": true }, "yocto-queue": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true + "devOptional": true } } }, @@ -41723,7 +41722,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dev": true, + "devOptional": true, "requires": { "minimatch": "^5.1.0" } @@ -41841,7 +41840,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -42102,7 +42101,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "devOptional": true }, "resolve-from": { "version": "5.0.0", @@ -42156,7 +42155,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/resq/-/resq-1.11.0.tgz", "integrity": "sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==", - "dev": true, + "devOptional": true, "requires": { "fast-deep-equal": "^2.0.1" }, @@ -42165,7 +42164,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", - "dev": true + "devOptional": true } } }, @@ -42198,7 +42197,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.5.tgz", "integrity": "sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==", - "dev": true + "devOptional": true }, "rimraf": { "version": "3.0.2", @@ -42849,7 +42848,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "devOptional": true }, "slice-ansi": { "version": "3.0.0", @@ -43136,7 +43135,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, + "devOptional": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -43146,13 +43145,13 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "devOptional": true }, "spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, + "devOptional": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -43162,7 +43161,7 @@ "version": "3.0.12", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true + "devOptional": true }, "spdy": { "version": "4.0.2", @@ -43268,7 +43267,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, + "devOptional": true, "requires": { "escape-string-regexp": "^2.0.0" }, @@ -43277,7 +43276,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true + "devOptional": true } } }, @@ -43571,7 +43570,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, + "devOptional": true, "requires": { "internal-slot": "^1.0.4" } @@ -43780,7 +43779,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, + "devOptional": true, "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -43792,7 +43791,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "devOptional": true } } }, @@ -43800,7 +43799,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, + "devOptional": true, "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -43813,7 +43812,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -44124,7 +44123,7 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "devOptional": true }, "traverse": { "version": "0.6.7", @@ -44428,7 +44427,7 @@ "version": "1.0.35", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", - "dev": true + "devOptional": true }, "uglify-js": { "version": "3.17.4", @@ -44453,7 +44452,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, + "devOptional": true, "requires": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -44678,7 +44677,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, + "devOptional": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -44794,7 +44793,7 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.8.2.tgz", "integrity": "sha512-ug+7n0JgRTLG5pGyD53VKValSLFcr0oll1QelH1Gueh/umt3Ipu+SDV+v+lyCZY6CKasCsv80W8oZfpLBj1ClQ==", - "dev": true, + "devOptional": true, "requires": { "@types/node": "^18.0.0", "@types/ws": "^8.5.3", @@ -44813,13 +44812,13 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==", - "dev": true + "devOptional": true }, "@szmarczak/http-timer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, + "devOptional": true, "requires": { "defer-to-connect": "^2.0.1" } @@ -44828,7 +44827,7 @@ "version": "10.2.9", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.9.tgz", "integrity": "sha512-CaAMr53AS1Tb9evO1BIWFnZjSr8A4pbXofpsNVWPMDZZj3ZQKHwsQG9BrTqQ4x5ZYJXz1T2b8LLtTZODxSpzbg==", - "dev": true, + "devOptional": true, "requires": { "@types/http-cache-semantics": "^4.0.1", "get-stream": "^6.0.1", @@ -44843,7 +44842,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, + "devOptional": true, "requires": { "mimic-response": "^3.1.0" }, @@ -44852,7 +44851,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true + "devOptional": true } } }, @@ -44860,13 +44859,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true + "devOptional": true }, "got": { "version": "12.6.0", "resolved": "https://registry.npmjs.org/got/-/got-12.6.0.tgz", "integrity": "sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==", - "dev": true, + "devOptional": true, "requires": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", @@ -44885,13 +44884,13 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "devOptional": true }, "keyv": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "dev": true, + "devOptional": true, "requires": { "json-buffer": "3.0.1" } @@ -44900,31 +44899,31 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "dev": true + "devOptional": true }, "mimic-response": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "dev": true + "devOptional": true }, "normalize-url": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", - "dev": true + "devOptional": true }, "p-cancelable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true + "devOptional": true }, "responselike": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "dev": true, + "devOptional": true, "requires": { "lowercase-keys": "^3.0.0" } @@ -45073,7 +45072,7 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.8.2.tgz", "integrity": "sha512-H3h+sHLg9hfQCPLvpd30hi/ZW4lLy73m4zrZ5kJyuuUf38SZFLcfXD3W1RGig88RQ/75Ui164ugwHasTMiQEgw==", - "dev": true, + "devOptional": true, "requires": { "@types/node": "^18.0.0", "@wdio/config": "8.8.0", @@ -45106,7 +45105,7 @@ "version": "5.1.3", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, + "devOptional": true, "requires": { "deep-equal": "^2.0.5" } @@ -45115,7 +45114,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "dev": true, + "devOptional": true, "requires": { "call-bind": "^1.0.2", "es-get-iterator": "^1.1.2", @@ -45140,19 +45139,19 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true + "devOptional": true }, "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "devOptional": true }, "minimatch": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", - "dev": true, + "devOptional": true, "requires": { "brace-expansion": "^2.0.1" } @@ -45161,7 +45160,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", - "dev": true, + "devOptional": true, "requires": { "type-fest": "^0.20.2" } @@ -45170,7 +45169,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "devOptional": true } } }, @@ -45178,7 +45177,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "devOptional": true }, "webpack": { "version": "5.75.0", @@ -45378,7 +45377,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, + "devOptional": true, "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -45396,7 +45395,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, + "devOptional": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -45409,7 +45408,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, + "devOptional": true, "requires": { "is-map": "^2.0.1", "is-set": "^2.0.1", @@ -45428,7 +45427,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, + "devOptional": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -45752,7 +45751,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, + "devOptional": true, "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -45774,7 +45773,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "dev": true, + "devOptional": true, "requires": { "archiver-utils": "^2.1.0", "compress-commons": "^4.1.0", @@ -45785,7 +45784,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", diff --git a/package.json b/package.json index da623ef02..c46a5ac00 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "@types/pako": "^1.0.4", "@types/sprintf-js": "^1.1.2", "@wdio/codemod": "^0.12.0", + "@wdio/globals": "^8.8.2", "@wdio/types": "^8.8.0", "angular2-hotkeys": "^13.1.0", "chartjs-plugin-zoom": "^2.0.0", -- GitLab From 135e400e56b65248b8cc19d5f206972a9d4ac46a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 14 Apr 2023 15:15:34 +0200 Subject: [PATCH 09/25] test(e2e): replace ElementFinder type refs #618 --- e2e/calculator.po.ts | 56 +++++++++++++++++++++---------------------- e2e/preferences.po.ts | 4 ++-- e2e/util.po.ts | 4 ++-- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 07a745a13..5d11fc5d9 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -29,15 +29,15 @@ export class CalculatorPage { /** * return all selects in the calculator which id is in the form "select_*" */ - getAllCalculatorSelects(): ElementArrayFinder { + getAllCalculatorSelects() { return $$("mat-select[id^=select_]"); // all mat-select with id starting with "select_" } /** * get the option count of a select */ - async getMatselectOptionCount(select: string | ElementFinder) { - const sel = select instanceof ElementFinder ? select : $(`#${select}`); + async getMatselectOptionCount(select: string | Element) { + const sel = select instanceof Element ? select : $(`#${select}`); await scrollToElement(sel); if ((await sel.isExisting()) && (await sel.isDisplayed())) { @@ -51,8 +51,8 @@ export class CalculatorPage { /** * get the text of the all given select options */ - async getMatselectOptionsText(select: string | ElementFinder): Promise<string[]> { - const sel = select instanceof ElementFinder ? select : $(`#${select}`); + async getMatselectOptionsText(select: string | Element): Promise<string[]> { + const sel = select instanceof Element ? select : $(`#${select}`); await scrollToElement(sel); if ((await sel.isExisting()) && (await sel.isDisplayed())) { @@ -73,7 +73,7 @@ export class CalculatorPage { /** * get select current option */ - async getSelectCurrentOption(select: ElementFinder): Promise<ElementFinder> { + async getSelectCurrentOption(select) { const id = await select.getAttribute("id"); return $("mat-select#" + id + " div[id^=mat-select-value-]"); } @@ -81,7 +81,7 @@ export class CalculatorPage { /** * get text of select current option */ - async getMatselectCurrentOptionText(select: ElementFinder): Promise<string> { + async getMatselectCurrentOptionText(select): Promise<string> { const currentOption = await this.getSelectCurrentOption(select); return await currentOption.$("span span").getText(); } @@ -91,15 +91,15 @@ export class CalculatorPage { } async isMatSelectPresent(id: string) { - const sel: ElementFinder = $("mat-select#" + id); + const sel = $("mat-select#" + id); return await sel.isExisting(); } - async getSelectValueText(select: ElementFinder) { + async getSelectValueText(select) { return await select.$(".mat-select-value-text > span").getText(); } - async isSelectEmpty(select: ElementFinder) { + async isSelectEmpty(select) { try { const text = select.$(".mat-select-value-text > span"); await text.getAttribute("outerHTML"); // await anything trigger the error @@ -172,66 +172,66 @@ export class CalculatorPage { } /** return nth <tr> of given <table>, starting at 1 */ - getNthRow(table: ElementFinder, n: number) { + getNthRow(table, n: number) { return table.$("tbody > tr:nth-of-type(" + n + ")"); } /** return nth <td> of given <tr>, starting at 1 */ - getNthColumn(tr: ElementFinder, n: number) { + getNthColumn(tr, n: number) { return tr.$("td:nth-of-type(" + n + ")"); } async isNgParamPresent(id: string) { - const inp: ElementFinder = $("ngparam-input input#" + id); + const inp = $("ngparam-input input#" + id); return await inp.isExisting(); } - async inputHasCalcModeButton(input: ElementFinder) { + async inputHasCalcModeButton(input) { // get parent (div.container) const container = await this.findParentContainer(input); // find radio buttons - const button: ElementFinder = container.$("mat-button-toggle.radio_cal > button"); + const button = container.$("mat-button-toggle.radio_cal > button"); return await button.isExisting(); } - async inputHasLinkModeButton(input: ElementFinder) { + async inputHasLinkModeButton(input) { // get parent (div.container) const container = await this.findParentContainer(input); // find radio buttons - const button: ElementFinder = container.$("mat-button-toggle.radio_link > button"); + const button = container.$("mat-button-toggle.radio_link > button"); return await button.isExisting(); } /** * @returns true if "fixed mode" button linked to an input is selected */ - async inputIsInFixedMode(input: ElementFinder): Promise<boolean> { + async inputIsInFixedMode(input): Promise<boolean> { // get parent (div.container) const container = await this.findParentContainer(input); // find fixed radio button - const button: ElementFinder = container.$("mat-button-toggle.radio_fix"); + const button = container.$("mat-button-toggle.radio_fix"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } /** * @returns true if "calculated mode" button linked to an input is selected */ - async inputIsInCalculatedMode(input: ElementFinder): Promise<boolean> { + async inputIsInCalculatedMode(input): Promise<boolean> { // get parent (div.container) const container = await this.findParentContainer(input); // find calc radio button - const button: ElementFinder = container.$("mat-button-toggle.radio_cal"); + const button = container.$("mat-button-toggle.radio_cal"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } /** * @returns true if "linked mode" button linked to an input is selected */ - async inputIsInLinkedMode(input: ElementFinder): Promise<boolean> { + async inputIsInLinkedMode(input): Promise<boolean> { // get parent (div.container) const container = await this.findParentContainer(input); // find calc radio button - const button: ElementFinder = container.$("mat-button-toggle.radio_link"); + const button = container.$("mat-button-toggle.radio_link"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } @@ -262,7 +262,7 @@ export class CalculatorPage { * @param table a <table> ElementFinder * @param allowEmpty if true, empty "" values will be considered valid */ - async allRowsHaveValidResults(table: ElementFinder, allowEmpty: boolean = false): Promise<boolean> { + async allRowsHaveValidResults(table, allowEmpty: boolean = false): Promise<boolean> { let n = 0; let ok = true; const invalidValues = ["ERR", "NaN"]; @@ -338,7 +338,7 @@ export class CalculatorPage { } // find parent element of elt having class "container" - async findParentContainer(elt: ElementFinder): Promise<ElementFinder> { + async findParentContainer(elt) { let i = 8; // garde fous while (((await elt.getAttribute("class")) !== "container") && (i >= 0)) { elt = elt.$(".."); @@ -351,7 +351,7 @@ export class CalculatorPage { * @param elt an <input> element * @param mode "fix", "var", "cal" or "link" */ - async setParamMode(elt: ElementFinder, mode: string) { + async setParamMode(elt, mode: string) { // get parent (div.container) const container = await this.findParentContainer(elt); // find radio buttons @@ -370,9 +370,9 @@ export class CalculatorPage { /** * @param elt an <input> element */ - async getLinkedValueSelect(elt: ElementFinder): Promise<ElementFinder> { + async getLinkedValueSelect(elt) { // get parent (div.container) - const container = await this.findParentContainer(elt) as ElementFinder; + const container = await this.findParentContainer(elt); // find <select> const select = container.$("param-link mat-select"); return select; diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index 49e057669..eddb67807 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -26,7 +26,7 @@ export class PreferencesPage { return $$(`mat-form-field[data-testclass="numeric-input"]`); } - getInputForField(ff: ElementFinder) { + getInputForField(ff) { return ff.$("input"); } @@ -38,7 +38,7 @@ export class PreferencesPage { return $(cssSelector); } - getErrorsForField(ff: ElementFinder) { + getErrorsForField(ff) { return ff.$("mat-error"); } diff --git a/e2e/util.po.ts b/e2e/util.po.ts index d4c99fb85..c7717900f 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -3,7 +3,7 @@ import { browser, $, $$, expect } from '@wdio/globals' /** * scroll page to make element visible */ -export async function scrollToElement(elem: ElementFinder) { +export async function scrollToElement(elem) { await browser.execute("arguments[0].scrollIntoView({ block: 'center' });", elem); await browser.pause(50); } @@ -28,7 +28,7 @@ export function expectNumber(msg: string, val: number, expected: number) { expect(val).toEqual(expected); } -export async function changeSelectValue(elt: ElementFinder, index: number) { +export async function changeSelectValue(elt, index: number) { await elt.click(); const optionId = ".cdk-overlay-container mat-option:nth-of-type(" + (index + 1) + ")"; const option = $(optionId); -- GitLab From 1990f30e674a20b443304851959e981f348eb812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 19 Apr 2023 08:57:52 +0200 Subject: [PATCH 10/25] test(e2e): modify package.json to run tests with WebdriverIO refs #618 --- package.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index c46a5ac00..7ae470fe7 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,8 @@ "ng": "cd . && \"node_modules/.bin/ng\"", "postinstall": "./node_modules/.bin/webdriver-manager update --gecko=false --versions.chrome=83.0.4103.39", "lint": "eslint -c .eslintrc.js --ext .ts src", - "e2e": "npm run preprocess && node scripts/check-translations.js && npm run ng -- e2e --suite=regular --webdriver-update=false", - "e2equick": "node scripts/check-translations.js && npm run ng -- e2e --dev-server-target= --suite=regular --webdriver-update=false", + "e2e": "npm run preprocess && npm run e2equick", + "e2equick": "node scripts/check-translations.js && ./node_modules/.bin/wdio run ./wdio.conf.ts", "monkeytest": "npm run ng -- e2e --dev-server-target= --suite=monkeyTest --webdriver-update=false", "mkdocs": "bash scripts/prepare_mkdocs.sh; cd build; python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && cd .. && node scripts/mkdocs-postprocess.js", "mkdocs2pdf": "node scripts/extract-nghyd-version.js build/cassiopee_version.tex && python3 scripts/mkdocs2pdf.py && node scripts/mkdocs2pdf-postprocess.js", @@ -35,8 +35,7 @@ "viz": "tsviz -recursive src/ nghyd_class_diagram.png", "webapp-nocompile": "\"node_modules/.bin/http-server\" dist", "webapp": "npm run build-no-pdf && npm run webapp-nocompile", - "service-worker-version": "./scripts/update-service-worker-config.sh", - "wdio": "wdio run ./wdio.conf.ts" + "service-worker-version": "./scripts/update-service-worker-config.sh" }, "private": true, "dependencies": { -- GitLab From a7c1639124b4ca39cb8c841a62256fdbe74db2a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 25 Apr 2023 09:34:59 +0200 Subject: [PATCH 11/25] refactor : remove protractor configuration file refs #618 --- protractor.conf.js | 72 ---------------------------------------------- 1 file changed, 72 deletions(-) delete mode 100644 protractor.conf.js diff --git a/protractor.conf.js b/protractor.conf.js deleted file mode 100644 index 92c3cd855..000000000 --- a/protractor.conf.js +++ /dev/null @@ -1,72 +0,0 @@ -// Protractor configuration file, see link for more information -// https://github.com/angular/protractor/blob/master/lib/config.ts - -const { SpecReporter } = require('jasmine-spec-reporter'); - -const path = require("path"); -const os = require("os"); -const fs = require("fs"); - -const downloadsPath = path.resolve(os.homedir(), "Téléchargements"); - -// try to use system chromedriver first -let chromeDriverPath = "/usr/bin/chromedriver"; -if (! fs.existsSync(chromeDriverPath)) { - const seleniumDir = "./node_modules/protractor/node_modules/webdriver-manager/selenium"; - if (fs.existsSync(seleniumDir)) { - const files = fs.readdirSync(seleniumDir); - for (const f of files) { - if (/^chromedriver.+[^p]$/.test(f)) { - chromeDriverPath = seleniumDir + "/" + f; - } - } - } -} - -console.log("---------- USING CHROMEDRIVER AT PATH: ", chromeDriverPath); - -exports.config = { - allScriptsTimeout: 130 * 1000, // 130s. is recommended for Gremlins.js - suites: { - 'regular': './e2e/*.e2e-spec.ts', // everything but monkey test - 'monkeyTest': './e2e/monkey-test/*.e2e-spec.ts' - }, - capabilities: { - browserName: 'chrome', - chromeOptions: { - args: [ - "--no-sandbox", - "--headless", - "--window-size=1024x768", - "--disable-dev-shm-usage" - ], - prefs: { - download: { - prompt_for_download: false, - directory_upgrade: true, - // default_directory: '/tmp/e2e-downloads' - }, - }, - }, - }, - chromeDriver: chromeDriverPath, - directConnect: true, - baseUrl: 'http://localhost:4200/', - framework: 'jasmine', - jasmineNodeOpts: { - showColors: true, - defaultTimeoutInterval: 30000, - print: function() {} - }, - onPrepare() { - require('ts-node').register({ - project: 'e2e/tsconfig.e2e.json' - }); - jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); - browser.manage().window().setSize(1600, 1000); - browser.driver.sendChromiumCommand('Page.setDownloadBehavior', { - behavior: 'allow', - downloadPath: downloadsPath - }); - } -}; -- GitLab From 108733a26effc3377c5bf38a7c7735c8caa070c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 25 Apr 2023 16:39:10 +0200 Subject: [PATCH 12/25] refactor: add VSCode launch configuration for WebDriverIO test debug refs #618 --- .vscode/launch.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.vscode/launch.json b/.vscode/launch.json index 1d92791fc..90ee4ece3 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -39,6 +39,21 @@ "${workspaceRoot}/dist/out-tsc-e2e/*.js" ], "skipSourceMapSupport": true + }, + { + "name": "WDIO select spec", + "type": "node", + "request": "launch", + "args": ["wdio.conf.ts", "--spec", "${file}"], + "cwd": "${workspaceFolder}", + "autoAttachChildProcesses": true, + "program": "${workspaceRoot}/node_modules/@wdio/cli/bin/wdio.js", + "console": "integratedTerminal", + "skipFiles": [ + "${workspaceFolder}/node_modules/**/*.js", + "${workspaceFolder}/lib/**/*.js", + "<node_internals>/**/*.js" + ] } ] } -- GitLab From e744dc9023b6d69a73a14b6ea820ea44ba67f08d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 26 Apr 2023 10:40:03 +0200 Subject: [PATCH 13/25] fix(e2e): fix automatic WebDriverIO test migration refs #618 --- e2e/bief-empty-fields.e2e-spec.ts | 4 +- e2e/calc-all-examples.e2e-spec.ts | 42 +- e2e/calculate-all-params.e2e-spec.ts | 42 +- e2e/calculate-button-validation.e2e-spec.ts | 23 +- e2e/calculate-linked-params.e2e-spec.ts | 112 ++++-- e2e/calculator.e2e-spec.ts | 7 +- e2e/calculator.po.ts | 363 +++++++++++++----- e2e/check-translations.e2e-spec.ts | 7 +- e2e/cloisons.e2e-spec.ts | 25 +- e2e/clone-all-calc.e2e-spec.ts | 24 +- e2e/clone-calc.e2e-spec.ts | 21 +- e2e/compute-reset-chained-links.e2e-spec.ts | 68 ++-- e2e/cote-amont-aval-bief.e2e-spec.ts | 57 +-- e2e/courbe-remous-empty-fields.e2e-spec.ts | 5 +- e2e/diagramme-modules.e2e-spec.ts | 5 +- e2e/documentation.e2e-spec.ts | 49 +-- e2e/duplicate-results.e2e-spec.ts | 8 +- e2e/examples-empty-fields.e2e-spec.ts | 48 ++- e2e/helpers/GremlinHelper.ts | 29 +- e2e/lechapt-calmon.e2e-spec.ts | 11 +- e2e/link-parallel-devices.e2e-spec.ts | 30 +- e2e/link-to-deleted-module.e2e-spec.ts | 18 +- e2e/linked-parameter-section-type.e2e-spec.ts | 7 +- e2e/list.e2e-spec.ts | 7 +- e2e/list.po.ts | 17 +- e2e/load-linked-params.e2e-spec.ts | 26 +- e2e/load-malformed-files.e2e-spec.ts | 9 +- e2e/load-save-session.e2e-spec.ts | 89 ++--- e2e/monkey-test/monkey.e2e-spec.ts | 101 +++-- e2e/navbar.po.ts | 46 ++- e2e/navigate-through-calculators.e2e-spec.ts | 10 +- e2e/notes.e2e-spec.ts | 11 +- e2e/ouvrages-empty-fields.e2e-spec.ts | 25 +- e2e/pab-cloisons-empty-fields.e2e-spec.ts | 3 +- e2e/pab.e2e-spec.ts | 208 +++++----- e2e/parallel-structures.e2e-spec.ts | 17 +- e2e/predam-empty-fields.e2e-spec.ts | 46 ++- e2e/predam-log.e2e-spec.ts | 10 +- e2e/preferences.e2e-spec.ts | 71 ++-- e2e/preferences.po.ts | 18 +- e2e/pressure-loss-empty-fields.e2e-spec.ts | 5 +- e2e/pressure-loss.e2e-spec.ts | 12 +- e2e/regime-uniforme-empty-fields.e2e-spec.ts | 3 +- e2e/remous.e2e-spec.ts | 24 +- e2e/reset-param-mode.e2e-spec.ts | 59 ++- e2e/reset-results.e2e-spec.ts | 24 +- e2e/section-empty-fields.e2e-spec.ts | 3 +- e2e/select-default-value.e2e-spec.ts | 5 +- e2e/sidenav.po.ts | 25 +- e2e/solveur.e2e-spec.ts | 185 +++++---- e2e/translation.e2e-spec.ts | 35 +- e2e/util.po.ts | 45 ++- e2e/valeurs-erronees.e2e-spec.ts | 16 +- e2e/variable-param-cancel.e2e-spec.ts | 16 +- wdio.conf.ts | 18 +- 55 files changed, 1363 insertions(+), 831 deletions(-) diff --git a/e2e/bief-empty-fields.e2e-spec.ts b/e2e/bief-empty-fields.e2e-spec.ts index 6977ce3ee..a828ffc0b 100644 --- a/e2e/bief-empty-fields.e2e-spec.ts +++ b/e2e/bief-empty-fields.e2e-spec.ts @@ -30,7 +30,7 @@ describe("Check fields are empty in 'up/downstream elevations of a reach' calcul await listPage.clickMenuEntryForCalcType(21); await browser.pause(200); - expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "Long", "YB", "ZF1", "ZF2", "Q", "Z1", "Z2", "Dx"], - [true, true, true, true, true, true, true, true, true, true])) + await calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "Long", "YB", "ZF1", "ZF2", "Q", "Z1", "Z2", "Dx"], + [true, true, true, true, true, true, true, true, true, true]) }); }); diff --git a/e2e/calc-all-examples.e2e-spec.ts b/e2e/calc-all-examples.e2e-spec.ts index 8f228a167..adb93e8f1 100644 --- a/e2e/calc-all-examples.e2e-spec.ts +++ b/e2e/calc-all-examples.e2e-spec.ts @@ -2,6 +2,8 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { newSession } from "./util.po"; /** * Calculate all modules of all examples @@ -9,23 +11,20 @@ import { SideNav } from "./sidenav.po"; describe("ngHyd − example sessions −", () => { let calcPage: CalculatorPage; - let navbar: Navbar; + let navBar: Navbar; let prefPage: PreferencesPage; let sideNav: SideNav; beforeAll(() => { - jasmine.DEFAULT_TIMEOUT_INTERVAL = 100 * 1000; + // increase timeout to avoid "Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL" message + jasmine.DEFAULT_TIMEOUT_INTERVAL = 10 * 60 * 1000; // 10 min + calcPage = new CalculatorPage(); - navbar = new Navbar(); + navBar = new Navbar(); prefPage = new PreferencesPage(); sideNav = new SideNav(); }); - beforeEach(() => { - // increase timeout to avoid "Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL" message - jasmine.DEFAULT_TIMEOUT_INTERVAL = 10 * 60 * 1000; // 10 min - }); - it("calcul de tous les modules de tous les exemples −", async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); @@ -38,32 +37,39 @@ describe("ngHyd − example sessions −", () => { while (lastExampleFound) { if (i == 0) { // start page - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await browser.pause(200); } else { // empty session - await navbar.clickMenuButton(); - await browser.pause(200); - await sideNav.clickNewSessionButton(); - await browser.pause(1000); + // await navbar.clickMenuButton(); + // await browser.pause(200); + // await sideNav.clickNewSessionButton(); + // await browser.pause(1000); + await newSession(navBar, sideNav); } const examples = await $$("#examples-list .load-example"); await browser.pause(200); if (examples.length > i) { // click example #i - await (await examples.i).click(); + await examples[i].click(); await browser.pause(200); - const nbModules = await navbar.getCalculatorEntriesCount(); + const nbModules = await navBar.getCalculatorEntriesCount(); await browser.pause(200); for (let j = 0; j < nbModules; j++) { // select module - await navbar.openNthCalculator(j); - await browser.pause(50); + await navBar.openNthCalculator(j); + await browser.pause(300); + // await calcPage.closeSnackBar(); // opening a calculator can trigger a snackbar with "results invalidated for..." + // await browser.pause(300); + await calcPage.closeSnackBars(5, 500); // opening a calculator can trigger a snackbar with "results invalidated for..." + await browser.pause(500); // calculate module - await calcPage.getCalculateButton().click(); + const calcBtn = await calcPage.getCalculateButton(); + await calcBtn.click(); + await browser.pause(300); // check results const hasResults = await calcPage.hasValidResults(); expect(hasResults).toBe(true, `example ${i + 1}, module ${j + 1} (starting at 1)`); diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index 83882f4e7..0af1460ba 100644 --- a/e2e/calculate-all-params.e2e-spec.ts +++ b/e2e/calculate-all-params.e2e-spec.ts @@ -3,7 +3,10 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { testedCalcTypes } from "./tested_calctypes"; -import { scrollPageToTop } from "./util.po"; +import { openCalculator, scrollPageToTop } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { newSession } from "./util.po"; +import { SideNav } from "./sidenav.po"; /** * For all calculators, try to calculate every parameter: check that only one parameter @@ -14,12 +17,14 @@ describe("ngHyd − calculate all parameters of all calculators", () => { let calcPage: CalculatorPage; let navBar: Navbar; let prefPage: PreferencesPage; + let sideNav: SideNav; beforeAll(async () => { listPage = new ListPage(); calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); navBar = new Navbar(); + sideNav = new SideNav(); // disable evil option "empty fields on module creation" await prefPage.navigateTo(); @@ -32,6 +37,24 @@ describe("ngHyd − calculate all parameters of all calculators", () => { // get calculators list (IDs) @TODO read it from config, but can't import jalhyd here :/ const calcTypes = testedCalcTypes; + // const calcTypes = [0]; + // export const testedCalcTypes = [ + // 0, + // // omit 1 - LechaptCalmon + // 2, 3, 4, 5, 6, + // // omit 7 - Structure + // 8, 9, 10, 11, 12, 13, + // // omit 14 -Section + // 15, + // // omit 16 - CloisonAval + // 17, 18, 19, 20, 21, 22, 23, 24, 25, + // // omit 26 - YAXN + // 27, 28, 29, 30, + // // omit 31 - PbCloison and 32 - PbBassin + // 33, 34, 35 + // ]; + // const calcTypes =[30]; + // for each calculator for (const ct of calcTypes) { @@ -46,14 +69,22 @@ describe("ngHyd − calculate all parameters of all calculators", () => { } describe(" − calculate all parameters of calculator type [" + ct + "]", () => { it("", async () => { + await newSession(navBar, sideNav); + + //await browser.execute("window.moveTo(2000,30)") + // await browser.driver.moveTo(2000,30); + // go to list page - await navBar.clickNewCalculatorButton(); + // await navBar.clickNewCalculatorButton(); // click calculator button (instanciate) - await listPage.clickMenuEntryForCalcType(ct); + // await listPage.clickMenuEntryForCalcType(ct); + await openCalculator(ct, navBar, listPage); + // get all parameters IDs const inputs = await calcPage.getParamInputsHavingCalcMode(); + // if ((await inputs).length > 0) { if (inputs.length > 0) { // for each param for (let i = 0; i < inputs.length; i++) { @@ -68,7 +99,9 @@ describe("ngHyd − calculate all parameters of all calculators", () => { // grab input again because calculating the module just refreshed all the fieldsets const input = (await calcPage.getParamInputsHavingCalcMode())[i]; // click "calc" mode button for this parameter + // await browser.pause(50); await calcPage.setParamMode(input, "cal"); + // await browser.pause(50); // check that only 1 button is in "calc" state const nbParamsCalc = await calcPage.getCheckedCalcModeButtons().length; expect(nbParamsCalc).toBe(1); @@ -76,6 +109,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { const calcButton = await calcPage.checkCalcButtonEnabled(true); // click "compute" button await calcButton.click(); + await browser.pause(500); // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -86,11 +120,13 @@ describe("ngHyd − calculate all parameters of all calculators", () => { const calcButton = await calcPage.checkCalcButtonEnabled(true); // click "compute" button await calcButton.click(); + await browser.pause(500); // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); } }); }); + // break; } }); diff --git a/e2e/calculate-button-validation.e2e-spec.ts b/e2e/calculate-button-validation.e2e-spec.ts index ee17d4f6d..d11a3f9ec 100644 --- a/e2e/calculate-button-validation.e2e-spec.ts +++ b/e2e/calculate-button-validation.e2e-spec.ts @@ -2,6 +2,7 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Calculate button - ", () => { let listPage: ListPage; @@ -142,29 +143,31 @@ describe("Calculate button - ", () => { // open calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(calcType); - await browser.sleep(200); + await browser.pause(200); // for each input, set empty and check calculate button is not active - const inputs = calcPage.getParamInputs(); - const ninp = await inputs.count(); - for (let i = 0; i < ninp; i++) { - const inp = inputs.get(i); + // const pfls = await calcPage.getParamfieldlines(); + const inputs = await calcPage.getParamInputs(); + // for (const pfl of pfls) { + for (const inp of inputs) { // set input to fixed mode + // await calcPage.setParamMode(pfl, "fix"); await calcPage.setParamMode(inp, "fix"); - await browser.sleep(100); + await browser.pause(100); // clear input + // const inp = await calcPage.getParamfieldlineInput(pfl); await calcPage.clearInput(inp); - await browser.sleep(10); + await browser.pause(10); // check calculate button is disabled await calcPage.checkCalcButtonEnabled(false); - await browser.sleep(100); + await browser.pause(100); // refill input - await inp.sendKeys("1"); - await browser.sleep(100); + await browser.keys("1"); + await browser.pause(100); } } diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts index 0f26d5a0d..ca0753940 100644 --- a/e2e/calculate-linked-params.e2e-spec.ts +++ b/e2e/calculate-linked-params.e2e-spec.ts @@ -3,7 +3,8 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue } from "./util.po"; +import { changeSelectValue, newSession } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Uses an example configuration to calculate : @@ -24,7 +25,7 @@ describe("ngHyd − calculate with linked parameters", () => { let listPage: ListPage; let calcPage: CalculatorPage; let navBar: Navbar; - let sidenav: SideNav; + let sideNav: SideNav; let prefPage: PreferencesPage; beforeAll(() => { @@ -32,27 +33,47 @@ describe("ngHyd − calculate with linked parameters", () => { calcPage = new CalculatorPage(); navBar = new Navbar(); prefPage = new PreferencesPage(); - sidenav = new SideNav(); + sideNav = new SideNav(); }); beforeEach(async () => { + await newSession(navBar, sideNav); + // disable evil option "empty fields on module creation" await prefPage.navigateTo(); - await prefPage.disableEvilEmptyFields(); await browser.pause(200); + await prefPage.disableEvilEmptyFields(); + await browser.pause(100); + }); + + afterEach(async () => { + //await browser.reloadSession(); + // await browser.pause(500); }); + // describe('webdriver.io page', () => { + // it('should reload my session with current capabilities', () => { + // console.log(browser.sessionId) + // browser.reloadSession() + // console.log(browser.sessionId) + // }) + // }); + async function computeAndCheckPresenceOfResults() { // check that "compute" button is active const calcButton = await calcPage.checkCalcButtonEnabled(true); // click "compute" button await calcButton.click(); + await browser.pause(200); // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); } it(" − direct links : parameter linked to a single parameter", async () => { + // await browser.reloadSession(); + // await browser.pause(1000); + // create a Régime uniforme await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); @@ -61,12 +82,14 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); // link Y to Y (R uniforme) - const Y = calcPage.getInputById("Y"); + const Y = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y, "link"); const sel = await calcPage.getLinkedValueSelect(Y); await changeSelectValue(sel, 0); await computeAndCheckPresenceOfResults(); + // await browser.reloadSession(); + // await browser.closeWindow(); }); it(" − direct links : parameter linked to a single parameter, plus local variated parameter", async () => { @@ -78,15 +101,16 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); // link Y to Y (R uniforme) - const Y = calcPage.getInputById("Y"); + const Y = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y, "link"); const sel = await calcPage.getLinkedValueSelect(Y); await changeSelectValue(sel, 0); // vary W - const W = calcPage.getInputById("W"); + const W = await calcPage.getInputById("W"); await calcPage.setParamMode(W, "var"); await computeAndCheckPresenceOfResults(); + // await browser.reloadSession(); }); it(" − direct links : parameter linked to a variated parameter", async () => { @@ -94,14 +118,14 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); // vary Y - const Y1 = calcPage.getInputById("Y"); + const Y1 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y1, "var"); // create a PAB : dimensions await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); // link Y to Y (R uniforme) - const Y2 = calcPage.getInputById("Y"); + const Y2 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); const sel = await calcPage.getLinkedValueSelect(Y2); await changeSelectValue(sel, 0); @@ -114,14 +138,14 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); // calculate Y - const Y1 = calcPage.getInputById("Y"); + const Y1 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y1, "cal"); // create a PAB : dimensions await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); // link Y to Y (R uniforme) - const Y2 = calcPage.getInputById("Y"); + const Y2 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); const sel = await calcPage.getLinkedValueSelect(Y2); await changeSelectValue(sel, 0); @@ -134,19 +158,19 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); // calculate Y - const Y1 = calcPage.getInputById("Y"); + const Y1 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y1, "cal"); // create a PAB : dimensions await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); // link Y to Y (R uniforme) - const Y2 = calcPage.getInputById("Y"); + const Y2 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); const sel = await calcPage.getLinkedValueSelect(Y2); await changeSelectValue(sel, 0); // vary W - const W = calcPage.getInputById("W"); + const W = await calcPage.getInputById("W"); await calcPage.setParamMode(W, "var"); await computeAndCheckPresenceOfResults(); @@ -157,17 +181,17 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); // vary Q - const Q = calcPage.getInputById("Q"); + const Q = await calcPage.getInputById("Q"); await calcPage.setParamMode(Q, "var"); // calculate Y - const Y1 = calcPage.getInputById("Y"); + const Y1 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y1, "cal"); // create a PAB : dimensions await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); // link Y to Y (R uniforme) - const Y2 = calcPage.getInputById("Y"); + const Y2 = await calcPage.getInputById("Y"); await calcPage.setParamMode(Y2, "link"); const sel = await calcPage.getLinkedValueSelect(Y2); await changeSelectValue(sel, 0); @@ -184,7 +208,7 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(18); // link V0 to V (Régime uniforme) - const V0 = calcPage.getInputById("V0"); + const V0 = await calcPage.getInputById("V0"); await calcPage.setParamMode(V0, "link"); await computeAndCheckPresenceOfResults(); @@ -199,10 +223,10 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(18); // link V0 to V (Régime uniforme) - const V0 = calcPage.getInputById("V0"); + const V0 = await calcPage.getInputById("V0"); await calcPage.setParamMode(V0, "link"); // vary ZJ - const ZJ = calcPage.getInputById("ZJ"); + const ZJ = await calcPage.getInputById("ZJ"); await calcPage.setParamMode(ZJ, "var"); await computeAndCheckPresenceOfResults(); @@ -213,14 +237,14 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); // vary LargeurBerge - const LargeurBerge = calcPage.getInputById("LargeurBerge"); + const LargeurBerge = await calcPage.getInputById("LargeurBerge"); await calcPage.setParamMode(LargeurBerge, "var"); // create a Jet await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(18); // link V0 to V (Régime uniforme) - const V0 = calcPage.getInputById("V0"); + const V0 = await calcPage.getInputById("V0"); await calcPage.setParamMode(V0, "link"); await computeAndCheckPresenceOfResults(); @@ -231,16 +255,17 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickNewCalculatorButton(); await navBar.clickMenuButton(); await browser.pause(200); - await sidenav.clickLoadSessionButton(); + await sideNav.clickLoadSessionButton(); await browser.pause(200); - await sidenav.loadSessionFile("./session/session-multivar-link.json"); + await sideNav.loadSessionFile("./session/session-multivar-link.json"); await browser.pause(500); expect(await navBar.getAllCalculatorTabs().length).toBe(2); // calculate await navBar.clickCalculatorTab(0); - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); // check that result is not empty const hasResults = await calcPage.hasResults(); @@ -251,12 +276,12 @@ describe("ngHyd − calculate with linked parameters", () => { expect(await calcPage.getAllVariatedResultsTableHeaders().length).toBe(7); // check that number of rows in the variated results table equals number of variated values - const varRows = calcPage.getAllVariatedResultsRows(); - const nbRows = await varRows.length; - expect(nbRows).toBe(191); // boundaries are included + const varRows = await calcPage.getAllVariatedResultsRows(); + // const nbRows = await varRows.length; + expect(varRows.length).toBe(191); // boundaries are included // check that all parameters have values for all iterations (Z2 might miss some if repeat strategy is not applied) - const lastRow = varRows.get(nbRows - 1); + const lastRow = varRows[varRows.length - 1]; const tds = await lastRow.$$("td"); tds.forEach((td) => { expect(td.getText()).not.toBe(""); @@ -268,9 +293,9 @@ describe("ngHyd − calculate with linked parameters", () => { // load session await navBar.clickMenuButton(); await browser.pause(200); - await sidenav.clickLoadSessionButton(); + await sideNav.clickLoadSessionButton(); await browser.pause(200); - await sidenav.loadSessionFile("./session/session-pab-chain-nghyd-329.json"); + await sideNav.loadSessionFile("./session/session-pab-chain-nghyd-329.json"); await browser.pause(200); expect(await navBar.getAllCalculatorTabs().length).toBe(3); @@ -278,16 +303,18 @@ describe("ngHyd − calculate with linked parameters", () => { await navBar.clickCalculatorTab(2); await browser.pause(200); // click "compute" button - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(300); // check that result is not empty expect(await calcPage.hasResults()).toBe(true); // check that ERR is not present in Volume line of results table - let frt = calcPage.getFixedResultsTable(); - let volumeRow = calcPage.getNthRow(frt, 3); - let volumeCol = calcPage.getNthColumn(volumeRow, 2); - let volume = await volumeCol.getAttribute("textContent"); + let frt = await calcPage.getFixedResultsTable(); + let volumeRow = await calcPage.getNthRow(frt, 3); + let volumeCol = await calcPage.getNthColumn(volumeRow, 2); + // let volume = await volumeCol.getAttribute("textContent"); + let volume = await volumeCol.getText(); expect(Number(volume)).toBeCloseTo(44.565, 3); // click PAB-Nombre tab @@ -299,10 +326,11 @@ describe("ngHyd − calculate with linked parameters", () => { await browser.pause(200); // check that ERR is not present in Volume line of results table - frt = calcPage.getFixedResultsTable(); - volumeRow = calcPage.getNthRow(frt, 3); - volumeCol = calcPage.getNthColumn(volumeRow, 2); - volume = await volumeCol.getAttribute("textContent"); + frt = await calcPage.getFixedResultsTable(); + volumeRow = await calcPage.getNthRow(frt, 3); + volumeCol = await calcPage.getNthColumn(volumeRow, 2); + // volume = await volumeCol.getText("textContent"); + volume = await volumeCol.getText(); expect(Number(volume)).toBeCloseTo(44.565, 3); }); @@ -314,7 +342,7 @@ describe("ngHyd − calculate with linked parameters", () => { await browser.pause(200); // upstream water level should not have link mode (only one calculator) - const Z1_1 = calcPage.getInputById("Z1"); + const Z1_1 = await calcPage.getInputById("Z1"); expect(await calcPage.inputHasLinkModeButton(Z1_1)).toBe(false); // create 2nd PAB-Chute @@ -335,7 +363,7 @@ describe("ngHyd − calculate with linked parameters", () => { await browser.pause(200); // link upstream water level in 2nd calculator to upstream water level in 1st one - const Z1_2 = calcPage.getInputById("Z1"); + const Z1_2 = await calcPage.getInputById("Z1"); await calcPage.setParamMode(Z1_2, "link"); // back to 1st calculator diff --git a/e2e/calculator.e2e-spec.ts b/e2e/calculator.e2e-spec.ts index 841a53047..5c41eba08 100644 --- a/e2e/calculator.e2e-spec.ts +++ b/e2e/calculator.e2e-spec.ts @@ -21,10 +21,11 @@ describe("ngHyd − calculator page", () => { }); it("when a calculator is open, no active label should be empty", async () => { - const labels = page.getInputLabels(); - await labels.each(async (l) => { + const labels = await page.getInputLabels(); + // await labels.each(async (l) => { + for (const l of labels) { const label = await l.getText(); expect(label.length).toBeGreaterThan(0); - }); + } }); }); diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 5d11fc5d9..531b0e195 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -1,5 +1,6 @@ import { scrollPageToTop, scrollToElement } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { Key } from 'webdriverio' export class CalculatorPage { @@ -11,14 +12,58 @@ export class CalculatorPage { return $$("ngparam-input input.form-control"); } + // getParamfieldlines() { + // return $$("param-field-line"); + // } + + // getParamfieldlineInput(pfl) { + // return pfl.$("ngparam-input input.form-control"); + // } + + // async getParamInputsHavingCalcMode() { + // const ret = []; + // const inputs = await this.getParamInputs(); + // // await inputs.each(async (i) => { + // // if (await this.inputHasCalcModeButton(i)) { + // // ret.push(i); + // // } + // // }); + + // // for await (const img of $$('img')) { + // // console.log(await img.getAttribute('src)) + // // } + + // for await (const i of inputs) { + // if (await this.inputHasCalcModeButton(i)) { + // ret.push(i); + // } + // } + + // return ret; + // } async getParamInputsHavingCalcMode() { const ret = []; - const inputs = this.getParamInputs(); - await inputs.each(async (i) => { - if (await this.inputHasCalcModeButton(i)) { - ret.push(i); + const inputs = await $$("param-field-line"); + // await inputs.each(async (i) => { + // if (await this.inputHasCalcModeButton(i)) { + // ret.push(i); + // } + // }); + + // for await (const img of $$('img')) { + // console.log(await img.getAttribute('src)) + // } + + for (const inp of inputs) { + // if (await this.inputHasCalcModeButton(i)) { + // ret.push(i); + // } + const toggle = await inp.$("mat-button-toggle.radio_cal > button"); + if (await toggle.isExisting()) { + ret.push(inp); } - }); + } + return ret; } @@ -36,14 +81,16 @@ export class CalculatorPage { /** * get the option count of a select */ - async getMatselectOptionCount(select: string | Element) { - const sel = select instanceof Element ? select : $(`#${select}`); + async getMatselectOptionCount(select) { + const sel = typeof (select) === "string" ? $(`#${select}`) : select; await scrollToElement(sel); if ((await sel.isExisting()) && (await sel.isDisplayed())) { await sel.click(); const options = $$(".cdk-overlay-container mat-option"); // FIXME>>>>await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown + //await sel.keys('Escape'); // close dropdown + await browser.keys(Key.Escape); // close dropdown return await options.length; } } @@ -51,21 +98,25 @@ export class CalculatorPage { /** * get the text of the all given select options */ - async getMatselectOptionsText(select: string | Element): Promise<string[]> { - const sel = select instanceof Element ? select : $(`#${select}`); + async getMatselectOptionsText(select) { + const sel = typeof (select) === "string" ? await $(`#${select}`) : select; await scrollToElement(sel); + await browser.pause(200); if ((await sel.isExisting()) && (await sel.isDisplayed())) { await sel.click(); - const options = $$(".cdk-overlay-container mat-option span"); + await browser.pause(500); + const options = await $$(".cdk-overlay-container mat-option span"); let res = []; - const nopt = await options.length; + const nopt = options.length; for (let o = 0; o < nopt; o++) { - const opt = options.get(o); + const opt = options[o]; res.push(await opt.getText()) } // FIXME>>>>await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown - + // await sel.keys('Escape'); // close dropdown + await browser.keys(Key.Escape); // close dropdown + await browser.pause(500); return res; } } @@ -83,11 +134,18 @@ export class CalculatorPage { */ async getMatselectCurrentOptionText(select): Promise<string> { const currentOption = await this.getSelectCurrentOption(select); - return await currentOption.$("span span").getText(); + await browser.pause(100); + // return await currentOption.$("span span").getText(); + const opt = await currentOption.$("span span"); + await browser.pause(100); + const res = await opt.getText(); + await browser.pause(100); + return res; } getSelectById(id: string) { - return $(`#${id}`); + // return $(`#${id}`); + return $(`mat-select[id='${id}']`); // IDs cannot by a number, so use this query form } async isMatSelectPresent(id: string) { @@ -96,7 +154,8 @@ export class CalculatorPage { } async getSelectValueText(select) { - return await select.$(".mat-select-value-text > span").getText(); + const span = await select.$(".mat-select-value-text > span"); + return await span.getText(); } async isSelectEmpty(select) { @@ -110,7 +169,12 @@ export class CalculatorPage { } getInputById(id: string) { - return $(`#${id}`); + // return $(`#${id}`); + return $(`input[id='${id}']`); // IDs cannot by a number, so use this query form + } + + getNgInputById(id: string) { + return $(`ngparam-input input[id='${id}']`); // IDs cannot by a number, so use this query form } getSaveSessionButton() { @@ -130,11 +194,11 @@ export class CalculatorPage { } getAddStructureButton() { - return $("structure-fieldset-container .hyd-window-btns button.add-structure"); + return $("fieldset-container .hyd-window-btns button.add-structure"); } getCopyStructureButton() { - return $("structure-fieldset-container .hyd-window-btns button.copy-structure"); + return $("fieldset-container .hyd-window-btns button.copy-structure"); } getAllLinkButtons() { @@ -182,34 +246,74 @@ export class CalculatorPage { } async isNgParamPresent(id: string) { - const inp = $("ngparam-input input#" + id); + // const inp = $("ngparam-input input#" + id); + const inp = await this.getNgInputById(id); return await inp.isExisting(); } - async inputHasCalcModeButton(input) { + /** + * find parameter mode radio button linked to an input + */ + async getInputRadioButton(input, mode: string) { + const tag = await input.getTagName(); + // this function may not be called with an input but a param-field-line + const root = tag === "input" ? await this.findParentContainer(input) : input; // get parent (div.container) - const container = await this.findParentContainer(input); - // find radio buttons - const button = container.$("mat-button-toggle.radio_cal > button"); + // const container = ; + // find radio button + // return await root.$(`mat-button-toggle.radio_${mode} > button`); + return await root.$(`mat-button-toggle.radio_${mode}`); + } + + /** + * find parameter mode radio button linked to an input + */ + async getInputRadioButtonFromId(id, mode) { + const input = await this.getInputById(id); + // get parent (div.container) + // const container = await this.findParentContainer(input); + // // find radio button + // return await container.$(`mat-button-toggle.radio_${mode} > button`); + return await this.getInputRadioButton(input, mode); + } + + async inputHasCalcModeButton(input) { + // // get parent (div.container) + // const container = await this.findParentContainer(input); + // // find radio buttons + // const button = await container.$("mat-button-toggle.radio_cal > button"); + const button = await this.getInputRadioButton(input, "cal"); return await button.isExisting(); } async inputHasLinkModeButton(input) { - // get parent (div.container) - const container = await this.findParentContainer(input); - // find radio buttons - const button = container.$("mat-button-toggle.radio_link > button"); + // // get parent (div.container) + // const container = await this.findParentContainer(input); + // // find radio buttons + // const button = container.$("mat-button-toggle.radio_link > button"); + const button = await this.getInputRadioButton(input, "link"); return await button.isExisting(); } + async isRadioButtonChecked(radio) { + // return (await radio.getAttribute("ng-reflect-checked")) === "true"; + // if (await radio.getTagName() !== "mat-radio-button") { + if (await radio.getTagName() !== "mat-button-toggle") { + radio = await this.getParentElement(radio); + } + const a = await radio.getAttribute("ng-reflect-checked"); + return a === "true"; + } + /** * @returns true if "fixed mode" button linked to an input is selected */ async inputIsInFixedMode(input): Promise<boolean> { - // get parent (div.container) - const container = await this.findParentContainer(input); - // find fixed radio button - const button = container.$("mat-button-toggle.radio_fix"); + // // get parent (div.container) + // const container = await this.findParentContainer(input); + // // find fixed radio button + // const button = container.$("mat-button-toggle.radio_fix"); + const button = await this.getInputRadioButton(input, "fix"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } @@ -217,10 +321,11 @@ export class CalculatorPage { * @returns true if "calculated mode" button linked to an input is selected */ async inputIsInCalculatedMode(input): Promise<boolean> { - // get parent (div.container) - const container = await this.findParentContainer(input); - // find calc radio button - const button = container.$("mat-button-toggle.radio_cal"); + // // get parent (div.container) + // const container = await this.findParentContainer(input); + // // find calc radio button + // const button = container.$("mat-button-toggle.radio_cal"); + const button = await this.getInputRadioButton(input, "cal"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } @@ -228,32 +333,40 @@ export class CalculatorPage { * @returns true if "linked mode" button linked to an input is selected */ async inputIsInLinkedMode(input): Promise<boolean> { - // get parent (div.container) - const container = await this.findParentContainer(input); - // find calc radio button - const button = container.$("mat-button-toggle.radio_link"); + // // get parent (div.container) + // const container = await this.findParentContainer(input); + // // find calc radio button + // const button = container.$("mat-button-toggle.radio_link"); + const button = await this.getInputRadioButton(input, "link"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } async hasResults() { - return ((await this.presentAndVisible("fixedvar-results fixed-results > .fixed-results-container")) - || - (await this.presentAndVisible("fixedvar-results results-chart > chart-results-container")) - || - (await this.presentAndVisible("section-results fixed-results > .fixed-results-container")) - || - (await this.presentAndVisible("remous-results #main-chart")) - || - (await this.presentAndVisible("pab-results pab-results-table")) - || - (await this.presentAndVisible("pb-results pb-results-table")) - || - (await this.presentAndVisible("macrorugo-compound-results macrorugo-compound-results-table")) || (await this.presentAndVisible("jet-results .fixed-results-container"))); - } - - async presentAndVisible(selector: string): Promise<boolean> { - const elt = $(selector); - return (await elt.isExisting()) && (await elt.isDisplayed()); + return (await (this.presentAndVisible("fixedvar-results fixed-results > .fixed-results-container")) + || + (await this.presentAndVisible("fixedvar-results results-chart > chart-results-container")) + || + (await this.presentAndVisible("section-results fixed-results > .fixed-results-container")) + || + (await this.presentAndVisible("remous-results #main-chart")) + || + (await this.presentAndVisible("pab-results pab-results-table")) + || + (await this.presentAndVisible("pb-results pb-results-table")) + || + (await this.presentAndVisible("macrorugo-compound-results macrorugo-compound-results-table")) + || + (await this.presentAndVisible("jet-results .fixed-results-container"))); + } + + async presentAndVisible(selector: string) { + const elt = await $(selector); + // return (await elt.isExisting()) && (await elt.isDisplayed()); + // console.log("presentAndVisible isExisting", selector, await elt.isExisting()) + // console.log("presentAndVisible isDisplayed", selector, await elt.isDisplayed()) + const res = (await elt.isExisting()) && (await elt.isDisplayed()); + // console.log("res", selector, res); + return res; } /** @@ -326,37 +439,89 @@ export class CalculatorPage { } async clickCloneCalcButton() { - const cloneButton = $("#clone-calc"); - return await cloneButton.click(); + const cloneButton = await $("#clone-calc"); + await scrollToElement(cloneButton); + await cloneButton.click(); } // check that "compute" button is in given enabled/disabled state async checkCalcButtonEnabled(enabled: boolean) { - const calcButton = this.getCalculateButton(); + const calcButton = await this.getCalculateButton(); expect(await calcButton.isEnabled()).toBe(enabled); return calcButton; } + async getParentElement(elt) { + return elt.$(".."); + } + // find parent element of elt having class "container" async findParentContainer(elt) { let i = 8; // garde fous while (((await elt.getAttribute("class")) !== "container") && (i >= 0)) { - elt = elt.$(".."); + // elt = await elt.$(".."); + elt = await this.getParentElement(elt) i--; } return elt; } + async logElement(elt, attr = undefined) { + console.log("ELT TAG", await elt.getTagName()); + console.log("ELT ID", await elt.getAttribute("id")); + console.log("ELT CLASS", await elt.getAttribute("class")); + // console.log("ELT VALUE '" + await elt.getAttribute("value") + "'"); + console.log("ELT VALUE '" + await elt.getValue() + "'"); + console.log("ELT TEXT '" + await elt.getText() + "'"); + if (attr !== undefined) { + console.log(`ELT ATTR '${attr}'='${await elt.getAttribute(attr)}'`); + } + } + + async logParamFieldLine(pfl) { + await this.logElement(pfl); + const inp = await pfl.$("ngparam-input input.form-control"); + await this.logElement(inp) + } + /** - * @param elt an <input> element + * @param paramFieldLine an <input> element * @param mode "fix", "var", "cal" or "link" */ async setParamMode(elt, mode: string) { + await scrollToElement(elt); + await browser.pause(100); + // // get parent (div.container) + // const container = await this.findParentContainer(elt); + // // find radio buttons + // const button = await container.$("mat-button-toggle.radio_" + mode + " > button"); + const button = await this.getInputRadioButton(elt, mode); + //await scrollPageToTop(); // sometimes button slides behind navbar and click() fails + await button.click(); + // for "var" mode, close the modal + if (mode === "var") { + await browser.pause(500); // wait for the modal to appear + //await element(by.css("dialog-edit-param-values .mat-dialog-actions button")).click(); // clique "annuler" et non "valider" : + const cancelBtn = await $("dialog-edit-param-values .mat-dialog-actions button.mat-warn"); + await cancelBtn.click(); + await browser.pause(500); // wait for the navbar to reappear after modal dismissal + } else { + await browser.pause(200); + } + } + + async setParamMode2(paramFieldLine, mode: string) { + // await elt.scrollIntoView({ block: 'center', inline: 'center' }); + // await paramFieldLine.waitForDisplayed(); + // await paramFieldLine.scrollIntoView({ block: 'center' }); + + // browser.executeScript("document.querySelector('#countries').scrollIntoView()") + //await browser.execute(e => { e.scrollIntoView({ block: 'center' }) }, paramFieldLine); + await scrollToElement(paramFieldLine); + // await browser.pause(100); // get parent (div.container) - const container = await this.findParentContainer(elt); - // find radio buttons - const button = container.$("mat-button-toggle.radio_" + mode + " > button"); - await scrollPageToTop(); // sometimes button slides behind navbar and click() fails + const button = await paramFieldLine.$("mat-button-toggle.radio_" + mode + " > button"); + //await scrollPageToTop(); // sometimes button slides behind navbar and click() fails await button.click(); // for "var" mode, close the modal if (mode === "var") { @@ -383,13 +548,14 @@ export class CalculatorPage { * by parameter ID */ async storeAllInputValues() { - const inputs = this.getParamInputs(); + const inputs = await this.getParamInputs(); const values = {}; - await inputs.each(async (i) => { + for (const i of inputs) { const inputId = await i.getAttribute("id"); - const inputValue = await i.getAttribute("value"); + // const inputValue = await i.getAttribute("value"); + const inputValue = await i.getValue(); values[inputId] = +inputValue; // cast to number to avoid false negative (integers starting with 0) - }); + }; return values; } @@ -397,24 +563,27 @@ export class CalculatorPage { * Modifies all the calculator's editable inputs values by adding a random digit other than 0 at the end */ async modifyAllInputValues() { - const inputs = this.getParamInputs(); - await inputs.each(async (i) => { + const inputs = await this.getParamInputs(); + for (const i of inputs) { if (await i.isDisplayed()) { // N in YAXN child of SPP module must not be float - const isN = (await i.getAttribute("id")).includes("_N"); // @TODO strengthen this clodo test + const id = await i.getAttribute("id"); + const isN = id.includes("_N"); // @TODO strengthen this clodo test // Ob in Grille is set to 0.5 but cannot exceed 0.58; do not touch it - const isOb = (await i.getAttribute("id")) === "Ob"; - const hasDot = (await i.getAttribute("value")).includes("."); - const hasExponent = (await i.getAttribute("value")).includes("e"); - let keys = "" + Math.floor(Math.random() * 9) + 1; + const isOb = id === "Ob"; + // const value = await i.getAttribute("value"); + const value = await i.getValue(); + const hasDot = value.includes("."); + const hasExponent = value.includes("e"); + let keys = "" + (Math.floor(Math.random() * 9) + 1); if (!hasDot && !hasExponent && !isN) { keys = "." + keys; } if (!isOb && (await i.getAttribute("disabled")) === null) { - await i.setValue(keys); + await i.addValue(keys); } } - }); + }; } /** @@ -423,8 +592,9 @@ export class CalculatorPage { * @param empty true to check input is empty, false to check it is NOT empty */ async checkEmptyInput(id: string, empty: boolean = true) { - const inp = this.getInputById(id); - const val = await inp.getAttribute("value"); + const inp = await this.getInputById(id); + // const val = inp.getAttribute("value"); + const val = await inp.getValue() if (empty) { expect(val).toEqual(""); } @@ -442,7 +612,8 @@ export class CalculatorPage { let n = 0; for (const id of inputIds) { const inp = await this.getInputById(id); - const txt = await inp.getAttribute("value"); + // const txt = await inp.getAttribute("value"); + const txt = await inp.getValue(); expect(txt === "").toEqual(emptys[n]); n++; } @@ -458,11 +629,31 @@ export class CalculatorPage { /** * reliable input clearing */ - async clearInput(inp: ElementFinder) { - const txt = await inp.getAttribute('value'); + async clearInput(inp) { + await inp.click(); // make input get focus for browser.keys() to send key sequence to it + const txt = await inp.getValue(); const len = txt.length; for (let n = 0; n < len; n++) { - await inp.sendKeys(Key.BACK_SPACE); + await browser.keys(Key.Backspace); } } + + async closeSnackBar() { + // const sb = $(".mat-simple-snackbar-action"); + const sb = $("simple-snack-bar button"); + if ((await sb.isExisting()) && (await sb.isDisplayed())) { + await sb.click(); + return true; + } + return false; + } + + async closeSnackBars(n: number, pause: number) { + let stop: boolean; + do { + stop = !await this.closeSnackBar(); + await browser.pause(pause); + n--; + } while (n > 0 && !stop); + } } diff --git a/e2e/check-translations.e2e-spec.ts b/e2e/check-translations.e2e-spec.ts index cd0493c6f..cd06561de 100644 --- a/e2e/check-translations.e2e-spec.ts +++ b/e2e/check-translations.e2e-spec.ts @@ -4,6 +4,7 @@ import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; import { testedCalcTypes } from "./tested_calctypes"; +import { browser, $, $$, expect } from '@wdio/globals' /** * For all calculators, try to calculate every parameter: check that only one parameter @@ -71,13 +72,17 @@ describe("ngHyd − check translation of all calculators", () => { if (!disabledState) { // click "compute" button await calcButton.click(); + await browser.pause(200); // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); } // check absence of "*** message not found" in whole DOM - expect(await browser.getSource()).not.toContain("*** message not found", "missing translations found"); + // const source = document.body.innerHTML; + const source = await browser.execute("return document.body.innerHTML"); + // expect(await browser.getSource()).not.toContain("*** message not found", "missing translations found"); + expect(source).not.toContain("*** message not found", "missing translations found"); // empty session await navBar.clickMenuButton(); diff --git a/e2e/cloisons.e2e-spec.ts b/e2e/cloisons.e2e-spec.ts index f372175d1..b134960bf 100644 --- a/e2e/cloisons.e2e-spec.ts +++ b/e2e/cloisons.e2e-spec.ts @@ -3,6 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Cloisons - différents tests qui n'ont pas tant de rapport que ça avec les cloisons :) @@ -38,23 +39,25 @@ describe("ngHyd − cloisons", () => { await browser.pause(300); // 3. link every parameter except Structure ones - await calcPage.setParamMode(calcPage.getInputById("calc_Q"), "link"); - await calcPage.setParamMode(calcPage.getInputById("Z1"), "link"); - await calcPage.setParamMode(calcPage.getInputById("LB"), "link"); - await calcPage.setParamMode(calcPage.getInputById("BB"), "link"); - await calcPage.setParamMode(calcPage.getInputById("PB"), "link"); - await calcPage.setParamMode(calcPage.getInputById("DH"), "link"); + await calcPage.setParamMode(await calcPage.getInputById("calc_Q"), "link"); + await calcPage.setParamMode(await calcPage.getInputById("Z1"), "link"); + await calcPage.setParamMode(await calcPage.getInputById("LB"), "link"); + await calcPage.setParamMode(await calcPage.getInputById("BB"), "link"); + await calcPage.setParamMode(await calcPage.getInputById("PB"), "link"); + await calcPage.setParamMode(await calcPage.getInputById("DH"), "link"); await browser.pause(300); // 4. change LoiDebit - await changeSelectValue(calcPage.getSelectById("select_loidebit"), 1); + await changeSelectValue(await calcPage.getSelectById("select_loidebit"), 1); await browser.pause(300); - + // 5. check number of inputs in CALC mode expect(await calcPage.getCheckedCalcModeButtons().length).toBe(1); - + // 6. try calculating the module - await calcPage.getCalculateButton().click(); - expect(calcPage.hasResults()).toBe(true); + const btn = await calcPage.getCalculateButton() + await btn.click(); + await browser.pause(200); + expect(await calcPage.hasResults()).toBe(true); }); }); diff --git a/e2e/clone-all-calc.e2e-spec.ts b/e2e/clone-all-calc.e2e-spec.ts index f8a588fec..3520cd7d9 100644 --- a/e2e/clone-all-calc.e2e-spec.ts +++ b/e2e/clone-all-calc.e2e-spec.ts @@ -3,7 +3,9 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { testedCalcTypes } from "./tested_calctypes"; -import { scrollPageToTop } from "./util.po"; +import { newSession, scrollPageToTop } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { SideNav } from "./sidenav.po"; /** * Clone calculators @@ -11,14 +13,16 @@ import { scrollPageToTop } from "./util.po"; describe("ngHyd − clone all calculators with all possible <select> values", () => { let listPage: ListPage; let calcPage: CalculatorPage; - let navbar: Navbar; + let navBar: Navbar; let prefPage: PreferencesPage; + let sideNav: SideNav; beforeAll(async () => { listPage = new ListPage(); calcPage = new CalculatorPage(); - navbar = new Navbar(); + navBar = new Navbar(); prefPage = new PreferencesPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -26,6 +30,8 @@ describe("ngHyd − clone all calculators with all possible <select> values", () await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); await browser.pause(200); + + await navBar.clickNewCalculatorButton(); }); describe("", () => { @@ -40,9 +46,11 @@ describe("ngHyd − clone all calculators with all possible <select> values", () } describe(" − clone all variations of calculator type [" + ct + "]", () => { it("", async () => { - await navbar.clickNewCalculatorButton(); + await newSession(navBar, sideNav); + // click calculator button (instanciate) await listPage.clickMenuEntryForCalcType(ct); + await browser.pause(200); // get all select IDs outside Structures // get select IDs inside Structures @@ -56,12 +64,12 @@ describe("ngHyd − clone all calculators with all possible <select> values", () await scrollPageToTop(); await calcPage.clickCloneCalcButton(); await browser.pause(300); - + // check existence of the cloned module - expect(await navbar.getAllCalculatorTabs().length).toBe(2); - + expect(await navBar.getAllCalculatorTabs().length).toBe(2); + // @TODO check <select> values - + // read all <input> values and compare them to stored ones const cloneValues = await calcPage.storeAllInputValues(); for (const k in cloneValues) { diff --git a/e2e/clone-calc.e2e-spec.ts b/e2e/clone-calc.e2e-spec.ts index 1fcb7dd4f..f52677838 100644 --- a/e2e/clone-calc.e2e-spec.ts +++ b/e2e/clone-calc.e2e-spec.ts @@ -3,6 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue, scrollPageToTop } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Clone calculators @@ -32,7 +33,7 @@ describe("ngHyd − clone a calculator", () => { // 1. create target modules for linked parameter await listPage.clickMenuEntryForCalcType(3); // Régime uniforme await browser.pause(500); - const debitRU = calcPage.getInputById("calc_Q"); // "Débit" is calculated by default + const debitRU = await calcPage.getInputById("calc_Q"); // "Débit" is calculated by default await calcPage.setParamMode(debitRU, "fix"); await browser.pause(500); @@ -50,16 +51,18 @@ describe("ngHyd − clone a calculator", () => { k: 0.6, Ks: 42 }; - await changeSelectValue(calcPage.getSelectById("select_section"), 3); // mode "parabolique" + const selSection = await calcPage.getSelectById("select_section"); + await changeSelectValue(selSection, 3); // mode "parabolique" await calcPage.getInputById("k").clearValue(); await calcPage.getInputById("k").setValue(sourceValues["k"]); await calcPage.getInputById("Ks").clearValue(); await calcPage.getInputById("Ks").setValue(sourceValues["Ks"]); // link "Débit" to "Courbe de remous" - const debitSP = calcPage.getInputById("Q"); + const debitSP = await calcPage.getInputById("Q"); await calcPage.setParamMode(debitSP, "link"); await browser.pause(500); - await changeSelectValue(calcPage.getSelectById("linked_Q"), 1); // "Courbe de remous" + const selQ = await calcPage.getSelectById("linked_Q"); + await changeSelectValue(selQ, 1); // "Courbe de remous" await browser.pause(500); // otherwise clickCloneCalcButton() fails with "Element is not clickable at point" @@ -73,11 +76,15 @@ describe("ngHyd − clone a calculator", () => { await browser.pause(500); // 5. compare values - Object.keys(sourceValues).forEach(async (k) => { + // Object.keys(sourceValues).forEach(async (k) => { + // const v = sourceValues[k]; + for (const k in sourceValues) { const v = sourceValues[k]; - const displayedVal = await calcPage.getInputById(k).getAttribute("value"); + // const displayedVal = await calcPage.getInputById(k).getAttribute("value"); + const inp = await calcPage.getInputById(k); + const displayedVal = await inp.getValue(); expect(displayedVal).toBe("" + v); - }); + }; // @TODO check linked value (see above) }); diff --git a/e2e/compute-reset-chained-links.e2e-spec.ts b/e2e/compute-reset-chained-links.e2e-spec.ts index 6152104ec..73b01da87 100644 --- a/e2e/compute-reset-chained-links.e2e-spec.ts +++ b/e2e/compute-reset-chained-links.e2e-spec.ts @@ -3,6 +3,8 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { newSession } from "./util.po"; /** * Load a session containing 3 calculators, having linked parameters @@ -14,14 +16,14 @@ import { PreferencesPage } from "./preferences.po"; describe("ngHyd − compute then reset chained results − ", () => { let startPage: AppPage; let calcPage: CalculatorPage; - let navbar: Navbar; + let navBar: Navbar; let sidenav: SideNav; let prefPage: PreferencesPage; beforeAll(() => { startPage = new AppPage(); calcPage = new CalculatorPage(); - navbar = new Navbar(); + navBar = new Navbar(); sidenav = new SideNav(); prefPage = new PreferencesPage(); }); @@ -29,35 +31,36 @@ describe("ngHyd − compute then reset chained results − ", () => { it("when loading session-cascade-params.json, computation should not be chained, but results reset should be", async () => { // load session file await startPage.navigateTo(); - await navbar.clickMenuButton(); + await navBar.clickMenuButton(); await browser.pause(200); await sidenav.clickLoadSessionButton(); await browser.pause(200); await sidenav.loadSessionFile("./session/session-cascade-params.json"); await browser.pause(500); - expect(await navbar.getAllCalculatorTabs().length).toBe(3); + expect(await navBar.getAllCalculatorTabs().length).toBe(3); // 1. get down-most module - await navbar.clickCalculatorTabForUid("Y2l2Y3"); + await navBar.clickCalculatorTabForUid("Y2l2Y3"); // click "compute" button const calcButton = calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); // down-most module should have results let hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); // up-most should not - await navbar.clickCalculatorTabForUid("ZTFxeW"); + await navBar.clickCalculatorTabForUid("ZTFxeW"); hasResults = await calcPage.hasResults(); expect(hasResults).toBe(false); - await navbar.clickCalculatorTabForUid("Z3EwY2"); + await navBar.clickCalculatorTabForUid("Z3EwY2"); // middle one should hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); // 2. get up-most module - await navbar.clickCalculatorTabForUid("ZTFxeW"); + await navBar.clickCalculatorTabForUid("ZTFxeW"); // modify an input that is not linked await calcPage.getInputById("Ks").clearValue(); @@ -65,13 +68,13 @@ describe("ngHyd − compute then reset chained results − ", () => { // other 2 modules should still have their results for (let i = 1; i < 3; i++) { - await navbar.clickCalculatorTab(i); + await navBar.clickCalculatorTab(i); hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); } // 3. get up-most module again - await navbar.clickCalculatorTabForUid("ZTFxeW"); + await navBar.clickCalculatorTabForUid("ZTFxeW"); // modify input that is linked await calcPage.getInputById("LargeurBerge").clearValue(); @@ -79,7 +82,7 @@ describe("ngHyd − compute then reset chained results − ", () => { // check all 3 modules for absence of results for (let i = 0; i < 3; i++) { - await navbar.clickCalculatorTab(i); + await navBar.clickCalculatorTab(i); hasResults = await calcPage.hasResults(); expect(hasResults).toBe(false); } @@ -88,30 +91,31 @@ describe("ngHyd − compute then reset chained results − ", () => { it("when loading session-cascade-results.json, computation and results reset should be chained", async () => { // load session file await startPage.navigateTo(); - await navbar.clickMenuButton(); + await navBar.clickMenuButton(); await browser.pause(200); await sidenav.clickLoadSessionButton(); await browser.pause(200); await sidenav.loadSessionFile("./session/session-cascade-results.json"); await browser.pause(500); - expect(await navbar.getAllCalculatorTabs().length).toBe(3); + expect(await navBar.getAllCalculatorTabs().length).toBe(3); // 1. get down-most module (PAB Dimensions) - await navbar.clickCalculatorTabForUid("eHh5YX"); + await navBar.clickCalculatorTabForUid("eHh5YX"); // click "compute" button const calcButton = calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); // check all 3 modules for results for (let i = 0; i < 3; i++) { - await navbar.clickCalculatorTab(i); + await navBar.clickCalculatorTab(i); const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); } // 2. get up-most module (Macro-rugo) - await navbar.clickCalculatorTabForUid("MGg5OH"); + await navBar.clickCalculatorTabForUid("MGg5OH"); // modify any input (for ex. "Ks") await calcPage.getInputById("Ks").clearValue(); @@ -119,71 +123,75 @@ describe("ngHyd − compute then reset chained results − ", () => { // check all 3 modules for absence of results for (let i = 0; i < 3; i++) { - await navbar.clickCalculatorTab(i); + await navBar.clickCalculatorTab(i); const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(false); } }); it("when loading session-results-invalidation.json, results reset should not be triggered on calculation", async () => { + await newSession(navBar, sidenav); + // disable evil option "empty fields on module creation" await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); await browser.pause(200); // start page - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await browser.pause(200); // load session file - await navbar.clickMenuButton(); + await navBar.clickMenuButton(); await browser.pause(200); await sidenav.clickLoadSessionButton(); await browser.pause(200); await sidenav.loadSessionFile("./session/session-results-invalidation.json"); await browser.pause(500); - expect(await navbar.getAllCalculatorTabs().length).toBe(2); + expect(await navBar.getAllCalculatorTabs().length).toBe(2); // get down-most module (Ouvrages) - await navbar.clickCalculatorTabForUid("amd2OG"); + await navBar.clickCalculatorTabForUid("amd2OG"); // click "compute" button const calcButton = calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); // 2. get up-most module (Ouvrages 1) - await navbar.clickCalculatorTabForUid("aTgwMm"); + await navBar.clickCalculatorTabForUid("aTgwMm"); // modify an input that is not linked await calcPage.getInputById("Z2").clearValue(); await calcPage.getInputById("Z2").setValue("101.8"); // the down-most module should still have its results - await navbar.clickCalculatorTabForUid("amd2OG"); + await navBar.clickCalculatorTabForUid("amd2OG"); const hasResults2 = await calcPage.hasResults(); expect(hasResults2).toBe(true); // calculate the upmost module - await navbar.clickCalculatorTabForUid("aTgwMm"); + await navBar.clickCalculatorTabForUid("aTgwMm"); const calcButton2 = calcPage.getCalculateButton(); await calcButton2.click(); + await browser.pause(200); // the down-most module should still have its results - await navbar.clickCalculatorTabForUid("amd2OG"); + await navBar.clickCalculatorTabForUid("amd2OG"); const hasResults3 = await calcPage.hasResults(); expect(hasResults3).toBe(true); // modify an input that is linked - await navbar.clickCalculatorTabForUid("aTgwMm"); - await calcPage.getInputById("0_ZDV").clearValue(); - await calcPage.getInputById("0_ZDV").setValue("101"); + await navBar.clickCalculatorTabForUid("aTgwMm"); + const inpZDV = await calcPage.getInputById("0_ZDV"); + await inpZDV.clearValue(); + await inpZDV.setValue("101"); // the down-most module should not have its results anymore - await navbar.clickCalculatorTabForUid("amd2OG"); + await navBar.clickCalculatorTabForUid("amd2OG"); const hasResults4 = await calcPage.hasResults(); expect(hasResults4).toBe(false); - }); }); diff --git a/e2e/cote-amont-aval-bief.e2e-spec.ts b/e2e/cote-amont-aval-bief.e2e-spec.ts index 294151d0f..cee4caaee 100644 --- a/e2e/cote-amont-aval-bief.e2e-spec.ts +++ b/e2e/cote-amont-aval-bief.e2e-spec.ts @@ -2,18 +2,23 @@ import { PreferencesPage } from "./preferences.po" import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { newSession } from "./util.po"; +import { SideNav } from "./sidenav.po"; describe("ngHyd − up/downstream elevations of a reach", () => { let prefPage: PreferencesPage; let navBar: Navbar; let listPage: ListPage; let calcPage: CalculatorPage; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -37,32 +42,32 @@ describe("ngHyd − up/downstream elevations of a reach", () => { await flowCalcBtn.click(); // check details buttons are disabled - const upDetailsBtn = $("#generate-sp-aval"); - expect(upDetailsBtn.isEnabled()).toBe(false); - const downDetailsBtn = $("#generate-sp-amont"); - expect(downDetailsBtn.isEnabled()).toBe(false); + const upDetailsBtn = await $("#generate-sp-aval"); + expect(await upDetailsBtn.isEnabled()).toBe(false); + const downDetailsBtn = await $("#generate-sp-amont"); + expect(await downDetailsBtn.isEnabled()).toBe(false); // set value to upstream water elevation so that flow calculation leads to no error - const upWEinput = calcPage.getInputById("Z1"); + const upWEinput = await calcPage.getInputById("Z1"); await upWEinput.clearValue(); await upWEinput.setValue("100.664"); // run calculation const calcButton = calcPage.getCalculateButton(); await calcButton.click(); - await browser.pause(2000); + await browser.pause(300); // check details buttons are enabled - expect(upDetailsBtn.isEnabled()).toBe(true); - expect(downDetailsBtn.isEnabled()).toBe(true); + expect(await upDetailsBtn.isEnabled()).toBe(true); + expect(await downDetailsBtn.isEnabled()).toBe(true); // click upstream hydraulic details button await upDetailsBtn.click(); await browser.pause(500); // a second calculator should be created - let calcs = navBar.getAllCalculatorTabs(); - expect((await calcs).length).toEqual(2); + let calcs = await navBar.getAllCalculatorTabs(); + expect(calcs.length).toEqual(2); // click downstream hydraulic details button await navBar.openNthCalculator(0); @@ -70,38 +75,40 @@ describe("ngHyd − up/downstream elevations of a reach", () => { await browser.pause(500); // a third calculator should be created - calcs = navBar.getAllCalculatorTabs(); - expect((await calcs).length).toEqual(3); + calcs = await navBar.getAllCalculatorTabs(); + expect(calcs.length).toEqual(3); }); it("check hydraulic details availability - upstream water elevation calculation", async () => { + await newSession(navBar, sideNav); + // open "up/downstream elevations of a reach" calculator - await navBar.clickNewCalculatorButton(); + // await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(21); await browser.pause(200); // check details buttons status - const upDetailsBtn = $("#generate-sp-aval"); - expect(upDetailsBtn.isEnabled()).toBe(true); - const downDetailsBtn = $("#generate-sp-amont"); - expect(downDetailsBtn.isEnabled()).toBe(false); + const upDetailsBtn = await $("#generate-sp-aval"); + expect(await upDetailsBtn.isEnabled()).toBe(true); + const downDetailsBtn = await $("#generate-sp-amont"); + expect(await downDetailsBtn.isEnabled()).toBe(false); // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); - await browser.pause(2000); + await browser.pause(300); // check details buttons are enabled - expect(upDetailsBtn.isEnabled()).toBe(true); - expect(downDetailsBtn.isEnabled()).toBe(true); + expect(await upDetailsBtn.isEnabled()).toBe(true); + expect(await downDetailsBtn.isEnabled()).toBe(true); // click upstream hydraulic details button await upDetailsBtn.click(); await browser.pause(500); // a second calculator should be created - let calcs = navBar.getAllCalculatorTabs(); - expect((await calcs).length).toEqual(2); + let calcs = await navBar.getAllCalculatorTabs(); + expect(calcs.length).toEqual(2); // click downstream hydraulic details button await navBar.openNthCalculator(0); @@ -109,7 +116,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { await browser.pause(500); // a third calculator should be created - calcs = navBar.getAllCalculatorTabs(); - expect((await calcs).length).toEqual(3); + calcs = await navBar.getAllCalculatorTabs(); + expect(calcs.length).toEqual(3); }); }); diff --git a/e2e/courbe-remous-empty-fields.e2e-spec.ts b/e2e/courbe-remous-empty-fields.e2e-spec.ts index 35dbdf61b..39a08fd4c 100644 --- a/e2e/courbe-remous-empty-fields.e2e-spec.ts +++ b/e2e/courbe-remous-empty-fields.e2e-spec.ts @@ -2,6 +2,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check fields are empty in 'backwater curves' calculator when created with 'empty fields' option", () => { let listPage: ListPage; @@ -29,7 +30,7 @@ describe("Check fields are empty in 'backwater curves' calculator when created w await listPage.clickMenuEntryForCalcType(4); await browser.pause(200); - expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "Long", "YB", "ZF1", "ZF2", "Q", "Z1", "Z2", "Dx"], - [true, true, true, true, true, true, true, true, true, true])) + await calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "Long", "YB", "ZF1", "ZF2", "Q", "Z1", "Z2", "Dx"], + [true, true, true, true, true, true, true, true, true, true]); }); }); diff --git a/e2e/diagramme-modules.e2e-spec.ts b/e2e/diagramme-modules.e2e-spec.ts index a10251f05..4d523a2bb 100644 --- a/e2e/diagramme-modules.e2e-spec.ts +++ b/e2e/diagramme-modules.e2e-spec.ts @@ -2,6 +2,7 @@ import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * convert Mermaid formatted id ("flowchat-id-xx") to id @@ -48,8 +49,8 @@ describe("modules diagram", () => { await browser.pause(200); // click first module - const nodes = $$("g.node.default"); - const node0 = nodes.get(0); + const nodes = await $$("g.node.default"); + const node0 = nodes[0]; const n0id = removeMermaidIdFormat(await node0.getAttribute("id")); await node0.click(); await browser.pause(200); diff --git a/e2e/documentation.e2e-spec.ts b/e2e/documentation.e2e-spec.ts index b1e8d50cc..39ae0c60f 100644 --- a/e2e/documentation.e2e-spec.ts +++ b/e2e/documentation.e2e-spec.ts @@ -2,17 +2,18 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("documentation − ", () => { let listPage: ListPage; let calcPage: CalculatorPage; let prefPage: PreferencesPage; - let navbar: Navbar; + let navBar: Navbar; beforeAll(() => { calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); - navbar = new Navbar(); + navBar = new Navbar(); listPage = new ListPage(); // browser.manage().window().setPosition(2000, 30); @@ -26,7 +27,7 @@ describe("documentation − ", () => { await browser.pause(200); // start page - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await browser.pause(200); // open "fish ladder: fall" calculator @@ -37,36 +38,28 @@ describe("documentation − ", () => { await calcPage.getCalculatorHelpButton().click(); await browser.pause(200); - browser.getWindowHandles().then(async (handles) => { - const old = browser.ignoreSynchronization + const handles = await browser.getWindowHandles(); - // switch to help tab - browser.switchToWindow(handles[1]).then(async () => { - await browser.pause(200); - // check Mathjax element is present - expect(await $("mjx-container").isExisting()).toBe(true); - }).then(async () => { - // close help tab - // await browser.close(); - // await browser.sleep(200); - // switch back to calculator (required to avoid failure of next language test) - await browser.switchToWindow(handles[0]); - await browser.pause(200); - // browser.ignoreSynchronization = false; - }).then(async () => { - // switch back to calculator (required to avoid failure of next language test) - await browser.switchToWindow(handles[0]); - await browser.pause(200); - }); - }); - } + // switch to help tab + await browser.switchToWindow(handles[1]) + await browser.pause(200); + // check Mathjax element is present + const cont = await $("mjx-container"); + expect(await cont.isExisting()).toBe(true); + + // close help tab + await browser.execute("window.close()"); + + // switch back to calculator (required to avoid failure of next language test) + await browser.switchToWindow(handles[0]); + await browser.pause(200); + }; - xit("check Mathjax formula are displayed in calculator French help", async () => { - debugger + it("check Mathjax formula are displayed in calculator French help", async () => { await checkMathjaxInHelp(1); // fr }); - xit("check Mathjax formula are displayed in calculator English help", async () => { + it("check Mathjax formula are displayed in calculator English help", async () => { await checkMathjaxInHelp(0); // en }); }); diff --git a/e2e/duplicate-results.e2e-spec.ts b/e2e/duplicate-results.e2e-spec.ts index aed31aaec..ae36dcc54 100644 --- a/e2e/duplicate-results.e2e-spec.ts +++ b/e2e/duplicate-results.e2e-spec.ts @@ -2,6 +2,7 @@ import { PreferencesPage } from "./preferences.po" import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("ngHyd − check that results are not duplicated", () => { let prefPage: PreferencesPage; @@ -31,12 +32,13 @@ describe("ngHyd − check that results are not duplicated", () => { await browser.pause(200); // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); // check result count - const fixRows = calcPage.getAllFixedResultsRows(); - const nbRows = await fixRows.length; + const fixRows = await calcPage.getAllFixedResultsRows(); + const nbRows = fixRows.length; console.log(nbRows); expect(nbRows).toBe(24); // boundaries are included }); diff --git a/e2e/examples-empty-fields.e2e-spec.ts b/e2e/examples-empty-fields.e2e-spec.ts index eb6b8c32a..2c619e644 100644 --- a/e2e/examples-empty-fields.e2e-spec.ts +++ b/e2e/examples-empty-fields.e2e-spec.ts @@ -1,7 +1,9 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" -import { changeSelectValue } from "./util.po"; +import { SideNav } from "./sidenav.po"; +import { changeSelectValue, newSession } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * check that fields are empty on creation @@ -10,11 +12,13 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on let prefPage: PreferencesPage; let navBar: Navbar; let calcPage: CalculatorPage; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -32,7 +36,7 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on // open 1st example const examples = await $$("#examples-list .load-example"); - await (await examples)[0].click(); + await examples[0].click(); await browser.pause(50); // select wall module @@ -46,13 +50,15 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on }); it("calculated parameter initial value when discharge law is modified", async () => { + await newSession(navBar, sideNav); + // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + // await navBar.clickNewCalculatorButton(); + // await browser.pause(200); // open 1st example const examples = await $$("#examples-list .load-example"); - await (await examples)[0].click(); + await examples[0].click(); await browser.pause(50); // select wall module @@ -60,19 +66,21 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on await browser.pause(50); // modify 1st structure discharge law - const dischargeSelect = calcPage.getSelectById("select_loidebit"); + const dischargeSelect = await calcPage.getSelectById("select_loidebit"); await changeSelectValue(dischargeSelect, 1); await browser.pause(200); // open initial dialog - const initDlgButton = $(".param-computed-more"); + const initDlgButton = await $(".param-computed-more"); await initDlgButton.click(); await browser.pause(200); // check input value is not null - const input = calcPage.getInputById("initval-input"); - const underlyingInput = input.$("#0_h1"); - const txt = await underlyingInput.getAttribute("value"); + // const input = await calcPage.getInputById("initval-input"); + // const underlyingInput = await input.$("#0_h1"); + const underlyingInput = await $("ngparam-input input.form-control[id='0_h1']"); + // const txt = await underlyingInput.getAttribute("value"); + const txt = await underlyingInput.getValue(); expect(txt === "").toEqual(false); }); }); @@ -81,11 +89,13 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea let prefPage: PreferencesPage; let navBar: Navbar; let calcPage: CalculatorPage; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -97,13 +107,15 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea }); it("when calculation is run on a generated fish ladder calculator", async () => { + await newSession(navBar, sideNav); + // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + // await navBar.clickNewCalculatorButton(); + // await browser.pause(200); // open 1st example const examples = await $$("#examples-list .load-example"); - await (await examples)[0].click(); + await examples[0].click(); await browser.pause(50); // select wall module @@ -111,17 +123,17 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea await browser.pause(50); // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); // click "generate PAB" button - const genButton = calcPage.getGeneratePabButton(); + const genButton = await calcPage.getGeneratePabButton(); await genButton.click(); - await browser.pause(200); + await browser.pause(1000); // write "6" in basin count input - const nbBassins = calcPage.getInputById("generatePabNbBassins"); + const nbBassins = await calcPage.getInputById("generatePabNbBassins"); await nbBassins.setValue("6"); await browser.pause(50); @@ -130,7 +142,7 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea await browser.pause(1000); // calculate PAB - const calcButtonPAB = calcPage.getCalculateButton(); + const calcButtonPAB = await calcPage.getCalculateButton(); await calcButtonPAB.click(); await browser.pause(200); diff --git a/e2e/helpers/GremlinHelper.ts b/e2e/helpers/GremlinHelper.ts index 0da3f0619..434ffd860 100644 --- a/e2e/helpers/GremlinHelper.ts +++ b/e2e/helpers/GremlinHelper.ts @@ -18,7 +18,8 @@ function findFpsMessages(log: any[]) { } export function readGremlinsScript(): string { - return readFileSync(__dirname + "/gremlins.min.js", "UTF-8"); + // return readFileSync(__dirname + "/gremlins.min.js", "UTF-8"); + return readFileSync(__dirname + "/gremlins.min.js", "utf-8"); } export function unleashGremlins(callback: (args?: any) => void) { @@ -82,14 +83,14 @@ export function unleashGremlins(callback: (args?: any) => void) { // 2. <mat-icon> d'aide ? if ( element.tagName === "MAT-ICON" - && [ "help-calc", "help-fieldset", "help-fieldset-container", "help-input", "help-select" ].includes(element.id) + && ["help-calc", "help-fieldset", "help-fieldset-container", "help-input", "help-select"].includes(element.id) ) { return false; } else { // 3. file input ? let isFileInput = false; let curElem = element; - while (! isFileInput && curElem) { + while (!isFileInput && curElem) { isFileInput = ( curElem.tagName === "MAT-FORM-FIELD" && curElem.classList.contains("file-input-field") @@ -141,7 +142,7 @@ export function unleashGremlins(callback: (args?: any) => void) { // tslint:disable-next-line:quotemark 'input[type="text"]': function fillTextElement(element: HTMLInputElement) { // only send numbers in form fields - const num = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ][ Math.floor(Math.random() * 10) ]; + const num = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"][Math.floor(Math.random() * 10)]; element.value += num; element.dispatchEvent(new Event("input")); // so that the model is updated @TODO check that it works // @TODO wait before returning, needs async/await @@ -158,13 +159,13 @@ export function unleashGremlins(callback: (args?: any) => void) { ) .gremlin(Gremlins.species.toucher()) // OK // custom gremlin : click side menu, then an entry of the menu - .gremlin(function() { + .gremlin(function () { clickElementCenter("#open-menu"); const menuLinks = document.querySelectorAll("mat-sidenav .links-container > a"); const idx = Math.floor(Math.random() * menuLinks.length); const link = menuLinks.item(idx); // exclude links that would make us leave the app - if (! [ "side-nav-help", "side-nav-bug-report" ].includes(link.id)) { + if (!["side-nav-help", "side-nav-bug-report"].includes(link.id)) { doClickElementCenter(link); logs.log.push([ "gremlin", @@ -176,11 +177,11 @@ export function unleashGremlins(callback: (args?: any) => void) { } }) // custom gremlin : click new module button - .gremlin(function() { + .gremlin(function () { clickElementCenter("#new-calculator"); }) // custom gremlin : click calculate button - .gremlin(function() { + .gremlin(function () { clickElementCenter("#trigger-calculate"); }) @@ -193,7 +194,7 @@ export function unleashGremlins(callback: (args?: any) => void) { .strategy(Gremlins.strategies.distribution() .delay(delay) // default: 10 // .nb(100) // default: 100 - .distribution([ 0.62, 0.05, 0.05, 0.1, 0.02, 0.03, 0.03, 0.1 ]) + .distribution([0.62, 0.05, 0.05, 0.1, 0.02, 0.03, 0.03, 0.1]) // .distribution([ 0.72, 0.05, 0.05, 0.02, 0.03, 0.03, 0.1 ]) // same as above, without formFiller // .distribution([ 0.5, 0, 0, 0, 0, 0.5, 0, 0 ]) // only "open menu" and "click" ) @@ -230,7 +231,7 @@ export function unleashGremlins(callback: (args?: any) => void) { function doClickElementCenter(targetElement: Element): boolean { if (targetElement) { const evt = document.createEvent("MouseEvents"); - const [ posX, posY ] = getElementCenter(targetElement); + const [posX, posY] = getElementCenter(targetElement); evt.initMouseEvent("click", true, true, window, 0, 0, 0, posX, posY, false, false, false, false, 0, null); targetElement.dispatchEvent(evt); return true; @@ -242,21 +243,21 @@ export function unleashGremlins(callback: (args?: any) => void) { const rect = element.getBoundingClientRect(); const posX = rect.left + window.scrollX + (rect.width / 2); const posY = rect.top + window.scrollY + (rect.height / 2); - return [ posX, posY ]; + return [posX, posY]; } function getRandomPositionInsideElement(element: Element, modal: boolean = false) { const rect = element.getBoundingClientRect(); let minX = rect.left; - if (! modal) { + if (!modal) { minX += window.scrollX; } let minY = rect.top; - if (! modal) { + if (!modal) { minY += window.scrollY; } const posX = minX + Math.floor(Math.random() * rect.width); const posY = minY + Math.floor(Math.random() * rect.height); - return [ posX, posY ]; + return [posX, posY]; } } diff --git a/e2e/lechapt-calmon.e2e-spec.ts b/e2e/lechapt-calmon.e2e-spec.ts index 7a0f68ddd..3d4eaf9b9 100644 --- a/e2e/lechapt-calmon.e2e-spec.ts +++ b/e2e/lechapt-calmon.e2e-spec.ts @@ -3,6 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; import { changeSelectValue } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Check that created/cloned structures have empty fields when @@ -43,17 +44,18 @@ describe("Lechapt&Calmon - ", () => { await setup(); // select last material type - const materialSelect = calcPage.getSelectById("select_material"); + const materialSelect = await calcPage.getSelectById("select_material"); await changeSelectValue(materialSelect, 8); await browser.pause(200); // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); // store total pressure loss result - const res1 = calcPage.getAllFixedResultsRows().get(4); + const rows = await calcPage.getAllFixedResultsRows(); + const res1 = rows[4]; const pl1 = await res1.$$("td")[1].getText(); // select first material type @@ -65,7 +67,8 @@ describe("Lechapt&Calmon - ", () => { await browser.pause(200); // compare total pressure loss result with first calculaiotn - const res2 = calcPage.getAllFixedResultsRows().get(4); + const rows2 = await calcPage.getAllFixedResultsRows(); + const res2 = rows2[4]; const pl2 = await res2.$$("td")[1].getText(); expect(pl1).not.toEqual(pl2); diff --git a/e2e/link-parallel-devices.e2e-spec.ts b/e2e/link-parallel-devices.e2e-spec.ts index 845ccfdad..b4d62ae25 100644 --- a/e2e/link-parallel-devices.e2e-spec.ts +++ b/e2e/link-parallel-devices.e2e-spec.ts @@ -2,18 +2,23 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { newSession } from "./util.po"; +import { SideNav } from "./sidenav.po"; describe("ngHyd − parallel structures with multiple linked parameters − ", () => { let listPage: ListPage; let calcPage: CalculatorPage; let prefPage: PreferencesPage; let navBar: Navbar; + let sideNav: SideNav; beforeAll(() => { calcPage = new CalculatorPage(); listPage = new ListPage(); prefPage = new PreferencesPage(); navBar = new Navbar(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -26,23 +31,34 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( it("when creating Parallel Structures, devices should be linkable to one another", async () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(8); - await calcPage.getAddStructureButton().click(); + await browser.pause(200); + const addBtn = await calcPage.getAddStructureButton(); + await addBtn.click(); + await browser.pause(200); const nb1 = await calcPage.getAllLinkButtons().length; expect(nb1).toBe(8); // link buttons on children but not on parent }); - + it("when creating Cloisons, devices should be linkable to one another", async () => { - await navBar.clickNewCalculatorButton(); + await newSession(navBar, sideNav); + // await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); - await calcPage.getAddStructureButton().click(); + await browser.pause(200); + const addBtn = await calcPage.getAddStructureButton(); + await addBtn.click(); + await browser.pause(200); const nb2 = await calcPage.getAllLinkButtons().length; expect(nb2).toBe(6); // link buttons on children but not on parent }); - + it("when creating Dever, devices should be linkable to one another", async () => { - await navBar.clickNewCalculatorButton(); + await newSession(navBar, sideNav); + // await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(9); - await calcPage.getAddStructureButton().click(); + await browser.pause(200); + const addBtn = await calcPage.getAddStructureButton(); + await addBtn.click(); + await browser.pause(200); const nb3 = await calcPage.getAllLinkButtons().length; expect(nb3).toBe(6); // link buttons on children but not on parent }); diff --git a/e2e/link-to-deleted-module.e2e-spec.ts b/e2e/link-to-deleted-module.e2e-spec.ts index da428de98..fe62a73bc 100644 --- a/e2e/link-to-deleted-module.e2e-spec.ts +++ b/e2e/link-to-deleted-module.e2e-spec.ts @@ -2,18 +2,23 @@ import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { newSession } from "./util.po"; +import { SideNav } from "./sidenav.po"; describe("linked parameter - ", () => { let calcPage: CalculatorPage; let prefPage: PreferencesPage; let navBar: Navbar; let listPage: ListPage; + let sideNav: SideNav; beforeAll(() => { calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); navBar = new Navbar(); listPage = new ListPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -30,7 +35,7 @@ describe("linked parameter - ", () => { it("delete linked module", async () => { // open "channel flow with hydraulic structures" example const examples = await $$("#examples-list .load-example"); - await (await examples)[1].click(); + await examples[1].click(); await browser.pause(500); // select "up/downstream elevations of a reach" tab @@ -51,11 +56,13 @@ describe("linked parameter - ", () => { await navBar.middleClickCalculatorTab(0); // check Z2 input is in "fixed" state in remaining calculator - const inpZ2 = calcPage.getInputById("Z2"); + const inpZ2 = await calcPage.getInputById("Z2"); expect(await calcPage.inputIsInFixedMode(inpZ2)).toBe(true); }); it("delete linked module and duplicate remaining one", async () => { + await newSession(navBar, sideNav); + // open "fish ladder: fall" calculator await listPage.clickMenuEntryForCalcType(12); await browser.pause(200); @@ -65,7 +72,7 @@ describe("linked parameter - ", () => { await browser.pause(200); // set DH in link mode - let inpDH = calcPage.getInputById("DH"); + let inpDH = await calcPage.getInputById("DH"); await calcPage.setParamMode(inpDH, "link"); await browser.pause(200); @@ -74,11 +81,12 @@ describe("linked parameter - ", () => { await browser.pause(200); // check DH input is in "fixed" state in remaining calculator (not the aim of this test) - inpDH = calcPage.getInputById("DH"); + inpDH = await calcPage.getInputById("DH"); expect(await calcPage.inputIsInFixedMode(inpDH)).toBe(true); // set DH to calculated mode await calcPage.setParamMode(inpDH, "cal"); + await browser.pause(100); // clone calculator await calcPage.clickCloneCalcButton(); @@ -89,7 +97,7 @@ describe("linked parameter - ", () => { await browser.pause(500); // check DH input is in "calc" mode - inpDH = calcPage.getInputById("DH"); + inpDH = await calcPage.getInputById("DH"); expect(await calcPage.inputIsInCalculatedMode(inpDH)).toBe(true); }); }); diff --git a/e2e/linked-parameter-section-type.e2e-spec.ts b/e2e/linked-parameter-section-type.e2e-spec.ts index e663ff009..d663d2d9e 100644 --- a/e2e/linked-parameter-section-type.e2e-spec.ts +++ b/e2e/linked-parameter-section-type.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { CalculatorPage } from "./calculator.po"; import { changeSelectValue } from "./util.po"; +import { browser } from "@wdio/globals"; describe("linked parameter in calculator with section - ", () => { let listPage: ListPage; @@ -10,7 +11,7 @@ describe("linked parameter in calculator with section - ", () => { let calcPage: CalculatorPage; let prefPage: PreferencesPage; - beforeAll( () => { + beforeAll(() => { listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); @@ -38,11 +39,11 @@ describe("linked parameter in calculator with section - ", () => { await browser.pause(200); // set Q parameter to linked mode - const inputQ = calcPage.getInputById("Q"); + const inputQ = await calcPage.getInputById("Q"); await calcPage.setParamMode(inputQ, "link"); // change section type - await changeSelectValue(calcPage.getSelectById("select_section"), 3); // mode "parabolique" + await changeSelectValue(await calcPage.getSelectById("select_section"), 3); // mode "parabolique" // check Q is still in linked mode expect(await calcPage.inputIsInLinkedMode(inputQ)).toBe(true); diff --git a/e2e/list.e2e-spec.ts b/e2e/list.e2e-spec.ts index c89367c94..955247a97 100644 --- a/e2e/list.e2e-spec.ts +++ b/e2e/list.e2e-spec.ts @@ -1,4 +1,5 @@ import { ListPage } from "./list.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Show calculators list (home page) @@ -12,13 +13,13 @@ describe("ngHyd − list page", () => { it("when list is open, user should see the list of available compute nodes", async () => { await page.navigateTo(); - expect(page.getThemesCardsLength()).toBeGreaterThan(4); - expect(page.getCalculatorsMenuLength()).toBeGreaterThan(8); + expect(await page.getThemesCardsLength()).toBeGreaterThan(4); + expect(await page.getCalculatorsMenuLength()).toBeGreaterThan(8); }); it("when list is open, link to doc should be well-formed (2-letter language code)", async () => { await page.navigateTo(); - const docLink = $("a#header-doc"); + const docLink = await $("a#header-doc"); const href = await docLink.getAttribute("href"); const re = new RegExp("assets/docs/[a-z]{2}/index.html"); expect(re.test(href)).toBe(true); diff --git a/e2e/list.po.ts b/e2e/list.po.ts index bfe96bb14..83e65b63e 100644 --- a/e2e/list.po.ts +++ b/e2e/list.po.ts @@ -23,8 +23,8 @@ export class ListPage { async getAvailableCalcTypes() { const ids = []; - const menuEntries = this.getCalculatorsMenuEntries(); - await menuEntries.each(async (elt, i) => { + const menuEntries = await this.getCalculatorsMenuEntries(); + for (const elt of menuEntries) { const eltid = await elt.getAttribute("id"); const ct = eltid.replace("create-calc-", ""); const nct = Number(ct); @@ -32,20 +32,21 @@ export class ListPage { if (!ids.includes(nct)) { ids.push(nct); } - }); + }; return ids; } async clickRandomCalculatorMenuEntry() { - const menuEntries = this.getCalculatorsMenuEntries(); - const l = await menuEntries.length; + const menuEntries = await this.getCalculatorsMenuEntries(); + const l = menuEntries.length; const r = Math.min((Math.floor(Math.random() * l)), (l - 1)); - return menuEntries[r].click(); + return await menuEntries[r].click(); } async clickMenuEntryForCalcType(type: number) { - const but = $("#create-calc-" + type); - return but.click(); + const but = await $("#create-calc-" + type); + return await but.click(); + // await browser.execute(e => { e.click() }, but); // await but.click() fails with "element not interactable" error } async getCalcMenuTextForCalcType(type: number): Promise<string> { diff --git a/e2e/load-linked-params.e2e-spec.ts b/e2e/load-linked-params.e2e-spec.ts index dbeb39faf..02d856f7f 100644 --- a/e2e/load-linked-params.e2e-spec.ts +++ b/e2e/load-linked-params.e2e-spec.ts @@ -2,6 +2,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Load a session containing 5 calculators, having multiple linked parameters @@ -14,7 +15,7 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { let navbar: Navbar; let sidenav: SideNav; - beforeAll(()=> { + beforeAll(() => { calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); navbar = new Navbar(); @@ -50,7 +51,7 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { await browser.pause(500); // check target params values - const sp_lb = calcPage.getSelectById("linked_LargeurBerge"); + const sp_lb = await calcPage.getSelectById("linked_LargeurBerge"); const sp_lbv = await calcPage.getSelectValueText(sp_lb); expect(sp_lbv).toContain("Largeur du déversoir (Ouvrages, ouvrage 3)"); @@ -59,11 +60,11 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { await browser.pause(500); // check target params values - const mr_zf1 = calcPage.getSelectById("linked_ZF1"); + const mr_zf1 = await calcPage.getSelectById("linked_ZF1"); const mr_zf1v = await calcPage.getSelectValueText(mr_zf1); expect(mr_zf1v).toContain("Cote de l'eau amont (Ouvrages)"); - const mr_q = calcPage.getSelectById("linked_Q"); + const mr_q = await calcPage.getSelectById("linked_Q"); const mr_qv = await calcPage.getSelectValueText(mr_q); expect(mr_qv).toContain("Débit (Sec. param., section)"); @@ -82,16 +83,18 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { * jalhyd#289/adf6009 * nghyd#551 */ - const inpZ2 = calcPage.getInputById("Z2"); - expect(await inpZ2.getAttribute("value")).toEqual(""); + const inpZ2 = await calcPage.getInputById("Z2"); + // expect(await inpZ2.getAttribute("value")).toEqual(""); + expect(await inpZ2.getValue()).toEqual(""); // const lo_l = calcPage.getSelectById("1_linked_L"); // const lo_lv = await calcPage.getSelectValueText(lo_l); // expect(lo_lv).toContain("Largeur au miroir (Sec. param.)"); - const inpL = calcPage.getInputById("1_L"); - expect(await inpL.getAttribute("value")).toEqual(""); + const inpL = await calcPage.getInputById("1_L"); + // expect(await inpL.getAttribute("value")).toEqual(""); + expect(await inpL.getValue()).toEqual(""); - const lo_w = calcPage.getSelectById("2_linked_W"); + const lo_w = await calcPage.getSelectById("2_linked_W"); const lo_wv = await calcPage.getSelectValueText(lo_w); expect(lo_wv).toContain("Ouverture de vanne (Ouvrages, ouvrage 2)"); @@ -103,7 +106,8 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { // const lo_br = calcPage.getSelectById("linked_BR"); // const lo_brv = await calcPage.getSelectValueText(lo_br); // expect(lo_brv).toContain("Largeur au miroir (Sec. param.)"); - const inpBR = calcPage.getInputById("BR"); - expect(await inpBR.getAttribute("value")).toEqual(""); + const inpBR = await calcPage.getInputById("BR"); + // expect(await inpBR.getAttribute("value")).toEqual(""); + expect(await inpBR.getValue()).toEqual(""); }); }); diff --git a/e2e/load-malformed-files.e2e-spec.ts b/e2e/load-malformed-files.e2e-spec.ts index f8ad8dc99..344f4102a 100644 --- a/e2e/load-malformed-files.e2e-spec.ts +++ b/e2e/load-malformed-files.e2e-spec.ts @@ -1,6 +1,7 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Load 4 malformed session files : @@ -37,7 +38,7 @@ describe("ngHyd − load malformed session files − ", () => { await browser.pause(200); await sidenav.loadSessionFile("./session/session-bad-syntax.json"); - const err = $(".file-problem .mat-list-item-content"); + const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("La syntaxe du fichier semble incorrecte"); }); @@ -49,7 +50,7 @@ describe("ngHyd − load malformed session files − ", () => { await browser.pause(200); await sidenav.loadSessionFile("./session/session-missing-info.json"); - const err = $(".file-problem .mat-list-item-content"); + const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("La syntaxe du fichier semble incorrecte"); }); @@ -61,7 +62,7 @@ describe("ngHyd − load malformed session files − ", () => { await browser.pause(200); await sidenav.loadSessionFile("./session/session-empty-modules-list.json"); - const err = $(".file-problem .mat-list-item-content"); + const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("Le fichier ne contient aucun module"); }); @@ -73,7 +74,7 @@ describe("ngHyd − load malformed session files − ", () => { await browser.pause(200); await sidenav.loadSessionFile("./session/session-format-too-old.json", false); - const err = $(".file-problem .mat-list-item-content"); + const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("Mauvaise version du format de fichier"); }); }); diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 7bce10834..3ddf46ce7 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -5,6 +5,7 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue, expectNumber } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' const fs = require("fs"); const path = require("path"); @@ -18,9 +19,9 @@ let sidenav: SideNav; let prefPage: PreferencesPage; function findDownloadedFile(filename: string): string { - const downloadDirs = ["Téléchargements", "Downloads", "/tmp"]; + const downloadDirs = ["Téléchargements", "Downloads", "/tmp", "."]; for (const d of downloadDirs) { - const download_prefix = d.charAt(0) === "/" ? d : path.resolve(os.homedir(), d); + const download_prefix = (d.charAt(0) === "/" || (d.length === 1 && d.charAt(0) === ".")) ? d : path.resolve(os.homedir(), d); const fp = path.resolve(download_prefix, filename); if (fs.existsSync(fp)) { return fp; @@ -38,50 +39,18 @@ function deleteDownloadedFile(filename: string) { } async function saveSession(): Promise<string> { - const sessionFile = "session.json"; + const sessionFile = "session-e2e-tests.json"; deleteDownloadedFile(sessionFile); await calcPage.clickSaveCalcButton(); - await browser.pause(500); - - // cf. protractor.conf.fs, exports.config.capabilities.chromeOptions.prefs.download.default_directory - // protractor.conf.fs/exports.config.capabilities.chromeOptions.prefs.download.default_directory DOES NOT WORK ! - - // Le code laissé en commentaire tente de corriger un bug : - // il s'écoule 40 secondes entre le clic sur le bouton menu (en haut à gauche) et l'ouverture du sidenav. - // Ceci ne se produit que lorsqu'on sauve effectivement la session : si on annule la sauvegarde, il n'y a pas de délai. - // https://stackoverflow.com/questions/75235558/delay-after-downloading-a-file-in-protractor-test - - //browser.manage().timeouts().implicitlyWait(100); - //browser.ignoreSynchronization = true; - // await browser.waitForAngularEnabled(false); - - if (true) { - await calcPage.getSaveSessionButton().click(); - } else { - const cancel = $("dialog-save-session button.mat-primary"); - await cancel.click(); - } - await browser.pause(200); - // browser.ignoreSynchronization = false; - // await browser.waitForAngularEnabled(true); - - // browser.executeScript('window.stop();'); - - // const wins = await browser.driver.getAllWindowHandles(); - // await browser.switchTo().window(wins[0]); - - // await browser.switchTo().activeElement(); + await browser.pause(300); - // const bd = element(by.css("body")); - // await browser.actions().mouseMove(bd, { x: 0, y: 0 }).click().perform(); + const inpName = await $("dialog-save-session input.mat-input-element"); + await inpName.setValue(sessionFile); - // await navbar.clickCalculatorTab(0); - // await browser.sleep(200); - - // browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); + await calcPage.getSaveSessionButton().click(); + await browser.pause(500); - console.log("saveSession() saved to ", findDownloadedFile(sessionFile)); return findDownloadedFile(sessionFile); } @@ -110,7 +79,7 @@ describe("ngHyd − save and load sessions", () => { beforeEach(() => { jasmine.DEFAULT_TIMEOUT_INTERVAL = 45 * 60 * 1000; // 45 min - browser.manage().window().setPosition(2000, 30); + // browser.manage().window().setPosition(2000, 30); }); it("when loading session-6-calc.test.json file from home page, 6 calculators should be loaded", async () => { @@ -139,14 +108,15 @@ describe("ngHyd − save and load sessions", () => { await navbar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(2); // Section paramétrée - await browser.pause(500); + await browser.pause(200); - await changeSelectValue(calcPage.getSelectById("select_section"), 2); // mode "trapezoidal" + await changeSelectValue(await calcPage.getSelectById("select_section"), 2); // mode "trapezoidal" - await calcPage.getInputById("Ks").clearValue(); // coefficient de Strickler - await browser.pause(200); - await calcPage.getInputById("Ks").setValue("42"); - await browser.pause(200); + const inpKs = await calcPage.getInputById("Ks"); + // await inpKs.clearValue(); // coefficient de Strickler + // await browser.pause(200); + await inpKs.setValue("42"); + // await browser.pause(200); const filename = await saveSession(); await browser.pause(500); @@ -155,14 +125,17 @@ describe("ngHyd − save and load sessions", () => { expect(fileContent).toContain(`"nodeType":"SectionTrapeze"`); expect(fileContent).toContain(`{"symbol":"Ks","mode":"SINGLE","value":42}`); + + deleteDownloadedFile(filename); }); - xit("select value must be recovered when loading a session file", async () => { + it("select value must be recovered when loading a session file", async () => { // start page await startPage.navigateTo(); await browser.pause(200); const calcTypes = await listPage.getAvailableCalcTypes(); + // const calcTypes = [10]; const excludedCalculators = [ 34, // vérificateur (nécessite d'ouvrir plusieurs calculettes) @@ -194,10 +167,11 @@ describe("ngHyd − save and load sessions", () => { await browser.pause(200); // detect selects - const selects = calcPage.getAllCalculatorSelects(); - const nsel = await selects.length; - for (let s = 0; s < nsel; s++) { // /!\ ElementArrayFinder.each() is ASYNCHRONOUS !! https://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.each - const sel = selects.get(s); + const selects = await calcPage.getAllCalculatorSelects(); + const nsel = selects.length; + for (let s = 0; s < nsel; s++) { + // const sel = selects.get(s); + const sel = selects[s]; const selId = await sel.getAttribute("id"); const options = await calcPage.getMatselectOptionsText(sel); @@ -215,24 +189,23 @@ describe("ngHyd − save and load sessions", () => { // save session const filename = await saveSession(); - await browser.pause(200); + await browser.pause(500); // load session await loadSession(filename); // bug here : the click on the menu button (top left) takes 40s to take effect and open the side nav!) - await browser.pause(200); + await browser.pause(500); // the displayed calculator is now the loaded one // check the calculator has been loaded expectNumber(`calc ${ct} select ${selId} : num calcs`, await navbar.getCalculatorEntriesCount(), 2); // check the select in the loaded session points to the same option - const sel2 = calcPage.getSelectById(selId); + const sel2 = await calcPage.getSelectById(selId); // check the same option is in the select const optTxt2 = await calcPage.getMatselectCurrentOptionText(sel2); - await browser.pause(100); const ind2 = options.indexOf(optTxt2); - expectNumber(`calc ${ct} select ${selId} : opt index`, ind2, nextInd); + expectNumber(`calc ${ct} select ${selId} : opt '${optTxt2}' index`, ind2, nextInd); // close last calculator (the loaded one) await navbar.middleClickCalculatorTab(1); @@ -240,6 +213,8 @@ describe("ngHyd − save and load sessions", () => { // check last calculator has been closed expectNumber(`calc ${ct} select ${selId} : num calcs(2)`, await navbar.getCalculatorEntriesCount(), 1); + + deleteDownloadedFile(filename); } } } diff --git a/e2e/monkey-test/monkey.e2e-spec.ts b/e2e/monkey-test/monkey.e2e-spec.ts index 7166aca40..27313fdf4 100644 --- a/e2e/monkey-test/monkey.e2e-spec.ts +++ b/e2e/monkey-test/monkey.e2e-spec.ts @@ -1,51 +1,50 @@ -import { browser } from "protractor"; - -import { readGremlinsScript, getFpsResults, unleashGremlins } from "../helpers/GremlinHelper"; - -import { PreferencesPage } from "../preferences.po"; -import { Navbar } from "../navbar.po"; - -let prefPage: PreferencesPage; -let navBar: Navbar; - -describe("Monkey test with Gremlins.js −", async () => { - - beforeEach(() => { - prefPage = new PreferencesPage(); - navBar = new Navbar(); - }); - - // keep greater than setTimeout() in GremlinHelper.ts (twice as much sounds good) - const specificLongTimeout = 120 * 1000; - - it("bennes-y tout là -bas d'dans !", async () => { - // disable evil option "empty fields on module creation" - await prefPage.navigateTo(); - await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); - // go to list page - await navBar.clickNewCalculatorButton(); - - // unleash the gremlins ! - await browser.executeScript((readGremlinsScript())); - const logs: any = await browser.executeAsyncScript(unleashGremlins); - - /* console.log("----------- ERRORS -----------"); - console.log(logs.error); - console.log("----------- WARNINGS -----------"); - console.log(logs.warn); - console.log("----------- INFO -----------"); - console.log(logs.info); - console.log("----------- FPS -----------"); - console.log(getFpsResults(logs)); - console.log("----------- ACTIONS -----------"); - console.log(logs.log); - - browser.manage().logs().get("browser").then(function(browserLog) { - console.log("log: " + require("util").inspect(browserLog)); - }); */ - - expect(logs.error.length).toBe(0, logs.error); - - }, specificLongTimeout); -}); +// import { readGremlinsScript, getFpsResults, unleashGremlins } from "../helpers/GremlinHelper"; + +// import { PreferencesPage } from "../preferences.po"; +// import { Navbar } from "../navbar.po"; +// import { browser, $, $$, expect } from '@wdio/globals' + +// let prefPage: PreferencesPage; +// let navBar: Navbar; + +// describe("Monkey test with Gremlins.js −", async () => { + +// beforeEach(() => { +// prefPage = new PreferencesPage(); +// navBar = new Navbar(); +// }); + +// // keep greater than setTimeout() in GremlinHelper.ts (twice as much sounds good) +// const specificLongTimeout = 120 * 1000; + +// it("bennes-y tout là -bas d'dans !", async () => { +// // disable evil option "empty fields on module creation" +// await prefPage.navigateTo(); +// await prefPage.disableEvilEmptyFields(); +// await browser.pause(200); +// // go to list page +// await navBar.clickNewCalculatorButton(); + +// // unleash the gremlins ! +// await browser.executeScript(readGremlinsScript()); +// const logs: any = await browser.executeAsyncScript(unleashGremlins); + +// /* console.log("----------- ERRORS -----------"); +// console.log(logs.error); +// console.log("----------- WARNINGS -----------"); +// console.log(logs.warn); +// console.log("----------- INFO -----------"); +// console.log(logs.info); +// console.log("----------- FPS -----------"); +// console.log(getFpsResults(logs)); +// console.log("----------- ACTIONS -----------"); +// console.log(logs.log); + +// browser.manage().logs().get("browser").then(function(browserLog) { +// console.log("log: " + require("util").inspect(browserLog)); +// }); */ + +// expect(logs.error.length).toBe(0, logs.error); + +// }, specificLongTimeout); +// }); diff --git a/e2e/navbar.po.ts b/e2e/navbar.po.ts index aa2c8630d..3e9d2ceea 100644 --- a/e2e/navbar.po.ts +++ b/e2e/navbar.po.ts @@ -1,4 +1,6 @@ import { browser, $, $$, expect } from '@wdio/globals' +import { Key } from 'webdriverio' +import { scrollToElement } from './util.po'; export class Navbar { getAllCalculatorTabs() { @@ -11,14 +13,18 @@ export class Navbar { */ async getCalculatorEntriesCount() { // if dropDown calculators select is visible - const dropDown = $("mat-select#selectCalculator"); + const dropDown = await $("mat-select#selectCalculator"); if ((await dropDown.isExisting()) && (await dropDown.isDisplayed())) { await dropDown.click(); - const options = $$(".cdk-overlay-container mat-option"); + browser.pause(100); + const options = await $$(".cdk-overlay-container mat-option"); // FIXME>>>>await dropDown.sendKeys(protractor.Key.ESCAPE); // close dropdown - return await options.length; + //await dropDown.keys('Escape'); // close dropdown + await browser.keys(Key.Escape); // close dropdown + return options.length; } else { - return (await $$("#tabs-container button.calculator-button")).length; + // return (await $$("#tabs-container button.calculator-button")).length; + return (await this.getAllCalculatorTabs()).length; } } @@ -33,13 +39,13 @@ export class Navbar { await dropDown.click(); // 1st option is not necessarly "mat-option-0"... - const options = $$(".cdk-overlay-container mat-option"); - const option = options.get(n); + const options = await $$(".cdk-overlay-container mat-option"); + const option = options[n]; await option.click(); } else { - const tabs = this.getAllCalculatorTabs(); - await (await tabs.n).click(); + const tabs = await this.getAllCalculatorTabs(); + await tabs[n].click(); } } @@ -56,8 +62,11 @@ export class Navbar { } async clickCalculatorTab(n: number) { - const tabs = this.getAllCalculatorTabs(); - await (await tabs.n).click(); + const tabs = await this.getAllCalculatorTabs(); + // await (await tabs.n).click(); + + // await tabs[n].click(); + await browser.execute(e => { e.click() }, tabs[n]); // await tabs[n].click() fails with "element not interactable" error } async clickCalculatorTabForUid(uid: string) { @@ -66,10 +75,12 @@ export class Navbar { } async clickRandomCalculatorTab(n: number) { - const tabs = this.getAllCalculatorTabs(); - const l = await tabs.length; + const tabs = await this.getAllCalculatorTabs(); + const l = tabs.length; const r = Math.min((Math.floor(Math.random() * l)), (l - 1)); - await (await tabs.r).click(); + + //await tabs[r].click(); + await browser.execute(e => { e.click() }, tabs[r]); // await tabs[r].click() fails with "element not interactable" error } /** @@ -77,11 +88,12 @@ export class Navbar { * @param confirmCloseDialog true to confirm opening dialog and indeed close calculator */ async middleClickCalculatorTab(n: number, confirmCloseDialog: boolean = true) { - const calcTabs = this.getAllCalculatorTabs(); + const calcTabs = await this.getAllCalculatorTabs(); // FIXME>>>> await browser.actions().click(calcTabs.get(n), Button.MIDDLE).perform(); + await calcTabs[n].click({ button: 'middle' }); if (confirmCloseDialog) { - const btns = $$("dialog-confirm-close-calc .mat-dialog-actions button"); - await (await btns)[1].click(); + const btns = await $$("dialog-confirm-close-calc .mat-dialog-actions button"); + await btns[1].click(); } } @@ -91,7 +103,7 @@ export class Navbar { } async clickMenuButton() { - const ncb = this.getMenuButton(); + const ncb = await this.getMenuButton(); await ncb.click(); } } diff --git a/e2e/navigate-through-calculators.e2e-spec.ts b/e2e/navigate-through-calculators.e2e-spec.ts index e7631f47f..85f0d0c53 100644 --- a/e2e/navigate-through-calculators.e2e-spec.ts +++ b/e2e/navigate-through-calculators.e2e-spec.ts @@ -1,6 +1,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Use navbar buttons to navigate from one open calculator to another @@ -25,16 +26,19 @@ describe("ngHyd − create calculators and navigate among them", () => { await browser.pause(200); } await listPage.clickRandomCalculatorMenuEntry(); + await browser.pause(200); } // navigate among them for (let i = 0; i < 10; i++) { await navbar.clickRandomCalculatorTab(i); + await browser.pause(200); // test all form labels - const labels = calculatorPage.getInputLabels(); - await labels.each(async (l) => { + const labels = await calculatorPage.getInputLabels(); + //await labels.each(async (l) => { + for (const l of labels) { const label = await l.getText(); expect(label.length).toBeGreaterThan(0); - }); + }; } // expect no error ? }); diff --git a/e2e/notes.e2e-spec.ts b/e2e/notes.e2e-spec.ts index 40bf8caa1..9704016ec 100644 --- a/e2e/notes.e2e-spec.ts +++ b/e2e/notes.e2e-spec.ts @@ -2,6 +2,7 @@ import { AppPage } from "./app.po"; import { Navbar } from "./navbar.po"; import { ListPage } from "./list.po"; import { SideNav } from "./sidenav.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("check calculator notes", () => { let startPage: AppPage; @@ -31,7 +32,7 @@ describe("check calculator notes", () => { await browser.pause(200); // input some text - const ta = $("textarea"); + const ta = await $("textarea"); await ta.clearValue(); await ta.setValue("azerty123"); await browser.pause(200); @@ -47,7 +48,7 @@ describe("check calculator notes", () => { await browser.pause(200); // check text - const md = $("markdown p"); + const md = await $("markdown p"); await browser.pause(200); expect(await md.getText()).toEqual("azerty123"); }); @@ -67,7 +68,7 @@ describe("check calculator notes", () => { await browser.pause(200); // input some text - const ta = $("textarea"); + const ta = await $("textarea"); await ta.clearValue(); await ta.setValue("azerty123"); await browser.pause(200); @@ -79,12 +80,12 @@ describe("check calculator notes", () => { await browser.pause(200); // open notes - const notesLink = $("#show-notes a"); + const notesLink = await $("#show-notes a"); notesLink.click(); await browser.pause(200); // check text - const md = $("markdown p"); + const md = await $("markdown p"); await browser.pause(200); expect(await md.getText()).toEqual("azerty123"); }); diff --git a/e2e/ouvrages-empty-fields.e2e-spec.ts b/e2e/ouvrages-empty-fields.e2e-spec.ts index 2b7e3620b..24078502a 100644 --- a/e2e/ouvrages-empty-fields.e2e-spec.ts +++ b/e2e/ouvrages-empty-fields.e2e-spec.ts @@ -3,6 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; import { changeSelectValue } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Check that created/cloned structures have empty fields when @@ -49,7 +50,7 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () await calcPage.checkEmptyOrFilledFields(inputIds, emptys); // change 1st structure type to rectangular weir - const structSelect = calcPage.getSelectById("select_structure"); + const structSelect = await calcPage.getSelectById("select_structure"); await changeSelectValue(structSelect, 1); await browser.pause(200); @@ -63,8 +64,9 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () await setup(); // add structure - const addStruct = calcPage.getAddStructureButton(); + const addStruct = await calcPage.getAddStructureButton(); await addStruct.click(); + await browser.pause(200); // check 2nd structure empty fields const inputIds = ["1_ZDV", "1_L", "1_W", "1_CdGR"]; @@ -76,8 +78,9 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () await setup(); // copy structure - const addStruct = calcPage.getCopyStructureButton(); + const addStruct = await calcPage.getCopyStructureButton(); await addStruct.click(); + await browser.pause(200); // check 2nd structure empty fields const inputIds = ["1_ZDV", "1_L", "1_W", "1_CdGR"]; @@ -89,12 +92,12 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () await setup(); // change 1st structure type to rectangular weir - const structSelect = calcPage.getSelectById("select_structure"); + const structSelect = await calcPage.getSelectById("select_structure"); await changeSelectValue(structSelect, 1); await browser.pause(200); // copy structure - const addStruct = calcPage.getCopyStructureButton(); + const addStruct = await calcPage.getCopyStructureButton(); await addStruct.click(); await browser.pause(200); @@ -114,12 +117,12 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () await setup(); // fill - const inp = calcPage.getInputById("0_ZDV"); + const inp = await calcPage.getInputById("0_ZDV"); await inp.clearValue(); await inp.setValue("1"); // copy structure - const addStruct = calcPage.getCopyStructureButton(); + const addStruct = await calcPage.getCopyStructureButton(); await addStruct.click(); await browser.pause(200); @@ -133,12 +136,12 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () await setup(); // change 1st structure type to rectangular weir - const structSelect = calcPage.getSelectById("select_structure"); + const structSelect = await calcPage.getSelectById("select_structure"); await changeSelectValue(structSelect, 1); await browser.pause(200); // change discharge law to Larinier - const dischargeSelect = calcPage.getSelectById("select_loidebit"); + const dischargeSelect = await calcPage.getSelectById("select_loidebit"); await changeSelectValue(dischargeSelect, 3); await browser.pause(200); @@ -152,12 +155,12 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () await setup(); // fill - const inp = calcPage.getInputById("0_ZDV"); + const inp = await calcPage.getInputById("0_ZDV"); await inp.clearValue(); await inp.setValue("1"); // copy structure - const addStruct = calcPage.getAddStructureButton(); + const addStruct = await calcPage.getAddStructureButton(); await addStruct.click(); await browser.pause(200); diff --git a/e2e/pab-cloisons-empty-fields.e2e-spec.ts b/e2e/pab-cloisons-empty-fields.e2e-spec.ts index 1885d8fe6..8f1d76c55 100644 --- a/e2e/pab-cloisons-empty-fields.e2e-spec.ts +++ b/e2e/pab-cloisons-empty-fields.e2e-spec.ts @@ -2,6 +2,7 @@ import { ListPage } from "./list.po"; import { PreferencesPage } from "./preferences.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * enable evil option "empty fields on module creation" @@ -65,7 +66,7 @@ describe("ngHyd - check the cross walls calculator has empty fields - ", () => { // click "generate PAB" button const genButton = calcPage.getGeneratePabButton(); await genButton.click(); - await browser.pause(200); + await browser.pause(1000); await calcPage.checkEmptyOrFilledFields(["generatePabNbBassins"], [true]); }); diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 2bf3c72b2..21b75dac9 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -4,7 +4,8 @@ import { Navbar } from "./navbar.po"; import { AppPage } from "./app.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, scrollPageToTop } from "./util.po"; +import { changeSelectValue, newSession, scrollPageToTop } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Clone calculators @@ -13,16 +14,16 @@ describe("ngHyd − Passe à Bassins", () => { let startPage: AppPage; let listPage: ListPage; let calcPage: CalculatorPage; - let navbar: Navbar; - let sidenav: SideNav; + let navBar: Navbar; + let sideNav: SideNav; let prefPage: PreferencesPage; beforeAll(() => { startPage = new AppPage(); listPage = new ListPage(); calcPage = new CalculatorPage(); - navbar = new Navbar(); - sidenav = new SideNav(); + navBar = new Navbar(); + sideNav = new SideNav(); prefPage = new PreferencesPage(); }); @@ -36,15 +37,17 @@ describe("ngHyd − Passe à Bassins", () => { it("when PAB is created from scratch", async () => { // create PAB - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(15); // check that pab-table is present - const innerFieldsets = $$(".pab-data-table"); + const innerFieldsets = await $$(".pab-data-table"); expect(await innerFieldsets.length).toBe(1); // calculate PAB - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); + // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -55,82 +58,84 @@ describe("ngHyd − Passe à Bassins", () => { it("complete example of all PAB modules", async () => { // PAB - chute - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); - const c_Z1 = calcPage.getInputById("Z1"); - await c_Z1.clearValue(); + const c_Z1 = await calcPage.getInputById("Z1"); + // await c_Z1.clearValue(); await c_Z1.setValue("78.27"); - const c_Z2 = calcPage.getInputById("Z1"); - await c_Z2.clearValue(); + const c_Z2 = await calcPage.getInputById("Z1"); + // await c_Z2.clearValue(); await c_Z2.setValue("74.86"); // PAB - nombre - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(13); - const n_DHT = calcPage.getInputById("DHT"); + const n_DHT = await calcPage.getInputById("DHT"); await calcPage.setParamMode(n_DHT, "link"); - const n_DH = calcPage.getInputById("DH"); + const n_DH = await calcPage.getInputById("DH"); await calcPage.setParamMode(n_DH, "cal"); - const n_N = calcPage.getInputById("N"); + const n_N = await calcPage.getInputById("N"); await n_N.clearValue(); await n_N.setValue("15"); // PAB - dimensions - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(5); - const d_V = calcPage.getInputById("V"); + const d_V = await calcPage.getInputById("V"); await calcPage.setParamMode(d_V, "cal"); - const d_Y = calcPage.getInputById("Y"); - await d_Y.clearValue(); + const d_Y = await calcPage.getInputById("Y"); + // await d_Y.clearValue(); await d_Y.setValue("1.5"); - const d_L = calcPage.getInputById("L"); - await d_L.clearValue(); + const d_L = await calcPage.getInputById("L"); + // await d_L.clearValue(); await d_L.setValue("3.100"); - const d_W = calcPage.getInputById("W"); - await d_W.clearValue(); + const d_W = await calcPage.getInputById("W"); + // await d_W.clearValue(); await d_W.setValue("2.5"); // PAB - puissance dissipée (volume) - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(6); - const p_DH = calcPage.getInputById("DH"); + const p_DH = await calcPage.getInputById("DH"); await calcPage.setParamMode(p_DH, "link"); - const p_Q = calcPage.getInputById("Q"); + const p_Q = await calcPage.getInputById("Q"); await calcPage.setParamMode(p_Q, "cal"); - const p_V = calcPage.getInputById("V"); + const p_V = await calcPage.getInputById("V"); await calcPage.setParamMode(p_V, "link"); - const p_PV = calcPage.getInputById("PV"); + const p_PV = await calcPage.getInputById("PV"); await p_PV.clearValue(); await p_PV.setValue("150"); // PAB - cloisons - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); - const cl_LB = calcPage.getInputById("LB"); + const cl_LB = await calcPage.getInputById("LB"); await calcPage.setParamMode(cl_LB, "link"); - const cl_BB = calcPage.getInputById("BB"); + const cl_BB = await calcPage.getInputById("BB"); await calcPage.setParamMode(cl_BB, "link"); - const cl_DH = calcPage.getInputById("DH"); + const cl_DH = await calcPage.getInputById("DH"); await calcPage.setParamMode(cl_DH, "link"); - const cl_Z1 = calcPage.getInputById("Z1"); + const cl_Z1 = await calcPage.getInputById("Z1"); await calcPage.setParamMode(cl_Z1, "link"); - const cl_PB = calcPage.getInputById("PB"); - await cl_PB.clearValue(); + const cl_PB = await calcPage.getInputById("PB"); + // await cl_PB.clearValue(); await cl_PB.setValue("1.5"); // calculate Cloisons - const calcButtonCl = calcPage.getCalculateButton(); + const calcButtonCl = await calcPage.getCalculateButton(); await calcButtonCl.click(); + await browser.pause(200); // make sure "Generate PAB" button is visible (it might be hidden behind navbar) await scrollPageToTop(); // generate PAB - const genButton = calcPage.getGeneratePabButton(); + const genButton = await calcPage.getGeneratePabButton(); await genButton.isExisting(); await genButton.isDisplayed(); await genButton.click(); - const nbBassins = calcPage.getInputById("generatePabNbBassins"); - await nbBassins.clearValue(); + await browser.pause(1000); + const nbBassins = await calcPage.getInputById("generatePabNbBassins"); + // await nbBassins.clearValue(); await nbBassins.setValue("9"); // click "Generate" @@ -138,8 +143,10 @@ describe("ngHyd − Passe à Bassins", () => { await browser.pause(1000); // calculate PAB - const calcButtonPAB = calcPage.getCalculateButton(); + const calcButtonPAB = await calcPage.getCalculateButton(); await calcButtonPAB.click(); + await browser.pause(200); + // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -157,71 +164,78 @@ describe("ngHyd − Passe à Bassins", () => { }); it("from a Cloisons among many", async () => { + await newSession(navBar, sideNav); + // create many Cloisons - await navbar.clickNewCalculatorButton(); + // await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); // choose one of them and change its parameters - await navbar.clickCalculatorTab(1); - const Z1 = calcPage.getInputById("Z1"); - await Z1.clearValue(); + await navBar.clickCalculatorTab(1); + const Z1 = await calcPage.getInputById("Z1"); + // await Z1.clearValue(); await Z1.setValue("114"); - const LB = calcPage.getInputById("LB"); - await LB.clearValue(); + const LB = await calcPage.getInputById("LB"); + // await LB.clearValue(); await LB.setValue("11.5"); - const DH = calcPage.getInputById("DH"); - await DH.clearValue(); + const DH = await calcPage.getInputById("DH"); + // await DH.clearValue(); await DH.setValue("0.72"); // calculate Cloisons - const calcButtonCl = calcPage.getCalculateButton(); + const calcButtonCl = await calcPage.getCalculateButton(); await calcButtonCl.click(); + await browser.pause(200); // make sure "Generate PAB" button is visible (it might be hidden behind navbar) await scrollPageToTop(); // create PAB from it, changing modal parameters - const genButton = calcPage.getGeneratePabButton(); + const genButton = await calcPage.getGeneratePabButton(); await genButton.click(); - const debit = calcPage.getInputById("generatePabDebit"); - expect(await debit.getAttribute("value")).toBe("0.564"); - await debit.clearValue(); - await browser.pause(300); + await browser.pause(1000); + const debit = await calcPage.getInputById("generatePabDebit"); + expect(await debit.getValue()).toBe("0.564"); + // await debit.clearValue(); + // await browser.pause(300); // send "1.6" in 3 movements, because "." triggers an error and Angular can't cope with the subsequent keys await debit.setValue("1"); - await browser.pause(300); - await debit.setValue("."); - await browser.pause(300); - await debit.setValue("6"); - await browser.pause(300); - const coteAmont = calcPage.getInputById("generatePabCoteAmont"); - expect(await coteAmont.getAttribute("value")).toBe("114"); - await coteAmont.clearValue(); + // await browser.pause(50); + await debit.addValue("."); + // await browser.pause(50); + await debit.addValue("6"); + // await browser.pause(50); + const coteAmont = await calcPage.getInputById("generatePabCoteAmont"); + expect(await coteAmont.getValue()).toBe("114"); + // await coteAmont.clearValue(); await coteAmont.setValue("115"); - const nbBassins = calcPage.getInputById("generatePabNbBassins"); - expect(await nbBassins.getAttribute("value")).toBe("6"); - await nbBassins.clearValue(); + const nbBassins = await calcPage.getInputById("generatePabNbBassins"); + expect(await nbBassins.getValue()).toBe("6"); + // await nbBassins.clearValue(); await nbBassins.setValue("5"); // click "Generate" - await $("dialog-generate-pab button#do-generate").click(); + const btnGenerate = await $("dialog-generate-pab button#do-generate"); + await btnGenerate.click(); await browser.pause(1000); // check parameters values - const P_Q = calcPage.getInputById("Q"); - expect(await P_Q.getAttribute("value")).toBe("1.6"); - const P_Z2 = calcPage.getInputById("Z2"); - expect(await P_Z2.getAttribute("value")).toBe("111.4"); + const P_Q = await calcPage.getInputById("Q"); + expect(await P_Q.getValue()).toBe("1.6"); + const P_Z2 = await calcPage.getInputById("Z2"); + expect(await P_Z2.getValue()).toBe("111.4"); // check number of basins - const innerFieldsets = $$("td.basin_number"); - expect(await innerFieldsets.length).toBe(5); + const innerFieldsets = await $$("td.basin_number"); + expect(innerFieldsets.length).toBe(5); // calculate PAB - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); + // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -232,29 +246,31 @@ describe("ngHyd − Passe à Bassins", () => { it("complete example of all PAB modules", async () => { await startPage.navigateTo(); // load - await navbar.clickMenuButton(); + await navBar.clickMenuButton(); await browser.pause(200); - await sidenav.clickLoadSessionButton(); + await sideNav.clickLoadSessionButton(); await browser.pause(200); - await sidenav.loadSessionFile("./session/session-pab-complete.json"); + await sideNav.loadSessionFile("./session/session-pab-complete.json"); await browser.pause(500); // check existence of the loaded modules - expect(await navbar.getAllCalculatorTabs().length).toBe(6); + expect(await navBar.getAllCalculatorTabs().length).toBe(6); // check parameters values - await navbar.clickCalculatorTab(5); + await navBar.clickCalculatorTab(5); await browser.pause(700); - const P_Q = calcPage.getInputById("Q"); - expect(await P_Q.getAttribute("value")).toBe("0.275"); - const P_Z2 = calcPage.getInputById("Z2"); - expect(await P_Z2.getAttribute("value")).toBe("74.865"); + const P_Q = await calcPage.getInputById("Q"); + expect(await P_Q.getValue()).toBe("0.275"); + const P_Z2 = await calcPage.getInputById("Z2"); + expect(await P_Z2.getValue()).toBe("74.865"); // check number of basins - const innerFieldsets = $$("td.basin_number"); + const innerFieldsets = await $$("td.basin_number"); expect(await innerFieldsets.length).toBe(15); // calculate PAB - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); + // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -268,19 +284,21 @@ describe("ngHyd − Passe à Bassins", () => { it("should display logs", async () => { await startPage.navigateTo(); // load - await navbar.clickMenuButton(); + await navBar.clickMenuButton(); await browser.pause(200); - await sidenav.clickLoadSessionButton(); + await sideNav.clickLoadSessionButton(); await browser.pause(200); - await sidenav.loadSessionFile("./session/session-pab-regulee-variee.json"); + await sideNav.loadSessionFile("./session/session-pab-regulee-variee.json"); await browser.pause(500); // check existence of the loaded module - expect(await navbar.getAllCalculatorTabs().length).toBe(1); - await navbar.clickCalculatorTab(0); + expect(await navBar.getAllCalculatorTabs().length).toBe(1); + await navBar.clickCalculatorTab(0); // calculate - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); + // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -290,7 +308,7 @@ describe("ngHyd − Passe à Bassins", () => { expect(await calcPage.nbLogEntries()).toBe(2); // change iteration - const pve = calcPage.getSelectById("pab-variating-element"); + const pve = await calcPage.getSelectById("pab-variating-element"); await changeSelectValue(pve, 3); await browser.pause(300); // check absence of logs diff --git a/e2e/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index 4d257594b..f1dff3784 100644 --- a/e2e/parallel-structures.e2e-spec.ts +++ b/e2e/parallel-structures.e2e-spec.ts @@ -2,6 +2,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check calculated parameter remains the same when copying a structure", () => { let listPage: ListPage; @@ -26,29 +27,37 @@ describe("Check calculated parameter remains the same when copying a structure", it("", async () => { // open "fish ladder: cross walls" calculator await navBar.clickNewCalculatorButton(); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(10); await browser.pause(200); // check L in first structure calc toggle is not checked - const L1 = calcPage.getInputById("0_L"); + const L1 = await calcPage.getInputById("0_L"); // const h11 = calcPage.getInputById("0_h1"); // set L to calculated in first structure await calcPage.setParamMode(L1, "cal"); + await browser.pause(500); // check L calc toggle is checked expect(await calcPage.inputIsInCalculatedMode(L1)).toBe(true); // copy 1st structure - const copyStruct = calcPage.getCopyStructureButton(); - await copyStruct.click(); + const copyStruct = await calcPage.getCopyStructureButton(); + + // await copyStruct.click(); + await browser.execute(e => { e.click() }, copyStruct); // await copyStruct.click() fails with "element not interactable" error + await browser.pause(200); + + await calcPage.closeSnackBar(); + await browser.pause(200); // check L in first structure is still in "calc" state expect(await calcPage.inputIsInCalculatedMode(L1)).toBe(true); // // check L in second structure is still in "fix" state - const L2 = calcPage.getInputById("1_L"); + const L2 = await calcPage.getInputById("1_L"); expect(await calcPage.inputIsInFixedMode(L2)).toBe(true); }); }); diff --git a/e2e/predam-empty-fields.e2e-spec.ts b/e2e/predam-empty-fields.e2e-spec.ts index 8c4182b1a..0915297ae 100644 --- a/e2e/predam-empty-fields.e2e-spec.ts +++ b/e2e/predam-empty-fields.e2e-spec.ts @@ -2,6 +2,7 @@ import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" +import { browser, $, $$, expect } from '@wdio/globals' /** * check that fields are empty on creation @@ -40,29 +41,30 @@ describe("ngHyd − check that predam fields are empty", () => { await calcPage.checkEmptyInput("Z2"); // check basin 1 inputs - let node = $("g.node.basin"); + let node = await $("g.node.basin"); await node.click(); await browser.pause(200); await calcPage.checkEmptyInput("0_S"); await calcPage.checkEmptyInput("0_ZF"); // check walls inputs - const walls = $$("g.node.wall"); + const walls = await $$("g.node.wall"); expect(walls.length).toEqual(2); - await walls.each(async (w) => { + // await walls.each(async (w) => { + for (const w of walls) { await w.click(); await browser.pause(200); await calcPage.checkEmptyInput("0_ZDV"); await calcPage.checkEmptyInput("0_L"); - }); + }; // check downstream basin inputs - node = $("g[id^='flowchart-aval-']"); // Mermaid generated id + node = await $("g[id^='flowchart-aval-']"); // Mermaid generated id await node.click(); await browser.pause(200); - calcPage.checkEmptyInput("Q"); + await calcPage.checkEmptyInput("Q"); // Z1 is calculated - calcPage.checkEmptyInput("Z2"); + await calcPage.checkEmptyInput("Z2"); }); it("when a basin is added", async () => { @@ -72,18 +74,20 @@ describe("ngHyd − check that predam fields are empty", () => { await browser.pause(200); // add basin - const addBasinBtn = $("#add-basin"); + const addBasinBtn = await $("#add-basin"); await addBasinBtn.click(); await browser.pause(200); // check "surface" input is empty - let inp = calcPage.getInputById("3_S"); - let txt = await inp.getAttribute("value"); + let inp = await calcPage.getInputById("3_S"); + // let txt = await inp.getAttribute("value"); + let txt = await inp.getValue(); expect(txt).toEqual(""); // check "cote de fond" input is empty - inp = calcPage.getInputById("3_ZF"); - txt = await inp.getAttribute("value"); + inp = await calcPage.getInputById("3_ZF"); + // txt = await inp.getAttribute("value"); + txt = await inp.getValue(); expect(txt).toEqual(""); }); @@ -94,27 +98,29 @@ describe("ngHyd − check that predam fields are empty", () => { await browser.pause(200); // add wall - const addWallBtn = $("#add-wall"); + const addWallBtn = await $("#add-wall"); await addWallBtn.click(); // connect basins - const connectBasinsBtn = $("#validate-connect-basins"); + const connectBasinsBtn = await $("#validate-connect-basins"); await connectBasinsBtn.click(); // check ZDV input is empty - let inp = calcPage.getInputById("0_ZDV"); - let txt = await inp.getAttribute("value"); + let inp = await calcPage.getInputById("0_ZDV"); + let txt = await inp.getValue(); expect(txt).toEqual(""); // check L input is empty - inp = calcPage.getInputById("0_L"); - txt = await inp.getAttribute("value"); + inp = await calcPage.getInputById("0_L"); + // txt = await inp.getAttribute("value"); + txt = await inp.getValue(); expect(txt).toEqual(""); // check CdWSL input is empty (in this case, the structure happens to be a Larinier weir // which discharge coefficient must be empty) - inp = calcPage.getInputById("0_CdWSL"); - txt = await inp.getAttribute("value"); + inp = await calcPage.getInputById("0_CdWSL"); + // txt = await inp.getAttribute("value"); + txt = await inp.getValue(); expect(txt).toEqual(""); }); }); diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index 102fb8194..85b7b5951 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -2,6 +2,7 @@ import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" +import { browser, $, $$, expect } from '@wdio/globals' describe("check that low iteration count leads to log messages", () => { let listPage: ListPage; @@ -25,7 +26,7 @@ describe("check that low iteration count leads to log messages", () => { }); it("", async () => { - browser.manage().window().setPosition(2000, 30); + // browser.manage().window().setPosition(2000, 30); // set low iteration count await prefPage.setIterationCount(5); @@ -34,12 +35,13 @@ describe("check that low iteration count leads to log messages", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(30); await browser.pause(200); - + // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); + await browser.pause(200); // check log messages presence - expect(calcPage.hasLog()).toBe(true); + expect(await calcPage.hasLog()).toBe(true); }); }); diff --git a/e2e/preferences.e2e-spec.ts b/e2e/preferences.e2e-spec.ts index 6b00a4d81..0e09c1128 100644 --- a/e2e/preferences.e2e-spec.ts +++ b/e2e/preferences.e2e-spec.ts @@ -1,4 +1,5 @@ import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Open app preferences, check the default values, the validators, the language change @@ -10,52 +11,74 @@ describe("ngHyd − preferences page", () => { page = new PreferencesPage(); }); - it("when preferences are open, user should see a heading title", async () => { + beforeEach(async () => { await page.navigateTo(); + browser.pause(200); + }); + + it("when preferences are open, user should see a heading title", async () => { const text = await page.getHeader1().getText(); expect(text.length).toBeGreaterThan(0); }); it("when preferences are open, no label should be empty", async () => { - const labels = page.getInputLabels(); - await labels.each(async (l) => { + const labels = await page.getInputLabels(); + // await labels.each(async (l) => { + for (const l of labels) { const label = await l.getText(); expect(label.length).toBeGreaterThan(0); - }); + }; }); it("when preferences are open, no input field should be empty", async () => { - const numericFields = page.getNumericFormFields(); - await numericFields.each(async (nf) => { - const input = page.getInputForField(nf); - const val = await input.getAttribute("value"); + const numericFields = await page.getNumericFormFields(); + // await numericFields.each(async (nf) => { + for (const nf of numericFields) { + const input = await page.getInputForField(nf); + // const val = await input.getAttribute("value"); + const val = await input.getValue(); expect(val).toBeTruthy(); - }); + }; }); it("when erroneous values are input, errors should appear", async () => { - const numericFields = page.getNumericFormFields(); - await numericFields.each(async (nf) => { + const numericFields = await page.getNumericFormFields(); + // await numericFields.each(async (nf) => { + for (const nf of numericFields) { + const inp = await page.getInputForField(nf); // add a letter after the numerical value - await page.getInputForField(nf).setValue("d"); - expect(page.getErrorsForField(nf).isExisting()).toBe(true); + // await page.getInputForField(nf).addValue("d"); + await inp.addValue("d"); + let errorField = await page.getErrorsForField(nf); + expect(await errorField.isExisting()).toBe(true); // empty input - await page.getInputForField(nf).clearValue(); - expect(page.getErrorsForField(nf).isExisting()).toBe(true); + // await page.getInputForField(nf).clearValue(); + await inp.clearValue(); + // expect(page.getErrorsForField(nf).isExisting()).toBe(true); + errorField = await page.getErrorsForField(nf); + expect(await errorField.isExisting()).toBe(true); // send bad value - await page.getInputForField(nf).setValue("50000"); - expect(page.getErrorsForField(nf).isExisting()).toBe(true); - }); + // await page.getInputForField(nf).setValue("50000"); + await inp.setValue("50000"); + // expect(page.getErrorsForField(nf).isExisting()).toBe(true); + errorField = await page.getErrorsForField(nf); + expect(await errorField.isExisting()).toBe(true); + }; }); it("when correct values are input, errors should disappear", async () => { - const numericFields = page.getNumericFormFields(); - await numericFields.each(async (nf) => { + const numericFields = await page.getNumericFormFields(); + // await numericFields.each(async (nf) => { + for (const nf of numericFields) { // send correct value - await page.getInputForField(nf).clearValue(); - await page.getInputForField(nf).setValue("1"); - expect(page.getErrorsForField(nf).isExisting()).toBe(false); - }); + const inp = await page.getInputForField(nf); + // await page.getInputForField(nf).clearValue(); + // await page.getInputForField(nf).setValue("1"); + await inp.setValue("1"); + const errorField = await page.getErrorsForField(nf); + // expect(page.getErrorsForField(nf).isExisting()).toBe(false); + expect(await errorField.isExisting()).toBe(false); + }; }); it("when language is changed, language should change", async () => { diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index eddb67807..ea4429794 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -43,22 +43,22 @@ export class PreferencesPage { } async changeLanguage(index: number) { - const select = this.getLanguageSelect(); + const select = await this.getLanguageSelect(); await changeSelectValue(select, index); } async enableEvilEmptyFields() { - const cb = this.getEmptyFieldsCheckbox(); - const underlyingCB = cb.$(`input.mat-checkbox-input`); - if (!underlyingCB.isSelected()) { + const cb = await this.getEmptyFieldsCheckbox(); + const underlyingCB = await cb.$(`input.mat-checkbox-input`); + if (!await underlyingCB.isSelected()) { await cb.click(); } } async disableEvilEmptyFields() { - const cb = this.getEmptyFieldsCheckbox(); - const underlyingCB = cb.$(`input.mat-checkbox-input`); - if (underlyingCB.isSelected()) { + const cb = await this.getEmptyFieldsCheckbox(); + const underlyingCB = await cb.$(`input.mat-checkbox-input`); + if (await underlyingCB.isSelected()) { await cb.click(); } } @@ -81,8 +81,8 @@ export class PreferencesPage { } async setIterationCount(n: number) { - const input = this.getInputFromName("nmi"); - input.clearValue(); + const input = await this.getInputFromName("nmi"); + // input.clearValue(); await input.setValue(n.toString()); } } diff --git a/e2e/pressure-loss-empty-fields.e2e-spec.ts b/e2e/pressure-loss-empty-fields.e2e-spec.ts index b040c04cc..53b14e380 100644 --- a/e2e/pressure-loss-empty-fields.e2e-spec.ts +++ b/e2e/pressure-loss-empty-fields.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check fields are empty in 'pressure loss' calculator when created with 'empty fields' option -", () => { let listPage: ListPage; @@ -31,10 +32,10 @@ describe("Check fields are empty in 'pressure loss' calculator when created with await browser.pause(200); // select Lechapt-Calmon pressure loss law - const materialSelect = calcPage.getSelectById("select_pressurelosstype"); + const materialSelect = await calcPage.getSelectById("select_pressurelosstype"); await changeSelectValue(materialSelect, 0); await browser.pause(200); - expect(calcPage.checkEmptyOrFilledFields(["Q", "D", "Lg", "Kloc"], [true, true, true, true])); + expect(await calcPage.checkEmptyOrFilledFields(["Q", "D", "Lg", "Kloc"], [true, true, true, true])); }); }); diff --git a/e2e/pressure-loss.e2e-spec.ts b/e2e/pressure-loss.e2e-spec.ts index 38b8e993a..e4d6e530c 100644 --- a/e2e/pressure-loss.e2e-spec.ts +++ b/e2e/pressure-loss.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { changeSelectValue } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Pressure loss - ", () => { let listPage: ListPage; @@ -32,7 +33,7 @@ describe("Pressure loss - ", () => { await browser.pause(200); // select Lechapt-Calmon pressure loss law - const materialSelect = calcPage.getSelectById("select_pressurelosstype"); + const materialSelect = await calcPage.getSelectById("select_pressurelosstype"); await changeSelectValue(materialSelect, 0); await browser.pause(200); @@ -48,7 +49,7 @@ describe("Pressure loss - ", () => { }); it("Strickler", async () => { - browser.manage().window().setPosition(2000, 30); + // browser.manage().window().setPosition(2000, 30); // open "pressure loss" calculator await navBar.clickNewCalculatorButton(); @@ -56,16 +57,13 @@ describe("Pressure loss - ", () => { await browser.pause(200); // select Strickler pressure loss law - const materialSelect = calcPage.getSelectById("select_pressurelosstype"); + const materialSelect = await calcPage.getSelectById("select_pressurelosstype"); await changeSelectValue(materialSelect, 1); await browser.pause(200); - debugger // check inputs presence - const ks = $("#0_Ks"); - expect(await ks.isExisting()).toBe(true); // isNgParamPresent does not work on "0_Ks". Why ? Mystery... - + expect(await calcPage.isNgParamPresent("0_Ks")).toBe(true); expect(await calcPage.isNgParamPresent("Q")).toBe(true); expect(await calcPage.isNgParamPresent("D")).toBe(true); expect(await calcPage.isNgParamPresent("J")).toBe(true); diff --git a/e2e/regime-uniforme-empty-fields.e2e-spec.ts b/e2e/regime-uniforme-empty-fields.e2e-spec.ts index 636ba6336..f91783104 100644 --- a/e2e/regime-uniforme-empty-fields.e2e-spec.ts +++ b/e2e/regime-uniforme-empty-fields.e2e-spec.ts @@ -2,6 +2,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check fields are empty in 'uniform flow' calculator when created with 'empty fields' option", () => { let listPage: ListPage; @@ -29,6 +30,6 @@ describe("Check fields are empty in 'uniform flow' calculator when created with await listPage.clickMenuEntryForCalcType(3); await browser.pause(200); - expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "If", "YB", "Q", "Y"], [true, true, true, true, true, true])) + expect(await calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "If", "YB", "Q", "Y"], [true, true, true, true, true, true])) }); }); diff --git a/e2e/remous.e2e-spec.ts b/e2e/remous.e2e-spec.ts index 80fb6cd12..fb2b14b63 100644 --- a/e2e/remous.e2e-spec.ts +++ b/e2e/remous.e2e-spec.ts @@ -4,6 +4,7 @@ import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; import { changeSelectValue } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Remous @@ -38,7 +39,10 @@ describe("ngHyd − remous", () => { await browser.pause(300); // 2. calculate it, there should be 6 messages in the log - await calcPage.getCalculateButton().click(); + const calcBtn = await calcPage.getCalculateButton() + await calcBtn.click(); + await browser.pause(200); + expect(await calcPage.nbLogEntries()).toBe(6); await browser.pause(300); @@ -62,7 +66,7 @@ describe("ngHyd − remous", () => { await browser.pause(300); // 2. Set to trapezoidal section with bank slope of 2m/m and 20 meter width bed - await changeSelectValue(calcPage.getSelectById("select_section"), 2); + await changeSelectValue(await calcPage.getSelectById("select_section"), 2); await browser.pause(300); await calcPage.getInputById("LargeurFond").clearValue(); await browser.pause(300); @@ -72,7 +76,10 @@ describe("ngHyd − remous", () => { await calcPage.getInputById("Fruit").setValue("2"); // 3. Calculate, the calculation should succeed - await calcPage.getCalculateButton().click(); + const calcBtn = await calcPage.getCalculateButton() + await calcBtn.click(); + await browser.pause(200); + const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); }); @@ -80,15 +87,16 @@ describe("ngHyd − remous", () => { it("Check that calculation with dx >= reach length fails", async () => { // load backwater curve session file with Dx>=Long await navBar.clickMenuButton(); - await browser.pause(500); + await browser.pause(200); await sidenav.clickLoadSessionButton(); - await browser.pause(500); + await browser.pause(200); await sidenav.loadSessionFile("./session/session-remous-dx-bief.json"); - await browser.pause(1000); + await browser.pause(300); // Calculate, the calculation should fail - await calcPage.getCalculateButton().click(); - await browser.pause(1000); + const calcBtn = await calcPage.getCalculateButton() + await calcBtn.click(); + await browser.pause(200); // check error message in log expect(await calcPage.nbLogEntries()).toBe(1); diff --git a/e2e/reset-param-mode.e2e-spec.ts b/e2e/reset-param-mode.e2e-spec.ts index f8a061df1..d5e85ef80 100644 --- a/e2e/reset-param-mode.e2e-spec.ts +++ b/e2e/reset-param-mode.e2e-spec.ts @@ -1,4 +1,9 @@ import { ListPage } from "./list.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { newSession } from "./util.po"; +import { Navbar } from "./navbar.po"; +import { SideNav } from "./sidenav.po"; +import { CalculatorPage } from "./calculator.po"; /** * Parameter mode should be set to its previous mode (fixed/var/...) when cancel is pressed @@ -6,76 +11,92 @@ import { ListPage } from "./list.po"; */ describe("ngHyd - check parameter mode is set to its previous value - ", () => { let listPage: ListPage; + let navBar: Navbar; + let sideNav: SideNav; + let calcPage: CalculatorPage; beforeAll(() => { listPage = new ListPage(); + // navBar = new Navbar(); + // sideNav = new SideNav(); + calcPage = new CalculatorPage(); }); it("when min/max/list values dialog is cancelled on 'fish ladder: fall' calculator", async () => { // start page await listPage.navigateTo(); - await browser.pause(500); + await browser.pause(300); // open 'PAB fall' calculator await listPage.clickMenuEntryForCalcType(12); - await browser.pause(500); + await browser.pause(200); // click "calc" radio on Z1 parameter - const z1calcbtn = $("#mat-button-toggle-3"); + // const z1calcbtn = await $("#mat-button-toggle-3"); + const z1calcbtn = await calcPage.getInputRadioButtonFromId("Z1", "cal"); await z1calcbtn.click(); await browser.pause(200); // click "var" radio on Z1 parameter - const z1varbtn = $("#mat-button-toggle-2"); + // const z1varbtn = await $("#mat-button-toggle-2"); + const z1varbtn = await calcPage.getInputRadioButtonFromId("Z1", "var"); await z1varbtn.click(); await browser.pause(200); // click cancel button - const cancelbtn = $("#btn-cancel"); + const cancelbtn = await $("#btn-cancel"); await cancelbtn.click(); - await browser.pause(200); + await browser.pause(500); // check Z1 var toggle is not checked - expect(await z1varbtn.getAttribute("ng-reflect-checked")).toBe("false"); + // expect(await z1varbtn.getASttribute("ng-reflect-checked")).toBe("false"); + expect(await calcPage.isRadioButtonChecked(z1varbtn)).toEqual(false); // check Z1 calc toggle is checked - expect(await z1calcbtn.getAttribute("ng-reflect-checked")).toBe("true"); + // expect(await z1calcbtn.getAttribute("ng-reflect-checked")).toBe("true"); + expect(await calcPage.isRadioButtonChecked(z1calcbtn)).toEqual(true); }); it("when min/max/list values dialog is cancelled on 'fish ladder' calculator", async () => { // start page await listPage.navigateTo(); - await browser.pause(500); + await browser.pause(300); + // await newSession(navBar, sideNav); // open PAB calculator await listPage.clickMenuEntryForCalcType(15); await browser.pause(500); // "fixed" radio on Q parameter - const qfixbtn = $("#mat-button-toggle-1"); - await browser.pause(50); + // const qfixbtn = await $("#mat-button-toggle-1"); + const qfixbtn = await calcPage.getInputRadioButtonFromId("Q", "fix"); + // await browser.pause(50); // "var" radio on Z1 parameter - const z1varbtn = $("#mat-button-toggle-6"); - await browser.pause(50); + // const z1varbtn = await $("#mat-button-toggle-6"); + const z1varbtn = await calcPage.getInputRadioButtonFromId("Z1", "var"); + // await browser.pause(50); // "calc" radio on Z1 parameter - const z1calcbtn = $("#mat-button-toggle-7"); - await browser.pause(50); + // const z1calcbtn = await $("#mat-button-toggle-7"); + const z1calcbtn = await calcPage.getInputRadioButtonFromId("Z1", "cal"); + // await browser.pause(50); // click "var" radio on Z1 parameter await z1varbtn.click(); await browser.pause(200); // click cancel button - const cancelbtn = $("#btn-cancel"); + const cancelbtn = await $("#btn-cancel"); await cancelbtn.click(); - await browser.pause(200); + await browser.pause(500); // check Q fix toggle is checked - expect(await qfixbtn.getAttribute("ng-reflect-checked")).toBe("true"); + // expect(await qfixbtn.getAttribute("ng-reflect-checked")).toBe("true"); + expect(await calcPage.isRadioButtonChecked(qfixbtn)).toEqual(true); // check Z1 calc toggle is checked - expect(await z1calcbtn.getAttribute("ng-reflect-checked")).toBe("true"); + // expect(await z1calcbtn.getAttribute("ng-reflect-checked")).toBe("true"); + expect(await calcPage.isRadioButtonChecked(z1calcbtn)).toEqual(true); }); }); diff --git a/e2e/reset-results.e2e-spec.ts b/e2e/reset-results.e2e-spec.ts index 9d1e3dba6..5811449db 100644 --- a/e2e/reset-results.e2e-spec.ts +++ b/e2e/reset-results.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check results are reset after application settings modification - ", () => { let listPage: ListPage; @@ -28,13 +29,13 @@ describe("Check results are reset after application settings modification - ", ( await browser.pause(200); }); - async function runTestWithParamater(param: string, val1: number, val2: number) { + async function runTestWithParameter(param: string, val1: number, val2: number) { // set starting compute precision - const input = prefPage.getInputFromName(param); - await input.clearValue(); - await browser.pause(20); + const input = await prefPage.getInputFromName(param); + // await input.clearValue(); + // await browser.pause(20); await input.setValue(val1.toString()); - await browser.pause(200); + // await browser.pause(200); // open "fish ladder: fall" calculator await navBar.clickNewCalculatorButton(); @@ -42,7 +43,7 @@ describe("Check results are reset after application settings modification - ", ( await browser.pause(200); // click "compute" button - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); @@ -58,10 +59,10 @@ describe("Check results are reset after application settings modification - ", ( await browser.pause(200); // modify compute precision - await input.clearValue(); - await browser.pause(20); + // await input.clearValue(); + // await browser.pause(20); await input.setValue(val2.toString()); - await browser.pause(200); + await browser.pause(500); // back to calculator await navBar.openNthCalculator(0); @@ -69,14 +70,13 @@ describe("Check results are reset after application settings modification - ", ( // results should not be here hasResults = await calcPage.hasResults(); expect(hasResults).toBe(false); - } it("compute precision", async () => { - await runTestWithParamater("cp", 0.001, 0.0001); + await runTestWithParameter("cp", 0.001, 0.0001); }); it("max iterations", async () => { - await runTestWithParamater("nmi", 10, 100); + await runTestWithParameter("nmi", 10, 100); }); }); diff --git a/e2e/section-empty-fields.e2e-spec.ts b/e2e/section-empty-fields.e2e-spec.ts index 947930354..5d867024c 100644 --- a/e2e/section-empty-fields.e2e-spec.ts +++ b/e2e/section-empty-fields.e2e-spec.ts @@ -2,6 +2,7 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check fields are empty in 'parametric section' calculator when created with 'empty fields' option", () => { let listPage: ListPage; @@ -29,6 +30,6 @@ describe("Check fields are empty in 'parametric section' calculator when created await listPage.clickMenuEntryForCalcType(2); await browser.pause(200); - expect(calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "If", "YB", "Q", "Y"], [true, true, true, true, true, true])); + expect(await calcPage.checkEmptyOrFilledFields(["LargeurBerge", "Ks", "If", "YB", "Q", "Y"], [true, true, true, true, true, true])); }); }); diff --git a/e2e/select-default-value.e2e-spec.ts b/e2e/select-default-value.e2e-spec.ts index a1323b092..058408310 100644 --- a/e2e/select-default-value.e2e-spec.ts +++ b/e2e/select-default-value.e2e-spec.ts @@ -2,6 +2,7 @@ import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("check the select default value - ", () => { let prefPage: PreferencesPage; @@ -34,7 +35,7 @@ describe("check the select default value - ", () => { // in the calculator configuration file, the default resolution method is 'Trapezes'. // let's check this... - const sel = calcPage.getSelectById("select_resolution"); + const sel = await calcPage.getSelectById("select_resolution"); const val = await calcPage.getSelectValueText(sel); expect(val).toBe("Intégration par trapèzes"); }); @@ -47,7 +48,7 @@ describe("check the select default value - ", () => { // in the calculator configuration file, the default section method is 'Rectangulaire'. // let's check this... - const sel = calcPage.getSelectById("select_section"); + const sel = await calcPage.getSelectById("select_section"); const val = await calcPage.getSelectValueText(sel); expect(val).toBe("Rectangulaire"); }); diff --git a/e2e/sidenav.po.ts b/e2e/sidenav.po.ts index 94ba72779..e7e79bbe2 100644 --- a/e2e/sidenav.po.ts +++ b/e2e/sidenav.po.ts @@ -1,4 +1,7 @@ import * as path from "path"; +import { browser, $, $$, expect } from '@wdio/globals' +import { CalculatorPage } from "./calculator.po"; +import { scrollToElement } from "./util.po"; export class SideNav { @@ -20,6 +23,7 @@ export class SideNav { getFileInput() { return $(`dialog-load-session input[type="file"]`); + // return $(`dialog-load-session ngx-mat-file-input`); } getFileLoadButton() { @@ -35,7 +39,7 @@ export class SideNav { } async clickLoadSessionButton() { - const ncb = this.getLoadSessionButton(); + const ncb = await this.getLoadSessionButton(); await browser.pause(500); await ncb.click(); } @@ -47,20 +51,25 @@ export class SideNav { } async clickNewSessionButton() { - const ncb = this.getNewSessionButton(); - await browser.pause(200); + const ncb = await this.getNewSessionButton(); + // await browser.pause(200); await ncb.click(); await browser.pause(200); - await this.getConfirmNewSessionButton().click(); + const cb = await this.getConfirmNewSessionButton(); + await cb.click(); } async loadSessionFile(file: string, click: boolean = true) { const absolutePath = path.resolve(__dirname, file); - const input = this.getFileInput(); - await input.setValue(absolutePath); - await browser.pause(500); + const input = await this.getFileInput(); + // await input.click(); + // await scrollToElement(input) + // await input.setValue(absolutePath); + await input.addValue(absolutePath); + // await browser.pause(500); if (click) { - await this.getFileLoadButton().click(); + const btn = await this.getFileLoadButton(); + await btn.click(); } } diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index 2b09a3387..1aa86e1dd 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -3,7 +3,8 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, scrollPageToTop } from "./util.po"; +import { changeSelectValue, newSession, openCalculator, scrollPageToTop } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Clone calculators @@ -11,16 +12,16 @@ import { changeSelectValue, scrollPageToTop } from "./util.po"; describe("Solveur - ", () => { let listPage: ListPage; let calcPage: CalculatorPage; - let navbar: Navbar; - let sidenav: SideNav; + let navBar: Navbar; + let sideNav: SideNav; let prefPage: PreferencesPage; beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); calcPage = new CalculatorPage(); - navbar = new Navbar(); - sidenav = new SideNav(); + navBar = new Navbar(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -29,35 +30,39 @@ describe("Solveur - ", () => { // force language to prevent issues due to default browser language await prefPage.changeLanguage(1); // fr await browser.pause(200); - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); }); it("load > calculate", async () => { - await navbar.clickMenuButton(); + await navBar.clickMenuButton(); await browser.pause(200); - await sidenav.clickLoadSessionButton(); + await sideNav.clickLoadSessionButton(); await browser.pause(200); - await sidenav.loadSessionFile("./session/session-solveur-chutes.json"); + await sideNav.loadSessionFile("./session/session-solveur-chutes.json"); await browser.pause(200); - expect(await navbar.getAllCalculatorTabs().length).toBe(4); - await navbar.clickCalculatorTab(3); // n°3 should be the latest + expect(await navBar.getAllCalculatorTabs().length).toBe(4); + await navBar.clickCalculatorTab(3); // n°3 should be the latest // check input values - expect(await calcPage.getInputById("Xinit").getAttribute("value")).toBe("0.5"); - expect(await calcPage.getInputById("Ytarget").getAttribute("value")).toBe("252"); + // expect(await calcPage.getInputById("Xinit").getAttribute("value")).toBe("0.5"); + const inpXinit = await calcPage.getInputById("Xinit"); + expect(await inpXinit.getValue()).toBe("0.5"); + // expect(await calcPage.getInputById("Ytarget").getAttribute("value")).toBe("252"); + const inpYtarget = await calcPage.getInputById("Ytarget"); + expect(await inpYtarget.getValue()).toBe("252"); // check Nub to calculate - const ntc = calcPage.getSelectById("select_target_nub"); + const ntc = await calcPage.getSelectById("select_target_nub"); const ntcV = await calcPage.getSelectValueText(ntc); expect(ntcV).toContain("PAB : puissance / Puissance dissipée (PV)"); // check targetted result - const ntt = calcPage.getSelectById("select_target_result"); + const ntt = await calcPage.getSelectById("select_target_result"); const nttV = await calcPage.getSelectValueText(ntt); expect(nttV).toContain("Puissance dissipée (PV)"); // check searched Parameter - const sp = calcPage.getSelectById("select_searched_param"); + const sp = await calcPage.getSelectById("select_searched_param"); const spV = await calcPage.getSelectValueText(sp); expect(spV).toContain("Z2 - Cote aval (PAB : chute)"); @@ -65,6 +70,8 @@ describe("Solveur - ", () => { const calcButton = await calcPage.checkCalcButtonEnabled(true); // click "compute" button await calcButton.click(); + await browser.pause(200); + // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -76,45 +83,52 @@ describe("Solveur - ", () => { }); it("create > feed > calculate > clone > calculate clone", async () => { + await newSession(navBar, sideNav); + // 1. create empty Solveur - await listPage.clickMenuEntryForCalcType(22); // Solveur - await browser.pause(500); + // await listPage.clickMenuEntryForCalcType(22); // Solveur + // await browser.pause(500); + openCalculator(22, navBar, listPage); // 2. create PAB:Chute, PAB:Nombre and PAB:Puissance linked to one another - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); // PAB:Chute await browser.pause(500); - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(13); // PAB:Nombre await browser.pause(500); // link DHT to PAB:Chute.DH - const dht = calcPage.getInputById("DHT"); + const dht = await calcPage.getInputById("DHT"); await calcPage.setParamMode(dht, "link"); // Calculate DH - const dh_nombre = calcPage.getInputById("DH"); + const dh_nombre = await calcPage.getInputById("DH"); await calcPage.setParamMode(dh_nombre, "cal"); - await navbar.clickNewCalculatorButton(); + await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(6); // PAB:Puissance await browser.pause(500); // link DH to PAB:Nombre.DH - const dh_puiss = calcPage.getInputById("DH"); + const dh_puiss = await calcPage.getInputById("DH"); await calcPage.setParamMode(dh_puiss, "link"); // Go back to Solveur - await navbar.clickCalculatorTab(0); + await navBar.clickCalculatorTab(0); - await changeSelectValue(calcPage.getSelectById("select_target_nub"), 1); // "Puissance / PV" + await changeSelectValue(await calcPage.getSelectById("select_target_nub"), 1); // "Puissance / PV" await browser.pause(500); - await changeSelectValue(calcPage.getSelectById("select_searched_param"), 2); // "Chute / Z2" + await changeSelectValue(await calcPage.getSelectById("select_searched_param"), 2); // "Chute / Z2" await browser.pause(500); await calcPage.getInputById("Ytarget").setValue("318"); // check that "compute" button is active const calcButton = await calcPage.checkCalcButtonEnabled(true); + await browser.pause(200); + // click "compute" button await calcButton.click(); + await browser.pause(200); + // check that result is not empty const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); @@ -125,8 +139,8 @@ describe("Solveur - ", () => { await browser.pause(500); // 4. check existence of the cloned module - expect(await navbar.getAllCalculatorTabs().length).toBe(5); - await navbar.clickCalculatorTab(4); // n°4 should be the latest + expect(await navBar.getAllCalculatorTabs().length).toBe(5); + await navBar.clickCalculatorTab(4); // n°4 should be the latest // check that result is empty const hasResultsClone1 = await calcPage.hasResults(); @@ -134,31 +148,37 @@ describe("Solveur - ", () => { // check that "compute" button is active const calcButtonClone = await calcPage.checkCalcButtonEnabled(true); + await browser.pause(200); + // click "compute" button await calcButtonClone.click(); + await browser.pause(200); + // check that result is not empty const hasResultsClone2 = await calcPage.hasResults(); expect(hasResultsClone2).toBe(true); }); it("channel flow example > solver > change searched parameter > run calculation", async () => { + await newSession(navBar, sideNav); + // open "channel flow with hydraulic structures" example const examples = await $$("#examples-list .load-example"); - await (await examples)[1].click(); + await examples[1].click(); await browser.pause(500); // select solver tab - await navbar.clickCalculatorTab(3); + await navBar.clickCalculatorTab(3); await browser.pause(500); // modify searched parameter - const sel = calcPage.getSelectById("select_searched_param"); + const sel = await calcPage.getSelectById("select_searched_param"); await changeSelectValue(sel, 11); await browser.pause(300); const selText = await calcPage.getSelectValueText(sel); // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(500); @@ -167,17 +187,19 @@ describe("Solveur - ", () => { }); it("check solver searched parameter is set to 'bottom slope'", async () => { + await newSession(navBar, sideNav); + // open "canal critical slope" example const examples = await $$("#examples-list .load-example"); - await (await examples)[3].click(); + await examples[3].click(); await browser.pause(500); // select solver tab - await navbar.clickCalculatorTab(2); + await navBar.clickCalculatorTab(2); await browser.pause(500); // check selected searched parameter text - const sel = calcPage.getSelectById("select_searched_param"); + const sel = await calcPage.getSelectById("select_searched_param"); const selText = await calcPage.getSelectValueText(sel); expect(selText).toEqual("If - Pente du fond (Sec. param.)"); }); @@ -191,24 +213,19 @@ describe("Solveur - nghyd#601 with empty fields option", () => { let navBar: Navbar; let listPage: ListPage; let calcPage: CalculatorPage; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); navBar = new Navbar(); listPage = new ListPage(); calcPage = new CalculatorPage(); + sideNav = new SideNav(); }); - async function openCalculator(id: number) { - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - - await listPage.clickMenuEntryForCalcType(id); - await browser.pause(200); - } async function openSolver() { - await openCalculator(22); + await openCalculator(22, navBar, listPage); } beforeEach(async () => { @@ -217,6 +234,8 @@ describe("Solveur - nghyd#601 with empty fields option", () => { }); it("check solver with empty fields option does not fill inputs - solver alone", async () => { + await newSession(navBar, sideNav); + // open new solver calculator await openSolver(); @@ -230,13 +249,13 @@ describe("Solveur - nghyd#601 with empty fields option", () => { it("check solver with empty fields option does not fill target parameter input", async () => { // open "parallel structures" calculator - await openCalculator(8); + await openCalculator(8, navBar, listPage); // open second "parallel structures" calculator - await openCalculator(8); + await openCalculator(8, navBar, listPage); // link Q to first calculator's - const inpQ = calcPage.getInputById("Q"); + const inpQ = await calcPage.getInputById("Q"); await calcPage.setParamMode(inpQ, "link"); await browser.pause(200); @@ -245,20 +264,22 @@ describe("Solveur - nghyd#601 with empty fields option", () => { // check target parameter input is empty await calcPage.checkEmptyInput("Ytarget"); - await browser.pause(200); + await browser.pause(100); // check initial value input is not empty await calcPage.checkEmptyInput("Xinit"); - await browser.pause(200); + await browser.pause(100); }); it("check removing and recreating solver with empty fields option does not fill target parameter input", async () => { - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + await newSession(navBar, sideNav); + + // await navBar.clickNewCalculatorButton(); + // await browser.pause(200); // open "channel flow with hydraulic structures" example const examples = await $$("#examples-list .load-example"); - await (await examples)[1].click(); + await examples[1].click(); await browser.pause(500); // close existing "solver" calculator @@ -286,24 +307,26 @@ describe("Solveur - nghyd#601 without empty fields option", () => { let navBar: Navbar; let listPage: ListPage; let calcPage: CalculatorPage; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); navBar = new Navbar(); listPage = new ListPage(); calcPage = new CalculatorPage(); + sideNav = new SideNav(); }); - async function openCalculator(id: number) { - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + // async function openCalculator(id: number) { + // await navBar.clickNewCalculatorButton(); + // await browser.pause(200); - await listPage.clickMenuEntryForCalcType(id); - await browser.pause(200); - } + // await listPage.clickMenuEntryForCalcType(id); + // await browser.pause(200); + // } async function openSolver() { - await openCalculator(22); + await openCalculator(22, navBar, listPage); } beforeEach(async () => { @@ -314,6 +337,8 @@ describe("Solveur - nghyd#601 without empty fields option", () => { }); it("check solver without empty fields option does not fill inputs - solver alone", async () => { + await newSession(navBar, sideNav); + // open new solver calculator await openSolver(); @@ -327,13 +352,13 @@ describe("Solveur - nghyd#601 without empty fields option", () => { it("check solver without empty fields option fills inputs", async () => { // open "parallel structures" calculator - await openCalculator(8); + await openCalculator(8, navBar, listPage); // open second "parallel structures" calculator - await openCalculator(8); + await openCalculator(8, navBar, listPage); // link Q to first calculator's - const inpQ = calcPage.getInputById("Q"); + const inpQ = await calcPage.getInputById("Q"); await calcPage.setParamMode(inpQ, "link"); await browser.pause(200); @@ -350,12 +375,14 @@ describe("Solveur - nghyd#601 without empty fields option", () => { }); it("check removing and recreating solver without empty fields option fills inputs", async () => { - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + await newSession(navBar, sideNav); + + // await navBar.clickNewCalculatorButton(); + // await browser.pause(200); // open "channel flow with hydraulic structures" example const examples = await $$("#examples-list .load-example"); - await (await examples)[1].click(); + await examples[1].click(); await browser.pause(500); // close existing "solver" calculator @@ -384,7 +411,7 @@ describe("Solveur - nghyd#601 without empty fields option", () => { // open "channel flow with hydraulic structures" example const examples = await $$("#examples-list .load-example"); - await (await examples)[1].click(); + await examples[1].click(); await browser.pause(500); // close existing "solver" calculator @@ -396,7 +423,7 @@ describe("Solveur - nghyd#601 without empty fields option", () => { await browser.pause(500); // select other target module - const ntc = calcPage.getSelectById("select_target_nub"); + const ntc = await calcPage.getSelectById("select_target_nub"); await changeSelectValue(ntc, 1); // check target value input is empty @@ -410,24 +437,26 @@ describe("Solveur - nghyd#606 - a single module cannot be used with solver", () let navBar: Navbar; let listPage: ListPage; let calcPage: CalculatorPage; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); navBar = new Navbar(); listPage = new ListPage(); calcPage = new CalculatorPage(); + sideNav = new SideNav(); }); - async function openCalculator(id: number) { - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + // async function openCalculator(id: number) { + // await navBar.clickNewCalculatorButton(); + // await browser.pause(200); - await listPage.clickMenuEntryForCalcType(id); - await browser.pause(200); - } + // await listPage.clickMenuEntryForCalcType(id); + // await browser.pause(200); + // } async function openSolver() { - await openCalculator(22); + await openCalculator(22, navBar, listPage); } beforeEach(async () => { @@ -438,19 +467,21 @@ describe("Solveur - nghyd#606 - a single module cannot be used with solver", () }); it("", async () => { + await newSession(navBar, sideNav); + // open uniform flow calculator - await openCalculator(3); + await openCalculator(3, navBar, listPage); // open a solver module await openSolver(); // set speed as target parameter - const trs = calcPage.getSelectById("select_target_result"); + const trs = await calcPage.getSelectById("select_target_result"); await changeSelectValue(trs, 1); await browser.pause(200); // check searched parameter has options - const sps = calcPage.getSelectById("select_searched_param"); + const sps = await calcPage.getSelectById("select_searched_param"); expect(await calcPage.isSelectEmpty(sps)).toBe(false); }); }); diff --git a/e2e/translation.e2e-spec.ts b/e2e/translation.e2e-spec.ts index 00f0e3316..93bcb3f48 100644 --- a/e2e/translation.e2e-spec.ts +++ b/e2e/translation.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("Check translation", () => { let listPage: ListPage; @@ -26,8 +27,9 @@ describe("Check translation", () => { it("variables in results", async () => { // *** results in french *** - prefPage.changeLanguage(1); // fr - await browser.pause(200); + await prefPage.navigateTo(); + await prefPage.changeLanguage(1); // fr + // await browser.pause(200); // open "fish ladder: fall" calculator await navBar.clickNewCalculatorButton(); @@ -35,7 +37,7 @@ describe("Check translation", () => { await browser.pause(200); // set Z2 to variated mode - const inpZ2 = calcPage.getInputById("Z2"); + const inpZ2 = await calcPage.getInputById("Z2"); await calcPage.setParamMode(inpZ2, "var"); // run calculation @@ -43,20 +45,22 @@ describe("Check translation", () => { await browser.pause(500); // "variable for X axis" select label - const selXaxis = calcPage.getSelectById("selectX"); + const selXaxis = await calcPage.getSelectById("selectX"); expect(await calcPage.getMatselectCurrentOptionText(selXaxis)).toEqual("Cote aval"); // "variable for Y axis" select label - const selYaxis = calcPage.getSelectById("selectY"); + const selYaxis = await calcPage.getSelectById("selectY"); expect(await calcPage.getMatselectCurrentOptionText(selYaxis)).toEqual("DH : Chute (m)"); // fixed results variables - const frr = calcPage.getAllFixedResultsRows(); - let lbl1 = await frr.$$("td")[0].getText(); + const frr = await calcPage.getAllFixedResultsRows(); + let row0 = frr[0]; + // let lbl1 = await frr.$$("td")[0].getText(); + let lbl1 = await row0.$("td").getText(); expect(lbl1).toEqual("Cote amont (m)"); // variated results headers - const vrh = calcPage.getAllVariatedResultsTableHeaders(); + const vrh = await calcPage.getAllVariatedResultsTableHeaders(); let lbl2 = await vrh[0].getText(); expect(lbl2).toEqual("Cote aval"); let lbl3 = await vrh[1].getText(); @@ -65,11 +69,12 @@ describe("Check translation", () => { // *** results in english *** // setup -> english - await navBar.clickMenuButton(); - await browser.pause(200); - const setupBtn = sideNav.getSetupButton(); - await setupBtn.click(); - await browser.pause(200); + // await navBar.clickMenuButton(); + // await browser.pause(200); + // const setupBtn = await sideNav.getSetupButton(); + // await setupBtn.click(); + // await browser.pause(200); + await prefPage.navigateTo(); await prefPage.changeLanguage(0); // en await browser.pause(200); @@ -84,7 +89,9 @@ describe("Check translation", () => { expect(await calcPage.getMatselectCurrentOptionText(selYaxis)).toEqual("DH : Fall (m)"); // fixed results variables - lbl1 = await frr.$$("td")[0].getText(); + row0 = frr[0]; + // lbl1 = await frr.$$("td")[0].getText(); + lbl1 = await row0.$("td").getText(); expect(lbl1).toEqual("Upstream elevation (m)"); // variated results headers diff --git a/e2e/util.po.ts b/e2e/util.po.ts index c7717900f..6e3d63c2e 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -1,11 +1,16 @@ import { browser, $, $$, expect } from '@wdio/globals' +import { Navbar } from './navbar.po'; +import { SideNav } from './sidenav.po'; +import { ListPage } from './list.po'; /** * scroll page to make element visible */ export async function scrollToElement(elem) { - await browser.execute("arguments[0].scrollIntoView({ block: 'center' });", elem); - await browser.pause(50); + // await browser.execute("arguments[0].scrollIntoView({ block: 'center' });", elem); + // await browser.pause(50); + await browser.execute(e => { e.scrollIntoView({ block: 'center' }) }, elem); + await browser.pause(100); } /** @@ -13,6 +18,7 @@ export async function scrollToElement(elem) { */ export async function scrollPageToTop() { await browser.execute("window.scrollTo(0, 0);"); + // await browser.scroll(0, 0); } /** @@ -29,9 +35,42 @@ export function expectNumber(msg: string, val: number, expected: number) { } export async function changeSelectValue(elt, index: number) { + await scrollToElement(elt); + await browser.pause(100); await elt.click(); + await browser.pause(100); const optionId = ".cdk-overlay-container mat-option:nth-of-type(" + (index + 1) + ")"; - const option = $(optionId); + const option = await $(optionId); await option.click(); await browser.pause(200); } + +// Remove all calculators from current session. +// Often used since WebDriverIO migration since it()s in a single e2e-spec file +// reuse the same browser window, hence calculators from previous it()s remain +// and may disturb subsequent tests. +// Avoids splitting it()s into multiple e2e-spec files... +export async function newSession(navBar: Navbar, sideNav: SideNav) { + const tabs = await navBar.getAllCalculatorTabs(); + if (tabs.length > 0) { + await navBar.clickMenuButton(); + await browser.pause(200); + await sideNav.clickNewSessionButton(); + await browser.pause(200); + // après ça, le bouton "#new-calculator" est absent + } +} + +export async function openCalculator(id: number, navBar: Navbar, listPage: ListPage) { + const ncButton = await navBar.getNewCalculatorButton(); + if (await ncButton.isExisting()) { + await scrollToElement(ncButton); + if (await ncButton.isDisplayed()) { + await ncButton.click() + await browser.pause(200); + } + } + + await listPage.clickMenuEntryForCalcType(id); + await browser.pause(200); +} diff --git a/e2e/valeurs-erronees.e2e-spec.ts b/e2e/valeurs-erronees.e2e-spec.ts index 716ce4060..5f2ca99b4 100644 --- a/e2e/valeurs-erronees.e2e-spec.ts +++ b/e2e/valeurs-erronees.e2e-spec.ts @@ -2,6 +2,7 @@ import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' describe("ngHyd - check invalid values are removed - ", () => { let listPage: ListPage; @@ -31,12 +32,12 @@ describe("ngHyd - check invalid values are removed - ", () => { await browser.pause(200); // modify W input with invalid value - const inputW = calcPage.getInputById("W"); - await browser.pause(200); - await inputW.clearValue(); - await browser.pause(200); + const inputW = await calcPage.getInputById("W"); + // await browser.pause(200); + // await inputW.clearValue(); + // await browser.pause(200); await inputW.setValue("-1"); - await browser.pause(200); + // await browser.pause(200); // open another calculator await navBar.clickNewCalculatorButton(); @@ -48,8 +49,9 @@ describe("ngHyd - check invalid values are removed - ", () => { await browser.pause(200); // check invalid value is removed - const w = await inputW.getAttribute("value"); - await browser.pause(200); + // const w = await inputW.getAttribute("value"); + const w = await inputW.getValue(); + // await browser.pause(200); expect(w).toEqual(""); // check that "compute" button is disabled diff --git a/e2e/variable-param-cancel.e2e-spec.ts b/e2e/variable-param-cancel.e2e-spec.ts index 46219fd4b..534e3cc9c 100644 --- a/e2e/variable-param-cancel.e2e-spec.ts +++ b/e2e/variable-param-cancel.e2e-spec.ts @@ -1,4 +1,7 @@ +import { brotliCompress } from "zlib"; +import { CalculatorPage } from "./calculator.po"; import { ListPage } from "./list.po"; +import { browser, $, $$, expect } from '@wdio/globals' /** * Check that a cancel button is present in min/max/list edition dialog @@ -6,24 +9,31 @@ import { ListPage } from "./list.po"; */ describe("ngHyd - check cancel button for variable parameters - ", () => { let listPage: ListPage; + let calcPage: CalculatorPage; beforeAll(() => { listPage = new ListPage(); + calcPage = new CalculatorPage(); }); it("when min/max/list values dialog opens, a cancel button should be present", async () => { + debugger // start page await listPage.navigateTo(); + await browser.pause(200); // open PAB chute await listPage.clickMenuEntryForCalcType(12); + await browser.pause(200); // click "var" radio on Z1 parameter - const z1btn = $("#mat-button-toggle-2-button"); + // const z1btn = $("#mat-button-toggle-2-button"); + const z1btn = await calcPage.getInputRadioButtonFromId("Z1", "var"); await z1btn.click(); + await browser.pause(300); // cancel button presence - const cancelbtn = $("#btn-cancel"); - expect((await cancelbtn.isExisting()) && (await cancelbtn.isDisplayed())).toBeTruthy(); + const cancelbtn = await $("#btn-cancel"); + expect((await cancelbtn.isExisting()) && (await cancelbtn.isDisplayed())).toEqual(true); }); }); diff --git a/wdio.conf.ts b/wdio.conf.ts index 8f5d4c440..f66acf321 100644 --- a/wdio.conf.ts +++ b/wdio.conf.ts @@ -14,8 +14,8 @@ export const config: Options.Testrunner = { transpileOnly: true } }, - - + + // // ================== // Specify Test Files @@ -69,7 +69,7 @@ export const config: Options.Testrunner = { // maxInstances can get overwritten per capability. So if you have an in-house Selenium // grid with only 5 firefox instances available you can make sure that not more than // 5 instances get started at a time. - maxInstances: 5, + maxInstances: 1, // browserName: 'chrome', acceptInsecureCerts: true @@ -85,7 +85,9 @@ export const config: Options.Testrunner = { // Define all options that are relevant for the WebdriverIO instance here // // Level of logging verbosity: trace | debug | info | warn | error | silent - logLevel: 'info', + // logLevel: 'info', + logLevel: 'warn', + // logLevel: 'error', // // Set specific log levels per logger // loggers: @@ -126,7 +128,7 @@ export const config: Options.Testrunner = { // your test setup with almost no effort. Unlike plugins, they don't add new // commands. Instead, they hook themselves up into the test process. services: ['chromedriver'], - + // Framework you want to run your specs with. // The following are supported: Mocha, Jasmine, and Cucumber // see also: https://webdriver.io/docs/frameworks @@ -150,7 +152,7 @@ export const config: Options.Testrunner = { reporters: ['spec'], - + // // Options to be passed to Jasmine. jasmineOpts: { @@ -160,11 +162,11 @@ export const config: Options.Testrunner = { // The Jasmine framework allows interception of each assertion in order to log the state of the application // or website depending on the result. For example, it is pretty handy to take a screenshot every time // an assertion fails. - expectationResultHandler: function(passed, assertion) { + expectationResultHandler: function (passed, assertion) { // do something } }, - + // // ===== // Hooks -- GitLab From 8b006623605e5a6e83eb073c6d5fa902cc53da74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 26 Apr 2023 11:16:07 +0200 Subject: [PATCH 14/25] refactor(e2e): code cleanup refs #618 --- e2e/calc-all-examples.e2e-spec.ts | 6 - e2e/calculate-all-params.e2e-spec.ts | 31 ----- e2e/calculate-button-validation.e2e-spec.ts | 4 - e2e/calculate-linked-params.e2e-spec.ts | 22 ---- e2e/calculator.e2e-spec.ts | 1 - e2e/calculator.po.ts | 129 +------------------ e2e/check-translations.e2e-spec.ts | 2 - e2e/clone-all-calc.e2e-spec.ts | 7 +- e2e/clone-calc.e2e-spec.ts | 3 - e2e/examples-empty-fields.e2e-spec.ts | 11 -- e2e/helpers/GremlinHelper.ts | 1 - e2e/link-parallel-devices.e2e-spec.ts | 2 - e2e/list.po.ts | 1 - e2e/load-linked-params.e2e-spec.ts | 3 - e2e/load-save-session.e2e-spec.ts | 6 - e2e/navbar.po.ts | 8 -- e2e/navigate-through-calculators.e2e-spec.ts | 1 - e2e/pab.e2e-spec.ts | 18 --- e2e/parallel-structures.e2e-spec.ts | 1 - e2e/predam-empty-fields.e2e-spec.ts | 5 - e2e/predam-log.e2e-spec.ts | 4 +- e2e/preferences.e2e-spec.ts | 13 -- e2e/preferences.po.ts | 1 - e2e/pressure-loss.e2e-spec.ts | 2 - e2e/reset-param-mode.e2e-spec.ts | 15 --- e2e/reset-results.e2e-spec.ts | 5 - e2e/sidenav.po.ts | 6 - e2e/solveur.e2e-spec.ts | 26 ---- e2e/translation.e2e-spec.ts | 8 -- e2e/util.po.ts | 3 - e2e/valeurs-erronees.e2e-spec.ts | 6 - e2e/variable-param-cancel.e2e-spec.ts | 2 - 32 files changed, 7 insertions(+), 346 deletions(-) diff --git a/e2e/calc-all-examples.e2e-spec.ts b/e2e/calc-all-examples.e2e-spec.ts index adb93e8f1..04a64a3e3 100644 --- a/e2e/calc-all-examples.e2e-spec.ts +++ b/e2e/calc-all-examples.e2e-spec.ts @@ -42,10 +42,6 @@ describe("ngHyd − example sessions −", () => { } else { // empty session - // await navbar.clickMenuButton(); - // await browser.pause(200); - // await sideNav.clickNewSessionButton(); - // await browser.pause(1000); await newSession(navBar, sideNav); } @@ -62,8 +58,6 @@ describe("ngHyd − example sessions −", () => { // select module await navBar.openNthCalculator(j); await browser.pause(300); - // await calcPage.closeSnackBar(); // opening a calculator can trigger a snackbar with "results invalidated for..." - // await browser.pause(300); await calcPage.closeSnackBars(5, 500); // opening a calculator can trigger a snackbar with "results invalidated for..." await browser.pause(500); // calculate module diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index 0af1460ba..744c83877 100644 --- a/e2e/calculate-all-params.e2e-spec.ts +++ b/e2e/calculate-all-params.e2e-spec.ts @@ -37,24 +37,6 @@ describe("ngHyd − calculate all parameters of all calculators", () => { // get calculators list (IDs) @TODO read it from config, but can't import jalhyd here :/ const calcTypes = testedCalcTypes; - // const calcTypes = [0]; - // export const testedCalcTypes = [ - // 0, - // // omit 1 - LechaptCalmon - // 2, 3, 4, 5, 6, - // // omit 7 - Structure - // 8, 9, 10, 11, 12, 13, - // // omit 14 -Section - // 15, - // // omit 16 - CloisonAval - // 17, 18, 19, 20, 21, 22, 23, 24, 25, - // // omit 26 - YAXN - // 27, 28, 29, 30, - // // omit 31 - PbCloison and 32 - PbBassin - // 33, 34, 35 - // ]; - // const calcTypes =[30]; - // for each calculator for (const ct of calcTypes) { @@ -70,21 +52,11 @@ describe("ngHyd − calculate all parameters of all calculators", () => { describe(" − calculate all parameters of calculator type [" + ct + "]", () => { it("", async () => { await newSession(navBar, sideNav); - - //await browser.execute("window.moveTo(2000,30)") - // await browser.driver.moveTo(2000,30); - - // go to list page - // await navBar.clickNewCalculatorButton(); - - // click calculator button (instanciate) - // await listPage.clickMenuEntryForCalcType(ct); await openCalculator(ct, navBar, listPage); // get all parameters IDs const inputs = await calcPage.getParamInputsHavingCalcMode(); - // if ((await inputs).length > 0) { if (inputs.length > 0) { // for each param for (let i = 0; i < inputs.length; i++) { @@ -99,9 +71,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { // grab input again because calculating the module just refreshed all the fieldsets const input = (await calcPage.getParamInputsHavingCalcMode())[i]; // click "calc" mode button for this parameter - // await browser.pause(50); await calcPage.setParamMode(input, "cal"); - // await browser.pause(50); // check that only 1 button is in "calc" state const nbParamsCalc = await calcPage.getCheckedCalcModeButtons().length; expect(nbParamsCalc).toBe(1); @@ -127,6 +97,5 @@ describe("ngHyd − calculate all parameters of all calculators", () => { } }); }); - // break; } }); diff --git a/e2e/calculate-button-validation.e2e-spec.ts b/e2e/calculate-button-validation.e2e-spec.ts index d11a3f9ec..a0634d81a 100644 --- a/e2e/calculate-button-validation.e2e-spec.ts +++ b/e2e/calculate-button-validation.e2e-spec.ts @@ -147,17 +147,13 @@ describe("Calculate button - ", () => { // for each input, set empty and check calculate button is not active - // const pfls = await calcPage.getParamfieldlines(); const inputs = await calcPage.getParamInputs(); - // for (const pfl of pfls) { for (const inp of inputs) { // set input to fixed mode - // await calcPage.setParamMode(pfl, "fix"); await calcPage.setParamMode(inp, "fix"); await browser.pause(100); // clear input - // const inp = await calcPage.getParamfieldlineInput(pfl); await calcPage.clearInput(inp); await browser.pause(10); diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts index ca0753940..557484db9 100644 --- a/e2e/calculate-linked-params.e2e-spec.ts +++ b/e2e/calculate-linked-params.e2e-spec.ts @@ -46,19 +46,6 @@ describe("ngHyd − calculate with linked parameters", () => { await browser.pause(100); }); - afterEach(async () => { - //await browser.reloadSession(); - // await browser.pause(500); - }); - - // describe('webdriver.io page', () => { - // it('should reload my session with current capabilities', () => { - // console.log(browser.sessionId) - // browser.reloadSession() - // console.log(browser.sessionId) - // }) - // }); - async function computeAndCheckPresenceOfResults() { // check that "compute" button is active const calcButton = await calcPage.checkCalcButtonEnabled(true); @@ -71,9 +58,6 @@ describe("ngHyd − calculate with linked parameters", () => { } it(" − direct links : parameter linked to a single parameter", async () => { - // await browser.reloadSession(); - // await browser.pause(1000); - // create a Régime uniforme await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(3); @@ -88,8 +72,6 @@ describe("ngHyd − calculate with linked parameters", () => { await changeSelectValue(sel, 0); await computeAndCheckPresenceOfResults(); - // await browser.reloadSession(); - // await browser.closeWindow(); }); it(" − direct links : parameter linked to a single parameter, plus local variated parameter", async () => { @@ -110,7 +92,6 @@ describe("ngHyd − calculate with linked parameters", () => { await calcPage.setParamMode(W, "var"); await computeAndCheckPresenceOfResults(); - // await browser.reloadSession(); }); it(" − direct links : parameter linked to a variated parameter", async () => { @@ -277,7 +258,6 @@ describe("ngHyd − calculate with linked parameters", () => { // check that number of rows in the variated results table equals number of variated values const varRows = await calcPage.getAllVariatedResultsRows(); - // const nbRows = await varRows.length; expect(varRows.length).toBe(191); // boundaries are included // check that all parameters have values for all iterations (Z2 might miss some if repeat strategy is not applied) @@ -313,7 +293,6 @@ describe("ngHyd − calculate with linked parameters", () => { let frt = await calcPage.getFixedResultsTable(); let volumeRow = await calcPage.getNthRow(frt, 3); let volumeCol = await calcPage.getNthColumn(volumeRow, 2); - // let volume = await volumeCol.getAttribute("textContent"); let volume = await volumeCol.getText(); expect(Number(volume)).toBeCloseTo(44.565, 3); @@ -329,7 +308,6 @@ describe("ngHyd − calculate with linked parameters", () => { frt = await calcPage.getFixedResultsTable(); volumeRow = await calcPage.getNthRow(frt, 3); volumeCol = await calcPage.getNthColumn(volumeRow, 2); - // volume = await volumeCol.getText("textContent"); volume = await volumeCol.getText(); expect(Number(volume)).toBeCloseTo(44.565, 3); }); diff --git a/e2e/calculator.e2e-spec.ts b/e2e/calculator.e2e-spec.ts index 5c41eba08..47f0cf969 100644 --- a/e2e/calculator.e2e-spec.ts +++ b/e2e/calculator.e2e-spec.ts @@ -22,7 +22,6 @@ describe("ngHyd − calculator page", () => { it("when a calculator is open, no active label should be empty", async () => { const labels = await page.getInputLabels(); - // await labels.each(async (l) => { for (const l of labels) { const label = await l.getText(); expect(label.length).toBeGreaterThan(0); diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 531b0e195..845251555 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -12,58 +12,15 @@ export class CalculatorPage { return $$("ngparam-input input.form-control"); } - // getParamfieldlines() { - // return $$("param-field-line"); - // } - - // getParamfieldlineInput(pfl) { - // return pfl.$("ngparam-input input.form-control"); - // } - - // async getParamInputsHavingCalcMode() { - // const ret = []; - // const inputs = await this.getParamInputs(); - // // await inputs.each(async (i) => { - // // if (await this.inputHasCalcModeButton(i)) { - // // ret.push(i); - // // } - // // }); - - // // for await (const img of $$('img')) { - // // console.log(await img.getAttribute('src)) - // // } - - // for await (const i of inputs) { - // if (await this.inputHasCalcModeButton(i)) { - // ret.push(i); - // } - // } - - // return ret; - // } async getParamInputsHavingCalcMode() { const ret = []; const inputs = await $$("param-field-line"); - // await inputs.each(async (i) => { - // if (await this.inputHasCalcModeButton(i)) { - // ret.push(i); - // } - // }); - - // for await (const img of $$('img')) { - // console.log(await img.getAttribute('src)) - // } - for (const inp of inputs) { - // if (await this.inputHasCalcModeButton(i)) { - // ret.push(i); - // } const toggle = await inp.$("mat-button-toggle.radio_cal > button"); if (await toggle.isExisting()) { ret.push(inp); } } - return ret; } @@ -88,8 +45,6 @@ export class CalculatorPage { if ((await sel.isExisting()) && (await sel.isDisplayed())) { await sel.click(); const options = $$(".cdk-overlay-container mat-option"); - // FIXME>>>>await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown - //await sel.keys('Escape'); // close dropdown await browser.keys(Key.Escape); // close dropdown return await options.length; } @@ -113,8 +68,6 @@ export class CalculatorPage { const opt = options[o]; res.push(await opt.getText()) } - // FIXME>>>>await sel.sendKeys(protractor.Key.ESCAPE); // close dropdown - // await sel.keys('Escape'); // close dropdown await browser.keys(Key.Escape); // close dropdown await browser.pause(500); return res; @@ -135,7 +88,6 @@ export class CalculatorPage { async getMatselectCurrentOptionText(select): Promise<string> { const currentOption = await this.getSelectCurrentOption(select); await browser.pause(100); - // return await currentOption.$("span span").getText(); const opt = await currentOption.$("span span"); await browser.pause(100); const res = await opt.getText(); @@ -145,7 +97,7 @@ export class CalculatorPage { getSelectById(id: string) { // return $(`#${id}`); - return $(`mat-select[id='${id}']`); // IDs cannot by a number, so use this query form + return $(`mat-select[id='${id}']`); // IDs cannot start by a number, so use this query form } async isMatSelectPresent(id: string) { @@ -170,11 +122,11 @@ export class CalculatorPage { getInputById(id: string) { // return $(`#${id}`); - return $(`input[id='${id}']`); // IDs cannot by a number, so use this query form + return $(`input[id='${id}']`); // IDs cannot start by a number, so use this query form } getNgInputById(id: string) { - return $(`ngparam-input input[id='${id}']`); // IDs cannot by a number, so use this query form + return $(`ngparam-input input[id='${id}']`); // IDs cannot start by a number, so use this query form } getSaveSessionButton() { @@ -221,12 +173,6 @@ export class CalculatorPage { return $$("fixedvar-results var-results table tbody tr"); } - // scrollTo(elt: ElementFinder) { - // browser.controlFlow().execute(function () { - // browser.executeScript("arguments[0].scrollIntoView(true)", elt.getWebElement()); - // }); - // } - getFixedResultsTable() { return $(".fixed-results-inner-container table"); } @@ -246,7 +192,6 @@ export class CalculatorPage { } async isNgParamPresent(id: string) { - // const inp = $("ngparam-input input#" + id); const inp = await this.getNgInputById(id); return await inp.isExisting(); } @@ -256,12 +201,7 @@ export class CalculatorPage { */ async getInputRadioButton(input, mode: string) { const tag = await input.getTagName(); - // this function may not be called with an input but a param-field-line const root = tag === "input" ? await this.findParentContainer(input) : input; - // get parent (div.container) - // const container = ; - // find radio button - // return await root.$(`mat-button-toggle.radio_${mode} > button`); return await root.$(`mat-button-toggle.radio_${mode}`); } @@ -270,34 +210,20 @@ export class CalculatorPage { */ async getInputRadioButtonFromId(id, mode) { const input = await this.getInputById(id); - // get parent (div.container) - // const container = await this.findParentContainer(input); - // // find radio button - // return await container.$(`mat-button-toggle.radio_${mode} > button`); return await this.getInputRadioButton(input, mode); } async inputHasCalcModeButton(input) { - // // get parent (div.container) - // const container = await this.findParentContainer(input); - // // find radio buttons - // const button = await container.$("mat-button-toggle.radio_cal > button"); const button = await this.getInputRadioButton(input, "cal"); return await button.isExisting(); } async inputHasLinkModeButton(input) { - // // get parent (div.container) - // const container = await this.findParentContainer(input); - // // find radio buttons - // const button = container.$("mat-button-toggle.radio_link > button"); const button = await this.getInputRadioButton(input, "link"); return await button.isExisting(); } async isRadioButtonChecked(radio) { - // return (await radio.getAttribute("ng-reflect-checked")) === "true"; - // if (await radio.getTagName() !== "mat-radio-button") { if (await radio.getTagName() !== "mat-button-toggle") { radio = await this.getParentElement(radio); } @@ -309,10 +235,6 @@ export class CalculatorPage { * @returns true if "fixed mode" button linked to an input is selected */ async inputIsInFixedMode(input): Promise<boolean> { - // // get parent (div.container) - // const container = await this.findParentContainer(input); - // // find fixed radio button - // const button = container.$("mat-button-toggle.radio_fix"); const button = await this.getInputRadioButton(input, "fix"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } @@ -321,10 +243,6 @@ export class CalculatorPage { * @returns true if "calculated mode" button linked to an input is selected */ async inputIsInCalculatedMode(input): Promise<boolean> { - // // get parent (div.container) - // const container = await this.findParentContainer(input); - // // find calc radio button - // const button = container.$("mat-button-toggle.radio_cal"); const button = await this.getInputRadioButton(input, "cal"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } @@ -333,10 +251,6 @@ export class CalculatorPage { * @returns true if "linked mode" button linked to an input is selected */ async inputIsInLinkedMode(input): Promise<boolean> { - // // get parent (div.container) - // const container = await this.findParentContainer(input); - // // find calc radio button - // const button = container.$("mat-button-toggle.radio_link"); const button = await this.getInputRadioButton(input, "link"); return (await button.getAttribute("ng-reflect-checked")) === "true"; } @@ -361,11 +275,7 @@ export class CalculatorPage { async presentAndVisible(selector: string) { const elt = await $(selector); - // return (await elt.isExisting()) && (await elt.isDisplayed()); - // console.log("presentAndVisible isExisting", selector, await elt.isExisting()) - // console.log("presentAndVisible isDisplayed", selector, await elt.isDisplayed()) const res = (await elt.isExisting()) && (await elt.isDisplayed()); - // console.log("res", selector, res); return res; } @@ -459,7 +369,6 @@ export class CalculatorPage { async findParentContainer(elt) { let i = 8; // garde fous while (((await elt.getAttribute("class")) !== "container") && (i >= 0)) { - // elt = await elt.$(".."); elt = await this.getParentElement(elt) i--; } @@ -491,12 +400,7 @@ export class CalculatorPage { async setParamMode(elt, mode: string) { await scrollToElement(elt); await browser.pause(100); - // // get parent (div.container) - // const container = await this.findParentContainer(elt); - // // find radio buttons - // const button = await container.$("mat-button-toggle.radio_" + mode + " > button"); const button = await this.getInputRadioButton(elt, mode); - //await scrollPageToTop(); // sometimes button slides behind navbar and click() fails await button.click(); // for "var" mode, close the modal if (mode === "var") { @@ -510,28 +414,6 @@ export class CalculatorPage { } } - async setParamMode2(paramFieldLine, mode: string) { - // await elt.scrollIntoView({ block: 'center', inline: 'center' }); - // await paramFieldLine.waitForDisplayed(); - // await paramFieldLine.scrollIntoView({ block: 'center' }); - - // browser.executeScript("document.querySelector('#countries').scrollIntoView()") - //await browser.execute(e => { e.scrollIntoView({ block: 'center' }) }, paramFieldLine); - await scrollToElement(paramFieldLine); - // await browser.pause(100); - // get parent (div.container) - const button = await paramFieldLine.$("mat-button-toggle.radio_" + mode + " > button"); - //await scrollPageToTop(); // sometimes button slides behind navbar and click() fails - await button.click(); - // for "var" mode, close the modal - if (mode === "var") { - await browser.pause(500); // wait for the modal to appear - //await element(by.css("dialog-edit-param-values .mat-dialog-actions button")).click(); // clique "annuler" et non "valider" : - await $("dialog-edit-param-values .mat-dialog-actions button.mat-warn").click(); - await browser.pause(500); // wait for the navbar to reappear after modal dismissal - } - } - /** * @param elt an <input> element */ @@ -552,7 +434,6 @@ export class CalculatorPage { const values = {}; for (const i of inputs) { const inputId = await i.getAttribute("id"); - // const inputValue = await i.getAttribute("value"); const inputValue = await i.getValue(); values[inputId] = +inputValue; // cast to number to avoid false negative (integers starting with 0) }; @@ -571,7 +452,6 @@ export class CalculatorPage { const isN = id.includes("_N"); // @TODO strengthen this clodo test // Ob in Grille is set to 0.5 but cannot exceed 0.58; do not touch it const isOb = id === "Ob"; - // const value = await i.getAttribute("value"); const value = await i.getValue(); const hasDot = value.includes("."); const hasExponent = value.includes("e"); @@ -593,7 +473,6 @@ export class CalculatorPage { */ async checkEmptyInput(id: string, empty: boolean = true) { const inp = await this.getInputById(id); - // const val = inp.getAttribute("value"); const val = await inp.getValue() if (empty) { expect(val).toEqual(""); @@ -612,7 +491,6 @@ export class CalculatorPage { let n = 0; for (const id of inputIds) { const inp = await this.getInputById(id); - // const txt = await inp.getAttribute("value"); const txt = await inp.getValue(); expect(txt === "").toEqual(emptys[n]); n++; @@ -639,7 +517,6 @@ export class CalculatorPage { } async closeSnackBar() { - // const sb = $(".mat-simple-snackbar-action"); const sb = $("simple-snack-bar button"); if ((await sb.isExisting()) && (await sb.isDisplayed())) { await sb.click(); diff --git a/e2e/check-translations.e2e-spec.ts b/e2e/check-translations.e2e-spec.ts index cd06561de..0fa31f1fe 100644 --- a/e2e/check-translations.e2e-spec.ts +++ b/e2e/check-translations.e2e-spec.ts @@ -79,9 +79,7 @@ describe("ngHyd − check translation of all calculators", () => { } // check absence of "*** message not found" in whole DOM - // const source = document.body.innerHTML; const source = await browser.execute("return document.body.innerHTML"); - // expect(await browser.getSource()).not.toContain("*** message not found", "missing translations found"); expect(source).not.toContain("*** message not found", "missing translations found"); // empty session diff --git a/e2e/clone-all-calc.e2e-spec.ts b/e2e/clone-all-calc.e2e-spec.ts index 3520cd7d9..b7df34623 100644 --- a/e2e/clone-all-calc.e2e-spec.ts +++ b/e2e/clone-all-calc.e2e-spec.ts @@ -30,7 +30,6 @@ describe("ngHyd − clone all calculators with all possible <select> values", () await prefPage.navigateTo(); await prefPage.disableEvilEmptyFields(); await browser.pause(200); - await navBar.clickNewCalculatorButton(); }); @@ -64,12 +63,12 @@ describe("ngHyd − clone all calculators with all possible <select> values", () await scrollPageToTop(); await calcPage.clickCloneCalcButton(); await browser.pause(300); - + // check existence of the cloned module expect(await navBar.getAllCalculatorTabs().length).toBe(2); - + // @TODO check <select> values - + // read all <input> values and compare them to stored ones const cloneValues = await calcPage.storeAllInputValues(); for (const k in cloneValues) { diff --git a/e2e/clone-calc.e2e-spec.ts b/e2e/clone-calc.e2e-spec.ts index f52677838..e6eff73a3 100644 --- a/e2e/clone-calc.e2e-spec.ts +++ b/e2e/clone-calc.e2e-spec.ts @@ -76,11 +76,8 @@ describe("ngHyd − clone a calculator", () => { await browser.pause(500); // 5. compare values - // Object.keys(sourceValues).forEach(async (k) => { - // const v = sourceValues[k]; for (const k in sourceValues) { const v = sourceValues[k]; - // const displayedVal = await calcPage.getInputById(k).getAttribute("value"); const inp = await calcPage.getInputById(k); const displayedVal = await inp.getValue(); expect(displayedVal).toBe("" + v); diff --git a/e2e/examples-empty-fields.e2e-spec.ts b/e2e/examples-empty-fields.e2e-spec.ts index 2c619e644..5c3ea9628 100644 --- a/e2e/examples-empty-fields.e2e-spec.ts +++ b/e2e/examples-empty-fields.e2e-spec.ts @@ -52,10 +52,6 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on it("calculated parameter initial value when discharge law is modified", async () => { await newSession(navBar, sideNav); - // start page - // await navBar.clickNewCalculatorButton(); - // await browser.pause(200); - // open 1st example const examples = await $$("#examples-list .load-example"); await examples[0].click(); @@ -76,10 +72,7 @@ describe("ngHyd - Check that examples fields are not empty with 'empty fields on await browser.pause(200); // check input value is not null - // const input = await calcPage.getInputById("initval-input"); - // const underlyingInput = await input.$("#0_h1"); const underlyingInput = await $("ngparam-input input.form-control[id='0_h1']"); - // const txt = await underlyingInput.getAttribute("value"); const txt = await underlyingInput.getValue(); expect(txt === "").toEqual(false); }); @@ -109,10 +102,6 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea it("when calculation is run on a generated fish ladder calculator", async () => { await newSession(navBar, sideNav); - // start page - // await navBar.clickNewCalculatorButton(); - // await browser.pause(200); - // open 1st example const examples = await $$("#examples-list .load-example"); await examples[0].click(); diff --git a/e2e/helpers/GremlinHelper.ts b/e2e/helpers/GremlinHelper.ts index 434ffd860..99f9c19b6 100644 --- a/e2e/helpers/GremlinHelper.ts +++ b/e2e/helpers/GremlinHelper.ts @@ -18,7 +18,6 @@ function findFpsMessages(log: any[]) { } export function readGremlinsScript(): string { - // return readFileSync(__dirname + "/gremlins.min.js", "UTF-8"); return readFileSync(__dirname + "/gremlins.min.js", "utf-8"); } diff --git a/e2e/link-parallel-devices.e2e-spec.ts b/e2e/link-parallel-devices.e2e-spec.ts index b4d62ae25..5bae9aa32 100644 --- a/e2e/link-parallel-devices.e2e-spec.ts +++ b/e2e/link-parallel-devices.e2e-spec.ts @@ -41,7 +41,6 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( it("when creating Cloisons, devices should be linkable to one another", async () => { await newSession(navBar, sideNav); - // await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); await browser.pause(200); const addBtn = await calcPage.getAddStructureButton(); @@ -53,7 +52,6 @@ describe("ngHyd − parallel structures with multiple linked parameters − ", ( it("when creating Dever, devices should be linkable to one another", async () => { await newSession(navBar, sideNav); - // await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(9); await browser.pause(200); const addBtn = await calcPage.getAddStructureButton(); diff --git a/e2e/list.po.ts b/e2e/list.po.ts index 83e65b63e..8572f152d 100644 --- a/e2e/list.po.ts +++ b/e2e/list.po.ts @@ -46,7 +46,6 @@ export class ListPage { async clickMenuEntryForCalcType(type: number) { const but = await $("#create-calc-" + type); return await but.click(); - // await browser.execute(e => { e.click() }, but); // await but.click() fails with "element not interactable" error } async getCalcMenuTextForCalcType(type: number): Promise<string> { diff --git a/e2e/load-linked-params.e2e-spec.ts b/e2e/load-linked-params.e2e-spec.ts index 02d856f7f..cb55bcb06 100644 --- a/e2e/load-linked-params.e2e-spec.ts +++ b/e2e/load-linked-params.e2e-spec.ts @@ -84,14 +84,12 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { * nghyd#551 */ const inpZ2 = await calcPage.getInputById("Z2"); - // expect(await inpZ2.getAttribute("value")).toEqual(""); expect(await inpZ2.getValue()).toEqual(""); // const lo_l = calcPage.getSelectById("1_linked_L"); // const lo_lv = await calcPage.getSelectValueText(lo_l); // expect(lo_lv).toContain("Largeur au miroir (Sec. param.)"); const inpL = await calcPage.getInputById("1_L"); - // expect(await inpL.getAttribute("value")).toEqual(""); expect(await inpL.getValue()).toEqual(""); const lo_w = await calcPage.getSelectById("2_linked_W"); @@ -107,7 +105,6 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { // const lo_brv = await calcPage.getSelectValueText(lo_br); // expect(lo_brv).toContain("Largeur au miroir (Sec. param.)"); const inpBR = await calcPage.getInputById("BR"); - // expect(await inpBR.getAttribute("value")).toEqual(""); expect(await inpBR.getValue()).toEqual(""); }); }); diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 3ddf46ce7..405f779b0 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -79,7 +79,6 @@ describe("ngHyd − save and load sessions", () => { beforeEach(() => { jasmine.DEFAULT_TIMEOUT_INTERVAL = 45 * 60 * 1000; // 45 min - // browser.manage().window().setPosition(2000, 30); }); it("when loading session-6-calc.test.json file from home page, 6 calculators should be loaded", async () => { @@ -113,10 +112,7 @@ describe("ngHyd − save and load sessions", () => { await changeSelectValue(await calcPage.getSelectById("select_section"), 2); // mode "trapezoidal" const inpKs = await calcPage.getInputById("Ks"); - // await inpKs.clearValue(); // coefficient de Strickler - // await browser.pause(200); await inpKs.setValue("42"); - // await browser.pause(200); const filename = await saveSession(); await browser.pause(500); @@ -135,7 +131,6 @@ describe("ngHyd − save and load sessions", () => { await browser.pause(200); const calcTypes = await listPage.getAvailableCalcTypes(); - // const calcTypes = [10]; const excludedCalculators = [ 34, // vérificateur (nécessite d'ouvrir plusieurs calculettes) @@ -170,7 +165,6 @@ describe("ngHyd − save and load sessions", () => { const selects = await calcPage.getAllCalculatorSelects(); const nsel = selects.length; for (let s = 0; s < nsel; s++) { - // const sel = selects.get(s); const sel = selects[s]; const selId = await sel.getAttribute("id"); diff --git a/e2e/navbar.po.ts b/e2e/navbar.po.ts index 3e9d2ceea..f1fa0a1e5 100644 --- a/e2e/navbar.po.ts +++ b/e2e/navbar.po.ts @@ -18,12 +18,9 @@ export class Navbar { await dropDown.click(); browser.pause(100); const options = await $$(".cdk-overlay-container mat-option"); - // FIXME>>>>await dropDown.sendKeys(protractor.Key.ESCAPE); // close dropdown - //await dropDown.keys('Escape'); // close dropdown await browser.keys(Key.Escape); // close dropdown return options.length; } else { - // return (await $$("#tabs-container button.calculator-button")).length; return (await this.getAllCalculatorTabs()).length; } } @@ -63,9 +60,6 @@ export class Navbar { async clickCalculatorTab(n: number) { const tabs = await this.getAllCalculatorTabs(); - // await (await tabs.n).click(); - - // await tabs[n].click(); await browser.execute(e => { e.click() }, tabs[n]); // await tabs[n].click() fails with "element not interactable" error } @@ -79,7 +73,6 @@ export class Navbar { const l = tabs.length; const r = Math.min((Math.floor(Math.random() * l)), (l - 1)); - //await tabs[r].click(); await browser.execute(e => { e.click() }, tabs[r]); // await tabs[r].click() fails with "element not interactable" error } @@ -89,7 +82,6 @@ export class Navbar { */ async middleClickCalculatorTab(n: number, confirmCloseDialog: boolean = true) { const calcTabs = await this.getAllCalculatorTabs(); - // FIXME>>>> await browser.actions().click(calcTabs.get(n), Button.MIDDLE).perform(); await calcTabs[n].click({ button: 'middle' }); if (confirmCloseDialog) { const btns = await $$("dialog-confirm-close-calc .mat-dialog-actions button"); diff --git a/e2e/navigate-through-calculators.e2e-spec.ts b/e2e/navigate-through-calculators.e2e-spec.ts index 85f0d0c53..6e4e7ae79 100644 --- a/e2e/navigate-through-calculators.e2e-spec.ts +++ b/e2e/navigate-through-calculators.e2e-spec.ts @@ -34,7 +34,6 @@ describe("ngHyd − create calculators and navigate among them", () => { await browser.pause(200); // test all form labels const labels = await calculatorPage.getInputLabels(); - //await labels.each(async (l) => { for (const l of labels) { const label = await l.getText(); expect(label.length).toBeGreaterThan(0); diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 21b75dac9..acdab5e0b 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -61,10 +61,8 @@ describe("ngHyd − Passe à Bassins", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(12); const c_Z1 = await calcPage.getInputById("Z1"); - // await c_Z1.clearValue(); await c_Z1.setValue("78.27"); const c_Z2 = await calcPage.getInputById("Z1"); - // await c_Z2.clearValue(); await c_Z2.setValue("74.86"); // PAB - nombre @@ -84,13 +82,10 @@ describe("ngHyd − Passe à Bassins", () => { const d_V = await calcPage.getInputById("V"); await calcPage.setParamMode(d_V, "cal"); const d_Y = await calcPage.getInputById("Y"); - // await d_Y.clearValue(); await d_Y.setValue("1.5"); const d_L = await calcPage.getInputById("L"); - // await d_L.clearValue(); await d_L.setValue("3.100"); const d_W = await calcPage.getInputById("W"); - // await d_W.clearValue(); await d_W.setValue("2.5"); // PAB - puissance dissipée (volume) @@ -118,7 +113,6 @@ describe("ngHyd − Passe à Bassins", () => { const cl_Z1 = await calcPage.getInputById("Z1"); await calcPage.setParamMode(cl_Z1, "link"); const cl_PB = await calcPage.getInputById("PB"); - // await cl_PB.clearValue(); await cl_PB.setValue("1.5"); // calculate Cloisons @@ -135,7 +129,6 @@ describe("ngHyd − Passe à Bassins", () => { await genButton.click(); await browser.pause(1000); const nbBassins = await calcPage.getInputById("generatePabNbBassins"); - // await nbBassins.clearValue(); await nbBassins.setValue("9"); // click "Generate" @@ -167,7 +160,6 @@ describe("ngHyd − Passe à Bassins", () => { await newSession(navBar, sideNav); // create many Cloisons - // await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(10); @@ -176,13 +168,10 @@ describe("ngHyd − Passe à Bassins", () => { // choose one of them and change its parameters await navBar.clickCalculatorTab(1); const Z1 = await calcPage.getInputById("Z1"); - // await Z1.clearValue(); await Z1.setValue("114"); const LB = await calcPage.getInputById("LB"); - // await LB.clearValue(); await LB.setValue("11.5"); const DH = await calcPage.getInputById("DH"); - // await DH.clearValue(); await DH.setValue("0.72"); // calculate Cloisons @@ -198,22 +187,15 @@ describe("ngHyd − Passe à Bassins", () => { await browser.pause(1000); const debit = await calcPage.getInputById("generatePabDebit"); expect(await debit.getValue()).toBe("0.564"); - // await debit.clearValue(); - // await browser.pause(300); // send "1.6" in 3 movements, because "." triggers an error and Angular can't cope with the subsequent keys await debit.setValue("1"); - // await browser.pause(50); await debit.addValue("."); - // await browser.pause(50); await debit.addValue("6"); - // await browser.pause(50); const coteAmont = await calcPage.getInputById("generatePabCoteAmont"); expect(await coteAmont.getValue()).toBe("114"); - // await coteAmont.clearValue(); await coteAmont.setValue("115"); const nbBassins = await calcPage.getInputById("generatePabNbBassins"); expect(await nbBassins.getValue()).toBe("6"); - // await nbBassins.clearValue(); await nbBassins.setValue("5"); // click "Generate" diff --git a/e2e/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index f1dff3784..1abbb2032 100644 --- a/e2e/parallel-structures.e2e-spec.ts +++ b/e2e/parallel-structures.e2e-spec.ts @@ -46,7 +46,6 @@ describe("Check calculated parameter remains the same when copying a structure", // copy 1st structure const copyStruct = await calcPage.getCopyStructureButton(); - // await copyStruct.click(); await browser.execute(e => { e.click() }, copyStruct); // await copyStruct.click() fails with "element not interactable" error await browser.pause(200); diff --git a/e2e/predam-empty-fields.e2e-spec.ts b/e2e/predam-empty-fields.e2e-spec.ts index 0915297ae..66ad0806c 100644 --- a/e2e/predam-empty-fields.e2e-spec.ts +++ b/e2e/predam-empty-fields.e2e-spec.ts @@ -50,7 +50,6 @@ describe("ngHyd − check that predam fields are empty", () => { // check walls inputs const walls = await $$("g.node.wall"); expect(walls.length).toEqual(2); - // await walls.each(async (w) => { for (const w of walls) { await w.click(); await browser.pause(200); @@ -80,13 +79,11 @@ describe("ngHyd − check that predam fields are empty", () => { // check "surface" input is empty let inp = await calcPage.getInputById("3_S"); - // let txt = await inp.getAttribute("value"); let txt = await inp.getValue(); expect(txt).toEqual(""); // check "cote de fond" input is empty inp = await calcPage.getInputById("3_ZF"); - // txt = await inp.getAttribute("value"); txt = await inp.getValue(); expect(txt).toEqual(""); }); @@ -112,14 +109,12 @@ describe("ngHyd − check that predam fields are empty", () => { // check L input is empty inp = await calcPage.getInputById("0_L"); - // txt = await inp.getAttribute("value"); txt = await inp.getValue(); expect(txt).toEqual(""); // check CdWSL input is empty (in this case, the structure happens to be a Larinier weir // which discharge coefficient must be empty) inp = await calcPage.getInputById("0_CdWSL"); - // txt = await inp.getAttribute("value"); txt = await inp.getValue(); expect(txt).toEqual(""); }); diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index 85b7b5951..11326ca7b 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -26,8 +26,6 @@ describe("check that low iteration count leads to log messages", () => { }); it("", async () => { - // browser.manage().window().setPosition(2000, 30); - // set low iteration count await prefPage.setIterationCount(5); @@ -35,7 +33,7 @@ describe("check that low iteration count leads to log messages", () => { await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(30); await browser.pause(200); - + // run calculation const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); diff --git a/e2e/preferences.e2e-spec.ts b/e2e/preferences.e2e-spec.ts index 0e09c1128..761ab3ae1 100644 --- a/e2e/preferences.e2e-spec.ts +++ b/e2e/preferences.e2e-spec.ts @@ -23,7 +23,6 @@ describe("ngHyd − preferences page", () => { it("when preferences are open, no label should be empty", async () => { const labels = await page.getInputLabels(); - // await labels.each(async (l) => { for (const l of labels) { const label = await l.getText(); expect(label.length).toBeGreaterThan(0); @@ -32,10 +31,8 @@ describe("ngHyd − preferences page", () => { it("when preferences are open, no input field should be empty", async () => { const numericFields = await page.getNumericFormFields(); - // await numericFields.each(async (nf) => { for (const nf of numericFields) { const input = await page.getInputForField(nf); - // const val = await input.getAttribute("value"); const val = await input.getValue(); expect(val).toBeTruthy(); }; @@ -43,24 +40,18 @@ describe("ngHyd − preferences page", () => { it("when erroneous values are input, errors should appear", async () => { const numericFields = await page.getNumericFormFields(); - // await numericFields.each(async (nf) => { for (const nf of numericFields) { const inp = await page.getInputForField(nf); // add a letter after the numerical value - // await page.getInputForField(nf).addValue("d"); await inp.addValue("d"); let errorField = await page.getErrorsForField(nf); expect(await errorField.isExisting()).toBe(true); // empty input - // await page.getInputForField(nf).clearValue(); await inp.clearValue(); - // expect(page.getErrorsForField(nf).isExisting()).toBe(true); errorField = await page.getErrorsForField(nf); expect(await errorField.isExisting()).toBe(true); // send bad value - // await page.getInputForField(nf).setValue("50000"); await inp.setValue("50000"); - // expect(page.getErrorsForField(nf).isExisting()).toBe(true); errorField = await page.getErrorsForField(nf); expect(await errorField.isExisting()).toBe(true); }; @@ -68,15 +59,11 @@ describe("ngHyd − preferences page", () => { it("when correct values are input, errors should disappear", async () => { const numericFields = await page.getNumericFormFields(); - // await numericFields.each(async (nf) => { for (const nf of numericFields) { // send correct value const inp = await page.getInputForField(nf); - // await page.getInputForField(nf).clearValue(); - // await page.getInputForField(nf).setValue("1"); await inp.setValue("1"); const errorField = await page.getErrorsForField(nf); - // expect(page.getErrorsForField(nf).isExisting()).toBe(false); expect(await errorField.isExisting()).toBe(false); }; }); diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index ea4429794..4a3a5755c 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -82,7 +82,6 @@ export class PreferencesPage { async setIterationCount(n: number) { const input = await this.getInputFromName("nmi"); - // input.clearValue(); await input.setValue(n.toString()); } } diff --git a/e2e/pressure-loss.e2e-spec.ts b/e2e/pressure-loss.e2e-spec.ts index e4d6e530c..1e8d1e21f 100644 --- a/e2e/pressure-loss.e2e-spec.ts +++ b/e2e/pressure-loss.e2e-spec.ts @@ -49,8 +49,6 @@ describe("Pressure loss - ", () => { }); it("Strickler", async () => { - // browser.manage().window().setPosition(2000, 30); - // open "pressure loss" calculator await navBar.clickNewCalculatorButton(); await listPage.clickMenuEntryForCalcType(35); diff --git a/e2e/reset-param-mode.e2e-spec.ts b/e2e/reset-param-mode.e2e-spec.ts index d5e85ef80..1a1c7ac6f 100644 --- a/e2e/reset-param-mode.e2e-spec.ts +++ b/e2e/reset-param-mode.e2e-spec.ts @@ -17,8 +17,6 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { beforeAll(() => { listPage = new ListPage(); - // navBar = new Navbar(); - // sideNav = new SideNav(); calcPage = new CalculatorPage(); }); @@ -32,13 +30,11 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { await browser.pause(200); // click "calc" radio on Z1 parameter - // const z1calcbtn = await $("#mat-button-toggle-3"); const z1calcbtn = await calcPage.getInputRadioButtonFromId("Z1", "cal"); await z1calcbtn.click(); await browser.pause(200); // click "var" radio on Z1 parameter - // const z1varbtn = await $("#mat-button-toggle-2"); const z1varbtn = await calcPage.getInputRadioButtonFromId("Z1", "var"); await z1varbtn.click(); await browser.pause(200); @@ -49,11 +45,9 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { await browser.pause(500); // check Z1 var toggle is not checked - // expect(await z1varbtn.getASttribute("ng-reflect-checked")).toBe("false"); expect(await calcPage.isRadioButtonChecked(z1varbtn)).toEqual(false); // check Z1 calc toggle is checked - // expect(await z1calcbtn.getAttribute("ng-reflect-checked")).toBe("true"); expect(await calcPage.isRadioButtonChecked(z1calcbtn)).toEqual(true); }); @@ -61,26 +55,19 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { // start page await listPage.navigateTo(); await browser.pause(300); - // await newSession(navBar, sideNav); // open PAB calculator await listPage.clickMenuEntryForCalcType(15); await browser.pause(500); // "fixed" radio on Q parameter - // const qfixbtn = await $("#mat-button-toggle-1"); const qfixbtn = await calcPage.getInputRadioButtonFromId("Q", "fix"); - // await browser.pause(50); // "var" radio on Z1 parameter - // const z1varbtn = await $("#mat-button-toggle-6"); const z1varbtn = await calcPage.getInputRadioButtonFromId("Z1", "var"); - // await browser.pause(50); // "calc" radio on Z1 parameter - // const z1calcbtn = await $("#mat-button-toggle-7"); const z1calcbtn = await calcPage.getInputRadioButtonFromId("Z1", "cal"); - // await browser.pause(50); // click "var" radio on Z1 parameter await z1varbtn.click(); @@ -92,11 +79,9 @@ describe("ngHyd - check parameter mode is set to its previous value - ", () => { await browser.pause(500); // check Q fix toggle is checked - // expect(await qfixbtn.getAttribute("ng-reflect-checked")).toBe("true"); expect(await calcPage.isRadioButtonChecked(qfixbtn)).toEqual(true); // check Z1 calc toggle is checked - // expect(await z1calcbtn.getAttribute("ng-reflect-checked")).toBe("true"); expect(await calcPage.isRadioButtonChecked(z1calcbtn)).toEqual(true); }); }); diff --git a/e2e/reset-results.e2e-spec.ts b/e2e/reset-results.e2e-spec.ts index 5811449db..210e11a2c 100644 --- a/e2e/reset-results.e2e-spec.ts +++ b/e2e/reset-results.e2e-spec.ts @@ -32,10 +32,7 @@ describe("Check results are reset after application settings modification - ", ( async function runTestWithParameter(param: string, val1: number, val2: number) { // set starting compute precision const input = await prefPage.getInputFromName(param); - // await input.clearValue(); - // await browser.pause(20); await input.setValue(val1.toString()); - // await browser.pause(200); // open "fish ladder: fall" calculator await navBar.clickNewCalculatorButton(); @@ -59,8 +56,6 @@ describe("Check results are reset after application settings modification - ", ( await browser.pause(200); // modify compute precision - // await input.clearValue(); - // await browser.pause(20); await input.setValue(val2.toString()); await browser.pause(500); diff --git a/e2e/sidenav.po.ts b/e2e/sidenav.po.ts index e7e79bbe2..ab5b15961 100644 --- a/e2e/sidenav.po.ts +++ b/e2e/sidenav.po.ts @@ -23,7 +23,6 @@ export class SideNav { getFileInput() { return $(`dialog-load-session input[type="file"]`); - // return $(`dialog-load-session ngx-mat-file-input`); } getFileLoadButton() { @@ -52,7 +51,6 @@ export class SideNav { async clickNewSessionButton() { const ncb = await this.getNewSessionButton(); - // await browser.pause(200); await ncb.click(); await browser.pause(200); const cb = await this.getConfirmNewSessionButton(); @@ -62,11 +60,7 @@ export class SideNav { async loadSessionFile(file: string, click: boolean = true) { const absolutePath = path.resolve(__dirname, file); const input = await this.getFileInput(); - // await input.click(); - // await scrollToElement(input) - // await input.setValue(absolutePath); await input.addValue(absolutePath); - // await browser.pause(500); if (click) { const btn = await this.getFileLoadButton(); await btn.click(); diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index 1aa86e1dd..ee4008a1f 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -47,10 +47,8 @@ describe("Solveur - ", () => { await navBar.clickCalculatorTab(3); // n°3 should be the latest // check input values - // expect(await calcPage.getInputById("Xinit").getAttribute("value")).toBe("0.5"); const inpXinit = await calcPage.getInputById("Xinit"); expect(await inpXinit.getValue()).toBe("0.5"); - // expect(await calcPage.getInputById("Ytarget").getAttribute("value")).toBe("252"); const inpYtarget = await calcPage.getInputById("Ytarget"); expect(await inpYtarget.getValue()).toBe("252"); // check Nub to calculate @@ -86,8 +84,6 @@ describe("Solveur - ", () => { await newSession(navBar, sideNav); // 1. create empty Solveur - // await listPage.clickMenuEntryForCalcType(22); // Solveur - // await browser.pause(500); openCalculator(22, navBar, listPage); // 2. create PAB:Chute, PAB:Nombre and PAB:Puissance linked to one another @@ -274,9 +270,6 @@ describe("Solveur - nghyd#601 with empty fields option", () => { it("check removing and recreating solver with empty fields option does not fill target parameter input", async () => { await newSession(navBar, sideNav); - // await navBar.clickNewCalculatorButton(); - // await browser.pause(200); - // open "channel flow with hydraulic structures" example const examples = await $$("#examples-list .load-example"); await examples[1].click(); @@ -317,14 +310,6 @@ describe("Solveur - nghyd#601 without empty fields option", () => { sideNav = new SideNav(); }); - // async function openCalculator(id: number) { - // await navBar.clickNewCalculatorButton(); - // await browser.pause(200); - - // await listPage.clickMenuEntryForCalcType(id); - // await browser.pause(200); - // } - async function openSolver() { await openCalculator(22, navBar, listPage); } @@ -377,9 +362,6 @@ describe("Solveur - nghyd#601 without empty fields option", () => { it("check removing and recreating solver without empty fields option fills inputs", async () => { await newSession(navBar, sideNav); - // await navBar.clickNewCalculatorButton(); - // await browser.pause(200); - // open "channel flow with hydraulic structures" example const examples = await $$("#examples-list .load-example"); await examples[1].click(); @@ -447,14 +429,6 @@ describe("Solveur - nghyd#606 - a single module cannot be used with solver", () sideNav = new SideNav(); }); - // async function openCalculator(id: number) { - // await navBar.clickNewCalculatorButton(); - // await browser.pause(200); - - // await listPage.clickMenuEntryForCalcType(id); - // await browser.pause(200); - // } - async function openSolver() { await openCalculator(22, navBar, listPage); } diff --git a/e2e/translation.e2e-spec.ts b/e2e/translation.e2e-spec.ts index 93bcb3f48..d87a45a7b 100644 --- a/e2e/translation.e2e-spec.ts +++ b/e2e/translation.e2e-spec.ts @@ -29,7 +29,6 @@ describe("Check translation", () => { await prefPage.navigateTo(); await prefPage.changeLanguage(1); // fr - // await browser.pause(200); // open "fish ladder: fall" calculator await navBar.clickNewCalculatorButton(); @@ -55,7 +54,6 @@ describe("Check translation", () => { // fixed results variables const frr = await calcPage.getAllFixedResultsRows(); let row0 = frr[0]; - // let lbl1 = await frr.$$("td")[0].getText(); let lbl1 = await row0.$("td").getText(); expect(lbl1).toEqual("Cote amont (m)"); @@ -69,11 +67,6 @@ describe("Check translation", () => { // *** results in english *** // setup -> english - // await navBar.clickMenuButton(); - // await browser.pause(200); - // const setupBtn = await sideNav.getSetupButton(); - // await setupBtn.click(); - // await browser.pause(200); await prefPage.navigateTo(); await prefPage.changeLanguage(0); // en await browser.pause(200); @@ -90,7 +83,6 @@ describe("Check translation", () => { // fixed results variables row0 = frr[0]; - // lbl1 = await frr.$$("td")[0].getText(); lbl1 = await row0.$("td").getText(); expect(lbl1).toEqual("Upstream elevation (m)"); diff --git a/e2e/util.po.ts b/e2e/util.po.ts index 6e3d63c2e..ffe2d1806 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -7,8 +7,6 @@ import { ListPage } from './list.po'; * scroll page to make element visible */ export async function scrollToElement(elem) { - // await browser.execute("arguments[0].scrollIntoView({ block: 'center' });", elem); - // await browser.pause(50); await browser.execute(e => { e.scrollIntoView({ block: 'center' }) }, elem); await browser.pause(100); } @@ -18,7 +16,6 @@ export async function scrollToElement(elem) { */ export async function scrollPageToTop() { await browser.execute("window.scrollTo(0, 0);"); - // await browser.scroll(0, 0); } /** diff --git a/e2e/valeurs-erronees.e2e-spec.ts b/e2e/valeurs-erronees.e2e-spec.ts index 5f2ca99b4..2e88357fc 100644 --- a/e2e/valeurs-erronees.e2e-spec.ts +++ b/e2e/valeurs-erronees.e2e-spec.ts @@ -33,11 +33,7 @@ describe("ngHyd - check invalid values are removed - ", () => { // modify W input with invalid value const inputW = await calcPage.getInputById("W"); - // await browser.pause(200); - // await inputW.clearValue(); - // await browser.pause(200); await inputW.setValue("-1"); - // await browser.pause(200); // open another calculator await navBar.clickNewCalculatorButton(); @@ -49,9 +45,7 @@ describe("ngHyd - check invalid values are removed - ", () => { await browser.pause(200); // check invalid value is removed - // const w = await inputW.getAttribute("value"); const w = await inputW.getValue(); - // await browser.pause(200); expect(w).toEqual(""); // check that "compute" button is disabled diff --git a/e2e/variable-param-cancel.e2e-spec.ts b/e2e/variable-param-cancel.e2e-spec.ts index 534e3cc9c..fedb54603 100644 --- a/e2e/variable-param-cancel.e2e-spec.ts +++ b/e2e/variable-param-cancel.e2e-spec.ts @@ -17,7 +17,6 @@ describe("ngHyd - check cancel button for variable parameters - ", () => { }); it("when min/max/list values dialog opens, a cancel button should be present", async () => { - debugger // start page await listPage.navigateTo(); await browser.pause(200); @@ -27,7 +26,6 @@ describe("ngHyd - check cancel button for variable parameters - ", () => { await browser.pause(200); // click "var" radio on Z1 parameter - // const z1btn = $("#mat-button-toggle-2-button"); const z1btn = await calcPage.getInputRadioButtonFromId("Z1", "var"); await z1btn.click(); await browser.pause(300); -- GitLab From 7fcea473a2b67e60843ab3e7e68502579986e7c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 26 Apr 2023 11:18:35 +0200 Subject: [PATCH 15/25] test(e2e): gitlabCI: temporarily enable tests on pushes refs #618 --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 92811cedb..50693bbe4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -72,6 +72,7 @@ install: test: stage: test only: + - pushes - tags - schedules - web -- GitLab From b7a5427eba3f39f35a4d97e03ef5ae2ba1da931a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 28 Apr 2023 15:00:03 +0200 Subject: [PATCH 16/25] chore(e2e): fix e2e tests execution in Docker container refs #618 --- package.json | 6 +++--- wdio.conf.ts | 13 +++++++++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 7ae470fe7..bb4e6c97b 100644 --- a/package.json +++ b/package.json @@ -9,16 +9,16 @@ "license": "MIT", "scripts": { "ng": "cd . && \"node_modules/.bin/ng\"", - "postinstall": "./node_modules/.bin/webdriver-manager update --gecko=false --versions.chrome=83.0.4103.39", + "postinstall": "./node_modules/.bin/webdriver-manager update --gecko=false --versions.chrome=107.0.5304.110", "lint": "eslint -c .eslintrc.js --ext .ts src", - "e2e": "npm run preprocess && npm run e2equick", + "e2e": "node scripts/check-translations.js && { npm run start & sleep 60 ; } && ./node_modules/.bin/wdio run ./wdio.conf.ts", "e2equick": "node scripts/check-translations.js && ./node_modules/.bin/wdio run ./wdio.conf.ts", "monkeytest": "npm run ng -- e2e --dev-server-target= --suite=monkeyTest --webdriver-update=false", "mkdocs": "bash scripts/prepare_mkdocs.sh; cd build; python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && cd .. && node scripts/mkdocs-postprocess.js", "mkdocs2pdf": "node scripts/extract-nghyd-version.js build/cassiopee_version.tex && python3 scripts/mkdocs2pdf.py && node scripts/mkdocs2pdf-postprocess.js", "clean": "rm -rf build dist release src/date_revision.ts src/assets/docs", "preprocess": "mkdir -p build; node scripts/preprocessors.js; npm run service-worker-version; bash scripts/fix-chartjs-plugin-zoom-2.0.0.sh", - "start": "npm run preprocess && npm run mkdocs && npm run ng serve -- --host 0.0.0.0 --poll 5000", + "start": "npm run preprocess && npm run mkdocs && npm run ng serve -- --host 127.0.0.1 --poll 5000", "build-no-pdf": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production", "build": "npm run build-href -basehref=/", "build-href": "npm run preprocess && npm run mkdocs && npm run ng build -- --configuration production --base-href=$npm_config_basehref && npm run mkdocs2pdf", diff --git a/wdio.conf.ts b/wdio.conf.ts index f66acf321..5175e1e84 100644 --- a/wdio.conf.ts +++ b/wdio.conf.ts @@ -61,9 +61,10 @@ export const config: Options.Testrunner = { // Sauce Labs platform configurator - a great tool to configure your capabilities: // https://saucelabs.com/platform/platform-configurator // + // args: ['--headless', '--verbose', '--headless=new', '--verbose', '--no-gpu', '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--remote-debugging-port=9515', '--whitelisted-ips='], capabilities: [{ 'goog:chromeOptions': { - args: ['--headless'], + args: ['--headless', '--no-sandbox', '--disable-setuid-sandbox'], }, // maxInstances can get overwritten per capability. So if you have an in-house Selenium @@ -127,7 +128,15 @@ export const config: Options.Testrunner = { // Services take over a specific job you don't want to take care of. They enhance // your test setup with almost no effort. Unlike plugins, they don't add new // commands. Instead, they hook themselves up into the test process. - services: ['chromedriver'], + // args: ["--verbose", "--whitelisted-ips="] + services: [ + ['chromedriver', + { + chromedriverCustomPath: "/usr/bin/chromedriver", + args: ["--whitelisted-ips=127.0.0.1"] + } + ] + ], // Framework you want to run your specs with. // The following are supported: Mocha, Jasmine, and Cucumber -- GitLab From 40570fcd71de4649cd95f832e9d80efcaa9d4b14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 10 May 2023 13:46:26 +0200 Subject: [PATCH 17/25] test(e2e): fix failing tests refs #618 --- e2e/calculate-all-params.e2e-spec.ts | 2 +- e2e/calculate-button-validation.e2e-spec.ts | 12 ++++++------ e2e/calculator.po.ts | 6 +++--- e2e/check-translations.e2e-spec.ts | 2 +- e2e/clone-all-calc.e2e-spec.ts | 1 + e2e/compute-reset-chained-links.e2e-spec.ts | 12 ++++++------ e2e/cote-amont-aval-bief.e2e-spec.ts | 5 +++-- e2e/diagramme-modules.e2e-spec.ts | 2 +- e2e/examples-empty-fields.e2e-spec.ts | 8 ++++---- e2e/list.po.ts | 2 +- e2e/load-linked-params.e2e-spec.ts | 2 +- e2e/load-malformed-files.e2e-spec.ts | 8 ++++---- e2e/load-save-session.e2e-spec.ts | 18 +++++++++++++----- e2e/navbar.po.ts | 2 +- e2e/notes.e2e-spec.ts | 10 +++++----- e2e/pab-cloisons-empty-fields.e2e-spec.ts | 8 ++++---- e2e/pab.e2e-spec.ts | 5 +++-- e2e/remous.e2e-spec.ts | 2 +- e2e/reset-results.e2e-spec.ts | 7 +++++-- e2e/solveur.e2e-spec.ts | 2 +- e2e/util.po.ts | 2 +- wdio.conf.ts | 10 ++++++++-- 22 files changed, 74 insertions(+), 54 deletions(-) diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index 744c83877..9b712dac3 100644 --- a/e2e/calculate-all-params.e2e-spec.ts +++ b/e2e/calculate-all-params.e2e-spec.ts @@ -65,7 +65,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { if (ct === 30 && i > 0) { // prevents "Element is not clickable at point" await scrollPageToTop(); - const inputLink = $("#pb-data-results-selector .drs-item a"); + const inputLink = await $("#pb-data-results-selector .drs-item a"); await inputLink.click(); } // grab input again because calculating the module just refreshed all the fieldsets diff --git a/e2e/calculate-button-validation.e2e-spec.ts b/e2e/calculate-button-validation.e2e-spec.ts index a0634d81a..537b49f30 100644 --- a/e2e/calculate-button-validation.e2e-spec.ts +++ b/e2e/calculate-button-validation.e2e-spec.ts @@ -42,7 +42,7 @@ describe("Calculate button - ", () => { await browser.pause(200); // fill width field with invalid data - const inputW = calcPage.getInputById("W"); + const inputW = await calcPage.getInputById("W"); await inputW.clearValue(); await browser.pause(20); await inputW.setValue("-1"); @@ -77,7 +77,7 @@ describe("Calculate button - ", () => { await browser.pause(200); // Q input - const inputQ = $("#Q"); + const inputQ = await $("#Q"); await inputQ.clearValue(); await browser.pause(200); await inputQ.setValue("-1"); @@ -88,7 +88,7 @@ describe("Calculate button - ", () => { // upstream item // look for g element with id starting by "flowchart-amont-" // Mermaid changed the way ids are generated, it preprends "flowchart-" and appends a number to the id given in the graph description - const upstream = $("g[id^='flowchart-amont-']"); + const upstream = await $("g[id^='flowchart-amont-']"); // should be displayed in error expect(await upstream.getAttribute('class')).toContain("node-highlighted-error"); // upstream item is now selected by default (was 'node-error') }); @@ -103,17 +103,17 @@ describe("Calculate button - ", () => { await browser.pause(200); // "add basin" button - const addBasinBtn = $("#add-basin"); + const addBasinBtn = await $("#add-basin"); await addBasinBtn.click(); await browser.pause(200); // upstream item - const upstream = $("g[id^='flowchart-amont-']"); // Mermaid generated id + const upstream = await $("g[id^='flowchart-amont-']"); // Mermaid generated id await upstream.click(); await browser.pause(200); // invalid data in Q input - const inputQ = $("#Q"); + const inputQ = await $("#Q"); await inputQ.clearValue(); await browser.pause(200); await inputQ.setValue("-1"); diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 845251555..3e0ce126b 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -44,7 +44,7 @@ export class CalculatorPage { if ((await sel.isExisting()) && (await sel.isDisplayed())) { await sel.click(); - const options = $$(".cdk-overlay-container mat-option"); + const options = await $$(".cdk-overlay-container mat-option"); await browser.keys(Key.Escape); // close dropdown return await options.length; } @@ -101,7 +101,7 @@ export class CalculatorPage { } async isMatSelectPresent(id: string) { - const sel = $("mat-select#" + id); + const sel = await $("mat-select#" + id); return await sel.isExisting(); } @@ -517,7 +517,7 @@ export class CalculatorPage { } async closeSnackBar() { - const sb = $("simple-snack-bar button"); + const sb = await $("simple-snack-bar button"); if ((await sb.isExisting()) && (await sb.isDisplayed())) { await sb.click(); return true; diff --git a/e2e/check-translations.e2e-spec.ts b/e2e/check-translations.e2e-spec.ts index 0fa31f1fe..97f01714a 100644 --- a/e2e/check-translations.e2e-spec.ts +++ b/e2e/check-translations.e2e-spec.ts @@ -67,7 +67,7 @@ describe("ngHyd − check translation of all calculators", () => { // just click the "compute" button with default values // check that "compute" button is active - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); const disabledState = await calcButton.getAttribute("disabled"); if (!disabledState) { // click "compute" button diff --git a/e2e/clone-all-calc.e2e-spec.ts b/e2e/clone-all-calc.e2e-spec.ts index b7df34623..290067e9a 100644 --- a/e2e/clone-all-calc.e2e-spec.ts +++ b/e2e/clone-all-calc.e2e-spec.ts @@ -28,6 +28,7 @@ describe("ngHyd − clone all calculators with all possible <select> values", () beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); + await browser.pause(200); await prefPage.disableEvilEmptyFields(); await browser.pause(200); await navBar.clickNewCalculatorButton(); diff --git a/e2e/compute-reset-chained-links.e2e-spec.ts b/e2e/compute-reset-chained-links.e2e-spec.ts index 73b01da87..1f87a7ad3 100644 --- a/e2e/compute-reset-chained-links.e2e-spec.ts +++ b/e2e/compute-reset-chained-links.e2e-spec.ts @@ -43,7 +43,7 @@ describe("ngHyd − compute then reset chained results − ", () => { await navBar.clickCalculatorTabForUid("Y2l2Y3"); // click "compute" button - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); @@ -92,7 +92,7 @@ describe("ngHyd − compute then reset chained results − ", () => { // load session file await startPage.navigateTo(); await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); await sidenav.loadSessionFile("./session/session-cascade-results.json"); @@ -103,7 +103,7 @@ describe("ngHyd − compute then reset chained results − ", () => { await navBar.clickCalculatorTabForUid("eHh5YX"); // click "compute" button - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); @@ -143,7 +143,7 @@ describe("ngHyd − compute then reset chained results − ", () => { // load session file await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); await sidenav.loadSessionFile("./session/session-results-invalidation.json"); @@ -154,7 +154,7 @@ describe("ngHyd − compute then reset chained results − ", () => { await navBar.clickCalculatorTabForUid("amd2OG"); // click "compute" button - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); const hasResults = await calcPage.hasResults(); @@ -174,7 +174,7 @@ describe("ngHyd − compute then reset chained results − ", () => { // calculate the upmost module await navBar.clickCalculatorTabForUid("aTgwMm"); - const calcButton2 = calcPage.getCalculateButton(); + const calcButton2 = await calcPage.getCalculateButton(); await calcButton2.click(); await browser.pause(200); diff --git a/e2e/cote-amont-aval-bief.e2e-spec.ts b/e2e/cote-amont-aval-bief.e2e-spec.ts index cee4caaee..4e2521c53 100644 --- a/e2e/cote-amont-aval-bief.e2e-spec.ts +++ b/e2e/cote-amont-aval-bief.e2e-spec.ts @@ -32,11 +32,12 @@ describe("ngHyd − up/downstream elevations of a reach", () => { it("check hydraulic details availability - flow calculation", async () => { // open "up/downstream elevations of a reach" calculator await navBar.clickNewCalculatorButton(); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(21); await browser.pause(200); // set upstream flow in calculate mode - const flowCalcBtn = $( + const flowCalcBtn = await $( "//field-set[4]/mat-card-content/param-field-line[1]/div/div[2]/mat-button-toggle-group/mat-button-toggle[3]" ); await flowCalcBtn.click(); @@ -53,7 +54,7 @@ describe("ngHyd − up/downstream elevations of a reach", () => { await upWEinput.setValue("100.664"); // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(300); diff --git a/e2e/diagramme-modules.e2e-spec.ts b/e2e/diagramme-modules.e2e-spec.ts index 4d523a2bb..5d2adae7f 100644 --- a/e2e/diagramme-modules.e2e-spec.ts +++ b/e2e/diagramme-modules.e2e-spec.ts @@ -44,7 +44,7 @@ describe("modules diagram", () => { // open modules diagram await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sideNav.clickDiagramButton(); await browser.pause(200); diff --git a/e2e/examples-empty-fields.e2e-spec.ts b/e2e/examples-empty-fields.e2e-spec.ts index 5c3ea9628..613472d64 100644 --- a/e2e/examples-empty-fields.e2e-spec.ts +++ b/e2e/examples-empty-fields.e2e-spec.ts @@ -105,21 +105,21 @@ describe("ngHyd - Check that examples work with 'empty fields on calculator crea // open 1st example const examples = await $$("#examples-list .load-example"); await examples[0].click(); - await browser.pause(50); + await browser.pause(500); // select wall module await navBar.openNthCalculator(4); - await browser.pause(50); + await browser.pause(200); // run calculation const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); - await browser.pause(200); + await browser.pause(500); // click "generate PAB" button const genButton = await calcPage.getGeneratePabButton(); await genButton.click(); - await browser.pause(1000); + await browser.pause(2000); // write "6" in basin count input const nbBassins = await calcPage.getInputById("generatePabNbBassins"); diff --git a/e2e/list.po.ts b/e2e/list.po.ts index 8572f152d..13c0ed92b 100644 --- a/e2e/list.po.ts +++ b/e2e/list.po.ts @@ -49,7 +49,7 @@ export class ListPage { } async getCalcMenuTextForCalcType(type: number): Promise<string> { - const but = $("#create-calc-" + type); + const but = await $("#create-calc-" + type); return but.getText(); } } diff --git a/e2e/load-linked-params.e2e-spec.ts b/e2e/load-linked-params.e2e-spec.ts index cb55bcb06..22671e1ab 100644 --- a/e2e/load-linked-params.e2e-spec.ts +++ b/e2e/load-linked-params.e2e-spec.ts @@ -36,7 +36,7 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { it("when loading session-liens-spaghetti.json, all links should point to the right target", async () => { await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); diff --git a/e2e/load-malformed-files.e2e-spec.ts b/e2e/load-malformed-files.e2e-spec.ts index 344f4102a..708332a39 100644 --- a/e2e/load-malformed-files.e2e-spec.ts +++ b/e2e/load-malformed-files.e2e-spec.ts @@ -32,7 +32,7 @@ describe("ngHyd − load malformed session files − ", () => { it("when loading session-bad-syntax.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); @@ -44,7 +44,7 @@ describe("ngHyd − load malformed session files − ", () => { it("when loading session-missing-info.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); @@ -56,7 +56,7 @@ describe("ngHyd − load malformed session files − ", () => { it("when loading session-empty-modules-list.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); @@ -68,7 +68,7 @@ describe("ngHyd − load malformed session files − ", () => { it("when loading session-format-too-old.json, displayed error should be relevant", async () => { await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 405f779b0..0272104a5 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -56,7 +56,7 @@ async function saveSession(): Promise<string> { async function loadSession(path: string) { await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); @@ -134,6 +134,7 @@ describe("ngHyd − save and load sessions", () => { const excludedCalculators = [ 34, // vérificateur (nécessite d'ouvrir plusieurs calculettes) + 35 // pressureloss : le select de loi de perte de charge détermine la présence d'un 2ème select (Lechapt -> matériau) (non géré pour l'instant) ]; for (let i = 0; i < calcTypes.length; i++) { @@ -152,7 +153,7 @@ describe("ngHyd − save and load sessions", () => { else { // empty session await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickNewSessionButton(); await browser.pause(200); } @@ -162,7 +163,7 @@ describe("ngHyd − save and load sessions", () => { await browser.pause(200); // detect selects - const selects = await calcPage.getAllCalculatorSelects(); + let selects = await calcPage.getAllCalculatorSelects(); const nsel = selects.length; for (let s = 0; s < nsel; s++) { const sel = selects[s]; @@ -171,7 +172,7 @@ describe("ngHyd − save and load sessions", () => { const options = await calcPage.getMatselectOptionsText(sel); const optionCount = options.length; - if (optionCount > 0) { + if (optionCount > 1) { // we need at least 2 options to be able to modify select // index of current selected option const optTxt = await calcPage.getMatselectCurrentOptionText(sel); const ind = options.indexOf(optTxt); @@ -186,7 +187,7 @@ describe("ngHyd − save and load sessions", () => { await browser.pause(500); // load session - await loadSession(filename); // bug here : the click on the menu button (top left) takes 40s to take effect and open the side nav!) + await loadSession(filename); await browser.pause(500); // the displayed calculator is now the loaded one @@ -209,6 +210,13 @@ describe("ngHyd − save and load sessions", () => { expectNumber(`calc ${ct} select ${selId} : num calcs(2)`, await navbar.getCalculatorEntriesCount(), 1); deleteDownloadedFile(filename); + + // get selects once again since page has been replaced (session load) + selects = await calcPage.getAllCalculatorSelects(); + + // restore select previous option, other selects presence may depend on it (eg. pressure loss calculator) + await changeSelectValue(selects[s], ind); + await browser.pause(200); } } } diff --git a/e2e/navbar.po.ts b/e2e/navbar.po.ts index f1fa0a1e5..7e8015532 100644 --- a/e2e/navbar.po.ts +++ b/e2e/navbar.po.ts @@ -31,7 +31,7 @@ export class Navbar { */ async openNthCalculator(n: number) { // if dropDown calculators select is visible - const dropDown = $("mat-select#selectCalculator"); + const dropDown = await $("mat-select#selectCalculator"); if ((await dropDown.isExisting()) && (await dropDown.isDisplayed())) { await dropDown.click(); diff --git a/e2e/notes.e2e-spec.ts b/e2e/notes.e2e-spec.ts index 9704016ec..de60a26f2 100644 --- a/e2e/notes.e2e-spec.ts +++ b/e2e/notes.e2e-spec.ts @@ -19,7 +19,7 @@ describe("check calculator notes", () => { it(" - notes should display properly when opened from a calculator", async () => { await startPage.navigateTo(); - await browser.pause(200); + await browser.pause(500); // open PAB: chute calculator await listPage.clickMenuEntryForCalcType(12); @@ -27,7 +27,7 @@ describe("check calculator notes", () => { // open notes await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickNotesButton(); await browser.pause(200); @@ -55,7 +55,7 @@ describe("check calculator notes", () => { it(" - notes should display properly when opened from modules diagram", async () => { await startPage.navigateTo(); - await browser.pause(200); + await browser.pause(500); // open PAB: chute calculator await listPage.clickMenuEntryForCalcType(12); @@ -63,7 +63,7 @@ describe("check calculator notes", () => { // open notes await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickNotesButton(); await browser.pause(200); @@ -75,7 +75,7 @@ describe("check calculator notes", () => { // open modules diagram await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickDiagramButton(); await browser.pause(200); diff --git a/e2e/pab-cloisons-empty-fields.e2e-spec.ts b/e2e/pab-cloisons-empty-fields.e2e-spec.ts index 8f1d76c55..81e107f2b 100644 --- a/e2e/pab-cloisons-empty-fields.e2e-spec.ts +++ b/e2e/pab-cloisons-empty-fields.e2e-spec.ts @@ -15,7 +15,7 @@ async function enableEmptyFieldsOption(prefPage: PreferencesPage) { } async function fillInput(calcPage: CalculatorPage, symbol: string) { - const inp = calcPage.getInputById(symbol); + const inp = await calcPage.getInputById(symbol); await inp.clearValue(); await inp.setValue("1"); } @@ -59,12 +59,12 @@ describe("ngHyd - check the cross walls calculator has empty fields - ", () => { await fillInput(calcPage, "0_CdWSL"); // calculate - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); // click "generate PAB" button - const genButton = calcPage.getGeneratePabButton(); + const genButton = await calcPage.getGeneratePabButton(); await genButton.click(); await browser.pause(1000); @@ -110,7 +110,7 @@ describe("ngHyd - check the cross walls calculator has no empty field - ", () => await fillInput(calcPage, "0_CdWSL"); // calculate - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); await browser.pause(200); diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index acdab5e0b..8e56d0e83 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -229,7 +229,7 @@ describe("ngHyd − Passe à Bassins", () => { await startPage.navigateTo(); // load await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sideNav.clickLoadSessionButton(); await browser.pause(200); await sideNav.loadSessionFile("./session/session-pab-complete.json"); @@ -265,9 +265,10 @@ describe("ngHyd − Passe à Bassins", () => { describe("load regulated variated PAB with calc errors - ", () => { it("should display logs", async () => { await startPage.navigateTo(); + await browser.pause(500); // load await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sideNav.clickLoadSessionButton(); await browser.pause(200); await sideNav.loadSessionFile("./session/session-pab-regulee-variee.json"); diff --git a/e2e/remous.e2e-spec.ts b/e2e/remous.e2e-spec.ts index fb2b14b63..d75b16815 100644 --- a/e2e/remous.e2e-spec.ts +++ b/e2e/remous.e2e-spec.ts @@ -87,7 +87,7 @@ describe("ngHyd − remous", () => { it("Check that calculation with dx >= reach length fails", async () => { // load backwater curve session file with Dx>=Long await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sidenav.clickLoadSessionButton(); await browser.pause(200); await sidenav.loadSessionFile("./session/session-remous-dx-bief.json"); diff --git a/e2e/reset-results.e2e-spec.ts b/e2e/reset-results.e2e-spec.ts index 210e11a2c..175af9a9b 100644 --- a/e2e/reset-results.e2e-spec.ts +++ b/e2e/reset-results.e2e-spec.ts @@ -32,17 +32,19 @@ describe("Check results are reset after application settings modification - ", ( async function runTestWithParameter(param: string, val1: number, val2: number) { // set starting compute precision const input = await prefPage.getInputFromName(param); + await input.clearValue(); await input.setValue(val1.toString()); // open "fish ladder: fall" calculator await navBar.clickNewCalculatorButton(); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(12); await browser.pause(200); // click "compute" button const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); - await browser.pause(200); + await browser.pause(500); // results should be here let hasResults = await calcPage.hasResults(); @@ -50,8 +52,9 @@ describe("Check results are reset after application settings modification - ", ( // reopen settings await navBar.clickMenuButton(); + await browser.pause(500); + const setupBtn = await sideNav.getSetupButton(); await browser.pause(200); - const setupBtn = sideNav.getSetupButton(); await setupBtn.click(); await browser.pause(200); diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index ee4008a1f..ddfb70e76 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -35,7 +35,7 @@ describe("Solveur - ", () => { it("load > calculate", async () => { await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sideNav.clickLoadSessionButton(); await browser.pause(200); diff --git a/e2e/util.po.ts b/e2e/util.po.ts index ffe2d1806..424cca260 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -51,7 +51,7 @@ export async function newSession(navBar: Navbar, sideNav: SideNav) { const tabs = await navBar.getAllCalculatorTabs(); if (tabs.length > 0) { await navBar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sideNav.clickNewSessionButton(); await browser.pause(200); // après ça, le bouton "#new-calculator" est absent diff --git a/wdio.conf.ts b/wdio.conf.ts index 5175e1e84..f6714da3c 100644 --- a/wdio.conf.ts +++ b/wdio.conf.ts @@ -61,12 +61,18 @@ export const config: Options.Testrunner = { // Sauce Labs platform configurator - a great tool to configure your capabilities: // https://saucelabs.com/platform/platform-configurator // - // args: ['--headless', '--verbose', '--headless=new', '--verbose', '--no-gpu', '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--remote-debugging-port=9515', '--whitelisted-ips='], + // args: [ '--verbose', '--verbose', '--no-gpu', '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--remote-debugging-port=9515', '--whitelisted-ips='], capabilities: [{ 'goog:chromeOptions': { - args: ['--headless', '--no-sandbox', '--disable-setuid-sandbox'], + args: [ + '--headless', + '--no-sandbox', '--disable-setuid-sandbox', 'disable-dev-shm-usage'], }, + // headless=chrome : Chrome < 109 + // headless=new : Chrome >= 109 + // disable-dev-shm-usage : évite les messages "session deleted because of page crash", cf. https://stackoverflow.com/questions/53902507/unknown-error-session-deleted-because-of-page-crash-from-unknown-error-cannot + // maxInstances can get overwritten per capability. So if you have an in-house Selenium // grid with only 5 firefox instances available you can make sure that not more than // 5 instances get started at a time. -- GitLab From 423362b2d291a5451676ad331de680103d1ec3c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 10 May 2023 14:36:48 +0200 Subject: [PATCH 18/25] fix(e2e): increase time allocated to compilation phase refs #618 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bb4e6c97b..41d9d7f0a 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "ng": "cd . && \"node_modules/.bin/ng\"", "postinstall": "./node_modules/.bin/webdriver-manager update --gecko=false --versions.chrome=107.0.5304.110", "lint": "eslint -c .eslintrc.js --ext .ts src", - "e2e": "node scripts/check-translations.js && { npm run start & sleep 60 ; } && ./node_modules/.bin/wdio run ./wdio.conf.ts", + "e2e": "node scripts/check-translations.js && { npm run start & sleep 180 ; } && ./node_modules/.bin/wdio run ./wdio.conf.ts", "e2equick": "node scripts/check-translations.js && ./node_modules/.bin/wdio run ./wdio.conf.ts", "monkeytest": "npm run ng -- e2e --dev-server-target= --suite=monkeyTest --webdriver-update=false", "mkdocs": "bash scripts/prepare_mkdocs.sh; cd build; python3 -m mkdocs build -f mkdocs-fr.yml && python3 -m mkdocs build -f mkdocs-en.yml && cd .. && node scripts/mkdocs-postprocess.js", -- GitLab From cdccaf104152ca74c5e9933c810920a95fecd29e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 10 May 2023 15:04:24 +0200 Subject: [PATCH 19/25] refactor(e2e): migrate commit 652f8631 (#614) refs #618 --- e2e/load-save-session.e2e-spec.ts | 20 +++++--------------- e2e/util.po.ts | 13 +++++++++++++ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/e2e/load-save-session.e2e-spec.ts b/e2e/load-save-session.e2e-spec.ts index 0272104a5..b8fb8a83e 100644 --- a/e2e/load-save-session.e2e-spec.ts +++ b/e2e/load-save-session.e2e-spec.ts @@ -4,7 +4,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, expectNumber } from "./util.po"; +import { changeSelectValue, expectNumber, loadSession } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' const fs = require("fs"); @@ -54,16 +54,6 @@ async function saveSession(): Promise<string> { return findDownloadedFile(sessionFile); } -async function loadSession(path: string) { - await navbar.clickMenuButton(); - await browser.pause(500); - - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - - await sidenav.loadSessionFile(path); -} - /** * Save and load (serialise and unserialise) calculators to/from JSON files */ @@ -84,7 +74,7 @@ describe("ngHyd − save and load sessions", () => { it("when loading session-6-calc.test.json file from home page, 6 calculators should be loaded", async () => { await startPage.navigateTo(); - await loadSession("./session/session-6-calc.test.json"); + await loadSession(navbar, sidenav, "./session/session-6-calc.test.json"); await browser.pause(1000); expect(await navbar.getAllCalculatorTabs().length).toBe(6); @@ -93,7 +83,7 @@ describe("ngHyd − save and load sessions", () => { it("when loading session-optional-params.test.json file from home page, the calculator should be loaded", async () => { await startPage.navigateTo(); - await loadSession("./session/session-optional-params.test.json"); + await loadSession(navbar, sidenav, "./session/session-optional-params.test.json"); await browser.pause(200); expect(await navbar.getAllCalculatorTabs().length).toBe(1); @@ -187,7 +177,7 @@ describe("ngHyd − save and load sessions", () => { await browser.pause(500); // load session - await loadSession(filename); + await loadSession(navbar, sidenav, filename); await browser.pause(500); // the displayed calculator is now the loaded one @@ -213,7 +203,7 @@ describe("ngHyd − save and load sessions", () => { // get selects once again since page has been replaced (session load) selects = await calcPage.getAllCalculatorSelects(); - + // restore select previous option, other selects presence may depend on it (eg. pressure loss calculator) await changeSelectValue(selects[s], ind); await browser.pause(200); diff --git a/e2e/util.po.ts b/e2e/util.po.ts index 424cca260..4acf0e303 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -71,3 +71,16 @@ export async function openCalculator(id: number, navBar: Navbar, listPage: ListP await listPage.clickMenuEntryForCalcType(id); await browser.pause(200); } + +/** + * load a session from JSON file + */ +export async function loadSession(navbar: Navbar, sideNav: SideNav, path: string) { + await navbar.clickMenuButton(); + await browser.pause(200); + + await sideNav.clickLoadSessionButton(); + await browser.pause(200); + + await sideNav.loadSessionFile(path); +} -- GitLab From 9da30e226ddee22165f69b4ad039a7e3e5d53774 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 10 May 2023 15:20:15 +0200 Subject: [PATCH 20/25] refactor(e2e): migrate commit 80e36eb0 (#614) refs #618 --- e2e/calculator.po.ts | 11 ++++ e2e/parallel-structures.e2e-spec.ts | 50 ++++++++++++++++++- .../session-erreur-ennoiement-614.json | 1 + 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 e2e/session/session-erreur-ennoiement-614.json diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 3e0ce126b..7399ae786 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -343,6 +343,17 @@ export class CalculatorPage { return await $$("log-entry").length; } + /** + * return true if the nth log entry is an error + */ + async nthLogEntryIsError(n: number) { + const errs = await $$("log-entry"); + const e = errs[n]; + const icon = await e.$("div mat-icon"); + const style = await icon.getAttribute("style"); + return style.indexOf("color: red;") !== -1; + } + async clickSaveCalcButton() { await scrollPageToTop(); return await $("#save-calc").click(); diff --git a/e2e/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index 1abbb2032..54ebb0295 100644 --- a/e2e/parallel-structures.e2e-spec.ts +++ b/e2e/parallel-structures.e2e-spec.ts @@ -2,19 +2,26 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; +import { AppPage } from "./app.po"; +import { loadSession } from "./util.po"; +import { SideNav } from "./sidenav.po"; import { browser, $, $$, expect } from '@wdio/globals' -describe("Check calculated parameter remains the same when copying a structure", () => { +describe("Parallel structures - ", () => { + let startPage: AppPage; let listPage: ListPage; let navBar: Navbar; let calcPage: CalculatorPage; let prefPage: PreferencesPage; + let sideNav: SideNav; beforeAll(() => { + startPage = new AppPage(); listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); prefPage = new PreferencesPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -24,7 +31,7 @@ describe("Check calculated parameter remains the same when copying a structure", await browser.pause(200); }); - it("", async () => { + it("check calculated parameter remains the same when copying a structure", async () => { // open "fish ladder: cross walls" calculator await navBar.clickNewCalculatorButton(); await browser.pause(200); @@ -59,4 +66,43 @@ describe("Check calculated parameter remains the same when copying a structure", const L2 = await calcPage.getInputById("1_L"); expect(await calcPage.inputIsInFixedMode(L2)).toBe(true); }); + + //TODO à réactiver après fusion de #618 dans devel + xit("check submergence error", async () => { + await startPage.navigateTo(); + await browser.pause(200); + + await loadSession(navBar, sideNav, "./session/session-erreur-ennoiement-614.json"); + await browser.pause(1000); + + // first calculator + + await navBar.clickCalculatorTab(0); + await browser.pause(200); + + // run calculation + let btnCalc = await calcPage.getCalculateButton(); + await btnCalc.click(); + await browser.pause(500); + + // check error message in log + expect(await calcPage.nbLogEntries()).toBe(1); + + expect(await calcPage.nthLogEntryIsError(0)).toBe(true); + + // second calculator + + await navBar.clickCalculatorTab(1); + await browser.pause(200); + + // run calculation + btnCalc = await calcPage.getCalculateButton(); + await btnCalc.click(); + await browser.pause(500); + + // check error message in log + expect(await calcPage.nbLogEntries()).toBe(1); + + expect(await calcPage.nthLogEntryIsError(0)).toBe(true); + }); }); diff --git a/e2e/session/session-erreur-ennoiement-614.json b/e2e/session/session-erreur-ennoiement-614.json new file mode 100644 index 000000000..e0a38e6b2 --- /dev/null +++ b/e2e/session/session-erreur-ennoiement-614.json @@ -0,0 +1 @@ +{"header":{"source":"jalhyd","format_version":"1.3","created":"2023-04-03T12:18:32.015Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"cTl6aT","props":{"calcType":"Cloisons","nullparams":false},"meta":{"title":"Cloisons"},"children":[{"uid":"NWllMn","props":{"calcType":"Structure","loiDebit":"WeirSubmergedLarinier","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"h1","mode":"SINGLE","value":1},{"symbol":"L","mode":"SINGLE","value":0.2},{"symbol":"CdWSL","mode":"SINGLE","value":0.75}]}],"parameters":[{"symbol":"Q","mode":"CALCUL"},{"symbol":"Z1","mode":"SINGLE","value":102},{"symbol":"LB","mode":"SINGLE","value":10},{"symbol":"BB","mode":"SINGLE","value":1},{"symbol":"PB","mode":"SINGLE","value":1},{"symbol":"DH","mode":"SINGLE","value":0.6}]},{"uid":"bW4wZz","props":{"calcType":"ParallelStructure","nullparams":false},"meta":{"title":"Ouvrages"},"children":[{"uid":"anFpeG","props":{"calcType":"Structure","loiDebit":"WeirSubmerged","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"L","mode":"SINGLE","value":2},{"symbol":"CdWS","mode":"SINGLE","value":0.9}]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":14.647},{"symbol":"Z1","mode":"CALCUL","value":103},{"symbol":"Z2","mode":"SINGLE","value":101.5}]}]} -- GitLab From cbcc15791d0ec546ddf654315cae54d76f65828d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 10 May 2023 15:31:05 +0200 Subject: [PATCH 21/25] refactor(e2e): migrate commit 19dc09ea (#609) refs #618 --- e2e/macrorugo-remous.e2e-spec.ts | 60 ++++++++++++++++++++++++++++++++ e2e/util.po.ts | 7 ++++ 2 files changed, 67 insertions(+) create mode 100644 e2e/macrorugo-remous.e2e-spec.ts diff --git a/e2e/macrorugo-remous.e2e-spec.ts b/e2e/macrorugo-remous.e2e-spec.ts new file mode 100644 index 000000000..f9dea9fd0 --- /dev/null +++ b/e2e/macrorugo-remous.e2e-spec.ts @@ -0,0 +1,60 @@ +import { ListPage } from "./list.po"; +import { PreferencesPage } from "./preferences.po"; +import { Navbar } from "./navbar.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { isElementDisplayed } from "./util.po"; + +//TODO à réactiver après fusion de #618 dans devel +xdescribe("MacroRugoRemous - ", () => { + let prefPage: PreferencesPage; + let listPage: ListPage; + let navBar: Navbar; + + beforeAll(() => { + prefPage = new PreferencesPage(); + listPage = new ListPage(); + navBar = new Navbar(); + }); + + beforeEach(async () => { + // disable evil option "empty fields on module creation" + await prefPage.navigateTo(); + await browser.pause(200); + await prefPage.disableEvilEmptyFields(); + await browser.pause(200); + }); + + it("check select empty message is present when no PAM is in the session", async () => { + // start page + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + + // MacroRugoRemous calculator + await listPage.clickMenuEntryForCalcType(37); + browser.pause(200); + + // const emptyMsg = element(by.css("div .message-when-empty")); + const emptyMsg = await $("div .message-when-empty"); + expect(await isElementDisplayed(emptyMsg)).toBe(true); + }); + + it("check select empty message is not present when a PAM exists in the session", async () => { + // start page + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + + // PAM calculator + await listPage.clickMenuEntryForCalcType(11); + browser.pause(200); + + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + + // MacroRugoRemous calculator + await listPage.clickMenuEntryForCalcType(37); + browser.pause(200); + + const emptyMsg = $("div .message-when-empty"); + expect(await isElementDisplayed(emptyMsg)).toBe(false); + }); +}); diff --git a/e2e/util.po.ts b/e2e/util.po.ts index 4acf0e303..04f8564f9 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -84,3 +84,10 @@ export async function loadSession(navbar: Navbar, sideNav: SideNav, path: string await sideNav.loadSessionFile(path); } + +/** + * @returns true if an element exists and is displayed + */ +export async function isElementDisplayed(element) { + return await element.isExisting() && await element.isDisplayed(); +} -- GitLab From 93d413a9f633a656ab8aa1f8c85d916f93567e8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 10 May 2023 15:39:06 +0200 Subject: [PATCH 22/25] refactor(e2e): migrate commit c93a6e1f (#609) refs #618 --- e2e/macrorugo-remous.e2e-spec.ts | 48 ++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/e2e/macrorugo-remous.e2e-spec.ts b/e2e/macrorugo-remous.e2e-spec.ts index f9dea9fd0..d2c17b03b 100644 --- a/e2e/macrorugo-remous.e2e-spec.ts +++ b/e2e/macrorugo-remous.e2e-spec.ts @@ -3,17 +3,20 @@ import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; import { browser, $, $$, expect } from '@wdio/globals' import { isElementDisplayed } from "./util.po"; +import { CalculatorPage } from "./calculator.po"; //TODO à réactiver après fusion de #618 dans devel xdescribe("MacroRugoRemous - ", () => { let prefPage: PreferencesPage; let listPage: ListPage; let navBar: Navbar; + let calcPage: CalculatorPage; beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); navBar = new Navbar(); + calcPage = new CalculatorPage(); }); beforeEach(async () => { @@ -57,4 +60,49 @@ xdescribe("MacroRugoRemous - ", () => { const emptyMsg = $("div .message-when-empty"); expect(await isElementDisplayed(emptyMsg)).toBe(false); }); + + it("check select error message when target PAM has no variated parameter", async () => { + // start page + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + + // PAM calculator + await listPage.clickMenuEntryForCalcType(11); + browser.pause(200); + + // MacroRugoRemous calculator + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + + await listPage.clickMenuEntryForCalcType(37); + browser.pause(200); + + const errorMsg = await $("div .select-error-message"); + expect(await isElementDisplayed(errorMsg)).toBe(false); + }); + + it("check select error message when target PAM has a variated parameter", async () => { + // start page + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + + // PAM calculator + await listPage.clickMenuEntryForCalcType(11); + browser.pause(200); + + // set ZF1 to variated mode + const zf1 = await calcPage.getInputById("ZF1"); + await calcPage.setParamMode(zf1, "var"); + await browser.pause(200); + + // MacroRugoRemous calculator + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + + await listPage.clickMenuEntryForCalcType(37); + browser.pause(200); + + const errorMsg = await $("div .select-error-message"); + expect(await isElementDisplayed(errorMsg)).toBe(true); + }); }); -- GitLab From 90e3d8e01823986b6bf604da56d54ff2fd333c7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 11 May 2023 10:01:13 +0200 Subject: [PATCH 23/25] fix(e2e): migrate predams test to WebdriverIO refs #618 --- e2e/prebarrages-results.e2e-spec.ts | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/e2e/prebarrages-results.e2e-spec.ts b/e2e/prebarrages-results.e2e-spec.ts index e7af14868..09c79d23b 100644 --- a/e2e/prebarrages-results.e2e-spec.ts +++ b/e2e/prebarrages-results.e2e-spec.ts @@ -1,11 +1,9 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; -import { browser, by, element } from "protractor"; -import { AppPage } from "./app.po"; -import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, scrollPageToTop } from "./util.po"; +import { browser, $, $$, expect } from '@wdio/globals' +import { scrollToElement } from "./util.po"; /** * Clone calculators @@ -27,26 +25,31 @@ describe("Prébarrages results - ", () => { beforeEach(async () => { // disable evil option "empty fields on module creation" await prefPage.navigateTo(); + await browser.pause(200); await prefPage.disableEvilEmptyFields(); - await browser.sleep(200); + await browser.pause(200); }); it("every module shoud have results", async () => { // create prébarrage calculator await navBar.clickNewCalculatorButton(); + await browser.pause(200); await listPage.clickMenuEntryForCalcType(30); + await browser.pause(200); // run calculation - const calcButton = calcPage.getCalculateButton(); + const calcButton = await calcPage.getCalculateButton(); await calcButton.click(); - await browser.sleep(200); + await browser.pause(200); - const nodes = element.all(by.css("g.nodes > g")); - const nb = await nodes.count(); + const nodes = await $$("g.nodes > g"); + const nb = nodes.length; for (let n = 0; n < nb; n++) { - const node = nodes.get(n); + const node = nodes[n]; + await scrollToElement(node); + await browser.pause(100); await node.click(); - await browser.sleep(200); + await browser.pause(200); // check that result is not empty const hasResults = await calcPage.hasResults(); -- GitLab From 33189f53487edeea840f76ca11ea12e294d6b419 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 11 May 2023 10:01:40 +0200 Subject: [PATCH 24/25] refactor(e2e): use loadSession() where possible refs #618 --- e2e/calculate-linked-params.e2e-spec.ts | 19 +++++--------- e2e/compute-reset-chained-links.e2e-spec.ts | 23 +++------------- e2e/load-linked-params.e2e-spec.ts | 10 ++----- e2e/load-malformed-files.e2e-spec.ts | 29 ++++----------------- e2e/pab.e2e-spec.ts | 17 +++--------- e2e/remous.e2e-spec.ts | 9 ++----- e2e/solveur.e2e-spec.ts | 11 ++------ e2e/util.po.ts | 9 ++++--- 8 files changed, 31 insertions(+), 96 deletions(-) diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts index 557484db9..2f998ebd4 100644 --- a/e2e/calculate-linked-params.e2e-spec.ts +++ b/e2e/calculate-linked-params.e2e-spec.ts @@ -3,7 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, newSession } from "./util.po"; +import { changeSelectValue, loadSession, newSession } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' /** @@ -234,12 +234,10 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − multiple variated parameters, including a linked one (#253)", async () => { // load session file await navBar.clickNewCalculatorButton(); - await navBar.clickMenuButton(); await browser.pause(200); - await sideNav.clickLoadSessionButton(); - await browser.pause(200); - await sideNav.loadSessionFile("./session/session-multivar-link.json"); - await browser.pause(500); + + await loadSession(navBar, sideNav, "./session/session-multivar-link.json"); + expect(await navBar.getAllCalculatorTabs().length).toBe(2); // calculate @@ -270,13 +268,10 @@ describe("ngHyd − calculate with linked parameters", () => { it(" − bug nghyd#329 : unexpected ERR in results table", async () => { await navBar.clickNewCalculatorButton(); - // load session - await navBar.clickMenuButton(); - await browser.pause(200); - await sideNav.clickLoadSessionButton(); - await browser.pause(200); - await sideNav.loadSessionFile("./session/session-pab-chain-nghyd-329.json"); await browser.pause(200); + + // load session + await loadSession(navBar, sideNav, "./session/session-pab-chain-nghyd-329.json"); expect(await navBar.getAllCalculatorTabs().length).toBe(3); // calculate PAB-Dimensions diff --git a/e2e/compute-reset-chained-links.e2e-spec.ts b/e2e/compute-reset-chained-links.e2e-spec.ts index 1f87a7ad3..e0577d246 100644 --- a/e2e/compute-reset-chained-links.e2e-spec.ts +++ b/e2e/compute-reset-chained-links.e2e-spec.ts @@ -4,7 +4,7 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' -import { newSession } from "./util.po"; +import { loadSession, newSession } from "./util.po"; /** * Load a session containing 3 calculators, having linked parameters @@ -31,12 +31,7 @@ describe("ngHyd − compute then reset chained results − ", () => { it("when loading session-cascade-params.json, computation should not be chained, but results reset should be", async () => { // load session file await startPage.navigateTo(); - await navBar.clickMenuButton(); - await browser.pause(200); - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - await sidenav.loadSessionFile("./session/session-cascade-params.json"); - await browser.pause(500); + await loadSession(navBar, sidenav, "./session/session-cascade-params.json"); expect(await navBar.getAllCalculatorTabs().length).toBe(3); // 1. get down-most module @@ -91,12 +86,7 @@ describe("ngHyd − compute then reset chained results − ", () => { it("when loading session-cascade-results.json, computation and results reset should be chained", async () => { // load session file await startPage.navigateTo(); - await navBar.clickMenuButton(); - await browser.pause(500); - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - await sidenav.loadSessionFile("./session/session-cascade-results.json"); - await browser.pause(500); + await loadSession(navBar, sidenav, "./session/session-cascade-results.json"); expect(await navBar.getAllCalculatorTabs().length).toBe(3); // 1. get down-most module (PAB Dimensions) @@ -142,12 +132,7 @@ describe("ngHyd − compute then reset chained results − ", () => { await browser.pause(200); // load session file - await navBar.clickMenuButton(); - await browser.pause(500); - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - await sidenav.loadSessionFile("./session/session-results-invalidation.json"); - await browser.pause(500); + await loadSession(navBar, sidenav, "./session/session-results-invalidation.json"); expect(await navBar.getAllCalculatorTabs().length).toBe(2); // get down-most module (Ouvrages) diff --git a/e2e/load-linked-params.e2e-spec.ts b/e2e/load-linked-params.e2e-spec.ts index 22671e1ab..3ffa9d9a3 100644 --- a/e2e/load-linked-params.e2e-spec.ts +++ b/e2e/load-linked-params.e2e-spec.ts @@ -3,6 +3,7 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { loadSession } from "./util.po"; /** * Load a session containing 5 calculators, having multiple linked parameters @@ -35,14 +36,7 @@ describe("ngHyd − load session with multiple linked parameters − ", () => { }); it("when loading session-liens-spaghetti.json, all links should point to the right target", async () => { - await navbar.clickMenuButton(); - await browser.pause(500); - - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - - await sidenav.loadSessionFile("./session/session-liens-spaghetti.json"); - await browser.pause(500); + await loadSession(navbar, sidenav, "./session/session-liens-spaghetti.json"); expect(await navbar.getAllCalculatorTabs().length).toBe(5); diff --git a/e2e/load-malformed-files.e2e-spec.ts b/e2e/load-malformed-files.e2e-spec.ts index 708332a39..4f665914a 100644 --- a/e2e/load-malformed-files.e2e-spec.ts +++ b/e2e/load-malformed-files.e2e-spec.ts @@ -2,6 +2,7 @@ import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { loadSession } from "./util.po"; /** * Load 4 malformed session files : @@ -31,49 +32,29 @@ describe("ngHyd − load malformed session files − ", () => { }); it("when loading session-bad-syntax.json, displayed error should be relevant", async () => { - await navbar.clickMenuButton(); - await browser.pause(500); + await loadSession(navbar, sidenav, "./session/session-bad-syntax.json"); - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - - await sidenav.loadSessionFile("./session/session-bad-syntax.json"); const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("La syntaxe du fichier semble incorrecte"); }); it("when loading session-missing-info.json, displayed error should be relevant", async () => { - await navbar.clickMenuButton(); - await browser.pause(500); - - await sidenav.clickLoadSessionButton(); - await browser.pause(200); + await loadSession(navbar, sidenav, "./session/session-missing-info.json"); - await sidenav.loadSessionFile("./session/session-missing-info.json"); const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("La syntaxe du fichier semble incorrecte"); }); it("when loading session-empty-modules-list.json, displayed error should be relevant", async () => { - await navbar.clickMenuButton(); - await browser.pause(500); + await loadSession(navbar, sidenav, "./session/session-empty-modules-list.json"); - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - - await sidenav.loadSessionFile("./session/session-empty-modules-list.json"); const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("Le fichier ne contient aucun module"); }); it("when loading session-format-too-old.json, displayed error should be relevant", async () => { - await navbar.clickMenuButton(); - await browser.pause(500); - - await sidenav.clickLoadSessionButton(); - await browser.pause(200); + await loadSession(navbar, sidenav, "./session/session-format-too-old.json", false); - await sidenav.loadSessionFile("./session/session-format-too-old.json", false); const err = await $(".file-problem .mat-list-item-content"); expect(await err.getText()).toContain("Mauvaise version du format de fichier"); }); diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 8e56d0e83..28f88a928 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -4,7 +4,7 @@ import { Navbar } from "./navbar.po"; import { AppPage } from "./app.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, newSession, scrollPageToTop } from "./util.po"; +import { changeSelectValue, loadSession, newSession, scrollPageToTop } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' /** @@ -228,12 +228,8 @@ describe("ngHyd − Passe à Bassins", () => { it("complete example of all PAB modules", async () => { await startPage.navigateTo(); // load - await navBar.clickMenuButton(); - await browser.pause(500); - await sideNav.clickLoadSessionButton(); - await browser.pause(200); - await sideNav.loadSessionFile("./session/session-pab-complete.json"); - await browser.pause(500); + await loadSession(navBar, sideNav, "./session/session-pab-complete.json"); + // check existence of the loaded modules expect(await navBar.getAllCalculatorTabs().length).toBe(6); @@ -267,12 +263,7 @@ describe("ngHyd − Passe à Bassins", () => { await startPage.navigateTo(); await browser.pause(500); // load - await navBar.clickMenuButton(); - await browser.pause(500); - await sideNav.clickLoadSessionButton(); - await browser.pause(200); - await sideNav.loadSessionFile("./session/session-pab-regulee-variee.json"); - await browser.pause(500); + await loadSession(navBar, sideNav, "./session/session-pab-regulee-variee.json"); // check existence of the loaded module expect(await navBar.getAllCalculatorTabs().length).toBe(1); await navBar.clickCalculatorTab(0); diff --git a/e2e/remous.e2e-spec.ts b/e2e/remous.e2e-spec.ts index d75b16815..48cdcf57f 100644 --- a/e2e/remous.e2e-spec.ts +++ b/e2e/remous.e2e-spec.ts @@ -3,7 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { SideNav } from "./sidenav.po"; -import { changeSelectValue } from "./util.po"; +import { changeSelectValue, loadSession } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' /** @@ -86,12 +86,7 @@ describe("ngHyd − remous", () => { it("Check that calculation with dx >= reach length fails", async () => { // load backwater curve session file with Dx>=Long - await navBar.clickMenuButton(); - await browser.pause(500); - await sidenav.clickLoadSessionButton(); - await browser.pause(200); - await sidenav.loadSessionFile("./session/session-remous-dx-bief.json"); - await browser.pause(300); + await loadSession(navBar, sidenav, "./session/session-remous-dx-bief.json"); // Calculate, the calculation should fail const calcBtn = await calcPage.getCalculateButton() diff --git a/e2e/solveur.e2e-spec.ts b/e2e/solveur.e2e-spec.ts index ddfb70e76..88fe956ea 100644 --- a/e2e/solveur.e2e-spec.ts +++ b/e2e/solveur.e2e-spec.ts @@ -3,7 +3,7 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { SideNav } from "./sidenav.po"; import { PreferencesPage } from "./preferences.po"; -import { changeSelectValue, newSession, openCalculator, scrollPageToTop } from "./util.po"; +import { changeSelectValue, loadSession, newSession, openCalculator, scrollPageToTop } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' /** @@ -34,14 +34,7 @@ describe("Solveur - ", () => { }); it("load > calculate", async () => { - await navBar.clickMenuButton(); - await browser.pause(500); - - await sideNav.clickLoadSessionButton(); - await browser.pause(200); - - await sideNav.loadSessionFile("./session/session-solveur-chutes.json"); - await browser.pause(200); + await loadSession(navBar, sideNav, "./session/session-solveur-chutes.json"); expect(await navBar.getAllCalculatorTabs().length).toBe(4); await navBar.clickCalculatorTab(3); // n°3 should be the latest diff --git a/e2e/util.po.ts b/e2e/util.po.ts index 04f8564f9..c6cd6471e 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -75,14 +75,15 @@ export async function openCalculator(id: number, navBar: Navbar, listPage: ListP /** * load a session from JSON file */ -export async function loadSession(navbar: Navbar, sideNav: SideNav, path: string) { +export async function loadSession(navbar: Navbar, sideNav: SideNav, path: string, click: boolean = true) { await navbar.clickMenuButton(); - await browser.pause(200); + await browser.pause(500); await sideNav.clickLoadSessionButton(); - await browser.pause(200); + await browser.pause(500); - await sideNav.loadSessionFile(path); + await sideNav.loadSessionFile(path, click); + await browser.pause(500); } /** -- GitLab From d0a5f2f72c961095d2714178bd831d4153e60d25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Thu, 11 May 2023 10:53:21 +0200 Subject: [PATCH 25/25] test(e2e): disable CI tests on pushes refs #618 --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 50693bbe4..92811cedb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -72,7 +72,6 @@ install: test: stage: test only: - - pushes - tags - schedules - web -- GitLab