@ts-dev-tools/core
Version:
TS dev tools Core
58 lines (57 loc) • 2.13 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.PackageJsonMerge = void 0;
var PackageJsonMerge = /** @class */ (function () {
function PackageJsonMerge() {
}
PackageJsonMerge.merge = function (source, update) {
return PackageJsonMerge.mergeObjects(source, update);
};
PackageJsonMerge.mergeValues = function (source, update) {
if (source === undefined) {
return update;
}
if (!PackageJsonMerge.typesEqual(source, update)) {
throw new Error("Unable to merge package json value because types are different");
}
// Deal with arrays
if (Array.isArray(update)) {
return PackageJsonMerge.mergeArrays(source, update);
}
// Deal with objects
if (typeof update === "object") {
return PackageJsonMerge.mergeObjects(source, update);
}
return update;
};
PackageJsonMerge.mergeObjects = function (source, update) {
for (var updateKey in update) {
if (!Object.prototype.hasOwnProperty.call(update, updateKey)) {
continue;
}
var updateValue = update[updateKey];
var sourceValue = Object.prototype.hasOwnProperty.call(source, updateKey)
? source[updateKey]
: undefined;
source[updateKey] = PackageJsonMerge.mergeValues(sourceValue, updateValue);
}
return source;
};
PackageJsonMerge.mergeArrays = function (source, update) {
for (var _i = 0, update_1 = update; _i < update_1.length; _i++) {
var item = update_1[_i];
if (!source.includes(item)) {
source.push(item);
}
}
return source;
};
PackageJsonMerge.typesEqual = function (sourceValue, updateValue) {
if (Array.isArray(sourceValue) && !Array.isArray(updateValue)) {
return false;
}
return typeof sourceValue === typeof updateValue;
};
return PackageJsonMerge;
}());
exports.PackageJsonMerge = PackageJsonMerge;
;