text: /*---------------------------------------------------------------------------------------------
   *  Copyright (c) Microsoft Corporation. All rights reserved.
   *  Licensed under the MIT License. See License.txt in the project root for license information.
   *--------------------------------------------------------------------------------------------*/
  'use strict';
  Object.defineProperty(exports, "__esModule", { value: true });
  var es = require("event-stream");
  var _ = require("underscore");
  var util = require("gulp-util");
  var fs = require("fs");
  var path = require("path");
  var allErrors = [];
  var startTime = null;
  var count = 0;
  function onStart() {
      if (count++ > 0) {
          return;
      }
      startTime = new Date().getTime();
      util.log("Starting " + util.colors.green('compilation') + "...");
  }
  function onEnd() {
      if (--count > 0) {
          return;
      }
      log();
  }
  var buildLogPath = path.join(path.dirname(path.dirname(__dirname)), '.build', 'log');
  try {
      fs.mkdirSync(path.dirname(buildLogPath));
  }
  catch (err) {
      // ignore
  }
  function log() {
      var errors = _.flatten(allErrors);
      var seen = new Set();
      errors.map(function (err) {
          if (!seen.has(err)) {
              seen.add(err);
              util.log(util.colors.red('Error') + ": " + err);
          }
      });
      var regex = /^([^(]+)\((\d+),(\d+)\): (.*)$/;
      var messages = errors
          .map(function (err) { return regex.exec(err); })
          .filter(function (match) { return !!match; })
          .map(function (x) { return x; })
          .map(function (_a) {
          var path = _a[1], line = _a[2], column = _a[3], message = _a[4];
          return ({ path: path, line: parseInt(line), column: parseInt(column), message: 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'));
  }
  function createReporter() {
      var errors = [];
      allErrors.push(errors);
      var ReportFunc = /** @class */ (function () {
          function ReportFunc(err) {
              errors.push(err);
          }
          ReportFunc.hasErrors = function () {
              return errors.length > 0;
          };
          ReportFunc.end = function (emitError) {
              errors.length = 0;
              onStart();
              return es.through(undefined, function () {
                  onEnd();
                  if (emitError && errors.length > 0) {
                      if (!errors.__logged__) {
                          log();
                      }
                      errors.__logged__ = true;
                      var err = new Error("Found " + errors.length + " errors");
                      err.__reporter__ = true;
                      this.emit('error', err);
                  }
                  else {
                      this.emit('end');
                  }
              });
          };
          return ReportFunc;
      }());
      return ReportFunc;
  }
  exports.createReporter = createReporter;
  