From 349e936453e982c0345ba54d0a89b1f791a91e35 Mon Sep 17 00:00:00 2001 From: David Westgate Date: Mon, 24 Feb 2025 00:03:18 -0800 Subject: [PATCH] update doc+template; fix personal env issue with dep pinning --- .env.example | 7 +- README.md | 9 +- babel.config.js | 6 - package-lock.json | 316 ++++++++++++---------------------------------- package.json | 86 ++++++------- 5 files changed, 131 insertions(+), 293 deletions(-) delete mode 100644 babel.config.js diff --git a/.env.example b/.env.example index 88b4bcd..d881b2b 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,4 @@ -API_KEY=Put Open AI key here -GPT_MODEL=gpt-4o-mini -#GPT_MODEL=gpt-4-turbo # More expensive model, use sparingly \ No newline at end of file +EXPO_PUBLIC_API_URL=https://api.openai.com/v1/chat/completions +EXPO_PUBLIC_API_KEY=put-open-ai-key-here +EXPO_PUBLIC_MODEL_NAME=gpt-4o-mini +#EXPO_PUBLIC_MODEL_NAME=gpt-4-turbo # More expensive model, use sparingly \ No newline at end of file diff --git a/README.md b/README.md index 6042755..eff77e9 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,15 @@ This is an [Expo](https://expo.dev) project created with [`create-expo-app`](htt To set up your environment variables: -1. Copy the example environment variable file to create your own .env file: +1. Copy the example environment variable file to create your own `.env` file: +```bash cp .env.example .env +``` -2. Open the .env file and add your OpenAI API key: +2. Open the `.env` file and add your OpenAI API key: -API_KEY=your_openai_api_key_here -MODEL_NAME=your_model_name +`EXPO_PUBLIC_API_KEY=put-open-ai-key-here` 3. Save the .env file. diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index 73ebf58..0000000 --- a/babel.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = function (api) { - api.cache(true); - return { - presets: ["babel-preset-expo"], - }; -}; diff --git a/package-lock.json b/package-lock.json index ad5249d..4928f40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,56 +8,57 @@ "name": "poker-chips-helper", "version": "1.0.0", "dependencies": { - "@babel/preset-typescript": "^7.26.0", - "@expo/vector-icons": "^14.0.2", - "@react-navigation/bottom-tabs": "^7.2.0", - "@react-navigation/native": "^7.0.14", - "expo": "~52.0.31", - "expo-blur": "~14.0.3", - "expo-constants": "~17.0.5", - "expo-file-system": "~18.0.11", - "expo-font": "~13.0.3", - "expo-haptics": "~14.0.1", - "expo-image-picker": "~16.0.6", - "expo-linking": "~7.0.5", - "expo-router": "~4.0.17", - "expo-splash-screen": "~0.29.21", - "expo-status-bar": "~2.0.1", - "expo-symbols": "~0.2.2", - "expo-system-ui": "~4.0.8", - "expo-web-browser": "~14.0.2", - "metro-react-native-babel-preset": "^0.77.0", + "@expo/vector-icons": "14.0.4", + "@react-navigation/bottom-tabs": "7.2.0", + "@react-navigation/native": "7.0.14", + "expo": "52.0.37", + "expo-blur": "14.0.3", + "expo-constants": "17.0.7", + "expo-file-system": "18.0.11", + "expo-font": "13.0.4", + "expo-haptics": "14.0.1", + "expo-image-picker": "16.0.6", + "expo-linking": "7.0.5", + "expo-router": "4.0.17", + "expo-splash-screen": "0.29.22", + "expo-status-bar": "2.0.1", + "expo-symbols": "0.2.2", + "expo-system-ui": "4.0.8", + "expo-web-browser": "14.0.2", "react": "18.3.1", "react-dom": "18.3.1", - "react-native": "^0.76.7", - "react-native-dotenv": "^3.4.11", - "react-native-gesture-handler": "~2.20.2", - "react-native-reanimated": "~3.16.1", + "react-native": "0.76.7", + "react-native-gesture-handler": "2.20.2", + "react-native-reanimated": "3.16.7", "react-native-safe-area-context": "4.12.0", - "react-native-screens": "~4.4.0", - "react-native-web": "~0.19.13", + "react-native-screens": "4.4.0", + "react-native-web": "0.19.13", "react-native-webview": "13.12.5" }, "devDependencies": { - "@babel/core": "^7.26.9", - "@testing-library/dom": "^10.4.0", - "@testing-library/jest-native": "^5.4.3", - "@testing-library/react": "^16.2.0", - "@testing-library/react-native": "^13.0.1", - "@types/jest": "^29.5.12", - "@types/react": "~18.3.12", - "@types/react-test-renderer": "^18.3.0", - "eslint": "^9.20.0", - "eslint-config-prettier": "^10.0.1", - "eslint-plugin-prettier": "^5.2.3", - "eslint-plugin-react": "^7.37.4", - "eslint-plugin-react-native": "^5.0.0", - "jest": "^29.7.0", - "jest-expo": "~52.0.3", - "jest-fetch-mock": "^3.0.3", - "prettier": "^3.4.2", + "@babel/core": "7.26.9", + "@testing-library/dom": "10.4.0", + "@testing-library/jest-native": "5.4.3", + "@testing-library/react": "16.2.0", + "@testing-library/react-native": "13.0.1", + "@types/jest": "29.5.14", + "@types/react": "18.3.12", + "@types/react-test-renderer": "18.3.0", + "eslint": "9.21.0", + "eslint-config-prettier": "10.0.1", + "eslint-plugin-prettier": "5.2.3", + "eslint-plugin-react": "7.37.4", + "eslint-plugin-react-native": "5.0.0", + "jest": "29.7.0", + "jest-expo": "52.0.5", + "jest-fetch-mock": "3.0.3", + "prettier": "3.5.2", "react-test-renderer": "18.3.1", - "typescript": "^5.7.3" + "typescript": "5.7.3" + }, + "engines": { + "node": ">=22.0.0 <23.0.0", + "npm": ">=8.0.0" } }, "node_modules/@0no-co/graphql.web": { @@ -258,18 +259,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", @@ -620,25 +609,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", @@ -705,60 +675,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", @@ -4350,29 +4266,6 @@ "integrity": "sha512-ST1xxBuYVIXPdD81dR6+tzIgso7m3pa9+6rOBXTh5Xm7KEEFik7tnQX+GydXYMp3wr1gagJjragdXkPnxK6WNg==", "license": "MIT" }, - "node_modules/@react-native/virtualized-lists": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.7.tgz", - "integrity": "sha512-pRUf1jUO8H9Ft04CaWv76t34QI9wY0sydoYlIwEtqXjjMJgmgDoOCAWBjArgn2mk8/rK+u/uicI67ZCYCp1pJw==", - "license": "MIT", - "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/react": "^18.2.6", - "react": "*", - "react-native": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@react-navigation/bottom-tabs": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-7.2.0.tgz", @@ -4990,9 +4883,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.18", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", - "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -5001,13 +4894,13 @@ } }, "node_modules/@types/react-test-renderer": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-18.3.1.tgz", - "integrity": "sha512-vAhnk0tG2eGa37lkU9+s5SoroCsRI08xnsWFiAXOuPH2jqzMbcXvKExXViPi1P5fIklDeCvXqyrdmipFaSkZrA==", + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-18.3.0.tgz", + "integrity": "sha512-HW4MuEYxfDbOHQsVlY/XtOvNHftCVEPhJF2pQXXwcUiUF+Oyb0usgp48HSgpK5rt8m9KZb22yqOeZm+rrVG8gw==", "dev": true, "license": "MIT", "dependencies": { - "@types/react": "^18" + "@types/react": "*" } }, "node_modules/@types/stack-utils": { @@ -10819,14 +10712,14 @@ } }, "node_modules/jest-expo": { - "version": "52.0.4", - "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-52.0.4.tgz", - "integrity": "sha512-6+MDQnpwWi3Cka+GvzncCEw8y8LTLiulf9RMII9MZMmML68dRp+njYvZQQutRkF+WwVZLM2id59puYAsKBL1Qg==", + "version": "52.0.5", + "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-52.0.5.tgz", + "integrity": "sha512-2jjdE81tWxH5PPe5SGR9rxLZbPtuM7ihEL+43xlJIjgxcplsMpFV9Nb8r5h3IpG+aVDjMiQXqF25n9dqqD09OQ==", "dev": true, "license": "MIT", "dependencies": { - "@expo/config": "~10.0.9", - "@expo/json-file": "^9.0.1", + "@expo/config": "~10.0.10", + "@expo/json-file": "^9.0.2", "@jest/create-cache-key-function": "^29.2.1", "@jest/globals": "^29.2.1", "babel-jest": "^29.2.1", @@ -12581,68 +12474,6 @@ "node": ">=18.18" } }, - "node_modules/metro-react-native-babel-preset": { - "version": "0.77.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.77.0.tgz", - "integrity": "sha512-HPPD+bTxADtoE4y/4t1txgTQ1LVR6imOBy7RMHUsqMVTbekoi8Ph5YI9vKX2VMPtVWeFt0w9YnCSLPa76GcXsA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.18.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.20.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.4.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/metro-react-native-babel-preset/node_modules/react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/metro-resolver": { "version": "0.81.1", "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.81.1.tgz", @@ -14479,18 +14310,6 @@ } } }, - "node_modules/react-native-dotenv": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/react-native-dotenv/-/react-native-dotenv-3.4.11.tgz", - "integrity": "sha512-6vnIE+WHABSeHCaYP6l3O1BOEhWxKH6nHAdV7n/wKn/sciZ64zPPp2NUdEUf1m7g4uuzlLbjgr+6uDt89q2DOg==", - "license": "MIT", - "dependencies": { - "dotenv": "^16.4.5" - }, - "peerDependencies": { - "@babel/runtime": "^7.20.6" - } - }, "node_modules/react-native-gesture-handler": { "version": "2.20.2", "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.20.2.tgz", @@ -14625,6 +14444,29 @@ "react-native": "*" } }, + "node_modules/react-native/node_modules/@react-native/virtualized-lists": { + "version": "0.76.7", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.7.tgz", + "integrity": "sha512-pRUf1jUO8H9Ft04CaWv76t34QI9wY0sydoYlIwEtqXjjMJgmgDoOCAWBjArgn2mk8/rK+u/uicI67ZCYCp1pJw==", + "license": "MIT", + "dependencies": { + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^18.2.6", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-native/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", diff --git a/package.json b/package.json index b480359..9724b7e 100644 --- a/package.json +++ b/package.json @@ -14,57 +14,57 @@ "jest": { "preset": "jest-expo" }, + "engines": { + "node": ">=22.0.0 <23.0.0" + }, "dependencies": { - "@babel/preset-typescript": "^7.26.0", - "@expo/vector-icons": "^14.0.2", - "@react-navigation/bottom-tabs": "^7.2.0", - "@react-navigation/native": "^7.0.14", - "expo": "~52.0.31", - "expo-blur": "~14.0.3", - "expo-constants": "~17.0.5", - "expo-file-system": "~18.0.11", - "expo-font": "~13.0.3", - "expo-haptics": "~14.0.1", - "expo-image-picker": "~16.0.6", - "expo-linking": "~7.0.5", - "expo-router": "~4.0.17", - "expo-splash-screen": "~0.29.21", - "expo-status-bar": "~2.0.1", - "expo-symbols": "~0.2.2", - "expo-system-ui": "~4.0.8", - "expo-web-browser": "~14.0.2", - "metro-react-native-babel-preset": "^0.77.0", + "@expo/vector-icons": "14.0.4", + "@react-navigation/bottom-tabs": "7.2.0", + "@react-navigation/native": "7.0.14", + "expo": "52.0.37", + "expo-blur": "14.0.3", + "expo-constants": "17.0.7", + "expo-file-system": "18.0.11", + "expo-font": "13.0.4", + "expo-haptics": "14.0.1", + "expo-image-picker": "16.0.6", + "expo-linking": "7.0.5", + "expo-router": "4.0.17", + "expo-splash-screen": "0.29.22", + "expo-status-bar": "2.0.1", + "expo-symbols": "0.2.2", + "expo-system-ui": "4.0.8", + "expo-web-browser": "14.0.2", "react": "18.3.1", "react-dom": "18.3.1", - "react-native": "^0.76.7", - "react-native-dotenv": "^3.4.11", - "react-native-gesture-handler": "~2.20.2", - "react-native-reanimated": "~3.16.1", + "react-native": "0.76.7", + "react-native-gesture-handler": "2.20.2", + "react-native-reanimated": "3.16.7", "react-native-safe-area-context": "4.12.0", - "react-native-screens": "~4.4.0", - "react-native-web": "~0.19.13", + "react-native-screens": "4.4.0", + "react-native-web": "0.19.13", "react-native-webview": "13.12.5" }, "devDependencies": { - "@babel/core": "^7.26.9", - "@testing-library/dom": "^10.4.0", - "@testing-library/jest-native": "^5.4.3", - "@testing-library/react": "^16.2.0", - "@testing-library/react-native": "^13.0.1", - "@types/jest": "^29.5.12", - "@types/react": "~18.3.12", - "@types/react-test-renderer": "^18.3.0", - "eslint": "^9.20.0", - "eslint-config-prettier": "^10.0.1", - "eslint-plugin-prettier": "^5.2.3", - "eslint-plugin-react": "^7.37.4", - "eslint-plugin-react-native": "^5.0.0", - "jest": "^29.7.0", - "jest-expo": "~52.0.3", - "jest-fetch-mock": "^3.0.3", - "prettier": "^3.4.2", + "@babel/core": "7.26.9", + "@testing-library/dom": "10.4.0", + "@testing-library/jest-native": "5.4.3", + "@testing-library/react": "16.2.0", + "@testing-library/react-native": "13.0.1", + "@types/jest": "29.5.14", + "@types/react": "18.3.12", + "@types/react-test-renderer": "18.3.0", + "eslint": "9.21.0", + "eslint-config-prettier": "10.0.1", + "eslint-plugin-prettier": "5.2.3", + "eslint-plugin-react": "7.37.4", + "eslint-plugin-react-native": "5.0.0", + "jest": "29.7.0", + "jest-expo": "52.0.5", + "jest-fetch-mock": "3.0.3", + "prettier": "3.5.2", "react-test-renderer": "18.3.1", - "typescript": "^5.7.3" + "typescript": "5.7.3" }, "private": true }