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