@fncts/io 0.0.38 → 0.0.39
Sign up to get free protection for your applications and to get access to all the features.
- package/Channel/definition.d.ts +108 -104
- package/FiberRef/unsafe.d.ts +5 -0
- package/Future/definition.d.ts +24 -3
- 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/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/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/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/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/asyncInterrupt.ts +4 -4
- package/_src/IO/api.ts +19 -15
- 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> {
|
@@ -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/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
|
);
|
package/_src/Ref/Derived.ts
CHANGED
@@ -35,8 +35,8 @@ export class Derived<EA, EB, A, B> extends RefInternal<never, never, EA, EB, A,
|
|
35
35
|
new Derived<EC, ED, C, D>((f) =>
|
36
36
|
f(
|
37
37
|
value,
|
38
|
-
(s) => getEither(s).match((e) => Either.left(eb(e)), bd),
|
39
|
-
(c) => ca(c).flatMap((a) => setEither(a).match((e) => Either.left(ea(e)), Either.right)),
|
38
|
+
(s) => getEither(s).match({ Left: (e) => Either.left(eb(e)), Right: bd }),
|
39
|
+
(c) => ca(c).flatMap((a) => setEither(a).match({ Left: (e) => Either.left(ea(e)), Right: Either.right })),
|
40
40
|
),
|
41
41
|
),
|
42
42
|
);
|
@@ -54,41 +54,43 @@ export class Derived<EA, EB, A, B> extends RefInternal<never, never, EA, EB, A,
|
|
54
54
|
new DerivedAll<EC, ED, C, D>((f) =>
|
55
55
|
f(
|
56
56
|
value,
|
57
|
-
(s) => getEither(s).match((e) => Either.left(eb(e)), bd),
|
57
|
+
(s) => getEither(s).match({ Left: (e) => Either.left(eb(e)), Right: bd }),
|
58
58
|
(c) => (s) =>
|
59
59
|
getEither(s)
|
60
|
-
.match(
|
61
|
-
(eb) => Either.left(ec(eb)),
|
62
|
-
(b) => ca(c)(b),
|
63
|
-
)
|
64
|
-
.flatMap((a) => setEither(a).match((e) => Either.left(ea(e)), Either.right)),
|
60
|
+
.match({
|
61
|
+
Left: (eb) => Either.left(ec(eb)),
|
62
|
+
Right: (b) => ca(c)(b),
|
63
|
+
})
|
64
|
+
.flatMap((a) => setEither(a).match({ Left: (e) => Either.left(ea(e)), Right: Either.right })),
|
65
65
|
),
|
66
66
|
),
|
67
67
|
);
|
68
68
|
}
|
69
69
|
|
70
70
|
get get(): FIO<EB, B> {
|
71
|
-
return this.use((value, getEither) =>
|
71
|
+
return this.use((value, getEither) =>
|
72
|
+
value.get.flatMap((s) => getEither(s).match({ Left: IO.failNow, Right: IO.succeedNow })),
|
73
|
+
);
|
72
74
|
}
|
73
75
|
|
74
76
|
set(a: A): FIO<EA, void> {
|
75
|
-
return this.use((value, _, setEither) => setEither(a).match(IO.failNow, (s) => value.set(s)));
|
77
|
+
return this.use((value, _, setEither) => setEither(a).match({ Left: IO.failNow, Right: (s) => value.set(s) }));
|
76
78
|
}
|
77
79
|
|
78
80
|
modify<C>(f: (b: B) => readonly [C, A], __tsplusTrace?: string | undefined): IO<never, EA | EB, C> {
|
79
81
|
return this.use(
|
80
82
|
(value, getEither, setEither) =>
|
81
83
|
value.modify((s) =>
|
82
|
-
getEither(s).match(
|
83
|
-
(e) => tuple(Either.left(e), s),
|
84
|
-
(a1) => {
|
84
|
+
getEither(s).match({
|
85
|
+
Left: (e) => tuple(Either.left(e), s),
|
86
|
+
Right: (a1) => {
|
85
87
|
const [b, a2] = f(a1);
|
86
|
-
return setEither(a2).match(
|
87
|
-
(e) => tuple(Either.left(e), s),
|
88
|
-
(s) => tuple(Either.right<EA | EB, C>(b), s),
|
89
|
-
);
|
88
|
+
return setEither(a2).match({
|
89
|
+
Left: (e) => tuple(Either.left(e), s),
|
90
|
+
Right: (s) => tuple(Either.right<EA | EB, C>(b), s),
|
91
|
+
});
|
90
92
|
},
|
91
|
-
),
|
93
|
+
}),
|
92
94
|
).absolve,
|
93
95
|
);
|
94
96
|
}
|