@@ -33,6 +33,9 @@ const config: DenoPluginConfig = {
3333 enable : true ,
3434} ;
3535
36+ let parsedImportMap : ImportMaps | null = null ;
37+ let projectDirectory : string ;
38+
3639module . exports = function init (
3740 { typescript } : { typescript : typeof ts_module } ,
3841) {
@@ -84,12 +87,10 @@ module.exports = function init(
8487 return tsLs ;
8588 }
8689
87- const projectDirectory = project . getCurrentDirectory ( ) ;
90+ projectDirectory = project . getCurrentDirectory ( ) ;
8891 // TypeScript plugins have a `cwd` of `/`, which causes issues with import resolution.
8992 process . chdir ( projectDirectory ) ;
9093
91- let parsedImportMap : ImportMaps | null = null ;
92-
9394 const resolveTypeReferenceDirectives =
9495 tsLsHost . resolveTypeReferenceDirectives ;
9596
@@ -126,6 +127,7 @@ module.exports = function init(
126127 containingFile : string ,
127128 ...rest
128129 ) => {
130+ logger . info ( "resolveModuleNames" ) ;
129131 if ( ! config . enable ) {
130132 logger . info ( "plugin disabled." ) ;
131133 return resolveModuleNames . call (
@@ -155,17 +157,21 @@ module.exports = function init(
155157 ) ;
156158
157159 if ( parsedModuleName == null ) {
160+ logger . info ( `module "${ moduleName } " can not parsed` )
158161 resolvedModules . push ( undefined ) ;
159162 continue ;
160163 }
161164
162165 const resolvedModule = resolveDenoModule ( parsedModuleName ) ;
163166
164167 if ( ! resolvedModule ) {
168+ logger . info ( `module "${ moduleName } " can not resolved` )
165169 resolvedModules . push ( undefined ) ;
166170 continue ;
167171 }
168172
173+ logger . info ( `module "${ moduleName } " -> ${ resolvedModule . filepath } ` ) ;
174+
169175 resolvedModules . push ( {
170176 extension : resolvedModule . extension as ts_module . Extension ,
171177 isExternalLibraryImport : false ,
@@ -297,6 +303,7 @@ module.exports = function init(
297303 }
298304
299305 function getSemanticDiagnostics ( filename : string ) {
306+ logger . info ( "getSemanticDiagnostics" ) ;
300307 const diagnostics = tsLs . getSemanticDiagnostics ( filename ) ;
301308
302309 if ( ! config . enable ) {
@@ -359,7 +366,7 @@ module.exports = function init(
359366 ) ;
360367
361368 if ( parsedModuleName == null ) {
362- d . code = 10001 ;
369+ d . code = 10001 ; // InvalidRelativeImport
363370 d . messageText =
364371 `relative import path "${ moduleName } " not prefixed with / or ./ or ../` ;
365372 return d ;
@@ -373,7 +380,7 @@ module.exports = function init(
373380
374381 if ( isHttpURL ( parsedModuleName ) ) {
375382 d . code = 10002 ; // RemoteModuleNotExist
376- d . messageText = `Could not find module ${ moduleName } locally` ;
383+ d . messageText = `The remote module " ${ moduleName } " have not cached locally` ;
377384 return d ;
378385 }
379386
@@ -384,11 +391,11 @@ module.exports = function init(
384391 parsedModuleName . startsWith ( "file://" )
385392 ) {
386393 d . code = 10003 ; // LocalModuleNotExist
387- d . messageText = `Could not find module ${ moduleName } locally` ;
394+ d . messageText = `Could not find module " ${ moduleName } " locally` ;
388395 return d ;
389396 }
390397
391- d . code = 10003 ; // InvalidImport
398+ d . code = 10004 ; // InvalidImport
392399 d . messageText =
393400 `Import module "${ moduleName } " must be a relative path or remote HTTP URL` ;
394401 }
@@ -411,9 +418,18 @@ module.exports = function init(
411418 onConfigurationChanged ( c : DenoPluginConfig ) {
412419 logger . info ( "config change to:\n" + JSON . stringify ( c , null , " " ) ) ;
413420 Object . assign ( config , c ) ;
421+
422+ if ( config . importmap != null ) {
423+ parsedImportMap = parseImportMapFromFile (
424+ projectDirectory ,
425+ config . importmap ,
426+ ) ;
427+ }
428+
414429 pluginInfo . project . markAsDirty ( ) ;
415430 pluginInfo . project . refreshDiagnostics ( ) ;
416431 pluginInfo . project . updateGraph ( ) ;
432+ pluginInfo . languageService . getProgram ( ) ?. emit ( ) ;
417433 } ,
418434 } ;
419435} ;
0 commit comments