File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -4,7 +4,6 @@ module.exports = function (api) {
44 return {
55 presets : [
66 [ 'module:@react-native/babel-preset' , { useTransformReactJSX : true } ] ,
7- 'react-native-harness/babel-preset' ,
87 ] ,
98 } ;
109} ;
Original file line number Diff line number Diff line change 1- import { rnHarnessPreset } from './preset' ;
1+ import { rnHarnessPreset , rnHarnessPlugins } from './preset' ;
22export default rnHarnessPreset ;
3+ export { rnHarnessPlugins } ;
Original file line number Diff line number Diff line change 11import resolveWeakPlugin from './resolve-weak-plugin' ;
22
3+ export const rnHarnessPlugins = [
4+ '@babel/plugin-transform-class-static-block' ,
5+ resolveWeakPlugin ,
6+ ] ;
7+
38export const rnHarnessPreset = ( ) => {
49 if ( ! process . env . RN_HARNESS ) {
510 return { } ;
611 }
712
813 return {
9- plugins : [ '@babel/plugin-transform-class-static-block' , resolveWeakPlugin ] ,
14+ plugins : rnHarnessPlugins ,
1015 } ;
1116} ;
Original file line number Diff line number Diff line change 1+ import type { BabelTransformer } from 'metro-babel-transformer' ;
2+ import { rnHarnessPlugins } from '@react-native-harness/babel-preset' ;
3+ import { MetroConfig } from '@react-native/metro-config' ;
4+
5+ export const getHarnessBabelTransformerPath = (
6+ metroConfig : MetroConfig
7+ ) : string => {
8+ const upstreamTransformerPath = metroConfig . transformer ?. babelTransformerPath ;
9+
10+ if ( ! upstreamTransformerPath || typeof upstreamTransformerPath !== 'string' ) {
11+ throw new Error ( 'Upstream transformer path is not a string' ) ;
12+ }
13+
14+ process . env . RN_HARNESS_UPSTREAM_TRANSFORMER_PATH = upstreamTransformerPath ;
15+ return require . resolve ( './babel-transformer.js' ) ;
16+ } ;
17+
18+ const transform : BabelTransformer [ 'transform' ] = ( args ) => {
19+ const { plugins } = args ;
20+ const upstreamTransformerPath =
21+ process . env . RN_HARNESS_UPSTREAM_TRANSFORMER_PATH ;
22+
23+ if ( ! upstreamTransformerPath || typeof upstreamTransformerPath !== 'string' ) {
24+ throw new Error ( 'Upstream transformer path is not a string' ) ;
25+ }
26+
27+ const upstreamTransformer = require ( upstreamTransformerPath ) ;
28+ const pluginsWithHarness = [
29+ // Checked against @babel /core's type definitions - plugins are an array of PluginItem
30+ ...( ( plugins as unknown [ ] ) ?? [ ] ) ,
31+ ...rnHarnessPlugins ,
32+ ] ;
33+
34+ return upstreamTransformer . transform ( {
35+ ...args ,
36+ plugins : pluginsWithHarness ,
37+ } ) ;
38+ } ;
39+
40+ export { transform } ;
Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ import { getConfig } from '@react-native-harness/config';
33import { patchModuleSystem } from './moduleSystem' ;
44import { getHarnessResolver } from './resolver' ;
55import { getHarnessManifest } from './manifest' ;
6+ import { getHarnessBabelTransformerPath } from './babel-transformer' ;
67
78export const withRnHarness = async (
89 config : MetroConfig | Promise < MetroConfig >
@@ -20,6 +21,8 @@ export const withRnHarness = async (
2021
2122 const harnessResolver = getHarnessResolver ( metroConfig , harnessConfig ) ;
2223 const harnessManifest = getHarnessManifest ( harnessConfig ) ;
24+ const harnessBabelTransformerPath =
25+ getHarnessBabelTransformerPath ( metroConfig ) ;
2326
2427 const patchedConfig : MetroConfig = {
2528 ...metroConfig ,
@@ -37,6 +40,10 @@ export const withRnHarness = async (
3740 blockList : undefined ,
3841 resolveRequest : harnessResolver ,
3942 } ,
43+ transformer : {
44+ ...metroConfig . transformer ,
45+ babelTransformerPath : harnessBabelTransformerPath ,
46+ } ,
4047 } ;
4148
4249 if ( harnessConfig . unstable__skipAlreadyIncludedModules ) {
Original file line number Diff line number Diff line change 33 "files" : [],
44 "include" : [],
55 "references" : [
6+ {
7+ "path" : " ../babel-preset"
8+ },
69 {
710 "path" : " ../config"
811 },
Original file line number Diff line number Diff line change 1111 },
1212 "include" : [" src/**/*.ts" ],
1313 "references" : [
14+ {
15+ "path" : " ../babel-preset/tsconfig.lib.json"
16+ },
1417 {
1518 "path" : " ../config/tsconfig.lib.json"
1619 },
You can’t perform that action at this time.
0 commit comments