expo-updates 58.0.10 → 58.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -5
- package/android/build.gradle +2 -2
- package/android/src/main/java/expo/modules/updates/UpdatesConfiguration.kt +29 -2
- package/android/src/main/java/expo/modules/updates/UpdatesPackage.kt +10 -2
- package/android/src/main/java/expo/modules/updates/codesigning/CodeSigningConfiguration.kt +5 -1
- package/android/src/main/java/expo/modules/updates/db/BuildData.kt +5 -1
- package/android/src/main/java/expo/modules/updates/db/Converters.kt +10 -2
- package/android/src/main/java/expo/modules/updates/db/dao/UpdateDao.kt +5 -1
- package/android/src/main/java/expo/modules/updates/launcher/DatabaseLauncher.kt +5 -1
- package/android/src/main/java/expo/modules/updates/loader/EmbeddedLoader.kt +5 -1
- package/android/src/main/java/expo/modules/updates/loader/FileDownloader.kt +5 -1
- package/android/src/main/java/expo/modules/updates/loader/Loader.kt +5 -1
- package/android/src/main/java/expo/modules/updates/manifest/ManifestMetadata.kt +5 -1
- package/android/src/main/java/expo/modules/updates/selectionpolicy/ReaperSelectionPolicyFilterAware.kt +37 -21
- package/android/src/main/java/expo/modules/updates/selectionpolicy/SelectionPolicyFactory.kt +1 -1
- package/ios/EXUpdates/AppController.swift +5 -0
- package/ios/EXUpdates/DevLauncherAppController.swift +5 -0
- package/ios/EXUpdates/EnabledAppController.swift +2 -1
- package/ios/EXUpdates/SelectionPolicy/ReaperSelectionPolicyFilterAware.swift +50 -33
- package/ios/EXUpdates/SelectionPolicy/SelectionPolicyFactory.swift +5 -1
- package/ios/EXUpdates/UpdatesConfig.swift +45 -1
- package/package.json +9 -10
- package/utils/build/createManifestForBuildAsync.js +6 -4
- package/utils/build/createManifestForBuildAsync.js.map +1 -1
- package/utils/src/createManifestForBuildAsync.ts +6 -4
- package/android/.cxx/Debug/38204d1n/arm64-v8a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/.cmake/api/v1/reply/cache-v2-f7b3549f78edcf21e703.json +0 -1419
- package/android/.cxx/Debug/38204d1n/arm64-v8a/.cmake/api/v1/reply/cmakeFiles-v1-e040f6d6310b1c8d7d75.json +0 -194
- package/android/.cxx/Debug/38204d1n/arm64-v8a/.cmake/api/v1/reply/codemodel-v2-4f817189b2f750253452.json +0 -69
- package/android/.cxx/Debug/38204d1n/arm64-v8a/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json +0 -14
- package/android/.cxx/Debug/38204d1n/arm64-v8a/.cmake/api/v1/reply/index-2026-09-25T10-21-58-0473.json +0 -92
- package/android/.cxx/Debug/38204d1n/arm64-v8a/.cmake/api/v1/reply/target-bzip2-Debug-61088dd3015f993d751a.json +0 -143
- package/android/.cxx/Debug/38204d1n/arm64-v8a/.cmake/api/v1/reply/target-expo-updates-Debug-835fe649d0020f4a216a.json +0 -235
- package/android/.cxx/Debug/38204d1n/arm64-v8a/.ninja_deps +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/.ninja_log +0 -17
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeCache.txt +0 -422
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeCCompiler.cmake +0 -72
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeCXXCompiler.cmake +0 -83
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.bin +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake +0 -15
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.c +0 -803
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.o +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/CMakeOutput.log +0 -264
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/TargetDirectories.txt +0 -4
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/bzip2.dir/src/main/cpp/third-party/bzip2/blocksort.c.o +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/bzip2.dir/src/main/cpp/third-party/bzip2/bzlib.c.o +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/bzip2.dir/src/main/cpp/third-party/bzip2/compress.c.o +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/bzip2.dir/src/main/cpp/third-party/bzip2/crctable.c.o +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/bzip2.dir/src/main/cpp/third-party/bzip2/decompress.c.o +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/bzip2.dir/src/main/cpp/third-party/bzip2/huffman.c.o +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/bzip2.dir/src/main/cpp/third-party/bzip2/randtable.c.o +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/cmake.check_cache +0 -1
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/expo-updates.dir/Users/alanhughes/Work/expo/packages/expo-updates/vendor/bspatch/bspatch.c.o +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/expo-updates.dir/src/main/cpp/BSPatchModule.cpp.o +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/expo-updates.dir/src/main/cpp/ExpoUpdatesMain.cpp.o +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/CMakeFiles/rules.ninja +0 -93
- package/android/.cxx/Debug/38204d1n/arm64-v8a/additional_project_files.txt +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/android_gradle_build.json +0 -50
- package/android/.cxx/Debug/38204d1n/arm64-v8a/android_gradle_build_mini.json +0 -37
- package/android/.cxx/Debug/38204d1n/arm64-v8a/build.ninja +0 -245
- package/android/.cxx/Debug/38204d1n/arm64-v8a/build_file_index.txt +0 -3
- package/android/.cxx/Debug/38204d1n/arm64-v8a/cmake_install.cmake +0 -54
- package/android/.cxx/Debug/38204d1n/arm64-v8a/compile_commands.json +0 -52
- package/android/.cxx/Debug/38204d1n/arm64-v8a/compile_commands.json.bin +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/configure_fingerprint.bin +0 -39
- package/android/.cxx/Debug/38204d1n/arm64-v8a/libbzip2.a +0 -0
- package/android/.cxx/Debug/38204d1n/arm64-v8a/metadata_generation_command.txt +0 -22
- package/android/.cxx/Debug/38204d1n/arm64-v8a/prefab_config.json +0 -9
- package/android/.cxx/Debug/38204d1n/arm64-v8a/symbol_folder_index.txt +0 -1
- package/android/.cxx/Debug/38204d1n/hash_key.txt +0 -29
- package/android/.cxx/Debug/38204d1n/prefab/arm64-v8a/prefab/lib/aarch64-linux-android/cmake/ReactAndroid/ReactAndroidConfig.cmake +0 -27
- package/android/.cxx/Debug/38204d1n/prefab/arm64-v8a/prefab/lib/aarch64-linux-android/cmake/ReactAndroid/ReactAndroidConfigVersion.cmake +0 -9
- package/android/.cxx/Debug/38204d1n/prefab/arm64-v8a/prefab/lib/aarch64-linux-android/cmake/fbjni/fbjniConfig.cmake +0 -9
- package/android/.cxx/Debug/38204d1n/prefab/arm64-v8a/prefab/lib/aarch64-linux-android/cmake/fbjni/fbjniConfigVersion.cmake +0 -9
- package/android/.cxx/Debug/38204d1n/prefab/arm64-v8a/prefab/lib/aarch64-linux-android/cmake/kolibri-android/kolibri-androidConfig.cmake +0 -9
- package/android/.cxx/Debug/38204d1n/prefab/arm64-v8a/prefab/lib/aarch64-linux-android/cmake/kolibri-android/kolibri-androidConfigVersion.cmake +0 -9
- package/android/.cxx/Debug/38204d1n/prefab/x86/prefab/lib/i686-linux-android/cmake/ReactAndroid/ReactAndroidConfig.cmake +0 -27
- package/android/.cxx/Debug/38204d1n/prefab/x86/prefab/lib/i686-linux-android/cmake/ReactAndroid/ReactAndroidConfigVersion.cmake +0 -9
- package/android/.cxx/Debug/38204d1n/prefab/x86/prefab/lib/i686-linux-android/cmake/fbjni/fbjniConfig.cmake +0 -9
- package/android/.cxx/Debug/38204d1n/prefab/x86/prefab/lib/i686-linux-android/cmake/fbjni/fbjniConfigVersion.cmake +0 -9
- package/android/.cxx/Debug/38204d1n/prefab/x86/prefab/lib/i686-linux-android/cmake/kolibri-android/kolibri-androidConfig.cmake +0 -9
- package/android/.cxx/Debug/38204d1n/prefab/x86/prefab/lib/i686-linux-android/cmake/kolibri-android/kolibri-androidConfigVersion.cmake +0 -9
- package/android/.cxx/Debug/38204d1n/x86/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
- package/android/.cxx/Debug/38204d1n/x86/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
- package/android/.cxx/Debug/38204d1n/x86/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
- package/android/.cxx/Debug/38204d1n/x86/.cmake/api/v1/reply/cache-v2-d7a10dd1f6d3df4d8ab3.json +0 -1419
- package/android/.cxx/Debug/38204d1n/x86/.cmake/api/v1/reply/cmakeFiles-v1-6dee4bf659a7f2e2f5f6.json +0 -194
- package/android/.cxx/Debug/38204d1n/x86/.cmake/api/v1/reply/codemodel-v2-ef8ae74f4588e27b4e41.json +0 -69
- package/android/.cxx/Debug/38204d1n/x86/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json +0 -14
- package/android/.cxx/Debug/38204d1n/x86/.cmake/api/v1/reply/index-2026-09-25T10-21-07-0901.json +0 -92
- package/android/.cxx/Debug/38204d1n/x86/.cmake/api/v1/reply/target-bzip2-Debug-61088dd3015f993d751a.json +0 -143
- package/android/.cxx/Debug/38204d1n/x86/.cmake/api/v1/reply/target-expo-updates-Debug-b94420e381eecc800d62.json +0 -235
- package/android/.cxx/Debug/38204d1n/x86/CMakeCache.txt +0 -422
- package/android/.cxx/Debug/38204d1n/x86/CMakeFiles/3.22.1-g37088a8/CMakeCCompiler.cmake +0 -72
- package/android/.cxx/Debug/38204d1n/x86/CMakeFiles/3.22.1-g37088a8/CMakeCXXCompiler.cmake +0 -83
- package/android/.cxx/Debug/38204d1n/x86/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.bin +0 -0
- package/android/.cxx/Debug/38204d1n/x86/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/android/.cxx/Debug/38204d1n/x86/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake +0 -15
- package/android/.cxx/Debug/38204d1n/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.c +0 -803
- package/android/.cxx/Debug/38204d1n/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.o +0 -0
- package/android/.cxx/Debug/38204d1n/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
- package/android/.cxx/Debug/38204d1n/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
- package/android/.cxx/Debug/38204d1n/x86/CMakeFiles/CMakeOutput.log +0 -256
- package/android/.cxx/Debug/38204d1n/x86/CMakeFiles/TargetDirectories.txt +0 -4
- package/android/.cxx/Debug/38204d1n/x86/CMakeFiles/cmake.check_cache +0 -1
- package/android/.cxx/Debug/38204d1n/x86/CMakeFiles/rules.ninja +0 -93
- package/android/.cxx/Debug/38204d1n/x86/additional_project_files.txt +0 -0
- package/android/.cxx/Debug/38204d1n/x86/android_gradle_build.json +0 -50
- package/android/.cxx/Debug/38204d1n/x86/android_gradle_build_mini.json +0 -37
- package/android/.cxx/Debug/38204d1n/x86/build.ninja +0 -245
- package/android/.cxx/Debug/38204d1n/x86/build_file_index.txt +0 -3
- package/android/.cxx/Debug/38204d1n/x86/cmake_install.cmake +0 -54
- package/android/.cxx/Debug/38204d1n/x86/compile_commands.json +0 -52
- package/android/.cxx/Debug/38204d1n/x86/compile_commands.json.bin +0 -0
- package/android/.cxx/Debug/38204d1n/x86/configure_fingerprint.bin +0 -39
- package/android/.cxx/Debug/38204d1n/x86/metadata_generation_command.txt +0 -22
- package/android/.cxx/Debug/38204d1n/x86/prefab_config.json +0 -9
- package/android/.cxx/Debug/38204d1n/x86/symbol_folder_index.txt +0 -1
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/.cmake/api/v1/reply/cache-v2-0a5b76266a87fc719ad6.json +0 -1451
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/.cmake/api/v1/reply/cmakeFiles-v1-16b991e9c77739c110dc.json +0 -809
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/.cmake/api/v1/reply/codemodel-v2-ce3b144c9fe0157385a4.json +0 -69
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/.cmake/api/v1/reply/directory-.-RelWithDebInfo-f5ebdc15457944623624.json +0 -14
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/.cmake/api/v1/reply/index-2026-09-25T11-12-07-0643.json +0 -92
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/.cmake/api/v1/reply/target-bzip2-RelWithDebInfo-c2d8c9f552513540c358.json +0 -143
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/.cmake/api/v1/reply/target-expo-updates-RelWithDebInfo-247f9760dfa0d48c6494.json +0 -235
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/.ninja_deps +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/.ninja_log +0 -13
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeCache.txt +0 -422
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeCCompiler.cmake +0 -72
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeCXXCompiler.cmake +0 -83
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.bin +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake +0 -15
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.c +0 -803
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.o +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/CMakeOutput.log +0 -264
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/TargetDirectories.txt +0 -4
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/bzip2.dir/src/main/cpp/third-party/bzip2/blocksort.c.o +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/bzip2.dir/src/main/cpp/third-party/bzip2/bzlib.c.o +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/bzip2.dir/src/main/cpp/third-party/bzip2/compress.c.o +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/bzip2.dir/src/main/cpp/third-party/bzip2/crctable.c.o +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/bzip2.dir/src/main/cpp/third-party/bzip2/decompress.c.o +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/bzip2.dir/src/main/cpp/third-party/bzip2/huffman.c.o +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/bzip2.dir/src/main/cpp/third-party/bzip2/randtable.c.o +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/cmake.check_cache +0 -1
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/expo-updates.dir/Users/alanhughes/Work/expo/packages/expo-updates/vendor/bspatch/bspatch.c.o +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/expo-updates.dir/src/main/cpp/BSPatchModule.cpp.o +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/expo-updates.dir/src/main/cpp/ExpoUpdatesMain.cpp.o +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/CMakeFiles/rules.ninja +0 -93
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/additional_project_files.txt +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/android_gradle_build.json +0 -50
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/android_gradle_build_mini.json +0 -37
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/build.ninja +0 -267
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/build_file_index.txt +0 -3
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/cmake_install.cmake +0 -54
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/compile_commands.json +0 -52
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/compile_commands.json.bin +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/configure_fingerprint.bin +0 -35
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/libbzip2.a +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/metadata_generation_command.txt +0 -22
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/prefab_config.json +0 -9
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/arm64-v8a/symbol_folder_index.txt +0 -1
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/hash_key.txt +0 -29
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/prefab/arm64-v8a/prefab/lib/aarch64-linux-android/cmake/ReactAndroid/ReactAndroidConfig.cmake +0 -27
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/prefab/arm64-v8a/prefab/lib/aarch64-linux-android/cmake/ReactAndroid/ReactAndroidConfigVersion.cmake +0 -9
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/prefab/arm64-v8a/prefab/lib/aarch64-linux-android/cmake/fbjni/fbjniConfig.cmake +0 -9
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/prefab/arm64-v8a/prefab/lib/aarch64-linux-android/cmake/fbjni/fbjniConfigVersion.cmake +0 -9
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/prefab/arm64-v8a/prefab/lib/aarch64-linux-android/cmake/kolibri-android/kolibri-androidConfig.cmake +0 -9
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/prefab/arm64-v8a/prefab/lib/aarch64-linux-android/cmake/kolibri-android/kolibri-androidConfigVersion.cmake +0 -9
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/prefab/x86/prefab/lib/i686-linux-android/cmake/ReactAndroid/ReactAndroidConfig.cmake +0 -24
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/prefab/x86/prefab/lib/i686-linux-android/cmake/ReactAndroid/ReactAndroidConfigVersion.cmake +0 -9
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/prefab/x86/prefab/lib/i686-linux-android/cmake/fbjni/fbjniConfig.cmake +0 -9
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/prefab/x86/prefab/lib/i686-linux-android/cmake/fbjni/fbjniConfigVersion.cmake +0 -9
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/prefab/x86/prefab/lib/i686-linux-android/cmake/kolibri-android/kolibri-androidConfig.cmake +0 -9
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/prefab/x86/prefab/lib/i686-linux-android/cmake/kolibri-android/kolibri-androidConfigVersion.cmake +0 -9
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/.cmake/api/v1/reply/cache-v2-1ed2a91cbab21e042431.json +0 -1451
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/.cmake/api/v1/reply/cmakeFiles-v1-82110b9d17ea8fb1b09d.json +0 -809
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/.cmake/api/v1/reply/codemodel-v2-e2fc2ad309e6396487bf.json +0 -69
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/.cmake/api/v1/reply/directory-.-RelWithDebInfo-f5ebdc15457944623624.json +0 -14
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/.cmake/api/v1/reply/index-2026-09-25T11-11-00-0480.json +0 -92
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/.cmake/api/v1/reply/target-bzip2-RelWithDebInfo-c2d8c9f552513540c358.json +0 -143
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/.cmake/api/v1/reply/target-expo-updates-RelWithDebInfo-3c50df3fcc0791719610.json +0 -235
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/CMakeCache.txt +0 -422
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/CMakeFiles/3.22.1-g37088a8/CMakeCCompiler.cmake +0 -72
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/CMakeFiles/3.22.1-g37088a8/CMakeCXXCompiler.cmake +0 -83
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_C.bin +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/CMakeFiles/3.22.1-g37088a8/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/CMakeFiles/3.22.1-g37088a8/CMakeSystem.cmake +0 -15
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.c +0 -803
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdC/CMakeCCompilerId.o +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/CMakeFiles/3.22.1-g37088a8/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/CMakeFiles/CMakeOutput.log +0 -256
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/CMakeFiles/TargetDirectories.txt +0 -4
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/CMakeFiles/cmake.check_cache +0 -1
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/CMakeFiles/rules.ninja +0 -93
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/additional_project_files.txt +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/android_gradle_build.json +0 -50
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/android_gradle_build_mini.json +0 -37
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/build.ninja +0 -267
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/build_file_index.txt +0 -3
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/cmake_install.cmake +0 -54
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/compile_commands.json +0 -52
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/compile_commands.json.bin +0 -0
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/configure_fingerprint.bin +0 -35
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/metadata_generation_command.txt +0 -22
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/prefab_config.json +0 -9
- package/android/.cxx/RelWithDebInfo/p1f4o3dq/x86/symbol_folder_index.txt +0 -1
- package/android/.cxx/tools/debug/arm64-v8a/compile_commands.json +0 -52
- package/android/.cxx/tools/debug/x86/compile_commands.json +0 -52
- package/android/.cxx/tools/release/arm64-v8a/compile_commands.json +0 -52
- package/android/.cxx/tools/release/x86/compile_commands.json +0 -52
- package/expo-updates-gradle-plugin/.gradle/8.14.3/executionHistory/executionHistory.bin +0 -0
- package/expo-updates-gradle-plugin/.gradle/8.14.3/executionHistory/executionHistory.lock +0 -0
- package/expo-updates-gradle-plugin/.gradle/9.0.0/executionHistory/executionHistory.bin +0 -0
- package/expo-updates-gradle-plugin/.gradle/9.0.0/executionHistory/executionHistory.lock +0 -0
- package/expo-updates-gradle-plugin/.gradle/9.3.0/checksums/checksums.lock +0 -0
- package/expo-updates-gradle-plugin/.gradle/9.3.0/executionHistory/executionHistory.lock +0 -0
- package/expo-updates-gradle-plugin/.gradle/9.3.0/fileChanges/last-build.bin +0 -0
- package/expo-updates-gradle-plugin/.gradle/9.3.0/fileHashes/fileHashes.bin +0 -0
- package/expo-updates-gradle-plugin/.gradle/9.3.0/fileHashes/fileHashes.lock +0 -0
- package/expo-updates-gradle-plugin/.gradle/9.3.0/gc.properties +0 -0
- package/expo-updates-gradle-plugin/.gradle/9.3.1/executionHistory/executionHistory.bin +0 -0
- package/expo-updates-gradle-plugin/.gradle/9.3.1/executionHistory/executionHistory.lock +0 -0
- package/expo-updates-gradle-plugin/.gradle/9.4.1/executionHistory/executionHistory.bin +0 -0
- package/expo-updates-gradle-plugin/.gradle/9.4.1/executionHistory/executionHistory.lock +0 -0
- package/expo-updates-gradle-plugin/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/expo-updates-gradle-plugin/.gradle/buildOutputCleanup/cache.properties +0 -2
- package/expo-updates-gradle-plugin/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/expo-updates-gradle-plugin/.gradle/file-system.probe +0 -0
- package/expo-updates-gradle-plugin/.gradle/vcs-1/gc.properties +0 -0
- package/expo-updates-gradle-plugin/build/classes/kotlin/main/META-INF/expo-updates-gradle-plugin.kotlin_module +0 -0
- package/expo-updates-gradle-plugin/build/classes/kotlin/main/expo/modules/updates/ExpoUpdatesPlugin$Companion.class +0 -0
- package/expo-updates-gradle-plugin/build/classes/kotlin/main/expo/modules/updates/ExpoUpdatesPlugin$CreateUpdatesResourcesTask$exec$1.class +0 -0
- package/expo-updates-gradle-plugin/build/classes/kotlin/main/expo/modules/updates/ExpoUpdatesPlugin$CreateUpdatesResourcesTask$getExpoUpdatesPackageDir$1.class +0 -0
- package/expo-updates-gradle-plugin/build/classes/kotlin/main/expo/modules/updates/ExpoUpdatesPlugin$CreateUpdatesResourcesTask.class +0 -0
- package/expo-updates-gradle-plugin/build/classes/kotlin/main/expo/modules/updates/ExpoUpdatesPlugin$apply$1$1.class +0 -0
- package/expo-updates-gradle-plugin/build/classes/kotlin/main/expo/modules/updates/ExpoUpdatesPlugin$apply$1$createUpdatesResourcesTask$1.class +0 -0
- package/expo-updates-gradle-plugin/build/classes/kotlin/main/expo/modules/updates/ExpoUpdatesPlugin$apply$1.class +0 -0
- package/expo-updates-gradle-plugin/build/classes/kotlin/main/expo/modules/updates/ExpoUpdatesPlugin.class +0 -0
- package/expo-updates-gradle-plugin/build/classes/kotlin/main/expo/modules/updates/ExpoUpdatesPluginKt.class +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab +0 -2
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/cacheable/last-build.bin +0 -0
- package/expo-updates-gradle-plugin/build/kotlin/compileKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
- package/expo-updates-gradle-plugin/build/libs/expo-updates-gradle-plugin.jar +0 -0
- package/expo-updates-gradle-plugin/build/pluginDescriptors/expo-updates-gradle-plugin.properties +0 -1
- package/expo-updates-gradle-plugin/build/resources/main/META-INF/gradle-plugins/expo-updates-gradle-plugin.properties +0 -1
- package/expo-updates-gradle-plugin/build/tmp/jar/MANIFEST.MF +0 -2
- package/ios/EXUpdates/BSPatch/bspatch.c +0 -420
package/CHANGELOG.md
CHANGED
|
@@ -1,14 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 58.0.12
|
|
4
4
|
|
|
5
|
-
###
|
|
5
|
+
### Patch Changes
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
- Updated dependencies. ([#50734](https://github.com/expo/expo/pull/50734))
|
|
8
|
+
- expo-eas-client@58.0.2
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
## 58.0.11
|
|
10
11
|
|
|
11
|
-
###
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- Force-bump all packages, due to migration to changesets. ([#50762](https://github.com/expo/expo/pull/50762) by [@kitten](https://github.com/kitten))
|
|
15
|
+
- [iOS] Add configurable update cache retention with `EXUpdatesMaxUpdatesToKeep`. ([#50459](https://github.com/expo/expo/pull/50459) by [@expo-tuft](https://github.com/apps/expo-tuft))
|
|
16
|
+
- [Android] Add configurable update cache retention with `expo.modules.updates.EXPO_UPDATES_MAX_UPDATES_TO_KEEP`. ([#50460](https://github.com/expo/expo/pull/50460) by [@expo-tuft](https://github.com/apps/expo-tuft))
|
|
17
|
+
- Cover configurable update cache retention in E2E tests. ([#50463](https://github.com/expo/expo/pull/50463) by [@expo-tuft](https://github.com/apps/expo-tuft))
|
|
18
|
+
- Fix the embedded manifest giving every duplicate asset scale the same `packagerHash`, which made updates download assets already in the binary. ([#50757](https://github.com/expo/expo/pull/50757) by [@alanjhughes](https://github.com/alanjhughes))
|
|
19
|
+
- Updated dependencies. ([#50762](https://github.com/expo/expo/pull/50762))
|
|
20
|
+
- @expo/plist@0.10.1
|
|
21
|
+
- expo-eas-client@58.0.1
|
|
22
|
+
- expo-manifests@58.0.1
|
|
23
|
+
- expo-structured-headers@58.0.1
|
|
24
|
+
- expo-updates-interface@58.0.1
|
|
12
25
|
|
|
13
26
|
## 58.0.10 — 2026-09-28
|
|
14
27
|
|
package/android/build.gradle
CHANGED
|
@@ -42,7 +42,7 @@ expoModule {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
group = 'host.exp.exponent'
|
|
45
|
-
version = '58.0.
|
|
45
|
+
version = '58.0.12'
|
|
46
46
|
|
|
47
47
|
// Utility method to derive boolean values from the environment or from Java properties,
|
|
48
48
|
// and return them as strings to be used in BuildConfig fields
|
|
@@ -103,7 +103,7 @@ android {
|
|
|
103
103
|
namespace "expo.modules.updates"
|
|
104
104
|
defaultConfig {
|
|
105
105
|
versionCode 31
|
|
106
|
-
versionName '58.0.
|
|
106
|
+
versionName '58.0.12'
|
|
107
107
|
consumerProguardFiles("proguard-rules.pro")
|
|
108
108
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
109
109
|
|
|
@@ -43,10 +43,19 @@ data class UpdatesConfiguration(
|
|
|
43
43
|
val enableExpoUpdatesProtocolV0CompatibilityMode: Boolean, // used only in Expo Go to prevent loading rollbacks and other directives, which don't make much sense in the context of Expo Go
|
|
44
44
|
val enableBsdiffPatchSupport: Boolean,
|
|
45
45
|
val disableAntiBrickingMeasures: Boolean,
|
|
46
|
+
val maxUpdatesToKeep: Int = UPDATES_CONFIGURATION_MAX_UPDATES_TO_KEEP_DEFAULT_VALUE,
|
|
46
47
|
val hasUpdatesOverride: Boolean,
|
|
47
48
|
|
|
48
49
|
private val cachedOverrideMap: Map<String, Any>?
|
|
49
50
|
) {
|
|
51
|
+
init {
|
|
52
|
+
if (maxUpdatesToKeep < UPDATES_CONFIGURATION_MAX_UPDATES_TO_KEEP_MIN_VALUE) {
|
|
53
|
+
throw AssertionError(
|
|
54
|
+
"UpdatesConfiguration failed to initialize: maxUpdatesToKeep must be >= $UPDATES_CONFIGURATION_MAX_UPDATES_TO_KEEP_MIN_VALUE"
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
50
59
|
enum class CheckAutomaticallyConfiguration {
|
|
51
60
|
NEVER {
|
|
52
61
|
override fun toJSString() = "NEVER"
|
|
@@ -128,6 +137,7 @@ data class UpdatesConfiguration(
|
|
|
128
137
|
?: context?.getMetadataValue("expo.modules.updates.ENABLE_BSDIFF_PATCH_SUPPORT")
|
|
129
138
|
?: true,
|
|
130
139
|
disableAntiBrickingMeasures = getDisableAntiBrickingMeasures(context, overrideMap),
|
|
140
|
+
maxUpdatesToKeep = getMaxUpdatesToKeep(context, overrideMap),
|
|
131
141
|
hasUpdatesOverride = configOverride != null
|
|
132
142
|
)
|
|
133
143
|
|
|
@@ -159,6 +169,7 @@ data class UpdatesConfiguration(
|
|
|
159
169
|
const val UPDATES_CONFIGURATION_ENABLE_EXPO_UPDATES_PROTOCOL_V0_COMPATIBILITY_MODE = "enableExpoUpdatesProtocolCompatibilityMode"
|
|
160
170
|
const val UPDATES_CONFIGURATION_DISABLE_ANTI_BRICKING_MEASURES = "disableAntiBrickingMeasures"
|
|
161
171
|
const val UPDATES_CONFIGURATION_ENABLE_BSDIFF_PATCH_SUPPORT = "enableBsdiffPatchSupport"
|
|
172
|
+
const val UPDATES_CONFIGURATION_MAX_UPDATES_TO_KEEP_KEY = "maxUpdatesToKeep"
|
|
162
173
|
|
|
163
174
|
const val UPDATES_CONFIGURATION_CODE_SIGNING_CERTIFICATE = "codeSigningCertificate"
|
|
164
175
|
const val UPDATES_CONFIGURATION_CODE_SIGNING_METADATA = "codeSigningMetadata"
|
|
@@ -166,6 +177,8 @@ data class UpdatesConfiguration(
|
|
|
166
177
|
const val UPDATES_CONFIGURATION_CODE_SIGNING_ALLOW_UNSIGNED_MANIFESTS = "codeSigningAllowUnsignedManifests"
|
|
167
178
|
|
|
168
179
|
private const val UPDATES_CONFIGURATION_LAUNCH_WAIT_MS_DEFAULT_VALUE = 0
|
|
180
|
+
private const val UPDATES_CONFIGURATION_MAX_UPDATES_TO_KEEP_DEFAULT_VALUE = 2
|
|
181
|
+
private const val UPDATES_CONFIGURATION_MAX_UPDATES_TO_KEEP_MIN_VALUE = 2
|
|
169
182
|
|
|
170
183
|
const val UPDATES_CONFIGURATION_RUNTIME_VERSION_READ_FINGERPRINT_FILE_SENTINEL = "file:fingerprint"
|
|
171
184
|
private const val FINGERPRINT_FILE_NAME = "fingerprint"
|
|
@@ -174,6 +187,12 @@ data class UpdatesConfiguration(
|
|
|
174
187
|
return overrideMap?.readValueCheckingType<Boolean>(UPDATES_CONFIGURATION_DISABLE_ANTI_BRICKING_MEASURES) ?: context?.getMetadataValue("expo.modules.updates.DISABLE_ANTI_BRICKING_MEASURES") ?: false
|
|
175
188
|
}
|
|
176
189
|
|
|
190
|
+
private fun getMaxUpdatesToKeep(context: Context?, overrideMap: Map<String, Any>?): Int {
|
|
191
|
+
return overrideMap?.readValueCheckingType<Int>(UPDATES_CONFIGURATION_MAX_UPDATES_TO_KEEP_KEY)
|
|
192
|
+
?: context?.getMetadataValue("expo.modules.updates.EXPO_UPDATES_MAX_UPDATES_TO_KEEP")
|
|
193
|
+
?: UPDATES_CONFIGURATION_MAX_UPDATES_TO_KEEP_DEFAULT_VALUE
|
|
194
|
+
}
|
|
195
|
+
|
|
177
196
|
private fun getHasEmbeddedUpdate(
|
|
178
197
|
context: Context?,
|
|
179
198
|
overrideMap: Map<String, Any>?,
|
|
@@ -281,7 +300,11 @@ data class UpdatesConfiguration(
|
|
|
281
300
|
return UpdatesConfigurationValidationResult.INVALID_NOT_ENABLED
|
|
282
301
|
}
|
|
283
302
|
val disableAntiBrickingMeasures = getDisableAntiBrickingMeasures(context, overrideMap)
|
|
284
|
-
val configOverride = if (context != null)
|
|
303
|
+
val configOverride = if (context != null) {
|
|
304
|
+
UpdatesConfigurationOverride.load(context)
|
|
305
|
+
} else {
|
|
306
|
+
null
|
|
307
|
+
}
|
|
285
308
|
getUpdateUrl(context, overrideMap, disableAntiBrickingMeasures, configOverride) ?: return UpdatesConfigurationValidationResult.INVALID_MISSING_URL
|
|
286
309
|
|
|
287
310
|
if (getRuntimeVersion(context, overrideMap).isNullOrEmpty()) {
|
|
@@ -350,7 +373,11 @@ internal fun getNormalizedUrlOrigin(url: Uri): String {
|
|
|
350
373
|
if (port == getDefaultPortForScheme(scheme)) {
|
|
351
374
|
port = -1
|
|
352
375
|
}
|
|
353
|
-
return if (port > -1)
|
|
376
|
+
return if (port > -1) {
|
|
377
|
+
"$scheme://${url.host}:$port"
|
|
378
|
+
} else {
|
|
379
|
+
"$scheme://${url.host}"
|
|
380
|
+
}
|
|
354
381
|
}
|
|
355
382
|
|
|
356
383
|
private fun maybeGetDefaultScopeKey(scopeKey: String?, updateUrl: Uri): String {
|
|
@@ -28,11 +28,19 @@ class UpdatesPackage : Package {
|
|
|
28
28
|
val handler: ReactNativeHostHandler = object : ReactNativeHostHandler {
|
|
29
29
|
|
|
30
30
|
override fun getJSBundleFile(useDeveloperSupport: Boolean): String? {
|
|
31
|
-
return if (UpdatesController.instance.isActiveController)
|
|
31
|
+
return if (UpdatesController.instance.isActiveController) {
|
|
32
|
+
UpdatesController.instance.launchAssetFile
|
|
33
|
+
} else {
|
|
34
|
+
null
|
|
35
|
+
}
|
|
32
36
|
}
|
|
33
37
|
|
|
34
38
|
override fun getBundleAssetName(useDeveloperSupport: Boolean): String? {
|
|
35
|
-
return if (UpdatesController.instance.isActiveController)
|
|
39
|
+
return if (UpdatesController.instance.isActiveController) {
|
|
40
|
+
UpdatesController.instance.bundleAssetName
|
|
41
|
+
} else {
|
|
42
|
+
null
|
|
43
|
+
}
|
|
36
44
|
}
|
|
37
45
|
|
|
38
46
|
override fun onWillCreateReactInstance(useDeveloperSupport: Boolean) {
|
|
@@ -96,7 +96,11 @@ class CodeSigningConfiguration(
|
|
|
96
96
|
}.verify(Base64.decode(info.signature, Base64.DEFAULT))
|
|
97
97
|
|
|
98
98
|
return SignatureValidationResult(
|
|
99
|
-
if (isValid)
|
|
99
|
+
if (isValid) {
|
|
100
|
+
ValidationResult.VALID
|
|
101
|
+
} else {
|
|
102
|
+
ValidationResult.INVALID
|
|
103
|
+
},
|
|
100
104
|
certificateChain.codeSigningCertificate.expoProjectInformation()
|
|
101
105
|
)
|
|
102
106
|
}
|
|
@@ -75,7 +75,11 @@ object BuildData {
|
|
|
75
75
|
|
|
76
76
|
fun getBuildDataFromDatabase(database: UpdatesDatabase, scopeKey: String): JSONObject? {
|
|
77
77
|
val buildJSONString = database.jsonDataDao()?.loadJSONStringForKey(JSONDataDao.JSONDataKey.STATIC_BUILD_DATA, scopeKey)
|
|
78
|
-
return if (buildJSONString == null)
|
|
78
|
+
return if (buildJSONString == null) {
|
|
79
|
+
null
|
|
80
|
+
} else {
|
|
81
|
+
JSONObject(buildJSONString)
|
|
82
|
+
}
|
|
79
83
|
}
|
|
80
84
|
|
|
81
85
|
private fun getBuildDataFromConfig(updatesConfiguration: UpdatesConfiguration): JSONObject {
|
|
@@ -15,7 +15,11 @@ class Converters {
|
|
|
15
15
|
|
|
16
16
|
@TypeConverter
|
|
17
17
|
fun longToDate(value: Long?): Date? {
|
|
18
|
-
return if (value == null)
|
|
18
|
+
return if (value == null) {
|
|
19
|
+
null
|
|
20
|
+
} else {
|
|
21
|
+
Date(value)
|
|
22
|
+
}
|
|
19
23
|
}
|
|
20
24
|
|
|
21
25
|
@TypeConverter
|
|
@@ -25,7 +29,11 @@ class Converters {
|
|
|
25
29
|
|
|
26
30
|
@TypeConverter
|
|
27
31
|
fun stringToUri(string: String?): Uri? {
|
|
28
|
-
return if (string == null)
|
|
32
|
+
return if (string == null) {
|
|
33
|
+
null
|
|
34
|
+
} else {
|
|
35
|
+
Uri.parse(string)
|
|
36
|
+
}
|
|
29
37
|
}
|
|
30
38
|
|
|
31
39
|
@TypeConverter
|
|
@@ -58,7 +58,11 @@ abstract class UpdateDao {
|
|
|
58
58
|
|
|
59
59
|
fun loadUpdateWithId(id: UUID): UpdateEntity? {
|
|
60
60
|
val updateEntities = loadUpdatesWithId(id)
|
|
61
|
-
return if (updateEntities.isNotEmpty())
|
|
61
|
+
return if (updateEntities.isNotEmpty()) {
|
|
62
|
+
updateEntities[0]
|
|
63
|
+
} else {
|
|
64
|
+
null
|
|
65
|
+
}
|
|
62
66
|
}
|
|
63
67
|
|
|
64
68
|
fun loadLaunchAssetForUpdate(updateId: UUID): AssetEntity? {
|
|
@@ -265,7 +265,11 @@ class DatabaseLauncher(
|
|
|
265
265
|
|
|
266
266
|
database.assetDao().updateAsset(result.assetEntity)
|
|
267
267
|
val assetFileLocal = File(updatesDirectory, result.assetEntity.relativePath!!)
|
|
268
|
-
if (assetFileLocal.exists())
|
|
268
|
+
if (assetFileLocal.exists()) {
|
|
269
|
+
assetFileLocal
|
|
270
|
+
} else {
|
|
271
|
+
null
|
|
272
|
+
}
|
|
269
273
|
} catch (e: Exception) {
|
|
270
274
|
logger.error("Failed to load asset from disk or network", e, UpdatesErrorCode.AssetsFailedToLoad)
|
|
271
275
|
if (asset.isLaunchAsset) {
|
|
@@ -102,7 +102,11 @@ class EmbeddedLoader internal constructor(
|
|
|
102
102
|
} catch (e: FileNotFoundException) {
|
|
103
103
|
throw AssertionError(
|
|
104
104
|
"APK bundle must contain the expected embedded asset " +
|
|
105
|
-
if (assetEntity.embeddedAssetFilename != null)
|
|
105
|
+
if (assetEntity.embeddedAssetFilename != null) {
|
|
106
|
+
assetEntity.embeddedAssetFilename
|
|
107
|
+
} else {
|
|
108
|
+
assetEntity.resourcesFilename
|
|
109
|
+
}
|
|
106
110
|
)
|
|
107
111
|
}
|
|
108
112
|
}
|
|
@@ -1095,7 +1095,11 @@ private class FileDownloadProgressResponseBody(
|
|
|
1095
1095
|
|
|
1096
1096
|
override fun read(sink: Buffer, byteCount: Long): Long {
|
|
1097
1097
|
val bytesRead = super.read(sink, byteCount)
|
|
1098
|
-
totalBytesRead += if (bytesRead != -1L)
|
|
1098
|
+
totalBytesRead += if (bytesRead != -1L) {
|
|
1099
|
+
bytesRead
|
|
1100
|
+
} else {
|
|
1101
|
+
0
|
|
1102
|
+
}
|
|
1099
1103
|
progressListener.update(totalBytesRead, responseBody.contentLength())
|
|
1100
1104
|
return bytesRead
|
|
1101
1105
|
}
|
|
@@ -238,7 +238,11 @@ abstract class Loader protected constructor(
|
|
|
238
238
|
|
|
239
239
|
handleAssetDownloadCompleted(
|
|
240
240
|
result.assetEntity,
|
|
241
|
-
if (result.isNew)
|
|
241
|
+
if (result.isNew) {
|
|
242
|
+
AssetLoadResult.FINISHED
|
|
243
|
+
} else {
|
|
244
|
+
AssetLoadResult.ALREADY_EXISTS
|
|
245
|
+
}
|
|
242
246
|
)
|
|
243
247
|
}
|
|
244
248
|
assetDownloadJobs.add(job)
|
|
@@ -24,7 +24,11 @@ object ManifestMetadata {
|
|
|
24
24
|
return try {
|
|
25
25
|
val jsonString = database.jsonDataDao()!!
|
|
26
26
|
.loadJSONStringForKey(key, configuration.scopeKey)
|
|
27
|
-
if (jsonString != null)
|
|
27
|
+
if (jsonString != null) {
|
|
28
|
+
JSONObject(jsonString)
|
|
29
|
+
} else {
|
|
30
|
+
null
|
|
31
|
+
}
|
|
28
32
|
} catch (e: Exception) {
|
|
29
33
|
Log.e(TAG, "Error retrieving $key from database", e)
|
|
30
34
|
null
|
|
@@ -4,17 +4,22 @@ import expo.modules.updates.db.entity.UpdateEntity
|
|
|
4
4
|
import expo.modules.updates.db.enums.UpdateStatus
|
|
5
5
|
import org.json.JSONObject
|
|
6
6
|
|
|
7
|
+
private const val DEFAULT_MAX_UPDATES_TO_KEEP = 2
|
|
8
|
+
private const val MIN_MAX_UPDATES_TO_KEEP = 2
|
|
9
|
+
|
|
7
10
|
/**
|
|
8
11
|
* ReaperSelectionPolicy which chooses which updates to delete taking into account manifest filters
|
|
9
|
-
* originating from the server. If
|
|
10
|
-
*
|
|
11
|
-
* if available.
|
|
12
|
+
* originating from the server. If older updates are available, it will choose to keep up to
|
|
13
|
+
* `maxUpdatesToKeep - 1` older updates in addition to the one currently running, preferring
|
|
14
|
+
* updates that match the same filters if available.
|
|
12
15
|
*
|
|
13
16
|
* Uses `commitTime` to determine ordering of updates.
|
|
14
17
|
*
|
|
15
18
|
* Chooses only to delete updates whose scope matches that of `launchedUpdate`.
|
|
16
19
|
*/
|
|
17
|
-
class ReaperSelectionPolicyFilterAware
|
|
20
|
+
class ReaperSelectionPolicyFilterAware @JvmOverloads constructor(
|
|
21
|
+
private val maxUpdatesToKeep: Int = DEFAULT_MAX_UPDATES_TO_KEEP
|
|
22
|
+
) : ReaperSelectionPolicy {
|
|
18
23
|
override fun selectUpdatesToDelete(
|
|
19
24
|
updates: List<UpdateEntity>,
|
|
20
25
|
launchedUpdate: UpdateEntity?,
|
|
@@ -24,11 +29,8 @@ class ReaperSelectionPolicyFilterAware : ReaperSelectionPolicy {
|
|
|
24
29
|
return listOf()
|
|
25
30
|
}
|
|
26
31
|
val updatesToDelete = mutableListOf<UpdateEntity>()
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
// in which case, keep the next newest across all updates
|
|
30
|
-
var nextNewestUpdate: UpdateEntity? = null
|
|
31
|
-
var nextNewestUpdateMatchingFilters: UpdateEntity? = null
|
|
32
|
+
val olderUpdates = mutableListOf<UpdateEntity>()
|
|
33
|
+
|
|
32
34
|
for (update in updates) {
|
|
33
35
|
// ignore any updates whose scopeKey doesn't match that of the launched update
|
|
34
36
|
if (update.scopeKey != launchedUpdate.scopeKey) {
|
|
@@ -36,23 +38,37 @@ class ReaperSelectionPolicyFilterAware : ReaperSelectionPolicy {
|
|
|
36
38
|
}
|
|
37
39
|
if (update.commitTime.before(launchedUpdate.commitTime)) {
|
|
38
40
|
updatesToDelete.add(update)
|
|
39
|
-
|
|
40
|
-
nextNewestUpdate = update
|
|
41
|
-
}
|
|
42
|
-
if (SelectionPolicies.matchesFilters(update, filters) &&
|
|
43
|
-
(nextNewestUpdateMatchingFilters == null || nextNewestUpdateMatchingFilters.commitTime.before(update.commitTime))
|
|
44
|
-
) {
|
|
45
|
-
nextNewestUpdateMatchingFilters = update
|
|
46
|
-
}
|
|
41
|
+
olderUpdates.add(update)
|
|
47
42
|
}
|
|
48
43
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
44
|
+
|
|
45
|
+
val maxOlderUpdatesToKeep = maxUpdatesToKeep - 1
|
|
46
|
+
// Use a set so fallback selection and deletion do not scan all retained updates per candidate.
|
|
47
|
+
val olderUpdatesToKeep = olderUpdates
|
|
48
|
+
.filter { SelectionPolicies.matchesFilters(it, filters) }
|
|
49
|
+
.sortedByDescending { it.commitTime }
|
|
50
|
+
.take(maxOlderUpdatesToKeep)
|
|
51
|
+
.toMutableSet()
|
|
52
|
+
|
|
53
|
+
if (olderUpdatesToKeep.size < maxOlderUpdatesToKeep) {
|
|
54
|
+
olderUpdatesToKeep.addAll(
|
|
55
|
+
olderUpdates
|
|
56
|
+
.filter { !olderUpdatesToKeep.contains(it) }
|
|
57
|
+
.sortedByDescending { it.commitTime }
|
|
58
|
+
.take(maxOlderUpdatesToKeep - olderUpdatesToKeep.size)
|
|
59
|
+
)
|
|
53
60
|
}
|
|
61
|
+
updatesToDelete.removeAll(olderUpdatesToKeep)
|
|
54
62
|
|
|
55
63
|
// don't delete embedded update
|
|
56
64
|
return updatesToDelete.filter { it.status != UpdateStatus.EMBEDDED }
|
|
57
65
|
}
|
|
66
|
+
|
|
67
|
+
init {
|
|
68
|
+
if (maxUpdatesToKeep < MIN_MAX_UPDATES_TO_KEEP) {
|
|
69
|
+
throw AssertionError(
|
|
70
|
+
"Cannot initialize ReaperSelectionPolicyFilterAware with maxUpdatesToKeep < $MIN_MAX_UPDATES_TO_KEEP"
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
58
74
|
}
|
package/android/src/main/java/expo/modules/updates/selectionpolicy/SelectionPolicyFactory.kt
CHANGED
|
@@ -11,7 +11,7 @@ object SelectionPolicyFactory {
|
|
|
11
11
|
return SelectionPolicy(
|
|
12
12
|
LauncherSelectionPolicyFilterAware(runtimeVersion, config),
|
|
13
13
|
LoaderSelectionPolicyFilterAware(config),
|
|
14
|
-
ReaperSelectionPolicyFilterAware()
|
|
14
|
+
ReaperSelectionPolicyFilterAware(config.maxUpdatesToKeep)
|
|
15
15
|
)
|
|
16
16
|
}
|
|
17
17
|
}
|
|
@@ -259,6 +259,11 @@ public class AppController: NSObject {
|
|
|
259
259
|
message: "The expo-updates system is disabled due to an invalid configuration. Ensure a valid URL is supplied.",
|
|
260
260
|
code: .initializationError
|
|
261
261
|
)
|
|
262
|
+
case .InvalidMaxUpdatesToKeep:
|
|
263
|
+
logger.warn(
|
|
264
|
+
message: "The expo-updates system is disabled due to an invalid configuration. Ensure EXUpdatesMaxUpdatesToKeep is an integer of at least 2.",
|
|
265
|
+
code: .initializationError
|
|
266
|
+
)
|
|
262
267
|
case .InvalidMissingRuntimeVersion:
|
|
263
268
|
logger.warn(
|
|
264
269
|
message: "The expo-updates system is disabled due to an invalid configuration. Ensure a runtime version is supplied.",
|
|
@@ -14,6 +14,7 @@ enum DevLauncherAppControllerError: Int, Error, LocalizedError {
|
|
|
14
14
|
case invalidRuntimeVersion
|
|
15
15
|
case updateLaunchFailed
|
|
16
16
|
case configFailed
|
|
17
|
+
case invalidMaxUpdatesToKeep
|
|
17
18
|
|
|
18
19
|
var errorDescription: String? {
|
|
19
20
|
switch self {
|
|
@@ -27,6 +28,8 @@ enum DevLauncherAppControllerError: Int, Error, LocalizedError {
|
|
|
27
28
|
return "Failed to read stored updates: configuration object must include a valid runtime version"
|
|
28
29
|
case .updateLaunchFailed:
|
|
29
30
|
return "Failed to launch update with an unknown error"
|
|
31
|
+
case .invalidMaxUpdatesToKeep:
|
|
32
|
+
return "Failed to read stored updates: EXUpdatesMaxUpdatesToKeep must be an integer of at least 2"
|
|
30
33
|
case .configFailed:
|
|
31
34
|
return "Cannot load configuration from Expo.plist. Please ensure you've followed the setup and installation instructions for expo-updates to create Expo.plist and add it to your Xcode project."
|
|
32
35
|
}
|
|
@@ -251,6 +254,8 @@ public final class DevLauncherAppController: NSObject, InternalAppControllerInte
|
|
|
251
254
|
throw DevLauncherAppControllerError.invalidPlist
|
|
252
255
|
case .InvalidMissingURL:
|
|
253
256
|
throw DevLauncherAppControllerError.invalidUpdateURL
|
|
257
|
+
case .InvalidMaxUpdatesToKeep:
|
|
258
|
+
throw DevLauncherAppControllerError.invalidMaxUpdatesToKeep
|
|
254
259
|
case .InvalidMissingRuntimeVersion:
|
|
255
260
|
throw DevLauncherAppControllerError.invalidRuntimeVersion
|
|
256
261
|
}
|
|
@@ -56,7 +56,8 @@ public class EnabledAppController: InternalAppControllerInterface, UpdatesInterf
|
|
|
56
56
|
private var selectionPolicy: SelectionPolicy {
|
|
57
57
|
return SelectionPolicyFactory.filterAwarePolicy(
|
|
58
58
|
withRuntimeVersion: config.runtimeVersion,
|
|
59
|
-
config: config
|
|
59
|
+
config: config,
|
|
60
|
+
embeddedUpdateId: getEmbeddedUpdate()?.updateId
|
|
60
61
|
)
|
|
61
62
|
}
|
|
62
63
|
|
|
@@ -4,25 +4,44 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* A ReaperSelectionPolicy which chooses which updates to delete taking into account manifest filters
|
|
7
|
-
* originating from the server. If
|
|
8
|
-
*
|
|
9
|
-
* if available.
|
|
7
|
+
* originating from the server. If older updates are available, it will choose to keep up to
|
|
8
|
+
* `maxUpdatesToKeep - 1` older updates in addition to the one currently running, preferring
|
|
9
|
+
* updates that match the same filters if available.
|
|
10
10
|
*
|
|
11
11
|
* Uses `commitTime` to determine ordering of updates.
|
|
12
12
|
*
|
|
13
|
-
* Chooses only to delete updates
|
|
13
|
+
* Chooses only to delete updates whose scope matches that of `launchedUpdate`.
|
|
14
14
|
*/
|
|
15
15
|
@objc(EXUpdatesReaperSelectionPolicyFilterAware)
|
|
16
16
|
@objcMembers
|
|
17
17
|
public final class ReaperSelectionPolicyFilterAware: NSObject, ReaperSelectionPolicy {
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
private let maxUpdatesToKeep: Int
|
|
19
|
+
private let embeddedUpdateId: UUID?
|
|
20
|
+
|
|
21
|
+
public override init() {
|
|
22
|
+
self.maxUpdatesToKeep = 2
|
|
23
|
+
self.embeddedUpdateId = nil
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public convenience init(maxUpdatesToKeep: Int) {
|
|
27
|
+
self.init(maxUpdatesToKeep: maxUpdatesToKeep, embeddedUpdateId: nil)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public init(maxUpdatesToKeep: Int, embeddedUpdateId: UUID?) {
|
|
31
|
+
self.maxUpdatesToKeep = maxUpdatesToKeep
|
|
32
|
+
self.embeddedUpdateId = embeddedUpdateId
|
|
20
33
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
34
|
+
if maxUpdatesToKeep < 2 {
|
|
35
|
+
NSException.init(
|
|
36
|
+
name: .invalidArgumentException,
|
|
37
|
+
reason: "Cannot initialize ReaperSelectionPolicyFilterAware with maxUpdatesToKeep < 2"
|
|
38
|
+
)
|
|
39
|
+
.raise()
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public func updatesToDelete(withLaunchedUpdate launchedUpdate: Update, updates: [Update], filters: [String: Any]?) -> [Update] {
|
|
44
|
+
var olderUpdates: [Update] = []
|
|
26
45
|
|
|
27
46
|
for update in updates {
|
|
28
47
|
guard let launchedUpdateScopeKey = launchedUpdate.scopeKey,
|
|
@@ -36,32 +55,30 @@ public final class ReaperSelectionPolicyFilterAware: NSObject, ReaperSelectionPo
|
|
|
36
55
|
}
|
|
37
56
|
|
|
38
57
|
if launchedUpdate.commitTime.compare(update.commitTime) == .orderedDescending {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if let nextNewestUpdateInner = nextNewestUpdate,
|
|
42
|
-
update.commitTime.compare(nextNewestUpdateInner.commitTime) == .orderedDescending {
|
|
43
|
-
nextNewestUpdate = update
|
|
44
|
-
} else {
|
|
45
|
-
nextNewestUpdate = update
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if SelectionPolicies.doesUpdate(update, matchFilters: filters) {
|
|
49
|
-
if let nextNewestUpdateMatchingFiltersInner = nextNewestUpdateMatchingFilters,
|
|
50
|
-
update.commitTime.compare(nextNewestUpdateMatchingFiltersInner.commitTime) == .orderedDescending {
|
|
51
|
-
nextNewestUpdateMatchingFilters = update
|
|
52
|
-
} else {
|
|
53
|
-
nextNewestUpdateMatchingFilters = update
|
|
54
|
-
}
|
|
55
|
-
}
|
|
58
|
+
olderUpdates.append(update)
|
|
56
59
|
}
|
|
57
60
|
}
|
|
58
61
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
updatesToDelete.remove(nextNewestUpdate)
|
|
62
|
+
// Embedded rows from previous binaries cannot be launched and must not occupy fallback slots.
|
|
63
|
+
let launchableOlderUpdates = olderUpdates.filter {
|
|
64
|
+
$0.status != .StatusEmbedded || $0.updateId == embeddedUpdateId
|
|
63
65
|
}
|
|
64
|
-
|
|
66
|
+
let maxOlderUpdatesToKeep = maxUpdatesToKeep - 1
|
|
67
|
+
let matchingUpdatesToKeep = launchableOlderUpdates
|
|
68
|
+
.filter { SelectionPolicies.doesUpdate($0, matchFilters: filters) }
|
|
69
|
+
.sorted { $0.commitTime.compare($1.commitTime) == .orderedDescending }
|
|
70
|
+
.prefix(maxOlderUpdatesToKeep)
|
|
71
|
+
var olderUpdatesToKeep = Set(matchingUpdatesToKeep)
|
|
72
|
+
|
|
73
|
+
if matchingUpdatesToKeep.count < maxOlderUpdatesToKeep {
|
|
74
|
+
let remainingUpdatesToKeep = launchableOlderUpdates
|
|
75
|
+
.filter { !olderUpdatesToKeep.contains($0) }
|
|
76
|
+
.sorted { $0.commitTime.compare($1.commitTime) == .orderedDescending }
|
|
77
|
+
.prefix(maxOlderUpdatesToKeep - matchingUpdatesToKeep.count)
|
|
78
|
+
olderUpdatesToKeep.formUnion(remainingUpdatesToKeep)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return olderUpdates.filter { !olderUpdatesToKeep.contains($0) && $0.updateId != embeddedUpdateId }
|
|
65
82
|
}
|
|
66
83
|
}
|
|
67
84
|
|
|
@@ -10,10 +10,14 @@ import Foundation
|
|
|
10
10
|
@objcMembers
|
|
11
11
|
public final class SelectionPolicyFactory: NSObject {
|
|
12
12
|
public static func filterAwarePolicy(withRuntimeVersion runtimeVersion: String, config: UpdatesConfig) -> SelectionPolicy {
|
|
13
|
+
return filterAwarePolicy(withRuntimeVersion: runtimeVersion, config: config, embeddedUpdateId: nil)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public static func filterAwarePolicy(withRuntimeVersion runtimeVersion: String, config: UpdatesConfig, embeddedUpdateId: UUID?) -> SelectionPolicy {
|
|
13
17
|
return SelectionPolicy.init(
|
|
14
18
|
launcherSelectionPolicy: LauncherSelectionPolicyFilterAware.init(runtimeVersion: runtimeVersion, config: config),
|
|
15
19
|
loaderSelectionPolicy: LoaderSelectionPolicyFilterAware(config: config),
|
|
16
|
-
reaperSelectionPolicy: ReaperSelectionPolicyFilterAware()
|
|
20
|
+
reaperSelectionPolicy: ReaperSelectionPolicyFilterAware(maxUpdatesToKeep: config.maxUpdatesToKeep, embeddedUpdateId: embeddedUpdateId)
|
|
17
21
|
)
|
|
18
22
|
}
|
|
19
23
|
}
|