| '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); | 
|     }); | 
|   }))); | 
| } |