{"version":3,"sources":["../src/client/errors/FetchResponseError.ts","../../zimic-utils/dist/chunk-6IEM75FG.mjs","../../zimic-utils/src/url/createRegExpFromURL.ts","../../zimic-utils/src/url/excludeURLParams.ts","../../zimic-utils/src/url/joinURL.ts","../src/client/FetchClient.ts","../src/client/factory.ts"],"names":["__defProp","__name","Request","HttpHeaders"],"mappings":"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","file":"index.mjs","sourcesContent":["import { HttpHeaders, HttpHeadersSchema, HttpSchema, HttpSchemaMethod, HttpSchemaPath } from '@zimic/http';\n\nimport { FetchRequest, FetchRequestObject, FetchResponse, FetchResponseObject } from '../types/requests';\n\n/**\n * Options for converting a {@link FetchResponseError `FetchResponseError`} into a plain object.\n *\n * @see {@link https://github.com/zimicjs/zimic/wiki/api‐zimic‐fetch#fetchresponseerrortoobject `FetchResponseError#toObject` API reference}\n */\nexport interface FetchResponseErrorObjectOptions {\n  /**\n   * Whether to include the body of the request in the plain object.\n   *\n   * @default false\n   */\n  includeRequestBody?: boolean;\n\n  /**\n   * Whether to include the body of the response in the plain object.\n   *\n   * @default false\n   */\n  includeResponseBody?: boolean;\n}\n\nexport namespace FetchResponseErrorObjectOptions {\n  /**\n   * Options for converting a {@link FetchResponseError `FetchResponseError`} into a plain object, including the body of\n   * the request and/or response.\n   */\n  export type WithBody = FetchResponseErrorObjectOptions &\n    ({ includeRequestBody: true } | { includeResponseBody: true });\n\n  /**\n   * Options for converting a {@link FetchResponseError `FetchResponseError`} into a plain object, excluding the body of\n   * the request and/or response.\n   */\n  export type WithoutBody = FetchResponseErrorObjectOptions &\n    ({ includeRequestBody?: false } | { includeResponseBody?: false });\n}\n\n/**\n * A plain object representation of a {@link FetchResponseError `FetchResponseError`}, compatible with JSON. It is useful\n * for serialization, debugging, and logging purposes.\n *\n * @see {@link https://github.com/zimicjs/zimic/wiki/api‐zimic‐fetch#fetchresponseerrortoobject `FetchResponseError#toObject` API reference}\n */\nexport interface FetchResponseErrorObject {\n  name: string;\n  message: string;\n  request: FetchRequestObject;\n  response: FetchResponseObject;\n}\n\n/**\n * An error representing a response with a failure status code (4XX or 5XX).\n *\n * @example\n *   import { type HttpSchema } from '@zimic/http';\n *   import { createFetch } from '@zimic/fetch';\n *\n *   interface User {\n *     id: string;\n *     username: string;\n *   }\n *\n *   type Schema = HttpSchema<{\n *     '/users/:userId': {\n *       GET: {\n *         response: {\n *           200: { body: User };\n *           404: { body: { message: string } };\n *         };\n *       };\n *     };\n *   }>;\n *\n *   const fetch = createFetch<Schema>({\n *     baseURL: 'http://localhost:3000',\n *   });\n *\n *   const response = await fetch(`/users/${userId}`, {\n *     method: 'GET',\n *   });\n *\n *   if (!response.ok) {\n *     console.log(response.status); // 404\n *\n *     console.log(response.error); // FetchResponseError<Schema, 'GET', '/users'>\n *     console.log(response.error.request); // FetchRequest<Schema, 'GET', '/users'>\n *     console.log(response.error.response); // FetchResponse<Schema, 'GET', '/users'>\n *\n *     const plainError = response.error.toObject();\n *     console.log(JSON.stringify(plainError));\n *     // {\"name\":\"FetchResponseError\",\"message\":\"...\",\"request\":{...},\"response\":{...}}\n *   }\n *\n * @see {@link https://github.com/zimicjs/zimic/wiki/api‐zimic‐fetch#fetchresponseerror `FetchResponseError` API reference}\n */\nclass FetchResponseError<\n  Schema extends HttpSchema,\n  Method extends HttpSchemaMethod<Schema>,\n  Path extends HttpSchemaPath.Literal<Schema, Method>,\n> extends Error {\n  constructor(\n    public request: FetchRequest<Schema, Method, Path>,\n    public response: FetchResponse<Schema, Method, Path, true, 'manual'>,\n  ) {\n    super(`${request.method} ${request.url} failed with status ${response.status}: ${response.statusText}`);\n    this.name = 'FetchResponseError';\n  }\n\n  /**\n   * Converts this error into a plain object. This method is useful for serialization, debugging, and logging purposes.\n   *\n   * @example\n   *   const fetch = createFetch<Schema>({\n   *     baseURL: 'http://localhost:3000',\n   *   });\n   *\n   *   const response = await fetch(`/users/${userId}`, {\n   *     method: 'GET',\n   *   });\n   *\n   *   if (!response.ok) {\n   *     const plainError = response.error.toObject();\n   *     console.log(JSON.stringify(plainError));\n   *     // {\"name\":\"FetchResponseError\",\"message\":\"...\",\"request\":{...},\"response\":{...}}\n   *   }\n   *\n   * @param options Options for converting this error into a plain object. By default, the body of the request and\n   *   response will not be included.\n   * @returns A plain object representing this error. If `options.includeRequestBody` or `options.includeResponseBody`\n   *   is `true`, the body of the request and response will be included, respectively, and the return is a `Promise`.\n   *   Otherwise, the return is the plain object itself without the bodies.\n   * @see {@link https://github.com/zimicjs/zimic/wiki/api‐zimic‐fetch#fetchresponseerrortoobject `FetchResponseError#toObject` API reference}\n   */\n  toObject(options: FetchResponseErrorObjectOptions.WithBody): Promise<FetchResponseErrorObject>;\n  toObject(options: FetchResponseErrorObjectOptions.WithoutBody): FetchResponseErrorObject;\n  toObject(options?: FetchResponseErrorObjectOptions): Promise<FetchResponseErrorObject> | FetchResponseErrorObject;\n  toObject(options?: FetchResponseErrorObjectOptions): Promise<FetchResponseErrorObject> | FetchResponseErrorObject {\n    const includeRequestBody = options?.includeRequestBody ?? false;\n    const includeResponseBody = options?.includeResponseBody ?? false;\n\n    const partialObject = {\n      name: this.name,\n      message: this.message,\n    } satisfies Partial<FetchResponseErrorObject>;\n\n    if (!includeRequestBody && !includeResponseBody) {\n      const request = this.convertRequestToObject({ includeBody: false });\n      const response = this.convertResponseToObject({ includeBody: false });\n      return { ...partialObject, request, response };\n    }\n\n    return Promise.all([\n      this.convertRequestToObject({ includeBody: includeRequestBody }),\n      this.convertResponseToObject({ includeBody: includeResponseBody }),\n    ]).then(([request, response]) => ({ ...partialObject, request, response }));\n  }\n\n  private convertRequestToObject(options: { includeBody: true }): Promise<FetchRequestObject>;\n  private convertRequestToObject(options: { includeBody: false }): FetchRequestObject;\n  private convertRequestToObject(options: { includeBody: boolean }): Promise<FetchRequestObject> | FetchRequestObject;\n  private convertRequestToObject(options: { includeBody: boolean }): Promise<FetchRequestObject> | FetchRequestObject {\n    const requestObject: FetchRequestObject = {\n      url: this.request.url,\n      path: this.request.path,\n      method: this.request.method,\n      headers: HttpHeaders.prototype.toObject.call(this.request.headers) as HttpHeadersSchema,\n      cache: this.request.cache,\n      destination: this.request.destination,\n      credentials: this.request.credentials,\n      integrity: this.request.integrity,\n      keepalive: this.request.keepalive,\n      mode: this.request.mode,\n      redirect: this.request.redirect,\n      referrer: this.request.referrer,\n      referrerPolicy: this.request.referrerPolicy,\n    };\n\n    if (!options.includeBody) {\n      return requestObject;\n    }\n\n    // Optimize type checking by narrowing the type of the body\n    const bodyAsTextPromise = this.request.text() as Promise<string>;\n\n    return bodyAsTextPromise.then((bodyAsText) => {\n      requestObject.body = bodyAsText.length > 0 ? bodyAsText : null;\n      return requestObject;\n    });\n  }\n\n  private convertResponseToObject(options: { includeBody: true }): Promise<FetchResponseObject>;\n  private convertResponseToObject(options: { includeBody: false }): FetchResponseObject;\n  private convertResponseToObject(options: {\n    includeBody: boolean;\n  }): Promise<FetchResponseObject> | FetchResponseObject;\n  private convertResponseToObject(options: {\n    includeBody: boolean;\n  }): Promise<FetchResponseObject> | FetchResponseObject {\n    const responseObject: FetchResponseObject = {\n      url: this.response.url,\n      type: this.response.type,\n      status: this.response.status,\n      statusText: this.response.statusText,\n      ok: this.response.ok,\n      headers: HttpHeaders.prototype.toObject.call(this.response.headers) as HttpHeadersSchema,\n      redirected: this.response.redirected,\n    };\n\n    if (!options.includeBody) {\n      return responseObject;\n    }\n\n    // Optimize type checking by narrowing the type of the body\n    const bodyAsTextPromise = this.response.text() as Promise<string>;\n\n    return bodyAsTextPromise.then((bodyAsText) => {\n      responseObject.body = bodyAsText.length > 0 ? bodyAsText : null;\n      return responseObject;\n    });\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyFetchRequestError = FetchResponseError<any, any, any>;\n\nexport default FetchResponseError;\n","var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\nvar __require = /* @__PURE__ */ ((x) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x, {\n  get: (a, b) => (typeof require !== \"undefined\" ? require : a)[b]\n}) : x)(function(x) {\n  if (typeof require !== \"undefined\") return require.apply(this, arguments);\n  throw Error('Dynamic require of \"' + x + '\" is not supported');\n});\nvar __commonJS = (cb, mod) => function __require2() {\n  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n  // If the importer is in node compatibility mode or this is not an ESM\n  // file that has been converted to a CommonJS file using a Babel-\n  // compatible transform (i.e. \"__esModule\" has not been set), then set\n  // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n  isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n  mod\n));\n\nexport { __commonJS, __name, __require, __toESM };\n//# sourceMappingURL=chunk-6IEM75FG.mjs.map\n//# sourceMappingURL=chunk-6IEM75FG.mjs.map","export const URL_PATH_PARAM_REGEX = /\\/:([^/]+)/g;\n\nfunction createRegExpFromURL(url: string) {\n  URL_PATH_PARAM_REGEX.lastIndex = 0;\n\n  const urlWithReplacedPathParams = encodeURI(url)\n    .replace(/([.()*?+$\\\\])/g, '\\\\$1')\n    .replace(URL_PATH_PARAM_REGEX, '/(?<$1>[^/]+)')\n    .replace(/^(\\/)|(\\/)$/g, '');\n\n  return new RegExp(`^(?:/)?${urlWithReplacedPathParams}(?:/)?$`);\n}\n\nexport default createRegExpFromURL;\n","function excludeURLParams(url: URL) {\n  url.hash = '';\n  url.search = '';\n  url.username = '';\n  url.password = '';\n  return url;\n}\n\nexport default excludeURLParams;\n","function joinURL(...parts: (URL | string)[]) {\n  return parts\n    .map((part, index) => {\n      const isFirstPart = index === 0;\n      const isLastPart = index === parts.length - 1;\n\n      let partAsString = part.toString();\n\n      if (!isFirstPart) {\n        partAsString = partAsString.replace(/^\\//, '');\n      }\n      if (!isLastPart) {\n        partAsString = partAsString.replace(/\\/$/, '');\n      }\n\n      return partAsString;\n    })\n    .filter((part) => part.length > 0)\n    .join('/');\n}\n\nexport default joinURL;\n","import {\n  HttpSchemaPath,\n  HttpSchemaMethod,\n  HttpSearchParams,\n  LiteralHttpSchemaPathFromNonLiteral,\n  HttpSchema,\n  HttpHeaders,\n} from '@zimic/http';\nimport createRegexFromURL from '@zimic/utils/url/createRegExpFromURL';\nimport excludeURLParams from '@zimic/utils/url/excludeURLParams';\nimport joinURL from '@zimic/utils/url/joinURL';\n\nimport FetchResponseError from './errors/FetchResponseError';\nimport { FetchInput, FetchOptions, Fetch, FetchDefaults } from './types/public';\nimport { FetchRequestConstructor, FetchRequestInit, FetchRequest, FetchResponse } from './types/requests';\n\nclass FetchClient<Schema extends HttpSchema> implements Omit<Fetch<Schema>, 'defaults' | 'loose' | 'Request'> {\n  fetch: Fetch<Schema>;\n\n  constructor({ onRequest, onResponse, ...defaults }: FetchOptions<Schema>) {\n    this.fetch = this.createFetchFunction();\n\n    this.fetch.defaults = {\n      ...defaults,\n      headers: defaults.headers ?? {},\n      searchParams: defaults.searchParams ?? {},\n    };\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    this.fetch.loose = this.fetch as Fetch<any> as Fetch.Loose;\n\n    this.fetch.Request = this.createRequestClass(this.fetch.defaults);\n    this.fetch.onRequest = onRequest;\n    this.fetch.onResponse = onResponse;\n  }\n\n  private createFetchFunction() {\n    const fetch = async <\n      Method extends HttpSchemaMethod<Schema>,\n      Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n    >(\n      input: FetchInput<Schema, Method, Path>,\n      init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n    ) => {\n      const request = await this.createFetchRequest<Method, Path>(input, init);\n      const requestClone = request.clone();\n\n      const rawResponse = await globalThis.fetch(\n        // Optimize type checking by narrowing the type of request\n        requestClone as Request,\n      );\n      const response = await this.createFetchResponse<\n        Method,\n        LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>\n      >(request, rawResponse);\n\n      return response;\n    };\n\n    Object.setPrototypeOf(fetch, this);\n\n    return fetch as Fetch<Schema>;\n  }\n\n  private async createFetchRequest<\n    Method extends HttpSchemaMethod<Schema>,\n    Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n  >(\n    input: FetchInput<Schema, Method, Path>,\n    init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n  ) {\n    let request = input instanceof Request ? input : new this.fetch.Request(input, init);\n\n    if (this.fetch.onRequest) {\n      const requestAfterInterceptor = await this.fetch.onRequest(\n        // Optimize type checking by narrowing the type of request\n        request as FetchRequest.Loose,\n      );\n\n      if (requestAfterInterceptor !== request) {\n        const isFetchRequest = requestAfterInterceptor instanceof this.fetch.Request;\n\n        request = isFetchRequest\n          ? (requestAfterInterceptor as Request as typeof request)\n          : new this.fetch.Request(requestAfterInterceptor as FetchInput<Schema, Method, Path>, init);\n      }\n    }\n\n    return request;\n  }\n\n  private async createFetchResponse<\n    Method extends HttpSchemaMethod<Schema>,\n    Path extends HttpSchemaPath.Literal<Schema, Method>,\n  >(fetchRequest: FetchRequest<Schema, Method, Path>, rawResponse: Response) {\n    let response = this.defineFetchResponseProperties<Method, Path>(fetchRequest, rawResponse);\n\n    if (this.fetch.onResponse) {\n      const responseAfterInterceptor = await this.fetch.onResponse(\n        // Optimize type checking by narrowing the type of response\n        response as FetchResponse.Loose,\n      );\n\n      const isFetchResponse =\n        responseAfterInterceptor instanceof Response &&\n        'request' in responseAfterInterceptor &&\n        responseAfterInterceptor.request instanceof this.fetch.Request;\n\n      response = isFetchResponse\n        ? (responseAfterInterceptor as typeof response)\n        : this.defineFetchResponseProperties<Method, Path>(fetchRequest, responseAfterInterceptor);\n    }\n\n    return response;\n  }\n\n  private defineFetchResponseProperties<\n    Method extends HttpSchemaMethod<Schema>,\n    Path extends HttpSchemaPath.Literal<Schema, Method>,\n  >(fetchRequest: FetchRequest<Schema, Method, Path>, response: Response) {\n    const fetchResponse = response as FetchResponse<Schema, Method, Path>;\n\n    Object.defineProperty(fetchResponse, 'request', {\n      value: fetchRequest satisfies FetchResponse.Loose['request'],\n      writable: false,\n      enumerable: true,\n      configurable: false,\n    });\n\n    let responseError: FetchResponse.Loose['error'] | undefined;\n\n    Object.defineProperty(fetchResponse, 'error', {\n      get() {\n        if (responseError === undefined) {\n          responseError = fetchResponse.ok\n            ? null\n            : new FetchResponseError(\n                fetchRequest,\n                fetchResponse as FetchResponse<Schema, Method, Path, true, 'manual'>,\n              );\n        }\n        return responseError;\n      },\n      enumerable: true,\n      configurable: false,\n    });\n\n    return fetchResponse;\n  }\n\n  private createRequestClass(defaults: FetchDefaults) {\n    class Request<\n      Method extends HttpSchemaMethod<Schema>,\n      Path extends HttpSchemaPath.NonLiteral<Schema, Method>,\n    > extends globalThis.Request {\n      path: LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>;\n\n      constructor(\n        input: FetchInput<Schema, Method, Path>,\n        init: FetchRequestInit<Schema, Method, LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>>,\n      ) {\n        const initWithDefaults = { ...defaults, ...init };\n\n        const headersFromDefaults = new HttpHeaders(defaults.headers);\n        const headersFromInit = new HttpHeaders((init satisfies RequestInit as RequestInit).headers);\n\n        let url: URL;\n        const baseURL = new URL(initWithDefaults.baseURL);\n\n        if (input instanceof globalThis.Request) {\n          // Optimize type checking by narrowing the type of input\n          const request = input as globalThis.Request;\n\n          // Optimize type checking by narrowing the type of headers\n          const headersFromRequest = new HttpHeaders(input.headers as Headers);\n\n          initWithDefaults.headers = {\n            ...headersFromDefaults.toObject(),\n            ...headersFromRequest.toObject(),\n            ...headersFromInit.toObject(),\n          };\n\n          super(request, initWithDefaults);\n\n          url = new URL(input.url);\n        } else {\n          initWithDefaults.headers = {\n            ...headersFromDefaults.toObject(),\n            ...headersFromInit.toObject(),\n          };\n\n          url = input instanceof URL ? new URL(input) : new URL(joinURL(baseURL, input));\n\n          const searchParamsFromDefaults = new HttpSearchParams(defaults.searchParams);\n          const searchParamsFromInit = new HttpSearchParams(initWithDefaults.searchParams);\n\n          initWithDefaults.searchParams = {\n            ...searchParamsFromDefaults.toObject(),\n            ...searchParamsFromInit.toObject(),\n          };\n\n          url.search = new HttpSearchParams(initWithDefaults.searchParams).toString();\n\n          super(url, initWithDefaults);\n        }\n\n        const baseURLWithoutTrailingSlash = baseURL.toString().replace(/\\/$/, '');\n\n        this.path = excludeURLParams(url)\n          .toString()\n          .replace(baseURLWithoutTrailingSlash, '') as LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>;\n      }\n\n      clone(): Request<Method, Path> {\n        const rawClone = super.clone();\n\n        return new Request<Method, Path>(\n          rawClone as unknown as FetchInput<Schema, Method, Path>,\n          rawClone as unknown as FetchRequestInit<\n            Schema,\n            Method,\n            LiteralHttpSchemaPathFromNonLiteral<Schema, Method, Path>\n          >,\n        );\n      }\n    }\n\n    return Request as FetchRequestConstructor<Schema>;\n  }\n\n  isRequest<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n    request: unknown,\n    method: Method,\n    path: Path,\n  ): request is FetchRequest<Schema, Method, Path> {\n    return (\n      request instanceof Request &&\n      request.method === method &&\n      'path' in request &&\n      typeof request.path === 'string' &&\n      createRegexFromURL(path).test(request.path)\n    );\n  }\n\n  isResponse<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n    response: unknown,\n    method: Method,\n    path: Path,\n  ): response is FetchResponse<Schema, Method, Path> {\n    return (\n      response instanceof Response &&\n      'request' in response &&\n      this.isRequest(response.request, method, path) &&\n      'error' in response &&\n      (response.error === null || response.error instanceof FetchResponseError)\n    );\n  }\n\n  isResponseError<Path extends HttpSchemaPath.Literal<Schema, Method>, Method extends HttpSchemaMethod<Schema>>(\n    error: unknown,\n    method: Method,\n    path: Path,\n  ): error is FetchResponseError<Schema, Method, Path> {\n    return (\n      error instanceof FetchResponseError &&\n      this.isRequest(error.request, method, path) &&\n      this.isResponse(error.response, method, path)\n    );\n  }\n}\n\nexport default FetchClient;\n","import { HttpSchema } from '@zimic/http';\n\nimport FetchClient from './FetchClient';\nimport { FetchOptions, Fetch } from './types/public';\n\n/**\n * Creates a {@link https://github.com/zimicjs/zimic/wiki/api‐zimic‐fetch#fetch fetch instance} typed with an HTTP\n * schema, closely compatible with the {@link https://developer.mozilla.org/docs/Web/API/Fetch_API native Fetch API}. All\n * requests and responses are typed by default with the schema, including methods, paths, status codes, parameters, and\n * bodies.\n *\n * Requests sent by the fetch instance have their URL automatically prefixed with the base URL of the instance.\n * {@link https://github.com/zimicjs/zimic/wiki/api‐zimic‐fetch#fetch.defaults Default options} are also applied to the\n * requests, if provided.\n *\n * @example\n *   import { type HttpSchema } from '@zimic/http';\n *   import { createFetch } from '@zimic/fetch';\n *\n *   interface User {\n *     id: string;\n *     username: string;\n *   }\n *\n *   type Schema = HttpSchema<{\n *     '/users': {\n *       POST: {\n *         request: {\n *           headers: { 'content-type': 'application/json' };\n *           body: { username: string };\n *         };\n *         response: {\n *           201: { body: User };\n *         };\n *       };\n *\n *       GET: {\n *         request: {\n *           searchParams: {\n *             query?: string;\n *             page?: number;\n *             limit?: number;\n *           };\n *         };\n *         response: {\n *           200: { body: User[] };\n *         };\n *       };\n *     };\n *   }>;\n *\n *   const fetch = createFetch<Schema>({\n *     baseURL: 'http://localhost:3000',\n *   });\n *\n * @see {@link https://github.com/zimicjs/zimic/wiki/api‐zimic‐fetch#createfetch `createFetch(options)` API reference}\n * @see {@link https://github.com/zimicjs/zimic/wiki/api‐zimic‐fetch#fetch `fetch` API reference}\n */\nfunction createFetch<Schema extends HttpSchema>(options: FetchOptions<Schema>): Fetch<Schema> {\n  const { fetch } = new FetchClient<Schema>(options);\n  return fetch;\n}\n\nexport default createFetch;\n"]}