expo 55.0.0-canary-20260105-6b962e6 → 55.0.0-canary-20260114-d8e19f5

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 = '55.0.0-canary-20260105-6b962e6'
35
+ version = '55.0.0-canary-20260114-d8e19f5'
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-20260105-6b962e6"
46
+ versionName "55.0.0-canary-20260114-d8e19f5"
47
47
  consumerProguardFiles("proguard-rules.pro")
48
48
  }
49
49
  testOptions {
@@ -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;yBA0HK,OAAO;CA4B7B,CAAC;AAyDF,eAAe,SAAS,CAAC"}
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`](#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`](#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-20260105-6b962e6",
3
- "@expo/metro-runtime": "6.2.0-canary-20260105-6b962e6",
2
+ "@expo/fingerprint": "0.15.5-canary-20260114-d8e19f5",
3
+ "@expo/metro-runtime": "6.2.0-canary-20260114-d8e19f5",
4
4
  "@expo/vector-icons": "^15.0.2",
5
- "@expo/ui": "0.2.0-canary-20260105-6b962e6",
5
+ "@expo/ui": "0.2.0-canary-20260114-d8e19f5",
6
6
  "@react-native-async-storage/async-storage": "2.2.0",
7
- "@react-native-community/datetimepicker": "8.4.4",
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.0.1",
10
+ "@react-native-community/slider": "5.1.1",
11
11
  "@react-native-community/viewpager": "5.0.11",
12
- "@react-native-picker/picker": "2.11.2",
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.50.3",
15
- "eslint-config-expo": "10.0.1-canary-20260105-6b962e6",
14
+ "@stripe/stripe-react-native": "0.57.2",
15
+ "eslint-config-expo": "10.0.1-canary-20260114-d8e19f5",
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-20260105-6b962e6",
20
- "expo-application": "7.0.9-canary-20260105-6b962e6",
21
- "expo-asset": "12.0.13-canary-20260105-6b962e6",
22
- "expo-audio": "1.2.0-canary-20260105-6b962e6",
23
- "expo-auth-session": "7.0.11-canary-20260105-6b962e6",
24
- "expo-background-fetch": "14.0.10-canary-20260105-6b962e6",
25
- "expo-background-task": "1.0.11-canary-20260105-6b962e6",
26
- "expo-battery": "10.0.9-canary-20260105-6b962e6",
27
- "expo-blur": "16.0.0-canary-20260105-6b962e6",
28
- "expo-brightness": "15.0.0-canary-20260105-6b962e6",
29
- "expo-build-properties": "2.0.0-canary-20260105-6b962e6",
30
- "expo-calendar": "15.1.0-canary-20260105-6b962e6",
31
- "expo-camera": "17.1.0-canary-20260105-6b962e6",
32
- "expo-cellular": "8.0.9-canary-20260105-6b962e6",
33
- "expo-checkbox": "5.0.9-canary-20260105-6b962e6",
34
- "expo-clipboard": "9.0.0-canary-20260105-6b962e6",
35
- "expo-constants": "18.1.0-canary-20260105-6b962e6",
36
- "expo-contacts": "15.1.0-canary-20260105-6b962e6",
37
- "expo-crypto": "15.0.9-canary-20260105-6b962e6",
38
- "expo-dev-client": "6.1.0-canary-20260105-6b962e6",
39
- "expo-device": "8.0.11-canary-20260105-6b962e6",
40
- "expo-document-picker": "14.0.9-canary-20260105-6b962e6",
41
- "expo-file-system": "19.0.22-canary-20260105-6b962e6",
42
- "expo-font": "14.1.0-canary-20260105-6b962e6",
43
- "expo-gl": "16.0.10-canary-20260105-6b962e6",
44
- "expo-glass-effect": "0.2.0-canary-20260105-6b962e6",
19
+ "expo-apple-authentication": "8.0.9-canary-20260114-d8e19f5",
20
+ "expo-application": "7.0.9-canary-20260114-d8e19f5",
21
+ "expo-asset": "12.0.13-canary-20260114-d8e19f5",
22
+ "expo-audio": "1.2.0-canary-20260114-d8e19f5",
23
+ "expo-auth-session": "7.1.0-canary-20260114-d8e19f5",
24
+ "expo-background-fetch": "14.0.10-canary-20260114-d8e19f5",
25
+ "expo-background-task": "1.0.11-canary-20260114-d8e19f5",
26
+ "expo-battery": "10.0.9-canary-20260114-d8e19f5",
27
+ "expo-blur": "16.0.0-canary-20260114-d8e19f5",
28
+ "expo-brightness": "15.0.0-canary-20260114-d8e19f5",
29
+ "expo-build-properties": "2.0.0-canary-20260114-d8e19f5",
30
+ "expo-calendar": "15.1.0-canary-20260114-d8e19f5",
31
+ "expo-camera": "17.1.0-canary-20260114-d8e19f5",
32
+ "expo-cellular": "8.0.9-canary-20260114-d8e19f5",
33
+ "expo-checkbox": "5.0.9-canary-20260114-d8e19f5",
34
+ "expo-clipboard": "9.0.0-canary-20260114-d8e19f5",
35
+ "expo-constants": "18.1.0-canary-20260114-d8e19f5",
36
+ "expo-contacts": "15.1.0-canary-20260114-d8e19f5",
37
+ "expo-crypto": "15.1.0-canary-20260114-d8e19f5",
38
+ "expo-dev-client": "6.1.0-canary-20260114-d8e19f5",
39
+ "expo-device": "8.0.11-canary-20260114-d8e19f5",
40
+ "expo-document-picker": "14.0.9-canary-20260114-d8e19f5",
41
+ "expo-file-system": "19.0.22-canary-20260114-d8e19f5",
42
+ "expo-font": "14.1.0-canary-20260114-d8e19f5",
43
+ "expo-gl": "16.0.10-canary-20260114-d8e19f5",
44
+ "expo-glass-effect": "0.2.0-canary-20260114-d8e19f5",
45
45
  "expo-google-app-auth": "~8.3.0",
46
- "expo-haptics": "15.0.9-canary-20260105-6b962e6",
47
- "expo-image": "3.1.0-canary-20260105-6b962e6",
48
- "expo-image-loader": "7.0.0-canary-20260105-6b962e6",
49
- "expo-image-manipulator": "14.0.9-canary-20260105-6b962e6",
50
- "expo-image-picker": "17.1.0-canary-20260105-6b962e6",
51
- "expo-intent-launcher": "13.0.9-canary-20260105-6b962e6",
52
- "expo-insights": "0.10.9-canary-20260105-6b962e6",
53
- "expo-keep-awake": "15.0.9-canary-20260105-6b962e6",
54
- "expo-linear-gradient": "15.0.9-canary-20260105-6b962e6",
55
- "expo-linking": "8.0.12-canary-20260105-6b962e6",
56
- "expo-local-authentication": "17.0.9-canary-20260105-6b962e6",
57
- "expo-localization": "18.0.0-canary-20260105-6b962e6",
58
- "expo-location": "19.0.9-canary-20260105-6b962e6",
59
- "expo-mail-composer": "15.0.9-canary-20260105-6b962e6",
60
- "expo-manifests": "1.0.11-canary-20260105-6b962e6",
61
- "expo-maps": "0.13.0-canary-20260105-6b962e6",
46
+ "expo-haptics": "15.0.9-canary-20260114-d8e19f5",
47
+ "expo-image": "3.1.0-canary-20260114-d8e19f5",
48
+ "expo-image-loader": "7.0.0-canary-20260114-d8e19f5",
49
+ "expo-image-manipulator": "14.0.9-canary-20260114-d8e19f5",
50
+ "expo-image-picker": "17.1.0-canary-20260114-d8e19f5",
51
+ "expo-intent-launcher": "13.0.9-canary-20260114-d8e19f5",
52
+ "expo-insights": "0.10.9-canary-20260114-d8e19f5",
53
+ "expo-keep-awake": "15.0.9-canary-20260114-d8e19f5",
54
+ "expo-linear-gradient": "15.0.9-canary-20260114-d8e19f5",
55
+ "expo-linking": "8.0.12-canary-20260114-d8e19f5",
56
+ "expo-local-authentication": "17.0.9-canary-20260114-d8e19f5",
57
+ "expo-localization": "18.0.0-canary-20260114-d8e19f5",
58
+ "expo-location": "19.1.0-canary-20260114-d8e19f5",
59
+ "expo-mail-composer": "15.0.9-canary-20260114-d8e19f5",
60
+ "expo-manifests": "1.0.11-canary-20260114-d8e19f5",
61
+ "expo-maps": "0.13.0-canary-20260114-d8e19f5",
62
62
  "expo-mcp": "~0.2.1",
63
- "expo-media-library": "18.3.0-canary-20260105-6b962e6",
64
- "expo-mesh-gradient": "0.4.9-canary-20260105-6b962e6",
65
- "expo-module-template": "11.0.19-canary-20260105-6b962e6",
66
- "expo-modules-core": "4.0.0-canary-20260105-6b962e6",
67
- "expo-navigation-bar": "5.0.11-canary-20260105-6b962e6",
68
- "expo-network": "8.0.9-canary-20260105-6b962e6",
69
- "expo-notifications": "1.0.0-canary-20260105-6b962e6",
70
- "expo-print": "15.0.9-canary-20260105-6b962e6",
71
- "expo-live-photo": "1.0.9-canary-20260105-6b962e6",
72
- "expo-router": "7.0.0-canary-20260105-6b962e6",
73
- "expo-screen-capture": "8.0.10-canary-20260105-6b962e6",
74
- "expo-screen-orientation": "9.0.9-canary-20260105-6b962e6",
75
- "expo-secure-store": "15.0.9-canary-20260105-6b962e6",
76
- "expo-sensors": "15.0.9-canary-20260105-6b962e6",
77
- "expo-server": "1.0.6-canary-20260105-6b962e6",
78
- "expo-sharing": "14.0.9-canary-20260105-6b962e6",
79
- "expo-sms": "14.0.9-canary-20260105-6b962e6",
80
- "expo-speech": "14.1.0-canary-20260105-6b962e6",
81
- "expo-splash-screen": "31.0.14-canary-20260105-6b962e6",
82
- "expo-sqlite": "16.1.0-canary-20260105-6b962e6",
83
- "expo-status-bar": "3.0.10-canary-20260105-6b962e6",
84
- "expo-store-review": "9.0.10-canary-20260105-6b962e6",
85
- "expo-symbols": "1.1.0-canary-20260105-6b962e6",
86
- "expo-system-ui": "6.0.10-canary-20260105-6b962e6",
87
- "expo-task-manager": "14.0.10-canary-20260105-6b962e6",
88
- "expo-tracking-transparency": "6.0.9-canary-20260105-6b962e6",
89
- "expo-updates": "29.1.0-canary-20260105-6b962e6",
90
- "expo-video-thumbnails": "10.0.9-canary-20260105-6b962e6",
91
- "expo-video": "3.1.0-canary-20260105-6b962e6",
92
- "expo-web-browser": "15.0.11-canary-20260105-6b962e6",
93
- "jest-expo": "55.0.0-canary-20260105-6b962e6",
63
+ "expo-media-library": "18.3.0-canary-20260114-d8e19f5",
64
+ "expo-mesh-gradient": "0.4.9-canary-20260114-d8e19f5",
65
+ "expo-module-template": "11.0.19-canary-20260114-d8e19f5",
66
+ "expo-modules-core": "4.0.0-canary-20260114-d8e19f5",
67
+ "expo-navigation-bar": "5.0.11-canary-20260114-d8e19f5",
68
+ "expo-network": "8.0.9-canary-20260114-d8e19f5",
69
+ "expo-notifications": "1.0.0-canary-20260114-d8e19f5",
70
+ "expo-print": "15.0.9-canary-20260114-d8e19f5",
71
+ "expo-live-photo": "1.0.9-canary-20260114-d8e19f5",
72
+ "expo-router": "7.0.0-canary-20260114-d8e19f5",
73
+ "expo-screen-capture": "8.0.10-canary-20260114-d8e19f5",
74
+ "expo-screen-orientation": "9.0.9-canary-20260114-d8e19f5",
75
+ "expo-secure-store": "15.0.9-canary-20260114-d8e19f5",
76
+ "expo-sensors": "15.0.9-canary-20260114-d8e19f5",
77
+ "expo-server": "1.1.0-canary-20260114-d8e19f5",
78
+ "expo-sharing": "14.0.9-canary-20260114-d8e19f5",
79
+ "expo-sms": "14.0.9-canary-20260114-d8e19f5",
80
+ "expo-speech": "14.1.0-canary-20260114-d8e19f5",
81
+ "expo-splash-screen": "31.0.14-canary-20260114-d8e19f5",
82
+ "expo-sqlite": "16.1.0-canary-20260114-d8e19f5",
83
+ "expo-status-bar": "3.0.10-canary-20260114-d8e19f5",
84
+ "expo-store-review": "9.0.10-canary-20260114-d8e19f5",
85
+ "expo-symbols": "1.1.0-canary-20260114-d8e19f5",
86
+ "expo-system-ui": "6.0.10-canary-20260114-d8e19f5",
87
+ "expo-task-manager": "14.0.10-canary-20260114-d8e19f5",
88
+ "expo-tracking-transparency": "6.0.9-canary-20260114-d8e19f5",
89
+ "expo-updates": "29.1.0-canary-20260114-d8e19f5",
90
+ "expo-video-thumbnails": "10.0.9-canary-20260114-d8e19f5",
91
+ "expo-video": "4.0.0-canary-20260114-d8e19f5",
92
+ "expo-web-browser": "15.0.11-canary-20260114-d8e19f5",
93
+ "jest-expo": "55.0.0-canary-20260114-d8e19f5",
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.28.0",
99
+ "react-native-gesture-handler": "~2.30.0",
100
100
  "react-native-get-random-values": "~1.11.0",
101
- "react-native-keyboard-controller": "1.18.5",
102
- "react-native-maps": "1.20.1",
103
- "react-native-pager-view": "6.9.1",
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.0",
105
+ "react-native-reanimated": "~4.2.1",
106
106
  "react-native-screens": "~4.19.0",
107
- "react-native-safe-area-context": "~5.6.0",
108
- "react-native-svg": "15.12.1",
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.15.0",
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-20260105-6b962e6",
113
+ "unimodules-app-loader": "6.0.9-canary-20260114-d8e19f5",
114
114
  "unimodules-image-loader-interface": "~6.1.0",
115
- "@shopify/react-native-skia": "2.2.12",
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
- #import <ExpoModulesCore-Swift.h>
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-20260105-6b962e6",
3
+ "version": "55.0.0-canary-20260114-d8e19f5",
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-20260105-6b962e6",
81
- "@expo/config": "12.0.14-canary-20260105-6b962e6",
82
- "@expo/config-plugins": "54.0.5-canary-20260105-6b962e6",
83
- "@expo/devtools": "0.1.9-canary-20260105-6b962e6",
84
- "@expo/fingerprint": "0.15.5-canary-20260105-6b962e6",
85
- "@expo/local-build-cache-provider": "0.0.1-canary-20260105-6b962e6",
80
+ "@expo/cli": "55.0.0-canary-20260114-d8e19f5",
81
+ "@expo/config": "12.0.14-canary-20260114-d8e19f5",
82
+ "@expo/config-plugins": "54.1.0-canary-20260114-d8e19f5",
83
+ "@expo/devtools": "0.1.9-canary-20260114-d8e19f5",
84
+ "@expo/fingerprint": "0.15.5-canary-20260114-d8e19f5",
85
+ "@expo/local-build-cache-provider": "0.0.1-canary-20260114-d8e19f5",
86
86
  "@expo/metro": "~54.2.0",
87
- "@expo/metro-config": "54.1.0-canary-20260105-6b962e6",
87
+ "@expo/metro-config": "54.1.0-canary-20260114-d8e19f5",
88
88
  "@expo/vector-icons": "^15.0.2",
89
- "@expo/log-box": "0.0.13-canary-20260105-6b962e6",
89
+ "@expo/log-box": "0.0.13-canary-20260114-d8e19f5",
90
90
  "@ungap/structured-clone": "^1.3.0",
91
- "babel-preset-expo": "54.1.0-canary-20260105-6b962e6",
92
- "expo-asset": "12.0.13-canary-20260105-6b962e6",
93
- "expo-constants": "18.1.0-canary-20260105-6b962e6",
94
- "expo-file-system": "19.0.22-canary-20260105-6b962e6",
95
- "expo-font": "14.1.0-canary-20260105-6b962e6",
96
- "expo-keep-awake": "15.0.9-canary-20260105-6b962e6",
97
- "expo-modules-autolinking": "3.1.0-canary-20260105-6b962e6",
98
- "expo-modules-core": "4.0.0-canary-20260105-6b962e6",
91
+ "babel-preset-expo": "54.1.0-canary-20260114-d8e19f5",
92
+ "expo-asset": "12.0.13-canary-20260114-d8e19f5",
93
+ "expo-constants": "18.1.0-canary-20260114-d8e19f5",
94
+ "expo-file-system": "19.0.22-canary-20260114-d8e19f5",
95
+ "expo-font": "14.1.0-canary-20260114-d8e19f5",
96
+ "expo-keep-awake": "15.0.9-canary-20260114-d8e19f5",
97
+ "expo-modules-autolinking": "3.1.0-canary-20260114-d8e19f5",
98
+ "expo-modules-core": "4.0.0-canary-20260114-d8e19f5",
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-20260105-6b962e6",
105
- "@expo/metro-runtime": "6.2.0-canary-20260105-6b962e6",
104
+ "@expo/dom-webview": "0.2.9-canary-20260114-d8e19f5",
105
+ "@expo/metro-runtime": "6.2.0-canary-20260114-d8e19f5",
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-20260105-6b962e6",
109
+ "expo-module-scripts": "5.1.0-canary-20260114-d8e19f5",
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-20260105-6b962e6",
117
- "@expo/metro-runtime": "6.2.0-canary-20260105-6b962e6",
116
+ "@expo/dom-webview": "0.2.9-canary-20260114-d8e19f5",
117
+ "@expo/metro-runtime": "6.2.0-canary-20260114-d8e19f5",
118
118
  "react": "*",
119
119
  "react-native": "*",
120
120
  "react-native-webview": "*"
@@ -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 global)
12
+ !('__fbBatchedBridgeConfig' in globalThis)
13
13
  ) {
14
- Object.defineProperty(global, '__fbBatchedBridgeConfig', {
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
- /Your web project is importing a module from 'react-native' instead of 'react-native-web'/
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> = (global as any)[
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) {
@@ -233,29 +233,22 @@ const HMRClient = {
233
233
 
234
234
  client.on('error', (data) => this._onMetroError(data));
235
235
 
236
- client.on('close', (closeEvent: { code: number; reason: string }) => {
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 isNormalOrUnsetCloseReason =
242
- closeEvent == null ||
243
- closeEvent.code === 1000 ||
244
- closeEvent.code === 1005 ||
245
- closeEvent.code === 1006 ||
246
- closeEvent.code == null;
247
-
248
- setHMRUnavailableReason(
249
- `${
250
- isNormalOrUnsetCloseReason
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
- console.warn(reason);
316
- // (Not using the `warning` module to prevent a Buck cycle.)
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
- global[`${global.__METRO_GLOBAL_PREFIX__ ?? ''}__loadBundleAsync`] = buildAsyncRequire();
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(global);
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[(global.__METRO_GLOBAL_PREFIX__ || '') + '__ReactRefresh'] = Refresh;
30
+ // @ts-ignore: ignore the global which may not always be defined in jest environments.
31
+ globalThis[(globalThis.__METRO_GLOBAL_PREFIX__ ?? '') + '__ReactRefresh'] = Refresh;
@@ -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`](#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`](#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