43 lines
		
	
	
		
			821 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			821 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var assert = require('assert');
 | |
| 
 | |
| var metadata = require('./helpers/metadata');
 | |
| 
 | |
| function set(name, fn) {
 | |
|   assert(name, 'Task name must be specified');
 | |
|   assert(typeof name === 'string', 'Task name must be a string');
 | |
|   assert(typeof fn === 'function', 'Task function must be specified');
 | |
| 
 | |
|   function taskWrapper() {
 | |
|     return fn.apply(this, arguments);
 | |
|   }
 | |
| 
 | |
|   function unwrap() {
 | |
|     return fn;
 | |
|   }
 | |
| 
 | |
|   taskWrapper.unwrap = unwrap;
 | |
|   taskWrapper.displayName = name;
 | |
| 
 | |
|   var meta = metadata.get(fn) || {};
 | |
|   var nodes = [];
 | |
|   if (meta.branch) {
 | |
|     nodes.push(meta.tree);
 | |
|   }
 | |
| 
 | |
|   var task = this._registry.set(name, taskWrapper) || taskWrapper;
 | |
| 
 | |
|   metadata.set(task, {
 | |
|     name: name,
 | |
|     orig: fn,
 | |
|     tree: {
 | |
|       label: name,
 | |
|       type: 'task',
 | |
|       nodes: nodes,
 | |
|     },
 | |
|   });
 | |
| }
 | |
| 
 | |
| module.exports = set;
 |