glass-platform
Version:
Glass platform
76 lines (71 loc) • 2.83 kB
text/coffeescript
require '../global'
fs = require 'fs'
np = require 'path'
util = require './utility'
watcher = require './watcher'
browserBuild = require 'browser-build'
check = (config) ->
throw new Error "config.coffee.input is required" unless config.coffee.input?
throw new Error "config.coffee.output is required" unless config.coffee.output?
if config.browser?
config.browser.input ?= {}
config.browser.input[config.coffee.output] ?= config.name
config.browser.output ?= "browser"
return
build = (config, callback) ->
util.spawn "coffee.cmd -c -m -o #{config.coffee.output} #{config.coffee.input}", callback
runTest = (config, callback) ->
list = util.list config.coffee.output, {include:".js"}
util.spawn "mocha.cmd --harmony -R spec #{list.join ' '}", callback
# util.spawn "mocha.cmd --recursive -R spec -g unitTest* -u exports #{config.coffee.output}", callback
watchCompile = (config) ->
util.spawn "coffee.cmd -w -m -c -o #{config.coffee.output} #{config.coffee.input}"
if config.browser?
browserBuild.watch config.browser
watchTest = (config) ->
# use a directory watcher to invoke nodeunit tests
debouncedRunTest = (->
runTest config
).debounce(500)
options =
filter: ".js"
initial: false
watcher.watchDirectory config.coffee.output, options, debouncedRunTest
getPackageJson = (config) ->
path = np.join(config.coffee.output, 'package.json')
JSON.parse fs.readFileSync(path, 'utf8')
module.exports = exports =
# builds this project
build: (config, callback) ->
check config
build config, ->
if config.browser?
browserBuild.build config.browser
runTest config, callback
# watches input and incrementally builds output
watch: (config) ->
check config
watchCompile config
watchTest config
# maybe start a web server
if config.browser?.port?
util.startWebServer
root: config.browser.output.directory
port: config.browser.port
# runs our unit tests
test: (config, callback) ->
check config
runTest config, callback
# runs npm publish on the output library
publish: (config) ->
util.spawn "npm.cmd publish #{config.coffee.output}"
# bumps the package.json build version number
bump: (config) ->
pj = getPackageJson config
version = pj.version.split '.'
# bump the build version
version[2] = parseInt(version[2]) + 1
version = version.join '.'
util.spawn "npm.cmd version #{version}", {cwd:config.coffee.output}, ->
# now publish it
exports.publish config