@@ -6,31 +6,39 @@ import YAML from 'yaml';
66export = ( { typescript : ts_ } : { typescript : typeof ts } ) => ( {
77 create : ( info : ts . server . PluginCreateInfo ) => {
88 const logger = info . project . projectService . logger ;
9- const languageServiceHost = {
10- getScriptKind : filename => {
11- if ( ! info . languageServiceHost . getScriptKind ) return ts_ . ScriptKind . Unknown ;
12- if ( / \. y a ? m l $ / . test ( filename ) ) return ts_ . ScriptKind . TS ;
13- return info . languageServiceHost . getScriptKind ( filename ) ;
14- } ,
15- getScriptSnapshot : filename => {
16- if ( ! / \. y a ? m l $ / . test ( filename ) )
17- return info . languageServiceHost . getScriptSnapshot ( filename ) ;
18- const content = fs . readFileSync ( filename , 'utf8' ) ;
19- let object ;
20- try {
21- object = YAML . parse ( content ) ;
22- } catch ( error ) {
23- logger . info ( `[typescript-plugin-yaml] YAML.parse error:\n${ error } ` ) ;
24- }
25- const text = `export default ${ JSON . stringify ( object ) } ;` ;
26- return ts_ . ScriptSnapshot . fromString ( text ) ;
27- } ,
28- resolveModuleNameLiterals : ( moduleLiterals , containingFile , ...rest ) =>
29- info . languageServiceHost . resolveModuleNameLiterals ! (
30- moduleLiterals ,
31- containingFile ,
32- ...rest
33- ) . map ( ( resolvedModule , index ) => {
9+ const languageServiceHost = info . languageServiceHost ;
10+
11+ const getScriptKind = languageServiceHost . getScriptKind ?. bind ( languageServiceHost ) ;
12+ languageServiceHost . getScriptKind = filename => {
13+ if ( ! getScriptKind ) return ts_ . ScriptKind . Unknown ;
14+ if ( / \. y a ? m l $ / . test ( filename ) ) return ts_ . ScriptKind . TS ;
15+ return getScriptKind ( filename ) ;
16+ } ;
17+
18+ const getScriptSnapshot =
19+ languageServiceHost . getScriptSnapshot . bind ( languageServiceHost ) ;
20+ languageServiceHost . getScriptSnapshot = filename => {
21+ if ( ! / \. y a ? m l $ / . test ( filename ) ) return getScriptSnapshot ( filename ) ;
22+ const content = fs . readFileSync ( filename , 'utf8' ) ;
23+ let object ;
24+ try {
25+ object = YAML . parse ( content ) ;
26+ } catch ( error ) {
27+ logger . info ( `[typescript-plugin-yaml] YAML.parse error:\n${ error } ` ) ;
28+ }
29+ const text = `export default ${ JSON . stringify ( object ) } ;` ;
30+ return ts_ . ScriptSnapshot . fromString ( text ) ;
31+ } ;
32+
33+ const resolveModuleNameLiterals =
34+ languageServiceHost . resolveModuleNameLiterals ! . bind ( languageServiceHost ) ;
35+ languageServiceHost . resolveModuleNameLiterals = (
36+ moduleLiterals ,
37+ containingFile ,
38+ ...rest
39+ ) =>
40+ resolveModuleNameLiterals ( moduleLiterals , containingFile , ...rest ) . map (
41+ ( resolvedModule , index ) => {
3442 const moduleName = moduleLiterals [ index ] . text ;
3543 if ( ! / \. y a ? m l $ / . test ( moduleName ) ) return resolvedModule ;
3644 return {
@@ -41,12 +49,9 @@ export = ({ typescript: ts_ }: { typescript: typeof ts }) => ({
4149 resolvedFileName : path . resolve ( path . dirname ( containingFile ) , moduleName )
4250 }
4351 } ;
44- } )
45- } as Partial < ts . LanguageServiceHost > ;
46- const languageServiceHostProxy = new Proxy ( info . languageServiceHost , {
47- get : ( target , key : keyof ts . LanguageServiceHost ) =>
48- languageServiceHost [ key ] ? languageServiceHost [ key ] : target [ key ]
49- } ) ;
50- return ts_ . createLanguageService ( languageServiceHostProxy ) ;
52+ }
53+ ) ;
54+
55+ return info . languageService ;
5156 }
5257} ) ;
0 commit comments