chore: upgrade and fix versions

This commit is contained in:
Lei Nelissen
2026-01-20 09:17:20 +01:00
parent 8ba78268d2
commit 9e0f7c4eb8
14 changed files with 1210 additions and 1754 deletions
+92
View File
@@ -0,0 +1,92 @@
{
"metro-runtime": "0.82.2",
"@react-native/js-polyfills": "0.79.2",
"@babel/runtime": "7.28.6",
"react-native-gesture-handler": "2.25.0",
"react": "19.1.0",
"react-native": "0.79.2",
"invariant": "2.2.4",
"nullthrows": "1.1.1",
"promise": "8.3.0",
"stacktrace-parser": "0.1.11",
"regenerator-runtime": "0.13.11",
"base64-js": "1.5.1",
"event-target-shim": "5.0.1",
"whatwg-fetch": "3.6.20",
"abort-controller": "3.0.0",
"scheduler": "0.25.0",
"memoize-one": "5.2.1",
"react-native-reanimated": "3.17.5",
"react-native-is-edge-to-edge": "1.1.7",
"hoist-non-react-statics": "3.3.2",
"react-is": "16.13.1",
"@weights-ai/react-native-track-player": "4.1.4",
"redux-persist": "6.0.0",
"@reduxjs/toolkit": "2.11.2",
"immer": "11.1.3",
"reselect": "5.1.1",
"redux": "5.0.1",
"redux-thunk": "3.1.0",
"mime": "4.1.0",
"react-native-fs": "2.20.0",
"utf8": "3.0.0",
"base-64": "0.1.0",
"@react-native-async-storage/async-storage": "2.2.0",
"react-redux": "9.2.0",
"use-sync-external-store": "1.5.0",
"react-native-accessibility-settings": "0.1.2",
"@react-native-community/blur": "4.4.1",
"styled-components": "6.3.8",
"css-to-react-native": "3.2.0",
"postcss-value-parser": "4.2.0",
"camelize": "1.0.1",
"css-color-keywords": "1.0.0",
"stylis": "4.3.6",
"@emotion/unitless": "0.10.0",
"tslib": "2.8.1",
"postcss": "8.4.49",
"nanoid": "3.3.11",
"picocolors": "1.1.1",
"fuse.js": "7.1.0",
"react-native-svg": "15.15.1",
"warn-once": "0.1.1",
"buffer": "5.7.1",
"ieee754": "1.2.1",
"@d11/react-native-fast-image": "8.13.0",
"@shopify/flash-list": "1.8.0",
"recyclerlistview": "4.2.3",
"prop-types": "15.8.1",
"ts-object-utils": "0.0.5",
"lodash.debounce": "4.0.8",
"@react-navigation/elements": "1.3.31",
"query-string": "7.1.3",
"strict-uri-encode": "2.0.0",
"decode-uri-component": "0.2.2",
"split-on-first": "1.1.0",
"filter-obj": "1.1.0",
"escape-string-regexp": "4.0.0",
"use-latest-callback": "0.2.3",
"react-native-safe-area-context": "5.6.2",
"color": "4.2.3",
"color-convert": "2.0.1",
"color-name": "1.1.4",
"color-string": "1.9.1",
"simple-swizzle": "0.2.2",
"react-native-screens": "4.10.0",
"react-freeze": "1.0.4",
"lodash": "4.17.21",
"i18n-js": "4.5.1",
"make-plural": "7.4.0",
"bignumber.js": "9.3.0",
"react-native-localize": "3.4.1",
"react-reconciler": "0.31.0",
"date-fns": "3.6.0",
"react-native-shadow-2": "7.1.2",
"colord": "2.9.2",
"react-native-collapsible": "1.6.2",
"@sentry/react-native": "6.13.0",
"@sentry-internal/browser-utils": "8.54.0",
"react-native-webview": "13.16.0",
"events": "3.3.0",
"react-native-modal-datetime-picker": "17.1.0"
}
+23 -2
View File
@@ -3,7 +3,12 @@ default_platform(:ios)
package = load_json(json_path: "package.json")
platform :ios do
before_all do
before_all do |lane, options|
# Skip signing setup for CI builds
if lane == :ci_build
next
end
app_store_connect_api_key(
key_id: "Z98N7N8ZMW",
issuer_id: "f0fa1c89-6a9a-4144-bfba-529dfe05f09b",
@@ -60,8 +65,24 @@ platform :ios do
export_method: "app-store",
)
end
lane :ci_build do
build_app(
scheme: "Fintunes",
output_directory: "build",
workspace: "ios/Fintunes.xcworkspace",
skip_codesigning: true,
skip_archive: true,
skip_package_ipa: true
)
end
after_all do
after_all do |lane, options|
# Skip Sentry uploads for CI builds
if lane == :ci_build
next
end
build_number = get_build_number(
xcodeproj: "ios/Fintunes.xcodeproj",
)
+8
View File
@@ -39,6 +39,14 @@ For _fastlane_ installation instructions, see [Installing _fastlane_](https://do
### ios ci_build
```sh
[bundle exec] fastlane ios ci_build
```
### ios screenshots
```sh
+63 -63
View File
@@ -11,70 +11,70 @@
"build:ios": "react-native bundle --entry-file='index.js' --bundle-output='./ios/main.jsbundle' --dev=false --platform='ios'"
},
"dependencies": {
"@d11/react-native-fast-image": "^8.9.2",
"@react-native-async-storage/async-storage": "^2.1.2",
"@react-native-community/blur": "^4.4.1",
"@react-native-community/datetimepicker": "^8.3.0",
"@react-native-community/netinfo": "^11.4.1",
"@react-navigation/bottom-tabs": "^6.6.1",
"@react-navigation/elements": "^1.3.31",
"@react-navigation/native": "^6.1.18",
"@react-navigation/native-stack": "^6.11.0",
"@react-navigation/stack": "^6.4.1",
"@reduxjs/toolkit": "^2.7.0",
"@shopify/flash-list": "^1.8.0",
"@d11/react-native-fast-image": "8.13.0",
"@react-native-async-storage/async-storage": "2.2.0",
"@react-native-community/blur": "4.4.1",
"@react-native-community/datetimepicker": "8.6.0",
"@react-native-community/netinfo": "11.4.1",
"@react-navigation/bottom-tabs": "6.6.1",
"@react-navigation/elements": "1.3.31",
"@react-navigation/native": "6.1.18",
"@react-navigation/native-stack": "6.11.0",
"@react-navigation/stack": "6.4.1",
"@reduxjs/toolkit": "2.11.2",
"@shopify/flash-list": "1.8.0",
"@shopify/react-native-skia": "2.0.0-next.3",
"date-fns": "^3.6.0",
"events": "^3.3.0",
"fuse.js": "^7.1.0",
"i18n-js": "^4.5.1",
"lodash": "^4.17.21",
"mime": "^4.0.7",
"react": "19.0.0",
"react-airplay": "^1.2.0",
"react-native": "^0.79.2",
"react-native-accessibility-settings": "^0.1.2",
"react-native-collapsible": "^1.6.2",
"react-native-dotenv": "^3.4.11",
"react-native-fs": "^2.20.0",
"react-native-gesture-handler": "^2.25.0",
"react-native-localize": "^3.4.1",
"react-native-modal-datetime-picker": "^17.1.0",
"react-native-reanimated": "^3.17.5",
"react-native-safe-area-context": "^5.4.0",
"react-native-screens": "^4.10.0",
"react-native-shadow-2": "^7.1.1",
"react-native-svg": "^15.11.2",
"date-fns": "3.6.0",
"events": "3.3.0",
"fuse.js": "7.1.0",
"i18n-js": "4.5.1",
"lodash": "4.17.21",
"mime": "4.1.0",
"react": "19.1.0",
"react-airplay": "1.2.0",
"react-native": "0.79.2",
"react-native-accessibility-settings": "0.1.2",
"react-native-collapsible": "1.6.2",
"react-native-dotenv": "3.4.11",
"react-native-fs": "2.20.0",
"react-native-gesture-handler": "2.25.0",
"react-native-localize": "3.4.1",
"react-native-modal-datetime-picker": "17.1.0",
"react-native-reanimated": "3.17.5",
"react-native-safe-area-context": "5.6.2",
"react-native-screens": "4.10.0",
"react-native-shadow-2": "7.1.2",
"react-native-svg": "15.15.1",
"react-native-track-player": "npm:@weights-ai/react-native-track-player@^4.1.4",
"react-native-webview": "^13.13.5",
"react-redux": "^9.2.0",
"redux": "^5.0.1",
"redux-persist": "^6.0.0",
"styled-components": "^6.1.19"
"react-native-webview": "13.16.0",
"react-redux": "9.2.0",
"redux": "5.0.1",
"redux-persist": "6.0.0",
"styled-components": "6.3.8"
},
"devDependencies": {
"@babel/core": "^7.27.1",
"@babel/runtime": "^7.27.1",
"@react-native-community/cli": "^18.0.1",
"@react-native/babel-preset": "^0.79.2",
"@react-native/metro-config": "^0.79.2",
"@babel/core": "7.28.6",
"@babel/runtime": "7.28.6",
"@react-native-community/cli": "18.0.1",
"@react-native/babel-preset": "0.79.2",
"@react-native/metro-config": "0.79.2",
"@react-native/typescript-config": "0.74.85",
"@sentry/cli": "^2.44.0",
"@sentry/react-native": "^6.13.0",
"@types/i18n-js": "^3.8.9",
"@types/lodash": "^4.17.16",
"@types/node": "^20.17.32",
"@types/react": "^18.3.20",
"@typescript-eslint/eslint-plugin": "^6.21.0",
"@typescript-eslint/parser": "^6.21.0",
"babel-plugin-module-resolver": "^5.0.2",
"eslint": "^8.57.1",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^4.6.2",
"metro-react-native-babel-transformer": "^0.77.0",
"react-native-svg-transformer": "^1.5.1",
"tslib": "^2.8.1",
"typescript": "^5.8.3"
"@sentry/cli": "2.44.0",
"@sentry/react-native": "6.13.0",
"@types/i18n-js": "3.8.9",
"@types/lodash": "4.17.16",
"@types/node": "20.17.32",
"@types/react": "19.1.0",
"@typescript-eslint/eslint-plugin": "6.21.0",
"@typescript-eslint/parser": "6.21.0",
"babel-plugin-module-resolver": "5.0.2",
"eslint": "8.57.1",
"eslint-plugin-react": "7.37.5",
"eslint-plugin-react-hooks": "4.6.2",
"metro-react-native-babel-transformer": "0.77.0",
"react-native-svg-transformer": "1.5.2",
"tslib": "2.8.1",
"typescript": "5.9.3"
},
"jest": {
"preset": "react-native",
@@ -88,9 +88,9 @@
]
},
"overrides": {
"@babel/preset-typescript": "^7.23.3",
"@babel/plugin-transform-typescript": "^7.23.6",
"@babel/plugin-syntax-typescript": "^7.23.3",
"@babel/types": "^7.23.6"
"@babel/preset-typescript": "7.23.3",
"@babel/plugin-transform-typescript": "7.23.6",
"@babel/plugin-syntax-typescript": "7.23.3",
"@babel/types": "7.23.6"
}
}
+1011 -1676
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -46,7 +46,7 @@ function ThemedNavigationContainer({ children }: PropsWithChildren<{}>) {
);
}
export default function App(): JSX.Element | null {
export default function App(): React.JSX.Element | null {
// Track whether the player has already been setup, so that we don't
// accidentally do it twice.
const [hasSetupPlayer, setHasSetupPlayer] = useState(false);
+1 -1
View File
@@ -145,7 +145,7 @@ export default function useDefaultStyles() {
}
interface DefaultStylesProviderProps {
children: (defaultStyles: ReturnType<typeof useDefaultStyles>) => JSX.Element;
children: (defaultStyles: ReturnType<typeof useDefaultStyles>) => React.JSX.Element;
}
/**
+1 -1
View File
@@ -26,7 +26,7 @@ function TouchableHandler<T>({
onLongPress,
children,
testID,
}: PropsWithChildren<TouchableHandlerProps<T>>): JSX.Element {
}: PropsWithChildren<TouchableHandlerProps<T>>): React.JSX.Element {
const handlePress = useCallback(() => {
return onPress(id);
}, [id, onPress]);
+2 -2
View File
@@ -1,4 +1,4 @@
import React, { useCallback, useEffect, useRef, ReactText, useMemo } from 'react';
import React, { useCallback, useEffect, useRef, useMemo } from 'react';
import { useGetImage } from '@/utility/JellyfinApi/lib';
import { View } from 'react-native';
import { useNavigation } from '@react-navigation/native';
@@ -47,7 +47,7 @@ const SectionHeading = React.memo(function SectionHeading(props: {
});
interface GeneratedAlbumItemProps {
id: ReactText;
id: string | number;
imageUrl?: string | null;
name: string;
artist: string;
+2 -2
View File
@@ -1,4 +1,4 @@
import React, { useCallback, useEffect, ReactText } from 'react';
import React, { useCallback, useEffect } from 'react';
import { useGetImage } from '@/utility/JellyfinApi/lib';
import { View } from 'react-native';
import { RouteProp, useNavigation, useRoute } from '@react-navigation/native';
@@ -18,7 +18,7 @@ import { SafeFlatList } from '@/components/SafeNavigatorView';
import { chunk } from 'lodash';
interface GeneratedAlbumItemProps {
id: ReactText;
id: string | number;
imageUrl: string | undefined;
name: string;
artist: string;
+2 -2
View File
@@ -1,4 +1,4 @@
import React, { useCallback, useEffect, useRef, ReactText } from 'react';
import React, { useCallback, useEffect, useRef } from 'react';
import { useGetImage } from '@/utility/JellyfinApi/lib';
import { Text, View, FlatList, ListRenderItem, RefreshControl } from 'react-native';
import { useNavigation } from '@react-navigation/native';
@@ -13,7 +13,7 @@ import { NavigationProp } from '@/screens/types';
import { SafeFlatList, useNavigationOffsets } from '@/components/SafeNavigatorView';
interface GeneratedAlbumItemProps {
id: ReactText;
id: string | number;
imageUrl?: string | null;
name: string;
onPress: (id: string) => void;
@@ -68,7 +68,7 @@ const styles = StyleSheet.create({
});
interface Props {
header?: JSX.Element;
header?: React.JSX.Element;
}
export default function Queue({ header }: Props) {
@@ -1,4 +1,4 @@
import React, { useRef, useCallback } from 'react';
import React, { useRef, useCallback, useMemo } from 'react';
import { WebView, WebViewMessageEvent } from 'react-native-webview';
import { debounce } from 'lodash';
import { AppState } from '@/store';
@@ -52,7 +52,7 @@ type CredentialEventData = {
const CredentialGenerator: React.FC<Props> = ({ serverUrl, onCredentialsRetrieved }) => {
const webViewRef = useRef<WebView>(null);
const checkIfCredentialsAreThere = useCallback(debounce(() => {
const checkIfCredentialsAreThere = useMemo(() => debounce(() => {
webViewRef.current?.injectJavaScript(`
try {
let credentials = JSON.parse(window.localStorage.getItem('jellyfin_credentials'));
+1 -1
View File
@@ -3,7 +3,7 @@ import { useRef, useEffect } from 'react';
export default function usePrevious<T = unknown>(value: T) {
// The ref object is a generic container whose current property is mutable ...
// ... and can hold any value, similar to an instance property on a class
const ref = useRef<T>();
const ref = useRef<T | undefined>(undefined);
// Store current value in ref
useEffect(() => {
ref.current = value;