You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							48 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
	
	
							48 lines
						
					
					
						
							1.1 KiB
						
					
					
				'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); | 
						|
    }); | 
						|
  }))); | 
						|
}
 | 
						|
 |