@fncts/io 0.0.37 → 0.0.39
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/Channel/definition.d.ts +108 -104
- package/FiberRef/unsafe.d.ts +5 -0
- package/Future/definition.d.ts +24 -3
- package/IO/api/all.d.ts +14 -15
- package/IO/definition.d.ts +17 -15
- package/_cjs/Channel/api/mapOutConcurrentIO.cjs +8 -2
- package/_cjs/Channel/api/mapOutConcurrentIO.cjs.map +1 -1
- package/_cjs/Channel/api/mergeAllWith.cjs +23 -14
- package/_cjs/Channel/api/mergeAllWith.cjs.map +1 -1
- package/_cjs/Channel/api/mergeWith.cjs +16 -4
- package/_cjs/Channel/api/mergeWith.cjs.map +1 -1
- package/_cjs/Channel/api.cjs +131 -36
- package/_cjs/Channel/api.cjs.map +1 -1
- package/_cjs/Channel/core-api.cjs +13 -3
- package/_cjs/Channel/core-api.cjs.map +1 -1
- package/_cjs/Channel/definition.cjs +18 -143
- package/_cjs/Channel/definition.cjs.map +1 -1
- package/_cjs/Channel/internal/ChannelExecutor.cjs +51 -49
- package/_cjs/Channel/internal/ChannelExecutor.cjs.map +1 -1
- package/_cjs/Channel/internal/SingleProducerAsyncInput.cjs +8 -2
- package/_cjs/Channel/internal/SingleProducerAsyncInput.cjs.map +1 -1
- package/_cjs/Console/live.cjs +1 -1
- package/_cjs/Console/live.cjs.map +1 -1
- package/_cjs/Fiber/FiberRuntime.cjs +23 -18
- package/_cjs/Fiber/FiberRuntime.cjs.map +1 -1
- package/_cjs/FiberRef/definition.cjs +3 -1
- package/_cjs/FiberRef/definition.cjs.map +1 -1
- package/_cjs/FiberRef/unsafe.cjs +6 -1
- package/_cjs/FiberRef/unsafe.cjs.map +1 -1
- package/_cjs/Future/api.cjs +12 -12
- package/_cjs/Future/api.cjs.map +1 -1
- package/_cjs/Future/definition.cjs +10 -3
- package/_cjs/Future/definition.cjs.map +1 -1
- package/_cjs/IO/api/all.cjs +4 -4
- package/_cjs/IO/api/all.cjs.map +1 -1
- package/_cjs/IO/api/asyncInterrupt.cjs +7 -4
- package/_cjs/IO/api/asyncInterrupt.cjs.map +1 -1
- package/_cjs/IO/api.cjs +38 -14
- package/_cjs/IO/api.cjs.map +1 -1
- package/_cjs/IO/definition.cjs.map +1 -1
- package/_cjs/IO/runtime.cjs +6 -3
- package/_cjs/IO/runtime.cjs.map +1 -1
- package/_cjs/Layer/api.cjs +4 -1
- package/_cjs/Layer/api.cjs.map +1 -1
- package/_cjs/Push/api.cjs +4 -1
- package/_cjs/Push/api.cjs.map +1 -1
- package/_cjs/Ref/Derived.cjs +35 -8
- package/_cjs/Ref/Derived.cjs.map +1 -1
- package/_cjs/Ref/DerivedAll.cjs +35 -8
- package/_cjs/Ref/DerivedAll.cjs.map +1 -1
- package/_cjs/RuntimeFlags/RuntimeFlags.cjs +3 -4
- package/_cjs/RuntimeFlags/RuntimeFlags.cjs.map +1 -1
- package/_cjs/STM/api/core-api.cjs +4 -1
- package/_cjs/STM/api/core-api.cjs.map +1 -1
- package/_cjs/STM/api.cjs +16 -4
- package/_cjs/STM/api.cjs.map +1 -1
- package/_cjs/Schedule/api.cjs +7 -1
- package/_cjs/Schedule/api.cjs.map +1 -1
- package/_cjs/ScopedRef/api.cjs +2 -2
- package/_cjs/ScopedRef/api.cjs.map +1 -1
- package/_cjs/Sink/api.cjs +7 -1
- package/_cjs/Sink/api.cjs.map +1 -1
- package/_cjs/Stream/api/zipAllWith.cjs +4 -1
- package/_cjs/Stream/api/zipAllWith.cjs.map +1 -1
- package/_cjs/Stream/api/zipWithChunks.cjs +4 -1
- package/_cjs/Stream/api/zipWithChunks.cjs.map +1 -1
- package/_cjs/Stream/api.cjs +36 -15
- package/_cjs/Stream/api.cjs.map +1 -1
- package/_cjs/SupervisorPatch.cjs +38 -15
- package/_cjs/SupervisorPatch.cjs.map +1 -1
- package/_cjs/TRef/definition.cjs +74 -20
- package/_cjs/TRef/definition.cjs.map +1 -1
- package/_mjs/Channel/api/mapOutConcurrentIO.mjs +8 -2
- package/_mjs/Channel/api/mapOutConcurrentIO.mjs.map +1 -1
- package/_mjs/Channel/api/mergeAllWith.mjs +23 -14
- package/_mjs/Channel/api/mergeAllWith.mjs.map +1 -1
- package/_mjs/Channel/api/mergeWith.mjs +16 -4
- package/_mjs/Channel/api/mergeWith.mjs.map +1 -1
- package/_mjs/Channel/api.mjs +132 -37
- package/_mjs/Channel/api.mjs.map +1 -1
- package/_mjs/Channel/core-api.mjs +14 -4
- package/_mjs/Channel/core-api.mjs.map +1 -1
- package/_mjs/Channel/definition.mjs +14 -135
- package/_mjs/Channel/definition.mjs.map +1 -1
- package/_mjs/Channel/internal/ChannelExecutor.mjs +52 -50
- package/_mjs/Channel/internal/ChannelExecutor.mjs.map +1 -1
- package/_mjs/Channel/internal/SingleProducerAsyncInput.mjs +8 -2
- package/_mjs/Channel/internal/SingleProducerAsyncInput.mjs.map +1 -1
- package/_mjs/Console/live.mjs +1 -1
- package/_mjs/Console/live.mjs.map +1 -1
- package/_mjs/Fiber/FiberRuntime.mjs +23 -18
- package/_mjs/Fiber/FiberRuntime.mjs.map +1 -1
- package/_mjs/FiberRef/definition.mjs +3 -1
- package/_mjs/FiberRef/definition.mjs.map +1 -1
- package/_mjs/FiberRef/unsafe.mjs +4 -0
- package/_mjs/FiberRef/unsafe.mjs.map +1 -1
- package/_mjs/Future/api.mjs +12 -12
- package/_mjs/Future/api.mjs.map +1 -1
- package/_mjs/Future/definition.mjs +7 -2
- package/_mjs/Future/definition.mjs.map +1 -1
- package/_mjs/IO/api/all.mjs +4 -4
- package/_mjs/IO/api/all.mjs.map +1 -1
- package/_mjs/IO/api/asyncInterrupt.mjs +7 -4
- package/_mjs/IO/api/asyncInterrupt.mjs.map +1 -1
- package/_mjs/IO/api.mjs +38 -14
- package/_mjs/IO/api.mjs.map +1 -1
- package/_mjs/IO/definition.mjs.map +1 -1
- package/_mjs/IO/runtime.mjs +6 -3
- package/_mjs/IO/runtime.mjs.map +1 -1
- package/_mjs/Layer/api.mjs +4 -1
- package/_mjs/Layer/api.mjs.map +1 -1
- package/_mjs/Push/api.mjs +4 -1
- package/_mjs/Push/api.mjs.map +1 -1
- package/_mjs/Ref/Derived.mjs +35 -8
- package/_mjs/Ref/Derived.mjs.map +1 -1
- package/_mjs/Ref/DerivedAll.mjs +35 -8
- package/_mjs/Ref/DerivedAll.mjs.map +1 -1
- package/_mjs/RuntimeFlags/RuntimeFlags.mjs +3 -4
- package/_mjs/RuntimeFlags/RuntimeFlags.mjs.map +1 -1
- package/_mjs/STM/api/core-api.mjs +4 -1
- package/_mjs/STM/api/core-api.mjs.map +1 -1
- package/_mjs/STM/api.mjs +16 -4
- package/_mjs/STM/api.mjs.map +1 -1
- package/_mjs/Schedule/api.mjs +7 -1
- package/_mjs/Schedule/api.mjs.map +1 -1
- package/_mjs/ScopedRef/api.mjs +2 -2
- package/_mjs/ScopedRef/api.mjs.map +1 -1
- package/_mjs/Sink/api.mjs +7 -1
- package/_mjs/Sink/api.mjs.map +1 -1
- package/_mjs/Stream/api/zipAllWith.mjs +4 -1
- package/_mjs/Stream/api/zipAllWith.mjs.map +1 -1
- package/_mjs/Stream/api/zipWithChunks.mjs +4 -1
- package/_mjs/Stream/api/zipWithChunks.mjs.map +1 -1
- package/_mjs/Stream/api.mjs +36 -15
- package/_mjs/Stream/api.mjs.map +1 -1
- package/_mjs/SupervisorPatch.mjs +38 -15
- package/_mjs/SupervisorPatch.mjs.map +1 -1
- package/_mjs/TRef/definition.mjs +74 -20
- package/_mjs/TRef/definition.mjs.map +1 -1
- package/_src/Channel/api/mapOutConcurrentIO.ts +5 -5
- package/_src/Channel/api/mergeAllWith.ts +9 -9
- package/_src/Channel/api/mergeWith.ts +16 -16
- package/_src/Channel/api.ts +128 -143
- package/_src/Channel/core-api.ts +17 -14
- package/_src/Channel/definition.ts +187 -236
- package/_src/Channel/internal/ChannelExecutor.ts +47 -45
- package/_src/Channel/internal/SingleProducerAsyncInput.ts +2 -2
- package/_src/Console/live.ts +1 -1
- package/_src/Fiber/FiberRuntime.ts +6 -3
- package/_src/FiberRef/definition.ts +4 -1
- package/_src/FiberRef/unsafe.ts +5 -0
- package/_src/Future/definition.ts +19 -3
- package/_src/IO/api/all.ts +14 -15
- package/_src/IO/api/asyncInterrupt.ts +4 -4
- package/_src/IO/api.ts +19 -15
- package/_src/IO/definition.ts +5 -3
- package/_src/IO/runtime.ts +6 -3
- package/_src/Layer/api.ts +4 -1
- package/_src/Push/api.ts +4 -4
- package/_src/Ref/Derived.ts +20 -18
- package/_src/Ref/DerivedAll.ts +21 -18
- package/_src/RuntimeFlags/RuntimeFlags.ts +1 -1
- package/_src/STM/api/core-api.ts +1 -1
- package/_src/STM/api.ts +4 -4
- package/_src/Schedule/api.ts +8 -8
- package/_src/ScopedRef/api.ts +4 -3
- package/_src/Sink/api.ts +8 -8
- package/_src/Stream/api/zipAllWith.ts +4 -4
- package/_src/Stream/api/zipWithChunks.ts +4 -4
- package/_src/Stream/api.ts +21 -19
- package/_src/SupervisorPatch.ts +1 -0
- package/_src/TRef/definition.ts +36 -33
- package/package.json +2 -2
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { ChildExecutorDecision } from "@fncts/io/Channel/ChildExecutorDecision";
|
|
2
|
-
import type { BracketOut, Continuation, Ensuring } from "@fncts/io/Channel/definition";
|
|
2
|
+
import type { BracketOut, Continuation, ContinuationFinalizer, Ensuring } from "@fncts/io/Channel/definition";
|
|
3
3
|
import type { ChannelState } from "@fncts/io/Channel/internal/ChannelState";
|
|
4
4
|
import type { UpstreamPullStrategy } from "@fncts/io/Channel/UpstreamPullStrategy";
|
|
5
5
|
|
|
6
6
|
import { Queue } from "@fncts/base/collection/immutable/Queue";
|
|
7
7
|
import { identity } from "@fncts/base/data/function";
|
|
8
8
|
import { Stack } from "@fncts/base/internal/Stack";
|
|
9
|
-
import { ChannelTag, concrete, concreteContinuation
|
|
9
|
+
import { ChannelPrimitive, ChannelTag, concrete, concreteContinuation } from "@fncts/io/Channel/definition";
|
|
10
10
|
import * as State from "@fncts/io/Channel/internal/ChannelState";
|
|
11
11
|
import { UpstreamPullRequest } from "@fncts/io/Channel/UpstreamPullRequest";
|
|
12
12
|
|
|
@@ -14,7 +14,7 @@ type ErasedChannel<R> = Channel<R, unknown, unknown, unknown, unknown, unknown,
|
|
|
14
14
|
export type ErasedExecutor<R> = ChannelExecutor<R, unknown, unknown, unknown, unknown, unknown, unknown>;
|
|
15
15
|
type ErasedContinuation<R> = Continuation<R, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown>;
|
|
16
16
|
|
|
17
|
-
type Finalizer
|
|
17
|
+
type Finalizer = (exit: Exit<unknown, unknown>) => URIO<any, any>;
|
|
18
18
|
|
|
19
19
|
/*
|
|
20
20
|
* -------------------------------------------------------------------------------------------------
|
|
@@ -303,7 +303,7 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
303
303
|
if (this.input !== null) {
|
|
304
304
|
const inputExecutor = this.input;
|
|
305
305
|
this.input = null;
|
|
306
|
-
const drainer: URIO<Env, unknown> = currentChannel.
|
|
306
|
+
const drainer: URIO<Env, unknown> = currentChannel.i0.awaitRead.zipRight(
|
|
307
307
|
IO.defer(() => {
|
|
308
308
|
const state = inputExecutor.run();
|
|
309
309
|
|
|
@@ -311,16 +311,16 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
311
311
|
case State.ChannelStateTag.Done: {
|
|
312
312
|
const done = inputExecutor.getDone();
|
|
313
313
|
return done.match(
|
|
314
|
-
(cause) => currentChannel.
|
|
315
|
-
(value) => currentChannel.
|
|
314
|
+
(cause) => currentChannel.i0.error(cause),
|
|
315
|
+
(value) => currentChannel.i0.done(value),
|
|
316
316
|
);
|
|
317
317
|
}
|
|
318
318
|
case State.ChannelStateTag.Emit: {
|
|
319
|
-
return currentChannel.
|
|
319
|
+
return currentChannel.i0.emit(inputExecutor.getEmit()).flatMap(() => drainer);
|
|
320
320
|
}
|
|
321
321
|
case State.ChannelStateTag.Effect: {
|
|
322
322
|
return state.effect.matchCauseIO(
|
|
323
|
-
(cause) => currentChannel.
|
|
323
|
+
(cause) => currentChannel.i0.error(cause),
|
|
324
324
|
() => drainer,
|
|
325
325
|
);
|
|
326
326
|
}
|
|
@@ -328,7 +328,7 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
328
328
|
return readUpstream(
|
|
329
329
|
state,
|
|
330
330
|
() => drainer,
|
|
331
|
-
(cause: Cause<any>) => currentChannel.
|
|
331
|
+
(cause: Cause<any>) => currentChannel.i0.error(cause),
|
|
332
332
|
);
|
|
333
333
|
}
|
|
334
334
|
}
|
|
@@ -357,7 +357,7 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
357
357
|
}
|
|
358
358
|
case ChannelTag.PipeTo: {
|
|
359
359
|
const previousInput = this.input;
|
|
360
|
-
const leftExec = new ChannelExecutor(currentChannel.
|
|
360
|
+
const leftExec = new ChannelExecutor(currentChannel.i0, this.providedEnv, (_) =>
|
|
361
361
|
this.executeCloseLastSubstream(_),
|
|
362
362
|
);
|
|
363
363
|
leftExec.input = previousInput;
|
|
@@ -370,7 +370,7 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
370
370
|
return IO.unit;
|
|
371
371
|
}
|
|
372
372
|
});
|
|
373
|
-
this.currentChannel = currentChannel.
|
|
373
|
+
this.currentChannel = currentChannel.i1();
|
|
374
374
|
break;
|
|
375
375
|
}
|
|
376
376
|
case ChannelTag.Read: {
|
|
@@ -379,29 +379,29 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
379
379
|
this.input,
|
|
380
380
|
identity,
|
|
381
381
|
(out) => {
|
|
382
|
-
this.currentChannel = read.
|
|
382
|
+
this.currentChannel = read.i0(out);
|
|
383
383
|
return null;
|
|
384
384
|
},
|
|
385
385
|
(exit) => {
|
|
386
|
-
this.currentChannel = read.
|
|
386
|
+
this.currentChannel = exit.match(read.i1.i1, read.i1.i0);
|
|
387
387
|
return null;
|
|
388
388
|
},
|
|
389
389
|
);
|
|
390
390
|
break;
|
|
391
391
|
}
|
|
392
392
|
case ChannelTag.Done: {
|
|
393
|
-
result = this.doneSucceed(currentChannel.
|
|
393
|
+
result = this.doneSucceed(currentChannel.i0());
|
|
394
394
|
break;
|
|
395
395
|
}
|
|
396
396
|
case ChannelTag.Halt: {
|
|
397
|
-
result = this.doneHalt(currentChannel.
|
|
397
|
+
result = this.doneHalt(currentChannel.i0());
|
|
398
398
|
break;
|
|
399
399
|
}
|
|
400
400
|
case ChannelTag.FromIO: {
|
|
401
401
|
const pio =
|
|
402
402
|
this.providedEnv === null
|
|
403
|
-
? currentChannel.
|
|
404
|
-
: currentChannel.
|
|
403
|
+
? currentChannel.i0
|
|
404
|
+
: currentChannel.i0.provideEnvironment(this.providedEnv as Environment<Env>);
|
|
405
405
|
result = new State.Effect(
|
|
406
406
|
pio.matchCauseIO(
|
|
407
407
|
(cause) => {
|
|
@@ -425,11 +425,11 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
425
425
|
break;
|
|
426
426
|
}
|
|
427
427
|
case ChannelTag.Defer: {
|
|
428
|
-
this.currentChannel = currentChannel.
|
|
428
|
+
this.currentChannel = currentChannel.i0();
|
|
429
429
|
break;
|
|
430
430
|
}
|
|
431
431
|
case ChannelTag.Emit: {
|
|
432
|
-
this.emitted = currentChannel.
|
|
432
|
+
this.emitted = currentChannel.i0();
|
|
433
433
|
this.currentChannel = this.activeSubexecutor !== null ? null : Channel.endNow(undefined);
|
|
434
434
|
result = State._Emit;
|
|
435
435
|
break;
|
|
@@ -444,25 +444,25 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
444
444
|
const prevLastClose = this.closeLastSubstream === null ? IO.unit : this.closeLastSubstream;
|
|
445
445
|
this.closeLastSubstream = prevLastClose.flatMap(() => f);
|
|
446
446
|
});
|
|
447
|
-
const exec = new ChannelExecutor(() => currentChannel.
|
|
447
|
+
const exec = new ChannelExecutor(() => currentChannel.i4, this.providedEnv, innerExecuteLastClose);
|
|
448
448
|
exec.input = this.input;
|
|
449
449
|
this.activeSubexecutor = new PullFromUpstream(
|
|
450
450
|
exec,
|
|
451
|
-
currentChannel.
|
|
451
|
+
currentChannel.i5,
|
|
452
452
|
null,
|
|
453
453
|
Queue.empty(),
|
|
454
|
-
currentChannel.
|
|
455
|
-
currentChannel.
|
|
456
|
-
currentChannel.
|
|
457
|
-
currentChannel.
|
|
454
|
+
currentChannel.i0,
|
|
455
|
+
currentChannel.i1,
|
|
456
|
+
currentChannel.i2,
|
|
457
|
+
currentChannel.i3,
|
|
458
458
|
);
|
|
459
459
|
this.closeLastSubstream = null;
|
|
460
460
|
this.currentChannel = null;
|
|
461
461
|
break;
|
|
462
462
|
}
|
|
463
463
|
case ChannelTag.Fold: {
|
|
464
|
-
this.doneStack = this.doneStack.prepend(currentChannel.
|
|
465
|
-
this.currentChannel = currentChannel.
|
|
464
|
+
this.doneStack = this.doneStack.prepend(currentChannel.i1);
|
|
465
|
+
this.currentChannel = currentChannel.i0;
|
|
466
466
|
break;
|
|
467
467
|
}
|
|
468
468
|
case ChannelTag.BracketOut: {
|
|
@@ -471,8 +471,8 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
471
471
|
}
|
|
472
472
|
case ChannelTag.Provide: {
|
|
473
473
|
const previousEnv = this.providedEnv;
|
|
474
|
-
this.providedEnv = currentChannel.
|
|
475
|
-
this.currentChannel = currentChannel.
|
|
474
|
+
this.providedEnv = currentChannel.i0;
|
|
475
|
+
this.currentChannel = currentChannel.i1;
|
|
476
476
|
this.addFinalizer(() =>
|
|
477
477
|
IO.succeed(() => {
|
|
478
478
|
this.providedEnv = previousEnv;
|
|
@@ -500,7 +500,7 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
500
500
|
/**
|
|
501
501
|
* @tsplus tailRec
|
|
502
502
|
*/
|
|
503
|
-
const unwind = (acc: List<Finalizer
|
|
503
|
+
const unwind = (acc: List<Finalizer>): List<Finalizer> => {
|
|
504
504
|
if (this.doneStack.isEmpty()) {
|
|
505
505
|
return acc.reverse;
|
|
506
506
|
} else {
|
|
@@ -510,7 +510,7 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
510
510
|
if (head._tag === ChannelTag.ContinuationK) {
|
|
511
511
|
return unwind(acc);
|
|
512
512
|
} else {
|
|
513
|
-
return unwind(acc.prepend(head.
|
|
513
|
+
return unwind(acc.prepend(head.i0));
|
|
514
514
|
}
|
|
515
515
|
}
|
|
516
516
|
};
|
|
@@ -520,8 +520,8 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
520
520
|
return effect;
|
|
521
521
|
}
|
|
522
522
|
|
|
523
|
-
private popNextFinalizers(): List<ContinuationFinalizer
|
|
524
|
-
const builder = new ListBuffer<ContinuationFinalizer
|
|
523
|
+
private popNextFinalizers(): List<ContinuationFinalizer> {
|
|
524
|
+
const builder = new ListBuffer<ContinuationFinalizer>();
|
|
525
525
|
/**
|
|
526
526
|
* @tsplus tailrec
|
|
527
527
|
*/
|
|
@@ -980,7 +980,7 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
980
980
|
|
|
981
981
|
if (head._tag === ChannelTag.ContinuationK) {
|
|
982
982
|
this.doneStack = this.doneStack.unsafeTail;
|
|
983
|
-
this.currentChannel = head.
|
|
983
|
+
this.currentChannel = head.i0(z);
|
|
984
984
|
return null;
|
|
985
985
|
} else {
|
|
986
986
|
const finalizers = this.popNextFinalizers();
|
|
@@ -992,7 +992,7 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
992
992
|
return State._Done;
|
|
993
993
|
} else {
|
|
994
994
|
const finalizerEffect = this.runFinalizers(
|
|
995
|
-
finalizers.map((_) => _.
|
|
995
|
+
finalizers.map((_) => _.i0),
|
|
996
996
|
Exit.succeed(z),
|
|
997
997
|
);
|
|
998
998
|
this.storeInProgressFinalizer(finalizerEffect);
|
|
@@ -1020,7 +1020,7 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
1020
1020
|
|
|
1021
1021
|
if (head._tag === ChannelTag.ContinuationK) {
|
|
1022
1022
|
this.doneStack = this.doneStack.unsafeTail;
|
|
1023
|
-
this.currentChannel = head.
|
|
1023
|
+
this.currentChannel = head.i1(cause);
|
|
1024
1024
|
return null;
|
|
1025
1025
|
} else {
|
|
1026
1026
|
const finalizers = this.popNextFinalizers();
|
|
@@ -1032,7 +1032,7 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
1032
1032
|
return State._Done;
|
|
1033
1033
|
} else {
|
|
1034
1034
|
const finalizerEffect = this.runFinalizers(
|
|
1035
|
-
finalizers.map((_) => _.
|
|
1035
|
+
finalizers.map((_) => _.i0),
|
|
1036
1036
|
Exit.failCause(cause),
|
|
1037
1037
|
);
|
|
1038
1038
|
this.storeInProgressFinalizer(finalizerEffect);
|
|
@@ -1049,8 +1049,10 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
1049
1049
|
}
|
|
1050
1050
|
}
|
|
1051
1051
|
|
|
1052
|
-
private addFinalizer(f: Finalizer
|
|
1053
|
-
|
|
1052
|
+
private addFinalizer(f: Finalizer) {
|
|
1053
|
+
const op = new ChannelPrimitive(ChannelTag.ContinuationFinalizer);
|
|
1054
|
+
op.i0 = f;
|
|
1055
|
+
this.doneStack = this.doneStack.prepend(op as any);
|
|
1054
1056
|
}
|
|
1055
1057
|
|
|
1056
1058
|
private provide<Env, OutErr, OutDone>(
|
|
@@ -1064,17 +1066,17 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
1064
1066
|
}
|
|
1065
1067
|
}
|
|
1066
1068
|
|
|
1067
|
-
private runBracketOut(bracketOut: BracketOut
|
|
1069
|
+
private runBracketOut(bracketOut: BracketOut): ChannelState<Env, unknown> | null {
|
|
1068
1070
|
return new State.Effect(
|
|
1069
1071
|
IO.uninterruptible(
|
|
1070
|
-
this.provide(bracketOut.
|
|
1072
|
+
this.provide(bracketOut.i0).matchCauseIO(
|
|
1071
1073
|
(cause) =>
|
|
1072
1074
|
IO.succeed(() => {
|
|
1073
1075
|
this.currentChannel = Channel.failCause(cause);
|
|
1074
1076
|
}),
|
|
1075
1077
|
(out) =>
|
|
1076
1078
|
IO.succeed(() => {
|
|
1077
|
-
this.addFinalizer((e) => this.provide(bracketOut.
|
|
1079
|
+
this.addFinalizer((e) => this.provide(bracketOut.i1(out, e)));
|
|
1078
1080
|
this.currentChannel = Channel.write(() => out);
|
|
1079
1081
|
}),
|
|
1080
1082
|
),
|
|
@@ -1082,8 +1084,8 @@ export class ChannelExecutor<Env, InErr, InElem, InDone, OutErr, OutElem, OutDon
|
|
|
1082
1084
|
);
|
|
1083
1085
|
}
|
|
1084
1086
|
|
|
1085
|
-
private runEnsuring(ensuring: Ensuring
|
|
1086
|
-
this.addFinalizer(ensuring.
|
|
1087
|
-
this.currentChannel = ensuring.
|
|
1087
|
+
private runEnsuring(ensuring: Ensuring) {
|
|
1088
|
+
this.addFinalizer(ensuring.i1);
|
|
1089
|
+
this.currentChannel = ensuring.i0;
|
|
1088
1090
|
}
|
|
1089
1091
|
}
|
|
@@ -139,7 +139,7 @@ export class SingleProducerAsyncInput<Err, Elem, Done>
|
|
|
139
139
|
switch (state._stateTag) {
|
|
140
140
|
case StateTag.Emit: {
|
|
141
141
|
return tuple(
|
|
142
|
-
p.await.matchCause(onError, (de) => de.match(onDone, onElement)),
|
|
142
|
+
p.await.matchCause(onError, (de) => de.match({ Left: onDone, Right: onElement })),
|
|
143
143
|
new StateEmit(state.notifyConsumers.enqueue(p)),
|
|
144
144
|
);
|
|
145
145
|
}
|
|
@@ -153,7 +153,7 @@ export class SingleProducerAsyncInput<Err, Elem, Done>
|
|
|
153
153
|
return tuple(
|
|
154
154
|
state.notifyProducer
|
|
155
155
|
.succeed(undefined)
|
|
156
|
-
.zipRight(p.await.matchCause(onError, (de) => de.match(onDone, onElement))),
|
|
156
|
+
.zipRight(p.await.matchCause(onError, (de) => de.match({ Left: onDone, Right: onElement }))),
|
|
157
157
|
new StateEmit(Queue.single(p)),
|
|
158
158
|
);
|
|
159
159
|
}
|
package/_src/Console/live.ts
CHANGED
|
@@ -293,7 +293,7 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
|
|
|
293
293
|
let ops = 0;
|
|
294
294
|
|
|
295
295
|
while (true) {
|
|
296
|
-
if (this._runtimeFlags.
|
|
296
|
+
if ((this._runtimeFlags & RuntimeFlag.OpSupervision) !== 0) {
|
|
297
297
|
this.getSupervisor().unsafeOnEffect(this, cur);
|
|
298
298
|
}
|
|
299
299
|
|
|
@@ -304,7 +304,7 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
|
|
|
304
304
|
|
|
305
305
|
ops += 1;
|
|
306
306
|
|
|
307
|
-
if (ops >
|
|
307
|
+
if (ops > this.getFiberRef(FiberRef.currentMaxFiberOps)) {
|
|
308
308
|
ops = 0;
|
|
309
309
|
const oldCur = cur;
|
|
310
310
|
const trace = lastTrace;
|
|
@@ -545,7 +545,10 @@ export class FiberRuntime<E, A> implements Fiber.Runtime<E, A> {
|
|
|
545
545
|
}
|
|
546
546
|
|
|
547
547
|
getFiberRef<A>(fiberRef: FiberRef<A>): A {
|
|
548
|
-
|
|
548
|
+
if (this._fiberRefs.unFiberRefs.has(fiberRef)) {
|
|
549
|
+
return this._fiberRefs.unFiberRefs.unsafeGet(fiberRef)!.head[1] as A;
|
|
550
|
+
}
|
|
551
|
+
return fiberRef.initial;
|
|
549
552
|
}
|
|
550
553
|
|
|
551
554
|
tell(message: FiberMessage): void {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { globalValue } from "@fncts/base/data/Global";
|
|
1
2
|
import { AtomicNumber } from "@fncts/base/internal/AtomicNumber";
|
|
2
3
|
|
|
3
4
|
export const FiberRefVariance = Symbol.for("fncts.io.FiberRef.Variance");
|
|
@@ -24,7 +25,9 @@ export declare namespace FiberRef {
|
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
const
|
|
28
|
+
const FiberRefCounterId = Symbol.for("fncts.io.FiberRef.FiberRefCounter");
|
|
29
|
+
|
|
30
|
+
const fiberRefCounter = globalValue(FiberRefCounterId, () => new AtomicNumber(0));
|
|
28
31
|
|
|
29
32
|
/**
|
|
30
33
|
* @tsplus type fncts.io.FiberRef
|
package/_src/FiberRef/unsafe.ts
CHANGED
|
@@ -115,3 +115,8 @@ export const currentIsFatal = FiberRef.unsafeMake<IsFatal>(IsFatal.empty);
|
|
|
115
115
|
export const currentReportFatal = FiberRef.unsafeMake<(t: unknown) => never>((t) => {
|
|
116
116
|
throw t;
|
|
117
117
|
});
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* @tsplus static fncts.io.FiberRefOps currentMaxFiberOps
|
|
121
|
+
*/
|
|
122
|
+
export const currentMaxFiberOps = FiberRef.unsafeMake<number>(2048);
|
|
@@ -1,14 +1,30 @@
|
|
|
1
|
+
export const FutureTypeId = Symbol.for("fncts.io.Future");
|
|
2
|
+
export type FutureTypeId = typeof FutureTypeId;
|
|
3
|
+
|
|
4
|
+
export const FutureVariance = Symbol.for("fncts.io.Future.Variance");
|
|
5
|
+
export type FutureVariance = typeof FutureVariance;
|
|
6
|
+
|
|
1
7
|
/**
|
|
2
8
|
* @tsplus type fncts.io.Future
|
|
3
9
|
* @tsplus companion fncts.io.FutureOps
|
|
4
10
|
*/
|
|
5
|
-
export class Future<E, A> {
|
|
11
|
+
export class Future<in out E, in out A> {
|
|
12
|
+
readonly [FutureTypeId]: FutureTypeId = FutureTypeId;
|
|
13
|
+
declare FutureVariance: {
|
|
14
|
+
readonly _A: (_: A) => A;
|
|
15
|
+
readonly _E: (_: E) => E;
|
|
16
|
+
};
|
|
6
17
|
constructor(public state: State<E, A>, readonly blockingOn: FiberId) {}
|
|
7
18
|
}
|
|
8
19
|
|
|
20
|
+
export declare namespace Future {
|
|
21
|
+
type ErrorOf<X> = [X] extends [{ [FutureVariance]: { _E: (_: infer E) => infer E } }] ? E : never;
|
|
22
|
+
type ValueOf<X> = [X] extends [{ [FutureVariance]: { _A: (_: infer A) => infer A } }] ? A : never;
|
|
23
|
+
}
|
|
24
|
+
|
|
9
25
|
export const enum FutureStateTag {
|
|
10
|
-
Done
|
|
11
|
-
Pending
|
|
26
|
+
Done,
|
|
27
|
+
Pending,
|
|
12
28
|
}
|
|
13
29
|
|
|
14
30
|
export class Pending<E, A> {
|
package/_src/IO/api/all.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { _A, _E, _R } from "@fncts/base/types";
|
|
2
|
-
import type { EnvironmentOf, ErrorOf, IOVariance, ValueOf } from "@fncts/io/IO";
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* @tsplus static fncts.io.IOOps all
|
|
@@ -7,19 +6,19 @@ import type { EnvironmentOf, ErrorOf, IOVariance, ValueOf } from "@fncts/io/IO";
|
|
|
7
6
|
export function all<T extends ReadonlyArray<IO<any, any, any>>>(
|
|
8
7
|
ios: [...T],
|
|
9
8
|
): IO<
|
|
10
|
-
{ [K in number]: EnvironmentOf<T[K]> }[number],
|
|
11
|
-
{ [K in number]: ErrorOf<T[K]> }[number],
|
|
12
|
-
{ [K in keyof T]: ValueOf<T[K]> }
|
|
9
|
+
{ [K in number]: IO.EnvironmentOf<T[K]> }[number],
|
|
10
|
+
{ [K in number]: IO.ErrorOf<T[K]> }[number],
|
|
11
|
+
{ [K in keyof T]: IO.ValueOf<T[K]> }
|
|
13
12
|
>;
|
|
14
13
|
export function all<T extends Iterable<IO<any, any, any>>>(
|
|
15
14
|
ios: T,
|
|
16
|
-
): [T] extends [Iterable<infer A>] ? IO<EnvironmentOf<A>, ErrorOf<A>, Conc<ValueOf<A>>> : never;
|
|
15
|
+
): [T] extends [Iterable<infer A>] ? IO<IO.EnvironmentOf<A>, IO.ErrorOf<A>, Conc<IO.ValueOf<A>>> : never;
|
|
17
16
|
export function all<T extends Record<string, IO<any, any, any>>>(
|
|
18
17
|
ios: T,
|
|
19
18
|
): IO<
|
|
20
|
-
{ [K in keyof T]: EnvironmentOf<T[K]> }[keyof T],
|
|
21
|
-
{ [K in keyof T]: ErrorOf<T[K]> }[keyof T],
|
|
22
|
-
{ [K in keyof T]: ValueOf<T[K]> }
|
|
19
|
+
{ [K in keyof T]: IO.EnvironmentOf<T[K]> }[keyof T],
|
|
20
|
+
{ [K in keyof T]: IO.ErrorOf<T[K]> }[keyof T],
|
|
21
|
+
{ [K in keyof T]: IO.ValueOf<T[K]> }
|
|
23
22
|
>;
|
|
24
23
|
export function all(ios: Record<string, IO<any, any, any>> | Iterable<IO<any, any, any>>): IO<any, any, any> {
|
|
25
24
|
if (Symbol.iterator in ios) {
|
|
@@ -38,19 +37,19 @@ export function all(ios: Record<string, IO<any, any, any>> | Iterable<IO<any, an
|
|
|
38
37
|
export function allConcurrent<T extends ReadonlyArray<IO<any, any, any>>>(
|
|
39
38
|
ios: [...T],
|
|
40
39
|
): IO<
|
|
41
|
-
{ [K in number]: EnvironmentOf<T[K]> }[number],
|
|
42
|
-
{ [K in number]: ErrorOf<T[K]> }[number],
|
|
43
|
-
{ [K in keyof T]: ValueOf<T[K]> }
|
|
40
|
+
{ [K in number]: IO.EnvironmentOf<T[K]> }[number],
|
|
41
|
+
{ [K in number]: IO.ErrorOf<T[K]> }[number],
|
|
42
|
+
{ [K in keyof T]: IO.ValueOf<T[K]> }
|
|
44
43
|
>;
|
|
45
44
|
export function allConcurrent<T extends Iterable<IO<any, any, any>>>(
|
|
46
45
|
ios: T,
|
|
47
|
-
): [T] extends [Iterable<infer A>] ? IO<EnvironmentOf<A>, ErrorOf<A>, Conc<ValueOf<A>>> : never;
|
|
46
|
+
): [T] extends [Iterable<infer A>] ? IO<IO.EnvironmentOf<A>, IO.ErrorOf<A>, Conc<IO.ValueOf<A>>> : never;
|
|
48
47
|
export function allConcurrent<T extends Record<string, IO<any, any, any>>>(
|
|
49
48
|
ios: T,
|
|
50
49
|
): IO<
|
|
51
|
-
{ [K in keyof T]: EnvironmentOf<T[K]> }[keyof T],
|
|
52
|
-
{ [K in keyof T]: ErrorOf<T[K]> }[keyof T],
|
|
53
|
-
{ [K in keyof T]: ValueOf<T[K]> }
|
|
50
|
+
{ [K in keyof T]: IO.EnvironmentOf<T[K]> }[keyof T],
|
|
51
|
+
{ [K in keyof T]: IO.ErrorOf<T[K]> }[keyof T],
|
|
52
|
+
{ [K in keyof T]: IO.ValueOf<T[K]> }
|
|
54
53
|
>;
|
|
55
54
|
export function allConcurrent(ios: Record<string, IO<any, any, any>> | Iterable<IO<any, any, any>>): IO<any, any, any> {
|
|
56
55
|
if (Symbol.iterator in ios) {
|
|
@@ -25,14 +25,14 @@ export function asyncInterrupt<R, E, A>(
|
|
|
25
25
|
let cancelerRef: URIO<R, any> = IO.unit!;
|
|
26
26
|
return IO.async<R, E, A>((k) => {
|
|
27
27
|
const result = register(k);
|
|
28
|
-
result.match(
|
|
29
|
-
(canceler) => {
|
|
28
|
+
result.match({
|
|
29
|
+
Left: (canceler) => {
|
|
30
30
|
cancelerRef = canceler;
|
|
31
31
|
},
|
|
32
|
-
(done) => {
|
|
32
|
+
Right: (done) => {
|
|
33
33
|
k(done);
|
|
34
34
|
},
|
|
35
|
-
);
|
|
35
|
+
});
|
|
36
36
|
}, blockingOn).onInterrupt(() => cancelerRef);
|
|
37
37
|
});
|
|
38
38
|
}
|
package/_src/IO/api.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { RuntimeFlags } from "@fncts/io/RuntimeFlags";
|
|
|
6
6
|
|
|
7
7
|
import { IOError } from "@fncts/base/data/exceptions";
|
|
8
8
|
import { identity, pipe, tuple } from "@fncts/base/data/function";
|
|
9
|
-
import { IOPrimitive,IOTag } from "@fncts/io/IO/definition";
|
|
9
|
+
import { IOPrimitive, IOTag } from "@fncts/io/IO/definition";
|
|
10
10
|
import { IO } from "@fncts/io/IO/definition";
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -122,10 +122,10 @@ export function bitap<E, A, R1, E1, R2, E2>(
|
|
|
122
122
|
return <R>(self: IO<R, E, A>): IO<R | R1 | R2, E | E1 | E2, A> => {
|
|
123
123
|
return self.matchCauseIO(
|
|
124
124
|
(cause) =>
|
|
125
|
-
cause.failureOrCause.match(
|
|
126
|
-
(e) => onFailure(e).flatMap(() => IO.failCauseNow(cause)),
|
|
127
|
-
() => IO.failCauseNow(cause),
|
|
128
|
-
),
|
|
125
|
+
cause.failureOrCause.match({
|
|
126
|
+
Left: (e) => onFailure(e).flatMap(() => IO.failCauseNow(cause)),
|
|
127
|
+
Right: () => IO.failCauseNow(cause),
|
|
128
|
+
}),
|
|
129
129
|
(a) => onSuccess(a).zipRight(IO.succeedNow(a)),
|
|
130
130
|
);
|
|
131
131
|
};
|
|
@@ -200,7 +200,8 @@ export function catchAllCause<R, E, A, R1, E1, A1>(f: (_: Cause<E>) => IO<R1, E1
|
|
|
200
200
|
export function catchJust<E, R1, E1, A1>(f: (e: E) => Maybe<IO<R1, E1, A1>>, __tsplusTrace?: string) {
|
|
201
201
|
return <R, A>(ma: IO<R, E, A>): IO<R | R1, E | E1, A | A1> => {
|
|
202
202
|
return ma.matchCauseIO(
|
|
203
|
-
(cause) =>
|
|
203
|
+
(cause) =>
|
|
204
|
+
cause.failureOrCause.match({ Left: (e) => f(e).getOrElse(IO.failCauseNow(cause)), Right: IO.failCauseNow }),
|
|
204
205
|
IO.succeedNow,
|
|
205
206
|
);
|
|
206
207
|
};
|
|
@@ -804,7 +805,7 @@ export function forever<R, E, A>(ma: IO<R, E, A>, __tsplusTrace?: string): IO<R,
|
|
|
804
805
|
* @tsplus static fncts.io.IOOps fromEither
|
|
805
806
|
*/
|
|
806
807
|
export function fromEither<E, A>(either: Lazy<Either<E, A>>, __tsplusTrace?: string): IO<never, E, A> {
|
|
807
|
-
return IO.succeed(either).flatMap((ea) => ea.match(IO.failNow, IO.succeedNow));
|
|
808
|
+
return IO.succeed(either).flatMap((ea) => ea.match({ Left: IO.failNow, Right: IO.succeedNow }));
|
|
808
809
|
}
|
|
809
810
|
|
|
810
811
|
/**
|
|
@@ -814,7 +815,7 @@ export function fromEither<E, A>(either: Lazy<Either<E, A>>, __tsplusTrace?: str
|
|
|
814
815
|
* @tsplus getter fncts.Either toIO
|
|
815
816
|
*/
|
|
816
817
|
export function fromEitherNow<E, A>(either: Either<E, A>, __tsplusTrace?: string): IO<never, E, A> {
|
|
817
|
-
return either.match(IO.failNow, IO.succeedNow);
|
|
818
|
+
return either.match({ Left: IO.failNow, Right: IO.succeedNow });
|
|
818
819
|
}
|
|
819
820
|
|
|
820
821
|
/**
|
|
@@ -1249,7 +1250,10 @@ export function matchIO<R1, R2, E, E1, E2, A, A1, A2>(
|
|
|
1249
1250
|
__tsplusTrace?: string,
|
|
1250
1251
|
) {
|
|
1251
1252
|
return <R>(self: IO<R, E, A>): IO<R | R1 | R2, E1 | E2, A1 | A2> => {
|
|
1252
|
-
return self.matchCauseIO(
|
|
1253
|
+
return self.matchCauseIO(
|
|
1254
|
+
(cause) => cause.failureOrCause.match({ Left: onFailure, Right: IO.failCauseNow }),
|
|
1255
|
+
onSuccess,
|
|
1256
|
+
);
|
|
1253
1257
|
};
|
|
1254
1258
|
}
|
|
1255
1259
|
|
|
@@ -1281,7 +1285,7 @@ export function matchTraceIO<E, A, R1, E1, A1, R2, E2, A2>(
|
|
|
1281
1285
|
) {
|
|
1282
1286
|
return <R>(ma: IO<R, E, A>): IO<R | R1 | R2, E1 | E2, A1 | A2> => {
|
|
1283
1287
|
return ma.matchCauseIO(
|
|
1284
|
-
(cause) => cause.failureTraceOrCause.match(([e, trace]) => onFailure(e, trace), IO.failCauseNow),
|
|
1288
|
+
(cause) => cause.failureTraceOrCause.match({ Left: ([e, trace]) => onFailure(e, trace), Right: IO.failCauseNow }),
|
|
1285
1289
|
onSuccess,
|
|
1286
1290
|
);
|
|
1287
1291
|
};
|
|
@@ -1786,7 +1790,7 @@ export function tryCatch<E, A>(effect: Lazy<A>, onThrow: (error: unknown) => E,
|
|
|
1786
1790
|
* @tsplus getter fncts.io.IO absolve
|
|
1787
1791
|
*/
|
|
1788
1792
|
export function absolve<R, E, E1, A>(ma: IO<R, E, Either<E1, A>>, __tsplusTrace?: string): IO<R, E | E1, A> {
|
|
1789
|
-
return ma.flatMap((ea) => ea.match(IO.failNow, IO.succeedNow));
|
|
1793
|
+
return ma.flatMap((ea) => ea.match({ Left: IO.failNow, Right: IO.succeedNow }));
|
|
1790
1794
|
}
|
|
1791
1795
|
|
|
1792
1796
|
/**
|
|
@@ -1824,10 +1828,10 @@ export function tapError<E, R1, E1>(f: (e: E) => IO<R1, E1, any>, __tsplusTrace?
|
|
|
1824
1828
|
return <R, A>(self: IO<R, E, A>) =>
|
|
1825
1829
|
self.matchCauseIO(
|
|
1826
1830
|
(cause) =>
|
|
1827
|
-
cause.failureOrCause.match(
|
|
1828
|
-
(e) => f(e).flatMap(() => IO.failCauseNow(cause)),
|
|
1829
|
-
(_) => IO.failCauseNow(cause),
|
|
1830
|
-
),
|
|
1831
|
+
cause.failureOrCause.match({
|
|
1832
|
+
Left: (e) => f(e).flatMap(() => IO.failCauseNow(cause)),
|
|
1833
|
+
Right: (_) => IO.failCauseNow(cause),
|
|
1834
|
+
}),
|
|
1831
1835
|
IO.succeedNow,
|
|
1832
1836
|
);
|
|
1833
1837
|
}
|
package/_src/IO/definition.ts
CHANGED
|
@@ -33,9 +33,11 @@ export abstract class IO<R, E, A> {
|
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
export
|
|
37
|
-
export type
|
|
38
|
-
export type
|
|
36
|
+
export declare namespace IO {
|
|
37
|
+
export type EnvironmentOf<T> = [T] extends [{ [IOVariance]: { _R: () => infer R } }] ? R : never;
|
|
38
|
+
export type ErrorOf<T> = [T] extends [{ [IOVariance]: { _E: () => infer E } }] ? E : never;
|
|
39
|
+
export type ValueOf<T> = [T] extends [{ [IOVariance]: { _A: () => infer A } }] ? A : never;
|
|
40
|
+
}
|
|
39
41
|
|
|
40
42
|
declare module "@fncts/base/data/Either/definition" {
|
|
41
43
|
interface Either<E, A> extends IO<never, E, A> {}
|
package/_src/IO/runtime.ts
CHANGED
|
@@ -96,9 +96,12 @@ export class Runtime<R> {
|
|
|
96
96
|
};
|
|
97
97
|
|
|
98
98
|
unsafeRun = <E, A>(io: IO<R, E, A>, __tsplusTrace?: string): Exit<E, A> => {
|
|
99
|
-
return this.unsafeRunOrFork(io).match(
|
|
100
|
-
|
|
101
|
-
|
|
99
|
+
return this.unsafeRunOrFork(io).match({
|
|
100
|
+
Left: () => {
|
|
101
|
+
throw new Error("Encountered async boundary");
|
|
102
|
+
},
|
|
103
|
+
Right: Function.identity,
|
|
104
|
+
});
|
|
102
105
|
};
|
|
103
106
|
}
|
|
104
107
|
|
package/_src/Layer/api.ts
CHANGED
|
@@ -205,7 +205,10 @@ export function matchLayer<E, ROut, RIn1, E1, ROut1, RIn2, E2, ROut2>(
|
|
|
205
205
|
__tsplusTrace?: string,
|
|
206
206
|
) {
|
|
207
207
|
return <RIn>(self: Layer<RIn, E, ROut>): Layer<RIn | RIn1 | RIn2, E1 | E2, ROut1 | ROut2> => {
|
|
208
|
-
return self.matchCauseLayer(
|
|
208
|
+
return self.matchCauseLayer(
|
|
209
|
+
(cause) => cause.failureOrCause.match({ Left: failure, Right: Layer.failCauseNow }),
|
|
210
|
+
success,
|
|
211
|
+
);
|
|
209
212
|
};
|
|
210
213
|
}
|
|
211
214
|
|
package/_src/Push/api.ts
CHANGED
|
@@ -36,10 +36,10 @@ export function asyncInterrupt<R, E, A>(
|
|
|
36
36
|
};
|
|
37
37
|
const eitherPush = Δ(IO(make(unsafeSink)));
|
|
38
38
|
Δ(
|
|
39
|
-
eitherPush.match(
|
|
40
|
-
(canceller) => future.await.onInterrupt(canceller),
|
|
41
|
-
(push) => push.run(sink),
|
|
42
|
-
),
|
|
39
|
+
eitherPush.match({
|
|
40
|
+
Left: (canceller) => future.await.onInterrupt(canceller),
|
|
41
|
+
Right: (push) => push.run(sink),
|
|
42
|
+
}),
|
|
43
43
|
);
|
|
44
44
|
}).scoped,
|
|
45
45
|
);
|