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