2
0
Fork 0
tcrud/lib/config-util.js
2017-06-10 16:53:29 +02:00

101 lines
2.5 KiB
JavaScript

var cloneImpl = require('clone');
var debug = require('debug')('ff:tcrud:config:util');
var configRegistry = require('./config-registry');
var mod = (function () {
var clone = function(obj) {
return cloneImpl(obj);
};
var filterValuePart = function(value,replaceChar,splitChar,partFn) {
var result = '';
var parts = value.split(splitChar);
for (var i = 0; i < parts.length; i++) {
var part = parts[i];
if (part.length > 1) {
result += partFn(part);
} else {
result += part;
}
if (i < parts.length - 1) {
result += replaceChar;
}
}
return result;
};
var copyByTemplate = function(prefix,objectDest,objectSrc,copyTemplate) {
var keys = Object.keys(copyTemplate);
var result = [];
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var value = objectSrc[key];
if (value === null) {
//debug('copyByTemplate '+prefix+'.'+key+' src object has null value.');
objectDest[key] = null;
continue; // no src value
}
var templateValue = copyTemplate[key];
if (templateValue === null) {
if (objectDest[key] !== null) {
//debug('copyByTemplate '+prefix+'.'+key+' has own value: '+objectDest[key]);
continue;
} else {
//debug('copyByTemplate '+prefix+'.'+key+' copy value: '+value);
objectDest[key] = clone(value);
}
} else {
if (objectDest[key] === undefined) {
objectDest[key] = clone(templateValue);
} else {
//debug('copyByTemplate '+prefix+'.'+key+' going deeper');
copyByTemplate(prefix+'.'+key,objectDest[key],value,templateValue)
}
}
}
};
var countTree = function(obj,result) {
if (typeof obj === 'object') {
for (var key in obj) {
result.keys++;
countTree(obj[key],result)
}
} else {
result.values++;
}
};
return function ConfigUtil() {
this.countTree = countTree;
this.copyByTemplate = copyByTemplate;
this.clone = clone;
this.filterValue = function(value,removeChars,replaceChar,partFn) {
var valueOrg = value;
for (var i = 0; i < removeChars.length; i++) {
value = filterValuePart(value,replaceChar,removeChars[i],partFn);
}
//debug('filterValue.result: %s from: %s',value,valueOrg);
return value;
};
this.stringHash = function (str) {
var hash = 31; // prime
for (var i = 0; i < str.length; i++) {
hash = ((hash<<5)-hash)+str.charCodeAt(i);
hash = hash & hash; // keep 32b
}
return hash;
};
};
})();
module.exports = new mod();