Skip to content

Commit 16d6d11

Browse files
authored
feat: return async function as config (#21)
1 parent 9c737cc commit 16d6d11

File tree

1 file changed

+48
-45
lines changed

1 file changed

+48
-45
lines changed

packages/metro/src/withRnHarness.ts

Lines changed: 48 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,51 +5,54 @@ import { getHarnessResolver } from './resolver';
55
import { getHarnessManifest } from './manifest';
66
import { 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

Comments
 (0)