@@ -5,51 +5,54 @@ import { getHarnessResolver } from './resolver';
55import { getHarnessManifest } from './manifest' ;
66import { getHarnessBabelTransformerPath } from './babel-transformer' ;
77
8- export const withRnHarness = async (
8+ export const withRnHarness = (
99 config : MetroConfig | Promise < MetroConfig >
10- ) : Promise < MetroConfig > => {
11- const isEnabled = ! ! process . env . RN_HARNESS ;
12-
13- if ( ! isEnabled ) {
14- return config ;
15- }
16-
17- const metroConfig = await config ;
18- const { config : harnessConfig } = await getConfig ( process . cwd ( ) ) ;
19-
20- patchModuleSystem ( ) ;
21-
22- const harnessResolver = getHarnessResolver ( metroConfig , harnessConfig ) ;
23- const harnessManifest = getHarnessManifest ( harnessConfig ) ;
24- const harnessBabelTransformerPath =
25- getHarnessBabelTransformerPath ( metroConfig ) ;
26-
27- const patchedConfig : MetroConfig = {
28- ...metroConfig ,
29- cacheVersion : 'react-native-harness' ,
30- serializer : {
31- ...metroConfig . serializer ,
32- getPolyfills : ( ...args ) => [
33- ...( metroConfig . serializer ?. getPolyfills ?.( ...args ) ?? [ ] ) ,
34- harnessManifest ,
35- ] ,
36- } ,
37- resolver : {
38- ...metroConfig . resolver ,
39- // Unlock __tests__ directory
40- blockList : undefined ,
41- resolveRequest : harnessResolver ,
42- } ,
43- transformer : {
44- ...metroConfig . transformer ,
45- babelTransformerPath : harnessBabelTransformerPath ,
46- } ,
10+ ) : ( ( ) => Promise < MetroConfig > ) => {
11+ // This is a workaround for a regression in Metro 0.83, when promises are not handled correctly.
12+ return async ( ) => {
13+ const isEnabled = ! ! process . env . RN_HARNESS ;
14+
15+ if ( ! isEnabled ) {
16+ return config ;
17+ }
18+
19+ const metroConfig = await config ;
20+ const { config : harnessConfig } = await getConfig ( process . cwd ( ) ) ;
21+
22+ patchModuleSystem ( ) ;
23+
24+ const harnessResolver = getHarnessResolver ( metroConfig , harnessConfig ) ;
25+ const harnessManifest = getHarnessManifest ( harnessConfig ) ;
26+ const harnessBabelTransformerPath =
27+ getHarnessBabelTransformerPath ( metroConfig ) ;
28+
29+ const patchedConfig : MetroConfig = {
30+ ...metroConfig ,
31+ cacheVersion : 'react-native-harness' ,
32+ serializer : {
33+ ...metroConfig . serializer ,
34+ getPolyfills : ( ...args ) => [
35+ ...( metroConfig . serializer ?. getPolyfills ?.( ...args ) ?? [ ] ) ,
36+ harnessManifest ,
37+ ] ,
38+ } ,
39+ resolver : {
40+ ...metroConfig . resolver ,
41+ // Unlock __tests__ directory
42+ blockList : undefined ,
43+ resolveRequest : harnessResolver ,
44+ } ,
45+ transformer : {
46+ ...metroConfig . transformer ,
47+ babelTransformerPath : harnessBabelTransformerPath ,
48+ } ,
49+ } ;
50+
51+ if ( harnessConfig . unstable__skipAlreadyIncludedModules ) {
52+ patchedConfig . serializer ! . customSerializer =
53+ require ( './getHarnessSerializer' ) . getHarnessSerializer ( ) ;
54+ }
55+
56+ return patchedConfig ;
4757 } ;
48-
49- if ( harnessConfig . unstable__skipAlreadyIncludedModules ) {
50- patchedConfig . serializer ! . customSerializer =
51- require ( './getHarnessSerializer' ) . getHarnessSerializer ( ) ;
52- }
53-
54- return patchedConfig ;
5558} ;
0 commit comments