1import { getAssetByID } from 'react-native/Libraries/Image/AssetRegistry'; 2 3import AssetSourceResolver, { ResolvedAssetSource } from './AssetSourceResolver.web'; 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('https://expo.dev', null, asset); 28 if (_customSourceTransformer) { 29 return _customSourceTransformer(resolver); 30 } 31 return resolver.defaultAsset(); 32} 33 34Object.defineProperty(resolveAssetSource, 'setCustomSourceTransformer', { 35 get() { 36 return setCustomSourceTransformer; 37 }, 38}); 39 40export const { pickScale } = AssetSourceResolver; 41