expo 55.0.0-canary-20260105-6b962e6 → 55.0.0-canary-20260119-70f7c28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +2 -2
- package/android/src/main/java/expo/modules/fetch/ExpoFetchModule.kt +4 -3
- package/android/src/main/java/expo/modules/fetch/NativeResponse.kt +3 -3
- package/android/src/main/java/expo/modules/fetch/ResponseSink.kt +7 -3
- package/build/async-require/hmr.d.ts.map +1 -1
- package/build/hooks/useEvent.d.ts +2 -2
- package/bundledNativeModules.json +91 -91
- package/ios/AppDelegates/ExpoReactNativeFactory.mm +6 -2
- package/package.json +22 -22
- package/src/Expo.fx.web.tsx +2 -2
- package/src/__tests__/__fbBatchedBridgeConfig-test.ts +7 -3
- package/src/async-require/asyncRequireModule.ts +2 -2
- package/src/async-require/hmr.ts +20 -22
- package/src/async-require/index.ts +1 -1
- package/src/async-require/setupFastRefresh.ts +3 -2
- package/src/hooks/useEvent.ts +2 -2
- package/template.tgz +0 -0
package/android/build.gradle
CHANGED
|
@@ -32,7 +32,7 @@ buildscript {
|
|
|
32
32
|
def reactNativeVersion = project.extensions.getByType(ExpoModuleExtension).reactNativeVersion
|
|
33
33
|
|
|
34
34
|
group = 'host.exp.exponent'
|
|
35
|
-
version = '55.0.0-canary-
|
|
35
|
+
version = '55.0.0-canary-20260119-70f7c28'
|
|
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 "55.0.0-canary-
|
|
46
|
+
versionName "55.0.0-canary-20260119-70f7c28"
|
|
47
47
|
consumerProguardFiles("proguard-rules.pro")
|
|
48
48
|
}
|
|
49
49
|
testOptions {
|
|
@@ -11,6 +11,7 @@ import expo.modules.core.errors.ModuleDestroyedException
|
|
|
11
11
|
import expo.modules.kotlin.Promise
|
|
12
12
|
import expo.modules.kotlin.exception.Exceptions
|
|
13
13
|
import expo.modules.kotlin.exception.toCodedException
|
|
14
|
+
import expo.modules.kotlin.jni.NativeArrayBuffer
|
|
14
15
|
import expo.modules.kotlin.modules.Module
|
|
15
16
|
import expo.modules.kotlin.modules.ModuleDefinition
|
|
16
17
|
import kotlinx.coroutines.CoroutineName
|
|
@@ -97,14 +98,14 @@ class ExpoFetchModule : Module() {
|
|
|
97
98
|
|
|
98
99
|
AsyncFunction("arrayBuffer") { response: NativeResponse, promise: Promise ->
|
|
99
100
|
response.waitForStates(listOf(ResponseState.BODY_COMPLETED)) {
|
|
100
|
-
val data = response.sink.finalize()
|
|
101
|
-
promise.resolve(data)
|
|
101
|
+
val data = response.sink.finalize(directBuffer = true)
|
|
102
|
+
promise.resolve(NativeArrayBuffer(data))
|
|
102
103
|
}
|
|
103
104
|
}
|
|
104
105
|
|
|
105
106
|
AsyncFunction("text") { response: NativeResponse, promise: Promise ->
|
|
106
107
|
response.waitForStates(listOf(ResponseState.BODY_COMPLETED)) {
|
|
107
|
-
val data = response.sink.finalize()
|
|
108
|
+
val data = response.sink.finalize(directBuffer = false).array()
|
|
108
109
|
val text = data.toString(Charsets.UTF_8)
|
|
109
110
|
promise.resolve(text)
|
|
110
111
|
}
|
|
@@ -40,7 +40,7 @@ internal class NativeResponse(appContext: AppContext, private val coroutineScope
|
|
|
40
40
|
get() = this.sink.bodyUsed
|
|
41
41
|
|
|
42
42
|
override fun deallocate() {
|
|
43
|
-
this.sink.finalize()
|
|
43
|
+
this.sink.finalize(directBuffer = false)
|
|
44
44
|
super.deallocate()
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -57,10 +57,10 @@ internal class NativeResponse(appContext: AppContext, private val coroutineScope
|
|
|
57
57
|
}
|
|
58
58
|
if (state == ResponseState.RESPONSE_RECEIVED) {
|
|
59
59
|
state = ResponseState.BODY_STREAMING_STARTED
|
|
60
|
-
val queuedData = this.sink.finalize()
|
|
60
|
+
val queuedData = this.sink.finalize(directBuffer = false).array()
|
|
61
61
|
emit("didReceiveResponseData", queuedData)
|
|
62
62
|
} else if (state == ResponseState.BODY_COMPLETED) {
|
|
63
|
-
val queuedData = this.sink.finalize()
|
|
63
|
+
val queuedData = this.sink.finalize(directBuffer = false).array()
|
|
64
64
|
return queuedData
|
|
65
65
|
}
|
|
66
66
|
return null
|
|
@@ -15,15 +15,19 @@ internal class ResponseSink {
|
|
|
15
15
|
bodyQueue.add(data)
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
fun finalize():
|
|
18
|
+
fun finalize(directBuffer: Boolean): ByteBuffer {
|
|
19
19
|
val size = bodyQueue.sumOf { it.size }
|
|
20
|
-
val byteBuffer =
|
|
20
|
+
val byteBuffer = if (directBuffer) {
|
|
21
|
+
ByteBuffer.allocateDirect(size)
|
|
22
|
+
} else {
|
|
23
|
+
ByteBuffer.allocate(size)
|
|
24
|
+
}
|
|
21
25
|
for (byteArray in bodyQueue) {
|
|
22
26
|
byteBuffer.put(byteArray)
|
|
23
27
|
}
|
|
24
28
|
bodyQueue.clear()
|
|
25
29
|
bodyUsed = true
|
|
26
30
|
isFinalized = true
|
|
27
|
-
return byteBuffer
|
|
31
|
+
return byteBuffer
|
|
28
32
|
}
|
|
29
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hmr.d.ts","sourceRoot":"","sources":["../../src/async-require/hmr.ts"],"names":[],"mappings":"AAiCA,KAAK,QAAQ,GACT,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,GACP,KAAK,GACL,OAAO,GACP,gBAAgB,GAChB,UAAU,GACV,OAAO,CAAC;AAMZ;;;GAGG;AACH,QAAA,MAAM,SAAS;;;+BAyCc,MAAM;eAMtB,QAAQ,QAAQ,GAAG,EAAE;6BA8CX,MAAM,GAAG;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,gBACpC,MAAM,SACb,MAAM,SACN,MAAM,GAAG,MAAM,yBACC,OAAO,WACtB,MAAM;
|
|
1
|
+
{"version":3,"file":"hmr.d.ts","sourceRoot":"","sources":["../../src/async-require/hmr.ts"],"names":[],"mappings":"AAiCA,KAAK,QAAQ,GACT,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,GACP,KAAK,GACL,OAAO,GACP,gBAAgB,GAChB,UAAU,GACV,OAAO,CAAC;AAMZ;;;GAGG;AACH,QAAA,MAAM,SAAS;;;+BAyCc,MAAM;eAMtB,QAAQ,QAAQ,GAAG,EAAE;6BA8CX,MAAM,GAAG;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,gBACpC,MAAM,SACb,MAAM,SACN,MAAM,GAAG,MAAM,yBACC,OAAO,WACtB,MAAM;yBAmHK,OAAO;CA4B7B,CAAC;AA8DF,eAAe,SAAS,CAAC"}
|
|
@@ -15,7 +15,7 @@ type InferEventParameter<TEventListener extends AnyEventListener, TInitialValue>
|
|
|
15
15
|
/**
|
|
16
16
|
* React hook that listens to events emitted by the given object. The returned value is an event parameter
|
|
17
17
|
* that gets updated whenever a new event is dispatched.
|
|
18
|
-
* @param eventEmitter An object that emits events. For example, a native module or shared object or an instance of [`EventEmitter`](#
|
|
18
|
+
* @param eventEmitter An object that emits events. For example, a native module or shared object or an instance of [`EventEmitter`](#eventemittertype).
|
|
19
19
|
* @param eventName Name of the event to listen to.
|
|
20
20
|
* @param initialValue An event parameter to use until the event is called for the first time.
|
|
21
21
|
* @returns A parameter of the event listener.
|
|
@@ -35,7 +35,7 @@ export declare function useEvent<TEventsMap extends Record<string, AnyEventListe
|
|
|
35
35
|
/**
|
|
36
36
|
* React hook that listens to events emitted by the given object and calls the listener function whenever a new event is dispatched.
|
|
37
37
|
* The event listener is automatically added during the first render and removed when the component unmounts.
|
|
38
|
-
* @param eventEmitter An object that emits events. For example, a native module or shared object or an instance of [`EventEmitter`](#
|
|
38
|
+
* @param eventEmitter An object that emits events. For example, a native module or shared object or an instance of [`EventEmitter`](#eventemittertype).
|
|
39
39
|
* @param eventName Name of the event to listen to.
|
|
40
40
|
* @param listener A function to call when the event is dispatched.
|
|
41
41
|
* @example
|
|
@@ -1,118 +1,118 @@
|
|
|
1
1
|
{
|
|
2
|
-
"@expo/fingerprint": "0.15.5-canary-
|
|
3
|
-
"@expo/metro-runtime": "6.2.0-canary-
|
|
2
|
+
"@expo/fingerprint": "0.15.5-canary-20260119-70f7c28",
|
|
3
|
+
"@expo/metro-runtime": "6.2.0-canary-20260119-70f7c28",
|
|
4
4
|
"@expo/vector-icons": "^15.0.2",
|
|
5
|
-
"@expo/ui": "0.2.0-canary-
|
|
5
|
+
"@expo/ui": "0.2.0-canary-20260119-70f7c28",
|
|
6
6
|
"@react-native-async-storage/async-storage": "2.2.0",
|
|
7
|
-
"@react-native-community/datetimepicker": "8.
|
|
7
|
+
"@react-native-community/datetimepicker": "8.6.0",
|
|
8
8
|
"@react-native-masked-view/masked-view": "0.3.2",
|
|
9
9
|
"@react-native-community/netinfo": "11.4.1",
|
|
10
|
-
"@react-native-community/slider": "5.
|
|
10
|
+
"@react-native-community/slider": "5.1.1",
|
|
11
11
|
"@react-native-community/viewpager": "5.0.11",
|
|
12
|
-
"@react-native-picker/picker": "2.11.
|
|
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.
|
|
15
|
-
"eslint-config-expo": "10.0.1-canary-
|
|
14
|
+
"@stripe/stripe-react-native": "0.57.2",
|
|
15
|
+
"eslint-config-expo": "10.0.1-canary-20260119-70f7c28",
|
|
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.9-canary-
|
|
20
|
-
"expo-application": "7.0.9-canary-
|
|
21
|
-
"expo-asset": "12.0.13-canary-
|
|
22
|
-
"expo-audio": "1.2.0-canary-
|
|
23
|
-
"expo-auth-session": "7.0
|
|
24
|
-
"expo-background-fetch": "14.0.10-canary-
|
|
25
|
-
"expo-background-task": "1.0.11-canary-
|
|
26
|
-
"expo-battery": "10.0.9-canary-
|
|
27
|
-
"expo-blur": "16.0.0-canary-
|
|
28
|
-
"expo-brightness": "15.0.0-canary-
|
|
29
|
-
"expo-build-properties": "2.0.0-canary-
|
|
30
|
-
"expo-calendar": "15.1.0-canary-
|
|
31
|
-
"expo-camera": "17.1.0-canary-
|
|
32
|
-
"expo-cellular": "8.0.9-canary-
|
|
33
|
-
"expo-checkbox": "5.0.9-canary-
|
|
34
|
-
"expo-clipboard": "9.0.0-canary-
|
|
35
|
-
"expo-constants": "18.1.0-canary-
|
|
36
|
-
"expo-contacts": "15.1.0-canary-
|
|
37
|
-
"expo-crypto": "15.0
|
|
38
|
-
"expo-dev-client": "6.1.0-canary-
|
|
39
|
-
"expo-device": "8.0.11-canary-
|
|
40
|
-
"expo-document-picker": "14.0.9-canary-
|
|
41
|
-
"expo-file-system": "19.0.22-canary-
|
|
42
|
-
"expo-font": "14.1.0-canary-
|
|
43
|
-
"expo-gl": "16.0.10-canary-
|
|
44
|
-
"expo-glass-effect": "0.2.0-canary-
|
|
19
|
+
"expo-apple-authentication": "8.0.9-canary-20260119-70f7c28",
|
|
20
|
+
"expo-application": "7.0.9-canary-20260119-70f7c28",
|
|
21
|
+
"expo-asset": "12.0.13-canary-20260119-70f7c28",
|
|
22
|
+
"expo-audio": "1.2.0-canary-20260119-70f7c28",
|
|
23
|
+
"expo-auth-session": "7.1.0-canary-20260119-70f7c28",
|
|
24
|
+
"expo-background-fetch": "14.0.10-canary-20260119-70f7c28",
|
|
25
|
+
"expo-background-task": "1.0.11-canary-20260119-70f7c28",
|
|
26
|
+
"expo-battery": "10.0.9-canary-20260119-70f7c28",
|
|
27
|
+
"expo-blur": "16.0.0-canary-20260119-70f7c28",
|
|
28
|
+
"expo-brightness": "15.0.0-canary-20260119-70f7c28",
|
|
29
|
+
"expo-build-properties": "2.0.0-canary-20260119-70f7c28",
|
|
30
|
+
"expo-calendar": "15.1.0-canary-20260119-70f7c28",
|
|
31
|
+
"expo-camera": "17.1.0-canary-20260119-70f7c28",
|
|
32
|
+
"expo-cellular": "8.0.9-canary-20260119-70f7c28",
|
|
33
|
+
"expo-checkbox": "5.0.9-canary-20260119-70f7c28",
|
|
34
|
+
"expo-clipboard": "9.0.0-canary-20260119-70f7c28",
|
|
35
|
+
"expo-constants": "18.1.0-canary-20260119-70f7c28",
|
|
36
|
+
"expo-contacts": "15.1.0-canary-20260119-70f7c28",
|
|
37
|
+
"expo-crypto": "15.1.0-canary-20260119-70f7c28",
|
|
38
|
+
"expo-dev-client": "6.1.0-canary-20260119-70f7c28",
|
|
39
|
+
"expo-device": "8.0.11-canary-20260119-70f7c28",
|
|
40
|
+
"expo-document-picker": "14.0.9-canary-20260119-70f7c28",
|
|
41
|
+
"expo-file-system": "19.0.22-canary-20260119-70f7c28",
|
|
42
|
+
"expo-font": "14.1.0-canary-20260119-70f7c28",
|
|
43
|
+
"expo-gl": "16.0.10-canary-20260119-70f7c28",
|
|
44
|
+
"expo-glass-effect": "0.2.0-canary-20260119-70f7c28",
|
|
45
45
|
"expo-google-app-auth": "~8.3.0",
|
|
46
|
-
"expo-haptics": "15.0.9-canary-
|
|
47
|
-
"expo-image": "3.1.0-canary-
|
|
48
|
-
"expo-image-loader": "7.0.0-canary-
|
|
49
|
-
"expo-image-manipulator": "14.0.9-canary-
|
|
50
|
-
"expo-image-picker": "17.1.0-canary-
|
|
51
|
-
"expo-intent-launcher": "13.0.9-canary-
|
|
52
|
-
"expo-insights": "0.10.9-canary-
|
|
53
|
-
"expo-keep-awake": "15.0.9-canary-
|
|
54
|
-
"expo-linear-gradient": "15.0.9-canary-
|
|
55
|
-
"expo-linking": "8.0.12-canary-
|
|
56
|
-
"expo-local-authentication": "17.0.9-canary-
|
|
57
|
-
"expo-localization": "18.0.0-canary-
|
|
58
|
-
"expo-location": "19.0
|
|
59
|
-
"expo-mail-composer": "15.0.9-canary-
|
|
60
|
-
"expo-manifests": "1.0.11-canary-
|
|
61
|
-
"expo-maps": "0.13.0-canary-
|
|
46
|
+
"expo-haptics": "15.0.9-canary-20260119-70f7c28",
|
|
47
|
+
"expo-image": "3.1.0-canary-20260119-70f7c28",
|
|
48
|
+
"expo-image-loader": "7.0.0-canary-20260119-70f7c28",
|
|
49
|
+
"expo-image-manipulator": "14.0.9-canary-20260119-70f7c28",
|
|
50
|
+
"expo-image-picker": "17.1.0-canary-20260119-70f7c28",
|
|
51
|
+
"expo-intent-launcher": "13.0.9-canary-20260119-70f7c28",
|
|
52
|
+
"expo-insights": "0.10.9-canary-20260119-70f7c28",
|
|
53
|
+
"expo-keep-awake": "15.0.9-canary-20260119-70f7c28",
|
|
54
|
+
"expo-linear-gradient": "15.0.9-canary-20260119-70f7c28",
|
|
55
|
+
"expo-linking": "8.0.12-canary-20260119-70f7c28",
|
|
56
|
+
"expo-local-authentication": "17.0.9-canary-20260119-70f7c28",
|
|
57
|
+
"expo-localization": "18.0.0-canary-20260119-70f7c28",
|
|
58
|
+
"expo-location": "19.1.0-canary-20260119-70f7c28",
|
|
59
|
+
"expo-mail-composer": "15.0.9-canary-20260119-70f7c28",
|
|
60
|
+
"expo-manifests": "1.0.11-canary-20260119-70f7c28",
|
|
61
|
+
"expo-maps": "0.13.0-canary-20260119-70f7c28",
|
|
62
62
|
"expo-mcp": "~0.2.1",
|
|
63
|
-
"expo-media-library": "18.3.0-canary-
|
|
64
|
-
"expo-mesh-gradient": "0.4.9-canary-
|
|
65
|
-
"expo-module-template": "11.0.19-canary-
|
|
66
|
-
"expo-modules-core": "4.0.0-canary-
|
|
67
|
-
"expo-navigation-bar": "5.0.11-canary-
|
|
68
|
-
"expo-network": "8.0.9-canary-
|
|
69
|
-
"expo-notifications": "1.0.0-canary-
|
|
70
|
-
"expo-print": "15.0.9-canary-
|
|
71
|
-
"expo-live-photo": "1.0.9-canary-
|
|
72
|
-
"expo-router": "7.0.0-canary-
|
|
73
|
-
"expo-screen-capture": "8.0.10-canary-
|
|
74
|
-
"expo-screen-orientation": "9.0.9-canary-
|
|
75
|
-
"expo-secure-store": "15.0.9-canary-
|
|
76
|
-
"expo-sensors": "15.0.9-canary-
|
|
77
|
-
"expo-server": "1.0
|
|
78
|
-
"expo-sharing": "14.0.9-canary-
|
|
79
|
-
"expo-sms": "14.0.9-canary-
|
|
80
|
-
"expo-speech": "14.1.0-canary-
|
|
81
|
-
"expo-splash-screen": "31.0.14-canary-
|
|
82
|
-
"expo-sqlite": "16.1.0-canary-
|
|
83
|
-
"expo-status-bar": "3.0.10-canary-
|
|
84
|
-
"expo-store-review": "9.0.10-canary-
|
|
85
|
-
"expo-symbols": "1.1.0-canary-
|
|
86
|
-
"expo-system-ui": "6.0.10-canary-
|
|
87
|
-
"expo-task-manager": "14.0.10-canary-
|
|
88
|
-
"expo-tracking-transparency": "6.0.9-canary-
|
|
89
|
-
"expo-updates": "29.1.0-canary-
|
|
90
|
-
"expo-video-thumbnails": "10.0.9-canary-
|
|
91
|
-
"expo-video": "
|
|
92
|
-
"expo-web-browser": "15.0.11-canary-
|
|
93
|
-
"jest-expo": "55.0.0-canary-
|
|
63
|
+
"expo-media-library": "18.3.0-canary-20260119-70f7c28",
|
|
64
|
+
"expo-mesh-gradient": "0.4.9-canary-20260119-70f7c28",
|
|
65
|
+
"expo-module-template": "11.0.19-canary-20260119-70f7c28",
|
|
66
|
+
"expo-modules-core": "4.0.0-canary-20260119-70f7c28",
|
|
67
|
+
"expo-navigation-bar": "5.0.11-canary-20260119-70f7c28",
|
|
68
|
+
"expo-network": "8.0.9-canary-20260119-70f7c28",
|
|
69
|
+
"expo-notifications": "1.0.0-canary-20260119-70f7c28",
|
|
70
|
+
"expo-print": "15.0.9-canary-20260119-70f7c28",
|
|
71
|
+
"expo-live-photo": "1.0.9-canary-20260119-70f7c28",
|
|
72
|
+
"expo-router": "7.0.0-canary-20260119-70f7c28",
|
|
73
|
+
"expo-screen-capture": "8.0.10-canary-20260119-70f7c28",
|
|
74
|
+
"expo-screen-orientation": "9.0.9-canary-20260119-70f7c28",
|
|
75
|
+
"expo-secure-store": "15.0.9-canary-20260119-70f7c28",
|
|
76
|
+
"expo-sensors": "15.0.9-canary-20260119-70f7c28",
|
|
77
|
+
"expo-server": "1.1.0-canary-20260119-70f7c28",
|
|
78
|
+
"expo-sharing": "14.0.9-canary-20260119-70f7c28",
|
|
79
|
+
"expo-sms": "14.0.9-canary-20260119-70f7c28",
|
|
80
|
+
"expo-speech": "14.1.0-canary-20260119-70f7c28",
|
|
81
|
+
"expo-splash-screen": "31.0.14-canary-20260119-70f7c28",
|
|
82
|
+
"expo-sqlite": "16.1.0-canary-20260119-70f7c28",
|
|
83
|
+
"expo-status-bar": "3.0.10-canary-20260119-70f7c28",
|
|
84
|
+
"expo-store-review": "9.0.10-canary-20260119-70f7c28",
|
|
85
|
+
"expo-symbols": "1.1.0-canary-20260119-70f7c28",
|
|
86
|
+
"expo-system-ui": "6.0.10-canary-20260119-70f7c28",
|
|
87
|
+
"expo-task-manager": "14.0.10-canary-20260119-70f7c28",
|
|
88
|
+
"expo-tracking-transparency": "6.0.9-canary-20260119-70f7c28",
|
|
89
|
+
"expo-updates": "29.1.0-canary-20260119-70f7c28",
|
|
90
|
+
"expo-video-thumbnails": "10.0.9-canary-20260119-70f7c28",
|
|
91
|
+
"expo-video": "4.0.0-canary-20260119-70f7c28",
|
|
92
|
+
"expo-web-browser": "15.0.11-canary-20260119-70f7c28",
|
|
93
|
+
"jest-expo": "55.0.0-canary-20260119-70f7c28",
|
|
94
94
|
"lottie-react-native": "~7.3.4",
|
|
95
95
|
"react": "19.2.0",
|
|
96
96
|
"react-dom": "19.2.0",
|
|
97
97
|
"react-native": "0.83.1",
|
|
98
98
|
"react-native-web": "~0.21.0",
|
|
99
|
-
"react-native-gesture-handler": "~2.
|
|
99
|
+
"react-native-gesture-handler": "~2.30.0",
|
|
100
100
|
"react-native-get-random-values": "~1.11.0",
|
|
101
|
-
"react-native-keyboard-controller": "1.
|
|
102
|
-
"react-native-maps": "1.20
|
|
103
|
-
"react-native-pager-view": "
|
|
101
|
+
"react-native-keyboard-controller": "1.20.4",
|
|
102
|
+
"react-native-maps": "1.26.20",
|
|
103
|
+
"react-native-pager-view": "8.0.0",
|
|
104
104
|
"react-native-worklets": "0.7.1",
|
|
105
|
-
"react-native-reanimated": "~4.2.
|
|
105
|
+
"react-native-reanimated": "~4.2.1",
|
|
106
106
|
"react-native-screens": "~4.19.0",
|
|
107
|
-
"react-native-safe-area-context": "~5.6.
|
|
108
|
-
"react-native-svg": "15.
|
|
107
|
+
"react-native-safe-area-context": "~5.6.2",
|
|
108
|
+
"react-native-svg": "15.15.1",
|
|
109
109
|
"react-native-view-shot": "4.0.3",
|
|
110
|
-
"react-native-webview": "13.
|
|
110
|
+
"react-native-webview": "13.16.0",
|
|
111
111
|
"react-server-dom-webpack": "~19.2.3",
|
|
112
112
|
"sentry-expo": "~7.0.0",
|
|
113
|
-
"unimodules-app-loader": "6.0.9-canary-
|
|
113
|
+
"unimodules-app-loader": "6.0.9-canary-20260119-70f7c28",
|
|
114
114
|
"unimodules-image-loader-interface": "~6.1.0",
|
|
115
|
-
"@shopify/react-native-skia": "2.
|
|
115
|
+
"@shopify/react-native-skia": "2.4.14",
|
|
116
116
|
"@shopify/flash-list": "2.0.2",
|
|
117
117
|
"@sentry/react-native": "~7.2.0",
|
|
118
118
|
"react-native-bootsplash": "^6.3.10"
|
|
@@ -4,7 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
#import <ExpoModulesCore/ExpoModulesCore.h>
|
|
6
6
|
#import <ExpoModulesCore/EXRuntime.h>
|
|
7
|
-
#
|
|
7
|
+
#if __has_include(<ExpoModulesCore/ExpoModulesCore-Swift.h>)
|
|
8
|
+
#import <ExpoModulesCore/ExpoModulesCore-Swift.h>
|
|
9
|
+
#else
|
|
10
|
+
#import "ExpoModulesCore-Swift.h"
|
|
11
|
+
#endif
|
|
8
12
|
#import <ReactCommon/RCTHost.h>
|
|
9
13
|
|
|
10
14
|
@implementation EXReactNativeFactory {
|
|
@@ -34,7 +38,7 @@
|
|
|
34
38
|
// Inject and decorate the `global.expo` object
|
|
35
39
|
_appContext._runtime = [[EXRuntime alloc] initWithRuntime:runtime];
|
|
36
40
|
[_appContext setHostWrapper:[[EXHostWrapper alloc] initWithHost:host]];
|
|
37
|
-
|
|
41
|
+
|
|
38
42
|
[_appContext registerNativeModules];
|
|
39
43
|
}
|
|
40
44
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo",
|
|
3
|
-
"version": "55.0.0-canary-
|
|
3
|
+
"version": "55.0.0-canary-20260119-70f7c28",
|
|
4
4
|
"description": "The Expo SDK",
|
|
5
5
|
"main": "src/Expo.ts",
|
|
6
6
|
"module": "src/Expo.ts",
|
|
@@ -77,44 +77,44 @@
|
|
|
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.0-canary-
|
|
81
|
-
"@expo/config": "12.0.14-canary-
|
|
82
|
-
"@expo/config-plugins": "54.0
|
|
83
|
-
"@expo/devtools": "0.1.9-canary-
|
|
84
|
-
"@expo/fingerprint": "0.15.5-canary-
|
|
85
|
-
"@expo/local-build-cache-provider": "0.0.1-canary-
|
|
80
|
+
"@expo/cli": "55.0.0-canary-20260119-70f7c28",
|
|
81
|
+
"@expo/config": "12.0.14-canary-20260119-70f7c28",
|
|
82
|
+
"@expo/config-plugins": "54.1.0-canary-20260119-70f7c28",
|
|
83
|
+
"@expo/devtools": "0.1.9-canary-20260119-70f7c28",
|
|
84
|
+
"@expo/fingerprint": "0.15.5-canary-20260119-70f7c28",
|
|
85
|
+
"@expo/local-build-cache-provider": "0.0.1-canary-20260119-70f7c28",
|
|
86
86
|
"@expo/metro": "~54.2.0",
|
|
87
|
-
"@expo/metro-config": "54.1.0-canary-
|
|
87
|
+
"@expo/metro-config": "54.1.0-canary-20260119-70f7c28",
|
|
88
88
|
"@expo/vector-icons": "^15.0.2",
|
|
89
|
-
"@expo/log-box": "0.0.13-canary-
|
|
89
|
+
"@expo/log-box": "0.0.13-canary-20260119-70f7c28",
|
|
90
90
|
"@ungap/structured-clone": "^1.3.0",
|
|
91
|
-
"babel-preset-expo": "54.1.0-canary-
|
|
92
|
-
"expo-asset": "12.0.13-canary-
|
|
93
|
-
"expo-constants": "18.1.0-canary-
|
|
94
|
-
"expo-file-system": "19.0.22-canary-
|
|
95
|
-
"expo-font": "14.1.0-canary-
|
|
96
|
-
"expo-keep-awake": "15.0.9-canary-
|
|
97
|
-
"expo-modules-autolinking": "3.1.0-canary-
|
|
98
|
-
"expo-modules-core": "4.0.0-canary-
|
|
91
|
+
"babel-preset-expo": "54.1.0-canary-20260119-70f7c28",
|
|
92
|
+
"expo-asset": "12.0.13-canary-20260119-70f7c28",
|
|
93
|
+
"expo-constants": "18.1.0-canary-20260119-70f7c28",
|
|
94
|
+
"expo-file-system": "19.0.22-canary-20260119-70f7c28",
|
|
95
|
+
"expo-font": "14.1.0-canary-20260119-70f7c28",
|
|
96
|
+
"expo-keep-awake": "15.0.9-canary-20260119-70f7c28",
|
|
97
|
+
"expo-modules-autolinking": "3.1.0-canary-20260119-70f7c28",
|
|
98
|
+
"expo-modules-core": "4.0.0-canary-20260119-70f7c28",
|
|
99
99
|
"pretty-format": "^29.7.0",
|
|
100
100
|
"react-refresh": "^0.14.2",
|
|
101
101
|
"whatwg-url-without-unicode": "8.0.0-3"
|
|
102
102
|
},
|
|
103
103
|
"devDependencies": {
|
|
104
|
-
"@expo/dom-webview": "0.2.9-canary-
|
|
105
|
-
"@expo/metro-runtime": "6.2.0-canary-
|
|
104
|
+
"@expo/dom-webview": "0.2.9-canary-20260119-70f7c28",
|
|
105
|
+
"@expo/metro-runtime": "6.2.0-canary-20260119-70f7c28",
|
|
106
106
|
"@types/node": "^22.14.0",
|
|
107
107
|
"@types/react": "~19.2.0",
|
|
108
108
|
"@types/react-test-renderer": "~19.1.0",
|
|
109
|
-
"expo-module-scripts": "5.1.0-canary-
|
|
109
|
+
"expo-module-scripts": "5.1.0-canary-20260119-70f7c28",
|
|
110
110
|
"react": "19.2.0",
|
|
111
111
|
"react-dom": "19.2.0",
|
|
112
112
|
"react-native": "0.83.1",
|
|
113
113
|
"web-streams-polyfill": "^3.3.2"
|
|
114
114
|
},
|
|
115
115
|
"peerDependencies": {
|
|
116
|
-
"@expo/dom-webview": "0.2.9-canary-
|
|
117
|
-
"@expo/metro-runtime": "6.2.0-canary-
|
|
116
|
+
"@expo/dom-webview": "0.2.9-canary-20260119-70f7c28",
|
|
117
|
+
"@expo/metro-runtime": "6.2.0-canary-20260119-70f7c28",
|
|
118
118
|
"react": "*",
|
|
119
119
|
"react-native": "*",
|
|
120
120
|
"react-native-webview": "*"
|
package/src/Expo.fx.web.tsx
CHANGED
|
@@ -9,9 +9,9 @@ import 'expo/virtual/rsc';
|
|
|
9
9
|
if (__DEV__) {
|
|
10
10
|
if (
|
|
11
11
|
// Skip mocking if someone is shimming this value out.
|
|
12
|
-
!('__fbBatchedBridgeConfig' in
|
|
12
|
+
!('__fbBatchedBridgeConfig' in globalThis)
|
|
13
13
|
) {
|
|
14
|
-
Object.defineProperty(
|
|
14
|
+
Object.defineProperty(globalThis, '__fbBatchedBridgeConfig', {
|
|
15
15
|
get() {
|
|
16
16
|
throw new Error(
|
|
17
17
|
"Your web project is importing a module from 'react-native' instead of 'react-native-web'. Learn more: https://expo.fyi/fb-batched-bridge-config-web"
|
|
@@ -6,14 +6,18 @@ jest.mock('../async-require/getDevServer');
|
|
|
6
6
|
|
|
7
7
|
if (Platform.OS === 'web') {
|
|
8
8
|
it('provides a helpful error message on web', () => {
|
|
9
|
+
const error =
|
|
10
|
+
/Your web project is importing a module from 'react-native' instead of 'react-native-web'/;
|
|
9
11
|
// @ts-ignore
|
|
10
|
-
expect(() => global.__fbBatchedBridgeConfig).toThrow(
|
|
11
|
-
|
|
12
|
-
);
|
|
12
|
+
expect(() => global.__fbBatchedBridgeConfig).toThrow(error);
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
expect(() => globalThis.__fbBatchedBridgeConfig).toThrow(error);
|
|
13
15
|
});
|
|
14
16
|
} else {
|
|
15
17
|
it(`does not change the functionality of __fbBatchedBridgeConfig on native`, () => {
|
|
16
18
|
// @ts-ignore
|
|
17
19
|
expect(() => global.__fbBatchedBridgeConfig).not.toThrow();
|
|
20
|
+
// @ts-ignore
|
|
21
|
+
expect(() => globalThis.__fbBatchedBridgeConfig).not.toThrow();
|
|
18
22
|
});
|
|
19
23
|
}
|
|
@@ -20,8 +20,8 @@ type DependencyMapPaths = { [moduleID: number | string]: unknown } | null;
|
|
|
20
20
|
declare let __METRO_GLOBAL_PREFIX__: string;
|
|
21
21
|
|
|
22
22
|
function maybeLoadBundle(moduleID: number, paths: DependencyMapPaths): void | Promise<void> {
|
|
23
|
-
const loadBundle: (bundlePath: unknown) => Promise<void> = (
|
|
24
|
-
`${__METRO_GLOBAL_PREFIX__}__loadBundleAsync`
|
|
23
|
+
const loadBundle: (bundlePath: unknown) => Promise<void> = (globalThis as any)[
|
|
24
|
+
`${__METRO_GLOBAL_PREFIX__ ?? ''}__loadBundleAsync`
|
|
25
25
|
];
|
|
26
26
|
|
|
27
27
|
if (loadBundle != null) {
|
package/src/async-require/hmr.ts
CHANGED
|
@@ -233,29 +233,22 @@ const HMRClient = {
|
|
|
233
233
|
|
|
234
234
|
client.on('error', (data) => this._onMetroError(data));
|
|
235
235
|
|
|
236
|
-
client.on('close', (closeEvent
|
|
236
|
+
client.on('close', (closeEvent?: { code: number; reason: string }) => {
|
|
237
237
|
hideLoading();
|
|
238
|
-
|
|
238
|
+
const reason = closeEvent?.reason;
|
|
239
|
+
const code = closeEvent?.code || 1000;
|
|
239
240
|
// https://www.rfc-editor.org/rfc/rfc6455.html#section-7.4.1
|
|
240
241
|
// https://www.rfc-editor.org/rfc/rfc6455.html#section-7.1.5
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
? 'Disconnected from Expo CLI.'
|
|
252
|
-
: `Disconnected from Expo CLI (${closeEvent.code}: "${closeEvent.reason}").`
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
To reconnect:
|
|
256
|
-
- Start the dev server with: npx expo
|
|
257
|
-
- Reload the ${process.env.EXPO_OS === 'web' ? 'page' : 'app'}`
|
|
258
|
-
);
|
|
242
|
+
const title =
|
|
243
|
+
reason && code !== 1000 && code !== 1001 && code !== 1005
|
|
244
|
+
? `Disconnected from Metro (${code}: "${reason}")`
|
|
245
|
+
: `Disconnected from Metro (${code})`;
|
|
246
|
+
const message =
|
|
247
|
+
title +
|
|
248
|
+
'\nTo reconnect:' +
|
|
249
|
+
'\n- Ensure that Metro is running and available on the same network' +
|
|
250
|
+
'\n- Reload this app (will trigger further help if Metro cannot be connected to)';
|
|
251
|
+
setHMRUnavailableReason(message);
|
|
259
252
|
});
|
|
260
253
|
|
|
261
254
|
if (isEnabled) {
|
|
@@ -312,8 +305,13 @@ function setHMRUnavailableReason(reason: string) {
|
|
|
312
305
|
// previously managed to connect successfully. We don't want to show
|
|
313
306
|
// the warning to native engineers who use cached bundles without Metro.
|
|
314
307
|
if (hmrClient.isEnabled() && didConnect) {
|
|
315
|
-
|
|
316
|
-
//
|
|
308
|
+
// NOTE(@kitten): The timeout works around a Firefox quirk
|
|
309
|
+
// In Firefox, unlike in Chrome, WebSockets fire a `close` event when a tab refreshes/navigates/closes, since this closes the WebSocket
|
|
310
|
+
// However, there's no good way to detect that this is happening or that the client initiated the `close` event
|
|
311
|
+
// To work around this, we schedule a timeout for our warning for 500ms which is long enough for this timer to never trigger
|
|
312
|
+
setTimeout(() => {
|
|
313
|
+
console.warn(reason);
|
|
314
|
+
}, 500);
|
|
317
315
|
}
|
|
318
316
|
}
|
|
319
317
|
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
import { buildAsyncRequire } from './buildAsyncRequire';
|
|
8
8
|
|
|
9
9
|
// @ts-ignore: ignore the global which may not always be defined in jest environments.
|
|
10
|
-
|
|
10
|
+
globalThis[`${globalThis.__METRO_GLOBAL_PREFIX__ ?? ''}__loadBundleAsync`] = buildAsyncRequire();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// This needs to run before the renderer initializes.
|
|
2
2
|
|
|
3
3
|
const ReactRefreshRuntime = require('react-refresh/runtime');
|
|
4
|
-
ReactRefreshRuntime.injectIntoGlobalHook(
|
|
4
|
+
ReactRefreshRuntime.injectIntoGlobalHook(globalThis);
|
|
5
5
|
|
|
6
6
|
const Refresh = {
|
|
7
7
|
performFullRefresh() {
|
|
@@ -27,4 +27,5 @@ const Refresh = {
|
|
|
27
27
|
|
|
28
28
|
// The metro require polyfill can not have dependencies (applies for all polyfills).
|
|
29
29
|
// Expose `Refresh` by assigning it to global to make it available in the polyfill.
|
|
30
|
-
global
|
|
30
|
+
// @ts-ignore: ignore the global which may not always be defined in jest environments.
|
|
31
|
+
globalThis[(globalThis.__METRO_GLOBAL_PREFIX__ ?? '') + '__ReactRefresh'] = Refresh;
|
package/src/hooks/useEvent.ts
CHANGED
|
@@ -32,7 +32,7 @@ type InferEventParameter<
|
|
|
32
32
|
/**
|
|
33
33
|
* React hook that listens to events emitted by the given object. The returned value is an event parameter
|
|
34
34
|
* that gets updated whenever a new event is dispatched.
|
|
35
|
-
* @param eventEmitter An object that emits events. For example, a native module or shared object or an instance of [`EventEmitter`](#
|
|
35
|
+
* @param eventEmitter An object that emits events. For example, a native module or shared object or an instance of [`EventEmitter`](#eventemittertype).
|
|
36
36
|
* @param eventName Name of the event to listen to.
|
|
37
37
|
* @param initialValue An event parameter to use until the event is called for the first time.
|
|
38
38
|
* @returns A parameter of the event listener.
|
|
@@ -71,7 +71,7 @@ export function useEvent<
|
|
|
71
71
|
/**
|
|
72
72
|
* React hook that listens to events emitted by the given object and calls the listener function whenever a new event is dispatched.
|
|
73
73
|
* The event listener is automatically added during the first render and removed when the component unmounts.
|
|
74
|
-
* @param eventEmitter An object that emits events. For example, a native module or shared object or an instance of [`EventEmitter`](#
|
|
74
|
+
* @param eventEmitter An object that emits events. For example, a native module or shared object or an instance of [`EventEmitter`](#eventemittertype).
|
|
75
75
|
* @param eventName Name of the event to listen to.
|
|
76
76
|
* @param listener A function to call when the event is dispatched.
|
|
77
77
|
* @example
|
package/template.tgz
CHANGED
|
Binary file
|