@@ -27,6 +27,17 @@ function createProject(packages: Record<string, string>) {
2727 return projectDir ;
2828}
2929
30+ function createBrokenCompiler ( projectDir : string , packageName = "typescript" ) {
31+ const packageDir = join ( projectDir , "node_modules" , packageName ) ;
32+
33+ mkdirSync ( packageDir , { recursive : true } ) ;
34+ writeFileSync (
35+ join ( packageDir , "package.json" ) ,
36+ JSON . stringify ( { name : packageName , main : "index.cjs" } )
37+ ) ;
38+ writeFileSync ( join ( packageDir , "index.cjs" ) , 'throw new Error("broken compiler");' ) ;
39+ }
40+
3041describe ( "loadTypescript" , ( ) => {
3142 afterEach ( ( ) => {
3243 for ( const projectDir of projectDirs ) {
@@ -64,20 +75,25 @@ describe("loadTypescript", () => {
6475
6576 it ( "surfaces errors from an installed compiler package" , ( ) => {
6677 const projectDir = createProject ( { } ) ;
67- const packageDir = join ( projectDir , "node_modules" , "typescript" ) ;
68-
69- mkdirSync ( packageDir ) ;
70- writeFileSync (
71- join ( packageDir , "package.json" ) ,
72- JSON . stringify ( { name : "typescript" , main : "index.cjs" } )
73- ) ;
74- writeFileSync ( join ( packageDir , "index.cjs" ) , 'throw new Error("broken compiler");' ) ;
78+ createBrokenCompiler ( projectDir ) ;
7579
76- expect ( ( ) => loadTypescript ( projectDir ) ) . toThrowError (
80+ expect ( ( ) => loadTypescript ( projectDir , [ "typescript" ] ) ) . toThrowError (
7781 `Failed to load "typescript" from ${ projectDir } .`
7882 ) ;
7983 } ) ;
8084
85+ it ( "falls back when an earlier compiler package fails to load" , ( ) => {
86+ const projectDir = createProject ( {
87+ "@typescript/typescript6" : "@typescript/typescript6" ,
88+ } ) ;
89+ createBrokenCompiler ( projectDir ) ;
90+
91+ const compiler = loadTypescript ( projectDir ) ;
92+
93+ expect ( compiler . version ) . toBe ( "6.0.3" ) ;
94+ expect ( typeof compiler . transpileModule ) . toBe ( "function" ) ;
95+ } ) ;
96+
8197 it ( "falls back to the TypeScript 6 compatibility package for TypeScript 7" , ( ) => {
8298 const compiler = loadTypescript (
8399 createProject ( {
0 commit comments