diff --git a/.github/workflows/build-internal.yml b/.github/workflows/build-internal.yml
index d719aa27c..63b5b0903 100644
--- a/.github/workflows/build-internal.yml
+++ b/.github/workflows/build-internal.yml
@@ -27,6 +27,8 @@ jobs:
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}
+ - name: Enable Corepack
+ run: corepack enable
- name: Add APP ENV
run: |
@@ -137,6 +139,8 @@ jobs:
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}
+ - name: Enable Corepack
+ run: corepack enable
- name: Remove unused web-runner for Android
run: |
rm -r ./html/OldWeb.bundle
@@ -179,7 +183,7 @@ jobs:
- uses: actions/setup-java@v1
with:
- java-version: '11'
+ java-version: '17'
- name: Cache Gradle Wrapper
uses: actions/cache@v3
diff --git a/.github/workflows/build-release-mac.yml b/.github/workflows/build-release-mac.yml
index 71864f921..592b4614a 100644
--- a/.github/workflows/build-release-mac.yml
+++ b/.github/workflows/build-release-mac.yml
@@ -27,6 +27,8 @@ jobs:
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}
+ - name: Enable Corepack
+ run: corepack enable
- name: Add APP ENV
run: |
@@ -134,6 +136,8 @@ jobs:
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}
+ - name: Enable Corepack
+ run: corepack enable
- name: Add APP ENV
run: |
@@ -172,7 +176,7 @@ jobs:
- uses: actions/setup-java@v1
with:
- java-version: '11'
+ java-version: '17'
- name: Cache Gradle Wrapper
uses: actions/cache@v3
@@ -227,4 +231,4 @@ jobs:
title: ${{ github.workflow }}
description: |
Android: Published on Play Console.
- Click [here](https://play.google.com/console/u/0/developers/5178189030889328266/app/4973509903908456575/tracks/internal-testing) to check internal testing
\ No newline at end of file
+ Click [here](https://play.google.com/console/u/0/developers/5178189030889328266/app/4973509903908456575/tracks/internal-testing) to check internal testing
diff --git a/.gitignore b/.gitignore
index f619d3ec9..b8d64a4d9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,7 +20,7 @@ DerivedData
*.hmap
*.ipa
*.xcuserstate
-ios/.xcode.env.local
+**/.xcode.env.local
# Android/IntelliJ
#
@@ -60,7 +60,7 @@ yarn-error.log
*.jsbundle
# Ruby / CocoaPods
-/ios/Pods/
+**/Pods/
/vendor/bundle/
# Temporary files created by Metro to check the health of the file watcher
@@ -71,3 +71,11 @@ yarn-error.log
app-center-private.pem
# testing
/coverage
+
+# Yarn
+.yarn/*
+!.yarn/patches
+!.yarn/plugins
+!.yarn/releases
+!.yarn/sdks
+!.yarn/versions
diff --git a/.yarnrc.yml b/.yarnrc.yml
new file mode 100644
index 000000000..08df0276b
--- /dev/null
+++ b/.yarnrc.yml
@@ -0,0 +1,5 @@
+enableImmutableInstalls: false
+
+enableProgressBars: false
+
+nodeLinker: node-modules
diff --git a/Gemfile b/Gemfile
index 8105b960f..a020a0e38 100644
--- a/Gemfile
+++ b/Gemfile
@@ -3,4 +3,6 @@ source 'https://rubygems.org'
# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
ruby '>= 2.6.10'
-gem 'cocoapods', '~> 1.12'
+# Exclude problematic versions of cocoapods and activesupport that causes build failures.
+gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1'
+gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0'
diff --git a/__tests__/App-test.tsx b/__tests__/App-test.tsx
index f5417db72..ace6b1a65 100644
--- a/__tests__/App-test.tsx
+++ b/__tests__/App-test.tsx
@@ -5,7 +5,7 @@
import 'react-native';
import React from 'react';
-// Note: import explicitly to use the types shiped with jest.
+// Note: import explicitly to use the types shipped with jest.
import { it } from '@jest/globals';
// Note: test renderer must be required after react-native.
diff --git a/android/app/build.gradle b/android/app/build.gradle
index cef66fd8d..b0c2ae8e6 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -1,4 +1,5 @@
apply plugin: "com.android.application"
+apply plugin: "org.jetbrains.kotlin.android"
apply plugin: "com.facebook.react"
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
@@ -9,14 +10,14 @@ apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
*/
react {
/* Folders */
- // The root of your project, i.e. where "package.json" lives. Default is '..'
- // root = file("../")
- // The folder where the react-native NPM package is. Default is ../node_modules/react-native
- // reactNativeDir = file("../node_modules/react-native")
- // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen
- // codegenDir = file("../node_modules/@react-native/codegen")
- // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
- // cliFile = file("../node_modules/react-native/cli.js")
+ // The root of your project, i.e. where "package.json" lives. Default is '../..'
+ // root = file("../../")
+ // The folder where the react-native NPM package is. Default is ../../node_modules/react-native
+ // reactNativeDir = file("../../node_modules/react-native")
+ // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen
+ // codegenDir = file("../../node_modules/@react-native/codegen")
+ // The cli.js file which is the React Native CLI entrypoint. Default is ../../node_modules/react-native/cli.js
+ // cliFile = file("../../node_modules/react-native/cli.js")
/* Variants */
// The list of variants to that are debuggable. For those we're going to
// skip the bundling of the JS bundle and the assets. By default is just 'debug'.
@@ -47,6 +48,8 @@ react {
//
// The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
// hermesFlags = ["-O", "-output-source-map"]
+ /* Autolinking */
+ autolinkLibrariesWithApp()
}
/**
@@ -70,7 +73,8 @@ def jscFlavor = 'org.webkit:android-jsc:+'
android {
ndkVersion rootProject.ext.ndkVersion
- compileSdkVersion rootProject.ext.compileSdkVersion
+ buildToolsVersion rootProject.ext.buildToolsVersion
+ compileSdk rootProject.ext.compileSdkVersion
namespace "app.subwallet.mobile"
defaultConfig {
applicationId "app.subwallet.mobile"
@@ -135,18 +139,9 @@ dependencies {
// The version of react-native is set by the React Native Gradle Plugin
implementation("com.facebook.react:react-android")
- debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}")
- debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
- exclude group:'com.squareup.okhttp3', module:'okhttp'
- }
-
- debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}")
if (hermesEnabled.toBoolean()) {
implementation("com.facebook.react:hermes-android")
} else {
implementation jscFlavor
}
}
-
-apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
-apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml
index 4b185bc15..eb98c01af 100644
--- a/android/app/src/debug/AndroidManifest.xml
+++ b/android/app/src/debug/AndroidManifest.xml
@@ -2,12 +2,8 @@
-
-
-
-
+ tools:ignore="GoogleAppIndexingWarning"/>
diff --git a/android/app/src/debug/java/app/subwallet/mobile/ReactNativeFlipper.java b/android/app/src/debug/java/app/subwallet/mobile/ReactNativeFlipper.java
deleted file mode 100644
index c3bd33b7c..000000000
--- a/android/app/src/debug/java/app/subwallet/mobile/ReactNativeFlipper.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- *
This source code is licensed under the MIT license found in the LICENSE file in the root
- * directory of this source tree.
- */
-package app.subwallet.mobile;
-
-import android.content.Context;
-import com.facebook.flipper.android.AndroidFlipperClient;
-import com.facebook.flipper.android.utils.FlipperUtils;
-import com.facebook.flipper.core.FlipperClient;
-import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
-import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
-import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
-import com.facebook.flipper.plugins.inspector.DescriptorMapping;
-import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
-import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
-import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
-import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
-import com.facebook.react.ReactInstanceEventListener;
-import com.facebook.react.ReactInstanceManager;
-import com.facebook.react.bridge.ReactContext;
-import com.facebook.react.modules.network.NetworkingModule;
-import okhttp3.OkHttpClient;
-
-/**
- * Class responsible of loading Flipper inside your React Native application. This is the debug
- * flavor of it. Here you can add your own plugins and customize the Flipper setup.
- */
-public class ReactNativeFlipper {
- public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
- if (FlipperUtils.shouldEnableFlipper(context)) {
- final FlipperClient client = AndroidFlipperClient.getInstance(context);
-
- client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
- client.addPlugin(new DatabasesFlipperPlugin(context));
- client.addPlugin(new SharedPreferencesFlipperPlugin(context));
- client.addPlugin(CrashReporterPlugin.getInstance());
-
- NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
- NetworkingModule.setCustomClientBuilder(
- new NetworkingModule.CustomClientBuilder() {
- @Override
- public void apply(OkHttpClient.Builder builder) {
- builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
- }
- });
- client.addPlugin(networkFlipperPlugin);
- client.start();
-
- // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
- // Hence we run if after all native modules have been initialized
- ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
- if (reactContext == null) {
- reactInstanceManager.addReactInstanceEventListener(
- new ReactInstanceEventListener() {
- @Override
- public void onReactContextInitialized(ReactContext reactContext) {
- reactInstanceManager.removeReactInstanceEventListener(this);
- reactContext.runOnNativeModulesQueueThread(
- new Runnable() {
- @Override
- public void run() {
- client.addPlugin(new FrescoFlipperPlugin());
- }
- });
- }
- });
- } else {
- client.addPlugin(new FrescoFlipperPlugin());
- }
- }
- }
-}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index fee5f86a2..e021310c3 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -16,7 +16,9 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:usesCleartextTraffic="true"
- android:theme="@style/AppTheme">
+ android:theme="@style/AppTheme"
+ android:extractNativeLibs="true"
+ android:supportsRtl="true">
getPackages() {
- @SuppressWarnings("UnnecessaryLocalVariable")
- List packages = new PackageList(this).getPackages();
- // Packages that cannot be autolinked yet can be added manually here, for example:
- packages.add(new RCTMinimizerPackage());
- packages.add(new RCTAppInstallerPackage());
- return packages;
- }
-
- @Override
- protected String getJSMainModuleName() {
- return "index";
- }
-
- @Override
- protected boolean isNewArchEnabled() {
- return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
- }
-
- @Override
- protected Boolean isHermesEnabled() {
- return BuildConfig.IS_HERMES_ENABLED;
- }
-
- @Override
- protected String getJSBundleFile() {
- return CodePush.getJSBundleFile();
- }
- };
-
- @Override
- public ReactNativeHost getReactNativeHost() {
- return mReactNativeHost;
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- WebView.setWebContentsDebuggingEnabled(true);
- SoLoader.init(this, /* native exopackage */ false);
- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
- // If you opted-in for the New Architecture, we load the native entry point for this app.
- DefaultNewArchitectureEntryPoint.load();
- }
- ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
- }
-}
diff --git a/android/app/src/main/java/app/subwallet/mobile/MainApplication.kt b/android/app/src/main/java/app/subwallet/mobile/MainApplication.kt
new file mode 100644
index 000000000..8b72221a5
--- /dev/null
+++ b/android/app/src/main/java/app/subwallet/mobile/MainApplication.kt
@@ -0,0 +1,50 @@
+package app.subwallet.mobile
+
+import android.app.Application
+import android.webkit.WebView
+import com.facebook.react.PackageList
+import com.facebook.react.ReactApplication
+import com.facebook.react.ReactHost
+import com.facebook.react.ReactNativeHost
+import com.facebook.react.ReactPackage
+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load
+import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost
+import com.facebook.react.defaults.DefaultReactNativeHost
+import com.facebook.soloader.SoLoader
+
+import app.subwallet.mobile.nativeModules.RCTAppInstallerPackage
+import app.subwallet.mobile.nativeModules.RCTMinimizerPackage
+import com.microsoft.codepush.react.CodePush
+
+class MainApplication : Application(), ReactApplication {
+
+ override val reactNativeHost: ReactNativeHost =
+ object : DefaultReactNativeHost(this) {
+ override fun getPackages(): List =
+ PackageList(this).packages.apply {
+ add(RCTMinimizerPackage())
+ add(RCTAppInstallerPackage())
+ }
+
+ override fun getJSMainModuleName(): String = "index"
+
+ override fun getJSBundleFile(): String = CodePush.getJSBundleFile()
+
+ override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
+
+ override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
+ override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
+ }
+
+ override val reactHost: ReactHost
+ get() = getDefaultReactHost(applicationContext, reactNativeHost)
+
+ override fun onCreate() {
+ super.onCreate()
+ SoLoader.init(this, false)
+ if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
+ // If you opted-in for the New Architecture, we load the native entry point for this app.
+ load()
+ }
+ }
+}
diff --git a/android/app/src/main/res/drawable/rn_edit_text_material.xml b/android/app/src/main/res/drawable/rn_edit_text_material.xml
index 73b37e4d9..5c25e728e 100644
--- a/android/app/src/main/res/drawable/rn_edit_text_material.xml
+++ b/android/app/src/main/res/drawable/rn_edit_text_material.xml
@@ -17,7 +17,8 @@
android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
android:insetTop="@dimen/abc_edit_text_inset_top_material"
- android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
+ android:insetBottom="@dimen/abc_edit_text_inset_bottom_material"
+ >
+ NSAllowsArbitraryLoads
+
+ NSAllowsLocalNetworking
+
+
NSCameraUsageDescription
Camera is used to capture QR code
NSMicrophoneUsageDescription
@@ -102,7 +99,7 @@
SplashScreen
UIRequiredDeviceCapabilities
- armv7
+ armv64
UIStatusBarStyle
UIStatusBarStyleLightContent
diff --git a/ios/SubWalletMobile/PrivacyInfo.xcprivacy b/ios/SubWalletMobile/PrivacyInfo.xcprivacy
new file mode 100644
index 000000000..41b8317f0
--- /dev/null
+++ b/ios/SubWalletMobile/PrivacyInfo.xcprivacy
@@ -0,0 +1,37 @@
+
+
+
+
+ NSPrivacyAccessedAPITypes
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryFileTimestamp
+ NSPrivacyAccessedAPITypeReasons
+
+ C617.1
+
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryUserDefaults
+ NSPrivacyAccessedAPITypeReasons
+
+ CA92.1
+
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategorySystemBootTime
+ NSPrivacyAccessedAPITypeReasons
+
+ 35F9.1
+
+
+
+ NSPrivacyCollectedDataTypes
+
+ NSPrivacyTracking
+
+
+
diff --git a/metro.config.js b/metro.config.js
index c844250c3..a9df3629e 100644
--- a/metro.config.js
+++ b/metro.config.js
@@ -1,6 +1,6 @@
/**
* Metro configuration
- * https://facebook.github.io/metro/docs/configuration
+ * https://reactnative.dev/docs/metro
*
* @type {import('metro-config').MetroConfig}
*/
diff --git a/package.json b/package.json
index 19ac461df..424eaf91a 100644
--- a/package.json
+++ b/package.json
@@ -37,7 +37,7 @@
"@fortawesome/free-regular-svg-icons": "^6.2.1",
"@fortawesome/free-solid-svg-icons": "^6.2.1",
"@fortawesome/react-native-fontawesome": "^0.3.0",
- "@gear-js/api": "^0.37.2",
+ "@gear-js/api": "0.38.2",
"@gorhom/portal": "^1.0.14",
"@polkadot/api": "^12.0.2",
"@polkadot/react-qr": "^3.5.1",
@@ -50,9 +50,8 @@
"@react-native-camera-roll/camera-roll": "^5.2.4",
"@react-native-clipboard/clipboard": "^1.11.1",
"@react-native-community/netinfo": "^9.3.7",
- "@react-native-community/segmented-control": "^2.2.2",
- "@react-native-community/slider": "^4.4.2",
"@react-native-masked-view/masked-view": "^0.2.9",
+ "@react-native/gradle-plugin": "^0.75.2",
"@react-navigation/bottom-tabs": "^6.5.3",
"@react-navigation/drawer": "^6.6.2",
"@react-navigation/material-top-tabs": "^6.6.3",
@@ -72,25 +71,22 @@
"humanize-duration": "^3.31.0",
"i18next": "^22.4.9",
"loglevel": "^1.8.1",
- "moment": "^2.29.4",
"patch-package": "^6.5.0",
"phosphor-react-native": "^1.1.2",
"postinstall-postinstall": "^2.1.0",
- "prettier": "^2.8.3",
+ "prettier": "^2.8.8",
"querystring": "^0.2.1",
- "react": "18.2.0",
+ "react": "18.3.1",
"react-dom": "^18.2.0",
"react-hook-form": "^7.44.3",
"react-i18next": "^12.1.4",
- "react-native": "^0.72.4",
+ "react-native": "^0.75.2",
"react-native-animatable": "^1.3.3",
"react-native-camera": "^4.2.1",
"react-native-code-push": "^8.1.1",
"react-native-config": "^1.5.1",
"react-native-device-info": "^10.3.0",
"react-native-document-picker": "^8.1.3",
- "react-native-dynamic-tab-view": "^1.0.7-0",
- "react-native-elements": "^3.4.3",
"react-native-error-boundary": "^1.2.3",
"react-native-fast-image": "^8.6.3",
"react-native-fs": "^2.20.0",
@@ -106,17 +102,17 @@
"react-native-mmkv": "^2.10.1",
"react-native-modal": "^13.0.1",
"react-native-navigation-bar-color": "^2.0.2",
- "react-native-pager-view": "^6.2.0",
+ "react-native-pager-view": "^6.4.1",
"react-native-permissions": "^3.10.1",
"react-native-progress": "^5.0.0",
"react-native-qrcode-scanner": "^1.5.5",
"react-native-qrcode-styled": "^0.2.1",
- "react-native-reanimated": "^3.5.4",
+ "react-native-reanimated": "3.15.1",
"react-native-reanimated-carousel": "^3.5.1",
"react-native-render-html": "^6.3.4",
"react-native-restart": "^0.0.20",
- "react-native-safe-area-context": "^4.5.0",
- "react-native-screens": "^3.19.0",
+ "react-native-safe-area-context": "^4.10.9",
+ "react-native-screens": "^3.35.0-rc.1",
"react-native-sensitive-info": "^6.0.0-alpha.9",
"react-native-splash-screen": "^3.3.0",
"react-native-static-server": "^0.5.0",
@@ -149,15 +145,14 @@
"@babel/runtime": "^7.20.6",
"@polkadot/types": "^12.0.2",
"@react-native/eslint-config": "^0.72.2",
- "@react-native/metro-config": "^0.72.11",
+ "@react-native/metro-config": "^0.75.2",
"@subwallet/chain-list": "0.2.86",
"@subwallet/extension-base": "1.2.29-0",
- "@tsconfig/react-native": "^3.0.0",
+ "@react-native/typescript-config": "0.75.2",
"@types/humanize-duration": "^3.27.3",
"@types/jest": "^29.2.3",
- "@types/react": "^18.0.25",
+ "@types/react": "^18.2.6",
"@types/react-native": "^0.70.6",
- "@types/react-native-bcrypt": "^2.4.2",
"@types/react-native-vector-icons": "^6.4.14",
"@types/react-native-video": "^5.0.14",
"@types/react-redux": "^7.1.24",
@@ -168,28 +163,27 @@
"@typescript-eslint/parser": "^5.45.0",
"assert": "^2.0.0",
"axios": "^1.4.0",
- "babel-jest": "^29.3.1",
+ "babel-jest": "^29.6.3",
"babel-loader": "^9.1.0",
"babel-plugin-module-resolver": "^4.1.0",
"babel-plugin-rewrite-require": "^1.14.5",
"babel-plugin-transform-remove-console": "^6.9.4",
"crypto-browserify": "^3.12.0",
"discord-webhook-node": "^1.1.8",
- "eslint": "^8.29.0",
+ "eslint": "^8.57.0",
"html-webpack-plugin": "^5.5.0",
"https-browserify": "^1.0.0",
"husky": "^8.0.3",
- "jest": "^29.2.1",
- "metro-react-native-babel-preset": "^0.76.8",
+ "jest": "^29.6.3",
"os-browserify": "^0.3.0",
"path-browserify": "^1.0.1",
"react-devtools": "^4.27.0",
- "react-test-renderer": "^18.2.0",
+ "react-test-renderer": "^18.3.1",
"readable-stream": "^4.2.0",
"sails-js": "0.1.6",
"stream-browserify": "^3.0.0",
"stream-http": "^3.2.0",
- "typescript": "^4.9.3",
+ "typescript": "4.9.3",
"url-loader": "^4.1.1",
"vm-browserify": "^1.1.2",
"webpack": "^5.75.0",
@@ -209,7 +203,7 @@
"sails-js": "0.1.6"
},
"engines": {
- "node": ">=16"
+ "node": ">=18"
},
- "packageManager": "yarn@1.22.19"
+ "packageManager": "yarn@3.6.4"
}
diff --git a/patches/react-native+0.75.2.patch b/patches/react-native+0.75.2.patch
new file mode 100644
index 000000000..77f026f05
--- /dev/null
+++ b/patches/react-native+0.75.2.patch
@@ -0,0 +1,326 @@
+diff --git a/node_modules/react-native/React/Fabric/RCTThirdPartyFabricComponentsProvider.h b/node_modules/react-native/React/Fabric/RCTThirdPartyFabricComponentsProvider.h
+new file mode 100644
+index 0000000..0dc8a75
+--- /dev/null
++++ b/node_modules/react-native/React/Fabric/RCTThirdPartyFabricComponentsProvider.h
+@@ -0,0 +1,116 @@
++
++/*
++ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
++ *
++ * Do not edit this file as changes may cause incorrect behavior and will be lost
++ * once the code is regenerated.
++ *
++ * @generated by GenerateRCTThirdPartyFabricComponentsProviderH
++ */
++
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wreturn-type-c-linkage"
++
++#import
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++Class RCTThirdPartyFabricComponentsProvider(const char *name);
++#if RCT_NEW_ARCH_ENABLED
++#ifndef RCT_DYNAMIC_FRAMEWORKS
++
++#if !TARGET_OS_VISION
++
++#endif
++
++#if !TARGET_OS_OSX && !TARGET_OS_VISION
++
++#endif
++
++#if !TARGET_OS_VISION
++
++#endif
++
++#if !TARGET_OS_OSX && !TARGET_OS_TV
++Class RNCSliderCls(void) __attribute__((used)); // 3
++#endif
++
++Class RNGestureHandlerButtonCls(void) __attribute__((used)); // 4
++Class RNGestureHandlerRootViewCls(void) __attribute__((used)); // 4
++#if !TARGET_OS_OSX && !TARGET_OS_TV && !TARGET_OS_VISION
++
++#endif
++
++
++#if !TARGET_OS_VISION
++
++#endif
++
++#if !TARGET_OS_OSX && !TARGET_OS_TV && !TARGET_OS_VISION
++Class RNCViewPagerCls(void) __attribute__((used)); // 8
++#endif
++
++#if !TARGET_OS_OSX && !TARGET_OS_VISION
++
++#endif
++
++#if !TARGET_OS_OSX
++Class RNCSafeAreaProviderCls(void) __attribute__((used)); // 10
++Class RNCSafeAreaViewCls(void) __attribute__((used)); // 10
++#endif
++
++#if !TARGET_OS_OSX && !TARGET_OS_VISION
++Class RNSFullWindowOverlayCls(void) __attribute__((used)); // 11
++Class RNSScreenContainerCls(void) __attribute__((used)); // 11
++Class RNSScreenCls(void) __attribute__((used)); // 11
++Class RNSScreenNavigationContainerCls(void) __attribute__((used)); // 11
++Class RNSScreenStackHeaderConfigCls(void) __attribute__((used)); // 11
++Class RNSScreenStackHeaderSubviewCls(void) __attribute__((used)); // 11
++Class RNSScreenStackCls(void) __attribute__((used)); // 11
++Class RNSSearchBarCls(void) __attribute__((used)); // 11
++#endif
++
++#if !TARGET_OS_VISION
++Class RNSVGCircleCls(void) __attribute__((used)); // 12
++Class RNSVGClipPathCls(void) __attribute__((used)); // 12
++Class RNSVGDefsCls(void) __attribute__((used)); // 12
++Class RNSVGEllipseCls(void) __attribute__((used)); // 12
++Class RNSVGForeignObjectCls(void) __attribute__((used)); // 12
++Class RNSVGGroupCls(void) __attribute__((used)); // 12
++Class RNSVGImageCls(void) __attribute__((used)); // 12
++Class RNSVGSvgViewCls(void) __attribute__((used)); // 12
++Class RNSVGLinearGradientCls(void) __attribute__((used)); // 12
++Class RNSVGLineCls(void) __attribute__((used)); // 12
++Class RNSVGMarkerCls(void) __attribute__((used)); // 12
++Class RNSVGMaskCls(void) __attribute__((used)); // 12
++Class RNSVGPathCls(void) __attribute__((used)); // 12
++Class RNSVGPatternCls(void) __attribute__((used)); // 12
++Class RNSVGRadialGradientCls(void) __attribute__((used)); // 12
++Class RNSVGRectCls(void) __attribute__((used)); // 12
++Class RNSVGSymbolCls(void) __attribute__((used)); // 12
++Class RNSVGTextCls(void) __attribute__((used)); // 12
++Class RNSVGTextPathCls(void) __attribute__((used)); // 12
++Class RNSVGTSpanCls(void) __attribute__((used)); // 12
++Class RNSVGUseCls(void) __attribute__((used)); // 12
++#endif
++
++#if !TARGET_OS_OSX && !TARGET_OS_VISION
++
++#endif
++
++#if !TARGET_OS_TV && !TARGET_OS_VISION
++Class RNCWebViewCls(void) __attribute__((used)); // 14
++#endif
++
++
++#endif
++#endif
++
++#ifdef __cplusplus
++}
++#endif
++
++#pragma GCC diagnostic pop
++
+diff --git a/node_modules/react-native/React/Fabric/RCTThirdPartyFabricComponentsProvider.mm b/node_modules/react-native/React/Fabric/RCTThirdPartyFabricComponentsProvider.mm
+new file mode 100644
+index 0000000..4e6a2d5
+--- /dev/null
++++ b/node_modules/react-native/React/Fabric/RCTThirdPartyFabricComponentsProvider.mm
+@@ -0,0 +1,151 @@
++
++/**
++ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
++ *
++ * Do not edit this file as changes may cause incorrect behavior and will be lost
++ * once the code is regenerated.
++ *
++ * @generated by GenerateRCTThirdPartyFabricComponentsProviderCpp
++ */
++
++// OSS-compatibility layer
++
++#import "RCTThirdPartyFabricComponentsProvider.h"
++
++#import
++#import
++
++Class RCTThirdPartyFabricComponentsProvider(const char *name) {
++ static std::unordered_map sFabricComponentsClassMap = {
++ #if RCT_NEW_ARCH_ENABLED
++ #ifndef RCT_DYNAMIC_FRAMEWORKS
++#if !TARGET_OS_VISION
++
++#endif
++
++#if !TARGET_OS_OSX && !TARGET_OS_VISION
++
++#endif
++
++#if !TARGET_OS_VISION
++
++#endif
++
++#if !TARGET_OS_OSX && !TARGET_OS_TV
++
++ {"RNCSlider", RNCSliderCls}, // 3
++#endif
++
++
++ {"RNGestureHandlerButton", RNGestureHandlerButtonCls}, // 4
++
++ {"RNGestureHandlerRootView", RNGestureHandlerRootViewCls}, // 4
++#if !TARGET_OS_OSX && !TARGET_OS_TV && !TARGET_OS_VISION
++
++#endif
++
++
++#if !TARGET_OS_VISION
++
++#endif
++
++#if !TARGET_OS_OSX && !TARGET_OS_TV && !TARGET_OS_VISION
++
++ {"RNCViewPager", RNCViewPagerCls}, // 8
++#endif
++
++#if !TARGET_OS_OSX && !TARGET_OS_VISION
++
++#endif
++
++#if !TARGET_OS_OSX
++
++ {"RNCSafeAreaProvider", RNCSafeAreaProviderCls}, // 10
++
++ {"RNCSafeAreaView", RNCSafeAreaViewCls}, // 10
++#endif
++
++#if !TARGET_OS_OSX && !TARGET_OS_VISION
++
++ {"RNSFullWindowOverlay", RNSFullWindowOverlayCls}, // 11
++
++ {"RNSScreenContainer", RNSScreenContainerCls}, // 11
++
++ {"RNSScreen", RNSScreenCls}, // 11
++
++ {"RNSScreenNavigationContainer", RNSScreenNavigationContainerCls}, // 11
++
++ {"RNSScreenStackHeaderConfig", RNSScreenStackHeaderConfigCls}, // 11
++
++ {"RNSScreenStackHeaderSubview", RNSScreenStackHeaderSubviewCls}, // 11
++
++ {"RNSScreenStack", RNSScreenStackCls}, // 11
++
++ {"RNSSearchBar", RNSSearchBarCls}, // 11
++#endif
++
++#if !TARGET_OS_VISION
++
++ {"RNSVGCircle", RNSVGCircleCls}, // 12
++
++ {"RNSVGClipPath", RNSVGClipPathCls}, // 12
++
++ {"RNSVGDefs", RNSVGDefsCls}, // 12
++
++ {"RNSVGEllipse", RNSVGEllipseCls}, // 12
++
++ {"RNSVGForeignObject", RNSVGForeignObjectCls}, // 12
++
++ {"RNSVGGroup", RNSVGGroupCls}, // 12
++
++ {"RNSVGImage", RNSVGImageCls}, // 12
++
++ {"RNSVGSvgView", RNSVGSvgViewCls}, // 12
++
++ {"RNSVGLinearGradient", RNSVGLinearGradientCls}, // 12
++
++ {"RNSVGLine", RNSVGLineCls}, // 12
++
++ {"RNSVGMarker", RNSVGMarkerCls}, // 12
++
++ {"RNSVGMask", RNSVGMaskCls}, // 12
++
++ {"RNSVGPath", RNSVGPathCls}, // 12
++
++ {"RNSVGPattern", RNSVGPatternCls}, // 12
++
++ {"RNSVGRadialGradient", RNSVGRadialGradientCls}, // 12
++
++ {"RNSVGRect", RNSVGRectCls}, // 12
++
++ {"RNSVGSymbol", RNSVGSymbolCls}, // 12
++
++ {"RNSVGText", RNSVGTextCls}, // 12
++
++ {"RNSVGTextPath", RNSVGTextPathCls}, // 12
++
++ {"RNSVGTSpan", RNSVGTSpanCls}, // 12
++
++ {"RNSVGUse", RNSVGUseCls}, // 12
++#endif
++
++#if !TARGET_OS_OSX && !TARGET_OS_VISION
++
++#endif
++
++#if !TARGET_OS_TV && !TARGET_OS_VISION
++
++ {"RNCWebView", RNCWebViewCls}, // 14
++#endif
++
++ #endif
++ #endif
++ };
++
++ auto p = sFabricComponentsClassMap.find(name);
++ if (p != sFabricComponentsClassMap.end()) {
++ auto classFunc = p->second;
++ return classFunc();
++ }
++ return nil;
++}
+diff --git a/node_modules/react-native/ReactAndroid/api/ReactAndroid.api b/node_modules/react-native/ReactAndroid/api/ReactAndroid.api
+index e647de2..6a14ffd 100644
+--- a/node_modules/react-native/ReactAndroid/api/ReactAndroid.api
++++ b/node_modules/react-native/ReactAndroid/api/ReactAndroid.api
+@@ -6459,9 +6459,9 @@ public class com/facebook/react/views/imagehelper/ImageSource {
+ public final fun getSize ()D
+ public final fun getSource ()Ljava/lang/String;
+ public static final fun getTransparentBitmapImageSource (Landroid/content/Context;)Lcom/facebook/react/views/imagehelper/ImageSource;
+- public final fun getUri ()Landroid/net/Uri;
++ public fun getUri ()Landroid/net/Uri;
+ public fun hashCode ()I
+- public final fun isResource ()Z
++ public fun isResource ()Z
+ }
+
+ public final class com/facebook/react/views/imagehelper/ImageSource$Companion {
+diff --git a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ImageSource.kt b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ImageSource.kt
+index 583b4a0..c6b419e 100644
+--- a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ImageSource.kt
++++ b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ImageSource.kt
+@@ -23,12 +23,14 @@ constructor(
+ ) {
+
+ /** Get the URI for this image - can be either a parsed network URI or a resource URI. */
+- public val uri: Uri = computeUri(context)
++ public open val uri: Uri = computeUri(context)
+ /** Get the area of this image. */
+ public val size: Double = width * height
+ /** Get whether this image source represents an Android resource or a network URI. */
+- public var isResource: Boolean = false
+- private set
++ public open var isResource: Boolean = false
++ get() = _isResource
++
++ private var _isResource: Boolean = false
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) {
+@@ -58,7 +60,7 @@ constructor(
+ }
+
+ private fun computeLocalUri(context: Context): Uri {
+- isResource = true
++ _isResource = true
+ return ResourceDrawableIdHelper.instance.getResourceDrawableUri(context, source)
+ }
+
diff --git a/patches/react-native-fast-image+8.6.3.patch b/patches/react-native-fast-image+8.6.3.patch
new file mode 100644
index 000000000..32288ab1f
--- /dev/null
+++ b/patches/react-native-fast-image+8.6.3.patch
@@ -0,0 +1,1959 @@
+diff --git a/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/bumptech/glide/GeneratedAppGlideModuleImpl.java b/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/bumptech/glide/GeneratedAppGlideModuleImpl.java
+new file mode 100644
+index 0000000..d1697fa
+--- /dev/null
++++ b/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/bumptech/glide/GeneratedAppGlideModuleImpl.java
+@@ -0,0 +1,54 @@
++package com.bumptech.glide;
++
++import android.content.Context;
++import android.util.Log;
++import androidx.annotation.NonNull;
++import com.bumptech.glide.integration.okhttp3.OkHttpLibraryGlideModule;
++import com.dylanvann.fastimage.FastImageGlideModule;
++import com.dylanvann.fastimage.FastImageOkHttpProgressGlideModule;
++import java.util.Collections;
++import java.util.Set;
++
++@SuppressWarnings("deprecation")
++final class GeneratedAppGlideModuleImpl extends GeneratedAppGlideModule {
++ private final FastImageGlideModule appGlideModule;
++
++ public GeneratedAppGlideModuleImpl(Context context) {
++ appGlideModule = new FastImageGlideModule();
++ if (Log.isLoggable("Glide", Log.DEBUG)) {
++ Log.d("Glide", "Discovered AppGlideModule from annotation: com.dylanvann.fastimage.FastImageGlideModule");
++ Log.d("Glide", "Discovered LibraryGlideModule from annotation: com.bumptech.glide.integration.okhttp3.OkHttpLibraryGlideModule");
++ Log.d("Glide", "Discovered LibraryGlideModule from annotation: com.dylanvann.fastimage.FastImageOkHttpProgressGlideModule");
++ }
++ }
++
++ @Override
++ public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
++ appGlideModule.applyOptions(context, builder);
++ }
++
++ @Override
++ public void registerComponents(@NonNull Context context, @NonNull Glide glide,
++ @NonNull Registry registry) {
++ new OkHttpLibraryGlideModule().registerComponents(context, glide, registry);
++ new FastImageOkHttpProgressGlideModule().registerComponents(context, glide, registry);
++ appGlideModule.registerComponents(context, glide, registry);
++ }
++
++ @Override
++ public boolean isManifestParsingEnabled() {
++ return appGlideModule.isManifestParsingEnabled();
++ }
++
++ @Override
++ @NonNull
++ public Set> getExcludedModuleClasses() {
++ return Collections.emptySet();
++ }
++
++ @Override
++ @NonNull
++ GeneratedRequestManagerFactory getRequestManagerFactory() {
++ return new GeneratedRequestManagerFactory();
++ }
++}
+diff --git a/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/bumptech/glide/GeneratedRequestManagerFactory.java b/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/bumptech/glide/GeneratedRequestManagerFactory.java
+new file mode 100644
+index 0000000..2e5b7b0
+--- /dev/null
++++ b/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/bumptech/glide/GeneratedRequestManagerFactory.java
+@@ -0,0 +1,20 @@
++package com.bumptech.glide;
++
++import android.content.Context;
++import androidx.annotation.NonNull;
++import com.bumptech.glide.manager.Lifecycle;
++import com.bumptech.glide.manager.RequestManagerRetriever;
++import com.bumptech.glide.manager.RequestManagerTreeNode;
++import com.dylanvann.fastimage.GlideRequests;
++
++/**
++ * Generated code, do not modify
++ */
++final class GeneratedRequestManagerFactory implements RequestManagerRetriever.RequestManagerFactory {
++ @Override
++ @NonNull
++ public RequestManager build(@NonNull Glide glide, @NonNull Lifecycle lifecycle,
++ @NonNull RequestManagerTreeNode treeNode, @NonNull Context context) {
++ return new GlideRequests(glide, lifecycle, treeNode, context);
++ }
++}
+diff --git a/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/bumptech/glide/annotation/compiler/GlideIndexer_GlideModule_com_dylanvann_fastimage_FastImageOkHttpProgressGlideModule.java b/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/bumptech/glide/annotation/compiler/GlideIndexer_GlideModule_com_dylanvann_fastimage_FastImageOkHttpProgressGlideModule.java
+new file mode 100644
+index 0000000..46dc97b
+--- /dev/null
++++ b/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/bumptech/glide/annotation/compiler/GlideIndexer_GlideModule_com_dylanvann_fastimage_FastImageOkHttpProgressGlideModule.java
+@@ -0,0 +1,7 @@
++package com.bumptech.glide.annotation.compiler;
++
++@Index(
++ modules = "com.dylanvann.fastimage.FastImageOkHttpProgressGlideModule"
++)
++public class GlideIndexer_GlideModule_com_dylanvann_fastimage_FastImageOkHttpProgressGlideModule {
++}
+diff --git a/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/dylanvann/fastimage/GlideApp.java b/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/dylanvann/fastimage/GlideApp.java
+new file mode 100644
+index 0000000..317387b
+--- /dev/null
++++ b/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/dylanvann/fastimage/GlideApp.java
+@@ -0,0 +1,138 @@
++package com.dylanvann.fastimage;
++
++import android.annotation.SuppressLint;
++import android.app.Activity;
++import android.content.Context;
++import android.view.View;
++import androidx.annotation.NonNull;
++import androidx.annotation.Nullable;
++import androidx.annotation.VisibleForTesting;
++import androidx.fragment.app.Fragment;
++import androidx.fragment.app.FragmentActivity;
++import com.bumptech.glide.Glide;
++import com.bumptech.glide.GlideBuilder;
++import java.io.File;
++
++/**
++ * The entry point for interacting with Glide for Applications
++ *
++ * Includes all generated APIs from all
++ * {@link com.bumptech.glide.annotation.GlideExtension}s in source and dependent libraries.
++ *
++ *
This class is generated and should not be modified
++ * @see Glide
++ */
++public final class GlideApp {
++ private GlideApp() {
++ }
++
++ /**
++ * @see Glide#getPhotoCacheDir(Context)
++ */
++ @Nullable
++ public static File getPhotoCacheDir(@NonNull Context context) {
++ return Glide.getPhotoCacheDir(context);
++ }
++
++ /**
++ * @see Glide#getPhotoCacheDir(Context, String)
++ */
++ @Nullable
++ public static File getPhotoCacheDir(@NonNull Context context, @NonNull String string) {
++ return Glide.getPhotoCacheDir(context, string);
++ }
++
++ /**
++ * @see Glide#get(Context)
++ */
++ @NonNull
++ public static Glide get(@NonNull Context context) {
++ return Glide.get(context);
++ }
++
++ /**
++ * @see Glide#init(Glide)
++ */
++ @Deprecated
++ @VisibleForTesting
++ @SuppressLint("VisibleForTests")
++ public static void init(Glide glide) {
++ Glide.init(glide);
++ }
++
++ /**
++ * @see Glide#init(Context, GlideBuilder)
++ */
++ @VisibleForTesting
++ @SuppressLint("VisibleForTests")
++ public static void init(@NonNull Context context, @NonNull GlideBuilder builder) {
++ Glide.init(context, builder);
++ }
++
++ /**
++ * @see Glide#enableHardwareBitmaps()
++ */
++ @VisibleForTesting
++ @SuppressLint("VisibleForTests")
++ public static void enableHardwareBitmaps() {
++ Glide.enableHardwareBitmaps();
++ }
++
++ /**
++ * @see Glide#tearDown()
++ */
++ @VisibleForTesting
++ @SuppressLint("VisibleForTests")
++ public static void tearDown() {
++ Glide.tearDown();
++ }
++
++ /**
++ * @see Glide#with(Context)
++ */
++ @NonNull
++ public static GlideRequests with(@NonNull Context context) {
++ return (GlideRequests) Glide.with(context);
++ }
++
++ /**
++ * @see Glide#with(Activity)
++ */
++ @NonNull
++ public static GlideRequests with(@NonNull Activity activity) {
++ return (GlideRequests) Glide.with(activity);
++ }
++
++ /**
++ * @see Glide#with(FragmentActivity)
++ */
++ @NonNull
++ public static GlideRequests with(@NonNull FragmentActivity activity) {
++ return (GlideRequests) Glide.with(activity);
++ }
++
++ /**
++ * @see Glide#with(Fragment)
++ */
++ @NonNull
++ public static GlideRequests with(@NonNull Fragment fragment) {
++ return (GlideRequests) Glide.with(fragment);
++ }
++
++ /**
++ * @see Glide#with(Fragment)
++ */
++ @Deprecated
++ @NonNull
++ public static GlideRequests with(@NonNull android.app.Fragment fragment) {
++ return (GlideRequests) Glide.with(fragment);
++ }
++
++ /**
++ * @see Glide#with(View)
++ */
++ @NonNull
++ public static GlideRequests with(@NonNull View view) {
++ return (GlideRequests) Glide.with(view);
++ }
++}
+diff --git a/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/dylanvann/fastimage/GlideOptions.java b/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/dylanvann/fastimage/GlideOptions.java
+new file mode 100644
+index 0000000..442798e
+--- /dev/null
++++ b/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/dylanvann/fastimage/GlideOptions.java
+@@ -0,0 +1,624 @@
++package com.dylanvann.fastimage;
++
++import android.content.res.Resources;
++import android.graphics.Bitmap;
++import android.graphics.drawable.Drawable;
++import androidx.annotation.CheckResult;
++import androidx.annotation.DrawableRes;
++import androidx.annotation.FloatRange;
++import androidx.annotation.IntRange;
++import androidx.annotation.NonNull;
++import androidx.annotation.Nullable;
++import com.bumptech.glide.Priority;
++import com.bumptech.glide.load.DecodeFormat;
++import com.bumptech.glide.load.Key;
++import com.bumptech.glide.load.Option;
++import com.bumptech.glide.load.Transformation;
++import com.bumptech.glide.load.engine.DiskCacheStrategy;
++import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy;
++import com.bumptech.glide.request.BaseRequestOptions;
++import com.bumptech.glide.request.RequestOptions;
++
++/**
++ * Automatically generated from {@link com.bumptech.glide.annotation.GlideExtension} annotated classes.
++ *
++ * @see RequestOptions
++ */
++@SuppressWarnings("deprecation")
++public final class GlideOptions extends RequestOptions implements Cloneable {
++ private static GlideOptions fitCenterTransform0;
++
++ private static GlideOptions centerInsideTransform1;
++
++ private static GlideOptions centerCropTransform2;
++
++ private static GlideOptions circleCropTransform3;
++
++ private static GlideOptions noTransformation4;
++
++ private static GlideOptions noAnimation5;
++
++ /**
++ * @see RequestOptions#sizeMultiplierOf(float)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions sizeMultiplierOf(@FloatRange(from = 0.0, to = 1.0) float value) {
++ return new GlideOptions().sizeMultiplier(value);
++ }
++
++ /**
++ * @see RequestOptions#diskCacheStrategyOf(DiskCacheStrategy)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions diskCacheStrategyOf(@NonNull DiskCacheStrategy strategy) {
++ return new GlideOptions().diskCacheStrategy(strategy);
++ }
++
++ /**
++ * @see RequestOptions#priorityOf(Priority)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions priorityOf(@NonNull Priority priority) {
++ return new GlideOptions().priority(priority);
++ }
++
++ /**
++ * @see RequestOptions#placeholderOf(Drawable)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions placeholderOf(@Nullable Drawable drawable) {
++ return new GlideOptions().placeholder(drawable);
++ }
++
++ /**
++ * @see RequestOptions#placeholderOf(int)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions placeholderOf(@DrawableRes int id) {
++ return new GlideOptions().placeholder(id);
++ }
++
++ /**
++ * @see RequestOptions#errorOf(Drawable)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions errorOf(@Nullable Drawable drawable) {
++ return new GlideOptions().error(drawable);
++ }
++
++ /**
++ * @see RequestOptions#errorOf(int)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions errorOf(@DrawableRes int id) {
++ return new GlideOptions().error(id);
++ }
++
++ /**
++ * @see RequestOptions#skipMemoryCacheOf(boolean)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions skipMemoryCacheOf(boolean skipMemoryCache) {
++ return new GlideOptions().skipMemoryCache(skipMemoryCache);
++ }
++
++ /**
++ * @see RequestOptions#overrideOf(int, int)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions overrideOf(int width, int height) {
++ return new GlideOptions().override(width, height);
++ }
++
++ /**
++ * @see RequestOptions#overrideOf(int)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions overrideOf(int size) {
++ return new GlideOptions().override(size);
++ }
++
++ /**
++ * @see RequestOptions#signatureOf(Key)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions signatureOf(@NonNull Key key) {
++ return new GlideOptions().signature(key);
++ }
++
++ /**
++ * @see RequestOptions#fitCenterTransform()
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions fitCenterTransform() {
++ if (GlideOptions.fitCenterTransform0 == null) {
++ GlideOptions.fitCenterTransform0 =
++ new GlideOptions().fitCenter().autoClone();
++ }
++ return GlideOptions.fitCenterTransform0;
++ }
++
++ /**
++ * @see RequestOptions#centerInsideTransform()
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions centerInsideTransform() {
++ if (GlideOptions.centerInsideTransform1 == null) {
++ GlideOptions.centerInsideTransform1 =
++ new GlideOptions().centerInside().autoClone();
++ }
++ return GlideOptions.centerInsideTransform1;
++ }
++
++ /**
++ * @see RequestOptions#centerCropTransform()
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions centerCropTransform() {
++ if (GlideOptions.centerCropTransform2 == null) {
++ GlideOptions.centerCropTransform2 =
++ new GlideOptions().centerCrop().autoClone();
++ }
++ return GlideOptions.centerCropTransform2;
++ }
++
++ /**
++ * @see RequestOptions#circleCropTransform()
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions circleCropTransform() {
++ if (GlideOptions.circleCropTransform3 == null) {
++ GlideOptions.circleCropTransform3 =
++ new GlideOptions().circleCrop().autoClone();
++ }
++ return GlideOptions.circleCropTransform3;
++ }
++
++ /**
++ * @see RequestOptions#bitmapTransform(Transformation)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions bitmapTransform(@NonNull Transformation transformation) {
++ return new GlideOptions().transform(transformation);
++ }
++
++ /**
++ * @see RequestOptions#noTransformation()
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions noTransformation() {
++ if (GlideOptions.noTransformation4 == null) {
++ GlideOptions.noTransformation4 =
++ new GlideOptions().dontTransform().autoClone();
++ }
++ return GlideOptions.noTransformation4;
++ }
++
++ /**
++ * @see RequestOptions#option(Option, T)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions option(@NonNull Option option, @NonNull T t) {
++ return new GlideOptions().set(option, t);
++ }
++
++ /**
++ * @see RequestOptions#decodeTypeOf(Class)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions decodeTypeOf(@NonNull Class> clazz) {
++ return new GlideOptions().decode(clazz);
++ }
++
++ /**
++ * @see RequestOptions#formatOf(DecodeFormat)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions formatOf(@NonNull DecodeFormat format) {
++ return new GlideOptions().format(format);
++ }
++
++ /**
++ * @see RequestOptions#frameOf(long)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions frameOf(@IntRange(from = 0) long value) {
++ return new GlideOptions().frame(value);
++ }
++
++ /**
++ * @see RequestOptions#downsampleOf(DownsampleStrategy)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions downsampleOf(@NonNull DownsampleStrategy strategy) {
++ return new GlideOptions().downsample(strategy);
++ }
++
++ /**
++ * @see RequestOptions#timeoutOf(int)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions timeoutOf(@IntRange(from = 0) int value) {
++ return new GlideOptions().timeout(value);
++ }
++
++ /**
++ * @see RequestOptions#encodeQualityOf(int)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions encodeQualityOf(@IntRange(from = 0, to = 100) int value) {
++ return new GlideOptions().encodeQuality(value);
++ }
++
++ /**
++ * @see RequestOptions#encodeFormatOf(CompressFormat)
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions encodeFormatOf(@NonNull Bitmap.CompressFormat format) {
++ return new GlideOptions().encodeFormat(format);
++ }
++
++ /**
++ * @see RequestOptions#noAnimation()
++ */
++ @CheckResult
++ @NonNull
++ public static GlideOptions noAnimation() {
++ if (GlideOptions.noAnimation5 == null) {
++ GlideOptions.noAnimation5 =
++ new GlideOptions().dontAnimate().autoClone();
++ }
++ return GlideOptions.noAnimation5;
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions sizeMultiplier(@FloatRange(from = 0.0, to = 1.0) float value) {
++ return (GlideOptions) super.sizeMultiplier(value);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions useUnlimitedSourceGeneratorsPool(boolean flag) {
++ return (GlideOptions) super.useUnlimitedSourceGeneratorsPool(flag);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions useAnimationPool(boolean flag) {
++ return (GlideOptions) super.useAnimationPool(flag);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions onlyRetrieveFromCache(boolean flag) {
++ return (GlideOptions) super.onlyRetrieveFromCache(flag);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions diskCacheStrategy(@NonNull DiskCacheStrategy strategy) {
++ return (GlideOptions) super.diskCacheStrategy(strategy);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions priority(@NonNull Priority priority) {
++ return (GlideOptions) super.priority(priority);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions placeholder(@Nullable Drawable drawable) {
++ return (GlideOptions) super.placeholder(drawable);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions placeholder(@DrawableRes int id) {
++ return (GlideOptions) super.placeholder(id);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions fallback(@Nullable Drawable drawable) {
++ return (GlideOptions) super.fallback(drawable);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions fallback(@DrawableRes int id) {
++ return (GlideOptions) super.fallback(id);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions error(@Nullable Drawable drawable) {
++ return (GlideOptions) super.error(drawable);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions error(@DrawableRes int id) {
++ return (GlideOptions) super.error(id);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions theme(@Nullable Resources.Theme theme) {
++ return (GlideOptions) super.theme(theme);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions skipMemoryCache(boolean skip) {
++ return (GlideOptions) super.skipMemoryCache(skip);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions override(int width, int height) {
++ return (GlideOptions) super.override(width, height);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions override(int size) {
++ return (GlideOptions) super.override(size);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions signature(@NonNull Key key) {
++ return (GlideOptions) super.signature(key);
++ }
++
++ @Override
++ @CheckResult
++ public GlideOptions clone() {
++ return (GlideOptions) super.clone();
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions set(@NonNull Option option, @NonNull Y y) {
++ return (GlideOptions) super.set(option, y);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions decode(@NonNull Class> clazz) {
++ return (GlideOptions) super.decode(clazz);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions encodeFormat(@NonNull Bitmap.CompressFormat format) {
++ return (GlideOptions) super.encodeFormat(format);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions encodeQuality(@IntRange(from = 0, to = 100) int value) {
++ return (GlideOptions) super.encodeQuality(value);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions frame(@IntRange(from = 0) long value) {
++ return (GlideOptions) super.frame(value);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions format(@NonNull DecodeFormat format) {
++ return (GlideOptions) super.format(format);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions disallowHardwareConfig() {
++ return (GlideOptions) super.disallowHardwareConfig();
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions downsample(@NonNull DownsampleStrategy strategy) {
++ return (GlideOptions) super.downsample(strategy);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions timeout(@IntRange(from = 0) int value) {
++ return (GlideOptions) super.timeout(value);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions optionalCenterCrop() {
++ return (GlideOptions) super.optionalCenterCrop();
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions centerCrop() {
++ return (GlideOptions) super.centerCrop();
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions optionalFitCenter() {
++ return (GlideOptions) super.optionalFitCenter();
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions fitCenter() {
++ return (GlideOptions) super.fitCenter();
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions optionalCenterInside() {
++ return (GlideOptions) super.optionalCenterInside();
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions centerInside() {
++ return (GlideOptions) super.centerInside();
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions optionalCircleCrop() {
++ return (GlideOptions) super.optionalCircleCrop();
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions circleCrop() {
++ return (GlideOptions) super.circleCrop();
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions transform(@NonNull Transformation transformation) {
++ return (GlideOptions) super.transform(transformation);
++ }
++
++ @Override
++ @SafeVarargs
++ @SuppressWarnings("varargs")
++ @NonNull
++ @CheckResult
++ public final GlideOptions transform(@NonNull Transformation... transformations) {
++ return (GlideOptions) super.transform(transformations);
++ }
++
++ @Override
++ @SafeVarargs
++ @SuppressWarnings("varargs")
++ @Deprecated
++ @NonNull
++ @CheckResult
++ public final GlideOptions transforms(@NonNull Transformation... transformations) {
++ return (GlideOptions) super.transforms(transformations);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions optionalTransform(@NonNull Transformation transformation) {
++ return (GlideOptions) super.optionalTransform(transformation);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions optionalTransform(@NonNull Class clazz,
++ @NonNull Transformation transformation) {
++ return (GlideOptions) super.optionalTransform(clazz, transformation);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions transform(@NonNull Class clazz,
++ @NonNull Transformation transformation) {
++ return (GlideOptions) super.transform(clazz, transformation);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions dontTransform() {
++ return (GlideOptions) super.dontTransform();
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions dontAnimate() {
++ return (GlideOptions) super.dontAnimate();
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideOptions apply(@NonNull BaseRequestOptions> options) {
++ return (GlideOptions) super.apply(options);
++ }
++
++ @Override
++ @NonNull
++ public GlideOptions lock() {
++ return (GlideOptions) super.lock();
++ }
++
++ @Override
++ @NonNull
++ public GlideOptions autoClone() {
++ return (GlideOptions) super.autoClone();
++ }
++}
+diff --git a/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/dylanvann/fastimage/GlideRequest.java b/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/dylanvann/fastimage/GlideRequest.java
+new file mode 100644
+index 0000000..5b45773
+--- /dev/null
++++ b/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/dylanvann/fastimage/GlideRequest.java
+@@ -0,0 +1,608 @@
++package com.dylanvann.fastimage;
++
++import android.content.Context;
++import android.content.res.Resources;
++import android.graphics.Bitmap;
++import android.graphics.drawable.Drawable;
++import android.net.Uri;
++import androidx.annotation.CheckResult;
++import androidx.annotation.DrawableRes;
++import androidx.annotation.FloatRange;
++import androidx.annotation.IntRange;
++import androidx.annotation.NonNull;
++import androidx.annotation.Nullable;
++import androidx.annotation.RawRes;
++import com.bumptech.glide.Glide;
++import com.bumptech.glide.Priority;
++import com.bumptech.glide.RequestBuilder;
++import com.bumptech.glide.RequestManager;
++import com.bumptech.glide.TransitionOptions;
++import com.bumptech.glide.load.DecodeFormat;
++import com.bumptech.glide.load.Key;
++import com.bumptech.glide.load.Option;
++import com.bumptech.glide.load.Transformation;
++import com.bumptech.glide.load.engine.DiskCacheStrategy;
++import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy;
++import com.bumptech.glide.request.BaseRequestOptions;
++import com.bumptech.glide.request.RequestListener;
++import java.io.File;
++import java.net.URL;
++import java.util.List;
++
++/**
++ * Contains all public methods from {@link RequestBuilder}, all options from
++ * {@link com.bumptech.glide.request.RequestOptions} and all generated options from
++ * {@link com.bumptech.glide.annotation.GlideOption} in annotated methods in
++ * {@link com.bumptech.glide.annotation.GlideExtension} annotated classes.
++ *
++ * Generated code, do not modify.
++ *
++ * @see RequestBuilder
++ * @see com.bumptech.glide.request.RequestOptions
++ */
++@SuppressWarnings({
++ "unused",
++ "deprecation"
++})
++public class GlideRequest extends RequestBuilder implements Cloneable {
++ GlideRequest(@NonNull Class transcodeClass, @NonNull RequestBuilder> other) {
++ super(transcodeClass, other);
++ }
++
++ GlideRequest(@NonNull Glide glide, @NonNull RequestManager requestManager,
++ @NonNull Class transcodeClass, @NonNull Context context) {
++ super(glide, requestManager ,transcodeClass, context);
++ }
++
++ @Override
++ @CheckResult
++ @NonNull
++ protected GlideRequest getDownloadOnlyRequest() {
++ return new GlideRequest<>(File.class, this).apply(DOWNLOAD_ONLY_OPTIONS);
++ }
++
++ /**
++ * @see GlideOptions#sizeMultiplier(float)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest sizeMultiplier(@FloatRange(from = 0.0, to = 1.0) float value) {
++ return (GlideRequest) super.sizeMultiplier(value);
++ }
++
++ /**
++ * @see GlideOptions#useUnlimitedSourceGeneratorsPool(boolean)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest useUnlimitedSourceGeneratorsPool(boolean flag) {
++ return (GlideRequest) super.useUnlimitedSourceGeneratorsPool(flag);
++ }
++
++ /**
++ * @see GlideOptions#useAnimationPool(boolean)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest useAnimationPool(boolean flag) {
++ return (GlideRequest) super.useAnimationPool(flag);
++ }
++
++ /**
++ * @see GlideOptions#onlyRetrieveFromCache(boolean)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest onlyRetrieveFromCache(boolean flag) {
++ return (GlideRequest) super.onlyRetrieveFromCache(flag);
++ }
++
++ /**
++ * @see GlideOptions#diskCacheStrategy(DiskCacheStrategy)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest diskCacheStrategy(@NonNull DiskCacheStrategy strategy) {
++ return (GlideRequest) super.diskCacheStrategy(strategy);
++ }
++
++ /**
++ * @see GlideOptions#priority(Priority)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest priority(@NonNull Priority priority) {
++ return (GlideRequest) super.priority(priority);
++ }
++
++ /**
++ * @see GlideOptions#placeholder(Drawable)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest placeholder(@Nullable Drawable drawable) {
++ return (GlideRequest) super.placeholder(drawable);
++ }
++
++ /**
++ * @see GlideOptions#placeholder(int)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest placeholder(@DrawableRes int id) {
++ return (GlideRequest) super.placeholder(id);
++ }
++
++ /**
++ * @see GlideOptions#fallback(Drawable)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest fallback(@Nullable Drawable drawable) {
++ return (GlideRequest) super.fallback(drawable);
++ }
++
++ /**
++ * @see GlideOptions#fallback(int)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest fallback(@DrawableRes int id) {
++ return (GlideRequest) super.fallback(id);
++ }
++
++ /**
++ * @see GlideOptions#error(Drawable)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest error(@Nullable Drawable drawable) {
++ return (GlideRequest) super.error(drawable);
++ }
++
++ /**
++ * @see GlideOptions#error(int)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest error(@DrawableRes int id) {
++ return (GlideRequest) super.error(id);
++ }
++
++ /**
++ * @see GlideOptions#theme(Resources.Theme)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest theme(@Nullable Resources.Theme theme) {
++ return (GlideRequest) super.theme(theme);
++ }
++
++ /**
++ * @see GlideOptions#skipMemoryCache(boolean)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest skipMemoryCache(boolean skip) {
++ return (GlideRequest) super.skipMemoryCache(skip);
++ }
++
++ /**
++ * @see GlideOptions#override(int, int)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest override(int width, int height) {
++ return (GlideRequest) super.override(width, height);
++ }
++
++ /**
++ * @see GlideOptions#override(int)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest override(int size) {
++ return (GlideRequest) super.override(size);
++ }
++
++ /**
++ * @see GlideOptions#signature(Key)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest signature(@NonNull Key key) {
++ return (GlideRequest) super.signature(key);
++ }
++
++ /**
++ * @see GlideOptions#set(Option, Y)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest set(@NonNull Option option, @NonNull Y y) {
++ return (GlideRequest) super.set(option, y);
++ }
++
++ /**
++ * @see GlideOptions#decode(Class>)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest decode(@NonNull Class> clazz) {
++ return (GlideRequest) super.decode(clazz);
++ }
++
++ /**
++ * @see GlideOptions#encodeFormat(Bitmap.CompressFormat)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest encodeFormat(@NonNull Bitmap.CompressFormat format) {
++ return (GlideRequest) super.encodeFormat(format);
++ }
++
++ /**
++ * @see GlideOptions#encodeQuality(int)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest encodeQuality(@IntRange(from = 0, to = 100) int value) {
++ return (GlideRequest) super.encodeQuality(value);
++ }
++
++ /**
++ * @see GlideOptions#frame(long)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest frame(@IntRange(from = 0) long value) {
++ return (GlideRequest) super.frame(value);
++ }
++
++ /**
++ * @see GlideOptions#format(DecodeFormat)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest format(@NonNull DecodeFormat format) {
++ return (GlideRequest) super.format(format);
++ }
++
++ /**
++ * @see GlideOptions#disallowHardwareConfig()
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest disallowHardwareConfig() {
++ return (GlideRequest) super.disallowHardwareConfig();
++ }
++
++ /**
++ * @see GlideOptions#downsample(DownsampleStrategy)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest downsample(@NonNull DownsampleStrategy strategy) {
++ return (GlideRequest) super.downsample(strategy);
++ }
++
++ /**
++ * @see GlideOptions#timeout(int)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest timeout(@IntRange(from = 0) int value) {
++ return (GlideRequest) super.timeout(value);
++ }
++
++ /**
++ * @see GlideOptions#optionalCenterCrop()
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest optionalCenterCrop() {
++ return (GlideRequest) super.optionalCenterCrop();
++ }
++
++ /**
++ * @see GlideOptions#centerCrop()
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest centerCrop() {
++ return (GlideRequest) super.centerCrop();
++ }
++
++ /**
++ * @see GlideOptions#optionalFitCenter()
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest optionalFitCenter() {
++ return (GlideRequest) super.optionalFitCenter();
++ }
++
++ /**
++ * @see GlideOptions#fitCenter()
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest fitCenter() {
++ return (GlideRequest) super.fitCenter();
++ }
++
++ /**
++ * @see GlideOptions#optionalCenterInside()
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest optionalCenterInside() {
++ return (GlideRequest) super.optionalCenterInside();
++ }
++
++ /**
++ * @see GlideOptions#centerInside()
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest centerInside() {
++ return (GlideRequest) super.centerInside();
++ }
++
++ /**
++ * @see GlideOptions#optionalCircleCrop()
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest optionalCircleCrop() {
++ return (GlideRequest) super.optionalCircleCrop();
++ }
++
++ /**
++ * @see GlideOptions#circleCrop()
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest circleCrop() {
++ return (GlideRequest) super.circleCrop();
++ }
++
++ /**
++ * @see GlideOptions#transform(Transformation)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest transform(@NonNull Transformation transformation) {
++ return (GlideRequest) super.transform(transformation);
++ }
++
++ /**
++ * @see GlideOptions#transform(Transformation[])
++ */
++ @NonNull
++ @CheckResult
++ @SuppressWarnings({
++ "unchecked",
++ "varargs"
++ })
++ public GlideRequest transform(@NonNull Transformation... transformations) {
++ return (GlideRequest) super.transform(transformations);
++ }
++
++ /**
++ * @see GlideOptions#transforms(Transformation[])
++ */
++ @Deprecated
++ @NonNull
++ @CheckResult
++ @SuppressWarnings({
++ "unchecked",
++ "varargs"
++ })
++ public GlideRequest transforms(@NonNull Transformation... transformations) {
++ return (GlideRequest) super.transforms(transformations);
++ }
++
++ /**
++ * @see GlideOptions#optionalTransform(Transformation)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest optionalTransform(@NonNull Transformation transformation) {
++ return (GlideRequest) super.optionalTransform(transformation);
++ }
++
++ /**
++ * @see GlideOptions#optionalTransform(Class, Transformation)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest optionalTransform(@NonNull Class clazz,
++ @NonNull Transformation transformation) {
++ return (GlideRequest) super.optionalTransform(clazz, transformation);
++ }
++
++ /**
++ * @see GlideOptions#transform(Class, Transformation)
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest transform(@NonNull Class clazz,
++ @NonNull Transformation transformation) {
++ return (GlideRequest) super.transform(clazz, transformation);
++ }
++
++ /**
++ * @see GlideOptions#dontTransform()
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest dontTransform() {
++ return (GlideRequest) super.dontTransform();
++ }
++
++ /**
++ * @see GlideOptions#dontAnimate()
++ */
++ @NonNull
++ @CheckResult
++ public GlideRequest dontAnimate() {
++ return (GlideRequest) super.dontAnimate();
++ }
++
++ /**
++ * @see GlideOptions#lock()
++ */
++ @NonNull
++ public GlideRequest lock() {
++ return (GlideRequest) super.lock();
++ }
++
++ /**
++ * @see GlideOptions#autoClone()
++ */
++ @NonNull
++ public GlideRequest autoClone() {
++ return (GlideRequest) super.autoClone();
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest apply(@NonNull BaseRequestOptions> options) {
++ return (GlideRequest) super.apply(options);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest transition(@NonNull TransitionOptions, ? super TranscodeType> options) {
++ return (GlideRequest) super.transition(options);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest listener(@Nullable RequestListener listener) {
++ return (GlideRequest) super.listener(listener);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest addListener(@Nullable RequestListener listener) {
++ return (GlideRequest) super.addListener(listener);
++ }
++
++ @Override
++ @NonNull
++ public GlideRequest error(@Nullable RequestBuilder builder) {
++ return (GlideRequest) super.error(builder);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest error(Object o) {
++ return (GlideRequest) super.error(o);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest thumbnail(@Nullable RequestBuilder builder) {
++ return (GlideRequest) super.thumbnail(builder);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ @SafeVarargs
++ @SuppressWarnings("varargs")
++ public final GlideRequest thumbnail(@Nullable RequestBuilder... builders) {
++ return (GlideRequest) super.thumbnail(builders);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest thumbnail(@Nullable List> list) {
++ return (GlideRequest) super.thumbnail(list);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest thumbnail(float sizeMultiplier) {
++ return (GlideRequest) super.thumbnail(sizeMultiplier);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest load(@Nullable Object o) {
++ return (GlideRequest) super.load(o);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest load(@Nullable Bitmap bitmap) {
++ return (GlideRequest) super.load(bitmap);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest load(@Nullable Drawable drawable) {
++ return (GlideRequest) super.load(drawable);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest load(@Nullable String string) {
++ return (GlideRequest) super.load(string);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest load(@Nullable Uri uri) {
++ return (GlideRequest) super.load(uri);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest load(@Nullable File file) {
++ return (GlideRequest) super.load(file);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest load(@RawRes @DrawableRes @Nullable Integer id) {
++ return (GlideRequest) super.load(id);
++ }
++
++ @Override
++ @Deprecated
++ @CheckResult
++ public GlideRequest load(@Nullable URL url) {
++ return (GlideRequest) super.load(url);
++ }
++
++ @Override
++ @NonNull
++ @CheckResult
++ public GlideRequest load(@Nullable byte[] bytes) {
++ return (GlideRequest) super.load(bytes);
++ }
++
++ @Override
++ @CheckResult
++ public GlideRequest clone() {
++ return (GlideRequest) super.clone();
++ }
++}
+diff --git a/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/dylanvann/fastimage/GlideRequests.java b/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/dylanvann/fastimage/GlideRequests.java
+new file mode 100644
+index 0000000..afc3f30
+--- /dev/null
++++ b/node_modules/react-native-fast-image/android/build/generated/ap_generated_sources/debug/out/com/dylanvann/fastimage/GlideRequests.java
+@@ -0,0 +1,173 @@
++package com.dylanvann.fastimage;
++
++import android.content.Context;
++import android.graphics.Bitmap;
++import android.graphics.drawable.Drawable;
++import android.net.Uri;
++import androidx.annotation.CheckResult;
++import androidx.annotation.DrawableRes;
++import androidx.annotation.NonNull;
++import androidx.annotation.Nullable;
++import androidx.annotation.RawRes;
++import com.bumptech.glide.Glide;
++import com.bumptech.glide.RequestManager;
++import com.bumptech.glide.load.resource.gif.GifDrawable;
++import com.bumptech.glide.manager.Lifecycle;
++import com.bumptech.glide.manager.RequestManagerTreeNode;
++import com.bumptech.glide.request.RequestListener;
++import com.bumptech.glide.request.RequestOptions;
++import java.io.File;
++import java.net.URL;
++
++/**
++ * Includes all additions from methods in {@link com.bumptech.glide.annotation.GlideExtension}s
++ * annotated with {@link com.bumptech.glide.annotation.GlideType}
++ *
++ * Generated code, do not modify
++ */
++@SuppressWarnings("deprecation")
++public class GlideRequests extends RequestManager {
++ public GlideRequests(@NonNull Glide glide, @NonNull Lifecycle lifecycle,
++ @NonNull RequestManagerTreeNode treeNode, @NonNull Context context) {
++ super(glide, lifecycle, treeNode, context);
++ }
++
++ @Override
++ @CheckResult
++ @NonNull
++ public GlideRequest as(@NonNull Class resourceClass) {
++ return new GlideRequest<>(glide, this, resourceClass, context);
++ }
++
++ @Override
++ @NonNull
++ public synchronized GlideRequests applyDefaultRequestOptions(@NonNull RequestOptions options) {
++ return (GlideRequests) super.applyDefaultRequestOptions(options);
++ }
++
++ @Override
++ @NonNull
++ public synchronized GlideRequests setDefaultRequestOptions(@NonNull RequestOptions options) {
++ return (GlideRequests) super.setDefaultRequestOptions(options);
++ }
++
++ @Override
++ @NonNull
++ public GlideRequests addDefaultRequestListener(RequestListener