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.
78 lines
1.7 KiB
78 lines
1.7 KiB
var conversions = require('./conversions'); |
|
var route = require('./route'); |
|
|
|
var convert = {}; |
|
|
|
var models = Object.keys(conversions); |
|
|
|
function wrapRaw(fn) { |
|
var wrappedFn = function (args) { |
|
if (args === undefined || args === null) { |
|
return args; |
|
} |
|
|
|
if (arguments.length > 1) { |
|
args = Array.prototype.slice.call(arguments); |
|
} |
|
|
|
return fn(args); |
|
}; |
|
|
|
// preserve .conversion property if there is one |
|
if ('conversion' in fn) { |
|
wrappedFn.conversion = fn.conversion; |
|
} |
|
|
|
return wrappedFn; |
|
} |
|
|
|
function wrapRounded(fn) { |
|
var wrappedFn = function (args) { |
|
if (args === undefined || args === null) { |
|
return args; |
|
} |
|
|
|
if (arguments.length > 1) { |
|
args = Array.prototype.slice.call(arguments); |
|
} |
|
|
|
var 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 (var 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(function (fromModel) { |
|
convert[fromModel] = {}; |
|
|
|
Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); |
|
Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); |
|
|
|
var routes = route(fromModel); |
|
var routeModels = Object.keys(routes); |
|
|
|
routeModels.forEach(function (toModel) { |
|
var fn = routes[toModel]; |
|
|
|
convert[fromModel][toModel] = wrapRounded(fn); |
|
convert[fromModel][toModel].raw = wrapRaw(fn); |
|
}); |
|
}); |
|
|
|
module.exports = convert;
|
|
|