Skip to content

Commit 135f681

Browse files
committed
fix: don't add extensions if .native.ts etc. exist
1 parent 176444e commit 135f681

File tree

1 file changed

+22
-13
lines changed
  • packages/react-native-builder-bob/src

1 file changed

+22
-13
lines changed

packages/react-native-builder-bob/src/babel.ts

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,20 @@ const isDirectory = (filename: string): boolean => {
2626
return exists;
2727
};
2828

29+
const isModule = (filename: string, ext: string): boolean => {
30+
const exts = ['ts', 'tsx', ext];
31+
32+
// Metro won't resolve these extensions if explicit extension is provided
33+
// So we can't add extension to these files
34+
const additional = ['native', 'android', 'ios', 'web'];
35+
36+
return exts.some(
37+
(ext) =>
38+
isFile(`${filename}.${ext}`) &&
39+
additional.every((add) => !isFile(`${filename}.${add}.${ext}`))
40+
);
41+
};
42+
2943
const isTypeImport = (
3044
node: ImportDeclaration | ExportNamedDeclaration | ExportAllDeclaration
3145
) =>
@@ -110,27 +124,22 @@ export default function (
110124
node.source.value
111125
);
112126

113-
// Add extension if .ts file or file with extension exists
114-
if (
115-
isFile(`${filename}.ts`) ||
116-
isFile(`${filename}.tsx`) ||
117-
isFile(`${filename}.${extension}`)
118-
) {
119-
node.source.value += `.${extension}`;
127+
// Replace .ts extension with .js if file with extension is explicitly imported
128+
if (isFile(filename)) {
129+
node.source.value = node.source.value.replace(/\.tsx?$/, `.${extension}`);
120130
return;
121131
}
122132

123-
// Replace .ts extension with .js if .ts file exists
124-
if (isFile(filename)) {
125-
node.source.value = node.source.value.replace(/\.tsx?$/, `.${extension}`);
133+
// Add extension if .ts file or file with extension exists
134+
if (isModule(filename, extension)) {
135+
node.source.value += `.${extension}`;
126136
return;
127137
}
128138

139+
// Expand folder imports to index and add extension
129140
if (
130141
isDirectory(filename) &&
131-
(isFile(path.join(filename, 'index.ts')) ||
132-
isFile(path.join(filename, 'index.tsx')) ||
133-
isFile(path.join(filename, `index.${extension}`)))
142+
isModule(path.join(filename, 'index'), extension)
134143
) {
135144
node.source.value = node.source.value.replace(
136145
/\/?$/,

0 commit comments

Comments
 (0)