curli-config
Version:
A small library to load/validate configuration files placed in different sides of the application using environments
63 lines (62 loc) • 2.01 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var TypeOfValue;
(function (TypeOfValue) {
TypeOfValue["isArray"] = "array";
TypeOfValue["isObject"] = "object";
TypeOfValue["isOther"] = "other";
})(TypeOfValue || (TypeOfValue = {}));
class MergeValues {
getTypeOfValue(value) {
let type;
if (Array.isArray(value)) {
type = TypeOfValue.isArray;
}
else if (value && typeof value === 'object' && value.constructor === Object) {
type = TypeOfValue.isObject;
}
else {
type = TypeOfValue.isOther;
}
return type;
}
mergeObjects(value1, value2) {
for (const key in value2) {
if (value1.hasOwnProperty(key)) {
value1[key] = this.mergeValues(value1[key], value2[key]);
}
else {
value1[key] = value2[key];
}
}
return value1;
}
mergeArrays(value1, value2) {
value2.forEach((value) => {
if (value1.indexOf(value) === -1) {
value1.push(value);
}
});
return value1;
}
mergeValues(value1, value2) {
let valueToReturn;
const typeValue1 = this.getTypeOfValue(value1);
const typeValue2 = this.getTypeOfValue(value2);
if (typeValue1 === TypeOfValue.isObject && typeValue2 === TypeOfValue.isObject) {
valueToReturn = this.mergeObjects(value1, value2);
}
else if (typeValue1 === TypeOfValue.isArray && typeValue2 === TypeOfValue.isArray) {
valueToReturn = this.mergeArrays(value1, value2);
}
else {
valueToReturn = value2;
}
return valueToReturn;
}
}
function mergeValues(value1, value2) {
const instance = new MergeValues();
return instance.mergeValues(value1, value2);
}
exports.mergeValues = mergeValues;
;