@@ -34,30 +34,113 @@ async function installTs() {
3434}
3535
3636async function runTests ( ) {
37- const compilerOptions = {
38- declaration : false ,
39- importHelpers : false ,
40- sourceMap : false ,
41- pretty : false ,
42- removeComments : false ,
43- allowJs : false ,
44- outDir : __dirname + '/../test/types/tmp' ,
45- typeRoots : [ __dirname + '/../types/dist' ] ,
46- rootDir : __dirname + '/../test/types' ,
47-
48- // Must pass in most strict cases
49- strict : true
50- } ;
51- const testsList = await globby ( __dirname + '/../test/types/*.ts' ) ;
37+ const casesESM = await globby ( __dirname + '/../test/types/esm/*.ts' ) ;
38+ const casesCJS = await globby ( __dirname + '/../test/types/cjs/*.ts' ) ;
39+ const casesNoModule = await globby ( __dirname + '/../test/types/no-module/*.ts' ) ;
5240
5341 const tsVersions = getTypeScriptVersions ( ) ;
42+
43+ function createCompilerOptions ( overrideOptions ) {
44+ return {
45+ declaration : false ,
46+ importHelpers : false ,
47+ sourceMap : false ,
48+ pretty : false ,
49+ removeComments : false ,
50+ allowJs : false ,
51+ rootDir : __dirname + '/../test/types' ,
52+ outDir : __dirname + '/../test/types/tmp' ,
53+ // Disable global types, necessary to avoid other
54+ // irrelevant node_modules types interference.
55+ typeRoots : [ ] ,
56+ // Must pass in most strict cases
57+ strict : true ,
58+ ...overrideOptions
59+ } ;
60+ } ;
61+
62+ async function singleTest ( ts , tsVersion , tsconfigModule , tsconfigModuleResolution , testList ) {
63+ if ( ! isSupportedTSConfigModuleField ( ts , tsconfigModule ) ) {
64+ console . log ( `Skip: tsVersion: ${ tsVersion } does not support {"module": "${ tsconfigModule } "}.` ) ;
65+ return ;
66+ }
67+ if ( ! isSupportedTSConfigModuleResolutionField ( ts , tsVersion , tsconfigModuleResolution ) ) {
68+ console . log ( `Skip: tsVersion: ${ tsVersion } does not support {"moduleResolution": "${ tsconfigModuleResolution } "}.` ) ;
69+ return ;
70+ }
71+
72+ console . log ( `Testing: tsVersion: ${ tsVersion } , tsconfig: {"module": "${ tsconfigModule } ", "moduleResolution": "${ tsconfigModuleResolution } "}` ) ;
73+ await runTsCompile ( ts , createCompilerOptions ( {
74+ // noEmit: true,
75+ module : tsconfigModule ,
76+ moduleResolution : tsconfigModuleResolution ,
77+ } ) , testList ) ;
78+ }
79+
5480 for ( const version of tsVersions ) {
55- console . log ( `Testing ts version ${ version } ` ) ;
5681 const ts = require ( typeScriptPath ( version ) ) ;
57- await runTsCompile ( ts , compilerOptions , testsList ) ;
5882
59- console . log ( `Finished test of ts version ${ version } ` ) ;
83+ // console.log(ts.ModuleKind);
84+ // console.log(ts.ModuleResolutionKind);
85+
86+ // await singleTest(ts, version, undefined , undefined, casesESM);
87+ // await singleTest(ts, version, 'None', 'classic', casesNoModule);
88+ // await singleTest(ts, version, 'CommonJS', 'node', casesESM);
89+ // await singleTest(ts, version, 'CommonJS', 'node', casesCJS);
90+ // await singleTest(ts, version, 'ESNext', 'node', casesESM);
91+ // await singleTest(ts, version, 'ESNext', 'Bundler', casesESM);
92+ await singleTest ( ts , version , 'NodeNext' , 'NodeNext' , casesESM ) ;
93+ // await singleTest(ts, version, 'NodeNext', 'NodeNext', casesCJS);
94+
95+ console . log ( `Finished test of tsVersion ${ version } ` ) ;
96+ }
97+ }
98+
99+ function isSupportedTSConfigModuleField ( ts , moduleName ) {
100+ if ( moduleName === undefined ) {
101+ return true ;
102+ }
103+ const map = {
104+ 'none' : 'None' ,
105+ 'commonjs' : 'CommonJS' ,
106+ 'amd' : 'AMD' ,
107+ 'umd' : 'UMD' ,
108+ 'system' : 'System' ,
109+ 'es6' : 'ES2015' ,
110+ 'es2015' : 'ES2015' ,
111+ 'es2020' : 'ES2020' ,
112+ 'es2022' : 'ES2022' ,
113+ 'esnext' : 'ESNext' ,
114+ 'node16' : 'Node16' ,
115+ 'nodenext' : 'NodeNext' ,
116+ } ;
117+ const enumKey = map [ moduleName . toLowerCase ( ) ] ;
118+ return enumKey != null && ts . ModuleKind [ enumKey ] != null ;
119+ }
120+
121+ function isSupportedTSConfigModuleResolutionField ( ts , tsVersion , moduleResolutionName ) {
122+ if ( moduleResolutionName === undefined ) {
123+ return true ;
60124 }
125+ const map = {
126+ 'classic' : 'Classic' ,
127+ 'node' : 'NodeJs' ,
128+ // 'nodejs': 'NodeJs', // Older TS do not support value "nodejs".
129+ 'node10' : 'Node10' ,
130+ 'node16' : 'Node16' ,
131+ 'nodenext' : 'NodeNext' ,
132+ 'bundler' : 'Bundler' ,
133+ } ;
134+ const enumKey = map [ moduleResolutionName . toLowerCase ( ) ] ;
135+
136+ if ( enumKey === 'NodeNext' ) {
137+ // "NodeNext" is unstable before TSv4.7, and error will be thrown.
138+ if ( semver . lt ( tsVersion + '.0' , '4.7.0' ) ) {
139+ return false ;
140+ }
141+ }
142+
143+ return enumKey != null && ts . ModuleResolutionKind [ enumKey ] != null ;
61144}
62145
63146function getTypeScriptVersions ( ) {
0 commit comments