{ "name": "lnreader", "version": "2.0.3", "private": true, "scripts": { "dev:android": "pnpm run generate:env:debug && react-native run-android --appIdSuffix \"debug\" --active-arch-only", "dev:ios": "react-native run-ios", "dev:start": "react-native start", "dev:clean-start": "pnpm run dev:start -- --reset-cache", "build:release:android": "pnpm run generate:env:release && cd android && ./gradlew clean && ./gradlew assembleRelease", "build:open-apk": "open ./android/app/build/outputs/apk/release/", "generate:env:debug": "node scripts/generate-env-file.cjs Debug", "generate:env:release": "node scripts/generate-env-file.cjs Release", "generate:string-types": "node scripts/generate-string-types.cjs", "lint": "eslint ./src --ext .js,.jsx,.ts,.tsx", "lint:fix": "pnpm run lint -- --fix", "format": "prettier --write \"./src/**/*.{js,jsx,ts,tsx}\" ./scripts", "format:check": "prettier --check \"./src/**/*.{js,jsx,ts,tsx}\" ./scripts", "type-check": "tsc --noEmit", "clean:full": "rm -rf node_modules/ ./android/build/ ./android/app/build/ ./android/app/.cxx && pnpm i && cd android/ && ./gradlew clean && cd .. && pnpm run dev:start -- --reset-cache", "prepare": "husky install", "nix:shell": "nix develop --extra-experimental-features nix-command --extra-experimental-features flakes", "nix:emulator": "nix develop .#emulator --extra-experimental-features nix-command --extra-experimental-features flakes" }, "codegenConfig": { "name": "LNReaderSpec", "type": "modules", "jsSrcsDir": "specs", "android": { "javaPackageName": "com.lnreader.spec" }, "ios": { "modulesProvider": { "NativeEpubUtil": "RCTNativeEpubUtil", "NativeFile": "RCTNativeFile", "NativeVolumeButtonListener": "RCTNativeVolumeButtonListener", "NativeZipArchive": "RCTNativeZipArchive" } } }, "dependencies": { "@cd-z/react-native-epub-creator": "^3.0.0", "@gorhom/bottom-sheet": "^5.2.6", "@legendapp/list": "^2.0.16", "@noble/ciphers": "^2.1.1", "@react-native-community/slider": "^5.1.1", "@react-native-cookies/cookies": "^6.2.1", "@react-native-documents/picker": "^10.1.7", "@react-native-google-signin/google-signin": "^16.0.0", "@react-native-vector-icons/common": "^12.4.0", "@react-native-vector-icons/material-design-icons": "^12.4.0", "@react-native/codegen": "^0.81.5", "@react-native/gradle-plugin": "^0.81.5", "@react-navigation/bottom-tabs": "^7.8.6", "@react-navigation/native": "^7.1.21", "@react-navigation/native-stack": "^7.8.0", "@react-navigation/stack": "^7.6.7", "@shopify/flash-list": "2.0.2", "cheerio": "1.0.0-rc.12", "color": "^5.0.3", "dayjs": "^1.11.19", "expo": "^54.0.25", "expo-clipboard": "~8.0.7", "expo-document-picker": "~14.0.7", "expo-file-system": "~19.0.19", "expo-haptics": "~15.0.7", "expo-keep-awake": "~15.0.7", "expo-linear-gradient": "~15.0.7", "expo-linking": "~8.0.9", "expo-localization": "~17.0.7", "expo-navigation-bar": "~5.0.9", "expo-notifications": "~0.32.13", "expo-speech": "~14.0.7", "expo-sqlite": "~16.0.9", "expo-web-browser": "~15.0.9", "htmlparser2": "^10.0.0", "i18n-js": "^4.5.1", "lodash-es": "^4.17.21", "lottie-ios": "^3.5.0", "lottie-react-native": "^5.1.3", "protobufjs": "^7.5.4", "react": "19.1.0", "react-native": "^0.81.5", "react-native-background-actions": "^4.0.1", "react-native-device-info": "^14.1.1", "react-native-draggable-flatlist": "^4.0.3", "react-native-drawer-layout": "^4.2.0", "react-native-edge-to-edge": "^1.7.0", "react-native-error-boundary": "^2.0.0", "react-native-file-access": "^3.2.0", "react-native-gesture-handler": "^2.29.1", "react-native-lottie-splash-screen": "^1.1.2", "react-native-mmkv": "^3.3.3", "react-native-pager-view": "^6.9.1", "react-native-paper": "^5.14.5", "react-native-reanimated": "^4.1.5", "react-native-saf-x": "^2.2.3", "react-native-safe-area-context": "^5.6.2", "react-native-screens": "^4.18.0", "react-native-shimmer-placeholder": "^2.0.9", "react-native-tab-view": "^4.2.0", "react-native-url-polyfill": "^2.0.0", "react-native-webview": "13.15.0", "react-native-worklets": "^0.6.1", "react-native-zip-archive": "^7.0.2", "sanitize-html": "^2.17.0", "urlencode": "^2.0.0" }, "devDependencies": { "@babel/core": "^7.28.5", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/preset-env": "^7.28.5", "@babel/runtime": "^7.28.4", "@react-native-community/cli": "^20.0.2", "@react-native-community/cli-platform-android": "^20.0.2", "@react-native-community/cli-platform-ios": "^20.0.2", "@react-native/babel-preset": "^0.81.5", "@react-native/eslint-config": "^0.81.5", "@react-native/metro-config": "^0.81.5", "@react-native/typescript-config": "^0.81.5", "@types/color": "^4.2.0", "@types/lodash-es": "^4.17.12", "@types/react": "~19.1.17", "@types/sanitize-html": "^2.16.0", "babel-plugin-module-resolver": "^5.0.2", "babel-plugin-react-compiler": "19.1.0-rc.3", "eslint": "^8.57.1", "husky": "^7.0.4", "lint-staged": "^12.5.0", "prettier": "2.8.8", "react-native-dotenv": "^3.4.11", "typescript": "~5.9.3" }, "lint-staged": { "*.{js,jsx,ts,tsx}": [ "eslint --fix", "prettier --check" ] }, "engines": { "node": ">=20" }, "packageManager": "pnpm@9.15.0" }