@@ -3,6 +3,7 @@ import * as path from 'path';
3
3
import * as ts from 'typescript' ;
4
4
import { FilesRegister } from './FilesRegister' ;
5
5
import { FilesWatcher } from './FilesWatcher' ;
6
+ import { ScriptKind , TypeScriptInstance } from './TypeScriptInstance' ;
6
7
// tslint:disable-next-line
7
8
import * as vueCompiler from 'vue-template-compiler' ;
8
9
@@ -12,15 +13,15 @@ interface ResolvedScript {
12
13
}
13
14
14
15
export class VueProgram {
15
- static loadProgramConfig ( configFile : string , compilerOptions : object ) {
16
+ static loadProgramConfig ( typescript : TypeScriptInstance , configFile : string , compilerOptions : object ) {
16
17
const extraExtensions = [ 'vue' ] ;
17
18
18
19
const parseConfigHost : ts . ParseConfigHost = {
19
- fileExists : ts . sys . fileExists ,
20
- readFile : ts . sys . readFile ,
21
- useCaseSensitiveFileNames : ts . sys . useCaseSensitiveFileNames ,
20
+ fileExists : typescript . sys . fileExists ,
21
+ readFile : typescript . sys . readFile ,
22
+ useCaseSensitiveFileNames : typescript . sys . useCaseSensitiveFileNames ,
22
23
readDirectory : ( rootDir , extensions , excludes , includes , depth ) => {
23
- return ts . sys . readDirectory (
24
+ return typescript . sys . readDirectory (
24
25
rootDir ,
25
26
extensions . concat ( extraExtensions ) ,
26
27
excludes ,
@@ -30,15 +31,15 @@ export class VueProgram {
30
31
}
31
32
} ;
32
33
33
- const tsconfig = ts . readConfigFile ( configFile , ts . sys . readFile ) . config ;
34
+ const tsconfig = typescript . readConfigFile ( configFile , typescript . sys . readFile ) . config ;
34
35
35
36
tsconfig . compilerOptions = tsconfig . compilerOptions || { } ;
36
37
tsconfig . compilerOptions = {
37
38
...tsconfig . compilerOptions ,
38
39
...compilerOptions
39
40
} ;
40
41
41
- const parsed = ts . parseJsonConfigFileContent (
42
+ const parsed = typescript . parseJsonConfigFileContent (
42
43
tsconfig ,
43
44
parseConfigHost ,
44
45
path . dirname ( configFile )
@@ -107,13 +108,14 @@ export class VueProgram {
107
108
}
108
109
109
110
static createProgram (
111
+ typescript : TypeScriptInstance ,
110
112
programConfig : ts . ParsedCommandLine ,
111
113
basedir : string ,
112
114
files : FilesRegister ,
113
115
watcher : FilesWatcher ,
114
116
oldProgram : ts . Program
115
117
) {
116
- const host = ts . createCompilerHost ( programConfig . options ) ;
118
+ const host = typescript . createCompilerHost ( programConfig . options ) ;
117
119
const realGetSourceFile = host . getSourceFile ;
118
120
119
121
// We need a host that can parse Vue SFCs (single file components).
@@ -142,7 +144,7 @@ export class VueProgram {
142
144
// get typescript contents from Vue file
143
145
if ( source && VueProgram . isVue ( filePath ) ) {
144
146
const resolved = VueProgram . resolveScriptBlock ( source . text ) ;
145
- source = ts . createSourceFile (
147
+ source = typescript . createSourceFile (
146
148
filePath ,
147
149
resolved . content ,
148
150
languageVersion ,
@@ -160,7 +162,7 @@ export class VueProgram {
160
162
161
163
for ( const moduleName of moduleNames ) {
162
164
// Try to use standard resolution.
163
- const { resolvedModule } = ts . resolveModuleName (
165
+ const { resolvedModule } = typescript . resolveModuleName (
164
166
moduleName ,
165
167
containingFile ,
166
168
programConfig . options ,
@@ -226,7 +228,7 @@ export class VueProgram {
226
228
return resolvedModules ;
227
229
} ;
228
230
229
- return ts . createProgram (
231
+ return typescript . createProgram (
230
232
programConfig . fileNames ,
231
233
programConfig . options ,
232
234
host ,
@@ -236,14 +238,14 @@ export class VueProgram {
236
238
237
239
private static getScriptKindByLang ( lang : string ) {
238
240
if ( lang === 'ts' ) {
239
- return ts . ScriptKind . TS ;
241
+ return ScriptKind . TS ;
240
242
} else if ( lang === 'tsx' ) {
241
- return ts . ScriptKind . TSX ;
243
+ return ScriptKind . TSX ;
242
244
} else if ( lang === 'jsx' ) {
243
- return ts . ScriptKind . JSX ;
245
+ return ScriptKind . JSX ;
244
246
} else {
245
247
// when lang is "js" or no lang specified
246
- return ts . ScriptKind . JS ;
248
+ return ScriptKind . JS ;
247
249
}
248
250
}
249
251
@@ -269,7 +271,7 @@ export class VueProgram {
269
271
// No <script> block
270
272
if ( ! script ) {
271
273
return {
272
- scriptKind : ts . ScriptKind . JS ,
274
+ scriptKind : ScriptKind . JS ,
273
275
content : '/* tslint:disable */\nexport default {};\n'
274
276
} ;
275
277
}
0 commit comments