@@ -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 ) {
16
+ static loadProgramConfig ( typescript : TypeScriptInstance , configFile : string ) {
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,11 +31,14 @@ export class VueProgram {
30
31
}
31
32
} ;
32
33
33
- const parsed = ts . parseJsonConfigFileContent (
34
+ const parsed = typescript . parseJsonConfigFileContent (
34
35
// Regardless of the setting in the tsconfig.json we want isolatedModules to be false
35
- Object . assign ( ts . readConfigFile ( configFile , ts . sys . readFile ) . config , {
36
- isolatedModules : false
37
- } ) ,
36
+ Object . assign (
37
+ typescript . readConfigFile ( configFile , typescript . sys . readFile ) . config ,
38
+ {
39
+ isolatedModules : false
40
+ }
41
+ ) ,
38
42
parseConfigHost ,
39
43
path . dirname ( configFile )
40
44
) ;
@@ -102,13 +106,14 @@ export class VueProgram {
102
106
}
103
107
104
108
static createProgram (
109
+ typescript : TypeScriptInstance ,
105
110
programConfig : ts . ParsedCommandLine ,
106
111
basedir : string ,
107
112
files : FilesRegister ,
108
113
watcher : FilesWatcher ,
109
114
oldProgram : ts . Program
110
115
) {
111
- const host = ts . createCompilerHost ( programConfig . options ) ;
116
+ const host = typescript . createCompilerHost ( programConfig . options ) ;
112
117
const realGetSourceFile = host . getSourceFile ;
113
118
114
119
// We need a host that can parse Vue SFCs (single file components).
@@ -137,7 +142,7 @@ export class VueProgram {
137
142
// get typescript contents from Vue file
138
143
if ( source && VueProgram . isVue ( filePath ) ) {
139
144
const resolved = VueProgram . resolveScriptBlock ( source . text ) ;
140
- source = ts . createSourceFile (
145
+ source = typescript . createSourceFile (
141
146
filePath ,
142
147
resolved . content ,
143
148
languageVersion ,
@@ -155,7 +160,7 @@ export class VueProgram {
155
160
156
161
for ( const moduleName of moduleNames ) {
157
162
// Try to use standard resolution.
158
- const { resolvedModule } = ts . resolveModuleName (
163
+ const { resolvedModule } = typescript . resolveModuleName (
159
164
moduleName ,
160
165
containingFile ,
161
166
programConfig . options ,
@@ -221,7 +226,7 @@ export class VueProgram {
221
226
return resolvedModules ;
222
227
} ;
223
228
224
- return ts . createProgram (
229
+ return typescript . createProgram (
225
230
programConfig . fileNames ,
226
231
programConfig . options ,
227
232
host ,
@@ -231,14 +236,14 @@ export class VueProgram {
231
236
232
237
private static getScriptKindByLang ( lang : string ) {
233
238
if ( lang === 'ts' ) {
234
- return ts . ScriptKind . TS ;
239
+ return ScriptKind . TS ;
235
240
} else if ( lang === 'tsx' ) {
236
- return ts . ScriptKind . TSX ;
241
+ return ScriptKind . TSX ;
237
242
} else if ( lang === 'jsx' ) {
238
- return ts . ScriptKind . JSX ;
243
+ return ScriptKind . JSX ;
239
244
} else {
240
245
// when lang is "js" or no lang specified
241
- return ts . ScriptKind . JS ;
246
+ return ScriptKind . JS ;
242
247
}
243
248
}
244
249
@@ -264,7 +269,7 @@ export class VueProgram {
264
269
// No <script> block
265
270
if ( ! script ) {
266
271
return {
267
- scriptKind : ts . ScriptKind . JS ,
272
+ scriptKind : ScriptKind . JS ,
268
273
content : '/* tslint:disable */\nexport default {};\n'
269
274
} ;
270
275
}
0 commit comments