diff --git a/.github/workflows/create-expo-module.yml b/.github/workflows/create-expo-module.yml new file mode 100644 index 00000000000000..979f04cc56f651 --- /dev/null +++ b/.github/workflows/create-expo-module.yml @@ -0,0 +1,52 @@ +name: Create Expo Module + +on: + push: + branches: [main, 'sdk-*'] + paths: + - .github/workflows/create-expo-module.yml + - packages/create-expo-module/** + - yarn.lock + pull_request: + paths: + - .github/workflows/create-expo-module.yml + - packages/create-expo-module/** + - yarn.lock + schedule: + - cron: 0 14 * * * + +concurrency: + group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + test: + runs-on: ubuntu-24.04 + strategy: + fail-fast: false + matrix: + node: [20, 22] + steps: + - name: ๐Ÿ‘€ Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 100 + - name: โฌ‡๏ธ Fetch commits from base branch + run: git fetch origin ${{ github.event.before || github.base_ref || 'main' }}:${{ github.event.before || github.base_ref || 'main' }} --depth 100 + if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + - name: โ™ป๏ธ Restore caches + uses: ./.github/actions/expo-caches + id: expo-caches + with: + yarn-workspace: 'true' + - name: ๐Ÿงถ Install node modules in root dir + run: yarn install --frozen-lockfile + - name: ๐Ÿ›  Build create-expo-module + run: yarn prepare + working-directory: packages/create-expo-module + - name: ๐Ÿงช E2E Test create-expo-module + run: yarn test:e2e + working-directory: packages/create-expo-module diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml index 05ca64ed7b3675..945b3aa741146c 100644 --- a/.github/workflows/pr-labeler.yml +++ b/.github/workflows/pr-labeler.yml @@ -51,7 +51,7 @@ jobs: uses: ./.github/actions/expo-caches id: expo-caches with: - yarn-workspace: 'true' + yarn-workspace: "true" - name: ๐Ÿงถ Install node modules in root dir run: yarn install --frozen-lockfile - name: Get the base commit @@ -66,6 +66,7 @@ jobs: working-directory: apps/bare-expo previous-git-commit: ${{ steps.base-commit.outputs.base-commit }} fingerprint-db-cache-path: .fingerprint.db + fingerprint-state-output-file: ${{ runner.temp }}/fingerprint-state.json - name: ๐Ÿ‘€ Debug fingerprint run: | @@ -125,7 +126,7 @@ jobs: id: old_comment with: issue-number: ${{ github.event.pull_request.number }} - comment-author: 'expo-bot' + comment-author: "expo-bot" body-includes: - name: ๐Ÿ’ฌ Add comment with fingerprint if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.previous-fingerprint != '' && steps.fingerprint.outputs.fingerprint-diff != '[]' && steps.old_comment.outputs.comment-id == '' }} @@ -133,9 +134,11 @@ jobs: with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | - const diff = JSON.stringify(${{ steps.fingerprint.outputs.fingerprint-diff}}, null, 2); + const fs = require('fs'); + const state = JSON.parse(fs.readFileSync(process.env.RUNNER_TEMP + '/fingerprint-state.json', 'utf8')); + const diff = JSON.stringify(state.diff, null, 2); const body = ` - The Pull Request introduced fingerprint changes against the base commit: ${{ steps.fingerprint.outputs.previous-git-commit }} + The Pull Request introduced fingerprint changes against the base commit: ${state.previousGitCommitHash}
Fingerprint diff \`\`\`json @@ -160,9 +163,11 @@ jobs: with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | - const diff = JSON.stringify(${{ steps.fingerprint.outputs.fingerprint-diff}}, null, 2); + const fs = require('fs'); + const state = JSON.parse(fs.readFileSync(process.env.RUNNER_TEMP + '/fingerprint-state.json', 'utf8')); + const diff = JSON.stringify(state.diff, null, 2); const body = ` - The Pull Request introduced fingerprint changes against the base commit: ${{ steps.fingerprint.outputs.previous-git-commit }} + The Pull Request introduced fingerprint changes against the base commit: ${state.previousGitCommitHash}
Fingerprint diff \`\`\`json diff --git a/apps/bare-expo/ios/Podfile.lock b/apps/bare-expo/ios/Podfile.lock index 409e09b31b20b7..e0337023b94de9 100644 --- a/apps/bare-expo/ios/Podfile.lock +++ b/apps/bare-expo/ios/Podfile.lock @@ -27,18 +27,18 @@ PODS: - EASClient/Tests (55.0.2): - ExpoModulesCore - ExpoModulesTestCore - - EXApplication (55.0.6): + - EXApplication (55.0.7): - ExpoModulesCore - - EXConstants (55.0.5): + - EXConstants (55.0.6): - ExpoModulesCore - EXJSONUtils (55.0.0) - EXJSONUtils/Tests (55.0.0) - - EXManifests (55.0.6): + - EXManifests (55.0.8): - ExpoModulesCore - - EXManifests/Tests (55.0.6): + - EXManifests/Tests (55.0.8): - ExpoModulesCore - ExpoModulesTestCore - - Expo (55.0.0-preview.11): + - Expo (55.0.0-preview.12): - ExpoModulesCore - hermes-engine - RCTRequired @@ -63,15 +63,15 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - expo-dev-client (55.0.6): + - expo-dev-client (55.0.7): - EXManifests - expo-dev-launcher - expo-dev-menu - expo-dev-menu-interface - EXUpdatesInterface - - expo-dev-launcher (55.0.7): + - expo-dev-launcher (55.0.8): - EXManifests - - expo-dev-launcher/Main (= 55.0.7) + - expo-dev-launcher/Main (= 55.0.8) - expo-dev-menu - expo-dev-menu-interface - ExpoModulesCore @@ -100,7 +100,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - expo-dev-launcher/Main (55.0.7): + - expo-dev-launcher/Main (55.0.8): - EXManifests - expo-dev-launcher/Unsafe - expo-dev-menu @@ -131,7 +131,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - expo-dev-launcher/Tests (55.0.7): + - expo-dev-launcher/Tests (55.0.8): - EXManifests - expo-dev-menu - expo-dev-menu-interface @@ -166,7 +166,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - expo-dev-launcher/Unsafe (55.0.7): + - expo-dev-launcher/Unsafe (55.0.8): - EXManifests - expo-dev-menu - expo-dev-menu-interface @@ -196,8 +196,8 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - expo-dev-menu (55.0.6): - - expo-dev-menu/Main (= 55.0.6) + - expo-dev-menu (55.0.7): + - expo-dev-menu/Main (= 55.0.7) - hermes-engine - RCTRequired - RCTTypeSafety @@ -220,7 +220,7 @@ PODS: - ReactNativeDependencies - Yoga - expo-dev-menu-interface (55.0.1) - - expo-dev-menu/Main (55.0.6): + - expo-dev-menu/Main (55.0.7): - EXManifests - expo-dev-menu-interface - ExpoModulesCore @@ -246,7 +246,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - expo-dev-menu/Tests (55.0.6): + - expo-dev-menu/Tests (55.0.7): - ExpoModulesTestCore - hermes-engine - Nimble @@ -272,7 +272,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - expo-dev-menu/UITests (55.0.6): + - expo-dev-menu/UITests (55.0.7): - hermes-engine - RCTRequired - RCTTypeSafety @@ -297,7 +297,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - Expo/Tests (55.0.0-preview.11): + - Expo/Tests (55.0.0-preview.12): - ExpoModulesCore - hermes-engine - RCTRequired @@ -322,73 +322,73 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - ExpoAgeRange (0.2.8): + - ExpoAgeRange (0.2.9): - ExpoModulesCore - - ExpoAppIntegrity (55.0.6): + - ExpoAppIntegrity (55.0.7): - ExpoModulesCore - - ExpoAppleAuthentication (55.0.6): + - ExpoAppleAuthentication (55.0.7): - ExpoModulesCore - - ExpoAsset (55.0.5): + - ExpoAsset (55.0.6): - ExpoModulesCore - - ExpoAudio (55.0.6): + - ExpoAudio (55.0.7): - ExpoModulesCore - - ExpoBackgroundFetch (55.0.6): + - ExpoBackgroundFetch (55.0.7): - ExpoModulesCore - - ExpoBackgroundTask (55.0.6): + - ExpoBackgroundTask (55.0.7): - ExpoModulesCore - - ExpoBattery (55.0.6): + - ExpoBattery (55.0.7): - ExpoModulesCore - - ExpoBlob (55.0.6): + - ExpoBlob (55.0.7): - ExpoModulesCore - - ExpoBlur (55.0.6): + - ExpoBlur (55.0.7): - ExpoModulesCore - - ExpoBrightness (55.0.6): + - ExpoBrightness (55.0.7): - ExpoModulesCore - - ExpoBrownfield (55.0.8): + - ExpoBrownfield (55.0.9): - ExpoModulesCore - - ExpoCalendar (55.0.6): + - ExpoCalendar (55.0.7): - ExpoModulesCore - - ExpoCamera (55.0.6): + - ExpoCamera (55.0.7): - ExpoModulesCore - ZXingObjC/OneD - ZXingObjC/PDF417 - - ExpoCellular (55.0.6): + - ExpoCellular (55.0.7): - ExpoModulesCore - - ExpoClipboard (55.0.6): + - ExpoClipboard (55.0.7): - ExpoModulesCore - - ExpoClipboard/Tests (55.0.6): + - ExpoClipboard/Tests (55.0.7): - ExpoModulesCore - ExpoModulesTestCore - - ExpoContacts (55.0.6): + - ExpoContacts (55.0.7): - ExpoModulesCore - - ExpoCrypto (55.0.6): + - ExpoCrypto (55.0.7): - ExpoModulesCore - - ExpoDevice (55.0.7): + - ExpoDevice (55.0.8): - ExpoModulesCore - - ExpoDocumentPicker (55.0.6): + - ExpoDocumentPicker (55.0.7): - ExpoModulesCore - ExpoDomWebView (55.0.3): - ExpoModulesCore - - ExpoFileSystem (55.0.6): + - ExpoFileSystem (55.0.8): - ExpoModulesCore - ExpoFont (55.0.4): - ExpoModulesCore - - ExpoGL (55.0.6): + - ExpoGL (55.0.8): - ExpoModulesCore - ExpoModulesJSI - ReactCommon/turbomodule/core - ExpoGlassEffect (55.0.6): - ExpoModulesCore - - ExpoHaptics (55.0.6): + - ExpoHaptics (55.0.7): - ExpoModulesCore - - ExpoImage (55.0.3): + - ExpoImage (55.0.4): - ExpoModulesCore - libavif/libdav1d - SDWebImage (~> 5.21.0) - SDWebImageAVIFCoder (~> 0.11.0) - SDWebImageSVGCoder (~> 1.7.0) - SDWebImageWebPCoder (~> 0.14.6) - - ExpoImage/Tests (55.0.3): + - ExpoImage/Tests (55.0.4): - ExpoModulesCore - ExpoModulesTestCore - libavif/libdav1d @@ -396,12 +396,12 @@ PODS: - SDWebImageAVIFCoder (~> 0.11.0) - SDWebImageSVGCoder (~> 1.7.0) - SDWebImageWebPCoder (~> 0.14.6) - - ExpoImageManipulator (55.0.6): + - ExpoImageManipulator (55.0.8): - ExpoModulesCore - SDWebImageWebPCoder - - ExpoImagePicker (55.0.6): + - ExpoImagePicker (55.0.8): - ExpoModulesCore - - ExpoInsights (55.0.7): + - ExpoInsights (55.0.9): - EASClient - ExpoModulesCore - hermes-engine @@ -425,36 +425,36 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - ExpoKeepAwake (55.0.3): + - ExpoKeepAwake (55.0.4): - ExpoModulesCore - - ExpoLinearGradient (55.0.6): + - ExpoLinearGradient (55.0.7): - ExpoModulesCore - - ExpoLinking (55.0.4): + - ExpoLinking (55.0.6): - ExpoModulesCore - - ExpoLivePhoto (55.0.6): + - ExpoLivePhoto (55.0.7): - ExpoModulesCore - - ExpoLocalAuthentication (55.0.6): + - ExpoLocalAuthentication (55.0.7): - ExpoModulesCore - - ExpoLocalization (55.0.6): + - ExpoLocalization (55.0.7): - ExpoModulesCore - - ExpoLocation (55.0.7): + - ExpoLocation (55.1.1): - ExpoModulesCore - ExpoLogBox (55.0.7): - React-Core - - ExpoMailComposer (55.0.6): + - ExpoMailComposer (55.0.7): - ExpoModulesCore - - ExpoMaps (55.0.6): + - ExpoMaps (55.0.8): - ExpoModulesCore - - ExpoMediaLibrary (55.0.6): + - ExpoMediaLibrary (55.0.8): - ExpoModulesCore - React-Core - - ExpoMediaLibrary/Tests (55.0.6): + - ExpoMediaLibrary/Tests (55.0.8): - ExpoModulesCore - ExpoModulesTestCore - React-Core - - ExpoMeshGradient (55.0.6): + - ExpoMeshGradient (55.0.7): - ExpoModulesCore - - ExpoModulesCore (55.0.9): + - ExpoModulesCore (55.0.10): - ExpoModulesJSI - hermes-engine - RCTRequired @@ -479,7 +479,7 @@ PODS: - ReactNativeDependencies - RNWorklets - Yoga - - ExpoModulesCore/Tests (55.0.9): + - ExpoModulesCore/Tests (55.0.10): - ExpoModulesJSI - ExpoModulesTestCore - hermes-engine @@ -505,12 +505,12 @@ PODS: - ReactNativeDependencies - RNWorklets - Yoga - - ExpoModulesJSI (55.0.9): + - ExpoModulesJSI (55.0.10): - hermes-engine - React-Core - React-runtimescheduler - ReactCommon - - ExpoModulesJSI/Tests (55.0.9): + - ExpoModulesJSI/Tests (55.0.10): - hermes-engine - React-Core - React-runtimescheduler @@ -520,21 +520,21 @@ PODS: - Nimble (~> 13.0.0) - Quick (~> 7.3.0) - React-hermes - - ExpoNetwork (55.0.6): + - ExpoNetwork (55.0.7): - ExpoModulesCore - - ExpoNotifications (55.0.7): + - ExpoNotifications (55.0.9): - ExpoModulesCore - - ExpoNotifications/Tests (55.0.7): + - ExpoNotifications/Tests (55.0.9): - ExpoModulesCore - ExpoModulesTestCore - - ExpoPrint (55.0.6): + - ExpoPrint (55.0.7): - ExpoModulesCore - - ExpoRouter (55.0.0-preview.8): + - ExpoRouter (55.0.0-preview.9): - ExpoModulesCore - RNScreens - - ExpoScreenCapture (55.0.6): + - ExpoScreenCapture (55.0.7): - ExpoModulesCore - - ExpoScreenOrientation (55.0.6): + - ExpoScreenOrientation (55.0.7): - ExpoModulesCore - hermes-engine - RCTRequired @@ -557,43 +557,43 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - ExpoSecureStore (55.0.6): + - ExpoSecureStore (55.0.7): - ExpoModulesCore - - ExpoSensors (55.0.6): + - ExpoSensors (55.0.7): - ExpoModulesCore - - ExpoSharing (55.0.7): + - ExpoSharing (55.0.9): - ExpoModulesCore - - ExpoSMS (55.0.6): + - ExpoSMS (55.0.7): - ExpoModulesCore - - ExpoSpeech (55.0.6): + - ExpoSpeech (55.0.7): - ExpoModulesCore - - ExpoSplashScreen (55.0.6): + - ExpoSplashScreen (55.0.8): - ExpoModulesCore - - ExpoSQLite (55.0.6): + - ExpoSQLite (55.0.8): - ExpoModulesCore - - ExpoStoreReview (55.0.6): + - ExpoStoreReview (55.0.7): - ExpoModulesCore - ExpoSymbols (55.0.4): - ExpoModulesCore - - ExpoSystemUI (55.0.6): + - ExpoSystemUI (55.0.8): - ExpoModulesCore - - ExpoTaskManager (55.0.6): + - ExpoTaskManager (55.0.8): - ExpoModulesCore - UMAppLoader - - ExpoTrackingTransparency (55.0.6): + - ExpoTrackingTransparency (55.0.7): - ExpoModulesCore - - ExpoUI (55.0.0-preview.6): + - ExpoUI (55.0.0-preview.7): - ExpoModulesCore - React-RCTFabric - - ExpoVideo (55.0.6): + - ExpoVideo (55.0.8): - ExpoModulesCore - - ExpoVideoThumbnails (55.0.6): + - ExpoVideoThumbnails (55.0.8): - ExpoModulesCore - - ExpoWebBrowser (55.0.6): + - ExpoWebBrowser (55.0.8): - ExpoModulesCore - EXStructuredHeaders (55.0.0) - EXStructuredHeaders/Tests (55.0.0) - - EXUpdates (55.0.8): + - EXUpdates (55.0.10): - EASClient - EXManifests - ExpoModulesCore @@ -621,7 +621,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - EXUpdates/Tests (55.0.8): + - EXUpdates/Tests (55.0.10): - EASClient - EXManifests - ExpoModulesCore @@ -3805,84 +3805,84 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: BenchmarkingModule: 69aa39c6f6d42bf6fc47caeacb070d24de22d54f EASClient: a4b8ae18e8de52019ec94d14795faac4800905f0 - EXApplication: 389a40ff6f26237c61fa7319e0f3f35aaece45a7 - EXConstants: b940de600df97c48f07abb6e45f0d3a99be825ee + EXApplication: 7fe2bd9b81c1a72f8ef4829b8e19a9eb71b7f0b3 + EXConstants: c5267438c01cbe95faba8570f8442da09f9bdd68 EXJSONUtils: 0080c14b673cfa9a6be5e3fe429768ffe3d42dfb - EXManifests: d24d63a36ae23b61911bba710a51fc244293c3dd - Expo: d2093e8b8e155446e9ee57f070338fd52779ce87 - expo-dev-client: b712d4e28ae7fda17d666a61495d5a33c9391a4b - expo-dev-launcher: f4a209b7193a751a60f75fdafe504d7cb31b5e3f - expo-dev-menu: 48d613fd12feca72640d06bf1cd4fa04e6627877 + EXManifests: 9501d68451fde77248a6c138bbfbeb0c0485ebf7 + Expo: 51ed5485455bbfbde22dead73d27ce4306ba5017 + expo-dev-client: c757f7eef3c160682591301357f54fd97d14e27c + expo-dev-launcher: dd6f0f5aad1aad2df5d60c81f24de96ccb8703a0 + expo-dev-menu: 10f320043bf587662314591ad9cf5f952c14b9be expo-dev-menu-interface: bf6f816d29b45bec038080790963c635e8d588c2 - ExpoAgeRange: 7f363d60f548f1ccbf912767cf15bb52be3769e6 - ExpoAppIntegrity: d8230cf9f2b9845387e0564a7a3294ee7dcb7e84 - ExpoAppleAuthentication: 4d2980e9200da46822df7efa497d6473e1092004 - ExpoAsset: c9b82ac7ebb4b683c0dbac99f0f01586599246b6 - ExpoAudio: 9fb0d662f9110d7ca2e1f930273cc10ceb4fbb65 - ExpoBackgroundFetch: a9faa95c99080d3fc674759a03aee69e0e366645 - ExpoBackgroundTask: 91bfe0d1297f968c7777731c479d20df7995e940 - ExpoBattery: 5cd7f4ac979aab3855bfb00c3ef740e579a29fe9 - ExpoBlob: 25183435ad2f1cfc4becfa7333c9e8776830bcf1 - ExpoBlur: 61235621c75cc2fe2b407aaab6f6d95802b8f8d3 - ExpoBrightness: a91c356b6a26ad37cb175ef530a82f23b4eefb63 - ExpoBrownfield: 89184d7fcc850701f9e6b552fb17395be353583f - ExpoCalendar: b9c1d3064abbe17b4f70a9c733e8d9ad523d6907 - ExpoCamera: 7ef9272b8fdea2e8cc4eaf61bf1380329817db85 - ExpoCellular: 6dec80646ec8a6e21b5d1b952060f23ffd9bfd29 - ExpoClipboard: 52f737117d3d610ed15a33ff82749e29519755e7 - ExpoContacts: 65c342421f55d92f3fa551b708d24928012705c3 - ExpoCrypto: d4fb4dd49ca739878428eae9a5ad2cc11d43c0b0 - ExpoDevice: a9e189d0e62f48d02e40ed0b6c8901563c9c4a6a - ExpoDocumentPicker: d0ccbefe7833cdf822b516d6cc678ecd09b428b1 + ExpoAgeRange: 576b807fe88fd319bd977b9b185a8561abcf731e + ExpoAppIntegrity: d19eeace153093bbf8584593d3a8d48fc5184e52 + ExpoAppleAuthentication: aa62b6530f7c52b06db39545619843525416f86d + ExpoAsset: e7ad9d22fd8099bd178d08d6c9b21fb35ca2b025 + ExpoAudio: 6c877be9fcc8be131ff347f840b847cae7aa109f + ExpoBackgroundFetch: 6791ead0cf3065c7b2ec3681e0edb3e886ee244a + ExpoBackgroundTask: ff25a9153a32077c87dff069d2e78c192c006a8f + ExpoBattery: 794467ad27c7672344d006e03a78b9d48b7a30cc + ExpoBlob: febdd0d6bd7519fa9c13e3fd4b000c9f44f51005 + ExpoBlur: 51773f4ccea98b8e7f168f4aaae4247751cd7f85 + ExpoBrightness: 82608bf4d2dc6f9df7b22d1dd660cb4d2258f56d + ExpoBrownfield: d03214386e4eaa49fe6e5fc730e3ed34c37a1732 + ExpoCalendar: 280de337555f56fe205a459dd55a34dbdc2f4a14 + ExpoCamera: 1cf543959b2d8ac6c71b75401b24686de495c05f + ExpoCellular: bec1df08f90d23a6cc6e82063c3c9801cc64c0df + ExpoClipboard: 45e47d59fcc56727f010e55142158f1d55d9c9ed + ExpoContacts: d9146f412446c0d8d20a5764cc761791b5ce3b8d + ExpoCrypto: 55bfda91fbb37f07243bcee17880f923bb67a89c + ExpoDevice: ffc55a6360f2008b556f72faa1a1d040a764afbb + ExpoDocumentPicker: d99ecb0d7404ffc934f341e90a50f395ddf4cdf0 ExpoDomWebView: d4f2ed3c3fa31d0ce89e79501a0c041c2f233189 - ExpoFileSystem: d10a0022fb62767b95f5e0a643662ff4eb1a04d5 + ExpoFileSystem: eba81beb69ca4df44a13b44e77bab259cf61e381 ExpoFont: 4d2a6dedce012c4793532cb38d561d3da95eaafd - ExpoGL: 057495da3eda0fdd9506acd4ac01a026223300d2 + ExpoGL: 335014ef49fccbfa5ff5d6c665dd412e4037f3b6 ExpoGlassEffect: ccbfe035b8894a027faf1afb848103ba23f25369 - ExpoHaptics: ba57be23201bb71371b2dfc885e37bd2b944d3f0 - ExpoImage: eb2443489a4e380def23857653e170054ecec49c - ExpoImageManipulator: 1d67e9dc9ab2f05641db11f26a776f8d5351d9e4 - ExpoImagePicker: 3f3625427d9e056df2993649b962fb56305447d1 - ExpoInsights: 2249791805cdce45dca0b9a334304051d306fb5e - ExpoKeepAwake: a00c32342feeb80a3462a330dce487eb3ebcd619 - ExpoLinearGradient: 8904cc1eda0e4d4779f2d8b3b3ae38810b472f56 - ExpoLinking: 4a0852bb970e7fc81b4f55ce8cb78e9067676e43 - ExpoLivePhoto: 712f138aba8aec13c28bf2b8d7a779614b4529d7 - ExpoLocalAuthentication: 8405a08b9b5bacff858793ff76f6df9d06cb25aa - ExpoLocalization: 2f6285d6d922e39f6085f6b36a9166de9bdd40c4 - ExpoLocation: d22a370c96821346bd4f88cb54e34882219244ef + ExpoHaptics: 7f8e5f6609a8ea869781d1fa1bd0430c273e4c2e + ExpoImage: 1f943313ca8cf1a664c55715821fd4c2b4229bfb + ExpoImageManipulator: 77776dd2883d66e4ed756cd37c8668916b0d24f3 + ExpoImagePicker: 6a4b31db48f66013b50c6e34f00dd035f2c08022 + ExpoInsights: d90cbe91db12d3b6d1ac5530fa0c524758070f46 + ExpoKeepAwake: 55711a70fe88a41e793bbe28543c93cb47ff265d + ExpoLinearGradient: f5a238bf8aa4f681aee43903265228e1d59ba42b + ExpoLinking: 11cf995e55ad7aea108f64196135d1ee9c4ee389 + ExpoLivePhoto: 3a958147ca8d1590b501a9539f8c7c6f067fe89a + ExpoLocalAuthentication: 74ba14ee07ed1a2a7ca9241f7d8a0f17f5fd2227 + ExpoLocalization: d319bb0689ccadb6e838baba88462d49d7f75b56 + ExpoLocation: 3790cff73cfb6cd759bde30a555035504b16e909 ExpoLogBox: 35febda08748ff213ea133f51acf976ba8c44b2c - ExpoMailComposer: 7d6ebe629a03f32b012f9092f189cc6f221ab627 - ExpoMaps: 21db2c501a72be93e151e2679538ba0039feb1d1 - ExpoMediaLibrary: 7054ee39fa25d566700d14dd77c3cbf644cde4a5 - ExpoMeshGradient: f4f5bbe83258bc4bfd2c5ea3d20f3c3c2c3b3fe5 - ExpoModulesCore: 485d84204b73a9cd666bfa26a421aca61568029d - ExpoModulesJSI: 53b4c102d2ac146180b9b07c7330b80e2ca4b82a + ExpoMailComposer: 8d93c49e1ce224ad28ca5db9d73c1d97f0bb50bc + ExpoMaps: 14472dcf9e1ef8acd6f4e9ebaa6b8032ac10942b + ExpoMediaLibrary: 3851cc9ab0a39823e9014b71c7f5685f2d7b464d + ExpoMeshGradient: a1a72cf198d5a77c2adac5445d9bcccdce48b326 + ExpoModulesCore: 01b485a5523fa71463c2c6f0290bbaf22a6fc7ad + ExpoModulesJSI: 02998c1078c5423fc59768015ce8c7b29a2e2e20 ExpoModulesTestCore: 382d7b11f61dd661215fbe33d8ce6c95d6c09e99 - ExpoNetwork: 0db571c9722286f6722b8c4832f99036307d1071 - ExpoNotifications: 7793b6b0ee7fcb5407afaca4d51f74172c52673c - ExpoPrint: 30efae52afa23873e79250d6a72487cf95f83368 - ExpoRouter: 55f8b0982b019732548b5c24f8f5597f0fa4ae73 - ExpoScreenCapture: 68422a89203efa758273791645bf80e3e8f39664 - ExpoScreenOrientation: 32da291f1089ae96b170b61ad5bcf3ec900d4670 - ExpoSecureStore: cdd803967596b2ab626f3c57b50c30a43a2c845a - ExpoSensors: 41f84f027428a61b1e2222ca346fc4ddb5190e3a - ExpoSharing: 8615bde0647ae4ffdd99170b17ba6919a494adbb - ExpoSMS: 9d0cd2fea7980807ecdcef2fab7cec291fdebf8f - ExpoSpeech: 4e2a54bff3458c705747a05d00c5883b495712e9 - ExpoSplashScreen: d945138dd83b56403bc347caf0129086750df786 - ExpoSQLite: fe7b6982a892e971831b3131606ad7537233b7d1 - ExpoStoreReview: 6098804e7f45f9b16b81f0d9495056e675b04b0d + ExpoNetwork: f9396ed29c9cd5c0a769c8090daa2ed6ca6910d6 + ExpoNotifications: b8682b9f0178eecdd4fefb8c66ba3335f9d4be46 + ExpoPrint: 1bbe11247eaeaf593645bed9ad51a3c43c9b1e8f + ExpoRouter: e2628dd3f591744672c3608a36b8c97052dd86b3 + ExpoScreenCapture: 1f133b562e718ee17f86264b84253c36d658937d + ExpoScreenOrientation: 1462e2e00dbe0eae66f6bf956ce4aff8ae555202 + ExpoSecureStore: 2a7ac2a9ee05951d89f245192b1ec89ff9976b66 + ExpoSensors: 8d982ace77b14882832d46b083be955637f271d0 + ExpoSharing: ac23310368759f77d077477c7df4fadea333c852 + ExpoSMS: db80a6da7f7d36fb3c99a722115709433ed5a70f + ExpoSpeech: b73e5e41b755e73d2e926de74e4e4b6a2ced6fa2 + ExpoSplashScreen: 22aae1cceef46c3a36b1f46cac8ea7d9c0b59843 + ExpoSQLite: c6562dad5c2522bf5b0a5da18133d00f6c1e84ed + ExpoStoreReview: b786c2e3ef144a9f36a6d67b5844c1006e3b34e9 ExpoSymbols: 237882b097b55437cf37b36b21d8a4892f07e782 - ExpoSystemUI: 835eb543a3ae680012de332f1142e52e3a0b5b11 - ExpoTaskManager: 281bfc28ee56ff7cc63e30e5eeacfdcbda54a28a - ExpoTrackingTransparency: 6b4ff3fb2a573acbe25d8ba31b32acb69b3dd807 - ExpoUI: bd6e1f95c054ddc59352f8a14a964d6873199f9a - ExpoVideo: 95c0ab96be3ac5f855176ffa57f130a0d47439f7 - ExpoVideoThumbnails: d460865437f77c93ac27e48c9cb7d3306fa8c881 - ExpoWebBrowser: 7d4be19c103a67e1b8cad8f644bb52dac6ccf27c + ExpoSystemUI: cade5cc276b73d82dd4024f22388f9ada9208b20 + ExpoTaskManager: 02236bc479c788b145534d3dc9a5fd3b9a2d89aa + ExpoTrackingTransparency: b0a78e98309d998dc842c2a2d72122d2ffb09410 + ExpoUI: fe34606aea4600afa355b80951f842aadb83c8d6 + ExpoVideo: 5cc9555356685596fb703d412d94a94170669cd8 + ExpoVideoThumbnails: c0420cc4ed3bd9486e3d2a5bb27e3777d9064560 + ExpoWebBrowser: 5d50d2ad55734f89e97381974adac1f588b7f168 EXStructuredHeaders: aa49a5557fa24aa61dda4ac665f3987bf3e9e35d - EXUpdates: 2e42182d19f462e01e34a058e9593a2c3afe8455 + EXUpdates: bb7f327834c1663bb138a44e4b9e03b1c4acd657 EXUpdatesInterface: 29d3993072380e2d91188335ffef666bb2bfd650 FBLazyVector: 32e9ed0301d0fcbc1b2b341dd7fcbf291f51eb83 hermes-engine: 1566042511e927d64254f2efe08ae744a5eb9a00 diff --git a/apps/bare-expo/package.json b/apps/bare-expo/package.json index 23fa9ff0c90ea9..08337bb843da0e 100644 --- a/apps/bare-expo/package.json +++ b/apps/bare-expo/package.json @@ -53,17 +53,17 @@ "@react-native-segmented-control/segmented-control": "2.5.7", "@shopify/flash-list": "2.0.2", "@shopify/react-native-skia": "2.4.18", - "expo": "~55.0.0-preview.11", - "expo-brownfield": "~55.0.8", - "expo-build-properties": "~55.0.7", - "expo-camera": "~55.0.6", - "expo-dev-client": "~55.0.6", - "expo-image": "~55.0.3", - "expo-insights": "~55.0.7", - "expo-network-addons": "~55.0.6", - "expo-notifications": "~55.0.7", - "expo-router": "~55.0.0-preview.8", - "expo-splash-screen": "~55.0.6", + "expo": "~55.0.0-preview.12", + "expo-brownfield": "~55.0.9", + "expo-build-properties": "~55.0.8", + "expo-camera": "~55.0.7", + "expo-dev-client": "~55.0.7", + "expo-image": "~55.0.4", + "expo-insights": "~55.0.9", + "expo-network-addons": "~55.0.7", + "expo-notifications": "~55.0.9", + "expo-router": "~55.0.0-preview.9", + "expo-splash-screen": "~55.0.8", "lottie-react-native": "^7.3.4", "native-component-list": "*", "react": "19.2.0", @@ -85,7 +85,7 @@ "devDependencies": { "@babel/core": "^7.20.0", "@types/react": "~19.2.0", - "babel-preset-expo": "~55.0.5", + "babel-preset-expo": "~55.0.6", "expo-module-scripts": "^55.0.2", "jest": "^29.3.1" }, diff --git a/apps/brownfield-tester/expo-app/package.json b/apps/brownfield-tester/expo-app/package.json index b8786c8da3c49f..28a97b76afc005 100644 --- a/apps/brownfield-tester/expo-app/package.json +++ b/apps/brownfield-tester/expo-app/package.json @@ -13,21 +13,21 @@ "@react-navigation/bottom-tabs": "^7.7.3", "@react-navigation/elements": "^2.8.1", "@react-navigation/native": "^7.1.28", - "expo": "~55.0.0-preview.11", - "expo-brownfield": "~55.0.8", - "expo-constants": "~55.0.5", - "expo-device": "~55.0.7", - "expo-dev-menu": "~55.0.6", + "expo": "~55.0.0-preview.12", + "expo-brownfield": "~55.0.9", + "expo-constants": "~55.0.6", + "expo-device": "~55.0.8", + "expo-dev-menu": "~55.0.7", "expo-font": "~55.0.4", "expo-glass-effect": "~55.0.6", - "expo-image": "~55.0.3", - "expo-linking": "~55.0.4", - "expo-router": "~55.0.0-preview.8", - "expo-splash-screen": "~55.0.6", + "expo-image": "~55.0.4", + "expo-linking": "~55.0.6", + "expo-router": "~55.0.0-preview.9", + "expo-splash-screen": "~55.0.8", "expo-status-bar": "~55.0.3", "expo-symbols": "~55.0.4", - "expo-system-ui": "~55.0.6", - "expo-web-browser": "~55.0.6", + "expo-system-ui": "~55.0.8", + "expo-web-browser": "~55.0.8", "react": "19.2.0", "react-dom": "19.2.0", "react-native": "0.83.2", diff --git a/apps/eas-expo-go/package.json b/apps/eas-expo-go/package.json index 25e12931258c45..91671421e4e132 100644 --- a/apps/eas-expo-go/package.json +++ b/apps/eas-expo-go/package.json @@ -4,7 +4,7 @@ "main": "index.js", "license": "MIT", "dependencies": { - "@expo/config": "~55.0.6" + "@expo/config": "~55.0.7" }, "scripts": { "eas-build-pre-install": "./scripts/eas-build-pre-install.sh", diff --git a/apps/expo-go/ios/Podfile.lock b/apps/expo-go/ios/Podfile.lock index 746ff1bc5ddee8..4b50976605083b 100644 --- a/apps/expo-go/ios/Podfile.lock +++ b/apps/expo-go/ios/Podfile.lock @@ -9,18 +9,18 @@ PODS: - EASClient/Tests (55.0.2): - ExpoModulesCore - ExpoModulesTestCore - - EXApplication (55.0.6): + - EXApplication (55.0.7): - ExpoModulesCore - - EXConstants (55.0.5): + - EXConstants (55.0.6): - ExpoModulesCore - EXJSONUtils (55.0.0) - EXJSONUtils/Tests (55.0.0) - - EXManifests (55.0.6): + - EXManifests (55.0.8): - ExpoModulesCore - - EXManifests/Tests (55.0.6): + - EXManifests/Tests (55.0.8): - ExpoModulesCore - ExpoModulesTestCore - - Expo (55.0.0-preview.11): + - Expo (55.0.0-preview.12): - boost - DoubleConversion - ExpoModulesCore @@ -51,10 +51,10 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - expo-dev-menu (55.0.6): + - expo-dev-menu (55.0.7): - boost - DoubleConversion - - expo-dev-menu/Main (= 55.0.6) + - expo-dev-menu/Main (= 55.0.7) - fast_float - fmt - glog @@ -81,7 +81,7 @@ PODS: - SocketRocket - Yoga - expo-dev-menu-interface (55.0.1) - - expo-dev-menu/Main (55.0.6): + - expo-dev-menu/Main (55.0.7): - boost - DoubleConversion - EXManifests @@ -113,7 +113,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - Expo/Tests (55.0.0-preview.11): + - Expo/Tests (55.0.0-preview.12): - boost - DoubleConversion - ExpoModulesCore @@ -144,69 +144,69 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - ExpoAgeRange (0.2.8): + - ExpoAgeRange (0.2.9): - ExpoModulesCore - - ExpoAppleAuthentication (55.0.6): + - ExpoAppleAuthentication (55.0.7): - ExpoModulesCore - - ExpoAsset (55.0.5): + - ExpoAsset (55.0.6): - ExpoModulesCore - - ExpoAudio (55.0.6): + - ExpoAudio (55.0.7): - ExpoModulesCore - - ExpoBackgroundFetch (55.0.6): + - ExpoBackgroundFetch (55.0.7): - ExpoModulesCore - - ExpoBackgroundTask (55.0.6): + - ExpoBackgroundTask (55.0.7): - ExpoModulesCore - - ExpoBattery (55.0.6): + - ExpoBattery (55.0.7): - ExpoModulesCore - - ExpoBlob (55.0.6): + - ExpoBlob (55.0.7): - ExpoModulesCore - - ExpoBlur (55.0.6): + - ExpoBlur (55.0.7): - ExpoModulesCore - - ExpoBrightness (55.0.6): + - ExpoBrightness (55.0.7): - ExpoModulesCore - - ExpoCalendar (55.0.6): + - ExpoCalendar (55.0.7): - ExpoModulesCore - - ExpoCamera (55.0.6): + - ExpoCamera (55.0.7): - ExpoModulesCore - ZXingObjC/OneD - ZXingObjC/PDF417 - - ExpoCellular (55.0.6): + - ExpoCellular (55.0.7): - ExpoModulesCore - - ExpoClipboard (55.0.6): + - ExpoClipboard (55.0.7): - ExpoModulesCore - - ExpoClipboard/Tests (55.0.6): + - ExpoClipboard/Tests (55.0.7): - ExpoModulesCore - ExpoModulesTestCore - - ExpoContacts (55.0.6): + - ExpoContacts (55.0.7): - ExpoModulesCore - - ExpoCrypto (55.0.6): + - ExpoCrypto (55.0.7): - ExpoModulesCore - - ExpoDevice (55.0.7): + - ExpoDevice (55.0.8): - ExpoModulesCore - - ExpoDocumentPicker (55.0.6): + - ExpoDocumentPicker (55.0.7): - ExpoModulesCore - ExpoDomWebView (55.0.3): - ExpoModulesCore - - ExpoFileSystem (55.0.6): + - ExpoFileSystem (55.0.8): - ExpoModulesCore - ExpoFont (55.0.4): - ExpoModulesCore - - ExpoGL (55.0.6): + - ExpoGL (55.0.8): - ExpoModulesCore - ExpoModulesJSI - ReactCommon/turbomodule/core - ExpoGlassEffect (55.0.6): - ExpoModulesCore - - ExpoHaptics (55.0.6): + - ExpoHaptics (55.0.7): - ExpoModulesCore - - ExpoImage (55.0.3): + - ExpoImage (55.0.4): - ExpoModulesCore - libavif/libdav1d - SDWebImage (~> 5.21.0) - SDWebImageAVIFCoder (~> 0.11.0) - SDWebImageSVGCoder (~> 1.7.0) - SDWebImageWebPCoder (~> 0.14.6) - - ExpoImage/Tests (55.0.3): + - ExpoImage/Tests (55.0.4): - ExpoModulesCore - ExpoModulesTestCore - libavif/libdav1d @@ -214,39 +214,39 @@ PODS: - SDWebImageAVIFCoder (~> 0.11.0) - SDWebImageSVGCoder (~> 1.7.0) - SDWebImageWebPCoder (~> 0.14.6) - - ExpoImageManipulator (55.0.6): + - ExpoImageManipulator (55.0.8): - ExpoModulesCore - SDWebImageWebPCoder - - ExpoImagePicker (55.0.6): + - ExpoImagePicker (55.0.8): - ExpoModulesCore - - ExpoKeepAwake (55.0.3): + - ExpoKeepAwake (55.0.4): - ExpoModulesCore - - ExpoLinearGradient (55.0.6): + - ExpoLinearGradient (55.0.7): - ExpoModulesCore - - ExpoLinking (55.0.4): + - ExpoLinking (55.0.6): - ExpoModulesCore - - ExpoLivePhoto (55.0.6): + - ExpoLivePhoto (55.0.7): - ExpoModulesCore - - ExpoLocalAuthentication (55.0.6): + - ExpoLocalAuthentication (55.0.7): - ExpoModulesCore - - ExpoLocalization (55.0.6): + - ExpoLocalization (55.0.7): - ExpoModulesCore - - ExpoLocation (55.0.7): + - ExpoLocation (55.1.1): - ExpoModulesCore - ExpoLogBox (55.0.7): - React-Core - - ExpoMailComposer (55.0.6): + - ExpoMailComposer (55.0.7): - ExpoModulesCore - - ExpoMediaLibrary (55.0.6): + - ExpoMediaLibrary (55.0.8): - ExpoModulesCore - React-Core - - ExpoMediaLibrary/Tests (55.0.6): + - ExpoMediaLibrary/Tests (55.0.8): - ExpoModulesCore - ExpoModulesTestCore - React-Core - - ExpoMeshGradient (55.0.6): + - ExpoMeshGradient (55.0.7): - ExpoModulesCore - - ExpoModulesCore (55.0.9): + - ExpoModulesCore (55.0.10): - boost - DoubleConversion - ExpoModulesJSI @@ -277,7 +277,7 @@ PODS: - RNWorklets - SocketRocket - Yoga - - ExpoModulesCore/Tests (55.0.9): + - ExpoModulesCore/Tests (55.0.10): - boost - DoubleConversion - ExpoModulesJSI @@ -309,12 +309,12 @@ PODS: - RNWorklets - SocketRocket - Yoga - - ExpoModulesJSI (55.0.9): + - ExpoModulesJSI (55.0.10): - hermes-engine - React-Core - React-runtimescheduler - ReactCommon - - ExpoModulesJSI/Tests (55.0.9): + - ExpoModulesJSI/Tests (55.0.10): - hermes-engine - React-Core - React-runtimescheduler @@ -324,21 +324,21 @@ PODS: - Nimble (~> 13.0.0) - Quick (~> 7.3.0) - React-hermes - - ExpoNetwork (55.0.6): + - ExpoNetwork (55.0.7): - ExpoModulesCore - - ExpoNotifications (55.0.7): + - ExpoNotifications (55.0.9): - ExpoModulesCore - - ExpoNotifications/Tests (55.0.7): + - ExpoNotifications/Tests (55.0.9): - ExpoModulesCore - ExpoModulesTestCore - - ExpoPrint (55.0.6): + - ExpoPrint (55.0.7): - ExpoModulesCore - - ExpoRouter (55.0.0-preview.8): + - ExpoRouter (55.0.0-preview.9): - ExpoModulesCore - RNScreens - - ExpoScreenCapture (55.0.6): + - ExpoScreenCapture (55.0.7): - ExpoModulesCore - - ExpoScreenOrientation (55.0.6): + - ExpoScreenOrientation (55.0.7): - boost - DoubleConversion - ExpoModulesCore @@ -367,38 +367,38 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - ExpoSecureStore (55.0.6): + - ExpoSecureStore (55.0.7): - ExpoModulesCore - - ExpoSensors (55.0.6): + - ExpoSensors (55.0.7): - ExpoModulesCore - - ExpoSharing (55.0.7): + - ExpoSharing (55.0.9): - ExpoModulesCore - - ExpoSMS (55.0.6): + - ExpoSMS (55.0.7): - ExpoModulesCore - - ExpoSpeech (55.0.6): + - ExpoSpeech (55.0.7): - ExpoModulesCore - - ExpoSQLite (55.0.6): + - ExpoSQLite (55.0.8): - ExpoModulesCore - - ExpoStoreReview (55.0.6): + - ExpoStoreReview (55.0.7): - ExpoModulesCore - ExpoSymbols (55.0.4): - ExpoModulesCore - - ExpoSystemUI (55.0.6): + - ExpoSystemUI (55.0.8): - ExpoModulesCore - - ExpoTaskManager (55.0.6): + - ExpoTaskManager (55.0.8): - ExpoModulesCore - UMAppLoader - - ExpoTrackingTransparency (55.0.6): + - ExpoTrackingTransparency (55.0.7): - ExpoModulesCore - - ExpoVideo (55.0.6): + - ExpoVideo (55.0.8): - ExpoModulesCore - - ExpoVideoThumbnails (55.0.6): + - ExpoVideoThumbnails (55.0.8): - ExpoModulesCore - - ExpoWebBrowser (55.0.6): + - ExpoWebBrowser (55.0.8): - ExpoModulesCore - EXStructuredHeaders (55.0.0) - EXStructuredHeaders/Tests (55.0.0) - - EXUpdates (55.0.8): + - EXUpdates (55.0.10): - boost - DoubleConversion - EASClient @@ -432,7 +432,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - EXUpdates/Tests (55.0.8): + - EXUpdates/Tests (55.0.10): - boost - DoubleConversion - EASClient @@ -4673,76 +4673,76 @@ SPEC CHECKSUMS: CocoaLumberjack: 2f44e60eb91c176d471fdba43b9e3eae6a721947 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb EASClient: a4b8ae18e8de52019ec94d14795faac4800905f0 - EXApplication: 389a40ff6f26237c61fa7319e0f3f35aaece45a7 - EXConstants: b940de600df97c48f07abb6e45f0d3a99be825ee + EXApplication: 7fe2bd9b81c1a72f8ef4829b8e19a9eb71b7f0b3 + EXConstants: c5267438c01cbe95faba8570f8442da09f9bdd68 EXJSONUtils: 0080c14b673cfa9a6be5e3fe429768ffe3d42dfb - EXManifests: d24d63a36ae23b61911bba710a51fc244293c3dd - Expo: f1d43de2d76c36686b23b5282319c080365a10cd - expo-dev-menu: c4bfed927d4a4120dd1bbaa980ba562a8a2d8f35 + EXManifests: 9501d68451fde77248a6c138bbfbeb0c0485ebf7 + Expo: e5364721d008a7561463154068b06ca88a1ec98d + expo-dev-menu: 0b1f2e620c3cc3cea49faae851b238970155c893 expo-dev-menu-interface: bf6f816d29b45bec038080790963c635e8d588c2 - ExpoAgeRange: 7f363d60f548f1ccbf912767cf15bb52be3769e6 - ExpoAppleAuthentication: 4d2980e9200da46822df7efa497d6473e1092004 - ExpoAsset: c9b82ac7ebb4b683c0dbac99f0f01586599246b6 - ExpoAudio: 9fb0d662f9110d7ca2e1f930273cc10ceb4fbb65 - ExpoBackgroundFetch: a9faa95c99080d3fc674759a03aee69e0e366645 - ExpoBackgroundTask: 91bfe0d1297f968c7777731c479d20df7995e940 - ExpoBattery: 5cd7f4ac979aab3855bfb00c3ef740e579a29fe9 - ExpoBlob: 25183435ad2f1cfc4becfa7333c9e8776830bcf1 - ExpoBlur: 61235621c75cc2fe2b407aaab6f6d95802b8f8d3 - ExpoBrightness: a91c356b6a26ad37cb175ef530a82f23b4eefb63 - ExpoCalendar: b9c1d3064abbe17b4f70a9c733e8d9ad523d6907 - ExpoCamera: 7ef9272b8fdea2e8cc4eaf61bf1380329817db85 - ExpoCellular: 6dec80646ec8a6e21b5d1b952060f23ffd9bfd29 - ExpoClipboard: 52f737117d3d610ed15a33ff82749e29519755e7 - ExpoContacts: 65c342421f55d92f3fa551b708d24928012705c3 - ExpoCrypto: d4fb4dd49ca739878428eae9a5ad2cc11d43c0b0 - ExpoDevice: a9e189d0e62f48d02e40ed0b6c8901563c9c4a6a - ExpoDocumentPicker: d0ccbefe7833cdf822b516d6cc678ecd09b428b1 + ExpoAgeRange: 576b807fe88fd319bd977b9b185a8561abcf731e + ExpoAppleAuthentication: aa62b6530f7c52b06db39545619843525416f86d + ExpoAsset: e7ad9d22fd8099bd178d08d6c9b21fb35ca2b025 + ExpoAudio: 6c877be9fcc8be131ff347f840b847cae7aa109f + ExpoBackgroundFetch: 6791ead0cf3065c7b2ec3681e0edb3e886ee244a + ExpoBackgroundTask: ff25a9153a32077c87dff069d2e78c192c006a8f + ExpoBattery: 794467ad27c7672344d006e03a78b9d48b7a30cc + ExpoBlob: febdd0d6bd7519fa9c13e3fd4b000c9f44f51005 + ExpoBlur: 51773f4ccea98b8e7f168f4aaae4247751cd7f85 + ExpoBrightness: 82608bf4d2dc6f9df7b22d1dd660cb4d2258f56d + ExpoCalendar: 280de337555f56fe205a459dd55a34dbdc2f4a14 + ExpoCamera: 1cf543959b2d8ac6c71b75401b24686de495c05f + ExpoCellular: bec1df08f90d23a6cc6e82063c3c9801cc64c0df + ExpoClipboard: 45e47d59fcc56727f010e55142158f1d55d9c9ed + ExpoContacts: d9146f412446c0d8d20a5764cc761791b5ce3b8d + ExpoCrypto: 55bfda91fbb37f07243bcee17880f923bb67a89c + ExpoDevice: ffc55a6360f2008b556f72faa1a1d040a764afbb + ExpoDocumentPicker: d99ecb0d7404ffc934f341e90a50f395ddf4cdf0 ExpoDomWebView: d4f2ed3c3fa31d0ce89e79501a0c041c2f233189 - ExpoFileSystem: d10a0022fb62767b95f5e0a643662ff4eb1a04d5 + ExpoFileSystem: eba81beb69ca4df44a13b44e77bab259cf61e381 ExpoFont: 4d2a6dedce012c4793532cb38d561d3da95eaafd - ExpoGL: 057495da3eda0fdd9506acd4ac01a026223300d2 + ExpoGL: 335014ef49fccbfa5ff5d6c665dd412e4037f3b6 ExpoGlassEffect: ccbfe035b8894a027faf1afb848103ba23f25369 - ExpoHaptics: ba57be23201bb71371b2dfc885e37bd2b944d3f0 - ExpoImage: eb2443489a4e380def23857653e170054ecec49c - ExpoImageManipulator: 1d67e9dc9ab2f05641db11f26a776f8d5351d9e4 - ExpoImagePicker: 3f3625427d9e056df2993649b962fb56305447d1 - ExpoKeepAwake: a00c32342feeb80a3462a330dce487eb3ebcd619 - ExpoLinearGradient: 8904cc1eda0e4d4779f2d8b3b3ae38810b472f56 - ExpoLinking: 4a0852bb970e7fc81b4f55ce8cb78e9067676e43 - ExpoLivePhoto: 712f138aba8aec13c28bf2b8d7a779614b4529d7 - ExpoLocalAuthentication: 8405a08b9b5bacff858793ff76f6df9d06cb25aa - ExpoLocalization: 2f6285d6d922e39f6085f6b36a9166de9bdd40c4 - ExpoLocation: d22a370c96821346bd4f88cb54e34882219244ef + ExpoHaptics: 7f8e5f6609a8ea869781d1fa1bd0430c273e4c2e + ExpoImage: 1f943313ca8cf1a664c55715821fd4c2b4229bfb + ExpoImageManipulator: 77776dd2883d66e4ed756cd37c8668916b0d24f3 + ExpoImagePicker: 6a4b31db48f66013b50c6e34f00dd035f2c08022 + ExpoKeepAwake: 55711a70fe88a41e793bbe28543c93cb47ff265d + ExpoLinearGradient: f5a238bf8aa4f681aee43903265228e1d59ba42b + ExpoLinking: 11cf995e55ad7aea108f64196135d1ee9c4ee389 + ExpoLivePhoto: 3a958147ca8d1590b501a9539f8c7c6f067fe89a + ExpoLocalAuthentication: 74ba14ee07ed1a2a7ca9241f7d8a0f17f5fd2227 + ExpoLocalization: d319bb0689ccadb6e838baba88462d49d7f75b56 + ExpoLocation: 3790cff73cfb6cd759bde30a555035504b16e909 ExpoLogBox: 35febda08748ff213ea133f51acf976ba8c44b2c - ExpoMailComposer: 7d6ebe629a03f32b012f9092f189cc6f221ab627 - ExpoMediaLibrary: 7054ee39fa25d566700d14dd77c3cbf644cde4a5 - ExpoMeshGradient: f4f5bbe83258bc4bfd2c5ea3d20f3c3c2c3b3fe5 - ExpoModulesCore: 091729ab479b05dce6d383139072c2b1ed367b52 - ExpoModulesJSI: 53b4c102d2ac146180b9b07c7330b80e2ca4b82a + ExpoMailComposer: 8d93c49e1ce224ad28ca5db9d73c1d97f0bb50bc + ExpoMediaLibrary: 3851cc9ab0a39823e9014b71c7f5685f2d7b464d + ExpoMeshGradient: a1a72cf198d5a77c2adac5445d9bcccdce48b326 + ExpoModulesCore: 138604a918b11af442d1338e0fc05aca2195a9d4 + ExpoModulesJSI: 02998c1078c5423fc59768015ce8c7b29a2e2e20 ExpoModulesTestCore: 382d7b11f61dd661215fbe33d8ce6c95d6c09e99 - ExpoNetwork: 0db571c9722286f6722b8c4832f99036307d1071 - ExpoNotifications: 7793b6b0ee7fcb5407afaca4d51f74172c52673c - ExpoPrint: 30efae52afa23873e79250d6a72487cf95f83368 - ExpoRouter: 55f8b0982b019732548b5c24f8f5597f0fa4ae73 - ExpoScreenCapture: 68422a89203efa758273791645bf80e3e8f39664 - ExpoScreenOrientation: 8d2842e06481f3a4b9fa7e397d46df7a412b4153 - ExpoSecureStore: cdd803967596b2ab626f3c57b50c30a43a2c845a - ExpoSensors: 41f84f027428a61b1e2222ca346fc4ddb5190e3a - ExpoSharing: 8615bde0647ae4ffdd99170b17ba6919a494adbb - ExpoSMS: 9d0cd2fea7980807ecdcef2fab7cec291fdebf8f - ExpoSpeech: 4e2a54bff3458c705747a05d00c5883b495712e9 - ExpoSQLite: fe7b6982a892e971831b3131606ad7537233b7d1 - ExpoStoreReview: 6098804e7f45f9b16b81f0d9495056e675b04b0d + ExpoNetwork: f9396ed29c9cd5c0a769c8090daa2ed6ca6910d6 + ExpoNotifications: b8682b9f0178eecdd4fefb8c66ba3335f9d4be46 + ExpoPrint: 1bbe11247eaeaf593645bed9ad51a3c43c9b1e8f + ExpoRouter: e2628dd3f591744672c3608a36b8c97052dd86b3 + ExpoScreenCapture: 1f133b562e718ee17f86264b84253c36d658937d + ExpoScreenOrientation: b56ce6435799af726de50809aa178f0103f78546 + ExpoSecureStore: 2a7ac2a9ee05951d89f245192b1ec89ff9976b66 + ExpoSensors: 8d982ace77b14882832d46b083be955637f271d0 + ExpoSharing: ac23310368759f77d077477c7df4fadea333c852 + ExpoSMS: db80a6da7f7d36fb3c99a722115709433ed5a70f + ExpoSpeech: b73e5e41b755e73d2e926de74e4e4b6a2ced6fa2 + ExpoSQLite: c6562dad5c2522bf5b0a5da18133d00f6c1e84ed + ExpoStoreReview: b786c2e3ef144a9f36a6d67b5844c1006e3b34e9 ExpoSymbols: 237882b097b55437cf37b36b21d8a4892f07e782 - ExpoSystemUI: 835eb543a3ae680012de332f1142e52e3a0b5b11 - ExpoTaskManager: 281bfc28ee56ff7cc63e30e5eeacfdcbda54a28a - ExpoTrackingTransparency: 6b4ff3fb2a573acbe25d8ba31b32acb69b3dd807 - ExpoVideo: 95c0ab96be3ac5f855176ffa57f130a0d47439f7 - ExpoVideoThumbnails: d460865437f77c93ac27e48c9cb7d3306fa8c881 - ExpoWebBrowser: 7d4be19c103a67e1b8cad8f644bb52dac6ccf27c + ExpoSystemUI: cade5cc276b73d82dd4024f22388f9ada9208b20 + ExpoTaskManager: 02236bc479c788b145534d3dc9a5fd3b9a2d89aa + ExpoTrackingTransparency: b0a78e98309d998dc842c2a2d72122d2ffb09410 + ExpoVideo: 5cc9555356685596fb703d412d94a94170669cd8 + ExpoVideoThumbnails: c0420cc4ed3bd9486e3d2a5bb27e3777d9064560 + ExpoWebBrowser: 5d50d2ad55734f89e97381974adac1f588b7f168 EXStructuredHeaders: aa49a5557fa24aa61dda4ac665f3987bf3e9e35d - EXUpdates: 03e492ac675b8f50f2c2471cb366435613d5503f + EXUpdates: e3434039d94947fbc965404e45f9b19b6ac019fa EXUpdatesInterface: 29d3993072380e2d91188335ffef666bb2bfd650 fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 FBLazyVector: f1200e6ef6cf24885501668bdbb9eff4cf48843f diff --git a/apps/expo-go/package.json b/apps/expo-go/package.json index d2468138d056da..b6f360afe2e335 100644 --- a/apps/expo-go/package.json +++ b/apps/expo-go/package.json @@ -43,24 +43,24 @@ "date-fns": "^2.28.0", "dedent": "^0.7.0", "es6-error": "^4.1.1", - "expo": "~55.0.0-preview.11", - "expo-application": "~55.0.6", - "expo-asset": "~55.0.5", - "expo-blur": "~55.0.6", - "expo-camera": "~55.0.6", - "expo-constants": "~55.0.5", - "expo-device": "~55.0.7", + "expo": "~55.0.0-preview.12", + "expo-application": "~55.0.7", + "expo-asset": "~55.0.6", + "expo-blur": "~55.0.7", + "expo-camera": "~55.0.7", + "expo-constants": "~55.0.6", + "expo-device": "~55.0.8", "expo-font": "~55.0.4", - "expo-linear-gradient": "~55.0.6", - "expo-linking": "^55.0.4", - "expo-location": "~55.0.7", - "expo-notifications": "~55.0.7", - "expo-router": "~55.0.0-preview.8", - "expo-splash-screen": "~55.0.6", - "expo-store-review": "~55.0.6", - "expo-task-manager": "~55.0.6", - "expo-updates": "~55.0.8", - "expo-web-browser": "~55.0.6", + "expo-linear-gradient": "~55.0.7", + "expo-linking": "^55.0.6", + "expo-location": "~55.1.1", + "expo-notifications": "~55.0.9", + "expo-router": "~55.0.0-preview.9", + "expo-splash-screen": "~55.0.8", + "expo-store-review": "~55.0.7", + "expo-task-manager": "~55.0.8", + "expo-updates": "~55.0.10", + "expo-web-browser": "~55.0.8", "graphql": "^15.3.0", "immutable": "^4.0.0", "lottie-react-native": "^7.3.4", diff --git a/apps/jest-expo-mock-generator/package.json b/apps/jest-expo-mock-generator/package.json index b66168d2a40faf..445dee2277d539 100644 --- a/apps/jest-expo-mock-generator/package.json +++ b/apps/jest-expo-mock-generator/package.json @@ -6,8 +6,8 @@ "main": "index.js", "dependencies": { "@expo/mux": "^1.0.7", - "expo": "~55.0.0-preview.11", - "expo-clipboard": "~55.0.6", + "expo": "~55.0.0-preview.12", + "expo-clipboard": "~55.0.7", "react": "19.2.0", "react-native": "0.83.2" } diff --git a/apps/minimal-tester/package.json b/apps/minimal-tester/package.json index 84a19b280eed7a..0b0d6fbba69659 100644 --- a/apps/minimal-tester/package.json +++ b/apps/minimal-tester/package.json @@ -9,19 +9,19 @@ "eject": "expo eject" }, "dependencies": { - "expo": "~55.0.0-preview.11", - "expo-apple-authentication": "~55.0.6", - "expo-blur": "~55.0.6", - "expo-brownfield": "~55.0.8", - "expo-build-properties": "~55.0.7", - "expo-camera": "~55.0.6", - "expo-dev-client": "~55.0.6", - "expo-image": "~55.0.3", - "expo-linear-gradient": "~55.0.6", - "expo-splash-screen": "~55.0.6", + "expo": "~55.0.0-preview.12", + "expo-apple-authentication": "~55.0.7", + "expo-blur": "~55.0.7", + "expo-brownfield": "~55.0.9", + "expo-build-properties": "~55.0.8", + "expo-camera": "~55.0.7", + "expo-dev-client": "~55.0.7", + "expo-image": "~55.0.4", + "expo-linear-gradient": "~55.0.7", + "expo-splash-screen": "~55.0.8", "expo-status-bar": "~55.0.3", - "expo-updates": "~55.0.8", - "expo-video": "~55.0.6", + "expo-updates": "~55.0.10", + "expo-video": "~55.0.8", "react": "19.2.0", "react-dom": "19.2.0", "react-native": "0.83.2", diff --git a/apps/native-component-list/package.json b/apps/native-component-list/package.json index f5b3696882dcae..c7ad34cebc4249 100644 --- a/apps/native-component-list/package.json +++ b/apps/native-component-list/package.json @@ -36,13 +36,13 @@ "@expo-google-fonts/inter": "^0.2.3", "@expo/react-native-action-sheet": "^4.1.1", "@expo/styleguide-base": "^1.0.1", - "@expo/ui": "~55.0.0-preview.6", + "@expo/ui": "~55.0.0-preview.7", "@expo/vector-icons": "^15.0.2", "@lottiefiles/dotlottie-react": "^0.10.1", "@lottiefiles/react-lottie-player": "^3.5.4", "@react-native-async-storage/async-storage": "2.2.0", "@react-native-community/datetimepicker": "8.6.0", - "@expo/app-integrity": "~55.0.6", + "@expo/app-integrity": "~55.0.7", "@react-native-community/slider": "5.1.2", "@react-native-community/netinfo": "11.5.2", "@react-native-masked-view/masked-view": "0.3.2", @@ -57,79 +57,79 @@ "@shopify/react-native-skia": "2.4.18", "date-format": "^2.0.0", "deep-object-diff": "^1.1.9", - "expo": "~55.0.0-preview.11", + "expo": "~55.0.0-preview.12", "expo-2d-context": "^0.0.4", - "expo-age-range": "~0.2.8", - "expo-apple-authentication": "~55.0.6", - "expo-application": "^55.0.6", - "expo-asset": "~55.0.5", - "expo-audio": "55.0.6", - "expo-auth-session": "~55.0.4", - "expo-background-fetch": "~55.0.6", - "expo-background-task": "~55.0.6", - "expo-battery": "~55.0.6", - "expo-blob": "~55.0.6", - "expo-blur": "~55.0.6", - "expo-brightness": "~55.0.6", - "expo-calendar": "~55.0.6", - "expo-camera": "~55.0.6", - "expo-cellular": "~55.0.6", + "expo-age-range": "~0.2.9", + "expo-apple-authentication": "~55.0.7", + "expo-application": "^55.0.7", + "expo-asset": "~55.0.6", + "expo-audio": "55.0.7", + "expo-auth-session": "~55.0.5", + "expo-background-fetch": "~55.0.7", + "expo-background-task": "~55.0.7", + "expo-battery": "~55.0.7", + "expo-blob": "~55.0.7", + "expo-blur": "~55.0.7", + "expo-brightness": "~55.0.7", + "expo-calendar": "~55.0.7", + "expo-camera": "~55.0.7", + "expo-cellular": "~55.0.7", "expo-checkbox": "~55.0.3", - "expo-clipboard": "~55.0.6", - "expo-constants": "~55.0.5", - "expo-contacts": "~55.0.6", - "expo-crypto": "~55.0.6", - "expo-device": "~55.0.7", - "expo-document-picker": "~55.0.6", - "expo-file-system": "~55.0.6", + "expo-clipboard": "~55.0.7", + "expo-constants": "~55.0.6", + "expo-contacts": "~55.0.7", + "expo-crypto": "~55.0.7", + "expo-device": "~55.0.8", + "expo-document-picker": "~55.0.7", + "expo-file-system": "~55.0.8", "expo-font": "~55.0.4", - "expo-gl": "~55.0.6", + "expo-gl": "~55.0.8", "expo-glass-effect": "~55.0.6", - "expo-haptics": "~55.0.6", - "expo-image": "~55.0.3", + "expo-haptics": "~55.0.7", + "expo-image": "~55.0.4", "expo-image-loader": "^55.0.0", - "expo-image-manipulator": "~55.0.6", - "expo-image-picker": "~55.0.6", - "expo-intent-launcher": "~55.0.6", - "expo-keep-awake": "~55.0.3", - "expo-linear-gradient": "~55.0.6", - "expo-linking": "~55.0.4", - "expo-live-photo": "~55.0.6", - "expo-local-authentication": "~55.0.6", - "expo-localization": "~55.0.6", - "expo-location": "~55.0.7", - "expo-mail-composer": "~55.0.6", - "expo-maps": "55.0.6", - "expo-media-library": "~55.0.6", - "expo-mesh-gradient": "~55.0.6", + "expo-image-manipulator": "~55.0.8", + "expo-image-picker": "~55.0.8", + "expo-intent-launcher": "~55.0.7", + "expo-keep-awake": "~55.0.4", + "expo-linear-gradient": "~55.0.7", + "expo-linking": "~55.0.6", + "expo-live-photo": "~55.0.7", + "expo-local-authentication": "~55.0.7", + "expo-localization": "~55.0.7", + "expo-location": "~55.1.1", + "expo-mail-composer": "~55.0.7", + "expo-maps": "55.0.8", + "expo-media-library": "~55.0.8", + "expo-mesh-gradient": "~55.0.7", "expo-modules-test-core": "^55.0.2", - "expo-navigation-bar": "~55.0.6", - "expo-network": "~55.0.6", - "expo-notifications": "~55.0.7", - "expo-print": "~55.0.6", + "expo-navigation-bar": "~55.0.7", + "expo-network": "~55.0.7", + "expo-notifications": "~55.0.9", + "expo-print": "~55.0.7", "expo-processing": "55.0.5", "expo-progress": "^0.0.2", - "expo-screen-capture": "~55.0.6", - "expo-screen-orientation": "~55.0.6", - "expo-secure-store": "~55.0.6", - "expo-sensors": "~55.0.6", - "expo-sharing": "~55.0.7", - "expo-sms": "~55.0.6", - "expo-speech": "~55.0.6", - "expo-splash-screen": "^55.0.6", - "expo-sqlite": "~55.0.6", - "expo-standard-web-crypto": "~55.0.3", + "expo-screen-capture": "~55.0.7", + "expo-screen-orientation": "~55.0.7", + "expo-secure-store": "~55.0.7", + "expo-sensors": "~55.0.7", + "expo-sharing": "~55.0.9", + "expo-sms": "~55.0.7", + "expo-speech": "~55.0.7", + "expo-splash-screen": "^55.0.8", + "expo-sqlite": "~55.0.8", + "expo-standard-web-crypto": "~55.0.4", "expo-status-bar": "^55.0.3", - "expo-store-review": "~55.0.6", + "expo-store-review": "~55.0.7", "expo-symbols": "~55.0.4", - "expo-system-ui": "~55.0.6", - "expo-task-manager": "~55.0.6", + "expo-system-ui": "~55.0.8", + "expo-task-manager": "~55.0.8", "expo-three": "7.0.1", - "expo-tracking-transparency": "~55.0.6", - "expo-updates": "55.0.8", - "expo-video": "55.0.6", - "expo-video-thumbnails": "~55.0.6", - "expo-web-browser": "~55.0.6", + "expo-tracking-transparency": "~55.0.7", + "expo-updates": "55.0.10", + "expo-video": "55.0.8", + "expo-video-thumbnails": "~55.0.8", + "expo-web-browser": "~55.0.8", "fbemitter": "^2.1.1", "fuse.js": "^6.4.6", "gl-mat4": "^1.1.4", diff --git a/apps/native-tests/package.json b/apps/native-tests/package.json index 947e5fca91d0bd..f1e31aaebe78c7 100644 --- a/apps/native-tests/package.json +++ b/apps/native-tests/package.json @@ -9,14 +9,14 @@ "web": "expo start --web" }, "dependencies": { - "expo": "~55.0.0-preview.11", - "expo-clipboard": "55.0.6", - "expo-dev-client": "~55.0.6", - "expo-image": "~55.0.3", - "expo-media-library": "55.0.6", - "expo-notifications": "~55.0.7", - "expo-splash-screen": "~55.0.6", - "expo-updates": "55.0.8", + "expo": "~55.0.0-preview.12", + "expo-clipboard": "55.0.7", + "expo-dev-client": "~55.0.7", + "expo-image": "~55.0.4", + "expo-media-library": "55.0.8", + "expo-notifications": "~55.0.9", + "expo-splash-screen": "~55.0.8", + "expo-updates": "55.0.10", "react": "19.2.0", "react-dom": "19.2.0", "react-native": "0.83.2" diff --git a/apps/notification-tester/package.json b/apps/notification-tester/package.json index 70840344a5fcb2..70f745b596ba8a 100644 --- a/apps/notification-tester/package.json +++ b/apps/notification-tester/package.json @@ -20,18 +20,18 @@ "dependencies": { "@react-navigation/bottom-tabs": "^7.7.3", "@react-navigation/native": "^7.1.28", - "expo": "~55.0.0-preview.11", + "expo": "~55.0.0-preview.12", "expo-font": "55.0.4", - "expo-linking": "55.0.4", - "expo-localization": "55.0.6", - "expo-router": "55.0.0-preview.8", - "expo-device": "55.0.7", - "expo-constants": "55.0.5", - "expo-dev-client": "~55.0.6", - "expo-sqlite": "55.0.6", + "expo-linking": "55.0.6", + "expo-localization": "55.0.7", + "expo-router": "55.0.0-preview.9", + "expo-device": "55.0.8", + "expo-constants": "55.0.6", + "expo-dev-client": "~55.0.7", + "expo-sqlite": "55.0.8", "expo-status-bar": "55.0.3", - "expo-notifications": "55.0.7", - "expo-task-manager": "55.0.6", + "expo-notifications": "55.0.9", + "expo-task-manager": "55.0.8", "react-native-gesture-handler": "~2.30.0", "react": "19.2.0", "react-native": "0.83.2", diff --git a/apps/router-e2e/__e2e__/native-navigation/app/composition-conflicts.tsx b/apps/router-e2e/__e2e__/native-navigation/app/composition-conflicts.tsx new file mode 100644 index 00000000000000..5f5e9cefef6c4d --- /dev/null +++ b/apps/router-e2e/__e2e__/native-navigation/app/composition-conflicts.tsx @@ -0,0 +1,340 @@ +import { Stack } from 'expo-router'; +import { useState, useEffect, useRef } from 'react'; +import { View, Text, Switch, ScrollView, StyleSheet, Pressable, Alert } from 'react-native'; + +export default function CompositionConflictsScreen() { + // Competing Titles + const [showTitleA, setShowTitleA] = useState(false); + const [showTitleB, setShowTitleB] = useState(false); + + // Competing Headers + const [showHeaderA, setShowHeaderA] = useState(false); + const [showHeaderB, setShowHeaderB] = useState(false); + + // Competing Toolbars + const [showToolbarA, setShowToolbarA] = useState(false); + const [showToolbarB, setShowToolbarB] = useState(false); + + // Variant Swap + const [variant, setVariant] = useState<'A' | 'B'>('A'); + + // Rapid Toggle + const [rapidToggleRunning, setRapidToggleRunning] = useState(false); + const [rapidToggleCount, setRapidToggleCount] = useState(0); + const [rapidTitle, setRapidTitle] = useState(false); + const intervalRef = useRef | null>(null); + + useEffect(() => { + if (rapidToggleRunning) { + setRapidToggleCount(0); + intervalRef.current = setInterval(() => { + setRapidTitle((prev) => !prev); + setRapidToggleCount((prev) => prev + 1); + }, 100); + + const timeout = setTimeout(() => { + if (intervalRef.current) { + clearInterval(intervalRef.current); + intervalRef.current = null; + } + setRapidToggleRunning(false); + }, 2000); + + return () => { + clearTimeout(timeout); + if (intervalRef.current) { + clearInterval(intervalRef.current); + intervalRef.current = null; + } + }; + } + }, [rapidToggleRunning]); + + return ( + <> + + {/* Competing Titles: A is first in tree, B is second (B wins when both mounted) */} + {showTitleA && Title A} + {showTitleB && Title B} + + {/* Competing Headers */} + {showHeaderA && } + {showHeaderB && ( + + )} + + {/* Competing Toolbars (right placement) */} + {showToolbarA && ( + + Alert.alert('Toolbar A', 'Star pressed')} + /> + + )} + {showToolbarB && ( + + Alert.alert('Toolbar B', 'Heart pressed')} + /> + + )} + + {/* Variant Swap: atomically switch between two BackButton configurations */} + {variant === 'A' && Variant A} + {variant === 'B' && Variant B} + + {/* Rapid Toggle */} + {rapidTitle && Rapid!} + + + + Composition Conflicts + + Tests competing components, replacement, and rapid toggling. + + + {/* Competing Titles */} + + Competing Titles + + Last in tree wins. When both mounted, Title B should show. Removing B should promote A. + + + Title A ("Title A") + + + + Title B ("Title B") + + + + + {/* Competing Headers */} + + Competing Headers + + Header A: blue background. Header B: red background + blur. Last in tree wins. + + + Header A (blue) + + + + Header B (red + blur) + + + + + {/* Competing Toolbars */} + + Competing Right Toolbars + + Toolbar A: star icon. Toolbar B: heart icon. Last in tree wins. + + + Toolbar A (star) + + + + Toolbar B (heart) + + + + + {/* Variant Swap */} + + Variant Swap (BackButton) + + Atomic replacement: single state update unmounts one BackButton and mounts another. + + + setVariant('A')}> + + Variant A + + + setVariant('B')}> + + Variant B + + + + + Current variant: {variant} + + + + {/* Rapid Toggle */} + + Rapid Toggle Stress Test + + Toggles a Title component every 100ms for 2 seconds. Should not crash or leave stale + options. + + { + if (!rapidToggleRunning) { + setRapidToggleRunning(true); + } + }} + disabled={rapidToggleRunning}> + + {rapidToggleRunning ? 'Running...' : 'Start Rapid Toggle'} + + + + Toggle count: {rapidToggleCount} + + + Title mounted: {rapidTitle ? 'Yes' : 'No'} + + + + {/* Instructions */} + + Instructions + + 1. Competing Titles: Enable both, verify "Title B" shows. Disable B, verify "Title A" + shows. Disable both, verify route default. + + + 2. Competing Headers: Enable both, verify red+blur. Disable B, verify blue. Disable + both, verify default. + + + 3. Competing Toolbars: Enable both, verify heart icon. Disable B, verify star. Disable + both, verify no toolbar items. + + + 4. Variant Swap: Toggle between A and B, verify clean back button label transition. + + + 5. Rapid Toggle: Tap start, wait 2s. Verify no crash, final state is consistent. + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#fff', + }, + contentContainer: { + padding: 16, + paddingBottom: 32, + }, + title: { + fontSize: 24, + fontWeight: 'bold', + marginBottom: 4, + textAlign: 'center', + }, + subtitle: { + fontSize: 14, + color: '#666', + textAlign: 'center', + marginBottom: 24, + }, + section: { + marginBottom: 24, + padding: 16, + backgroundColor: '#f5f5f5', + borderRadius: 8, + }, + sectionTitle: { + fontSize: 18, + fontWeight: '600', + marginBottom: 12, + }, + switchRow: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + paddingVertical: 8, + }, + label: { + fontSize: 16, + flex: 1, + }, + note: { + fontSize: 12, + color: '#999', + fontStyle: 'italic', + marginBottom: 8, + }, + stateText: { + fontSize: 14, + marginVertical: 4, + color: '#333', + }, + instruction: { + fontSize: 14, + marginVertical: 4, + color: '#666', + }, + segmentedRow: { + flexDirection: 'row', + gap: 0, + borderRadius: 8, + overflow: 'hidden', + borderWidth: 1, + borderColor: '#007AFF', + }, + segmentButton: { + flex: 1, + paddingVertical: 10, + alignItems: 'center', + backgroundColor: '#fff', + }, + segmentButtonActive: { + backgroundColor: '#007AFF', + }, + segmentText: { + fontSize: 16, + fontWeight: '600', + color: '#007AFF', + }, + segmentTextActive: { + color: '#fff', + }, + button: { + backgroundColor: '#007AFF', + paddingVertical: 12, + paddingHorizontal: 24, + borderRadius: 8, + alignItems: 'center', + marginVertical: 8, + }, + buttonDisabled: { + backgroundColor: '#999', + }, + buttonText: { + color: '#fff', + fontSize: 16, + fontWeight: '600', + }, +}); diff --git a/apps/router-e2e/__e2e__/native-navigation/app/composition-lifecycle.tsx b/apps/router-e2e/__e2e__/native-navigation/app/composition-lifecycle.tsx new file mode 100644 index 00000000000000..4874c415714d9b --- /dev/null +++ b/apps/router-e2e/__e2e__/native-navigation/app/composition-lifecycle.tsx @@ -0,0 +1,314 @@ +import { Stack } from 'expo-router'; +import { useState } from 'react'; +import { + View, + Text, + Switch, + ScrollView, + StyleSheet, + TextInput, + Pressable, + Alert, +} from 'react-native'; + +export default function CompositionLifecycleScreen() { + // Title + const [showTitle, setShowTitle] = useState(false); + const [titleText, setTitleText] = useState('Custom Title'); + + // BackButton + const [showBackButton, setShowBackButton] = useState(false); + const [backButtonLabel, setBackButtonLabel] = useState('Back'); + + // Header + const [showHeader, setShowHeader] = useState(false); + const [headerBlur, setHeaderBlur] = useState(false); + const [headerBgColor, setHeaderBgColor] = useState(undefined); + + // Left Toolbar + const [showLeftToolbar, setShowLeftToolbar] = useState(false); + + // Right Toolbar + const [showRightToolbar, setShowRightToolbar] = useState(false); + + // SearchBar + const [showSearchBar, setShowSearchBar] = useState(false); + + return ( + <> + + {showTitle && {titleText}} + + {showBackButton && {backButtonLabel}} + + {showHeader && ( + + )} + + {showLeftToolbar && ( + + Alert.alert('Left Toolbar', 'Star pressed')} + /> + + )} + + {showRightToolbar && ( + + Alert.alert('Right Toolbar', 'Heart pressed')} + /> + + )} + + + {showSearchBar && ( + {}} /> + )} + + + Composition Lifecycle + + Tests mount/unmount of each composition component via conditional rendering. + + + {/* Title Section */} + + Title + + Show Title + + + {showTitle && ( + + Title Text + + + )} + + + {/* BackButton Section */} + + Back Button + + Show BackButton + + + {showBackButton && ( + + Label + + + )} + + + {/* Header Section */} + + Header + + Show Header + + + {showHeader && ( + <> + + Blur Effect + + + + Background Color + + setHeaderBgColor(undefined)} + /> + setHeaderBgColor('#007AFF')} + /> + setHeaderBgColor('#FF3B30')} + /> + setHeaderBgColor('#34C759')} + /> + + + + )} + + + {/* Left Toolbar Section */} + + Left Toolbar + + Show Left Toolbar + + + + + {/* Right Toolbar Section */} + + Right Toolbar + + Show Right Toolbar + + + + + {/* SearchBar Section */} + + SearchBar + + Note: SearchBar uses navigation.setOptions, not composition registry. + + + Show SearchBar + + + + + {/* Instructions */} + + Instructions + + 1. Toggle each component on/off to test mount/unmount lifecycle + + + 2. While mounted, change props (title text, back button label, bg color) to test dynamic + updates + + + 3. Unmount all components and verify header reverts to defaults + + + 4. Components use conditional rendering (not hidden prop) to fully mount/unmount + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#fff', + }, + contentContainer: { + padding: 16, + paddingBottom: 32, + }, + title: { + fontSize: 24, + fontWeight: 'bold', + marginBottom: 4, + textAlign: 'center', + }, + subtitle: { + fontSize: 14, + color: '#666', + textAlign: 'center', + marginBottom: 24, + }, + section: { + marginBottom: 24, + padding: 16, + backgroundColor: '#f5f5f5', + borderRadius: 8, + }, + sectionTitle: { + fontSize: 18, + fontWeight: '600', + marginBottom: 12, + }, + switchRow: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + paddingVertical: 8, + }, + inputRow: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + paddingVertical: 8, + }, + label: { + fontSize: 16, + flex: 1, + }, + textInput: { + borderWidth: 1, + borderColor: '#ccc', + borderRadius: 6, + padding: 8, + width: 160, + fontSize: 16, + }, + note: { + fontSize: 12, + color: '#999', + fontStyle: 'italic', + marginBottom: 8, + }, + instruction: { + fontSize: 14, + marginVertical: 4, + color: '#666', + }, + colorButtonsRow: { + flexDirection: 'row', + gap: 8, + }, + colorButton: { + width: 32, + height: 32, + borderRadius: 16, + borderColor: '#ccc', + }, +}); diff --git a/apps/router-e2e/__e2e__/native-navigation/app/composition-rerenders/[id].tsx b/apps/router-e2e/__e2e__/native-navigation/app/composition-rerenders/[id].tsx new file mode 100644 index 00000000000000..5297ebfa97c464 --- /dev/null +++ b/apps/router-e2e/__e2e__/native-navigation/app/composition-rerenders/[id].tsx @@ -0,0 +1,50 @@ +import { Link, Stack, useLocalSearchParams } from 'expo-router'; +import { useRef, useState } from 'react'; +import { Button, Text, View } from 'react-native'; + +const DETAIL_SUITES = ['Default', 'Minimal', 'Custom'] as const; + +export default function Detail() { + const { id } = useLocalSearchParams<{ id: string }>(); + const [configSuite, setConfigSuite] = useState(0); + const renderCount = useRef(0); + renderCount.current += 1; + + return ( + + {configSuite === 0 && ( + <> + {id} + Go back + + + )} + {configSuite === 1 && ( + <> + Detail: {id} + + + )} + {configSuite === 2 && ( + <> + {id} + Return + + )} + Renders: {renderCount.current} +