piral-cli
Version:
The standard CLI for creating and building a Piral instance or a Pilet.
62 lines • 1.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.deepMerge = deepMerge;
function isMergeableObject(val) {
const nonNullObject = val && typeof val === 'object';
return (nonNullObject &&
Object.prototype.toString.call(val) !== '[object RegExp]' &&
Object.prototype.toString.call(val) !== '[object Date]');
}
function emptyTarget(val) {
return Array.isArray(val) ? [] : {};
}
function cloneIfNecessary(value) {
switch (typeof value) {
case 'boolean':
case 'number':
case 'string':
case 'symbol':
case 'undefined':
return value;
}
return deepMerge(emptyTarget(value), value);
}
function defaultArrayMerge(target, source) {
const destination = target.slice();
source.forEach((e, i) => {
if (typeof destination[i] === 'undefined') {
destination[i] = cloneIfNecessary(e);
}
else if (isMergeableObject(e)) {
destination[i] = deepMerge(target[i], e);
}
else if (target.indexOf(e) === -1) {
destination.push(cloneIfNecessary(e));
}
});
return destination;
}
function mergeObject(target, source) {
const destination = {};
if (isMergeableObject(target)) {
Object.keys(target).forEach((key) => {
destination[key] = cloneIfNecessary(target[key]);
});
}
Object.keys(source).forEach((key) => {
if (!isMergeableObject(source[key]) || !target[key]) {
destination[key] = cloneIfNecessary(source[key]);
}
else {
destination[key] = deepMerge(target[key], source[key]);
}
});
return destination;
}
function deepMerge(target, source) {
if (Array.isArray(source)) {
return Array.isArray(target) ? defaultArrayMerge(target, source) : cloneIfNecessary(source);
}
return mergeObject(target, source);
}
//# sourceMappingURL=merge.js.map