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.
		
		
		
		
		
			
		
			
				
					
					
						
							73 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							73 lines
						
					
					
						
							2.0 KiB
						
					
					
				
 | 
						|
var thenify = require('thenify') | 
						|
 | 
						|
module.exports = thenifyAll | 
						|
thenifyAll.withCallback = withCallback | 
						|
thenifyAll.thenify = thenify | 
						|
 | 
						|
/** | 
						|
 * Promisifies all the selected functions in an object. | 
						|
 * | 
						|
 * @param {Object} source the source object for the async functions | 
						|
 * @param {Object} [destination] the destination to set all the promisified methods | 
						|
 * @param {Array} [methods] an array of method names of `source` | 
						|
 * @return {Object} | 
						|
 * @api public | 
						|
 */ | 
						|
 | 
						|
function thenifyAll(source, destination, methods) { | 
						|
  return promisifyAll(source, destination, methods, thenify) | 
						|
} | 
						|
 | 
						|
/** | 
						|
 * Promisifies all the selected functions in an object and backward compatible with callback. | 
						|
 * | 
						|
 * @param {Object} source the source object for the async functions | 
						|
 * @param {Object} [destination] the destination to set all the promisified methods | 
						|
 * @param {Array} [methods] an array of method names of `source` | 
						|
 * @return {Object} | 
						|
 * @api public | 
						|
 */ | 
						|
 | 
						|
function withCallback(source, destination, methods) { | 
						|
  return promisifyAll(source, destination, methods, thenify.withCallback) | 
						|
} | 
						|
 | 
						|
function promisifyAll(source, destination, methods, promisify) { | 
						|
  if (!destination) { | 
						|
    destination = {}; | 
						|
    methods = Object.keys(source) | 
						|
  } | 
						|
 | 
						|
  if (Array.isArray(destination)) { | 
						|
    methods = destination | 
						|
    destination = {} | 
						|
  } | 
						|
 | 
						|
  if (!methods) { | 
						|
    methods = Object.keys(source) | 
						|
  } | 
						|
 | 
						|
  if (typeof source === 'function') destination = promisify(source) | 
						|
 | 
						|
  methods.forEach(function (name) { | 
						|
    // promisify only if it's a function | 
						|
    if (typeof source[name] === 'function') destination[name] = promisify(source[name]) | 
						|
  }) | 
						|
 | 
						|
  // proxy the rest | 
						|
  Object.keys(source).forEach(function (name) { | 
						|
    if (deprecated(source, name)) return | 
						|
    if (destination[name]) return | 
						|
    destination[name] = source[name] | 
						|
  }) | 
						|
 | 
						|
  return destination | 
						|
} | 
						|
 | 
						|
function deprecated(source, name) { | 
						|
  var desc = Object.getOwnPropertyDescriptor(source, name) | 
						|
  if (!desc || !desc.get) return false | 
						|
  if (desc.get.name === 'deprecated') return true | 
						|
  return false | 
						|
}
 | 
						|
 |