in client/src/client.ts [355:391]
function registerProgressHandlers(client: lsp.LanguageClient) {
const progressReporters = new Map<string, ProgressReporter>();
const disposable =
client.onProgress(NgccProgressType, NgccProgressToken, async (params: NgccProgress) => {
const {configFilePath} = params;
if (!progressReporters.has(configFilePath)) {
progressReporters.set(configFilePath, new ProgressReporter());
}
const reporter = progressReporters.get(configFilePath)!;
if (params.done) {
reporter.finish();
progressReporters.delete(configFilePath);
if (!params.success) {
const selection = await vscode.window.showErrorMessage(
`Angular extension might not work correctly because ngcc operation failed. ` +
`Try to invoke ngcc manually by running 'npm/yarn run ngcc'. ` +
`Please see the extension output for more information.`,
'Show output',
);
if (selection) {
client.outputChannel.show();
}
}
} else {
reporter.report(params.message);
}
});
const reporterDisposer = vscode.Disposable.from({
dispose() {
for (const reporter of progressReporters.values()) {
reporter.finish();
}
disposable.dispose();
}
});
return reporterDisposer;
}