@@ -120,6 +120,50 @@ describe('resolveNativeTypeScriptServer', () => {
120120 }
121121 } )
122122
123+ test ( 'selects native tsc when the project path contains an @-prefixed directory' , async ( ) => {
124+ const base = await fs . mkdtemp ( path . join ( os . tmpdir ( ) , 'ts7-at-path-' ) )
125+ const dir = path . join ( base , '@workspace' , 'app' )
126+ try {
127+ await fs . mkdir ( dir , { recursive : true } )
128+ await writeTypeScriptPackage ( dir , { version : '7.0.0' , tsserver : false } )
129+ const tsc = await makeBin ( dir , 'tsc' )
130+ expect ( resolveNativeTypeScriptServer ( dir ) ?. command ) . toBe ( tsc )
131+ }
132+ finally {
133+ await fs . rm ( base , { recursive : true , force : true } )
134+ }
135+ } )
136+
137+ test ( 'selects native tsc through a package-manager wrapper shim' , async ( ) => {
138+ const dir = await fs . mkdtemp ( path . join ( os . tmpdir ( ) , 'ts7-wrapper-' ) )
139+ try {
140+ await writeTypeScriptPackage ( dir , { version : '7.0.0' , tsserver : false } )
141+ const tsc = await makeBin ( dir , 'tsc' )
142+ if ( process . platform !== 'win32' ) {
143+ await fs . unlink ( tsc )
144+ await fs . writeFile ( tsc , '#!/bin/sh\nexec node "$(dirname "$0")/../typescript/bin/tsc.js" "$@"\n' )
145+ }
146+ expect ( resolveNativeTypeScriptServer ( dir ) ?. command ) . toBe ( tsc )
147+ }
148+ finally {
149+ await fs . rm ( dir , { recursive : true , force : true } )
150+ }
151+ } )
152+
153+ test ( 'rejects a shared shim that does not reference the package bin' , async ( ) => {
154+ const dir = await fs . mkdtemp ( path . join ( os . tmpdir ( ) , 'ts7-unrelated-shim-' ) )
155+ try {
156+ await writeTypeScriptPackage ( dir , { version : '7.0.0' , tsserver : false } )
157+ const tsc = await makeBin ( dir , 'tsc' )
158+ await fs . unlink ( tsc )
159+ await fs . writeFile ( tsc , '#!/bin/sh\nexec node /unrelated/tsc.js "$@"\n' )
160+ expect ( resolveNativeTypeScriptServer ( dir ) ) . toBeUndefined ( )
161+ }
162+ finally {
163+ await fs . rm ( dir , { recursive : true , force : true } )
164+ }
165+ } )
166+
123167 test ( 'returns undefined when native package exists but no .bin/tsc' , async ( ) => {
124168 const dir = await fs . mkdtemp ( path . join ( os . tmpdir ( ) , 'ts7-no-bin-' ) )
125169 try {
0 commit comments