{"version":3,"file":"index.cjs","sources":["../src/index.js"],"sourcesContent":["// settings & const\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nconst supportsRequestInitExt = () => {\n  return (\n    typeof process === \"object\" &&\n    Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 &&\n    process.versions.undici\n  );\n};\n\n/**\n * Returns a cheap, non-cryptographically-secure random ID\n * Courtesy of @imranbarbhuiya (https://github.com/imranbarbhuiya)\n */\nexport function randomID() {\n  return Math.random().toString(36).slice(2, 11);\n}\n\n/**\n * Create an openapi-fetch client.\n * @type {import(\"./index.js\").default}\n */\nexport default function createClient(clientOptions) {\n  let {\n    baseUrl = \"\",\n    Request: CustomRequest = globalThis.Request,\n    fetch: baseFetch = globalThis.fetch,\n    querySerializer: globalQuerySerializer,\n    bodySerializer: globalBodySerializer,\n    headers: baseHeaders,\n    requestInitExt = undefined,\n    ...baseOptions\n  } = { ...clientOptions };\n  requestInitExt = supportsRequestInitExt() ? requestInitExt : undefined;\n  baseUrl = removeTrailingSlash(baseUrl);\n  const middlewares = [];\n\n  /**\n   * Per-request fetch (keeps settings created in createClient()\n   * @param {T} url\n   * @param {import('./index.js').FetchOptions<T>} fetchOptions\n   */\n  async function coreFetch(schemaPath, fetchOptions) {\n    const {\n      baseUrl: localBaseUrl,\n      fetch = baseFetch,\n      Request = CustomRequest,\n      headers,\n      params = {},\n      parseAs = \"json\",\n      querySerializer: requestQuerySerializer,\n      bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n      body,\n      ...init\n    } = fetchOptions || {};\n    let finalBaseUrl = baseUrl;\n    if (localBaseUrl) {\n      finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n    }\n\n    let querySerializer =\n      typeof globalQuerySerializer === \"function\"\n        ? globalQuerySerializer\n        : createQuerySerializer(globalQuerySerializer);\n    if (requestQuerySerializer) {\n      querySerializer =\n        typeof requestQuerySerializer === \"function\"\n          ? requestQuerySerializer\n          : createQuerySerializer({\n              ...(typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {}),\n              ...requestQuerySerializer,\n            });\n    }\n\n    const serializedBody =\n      body === undefined\n        ? undefined\n        : bodySerializer(\n            body,\n            // Note: we declare mergeHeaders() both here and below because it’s a bit of a chicken-or-egg situation:\n            // bodySerializer() needs all headers so we aren’t dropping ones set by the user, however,\n            // the result of this ALSO sets the lowest-priority content-type header. So we re-merge below,\n            // setting the content-type at the very beginning to be overwritten.\n            // Lastly, based on the way headers work, it’s not a simple “present-or-not” check becauase null intentionally un-sets headers.\n            mergeHeaders(baseHeaders, headers, params.header),\n          );\n    const finalHeaders = mergeHeaders(\n      // with no body, we should not to set Content-Type\n      serializedBody === undefined ||\n        // if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n        serializedBody instanceof FormData\n        ? {}\n        : {\n            \"Content-Type\": \"application/json\",\n          },\n      baseHeaders,\n      headers,\n      params.header,\n    );\n\n    const requestInit = {\n      redirect: \"follow\",\n      ...baseOptions,\n      ...init,\n      body: serializedBody,\n      headers: finalHeaders,\n    };\n\n    let id;\n    let options;\n    let request = new CustomRequest(\n      createFinalURL(schemaPath, { baseUrl: finalBaseUrl, params, querySerializer }),\n      requestInit,\n    );\n    let response;\n\n    /** Add custom parameters to Request object */\n    for (const key in init) {\n      if (!(key in request)) {\n        request[key] = init[key];\n      }\n    }\n\n    if (middlewares.length) {\n      id = randomID();\n\n      // middleware (request)\n      options = Object.freeze({\n        baseUrl: finalBaseUrl,\n        fetch,\n        parseAs,\n        querySerializer,\n        bodySerializer,\n      });\n      for (const m of middlewares) {\n        if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n          const result = await m.onRequest({\n            request,\n            schemaPath,\n            params,\n            options,\n            id,\n          });\n          if (result) {\n            if (result instanceof CustomRequest) {\n              request = result;\n            } else if (result instanceof Response) {\n              response = result;\n              break;\n            } else {\n              throw new Error(\"onRequest: must return new Request() or Response() when modifying the request\");\n            }\n          }\n        }\n      }\n    }\n\n    if (!response) {\n      // fetch!\n      try {\n        response = await fetch(request, requestInitExt);\n      } catch (error) {\n        let errorAfterMiddleware = error;\n        // middleware (error)\n        // execute in reverse-array order (first priority gets last transform)\n        if (middlewares.length) {\n          for (let i = middlewares.length - 1; i >= 0; i--) {\n            const m = middlewares[i];\n            if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n              const result = await m.onError({\n                request,\n                error: errorAfterMiddleware,\n                schemaPath,\n                params,\n                options,\n                id,\n              });\n              if (result) {\n                // if error is handled by returning a response, skip remaining middleware\n                if (result instanceof Response) {\n                  errorAfterMiddleware = undefined;\n                  response = result;\n                  break;\n                }\n\n                if (result instanceof Error) {\n                  errorAfterMiddleware = result;\n                  continue;\n                }\n\n                throw new Error(\"onError: must return new Response() or instance of Error\");\n              }\n            }\n          }\n        }\n\n        // rethrow error if not handled by middleware\n        if (errorAfterMiddleware) {\n          throw errorAfterMiddleware;\n        }\n      }\n\n      // middleware (response)\n      // execute in reverse-array order (first priority gets last transform)\n      if (middlewares.length) {\n        for (let i = middlewares.length - 1; i >= 0; i--) {\n          const m = middlewares[i];\n          if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n            const result = await m.onResponse({\n              request,\n              response,\n              schemaPath,\n              params,\n              options,\n              id,\n            });\n            if (result) {\n              if (!(result instanceof Response)) {\n                throw new Error(\"onResponse: must return new Response() when modifying the response\");\n              }\n              response = result;\n            }\n          }\n        }\n      }\n    }\n\n    // handle empty content\n    if (response.status === 204 || request.method === \"HEAD\" || response.headers.get(\"Content-Length\") === \"0\") {\n      return response.ok ? { data: undefined, response } : { error: undefined, response };\n    }\n\n    // parse response (falling back to .text() when necessary)\n    if (response.ok) {\n      // if \"stream\", skip parsing entirely\n      if (parseAs === \"stream\") {\n        return { data: response.body, response };\n      }\n      return { data: await response[parseAs](), response };\n    }\n\n    // handle errors\n    let error = await response.text();\n    try {\n      error = JSON.parse(error); // attempt to parse as JSON\n    } catch {\n      // noop\n    }\n    return { error, response };\n  }\n\n  return {\n    request(method, url, init) {\n      return coreFetch(url, { ...init, method: method.toUpperCase() });\n    },\n    /** Call a GET endpoint */\n    GET(url, init) {\n      return coreFetch(url, { ...init, method: \"GET\" });\n    },\n    /** Call a PUT endpoint */\n    PUT(url, init) {\n      return coreFetch(url, { ...init, method: \"PUT\" });\n    },\n    /** Call a POST endpoint */\n    POST(url, init) {\n      return coreFetch(url, { ...init, method: \"POST\" });\n    },\n    /** Call a DELETE endpoint */\n    DELETE(url, init) {\n      return coreFetch(url, { ...init, method: \"DELETE\" });\n    },\n    /** Call a OPTIONS endpoint */\n    OPTIONS(url, init) {\n      return coreFetch(url, { ...init, method: \"OPTIONS\" });\n    },\n    /** Call a HEAD endpoint */\n    HEAD(url, init) {\n      return coreFetch(url, { ...init, method: \"HEAD\" });\n    },\n    /** Call a PATCH endpoint */\n    PATCH(url, init) {\n      return coreFetch(url, { ...init, method: \"PATCH\" });\n    },\n    /** Call a TRACE endpoint */\n    TRACE(url, init) {\n      return coreFetch(url, { ...init, method: \"TRACE\" });\n    },\n    /** Register middleware */\n    use(...middleware) {\n      for (const m of middleware) {\n        if (!m) {\n          continue;\n        }\n        if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n          throw new Error(\"Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`\");\n        }\n        middlewares.push(m);\n      }\n    },\n    /** Unregister middleware */\n    eject(...middleware) {\n      for (const m of middleware) {\n        const i = middlewares.indexOf(m);\n        if (i !== -1) {\n          middlewares.splice(i, 1);\n        }\n      }\n    },\n  };\n}\n\nclass PathCallForwarder {\n  constructor(client, url) {\n    this.client = client;\n    this.url = url;\n  }\n\n  GET = (init) => {\n    return this.client.GET(this.url, init);\n  };\n  PUT = (init) => {\n    return this.client.PUT(this.url, init);\n  };\n  POST = (init) => {\n    return this.client.POST(this.url, init);\n  };\n  DELETE = (init) => {\n    return this.client.DELETE(this.url, init);\n  };\n  OPTIONS = (init) => {\n    return this.client.OPTIONS(this.url, init);\n  };\n  HEAD = (init) => {\n    return this.client.HEAD(this.url, init);\n  };\n  PATCH = (init) => {\n    return this.client.PATCH(this.url, init);\n  };\n  TRACE = (init) => {\n    return this.client.TRACE(this.url, init);\n  };\n}\n\nclass PathClientProxyHandler {\n  constructor() {\n    this.client = null;\n  }\n\n  // Assume the property is an URL.\n  get(coreClient, url) {\n    const forwarder = new PathCallForwarder(coreClient, url);\n    this.client[url] = forwarder;\n    return forwarder;\n  }\n}\n\n/**\n * Wrap openapi-fetch client to support a path based API.\n * @type {import(\"./index.js\").wrapAsPathBasedClient}\n */\nexport function wrapAsPathBasedClient(coreClient) {\n  const handler = new PathClientProxyHandler();\n  const proxy = new Proxy(coreClient, handler);\n\n  // Put the proxy on the prototype chain of the actual client.\n  // This means if we do not have a memoized PathCallForwarder,\n  // we fall back to the proxy to synthesize it.\n  // However, the proxy itself is not on the hot-path (if we fetch the same\n  // endpoint multiple times, only the first call will hit the proxy).\n  function Client() {}\n  Client.prototype = proxy;\n\n  const client = new Client();\n\n  // Feed the client back to the proxy handler so it can store the generated\n  // PathCallForwarder.\n  handler.client = client;\n\n  return client;\n}\n\n/**\n * Convenience method to an openapi-fetch path based client.\n * Strictly equivalent to `wrapAsPathBasedClient(createClient(...))`.\n * @type {import(\"./index.js\").createPathBasedClient}\n */\nexport function createPathBasedClient(clientOptions) {\n  return wrapAsPathBasedClient(createClient(clientOptions));\n}\n\n// utils\n\n/**\n * Serialize primitive param values\n * @type {import(\"./index.js\").serializePrimitiveParam}\n */\nexport function serializePrimitiveParam(name, value, options) {\n  if (value === undefined || value === null) {\n    return \"\";\n  }\n  if (typeof value === \"object\") {\n    throw new Error(\n      \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n    );\n  }\n  return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\n\n/**\n * Serialize object param (shallow only)\n * @type {import(\"./index.js\").serializeObjectParam}\n */\nexport function serializeObjectParam(name, value, options) {\n  if (!value || typeof value !== \"object\") {\n    return \"\";\n  }\n  const values = [];\n  const joiner =\n    {\n      simple: \",\",\n      label: \".\",\n      matrix: \";\",\n    }[options.style] || \"&\";\n\n  // explode: false\n  if (options.style !== \"deepObject\" && options.explode === false) {\n    for (const k in value) {\n      values.push(k, options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));\n    }\n    const final = values.join(\",\"); // note: values are always joined by comma in explode: false (but joiner can prefix)\n    switch (options.style) {\n      case \"form\": {\n        return `${name}=${final}`;\n      }\n      case \"label\": {\n        return `.${final}`;\n      }\n      case \"matrix\": {\n        return `;${name}=${final}`;\n      }\n      default: {\n        return final;\n      }\n    }\n  }\n\n  // explode: true\n  for (const k in value) {\n    const finalName = options.style === \"deepObject\" ? `${name}[${k}]` : k;\n    values.push(serializePrimitiveParam(finalName, value[k], options));\n  }\n  const final = values.join(joiner);\n  return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\n\n/**\n * Serialize array param (shallow only)\n * @type {import(\"./index.js\").serializeArrayParam}\n */\nexport function serializeArrayParam(name, value, options) {\n  if (!Array.isArray(value)) {\n    return \"\";\n  }\n\n  // explode: false\n  if (options.explode === false) {\n    const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\"; // note: for arrays, joiners vary wildly based on style + explode behavior\n    const final = (options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))).join(joiner);\n    switch (options.style) {\n      case \"simple\": {\n        return final;\n      }\n      case \"label\": {\n        return `.${final}`;\n      }\n      case \"matrix\": {\n        return `;${name}=${final}`;\n      }\n      // case \"spaceDelimited\":\n      // case \"pipeDelimited\":\n      default: {\n        return `${name}=${final}`;\n      }\n    }\n  }\n\n  // explode: true\n  const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n  const values = [];\n  for (const v of value) {\n    if (options.style === \"simple\" || options.style === \"label\") {\n      values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n    } else {\n      values.push(serializePrimitiveParam(name, v, options));\n    }\n  }\n  return options.style === \"label\" || options.style === \"matrix\"\n    ? `${joiner}${values.join(joiner)}`\n    : values.join(joiner);\n}\n\n/**\n * Serialize query params to string\n * @type {import(\"./index.js\").createQuerySerializer}\n */\nexport function createQuerySerializer(options) {\n  return function querySerializer(queryParams) {\n    const search = [];\n    if (queryParams && typeof queryParams === \"object\") {\n      for (const name in queryParams) {\n        const value = queryParams[name];\n        if (value === undefined || value === null) {\n          continue;\n        }\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            continue;\n          }\n          search.push(\n            serializeArrayParam(name, value, {\n              style: \"form\",\n              explode: true,\n              ...options?.array,\n              allowReserved: options?.allowReserved || false,\n            }),\n          );\n          continue;\n        }\n        if (typeof value === \"object\") {\n          search.push(\n            serializeObjectParam(name, value, {\n              style: \"deepObject\",\n              explode: true,\n              ...options?.object,\n              allowReserved: options?.allowReserved || false,\n            }),\n          );\n          continue;\n        }\n        search.push(serializePrimitiveParam(name, value, options));\n      }\n    }\n    return search.join(\"&\");\n  };\n}\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"./index.js\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\nexport function defaultPathSerializer(pathname, pathParams) {\n  let nextURL = pathname;\n  for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n    let name = match.substring(1, match.length - 1);\n    let explode = false;\n    let style = \"simple\";\n    if (name.endsWith(\"*\")) {\n      explode = true;\n      name = name.substring(0, name.length - 1);\n    }\n    if (name.startsWith(\".\")) {\n      style = \"label\";\n      name = name.substring(1);\n    } else if (name.startsWith(\";\")) {\n      style = \"matrix\";\n      name = name.substring(1);\n    }\n    if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {\n      continue;\n    }\n    const value = pathParams[name];\n    if (Array.isArray(value)) {\n      nextURL = nextURL.replace(match, serializeArrayParam(name, value, { style, explode }));\n      continue;\n    }\n    if (typeof value === \"object\") {\n      nextURL = nextURL.replace(match, serializeObjectParam(name, value, { style, explode }));\n      continue;\n    }\n    if (style === \"matrix\") {\n      nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);\n      continue;\n    }\n    nextURL = nextURL.replace(match, style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));\n  }\n  return nextURL;\n}\n\n/**\n * Serialize body object to string\n * @type {import(\"./index.js\").defaultBodySerializer}\n */\nexport function defaultBodySerializer(body, headers) {\n  if (body instanceof FormData) {\n    return body;\n  }\n  if (headers) {\n    const contentType =\n      headers.get instanceof Function\n        ? (headers.get(\"Content-Type\") ?? headers.get(\"content-type\"))\n        : (headers[\"Content-Type\"] ?? headers[\"content-type\"]);\n    if (contentType === \"application/x-www-form-urlencoded\") {\n      return new URLSearchParams(body).toString();\n    }\n  }\n  return JSON.stringify(body);\n}\n\n/**\n * Construct URL string from baseUrl and handle path and query params\n * @type {import(\"./index.js\").createFinalURL}\n */\nexport function createFinalURL(pathname, options) {\n  let finalURL = `${options.baseUrl}${pathname}`;\n  if (options.params?.path) {\n    finalURL = defaultPathSerializer(finalURL, options.params.path);\n  }\n  let search = options.querySerializer(options.params.query ?? {});\n  if (search.startsWith(\"?\")) {\n    search = search.substring(1);\n  }\n  if (search) {\n    finalURL += `?${search}`;\n  }\n  return finalURL;\n}\n\n/**\n * Merge headers a and b, with b taking priority\n * @type {import(\"./index.js\").mergeHeaders}\n */\nexport function mergeHeaders(...allHeaders) {\n  const finalHeaders = new Headers();\n  for (const h of allHeaders) {\n    if (!h || typeof h !== \"object\") {\n      continue;\n    }\n    const iterator = h instanceof Headers ? h.entries() : Object.entries(h);\n    for (const [k, v] of iterator) {\n      if (v === null) {\n        finalHeaders.delete(k);\n      } else if (Array.isArray(v)) {\n        for (const v2 of v) {\n          finalHeaders.append(k, v2);\n        }\n      } else if (v !== undefined) {\n        finalHeaders.set(k, v);\n      }\n    }\n  }\n  return finalHeaders;\n}\n\n/**\n * Remove trailing slash from url\n * @type {import(\"./index.js\").removeTrailingSlash}\n */\nexport function removeTrailingSlash(url) {\n  if (url.endsWith(\"/\")) {\n    return url.substring(0, url.length - 1);\n  }\n  return url;\n}\n"],"names":["error","final","joiner"],"mappings":"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"}