-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathassetsResolver.ts
More file actions
47 lines (37 loc) · 1.69 KB
/
assetsResolver.ts
File metadata and controls
47 lines (37 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import { Image, Platform } from 'react-native'
import type { ImageResolvedAssetSource } from 'react-native'
import type { MainAssets } from '../shared/types'
// See https://github.com/facebook/react-native/blob/v0.71.7/Libraries/Image/AssetSourceResolver.js#L53
interface AssetSourceResolver {
asset: ImageResolvedAssetSource & {
mainBundleAssets?: MainAssets
}
defaultAsset(): ImageResolvedAssetSource
}
type AssetTransformer = (resolver: AssetSourceResolver) => ImageResolvedAssetSource
const makeMainBundleUri = (mainBundlePath: string, mainBundleAsset: string) => {
return Platform.OS === 'ios' ? `file://${mainBundlePath}/${mainBundleAsset}` : mainBundleAsset
}
const codePushTransformer =
(mainBundlePath: string): AssetTransformer =>
(resolver) => {
const defaultAsset = resolver.defaultAsset()
const mainBundleAsset = resolver.asset?.mainBundleAssets?.[defaultAsset.scale]
if (mainBundleAsset) {
return {
...defaultAsset,
uri: makeMainBundleUri(mainBundlePath, mainBundleAsset),
}
}
return defaultAsset
}
type SetSourceTransformer = (transformer: AssetTransformer) => void
const setCustomSourceTransformer: SetSourceTransformer =
// See https://github.com/facebook/react-native/blob/v0.71.7/Libraries/Image/resolveAssetSource.js#L77
// @ts-expect-error
Image.resolveAssetSource.addCustomSourceTransformer || Image.resolveAssetSource.setCustomSourceTransformer
if (__DEV__ && typeof setCustomSourceTransformer !== 'function') {
throw new Error('There is no setCustomSourceTransformer function')
}
export const setupCustomSourceTransformer = (mainBundlePath: string) =>
setCustomSourceTransformer(codePushTransformer(mainBundlePath))