UNPKG

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
"use strict"; 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;