brass-runtime 1.13.8 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/agent/cli/main.cjs +44 -43
- package/dist/agent/cli/main.js +5 -4
- package/dist/agent/cli/main.mjs +5 -4
- package/dist/agent/index.cjs +4 -3
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.js +3 -2
- package/dist/agent/index.mjs +3 -2
- package/dist/{chunk-3R7ZYRK2.mjs → chunk-3QMOKAS5.js} +9 -7
- package/dist/{chunk-ATHSSDUF.js → chunk-4NHES7VK.mjs} +113 -31
- package/dist/chunk-AR22SXML.js +1043 -0
- package/dist/chunk-BDF4AMWX.mjs +3773 -0
- package/dist/chunk-BDYEENHT.js +224 -0
- package/dist/chunk-BMH5AV44.js +3773 -0
- package/dist/chunk-ELOOF35R.mjs +131 -0
- package/dist/chunk-JFPU5GQI.mjs +1043 -0
- package/dist/{chunk-INZBKOHY.js → chunk-K6M7MDZ4.mjs} +9 -7
- package/dist/chunk-MS34J5LY.cjs +224 -0
- package/dist/{chunk-XNOTJSMZ.mjs → chunk-PPUXIH5R.js} +113 -31
- package/dist/chunk-R3R2FVLG.cjs +131 -0
- package/dist/{chunk-ZTDK2DLG.cjs → chunk-STVLQ3XD.cjs} +169 -87
- package/dist/chunk-TGIFUAK4.cjs +3773 -0
- package/dist/chunk-TO7IKXYT.js +131 -0
- package/dist/chunk-UMAZLXAB.mjs +224 -0
- package/dist/{chunk-XDINDYNA.cjs → chunk-VEZNF5GZ.cjs} +136 -134
- package/dist/chunk-XPZNXSVN.cjs +1043 -0
- package/dist/core/index.cjs +216 -0
- package/dist/core/index.d.ts +673 -0
- package/dist/core/index.js +216 -0
- package/dist/core/index.mjs +216 -0
- package/dist/{effect-ISvXPLgc.d.ts → effect-CMOQKX8y.d.ts} +202 -31
- package/dist/http/index.cjs +3177 -187
- package/dist/http/index.d.ts +1692 -9
- package/dist/http/index.js +3164 -174
- package/dist/http/index.mjs +3164 -174
- package/dist/index.cjs +936 -219
- package/dist/index.d.ts +313 -36
- package/dist/index.js +830 -113
- package/dist/index.mjs +830 -113
- package/dist/{stream-BvukHxCv.d.ts → stream-FQm9h4Mg.d.ts} +12 -4
- package/dist/tracing-DNT9jEbr.d.ts +106 -0
- package/package.json +11 -3
- package/wasm/pkg/brass_runtime_wasm_engine.d.ts +95 -16
- package/wasm/pkg/brass_runtime_wasm_engine.js +715 -15
- package/wasm/pkg/brass_runtime_wasm_engine_bg.wasm +0 -0
- package/wasm/pkg/brass_runtime_wasm_engine_bg.wasm.d.ts +78 -7
- package/dist/chunk-2P4PD6D7.cjs +0 -2557
- package/dist/chunk-7F2R7A2V.mjs +0 -2557
- package/dist/chunk-L6KKKM66.js +0 -2557
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2;
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2;
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
@@ -18,7 +18,78 @@
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
var _chunkXPZNXSVNcjs = require('./chunk-XPZNXSVN.cjs');
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
var _chunkSTVLQ3XDcjs = require('./chunk-STVLQ3XD.cjs');
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
var _chunkMS34J5LYcjs = require('./chunk-MS34J5LY.cjs');
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
var _chunkR3R2FVLGcjs = require('./chunk-R3R2FVLG.cjs');
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
22
93
|
|
|
23
94
|
|
|
24
95
|
|
|
@@ -86,93 +157,24 @@ var _chunkZTDK2DLGcjs = require('./chunk-ZTDK2DLG.cjs');
|
|
|
86
157
|
|
|
87
158
|
|
|
88
159
|
|
|
89
|
-
var _chunk2P4PD6D7cjs = require('./chunk-2P4PD6D7.cjs');
|
|
90
160
|
|
|
91
|
-
// src/core/types/cancel.ts
|
|
92
|
-
function makeCancelToken() {
|
|
93
|
-
let cancelled = false;
|
|
94
|
-
const listeners = /* @__PURE__ */ new Set();
|
|
95
|
-
const cancel = () => {
|
|
96
|
-
if (cancelled) return;
|
|
97
|
-
cancelled = true;
|
|
98
|
-
listeners.forEach((f) => f());
|
|
99
|
-
listeners.clear();
|
|
100
|
-
};
|
|
101
|
-
return {
|
|
102
|
-
isCancelled: () => cancelled,
|
|
103
|
-
onCancel: (f) => {
|
|
104
|
-
if (cancelled) {
|
|
105
|
-
try {
|
|
106
|
-
f();
|
|
107
|
-
} catch (e2) {
|
|
108
|
-
}
|
|
109
|
-
return () => {
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
listeners.add(f);
|
|
113
|
-
return () => {
|
|
114
|
-
listeners.delete(f);
|
|
115
|
-
};
|
|
116
|
-
},
|
|
117
|
-
cancel
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
function linkAbortController(token, ac) {
|
|
121
|
-
return token.onCancel(() => ac.abort());
|
|
122
|
-
}
|
|
123
161
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
get length() {
|
|
130
|
-
return this.len;
|
|
131
|
-
}
|
|
132
|
-
isEmpty() {
|
|
133
|
-
return this.len === 0;
|
|
134
|
-
}
|
|
135
|
-
push(value) {
|
|
136
|
-
const node = { value, next: null, prev: this.tail, removed: false };
|
|
137
|
-
if (this.tail) this.tail.next = node;
|
|
138
|
-
else this.head = node;
|
|
139
|
-
this.tail = node;
|
|
140
|
-
this.len++;
|
|
141
|
-
return node;
|
|
142
|
-
}
|
|
143
|
-
shift() {
|
|
144
|
-
const h = this.head;
|
|
145
|
-
if (!h) return void 0;
|
|
146
|
-
this.unlink(h);
|
|
147
|
-
return h.value;
|
|
148
|
-
}
|
|
149
|
-
remove(node) {
|
|
150
|
-
if (node.removed) return;
|
|
151
|
-
this.unlink(node);
|
|
152
|
-
}
|
|
153
|
-
unlink(node) {
|
|
154
|
-
node.removed = true;
|
|
155
|
-
const { prev, next } = node;
|
|
156
|
-
if (prev) prev.next = next;
|
|
157
|
-
else this.head = next;
|
|
158
|
-
if (next) next.prev = prev;
|
|
159
|
-
else this.tail = prev;
|
|
160
|
-
node.next = null;
|
|
161
|
-
node.prev = null;
|
|
162
|
-
this.len--;
|
|
163
|
-
}
|
|
164
|
-
}, _class);
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
var _chunkTGIFUAK4cjs = require('./chunk-TGIFUAK4.cjs');
|
|
165
167
|
|
|
166
168
|
// src/core/stream/queue.ts
|
|
167
169
|
function bounded(capacity, strategy = "backpressure", options = {}) {
|
|
168
|
-
return
|
|
170
|
+
return _chunkTGIFUAK4cjs.asyncSync.call(void 0, () => makeQueue(capacity, strategy, options));
|
|
169
171
|
}
|
|
170
172
|
function makeQueue(capacity, strategy, options) {
|
|
171
|
-
const items =
|
|
173
|
+
const items = _chunkTGIFUAK4cjs.makeBoundedRingBuffer.call(void 0, capacity, capacity, options);
|
|
172
174
|
let closed = false;
|
|
173
175
|
const QueueClosedErr = { _tag: "QueueClosed" };
|
|
174
|
-
const offerWaiters = new LinkedQueue();
|
|
175
|
-
const takers = new LinkedQueue();
|
|
176
|
+
const offerWaiters = new (0, _chunkXPZNXSVNcjs.LinkedQueue)();
|
|
177
|
+
const takers = new (0, _chunkXPZNXSVNcjs.LinkedQueue)();
|
|
176
178
|
const shutdown = () => {
|
|
177
179
|
if (closed) return;
|
|
178
180
|
closed = true;
|
|
@@ -189,7 +191,7 @@ function makeQueue(capacity, strategy, options) {
|
|
|
189
191
|
return {
|
|
190
192
|
size: () => items.length,
|
|
191
193
|
shutdown,
|
|
192
|
-
offer: (a) =>
|
|
194
|
+
offer: (a) => _chunkTGIFUAK4cjs.asyncEffect.call(void 0, (_env, cb) => {
|
|
193
195
|
if (closed) {
|
|
194
196
|
cb({ _tag: "Success", value: false });
|
|
195
197
|
return;
|
|
@@ -224,7 +226,7 @@ function makeQueue(capacity, strategy, options) {
|
|
|
224
226
|
};
|
|
225
227
|
return canceler;
|
|
226
228
|
}),
|
|
227
|
-
take: () =>
|
|
229
|
+
take: () => _chunkTGIFUAK4cjs.asyncEffect.call(void 0, (_env, cb) => {
|
|
228
230
|
if (items.length > 0) {
|
|
229
231
|
const a = items.shift();
|
|
230
232
|
cb({ _tag: "Success", value: a });
|
|
@@ -250,6 +252,61 @@ function makeQueue(capacity, strategy, options) {
|
|
|
250
252
|
takers.remove(node);
|
|
251
253
|
};
|
|
252
254
|
return canceler;
|
|
255
|
+
}),
|
|
256
|
+
offerBatch: (values) => _chunkTGIFUAK4cjs.asyncSync.call(void 0, () => {
|
|
257
|
+
const results = [];
|
|
258
|
+
for (let i = 0; i < values.length; i++) {
|
|
259
|
+
if (closed) {
|
|
260
|
+
results.push(false);
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
const a = values[i];
|
|
264
|
+
if (takers.length > 0) {
|
|
265
|
+
const t = takers.shift();
|
|
266
|
+
t({ _tag: "Success", value: a });
|
|
267
|
+
results.push(true);
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
if (items.length < capacity) {
|
|
271
|
+
items.push(a);
|
|
272
|
+
results.push(true);
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
if (strategy === "dropping") {
|
|
276
|
+
results.push(false);
|
|
277
|
+
} else if (strategy === "sliding") {
|
|
278
|
+
items.shift();
|
|
279
|
+
items.push(a);
|
|
280
|
+
results.push(true);
|
|
281
|
+
} else {
|
|
282
|
+
results.push(false);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return results;
|
|
286
|
+
}),
|
|
287
|
+
takeBatch: (n) => _chunkTGIFUAK4cjs.asyncSync.call(void 0, () => {
|
|
288
|
+
const results = [];
|
|
289
|
+
const count = Math.min(n, items.length + offerWaiters.length);
|
|
290
|
+
for (let i = 0; i < count; i++) {
|
|
291
|
+
if (items.length > 0) {
|
|
292
|
+
results.push(items.shift());
|
|
293
|
+
if (offerWaiters.length > 0 && items.length < capacity) {
|
|
294
|
+
const w = offerWaiters.shift();
|
|
295
|
+
items.push(w.a);
|
|
296
|
+
w.cb(true);
|
|
297
|
+
}
|
|
298
|
+
} else if (offerWaiters.length > 0) {
|
|
299
|
+
const w = offerWaiters.shift();
|
|
300
|
+
w.cb(true);
|
|
301
|
+
results.push(w.a);
|
|
302
|
+
} else {
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
if (results.length === 0 && closed) {
|
|
307
|
+
throw QueueClosedErr;
|
|
308
|
+
}
|
|
309
|
+
return results;
|
|
253
310
|
})
|
|
254
311
|
};
|
|
255
312
|
}
|
|
@@ -261,34 +318,34 @@ function buffer(stream, capacity, strategy = "backpressure") {
|
|
|
261
318
|
let q = null;
|
|
262
319
|
let producer = null;
|
|
263
320
|
let upstream = stream;
|
|
264
|
-
const onUpstreamFailure = (opt) =>
|
|
321
|
+
const onUpstreamFailure = (opt) => _chunkTGIFUAK4cjs.asyncSucceed.call(void 0,
|
|
265
322
|
opt._tag === "None" ? SIGNAL_END : { _tag: "Fail", error: opt.value }
|
|
266
323
|
);
|
|
267
|
-
const onUpstreamSuccess = ([a, tail]) =>
|
|
324
|
+
const onUpstreamSuccess = ([a, tail]) => _chunkTGIFUAK4cjs.asyncSync.call(void 0, () => {
|
|
268
325
|
upstream = tail;
|
|
269
326
|
return { _tag: "Elem", value: a };
|
|
270
327
|
});
|
|
271
|
-
const nextSignal = () =>
|
|
272
|
-
|
|
328
|
+
const nextSignal = () => _chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
329
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, upstream),
|
|
273
330
|
onUpstreamFailure,
|
|
274
331
|
onUpstreamSuccess
|
|
275
332
|
);
|
|
276
|
-
const start = (env) =>
|
|
333
|
+
const start = (env) => _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0, bounded(capacity, strategy), (_q) => {
|
|
277
334
|
q = _q;
|
|
278
335
|
let lastSig;
|
|
279
336
|
const afterOffer = () => {
|
|
280
337
|
if (lastSig._tag !== "Elem") {
|
|
281
|
-
return
|
|
338
|
+
return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, void 0);
|
|
282
339
|
}
|
|
283
340
|
return loop();
|
|
284
341
|
};
|
|
285
342
|
const onSignal = (sig) => {
|
|
286
343
|
lastSig = sig;
|
|
287
|
-
return
|
|
344
|
+
return _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0, q.offer(sig), afterOffer);
|
|
288
345
|
};
|
|
289
|
-
const loop = () =>
|
|
290
|
-
producer =
|
|
291
|
-
return
|
|
346
|
+
const loop = () => _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0, nextSignal(), onSignal);
|
|
347
|
+
producer = _chunkTGIFUAK4cjs.fork.call(void 0, loop(), env);
|
|
348
|
+
return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, void 0);
|
|
292
349
|
});
|
|
293
350
|
const pullDown = {
|
|
294
351
|
_tag: "Async",
|
|
@@ -296,7 +353,7 @@ function buffer(stream, capacity, strategy = "backpressure") {
|
|
|
296
353
|
const go = () => {
|
|
297
354
|
if (!started) {
|
|
298
355
|
started = true;
|
|
299
|
-
|
|
356
|
+
_chunkTGIFUAK4cjs.unsafeGetCurrentRuntime.call(void 0, ).fork(start(env)).join(() => {
|
|
300
357
|
pullFromQueue(env, cb);
|
|
301
358
|
});
|
|
302
359
|
return;
|
|
@@ -308,25 +365,25 @@ function buffer(stream, capacity, strategy = "backpressure") {
|
|
|
308
365
|
};
|
|
309
366
|
function pullFromQueue(env, cb) {
|
|
310
367
|
const takeEff = q.take();
|
|
311
|
-
|
|
368
|
+
_chunkTGIFUAK4cjs.unsafeGetCurrentRuntime.call(void 0, ).fork(takeEff).join((ex) => {
|
|
312
369
|
if (ex._tag !== "Success") return;
|
|
313
370
|
const sig = ex.value;
|
|
314
371
|
switch (sig._tag) {
|
|
315
372
|
case "Elem":
|
|
316
|
-
cb({ _tag: "Success", value: [sig.value,
|
|
373
|
+
cb({ _tag: "Success", value: [sig.value, _chunkSTVLQ3XDcjs.fromPull.call(void 0, pullDown)] });
|
|
317
374
|
return;
|
|
318
375
|
case "End":
|
|
319
376
|
_optionalChain([producer, 'optionalAccess', _ => _.interrupt, 'optionalCall', _2 => _2()]);
|
|
320
|
-
cb({ _tag: "Failure", cause: { _tag: "Fail", error:
|
|
377
|
+
cb({ _tag: "Failure", cause: { _tag: "Fail", error: _chunkTGIFUAK4cjs.none } });
|
|
321
378
|
return;
|
|
322
379
|
case "Fail":
|
|
323
380
|
_optionalChain([producer, 'optionalAccess', _3 => _3.interrupt, 'optionalCall', _4 => _4()]);
|
|
324
|
-
cb({ _tag: "Failure", cause: { _tag: "Fail", error:
|
|
381
|
+
cb({ _tag: "Failure", cause: { _tag: "Fail", error: _chunkTGIFUAK4cjs.some.call(void 0, sig.error) } });
|
|
325
382
|
return;
|
|
326
383
|
}
|
|
327
384
|
});
|
|
328
385
|
}
|
|
329
|
-
return
|
|
386
|
+
return _chunkSTVLQ3XDcjs.fromPull.call(void 0, pullDown);
|
|
330
387
|
}
|
|
331
388
|
|
|
332
389
|
// src/core/stream/hub.ts
|
|
@@ -335,45 +392,45 @@ function makeHub(capacity, strategy = "BackPressure") {
|
|
|
335
392
|
const queues = /* @__PURE__ */ new Set();
|
|
336
393
|
let closed = false;
|
|
337
394
|
const publish = (a) => {
|
|
338
|
-
if (closed) return
|
|
395
|
+
if (closed) return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, false);
|
|
339
396
|
const size = queues.size;
|
|
340
|
-
if (size === 0) return
|
|
397
|
+
if (size === 0) return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, true);
|
|
341
398
|
if (size === 1) {
|
|
342
399
|
const q = queues.values().next().value;
|
|
343
400
|
return q.offer(a);
|
|
344
401
|
}
|
|
345
|
-
let eff =
|
|
402
|
+
let eff = _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, true);
|
|
346
403
|
for (const q of queues) {
|
|
347
|
-
eff =
|
|
404
|
+
eff = _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0,
|
|
348
405
|
eff,
|
|
349
|
-
(okSoFar) =>
|
|
406
|
+
(okSoFar) => _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0, q.offer(a), (ok) => _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, okSoFar && ok))
|
|
350
407
|
);
|
|
351
408
|
}
|
|
352
409
|
return eff;
|
|
353
410
|
};
|
|
354
411
|
const publishAll = (as) => {
|
|
355
|
-
let eff =
|
|
412
|
+
let eff = _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, true);
|
|
356
413
|
const it = as[Symbol.iterator]();
|
|
357
414
|
while (true) {
|
|
358
415
|
const n = it.next();
|
|
359
416
|
if (n.done) break;
|
|
360
417
|
const a = n.value;
|
|
361
|
-
eff =
|
|
418
|
+
eff = _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0,
|
|
362
419
|
eff,
|
|
363
|
-
(okSoFar) =>
|
|
420
|
+
(okSoFar) => _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0, publish(a), (ok) => _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, okSoFar && ok))
|
|
364
421
|
);
|
|
365
422
|
}
|
|
366
423
|
return eff;
|
|
367
424
|
};
|
|
368
425
|
const subscribe = () => {
|
|
369
426
|
if (closed) {
|
|
370
|
-
return
|
|
427
|
+
return _chunkTGIFUAK4cjs.asyncTotal.call(void 0, () => {
|
|
371
428
|
throw { _tag: "HubClosed" };
|
|
372
429
|
});
|
|
373
430
|
}
|
|
374
|
-
return
|
|
431
|
+
return _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0,
|
|
375
432
|
bounded(capacity, toQueueStrategy(strategy)),
|
|
376
|
-
(q) =>
|
|
433
|
+
(q) => _chunkTGIFUAK4cjs.asyncSync.call(void 0, () => {
|
|
377
434
|
queues.add(q);
|
|
378
435
|
return {
|
|
379
436
|
...q,
|
|
@@ -386,7 +443,7 @@ function makeHub(capacity, strategy = "BackPressure") {
|
|
|
386
443
|
})
|
|
387
444
|
);
|
|
388
445
|
};
|
|
389
|
-
const shutdown = () =>
|
|
446
|
+
const shutdown = () => _chunkTGIFUAK4cjs.asyncSync.call(void 0, () => {
|
|
390
447
|
if (closed) return;
|
|
391
448
|
closed = true;
|
|
392
449
|
for (const q of queues) q.shutdown();
|
|
@@ -401,23 +458,23 @@ function makeHub(capacity, strategy = "BackPressure") {
|
|
|
401
458
|
}
|
|
402
459
|
var broadcast = makeHub;
|
|
403
460
|
function broadcastToHub(stream, hub) {
|
|
404
|
-
return
|
|
461
|
+
return _chunkSTVLQ3XDcjs.foreachStream.call(void 0,
|
|
405
462
|
stream,
|
|
406
|
-
(a) =>
|
|
463
|
+
(a) => _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0, hub.publish(a), () => _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, void 0))
|
|
407
464
|
);
|
|
408
465
|
}
|
|
409
466
|
function fromHub(hub) {
|
|
410
|
-
return
|
|
411
|
-
|
|
412
|
-
const loop =
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
(a) =>
|
|
467
|
+
return _chunkSTVLQ3XDcjs.managedStream.call(void 0,
|
|
468
|
+
_chunkTGIFUAK4cjs.asyncFlatMap.call(void 0, hub.subscribe(), (sub) => {
|
|
469
|
+
const loop = _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
470
|
+
_chunkTGIFUAK4cjs.asyncFlatMap.call(void 0,
|
|
471
|
+
_chunkTGIFUAK4cjs.asyncMapError.call(void 0, sub.take(), (_queueClosed) => _chunkTGIFUAK4cjs.none),
|
|
472
|
+
(a) => _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [a, loop])
|
|
416
473
|
)
|
|
417
474
|
);
|
|
418
|
-
return
|
|
475
|
+
return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, {
|
|
419
476
|
stream: loop,
|
|
420
|
-
release: (_exit) =>
|
|
477
|
+
release: (_exit) => _chunkTGIFUAK4cjs.asyncSync.call(void 0, () => sub.unsubscribe())
|
|
421
478
|
});
|
|
422
479
|
})
|
|
423
480
|
);
|
|
@@ -427,22 +484,20 @@ function fromHub(hub) {
|
|
|
427
484
|
var cachedWasmChunkCtor;
|
|
428
485
|
function resolveWasmChunkBuffer() {
|
|
429
486
|
if (cachedWasmChunkCtor !== void 0) return cachedWasmChunkCtor;
|
|
430
|
-
const mod =
|
|
487
|
+
const mod = _chunkTGIFUAK4cjs.resolveWasmModule.call(void 0, );
|
|
431
488
|
cachedWasmChunkCtor = _nullishCoalesce(_optionalChain([mod, 'optionalAccess', _5 => _5.BrassWasmChunkBuffer]), () => ( null));
|
|
432
489
|
return cachedWasmChunkCtor;
|
|
433
490
|
}
|
|
434
|
-
var
|
|
435
|
-
constructor(maxChunkSize
|
|
491
|
+
var TsChunker = (_class = class {
|
|
492
|
+
constructor(maxChunkSize) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this);_class.prototype.__init4.call(this);_class.prototype.__init5.call(this);
|
|
436
493
|
this.maxChunkSize = maxChunkSize;
|
|
437
|
-
this.fallbackUsed = fallbackUsed;
|
|
438
494
|
}
|
|
439
495
|
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
__init8() {this.flushes = 0}
|
|
496
|
+
__init() {this.engine = "ts"}
|
|
497
|
+
__init2() {this.values = []}
|
|
498
|
+
__init3() {this.emittedChunks = 0}
|
|
499
|
+
__init4() {this.emittedItems = 0}
|
|
500
|
+
__init5() {this.flushes = 0}
|
|
446
501
|
get length() {
|
|
447
502
|
return this.values.length;
|
|
448
503
|
}
|
|
@@ -472,8 +527,8 @@ var JsChunker = (_class2 = class {
|
|
|
472
527
|
}
|
|
473
528
|
stats() {
|
|
474
529
|
return {
|
|
475
|
-
engine: "
|
|
476
|
-
fallbackUsed:
|
|
530
|
+
engine: "ts",
|
|
531
|
+
fallbackUsed: false,
|
|
477
532
|
data: {
|
|
478
533
|
len: this.values.length,
|
|
479
534
|
maxChunkSize: this.maxChunkSize,
|
|
@@ -483,12 +538,12 @@ var JsChunker = (_class2 = class {
|
|
|
483
538
|
}
|
|
484
539
|
};
|
|
485
540
|
}
|
|
486
|
-
},
|
|
487
|
-
var WasmChunker = (
|
|
488
|
-
|
|
489
|
-
|
|
541
|
+
}, _class);
|
|
542
|
+
var WasmChunker = (_class2 = class {
|
|
543
|
+
__init6() {this.engine = "wasm"}
|
|
544
|
+
__init7() {this.fallbackUsed = false}
|
|
490
545
|
|
|
491
|
-
constructor(maxChunkSize) {;
|
|
546
|
+
constructor(maxChunkSize) {;_class2.prototype.__init6.call(this);_class2.prototype.__init7.call(this);
|
|
492
547
|
const Ctor = resolveWasmChunkBuffer();
|
|
493
548
|
if (!Ctor) {
|
|
494
549
|
throw new Error("brass-runtime wasm chunk buffer is not available. Run npm run build:wasm first.");
|
|
@@ -519,29 +574,29 @@ var WasmChunker = (_class3 = class {
|
|
|
519
574
|
stats() {
|
|
520
575
|
return { engine: "wasm", fallbackUsed: false, data: JSON.parse(this.inner.stats_json()) };
|
|
521
576
|
}
|
|
522
|
-
},
|
|
577
|
+
}, _class2);
|
|
523
578
|
function makeStreamChunker(chunkSize, options = {}) {
|
|
524
579
|
const size = Math.max(1, chunkSize | 0);
|
|
525
|
-
const engine = _nullishCoalesce(options.engine, () => ( "
|
|
526
|
-
if (engine === "
|
|
580
|
+
const engine = _nullishCoalesce(options.engine, () => ( "ts"));
|
|
581
|
+
if (engine === "ts") return new TsChunker(size);
|
|
527
582
|
if (engine === "wasm") return new WasmChunker(size);
|
|
528
|
-
|
|
583
|
+
throw new Error(`brass-runtime stream chunk engine must be 'ts' or 'wasm'; received '${String(engine)}'`);
|
|
529
584
|
}
|
|
530
585
|
function chunks(input, chunkSize, options = {}) {
|
|
531
586
|
const size = Math.max(1, chunkSize | 0);
|
|
532
|
-
const loop = (cur) =>
|
|
533
|
-
const fillChunk = (cur, chunker) =>
|
|
534
|
-
|
|
587
|
+
const loop = (cur) => _chunkSTVLQ3XDcjs.fromPull.call(void 0, fillChunk(cur, makeStreamChunker(size, options)));
|
|
588
|
+
const fillChunk = (cur, chunker) => _chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
589
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, cur),
|
|
535
590
|
(opt) => {
|
|
536
591
|
if (opt._tag === "None" && !chunker.isEmpty()) {
|
|
537
|
-
return
|
|
592
|
+
return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [chunker.takeChunk(), _chunkSTVLQ3XDcjs.fromPull.call(void 0, _chunkTGIFUAK4cjs.asyncFail.call(void 0, _chunkTGIFUAK4cjs.none))]);
|
|
538
593
|
}
|
|
539
|
-
return
|
|
594
|
+
return _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt);
|
|
540
595
|
},
|
|
541
596
|
([a, tail]) => {
|
|
542
597
|
chunker.push(a);
|
|
543
598
|
if (chunker.isFull()) {
|
|
544
|
-
return
|
|
599
|
+
return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [chunker.takeChunk(), loop(tail)]);
|
|
545
600
|
}
|
|
546
601
|
return fillChunk(tail, chunker);
|
|
547
602
|
}
|
|
@@ -552,15 +607,15 @@ function mapChunks(input, chunkSize, f, options = {}) {
|
|
|
552
607
|
const pullOne = (pending, rest) => {
|
|
553
608
|
if (pending.length > 0) {
|
|
554
609
|
const [head, ...tail] = pending;
|
|
555
|
-
return
|
|
610
|
+
return _chunkSTVLQ3XDcjs.fromPull.call(void 0, _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [head, pullOne(tail, rest)]));
|
|
556
611
|
}
|
|
557
|
-
return
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
(opt) =>
|
|
612
|
+
return _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
613
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
614
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, rest),
|
|
615
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
561
616
|
([chunk, tail]) => {
|
|
562
617
|
const mapped = f(chunk);
|
|
563
|
-
return
|
|
618
|
+
return _chunkSTVLQ3XDcjs.uncons.call(void 0, pullOne(mapped, tail));
|
|
564
619
|
}
|
|
565
620
|
)
|
|
566
621
|
);
|
|
@@ -573,16 +628,16 @@ function mapChunksEffect(chunkSize, f, options = {}) {
|
|
|
573
628
|
const pullOne = (pending, rest) => {
|
|
574
629
|
if (pending.length > 0) {
|
|
575
630
|
const [head, ...tail] = pending;
|
|
576
|
-
return
|
|
631
|
+
return _chunkSTVLQ3XDcjs.fromPull.call(void 0, _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [head, pullOne(tail, rest)]));
|
|
577
632
|
}
|
|
578
|
-
return
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
(opt) =>
|
|
582
|
-
([chunk, tail]) =>
|
|
583
|
-
|
|
584
|
-
(opt) =>
|
|
585
|
-
(mapped) =>
|
|
633
|
+
return _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
634
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
635
|
+
_chunkTGIFUAK4cjs.asyncMapError.call(void 0, _chunkSTVLQ3XDcjs.uncons.call(void 0, rest), (opt) => _chunkSTVLQ3XDcjs.widenOpt.call(void 0, opt)),
|
|
636
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
637
|
+
([chunk, tail]) => _chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
638
|
+
_chunkTGIFUAK4cjs.asyncMapError.call(void 0, f(chunk), (e) => ({ _tag: "Some", value: e })),
|
|
639
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
640
|
+
(mapped) => _chunkSTVLQ3XDcjs.uncons.call(void 0, pullOne(mapped, tail))
|
|
586
641
|
)
|
|
587
642
|
)
|
|
588
643
|
);
|
|
@@ -591,100 +646,517 @@ function mapChunksEffect(chunkSize, f, options = {}) {
|
|
|
591
646
|
});
|
|
592
647
|
}
|
|
593
648
|
|
|
649
|
+
// src/core/stream/fusion.ts
|
|
650
|
+
var _fusionEnabled = true;
|
|
651
|
+
var _fusionVerbose = false;
|
|
652
|
+
function setFusionEnabled(enabled) {
|
|
653
|
+
_fusionEnabled = enabled;
|
|
654
|
+
}
|
|
655
|
+
function isFusionEnabled() {
|
|
656
|
+
return _fusionEnabled;
|
|
657
|
+
}
|
|
658
|
+
function setFusionVerbose(verbose) {
|
|
659
|
+
_fusionVerbose = verbose;
|
|
660
|
+
}
|
|
661
|
+
function isFusionVerbose() {
|
|
662
|
+
return _fusionVerbose;
|
|
663
|
+
}
|
|
664
|
+
function getStats(pipeline) {
|
|
665
|
+
const p = pipeline;
|
|
666
|
+
if (p._fusedSteps && Array.isArray(p._fusedSteps)) {
|
|
667
|
+
const metas = p._fusedSteps;
|
|
668
|
+
return buildStats(metas);
|
|
669
|
+
}
|
|
670
|
+
if (p[PURE_PIPELINE_TAG]) {
|
|
671
|
+
return null;
|
|
672
|
+
}
|
|
673
|
+
return null;
|
|
674
|
+
}
|
|
675
|
+
var PURE_PIPELINE_TAG = /* @__PURE__ */ Symbol("brass:pure-pipeline");
|
|
676
|
+
function makeMapStep(fn) {
|
|
677
|
+
return (a, _state) => ({ tag: "emit", value: fn(a) });
|
|
678
|
+
}
|
|
679
|
+
function makeFilterStep(pred) {
|
|
680
|
+
return (a, _state) => pred(a) ? { tag: "emit", value: a } : { tag: "skip" };
|
|
681
|
+
}
|
|
682
|
+
function makeTakeStep(n, counterIndex) {
|
|
683
|
+
return (a, state) => {
|
|
684
|
+
if (state.counters[counterIndex] >= n) {
|
|
685
|
+
return { tag: "halt" };
|
|
686
|
+
}
|
|
687
|
+
state.counters[counterIndex]++;
|
|
688
|
+
return { tag: "emit", value: a };
|
|
689
|
+
};
|
|
690
|
+
}
|
|
691
|
+
function makeDropStep(n, counterIndex) {
|
|
692
|
+
return (a, state) => {
|
|
693
|
+
if (state.counters[counterIndex] < n) {
|
|
694
|
+
state.counters[counterIndex]++;
|
|
695
|
+
return { tag: "skip" };
|
|
696
|
+
}
|
|
697
|
+
return { tag: "emit", value: a };
|
|
698
|
+
};
|
|
699
|
+
}
|
|
700
|
+
function initState(counterCount) {
|
|
701
|
+
return () => ({
|
|
702
|
+
counters: new Array(counterCount).fill(0)
|
|
703
|
+
});
|
|
704
|
+
}
|
|
705
|
+
function composeSteps(step1, step2) {
|
|
706
|
+
return (a, state) => {
|
|
707
|
+
const r1 = step1(a, state);
|
|
708
|
+
if (r1.tag !== "emit") return r1;
|
|
709
|
+
return step2(r1.value, state);
|
|
710
|
+
};
|
|
711
|
+
}
|
|
712
|
+
function getPureTag(pipeline) {
|
|
713
|
+
const tagged = pipeline;
|
|
714
|
+
return _nullishCoalesce(tagged[PURE_PIPELINE_TAG], () => ( null));
|
|
715
|
+
}
|
|
716
|
+
function getFusedSteps(pipeline) {
|
|
717
|
+
const p = pipeline;
|
|
718
|
+
if (p._fusedSteps && Array.isArray(p._fusedSteps)) {
|
|
719
|
+
return p._fusedSteps;
|
|
720
|
+
}
|
|
721
|
+
return null;
|
|
722
|
+
}
|
|
723
|
+
function buildStepFromMetadata(meta, counterIndex) {
|
|
724
|
+
switch (meta.kind) {
|
|
725
|
+
case "map":
|
|
726
|
+
return makeMapStep(meta.fn);
|
|
727
|
+
case "filter":
|
|
728
|
+
return makeFilterStep(meta.pred);
|
|
729
|
+
case "take":
|
|
730
|
+
return makeTakeStep(meta.n, counterIndex);
|
|
731
|
+
case "drop":
|
|
732
|
+
return makeDropStep(meta.n, counterIndex);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
function buildStats(metas) {
|
|
736
|
+
const steps = metas.map((m) => {
|
|
737
|
+
switch (m.kind) {
|
|
738
|
+
case "map":
|
|
739
|
+
return { kind: "map" };
|
|
740
|
+
case "filter":
|
|
741
|
+
return { kind: "filter" };
|
|
742
|
+
case "take":
|
|
743
|
+
return { kind: "take", n: m.n };
|
|
744
|
+
case "drop":
|
|
745
|
+
return { kind: "drop", n: m.n };
|
|
746
|
+
}
|
|
747
|
+
});
|
|
748
|
+
return {
|
|
749
|
+
fusedSteps: steps.length,
|
|
750
|
+
steps,
|
|
751
|
+
hasTake: metas.some((m) => m.kind === "take"),
|
|
752
|
+
hasDrop: metas.some((m) => m.kind === "drop")
|
|
753
|
+
};
|
|
754
|
+
}
|
|
755
|
+
function countCounters(metas) {
|
|
756
|
+
let count = 0;
|
|
757
|
+
for (const m of metas) {
|
|
758
|
+
if (m.kind === "take" || m.kind === "drop") {
|
|
759
|
+
count++;
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
return count;
|
|
763
|
+
}
|
|
764
|
+
function fuse(pipeline, options) {
|
|
765
|
+
const verbose = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _6 => _6.verbose]), () => ( _fusionVerbose));
|
|
766
|
+
if (_optionalChain([options, 'optionalAccess', _7 => _7.enabled]) === false || !_fusionEnabled && _optionalChain([options, 'optionalAccess', _8 => _8.enabled]) !== true) {
|
|
767
|
+
if (verbose) {
|
|
768
|
+
console.log("[FusionEngine] Fusion disabled by options");
|
|
769
|
+
}
|
|
770
|
+
return null;
|
|
771
|
+
}
|
|
772
|
+
const metas = collectMetadata(pipeline);
|
|
773
|
+
if (!metas || metas.length === 0) {
|
|
774
|
+
if (verbose) {
|
|
775
|
+
console.log("[FusionEngine] Pipeline is not fusable (no pure tags detected)");
|
|
776
|
+
}
|
|
777
|
+
return null;
|
|
778
|
+
}
|
|
779
|
+
if (verbose) {
|
|
780
|
+
console.log(
|
|
781
|
+
`[FusionEngine] Fusing ${metas.length} steps: ${metas.map((m) => m.kind).join(" \u2192 ")}`
|
|
782
|
+
);
|
|
783
|
+
}
|
|
784
|
+
let counterIndex = 0;
|
|
785
|
+
let composedStep = buildStepFromMetadata(
|
|
786
|
+
metas[0],
|
|
787
|
+
metas[0].kind === "take" || metas[0].kind === "drop" ? counterIndex++ : -1
|
|
788
|
+
);
|
|
789
|
+
for (let i = 1; i < metas.length; i++) {
|
|
790
|
+
const meta = metas[i];
|
|
791
|
+
const idx = meta.kind === "take" || meta.kind === "drop" ? counterIndex++ : -1;
|
|
792
|
+
composedStep = composeSteps(composedStep, buildStepFromMetadata(meta, idx));
|
|
793
|
+
}
|
|
794
|
+
const counterCount = countCounters(metas);
|
|
795
|
+
const stats = buildStats(metas);
|
|
796
|
+
return {
|
|
797
|
+
_tag: "FusedPipeline",
|
|
798
|
+
step: composedStep,
|
|
799
|
+
initState: initState(counterCount),
|
|
800
|
+
stats
|
|
801
|
+
};
|
|
802
|
+
}
|
|
803
|
+
function collectMetadata(pipeline) {
|
|
804
|
+
const fusedSteps = getFusedSteps(pipeline);
|
|
805
|
+
if (fusedSteps) {
|
|
806
|
+
return fusedSteps;
|
|
807
|
+
}
|
|
808
|
+
const tag = getPureTag(pipeline);
|
|
809
|
+
if (tag) {
|
|
810
|
+
return [tag];
|
|
811
|
+
}
|
|
812
|
+
return null;
|
|
813
|
+
}
|
|
814
|
+
function runFusedArray(input, fused) {
|
|
815
|
+
const state = fused.initState();
|
|
816
|
+
const output = [];
|
|
817
|
+
for (let i = 0; i < input.length; i++) {
|
|
818
|
+
const result = fused.step(input[i], state);
|
|
819
|
+
switch (result.tag) {
|
|
820
|
+
case "emit":
|
|
821
|
+
output.push(result.value);
|
|
822
|
+
break;
|
|
823
|
+
case "skip":
|
|
824
|
+
break;
|
|
825
|
+
case "halt":
|
|
826
|
+
return output;
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
return output;
|
|
830
|
+
}
|
|
831
|
+
function drainStreamSync(stream) {
|
|
832
|
+
const result = [];
|
|
833
|
+
let cur = stream;
|
|
834
|
+
while (true) {
|
|
835
|
+
switch (cur._tag) {
|
|
836
|
+
case "Empty":
|
|
837
|
+
return result;
|
|
838
|
+
case "FromArray": {
|
|
839
|
+
const arr = cur.values;
|
|
840
|
+
for (let i = 0; i < arr.length; i++) {
|
|
841
|
+
result.push(arr[i]);
|
|
842
|
+
}
|
|
843
|
+
return result;
|
|
844
|
+
}
|
|
845
|
+
case "Emit": {
|
|
846
|
+
const zio = cur.value;
|
|
847
|
+
if (zio._tag === "Succeed") {
|
|
848
|
+
result.push(zio.value);
|
|
849
|
+
return result;
|
|
850
|
+
}
|
|
851
|
+
return null;
|
|
852
|
+
}
|
|
853
|
+
case "Concat": {
|
|
854
|
+
const leftItems = drainStreamSync(cur.left);
|
|
855
|
+
if (leftItems === null) return null;
|
|
856
|
+
for (let i = 0; i < leftItems.length; i++) {
|
|
857
|
+
result.push(leftItems[i]);
|
|
858
|
+
}
|
|
859
|
+
cur = cur.right;
|
|
860
|
+
break;
|
|
861
|
+
}
|
|
862
|
+
default:
|
|
863
|
+
return null;
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
function applyFused(stream, fused) {
|
|
868
|
+
const inputArray = drainStreamSync(stream);
|
|
869
|
+
if (inputArray !== null) {
|
|
870
|
+
const outputArray = runFusedArray(inputArray, fused);
|
|
871
|
+
return arrayToStream(outputArray);
|
|
872
|
+
}
|
|
873
|
+
const state = fused.initState();
|
|
874
|
+
const loop = (cur) => _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
875
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
876
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, cur),
|
|
877
|
+
// End-of-stream or error: propagate
|
|
878
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
879
|
+
([a, tail]) => {
|
|
880
|
+
const result = fused.step(a, state);
|
|
881
|
+
switch (result.tag) {
|
|
882
|
+
case "emit":
|
|
883
|
+
return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [result.value, loop(tail)]);
|
|
884
|
+
case "skip":
|
|
885
|
+
return _chunkSTVLQ3XDcjs.uncons.call(void 0, loop(tail));
|
|
886
|
+
case "halt":
|
|
887
|
+
return _chunkTGIFUAK4cjs.asyncFail.call(void 0, _chunkTGIFUAK4cjs.none);
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
)
|
|
891
|
+
);
|
|
892
|
+
return loop(stream);
|
|
893
|
+
}
|
|
894
|
+
function arrayToStream(values) {
|
|
895
|
+
if (values.length === 0) return { _tag: "Empty" };
|
|
896
|
+
return { _tag: "FromArray", values };
|
|
897
|
+
}
|
|
898
|
+
function serializeFusedPipeline(pipeline) {
|
|
899
|
+
const p = pipeline;
|
|
900
|
+
let metas = null;
|
|
901
|
+
if (p._fusedSteps && Array.isArray(p._fusedSteps)) {
|
|
902
|
+
metas = p._fusedSteps;
|
|
903
|
+
} else if (p[PURE_PIPELINE_TAG]) {
|
|
904
|
+
return null;
|
|
905
|
+
}
|
|
906
|
+
if (!metas || metas.length === 0) {
|
|
907
|
+
return null;
|
|
908
|
+
}
|
|
909
|
+
const steps = metas.map((meta) => {
|
|
910
|
+
switch (meta.kind) {
|
|
911
|
+
case "map":
|
|
912
|
+
return { kind: "map", fnSource: meta.fn.toString() };
|
|
913
|
+
case "filter":
|
|
914
|
+
return { kind: "filter", predSource: meta.pred.toString() };
|
|
915
|
+
case "take":
|
|
916
|
+
return { kind: "take", n: meta.n };
|
|
917
|
+
case "drop":
|
|
918
|
+
return { kind: "drop", n: meta.n };
|
|
919
|
+
}
|
|
920
|
+
});
|
|
921
|
+
return { version: 1, steps };
|
|
922
|
+
}
|
|
923
|
+
function deserializeFusedPipeline(serialized) {
|
|
924
|
+
try {
|
|
925
|
+
if (serialized.version !== 1) {
|
|
926
|
+
return null;
|
|
927
|
+
}
|
|
928
|
+
if (!serialized.steps || serialized.steps.length === 0) {
|
|
929
|
+
return null;
|
|
930
|
+
}
|
|
931
|
+
const metas = [];
|
|
932
|
+
for (const step of serialized.steps) {
|
|
933
|
+
switch (step.kind) {
|
|
934
|
+
case "map": {
|
|
935
|
+
const fn = new Function("return " + step.fnSource)();
|
|
936
|
+
if (typeof fn !== "function") return null;
|
|
937
|
+
metas.push({ kind: "map", fn });
|
|
938
|
+
break;
|
|
939
|
+
}
|
|
940
|
+
case "filter": {
|
|
941
|
+
const pred = new Function("return " + step.predSource)();
|
|
942
|
+
if (typeof pred !== "function") return null;
|
|
943
|
+
metas.push({ kind: "filter", pred });
|
|
944
|
+
break;
|
|
945
|
+
}
|
|
946
|
+
case "take": {
|
|
947
|
+
if (typeof step.n !== "number" || step.n < 0) return null;
|
|
948
|
+
metas.push({ kind: "take", n: step.n });
|
|
949
|
+
break;
|
|
950
|
+
}
|
|
951
|
+
case "drop": {
|
|
952
|
+
if (typeof step.n !== "number" || step.n < 0) return null;
|
|
953
|
+
metas.push({ kind: "drop", n: step.n });
|
|
954
|
+
break;
|
|
955
|
+
}
|
|
956
|
+
default:
|
|
957
|
+
return null;
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
const carrier = createDeserializedCarrier(metas);
|
|
961
|
+
return carrier;
|
|
962
|
+
} catch (e2) {
|
|
963
|
+
return null;
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
function createDeserializedCarrier(metas) {
|
|
967
|
+
let counterIndex = 0;
|
|
968
|
+
let composedStep = buildStepFromMetadata(
|
|
969
|
+
metas[0],
|
|
970
|
+
metas[0].kind === "take" || metas[0].kind === "drop" ? counterIndex++ : -1
|
|
971
|
+
);
|
|
972
|
+
for (let i = 1; i < metas.length; i++) {
|
|
973
|
+
const meta = metas[i];
|
|
974
|
+
const idx = meta.kind === "take" || meta.kind === "drop" ? counterIndex++ : -1;
|
|
975
|
+
composedStep = composeSteps(composedStep, buildStepFromMetadata(meta, idx));
|
|
976
|
+
}
|
|
977
|
+
const counterCount = countCounters(metas);
|
|
978
|
+
const stats = buildStats(metas);
|
|
979
|
+
const fusedRepr = {
|
|
980
|
+
_tag: "FusedPipeline",
|
|
981
|
+
step: composedStep,
|
|
982
|
+
initState: initState(counterCount),
|
|
983
|
+
stats
|
|
984
|
+
};
|
|
985
|
+
const pipeline = ((input) => {
|
|
986
|
+
return applyFused(input, fusedRepr);
|
|
987
|
+
});
|
|
988
|
+
pipeline._fusedSteps = metas;
|
|
989
|
+
return pipeline;
|
|
990
|
+
}
|
|
991
|
+
|
|
594
992
|
// src/core/stream/pipeline.ts
|
|
595
993
|
function via(stream, pipeline) {
|
|
994
|
+
if (isFusionEnabled()) {
|
|
995
|
+
const p = pipeline;
|
|
996
|
+
if (p._fusedSteps || p[PURE_PIPELINE_TAG]) {
|
|
997
|
+
let fusedRepr = p._cachedFusedRepr;
|
|
998
|
+
if (!fusedRepr) {
|
|
999
|
+
fusedRepr = fuse(pipeline);
|
|
1000
|
+
if (fusedRepr) p._cachedFusedRepr = fusedRepr;
|
|
1001
|
+
}
|
|
1002
|
+
if (fusedRepr) {
|
|
1003
|
+
return applyFused(stream, fusedRepr);
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
596
1007
|
return pipeline(stream);
|
|
597
1008
|
}
|
|
598
|
-
function
|
|
1009
|
+
function andThen2(p1, p2) {
|
|
1010
|
+
const fused = tryFuse(p1, p2);
|
|
1011
|
+
if (fused) return fused;
|
|
599
1012
|
return ((input) => p2(p1(input)));
|
|
600
1013
|
}
|
|
601
|
-
function
|
|
602
|
-
|
|
1014
|
+
function collectPureMetas(pipeline) {
|
|
1015
|
+
const p = pipeline;
|
|
1016
|
+
if (p._fusedSteps && Array.isArray(p._fusedSteps)) {
|
|
1017
|
+
return p._fusedSteps;
|
|
1018
|
+
}
|
|
1019
|
+
const tag = p[PURE_PIPELINE_TAG];
|
|
1020
|
+
if (tag) {
|
|
1021
|
+
return [tag];
|
|
1022
|
+
}
|
|
1023
|
+
return null;
|
|
1024
|
+
}
|
|
1025
|
+
function tryFuse(p1, p2) {
|
|
1026
|
+
if (!isFusionEnabled()) {
|
|
1027
|
+
if (isFusionVerbose()) {
|
|
1028
|
+
console.log("[FusionEngine] andThen: fusion globally disabled, skipping");
|
|
1029
|
+
}
|
|
1030
|
+
return null;
|
|
1031
|
+
}
|
|
1032
|
+
const metas1 = collectPureMetas(p1);
|
|
1033
|
+
const metas2 = collectPureMetas(p2);
|
|
1034
|
+
if (!metas1 || !metas2) {
|
|
1035
|
+
if (isFusionVerbose()) {
|
|
1036
|
+
const reason = !metas1 && !metas2 ? "neither operand is pure" : !metas1 ? "left operand is not pure" : "right operand is not pure";
|
|
1037
|
+
console.log(`[FusionEngine] andThen: cannot fuse \u2014 ${reason}`);
|
|
1038
|
+
}
|
|
1039
|
+
return null;
|
|
1040
|
+
}
|
|
1041
|
+
const combinedMetas = [...metas1, ...metas2];
|
|
1042
|
+
const fusedRepr = fuse(
|
|
1043
|
+
createMetadataCarrier(combinedMetas)
|
|
1044
|
+
);
|
|
1045
|
+
if (!fusedRepr) {
|
|
1046
|
+
return null;
|
|
1047
|
+
}
|
|
1048
|
+
if (isFusionVerbose()) {
|
|
1049
|
+
console.log(
|
|
1050
|
+
`[FusionEngine] andThen: fused ${combinedMetas.length} steps: ${combinedMetas.map((m) => m.kind).join(" \u2192 ")}`
|
|
1051
|
+
);
|
|
1052
|
+
}
|
|
1053
|
+
const fusedPipeline = ((input) => {
|
|
1054
|
+
return applyFused(input, fusedRepr);
|
|
1055
|
+
});
|
|
1056
|
+
fusedPipeline._fusedSteps = combinedMetas;
|
|
1057
|
+
return fusedPipeline;
|
|
1058
|
+
}
|
|
1059
|
+
function createMetadataCarrier(metas) {
|
|
1060
|
+
const carrier = (() => {
|
|
1061
|
+
});
|
|
1062
|
+
carrier._fusedSteps = metas;
|
|
1063
|
+
return carrier;
|
|
1064
|
+
}
|
|
1065
|
+
function compose2(p2, p1) {
|
|
1066
|
+
return andThen2(p1, p2);
|
|
603
1067
|
}
|
|
604
1068
|
function identity() {
|
|
605
1069
|
return ((input) => input);
|
|
606
1070
|
}
|
|
607
1071
|
function mapP(f) {
|
|
608
|
-
|
|
609
|
-
const onError = (opt) =>
|
|
610
|
-
const onSuccess = ([a, tail]) =>
|
|
611
|
-
const loop = (cur) =>
|
|
612
|
-
|
|
1072
|
+
const pipeline = ((input) => {
|
|
1073
|
+
const onError = (opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt);
|
|
1074
|
+
const onSuccess = ([a, tail]) => _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [f(a), loop(tail)]);
|
|
1075
|
+
const loop = (cur) => _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
1076
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0, _chunkSTVLQ3XDcjs.uncons.call(void 0, cur), onError, onSuccess)
|
|
613
1077
|
);
|
|
614
1078
|
return loop(input);
|
|
615
1079
|
});
|
|
1080
|
+
pipeline[PURE_PIPELINE_TAG] = { kind: "map", fn: f };
|
|
1081
|
+
return pipeline;
|
|
616
1082
|
}
|
|
617
1083
|
function filterP(pred) {
|
|
618
|
-
|
|
619
|
-
const onError = (opt) =>
|
|
620
|
-
const onSuccess = ([a, tail]) => pred(a) ?
|
|
621
|
-
const next = (cur) =>
|
|
622
|
-
const loop = (cur) =>
|
|
1084
|
+
const pipeline = ((input) => {
|
|
1085
|
+
const onError = (opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt);
|
|
1086
|
+
const onSuccess = ([a, tail]) => pred(a) ? _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [a, loop(tail)]) : next(tail);
|
|
1087
|
+
const next = (cur) => _chunkTGIFUAK4cjs.asyncFold.call(void 0, _chunkSTVLQ3XDcjs.uncons.call(void 0, cur), onError, onSuccess);
|
|
1088
|
+
const loop = (cur) => _chunkSTVLQ3XDcjs.fromPull.call(void 0, next(cur));
|
|
623
1089
|
return loop(input);
|
|
624
1090
|
});
|
|
1091
|
+
pipeline[PURE_PIPELINE_TAG] = { kind: "filter", pred };
|
|
1092
|
+
return pipeline;
|
|
625
1093
|
}
|
|
626
1094
|
function filterMapP(f) {
|
|
627
1095
|
return ((input) => {
|
|
628
|
-
const onError = (opt) =>
|
|
629
|
-
const next = (cur) =>
|
|
630
|
-
|
|
1096
|
+
const onError = (opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt);
|
|
1097
|
+
const next = (cur) => _chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1098
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, cur),
|
|
631
1099
|
onError,
|
|
632
1100
|
([a, tail]) => {
|
|
633
1101
|
const ob = f(a);
|
|
634
|
-
return ob._tag === "Some" ?
|
|
1102
|
+
return ob._tag === "Some" ? _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [ob.value, loop(tail)]) : next(tail);
|
|
635
1103
|
}
|
|
636
1104
|
);
|
|
637
|
-
const loop = (cur) =>
|
|
1105
|
+
const loop = (cur) => _chunkSTVLQ3XDcjs.fromPull.call(void 0, next(cur));
|
|
638
1106
|
return loop(input);
|
|
639
1107
|
});
|
|
640
1108
|
}
|
|
641
1109
|
function takeP(n) {
|
|
642
1110
|
const m = Math.max(0, n | 0);
|
|
643
|
-
|
|
1111
|
+
const pipeline = ((input) => {
|
|
644
1112
|
const loop = (cur, remaining) => {
|
|
645
|
-
if (remaining <= 0) return
|
|
646
|
-
return
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
(opt) =>
|
|
650
|
-
([a, tail]) =>
|
|
1113
|
+
if (remaining <= 0) return _chunkSTVLQ3XDcjs.emptyStream.call(void 0, );
|
|
1114
|
+
return _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
1115
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1116
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, cur),
|
|
1117
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
1118
|
+
([a, tail]) => _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [a, loop(tail, remaining - 1)])
|
|
651
1119
|
)
|
|
652
1120
|
);
|
|
653
1121
|
};
|
|
654
1122
|
return loop(input, m);
|
|
655
1123
|
});
|
|
1124
|
+
pipeline[PURE_PIPELINE_TAG] = { kind: "take", n: m };
|
|
1125
|
+
return pipeline;
|
|
656
1126
|
}
|
|
657
1127
|
function dropP(n) {
|
|
658
1128
|
const m = Math.max(0, n | 0);
|
|
659
|
-
|
|
1129
|
+
const pipeline = ((input) => {
|
|
660
1130
|
const skip = (cur, remaining) => {
|
|
661
1131
|
if (remaining <= 0) return cur;
|
|
662
|
-
return
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
(opt) =>
|
|
666
|
-
([_a, tail]) =>
|
|
1132
|
+
return _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
1133
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1134
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, cur),
|
|
1135
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
1136
|
+
([_a, tail]) => _chunkSTVLQ3XDcjs.uncons.call(void 0, skip(tail, remaining - 1))
|
|
667
1137
|
)
|
|
668
1138
|
);
|
|
669
1139
|
};
|
|
670
1140
|
return skip(input, m);
|
|
671
1141
|
});
|
|
1142
|
+
pipeline[PURE_PIPELINE_TAG] = { kind: "drop", n: m };
|
|
1143
|
+
return pipeline;
|
|
672
1144
|
}
|
|
673
1145
|
function mapEffectP(f) {
|
|
674
1146
|
return ((input) => {
|
|
675
|
-
const raiseToOpt = (fa) =>
|
|
676
|
-
const loop = (cur) =>
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
(opt) =>
|
|
1147
|
+
const raiseToOpt = (fa) => _chunkTGIFUAK4cjs.asyncMapError.call(void 0, fa, (e) => _chunkTGIFUAK4cjs.some.call(void 0, e));
|
|
1148
|
+
const loop = (cur) => _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
1149
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1150
|
+
_chunkTGIFUAK4cjs.asyncMapError.call(void 0,
|
|
1151
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, cur),
|
|
1152
|
+
(opt) => _chunkSTVLQ3XDcjs.widenOpt.call(void 0, opt)
|
|
681
1153
|
),
|
|
682
|
-
(opt) =>
|
|
683
|
-
([a, tail]) =>
|
|
1154
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
1155
|
+
([a, tail]) => _chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
684
1156
|
raiseToOpt(f(a)),
|
|
685
1157
|
// Async<Rp, ...>
|
|
686
|
-
(opt2) =>
|
|
687
|
-
(b) =>
|
|
1158
|
+
(opt2) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt2),
|
|
1159
|
+
(b) => _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [b, loop(tail)])
|
|
688
1160
|
)
|
|
689
1161
|
)
|
|
690
1162
|
);
|
|
@@ -692,7 +1164,7 @@ function mapEffectP(f) {
|
|
|
692
1164
|
});
|
|
693
1165
|
}
|
|
694
1166
|
function tapEffectP(f) {
|
|
695
|
-
return mapEffectP((a) =>
|
|
1167
|
+
return mapEffectP((a) => _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0, f(a), () => _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, a)));
|
|
696
1168
|
}
|
|
697
1169
|
function chunksP(chunkSize, options = {}) {
|
|
698
1170
|
return ((input) => chunks(input, chunkSize, options));
|
|
@@ -707,23 +1179,23 @@ function groupedP(n) {
|
|
|
707
1179
|
const size = Math.max(1, n | 0);
|
|
708
1180
|
return ((input) => {
|
|
709
1181
|
const gather = (cur, remaining, acc) => {
|
|
710
|
-
if (remaining <= 0) return
|
|
711
|
-
return
|
|
712
|
-
|
|
1182
|
+
if (remaining <= 0) return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, { chunk: acc, rest: cur });
|
|
1183
|
+
return _chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1184
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, cur),
|
|
713
1185
|
(opt) => {
|
|
714
|
-
if (opt._tag === "None") return
|
|
715
|
-
return
|
|
1186
|
+
if (opt._tag === "None") return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, { chunk: acc, rest: _chunkSTVLQ3XDcjs.emptyStream.call(void 0, ) });
|
|
1187
|
+
return _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt);
|
|
716
1188
|
},
|
|
717
1189
|
([a, tail]) => gather(tail, remaining - 1, [...acc, a])
|
|
718
1190
|
);
|
|
719
1191
|
};
|
|
720
|
-
const loop = (cur) =>
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
(opt) =>
|
|
724
|
-
([a, tail]) =>
|
|
1192
|
+
const loop = (cur) => _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
1193
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1194
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, cur),
|
|
1195
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
1196
|
+
([a, tail]) => _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0,
|
|
725
1197
|
gather(tail, size - 1, [a]),
|
|
726
|
-
({ chunk, rest }) =>
|
|
1198
|
+
({ chunk, rest }) => _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [chunk, loop(rest)])
|
|
727
1199
|
)
|
|
728
1200
|
)
|
|
729
1201
|
);
|
|
@@ -731,12 +1203,169 @@ function groupedP(n) {
|
|
|
731
1203
|
});
|
|
732
1204
|
}
|
|
733
1205
|
|
|
1206
|
+
// src/core/stream/operators.ts
|
|
1207
|
+
function throttle(stream, intervalMs) {
|
|
1208
|
+
let lastEmitTime = 0;
|
|
1209
|
+
const loop = (cur) => _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
1210
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1211
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, cur),
|
|
1212
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
1213
|
+
([a, tail]) => {
|
|
1214
|
+
const now = Date.now();
|
|
1215
|
+
if (now - lastEmitTime >= intervalMs) {
|
|
1216
|
+
lastEmitTime = now;
|
|
1217
|
+
return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [a, loop(tail)]);
|
|
1218
|
+
}
|
|
1219
|
+
return _chunkSTVLQ3XDcjs.uncons.call(void 0, loop(tail));
|
|
1220
|
+
}
|
|
1221
|
+
)
|
|
1222
|
+
);
|
|
1223
|
+
return loop(stream);
|
|
1224
|
+
}
|
|
1225
|
+
function debounce(stream, delayMs) {
|
|
1226
|
+
return _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
1227
|
+
_chunkTGIFUAK4cjs.asyncEffect.call(void 0, (_env, cb) => {
|
|
1228
|
+
let lastValue;
|
|
1229
|
+
let hasValue = false;
|
|
1230
|
+
let timerId;
|
|
1231
|
+
let done = false;
|
|
1232
|
+
let tail = stream;
|
|
1233
|
+
const pullNext = () => {
|
|
1234
|
+
if (done) return;
|
|
1235
|
+
const pull = _chunkSTVLQ3XDcjs.uncons.call(void 0, tail);
|
|
1236
|
+
_chunkTGIFUAK4cjs.unsafeRunAsync.call(void 0, pull, _env, (exit) => {
|
|
1237
|
+
if (done) return;
|
|
1238
|
+
if (exit._tag === "Failure") {
|
|
1239
|
+
if (hasValue) {
|
|
1240
|
+
const value = lastValue;
|
|
1241
|
+
hasValue = false;
|
|
1242
|
+
clearTimeout(timerId);
|
|
1243
|
+
cb({ _tag: "Success", value: [value, _chunkSTVLQ3XDcjs.emptyStream.call(void 0, )] });
|
|
1244
|
+
} else {
|
|
1245
|
+
cb(exit);
|
|
1246
|
+
}
|
|
1247
|
+
return;
|
|
1248
|
+
}
|
|
1249
|
+
const [a, nextTail] = exit.value;
|
|
1250
|
+
tail = nextTail;
|
|
1251
|
+
lastValue = a;
|
|
1252
|
+
hasValue = true;
|
|
1253
|
+
clearTimeout(timerId);
|
|
1254
|
+
timerId = setTimeout(() => {
|
|
1255
|
+
if (done) return;
|
|
1256
|
+
const value = lastValue;
|
|
1257
|
+
hasValue = false;
|
|
1258
|
+
done = true;
|
|
1259
|
+
cb({ _tag: "Success", value: [value, debounce(tail, delayMs)] });
|
|
1260
|
+
}, delayMs);
|
|
1261
|
+
pullNext();
|
|
1262
|
+
});
|
|
1263
|
+
};
|
|
1264
|
+
pullNext();
|
|
1265
|
+
return () => {
|
|
1266
|
+
done = true;
|
|
1267
|
+
clearTimeout(timerId);
|
|
1268
|
+
};
|
|
1269
|
+
})
|
|
1270
|
+
);
|
|
1271
|
+
}
|
|
1272
|
+
function zip2(left, right) {
|
|
1273
|
+
const loop = (l, r) => _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
1274
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1275
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, l),
|
|
1276
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
1277
|
+
([a, lTail]) => _chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1278
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, r),
|
|
1279
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
1280
|
+
([b, rTail]) => _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [[a, b], loop(lTail, rTail)])
|
|
1281
|
+
)
|
|
1282
|
+
)
|
|
1283
|
+
);
|
|
1284
|
+
return loop(left, right);
|
|
1285
|
+
}
|
|
1286
|
+
function zipWith(left, right, f) {
|
|
1287
|
+
const loop = (l, r) => _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
1288
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1289
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, l),
|
|
1290
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
1291
|
+
([a, lTail]) => _chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1292
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, r),
|
|
1293
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
1294
|
+
([b, rTail]) => _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [f(a, b), loop(lTail, rTail)])
|
|
1295
|
+
)
|
|
1296
|
+
)
|
|
1297
|
+
);
|
|
1298
|
+
return loop(left, right);
|
|
1299
|
+
}
|
|
1300
|
+
function scan(stream, initial, f) {
|
|
1301
|
+
const loop = (cur, acc) => _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
1302
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1303
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, cur),
|
|
1304
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
1305
|
+
([a, tail]) => {
|
|
1306
|
+
const next = f(acc, a);
|
|
1307
|
+
return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [next, loop(tail, next)]);
|
|
1308
|
+
}
|
|
1309
|
+
)
|
|
1310
|
+
);
|
|
1311
|
+
return _chunkSTVLQ3XDcjs.concatStream.call(void 0,
|
|
1312
|
+
_chunkSTVLQ3XDcjs.emitStream.call(void 0, _chunkTGIFUAK4cjs.succeed.call(void 0, initial)),
|
|
1313
|
+
loop(stream, initial)
|
|
1314
|
+
);
|
|
1315
|
+
}
|
|
1316
|
+
function interleave(left, right) {
|
|
1317
|
+
const loop = (l, r, pickLeft) => _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
1318
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1319
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, pickLeft ? l : r),
|
|
1320
|
+
// Current stream ended — drain the other
|
|
1321
|
+
(_opt) => _chunkSTVLQ3XDcjs.uncons.call(void 0, pickLeft ? r : l),
|
|
1322
|
+
([a, tail]) => {
|
|
1323
|
+
const nextL = pickLeft ? tail : l;
|
|
1324
|
+
const nextR = pickLeft ? r : tail;
|
|
1325
|
+
return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [a, loop(nextL, nextR, !pickLeft)]);
|
|
1326
|
+
}
|
|
1327
|
+
)
|
|
1328
|
+
);
|
|
1329
|
+
return loop(left, right, true);
|
|
1330
|
+
}
|
|
1331
|
+
function take2(stream, n) {
|
|
1332
|
+
if (n <= 0) return _chunkSTVLQ3XDcjs.emptyStream.call(void 0, );
|
|
1333
|
+
const loop = (cur, remaining) => {
|
|
1334
|
+
if (remaining <= 0) return _chunkSTVLQ3XDcjs.emptyStream.call(void 0, );
|
|
1335
|
+
return _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
1336
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1337
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, cur),
|
|
1338
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
1339
|
+
([a, tail]) => _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [a, loop(tail, remaining - 1)])
|
|
1340
|
+
)
|
|
1341
|
+
);
|
|
1342
|
+
};
|
|
1343
|
+
return loop(stream, n);
|
|
1344
|
+
}
|
|
1345
|
+
function drop(stream, n) {
|
|
1346
|
+
if (n <= 0) return stream;
|
|
1347
|
+
const skip = (cur, remaining) => {
|
|
1348
|
+
if (remaining <= 0) return cur;
|
|
1349
|
+
return _chunkSTVLQ3XDcjs.fromPull.call(void 0,
|
|
1350
|
+
_chunkTGIFUAK4cjs.asyncFold.call(void 0,
|
|
1351
|
+
_chunkSTVLQ3XDcjs.uncons.call(void 0, cur),
|
|
1352
|
+
(opt) => _chunkTGIFUAK4cjs.asyncFail.call(void 0, opt),
|
|
1353
|
+
([_a, tail]) => _chunkSTVLQ3XDcjs.uncons.call(void 0, skip(tail, remaining - 1))
|
|
1354
|
+
)
|
|
1355
|
+
);
|
|
1356
|
+
};
|
|
1357
|
+
return skip(stream, n);
|
|
1358
|
+
}
|
|
1359
|
+
|
|
734
1360
|
// src/core/runtime/engineStats.ts
|
|
735
|
-
function engineStats(engine, data
|
|
736
|
-
return { engine, data, fallbackUsed };
|
|
1361
|
+
function engineStats(engine, data) {
|
|
1362
|
+
return { engine, data, fallbackUsed: false };
|
|
737
1363
|
}
|
|
738
1364
|
function selectedEngineStats(requested, engine, data) {
|
|
739
|
-
|
|
1365
|
+
if (requested !== engine) {
|
|
1366
|
+
throw new Error(`brass-runtime strict engine mismatch: requested '${requested}', got '${engine}'`);
|
|
1367
|
+
}
|
|
1368
|
+
return { requested, engine, data, fallbackUsed: false };
|
|
740
1369
|
}
|
|
741
1370
|
|
|
742
1371
|
|
|
@@ -852,4 +1481,92 @@ function selectedEngineStats(requested, engine, data) {
|
|
|
852
1481
|
|
|
853
1482
|
|
|
854
1483
|
|
|
855
|
-
|
|
1484
|
+
|
|
1485
|
+
|
|
1486
|
+
|
|
1487
|
+
|
|
1488
|
+
|
|
1489
|
+
|
|
1490
|
+
|
|
1491
|
+
|
|
1492
|
+
|
|
1493
|
+
|
|
1494
|
+
|
|
1495
|
+
|
|
1496
|
+
|
|
1497
|
+
|
|
1498
|
+
|
|
1499
|
+
|
|
1500
|
+
|
|
1501
|
+
|
|
1502
|
+
|
|
1503
|
+
|
|
1504
|
+
|
|
1505
|
+
|
|
1506
|
+
|
|
1507
|
+
|
|
1508
|
+
|
|
1509
|
+
|
|
1510
|
+
|
|
1511
|
+
|
|
1512
|
+
|
|
1513
|
+
|
|
1514
|
+
|
|
1515
|
+
|
|
1516
|
+
|
|
1517
|
+
|
|
1518
|
+
|
|
1519
|
+
|
|
1520
|
+
|
|
1521
|
+
|
|
1522
|
+
|
|
1523
|
+
|
|
1524
|
+
|
|
1525
|
+
|
|
1526
|
+
|
|
1527
|
+
|
|
1528
|
+
|
|
1529
|
+
|
|
1530
|
+
|
|
1531
|
+
|
|
1532
|
+
|
|
1533
|
+
|
|
1534
|
+
|
|
1535
|
+
|
|
1536
|
+
|
|
1537
|
+
|
|
1538
|
+
|
|
1539
|
+
|
|
1540
|
+
|
|
1541
|
+
|
|
1542
|
+
|
|
1543
|
+
|
|
1544
|
+
|
|
1545
|
+
|
|
1546
|
+
|
|
1547
|
+
|
|
1548
|
+
|
|
1549
|
+
|
|
1550
|
+
|
|
1551
|
+
|
|
1552
|
+
|
|
1553
|
+
|
|
1554
|
+
|
|
1555
|
+
|
|
1556
|
+
|
|
1557
|
+
|
|
1558
|
+
|
|
1559
|
+
|
|
1560
|
+
|
|
1561
|
+
|
|
1562
|
+
|
|
1563
|
+
|
|
1564
|
+
|
|
1565
|
+
|
|
1566
|
+
|
|
1567
|
+
|
|
1568
|
+
|
|
1569
|
+
|
|
1570
|
+
|
|
1571
|
+
|
|
1572
|
+
exports.ABI_VERSION = _chunkTGIFUAK4cjs.ABI_VERSION; exports.Async = _chunkTGIFUAK4cjs.Async; exports.Cause = _chunkTGIFUAK4cjs.Cause; exports.DefaultHostExecutor = _chunkTGIFUAK4cjs.DefaultHostExecutor; exports.EVENT_WORDS = _chunkTGIFUAK4cjs.EVENT_WORDS; exports.EngineFiberHandle = _chunkTGIFUAK4cjs.EngineFiberHandle; exports.EventKindCode = _chunkTGIFUAK4cjs.EventKindCode; exports.Exit = _chunkTGIFUAK4cjs.Exit; exports.HostRegistry = _chunkTGIFUAK4cjs.HostRegistry; exports.JsFiberEngine = _chunkTGIFUAK4cjs.JsFiberEngine; exports.NONE_U32 = _chunkTGIFUAK4cjs.NONE_U32; exports.NoopHooks = _chunkTGIFUAK4cjs.NoopHooks; exports.OpcodeTagCode = _chunkTGIFUAK4cjs.OpcodeTagCode; exports.PURE_PIPELINE_TAG = PURE_PIPELINE_TAG; exports.ProgramBuilder = _chunkTGIFUAK4cjs.ProgramBuilder; exports.PushStatus = _chunkTGIFUAK4cjs.PushStatus; exports.RingBuffer = _chunkTGIFUAK4cjs.RingBuffer; exports.Runtime = _chunkTGIFUAK4cjs.Runtime; exports.RuntimeFiber = _chunkTGIFUAK4cjs.RuntimeFiber; exports.Scheduler = _chunkTGIFUAK4cjs.Scheduler; exports.Scope = _chunkTGIFUAK4cjs.Scope; exports.WasmFiberEngine = _chunkTGIFUAK4cjs.WasmFiberEngine; exports.WasmFiberRegistryBridge = _chunkTGIFUAK4cjs.WasmFiberRegistryBridge; exports.WasmPackFiberBridge = _chunkTGIFUAK4cjs.WasmPackFiberBridge; exports.abortablePromiseStats = _chunkTGIFUAK4cjs.abortablePromiseStats; exports.acquireRelease = _chunkTGIFUAK4cjs.acquireRelease; exports.andThen = andThen2; exports.andThenSchedule = _chunkXPZNXSVNcjs.andThen; exports.applyFused = applyFused; exports.assertCompletesWithin = _chunkXPZNXSVNcjs.assertCompletesWithin; exports.assertFails = _chunkXPZNXSVNcjs.assertFails; exports.assertFailsWith = _chunkXPZNXSVNcjs.assertFailsWith; exports.assertNever = _chunkSTVLQ3XDcjs.assertNever; exports.assertSucceeds = _chunkXPZNXSVNcjs.assertSucceeds; exports.async = _chunkTGIFUAK4cjs.asyncEffect; exports.asyncCatchAll = _chunkTGIFUAK4cjs.asyncCatchAll; exports.asyncFail = _chunkTGIFUAK4cjs.asyncFail; exports.asyncFlatMap = _chunkTGIFUAK4cjs.asyncFlatMap; exports.asyncFold = _chunkTGIFUAK4cjs.asyncFold; exports.asyncInterruptible = _chunkTGIFUAK4cjs.asyncInterruptible; exports.asyncMap = _chunkTGIFUAK4cjs.asyncMap; exports.asyncMapError = _chunkTGIFUAK4cjs.asyncMapError; exports.asyncSucceed = _chunkTGIFUAK4cjs.asyncSucceed; exports.asyncSync = _chunkTGIFUAK4cjs.asyncSync; exports.asyncTotal = _chunkTGIFUAK4cjs.asyncTotal; exports.bounded = bounded; exports.bracket = _chunkXPZNXSVNcjs.bracket; exports.broadcast = broadcast; exports.broadcastToHub = broadcastToHub; exports.buffer = buffer; exports.bufferP = bufferP; exports.catchAll = _chunkTGIFUAK4cjs.catchAll; exports.catchTag = _chunkXPZNXSVNcjs.catchTag; exports.catchTags = _chunkXPZNXSVNcjs.catchTags; exports.chunks = chunks; exports.chunksP = chunksP; exports.collectAllPar = _chunkR3R2FVLGcjs.collectAllPar; exports.collectStream = _chunkSTVLQ3XDcjs.collectStream; exports.compose = compose2; exports.composeLayer = _chunkXPZNXSVNcjs.compose; exports.concatStream = _chunkSTVLQ3XDcjs.concatStream; exports.debounce = debounce; exports.decodeEvent = _chunkTGIFUAK4cjs.decodeEvent; exports.decodeEventBatch = _chunkTGIFUAK4cjs.decodeEventBatch; exports.delayedEffect = _chunkXPZNXSVNcjs.delayedEffect; exports.derivedRef = _chunkXPZNXSVNcjs.derivedRef; exports.deserializeFusedPipeline = deserializeFusedPipeline; exports.dropP = dropP; exports.dropStream = drop; exports.elapsed = _chunkXPZNXSVNcjs.elapsed; exports.emitStream = _chunkSTVLQ3XDcjs.emitStream; exports.emptyStream = _chunkSTVLQ3XDcjs.emptyStream; exports.encodeOpcodeNodes = _chunkTGIFUAK4cjs.encodeOpcodeNodes; exports.encodeOpcodeProgram = _chunkTGIFUAK4cjs.encodeOpcodeProgram; exports.end = _chunkTGIFUAK4cjs.end; exports.engineStats = engineStats; exports.ensuring = _chunkXPZNXSVNcjs.ensuring; exports.exponential = _chunkXPZNXSVNcjs.exponential; exports.fail = _chunkTGIFUAK4cjs.fail; exports.filterMapP = filterMapP; exports.filterP = filterP; exports.fixed = _chunkXPZNXSVNcjs.fixed; exports.flakyEffect = _chunkXPZNXSVNcjs.flakyEffect; exports.flatMap = _chunkTGIFUAK4cjs.flatMap; exports.flattenStream = _chunkSTVLQ3XDcjs.flattenStream; exports.foreachStream = _chunkSTVLQ3XDcjs.foreachStream; exports.fork = _chunkTGIFUAK4cjs.fork; exports.fromArray = _chunkSTVLQ3XDcjs.fromArray; exports.fromHub = fromHub; exports.fromPromiseAbortable = _chunkTGIFUAK4cjs.fromPromiseAbortable; exports.fromPull = _chunkSTVLQ3XDcjs.fromPull; exports.fuse = fuse; exports.getBenchmarkBudget = _chunkTGIFUAK4cjs.getBenchmarkBudget; exports.getCurrentFiber = _chunkTGIFUAK4cjs.getCurrentFiber; exports.getStats = getStats; exports.globalScheduler = _chunkTGIFUAK4cjs.globalScheduler; exports.gracefulShutdown = _chunkXPZNXSVNcjs.gracefulShutdown; exports.groupedP = groupedP; exports.identity = identity; exports.inferCallerLaneFromStack = _chunkTGIFUAK4cjs.inferCallerLaneFromStack; exports.initState = initState; exports.interleave = interleave; exports.intersect = _chunkXPZNXSVNcjs.intersect; exports.isFusionEnabled = isFusionEnabled; exports.isFusionVerbose = isFusionVerbose; exports.jittered = _chunkXPZNXSVNcjs.jittered; exports.laneTag = _chunkTGIFUAK4cjs.laneTag; exports.layer = _chunkXPZNXSVNcjs.layer; exports.layerFail = _chunkXPZNXSVNcjs.layerFail; exports.layerFrom = _chunkXPZNXSVNcjs.layerFrom; exports.layerSucceed = _chunkXPZNXSVNcjs.layerSucceed; exports.linkAbortController = _chunkXPZNXSVNcjs.linkAbortController; exports.makeBoundedRingBuffer = _chunkTGIFUAK4cjs.makeBoundedRingBuffer; exports.makeCancelToken = _chunkXPZNXSVNcjs.makeCancelToken; exports.makeCircuitBreaker = _chunkMS34J5LYcjs.makeCircuitBreaker; exports.makeFiberReadyQueue = _chunkTGIFUAK4cjs.makeFiberReadyQueue; exports.makeHub = makeHub; exports.makeMetrics = _chunkXPZNXSVNcjs.makeMetrics; exports.makeRef = _chunkXPZNXSVNcjs.makeRef; exports.makeSemaphore = _chunkXPZNXSVNcjs.makeSemaphore; exports.makeStreamChunker = makeStreamChunker; exports.makeTestRuntime = _chunkXPZNXSVNcjs.makeTestRuntime; exports.makeTracer = _chunkXPZNXSVNcjs.makeTracer; exports.makeWorkerPool = _chunkXPZNXSVNcjs.makeWorkerPool; exports.managed = _chunkXPZNXSVNcjs.managed; exports.managedAll = _chunkXPZNXSVNcjs.managedAll; exports.managedStream = _chunkSTVLQ3XDcjs.managedStream; exports.map = _chunkTGIFUAK4cjs.map; exports.mapAsync = _chunkTGIFUAK4cjs.mapAsync; exports.mapChunks = mapChunks; exports.mapChunksEffect = mapChunksEffect; exports.mapChunksEffectP = mapChunksEffectP; exports.mapEffectP = mapEffectP; exports.mapError = _chunkTGIFUAK4cjs.mapError; exports.mapErrorTyped = _chunkXPZNXSVNcjs.mapError; exports.mapLayer = _chunkXPZNXSVNcjs.mapLayer; exports.mapP = mapP; exports.mapStream = _chunkSTVLQ3XDcjs.mapStream; exports.mapTryAsync = _chunkTGIFUAK4cjs.mapTryAsync; exports.merge = _chunkSTVLQ3XDcjs.merge; exports.mergeLayer = _chunkXPZNXSVNcjs.merge; exports.mergeStream = _chunkSTVLQ3XDcjs.mergeStream; exports.neverEffect = _chunkXPZNXSVNcjs.neverEffect; exports.none = _chunkTGIFUAK4cjs.none; exports.orElse = _chunkXPZNXSVNcjs.orElse; exports.orElseOptional = _chunkTGIFUAK4cjs.orElseOptional; exports.provideLayer = _chunkXPZNXSVNcjs.provideLayer; exports.race = _chunkR3R2FVLGcjs.race; exports.raceWith = _chunkR3R2FVLGcjs.raceWith; exports.rangeStream = _chunkSTVLQ3XDcjs.rangeStream; exports.recurs = _chunkXPZNXSVNcjs.recurs; exports.registerShutdownHooks = _chunkXPZNXSVNcjs.registerShutdownHooks; exports.repeatWithSchedule = _chunkXPZNXSVNcjs.repeatWithSchedule; exports.resetAbortablePromiseStats = _chunkTGIFUAK4cjs.resetAbortablePromiseStats; exports.retry = _chunkMS34J5LYcjs.retry; exports.retryN = _chunkMS34J5LYcjs.retryN; exports.retryWithBackoff = _chunkMS34J5LYcjs.retryWithBackoff; exports.retryWithSchedule = _chunkXPZNXSVNcjs.retryWithSchedule; exports.runFusedArray = runFusedArray; exports.runtimeCapabilities = _chunkTGIFUAK4cjs.runtimeCapabilities; exports.runtimeForCaller = _chunkTGIFUAK4cjs.runtimeForCaller; exports.sanitizeLaneKey = _chunkTGIFUAK4cjs.sanitizeLaneKey; exports.scan = scan; exports.selectedEngineStats = selectedEngineStats; exports.serializeFusedPipeline = serializeFusedPipeline; exports.setBenchmarkBudget = _chunkTGIFUAK4cjs.setBenchmarkBudget; exports.setFusionEnabled = setFusionEnabled; exports.setFusionVerbose = setFusionVerbose; exports.sleep = _chunkMS34J5LYcjs.sleep; exports.some = _chunkTGIFUAK4cjs.some; exports.streamFromReadableStream = _chunkSTVLQ3XDcjs.streamFromReadableStream; exports.succeed = _chunkTGIFUAK4cjs.succeed; exports.sync = _chunkTGIFUAK4cjs.sync; exports.tagError = _chunkXPZNXSVNcjs.tagError; exports.takeP = takeP; exports.takeSchedule = _chunkXPZNXSVNcjs.take; exports.takeStream = take2; exports.tapEffectP = tapEffectP; exports.throttle = throttle; exports.timeout = _chunkMS34J5LYcjs.timeout; exports.toPromise = _chunkTGIFUAK4cjs.toPromise; exports.toPromiseByCaller = _chunkTGIFUAK4cjs.toPromiseByCaller; exports.uncons = _chunkSTVLQ3XDcjs.uncons; exports.union = _chunkXPZNXSVNcjs.union; exports.unit = _chunkTGIFUAK4cjs.unit; exports.unsafeGetCurrentRuntime = _chunkTGIFUAK4cjs.unsafeGetCurrentRuntime; exports.unsafeRunAsync = _chunkTGIFUAK4cjs.unsafeRunAsync; exports.unsafeRunFoldWithEnv = _chunkTGIFUAK4cjs.unsafeRunFoldWithEnv; exports.unwrapScoped = _chunkSTVLQ3XDcjs.unwrapScoped; exports.useManaged = _chunkXPZNXSVNcjs.useManaged; exports.via = via; exports.whileInput = _chunkXPZNXSVNcjs.whileInput; exports.widenOpt = _chunkSTVLQ3XDcjs.widenOpt; exports.withAsyncPromise = _chunkTGIFUAK4cjs.withAsyncPromise; exports.withCurrentFiber = _chunkTGIFUAK4cjs.withCurrentFiber; exports.withScope = _chunkTGIFUAK4cjs.withScope; exports.withScopeAsync = _chunkTGIFUAK4cjs.withScopeAsync; exports.zip = _chunkSTVLQ3XDcjs.zip; exports.zipPar = _chunkR3R2FVLGcjs.zipPar; exports.zipStream = zip2; exports.zipWith = zipWith;
|