expo-image
Version:
A cross-platform, performant image component for React Native and Expo with Web support
41 lines (32 loc) • 1.13 kB
text/typescript
import { getAssetByID } from '@react-native/assets-registry/registry';
import AssetSourceResolver, { ResolvedAssetSource } from './AssetSourceResolver.web';
let _customSourceTransformer;
export function setCustomSourceTransformer(
transformer: (resolver: AssetSourceResolver) => ResolvedAssetSource
): void {
_customSourceTransformer = transformer;
}
/**
* `source` is either a number (opaque type returned by require('./foo.png'))
* or an `ImageSource` like { uri: '<http location || file path>' }
*/
export default function resolveAssetSource(source: any): ResolvedAssetSource | undefined {
if (typeof source === 'object') {
return source;
}
const asset = getAssetByID(source);
if (!asset) {
return undefined;
}
const resolver = new AssetSourceResolver('https://expo.dev', null, asset);
if (_customSourceTransformer) {
return _customSourceTransformer(resolver);
}
return resolver.defaultAsset();
}
Object.defineProperty(resolveAssetSource, 'setCustomSourceTransformer', {
get() {
return setCustomSourceTransformer;
},
});
export const { pickScale } = AssetSourceResolver;