@ankhorage/expo-runtime 3.0.5 → 3.0.7

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @ankhorage/expo-runtime
2
2
 
3
+ ## 3.0.7
4
+
5
+ ### Patch Changes
6
+
7
+ - b115422: Add the shared Expo provider that loads every ZORA icon font face on Web before presenting an interactive app.
8
+
9
+ ## 3.0.6
10
+
11
+ ### Patch Changes
12
+
13
+ - c06e8f6: Pin the canonical generated-app Expo toolchain to Expo 57.0.17 and align React Native 0.86.3 with the current SDK 57 compatibility metadata.
14
+
3
15
  ## 3.0.5
4
16
 
5
17
  ### Patch Changes
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # EXPO-RUNTIME
5
5
 
6
- ![license: MIT](././paradox/badges/license.svg) ![npm: v3.0.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v3.0.6](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
7
7
 
8
8
  Declarative runtime integration for Expo apps: maps app capabilities to permissions, packages, config plugins, providers, and adapters
9
9
 
@@ -18,6 +18,7 @@ Declarative runtime integration for Expo apps: maps app capabilities to permissi
18
18
  - [createExpoRuntimeRegistry sequence](././paradox/diagrams/sequences/create-expo-runtime-registry.mmd)
19
19
  - [executeExpoRuntimeAction sequence](././paradox/diagrams/sequences/execute-expo-runtime-action.mmd)
20
20
  - [ExpoBarcodeScannerAdapter sequence](././paradox/diagrams/sequences/expo-barcode-scanner-adapter.mmd)
21
+ - [ExpoZoraIconFontProvider sequence](././paradox/diagrams/sequences/expo-zora-icon-font-provider.mmd)
21
22
  - [getExpoBundledMediaRegistrySource sequence](././paradox/diagrams/sequences/get-expo-bundled-media-registry-source.mmd)
22
23
  - [resolveExpoRuntimeGeneratedAppOutput sequence](././paradox/diagrams/sequences/resolve-expo-runtime-generated-app-output.mmd)
23
24
  - [resolveExpoRuntimeNativeOutput sequence](././paradox/diagrams/sequences/resolve-expo-runtime-native-output.mmd)
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export interface ExpoZoraIconFontProviderProps {
3
+ readonly children: React.ReactNode;
4
+ }
5
+ export declare function ExpoZoraIconFontProvider(props: ExpoZoraIconFontProviderProps): React.JSX.Element;
6
+ //# sourceMappingURL=ExpoZoraIconFontProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpoZoraIconFontProvider.d.ts","sourceRoot":"","sources":["../src/ExpoZoraIconFontProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CACpC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,qBAE5E"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ export function ExpoZoraIconFontProvider(props) {
3
+ return <>{props.children}</>;
4
+ }
5
+ //# sourceMappingURL=ExpoZoraIconFontProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpoZoraIconFontProvider.js","sourceRoot":"","sources":["../src/ExpoZoraIconFontProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,UAAU,wBAAwB,CAAC,KAAoC;IAC3E,OAAO,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC/B,CAAC","sourcesContent":["import React from 'react';\n\nexport interface ExpoZoraIconFontProviderProps {\n readonly children: React.ReactNode;\n}\n\nexport function ExpoZoraIconFontProvider(props: ExpoZoraIconFontProviderProps) {\n return <>{props.children}</>;\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export interface ExpoZoraIconFontProviderProps {
3
+ readonly children: React.ReactNode;
4
+ }
5
+ export declare function ExpoZoraIconFontProvider(props: ExpoZoraIconFontProviderProps): React.JSX.Element | null;
6
+ //# sourceMappingURL=ExpoZoraIconFontProvider.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpoZoraIconFontProvider.web.d.ts","sourceRoot":"","sources":["../src/ExpoZoraIconFontProvider.web.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CACpC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,4BAY5E"}
@@ -0,0 +1,31 @@
1
+ import fontAwesome from '@react-native-vector-icons/fontawesome/fonts/FontAwesome.ttf';
2
+ import fontAwesome5Brands from '@react-native-vector-icons/fontawesome5/fonts/FontAwesome5_Brands.ttf';
3
+ import fontAwesome5Regular from '@react-native-vector-icons/fontawesome5/fonts/FontAwesome5_Regular.ttf';
4
+ import fontAwesome5Solid from '@react-native-vector-icons/fontawesome5/fonts/FontAwesome5_Solid.ttf';
5
+ import fontAwesome6Brands from '@react-native-vector-icons/fontawesome6/fonts/FontAwesome6_Brands.ttf';
6
+ import fontAwesome6Regular from '@react-native-vector-icons/fontawesome6/fonts/FontAwesome6_Regular.ttf';
7
+ import fontAwesome6Solid from '@react-native-vector-icons/fontawesome6/fonts/FontAwesome6_Solid.ttf';
8
+ import ionicons from '@react-native-vector-icons/ionicons/fonts/Ionicons.ttf';
9
+ import { useFonts } from 'expo-font';
10
+ import React from 'react';
11
+ const ZORA_ICON_FONTS = {
12
+ FontAwesome: fontAwesome,
13
+ 'FontAwesome5Brands-Regular': fontAwesome5Brands,
14
+ 'FontAwesome5Free-Regular': fontAwesome5Regular,
15
+ 'FontAwesome5Free-Solid': fontAwesome5Solid,
16
+ 'FontAwesome6Brands-Regular': fontAwesome6Brands,
17
+ 'FontAwesome6Free-Regular': fontAwesome6Regular,
18
+ 'FontAwesome6Free-Solid': fontAwesome6Solid,
19
+ Ionicons: ionicons,
20
+ };
21
+ export function ExpoZoraIconFontProvider(props) {
22
+ const [loaded, error] = useFonts(ZORA_ICON_FONTS);
23
+ if (error) {
24
+ throw error;
25
+ }
26
+ if (!loaded) {
27
+ return null;
28
+ }
29
+ return <>{props.children}</>;
30
+ }
31
+ //# sourceMappingURL=ExpoZoraIconFontProvider.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpoZoraIconFontProvider.web.js","sourceRoot":"","sources":["../src/ExpoZoraIconFontProvider.web.tsx"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,8DAA8D,CAAC;AACvF,OAAO,kBAAkB,MAAM,uEAAuE,CAAC;AACvG,OAAO,mBAAmB,MAAM,wEAAwE,CAAC;AACzG,OAAO,iBAAiB,MAAM,sEAAsE,CAAC;AACrG,OAAO,kBAAkB,MAAM,uEAAuE,CAAC;AACvG,OAAO,mBAAmB,MAAM,wEAAwE,CAAC;AACzG,OAAO,iBAAiB,MAAM,sEAAsE,CAAC;AACrG,OAAO,QAAQ,MAAM,wDAAwD,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,eAAe,GAAG;IACtB,WAAW,EAAE,WAAW;IACxB,4BAA4B,EAAE,kBAAkB;IAChD,0BAA0B,EAAE,mBAAmB;IAC/C,wBAAwB,EAAE,iBAAiB;IAC3C,4BAA4B,EAAE,kBAAkB;IAChD,0BAA0B,EAAE,mBAAmB;IAC/C,wBAAwB,EAAE,iBAAiB;IAC3C,QAAQ,EAAE,QAAQ;CACV,CAAC;AAMX,MAAM,UAAU,wBAAwB,CAAC,KAAoC;IAC3E,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;IAElD,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,KAAK,CAAC;IACd,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC/B,CAAC","sourcesContent":["import fontAwesome from '@react-native-vector-icons/fontawesome/fonts/FontAwesome.ttf';\nimport fontAwesome5Brands from '@react-native-vector-icons/fontawesome5/fonts/FontAwesome5_Brands.ttf';\nimport fontAwesome5Regular from '@react-native-vector-icons/fontawesome5/fonts/FontAwesome5_Regular.ttf';\nimport fontAwesome5Solid from '@react-native-vector-icons/fontawesome5/fonts/FontAwesome5_Solid.ttf';\nimport fontAwesome6Brands from '@react-native-vector-icons/fontawesome6/fonts/FontAwesome6_Brands.ttf';\nimport fontAwesome6Regular from '@react-native-vector-icons/fontawesome6/fonts/FontAwesome6_Regular.ttf';\nimport fontAwesome6Solid from '@react-native-vector-icons/fontawesome6/fonts/FontAwesome6_Solid.ttf';\nimport ionicons from '@react-native-vector-icons/ionicons/fonts/Ionicons.ttf';\nimport { useFonts } from 'expo-font';\nimport React from 'react';\n\nconst ZORA_ICON_FONTS = {\n FontAwesome: fontAwesome,\n 'FontAwesome5Brands-Regular': fontAwesome5Brands,\n 'FontAwesome5Free-Regular': fontAwesome5Regular,\n 'FontAwesome5Free-Solid': fontAwesome5Solid,\n 'FontAwesome6Brands-Regular': fontAwesome6Brands,\n 'FontAwesome6Free-Regular': fontAwesome6Regular,\n 'FontAwesome6Free-Solid': fontAwesome6Solid,\n Ionicons: ionicons,\n} as const;\n\nexport interface ExpoZoraIconFontProviderProps {\n readonly children: React.ReactNode;\n}\n\nexport function ExpoZoraIconFontProvider(props: ExpoZoraIconFontProviderProps) {\n const [loaded, error] = useFonts(ZORA_ICON_FONTS);\n\n if (error) {\n throw error;\n }\n\n if (!loaded) {\n return null;\n }\n\n return <>{props.children}</>;\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export { createExpoRuntimeRegistry } from './createExpoRuntimeRegistry';
7
7
  export { executeExpoRuntimeAction, type ExecuteExpoRuntimeActionArgs, type ExpoRuntimeActionHandlerArgs, type ExpoRuntimeActionHandlers, type ExpoRuntimeRouteResolution, type ExpoRuntimeRouterLike, type ExpoRuntimeThemeMode, resolveExpoRuntimeRoutePath, } from './expoActionBridge';
8
8
  export { ExpoBarcodeScannerAdapter } from './ExpoBarcodeScannerAdapter';
9
9
  export { ExpoRuntimeProviders, type ExpoRuntimeProvidersProps } from './ExpoRuntimeProviders';
10
+ export { ExpoZoraIconFontProvider, type ExpoZoraIconFontProviderProps, } from './ExpoZoraIconFontProvider';
10
11
  export { type ExpoRuntimeConfigPluginOutput, type ExpoRuntimeDependencyMap, type ExpoRuntimeGeneratedAppOutputPlan, type ExpoRuntimeNativeOutputPlan, resolveExpoRuntimeConfigPluginOutput, resolveExpoRuntimeDependencyMap, resolveExpoRuntimeGeneratedAppOutput, resolveExpoRuntimeNativeOutput, } from './generatedAppOutput';
11
12
  export { getExpoBarcodeScannerViewSource } from './generatedSources';
12
13
  export { type ExpoRuntimeLayoutIntegrationPlan, resolveExpoRuntimeLayoutIntegration, } from './layoutIntegrationPlanning';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,2CAA2C,EAC3C,8BAA8B,EAC9B,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,mCAAmC,EACxC,iCAAiC,GAClC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,8BAA8B,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EACjC,KAAK,qBAAqB,EAC1B,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EACL,wBAAwB,EACxB,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,KAAK,iCAAiC,EACtC,KAAK,2BAA2B,EAChC,oCAAoC,EACpC,+BAA+B,EAC/B,oCAAoC,EACpC,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EACL,KAAK,gCAAgC,EACrC,mCAAmC,GACpC,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,2CAA2C,EAC3C,8BAA8B,EAC9B,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,mCAAmC,EACxC,iCAAiC,GAClC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,8BAA8B,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EACjC,KAAK,qBAAqB,EAC1B,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EACL,wBAAwB,EACxB,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EACL,wBAAwB,EACxB,KAAK,6BAA6B,GACnC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,KAAK,iCAAiC,EACtC,KAAK,2BAA2B,EAChC,oCAAoC,EACpC,+BAA+B,EAC/B,oCAAoC,EACpC,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EACL,KAAK,gCAAgC,EACrC,mCAAmC,GACpC,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ export { createExpoRuntimeRegistry } from './createExpoRuntimeRegistry';
6
6
  export { executeExpoRuntimeAction, resolveExpoRuntimeRoutePath, } from './expoActionBridge';
7
7
  export { ExpoBarcodeScannerAdapter } from './ExpoBarcodeScannerAdapter';
8
8
  export { ExpoRuntimeProviders } from './ExpoRuntimeProviders';
9
+ export { ExpoZoraIconFontProvider, } from './ExpoZoraIconFontProvider';
9
10
  export { resolveExpoRuntimeConfigPluginOutput, resolveExpoRuntimeDependencyMap, resolveExpoRuntimeGeneratedAppOutput, resolveExpoRuntimeNativeOutput, } from './generatedAppOutput';
10
11
  export { getExpoBarcodeScannerViewSource } from './generatedSources';
11
12
  export { resolveExpoRuntimeLayoutIntegration, } from './layoutIntegrationPlanning';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EAGrB,2CAA2C,EAC3C,8BAA8B,EAC9B,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,iCAAiC,GAClC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,8BAA8B,EAK9B,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EACL,wBAAwB,EAOxB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAkC,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EAKL,oCAAoC,EACpC,+BAA+B,EAC/B,oCAAoC,EACpC,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAEL,mCAAmC,GACpC,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC","sourcesContent":["export {\n BARCODE_SCAN_DEDUPE_WINDOW_MS,\n BARCODE_SCANNER_TYPES,\n type BarcodeScanRecord,\n type ExpoBarcodeScanResultLike,\n mapPermissionStatusToCameraPermissionStatus,\n normalizeExpoBarcodeScanResult,\n shouldIgnoreBarcodeScan,\n} from './barcodeScanRuntime';\nexport {\n type ExpoBundledMediaRegistrySourceEntry,\n getExpoBundledMediaRegistrySource,\n} from './bundledMediaRegistrySource';\nexport {\n createExpoBundledMediaResolver,\n type ExpoBundledMediaRegistry,\n type ExpoBundledMediaResolver,\n type ExpoBundledMediaResolverArgs,\n type ExpoBundledMediaValue,\n resolveExpoBundledMediaAsset,\n} from './bundledMediaResolver';\nexport type { ComponentRegistry } from './componentRegistry';\nexport { createComponentRegistry } from './componentRegistry';\nexport { createExpoRuntimeRegistry } from './createExpoRuntimeRegistry';\nexport {\n executeExpoRuntimeAction,\n type ExecuteExpoRuntimeActionArgs,\n type ExpoRuntimeActionHandlerArgs,\n type ExpoRuntimeActionHandlers,\n type ExpoRuntimeRouteResolution,\n type ExpoRuntimeRouterLike,\n type ExpoRuntimeThemeMode,\n resolveExpoRuntimeRoutePath,\n} from './expoActionBridge';\nexport { ExpoBarcodeScannerAdapter } from './ExpoBarcodeScannerAdapter';\nexport { ExpoRuntimeProviders, type ExpoRuntimeProvidersProps } from './ExpoRuntimeProviders';\nexport {\n type ExpoRuntimeConfigPluginOutput,\n type ExpoRuntimeDependencyMap,\n type ExpoRuntimeGeneratedAppOutputPlan,\n type ExpoRuntimeNativeOutputPlan,\n resolveExpoRuntimeConfigPluginOutput,\n resolveExpoRuntimeDependencyMap,\n resolveExpoRuntimeGeneratedAppOutput,\n resolveExpoRuntimeNativeOutput,\n} from './generatedAppOutput';\nexport { getExpoBarcodeScannerViewSource } from './generatedSources';\nexport {\n type ExpoRuntimeLayoutIntegrationPlan,\n resolveExpoRuntimeLayoutIntegration,\n} from './layoutIntegrationPlanning';\nexport type {\n ExpoRuntimeAdapterId,\n ExpoRuntimePlan,\n ExpoRuntimeProviderId,\n} from './resolveExpoRuntimePlan';\nexport { resolveExpoRuntimePlan } from './resolveExpoRuntimePlan';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EAGrB,2CAA2C,EAC3C,8BAA8B,EAC9B,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,iCAAiC,GAClC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,8BAA8B,EAK9B,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EACL,wBAAwB,EAOxB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAkC,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EACL,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAKL,oCAAoC,EACpC,+BAA+B,EAC/B,oCAAoC,EACpC,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAEL,mCAAmC,GACpC,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC","sourcesContent":["export {\n BARCODE_SCAN_DEDUPE_WINDOW_MS,\n BARCODE_SCANNER_TYPES,\n type BarcodeScanRecord,\n type ExpoBarcodeScanResultLike,\n mapPermissionStatusToCameraPermissionStatus,\n normalizeExpoBarcodeScanResult,\n shouldIgnoreBarcodeScan,\n} from './barcodeScanRuntime';\nexport {\n type ExpoBundledMediaRegistrySourceEntry,\n getExpoBundledMediaRegistrySource,\n} from './bundledMediaRegistrySource';\nexport {\n createExpoBundledMediaResolver,\n type ExpoBundledMediaRegistry,\n type ExpoBundledMediaResolver,\n type ExpoBundledMediaResolverArgs,\n type ExpoBundledMediaValue,\n resolveExpoBundledMediaAsset,\n} from './bundledMediaResolver';\nexport type { ComponentRegistry } from './componentRegistry';\nexport { createComponentRegistry } from './componentRegistry';\nexport { createExpoRuntimeRegistry } from './createExpoRuntimeRegistry';\nexport {\n executeExpoRuntimeAction,\n type ExecuteExpoRuntimeActionArgs,\n type ExpoRuntimeActionHandlerArgs,\n type ExpoRuntimeActionHandlers,\n type ExpoRuntimeRouteResolution,\n type ExpoRuntimeRouterLike,\n type ExpoRuntimeThemeMode,\n resolveExpoRuntimeRoutePath,\n} from './expoActionBridge';\nexport { ExpoBarcodeScannerAdapter } from './ExpoBarcodeScannerAdapter';\nexport { ExpoRuntimeProviders, type ExpoRuntimeProvidersProps } from './ExpoRuntimeProviders';\nexport {\n ExpoZoraIconFontProvider,\n type ExpoZoraIconFontProviderProps,\n} from './ExpoZoraIconFontProvider';\nexport {\n type ExpoRuntimeConfigPluginOutput,\n type ExpoRuntimeDependencyMap,\n type ExpoRuntimeGeneratedAppOutputPlan,\n type ExpoRuntimeNativeOutputPlan,\n resolveExpoRuntimeConfigPluginOutput,\n resolveExpoRuntimeDependencyMap,\n resolveExpoRuntimeGeneratedAppOutput,\n resolveExpoRuntimeNativeOutput,\n} from './generatedAppOutput';\nexport { getExpoBarcodeScannerViewSource } from './generatedSources';\nexport {\n type ExpoRuntimeLayoutIntegrationPlan,\n resolveExpoRuntimeLayoutIntegration,\n} from './layoutIntegrationPlanning';\nexport type {\n ExpoRuntimeAdapterId,\n ExpoRuntimePlan,\n ExpoRuntimeProviderId,\n} from './resolveExpoRuntimePlan';\nexport { resolveExpoRuntimePlan } from './resolveExpoRuntimePlan';\n"]}
package/dist/platform.js CHANGED
@@ -12,10 +12,10 @@ export const EXPO_PLATFORM = {
12
12
  sdk: 57,
13
13
  architecture: 'new-architecture-only',
14
14
  runtime: {
15
- expo: definePackage('expo', '~57.0.15'),
15
+ expo: definePackage('expo', '57.0.17'),
16
16
  react: definePackage('react', '19.2.3'),
17
17
  reactDom: definePackage('react-dom', '19.2.3'),
18
- reactNative: definePackage('react-native', '0.86.2'),
18
+ reactNative: definePackage('react-native', '0.86.3'),
19
19
  reactNativeWeb: definePackage('react-native-web', '~0.21.0'),
20
20
  },
21
21
  tooling: {
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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","sourcesContent":["export interface ExpoPlatformPackage {\n readonly name: string;\n readonly version: string;\n}\n\nfunction definePackage(name: string, version: string): ExpoPlatformPackage {\n return { name, version };\n}\n\n/**\n * The canonical Ankhorage projection of the supported Expo platform.\n *\n * Package versions come from Expo SDK 57's bundled native module map. Keep this\n * structure as the only hand-maintained Expo compatibility authority in this\n * repository; generated manifests and runtime planning derive from it.\n */\nexport const EXPO_PLATFORM = {\n sdk: 57,\n architecture: 'new-architecture-only',\n runtime: {\n expo: definePackage('expo', '~57.0.15'),\n react: definePackage('react', '19.2.3'),\n reactDom: definePackage('react-dom', '19.2.3'),\n reactNative: definePackage('react-native', '0.86.2'),\n reactNativeWeb: definePackage('react-native-web', '~0.21.0'),\n },\n tooling: {\n node: {\n lts: 24,\n version: '24.x',\n },\n nodeTypes: definePackage('@types/node', '^24.13.3'),\n typescript: definePackage('typescript', '~6.0.3'),\n expoDoctor: definePackage('expo-doctor', '1.20.2'),\n },\n navigation: {\n expoRouter: definePackage('expo-router', '~57.0.15'),\n screens: definePackage('react-native-screens', '~4.26.0'),\n safeArea: definePackage('react-native-safe-area-context', '~5.7.0'),\n },\n animation: {\n reanimated: definePackage('react-native-reanimated', '4.5.1'),\n worklets: definePackage('react-native-worklets', '0.10.1'),\n gestureHandler: definePackage('react-native-gesture-handler', '~2.32.0'),\n },\n ui: {\n svg: definePackage('react-native-svg', '15.15.4'),\n },\n packages: {\n metroRuntime: definePackage('@expo/metro-runtime', '~57.0.12'),\n asset: definePackage('expo-asset', '~57.0.13'),\n audio: definePackage('expo-audio', '~57.0.4'),\n authSession: definePackage('expo-auth-session', '~57.0.8'),\n camera: definePackage('expo-camera', '~57.0.4'),\n constants: definePackage('expo-constants', '~57.0.13'),\n crypto: definePackage('expo-crypto', '~57.0.2'),\n devClient: definePackage('expo-dev-client', '~57.0.14'),\n documentPicker: definePackage('expo-document-picker', '~57.0.1'),\n fileSystem: definePackage('expo-file-system', '~57.0.5'),\n font: definePackage('expo-font', '~57.0.1'),\n imagePicker: definePackage('expo-image-picker', '~57.0.12'),\n linearGradient: definePackage('expo-linear-gradient', '~57.0.1'),\n linking: definePackage('expo-linking', '~57.0.7'),\n localization: definePackage('expo-localization', '~57.0.1'),\n location: definePackage('expo-location', '~57.0.12'),\n mediaLibrary: definePackage('expo-media-library', '~57.0.4'),\n notifications: definePackage('expo-notifications', '~57.0.13'),\n secureStore: definePackage('expo-secure-store', '~57.0.1'),\n splashScreen: definePackage('expo-splash-screen', '~57.0.7'),\n statusBar: definePackage('expo-status-bar', '~57.0.1'),\n updates: definePackage('expo-updates', '~57.0.16'),\n webBrowser: definePackage('expo-web-browser', '~57.0.2'),\n },\n platforms: {\n android: {\n minimumVersion: 7,\n minimumApiLevel: 24,\n compileSdk: 36,\n targetSdk: 36,\n edgeToEdge: true,\n },\n ios: {\n minimumVersion: '16.4',\n minimumXcodeVersion: '26.4',\n },\n },\n} as const;\n\nexport type ExpoPlatform = typeof EXPO_PLATFORM;\n"]}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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","sourcesContent":["export interface ExpoPlatformPackage {\n readonly name: string;\n readonly version: string;\n}\n\nfunction definePackage(name: string, version: string): ExpoPlatformPackage {\n return { name, version };\n}\n\n/**\n * The canonical Ankhorage projection of the supported Expo platform.\n *\n * Package versions come from Expo SDK 57's bundled native module map. Keep this\n * structure as the only hand-maintained Expo compatibility authority in this\n * repository; generated manifests and runtime planning derive from it.\n */\nexport const EXPO_PLATFORM = {\n sdk: 57,\n architecture: 'new-architecture-only',\n runtime: {\n expo: definePackage('expo', '57.0.17'),\n react: definePackage('react', '19.2.3'),\n reactDom: definePackage('react-dom', '19.2.3'),\n reactNative: definePackage('react-native', '0.86.3'),\n reactNativeWeb: definePackage('react-native-web', '~0.21.0'),\n },\n tooling: {\n node: {\n lts: 24,\n version: '24.x',\n },\n nodeTypes: definePackage('@types/node', '^24.13.3'),\n typescript: definePackage('typescript', '~6.0.3'),\n expoDoctor: definePackage('expo-doctor', '1.20.2'),\n },\n navigation: {\n expoRouter: definePackage('expo-router', '~57.0.15'),\n screens: definePackage('react-native-screens', '~4.26.0'),\n safeArea: definePackage('react-native-safe-area-context', '~5.7.0'),\n },\n animation: {\n reanimated: definePackage('react-native-reanimated', '4.5.1'),\n worklets: definePackage('react-native-worklets', '0.10.1'),\n gestureHandler: definePackage('react-native-gesture-handler', '~2.32.0'),\n },\n ui: {\n svg: definePackage('react-native-svg', '15.15.4'),\n },\n packages: {\n metroRuntime: definePackage('@expo/metro-runtime', '~57.0.12'),\n asset: definePackage('expo-asset', '~57.0.13'),\n audio: definePackage('expo-audio', '~57.0.4'),\n authSession: definePackage('expo-auth-session', '~57.0.8'),\n camera: definePackage('expo-camera', '~57.0.4'),\n constants: definePackage('expo-constants', '~57.0.13'),\n crypto: definePackage('expo-crypto', '~57.0.2'),\n devClient: definePackage('expo-dev-client', '~57.0.14'),\n documentPicker: definePackage('expo-document-picker', '~57.0.1'),\n fileSystem: definePackage('expo-file-system', '~57.0.5'),\n font: definePackage('expo-font', '~57.0.1'),\n imagePicker: definePackage('expo-image-picker', '~57.0.12'),\n linearGradient: definePackage('expo-linear-gradient', '~57.0.1'),\n linking: definePackage('expo-linking', '~57.0.7'),\n localization: definePackage('expo-localization', '~57.0.1'),\n location: definePackage('expo-location', '~57.0.12'),\n mediaLibrary: definePackage('expo-media-library', '~57.0.4'),\n notifications: definePackage('expo-notifications', '~57.0.13'),\n secureStore: definePackage('expo-secure-store', '~57.0.1'),\n splashScreen: definePackage('expo-splash-screen', '~57.0.7'),\n statusBar: definePackage('expo-status-bar', '~57.0.1'),\n updates: definePackage('expo-updates', '~57.0.16'),\n webBrowser: definePackage('expo-web-browser', '~57.0.2'),\n },\n platforms: {\n android: {\n minimumVersion: 7,\n minimumApiLevel: 24,\n compileSdk: 36,\n targetSdk: 36,\n edgeToEdge: true,\n },\n ios: {\n minimumVersion: '16.4',\n minimumXcodeVersion: '26.4',\n },\n },\n} as const;\n\nexport type ExpoPlatform = typeof EXPO_PLATFORM;\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ankhorage/expo-runtime",
3
3
  "type": "module",
4
- "version": "3.0.5",
4
+ "version": "3.0.7",
5
5
  "description": "Declarative runtime integration for Expo apps: maps app capabilities to permissions, packages, config plugins, providers, and adapters",
6
6
  "homepage": "https://github.com/ankhorage/expo-runtime#readme",
7
7
  "bugs": {
@@ -102,6 +102,7 @@
102
102
  "changeset:status": "changeset status --since=origin/main",
103
103
  "docs": "paradox",
104
104
  "knip": "ankhorage-knip",
105
+ "knip:check": "ankhorage-knip",
105
106
  "lint": "ankhorage-eslint . --max-warnings=0",
106
107
  "lint:fix": "ankhorage-eslint . --fix --max-warnings=0",
107
108
  "format": "ankhorage-prettier --write .",
@@ -119,14 +120,19 @@
119
120
  "peerDependencies": {
120
121
  "@ankhorage/permissions": "^0.2.3",
121
122
  "@ankhorage/zora": "^3.0.0",
122
- "expo": "~57.0.15",
123
+ "@react-native-vector-icons/fontawesome": "^13.1.3",
124
+ "@react-native-vector-icons/fontawesome5": "^13.1.3",
125
+ "@react-native-vector-icons/fontawesome6": "^13.1.3",
126
+ "@react-native-vector-icons/ionicons": "^13.1.3",
127
+ "expo": "57.0.17",
123
128
  "expo-camera": "~57.0.4",
124
129
  "expo-constants": "~57.0.13",
125
130
  "expo-document-picker": "~57.0.1",
126
131
  "expo-file-system": "~57.0.5",
132
+ "expo-font": "~57.0.1",
127
133
  "expo-image-picker": "~57.0.12",
128
134
  "react": "19.2.3",
129
- "react-native": "0.86.2"
135
+ "react-native": "0.86.3"
130
136
  },
131
137
  "peerDependenciesMeta": {
132
138
  "@ankhorage/permissions": {
@@ -135,6 +141,18 @@
135
141
  "@ankhorage/zora": {
136
142
  "optional": true
137
143
  },
144
+ "@react-native-vector-icons/fontawesome": {
145
+ "optional": true
146
+ },
147
+ "@react-native-vector-icons/fontawesome5": {
148
+ "optional": true
149
+ },
150
+ "@react-native-vector-icons/fontawesome6": {
151
+ "optional": true
152
+ },
153
+ "@react-native-vector-icons/ionicons": {
154
+ "optional": true
155
+ },
138
156
  "expo": {
139
157
  "optional": true
140
158
  },
@@ -150,6 +168,9 @@
150
168
  "expo-file-system": {
151
169
  "optional": true
152
170
  },
171
+ "expo-font": {
172
+ "optional": true
173
+ },
153
174
  "expo-image-picker": {
154
175
  "optional": true
155
176
  },
@@ -176,15 +197,16 @@
176
197
  "@types/pngjs": "^6.0.5",
177
198
  "@types/react": "^19.2.18",
178
199
  "bwip-js": "^4.11.4",
179
- "expo": "~57.0.15",
200
+ "expo": "57.0.17",
180
201
  "expo-camera": "~57.0.4",
181
202
  "expo-constants": "~57.0.13",
182
203
  "expo-document-picker": "~57.0.1",
183
204
  "expo-file-system": "~57.0.5",
205
+ "expo-font": "~57.0.1",
184
206
  "expo-image-picker": "~57.0.12",
185
207
  "react": "19.2.3",
186
208
  "react-dom": "19.2.3",
187
- "react-native": "0.86.2",
209
+ "react-native": "0.86.3",
188
210
  "react-native-safe-area-context": "~5.7.0",
189
211
  "react-native-web": "~0.21.0",
190
212
  "playwright-core": "^1.62.1",
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+
3
+ export interface ExpoZoraIconFontProviderProps {
4
+ readonly children: React.ReactNode;
5
+ }
6
+
7
+ export function ExpoZoraIconFontProvider(props: ExpoZoraIconFontProviderProps) {
8
+ return <>{props.children}</>;
9
+ }
@@ -0,0 +1,56 @@
1
+ import { afterAll, describe, expect, mock, test } from 'bun:test';
2
+ import React from 'react';
3
+
4
+ const useFonts = mock(
5
+ (_fonts: Readonly<Record<string, number>>): readonly [boolean, Error | null] => [true, null],
6
+ );
7
+
8
+ void mock.module('expo-font', () => ({ useFonts }));
9
+
10
+ const { ExpoZoraIconFontProvider } = await import('./ExpoZoraIconFontProvider.web');
11
+
12
+ describe('ExpoZoraIconFontProvider Web', () => {
13
+ afterAll(() => {
14
+ mock.restore();
15
+ });
16
+
17
+ test('loads every font face used by the ZORA icon providers before rendering', () => {
18
+ const child = React.createElement('child');
19
+ const element = ExpoZoraIconFontProvider({ children: child });
20
+
21
+ expect(useFonts).toHaveBeenCalledTimes(1);
22
+ const fonts = useFonts.mock.calls[0]?.[0] ?? {};
23
+ expect(
24
+ Object.entries(fonts).map(([family, source]) => [family, String(source).split('/').at(-1)]),
25
+ ).toEqual([
26
+ ['FontAwesome', 'FontAwesome.ttf'],
27
+ ['FontAwesome5Brands-Regular', 'FontAwesome5_Brands.ttf'],
28
+ ['FontAwesome5Free-Regular', 'FontAwesome5_Regular.ttf'],
29
+ ['FontAwesome5Free-Solid', 'FontAwesome5_Solid.ttf'],
30
+ ['FontAwesome6Brands-Regular', 'FontAwesome6_Brands.ttf'],
31
+ ['FontAwesome6Free-Regular', 'FontAwesome6_Regular.ttf'],
32
+ ['FontAwesome6Free-Solid', 'FontAwesome6_Solid.ttf'],
33
+ ['Ionicons', 'Ionicons.ttf'],
34
+ ]);
35
+ expect(React.isValidElement(element)).toBe(true);
36
+ if (!React.isValidElement(element)) {
37
+ throw new Error('expected a React element');
38
+ }
39
+ expect(element.props.children).toBe(child);
40
+ });
41
+
42
+ test('holds the app boundary while fonts are loading', () => {
43
+ useFonts.mockImplementationOnce(() => [false, null]);
44
+
45
+ expect(ExpoZoraIconFontProvider({ children: React.createElement('child') })).toBeNull();
46
+ });
47
+
48
+ test('surfaces font-loading failures', () => {
49
+ const error = new Error('font load failed');
50
+ useFonts.mockImplementationOnce(() => [false, error]);
51
+
52
+ expect(() => ExpoZoraIconFontProvider({ children: React.createElement('child') })).toThrow(
53
+ error,
54
+ );
55
+ });
56
+ });
@@ -0,0 +1,39 @@
1
+ import fontAwesome from '@react-native-vector-icons/fontawesome/fonts/FontAwesome.ttf';
2
+ import fontAwesome5Brands from '@react-native-vector-icons/fontawesome5/fonts/FontAwesome5_Brands.ttf';
3
+ import fontAwesome5Regular from '@react-native-vector-icons/fontawesome5/fonts/FontAwesome5_Regular.ttf';
4
+ import fontAwesome5Solid from '@react-native-vector-icons/fontawesome5/fonts/FontAwesome5_Solid.ttf';
5
+ import fontAwesome6Brands from '@react-native-vector-icons/fontawesome6/fonts/FontAwesome6_Brands.ttf';
6
+ import fontAwesome6Regular from '@react-native-vector-icons/fontawesome6/fonts/FontAwesome6_Regular.ttf';
7
+ import fontAwesome6Solid from '@react-native-vector-icons/fontawesome6/fonts/FontAwesome6_Solid.ttf';
8
+ import ionicons from '@react-native-vector-icons/ionicons/fonts/Ionicons.ttf';
9
+ import { useFonts } from 'expo-font';
10
+ import React from 'react';
11
+
12
+ const ZORA_ICON_FONTS = {
13
+ FontAwesome: fontAwesome,
14
+ 'FontAwesome5Brands-Regular': fontAwesome5Brands,
15
+ 'FontAwesome5Free-Regular': fontAwesome5Regular,
16
+ 'FontAwesome5Free-Solid': fontAwesome5Solid,
17
+ 'FontAwesome6Brands-Regular': fontAwesome6Brands,
18
+ 'FontAwesome6Free-Regular': fontAwesome6Regular,
19
+ 'FontAwesome6Free-Solid': fontAwesome6Solid,
20
+ Ionicons: ionicons,
21
+ } as const;
22
+
23
+ export interface ExpoZoraIconFontProviderProps {
24
+ readonly children: React.ReactNode;
25
+ }
26
+
27
+ export function ExpoZoraIconFontProvider(props: ExpoZoraIconFontProviderProps) {
28
+ const [loaded, error] = useFonts(ZORA_ICON_FONTS);
29
+
30
+ if (error) {
31
+ throw error;
32
+ }
33
+
34
+ if (!loaded) {
35
+ return null;
36
+ }
37
+
38
+ return <>{props.children}</>;
39
+ }
@@ -0,0 +1,4 @@
1
+ declare module '*.ttf' {
2
+ const source: number;
3
+ export default source;
4
+ }
package/src/index.ts CHANGED
@@ -34,6 +34,10 @@ export {
34
34
  } from './expoActionBridge';
35
35
  export { ExpoBarcodeScannerAdapter } from './ExpoBarcodeScannerAdapter';
36
36
  export { ExpoRuntimeProviders, type ExpoRuntimeProvidersProps } from './ExpoRuntimeProviders';
37
+ export {
38
+ ExpoZoraIconFontProvider,
39
+ type ExpoZoraIconFontProviderProps,
40
+ } from './ExpoZoraIconFontProvider';
37
41
  export {
38
42
  type ExpoRuntimeConfigPluginOutput,
39
43
  type ExpoRuntimeDependencyMap,
@@ -23,10 +23,10 @@ describe('EXPO_PLATFORM', () => {
23
23
  });
24
24
 
25
25
  test('keeps the Hermes fix, React Native and Node policy in one contract', () => {
26
- expect(EXPO_PLATFORM.runtime.expo).toEqual({ name: 'expo', version: '~57.0.15' });
26
+ expect(EXPO_PLATFORM.runtime.expo).toEqual({ name: 'expo', version: '57.0.17' });
27
27
  expect(EXPO_PLATFORM.runtime.reactNative).toEqual({
28
28
  name: 'react-native',
29
- version: '0.86.2',
29
+ version: '0.86.3',
30
30
  });
31
31
  expect(EXPO_PLATFORM.packages.crypto).toEqual({
32
32
  name: 'expo-crypto',
package/src/platform.ts CHANGED
@@ -18,10 +18,10 @@ export const EXPO_PLATFORM = {
18
18
  sdk: 57,
19
19
  architecture: 'new-architecture-only',
20
20
  runtime: {
21
- expo: definePackage('expo', '~57.0.15'),
21
+ expo: definePackage('expo', '57.0.17'),
22
22
  react: definePackage('react', '19.2.3'),
23
23
  reactDom: definePackage('react-dom', '19.2.3'),
24
- reactNative: definePackage('react-native', '0.86.2'),
24
+ reactNative: definePackage('react-native', '0.86.3'),
25
25
  reactNativeWeb: definePackage('react-native-web', '~0.21.0'),
26
26
  },
27
27
  tooling: {