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