From 3727b182d3ab2f3b34d1e1ac67cff81df81876a2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Fri, 15 Mar 2024 17:38:28 +0100
Subject: [PATCH 01/21] chore: test setup
---
.run/All Tests.run.xml | 11 +
__tests__/initial.test.tsx | 16 +
package.json | 11 +-
yarn.lock | 1323 +++++++++++++++++++++++++++++++++++-
4 files changed, 1327 insertions(+), 34 deletions(-)
create mode 100644 .run/All Tests.run.xml
create mode 100644 __tests__/initial.test.tsx
diff --git a/.run/All Tests.run.xml b/.run/All Tests.run.xml
new file mode 100644
index 0000000..2b219cb
--- /dev/null
+++ b/.run/All Tests.run.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/__tests__/initial.test.tsx b/__tests__/initial.test.tsx
new file mode 100644
index 0000000..5516ecb
--- /dev/null
+++ b/__tests__/initial.test.tsx
@@ -0,0 +1,16 @@
+import { render } from '@testing-library/react-native';
+
+import { Screen } from '../components/base/screen';
+
+it('should pass', () => {
+ expect(1).toBe(1);
+});
+
+it('should fail', () => {
+ expect(1).toBe(2);
+});
+
+it('should pass with component', () => {
+ const { getByTestId } = render();
+ expect(getByTestId('screen')).toBeTruthy();
+});
diff --git a/package.json b/package.json
index 066042d..c4d0f77 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,8 @@
"lint:check": "eslint \"./**/*.ts?(x)\"",
"prettier": "prettier --write \"**/*.(ts|tsx)\"",
"prettier:check": "prettier --check \"**/*.(ts|tsx)\"",
+ "test": "jest",
+ "test:watch": "jest --watch",
"build:android": "eas build --platform android",
"build:ios": "eas build --platform ios",
"submit:android": "eas submit --platform android",
@@ -21,6 +23,8 @@
"@react-native-async-storage/async-storage": "1.18.2",
"@react-navigation/elements": "^1.3.21",
"@tanstack/react-query": "^5.17.15",
+ "@testing-library/react-native": "^12.4.3",
+ "@types/jest": "^29.5.12",
"axios": "^1.6.7",
"clsx": "^2.1.0",
"date-fns": "^3.2.0",
@@ -37,6 +41,8 @@
"expo-status-bar": "~1.6.0",
"expo-updates": "~0.18.19",
"i18next": "^23.8.2",
+ "jest": "^29.2.1",
+ "jest-expo": "~49.0.0",
"nativewind": "^2.0.11",
"react": "18.2.0",
"react-i18next": "^14.0.5",
@@ -60,5 +66,8 @@
"tailwindcss": "3.3.2",
"typescript": "^5.1.3"
},
- "private": true
+ "private": true,
+ "jest": {
+ "preset": "jest-expo"
+ }
}
diff --git a/yarn.lock b/yarn.lock
index 88b6548..6143906 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -45,6 +45,27 @@
resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz"
integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==
+"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b"
+ integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==
+ dependencies:
+ "@ampproject/remapping" "^2.2.0"
+ "@babel/code-frame" "^7.23.5"
+ "@babel/generator" "^7.23.6"
+ "@babel/helper-compilation-targets" "^7.23.6"
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helpers" "^7.24.0"
+ "@babel/parser" "^7.24.0"
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.0"
+ "@babel/types" "^7.24.0"
+ convert-source-map "^2.0.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.3"
+ semver "^6.3.1"
+
"@babel/core@^7.13.16", "@babel/core@^7.20.0":
version "7.23.6"
resolved "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz"
@@ -66,7 +87,7 @@
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/generator@^7.18.7", "@babel/generator@^7.20.0", "@babel/generator@^7.23.6":
+"@babel/generator@^7.18.7", "@babel/generator@^7.20.0", "@babel/generator@^7.23.6", "@babel/generator@^7.7.2":
version "7.23.6"
resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz"
integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==
@@ -272,6 +293,15 @@
"@babel/traverse" "^7.23.6"
"@babel/types" "^7.23.6"
+"@babel/helpers@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b"
+ integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==
+ dependencies:
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.0"
+ "@babel/types" "^7.24.0"
+
"@babel/highlight@^7.10.4", "@babel/highlight@^7.23.4":
version "7.23.4"
resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz"
@@ -281,6 +311,11 @@
chalk "^2.4.2"
js-tokens "^4.0.0"
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac"
+ integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==
+
"@babel/parser@^7.13.16", "@babel/parser@^7.20.0", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6":
version "7.23.6"
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz"
@@ -412,7 +447,14 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.12.13":
+"@babel/plugin-syntax-bigint@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
+ integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3":
version "7.12.13"
resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz"
integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
@@ -475,7 +517,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-syntax-import-meta@^7.10.4":
+"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3":
version "7.10.4"
resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz"
integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
@@ -489,14 +531,14 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.23.3":
+"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.7.2":
version "7.23.3"
resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz"
integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
version "7.10.4"
resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz"
integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
@@ -510,7 +552,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-numeric-separator@^7.10.4":
+"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":
version "7.10.4"
resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz"
integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
@@ -545,14 +587,14 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-top-level-await@^7.14.5":
+"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3":
version "7.14.5"
resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz"
integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-typescript@^7.23.3":
+"@babel/plugin-syntax-typescript@^7.23.3", "@babel/plugin-syntax-typescript@^7.7.2":
version "7.23.3"
resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz"
integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==
@@ -1172,6 +1214,15 @@
"@babel/parser" "^7.22.15"
"@babel/types" "^7.22.15"
+"@babel/template@^7.24.0", "@babel/template@^7.3.3":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50"
+ integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==
+ dependencies:
+ "@babel/code-frame" "^7.23.5"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
+
"@babel/traverse@^7.20.0", "@babel/traverse@^7.23.6":
version "7.23.6"
resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz"
@@ -1188,6 +1239,22 @@
debug "^4.3.1"
globals "^11.1.0"
+"@babel/traverse@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e"
+ integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==
+ dependencies:
+ "@babel/code-frame" "^7.23.5"
+ "@babel/generator" "^7.23.6"
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-function-name" "^7.23.0"
+ "@babel/helper-hoist-variables" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
+ debug "^4.3.1"
+ globals "^11.1.0"
+
"@babel/types@7.19.0":
version "7.19.0"
resolved "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz"
@@ -1197,6 +1264,15 @@
"@babel/helper-validator-identifier" "^7.18.6"
to-fast-properties "^2.0.0"
+"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.0", "@babel/types@^7.3.3":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf"
+ integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==
+ dependencies:
+ "@babel/helper-string-parser" "^7.23.4"
+ "@babel/helper-validator-identifier" "^7.22.20"
+ to-fast-properties "^2.0.0"
+
"@babel/types@^7.18.6", "@babel/types@^7.20.0", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.4.4":
version "7.23.6"
resolved "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz"
@@ -1211,6 +1287,11 @@
resolved "https://registry.npmjs.org/@bacons/react-views/-/react-views-1.1.3.tgz"
integrity sha512-aLipQAkQKRzG64e28XHBpByyBPfANz0A6POqYHGyryHizG9vLCLNQwLe8gwFANEMBWW2Mx5YdQ7RkNdQMQ+CXQ==
+"@bcoe/v8-coverage@^0.2.3":
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
+ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+
"@cspotcode/source-map-support@^0.8.0":
version "0.8.1"
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
@@ -1877,6 +1958,68 @@
wrap-ansi "^8.1.0"
wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+"@istanbuljs/load-nyc-config@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
+ integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+ dependencies:
+ camelcase "^5.3.1"
+ find-up "^4.1.0"
+ get-package-type "^0.1.0"
+ js-yaml "^3.13.1"
+ resolve-from "^5.0.0"
+
+"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
+ integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+
+"@jest/console@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc"
+ integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==
+ dependencies:
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ jest-message-util "^29.7.0"
+ jest-util "^29.7.0"
+ slash "^3.0.0"
+
+"@jest/core@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f"
+ integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==
+ dependencies:
+ "@jest/console" "^29.7.0"
+ "@jest/reporters" "^29.7.0"
+ "@jest/test-result" "^29.7.0"
+ "@jest/transform" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ ci-info "^3.2.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.9"
+ jest-changed-files "^29.7.0"
+ jest-config "^29.7.0"
+ jest-haste-map "^29.7.0"
+ jest-message-util "^29.7.0"
+ jest-regex-util "^29.6.3"
+ jest-resolve "^29.7.0"
+ jest-resolve-dependencies "^29.7.0"
+ jest-runner "^29.7.0"
+ jest-runtime "^29.7.0"
+ jest-snapshot "^29.7.0"
+ jest-util "^29.7.0"
+ jest-validate "^29.7.0"
+ jest-watcher "^29.7.0"
+ micromatch "^4.0.4"
+ pretty-format "^29.7.0"
+ slash "^3.0.0"
+ strip-ansi "^6.0.0"
+
"@jest/create-cache-key-function@^29.2.1":
version "29.7.0"
resolved "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz"
@@ -1894,6 +2037,21 @@
"@types/node" "*"
jest-mock "^29.7.0"
+"@jest/expect-utils@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6"
+ integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==
+ dependencies:
+ jest-get-type "^29.6.3"
+
+"@jest/expect@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2"
+ integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==
+ dependencies:
+ expect "^29.7.0"
+ jest-snapshot "^29.7.0"
+
"@jest/fake-timers@^29.7.0":
version "29.7.0"
resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz"
@@ -1906,6 +2064,46 @@
jest-mock "^29.7.0"
jest-util "^29.7.0"
+"@jest/globals@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d"
+ integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==
+ dependencies:
+ "@jest/environment" "^29.7.0"
+ "@jest/expect" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ jest-mock "^29.7.0"
+
+"@jest/reporters@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7"
+ integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==
+ dependencies:
+ "@bcoe/v8-coverage" "^0.2.3"
+ "@jest/console" "^29.7.0"
+ "@jest/test-result" "^29.7.0"
+ "@jest/transform" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@jridgewell/trace-mapping" "^0.3.18"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ collect-v8-coverage "^1.0.0"
+ exit "^0.1.2"
+ glob "^7.1.3"
+ graceful-fs "^4.2.9"
+ istanbul-lib-coverage "^3.0.0"
+ istanbul-lib-instrument "^6.0.0"
+ istanbul-lib-report "^3.0.0"
+ istanbul-lib-source-maps "^4.0.0"
+ istanbul-reports "^3.1.3"
+ jest-message-util "^29.7.0"
+ jest-util "^29.7.0"
+ jest-worker "^29.7.0"
+ slash "^3.0.0"
+ string-length "^4.0.1"
+ strip-ansi "^6.0.0"
+ v8-to-istanbul "^9.0.1"
+
"@jest/schemas@^29.6.3":
version "29.6.3"
resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz"
@@ -1913,6 +2111,56 @@
dependencies:
"@sinclair/typebox" "^0.27.8"
+"@jest/source-map@^29.6.3":
+ version "29.6.3"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4"
+ integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==
+ dependencies:
+ "@jridgewell/trace-mapping" "^0.3.18"
+ callsites "^3.0.0"
+ graceful-fs "^4.2.9"
+
+"@jest/test-result@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c"
+ integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==
+ dependencies:
+ "@jest/console" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ collect-v8-coverage "^1.0.0"
+
+"@jest/test-sequencer@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce"
+ integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==
+ dependencies:
+ "@jest/test-result" "^29.7.0"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^29.7.0"
+ slash "^3.0.0"
+
+"@jest/transform@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c"
+ integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==
+ dependencies:
+ "@babel/core" "^7.11.6"
+ "@jest/types" "^29.6.3"
+ "@jridgewell/trace-mapping" "^0.3.18"
+ babel-plugin-istanbul "^6.1.1"
+ chalk "^4.0.0"
+ convert-source-map "^2.0.0"
+ fast-json-stable-stringify "^2.1.0"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^29.7.0"
+ jest-regex-util "^29.6.3"
+ jest-util "^29.7.0"
+ micromatch "^4.0.4"
+ pirates "^4.0.4"
+ slash "^3.0.0"
+ write-file-atomic "^4.0.2"
+
"@jest/types@^26.6.2":
version "26.6.2"
resolved "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz"
@@ -1992,6 +2240,14 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
+"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18":
+ version "0.3.25"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
+ integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
version "0.3.20"
resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz"
@@ -2499,6 +2755,20 @@
dependencies:
"@tanstack/query-core" "5.17.15"
+"@testing-library/react-native@^12.4.3":
+ version "12.4.3"
+ resolved "https://registry.yarnpkg.com/@testing-library/react-native/-/react-native-12.4.3.tgz#57cd6a88b289f19144558b5e97336b57101af3ec"
+ integrity sha512-WLE7VbbR5jZJQl3vfNK7Wt+IHnzhOxyu95Mr56EHmzH3XhC8DkrPVAnUq9asq/QWj4aGnymbinFx6zZys/WZmA==
+ dependencies:
+ jest-matcher-utils "^29.7.0"
+ pretty-format "^29.7.0"
+ redent "^3.0.0"
+
+"@tootallnate/once@2":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
+ integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
+
"@tsconfig/node10@^1.0.7":
version "1.0.9"
resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
@@ -2519,6 +2789,39 @@
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9"
integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
+"@types/babel__core@^7.1.14":
+ version "7.20.5"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
+ integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
+ dependencies:
+ "@babel/parser" "^7.20.7"
+ "@babel/types" "^7.20.7"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.6.8"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab"
+ integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f"
+ integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
+ version "7.20.5"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd"
+ integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==
+ dependencies:
+ "@babel/types" "^7.20.7"
+
"@types/bunyan@^1.8.8":
version "1.8.11"
resolved "https://registry.yarnpkg.com/@types/bunyan/-/bunyan-1.8.11.tgz#0b9e7578a5aa2390faf12a460827154902299638"
@@ -2533,12 +2836,19 @@
dependencies:
"@types/node" "*"
+"@types/graceful-fs@^4.1.3":
+ version "4.1.9"
+ resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4"
+ integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==
+ dependencies:
+ "@types/node" "*"
+
"@types/hammerjs@^2.0.36":
version "2.0.45"
resolved "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.45.tgz"
integrity sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==
-"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
version "2.0.6"
resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz"
integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
@@ -2557,6 +2867,23 @@
dependencies:
"@types/istanbul-lib-report" "*"
+"@types/jest@^29.5.12":
+ version "29.5.12"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544"
+ integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==
+ dependencies:
+ expect "^29.0.0"
+ pretty-format "^29.0.0"
+
+"@types/jsdom@^20.0.0":
+ version "20.0.1"
+ resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808"
+ integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==
+ dependencies:
+ "@types/node" "*"
+ "@types/tough-cookie" "*"
+ parse5 "^7.0.0"
+
"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.9":
version "7.0.15"
resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz"
@@ -2603,6 +2930,11 @@
resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz"
integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==
+"@types/tough-cookie@*":
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304"
+ integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==
+
"@types/yargs-parser@*":
version "21.0.3"
resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz"
@@ -2777,6 +3109,11 @@
resolved "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz"
integrity sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==
+abab@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
+ integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
+
abort-controller@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz"
@@ -2792,17 +3129,25 @@ accepts@^1.3.7, accepts@^1.3.8, accepts@~1.3.5, accepts@~1.3.7:
mime-types "~2.1.34"
negotiator "0.6.3"
+acorn-globals@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3"
+ integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==
+ dependencies:
+ acorn "^8.1.0"
+ acorn-walk "^8.0.2"
+
acorn-jsx@^5.3.2:
version "5.3.2"
resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
-acorn-walk@^8.1.1:
+acorn-walk@^8.0.2, acorn-walk@^8.1.1:
version "8.3.2"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa"
integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==
-acorn@^8.4.1:
+acorn@^8.1.0, acorn@^8.4.1, acorn@^8.8.1:
version "8.11.3"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
@@ -2876,13 +3221,20 @@ anser@^1.4.9:
resolved "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz"
integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==
-ansi-escapes@^4.2.1, ansi-escapes@^4.3.2:
+ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.2:
version "4.3.2"
resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz"
integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
dependencies:
type-fest "^0.21.3"
+ansi-escapes@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947"
+ integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==
+ dependencies:
+ type-fest "^3.0.0"
+
ansi-fragments@^0.2.1:
version "0.2.1"
resolved "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz"
@@ -3070,6 +3422,40 @@ babel-core@^7.0.0-bridge.0:
resolved "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz"
integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
+babel-jest@^29.2.1, babel-jest@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5"
+ integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==
+ dependencies:
+ "@jest/transform" "^29.7.0"
+ "@types/babel__core" "^7.1.14"
+ babel-plugin-istanbul "^6.1.1"
+ babel-preset-jest "^29.6.3"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ slash "^3.0.0"
+
+babel-plugin-istanbul@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
+ integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@istanbuljs/load-nyc-config" "^1.0.0"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-instrument "^5.0.4"
+ test-exclude "^6.0.0"
+
+babel-plugin-jest-hoist@^29.6.3:
+ version "29.6.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626"
+ integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==
+ dependencies:
+ "@babel/template" "^7.3.3"
+ "@babel/types" "^7.3.3"
+ "@types/babel__core" "^7.1.14"
+ "@types/babel__traverse" "^7.0.6"
+
babel-plugin-module-resolver@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz"
@@ -3122,6 +3508,24 @@ babel-plugin-transform-flow-enums@^0.0.2:
dependencies:
"@babel/plugin-syntax-flow" "^7.12.1"
+babel-preset-current-node-syntax@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
+ integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==
+ dependencies:
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-bigint" "^7.8.3"
+ "@babel/plugin-syntax-class-properties" "^7.8.3"
+ "@babel/plugin-syntax-import-meta" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.8.3"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+ "@babel/plugin-syntax-top-level-await" "^7.8.3"
+
babel-preset-expo@~9.5.2:
version "9.5.2"
resolved "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-9.5.2.tgz"
@@ -3169,6 +3573,14 @@ babel-preset-fbjs@^3.4.0:
"@babel/plugin-transform-template-literals" "^7.0.0"
babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0"
+babel-preset-jest@^29.6.3:
+ version "29.6.3"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c"
+ integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==
+ dependencies:
+ babel-plugin-jest-hoist "^29.6.3"
+ babel-preset-current-node-syntax "^1.0.0"
+
badgin@^1.1.5:
version "1.2.3"
resolved "https://registry.npmjs.org/badgin/-/badgin-1.2.3.tgz"
@@ -3435,7 +3847,7 @@ camelcase-css@^2.0.1:
resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz"
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
-camelcase@^5.0.0:
+camelcase@^5.0.0, camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
@@ -3480,6 +3892,24 @@ chalk@^2.0.1, chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
+chalk@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
+ integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+char-regex@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
+ integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+
+char-regex@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e"
+ integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==
+
charenc@0.0.2, charenc@~0.0.1:
version "0.0.2"
resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz"
@@ -3515,6 +3945,11 @@ ci-info@^3.2.0, ci-info@^3.3.0:
resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz"
integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
+cjs-module-lexer@^1.0.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107"
+ integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==
+
clean-stack@^2.0.0:
version "2.2.0"
resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz"
@@ -3595,6 +4030,16 @@ clsx@^2.1.0:
resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz"
integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
+
+collect-v8-coverage@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9"
+ integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==
+
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
@@ -3759,6 +4204,19 @@ cosmiconfig@^5.0.5, cosmiconfig@^5.1.0:
js-yaml "^3.13.1"
parse-json "^4.0.0"
+create-jest@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320"
+ integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==
+ dependencies:
+ "@jest/types" "^29.6.3"
+ chalk "^4.0.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.9"
+ jest-config "^29.7.0"
+ jest-util "^29.7.0"
+ prompts "^2.0.1"
+
create-require@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
@@ -3854,6 +4312,23 @@ cssesc@^3.0.0:
resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+cssom@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36"
+ integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==
+
+cssom@~0.3.6:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
+ integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
+ dependencies:
+ cssom "~0.3.6"
+
csstype@^3.0.2:
version "3.1.3"
resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz"
@@ -3864,6 +4339,15 @@ dag-map@~1.0.0:
resolved "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz"
integrity sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==
+data-urls@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143"
+ integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==
+ dependencies:
+ abab "^2.0.6"
+ whatwg-mimetype "^3.0.0"
+ whatwg-url "^11.0.0"
+
date-fns@^3.2.0:
version "3.2.0"
resolved "https://registry.npmjs.org/date-fns/-/date-fns-3.2.0.tgz"
@@ -3905,11 +4389,21 @@ decamelize@^1.2.0:
resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz"
integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
+decimal.js@^10.4.2:
+ version "10.4.3"
+ resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
+ integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
+
decode-uri-component@^0.2.2:
version "0.2.2"
resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz"
integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
+dedent@^1.0.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff"
+ integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==
+
deep-extend@^0.6.0:
version "0.6.0"
resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz"
@@ -3920,7 +4414,7 @@ deep-is@^0.1.3:
resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
-deepmerge@^4.3.0:
+deepmerge@^4.2.2, deepmerge@^4.3.0:
version "4.3.1"
resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
@@ -4034,6 +4528,11 @@ detect-libc@^1.0.3:
resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz"
integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==
+detect-newline@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
+ integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
+
dicer@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.1.tgz#abf28921e3475bc5e801e74e0159fd94f927ba97"
@@ -4046,6 +4545,11 @@ didyoumean@^1.2.2:
resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz"
integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
+diff-sequences@^29.6.3:
+ version "29.6.3"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
+ integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==
+
diff@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
@@ -4084,6 +4588,13 @@ domelementtype@^2.3.0:
resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz"
integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+domexception@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673"
+ integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==
+ dependencies:
+ webidl-conversions "^7.0.0"
+
domhandler@^5.0.2, domhandler@^5.0.3:
version "5.0.3"
resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz"
@@ -4242,6 +4753,11 @@ electron-to-chromium@^1.4.601:
resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz"
integrity sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==
+emittery@^0.13.1:
+ version "0.13.1"
+ resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad"
+ integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==
+
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
@@ -4264,7 +4780,7 @@ end-of-stream@^1.1.0:
dependencies:
once "^1.4.0"
-entities@^4.2.0:
+entities@^4.2.0, entities@^4.4.0:
version "4.5.0"
resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
@@ -4351,6 +4867,17 @@ escape-string-regexp@^2.0.0:
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+escodegen@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17"
+ integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^5.2.0"
+ esutils "^2.0.2"
+ optionalDependencies:
+ source-map "~0.6.1"
+
eslint-config-prettier@^9.1.0:
version "9.1.0"
resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz"
@@ -4435,7 +4962,7 @@ espree@^9.6.0, espree@^9.6.1:
acorn-jsx "^5.3.2"
eslint-visitor-keys "^3.4.1"
-esprima@^4.0.0, esprima@~4.0.0:
+esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0:
version "4.0.1"
resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
@@ -4522,6 +5049,22 @@ execa@^7.1.1:
signal-exit "^3.0.7"
strip-final-newline "^3.0.0"
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+ integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
+
+expect@^29.0.0, expect@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc"
+ integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==
+ dependencies:
+ "@jest/expect-utils" "^29.7.0"
+ jest-get-type "^29.6.3"
+ jest-matcher-utils "^29.7.0"
+ jest-message-util "^29.7.0"
+ jest-util "^29.7.0"
+
expo-application@~5.3.0:
version "5.3.1"
resolved "https://registry.npmjs.org/expo-application/-/expo-application-5.3.1.tgz"
@@ -4753,7 +5296,7 @@ fast-glob@3.3.2, fast-glob@^3.2.12, fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glo
merge2 "^1.3.0"
micromatch "^4.0.4"
-fast-json-stable-stringify@^2.0.0:
+fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
@@ -5320,6 +5863,18 @@ hosted-git-info@^3.0.2:
dependencies:
lru-cache "^6.0.0"
+html-encoding-sniffer@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
+ integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==
+ dependencies:
+ whatwg-encoding "^2.0.0"
+
+html-escaper@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
html-parse-stringify@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2"
@@ -5350,6 +5905,15 @@ http-errors@2.0.0:
statuses "2.0.1"
toidentifier "1.0.1"
+http-proxy-agent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
+ integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
+ dependencies:
+ "@tootallnate/once" "2"
+ agent-base "6"
+ debug "4"
+
https-proxy-agent@5.0.1, https-proxy-agent@^5.0.1:
version "5.0.1"
resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz"
@@ -5387,6 +5951,13 @@ iconv-lite@0.4.24:
dependencies:
safer-buffer ">= 2.1.2 < 3"
+iconv-lite@0.6.3:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+ integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
ieee754@^1.1.13:
version "1.2.1"
resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz"
@@ -5420,7 +5991,15 @@ import-fresh@^3.2.1:
parent-module "^1.0.0"
resolve-from "^4.0.0"
-imurmurhash@^0.1.4:
+import-local@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
+ integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
+ dependencies:
+ pkg-dir "^4.2.0"
+ resolve-cwd "^3.0.0"
+
+imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
@@ -5560,6 +6139,11 @@ is-fullwidth-code-point@^3.0.0:
resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+is-generator-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+ integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
is-generator-function@^1.0.7:
version "1.0.10"
resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz"
@@ -5635,6 +6219,11 @@ is-plain-object@^2.0.4:
dependencies:
isobject "^3.0.1"
+is-potential-custom-element-name@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
+ integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
+
is-retry-allowed@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
@@ -5701,6 +6290,59 @@ isobject@^3.0.1:
resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz"
integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756"
+ integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==
+
+istanbul-lib-instrument@^5.0.4:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d"
+ integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==
+ dependencies:
+ "@babel/core" "^7.12.3"
+ "@babel/parser" "^7.14.7"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-coverage "^3.2.0"
+ semver "^6.3.0"
+
+istanbul-lib-instrument@^6.0.0:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1"
+ integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==
+ dependencies:
+ "@babel/core" "^7.23.9"
+ "@babel/parser" "^7.23.9"
+ "@istanbuljs/schema" "^0.1.3"
+ istanbul-lib-coverage "^3.2.0"
+ semver "^7.5.4"
+
+istanbul-lib-report@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d"
+ integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==
+ dependencies:
+ istanbul-lib-coverage "^3.0.0"
+ make-dir "^4.0.0"
+ supports-color "^7.1.0"
+
+istanbul-lib-source-maps@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551"
+ integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
+ dependencies:
+ debug "^4.1.1"
+ istanbul-lib-coverage "^3.0.0"
+ source-map "^0.6.1"
+
+istanbul-reports@^3.1.3:
+ version "3.1.7"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b"
+ integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==
+ dependencies:
+ html-escaper "^2.0.0"
+ istanbul-lib-report "^3.0.0"
+
jackspeak@^2.3.5:
version "2.3.6"
resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz"
@@ -5720,7 +6362,129 @@ jake@^10.8.5:
filelist "^1.0.4"
minimatch "^3.1.2"
-jest-environment-node@^29.2.1:
+jest-changed-files@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a"
+ integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==
+ dependencies:
+ execa "^5.0.0"
+ jest-util "^29.7.0"
+ p-limit "^3.1.0"
+
+jest-circus@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a"
+ integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==
+ dependencies:
+ "@jest/environment" "^29.7.0"
+ "@jest/expect" "^29.7.0"
+ "@jest/test-result" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ co "^4.6.0"
+ dedent "^1.0.0"
+ is-generator-fn "^2.0.0"
+ jest-each "^29.7.0"
+ jest-matcher-utils "^29.7.0"
+ jest-message-util "^29.7.0"
+ jest-runtime "^29.7.0"
+ jest-snapshot "^29.7.0"
+ jest-util "^29.7.0"
+ p-limit "^3.1.0"
+ pretty-format "^29.7.0"
+ pure-rand "^6.0.0"
+ slash "^3.0.0"
+ stack-utils "^2.0.3"
+
+jest-cli@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995"
+ integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==
+ dependencies:
+ "@jest/core" "^29.7.0"
+ "@jest/test-result" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ chalk "^4.0.0"
+ create-jest "^29.7.0"
+ exit "^0.1.2"
+ import-local "^3.0.2"
+ jest-config "^29.7.0"
+ jest-util "^29.7.0"
+ jest-validate "^29.7.0"
+ yargs "^17.3.1"
+
+jest-config@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f"
+ integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==
+ dependencies:
+ "@babel/core" "^7.11.6"
+ "@jest/test-sequencer" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ babel-jest "^29.7.0"
+ chalk "^4.0.0"
+ ci-info "^3.2.0"
+ deepmerge "^4.2.2"
+ glob "^7.1.3"
+ graceful-fs "^4.2.9"
+ jest-circus "^29.7.0"
+ jest-environment-node "^29.7.0"
+ jest-get-type "^29.6.3"
+ jest-regex-util "^29.6.3"
+ jest-resolve "^29.7.0"
+ jest-runner "^29.7.0"
+ jest-util "^29.7.0"
+ jest-validate "^29.7.0"
+ micromatch "^4.0.4"
+ parse-json "^5.2.0"
+ pretty-format "^29.7.0"
+ slash "^3.0.0"
+ strip-json-comments "^3.1.1"
+
+jest-diff@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a"
+ integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==
+ dependencies:
+ chalk "^4.0.0"
+ diff-sequences "^29.6.3"
+ jest-get-type "^29.6.3"
+ pretty-format "^29.7.0"
+
+jest-docblock@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a"
+ integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==
+ dependencies:
+ detect-newline "^3.0.0"
+
+jest-each@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1"
+ integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==
+ dependencies:
+ "@jest/types" "^29.6.3"
+ chalk "^4.0.0"
+ jest-get-type "^29.6.3"
+ jest-util "^29.7.0"
+ pretty-format "^29.7.0"
+
+jest-environment-jsdom@^29.2.1:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz#d206fa3551933c3fd519e5dfdb58a0f5139a837f"
+ integrity sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==
+ dependencies:
+ "@jest/environment" "^29.7.0"
+ "@jest/fake-timers" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/jsdom" "^20.0.0"
+ "@types/node" "*"
+ jest-mock "^29.7.0"
+ jest-util "^29.7.0"
+ jsdom "^20.0.0"
+
+jest-environment-node@^29.2.1, jest-environment-node@^29.7.0:
version "29.7.0"
resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz"
integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==
@@ -5732,11 +6496,64 @@ jest-environment-node@^29.2.1:
jest-mock "^29.7.0"
jest-util "^29.7.0"
+jest-expo@~49.0.0:
+ version "49.0.0"
+ resolved "https://registry.yarnpkg.com/jest-expo/-/jest-expo-49.0.0.tgz#d1c91ddb1303f8666de47d45ba52174bff6fb241"
+ integrity sha512-nglYg6QPYSqCsrsOFiGosQi+m1rrqmYluPbFXNnXNEOrB2MvxMOgQJeWfMHDExHMX1ymLWX+7y8mYo6XVJpBJQ==
+ dependencies:
+ "@expo/config" "~8.1.0"
+ "@jest/create-cache-key-function" "^29.2.1"
+ babel-jest "^29.2.1"
+ find-up "^5.0.0"
+ jest-environment-jsdom "^29.2.1"
+ jest-watch-select-projects "^2.0.0"
+ jest-watch-typeahead "2.2.1"
+ json5 "^2.2.3"
+ lodash "^4.17.19"
+ react-test-renderer "18.2.0"
+
jest-get-type@^29.6.3:
version "29.6.3"
resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz"
integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==
+jest-haste-map@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104"
+ integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==
+ dependencies:
+ "@jest/types" "^29.6.3"
+ "@types/graceful-fs" "^4.1.3"
+ "@types/node" "*"
+ anymatch "^3.0.3"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.2.9"
+ jest-regex-util "^29.6.3"
+ jest-util "^29.7.0"
+ jest-worker "^29.7.0"
+ micromatch "^4.0.4"
+ walker "^1.0.8"
+ optionalDependencies:
+ fsevents "^2.3.2"
+
+jest-leak-detector@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728"
+ integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==
+ dependencies:
+ jest-get-type "^29.6.3"
+ pretty-format "^29.7.0"
+
+jest-matcher-utils@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12"
+ integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==
+ dependencies:
+ chalk "^4.0.0"
+ jest-diff "^29.7.0"
+ jest-get-type "^29.6.3"
+ pretty-format "^29.7.0"
+
jest-message-util@^29.7.0:
version "29.7.0"
resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz"
@@ -5761,11 +6578,125 @@ jest-mock@^29.7.0:
"@types/node" "*"
jest-util "^29.7.0"
+jest-pnp-resolver@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e"
+ integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==
+
jest-regex-util@^27.0.6:
version "27.5.1"
resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz"
integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==
+jest-regex-util@^29.0.0, jest-regex-util@^29.6.3:
+ version "29.6.3"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52"
+ integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==
+
+jest-resolve-dependencies@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428"
+ integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==
+ dependencies:
+ jest-regex-util "^29.6.3"
+ jest-snapshot "^29.7.0"
+
+jest-resolve@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30"
+ integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==
+ dependencies:
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^29.7.0"
+ jest-pnp-resolver "^1.2.2"
+ jest-util "^29.7.0"
+ jest-validate "^29.7.0"
+ resolve "^1.20.0"
+ resolve.exports "^2.0.0"
+ slash "^3.0.0"
+
+jest-runner@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e"
+ integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==
+ dependencies:
+ "@jest/console" "^29.7.0"
+ "@jest/environment" "^29.7.0"
+ "@jest/test-result" "^29.7.0"
+ "@jest/transform" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ emittery "^0.13.1"
+ graceful-fs "^4.2.9"
+ jest-docblock "^29.7.0"
+ jest-environment-node "^29.7.0"
+ jest-haste-map "^29.7.0"
+ jest-leak-detector "^29.7.0"
+ jest-message-util "^29.7.0"
+ jest-resolve "^29.7.0"
+ jest-runtime "^29.7.0"
+ jest-util "^29.7.0"
+ jest-watcher "^29.7.0"
+ jest-worker "^29.7.0"
+ p-limit "^3.1.0"
+ source-map-support "0.5.13"
+
+jest-runtime@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817"
+ integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==
+ dependencies:
+ "@jest/environment" "^29.7.0"
+ "@jest/fake-timers" "^29.7.0"
+ "@jest/globals" "^29.7.0"
+ "@jest/source-map" "^29.6.3"
+ "@jest/test-result" "^29.7.0"
+ "@jest/transform" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ cjs-module-lexer "^1.0.0"
+ collect-v8-coverage "^1.0.0"
+ glob "^7.1.3"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^29.7.0"
+ jest-message-util "^29.7.0"
+ jest-mock "^29.7.0"
+ jest-regex-util "^29.6.3"
+ jest-resolve "^29.7.0"
+ jest-snapshot "^29.7.0"
+ jest-util "^29.7.0"
+ slash "^3.0.0"
+ strip-bom "^4.0.0"
+
+jest-snapshot@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5"
+ integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==
+ dependencies:
+ "@babel/core" "^7.11.6"
+ "@babel/generator" "^7.7.2"
+ "@babel/plugin-syntax-jsx" "^7.7.2"
+ "@babel/plugin-syntax-typescript" "^7.7.2"
+ "@babel/types" "^7.3.3"
+ "@jest/expect-utils" "^29.7.0"
+ "@jest/transform" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ babel-preset-current-node-syntax "^1.0.0"
+ chalk "^4.0.0"
+ expect "^29.7.0"
+ graceful-fs "^4.2.9"
+ jest-diff "^29.7.0"
+ jest-get-type "^29.6.3"
+ jest-matcher-utils "^29.7.0"
+ jest-message-util "^29.7.0"
+ jest-util "^29.7.0"
+ natural-compare "^1.4.0"
+ pretty-format "^29.7.0"
+ semver "^7.5.3"
+
jest-util@^27.2.0:
version "27.5.1"
resolved "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz"
@@ -5790,7 +6721,7 @@ jest-util@^29.7.0:
graceful-fs "^4.2.9"
picomatch "^2.2.3"
-jest-validate@^29.2.1:
+jest-validate@^29.2.1, jest-validate@^29.7.0:
version "29.7.0"
resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz"
integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==
@@ -5802,6 +6733,42 @@ jest-validate@^29.2.1:
leven "^3.1.0"
pretty-format "^29.7.0"
+jest-watch-select-projects@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/jest-watch-select-projects/-/jest-watch-select-projects-2.0.0.tgz#4373d7e4de862aae28b46e036b669a4c913ea867"
+ integrity sha512-j00nW4dXc2NiCW6znXgFLF9g8PJ0zP25cpQ1xRro/HU2GBfZQFZD0SoXnAlaoKkIY4MlfTMkKGbNXFpvCdjl1w==
+ dependencies:
+ ansi-escapes "^4.3.0"
+ chalk "^3.0.0"
+ prompts "^2.2.1"
+
+jest-watch-typeahead@2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-2.2.1.tgz#36601520a2a30fd561788552dbda9c76bb44814a"
+ integrity sha512-jYpYmUnTzysmVnwq49TAxlmtOAwp8QIqvZyoofQFn8fiWhEDZj33ZXzg3JA4nGnzWFm1hbWf3ADpteUokvXgFA==
+ dependencies:
+ ansi-escapes "^6.0.0"
+ chalk "^4.0.0"
+ jest-regex-util "^29.0.0"
+ jest-watcher "^29.0.0"
+ slash "^5.0.0"
+ string-length "^5.0.1"
+ strip-ansi "^7.0.1"
+
+jest-watcher@^29.0.0, jest-watcher@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2"
+ integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==
+ dependencies:
+ "@jest/test-result" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ emittery "^0.13.1"
+ jest-util "^29.7.0"
+ string-length "^4.0.1"
+
jest-worker@^27.2.0:
version "27.5.1"
resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz"
@@ -5811,6 +6778,26 @@ jest-worker@^27.2.0:
merge-stream "^2.0.0"
supports-color "^8.0.0"
+jest-worker@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a"
+ integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==
+ dependencies:
+ "@types/node" "*"
+ jest-util "^29.7.0"
+ merge-stream "^2.0.0"
+ supports-color "^8.0.0"
+
+jest@^29.2.1:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613"
+ integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==
+ dependencies:
+ "@jest/core" "^29.7.0"
+ "@jest/types" "^29.6.3"
+ import-local "^3.0.2"
+ jest-cli "^29.7.0"
+
jimp-compact@0.16.1:
version "0.16.1"
resolved "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz"
@@ -5912,6 +6899,38 @@ jscodeshift@^0.14.0:
temp "^0.8.4"
write-file-atomic "^2.3.0"
+jsdom@^20.0.0:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db"
+ integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==
+ dependencies:
+ abab "^2.0.6"
+ acorn "^8.8.1"
+ acorn-globals "^7.0.0"
+ cssom "^0.5.0"
+ cssstyle "^2.3.0"
+ data-urls "^3.0.2"
+ decimal.js "^10.4.2"
+ domexception "^4.0.0"
+ escodegen "^2.0.0"
+ form-data "^4.0.0"
+ html-encoding-sniffer "^3.0.0"
+ http-proxy-agent "^5.0.0"
+ https-proxy-agent "^5.0.1"
+ is-potential-custom-element-name "^1.0.1"
+ nwsapi "^2.2.2"
+ parse5 "^7.1.1"
+ saxes "^6.0.0"
+ symbol-tree "^3.2.4"
+ tough-cookie "^4.1.2"
+ w3c-xmlserializer "^4.0.0"
+ webidl-conversions "^7.0.0"
+ whatwg-encoding "^2.0.0"
+ whatwg-mimetype "^3.0.0"
+ whatwg-url "^11.0.0"
+ ws "^8.11.0"
+ xml-name-validator "^4.0.0"
+
jsesc@^2.5.1:
version "2.5.2"
resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"
@@ -5932,6 +6951,11 @@ json-parse-better-errors@^1.0.1:
resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz"
integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+json-parse-even-better-errors@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
json-schema-deref-sync@^0.13.0:
version "0.13.0"
resolved "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz"
@@ -6162,7 +7186,7 @@ lodash.throttle@^4.1.1:
resolved "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz"
integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==
-lodash@^4.17.13, lodash@^4.17.21, lodash@^4.17.4:
+lodash@^4.17.13, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4:
version "4.17.21"
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -6225,6 +7249,13 @@ make-dir@^2.0.0, make-dir@^2.1.0:
pify "^4.0.1"
semver "^5.6.0"
+make-dir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e"
+ integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==
+ dependencies:
+ semver "^7.5.3"
+
make-error@^1.1.1:
version "1.3.6"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
@@ -6620,6 +7651,11 @@ mimic-fn@^4.0.0:
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz"
integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
+min-indent@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
+ integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
+
"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
@@ -6936,6 +7972,11 @@ nullthrows@1.1.1, nullthrows@^1.1.1:
resolved "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz"
integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==
+nwsapi@^2.2.2:
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30"
+ integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==
+
ob1@0.76.8:
version "0.76.8"
resolved "https://registry.npmjs.org/ob1/-/ob1-0.76.8.tgz"
@@ -7195,6 +8236,16 @@ parse-json@^4.0.0:
error-ex "^1.3.1"
json-parse-better-errors "^1.0.1"
+parse-json@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
parse-png@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz"
@@ -7202,6 +8253,13 @@ parse-png@^2.1.0:
dependencies:
pngjs "^3.3.0"
+parse5@^7.0.0, parse5@^7.1.1:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
+ integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
+ dependencies:
+ entities "^4.4.0"
+
parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"
@@ -7288,12 +8346,12 @@ pify@^4.0.1:
resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz"
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
-pirates@^4.0.1, pirates@^4.0.5:
+pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.5:
version "4.0.6"
resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz"
integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
-pkg-dir@4.2.0:
+pkg-dir@4.2.0, pkg-dir@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
@@ -7458,7 +8516,7 @@ pretty-format@^26.5.2, pretty-format@^26.6.2:
ansi-styles "^4.0.0"
react-is "^17.0.1"
-pretty-format@^29.7.0:
+pretty-format@^29.0.0, pretty-format@^29.7.0:
version "29.7.0"
resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz"
integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==
@@ -7509,7 +8567,7 @@ promise@^8.3.0:
dependencies:
asap "~2.0.6"
-prompts@2.4.2, prompts@^2.3.2, prompts@^2.4.0:
+prompts@2.4.2, prompts@^2.0.1, prompts@^2.2.1, prompts@^2.3.2, prompts@^2.4.0:
version "2.4.2"
resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz"
integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
@@ -7531,6 +8589,11 @@ proxy-from-env@^1.1.0:
resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+psl@^1.1.33:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
+ integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
+
pump@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz"
@@ -7544,11 +8607,16 @@ punycode@^1.4.1:
resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz"
integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==
-punycode@^2.1.0:
+punycode@^2.1.0, punycode@^2.1.1:
version "2.3.1"
resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz"
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+pure-rand@^6.0.0:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7"
+ integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==
+
qrcode-terminal@0.11.0:
version "0.11.0"
resolved "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz"
@@ -7662,7 +8730,7 @@ react-i18next@^14.0.5:
"@babel/runtime" "^7.23.9"
html-parse-stringify "^3.0.1"
-"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.1.0:
+"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.1.0, react-is@^18.2.0:
version "18.2.0"
resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz"
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
@@ -7765,6 +8833,15 @@ react-shallow-renderer@^16.15.0:
object-assign "^4.1.1"
react-is "^16.12.0 || ^17.0.0 || ^18.0.0"
+react-test-renderer@18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.2.0.tgz#1dd912bd908ff26da5b9fca4fd1c489b9523d37e"
+ integrity sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==
+ dependencies:
+ react-is "^18.2.0"
+ react-shallow-renderer "^16.15.0"
+ scheduler "^0.23.0"
+
react@18.2.0:
version "18.2.0"
resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz"
@@ -7823,6 +8900,14 @@ recast@^0.21.0:
source-map "~0.6.1"
tslib "^2.0.1"
+redent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
+ integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
+ dependencies:
+ indent-string "^4.0.0"
+ strip-indent "^3.0.0"
+
redeyed@~2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b"
@@ -7917,6 +9002,13 @@ reselect@^4.1.7:
resolved "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz"
integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==
+resolve-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+ dependencies:
+ resolve-from "^5.0.0"
+
resolve-from@5.0.0, resolve-from@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz"
@@ -7932,7 +9024,12 @@ resolve-from@^4.0.0:
resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
-resolve@^1.1.7, resolve@^1.14.2, resolve@^1.22.1, resolve@^1.22.2:
+resolve.exports@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800"
+ integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==
+
+resolve@^1.1.7, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.2:
version "1.22.8"
resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
@@ -8031,7 +9128,7 @@ safe-json-stringify@~1:
resolved "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz"
integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==
-"safer-buffer@>= 2.1.2 < 3", safer-buffer@~2.1.0:
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@@ -8041,6 +9138,13 @@ sax@>=0.6.0:
resolved "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz"
integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==
+saxes@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5"
+ integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==
+ dependencies:
+ xmlchars "^2.2.0"
+
scheduler@0.24.0-canary-efb381bbf-20230505:
version "0.24.0-canary-efb381bbf-20230505"
resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz"
@@ -8048,6 +9152,13 @@ scheduler@0.24.0-canary-efb381bbf-20230505:
dependencies:
loose-envify "^1.1.0"
+scheduler@^0.23.0:
+ version "0.23.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
+ integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
+ dependencies:
+ loose-envify "^1.1.0"
+
schema-utils@^4.0.1:
version "4.2.0"
resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz"
@@ -8089,7 +9200,7 @@ semver@^5.5.0, semver@^5.6.0:
resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz"
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
-semver@^6.3.1:
+semver@^6.3.0, semver@^6.3.1:
version "6.3.1"
resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
@@ -8253,6 +9364,11 @@ slash@3.0.0, slash@^3.0.0:
resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+slash@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce"
+ integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==
+
slice-ansi@^2.0.0:
version "2.1.0"
resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz"
@@ -8281,6 +9397,14 @@ source-map-js@^1.0.2:
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+source-map-support@0.5.13:
+ version "0.5.13"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
+ integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
source-map-support@^0.5.16, source-map-support@~0.5.20:
version "0.5.21"
resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz"
@@ -8372,6 +9496,22 @@ strict-uri-encode@^2.0.0:
resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz"
integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==
+string-length@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
+ integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==
+ dependencies:
+ char-regex "^1.0.2"
+ strip-ansi "^6.0.0"
+
+string-length@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-5.0.1.tgz#3d647f497b6e8e8d41e422f7e0b23bc536c8381e"
+ integrity sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==
+ dependencies:
+ char-regex "^2.0.0"
+ strip-ansi "^7.0.1"
+
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
@@ -8425,6 +9565,11 @@ strip-ansi@^7.0.1:
dependencies:
ansi-regex "^6.0.1"
+strip-bom@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
strip-eof@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz"
@@ -8440,6 +9585,13 @@ strip-final-newline@^3.0.0:
resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz"
integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
+strip-indent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
+ integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
+ dependencies:
+ min-indent "^1.0.0"
+
strip-json-comments@^3.1.1:
version "3.1.1"
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
@@ -8535,6 +9687,11 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+symbol-tree@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
synckit@^0.8.5:
version "0.8.6"
resolved "https://registry.npmjs.org/synckit/-/synckit-0.8.6.tgz"
@@ -8646,6 +9803,15 @@ terser@^5.15.0:
commander "^2.20.0"
source-map-support "~0.5.20"
+test-exclude@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
+ integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
+ dependencies:
+ "@istanbuljs/schema" "^0.1.2"
+ glob "^7.1.4"
+ minimatch "^3.0.4"
+
text-table@^0.2.0:
version "0.2.0"
resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
@@ -8722,6 +9888,23 @@ toidentifier@1.0.1:
resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz"
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+tough-cookie@^4.1.2:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf"
+ integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==
+ dependencies:
+ psl "^1.1.33"
+ punycode "^2.1.1"
+ universalify "^0.2.0"
+ url-parse "^1.5.3"
+
+tr46@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9"
+ integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==
+ dependencies:
+ punycode "^2.1.1"
+
tr46@~0.0.3:
version "0.0.3"
resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz"
@@ -8827,6 +10010,11 @@ type-fest@^0.7.1:
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz"
integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==
+type-fest@^3.0.0:
+ version "3.13.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706"
+ integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==
+
type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"
@@ -8919,6 +10107,11 @@ universalify@^0.1.0:
resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+universalify@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0"
+ integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==
+
universalify@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz"
@@ -8959,7 +10152,7 @@ url-join@4.0.0:
resolved "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz"
integrity sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA==
-url-parse@^1.5.9:
+url-parse@^1.5.3, url-parse@^1.5.9:
version "1.5.10"
resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz"
integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
@@ -9031,6 +10224,15 @@ v8-compile-cache-lib@^3.0.1:
resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
+v8-to-istanbul@^9.0.1:
+ version "9.2.0"
+ resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad"
+ integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==
+ dependencies:
+ "@jridgewell/trace-mapping" "^0.3.12"
+ "@types/istanbul-lib-coverage" "^2.0.1"
+ convert-source-map "^2.0.0"
+
valid-url@~1.0.9:
version "1.0.9"
resolved "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz"
@@ -9058,7 +10260,14 @@ void-elements@3.1.0:
resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09"
integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==
-walker@^1.0.7:
+w3c-xmlserializer@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073"
+ integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==
+ dependencies:
+ xml-name-validator "^4.0.0"
+
+walker@^1.0.7, walker@^1.0.8:
version "1.0.8"
resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz"
integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
@@ -9082,11 +10291,36 @@ webidl-conversions@^3.0.0:
resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz"
integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+webidl-conversions@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
+ integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
+
+whatwg-encoding@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53"
+ integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==
+ dependencies:
+ iconv-lite "0.6.3"
+
whatwg-fetch@^3.0.0:
version "3.6.20"
resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz"
integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==
+whatwg-mimetype@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7"
+ integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==
+
+whatwg-url@^11.0.0:
+ version "11.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018"
+ integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==
+ dependencies:
+ tr46 "^3.0.0"
+ webidl-conversions "^7.0.0"
+
whatwg-url@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz"
@@ -9188,6 +10422,14 @@ write-file-atomic@^2.3.0:
imurmurhash "^0.1.4"
signal-exit "^3.0.2"
+write-file-atomic@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd"
+ integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==
+ dependencies:
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.7"
+
ws@^6.2.2:
version "6.2.2"
resolved "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz"
@@ -9200,6 +10442,11 @@ ws@^7, ws@^7.5.1:
resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz"
integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
+ws@^8.11.0:
+ version "8.16.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4"
+ integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==
+
ws@^8.12.1:
version "8.15.1"
resolved "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz"
@@ -9213,6 +10460,11 @@ xcode@^3.0.1:
simple-plist "^1.1.0"
uuid "^7.0.3"
+xml-name-validator@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
+ integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
+
xml2js@0.6.0:
version "0.6.0"
resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz"
@@ -9236,6 +10488,11 @@ xmlbuilder@~11.0.0:
resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz"
integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
+xmlchars@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+ integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
@@ -9296,7 +10553,7 @@ yargs@^15.1.0:
y18n "^4.0.0"
yargs-parser "^18.1.2"
-yargs@^17.6.2:
+yargs@^17.3.1, yargs@^17.6.2:
version "17.7.2"
resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz"
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
From 3fed83b4d26a546e213f7fb23b61173dc9863f63 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Fri, 15 Mar 2024 17:45:06 +0100
Subject: [PATCH 02/21] chore: screen tests
---
__tests__/components/base/screen.test.tsx | 30 +++++++++++++++++++++++
__tests__/initial.test.tsx | 16 ------------
2 files changed, 30 insertions(+), 16 deletions(-)
create mode 100644 __tests__/components/base/screen.test.tsx
delete mode 100644 __tests__/initial.test.tsx
diff --git a/__tests__/components/base/screen.test.tsx b/__tests__/components/base/screen.test.tsx
new file mode 100644
index 0000000..d89f1f5
--- /dev/null
+++ b/__tests__/components/base/screen.test.tsx
@@ -0,0 +1,30 @@
+import { render } from '@testing-library/react-native';
+
+import { Screen } from '../../../components/base/screen';
+import { AnalyticsService } from '../../../services/analytics.service';
+
+jest.mock('../../../services/analytics.service', () => ({
+ AnalyticsService: {
+ sendPageView: jest.fn(),
+ },
+}));
+
+beforeEach(() => {
+ jest.clearAllMocks();
+});
+
+it('should render screen', () => {
+ const { getByTestId } = render();
+ expect(getByTestId('testId')).toBeTruthy();
+});
+
+it('should send analytics event if provided', () => {
+ const { getByTestId } = render();
+ expect(getByTestId('testId')).toBeTruthy();
+ expect(AnalyticsService.sendPageView).toHaveBeenCalledWith('testLocation');
+});
+
+it('should not send analytics event if not provided', () => {
+ render();
+ expect(AnalyticsService.sendPageView).not.toHaveBeenCalled();
+});
diff --git a/__tests__/initial.test.tsx b/__tests__/initial.test.tsx
deleted file mode 100644
index 5516ecb..0000000
--- a/__tests__/initial.test.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { render } from '@testing-library/react-native';
-
-import { Screen } from '../components/base/screen';
-
-it('should pass', () => {
- expect(1).toBe(1);
-});
-
-it('should fail', () => {
- expect(1).toBe(2);
-});
-
-it('should pass with component', () => {
- const { getByTestId } = render();
- expect(getByTestId('screen')).toBeTruthy();
-});
From e65f22dcf7f22ad1a07158bbae58cccc1e6e273a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Fri, 15 Mar 2024 18:07:46 +0100
Subject: [PATCH 03/21] chore: styled button tests
---
.../components/common/styled-button.test.tsx | 32 +++++++++++++++++++
components/common/styled-button.tsx | 14 ++++++--
2 files changed, 44 insertions(+), 2 deletions(-)
create mode 100644 __tests__/components/common/styled-button.test.tsx
diff --git a/__tests__/components/common/styled-button.test.tsx b/__tests__/components/common/styled-button.test.tsx
new file mode 100644
index 0000000..5fcf7b8
--- /dev/null
+++ b/__tests__/components/common/styled-button.test.tsx
@@ -0,0 +1,32 @@
+import { render, screen, waitFor } from '@testing-library/react-native';
+
+import { StyledButton } from '../../../components/common/styled-button';
+
+beforeEach(() => {
+ jest.clearAllMocks();
+});
+
+it('should have children if provided', () => {
+ const { queryByText } = render(Click me);
+ expect(queryByText('Click me')).toBeTruthy();
+});
+
+it('should have left icon if provided', async () => {
+ const { queryByTestId } = render();
+ await waitFor(() => expect(queryByTestId('left-icon')).toBeTruthy());
+});
+
+it("should not have left icon if it's not provided", () => {
+ const { queryByTestId } = render();
+ expect(queryByTestId('left-icon')).toBeFalsy();
+});
+
+it('should have right icon if provided', async () => {
+ const { queryByTestId } = render();
+ await waitFor(() => expect(queryByTestId('right-icon')).toBeTruthy());
+});
+
+it("should not have right icon if it's not provided", () => {
+ const { queryByTestId } = render();
+ expect(queryByTestId('right-icon')).toBeFalsy();
+});
diff --git a/components/common/styled-button.tsx b/components/common/styled-button.tsx
index d38a2aa..1c61e6a 100644
--- a/components/common/styled-button.tsx
+++ b/components/common/styled-button.tsx
@@ -44,7 +44,12 @@ const StyledButton = forwardRef(
{...props}
>
{leftIcon && (
-
+
)}
{children && (
@@ -52,7 +57,12 @@ const StyledButton = forwardRef(
)}
{rightIcon && (
-
+
)}
);
From 47bff5e7d2b0526ce27083785eefcf3b7c36e412 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Fri, 15 Mar 2024 18:15:03 +0100
Subject: [PATCH 04/21] chore: header tests
---
__tests__/components/common/header.test.tsx | 41 +++++++++++++++++++++
components/common/header.tsx | 4 +-
2 files changed, 43 insertions(+), 2 deletions(-)
create mode 100644 __tests__/components/common/header.test.tsx
diff --git a/__tests__/components/common/header.test.tsx b/__tests__/components/common/header.test.tsx
new file mode 100644
index 0000000..19d56f1
--- /dev/null
+++ b/__tests__/components/common/header.test.tsx
@@ -0,0 +1,41 @@
+import { render } from '@testing-library/react-native';
+import { View } from 'react-native';
+
+import { Header } from '../../../components/common/header';
+import { Title } from '../../../components/common/title';
+
+jest.mock('expo-router', () => ({
+ useNavigation: jest.fn().mockReturnValue({
+ canGoBack: jest.fn().mockReturnValue(true),
+ goBack: jest.fn(),
+ }),
+}));
+
+beforeEach(() => {
+ jest.clearAllMocks();
+});
+
+it('should render the header with a back button', () => {
+ const { queryByTestId } = render(
+
+ );
+ expect(queryByTestId('header-container')).toBeTruthy();
+ expect(queryByTestId('title')).toBeTruthy();
+ expect(queryByTestId('back-button')).toBeTruthy();
+});
+
+it("should not render the back button if it can't go back", () => {
+ jest.spyOn(require('expo-router'), 'useNavigation').mockReturnValue({
+ canGoBack: jest.fn().mockReturnValue(false),
+ });
+ const { queryByTestId } = render();
+ expect(queryByTestId('header-container')).toBeTruthy();
+ expect(queryByTestId('back-button')).toBeFalsy();
+});
+
+it('should render the header with a corner', () => {
+ const { queryByTestId } = render(} />);
+ expect(queryByTestId('corner')).toBeTruthy();
+});
diff --git a/components/common/header.tsx b/components/common/header.tsx
index c7dc1c3..824fc50 100644
--- a/components/common/header.tsx
+++ b/components/common/header.tsx
@@ -14,11 +14,11 @@ export function Header({ children, className, corner, ...props }: HeaderProps) {
const navigation = useNavigation();
const showBackButton = navigation.canGoBack();
return (
-
+
{(showBackButton || corner) && (
{showBackButton && (
-
+
)}
From 3e381df20d4468aa4b2c3927a50bf5e9484a3496 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Fri, 15 Mar 2024 18:24:15 +0100
Subject: [PATCH 05/21] chore: error boundary tests
---
.../components/common/error-boundary.test.tsx | 28 +++++++++++++++++++
components/common/error-boundary.tsx | 6 ++--
2 files changed, 32 insertions(+), 2 deletions(-)
create mode 100644 __tests__/components/common/error-boundary.test.tsx
diff --git a/__tests__/components/common/error-boundary.test.tsx b/__tests__/components/common/error-boundary.test.tsx
new file mode 100644
index 0000000..fd03168
--- /dev/null
+++ b/__tests__/components/common/error-boundary.test.tsx
@@ -0,0 +1,28 @@
+import { render, userEvent } from '@testing-library/react-native';
+
+import { ErrorBoundary } from '../../../components/common/error-boundary';
+
+jest.mock('react-i18next', () => ({
+ useTranslation: () => ({ t: (key: string) => key }),
+}));
+
+jest.mock('react-native-safe-area-context', () => ({
+ useSafeAreaInsets: () => ({ top: 0, bottom: 0, left: 0, right: 0 }),
+}));
+
+it('should render error message', () => {
+ const { queryByTestId, getByText } = render(
+
+ );
+ expect(queryByTestId('error-message')).toBeTruthy();
+ expect(getByText('Error message')).toBeTruthy();
+});
+
+it('should call retry function', async () => {
+ const retry = jest.fn();
+ const { getByTestId } = render(
+
+ );
+ await userEvent.press(getByTestId('error-retry'));
+ expect(retry).toHaveBeenCalled();
+});
diff --git a/components/common/error-boundary.tsx b/components/common/error-boundary.tsx
index 3a7162a..b2f47d3 100644
--- a/components/common/error-boundary.tsx
+++ b/components/common/error-boundary.tsx
@@ -24,10 +24,12 @@ export function ErrorBoundary(props: ErrorBoundaryProps) {
>
{t('errBoundary.main')}
- {props.error.message}
+
+ {props.error.message}
+
{t('errBoundary.sub')}
-
+
{t('errBoundary.retry')}
From ca3a8eac9b61ded533e9659ab3d8aaefad95e5d7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Fri, 15 Mar 2024 18:37:18 +0100
Subject: [PATCH 06/21] chore: setting tests
---
.../components/settings/setting.test.tsx | 144 ++++++++++++++++++
components/common/settings/setting.tsx | 36 ++++-
2 files changed, 172 insertions(+), 8 deletions(-)
create mode 100644 __tests__/components/settings/setting.test.tsx
diff --git a/__tests__/components/settings/setting.test.tsx b/__tests__/components/settings/setting.test.tsx
new file mode 100644
index 0000000..f98a7cd
--- /dev/null
+++ b/__tests__/components/settings/setting.test.tsx
@@ -0,0 +1,144 @@
+import { render, userEvent, waitFor } from '@testing-library/react-native';
+
+import { Setting } from '../../../components/common/settings/setting';
+
+it('should be closed by default', async () => {
+ const { queryByTestId } = render(
+ {}}
+ />
+ );
+ expect(queryByTestId('setting')).toBeTruthy();
+ expect(queryByTestId('setting-option-test')).toBeFalsy();
+ expect(queryByTestId('setting-current-label')).toBeTruthy();
+ await waitFor(() => expect(queryByTestId('setting-open-icon')).toBeTruthy());
+});
+
+it('should have current label displayed', () => {
+ const { getByText } = render(
+ {}}
+ />
+ );
+ expect(getByText('Test label')).toBeTruthy();
+});
+
+it('should open and close', async () => {
+ const { getByTestId, queryByTestId } = render(
+ {}}
+ />
+ );
+ await userEvent.press(getByTestId('setting-header'));
+ expect(queryByTestId('setting-option-test')).toBeTruthy();
+ await userEvent.press(getByTestId('setting-header'));
+ await waitFor(() => expect(queryByTestId('setting-option-test')).toBeFalsy());
+});
+
+it('should call onChange when selecting a value', async () => {
+ const onChange = jest.fn();
+ const { getByTestId } = render(
+
+ );
+ await userEvent.press(getByTestId('setting-header'));
+ await userEvent.press(getByTestId('setting-option-test'));
+ expect(onChange).toHaveBeenCalledWith('test');
+});
+
+it('should display the icon', () => {
+ const { getByTestId } = render(
+ {}}
+ icon='arrow-right'
+ />
+ );
+ expect(getByTestId('setting-icon')).toBeTruthy();
+});
+
+it('should display icon next to selected value', async () => {
+ const { queryByTestId } = render(
+ {}}
+ icon='arrow-right'
+ />
+ );
+ await userEvent.press(queryByTestId('setting-header'));
+ expect(queryByTestId('setting-option-test-selected')).toBeTruthy();
+ expect(queryByTestId('setting-option-test2-selected')).toBeFalsy();
+});
+
+it('should display every option', async () => {
+ const options = [
+ {
+ label: 'Test label',
+ value: 'test',
+ },
+ {
+ label: 'Test label 2',
+ value: 'test2',
+ },
+ ];
+
+ const { queryByTestId } = render(
+ {}} />
+ );
+
+ await userEvent.press(queryByTestId('setting-header'));
+ options.forEach((option) => {
+ expect(queryByTestId(`setting-option-${option.value}`)).toBeTruthy();
+ });
+});
diff --git a/components/common/settings/setting.tsx b/components/common/settings/setting.tsx
index b7d84c6..bc4d906 100644
--- a/components/common/settings/setting.tsx
+++ b/components/common/settings/setting.tsx
@@ -22,27 +22,47 @@ export function Setting({ label, availableValues, currentValue, onChange, icon }
};
return (
-
-
+
+
- {icon && }
- {label}
+ {icon && }
+
+ {label}
+
- {currentOption?.label}
-
+
+ {currentOption?.label}
+
+
{open &&
availableValues.map((option) => (
onSelect(option.value)}
>
- {option.label}
+
+ {option.label}
+
{option.value === currentValue && (
-
+
)}
))}
From ab889757ead92a8c964c83cea03449ff32e3ea6b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Fri, 15 Mar 2024 18:38:34 +0100
Subject: [PATCH 07/21] feat: test pipeline
---
.github/workflows/dynamic-analysis.yml | 31 ++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
create mode 100644 .github/workflows/dynamic-analysis.yml
diff --git a/.github/workflows/dynamic-analysis.yml b/.github/workflows/dynamic-analysis.yml
new file mode 100644
index 0000000..fb4068d
--- /dev/null
+++ b/.github/workflows/dynamic-analysis.yml
@@ -0,0 +1,31 @@
+name: Dynamic Analysis
+
+on:
+ push:
+ branches:
+ - main
+ - dev
+ pull_request:
+ branches:
+ - main
+ - dev
+
+jobs:
+ tests:
+ name: Tests
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v3
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: '20'
+
+ - name: Install dependencies
+ run: yarn install --frozen-lockfile --non-interactive --production=false
+
+ - name: Run Jest tests
+ run: yarn test
From 585e03a165b6b3600f98de1d9e139695cca58633 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Fri, 15 Mar 2024 18:40:14 +0100
Subject: [PATCH 08/21] chore: test improvements
---
__tests__/components/common/header.test.tsx | 4 +++-
__tests__/components/common/styled-button.test.tsx | 2 +-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/__tests__/components/common/header.test.tsx b/__tests__/components/common/header.test.tsx
index 19d56f1..0806de9 100644
--- a/__tests__/components/common/header.test.tsx
+++ b/__tests__/components/common/header.test.tsx
@@ -1,4 +1,5 @@
import { render } from '@testing-library/react-native';
+import * as router from 'expo-router';
import { View } from 'react-native';
import { Header } from '../../../components/common/header';
@@ -27,9 +28,10 @@ it('should render the header with a back button', () => {
});
it("should not render the back button if it can't go back", () => {
- jest.spyOn(require('expo-router'), 'useNavigation').mockReturnValue({
+ jest.spyOn(router, 'useNavigation').mockReturnValue({
canGoBack: jest.fn().mockReturnValue(false),
});
+
const { queryByTestId } = render();
expect(queryByTestId('header-container')).toBeTruthy();
expect(queryByTestId('back-button')).toBeFalsy();
diff --git a/__tests__/components/common/styled-button.test.tsx b/__tests__/components/common/styled-button.test.tsx
index 5fcf7b8..949a975 100644
--- a/__tests__/components/common/styled-button.test.tsx
+++ b/__tests__/components/common/styled-button.test.tsx
@@ -1,4 +1,4 @@
-import { render, screen, waitFor } from '@testing-library/react-native';
+import { render, waitFor } from '@testing-library/react-native';
import { StyledButton } from '../../../components/common/styled-button';
From f2d9ccf9f29ec4e0ad4da29d97180f87c1cce129 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Fri, 15 Mar 2024 23:52:18 +0100
Subject: [PATCH 09/21] chore: analytics test
---
__tests__/services/analytics.service.test.ts | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
create mode 100644 __tests__/services/analytics.service.test.ts
diff --git a/__tests__/services/analytics.service.test.ts b/__tests__/services/analytics.service.test.ts
new file mode 100644
index 0000000..25e43c3
--- /dev/null
+++ b/__tests__/services/analytics.service.test.ts
@@ -0,0 +1,20 @@
+import axios from 'axios';
+
+import { AnalyticsService } from '../../services/analytics.service';
+
+console.debug = jest.fn();
+const postSpy = jest.spyOn(axios, 'post');
+
+beforeEach(() => {
+ jest.clearAllMocks();
+ postSpy.mockImplementation(() => Promise.resolve());
+});
+
+it('should post object of an event', () => {
+ AnalyticsService.sendPageView('test');
+ expect(postSpy).toHaveBeenCalledWith('https://visit.kir-dev.hu/api/event', {
+ name: 'pageview',
+ domain: 'konferenciapp.kir-dev.hu',
+ url: 'com.kir-dev.konferenciapp://localhost/test',
+ });
+});
From 3d0ae7f0ad13dd0f95b874d235cc3d150c54a392 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Sat, 16 Mar 2024 00:00:08 +0100
Subject: [PATCH 10/21] chore: conference service test
---
__tests__/services/conference.service.test.ts | 41 +++++++++++++++++++
1 file changed, 41 insertions(+)
create mode 100644 __tests__/services/conference.service.test.ts
diff --git a/__tests__/services/conference.service.test.ts b/__tests__/services/conference.service.test.ts
new file mode 100644
index 0000000..316a134
--- /dev/null
+++ b/__tests__/services/conference.service.test.ts
@@ -0,0 +1,41 @@
+import { axiosInstance } from '../../config/axios.config';
+import { ConferenceService } from '../../services/conference.service';
+
+jest.mock('../../config/axios.config', () => ({
+ axiosInstance: {
+ get: jest.fn(),
+ },
+}));
+
+beforeEach(() => {
+ jest.clearAllMocks();
+ (axiosInstance.get as jest.Mock).mockResolvedValue({ data: { presentations: [] } });
+});
+
+it('should return empty presentations array', async () => {
+ const conferenceData = await ConferenceService.getConferenceData();
+ expect(conferenceData.presentations).toEqual([]);
+});
+
+it("should return 'n/a' for invalid timestamp", () => {
+ const formattedTimestamp = ConferenceService.getFormattedTimestamp('invalid');
+ expect(formattedTimestamp).toEqual('n/a');
+});
+
+it('should return formatted timestamp', () => {
+ const formattedTimestamp = ConferenceService.getFormattedTimestamp('2022-01-01T12:00:00');
+ expect(formattedTimestamp).toEqual('12:00');
+});
+
+it('should return conference data with sorted presentations', async () => {
+ const conferenceData = {
+ presentations: [{ startTime: '2022-01-01T12:00:00' }, { startTime: '2022-01-01T11:00:00' }],
+ };
+ axiosInstance.get = jest.fn().mockResolvedValue({ data: conferenceData });
+
+ const sortedConferenceData = await ConferenceService.getConferenceData();
+ expect(sortedConferenceData.presentations).toEqual([
+ { startTime: '2022-01-01T11:00:00' },
+ { startTime: '2022-01-01T12:00:00' },
+ ]);
+});
From e00e98e3677d24cf893ac48a509f9fc0cb2cd58f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Sat, 16 Mar 2024 11:02:52 +0100
Subject: [PATCH 11/21] chore: test coverage gitignore
---
.gitignore | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.gitignore b/.gitignore
index 8dffef3..0ec5f85 100644
--- a/.gitignore
+++ b/.gitignore
@@ -43,3 +43,5 @@ ios
.env
google-service-account-key.json
+coverage
+
From d4695c49ee61879953c86f829a3af1041678eb80 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Sat, 16 Mar 2024 11:02:58 +0100
Subject: [PATCH 12/21] chore: common utils test
---
__tests__/utils/common.utils.test.ts | 37 ++++++++++++++++++++++++++++
utils/common.utils.ts | 5 ----
2 files changed, 37 insertions(+), 5 deletions(-)
create mode 100644 __tests__/utils/common.utils.test.ts
diff --git a/__tests__/utils/common.utils.test.ts b/__tests__/utils/common.utils.test.ts
new file mode 100644
index 0000000..2ef8d38
--- /dev/null
+++ b/__tests__/utils/common.utils.test.ts
@@ -0,0 +1,37 @@
+import { useLocalSearchParams } from 'expo-router';
+
+import { generateId, useSafeId } from '../../utils/common.utils';
+
+jest.mock('expo-router', () => ({
+ useLocalSearchParams: jest.fn(),
+}));
+
+describe('useSafeId', () => {
+ it('should return the first item of string array', () => {
+ (useLocalSearchParams as jest.Mock).mockReturnValue({ id: ['123'] });
+ expect(useSafeId()).toBe('123');
+ });
+
+ it('should return the string', () => {
+ (useLocalSearchParams as jest.Mock).mockReturnValue({ id: '123' });
+ expect(useSafeId()).toBe('123');
+ });
+});
+
+describe('generateId', () => {
+ it('should generate a random string with length 16 by default', () => {
+ const result = generateId(16);
+ expect(result).toHaveLength(16);
+ });
+
+ it('should generate a random string with given length', () => {
+ const result = generateId(8);
+ expect(result).toHaveLength(8);
+ });
+
+ it('should not generate the same string twice', () => {
+ const ids = Array.from({ length: 10 }).map(() => generateId());
+ const uniqueIds = new Set(ids);
+ expect(uniqueIds.size).toBe(10);
+ });
+});
diff --git a/utils/common.utils.ts b/utils/common.utils.ts
index e38dbf5..61c892c 100644
--- a/utils/common.utils.ts
+++ b/utils/common.utils.ts
@@ -11,11 +11,6 @@ export function useSafeId() {
return Array.isArray(id) ? id[0] : id ?? '';
}
-export function useSafeSlug() {
- const { slug } = useLocalSearchParams();
- return Array.isArray(slug) ? slug[0] : slug ?? '';
-}
-
export function generateId(length = 16) {
const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
let result = '';
From b8286f23b0d143a5f3bece7b01980d68b8260b55 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Sat, 16 Mar 2024 11:15:53 +0100
Subject: [PATCH 13/21] chore: presentation utils test
---
__tests__/utils/presentation.utils.test.ts | 120 +++++++++++++++++++++
1 file changed, 120 insertions(+)
create mode 100644 __tests__/utils/presentation.utils.test.ts
diff --git a/__tests__/utils/presentation.utils.test.ts b/__tests__/utils/presentation.utils.test.ts
new file mode 100644
index 0000000..ad4ff70
--- /dev/null
+++ b/__tests__/utils/presentation.utils.test.ts
@@ -0,0 +1,120 @@
+import { PresentationDto } from '../../types/conference-api.type';
+import { isPresentationCurrent, isPresentationPast, isPresentationUpcoming } from '../../utils/presentation.utils';
+
+const MockPresentation: PresentationDto = {
+ description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vel odio nec urna posuere lacinia',
+ language: 'en',
+ presenter: {
+ name: 'John Doe',
+ rank: 'Senior Developer',
+ pictureUrl: 'https://example.com/picture.jpg',
+ },
+ questionsUrl: 'https://example.com/questions',
+ room: 'Main Room',
+ slug: 'lorem-ipsum',
+ title: 'Lorem Ipsum',
+ startTime: '2024-03-19T12:00:00Z',
+ endTime: '2024-03-19T13:00:00Z',
+};
+
+describe('isPresentationPast', () => {
+ it('should return true if presentation is past', () => {
+ jest.useFakeTimers().setSystemTime(new Date('2024-03-19T13:01:00Z'));
+
+ const result = isPresentationPast(MockPresentation);
+
+ expect(result).toBe(true);
+ });
+
+ it('should return false if presentation is not past', () => {
+ jest.useFakeTimers().setSystemTime(new Date('2024-03-19T12:59:00Z'));
+
+ const result = isPresentationPast(MockPresentation);
+
+ expect(result).toBe(false);
+ });
+
+ it('should return false if current date equals end date', () => {
+ jest.useFakeTimers().setSystemTime(new Date('2024-03-19T13:00:00Z'));
+
+ const result = isPresentationPast(MockPresentation);
+
+ expect(result).toBe(false);
+ });
+
+ it('should return false if presentation is upcoming', () => {
+ jest.useFakeTimers().setSystemTime(new Date('2024-03-19T11:59:00Z'));
+
+ const result = isPresentationPast(MockPresentation);
+
+ expect(result).toBe(false);
+ });
+});
+
+describe('isPresentationCurrent', () => {
+ it('should return true if presentation is current', () => {
+ jest.useFakeTimers().setSystemTime(new Date('2024-03-19T12:30:00Z'));
+
+ const result = isPresentationCurrent(MockPresentation);
+
+ expect(result).toBe(true);
+ });
+
+ it('should return false if presentation is past', () => {
+ jest.useFakeTimers().setSystemTime(new Date('2024-03-19T13:00:00Z'));
+
+ const result = isPresentationCurrent(MockPresentation);
+
+ expect(result).toBe(false);
+ });
+
+ it('should return false if current date equals start date', () => {
+ jest.useFakeTimers().setSystemTime(new Date('2024-03-19T12:00:00Z'));
+
+ const result = isPresentationCurrent(MockPresentation);
+
+ expect(result).toBe(false);
+ });
+
+ it('should return false if presentation is upcoming', () => {
+ jest.useFakeTimers().setSystemTime(new Date('2024-03-19T11:59:00Z'));
+
+ const result = isPresentationCurrent(MockPresentation);
+
+ expect(result).toBe(false);
+ });
+});
+
+describe('isPresentationUpcoming', () => {
+ it('should return true if presentation is upcoming', () => {
+ jest.useFakeTimers().setSystemTime(new Date('2024-03-19T11:59:00Z'));
+
+ const result = isPresentationUpcoming(MockPresentation);
+
+ expect(result).toBe(true);
+ });
+
+ it('should return false if presentation is past', () => {
+ jest.useFakeTimers().setSystemTime(new Date('2024-03-19T13:00:00Z'));
+
+ const result = isPresentationUpcoming(MockPresentation);
+
+ expect(result).toBe(false);
+ });
+
+ it('should return false if presentation is current', () => {
+ jest.useFakeTimers().setSystemTime(new Date('2024-03-19T12:01:00Z'));
+
+ const result = isPresentationUpcoming(MockPresentation);
+
+ expect(result).toBe(false);
+ });
+
+ it('should return false if current date equals start date', () => {
+ jest.useFakeTimers().setSystemTime(new Date('2024-03-19T12:00:00Z'));
+
+ const result = isPresentationUpcoming(MockPresentation);
+
+ expect(result).toBe(false);
+ });
+});
From b9fe837423f7d1389f3be0fd535d1bf8f8a3d2f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Sat, 16 Mar 2024 11:16:02 +0100
Subject: [PATCH 14/21] chore: keyboard utils removed (unused)
---
utils/keyboard.utils.ts | 23 -----------------------
1 file changed, 23 deletions(-)
delete mode 100644 utils/keyboard.utils.ts
diff --git a/utils/keyboard.utils.ts b/utils/keyboard.utils.ts
deleted file mode 100644
index e64e05b..0000000
--- a/utils/keyboard.utils.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { useEffect, useRef, useState } from 'react';
-import { EmitterSubscription, Keyboard } from 'react-native';
-
-export function useKeyboardOffset() {
- const [keyboardOffset, setKeyboardOffset] = useState(0);
- const onKeyboardShow = (event: { endCoordinates: { height: React.SetStateAction } }) =>
- setKeyboardOffset(event.endCoordinates.height);
- const onKeyboardHide = () => setKeyboardOffset(0);
- const keyboardDidShowListener = useRef();
- const keyboardDidHideListener = useRef();
-
- useEffect(() => {
- keyboardDidShowListener.current = Keyboard.addListener('keyboardWillShow', onKeyboardShow);
- keyboardDidHideListener.current = Keyboard.addListener('keyboardWillHide', onKeyboardHide);
-
- return () => {
- keyboardDidShowListener.current?.remove();
- keyboardDidHideListener.current?.remove();
- };
- }, []);
-
- return keyboardOffset;
-}
From 91fa124e1fed3623ba881d17edaa03052bb4c000 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Sat, 16 Mar 2024 11:20:33 +0100
Subject: [PATCH 15/21] chore: test fixes and coverage report
---
.github/workflows/dynamic-analysis.yml | 2 +-
.../components/common/error-boundary.test.tsx | 5 ++++-
__tests__/components/settings/setting.test.tsx | 15 +++++++++------
package.json | 1 +
4 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/.github/workflows/dynamic-analysis.yml b/.github/workflows/dynamic-analysis.yml
index fb4068d..c2ed3a8 100644
--- a/.github/workflows/dynamic-analysis.yml
+++ b/.github/workflows/dynamic-analysis.yml
@@ -28,4 +28,4 @@ jobs:
run: yarn install --frozen-lockfile --non-interactive --production=false
- name: Run Jest tests
- run: yarn test
+ run: yarn test:coverage
diff --git a/__tests__/components/common/error-boundary.test.tsx b/__tests__/components/common/error-boundary.test.tsx
index fd03168..ce83146 100644
--- a/__tests__/components/common/error-boundary.test.tsx
+++ b/__tests__/components/common/error-boundary.test.tsx
@@ -2,6 +2,9 @@ import { render, userEvent } from '@testing-library/react-native';
import { ErrorBoundary } from '../../../components/common/error-boundary';
+const user = userEvent.setup();
+jest.useFakeTimers();
+
jest.mock('react-i18next', () => ({
useTranslation: () => ({ t: (key: string) => key }),
}));
@@ -23,6 +26,6 @@ it('should call retry function', async () => {
const { getByTestId } = render(
);
- await userEvent.press(getByTestId('error-retry'));
+ await user.press(getByTestId('error-retry'));
expect(retry).toHaveBeenCalled();
});
diff --git a/__tests__/components/settings/setting.test.tsx b/__tests__/components/settings/setting.test.tsx
index f98a7cd..e9dda1d 100644
--- a/__tests__/components/settings/setting.test.tsx
+++ b/__tests__/components/settings/setting.test.tsx
@@ -2,6 +2,9 @@ import { render, userEvent, waitFor } from '@testing-library/react-native';
import { Setting } from '../../../components/common/settings/setting';
+const user = userEvent.setup();
+jest.useFakeTimers();
+
it('should be closed by default', async () => {
const { queryByTestId } = render(
{
onChange={() => {}}
/>
);
- await userEvent.press(getByTestId('setting-header'));
+ await user.press(getByTestId('setting-header'));
expect(queryByTestId('setting-option-test')).toBeTruthy();
- await userEvent.press(getByTestId('setting-header'));
+ await user.press(getByTestId('setting-header'));
await waitFor(() => expect(queryByTestId('setting-option-test')).toBeFalsy());
});
@@ -74,8 +77,8 @@ it('should call onChange when selecting a value', async () => {
onChange={onChange}
/>
);
- await userEvent.press(getByTestId('setting-header'));
- await userEvent.press(getByTestId('setting-option-test'));
+ await user.press(getByTestId('setting-header'));
+ await user.press(getByTestId('setting-option-test'));
expect(onChange).toHaveBeenCalledWith('test');
});
@@ -116,7 +119,7 @@ it('should display icon next to selected value', async () => {
icon='arrow-right'
/>
);
- await userEvent.press(queryByTestId('setting-header'));
+ await user.press(queryByTestId('setting-header'));
expect(queryByTestId('setting-option-test-selected')).toBeTruthy();
expect(queryByTestId('setting-option-test2-selected')).toBeFalsy();
});
@@ -137,7 +140,7 @@ it('should display every option', async () => {
{}} />
);
- await userEvent.press(queryByTestId('setting-header'));
+ await user.press(queryByTestId('setting-header'));
options.forEach((option) => {
expect(queryByTestId(`setting-option-${option.value}`)).toBeTruthy();
});
diff --git a/package.json b/package.json
index c4d0f77..d36b860 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,7 @@
"prettier": "prettier --write \"**/*.(ts|tsx)\"",
"prettier:check": "prettier --check \"**/*.(ts|tsx)\"",
"test": "jest",
+ "test:coverage": "jest --coverage",
"test:watch": "jest --watch",
"build:android": "eas build --platform android",
"build:ios": "eas build --platform ios",
From 847d75843a6d4447353a464b24ee38f81c749fbb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Sat, 16 Mar 2024 11:26:57 +0100
Subject: [PATCH 16/21] chore: coverage report for ci
---
.github/workflows/dynamic-analysis.yml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/.github/workflows/dynamic-analysis.yml b/.github/workflows/dynamic-analysis.yml
index c2ed3a8..dca5de2 100644
--- a/.github/workflows/dynamic-analysis.yml
+++ b/.github/workflows/dynamic-analysis.yml
@@ -29,3 +29,6 @@ jobs:
- name: Run Jest tests
run: yarn test:coverage
+
+ - name: Coverage Report
+ uses: codecov/codecov-action@v4
From c45d99a137fe5ad0a9e0c309242d7d7a1a5d271e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Sat, 16 Mar 2024 11:30:12 +0100
Subject: [PATCH 17/21] chore: coverage report for ci #2
---
.github/workflows/dynamic-analysis.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/dynamic-analysis.yml b/.github/workflows/dynamic-analysis.yml
index dca5de2..fda4b90 100644
--- a/.github/workflows/dynamic-analysis.yml
+++ b/.github/workflows/dynamic-analysis.yml
@@ -31,4 +31,4 @@ jobs:
run: yarn test:coverage
- name: Coverage Report
- uses: codecov/codecov-action@v4
+ uses: ArtiomTr/jest-coverage-report-action@v2
From 5a3b79f371d38e07470edaa828f04920fc23bde6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Sat, 16 Mar 2024 11:33:41 +0100
Subject: [PATCH 18/21] chore: remove duplicate steps
---
.github/workflows/dynamic-analysis.yml | 11 -----------
1 file changed, 11 deletions(-)
diff --git a/.github/workflows/dynamic-analysis.yml b/.github/workflows/dynamic-analysis.yml
index fda4b90..8f187d2 100644
--- a/.github/workflows/dynamic-analysis.yml
+++ b/.github/workflows/dynamic-analysis.yml
@@ -19,16 +19,5 @@ jobs:
- name: Checkout code
uses: actions/checkout@v3
- - name: Setup Node.js
- uses: actions/setup-node@v3
- with:
- node-version: '20'
-
- - name: Install dependencies
- run: yarn install --frozen-lockfile --non-interactive --production=false
-
- - name: Run Jest tests
- run: yarn test:coverage
-
- name: Coverage Report
uses: ArtiomTr/jest-coverage-report-action@v2
From b8f86994d1db8119017eb2121bf9365b1a2547c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Mon, 25 Mar 2024 22:06:15 +0100
Subject: [PATCH 19/21] chore: settings moved
---
app/(tabs)/settings.tsx | 2 +-
components/{common => }/settings/setting-toggle.tsx | 4 ++--
components/{common => }/settings/setting.tsx | 4 ++--
3 files changed, 5 insertions(+), 5 deletions(-)
rename components/{common => }/settings/setting-toggle.tsx (91%)
rename components/{common => }/settings/setting.tsx (96%)
diff --git a/app/(tabs)/settings.tsx b/app/(tabs)/settings.tsx
index 8859a40..ace0393 100644
--- a/app/(tabs)/settings.tsx
+++ b/app/(tabs)/settings.tsx
@@ -5,9 +5,9 @@ import { Appearance } from 'react-native';
import { Screen } from '../../components/base/screen';
import { ScrollContent } from '../../components/base/scroll-content';
import { Header } from '../../components/common/header';
-import { Setting } from '../../components/common/settings/setting';
import { Title } from '../../components/common/title';
import { AppDetails } from '../../components/settings/app-details';
+import { Setting } from '../../components/settings/setting';
import i18n from '../../services/i18-next';
import { SettingsStorageService } from '../../services/settings-storage.service';
import { SettingsType } from '../../types/settings.type';
diff --git a/components/common/settings/setting-toggle.tsx b/components/settings/setting-toggle.tsx
similarity index 91%
rename from components/common/settings/setting-toggle.tsx
rename to components/settings/setting-toggle.tsx
index 188b096..f49e886 100644
--- a/components/common/settings/setting-toggle.tsx
+++ b/components/settings/setting-toggle.tsx
@@ -2,8 +2,8 @@ import { Feather } from '@expo/vector-icons';
import React, { ComponentProps } from 'react';
import { Switch, View, ViewProps } from 'react-native';
-import { extendedColors } from '../../../theme/extendedColors';
-import { StyledText } from '../../base/text';
+import { extendedColors } from '../../theme/extendedColors';
+import { StyledText } from '../base/text';
interface SettingsToggleProps extends ViewProps {
label: string;
diff --git a/components/common/settings/setting.tsx b/components/settings/setting.tsx
similarity index 96%
rename from components/common/settings/setting.tsx
rename to components/settings/setting.tsx
index bc4d906..ced4214 100644
--- a/components/common/settings/setting.tsx
+++ b/components/settings/setting.tsx
@@ -2,8 +2,8 @@ import { Feather } from '@expo/vector-icons';
import React, { ComponentProps, useState } from 'react';
import { Pressable, View, ViewProps } from 'react-native';
-import { extendedColors } from '../../../theme/extendedColors';
-import { StyledText } from '../../base/text';
+import { extendedColors } from '../../theme/extendedColors';
+import { StyledText } from '../base/text';
interface SettingsProps extends ViewProps {
label: string;
From d181b166f61081faa27ff8b233fc0aebf45af16c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?B=C3=A1lint=20Berente?=
<30603208+berenteb@users.noreply.github.com>
Date: Mon, 25 Mar 2024 22:18:01 +0100
Subject: [PATCH 20/21] chore: favorite button tests
---
.../schedule/element/favorite-button.test.tsx | 60 +++++++++++++++++++
.../components/settings/setting.test.tsx | 2 +-
.../schedule/elements/favorite-button.tsx | 2 +-
3 files changed, 62 insertions(+), 2 deletions(-)
create mode 100644 __tests__/components/schedule/element/favorite-button.test.tsx
diff --git a/__tests__/components/schedule/element/favorite-button.test.tsx b/__tests__/components/schedule/element/favorite-button.test.tsx
new file mode 100644
index 0000000..e7f6c0a
--- /dev/null
+++ b/__tests__/components/schedule/element/favorite-button.test.tsx
@@ -0,0 +1,60 @@
+import { render, userEvent } from '@testing-library/react-native';
+
+import { FavoriteButton } from '../../../../components/schedule/elements/favorite-button';
+import { useFavoritePresentations } from '../../../../contexts/favorite-presentations.context';
+import { PresentationDto } from '../../../../types/conference-api.type';
+
+jest.mock('../../../../contexts/favorite-presentations.context', () => ({
+ useFavoritePresentations: jest.fn().mockReturnValue({
+ isFavoritePresentation: jest.fn().mockReturnValue(true),
+ addFavoritePresentation: jest.fn().mockImplementation(() => {}),
+ removeFavoritePresentation: jest.fn().mockImplementation(() => {}),
+ }),
+}));
+
+const user = userEvent.setup();
+jest.useFakeTimers();
+
+const PresentationMock: PresentationDto = {
+ description: 'presentation description',
+ endTime: new Date().toISOString(),
+ language: 'en',
+ presenter: {
+ name: 'presenter name',
+ rank: 'presenter rank',
+ pictureUrl: 'example.com/picture.jpg',
+ },
+ questionsUrl: 'example.com/questions',
+ room: 'room',
+ startTime: new Date().toISOString(),
+ title: 'presentation title',
+ slug: 'presentation-slug',
+};
+
+beforeEach(() => {
+ jest.clearAllMocks();
+});
+
+it('should add presentation to favorites if it is not favorite', async () => {
+ const { isFavoritePresentation, addFavoritePresentation, removeFavoritePresentation } = useFavoritePresentations();
+
+ (isFavoritePresentation as jest.Mock).mockReturnValue(false);
+
+ const { getByTestId } = render();
+ await user.press(getByTestId('favorite-button'));
+
+ expect(addFavoritePresentation).toHaveBeenCalledWith(PresentationMock);
+ expect(removeFavoritePresentation).not.toHaveBeenCalled();
+});
+
+it('should remove presentation from favorites if it is favorite', async () => {
+ const { isFavoritePresentation, addFavoritePresentation, removeFavoritePresentation } = useFavoritePresentations();
+
+ (isFavoritePresentation as jest.Mock).mockReturnValue(true);
+
+ const { getByTestId } = render();
+ await user.press(getByTestId('favorite-button'));
+
+ expect(addFavoritePresentation).not.toHaveBeenCalled();
+ expect(removeFavoritePresentation).toHaveBeenCalledWith(PresentationMock.slug);
+});
diff --git a/__tests__/components/settings/setting.test.tsx b/__tests__/components/settings/setting.test.tsx
index e9dda1d..103d4e3 100644
--- a/__tests__/components/settings/setting.test.tsx
+++ b/__tests__/components/settings/setting.test.tsx
@@ -1,6 +1,6 @@
import { render, userEvent, waitFor } from '@testing-library/react-native';
-import { Setting } from '../../../components/common/settings/setting';
+import { Setting } from '../../../components/settings/setting';
const user = userEvent.setup();
jest.useFakeTimers();
diff --git a/components/schedule/elements/favorite-button.tsx b/components/schedule/elements/favorite-button.tsx
index dd37c35..c3ca367 100644
--- a/components/schedule/elements/favorite-button.tsx
+++ b/components/schedule/elements/favorite-button.tsx
@@ -24,7 +24,7 @@ export function FavoriteButton({ presentation }: FavoriteButtonProps) {
};
return (
-
+
Date: Mon, 25 Mar 2024 22:25:09 +0100
Subject: [PATCH 21/21] chore: location filter tests
---
.../favorite-button.test.tsx | 0
.../elements/location-filter.test.tsx | 81 +++++++++++++++++++
.../schedule/elements/location-filter.tsx | 15 +++-
3 files changed, 93 insertions(+), 3 deletions(-)
rename __tests__/components/schedule/{element => elements}/favorite-button.test.tsx (100%)
create mode 100644 __tests__/components/schedule/elements/location-filter.test.tsx
diff --git a/__tests__/components/schedule/element/favorite-button.test.tsx b/__tests__/components/schedule/elements/favorite-button.test.tsx
similarity index 100%
rename from __tests__/components/schedule/element/favorite-button.test.tsx
rename to __tests__/components/schedule/elements/favorite-button.test.tsx
diff --git a/__tests__/components/schedule/elements/location-filter.test.tsx b/__tests__/components/schedule/elements/location-filter.test.tsx
new file mode 100644
index 0000000..928d6da
--- /dev/null
+++ b/__tests__/components/schedule/elements/location-filter.test.tsx
@@ -0,0 +1,81 @@
+import { render, userEvent } from '@testing-library/react-native';
+
+import { LocationFilter } from '../../../../components/schedule/elements/location-filter';
+
+jest.mock('react-i18next', () => ({
+ useTranslation: () => ({ t: (key: string) => key }),
+}));
+
+const user = userEvent.setup();
+jest.useFakeTimers();
+
+beforeEach(() => {
+ jest.clearAllMocks();
+});
+
+function isOptionSelected(element: any) {
+ return element.props.style.some((sp: Record) => sp.backgroundColor === '#fff');
+}
+
+it('should display available options', () => {
+ const { getByText } = render(
+
+ );
+
+ expect(getByText('option1')).toBeDefined();
+ expect(getByText('option2')).toBeDefined();
+});
+
+it("should display 'All' option", () => {
+ const { getByTestId } = render(
+
+ );
+
+ expect(getByTestId('location-filter-option-all')).toBeDefined();
+});
+
+it('should call onChange with selected option', async () => {
+ const onChange = jest.fn();
+ const { getByText } = render(
+
+ );
+
+ await user.press(getByText('option2'));
+
+ expect(onChange).toHaveBeenCalledWith('option2');
+});
+
+it('should call onChange with undefined when selecting All', async () => {
+ const onChange = jest.fn();
+ const { getByTestId } = render(
+
+ );
+
+ await user.press(getByTestId('location-filter-option-all'));
+
+ expect(onChange).toHaveBeenCalledWith(undefined);
+});
+
+it('should have all option selected when current is undefined', () => {
+ const { getByTestId } = render(
+
+ );
+
+ expect(isOptionSelected(getByTestId('location-filter-option-all'))).toBeTruthy();
+
+ expect(isOptionSelected(getByTestId('location-filter-option-option1'))).toBeFalsy();
+
+ expect(isOptionSelected(getByTestId('location-filter-option-option2'))).toBeFalsy();
+});
+
+it("should have selected option's background color white", () => {
+ const { getByTestId } = render(
+
+ );
+
+ expect(isOptionSelected(getByTestId('location-filter-option-all'))).toBeFalsy();
+
+ expect(isOptionSelected(getByTestId('location-filter-option-option1'))).toBeTruthy();
+
+ expect(isOptionSelected(getByTestId('location-filter-option-option2'))).toBeFalsy();
+});
diff --git a/components/schedule/elements/location-filter.tsx b/components/schedule/elements/location-filter.tsx
index 8eebde8..025786d 100644
--- a/components/schedule/elements/location-filter.tsx
+++ b/components/schedule/elements/location-filter.tsx
@@ -21,11 +21,20 @@ export function LocationFilter({ current, options, onChange, className, ...props
)}
{...props}
>
- onChange(undefined)}>
+ onChange(undefined)}
+ >
{t('presentations.allFilter')}
- {options.map((option, index) => (
- onChange(option)}>
+ {options.map((option) => (
+ onChange(option)}
+ >
{option}
))}