1import { getAssetByID } from 'react-native/Libraries/Image/AssetRegistry'; 2 3import AssetSourceResolver, { ResolvedAssetSource } from './AssetSourceResolver'; 4 5let _customSourceTransformer; 6 7export function setCustomSourceTransformer( 8 transformer: (resolver: AssetSourceResolver) => ResolvedAssetSource 9): void { 10 _customSourceTransformer = transformer; 11} 12 13/** 14 * `source` is either a number (opaque type returned by require('./foo.png')) 15 * or an `ImageSource` like { uri: '<http location || file path>' } 16 */ 17export default function resolveAssetSource(source: any): ResolvedAssetSource | undefined { 18 if (typeof source === 'object') { 19 return source; 20 } 21 22 const asset = getAssetByID(source); 23 if (!asset) { 24 return undefined; 25 } 26 27 const resolver = new AssetSourceResolver( 28 // Doesn't matter since this is removed on web 29 'https://expo.dev', 30 null, 31 asset 32 ); 33 if (_customSourceTransformer) { 34 return _customSourceTransformer(resolver); 35 } 36 return resolver.defaultAsset(); 37} 38 39Object.defineProperty(resolveAssetSource, 'setCustomSourceTransformer', { 40 get() { 41 return setCustomSourceTransformer; 42 }, 43}); 44 45export const { pickScale } = AssetSourceResolver; 46