35 lines
1.3 KiB
JavaScript
35 lines
1.3 KiB
JavaScript
/**
|
|
* @param baseConfig Config where other config will be merged into. This object will be mutated.
|
|
* @param configExtension Partial config to merge into the `baseConfig`.
|
|
*/
|
|
function mergeConfigs(baseConfig, configExtension) {
|
|
for (var key in configExtension) {
|
|
mergePropertyRecursively(baseConfig, key, configExtension[key]);
|
|
}
|
|
return baseConfig;
|
|
}
|
|
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
var overrideTypes = /*#__PURE__*/new Set(['string', 'number', 'boolean']);
|
|
function mergePropertyRecursively(baseObject, mergeKey, mergeValue) {
|
|
if (!hasOwnProperty.call(baseObject, mergeKey) || overrideTypes.has(typeof mergeValue) || mergeValue === null) {
|
|
baseObject[mergeKey] = mergeValue;
|
|
return;
|
|
}
|
|
if (Array.isArray(mergeValue) && Array.isArray(baseObject[mergeKey])) {
|
|
baseObject[mergeKey] = baseObject[mergeKey].concat(mergeValue);
|
|
return;
|
|
}
|
|
if (typeof mergeValue === 'object' && typeof baseObject[mergeKey] === 'object') {
|
|
if (baseObject[mergeKey] === null) {
|
|
baseObject[mergeKey] = mergeValue;
|
|
return;
|
|
}
|
|
for (var nextKey in mergeValue) {
|
|
mergePropertyRecursively(baseObject[mergeKey], nextKey, mergeValue[nextKey]);
|
|
}
|
|
}
|
|
}
|
|
|
|
export { mergeConfigs };
|
|
//# sourceMappingURL=merge-configs.mjs.map
|