@hyperttp/core 1.5.6 → 2.0.1
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/Core/HyperCore.d.ts +208 -0
- package/Core/HyperCore.d.ts.map +1 -0
- package/Core/HyperCore.js +2 -0
- package/Core/HyperCore.js.map +7 -0
- package/README.md +259 -187
- package/defaultConfig.d.ts +12 -0
- package/defaultConfig.d.ts.map +1 -0
- package/defaultConfig.js +2 -0
- package/defaultConfig.js.map +7 -0
- package/index.d.ts +6 -0
- package/index.d.ts.map +1 -0
- package/index.js +2 -0
- package/index.js.map +7 -0
- package/package.json +40 -64
- package/protocols/manager.d.ts +37 -0
- package/protocols/manager.d.ts.map +1 -0
- package/protocols/manager.js +2 -0
- package/protocols/manager.js.map +7 -0
- package/protocols/rest/index.d.ts +9 -0
- package/protocols/rest/index.d.ts.map +1 -0
- package/protocols/rest/index.js +2 -0
- package/protocols/rest/index.js.map +7 -0
- package/protocols/rest/receiver.d.ts +36 -0
- package/protocols/rest/receiver.d.ts.map +1 -0
- package/protocols/rest/receiver.js +2 -0
- package/protocols/rest/receiver.js.map +7 -0
- package/protocols/rest/sender.d.ts +31 -0
- package/protocols/rest/sender.d.ts.map +1 -0
- package/protocols/rest/sender.js +2 -0
- package/protocols/rest/sender.js.map +7 -0
- package/protocols/rest/type.d.ts +111 -0
- package/protocols/rest/type.d.ts.map +1 -0
- package/protocols/rest/type.js +2 -0
- package/protocols/rest/type.js.map +7 -0
- package/rest.d.ts +2 -0
- package/rest.d.ts.map +1 -0
- package/rest.js +2 -0
- package/rest.js.map +7 -0
- package/transports/fetch.d.ts +35 -0
- package/transports/fetch.d.ts.map +1 -0
- package/transports/fetch.js +2 -0
- package/transports/fetch.js.map +7 -0
- package/transports/manager.d.ts +39 -0
- package/transports/manager.d.ts.map +1 -0
- package/transports/manager.js +2 -0
- package/transports/manager.js.map +7 -0
- package/utils/abort.d.ts +23 -0
- package/utils/abort.d.ts.map +1 -0
- package/utils/abort.js +2 -0
- package/utils/abort.js.map +7 -0
- package/utils/errors.d.ts +46 -0
- package/utils/errors.d.ts.map +1 -0
- package/utils/errors.js +2 -0
- package/utils/errors.js.map +7 -0
- package/dist/Core/HyperCore.d.ts +0 -171
- package/dist/Core/HyperCore.d.ts.map +0 -1
- package/dist/Core/HyperCore.js +0 -2
- package/dist/Core/HyperCore.js.map +0 -7
- package/dist/Core/RequestBuilder.d.ts +0 -8
- package/dist/Core/RequestBuilder.d.ts.map +0 -1
- package/dist/Core/RequestBuilder.js +0 -2
- package/dist/Core/RequestBuilder.js.map +0 -7
- package/dist/LICENSE +0 -21
- package/dist/README.md +0 -291
- package/dist/defaultConfig.d.ts +0 -7
- package/dist/defaultConfig.d.ts.map +0 -1
- package/dist/defaultConfig.js +0 -2
- package/dist/defaultConfig.js.map +0 -7
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -7
- package/dist/package.json +0 -50
- package/dist/transports/browser.d.ts +0 -37
- package/dist/transports/browser.d.ts.map +0 -1
- package/dist/transports/browser.js +0 -2
- package/dist/transports/browser.js.map +0 -7
- package/dist/transports/manager.d.ts +0 -89
- package/dist/transports/manager.d.ts.map +0 -1
- package/dist/transports/manager.js +0 -7
- package/dist/transports/manager.js.map +0 -7
- package/dist/transports/node.d.ts +0 -33
- package/dist/transports/node.d.ts.map +0 -1
- package/dist/transports/node.js +0 -2
- package/dist/transports/node.js.map +0 -7
- package/dist/utils/errors.d.ts +0 -38
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -2
- package/dist/utils/errors.js.map +0 -7
- package/dist/utils/normalize.d.ts +0 -35
- package/dist/utils/normalize.d.ts.map +0 -1
- package/dist/utils/normalize.js +0 -2
- package/dist/utils/normalize.js.map +0 -7
- package/dist/utils/pipeline.d.ts +0 -63
- package/dist/utils/pipeline.d.ts.map +0 -1
- package/dist/utils/pipeline.js +0 -2
- package/dist/utils/pipeline.js.map +0 -7
- package/dist/utils/response.d.ts +0 -108
- package/dist/utils/response.d.ts.map +0 -1
- package/dist/utils/response.js +0 -2
- package/dist/utils/response.js.map +0 -7
- package/dist/utils/retryUtils.d.ts +0 -17
- package/dist/utils/retryUtils.d.ts.map +0 -1
- package/dist/utils/retryUtils.js +0 -2
- package/dist/utils/retryUtils.js.map +0 -7
- /package/{dist/Core → Core}/index.d.ts +0 -0
- /package/{dist/Core → Core}/index.d.ts.map +0 -0
- /package/{dist/Core → Core}/index.js +0 -0
- /package/{dist/Core → Core}/index.js.map +0 -0
- /package/{dist/utils → utils}/merge.d.ts +0 -0
- /package/{dist/utils → utils}/merge.d.ts.map +0 -0
- /package/{dist/utils → utils}/merge.js +0 -0
- /package/{dist/utils → utils}/merge.js.map +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/response.ts"],
|
|
4
|
-
"sourcesContent": ["import type { HttpResponse, HyperTransport, HyperBody } from \"@hyperttp/types\";\nimport { CURRENT_RUNTIME } from \"../transports/manager.js\";\n\ntype TransportResponse = Awaited<ReturnType<HyperTransport[\"execute\"]>>;\n\ninterface InternalTransportResponse extends TransportResponse {\n _raw?: FetchResponseLike;\n}\n\ninterface FetchResponseLike {\n body: unknown;\n arrayBuffer(): Promise<ArrayBuffer>;\n text(): Promise<string>;\n json(): Promise<unknown>;\n}\n\nconst RAW_CACHE = Symbol(\"hyperttp.rawCache\");\nconst TEXT_CACHE = Symbol(\"hyperttp.textCache\");\nconst JSON_CACHE = Symbol(\"hyperttp.jsonCache\");\n\ntype CacheHolder = {\n [RAW_CACHE]?: Uint8Array;\n [TEXT_CACHE]?: string;\n [JSON_CACHE]?: unknown;\n};\n\nconst STATIC_DECODER = new TextDecoder();\nconst STATIC_ENCODER = new TextEncoder();\nconst EMPTY_HEADERS: Readonly<Record<string, never>> = Object.freeze({});\n\nfunction isReadableStream(value: unknown): value is ReadableStream<Uint8Array> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"getReader\" in value &&\n typeof (value as Record<string, unknown>).getReader === \"function\"\n );\n}\n\nfunction isBlob(value: unknown): value is Blob {\n return typeof Blob !== \"undefined\" && value instanceof Blob;\n}\n\n/**\n * @ru Быстрое клонирование тела ответа с поддержкой structuredClone, JSON и ручного копирования.\n * @en Fast response body clone supporting structuredClone, JSON, and manual copy.\n * @param body - The body value to clone.\n * @returns Cloned body.\n */\nexport const cloneBodyFast = <T>(body: T): T => {\n if (typeof body !== \"object\" || body === null) return body;\n const obj = body as Record<string, unknown>;\n\n if (\n body instanceof Uint8Array ||\n typeof obj.pipe === \"function\" ||\n typeof obj.getReader === \"function\"\n ) {\n return body;\n }\n\n const proto = Object.getPrototypeOf(body);\n if (proto === Object.prototype || proto === null) {\n const target = Object.create(proto);\n for (const key in body) {\n if (Object.prototype.hasOwnProperty.call(body, key)) {\n target[key] = body[key];\n }\n }\n return target as T;\n }\n\n try {\n return structuredClone(body);\n } catch {\n try {\n return JSON.parse(JSON.stringify(body)) as T;\n } catch {\n const target = Object.create(proto);\n for (const key in body) {\n if (Object.prototype.hasOwnProperty.call(body, key)) {\n target[key] = body[key];\n }\n }\n return target as T;\n }\n }\n};\n\n/**\n * @ru Реализация HttpResponse с ленивым потреблением тела, кэшированием raw/text/json и поддержкой пулинга.\n * @en HttpResponse implementation with lazy body consumption, raw/text/json caching, and pooling support.\n */\nexport class HyperHttpResponse<T = unknown> implements HttpResponse<T>, CacheHolder {\n public status!: number;\n public headers!: Record<string, string | string[]>;\n public body!: T | HyperBody | Uint8Array | null;\n public url!: string;\n public data!: T | null;\n\n public [RAW_CACHE]!: Uint8Array | undefined;\n public [TEXT_CACHE]!: string | undefined;\n public [JSON_CACHE]!: unknown | undefined;\n\n private _bodyConsumed!: boolean;\n private _raw!: FetchResponseLike | undefined;\n\n constructor(rawResponse?: TransportResponse) {\n this.status = 0;\n this.headers = EMPTY_HEADERS;\n this.body = null;\n this.url = \"\";\n this.data = null;\n this[RAW_CACHE] = undefined;\n this[TEXT_CACHE] = undefined;\n this[JSON_CACHE] = undefined;\n this._bodyConsumed = false;\n this._raw = undefined;\n if (rawResponse) this.init(rawResponse);\n }\n\n /**\n * @ru Инициализирует ответ из транспортного ответа. Сбрасывает все кэши.\n * @en Initializes the response from a transport response. Resets all caches.\n * @param rawResponse - The raw transport response.\n * @returns This instance for chaining.\n */\n public init(rawResponse: TransportResponse): this {\n this.status = rawResponse.status;\n this.headers = rawResponse.headers || EMPTY_HEADERS;\n this.body = rawResponse.body as T | HyperBody | Uint8Array | null;\n this.url = rawResponse.url ?? \"\";\n this.data = null;\n this[RAW_CACHE] = undefined;\n this[TEXT_CACHE] = undefined;\n this[JSON_CACHE] = undefined;\n this._bodyConsumed = false;\n this._raw = (rawResponse as InternalTransportResponse)._raw;\n return this;\n }\n\n private async _consumeBody(): Promise<void> {\n if (this[RAW_CACHE] !== undefined) return;\n\n const body = this.body;\n if (!body) return;\n\n if (body instanceof Uint8Array) {\n this[RAW_CACHE] = body;\n this._bodyConsumed = true;\n return;\n }\n\n if (typeof body === \"string\") {\n this[RAW_CACHE] = STATIC_ENCODER.encode(body);\n this._bodyConsumed = true;\n return;\n }\n\n if (body instanceof ArrayBuffer) {\n this[RAW_CACHE] = new Uint8Array(body);\n this._bodyConsumed = true;\n return;\n }\n\n if (this._raw && body === this._raw.body && typeof this._raw.arrayBuffer === \"function\") {\n const buf = await this._raw.arrayBuffer();\n this[RAW_CACHE] = new Uint8Array(buf);\n this.body = this[RAW_CACHE] as T | HyperBody | Uint8Array | null;\n this._bodyConsumed = true;\n return;\n }\n\n if (CURRENT_RUNTIME === \"bun\" && body && typeof body === \"object\" && \"arrayBuffer\" in body) {\n const bunBody = body as { arrayBuffer: () => Promise<ArrayBuffer> };\n if (typeof bunBody.arrayBuffer === \"function\") {\n const buf = await bunBody.arrayBuffer();\n this[RAW_CACHE] = new Uint8Array(buf);\n this.body = this[RAW_CACHE] as T | HyperBody | Uint8Array | null;\n this._bodyConsumed = true;\n return;\n }\n }\n\n if (isReadableStream(body) || isBlob(body)) {\n if (isReadableStream(body) && body.locked) {\n throw new Error(\"[Hyperttp] Stream is locked.\");\n }\n const response = new Response(body as unknown as BodyInit);\n const buf = await response.arrayBuffer();\n this[RAW_CACHE] = new Uint8Array(buf);\n this.body = this[RAW_CACHE] as T | HyperBody | Uint8Array | null;\n this._bodyConsumed = true;\n }\n }\n\n /**\n * @ru Возвращает тело ответа как ArrayBuffer, потребляя его при необходимости.\n * @en Returns the response body as ArrayBuffer, consuming it if necessary.\n * @returns Promise resolving to an ArrayBuffer.\n */\n public async arrayBuffer(): Promise<ArrayBuffer> {\n await this._consumeBody();\n const raw = this[RAW_CACHE];\n if (raw === undefined) {\n throw new Error(\"[Hyperttp] Response body is not available as ArrayBuffer\");\n }\n if (raw.byteOffset === 0 && raw.byteLength === raw.buffer.byteLength) {\n return raw.buffer as ArrayBuffer;\n }\n return raw.buffer.slice(raw.byteOffset, raw.byteOffset + raw.byteLength) as ArrayBuffer;\n }\n\n public async text(): Promise<string> {\n if (this[TEXT_CACHE] !== undefined) return this[TEXT_CACHE]!;\n\n if (this._raw && typeof this._raw.text === \"function\" && !this._bodyConsumed) {\n this._bodyConsumed = true;\n const text = await this._raw.text();\n this[TEXT_CACHE] = text;\n return text;\n }\n\n await this._consumeBody();\n if (this[RAW_CACHE] === undefined) {\n throw new Error(\"[Hyperttp] Response body is not available as text\");\n }\n this[TEXT_CACHE] = STATIC_DECODER.decode(this[RAW_CACHE]!);\n return this[TEXT_CACHE]!;\n }\n\n /**\n * @ru Возвращает тело ответа, разобранное как JSON. Для объектов возвращает их напрямую (без потребления).\n * @en Returns the response body parsed as JSON. Returns objects directly (no consumption).\n * @returns Promise resolving to the parsed JSON value.\n */\n public async json<TJson = T>(): Promise<TJson> {\n if (this[JSON_CACHE] !== undefined) return this[JSON_CACHE] as TJson;\n\n const body = this.body;\n if (\n !this._bodyConsumed &&\n typeof body === \"object\" &&\n body !== null &&\n !isReadableStream(body) &&\n !isBlob(body) &&\n !(body instanceof Uint8Array) &&\n !(body instanceof ArrayBuffer) &&\n !(\"arrayBuffer\" in body) &&\n !(\"text\" in body) &&\n !(\"json\" in body)\n ) {\n this._bodyConsumed = true;\n this[JSON_CACHE] = body;\n return body as TJson;\n }\n\n if (this._raw && typeof this._raw.json === \"function\" && !this._bodyConsumed) {\n this._bodyConsumed = true;\n const parsed = (await this._raw.json()) as TJson;\n this[JSON_CACHE] = parsed;\n return parsed;\n }\n\n await this._consumeBody();\n if (this[RAW_CACHE] === undefined) {\n throw new Error(\"[Hyperttp] Response body is not available as JSON\");\n }\n if (this[TEXT_CACHE] === undefined) {\n this[TEXT_CACHE] = STATIC_DECODER.decode(this[RAW_CACHE]!);\n }\n const parsed = JSON.parse(this[TEXT_CACHE]!) as TJson;\n this[JSON_CACHE] = parsed;\n return parsed;\n }\n\n /**\n * @ru Полный сброс состояния для переиспользования в пуле. Очищает все кэши и приватные поля.\n * @en Full state reset for pool reuse. Clears all caches and private fields.\n */\n public reset(): void {\n this.status = 0;\n this.headers = EMPTY_HEADERS;\n this.body = null;\n this.url = \"\";\n this.data = null;\n this[RAW_CACHE] = undefined;\n this[TEXT_CACHE] = undefined;\n this[JSON_CACHE] = undefined;\n this._bodyConsumed = false;\n this._raw = undefined;\n }\n\n /**\n * @ru Сбрасывает тело ответа (для стримов — отменяет/cancel).\n * @en Discards the response body (cancels streams).\n * @returns Promise that resolves when the body is discarded.\n */\n public async dump(): Promise<void> {\n if (this._bodyConsumed) return;\n this._bodyConsumed = true;\n\n const body = this.body;\n if (isReadableStream(body)) {\n if (!body.locked) await body.cancel().catch(() => {});\n } else if (isBlob(body)) {\n await body.arrayBuffer();\n }\n }\n\n /**\n * @ru Клонирует ответ с разделением стримов через tee().\n * @en Clones the response, splitting streams via tee().\n * @returns A new HttpResponse instance.\n */\n public clone(): HttpResponse<T> {\n const cloned = new HyperHttpResponse<T>();\n cloned.status = this.status;\n cloned.headers = this.headers;\n cloned.url = this.url;\n cloned.data = this.data ? cloneBodyFast(this.data) : null;\n cloned._bodyConsumed = this._bodyConsumed;\n cloned._raw = this._bodyConsumed ? undefined : this._raw;\n\n cloned[RAW_CACHE] = this[RAW_CACHE];\n cloned[TEXT_CACHE] = this[TEXT_CACHE];\n cloned[JSON_CACHE] = this[JSON_CACHE];\n\n if (isReadableStream(this.body) && !this._bodyConsumed) {\n if (this.body.locked) {\n cloned.body = this.body;\n } else {\n const [b1, b2] = this.body.tee();\n this.body = b1 as T | HyperBody | Uint8Array | null;\n cloned.body = b2 as T | HyperBody | Uint8Array | null;\n }\n } else {\n cloned.body = this.body;\n }\n\n return cloned;\n }\n}\n\nexport const responsePool: HyperHttpResponse<any>[] = [];\nconst RESPONSE_POOL_MAX = 64;\n\n/**\n * @ru Создаёт HttpResponse из транспортного ответа с переиспользованием пула.\n * @en Creates an HttpResponse from a transport response reusing the pool.\n * @param rawResponse - The raw transport response.\n * @returns An HttpResponse instance.\n */\nexport const mapResponseFast = (rawResponse: TransportResponse): HttpResponse<unknown> => {\n const instance = responsePool.pop() ?? new HyperHttpResponse();\n return instance.init(rawResponse);\n};\n\n/**\n * @ru Возвращает HttpResponse в пул переиспользования.\n * @en Returns an HttpResponse to the reuse pool.\n * @param res - The response to recycle.\n */\nexport const recycleResponse = (res: HttpResponse<unknown>): void => {\n if (res instanceof HyperHttpResponse && responsePool.length < RESPONSE_POOL_MAX) {\n res.reset();\n responsePool.push(res);\n }\n};\n\n/**\n * @ru Создаёт StreamResponse без потребления тела.\n * @en Creates a StreamResponse without consuming the body.\n * @param rawResponse - The raw transport response.\n * @returns A StreamResponse-like object.\n */\nexport const mapStreamFast = (rawResponse: TransportResponse) => ({\n status: rawResponse.status,\n headers: rawResponse.headers,\n body: rawResponse.body,\n url: rawResponse.url ?? \"\",\n});\n\n/**\n * @ru Быстрое слияние заголовков с мутацией базового объекта.\n * @en Fast header merge mutating the base object.\n * @param base - Base headers object (mutated).\n * @param override - Optional headers to overlay.\n * @returns The mutated base headers object.\n */\nexport const mergeHeadersFast = (\n base: Record<string, string | string[]>,\n override?: Record<string, string | string[]>,\n): Record<string, string | string[]> => {\n if (!override) return base;\n\n for (const key in override) {\n if (Object.prototype.hasOwnProperty.call(override, key)) {\n base[key] = override[key]!;\n }\n }\n return base;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["CURRENT_RUNTIME", "RAW_CACHE", "TEXT_CACHE", "JSON_CACHE", "STATIC_DECODER", "STATIC_ENCODER", "EMPTY_HEADERS", "isReadableStream", "value", "isBlob", "body", "obj", "proto", "target", "key", "rawResponse", "buf", "bunBody", "raw", "text", "parsed", "cloned", "b1", "b2", "RESPONSE_POOL_MAX", "res", "base", "override"]
|
|
7
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { RetryOptions } from "@hyperttp/types";
|
|
2
|
-
/**
|
|
3
|
-
* @ru Вычисляет задержку перед повторной попыткой с экспоненциальной задержкой и возможным джиттером.
|
|
4
|
-
* @en Calculates the delay before a retry using exponential backoff and optional jitter.
|
|
5
|
-
*/
|
|
6
|
-
export declare function calcDelay(attempt: number, retryOptions: RetryOptions): number;
|
|
7
|
-
/**
|
|
8
|
-
* @ru Пытается освободить ресурсы тела ответа, не дожидаясь полного потребления. Поддерживает методы dump, resume, destroy.
|
|
9
|
-
* @en Attempts to release response body resources without fully consuming it. Supports dump, resume, destroy methods.
|
|
10
|
-
*/
|
|
11
|
-
export declare function drainBody(body: unknown): Promise<void>;
|
|
12
|
-
/**
|
|
13
|
-
* @ru Определяет, следует ли выполнить повторную попытку для данного кода статуса на основе настроек.
|
|
14
|
-
* @en Determines whether to retry for the given status code based on retry options.
|
|
15
|
-
*/
|
|
16
|
-
export declare function shouldRetry(status: number, retryOptions: RetryOptions): boolean;
|
|
17
|
-
//# sourceMappingURL=retryUtils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retryUtils.d.ts","sourceRoot":"","sources":["../../src/utils/retryUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAQpD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,MAAM,CAU7E;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC5D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAM/E"}
|
package/dist/utils/retryUtils.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const u=new Set([502,503,504]);export function calcDelay(e,t){const{baseDelay:n=1e3,maxDelay:r=1e4,jitter:c=!0}=t,o=Math.min(Math.max(0,e),10),a=Math.min(n*(1<<o),r);if(!c)return a;const i=a*(.75+Math.random()*.5);return Math.min(Math.max(0,i),r)}export async function drainBody(e){if(!(!e||typeof e!="object"))try{const t=e;if(typeof t.dump=="function"){await t.dump();return}if(typeof t.destroy=="function"){t.destroy();return}if(typeof t.resume=="function"){t.resume();return}if(typeof t.cancel=="function"){await t.cancel();return}typeof t.getReader=="function"&&await t.getReader().cancel().catch(()=>{})}catch{}}export function shouldRetry(e,t){const n=t.retryStatusCodes;return n!==void 0?n.length>0&&n.includes(e):u.has(e)}
|
|
2
|
-
//# sourceMappingURL=retryUtils.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/retryUtils.ts"],
|
|
4
|
-
"sourcesContent": ["import type { RetryOptions } from \"@hyperttp/types\";\n\n/**\n * @ru Коды статуса HTTP, по которым повторные попытки выполняются по умолчанию.\n * @en Default HTTP status codes that trigger retries when no explicit codes are provided.\n */\nconst DEFAULT_RETRY_STATUS_CODES = new Set<number>([502, 503, 504]);\n\n/**\n * @ru Вычисляет задержку перед повторной попыткой с экспоненциальной задержкой и возможным джиттером.\n * @en Calculates the delay before a retry using exponential backoff and optional jitter.\n */\nexport function calcDelay(attempt: number, retryOptions: RetryOptions): number {\n const { baseDelay = 1000, maxDelay = 10000, jitter = true } = retryOptions;\n // Capping at 10 (2^10 = 1024), since baseDelay * 1024 exceeds maxDelay in 99% of cases\n const safeAttempt = Math.min(Math.max(0, attempt), 10);\n const base = Math.min(baseDelay * (1 << safeAttempt), maxDelay);\n\n if (!jitter) return base;\n\n const jittered = base * (0.75 + Math.random() * 0.5);\n return Math.min(Math.max(0, jittered), maxDelay);\n}\n\n/**\n * @ru Пытается освободить ресурсы тела ответа, не дожидаясь полного потребления. Поддерживает методы dump, resume, destroy.\n * @en Attempts to release response body resources without fully consuming it. Supports dump, resume, destroy methods.\n */\nexport async function drainBody(body: unknown): Promise<void> {\n if (!body || typeof body !== \"object\") return;\n try {\n const stream = body as Record<string, unknown>;\n\n if (typeof stream.dump === \"function\") {\n await (stream.dump as () => Promise<void>)();\n return;\n }\n\n if (typeof stream.destroy === \"function\") {\n (stream.destroy as () => void)();\n return;\n }\n\n if (typeof stream.resume === \"function\") {\n (stream.resume as () => void)();\n return;\n }\n\n if (typeof stream.cancel === \"function\") {\n await (stream.cancel as () => Promise<void>)();\n return;\n }\n\n if (typeof stream.getReader === \"function\") {\n const reader = (stream as unknown as ReadableStream).getReader();\n await reader.cancel().catch(() => {});\n }\n } catch {\n //\n }\n}\n\n/**\n * @ru Определяет, следует ли выполнить повторную попытку для данного кода статуса на основе настроек.\n * @en Determines whether to retry for the given status code based on retry options.\n */\nexport function shouldRetry(status: number, retryOptions: RetryOptions): boolean {\n const codes = retryOptions.retryStatusCodes;\n if (codes !== undefined) {\n return codes.length > 0 && codes.includes(status);\n }\n return DEFAULT_RETRY_STATUS_CODES.has(status);\n}\n"],
|
|
5
|
-
"mappings": "aAMA,MAAMA,EAA6B,IAAI,IAAY,CAAC,IAAK,IAAK,GAAG,CAAC,EAM5D,gBAAU,UAAUC,EAAiBC,EAA0B,CACnE,KAAM,CAAE,UAAAC,EAAY,IAAM,SAAAC,EAAW,IAAO,OAAAC,EAAS,EAAI,EAAKH,EAExDI,EAAc,KAAK,IAAI,KAAK,IAAI,EAAGL,CAAO,EAAG,EAAE,EAC/CM,EAAO,KAAK,IAAIJ,GAAa,GAAKG,GAAcF,CAAQ,EAE9D,GAAI,CAACC,EAAQ,OAAOE,EAEpB,MAAMC,EAAWD,GAAQ,IAAO,KAAK,OAAM,EAAK,IAChD,OAAO,KAAK,IAAI,KAAK,IAAI,EAAGC,CAAQ,EAAGJ,CAAQ,CACjD,CAMA,sBAAsB,UAAUK,EAAa,CAC3C,GAAI,GAACA,GAAQ,OAAOA,GAAS,UAC7B,GAAI,CACF,MAAMC,EAASD,EAEf,GAAI,OAAOC,EAAO,MAAS,WAAY,CACrC,MAAOA,EAAO,KAA4B,EAC1C,MACF,CAEA,GAAI,OAAOA,EAAO,SAAY,WAAY,CACvCA,EAAO,QAAsB,EAC9B,MACF,CAEA,GAAI,OAAOA,EAAO,QAAW,WAAY,CACtCA,EAAO,OAAqB,EAC7B,MACF,CAEA,GAAI,OAAOA,EAAO,QAAW,WAAY,CACvC,MAAOA,EAAO,OAA8B,EAC5C,MACF,CAEI,OAAOA,EAAO,WAAc,YAE9B,MADgBA,EAAqC,UAAS,EACjD,OAAM,EAAG,MAAM,IAAK,CAAE,CAAC,CAExC,MAAQ,CAER,CACF,CAMM,gBAAU,YAAYC,EAAgBT,EAA0B,CACpE,MAAMU,EAAQV,EAAa,iBAC3B,OAAIU,IAAU,OACLA,EAAM,OAAS,GAAKA,EAAM,SAASD,CAAM,EAE3CX,EAA2B,IAAIW,CAAM,CAC9C",
|
|
6
|
-
"names": ["DEFAULT_RETRY_STATUS_CODES", "attempt", "retryOptions", "baseDelay", "maxDelay", "jitter", "safeAttempt", "base", "jittered", "body", "stream", "status", "codes"]
|
|
7
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|