From 078b2149e9aeb9168c3fee4e2dd42a241b45d15d Mon Sep 17 00:00:00 2001 From: Tomasz Sapeta Date: Wed, 2 Sep 2026 12:33:43 +0200 Subject: [PATCH 01/19] [JSI][iOS] Build the xcframework and benchmarks without code coverage instrumentation (#49637) # Why When xcodebuild builds a Swift package directly, Xcode synthesizes a scheme for it, and that scheme has code coverage enabled like any new scheme. Coverage is a build setting, so when it's on, swiftc gets `-profile-generate -profile-coverage-mapping` and clang gets `-fprofile-instr-generate`, and every function and branch region in the compiled code gets a counter increment. That instrumentation ended up in two places where it doesn't belong. The xcframework script runs a plain `xcodebuild build` in Release and never asks for coverage, but the scheme's setting still applied, so the shipped framework carried counters in every function on the host call path plus the `__llvm_prf_*` and `__llvm_cov*` sections. Without them the binary shrinks from 1.33 MB to 892 KB, so the instrumentation was about a third of the shipped framework. And `pnpm benchmark` runs `xcodebuild test` in Release, where coverage is Xcode's normal default, which puts the counters inside the very code being timed and makes the numbers pessimistic. # How The xcframework script sets `CLANG_COVERAGE_MAPPING=NO` (the only setting that actually removes the flags, see the comment there), and the benchmark script passes `-enableCodeCoverage NO`. This also adds a benchmark case for the unowned-`this` host function form that `@JS` functions bind to, since the existing no-op case only covers the owning-`this` overload. # Test Plan The verbose xcodebuild log no longer shows the profiling flags, `otool -l` shows no `__llvm_prf_*` sections in the built framework, and the binary went from 1.33 MB to 892 KB. `nm` on the benchmark binary shows no `___profc_` symbols anymore, and `pnpm benchmark` runs. --- packages/expo-modules-jsi/CHANGELOG.md | 1 + .../apple/Benchmarks/BenchmarkRunner.swift | 4 +++- .../Benchmarks/HostFunctionBenchmarks.swift | 17 +++++++++++++++++ .../apple/scripts/build-xcframework.sh | 10 ++++++++++ packages/expo-modules-jsi/package.json | 2 +- 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/packages/expo-modules-jsi/CHANGELOG.md b/packages/expo-modules-jsi/CHANGELOG.md index 291f88cdfa64f6..ac6a2a5dcd28e8 100644 --- a/packages/expo-modules-jsi/CHANGELOG.md +++ b/packages/expo-modules-jsi/CHANGELOG.md @@ -21,6 +21,7 @@ - [iOS] Fixed a use-after-free when a non-owning `JavaScriptRuntime` wrapper outlives its runtime (e.g. it is captured by a task abandoned on reload): its cached `jsi::PropNameID`s were destroyed against the freed runtime when the wrapper deallocated. The teardown sweep now flushes the cache on the JavaScript thread while the runtime is still valid. ([#47927](https://github.com/expo/expo/pull/47927) by [@tsapeta](https://github.com/tsapeta)) - [iOS] `JavaScriptPromise` no longer traps when a resolve or reject call throws, which can realistically only happen against a runtime that is being torn down: a failed resolver call rejects the promise instead and a failed rejecter call is dropped. ([#47862](https://github.com/expo/expo/pull/47862) by [@tsapeta](https://github.com/tsapeta)) - [iOS] Fixed the xcframework prebuild failing under Xcode 27 due to new foreign reference ownership warnings emitted for `RuntimeScheduler` constructors. ([#49120](https://github.com/expo/expo/pull/49120) by [@tsapeta](https://github.com/tsapeta)) +- [iOS] Fixed the prebuilt `ExpoModulesJSI.xcframework` shipping with code coverage instrumentation: building through the auto-generated SwiftPM scheme made Xcode pass `-profile-generate -profile-coverage-mapping` to swiftc even for a plain Release `build`, adding a counter increment to every function on the host function call path and about 40% to the binary size. The benchmark target had the same instrumentation and now runs without it. ([#49637](https://github.com/expo/expo/pull/49637) by [@tsapeta](https://github.com/tsapeta)) ### 💡 Others diff --git a/packages/expo-modules-jsi/apple/Benchmarks/BenchmarkRunner.swift b/packages/expo-modules-jsi/apple/Benchmarks/BenchmarkRunner.swift index 6d53fbd194dafc..56a0806eb72005 100644 --- a/packages/expo-modules-jsi/apple/Benchmarks/BenchmarkRunner.swift +++ b/packages/expo-modules-jsi/apple/Benchmarks/BenchmarkRunner.swift @@ -7,7 +7,9 @@ import Testing /// Whether benchmark suites are enabled for this test run. Benchmarks are opt-in: /// regular test runs skip them. Run `pnpm benchmark`, which enables them by forwarding /// the `EXPO_BENCHMARK` environment variable to the test runner and builds the package -/// in the Release configuration so the numbers are meaningful. +/// in the Release configuration so the numbers are meaningful. It also turns code coverage +/// off: `xcodebuild test` instruments every function and closure with profile counters +/// otherwise, even in Release, which adds a few nanoseconds to each measured call. let benchmarksEnabled = ProcessInfo.processInfo.environment["EXPO_BENCHMARK"] == "1" /// Umbrella suite that all benchmarks belong to (as extensions in the other files). diff --git a/packages/expo-modules-jsi/apple/Benchmarks/HostFunctionBenchmarks.swift b/packages/expo-modules-jsi/apple/Benchmarks/HostFunctionBenchmarks.swift index 0b42b26f89dee1..29e6fdfd5af215 100644 --- a/packages/expo-modules-jsi/apple/Benchmarks/HostFunctionBenchmarks.swift +++ b/packages/expo-modules-jsi/apple/Benchmarks/HostFunctionBenchmarks.swift @@ -34,6 +34,23 @@ extension JSIBenchmarks { } } + /// Same as `noop host function`, but through the unowned-`this` closure form that + /// macro-generated `@JS` functions bind to. + @Test + func `noop unowned-this host function`() async throws { + try await benchmarkCase { runtime in + let fn = runtime.createFunction("noop") { + (this: borrowing JavaScriptUnownedValue, arguments: consuming JavaScriptValuesBuffer) in + return .undefined + } + runtime.global().setProperty("benchFn", value: fn) + let driver = try runtime.eval("(function(n) { for (var i = 0; i < n; i++) benchFn(); })").getFunction() + try benchmark("host function: noop unowned-this", runtime: runtime) { iterations in + _ = try driver.call(arguments: iterations) + } + } + } + @Test func `host function concatenating two strings`() async throws { try await benchmarkCase { runtime in diff --git a/packages/expo-modules-jsi/apple/scripts/build-xcframework.sh b/packages/expo-modules-jsi/apple/scripts/build-xcframework.sh index 7a51fe142e82e7..e261a01047799e 100755 --- a/packages/expo-modules-jsi/apple/scripts/build-xcframework.sh +++ b/packages/expo-modules-jsi/apple/scripts/build-xcframework.sh @@ -196,6 +196,14 @@ build_slice() { # SYMROOT/OBJROOT to the paths this script reads from forces products and the # generated module maps back into DERIVED_DATA_PATH. On Xcode versions that # honor -derivedDataPath these point at the same locations, so it's a no-op. + # + # Xcode turns coverage mapping on for auto-generated SwiftPM schemes, and that leaks into a + # plain `build` of a Release configuration: swiftc gets `-profile-generate + # -profile-coverage-mapping` and clang gets `-fprofile-instr-generate`. The result is a counter + # increment in every function and branch region of the shipped framework (visible as + # `___profc_*` symbols and `__llvm_prf_*` sections) plus ~40% extra binary size. Setting + # CLANG_COVERAGE_MAPPING=NO is what removes the flags; CLANG_ENABLE_CODE_COVERAGE=NO alone + # does not, and `-enableCodeCoverage NO` is rejected outside of `test`. (cd "$PACKAGE_DIR" && env -i PATH="$PATH" HOME="$HOME" PODS_ROOT="$PODS_ROOT" RN_ROOT="$RN_ROOT" \ xcodebuild \ build \ @@ -216,6 +224,8 @@ build_slice() { DEBUG_INFORMATION_FORMAT=dwarf-with-dsym \ COMPILER_INDEX_STORE_ENABLE=NO \ SWIFT_COMPILATION_MODE=wholemodule \ + CLANG_ENABLE_CODE_COVERAGE=NO \ + CLANG_COVERAGE_MAPPING=NO \ ) local product_path="${BUILD_PRODUCTS_PATH}/${build_dir_name}" diff --git a/packages/expo-modules-jsi/package.json b/packages/expo-modules-jsi/package.json index 45309dfc5f0509..66ff8abf8ee04f 100644 --- a/packages/expo-modules-jsi/package.json +++ b/packages/expo-modules-jsi/package.json @@ -11,7 +11,7 @@ } }, "scripts": { - "benchmark": "TEST_RUNNER_EXPO_BENCHMARK=1 DESTINATION=\"${DESTINATION:-platform=macOS,variant=Mac Catalyst}\" apple/scripts/test.sh -configuration Release -only-testing Benchmarks", + "benchmark": "TEST_RUNNER_EXPO_BENCHMARK=1 DESTINATION=\"${DESTINATION:-platform=macOS,variant=Mac Catalyst}\" apple/scripts/test.sh -configuration Release -only-testing Benchmarks -enableCodeCoverage NO", "build:xcframework": "apple/scripts/build-xcframework.sh", "clean": "apple/scripts/clear-caches.sh", "swift:format": "../../scripts/swift-format.sh", From 4f3f5141065bb1b6f59d878cb79a5773c743311e Mon Sep 17 00:00:00 2001 From: Phil Pluckthun Date: Wed, 2 Sep 2026 12:09:21 +0100 Subject: [PATCH 02/19] chore(workspace,tools): Update workspace dependency specifiers to use shorthands (#49628) # Why > [!NOTE] > This is a prerequisite to upgrading pnpm The versions of dependencies on `main` have drifted and not been updated against the current versions. While this is currently ignored in `pnpm@10` due to `preferWorkspacePackages: true`, this will cause an error in future versions on pnpm. In general, keeping versions in the ranges for workspace packages isn't ideal. - Packages aren't published from `main`, so the package versions in dependencies are meaningless - Backporting changes where versions have changed causes conflicts, even if they're also meaningless pnpm already updates the dependencies specifiers to match the current versions in the workspaces when we're publishing. This means we can instead use shorthand specifiers and remove version numbers from our dependency specifiers entirely. # How - Temporary script that strips versions off of all dependencies (dev/peer/regular, but no changes applied to peer anyway, which the script validated) - Update `expo-module-scripts`'s exact/loose dependency specifier check to support shorthands - Update `tools`' `updateWorkspaceProjects` task to handle shorthands too (convert to exact shorthands of `workspace:` for canaries) - Also add an explicit dependency on `updatePackageVersions` having run first # Test Plan - CI should accept changes as-is # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- packages/@expo/cli/package.json | 36 +-- packages/@expo/config-plugins/package.json | 8 +- packages/@expo/config/package.json | 8 +- packages/@expo/fingerprint/package.json | 6 +- packages/@expo/image-utils/package.json | 2 +- packages/@expo/inline-modules/package.json | 2 +- .../local-build-cache-provider/package.json | 2 +- packages/@expo/log-box/package.json | 8 +- packages/@expo/metro-config/package.json | 8 +- packages/@expo/metro-runtime/package.json | 4 +- packages/@expo/package-manager/package.json | 2 +- packages/@expo/prebuild-config/package.json | 12 +- packages/@expo/router-server/package.json | 8 +- packages/babel-preset-expo/package.json | 2 +- packages/eslint-config-expo/package.json | 2 +- packages/expo-app-metrics/package.json | 2 +- packages/expo-asset/package.json | 4 +- packages/expo-auth-session/package.json | 10 +- packages/expo-background-fetch/package.json | 2 +- packages/expo-background-task/package.json | 2 +- packages/expo-brownfield/package.json | 6 +- packages/expo-build-properties/package.json | 2 +- packages/expo-constants/package.json | 2 +- packages/expo-dev-client/package.json | 10 +- packages/expo-dev-launcher/package.json | 6 +- packages/expo-dev-menu/package.json | 2 +- packages/expo-image-manipulator/package.json | 2 +- packages/expo-image-picker/package.json | 2 +- packages/expo-insights/package.json | 2 +- packages/expo-linking/package.json | 2 +- packages/expo-location/package.json | 2 +- packages/expo-manifests/package.json | 2 +- packages/expo-module-scripts/package.json | 2 +- .../utils/depscheck/check.js | 26 +- .../expo-modules-autolinking/package.json | 2 +- packages/expo-modules-core/package.json | 2 +- packages/expo-modules-test-core/package.json | 2 +- packages/expo-notifications/package.json | 6 +- packages/expo-observe/package.json | 4 +- packages/expo-router/package.json | 22 +- packages/expo-sharing/package.json | 6 +- packages/expo-splash-screen/package.json | 4 +- .../expo-standard-web-crypto/package.json | 2 +- packages/expo-task-manager/package.json | 2 +- packages/expo-updates/package.json | 10 +- packages/expo-widgets/package.json | 4 +- packages/expo/package.json | 36 +-- packages/patch-project/package.json | 6 +- pnpm-lock.yaml | 272 +++++++++--------- tools/package.json | 2 +- .../tasks/updateWorkspaceProjects.ts | 66 +++-- 51 files changed, 341 insertions(+), 305 deletions(-) diff --git a/packages/@expo/cli/package.json b/packages/@expo/cli/package.json index 4353ddc2ce77f2..0d4ceed2ef191d 100644 --- a/packages/@expo/cli/package.json +++ b/packages/@expo/cli/package.json @@ -55,25 +55,25 @@ "dependencies": { "2g": "^0.4.3", "@expo/code-signing-certificates": "^0.0.6", - "@expo/config": "workspace:~56.0.9", - "@expo/config-plugins": "workspace:~56.0.8", + "@expo/config": "workspace:~", + "@expo/config-plugins": "workspace:~", "@expo/devcert": "^1.2.1", - "@expo/env": "workspace:~2.3.0", - "@expo/image-utils": "workspace:^0.10.1", - "@expo/inline-modules": "workspace:^0.0.10", - "@expo/json-file": "workspace:^10.2.0", - "@expo/log-box": "workspace:^56.0.12", - "@expo/log-box-utils": "workspace:^56.0.0", + "@expo/env": "workspace:~", + "@expo/image-utils": "workspace:^", + "@expo/inline-modules": "workspace:^", + "@expo/json-file": "workspace:^", + "@expo/log-box": "workspace:^", + "@expo/log-box-utils": "workspace:^", "@expo/metro": "~56.0.2", - "@expo/metro-config": "workspace:~56.0.13", - "@expo/metro-file-map": "workspace:^56.0.3", - "@expo/osascript": "workspace:^2.6.0", - "@expo/package-manager": "workspace:^1.12.0", - "@expo/plist": "workspace:^0.7.0", - "@expo/prebuild-config": "workspace:^56.0.13", - "@expo/require-utils": "workspace:^56.1.3", - "@expo/router-server": "workspace:^56.0.12", - "@expo/schema-utils": "workspace:^56.0.0", + "@expo/metro-config": "workspace:~", + "@expo/metro-file-map": "workspace:^", + "@expo/osascript": "workspace:^", + "@expo/package-manager": "workspace:^", + "@expo/plist": "workspace:^", + "@expo/prebuild-config": "workspace:^", + "@expo/require-utils": "workspace:^", + "@expo/router-server": "workspace:^", + "@expo/schema-utils": "workspace:^", "@expo/spawn-async": "^1.8.0", "@expo/ws-tunnel": "^2.0.0", "@expo/xcpretty": "^4.4.4", @@ -89,7 +89,7 @@ "compression": "^1.7.4", "connect": "^3.7.0", "dnssd-advertise": "^1.1.6", - "expo-server": "workspace:^56.0.4", + "expo-server": "workspace:^", "fetch-nodeshim": "^0.4.10", "getenv": "^2.0.0", "glob": "^13.0.0", diff --git a/packages/@expo/config-plugins/package.json b/packages/@expo/config-plugins/package.json index 3df095c0177cc6..beeec910e9ff37 100644 --- a/packages/@expo/config-plugins/package.json +++ b/packages/@expo/config-plugins/package.json @@ -89,10 +89,10 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "@expo/config-types": "workspace:^56.0.5", - "@expo/json-file": "workspace:~10.2.0", - "@expo/plist": "workspace:^0.7.0", - "@expo/require-utils": "workspace:^56.1.3", + "@expo/config-types": "workspace:^", + "@expo/json-file": "workspace:~", + "@expo/plist": "workspace:^", + "@expo/require-utils": "workspace:^", "@expo/sdk-runtime-versions": "^1.0.0", "chalk": "^4.1.2", "debug": "^4.3.5", diff --git a/packages/@expo/config/package.json b/packages/@expo/config/package.json index 842b80f7002bb4..4a12988c723256 100644 --- a/packages/@expo/config/package.json +++ b/packages/@expo/config/package.json @@ -57,10 +57,10 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "@expo/config-plugins": "workspace:~56.0.8", - "@expo/config-types": "workspace:^56.0.5", - "@expo/json-file": "workspace:^10.2.0", - "@expo/require-utils": "workspace:^56.1.3", + "@expo/config-plugins": "workspace:~", + "@expo/config-types": "workspace:^", + "@expo/json-file": "workspace:^", + "@expo/require-utils": "workspace:^", "deepmerge": "^4.3.1", "getenv": "^2.0.0", "glob": "^13.0.0", diff --git a/packages/@expo/fingerprint/package.json b/packages/@expo/fingerprint/package.json index 07dc24e2c50e2a..d8ec1b29cf6f5c 100644 --- a/packages/@expo/fingerprint/package.json +++ b/packages/@expo/fingerprint/package.json @@ -46,7 +46,7 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "@expo/env": "workspace:^2.3.0", + "@expo/env": "workspace:^", "@expo/spawn-async": "^1.8.0", "arg": "^5.0.2", "chalk": "^4.1.2", @@ -59,8 +59,8 @@ "semver": "^7.6.0" }, "devDependencies": { - "@expo/config": "workspace:~55.0.8", - "@expo/require-utils": "workspace:~55.0.2", + "@expo/config": "workspace:~", + "@expo/require-utils": "workspace:~", "@types/debug": "^4.1.5", "@types/getenv": "^1.0.0", "@types/node": "^22.14.0", diff --git a/packages/@expo/image-utils/package.json b/packages/@expo/image-utils/package.json index d03413a2a2f7cb..28d5777e1c02ea 100644 --- a/packages/@expo/image-utils/package.json +++ b/packages/@expo/image-utils/package.json @@ -36,7 +36,7 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "@expo/require-utils": "workspace:^56.1.3", + "@expo/require-utils": "workspace:^", "@expo/spawn-async": "^1.8.0", "chalk": "^4.0.0", "getenv": "^2.0.0", diff --git a/packages/@expo/inline-modules/package.json b/packages/@expo/inline-modules/package.json index 640cec9909db90..2d6ac18db7ab8b 100644 --- a/packages/@expo/inline-modules/package.json +++ b/packages/@expo/inline-modules/package.json @@ -34,7 +34,7 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "@expo/config-plugins": "workspace:~56.0.8" + "@expo/config-plugins": "workspace:~" }, "devDependencies": { "@types/jest": "^29.2.1", diff --git a/packages/@expo/local-build-cache-provider/package.json b/packages/@expo/local-build-cache-provider/package.json index 9f7a10a0e46458..b7717d7a747191 100644 --- a/packages/@expo/local-build-cache-provider/package.json +++ b/packages/@expo/local-build-cache-provider/package.json @@ -45,7 +45,7 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "@expo/config": "workspace:~56.0.9", + "@expo/config": "workspace:~", "chalk": "^4.1.2" }, "devDependencies": { diff --git a/packages/@expo/log-box/package.json b/packages/@expo/log-box/package.json index 8eadd6daff62cd..df3618e26ab404 100644 --- a/packages/@expo/log-box/package.json +++ b/packages/@expo/log-box/package.json @@ -74,10 +74,10 @@ "export:web": "expo export -p web --no-minify" }, "dependencies": { - "@expo/dom-webview": "workspace:^56.0.5", - "@expo/log-box-utils": "workspace:^56.0.0", + "@expo/dom-webview": "workspace:^", + "@expo/log-box-utils": "workspace:^", "anser": "^1.4.9", - "expo-modules-core": "workspace:~56.0.13", + "expo-modules-core": "workspace:~", "stacktrace-parser": "^0.1.10" }, "devDependencies": { @@ -94,7 +94,7 @@ "rimraf": "^6.1.2" }, "peerDependencies": { - "@expo/dom-webview": "workspace:^56.0.5", + "@expo/dom-webview": "workspace:^", "expo": "*", "react": "*", "react-native": "*" diff --git a/packages/@expo/metro-config/package.json b/packages/@expo/metro-config/package.json index ca2c70819a18f6..1d63940ce3b91d 100644 --- a/packages/@expo/metro-config/package.json +++ b/packages/@expo/metro-config/package.json @@ -75,11 +75,11 @@ "@babel/code-frame": "^7.20.0", "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", - "@expo/config": "workspace:~56.0.9", - "@expo/env": "workspace:~2.3.0", - "@expo/json-file": "workspace:~10.2.0", + "@expo/config": "workspace:~", + "@expo/env": "workspace:~", + "@expo/json-file": "workspace:~", "@expo/metro": "~56.0.2", - "@expo/require-utils": "workspace:^56.1.3", + "@expo/require-utils": "workspace:^", "@expo/spawn-async": "^1.8.0", "@jridgewell/gen-mapping": "^0.3.13", "@jridgewell/remapping": "^2.3.5", diff --git a/packages/@expo/metro-runtime/package.json b/packages/@expo/metro-runtime/package.json index 10c3ec664ae8a5..cecce7384d42bc 100644 --- a/packages/@expo/metro-runtime/package.json +++ b/packages/@expo/metro-runtime/package.json @@ -45,7 +45,7 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "@expo/log-box": "workspace:^56.0.12", + "@expo/log-box": "workspace:^", "anser": "^1.4.9", "pretty-format": "^29.7.0", "stacktrace-parser": "^0.1.10", @@ -58,7 +58,7 @@ "react-dom": "19.2.3" }, "peerDependencies": { - "@expo/log-box": "workspace:^56.0.12", + "@expo/log-box": "workspace:^", "expo": "*", "react": "*", "react-dom": "*", diff --git a/packages/@expo/package-manager/package.json b/packages/@expo/package-manager/package.json index 84168db96d556e..82cfb06ab3d863 100644 --- a/packages/@expo/package-manager/package.json +++ b/packages/@expo/package-manager/package.json @@ -40,7 +40,7 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "@expo/json-file": "workspace:^10.2.0", + "@expo/json-file": "workspace:^", "@expo/spawn-async": "^1.8.0", "chalk": "^4.0.0", "npm-package-arg": "^11.0.0", diff --git a/packages/@expo/prebuild-config/package.json b/packages/@expo/prebuild-config/package.json index 3925f01131ec0e..1fd48322345f06 100644 --- a/packages/@expo/prebuild-config/package.json +++ b/packages/@expo/prebuild-config/package.json @@ -37,14 +37,14 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "@expo/config": "workspace:~56.0.9", - "@expo/config-plugins": "workspace:~56.0.8", - "@expo/config-types": "workspace:^56.0.5", - "@expo/image-utils": "workspace:^0.10.1", - "@expo/json-file": "workspace:^10.2.0", + "@expo/config": "workspace:~", + "@expo/config-plugins": "workspace:~", + "@expo/config-types": "workspace:^", + "@expo/image-utils": "workspace:^", + "@expo/json-file": "workspace:^", "@react-native/normalize-colors": "0.87.0", "debug": "^4.3.1", - "expo-modules-autolinking": "workspace:~56.0.13", + "expo-modules-autolinking": "workspace:~", "resolve-from": "^5.0.0", "semver": "^7.6.0" }, diff --git a/packages/@expo/router-server/package.json b/packages/@expo/router-server/package.json index 38368334b262f1..bed5a87923f9f8 100644 --- a/packages/@expo/router-server/package.json +++ b/packages/@expo/router-server/package.json @@ -53,12 +53,12 @@ "react-server-dom-webpack": "~19.0.8" }, "peerDependencies": { - "@expo/metro-runtime": "workspace:^56.0.13", + "@expo/metro-runtime": "workspace:^", "expo": "*", - "expo-constants": "workspace:^56.0.16", - "expo-font": "workspace:^56.0.5", + "expo-constants": "workspace:^", + "expo-font": "workspace:^", "expo-router": "*", - "expo-server": "workspace:^56.0.4", + "expo-server": "workspace:^", "react": "*", "react-dom": "*", "react-server-dom-webpack": "~19.0.1 || ~19.1.2 || ~19.2.1" diff --git a/packages/babel-preset-expo/package.json b/packages/babel-preset-expo/package.json index d4070657dae989..1039b603cf1e47 100644 --- a/packages/babel-preset-expo/package.json +++ b/packages/babel-preset-expo/package.json @@ -103,7 +103,7 @@ "peerDependencies": { "@babel/runtime": "^7.20.0", "expo": "*", - "expo-widgets": "workspace:^56.0.15", + "expo-widgets": "workspace:^", "react-refresh": ">=0.14.0 <1.0.0" }, "peerDependenciesMeta": { diff --git a/packages/eslint-config-expo/package.json b/packages/eslint-config-expo/package.json index fe5f535bdfd4be..4903b5274abd0e 100644 --- a/packages/eslint-config-expo/package.json +++ b/packages/eslint-config-expo/package.json @@ -41,7 +41,7 @@ "@typescript-eslint/eslint-plugin": "^8.59.0", "@typescript-eslint/parser": "^8.59.0", "eslint-import-resolver-typescript": "^3.6.3", - "eslint-plugin-expo": "workspace:^1.0.1", + "eslint-plugin-expo": "workspace:^", "eslint-plugin-import": "^2.30.0", "eslint-plugin-react": "^7.37.3", "eslint-plugin-react-hooks": "^7.0.0", diff --git a/packages/expo-app-metrics/package.json b/packages/expo-app-metrics/package.json index a149221dd26e55..f2974454f2ba2c 100644 --- a/packages/expo-app-metrics/package.json +++ b/packages/expo-app-metrics/package.json @@ -44,7 +44,7 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "expo-updates-interface": "workspace:~56.0.1" + "expo-updates-interface": "workspace:~" }, "devDependencies": { "@testing-library/react-native": "^13.3.0", diff --git a/packages/expo-asset/package.json b/packages/expo-asset/package.json index c27016a17ef898..63e8d4948c70ea 100644 --- a/packages/expo-asset/package.json +++ b/packages/expo-asset/package.json @@ -62,8 +62,8 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "@expo/image-utils": "workspace:^0.10.1", - "expo-constants": "workspace:~56.0.16" + "@expo/image-utils": "workspace:^", + "expo-constants": "workspace:~" }, "devDependencies": { "@testing-library/react-native": "^13.3.0", diff --git a/packages/expo-auth-session/package.json b/packages/expo-auth-session/package.json index 0906066e1f069f..a39f4f63dcc9dd 100644 --- a/packages/expo-auth-session/package.json +++ b/packages/expo-auth-session/package.json @@ -94,11 +94,11 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "expo-application": "workspace:~56.0.3", - "expo-constants": "workspace:~56.0.16", - "expo-crypto": "workspace:~56.0.4", - "expo-linking": "workspace:~56.0.12", - "expo-web-browser": "workspace:~56.0.5", + "expo-application": "workspace:~", + "expo-constants": "workspace:~", + "expo-crypto": "workspace:~", + "expo-linking": "workspace:~", + "expo-web-browser": "workspace:~", "invariant": "^2.2.4" }, "devDependencies": { diff --git a/packages/expo-background-fetch/package.json b/packages/expo-background-fetch/package.json index ccf2421f605cc2..f6c5b58e1924d9 100644 --- a/packages/expo-background-fetch/package.json +++ b/packages/expo-background-fetch/package.json @@ -37,7 +37,7 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "expo-task-manager": "workspace:~56.0.15" + "expo-task-manager": "workspace:~" }, "devDependencies": { "@types/jest": "^29.2.1", diff --git a/packages/expo-background-task/package.json b/packages/expo-background-task/package.json index 9a23f4200867ff..6e0abe22edc8ce 100644 --- a/packages/expo-background-task/package.json +++ b/packages/expo-background-task/package.json @@ -34,7 +34,7 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "expo-task-manager": "workspace:~56.0.15" + "expo-task-manager": "workspace:~" }, "devDependencies": { "@types/jest": "^29.2.1", diff --git a/packages/expo-brownfield/package.json b/packages/expo-brownfield/package.json index 1a5685a8b7231c..13dbcc209fc7fa 100644 --- a/packages/expo-brownfield/package.json +++ b/packages/expo-brownfield/package.json @@ -54,13 +54,13 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "@expo/env": "workspace:~2.3.0", + "@expo/env": "workspace:~", "@expo/spawn-async": "^1.8.0", "chalk": "^4.1.2", "commander": "^14.0.3", "diff": "^5.2.0", - "expo-build-properties": "workspace:~56.0.15", - "expo-manifests": "workspace:~56.0.4", + "expo-build-properties": "workspace:~", + "expo-manifests": "workspace:~", "ora": "^5.4.1", "prompts": "^2.4.2" }, diff --git a/packages/expo-build-properties/package.json b/packages/expo-build-properties/package.json index 2f6751cee4483f..8ab2a6fd7699a6 100644 --- a/packages/expo-build-properties/package.json +++ b/packages/expo-build-properties/package.json @@ -44,7 +44,7 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "@expo/schema-utils": "workspace:^56.0.0", + "@expo/schema-utils": "workspace:^", "resolve-from": "^5.0.0", "semver": "^7.6.0" }, diff --git a/packages/expo-constants/package.json b/packages/expo-constants/package.json index f351432520a503..798e43900be7b7 100644 --- a/packages/expo-constants/package.json +++ b/packages/expo-constants/package.json @@ -59,7 +59,7 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "@expo/env": "workspace:~2.3.0" + "@expo/env": "workspace:~" }, "devDependencies": { "@types/node": "^22.14.0", diff --git a/packages/expo-dev-client/package.json b/packages/expo-dev-client/package.json index 0449d61455c3e0..a678d6b9f54450 100644 --- a/packages/expo-dev-client/package.json +++ b/packages/expo-dev-client/package.json @@ -35,11 +35,11 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "expo-dev-launcher": "workspace:~56.0.16", - "expo-dev-menu": "workspace:~56.0.15", - "expo-dev-menu-interface": "workspace:~56.0.0", - "expo-manifests": "workspace:~56.0.4", - "expo-updates-interface": "workspace:~56.0.1" + "expo-dev-launcher": "workspace:~", + "expo-dev-menu": "workspace:~", + "expo-dev-menu-interface": "workspace:~", + "expo-manifests": "workspace:~", + "expo-updates-interface": "workspace:~" }, "devDependencies": { "@types/jest": "^29.2.1", diff --git a/packages/expo-dev-launcher/package.json b/packages/expo-dev-launcher/package.json index 923d88803c3684..f716e8cb829406 100644 --- a/packages/expo-dev-launcher/package.json +++ b/packages/expo-dev-launcher/package.json @@ -22,9 +22,9 @@ "license": "MIT", "homepage": "https://docs.expo.dev", "dependencies": { - "@expo/schema-utils": "workspace:^56.0.0", - "expo-dev-menu": "workspace:~56.0.15", - "expo-manifests": "workspace:~56.0.4" + "@expo/schema-utils": "workspace:^", + "expo-dev-menu": "workspace:~", + "expo-manifests": "workspace:~" }, "peerDependencies": { "expo": "*", diff --git a/packages/expo-dev-menu/package.json b/packages/expo-dev-menu/package.json index efde39e3cef837..2becae63d3970c 100644 --- a/packages/expo-dev-menu/package.json +++ b/packages/expo-dev-menu/package.json @@ -35,7 +35,7 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "expo-dev-menu-interface": "workspace:~56.0.0" + "expo-dev-menu-interface": "workspace:~" }, "devDependencies": { "@babel/preset-typescript": "^7.7.4", diff --git a/packages/expo-image-manipulator/package.json b/packages/expo-image-manipulator/package.json index 58d280ca1faf94..8788a2e3345ef2 100644 --- a/packages/expo-image-manipulator/package.json +++ b/packages/expo-image-manipulator/package.json @@ -43,7 +43,7 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "expo-image-loader": "workspace:~56.0.3" + "expo-image-loader": "workspace:~" }, "devDependencies": { "expo": "workspace:*", diff --git a/packages/expo-image-picker/package.json b/packages/expo-image-picker/package.json index 886ec8d50db37a..9eca124e16e4ba 100644 --- a/packages/expo-image-picker/package.json +++ b/packages/expo-image-picker/package.json @@ -36,7 +36,7 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "expo-image-loader": "workspace:~56.0.3" + "expo-image-loader": "workspace:~" }, "devDependencies": { "@testing-library/react": "^16.3.0", diff --git a/packages/expo-insights/package.json b/packages/expo-insights/package.json index f1ddb5d9449029..e560c30bd8e893 100644 --- a/packages/expo-insights/package.json +++ b/packages/expo-insights/package.json @@ -31,7 +31,7 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "expo-eas-client": "workspace:~56.0.0" + "expo-eas-client": "workspace:~" }, "devDependencies": { "expo": "workspace:*", diff --git a/packages/expo-linking/package.json b/packages/expo-linking/package.json index 2a40ecf8cced38..2511b847dfed27 100644 --- a/packages/expo-linking/package.json +++ b/packages/expo-linking/package.json @@ -52,7 +52,7 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "expo-constants": "workspace:~56.0.16", + "expo-constants": "workspace:~", "invariant": "^2.2.4" }, "devDependencies": { diff --git a/packages/expo-location/package.json b/packages/expo-location/package.json index 4ed638445a7c96..03461a07513eda 100644 --- a/packages/expo-location/package.json +++ b/packages/expo-location/package.json @@ -39,7 +39,7 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "@expo/image-utils": "workspace:^0.10.1" + "@expo/image-utils": "workspace:^" }, "devDependencies": { "@types/jest": "^29.2.1", diff --git a/packages/expo-manifests/package.json b/packages/expo-manifests/package.json index c0fbeb43c163c6..0ad1f1d7f788d3 100644 --- a/packages/expo-manifests/package.json +++ b/packages/expo-manifests/package.json @@ -43,7 +43,7 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "expo-json-utils": "workspace:~56.0.0" + "expo-json-utils": "workspace:~" }, "devDependencies": { "expo-module-scripts": "workspace:*" diff --git a/packages/expo-module-scripts/package.json b/packages/expo-module-scripts/package.json index 366dacd1b03a91..642733c1b953ab 100644 --- a/packages/expo-module-scripts/package.json +++ b/packages/expo-module-scripts/package.json @@ -100,7 +100,7 @@ "@types/jest": "^29.2.1", "commander": "^12.1.0", "glob": "^13.0.0", - "jest-expo": "workspace:~56.0.4", + "jest-expo": "workspace:~", "jest-snapshot-prettier": "npm:prettier@^2", "jest-watch-typeahead": "2.2.1", "oxlint-config-universe": "^0.2.0", diff --git a/packages/expo-module-scripts/utils/depscheck/check.js b/packages/expo-module-scripts/utils/depscheck/check.js index 7897b1ac93cbef..7f2aacc2a42d5e 100644 --- a/packages/expo-module-scripts/utils/depscheck/check.js +++ b/packages/expo-module-scripts/utils/depscheck/check.js @@ -302,12 +302,8 @@ function createExternalImportValidator(packageName, packageJson) { seenDependencyName.add(ref.packageName); const dependency = dependencyMap.get(ref.packageName); if (dependency && dependency.kind !== DependencyKind.Dev) { - let { versionRange } = dependency; - if (versionRange.startsWith(WORKSPACE_SPECIFIER)) { - versionRange = versionRange.slice(WORKSPACE_SPECIFIER.length); - } - // NOTE: Loose check to see if a dependency is pinned - const isLoose = /[~|^><=](\s*\d+\.)/.test(versionRange) || versionRange === '*'; + const { versionRange } = dependency; + const isLoose = isLooseDependencyVersionRange(versionRange); const isPrerelease = versionRange.includes('-'); const isPinned = /^\d+\.\d+\.\d+$/.test(versionRange); return !isPrerelease && (!isLoose || isPinned); @@ -317,6 +313,24 @@ function createExternalImportValidator(packageName, packageJson) { }; } +/** + * Loosely checks whether a dependency range allows more than one version + * + * @param {string} versionRange + * @returns {boolean} + */ +function isLooseDependencyVersionRange(versionRange) { + if (versionRange.startsWith(WORKSPACE_SPECIFIER)) { + versionRange = versionRange.slice(WORKSPACE_SPECIFIER.length); + } + return ( + versionRange === '*' || + versionRange === '~' || + versionRange === '^' || + /[~|^><=](\s*\d+\.)/.test(versionRange) + ); +} + /** @type {DepsLogger} */ const defaultLogger = { warn: (message) => console.warn(message), diff --git a/packages/expo-modules-autolinking/package.json b/packages/expo-modules-autolinking/package.json index 9129ce3454660f..86491a6157cc2c 100644 --- a/packages/expo-modules-autolinking/package.json +++ b/packages/expo-modules-autolinking/package.json @@ -59,7 +59,7 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "@expo/require-utils": "workspace:^56.1.3", + "@expo/require-utils": "workspace:^", "@expo/spawn-async": "^1.8.0", "chalk": "^4.1.0", "commander": "^7.2.0" diff --git a/packages/expo-modules-core/package.json b/packages/expo-modules-core/package.json index b13b924ab86ac6..42d387022399cf 100644 --- a/packages/expo-modules-core/package.json +++ b/packages/expo-modules-core/package.json @@ -76,7 +76,7 @@ }, "dependencies": { "@expo/expo-modules-macros-plugin": "0.8.0", - "expo-modules-jsi": "workspace:~56.0.7", + "expo-modules-jsi": "workspace:~", "invariant": "^2.2.4" }, "devDependencies": { diff --git a/packages/expo-modules-test-core/package.json b/packages/expo-modules-test-core/package.json index 376ba30a649535..fe2b2b3e835c51 100644 --- a/packages/expo-modules-test-core/package.json +++ b/packages/expo-modules-test-core/package.json @@ -34,7 +34,7 @@ }, "dependencies": { "@types/node": "^22.14.0", - "expo-type-information": "workspace:^0.0.5", + "expo-type-information": "workspace:^", "glob": "^13.0.0", "xml-js": "^1.6.11", "yaml": "^2.8.3" diff --git a/packages/expo-notifications/package.json b/packages/expo-notifications/package.json index 9c342393755d8e..631646f1d193f0 100644 --- a/packages/expo-notifications/package.json +++ b/packages/expo-notifications/package.json @@ -38,11 +38,11 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "@expo/image-utils": "workspace:^0.10.1", + "@expo/image-utils": "workspace:^", "abort-controller": "^3.0.0", "badgin": "^1.1.5", - "expo-application": "workspace:~56.0.3", - "expo-constants": "workspace:~56.0.16" + "expo-application": "workspace:~", + "expo-constants": "workspace:~" }, "devDependencies": { "@types/jest": "^29.2.1", diff --git a/packages/expo-observe/package.json b/packages/expo-observe/package.json index adebbfd8ec45e1..822c8f237e6411 100644 --- a/packages/expo-observe/package.json +++ b/packages/expo-observe/package.json @@ -54,8 +54,8 @@ "typecheck": "tsc -p tsconfig.json" }, "dependencies": { - "expo-app-metrics": "workspace:~56.0.14", - "expo-eas-client": "workspace:~56.0.0" + "expo-app-metrics": "workspace:~", + "expo-eas-client": "workspace:~" }, "devDependencies": { "@react-navigation/native": "^7.1.33", diff --git a/packages/expo-router/package.json b/packages/expo-router/package.json index d885495bca3d2a..0164c75f3dea2f 100644 --- a/packages/expo-router/package.json +++ b/packages/expo-router/package.json @@ -280,10 +280,10 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "@expo/log-box": "workspace:^56.0.12", - "@expo/metro-runtime": "workspace:^56.0.13", - "@expo/schema-utils": "workspace:^56.0.0", - "@expo/ui": "workspace:^56.0.14", + "@expo/log-box": "workspace:^", + "@expo/metro-runtime": "workspace:^", + "@expo/schema-utils": "workspace:^", + "@expo/ui": "workspace:^", "@radix-ui/react-slot": "^1.2.0", "@radix-ui/react-tabs": "^1.1.12", "@react-native-masked-view/masked-view": "^0.3.2", @@ -291,9 +291,9 @@ "color": "^4.2.3", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", - "expo-glass-effect": "workspace:^56.0.4", - "expo-server": "workspace:^56.0.4", - "expo-symbols": "workspace:^56.0.5", + "expo-glass-effect": "workspace:^", + "expo-server": "workspace:^", + "expo-symbols": "workspace:^", "fast-deep-equal": "^3.1.3", "invariant": "^2.2.4", "nanoid": "^3.3.8", @@ -334,12 +334,12 @@ "react-server-dom-webpack": "~19.0.8" }, "peerDependencies": { - "@expo/log-box": "workspace:^56.0.12", - "@expo/metro-runtime": "workspace:^56.0.13", + "@expo/log-box": "workspace:^", + "@expo/metro-runtime": "workspace:^", "@testing-library/react-native": ">= 13.2.0", "expo": "*", - "expo-constants": "workspace:^56.0.16", - "expo-linking": "workspace:^56.0.12", + "expo-constants": "workspace:^", + "expo-linking": "workspace:^", "react": "*", "react-dom": "*", "react-native": "*", diff --git a/packages/expo-sharing/package.json b/packages/expo-sharing/package.json index 7d373004f449e1..f67fcd02110946 100644 --- a/packages/expo-sharing/package.json +++ b/packages/expo-sharing/package.json @@ -34,9 +34,9 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "@expo/config-plugins": "workspace:^56.0.8", - "@expo/config-types": "workspace:^56.0.5", - "@expo/plist": "workspace:^0.7.0" + "@expo/config-plugins": "workspace:^", + "@expo/config-types": "workspace:^", + "@expo/plist": "workspace:^" }, "devDependencies": { "@types/jest": "^29.2.1", diff --git a/packages/expo-splash-screen/package.json b/packages/expo-splash-screen/package.json index 46cfbebffd7ab5..08015a9249049a 100644 --- a/packages/expo-splash-screen/package.json +++ b/packages/expo-splash-screen/package.json @@ -48,8 +48,8 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "@expo/config-plugins": "workspace:~56.0.8", - "@expo/image-utils": "workspace:^0.10.1", + "@expo/config-plugins": "workspace:~", + "@expo/image-utils": "workspace:^", "xml2js": "0.6.0" }, "devDependencies": { diff --git a/packages/expo-standard-web-crypto/package.json b/packages/expo-standard-web-crypto/package.json index 852bb7aefeeaa7..f85cda51c29040 100644 --- a/packages/expo-standard-web-crypto/package.json +++ b/packages/expo-standard-web-crypto/package.json @@ -33,7 +33,7 @@ "expo-module-scripts": "workspace:*" }, "peerDependencies": { - "expo-crypto": "workspace:^56.0.4" + "expo-crypto": "workspace:^" }, "jest": { "preset": "expo-module-scripts" diff --git a/packages/expo-task-manager/package.json b/packages/expo-task-manager/package.json index 1e575ae7553049..67c5d98d20f4da 100644 --- a/packages/expo-task-manager/package.json +++ b/packages/expo-task-manager/package.json @@ -35,7 +35,7 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "unimodules-app-loader": "workspace:~56.0.0" + "unimodules-app-loader": "workspace:~" }, "devDependencies": { "@types/jest": "^29.2.1", diff --git a/packages/expo-updates/package.json b/packages/expo-updates/package.json index 9db11a40544ca1..9c1140638af89b 100644 --- a/packages/expo-updates/package.json +++ b/packages/expo-updates/package.json @@ -61,15 +61,15 @@ }, "dependencies": { "@expo/code-signing-certificates": "^0.0.6", - "@expo/plist": "workspace:^0.7.0", + "@expo/plist": "workspace:^", "@expo/spawn-async": "^1.8.0", "arg": "^4.1.0", "chalk": "^4.1.2", "debug": "^4.3.4", - "expo-eas-client": "workspace:~56.0.0", - "expo-manifests": "workspace:~56.0.4", - "expo-structured-headers": "workspace:~56.0.0", - "expo-updates-interface": "workspace:~56.0.1", + "expo-eas-client": "workspace:~", + "expo-manifests": "workspace:~", + "expo-structured-headers": "workspace:~", + "expo-updates-interface": "workspace:~", "getenv": "^2.0.0", "glob": "^13.0.0", "ignore": "^5.3.1", diff --git a/packages/expo-widgets/package.json b/packages/expo-widgets/package.json index 943990f74e7abe..42722056351e47 100644 --- a/packages/expo-widgets/package.json +++ b/packages/expo-widgets/package.json @@ -40,8 +40,8 @@ "typecheck": "tsc -b tsconfig.all.json" }, "dependencies": { - "@expo/plist": "workspace:^0.7.0", - "@expo/ui": "workspace:~56.0.14" + "@expo/plist": "workspace:^", + "@expo/ui": "workspace:~" }, "devDependencies": { "@expo/spawn-async": "^1.8.0", diff --git a/packages/expo/package.json b/packages/expo/package.json index 8589ca8c902715..1fdc7267abe2c8 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -208,26 +208,26 @@ }, "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "workspace:^56.1.12", - "@expo/config": "workspace:~56.0.9", - "@expo/config-plugins": "workspace:~56.0.8", - "@expo/devtools": "workspace:~56.0.2", - "@expo/dom-webview": "workspace:~56.0.5", - "@expo/fingerprint": "workspace:^0.19.3", - "@expo/local-build-cache-provider": "workspace:^56.0.8", - "@expo/log-box": "workspace:^56.0.12", - "@expo/log-box-utils": "workspace:^56.0.0", + "@expo/cli": "workspace:^", + "@expo/config": "workspace:~", + "@expo/config-plugins": "workspace:~", + "@expo/devtools": "workspace:~", + "@expo/dom-webview": "workspace:~", + "@expo/fingerprint": "workspace:^", + "@expo/local-build-cache-provider": "workspace:^", + "@expo/log-box": "workspace:^", + "@expo/log-box-utils": "workspace:^", "@expo/metro": "~56.0.2", - "@expo/metro-config": "workspace:~56.0.13", + "@expo/metro-config": "workspace:~", "@ungap/structured-clone": "^1.3.0", - "babel-preset-expo": "workspace:~56.0.13", - "expo-asset": "workspace:~56.0.15", - "expo-constants": "workspace:~56.0.16", - "expo-file-system": "workspace:~56.0.7", - "expo-font": "workspace:~56.0.5", - "expo-keep-awake": "workspace:~56.0.3", - "expo-modules-autolinking": "workspace:~56.0.13", - "expo-modules-core": "workspace:~56.0.13", + "babel-preset-expo": "workspace:~", + "expo-asset": "workspace:~", + "expo-constants": "workspace:~", + "expo-file-system": "workspace:~", + "expo-font": "workspace:~", + "expo-keep-awake": "workspace:~", + "expo-modules-autolinking": "workspace:~", + "expo-modules-core": "workspace:~", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", "whatwg-url-minimum": "^0.2.0" diff --git a/packages/patch-project/package.json b/packages/patch-project/package.json index 656330ef456e4d..802121f2859aa5 100644 --- a/packages/patch-project/package.json +++ b/packages/patch-project/package.json @@ -44,9 +44,9 @@ }, "dependencies": { "@bacons/xcode": "1.0.0-alpha.24", - "@expo/config": "workspace:~56.0.9", - "@expo/config-plugins": "workspace:~56.0.8", - "@expo/env": "workspace:~2.3.0", + "@expo/config": "workspace:~", + "@expo/config-plugins": "workspace:~", + "@expo/env": "workspace:~", "@expo/spawn-async": "^1.8.0", "arg": "5.0.2", "chalk": "^4.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 678180340529bd..fa446d8f936985 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1836,61 +1836,61 @@ importers: specifier: ^0.0.6 version: 0.0.6 '@expo/config': - specifier: workspace:~56.0.9 + specifier: workspace:~ version: link:../config '@expo/config-plugins': - specifier: workspace:~56.0.8 + specifier: workspace:~ version: link:../config-plugins '@expo/devcert': specifier: ^1.2.1 version: 1.2.1 '@expo/env': - specifier: workspace:~2.3.0 + specifier: workspace:~ version: link:../env '@expo/image-utils': - specifier: workspace:^0.10.1 + specifier: workspace:^ version: link:../image-utils '@expo/inline-modules': - specifier: workspace:^0.0.10 + specifier: workspace:^ version: link:../inline-modules '@expo/json-file': - specifier: workspace:^10.2.0 + specifier: workspace:^ version: link:../json-file '@expo/log-box': - specifier: workspace:^56.0.12 + specifier: workspace:^ version: link:../log-box '@expo/log-box-utils': - specifier: workspace:^56.0.0 + specifier: workspace:^ version: link:../log-box-utils '@expo/metro': specifier: ~56.0.2 version: 56.0.2 '@expo/metro-config': - specifier: workspace:~56.0.13 + specifier: workspace:~ version: link:../metro-config '@expo/metro-file-map': - specifier: workspace:^56.0.3 + specifier: workspace:^ version: link:../metro-file-map '@expo/osascript': - specifier: workspace:^2.6.0 + specifier: workspace:^ version: link:../osascript '@expo/package-manager': - specifier: workspace:^1.12.0 + specifier: workspace:^ version: link:../package-manager '@expo/plist': - specifier: workspace:^0.7.0 + specifier: workspace:^ version: link:../plist '@expo/prebuild-config': - specifier: workspace:^56.0.13 + specifier: workspace:^ version: link:../prebuild-config '@expo/require-utils': - specifier: workspace:^56.1.3 + specifier: workspace:^ version: link:../require-utils '@expo/router-server': - specifier: workspace:^56.0.12 + specifier: workspace:^ version: link:../router-server '@expo/schema-utils': - specifier: workspace:^56.0.0 + specifier: workspace:^ version: link:../schema-utils '@expo/spawn-async': specifier: ^1.8.0 @@ -1941,7 +1941,7 @@ importers: specifier: '*' version: link:../../expo expo-server: - specifier: workspace:^56.0.4 + specifier: workspace:^ version: link:../../expo-server fetch-nodeshim: specifier: ^0.4.10 @@ -2164,16 +2164,16 @@ importers: packages/@expo/config: dependencies: '@expo/config-plugins': - specifier: workspace:~56.0.8 + specifier: workspace:~ version: link:../config-plugins '@expo/config-types': - specifier: workspace:^56.0.5 + specifier: workspace:^ version: link:../config-types '@expo/json-file': - specifier: workspace:^10.2.0 + specifier: workspace:^ version: link:../json-file '@expo/require-utils': - specifier: workspace:^56.1.3 + specifier: workspace:^ version: link:../require-utils deepmerge: specifier: ^4.3.1 @@ -2213,16 +2213,16 @@ importers: packages/@expo/config-plugins: dependencies: '@expo/config-types': - specifier: workspace:^56.0.5 + specifier: workspace:^ version: link:../config-types '@expo/json-file': - specifier: workspace:~10.2.0 + specifier: workspace:~ version: link:../json-file '@expo/plist': - specifier: workspace:^0.7.0 + specifier: workspace:^ version: link:../plist '@expo/require-utils': - specifier: workspace:^56.1.3 + specifier: workspace:^ version: link:../require-utils '@expo/sdk-runtime-versions': specifier: ^1.0.0 @@ -2376,7 +2376,7 @@ importers: packages/@expo/fingerprint: dependencies: '@expo/env': - specifier: workspace:^2.3.0 + specifier: workspace:^ version: link:../env '@expo/spawn-async': specifier: ^1.8.0 @@ -2410,10 +2410,10 @@ importers: version: 7.8.5 devDependencies: '@expo/config': - specifier: workspace:~55.0.8 + specifier: workspace:~ version: link:../config '@expo/require-utils': - specifier: workspace:~55.0.2 + specifier: workspace:~ version: link:../require-utils '@types/debug': specifier: ^4.1.5 @@ -2449,7 +2449,7 @@ importers: packages/@expo/image-utils: dependencies: '@expo/require-utils': - specifier: workspace:^56.1.3 + specifier: workspace:^ version: link:../require-utils '@expo/spawn-async': specifier: ^1.8.0 @@ -2489,7 +2489,7 @@ importers: packages/@expo/inline-modules: dependencies: '@expo/config-plugins': - specifier: workspace:~56.0.8 + specifier: workspace:~ version: link:../config-plugins devDependencies: '@types/jest': @@ -2533,7 +2533,7 @@ importers: packages/@expo/local-build-cache-provider: dependencies: '@expo/config': - specifier: workspace:~56.0.9 + specifier: workspace:~ version: link:../config chalk: specifier: ^4.1.2 @@ -2552,10 +2552,10 @@ importers: packages/@expo/log-box: dependencies: '@expo/dom-webview': - specifier: workspace:^56.0.5 + specifier: workspace:^ version: link:../dom-webview '@expo/log-box-utils': - specifier: workspace:^56.0.0 + specifier: workspace:^ version: link:../log-box-utils anser: specifier: ^1.4.9 @@ -2564,7 +2564,7 @@ importers: specifier: '*' version: link:../../expo expo-modules-core: - specifier: workspace:~56.0.13 + specifier: workspace:~ version: link:../../expo-modules-core stacktrace-parser: specifier: ^0.1.10 @@ -2631,19 +2631,19 @@ importers: specifier: ^7.20.5 version: 7.29.7 '@expo/config': - specifier: workspace:~56.0.9 + specifier: workspace:~ version: link:../config '@expo/env': - specifier: workspace:~2.3.0 + specifier: workspace:~ version: link:../env '@expo/json-file': - specifier: workspace:~10.2.0 + specifier: workspace:~ version: link:../json-file '@expo/metro': specifier: ~56.0.2 version: 56.0.2 '@expo/require-utils': - specifier: workspace:^56.1.3 + specifier: workspace:^ version: link:../require-utils '@expo/spawn-async': specifier: ^1.8.0 @@ -2795,7 +2795,7 @@ importers: packages/@expo/metro-runtime: dependencies: '@expo/log-box': - specifier: workspace:^56.0.12 + specifier: workspace:^ version: link:../log-box anser: specifier: ^1.4.9 @@ -2848,7 +2848,7 @@ importers: packages/@expo/package-manager: dependencies: '@expo/json-file': - specifier: workspace:^10.2.0 + specifier: workspace:^ version: link:../json-file '@expo/spawn-async': specifier: ^1.8.0 @@ -2923,19 +2923,19 @@ importers: packages/@expo/prebuild-config: dependencies: '@expo/config': - specifier: workspace:~56.0.9 + specifier: workspace:~ version: link:../config '@expo/config-plugins': - specifier: workspace:~56.0.8 + specifier: workspace:~ version: link:../config-plugins '@expo/config-types': - specifier: workspace:^56.0.5 + specifier: workspace:^ version: link:../config-types '@expo/image-utils': - specifier: workspace:^0.10.1 + specifier: workspace:^ version: link:../image-utils '@expo/json-file': - specifier: workspace:^10.2.0 + specifier: workspace:^ version: link:../json-file '@react-native/normalize-colors': specifier: 0.87.0 @@ -2944,7 +2944,7 @@ importers: specifier: ^4.3.1 version: 4.4.3 expo-modules-autolinking: - specifier: workspace:~56.0.13 + specifier: workspace:~ version: link:../../expo-modules-autolinking resolve-from: specifier: ^5.0.0 @@ -3003,7 +3003,7 @@ importers: packages/@expo/router-server: dependencies: '@expo/metro-runtime': - specifier: workspace:^56.0.13 + specifier: workspace:^ version: link:../metro-runtime debug: specifier: ^4.3.4 @@ -3012,13 +3012,13 @@ importers: specifier: '*' version: link:../../expo expo-constants: - specifier: workspace:^56.0.16 + specifier: workspace:^ version: link:../../expo-constants expo-font: - specifier: workspace:^56.0.5 + specifier: workspace:^ version: link:../../expo-font expo-server: - specifier: workspace:^56.0.4 + specifier: workspace:^ version: link:../../expo-server react: specifier: '*' @@ -3240,7 +3240,7 @@ importers: specifier: '*' version: link:../expo expo-widgets: - specifier: workspace:^56.0.15 + specifier: workspace:^ version: link:../expo-widgets devDependencies: '@babel/code-frame': @@ -3467,7 +3467,7 @@ importers: specifier: ^3.6.3 version: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.7.0)) eslint-plugin-expo: - specifier: workspace:^1.0.1 + specifier: workspace:^ version: link:../eslint-plugin-expo eslint-plugin-import: specifier: ^2.30.0 @@ -3593,64 +3593,64 @@ importers: specifier: ^7.20.0 version: 7.29.7 '@expo/cli': - specifier: workspace:^56.1.12 + specifier: workspace:^ version: link:../@expo/cli '@expo/config': - specifier: workspace:~56.0.9 + specifier: workspace:~ version: link:../@expo/config '@expo/config-plugins': - specifier: workspace:~56.0.8 + specifier: workspace:~ version: link:../@expo/config-plugins '@expo/devtools': - specifier: workspace:~56.0.2 + specifier: workspace:~ version: link:../@expo/devtools '@expo/dom-webview': - specifier: workspace:~56.0.5 + specifier: workspace:~ version: link:../@expo/dom-webview '@expo/fingerprint': - specifier: workspace:^0.19.3 + specifier: workspace:^ version: link:../@expo/fingerprint '@expo/local-build-cache-provider': - specifier: workspace:^56.0.8 + specifier: workspace:^ version: link:../@expo/local-build-cache-provider '@expo/log-box': - specifier: workspace:^56.0.12 + specifier: workspace:^ version: link:../@expo/log-box '@expo/log-box-utils': - specifier: workspace:^56.0.0 + specifier: workspace:^ version: link:../@expo/log-box-utils '@expo/metro': specifier: ~56.0.2 version: 56.0.2 '@expo/metro-config': - specifier: workspace:~56.0.13 + specifier: workspace:~ version: link:../@expo/metro-config '@ungap/structured-clone': specifier: ^1.3.0 version: 1.3.0 babel-preset-expo: - specifier: workspace:~56.0.13 + specifier: workspace:~ version: link:../babel-preset-expo expo-asset: - specifier: workspace:~56.0.15 + specifier: workspace:~ version: link:../expo-asset expo-constants: - specifier: workspace:~56.0.16 + specifier: workspace:~ version: link:../expo-constants expo-file-system: - specifier: workspace:~56.0.7 + specifier: workspace:~ version: link:../expo-file-system expo-font: - specifier: workspace:~56.0.5 + specifier: workspace:~ version: link:../expo-font expo-keep-awake: - specifier: workspace:~56.0.3 + specifier: workspace:~ version: link:../expo-keep-awake expo-modules-autolinking: - specifier: workspace:~56.0.13 + specifier: workspace:~ version: link:../expo-modules-autolinking expo-modules-core: - specifier: workspace:~56.0.13 + specifier: workspace:~ version: link:../expo-modules-core pretty-format: specifier: ^29.7.0 @@ -3765,7 +3765,7 @@ importers: packages/expo-app-metrics: dependencies: expo-updates-interface: - specifier: workspace:~56.0.1 + specifier: workspace:~ version: link:../expo-updates-interface react: specifier: '*' @@ -3824,13 +3824,13 @@ importers: packages/expo-asset: dependencies: '@expo/image-utils': - specifier: workspace:^0.10.1 + specifier: workspace:^ version: link:../@expo/image-utils expo: specifier: '*' version: link:../expo expo-constants: - specifier: workspace:~56.0.16 + specifier: workspace:~ version: link:../expo-constants react: specifier: '*' @@ -3889,19 +3889,19 @@ importers: packages/expo-auth-session: dependencies: expo-application: - specifier: workspace:~56.0.3 + specifier: workspace:~ version: link:../expo-application expo-constants: - specifier: workspace:~56.0.16 + specifier: workspace:~ version: link:../expo-constants expo-crypto: - specifier: workspace:~56.0.4 + specifier: workspace:~ version: link:../expo-crypto expo-linking: - specifier: workspace:~56.0.12 + specifier: workspace:~ version: link:../expo-linking expo-web-browser: - specifier: workspace:~56.0.5 + specifier: workspace:~ version: link:../expo-web-browser invariant: specifier: ^2.2.4 @@ -3926,7 +3926,7 @@ importers: packages/expo-background-fetch: dependencies: expo-task-manager: - specifier: workspace:~56.0.15 + specifier: workspace:~ version: link:../expo-task-manager devDependencies: '@types/jest': @@ -3945,7 +3945,7 @@ importers: packages/expo-background-task: dependencies: expo-task-manager: - specifier: workspace:~56.0.15 + specifier: workspace:~ version: link:../expo-task-manager devDependencies: '@types/jest': @@ -4042,7 +4042,7 @@ importers: packages/expo-brownfield: dependencies: '@expo/env': - specifier: workspace:~2.3.0 + specifier: workspace:~ version: link:../@expo/env '@expo/spawn-async': specifier: ^1.8.0 @@ -4057,10 +4057,10 @@ importers: specifier: ^5.2.0 version: 5.2.2 expo-build-properties: - specifier: workspace:~56.0.15 + specifier: workspace:~ version: link:../expo-build-properties expo-manifests: - specifier: workspace:~56.0.4 + specifier: workspace:~ version: link:../expo-manifests ora: specifier: ^5.4.1 @@ -4106,7 +4106,7 @@ importers: packages/expo-build-properties: dependencies: '@expo/schema-utils': - specifier: workspace:^56.0.0 + specifier: workspace:^ version: link:../@expo/schema-utils resolve-from: specifier: ^5.0.0 @@ -4268,7 +4268,7 @@ importers: packages/expo-constants: dependencies: '@expo/env': - specifier: workspace:~2.3.0 + specifier: workspace:~ version: link:../@expo/env expo: specifier: '*' @@ -4330,19 +4330,19 @@ importers: specifier: '*' version: link:../expo expo-dev-launcher: - specifier: workspace:~56.0.16 + specifier: workspace:~ version: link:../expo-dev-launcher expo-dev-menu: - specifier: workspace:~56.0.15 + specifier: workspace:~ version: link:../expo-dev-menu expo-dev-menu-interface: - specifier: workspace:~56.0.0 + specifier: workspace:~ version: link:../expo-dev-menu-interface expo-manifests: - specifier: workspace:~56.0.4 + specifier: workspace:~ version: link:../expo-manifests expo-updates-interface: - specifier: workspace:~56.0.1 + specifier: workspace:~ version: link:../expo-updates-interface devDependencies: '@types/jest': @@ -4361,16 +4361,16 @@ importers: packages/expo-dev-launcher: dependencies: '@expo/schema-utils': - specifier: workspace:^56.0.0 + specifier: workspace:^ version: link:../@expo/schema-utils expo: specifier: '*' version: link:../expo expo-dev-menu: - specifier: workspace:~56.0.15 + specifier: workspace:~ version: link:../expo-dev-menu expo-manifests: - specifier: workspace:~56.0.4 + specifier: workspace:~ version: link:../expo-manifests react-native: specifier: 0.87.0 @@ -4389,7 +4389,7 @@ importers: specifier: '*' version: link:../expo expo-dev-menu-interface: - specifier: workspace:~56.0.0 + specifier: workspace:~ version: link:../expo-dev-menu-interface devDependencies: '@babel/preset-typescript': @@ -4751,7 +4751,7 @@ importers: packages/expo-image-manipulator: dependencies: expo-image-loader: - specifier: workspace:~56.0.3 + specifier: workspace:~ version: link:../expo-image-loader devDependencies: expo: @@ -4764,7 +4764,7 @@ importers: packages/expo-image-picker: dependencies: expo-image-loader: - specifier: workspace:~56.0.3 + specifier: workspace:~ version: link:../expo-image-loader devDependencies: '@testing-library/react': @@ -4789,7 +4789,7 @@ importers: packages/expo-insights: dependencies: expo-eas-client: - specifier: workspace:~56.0.0 + specifier: workspace:~ version: link:../expo-eas-client devDependencies: expo: @@ -4866,7 +4866,7 @@ importers: specifier: '*' version: link:../expo expo-constants: - specifier: workspace:~56.0.16 + specifier: workspace:~ version: link:../expo-constants invariant: specifier: ^2.2.4 @@ -4966,7 +4966,7 @@ importers: packages/expo-location: dependencies: '@expo/image-utils': - specifier: workspace:^0.10.1 + specifier: workspace:^ version: link:../@expo/image-utils devDependencies: '@types/jest': @@ -5003,7 +5003,7 @@ importers: specifier: '*' version: link:../expo expo-json-utils: - specifier: workspace:~56.0.0 + specifier: workspace:~ version: link:../expo-json-utils devDependencies: expo-module-scripts: @@ -5103,7 +5103,7 @@ importers: specifier: ^13.0.0 version: 13.0.6 jest-expo: - specifier: workspace:~56.0.4 + specifier: workspace:~ version: link:../jest-expo jest-snapshot-prettier: specifier: npm:prettier@^2 @@ -5137,7 +5137,7 @@ importers: packages/expo-modules-autolinking: dependencies: '@expo/require-utils': - specifier: workspace:^56.1.3 + specifier: workspace:^ version: link:../@expo/require-utils '@expo/spawn-async': specifier: ^1.8.0 @@ -5162,7 +5162,7 @@ importers: specifier: 0.8.0 version: 0.8.0 expo-modules-jsi: - specifier: workspace:~56.0.7 + specifier: workspace:~ version: link:../expo-modules-jsi invariant: specifier: ^2.2.4 @@ -5205,7 +5205,7 @@ importers: specifier: '*' version: link:../expo expo-type-information: - specifier: workspace:^0.0.5 + specifier: workspace:^ version: link:../expo-type-information glob: specifier: ^13.0.0 @@ -5283,7 +5283,7 @@ importers: packages/expo-notifications: dependencies: '@expo/image-utils': - specifier: workspace:^0.10.1 + specifier: workspace:^ version: link:../@expo/image-utils abort-controller: specifier: ^3.0.0 @@ -5292,10 +5292,10 @@ importers: specifier: ^1.1.5 version: 1.2.3 expo-application: - specifier: workspace:~56.0.3 + specifier: workspace:~ version: link:../expo-application expo-constants: - specifier: workspace:~56.0.16 + specifier: workspace:~ version: link:../expo-constants react: specifier: '*' @@ -5326,10 +5326,10 @@ importers: packages/expo-observe: dependencies: expo-app-metrics: - specifier: workspace:~56.0.14 + specifier: workspace:~ version: link:../expo-app-metrics expo-eas-client: - specifier: workspace:~56.0.0 + specifier: workspace:~ version: link:../expo-eas-client expo-router: specifier: '*' @@ -5373,16 +5373,16 @@ importers: packages/expo-router: dependencies: '@expo/log-box': - specifier: workspace:^56.0.12 + specifier: workspace:^ version: link:../@expo/log-box '@expo/metro-runtime': - specifier: workspace:^56.0.13 + specifier: workspace:^ version: link:../@expo/metro-runtime '@expo/schema-utils': - specifier: workspace:^56.0.0 + specifier: workspace:^ version: link:../@expo/schema-utils '@expo/ui': - specifier: workspace:^56.0.14 + specifier: workspace:^ version: link:../expo-ui '@radix-ui/react-slot': specifier: ^1.2.0 @@ -5409,19 +5409,19 @@ importers: specifier: '*' version: link:../expo expo-constants: - specifier: workspace:^56.0.16 + specifier: workspace:^ version: link:../expo-constants expo-glass-effect: - specifier: workspace:^56.0.4 + specifier: workspace:^ version: link:../expo-glass-effect expo-linking: - specifier: workspace:^56.0.12 + specifier: workspace:^ version: link:../expo-linking expo-server: - specifier: workspace:^56.0.4 + specifier: workspace:^ version: link:../expo-server expo-symbols: - specifier: workspace:^56.0.5 + specifier: workspace:^ version: link:../expo-symbols fast-deep-equal: specifier: ^3.1.3 @@ -5638,13 +5638,13 @@ importers: packages/expo-sharing: dependencies: '@expo/config-plugins': - specifier: workspace:^56.0.8 + specifier: workspace:^ version: link:../@expo/config-plugins '@expo/config-types': - specifier: workspace:^56.0.5 + specifier: workspace:^ version: link:../@expo/config-types '@expo/plist': - specifier: workspace:^0.7.0 + specifier: workspace:^ version: link:../@expo/plist react: specifier: '*' @@ -5690,10 +5690,10 @@ importers: packages/expo-splash-screen: dependencies: '@expo/config-plugins': - specifier: workspace:~56.0.8 + specifier: workspace:~ version: link:../@expo/config-plugins '@expo/image-utils': - specifier: workspace:^0.10.1 + specifier: workspace:^ version: link:../@expo/image-utils expo: specifier: '*' @@ -5984,7 +5984,7 @@ importers: specifier: 0.87.0 version: 0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3) unimodules-app-loader: - specifier: workspace:~56.0.0 + specifier: workspace:~ version: link:../unimodules-app-loader devDependencies: '@types/jest': @@ -6145,7 +6145,7 @@ importers: specifier: ^0.0.6 version: 0.0.6 '@expo/plist': - specifier: workspace:^0.7.0 + specifier: workspace:^ version: link:../@expo/plist '@expo/spawn-async': specifier: ^1.8.0 @@ -6163,16 +6163,16 @@ importers: specifier: '*' version: link:../expo expo-eas-client: - specifier: workspace:~56.0.0 + specifier: workspace:~ version: link:../expo-eas-client expo-manifests: - specifier: workspace:~56.0.4 + specifier: workspace:~ version: link:../expo-manifests expo-structured-headers: - specifier: workspace:~56.0.0 + specifier: workspace:~ version: link:../expo-structured-headers expo-updates-interface: - specifier: workspace:~56.0.1 + specifier: workspace:~ version: link:../expo-updates-interface getenv: specifier: ^2.0.0 @@ -6316,10 +6316,10 @@ importers: packages/expo-widgets: dependencies: '@expo/plist': - specifier: workspace:^0.7.0 + specifier: workspace:^ version: link:../@expo/plist '@expo/ui': - specifier: workspace:~56.0.14 + specifier: workspace:~ version: link:../expo-ui react: specifier: '*' @@ -6490,13 +6490,13 @@ importers: specifier: 1.0.0-alpha.24 version: 1.0.0-alpha.24 '@expo/config': - specifier: workspace:~56.0.9 + specifier: workspace:~ version: link:../@expo/config '@expo/config-plugins': - specifier: workspace:~56.0.8 + specifier: workspace:~ version: link:../@expo/config-plugins '@expo/env': - specifier: workspace:~2.3.0 + specifier: workspace:~ version: link:../@expo/env '@expo/spawn-async': specifier: ^1.8.0 @@ -6789,7 +6789,7 @@ importers: specifier: ^9.39.4 version: 9.39.4(jiti@2.7.0) eslint-config-universe: - specifier: workspace:^15.2.0 + specifier: workspace:^ version: link:../packages/eslint-config-universe eslint-plugin-lodash: specifier: ^7.4.0 diff --git a/tools/package.json b/tools/package.json index 5335f425a3faf7..37f53b1c93930a 100644 --- a/tools/package.json +++ b/tools/package.json @@ -72,7 +72,7 @@ "@types/node": "^22.14.0", "@types/semver": "^7.5.8", "eslint": "^9.39.4", - "eslint-config-universe": "workspace:^15.2.0", + "eslint-config-universe": "workspace:^", "eslint-plugin-lodash": "^7.4.0", "expo-module-scripts": "workspace:*", "prettier": "^3.8.3", diff --git a/tools/src/publish-packages/tasks/updateWorkspaceProjects.ts b/tools/src/publish-packages/tasks/updateWorkspaceProjects.ts index 94d6cfdc76bd5a..b0cb614abd3d5b 100644 --- a/tools/src/publish-packages/tasks/updateWorkspaceProjects.ts +++ b/tools/src/publish-packages/tasks/updateWorkspaceProjects.ts @@ -9,6 +9,7 @@ import { getAvailableProjectTemplatesAsync } from '../../ProjectTemplates'; import { Task } from '../../TasksRunner'; import * as Workspace from '../../Workspace'; import { CommandOptions, Parcel, TaskArgs } from '../types'; +import { updatePackageVersions } from './updatePackageVersions'; const { green, yellow, cyan } = chalk; @@ -18,6 +19,7 @@ const { green, yellow, cyan } = chalk; export const updateWorkspaceProjects = new Task( { name: 'updateWorkspaceProjects', + dependsOn: [updatePackageVersions], filesToStage: ['**/package.json', 'pnpm-lock.yaml'], }, async (parcels: Parcel[], options: CommandOptions) => { @@ -101,18 +103,14 @@ export const updateWorkspaceProjects = new Task( continue; } - // Leave tilde and caret as they are, just replace the version. - // For workspace: forms with an embedded version, preserve the - // workspace: prefix and any caret/tilde modifier so the source - // continues to declare the workspace protocol. - const newVersionRange = options.canary - ? state.releaseVersion - : currentVersionRange.startsWith('workspace:') - ? currentVersionRange.replace( - /^workspace:([\^~]?).*/, - `workspace:$1${state.releaseVersion}` - ) - : currentVersionRange.replace(/([\^~]?).*/, `$1${state.releaseVersion}`); + // Normal releases preserve tilde/caret modifiers while replacing + // embedded versions. Canary workspace ranges temporarily use bare + // `workspace:` so pnpm resolves them to exact versions at pack time. + const newVersionRange = resolveUpdatedDependencyVersionRange( + currentVersionRange, + state.releaseVersion!, + options.canary + ); dependenciesObject[pkg.packageName] = newVersionRange; @@ -144,7 +142,7 @@ export const updateWorkspaceProjects = new Task( * @param context.dependencyType What type of dependency we are updating * @param context.canary If this is a canary release */ -function shouldUpdateDependencyVersion(context: { +export function shouldUpdateDependencyVersion(context: { currentVersionRange?: string; dependencyType: string; isCanaryRelease: boolean; @@ -154,19 +152,20 @@ function shouldUpdateDependencyVersion(context: { return false; } - // For workspace: specs, distinguish between auto-resolving forms (no - // embedded version — pnpm pack picks the local version at pack time) and - // embedded-version forms (workspace:1.2.3, workspace:^1.2.3 — pnpm pack - // ships the embedded version verbatim). Auto-resolving forms must NOT be - // mutated in source, otherwise the workspace: protocol gets flushed. - // Embedded-version forms DO need refreshing when their target is in the - // current parcel set, otherwise expo and similar packages keep pointing at - // stale versions of their workspace deps. if (context.currentVersionRange.startsWith('workspace:')) { const rest = context.currentVersionRange.slice('workspace:'.length); - if (rest === '*' || rest === '' || rest === '^' || rest === '~') { + // NOTE(@kitten): Pinned versions (workspace:* and workspace:) never need updating. + // pnpm updates these to exact versions. + if (rest === '*' || rest === '') { return false; } + + // NOTE(@kitten): Shorthand versions (workspace:^ and workspace:~) need to be turned into + // pinned versions for canary releases. pnpm updates these to exact versions. + if (rest === '^' || rest === '~') { + return context.isCanaryRelease; + } + return true; } @@ -178,5 +177,28 @@ function shouldUpdateDependencyVersion(context: { ) { return context.isCanaryRelease; } + return true; } + +function resolveUpdatedDependencyVersionRange( + currentVersionRange: string, + releaseVersion: string, + isCanaryRelease: boolean +): string { + if (isCanaryRelease) { + if (currentVersionRange.startsWith('workspace:')) { + // NOTE(@kitten): Canary dependencies must be exact. Bare `workspace:` lets + // pnpm resolve the dependency to its updated local canary version at pack time, + // while avoiding duplicating version-resolution logic here + return 'workspace:'; + } + return releaseVersion; + } + + if (currentVersionRange.startsWith('workspace:')) { + return currentVersionRange.replace(/^workspace:([\^~]?).*/, `workspace:$1${releaseVersion}`); + } else { + return currentVersionRange.replace(/([\^~]?).*/, `$1${releaseVersion}`); + } +} From 517ce86107e9143919ebe4865b0b5852bf4a5c91 Mon Sep 17 00:00:00 2001 From: Phil Pluckthun Date: Wed, 2 Sep 2026 12:38:29 +0100 Subject: [PATCH 03/19] chore: Remove obsolete `react-native-keyboard-controller` patch (#49646) # Why > [!NOTE] > This is a prerequisite to upgrading pnpm This patch has become obsolete; see: https://github.com/kirillzyusko/react-native-keyboard-controller/blob/af130ca4f9d77061ca098dd4aaec13dda3d5b11f/android/src/main/java/com/reactnativekeyboardcontroller/views/overlay/OverKeyboardHostShadowNode.kt#L29 As of pnpm 11/12, a patch that fails to apply, even if it fails to apply cleanly (no changes) will hard fail, so this blocks the upgrade. # How - Remove obsolete patch # Test Plan - Validated that upstream source incorporates the patched change # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- patches/react-native-keyboard-controller.patch | 13 ------------- pnpm-lock.yaml | 11 ++++------- pnpm-workspace.yaml | 1 - 3 files changed, 4 insertions(+), 21 deletions(-) delete mode 100644 patches/react-native-keyboard-controller.patch diff --git a/patches/react-native-keyboard-controller.patch b/patches/react-native-keyboard-controller.patch deleted file mode 100644 index 4982553150cdf6..00000000000000 --- a/patches/react-native-keyboard-controller.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/android/src/main/java/com/reactnativekeyboardcontroller/views/overlay/OverKeyboardHostShadowNode.kt b/android/src/main/java/com/reactnativekeyboardcontroller/views/overlay/OverKeyboardHostShadowNode.kt -index b11c60c..b67c72c 100644 ---- a/android/src/main/java/com/reactnativekeyboardcontroller/views/overlay/OverKeyboardHostShadowNode.kt -+++ b/android/src/main/java/com/reactnativekeyboardcontroller/views/overlay/OverKeyboardHostShadowNode.kt -@@ -23,7 +23,7 @@ internal class OverKeyboardHostShadowNode : LayoutShadowNode() { - i: Int, - ) { - super.addChildAt(child, i) -- val displaySize = themedContext.getDisplaySize() -+ val displaySize = getThemedContext().getDisplaySize() - child.setStyleWidth(displaySize.x.toFloat()) - child.setStyleHeight(displaySize.y.toFloat()) - } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fa446d8f936985..2810a6c11f5ccc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,9 +21,6 @@ patchedDependencies: '@shopify/react-native-skia@2.6.2': hash: 70039779bd3538cedc83bf96344d02399b7a16d42e5b8eda673ae03371843424 path: patches/@shopify__react-native-skia@2.6.2.patch - react-native-keyboard-controller: - hash: db6dc561a17d802e0cc0f19802e8772d8a51105160c635d3cda7d9f6dcff39d7 - path: patches/react-native-keyboard-controller.patch react-native-reanimated: hash: e2626de5a7914e5e42159ee39602e6b9ff62cbfb4ba181bc75276c5dac265e25 path: patches/react-native-reanimated.patch @@ -239,7 +236,7 @@ importers: version: 3.1.0(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-keyboard-controller: specifier: ^1.22.4 - version: 1.22.4(patch_hash=db6dc561a17d802e0cc0f19802e8772d8a51105160c635d3cda7d9f6dcff39d7)(react-native-reanimated@4.5.1(patch_hash=e2626de5a7914e5e42159ee39602e6b9ff62cbfb4ba181bc75276c5dac265e25)(react-native-worklets@0.10.1(patch_hash=8e525838db0b8e9bed0b01632a1f8b6f7c40543b37a45f58e3db2cca501b55f8)(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + version: 1.22.4(react-native-reanimated@4.5.1(patch_hash=e2626de5a7914e5e42159ee39602e6b9ff62cbfb4ba181bc75276c5dac265e25)(react-native-worklets@0.10.1(patch_hash=8e525838db0b8e9bed0b01632a1f8b6f7c40543b37a45f58e3db2cca501b55f8)(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-pager-view: specifier: 8.0.2 version: 8.0.2(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) @@ -687,7 +684,7 @@ importers: version: 3.1.0(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-keyboard-controller: specifier: ^1.22.4 - version: 1.22.4(patch_hash=db6dc561a17d802e0cc0f19802e8772d8a51105160c635d3cda7d9f6dcff39d7)(react-native-reanimated@4.5.1(patch_hash=e2626de5a7914e5e42159ee39602e6b9ff62cbfb4ba181bc75276c5dac265e25)(react-native-worklets@0.10.1(patch_hash=8e525838db0b8e9bed0b01632a1f8b6f7c40543b37a45f58e3db2cca501b55f8)(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + version: 1.22.4(react-native-reanimated@4.5.1(patch_hash=e2626de5a7914e5e42159ee39602e6b9ff62cbfb4ba181bc75276c5dac265e25)(react-native-worklets@0.10.1(patch_hash=8e525838db0b8e9bed0b01632a1f8b6f7c40543b37a45f58e3db2cca501b55f8)(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-maps: specifier: 1.27.2 version: 1.27.2(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) @@ -1119,7 +1116,7 @@ importers: version: 3.1.0(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-keyboard-controller: specifier: ^1.22.4 - version: 1.22.4(patch_hash=db6dc561a17d802e0cc0f19802e8772d8a51105160c635d3cda7d9f6dcff39d7)(react-native-reanimated@4.5.1(patch_hash=e2626de5a7914e5e42159ee39602e6b9ff62cbfb4ba181bc75276c5dac265e25)(react-native-worklets@0.10.1(patch_hash=8e525838db0b8e9bed0b01632a1f8b6f7c40543b37a45f58e3db2cca501b55f8)(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + version: 1.22.4(react-native-reanimated@4.5.1(patch_hash=e2626de5a7914e5e42159ee39602e6b9ff62cbfb4ba181bc75276c5dac265e25)(react-native-worklets@0.10.1(patch_hash=8e525838db0b8e9bed0b01632a1f8b6f7c40543b37a45f58e3db2cca501b55f8)(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-maps: specifier: 1.27.2 version: 1.27.2(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) @@ -23744,7 +23741,7 @@ snapshots: react: 19.2.3 react-native: 0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3) - react-native-keyboard-controller@1.22.4(patch_hash=db6dc561a17d802e0cc0f19802e8772d8a51105160c635d3cda7d9f6dcff39d7)(react-native-reanimated@4.5.1(patch_hash=e2626de5a7914e5e42159ee39602e6b9ff62cbfb4ba181bc75276c5dac265e25)(react-native-worklets@0.10.1(patch_hash=8e525838db0b8e9bed0b01632a1f8b6f7c40543b37a45f58e3db2cca501b55f8)(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + react-native-keyboard-controller@1.22.4(react-native-reanimated@4.5.1(patch_hash=e2626de5a7914e5e42159ee39602e6b9ff62cbfb4ba181bc75276c5dac265e25)(react-native-worklets@0.10.1(patch_hash=8e525838db0b8e9bed0b01632a1f8b6f7c40543b37a45f58e3db2cca501b55f8)(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 react-native: 0.87.0(@babel/core@7.29.7)(@react-native/metro-config@0.87.0(@babel/core@7.29.7))(@types/react@19.2.14)(react@19.2.3) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c0d99e753ba0f1..238a56a7821d7a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -57,7 +57,6 @@ onlyBuiltDependencies: patchedDependencies: '@react-native-community/netinfo': patches/@react-native-community+netinfo.patch '@shopify/react-native-skia@2.6.2': patches/@shopify__react-native-skia@2.6.2.patch - react-native-keyboard-controller: patches/react-native-keyboard-controller.patch react-native-reanimated: patches/react-native-reanimated.patch react-native-safe-area-context@5.7.0: patches/react-native-safe-area-context@5.7.0.patch react-native-view-shot: patches/react-native-view-shot.patch From 8c49e19808b63a5e862cb90ff39aff261f6a192e Mon Sep 17 00:00:00 2001 From: Aman Mittal Date: Wed, 2 Sep 2026 17:35:43 +0530 Subject: [PATCH 04/19] [docs Update Search UI dependency (#49647) # Why Follow-up https://github.com/expo/styleguide/pull/228 # How - Bump @expo/styleguide-search-ui - Keep the search input rounded while focused # Test Plan CleanShot 2026-09-02 at 16 59
40@2x # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- docs/package.json | 2 +- docs/pnpm-lock.yaml | 25 +++++++++++++++---------- docs/styles/global.css | 4 ++++ 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/docs/package.json b/docs/package.json index 6a8e283da529fd..a4f3e0f7fc6550 100644 --- a/docs/package.json +++ b/docs/package.json @@ -48,7 +48,7 @@ "@expo/styleguide-base": "^3.3.0", "@expo/styleguide-cookie-consent": "^2.3.0", "@expo/styleguide-icons": "^4.4.0", - "@expo/styleguide-search-ui": "^9.5.0", + "@expo/styleguide-search-ui": "^9.5.1", "@kapaai/react-sdk": "^0.9.6", "@mdx-js/loader": "^3.1.1", "@mdx-js/mdx": "^3.1.1", diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index 4af8a2280fb006..29cd5967d90fe7 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -32,8 +32,8 @@ importers: specifier: ^4.4.0 version: 4.4.0(react@19.2.8)(tailwindcss@4.3.3) '@expo/styleguide-search-ui': - specifier: ^9.5.0 - version: 9.5.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(next@16.2.11(patch_hash=423eaa79c801dbfda09aef892b3236e0194d49baf618fb3c7a89ec95d486eaeb)(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3) + specifier: ^9.5.1 + version: 9.5.1(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(next@16.2.11(patch_hash=423eaa79c801dbfda09aef892b3236e0194d49baf618fb3c7a89ec95d486eaeb)(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3) '@kapaai/react-sdk': specifier: ^0.9.6 version: 0.9.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -784,8 +784,8 @@ packages: react: '>= 19' tailwindcss: ^4.2.2 - '@expo/styleguide-search-ui@9.5.0': - resolution: {integrity: sha512-5K3iBU+aF8kAVI1/7O4IkeX945K2wrYbv29MvrroyyS4IdEyDmZxkC0Fc0lepUOZ0TnEiJ+goXyZ6C+DSwKn0w==} + '@expo/styleguide-search-ui@9.5.1': + resolution: {integrity: sha512-EFCY/v8HmRW6dG5voxil3BTpG+HIdhjOG4ng0tRqr1qlM0qwu3ZtX/vbMVGCkjkF042m3R2UgnBv8IPQrUgJiQ==} peerDependencies: next: '>= 16' react: '>= 19' @@ -3919,6 +3919,9 @@ packages: es-module-lexer@2.3.1: resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} + es-module-lexer@2.3.2: + resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -6587,8 +6590,8 @@ packages: uglify-js: optional: true - terser@5.49.1: - resolution: {integrity: sha512-7A2xlQ5EnGT8KPA92dUh6RbRYTVw8hEaEN9L1K68l4UOXFuV511NnAqObGoRqGOQofQcMypisu1s3xawCEHrvA==} + terser@5.51.2: + resolution: {integrity: sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==} engines: {node: '>=10'} hasBin: true @@ -7583,7 +7586,7 @@ snapshots: react: 19.2.8 tailwindcss: 4.3.3 - '@expo/styleguide-search-ui@9.5.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(next@16.2.11(patch_hash=423eaa79c801dbfda09aef892b3236e0194d49baf618fb3c7a89ec95d486eaeb)(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3)': + '@expo/styleguide-search-ui@9.5.1(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(next@16.2.11(patch_hash=423eaa79c801dbfda09aef892b3236e0194d49baf618fb3c7a89ec95d486eaeb)(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3)': dependencies: '@expo/styleguide': 14.4.0(next@16.2.11(patch_hash=423eaa79c801dbfda09aef892b3236e0194d49baf618fb3c7a89ec95d486eaeb)(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3) '@expo/styleguide-icons': 4.4.0(react@19.2.8)(tailwindcss@4.3.3) @@ -10747,6 +10750,8 @@ snapshots: es-module-lexer@2.3.1: {} + es-module-lexer@2.3.2: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -14253,12 +14258,12 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.49.1 + terser: 5.51.2 webpack: 5.106.2(postcss@8.5.23) optionalDependencies: postcss: 8.5.23 - terser@5.49.1: + terser@5.51.2: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.18.0 @@ -14714,7 +14719,7 @@ snapshots: browserslist: 4.28.7 chrome-trace-event: 1.0.4 enhanced-resolve: 5.24.5 - es-module-lexer: 2.3.1 + es-module-lexer: 2.3.2 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 diff --git a/docs/styles/global.css b/docs/styles/global.css index c5aee3262e256a..24d448acb0a6d1 100644 --- a/docs/styles/global.css +++ b/docs/styles/global.css @@ -58,6 +58,10 @@ code { outline: none !important; } +[cmdk-input]:focus-visible { + @apply rounded-3xl; +} + /* Collapsible */ details::details-content { From fe526b3eae1b3d2829ef1239314c2482ff27f5cb Mon Sep 17 00:00:00 2001 From: Aman Mittal Date: Wed, 2 Sep 2026 17:35:57 +0530 Subject: [PATCH 05/19] [docs] Round in-content boxes to match the new radius scale in multiple components (#49543) # Why Follow-up https://github.com/expo/expo/pull/49466#pullrequestreview-5044562800 # How Round in-content boxes to match the new radius scale in multiple components: - Collapsible - Prerequisites - Tabs - TabButton - PlatformTabs - Table - SnippetHeader - SnippetContent - Code - CommandLineTools - InlineHelp - NativeUpgradePromptCallout - PossibleRedirectNotification - ComponentExample - AppJSBanner # Test Plan **Callouts** CleanShot 2026-08-31 at 15 22 43@2x **Collapsibles** CleanShot 2026-08-31 at 15 22 58@2x **Table** CleanShot 2026-08-31 at 15 22 54@2x **Terminal** CleanShot 2026-08-31 at 15 23 11@2x **Code blocks** CleanShot 2026-08-31 at 15 23 33@2x CleanShot 2026-08-31 at 15 23
44@2x **Prerequisites** CleanShot 2026-08-31 at 15 24
31@2x **Tabs** CleanShot 2026-08-31 at 15 29 43@2x # Checklist - [ ] I added a `changelog.md` entry and rebuilt the package sources according to [this short guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting) - [ ] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) --- docs/.oxlintrc.json | 1 + docs/components/base/code.tsx | 41 +- docs/components/plugins/CodeBlocksTable.tsx | 7 +- .../__snapshots__/APISection.test.tsx.snap | 3964 +++++++++-------- .../APICommentTextBlock.test.tsx.snap | 100 +- docs/styles/global.css | 8 +- .../AppConfigSchemaTable.test.tsx.snap | 12 +- docs/ui/components/AppJSBanner/index.tsx | 2 +- docs/ui/components/Collapsible/index.tsx | 4 +- docs/ui/components/ComponentExample.tsx | 4 +- .../Home/sections/CommandLineTools.tsx | 4 +- docs/ui/components/InlineHelp/index.tsx | 2 +- .../components/PlatformTabs/PlatformTabs.tsx | 2 +- .../PossibleRedirectNotification.tsx | 2 +- docs/ui/components/Prerequisites/index.tsx | 4 +- docs/ui/components/Snippet/Snippet.tsx | 4 +- docs/ui/components/Snippet/SnippetContent.tsx | 2 +- docs/ui/components/Snippet/SnippetHeader.tsx | 4 +- .../components/Snippet/blocks/SnackInline.tsx | 2 +- docs/ui/components/Table/Table.tsx | 46 +- docs/ui/components/Tabs/TabButton.tsx | 4 +- docs/ui/components/Tabs/Tabs.tsx | 2 +- .../NativeUpgradePromptCallout.tsx | 2 +- 23 files changed, 2148 insertions(+), 2075 deletions(-) diff --git a/docs/.oxlintrc.json b/docs/.oxlintrc.json index ed5d7ab8d36b93..49cfa6b393886e 100644 --- a/docs/.oxlintrc.json +++ b/docs/.oxlintrc.json @@ -255,6 +255,7 @@ "error", { "allowlist": [ + "code-block-wrapper", "dark-theme", "react-player", "table-wrapper", diff --git a/docs/components/base/code.tsx b/docs/components/base/code.tsx index 9df84ded0020d4..be69fb4f55f366 100644 --- a/docs/components/base/code.tsx +++ b/docs/components/base/code.tsx @@ -129,8 +129,9 @@ export function Code({ className, children, title }: CodeProps) { const forceWordWrap = params?.wrap === 'true'; const commonClasses = mergeClasses( + '[scrollbar-color:var(--slate-5)_transparent] scrollbar-thin', (wordWrap || forceWordWrap) && 'wrap-break-word! whitespace-pre-wrap!', - showExpand && !isExpanded && `overflow-y-hidden! [&::-webkit-scrollbar-track]:bg-default!` + showExpand && !isExpanded && 'overflow-y-hidden!' ); return codeBlockTitle ? ( @@ -159,27 +160,29 @@ export function Code({ className, children, title }: CodeProps) { ) : ( -
-      
- -
- {showExpand && } -
+ )}> +
+        
+ +
+ {showExpand && } +
+ ); } diff --git a/docs/components/plugins/CodeBlocksTable.tsx b/docs/components/plugins/CodeBlocksTable.tsx index 8c21f89daef95e..8544234eee6194 100644 --- a/docs/components/plugins/CodeBlocksTable.tsx +++ b/docs/components/plugins/CodeBlocksTable.tsx @@ -43,9 +43,10 @@ export function CodeBlocksTable({ children, tabs, connected = true, ...rest }: P 'grid grid-cols-2 gap-4', connected && 'lg:mb-4 lg:gap-0', connected && - '[&>div:nth-child(odd)>div]:lg:rounded-r-none! [&>div:nth-child(odd)>div]:lg:border-r-0', - connected && '[&>div:nth-child(even)>div]:lg:rounded-l-none!', - '[&_pre]:m-0 [&_pre]:border-0', + '[&>div:nth-child(odd)]:lg:rounded-r-none! [&>div:nth-child(odd)>div]:lg:rounded-r-none! [&>div:nth-child(odd)>div]:lg:border-r-0', + connected && + '[&>div:nth-child(even)]:lg:rounded-l-none! [&>div:nth-child(even)>div]:lg:rounded-l-none!', + '[&_.code-block-wrapper]:m-0 [&_.code-block-wrapper]:border-0', 'max-lg:grid-cols-1' )} {...rest}> diff --git a/docs/components/plugins/__snapshots__/APISection.test.tsx.snap b/docs/components/plugins/__snapshots__/APISection.test.tsx.snap index 68bf6031a12636..9b4b2d7f28d431 100644 --- a/docs/components/plugins/__snapshots__/APISection.test.tsx.snap +++ b/docs/components/plugins/__snapshots__/APISection.test.tsx.snap @@ -266,7 +266,7 @@ button. not appear on the screen.