hyperttp 0.2.1 → 0.2.3

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.
Files changed (61) hide show
  1. package/dist/Hyperttp/Core/CacheManager.d.ts +40 -3
  2. package/dist/Hyperttp/Core/CacheManager.d.ts.map +1 -1
  3. package/dist/Hyperttp/Core/CacheManager.js +61 -12
  4. package/dist/Hyperttp/Core/CacheManager.js.map +1 -1
  5. package/dist/Hyperttp/Core/HttpClientImproved.d.ts +69 -97
  6. package/dist/Hyperttp/Core/HttpClientImproved.d.ts.map +1 -1
  7. package/dist/Hyperttp/Core/HttpClientImproved.js +331 -642
  8. package/dist/Hyperttp/Core/HttpClientImproved.js.map +1 -1
  9. package/dist/Hyperttp/Core/InterceptorManager.d.ts +62 -0
  10. package/dist/Hyperttp/Core/InterceptorManager.d.ts.map +1 -0
  11. package/dist/Hyperttp/Core/InterceptorManager.js +64 -0
  12. package/dist/Hyperttp/Core/InterceptorManager.js.map +1 -0
  13. package/dist/Hyperttp/Core/MetricsManager.d.ts +80 -0
  14. package/dist/Hyperttp/Core/MetricsManager.d.ts.map +1 -0
  15. package/dist/Hyperttp/Core/MetricsManager.js +140 -0
  16. package/dist/Hyperttp/Core/MetricsManager.js.map +1 -0
  17. package/dist/Hyperttp/Core/QueueManager.d.ts +5 -40
  18. package/dist/Hyperttp/Core/QueueManager.d.ts.map +1 -1
  19. package/dist/Hyperttp/Core/QueueManager.js +41 -47
  20. package/dist/Hyperttp/Core/QueueManager.js.map +1 -1
  21. package/dist/Hyperttp/Core/RateLimiter.d.ts +40 -20
  22. package/dist/Hyperttp/Core/RateLimiter.d.ts.map +1 -1
  23. package/dist/Hyperttp/Core/RateLimiter.js +65 -44
  24. package/dist/Hyperttp/Core/RateLimiter.js.map +1 -1
  25. package/dist/Hyperttp/Core/RequestBuilder.d.ts +48 -64
  26. package/dist/Hyperttp/Core/RequestBuilder.d.ts.map +1 -1
  27. package/dist/Hyperttp/Core/RequestBuilder.js +87 -99
  28. package/dist/Hyperttp/Core/RequestBuilder.js.map +1 -1
  29. package/dist/Hyperttp/Core/RequestExecutor.d.ts +58 -0
  30. package/dist/Hyperttp/Core/RequestExecutor.d.ts.map +1 -0
  31. package/dist/Hyperttp/Core/RequestExecutor.js +160 -0
  32. package/dist/Hyperttp/Core/RequestExecutor.js.map +1 -0
  33. package/dist/Hyperttp/Core/ResponseTransformer.d.ts +35 -0
  34. package/dist/Hyperttp/Core/ResponseTransformer.d.ts.map +1 -0
  35. package/dist/Hyperttp/Core/ResponseTransformer.js +171 -0
  36. package/dist/Hyperttp/Core/ResponseTransformer.js.map +1 -0
  37. package/dist/Hyperttp/Core/index.d.ts +7 -1
  38. package/dist/Hyperttp/Core/index.d.ts.map +1 -1
  39. package/dist/Hyperttp/Core/index.js +17 -5
  40. package/dist/Hyperttp/Core/index.js.map +1 -1
  41. package/dist/Hyperttp/Request.d.ts +5 -0
  42. package/dist/Hyperttp/Request.d.ts.map +1 -1
  43. package/dist/Hyperttp/Request.js +17 -35
  44. package/dist/Hyperttp/Request.js.map +1 -1
  45. package/dist/Hyperttp/UrlExtractor.d.ts +1 -1
  46. package/dist/Hyperttp/UrlExtractor.d.ts.map +1 -1
  47. package/dist/Hyperttp/UrlExtractor.js.map +1 -1
  48. package/dist/Hyperttp/index.d.ts +3 -1
  49. package/dist/Hyperttp/index.d.ts.map +1 -1
  50. package/dist/Hyperttp/index.js +6 -1
  51. package/dist/Hyperttp/index.js.map +1 -1
  52. package/dist/Types/index.d.ts +45 -206
  53. package/dist/Types/index.d.ts.map +1 -1
  54. package/dist/Types/index.js +7 -16
  55. package/dist/Types/index.js.map +1 -1
  56. package/dist/Types/request.d.ts +15 -100
  57. package/dist/Types/request.d.ts.map +1 -1
  58. package/dist/Types/request.js.map +1 -1
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js.map +1 -1
  61. package/package.json +2 -2
@@ -1,50 +1,70 @@
1
1
  /**
2
- * Configuration options for the RateLimiter
2
+ * @interface RateLimiterConfig
3
+ * @en Configuration for the token bucket rate limiter.
4
+ * @ru Конфигурация для ограничителя частоты запросов (алгоритм Token Bucket).
3
5
  */
4
6
  export interface RateLimiterConfig {
5
- /** Maximum number of requests allowed within the time window (default: 100) */
7
+ /** * @en Maximum number of requests allowed within the window.
8
+ * @ru Максимальное количество запросов, разрешенных в пределах окна.
9
+ * @default 100
10
+ */
6
11
  maxRequests?: number;
7
- /** Time window in milliseconds (default: 60000ms / 1 minute) */
12
+ /** * @en Time window in milliseconds.
13
+ * @ru Временное окно в миллисекундах.
14
+ * @default 60000 (1 minute)
15
+ */
8
16
  windowMs?: number;
9
- /** Maximum array size before aggressive cleanup (default: maxRequests * 2) */
10
- maxArraySize?: number;
11
17
  }
12
18
  /**
13
- * Implements a sliding window rate limiter to control request frequency.
19
+ * @class RateLimiter
20
+ * @en Smooth rate limiting using the Token Bucket algorithm.
21
+ * Allows for short bursts while maintaining a steady long-term rate.
22
+ * @ru Плавное ограничение частоты запросов с использованием алгоритма Token Bucket.
23
+ * Позволяет кратковременные всплески, сохраняя стабильную скорость в долгосрочной перспективе.
14
24
  */
15
25
  export declare class RateLimiter {
16
- private timestamps;
26
+ private tokens;
27
+ private lastRefill;
17
28
  private readonly max;
18
29
  private readonly window;
19
- private readonly maxArraySize;
30
+ private readonly refillRate;
20
31
  constructor(config?: RateLimiterConfig);
21
32
  /**
22
- * Cleans up old timestamps efficiently
33
+ * @en Waits until enough tokens are available and consumes them.
34
+ * @ru Ожидает появления достаточного количества токенов и потребляет их.
35
+ * @param tokensNeeded - Number of tokens to consume (default: 1)
36
+ */
37
+ wait(tokensNeeded?: number): Promise<void>;
38
+ /**
39
+ * @en Attempts to consume tokens immediately.
40
+ * @ru Пытается немедленно потребить токены.
41
+ * @returns true if tokens were consumed, false otherwise (limit exceeded).
23
42
  */
24
- private cleanup;
43
+ tryConsume(tokensNeeded?: number): boolean;
25
44
  /**
26
- * Waits if necessary to respect the rate limit, then records the current request.
45
+ * @en Internal method to refill the bucket based on elapsed time.
46
+ * @ru Внутренний метод для пополнения корзины на основе прошедшего времени.
27
47
  */
28
- wait(): Promise<void>;
48
+ private refill;
29
49
  /**
30
- * Gets the current number of requests in the sliding window
50
+ * @en Returns the number of currently "used" slots.
51
+ * @ru Возвращает количество текущих "занятых" слотов.
31
52
  */
32
53
  get currentCount(): number;
33
54
  /**
34
- * Remaining requests in current window
55
+ * @en Returns how many requests can be made right now.
56
+ * @ru Возвращает количество запросов, которые можно выполнить прямо сейчас.
35
57
  */
36
58
  get remainingRequests(): number;
37
59
  /**
38
- * Milliseconds until next reset
60
+ * @en Estimated time in ms until the next token is available.
61
+ * @ru Ожидаемое время в мс до появления следующего токена.
39
62
  */
40
63
  get timeToReset(): number;
41
64
  /**
42
- * Resets the rate limiter
65
+ * @en Instantly refills the bucket to its maximum capacity.
66
+ * @ru Мгновенно пополняет корзину до максимальной емкости.
43
67
  */
44
68
  reset(): void;
45
- /**
46
- * Removes a specific timestamp (для removeToken pattern)
47
- */
48
- removeToken(timestamp: number): boolean;
49
69
  }
50
70
  //# sourceMappingURL=RateLimiter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../../../../src/Hyperttp/Core/RateLimiter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,MAAM,CAAC,EAAE,iBAAiB;IAMtC;;OAEG;IACH,OAAO,CAAC,OAAO;IAef;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAGzB;IAED;;OAEG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAIxB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;CAQxC"}
1
+ {"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RateLimiter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,CAAC,EAAE,iBAAiB;IAQtC;;;;OAIG;IACG,IAAI,CAAC,YAAY,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB3C;;;;OAIG;IACH,UAAU,CAAC,YAAY,SAAI,GAAG,OAAO;IAUrC;;;OAGG;IACH,OAAO,CAAC,MAAM;IASd;;;OAGG;IACH,IAAI,YAAY,IAAI,MAAM,CAGzB;IAED;;;OAGG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAG9B;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,MAAM,CAMxB;IAED;;;OAGG;IACH,KAAK,IAAI,IAAI;CAId"}
@@ -2,83 +2,104 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RateLimiter = void 0;
4
4
  /**
5
- * Implements a sliding window rate limiter to control request frequency.
5
+ * @class RateLimiter
6
+ * @en Smooth rate limiting using the Token Bucket algorithm.
7
+ * Allows for short bursts while maintaining a steady long-term rate.
8
+ * @ru Плавное ограничение частоты запросов с использованием алгоритма Token Bucket.
9
+ * Позволяет кратковременные всплески, сохраняя стабильную скорость в долгосрочной перспективе.
6
10
  */
7
11
  class RateLimiter {
8
- timestamps = [];
12
+ tokens;
13
+ lastRefill;
9
14
  max;
10
15
  window;
11
- maxArraySize;
16
+ refillRate; // tokens per ms
12
17
  constructor(config) {
13
18
  this.max = Math.max(1, config?.maxRequests ?? 100);
14
19
  this.window = Math.max(1, config?.windowMs ?? 60_000);
15
- this.maxArraySize = config?.maxArraySize ?? this.max * 2;
20
+ this.refillRate = this.max / this.window;
21
+ this.tokens = this.max;
22
+ this.lastRefill = Date.now();
16
23
  }
17
24
  /**
18
- * Cleans up old timestamps efficiently
25
+ * @en Waits until enough tokens are available and consumes them.
26
+ * @ru Ожидает появления достаточного количества токенов и потребляет их.
27
+ * @param tokensNeeded - Number of tokens to consume (default: 1)
19
28
  */
20
- cleanup() {
21
- const now = Date.now();
22
- if (this.timestamps.length > this.maxArraySize) {
23
- this.timestamps = this.timestamps.filter((t) => now - t < this.window);
29
+ async wait(tokensNeeded = 1) {
30
+ this.refill();
31
+ tokensNeeded = Math.max(1, tokensNeeded);
32
+ if (this.tokens >= tokensNeeded) {
33
+ this.tokens -= tokensNeeded;
24
34
  return;
25
35
  }
26
- while (this.timestamps.length > 0 &&
27
- now - this.timestamps[0] >= this.window) {
28
- this.timestamps.shift();
29
- }
36
+ const deficit = tokensNeeded - this.tokens;
37
+ const waitTimeMs = Math.ceil(deficit / this.refillRate);
38
+ // Приостанавливаем выполнение на расчетное время
39
+ await new Promise((resolve) => setTimeout(resolve, waitTimeMs));
40
+ this.refill();
41
+ this.tokens -= tokensNeeded;
42
+ this.tokens = Math.max(0, this.tokens);
30
43
  }
31
44
  /**
32
- * Waits if necessary to respect the rate limit, then records the current request.
45
+ * @en Attempts to consume tokens immediately.
46
+ * @ru Пытается немедленно потребить токены.
47
+ * @returns true if tokens were consumed, false otherwise (limit exceeded).
33
48
  */
34
- async wait() {
35
- this.cleanup();
36
- if (this.timestamps.length >= this.max) {
37
- const delay = this.timestamps[0] + this.window - Date.now();
38
- if (delay > 0) {
39
- await new Promise((resolve) => setTimeout(resolve, delay));
40
- }
49
+ tryConsume(tokensNeeded = 1) {
50
+ this.refill();
51
+ tokensNeeded = Math.max(1, tokensNeeded);
52
+ if (this.tokens >= tokensNeeded) {
53
+ this.tokens -= tokensNeeded;
54
+ return true;
41
55
  }
42
- this.timestamps.push(Date.now());
56
+ return false;
57
+ }
58
+ /**
59
+ * @en Internal method to refill the bucket based on elapsed time.
60
+ * @ru Внутренний метод для пополнения корзины на основе прошедшего времени.
61
+ */
62
+ refill() {
63
+ const now = Date.now();
64
+ const elapsedMs = now - this.lastRefill;
65
+ const newTokens = elapsedMs * this.refillRate;
66
+ this.tokens = Math.min(this.max, this.tokens + newTokens);
67
+ this.lastRefill = now;
43
68
  }
44
69
  /**
45
- * Gets the current number of requests in the sliding window
70
+ * @en Returns the number of currently "used" slots.
71
+ * @ru Возвращает количество текущих "занятых" слотов.
46
72
  */
47
73
  get currentCount() {
48
- this.cleanup();
49
- return this.timestamps.length;
74
+ this.refill();
75
+ return Math.floor(this.max - this.tokens);
50
76
  }
51
77
  /**
52
- * Remaining requests in current window
78
+ * @en Returns how many requests can be made right now.
79
+ * @ru Возвращает количество запросов, которые можно выполнить прямо сейчас.
53
80
  */
54
81
  get remainingRequests() {
55
- return Math.max(0, this.max - this.currentCount);
82
+ this.refill();
83
+ return Math.floor(this.tokens);
56
84
  }
57
85
  /**
58
- * Milliseconds until next reset
86
+ * @en Estimated time in ms until the next token is available.
87
+ * @ru Ожидаемое время в мс до появления следующего токена.
59
88
  */
60
89
  get timeToReset() {
61
- if (this.timestamps.length === 0)
90
+ this.refill();
91
+ if (this.tokens >= 1)
62
92
  return 0;
63
- const now = Date.now();
64
- return this.timestamps[0] + this.window - now;
93
+ const deficitToOne = 1 - this.tokens;
94
+ return Math.max(0, Math.ceil(deficitToOne / this.refillRate));
65
95
  }
66
96
  /**
67
- * Resets the rate limiter
97
+ * @en Instantly refills the bucket to its maximum capacity.
98
+ * @ru Мгновенно пополняет корзину до максимальной емкости.
68
99
  */
69
100
  reset() {
70
- this.timestamps.length = 0;
71
- }
72
- /**
73
- * Removes a specific timestamp (для removeToken pattern)
74
- */
75
- removeToken(timestamp) {
76
- const index = this.timestamps.indexOf(timestamp);
77
- if (index > -1) {
78
- this.timestamps.splice(index, 1);
79
- return true;
80
- }
81
- return false;
101
+ this.tokens = this.max;
102
+ this.lastRefill = Date.now();
82
103
  }
83
104
  }
84
105
  exports.RateLimiter = RateLimiter;
@@ -1 +1 @@
1
- {"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../../../../src/Hyperttp/Core/RateLimiter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RateLimiter.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,15 @@
1
+ import HttpClientImproved from "./HttpClientImproved";
1
2
  /**
2
- * Fluent request builder for making HTTP requests with a chainable API.
3
- * Provides a convenient way to build and send HTTP requests with various options.
4
- *
5
- * @example
3
+ * @class RequestBuilder
4
+ * @en Fluent request builder for creating HTTP requests with a chainable API.
5
+ * @ru Fluent request builder для создания HTTP-запросов. Позволяет собирать параметры запроса в цепочку.
6
+ * * @example
6
7
  * ```ts
7
- * const client = new HttpClientImproved();
8
- * const response = await client.request('https://api.example.com/data')
9
- * .headers({ 'Authorization': 'Bearer token' })
10
- * .query({ limit: 10, offset: 0 })
11
- * .json()
12
- * .send();
8
+ * const user = await client.request('[https://api.example.com/users](https://api.example.com/users)')
9
+ * .post()
10
+ * .jsonBody({ name: 'John' })
11
+ * .headers({ 'X-Custom-Header': 'value' })
12
+ * .send();
13
13
  * ```
14
14
  */
15
15
  export declare class RequestBuilder<T = any> {
@@ -18,79 +18,63 @@ export declare class RequestBuilder<T = any> {
18
18
  private _headers;
19
19
  private _body?;
20
20
  private _responseType;
21
+ private _client;
22
+ private _signal?;
23
+ constructor(url: string, client: HttpClientImproved);
21
24
  /**
22
- * Creates a new request builder for the specified URL.
23
- * @param url - The target URL for the request
24
- */
25
- constructor(url: string);
26
- /**
27
- * Sets HTTP headers for the request.
28
- * @param headers - Object containing header key-value pairs
29
- * @returns The builder instance for chaining
25
+ * @en Appends multiple headers to the request.
26
+ * @ru Добавляет несколько заголовков к запросу.
30
27
  */
31
28
  headers(headers: Record<string, string>): this;
32
29
  /**
33
- * Sets the request body data.
34
- * @param bodyData - The body data to send with the request
35
- * @returns The builder instance for chaining
30
+ * @en Sets the request body.
31
+ * @ru Устанавливает тело запроса.
36
32
  */
37
33
  body(bodyData: any): this;
38
34
  /**
39
- * Sets the response type to JSON.
40
- * @returns The builder instance for chaining
41
- */
42
- json(): this;
43
- /**
44
- * Sets the response type to plain text.
45
- * @returns The builder instance for chaining
46
- */
47
- text(): this;
48
- /**
49
- * Sets the response type to XML.
50
- * @returns The builder instance for chaining
35
+ * @en Sets the body and ensures Content-Type is application/json.
36
+ * @ru Устанавливает тело запроса и заголовок Content-Type: application/json.
51
37
  */
52
- xml(): this;
38
+ jsonBody<B>(body: B): this;
53
39
  /**
54
- * Sets the HTTP method to POST.
55
- * @returns The builder instance for chaining
40
+ * @en Adds URL query parameters.
41
+ * @ru Добавляет параметры запроса в URL (search params).
56
42
  */
43
+ query(params: Record<string, string | number | boolean>): this;
44
+ /** @en Set method to POST */
57
45
  post(): this;
58
- /**
59
- * @ru Устанавливает потоковый режим ответа.
60
- * @en Sets streaming response mode.
61
- */
62
- stream(): this;
63
- /**
64
- * Sets the HTTP method to PUT.
65
- * @returns The builder instance for chaining
66
- */
46
+ /** @en Set method to PUT */
67
47
  put(): this;
68
- /**
69
- * Sets the HTTP method to PATCH.
70
- * @returns The builder instance for chaining
71
- */
48
+ /** @en Set method to PATCH */
72
49
  patch(): this;
73
- /**
74
- * Sets the HTTP method to DELETE.
75
- * @returns The builder instance for chaining
76
- */
50
+ /** @en Set method to DELETE */
77
51
  delete(): this;
52
+ /** @en Set method to HEAD */
53
+ head(): this;
54
+ /** @en Set response type to JSON */
55
+ json(): this;
56
+ /** @en Set response type to Plain Text */
57
+ text(): this;
58
+ /** @en Set response type to XML */
59
+ xml(): this;
60
+ /** @en Set response type to Buffer */
61
+ buffer(): this;
62
+ /** @en Set response type to Stream (AsyncIterable) */
63
+ stream(): this;
78
64
  /**
79
- * Adds query parameters to the URL.
80
- * @param params - Object containing query parameter key-value pairs
81
- * @returns The builder instance for chaining
65
+ * @en Attaches an external AbortSignal for manual cancellation.
66
+ * @ru Привязывает внешний AbortSignal для ручной отмены запроса.
82
67
  */
83
- query(params: Record<string, string | number | boolean>): this;
68
+ signal(signal: AbortSignal): this;
84
69
  /**
85
- * Sets a JSON body for the request.
86
- * Automatically sets the Content-Type header to application/json.
87
- * @param body - The JSON body data
88
- * @returns The builder instance for chaining
70
+ * @en Creates a timeout signal for this specific request.
71
+ * @ru Устанавливает таймаут для конкретно этого запроса.
89
72
  */
90
- jsonBody<T>(body: T): this;
73
+ timeout(ms: number): this;
91
74
  /**
92
- * Sends the HTTP request and returns the response.
93
- * @returns Promise resolving to the response data
75
+ * @en Finalizes and sends the request.
76
+ * @ru Финализирует и отправляет запрос.
77
+ * @returns Promise resolving to the expected type T or StreamResponse.
94
78
  */
95
79
  send(): Promise<T>;
96
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RequestBuilder.d.ts","sourceRoot":"","sources":["../../../../src/Hyperttp/Core/RequestBuilder.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAc,CAAC,CAAC,GAAG,GAAG;IACjC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAsD;IACrE,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,KAAK,CAAC,CAAM;IACpB,OAAO,CAAC,aAAa,CAAwB;IAE7C;;;OAGG;gBACS,GAAG,EAAE,MAAM;IAIvB;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAK9C;;;;OAIG;IACH,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI;IAKzB;;;OAGG;IACH,IAAI,IAAI,IAAI;IAKZ;;;OAGG;IACH,IAAI,IAAI,IAAI;IAKZ;;;OAGG;IACH,GAAG,IAAI,IAAI;IAKX;;;OAGG;IACH,IAAI,IAAI,IAAI;IAKZ;;;OAGG;IACH,MAAM,IAAI,IAAI;IAKd;;;OAGG;IACH,GAAG,IAAI,IAAI;IAKX;;;OAGG;IACH,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACH,MAAM,IAAI,IAAI;IAKd;;;;OAIG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI;IAS9D;;;;;OAKG;IACH,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAM1B;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;CA6BzB"}
1
+ {"version":3,"file":"RequestBuilder.d.ts","sourceRoot":"","sources":["../../../src/Hyperttp/Core/RequestBuilder.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAEtD;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAc,CAAC,CAAC,GAAG,GAAG;IACjC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAA+D;IAC9E,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,KAAK,CAAC,CAAM;IACpB,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAC,CAAc;gBAElB,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB;IAKnD;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAK9C;;;OAGG;IACH,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI;IAKzB;;;OAGG;IACH,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAM1B;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI;IAS9D,6BAA6B;IAC7B,IAAI,IAAI,IAAI;IAKZ,4BAA4B;IAC5B,GAAG,IAAI,IAAI;IAKX,8BAA8B;IAC9B,KAAK,IAAI,IAAI;IAKb,+BAA+B;IAC/B,MAAM,IAAI,IAAI;IAKd,6BAA6B;IAC7B,IAAI,IAAI,IAAI;IAKZ,oCAAoC;IACpC,IAAI,IAAI,IAAI;IAKZ,0CAA0C;IAC1C,IAAI,IAAI,IAAI;IAKZ,mCAAmC;IACnC,GAAG,IAAI,IAAI;IAKX,sCAAsC;IACtC,MAAM,IAAI,IAAI;IAKd,sDAAsD;IACtD,MAAM,IAAI,IAAI;IAKd;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKjC;;;OAGG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKzB;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;CA2BzB"}