ember-cli-ajh
Version:
Command line tool for developing ambitious ember.js apps
59 lines (48 loc) • 1.25 kB
JavaScript
var EventEmitter = require('events').EventEmitter
var path = require('path')
var fs = require('fs')
var util = require('util')
function Walker (dir, filter) {
EventEmitter.call(this)
this.path = path.resolve(dir)
this.filter = filter
this.pending = 0
}
util.inherits(Walker, EventEmitter)
Walker.prototype.start = function () {
this.visit(this.path)
return this
}
Walker.prototype.visit = function (item) {
this.pending++
var self = this
fs.lstat(item, function (err, stat) {
if (err) {
self.emit('error', err, item, stat)
return self.finishItem()
}
if (self.filter && !self.filter(item, stat)) return self.finishItem()
if (!stat.isDirectory()) {
self.emit('data', item, stat)
return self.finishItem()
}
fs.readdir(item, function (err, items) {
if (err) {
self.emit('error', err, item, stat)
return self.finishItem()
}
self.emit('data', item, stat)
items.forEach(function (part) {
self.visit(path.join(item, part))
})
self.finishItem()
})
})
return this
}
Walker.prototype.finishItem = function () {
this.pending -= 1
if (this.pending === 0) this.emit('end')
return this
}
module.exports = Walker