brass-runtime 1.12.0 → 1.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ 'use strict';var chunkXPOARCND_cjs=require('../chunk-XPOARCND.cjs'),chunkK47BP5A2_cjs=require('../chunk-K47BP5A2.cjs');var b={make(t,e){return {get:t,set:e}},over(t,e){return r=>t.set(e(t.get(r)))(r)},compose(t,e){return b.make(r=>t.get(e.get(r)),r=>n=>e.set(t.set(r)(e.get(n)))(n))}};var A={headers:b.make(t=>t.headers??{},t=>e=>({...e,headers:t}))};var I=t=>e=>b.over(A.headers,r=>({...r,...t}))(e),C=t=>e=>b.over(A.headers,r=>({...t,...r}))(e),g=(t,e)=>r=>b.over(A.headers,n=>n[t]?n:{...n,[t]:e})(r);var v=t=>typeof t=="object"&&t!==null&&"_tag"in t,J=t=>v(t)?t:typeof t=="object"&&t!==null&&t.name==="AbortError"?{_tag:"Abort"}:{_tag:"FetchError",message:String(t)},M=t=>chunkK47BP5A2_cjs.da(e=>new Promise((r,n)=>{if(e.aborted)return n({_tag:"Abort"});let u=setTimeout(r,t),p=()=>{clearTimeout(u),n({_tag:"Abort"});};e.addEventListener("abort",p,{once:true});}),J);var lt=t=>e=>T(t(e)),T=t=>Object.assign((e=>t(e)),{with:e=>T(e(t))}),O=t=>t instanceof DOMException&&t.name==="AbortError"?{_tag:"Abort"}:typeof t=="object"&&t&&"_tag"in t?t:{_tag:"FetchError",message:String(t)},k=t=>{if(t){if(typeof Headers<"u"&&t instanceof Headers){let e={};return t.forEach((r,n)=>e[n]=r),e}if(Array.isArray(t))return Object.fromEntries(t);if(typeof t=="object")return {...t}}},D=t=>e=>{let r=Object.keys(t).length?C(t)(e):e,n=k(e.init?.headers);return n&&Object.keys(n).length&&(r=C(n)(r)),r};function N(t={}){let e=t.baseUrl??"",r=t.headers??{},n=D(r);return u=>chunkK47BP5A2_cjs.da(async p=>{let y=n(u),i;try{i=new URL(y.url,e);}catch{throw {_tag:"BadUrl",message:`URL inv\xE1lida: ${y.url}`}}let a=performance.now(),s=await fetch(i,{...y.init??{},method:y.method,headers:A.headers.get(y),body:y.body,signal:p}),c={};s.headers.forEach((d,m)=>c[m]=d);let o=chunkXPOARCND_cjs.s(s.body,O);return {status:s.status,statusText:s.statusText,headers:c,body:o,ms:Math.round(performance.now()-a)}},O)}function _(t={}){let e=t.baseUrl??"",r=t.headers??{},n=D(r);return T(p=>chunkK47BP5A2_cjs.da(async y=>{let i=n(p),a;try{a=new URL(i.url,e);}catch{throw {_tag:"BadUrl",message:`URL inv\xE1lida: ${i.url}`}}let s=performance.now(),c=await fetch(a,{...i.init??{},method:i.method,headers:A.headers.get(i),body:i.body,signal:y}),o=await c.text(),d={};return c.headers.forEach((m,H)=>d[H]=m),{status:c.status,statusText:c.statusText,headers:d,bodyText:o,ms:Math.round(performance.now()-s)}},O))}var G=(t,e,r)=>Math.max(e,Math.min(r,t)),z=t=>t._tag==="FetchError",Z=t=>t===408||t===429||t===500||t===502||t===503||t===504,F=(t,e,r)=>{let n=e*Math.pow(2,t),u=G(n,0,r);return Math.floor(Math.random()*u)},$=t=>{let e=Object.keys(t).find(p=>p.toLowerCase()==="retry-after");if(!e)return;let r=t[e]?.trim();if(!r)return;let n=Number(r);if(Number.isFinite(n))return Math.max(0,Math.floor(n*1e3));let u=Date.parse(r);if(Number.isFinite(u))return Math.max(0,u-Date.now())},U=t=>e=>(r=>{let n=u=>chunkK47BP5A2_cjs.b(e(r),p=>{if(p._tag==="Abort"||p._tag==="BadUrl")return chunkK47BP5A2_cjs.g(p);if(!(u<t.maxRetries&&(t.retryOnError??z)(p)))return chunkK47BP5A2_cjs.g(p);let i=F(u,t.baseDelayMs,t.maxDelayMs);return chunkK47BP5A2_cjs.l(M(i),()=>n(u+1))},p=>{if(!(u<t.maxRetries&&(t.retryOnStatus??Z)(p.status)))return chunkK47BP5A2_cjs.f(p);let a=$(p.headers)??F(u,t.baseDelayMs,t.maxDelayMs);return chunkK47BP5A2_cjs.l(M(a),()=>n(u+1))});return n(0)});var K=["GET","HEAD","OPTIONS"],Q=t=>t===408||t===429||t===500||t===502||t===503||t===504,V=t=>t._tag==="FetchError";var X=(t,e,r)=>Math.max(e,Math.min(r,t)),L=(t,e,r)=>{let n=Math.max(0,e),u=Math.max(0,r),p=n*Math.pow(2,t),y=X(p,0,u);return Math.floor(Math.random()*y)},Y=(t,e)=>{let r=Object.keys(t).find(n=>n.toLowerCase()===e.toLowerCase());return r?t[r]:void 0},tt=t=>{let e=Y(t,"retry-after")?.trim();if(!e)return;let r=Number(e);if(Number.isFinite(r))return Math.max(0,Math.floor(r*1e3));let n=Date.parse(e);if(Number.isFinite(n))return Math.max(0,n-Date.now())},j=t=>e=>{let r=t.retryOnMethods??K,n=t.retryOnStatus??Q,u=t.retryOnError??V,p=i=>r.includes(i.method),y=(i,a)=>p(i)?chunkK47BP5A2_cjs.b(e(i),s=>{if(s._tag==="Abort"||s._tag==="BadUrl")return chunkK47BP5A2_cjs.g(s);if(!(a<t.maxRetries&&u(s)))return chunkK47BP5A2_cjs.g(s);let o=L(a,t.baseDelayMs,t.maxDelayMs);return chunkK47BP5A2_cjs.l(M(o),()=>y(i,a+1))},s=>{if(!(a<t.maxRetries&&n(s.status)))return chunkK47BP5A2_cjs.f(s);let d=tt(s.headers)??L(a,t.baseDelayMs,t.maxDelayMs);return chunkK47BP5A2_cjs.l(M(d),()=>y(i,a+1))}):e(i);return i=>y(i,0)};var et=(t,e)=>{try{return new URL(e,t??"").toString()}catch{return (t??"")+e}},B=(t={})=>{let e=_(t),r=a=>chunkK47BP5A2_cjs.o((s,c)=>chunkK47BP5A2_cjs.ca(s,c))(a),n=a=>e(a),u=a=>{let{headers:s,...c}=a??{};return {headers:k(s),init:c}},p=a=>s=>a?I(a)(s):s;return {cfg:t,wire:e,withPromise:r,requestRaw:n,splitInit:u,applyInitHeaders:p,buildReq:(a,s,c,o)=>{let d=u(c),m={method:a,url:s,...o&&o.length>0?{body:o}:{},init:d.init};return p(d.headers)(m)},toResponse:(a,s)=>({status:a.status,statusText:a.statusText,headers:a.headers,body:s})}};function _t(t={}){let e=B(t),r=n=>{let u=o=>n(o),p=o=>e.withPromise(u(o));return {request:p,get:(o,d)=>p(e.buildReq("GET",o,d)),post:(o,d,m)=>p(e.buildReq("POST",o,m,d)),getText:(o,d)=>{let m=e.buildReq("GET",o,d);return e.withPromise(chunkK47BP5A2_cjs.q(u(m),H=>e.toResponse(H,H.bodyText)))},getJson:(o,d)=>{let m=e.buildReq("GET",o,d),H=g("accept","application/json")(m);return e.withPromise(chunkK47BP5A2_cjs.q(u(H),l=>e.toResponse(l,JSON.parse(l.bodyText))))},postJson:(o,d,m)=>{let H=e.buildReq("POST",o,m,JSON.stringify(d??{})),l=g("content-type","application/json")(g("accept","application/json")(H));return e.withPromise(chunkK47BP5A2_cjs.q(u(l),P=>e.toResponse(P,JSON.parse(P.bodyText))))},with:o=>r(n.with(o)),withRetry:o=>r(n.with(j(o))),wire:n}};return r(e.wire)}function Ut(t={}){let e=B(t),r=(s,c,o)=>({request:s,urlFinal:et(e.cfg.baseUrl,s.url),startedAt:o,durationMs:c.ms}),n=s=>{let c=Date.now();return e.withPromise(chunkK47BP5A2_cjs.q(e.requestRaw(s),o=>({wire:o,meta:r(s,o,c)})))};return {request:n,get:(s,c)=>{let o=e.buildReq("GET",s,c);return n(o)},getText:(s,c)=>{let o=e.buildReq("GET",s,c),d=Date.now();return e.withPromise(chunkK47BP5A2_cjs.q(e.requestRaw(o),m=>({wire:m,response:e.toResponse(m,m.bodyText),meta:r(o,m,d)})))},getJson:(s,c)=>{let o=e.buildReq("GET",s,c),d=g("accept","application/json")(o),m=Date.now();return e.withPromise(chunkK47BP5A2_cjs.q(e.requestRaw(d),H=>({wire:H,response:e.toResponse(H,JSON.parse(H.bodyText)),meta:r(d,H,m)})))},post:(s,c,o)=>{let d=e.buildReq("POST",s,o,c);return n(d)},postJson:(s,c,o)=>{let d=e.buildReq("POST",s,o,JSON.stringify(c??{})),m=g("content-type","application/json")(g("accept","application/json")(d)),H=Date.now();return e.withPromise(chunkK47BP5A2_cjs.q(e.requestRaw(m),l=>({wire:l,response:e.toResponse(l,JSON.parse(l.bodyText)),meta:r(m,l,H)})))}}}function Lt(t={}){let e=N(t),r=n=>{let u=i=>chunkK47BP5A2_cjs.o((a,s)=>chunkK47BP5A2_cjs.ca(a,s))(i),p=i=>u(n(i)),y=(i,a)=>{let s={method:"GET",url:i,init:a},c=g("accept","*/*")(s);return p(c)};return {request:p,getStream:y,get:y,with:i=>r(i(n)),withRetry:i=>r(U(i)(n)),wire:n}};return r(e)}exports.decorate=T;exports.httpClient=_t;exports.httpClientStream=Lt;exports.httpClientWithMeta=Ut;exports.makeHttp=_;exports.makeHttpStream=N;exports.normalizeHeadersInit=k;exports.withMiddleware=lt;exports.withRetryStream=U;
@@ -1,4 +1,5 @@
1
- import { Z as ZStream, A as Async, x as AsyncWithPromise } from '../stream-DVfZWtYZ.mjs';
1
+ import { A as Async, a as AsyncWithPromise } from '../effect-ISvXPLgc.mjs';
2
+ import { Z as ZStream } from '../stream-C0-LWnUP.mjs';
2
3
 
3
4
  type RetryPolicy = {
4
5
  maxRetries: number;
@@ -1,4 +1,5 @@
1
- import { Z as ZStream, A as Async, x as AsyncWithPromise } from '../stream-DVfZWtYZ.js';
1
+ import { A as Async, a as AsyncWithPromise } from '../effect-ISvXPLgc.js';
2
+ import { Z as ZStream } from '../stream-BvukHxCv.js';
2
3
 
3
4
  type RetryPolicy = {
4
5
  maxRetries: number;
@@ -1 +1 @@
1
- 'use strict';var chunk5PIZGM6Q_js=require('../chunk-5PIZGM6Q.js');var b={make(t,e){return {get:t,set:e}},over(t,e){return r=>t.set(e(t.get(r)))(r)},compose(t,e){return b.make(r=>t.get(e.get(r)),r=>n=>e.set(t.set(r)(e.get(n)))(n))}};var A={headers:b.make(t=>t.headers??{},t=>e=>({...e,headers:t}))};var I=t=>e=>b.over(A.headers,r=>({...r,...t}))(e),C=t=>e=>b.over(A.headers,r=>({...t,...r}))(e),g=(t,e)=>r=>b.over(A.headers,n=>n[t]?n:{...n,[t]:e})(r);var v=t=>typeof t=="object"&&t!==null&&"_tag"in t,J=t=>v(t)?t:typeof t=="object"&&t!==null&&t.name==="AbortError"?{_tag:"Abort"}:{_tag:"FetchError",message:String(t)},M=t=>chunk5PIZGM6Q_js.Q(e=>new Promise((r,n)=>{if(e.aborted)return n({_tag:"Abort"});let u=setTimeout(r,t),p=()=>{clearTimeout(u),n({_tag:"Abort"});};e.addEventListener("abort",p,{once:true});}),J);var lt=t=>e=>T(t(e)),T=t=>Object.assign((e=>t(e)),{with:e=>T(e(t))}),O=t=>t instanceof DOMException&&t.name==="AbortError"?{_tag:"Abort"}:typeof t=="object"&&t&&"_tag"in t?t:{_tag:"FetchError",message:String(t)},k=t=>{if(t){if(typeof Headers<"u"&&t instanceof Headers){let e={};return t.forEach((r,n)=>e[n]=r),e}if(Array.isArray(t))return Object.fromEntries(t);if(typeof t=="object")return {...t}}},D=t=>e=>{let r=Object.keys(t).length?C(t)(e):e,n=k(e.init?.headers);return n&&Object.keys(n).length&&(r=C(n)(r)),r};function N(t={}){let e=t.baseUrl??"",r=t.headers??{},n=D(r);return u=>chunk5PIZGM6Q_js.Q(async p=>{let y=n(u),i;try{i=new URL(y.url,e);}catch{throw {_tag:"BadUrl",message:`URL inv\xE1lida: ${y.url}`}}let a=performance.now(),s=await fetch(i,{...y.init??{},method:y.method,headers:A.headers.get(y),body:y.body,signal:p}),c={};s.headers.forEach((d,m)=>c[m]=d);let o=chunk5PIZGM6Q_js.pa(s.body,O);return {status:s.status,statusText:s.statusText,headers:c,body:o,ms:Math.round(performance.now()-a)}},O)}function _(t={}){let e=t.baseUrl??"",r=t.headers??{},n=D(r);return T(p=>chunk5PIZGM6Q_js.Q(async y=>{let i=n(p),a;try{a=new URL(i.url,e);}catch{throw {_tag:"BadUrl",message:`URL inv\xE1lida: ${i.url}`}}let s=performance.now(),c=await fetch(a,{...i.init??{},method:i.method,headers:A.headers.get(i),body:i.body,signal:y}),o=await c.text(),d={};return c.headers.forEach((m,H)=>d[H]=m),{status:c.status,statusText:c.statusText,headers:d,bodyText:o,ms:Math.round(performance.now()-s)}},O))}var G=(t,e,r)=>Math.max(e,Math.min(r,t)),z=t=>t._tag==="FetchError",Z=t=>t===408||t===429||t===500||t===502||t===503||t===504,F=(t,e,r)=>{let n=e*Math.pow(2,t),u=G(n,0,r);return Math.floor(Math.random()*u)},$=t=>{let e=Object.keys(t).find(p=>p.toLowerCase()==="retry-after");if(!e)return;let r=t[e]?.trim();if(!r)return;let n=Number(r);if(Number.isFinite(n))return Math.max(0,Math.floor(n*1e3));let u=Date.parse(r);if(Number.isFinite(u))return Math.max(0,u-Date.now())},U=t=>e=>(r=>{let n=u=>chunk5PIZGM6Q_js.b(e(r),p=>{if(p._tag==="Abort"||p._tag==="BadUrl")return chunk5PIZGM6Q_js.g(p);if(!(u<t.maxRetries&&(t.retryOnError??z)(p)))return chunk5PIZGM6Q_js.g(p);let i=F(u,t.baseDelayMs,t.maxDelayMs);return chunk5PIZGM6Q_js.l(M(i),()=>n(u+1))},p=>{if(!(u<t.maxRetries&&(t.retryOnStatus??Z)(p.status)))return chunk5PIZGM6Q_js.f(p);let a=$(p.headers)??F(u,t.baseDelayMs,t.maxDelayMs);return chunk5PIZGM6Q_js.l(M(a),()=>n(u+1))});return n(0)});var K=["GET","HEAD","OPTIONS"],Q=t=>t===408||t===429||t===500||t===502||t===503||t===504,V=t=>t._tag==="FetchError";var X=(t,e,r)=>Math.max(e,Math.min(r,t)),L=(t,e,r)=>{let n=Math.max(0,e),u=Math.max(0,r),p=n*Math.pow(2,t),y=X(p,0,u);return Math.floor(Math.random()*y)},Y=(t,e)=>{let r=Object.keys(t).find(n=>n.toLowerCase()===e.toLowerCase());return r?t[r]:void 0},tt=t=>{let e=Y(t,"retry-after")?.trim();if(!e)return;let r=Number(e);if(Number.isFinite(r))return Math.max(0,Math.floor(r*1e3));let n=Date.parse(e);if(Number.isFinite(n))return Math.max(0,n-Date.now())},j=t=>e=>{let r=t.retryOnMethods??K,n=t.retryOnStatus??Q,u=t.retryOnError??V,p=i=>r.includes(i.method),y=(i,a)=>p(i)?chunk5PIZGM6Q_js.b(e(i),s=>{if(s._tag==="Abort"||s._tag==="BadUrl")return chunk5PIZGM6Q_js.g(s);if(!(a<t.maxRetries&&u(s)))return chunk5PIZGM6Q_js.g(s);let o=L(a,t.baseDelayMs,t.maxDelayMs);return chunk5PIZGM6Q_js.l(M(o),()=>y(i,a+1))},s=>{if(!(a<t.maxRetries&&n(s.status)))return chunk5PIZGM6Q_js.f(s);let d=tt(s.headers)??L(a,t.baseDelayMs,t.maxDelayMs);return chunk5PIZGM6Q_js.l(M(d),()=>y(i,a+1))}):e(i);return i=>y(i,0)};var et=(t,e)=>{try{return new URL(e,t??"").toString()}catch{return (t??"")+e}},B=(t={})=>{let e=_(t),r=a=>chunk5PIZGM6Q_js.o((s,c)=>chunk5PIZGM6Q_js.P(s,c))(a),n=a=>e(a),u=a=>{let{headers:s,...c}=a??{};return {headers:k(s),init:c}},p=a=>s=>a?I(a)(s):s;return {cfg:t,wire:e,withPromise:r,requestRaw:n,splitInit:u,applyInitHeaders:p,buildReq:(a,s,c,o)=>{let d=u(c),m={method:a,url:s,...o&&o.length>0?{body:o}:{},init:d.init};return p(d.headers)(m)},toResponse:(a,s)=>({status:a.status,statusText:a.statusText,headers:a.headers,body:s})}};function _t(t={}){let e=B(t),r=n=>{let u=o=>n(o),p=o=>e.withPromise(u(o));return {request:p,get:(o,d)=>p(e.buildReq("GET",o,d)),post:(o,d,m)=>p(e.buildReq("POST",o,m,d)),getText:(o,d)=>{let m=e.buildReq("GET",o,d);return e.withPromise(chunk5PIZGM6Q_js.q(u(m),H=>e.toResponse(H,H.bodyText)))},getJson:(o,d)=>{let m=e.buildReq("GET",o,d),H=g("accept","application/json")(m);return e.withPromise(chunk5PIZGM6Q_js.q(u(H),l=>e.toResponse(l,JSON.parse(l.bodyText))))},postJson:(o,d,m)=>{let H=e.buildReq("POST",o,m,JSON.stringify(d??{})),l=g("content-type","application/json")(g("accept","application/json")(H));return e.withPromise(chunk5PIZGM6Q_js.q(u(l),P=>e.toResponse(P,JSON.parse(P.bodyText))))},with:o=>r(n.with(o)),withRetry:o=>r(n.with(j(o))),wire:n}};return r(e.wire)}function Ut(t={}){let e=B(t),r=(s,c,o)=>({request:s,urlFinal:et(e.cfg.baseUrl,s.url),startedAt:o,durationMs:c.ms}),n=s=>{let c=Date.now();return e.withPromise(chunk5PIZGM6Q_js.q(e.requestRaw(s),o=>({wire:o,meta:r(s,o,c)})))};return {request:n,get:(s,c)=>{let o=e.buildReq("GET",s,c);return n(o)},getText:(s,c)=>{let o=e.buildReq("GET",s,c),d=Date.now();return e.withPromise(chunk5PIZGM6Q_js.q(e.requestRaw(o),m=>({wire:m,response:e.toResponse(m,m.bodyText),meta:r(o,m,d)})))},getJson:(s,c)=>{let o=e.buildReq("GET",s,c),d=g("accept","application/json")(o),m=Date.now();return e.withPromise(chunk5PIZGM6Q_js.q(e.requestRaw(d),H=>({wire:H,response:e.toResponse(H,JSON.parse(H.bodyText)),meta:r(d,H,m)})))},post:(s,c,o)=>{let d=e.buildReq("POST",s,o,c);return n(d)},postJson:(s,c,o)=>{let d=e.buildReq("POST",s,o,JSON.stringify(c??{})),m=g("content-type","application/json")(g("accept","application/json")(d)),H=Date.now();return e.withPromise(chunk5PIZGM6Q_js.q(e.requestRaw(m),l=>({wire:l,response:e.toResponse(l,JSON.parse(l.bodyText)),meta:r(m,l,H)})))}}}function Lt(t={}){let e=N(t),r=n=>{let u=i=>chunk5PIZGM6Q_js.o((a,s)=>chunk5PIZGM6Q_js.P(a,s))(i),p=i=>u(n(i)),y=(i,a)=>{let s={method:"GET",url:i,init:a},c=g("accept","*/*")(s);return p(c)};return {request:p,getStream:y,get:y,with:i=>r(i(n)),withRetry:i=>r(U(i)(n)),wire:n}};return r(e)}exports.decorate=T;exports.httpClient=_t;exports.httpClientStream=Lt;exports.httpClientWithMeta=Ut;exports.makeHttp=_;exports.makeHttpStream=N;exports.normalizeHeadersInit=k;exports.withMiddleware=lt;exports.withRetryStream=U;
1
+ import {s}from'../chunk-JAQUSSUV.js';import {da,q,b as b$1,g as g$1,l,f,o,ca}from'../chunk-LTHJNW5A.js';var b={make(t,e){return {get:t,set:e}},over(t,e){return r=>t.set(e(t.get(r)))(r)},compose(t,e){return b.make(r=>t.get(e.get(r)),r=>n=>e.set(t.set(r)(e.get(n)))(n))}};var A={headers:b.make(t=>t.headers??{},t=>e=>({...e,headers:t}))};var I=t=>e=>b.over(A.headers,r=>({...r,...t}))(e),C=t=>e=>b.over(A.headers,r=>({...t,...r}))(e),g=(t,e)=>r=>b.over(A.headers,n=>n[t]?n:{...n,[t]:e})(r);var v=t=>typeof t=="object"&&t!==null&&"_tag"in t,J=t=>v(t)?t:typeof t=="object"&&t!==null&&t.name==="AbortError"?{_tag:"Abort"}:{_tag:"FetchError",message:String(t)},M=t=>da(e=>new Promise((r,n)=>{if(e.aborted)return n({_tag:"Abort"});let u=setTimeout(r,t),p=()=>{clearTimeout(u),n({_tag:"Abort"});};e.addEventListener("abort",p,{once:true});}),J);var lt=t=>e=>T(t(e)),T=t=>Object.assign((e=>t(e)),{with:e=>T(e(t))}),O=t=>t instanceof DOMException&&t.name==="AbortError"?{_tag:"Abort"}:typeof t=="object"&&t&&"_tag"in t?t:{_tag:"FetchError",message:String(t)},k=t=>{if(t){if(typeof Headers<"u"&&t instanceof Headers){let e={};return t.forEach((r,n)=>e[n]=r),e}if(Array.isArray(t))return Object.fromEntries(t);if(typeof t=="object")return {...t}}},D=t=>e=>{let r=Object.keys(t).length?C(t)(e):e,n=k(e.init?.headers);return n&&Object.keys(n).length&&(r=C(n)(r)),r};function N(t={}){let e=t.baseUrl??"",r=t.headers??{},n=D(r);return u=>da(async p=>{let y=n(u),i;try{i=new URL(y.url,e);}catch{throw {_tag:"BadUrl",message:`URL inv\xE1lida: ${y.url}`}}let a=performance.now(),s$1=await fetch(i,{...y.init??{},method:y.method,headers:A.headers.get(y),body:y.body,signal:p}),c={};s$1.headers.forEach((d,m)=>c[m]=d);let o=s(s$1.body,O);return {status:s$1.status,statusText:s$1.statusText,headers:c,body:o,ms:Math.round(performance.now()-a)}},O)}function _(t={}){let e=t.baseUrl??"",r=t.headers??{},n=D(r);return T(p=>da(async y=>{let i=n(p),a;try{a=new URL(i.url,e);}catch{throw {_tag:"BadUrl",message:`URL inv\xE1lida: ${i.url}`}}let s=performance.now(),c=await fetch(a,{...i.init??{},method:i.method,headers:A.headers.get(i),body:i.body,signal:y}),o=await c.text(),d={};return c.headers.forEach((m,H)=>d[H]=m),{status:c.status,statusText:c.statusText,headers:d,bodyText:o,ms:Math.round(performance.now()-s)}},O))}var G=(t,e,r)=>Math.max(e,Math.min(r,t)),z=t=>t._tag==="FetchError",Z=t=>t===408||t===429||t===500||t===502||t===503||t===504,F=(t,e,r)=>{let n=e*Math.pow(2,t),u=G(n,0,r);return Math.floor(Math.random()*u)},$=t=>{let e=Object.keys(t).find(p=>p.toLowerCase()==="retry-after");if(!e)return;let r=t[e]?.trim();if(!r)return;let n=Number(r);if(Number.isFinite(n))return Math.max(0,Math.floor(n*1e3));let u=Date.parse(r);if(Number.isFinite(u))return Math.max(0,u-Date.now())},U=t=>e=>(r=>{let n=u=>b$1(e(r),p=>{if(p._tag==="Abort"||p._tag==="BadUrl")return g$1(p);if(!(u<t.maxRetries&&(t.retryOnError??z)(p)))return g$1(p);let i=F(u,t.baseDelayMs,t.maxDelayMs);return l(M(i),()=>n(u+1))},p=>{if(!(u<t.maxRetries&&(t.retryOnStatus??Z)(p.status)))return f(p);let a=$(p.headers)??F(u,t.baseDelayMs,t.maxDelayMs);return l(M(a),()=>n(u+1))});return n(0)});var K=["GET","HEAD","OPTIONS"],Q=t=>t===408||t===429||t===500||t===502||t===503||t===504,V=t=>t._tag==="FetchError";var X=(t,e,r)=>Math.max(e,Math.min(r,t)),L=(t,e,r)=>{let n=Math.max(0,e),u=Math.max(0,r),p=n*Math.pow(2,t),y=X(p,0,u);return Math.floor(Math.random()*y)},Y=(t,e)=>{let r=Object.keys(t).find(n=>n.toLowerCase()===e.toLowerCase());return r?t[r]:void 0},tt=t=>{let e=Y(t,"retry-after")?.trim();if(!e)return;let r=Number(e);if(Number.isFinite(r))return Math.max(0,Math.floor(r*1e3));let n=Date.parse(e);if(Number.isFinite(n))return Math.max(0,n-Date.now())},j=t=>e=>{let r=t.retryOnMethods??K,n=t.retryOnStatus??Q,u=t.retryOnError??V,p=i=>r.includes(i.method),y=(i,a)=>p(i)?b$1(e(i),s=>{if(s._tag==="Abort"||s._tag==="BadUrl")return g$1(s);if(!(a<t.maxRetries&&u(s)))return g$1(s);let o=L(a,t.baseDelayMs,t.maxDelayMs);return l(M(o),()=>y(i,a+1))},s=>{if(!(a<t.maxRetries&&n(s.status)))return f(s);let d=tt(s.headers)??L(a,t.baseDelayMs,t.maxDelayMs);return l(M(d),()=>y(i,a+1))}):e(i);return i=>y(i,0)};var et=(t,e)=>{try{return new URL(e,t??"").toString()}catch{return (t??"")+e}},B=(t={})=>{let e=_(t),r=a=>o((s,c)=>ca(s,c))(a),n=a=>e(a),u=a=>{let{headers:s,...c}=a??{};return {headers:k(s),init:c}},p=a=>s=>a?I(a)(s):s;return {cfg:t,wire:e,withPromise:r,requestRaw:n,splitInit:u,applyInitHeaders:p,buildReq:(a,s,c,o)=>{let d=u(c),m={method:a,url:s,...o&&o.length>0?{body:o}:{},init:d.init};return p(d.headers)(m)},toResponse:(a,s)=>({status:a.status,statusText:a.statusText,headers:a.headers,body:s})}};function _t(t={}){let e=B(t),r=n=>{let u=o=>n(o),p=o=>e.withPromise(u(o));return {request:p,get:(o,d)=>p(e.buildReq("GET",o,d)),post:(o,d,m)=>p(e.buildReq("POST",o,m,d)),getText:(o,d)=>{let m=e.buildReq("GET",o,d);return e.withPromise(q(u(m),H=>e.toResponse(H,H.bodyText)))},getJson:(o,d)=>{let m=e.buildReq("GET",o,d),H=g("accept","application/json")(m);return e.withPromise(q(u(H),l=>e.toResponse(l,JSON.parse(l.bodyText))))},postJson:(o,d,m)=>{let H=e.buildReq("POST",o,m,JSON.stringify(d??{})),l=g("content-type","application/json")(g("accept","application/json")(H));return e.withPromise(q(u(l),P=>e.toResponse(P,JSON.parse(P.bodyText))))},with:o=>r(n.with(o)),withRetry:o=>r(n.with(j(o))),wire:n}};return r(e.wire)}function Ut(t={}){let e=B(t),r=(s,c,o)=>({request:s,urlFinal:et(e.cfg.baseUrl,s.url),startedAt:o,durationMs:c.ms}),n=s=>{let c=Date.now();return e.withPromise(q(e.requestRaw(s),o=>({wire:o,meta:r(s,o,c)})))};return {request:n,get:(s,c)=>{let o=e.buildReq("GET",s,c);return n(o)},getText:(s,c)=>{let o=e.buildReq("GET",s,c),d=Date.now();return e.withPromise(q(e.requestRaw(o),m=>({wire:m,response:e.toResponse(m,m.bodyText),meta:r(o,m,d)})))},getJson:(s,c)=>{let o=e.buildReq("GET",s,c),d=g("accept","application/json")(o),m=Date.now();return e.withPromise(q(e.requestRaw(d),H=>({wire:H,response:e.toResponse(H,JSON.parse(H.bodyText)),meta:r(d,H,m)})))},post:(s,c,o)=>{let d=e.buildReq("POST",s,o,c);return n(d)},postJson:(s,c,o)=>{let d=e.buildReq("POST",s,o,JSON.stringify(c??{})),m=g("content-type","application/json")(g("accept","application/json")(d)),H=Date.now();return e.withPromise(q(e.requestRaw(m),l=>({wire:l,response:e.toResponse(l,JSON.parse(l.bodyText)),meta:r(m,l,H)})))}}}function Lt(t={}){let e=N(t),r=n=>{let u=i=>o((a,s)=>ca(a,s))(i),p=i=>u(n(i)),y=(i,a)=>{let s={method:"GET",url:i,init:a},c=g("accept","*/*")(s);return p(c)};return {request:p,getStream:y,get:y,with:i=>r(i(n)),withRetry:i=>r(U(i)(n)),wire:n}};return r(e)}export{T as decorate,_t as httpClient,Lt as httpClientStream,Ut as httpClientWithMeta,_ as makeHttp,N as makeHttpStream,k as normalizeHeadersInit,lt as withMiddleware,U as withRetryStream};
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ 'use strict';var chunkXPOARCND_cjs=require('./chunk-XPOARCND.cjs'),chunkK47BP5A2_cjs=require('./chunk-K47BP5A2.cjs');function En(){let n=false,e=new Set;return {isCancelled:()=>n,onCancel:r=>{if(n){try{r();}catch{}return ()=>{}}return e.add(r),()=>{e.delete(r);}},cancel:()=>{n||(n=true,e.forEach(r=>r()),e.clear());}}}function An(n,e){return n.onCancel(()=>e.abort())}var C=class{head=null;tail=null;len=0;get length(){return this.len}isEmpty(){return this.len===0}push(e){let t={value:e,next:null,prev:this.tail,removed:false};return this.tail?this.tail.next=t:this.head=t,this.tail=t,this.len++,t}shift(){let e=this.head;if(e)return this.unlink(e),e.value}remove(e){e.removed||this.unlink(e);}unlink(e){e.removed=true;let{prev:t,next:r}=e;t?t.next=r:this.head=r,r?r.prev=t:this.tail=t,e.next=null,e.prev=null,this.len--;}};function B(n,e="backpressure",t={}){return chunkK47BP5A2_cjs.h(()=>X(n,e,t))}function X(n,e,t){let r=chunkK47BP5A2_cjs.H(n,n,t),i=false,a={_tag:"QueueClosed"},o=new C,s=new C;return {size:()=>r.length,shutdown:()=>{if(!i){for(i=true;s.length>0;)s.shift()({_tag:"Failure",cause:{_tag:"Fail",error:a}});for(;o.length>0;)o.shift().cb(false);r.clear();}},offer:l=>chunkK47BP5A2_cjs.j((f,y)=>{if(i){y({_tag:"Success",value:false});return}if(s.length>0){s.shift()({_tag:"Success",value:l}),y({_tag:"Success",value:true});return}if(r.length<n){r.push(l),y({_tag:"Success",value:true});return}if(e==="dropping"){y({_tag:"Success",value:false});return}if(e==="sliding"){r.shift(),r.push(l),y({_tag:"Success",value:true});return}let R=o.push({a:l,cb:E=>y({_tag:"Success",value:E})});return ()=>{o.remove(R);}}),take:()=>chunkK47BP5A2_cjs.j((l,f)=>{if(r.length>0){let c=r.shift();if(f({_tag:"Success",value:c}),o.length>0&&r.length<n){let E=o.shift();r.push(E.a),E.cb(true);}return}if(o.length>0){let c=o.shift();c.cb(true),f({_tag:"Success",value:c.a});return}if(i){f({_tag:"Failure",cause:{_tag:"Fail",error:a}});return}let y=s.push(f);return ()=>{s.remove(y);}})}}var Y={_tag:"End"};function q(n,e,t="backpressure"){let r=false,i=null,a=null,o=n,s=c=>chunkK47BP5A2_cjs.f(c._tag==="None"?Y:{_tag:"Fail",error:c.value}),u=([c,E])=>chunkK47BP5A2_cjs.h(()=>(o=E,{_tag:"Elem",value:c})),l=()=>chunkK47BP5A2_cjs.b(chunkXPOARCND_cjs.k(o),s,u),f=c=>chunkK47BP5A2_cjs.l(B(e,t),E=>{i=E;let x,Z=()=>x._tag!=="Elem"?chunkK47BP5A2_cjs.f(void 0):Q(),v=z=>(x=z,chunkK47BP5A2_cjs.l(i.offer(z),Z)),Q=()=>chunkK47BP5A2_cjs.l(l(),v);return a=chunkK47BP5A2_cjs.aa(Q(),c),chunkK47BP5A2_cjs.f(void 0)}),y={_tag:"Async",register:(c,E)=>{(()=>{if(!r){r=true,chunkK47BP5A2_cjs.O().fork(f(c)).join(()=>{R(c,E);});return}R(c,E);})();}};function R(c,E){let x=i.take();chunkK47BP5A2_cjs.O().fork(x).join(Z=>{if(Z._tag!=="Success")return;let v=Z.value;switch(v._tag){case "Elem":E({_tag:"Success",value:[v.value,chunkXPOARCND_cjs.b(y)]});return;case "End":a?.interrupt?.(),E({_tag:"Failure",cause:{_tag:"Fail",error:chunkK47BP5A2_cjs.r}});return;case "Fail":a?.interrupt?.(),E({_tag:"Failure",cause:{_tag:"Fail",error:chunkK47BP5A2_cjs.s(v.error)}});return}});}return chunkXPOARCND_cjs.b(y)}var $=n=>n==="BackPressure"?"backpressure":n==="Dropping"?"dropping":"sliding";function ee(n,e="BackPressure"){let t=new Set,r=false,i=u=>{if(r)return chunkK47BP5A2_cjs.f(false);let l=t.size;if(l===0)return chunkK47BP5A2_cjs.f(true);if(l===1)return t.values().next().value.offer(u);let f=chunkK47BP5A2_cjs.f(true);for(let y of t)f=chunkK47BP5A2_cjs.l(f,R=>chunkK47BP5A2_cjs.l(y.offer(u),c=>chunkK47BP5A2_cjs.f(R&&c)));return f};return {publish:i,publishAll:u=>{let l=chunkK47BP5A2_cjs.f(true),f=u[Symbol.iterator]();for(;;){let y=f.next();if(y.done)break;let R=y.value;l=chunkK47BP5A2_cjs.l(l,c=>chunkK47BP5A2_cjs.l(i(R),E=>chunkK47BP5A2_cjs.f(c&&E)));}return l},subscribe:()=>r?chunkK47BP5A2_cjs.i(()=>{throw {_tag:"HubClosed"}}):chunkK47BP5A2_cjs.l(B(n,$(e)),u=>chunkK47BP5A2_cjs.h(()=>(t.add(u),{...u,unsubscribe:()=>{t.has(u)&&(t.delete(u),u.shutdown());}}))),shutdown:()=>chunkK47BP5A2_cjs.h(()=>{if(!r){r=true;for(let u of t)u.shutdown();t.clear();}})}}var $n=ee;function et(n,e){return chunkXPOARCND_cjs.p(n,t=>chunkK47BP5A2_cjs.l(e.publish(t),()=>chunkK47BP5A2_cjs.f(void 0)))}function nt(n){return chunkXPOARCND_cjs.d(chunkK47BP5A2_cjs.l(n.subscribe(),e=>{let t=chunkXPOARCND_cjs.b(chunkK47BP5A2_cjs.l(chunkK47BP5A2_cjs.d(e.take(),r=>chunkK47BP5A2_cjs.r),r=>chunkK47BP5A2_cjs.f([r,t])));return chunkK47BP5A2_cjs.f({stream:t,release:r=>chunkK47BP5A2_cjs.h(()=>e.unsubscribe())})}))}var _;function G(){return _!==void 0||(_=chunkK47BP5A2_cjs.G()?.BrassWasmChunkBuffer??null),_}var P=class{constructor(e,t=false){this.maxChunkSize=e;this.fallbackUsed=t;}maxChunkSize;fallbackUsed;engine="js";values=[];emittedChunks=0;emittedItems=0;flushes=0;get length(){return this.values.length}push(e){return this.values.length>=this.maxChunkSize?false:(this.values.push(e),true)}isFull(){return this.values.length>=this.maxChunkSize}isEmpty(){return this.values.length===0}takeChunk(){this.flushes+=1;let e=this.values;return this.values=[],e.length>0&&(this.emittedChunks+=1,this.emittedItems+=e.length),e}clear(){this.values=[];}stats(){return {engine:"js",fallbackUsed:this.fallbackUsed,data:{len:this.values.length,maxChunkSize:this.maxChunkSize,emittedChunks:this.emittedChunks,emittedItems:this.emittedItems,flushes:this.flushes}}}},T=class{engine="wasm";fallbackUsed=false;inner;constructor(e){let t=G();if(!t)throw new Error("brass-runtime wasm chunk buffer is not available. Run npm run build:wasm first.");this.inner=new t(e);}get length(){return this.inner.len()}get maxChunkSize(){return this.inner.max_chunk_size()}push(e){return this.inner.push(e)}isFull(){return this.inner.is_full()}isEmpty(){return this.inner.is_empty()}takeChunk(){return Array.from(this.inner.take_chunk())}clear(){this.inner.clear();}stats(){return {engine:"wasm",fallbackUsed:false,data:JSON.parse(this.inner.stats_json())}}};function ne(n,e={}){let t=Math.max(1,n|0),r=e.engine??"auto";return r==="js"?new P(t,false):r==="wasm"?new T(t):G()?new T(t):new P(t,true)}function F(n,e,t={}){let r=Math.max(1,e|0),i=o=>chunkXPOARCND_cjs.b(a(o,ne(r,t))),a=(o,s)=>chunkK47BP5A2_cjs.b(chunkXPOARCND_cjs.k(o),u=>u._tag==="None"&&!s.isEmpty()?chunkK47BP5A2_cjs.f([s.takeChunk(),chunkXPOARCND_cjs.b(chunkK47BP5A2_cjs.g(chunkK47BP5A2_cjs.r))]):chunkK47BP5A2_cjs.g(u),([u,l])=>(s.push(u),s.isFull()?chunkK47BP5A2_cjs.f([s.takeChunk(),i(l)]):a(l,s)));return i(n)}function pt(n,e,t,r={}){let i=(a,o)=>{if(a.length>0){let[s,...u]=a;return chunkXPOARCND_cjs.b(chunkK47BP5A2_cjs.f([s,i(u,o)]))}return chunkXPOARCND_cjs.b(chunkK47BP5A2_cjs.b(chunkXPOARCND_cjs.k(o),s=>chunkK47BP5A2_cjs.g(s),([s,u])=>{let l=t(s);return chunkXPOARCND_cjs.k(i(l,u))}))};return i([],F(n,e,r))}function L(n,e,t={}){return(r=>{let i=F(r,n,t),a=(o,s)=>{if(o.length>0){let[u,...l]=o;return chunkXPOARCND_cjs.b(chunkK47BP5A2_cjs.f([u,a(l,s)]))}return chunkXPOARCND_cjs.b(chunkK47BP5A2_cjs.b(chunkK47BP5A2_cjs.d(chunkXPOARCND_cjs.k(s),u=>chunkXPOARCND_cjs.a(u)),u=>chunkK47BP5A2_cjs.g(u),([u,l])=>chunkK47BP5A2_cjs.b(chunkK47BP5A2_cjs.d(e(u),f=>({_tag:"Some",value:f})),f=>chunkK47BP5A2_cjs.g(f),f=>chunkXPOARCND_cjs.k(a(f,l)))))};return a([],i)})}function kt(n,e){return e(n)}function te(n,e){return(t=>e(n(t)))}function bt(n,e){return te(e,n)}function xt(){return(n=>n)}function vt(n){return(e=>{let t=a=>chunkK47BP5A2_cjs.g(a),r=([a,o])=>chunkK47BP5A2_cjs.f([n(a),i(o)]),i=a=>chunkXPOARCND_cjs.b(chunkK47BP5A2_cjs.b(chunkXPOARCND_cjs.k(a),t,r));return i(e)})}function Ct(n){return(e=>{let t=o=>chunkK47BP5A2_cjs.g(o),r=([o,s])=>n(o)?chunkK47BP5A2_cjs.f([o,a(s)]):i(s),i=o=>chunkK47BP5A2_cjs.b(chunkXPOARCND_cjs.k(o),t,r),a=o=>chunkXPOARCND_cjs.b(i(o));return a(e)})}function Zt(n){return(e=>{let t=a=>chunkK47BP5A2_cjs.g(a),r=a=>chunkK47BP5A2_cjs.b(chunkXPOARCND_cjs.k(a),t,([o,s])=>{let u=n(o);return u._tag==="Some"?chunkK47BP5A2_cjs.f([u.value,i(s)]):r(s)}),i=a=>chunkXPOARCND_cjs.b(r(a));return i(e)})}function wt(n){let e=Math.max(0,n|0);return(t=>{let r=(i,a)=>a<=0?chunkXPOARCND_cjs.f():chunkXPOARCND_cjs.b(chunkK47BP5A2_cjs.b(chunkXPOARCND_cjs.k(i),o=>chunkK47BP5A2_cjs.g(o),([o,s])=>chunkK47BP5A2_cjs.f([o,r(s,a-1)])));return r(t,e)})}function Ot(n){let e=Math.max(0,n|0);return(t=>{let r=(i,a)=>a<=0?i:chunkXPOARCND_cjs.b(chunkK47BP5A2_cjs.b(chunkXPOARCND_cjs.k(i),o=>chunkK47BP5A2_cjs.g(o),([o,s])=>chunkXPOARCND_cjs.k(r(s,a-1))));return r(t,e)})}function re(n){return(e=>{let t=i=>chunkK47BP5A2_cjs.d(i,a=>chunkK47BP5A2_cjs.s(a)),r=i=>chunkXPOARCND_cjs.b(chunkK47BP5A2_cjs.b(chunkK47BP5A2_cjs.d(chunkXPOARCND_cjs.k(i),a=>chunkXPOARCND_cjs.a(a)),a=>chunkK47BP5A2_cjs.g(a),([a,o])=>chunkK47BP5A2_cjs.b(t(n(a)),s=>chunkK47BP5A2_cjs.g(s),s=>chunkK47BP5A2_cjs.f([s,r(o)]))));return r(e)})}function Bt(n){return re(e=>chunkK47BP5A2_cjs.l(n(e),()=>chunkK47BP5A2_cjs.f(e)))}function _t(n,e={}){return(t=>F(t,n,e))}function Pt(n,e,t={}){return L(n,e,t)}function Tt(n,e="backpressure"){return(t=>q(t,n,e))}function Ft(n){let e=Math.max(1,n|0);return(t=>{let r=(a,o,s)=>o<=0?chunkK47BP5A2_cjs.f({chunk:s,rest:a}):chunkK47BP5A2_cjs.b(chunkXPOARCND_cjs.k(a),u=>u._tag==="None"?chunkK47BP5A2_cjs.f({chunk:s,rest:chunkXPOARCND_cjs.f()}):chunkK47BP5A2_cjs.g(u),([u,l])=>r(l,o-1,[...s,u])),i=a=>chunkXPOARCND_cjs.b(chunkK47BP5A2_cjs.b(chunkXPOARCND_cjs.k(a),o=>chunkK47BP5A2_cjs.g(o),([o,s])=>chunkK47BP5A2_cjs.l(r(s,e-1,[o]),({chunk:u,rest:l})=>chunkK47BP5A2_cjs.f([u,i(l)]))));return i(t)})}function It(n,e,t=false){return {engine:n,data:e,fallbackUsed:t}}function Ht(n,e,t){return {requested:n,engine:e,data:t,fallbackUsed:n==="auto"&&e!=="wasm"}}Object.defineProperty(exports,"assertNever",{enumerable:true,get:function(){return chunkXPOARCND_cjs.l}});Object.defineProperty(exports,"collectStream",{enumerable:true,get:function(){return chunkXPOARCND_cjs.r}});Object.defineProperty(exports,"concatStream",{enumerable:true,get:function(){return chunkXPOARCND_cjs.h}});Object.defineProperty(exports,"emitStream",{enumerable:true,get:function(){return chunkXPOARCND_cjs.g}});Object.defineProperty(exports,"emptyStream",{enumerable:true,get:function(){return chunkXPOARCND_cjs.f}});Object.defineProperty(exports,"flattenStream",{enumerable:true,get:function(){return chunkXPOARCND_cjs.i}});Object.defineProperty(exports,"foreachStream",{enumerable:true,get:function(){return chunkXPOARCND_cjs.p}});Object.defineProperty(exports,"fromArray",{enumerable:true,get:function(){return chunkXPOARCND_cjs.q}});Object.defineProperty(exports,"fromPull",{enumerable:true,get:function(){return chunkXPOARCND_cjs.b}});Object.defineProperty(exports,"managedStream",{enumerable:true,get:function(){return chunkXPOARCND_cjs.d}});Object.defineProperty(exports,"mapStream",{enumerable:true,get:function(){return chunkXPOARCND_cjs.m}});Object.defineProperty(exports,"merge",{enumerable:true,get:function(){return chunkXPOARCND_cjs.j}});Object.defineProperty(exports,"mergeStream",{enumerable:true,get:function(){return chunkXPOARCND_cjs.e}});Object.defineProperty(exports,"rangeStream",{enumerable:true,get:function(){return chunkXPOARCND_cjs.n}});Object.defineProperty(exports,"streamFromReadableStream",{enumerable:true,get:function(){return chunkXPOARCND_cjs.s}});Object.defineProperty(exports,"uncons",{enumerable:true,get:function(){return chunkXPOARCND_cjs.k}});Object.defineProperty(exports,"unwrapScoped",{enumerable:true,get:function(){return chunkXPOARCND_cjs.c}});Object.defineProperty(exports,"widenOpt",{enumerable:true,get:function(){return chunkXPOARCND_cjs.a}});Object.defineProperty(exports,"zip",{enumerable:true,get:function(){return chunkXPOARCND_cjs.o}});Object.defineProperty(exports,"Async",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.a}});Object.defineProperty(exports,"Cause",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.t}});Object.defineProperty(exports,"DefaultHostExecutor",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.Q}});Object.defineProperty(exports,"EngineFiberHandle",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.U}});Object.defineProperty(exports,"Exit",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.u}});Object.defineProperty(exports,"HostRegistry",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.S}});Object.defineProperty(exports,"JsFiberEngine",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.R}});Object.defineProperty(exports,"NoopHooks",{enumerable:true,get:function(){return chunkK47BP5A2_cjs._}});Object.defineProperty(exports,"ProgramBuilder",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.T}});Object.defineProperty(exports,"PushStatus",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.E}});Object.defineProperty(exports,"ReferenceWasmBridge",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.V}});Object.defineProperty(exports,"RingBuffer",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.F}});Object.defineProperty(exports,"Runtime",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.$}});Object.defineProperty(exports,"RuntimeFiber",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.M}});Object.defineProperty(exports,"Scheduler",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.I}});Object.defineProperty(exports,"Scope",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.fa}});Object.defineProperty(exports,"WasmFiberEngine",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.Y}});Object.defineProperty(exports,"WasmFiberRegistryBridge",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.X}});Object.defineProperty(exports,"WasmPackFiberBridge",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.W}});Object.defineProperty(exports,"acquireRelease",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.m}});Object.defineProperty(exports,"async",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.j}});Object.defineProperty(exports,"asyncCatchAll",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.c}});Object.defineProperty(exports,"asyncFail",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.g}});Object.defineProperty(exports,"asyncFlatMap",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.l}});Object.defineProperty(exports,"asyncFold",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.b}});Object.defineProperty(exports,"asyncInterruptible",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.n}});Object.defineProperty(exports,"asyncMap",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.k}});Object.defineProperty(exports,"asyncMapError",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.d}});Object.defineProperty(exports,"asyncSucceed",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.f}});Object.defineProperty(exports,"asyncSync",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.h}});Object.defineProperty(exports,"asyncTotal",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.i}});Object.defineProperty(exports,"catchAll",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.B}});Object.defineProperty(exports,"collectAllPar",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.ka}});Object.defineProperty(exports,"end",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.D}});Object.defineProperty(exports,"fail",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.w}});Object.defineProperty(exports,"flatMap",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.z}});Object.defineProperty(exports,"fork",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.aa}});Object.defineProperty(exports,"fromPromiseAbortable",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.da}});Object.defineProperty(exports,"getBenchmarkBudget",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.L}});Object.defineProperty(exports,"getCurrentFiber",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.N}});Object.defineProperty(exports,"globalScheduler",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.J}});Object.defineProperty(exports,"makeBoundedRingBuffer",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.H}});Object.defineProperty(exports,"map",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.y}});Object.defineProperty(exports,"mapAsync",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.p}});Object.defineProperty(exports,"mapError",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.A}});Object.defineProperty(exports,"mapTryAsync",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.q}});Object.defineProperty(exports,"none",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.r}});Object.defineProperty(exports,"orElseOptional",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.C}});Object.defineProperty(exports,"race",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.ia}});Object.defineProperty(exports,"raceWith",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.la}});Object.defineProperty(exports,"runtimeCapabilities",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.Z}});Object.defineProperty(exports,"setBenchmarkBudget",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.K}});Object.defineProperty(exports,"some",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.s}});Object.defineProperty(exports,"succeed",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.v}});Object.defineProperty(exports,"sync",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.x}});Object.defineProperty(exports,"toPromise",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.ca}});Object.defineProperty(exports,"unit",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.e}});Object.defineProperty(exports,"unsafeGetCurrentRuntime",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.O}});Object.defineProperty(exports,"unsafeRunAsync",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.ba}});Object.defineProperty(exports,"unsafeRunFoldWithEnv",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.ea}});Object.defineProperty(exports,"withAsyncPromise",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.o}});Object.defineProperty(exports,"withCurrentFiber",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.P}});Object.defineProperty(exports,"withScope",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.ha}});Object.defineProperty(exports,"withScopeAsync",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.ga}});Object.defineProperty(exports,"zipPar",{enumerable:true,get:function(){return chunkK47BP5A2_cjs.ja}});exports.andThen=te;exports.bounded=B;exports.broadcast=$n;exports.broadcastToHub=et;exports.buffer=q;exports.bufferP=Tt;exports.chunks=F;exports.chunksP=_t;exports.compose=bt;exports.dropP=Ot;exports.engineStats=It;exports.filterMapP=Zt;exports.filterP=Ct;exports.fromHub=nt;exports.groupedP=Ft;exports.identity=xt;exports.linkAbortController=An;exports.makeCancelToken=En;exports.makeHub=ee;exports.makeStreamChunker=ne;exports.mapChunks=pt;exports.mapChunksEffect=L;exports.mapChunksEffectP=Pt;exports.mapEffectP=re;exports.mapP=vt;exports.selectedEngineStats=Ht;exports.takeP=wt;exports.tapEffectP=Bt;exports.via=kt;
package/dist/index.d.mts CHANGED
@@ -1,44 +1,123 @@
1
- import { Z as ZStream, A as Async, S as Scope, E as Exit, F as Fiber, O as Option } from './stream-DVfZWtYZ.mjs';
2
- export { x as AsyncWithPromise, J as CancelToken, I as Canceler, C as Cause, a9 as Concat, a8 as Emit, a7 as Empty, V as FiberId, W as FiberStatus, aa as Flatten, ab as FromPull, X as Interrupted, ae as Managed, ac as Merge, N as None, af as Normalize, R as Runtime, Y as RuntimeFiber, a5 as Scheduler, a1 as ScopeId, ad as Scoped, D as Some, a4 as Task, a as ZIO, v as acquireRelease, ar as assertNever, q as async, i as asyncCatchAll, l as asyncFail, t as asyncFlatMap, h as asyncFold, w as asyncInterruptible, r as asyncMap, j as asyncMapError, k as asyncSucceed, n as asyncSync, p as asyncTotal, e as catchAll, ax as collectStream, an as concatStream, am as emitStream, al as emptyStream, g as end, f as fail, c as flatMap, ao as flattenStream, av as foreachStream, M as fork, aw as fromArray, T as fromPromiseAbortable, ah as fromPull, _ as getCurrentFiber, a6 as globalScheduler, L as linkAbortController, K as makeCancelToken, aj as managedStream, m as map, z as mapAsync, d as mapError, as as mapStream, B as mapTryAsync, ap as merge, ak as mergeStream, G as none, o as orElseOptional, at as rangeStream, H as some, ay as streamFromReadableStream, s as succeed, b as sync, Q as toPromise, aq as uncons, u as unit, $ as unsafeGetCurrentRuntime, P as unsafeRunAsync, U as unsafeRunFoldWithEnv, ai as unwrapScoped, ag as widenOpt, y as withAsyncPromise, a0 as withCurrentFiber, a3 as withScope, a2 as withScopeAsync, au as zip } from './stream-DVfZWtYZ.mjs';
1
+ import { F as FiberEngine, W as WasmEngineRuntime, A as Async, R as RuntimeFiber, b as FiberEngineStats, c as Fiber, d as FiberId, e as FiberStatus, E as Exit, f as RuntimeEvent, g as WasmBridge, h as OpcodeProgram, i as FiberId$1, j as EngineEvent, k as RefId, N as NodeId, l as OpcodeNode, S as Scope, m as RingBufferOptions, n as EngineStats, O as Option } from './effect-ISvXPLgc.mjs';
2
+ export { o as AsyncRegisterRef, a as AsyncWithPromise, p as BoundedRingBuffer, C as CancelToken, q as Canceler, r as Cause, s as CustomHostAction, D as DbHostAction, t as DecodeRef, u as DefaultHostExecutor, v as EngineKind, w as EngineSelection, x as EngineSelectionMode, y as FiberEngineKind, z as FlatMapRef, B as FoldFailureRef, G as FoldSuccessRef, H as HostAction, I as HostActionKind, J as HostActionResult, K as HostExecutionContext, L as HostExecutor, M as HostRegistry, P as HttpHostAction, Q as Interrupted, T as Joiner, U as None, V as NoopHooks, X as ProgramBuilder, Y as ProgramPatch, _ as PushStatus, $ as QueueHostAction, a0 as RingBuffer, a1 as RingBufferEngine, a2 as RingBufferStatsData, a3 as Runtime, a4 as RuntimeCapabilities, a5 as RuntimeEngineMode, a6 as RuntimeOptions, a7 as Scheduler, a8 as SchedulerEngine, a9 as SchedulerOptions, aa as SchedulerStats, ab as SchedulerStatsData, ac as ScopeId, ad as Some, ae as SyncRef, af as Task, ag as WasmFiberEngine, ah as WasmFiberEngineOptions, Z as ZIO, ai as acquireRelease, aj as async, ak as asyncCatchAll, al as asyncFail, am as asyncFlatMap, an as asyncFold, ao as asyncInterruptible, ap as asyncMap, aq as asyncMapError, ar as asyncSucceed, as as asyncSync, at as asyncTotal, au as catchAll, av as end, aw as engineStats, ax as fail, ay as flatMap, az as fork, aA as fromPromiseAbortable, aB as getBenchmarkBudget, aC as getCurrentFiber, aD as globalScheduler, aE as linkAbortController, aF as makeBoundedRingBuffer, aG as makeCancelToken, aH as map, aI as mapAsync, aJ as mapError, aK as mapTryAsync, aL as none, aM as orElseOptional, aN as runtimeCapabilities, aO as selectedEngineStats, aP as setBenchmarkBudget, aQ as some, aR as succeed, aS as sync, aT as toPromise, aU as unit, aV as unsafeGetCurrentRuntime, aW as unsafeRunAsync, aX as unsafeRunFoldWithEnv, aY as withAsyncPromise, aZ as withCurrentFiber, a_ as withScope, a$ as withScopeAsync } from './effect-ISvXPLgc.mjs';
3
+ import { Z as ZStream } from './stream-C0-LWnUP.mjs';
4
+ export { C as Concat, E as Emit, a as Empty, F as Flatten, b as FromPull, M as Managed, c as Merge, N as Normalize, S as Scoped, d as assertNever, e as collectStream, f as concatStream, g as emitStream, h as emptyStream, i as flattenStream, j as foreachStream, k as fromArray, l as fromPull, m as managedStream, n as mapStream, o as merge, p as mergeStream, r as rangeStream, s as streamFromReadableStream, u as uncons, q as unwrapScoped, w as widenOpt, z as zip } from './stream-C0-LWnUP.mjs';
3
5
 
4
- type Node<T> = {
5
- value: T;
6
- next: Node<T> | null;
7
- prev: Node<T> | null;
8
- removed: boolean;
9
- };
10
- declare class LinkedQueue<T> {
11
- private head;
12
- private tail;
13
- private len;
14
- get length(): number;
15
- isEmpty(): boolean;
16
- push(value: T): Node<T>;
17
- shift(): T | undefined;
18
- remove(node: Node<T>): void;
19
- private unlink;
6
+ declare class JsFiberEngine<R> implements FiberEngine<R> {
7
+ private readonly runtime;
8
+ readonly kind: "js";
9
+ private startedFibers;
10
+ constructor(runtime: WasmEngineRuntime<R> & any);
11
+ fork<E, A>(effect: Async<R, E, A>, scopeId?: number): RuntimeFiber<R, E, A>;
12
+ stats(): FiberEngineStats;
20
13
  }
21
14
 
22
- declare const enum PushStatus {
23
- Ok = 0,
24
- Grew = 1,
25
- Dropped = 2
15
+ type InternalFiberStatus = "queued" | "running" | "suspended" | "done" | "failed" | "interrupted";
16
+ declare class EngineFiberHandle<R, E, A> implements Fiber<E, A> {
17
+ private readonly onScheduledStep;
18
+ private readonly onInterrupt;
19
+ private readonly onJoiner?;
20
+ private readonly onQueued?;
21
+ readonly id: FiberId;
22
+ readonly runtime: WasmEngineRuntime<R> & any;
23
+ fiberContext: any;
24
+ name?: string;
25
+ scopeId?: number;
26
+ parentFiberId?: number;
27
+ private result;
28
+ private readonly joiners;
29
+ private readonly finalizers;
30
+ private finalizersDrained;
31
+ private internalStatus;
32
+ private queued;
33
+ constructor(id: FiberId, runtime: WasmEngineRuntime<R> & any, onScheduledStep: (fiberId: FiberId) => void, onInterrupt: (fiberId: FiberId, reason: unknown) => void, onJoiner?: ((fiberId: FiberId) => void) | undefined, onQueued?: ((fiberId: FiberId) => void) | undefined);
34
+ status(): FiberStatus;
35
+ engineStatus(): InternalFiberStatus;
36
+ setEngineStatus(status: InternalFiberStatus): void;
37
+ join(cb: (exit: Exit<E, A>) => void): void;
38
+ interrupt(): void;
39
+ addFinalizer(f: (exit: Exit<E, A>) => void): void;
40
+ schedule(tag?: string): void;
41
+ emit(ev: RuntimeEvent): void;
42
+ succeed(value: A): void;
43
+ fail(error: E): void;
44
+ die(defect: unknown): void;
45
+ interrupted(): void;
46
+ complete(exit: Exit<E, A>): void;
47
+ private runFinalizersOnce;
26
48
  }
27
- declare class RingBuffer<T> {
28
- private buf;
29
- private head;
30
- private tail;
31
- private size_;
32
- private readonly maxCap;
33
- constructor(initialCapacity?: number, maxCapacity?: number);
34
- get length(): number;
35
- get capacity(): number;
36
- isEmpty(): boolean;
37
- push(value: T): PushStatus;
38
- shift(): T | undefined;
39
- clear(): void;
40
- private grow;
41
- private nextPow2;
49
+
50
+ declare class ReferenceWasmBridge implements WasmBridge {
51
+ readonly kind: "wasm-reference";
52
+ private nextFiberId;
53
+ private readonly fibers;
54
+ private started;
55
+ private completed;
56
+ private failed;
57
+ private interrupted;
58
+ createFiber(program: OpcodeProgram): FiberId$1;
59
+ poll(fiberId: FiberId$1): EngineEvent;
60
+ provideValue(fiberId: FiberId$1, valueRef: RefId): EngineEvent;
61
+ provideError(fiberId: FiberId$1, errorRef: RefId): EngineEvent;
62
+ provideEffect(fiberId: FiberId$1, root: NodeId, nodes: OpcodeNode[]): EngineEvent;
63
+ interrupt(fiberId: FiberId$1, reasonRef: RefId): EngineEvent;
64
+ dropFiber(fiberId: FiberId$1): void;
65
+ stats(): unknown;
66
+ private mustFiber;
67
+ private step;
68
+ private success;
69
+ private failure;
70
+ private suspend;
71
+ private markDone;
72
+ private markFailed;
73
+ }
74
+
75
+ declare class WasmPackFiberBridge implements WasmBridge {
76
+ readonly kind: "wasm";
77
+ private readonly vm;
78
+ constructor(modulePath?: string);
79
+ createFiber(program: OpcodeProgram): FiberId$1;
80
+ poll(fiberId: FiberId$1): EngineEvent;
81
+ provideValue(fiberId: FiberId$1, valueRef: RefId): EngineEvent;
82
+ provideError(fiberId: FiberId$1, errorRef: RefId): EngineEvent;
83
+ provideEffect(fiberId: FiberId$1, root: NodeId, nodes: OpcodeNode[]): EngineEvent;
84
+ interrupt(fiberId: FiberId$1, reasonRef: RefId): EngineEvent;
85
+ dropFiber(fiberId: FiberId$1): void;
86
+ stats(): unknown;
87
+ }
88
+
89
+ type WasmFiberRegistryStats = {
90
+ readonly live: number;
91
+ readonly queued: number;
92
+ readonly running: number;
93
+ readonly suspended: number;
94
+ readonly done: number;
95
+ readonly failed: number;
96
+ readonly interrupted: number;
97
+ readonly wakeQueueLen: number;
98
+ readonly registered: number;
99
+ readonly completed: number;
100
+ readonly wakeups: number;
101
+ readonly duplicateWakeups: number;
102
+ readonly joins: number;
103
+ };
104
+ type FiberRegistryStatus = "queued" | "running" | "suspended" | "done" | "failed" | "interrupted";
105
+ declare class WasmFiberRegistryBridge {
106
+ private readonly registry;
107
+ constructor();
108
+ registerFiber(fiberId: FiberId$1, parentId?: number, scopeId?: number): void;
109
+ markQueued(fiberId: FiberId$1): void;
110
+ markRunning(fiberId: FiberId$1): void;
111
+ markSuspended(fiberId: FiberId$1): void;
112
+ markDone(fiberId: FiberId$1, status: Exclude<FiberRegistryStatus, "queued" | "running" | "suspended">): number;
113
+ dropFiber(fiberId: FiberId$1): void;
114
+ addJoiner(fiberId: FiberId$1): void;
115
+ wake(fiberId: FiberId$1): boolean;
116
+ drainWakeup(): FiberId$1 | undefined;
117
+ drainWakeups(): FiberId$1[];
118
+ wakeQueueLength(): number;
119
+ stateOf(fiberId: FiberId$1): FiberRegistryStatus | "missing";
120
+ stats(): WasmFiberRegistryStats;
42
121
  }
43
122
 
44
123
  declare function buffer<R, E, A>(stream: ZStream<{} & R, E, A>, capacity: number, strategy?: "backpressure" | "dropping" | "sliding"): ZStream<{} & R, E, A>;
@@ -76,7 +155,8 @@ type Queue<A> = {
76
155
  size: () => number;
77
156
  shutdown: () => void;
78
157
  };
79
- declare function bounded<A>(capacity: number, strategy?: Strategy): Async<unknown, unknown, Queue<A>>;
158
+ type QueueOptions = RingBufferOptions;
159
+ declare function bounded<A>(capacity: number, strategy?: Strategy, options?: QueueOptions): Async<unknown, unknown, Queue<A>>;
80
160
 
81
161
  type HubStrategy = "BackPressure" | "Dropping" | "Sliding";
82
162
  type HubClosed = {
@@ -96,6 +176,42 @@ declare const broadcast: typeof makeHub;
96
176
  declare function broadcastToHub<R, E, A>(stream: ZStream<R, E, A>, hub: Hub<A>): Async<R, E, void>;
97
177
  declare function fromHub<A>(hub: Hub<A>): ZStream<unknown, HubClosed, A>;
98
178
 
179
+ type StreamChunkEngine = "auto" | "js" | "wasm";
180
+ type StreamChunkOptions = {
181
+ /**
182
+ * auto: use WASM when wasm/pkg is available, otherwise JS.
183
+ * js: always use the JS array chunker.
184
+ * wasm: require BrassWasmChunkBuffer from wasm/pkg.
185
+ */
186
+ engine?: StreamChunkEngine;
187
+ };
188
+ type StreamChunkStats = {
189
+ len: number;
190
+ maxChunkSize: number;
191
+ emittedChunks: number;
192
+ emittedItems: number;
193
+ flushes: number;
194
+ };
195
+ type Chunker<A> = {
196
+ readonly length: number;
197
+ readonly maxChunkSize: number;
198
+ push(value: A): boolean;
199
+ isFull(): boolean;
200
+ isEmpty(): boolean;
201
+ takeChunk(): readonly A[];
202
+ clear(): void;
203
+ stats(): EngineStats<StreamChunkStats>;
204
+ };
205
+ declare function makeStreamChunker<A>(chunkSize: number, options?: StreamChunkOptions): Chunker<A>;
206
+ /**
207
+ * Re-chunk a stream so downstream operators receive arrays instead of single
208
+ * items. This is the intended WASM boundary: pay the JS↔WASM crossing while
209
+ * assembling chunks, then process bigger batches downstream.
210
+ */
211
+ declare function chunks<R, E, A>(input: ZStream<R, E, A>, chunkSize: number, options?: StreamChunkOptions): ZStream<R, E, readonly A[]>;
212
+ declare function mapChunks<R, E, A, B>(input: ZStream<R, E, A>, chunkSize: number, f: (chunk: readonly A[]) => readonly B[], options?: StreamChunkOptions): ZStream<R, E, B>;
213
+ declare function mapChunksEffect<Rp, Ep, A, B>(chunkSize: number, f: (chunk: readonly A[]) => Async<Rp, Ep, readonly B[]>, options?: StreamChunkOptions): <R, E>(input: ZStream<R, E, A>) => ZStream<R & Rp, E | Ep, B>;
214
+
99
215
  /**
100
216
  * ZPipeline-style transformer.
101
217
  *
@@ -127,6 +243,10 @@ declare function dropP<A>(n: number): ZPipeline<unknown, never, A, A>;
127
243
  declare function mapEffectP<Rp, Ep, A, B>(f: (a: A) => Async<Rp, Ep, B>): ZPipeline<Rp, Ep, A, B>;
128
244
  /** Tap each element with an effect, preserving the element. */
129
245
  declare function tapEffectP<Rp, Ep, A>(f: (a: A) => Async<Rp, Ep, any>): ZPipeline<Rp, Ep, A, A>;
246
+ /** Re-chunk a stream into arrays of up to `chunkSize` elements. */
247
+ declare function chunksP<A>(chunkSize: number, options?: StreamChunkOptions): ZPipeline<unknown, never, A, readonly A[]>;
248
+ /** Apply one effect per chunk and flatten the returned chunk back to elements. */
249
+ declare function mapChunksEffectP<Rp, Ep, A, B>(chunkSize: number, f: (chunk: readonly A[]) => Async<Rp, Ep, readonly B[]>, options?: StreamChunkOptions): ZPipeline<Rp, Ep, A, B>;
130
250
  /** Buffer upstream using your existing queue-based buffer implementation. */
131
251
  declare function bufferP<A>(capacity: number, strategy?: "backpressure" | "dropping" | "sliding"): ZPipeline<unknown, never, A, A>;
132
252
  /**
@@ -135,4 +255,4 @@ declare function bufferP<A>(capacity: number, strategy?: "backpressure" | "dropp
135
255
  */
136
256
  declare function groupedP<A>(n: number): ZPipeline<unknown, never, A, A[]>;
137
257
 
138
- export { Async, Exit, Fiber, type Hub, type HubClosed, type HubStrategy, LinkedQueue, type Node, Option, PushStatus, type Queue, type QueueClosed, RingBuffer, Scope, type Strategy, type Subscription, type ZPipeline, ZStream, andThen, bounded, broadcast, broadcastToHub, buffer, bufferP, collectAllPar, compose, dropP, filterMapP, filterP, fromHub, groupedP, identity, makeHub, mapEffectP, mapP, race, raceWith, takeP, tapEffectP, via, zipPar };
258
+ export { Async, EngineEvent, EngineFiberHandle, EngineStats, Exit, Fiber, FiberEngine, FiberEngineStats, FiberId, FiberStatus, type Hub, type HubClosed, type HubStrategy, type InternalFiberStatus, JsFiberEngine, NodeId, OpcodeNode, OpcodeProgram, Option, type Queue, type QueueClosed, type QueueOptions, RefId, ReferenceWasmBridge, RingBufferOptions, RuntimeFiber, Scope, type Strategy, type StreamChunkEngine, type StreamChunkOptions, type StreamChunkStats, type Subscription, WasmBridge, WasmEngineRuntime, WasmFiberRegistryBridge, type WasmFiberRegistryStats, WasmPackFiberBridge, type ZPipeline, ZStream, andThen, bounded, broadcast, broadcastToHub, buffer, bufferP, chunks, chunksP, collectAllPar, compose, dropP, filterMapP, filterP, fromHub, groupedP, identity, makeHub, makeStreamChunker, mapChunks, mapChunksEffect, mapChunksEffectP, mapEffectP, mapP, race, raceWith, takeP, tapEffectP, via, zipPar };
package/dist/index.d.ts CHANGED
@@ -1,44 +1,123 @@
1
- import { Z as ZStream, A as Async, S as Scope, E as Exit, F as Fiber, O as Option } from './stream-DVfZWtYZ.js';
2
- export { x as AsyncWithPromise, J as CancelToken, I as Canceler, C as Cause, a9 as Concat, a8 as Emit, a7 as Empty, V as FiberId, W as FiberStatus, aa as Flatten, ab as FromPull, X as Interrupted, ae as Managed, ac as Merge, N as None, af as Normalize, R as Runtime, Y as RuntimeFiber, a5 as Scheduler, a1 as ScopeId, ad as Scoped, D as Some, a4 as Task, a as ZIO, v as acquireRelease, ar as assertNever, q as async, i as asyncCatchAll, l as asyncFail, t as asyncFlatMap, h as asyncFold, w as asyncInterruptible, r as asyncMap, j as asyncMapError, k as asyncSucceed, n as asyncSync, p as asyncTotal, e as catchAll, ax as collectStream, an as concatStream, am as emitStream, al as emptyStream, g as end, f as fail, c as flatMap, ao as flattenStream, av as foreachStream, M as fork, aw as fromArray, T as fromPromiseAbortable, ah as fromPull, _ as getCurrentFiber, a6 as globalScheduler, L as linkAbortController, K as makeCancelToken, aj as managedStream, m as map, z as mapAsync, d as mapError, as as mapStream, B as mapTryAsync, ap as merge, ak as mergeStream, G as none, o as orElseOptional, at as rangeStream, H as some, ay as streamFromReadableStream, s as succeed, b as sync, Q as toPromise, aq as uncons, u as unit, $ as unsafeGetCurrentRuntime, P as unsafeRunAsync, U as unsafeRunFoldWithEnv, ai as unwrapScoped, ag as widenOpt, y as withAsyncPromise, a0 as withCurrentFiber, a3 as withScope, a2 as withScopeAsync, au as zip } from './stream-DVfZWtYZ.js';
1
+ import { F as FiberEngine, W as WasmEngineRuntime, A as Async, R as RuntimeFiber, b as FiberEngineStats, c as Fiber, d as FiberId, e as FiberStatus, E as Exit, f as RuntimeEvent, g as WasmBridge, h as OpcodeProgram, i as FiberId$1, j as EngineEvent, k as RefId, N as NodeId, l as OpcodeNode, S as Scope, m as RingBufferOptions, n as EngineStats, O as Option } from './effect-ISvXPLgc.js';
2
+ export { o as AsyncRegisterRef, a as AsyncWithPromise, p as BoundedRingBuffer, C as CancelToken, q as Canceler, r as Cause, s as CustomHostAction, D as DbHostAction, t as DecodeRef, u as DefaultHostExecutor, v as EngineKind, w as EngineSelection, x as EngineSelectionMode, y as FiberEngineKind, z as FlatMapRef, B as FoldFailureRef, G as FoldSuccessRef, H as HostAction, I as HostActionKind, J as HostActionResult, K as HostExecutionContext, L as HostExecutor, M as HostRegistry, P as HttpHostAction, Q as Interrupted, T as Joiner, U as None, V as NoopHooks, X as ProgramBuilder, Y as ProgramPatch, _ as PushStatus, $ as QueueHostAction, a0 as RingBuffer, a1 as RingBufferEngine, a2 as RingBufferStatsData, a3 as Runtime, a4 as RuntimeCapabilities, a5 as RuntimeEngineMode, a6 as RuntimeOptions, a7 as Scheduler, a8 as SchedulerEngine, a9 as SchedulerOptions, aa as SchedulerStats, ab as SchedulerStatsData, ac as ScopeId, ad as Some, ae as SyncRef, af as Task, ag as WasmFiberEngine, ah as WasmFiberEngineOptions, Z as ZIO, ai as acquireRelease, aj as async, ak as asyncCatchAll, al as asyncFail, am as asyncFlatMap, an as asyncFold, ao as asyncInterruptible, ap as asyncMap, aq as asyncMapError, ar as asyncSucceed, as as asyncSync, at as asyncTotal, au as catchAll, av as end, aw as engineStats, ax as fail, ay as flatMap, az as fork, aA as fromPromiseAbortable, aB as getBenchmarkBudget, aC as getCurrentFiber, aD as globalScheduler, aE as linkAbortController, aF as makeBoundedRingBuffer, aG as makeCancelToken, aH as map, aI as mapAsync, aJ as mapError, aK as mapTryAsync, aL as none, aM as orElseOptional, aN as runtimeCapabilities, aO as selectedEngineStats, aP as setBenchmarkBudget, aQ as some, aR as succeed, aS as sync, aT as toPromise, aU as unit, aV as unsafeGetCurrentRuntime, aW as unsafeRunAsync, aX as unsafeRunFoldWithEnv, aY as withAsyncPromise, aZ as withCurrentFiber, a_ as withScope, a$ as withScopeAsync } from './effect-ISvXPLgc.js';
3
+ import { Z as ZStream } from './stream-BvukHxCv.js';
4
+ export { C as Concat, E as Emit, a as Empty, F as Flatten, b as FromPull, M as Managed, c as Merge, N as Normalize, S as Scoped, d as assertNever, e as collectStream, f as concatStream, g as emitStream, h as emptyStream, i as flattenStream, j as foreachStream, k as fromArray, l as fromPull, m as managedStream, n as mapStream, o as merge, p as mergeStream, r as rangeStream, s as streamFromReadableStream, u as uncons, q as unwrapScoped, w as widenOpt, z as zip } from './stream-BvukHxCv.js';
3
5
 
4
- type Node<T> = {
5
- value: T;
6
- next: Node<T> | null;
7
- prev: Node<T> | null;
8
- removed: boolean;
9
- };
10
- declare class LinkedQueue<T> {
11
- private head;
12
- private tail;
13
- private len;
14
- get length(): number;
15
- isEmpty(): boolean;
16
- push(value: T): Node<T>;
17
- shift(): T | undefined;
18
- remove(node: Node<T>): void;
19
- private unlink;
6
+ declare class JsFiberEngine<R> implements FiberEngine<R> {
7
+ private readonly runtime;
8
+ readonly kind: "js";
9
+ private startedFibers;
10
+ constructor(runtime: WasmEngineRuntime<R> & any);
11
+ fork<E, A>(effect: Async<R, E, A>, scopeId?: number): RuntimeFiber<R, E, A>;
12
+ stats(): FiberEngineStats;
20
13
  }
21
14
 
22
- declare const enum PushStatus {
23
- Ok = 0,
24
- Grew = 1,
25
- Dropped = 2
15
+ type InternalFiberStatus = "queued" | "running" | "suspended" | "done" | "failed" | "interrupted";
16
+ declare class EngineFiberHandle<R, E, A> implements Fiber<E, A> {
17
+ private readonly onScheduledStep;
18
+ private readonly onInterrupt;
19
+ private readonly onJoiner?;
20
+ private readonly onQueued?;
21
+ readonly id: FiberId;
22
+ readonly runtime: WasmEngineRuntime<R> & any;
23
+ fiberContext: any;
24
+ name?: string;
25
+ scopeId?: number;
26
+ parentFiberId?: number;
27
+ private result;
28
+ private readonly joiners;
29
+ private readonly finalizers;
30
+ private finalizersDrained;
31
+ private internalStatus;
32
+ private queued;
33
+ constructor(id: FiberId, runtime: WasmEngineRuntime<R> & any, onScheduledStep: (fiberId: FiberId) => void, onInterrupt: (fiberId: FiberId, reason: unknown) => void, onJoiner?: ((fiberId: FiberId) => void) | undefined, onQueued?: ((fiberId: FiberId) => void) | undefined);
34
+ status(): FiberStatus;
35
+ engineStatus(): InternalFiberStatus;
36
+ setEngineStatus(status: InternalFiberStatus): void;
37
+ join(cb: (exit: Exit<E, A>) => void): void;
38
+ interrupt(): void;
39
+ addFinalizer(f: (exit: Exit<E, A>) => void): void;
40
+ schedule(tag?: string): void;
41
+ emit(ev: RuntimeEvent): void;
42
+ succeed(value: A): void;
43
+ fail(error: E): void;
44
+ die(defect: unknown): void;
45
+ interrupted(): void;
46
+ complete(exit: Exit<E, A>): void;
47
+ private runFinalizersOnce;
26
48
  }
27
- declare class RingBuffer<T> {
28
- private buf;
29
- private head;
30
- private tail;
31
- private size_;
32
- private readonly maxCap;
33
- constructor(initialCapacity?: number, maxCapacity?: number);
34
- get length(): number;
35
- get capacity(): number;
36
- isEmpty(): boolean;
37
- push(value: T): PushStatus;
38
- shift(): T | undefined;
39
- clear(): void;
40
- private grow;
41
- private nextPow2;
49
+
50
+ declare class ReferenceWasmBridge implements WasmBridge {
51
+ readonly kind: "wasm-reference";
52
+ private nextFiberId;
53
+ private readonly fibers;
54
+ private started;
55
+ private completed;
56
+ private failed;
57
+ private interrupted;
58
+ createFiber(program: OpcodeProgram): FiberId$1;
59
+ poll(fiberId: FiberId$1): EngineEvent;
60
+ provideValue(fiberId: FiberId$1, valueRef: RefId): EngineEvent;
61
+ provideError(fiberId: FiberId$1, errorRef: RefId): EngineEvent;
62
+ provideEffect(fiberId: FiberId$1, root: NodeId, nodes: OpcodeNode[]): EngineEvent;
63
+ interrupt(fiberId: FiberId$1, reasonRef: RefId): EngineEvent;
64
+ dropFiber(fiberId: FiberId$1): void;
65
+ stats(): unknown;
66
+ private mustFiber;
67
+ private step;
68
+ private success;
69
+ private failure;
70
+ private suspend;
71
+ private markDone;
72
+ private markFailed;
73
+ }
74
+
75
+ declare class WasmPackFiberBridge implements WasmBridge {
76
+ readonly kind: "wasm";
77
+ private readonly vm;
78
+ constructor(modulePath?: string);
79
+ createFiber(program: OpcodeProgram): FiberId$1;
80
+ poll(fiberId: FiberId$1): EngineEvent;
81
+ provideValue(fiberId: FiberId$1, valueRef: RefId): EngineEvent;
82
+ provideError(fiberId: FiberId$1, errorRef: RefId): EngineEvent;
83
+ provideEffect(fiberId: FiberId$1, root: NodeId, nodes: OpcodeNode[]): EngineEvent;
84
+ interrupt(fiberId: FiberId$1, reasonRef: RefId): EngineEvent;
85
+ dropFiber(fiberId: FiberId$1): void;
86
+ stats(): unknown;
87
+ }
88
+
89
+ type WasmFiberRegistryStats = {
90
+ readonly live: number;
91
+ readonly queued: number;
92
+ readonly running: number;
93
+ readonly suspended: number;
94
+ readonly done: number;
95
+ readonly failed: number;
96
+ readonly interrupted: number;
97
+ readonly wakeQueueLen: number;
98
+ readonly registered: number;
99
+ readonly completed: number;
100
+ readonly wakeups: number;
101
+ readonly duplicateWakeups: number;
102
+ readonly joins: number;
103
+ };
104
+ type FiberRegistryStatus = "queued" | "running" | "suspended" | "done" | "failed" | "interrupted";
105
+ declare class WasmFiberRegistryBridge {
106
+ private readonly registry;
107
+ constructor();
108
+ registerFiber(fiberId: FiberId$1, parentId?: number, scopeId?: number): void;
109
+ markQueued(fiberId: FiberId$1): void;
110
+ markRunning(fiberId: FiberId$1): void;
111
+ markSuspended(fiberId: FiberId$1): void;
112
+ markDone(fiberId: FiberId$1, status: Exclude<FiberRegistryStatus, "queued" | "running" | "suspended">): number;
113
+ dropFiber(fiberId: FiberId$1): void;
114
+ addJoiner(fiberId: FiberId$1): void;
115
+ wake(fiberId: FiberId$1): boolean;
116
+ drainWakeup(): FiberId$1 | undefined;
117
+ drainWakeups(): FiberId$1[];
118
+ wakeQueueLength(): number;
119
+ stateOf(fiberId: FiberId$1): FiberRegistryStatus | "missing";
120
+ stats(): WasmFiberRegistryStats;
42
121
  }
43
122
 
44
123
  declare function buffer<R, E, A>(stream: ZStream<{} & R, E, A>, capacity: number, strategy?: "backpressure" | "dropping" | "sliding"): ZStream<{} & R, E, A>;
@@ -76,7 +155,8 @@ type Queue<A> = {
76
155
  size: () => number;
77
156
  shutdown: () => void;
78
157
  };
79
- declare function bounded<A>(capacity: number, strategy?: Strategy): Async<unknown, unknown, Queue<A>>;
158
+ type QueueOptions = RingBufferOptions;
159
+ declare function bounded<A>(capacity: number, strategy?: Strategy, options?: QueueOptions): Async<unknown, unknown, Queue<A>>;
80
160
 
81
161
  type HubStrategy = "BackPressure" | "Dropping" | "Sliding";
82
162
  type HubClosed = {
@@ -96,6 +176,42 @@ declare const broadcast: typeof makeHub;
96
176
  declare function broadcastToHub<R, E, A>(stream: ZStream<R, E, A>, hub: Hub<A>): Async<R, E, void>;
97
177
  declare function fromHub<A>(hub: Hub<A>): ZStream<unknown, HubClosed, A>;
98
178
 
179
+ type StreamChunkEngine = "auto" | "js" | "wasm";
180
+ type StreamChunkOptions = {
181
+ /**
182
+ * auto: use WASM when wasm/pkg is available, otherwise JS.
183
+ * js: always use the JS array chunker.
184
+ * wasm: require BrassWasmChunkBuffer from wasm/pkg.
185
+ */
186
+ engine?: StreamChunkEngine;
187
+ };
188
+ type StreamChunkStats = {
189
+ len: number;
190
+ maxChunkSize: number;
191
+ emittedChunks: number;
192
+ emittedItems: number;
193
+ flushes: number;
194
+ };
195
+ type Chunker<A> = {
196
+ readonly length: number;
197
+ readonly maxChunkSize: number;
198
+ push(value: A): boolean;
199
+ isFull(): boolean;
200
+ isEmpty(): boolean;
201
+ takeChunk(): readonly A[];
202
+ clear(): void;
203
+ stats(): EngineStats<StreamChunkStats>;
204
+ };
205
+ declare function makeStreamChunker<A>(chunkSize: number, options?: StreamChunkOptions): Chunker<A>;
206
+ /**
207
+ * Re-chunk a stream so downstream operators receive arrays instead of single
208
+ * items. This is the intended WASM boundary: pay the JS↔WASM crossing while
209
+ * assembling chunks, then process bigger batches downstream.
210
+ */
211
+ declare function chunks<R, E, A>(input: ZStream<R, E, A>, chunkSize: number, options?: StreamChunkOptions): ZStream<R, E, readonly A[]>;
212
+ declare function mapChunks<R, E, A, B>(input: ZStream<R, E, A>, chunkSize: number, f: (chunk: readonly A[]) => readonly B[], options?: StreamChunkOptions): ZStream<R, E, B>;
213
+ declare function mapChunksEffect<Rp, Ep, A, B>(chunkSize: number, f: (chunk: readonly A[]) => Async<Rp, Ep, readonly B[]>, options?: StreamChunkOptions): <R, E>(input: ZStream<R, E, A>) => ZStream<R & Rp, E | Ep, B>;
214
+
99
215
  /**
100
216
  * ZPipeline-style transformer.
101
217
  *
@@ -127,6 +243,10 @@ declare function dropP<A>(n: number): ZPipeline<unknown, never, A, A>;
127
243
  declare function mapEffectP<Rp, Ep, A, B>(f: (a: A) => Async<Rp, Ep, B>): ZPipeline<Rp, Ep, A, B>;
128
244
  /** Tap each element with an effect, preserving the element. */
129
245
  declare function tapEffectP<Rp, Ep, A>(f: (a: A) => Async<Rp, Ep, any>): ZPipeline<Rp, Ep, A, A>;
246
+ /** Re-chunk a stream into arrays of up to `chunkSize` elements. */
247
+ declare function chunksP<A>(chunkSize: number, options?: StreamChunkOptions): ZPipeline<unknown, never, A, readonly A[]>;
248
+ /** Apply one effect per chunk and flatten the returned chunk back to elements. */
249
+ declare function mapChunksEffectP<Rp, Ep, A, B>(chunkSize: number, f: (chunk: readonly A[]) => Async<Rp, Ep, readonly B[]>, options?: StreamChunkOptions): ZPipeline<Rp, Ep, A, B>;
130
250
  /** Buffer upstream using your existing queue-based buffer implementation. */
131
251
  declare function bufferP<A>(capacity: number, strategy?: "backpressure" | "dropping" | "sliding"): ZPipeline<unknown, never, A, A>;
132
252
  /**
@@ -135,4 +255,4 @@ declare function bufferP<A>(capacity: number, strategy?: "backpressure" | "dropp
135
255
  */
136
256
  declare function groupedP<A>(n: number): ZPipeline<unknown, never, A, A[]>;
137
257
 
138
- export { Async, Exit, Fiber, type Hub, type HubClosed, type HubStrategy, LinkedQueue, type Node, Option, PushStatus, type Queue, type QueueClosed, RingBuffer, Scope, type Strategy, type Subscription, type ZPipeline, ZStream, andThen, bounded, broadcast, broadcastToHub, buffer, bufferP, collectAllPar, compose, dropP, filterMapP, filterP, fromHub, groupedP, identity, makeHub, mapEffectP, mapP, race, raceWith, takeP, tapEffectP, via, zipPar };
258
+ export { Async, EngineEvent, EngineFiberHandle, EngineStats, Exit, Fiber, FiberEngine, FiberEngineStats, FiberId, FiberStatus, type Hub, type HubClosed, type HubStrategy, type InternalFiberStatus, JsFiberEngine, NodeId, OpcodeNode, OpcodeProgram, Option, type Queue, type QueueClosed, type QueueOptions, RefId, ReferenceWasmBridge, RingBufferOptions, RuntimeFiber, Scope, type Strategy, type StreamChunkEngine, type StreamChunkOptions, type StreamChunkStats, type Subscription, WasmBridge, WasmEngineRuntime, WasmFiberRegistryBridge, type WasmFiberRegistryStats, WasmPackFiberBridge, type ZPipeline, ZStream, andThen, bounded, broadcast, broadcastToHub, buffer, bufferP, chunks, chunksP, collectAllPar, compose, dropP, filterMapP, filterP, fromHub, groupedP, identity, makeHub, makeStreamChunker, mapChunks, mapChunksEffect, mapChunksEffectP, mapEffectP, mapP, race, raceWith, takeP, tapEffectP, via, zipPar };