From 2c6aab1036eef5a333210da034d388fde7900047 Mon Sep 17 00:00:00 2001 From: thesayyn Date: Tue, 3 May 2022 22:50:21 +0300 Subject: [PATCH] fix(typescript): correctly process diagnostics in worker mode --- packages/typescript/internal/worker/index.js | 10 +++++++--- .../typescript/internal/worker/worker_adapter.ts | 13 ++++++++----- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/packages/typescript/internal/worker/index.js b/packages/typescript/internal/worker/index.js index d1489dfc56..1c2de598ba 100644 --- a/packages/typescript/internal/worker/index.js +++ b/packages/typescript/internal/worker/index.js @@ -57,7 +57,8 @@ function emitOnce(args) { consolidateChangesCallback(); } workerRequestTimestamp = Date.now(); - const result = yield (watchProgram === null || watchProgram === void 0 ? void 0 : watchProgram.getProgram().emit(undefined, undefined, { + const program = watchProgram === null || watchProgram === void 0 ? void 0 : watchProgram.getProgram(); + const cancellationToken = { isCancellationRequested: function (timestamp) { return timestamp !== workerRequestTimestamp; }.bind(null, workerRequestTimestamp), @@ -66,8 +67,11 @@ function emitOnce(args) { throw new ts.OperationCanceledException(); } }.bind(null, workerRequestTimestamp), - })); - return Boolean(result && result.diagnostics.length === 0); + }; + const result = program.emit(undefined, undefined, cancellationToken); + const diagnostics = ts.getPreEmitDiagnostics(program, undefined, cancellationToken); + let succeded = result && result.diagnostics.length === 0 && diagnostics.length == 0; + return succeded; }); } function main() { diff --git a/packages/typescript/internal/worker/worker_adapter.ts b/packages/typescript/internal/worker/worker_adapter.ts index 8c9f5b7924..3c44686da1 100644 --- a/packages/typescript/internal/worker/worker_adapter.ts +++ b/packages/typescript/internal/worker/worker_adapter.ts @@ -99,9 +99,9 @@ async function emitOnce(args: string[]) { consolidateChangesCallback(); } - workerRequestTimestamp = Date.now(); - const result = await watchProgram ?.getProgram().emit(undefined, undefined, { + const program = watchProgram?.getProgram() + const cancellationToken: ts.CancellationToken = { isCancellationRequested: function(timestamp: number) { return timestamp !== workerRequestTimestamp; }.bind(null, workerRequestTimestamp), @@ -110,9 +110,12 @@ async function emitOnce(args: string[]) { throw new ts.OperationCanceledException(); } }.bind(null, workerRequestTimestamp), - }); - - return Boolean(result && result.diagnostics.length === 0); + } + + const result = program.emit(undefined, undefined, cancellationToken); + const diagnostics = ts.getPreEmitDiagnostics(program as unknown as ts.Program, undefined, cancellationToken) + let succeded = result && result.diagnostics.length === 0 && diagnostics.length == 0 + return succeded } function main() {