{ "name": "inaturalistreactnative", "version": "1.0.13", "private": true, "scripts": { "android": "react-native run-android", "android:release": "react-native run-android --mode=release", "ios": "react-native run-ios", "ios:release": "npx react-native run-ios --device --mode Release", "start": "react-native start", "clean": "./scripts/clean.sh", "clean-start": "npx react-native clean-project && npx pod-install && npm run clean && npm start -- --reset-cache", "test": "jest tests/integration && jest tests/unit tests/helpers", "test:unit": "jest tests/unit tests/helpers", "test:integration": "jest tests/integration", "test:clear": "jest --clearCache", "test:memory": "jest --runInBand --logHeapUsage", "lint": "npm-run-all --parallel lint:eslint lint:flow lint:rubocop", "lint:fix": "npm-run-all lint:eslint:fix lint:flow lint:rubocop:fix", "lint:staged:fix": "npx lint-staged && npm run lint:flow", "lint:eslint": "eslint .", "lint:eslint:fix": "eslint . --fix", "lint:flow": "flow check", "lint:rubocop": "bundle exec rubocop", "lint:rubocop:fix": "bundle exec rubocop -A", "lint:tsc": "tsc --allowJs false --noEmit", "postinstall": "husky && patch-package", "translate": "babel-node src/i18n/i18ncli.js build", "prepare-fastlane-metadata": "babel-node src/i18n/i18ncli.js prepare-fastlane-metadata", "e2e:android": "npm run e2e:build:android && npm run e2e:test:android", "e2e:build:android": "MOCK_MODE=e2e npx detox build --configuration android.release", "e2e:build:ios": "MOCK_MODE=e2e npx detox build --configuration ios.release", "e2e:build": "npm run e2e:build:ios && npm run e2e:build:android", "e2e:ios": "npm run e2e:build:ios && npm run e2e:test:ios", "e2e:test:android": "MOCK_MODE=e2e npx detox test --configuration android.release", "e2e:test:ios": "MOCK_MODE=e2e npx detox test --configuration ios.release", "e2e:ios:test": "npm run e2e:test:ios", "e2e:ios:build": "npm run e2e:build:ios", "e2e:android:test": "npm run e2e:test:android", "e2e:android:build": "npm run e2e:build:android", "e2e:test": "npm run e2e:test:ios && npm run e2e:test:android", "e2e": "npm run e2e:build && npm run e2e:test", "icons": "./scripts/update-icon-font.sh", "add-example-model": "babel-node scripts/add-example-model.js", "reassure": "reassure" }, "dependencies": { "@bam.tech/react-native-image-resizer": "^3.0.11", "@candlefinance/faster-image": "^1.7.2", "@formidable-webview/webshell": "^2.6.0", "@gorhom/bottom-sheet": "^5.2.6", "@invertase/react-native-apple-authentication": "^2.4.0", "@likashefqet/react-native-image-zoom": "^4.2.0", "@react-native-camera-roll/camera-roll": "github:inaturalist/react-native-cameraroll", "@react-native-clipboard/clipboard": "^1.16.3", "@react-native-community/datetimepicker": "^8.4.4", "@react-native-community/geolocation": "^3.4.0", "@react-native-community/hooks": "^3.0.0", "@react-native-community/netinfo": "^11.4.1", "@react-native-community/slider": "^5.1.1", "@react-native-firebase/analytics": "^23.4.0", "@react-native-firebase/app": "^23.3.1", "@react-native-firebase/perf": "^23.4.0", "@react-native-google-signin/google-signin": "^13.1.0", "@react-native-picker/picker": "^2.11.1", "@react-native-vector-icons/common": "^12.3.0", "@react-navigation/bottom-tabs": "^7.4.6", "@react-navigation/elements": "^2.6.3", "@react-navigation/native": "^7.1.17", "@react-navigation/native-stack": "^7.3.25", "@realm/react": "^0.20.0", "@sayem314/react-native-keep-awake": "^1.3.1", "@shopify/flash-list": "^2.2.0", "@tanstack/react-query": "5.55.4", "apisauce": "^3.2.0", "classnames": "^2.5.1", "date-fns": "^3.6.0", "date-fns-tz": "^3.2.0", "i18next": "^23.10.1", "i18next-fluent": "^2.0.0", "i18next-resources-to-backend": "^1.2.0", "inaturalistjs": "github:inaturalist/inaturalistjs", "intl-pluralrules": "^2.0.1", "jsrsasign": "^11.1.0", "linkify-html": "^4.1.3", "linkify-plugin-mention": "^4.1.3", "linkifyjs": "^4.3.2", "lodash": "^4.17.21", "markdown-it": "^14.1.0", "nativewind": "^2.0.11", "react": "19.1.0", "react-dom": "19.1.0", "react-i18next": "^14.1.0", "react-native": "0.80.2", "react-native-animated-dots-carousel": "^2.0.0", "react-native-audio-recorder-player": "^3.6.7", "react-native-bouncy-checkbox": "^3.0.7", "react-native-circular-progress-indicator": "^4.4.2", "react-native-config": "^1.5.3", "react-native-device-info": "^14.0.4", "react-native-draggable-flatlist": "^4.0.1", "react-native-event-listeners": "^1.0.7", "react-native-exception-handler": "^2.10.10", "react-native-exif-reader": "github:inaturalist/react-native-exif-reader#v0.4.3", "react-native-fs": "^2.20.0", "react-native-geocoder-reborn": "^0.9.0", "react-native-gesture-handler": "^2.28.0", "react-native-get-random-values": "^1.11.0", "react-native-image-picker": "github:inaturalist/react-native-image-picker#c980801d738b960f00d901a01d3d23e2a04c203a", "react-native-keyboard-aware-scroll-view": "^0.9.5", "react-native-linear-gradient": "^2.8.3", "react-native-localize": "^3.5.2", "react-native-logs": "^5.3.0", "react-native-mail": "github:chirag04/react-native-mail", "react-native-maps": "1.20.1", "react-native-mmkv": "^3.3.3", "react-native-modal": "^14.0.0-rc.1", "react-native-modal-datetime-picker": "^18.0.0", "react-native-open-maps": "^0.4.3", "react-native-orientation-locker": "github:wonday/react-native-orientation-locker", "react-native-paper": "^5.12.3", "react-native-permissions": "^4.1.5", "react-native-reanimated": "^3.19.1", "react-native-reanimated-carousel": "^3.5.1", "react-native-render-html": "^6.3.4", "react-native-restart": "^0.0.27", "react-native-safe-area-context": "^5.6.2", "react-native-screens": "4.13.1", "react-native-sensitive-info": "^6.0.0-alpha.9", "react-native-share-menu": "github:inaturalist/react-native-share-menu#iNaturalistReactNative", "react-native-store-review": "^0.4.3", "react-native-svg": "^15.15.0", "react-native-svg-transformer": "^1.5.2", "react-native-url-polyfill": "^2.0.0", "react-native-vision-camera": "^4.7.3", "react-native-volume-manager": "^2.0.8", "react-native-webview": "^13.15.0", "react-native-worklets-core": "^1.6.2", "realm": "^20.2.0", "sanitize-html": "^2.13.0", "uuid": "^11.1.0", "vision-camera-plugin-inatvision": "github:inaturalist/vision-camera-plugin-inatvision#5cb51942939f704acbb5d451a444f7aa36268c66", "zustand": "^4.5.7" }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/node": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/preset-react": "^7.24.1", "@babel/runtime": "^7.25.0", "@faker-js/faker": "^8.4.1", "@fluent/syntax": "^0.19.0", "@react-native-community/cli": "19.1.2", "@react-native-community/cli-platform-android": "19.1.2", "@react-native-community/cli-platform-ios": "19.1.2", "@react-native/babel-preset": "0.80.2", "@react-native/eslint-config": "0.80.2", "@react-native/metro-config": "0.80.2", "@react-native/typescript-config": "0.80.2", "@stylistic/eslint-plugin": "^3.1.0", "@tanstack/eslint-plugin-query": "^5.28.11", "@testing-library/jest-native": "^5.4.3", "@testing-library/react-native": "^13.3.3", "@types/jest": "^29.5.13", "@types/jsrsasign": "^10.5.15", "@types/lodash": "^4.17.20", "@types/markdown-it": "^14.1.2", "@types/react": "^19.1.0", "@types/react-dom": "^19.1.0", "@types/react-test-renderer": "^19.1.0", "@types/sanitize-html": "^2.13.0", "@typescript-eslint/eslint-plugin": "^8.32.1", "babel-plugin-module-resolver": "^5.0.0", "babel-plugin-react-compiler": "^19.1.0-rc.3", "babel-plugin-transform-inline-environment-variables": "^0.4.4", "babel-plugin-transform-remove-console": "^6.9.4", "chalk": "^5.4.1", "decompress": "^4.2.1", "detox": "^20.41.1", "dotenv": "^16.4.7", "eslint": "^8.57.1", "eslint-config-airbnb": "^19.0.4", "eslint-import-resolver-babel-module": "^5.3.2", "eslint-plugin-i18next": "^6.1.1", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-module-resolver": "^1.5.0", "eslint-plugin-react-hooks": "^6.0.0-rc.1", "eslint-plugin-react-native": "^5.0.0", "eslint-plugin-react-native-a11y": "^3.5.1", "eslint-plugin-simple-import-sort": "^12.0.0", "eslint-plugin-testing-library": "^7.6.8", "factoria": "^4.0.1", "flow-bin": "^0.182.0", "fluent_conv": "^3.3.0", "glob": "^10.3.12", "husky": "^9.1.7", "jest": "^29.7.0", "jest-fetch-mock": "github:jefflau/jest-fetch-mock", "jest-slow-test-reporter": "^1.0.0", "nock": "^13.5.6", "node-downloader-helper": "^2.1.9", "npm-run-all2": "^8.0.4", "patch-package": "^8.0.1", "react-native-clean-project": "^4.0.3", "react-native-config-node": "^0.0.3", "react-test-renderer": "19.1.0", "reassure": "^1.1.0", "tailwindcss": "^3.3.2", "ts-node": "^10.9.2", "typescript": "5.0.4", "yargs": "^17.7.2" }, "overrides": { "eslint-plugin-react-hooks": "^6.0.0-rc.1" }, "engines": { "node": ">=18" }, "lint-staged": { "*.{js,jsx,ts,tsx}": [ "eslint --cache --fix --max-warnings=0 --cache-location .eslintcache" ], "*.rb": [ "bundle exec rubocop --force-exclusion --parallel" ] } }