text: import { isObject } from './is.js';
  export const validateAndMerge = (...sources) => {
      for (const source of sources) {
          if ((!isObject(source) || Array.isArray(source)) && typeof source !== 'undefined') {
              throw new TypeError('The `options` argument must be an object');
          }
      }
      return deepMerge({}, ...sources);
  };
  export const mergeHeaders = (source1 = {}, source2 = {}) => {
      const result = new globalThis.Headers(source1);
      const isHeadersInstance = source2 instanceof globalThis.Headers;
      const source = new globalThis.Headers(source2);
      for (const [key, value] of source.entries()) {
          if ((isHeadersInstance && value === 'undefined') || value === undefined) {
              result.delete(key);
          }
          else {
              result.set(key, value);
          }
      }
      return result;
  };
  // TODO: Make this strongly-typed (no `any`).
  export const deepMerge = (...sources) => {
      let returnValue = {};
      let headers = {};
      for (const source of sources) {
          if (Array.isArray(source)) {
              if (!Array.isArray(returnValue)) {
                  returnValue = [];
              }
              returnValue = [...returnValue, ...source];
          }
          else if (isObject(source)) {
              for (let [key, value] of Object.entries(source)) {
                  if (isObject(value) && key in returnValue) {
                      value = deepMerge(returnValue[key], value);
                  }
                  returnValue = { ...returnValue, [key]: value };
              }
              if (isObject(source.headers)) {
                  headers = mergeHeaders(headers, source.headers);
                  returnValue.headers = headers;
              }
          }
      }
      return returnValue;
  };
  //# sourceMappingURL=merge.js.map