@procedures/client 0.2.0 → 0.2.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.
Files changed (236) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +4 -4
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/browser.d.ts +1 -1
  5. package/dist/browser.d.ts.map +1 -1
  6. package/dist/browser.js.map +1 -1
  7. package/dist/procedures/invoke.d.ts +6 -1
  8. package/dist/procedures/invoke.d.ts.map +1 -1
  9. package/dist/procedures/invoke.js +2 -2
  10. package/dist/procedures/invoke.js.map +1 -1
  11. package/dist/server/host-policy.d.ts +3 -3
  12. package/dist/server/host-policy.d.ts.map +1 -1
  13. package/dist/server/procedure-server.d.ts +2 -2
  14. package/dist/server/procedure-server.d.ts.map +1 -1
  15. package/dist/server/procedure-server.js.map +1 -1
  16. package/package.json +1 -1
  17. package/src/browser.ts +1 -0
  18. package/src/procedures/invoke.ts +10 -4
  19. package/src/server/host-policy.ts +3 -3
  20. package/src/server/procedure-server.ts +2 -2
  21. package/dist/client/middleware/batching.d.ts +0 -102
  22. package/dist/client/middleware/batching.d.ts.map +0 -1
  23. package/dist/client/middleware/batching.js +0 -245
  24. package/dist/client/middleware/batching.js.map +0 -1
  25. package/dist/collections/async/async-queue.d.ts +0 -144
  26. package/dist/collections/async/async-queue.d.ts.map +0 -1
  27. package/dist/collections/async/async-queue.js +0 -347
  28. package/dist/collections/async/async-queue.js.map +0 -1
  29. package/dist/collections/async/channels.d.ts +0 -188
  30. package/dist/collections/async/channels.d.ts.map +0 -1
  31. package/dist/collections/async/channels.js +0 -312
  32. package/dist/collections/async/channels.js.map +0 -1
  33. package/dist/collections/behaviors/bounded.d.ts +0 -79
  34. package/dist/collections/behaviors/bounded.d.ts.map +0 -1
  35. package/dist/collections/behaviors/bounded.js +0 -384
  36. package/dist/collections/behaviors/bounded.js.map +0 -1
  37. package/dist/collections/behaviors/evented.d.ts +0 -154
  38. package/dist/collections/behaviors/evented.d.ts.map +0 -1
  39. package/dist/collections/behaviors/evented.js +0 -299
  40. package/dist/collections/behaviors/evented.js.map +0 -1
  41. package/dist/collections/behaviors/lru.d.ts +0 -84
  42. package/dist/collections/behaviors/lru.d.ts.map +0 -1
  43. package/dist/collections/behaviors/lru.js +0 -330
  44. package/dist/collections/behaviors/lru.js.map +0 -1
  45. package/dist/collections/behaviors/readonly.d.ts +0 -73
  46. package/dist/collections/behaviors/readonly.d.ts.map +0 -1
  47. package/dist/collections/behaviors/readonly.js +0 -158
  48. package/dist/collections/behaviors/readonly.js.map +0 -1
  49. package/dist/collections/behaviors/safe.d.ts +0 -163
  50. package/dist/collections/behaviors/safe.d.ts.map +0 -1
  51. package/dist/collections/behaviors/safe.js +0 -172
  52. package/dist/collections/behaviors/safe.js.map +0 -1
  53. package/dist/collections/behaviors/synchronized.d.ts +0 -88
  54. package/dist/collections/behaviors/synchronized.d.ts.map +0 -1
  55. package/dist/collections/behaviors/synchronized.js +0 -294
  56. package/dist/collections/behaviors/synchronized.js.map +0 -1
  57. package/dist/collections/behaviors/ttl.d.ts +0 -118
  58. package/dist/collections/behaviors/ttl.d.ts.map +0 -1
  59. package/dist/collections/behaviors/ttl.js +0 -338
  60. package/dist/collections/behaviors/ttl.js.map +0 -1
  61. package/dist/collections/core/effects.d.ts +0 -176
  62. package/dist/collections/core/effects.d.ts.map +0 -1
  63. package/dist/collections/core/effects.js +0 -180
  64. package/dist/collections/core/effects.js.map +0 -1
  65. package/dist/collections/core/events.d.ts +0 -192
  66. package/dist/collections/core/events.d.ts.map +0 -1
  67. package/dist/collections/core/events.js +0 -291
  68. package/dist/collections/core/events.js.map +0 -1
  69. package/dist/collections/core/middleware.d.ts +0 -231
  70. package/dist/collections/core/middleware.d.ts.map +0 -1
  71. package/dist/collections/core/middleware.js +0 -161
  72. package/dist/collections/core/middleware.js.map +0 -1
  73. package/dist/collections/core/policies.d.ts +0 -220
  74. package/dist/collections/core/policies.d.ts.map +0 -1
  75. package/dist/collections/core/policies.js +0 -48
  76. package/dist/collections/core/policies.js.map +0 -1
  77. package/dist/collections/core/traits.d.ts +0 -142
  78. package/dist/collections/core/traits.d.ts.map +0 -1
  79. package/dist/collections/core/traits.js +0 -8
  80. package/dist/collections/core/traits.js.map +0 -1
  81. package/dist/collections/examples.d.ts +0 -13
  82. package/dist/collections/examples.d.ts.map +0 -1
  83. package/dist/collections/examples.js +0 -302
  84. package/dist/collections/examples.js.map +0 -1
  85. package/dist/collections/fx/collectors.d.ts +0 -190
  86. package/dist/collections/fx/collectors.d.ts.map +0 -1
  87. package/dist/collections/fx/collectors.js +0 -369
  88. package/dist/collections/fx/collectors.js.map +0 -1
  89. package/dist/collections/fx/iter.d.ts +0 -166
  90. package/dist/collections/fx/iter.d.ts.map +0 -1
  91. package/dist/collections/fx/iter.js +0 -421
  92. package/dist/collections/fx/iter.js.map +0 -1
  93. package/dist/collections/impl/array-deque.d.ts +0 -107
  94. package/dist/collections/impl/array-deque.d.ts.map +0 -1
  95. package/dist/collections/impl/array-deque.js +0 -381
  96. package/dist/collections/impl/array-deque.js.map +0 -1
  97. package/dist/collections/impl/array-list.d.ts +0 -101
  98. package/dist/collections/impl/array-list.d.ts.map +0 -1
  99. package/dist/collections/impl/array-list.js +0 -387
  100. package/dist/collections/impl/array-list.js.map +0 -1
  101. package/dist/collections/impl/hash-map.d.ts +0 -141
  102. package/dist/collections/impl/hash-map.d.ts.map +0 -1
  103. package/dist/collections/impl/hash-map.js +0 -450
  104. package/dist/collections/impl/hash-map.js.map +0 -1
  105. package/dist/collections/impl/hash-set.d.ts +0 -125
  106. package/dist/collections/impl/hash-set.d.ts.map +0 -1
  107. package/dist/collections/impl/hash-set.js +0 -264
  108. package/dist/collections/impl/hash-set.js.map +0 -1
  109. package/dist/collections/impl/linked-hash-map.d.ts +0 -141
  110. package/dist/collections/impl/linked-hash-map.d.ts.map +0 -1
  111. package/dist/collections/impl/linked-hash-map.js +0 -472
  112. package/dist/collections/impl/linked-hash-map.js.map +0 -1
  113. package/dist/collections/impl/linked-list.d.ts +0 -109
  114. package/dist/collections/impl/linked-list.d.ts.map +0 -1
  115. package/dist/collections/impl/linked-list.js +0 -491
  116. package/dist/collections/impl/linked-list.js.map +0 -1
  117. package/dist/collections/impl/priority-queue.d.ts +0 -134
  118. package/dist/collections/impl/priority-queue.d.ts.map +0 -1
  119. package/dist/collections/impl/priority-queue.js +0 -336
  120. package/dist/collections/impl/priority-queue.js.map +0 -1
  121. package/dist/collections/impl/tree-map.d.ts +0 -146
  122. package/dist/collections/impl/tree-map.d.ts.map +0 -1
  123. package/dist/collections/impl/tree-map.js +0 -781
  124. package/dist/collections/impl/tree-map.js.map +0 -1
  125. package/dist/collections/impl/tree-set.d.ts +0 -112
  126. package/dist/collections/impl/tree-set.d.ts.map +0 -1
  127. package/dist/collections/impl/tree-set.js +0 -374
  128. package/dist/collections/impl/tree-set.js.map +0 -1
  129. package/dist/collections/index.d.ts +0 -105
  130. package/dist/collections/index.d.ts.map +0 -1
  131. package/dist/collections/index.js +0 -135
  132. package/dist/collections/index.js.map +0 -1
  133. package/dist/collections/interfaces/collection.d.ts +0 -119
  134. package/dist/collections/interfaces/collection.d.ts.map +0 -1
  135. package/dist/collections/interfaces/collection.js +0 -8
  136. package/dist/collections/interfaces/collection.js.map +0 -1
  137. package/dist/collections/interfaces/list.d.ts +0 -247
  138. package/dist/collections/interfaces/list.d.ts.map +0 -1
  139. package/dist/collections/interfaces/list.js +0 -8
  140. package/dist/collections/interfaces/list.js.map +0 -1
  141. package/dist/collections/interfaces/map.d.ts +0 -344
  142. package/dist/collections/interfaces/map.d.ts.map +0 -1
  143. package/dist/collections/interfaces/map.js +0 -8
  144. package/dist/collections/interfaces/map.js.map +0 -1
  145. package/dist/collections/interfaces/queue.d.ts +0 -304
  146. package/dist/collections/interfaces/queue.d.ts.map +0 -1
  147. package/dist/collections/interfaces/queue.js +0 -8
  148. package/dist/collections/interfaces/queue.js.map +0 -1
  149. package/dist/collections/interfaces/set.d.ts +0 -137
  150. package/dist/collections/interfaces/set.d.ts.map +0 -1
  151. package/dist/collections/interfaces/set.js +0 -8
  152. package/dist/collections/interfaces/set.js.map +0 -1
  153. package/dist/collections/storage/api.d.ts +0 -109
  154. package/dist/collections/storage/api.d.ts.map +0 -1
  155. package/dist/collections/storage/api.js +0 -182
  156. package/dist/collections/storage/api.js.map +0 -1
  157. package/dist/collections/storage/hybrid.d.ts +0 -164
  158. package/dist/collections/storage/hybrid.d.ts.map +0 -1
  159. package/dist/collections/storage/hybrid.js +0 -416
  160. package/dist/collections/storage/hybrid.js.map +0 -1
  161. package/dist/collections/storage/index.d.ts +0 -16
  162. package/dist/collections/storage/index.d.ts.map +0 -1
  163. package/dist/collections/storage/index.js +0 -13
  164. package/dist/collections/storage/index.js.map +0 -1
  165. package/dist/collections/storage/interface.d.ts +0 -141
  166. package/dist/collections/storage/interface.d.ts.map +0 -1
  167. package/dist/collections/storage/interface.js +0 -23
  168. package/dist/collections/storage/interface.js.map +0 -1
  169. package/dist/collections/storage/memory.d.ts +0 -68
  170. package/dist/collections/storage/memory.d.ts.map +0 -1
  171. package/dist/collections/storage/memory.js +0 -154
  172. package/dist/collections/storage/memory.js.map +0 -1
  173. package/dist/collections/utils/defaults.d.ts +0 -135
  174. package/dist/collections/utils/defaults.d.ts.map +0 -1
  175. package/dist/collections/utils/defaults.js +0 -322
  176. package/dist/collections/utils/defaults.js.map +0 -1
  177. package/dist/collections/utils/factories.d.ts +0 -144
  178. package/dist/collections/utils/factories.d.ts.map +0 -1
  179. package/dist/collections/utils/factories.js +0 -293
  180. package/dist/collections/utils/factories.js.map +0 -1
  181. package/dist/collections/utils/helpers.d.ts +0 -137
  182. package/dist/collections/utils/helpers.d.ts.map +0 -1
  183. package/dist/collections/utils/helpers.js +0 -221
  184. package/dist/collections/utils/helpers.js.map +0 -1
  185. package/dist/collections.d.ts +0 -12
  186. package/dist/collections.d.ts.map +0 -1
  187. package/dist/collections.js +0 -10
  188. package/dist/collections.js.map +0 -1
  189. package/dist/components/define.d.ts +0 -134
  190. package/dist/components/define.d.ts.map +0 -1
  191. package/dist/components/define.js +0 -486
  192. package/dist/components/define.js.map +0 -1
  193. package/dist/components/index.d.ts +0 -39
  194. package/dist/components/index.d.ts.map +0 -1
  195. package/dist/components/index.js +0 -38
  196. package/dist/components/index.js.map +0 -1
  197. package/dist/components/types.d.ts +0 -264
  198. package/dist/components/types.d.ts.map +0 -1
  199. package/dist/components/types.js +0 -46
  200. package/dist/components/types.js.map +0 -1
  201. package/dist/procedures/storage/adapter.d.ts +0 -148
  202. package/dist/procedures/storage/adapter.d.ts.map +0 -1
  203. package/dist/procedures/storage/adapter.js +0 -214
  204. package/dist/procedures/storage/adapter.js.map +0 -1
  205. package/dist/procedures/storage/api.d.ts +0 -125
  206. package/dist/procedures/storage/api.d.ts.map +0 -1
  207. package/dist/procedures/storage/api.js +0 -220
  208. package/dist/procedures/storage/api.js.map +0 -1
  209. package/dist/procedures/storage/factory.d.ts +0 -134
  210. package/dist/procedures/storage/factory.d.ts.map +0 -1
  211. package/dist/procedures/storage/factory.js +0 -166
  212. package/dist/procedures/storage/factory.js.map +0 -1
  213. package/dist/procedures/storage/hybrid.d.ts +0 -193
  214. package/dist/procedures/storage/hybrid.d.ts.map +0 -1
  215. package/dist/procedures/storage/hybrid.js +0 -519
  216. package/dist/procedures/storage/hybrid.js.map +0 -1
  217. package/dist/procedures/storage/index.d.ts +0 -17
  218. package/dist/procedures/storage/index.d.ts.map +0 -1
  219. package/dist/procedures/storage/index.js +0 -17
  220. package/dist/procedures/storage/index.js.map +0 -1
  221. package/dist/procedures/storage/procedures.d.ts +0 -39
  222. package/dist/procedures/storage/procedures.d.ts.map +0 -1
  223. package/dist/procedures/storage/procedures.js +0 -261
  224. package/dist/procedures/storage/procedures.js.map +0 -1
  225. package/dist/procedures/storage/serialization.d.ts +0 -123
  226. package/dist/procedures/storage/serialization.d.ts.map +0 -1
  227. package/dist/procedures/storage/serialization.js +0 -216
  228. package/dist/procedures/storage/serialization.js.map +0 -1
  229. package/dist/procedures/storage/synced-registry.d.ts +0 -246
  230. package/dist/procedures/storage/synced-registry.d.ts.map +0 -1
  231. package/dist/procedures/storage/synced-registry.js +0 -575
  232. package/dist/procedures/storage/synced-registry.js.map +0 -1
  233. package/dist/procedures/storage/types.d.ts +0 -130
  234. package/dist/procedures/storage/types.d.ts.map +0 -1
  235. package/dist/procedures/storage/types.js +0 -8
  236. package/dist/procedures/storage/types.js.map +0 -1
@@ -1,245 +0,0 @@
1
- /**
2
- * Batching Middleware
3
- *
4
- * Combines multiple requests into a single batch for efficiency.
5
- * Reduces network overhead and improves throughput.
6
- *
7
- * Works with both client and server!
8
- */
9
- /**
10
- * Batch queue for collecting requests.
11
- */
12
- class BatchQueue {
13
- options;
14
- processBatch;
15
- requests = new Map();
16
- timers = new Map();
17
- stats = {
18
- totalRequests: 0,
19
- totalBatches: 0,
20
- };
21
- constructor(options, processBatch) {
22
- this.options = options;
23
- this.processBatch = processBatch;
24
- }
25
- /**
26
- * Add request to batch queue.
27
- */
28
- add(key, request) {
29
- this.stats.totalRequests++;
30
- // Get or create batch for this key
31
- let batch = this.requests.get(key);
32
- if (!batch) {
33
- batch = [];
34
- this.requests.set(key, batch);
35
- }
36
- batch.push(request);
37
- // Check if batch is full
38
- if (batch.length >= this.options.maxBatchSize) {
39
- this.flush(key);
40
- }
41
- else if (batch.length === 1) {
42
- // First request in batch - start timer
43
- this.startTimer(key);
44
- }
45
- }
46
- /**
47
- * Start timer for batch.
48
- */
49
- startTimer(key) {
50
- const timer = setTimeout(() => {
51
- this.flush(key);
52
- }, this.options.maxWaitTime);
53
- this.timers.set(key, timer);
54
- }
55
- /**
56
- * Flush batch (send it).
57
- */
58
- flush(key) {
59
- const batch = this.requests.get(key);
60
- if (!batch || batch.length === 0) {
61
- return;
62
- }
63
- // Clear timer
64
- const timer = this.timers.get(key);
65
- if (timer) {
66
- clearTimeout(timer);
67
- this.timers.delete(key);
68
- }
69
- // Remove from queue
70
- this.requests.delete(key);
71
- // Update stats
72
- this.stats.totalBatches++;
73
- // Notify callback
74
- if (this.options.onBatchSent) {
75
- this.options.onBatchSent(batch.length, key);
76
- }
77
- // Process batch
78
- this.processBatch(key, batch);
79
- }
80
- /**
81
- * Get statistics.
82
- */
83
- getStats() {
84
- let pendingRequests = 0;
85
- for (const batch of this.requests.values()) {
86
- pendingRequests += batch.length;
87
- }
88
- const averageBatchSize = this.stats.totalBatches > 0
89
- ? this.stats.totalRequests / this.stats.totalBatches
90
- : 0;
91
- return {
92
- totalRequests: this.stats.totalRequests,
93
- totalBatches: this.stats.totalBatches,
94
- averageBatchSize,
95
- pendingRequests,
96
- };
97
- }
98
- }
99
- /**
100
- * Create batching middleware.
101
- *
102
- * Automatically combines multiple requests into batches for efficiency.
103
- *
104
- * @param options - Batching configuration
105
- * @returns Middleware function
106
- *
107
- * @example
108
- * ```typescript
109
- * client.use(createBatchingMiddleware({
110
- * maxBatchSize: 10, // Combine up to 10 requests
111
- * maxWaitTime: 10, // Wait max 10ms before sending
112
- * sameServiceOnly: true // Only batch requests to same service
113
- * }));
114
- * ```
115
- *
116
- * @example
117
- * ```typescript
118
- * // Custom batching by operation
119
- * client.use(createBatchingMiddleware({
120
- * getBatchKey: (msg) => `${msg.method.service}:${msg.method.operation}`
121
- * }));
122
- * ```
123
- */
124
- export function createBatchingMiddleware(options = {}) {
125
- const sameServiceOnly = options.sameServiceOnly ?? true;
126
- const opts = {
127
- maxBatchSize: options.maxBatchSize ?? 10,
128
- maxWaitTime: options.maxWaitTime ?? 10,
129
- sameServiceOnly,
130
- getBatchKey: options.getBatchKey ??
131
- ((msg) => sameServiceOnly
132
- ? msg.method.service
133
- : "__all__"),
134
- ...(options.onBatchSent !== undefined && { onBatchSent: options.onBatchSent }),
135
- };
136
- /**
137
- * Process a batch of requests.
138
- */
139
- async function processBatch(_key, requests) {
140
- // Note: This is a simplified implementation.
141
- // In practice, you'd need transport-level support for batching.
142
- // The transport would need to:
143
- // 1. Accept multiple messages
144
- // 2. Send them in a single network request
145
- // 3. Return multiple responses
146
- // 4. Match responses to requests by ID
147
- // For now, we execute requests individually
148
- // Real batching requires transport cooperation
149
- for (const request of requests) {
150
- try {
151
- const response = request.next(request.context);
152
- request.resolve(response);
153
- }
154
- catch (error) {
155
- request.reject(error);
156
- }
157
- }
158
- }
159
- // Create shared batch queue
160
- const queue = new BatchQueue(opts, processBatch);
161
- return (next) => {
162
- return async function* (context) {
163
- // Get batch key for this request
164
- const key = opts.getBatchKey(context.message);
165
- // Create promise for batched response
166
- const responsePromise = new Promise((resolve, reject) => {
167
- queue.add(key, {
168
- context,
169
- next: next,
170
- resolve: resolve,
171
- reject,
172
- });
173
- });
174
- // Wait for batch to complete and yield response
175
- const response = await responsePromise;
176
- yield* response;
177
- };
178
- };
179
- }
180
- /**
181
- * Get batching statistics.
182
- *
183
- * Note: This is a placeholder - proper implementation would
184
- * require exposing the queue through the middleware instance.
185
- */
186
- export function getBatchingStats(_middleware) {
187
- return null;
188
- }
189
- /**
190
- * Create adaptive batching middleware.
191
- *
192
- * Automatically adjusts batch size based on request patterns.
193
- *
194
- * @example
195
- * ```typescript
196
- * client.use(createAdaptiveBatchingMiddleware({
197
- * minBatchSize: 2,
198
- * maxBatchSize: 50,
199
- * targetLatency: 20 // Target 20ms latency
200
- * }));
201
- * ```
202
- */
203
- export function createAdaptiveBatchingMiddleware(options = {}) {
204
- const { minBatchSize = 2, maxBatchSize = 50, targetLatency = 20, } = options;
205
- let currentBatchSize = minBatchSize;
206
- let recentLatencies = [];
207
- /**
208
- * Adjust batch size based on latency.
209
- */
210
- function adjustBatchSize() {
211
- if (recentLatencies.length < 5) {
212
- return;
213
- }
214
- const avgLatency = recentLatencies.reduce((sum, l) => sum + l, 0) / recentLatencies.length;
215
- if (avgLatency > targetLatency && currentBatchSize > minBatchSize) {
216
- // Too slow - reduce batch size
217
- currentBatchSize = Math.max(minBatchSize, currentBatchSize - 1);
218
- }
219
- else if (avgLatency < targetLatency * 0.5 && currentBatchSize < maxBatchSize) {
220
- // Too fast - increase batch size
221
- currentBatchSize = Math.min(maxBatchSize, currentBatchSize + 1);
222
- }
223
- // Keep only recent latencies
224
- recentLatencies = recentLatencies.slice(-10);
225
- }
226
- return (next) => {
227
- const batchingMiddleware = createBatchingMiddleware({
228
- maxBatchSize: currentBatchSize,
229
- maxWaitTime: targetLatency,
230
- });
231
- return async function* (context) {
232
- const start = Date.now();
233
- try {
234
- const batchedNext = batchingMiddleware(next);
235
- yield* batchedNext(context);
236
- }
237
- finally {
238
- const latency = Date.now() - start;
239
- recentLatencies.push(latency);
240
- adjustBatchSize();
241
- }
242
- };
243
- };
244
- }
245
- //# sourceMappingURL=batching.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batching.js","sourceRoot":"","sources":["../../../src/client/middleware/batching.ts"],"names":[],"mappings":"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"}
@@ -1,144 +0,0 @@
1
- /**
2
- * AsyncQueue - An async iterable queue with backpressure support.
3
- *
4
- * Designed for producer-consumer patterns where producers can wait when
5
- * the queue is full and consumers can wait when the queue is empty.
6
- * Implements AsyncIterable for use with for-await-of loops.
7
- *
8
- * @example
9
- * const queue = asyncQueue<number>({ capacity: 10 })
10
- *
11
- * // Producer
12
- * await queue.put(42) // Waits if queue is full
13
- *
14
- * // Consumer
15
- * const value = await queue.take() // Waits if queue is empty
16
- *
17
- * // Async iteration
18
- * for await (const value of queue) {
19
- * console.log(value)
20
- * }
21
- */
22
- import type { AsyncQueue as IAsyncQueue } from "../interfaces/queue.js";
23
- /**
24
- * Options for creating an AsyncQueue.
25
- */
26
- export interface AsyncQueueOptions {
27
- /**
28
- * Maximum capacity. Infinity for unbounded queue.
29
- * @default Infinity
30
- */
31
- capacity?: number;
32
- /**
33
- * Timeout for put/take operations in milliseconds.
34
- * @default undefined (no timeout)
35
- */
36
- timeout?: number;
37
- }
38
- /**
39
- * AsyncQueue<T> - Thread-safe async queue with backpressure.
40
- *
41
- * Features:
42
- * - Blocking put() when full (backpressure)
43
- * - Blocking take() when empty
44
- * - AsyncIterable support
45
- * - Graceful closing
46
- * - Timeouts
47
- *
48
- * Perfect for:
49
- * - Producer-consumer patterns
50
- * - Rate limiting
51
- * - Task queues
52
- * - Stream processing
53
- */
54
- export declare class AsyncQueue<T> implements IAsyncQueue<T> {
55
- private buffer;
56
- private putters;
57
- private takers;
58
- private _isClosed;
59
- private readonly capacity;
60
- private readonly defaultTimeout?;
61
- constructor(options?: AsyncQueueOptions);
62
- get size(): number;
63
- get isEmpty(): boolean;
64
- get isFull(): boolean;
65
- get isClosed(): boolean;
66
- get remainingCapacity(): number;
67
- /**
68
- * Adds an element to the queue.
69
- * If the queue is full, waits until space is available.
70
- *
71
- * @throws Error if queue is closed
72
- * @throws Error if timeout expires
73
- */
74
- put(element: T, timeout?: number): Promise<void>;
75
- /**
76
- * Removes and returns an element from the queue.
77
- * If the queue is empty, waits until an element is available.
78
- *
79
- * @throws Error if queue is closed and empty
80
- * @throws Error if timeout expires
81
- */
82
- take(timeout?: number): Promise<T>;
83
- /**
84
- * Attempts to add an element without waiting.
85
- * Returns false if queue is full.
86
- */
87
- tryPut(element: T): boolean;
88
- /**
89
- * Attempts to remove an element without waiting.
90
- * Returns undefined if queue is empty.
91
- */
92
- tryTake(): T | undefined;
93
- /**
94
- * Returns the next element without removing it.
95
- * Waits if queue is empty.
96
- */
97
- peek(): Promise<T>;
98
- /**
99
- * Returns the next element without waiting.
100
- * Returns undefined if queue is empty.
101
- */
102
- tryPeek(): T | undefined;
103
- /**
104
- * Closes the queue. No more elements can be added.
105
- * Existing elements can still be consumed.
106
- */
107
- close(): void;
108
- /**
109
- * Drains all elements into an array.
110
- * Returns immediately with current elements.
111
- */
112
- drain(): T[];
113
- /**
114
- * Async iterator that yields elements as they become available.
115
- * Stops when queue is closed and empty.
116
- */
117
- [Symbol.asyncIterator](): AsyncIterator<T>;
118
- private fulfillPutter;
119
- private clearTimeout;
120
- /**
121
- * Returns statistics about the queue.
122
- */
123
- getStats(): {
124
- size: number;
125
- capacity: number;
126
- isEmpty: boolean;
127
- isFull: boolean;
128
- isClosed: boolean;
129
- waitingPutters: number;
130
- waitingTakers: number;
131
- remainingCapacity: number;
132
- };
133
- toString(): string;
134
- }
135
- /**
136
- * Factory function to create an AsyncQueue.
137
- *
138
- * @example
139
- * const queue = asyncQueue<number>({ capacity: 100 })
140
- * await queue.put(42)
141
- * const value = await queue.take()
142
- */
143
- export declare function asyncQueue<T>(options?: AsyncQueueOptions): AsyncQueue<T>;
144
- //# sourceMappingURL=async-queue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"async-queue.d.ts","sourceRoot":"","sources":["../../../src/collections/async/async-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAWD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,UAAU,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAS;gBAE7B,OAAO,GAAE,iBAAsB;IAW3C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAMD;;;;;;OAMG;IACG,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDtD;;;;;;OAMG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAqDxC;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO;IAiB3B;;;OAGG;IACH,OAAO,IAAI,CAAC,GAAG,SAAS;IAcxB;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;IAexB;;;OAGG;IACH,OAAO,IAAI,CAAC,GAAG,SAAS;IAQxB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAoBb;;;OAGG;IACH,KAAK,IAAI,CAAC,EAAE;IAgBZ;;;OAGG;IACI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;IAsBjD,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,QAAQ,IAAK;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,OAAO,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IAaD,QAAQ,IAAI,MAAM;CAGnB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,UAAU,CAAC,CAAC,CAAC,CAExE"}