'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
const fsWalk = require('@nodelib/fs.walk');
const reader_1 = require('./reader');
const stream_1 = require('./stream');
class ReaderAsync extends reader_1.default {
  constructor() {
    super(...arguments);
    this._walkAsync = fsWalk.walk;
    this._readerStream = new stream_1.default(this._settings);
  }
  dynamic(root, options) {
    return new Promise((resolve, reject) => {
      this._walkAsync(root, options, (error, entries) => {
        if (error === null) {
          resolve(entries);
        } else {
          reject(error);
        }
      });
    });
  }
  async static(patterns, options) {
    const entries = [];
    const stream = this._readerStream.static(patterns, options);
    // After #235, replace it with an asynchronous iterator.
    return new Promise((resolve, reject) => {
      stream.once('error', reject);
      stream.on('data', (entry) => entries.push(entry));
      stream.once('end', () => resolve(entries));
    });
  }
}
exports.default = ReaderAsync;