Permalink
Fetching contributors…
Cannot retrieve contributors at this time
95 lines (67 sloc) 2.37 KB
# oriDomi Cakefile
# Dan Motzenbecker
fs = require 'fs'
cp = require 'child_process'
binPath = './node_modules/.bin/'
exec = (cmd, cb) ->
cp.exec binPath + cmd, cb
spawn = (cmd, args) ->
cp.spawn binPath + cmd, args
tgthr = (fns, cb) ->
res = {}
out = (k) -> ->
delete fns[k]
res[k] = arguments
cb res unless Object.keys(fns).length
v out k for k, v of fns
startWatcher = (bin, args) ->
watcher = spawn bin, args?.split ' '
watcher.stdout.pipe process.stdout
watcher.stderr.pipe process.stderr
announce = (name, fn) -> ->
console.log "Running #{ name }..."
fn.apply @, arguments
print = (cb) ->
(err, stdout, stderr) ->
throw err if err
console.log stdout, stderr
cb?.apply @, arguments
build = (cb) ->
tgthr
compile: (cb) -> compile null, -> minify null, cb
docs: (cb) -> docs null, cb
demo: (cb) -> demo null, cb
, ->
console.log 'Build succeeded.'
stats()
cb?()
watch = ->
startWatcher.apply @, pair for pair in [
['coffee', '-mwc oridomi.coffee']
['coffee', '-mwc demo/demo.coffee']
['stylus', '-u nib -w demo/demo.styl']
]
stats = ->
tgthr
coffee: (cb) -> fs.stat 'oridomi.coffee', cb
js: (cb) -> fs.stat 'oridomi.js', cb
mini: (cb) -> fs.stat 'oridomi.min.js', cb
, (stats) -> console.log "#{ key }:\t#{ stat[1].size } B" for key, stat of stats
compile = announce 'compile', (args, cb) ->
exec 'coffee -mc oridomi.coffee', print cb
minify = announce 'minify', (args, cb) ->
exec 'uglifyjs --screw-ie8 -c unused=false -vmo oridomi.min.js oridomi.js', print cb
docs = announce 'docs', (args, cb) ->
exec 'docco oridomi.coffee', print cb
demo = announce 'demo', (args, cb) ->
tgthr
coffee: (cb) -> exec 'coffee -mc demo/demo.coffee', print cb
styl: (cb) -> exec 'stylus -u nib demo/demo.styl', print cb
, -> cb null
task 'build', 'compile, minify, and generate annotated source', build
task 'watch', 'compile continuously', watch
task 'compile', 'compile .coffee to .js', compile
task 'minify', 'compress .js for production', minify
task 'docs', 'generate annotated source page in ./docs', docs
task 'stats', 'output filesize stats', stats
task 'demo', 'compile doc site .coffee and .styl', demo