text: "use strict";
  var __extends = (this && this.__extends) || (function () {
      var extendStatics = Object.setPrototypeOf ||
          ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
          function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
      return function (d, b) {
          extendStatics(d, b);
          function __() { this.constructor = d; }
          d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
      };
  })();
  Object.defineProperty(exports, "__esModule", { value: true });
  var stream = require("stream");
  var fsStat = require("@nodelib/fs.stat");
  var fs_1 = require("./fs");
  var FileSystemStream = /** @class */ (function (_super) {
      __extends(FileSystemStream, _super);
      function FileSystemStream() {
          return _super !== null && _super.apply(this, arguments) || this;
      }
      /**
       * Use stream API to read entries for Task.
       */
      FileSystemStream.prototype.read = function (patterns, filter) {
          var _this = this;
          var filepaths = patterns.map(this.getFullEntryPath, this);
          var transform = new stream.Transform({ objectMode: true });
          transform._transform = function (index, _enc, done) {
              return _this.getEntry(filepaths[index], patterns[index]).then(function (entry) {
                  if (entry !== null && filter(entry)) {
                      transform.push(entry);
                  }
                  if (index === filepaths.length - 1) {
                      transform.end();
                  }
                  done();
              });
          };
          for (var i = 0; i < filepaths.length; i++) {
              transform.write(i);
          }
          return transform;
      };
      /**
       * Return entry for the provided path.
       */
      FileSystemStream.prototype.getEntry = function (filepath, pattern) {
          var _this = this;
          return this.getStat(filepath)
              .then(function (stat) { return _this.makeEntry(stat, pattern); })
              .catch(function () { return null; });
      };
      /**
       * Return fs.Stats for the provided path.
       */
      FileSystemStream.prototype.getStat = function (filepath) {
          return fsStat.stat(filepath, { throwErrorOnBrokenSymlinks: false });
      };
      return FileSystemStream;
  }(fs_1.default));
  exports.default = FileSystemStream;
  