mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-13 17:22:15 -05:00
SQL Operations Studio Public Preview 1 (0.23) release source code
This commit is contained in:
100
build/lib/reporter.ts
Normal file
100
build/lib/reporter.ts
Normal file
@@ -0,0 +1,100 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as es from 'event-stream';
|
||||
import * as _ from 'underscore';
|
||||
import * as util from 'gulp-util';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
const allErrors: Error[][] = [];
|
||||
let startTime: number = null;
|
||||
let count = 0;
|
||||
|
||||
function onStart(): void {
|
||||
if (count++ > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
startTime = new Date().getTime();
|
||||
util.log(`Starting ${util.colors.green('compilation')}...`);
|
||||
}
|
||||
|
||||
function onEnd(): void {
|
||||
if (--count > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
log();
|
||||
}
|
||||
|
||||
const buildLogPath = path.join(path.dirname(path.dirname(__dirname)), '.build', 'log');
|
||||
|
||||
try {
|
||||
fs.mkdirSync(path.dirname(buildLogPath));
|
||||
} catch (err) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
function log(): void {
|
||||
const errors = _.flatten(allErrors);
|
||||
errors.map(err => util.log(`${util.colors.red('Error')}: ${err}`));
|
||||
|
||||
const regex = /^([^(]+)\((\d+),(\d+)\): (.*)$/;
|
||||
const messages = errors
|
||||
.map(err => regex.exec(err))
|
||||
.filter(match => !!match)
|
||||
.map(([, path, line, column, message]) => ({ path, line: parseInt(line), column: parseInt(column), message }));
|
||||
|
||||
try {
|
||||
|
||||
fs.writeFileSync(buildLogPath, JSON.stringify(messages));
|
||||
} catch (err) {
|
||||
//noop
|
||||
}
|
||||
|
||||
util.log(`Finished ${util.colors.green('compilation')} with ${errors.length} errors after ${util.colors.magenta((new Date().getTime() - startTime) + ' ms')}`);
|
||||
}
|
||||
|
||||
export interface IReporter {
|
||||
(err: Error): void;
|
||||
hasErrors(): boolean;
|
||||
end(emitError: boolean): NodeJS.ReadWriteStream;
|
||||
}
|
||||
|
||||
export function createReporter(): IReporter {
|
||||
const errors: Error[] = [];
|
||||
allErrors.push(errors);
|
||||
|
||||
class ReportFunc {
|
||||
constructor(err: Error) {
|
||||
errors.push(err);
|
||||
}
|
||||
|
||||
static hasErrors(): boolean {
|
||||
return errors.length > 0;
|
||||
}
|
||||
|
||||
static end(emitError: boolean): NodeJS.ReadWriteStream {
|
||||
errors.length = 0;
|
||||
onStart();
|
||||
|
||||
return es.through(null, function () {
|
||||
onEnd();
|
||||
|
||||
if (emitError && errors.length > 0) {
|
||||
log();
|
||||
this.emit('error');
|
||||
} else {
|
||||
this.emit('end');
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return <IReporter><any>ReportFunc;
|
||||
};
|
||||
Reference in New Issue
Block a user