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