UNPKG

1.86 kBtext/coffeescriptView Raw
1
2EventEmitter = require('events').EventEmitter
3Buffer = require('buffer').Buffer
4_ = require 'underscore'
5fs = require 'fs'
6pathutil = require 'path'
7async = require 'async'
8
9class exports.BufferStream extends EventEmitter
10 constructor: (buffer) ->
11 @data = new Buffer buffer
12 super()
13
14 pipe: (destination) ->
15 destination.write @data
16 destination.end()
17 @emit 'close'
18 @emit 'end'
19 pause: ->
20 resume: ->
21 destroy: ->
22 readable: true
23
24exports.extend = (object) ->
25 class Asset extends this
26 for key, value of object
27 Asset::[key] = value
28 Asset
29
30exports.walk = (root, options, iterator, cb) ->
31 if _.isFunction options
32 cb = iterator
33 iterator = options
34 options = {}
35 cb ?= ->
36 ignoreFolders = options.ignoreFolders || false
37 filter = options.filter || -> true
38
39 if _.isString filter
40 filter = ((ext) ->
41 ext = if ext[0] is '.' then ext else '.' + ext
42 (file) -> file.ext == ext
43 ) filter
44
45 readdir = (dir, cb) ->
46 fs.readdir dir, (err, files) ->
47 return cb err if err?
48 iter = (file, done) ->
49 path = pathutil.join dir, file
50 fs.stat path, (err, stats) ->
51 return done err if err?
52 fobj =
53 name: pathutil.basename file
54 namenoext: pathutil.basename file, pathutil.extname file
55 relpath: pathutil.relative root, path
56 path: path
57 ext: pathutil.extname file
58 stats: stats
59 skip = (ignoreFolders and stats.isDirectory()) or !filter fobj
60 if stats.isDirectory()
61 readdir path, (err) ->
62 return done err if err?
63 if skip then done() else iterator fobj, done
64 else
65 if skip then done() else iterator fobj, done
66 async.forEach files, iter, cb
67
68 readdir root, cb