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.
81 lines
1.7 KiB
81 lines
1.7 KiB
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;
|
|
|