79 lines
1.7 KiB
JavaScript
79 lines
1.7 KiB
JavaScript
|
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;
|