You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.6 KiB

fs = require 'fs'
{exec,spawn} = require 'child_process'
util = require 'util'
glob = require 'glob'
sources = [
sourcestring = ""
for source in sources
sourcestring += 'src/'+source+' '
task 'watch', 'Watch source files and build changes', ->
watch = spawn "node_modules/coffeescript/bin/coffee", ['-c', '-w', '-m', '--no-header', '-j', 'lib/index.js', sourcestring]
watch.stdout.on 'data', (data) -> console.log data.toString().trim()
task 'compile', 'Compile all CoffeeScript files', ->
# prepare lib directory
if not fs.existsSync 'lib'
fs.mkdirSync 'lib'
files = glob.sync('src/mappings/*.json')
mappings = []
for file in files
data = JSON.parse(fs.readFileSync(file))
mappings.push data
fs.writeFileSync('lib/mappings.json', JSON.stringify(mappings))
# run coffee-script compile
exec "cat #{sourcestring} > lib/"
exec "node_modules/coffeescript/bin/coffee --compile --map --no-header lib/", (err, stdout, stderr) ->
if err
util.log err
process.exit 1 # abort npm packaging
fs.unlink("lib/", () -> )
util.log "Compiled CoffeeScript."
task 'build', 'Compile and minify all CoffeeScript files', ->
invoke 'compile'
exec 'closure-compiler --compilation_level ECMASCRIPT5 --compilation_level SIMPLE --create_source_map=lib/ --js_output_file lib/index.min.js lib/index.js', (err) ->
if err
util.log err
process.exit 1 # abort npm packaging
fs.appendFileSync('lib/index.min.js', "\n//#")
util.log "Minified JavaScript."