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.
		
		
		
		
		
			
		
			
				
					82 lines
				
				1.7 KiB
			
		
		
			
		
	
	
					82 lines
				
				1.7 KiB
			| 
											3 years ago
										 | const conversions = require('./conversions'); | ||
|  | const route = require('./route'); | ||
|  | 
 | ||
|  | const convert = {}; | ||
|  | 
 | ||
|  | const models = Object.keys(conversions); | ||
|  | 
 | ||
|  | function wrapRaw(fn) { | ||
|  | 	const wrappedFn = function (...args) { | ||
|  | 		const arg0 = args[0]; | ||
|  | 		if (arg0 === undefined || arg0 === null) { | ||
|  | 			return arg0; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (arg0.length > 1) { | ||
|  | 			args = arg0; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return fn(args); | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	// Preserve .conversion property if there is one
 | ||
|  | 	if ('conversion' in fn) { | ||
|  | 		wrappedFn.conversion = fn.conversion; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	return wrappedFn; | ||
|  | } | ||
|  | 
 | ||
|  | function wrapRounded(fn) { | ||
|  | 	const wrappedFn = function (...args) { | ||
|  | 		const arg0 = args[0]; | ||
|  | 
 | ||
|  | 		if (arg0 === undefined || arg0 === null) { | ||
|  | 			return arg0; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (arg0.length > 1) { | ||
|  | 			args = arg0; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		const result = fn(args); | ||
|  | 
 | ||
|  | 		// We're assuming the result is an array here.
 | ||
|  | 		// see notice in conversions.js; don't use box types
 | ||
|  | 		// in conversion functions.
 | ||
|  | 		if (typeof result === 'object') { | ||
|  | 			for (let len = result.length, i = 0; i < len; i++) { | ||
|  | 				result[i] = Math.round(result[i]); | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return result; | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	// Preserve .conversion property if there is one
 | ||
|  | 	if ('conversion' in fn) { | ||
|  | 		wrappedFn.conversion = fn.conversion; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	return wrappedFn; | ||
|  | } | ||
|  | 
 | ||
|  | models.forEach(fromModel => { | ||
|  | 	convert[fromModel] = {}; | ||
|  | 
 | ||
|  | 	Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); | ||
|  | 	Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); | ||
|  | 
 | ||
|  | 	const routes = route(fromModel); | ||
|  | 	const routeModels = Object.keys(routes); | ||
|  | 
 | ||
|  | 	routeModels.forEach(toModel => { | ||
|  | 		const fn = routes[toModel]; | ||
|  | 
 | ||
|  | 		convert[fromModel][toModel] = wrapRounded(fn); | ||
|  | 		convert[fromModel][toModel].raw = wrapRaw(fn); | ||
|  | 	}); | ||
|  | }); | ||
|  | 
 | ||
|  | module.exports = convert; |