Skip to content

Commit ff1f7b1

Browse files
authored
Esm imports of cjs files should unconditionally have a default patched on (#48062)
1 parent ed45f05 commit ff1f7b1

File tree

35 files changed

+565
-346
lines changed

35 files changed

+565
-346
lines changed

src/compiler/checker.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -3687,12 +3687,18 @@ namespace ts {
36873687
return cloneTypeAsModuleType(symbol, defaultOnlyType, referenceParent);
36883688
}
36893689

3690-
if (getESModuleInterop(compilerOptions)) {
3690+
const targetFile = moduleSymbol?.declarations?.find(isSourceFile);
3691+
const isEsmCjsRef = targetFile && isESMFormatImportImportingCommonjsFormatFile(getUsageModeForExpression(reference), targetFile.impliedNodeFormat);
3692+
if (getESModuleInterop(compilerOptions) || isEsmCjsRef) {
36913693
let sigs = getSignaturesOfStructuredType(type, SignatureKind.Call);
36923694
if (!sigs || !sigs.length) {
36933695
sigs = getSignaturesOfStructuredType(type, SignatureKind.Construct);
36943696
}
3695-
if ((sigs && sigs.length) || getPropertyOfType(type, InternalSymbolName.Default, /*skipObjectFunctionPropertyAugment*/ true)) {
3697+
if (
3698+
(sigs && sigs.length) ||
3699+
getPropertyOfType(type, InternalSymbolName.Default, /*skipObjectFunctionPropertyAugment*/ true) ||
3700+
isEsmCjsRef
3701+
) {
36963702
const moduleType = getTypeWithSyntheticDefaultImportType(type, symbol, moduleSymbol!, reference);
36973703
return cloneTypeAsModuleType(symbol, moduleType, referenceParent);
36983704
}

tests/baselines/reference/nodeModules1(module=node12).types

+24-24
Original file line numberDiff line numberDiff line change
@@ -250,22 +250,22 @@ import m25 = require("./index");
250250
>m25 : typeof m1
251251

252252
import m26 = require("./subfolder");
253-
>m26 : typeof m4
253+
>m26 : typeof m26
254254

255255
import m27 = require("./subfolder/");
256-
>m27 : typeof m4
256+
>m27 : typeof m26
257257

258258
import m28 = require("./subfolder/index");
259-
>m28 : typeof m4
259+
>m28 : typeof m26
260260

261261
import m29 = require("./subfolder2");
262-
>m29 : typeof m7
262+
>m29 : typeof m29
263263

264264
import m30 = require("./subfolder2/");
265-
>m30 : typeof m7
265+
>m30 : typeof m29
266266

267267
import m31 = require("./subfolder2/index");
268-
>m31 : typeof m7
268+
>m31 : typeof m29
269269

270270
import m32 = require("./subfolder2/another");
271271
>m32 : typeof m10
@@ -286,27 +286,27 @@ void m25;
286286

287287
void m26;
288288
>void m26 : undefined
289-
>m26 : typeof m4
289+
>m26 : typeof m26
290290

291291
void m27;
292292
>void m27 : undefined
293-
>m27 : typeof m4
293+
>m27 : typeof m26
294294

295295
void m28;
296296
>void m28 : undefined
297-
>m28 : typeof m4
297+
>m28 : typeof m26
298298

299299
void m29;
300300
>void m29 : undefined
301-
>m29 : typeof m7
301+
>m29 : typeof m29
302302

303303
void m30;
304304
>void m30 : undefined
305-
>m30 : typeof m7
305+
>m30 : typeof m29
306306

307307
void m31;
308308
>void m31 : undefined
309-
>m31 : typeof m7
309+
>m31 : typeof m29
310310

311311
void m32;
312312
>void m32 : undefined
@@ -861,22 +861,22 @@ import m25 = require("./index");
861861
>m25 : typeof m1
862862

863863
import m26 = require("./subfolder");
864-
>m26 : typeof m4
864+
>m26 : typeof m26
865865

866866
import m27 = require("./subfolder/");
867-
>m27 : typeof m4
867+
>m27 : typeof m26
868868

869869
import m28 = require("./subfolder/index");
870-
>m28 : typeof m4
870+
>m28 : typeof m26
871871

872872
import m29 = require("./subfolder2");
873-
>m29 : typeof m7
873+
>m29 : typeof m29
874874

875875
import m30 = require("./subfolder2/");
876-
>m30 : typeof m7
876+
>m30 : typeof m29
877877

878878
import m31 = require("./subfolder2/index");
879-
>m31 : typeof m7
879+
>m31 : typeof m29
880880

881881
import m32 = require("./subfolder2/another");
882882
>m32 : typeof m10
@@ -897,27 +897,27 @@ void m25;
897897

898898
void m26;
899899
>void m26 : undefined
900-
>m26 : typeof m4
900+
>m26 : typeof m26
901901

902902
void m27;
903903
>void m27 : undefined
904-
>m27 : typeof m4
904+
>m27 : typeof m26
905905

906906
void m28;
907907
>void m28 : undefined
908-
>m28 : typeof m4
908+
>m28 : typeof m26
909909

910910
void m29;
911911
>void m29 : undefined
912-
>m29 : typeof m7
912+
>m29 : typeof m29
913913

914914
void m30;
915915
>void m30 : undefined
916-
>m30 : typeof m7
916+
>m30 : typeof m29
917917

918918
void m31;
919919
>void m31 : undefined
920-
>m31 : typeof m7
920+
>m31 : typeof m29
921921

922922
void m32;
923923
>void m32 : undefined

tests/baselines/reference/nodeModules1(module=nodenext).types

+24-24
Original file line numberDiff line numberDiff line change
@@ -250,22 +250,22 @@ import m25 = require("./index");
250250
>m25 : typeof m1
251251

252252
import m26 = require("./subfolder");
253-
>m26 : typeof m4
253+
>m26 : typeof m26
254254

255255
import m27 = require("./subfolder/");
256-
>m27 : typeof m4
256+
>m27 : typeof m26
257257

258258
import m28 = require("./subfolder/index");
259-
>m28 : typeof m4
259+
>m28 : typeof m26
260260

261261
import m29 = require("./subfolder2");
262-
>m29 : typeof m7
262+
>m29 : typeof m29
263263

264264
import m30 = require("./subfolder2/");
265-
>m30 : typeof m7
265+
>m30 : typeof m29
266266

267267
import m31 = require("./subfolder2/index");
268-
>m31 : typeof m7
268+
>m31 : typeof m29
269269

270270
import m32 = require("./subfolder2/another");
271271
>m32 : typeof m10
@@ -286,27 +286,27 @@ void m25;
286286

287287
void m26;
288288
>void m26 : undefined
289-
>m26 : typeof m4
289+
>m26 : typeof m26
290290

291291
void m27;
292292
>void m27 : undefined
293-
>m27 : typeof m4
293+
>m27 : typeof m26
294294

295295
void m28;
296296
>void m28 : undefined
297-
>m28 : typeof m4
297+
>m28 : typeof m26
298298

299299
void m29;
300300
>void m29 : undefined
301-
>m29 : typeof m7
301+
>m29 : typeof m29
302302

303303
void m30;
304304
>void m30 : undefined
305-
>m30 : typeof m7
305+
>m30 : typeof m29
306306

307307
void m31;
308308
>void m31 : undefined
309-
>m31 : typeof m7
309+
>m31 : typeof m29
310310

311311
void m32;
312312
>void m32 : undefined
@@ -861,22 +861,22 @@ import m25 = require("./index");
861861
>m25 : typeof m1
862862

863863
import m26 = require("./subfolder");
864-
>m26 : typeof m4
864+
>m26 : typeof m26
865865

866866
import m27 = require("./subfolder/");
867-
>m27 : typeof m4
867+
>m27 : typeof m26
868868

869869
import m28 = require("./subfolder/index");
870-
>m28 : typeof m4
870+
>m28 : typeof m26
871871

872872
import m29 = require("./subfolder2");
873-
>m29 : typeof m7
873+
>m29 : typeof m29
874874

875875
import m30 = require("./subfolder2/");
876-
>m30 : typeof m7
876+
>m30 : typeof m29
877877

878878
import m31 = require("./subfolder2/index");
879-
>m31 : typeof m7
879+
>m31 : typeof m29
880880

881881
import m32 = require("./subfolder2/another");
882882
>m32 : typeof m10
@@ -897,27 +897,27 @@ void m25;
897897

898898
void m26;
899899
>void m26 : undefined
900-
>m26 : typeof m4
900+
>m26 : typeof m26
901901

902902
void m27;
903903
>void m27 : undefined
904-
>m27 : typeof m4
904+
>m27 : typeof m26
905905

906906
void m28;
907907
>void m28 : undefined
908-
>m28 : typeof m4
908+
>m28 : typeof m26
909909

910910
void m29;
911911
>void m29 : undefined
912-
>m29 : typeof m7
912+
>m29 : typeof m29
913913

914914
void m30;
915915
>void m30 : undefined
916-
>m30 : typeof m7
916+
>m30 : typeof m29
917917

918918
void m31;
919919
>void m31 : undefined
920-
>m31 : typeof m7
920+
>m31 : typeof m29
921921

922922
void m32;
923923
>void m32 : undefined

tests/baselines/reference/nodeModulesAllowJs1(module=node12).types

+24-24
Original file line numberDiff line numberDiff line change
@@ -250,22 +250,22 @@ import m25 = require("./index");
250250
>m25 : typeof m1
251251

252252
import m26 = require("./subfolder");
253-
>m26 : typeof m4
253+
>m26 : typeof m26
254254

255255
import m27 = require("./subfolder/");
256-
>m27 : typeof m4
256+
>m27 : typeof m26
257257

258258
import m28 = require("./subfolder/index");
259-
>m28 : typeof m4
259+
>m28 : typeof m26
260260

261261
import m29 = require("./subfolder2");
262-
>m29 : typeof m7
262+
>m29 : typeof m29
263263

264264
import m30 = require("./subfolder2/");
265-
>m30 : typeof m7
265+
>m30 : typeof m29
266266

267267
import m31 = require("./subfolder2/index");
268-
>m31 : typeof m7
268+
>m31 : typeof m29
269269

270270
import m32 = require("./subfolder2/another");
271271
>m32 : typeof m10
@@ -286,27 +286,27 @@ void m25;
286286

287287
void m26;
288288
>void m26 : undefined
289-
>m26 : typeof m4
289+
>m26 : typeof m26
290290

291291
void m27;
292292
>void m27 : undefined
293-
>m27 : typeof m4
293+
>m27 : typeof m26
294294

295295
void m28;
296296
>void m28 : undefined
297-
>m28 : typeof m4
297+
>m28 : typeof m26
298298

299299
void m29;
300300
>void m29 : undefined
301-
>m29 : typeof m7
301+
>m29 : typeof m29
302302

303303
void m30;
304304
>void m30 : undefined
305-
>m30 : typeof m7
305+
>m30 : typeof m29
306306

307307
void m31;
308308
>void m31 : undefined
309-
>m31 : typeof m7
309+
>m31 : typeof m29
310310

311311
void m32;
312312
>void m32 : undefined
@@ -861,22 +861,22 @@ import m25 = require("./index");
861861
>m25 : typeof m1
862862

863863
import m26 = require("./subfolder");
864-
>m26 : typeof m4
864+
>m26 : typeof m26
865865

866866
import m27 = require("./subfolder/");
867-
>m27 : typeof m4
867+
>m27 : typeof m26
868868

869869
import m28 = require("./subfolder/index");
870-
>m28 : typeof m4
870+
>m28 : typeof m26
871871

872872
import m29 = require("./subfolder2");
873-
>m29 : typeof m7
873+
>m29 : typeof m29
874874

875875
import m30 = require("./subfolder2/");
876-
>m30 : typeof m7
876+
>m30 : typeof m29
877877

878878
import m31 = require("./subfolder2/index");
879-
>m31 : typeof m7
879+
>m31 : typeof m29
880880

881881
import m32 = require("./subfolder2/another");
882882
>m32 : typeof m10
@@ -897,27 +897,27 @@ void m25;
897897

898898
void m26;
899899
>void m26 : undefined
900-
>m26 : typeof m4
900+
>m26 : typeof m26
901901

902902
void m27;
903903
>void m27 : undefined
904-
>m27 : typeof m4
904+
>m27 : typeof m26
905905

906906
void m28;
907907
>void m28 : undefined
908-
>m28 : typeof m4
908+
>m28 : typeof m26
909909

910910
void m29;
911911
>void m29 : undefined
912-
>m29 : typeof m7
912+
>m29 : typeof m29
913913

914914
void m30;
915915
>void m30 : undefined
916-
>m30 : typeof m7
916+
>m30 : typeof m29
917917

918918
void m31;
919919
>void m31 : undefined
920-
>m31 : typeof m7
920+
>m31 : typeof m29
921921

922922
void m32;
923923
>void m32 : undefined

0 commit comments

Comments
 (0)