Skip to content

Commit 5bbe964

Browse files
module: fix extensionless typescript in cjs loader
1 parent 2d1b4a8 commit 5bbe964

File tree

2 files changed

+12
-12
lines changed

2 files changed

+12
-12
lines changed

lib/internal/modules/cjs/loader.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -653,9 +653,13 @@ function getDefaultExtensions() {
653653
let extensions = ObjectKeys(Module._extensions);
654654
const tsEnabled = getOptionValue('--experimental-strip-types');
655655
if (tsEnabled) {
656+
// remove .ts and .cts from the default extensions
657+
// to avoid extensionless requires .ts and .cts files.
658+
// it behaves similarly to how .mjs is handled when --experimental-require-module
659+
// is enabled.
656660
extensions = ArrayPrototypeFilter(extensions, (ext) =>
657-
ext !== '.ts' || Module._extensions['.ts'] !== loadTS ||
658-
ext !== '.cts' || Module._extensions['.ts'] !== loadCTS,
661+
(ext !== '.ts' || Module._extensions['.ts'] !== loadTS) &&
662+
(ext !== '.cts' || Module._extensions['.ts'] !== loadCTS),
659663
);
660664
}
661665

test/es-module/test-typescript-commonjs.mjs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ test('require a .ts file with explicit extension succeeds', async () => {
1818
strictEqual(result.code, 0);
1919
});
2020

21-
// TODO(marco-ippolito) This test should fail because extensionless require
22-
// but it's behaving like a .js file
2321
test('eval require a .ts file with implicit extension fails', async () => {
2422
const result = await spawnPromisified(process.execPath, [
2523
'--experimental-strip-types',
@@ -30,23 +28,21 @@ test('eval require a .ts file with implicit extension fails', async () => {
3028
cwd: fixtures.path('typescript/ts'),
3129
});
3230

33-
strictEqual(result.stderr, '');
34-
match(result.stdout, /Hello, TypeScript!/);
35-
strictEqual(result.code, 0);
31+
strictEqual(result.stdout, '');
32+
match(result.stderr, /Error: Cannot find module/);
33+
strictEqual(result.code, 1);
3634
});
3735

38-
// TODO(marco-ippolito) This test should fail because extensionless require
39-
// but it's behaving like a .js file
4036
test('require a .ts file with implicit extension fails', async () => {
4137
const result = await spawnPromisified(process.execPath, [
4238
'--experimental-strip-types',
4339
'--no-warnings',
4440
fixtures.path('typescript/cts/test-extensionless-require.ts'),
4541
]);
4642

47-
strictEqual(result.stderr, '');
48-
match(result.stdout, /Hello, TypeScript!/);
49-
strictEqual(result.code, 0);
43+
strictEqual(result.stdout, '');
44+
match(result.stderr, /Error: Cannot find module/);
45+
strictEqual(result.code, 1);
5046
});
5147

5248
test('expect failure of an .mts file with CommonJS syntax', async () => {

0 commit comments

Comments
 (0)