@@ -11,6 +11,7 @@ var log = require('./log'),
11
11
utils = require ( './utils' ) ;
12
12
13
13
var stat = Q . nfbind ( fs . stat ) ;
14
+ var PromiseQueue = require ( './promiseQueue' ) ;
14
15
15
16
function readFile ( source , options , callback ) {
16
17
return Q . nfcall ( fs . readFile , source , options )
@@ -210,6 +211,42 @@ function folderScanSync(output, directory) {
210
211
} ) ;
211
212
}
212
213
214
+ // utilizes a simple promise queue to
215
+ function folderScan ( rootDirectory ) {
216
+ return Q . Promise ( function ( scanResolve , scanReject ) {
217
+ let queue = new PromiseQueue ( ) ;
218
+ const folders = [ ] ;
219
+ const files = [ ] ;
220
+
221
+ queue . enqueue ( folderScanPromise ( queue , rootDirectory , folders , files ) )
222
+ . then ( ( ) => {
223
+ scanResolve ( {
224
+ folders : folders . reverse ( ) ,
225
+ files : files . reverse ( )
226
+ } ) ;
227
+ } ) ;
228
+ } ) ;
229
+ }
230
+
231
+ function folderScanPromise ( promiseQueue , directory , folders , files ) {
232
+ // readdir promise
233
+ return fs . promises . readdir ( directory ) . then ( directoryEntries => {
234
+ // Q.all on the files in the directory
235
+ return Q . all ( directoryEntries . map ( entry => {
236
+ // grab the stats, if directory, then put it in the queue and add it to folders, if a file, add it to files
237
+ const filePath = path . join ( directory , entry ) ;
238
+ return fs . promises . stat ( ) . then ( stats => {
239
+ if ( stats . isDirectory ( ) ) {
240
+ folders . push ( filePath ) ;
241
+ promiseQueue . enqueue ( folderScanPromise ( promiseQueue , filePath , folders , files ) ) ;
242
+ } else {
243
+ files . push ( filePath ) ;
244
+ }
245
+ } ) ;
246
+ } ) ) ;
247
+ } ) ;
248
+ }
249
+
213
250
// Copies the 'source' file to 'target' if it's missing after creating the
214
251
// required directory structure.
215
252
function syncFile ( source , target , callback ) {
0 commit comments