/lib/coffee-compile.coffee
CoffeeScript | 78 lines | 65 code | 4 blank | 9 comment | 14 complexity | 9adde013cf8ff60290b05c38e65951f3 MD5 | raw file
- # Generated by CoffeeScript 1.3.3
- coffeeScript = require("coffee-script")
- fs = require("fs")
- path = require("path")
- url = require("url")
- clone = (src) ->
- if src is Object(src)
- if toString.call(src) is "[object Array]"
- src.slice()
- else
- obj = {}
- _results = []
- val = _i = 0
- _len = src.length
- while _i < _len
- prop = src[val]
- _results.push obj[prop] = src[prop]
- val = ++_i
- _results
- #
- #
- #A simple connect middleware to serve CoffeeScript files.
- #
- #@param {Object} options
- #@return {Function}
- #@api public
- #
- module.exports = (options) ->
- options = {} unless options?
- options = src: options if typeof options is "string"
- baseDir = options.baseDir or process.cwd()
- src = options.src
- throw new Error("Coffeescript middleware requires \"src\" directory") unless src
- src = path.resolve(baseDir, src)
- dest = (if options.dest then options.dest else src)
- dest = path.resolve(baseDir, dest)
- unless (_ref = options.compile)?
- options.compile = (str, options) ->
- coffeeScript.compile str, clone(options)
- (req, res, next) ->
- return next() if "GET" isnt req.method and "HEAD" isnt req.method
- pathname = url.parse(req.url).pathname
- if /\.js$/.test(pathname)
- jsPath = path.join(dest, pathname)
- coffeePath = path.join(src, pathname.replace(".js", ".coffee"))
- error = (err) ->
- arg = (if "ENOENT" is err.code then null else err)
- next arg
- compile = ->
- fs.readFile coffeePath, "utf8", (err, str) ->
- return error(err) if err
- try
- js = options.compile(str, options)
- catch err
- return next(err)
- res.setHeader "Content-Type", "text/javascript"
- res.send js
- return
- return compile() if options.force
- fs.stat coffeePath, (err, coffeeStats) ->
- return error(err) if err
- fs.stat jsPath, (err, jsStats) ->
- if err
- if "ENOENT" is err.code
- compile()
- else
- next err
- else
- if coffeeStats.mtime > jsStats.mtime
- compile()
- else
- next()
- else
- next()