Skip to content

Commit 86e0048

Browse files
authored
fix: bundler infinite loop when multiple uniwind instances are installed (#570)
fixes #353
1 parent 433cb71 commit 86e0048

1 file changed

Lines changed: 21 additions & 1 deletion

File tree

  • packages/uniwind/src/bundler/adapters/metro

packages/uniwind/src/bundler/adapters/metro/metro.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,20 @@ import { UniwindBundlerConfig } from '@/bundler/config'
22
import type { UniwindConfig } from '@/bundler/types'
33
import { Platform } from '@/common/consts'
44
import type { MetroConfig } from 'metro-config'
5+
import type { CustomResolver } from 'metro-resolver'
6+
import { join } from 'node:path'
57
import { cacheStore, patchMetroGraphToSupportUncachedModules } from './patches'
68
import { nativeResolver, webResolver } from './resolvers'
79

10+
const isUniwindRequest = (moduleName: string) => moduleName === 'uniwind' || moduleName.startsWith('uniwind/')
11+
812
export 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

Comments
 (0)