expo 55.0.0-canary-20251015-a6a1272 → 55.0.0-canary-20251023-4c86f95

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.
Files changed (47) hide show
  1. package/Expo.podspec +1 -0
  2. package/android/build.gradle +15 -2
  3. package/android/src/main/java/expo/modules/ExpoReactHostFactory.kt +0 -1
  4. package/build/async-require/buildErrors.d.ts +5 -0
  5. package/build/async-require/buildErrors.d.ts.map +1 -0
  6. package/build/async-require/buildUrlForBundle.d.ts.map +1 -1
  7. package/build/async-require/getDevServer.d.ts.map +1 -1
  8. package/build/async-require/getFullBundlerUrl.d.ts +2 -0
  9. package/build/async-require/getFullBundlerUrl.d.ts.map +1 -0
  10. package/build/async-require/hmr.d.ts +8 -8
  11. package/build/async-require/hmr.d.ts.map +1 -1
  12. package/build/async-require/hmrUtils.d.ts +13 -0
  13. package/build/async-require/hmrUtils.d.ts.map +1 -0
  14. package/build/async-require/hmrUtils.native.d.ts +13 -0
  15. package/build/async-require/hmrUtils.native.d.ts.map +1 -0
  16. package/build/dom/dom-entry.d.ts.map +1 -1
  17. package/build/dom/dom-internal.types.d.ts +11 -0
  18. package/build/dom/dom-internal.types.d.ts.map +1 -0
  19. package/build/dom/dom.types.d.ts +5 -0
  20. package/build/dom/dom.types.d.ts.map +1 -1
  21. package/build/dom/internal.d.ts +1 -0
  22. package/build/dom/internal.d.ts.map +1 -1
  23. package/build/dom/webview-wrapper.d.ts +2 -2
  24. package/build/dom/webview-wrapper.d.ts.map +1 -1
  25. package/bundledNativeModules.json +80 -80
  26. package/ios/AppDelegates/AppDelegatesLoaderDelegate.swift +2 -0
  27. package/ios/AppDelegates/ExpoReactNativeFactory.swift +2 -0
  28. package/ios/Fetch/ExpoFetchModule.swift +2 -2
  29. package/package.json +21 -20
  30. package/src/async-require/__tests__/buildUrlForBundle.test.web.ts +2 -2
  31. package/src/async-require/__tests__/loadBundle.test.web.ts +9 -5
  32. package/src/async-require/buildErrors.ts +14 -0
  33. package/src/async-require/buildUrlForBundle.ts +5 -13
  34. package/src/async-require/getDevServer.ts +3 -9
  35. package/src/async-require/getFullBundlerUrl.ts +13 -0
  36. package/src/async-require/hmr.ts +106 -104
  37. package/src/async-require/hmrUtils.native.ts +97 -0
  38. package/src/async-require/hmrUtils.ts +54 -0
  39. package/src/dom/dom-entry.tsx +13 -6
  40. package/src/dom/dom-internal.types.ts +9 -0
  41. package/src/dom/dom.types.ts +6 -0
  42. package/src/dom/internal.ts +2 -0
  43. package/src/dom/webview-wrapper.tsx +13 -5
  44. package/template.tgz +0 -0
  45. package/build/async-require/hmr.native.d.ts +0 -3
  46. package/build/async-require/hmr.native.d.ts.map +0 -1
  47. package/src/async-require/hmr.native.ts +0 -3
package/Expo.podspec CHANGED
@@ -40,6 +40,7 @@ Pod::Spec.new do |s|
40
40
  :osx => '11.0',
41
41
  :tvos => '15.1'
42
42
  }
43
+ s.swift_version = '6.0'
43
44
  s.source = { git: 'https://github.com/expo/expo.git' }
44
45
  s.static_framework = true
45
46
  s.header_dir = 'Expo'
@@ -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-20251015-a6a1272'
35
+ version = '55.0.0-canary-20251023-4c86f95'
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-20251015-a6a1272"
46
+ versionName "55.0.0-canary-20251023-4c86f95"
47
47
  consumerProguardFiles("proguard-rules.pro")
48
48
  }
49
49
  testOptions {
@@ -59,6 +59,19 @@ android {
59
59
  }
60
60
  }
61
61
  }
62
+
63
+ buildTypes {
64
+ create("debugOptimized") {
65
+ initWith(buildTypes.release)
66
+ matchingFallbacks += ["release"]
67
+ }
68
+ }
69
+
70
+ sourceSets {
71
+ debugOptimized {
72
+ setRoot 'src/release'
73
+ }
74
+ }
62
75
  }
63
76
 
64
77
  dependencies { dependencyHandler ->
@@ -133,7 +133,6 @@ object ExpoReactHostFactory {
133
133
  true,
134
134
  useDevSupport
135
135
  )
136
-
137
136
  hostHandlers.forEach { handler ->
138
137
  handler.onDidCreateDevSupportManager(reactHostImpl.devSupportManager)
139
138
  }
@@ -0,0 +1,5 @@
1
+ export declare class HMRMetroBuildError extends Error {
2
+ originalMessage: string;
3
+ constructor(message?: string, type?: string, cause?: Error);
4
+ }
5
+ //# sourceMappingURL=buildErrors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildErrors.d.ts","sourceRoot":"","sources":["../../src/async-require/buildErrors.ts"],"names":[],"mappings":"AAEA,qBAAa,kBAAmB,SAAQ,KAAK;IACpC,eAAe,EAAE,MAAM,CAAC;gBAEnB,OAAO,GAAE,MAA8B,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAQlF"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildUrlForBundle.d.ts","sourceRoot":"","sources":["../../src/async-require/buildUrlForBundle.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAgB5D"}
1
+ {"version":3,"file":"buildUrlForBundle.d.ts","sourceRoot":"","sources":["../../src/async-require/buildUrlForBundle.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAM5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"getDevServer.d.ts","sourceRoot":"","sources":["../../src/async-require/getDevServer.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,YAAY;;IAcd,0DAA0D;;;CAc7D,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"getDevServer.d.ts","sourceRoot":"","sources":["../../src/async-require/getDevServer.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,YAAY;;IAcd,0DAA0D;;;CAM7D,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function getFullBundlerUrl(): string;
2
+ //# sourceMappingURL=getFullBundlerUrl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFullBundlerUrl.d.ts","sourceRoot":"","sources":["../../src/async-require/getFullBundlerUrl.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,IAAI,MAAM,CAY1C"}
@@ -1,17 +1,17 @@
1
1
  type LogLevel = 'trace' | 'info' | 'warn' | 'error' | 'log' | 'group' | 'groupCollapsed' | 'groupEnd' | 'debug';
2
- export type HMRClientNativeInterface = {
2
+ /**
3
+ * HMR Client that receives from the server HMR updates and propagates them
4
+ * runtime to reflects those changes.
5
+ */
6
+ declare const HMRClient: {
3
7
  enable(): void;
4
8
  disable(): void;
5
9
  registerBundle(requestUrl: string): void;
6
10
  log(level: LogLevel, data: any[]): void;
7
- setup(props: {
11
+ setup(platformOrOptions: string | {
8
12
  isEnabled: boolean;
9
- }): void;
13
+ }, bundleEntry?: string, host?: string, port?: number | string, isEnabledOrUndefined?: boolean, scheme?: string): void;
14
+ _onMetroError(error: unknown): void;
10
15
  };
11
- /**
12
- * HMR Client that receives from the server HMR updates and propagates them
13
- * runtime to reflects those changes.
14
- */
15
- declare const HMRClient: HMRClientNativeInterface;
16
16
  export default HMRClient;
17
17
  //# sourceMappingURL=hmr.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hmr.d.ts","sourceRoot":"","sources":["../../src/async-require/hmr.ts"],"names":[],"mappings":"AA4CA,KAAK,QAAQ,GACT,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,GACP,KAAK,GACL,OAAO,GACP,gBAAgB,GAChB,UAAU,GACV,OAAO,CAAC;AAEZ,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,IAAI,IAAI,CAAC;IACf,OAAO,IAAI,IAAI,CAAC;IAChB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACxC,KAAK,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CAC5C,CAAC;AAMF;;;GAGG;AACH,QAAA,MAAM,SAAS,EAAE,wBAsMhB,CAAC;AAuEF,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;yBA2GK,OAAO;CA4B7B,CAAC;AAyDF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare function getFullBundlerUrl(_: {
2
+ serverScheme?: string;
3
+ serverHost?: string;
4
+ bundleEntry?: string;
5
+ platform?: string;
6
+ }): string;
7
+ export declare function showLoading(message: string, _type: 'load' | 'refresh'): void;
8
+ export declare function hideLoading(): void;
9
+ export declare function resetErrorOverlay(): void;
10
+ export declare function reload(): void;
11
+ export declare function getConnectionError(serverHost: string, e: Error): string;
12
+ export declare function handleCompileError(cause: any): void;
13
+ //# sourceMappingURL=hmrUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmrUtils.d.ts","sourceRoot":"","sources":["../../src/async-require/hmrUtils.ts"],"names":[],"mappings":"AAKA,wBAAgB,iBAAiB,CAAC,CAAC,EAAE;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,CAET;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,QAKrE;AAED,wBAAgB,WAAW,SAE1B;AAED,wBAAgB,iBAAiB,SAGhC;AAED,wBAAgB,MAAM,SAGrB;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,CAWvE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,QAK5C"}
@@ -0,0 +1,13 @@
1
+ export declare function showLoading(message: string, type: 'load' | 'refresh'): void;
2
+ export declare function hideLoading(): void;
3
+ export declare function resetErrorOverlay(): void;
4
+ export declare function reload(): void;
5
+ export declare function getFullBundlerUrl({ serverScheme, serverHost, bundleEntry, platform, }: {
6
+ serverScheme: string;
7
+ serverHost: string;
8
+ bundleEntry: string;
9
+ platform: string;
10
+ }): string;
11
+ export declare function getConnectionError(serverHost: string, e: Error): string;
12
+ export declare function handleCompileError(cause: any): void;
13
+ //# sourceMappingURL=hmrUtils.native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmrUtils.native.d.ts","sourceRoot":"","sources":["../../src/async-require/hmrUtils.native.ts"],"names":[],"mappings":"AAWA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,QAGpE;AAED,wBAAgB,WAAW,SAG1B;AAED,wBAAgB,iBAAiB,SAIhC;AAED,wBAAgB,MAAM,SAGrB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,YAAY,EACZ,UAAU,EACV,WAAW,EACX,QAAQ,GACT,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAKT;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,CAkBvE;AAcD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,QAe5C"}
@@ -1 +1 @@
1
- {"version":3,"file":"dom-entry.d.ts","sourceRoot":"","sources":["../../src/dom/dom-entry.tsx"],"names":[],"mappings":"AACA,OAAO,qBAAqB,CAAC;AAiE7B,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,GAAG,QA6DlD"}
1
+ {"version":3,"file":"dom-entry.d.ts","sourceRoot":"","sources":["../../src/dom/dom-entry.tsx"],"names":[],"mappings":"AACA,OAAO,qBAAqB,CAAC;AAiE7B,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,GAAG,QAoElD"}
@@ -0,0 +1,11 @@
1
+ import type { DOMProps } from './dom.types';
2
+ export interface DOMPropsInternal extends DOMProps {
3
+ /**
4
+ * Allows dynamically redirecting a component to a different source, for example prebuilt version.
5
+ * @internal
6
+ */
7
+ sourceOverride?: {
8
+ uri: string;
9
+ };
10
+ }
11
+ //# sourceMappingURL=dom-internal.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom-internal.types.d.ts","sourceRoot":"","sources":["../../src/dom/dom-internal.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD;;;OAGG;IACH,cAAc,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAClC"}
@@ -29,6 +29,11 @@ export interface DOMProps extends Omit<RNWebViewProps, 'source'> {
29
29
  * @default false
30
30
  */
31
31
  useExpoDOMWebView?: boolean;
32
+ /**
33
+ * Allows dynamically redirecting a component to a different source, for example a prebuilt version.
34
+ * @internal
35
+ */
36
+ overrideUri?: string;
32
37
  }
33
38
  export {};
34
39
  //# sourceMappingURL=dom.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom.types.d.ts","sourceRoot":"","sources":["../../src/dom/dom.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,CAAC;AAElF,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;CAAG;AAEtD,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,MAAM,aAAa,CAAC,KAAK,SAAS,SAAS,IAAI;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;CACb,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;CAC/C;AAED,KAAK,YAAY,GAAG,SAAS,CAAC;AAC9B,MAAM,MAAM,UAAU,GAAG,YAAY,CAAC;AACtC,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC;AAE1C,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;IAC9D;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B"}
1
+ {"version":3,"file":"dom.types.d.ts","sourceRoot":"","sources":["../../src/dom/dom.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,CAAC;AAElF,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;CAAG;AAEtD,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,MAAM,aAAa,CAAC,KAAK,SAAS,SAAS,IAAI;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;CACb,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;CAC/C;AAED,KAAK,YAAY,GAAG,SAAS,CAAC;AAC9B,MAAM,MAAM,UAAU,GAAG,YAAY,CAAC;AACtC,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC;AAE1C,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;IAC9D;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -1,3 +1,4 @@
1
1
  export { default as WebView } from './webview-wrapper';
2
+ export * from './dom-internal.types';
2
3
  export declare const registerDOMComponent: undefined | typeof import('./dom-entry').registerDOMComponent;
3
4
  //# sourceMappingURL=internal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/dom/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGvD,eAAO,MAAM,oBAAoB,EAAE,SAAS,GAAG,cAAc,aAAa,EAAE,oBACjE,CAAC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/dom/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEvD,cAAc,sBAAsB,CAAC;AAGrC,eAAO,MAAM,oBAAoB,EAAE,SAAS,GAAG,cAAc,aAAa,EAAE,oBACjE,CAAC"}
@@ -1,11 +1,11 @@
1
1
  import React from 'react';
2
- import type { DOMProps } from './dom.types';
2
+ import { DOMPropsInternal } from './dom-internal.types';
3
3
  import ExpoDomWebView from './webview/ExpoDOMWebView';
4
4
  import RNWebView from './webview/RNWebView';
5
5
  type RawWebViewProps = React.ComponentProps<Exclude<typeof ExpoDomWebView, undefined>> & React.ComponentProps<Exclude<typeof RNWebView, undefined>>;
6
6
  interface Props {
7
7
  children?: any;
8
- dom?: DOMProps;
8
+ dom?: DOMPropsInternal;
9
9
  filePath: string;
10
10
  ref: React.Ref<object>;
11
11
  [propName: string]: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"webview-wrapper.d.ts","sourceRoot":"","sources":["../../src/dom/webview-wrapper.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAiB,QAAQ,EAA4B,MAAM,aAAa,CAAC;AAUrF,OAAO,cAAc,MAAM,0BAA0B,CAAC;AACtD,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAG5C,KAAK,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,cAAc,EAAE,SAAS,CAAC,CAAC,GACpF,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAE7D,UAAU,KAAK;IACb,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7B;AAED,QAAA,MAAM,UAAU,mFAgMd,CAAC;AAiBH,wBAAgB,cAAc,CAC5B,iBAAiB,EAAE,OAAO,GACzB,KAAK,CAAC,yBAAyB,CAAC,eAAe,CAAC,CASlD;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"webview-wrapper.d.ts","sourceRoot":"","sources":["../../src/dom/webview-wrapper.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAWxD,OAAO,cAAc,MAAM,0BAA0B,CAAC;AACtD,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAG5C,KAAK,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,cAAc,EAAE,SAAS,CAAC,CAAC,GACpF,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAE7D,UAAU,KAAK;IACb,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7B;AAED,QAAA,MAAM,UAAU,mFAmMd,CAAC;AAiBH,wBAAgB,cAAc,CAC5B,iBAAiB,EAAE,OAAO,GACzB,KAAK,CAAC,yBAAyB,CAAC,eAAe,CAAC,CASlD;AAED,eAAe,UAAU,CAAC"}
@@ -1,8 +1,8 @@
1
1
  {
2
- "@expo/fingerprint": "0.15.2-canary-20251015-a6a1272",
3
- "@expo/metro-runtime": "6.1.3-canary-20251015-a6a1272",
2
+ "@expo/fingerprint": "0.15.3-canary-20251023-4c86f95",
3
+ "@expo/metro-runtime": "6.1.3-canary-20251023-4c86f95",
4
4
  "@expo/vector-icons": "^15.0.2",
5
- "@expo/ui": "0.2.0-canary-20251015-a6a1272",
5
+ "@expo/ui": "0.2.0-canary-20251023-4c86f95",
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",
@@ -12,95 +12,95 @@
12
12
  "@react-native-picker/picker": "2.11.2",
13
13
  "@react-native-segmented-control/segmented-control": "2.5.7",
14
14
  "@stripe/stripe-react-native": "0.50.3",
15
- "eslint-config-expo": "10.0.1-canary-20251015-a6a1272",
15
+ "eslint-config-expo": "10.0.1-canary-20251023-4c86f95",
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.8-canary-20251015-a6a1272",
20
- "expo-application": "7.0.8-canary-20251015-a6a1272",
21
- "expo-asset": "12.0.10-canary-20251015-a6a1272",
22
- "expo-audio": "1.1.0-canary-20251015-a6a1272",
23
- "expo-auth-session": "7.0.9-canary-20251015-a6a1272",
24
- "expo-av": "16.0.8-canary-20251015-a6a1272",
25
- "expo-background-fetch": "14.0.8-canary-20251015-a6a1272",
26
- "expo-background-task": "1.0.9-canary-20251015-a6a1272",
27
- "expo-battery": "10.0.8-canary-20251015-a6a1272",
28
- "expo-blur": "16.0.0-canary-20251015-a6a1272",
29
- "expo-brightness": "15.0.0-canary-20251015-a6a1272",
30
- "expo-build-properties": "1.0.10-canary-20251015-a6a1272",
31
- "expo-calendar": "15.0.8-canary-20251015-a6a1272",
32
- "expo-camera": "17.0.9-canary-20251015-a6a1272",
33
- "expo-cellular": "8.0.8-canary-20251015-a6a1272",
34
- "expo-checkbox": "5.0.8-canary-20251015-a6a1272",
35
- "expo-clipboard": "8.0.8-canary-20251015-a6a1272",
36
- "expo-constants": "18.0.10-canary-20251015-a6a1272",
37
- "expo-contacts": "15.0.10-canary-20251015-a6a1272",
38
- "expo-crypto": "15.0.8-canary-20251015-a6a1272",
39
- "expo-dev-client": "6.0.16-canary-20251015-a6a1272",
40
- "expo-device": "8.0.10-canary-20251015-a6a1272",
41
- "expo-document-picker": "14.0.8-canary-20251015-a6a1272",
42
- "expo-file-system": "19.0.18-canary-20251015-a6a1272",
43
- "expo-font": "14.0.10-canary-20251015-a6a1272",
44
- "expo-gl": "16.0.8-canary-20251015-a6a1272",
45
- "expo-glass-effect": "0.1.5-canary-20251015-a6a1272",
19
+ "expo-apple-authentication": "8.0.8-canary-20251023-4c86f95",
20
+ "expo-application": "7.0.8-canary-20251023-4c86f95",
21
+ "expo-asset": "12.0.10-canary-20251023-4c86f95",
22
+ "expo-audio": "1.1.0-canary-20251023-4c86f95",
23
+ "expo-auth-session": "7.0.9-canary-20251023-4c86f95",
24
+ "expo-av": "16.0.8-canary-20251023-4c86f95",
25
+ "expo-background-fetch": "14.0.8-canary-20251023-4c86f95",
26
+ "expo-background-task": "1.0.9-canary-20251023-4c86f95",
27
+ "expo-battery": "10.0.8-canary-20251023-4c86f95",
28
+ "expo-blur": "16.0.0-canary-20251023-4c86f95",
29
+ "expo-brightness": "15.0.0-canary-20251023-4c86f95",
30
+ "expo-build-properties": "1.0.10-canary-20251023-4c86f95",
31
+ "expo-calendar": "15.0.8-canary-20251023-4c86f95",
32
+ "expo-camera": "17.1.0-canary-20251023-4c86f95",
33
+ "expo-cellular": "8.0.8-canary-20251023-4c86f95",
34
+ "expo-checkbox": "5.0.8-canary-20251023-4c86f95",
35
+ "expo-clipboard": "8.0.8-canary-20251023-4c86f95",
36
+ "expo-constants": "18.0.11-canary-20251023-4c86f95",
37
+ "expo-contacts": "15.0.11-canary-20251023-4c86f95",
38
+ "expo-crypto": "15.0.8-canary-20251023-4c86f95",
39
+ "expo-dev-client": "6.0.17-canary-20251023-4c86f95",
40
+ "expo-device": "8.0.10-canary-20251023-4c86f95",
41
+ "expo-document-picker": "14.0.8-canary-20251023-4c86f95",
42
+ "expo-file-system": "19.1.0-canary-20251023-4c86f95",
43
+ "expo-font": "14.0.10-canary-20251023-4c86f95",
44
+ "expo-gl": "16.0.8-canary-20251023-4c86f95",
45
+ "expo-glass-effect": "0.1.5-canary-20251023-4c86f95",
46
46
  "expo-google-app-auth": "~8.3.0",
47
- "expo-haptics": "15.0.8-canary-20251015-a6a1272",
48
- "expo-image": "3.1.0-canary-20251015-a6a1272",
49
- "expo-image-loader": "6.0.1-canary-20251015-a6a1272",
50
- "expo-image-manipulator": "14.0.8-canary-20251015-a6a1272",
51
- "expo-image-picker": "17.0.9-canary-20251015-a6a1272",
52
- "expo-intent-launcher": "13.0.8-canary-20251015-a6a1272",
53
- "expo-insights": "0.10.8-canary-20251015-a6a1272",
54
- "expo-keep-awake": "15.0.8-canary-20251015-a6a1272",
55
- "expo-linear-gradient": "15.0.8-canary-20251015-a6a1272",
56
- "expo-linking": "8.0.9-canary-20251015-a6a1272",
57
- "expo-local-authentication": "17.0.8-canary-20251015-a6a1272",
58
- "expo-localization": "17.0.8-canary-20251015-a6a1272",
59
- "expo-location": "19.0.8-canary-20251015-a6a1272",
60
- "expo-mail-composer": "15.0.8-canary-20251015-a6a1272",
61
- "expo-manifests": "1.0.9-canary-20251015-a6a1272",
62
- "expo-maps": "0.12.9-canary-20251015-a6a1272",
63
- "expo-media-library": "18.3.0-canary-20251015-a6a1272",
64
- "expo-mesh-gradient": "0.4.8-canary-20251015-a6a1272",
65
- "expo-module-template": "11.0.16-canary-20251015-a6a1272",
66
- "expo-modules-core": "3.1.0-canary-20251015-a6a1272",
67
- "expo-navigation-bar": "5.0.9-canary-20251015-a6a1272",
68
- "expo-network": "8.0.8-canary-20251015-a6a1272",
69
- "expo-notifications": "1.0.0-canary-20251015-a6a1272",
70
- "expo-print": "15.0.8-canary-20251015-a6a1272",
71
- "expo-live-photo": "1.0.8-canary-20251015-a6a1272",
72
- "expo-router": "6.1.0-canary-20251015-a6a1272",
73
- "expo-screen-capture": "8.0.9-canary-20251015-a6a1272",
74
- "expo-screen-orientation": "9.0.8-canary-20251015-a6a1272",
75
- "expo-secure-store": "15.0.8-canary-20251015-a6a1272",
76
- "expo-sensors": "15.0.8-canary-20251015-a6a1272",
77
- "expo-sharing": "14.0.8-canary-20251015-a6a1272",
78
- "expo-sms": "14.0.8-canary-20251015-a6a1272",
79
- "expo-speech": "14.0.8-canary-20251015-a6a1272",
80
- "expo-splash-screen": "31.0.11-canary-20251015-a6a1272",
81
- "expo-sqlite": "16.0.9-canary-20251015-a6a1272",
82
- "expo-status-bar": "3.0.9-canary-20251015-a6a1272",
83
- "expo-store-review": "9.0.9-canary-20251015-a6a1272",
84
- "expo-symbols": "1.1.0-canary-20251015-a6a1272",
85
- "expo-system-ui": "6.0.8-canary-20251015-a6a1272",
86
- "expo-task-manager": "14.0.8-canary-20251015-a6a1272",
87
- "expo-tracking-transparency": "6.0.8-canary-20251015-a6a1272",
88
- "expo-updates": "29.1.0-canary-20251015-a6a1272",
89
- "expo-video-thumbnails": "10.0.8-canary-20251015-a6a1272",
90
- "expo-video": "3.0.12-canary-20251015-a6a1272",
91
- "expo-web-browser": "15.0.9-canary-20251015-a6a1272",
92
- "jest-expo": "55.0.0-canary-20251015-a6a1272",
47
+ "expo-haptics": "15.0.8-canary-20251023-4c86f95",
48
+ "expo-image": "3.1.0-canary-20251023-4c86f95",
49
+ "expo-image-loader": "6.0.1-canary-20251023-4c86f95",
50
+ "expo-image-manipulator": "14.0.8-canary-20251023-4c86f95",
51
+ "expo-image-picker": "17.0.9-canary-20251023-4c86f95",
52
+ "expo-intent-launcher": "13.0.8-canary-20251023-4c86f95",
53
+ "expo-insights": "0.10.8-canary-20251023-4c86f95",
54
+ "expo-keep-awake": "15.0.8-canary-20251023-4c86f95",
55
+ "expo-linear-gradient": "15.0.8-canary-20251023-4c86f95",
56
+ "expo-linking": "8.0.9-canary-20251023-4c86f95",
57
+ "expo-local-authentication": "17.0.8-canary-20251023-4c86f95",
58
+ "expo-localization": "17.0.8-canary-20251023-4c86f95",
59
+ "expo-location": "19.0.8-canary-20251023-4c86f95",
60
+ "expo-mail-composer": "15.0.8-canary-20251023-4c86f95",
61
+ "expo-manifests": "1.0.9-canary-20251023-4c86f95",
62
+ "expo-maps": "0.12.9-canary-20251023-4c86f95",
63
+ "expo-media-library": "18.3.0-canary-20251023-4c86f95",
64
+ "expo-mesh-gradient": "0.4.8-canary-20251023-4c86f95",
65
+ "expo-module-template": "11.0.17-canary-20251023-4c86f95",
66
+ "expo-modules-core": "3.1.0-canary-20251023-4c86f95",
67
+ "expo-navigation-bar": "5.0.10-canary-20251023-4c86f95",
68
+ "expo-network": "8.0.8-canary-20251023-4c86f95",
69
+ "expo-notifications": "1.0.0-canary-20251023-4c86f95",
70
+ "expo-print": "15.0.8-canary-20251023-4c86f95",
71
+ "expo-live-photo": "1.0.8-canary-20251023-4c86f95",
72
+ "expo-router": "7.0.0-canary-20251023-4c86f95",
73
+ "expo-screen-capture": "8.0.9-canary-20251023-4c86f95",
74
+ "expo-screen-orientation": "9.0.8-canary-20251023-4c86f95",
75
+ "expo-secure-store": "15.0.8-canary-20251023-4c86f95",
76
+ "expo-sensors": "15.0.8-canary-20251023-4c86f95",
77
+ "expo-sharing": "14.0.8-canary-20251023-4c86f95",
78
+ "expo-sms": "14.0.8-canary-20251023-4c86f95",
79
+ "expo-speech": "14.0.8-canary-20251023-4c86f95",
80
+ "expo-splash-screen": "31.0.11-canary-20251023-4c86f95",
81
+ "expo-sqlite": "16.0.9-canary-20251023-4c86f95",
82
+ "expo-status-bar": "3.0.9-canary-20251023-4c86f95",
83
+ "expo-store-review": "9.0.9-canary-20251023-4c86f95",
84
+ "expo-symbols": "1.1.0-canary-20251023-4c86f95",
85
+ "expo-system-ui": "6.0.9-canary-20251023-4c86f95",
86
+ "expo-task-manager": "14.0.9-canary-20251023-4c86f95",
87
+ "expo-tracking-transparency": "6.0.8-canary-20251023-4c86f95",
88
+ "expo-updates": "29.1.0-canary-20251023-4c86f95",
89
+ "expo-video-thumbnails": "10.0.8-canary-20251023-4c86f95",
90
+ "expo-video": "3.0.12-canary-20251023-4c86f95",
91
+ "expo-web-browser": "15.0.9-canary-20251023-4c86f95",
92
+ "jest-expo": "55.0.0-canary-20251023-4c86f95",
93
93
  "lottie-react-native": "~7.3.1",
94
94
  "react": "19.1.1",
95
95
  "react-dom": "19.1.1",
96
- "react-native": "0.82.0",
96
+ "react-native": "0.82.1",
97
97
  "react-native-web": "~0.21.0",
98
98
  "react-native-gesture-handler": "~2.28.0",
99
99
  "react-native-get-random-values": "~1.11.0",
100
100
  "react-native-keyboard-controller": "1.18.5",
101
101
  "react-native-maps": "1.20.1",
102
102
  "react-native-pager-view": "6.9.1",
103
- "react-native-worklets": "0.5.1",
103
+ "react-native-worklets": "0.6.1",
104
104
  "react-native-reanimated": "~4.1.1",
105
105
  "react-native-screens": "~4.16.0",
106
106
  "react-native-safe-area-context": "~5.6.0",
@@ -108,7 +108,7 @@
108
108
  "react-native-view-shot": "4.0.3",
109
109
  "react-native-webview": "13.15.0",
110
110
  "sentry-expo": "~7.0.0",
111
- "unimodules-app-loader": "6.0.8-canary-20251015-a6a1272",
111
+ "unimodules-app-loader": "6.0.8-canary-20251023-4c86f95",
112
112
  "unimodules-image-loader-interface": "~6.1.0",
113
113
  "@shopify/react-native-skia": "2.2.12",
114
114
  "@shopify/flash-list": "2.0.2",
@@ -2,6 +2,8 @@
2
2
 
3
3
  import ExpoModulesCore
4
4
 
5
+ @MainActor
6
+ @preconcurrency
5
7
  @objc
6
8
  public class AppDelegatesLoaderDelegate: NSObject {
7
9
  /**
@@ -4,6 +4,8 @@ import React
4
4
 
5
5
  public class ExpoReactNativeFactory: RCTReactNativeFactory, ExpoReactNativeFactoryProtocol {
6
6
  private let defaultModuleName = "main"
7
+
8
+ @MainActor
7
9
  private lazy var reactDelegate: ExpoReactDelegate = {
8
10
  ExpoReactDelegate(
9
11
  handlers: ExpoAppDelegateSubscriberRepository.reactDelegateHandlers,
@@ -3,9 +3,9 @@
3
3
  @preconcurrency import ExpoModulesCore
4
4
 
5
5
  private let fetchRequestQueue = DispatchQueue(label: "expo.modules.fetch.RequestQueue")
6
- @MainActor internal var urlSessionConfigurationProvider: NSURLSessionConfigurationProvider?
6
+ nonisolated(unsafe) internal var urlSessionConfigurationProvider: NSURLSessionConfigurationProvider?
7
7
 
8
- @MainActor public final class ExpoFetchModule: @preconcurrency Module {
8
+ public final class ExpoFetchModule: Module {
9
9
  private lazy var urlSession = createURLSession()
10
10
  private let urlSessionDelegate: URLSessionSessionDelegateProxy
11
11
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo",
3
- "version": "55.0.0-canary-20251015-a6a1272",
3
+ "version": "55.0.0-canary-20251023-4c86f95",
4
4
  "description": "The Expo SDK",
5
5
  "main": "src/Expo.ts",
6
6
  "module": "src/Expo.ts",
@@ -75,23 +75,24 @@
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": "54.1.0-canary-20251015-a6a1272",
79
- "@expo/config": "12.0.11-canary-20251015-a6a1272",
80
- "@expo/config-plugins": "54.0.3-canary-20251015-a6a1272",
81
- "@expo/devtools": "0.1.8-canary-20251015-a6a1272",
82
- "@expo/fingerprint": "0.15.2-canary-20251015-a6a1272",
83
- "@expo/metro": "~54.0.0",
84
- "@expo/metro-config": "54.0.7-canary-20251015-a6a1272",
78
+ "@expo/cli": "54.1.0-canary-20251023-4c86f95",
79
+ "@expo/config": "12.0.11-canary-20251023-4c86f95",
80
+ "@expo/config-plugins": "54.0.3-canary-20251023-4c86f95",
81
+ "@expo/devtools": "0.1.8-canary-20251023-4c86f95",
82
+ "@expo/fingerprint": "0.15.3-canary-20251023-4c86f95",
83
+ "@expo/metro": "~54.1.0",
84
+ "@expo/metro-config": "54.0.8-canary-20251023-4c86f95",
85
85
  "@expo/vector-icons": "^15.0.2",
86
+ "@expo/log-box": "0.0.13-canary-20251023-4c86f95",
86
87
  "@ungap/structured-clone": "^1.3.0",
87
- "babel-preset-expo": "54.0.5-canary-20251015-a6a1272",
88
- "expo-asset": "12.0.10-canary-20251015-a6a1272",
89
- "expo-constants": "18.0.10-canary-20251015-a6a1272",
90
- "expo-file-system": "19.0.18-canary-20251015-a6a1272",
91
- "expo-font": "14.0.10-canary-20251015-a6a1272",
92
- "expo-keep-awake": "15.0.8-canary-20251015-a6a1272",
93
- "expo-modules-autolinking": "3.1.0-canary-20251015-a6a1272",
94
- "expo-modules-core": "3.1.0-canary-20251015-a6a1272",
88
+ "babel-preset-expo": "54.0.7-canary-20251023-4c86f95",
89
+ "expo-asset": "12.0.10-canary-20251023-4c86f95",
90
+ "expo-constants": "18.0.11-canary-20251023-4c86f95",
91
+ "expo-file-system": "19.1.0-canary-20251023-4c86f95",
92
+ "expo-font": "14.0.10-canary-20251023-4c86f95",
93
+ "expo-keep-awake": "15.0.8-canary-20251023-4c86f95",
94
+ "expo-modules-autolinking": "3.1.0-canary-20251023-4c86f95",
95
+ "expo-modules-core": "3.1.0-canary-20251023-4c86f95",
95
96
  "pretty-format": "^29.7.0",
96
97
  "react-refresh": "^0.14.2",
97
98
  "whatwg-url-without-unicode": "8.0.0-3"
@@ -100,15 +101,15 @@
100
101
  "@types/node": "^22.14.0",
101
102
  "@types/react": "~19.1.10",
102
103
  "@types/react-test-renderer": "~19.1.0",
103
- "expo-module-scripts": "5.0.8-canary-20251015-a6a1272",
104
+ "expo-module-scripts": "5.0.8-canary-20251023-4c86f95",
104
105
  "react": "19.1.1",
105
106
  "react-dom": "19.1.1",
106
- "react-native": "0.82.0",
107
+ "react-native": "0.82.1",
107
108
  "web-streams-polyfill": "^3.3.2"
108
109
  },
109
110
  "peerDependencies": {
110
- "@expo/dom-webview": "0.2.8-canary-20251015-a6a1272",
111
- "@expo/metro-runtime": "6.1.3-canary-20251015-a6a1272",
111
+ "@expo/dom-webview": "0.2.8-canary-20251023-4c86f95",
112
+ "@expo/metro-runtime": "6.1.3-canary-20251023-4c86f95",
112
113
  "react": "*",
113
114
  "react-native": "*",
114
115
  "react-native-webview": "*"
@@ -1,8 +1,8 @@
1
1
  import { buildUrlForBundle } from '../buildUrlForBundle';
2
2
 
3
3
  it(`returns an expected URL`, () => {
4
- expect(buildUrlForBundle('foobar')).toEqual('/foobar');
4
+ expect(buildUrlForBundle('foobar')).toEqual(expect.stringMatching(/\/foobar$/));
5
5
  });
6
6
  it(`returns an expected URL with non standard root`, () => {
7
- expect(buildUrlForBundle('/more/than/one')).toEqual('/more/than/one');
7
+ expect(buildUrlForBundle('/more/than/one')).toEqual(expect.stringMatching(/\/more\/than\/one$/));
8
8
  });
@@ -27,9 +27,12 @@ it('loads a bundle', async () => {
27
27
  expect(DeviceEventEmitter.emit).not.toHaveBeenCalled();
28
28
  expect(DeviceEventEmitter.emit).not.toHaveBeenCalled();
29
29
 
30
- const url = `/Second.bundle?modulesOnly=true`;
31
- expect(HMRClient.registerBundle).toHaveBeenCalledWith(url);
32
- expect(fetchThenEvalAsync).toHaveBeenCalledWith(url);
30
+ expect(HMRClient.registerBundle).toHaveBeenCalledWith(
31
+ expect.stringMatching(/Second.bundle\?modulesOnly=true$/)
32
+ );
33
+ expect(fetchThenEvalAsync).toHaveBeenCalledWith(
34
+ expect.stringMatching(/Second.bundle\?modulesOnly=true$/)
35
+ );
33
36
  });
34
37
  it('loads a bundle in production', async () => {
35
38
  DeviceEventEmitter.emit = jest.fn();
@@ -38,7 +41,8 @@ it('loads a bundle in production', async () => {
38
41
  expect(DeviceEventEmitter.emit).not.toHaveBeenCalled();
39
42
  expect(DeviceEventEmitter.emit).not.toHaveBeenCalled();
40
43
 
41
- const url = `/Second.bundle?modulesOnly=true`;
42
44
  expect(HMRClient.registerBundle).not.toHaveBeenCalled();
43
- expect(fetchThenEvalAsync).toHaveBeenCalledWith(url);
45
+ expect(fetchThenEvalAsync).toHaveBeenCalledWith(
46
+ expect.stringMatching(/Second.bundle\?modulesOnly=true$/)
47
+ );
44
48
  });
@@ -0,0 +1,14 @@
1
+ import { withoutANSIColorStyles } from '@expo/log-box/utils';
2
+
3
+ export class HMRMetroBuildError extends Error {
4
+ public originalMessage: string;
5
+
6
+ constructor(message: string = 'Unknown Metro Error', type?: string, cause?: Error) {
7
+ super(message);
8
+ this.name = type || 'BuildError';
9
+ this.cause = cause;
10
+ this.originalMessage = [type, message].filter(Boolean).join(': ');
11
+ this.message = withoutANSIColorStyles(message);
12
+ this.stack = '';
13
+ }
14
+ }