asset-rack
Version:
Asset management framework for nodejs
48 lines (43 loc) • 1.71 kB
text/coffeescript
fs = require 'fs'
pathutil = require 'path'
async = require 'async'
rack = require '../index'
mime = require 'mime'
EventEmitter = require('events').EventEmitter
Asset = require('../.').Asset
class exports.StaticAssets extends Asset
create: (options) ->
= pathutil.resolve options.dirname
= options.urlPrefix
= []
, , =>
'created'
getAssets: (dirname, prefix='', next) ->
filenames = fs.readdirSync dirname
async.forEachSeries filenames, (filename, next) =>
return next() if filename.slice(0, 1) is '.'
path = pathutil.join dirname, filename
stats = fs.statSync path
if stats.isDirectory()
newPrefix = "#{prefix}#{pathutil.basename(path)}/"
path, newPrefix, (newAssets) =>
.concat newAssets
next()
else
basePath = pathutil.dirname
url = path.replace basePath, ''
ext = pathutil.extname path
mimetype = mime.types[ext.slice(1, ext.length)]
contents = fs.readFileSync path
if mimetype?
asset = new Asset
url: url
contents: contents
mimetype: mime.types[ext.slice(1, ext.length)]
hash:
maxAge:
asset.on 'complete', =>
.push asset
next()
, (error) ->
next()