bytekit 2.2.0 → 2.4.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 (97) hide show
  1. package/dist/cli/ddd-boilerplate.d.ts.map +1 -1
  2. package/dist/cli/ddd-boilerplate.js +4 -1
  3. package/dist/cli/ddd-boilerplate.js.map +1 -1
  4. package/dist/cli/index.d.ts.map +1 -1
  5. package/dist/cli/index.js +11 -5
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/cli/swagger-generator.d.ts.map +1 -1
  8. package/dist/cli/swagger-generator.js +9 -0
  9. package/dist/cli/swagger-generator.js.map +1 -1
  10. package/dist/cli/type-generator.d.ts.map +1 -1
  11. package/dist/cli/type-generator.js +5 -0
  12. package/dist/cli/type-generator.js.map +1 -1
  13. package/dist/utils/async/index.d.ts +8 -0
  14. package/dist/utils/async/index.d.ts.map +1 -1
  15. package/dist/utils/async/index.js +4 -0
  16. package/dist/utils/async/index.js.map +1 -1
  17. package/dist/utils/async/pipeline.d.ts +164 -0
  18. package/dist/utils/async/pipeline.d.ts.map +1 -0
  19. package/dist/utils/async/pipeline.js +154 -0
  20. package/dist/utils/async/pipeline.js.map +1 -0
  21. package/dist/utils/async/promise-pool.d.ts +59 -0
  22. package/dist/utils/async/promise-pool.d.ts.map +1 -0
  23. package/dist/utils/async/promise-pool.js +130 -0
  24. package/dist/utils/async/promise-pool.js.map +1 -0
  25. package/dist/utils/async/request-batcher.d.ts +82 -0
  26. package/dist/utils/async/request-batcher.d.ts.map +1 -0
  27. package/dist/utils/async/request-batcher.js +179 -0
  28. package/dist/utils/async/request-batcher.js.map +1 -0
  29. package/dist/utils/async/request-queue.d.ts +115 -0
  30. package/dist/utils/async/request-queue.d.ts.map +1 -0
  31. package/dist/utils/async/request-queue.js +236 -0
  32. package/dist/utils/async/request-queue.js.map +1 -0
  33. package/dist/utils/async/throttle.d.ts.map +1 -1
  34. package/dist/utils/async/throttle.js +1 -0
  35. package/dist/utils/async/throttle.js.map +1 -1
  36. package/dist/utils/core/ApiClient.d.ts +22 -1
  37. package/dist/utils/core/ApiClient.d.ts.map +1 -1
  38. package/dist/utils/core/ApiClient.js +64 -4
  39. package/dist/utils/core/ApiClient.js.map +1 -1
  40. package/dist/utils/core/ErrorBoundary.d.ts.map +1 -1
  41. package/dist/utils/core/ErrorBoundary.js +18 -5
  42. package/dist/utils/core/ErrorBoundary.js.map +1 -1
  43. package/dist/utils/core/Logger.d.ts +191 -0
  44. package/dist/utils/core/Logger.d.ts.map +1 -1
  45. package/dist/utils/core/Logger.js +155 -0
  46. package/dist/utils/core/Logger.js.map +1 -1
  47. package/dist/utils/core/Profiler.d.ts +41 -0
  48. package/dist/utils/core/Profiler.d.ts.map +1 -1
  49. package/dist/utils/core/Profiler.js +59 -0
  50. package/dist/utils/core/Profiler.js.map +1 -1
  51. package/dist/utils/core/RateLimiter.d.ts.map +1 -1
  52. package/dist/utils/core/RateLimiter.js +2 -0
  53. package/dist/utils/core/RateLimiter.js.map +1 -1
  54. package/dist/utils/core/ResponseValidator.d.ts +56 -0
  55. package/dist/utils/core/ResponseValidator.d.ts.map +1 -1
  56. package/dist/utils/core/ResponseValidator.js +28 -0
  57. package/dist/utils/core/ResponseValidator.js.map +1 -1
  58. package/dist/utils/core/RetryPolicy.d.ts +144 -0
  59. package/dist/utils/core/RetryPolicy.d.ts.map +1 -1
  60. package/dist/utils/core/RetryPolicy.js +108 -0
  61. package/dist/utils/core/RetryPolicy.js.map +1 -1
  62. package/dist/utils/helpers/CacheManager.d.ts.map +1 -1
  63. package/dist/utils/helpers/CacheManager.js +5 -0
  64. package/dist/utils/helpers/CacheManager.js.map +1 -1
  65. package/dist/utils/helpers/CompressionUtils.d.ts.map +1 -1
  66. package/dist/utils/helpers/CompressionUtils.js +21 -4
  67. package/dist/utils/helpers/CompressionUtils.js.map +1 -1
  68. package/dist/utils/helpers/CryptoUtils.d.ts.map +1 -1
  69. package/dist/utils/helpers/CryptoUtils.js +15 -3
  70. package/dist/utils/helpers/CryptoUtils.js.map +1 -1
  71. package/dist/utils/helpers/EnvManager.d.ts +46 -0
  72. package/dist/utils/helpers/EnvManager.d.ts.map +1 -1
  73. package/dist/utils/helpers/EnvManager.js +46 -0
  74. package/dist/utils/helpers/EnvManager.js.map +1 -1
  75. package/dist/utils/helpers/EventEmitter.d.ts.map +1 -1
  76. package/dist/utils/helpers/EventEmitter.js +0 -3
  77. package/dist/utils/helpers/EventEmitter.js.map +1 -1
  78. package/dist/utils/helpers/FileUploadHelper.d.ts +68 -1
  79. package/dist/utils/helpers/FileUploadHelper.d.ts.map +1 -1
  80. package/dist/utils/helpers/FileUploadHelper.js +72 -19
  81. package/dist/utils/helpers/FileUploadHelper.js.map +1 -1
  82. package/dist/utils/helpers/StorageUtils.d.ts +62 -0
  83. package/dist/utils/helpers/StorageUtils.d.ts.map +1 -1
  84. package/dist/utils/helpers/StorageUtils.js +62 -0
  85. package/dist/utils/helpers/StorageUtils.js.map +1 -1
  86. package/dist/utils/helpers/StreamingHelper.d.ts.map +1 -1
  87. package/dist/utils/helpers/StreamingHelper.js +16 -6
  88. package/dist/utils/helpers/StreamingHelper.js.map +1 -1
  89. package/dist/utils/helpers/UrlHelper.d.ts +30 -0
  90. package/dist/utils/helpers/UrlHelper.d.ts.map +1 -1
  91. package/dist/utils/helpers/UrlHelper.js +23 -1
  92. package/dist/utils/helpers/UrlHelper.js.map +1 -1
  93. package/dist/utils/helpers/WebSocketHelper.d.ts +30 -0
  94. package/dist/utils/helpers/WebSocketHelper.d.ts.map +1 -1
  95. package/dist/utils/helpers/WebSocketHelper.js +117 -5
  96. package/dist/utils/helpers/WebSocketHelper.js.map +1 -1
  97. package/package.json +5 -1
@@ -0,0 +1,115 @@
1
+ /**
2
+ * RequestQueue — Priority-aware, concurrency-limited task queue with AbortSignal cancellation.
3
+ * Feature: 004-batching-system
4
+ * Zero external dependencies: AbortController, Map (built-in).
5
+ */
6
+ /** The three fixed priority lanes for task execution ordering. */
7
+ export type QueuePriority = "high" | "normal" | "low";
8
+ /** Constructor options for {@link RequestQueue}. */
9
+ export interface RequestQueueOptions {
10
+ /**
11
+ * Max tasks running simultaneously. Minimum: 1.
12
+ */
13
+ concurrency: number;
14
+ /**
15
+ * Called when a task rejects. Queue continues executing remaining tasks.
16
+ * @param error The rejection reason (cast to Error).
17
+ * @param id The task's unique identifier.
18
+ */
19
+ onError?: (error: Error, id: string) => void;
20
+ }
21
+ /** Per-task options for {@link RequestQueue.add}. */
22
+ export interface AddOptions {
23
+ /**
24
+ * Lane priority. Defaults to `"normal"`.
25
+ * Tasks in `high` always dequeue before `normal`; `normal` before `low`.
26
+ */
27
+ priority?: QueuePriority;
28
+ /**
29
+ * External AbortSignal. If it fires before the task starts,
30
+ * the task is cancelled immediately with {@link QueueAbortError}.
31
+ * This is the **public consumer cancellation path**.
32
+ */
33
+ signal?: AbortSignal;
34
+ }
35
+ /**
36
+ * Thrown when a queued task is cancelled — either via an external AbortSignal
37
+ * or via the internal `cancel(id)` mechanism.
38
+ */
39
+ export declare class QueueAbortError extends Error {
40
+ constructor(message?: string);
41
+ }
42
+ /**
43
+ * A priority-aware, concurrency-limited task queue with AbortSignal-based cancellation.
44
+ *
45
+ * Tasks are organised into three lanes (`high`, `normal`, `low`). At any moment,
46
+ * at most `concurrency` tasks execute simultaneously. When a slot opens, the
47
+ * highest-priority queued task is dequeued and started.
48
+ *
49
+ * **Consumer cancellation** is done via `AddOptions.signal`.
50
+ * The `cancel(id)` method is an internal queue-management mechanism.
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const queue = new RequestQueue({ concurrency: 3 });
55
+ *
56
+ * const result = await queue.add(
57
+ * (signal) => fetch("/api/data", { signal }),
58
+ * { priority: "high" }
59
+ * );
60
+ * ```
61
+ */
62
+ export declare class RequestQueue {
63
+ private readonly _concurrency;
64
+ private readonly _onError?;
65
+ private readonly _high;
66
+ private readonly _normal;
67
+ private readonly _low;
68
+ private _running;
69
+ private readonly _active;
70
+ private _counter;
71
+ private _flushWaiters;
72
+ /**
73
+ * Creates a new RequestQueue.
74
+ * @throws {TypeError} if `concurrency` is less than 1.
75
+ */
76
+ constructor(options: RequestQueueOptions);
77
+ /**
78
+ * Enqueues a task. The task factory receives an internal AbortSignal
79
+ * that fires when the task is cancelled via `cancel(id)`.
80
+ *
81
+ * @returns `Promise<T>` resolving to the task's return value.
82
+ * @throws {@link QueueAbortError} if cancelled before or during execution.
83
+ * @throws Whatever the task itself throws.
84
+ */
85
+ add<T>(task: (signal: AbortSignal) => Promise<T>, options?: AddOptions): Promise<T>;
86
+ private _drain;
87
+ private _notifyFlushWaiters;
88
+ /**
89
+ * Cancels a task by ID.
90
+ * - **Queued task**: removed from its lane; promise rejects with {@link QueueAbortError}.
91
+ * Task factory is never called.
92
+ * - **In-flight task**: internal AbortSignal is fired. The task is responsible
93
+ * for reacting to signal abortion and rejecting its promise.
94
+ *
95
+ * @returns `true` if the ID was found; `false` otherwise.
96
+ * @internal Public consumers should use `AddOptions.signal` for cancellation.
97
+ */
98
+ cancel(id: string): boolean;
99
+ /**
100
+ * Resolves when all currently queued and running tasks have settled.
101
+ * Tasks added after `flush()` is called are included in the wait.
102
+ */
103
+ flush(): Promise<void>;
104
+ /** @internal Returns IDs of all queued (not yet running) items across all lanes. */
105
+ _queuedIds(): string[];
106
+ /** @internal Returns IDs of all currently running items. */
107
+ _runningIds(): string[];
108
+ /** Number of tasks waiting to start (across all priority lanes). */
109
+ get size(): number;
110
+ /** Number of tasks currently executing. */
111
+ get running(): number;
112
+ /** Total active work: `size + running`. */
113
+ get pending(): number;
114
+ }
115
+ //# sourceMappingURL=request-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-queue.d.ts","sourceRoot":"","sources":["../../../src/utils/async/request-queue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kEAAkE;AAClE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEtD,oDAAoD;AACpD,MAAM,WAAW,mBAAmB;IAChC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED,qDAAqD;AACrD,MAAM,WAAW,UAAU;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,KAAK;gBAC1B,OAAO,CAAC,EAAE,MAAM;CAI/B;AAcD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAqC;IAC/D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,aAAa,CAAyB;IAE9C;;;OAGG;gBACS,OAAO,EAAE,mBAAmB;IAQxC;;;;;;;OAOG;IACH,GAAG,CAAC,CAAC,EACD,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EACzC,OAAO,CAAC,EAAE,UAAU,GACrB,OAAO,CAAC,CAAC,CAAC;IA2Cb,OAAO,CAAC,MAAM;IAmCd,OAAO,CAAC,mBAAmB;IAO3B;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAoB3B;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,oFAAoF;IACpF,UAAU,IAAI,MAAM,EAAE;IAQtB,4DAA4D;IAC5D,WAAW,IAAI,MAAM,EAAE;IAIvB,oEAAoE;IACpE,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,2CAA2C;IAC3C,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,2CAA2C;IAC3C,IAAI,OAAO,IAAI,MAAM,CAEpB;CACJ"}
@@ -0,0 +1,236 @@
1
+ /**
2
+ * RequestQueue — Priority-aware, concurrency-limited task queue with AbortSignal cancellation.
3
+ * Feature: 004-batching-system
4
+ * Zero external dependencies: AbortController, Map (built-in).
5
+ */
6
+ /**
7
+ * Thrown when a queued task is cancelled — either via an external AbortSignal
8
+ * or via the internal `cancel(id)` mechanism.
9
+ */
10
+ export class QueueAbortError extends Error {
11
+ constructor(message) {
12
+ super(message ?? "Request cancelled");
13
+ this.name = "QueueAbortError";
14
+ }
15
+ }
16
+ /**
17
+ * A priority-aware, concurrency-limited task queue with AbortSignal-based cancellation.
18
+ *
19
+ * Tasks are organised into three lanes (`high`, `normal`, `low`). At any moment,
20
+ * at most `concurrency` tasks execute simultaneously. When a slot opens, the
21
+ * highest-priority queued task is dequeued and started.
22
+ *
23
+ * **Consumer cancellation** is done via `AddOptions.signal`.
24
+ * The `cancel(id)` method is an internal queue-management mechanism.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * const queue = new RequestQueue({ concurrency: 3 });
29
+ *
30
+ * const result = await queue.add(
31
+ * (signal) => fetch("/api/data", { signal }),
32
+ * { priority: "high" }
33
+ * );
34
+ * ```
35
+ */
36
+ export class RequestQueue {
37
+ /**
38
+ * Creates a new RequestQueue.
39
+ * @throws {TypeError} if `concurrency` is less than 1.
40
+ */
41
+ constructor(options) {
42
+ Object.defineProperty(this, "_concurrency", {
43
+ enumerable: true,
44
+ configurable: true,
45
+ writable: true,
46
+ value: void 0
47
+ });
48
+ Object.defineProperty(this, "_onError", {
49
+ enumerable: true,
50
+ configurable: true,
51
+ writable: true,
52
+ value: void 0
53
+ });
54
+ Object.defineProperty(this, "_high", {
55
+ enumerable: true,
56
+ configurable: true,
57
+ writable: true,
58
+ value: []
59
+ });
60
+ Object.defineProperty(this, "_normal", {
61
+ enumerable: true,
62
+ configurable: true,
63
+ writable: true,
64
+ value: []
65
+ });
66
+ Object.defineProperty(this, "_low", {
67
+ enumerable: true,
68
+ configurable: true,
69
+ writable: true,
70
+ value: []
71
+ });
72
+ Object.defineProperty(this, "_running", {
73
+ enumerable: true,
74
+ configurable: true,
75
+ writable: true,
76
+ value: 0
77
+ });
78
+ Object.defineProperty(this, "_active", {
79
+ enumerable: true,
80
+ configurable: true,
81
+ writable: true,
82
+ value: new Map()
83
+ });
84
+ Object.defineProperty(this, "_counter", {
85
+ enumerable: true,
86
+ configurable: true,
87
+ writable: true,
88
+ value: 0
89
+ });
90
+ Object.defineProperty(this, "_flushWaiters", {
91
+ enumerable: true,
92
+ configurable: true,
93
+ writable: true,
94
+ value: []
95
+ });
96
+ if (options.concurrency < 1) {
97
+ throw new TypeError("concurrency must be >= 1");
98
+ }
99
+ this._concurrency = options.concurrency;
100
+ this._onError = options.onError;
101
+ }
102
+ /**
103
+ * Enqueues a task. The task factory receives an internal AbortSignal
104
+ * that fires when the task is cancelled via `cancel(id)`.
105
+ *
106
+ * @returns `Promise<T>` resolving to the task's return value.
107
+ * @throws {@link QueueAbortError} if cancelled before or during execution.
108
+ * @throws Whatever the task itself throws.
109
+ */
110
+ add(task, options) {
111
+ const priority = options?.priority ?? "normal";
112
+ const externalSignal = options?.signal;
113
+ if (externalSignal?.aborted) {
114
+ return Promise.reject(new QueueAbortError());
115
+ }
116
+ const controller = new AbortController();
117
+ const id = String(++this._counter);
118
+ return new Promise((resolve, reject) => {
119
+ const item = {
120
+ task,
121
+ priority,
122
+ resolve,
123
+ reject,
124
+ controller,
125
+ id,
126
+ };
127
+ const lane = priority === "high"
128
+ ? this._high
129
+ : priority === "low"
130
+ ? this._low
131
+ : this._normal;
132
+ lane.push(item);
133
+ if (externalSignal) {
134
+ externalSignal.addEventListener("abort", () => {
135
+ this.cancel(id);
136
+ }, { once: true });
137
+ }
138
+ this._drain();
139
+ });
140
+ }
141
+ _drain() {
142
+ while (this._running < this._concurrency) {
143
+ const item = this._high.shift() ?? this._normal.shift() ?? this._low.shift();
144
+ if (!item)
145
+ break;
146
+ this._running++;
147
+ this._active.set(item.id, item);
148
+ const p = item
149
+ .task(item.controller.signal)
150
+ .then((value) => {
151
+ item.resolve(value);
152
+ }, (err) => {
153
+ this._onError?.(err instanceof Error ? err : new Error(String(err)), item.id);
154
+ item.reject(err);
155
+ })
156
+ .finally(() => {
157
+ this._running--;
158
+ this._active.delete(item.id);
159
+ this._drain();
160
+ });
161
+ void p;
162
+ }
163
+ this._notifyFlushWaiters();
164
+ }
165
+ _notifyFlushWaiters() {
166
+ if (this._running === 0 && this.size === 0) {
167
+ const waiters = this._flushWaiters.splice(0);
168
+ for (const w of waiters)
169
+ w();
170
+ }
171
+ }
172
+ /**
173
+ * Cancels a task by ID.
174
+ * - **Queued task**: removed from its lane; promise rejects with {@link QueueAbortError}.
175
+ * Task factory is never called.
176
+ * - **In-flight task**: internal AbortSignal is fired. The task is responsible
177
+ * for reacting to signal abortion and rejecting its promise.
178
+ *
179
+ * @returns `true` if the ID was found; `false` otherwise.
180
+ * @internal Public consumers should use `AddOptions.signal` for cancellation.
181
+ */
182
+ cancel(id) {
183
+ for (const lane of [this._high, this._normal, this._low]) {
184
+ const idx = lane.findIndex((i) => i.id === id);
185
+ if (idx !== -1) {
186
+ const [item] = lane.splice(idx, 1);
187
+ item.reject(new QueueAbortError());
188
+ this._notifyFlushWaiters();
189
+ return true;
190
+ }
191
+ }
192
+ const active = this._active.get(id);
193
+ if (active) {
194
+ active.controller.abort();
195
+ return true;
196
+ }
197
+ return false;
198
+ }
199
+ /**
200
+ * Resolves when all currently queued and running tasks have settled.
201
+ * Tasks added after `flush()` is called are included in the wait.
202
+ */
203
+ flush() {
204
+ if (this._running === 0 && this.size === 0) {
205
+ return Promise.resolve();
206
+ }
207
+ return new Promise((resolve) => {
208
+ this._flushWaiters.push(resolve);
209
+ });
210
+ }
211
+ /** @internal Returns IDs of all queued (not yet running) items across all lanes. */
212
+ _queuedIds() {
213
+ return [
214
+ ...this._high.map((i) => i.id),
215
+ ...this._normal.map((i) => i.id),
216
+ ...this._low.map((i) => i.id),
217
+ ];
218
+ }
219
+ /** @internal Returns IDs of all currently running items. */
220
+ _runningIds() {
221
+ return [...this._active.keys()];
222
+ }
223
+ /** Number of tasks waiting to start (across all priority lanes). */
224
+ get size() {
225
+ return this._high.length + this._normal.length + this._low.length;
226
+ }
227
+ /** Number of tasks currently executing. */
228
+ get running() {
229
+ return this._running;
230
+ }
231
+ /** Total active work: `size + running`. */
232
+ get pending() {
233
+ return this.size + this._running;
234
+ }
235
+ }
236
+ //# sourceMappingURL=request-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-queue.js","sourceRoot":"","sources":["../../../src/utils/async/request-queue.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../../src/utils/async/throttle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,aAAa,EACb,eAAe,EACf,iBAAiB,EACpB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAAC,KAAK,SAAS,GAAG,EAAE,EAAE,OAAO,EACtD,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,eAAoB,GAC9B,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAkHnC"}
1
+ {"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../../src/utils/async/throttle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,aAAa,EACb,eAAe,EACf,iBAAiB,EACpB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAAC,KAAK,SAAS,GAAG,EAAE,EAAE,OAAO,EACtD,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,eAAoB,GAC9B,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAmHnC"}
@@ -44,6 +44,7 @@ export function throttleAsync(fn, interval, options = {}) {
44
44
  * Executes the pending call if one exists
45
45
  */
46
46
  const executePending = async () => {
47
+ /* v8 ignore next 2 — defensive guard against double-dispatch (unreachable via public API) */
47
48
  if (pendingArgs === null)
48
49
  return;
49
50
  const args = pendingArgs;
@@ -1 +1 @@
1
- {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../src/utils/async/throttle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../src/utils/async/throttle.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,9 @@ import { Logger } from "#core/Logger.js";
2
2
  import { RetryConfig, CircuitBreakerConfig } from "#core/RetryPolicy.js";
3
3
  import { ValidationSchema } from "#core/ResponseValidator.js";
4
4
  import { SchemaAdapter } from "./SchemaAdapter.js";
5
+ import { PromisePoolOptions } from "../async/promise-pool.js";
6
+ import { RequestQueueOptions } from "../async/request-queue.js";
7
+ import { BatchOptions } from "../async/request-batcher.js";
5
8
  export type QueryParamValue = string | number | boolean | null | undefined;
6
9
  export type QueryParam = QueryParamValue | QueryParamValue[] | Record<string, unknown>;
7
10
  export type Locale = "en" | "es";
@@ -24,6 +27,12 @@ export interface ApiClientConfig {
24
27
  logger?: Logger;
25
28
  retryPolicy?: RetryConfig;
26
29
  circuitBreaker?: CircuitBreakerConfig;
30
+ /** Optional pool for limiting concurrent requests. */
31
+ pool?: PromisePoolOptions;
32
+ /** Optional request queue for concurrency-limited, priority-aware request execution. */
33
+ queue?: RequestQueueOptions;
34
+ /** Optional request batcher for time-window deduplication of identical requests. */
35
+ batch?: BatchOptions;
27
36
  }
28
37
  export type RequestBody = Record<string, unknown> | unknown[] | string | FormData | Blob | BufferSource;
29
38
  export interface RequestOptions<TResponse = unknown> extends Omit<RequestInit, "body"> {
@@ -32,6 +41,14 @@ export interface RequestOptions<TResponse = unknown> extends Omit<RequestInit, "
32
41
  errorLocale?: Locale;
33
42
  timeoutMs?: number;
34
43
  validateResponse?: ValidationSchema | SchemaAdapter<TResponse>;
44
+ /**
45
+ * Optional post-processing pipeline applied to the response body after parsing
46
+ * and validation. Applied after `validateResponse` (if present) has already run.
47
+ * If `pipeline.process()` throws, the error propagates as a request error.
48
+ */
49
+ pipeline?: {
50
+ process(data: TResponse): Promise<unknown>;
51
+ };
35
52
  skipRetry?: boolean;
36
53
  skipInterceptors?: boolean;
37
54
  logHeaders?: boolean;
@@ -109,6 +126,9 @@ export declare class ApiClient {
109
126
  private readonly errorMessages;
110
127
  private readonly retryPolicy;
111
128
  private readonly circuitBreaker;
129
+ private readonly pool?;
130
+ private readonly _queue?;
131
+ private readonly _batcher?;
112
132
  /**
113
133
  * Creates a new ApiClient instance.
114
134
  *
@@ -123,7 +143,7 @@ export declare class ApiClient {
123
143
  *
124
144
  * @param config Client configuration including baseUrl, headers, and policies.
125
145
  */
126
- constructor({ baseUrl, baseURL, defaultHeaders, fetchImpl, locale, errorMessages, timeoutMs, interceptors, disableInterceptors, logHeaders, redactHeaderKeys, logger, retryPolicy, circuitBreaker, }: ApiClientConfig);
146
+ constructor({ baseUrl, baseURL, defaultHeaders, fetchImpl, locale, errorMessages, timeoutMs, interceptors, disableInterceptors, logHeaders, redactHeaderKeys, logger, retryPolicy, circuitBreaker, pool, queue, batch, }: ApiClientConfig);
127
147
  get<T>(path: string | URL, options?: RequestOptions<T>): Promise<T>;
128
148
  /**
129
149
  * POST request - Acepta body directamente o RequestOptions
@@ -177,6 +197,7 @@ export declare class ApiClient {
177
197
  */
178
198
  private handleRequestError;
179
199
  request<T>(path: string | URL, options?: RequestOptions<T>): Promise<T>;
200
+ private executeRequest;
180
201
  /**
181
202
  * Normaliza el segundo parámetro de post/put/patch para soportar:
182
203
  * 1. Body directo: post("/path", { name: "John" })
@@ -1 +1 @@
1
- {"version":3,"file":"ApiClient.d.ts","sourceRoot":"","sources":["../../../src/utils/core/ApiClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApiClient.d.ts","sourceRoot":"","sources":["../../../src/utils/core/ApiClient.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,9 @@ import { retry as retryFn } from "../async/retry.js";
3
3
  import { RetryPolicy, CircuitBreaker, } from "#core/RetryPolicy.js";
4
4
  import { ResponseValidator, } from "#core/ResponseValidator.js";
5
5
  import { isSchemaAdapter } from "./SchemaAdapter.js";
6
+ import { PromisePool } from "../async/promise-pool.js";
7
+ import { RequestQueue } from "../async/request-queue.js";
8
+ import { RequestBatcher } from "../async/request-batcher.js";
6
9
  export class ApiError extends Error {
7
10
  constructor(status, statusText, message, body, isTimeout = false) {
8
11
  super(message);
@@ -64,6 +67,7 @@ export class ApiError extends Error {
64
67
  parts.push(`Body: ${bodyStr}`);
65
68
  }
66
69
  catch {
70
+ /* v8 ignore next */
67
71
  parts.push(`Body: ${this.body}`);
68
72
  }
69
73
  }
@@ -127,7 +131,7 @@ export class ApiClient {
127
131
  *
128
132
  * @param config Client configuration including baseUrl, headers, and policies.
129
133
  */
130
- constructor({ baseUrl, baseURL, defaultHeaders, fetchImpl, locale = "es", errorMessages, timeoutMs = 15000, interceptors, disableInterceptors = false, logHeaders = false, redactHeaderKeys, logger, retryPolicy, circuitBreaker, }) {
134
+ constructor({ baseUrl, baseURL, defaultHeaders, fetchImpl, locale = "es", errorMessages, timeoutMs = 15000, interceptors, disableInterceptors = false, logHeaders = false, redactHeaderKeys, logger, retryPolicy, circuitBreaker, pool, queue, batch, }) {
131
135
  Object.defineProperty(this, "baseUrl", {
132
136
  enumerable: true,
133
137
  configurable: true,
@@ -206,6 +210,24 @@ export class ApiClient {
206
210
  writable: true,
207
211
  value: void 0
208
212
  });
213
+ Object.defineProperty(this, "pool", {
214
+ enumerable: true,
215
+ configurable: true,
216
+ writable: true,
217
+ value: void 0
218
+ });
219
+ Object.defineProperty(this, "_queue", {
220
+ enumerable: true,
221
+ configurable: true,
222
+ writable: true,
223
+ value: void 0
224
+ });
225
+ Object.defineProperty(this, "_batcher", {
226
+ enumerable: true,
227
+ configurable: true,
228
+ writable: true,
229
+ value: void 0
230
+ });
209
231
  // Support both baseUrl and baseURL (common convention)
210
232
  const url = baseUrl ?? baseURL;
211
233
  if (!url) {
@@ -231,6 +253,9 @@ export class ApiClient {
231
253
  this.logger = logger;
232
254
  this.retryPolicy = new RetryPolicy(retryPolicy);
233
255
  this.circuitBreaker = new CircuitBreaker(circuitBreaker);
256
+ this.pool = pool ? new PromisePool(pool) : undefined;
257
+ this._queue = queue ? new RequestQueue(queue) : undefined;
258
+ this._batcher = batch ? new RequestBatcher(batch) : undefined;
234
259
  }
235
260
  // -------------------------
236
261
  // Core request shortcuts
@@ -400,9 +425,11 @@ export class ApiClient {
400
425
  */
401
426
  handleRequestError(err, path, method) {
402
427
  const pathStr = String(path);
428
+ /* v8 ignore start */
403
429
  if (err instanceof Error && err.name === "AbortError") {
404
430
  throw new ApiError(408, "Timeout", "Request timeout", null, true);
405
431
  }
432
+ /* v8 ignore end */
406
433
  // Enhanced logging for ApiError
407
434
  if (err instanceof ApiError) {
408
435
  this.logger?.error("API Request failed", {
@@ -414,12 +441,34 @@ export class ApiClient {
414
441
  }, err);
415
442
  }
416
443
  else {
444
+ /* v8 ignore next 6 */
417
445
  this.logger?.error("Request failed", { path: pathStr, method }, err instanceof Error ? err : new Error(String(err)));
418
446
  }
419
447
  throw err;
420
448
  }
421
449
  async request(path, options = {}) {
422
- const { validateResponse, skipRetry, skipInterceptors, logHeaders, ...requestOptions } = options;
450
+ // US4: RequestQueue concurrency-limited, priority-aware queue
451
+ if (this._queue) {
452
+ return this._queue.add((_signal) => this.executeRequest(path, options));
453
+ }
454
+ // US4: RequestBatcher — time-window deduplication
455
+ if (this._batcher) {
456
+ const pathStr = String(path);
457
+ const method = (options.method ?? "GET").toUpperCase();
458
+ const proxyInit = { method };
459
+ return this._batcher.add(pathStr, proxyInit, (_url, _init) => this.executeRequest(path, options));
460
+ }
461
+ // T026: legacy pool support (003) — if a pool is configured, route through it
462
+ if (this.pool) {
463
+ const results = await this.pool.run([
464
+ () => this.executeRequest(path, options),
465
+ ]);
466
+ return results[0];
467
+ }
468
+ return this.executeRequest(path, options);
469
+ }
470
+ async executeRequest(path, options = {}) {
471
+ const { validateResponse, pipeline, skipRetry, skipInterceptors, logHeaders, ...requestOptions } = options;
423
472
  const executeRequest = async () => {
424
473
  return this.circuitBreaker.execute(async () => {
425
474
  const { errorLocale, ...rest } = requestOptions;
@@ -430,12 +479,14 @@ export class ApiClient {
430
479
  const headersForLog = shouldLogHeaders
431
480
  ? this.redactHeaders(this.normalizeHeaders(init.headers))
432
481
  : undefined;
482
+ /* v8 ignore start */
433
483
  this.logger?.debug("HTTP Request", {
434
484
  method: rest.method,
435
485
  url,
436
486
  ...(shouldLogHeaders ? { headers: headersForLog } : {}),
437
487
  body: rest.body,
438
488
  });
489
+ /* v8 ignore end */
439
490
  try {
440
491
  const response = await this.withTimeout(this.fetchImpl(url, init), timeout, controller);
441
492
  // Response interceptor
@@ -449,7 +500,11 @@ export class ApiClient {
449
500
  throw await this.toApiError(finalResponse, errorLocale);
450
501
  }
451
502
  // Process response
452
- const data = await this.processResponse(finalResponse, validateResponse);
503
+ let data = await this.processResponse(finalResponse, validateResponse);
504
+ // Apply optional pipeline post-processing
505
+ if (pipeline) {
506
+ data = await pipeline.process(data);
507
+ }
453
508
  this.logger?.debug("HTTP Response", {
454
509
  status: finalResponse.status,
455
510
  url,
@@ -472,7 +527,11 @@ export class ApiClient {
472
527
  baseDelay: config.initialDelayMs,
473
528
  maxDelay: config.maxDelayMs,
474
529
  backoff: "exponential",
475
- shouldRetry: (err) => config.shouldRetry?.(err instanceof Error ? err : new Error(String(err)), 0) ?? false,
530
+ shouldRetry: (err) =>
531
+ /* v8 ignore next */
532
+ config.shouldRetry?.(err instanceof Error ? err : new Error(String(err)), 0
533
+ /* v8 ignore next */
534
+ ) ?? false,
476
535
  });
477
536
  }
478
537
  // -------------------------
@@ -626,6 +685,7 @@ export class ApiClient {
626
685
  if (dict[status])
627
686
  return dict[status];
628
687
  }
688
+ /* v8 ignore next */
629
689
  return (GENERIC_ERROR_MESSAGE[this.locale] ?? GENERIC_ERROR_MESSAGE.es)(status, statusText);
630
690
  }
631
691
  getLocalePreference(override) {