@agentica/core 0.19.0 → 0.19.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.
@@ -0,0 +1,280 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const AsyncQueue_1 = require("./AsyncQueue");
13
+ describe("the AsyncQueue", () => {
14
+ describe("basic functionality", () => {
15
+ it("enqueue and dequeue test", () => __awaiter(void 0, void 0, void 0, function* () {
16
+ const queue = new AsyncQueue_1.AsyncQueue();
17
+ // Enqueue items
18
+ queue.enqueue(1);
19
+ queue.enqueue(2);
20
+ queue.enqueue(3);
21
+ // Dequeue items
22
+ const result1 = yield queue.dequeue();
23
+ const result2 = yield queue.dequeue();
24
+ const result3 = yield queue.dequeue();
25
+ expect(result1.value).toBe(1);
26
+ expect(result1.done).toBe(false);
27
+ expect(result2.value).toBe(2);
28
+ expect(result2.done).toBe(false);
29
+ expect(result3.value).toBe(3);
30
+ expect(result3.done).toBe(false);
31
+ }));
32
+ it("isEmpty test", () => __awaiter(void 0, void 0, void 0, function* () {
33
+ const queue = new AsyncQueue_1.AsyncQueue();
34
+ expect(queue.isEmpty()).toBe(true);
35
+ queue.enqueue(1);
36
+ expect(queue.isEmpty()).toBe(false);
37
+ yield queue.dequeue();
38
+ expect(queue.isEmpty()).toBe(true);
39
+ }));
40
+ it("isClosed test", () => {
41
+ const queue = new AsyncQueue_1.AsyncQueue();
42
+ expect(queue.isClosed()).toBe(false);
43
+ queue.close();
44
+ expect(queue.isClosed()).toBe(true);
45
+ });
46
+ it("done test", () => __awaiter(void 0, void 0, void 0, function* () {
47
+ const queue = new AsyncQueue_1.AsyncQueue();
48
+ expect(queue.done()).toBe(false);
49
+ queue.enqueue(1);
50
+ expect(queue.done()).toBe(false);
51
+ yield queue.dequeue();
52
+ expect(queue.done()).toBe(false);
53
+ queue.close();
54
+ expect(queue.done()).toBe(true);
55
+ }));
56
+ });
57
+ describe("close functionality", () => {
58
+ it("close test with empty queue", () => __awaiter(void 0, void 0, void 0, function* () {
59
+ const queue = new AsyncQueue_1.AsyncQueue();
60
+ queue.close();
61
+ const result = yield queue.dequeue();
62
+ expect(result.done).toBe(true);
63
+ expect(result.value).toBeUndefined();
64
+ }));
65
+ it("close test with non-empty queue", () => __awaiter(void 0, void 0, void 0, function* () {
66
+ const queue = new AsyncQueue_1.AsyncQueue();
67
+ queue.enqueue(1);
68
+ queue.enqueue(2);
69
+ queue.close();
70
+ const result1 = yield queue.dequeue();
71
+ const result2 = yield queue.dequeue();
72
+ const result3 = yield queue.dequeue();
73
+ expect(result1.value).toBe(1);
74
+ expect(result1.done).toBe(false);
75
+ expect(result2.value).toBe(2);
76
+ expect(result2.done).toBe(false);
77
+ expect(result3.done).toBe(true);
78
+ expect(result3.value).toBeUndefined();
79
+ }));
80
+ it("close test with waiting dequeue", () => __awaiter(void 0, void 0, void 0, function* () {
81
+ const queue = new AsyncQueue_1.AsyncQueue();
82
+ // Start dequeue before enqueue
83
+ const dequeuePromise = queue.dequeue();
84
+ // Close the queue
85
+ queue.close();
86
+ const result = yield dequeuePromise;
87
+ expect(result.done).toBe(true);
88
+ expect(result.value).toBeUndefined();
89
+ }));
90
+ });
91
+ describe("waitUntilEmpty functionality", () => {
92
+ it("waitUntilEmpty test with empty queue", () => __awaiter(void 0, void 0, void 0, function* () {
93
+ const queue = new AsyncQueue_1.AsyncQueue();
94
+ // Should resolve immediately since queue is empty
95
+ yield queue.waitUntilEmpty();
96
+ queue.enqueue(1);
97
+ const result = yield queue.dequeue();
98
+ expect(result.value).toBe(1);
99
+ expect(result.done).toBe(false);
100
+ }));
101
+ it("waitUntilEmpty test with non-empty queue", () => __awaiter(void 0, void 0, void 0, function* () {
102
+ const queue = new AsyncQueue_1.AsyncQueue();
103
+ queue.enqueue(1);
104
+ queue.enqueue(2);
105
+ // waitUntilEmpty should not resolve since queue is not empty
106
+ const waitPromise = queue.waitUntilEmpty();
107
+ // Dequeue first value
108
+ const result1 = yield queue.dequeue();
109
+ expect(result1.value).toBe(1);
110
+ // Dequeue second value
111
+ const result2 = yield queue.dequeue();
112
+ expect(result2.value).toBe(2);
113
+ // Now queue is empty, waitUntilEmpty should resolve\
114
+ yield waitPromise;
115
+ }));
116
+ });
117
+ describe("waitClosed functionality", () => {
118
+ it("waitClosed test with unclosed queue", () => __awaiter(void 0, void 0, void 0, function* () {
119
+ const queue = new AsyncQueue_1.AsyncQueue();
120
+ // waitClosed should not resolve since queue is not closed
121
+ const waitPromise = queue.waitClosed();
122
+ queue.enqueue(1);
123
+ const result = yield queue.dequeue();
124
+ expect(result.value).toBe(1);
125
+ // Close the queue
126
+ queue.close();
127
+ // Now queue is closed, waitClosed should resolve
128
+ yield waitPromise;
129
+ }));
130
+ it("waitClosed test with already closed queue", () => __awaiter(void 0, void 0, void 0, function* () {
131
+ const queue = new AsyncQueue_1.AsyncQueue();
132
+ queue.close();
133
+ // waitClosed should resolve immediately since queue is already closed
134
+ yield queue.waitClosed();
135
+ }));
136
+ it("multiple waitClosed calls test", () => __awaiter(void 0, void 0, void 0, function* () {
137
+ const queue = new AsyncQueue_1.AsyncQueue();
138
+ // Create multiple waitClosed promises
139
+ const waitPromises = [queue.waitClosed(), queue.waitClosed(), queue.waitClosed()];
140
+ // Close the queue
141
+ queue.close();
142
+ // All promises should resolve
143
+ yield Promise.all(waitPromises);
144
+ }));
145
+ it("waitClosed test with delayed close", () => __awaiter(void 0, void 0, void 0, function* () {
146
+ const queue = new AsyncQueue_1.AsyncQueue();
147
+ // Start waiting for close
148
+ const closePromise = queue.waitClosed();
149
+ // Close after delay
150
+ setTimeout(() => {
151
+ queue.close();
152
+ }, 10);
153
+ yield closePromise; // Should resolve when queue is closed
154
+ }));
155
+ });
156
+ describe("dequeue behavior", () => {
157
+ it("dequeue before enqueue test", () => __awaiter(void 0, void 0, void 0, function* () {
158
+ const queue = new AsyncQueue_1.AsyncQueue();
159
+ // Start dequeue before enqueue
160
+ const dequeuePromise = queue.dequeue();
161
+ // Enqueue after a small delay
162
+ setTimeout(() => {
163
+ queue.enqueue(42);
164
+ }, 10);
165
+ const result = yield dequeuePromise;
166
+ expect(result.value).toBe(42);
167
+ expect(result.done).toBe(false);
168
+ }));
169
+ it("multiple dequeue calls test", () => __awaiter(void 0, void 0, void 0, function* () {
170
+ var _a, _b, _c, _d, _e, _f;
171
+ const queue = new AsyncQueue_1.AsyncQueue();
172
+ // Start multiple dequeue calls
173
+ const dequeuePromises = [
174
+ queue.dequeue(),
175
+ queue.dequeue(),
176
+ queue.dequeue(),
177
+ ];
178
+ // Enqueue values
179
+ queue.enqueue(1);
180
+ queue.enqueue(2);
181
+ queue.enqueue(3);
182
+ const results = yield Promise.all(dequeuePromises);
183
+ expect((_a = results[0]) === null || _a === void 0 ? void 0 : _a.value).toBe(1);
184
+ expect((_b = results[0]) === null || _b === void 0 ? void 0 : _b.done).toBe(false);
185
+ expect((_c = results[1]) === null || _c === void 0 ? void 0 : _c.value).toBe(2);
186
+ expect((_d = results[1]) === null || _d === void 0 ? void 0 : _d.done).toBe(false);
187
+ expect((_e = results[2]) === null || _e === void 0 ? void 0 : _e.value).toBe(3);
188
+ expect((_f = results[2]) === null || _f === void 0 ? void 0 : _f.done).toBe(false);
189
+ }));
190
+ it("dequeue after close test", () => __awaiter(void 0, void 0, void 0, function* () {
191
+ const queue = new AsyncQueue_1.AsyncQueue();
192
+ queue.enqueue(1);
193
+ queue.close();
194
+ const result1 = yield queue.dequeue();
195
+ expect(result1.value).toBe(1);
196
+ expect(result1.done).toBe(false);
197
+ const result2 = yield queue.dequeue();
198
+ expect(result2.done).toBe(true);
199
+ expect(result2.value).toBeUndefined();
200
+ }));
201
+ it("duplicate dequeue test", () => __awaiter(void 0, void 0, void 0, function* () {
202
+ const queue = new AsyncQueue_1.AsyncQueue();
203
+ // Start dequeue operation that will wait for an item
204
+ const pendingDequeue = queue.dequeue();
205
+ // Add item after a small delay
206
+ setTimeout(() => {
207
+ queue.enqueue("delayed item");
208
+ }, 10);
209
+ const delayedResult = yield pendingDequeue;
210
+ expect(delayedResult.value).toBe("delayed item");
211
+ expect(delayedResult.done).toBe(false);
212
+ // Check for duplicate dequeue
213
+ const duplicatedResult = yield Promise.race([
214
+ queue.dequeue(),
215
+ new Promise(resolve => setTimeout(resolve, 0, false)),
216
+ ]);
217
+ // If duplicatedResult is false, it means the race timed out (expected)
218
+ // If it's an IteratorResult, it should not have the same value
219
+ if (duplicatedResult !== false) {
220
+ expect(duplicatedResult.value).not.toBe("delayed item");
221
+ }
222
+ }));
223
+ });
224
+ describe("edge cases and error handling", () => {
225
+ it("enqueue after close test", () => __awaiter(void 0, void 0, void 0, function* () {
226
+ const queue = new AsyncQueue_1.AsyncQueue();
227
+ queue.close();
228
+ queue.enqueue(1); // Should still work, but dequeue will return done: true
229
+ const result = yield queue.dequeue();
230
+ expect(result.done).toBe(true);
231
+ expect(result.value).toBeUndefined();
232
+ }));
233
+ it("multiple close calls test", () => __awaiter(void 0, void 0, void 0, function* () {
234
+ const queue = new AsyncQueue_1.AsyncQueue();
235
+ queue.close();
236
+ queue.close(); // Second close should not cause issues
237
+ const result = yield queue.dequeue();
238
+ expect(result.done).toBe(true);
239
+ expect(result.value).toBeUndefined();
240
+ }));
241
+ it("waitUntilEmpty with multiple calls test", () => __awaiter(void 0, void 0, void 0, function* () {
242
+ const queue = new AsyncQueue_1.AsyncQueue();
243
+ queue.enqueue(1);
244
+ // Create multiple waitUntilEmpty promises
245
+ const waitPromises = [queue.waitUntilEmpty(), queue.waitUntilEmpty()];
246
+ // Dequeue the value
247
+ yield queue.dequeue();
248
+ // All promises should resolve
249
+ yield Promise.all(waitPromises);
250
+ }));
251
+ it("concurrent enqueue and dequeue test", () => __awaiter(void 0, void 0, void 0, function* () {
252
+ const queue = new AsyncQueue_1.AsyncQueue();
253
+ const results = [];
254
+ // Start multiple dequeue operations
255
+ const dequeuePromises = Array.from({ length: 5 }).fill(0).map(() => __awaiter(void 0, void 0, void 0, function* () { return queue.dequeue(); }));
256
+ // Enqueue values with small delays
257
+ for (let i = 0; i < 5; i++) {
258
+ setTimeout(() => {
259
+ queue.enqueue(i);
260
+ }, i * 10);
261
+ }
262
+ // Wait for all dequeue operations to complete
263
+ const dequeuedResults = yield Promise.all(dequeuePromises);
264
+ // Collect values
265
+ dequeuedResults.forEach((result) => {
266
+ if (result.value !== undefined) {
267
+ results.push(result.value);
268
+ }
269
+ });
270
+ // Check that all values were dequeued
271
+ expect(results.length).toBe(5);
272
+ expect(results).toContain(0);
273
+ expect(results).toContain(1);
274
+ expect(results).toContain(2);
275
+ expect(results).toContain(3);
276
+ expect(results).toContain(4);
277
+ }));
278
+ });
279
+ });
280
+ //# sourceMappingURL=AsyncQueue.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AsyncQueue.spec.js","sourceRoot":"","sources":["../../src/utils/AsyncQueue.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const MPSC_1 = require("./MPSC");
13
+ describe("the MPSC", () => {
14
+ describe("basic functionality", () => {
15
+ it("basic MPSC functionality test", () => __awaiter(void 0, void 0, void 0, function* () {
16
+ const mpsc = new MPSC_1.MPSC();
17
+ const reader = mpsc.consumer.getReader();
18
+ // Produce values
19
+ mpsc.produce(10);
20
+ mpsc.produce(20);
21
+ mpsc.produce(30);
22
+ const read1 = yield reader.read();
23
+ const read2 = yield reader.read();
24
+ const read3 = yield reader.read();
25
+ expect(read1.value).toBe(10);
26
+ expect(read1.done).toBe(false);
27
+ expect(read2.value).toBe(20);
28
+ expect(read2.done).toBe(false);
29
+ expect(read3.value).toBe(30);
30
+ expect(read3.done).toBe(false);
31
+ }));
32
+ it("close functionality test", () => __awaiter(void 0, void 0, void 0, function* () {
33
+ const mpsc = new MPSC_1.MPSC();
34
+ const reader = mpsc.consumer.getReader();
35
+ mpsc.produce(10);
36
+ mpsc.close();
37
+ yield reader.read();
38
+ expect(mpsc.done()).toBe(true);
39
+ }));
40
+ it("multiple producers scenario test", () => __awaiter(void 0, void 0, void 0, function* () {
41
+ const multiMpsc = new MPSC_1.MPSC();
42
+ const multiReader = multiMpsc.consumer.getReader();
43
+ // Simulate multiple producers
44
+ for (let i = 1; i <= 5; i++) {
45
+ multiMpsc.produce(`producer-${i}`);
46
+ }
47
+ // Read all values
48
+ const multiResults = [];
49
+ for (let i = 0; i < 5; i++) {
50
+ const { value } = yield multiReader.read();
51
+ if (value != null) {
52
+ multiResults.push(value);
53
+ }
54
+ }
55
+ expect(multiResults.length).toBe(5);
56
+ expect(multiResults).toContain("producer-1");
57
+ expect(multiResults).toContain("producer-2");
58
+ expect(multiResults).toContain("producer-3");
59
+ expect(multiResults).toContain("producer-4");
60
+ expect(multiResults).toContain("producer-5");
61
+ multiMpsc.close();
62
+ const multiAfterClose = yield multiReader.read();
63
+ expect(multiAfterClose.done).toBe(true);
64
+ }));
65
+ it("reading before producing test", () => __awaiter(void 0, void 0, void 0, function* () {
66
+ const delayMpsc = new MPSC_1.MPSC();
67
+ const delayReader = delayMpsc.consumer.getReader();
68
+ // Start reading before producing
69
+ const readPromise = delayReader.read();
70
+ // Produce after a small delay
71
+ setTimeout(() => {
72
+ delayMpsc.produce(42);
73
+ }, 10);
74
+ const delayResult = yield readPromise;
75
+ expect(delayResult.value).toBe(42);
76
+ expect(delayResult.done).toBe(false);
77
+ delayMpsc.close();
78
+ }));
79
+ it("producer-first, then consumer test", () => __awaiter(void 0, void 0, void 0, function* () {
80
+ const laterMpsc = new MPSC_1.MPSC();
81
+ // Produce values first
82
+ laterMpsc.produce("first");
83
+ laterMpsc.produce("second");
84
+ laterMpsc.produce("third");
85
+ // Then get reader and read
86
+ const laterReader = laterMpsc.consumer.getReader();
87
+ const laterResult1 = yield laterReader.read();
88
+ const laterResult2 = yield laterReader.read();
89
+ const laterResult3 = yield laterReader.read();
90
+ expect(laterResult1.value).toBe("first");
91
+ expect(laterResult1.done).toBe(false);
92
+ expect(laterResult2.value).toBe("second");
93
+ expect(laterResult2.done).toBe(false);
94
+ expect(laterResult3.value).toBe("third");
95
+ expect(laterResult3.done).toBe(false);
96
+ laterMpsc.close();
97
+ }));
98
+ });
99
+ describe("waitClosed functionality", () => {
100
+ it("basic waitClosed functionality test", () => __awaiter(void 0, void 0, void 0, function* () {
101
+ const mpsc = new MPSC_1.MPSC();
102
+ const reader = mpsc.consumer.getReader();
103
+ mpsc.produce("message");
104
+ const readResult = yield reader.read();
105
+ expect(readResult.value).toBe("message");
106
+ expect(readResult.done).toBe(false);
107
+ // Call waitClose then execute close
108
+ const closePromise = mpsc.waitClosed();
109
+ mpsc.close();
110
+ yield closePromise; // Should resolve when closed
111
+ const afterClose = yield reader.read();
112
+ expect(afterClose.done).toBe(true);
113
+ }));
114
+ it("call waitClose on already closed queue test", () => __awaiter(void 0, void 0, void 0, function* () {
115
+ const mpsc2 = new MPSC_1.MPSC();
116
+ mpsc2.close(); // Close first
117
+ const alreadyClosedPromise = mpsc2.waitClosed();
118
+ // Should resolve immediately since already closed
119
+ yield alreadyClosedPromise;
120
+ }));
121
+ it("multiple waitClose calls test", () => __awaiter(void 0, void 0, void 0, function* () {
122
+ const mpsc3 = new MPSC_1.MPSC();
123
+ // Create multiple waitClose promises
124
+ const waitPromises = [mpsc3.waitClosed(), mpsc3.waitClosed(), mpsc3.waitClosed()];
125
+ // All promises should resolve
126
+ mpsc3.close();
127
+ yield Promise.all(waitPromises);
128
+ }));
129
+ it("verify waitClose doesn't block other operations", () => __awaiter(void 0, void 0, void 0, function* () {
130
+ const mpsc4 = new MPSC_1.MPSC();
131
+ const reader4 = mpsc4.consumer.getReader();
132
+ // Call waitClose
133
+ const waitPromise4 = mpsc4.waitClosed();
134
+ // Check if value production and consumption still work
135
+ mpsc4.produce("first");
136
+ mpsc4.produce("second");
137
+ const read1 = yield reader4.read();
138
+ const read2 = yield reader4.read();
139
+ expect(read1.value).toBe("first");
140
+ expect(read1.done).toBe(false);
141
+ expect(read2.value).toBe("second");
142
+ expect(read2.done).toBe(false);
143
+ mpsc4.close();
144
+ yield waitPromise4;
145
+ const afterClose4 = yield reader4.read();
146
+ expect(afterClose4.done).toBe(true);
147
+ }));
148
+ it("waitClose resolution after async close test", () => __awaiter(void 0, void 0, void 0, function* () {
149
+ const mpsc5 = new MPSC_1.MPSC();
150
+ const reader5 = mpsc5.consumer.getReader();
151
+ mpsc5.produce(100);
152
+ // Call waitClose
153
+ const waitPromise5 = mpsc5.waitClosed();
154
+ // Perform async close
155
+ setTimeout(() => {
156
+ mpsc5.close();
157
+ }, 50);
158
+ // Wait for waitClose to resolve
159
+ yield waitPromise5;
160
+ yield reader5.read();
161
+ const afterClose5 = yield reader5.read();
162
+ expect(afterClose5.done).toBe(true);
163
+ }));
164
+ });
165
+ describe("waitUntilEmpty functionality", () => {
166
+ it("waitUntilEmpty test when queue is empty", () => __awaiter(void 0, void 0, void 0, function* () {
167
+ const mpsc = new MPSC_1.MPSC();
168
+ const reader = mpsc.consumer.getReader();
169
+ // Should resolve immediately since queue is empty
170
+ yield mpsc.waitUntilEmpty();
171
+ mpsc.produce(1);
172
+ const readResult = yield reader.read();
173
+ expect(readResult.value).toBe(1);
174
+ expect(readResult.done).toBe(false);
175
+ mpsc.close();
176
+ }));
177
+ it("waitUntilEmpty test when queue is not empty", () => __awaiter(void 0, void 0, void 0, function* () {
178
+ const mpsc = new MPSC_1.MPSC();
179
+ const reader = mpsc.consumer.getReader();
180
+ mpsc.produce(1);
181
+ mpsc.produce(2);
182
+ // waitUntilEmpty should not resolve since queue is not empty
183
+ const waitPromise = mpsc.waitUntilEmpty();
184
+ // Read first value
185
+ const read1 = yield reader.read();
186
+ expect(read1.value).toBe(1);
187
+ // Read second value
188
+ const read2 = yield reader.read();
189
+ expect(read2.value).toBe(2);
190
+ mpsc.close();
191
+ const read3 = yield reader.read();
192
+ expect(read3.done).toBe(true);
193
+ // Now queue is empty, waitUntilEmpty should resolve
194
+ yield waitPromise;
195
+ }));
196
+ it("waitUntilEmpty test on closed queue", () => __awaiter(void 0, void 0, void 0, function* () {
197
+ const mpsc = new MPSC_1.MPSC();
198
+ const reader = mpsc.consumer.getReader();
199
+ mpsc.produce(1);
200
+ mpsc.close();
201
+ // waitUntilEmpty should resolve since queue is closed
202
+ yield mpsc.waitUntilEmpty();
203
+ const readResult = yield reader.read();
204
+ expect(readResult.value).toBe(1);
205
+ expect(readResult.done).toBe(false);
206
+ const afterClose = yield reader.read();
207
+ expect(afterClose.done).toBe(true);
208
+ }));
209
+ });
210
+ describe("done functionality", () => {
211
+ it("done test on unclosed queue", () => __awaiter(void 0, void 0, void 0, function* () {
212
+ const mpsc = new MPSC_1.MPSC();
213
+ expect(mpsc.done()).toBe(false);
214
+ mpsc.produce(1);
215
+ expect(mpsc.done()).toBe(false);
216
+ mpsc.close();
217
+ yield mpsc.consumer.getReader().read();
218
+ expect(mpsc.done()).toBe(true);
219
+ }));
220
+ });
221
+ });
222
+ //# sourceMappingURL=MPSC.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MPSC.spec.js","sourceRoot":"","sources":["../../src/utils/MPSC.spec.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,iCAA8B;AAE9B,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,+BAA+B,EAAE,GAAS,EAAE;YAC7C,MAAM,IAAI,GAAG,IAAI,WAAI,EAAU,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAEzC,iBAAiB;YACjB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAEjB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAElC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAS,EAAE;YACxC,MAAM,IAAI,GAAG,IAAI,WAAI,EAAU,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAEzC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjB,IAAI,CAAC,KAAK,EAAE,CAAC;YAEb,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAEpB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAS,EAAE;YAChD,MAAM,SAAS,GAAG,IAAI,WAAI,EAAU,CAAC;YACrC,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAEnD,8BAA8B;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC;YAED,kBAAkB;YAClB,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;gBAC3C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;oBAClB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YAED,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC7C,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC7C,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC7C,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC7C,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAE7C,SAAS,CAAC,KAAK,EAAE,CAAC;YAElB,MAAM,eAAe,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;YACjD,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAS,EAAE;YAC7C,MAAM,SAAS,GAAG,IAAI,WAAI,EAAU,CAAC;YACrC,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAEnD,iCAAiC;YACjC,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;YAEvC,8BAA8B;YAC9B,UAAU,CAAC,GAAG,EAAE;gBACd,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC,EAAE,EAAE,CAAC,CAAC;YAEP,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC;YACtC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAErC,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAS,EAAE;YAClD,MAAM,SAAS,GAAG,IAAI,WAAI,EAAU,CAAC;YAErC,uBAAuB;YACvB,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC5B,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAE3B,2BAA2B;YAC3B,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YACnD,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;YAC9C,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;YAC9C,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;YAE9C,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEtC,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC,CAAA,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,qCAAqC,EAAE,GAAS,EAAE;YACnD,MAAM,IAAI,GAAG,IAAI,WAAI,EAAU,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAEzC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACxB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAEvC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpC,oCAAoC;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,YAAY,CAAC,CAAC,6BAA6B;YAEjD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAS,EAAE;YAC3D,MAAM,KAAK,GAAG,IAAI,WAAI,EAAU,CAAC;YAEjC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,cAAc;YAC7B,MAAM,oBAAoB,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;YAChD,kDAAkD;YAClD,MAAM,oBAAoB,CAAC;QAC7B,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAS,EAAE;YAC7C,MAAM,KAAK,GAAG,IAAI,WAAI,EAAU,CAAC;YAEjC,qCAAqC;YACrC,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YAElF,8BAA8B;YAC9B,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAClC,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAS,EAAE;YAC/D,MAAM,KAAK,GAAG,IAAI,WAAI,EAAU,CAAC;YACjC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAE3C,iBAAiB;YACjB,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;YAExC,uDAAuD;YACvD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACvB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAExB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YAEnC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE/B,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,MAAM,YAAY,CAAC;YAEnB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAS,EAAE;YAC3D,MAAM,KAAK,GAAG,IAAI,WAAI,EAAU,CAAC;YACjC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAE3C,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEnB,iBAAiB;YACjB,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;YAExC,sBAAsB;YACtB,UAAU,CAAC,GAAG,EAAE;gBACd,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC,EAAE,EAAE,CAAC,CAAC;YAEP,gCAAgC;YAChC,MAAM,YAAY,CAAC;YACnB,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YAErB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAA,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,EAAE,CAAC,yCAAyC,EAAE,GAAS,EAAE;YACvD,MAAM,IAAI,GAAG,IAAI,WAAI,EAAU,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAEzC,kDAAkD;YAClD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAE5B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAS,EAAE;YAC3D,MAAM,IAAI,GAAG,IAAI,WAAI,EAAU,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAEzC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAEhB,6DAA6D;YAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAE1C,mBAAmB;YACnB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE5B,oBAAoB;YACpB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;YAEb,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE9B,oDAAoD;YACpD,MAAM,WAAW,CAAC;QACpB,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAS,EAAE;YACnD,MAAM,IAAI,GAAG,IAAI,WAAI,EAAU,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAEzC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,KAAK,EAAE,CAAC;YAEb,sDAAsD;YACtD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAE5B,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAA,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,6BAA6B,EAAE,GAAS,EAAE;YAC3C,MAAM,IAAI,GAAG,IAAI,WAAI,EAAU,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEhC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEhC,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC,CAAA,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};