shortcake
Version:
Asynchronous invoke and other goodies for cake.
38 lines (29 loc) • 1.07 kB
text/coffeescript
import cake from './cake'
import log from './log'
import tasks from './tasks'
import {isArray, isFunction} from './utils'
export default (name, description, deps, action) ->
# No description, just deps
if isArray description
action = deps if isFunction deps
[description, deps] = ['', description]
# If we're passed name, action
if isFunction description
[action, description, deps] = [description, '', []]
# No dependencies specified, ex: `task 'name', 'description', ->`
if isFunction deps
[action, deps] = [deps, []]
# Missing task function (body), ex: `task 'name', 'description', ['1','2','3']`
unless isFunction action
action = ->
# Store reference for ourselves
tasks[name] =
name: name
description: description
deps: deps
action: action
log.debug 'added task', tasks[name]
# Make sure original plumbing still works, inject our shim task
cake.task name, description, (options) ->
# Capture result of options for our own `invoke`
tasks[name].options = options