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.
Files changed (49) hide show
  1. package/README.md +6 -3
  2. package/dist/agent/cli/main.cjs +44 -43
  3. package/dist/agent/cli/main.js +5 -4
  4. package/dist/agent/cli/main.mjs +5 -4
  5. package/dist/agent/index.cjs +4 -3
  6. package/dist/agent/index.d.ts +1 -1
  7. package/dist/agent/index.js +3 -2
  8. package/dist/agent/index.mjs +3 -2
  9. package/dist/{chunk-3R7ZYRK2.mjs → chunk-3QMOKAS5.js} +9 -7
  10. package/dist/{chunk-ATHSSDUF.js → chunk-4NHES7VK.mjs} +113 -31
  11. package/dist/chunk-AR22SXML.js +1043 -0
  12. package/dist/chunk-BDF4AMWX.mjs +3773 -0
  13. package/dist/chunk-BDYEENHT.js +224 -0
  14. package/dist/chunk-BMH5AV44.js +3773 -0
  15. package/dist/chunk-ELOOF35R.mjs +131 -0
  16. package/dist/chunk-JFPU5GQI.mjs +1043 -0
  17. package/dist/{chunk-INZBKOHY.js → chunk-K6M7MDZ4.mjs} +9 -7
  18. package/dist/chunk-MS34J5LY.cjs +224 -0
  19. package/dist/{chunk-XNOTJSMZ.mjs → chunk-PPUXIH5R.js} +113 -31
  20. package/dist/chunk-R3R2FVLG.cjs +131 -0
  21. package/dist/{chunk-ZTDK2DLG.cjs → chunk-STVLQ3XD.cjs} +169 -87
  22. package/dist/chunk-TGIFUAK4.cjs +3773 -0
  23. package/dist/chunk-TO7IKXYT.js +131 -0
  24. package/dist/chunk-UMAZLXAB.mjs +224 -0
  25. package/dist/{chunk-XDINDYNA.cjs → chunk-VEZNF5GZ.cjs} +136 -134
  26. package/dist/chunk-XPZNXSVN.cjs +1043 -0
  27. package/dist/core/index.cjs +216 -0
  28. package/dist/core/index.d.ts +673 -0
  29. package/dist/core/index.js +216 -0
  30. package/dist/core/index.mjs +216 -0
  31. package/dist/{effect-ISvXPLgc.d.ts → effect-CMOQKX8y.d.ts} +202 -31
  32. package/dist/http/index.cjs +3177 -187
  33. package/dist/http/index.d.ts +1692 -9
  34. package/dist/http/index.js +3164 -174
  35. package/dist/http/index.mjs +3164 -174
  36. package/dist/index.cjs +936 -219
  37. package/dist/index.d.ts +313 -36
  38. package/dist/index.js +830 -113
  39. package/dist/index.mjs +830 -113
  40. package/dist/{stream-BvukHxCv.d.ts → stream-FQm9h4Mg.d.ts} +12 -4
  41. package/dist/tracing-DNT9jEbr.d.ts +106 -0
  42. package/package.json +11 -3
  43. package/wasm/pkg/brass_runtime_wasm_engine.d.ts +95 -16
  44. package/wasm/pkg/brass_runtime_wasm_engine.js +715 -15
  45. package/wasm/pkg/brass_runtime_wasm_engine_bg.wasm +0 -0
  46. package/wasm/pkg/brass_runtime_wasm_engine_bg.wasm.d.ts +78 -7
  47. package/dist/chunk-2P4PD6D7.cjs +0 -2557
  48. package/dist/chunk-7F2R7A2V.mjs +0 -2557
  49. 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; var _class3;
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
- var _chunkZTDK2DLGcjs = require('./chunk-ZTDK2DLG.cjs');
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
- // src/core/runtime/linkedQueue.ts
125
- var LinkedQueue = (_class = class {constructor() { _class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this); }
126
- __init() {this.head = null}
127
- __init2() {this.tail = null}
128
- __init3() {this.len = 0}
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 _chunk2P4PD6D7cjs.asyncSync.call(void 0, () => makeQueue(capacity, strategy, options));
170
+ return _chunkTGIFUAK4cjs.asyncSync.call(void 0, () => makeQueue(capacity, strategy, options));
169
171
  }
170
172
  function makeQueue(capacity, strategy, options) {
171
- const items = _chunk2P4PD6D7cjs.makeBoundedRingBuffer.call(void 0, capacity, capacity, options);
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) => _chunk2P4PD6D7cjs.async.call(void 0, (_env, cb) => {
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: () => _chunk2P4PD6D7cjs.async.call(void 0, (_env, cb) => {
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) => _chunk2P4PD6D7cjs.asyncSucceed.call(void 0,
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]) => _chunk2P4PD6D7cjs.asyncSync.call(void 0, () => {
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 = () => _chunk2P4PD6D7cjs.asyncFold.call(void 0,
272
- _chunkZTDK2DLGcjs.uncons.call(void 0, upstream),
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) => _chunk2P4PD6D7cjs.asyncFlatMap.call(void 0, bounded(capacity, strategy), (_q) => {
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 _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, void 0);
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 _chunk2P4PD6D7cjs.asyncFlatMap.call(void 0, q.offer(sig), afterOffer);
344
+ return _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0, q.offer(sig), afterOffer);
288
345
  };
289
- const loop = () => _chunk2P4PD6D7cjs.asyncFlatMap.call(void 0, nextSignal(), onSignal);
290
- producer = _chunk2P4PD6D7cjs.fork.call(void 0, loop(), env);
291
- return _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, void 0);
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
- _chunk2P4PD6D7cjs.unsafeGetCurrentRuntime.call(void 0, ).fork(start(env)).join(() => {
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
- _chunk2P4PD6D7cjs.unsafeGetCurrentRuntime.call(void 0, ).fork(takeEff).join((ex) => {
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, _chunkZTDK2DLGcjs.fromPull.call(void 0, pullDown)] });
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: _chunk2P4PD6D7cjs.none } });
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: _chunk2P4PD6D7cjs.some.call(void 0, sig.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 _chunkZTDK2DLGcjs.fromPull.call(void 0, pullDown);
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 _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, false);
395
+ if (closed) return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, false);
339
396
  const size = queues.size;
340
- if (size === 0) return _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, true);
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 = _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, true);
402
+ let eff = _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, true);
346
403
  for (const q of queues) {
347
- eff = _chunk2P4PD6D7cjs.asyncFlatMap.call(void 0,
404
+ eff = _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0,
348
405
  eff,
349
- (okSoFar) => _chunk2P4PD6D7cjs.asyncFlatMap.call(void 0, q.offer(a), (ok) => _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, okSoFar && ok))
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 = _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, true);
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 = _chunk2P4PD6D7cjs.asyncFlatMap.call(void 0,
418
+ eff = _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0,
362
419
  eff,
363
- (okSoFar) => _chunk2P4PD6D7cjs.asyncFlatMap.call(void 0, publish(a), (ok) => _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, okSoFar && ok))
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 _chunk2P4PD6D7cjs.asyncTotal.call(void 0, () => {
427
+ return _chunkTGIFUAK4cjs.asyncTotal.call(void 0, () => {
371
428
  throw { _tag: "HubClosed" };
372
429
  });
373
430
  }
374
- return _chunk2P4PD6D7cjs.asyncFlatMap.call(void 0,
431
+ return _chunkTGIFUAK4cjs.asyncFlatMap.call(void 0,
375
432
  bounded(capacity, toQueueStrategy(strategy)),
376
- (q) => _chunk2P4PD6D7cjs.asyncSync.call(void 0, () => {
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 = () => _chunk2P4PD6D7cjs.asyncSync.call(void 0, () => {
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 _chunkZTDK2DLGcjs.foreachStream.call(void 0,
461
+ return _chunkSTVLQ3XDcjs.foreachStream.call(void 0,
405
462
  stream,
406
- (a) => _chunk2P4PD6D7cjs.asyncFlatMap.call(void 0, hub.publish(a), () => _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, void 0))
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 _chunkZTDK2DLGcjs.managedStream.call(void 0,
411
- _chunk2P4PD6D7cjs.asyncFlatMap.call(void 0, hub.subscribe(), (sub) => {
412
- const loop = _chunkZTDK2DLGcjs.fromPull.call(void 0,
413
- _chunk2P4PD6D7cjs.asyncFlatMap.call(void 0,
414
- _chunk2P4PD6D7cjs.asyncMapError.call(void 0, sub.take(), (_queueClosed) => _chunk2P4PD6D7cjs.none),
415
- (a) => _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, [a, loop])
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 _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, {
475
+ return _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, {
419
476
  stream: loop,
420
- release: (_exit) => _chunk2P4PD6D7cjs.asyncSync.call(void 0, () => sub.unsubscribe())
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 = _chunk2P4PD6D7cjs.resolveWasmModule.call(void 0, );
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 JsChunker = (_class2 = class {
435
- constructor(maxChunkSize, fallbackUsed = false) {;_class2.prototype.__init4.call(this);_class2.prototype.__init5.call(this);_class2.prototype.__init6.call(this);_class2.prototype.__init7.call(this);_class2.prototype.__init8.call(this);
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
- __init4() {this.engine = "js"}
442
- __init5() {this.values = []}
443
- __init6() {this.emittedChunks = 0}
444
- __init7() {this.emittedItems = 0}
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: "js",
476
- fallbackUsed: this.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
- }, _class2);
487
- var WasmChunker = (_class3 = class {
488
- __init9() {this.engine = "wasm"}
489
- __init10() {this.fallbackUsed = false}
541
+ }, _class);
542
+ var WasmChunker = (_class2 = class {
543
+ __init6() {this.engine = "wasm"}
544
+ __init7() {this.fallbackUsed = false}
490
545
 
491
- constructor(maxChunkSize) {;_class3.prototype.__init9.call(this);_class3.prototype.__init10.call(this);
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
- }, _class3);
577
+ }, _class2);
523
578
  function makeStreamChunker(chunkSize, options = {}) {
524
579
  const size = Math.max(1, chunkSize | 0);
525
- const engine = _nullishCoalesce(options.engine, () => ( "auto"));
526
- if (engine === "js") return new JsChunker(size, false);
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
- return resolveWasmChunkBuffer() ? new WasmChunker(size) : new JsChunker(size, true);
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) => _chunkZTDK2DLGcjs.fromPull.call(void 0, fillChunk(cur, makeStreamChunker(size, options)));
533
- const fillChunk = (cur, chunker) => _chunk2P4PD6D7cjs.asyncFold.call(void 0,
534
- _chunkZTDK2DLGcjs.uncons.call(void 0, cur),
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 _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, [chunker.takeChunk(), _chunkZTDK2DLGcjs.fromPull.call(void 0, _chunk2P4PD6D7cjs.asyncFail.call(void 0, _chunk2P4PD6D7cjs.none))]);
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 _chunk2P4PD6D7cjs.asyncFail.call(void 0, opt);
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 _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, [chunker.takeChunk(), loop(tail)]);
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 _chunkZTDK2DLGcjs.fromPull.call(void 0, _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, [head, pullOne(tail, rest)]));
610
+ return _chunkSTVLQ3XDcjs.fromPull.call(void 0, _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [head, pullOne(tail, rest)]));
556
611
  }
557
- return _chunkZTDK2DLGcjs.fromPull.call(void 0,
558
- _chunk2P4PD6D7cjs.asyncFold.call(void 0,
559
- _chunkZTDK2DLGcjs.uncons.call(void 0, rest),
560
- (opt) => _chunk2P4PD6D7cjs.asyncFail.call(void 0, 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 _chunkZTDK2DLGcjs.uncons.call(void 0, pullOne(mapped, tail));
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 _chunkZTDK2DLGcjs.fromPull.call(void 0, _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, [head, pullOne(tail, rest)]));
631
+ return _chunkSTVLQ3XDcjs.fromPull.call(void 0, _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [head, pullOne(tail, rest)]));
577
632
  }
578
- return _chunkZTDK2DLGcjs.fromPull.call(void 0,
579
- _chunk2P4PD6D7cjs.asyncFold.call(void 0,
580
- _chunk2P4PD6D7cjs.asyncMapError.call(void 0, _chunkZTDK2DLGcjs.uncons.call(void 0, rest), (opt) => _chunkZTDK2DLGcjs.widenOpt.call(void 0, opt)),
581
- (opt) => _chunk2P4PD6D7cjs.asyncFail.call(void 0, opt),
582
- ([chunk, tail]) => _chunk2P4PD6D7cjs.asyncFold.call(void 0,
583
- _chunk2P4PD6D7cjs.asyncMapError.call(void 0, f(chunk), (e) => ({ _tag: "Some", value: e })),
584
- (opt) => _chunk2P4PD6D7cjs.asyncFail.call(void 0, opt),
585
- (mapped) => _chunkZTDK2DLGcjs.uncons.call(void 0, pullOne(mapped, tail))
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 andThen(p1, p2) {
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 compose(p2, p1) {
602
- return andThen(p1, p2);
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
- return ((input) => {
609
- const onError = (opt) => _chunk2P4PD6D7cjs.asyncFail.call(void 0, opt);
610
- const onSuccess = ([a, tail]) => _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, [f(a), loop(tail)]);
611
- const loop = (cur) => _chunkZTDK2DLGcjs.fromPull.call(void 0,
612
- _chunk2P4PD6D7cjs.asyncFold.call(void 0, _chunkZTDK2DLGcjs.uncons.call(void 0, cur), onError, onSuccess)
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
- return ((input) => {
619
- const onError = (opt) => _chunk2P4PD6D7cjs.asyncFail.call(void 0, opt);
620
- const onSuccess = ([a, tail]) => pred(a) ? _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, [a, loop(tail)]) : next(tail);
621
- const next = (cur) => _chunk2P4PD6D7cjs.asyncFold.call(void 0, _chunkZTDK2DLGcjs.uncons.call(void 0, cur), onError, onSuccess);
622
- const loop = (cur) => _chunkZTDK2DLGcjs.fromPull.call(void 0, next(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) => _chunk2P4PD6D7cjs.asyncFail.call(void 0, opt);
629
- const next = (cur) => _chunk2P4PD6D7cjs.asyncFold.call(void 0,
630
- _chunkZTDK2DLGcjs.uncons.call(void 0, cur),
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" ? _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, [ob.value, loop(tail)]) : next(tail);
1102
+ return ob._tag === "Some" ? _chunkTGIFUAK4cjs.asyncSucceed.call(void 0, [ob.value, loop(tail)]) : next(tail);
635
1103
  }
636
1104
  );
637
- const loop = (cur) => _chunkZTDK2DLGcjs.fromPull.call(void 0, next(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
- return ((input) => {
1111
+ const pipeline = ((input) => {
644
1112
  const loop = (cur, remaining) => {
645
- if (remaining <= 0) return _chunkZTDK2DLGcjs.emptyStream.call(void 0, );
646
- return _chunkZTDK2DLGcjs.fromPull.call(void 0,
647
- _chunk2P4PD6D7cjs.asyncFold.call(void 0,
648
- _chunkZTDK2DLGcjs.uncons.call(void 0, cur),
649
- (opt) => _chunk2P4PD6D7cjs.asyncFail.call(void 0, opt),
650
- ([a, tail]) => _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, [a, loop(tail, remaining - 1)])
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
- return ((input) => {
1129
+ const pipeline = ((input) => {
660
1130
  const skip = (cur, remaining) => {
661
1131
  if (remaining <= 0) return cur;
662
- return _chunkZTDK2DLGcjs.fromPull.call(void 0,
663
- _chunk2P4PD6D7cjs.asyncFold.call(void 0,
664
- _chunkZTDK2DLGcjs.uncons.call(void 0, cur),
665
- (opt) => _chunk2P4PD6D7cjs.asyncFail.call(void 0, opt),
666
- ([_a, tail]) => _chunkZTDK2DLGcjs.uncons.call(void 0, skip(tail, remaining - 1))
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) => _chunk2P4PD6D7cjs.asyncMapError.call(void 0, fa, (e) => _chunk2P4PD6D7cjs.some.call(void 0, e));
676
- const loop = (cur) => _chunkZTDK2DLGcjs.fromPull.call(void 0,
677
- _chunk2P4PD6D7cjs.asyncFold.call(void 0,
678
- _chunk2P4PD6D7cjs.asyncMapError.call(void 0,
679
- _chunkZTDK2DLGcjs.uncons.call(void 0, cur),
680
- (opt) => _chunkZTDK2DLGcjs.widenOpt.call(void 0, 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) => _chunk2P4PD6D7cjs.asyncFail.call(void 0, opt),
683
- ([a, tail]) => _chunk2P4PD6D7cjs.asyncFold.call(void 0,
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) => _chunk2P4PD6D7cjs.asyncFail.call(void 0, opt2),
687
- (b) => _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, [b, loop(tail)])
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) => _chunk2P4PD6D7cjs.asyncFlatMap.call(void 0, f(a), () => _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, 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 _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, { chunk: acc, rest: cur });
711
- return _chunk2P4PD6D7cjs.asyncFold.call(void 0,
712
- _chunkZTDK2DLGcjs.uncons.call(void 0, cur),
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 _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, { chunk: acc, rest: _chunkZTDK2DLGcjs.emptyStream.call(void 0, ) });
715
- return _chunk2P4PD6D7cjs.asyncFail.call(void 0, opt);
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) => _chunkZTDK2DLGcjs.fromPull.call(void 0,
721
- _chunk2P4PD6D7cjs.asyncFold.call(void 0,
722
- _chunkZTDK2DLGcjs.uncons.call(void 0, cur),
723
- (opt) => _chunk2P4PD6D7cjs.asyncFail.call(void 0, opt),
724
- ([a, tail]) => _chunk2P4PD6D7cjs.asyncFlatMap.call(void 0,
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 }) => _chunk2P4PD6D7cjs.asyncSucceed.call(void 0, [chunk, loop(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, fallbackUsed = false) {
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
- return { requested, engine, data, fallbackUsed: requested === "auto" && engine !== "wasm" };
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
- exports.Async = _chunk2P4PD6D7cjs.Async; exports.Cause = _chunk2P4PD6D7cjs.Cause; exports.DefaultHostExecutor = _chunk2P4PD6D7cjs.DefaultHostExecutor; exports.EngineFiberHandle = _chunk2P4PD6D7cjs.EngineFiberHandle; exports.Exit = _chunk2P4PD6D7cjs.Exit; exports.HostRegistry = _chunk2P4PD6D7cjs.HostRegistry; exports.JsFiberEngine = _chunk2P4PD6D7cjs.JsFiberEngine; exports.NoopHooks = _chunk2P4PD6D7cjs.NoopHooks; exports.ProgramBuilder = _chunk2P4PD6D7cjs.ProgramBuilder; exports.PushStatus = _chunk2P4PD6D7cjs.PushStatus; exports.ReferenceWasmBridge = _chunk2P4PD6D7cjs.ReferenceWasmBridge; exports.RingBuffer = _chunk2P4PD6D7cjs.RingBuffer; exports.Runtime = _chunk2P4PD6D7cjs.Runtime; exports.RuntimeFiber = _chunk2P4PD6D7cjs.RuntimeFiber; exports.Scheduler = _chunk2P4PD6D7cjs.Scheduler; exports.Scope = _chunk2P4PD6D7cjs.Scope; exports.WasmFiberEngine = _chunk2P4PD6D7cjs.WasmFiberEngine; exports.WasmFiberRegistryBridge = _chunk2P4PD6D7cjs.WasmFiberRegistryBridge; exports.WasmPackFiberBridge = _chunk2P4PD6D7cjs.WasmPackFiberBridge; exports.acquireRelease = _chunk2P4PD6D7cjs.acquireRelease; exports.andThen = andThen; exports.assertNever = _chunkZTDK2DLGcjs.assertNever; exports.async = _chunk2P4PD6D7cjs.async; exports.asyncCatchAll = _chunk2P4PD6D7cjs.asyncCatchAll; exports.asyncFail = _chunk2P4PD6D7cjs.asyncFail; exports.asyncFlatMap = _chunk2P4PD6D7cjs.asyncFlatMap; exports.asyncFold = _chunk2P4PD6D7cjs.asyncFold; exports.asyncInterruptible = _chunk2P4PD6D7cjs.asyncInterruptible; exports.asyncMap = _chunk2P4PD6D7cjs.asyncMap; exports.asyncMapError = _chunk2P4PD6D7cjs.asyncMapError; exports.asyncSucceed = _chunk2P4PD6D7cjs.asyncSucceed; exports.asyncSync = _chunk2P4PD6D7cjs.asyncSync; exports.asyncTotal = _chunk2P4PD6D7cjs.asyncTotal; exports.bounded = bounded; exports.broadcast = broadcast; exports.broadcastToHub = broadcastToHub; exports.buffer = buffer; exports.bufferP = bufferP; exports.catchAll = _chunk2P4PD6D7cjs.catchAll; exports.chunks = chunks; exports.chunksP = chunksP; exports.collectAllPar = _chunk2P4PD6D7cjs.collectAllPar; exports.collectStream = _chunkZTDK2DLGcjs.collectStream; exports.compose = compose; exports.concatStream = _chunkZTDK2DLGcjs.concatStream; exports.dropP = dropP; exports.emitStream = _chunkZTDK2DLGcjs.emitStream; exports.emptyStream = _chunkZTDK2DLGcjs.emptyStream; exports.end = _chunk2P4PD6D7cjs.end; exports.engineStats = engineStats; exports.fail = _chunk2P4PD6D7cjs.fail; exports.filterMapP = filterMapP; exports.filterP = filterP; exports.flatMap = _chunk2P4PD6D7cjs.flatMap; exports.flattenStream = _chunkZTDK2DLGcjs.flattenStream; exports.foreachStream = _chunkZTDK2DLGcjs.foreachStream; exports.fork = _chunk2P4PD6D7cjs.fork; exports.fromArray = _chunkZTDK2DLGcjs.fromArray; exports.fromHub = fromHub; exports.fromPromiseAbortable = _chunk2P4PD6D7cjs.fromPromiseAbortable; exports.fromPull = _chunkZTDK2DLGcjs.fromPull; exports.getBenchmarkBudget = _chunk2P4PD6D7cjs.getBenchmarkBudget; exports.getCurrentFiber = _chunk2P4PD6D7cjs.getCurrentFiber; exports.globalScheduler = _chunk2P4PD6D7cjs.globalScheduler; exports.groupedP = groupedP; exports.identity = identity; exports.linkAbortController = linkAbortController; exports.makeBoundedRingBuffer = _chunk2P4PD6D7cjs.makeBoundedRingBuffer; exports.makeCancelToken = makeCancelToken; exports.makeHub = makeHub; exports.makeStreamChunker = makeStreamChunker; exports.managedStream = _chunkZTDK2DLGcjs.managedStream; exports.map = _chunk2P4PD6D7cjs.map; exports.mapAsync = _chunk2P4PD6D7cjs.mapAsync; exports.mapChunks = mapChunks; exports.mapChunksEffect = mapChunksEffect; exports.mapChunksEffectP = mapChunksEffectP; exports.mapEffectP = mapEffectP; exports.mapError = _chunk2P4PD6D7cjs.mapError; exports.mapP = mapP; exports.mapStream = _chunkZTDK2DLGcjs.mapStream; exports.mapTryAsync = _chunk2P4PD6D7cjs.mapTryAsync; exports.merge = _chunkZTDK2DLGcjs.merge; exports.mergeStream = _chunkZTDK2DLGcjs.mergeStream; exports.none = _chunk2P4PD6D7cjs.none; exports.orElseOptional = _chunk2P4PD6D7cjs.orElseOptional; exports.race = _chunk2P4PD6D7cjs.race; exports.raceWith = _chunk2P4PD6D7cjs.raceWith; exports.rangeStream = _chunkZTDK2DLGcjs.rangeStream; exports.runtimeCapabilities = _chunk2P4PD6D7cjs.runtimeCapabilities; exports.selectedEngineStats = selectedEngineStats; exports.setBenchmarkBudget = _chunk2P4PD6D7cjs.setBenchmarkBudget; exports.some = _chunk2P4PD6D7cjs.some; exports.streamFromReadableStream = _chunkZTDK2DLGcjs.streamFromReadableStream; exports.succeed = _chunk2P4PD6D7cjs.succeed; exports.sync = _chunk2P4PD6D7cjs.sync; exports.takeP = takeP; exports.tapEffectP = tapEffectP; exports.toPromise = _chunk2P4PD6D7cjs.toPromise; exports.uncons = _chunkZTDK2DLGcjs.uncons; exports.unit = _chunk2P4PD6D7cjs.unit; exports.unsafeGetCurrentRuntime = _chunk2P4PD6D7cjs.unsafeGetCurrentRuntime; exports.unsafeRunAsync = _chunk2P4PD6D7cjs.unsafeRunAsync; exports.unsafeRunFoldWithEnv = _chunk2P4PD6D7cjs.unsafeRunFoldWithEnv; exports.unwrapScoped = _chunkZTDK2DLGcjs.unwrapScoped; exports.via = via; exports.widenOpt = _chunkZTDK2DLGcjs.widenOpt; exports.withAsyncPromise = _chunk2P4PD6D7cjs.withAsyncPromise; exports.withCurrentFiber = _chunk2P4PD6D7cjs.withCurrentFiber; exports.withScope = _chunk2P4PD6D7cjs.withScope; exports.withScopeAsync = _chunk2P4PD6D7cjs.withScopeAsync; exports.zip = _chunkZTDK2DLGcjs.zip; exports.zipPar = _chunk2P4PD6D7cjs.zipPar;
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;