function isPlainObject(value) {
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
return false;
}
const proto = Object.getPrototypeOf(value);
return proto === Object.prototype || proto === null;
}
export default function promiseMerge(promiseA, promiseB) {
return Promise.all([promiseA, promiseB]).then(([valueA, valueB]) => {
if (typeof valueA === 'number' && typeof valueB === 'number') {
return valueA + valueB;
}
if (typeof valueA === 'string' && typeof valueB === 'string') {
return valueA + valueB;
}
if (Array.isArray(valueA) && Array.isArray(valueB)) {
return [...valueA, ...valueB];
}
if (isPlainObject(valueA) && isPlainObject(valueB)) {
return {...valueA, ...valueB};
}
throw 'Unsupported data types';
});
}