Skip to content

Commit cb34f90

Browse files
aduh95tjenkinson
authored andcommitted
fix(sucrase): allow js files for TypeScript resolutuon (#1019)
* fix(surcase): resolve specifier with extension TypeScript allows to use `.js` in the extension to resolve files that actually end with `.ts` or `.tsx`. This commit adds support for this. * fixup! fix(surcase): resolve specifier with extension * fixup! fix(surcase): resolve specifier with extension * fixup! fix(surcase): resolve specifier with extension * fixup! fix(surcase): resolve specifier with extension * fixup! fix(surcase): resolve specifier with extension * use resolved in both places * attempt to fix the failing test Co-authored-by: Tom Jenkinson <tjenkinson@users.noreply.github.com>
1 parent 2adfd37 commit cb34f90

File tree

14 files changed

+60
-8
lines changed

14 files changed

+60
-8
lines changed

β€Žpackages/sucrase/src/index.jsβ€Ž

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,21 @@ module.exports = function sucrase(opts = {}) {
1515
if (importer && /^[./]/.test(importee)) {
1616
const resolved = path.resolve(importer ? path.dirname(importer) : process.cwd(), importee);
1717
// resolve in the same order that TypeScript resolves modules
18-
const resolvedFilename = [
18+
const resolvedFilenames = [
1919
`${resolved}.ts`,
2020
`${resolved}.tsx`,
2121
`${resolved}/index.ts`,
2222
`${resolved}/index.tsx`
23-
].find((filename) => fs.existsSync(filename));
23+
];
24+
if (resolved.endsWith('.js')) {
25+
resolvedFilenames.splice(
26+
2,
27+
0,
28+
`${resolved.slice(0, -3)}.ts`,
29+
`${resolved.slice(0, -3)}.tsx`
30+
);
31+
}
32+
const resolvedFilename = resolvedFilenames.find((filename) => fs.existsSync(filename));
2433

2534
if (resolvedFilename) {
2635
return resolvedFilename;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
/* eslint-disable import/extensions, import/no-unresolved */
2-
import example from '~src/index.ts';
2+
import example from '~src';
33

44
t.snapshot(example.toString());
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default () => <div id="foo">hello world</div>;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default () => <div id="foo">hello world</div>;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default () => <div id="foo">hello world</div>;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
1+
/* eslint-disable import/extensions */
12
import dirImport from './example-a';
23
import fileImport from './example-b';
4+
import fileImportWithExtension from './example-c.js';
5+
import dirImportWithExtension from './example-d.js';
6+
import fileWithDoubleExtension from './example-e.js';
37

48
t.snapshot(dirImport.toString());
59
t.snapshot(fileImport.toString());
10+
t.snapshot(fileImportWithExtension.toString());
11+
t.snapshot(dirImportWithExtension.toString());
12+
t.snapshot(fileWithDoubleExtension.toString());
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default (a: number, b: number): number => a * b;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default (a: number, b: number): number => a * b;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default (a: number, b: number): number => a * b;

0 commit comments

Comments
Β (0)