diff --git a/lib/assets/src/index.ts b/lib/assets/src/index.ts index bd6cd12..a4b9adb 100644 --- a/lib/assets/src/index.ts +++ b/lib/assets/src/index.ts @@ -15,6 +15,9 @@ export { AssetsRegistryModuleId, } from './preinit' +// Resolve reference once and keep in closure +const metroRequire = __r + // iOS cannot display SVGs let _preferredType: Asset['type'] = Platform.OS === 'ios' ? 'png' : 'svg' /** @@ -47,7 +50,7 @@ export function* getCustomAssets(): Generator { export function* getPackagerAssets(): Generator { for (const reg of Object.values(cache)) for (const moduleId of Object.values(reg)) - yield AssetsRegistry.getAssetByID(__r(moduleId)) + yield AssetsRegistry.getAssetByID(metroRequire(moduleId)) } /** @@ -79,7 +82,9 @@ export function getAssetsByName( return Object.entries(reg).reduce( (acc, [type, mid]) => { - acc[type as Asset['type']] = AssetsRegistry.getAssetByID(__r(mid))! + acc[type as Asset['type']] = AssetsRegistry.getAssetByID( + metroRequire(mid), + )! return acc }, {} as Record, @@ -106,13 +111,13 @@ export function getAssetIdByName( if (type !== undefined) { const mid = reg[type] - return mid && __r(mid) + return mid && metroRequire(mid) } let mid = reg[_preferredType] mid ??= Object.values(reg)[0] - return mid && __r(mid) + return mid && metroRequire(mid) } /** diff --git a/lib/assets/src/preinit.ts b/lib/assets/src/preinit.ts index 83ff56f..4a5a7ff 100644 --- a/lib/assets/src/preinit.ts +++ b/lib/assets/src/preinit.ts @@ -55,6 +55,9 @@ const unsubAR = waitForModules( // TODO(lib/assets/caches): Ideally we should not wait for the cache promise here, see the promise impl for more info. cached.then(cached => { if (!cached) { + // Resolve reference once and keep in closure + const metroRequire = __r + // More fragile way, but also more performant: // There is exactly one asset before the reexported asset registry :/ const firstAssetModuleId = id - 1 @@ -62,7 +65,8 @@ const unsubAR = waitForModules( if (mId < firstAssetModuleId) continue const deps = getModuleDependencies(mId)! - if (deps.length === 1 && deps[0] === id) __r(mId) + if (deps.length === 1 && deps[0] === id) + metroRequire(mId) } } })