brass-runtime 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -0
- package/dist/chunk-ABGJNLHY.js +1 -0
- package/dist/chunk-C6HOJTND.cjs +1 -0
- package/dist/effect-D4h--Rys.d.cts +141 -0
- package/dist/effect-D4h--Rys.d.ts +141 -0
- package/dist/http/index.cjs +1 -0
- package/dist/http/index.d.cts +32 -0
- package/dist/http/index.d.ts +32 -0
- package/dist/http/index.js +1 -0
- package/dist/index.cjs +1 -25
- package/dist/index.d.cts +49 -0
- package/dist/index.d.ts +49 -9
- package/dist/index.js +1 -0
- package/package.json +30 -22
- package/dist/examples/canceler.d.ts +0 -2
- package/dist/examples/canceler.d.ts.map +0 -1
- package/dist/examples/canceler.js +0 -30
- package/dist/examples/canceler.js.map +0 -1
- package/dist/examples/demo.d.ts +0 -3
- package/dist/examples/demo.d.ts.map +0 -1
- package/dist/examples/demo.js +0 -65
- package/dist/examples/demo.js.map +0 -1
- package/dist/examples/fiberFinalizer.d.ts +0 -2
- package/dist/examples/fiberFinalizer.d.ts.map +0 -1
- package/dist/examples/fiberFinalizer.js +0 -46
- package/dist/examples/fiberFinalizer.js.map +0 -1
- package/dist/examples/fromPromise.d.ts +0 -3
- package/dist/examples/fromPromise.d.ts.map +0 -1
- package/dist/examples/fromPromise.js +0 -44
- package/dist/examples/fromPromise.js.map +0 -1
- package/dist/examples/index.d.ts +0 -7
- package/dist/examples/index.d.ts.map +0 -1
- package/dist/examples/index.js +0 -9
- package/dist/examples/index.js.map +0 -1
- package/dist/examples/resourceExample.d.ts +0 -2
- package/dist/examples/resourceExample.d.ts.map +0 -1
- package/dist/examples/resourceExample.js +0 -41
- package/dist/examples/resourceExample.js.map +0 -1
- package/dist/examples/toPromise.d.ts +0 -2
- package/dist/examples/toPromise.d.ts.map +0 -1
- package/dist/examples/toPromise.js +0 -13
- package/dist/examples/toPromise.js.map +0 -1
- package/dist/fibers/fiber.d.ts +0 -24
- package/dist/fibers/fiber.d.ts.map +0 -1
- package/dist/fibers/fiber.js +0 -193
- package/dist/fibers/fiber.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/scheduler/scheduler.d.ts +0 -11
- package/dist/scheduler/scheduler.d.ts.map +0 -1
- package/dist/scheduler/scheduler.js +0 -52
- package/dist/scheduler/scheduler.js.map +0 -1
- package/dist/scheduler/scope.d.ts +0 -28
- package/dist/scheduler/scope.d.ts.map +0 -1
- package/dist/scheduler/scope.js +0 -83
- package/dist/scheduler/scope.js.map +0 -1
- package/dist/stream/buffer.d.ts +0 -3
- package/dist/stream/buffer.d.ts.map +0 -1
- package/dist/stream/buffer.js +0 -81
- package/dist/stream/buffer.js.map +0 -1
- package/dist/stream/queue.d.ts +0 -9
- package/dist/stream/queue.d.ts.map +0 -1
- package/dist/stream/queue.js +0 -98
- package/dist/stream/queue.js.map +0 -1
- package/dist/stream/stream.d.ts +0 -37
- package/dist/stream/stream.d.ts.map +0 -1
- package/dist/stream/stream.js +0 -139
- package/dist/stream/stream.js.map +0 -1
- package/dist/stream/structuredConcurrency.d.ts +0 -25
- package/dist/stream/structuredConcurrency.d.ts.map +0 -1
- package/dist/stream/structuredConcurrency.js +0 -133
- package/dist/stream/structuredConcurrency.js.map +0 -1
- package/dist/types/asyncEffect.d.ts +0 -49
- package/dist/types/asyncEffect.d.ts.map +0 -1
- package/dist/types/asyncEffect.js +0 -170
- package/dist/types/asyncEffect.js.map +0 -1
- package/dist/types/cancel.d.ts +0 -21
- package/dist/types/cancel.d.ts.map +0 -1
- package/dist/types/cancel.js +0 -46
- package/dist/types/cancel.js.map +0 -1
- package/dist/types/effect.d.ts +0 -20
- package/dist/types/effect.d.ts.map +0 -1
- package/dist/types/effect.js +0 -26
- package/dist/types/effect.js.map +0 -1
- package/dist/types/option.d.ts +0 -11
- package/dist/types/option.d.ts.map +0 -1
- package/dist/types/option.js +0 -7
- package/dist/types/option.js.map +0 -1
package/README.md
CHANGED
|
@@ -102,6 +102,87 @@ Do not copy the example here — open `src/examples/fromPromise.ts` for details.
|
|
|
102
102
|
|
|
103
103
|
Adjust the commands to your preferred setup. The project intentionally leaves runtime execution flexible (ts-node, esbuild, tsc + node, etc.).
|
|
104
104
|
|
|
105
|
+
|
|
106
|
+
## Examples — abortable Promises (DX)
|
|
107
|
+
|
|
108
|
+
Below are small, copy-pasteable examples showing how to use the abortable helpers: `tryPromiseAbortable` and `fromPromiseAbortable`. Use these snippets in examples or docs to demonstrate typical flows: plain signal, env+signal, custom error mapping and cancellation.
|
|
109
|
+
|
|
110
|
+
### 1) Signal-only thunk (uses `tryPromiseAbortable`)
|
|
111
|
+
```typescript
|
|
112
|
+
import { tryPromiseAbortable, toPromise, fork } from './src/asyncEffect';
|
|
113
|
+
|
|
114
|
+
// A thunk that only expects an AbortSignal
|
|
115
|
+
const fetchUser = tryPromiseAbortable(async (signal: AbortSignal) => {
|
|
116
|
+
const res = await fetch('https://jsonplaceholder.typicode.com/users/1', { signal });
|
|
117
|
+
if (!res.ok) throw new Error('HTTP ' + res.status);
|
|
118
|
+
return await res.json();
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
async function example() {
|
|
122
|
+
// Await via runtime helper toPromise (env = {})
|
|
123
|
+
try {
|
|
124
|
+
const user = await toPromise(fetchUser, {});
|
|
125
|
+
console.log('user', user);
|
|
126
|
+
} catch (err) {
|
|
127
|
+
console.error('failed', err);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Cancellation example using fork + interrupt
|
|
132
|
+
function cancelExample() {
|
|
133
|
+
const fiber = fork(fetchUser as any, {}); // fork returns a Fiber
|
|
134
|
+
setTimeout(() => {
|
|
135
|
+
fiber.interrupt(); // will abort the underlying fetch via AbortController
|
|
136
|
+
console.log('interrupt requested');
|
|
137
|
+
}, 50);
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
### 2) Env + signal thunk (uses `fromPromiseAbortable`)
|
|
143
|
+
```typescript
|
|
144
|
+
import { tryPromiseAbortable, toPromise } from './src/asyncEffect';
|
|
145
|
+
|
|
146
|
+
type Env = { baseUrl: string };
|
|
147
|
+
|
|
148
|
+
const fetchWithEnv = tryPromiseAbortable<Env, any>((env, signal) =>
|
|
149
|
+
fetch(`${env.baseUrl}/users/1`, { signal }).then((r) => {
|
|
150
|
+
if (!r.ok) throw new Error('HTTP ' + r.status);
|
|
151
|
+
return r.json();
|
|
152
|
+
})
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
async function runEnv() {
|
|
156
|
+
const env: Env = { baseUrl: 'https://jsonplaceholder.typicode.com' };
|
|
157
|
+
try {
|
|
158
|
+
const user = await toPromise(fetchWithEnv, env);
|
|
159
|
+
console.log('user with env', user);
|
|
160
|
+
} catch (e) {
|
|
161
|
+
console.error('error', e);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 3) Custom error mapping with fromPromiseAbortable
|
|
168
|
+
```typescript
|
|
169
|
+
import { fromPromiseAbortable, toPromise } from './src/asyncEffect';
|
|
170
|
+
|
|
171
|
+
// Map any rejection (including non-abort) to a custom error shape
|
|
172
|
+
const safeFetch = fromPromiseAbortable(
|
|
173
|
+
(signal: AbortSignal) => fetch('https://example.com/data', { signal }).then((r) => r.json()),
|
|
174
|
+
(e) => ({ kind: 'FetchError', detail: String(e) })
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
async function runSafe() {
|
|
178
|
+
try {
|
|
179
|
+
const data = await toPromise(safeFetch, {});
|
|
180
|
+
console.log('data', data);
|
|
181
|
+
} catch (err) {
|
|
182
|
+
console.error('mapped error', err);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
```
|
|
105
186
|
---
|
|
106
187
|
|
|
107
188
|
## Project structure (recommended)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var A=class{queue=[];flushing=false;requested=false;schedule(e,t="anonymous"){this.queue.push({tag:t,task:e}),this.requestFlush(),console.log("SCHEDULER",{flushing:this.flushing,q:this.queue.length,next:this.queue[0]?.tag,head:this.queue.slice(0,5).map(r=>r.tag)});}requestFlush(){this.requested||(this.requested=true,queueMicrotask(()=>this.flush()));}flush(){if(!this.flushing){this.flushing=true,this.requested=false;try{for(;this.queue.length>0;){let{task:e}=this.queue.shift();try{e();}catch{}}}finally{this.flushing=false,this.queue.length>0&&this.requestFlush();}}}},d=new A;var g=1,y=class{constructor(e,t,r){this.scheduler=r;this.id=g++,this.current=e,this.env=t;}id;closing=null;finishing=false;statusValue="Running";interrupted=false;result=null;joiners=[];current;env;stack=[];fiberFinalizers=[];scheduled=false;finalizersDrained=false;blockedOnAsync=false;addFinalizer(e){this.fiberFinalizers.push(e);}status(){return this.statusValue}join(e){this.result!=null?e(this.result):this.joiners.push(e);}interrupt(){this.result==null&&(this.interrupted||(this.interrupted=true,this.blockedOnAsync=false,this.schedule("interrupt-step")));}schedule(e="step"){this.result==null&&(this.scheduled||(this.scheduled=true,this.scheduler.schedule(()=>{this.scheduled=false,this.step();},`fiber#${this.id}.${e}`)));}runFinalizersOnce(e){if(!this.finalizersDrained)for(this.finalizersDrained=true;this.fiberFinalizers.length>0;){let t=this.fiberFinalizers.pop();try{t(e);}catch{}}}notify(e){if(this.result==null&&this.closing==null){this.finishing=true,this.closing=e,this.runFinalizersOnce(e),this.statusValue=this.interrupted?"Interrupted":"Done",this.result=e;for(let t of this.joiners)t(e);this.joiners.length=0;}}onSuccess(e){let t=this.stack.pop();if(!t){this.notify({_tag:"Success",value:e});return}this.current=t._tag==="SuccessCont"?t.k(e):t.onSuccess(e);}onFailure(e){for(;this.stack.length>0;){let t=this.stack.pop();if(t._tag==="FoldCont"){this.current=t.onFailure(e);return}}this.notify({_tag:"Failure",error:e});}step(){if(this.result!=null||this.blockedOnAsync)return;if(this.interrupted&&this.closing==null){this.notify({_tag:"Failure",error:{_tag:"Interrupted"}});return}let e=this.current;switch(e._tag){case "Succeed":this.onSuccess(e.value);return;case "Fail":this.onFailure(e.error);return;case "Sync":try{let t=e.thunk(this.env);this.onSuccess(t);}catch(t){this.onFailure(t);}return;case "FlatMap":this.stack.push({_tag:"SuccessCont",k:e.andThen}),this.current=e.first;return;case "Fold":this.stack.push({_tag:"FoldCont",onFailure:e.onFailure,onSuccess:e.onSuccess}),this.current=e.first;return;case "Async":{if(this.finishing)return;this.blockedOnAsync=true;let t=null,r=false,i=()=>{if(!t)return;let a=t;if(t=null,this.blockedOnAsync=false,!(this.result!=null||this.closing!=null)){if(this.interrupted){this.onFailure({_tag:"Interrupted"});return}a._tag==="Success"?this.onSuccess(a.value):this.onFailure(a.error),this.schedule("async-resume");}},s=e.register(this.env,a=>{t=a,r=true;});typeof s=="function"&&this.addFinalizer(a=>{try{s();}catch{}}),r&&this.scheduler.schedule(i,`fiber#${this.id}.async-sync-resume`);return}}}};function h(n,e,t=d){let r=new y(n,e,t);return r.schedule("initial-step"),r}function f(n,e,t){return {_tag:"Fold",first:n,onFailure:e,onSuccess:t}}function w(n,e){return f(n,t=>e(t),t=>l(t))}function P(n,e){return f(n,t=>v(e(t)),t=>l(t))}function I(n){return c((e,t)=>{let r=false,i=o=>{r||(r=true,t(o));},s=o=>i({_tag:"Failure",error:o instanceof Error?o:new Error(String(o))}),a=o=>i({_tag:"Success",value:o});try{typeof n=="function"&&n.length>=1?n((o,u)=>o?s(o):a(u)):n().then(a,s);}catch(o){s(o);}})}function C(){return p(()=>{})}var l=n=>({_tag:"Succeed",value:n}),v=n=>({_tag:"Fail",error:n}),p=n=>({_tag:"Sync",thunk:n}),B=n=>p(()=>n()),c=n=>({_tag:"Async",register:n});function q(n,e){return E(n,t=>l(e(t)))}function E(n,e){return {_tag:"FlatMap",first:n,andThen:e}}function z(n,e){return new Promise((t,r)=>{h(n,e).join(s=>{let a=s;a._tag==="Success"?t(a.value):r(a.error);});})}function j(n,e){return c((t,r)=>{n(t).then(i=>r({_tag:"Success",value:i})).catch(i=>r({_tag:"Failure",error:e(i)}));})}function T(n){return c((e,t)=>{let r=false,i=s=>{r||(r=true,t(s));};try{n((s,a)=>{i(s?{_tag:"Failure",error:s}:{_tag:"Success",value:a});});}catch(s){i({_tag:"Failure",error:s instanceof Error?s:new Error(String(s))});}})}var R=n=>typeof n=="object"&&n!==null&&"name"in n&&n.name==="AbortError";function M(n){return b((t,r)=>n.length===1?n(r):n(t,r),t=>R(t)?{_tag:"Abort"}:{_tag:"PromiseRejected",reason:t})}function b(n,e){return c((t,r)=>{let i=new AbortController,s=false,a=o=>{s||(s=true,r(o));};try{(n.length===1?n(i.signal):n(t,i.signal)).then(u=>a({_tag:"Success",value:u})).catch(u=>a({_tag:"Failure",error:e(u)}));}catch(o){a({_tag:"Failure",error:e(o)});}return ()=>{s=true,i.abort();}})}function O(n,e,t){return E(n,r=>(t.addFinalizer(i=>e(r,i)),l(r)))}function D(n){return c(n)}export{A as a,d as b,h as c,f as d,w as e,P as f,I as g,C as h,l as i,v as j,p as k,B as l,c as m,q as n,E as o,z as p,j as q,T as r,M as s,b as t,O as u,D as v};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';var A=class{queue=[];flushing=false;requested=false;schedule(e,t="anonymous"){this.queue.push({tag:t,task:e}),this.requestFlush(),console.log("SCHEDULER",{flushing:this.flushing,q:this.queue.length,next:this.queue[0]?.tag,head:this.queue.slice(0,5).map(r=>r.tag)});}requestFlush(){this.requested||(this.requested=true,queueMicrotask(()=>this.flush()));}flush(){if(!this.flushing){this.flushing=true,this.requested=false;try{for(;this.queue.length>0;){let{task:e}=this.queue.shift();try{e();}catch{}}}finally{this.flushing=false,this.queue.length>0&&this.requestFlush();}}}},d=new A;var g=1,y=class{constructor(e,t,r){this.scheduler=r;this.id=g++,this.current=e,this.env=t;}id;closing=null;finishing=false;statusValue="Running";interrupted=false;result=null;joiners=[];current;env;stack=[];fiberFinalizers=[];scheduled=false;finalizersDrained=false;blockedOnAsync=false;addFinalizer(e){this.fiberFinalizers.push(e);}status(){return this.statusValue}join(e){this.result!=null?e(this.result):this.joiners.push(e);}interrupt(){this.result==null&&(this.interrupted||(this.interrupted=true,this.blockedOnAsync=false,this.schedule("interrupt-step")));}schedule(e="step"){this.result==null&&(this.scheduled||(this.scheduled=true,this.scheduler.schedule(()=>{this.scheduled=false,this.step();},`fiber#${this.id}.${e}`)));}runFinalizersOnce(e){if(!this.finalizersDrained)for(this.finalizersDrained=true;this.fiberFinalizers.length>0;){let t=this.fiberFinalizers.pop();try{t(e);}catch{}}}notify(e){if(this.result==null&&this.closing==null){this.finishing=true,this.closing=e,this.runFinalizersOnce(e),this.statusValue=this.interrupted?"Interrupted":"Done",this.result=e;for(let t of this.joiners)t(e);this.joiners.length=0;}}onSuccess(e){let t=this.stack.pop();if(!t){this.notify({_tag:"Success",value:e});return}this.current=t._tag==="SuccessCont"?t.k(e):t.onSuccess(e);}onFailure(e){for(;this.stack.length>0;){let t=this.stack.pop();if(t._tag==="FoldCont"){this.current=t.onFailure(e);return}}this.notify({_tag:"Failure",error:e});}step(){if(this.result!=null||this.blockedOnAsync)return;if(this.interrupted&&this.closing==null){this.notify({_tag:"Failure",error:{_tag:"Interrupted"}});return}let e=this.current;switch(e._tag){case "Succeed":this.onSuccess(e.value);return;case "Fail":this.onFailure(e.error);return;case "Sync":try{let t=e.thunk(this.env);this.onSuccess(t);}catch(t){this.onFailure(t);}return;case "FlatMap":this.stack.push({_tag:"SuccessCont",k:e.andThen}),this.current=e.first;return;case "Fold":this.stack.push({_tag:"FoldCont",onFailure:e.onFailure,onSuccess:e.onSuccess}),this.current=e.first;return;case "Async":{if(this.finishing)return;this.blockedOnAsync=true;let t=null,r=false,i=()=>{if(!t)return;let a=t;if(t=null,this.blockedOnAsync=false,!(this.result!=null||this.closing!=null)){if(this.interrupted){this.onFailure({_tag:"Interrupted"});return}a._tag==="Success"?this.onSuccess(a.value):this.onFailure(a.error),this.schedule("async-resume");}},s=e.register(this.env,a=>{t=a,r=true;});typeof s=="function"&&this.addFinalizer(a=>{try{s();}catch{}}),r&&this.scheduler.schedule(i,`fiber#${this.id}.async-sync-resume`);return}}}};function h(n,e,t=d){let r=new y(n,e,t);return r.schedule("initial-step"),r}function f(n,e,t){return {_tag:"Fold",first:n,onFailure:e,onSuccess:t}}function w(n,e){return f(n,t=>e(t),t=>l(t))}function P(n,e){return f(n,t=>v(e(t)),t=>l(t))}function I(n){return c((e,t)=>{let r=false,i=o=>{r||(r=true,t(o));},s=o=>i({_tag:"Failure",error:o instanceof Error?o:new Error(String(o))}),a=o=>i({_tag:"Success",value:o});try{typeof n=="function"&&n.length>=1?n((o,u)=>o?s(o):a(u)):n().then(a,s);}catch(o){s(o);}})}function C(){return p(()=>{})}var l=n=>({_tag:"Succeed",value:n}),v=n=>({_tag:"Fail",error:n}),p=n=>({_tag:"Sync",thunk:n}),B=n=>p(()=>n()),c=n=>({_tag:"Async",register:n});function q(n,e){return E(n,t=>l(e(t)))}function E(n,e){return {_tag:"FlatMap",first:n,andThen:e}}function z(n,e){return new Promise((t,r)=>{h(n,e).join(s=>{let a=s;a._tag==="Success"?t(a.value):r(a.error);});})}function j(n,e){return c((t,r)=>{n(t).then(i=>r({_tag:"Success",value:i})).catch(i=>r({_tag:"Failure",error:e(i)}));})}function T(n){return c((e,t)=>{let r=false,i=s=>{r||(r=true,t(s));};try{n((s,a)=>{i(s?{_tag:"Failure",error:s}:{_tag:"Success",value:a});});}catch(s){i({_tag:"Failure",error:s instanceof Error?s:new Error(String(s))});}})}var R=n=>typeof n=="object"&&n!==null&&"name"in n&&n.name==="AbortError";function M(n){return b((t,r)=>n.length===1?n(r):n(t,r),t=>R(t)?{_tag:"Abort"}:{_tag:"PromiseRejected",reason:t})}function b(n,e){return c((t,r)=>{let i=new AbortController,s=false,a=o=>{s||(s=true,r(o));};try{(n.length===1?n(i.signal):n(t,i.signal)).then(u=>a({_tag:"Success",value:u})).catch(u=>a({_tag:"Failure",error:e(u)}));}catch(o){a({_tag:"Failure",error:e(o)});}return ()=>{s=true,i.abort();}})}function O(n,e,t){return E(n,r=>(t.addFinalizer(i=>e(r,i)),l(r)))}function D(n){return c(n)}exports.a=A;exports.b=d;exports.c=h;exports.d=f;exports.e=w;exports.f=P;exports.g=I;exports.h=C;exports.i=l;exports.j=v;exports.k=p;exports.l=B;exports.m=c;exports.n=q;exports.o=E;exports.p=z;exports.q=j;exports.r=T;exports.s=M;exports.t=b;exports.u=O;exports.v=D;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
type Canceler = () => void;
|
|
2
|
+
type CancelToken = {
|
|
3
|
+
/** true si ya fue cancelado */
|
|
4
|
+
readonly isCancelled: () => boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Registra un callback que se ejecuta cuando se cancela.
|
|
7
|
+
* Si ya estaba cancelado, lo ejecuta inmediatamente.
|
|
8
|
+
* Devuelve un "unsubscribe" para desregistrar.
|
|
9
|
+
*/
|
|
10
|
+
readonly onCancel: (f: Canceler) => Canceler;
|
|
11
|
+
};
|
|
12
|
+
/** Implementación simple de CancelToken */
|
|
13
|
+
declare function makeCancelToken(): CancelToken & {
|
|
14
|
+
cancel: Canceler;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Helper: conecta un AbortController a un CancelToken.
|
|
18
|
+
* Devuelve una función para desenganchar (unsubscribe).
|
|
19
|
+
*/
|
|
20
|
+
declare function linkAbortController(token: CancelToken, ac: AbortController): Canceler;
|
|
21
|
+
|
|
22
|
+
type FiberId = number;
|
|
23
|
+
type FiberStatus = "Running" | "Done" | "Interrupted";
|
|
24
|
+
type Interrupted = {
|
|
25
|
+
readonly _tag: "Interrupted";
|
|
26
|
+
};
|
|
27
|
+
type Fiber<E, A> = {
|
|
28
|
+
readonly id: FiberId;
|
|
29
|
+
readonly status: () => FiberStatus;
|
|
30
|
+
readonly join: (cb: (exit: Exit<E | Interrupted, A>) => void) => void;
|
|
31
|
+
readonly interrupt: () => void;
|
|
32
|
+
readonly addFinalizer: (f: (exit: Exit<E | Interrupted, A>) => void) => void;
|
|
33
|
+
};
|
|
34
|
+
type BrassError = {
|
|
35
|
+
_tag: "Abort";
|
|
36
|
+
} | {
|
|
37
|
+
_tag: "PromiseRejected";
|
|
38
|
+
reason: unknown;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
type ScopeId = number;
|
|
42
|
+
declare class Scope<R> {
|
|
43
|
+
private readonly env;
|
|
44
|
+
readonly id: ScopeId;
|
|
45
|
+
private closed;
|
|
46
|
+
private readonly children;
|
|
47
|
+
private readonly subScopes;
|
|
48
|
+
private readonly finalizers;
|
|
49
|
+
constructor(env: R);
|
|
50
|
+
/** registra un finalizer (LIFO) */
|
|
51
|
+
addFinalizer(f: (exit: Exit<any, any>) => Async<R, any, any>): void;
|
|
52
|
+
/** crea un sub scope */
|
|
53
|
+
subScope(): Scope<R>;
|
|
54
|
+
/** fork en este scope */
|
|
55
|
+
fork<E, A>(eff: Async<R, E, A>, env: R): Fiber<E | Interrupted, A>;
|
|
56
|
+
/** Cierre estructurado */
|
|
57
|
+
close(exit?: Exit<any, any>): void;
|
|
58
|
+
isClosed(): boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Ejecuta una función dentro de un scope estructurado.
|
|
62
|
+
* Al final (éxito o error), se cierra el scope garantizando cleanup.
|
|
63
|
+
*/
|
|
64
|
+
declare function withScope<R, A>(body: (scope: Scope<R>) => A): A;
|
|
65
|
+
|
|
66
|
+
type NodeCallback<A> = (err: Error | null, result: A) => void;
|
|
67
|
+
type Async<R, E, A> = {
|
|
68
|
+
_tag: "Succeed";
|
|
69
|
+
value: A;
|
|
70
|
+
} | {
|
|
71
|
+
_tag: "Fail";
|
|
72
|
+
error: E;
|
|
73
|
+
} | {
|
|
74
|
+
_tag: "Sync";
|
|
75
|
+
thunk: (env: R) => A;
|
|
76
|
+
} | {
|
|
77
|
+
_tag: "Async";
|
|
78
|
+
register: (env: R, cb: (exit: Exit<E, A>) => void) => void | Canceler;
|
|
79
|
+
} | {
|
|
80
|
+
_tag: "FlatMap";
|
|
81
|
+
first: Async<R, E, any>;
|
|
82
|
+
andThen: (a: any) => Async<R, E, A>;
|
|
83
|
+
} | {
|
|
84
|
+
_tag: "Fold";
|
|
85
|
+
first: Async<R, E, any>;
|
|
86
|
+
onFailure: (e: any) => Async<R, E, A>;
|
|
87
|
+
onSuccess: (a: any) => Async<R, E, A>;
|
|
88
|
+
};
|
|
89
|
+
declare function asyncFold<R, E, A, B>(fa: Async<R, E, A>, onFailure: (e: E) => Async<R, E, B>, onSuccess: (a: A) => Async<R, E, B>): Async<R, E, B>;
|
|
90
|
+
declare function asyncCatchAll<R, E, A, R2, E2, B>(fa: Async<R, E, A>, handler: (e: E) => Async<R2, E2, B>): Async<R & R2, E2, A | B>;
|
|
91
|
+
declare function asyncMapError<R, E, E2, A>(fa: Async<R, E, A>, f: (e: E) => E2): Async<R, E2, A>;
|
|
92
|
+
declare function from<A>(f: (cb: NodeCallback<A>) => void): Async<{}, Error, A>;
|
|
93
|
+
declare function from<A>(thunk: () => Promise<A>): Async<{}, Error, A>;
|
|
94
|
+
declare function unit(): Async<unknown, unknown, undefined>;
|
|
95
|
+
declare const asyncSucceed: <A>(value: A) => Async<unknown, never, A>;
|
|
96
|
+
declare const asyncFail: <E>(error: E) => Async<unknown, E, never>;
|
|
97
|
+
declare const asyncSync: <R, A>(thunk: (env: R) => A) => Async<R, unknown, A>;
|
|
98
|
+
declare const asyncTotal: <A>(thunk: () => A) => Async<unknown, unknown, A>;
|
|
99
|
+
declare const async: <R, E, A>(register: (env: R, cb: (exit: Exit<E, A>) => void) => void | Canceler) => Async<R, E, A>;
|
|
100
|
+
declare function asyncMap<R, E, A, B>(fa: Async<R, E, A>, f: (a: A) => B): Async<R, E, B>;
|
|
101
|
+
declare function asyncFlatMap<R, E, A, B>(fa: Async<R, E, A>, f: (a: A) => Async<R, E, B>): Async<R, E, B>;
|
|
102
|
+
declare function toPromise<R, E, A>(eff: Async<R, E, A>, env: R): Promise<A>;
|
|
103
|
+
declare function fromPromise<R, E, A>(thunk: (env: R) => Promise<A>, onError: (e: unknown) => E): Async<R, E, A>;
|
|
104
|
+
declare function fromCallback<A>(f: (cb: NodeCallback<A>) => void): Async<{}, Error, A>;
|
|
105
|
+
declare function tryPromiseAbortable<A>(thunk: (signal: AbortSignal) => Promise<A>): Async<unknown, BrassError, A>;
|
|
106
|
+
declare function tryPromiseAbortable<R, A>(thunk: (env: R, signal: AbortSignal) => Promise<A>): Async<R, BrassError, A>;
|
|
107
|
+
declare function fromPromiseAbortable<E, A>(thunk: (signal: AbortSignal) => Promise<A>, onError: (e: unknown) => E): Async<unknown, E, A>;
|
|
108
|
+
declare function fromPromiseAbortable<R, E, A>(thunk: (env: R, signal: AbortSignal) => Promise<A>, onError: (e: unknown) => E): Async<R, E, A>;
|
|
109
|
+
declare function acquireRelease<R, E, A>(acquire: Async<R, E, A>, release: (res: A, exit: Exit<E, any>) => Async<R, any, any>, scope: Scope<R>): Async<R, E, A>;
|
|
110
|
+
declare function asyncInterruptible<R, E, A>(register: (env: R, cb: (exit: Exit<E, A>) => void) => void | Canceler): Async<R, E, A>;
|
|
111
|
+
|
|
112
|
+
type None = {
|
|
113
|
+
readonly _tag: "None";
|
|
114
|
+
};
|
|
115
|
+
type Some<A> = {
|
|
116
|
+
readonly _tag: "Some";
|
|
117
|
+
readonly value: A;
|
|
118
|
+
};
|
|
119
|
+
type Option<A> = None | Some<A>;
|
|
120
|
+
declare const none: Option<never>;
|
|
121
|
+
declare const some: <A>(value: A) => Option<A>;
|
|
122
|
+
|
|
123
|
+
type Exit<E, A> = {
|
|
124
|
+
readonly _tag: "Success";
|
|
125
|
+
readonly value: A;
|
|
126
|
+
} | {
|
|
127
|
+
readonly _tag: "Failure";
|
|
128
|
+
readonly error: E;
|
|
129
|
+
};
|
|
130
|
+
type ZIO<R, E, A> = Async<R, E, A>;
|
|
131
|
+
declare const succeed: <A>(value: A) => ZIO<unknown, never, A>;
|
|
132
|
+
declare const fail: <E>(error: E) => ZIO<unknown, E, never>;
|
|
133
|
+
declare const sync: <R, A>(thunk: (env: R) => A) => ZIO<R, unknown, A>;
|
|
134
|
+
declare const map: <R, E, A, B>(fa: ZIO<R, E, A>, f: (a: A) => B) => Async<R, E, B>;
|
|
135
|
+
declare const flatMap: <R, E, A, R2, E2, B>(fa: ZIO<R, E, A>, f: (a: A) => ZIO<R2, E2, B>) => ZIO<R & R2, E | E2, B>;
|
|
136
|
+
declare const mapError: <R, E, E2, A>(fa: ZIO<R, E, A>, f: (e: E) => E2) => any;
|
|
137
|
+
declare const catchAll: <R, E, A, R2, E2, B>(fa: ZIO<R, E, A>, handler: (e: E) => ZIO<R2, E2, B>) => ZIO<R & R2, E2, A | B>;
|
|
138
|
+
declare function orElseOptional<R, E, A, R2, A2>(fa: ZIO<R, Option<E>, A>, that: () => ZIO<R2, Option<E>, A2>): ZIO<R & R2, Option<E>, A | A2>;
|
|
139
|
+
declare const end: <E>() => ZIO<unknown, Option<E>, never>;
|
|
140
|
+
|
|
141
|
+
export { type Async as A, acquireRelease as B, asyncInterruptible as C, none as D, type Exit as E, some as F, type ScopeId as G, Scope as H, withScope as I, type Canceler as J, type CancelToken as K, makeCancelToken as L, linkAbortController as M, type None as N, type Option as O, type Some as S, type ZIO as Z, sync as a, flatMap as b, mapError as c, catchAll as d, end as e, fail as f, asyncFold as g, asyncCatchAll as h, asyncMapError as i, from as j, asyncSucceed as k, asyncFail as l, map as m, asyncSync as n, orElseOptional as o, asyncTotal as p, async as q, asyncMap as r, succeed as s, asyncFlatMap as t, unit as u, toPromise as v, fromPromise as w, fromCallback as x, tryPromiseAbortable as y, fromPromiseAbortable as z };
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
type Canceler = () => void;
|
|
2
|
+
type CancelToken = {
|
|
3
|
+
/** true si ya fue cancelado */
|
|
4
|
+
readonly isCancelled: () => boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Registra un callback que se ejecuta cuando se cancela.
|
|
7
|
+
* Si ya estaba cancelado, lo ejecuta inmediatamente.
|
|
8
|
+
* Devuelve un "unsubscribe" para desregistrar.
|
|
9
|
+
*/
|
|
10
|
+
readonly onCancel: (f: Canceler) => Canceler;
|
|
11
|
+
};
|
|
12
|
+
/** Implementación simple de CancelToken */
|
|
13
|
+
declare function makeCancelToken(): CancelToken & {
|
|
14
|
+
cancel: Canceler;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Helper: conecta un AbortController a un CancelToken.
|
|
18
|
+
* Devuelve una función para desenganchar (unsubscribe).
|
|
19
|
+
*/
|
|
20
|
+
declare function linkAbortController(token: CancelToken, ac: AbortController): Canceler;
|
|
21
|
+
|
|
22
|
+
type FiberId = number;
|
|
23
|
+
type FiberStatus = "Running" | "Done" | "Interrupted";
|
|
24
|
+
type Interrupted = {
|
|
25
|
+
readonly _tag: "Interrupted";
|
|
26
|
+
};
|
|
27
|
+
type Fiber<E, A> = {
|
|
28
|
+
readonly id: FiberId;
|
|
29
|
+
readonly status: () => FiberStatus;
|
|
30
|
+
readonly join: (cb: (exit: Exit<E | Interrupted, A>) => void) => void;
|
|
31
|
+
readonly interrupt: () => void;
|
|
32
|
+
readonly addFinalizer: (f: (exit: Exit<E | Interrupted, A>) => void) => void;
|
|
33
|
+
};
|
|
34
|
+
type BrassError = {
|
|
35
|
+
_tag: "Abort";
|
|
36
|
+
} | {
|
|
37
|
+
_tag: "PromiseRejected";
|
|
38
|
+
reason: unknown;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
type ScopeId = number;
|
|
42
|
+
declare class Scope<R> {
|
|
43
|
+
private readonly env;
|
|
44
|
+
readonly id: ScopeId;
|
|
45
|
+
private closed;
|
|
46
|
+
private readonly children;
|
|
47
|
+
private readonly subScopes;
|
|
48
|
+
private readonly finalizers;
|
|
49
|
+
constructor(env: R);
|
|
50
|
+
/** registra un finalizer (LIFO) */
|
|
51
|
+
addFinalizer(f: (exit: Exit<any, any>) => Async<R, any, any>): void;
|
|
52
|
+
/** crea un sub scope */
|
|
53
|
+
subScope(): Scope<R>;
|
|
54
|
+
/** fork en este scope */
|
|
55
|
+
fork<E, A>(eff: Async<R, E, A>, env: R): Fiber<E | Interrupted, A>;
|
|
56
|
+
/** Cierre estructurado */
|
|
57
|
+
close(exit?: Exit<any, any>): void;
|
|
58
|
+
isClosed(): boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Ejecuta una función dentro de un scope estructurado.
|
|
62
|
+
* Al final (éxito o error), se cierra el scope garantizando cleanup.
|
|
63
|
+
*/
|
|
64
|
+
declare function withScope<R, A>(body: (scope: Scope<R>) => A): A;
|
|
65
|
+
|
|
66
|
+
type NodeCallback<A> = (err: Error | null, result: A) => void;
|
|
67
|
+
type Async<R, E, A> = {
|
|
68
|
+
_tag: "Succeed";
|
|
69
|
+
value: A;
|
|
70
|
+
} | {
|
|
71
|
+
_tag: "Fail";
|
|
72
|
+
error: E;
|
|
73
|
+
} | {
|
|
74
|
+
_tag: "Sync";
|
|
75
|
+
thunk: (env: R) => A;
|
|
76
|
+
} | {
|
|
77
|
+
_tag: "Async";
|
|
78
|
+
register: (env: R, cb: (exit: Exit<E, A>) => void) => void | Canceler;
|
|
79
|
+
} | {
|
|
80
|
+
_tag: "FlatMap";
|
|
81
|
+
first: Async<R, E, any>;
|
|
82
|
+
andThen: (a: any) => Async<R, E, A>;
|
|
83
|
+
} | {
|
|
84
|
+
_tag: "Fold";
|
|
85
|
+
first: Async<R, E, any>;
|
|
86
|
+
onFailure: (e: any) => Async<R, E, A>;
|
|
87
|
+
onSuccess: (a: any) => Async<R, E, A>;
|
|
88
|
+
};
|
|
89
|
+
declare function asyncFold<R, E, A, B>(fa: Async<R, E, A>, onFailure: (e: E) => Async<R, E, B>, onSuccess: (a: A) => Async<R, E, B>): Async<R, E, B>;
|
|
90
|
+
declare function asyncCatchAll<R, E, A, R2, E2, B>(fa: Async<R, E, A>, handler: (e: E) => Async<R2, E2, B>): Async<R & R2, E2, A | B>;
|
|
91
|
+
declare function asyncMapError<R, E, E2, A>(fa: Async<R, E, A>, f: (e: E) => E2): Async<R, E2, A>;
|
|
92
|
+
declare function from<A>(f: (cb: NodeCallback<A>) => void): Async<{}, Error, A>;
|
|
93
|
+
declare function from<A>(thunk: () => Promise<A>): Async<{}, Error, A>;
|
|
94
|
+
declare function unit(): Async<unknown, unknown, undefined>;
|
|
95
|
+
declare const asyncSucceed: <A>(value: A) => Async<unknown, never, A>;
|
|
96
|
+
declare const asyncFail: <E>(error: E) => Async<unknown, E, never>;
|
|
97
|
+
declare const asyncSync: <R, A>(thunk: (env: R) => A) => Async<R, unknown, A>;
|
|
98
|
+
declare const asyncTotal: <A>(thunk: () => A) => Async<unknown, unknown, A>;
|
|
99
|
+
declare const async: <R, E, A>(register: (env: R, cb: (exit: Exit<E, A>) => void) => void | Canceler) => Async<R, E, A>;
|
|
100
|
+
declare function asyncMap<R, E, A, B>(fa: Async<R, E, A>, f: (a: A) => B): Async<R, E, B>;
|
|
101
|
+
declare function asyncFlatMap<R, E, A, B>(fa: Async<R, E, A>, f: (a: A) => Async<R, E, B>): Async<R, E, B>;
|
|
102
|
+
declare function toPromise<R, E, A>(eff: Async<R, E, A>, env: R): Promise<A>;
|
|
103
|
+
declare function fromPromise<R, E, A>(thunk: (env: R) => Promise<A>, onError: (e: unknown) => E): Async<R, E, A>;
|
|
104
|
+
declare function fromCallback<A>(f: (cb: NodeCallback<A>) => void): Async<{}, Error, A>;
|
|
105
|
+
declare function tryPromiseAbortable<A>(thunk: (signal: AbortSignal) => Promise<A>): Async<unknown, BrassError, A>;
|
|
106
|
+
declare function tryPromiseAbortable<R, A>(thunk: (env: R, signal: AbortSignal) => Promise<A>): Async<R, BrassError, A>;
|
|
107
|
+
declare function fromPromiseAbortable<E, A>(thunk: (signal: AbortSignal) => Promise<A>, onError: (e: unknown) => E): Async<unknown, E, A>;
|
|
108
|
+
declare function fromPromiseAbortable<R, E, A>(thunk: (env: R, signal: AbortSignal) => Promise<A>, onError: (e: unknown) => E): Async<R, E, A>;
|
|
109
|
+
declare function acquireRelease<R, E, A>(acquire: Async<R, E, A>, release: (res: A, exit: Exit<E, any>) => Async<R, any, any>, scope: Scope<R>): Async<R, E, A>;
|
|
110
|
+
declare function asyncInterruptible<R, E, A>(register: (env: R, cb: (exit: Exit<E, A>) => void) => void | Canceler): Async<R, E, A>;
|
|
111
|
+
|
|
112
|
+
type None = {
|
|
113
|
+
readonly _tag: "None";
|
|
114
|
+
};
|
|
115
|
+
type Some<A> = {
|
|
116
|
+
readonly _tag: "Some";
|
|
117
|
+
readonly value: A;
|
|
118
|
+
};
|
|
119
|
+
type Option<A> = None | Some<A>;
|
|
120
|
+
declare const none: Option<never>;
|
|
121
|
+
declare const some: <A>(value: A) => Option<A>;
|
|
122
|
+
|
|
123
|
+
type Exit<E, A> = {
|
|
124
|
+
readonly _tag: "Success";
|
|
125
|
+
readonly value: A;
|
|
126
|
+
} | {
|
|
127
|
+
readonly _tag: "Failure";
|
|
128
|
+
readonly error: E;
|
|
129
|
+
};
|
|
130
|
+
type ZIO<R, E, A> = Async<R, E, A>;
|
|
131
|
+
declare const succeed: <A>(value: A) => ZIO<unknown, never, A>;
|
|
132
|
+
declare const fail: <E>(error: E) => ZIO<unknown, E, never>;
|
|
133
|
+
declare const sync: <R, A>(thunk: (env: R) => A) => ZIO<R, unknown, A>;
|
|
134
|
+
declare const map: <R, E, A, B>(fa: ZIO<R, E, A>, f: (a: A) => B) => Async<R, E, B>;
|
|
135
|
+
declare const flatMap: <R, E, A, R2, E2, B>(fa: ZIO<R, E, A>, f: (a: A) => ZIO<R2, E2, B>) => ZIO<R & R2, E | E2, B>;
|
|
136
|
+
declare const mapError: <R, E, E2, A>(fa: ZIO<R, E, A>, f: (e: E) => E2) => any;
|
|
137
|
+
declare const catchAll: <R, E, A, R2, E2, B>(fa: ZIO<R, E, A>, handler: (e: E) => ZIO<R2, E2, B>) => ZIO<R & R2, E2, A | B>;
|
|
138
|
+
declare function orElseOptional<R, E, A, R2, A2>(fa: ZIO<R, Option<E>, A>, that: () => ZIO<R2, Option<E>, A2>): ZIO<R & R2, Option<E>, A | A2>;
|
|
139
|
+
declare const end: <E>() => ZIO<unknown, Option<E>, never>;
|
|
140
|
+
|
|
141
|
+
export { type Async as A, acquireRelease as B, asyncInterruptible as C, none as D, type Exit as E, some as F, type ScopeId as G, Scope as H, withScope as I, type Canceler as J, type CancelToken as K, makeCancelToken as L, linkAbortController as M, type None as N, type Option as O, type Some as S, type ZIO as Z, sync as a, flatMap as b, mapError as c, catchAll as d, end as e, fail as f, asyncFold as g, asyncCatchAll as h, asyncMapError as i, from as j, asyncSucceed as k, asyncFail as l, map as m, asyncSync as n, orElseOptional as o, asyncTotal as p, async as q, asyncMap as r, succeed as s, asyncFlatMap as t, unit as u, toPromise as v, fromPromise as w, fromCallback as x, tryPromiseAbortable as y, fromPromiseAbortable as z };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';var chunkC6HOJTND_cjs=require('../chunk-C6HOJTND.cjs');var h=s=>s instanceof DOMException&&s.name==="AbortError"?{_tag:"Abort"}:typeof s=="object"&&s&&"_tag"in s?s:{_tag:"FetchError",message:String(s)};function b(s={}){let p=s.baseUrl??"",d=s.headers??{},n=t=>chunkC6HOJTND_cjs.t(async e=>{let r;try{r=new URL(t.url,p);}catch{throw {_tag:"BadUrl",message:`URL inv\xE1lida: ${t.url}`}}let g=performance.now(),o=await fetch(r,{...t,headers:{...d,...t.headers??{}},signal:e}),c=await o.text(),i={};return o.headers.forEach((u,m)=>i[m]=u),{status:o.status,statusText:o.statusText,headers:i,bodyText:c,ms:Math.round(performance.now()-g)}},h);return {get:(t,e)=>n({url:t,method:"GET",...e??{}}),post:(t,e,r)=>n({url:t,method:"POST",body:e&&e.length>0?e:void 0,...r??{}}),getText:(t,e)=>n({url:t,method:"GET",...e??{}}).map(r=>r.bodyText),getJson:(t,e)=>n({url:t,method:"GET",...e??{}}).map(r=>JSON.parse(r.bodyText)),postJson:(t,e,r)=>n({url:t,method:"POST",headers:{"content-type":"application/json",...r?.headers??{}},body:JSON.stringify(e),...r??{}})}}exports.makeHttp=b;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { A as Async } from '../effect-D4h--Rys.cjs';
|
|
2
|
+
|
|
3
|
+
type HttpError = {
|
|
4
|
+
_tag: "Abort";
|
|
5
|
+
} | {
|
|
6
|
+
_tag: "BadUrl";
|
|
7
|
+
message: string;
|
|
8
|
+
} | {
|
|
9
|
+
_tag: "FetchError";
|
|
10
|
+
message: string;
|
|
11
|
+
};
|
|
12
|
+
type ResponseSpec = {
|
|
13
|
+
status: number;
|
|
14
|
+
statusText: string;
|
|
15
|
+
headers: Record<string, string>;
|
|
16
|
+
bodyText: string;
|
|
17
|
+
ms: number;
|
|
18
|
+
};
|
|
19
|
+
type HttpClient = {
|
|
20
|
+
get: (url: string, init?: Omit<RequestInit, "method">) => Async<unknown, HttpError, ResponseSpec>;
|
|
21
|
+
post: (url: string, body?: string, init?: Omit<RequestInit, "method" | "body">) => Async<unknown, HttpError, ResponseSpec>;
|
|
22
|
+
getText: (url: string, init?: Omit<RequestInit, "method">) => Async<unknown, HttpError, string>;
|
|
23
|
+
getJson: <A>(url: string, init?: Omit<RequestInit, "method">) => Async<unknown, HttpError, A>;
|
|
24
|
+
postJson: <A extends object>(url: string, body: A, init?: Omit<RequestInit, "method" | "body">) => Async<unknown, HttpError, ResponseSpec>;
|
|
25
|
+
};
|
|
26
|
+
type MakeHttpConfig = {
|
|
27
|
+
baseUrl?: string;
|
|
28
|
+
headers?: Record<string, string>;
|
|
29
|
+
};
|
|
30
|
+
declare function makeHttp(cfg?: MakeHttpConfig): HttpClient;
|
|
31
|
+
|
|
32
|
+
export { type HttpClient, type HttpError, type ResponseSpec, makeHttp };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { A as Async } from '../effect-D4h--Rys.js';
|
|
2
|
+
|
|
3
|
+
type HttpError = {
|
|
4
|
+
_tag: "Abort";
|
|
5
|
+
} | {
|
|
6
|
+
_tag: "BadUrl";
|
|
7
|
+
message: string;
|
|
8
|
+
} | {
|
|
9
|
+
_tag: "FetchError";
|
|
10
|
+
message: string;
|
|
11
|
+
};
|
|
12
|
+
type ResponseSpec = {
|
|
13
|
+
status: number;
|
|
14
|
+
statusText: string;
|
|
15
|
+
headers: Record<string, string>;
|
|
16
|
+
bodyText: string;
|
|
17
|
+
ms: number;
|
|
18
|
+
};
|
|
19
|
+
type HttpClient = {
|
|
20
|
+
get: (url: string, init?: Omit<RequestInit, "method">) => Async<unknown, HttpError, ResponseSpec>;
|
|
21
|
+
post: (url: string, body?: string, init?: Omit<RequestInit, "method" | "body">) => Async<unknown, HttpError, ResponseSpec>;
|
|
22
|
+
getText: (url: string, init?: Omit<RequestInit, "method">) => Async<unknown, HttpError, string>;
|
|
23
|
+
getJson: <A>(url: string, init?: Omit<RequestInit, "method">) => Async<unknown, HttpError, A>;
|
|
24
|
+
postJson: <A extends object>(url: string, body: A, init?: Omit<RequestInit, "method" | "body">) => Async<unknown, HttpError, ResponseSpec>;
|
|
25
|
+
};
|
|
26
|
+
type MakeHttpConfig = {
|
|
27
|
+
baseUrl?: string;
|
|
28
|
+
headers?: Record<string, string>;
|
|
29
|
+
};
|
|
30
|
+
declare function makeHttp(cfg?: MakeHttpConfig): HttpClient;
|
|
31
|
+
|
|
32
|
+
export { type HttpClient, type HttpError, type ResponseSpec, makeHttp };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {t}from'../chunk-ABGJNLHY.js';var h=s=>s instanceof DOMException&&s.name==="AbortError"?{_tag:"Abort"}:typeof s=="object"&&s&&"_tag"in s?s:{_tag:"FetchError",message:String(s)};function b(s={}){let p=s.baseUrl??"",d=s.headers??{},n=t$1=>t(async e=>{let r;try{r=new URL(t$1.url,p);}catch{throw {_tag:"BadUrl",message:`URL inv\xE1lida: ${t$1.url}`}}let g=performance.now(),o=await fetch(r,{...t$1,headers:{...d,...t$1.headers??{}},signal:e}),c=await o.text(),i={};return o.headers.forEach((u,m)=>i[m]=u),{status:o.status,statusText:o.statusText,headers:i,bodyText:c,ms:Math.round(performance.now()-g)}},h);return {get:(t,e)=>n({url:t,method:"GET",...e??{}}),post:(t,e,r)=>n({url:t,method:"POST",body:e&&e.length>0?e:void 0,...r??{}}),getText:(t,e)=>n({url:t,method:"GET",...e??{}}).map(r=>r.bodyText),getJson:(t,e)=>n({url:t,method:"GET",...e??{}}).map(r=>JSON.parse(r.bodyText)),postJson:(t,e,r)=>n({url:t,method:"POST",headers:{"content-type":"application/json",...r?.headers??{}},body:JSON.stringify(e),...r??{}})}}export{b as makeHttp};
|
package/dist/index.cjs
CHANGED
|
@@ -1,25 +1 @@
|
|
|
1
|
-
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./types/effect"), exports);
|
|
18
|
-
__exportStar(require("./types/asyncEffect"), exports);
|
|
19
|
-
__exportStar(require("./stream/stream"), exports);
|
|
20
|
-
__exportStar(require("./types/option"), exports);
|
|
21
|
-
__exportStar(require("./types/effect"), exports);
|
|
22
|
-
__exportStar(require("./scheduler/scope"), exports);
|
|
23
|
-
__exportStar(require("./scheduler/scheduler"), exports);
|
|
24
|
-
__exportStar(require("./types/cancel"), exports);
|
|
25
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
'use strict';var chunkC6HOJTND_cjs=require('./chunk-C6HOJTND.cjs');var l={_tag:"None"},y=e=>({_tag:"Some",value:e});var Z=e=>chunkC6HOJTND_cjs.i(e),u=e=>chunkC6HOJTND_cjs.j(e),X=e=>chunkC6HOJTND_cjs.k(t=>e(t)),A=(e,t)=>chunkC6HOJTND_cjs.n(e,t),_=(e,t)=>chunkC6HOJTND_cjs.o(e,n=>t(n)),O=(e,t)=>chunkC6HOJTND_cjs.f(e,t),Y=(e,t)=>chunkC6HOJTND_cjs.d(e,n=>t(n),n=>chunkC6HOJTND_cjs.i(n));function x(e,t){return chunkC6HOJTND_cjs.d(e,n=>n._tag==="Some"?chunkC6HOJTND_cjs.j(n):t(),n=>chunkC6HOJTND_cjs.i(n))}var $=()=>u(l);var h=e=>e._tag==="None"?l:y(e.value),g=e=>({_tag:"FromPull",pull:e}),w=()=>({_tag:"Empty"}),F=e=>({_tag:"Emit",value:e}),d=(e,t)=>({_tag:"Concat",left:e,right:t}),v=e=>({_tag:"Flatten",stream:e});function i(e){switch(e._tag){case "Empty":return u(l);case "Emit":return A(O(e.value,t=>y(t)),t=>[t,w()]);case "FromPull":return e.pull;case "Concat":return x(A(i(e.left),([t,n])=>[t,d(n,e.right)]),()=>i(e.right));case "Flatten":return _(i(e.stream),([t,n])=>x(A(i(t),([r,o])=>[r,d(o,v(n))]),()=>i(v(n))))}}function m(e,t){switch(e._tag){case "Empty":return w();case "Emit":return F(A(e.value,t));case "FromPull":return g(A(e.pull,([n,r])=>[t(n),m(r,t)]));case "Concat":return d(m(e.left,t),m(e.right,t));case "Flatten":{let n=m(e.stream,r=>m(r,t));return v(n)}}}function se(e,t){let n=r=>g(r>t?chunkC6HOJTND_cjs.j(l):chunkC6HOJTND_cjs.i([r,n(r+1)]));return n(e)}function b(e,t){let n=chunkC6HOJTND_cjs.d(chunkC6HOJTND_cjs.f(i(e),r=>h(r)),r=>chunkC6HOJTND_cjs.j(r),([r,o])=>chunkC6HOJTND_cjs.d(chunkC6HOJTND_cjs.f(i(t),E=>h(E)),E=>chunkC6HOJTND_cjs.j(E),([E,S])=>chunkC6HOJTND_cjs.i([[r,E],b(o,S)])));return g(n)}function ie(e,t){let n=r=>chunkC6HOJTND_cjs.d(chunkC6HOJTND_cjs.f(i(r),o=>h(o)),o=>o._tag==="None"?chunkC6HOJTND_cjs.i(void 0):chunkC6HOJTND_cjs.j(o),([o,E])=>chunkC6HOJTND_cjs.o(chunkC6HOJTND_cjs.f(t(o),S=>y(S)),()=>n(E)));return chunkC6HOJTND_cjs.d(n(e),r=>r._tag==="None"?chunkC6HOJTND_cjs.i(void 0):chunkC6HOJTND_cjs.j(r.value),()=>chunkC6HOJTND_cjs.i(void 0))}function pe(e){let t=w();for(let n=e.length-1;n>=0;n--){let r=F(Z(e[n]));t=d(r,t);}return t}function le(e){let t=(n,r)=>chunkC6HOJTND_cjs.d(i(n),o=>o._tag==="None"?Z(r):u(o),([o,E])=>t(E,[...r,o]));return O(t(e,[]),n=>{if(n._tag==="Some")return n.value;throw new Error("unreachable: stream end handled as success")})}var k=1,I=class e{constructor(t){this.env=t;this.id=k++;}id;closed=false;children=new Set;subScopes=new Set;finalizers=[];addFinalizer(t){if(this.closed)throw new Error("Trying to add finalizer to closed scope");this.finalizers.push(t);}subScope(){if(this.closed)throw new Error("Scope closed");let t=new e(this.env);return this.subScopes.add(t),t}fork(t,n){if(this.closed)throw new Error("Scope closed");let r=chunkC6HOJTND_cjs.c(t,n);return this.children.add(r),r.join(()=>{this.children.delete(r);}),r}close(t={_tag:"Success",value:void 0}){if(!this.closed){this.closed=true;for(let n of this.children)n.interrupt();for(let n of this.subScopes)n.close(t);for(;this.finalizers.length>0;){let r=this.finalizers.pop()(t);chunkC6HOJTND_cjs.c(r,this.env);}this.children.clear(),this.subScopes.clear();}}isClosed(){return this.closed}};function ue(e){let t=new I({});try{return e(t)}finally{t.close();}}function Se(){let e=false,t=new Set;return {isCancelled:()=>e,onCancel:r=>{if(e){try{r();}catch{}return ()=>{}}return t.add(r),()=>{t.delete(r);}},cancel:()=>{if(!e){e=true;for(let r of t)try{r();}catch{}t.clear();}}}}function fe(e,t){return e.onCancel(()=>t.abort())}Object.defineProperty(exports,"Scheduler",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.a}});Object.defineProperty(exports,"acquireRelease",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.u}});Object.defineProperty(exports,"async",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.m}});Object.defineProperty(exports,"asyncCatchAll",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.e}});Object.defineProperty(exports,"asyncFail",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.j}});Object.defineProperty(exports,"asyncFlatMap",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.o}});Object.defineProperty(exports,"asyncFold",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.d}});Object.defineProperty(exports,"asyncInterruptible",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.v}});Object.defineProperty(exports,"asyncMap",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.n}});Object.defineProperty(exports,"asyncMapError",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.f}});Object.defineProperty(exports,"asyncSucceed",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.i}});Object.defineProperty(exports,"asyncSync",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.k}});Object.defineProperty(exports,"asyncTotal",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.l}});Object.defineProperty(exports,"from",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.g}});Object.defineProperty(exports,"fromCallback",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.r}});Object.defineProperty(exports,"fromPromise",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.q}});Object.defineProperty(exports,"fromPromiseAbortable",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.t}});Object.defineProperty(exports,"globalScheduler",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.b}});Object.defineProperty(exports,"toPromise",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.p}});Object.defineProperty(exports,"tryPromiseAbortable",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.s}});Object.defineProperty(exports,"unit",{enumerable:true,get:function(){return chunkC6HOJTND_cjs.h}});exports.Scope=I;exports.catchAll=Y;exports.collectStream=le;exports.concatStream=d;exports.emitStream=F;exports.emptyStream=w;exports.end=$;exports.fail=u;exports.flatMap=_;exports.flattenStream=v;exports.foreachStream=ie;exports.fromArray=pe;exports.fromPull=g;exports.linkAbortController=fe;exports.makeCancelToken=Se;exports.map=A;exports.mapError=O;exports.mapStream=m;exports.none=l;exports.orElseOptional=x;exports.rangeStream=se;exports.some=y;exports.succeed=Z;exports.sync=X;exports.uncons=i;exports.withScope=ue;exports.zip=b;
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Z as ZIO, O as Option, A as Async } from './effect-D4h--Rys.cjs';
|
|
2
|
+
export { K as CancelToken, J as Canceler, E as Exit, N as None, H as Scope, G as ScopeId, S as Some, B as acquireRelease, q as async, h as asyncCatchAll, l as asyncFail, t as asyncFlatMap, g as asyncFold, C as asyncInterruptible, r as asyncMap, i as asyncMapError, k as asyncSucceed, n as asyncSync, p as asyncTotal, d as catchAll, e as end, f as fail, b as flatMap, j as from, x as fromCallback, w as fromPromise, z as fromPromiseAbortable, M as linkAbortController, L as makeCancelToken, m as map, c as mapError, D as none, o as orElseOptional, F as some, s as succeed, a as sync, v as toPromise, y as tryPromiseAbortable, u as unit, I as withScope } from './effect-D4h--Rys.cjs';
|
|
3
|
+
|
|
4
|
+
type Task = () => void;
|
|
5
|
+
declare class Scheduler {
|
|
6
|
+
private queue;
|
|
7
|
+
private flushing;
|
|
8
|
+
private requested;
|
|
9
|
+
schedule(task: Task, tag?: string): void;
|
|
10
|
+
private requestFlush;
|
|
11
|
+
private flush;
|
|
12
|
+
}
|
|
13
|
+
declare const globalScheduler: Scheduler;
|
|
14
|
+
|
|
15
|
+
type Empty<R, E, A> = {
|
|
16
|
+
readonly _tag: "Empty";
|
|
17
|
+
};
|
|
18
|
+
type Emit<R, E, A> = {
|
|
19
|
+
readonly _tag: "Emit";
|
|
20
|
+
readonly value: ZIO<R, E, A>;
|
|
21
|
+
};
|
|
22
|
+
type Concat<R, E, A> = {
|
|
23
|
+
readonly _tag: "Concat";
|
|
24
|
+
readonly left: ZStream<R, E, A>;
|
|
25
|
+
readonly right: ZStream<R, E, A>;
|
|
26
|
+
};
|
|
27
|
+
type Flatten<R, E, A> = {
|
|
28
|
+
readonly _tag: "Flatten";
|
|
29
|
+
readonly stream: ZStream<R, E, ZStream<R, E, A>>;
|
|
30
|
+
};
|
|
31
|
+
type FromPull<R, E, A> = {
|
|
32
|
+
readonly _tag: "FromPull";
|
|
33
|
+
readonly pull: ZIO<R, Option<E>, [A, ZStream<R, E, A>]>;
|
|
34
|
+
};
|
|
35
|
+
type ZStream<R, E, A> = Empty<R, E, A> | Emit<R, E, A> | Concat<R, E, A> | FromPull<R, E, A> | Flatten<R, E, A>;
|
|
36
|
+
declare const fromPull: <R, E, A>(pull: ZIO<R, Option<E>, [A, ZStream<R, E, A>]>) => ZStream<R, E, A>;
|
|
37
|
+
declare const emptyStream: <R, E, A>() => ZStream<R, E, A>;
|
|
38
|
+
declare const emitStream: <R, E, A>(value: ZIO<R, E, A>) => ZStream<R, E, A>;
|
|
39
|
+
declare const concatStream: <R, E, A>(left: ZStream<R, E, A>, right: ZStream<R, E, A>) => ZStream<R, E, A>;
|
|
40
|
+
declare const flattenStream: <R, E, A>(stream: ZStream<R, E, ZStream<R, E, A>>) => ZStream<R, E, A>;
|
|
41
|
+
declare function uncons<R, E, A>(self: ZStream<R, E, A>): ZIO<R, Option<E>, [A, ZStream<R, E, A>]>;
|
|
42
|
+
declare function mapStream<R, E, A, B>(self: ZStream<R, E, A>, f: (a: A) => B): ZStream<R, E, B>;
|
|
43
|
+
declare function rangeStream(start: number, end: number): ZStream<unknown, never, number>;
|
|
44
|
+
declare function zip<R, E1, A, E2, B>(left: ZStream<R, E1, A>, right: ZStream<R, E2, B>): ZStream<R, E1 | E2, [A, B]>;
|
|
45
|
+
declare function foreachStream<R, E, A, R2, E2>(stream: ZStream<R, E, A>, f: (a: A) => Async<R2, E2, void>): Async<R & R2, E | E2, void>;
|
|
46
|
+
declare function fromArray<A>(values: readonly A[]): ZStream<unknown, never, A>;
|
|
47
|
+
declare function collectStream<R, E, A>(stream: ZStream<R, E, A>): ZIO<R, E, A[]>;
|
|
48
|
+
|
|
49
|
+
export { Async, type Concat, type Emit, type Empty, type Flatten, type FromPull, Option, Scheduler, type Task, ZIO, type ZStream, collectStream, concatStream, emitStream, emptyStream, flattenStream, foreachStream, fromArray, fromPull, globalScheduler, mapStream, rangeStream, uncons, zip };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { Z as ZIO, O as Option, A as Async } from './effect-D4h--Rys.js';
|
|
2
|
+
export { K as CancelToken, J as Canceler, E as Exit, N as None, H as Scope, G as ScopeId, S as Some, B as acquireRelease, q as async, h as asyncCatchAll, l as asyncFail, t as asyncFlatMap, g as asyncFold, C as asyncInterruptible, r as asyncMap, i as asyncMapError, k as asyncSucceed, n as asyncSync, p as asyncTotal, d as catchAll, e as end, f as fail, b as flatMap, j as from, x as fromCallback, w as fromPromise, z as fromPromiseAbortable, M as linkAbortController, L as makeCancelToken, m as map, c as mapError, D as none, o as orElseOptional, F as some, s as succeed, a as sync, v as toPromise, y as tryPromiseAbortable, u as unit, I as withScope } from './effect-D4h--Rys.js';
|
|
3
|
+
|
|
4
|
+
type Task = () => void;
|
|
5
|
+
declare class Scheduler {
|
|
6
|
+
private queue;
|
|
7
|
+
private flushing;
|
|
8
|
+
private requested;
|
|
9
|
+
schedule(task: Task, tag?: string): void;
|
|
10
|
+
private requestFlush;
|
|
11
|
+
private flush;
|
|
12
|
+
}
|
|
13
|
+
declare const globalScheduler: Scheduler;
|
|
14
|
+
|
|
15
|
+
type Empty<R, E, A> = {
|
|
16
|
+
readonly _tag: "Empty";
|
|
17
|
+
};
|
|
18
|
+
type Emit<R, E, A> = {
|
|
19
|
+
readonly _tag: "Emit";
|
|
20
|
+
readonly value: ZIO<R, E, A>;
|
|
21
|
+
};
|
|
22
|
+
type Concat<R, E, A> = {
|
|
23
|
+
readonly _tag: "Concat";
|
|
24
|
+
readonly left: ZStream<R, E, A>;
|
|
25
|
+
readonly right: ZStream<R, E, A>;
|
|
26
|
+
};
|
|
27
|
+
type Flatten<R, E, A> = {
|
|
28
|
+
readonly _tag: "Flatten";
|
|
29
|
+
readonly stream: ZStream<R, E, ZStream<R, E, A>>;
|
|
30
|
+
};
|
|
31
|
+
type FromPull<R, E, A> = {
|
|
32
|
+
readonly _tag: "FromPull";
|
|
33
|
+
readonly pull: ZIO<R, Option<E>, [A, ZStream<R, E, A>]>;
|
|
34
|
+
};
|
|
35
|
+
type ZStream<R, E, A> = Empty<R, E, A> | Emit<R, E, A> | Concat<R, E, A> | FromPull<R, E, A> | Flatten<R, E, A>;
|
|
36
|
+
declare const fromPull: <R, E, A>(pull: ZIO<R, Option<E>, [A, ZStream<R, E, A>]>) => ZStream<R, E, A>;
|
|
37
|
+
declare const emptyStream: <R, E, A>() => ZStream<R, E, A>;
|
|
38
|
+
declare const emitStream: <R, E, A>(value: ZIO<R, E, A>) => ZStream<R, E, A>;
|
|
39
|
+
declare const concatStream: <R, E, A>(left: ZStream<R, E, A>, right: ZStream<R, E, A>) => ZStream<R, E, A>;
|
|
40
|
+
declare const flattenStream: <R, E, A>(stream: ZStream<R, E, ZStream<R, E, A>>) => ZStream<R, E, A>;
|
|
41
|
+
declare function uncons<R, E, A>(self: ZStream<R, E, A>): ZIO<R, Option<E>, [A, ZStream<R, E, A>]>;
|
|
42
|
+
declare function mapStream<R, E, A, B>(self: ZStream<R, E, A>, f: (a: A) => B): ZStream<R, E, B>;
|
|
43
|
+
declare function rangeStream(start: number, end: number): ZStream<unknown, never, number>;
|
|
44
|
+
declare function zip<R, E1, A, E2, B>(left: ZStream<R, E1, A>, right: ZStream<R, E2, B>): ZStream<R, E1 | E2, [A, B]>;
|
|
45
|
+
declare function foreachStream<R, E, A, R2, E2>(stream: ZStream<R, E, A>, f: (a: A) => Async<R2, E2, void>): Async<R & R2, E | E2, void>;
|
|
46
|
+
declare function fromArray<A>(values: readonly A[]): ZStream<unknown, never, A>;
|
|
47
|
+
declare function collectStream<R, E, A>(stream: ZStream<R, E, A>): ZIO<R, E, A[]>;
|
|
48
|
+
|
|
49
|
+
export { Async, type Concat, type Emit, type Empty, type Flatten, type FromPull, Option, Scheduler, type Task, ZIO, type ZStream, collectStream, concatStream, emitStream, emptyStream, flattenStream, foreachStream, fromArray, fromPull, globalScheduler, mapStream, rangeStream, uncons, zip };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {d as d$1,j,o,n,f,i as i$1,k as k$1,c}from'./chunk-ABGJNLHY.js';export{a as Scheduler,u as acquireRelease,m as async,e as asyncCatchAll,j as asyncFail,o as asyncFlatMap,d as asyncFold,v as asyncInterruptible,n as asyncMap,f as asyncMapError,i as asyncSucceed,k as asyncSync,l as asyncTotal,g as from,r as fromCallback,q as fromPromise,t as fromPromiseAbortable,b as globalScheduler,p as toPromise,s as tryPromiseAbortable,h as unit}from'./chunk-ABGJNLHY.js';var l={_tag:"None"},y=e=>({_tag:"Some",value:e});var Z=e=>i$1(e),u=e=>j(e),X=e=>k$1(t=>e(t)),A=(e,t)=>n(e,t),_=(e,t)=>o(e,n=>t(n)),O=(e,t)=>f(e,t),Y=(e,t)=>d$1(e,n=>t(n),n=>i$1(n));function x(e,t){return d$1(e,n=>n._tag==="Some"?j(n):t(),n=>i$1(n))}var $=()=>u(l);var h=e=>e._tag==="None"?l:y(e.value),g=e=>({_tag:"FromPull",pull:e}),w=()=>({_tag:"Empty"}),F=e=>({_tag:"Emit",value:e}),d=(e,t)=>({_tag:"Concat",left:e,right:t}),v=e=>({_tag:"Flatten",stream:e});function i(e){switch(e._tag){case "Empty":return u(l);case "Emit":return A(O(e.value,t=>y(t)),t=>[t,w()]);case "FromPull":return e.pull;case "Concat":return x(A(i(e.left),([t,n])=>[t,d(n,e.right)]),()=>i(e.right));case "Flatten":return _(i(e.stream),([t,n])=>x(A(i(t),([r,o])=>[r,d(o,v(n))]),()=>i(v(n))))}}function m(e,t){switch(e._tag){case "Empty":return w();case "Emit":return F(A(e.value,t));case "FromPull":return g(A(e.pull,([n,r])=>[t(n),m(r,t)]));case "Concat":return d(m(e.left,t),m(e.right,t));case "Flatten":{let n=m(e.stream,r=>m(r,t));return v(n)}}}function se(e,t){let n=r=>g(r>t?j(l):i$1([r,n(r+1)]));return n(e)}function b(e,t){let n=d$1(f(i(e),r=>h(r)),r=>j(r),([r,o])=>d$1(f(i(t),E=>h(E)),E=>j(E),([E,S])=>i$1([[r,E],b(o,S)])));return g(n)}function ie(e,t){let n=r=>d$1(f(i(r),o=>h(o)),o=>o._tag==="None"?i$1(void 0):j(o),([o$1,E])=>o(f(t(o$1),S=>y(S)),()=>n(E)));return d$1(n(e),r=>r._tag==="None"?i$1(void 0):j(r.value),()=>i$1(void 0))}function pe(e){let t=w();for(let n=e.length-1;n>=0;n--){let r=F(Z(e[n]));t=d(r,t);}return t}function le(e){let t=(n,r)=>d$1(i(n),o=>o._tag==="None"?Z(r):u(o),([o,E])=>t(E,[...r,o]));return O(t(e,[]),n=>{if(n._tag==="Some")return n.value;throw new Error("unreachable: stream end handled as success")})}var k=1,I=class e{constructor(t){this.env=t;this.id=k++;}id;closed=false;children=new Set;subScopes=new Set;finalizers=[];addFinalizer(t){if(this.closed)throw new Error("Trying to add finalizer to closed scope");this.finalizers.push(t);}subScope(){if(this.closed)throw new Error("Scope closed");let t=new e(this.env);return this.subScopes.add(t),t}fork(t,n){if(this.closed)throw new Error("Scope closed");let r=c(t,n);return this.children.add(r),r.join(()=>{this.children.delete(r);}),r}close(t={_tag:"Success",value:void 0}){if(!this.closed){this.closed=true;for(let n of this.children)n.interrupt();for(let n of this.subScopes)n.close(t);for(;this.finalizers.length>0;){let r=this.finalizers.pop()(t);c(r,this.env);}this.children.clear(),this.subScopes.clear();}}isClosed(){return this.closed}};function ue(e){let t=new I({});try{return e(t)}finally{t.close();}}function Se(){let e=false,t=new Set;return {isCancelled:()=>e,onCancel:r=>{if(e){try{r();}catch{}return ()=>{}}return t.add(r),()=>{t.delete(r);}},cancel:()=>{if(!e){e=true;for(let r of t)try{r();}catch{}t.clear();}}}}function fe(e,t){return e.onCancel(()=>t.abort())}export{I as Scope,Y as catchAll,le as collectStream,d as concatStream,F as emitStream,w as emptyStream,$ as end,u as fail,_ as flatMap,v as flattenStream,ie as foreachStream,pe as fromArray,g as fromPull,fe as linkAbortController,Se as makeCancelToken,A as map,O as mapError,m as mapStream,l as none,x as orElseOptional,se as rangeStream,y as some,Z as succeed,X as sync,i as uncons,ue as withScope,b as zip};
|