import { __exports as stream } from '../../../../../../../_virtual/stream2.mjs';
import require$$0 from 'node:stream';
import '../../../../../@nodelib_fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/index.mjs';
import '../../../../../@nodelib_fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/index.mjs';
import './reader.mjs';
import { __exports as out } from '../../../../../../../_virtual/index5.mjs';
import { __exports as out$1 } from '../../../../../../../_virtual/index4.mjs';
import { __exports as reader } from '../../../../../../../_virtual/reader.mjs';

Object.defineProperty(stream, "__esModule", {
  value: true
});
const stream_1 = require$$0;
const fsStat = out;
const fsWalk = out$1;
const reader_1 = reader;
class ReaderStream extends reader_1.default {
  constructor() {
    super(...arguments);
    this._walkStream = fsWalk.walkStream;
    this._stat = fsStat.stat;
  }
  dynamic(root, options) {
    return this._walkStream(root, options);
  }
  static(patterns, options) {
    const filepaths = patterns.map(this._getFullEntryPath, this);
    const stream = new stream_1.PassThrough({
      objectMode: true
    });
    stream._write = (index, _enc, done) => {
      return this._getEntry(filepaths[index], patterns[index], options).then(entry => {
        if (entry !== null && options.entryFilter(entry)) {
          stream.push(entry);
        }
        if (index === filepaths.length - 1) {
          stream.end();
        }
        done();
      }).catch(done);
    };
    for (let i = 0; i < filepaths.length; i++) {
      stream.write(i);
    }
    return stream;
  }
  _getEntry(filepath, pattern, options) {
    return this._getStat(filepath).then(stats => this._makeEntry(stats, pattern)).catch(error => {
      if (options.errorFilter(error)) {
        return null;
      }
      throw error;
    });
  }
  _getStat(filepath) {
    return new Promise((resolve, reject) => {
      this._stat(filepath, this._fsStatSettings, (error, stats) => {
        return error === null ? resolve(stats) : reject(error);
      });
    });
  }
}
stream.default = ReaderStream;
