UNPKG

1.79 kBJavaScriptView Raw
1import { isObject } from './is.js';
2export const validateAndMerge = (...sources) => {
3 for (const source of sources) {
4 if ((!isObject(source) || Array.isArray(source)) && typeof source !== 'undefined') {
5 throw new TypeError('The `options` argument must be an object');
6 }
7 }
8 return deepMerge({}, ...sources);
9};
10export const mergeHeaders = (source1 = {}, source2 = {}) => {
11 const result = new globalThis.Headers(source1);
12 const isHeadersInstance = source2 instanceof globalThis.Headers;
13 const source = new globalThis.Headers(source2);
14 for (const [key, value] of source.entries()) {
15 if ((isHeadersInstance && value === 'undefined') || value === undefined) {
16 result.delete(key);
17 }
18 else {
19 result.set(key, value);
20 }
21 }
22 return result;
23};
24// TODO: Make this strongly-typed (no `any`).
25export const deepMerge = (...sources) => {
26 let returnValue = {};
27 let headers = {};
28 for (const source of sources) {
29 if (Array.isArray(source)) {
30 if (!Array.isArray(returnValue)) {
31 returnValue = [];
32 }
33 returnValue = [...returnValue, ...source];
34 }
35 else if (isObject(source)) {
36 for (let [key, value] of Object.entries(source)) {
37 if (isObject(value) && key in returnValue) {
38 value = deepMerge(returnValue[key], value);
39 }
40 returnValue = { ...returnValue, [key]: value };
41 }
42 if (isObject(source.headers)) {
43 headers = mergeHeaders(headers, source.headers);
44 returnValue.headers = headers;
45 }
46 }
47 }
48 return returnValue;
49};
50//# sourceMappingURL=merge.js.map
\No newline at end of file