@zimic/http 1.2.2-canary.2 → 1.3.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"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.js","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/fileEquals';\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 as Blob);\n } else {\n super.set(name, blobOrValue as Blob, 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 as Blob);\n } else {\n super.append(name, blobOrValue as Blob, 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 key of this.keys()) {\n const otherHasKey = super.has.call(otherData, key);\n if (!otherHasKey) {\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 [otherKey, otherValue] of otherData.entries()) {\n const values = super.getAll.call(this, otherKey);\n\n const haveSameNumberOfValues = values.length === super.getAll.call(otherData, otherKey).length;\n if (!haveSameNumberOfValues) {\n return false;\n }\n\n let valueExists = false;\n\n for (const value of values) {\n if (\n value === otherValue ||\n (value instanceof Blob && (otherValue as Blob) instanceof Blob && (await fileEquals(value, otherValue)))\n ) {\n valueExists = true;\n break;\n }\n }\n\n if (!valueExists) {\n return false;\n }\n }\n\n return true;\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 [key, value] of this.entries()) {\n if (key in object) {\n const existingValue = object[key] as SchemaValue[];\n\n if (Array.isArray<SchemaValue>(existingValue)) {\n existingValue.push(value as SchemaValue);\n } else {\n object[key] = [existingValue, value] as SchemaValue;\n }\n } else {\n object[key] = value as SchemaValue;\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 key of this.keys()) {\n const otherHasKey = super.has.call(otherHeaders, key);\n if (!otherHasKey) {\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 [key, otherValue] of otherHeaders.entries()) {\n const value = super.get.call(this, key);\n\n if (value === null) {\n return false;\n }\n\n const valueItems = this.splitHeaderValues(value);\n const otherValueItems = this.splitHeaderValues(otherValue);\n\n const haveSameNumberOfValues = valueItems.length === otherValueItems.length;\n if (!haveSameNumberOfValues) {\n return false;\n }\n\n for (const otherValueItem of otherValueItems) {\n if (!valueItems.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#headerstoobject `headers.toObject()` API reference} */\n toObject(): this['_schema'] {\n const object = {} as this['_schema'];\n\n for (const [key, value] of this.entries()) {\n object[key] = value;\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 [key, value] of Object.entries(init)) {\n if (Array.isArray(value)) {\n for (const item of value as unknown[]) {\n super.append(key, String(item));\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 [key, otherValue] of otherParams.entries()) {\n const values = super.getAll.call(this, key);\n\n const haveSameNumberOfValues = values.length === super.getAll.call(otherParams, key).length;\n if (!haveSameNumberOfValues) {\n return false;\n }\n\n const valueExists = values.includes(otherValue);\n if (!valueExists) {\n return false;\n }\n }\n\n return true;\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 [key, value] of this.entries()) {\n if (key in object) {\n const existingValue = object[key] as SchemaValue[];\n\n if (Array.isArray<SchemaValue>(existingValue)) {\n existingValue.push(value as SchemaValue);\n } else {\n object[key] = [existingValue, value] as SchemaValue;\n }\n } else {\n object[key] = value as SchemaValue;\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"]}
1
+ {"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":";;;AAAA,eAAe,UAAA,CAAW,MAAY,SAAA,EAAiB;AACrD,EAAA,IAAI,KAAK,IAAA,KAAS,SAAA,CAAU,QAAQ,IAAA,CAAK,IAAA,KAAS,UAAU,IAAA,EAAM;AAChE,IAAA,OAAO,KAAA;AAAA;AAGT,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,EAAA,CAAS,SAAA,EAAA;AAC7B,EAAA,MAAM,WAAA,GAAc,SAAA,CAAU,MAAA,EAAA,CAAS,SAAA,EAAA;AAEvC,EAAA,IAAI,MAAA,GAAqB,IAAI,UAAA,CAAW,CAAC,CAAA;AACzC,EAAA,IAAI,WAAA,GAA0B,IAAI,UAAA,CAAW,CAAC,CAAA;AAE9C,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,qBAAsC,EAAA;AAE5C,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,QAAA,kBAAA,CAAmB,IAAA;AACjB,UAAA,MAAA,CAAO,IAAA,EAAA,CAAO,IAAA,CAAK,CAAC,MAAA,KAAW;AAC7B,YAAA,IAAI,CAAC,OAAO,IAAA,EAAM;AAChB,cAAA,MAAA,GAAS,MAAA,CAAO,KAAA;AAAA;WAEnB;AAAA,SAAA;AACH;AAGF,MAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,QAAA,kBAAA,CAAmB,IAAA;AACjB,UAAA,WAAA,CAAY,IAAA,EAAA,CAAO,IAAA,CAAK,CAAC,MAAA,KAAW;AAClC,YAAA,IAAI,CAAC,OAAO,IAAA,EAAM;AAChB,cAAA,WAAA,GAAc,MAAA,CAAO,KAAA;AAAA;WAExB;AAAA,SAAA;AACH;AAGF,MAAA,MAAM,OAAA,CAAQ,IAAI,kBAAkB,CAAA;AAEpC,MAAA,MAAM,wBAAA,GAA2B,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,YAAY,MAAA,KAAW,CAAA;AAE/E,MAAA,IAAI,wBAAA,EAA0B;AAC5B,QAAA,OAAO,IAAA;AAAA;AAGT,MAAA,MAAM,+BAAA,GACH,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,WAAA,CAAY,MAAA,GAAS,CAAA,IAAO,MAAA,CAAO,MAAA,GAAS,CAAA,IAAK,WAAA,CAAY,MAAA,KAAW,CAAA;AAElG,MAAA,IAAI,+BAAA,EAAiC;AACnC,QAAA,OAAO,KAAA;AAAA;AAGT,MAAA,MAAM,oBAAoB,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,MAAA,EAAQ,YAAY,MAAM,CAAA;AAEpE,MAAA,KAAA,IAAS,SAAA,GAAY,CAAA,EAAG,SAAA,GAAY,iBAAA,EAAmB,SAAA,EAAA,EAAa;AAClE,QAAA,IAAI,MAAA,CAAO,SAAS,CAAA,KAAM,WAAA,CAAY,SAAS,CAAA,EAAG;AAChD,UAAA,OAAO,KAAA;AAAA;AACT;AAGF,MAAA,MAAA,GAAS,MAAA,CAAO,MAAM,iBAAiB,CAAA;AACvC,MAAA,WAAA,GAAc,WAAA,CAAY,MAAM,iBAAiB,CAAA;AAAA;GACnD,SACF;AACE,IAAA,MAAA,CAAO,WAAA,EAAA;AACP,IAAA,WAAA,CAAY,WAAA,EAAA;AAAY;AAE5B;AAEA,IAAO,kBAAA,GAAQ,UAAA;;;ACjEf,eAAe,UAAA,CAAW,MAAY,SAAA,EAAiB;AACrD,EAAA,OAAO,KAAK,IAAA,KAAS,SAAA,CAAU,QAAS,MAAM,kBAAA,CAAW,MAAM,SAAS,CAAA;AAC1E;AAEA,IAAO,kBAAA,GAAQ,UAAA;;;ACAf,IAAM,YAAA,GAAN,cAAoG,QAAA,CAAS;AAAA,EAClG,OAAA;AAAA,EAYT,GAAA,CACE,IAAA,EACA,WAAA,EACA,QAAA,EACM;AACN,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,KAAA,CAAM,GAAA,CAAI,MAAM,WAAmB,CAAA;AAAA,KACrC,MAAO;AACL,MAAA,KAAA,CAAM,GAAA,CAAI,IAAA,EAAM,WAAA,EAAqB,QAAQ,CAAA;AAAA;AAC/C;AACF,EAYA,MAAA,CACE,IAAA,EACA,WAAA,EACA,QAAA,EACM;AACN,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,KAAA,CAAM,MAAA,CAAO,MAAM,WAAmB,CAAA;AAAA,KACxC,MAAO;AACL,MAAA,KAAA,CAAM,MAAA,CAAO,IAAA,EAAM,WAAA,EAAqB,QAAQ,CAAA;AAAA;AAClD;AACF;AAAA,EAGA,IACE,IAAA,EACwF;AACxF,IAAA,OAAO,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA;AACvB;AAAA,EAGA,OACE,IAAA,EAC6E;AAC7E,IAAA,OAAO,KAAA,CAAM,OAAO,IAAI,CAAA;AAAA;AAC1B;AAAA,EAGA,IAA0D,IAAA,EAAqB;AAC7E,IAAA,OAAO,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA;AACvB;AAAA,EAGA,OAA6D,IAAA,EAAkB;AAC7E,IAAA,KAAA,CAAM,OAAO,IAAI,CAAA;AAAA;AACnB;AAAA,EAGA,OAAA,CACE,UAKA,OAAA,EACM;AACN,IAAA,KAAA,CAAM,OAAA,CAAQ,UAAgF,OAAO,CAAA;AAAA;AACvG;AAAA,EAGA,IAAA,GAAkE;AAChE,IAAA,OAAO,MAAM,IAAA,EAAK;AAAA;AACpB;AAAA,EAGA,MAAA,GAEE;AACA,IAAA,OAAO,MAAM,MAAA,EAAO;AAAA;AACtB;AAAA,EAGA,OAAA,GAKE;AACA,IAAA,OAAO,MAAM,OAAA,EAAQ;AAAA;AACvB,EAEA,CAAC,MAAA,CAAO,QAAQ,CAAA,GAKd;AACA,IAAA,OAAO,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA;AAChC;AAAA,EAGA,MAAM,OAAwC,SAAA,EAAwD;AACpG,IAAA,IAAI,CAAE,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAI;AACrC,MAAA,OAAO,KAAA;AAAA;AAGT,IAAA,KAAA,MAAW,SAAA,IAAa,IAAA,CAAK,IAAA,EAAK,EAAG;AACnC,MAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,SAAA,EAAW,SAAS,CAAA,EAAG;AACzC,QAAA,OAAO,KAAA;AAAA;AACT;AAGF,IAAA,OAAO,IAAA;AAAA;AACT;AAAA,EAGA,MAAM,SAA0C,SAAA,EAAwD;AACtG,IAAA,KAAA,MAAW,CAAC,cAAA,EAAgB,eAAe,CAAA,IAAK,SAAA,CAAU,SAAQ,EAAG;AACnE,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,MAAM,cAAc,CAAA;AAE1D,MAAA,MAAM,2BAAA,GAA8B,YAAY,MAAA,KAAW,KAAA,CAAM,OAAO,IAAA,CAAK,SAAA,EAAW,cAAc,CAAA,CAAE,MAAA;AAExG,MAAA,IAAI,CAAC,2BAAA,EAA6B;AAChC,QAAA,OAAO,KAAA;AAAA;AAGT,MAAA,IAAI,gBAAA,GAAmB,KAAA;AAEvB,MAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AACpC,QAAA,IACE,UAAA,KAAe,eAAA,IACd,UAAA,YAAsB,IAAA,IACpB,eAAA,YAAoC,QACpC,MAAM,kBAAA,CAAW,UAAA,EAAY,eAAe,CAAA,EAC/C;AACA,UAAA,gBAAA,GAAmB,IAAA;AACnB,UAAA;AAAA;AACF;AAGF,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,OAAO,KAAA;AAAA;AACT;AAGF,IAAA,OAAO,IAAA;AAAA;AACT;AAAA,EAGA,UAA2C,cAAA,EAA6C;AACtF,IAAA,KAAA,MAAW,aAAa,cAAA,EAAgB;AACtC,MAAA,IAAI,SAAU,SAAA,EAAuB;AACnC,QAAA;AAAA;AAGF,MAAA,KAAA,MAAW,SAAA,IAAa,SAAA,CAAU,IAAA,EAAK,EAAG;AACxC,QAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAAA;AAGxB,MAAA,KAAA,MAAW,CAAC,SAAA,EAAW,UAAU,CAAA,IAAK,SAAA,CAAU,SAAQ,EAAG;AACzD,QAAA,KAAA,CAAM,MAAA,CAAO,WAAW,UAAU,CAAA;AAAA;AACpC;AACF;AACF;AAAA,EAGA,QAAA,GAAW;AACT,IAAA,MAAM,SAAS,EAAC;AAIhB,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,UAAU,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACpD,MAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,QAAA,MAAM,kBAAA,GAAqB,OAAO,SAAS,CAAA;AAE3C,QAAA,IAAI,KAAA,CAAM,OAAA,CAAqB,kBAAkB,CAAA,EAAG;AAClD,UAAA,kBAAA,CAAmB,KAAK,UAAyB,CAAA;AAAA,SACnD,MAAO;AACL,UAAA,MAAA,CAAO,SAAS,CAAA,GAAI,CAAC,kBAAA,EAAoB,UAAU,CAAA;AAAA;AACrD,OACF,MAAO;AACL,QAAA,MAAA,CAAO,SAAS,CAAA,GAAI,UAAA;AAAA;AACtB;AAGF,IAAA,OAAO,MAAA;AAAA;AAEX,CAAA;AAEA,IAAO,oBAAA,GAAQ;;;AC7Mf,SAAS,wBAAqE,MAAA,EAAqB;AACjG,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,MAAA,CAA+B,CAAC,WAAA,EAAa,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC1F,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,WAAA,CAAY,GAAG,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAAA;AAEjC,IAAA,OAAO,WAAA;AAAA,GACT,EAAG,EAAE,CAAA;AACP;AAGA,IAAM,WAAA,GAAN,cAAiG,OAAA,CAAQ;AAAA,EAC9F,OAAA;AAAA,EAET,YAAY,IAAA,EAAqC;AAC/C,IAAA,IAAI,gBAAgB,OAAA,IAAW,KAAA,CAAM,QAAQ,IAAI,CAAA,IAAK,CAAC,IAAA,EAAM;AAC3D,MAAA,KAAA,CAAM,IAAI,CAAA;AAAA,KACZ,MAAO;AACL,MAAA,KAAA,CAAM,uBAAA,CAAwB,IAAI,CAAC,CAAA;AAAA;AACrC;AACF;AAAA,EAGA,GAAA,CAAyD,MAAY,KAAA,EAA6C;AAChH,IAAA,KAAA,CAAM,GAAA,CAAI,MAAM,KAAK,CAAA;AAAA;AACvB;AAAA,EAGA,MAAA,CAA4D,MAAY,KAAA,EAA6C;AACnH,IAAA,KAAA,CAAM,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA;AAC1B;AAAA,EAGA,IACE,IAAA,EACiD;AACjD,IAAA,OAAO,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA;AACvB;AAAA,EAGA,YAAA,GAA8E;AAC5E,IAAA,OAAO,MAAM,YAAA,EAAa;AAAA;AAC5B;AAAA,EAGA,IAAyD,IAAA,EAAqB;AAC5E,IAAA,OAAO,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA;AACvB;AAAA,EAGA,OAA4D,IAAA,EAAkB;AAC5E,IAAA,KAAA,CAAM,OAAO,IAAI,CAAA;AAAA;AACnB;AAAA,EAGA,OAAA,CACE,UAKA,OAAA,EACM;AACN,IAAA,KAAA,CAAM,OAAA,CAAQ,UAAmE,OAAO,CAAA;AAAA;AAC1F;AAAA,EAGA,IAAA,GAAgE;AAC9D,IAAA,OAAO,MAAM,IAAA,EAAK;AAAA;AACpB;AAAA,EAGA,MAAA,GAAyG;AACvG,IAAA,OAAO,MAAM,MAAA,EAAO;AAAA;AACtB;AAAA,EAGA,OAAA,GAKE;AACA,IAAA,OAAO,MAAM,OAAA,EAAQ;AAAA;AACvB,EAEA,CAAC,MAAA,CAAO,QAAQ,CAAA,GAKd;AACA,IAAA,OAAO,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA;AAChC;AAAA,EAGA,OAAwC,YAAA,EAAiD;AACvF,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,EAAG;AAChC,MAAA,OAAO,KAAA;AAAA;AAGT,IAAA,KAAA,MAAW,UAAA,IAAc,IAAA,CAAK,IAAA,EAAK,EAAG;AACpC,MAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,YAAA,EAAc,UAAU,CAAA,EAAG;AAC7C,QAAA,OAAO,KAAA;AAAA;AACT;AAGF,IAAA,OAAO,IAAA;AAAA;AACT;AAAA,EAGA,SAA0C,YAAA,EAAiD;AACzF,IAAA,KAAA,MAAW,CAAC,UAAA,EAAY,gBAAgB,CAAA,IAAK,YAAA,CAAa,SAAQ,EAAG;AACnE,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,MAAM,UAAU,CAAA;AAEnD,MAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,QAAA,OAAO,KAAA;AAAA;AAGT,MAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,iBAAA,CAAkB,WAAW,CAAA;AAC3D,MAAA,MAAM,qBAAA,GAAwB,IAAA,CAAK,iBAAA,CAAkB,gBAAgB,CAAA;AAErE,MAAA,MAAM,4BAAA,GAA+B,gBAAA,CAAiB,MAAA,KAAW,qBAAA,CAAsB,MAAA;AAEvF,MAAA,IAAI,CAAC,4BAAA,EAA8B;AACjC,QAAA,OAAO,KAAA;AAAA;AAGT,MAAA,KAAA,MAAW,kBAAkB,qBAAA,EAAuB;AAClD,QAAA,IAAI,CAAC,gBAAA,CAAiB,QAAA,CAAS,cAAc,CAAA,EAAG;AAC9C,UAAA,OAAO,KAAA;AAAA;AACT;AACF;AAGF,IAAA,OAAO,IAAA;AAAA;AACT;AAAA,EAGA,UAA2C,iBAAA,EAA+C;AACxF,IAAA,KAAA,MAAW,gBAAgB,iBAAA,EAAmB;AAC5C,MAAA,IAAI,SAAU,YAAA,EAA0B;AACtC,QAAA;AAAA;AAGF,MAAA,KAAA,MAAW,UAAA,IAAc,YAAA,CAAa,IAAA,EAAK,EAAG;AAC5C,QAAA,KAAA,CAAM,OAAO,UAAU,CAAA;AAAA;AAGzB,MAAA,KAAA,MAAW,CAAC,UAAA,EAAY,WAAW,CAAA,IAAK,YAAA,CAAa,SAAQ,EAAG;AAC9D,QAAA,KAAA,CAAM,MAAA,CAAO,YAAY,WAAW,CAAA;AAAA;AACtC;AACF;AACF;AAAA,EAGA,QAAA,GAA4B;AAC1B,IAAA,MAAM,SAAS,EAAC;AAEhB,IAAA,KAAA,MAAW,CAAC,UAAA,EAAY,WAAW,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACtD,MAAA,MAAA,CAAO,UAAU,CAAA,GAAI,WAAA;AAAA;AAGvB,IAAA,OAAO,MAAA;AAAA;AACT,EAEQ,kBAAkB,KAAA,EAAe;AACvC,IAAA,OAAO,MACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,EACzB,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA;AAEvC,CAAA;AAEA,IAAO,mBAAA,GAAQ;;;ACxKf,SAASA,yBAAqE,MAAA,EAAgB;AAC5F,EAAA,MAAM,6BAAA,GAAgC,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,MAAA;AAAA,IAC3D,CAAC,WAAA,EAAa,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC7B,MAAA,IAAI,UAAU,MAAA,IAAa,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,QAAA,WAAA,CAAY,GAAG,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAAA;AAEjC,MAAA,OAAO,WAAA;AAAA,KACT;AAAA,IACA;AAAC,GACH;AACA,EAAA,OAAO,6BAAA;AACT;AAGA,IAAM,gBAAA,GAAN,cAEU,eAAA,CAAgB;AAAA,EACf,OAAA;AAAA,EAET,YAAY,IAAA,EAA0C;AACpD,IAAA,IAAI,IAAA,YAAgB,eAAA,IAAmB,KAAA,CAAM,OAAA,CAAQ,IAAI,KAAK,OAAO,IAAA,KAAS,QAAA,IAAY,CAAC,IAAA,EAAM;AAC/F,MAAA,KAAA,CAAM,IAAI,CAAA;AAAA,KACZ,MAAO;AACL,MAAA,KAAA,CAAMA,wBAAAA,CAAwB,IAAI,CAAC,CAAA;AACnC,MAAA,IAAA,CAAK,4BAA4B,IAAI,CAAA;AAAA;AACvC;AACF,EAEQ,4BAA4B,IAAA,EAAmB;AACrD,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,WAAW,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC3D,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC9B,QAAA,KAAA,MAAW,cAAc,WAAA,EAA0B;AACjD,UAAA,KAAA,CAAM,MAAA,CAAO,SAAA,EAAW,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA;AAC5C;AACF;AACF;AACF;AAAA,EAGA,GAAA,CACE,MACA,KAAA,EACM;AACN,IAAA,KAAA,CAAM,GAAA,CAAI,MAAM,KAAK,CAAA;AAAA;AACvB;AAAA,EAGA,MAAA,CACE,MACA,KAAA,EACM;AACN,IAAA,KAAA,CAAM,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA;AAC1B;AAAA,EAGA,IACE,IAAA,EACmE;AACnE,IAAA,OAAO,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA;AACvB;AAAA,EAGA,OACE,IAAA,EACwD;AACxD,IAAA,OAAO,KAAA,CAAM,OAAO,IAAI,CAAA;AAAA;AAC1B;AAAA,EAGA,GAAA,CACE,MACA,KAAA,EACS;AACT,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AAAA;AAC9B;AAAA,EAGA,MAAA,CACE,MACA,KAAA,EACM;AACN,IAAA,KAAA,CAAM,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA;AAC1B;AAAA,EAGA,OAAA,CACE,UAKA,OAAA,EACM;AACN,IAAA,KAAA,CAAM,OAAA,CAAQ,UAA2E,OAAO,CAAA;AAAA;AAClG;AAAA,EAGA,IAAA,GAA6E;AAC3E,IAAA,OAAO,MAAM,IAAA,EAAK;AAAA;AACpB;AAAA,EAGA,MAAA,GAEE;AACA,IAAA,OAAO,MAAM,MAAA,EAAO;AAAA;AACtB;AAAA,EAGA,OAAA,GAKE;AACA,IAAA,OAAO,MAAM,OAAA,EAAQ;AAAA;AACvB,EAEA,CAAC,MAAA,CAAO,QAAQ,CAAA,GAKd;AACA,IAAA,OAAO,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA;AAChC;AAAA,EAGA,OAAwC,WAAA,EAAqD;AAC3F,IAAA,OAAO,KAAK,QAAA,CAAS,WAAW,CAAA,IAAK,IAAA,CAAK,SAAS,WAAA,CAAY,IAAA;AAAA;AACjE;AAAA,EAGA,SAA0C,WAAA,EAAqD;AAC7F,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,eAAe,CAAA,IAAK,WAAA,CAAY,SAAQ,EAAG;AAChE,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,MAAM,SAAS,CAAA;AAErD,MAAA,MAAM,2BAAA,GAA8B,YAAY,MAAA,KAAW,KAAA,CAAM,OAAO,IAAA,CAAK,WAAA,EAAa,SAAS,CAAA,CAAE,MAAA;AAErG,MAAA,IAAI,CAAC,2BAAA,EAA6B;AAChC,QAAA,OAAO,KAAA;AAAA;AAGT,MAAA,MAAM,gBAAA,GAAmB,WAAA,CAAY,QAAA,CAAS,eAAe,CAAA;AAE7D,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,OAAO,KAAA;AAAA;AACT;AAGF,IAAA,OAAO,IAAA;AAAA;AACT;AAAA,EAGA,UAA2C,gBAAA,EAAmD;AAC5F,IAAA,KAAA,MAAW,eAAe,gBAAA,EAAkB;AAC1C,MAAA,IAAI,SAAU,WAAA,EAAyB;AACrC,QAAA;AAAA;AAGF,MAAA,KAAA,MAAW,SAAA,IAAa,WAAA,CAAY,IAAA,EAAK,EAAG;AAC1C,QAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAAA;AAGxB,MAAA,KAAA,MAAW,CAAC,SAAA,EAAW,UAAU,CAAA,IAAK,WAAA,CAAY,SAAQ,EAAG;AAC3D,QAAA,KAAA,CAAM,MAAA,CAAO,WAAW,UAAU,CAAA;AAAA;AACpC;AACF;AACF;AAAA,EAGA,QAAA,GAAW;AACT,IAAA,MAAM,SAAS,EAAC;AAIhB,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,UAAU,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACpD,MAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,QAAA,MAAM,kBAAA,GAAqB,OAAO,SAAS,CAAA;AAE3C,QAAA,IAAI,KAAA,CAAM,OAAA,CAAqB,kBAAkB,CAAA,EAAG;AAClD,UAAA,kBAAA,CAAmB,KAAK,UAAyB,CAAA;AAAA,SACnD,MAAO;AACL,UAAA,MAAA,CAAO,SAAS,CAAA,GAAI,CAAC,kBAAA,EAAoB,UAAU,CAAA;AAAA;AACrD,OACF,MAAO;AACL,QAAA,MAAA,CAAO,SAAS,CAAA,GAAI,UAAA;AAAA;AACtB;AAGF,IAAA,OAAO,MAAA;AAAA;AAEX,CAAA;AAEA,IAAO,wBAAA,GAAQ;;;AC5LR,IAAM,YAAA,GAAe,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,QAAA,EAAU,MAAA,EAAQ,SAAS,CAAU;;;ACNxG,IAAM,oBAAA,GAAN,cAAmC,WAAA,CAAY;AAAA,EACpD,YAAY,KAAA,EAAe;AACzB,IAAA,KAAA,CAAM,CAAA,oCAAA,EAAuC,KAAK,CAAA,CAAE,CAAA;AACpD,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AAAA;AAEhB;AAOO,IAAM,gBAAA,GAAN,cAA+B,WAAA,CAAY;AAAA,EAChD,YAAY,KAAA,EAAe;AACzB,IAAA,KAAA,CAAM,CAAA,+BAAA,EAAkC,KAAK,CAAA,CAAE,CAAA;AAC/C,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA;AAEhB;AAEA,eAAe,oBAA2C,QAAA,EAA8B;AACtF,EAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAAS,IAAA,EAAK;AACvC,EAAA,OAAQ,UAAA,IAAc,IAAA;AACxB;AAEA,eAAe,oBAA2C,QAAA,EAA8B;AACtF,EAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAAS,IAAA,EAAK;AACvC,EAAA,OAAO,UAAA;AACT;AAEA,eAAe,wBAA+C,QAAA,EAA8B;AAC1F,EAAA,MAAM,aAAA,GAAgB,SAAS,KAAA,EAAM;AAErC,EAAA,IAAI;AACF,IAAA,MAAM,iBAAA,GAAoB,MAAM,QAAA,CAAS,QAAA,EAAS;AAClD,IAAA,MAAM,cAAA,GAAiB,IAAI,oBAAA,EAAa;AAExC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,iBAAA,EAAmB;AAC5C,MAAA,cAAA,CAAe,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA;AAGlC,IAAA,OAAO,cAAA;AAAA,GACT,CAAA,MAAQ;AACN,IAAA,MAAM,UAAA,GAAa,MAAM,aAAA,CAAc,IAAA,EAAK;AAE5C,IAAA,IAAI,CAAC,UAAA,CAAW,IAAA,EAAK,EAAG;AACtB,MAAA,OAAO,IAAA;AAAA;AAGT,IAAA,MAAM,IAAI,qBAAqB,UAAU,CAAA;AAAA;AAE7C;AAEA,eAAe,4BAAmD,QAAA,EAA8B;AAC9F,EAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAAS,IAAA,EAAK;AAEvC,EAAA,IAAI,CAAC,UAAA,CAAW,IAAA,EAAK,EAAG;AACtB,IAAA,OAAO,IAAA;AAAA;AAGT,EAAA,MAAM,kBAAA,GAAqB,IAAI,wBAAA,CAAiB,UAAU,CAAA;AAC1D,EAAA,OAAO,kBAAA;AACT;AAEA,eAAe,oBAA2C,QAAA,EAA8B;AACtF,EAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAAS,IAAA,EAAK;AAEvC,EAAA,IAAI,CAAC,UAAA,CAAW,IAAA,EAAK,EAAG;AACtB,IAAA,OAAO,IAAA;AAAA;AAGT,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AACxC,IAAA,OAAO,UAAA;AAAA,GACT,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,iBAAiB,UAAU,CAAA;AAAA;AAEzC;AA6BA,eAAsB,cAAgD,QAAA,EAA8B;AAClG,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA;AAEvD,EAAA,IAAI,WAAA,EAAa,UAAA,CAAW,kBAAkB,CAAA,EAAG;AAC/C,IAAA,OAAO,oBAA0B,QAAQ,CAAA;AAAA;AAG3C,EAAA,IAAI,WAAA,EAAa,UAAA,CAAW,qBAAqB,CAAA,EAAG;AAClD,IAAA,OAAO,wBAA8B,QAAQ,CAAA;AAAA;AAG/C,EAAA,IAAI,WAAA,EAAa,UAAA,CAAW,mCAAmC,CAAA,EAAG;AAChE,IAAA,OAAO,4BAAkC,QAAQ,CAAA;AAAA;AAGnD,EAAA,IAAI,aAAa,UAAA,CAAW,OAAO,KAAK,WAAA,EAAa,UAAA,CAAW,iBAAiB,CAAA,EAAG;AAClF,IAAA,OAAO,oBAA0B,QAAQ,CAAA;AAAA;AAG3C,EAAA,IACE,WAAA,EAAa,WAAW,cAAc,CAAA,IACtC,aAAa,UAAA,CAAW,QAAQ,CAAA,IAChC,WAAA,EAAa,UAAA,CAAW,QAAQ,KAChC,WAAA,EAAa,UAAA,CAAW,OAAO,CAAA,IAC/B,WAAA,EAAa,UAAA,CAAW,QAAQ,CAAA,IAChC,WAAA,EAAa,UAAA,CAAW,YAAY,CAAA,EACpC;AACA,IAAA,OAAO,oBAA0B,QAAQ,CAAA;AAAA;AAG3C,EAAA,MAAM,aAAA,GAAgB,SAAS,KAAA,EAAM;AAErC,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,oBAA0B,QAAQ,CAAA;AAAA,GACjD,CAAA,MAAQ;AACN,IAAA,OAAO,oBAA0B,aAAa,CAAA;AAAA;AAElD","file":"index.js","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/fileEquals';\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 as Blob);\n } else {\n super.set(name, blobOrValue as Blob, 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 as Blob);\n } else {\n super.append(name, blobOrValue as Blob, 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 as SchemaValue);\n } else {\n object[fieldName] = [existingFieldValue, fieldValue] as SchemaValue;\n }\n } else {\n object[fieldName] = fieldValue as SchemaValue;\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 as SchemaValue);\n } else {\n object[paramName] = [existingParamValue, paramValue] as SchemaValue;\n }\n } else {\n object[paramName] = paramValue as SchemaValue;\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"]}
package/dist/index.mjs CHANGED
@@ -116,9 +116,8 @@ var HttpFormData = class extends FormData {
116
116
  if (!await this.contains(otherData)) {
117
117
  return false;
118
118
  }
119
- for (const key of this.keys()) {
120
- const otherHasKey = super.has.call(otherData, key);
121
- if (!otherHasKey) {
119
+ for (const fieldName of this.keys()) {
120
+ if (!super.has.call(otherData, fieldName)) {
122
121
  return false;
123
122
  }
124
123
  }
@@ -126,38 +125,52 @@ var HttpFormData = class extends FormData {
126
125
  }
127
126
  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatacontains `formData.contains()` API reference} */
128
127
  async contains(otherData) {
129
- for (const [otherKey, otherValue] of otherData.entries()) {
130
- const values = super.getAll.call(this, otherKey);
131
- const haveSameNumberOfValues = values.length === super.getAll.call(otherData, otherKey).length;
132
- if (!haveSameNumberOfValues) {
128
+ for (const [otherFieldName, otherFieldValue] of otherData.entries()) {
129
+ const fieldValues = super.getAll.call(this, otherFieldName);
130
+ const haveSameNumberOfFieldValues = fieldValues.length === super.getAll.call(otherData, otherFieldName).length;
131
+ if (!haveSameNumberOfFieldValues) {
133
132
  return false;
134
133
  }
135
- let valueExists = false;
136
- for (const value of values) {
137
- if (value === otherValue || value instanceof Blob && otherValue instanceof Blob && await fileEquals_default(value, otherValue)) {
138
- valueExists = true;
134
+ let fieldValueExists = false;
135
+ for (const fieldValue of fieldValues) {
136
+ if (fieldValue === otherFieldValue || fieldValue instanceof Blob && otherFieldValue instanceof Blob && await fileEquals_default(fieldValue, otherFieldValue)) {
137
+ fieldValueExists = true;
139
138
  break;
140
139
  }
141
140
  }
142
- if (!valueExists) {
141
+ if (!fieldValueExists) {
143
142
  return false;
144
143
  }
145
144
  }
146
145
  return true;
147
146
  }
147
+ /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdataassign `formData.assign()` API reference} */
148
+ assign(...otherDataArray) {
149
+ for (const otherData of otherDataArray) {
150
+ if (this === otherData) {
151
+ continue;
152
+ }
153
+ for (const fieldName of otherData.keys()) {
154
+ super.delete(fieldName);
155
+ }
156
+ for (const [fieldName, fieldValue] of otherData.entries()) {
157
+ super.append(fieldName, fieldValue);
158
+ }
159
+ }
160
+ }
148
161
  /** @see {@link https://zimic.dev/docs/http/api/http-form-data#formdatatoobject `formData.toObject()` API reference} */
149
162
  toObject() {
150
163
  const object = {};
151
- for (const [key, value] of this.entries()) {
152
- if (key in object) {
153
- const existingValue = object[key];
154
- if (Array.isArray(existingValue)) {
155
- existingValue.push(value);
164
+ for (const [fieldName, fieldValue] of this.entries()) {
165
+ if (fieldName in object) {
166
+ const existingFieldValue = object[fieldName];
167
+ if (Array.isArray(existingFieldValue)) {
168
+ existingFieldValue.push(fieldValue);
156
169
  } else {
157
- object[key] = [existingValue, value];
170
+ object[fieldName] = [existingFieldValue, fieldValue];
158
171
  }
159
172
  } else {
160
- object[key] = value;
173
+ object[fieldName] = fieldValue;
161
174
  }
162
175
  }
163
176
  return object;
@@ -231,9 +244,8 @@ var HttpHeaders = class extends Headers {
231
244
  if (!this.contains(otherHeaders)) {
232
245
  return false;
233
246
  }
234
- for (const key of this.keys()) {
235
- const otherHasKey = super.has.call(otherHeaders, key);
236
- if (!otherHasKey) {
247
+ for (const headerName of this.keys()) {
248
+ if (!super.has.call(otherHeaders, headerName)) {
237
249
  return false;
238
250
  }
239
251
  }
@@ -241,30 +253,44 @@ var HttpHeaders = class extends Headers {
241
253
  }
242
254
  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headerscontains `headers.contains()` API reference} */
243
255
  contains(otherHeaders) {
244
- for (const [key, otherValue] of otherHeaders.entries()) {
245
- const value = super.get.call(this, key);
246
- if (value === null) {
256
+ for (const [headerName, otherHeaderValue] of otherHeaders.entries()) {
257
+ const headerValue = super.get.call(this, headerName);
258
+ if (headerValue === null) {
247
259
  return false;
248
260
  }
249
- const valueItems = this.splitHeaderValues(value);
250
- const otherValueItems = this.splitHeaderValues(otherValue);
251
- const haveSameNumberOfValues = valueItems.length === otherValueItems.length;
252
- if (!haveSameNumberOfValues) {
261
+ const headerValueItems = this.splitHeaderValues(headerValue);
262
+ const otherHeaderValueItems = this.splitHeaderValues(otherHeaderValue);
263
+ const haveSameNumberOfHeaderValues = headerValueItems.length === otherHeaderValueItems.length;
264
+ if (!haveSameNumberOfHeaderValues) {
253
265
  return false;
254
266
  }
255
- for (const otherValueItem of otherValueItems) {
256
- if (!valueItems.includes(otherValueItem)) {
267
+ for (const otherValueItem of otherHeaderValueItems) {
268
+ if (!headerValueItems.includes(otherValueItem)) {
257
269
  return false;
258
270
  }
259
271
  }
260
272
  }
261
273
  return true;
262
274
  }
275
+ /** @see {@link https://zimic.dev/docs/http/api/http-headers#headersassign `headers.assign()` API reference} */
276
+ assign(...otherHeadersArray) {
277
+ for (const otherHeaders of otherHeadersArray) {
278
+ if (this === otherHeaders) {
279
+ continue;
280
+ }
281
+ for (const headerName of otherHeaders.keys()) {
282
+ super.delete(headerName);
283
+ }
284
+ for (const [headerName, headerValue] of otherHeaders.entries()) {
285
+ super.append(headerName, headerValue);
286
+ }
287
+ }
288
+ }
263
289
  /** @see {@link https://zimic.dev/docs/http/api/http-headers#headerstoobject `headers.toObject()` API reference} */
264
290
  toObject() {
265
291
  const object = {};
266
- for (const [key, value] of this.entries()) {
267
- object[key] = value;
292
+ for (const [headerName, headerValue] of this.entries()) {
293
+ object[headerName] = headerValue;
268
294
  }
269
295
  return object;
270
296
  }
@@ -298,10 +324,10 @@ var HttpSearchParams = class extends URLSearchParams {
298
324
  }
299
325
  }
300
326
  populateInitArrayProperties(init) {
301
- for (const [key, value] of Object.entries(init)) {
302
- if (Array.isArray(value)) {
303
- for (const item of value) {
304
- super.append(key, String(item));
327
+ for (const [paramName, paramValues] of Object.entries(init)) {
328
+ if (Array.isArray(paramValues)) {
329
+ for (const paramValue of paramValues) {
330
+ super.append(paramName, String(paramValue));
305
331
  }
306
332
  }
307
333
  }
@@ -355,32 +381,46 @@ var HttpSearchParams = class extends URLSearchParams {
355
381
  }
356
382
  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamscontains `searchParams.contains()` API reference} */
357
383
  contains(otherParams) {
358
- for (const [key, otherValue] of otherParams.entries()) {
359
- const values = super.getAll.call(this, key);
360
- const haveSameNumberOfValues = values.length === super.getAll.call(otherParams, key).length;
361
- if (!haveSameNumberOfValues) {
384
+ for (const [paramName, otherParamValue] of otherParams.entries()) {
385
+ const paramValues = super.getAll.call(this, paramName);
386
+ const haveSameNumberOfParamValues = paramValues.length === super.getAll.call(otherParams, paramName).length;
387
+ if (!haveSameNumberOfParamValues) {
362
388
  return false;
363
389
  }
364
- const valueExists = values.includes(otherValue);
365
- if (!valueExists) {
390
+ const paramValueExists = paramValues.includes(otherParamValue);
391
+ if (!paramValueExists) {
366
392
  return false;
367
393
  }
368
394
  }
369
395
  return true;
370
396
  }
397
+ /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamsassign `searchParams.assign()` API reference} */
398
+ assign(...otherParamsArray) {
399
+ for (const otherParams of otherParamsArray) {
400
+ if (this === otherParams) {
401
+ continue;
402
+ }
403
+ for (const paramName of otherParams.keys()) {
404
+ super.delete(paramName);
405
+ }
406
+ for (const [paramName, paramValue] of otherParams.entries()) {
407
+ super.append(paramName, paramValue);
408
+ }
409
+ }
410
+ }
371
411
  /** @see {@link https://zimic.dev/docs/http/api/http-search-params#searchparamstoobject `searchParams.toObject()` API reference} */
372
412
  toObject() {
373
413
  const object = {};
374
- for (const [key, value] of this.entries()) {
375
- if (key in object) {
376
- const existingValue = object[key];
377
- if (Array.isArray(existingValue)) {
378
- existingValue.push(value);
414
+ for (const [paramName, paramValue] of this.entries()) {
415
+ if (paramName in object) {
416
+ const existingParamValue = object[paramName];
417
+ if (Array.isArray(existingParamValue)) {
418
+ existingParamValue.push(paramValue);
379
419
  } else {
380
- object[key] = [existingValue, value];
420
+ object[paramName] = [existingParamValue, paramValue];
381
421
  }
382
422
  } else {
383
- object[key] = value;
423
+ object[paramName] = paramValue;
384
424
  }
385
425
  }
386
426
  return object;