Skip to content
This repository was archived by the owner on Dec 1, 2019. It is now read-only.

Commit b079cd0

Browse files
committed
refactor: add configFileName test and fix getTimes() usage
1 parent a774d6e commit b079cd0

File tree

9 files changed

+253
-142
lines changed

9 files changed

+253
-142
lines changed

package.json

+7-7
Original file line numberDiff line numberDiff line change
@@ -41,26 +41,26 @@
4141
"source-map-support": "^0.4.11"
4242
},
4343
"devDependencies": {
44-
"@types/chai": "^3.4.34",
44+
"@types/chai": "^3.4.35",
4545
"@types/colors": "^1.1.1",
46-
"@types/lodash": "^4.14.52",
46+
"@types/lodash": "^4.14.54",
4747
"@types/mocha": "^2.2.39",
4848
"@types/node": "^7.0.5",
4949
"@types/shelljs": "^0.7.0",
5050
"@types/sinon": "^1.16.35",
51-
"@types/webpack": "^2.2.6",
52-
"bluebird": "^3.4.7",
51+
"@types/webpack": "^2.2.8",
52+
"bluebird": "^3.5.0",
5353
"chai": "^3.5.0",
5454
"empty-module": "0.0.2",
5555
"fs-extra": "^2.0.0",
5656
"mocha": "^3.2.0",
5757
"ps-node": "^0.1.1",
58-
"rimraf": "^2.5.0",
58+
"rimraf": "^2.6.1",
5959
"shelljs": "^0.7.6",
6060
"standard-version": "^4.0.0",
6161
"temp": "^0.8.3",
62-
"tslint": "^4.4.2",
63-
"typescript": "^2.1.6",
62+
"tslint": "^4.5.1",
63+
"typescript": "^2.2.1",
6464
"webpack": "^2.2.1"
6565
}
6666
}

src/__test__/config-file-name.ts

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import {
2+
src, webpackConfig, tsconfig,
3+
compile, expectErrors, spec, query
4+
} from './utils';
5+
6+
spec(__filename, async function() {
7+
src('index.ts', `
8+
const a = {}
9+
const b = Object.values(a);
10+
`);
11+
12+
tsconfig({
13+
target: 'es2017'
14+
}, undefined, './config/tsconfig.json');
15+
16+
const config = webpackConfig(query({
17+
configFileName: './config/tsconfig.json'
18+
}));
19+
20+
let stats = await compile(config);
21+
expectErrors(stats, 0);
22+
});

src/__test__/utils.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -247,15 +247,19 @@ export function expectWarnings(stats: any, count: number, warnings: string[] = [
247247

248248
export function tsconfig(
249249
compilerOptions?: any,
250-
config?: any
250+
config?: any,
251+
fileName = 'tsconfig.json'
251252
) {
252253
const res = _.merge({
253254
compilerOptions: _.merge({
254255
target: 'es6',
255-
moduleResolution: 'node'
256+
moduleResolution: 'node',
257+
typeRoots: [
258+
'./node_modules/@types'
259+
]
256260
}, compilerOptions)
257261
}, config);
258-
return file('tsconfig.json', json(res));
262+
return file(fileName, json(res));
259263
}
260264

261265
export function install(...name: string[]) {

src/__test__/watch-output.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ spec(__filename, async function(env, done) {
2424
stdout('Webpack is watching the files…'),
2525
stderr('Checking finished with 1 errors'),
2626
stdout([
27-
'ERROR in [at-loader]',
27+
'ERROR in [at-loader] ./src/index.ts',
2828
`TS2345: Argument of type '"1"' is not assignable to parameter of type 'number'`
2929
]),
3030
);

src/checker/checker.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,13 @@ export class Checker {
112112
} as EmitFile.Request);
113113
}
114114

115-
updateFile(fileName: string, text: string) {
115+
updateFile(fileName: string, text: string, ifExist = false) {
116116
return this.req({
117117
type: 'UpdateFile',
118118
payload: {
119119
fileName,
120-
text
120+
text,
121+
ifExist
121122
}
122123
} as UpdateFile.Request);
123124
}

src/checker/protocol.ts

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export namespace UpdateFile {
5555
export interface Payload {
5656
fileName: string;
5757
text: string;
58+
ifExist: boolean;
5859
}
5960

6061
export interface Request extends ReqBase {

src/checker/runtime.ts

+11-6
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@ function createChecker(receive: (cb: (msg: Req) => void) => void, send: (msg: Re
261261
};
262262
});
263263

264+
264265
const program = service.getProgram();
265266
program.getSourceFiles().forEach(file => {
266267
files[file.fileName] = {
@@ -270,6 +271,7 @@ function createChecker(receive: (cb: (msg: Req) => void) => void, send: (msg: Re
270271
};
271272
});
272273

274+
273275
if (loaderConfig.debug) {
274276
console.log(`[${instanceName}] @DEBUG Initial files`, Object.keys(files));
275277
}
@@ -280,19 +282,18 @@ function createChecker(receive: (cb: (msg: Req) => void) => void, send: (msg: Re
280282
});
281283
}
282284

283-
284285
replyOk(seq, null);
285286
}
286287

287-
function updateFile(fileName: string, text: string) {
288+
function updateFile(fileName: string, text: string, ifExist = false) {
288289
const file = files[fileName];
289290
if (file) {
290291
if (file.text === text) { return; }
291292
projectVersion++;
292293
file.version++;
293294
file.text = text;
294295
file.snapshot = compiler.ScriptSnapshot.fromString(text);
295-
} else {
296+
} else if (!ifExist) {
296297
projectVersion++;
297298
files[fileName] = {
298299
text,
@@ -337,7 +338,7 @@ function createChecker(receive: (cb: (msg: Req) => void) => void, send: (msg: Re
337338
}
338339

339340
function processUpdate({seq, payload}: UpdateFile.Request) {
340-
updateFile(payload.fileName, payload.text);
341+
updateFile(payload.fileName, payload.text, payload.ifExist);
341342
replyOk(seq, null);
342343
}
343344

@@ -407,8 +408,12 @@ function createChecker(receive: (cb: (msg: Req) => void) => void, send: (msg: Re
407408
.filter(diag => !ignoreDiagnostics[diag.code])
408409
.map(diagnostic => {
409410
const message = compiler.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
410-
const fileName = diagnostic.file && './'+path.relative(context, diagnostic.file.fileName);
411-
411+
let fileName = diagnostic.file && path.relative(context, diagnostic.file.fileName);
412+
413+
if (fileName[0] !== '.') {
414+
fileName = './' + fileName;
415+
}
416+
412417
let pretty = '';
413418
let line = 0;
414419
let character = 0;

src/instance.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -330,13 +330,13 @@ function setupWatchRun(compiler, instanceName: string) {
330330
const watcher = watching.compiler.watchFileSystem.watcher
331331
|| watching.compiler.watchFileSystem.wfs.watcher;
332332

333-
const mtimes = watcher.getTimes();
333+
const mtimes = watcher.mtimes || (watcher.getTimes && watcher.getTimes()) || {};
334334
const changedFiles = Object.keys(mtimes).map(toUnix);
335335
const updates = changedFiles
336336
.filter(file => EXTENSIONS.test(file))
337337
.map(changedFile => {
338338
if (fs.existsSync(changedFile)) {
339-
checker.updateFile(changedFile, fs.readFileSync(changedFile).toString());
339+
checker.updateFile(changedFile, fs.readFileSync(changedFile).toString(), true);
340340
} else {
341341
checker.removeFile(changedFile);
342342
}

0 commit comments

Comments
 (0)