| 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;
 |