{"version":3,"file":"wretch.min.cjs","sources":["../../src/constants.ts","../../src/utils.ts","../../src/config.ts","../../src/resolver.ts","../../src/middleware.ts","../../src/core.ts","../../src/index.ts"],"sourcesContent":["export const JSON_MIME = \"application/json\"\nexport const CONTENT_TYPE_HEADER = \"Content-Type\"\nexport const FETCH_ERROR = Symbol()","import { CONTENT_TYPE_HEADER } from \"./constants.js\"\n\nexport function extractContentType(headers: HeadersInit = {}): string | undefined {\n  return Object.entries(headers).find(([k]) =>\n    k.toLowerCase() === CONTENT_TYPE_HEADER.toLowerCase()\n  )?.[1]\n}\n\nexport function isLikelyJsonMime(value: string): boolean {\n  return /^application\\/.*json.*/.test(value)\n}\n\nexport const mix = function (one: object, two: object, mergeArrays: boolean = false) {\n  return Object.entries(two).reduce((acc, [key, newValue]) => {\n    const value = one[key]\n    if (Array.isArray(value) && Array.isArray(newValue)) {\n      acc[key] = mergeArrays ? [...value, ...newValue] : newValue\n    } else if (typeof value === \"object\" && typeof newValue === \"object\") {\n      acc[key] = mix(value, newValue, mergeArrays)\n    } else {\n      acc[key] = newValue\n    }\n\n    return acc\n  }, { ...one })\n}\n","import { mix } from \"./utils.js\"\nimport type { Config } from \"./types.js\"\n\ndeclare const global\n\nconst config: Config = {\n  // Default options\n  options: {},\n  // Error type\n  errorType: \"text\",\n  // Polyfills\n  polyfills: {\n    // fetch: null,\n    // FormData: null,\n    // URLSearchParams: null,\n    // performance: null,\n    // PerformanceObserver: null,\n    // AbortController: null\n  },\n  polyfill(p: string, doThrow: boolean = true, instance: boolean = false, ...args: any[]) {\n    const res = this.polyfills[p] ||\n      (typeof self !== \"undefined\" ? self[p] : null) ||\n      (typeof global !== \"undefined\" ? global[p] : null)\n    if (doThrow && !res) throw new Error(p + \" is not defined\")\n    return instance && res ? new res(...args) : res\n  }\n}\n\n/**\n * Sets the default fetch options that will be stored internally when instantiating wretch objects.\n *\n * ```js\n * import wretch from \"wretch\"\n *\n * wretch.options({ headers: { \"Accept\": \"application/json\" } });\n *\n * // The fetch request is sent with both headers.\n * wretch(\"...\", { headers: { \"X-Custom\": \"Header\" } }).get().res();\n * ```\n *\n * @param options Default options\n * @param replace If true, completely replaces the existing options instead of mixing in\n */\nexport function setOptions(options: object, replace = false) {\n  config.options = replace ? options : mix(config.options, options)\n}\n\n/**\n * Sets the default polyfills that will be stored internally when instantiating wretch objects.\n * Useful for browserless environments like `node.js`.\n *\n * Needed for libraries like [fetch-ponyfill](https://github.com/qubyte/fetch-ponyfill).\n *\n * ```js\n * import wretch from \"wretch\"\n *\n * wretch.polyfills({\n *   fetch: require(\"node-fetch\"),\n *   FormData: require(\"form-data\"),\n *   URLSearchParams: require(\"url\").URLSearchParams,\n * });\n *\n * // Uses the above polyfills.\n * wretch(\"...\").get().res();\n * ```\n *\n * @param polyfills An object containing the polyfills\n * @param replace If true, replaces the current polyfills instead of mixing in\n */\nexport function setPolyfills(polyfills: object, replace = false) {\n  config.polyfills = replace ? polyfills : mix(config.polyfills, polyfills)\n}\n\n/**\n * Sets the default method (text, json, …) used to parse the data contained in the response body in case of an HTTP error.\n * As with other static methods, it will affect wretch instances created after calling this function.\n *\n * ```js\n * import wretch from \"wretch\"\n *\n * wretch.errorType(\"json\")\n *\n * wretch(\"http://server/which/returns/an/error/with/a/json/body\")\n *   .get()\n *   .res()\n *   .catch(error => {\n *     // error[errorType] (here, json) contains the parsed body\n *     console.log(error.json)\n *   })\n * ```\n *\n * If null, defaults to \"text\".\n */\nexport function setErrorType(errorType: string) {\n  config.errorType = errorType\n}\n\nexport default config\n","import { middlewareHelper } from \"./middleware.js\"\nimport { mix } from \"./utils.js\"\nimport type { Wretch, WretchResponse, WretchResponseChain, WretchError as WretchErrorType } from \"./types.js\"\nimport { FETCH_ERROR } from \"./constants.js\"\n\n/**\n * This class inheriting from Error is thrown when the fetch response is not \"ok\".\n * It extends Error and adds status, text and body fields.\n */\nexport class WretchError extends Error implements WretchErrorType {\n  status: number\n  response: WretchResponse\n  text?: string\n  json?: any\n}\n\nexport const resolver = <T, Chain, R>(wretch: T & Wretch<T, Chain, R>) => {\n  const {\n    _url: url,\n    _options: opts,\n    _config: config,\n    _catchers: _catchers,\n    _resolvers: resolvers,\n    _middlewares: middlewares,\n    _addons: addons\n  } = wretch\n\n  const catchers = new Map(_catchers)\n  const finalOptions = mix(config.options, opts)\n  addons.forEach(addon => addon.beforeRequest && addon.beforeRequest(wretch, finalOptions))\n  // The generated fetch request\n  const _fetchReq = middlewareHelper(middlewares)(config.polyfill(\"fetch\"))(url, finalOptions)\n  // Throws on an http error\n  const referenceError = new Error()\n  const throwingPromise: Promise<void | WretchResponse> = _fetchReq\n    .catch(error => {\n      throw { __wrap: error }\n    })\n    .then(response => {\n      if (!response.ok) {\n        const err = new WretchError()\n        // Enhance the error object\n        err[\"cause\"] = referenceError\n        err.stack = err.stack + \"\\nCAUSE: \" + referenceError.stack\n        err.response = response\n        if (response.type === \"opaque\") {\n          throw err\n        }\n        return response[config.errorType]().then((body: string) => {\n          err.message = body\n          err[config.errorType] = body\n          err[\"status\"] = response.status\n          throw err\n        })\n      }\n      return response\n    })\n  // Wraps the Promise in order to dispatch the error to a matching catcher\n  const catchersWrapper = <T>(promise: Promise<T>): Promise<void | T> => {\n    return promise.catch(err => {\n      const error = err.__wrap || err\n\n      const catcher =\n        err.__wrap && catchers.has(FETCH_ERROR) ? catchers.get(FETCH_ERROR) :\n          (catchers.get(error.status) || catchers.get(error.name))\n\n      if (catcher)\n        return catcher(error, wretch)\n\n      throw error\n    })\n  }\n  // Enforces the proper promise type when a body parsing method is called.\n  type BodyParser = <Type>(funName: string | null) => <Result = void>(cb?: (type: Type) => Result) => Promise<Awaited<Result>>\n  const bodyParser: BodyParser = funName => cb => funName ?\n    // If a callback is provided, then callback with the body result otherwise return the parsed body itself.\n    catchersWrapper(throwingPromise.then(_ => _ && _[funName]()).then(_ => cb ? cb(_) : _)) :\n    // No body parsing method - return the response\n    catchersWrapper(throwingPromise.then(_ => cb ? cb(_ as any) : _))\n\n  const responseChain: WretchResponseChain<T, Chain, R> = {\n    _wretchReq: wretch,\n    _fetchReq,\n    res: bodyParser<WretchResponse>(null),\n    json: bodyParser<any>(\"json\"),\n    blob: bodyParser<Blob>(\"blob\"),\n    formData: bodyParser<FormData>(\"formData\"),\n    arrayBuffer: bodyParser<ArrayBuffer>(\"arrayBuffer\"),\n    text: bodyParser<string>(\"text\"),\n    error(errorId, cb) {\n      catchers.set(errorId, cb)\n      return this\n    },\n    badRequest(cb) { return this.error(400, cb) },\n    unauthorized(cb) { return this.error(401, cb) },\n    forbidden(cb) { return this.error(403, cb) },\n    notFound(cb) { return this.error(404, cb) },\n    timeout(cb) { return this.error(408, cb) },\n    internalError(cb) { return this.error(500, cb) },\n    fetchError(cb) { return this.error(FETCH_ERROR, cb) },\n  }\n\n  const enhancedResponseChain: R extends undefined ? Chain & WretchResponseChain<T, Chain, undefined> : R = addons.reduce((chain, addon) => ({\n    ...chain,\n    ...(addon.resolver as any)\n  }), responseChain)\n\n  return resolvers.reduce((chain, r) => r(chain, wretch), enhancedResponseChain)\n}\n","import type { ConfiguredMiddleware, FetchLike } from \"./types.js\"\n\n/**\n * @private @internal\n */\nexport const middlewareHelper = (middlewares: ConfiguredMiddleware[]) => (fetchFunction: FetchLike): FetchLike => {\n  return middlewares.reduceRight((acc, curr) => curr(acc), fetchFunction) || fetchFunction\n}\n","import { mix, extractContentType, isLikelyJsonMime } from \"./utils.js\"\nimport { JSON_MIME, CONTENT_TYPE_HEADER } from \"./constants.js\"\nimport { resolver } from \"./resolver.js\"\nimport config from \"./config.js\"\nimport type { Wretch } from \"./types.js\"\n\nexport const core: Wretch = {\n  _url: \"\",\n  _options: {},\n  _config: config,\n  _catchers: new Map(),\n  _resolvers: [],\n  _deferred: [],\n  _middlewares: [],\n  _addons: [],\n  addon(addon) {\n    return { ...this, _addons: [...this._addons, addon], ...addon.wretch }\n  },\n  errorType(errorType: string) {\n    return {\n      ...this,\n      _config: {\n        ...this._config,\n        errorType\n      }\n    }\n  },\n  polyfills(polyfills, replace = false) {\n    return {\n      ...this,\n      _config: {\n        ...this._config,\n        polyfills: replace ? polyfills : mix(this._config.polyfills, polyfills)\n      }\n    }\n  },\n  url(_url, replace = false) {\n    if (replace)\n      return { ...this, _url }\n    const split = this._url.split(\"?\")\n    return {\n      ...this,\n      _url: split.length > 1 ?\n        split[0] + _url + \"?\" + split[1] :\n        this._url + _url\n    }\n  },\n  options(options, replace = false) {\n    return { ...this, _options: replace ? options : mix(this._options, options) }\n  },\n  headers(headerValues) {\n    return { ...this, _options: mix(this._options, { headers: headerValues || {} }) }\n  },\n  accept(headerValue) {\n    return this.headers({ Accept: headerValue })\n  },\n  content(headerValue) {\n    return this.headers({ [CONTENT_TYPE_HEADER]: headerValue })\n  },\n  auth(headerValue) {\n    return this.headers({ Authorization: headerValue })\n  },\n  catcher(errorId, catcher) {\n    const newMap = new Map(this._catchers)\n    newMap.set(errorId, catcher)\n    return { ...this, _catchers: newMap }\n  },\n  resolve<R = unknown>(resolver, clear: boolean = false) {\n    return { ...this, _resolvers: clear ? [resolver] : [...this._resolvers, resolver] }\n  },\n  defer(callback, clear: boolean = false) {\n    return {\n      ...this,\n      _deferred: clear ? [callback] : [...this._deferred, callback]\n    }\n  },\n  middlewares(middlewares, clear = false) {\n    return {\n      ...this,\n      _middlewares: clear ? middlewares : [...this._middlewares, ...middlewares]\n    }\n  },\n  fetch(method: string = this._options.method, url = \"\", body = null) {\n    let base = this.url(url).options({ method })\n    // \"Jsonify\" the body if it is an object and if it is likely that the content type targets json.\n    const contentType = extractContentType(base._options.headers)\n    const jsonify = typeof body === \"object\" && (!base._options.headers || !contentType || isLikelyJsonMime(contentType))\n    base =\n      !body ? base :\n        jsonify ? base.json(body, contentType) :\n          base.body(body)\n    return resolver(\n      base\n        ._deferred\n        .reduce((acc: Wretch, curr) => curr(acc, acc._url, acc._options), base)\n    )\n  },\n  get(url = \"\") {\n    return this.fetch(\"GET\", url)\n  },\n  delete(url = \"\") {\n    return this.fetch(\"DELETE\", url)\n  },\n  put(body, url = \"\") {\n    return this.fetch(\"PUT\", url, body)\n  },\n  post(body, url = \"\") {\n    return this.fetch(\"POST\", url, body)\n  },\n  patch(body, url = \"\") {\n    return this.fetch(\"PATCH\", url, body)\n  },\n  head(url = \"\") {\n    return this.fetch(\"HEAD\", url)\n  },\n  opts(url = \"\") {\n    return this.fetch(\"OPTIONS\", url)\n  },\n  body(contents) {\n    return { ...this, _options: { ...this._options, body: contents } }\n  },\n  json(jsObject, contentType) {\n    const currentContentType = extractContentType(this._options.headers)\n    return this.content(\n      contentType ||\n      isLikelyJsonMime(currentContentType) && currentContentType ||\n      JSON_MIME\n    ).body(JSON.stringify(jsObject))\n  }\n}\n","import { setOptions, setErrorType, setPolyfills } from \"./config.js\"\nimport { core } from \"./core.js\"\nimport { WretchError } from \"./resolver.js\"\nimport type { Wretch } from \"./types.js\"\n\nexport type {\n  Wretch,\n  Config,\n  ConfiguredMiddleware,\n  FetchLike,\n  Middleware,\n  WretchResponseChain,\n  WretchOptions,\n  WretchError,\n  WretchErrorCallback,\n  WretchResponse,\n  WretchDeferredCallback,\n  WretchAddon\n} from \"./types.js\"\n\n/**\n * Creates a new wretch instance with a base url and base\n * [fetch options](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch).\n *\n * ```ts\n * import wretch from \"wretch\"\n *\n * // Reusable instance\n * const w = wretch(\"https://domain.com\", { mode: \"cors\" })\n * ```\n *\n * @param _url The base url\n * @param _options The base fetch options\n * @returns A fresh wretch instance\n */\nfunction factory(_url = \"\", _options = {}): Wretch {\n  return { ...core, _url, _options }\n}\n\nfactory[\"default\"] = factory\n/** {@inheritDoc setOptions} */\nfactory.options = setOptions\n/** {@inheritDoc setErrorType} */\nfactory.errorType = setErrorType\n/** {@inheritDoc setPolyfills} */\nfactory.polyfills = setPolyfills\nfactory.WretchError = WretchError\n\nexport default factory\n"],"names":["FETCH_ERROR","Symbol","extractContentType","headers","_a","Object","entries","find","k","toLowerCase","test","value","one","two","mergeArrays","reduce","acc","key","newValue","Array","isArray","mix","config","options","errorType","polyfills","res","this","p","self","global","doThrow","Error","instance","args","resolver","wretch","_url","url","_options","opts","_config","_catchers","_resolvers","resolvers","_middlewares","middlewares","_addons","addons","catchers","Map","finalOptions","addon","beforeRequest","_fetchReq","reduceRight","curr","fetchFunction","middlewareHelper","referenceError","error","__wrap","response","ok","err","WretchError","type","then","body","message","status","bodyParser","funName","cb","_","throwingPromise","catcher","has","get","name","_wretchReq","json","blob","formData","arrayBuffer","text","errorId","set","badRequest","unauthorized","forbidden","notFound","timeout","internalError","fetchError","enhancedResponseChain","chain","responseChain","r","core","_deferred","replace","split","length","headerValues","accept","headerValue","Accept","content","auth","Authorization","newMap","resolve","clear","defer","callback","method","base","contentType","jsonify","fetch","delete","put","post","patch","head","contents","currentContentType","isLikelyJsonMime","JSON","stringify","jsObject","factory"],"mappings":"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"}