asset-rack
Version:
Static Web Framework for Nodejs
74 lines (66 loc) • 2.59 kB
text/coffeescript
fs = require 'fs'
pathutil = require 'path'
async = require 'async'
{Asset} = require '../.'
class exports.JavascriptAsset extends Asset
mimetype: 'text/javascript'
create: (options) ->
= options
= options.code
= options.dirname or '/'
= options.compress
?= false
= ''
if
else
= []
async.eachSeries , (path, next) =>
try
if path instanceof Asset
asset = path
return asset.on 'complete', =>
if
+= asset.contents
else
asset
next()
fileContent = fs.readFileSync pathutil.join(, path), 'utf8'
assetUrl = '/' + path.replace('.coffee', '.js')
.replace(/\\/g, '\/')
jsContent = ''
switch
when path.indexOf('.coffee') isnt -1
()
try
jsContent = .compile fileContent
catch error
error.stack = "Syntax Error: In #{pathutil.join(@dirname, path)} on line #{error.location.first_line}\n" + error.stack
throw error
else
jsContent = fileContent
if
+= jsContent + '\n'
else
new Asset {
url: assetUrl
contents: jsContent
}
next()
catch error
'error', error
, =>
'created'
tag: ->
if ?
tag = ''
for asset in
tag += "\n<script type=\"text/javascript\" "
tag += "src=\"#{asset.specificUrl}\"></script>"
return tag
if ? and isnt ''
tag = "\n<script type=\"#{@mimetype}\" "
return tag += "src=\"#{@specificUrl}\"></script>"
setupCoffeescript: ->
?= .coffeescript or require 'coffee-script'
setupTypescript: ->
?= .typescript or require 'node-typescript'