expo 54.0.0-preview.8 → 54.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,7 +32,7 @@ buildscript {
32
32
  def reactNativeVersion = project.extensions.getByType(ExpoModuleExtension).reactNativeVersion
33
33
 
34
34
  group = 'host.exp.exponent'
35
- version = '54.0.0-preview.8'
35
+ version = '54.0.0'
36
36
 
37
37
  expoModule {
38
38
  // We can't prebuild the module because it depends on the generated files.
@@ -43,7 +43,7 @@ android {
43
43
  namespace "expo.core"
44
44
  defaultConfig {
45
45
  versionCode 1
46
- versionName "54.0.0-preview.8"
46
+ versionName "54.0.0"
47
47
  consumerProguardFiles("proguard-rules.pro")
48
48
  }
49
49
  testOptions {
@@ -14,6 +14,8 @@ import java.net.URL
14
14
 
15
15
  private data class RequestHolder(var request: Request?)
16
16
 
17
+ internal val METHODS_REQUIRING_BODY = arrayOf("POST", "PUT", "PATCH")
18
+
17
19
  internal class NativeRequest(appContext: AppContext, internal val response: NativeResponse) :
18
20
  SharedObject(appContext) {
19
21
  private val requestHolder = RequestHolder(null)
@@ -34,9 +36,20 @@ internal class NativeRequest(appContext: AppContext, internal val response: Nati
34
36
 
35
37
  val headers = requestInit.headers.toHeaders()
36
38
  val mediaType = headers["Content-Type"]?.toMediaTypeOrNull()
39
+ val reqBody = requestBody?.toRequestBody(mediaType) ?: run {
40
+ // OkHttp requires a non-null body for POST, PATCH, and PUT requests.
41
+ // WinterTC fetch, however, does not have this limitation.
42
+ // Provide an empty body to make OkHttp behave like WinterTC fetch.
43
+ // Ref: https://github.com/expo/expo/issues/35950#issuecomment-3245173248
44
+ if (requestInit.method in METHODS_REQUIRING_BODY) {
45
+ byteArrayOf(0).toRequestBody(mediaType)
46
+ } else {
47
+ null
48
+ }
49
+ }
37
50
  val request = Request.Builder()
38
51
  .headers(headers)
39
- .method(requestInit.method, requestBody?.toRequestBody(mediaType))
52
+ .method(requestInit.method, reqBody)
40
53
  .url(OkHttpFileUrlInterceptor.handleFileUrl(url))
41
54
  .build()
42
55
  this.requestHolder.request = request
@@ -1,6 +1,6 @@
1
1
  export declare class MetroServerError extends Error {
2
- url: string;
3
2
  code: string;
3
+ url: string;
4
4
  constructor(errorObject: {
5
5
  message: string;
6
6
  } & Record<string, any>, url: string);
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/async-require/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,gBAAiB,SAAQ,KAAK;IAKhC,GAAG,EAAE,MAAM;IAJpB,IAAI,SAAwB;gBAG1B,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/C,GAAG,EAAE,MAAM;CASrB"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/async-require/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,IAAI,SAAwB;IAC5B,GAAG,EAAE,MAAM,CAAC;gBAEA,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM;CAQhF"}
@@ -1,8 +1,8 @@
1
1
  {
2
- "@expo/fingerprint": "~0.14.3",
3
- "@expo/metro-runtime": "~6.1.0",
4
- "@expo/vector-icons": "^15.0.0",
5
- "@expo/ui": "~0.2.0-alpha.5",
2
+ "@expo/fingerprint": "~0.15.0",
3
+ "@expo/metro-runtime": "~6.1.1",
4
+ "@expo/vector-icons": "^15.0.2",
5
+ "@expo/ui": "~0.2.0-beta.0",
6
6
  "@react-native-async-storage/async-storage": "2.2.0",
7
7
  "@react-native-community/datetimepicker": "8.4.4",
8
8
  "@react-native-masked-view/masked-view": "0.3.2",
@@ -16,100 +16,100 @@
16
16
  "expo-analytics-amplitude": "~11.3.0",
17
17
  "expo-app-auth": "~11.1.0",
18
18
  "expo-app-loader-provider": "~8.0.0",
19
- "expo-apple-authentication": "~8.0.3",
20
- "expo-application": "~7.0.3",
21
- "expo-asset": "~12.0.4",
22
- "expo-audio": "~1.0.5",
23
- "expo-auth-session": "~7.0.3",
24
- "expo-av": "~16.0.3",
25
- "expo-background-fetch": "~14.0.3",
26
- "expo-background-task": "~1.0.3",
27
- "expo-battery": "~10.0.3",
28
- "expo-blur": "~15.0.3",
29
- "expo-brightness": "~14.0.3",
30
- "expo-build-properties": "~1.0.4",
31
- "expo-calendar": "~15.0.3",
32
- "expo-camera": "~17.0.3",
33
- "expo-cellular": "~8.0.3",
34
- "expo-checkbox": "~5.0.3",
35
- "expo-clipboard": "~8.0.3",
36
- "expo-constants": "~18.0.4",
37
- "expo-contacts": "~15.0.4",
38
- "expo-crypto": "~15.0.3",
39
- "expo-dev-client": "~6.0.5",
40
- "expo-device": "~8.0.3",
41
- "expo-document-picker": "~14.0.3",
42
- "expo-file-system": "~19.0.5",
43
- "expo-font": "~14.0.3",
44
- "expo-gl": "~16.0.3",
19
+ "expo-apple-authentication": "~8.0.6",
20
+ "expo-application": "~7.0.6",
21
+ "expo-asset": "~12.0.7",
22
+ "expo-audio": "~1.0.10",
23
+ "expo-auth-session": "~7.0.7",
24
+ "expo-av": "~16.0.6",
25
+ "expo-background-fetch": "~14.0.6",
26
+ "expo-background-task": "~1.0.6",
27
+ "expo-battery": "~10.0.6",
28
+ "expo-blur": "~15.0.6",
29
+ "expo-brightness": "~14.0.6",
30
+ "expo-build-properties": "~1.0.7",
31
+ "expo-calendar": "~15.0.6",
32
+ "expo-camera": "~17.0.7",
33
+ "expo-cellular": "~8.0.6",
34
+ "expo-checkbox": "~5.0.6",
35
+ "expo-clipboard": "~8.0.6",
36
+ "expo-constants": "~18.0.7",
37
+ "expo-contacts": "~15.0.8",
38
+ "expo-crypto": "~15.0.6",
39
+ "expo-dev-client": "~6.0.11",
40
+ "expo-device": "~8.0.6",
41
+ "expo-document-picker": "~14.0.6",
42
+ "expo-file-system": "~19.0.11",
43
+ "expo-font": "~14.0.7",
44
+ "expo-gl": "~16.0.6",
45
45
  "expo-google-app-auth": "~8.3.0",
46
- "expo-haptics": "~15.0.3",
47
- "expo-image": "~3.0.3",
46
+ "expo-haptics": "~15.0.6",
47
+ "expo-image": "~3.0.7",
48
48
  "expo-image-loader": "~6.0.0",
49
- "expo-image-manipulator": "~14.0.3",
50
- "expo-image-picker": "~17.0.3",
51
- "expo-intent-launcher": "~13.0.3",
52
- "expo-insights": "~0.10.3",
53
- "expo-keep-awake": "~15.0.3",
54
- "expo-linear-gradient": "~15.0.3",
55
- "expo-linking": "~8.0.3",
56
- "expo-local-authentication": "~17.0.3",
57
- "expo-localization": "~17.0.3",
58
- "expo-location": "~19.0.3",
59
- "expo-mail-composer": "~15.0.3",
60
- "expo-manifests": "~1.0.4",
61
- "expo-maps": "~0.12.3",
62
- "expo-media-library": "~18.0.3",
63
- "expo-mesh-gradient": "~0.4.3",
64
- "expo-module-template": "~11.0.4",
65
- "expo-modules-core": "~3.0.6",
66
- "expo-navigation-bar": "~5.0.4",
67
- "expo-network": "~8.0.3",
68
- "expo-notifications": "~0.32.5",
69
- "expo-print": "~15.0.3",
70
- "expo-live-photo": "~1.0.3",
71
- "expo-router": "~6.0.0-beta.7",
72
- "expo-screen-capture": "~8.0.3",
73
- "expo-screen-orientation": "~9.0.3",
74
- "expo-secure-store": "~15.0.3",
75
- "expo-sensors": "~15.0.3",
76
- "expo-sharing": "~14.0.3",
77
- "expo-sms": "~14.0.3",
78
- "expo-speech": "~14.0.3",
79
- "expo-splash-screen": "~31.0.4",
80
- "expo-sqlite": "~16.0.4",
81
- "expo-status-bar": "~3.0.4",
82
- "expo-store-review": "~9.0.3",
83
- "expo-symbols": "~1.0.3",
84
- "expo-system-ui": "~6.0.3",
85
- "expo-task-manager": "~14.0.3",
86
- "expo-tracking-transparency": "~6.0.3",
87
- "expo-updates": "~29.0.4",
88
- "expo-video-thumbnails": "~10.0.3",
89
- "expo-video": "~3.0.5",
90
- "expo-web-browser": "~15.0.3",
91
- "jest-expo": "~54.0.3",
49
+ "expo-image-manipulator": "~14.0.7",
50
+ "expo-image-picker": "~17.0.7",
51
+ "expo-intent-launcher": "~13.0.6",
52
+ "expo-insights": "~0.10.6",
53
+ "expo-keep-awake": "~15.0.6",
54
+ "expo-linear-gradient": "~15.0.6",
55
+ "expo-linking": "~8.0.7",
56
+ "expo-local-authentication": "~17.0.6",
57
+ "expo-localization": "~17.0.6",
58
+ "expo-location": "~19.0.6",
59
+ "expo-mail-composer": "~15.0.6",
60
+ "expo-manifests": "~1.0.7",
61
+ "expo-maps": "~0.12.6",
62
+ "expo-media-library": "~18.1.1",
63
+ "expo-mesh-gradient": "~0.4.6",
64
+ "expo-module-template": "~11.0.11",
65
+ "expo-modules-core": "~3.0.15",
66
+ "expo-navigation-bar": "~5.0.8",
67
+ "expo-network": "~8.0.6",
68
+ "expo-notifications": "~0.32.10",
69
+ "expo-print": "~15.0.6",
70
+ "expo-live-photo": "~1.0.6",
71
+ "expo-router": "~6.0.0",
72
+ "expo-screen-capture": "~8.0.6",
73
+ "expo-screen-orientation": "~9.0.6",
74
+ "expo-secure-store": "~15.0.6",
75
+ "expo-sensors": "~15.0.6",
76
+ "expo-sharing": "~14.0.7",
77
+ "expo-sms": "~14.0.6",
78
+ "expo-speech": "~14.0.6",
79
+ "expo-splash-screen": "~31.0.8",
80
+ "expo-sqlite": "~16.0.8",
81
+ "expo-status-bar": "~3.0.7",
82
+ "expo-store-review": "~9.0.6",
83
+ "expo-symbols": "~1.0.6",
84
+ "expo-system-ui": "~6.0.7",
85
+ "expo-task-manager": "~14.0.6",
86
+ "expo-tracking-transparency": "~6.0.6",
87
+ "expo-updates": "~29.0.9",
88
+ "expo-video-thumbnails": "~10.0.7",
89
+ "expo-video": "~3.0.11",
90
+ "expo-web-browser": "~15.0.6",
91
+ "jest-expo": "~54.0.9",
92
92
  "lottie-react-native": "~7.3.1",
93
93
  "react": "19.1.0",
94
94
  "react-dom": "19.1.0",
95
- "react-native": "0.81.0",
95
+ "react-native": "0.81.4",
96
96
  "react-native-web": "~0.21.0",
97
97
  "react-native-gesture-handler": "~2.28.0",
98
98
  "react-native-get-random-values": "~1.11.0",
99
- "react-native-keyboard-controller": "1.18.4",
99
+ "react-native-keyboard-controller": "1.18.5",
100
100
  "react-native-maps": "1.20.1",
101
101
  "react-native-pager-view": "6.9.1",
102
- "react-native-worklets": "~0.4.1",
103
- "react-native-reanimated": "~4.0.2",
104
- "react-native-screens": "~4.15.0",
102
+ "react-native-worklets": "~0.5.1",
103
+ "react-native-reanimated": "~4.1.0",
104
+ "react-native-screens": "~4.16.0",
105
105
  "react-native-safe-area-context": "~5.6.0",
106
106
  "react-native-svg": "15.12.1",
107
107
  "react-native-view-shot": "4.0.3",
108
108
  "react-native-webview": "13.15.0",
109
109
  "sentry-expo": "~7.0.0",
110
- "unimodules-app-loader": "~6.0.3",
110
+ "unimodules-app-loader": "~6.0.6",
111
111
  "unimodules-image-loader-interface": "~6.1.0",
112
- "@shopify/react-native-skia": "2.2.3",
112
+ "@shopify/react-native-skia": "2.2.12",
113
113
  "@shopify/flash-list": "2.0.2",
114
114
  "@sentry/react-native": "~6.20.0",
115
115
  "react-native-bootsplash": "^6.3.10"
@@ -16,34 +16,6 @@ open class ExpoAppDelegate: NSObject, @preconcurrency ReactNativeFactoryProvider
16
16
  private let defaultModuleName = "main"
17
17
  private let defaultInitialProps = [AnyHashable: Any]()
18
18
 
19
- func loadMacOSWindow(launchOptions: [UIApplication.LaunchOptionsKey: Any]?) {
20
- #if os(macOS)
21
- if let rootView = factory?.rootViewFactory.view(
22
- withModuleName: defaultModuleName,
23
- initialProperties: defaultInitialProps,
24
- launchOptions: launchOptions
25
- ) {
26
- let frame = NSRect(x: 0, y: 0, width: 1280, height: 720)
27
- let window = NSWindow(
28
- contentRect: NSRect.zero,
29
- styleMask: [.titled, .resizable, .closable, .miniaturizable],
30
- backing: .buffered,
31
- defer: false)
32
-
33
- window.title = defaultModuleName
34
- window.autorecalculatesKeyViewLoop = true
35
-
36
- let rootViewController = NSViewController()
37
- rootViewController.view = rootView
38
- rootView.frame = frame
39
-
40
- window.contentViewController = rootViewController
41
- window.makeKeyAndOrderFront(self)
42
- window.center()
43
- }
44
- #endif
45
- }
46
-
47
19
  public func bindReactNativeFactory(_ factory: RCTReactNativeFactory) {
48
20
  self.factory = factory
49
21
  }
@@ -141,9 +113,6 @@ open class ExpoAppDelegate: NSObject, @preconcurrency ReactNativeFactoryProvider
141
113
  }
142
114
 
143
115
  open func applicationDidFinishLaunching(_ notification: Notification) {
144
- let launchOptions = notification.userInfo as? [String: Any]
145
- loadMacOSWindow(launchOptions: launchOptions)
146
-
147
116
  ExpoAppDelegateSubscriberRepository
148
117
  .subscribers
149
118
  .forEach { subscriber in
@@ -5,6 +5,8 @@ import React
5
5
  @MainActor public class ExpoReactNativeFactory: RCTReactNativeFactory {
6
6
  private let reactDelegate = ExpoReactDelegate(handlers: ExpoAppDelegateSubscriberRepository.reactDelegateHandlers)
7
7
 
8
+ // TODO: Remove check when react-native-macos 0.81 is released
9
+ #if !os(macOS)
8
10
  @objc public override init(delegate: any RCTReactNativeFactoryDelegate) {
9
11
  let releaseLevel = (Bundle.main.object(forInfoDictionaryKey: "ReactNativeReleaseLevel") as? String)
10
12
  .flatMap { [
@@ -17,6 +19,7 @@ import React
17
19
 
18
20
  super.init(delegate: delegate, releaseLevel: releaseLevel)
19
21
  }
22
+ #endif
20
23
 
21
24
  @objc func createRCTRootViewFactory() -> RCTRootViewFactory {
22
25
  // Alan: This is temporary. We need to cast to ExpoReactNativeFactoryDelegate here because currently, if you extend RCTReactNativeFactory
@@ -39,10 +42,7 @@ import React
39
42
  return weakDelegate.createRootView(with: bridge, moduleName: moduleName, initProps: initProps)
40
43
  }
41
44
 
42
- // TODO: Remove this check when react-native-macos releases v0.79
43
- if configuration.responds(to: Selector(("setJsRuntimeConfiguratorDelegate:"))) {
44
- configuration.setValue(delegate, forKey: "jsRuntimeConfiguratorDelegate")
45
- }
45
+ configuration.jsRuntimeConfiguratorDelegate = delegate
46
46
 
47
47
  configuration.createBridgeWithDelegate = { delegate, launchOptions in
48
48
  weakDelegate.createBridge(with: delegate, launchOptions: launchOptions)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo",
3
- "version": "54.0.0-preview.8",
3
+ "version": "54.0.0",
4
4
  "description": "The Expo SDK",
5
5
  "main": "src/Expo.ts",
6
6
  "module": "src/Expo.ts",
@@ -75,23 +75,23 @@
75
75
  "homepage": "https://github.com/expo/expo/tree/main/packages/expo",
76
76
  "dependencies": {
77
77
  "@babel/runtime": "^7.20.0",
78
- "@expo/cli": "0.26.3",
79
- "@expo/config": "~12.0.4",
80
- "@expo/config-plugins": "~11.0.4",
81
- "@expo/devtools": "0.1.3",
82
- "@expo/fingerprint": "0.14.3",
78
+ "@expo/cli": "54.0.0",
79
+ "@expo/config": "~12.0.7",
80
+ "@expo/config-plugins": "~54.0.0",
81
+ "@expo/devtools": "0.1.6",
82
+ "@expo/fingerprint": "0.15.0",
83
83
  "@expo/metro": "~0.1.1",
84
- "@expo/metro-config": "0.21.5",
85
- "@expo/vector-icons": "^15.0.0",
84
+ "@expo/metro-config": "54.0.0",
85
+ "@expo/vector-icons": "^15.0.2",
86
86
  "@ungap/structured-clone": "^1.3.0",
87
- "babel-preset-expo": "~14.0.3",
88
- "expo-asset": "~12.0.4",
89
- "expo-constants": "~18.0.4",
90
- "expo-file-system": "~19.0.5",
91
- "expo-font": "~14.0.3",
92
- "expo-keep-awake": "~15.0.3",
93
- "expo-modules-autolinking": "3.0.3",
94
- "expo-modules-core": "3.0.6",
87
+ "babel-preset-expo": "~54.0.0",
88
+ "expo-asset": "~12.0.7",
89
+ "expo-constants": "~18.0.7",
90
+ "expo-file-system": "~19.0.11",
91
+ "expo-font": "~14.0.7",
92
+ "expo-keep-awake": "~15.0.6",
93
+ "expo-modules-autolinking": "3.0.9",
94
+ "expo-modules-core": "3.0.15",
95
95
  "pretty-format": "^29.7.0",
96
96
  "react-refresh": "^0.14.2",
97
97
  "whatwg-url-without-unicode": "8.0.0-3"
@@ -100,10 +100,10 @@
100
100
  "@types/node": "^22.14.0",
101
101
  "@types/react": "~19.1.10",
102
102
  "@types/react-test-renderer": "~19.1.0",
103
- "expo-module-scripts": "^5.0.3",
103
+ "expo-module-scripts": "^5.0.7",
104
104
  "react": "19.1.0",
105
105
  "react-dom": "19.1.0",
106
- "react-native": "0.81.0",
106
+ "react-native": "0.81.4",
107
107
  "web-streams-polyfill": "^3.3.2"
108
108
  },
109
109
  "peerDependencies": {
@@ -124,5 +124,5 @@
124
124
  "optional": true
125
125
  }
126
126
  },
127
- "gitHead": "bbd466e1bdb1ba2aa6ba64192f58e900ea7478bc"
127
+ "gitHead": "87186d10c8239c6469e055417e67bd4d0ed63efb"
128
128
  }
@@ -1,13 +1,11 @@
1
1
  export class MetroServerError extends Error {
2
2
  code = 'METRO_SERVER_ERROR';
3
+ url: string;
3
4
 
4
- constructor(
5
- errorObject: { message: string } & Record<string, any>,
6
- public url: string
7
- ) {
5
+ constructor(errorObject: { message: string } & Record<string, any>, url: string) {
8
6
  super(errorObject.message);
9
7
  this.name = 'MetroServerError';
10
-
8
+ this.url = url;
11
9
  for (const key in errorObject) {
12
10
  (this as any)[key] = errorObject[key];
13
11
  }
package/template.tgz CHANGED
Binary file