// This file is auto-generated by @hey-api/openapi-ts import type { BodySerializer, QuerySerializer } from './bodySerializer.gen' import { type ArraySeparatorStyle, serializeArrayParam, serializeObjectParam, serializePrimitiveParam } from './pathSerializer.gen' export interface PathSerializer { path: Record url: string } export const PATH_PARAM_RE = /\{[^{}]+\}/g export const defaultPathSerializer = ({ path, url: _url }: PathSerializer) => { let url = _url const matches = _url.match(PATH_PARAM_RE) if (matches) { for (const match of matches) { let explode = false let name = match.substring(1, match.length - 1) let style: ArraySeparatorStyle = 'simple' if (name.endsWith('*')) { explode = true name = name.substring(0, name.length - 1) } if (name.startsWith('.')) { name = name.substring(1) style = 'label' } else if (name.startsWith(';')) { name = name.substring(1) style = 'matrix' } const value = path[name] if (value === undefined || value === null) { continue } if (Array.isArray(value)) { url = url.replace(match, serializeArrayParam({ explode, name, style, value })) continue } if (typeof value === 'object') { url = url.replace( match, serializeObjectParam({ explode, name, style, value: value as Record, valueOnly: true }) ) continue } if (style === 'matrix') { url = url.replace( match, `;${serializePrimitiveParam({ name, value: value as string })}` ) continue } const replaceValue = encodeURIComponent( style === 'label' ? `.${value as string}` : (value as string) ) url = url.replace(match, replaceValue) } } return url } export const getUrl = ({ baseUrl, path, query, querySerializer, url: _url }: { baseUrl?: string path?: Record query?: Record querySerializer: QuerySerializer url: string }) => { const pathUrl = _url.startsWith('/') ? _url : `/${_url}` let url = (baseUrl ?? '') + pathUrl if (path) { url = defaultPathSerializer({ path, url }) } let search = query ? querySerializer(query) : '' if (search.startsWith('?')) { search = search.substring(1) } if (search) { url += `?${search}` } return url } export function getValidRequestBody(options: { body?: unknown bodySerializer?: BodySerializer | null serializedBody?: unknown }) { const hasBody = options.body !== undefined const isSerializedBody = hasBody && options.bodySerializer if (isSerializedBody) { if ('serializedBody' in options) { const hasSerializedBody = options.serializedBody !== undefined && options.serializedBody !== '' return hasSerializedBody ? options.serializedBody : null } // not all clients implement a serializedBody property (i.e. client-axios) return options.body !== '' ? options.body : null } // plain/text body if (hasBody) { return options.body } // no body was provided return undefined }