{"version":3,"sources":["../../zimic-utils/src/data/blobEquals.ts","../../zimic-utils/src/data/fileEquals.ts","../src/formData/HttpFormData.ts","../src/headers/HttpHeaders.ts","../src/searchParams/HttpSearchParams.ts","../src/types/schema.ts","../src/utils/bodies.ts"],"names":["pickPrimitiveProperties"],"mappings":"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","file":"index.mjs","sourcesContent":["async function blobEquals(blob: Blob, otherBlob: Blob) {\n  if (blob.type !== otherBlob.type || blob.size !== otherBlob.size) {\n    return false;\n  }\n\n  const reader = blob.stream().getReader();\n  const otherReader = otherBlob.stream().getReader();\n\n  let buffer: Uint8Array = new Uint8Array(0);\n  let otherBuffer: Uint8Array = new Uint8Array(0);\n\n  try {\n    while (true) {\n      const bufferReadPromises: Promise<void>[] = [];\n\n      if (buffer.length === 0) {\n        bufferReadPromises.push(\n          reader.read().then((result) => {\n            if (!result.done) {\n              buffer = result.value;\n            }\n          }),\n        );\n      }\n\n      if (otherBuffer.length === 0) {\n        bufferReadPromises.push(\n          otherReader.read().then((result) => {\n            if (!result.done) {\n              otherBuffer = result.value;\n            }\n          }),\n        );\n      }\n\n      await Promise.all(bufferReadPromises);\n\n      const haveStreamsEndedTogether = buffer.length === 0 && otherBuffer.length === 0;\n\n      if (haveStreamsEndedTogether) {\n        return true;\n      }\n\n      const hasOneStreamEndedBeforeTheOther =\n        (buffer.length === 0 && otherBuffer.length > 0) || (buffer.length > 0 && otherBuffer.length === 0);\n\n      if (hasOneStreamEndedBeforeTheOther) {\n        return false;\n      }\n\n      const minimumByteLength = Math.min(buffer.length, otherBuffer.length);\n\n      for (let byteIndex = 0; byteIndex < minimumByteLength; byteIndex++) {\n        if (buffer[byteIndex] !== otherBuffer[byteIndex]) {\n          return false;\n        }\n      }\n\n      buffer = buffer.slice(minimumByteLength);\n      otherBuffer = otherBuffer.slice(minimumByteLength);\n    }\n  } finally {\n    reader.releaseLock();\n    otherReader.releaseLock();\n  }\n}\n\nexport default blobEquals;\n","import blobEquals from './blobEquals';\n\nasync function fileEquals(file: File, otherFile: File) {\n  return file.name === otherFile.name && (await blobEquals(file, otherFile));\n}\n\nexport default fileEquals;\n","import { fileEquals } from '@zimic/utils/data';\nimport { ArrayItemIfArray, Replace } from '@zimic/utils/types';\n\nimport { HttpFormDataSchema, HttpFormDataSchemaName, HttpFormDataSerialized } from './types';\n\n/** @see {@link https://zimic.dev/docs/http/api/http-form-data `HttpFormData` API reference} */\nclass HttpFormData<LooseSchema extends HttpFormDataSchema.Loose = HttpFormDataSchema.Loose> extends FormData {\n  readonly _schema!: HttpFormDataSerialized<LooseSchema>;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdataset `formData.set()` API reference} */\n  set<Name extends HttpFormDataSchemaName<this['_schema']>>(\n    name: Name,\n    value: Exclude<ArrayItemIfArray<NonNullable<LooseSchema[Name]>>, Blob>,\n  ): void;\n  set<Name extends HttpFormDataSchemaName<this['_schema']>>(\n    name: Name,\n    blob: Exclude<ArrayItemIfArray<NonNullable<LooseSchema[Name]>>, string>,\n    fileName?: string,\n  ): void;\n  set<Name extends HttpFormDataSchemaName<this['_schema']>>(\n    name: Name,\n    blobOrValue: ArrayItemIfArray<NonNullable<LooseSchema[Name]>>,\n    fileName?: string,\n  ): void {\n    if (fileName === undefined) {\n      super.set(name, blobOrValue);\n    } else {\n      super.set(name, blobOrValue, fileName);\n    }\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdataappend `formData.append()` API reference} */\n  append<Name extends HttpFormDataSchemaName<this['_schema']>>(\n    name: Name,\n    value: Exclude<ArrayItemIfArray<NonNullable<LooseSchema[Name]>>, Blob>,\n  ): void;\n  append<Name extends HttpFormDataSchemaName<this['_schema']>>(\n    name: Name,\n    blob: Exclude<ArrayItemIfArray<NonNullable<LooseSchema[Name]>>, string>,\n    fileName?: string,\n  ): void;\n  append<Name extends HttpFormDataSchemaName<this['_schema']>>(\n    name: Name,\n    blobOrValue: ArrayItemIfArray<NonNullable<LooseSchema[Name]>>,\n    fileName?: string,\n  ): void {\n    if (fileName === undefined) {\n      super.append(name, blobOrValue);\n    } else {\n      super.append(name, blobOrValue, fileName);\n    }\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdataget `formData.get()` API reference} */\n  get<Name extends HttpFormDataSchemaName.NonArray<this['_schema']>>(\n    name: Name,\n  ): Replace<Replace<ArrayItemIfArray<this['_schema'][Name]>, undefined, null>, Blob, File> {\n    return super.get(name) as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatagetall `formData.getAll()` API reference} */\n  getAll<Name extends HttpFormDataSchemaName.Array<this['_schema']>>(\n    name: Name,\n  ): Replace<ArrayItemIfArray<NonNullable<this['_schema'][Name]>>, Blob, File>[] {\n    return super.getAll(name) as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatahas `formData.has()` API reference} */\n  has<Name extends HttpFormDataSchemaName<this['_schema']>>(name: Name): boolean {\n    return super.has(name);\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatadelete `formData.delete()` API reference} */\n  delete<Name extends HttpFormDataSchemaName<this['_schema']>>(name: Name): void {\n    super.delete(name);\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdataforeach `formData.forEach()` API reference} */\n  forEach<This extends HttpFormData<this['_schema']>>(\n    callback: <Key extends HttpFormDataSchemaName<this['_schema']>>(\n      value: Replace<ArrayItemIfArray<NonNullable<this['_schema'][Key]>>, Blob, File>,\n      key: Key,\n      formData: HttpFormData<this['_schema']>,\n    ) => void,\n    thisArg?: This,\n  ): void {\n    super.forEach(callback as (value: FormDataEntryValue, key: string, parent: FormData) => void, thisArg);\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatakeys `formData.keys()` API reference} */\n  keys(): FormDataIterator<HttpFormDataSchemaName<this['_schema']>> {\n    return super.keys() as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatavalues `formData.values()` API reference} */\n  values(): FormDataIterator<\n    Replace<ArrayItemIfArray<NonNullable<this['_schema'][HttpFormDataSchemaName<this['_schema']>]>>, Blob, File>\n  > {\n    return super.values() as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdataentries `formData.entries()` API reference} */\n  entries(): FormDataIterator<\n    [\n      HttpFormDataSchemaName<this['_schema']>,\n      Replace<ArrayItemIfArray<NonNullable<this['_schema'][HttpFormDataSchemaName<this['_schema']>]>>, Blob, File>,\n    ]\n  > {\n    return super.entries() as never;\n  }\n\n  [Symbol.iterator](): FormDataIterator<\n    [\n      HttpFormDataSchemaName<this['_schema']>,\n      Replace<ArrayItemIfArray<NonNullable<this['_schema'][HttpFormDataSchemaName<this['_schema']>]>>, Blob, File>,\n    ]\n  > {\n    return super[Symbol.iterator]() as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdataequals `formData.equals()` API reference} */\n  async equals<OtherSchema extends LooseSchema>(otherData: HttpFormData<OtherSchema>): Promise<boolean> {\n    if (!(await this.contains(otherData))) {\n      return false;\n    }\n\n    for (const fieldName of this.keys()) {\n      if (!super.has.call(otherData, fieldName)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatacontains `formData.contains()` API reference} */\n  async contains<OtherSchema extends LooseSchema>(otherData: HttpFormData<OtherSchema>): Promise<boolean> {\n    for (const [otherFieldName, otherFieldValue] of otherData.entries()) {\n      const fieldValues = super.getAll.call(this, otherFieldName);\n\n      const haveSameNumberOfFieldValues = fieldValues.length === super.getAll.call(otherData, otherFieldName).length;\n\n      if (!haveSameNumberOfFieldValues) {\n        return false;\n      }\n\n      let fieldValueExists = false;\n\n      for (const fieldValue of fieldValues) {\n        if (\n          fieldValue === otherFieldValue ||\n          (fieldValue instanceof Blob &&\n            (otherFieldValue as Blob) instanceof Blob &&\n            (await fileEquals(fieldValue, otherFieldValue)))\n        ) {\n          fieldValueExists = true;\n          break;\n        }\n      }\n\n      if (!fieldValueExists) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdataassign `formData.assign()` API reference} */\n  assign<OtherSchema extends LooseSchema>(...otherDataArray: HttpFormData<OtherSchema>[]) {\n    for (const otherData of otherDataArray) {\n      if (this === (otherData as unknown)) {\n        continue;\n      }\n\n      for (const fieldName of otherData.keys()) {\n        super.delete(fieldName);\n      }\n\n      for (const [fieldName, fieldValue] of otherData.entries()) {\n        super.append(fieldName, fieldValue);\n      }\n    }\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatatoobject `formData.toObject()` API reference} */\n  toObject() {\n    const object = {} as this['_schema'];\n\n    type SchemaValue = this['_schema'][HttpFormDataSchemaName<this['_schema']>];\n\n    for (const [fieldName, fieldValue] of this.entries()) {\n      if (fieldName in object) {\n        const existingFieldValue = object[fieldName] as SchemaValue[];\n\n        if (Array.isArray<SchemaValue>(existingFieldValue)) {\n          existingFieldValue.push(fieldValue);\n        } else {\n          object[fieldName] = [existingFieldValue, fieldValue] as SchemaValue;\n        }\n      } else {\n        object[fieldName] = fieldValue;\n      }\n    }\n\n    return object;\n  }\n}\n\nexport default HttpFormData;\n","import { Default, Replace } from '@zimic/utils/types';\n\nimport { HttpHeadersSchema, HttpHeadersInit, HttpHeadersSchemaName, HttpHeadersSerialized } from './types';\n\nfunction pickPrimitiveProperties<LooseSchema extends HttpHeadersSchema.Loose>(schema: LooseSchema) {\n  return Object.entries(schema).reduce<Record<string, string>>((accumulated, [key, value]) => {\n    if (value !== undefined) {\n      accumulated[key] = String(value);\n    }\n    return accumulated;\n  }, {});\n}\n\n/** @see {@link https://zimic.dev/docs/http/api/http-headers `HttpHeaders` API reference} */\nclass HttpHeaders<LooseSchema extends HttpHeadersSchema.Loose = HttpHeadersSchema.Loose> extends Headers {\n  readonly _schema!: HttpHeadersSerialized<LooseSchema>;\n\n  constructor(init?: HttpHeadersInit<LooseSchema>) {\n    if (init instanceof Headers || Array.isArray(init) || !init) {\n      super(init);\n    } else {\n      super(pickPrimitiveProperties(init));\n    }\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headersset `headers.set()` API reference} */\n  set<Name extends HttpHeadersSchemaName<this['_schema']>>(name: Name, value: NonNullable<LooseSchema[Name]>): void {\n    super.set(name, value);\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headersappend `headers.append()` API reference} */\n  append<Name extends HttpHeadersSchemaName<this['_schema']>>(name: Name, value: NonNullable<LooseSchema[Name]>): void {\n    super.append(name, value);\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headersget `headers.get()` API reference} */\n  get<Name extends HttpHeadersSchemaName<this['_schema']>>(\n    name: Name,\n  ): Replace<this['_schema'][Name], undefined, null> {\n    return super.get(name) as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headersgetsetcookie `headers.getSetCookie()` API reference} */\n  getSetCookie(): NonNullable<Default<this['_schema']['Set-Cookie'], string>>[] {\n    return super.getSetCookie() as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headershas `headers.has()` API reference} */\n  has<Name extends HttpHeadersSchemaName<this['_schema']>>(name: Name): boolean {\n    return super.has(name);\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headersdelete `headers.delete()` API reference} */\n  delete<Name extends HttpHeadersSchemaName<this['_schema']>>(name: Name): void {\n    super.delete(name);\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headersforeach `headers.forEach()` API reference} */\n  forEach<This extends HttpHeaders<this['_schema']>>(\n    callback: <Key extends HttpHeadersSchemaName<this['_schema']>>(\n      value: NonNullable<this['_schema'][Key]> & string,\n      key: Key,\n      headers: Headers,\n    ) => void,\n    thisArg?: This,\n  ): void {\n    super.forEach(callback as (value: string, key: string, parent: Headers) => void, thisArg);\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headerskeys `headers.keys()` API reference} */\n  keys(): HeadersIterator<HttpHeadersSchemaName<this['_schema']>> {\n    return super.keys() as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headersvalues `headers.values()` API reference} */\n  values(): HeadersIterator<NonNullable<this['_schema'][HttpHeadersSchemaName<this['_schema']>]> & string> {\n    return super.values() as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headersentries `headers.entries()` API reference} */\n  entries(): HeadersIterator<\n    [\n      HttpHeadersSchemaName<this['_schema']>,\n      NonNullable<this['_schema'][HttpHeadersSchemaName<this['_schema']>]> & string,\n    ]\n  > {\n    return super.entries() as never;\n  }\n\n  [Symbol.iterator](): HeadersIterator<\n    [\n      HttpHeadersSchemaName<this['_schema']>,\n      NonNullable<this['_schema'][HttpHeadersSchemaName<this['_schema']>]> & string,\n    ]\n  > {\n    return super[Symbol.iterator]() as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headersequals `headers.equals()` API reference} */\n  equals<OtherSchema extends LooseSchema>(otherHeaders: HttpHeaders<OtherSchema>): boolean {\n    if (!this.contains(otherHeaders)) {\n      return false;\n    }\n\n    for (const headerName of this.keys()) {\n      if (!super.has.call(otherHeaders, headerName)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headerscontains `headers.contains()` API reference} */\n  contains<OtherSchema extends LooseSchema>(otherHeaders: HttpHeaders<OtherSchema>): boolean {\n    for (const [headerName, otherHeaderValue] of otherHeaders.entries()) {\n      const headerValue = super.get.call(this, headerName);\n\n      if (headerValue === null) {\n        return false;\n      }\n\n      const headerValueItems = this.splitHeaderValues(headerValue);\n      const otherHeaderValueItems = this.splitHeaderValues(otherHeaderValue);\n\n      const haveSameNumberOfHeaderValues = headerValueItems.length === otherHeaderValueItems.length;\n\n      if (!haveSameNumberOfHeaderValues) {\n        return false;\n      }\n\n      for (const otherValueItem of otherHeaderValueItems) {\n        if (!headerValueItems.includes(otherValueItem)) {\n          return false;\n        }\n      }\n    }\n\n    return true;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headersassign `headers.assign()` API reference} */\n  assign<OtherSchema extends LooseSchema>(...otherHeadersArray: HttpHeaders<OtherSchema>[]) {\n    for (const otherHeaders of otherHeadersArray) {\n      if (this === (otherHeaders as unknown)) {\n        continue;\n      }\n\n      for (const headerName of otherHeaders.keys()) {\n        super.delete(headerName);\n      }\n\n      for (const [headerName, headerValue] of otherHeaders.entries()) {\n        super.append(headerName, headerValue);\n      }\n    }\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headerstoobject `headers.toObject()` API reference} */\n  toObject(): this['_schema'] {\n    const object = {} as this['_schema'];\n\n    for (const [headerName, headerValue] of this.entries()) {\n      object[headerName] = headerValue;\n    }\n\n    return object;\n  }\n\n  private splitHeaderValues(value: string) {\n    return value\n      .split(',')\n      .map((item) => item.trim())\n      .filter((item) => item.length > 0);\n  }\n}\n\nexport default HttpHeaders;\n","import { Replace, ArrayItemIfArray } from '@zimic/utils/types';\n\nimport {\n  HttpSearchParamsSchema,\n  HttpSearchParamsInit,\n  HttpSearchParamsSchemaName,\n  HttpSearchParamsSerialized,\n} from './types';\n\nfunction pickPrimitiveProperties<Schema extends HttpSearchParamsSchema.Loose>(schema: Schema) {\n  const schemaWithPrimitiveProperties = Object.entries(schema).reduce<Record<string, string>>(\n    (accumulated, [key, value]) => {\n      if (value !== undefined && !Array.isArray(value)) {\n        accumulated[key] = String(value);\n      }\n      return accumulated;\n    },\n    {},\n  );\n  return schemaWithPrimitiveProperties;\n}\n\n/** @see {@link https://zimic.dev/docs/http/api/http-search-params `HttpSearchParams` API reference} */\nclass HttpSearchParams<\n  LooseSchema extends HttpSearchParamsSchema.Loose = HttpSearchParamsSchema.Loose,\n> extends URLSearchParams {\n  readonly _schema!: HttpSearchParamsSerialized<LooseSchema>;\n\n  constructor(init?: HttpSearchParamsInit<LooseSchema>) {\n    if (init instanceof URLSearchParams || Array.isArray(init) || typeof init === 'string' || !init) {\n      super(init);\n    } else {\n      super(pickPrimitiveProperties(init));\n      this.populateInitArrayProperties(init);\n    }\n  }\n\n  private populateInitArrayProperties(init: LooseSchema) {\n    for (const [paramName, paramValues] of Object.entries(init)) {\n      if (Array.isArray(paramValues)) {\n        for (const paramValue of paramValues as unknown[]) {\n          super.append(paramName, String(paramValue));\n        }\n      }\n    }\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsset `searchParams.set()` API reference} */\n  set<Name extends HttpSearchParamsSchemaName<this['_schema']>>(\n    name: Name,\n    value: ArrayItemIfArray<NonNullable<LooseSchema[Name]>>,\n  ): void {\n    super.set(name, value);\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsappend `searchParams.append()` API reference} */\n  append<Name extends HttpSearchParamsSchemaName<this['_schema']>>(\n    name: Name,\n    value: ArrayItemIfArray<NonNullable<LooseSchema[Name]>>,\n  ): void {\n    super.append(name, value);\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsget `searchParams.get()` API reference} */\n  get<Name extends HttpSearchParamsSchemaName.NonArray<this['_schema']>>(\n    name: Name,\n  ): Replace<ArrayItemIfArray<this['_schema'][Name]>, undefined, null> {\n    return super.get(name) as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsgetall `searchParams.getAll()` API reference} */\n  getAll<Name extends HttpSearchParamsSchemaName.Array<this['_schema']>>(\n    name: Name,\n  ): ArrayItemIfArray<NonNullable<this['_schema'][Name]>>[] {\n    return super.getAll(name) as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamshas `searchParams.has()` API reference} */\n  has<Name extends HttpSearchParamsSchemaName<this['_schema']>>(\n    name: Name,\n    value?: ArrayItemIfArray<NonNullable<LooseSchema[Name]>>,\n  ): boolean {\n    return super.has(name, value);\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsdelete `searchParams.delete()` API reference} */\n  delete<Name extends HttpSearchParamsSchemaName<this['_schema']>>(\n    name: Name,\n    value?: ArrayItemIfArray<NonNullable<LooseSchema[Name]>>,\n  ): void {\n    super.delete(name, value);\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsforeach `searchParams.forEach()` API reference} */\n  forEach<This extends HttpSearchParams<this['_schema']>>(\n    callback: <Key extends HttpSearchParamsSchemaName<this['_schema']>>(\n      value: ArrayItemIfArray<NonNullable<this['_schema'][Key]>>,\n      key: Key,\n      searchParams: HttpSearchParams<this['_schema']>,\n    ) => void,\n    thisArg?: This,\n  ): void {\n    super.forEach(callback as (value: string, key: string, parent: URLSearchParams) => void, thisArg);\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamskeys `searchParams.keys()` API reference} */\n  keys(): URLSearchParamsIterator<HttpSearchParamsSchemaName<this['_schema']>> {\n    return super.keys() as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsvalues `searchParams.values()` API reference} */\n  values(): URLSearchParamsIterator<\n    ArrayItemIfArray<NonNullable<this['_schema'][HttpSearchParamsSchemaName<this['_schema']>]>>\n  > {\n    return super.values() as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsentries `searchParams.entries()` API reference} */\n  entries(): URLSearchParamsIterator<\n    [\n      HttpSearchParamsSchemaName<this['_schema']>,\n      ArrayItemIfArray<NonNullable<this['_schema'][HttpSearchParamsSchemaName<this['_schema']>]>>,\n    ]\n  > {\n    return super.entries() as never;\n  }\n\n  [Symbol.iterator](): URLSearchParamsIterator<\n    [\n      HttpSearchParamsSchemaName<this['_schema']>,\n      ArrayItemIfArray<NonNullable<this['_schema'][HttpSearchParamsSchemaName<this['_schema']>]>>,\n    ]\n  > {\n    return super[Symbol.iterator]() as never;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsequals `searchParams.equals()` API reference} */\n  equals<OtherSchema extends LooseSchema>(otherParams: HttpSearchParams<OtherSchema>): boolean {\n    return this.contains(otherParams) && this.size === otherParams.size;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamscontains `searchParams.contains()` API reference} */\n  contains<OtherSchema extends LooseSchema>(otherParams: HttpSearchParams<OtherSchema>): boolean {\n    for (const [paramName, otherParamValue] of otherParams.entries()) {\n      const paramValues = super.getAll.call(this, paramName);\n\n      const haveSameNumberOfParamValues = paramValues.length === super.getAll.call(otherParams, paramName).length;\n\n      if (!haveSameNumberOfParamValues) {\n        return false;\n      }\n\n      const paramValueExists = paramValues.includes(otherParamValue);\n\n      if (!paramValueExists) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsassign `searchParams.assign()` API reference} */\n  assign<OtherSchema extends LooseSchema>(...otherParamsArray: HttpSearchParams<OtherSchema>[]) {\n    for (const otherParams of otherParamsArray) {\n      if (this === (otherParams as unknown)) {\n        continue;\n      }\n\n      for (const paramName of otherParams.keys()) {\n        super.delete(paramName);\n      }\n\n      for (const [paramName, paramValue] of otherParams.entries()) {\n        super.append(paramName, paramValue);\n      }\n    }\n  }\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamstoobject `searchParams.toObject()` API reference} */\n  toObject() {\n    const object = {} as this['_schema'];\n\n    type SchemaValue = this['_schema'][HttpSearchParamsSchemaName<this['_schema']>];\n\n    for (const [paramName, paramValue] of this.entries()) {\n      if (paramName in object) {\n        const existingParamValue = object[paramName] as SchemaValue[];\n\n        if (Array.isArray<SchemaValue>(existingParamValue)) {\n          existingParamValue.push(paramValue);\n        } else {\n          object[paramName] = [existingParamValue, paramValue] as SchemaValue;\n        }\n      } else {\n        object[paramName] = paramValue;\n      }\n    }\n\n    return object;\n  }\n}\n\nexport default HttpSearchParams;\n","import {\n  IfAny,\n  UnionToIntersection,\n  UnionHasMoreThanOneType,\n  Prettify,\n  NonEmptyArray,\n  Branded,\n} from '@zimic/utils/types';\n\nimport { HttpFormDataSchema } from '../formData/types';\nimport { HttpHeadersSchema } from '../headers/types';\nimport { HttpPathParamsSchema } from '../pathParams/types';\nimport { HttpSearchParamsSchema } from '../searchParams/types';\nimport { HttpBody } from './requests';\n\nexport const HTTP_METHODS = Object.freeze(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'] as const);\n/**\n * A type representing the currently supported\n * {@link https://developer.mozilla.org/docs/Web/HTTP/Methods `HTTP methods`}.\n */\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\n/**\n * A schema representing the structure of an HTTP request.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport interface HttpRequestSchema {\n  headers?: HttpHeadersSchema.Loose;\n  searchParams?: HttpSearchParamsSchema.Loose;\n  body?: HttpBody.Loose;\n}\n\n/**\n * A schema representing the structure of an HTTP response.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport interface HttpResponseSchema {\n  headers?: HttpHeadersSchema.Loose;\n  body?: HttpBody.Loose;\n}\n\n/**\n * The status codes used in HTTP responses, as defined by\n * {@link https://httpwg.org/specs/rfc9110.html#overview.of.status.codes RFC-9110}.\n *\n * - `HttpStatusCode.Information`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#information_responses `1XX`}\n * - `HttpStatusCode.Success`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#successful_responses `2XX`}\n * - `HttpStatusCode.Redirection`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#redirection_messages `3XX`}\n * - `HttpStatusCode.ClientError`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#client_error_responses `4XX`}\n * - `HttpStatusCode.ServerError`: {@link https://developer.mozilla.org/docs/Web/HTTP/Status#server_error_responses `5XX`}\n */\nexport type HttpStatusCode =\n  | HttpStatusCode.Information\n  | HttpStatusCode.Success\n  | HttpStatusCode.Redirection\n  | HttpStatusCode.ClientError\n  | HttpStatusCode.ServerError;\n\nexport namespace HttpStatusCode {\n  /**\n   * An HTTP status code in the `1XX` range, representing an informational response.\n   *\n   * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#information_responses `1XX`}\n   */\n  export type Information =\n    | 100 // Continue\n    | 101 // Switching Protocols\n    | 102 // Processing\n    | 103; // Early Hints\n\n  /**\n   * An HTTP status code in the `2XX` range, representing a successful response.\n   *\n   * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#successful_responses `2XX`}\n   */\n  export type Success =\n    | 200 // OK\n    | 201 // Created\n    | 202 // Accepted\n    | 203 // Non-Authoritative Information\n    | 204 // No Content\n    | 205 // Reset Content\n    | 206 // Partial Content\n    | 207 // Multi-Status\n    | 208 // Already Reported\n    | 226; // IM Used\n\n  /**\n   * An HTTP status code in the `3XX` range, representing a redirection response.\n   *\n   * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#redirection_messages `3XX`}\n   */\n  export type Redirection =\n    | 300 // Multiple Choices\n    | 301 // Moved Permanently\n    | 302 // Found\n    | 303 // See Other\n    | 304 // Not Modified\n    | 307 // Temporary Redirect\n    | 308; // Permanent Redirect\n\n  /**\n   * An HTTP status code in the `4XX` range, representing a client error response.\n   *\n   * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#client_error_responses `4XX`}\n   */\n  export type ClientError =\n    | 400 // Bad Request\n    | 401 // Unauthorized\n    | 402 // Payment Required\n    | 403 // Forbidden\n    | 404 // Not Found\n    | 405 // Method Not Allowed\n    | 406 // Not Acceptable\n    | 407 // Proxy Authentication Required\n    | 408 // Request Timeout\n    | 409 // Conflict\n    | 410 // Gone\n    | 411 // Length Required\n    | 412 // Precondition Failed\n    | 413 // Content Too Large\n    | 414 // URI Too Long\n    | 415 // Unsupported Media Type\n    | 416 // Range Not Satisfiable\n    | 417 // Expectation Failed\n    | 418 // I'm a teapot\n    | 421 // Misdirected Request\n    | 422 // Unprocessable Content\n    | 423 // Locked\n    | 424 // Failed Dependency\n    | 425 // Too Early\n    | 426 // Upgrade Required\n    | 428 // Precondition Required\n    | 429 // Too Many Requests\n    | 431 // Request Header Fields Too Large\n    | 451; // Unavailable For Legal Reasons\n\n  /**\n   * An HTTP status code in the `5XX` range, representing a server error response.\n   *\n   * @see {@link https://developer.mozilla.org/docs/Web/HTTP/Status#server_error_responses `5XX`}\n   */\n  export type ServerError =\n    | 500 // Internal Server Error\n    | 501 // Not Implemented\n    | 502 // Bad Gateway\n    | 503 // Service Unavailable\n    | 504 // Gateway Timeout\n    | 505 // HTTP Version Not Supported\n    | 506 // Variant Also Negotiates\n    | 507 // Insufficient Storage\n    | 508 // Loop Detected\n    | 510 // Not Extended\n    | 511; // Network Authentication Required\n}\n\n/**\n * A schema representing the structure of HTTP responses by status code.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport type HttpResponseSchemaByStatusCode = {\n  [StatusCode in HttpStatusCode]?: HttpResponseSchema;\n};\n\n/**\n * Extracts the status codes used in a response schema by status code.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport type HttpResponseSchemaStatusCode<ResponseSchemaByStatusCode extends HttpResponseSchemaByStatusCode> =\n  keyof ResponseSchemaByStatusCode & HttpStatusCode;\n\n/**\n * A schema representing the structure of an HTTP request and response for a given method.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport interface HttpMethodSchema {\n  request?: HttpRequestSchema;\n  response?: HttpResponseSchemaByStatusCode;\n}\n\n/**\n * A schema representing the structure of HTTP request and response by method.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport interface HttpMethodsSchema {\n  GET?: HttpMethodSchema;\n  POST?: HttpMethodSchema;\n  PUT?: HttpMethodSchema;\n  PATCH?: HttpMethodSchema;\n  DELETE?: HttpMethodSchema;\n  HEAD?: HttpMethodSchema;\n  OPTIONS?: HttpMethodSchema;\n}\n\ninterface BaseHttpSchema {\n  [path: string]: HttpMethodsSchema;\n}\n\n/** @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference} */\nexport type HttpSchema<Schema extends BaseHttpSchema = BaseHttpSchema> = Branded<Schema, 'HttpSchema'>;\n\nexport namespace HttpSchema {\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemamethods `HttpSchema.Methods` API reference} */\n  export type Methods<Schema extends HttpMethodsSchema> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemamethod `HttpSchema.Method` API reference} */\n  export type Method<Schema extends HttpMethodSchema> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemarequest `HttpSchema.Request` API reference} */\n  export type Request<Schema extends HttpRequestSchema> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemaresponsebystatuscode `HttpSchema.ResponseByStatusCode` API reference} */\n  export type ResponseByStatusCode<Schema extends HttpResponseSchemaByStatusCode> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemaresponse  `HttpSchema.Response` API reference} */\n  export type Response<Schema extends HttpResponseSchema> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemabody `HttpSchema.Body` API reference} */\n  export type Body<Schema extends HttpBody.Loose> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemaheaders `HttpSchema.Headers` API reference} */\n  export type Headers<Schema extends HttpHeadersSchema.Loose> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemasearchparams `HttpSchema.SearchParams` API reference} */\n  export type SearchParams<Schema extends HttpSearchParamsSchema.Loose> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemapathparams `HttpSchema.PathParams` API reference} */\n  export type PathParams<Schema extends HttpPathParamsSchema.Loose> = Schema;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemaformdata `HttpSchema.FormData` API reference} */\n  export type FormData<Schema extends HttpFormDataSchema.Loose> = Schema;\n}\n\n/**\n * Extracts the methods from an HTTP service schema.\n *\n * @see {@link https://zimic.dev/docs/http/api/http-schema `HttpSchema` API reference}\n */\nexport type HttpSchemaMethod<Schema extends HttpSchema> = IfAny<\n  Schema,\n  any, // eslint-disable-line @typescript-eslint/no-explicit-any\n  keyof UnionToIntersection<Schema[keyof Schema]> & HttpMethod\n>;\n\ntype RepeatingPathParamModifier = '+';\ntype OptionalPathParamModifier = '?' | '*';\n\ntype ConvertPathParamToRecord<PathParam extends string> = PathParam extends `${infer PathParamWithoutSlash}/`\n  ? ConvertPathParamToRecord<PathParamWithoutSlash>\n  : PathParam extends `${infer PathParamWithoutSlash}\\\\:`\n    ? ConvertPathParamToRecord<PathParamWithoutSlash>\n    : PathParam extends `${infer PathParamWithoutModifier}${OptionalPathParamModifier}`\n      ? { [Name in PathParamWithoutModifier]?: string }\n      : PathParam extends `${infer PathParamWithoutModifier}${RepeatingPathParamModifier}`\n        ? { [Name in PathParamWithoutModifier]: string }\n        : { [Name in PathParam]: string };\n\ntype RecursiveInferPathParams<Path extends string> = Path extends `${infer Prefix}:${infer PathParamWithRemainingPath}`\n  ? PathParamWithRemainingPath extends `${infer PathParam}/${infer RemainingPath}`\n    ? Prefix extends `${string}\\\\`\n      ? RecursiveInferPathParams<RemainingPath>\n      : ConvertPathParamToRecord<PathParam> & RecursiveInferPathParams<RemainingPath>\n    : PathParamWithRemainingPath extends `${infer PathParam}\\\\:${infer RemainingPath}`\n      ? Prefix extends `${string}\\\\`\n        ? RecursiveInferPathParams<`\\\\:${RemainingPath}`>\n        : ConvertPathParamToRecord<PathParam> & RecursiveInferPathParams<`\\\\:${RemainingPath}`>\n      : PathParamWithRemainingPath extends `${infer PathParam}:${infer RemainingPath}`\n        ? Prefix extends `${string}\\\\`\n          ? RecursiveInferPathParams<RemainingPath>\n          : ConvertPathParamToRecord<PathParam> & RecursiveInferPathParams<`:${RemainingPath}`>\n        : Prefix extends `${string}\\\\`\n          ? {}\n          : ConvertPathParamToRecord<PathParamWithRemainingPath>\n  : {};\n\n/** @see {@link https://zimic.dev/docs/http/api/http-schema#inferpathparams `InferPathParams` API reference} */\nexport type InferPathParams<\n  PathOrSchema extends string | HttpSchema,\n  OptionalPath extends (PathOrSchema extends HttpSchema ? HttpSchemaPath.Literal<PathOrSchema> : never) = never,\n> = Prettify<\n  RecursiveInferPathParams<\n    PathOrSchema extends HttpSchema ? OptionalPath : PathOrSchema extends string ? PathOrSchema : never\n  >\n>;\n\ntype WithoutEscapedColons<Path extends string> = Path extends `${infer Prefix}\\\\:${infer Suffix}`\n  ? WithoutEscapedColons<`${Prefix}:${Suffix}`>\n  : Path;\n\ntype ConvertPathParamToString<PathParam extends string> = PathParam extends `${infer PathParamWithoutSlash}/`\n  ? `${ConvertPathParamToString<PathParamWithoutSlash>}/`\n  : PathParam extends `${infer PathParamWithoutSlash}\\\\:`\n    ? `${ConvertPathParamToString<PathParamWithoutSlash>}:`\n    : string;\n\nexport type AllowAnyStringInPathParams<Path extends string> =\n  Path extends `${infer Prefix}:${infer PathParamWithRemainingPath}`\n    ? PathParamWithRemainingPath extends `${infer PathParam}/${infer RemainingPath}`\n      ? Prefix extends `${infer PrefixPrefix}\\\\`\n        ? `${PrefixPrefix}:${AllowAnyStringInPathParams<PathParamWithRemainingPath>}`\n        : `${Prefix}${ConvertPathParamToString<PathParam>}/${AllowAnyStringInPathParams<RemainingPath>}`\n      : PathParamWithRemainingPath extends `${infer PathParam}\\\\:${infer RemainingPath}`\n        ? Prefix extends `${infer PrefixPrefix}\\\\`\n          ? `${PrefixPrefix}:${AllowAnyStringInPathParams<PathParamWithRemainingPath>}`\n          : `${Prefix}${ConvertPathParamToString<PathParam>}:${AllowAnyStringInPathParams<RemainingPath>}`\n        : PathParamWithRemainingPath extends `${infer PathParam}:${infer RemainingPath}`\n          ? Prefix extends `${infer PrefixPrefix}\\\\`\n            ? `${PrefixPrefix}:${AllowAnyStringInPathParams<PathParamWithRemainingPath>}`\n            : `${Prefix}${ConvertPathParamToString<PathParam>}${AllowAnyStringInPathParams<`:${RemainingPath}`>}`\n          : Prefix extends `${infer PrefixPrefix}\\\\`\n            ? `${PrefixPrefix}:${PathParamWithRemainingPath}`\n            : `${Prefix}${ConvertPathParamToString<PathParamWithRemainingPath>}`\n    : Path;\n\n/** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemapath `HttpSchemaPath` API reference} */\nexport namespace HttpSchemaPath {\n  type LooseLiteral<Schema extends HttpSchema, Method extends HttpMethod = HttpMethod> = {\n    [Path in keyof Schema & string]: Method extends keyof Schema[Path] ? Path : never;\n  }[keyof Schema & string];\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemapathliteral `HttpSchemaPath.Literal` API reference} */\n  export type Literal<\n    Schema extends HttpSchema,\n    Method extends HttpSchemaMethod<Schema> = HttpSchemaMethod<Schema>,\n  > = LooseLiteral<Schema, Method>;\n\n  /** @see {@link https://zimic.dev/docs/http/api/http-schema#httpschemapathnonliteral `HttpSchemaPath.NonLiteral` API reference} */\n  export type NonLiteral<\n    Schema extends HttpSchema,\n    Method extends HttpSchemaMethod<Schema> = HttpSchemaMethod<Schema>,\n  > = WithoutEscapedColons<AllowAnyStringInPathParams<LooseLiteral<Schema, Method>>>;\n}\n\nexport type HttpSchemaPath<\n  Schema extends HttpSchema,\n  Method extends HttpSchemaMethod<Schema> = HttpSchemaMethod<Schema>,\n> = HttpSchemaPath.Literal<Schema, Method> | HttpSchemaPath.NonLiteral<Schema, Method>;\n\ntype LargestPathPrefix<Path extends string> = Path extends `${infer Prefix}/${infer Suffix}`\n  ? `${Prefix}/${Suffix extends `${string}/${string}` ? LargestPathPrefix<Suffix> : ''}`\n  : Path;\n\ntype ExcludeNonLiteralPathsSupersededByLiteralPath<Path extends string> =\n  Path extends `${LargestPathPrefix<Path>}:${string}` ? never : Path;\n\nexport type PreferMostStaticLiteralPath<Path extends string> =\n  UnionHasMoreThanOneType<Path> extends true ? ExcludeNonLiteralPathsSupersededByLiteralPath<Path> : Path;\n\ntype RecursiveInferHttpSchemaPath<\n  Schema extends HttpSchema,\n  Method extends HttpSchemaMethod<Schema>,\n  NonLiteralPath extends string,\n  LiteralPath extends HttpSchemaPath.Literal<Schema, Method>,\n> =\n  NonLiteralPath extends AllowAnyStringInPathParams<LiteralPath>\n    ? NonLiteralPath extends `${AllowAnyStringInPathParams<LiteralPath>}/${string}`\n      ? never\n      : LiteralPath\n    : never;\n\nexport type LiteralHttpSchemaPathFromNonLiteral<\n  Schema extends HttpSchema,\n  Method extends HttpSchemaMethod<Schema>,\n  NonLiteralPath extends string,\n  LiteralPath extends HttpSchemaPath.Literal<Schema, Method> = HttpSchemaPath.Literal<Schema, Method>,\n> = PreferMostStaticLiteralPath<\n  LiteralPath extends LiteralPath ? RecursiveInferHttpSchemaPath<Schema, Method, NonLiteralPath, LiteralPath> : never\n>;\n\ntype OmitPastHttpStatusCodes<\n  Schema extends HttpResponseSchemaByStatusCode,\n  PastSchemas extends HttpResponseSchemaByStatusCode[],\n> =\n  PastSchemas extends NonEmptyArray<HttpResponseSchemaByStatusCode>\n    ? Omit<Schema, keyof UnionToIntersection<PastSchemas[number]>>\n    : Schema;\n\n/** @see {@link https://zimic.dev/docs/http/api/http-schema#mergehttpresponsesbystatuscode `MergeHttpResponsesByStatusCode` API reference} */\nexport type MergeHttpResponsesByStatusCode<\n  Schemas extends HttpResponseSchemaByStatusCode[],\n  PastSchemas extends HttpResponseSchemaByStatusCode[] = [],\n> = Schemas extends [\n  infer FirstSchema extends HttpResponseSchemaByStatusCode,\n  ...infer RestSchemas extends HttpResponseSchemaByStatusCode[],\n]\n  ? RestSchemas extends NonEmptyArray<HttpResponseSchemaByStatusCode>\n    ? OmitPastHttpStatusCodes<FirstSchema, PastSchemas> &\n        MergeHttpResponsesByStatusCode<RestSchemas, [...PastSchemas, FirstSchema]>\n    : OmitPastHttpStatusCodes<FirstSchema, PastSchemas>\n  : never;\n","import HttpFormData from '@/formData/HttpFormData';\nimport HttpSearchParams from '@/searchParams/HttpSearchParams';\nimport { HttpBody } from '@/types/requests';\n\n/**\n * Error thrown when a value is not valid {@link https://developer.mozilla.org/docs/Web/API/FormData FormData}. HTTP\n * interceptors might throw this error when trying to parse the body of a request or response with the header\n * `'content-type': 'multipart/form-data'`, if the content cannot be parsed to form data.\n */\nexport class InvalidFormDataError extends SyntaxError {\n  constructor(value: string) {\n    super(`Failed to parse value as form data: ${value}`);\n    this.name = 'InvalidFormDataError';\n  }\n}\n\n/**\n * Error thrown when a value is not valid JSON. HTTP interceptors might throw this error when trying to parse the body\n * of a request or response with the header `'content-type': 'application/json'`, if the content cannot be parsed to\n * JSON.\n */\nexport class InvalidJSONError extends SyntaxError {\n  constructor(value: string) {\n    super(`Failed to parse value as JSON: ${value}`);\n    this.name = 'InvalidJSONError';\n  }\n}\n\nasync function parseHttpBodyAsText<Body extends HttpBody>(resource: Request | Response) {\n  const bodyAsText = await resource.text();\n  return (bodyAsText || null) as Body;\n}\n\nasync function parseHttpBodyAsBlob<Body extends HttpBody>(resource: Request | Response) {\n  const bodyAsBlob = await resource.blob();\n  return bodyAsBlob as Body;\n}\n\nasync function parseHttpBodyAsFormData<Body extends HttpBody>(resource: Request | Response) {\n  const resourceClone = resource.clone();\n\n  try {\n    const bodyAsRawFormData = await resource.formData();\n    const bodyAsFormData = new HttpFormData();\n\n    for (const [key, value] of bodyAsRawFormData) {\n      bodyAsFormData.append(key, value);\n    }\n\n    return bodyAsFormData as Body;\n  } catch {\n    const bodyAsText = await resourceClone.text();\n\n    if (!bodyAsText.trim()) {\n      return null;\n    }\n\n    throw new InvalidFormDataError(bodyAsText);\n  }\n}\n\nasync function parseHttpBodyAsSearchParams<Body extends HttpBody>(resource: Request | Response) {\n  const bodyAsText = await resource.text();\n\n  if (!bodyAsText.trim()) {\n    return null;\n  }\n\n  const bodyAsSearchParams = new HttpSearchParams(bodyAsText);\n  return bodyAsSearchParams as Body;\n}\n\nasync function parseHttpBodyAsJSON<Body extends HttpBody>(resource: Request | Response) {\n  const bodyAsText = await resource.text();\n\n  if (!bodyAsText.trim()) {\n    return null;\n  }\n\n  try {\n    const bodyAsJSON = JSON.parse(bodyAsText) as Body;\n    return bodyAsJSON;\n  } catch {\n    throw new InvalidJSONError(bodyAsText);\n  }\n}\n\n/**\n * Parses the body of a {@link https://developer.mozilla.org/docs/Web/API/Request request} or\n * {@link https://developer.mozilla.org/docs/Web/API/Response response} based on its `content-type` header.\n *\n * If the body is empty, `null` is returned. If the `content-type` header is not present or not recognized, an attempt\n * is made to parse the body as JSON, and if that fails, it is returned as a `Blob`.\n *\n * | `content-type`                      | Parsed as                                                                |\n * | ----------------------------------- | ------------------------------------------------------------------------ |\n * | `application/json`                  | `JSON` (object)                                                          |\n * | `application/xml`                   | `string`                                                                 |\n * | `application/x-www-form-urlencoded` | [`HttpSearchParams`](https://zimic.dev/docs/http/api/http-search-params) |\n * | `application/*` (others)            | `Blob`                                                                   |\n * | `multipart/form-data`               | [`HttpFormData`](https://zimic.dev/docs/http/api/http-form-data)         |\n * | `multipart/*` (others)              | `Blob`                                                                   |\n * | `text/*`                            | `string`                                                                 |\n * | `image/*`                           | `Blob`                                                                   |\n * | `audio/*`                           | `Blob`                                                                   |\n * | `font/*`                            | `Blob`                                                                   |\n * | `video/*`                           | `Blob`                                                                   |\n * | Others                              | `JSON` if possible, otherwise `Blob`                                     |\n *\n * @throws {InvalidJSONError} If the `content-type` starts with `application/json` but the body cannot be parsed to\n *   JSON.\n * @throws {InvalidFormDataError} If the `content-type` starts with `multipart/form-data` but the body cannot be parsed\n *   to form data.\n */\nexport async function parseHttpBody<Body extends HttpBody = HttpBody>(resource: Request | Response) {\n  const contentType = resource.headers.get('content-type');\n\n  if (contentType?.startsWith('application/json')) {\n    return parseHttpBodyAsJSON<Body>(resource);\n  }\n\n  if (contentType?.startsWith('multipart/form-data')) {\n    return parseHttpBodyAsFormData<Body>(resource);\n  }\n\n  if (contentType?.startsWith('application/x-www-form-urlencoded')) {\n    return parseHttpBodyAsSearchParams<Body>(resource);\n  }\n\n  if (contentType?.startsWith('text/') || contentType?.startsWith('application/xml')) {\n    return parseHttpBodyAsText<Body>(resource);\n  }\n\n  if (\n    contentType?.startsWith('application/') ||\n    contentType?.startsWith('image/') ||\n    contentType?.startsWith('audio/') ||\n    contentType?.startsWith('font/') ||\n    contentType?.startsWith('video/') ||\n    contentType?.startsWith('multipart/')\n  ) {\n    return parseHttpBodyAsBlob<Body>(resource);\n  }\n\n  const resourceClone = resource.clone();\n\n  try {\n    return await parseHttpBodyAsJSON<Body>(resource);\n  } catch {\n    return parseHttpBodyAsBlob<Body>(resourceClone);\n  }\n}\n"]}