expo 55.0.0-preview.8 → 55.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.
@@ -1,26 +1,6 @@
1
1
  apply plugin: 'com.android.library'
2
2
  apply plugin: 'expo-module-gradle-plugin'
3
-
4
- import expo.modules.plugin.gradle.ExpoModuleExtension
5
- import expo.modules.plugin.Version
6
-
7
- // TODO(@lukmccall): Remove when we drop support for SDK 52
8
- def useLegacyAutolinking = false
9
- try {
10
- apply plugin: "expo-autolinking"
11
- } catch (e) {
12
- useLegacyAutolinking = true
13
- }
14
-
15
- if (useLegacyAutolinking) {
16
- // Import autolinking script
17
- apply from: "../scripts/autolinking.gradle"
18
- }
19
-
20
- if (useLegacyAutolinking) {
21
- ensureDependeciesWereEvaluated(project)
22
- }
23
-
3
+ apply plugin: "expo-autolinking"
24
4
 
25
5
  buildscript {
26
6
  // Simple helper that allows the root project to override versions declared by this library.
@@ -29,10 +9,8 @@ buildscript {
29
9
  }
30
10
  }
31
11
 
32
- def reactNativeVersion = project.extensions.getByType(ExpoModuleExtension).reactNativeVersion
33
-
34
12
  group = 'host.exp.exponent'
35
- version = '55.0.0-preview.8'
13
+ version = '55.0.0'
36
14
 
37
15
  expoModule {
38
16
  // We can't prebuild the module because it depends on the generated files.
@@ -43,23 +21,13 @@ android {
43
21
  namespace "expo.core"
44
22
  defaultConfig {
45
23
  versionCode 1
46
- versionName "55.0.0-preview.8"
24
+ versionName "55.0.0"
47
25
  consumerProguardFiles("proguard-rules.pro")
48
26
  }
49
27
  testOptions {
50
28
  unitTests.includeAndroidResources = true
51
29
  }
52
30
 
53
- if (useLegacyAutolinking) {
54
- sourceSets {
55
- main {
56
- java {
57
- srcDirs += new File(project.buildDir, generatedFilesSrcDir)
58
- }
59
- }
60
- }
61
- }
62
-
63
31
  buildTypes {
64
32
  create("debugOptimized") {
65
33
  initWith(buildTypes.release)
@@ -83,30 +51,4 @@ dependencies { dependencyHandler ->
83
51
  testImplementation "com.google.truth:truth:1.4.5"
84
52
  testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2'
85
53
  testImplementation 'org.robolectric:robolectric:4.16'
86
-
87
- if (useLegacyAutolinking) {
88
- // Link expo modules as dependencies of the adapter. It uses `api` configuration so they all will be visible for the app as well.
89
- // A collection of the dependencies depends on the options passed to `useExpoModules` in your project's `settings.gradle`.
90
- addExpoModulesDependencies(dependencyHandler, project)
91
- }
92
- }
93
-
94
- if (useLegacyAutolinking) {
95
- // A task generating a package list of expo modules.
96
- task generateExpoModulesPackageListTask {
97
- def modulesConfig = getModulesConfig()
98
- def outputPath = getGenerateExpoModulesPackagesListPath()
99
- if (modulesConfig) {
100
- outputs.file(file(outputPath))
101
- inputs.property("modulesConfig", modulesConfig)
102
- }
103
-
104
- // TOOD(@lukmccall): fix not working with configuration cache enabled
105
- doLast {
106
- generateExpoModulesPackageList()
107
- }
108
- }
109
-
110
- // Run that task during prebuilding phase.
111
- preBuild.dependsOn "generateExpoModulesPackageListTask"
112
54
  }
@@ -19,15 +19,12 @@ import com.facebook.react.ReactActivity
19
19
  import com.facebook.react.ReactActivityDelegate
20
20
  import com.facebook.react.ReactDelegate
21
21
  import com.facebook.react.ReactHost
22
- import com.facebook.react.ReactInstanceEventListener
23
22
  import com.facebook.react.ReactInstanceManager
24
23
  import com.facebook.react.ReactRootView
25
- import com.facebook.react.bridge.ReactContext
26
24
  import com.facebook.react.modules.core.PermissionListener
27
25
  import expo.modules.core.interfaces.ReactActivityHandler.DelayLoadAppHandler
28
26
  import expo.modules.core.interfaces.ReactActivityLifecycleListener
29
27
  import expo.modules.kotlin.Utils
30
- import expo.modules.rncompatibility.ReactNativeFeatureFlags
31
28
  import kotlinx.coroutines.CompletableDeferred
32
29
  import kotlinx.coroutines.CoroutineScope
33
30
  import kotlinx.coroutines.CoroutineStart
@@ -43,7 +40,7 @@ import kotlin.coroutines.suspendCoroutine
43
40
 
44
41
  class ReactActivityDelegateWrapper(
45
42
  private val activity: ReactActivity,
46
- private val isNewArchitectureEnabled: Boolean,
43
+ private val isNewArchitectureEnabled: Boolean, // TODO(@lukmccall): Unused since SDK 55, remove in SDK 56
47
44
  @get:VisibleForTesting internal var delegate: ReactActivityDelegate
48
45
  ) : ReactActivityDelegate(activity, null) {
49
46
  constructor(activity: ReactActivity, delegate: ReactActivityDelegate) :
@@ -153,27 +150,12 @@ class ReactActivityDelegateWrapper(
153
150
  }
154
151
 
155
152
  val launchOptions = composeLaunchOptions()
156
- val reactDelegate: ReactDelegate
157
- if (ReactNativeFeatureFlags.enableBridgelessArchitecture) {
158
- reactDelegate = ReactDelegate(
159
- plainActivity,
160
- reactHost,
161
- mainComponentName,
162
- launchOptions
163
- )
164
- } else {
165
- reactDelegate = object : ReactDelegate(
166
- plainActivity,
167
- reactNativeHost,
168
- mainComponentName,
169
- launchOptions,
170
- isFabricEnabled
171
- ) {
172
- override fun createRootView(): ReactRootView? {
173
- return this@ReactActivityDelegateWrapper.createRootView() ?: super.createRootView()
174
- }
175
- }
176
- }
153
+ val reactDelegate = ReactDelegate(
154
+ plainActivity,
155
+ reactHost,
156
+ mainComponentName,
157
+ launchOptions
158
+ )
177
159
 
178
160
  val mReactDelegate = ReactActivityDelegate::class.java.getDeclaredField("mReactDelegate")
179
161
  mReactDelegate.isAccessible = true
@@ -273,18 +255,6 @@ class ReactActivityDelegateWrapper(
273
255
  */
274
256
  launchLifecycleScopeWithLock {
275
257
  loadAppReady.await()
276
- if (!ReactNativeFeatureFlags.enableBridgelessArchitecture && delegate.reactInstanceManager.currentReactContext == null) {
277
- val reactContextListener = object : ReactInstanceEventListener {
278
- override fun onReactContextInitialized(context: ReactContext) {
279
- delegate.reactInstanceManager.removeReactInstanceEventListener(this)
280
- delegate.onActivityResult(requestCode, resultCode, data)
281
- }
282
- }
283
- return@launchLifecycleScopeWithLock delegate.reactInstanceManager.addReactInstanceEventListener(
284
- reactContextListener
285
- )
286
- }
287
-
288
258
  delegate.onActivityResult(requestCode, resultCode, data)
289
259
  }
290
260
  }
@@ -18,4 +18,6 @@ export declare function normalizeHeadersInit(headers: HeadersInit | null | undef
18
18
  * Create a new header array by overriding the existing headers with new headers (by header key).
19
19
  */
20
20
  export declare function overrideHeaders(headers: NativeHeadersType, newHeaders: NativeHeadersType): NativeHeadersType;
21
+ /** Normalizes known HTTP methods to uppercase */
22
+ export declare function normalizeMethod(method: string): string;
21
23
  //# sourceMappingURL=RequestUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RequestUtils.d.ts","sourceRoot":"","sources":["../../../src/winter/fetch/RequestUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIzD;;GAEG;AACH,wBAAsB,sCAAsC,CAC1D,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GACjC,OAAO,CAAC,UAAU,CAAC,CAsBrB;AAgBD;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,GAChC,OAAO,CAAC;IAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;CAAE,CAAC,CA6C7E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,CAe/F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,iBAAiB,GAC5B,iBAAiB,CAYnB"}
1
+ {"version":3,"file":"RequestUtils.d.ts","sourceRoot":"","sources":["../../../src/winter/fetch/RequestUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIzD;;GAEG;AACH,wBAAsB,sCAAsC,CAC1D,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GACjC,OAAO,CAAC,UAAU,CAAC,CAsBrB;AAgBD;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,GAChC,OAAO,CAAC;IAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;CAAE,CAAC,CA6C7E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,CAe/F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,iBAAiB,GAC5B,iBAAiB,CAYnB;AAED,iDAAiD;AACjD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAatD"}
@@ -1,4 +1,4 @@
1
1
  import { FetchResponse } from './FetchResponse';
2
- import type { FetchRequestInit } from './fetch.types';
3
- export declare function fetch(url: string, init?: FetchRequestInit): Promise<FetchResponse>;
2
+ import type { FetchRequestInit, FetchRequestLike } from './fetch.types';
3
+ export declare function fetch(input: string | URL | FetchRequestLike, init?: FetchRequestInit): Promise<FetchResponse>;
4
4
  //# sourceMappingURL=fetch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/winter/fetch/fetch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAyC,MAAM,iBAAiB,CAAC;AAGvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,wBAAsB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAsCxF"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/winter/fetch/fetch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAyC,MAAM,iBAAiB,CAAC;AAQvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAOxE,wBAAsB,KAAK,CACzB,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,gBAAgB,EACtC,IAAI,CAAC,EAAE,gBAAgB,GACtB,OAAO,CAAC,aAAa,CAAC,CAiDxB"}
@@ -2,11 +2,11 @@
2
2
  * A fetch RequestInit compatible structure.
3
3
  */
4
4
  export interface FetchRequestInit {
5
- body?: BodyInit;
5
+ body?: BodyInit | null;
6
6
  credentials?: RequestCredentials;
7
7
  headers?: HeadersInit;
8
8
  method?: string;
9
- signal?: AbortSignal;
9
+ signal?: AbortSignal | null;
10
10
  redirect?: RequestRedirect;
11
11
  integrity?: string;
12
12
  keepalive?: boolean;
@@ -14,4 +14,16 @@ export interface FetchRequestInit {
14
14
  referrer?: string;
15
15
  window?: any;
16
16
  }
17
+ /**
18
+ * A fetch Request compatible structure.
19
+ */
20
+ export interface FetchRequestLike {
21
+ readonly url: string;
22
+ readonly body: BodyInit | null;
23
+ readonly method: string;
24
+ readonly headers: Headers;
25
+ readonly credentials?: RequestCredentials;
26
+ readonly signal?: AbortSignal;
27
+ readonly redirect?: RequestRedirect;
28
+ }
17
29
  //# sourceMappingURL=fetch.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.types.d.ts","sourceRoot":"","sources":["../../../src/winter/fetch/fetch.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAG3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,GAAG,CAAC;CACd"}
1
+ {"version":3,"file":"fetch.types.d.ts","sourceRoot":"","sources":["../../../src/winter/fetch/fetch.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAG3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAG1B,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC;CACrC"}
@@ -1,120 +1,120 @@
1
1
  {
2
- "@expo/fingerprint": "~0.16.3",
3
- "@expo/metro-runtime": "~55.0.4",
2
+ "@expo/fingerprint": "~0.16.5",
3
+ "@expo/metro-runtime": "~55.0.6",
4
4
  "@expo/vector-icons": "^15.0.2",
5
- "@expo/ui": "~55.0.0-preview.4",
5
+ "@expo/ui": "~55.0.0",
6
6
  "@react-native-async-storage/async-storage": "2.2.0",
7
7
  "@react-native-community/datetimepicker": "8.6.0",
8
8
  "@react-native-masked-view/masked-view": "0.3.2",
9
- "@react-native-community/netinfo": "11.4.1",
10
- "@react-native-community/slider": "5.1.1",
9
+ "@react-native-community/slider": "5.1.2",
10
+ "@react-native-community/netinfo": "11.5.2",
11
11
  "@react-native-community/viewpager": "5.0.11",
12
12
  "@react-native-picker/picker": "2.11.4",
13
13
  "@react-native-segmented-control/segmented-control": "2.5.7",
14
- "@stripe/stripe-react-native": "0.57.2",
14
+ "@stripe/stripe-react-native": "0.58.0",
15
15
  "eslint-config-expo": "~55.0.0",
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": "~55.0.4",
20
- "expo-application": "~55.0.4",
21
- "expo-asset": "~55.0.3",
22
- "expo-audio": "~55.0.4",
23
- "expo-auth-session": "~55.0.3",
24
- "expo-background-fetch": "~55.0.4",
25
- "expo-background-task": "~55.0.4",
26
- "expo-battery": "~55.0.4",
27
- "expo-blur": "~55.0.4",
28
- "expo-brightness": "~55.0.4",
29
- "expo-brownfield": "~55.0.5",
30
- "expo-build-properties": "~55.0.5",
31
- "expo-calendar": "~55.0.4",
32
- "expo-camera": "~55.0.4",
33
- "expo-cellular": "~55.0.4",
34
- "expo-checkbox": "~55.0.2",
35
- "expo-clipboard": "~55.0.4",
36
- "expo-constants": "~55.0.3",
37
- "expo-contacts": "~55.0.4",
38
- "expo-crypto": "~55.0.4",
39
- "expo-dev-client": "~55.0.4",
40
- "expo-device": "~55.0.4",
41
- "expo-document-picker": "~55.0.4",
42
- "expo-file-system": "~55.0.4",
43
- "expo-font": "~55.0.3",
44
- "expo-gl": "~55.0.4",
45
- "expo-glass-effect": "~55.0.4",
19
+ "expo-apple-authentication": "~55.0.8",
20
+ "expo-application": "~55.0.8",
21
+ "expo-asset": "~55.0.7",
22
+ "expo-audio": "~55.0.8",
23
+ "expo-auth-session": "~55.0.6",
24
+ "expo-background-fetch": "~55.0.8",
25
+ "expo-background-task": "~55.0.8",
26
+ "expo-battery": "~55.0.8",
27
+ "expo-blur": "~55.0.8",
28
+ "expo-brightness": "~55.0.8",
29
+ "expo-brownfield": "~55.0.10",
30
+ "expo-build-properties": "~55.0.9",
31
+ "expo-calendar": "~55.0.8",
32
+ "expo-camera": "~55.0.8",
33
+ "expo-cellular": "~55.0.8",
34
+ "expo-checkbox": "~55.0.3",
35
+ "expo-clipboard": "~55.0.8",
36
+ "expo-constants": "~55.0.7",
37
+ "expo-contacts": "~55.0.8",
38
+ "expo-crypto": "~55.0.8",
39
+ "expo-dev-client": "~55.0.8",
40
+ "expo-device": "~55.0.9",
41
+ "expo-document-picker": "~55.0.8",
42
+ "expo-file-system": "~55.0.9",
43
+ "expo-font": "~55.0.4",
44
+ "expo-gl": "~55.0.9",
45
+ "expo-glass-effect": "~55.0.7",
46
46
  "expo-google-app-auth": "~8.3.0",
47
- "expo-haptics": "~55.0.4",
48
- "expo-image": "~55.0.3",
47
+ "expo-haptics": "~55.0.8",
48
+ "expo-image": "~55.0.5",
49
49
  "expo-image-loader": "~55.0.0",
50
- "expo-image-manipulator": "~55.0.4",
51
- "expo-image-picker": "~55.0.4",
52
- "expo-intent-launcher": "~55.0.4",
53
- "expo-insights": "~55.0.5",
54
- "expo-keep-awake": "~55.0.2",
55
- "expo-linear-gradient": "~55.0.4",
56
- "expo-linking": "~55.0.3",
57
- "expo-local-authentication": "~55.0.4",
58
- "expo-localization": "~55.0.4",
59
- "expo-location": "~55.0.5",
60
- "expo-mail-composer": "~55.0.4",
61
- "expo-manifests": "~55.0.4",
62
- "expo-maps": "~55.0.4",
50
+ "expo-image-manipulator": "~55.0.9",
51
+ "expo-image-picker": "~55.0.9",
52
+ "expo-intent-launcher": "~55.0.8",
53
+ "expo-insights": "~55.0.10",
54
+ "expo-keep-awake": "~55.0.4",
55
+ "expo-linear-gradient": "~55.0.8",
56
+ "expo-linking": "~55.0.7",
57
+ "expo-local-authentication": "~55.0.8",
58
+ "expo-localization": "~55.0.8",
59
+ "expo-location": "~55.1.2",
60
+ "expo-mail-composer": "~55.0.8",
61
+ "expo-manifests": "~55.0.9",
62
+ "expo-maps": "~55.0.9",
63
63
  "expo-mcp": "~0.2.1",
64
- "expo-media-library": "~55.0.4",
65
- "expo-mesh-gradient": "~55.0.4",
66
- "expo-module-template": "~55.0.4",
67
- "expo-modules-core": "~55.0.6",
68
- "expo-navigation-bar": "~55.0.4",
69
- "expo-network": "~55.0.4",
70
- "expo-notifications": "~55.0.5",
71
- "expo-print": "~55.0.4",
72
- "expo-live-photo": "~55.0.4",
73
- "expo-router": "~55.0.0-preview.5",
74
- "expo-screen-capture": "~55.0.4",
75
- "expo-screen-orientation": "~55.0.4",
76
- "expo-secure-store": "~55.0.4",
77
- "expo-sensors": "~55.0.4",
78
- "expo-server": "~55.0.3",
79
- "expo-sharing": "~55.0.5",
80
- "expo-sms": "~55.0.4",
81
- "expo-speech": "~55.0.4",
82
- "expo-splash-screen": "~55.0.4",
83
- "expo-sqlite": "~55.0.4",
84
- "expo-status-bar": "~55.0.2",
85
- "expo-store-review": "~55.0.4",
86
- "expo-symbols": "~55.0.3",
87
- "expo-system-ui": "~55.0.4",
88
- "expo-task-manager": "~55.0.4",
89
- "expo-tracking-transparency": "~55.0.4",
90
- "expo-updates": "~55.0.6",
91
- "expo-video-thumbnails": "~55.0.4",
92
- "expo-video": "~55.0.4",
93
- "expo-web-browser": "~55.0.4",
94
- "jest-expo": "~55.0.6",
64
+ "expo-media-library": "~55.0.9",
65
+ "expo-mesh-gradient": "~55.0.8",
66
+ "expo-module-template": "~55.0.7",
67
+ "expo-modules-core": "~55.0.11",
68
+ "expo-navigation-bar": "~55.0.8",
69
+ "expo-network": "~55.0.8",
70
+ "expo-notifications": "~55.0.10",
71
+ "expo-print": "~55.0.8",
72
+ "expo-live-photo": "~55.0.8",
73
+ "expo-router": "~55.0.0",
74
+ "expo-screen-capture": "~55.0.8",
75
+ "expo-screen-orientation": "~55.0.8",
76
+ "expo-secure-store": "~55.0.8",
77
+ "expo-sensors": "~55.0.8",
78
+ "expo-server": "~55.0.5",
79
+ "expo-sharing": "~55.0.10",
80
+ "expo-sms": "~55.0.8",
81
+ "expo-speech": "~55.0.8",
82
+ "expo-splash-screen": "~55.0.9",
83
+ "expo-sqlite": "~55.0.9",
84
+ "expo-status-bar": "~55.0.4",
85
+ "expo-store-review": "~55.0.8",
86
+ "expo-symbols": "~55.0.4",
87
+ "expo-system-ui": "~55.0.9",
88
+ "expo-task-manager": "~55.0.9",
89
+ "expo-tracking-transparency": "~55.0.8",
90
+ "expo-updates": "~55.0.11",
91
+ "expo-video-thumbnails": "~55.0.9",
92
+ "expo-video": "~55.0.9",
93
+ "expo-web-browser": "~55.0.9",
94
+ "jest-expo": "~55.0.9",
95
95
  "lottie-react-native": "~7.3.4",
96
96
  "react": "19.2.0",
97
97
  "react-dom": "19.2.0",
98
- "react-native": "0.83.1",
98
+ "react-native": "0.83.2",
99
99
  "react-native-web": "~0.21.0",
100
100
  "react-native-gesture-handler": "~2.30.0",
101
101
  "react-native-get-random-values": "~1.11.0",
102
- "react-native-keyboard-controller": "1.20.4",
102
+ "react-native-keyboard-controller": "1.20.7",
103
103
  "react-native-maps": "1.26.20",
104
104
  "react-native-pager-view": "8.0.0",
105
105
  "react-native-worklets": "0.7.2",
106
106
  "react-native-reanimated": "~4.2.1",
107
- "react-native-screens": "~4.20.0",
107
+ "react-native-screens": "~4.24.0",
108
108
  "react-native-safe-area-context": "~5.6.2",
109
- "react-native-svg": "15.15.1",
109
+ "react-native-svg": "15.15.3",
110
110
  "react-native-view-shot": "4.0.3",
111
111
  "react-native-webview": "13.16.0",
112
112
  "react-server-dom-webpack": "~19.2.4",
113
113
  "sentry-expo": "~7.0.0",
114
114
  "unimodules-app-loader": "~55.0.2",
115
115
  "unimodules-image-loader-interface": "~6.1.0",
116
- "@shopify/react-native-skia": "2.4.14",
116
+ "@shopify/react-native-skia": "2.4.18",
117
117
  "@shopify/flash-list": "2.0.2",
118
- "@sentry/react-native": "~7.10.0",
118
+ "@sentry/react-native": "~7.11.0",
119
119
  "react-native-bootsplash": "^6.3.10"
120
120
  }
@@ -58,7 +58,7 @@ public final class ExpoFetchModule: Module {
58
58
  AsyncFunction("arrayBuffer") { (response: NativeResponse, promise: Promise) in
59
59
  response.waitFor(states: [.bodyCompleted]) { _ in
60
60
  let data = response.sink.finalize()
61
- promise.resolve(data)
61
+ promise.resolve(ArrayBuffer.wrap(dataWithoutCopy: data))
62
62
  }
63
63
  }.runOnQueue(fetchRequestQueue)
64
64
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo",
3
- "version": "55.0.0-preview.8",
3
+ "version": "55.0.0",
4
4
  "description": "The Expo SDK",
5
5
  "main": "src/Expo.ts",
6
6
  "module": "src/Expo.ts",
@@ -77,39 +77,39 @@
77
77
  "homepage": "https://github.com/expo/expo/tree/main/packages/expo",
78
78
  "dependencies": {
79
79
  "@babel/runtime": "^7.20.0",
80
- "@expo/cli": "55.0.5",
81
- "@expo/config": "~55.0.4",
82
- "@expo/config-plugins": "~55.0.4",
80
+ "@expo/cli": "55.0.11",
81
+ "@expo/config": "~55.0.8",
82
+ "@expo/config-plugins": "~55.0.6",
83
83
  "@expo/devtools": "55.0.2",
84
- "@expo/fingerprint": "0.16.3",
85
- "@expo/local-build-cache-provider": "55.0.3",
86
- "@expo/log-box": "55.0.4",
84
+ "@expo/fingerprint": "0.16.5",
85
+ "@expo/local-build-cache-provider": "55.0.6",
86
+ "@expo/log-box": "55.0.7",
87
87
  "@expo/metro": "~54.2.0",
88
- "@expo/metro-config": "55.0.4",
88
+ "@expo/metro-config": "55.0.8",
89
89
  "@expo/vector-icons": "^15.0.2",
90
90
  "@ungap/structured-clone": "^1.3.0",
91
- "babel-preset-expo": "~55.0.3",
92
- "expo-asset": "~55.0.3",
93
- "expo-constants": "~55.0.3",
94
- "expo-file-system": "~55.0.4",
95
- "expo-font": "~55.0.3",
96
- "expo-keep-awake": "~55.0.2",
97
- "expo-modules-autolinking": "55.0.3",
98
- "expo-modules-core": "55.0.6",
91
+ "babel-preset-expo": "~55.0.7",
92
+ "expo-asset": "~55.0.7",
93
+ "expo-constants": "~55.0.7",
94
+ "expo-file-system": "~55.0.9",
95
+ "expo-font": "~55.0.4",
96
+ "expo-keep-awake": "~55.0.4",
97
+ "expo-modules-autolinking": "55.0.8",
98
+ "expo-modules-core": "55.0.11",
99
99
  "pretty-format": "^29.7.0",
100
100
  "react-refresh": "^0.14.2",
101
101
  "whatwg-url-minimum": "^0.1.1"
102
102
  },
103
103
  "devDependencies": {
104
- "@expo/dom-webview": "55.0.2",
105
- "@expo/metro-runtime": "^55.0.4",
104
+ "@expo/dom-webview": "^55.0.3",
105
+ "@expo/metro-runtime": "^55.0.6",
106
106
  "@types/node": "^22.14.0",
107
107
  "@types/react": "~19.2.0",
108
108
  "@types/react-test-renderer": "~19.1.0",
109
109
  "expo-module-scripts": "^55.0.2",
110
110
  "react": "19.2.0",
111
111
  "react-dom": "19.2.0",
112
- "react-native": "0.83.1",
112
+ "react-native": "0.83.2",
113
113
  "web-streams-polyfill": "^3.3.2"
114
114
  },
115
115
  "peerDependencies": {
@@ -130,5 +130,5 @@
130
130
  "optional": true
131
131
  }
132
132
  },
133
- "gitHead": "436ffb4355d5207f4a03fbc3568cd33424a40f3e"
133
+ "gitHead": "b183e5cbd95eb6ee54a878291c7077d8d63e4850"
134
134
  }
@@ -136,3 +136,19 @@ export function overrideHeaders(
136
136
  }
137
137
  return result;
138
138
  }
139
+
140
+ /** Normalizes known HTTP methods to uppercase */
141
+ export function normalizeMethod(method: string): string {
142
+ const normalized = method.toUpperCase();
143
+ switch (method.toUpperCase()) {
144
+ case 'DELETE':
145
+ case 'GET':
146
+ case 'HEAD':
147
+ case 'OPTIONS':
148
+ case 'POST':
149
+ case 'PUT':
150
+ return normalized;
151
+ default:
152
+ return method;
153
+ }
154
+ }
@@ -2,40 +2,63 @@ import { ExpoFetchModule } from './ExpoFetchModule';
2
2
  import { FetchError } from './FetchErrors';
3
3
  import { FetchResponse, type AbortSubscriptionCleanupFunction } from './FetchResponse';
4
4
  import { NativeRequest, NativeRequestInit } from './NativeRequest';
5
- import { normalizeBodyInitAsync, normalizeHeadersInit, overrideHeaders } from './RequestUtils';
6
- import type { FetchRequestInit } from './fetch.types';
5
+ import {
6
+ normalizeBodyInitAsync,
7
+ normalizeHeadersInit,
8
+ overrideHeaders,
9
+ normalizeMethod,
10
+ } from './RequestUtils';
11
+ import type { FetchRequestInit, FetchRequestLike } from './fetch.types';
12
+
13
+ /** Returns if `input` is a Request object */
14
+ const isRequest = (input: any): input is FetchRequestLike =>
15
+ input != null && typeof input === 'object' && 'body' in input;
7
16
 
8
17
  // TODO(@kitten): Do we really want to use our own types for web standards?
9
- export async function fetch(url: string, init?: FetchRequestInit): Promise<FetchResponse> {
18
+ export async function fetch(
19
+ input: string | URL | FetchRequestLike,
20
+ init?: FetchRequestInit
21
+ ): Promise<FetchResponse> {
22
+ const initFromRequest = isRequest(input);
23
+ const url = initFromRequest ? input.url : input;
24
+ const body = init?.body ?? (initFromRequest ? input.body : null);
25
+ const signal = init?.signal ?? (initFromRequest ? input.signal : undefined);
26
+ const redirect = init?.redirect ?? (initFromRequest ? input.redirect : undefined);
27
+ const method = init?.method ?? (initFromRequest ? input.method : undefined);
28
+ const credentials = init?.credentials ?? (initFromRequest ? input.credentials : undefined);
29
+
30
+ let headers = normalizeHeadersInit(
31
+ init?.headers ?? (initFromRequest ? input.headers : undefined)
32
+ );
33
+
10
34
  let abortSubscription: AbortSubscriptionCleanupFunction | null = null;
11
35
 
12
36
  const response = new FetchResponse(() => {
13
37
  abortSubscription?.();
14
38
  });
15
- const request = new ExpoFetchModule.NativeRequest(response) as NativeRequest;
16
39
 
17
- let headers = normalizeHeadersInit(init?.headers);
40
+ const request = new ExpoFetchModule.NativeRequest(response) as NativeRequest;
18
41
 
19
- const { body: requestBody, overriddenHeaders } = await normalizeBodyInitAsync(init?.body);
42
+ const { body: requestBody, overriddenHeaders } = await normalizeBodyInitAsync(body);
20
43
  if (overriddenHeaders) {
21
44
  headers = overrideHeaders(headers, overriddenHeaders);
22
45
  }
23
46
 
24
47
  const nativeRequestInit: NativeRequestInit = {
25
- credentials: init?.credentials ?? 'include',
48
+ credentials: credentials ?? 'include',
26
49
  headers,
27
- method: init?.method ?? 'GET',
28
- redirect: init?.redirect ?? 'follow',
50
+ method: method != null ? normalizeMethod(method) : 'GET',
51
+ redirect: redirect ?? 'follow',
29
52
  };
30
53
 
31
- if (init?.signal && init.signal.aborted) {
54
+ if (signal && signal.aborted) {
32
55
  throw new FetchError('The operation was aborted.');
33
56
  }
34
- abortSubscription = addAbortSignalListener(init?.signal, () => {
57
+ abortSubscription = addAbortSignalListener(signal, () => {
35
58
  request.cancel();
36
59
  });
37
60
  try {
38
- await request.start(url, nativeRequestInit, requestBody);
61
+ await request.start(`${url}`, nativeRequestInit, requestBody);
39
62
  } catch (e: unknown) {
40
63
  if (e instanceof Error) {
41
64
  throw FetchError.createFromError(e);
@@ -2,11 +2,11 @@
2
2
  * A fetch RequestInit compatible structure.
3
3
  */
4
4
  export interface FetchRequestInit {
5
- body?: BodyInit;
5
+ body?: BodyInit | null;
6
6
  credentials?: RequestCredentials; // same-origin is not supported
7
7
  headers?: HeadersInit;
8
8
  method?: string;
9
- signal?: AbortSignal;
9
+ signal?: AbortSignal | null;
10
10
  redirect?: RequestRedirect;
11
11
 
12
12
  // Not supported fields
@@ -16,3 +16,18 @@ export interface FetchRequestInit {
16
16
  referrer?: string;
17
17
  window?: any;
18
18
  }
19
+
20
+ /**
21
+ * A fetch Request compatible structure.
22
+ */
23
+ export interface FetchRequestLike {
24
+ readonly url: string;
25
+ readonly body: BodyInit | null;
26
+ readonly method: string;
27
+ readonly headers: Headers;
28
+
29
+ // Not always supported, marked as optional
30
+ readonly credentials?: RequestCredentials;
31
+ readonly signal?: AbortSignal;
32
+ readonly redirect?: RequestRedirect;
33
+ }
package/template.tgz CHANGED
Binary file
package/types/global.d.ts CHANGED
@@ -1,11 +1,4 @@
1
- /// <reference types="node" />
2
-
3
- // Extend the NodeJS namespace
4
- declare namespace NodeJS {
5
- interface ProcessEnv {
6
- readonly NODE_ENV: 'development' | 'production' | 'test';
7
- }
8
- }
1
+ /* eslint-disable */
9
2
 
10
3
  // Create types for CSS modules
11
4
  declare module '*.module.css' {
package/types/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ /// <reference types="expo-modules-core/types" />
2
+
1
3
  /// <reference types="./global" />
2
4
  /// <reference types="./metro-require" />
3
5
  /// <reference types="./react-native-web" />
@@ -1,11 +1,20 @@
1
- // Based on https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/webpack-env/index.d.ts
2
- // Adds support for the runtime `require.context` method.
3
- // https://github.com/facebook/metro/pull/822/
1
+ /* eslint-disable */
4
2
 
5
- declare var module: NodeModule;
3
+ // NOTE: This module is named `metro-require.d.ts` for backwards compatibility, since it's accessible to users
4
+ // However, it's supposed to be understood more as a "Metro environment" typings file that provides types for `require` and `module`,
5
+ // regardless of if `@types/node` is present, and/or, to enhance `@types/node` if it's present
6
6
 
7
7
  declare namespace __MetroModuleApi {
8
- interface RequireContext {
8
+ export interface ProcessEnv {
9
+ readonly NODE_ENV: 'development' | 'production' | 'test';
10
+ [key: string]: string | undefined;
11
+ }
12
+
13
+ export interface Process {
14
+ env: ProcessEnv;
15
+ }
16
+
17
+ export interface RequireContext {
9
18
  /** Return the keys that can be resolved. */
10
19
  keys(): string[];
11
20
  (id: string): any;
@@ -16,7 +25,8 @@ declare namespace __MetroModuleApi {
16
25
  id: string;
17
26
  }
18
27
 
19
- interface RequireFunction {
28
+ // Adds support for the runtime `require.context` method.
29
+ export interface RequireFunction {
20
30
  /**
21
31
  * Returns the exports from a dependency. The call is sync. No request to the server is fired. The compiler ensures that the dependency is available.
22
32
  */
@@ -40,13 +50,19 @@ declare namespace __MetroModuleApi {
40
50
  mode?: 'sync' | 'eager' | 'weak' | 'lazy' | 'lazy-once'
41
51
  ): RequireContext;
42
52
  }
53
+
54
+ export interface Module {
55
+ exports: any;
56
+ }
43
57
  }
44
58
 
45
- /**
46
- * Declare process variable
47
- */
48
59
  declare namespace NodeJS {
49
- interface Require extends __MetroModuleApi.RequireFunction {}
60
+ export interface Require extends __MetroModuleApi.RequireFunction {}
61
+ export interface Module extends __MetroModuleApi.Module {}
62
+ export interface ProcessEnv extends __MetroModuleApi.ProcessEnv {}
63
+ export interface Process extends __MetroModuleApi.Process {}
50
64
  }
51
65
 
52
- declare var require: NodeRequire;
66
+ declare var require: NodeJS.Require;
67
+ declare var module: NodeJS.Module;
68
+ declare var process: NodeJS.Process;
@@ -1,3 +1,5 @@
1
+ /* eslint-disable */
2
+
1
3
  import { StyleProp } from 'react-native';
2
4
  import * as RN from 'react-native';
3
5
 
@@ -1,9 +0,0 @@
1
- // Resolve `expo` > `expo-modules-autolinking` dependency chain
2
- def autolinkingPath = ["node", "--print", "require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })"]
3
- apply from: new File(
4
- providers.exec {
5
- workingDir(rootDir)
6
- commandLine(autolinkingPath)
7
- }.standardOutput.asText.get().trim(),
8
- "../scripts/android/autolinking_implementation.gradle"
9
- )