diff --git a/e2e-tests/playwright/README.md b/e2e-tests/playwright/README.md index b32c431940..867af490e1 100644 --- a/e2e-tests/playwright/README.md +++ b/e2e-tests/playwright/README.md @@ -6,7 +6,7 @@ # Typically run the local server with: cd server && make run -# Or build and distribute webapp including channels, boards and playbooks +# Or build and distribute webapp including channels and playbooks # so that their product URLs do not rely on Webpack dev server. # Especially important when running test inside the Playwright's docker container. cd webapp && make dist @@ -45,7 +45,7 @@ npm run test Change to root directory, run docker container ``` -docker run -it --rm -v "$(pwd):/mattermost/" --ipc=host mcr.microsoft.com/playwright:v1.36.0-focal /bin/bash +docker run -it --rm -v "$(pwd):/mattermost/" --ipc=host mcr.microsoft.com/playwright:v1.38.0-jammy /bin/bash ``` #### 2. Inside the docker container diff --git a/e2e-tests/playwright/global_setup.ts b/e2e-tests/playwright/global_setup.ts index 58781d9a27..f473a15cb6 100644 --- a/e2e-tests/playwright/global_setup.ts +++ b/e2e-tests/playwright/global_setup.ts @@ -48,7 +48,7 @@ async function sysadminSetup(client: Client, user: UserProfile | null) { await client.createTeam(createRandomTeam(defaultTeam.name, defaultTeam.displayName, 'O', false)); } else if (myDefaultTeam && testConfig.resetBeforeTest) { await Promise.all( - myTeams.filter((team) => team.name !== defaultTeam.name).map((team) => client.deleteTeam(team.id)) + myTeams.filter((team) => team.name !== defaultTeam.name).map((team) => client.deleteTeam(team.id)), ); const myChannels = await client.getMyChannels(myDefaultTeam.id); @@ -61,7 +61,7 @@ async function sysadminSetup(client: Client, user: UserProfile | null) { channel.name !== 'off-topic' ); }) - .map((channel) => client.deleteChannel(channel.id)) + .map((channel) => client.deleteChannel(channel.id)), ); } @@ -170,7 +170,7 @@ async function ensureServerDeployment(client: Client) { sameClusterName, sameClusterName ? '' - : `Should have cluster name set and as expected. Got "${ClusterName}" but expected "${haClusterName}"` + : `Should have cluster name set and as expected. Got "${ClusterName}" but expected "${haClusterName}"`, ).toBe(true); const clusterInfo = await client.getClusterStatus(); @@ -179,12 +179,12 @@ async function ensureServerDeployment(client: Client) { sameCount, sameCount ? '' - : `Should match number of nodes in a cluster as expected. Got "${clusterInfo?.length}" but expected "${haClusterNodeCount}"` + : `Should match number of nodes in a cluster as expected. Got "${clusterInfo?.length}" but expected "${haClusterNodeCount}"`, ).toBe(true); clusterInfo.forEach((info) => // eslint-disable-next-line no-console - console.log(`hostname: ${info.hostname}, version: ${info.version}, config_hash: ${info.config_hash}`) + console.log(`hostname: ${info.hostname}, version: ${info.version}, config_hash: ${info.config_hash}`), ); } } diff --git a/e2e-tests/playwright/package-lock.json b/e2e-tests/playwright/package-lock.json index 7d2b5a3e8f..10d7ea1c10 100644 --- a/e2e-tests/playwright/package-lock.json +++ b/e2e-tests/playwright/package-lock.json @@ -5,28 +5,29 @@ "requires": true, "packages": { "": { + "hasInstallScript": true, "dependencies": { "@axe-core/playwright": "4.7.3", - "@percy/cli": "1.26.2", + "@percy/cli": "1.27.1", "@percy/playwright": "1.0.4", - "@playwright/test": "1.36.1", + "@playwright/test": "1.38.0", "async-wait-until": "2.0.12", - "axe-core": "4.7.2", + "axe-core": "4.8.1", "chalk": "4.1.2", "deepmerge": "4.3.1", "dotenv": "16.3.1", "form-data": "4.0.0", "isomorphic-unfetch": "4.0.2", - "uuid": "9.0.0" + "uuid": "9.0.1" }, "devDependencies": { - "@types/uuid": "9.0.2", - "@typescript-eslint/eslint-plugin": "6.1.0", - "@typescript-eslint/parser": "6.1.0", + "@types/uuid": "9.0.4", + "@typescript-eslint/eslint-plugin": "6.7.0", + "@typescript-eslint/parser": "6.7.0", "cross-env": "7.0.3", - "eslint": "8.45.0", - "prettier": "2.8.7", - "typescript": "5.0.4" + "eslint": "8.49.0", + "prettier": "3.0.3", + "typescript": "5.2.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -50,31 +51,53 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dependencies": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.19", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.19.tgz", + "integrity": "sha512-Tinq7ybnEPFFXhlYOYFiSjespWQk0dq2dRNAiMdRTOYQzEGqnnNyrTxPYHP5r6wGjlF1rFgABdDV0g8EwD6Qbg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -118,18 +141,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", + "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -172,18 +195,18 @@ "dev": true }, "node_modules/@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", + "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -246,19 +269,19 @@ } }, "node_modules/@percy/cli": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli/-/cli-1.26.2.tgz", - "integrity": "sha512-RKuylqXNfVAO+3XpUpFh67vnjB/tvSh98aDuEf1z8CNuTBSYA7YJbB5lxOnEcQ3DRMaQuemZ1zX0UyiHxLnjEw==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli/-/cli-1.27.1.tgz", + "integrity": "sha512-2rU4NFe8TshV2sF+fs8bseGNohpLuRILW4t/Is7PCFYAitla1nvO0mndy0INct5VWc2KKewnq+2ZQONx3iNXLw==", "dependencies": { - "@percy/cli-app": "1.26.2", - "@percy/cli-build": "1.26.2", - "@percy/cli-command": "1.26.2", - "@percy/cli-config": "1.26.2", - "@percy/cli-exec": "1.26.2", - "@percy/cli-snapshot": "1.26.2", - "@percy/cli-upload": "1.26.2", - "@percy/client": "1.26.2", - "@percy/logger": "1.26.2" + "@percy/cli-app": "1.27.1", + "@percy/cli-build": "1.27.1", + "@percy/cli-command": "1.27.1", + "@percy/cli-config": "1.27.1", + "@percy/cli-exec": "1.27.1", + "@percy/cli-snapshot": "1.27.1", + "@percy/cli-upload": "1.27.1", + "@percy/client": "1.27.1", + "@percy/logger": "1.27.1" }, "bin": { "percy": "bin/run.cjs" @@ -268,36 +291,36 @@ } }, "node_modules/@percy/cli-app": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli-app/-/cli-app-1.26.2.tgz", - "integrity": "sha512-eOg1vs6J3eINREf4SWt7YO9KJwGru2JPOXlV23fZgLaSw1iEaZqpa1NmeMlSX2NsU+J8JdAox1hkmO884QHE8A==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli-app/-/cli-app-1.27.1.tgz", + "integrity": "sha512-Pat2BogPUmyciURUWbI1PQtUdPlhUrnS6aEVO1gNrulDeYF6j4LgD4SycCTj5L/xJijMXa3qFkZwW1VSdx97Yg==", "dependencies": { - "@percy/cli-command": "1.26.2", - "@percy/cli-exec": "1.26.2" + "@percy/cli-command": "1.27.1", + "@percy/cli-exec": "1.27.1" }, "engines": { "node": ">=14" } }, "node_modules/@percy/cli-build": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli-build/-/cli-build-1.26.2.tgz", - "integrity": "sha512-VJJcLfWmKhVy7WHojpPtslRA8rm77umh/f7kr3kcYE2HVXDVRcH8r72zClglhYdLcrIfb/3BUCX6JXxJfgM7tg==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli-build/-/cli-build-1.27.1.tgz", + "integrity": "sha512-EtktlYj4kzsBkrBSOVLKrvZWew/nq9mw/Z2m8mU4Jf7Pc779rQGUVCuI8PBhOI59c3JTjnY8KVaaj4Y+z9X+fg==", "dependencies": { - "@percy/cli-command": "1.26.2" + "@percy/cli-command": "1.27.1" }, "engines": { "node": ">=14" } }, "node_modules/@percy/cli-command": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli-command/-/cli-command-1.26.2.tgz", - "integrity": "sha512-G5qALrrprUO5Zc3TrEPzqys6+clWtXjHGWVcHYMaBY0i7xwH4D0FaqtzkGRjiUxbsb353qV35B48oKsm0FJDmg==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli-command/-/cli-command-1.27.1.tgz", + "integrity": "sha512-LK9YwE7qr67EtShVVjc20aJaRF8BFjZ8VWneLVoN73IYgpwBq96J4AUomoqfRpPNkpKvv6wDZFpr30xFokbrHA==", "dependencies": { - "@percy/config": "1.26.2", - "@percy/core": "1.26.2", - "@percy/logger": "1.26.2" + "@percy/config": "1.27.1", + "@percy/core": "1.27.1", + "@percy/logger": "1.27.1" }, "bin": { "percy-cli-readme": "bin/readme.js" @@ -307,22 +330,22 @@ } }, "node_modules/@percy/cli-config": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli-config/-/cli-config-1.26.2.tgz", - "integrity": "sha512-E/zb2Eg1HK8JDzloY0FdguZS0nE47QwZoW9uxMw8QD2wykxIkbQeJq8Jl5a48BJ3rTj8TnKMzyTo7yMALqnISw==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli-config/-/cli-config-1.27.1.tgz", + "integrity": "sha512-bEzXfdP+RRxHekZ5pULsuuKHL0K9E81IFcEqZ8DcE3gnrpWQnIFPP2fTHF6WgWuXYHzJnsoIIm90LaWYc4+BJQ==", "dependencies": { - "@percy/cli-command": "1.26.2" + "@percy/cli-command": "1.27.1" }, "engines": { "node": ">=14" } }, "node_modules/@percy/cli-exec": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli-exec/-/cli-exec-1.26.2.tgz", - "integrity": "sha512-7gMzZshrtPbxHLkiduA7OcCqbhxwAZ17x3C8XdFYwzvW3MpghKhSpwK24hGH3169nvnoRjf5GzG7CHIBVaEndQ==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli-exec/-/cli-exec-1.27.1.tgz", + "integrity": "sha512-8xB7Iq3fh+QfuViUeZQXZeJNoFzDf0IhYUhhlEDXPcL2sgjrLiy9QHBdq6Yn3/8gHlDJyzpkej6hzFqERYZs1g==", "dependencies": { - "@percy/cli-command": "1.26.2", + "@percy/cli-command": "1.27.1", "cross-spawn": "^7.0.3", "which": "^2.0.2" }, @@ -331,11 +354,11 @@ } }, "node_modules/@percy/cli-snapshot": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli-snapshot/-/cli-snapshot-1.26.2.tgz", - "integrity": "sha512-R0rtuRkxzOfjr6N2XQyPBmL+zuXvbmNqjuBMDo8bmPy+j+b16TWFn25Q6r3jKLPdRkXVXrAMFsEsp9um1tLVrQ==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli-snapshot/-/cli-snapshot-1.27.1.tgz", + "integrity": "sha512-hVYATkHSN6Mz67LuP5QqRvdblg+kLb9dqGlaMJZI0CtuQYRtkbrlPz5yII9SJGMyUYMQHbZKsc68eT7+LZHKbA==", "dependencies": { - "@percy/cli-command": "1.26.2", + "@percy/cli-command": "1.27.1", "yaml": "^2.0.0" }, "engines": { @@ -343,11 +366,11 @@ } }, "node_modules/@percy/cli-upload": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli-upload/-/cli-upload-1.26.2.tgz", - "integrity": "sha512-10dJn3paz1jFQaNf59j0Kt6pkz1BDjlSstfS5f74Lwi8g3tFXLv3M/B25bOdDxLrToX1Dg8ke71wyIGTCqeLjg==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli-upload/-/cli-upload-1.27.1.tgz", + "integrity": "sha512-4Kcft6ceuWy+Q5T4PKJXI63/QxCRFtCJUoU0QYrWo6TKKsescdE7/zWy6YESqHIm+XzBhZFYHwdYRsIbnjqUqQ==", "dependencies": { - "@percy/cli-command": "1.26.2", + "@percy/cli-command": "1.27.1", "fast-glob": "^3.2.11", "image-size": "^1.0.0" }, @@ -356,23 +379,23 @@ } }, "node_modules/@percy/client": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/client/-/client-1.26.2.tgz", - "integrity": "sha512-0aJtwiL8Pt06O+4nHGBoXU2uaJmYR+Df846HCpJmKhMuS5X/OKZgd2DiOlRs61JPwP+FuHFZleUvrhngyyJrzQ==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/client/-/client-1.27.1.tgz", + "integrity": "sha512-GvjrGUaVdjMwx8ODDja3Kdb6tXYxRxv4PLXfXg0Wbn5jIfcjicojOc0mSGxcLvRGu5tmKrE3fusMhYYtKlLihg==", "dependencies": { - "@percy/env": "1.26.2", - "@percy/logger": "1.26.2" + "@percy/env": "1.27.1", + "@percy/logger": "1.27.1" }, "engines": { "node": ">=14" } }, "node_modules/@percy/config": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/config/-/config-1.26.2.tgz", - "integrity": "sha512-x0Y0I0m6Kcluzt/CPQzNITKYGNboWBqTa879tSxTIayk3sR7omjjQdPgNpVpwDwcx05h2sR1eFz6Plq+EF55cA==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/config/-/config-1.27.1.tgz", + "integrity": "sha512-O7GgSrpjPeRmUmPWpFrg7368lWTJj8BtKY18Ztpq2j7bef5HCFi0AxvuOjwIH/GEwzGm/cI7ZK2kA/XGTOtpsg==", "dependencies": { - "@percy/logger": "1.26.2", + "@percy/logger": "1.27.1", "ajv": "^8.6.2", "cosmiconfig": "^8.0.0", "yaml": "^2.0.0" @@ -382,15 +405,16 @@ } }, "node_modules/@percy/core": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/core/-/core-1.26.2.tgz", - "integrity": "sha512-cULZaGOH0xSgA5asRpuGUzcKBVItLLFJ2jhZn60n+8ueKqXpbSe7ggNKzaMoSVvNh6T5Kd8ZMYAzdg+Ijf6qeg==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/core/-/core-1.27.1.tgz", + "integrity": "sha512-/XsOCk/XHYf9MAqcituMGrYeITiav9BW1oGM0LfmU1Gne/YnEvur4JwpJ4uJ0OrNennwIqMuAVM9Y5y/xfZ39w==", "hasInstallScript": true, "dependencies": { - "@percy/client": "1.26.2", - "@percy/config": "1.26.2", - "@percy/dom": "1.26.2", - "@percy/logger": "1.26.2", + "@percy/client": "1.27.1", + "@percy/config": "1.27.1", + "@percy/dom": "1.27.1", + "@percy/logger": "1.27.1", + "@percy/webdriver-utils": "1.27.1", "content-disposition": "^0.5.4", "cross-spawn": "^7.0.3", "extract-zip": "^2.0.1", @@ -406,25 +430,25 @@ } }, "node_modules/@percy/dom": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/dom/-/dom-1.26.2.tgz", - "integrity": "sha512-LaB5yNk3Ds2ouOXI5YtszJY8f+Uj61fyOknOE9zWF57rSfOck92uK0DcgVtBMowQTzTIzdHn+i4ZnIBQ+4ex8g==" + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/dom/-/dom-1.27.1.tgz", + "integrity": "sha512-duYA3ATjADtn05VuGIfezgdCq+8ASwcY6Mzk857DzFIlJd/6T2P8v1dy66RRp78efzmIMtRroGy9SqWonlaAEA==" }, "node_modules/@percy/env": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/env/-/env-1.26.2.tgz", - "integrity": "sha512-aKSN1r3G/evQTc5aAEheSU5oq2sJVWcZvIqiJTKfmw2K+91R6VLEUWMemMPHSAAyi2GCrV2D2JEpFtFWEeXQyQ==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/env/-/env-1.27.1.tgz", + "integrity": "sha512-Og0vQfV9zJftYYOY3PVtu+r7Ut/xr72BP3jH3rkeQJHnFKLkwemGbJpgSpMz7IbzWXSxYONkNfUtLvXwEsRpAw==", "dependencies": { - "@percy/logger": "1.26.2" + "@percy/logger": "1.27.1" }, "engines": { "node": ">=14" } }, "node_modules/@percy/logger": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/logger/-/logger-1.26.2.tgz", - "integrity": "sha512-EVwPoUJWm2ESn3Llorc6D3mqwQeALgaDerlsXA7JvKOk2Xaf68CRk5akI8NBN6rZoWIx8t5WjjJksGzPvMYYnw==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/logger/-/logger-1.27.1.tgz", + "integrity": "sha512-jH++paKzIY94fQYQBEedVTfO36I8WBqm2RNl/xzsnLuAwNEX5+JUsaPcbLrwRzhn/tCv+8h9xEBuE9nj23krIA==", "engines": { "node": ">=14" } @@ -444,29 +468,37 @@ } }, "node_modules/@percy/sdk-utils": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@percy/sdk-utils/-/sdk-utils-1.6.0.tgz", - "integrity": "sha512-4cSkWqpu7uK9zzeVwtMWrgGbP34GUlvZsWdEEt98ep6ZECQA+iGB75pOpIVwcsHKXtkDRE6fgugtxNXs5uHpMg==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/sdk-utils/-/sdk-utils-1.27.1.tgz", + "integrity": "sha512-I12rBQYySyt8VILgYnI19obYtkaIPuFR07HVBrHLsRHiLUf92XzAtTI482qrnYwybCgU9mb9o3Kb7KtMJ0nalA==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@percy/webdriver-utils": { + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/webdriver-utils/-/webdriver-utils-1.27.1.tgz", + "integrity": "sha512-bPj16YmvV84egtMHyYEhlGYjwJTk0f6vopcbCYWgMgvQp78Y/RKwRm8ZpWZfW2rTqElNRudrhKdqcEeaG6qd9g==", + "dependencies": { + "@percy/config": "1.27.1", + "@percy/sdk-utils": "1.27.1" + }, "engines": { "node": ">=14" } }, "node_modules/@playwright/test": { - "version": "1.36.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.36.1.tgz", - "integrity": "sha512-YK7yGWK0N3C2QInPU6iaf/L3N95dlGdbsezLya4n0ZCh3IL7VgPGxC6Gnznh9ApWdOmkJeleT2kMTcWPRZvzqg==", + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.38.0.tgz", + "integrity": "sha512-xis/RXXsLxwThKnlIXouxmIvvT3zvQj1JE39GsNieMUrMpb3/GySHDh2j8itCG22qKVD4MYLBp7xB73cUW/UUw==", "dependencies": { - "@types/node": "*", - "playwright-core": "1.36.1" + "playwright": "1.38.0" }, "bin": { "playwright": "cli.js" }, "engines": { "node": ">=16" - }, - "optionalDependencies": { - "fsevents": "2.3.2" } }, "node_modules/@types/json-schema": { @@ -476,20 +508,21 @@ "dev": true }, "node_modules/@types/node": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.19.tgz", - "integrity": "sha512-PfeQhvcMR4cPFVuYfBN4ifG7p9c+Dlh3yUZR6k+5yQK7wX3gDgVxBly4/WkBRs9x4dmcy1TVl08SY67wwtEvmA==" + "version": "20.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.1.tgz", + "integrity": "sha512-4LcJvuXQlv4lTHnxwyHQZ3uR9Zw2j7m1C9DfuwoTFQQP4Pmu04O6IfLYgMmHoOCt0nosItLLZAH+sOrRE0Bo8g==", + "optional": true }, "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.2.tgz", - "integrity": "sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.4.tgz", + "integrity": "sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA==", "dev": true }, "node_modules/@types/yauzl": { @@ -502,21 +535,20 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.1.0.tgz", - "integrity": "sha512-qg7Bm5TyP/I7iilGyp6DRqqkt8na00lI6HbjWZObgk3FFSzH5ypRwAHXJhJkwiRtTcfn+xYQIMOR5kJgpo6upw==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.0.tgz", + "integrity": "sha512-gUqtknHm0TDs1LhY12K2NA3Rmlmp88jK9Tx8vGZMfHeNMLE3GH2e9TRub+y+SOjuYgtOmok+wt1AyDPZqxbNag==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.1.0", - "@typescript-eslint/type-utils": "6.1.0", - "@typescript-eslint/utils": "6.1.0", - "@typescript-eslint/visitor-keys": "6.1.0", + "@typescript-eslint/scope-manager": "6.7.0", + "@typescript-eslint/type-utils": "6.7.0", + "@typescript-eslint/utils": "6.7.0", + "@typescript-eslint/visitor-keys": "6.7.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", "natural-compare": "^1.4.0", - "natural-compare-lite": "^1.4.0", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -538,15 +570,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.1.0.tgz", - "integrity": "sha512-hIzCPvX4vDs4qL07SYzyomamcs2/tQYXg5DtdAfj35AyJ5PIUqhsLf4YrEIFzZcND7R2E8tpQIZKayxg8/6Wbw==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.0.tgz", + "integrity": "sha512-jZKYwqNpNm5kzPVP5z1JXAuxjtl2uG+5NpaMocFPTNC2EdYIgbXIPImObOkhbONxtFTTdoZstLZefbaK+wXZng==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.1.0", - "@typescript-eslint/types": "6.1.0", - "@typescript-eslint/typescript-estree": "6.1.0", - "@typescript-eslint/visitor-keys": "6.1.0", + "@typescript-eslint/scope-manager": "6.7.0", + "@typescript-eslint/types": "6.7.0", + "@typescript-eslint/typescript-estree": "6.7.0", + "@typescript-eslint/visitor-keys": "6.7.0", "debug": "^4.3.4" }, "engines": { @@ -566,13 +598,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.1.0.tgz", - "integrity": "sha512-AxjgxDn27hgPpe2rQe19k0tXw84YCOsjDJ2r61cIebq1t+AIxbgiXKvD4999Wk49GVaAcdJ/d49FYel+Pp3jjw==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.0.tgz", + "integrity": "sha512-lAT1Uau20lQyjoLUQ5FUMSX/dS07qux9rYd5FGzKz/Kf8W8ccuvMyldb8hadHdK/qOI7aikvQWqulnEq2nCEYA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.1.0", - "@typescript-eslint/visitor-keys": "6.1.0" + "@typescript-eslint/types": "6.7.0", + "@typescript-eslint/visitor-keys": "6.7.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -583,13 +615,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.1.0.tgz", - "integrity": "sha512-kFXBx6QWS1ZZ5Ni89TyT1X9Ag6RXVIVhqDs0vZE/jUeWlBv/ixq2diua6G7ece6+fXw3TvNRxP77/5mOMusx2w==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.0.tgz", + "integrity": "sha512-f/QabJgDAlpSz3qduCyQT0Fw7hHpmhOzY/Rv6zO3yO+HVIdPfIWhrQoAyG+uZVtWAIS85zAyzgAFfyEr+MgBpg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.1.0", - "@typescript-eslint/utils": "6.1.0", + "@typescript-eslint/typescript-estree": "6.7.0", + "@typescript-eslint/utils": "6.7.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -610,9 +642,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.1.0.tgz", - "integrity": "sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.0.tgz", + "integrity": "sha512-ihPfvOp7pOcN/ysoj0RpBPOx3HQTJTrIN8UZK+WFd3/iDeFHHqeyYxa4hQk4rMhsz9H9mXpR61IzwlBVGXtl9Q==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -623,13 +655,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.1.0.tgz", - "integrity": "sha512-nUKAPWOaP/tQjU1IQw9sOPCDavs/iU5iYLiY/6u7gxS7oKQoi4aUxXS1nrrVGTyBBaGesjkcwwHkbkiD5eBvcg==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.0.tgz", + "integrity": "sha512-dPvkXj3n6e9yd/0LfojNU8VMUGHWiLuBZvbM6V6QYD+2qxqInE7J+J/ieY2iGwR9ivf/R/haWGkIj04WVUeiSQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.1.0", - "@typescript-eslint/visitor-keys": "6.1.0", + "@typescript-eslint/types": "6.7.0", + "@typescript-eslint/visitor-keys": "6.7.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -650,17 +682,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.1.0.tgz", - "integrity": "sha512-wp652EogZlKmQoMS5hAvWqRKplXvkuOnNzZSE0PVvsKjpexd/XznRVHAtrfHFYmqaJz0DFkjlDsGYC9OXw+OhQ==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.0.tgz", + "integrity": "sha512-MfCq3cM0vh2slSikQYqK2Gq52gvOhe57vD2RM3V4gQRZYX4rDPnKLu5p6cm89+LJiGlwEXU8hkYxhqqEC/V3qA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.1.0", - "@typescript-eslint/types": "6.1.0", - "@typescript-eslint/typescript-estree": "6.1.0", + "@typescript-eslint/scope-manager": "6.7.0", + "@typescript-eslint/types": "6.7.0", + "@typescript-eslint/typescript-estree": "6.7.0", "semver": "^7.5.4" }, "engines": { @@ -675,12 +707,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.1.0.tgz", - "integrity": "sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.0.tgz", + "integrity": "sha512-/C1RVgKFDmGMcVGeD8HjKv2bd72oI1KxQDeY8uc66gw9R0OK0eMq48cA+jv9/2Ag6cdrsUGySm1yzYmfz0hxwQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.1.0", + "@typescript-eslint/types": "6.7.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -776,9 +808,9 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "node_modules/axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", + "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==", "engines": { "node": ">=4" } @@ -929,13 +961,13 @@ } }, "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dependencies": { - "import-fresh": "^3.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", + "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "engines": { @@ -943,6 +975,14 @@ }, "funding": { "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/cross-env": { @@ -1078,27 +1118,27 @@ } }, "node_modules/eslint": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", - "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", + "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.49.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -1132,9 +1172,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", - "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -1148,9 +1188,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1265,9 +1305,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -1486,9 +1526,9 @@ } }, "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1819,12 +1859,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -1980,10 +2014,27 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/playwright": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.38.0.tgz", + "integrity": "sha512-fJGw+HO0YY+fU/F1N57DMO+TmXHTrmr905J05zwAQE9xkuwP/QLDk63rVhmyxh03dYnEhnRbsdbH9B0UVVRB3A==", + "dependencies": { + "playwright-core": "1.38.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, "node_modules/playwright-core": { - "version": "1.36.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.36.1.tgz", - "integrity": "sha512-7+tmPuMcEW4xeCL9cp9KxmYpQYHKkyjwoXRnoeTowaeNat8PoBMk/HwCYhqkH2fRkshfKEOiVus/IhID2Pg8kg==", + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.38.0.tgz", + "integrity": "sha512-f8z1y8J9zvmHoEhKgspmCvOExF2XdcxMW8jNRuX4vkQFrzV4MlZ55iwb5QeyiFQgOFCUolXiRHgpjSEnqvO48g==", "bin": { "playwright-core": "cli.js" }, @@ -2001,15 +2052,15 @@ } }, "node_modules/prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -2271,16 +2322,16 @@ } }, "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", - "dev": true, + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" } }, "node_modules/unfetch": { @@ -2297,9 +2348,13 @@ } }, "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==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } @@ -2332,9 +2387,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", "engines": { "node": ">=10.0.0" }, @@ -2358,9 +2413,9 @@ "dev": true }, "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", "engines": { "node": ">= 14" } @@ -2403,25 +2458,43 @@ } }, "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "requires": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + } } }, "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" + "version": "7.22.19", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.19.tgz", + "integrity": "sha512-Tinq7ybnEPFFXhlYOYFiSjespWQk0dq2dRNAiMdRTOYQzEGqnnNyrTxPYHP5r6wGjlF1rFgABdDV0g8EwD6Qbg==" }, "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", "requires": { "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -2452,15 +2525,15 @@ } }, "@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", + "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", "dev": true }, "@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -2495,15 +2568,15 @@ } }, "@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", + "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -2547,114 +2620,115 @@ } }, "@percy/cli": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli/-/cli-1.26.2.tgz", - "integrity": "sha512-RKuylqXNfVAO+3XpUpFh67vnjB/tvSh98aDuEf1z8CNuTBSYA7YJbB5lxOnEcQ3DRMaQuemZ1zX0UyiHxLnjEw==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli/-/cli-1.27.1.tgz", + "integrity": "sha512-2rU4NFe8TshV2sF+fs8bseGNohpLuRILW4t/Is7PCFYAitla1nvO0mndy0INct5VWc2KKewnq+2ZQONx3iNXLw==", "requires": { - "@percy/cli-app": "1.26.2", - "@percy/cli-build": "1.26.2", - "@percy/cli-command": "1.26.2", - "@percy/cli-config": "1.26.2", - "@percy/cli-exec": "1.26.2", - "@percy/cli-snapshot": "1.26.2", - "@percy/cli-upload": "1.26.2", - "@percy/client": "1.26.2", - "@percy/logger": "1.26.2" + "@percy/cli-app": "1.27.1", + "@percy/cli-build": "1.27.1", + "@percy/cli-command": "1.27.1", + "@percy/cli-config": "1.27.1", + "@percy/cli-exec": "1.27.1", + "@percy/cli-snapshot": "1.27.1", + "@percy/cli-upload": "1.27.1", + "@percy/client": "1.27.1", + "@percy/logger": "1.27.1" } }, "@percy/cli-app": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli-app/-/cli-app-1.26.2.tgz", - "integrity": "sha512-eOg1vs6J3eINREf4SWt7YO9KJwGru2JPOXlV23fZgLaSw1iEaZqpa1NmeMlSX2NsU+J8JdAox1hkmO884QHE8A==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli-app/-/cli-app-1.27.1.tgz", + "integrity": "sha512-Pat2BogPUmyciURUWbI1PQtUdPlhUrnS6aEVO1gNrulDeYF6j4LgD4SycCTj5L/xJijMXa3qFkZwW1VSdx97Yg==", "requires": { - "@percy/cli-command": "1.26.2", - "@percy/cli-exec": "1.26.2" + "@percy/cli-command": "1.27.1", + "@percy/cli-exec": "1.27.1" } }, "@percy/cli-build": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli-build/-/cli-build-1.26.2.tgz", - "integrity": "sha512-VJJcLfWmKhVy7WHojpPtslRA8rm77umh/f7kr3kcYE2HVXDVRcH8r72zClglhYdLcrIfb/3BUCX6JXxJfgM7tg==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli-build/-/cli-build-1.27.1.tgz", + "integrity": "sha512-EtktlYj4kzsBkrBSOVLKrvZWew/nq9mw/Z2m8mU4Jf7Pc779rQGUVCuI8PBhOI59c3JTjnY8KVaaj4Y+z9X+fg==", "requires": { - "@percy/cli-command": "1.26.2" + "@percy/cli-command": "1.27.1" } }, "@percy/cli-command": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli-command/-/cli-command-1.26.2.tgz", - "integrity": "sha512-G5qALrrprUO5Zc3TrEPzqys6+clWtXjHGWVcHYMaBY0i7xwH4D0FaqtzkGRjiUxbsb353qV35B48oKsm0FJDmg==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli-command/-/cli-command-1.27.1.tgz", + "integrity": "sha512-LK9YwE7qr67EtShVVjc20aJaRF8BFjZ8VWneLVoN73IYgpwBq96J4AUomoqfRpPNkpKvv6wDZFpr30xFokbrHA==", "requires": { - "@percy/config": "1.26.2", - "@percy/core": "1.26.2", - "@percy/logger": "1.26.2" + "@percy/config": "1.27.1", + "@percy/core": "1.27.1", + "@percy/logger": "1.27.1" } }, "@percy/cli-config": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli-config/-/cli-config-1.26.2.tgz", - "integrity": "sha512-E/zb2Eg1HK8JDzloY0FdguZS0nE47QwZoW9uxMw8QD2wykxIkbQeJq8Jl5a48BJ3rTj8TnKMzyTo7yMALqnISw==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli-config/-/cli-config-1.27.1.tgz", + "integrity": "sha512-bEzXfdP+RRxHekZ5pULsuuKHL0K9E81IFcEqZ8DcE3gnrpWQnIFPP2fTHF6WgWuXYHzJnsoIIm90LaWYc4+BJQ==", "requires": { - "@percy/cli-command": "1.26.2" + "@percy/cli-command": "1.27.1" } }, "@percy/cli-exec": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli-exec/-/cli-exec-1.26.2.tgz", - "integrity": "sha512-7gMzZshrtPbxHLkiduA7OcCqbhxwAZ17x3C8XdFYwzvW3MpghKhSpwK24hGH3169nvnoRjf5GzG7CHIBVaEndQ==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli-exec/-/cli-exec-1.27.1.tgz", + "integrity": "sha512-8xB7Iq3fh+QfuViUeZQXZeJNoFzDf0IhYUhhlEDXPcL2sgjrLiy9QHBdq6Yn3/8gHlDJyzpkej6hzFqERYZs1g==", "requires": { - "@percy/cli-command": "1.26.2", + "@percy/cli-command": "1.27.1", "cross-spawn": "^7.0.3", "which": "^2.0.2" } }, "@percy/cli-snapshot": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli-snapshot/-/cli-snapshot-1.26.2.tgz", - "integrity": "sha512-R0rtuRkxzOfjr6N2XQyPBmL+zuXvbmNqjuBMDo8bmPy+j+b16TWFn25Q6r3jKLPdRkXVXrAMFsEsp9um1tLVrQ==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli-snapshot/-/cli-snapshot-1.27.1.tgz", + "integrity": "sha512-hVYATkHSN6Mz67LuP5QqRvdblg+kLb9dqGlaMJZI0CtuQYRtkbrlPz5yII9SJGMyUYMQHbZKsc68eT7+LZHKbA==", "requires": { - "@percy/cli-command": "1.26.2", + "@percy/cli-command": "1.27.1", "yaml": "^2.0.0" } }, "@percy/cli-upload": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/cli-upload/-/cli-upload-1.26.2.tgz", - "integrity": "sha512-10dJn3paz1jFQaNf59j0Kt6pkz1BDjlSstfS5f74Lwi8g3tFXLv3M/B25bOdDxLrToX1Dg8ke71wyIGTCqeLjg==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/cli-upload/-/cli-upload-1.27.1.tgz", + "integrity": "sha512-4Kcft6ceuWy+Q5T4PKJXI63/QxCRFtCJUoU0QYrWo6TKKsescdE7/zWy6YESqHIm+XzBhZFYHwdYRsIbnjqUqQ==", "requires": { - "@percy/cli-command": "1.26.2", + "@percy/cli-command": "1.27.1", "fast-glob": "^3.2.11", "image-size": "^1.0.0" } }, "@percy/client": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/client/-/client-1.26.2.tgz", - "integrity": "sha512-0aJtwiL8Pt06O+4nHGBoXU2uaJmYR+Df846HCpJmKhMuS5X/OKZgd2DiOlRs61JPwP+FuHFZleUvrhngyyJrzQ==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/client/-/client-1.27.1.tgz", + "integrity": "sha512-GvjrGUaVdjMwx8ODDja3Kdb6tXYxRxv4PLXfXg0Wbn5jIfcjicojOc0mSGxcLvRGu5tmKrE3fusMhYYtKlLihg==", "requires": { - "@percy/env": "1.26.2", - "@percy/logger": "1.26.2" + "@percy/env": "1.27.1", + "@percy/logger": "1.27.1" } }, "@percy/config": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/config/-/config-1.26.2.tgz", - "integrity": "sha512-x0Y0I0m6Kcluzt/CPQzNITKYGNboWBqTa879tSxTIayk3sR7omjjQdPgNpVpwDwcx05h2sR1eFz6Plq+EF55cA==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/config/-/config-1.27.1.tgz", + "integrity": "sha512-O7GgSrpjPeRmUmPWpFrg7368lWTJj8BtKY18Ztpq2j7bef5HCFi0AxvuOjwIH/GEwzGm/cI7ZK2kA/XGTOtpsg==", "requires": { - "@percy/logger": "1.26.2", + "@percy/logger": "1.27.1", "ajv": "^8.6.2", "cosmiconfig": "^8.0.0", "yaml": "^2.0.0" } }, "@percy/core": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/core/-/core-1.26.2.tgz", - "integrity": "sha512-cULZaGOH0xSgA5asRpuGUzcKBVItLLFJ2jhZn60n+8ueKqXpbSe7ggNKzaMoSVvNh6T5Kd8ZMYAzdg+Ijf6qeg==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/core/-/core-1.27.1.tgz", + "integrity": "sha512-/XsOCk/XHYf9MAqcituMGrYeITiav9BW1oGM0LfmU1Gne/YnEvur4JwpJ4uJ0OrNennwIqMuAVM9Y5y/xfZ39w==", "requires": { - "@percy/client": "1.26.2", - "@percy/config": "1.26.2", - "@percy/dom": "1.26.2", - "@percy/logger": "1.26.2", + "@percy/client": "1.27.1", + "@percy/config": "1.27.1", + "@percy/dom": "1.27.1", + "@percy/logger": "1.27.1", + "@percy/webdriver-utils": "1.27.1", "content-disposition": "^0.5.4", "cross-spawn": "^7.0.3", "extract-zip": "^2.0.1", @@ -2667,22 +2741,22 @@ } }, "@percy/dom": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/dom/-/dom-1.26.2.tgz", - "integrity": "sha512-LaB5yNk3Ds2ouOXI5YtszJY8f+Uj61fyOknOE9zWF57rSfOck92uK0DcgVtBMowQTzTIzdHn+i4ZnIBQ+4ex8g==" + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/dom/-/dom-1.27.1.tgz", + "integrity": "sha512-duYA3ATjADtn05VuGIfezgdCq+8ASwcY6Mzk857DzFIlJd/6T2P8v1dy66RRp78efzmIMtRroGy9SqWonlaAEA==" }, "@percy/env": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/env/-/env-1.26.2.tgz", - "integrity": "sha512-aKSN1r3G/evQTc5aAEheSU5oq2sJVWcZvIqiJTKfmw2K+91R6VLEUWMemMPHSAAyi2GCrV2D2JEpFtFWEeXQyQ==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/env/-/env-1.27.1.tgz", + "integrity": "sha512-Og0vQfV9zJftYYOY3PVtu+r7Ut/xr72BP3jH3rkeQJHnFKLkwemGbJpgSpMz7IbzWXSxYONkNfUtLvXwEsRpAw==", "requires": { - "@percy/logger": "1.26.2" + "@percy/logger": "1.27.1" } }, "@percy/logger": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/@percy/logger/-/logger-1.26.2.tgz", - "integrity": "sha512-EVwPoUJWm2ESn3Llorc6D3mqwQeALgaDerlsXA7JvKOk2Xaf68CRk5akI8NBN6rZoWIx8t5WjjJksGzPvMYYnw==" + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/logger/-/logger-1.27.1.tgz", + "integrity": "sha512-jH++paKzIY94fQYQBEedVTfO36I8WBqm2RNl/xzsnLuAwNEX5+JUsaPcbLrwRzhn/tCv+8h9xEBuE9nj23krIA==" }, "@percy/playwright": { "version": "1.0.4", @@ -2693,18 +2767,25 @@ } }, "@percy/sdk-utils": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@percy/sdk-utils/-/sdk-utils-1.6.0.tgz", - "integrity": "sha512-4cSkWqpu7uK9zzeVwtMWrgGbP34GUlvZsWdEEt98ep6ZECQA+iGB75pOpIVwcsHKXtkDRE6fgugtxNXs5uHpMg==" + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/sdk-utils/-/sdk-utils-1.27.1.tgz", + "integrity": "sha512-I12rBQYySyt8VILgYnI19obYtkaIPuFR07HVBrHLsRHiLUf92XzAtTI482qrnYwybCgU9mb9o3Kb7KtMJ0nalA==" + }, + "@percy/webdriver-utils": { + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@percy/webdriver-utils/-/webdriver-utils-1.27.1.tgz", + "integrity": "sha512-bPj16YmvV84egtMHyYEhlGYjwJTk0f6vopcbCYWgMgvQp78Y/RKwRm8ZpWZfW2rTqElNRudrhKdqcEeaG6qd9g==", + "requires": { + "@percy/config": "1.27.1", + "@percy/sdk-utils": "1.27.1" + } }, "@playwright/test": { - "version": "1.36.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.36.1.tgz", - "integrity": "sha512-YK7yGWK0N3C2QInPU6iaf/L3N95dlGdbsezLya4n0ZCh3IL7VgPGxC6Gnznh9ApWdOmkJeleT2kMTcWPRZvzqg==", + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.38.0.tgz", + "integrity": "sha512-xis/RXXsLxwThKnlIXouxmIvvT3zvQj1JE39GsNieMUrMpb3/GySHDh2j8itCG22qKVD4MYLBp7xB73cUW/UUw==", "requires": { - "@types/node": "*", - "fsevents": "2.3.2", - "playwright-core": "1.36.1" + "playwright": "1.38.0" } }, "@types/json-schema": { @@ -2714,20 +2795,21 @@ "dev": true }, "@types/node": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.19.tgz", - "integrity": "sha512-PfeQhvcMR4cPFVuYfBN4ifG7p9c+Dlh3yUZR6k+5yQK7wX3gDgVxBly4/WkBRs9x4dmcy1TVl08SY67wwtEvmA==" + "version": "20.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.1.tgz", + "integrity": "sha512-4LcJvuXQlv4lTHnxwyHQZ3uR9Zw2j7m1C9DfuwoTFQQP4Pmu04O6IfLYgMmHoOCt0nosItLLZAH+sOrRE0Bo8g==", + "optional": true }, "@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", "dev": true }, "@types/uuid": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.2.tgz", - "integrity": "sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.4.tgz", + "integrity": "sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA==", "dev": true }, "@types/yauzl": { @@ -2740,74 +2822,73 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.1.0.tgz", - "integrity": "sha512-qg7Bm5TyP/I7iilGyp6DRqqkt8na00lI6HbjWZObgk3FFSzH5ypRwAHXJhJkwiRtTcfn+xYQIMOR5kJgpo6upw==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.0.tgz", + "integrity": "sha512-gUqtknHm0TDs1LhY12K2NA3Rmlmp88jK9Tx8vGZMfHeNMLE3GH2e9TRub+y+SOjuYgtOmok+wt1AyDPZqxbNag==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.1.0", - "@typescript-eslint/type-utils": "6.1.0", - "@typescript-eslint/utils": "6.1.0", - "@typescript-eslint/visitor-keys": "6.1.0", + "@typescript-eslint/scope-manager": "6.7.0", + "@typescript-eslint/type-utils": "6.7.0", + "@typescript-eslint/utils": "6.7.0", + "@typescript-eslint/visitor-keys": "6.7.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", "natural-compare": "^1.4.0", - "natural-compare-lite": "^1.4.0", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/parser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.1.0.tgz", - "integrity": "sha512-hIzCPvX4vDs4qL07SYzyomamcs2/tQYXg5DtdAfj35AyJ5PIUqhsLf4YrEIFzZcND7R2E8tpQIZKayxg8/6Wbw==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.0.tgz", + "integrity": "sha512-jZKYwqNpNm5kzPVP5z1JXAuxjtl2uG+5NpaMocFPTNC2EdYIgbXIPImObOkhbONxtFTTdoZstLZefbaK+wXZng==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "6.1.0", - "@typescript-eslint/types": "6.1.0", - "@typescript-eslint/typescript-estree": "6.1.0", - "@typescript-eslint/visitor-keys": "6.1.0", + "@typescript-eslint/scope-manager": "6.7.0", + "@typescript-eslint/types": "6.7.0", + "@typescript-eslint/typescript-estree": "6.7.0", + "@typescript-eslint/visitor-keys": "6.7.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.1.0.tgz", - "integrity": "sha512-AxjgxDn27hgPpe2rQe19k0tXw84YCOsjDJ2r61cIebq1t+AIxbgiXKvD4999Wk49GVaAcdJ/d49FYel+Pp3jjw==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.0.tgz", + "integrity": "sha512-lAT1Uau20lQyjoLUQ5FUMSX/dS07qux9rYd5FGzKz/Kf8W8ccuvMyldb8hadHdK/qOI7aikvQWqulnEq2nCEYA==", "dev": true, "requires": { - "@typescript-eslint/types": "6.1.0", - "@typescript-eslint/visitor-keys": "6.1.0" + "@typescript-eslint/types": "6.7.0", + "@typescript-eslint/visitor-keys": "6.7.0" } }, "@typescript-eslint/type-utils": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.1.0.tgz", - "integrity": "sha512-kFXBx6QWS1ZZ5Ni89TyT1X9Ag6RXVIVhqDs0vZE/jUeWlBv/ixq2diua6G7ece6+fXw3TvNRxP77/5mOMusx2w==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.0.tgz", + "integrity": "sha512-f/QabJgDAlpSz3qduCyQT0Fw7hHpmhOzY/Rv6zO3yO+HVIdPfIWhrQoAyG+uZVtWAIS85zAyzgAFfyEr+MgBpg==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "6.1.0", - "@typescript-eslint/utils": "6.1.0", + "@typescript-eslint/typescript-estree": "6.7.0", + "@typescript-eslint/utils": "6.7.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/types": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.1.0.tgz", - "integrity": "sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.0.tgz", + "integrity": "sha512-ihPfvOp7pOcN/ysoj0RpBPOx3HQTJTrIN8UZK+WFd3/iDeFHHqeyYxa4hQk4rMhsz9H9mXpR61IzwlBVGXtl9Q==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.1.0.tgz", - "integrity": "sha512-nUKAPWOaP/tQjU1IQw9sOPCDavs/iU5iYLiY/6u7gxS7oKQoi4aUxXS1nrrVGTyBBaGesjkcwwHkbkiD5eBvcg==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.0.tgz", + "integrity": "sha512-dPvkXj3n6e9yd/0LfojNU8VMUGHWiLuBZvbM6V6QYD+2qxqInE7J+J/ieY2iGwR9ivf/R/haWGkIj04WVUeiSQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.1.0", - "@typescript-eslint/visitor-keys": "6.1.0", + "@typescript-eslint/types": "6.7.0", + "@typescript-eslint/visitor-keys": "6.7.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2816,27 +2897,27 @@ } }, "@typescript-eslint/utils": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.1.0.tgz", - "integrity": "sha512-wp652EogZlKmQoMS5hAvWqRKplXvkuOnNzZSE0PVvsKjpexd/XznRVHAtrfHFYmqaJz0DFkjlDsGYC9OXw+OhQ==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.0.tgz", + "integrity": "sha512-MfCq3cM0vh2slSikQYqK2Gq52gvOhe57vD2RM3V4gQRZYX4rDPnKLu5p6cm89+LJiGlwEXU8hkYxhqqEC/V3qA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.1.0", - "@typescript-eslint/types": "6.1.0", - "@typescript-eslint/typescript-estree": "6.1.0", + "@typescript-eslint/scope-manager": "6.7.0", + "@typescript-eslint/types": "6.7.0", + "@typescript-eslint/typescript-estree": "6.7.0", "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.1.0.tgz", - "integrity": "sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.0.tgz", + "integrity": "sha512-/C1RVgKFDmGMcVGeD8HjKv2bd72oI1KxQDeY8uc66gw9R0OK0eMq48cA+jv9/2Ag6cdrsUGySm1yzYmfz0hxwQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.1.0", + "@typescript-eslint/types": "6.7.0", "eslint-visitor-keys": "^3.4.1" } }, @@ -2900,9 +2981,9 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==" + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", + "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==" }, "balanced-match": { "version": "1.0.2", @@ -3016,13 +3097,13 @@ } }, "cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "requires": { - "import-fresh": "^3.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", + "parse-json": "^5.2.0", "path-type": "^4.0.0" } }, @@ -3115,27 +3196,27 @@ "dev": true }, "eslint": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", - "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", + "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.49.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3180,9 +3261,9 @@ } }, "eslint-scope": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", - "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -3190,9 +3271,9 @@ } }, "eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true }, "espree": { @@ -3253,9 +3334,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3414,9 +3495,9 @@ } }, "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -3664,12 +3745,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -3770,10 +3845,19 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, + "playwright": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.38.0.tgz", + "integrity": "sha512-fJGw+HO0YY+fU/F1N57DMO+TmXHTrmr905J05zwAQE9xkuwP/QLDk63rVhmyxh03dYnEhnRbsdbH9B0UVVRB3A==", + "requires": { + "fsevents": "2.3.2", + "playwright-core": "1.38.0" + } + }, "playwright-core": { - "version": "1.36.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.36.1.tgz", - "integrity": "sha512-7+tmPuMcEW4xeCL9cp9KxmYpQYHKkyjwoXRnoeTowaeNat8PoBMk/HwCYhqkH2fRkshfKEOiVus/IhID2Pg8kg==" + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.38.0.tgz", + "integrity": "sha512-f8z1y8J9zvmHoEhKgspmCvOExF2XdcxMW8jNRuX4vkQFrzV4MlZ55iwb5QeyiFQgOFCUolXiRHgpjSEnqvO48g==" }, "prelude-ls": { "version": "1.2.1", @@ -3782,9 +3866,9 @@ "dev": true }, "prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true }, "pump": { @@ -3938,10 +4022,10 @@ "dev": true }, "typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", - "dev": true + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "devOptional": true }, "unfetch": { "version": "5.0.0", @@ -3957,9 +4041,9 @@ } }, "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" }, "web-streams-polyfill": { "version": "3.2.1", @@ -3980,9 +4064,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", "requires": {} }, "yallist": { @@ -3992,9 +4076,9 @@ "dev": true }, "yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==" }, "yauzl": { "version": "2.10.0", diff --git a/e2e-tests/playwright/package.json b/e2e-tests/playwright/package.json index 6b491cf198..5f9aac389b 100644 --- a/e2e-tests/playwright/package.json +++ b/e2e-tests/playwright/package.json @@ -4,34 +4,36 @@ "percy": "cross-env PERCY_TOKEN=$PERCY_TOKEN PW_PERCY_ENABLE=true percy exec -- playwright test --project=chrome --project=iphone --project=ipad", "tsc": "tsc -b", "lint": "eslint . --ext .js,.ts", - "prettier": "prettier --write .", + "prettier": "prettier . --check", + "prettier:fix": "prettier --write .", "check": "npm run tsc && npm run lint && npm run prettier", "codegen": "cross-env playwright codegen $PW_BASE_URL", "playwright-ui": "playwright test --ui", "test-slomo": "cross-env PW_SNAPSHOT_ENABLE=true PW_SLOWMO=1000 playwright test", - "show-report": "npx playwright show-report" + "show-report": "npx playwright show-report", + "postinstall": "npx playwright install" }, "dependencies": { "@axe-core/playwright": "4.7.3", - "@percy/cli": "1.26.2", + "@percy/cli": "1.27.1", "@percy/playwright": "1.0.4", - "@playwright/test": "1.36.1", + "@playwright/test": "1.38.0", "async-wait-until": "2.0.12", - "axe-core": "4.7.2", + "axe-core": "4.8.1", "chalk": "4.1.2", "deepmerge": "4.3.1", "dotenv": "16.3.1", "form-data": "4.0.0", "isomorphic-unfetch": "4.0.2", - "uuid": "9.0.0" + "uuid": "9.0.1" }, "devDependencies": { - "@types/uuid": "9.0.2", - "@typescript-eslint/eslint-plugin": "6.1.0", - "@typescript-eslint/parser": "6.1.0", + "@types/uuid": "9.0.4", + "@typescript-eslint/eslint-plugin": "6.7.0", + "@typescript-eslint/parser": "6.7.0", "cross-env": "7.0.3", - "eslint": "8.45.0", - "prettier": "2.8.7", - "typescript": "5.0.4" + "eslint": "8.49.0", + "prettier": "3.0.3", + "typescript": "5.2.2" } } diff --git a/e2e-tests/playwright/playwright.config.ts b/e2e-tests/playwright/playwright.config.ts index 56fcbd2c30..7b687cabea 100644 --- a/e2e-tests/playwright/playwright.config.ts +++ b/e2e-tests/playwright/playwright.config.ts @@ -52,13 +52,6 @@ export default defineConfig({ }, }, projects: [ - { - name: 'iphone', - use: { - browserName: 'chromium', - ...devices['iPhone 13 Pro'], - }, - }, { name: 'ipad', use: { diff --git a/e2e-tests/playwright/sample.env b/e2e-tests/playwright/sample.env index 73ffe19981..a69c4c8fe7 100644 --- a/e2e-tests/playwright/sample.env +++ b/e2e-tests/playwright/sample.env @@ -16,41 +16,38 @@ # 5. PW_ADMIN_EMAIL # - Default to "sysadmin@sample.mattermost.com" if not set. -# 6. PW_BOARDS_PRODUCT_ENABLED -# - Default to "true" if not set. Used to correctly set server config. - -# 7. PW_HA_CLUSTER_ENABLED +# 6. PW_HA_CLUSTER_ENABLED # - Default to "false" if not set. Set to true if the test server is with HA enabled. -# 8. PW_HA_CLUSTER_NODE_COUNT +# 7. PW_HA_CLUSTER_NODE_COUNT # - Default to "2" if not set. -# 9. PW_HA_CLUSTER_NAME +# 8. PW_HA_CLUSTER_NAME # - Default to "mm_dev_cluster" if not set. -# 10. PW_RESET_BEFORE_TEST +# 9. PW_RESET_BEFORE_TEST # - Default to "false" if not set. If true, the setup deletes all teams and channels other than the default team which is "ad-1". -# 11. CI +# 10. CI # - Default to "false" if not set. -# 12. PW_HEADLESS +# 11. PW_HEADLESS # - Default to "false" or headless mode if not set. Set to true to run test in headed mode. -# 13. PW_SLOWMO +# 12. PW_SLOWMO # - Default to "0" if not set which means normal test speed run. Slows down Playwright operations by the specified amount of milliseconds. Useful so that you can see what is going on. -# 14. PW_WORKERS +# 13. PW_WORKERS # - Default to "1" if not set. The maximum number of concurrent worker processes to use for parallelizing tests. -# 15. PW_SNAPSHOT_ENABLE +# 14. PW_SNAPSHOT_ENABLE # - Default to "false" if not set. Set to true to enable snapshot testing. # Note that, snapshot testing should be done in Playwright docker image only. # This is to ensure that, there's a common base platform for all contributors # regardless of each local development platform. -# 16. PW_PERCY_ENABLE +# 15. PW_PERCY_ENABLE # - Default to "false" if not set. Use to save and compare results via https://percy.io/. -# 17. PERCY_TOKEN +# 16. PERCY_TOKEN # - A token required by https://percy.io/. diff --git a/e2e-tests/playwright/support/constant.ts b/e2e-tests/playwright/support/constant.ts index 8be0ec803d..01dd425610 100644 --- a/e2e-tests/playwright/support/constant.ts +++ b/e2e-tests/playwright/support/constant.ts @@ -2,6 +2,5 @@ // See LICENSE.txt for license information. export const appsPluginId = 'com.mattermost.apps'; -export const boardsPluginId = 'focalboard'; export const callsPluginId = 'com.mattermost.calls'; export const playbooksPluginId = 'playbooks'; diff --git a/e2e-tests/playwright/support/flag.ts b/e2e-tests/playwright/support/flag.ts index 8e9a451c73..d346e53f1d 100644 --- a/e2e-tests/playwright/support/flag.ts +++ b/e2e-tests/playwright/support/flag.ts @@ -3,11 +3,10 @@ import os from 'node:os'; -import {expect, test} from '@playwright/test'; +import {expect} from '@playwright/test'; import {callsPluginId} from './constant'; import {getAdminClient} from './server/init'; -import {isSmallScreen} from './util'; export async function shouldHaveCallsEnabled(enabled = true) { const {adminClient} = await getAdminClient(); @@ -26,14 +25,10 @@ export async function shouldHaveFeatureFlag(name: string, value: string | boolea const matched = config.FeatureFlags[name] === value; expect( matched, - matched ? '' : `FeatureFlags["${name}'] expect "${value}" but actual "${config.FeatureFlags[name]}"` + matched ? '' : `FeatureFlags["${name}'] expect "${value}" but actual "${config.FeatureFlags[name]}"`, ).toBeTruthy(); } -export function shouldSkipInSmallScreen() { - test.skip(({viewport}) => isSmallScreen(viewport), 'Not applicable to mobile device'); -} - export async function shouldRunInLinux() { const platform = os.platform(); await expect(platform, 'Run in Linux or Playwright docker image only').toBe('linux'); diff --git a/e2e-tests/playwright/support/server/default_config.ts b/e2e-tests/playwright/support/server/default_config.ts index b0af629944..97addf2649 100644 --- a/e2e-tests/playwright/support/server/default_config.ts +++ b/e2e-tests/playwright/support/server/default_config.ts @@ -35,9 +35,6 @@ const onPremServerConfig = (): Partial => { Enable: testConfig.haClusterEnabled, ClusterName: testConfig.haClusterName, }, - ExperimentalSettings: { - DisableAppBar: false, - }, PasswordSettings: { MinimumLength: 5, Lowercase: false, @@ -48,9 +45,15 @@ const onPremServerConfig = (): Partial => { }, PluginSettings: { EnableUploads: true, - Plugins: { + PluginStates: { 'com.mattermost.calls': { - defaultenabled: true, + Enable: false, + }, + 'com.mattermost.nps': { + Enable: false, + }, + playbooks: { + Enable: true, }, }, }, @@ -65,7 +68,7 @@ const onPremServerConfig = (): Partial => { }; // Should be based only from the generated default config from ./server via "make config-reset" -// Based on v7.10 server +// Based on v9.1 server const defaultServerConfig: AdminConfig = { ServiceSettings: { SiteURL: '', @@ -157,6 +160,11 @@ const defaultServerConfig: AdminConfig = { EnableLatex: false, EnableInlineLatex: true, PostPriority: true, + AllowPersistentNotifications: true, + AllowPersistentNotificationsForGuests: false, + PersistentNotificationIntervalMinutes: 5, + PersistentNotificationMaxCount: 6, + PersistentNotificationMaxRecipients: 5, EnableAPIChannelDeletion: false, EnableLocalMode: false, LocalModeSocketLocation: '/var/tmp/mattermost_local.socket', @@ -170,15 +178,11 @@ const defaultServerConfig: AdminConfig = { EnableCustomGroups: true, SelfHostedPurchase: true, AllowSyncedDrafts: true, - AllowPersistentNotifications: true, - PersistentNotificationMaxCount: 6, - PersistentNotificationMaxRecipients: 5, - PersistentNotificationIntervalMinutes: 5, - AllowPersistentNotificationsForGuests: false, }, TeamSettings: { SiteName: 'Mattermost', MaxUsersPerTeam: 50, + EnableJoinLeaveMessageByDefault: true, EnableUserCreation: true, EnableOpenServer: false, EnableUserDeactivation: false, @@ -222,6 +226,7 @@ const defaultServerConfig: AdminConfig = { DisableDatabaseSearch: false, MigrationsStatementTimeoutSeconds: 100000, ReplicaLagSettings: [], + ReplicaMonitorIntervalSeconds: 5, }, LogSettings: { EnableConsole: true, @@ -236,6 +241,7 @@ const defaultServerConfig: AdminConfig = { EnableDiagnostics: true, VerboseDiagnostics: false, EnableSentry: true, + AdvancedLoggingJSON: {}, AdvancedLoggingConfig: '', }, ExperimentalAuditSettings: { @@ -246,6 +252,7 @@ const defaultServerConfig: AdminConfig = { FileMaxBackups: 0, FileCompress: false, FileMaxQueueSize: 1000, + AdvancedLoggingJSON: {}, AdvancedLoggingConfig: '', }, NotificationLogSettings: { @@ -257,6 +264,7 @@ const defaultServerConfig: AdminConfig = { FileLevel: 'INFO', FileJson: true, FileLocation: '', + AdvancedLoggingJSON: {}, AdvancedLoggingConfig: '', }, PasswordSettings: { @@ -292,6 +300,21 @@ const defaultServerConfig: AdminConfig = { AmazonS3SSE: false, AmazonS3Trace: false, AmazonS3RequestTimeoutMilliseconds: 30000, + DedicatedExportStore: false, + ExportDriverName: 'local', + ExportDirectory: './data/', + ExportAmazonS3AccessKeyId: '', + ExportAmazonS3SecretAccessKey: '', + ExportAmazonS3Bucket: '', + ExportAmazonS3PathPrefix: '', + ExportAmazonS3Region: '', + ExportAmazonS3Endpoint: 's3.amazonaws.com', + ExportAmazonS3SSL: true, + ExportAmazonS3SignV2: false, + ExportAmazonS3SSE: false, + ExportAmazonS3Trace: false, + ExportAmazonS3RequestTimeoutMilliseconds: 30000, + ExportAmazonS3PresignExpiresSeconds: 21600, }, EmailSettings: { EnableSignUpWithEmail: true, @@ -343,7 +366,7 @@ const defaultServerConfig: AdminConfig = { SupportSettings: { TermsOfServiceLink: 'https://mattermost.com/pl/terms-of-use/', PrivacyPolicyLink: 'https://mattermost.com/pl/privacy-policy/', - AboutLink: 'https://docs.mattermost.com/pl/about-mattermost', + AboutLink: 'https://mattermost.com/pl/about-mattermost', HelpLink: 'https://mattermost.com/pl/help/', ReportAProblemLink: 'https://mattermost.com/pl/report-a-bug', ForgotPasswordLink: '', @@ -538,7 +561,7 @@ const defaultServerConfig: AdminConfig = { UseNewSAMLLibrary: false, EnableSharedChannels: false, EnableRemoteClusterService: false, - DisableAppBar: true, + DisableAppBar: false, DisableRefetchingOnBrowserFocus: false, DelayChannelAutocomplete: false, }, @@ -582,10 +605,14 @@ const defaultServerConfig: AdminConfig = { DataRetentionSettings: { EnableMessageDeletion: false, EnableFileDeletion: false, + EnableBoardsDeletion: false, MessageRetentionDays: 365, FileRetentionDays: 365, + BoardsRetentionDays: 365, DeletionJobStartTime: '02:00', BatchSize: 3000, + TimeBetweenBatchesMilliseconds: 100, + RetentionIdsBatchSize: 100, }, MessageExportSettings: { EnableExport: false, @@ -624,6 +651,9 @@ const defaultServerConfig: AdminConfig = { 'com.mattermost.nps': { Enable: true, }, + playbooks: { + Enable: true, + }, }, EnableMarketplace: true, EnableRemoteMarketplace: true, @@ -635,6 +665,7 @@ const defaultServerConfig: AdminConfig = { }, DisplaySettings: { CustomURLSchemes: [], + MaxMarkdownNodes: 0, ExperimentalTimezone: true, }, GuestAccountsSettings: { @@ -653,30 +684,24 @@ const defaultServerConfig: AdminConfig = { CloudSettings: { CWSURL: 'https://customers.mattermost.com', CWSAPIURL: 'https://portal.internal.prod.cloud.mattermost.com', + CWSMock: false, }, FeatureFlags: { TestFeature: 'off', TestBoolFeature: false, EnableRemoteClusterService: false, AppsEnabled: true, - PluginPlaybooks: '', - PluginApps: '', - PluginFocalboard: '', - PluginCalls: '', - PermalinkPreviews: true, + PermalinkPreviews: false, CallsEnabled: true, - BoardsFeatureFlags: '', NormalizeLdapDNs: false, GraphQL: false, - CommandPalette: false, - SendWelcomePost: true, - PostPriority: true, + PostPriority: false, WysiwygEditor: false, - ThreadsEverywhere: false, OnboardingTourTips: true, DeprecateCloudFree: false, CloudReverseTrial: false, - StreamlinedMarketplace: true + EnableExportDirectDownload: false, + StreamlinedMarketplace: true, }, ImportSettings: { Directory: './import', diff --git a/e2e-tests/playwright/support/server/init.ts b/e2e-tests/playwright/support/server/init.ts index f5d8f09985..d0a74a6b11 100644 --- a/e2e-tests/playwright/support/server/init.ts +++ b/e2e-tests/playwright/support/server/init.ts @@ -24,7 +24,7 @@ export async function initSetup({ const {adminClient, adminUser} = await getAdminClient(); if (!adminClient) { throw new Error( - "Failed to setup admin: Check that you're able to access the server using the same admin credential." + "Failed to setup admin: Check that you're able to access the server using the same admin credential.", ); } @@ -83,8 +83,8 @@ export async function initSetup({ // eslint-disable-next-line no-console console.log( chalk.green( - `This failed due to the experimental fetch support in Node.js starting v18.0.0.\nYou may set environment variable: "export NODE_OPTIONS='--no-experimental-fetch'", then try again.'` - ) + `This failed due to the experimental fetch support in Node.js starting v18.0.0.\nYou may set environment variable: "export NODE_OPTIONS='--no-experimental-fetch'", then try again.'`, + ), ); } expect(err, 'Should not throw an error').toBeFalsy(); diff --git a/e2e-tests/playwright/support/test_action.ts b/e2e-tests/playwright/support/test_action.ts index 8cb9428c4e..95a0aada57 100644 --- a/e2e-tests/playwright/support/test_action.ts +++ b/e2e-tests/playwright/support/test_action.ts @@ -16,6 +16,6 @@ export async function hideDynamicChannelsContent(page: Page) { export async function waitForAnimationEnd(locator: Locator) { return locator.evaluate((element) => - Promise.all(element.getAnimations({subtree: true}).map((animation) => animation.finished)) + Promise.all(element.getAnimations({subtree: true}).map((animation) => animation.finished)), ); } diff --git a/e2e-tests/playwright/support/test_fixture.ts b/e2e-tests/playwright/support/test_fixture.ts index f43ba0c825..be63bb7252 100644 --- a/e2e-tests/playwright/support/test_fixture.ts +++ b/e2e-tests/playwright/support/test_fixture.ts @@ -1,11 +1,10 @@ -import {test as base, Browser, Page, ViewportSize} from '@playwright/test'; +import {test as base, Browser, Page} from '@playwright/test'; import {AxeResults} from 'axe-core'; import AxeBuilder from '@axe-core/playwright'; import {TestBrowser} from './browser_context'; -import {shouldHaveCallsEnabled, shouldHaveFeatureFlag, shouldSkipInSmallScreen, shouldRunInLinux} from './flag'; +import {shouldHaveCallsEnabled, shouldHaveFeatureFlag, shouldRunInLinux} from './flag'; import {initSetup, getAdminClient} from './server'; -import {isSmallScreen} from './util'; import {hideDynamicChannelsContent, waitForAnimationEnd, waitUntil} from './test_action'; import {pages} from './ui/pages'; import {matchSnapshot} from './visual'; @@ -29,8 +28,8 @@ export const test = base.extend({ const ab = new AxeBuilderExtended(); await use(ab); }, - pw: async ({browser, viewport}, use) => { - const pw = new PlaywrightExtended(browser, viewport); + pw: async ({browser}, use) => { + const pw = new PlaywrightExtended(browser); await use(pw); await pw.testBrowser.close(); }, @@ -47,7 +46,6 @@ class PlaywrightExtended { // ./flag readonly shouldHaveCallsEnabled; readonly shouldHaveFeatureFlag; - readonly shouldSkipInSmallScreen; readonly shouldRunInLinux; // ./server @@ -62,20 +60,16 @@ class PlaywrightExtended { // ./ui/pages readonly pages; - // ./util - readonly isSmallScreen; - // ./visual readonly matchSnapshot; - constructor(browser: Browser, viewport: ViewportSize | null) { + constructor(browser: Browser) { // ./browser_context this.testBrowser = new TestBrowser(browser); // ./flag this.shouldHaveCallsEnabled = shouldHaveCallsEnabled; this.shouldHaveFeatureFlag = shouldHaveFeatureFlag; - this.shouldSkipInSmallScreen = shouldSkipInSmallScreen; this.shouldRunInLinux = shouldRunInLinux; // ./server @@ -90,9 +84,6 @@ class PlaywrightExtended { // ./ui/pages this.pages = pages; - // ./util - this.isSmallScreen = () => isSmallScreen(viewport); - // ./visual this.matchSnapshot = matchSnapshot; } diff --git a/e2e-tests/playwright/support/ui/components/boards/create_modal.ts b/e2e-tests/playwright/support/ui/components/boards/create_modal.ts deleted file mode 100644 index ed3f21a2a3..0000000000 --- a/e2e-tests/playwright/support/ui/components/boards/create_modal.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import {expect, Locator} from '@playwright/test'; - -export default class BoardsCreateModal { - readonly container: Locator; - - readonly productSwitchMenu; - - constructor(container: Locator) { - this.container = container; - - this.productSwitchMenu = container.getByRole('button', {name: 'Product switch menu'}); - } - - async switchProduct(name: string) { - await this.productSwitchMenu.click(); - await this.container.getByRole('link', {name: ` ${name}`}).click(); - } - - async toBeVisible(name: string) { - await expect(this.container.getByRole('heading', {name})).toBeVisible(); - } -} - -export {BoardsCreateModal}; diff --git a/e2e-tests/playwright/support/ui/components/boards/sidebar.ts b/e2e-tests/playwright/support/ui/components/boards/sidebar.ts deleted file mode 100644 index 372054524c..0000000000 --- a/e2e-tests/playwright/support/ui/components/boards/sidebar.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import {Locator} from '@playwright/test'; - -export default class BoardsSidebar { - readonly container: Locator; - - readonly plusButton; - readonly createNewBoardMenuItem; - readonly createNewCategoryMenuItem; - readonly titles; - - constructor(container: Locator) { - this.container = container; - - this.plusButton = container.locator('.add-board-icon'); - this.createNewBoardMenuItem = container.getByRole('button', {name: 'Create new board'}); - this.createNewCategoryMenuItem = container.getByRole('button', {name: 'Create New Category'}); - this.titles = container.locator('.SidebarBoardItem > .octo-sidebar-title'); - } - - async waitForTitle(name: string) { - await this.container.getByRole('button', {name: ` ${name}`}).waitFor({state: 'visible'}); - } -} - -export {BoardsSidebar}; diff --git a/e2e-tests/playwright/support/ui/components/channels/center_view.ts b/e2e-tests/playwright/support/ui/components/channels/center_view.ts index 26369376ba..ffd91d0ac0 100644 --- a/e2e-tests/playwright/support/ui/components/channels/center_view.ts +++ b/e2e-tests/playwright/support/ui/components/channels/center_view.ts @@ -47,8 +47,8 @@ export default class ChannelsCenterView { /** * Return the Nth post in the Center from the top - * @param index - * @returns + * @param index + * @returns */ async getNthPost(index: number) { const nthPost = this.container.getByTestId('postView').nth(index); @@ -73,7 +73,7 @@ export default class ChannelsCenterView { const content = await post.container.textContent(); return content?.includes(text); }, - {timeout} + {timeout}, ); } @@ -85,7 +85,7 @@ export default class ChannelsCenterView { return content?.includes(text); }, - {timeout} + {timeout}, ); } } diff --git a/e2e-tests/playwright/support/ui/components/channels/emoji_gif_picker.ts b/e2e-tests/playwright/support/ui/components/channels/emoji_gif_picker.ts index 17159c4a1d..08faa65683 100644 --- a/e2e-tests/playwright/support/ui/components/channels/emoji_gif_picker.ts +++ b/e2e-tests/playwright/support/ui/components/channels/emoji_gif_picker.ts @@ -15,7 +15,7 @@ export default class EmojiGifPicker { this.gifTab = container.getByText('GIFs'); this.gifSearchInput = container.getByPlaceholder('Search GIPHY'); - this.gifPickerItems = container.locator('.gif-picker__items') + this.gifPickerItems = container.locator('.gif-picker__items'); } async toBeVisible() { @@ -24,7 +24,7 @@ export default class EmojiGifPicker { async openGifTab() { await expect(this.gifTab).toBeVisible(); - + await this.gifTab.click({force: true}); await expect(this.gifSearchInput).toBeVisible(); @@ -41,7 +41,7 @@ export default class EmojiGifPicker { await this.gifPickerItems.locator('img').nth(n).waitFor(); const nthGif = this.gifPickerItems.locator('img').nth(n); - await expect(nthGif).toBeVisible() + await expect(nthGif).toBeVisible(); const nthGifSrc = await nthGif.getAttribute('src'); const nthGifAlt = await nthGif.getAttribute('alt'); diff --git a/e2e-tests/playwright/support/ui/components/index.ts b/e2e-tests/playwright/support/ui/components/index.ts index 3488bf2d57..ca2074c108 100644 --- a/e2e-tests/playwright/support/ui/components/index.ts +++ b/e2e-tests/playwright/support/ui/components/index.ts @@ -1,13 +1,12 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import {BoardsSidebar} from './boards/sidebar'; import {ChannelsHeader} from './channels/header'; import {ChannelsHeaderMobile} from './channels/header_mobile'; import {ChannelsAppBar} from './channels/app_bar'; import {ChannelsPostCreate} from './channels/post_create'; import {ChannelsPost} from './channels/post'; -import {ChannelsCenterView} from './channels/center_view' +import {ChannelsCenterView} from './channels/center_view'; import {ChannelsSidebarLeft} from './channels/sidebar_left'; import {ChannelsSidebarRight} from './channels/sidebar_right'; import {DeletePostModal} from './channels/delete_post_modal'; @@ -22,7 +21,6 @@ import {ThreadFooter} from './channels/thread_footer'; import {EmojiGifPicker} from './channels/emoji_gif_picker'; const components = { - BoardsSidebar, GlobalHeader, ChannelsCenterView, ChannelsSidebarLeft, @@ -45,7 +43,6 @@ const components = { export { components, - BoardsSidebar, GlobalHeader, ChannelsCenterView, ChannelsSidebarLeft, diff --git a/e2e-tests/playwright/support/ui/pages/boards_create.ts b/e2e-tests/playwright/support/ui/pages/boards_create.ts deleted file mode 100644 index f49aa163df..0000000000 --- a/e2e-tests/playwright/support/ui/pages/boards_create.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import {expect, Page} from '@playwright/test'; - -import {components} from '@e2e-support/ui/components'; - -export default class BoardsCreatePage { - readonly boards = 'Boards'; - readonly page: Page; - - readonly globalHeader; - - readonly createBoardHeading; - readonly createEmptyBoardButton; - readonly useTemplateButton; - - constructor(page: Page) { - this.page = page; - this.globalHeader = new components.GlobalHeader(this.page.locator('#global-header')); - this.createBoardHeading = page.getByRole('heading', {name: 'Create a board'}); - this.createEmptyBoardButton = page.getByRole('button', {name: ' Create an empty board'}); - this.useTemplateButton = page.getByRole('button', {name: 'Use this template'}); - } - - async goto(teamId = '') { - let boardsUrl = '/boards'; - if (teamId) { - boardsUrl += `/team/${teamId}`; - } - - await this.page.goto(boardsUrl); - } - - async toBeVisible() { - await this.globalHeader.toBeVisible(this.boards); - await expect(this.createEmptyBoardButton).toBeVisible(); - await expect(this.useTemplateButton).toBeVisible(); - await expect(this.createBoardHeading).toBeVisible(); - } - - async createEmptyBoard() { - await this.createEmptyBoardButton.click(); - } -} - -export {BoardsCreatePage}; diff --git a/e2e-tests/playwright/support/ui/pages/boards_view.ts b/e2e-tests/playwright/support/ui/pages/boards_view.ts deleted file mode 100644 index bc618e67f8..0000000000 --- a/e2e-tests/playwright/support/ui/pages/boards_view.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import {expect, Page} from '@playwright/test'; - -import {components} from '@e2e-support/ui/components'; - -export default class BoardsViewPage { - readonly boards = 'Boards'; - readonly page: Page; - - readonly sidebar; - readonly globalHeader; - - readonly topHead; - readonly editableTitle; - readonly shareButton; - - constructor(page: Page) { - this.page = page; - this.sidebar = new components.BoardsSidebar(page.locator('.octo-sidebar')); - this.globalHeader = new components.GlobalHeader(this.page.locator('#global-header')); - this.topHead = page.locator('.top-head'); - this.editableTitle = this.topHead.getByPlaceholder('Untitled board'); - this.shareButton = page.getByRole('button', {name: '󰍁 Share'}); - } - - async goto(teamId = '', boardId = '', viewId = '', cardId = '') { - let boardsUrl = '/boards'; - if (teamId) { - boardsUrl += `/team/${teamId}`; - if (boardId) { - boardsUrl += `/${boardId}`; - if (viewId) { - boardsUrl += `/${viewId}`; - if (cardId) { - boardsUrl += `/${cardId}`; - } - } - } - } - - await this.page.goto(boardsUrl); - } - - async toBeVisible() { - await this.page.waitForLoadState('networkidle'); - await this.globalHeader.toBeVisible(this.boards); - await expect(this.shareButton).toBeVisible(); - await expect(this.topHead).toBeVisible(); - } - - async shouldHaveUntitledBoard() { - await this.editableTitle.isVisible(); - expect(await this.editableTitle.getAttribute('value')).toBe(''); - await expect(this.page.getByTitle('(Untitled Board)')).toBeVisible(); - } -} - -export {BoardsViewPage}; diff --git a/e2e-tests/playwright/support/ui/pages/channels.ts b/e2e-tests/playwright/support/ui/pages/channels.ts index a480e29390..1031c51e12 100644 --- a/e2e-tests/playwright/support/ui/pages/channels.ts +++ b/e2e-tests/playwright/support/ui/pages/channels.ts @@ -4,7 +4,6 @@ import {Page} from '@playwright/test'; import {components} from '@e2e-support/ui/components'; -import {isSmallScreen} from '@e2e-support/util'; export default class ChannelsPage { readonly channels = 'Channels'; @@ -19,7 +18,7 @@ export default class ChannelsPage { readonly findChannelsModal; readonly deletePostModal; - + readonly postDotMenu; readonly postReminderMenu; @@ -35,7 +34,7 @@ export default class ChannelsPage { this.sidebarRight = new components.ChannelsSidebarRight(page.locator('#sidebar-right')); this.appBar = new components.ChannelsAppBar(page.locator('.app-bar')); - // Modals + // Modals this.findChannelsModal = new components.FindChannelsModal(page.getByRole('dialog', {name: 'Find Channels'})); this.deletePostModal = new components.DeletePostModal(page.locator('#deletePostModal')); @@ -48,10 +47,6 @@ export default class ChannelsPage { } async toBeVisible() { - if (!isSmallScreen(this.page.viewportSize())) { - await this.globalHeader.toBeVisible(this.channels); - } - await this.centerView.toBeVisible(); } diff --git a/e2e-tests/playwright/support/ui/pages/index.ts b/e2e-tests/playwright/support/ui/pages/index.ts index f84d4a442d..215b7666b4 100644 --- a/e2e-tests/playwright/support/ui/pages/index.ts +++ b/e2e-tests/playwright/support/ui/pages/index.ts @@ -1,8 +1,6 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import {BoardsCreatePage} from './boards_create'; -import {BoardsViewPage} from './boards_view'; import {ChannelsPage} from './channels'; import {LandingLoginPage} from './landing_login'; import {LoginPage} from './login'; @@ -10,8 +8,6 @@ import {ResetPasswordPage} from './reset_password'; import {SignupPage} from './signup'; const pages = { - BoardsCreatePage, - BoardsViewPage, ChannelsPage, LandingLoginPage, LoginPage, @@ -19,4 +15,4 @@ const pages = { SignupPage, }; -export {pages, BoardsCreatePage, BoardsViewPage, ChannelsPage, LandingLoginPage, LoginPage, SignupPage}; +export {pages, ChannelsPage, LandingLoginPage, LoginPage, SignupPage}; diff --git a/e2e-tests/playwright/support/ui/pages/signup.ts b/e2e-tests/playwright/support/ui/pages/signup.ts index c3ec6a8f18..074db6fa5f 100644 --- a/e2e-tests/playwright/support/ui/pages/signup.ts +++ b/e2e-tests/playwright/support/ui/pages/signup.ts @@ -44,7 +44,7 @@ export default class SignupPage { this.createAccountButton = page.locator('button:has-text("Create Account")'); this.emailError = page.locator('text=Please enter a valid email address'); this.usernameError = page.locator( - 'text=Usernames have to begin with a lowercase letter and be 3-22 characters long. You can use lowercase letters, numbers, periods, dashes, and underscores.' + 'text=Usernames have to begin with a lowercase letter and be 3-22 characters long. You can use lowercase letters, numbers, periods, dashes, and underscores.', ); this.passwordError = page.locator('text=Must be 5-64 characters long.'); diff --git a/e2e-tests/playwright/support/util.ts b/e2e-tests/playwright/support/util.ts index 9f1999625d..fc591b940a 100644 --- a/e2e-tests/playwright/support/util.ts +++ b/e2e-tests/playwright/support/util.ts @@ -2,7 +2,6 @@ // See LICENSE.txt for license information. import {v4 as uuidv4} from 'uuid'; -import {ViewportSize} from '@playwright/test'; const second = 1000; const minute = 60 * 1000; @@ -46,7 +45,3 @@ export function getRandomId(length = 7): string { export const defaultTeam = {name: 'ad-1', displayName: 'eligendi', type: 'O'}; export const illegalRe = /[/?<>\\:*|":&();]/g; - -export function isSmallScreen(viewport?: ViewportSize | {width: number; height: number} | null) { - return viewport?.width ? Boolean(viewport?.width <= 390) : true; -} diff --git a/e2e-tests/playwright/support/visual/index.ts b/e2e-tests/playwright/support/visual/index.ts index dbbfc8dd5b..0728aaa331 100644 --- a/e2e-tests/playwright/support/visual/index.ts +++ b/e2e-tests/playwright/support/visual/index.ts @@ -16,8 +16,8 @@ export async function matchSnapshot(testInfo: TestInfo, testArgs: TestArgs) { // eslint-disable-next-line no-console console.log( chalk.yellow( - `^ Warning: No visual test performed. Run in Linux or Playwright docker image to match snapshot.` - ) + `^ Warning: No visual test performed. Run in Linux or Playwright docker image to match snapshot.`, + ), ); return; } diff --git a/e2e-tests/playwright/test.config.ts b/e2e-tests/playwright/test.config.ts index 1149b84d71..7dc2bc23a5 100644 --- a/e2e-tests/playwright/test.config.ts +++ b/e2e-tests/playwright/test.config.ts @@ -4,8 +4,6 @@ import {Page, ViewportSize} from '@playwright/test'; import * as dotenv from 'dotenv'; -import {callsPluginId} from '@e2e-support/constant'; - dotenv.config(); export type TestArgs = { @@ -47,7 +45,7 @@ const config: TestConfig = { ensurePluginsInstalled: typeof process.env?.PW_ENSURE_PLUGINS_INSTALLED === 'string' ? process.env.PW_ENSURE_PLUGINS_INSTALLED.split(',') - : [callsPluginId], + : [], haClusterEnabled: parseBool(process.env.PW_HA_CLUSTER_ENABLED, false), haClusterNodeCount: parseNumber(process.env.PW_HA_CLUSTER_NODE_COUNT, 2), haClusterName: process.env.PW_HA_CLUSTER_NAME || 'mm_dev_cluster', diff --git a/e2e-tests/playwright/tests/functional/boards/board-creation-and-set-up/create_empty_board.spec.ts b/e2e-tests/playwright/tests/functional/boards/board-creation-and-set-up/create_empty_board.spec.ts deleted file mode 100644 index 0967d8577c..0000000000 --- a/e2e-tests/playwright/tests/functional/boards/board-creation-and-set-up/create_empty_board.spec.ts +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import {expect, test} from '@e2e-support/test_fixture'; -import {shouldSkipInSmallScreen} from '@e2e-support/flag'; - -shouldSkipInSmallScreen(); - -test('MM-T4274 Create an Empty Board', async ({pw, pages}) => { - // Create and sign in a new user - const {user} = await pw.initSetup(); - - // Log in a user in new browser context - const {page} = await pw.testBrowser.login(user); - - // Visit a default channel page - const channelsPage = new pages.ChannelsPage(page); - await channelsPage.goto(); - await channelsPage.toBeVisible(); - - // Switch to Boards page - await channelsPage.globalHeader.switchProduct('Boards'); - - // Should have redirected to boards create page - const boardsCreatePage = new pages.BoardsCreatePage(page); - await boardsCreatePage.toBeVisible(); - - // Create empty board - await boardsCreatePage.createEmptyBoard(); - - // Should have redirected to boards view page - const boardsViewPage = new pages.BoardsViewPage(page); - await boardsViewPage.toBeVisible(); - await boardsViewPage.shouldHaveUntitledBoard(); - - // Type new title and hit enter - const title = 'Testing'; - await boardsViewPage.editableTitle.fill(title); - await boardsViewPage.editableTitle.press('Enter'); - - // Should update the title in heading and in sidebar - expect(await boardsViewPage.editableTitle.getAttribute('value')).toBe(title); - await boardsViewPage.sidebar.waitForTitle(title); -}); diff --git a/e2e-tests/playwright/tests/functional/channels/drafts/drafts_on_deleted_message.spec.ts b/e2e-tests/playwright/tests/functional/channels/drafts/drafts_on_deleted_message.spec.ts index 89e847b308..d01c4493fc 100644 --- a/e2e-tests/playwright/tests/functional/channels/drafts/drafts_on_deleted_message.spec.ts +++ b/e2e-tests/playwright/tests/functional/channels/drafts/drafts_on_deleted_message.spec.ts @@ -22,7 +22,7 @@ test('MM-T5435_1 Global Drafts link in sidebar should be hidden when another use createRandomPost({ channel_id: channel.id, user_id: adminUser.id, - }) + }), ); // # Log in as user in new browser context diff --git a/e2e-tests/playwright/tests/functional/channels/gif_picker/gif_picker_search.spec.ts b/e2e-tests/playwright/tests/functional/channels/gif_picker/gif_picker_search.spec.ts index 7a17fdefd8..5a22f25855 100644 --- a/e2e-tests/playwright/tests/functional/channels/gif_picker/gif_picker_search.spec.ts +++ b/e2e-tests/playwright/tests/functional/channels/gif_picker/gif_picker_search.spec.ts @@ -28,7 +28,8 @@ test('MM-T5445 Should search, select and post correct Gif when Gif picker is ope await channelPage.emojiGifPickerPopup.searchGif('hello'); // # Select the first gif - const {img: firstSearchGifResult, alt: altOfFirstSearchGifResult} = await channelPage.emojiGifPickerPopup.getNthGif(0); + const {img: firstSearchGifResult, alt: altOfFirstSearchGifResult} = + await channelPage.emojiGifPickerPopup.getNthGif(0); await firstSearchGifResult.click(); // # Send the selected gif as a message @@ -82,7 +83,8 @@ test('MM-T5446 Should search, select and post correct Gif when Gif picker is ope await channelPage.emojiGifPickerPopup.searchGif('hello'); // # Select the first gif - const {img: firstSearchGifResult, alt: altOfFirstSearchGifResult} = await channelPage.emojiGifPickerPopup.getNthGif(0); + const {img: firstSearchGifResult, alt: altOfFirstSearchGifResult} = + await channelPage.emojiGifPickerPopup.getNthGif(0); await firstSearchGifResult.click(); // # Send the selected gif as a message in the thread diff --git a/e2e-tests/playwright/tests/functional/channels/search/find_channels.spec.ts b/e2e-tests/playwright/tests/functional/channels/search/find_channels.spec.ts index cd3be9afbf..13611b4b7c 100644 --- a/e2e-tests/playwright/tests/functional/channels/search/find_channels.spec.ts +++ b/e2e-tests/playwright/tests/functional/channels/search/find_channels.spec.ts @@ -37,9 +37,7 @@ test('MM-T5424 Find channel search returns only 50 results when there are more t await channelsPage.toBeVisible(); // # Click on "Find channel" and type "test_channel" - if (pw.isSmallScreen()) { - await channelsPage.centerView.headerMobile.toggleSidebar(); - } + await channelsPage.centerView.headerMobile.toggleSidebar(); await channelsPage.sidebarLeft.findChannelButton.click(); await channelsPage.findChannelsModal.toBeVisible(); diff --git a/e2e-tests/playwright/tests/visual/boards/board_template.spec.ts b/e2e-tests/playwright/tests/visual/boards/board_template.spec.ts deleted file mode 100644 index 1866840349..0000000000 --- a/e2e-tests/playwright/tests/visual/boards/board_template.spec.ts +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import {test} from '@e2e-support/test_fixture'; -import {shouldSkipInSmallScreen} from '@e2e-support/flag'; - -shouldSkipInSmallScreen(); - -test('Board template', async ({pw, pages, browserName, viewport}, testInfo) => { - // Create and sign in a new user - const {user} = await pw.initSetup(); - - // Log in a user in new browser context - const {page} = await pw.testBrowser.login(user); - - // Should have redirected to boards create page - const boardsCreatePage = new pages.BoardsCreatePage(page); - await boardsCreatePage.goto(); - await boardsCreatePage.toBeVisible(); - - // Match snapshot of create board page - const testArgs = {page, browserName, viewport}; - await pw.matchSnapshot(testInfo, testArgs); -}); diff --git a/e2e-tests/playwright/tests/visual/boards/board_template.spec.ts-snapshots/board-template-chrome-linux.png b/e2e-tests/playwright/tests/visual/boards/board_template.spec.ts-snapshots/board-template-chrome-linux.png deleted file mode 100644 index 987b4d5b8d..0000000000 Binary files a/e2e-tests/playwright/tests/visual/boards/board_template.spec.ts-snapshots/board-template-chrome-linux.png and /dev/null differ diff --git a/e2e-tests/playwright/tests/visual/boards/board_template.spec.ts-snapshots/board-template-firefox-linux.png b/e2e-tests/playwright/tests/visual/boards/board_template.spec.ts-snapshots/board-template-firefox-linux.png deleted file mode 100644 index 424d77357e..0000000000 Binary files a/e2e-tests/playwright/tests/visual/boards/board_template.spec.ts-snapshots/board-template-firefox-linux.png and /dev/null differ diff --git a/e2e-tests/playwright/tests/visual/boards/board_template.spec.ts-snapshots/board-template-ipad-linux.png b/e2e-tests/playwright/tests/visual/boards/board_template.spec.ts-snapshots/board-template-ipad-linux.png deleted file mode 100644 index 2017d565c4..0000000000 Binary files a/e2e-tests/playwright/tests/visual/boards/board_template.spec.ts-snapshots/board-template-ipad-linux.png and /dev/null differ diff --git a/e2e-tests/playwright/tests/visual/boards/view_untitled_board.spec.ts b/e2e-tests/playwright/tests/visual/boards/view_untitled_board.spec.ts deleted file mode 100644 index f5a03b4ba9..0000000000 --- a/e2e-tests/playwright/tests/visual/boards/view_untitled_board.spec.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -import {test} from '@e2e-support/test_fixture'; -import {shouldSkipInSmallScreen} from '@e2e-support/flag'; - -shouldSkipInSmallScreen(); - -test('View untitled board', async ({pw, pages, browserName, viewport}, testInfo) => { - // Create and sign in a new user - const {user} = await pw.initSetup(); - - // Log in a user in new browser context - const {page} = await pw.testBrowser.login(user); - - // Should have redirected to boards create page - const boardsCreatePage = new pages.BoardsCreatePage(page); - await boardsCreatePage.goto(); - await boardsCreatePage.toBeVisible(); - - // Create empty board - await boardsCreatePage.createEmptyBoard(); - - // Should have redirected to boards view page - const boardsViewPage = new pages.BoardsViewPage(page); - await boardsViewPage.toBeVisible(); - await boardsViewPage.shouldHaveUntitledBoard(); - - // Match snapshot of create board page - const testArgs = {page, browserName, viewport}; - await pw.matchSnapshot(testInfo, testArgs); -}); diff --git a/e2e-tests/playwright/tests/visual/boards/view_untitled_board.spec.ts-snapshots/view-untitled-board-chrome-linux.png b/e2e-tests/playwright/tests/visual/boards/view_untitled_board.spec.ts-snapshots/view-untitled-board-chrome-linux.png deleted file mode 100644 index 6ecbc24470..0000000000 Binary files a/e2e-tests/playwright/tests/visual/boards/view_untitled_board.spec.ts-snapshots/view-untitled-board-chrome-linux.png and /dev/null differ diff --git a/e2e-tests/playwright/tests/visual/boards/view_untitled_board.spec.ts-snapshots/view-untitled-board-firefox-linux.png b/e2e-tests/playwright/tests/visual/boards/view_untitled_board.spec.ts-snapshots/view-untitled-board-firefox-linux.png deleted file mode 100644 index 0b93b4be18..0000000000 Binary files a/e2e-tests/playwright/tests/visual/boards/view_untitled_board.spec.ts-snapshots/view-untitled-board-firefox-linux.png and /dev/null differ diff --git a/e2e-tests/playwright/tests/visual/boards/view_untitled_board.spec.ts-snapshots/view-untitled-board-ipad-linux.png b/e2e-tests/playwright/tests/visual/boards/view_untitled_board.spec.ts-snapshots/view-untitled-board-ipad-linux.png deleted file mode 100644 index 4f4ae9d5f5..0000000000 Binary files a/e2e-tests/playwright/tests/visual/boards/view_untitled_board.spec.ts-snapshots/view-untitled-board-ipad-linux.png and /dev/null differ diff --git a/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts b/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts index 86fd10ef54..99ce06330b 100644 --- a/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts +++ b/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts @@ -15,16 +15,8 @@ test('Intro to channel as regular user', async ({pw, pages, browserName, viewpor await channelsPage.goto(); await channelsPage.toBeVisible(); - // Wait for Boards' bot image to be loaded - // await pw.shouldHaveFeatureFlag('OnboardingAutoShowLinkedBoard', true); - // const boardsWelcomePost = await channelsPage.getFirstPost(); - // await expect(await boardsWelcomePost.getProfileImage('boards')).toBeVisible(); - // await wait(duration.one_sec); - // Wait for Playbooks icon to be loaded in App bar, except in iphone - if (!pw.isSmallScreen()) { - await expect(channelsPage.appBar.playbooksIcon).toBeVisible(); - } + await expect(channelsPage.appBar.playbooksIcon).toBeVisible(); // Hide dynamic elements of Channels page await pw.hideDynamicChannelsContent(page); diff --git a/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-chrome-linux.png b/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-chrome-linux.png index 2c70317f10..ba7615108a 100644 Binary files a/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-chrome-linux.png and b/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-chrome-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-firefox-linux.png b/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-firefox-linux.png index 09c9d93521..9ec3c42518 100644 Binary files a/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-firefox-linux.png and b/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-firefox-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-ipad-linux.png b/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-ipad-linux.png index 0989472047..5bbe761878 100644 Binary files a/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-ipad-linux.png and b/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-ipad-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-iphone-linux.png b/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-iphone-linux.png deleted file mode 100644 index 1898570494..0000000000 Binary files a/e2e-tests/playwright/tests/visual/channels/intro_channel.spec.ts-snapshots/intro-to-channel-as-regular-user-iphone-linux.png and /dev/null differ diff --git a/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-chrome-linux.png b/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-chrome-linux.png index de92fef79e..1c5a0cdadd 100644 Binary files a/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-chrome-linux.png and b/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-chrome-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-firefox-linux.png b/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-firefox-linux.png index 132a2ac892..1856c983ef 100644 Binary files a/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-firefox-linux.png and b/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-firefox-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-ipad-linux.png b/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-ipad-linux.png index b4457abe98..c67b985dfb 100644 Binary files a/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-ipad-linux.png and b/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-ipad-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-iphone-linux.png b/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-iphone-linux.png deleted file mode 100644 index ea323eb8a7..0000000000 Binary files a/e2e-tests/playwright/tests/visual/common/landing_page.spec.ts-snapshots/landing-login-iphone-linux.png and /dev/null differ diff --git a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-chrome-linux.png b/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-chrome-linux.png index 676fde4484..c99ddac90a 100644 Binary files a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-chrome-linux.png and b/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-chrome-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-chrome-linux.png b/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-chrome-linux.png index b9d2760e30..dd9cbaad55 100644 Binary files a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-chrome-linux.png and b/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-chrome-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-firefox-linux.png b/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-firefox-linux.png index 4a3168df92..3e7e4791ac 100644 Binary files a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-firefox-linux.png and b/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-firefox-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-ipad-linux.png b/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-ipad-linux.png index 1538d5f2a1..b66f7a50cb 100644 Binary files a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-ipad-linux.png and b/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-ipad-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-iphone-linux.png b/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-iphone-linux.png deleted file mode 100644 index 1e1cc4aafc..0000000000 Binary files a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-error-iphone-linux.png and /dev/null differ diff --git a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-firefox-linux.png b/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-firefox-linux.png index 9e13bff69f..ee7503143c 100644 Binary files a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-firefox-linux.png and b/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-firefox-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-ipad-linux.png b/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-ipad-linux.png index b44f478019..a3b93c2012 100644 Binary files a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-ipad-linux.png and b/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-ipad-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-iphone-linux.png b/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-iphone-linux.png deleted file mode 100644 index 8b050c34a7..0000000000 Binary files a/e2e-tests/playwright/tests/visual/common/login.spec.ts-snapshots/login-iphone-linux.png and /dev/null differ diff --git a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-chrome-linux.png b/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-chrome-linux.png index c76d7b5ba6..c1ddad54e6 100644 Binary files a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-chrome-linux.png and b/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-chrome-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-chrome-linux.png b/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-chrome-linux.png index 29fd43ace6..cfeb0670e6 100644 Binary files a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-chrome-linux.png and b/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-chrome-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-firefox-linux.png b/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-firefox-linux.png index d57364459d..29b0460680 100644 Binary files a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-firefox-linux.png and b/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-firefox-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-ipad-linux.png b/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-ipad-linux.png index 65f5f5499e..1c245f0353 100644 Binary files a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-ipad-linux.png and b/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-ipad-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-iphone-linux.png b/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-iphone-linux.png deleted file mode 100644 index 30627d5d8d..0000000000 Binary files a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-error-iphone-linux.png and /dev/null differ diff --git a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-firefox-linux.png b/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-firefox-linux.png index 9f255fded9..6b418c51f3 100644 Binary files a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-firefox-linux.png and b/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-firefox-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-ipad-linux.png b/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-ipad-linux.png index 4303ec2f29..4e4e5976d5 100644 Binary files a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-ipad-linux.png and b/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-ipad-linux.png differ diff --git a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-iphone-linux.png b/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-iphone-linux.png deleted file mode 100644 index 588495a8b8..0000000000 Binary files a/e2e-tests/playwright/tests/visual/common/signup_email.spec.ts-snapshots/signup-email-iphone-linux.png and /dev/null differ diff --git a/webapp/platform/types/src/config.ts b/webapp/platform/types/src/config.ts index 8f9e38dead..eaeac6fbd8 100644 --- a/webapp/platform/types/src/config.ts +++ b/webapp/platform/types/src/config.ts @@ -405,6 +405,7 @@ export type TeamSettings = { ExperimentalPrimaryTeam: string; ExperimentalDefaultChannels: string[]; EnableLastActiveTime: boolean; + EnableJoinLeaveMessageByDefault: boolean; }; export type ClientRequirements = { @@ -429,6 +430,7 @@ export type SqlSettings = { DisableDatabaseSearch: boolean; MigrationsStatementTimeoutSeconds: number; ReplicaLagSettings: ReplicaLagSetting[]; + ReplicaMonitorIntervalSeconds: number; }; export type LogSettings = { @@ -445,6 +447,7 @@ export type LogSettings = { VerboseDiagnostics: boolean; EnableSentry: boolean; AdvancedLoggingConfig: string; + AdvancedLoggingJSON: Record; }; export type ExperimentalAuditSettings = { @@ -456,6 +459,7 @@ export type ExperimentalAuditSettings = { FileCompress: boolean; FileMaxQueueSize: number; AdvancedLoggingConfig: string; + AdvancedLoggingJSON: Record; }; export type NotificationLogSettings = { @@ -468,6 +472,7 @@ export type NotificationLogSettings = { FileJson: boolean; FileLocation: string; AdvancedLoggingConfig: string; + AdvancedLoggingJSON: Record; }; export type PasswordSettings = { @@ -504,6 +509,21 @@ export type FileSettings = { AmazonS3SSE: boolean; AmazonS3Trace: boolean; AmazonS3RequestTimeoutMilliseconds: number; + DedicatedExportStore: boolean; + ExportDriverName: string; + ExportDirectory: string; + ExportAmazonS3AccessKeyId: string; + ExportAmazonS3SecretAccessKey: string; + ExportAmazonS3Bucket: string; + ExportAmazonS3PathPrefix: string; + ExportAmazonS3Region: string; + ExportAmazonS3Endpoint: string; + ExportAmazonS3SSL: boolean; + ExportAmazonS3SignV2: boolean; + ExportAmazonS3SSE: boolean; + ExportAmazonS3Trace: boolean; + ExportAmazonS3RequestTimeoutMilliseconds: number; + ExportAmazonS3PresignExpiresSeconds: number; }; export type EmailSettings = { @@ -793,6 +813,10 @@ export type DataRetentionSettings = { FileRetentionDays: number; DeletionJobStartTime: string; BatchSize: number; + EnableBoardsDeletion: boolean, + BoardsRetentionDays: number; + TimeBetweenBatchesMilliseconds: number; + RetentionIdsBatchSize: number; }; export type MessageExportSettings = { @@ -842,6 +866,7 @@ export type PluginSettings = { export type DisplaySettings = { CustomURLSchemes: string[]; ExperimentalTimezone: boolean; + MaxMarkdownNodes: number; }; export type GuestAccountsSettings = { @@ -862,6 +887,7 @@ export type ImageProxySettings = { export type CloudSettings = { CWSURL: string; CWSAPIURL: string; + CWSMock: boolean; }; export type FeatureFlags = Record;