# This file was originally created by Benjamin Lupton (http://balupton.com) # and is currently licensed under the Creative Commons Zero (http://creativecommons.org/publicdomain/zero/1.0/) # making it public domain so you can do whatever you wish with it without worry (you can even remove this notice!) # # If you change something here, be sure to reflect the changes in: # - the scripts section of the package.json file # - the .travis.yml file # ----------------- # Variables WINDOWS = process.platform.indexOf('win') is 0 NODE = process.execPath NPM = if WINDOWS then process.execPath.replace('node.exe','npm.cmd') else 'npm' EXT = (if WINDOWS then '.cmd' else '') APP = process.cwd() BIN = "#{APP}/node_modules/.bin" CAKE = "#{BIN}/cake#{EXT}" COFFEE = "#{BIN}/coffee#{EXT}" OUT = "#{APP}/out" SRC = "#{APP}/src" TEST = "#{APP}/test" # ----------------- # Requires pathUtil = require('path') {exec,spawn} = require('child_process') safe = (next,fn) -> return (err) -> return next(err) if err return fn() # ----------------- # Actions clean = (opts,next) -> (next = opts; opts = {}) unless next? args = [ '-Rf' OUT pathUtil.join(APP,'node_modules') pathUtil.join(APP,'*out') pathUtil.join(APP,'*log') pathUtil.join(TEST,'node_modules') pathUtil.join(TEST,'*out') pathUtil.join(TEST,'*log') ] spawn('rm', args, {stdio:'inherit',cwd:APP}).on('exit',next) compile = (opts,next) -> (next = opts; opts = {}) unless next? spawn(COFFEE, ['-bco', OUT, SRC], {stdio:'inherit',cwd:APP}).on('exit',next) watch = (opts,next) -> (next = opts; opts = {}) unless next? spawn(COFFEE, ['-bwco', OUT, SRC], {stdio:'inherit',cwd:APP}).on('exit',next) install = (opts,next) -> (next = opts; opts = {}) unless next? spawn(NPM, ['install'], {stdio:'inherit',cwd:APP}).on 'exit', safe next, -> spawn(NPM, ['install'], {stdio:'inherit',cwd:TEST}).on('exit',next) reset = (opts,next) -> (next = opts; opts = {}) unless next? clean opts, safe next, -> install opts, safe next, -> compile opts, next setup = (opts,next) -> (next = opts; opts = {}) unless next? install opts, safe next, -> compile opts, next test = (opts,next) -> (next = opts; opts = {}) unless next? spawn(NPM, ['test'], {stdio:'inherit',cwd:APP}).on('exit',next) finish = (err) -> throw err if err console.log('OK') # ----------------- # Commands # clean task 'clean', 'clean up instance', -> clean finish # compile task 'compile', 'compile our files', -> compile finish # dev/watch task 'dev', 'watch and recompile our files', -> watch finish task 'watch', 'watch and recompile our files', -> watch finish # install task 'install', 'install dependencies', -> install finish # reset task 'reset', 'reset instance', -> reset finish # setup task 'setup', 'setup for development', -> setup finish # test task 'test', 'run our tests', -> test finish # test-debug task 'test-debug', 'run our tests in debug mode', -> test {debug:true}, finish # test-prepare task 'test-prepare', 'prepare out tests', -> setup finish