@@ -2,14 +2,20 @@ import { UniwindBundlerConfig } from '@/bundler/config'
22import type { UniwindConfig } from '@/bundler/types'
33import { Platform } from '@/common/consts'
44import type { MetroConfig } from 'metro-config'
5+ import type { CustomResolver } from 'metro-resolver'
6+ import { join } from 'node:path'
57import { cacheStore , patchMetroGraphToSupportUncachedModules } from './patches'
68import { nativeResolver , webResolver } from './resolvers'
79
10+ const isUniwindRequest = ( moduleName : string ) => moduleName === 'uniwind' || moduleName . startsWith ( 'uniwind/' )
11+
812export const withUniwindConfig = < T extends MetroConfig > (
913 config : T ,
1014 uniwindConfig : UniwindConfig ,
1115) : T => {
1216 const bundlerConfig = UniwindBundlerConfig . fromMetroConfig ( uniwindConfig )
17+ const pinnedUniwindOrigin = join ( config . projectRoot ?? process . cwd ( ) , 'package.json' )
18+
1319 patchMetroGraphToSupportUncachedModules ( )
1420
1521 return {
@@ -30,7 +36,21 @@ export const withUniwindConfig = <T extends MetroConfig>(
3036 ext => ext !== 'css' ,
3137 ) ,
3238 resolveRequest : ( context , moduleName , platform ) => {
33- const resolver = config . resolver ?. resolveRequest ?? context . resolveRequest
39+ const baseResolver = config . resolver ?. resolveRequest ?? context . resolveRequest
40+ const resolver : CustomResolver = ( nextContext , nextModuleName , nextPlatform ) => {
41+ if ( isUniwindRequest ( nextModuleName ) ) {
42+ return baseResolver (
43+ {
44+ ...nextContext ,
45+ originModulePath : pinnedUniwindOrigin ,
46+ } ,
47+ nextModuleName ,
48+ nextPlatform ,
49+ )
50+ }
51+
52+ return baseResolver ( nextContext , nextModuleName , nextPlatform )
53+ }
3454 const platformResolver = platform === Platform . Web ? webResolver : nativeResolver
3555 const resolved = platformResolver ( {
3656 context,
0 commit comments