'use strict'; module.exports = readdirAsync; const maybe = require('call-me-maybe'); const DirectoryReader = require('../directory-reader'); let asyncFacade = { fs: require('fs'), forEach: require('./for-each'), async: true }; /** * Returns the buffered output from an asynchronous {@link DirectoryReader}, * via an error-first callback or a {@link Promise}. * * @param {string} dir * @param {object} [options] * @param {function} [callback] * @param {object} internalOptions */ function readdirAsync (dir, options, callback, internalOptions) { if (typeof options === 'function') { callback = options; options = undefined; } return maybe(callback, new Promise(((resolve, reject) => { let results = []; internalOptions.facade = asyncFacade; let reader = new DirectoryReader(dir, options, internalOptions); let stream = reader.stream; stream.on('error', err => { reject(err); stream.pause(); }); stream.on('data', result => { results.push(result); }); stream.on('end', () => { resolve(results); }); }))); }